Contract 0x077cb9df4e5f1d9f734a20a23d4c74d0868327c5

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xb77f491a8c916ac5a3bee3fb396031bb26738dffb7bbabd5977fb833b78c3cc6Add Tokens94738802021-10-27 6:20:089 secs ago0x9ab363aee708075b0e19bf0c80740b68ac493c4b IN  0x077cb9df4e5f1d9f734a20a23d4c74d0868327c50 HT0.0002735372.25
0x134507332990538f75a48528cb27820c2bbb9ec66d2f76d84afda5269f53a811Add Tokens94738492021-10-27 6:18:351 min ago0x9ab363aee708075b0e19bf0c80740b68ac493c4b IN  0x077cb9df4e5f1d9f734a20a23d4c74d0868327c50 HT0.000273512.25
0xeb54fd58246dee6a259024b526f8fb6cc5ad9575a508653dd671cecde63d3224Add Tokens94738272021-10-27 6:17:292 mins ago0x9ab363aee708075b0e19bf0c80740b68ac493c4b IN  0x077cb9df4e5f1d9f734a20a23d4c74d0868327c50 HT0.0002735372.25
0x44d0e3fa9f70782447d5c4b9b571b390de1b549e8ae4f7763c4c58b9f13f94ffAdd Tokens94738212021-10-27 6:17:113 mins ago0x9ab363aee708075b0e19bf0c80740b68ac493c4b IN  0x077cb9df4e5f1d9f734a20a23d4c74d0868327c50 HT0.0002735372.25
0x50c4dcd43f49eebddb8cd6be833f4e30edbe4cd1240951d11f1fd2c261374c0bBurn Token94738012021-10-27 6:16:114 mins ago0x9ab363aee708075b0e19bf0c80740b68ac493c4b IN  0x077cb9df4e5f1d9f734a20a23d4c74d0868327c50 HT0.000070544252.25
0x0fc9a3167469aad8ca0a1407d1c6295302a64e8919c7d3dd01e6f86f724985d9Add Tokens94737922021-10-27 6:15:444 mins ago0x9ab363aee708075b0e19bf0c80740b68ac493c4b IN  0x077cb9df4e5f1d9f734a20a23d4c74d0868327c50 HT0.0002735372.25
0xea8d21bc417ad6119cb3a2026dfe7b76870e327cbbe70a127daa8d3b62b99d0cAdd Tokens94737692021-10-27 6:14:355 mins ago0x9ab363aee708075b0e19bf0c80740b68ac493c4b IN  0x077cb9df4e5f1d9f734a20a23d4c74d0868327c50 HT0.0002735372.25
0x0e88b1c62ff9c03c7ee312e45cab32e198988e255f3cf18ffb3027ef1ae0423fAdd Tokens94737532021-10-27 6:13:476 mins ago0x9ab363aee708075b0e19bf0c80740b68ac493c4b IN  0x077cb9df4e5f1d9f734a20a23d4c74d0868327c50 HT0.0002735372.25
0x7b31df4f741a517a131c9e1cfdf7e2aa481b49e0de170021aafc5c564e68b365Burn Token94737412021-10-27 6:13:117 mins ago0x9ab363aee708075b0e19bf0c80740b68ac493c4b IN  0x077cb9df4e5f1d9f734a20a23d4c74d0868327c50 HT0.000070544252.25
0x4e770dfc7ff869aa0d2516e3996c710b4be30e43c571f270ae8202fe0ae66b4aBurn Token94737402021-10-27 6:13:087 mins ago0x9ab363aee708075b0e19bf0c80740b68ac493c4b IN  0x077cb9df4e5f1d9f734a20a23d4c74d0868327c50 HT0.000070544252.25
0xa680cec7f7158b97c5d6f3b6a68bd22e6aba9b74082775579e181c02f9521f0dBurn Token94737382021-10-27 6:13:027 mins ago0x9ab363aee708075b0e19bf0c80740b68ac493c4b IN  0x077cb9df4e5f1d9f734a20a23d4c74d0868327c50 HT0.000070544252.25
0x632b10e8bf3f13596c6b1c349fb84c775c3786d9436ac0bf99bda291d15c127dAdd Tokens94737352021-10-27 6:12:537 mins ago0x9ab363aee708075b0e19bf0c80740b68ac493c4b IN  0x077cb9df4e5f1d9f734a20a23d4c74d0868327c50 HT0.0002735372.25
0x84fabcb36770cecc7cb65c5edbf7c5e3d09e451bb7d4eafacbdcdbe17e1f8190Add Tokens94737242021-10-27 6:12:207 mins ago0x9ab363aee708075b0e19bf0c80740b68ac493c4b IN  0x077cb9df4e5f1d9f734a20a23d4c74d0868327c50 HT0.0002735372.25
0xfdcc27568038ea2578dbc159f03f79a5591f6580a06d2e2028f7bb2c478e0d15Add Tokens94736982021-10-27 6:11:029 mins ago0x9ab363aee708075b0e19bf0c80740b68ac493c4b IN  0x077cb9df4e5f1d9f734a20a23d4c74d0868327c50 HT0.0002735372.25
0xf856b21a9487f6f897dd3df0a12fe4050e1b55a945b8cf27ef89ca589729e501Add Tokens94736982021-10-27 6:11:029 mins ago0x9ab363aee708075b0e19bf0c80740b68ac493c4b IN  0x077cb9df4e5f1d9f734a20a23d4c74d0868327c50 HT0.0002735372.25
0x371105775e3408b3d8c51b2ad2800a799dee99f3ec09d37ffae9031cff1dc61dBurn Token94736232021-10-27 6:07:1713 mins ago0x9ab363aee708075b0e19bf0c80740b68ac493c4b IN  0x077cb9df4e5f1d9f734a20a23d4c74d0868327c50 HT0.000070544252.25
0x971ef2dc465cbdee80b977071e4c8fe7e42ddb2a9be4cc8d9634a3d12c828c2bBurn Token94736212021-10-27 6:07:1113 mins ago0x9ab363aee708075b0e19bf0c80740b68ac493c4b IN  0x077cb9df4e5f1d9f734a20a23d4c74d0868327c50 HT0.000070544252.25
0x912d42ad75a761ca4c4c5d1bd4b033779468035d4e0983a732b7d1ddd5260b3aBurn Token94735542021-10-27 6:03:5016 mins ago0x9ab363aee708075b0e19bf0c80740b68ac493c4b IN  0x077cb9df4e5f1d9f734a20a23d4c74d0868327c50 HT0.000070544252.25
0x3b1300f6c89e81133f6bee8d1a60a96fb6d33a452c6a69004b63dea41f9a77f7Burn Token94735442021-10-27 6:03:2016 mins ago0x9ab363aee708075b0e19bf0c80740b68ac493c4b IN  0x077cb9df4e5f1d9f734a20a23d4c74d0868327c50 HT0.000070544252.25
0x9fb76b36267b8e0e9aa403507a6c177111a5732e456caafe9c3a9c7ae74a7090Add Tokens94735322021-10-27 6:02:4417 mins ago0x9ab363aee708075b0e19bf0c80740b68ac493c4b IN  0x077cb9df4e5f1d9f734a20a23d4c74d0868327c50 HT0.0002735372.25
0xe9b896ff1ba7e94523947b689d83834ce94c550eeb6374d831591e8196b2497fAdd Tokens94735272021-10-27 6:02:2917 mins ago0x9ab363aee708075b0e19bf0c80740b68ac493c4b IN  0x077cb9df4e5f1d9f734a20a23d4c74d0868327c50 HT0.0003120122.25
0x48b804c36667cb5598e26fac7cdb08ee6969d128adde6703ef56f694eeec2c9aAdd Tokens94734922021-10-27 6:00:4419 mins ago0x9ab363aee708075b0e19bf0c80740b68ac493c4b IN  0x077cb9df4e5f1d9f734a20a23d4c74d0868327c50 HT0.0002735372.25
0x96f64eb40745b97062039dfe888cb26886bdcca52381d194816c34817134c311Add Tokens94733722021-10-27 5:54:4425 mins ago0x9ab363aee708075b0e19bf0c80740b68ac493c4b IN  0x077cb9df4e5f1d9f734a20a23d4c74d0868327c50 HT0.0002735372.25
0x2936ed1d8491c4607eec727769f704a9fb673f6d10cfc9f9cbb29c5b795a7becAdd Tokens94733392021-10-27 5:53:0527 mins ago0x9ab363aee708075b0e19bf0c80740b68ac493c4b IN  0x077cb9df4e5f1d9f734a20a23d4c74d0868327c50 HT0.0002735372.25
0x423984ee4340775edd777ee1f7e1b9866c458972b75046f08aa4b467e56f978bAdd Tokens94733162021-10-27 5:51:5628 mins ago0x9ab363aee708075b0e19bf0c80740b68ac493c4b IN  0x077cb9df4e5f1d9f734a20a23d4c74d0868327c50 HT0.0002735372.25
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MPNFT

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at hecoinfo.com on 2021-09-24
*/

// SPDX-License-Identifier: SimPL-2.0

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


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


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


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



/**
 * @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;
        // solhint-disable-next-line no-inline-assembly
        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");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

/*
 * @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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


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


/**
 * @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 {
        require(_msgSender() != operator, "ERC1155: setting approval status for self");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_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(to != address(0), "ERC1155: transfer to the zero address");
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        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");
        _balances[id][from] = fromBalance - amount;
        _balances[id][to] += amount;

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

        _doSafeTransferAcceptanceCheck(operator, 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(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );

        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");
            _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 `account`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {
        require(account != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

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

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

        _doSafeTransferAcceptanceCheck(operator, address(0), account, 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 (uint 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 `account`
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens of token type `id`.
     */
    function _burn(address account, uint256 id, uint256 amount) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

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

        uint256 accountBalance = _balances[id][account];
        require(accountBalance >= amount, "ERC1155: burn amount exceeds balance");
        _balances[id][account] = accountBalance - amount;

        emit TransferSingle(operator, account, 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 account, uint256[] memory ids, uint256[] memory amounts) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

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

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

            uint256 accountBalance = _balances[id][account];
            require(accountBalance >= amount, "ERC1155: burn amount exceeds balance");
            _balances[id][account] = accountBalance - amount;
        }

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

    /**
     * @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(to).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(to).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;
    }
}


contract MPNFT is ERC1155, IERC1155Receiver{
    address private _governance;
    address private _ibox_exchange;
    uint256 private _index;

    mapping(uint256=>string) private _uris;


    struct UserNftInfo{
        mapping(uint256=> int256) _nfts;
        uint256[] _nft_ids;
    }
    mapping(address=>UserNftInfo) private _user_nfts;

    event AddTokensEvent(
        uint256 []assetId,
        string []uris,
        uint256[] ids,
        uint256 requestId
    );


    event DeleteNFTEvent(
        uint256 requestId,
        address user,
        uint256 assetId
    );

    function addUserNftInfo(address user, uint256 assetId) internal{
        if (_user_nfts[user]._nfts[assetId] == 0){
            _user_nfts[user]._nfts[assetId] = 1;
            _user_nfts[user]._nft_ids.push(assetId);
        }

    }


    modifier onlyGovernance(){
        require (msg.sender == _governance, "nft only governance cann call this");

        _;
    }

    

    constructor (address governance_, address ibox_exchange) public ERC1155("http://localhost:28080/e/{id}.json"){
        _governance = governance_;
        _ibox_exchange = ibox_exchange;
        _index = 10000;
    }

    function setIboxExchange(address ibox_exchange) external onlyGovernance{
        _ibox_exchange = ibox_exchange;
    }

    function getIboxExchange () public view returns(address){
        return _ibox_exchange;
    }


    function createTokenForIboxExchange ( uint256 amount, string memory uri) public returns (uint256){
        require (msg.sender == _ibox_exchange, "nft only ibox exchange can call this");

        _index ++;

        _mint(_governance, _index, amount, "");
        _uris[_index] = uri;
        addUserNftInfo(_governance, _index);
        return _index;
    }

    

    function burnToken (uint256 requestId, address user, uint256 assetId, uint amount) external onlyGovernance{
        // emit DeleteNFTEvent(requestId, user, assetId);
        _burn(user, assetId, amount);
        emit DeleteNFTEvent(requestId, user, assetId);
    }

    function addTokens ( uint256 [] memory copies, uint256 []memory souceIds, string [] memory uri_, uint256 requestId_, address user) external onlyGovernance {
        uint l = copies.length;

        uint256 [] memory ids_ = new uint256[](l);
        for (uint i = 0; i < l; i++){
            _index ++;
            ids_[i] = _index;
            _mint(user, _index, copies[i], "");
            _uris[_index] = uri_[i];
            addUserNftInfo(user, _index);
        }

        emit AddTokensEvent (ids_, uri_, souceIds, requestId_);
    }

    function uri(uint256 tokenId_) public view virtual override returns (string memory) {
        return _uris[tokenId_];
    }

    function getTokenCount () public view returns (uint256){
        return _index;
    }

    struct UserAssetInfo{
        uint256 assetId;
        uint256 amount;
    }

    function getUserAssetIds (address user) public view returns (uint256 [] memory){

        return _user_nfts[user]._nft_ids;
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    )
        public
        virtual
        override
    {
        super.safeTransferFrom(from, to, id, amount, data);
        addUserNftInfo(to, id);
    }

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    )
        public
        virtual
        override
    {
        super.safeBatchTransferFrom(from, to, ids, amounts, data);

        uint l = ids.length;

        for (uint i = 0; i < l; i++){
            addUserNftInfo(to, ids[i]);
        }
        
    }

    function onERC1155Received(address operator, address from, uint256 id, uint256 value, bytes calldata data)
     external virtual override returns(bytes4){
        return bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"));
    }

    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    )
        external  virtual override
        returns(bytes4){
            return bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"governance_","type":"address"},{"internalType":"address","name":"ibox_exchange","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"assetId","type":"uint256[]"},{"indexed":false,"internalType":"string[]","name":"uris","type":"string[]"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"requestId","type":"uint256"}],"name":"AddTokensEvent","type":"event"},{"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":false,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"assetId","type":"uint256"}],"name":"DeleteNFTEvent","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":"uint256[]","name":"copies","type":"uint256[]"},{"internalType":"uint256[]","name":"souceIds","type":"uint256[]"},{"internalType":"string[]","name":"uri_","type":"string[]"},{"internalType":"uint256","name":"requestId_","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"addTokens","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":"requestId","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"assetId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"uri","type":"string"}],"name":"createTokenForIboxExchange","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getIboxExchange","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserAssetIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","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":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ibox_exchange","type":"address"}],"name":"setIboxExchange","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":[{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50604051620040be380380620040be8339818101604052810190620000379190620001d9565b6040518060600160405280602281526020016200409c602291396200006281620000f660201b60201c565b5081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506127106005819055505050620002cd565b80600290805190602001906200010e92919062000112565b5050565b82805462000120906200024e565b90600052602060002090601f01602090048101928262000144576000855562000190565b82601f106200015f57805160ff191683800117855562000190565b8280016001018555821562000190579182015b828111156200018f57825182559160200191906001019062000172565b5b5090506200019f9190620001a3565b5090565b5b80821115620001be576000816000905550600101620001a4565b5090565b600081519050620001d381620002b3565b92915050565b60008060408385031215620001ed57600080fd5b6000620001fd85828601620001c2565b92505060206200021085828601620001c2565b9150509250929050565b600062000227826200022e565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200026757607f821691505b602082108114156200027e576200027d62000284565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b620002be816200021a565b8114620002ca57600080fd5b50565b613dbf80620002dd6000396000f3fe608060405234801561001057600080fd5b506004361061010a5760003560e01c80634e883ac7116100a2578063bc197c8111610071578063bc197c81146102d9578063e985e9c514610309578063f23a6e6114610339578063f242432a14610369578063fcb963e2146103855761010a565b80634e883ac71461025357806378a8956714610283578063a0bd33d6146102a1578063a22cb465146102bd5761010a565b80632a0727d0116100de5780632a0727d0146101bb5780632eb2c2d6146101d7578063309f575a146101f35780634e1273f4146102235761010a565b8062fdd58e1461010f57806301ffc9a71461013f5780630e89341c1461016f5780631c35347e1461019f575b600080fd5b61012960048036038101906101249190612976565b6103a3565b60405161013691906137c6565b60405180910390f35b61015960048036038101906101549190612add565b61046c565b604051610166919061358e565b60405180910390f35b61018960048036038101906101849190612b2f565b61054e565b60405161019691906135c4565b60405180910390f35b6101b960048036038101906101b49190612b58565b6105f3565b005b6101d560048036038101906101d09190612a1e565b6106cf565b005b6101f160048036038101906101ec919061275a565b610970565b005b61020d60048036038101906102089190612bbb565b6109f4565b60405161021a91906137c6565b60405180910390f35b61023d600480360381019061023891906129b2565b610b40565b60405161024a91906134db565b60405180910390f35b61026d60048036038101906102689190612629565b610cf1565b60405161027a91906134db565b60405180910390f35b61028b610d8b565b60405161029891906137c6565b60405180910390f35b6102bb60048036038101906102b69190612629565b610d95565b005b6102d760048036038101906102d2919061293a565b610e69565b005b6102f360048036038101906102ee919061268e565b610fea565b60405161030091906135a9565b60405180910390f35b610323600480360381019061031e9190612652565b61101b565b604051610330919061358e565b60405180910390f35b610353600480360381019061034e9190612819565b6110af565b60405161036091906135a9565b60405180910390f35b610383600480360381019061037e91906128ab565b6110de565b005b61038d6110fc565b60405161039a91906133fe565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040b90613626565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061053757507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610547575061054682611126565b5b9050919050565b606060066000838152602001908152602001600020805461056e90613b51565b80601f016020809104026020016040519081016040528092919081815260200182805461059a90613b51565b80156105e75780601f106105bc576101008083540402835291602001916105e7565b820191906000526020600020905b8154815290600101906020018083116105ca57829003601f168201915b50505050509050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067a90613686565b60405180910390fd5b61068e838383611190565b7fa31d9264b55f2568500d9620228b642ed3bb5f4904ac697acbaab5ed7fa3385c8484846040516106c1939291906137e1565b60405180910390a150505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461075f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075690613686565b60405180910390fd5b60008551905060008167ffffffffffffffff8111156107a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156107d55781602001602082028036833780820191505090505b50905060005b8281101561092957600560008154809291906107f690613b83565b9190505550600554828281518110610837577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250506108a0846005548a8481518110610883577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151604051806020016040528060008152506113b6565b8581815181106108d9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516006600060055481526020019081526020016000209080519060200190610909929190612206565b506109168460055461154c565b808061092190613b83565b9150506107db565b507f931136016b2b79fec39610c08a62f35d4ac48f72fee36a6d0e73f1bbfd6dc1db8186888760405161095f94939291906134fd565b60405180910390a150505050505050565b61097d858585858561166f565b60008351905060005b818110156109eb576109d8868683815181106109cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015161154c565b80806109e390613b83565b915050610986565b50505050505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7d90613726565b60405180910390fd5b60056000815480929190610a9990613b83565b9190505550610add600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660055485604051806020016040528060008152506113b6565b816006600060055481526020019081526020016000209080519060200190610b06929190612206565b50610b35600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660055461154c565b600554905092915050565b60608151835114610b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7d90613766565b60405180910390fd5b6000835167ffffffffffffffff811115610bc9577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610bf75781602001602082028036833780820191505090505b50905060005b8451811015610ce657610c90858281518110610c42577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110610c83577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516103a3565b828281518110610cc9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080610cdf90613b83565b9050610bfd565b508091505092915050565b6060600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101805480602002602001604051908101604052809291908181526020018280548015610d7f57602002820191906000526020600020905b815481526020019060010190808311610d6b575b50505050509050919050565b6000600554905090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1c90613686565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8173ffffffffffffffffffffffffffffffffffffffff16610e88611a65565b73ffffffffffffffffffffffffffffffffffffffff161415610edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed690613746565b60405180910390fd5b8060016000610eec611a65565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610f99611a65565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610fde919061358e565b60405180910390a35050565b60007fbc197c819b3e337a6f9652dd10becd7eef83032af3b9d958d3d42f6694146621905098975050505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007ff23a6e612e1ff4830e658fe43f4e3cb4a5f8170bd5d9e69fb5d7a7fa9e4fdf9790509695505050505050565b6110eb8585858585611a6d565b6110f5848461154c565b5050505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f7906136e6565b60405180910390fd5b600061120a611a65565b905061123a8185600061121c87611d85565b61122587611d85565b60405180602001604052806000815250611e4b565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156112d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c890613646565b60405180910390fd5b82816112dd9190613a67565b60008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516113a7929190613818565b60405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141d906137a6565b60405180910390fd5b6000611430611a65565b90506114518160008761144288611d85565b61144b88611d85565b87611e4b565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114b09190613a11565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161152e929190613818565b60405180910390a461154581600087878787611e53565b5050505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002054141561166b576001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002081905550600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190806001815401808255809150506001900390600052602060002001600090919091909150555b5050565b81518351146116b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116aa90613786565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171a906136a6565b60405180910390fd5b61172b611a65565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061177157506117708561176b611a65565b61101b565b5b6117b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a7906136c6565b60405180910390fd5b60006117ba611a65565b90506117ca818787878787611e4b565b60005b84518110156119d0576000858281518110611811577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110611856577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156118f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ee90613706565b60405180910390fd5b81816119039190613a67565b60008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119b59190613a11565b92505081905550505050806119c990613b83565b90506117cd565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611a47929190613557565b60405180910390a4611a5d818787878787612023565b505050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad4906136a6565b60405180910390fd5b611ae5611a65565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611b2b5750611b2a85611b25611a65565b61101b565b5b611b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6190613666565b60405180910390fd5b6000611b74611a65565b9050611b94818787611b8588611d85565b611b8e88611d85565b87611e4b565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290613706565b60405180910390fd5b8381611c379190613a67565b60008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ce99190613a11565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611d66929190613818565b60405180910390a4611d7c828888888888611e53565b50505050505050565b60606000600167ffffffffffffffff811115611dca577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611df85781602001602082028036833780820191505090505b5090508281600081518110611e36577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b505050505050565b611e728473ffffffffffffffffffffffffffffffffffffffff166121f3565b1561201b578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611eb8959493929190613481565b602060405180830381600087803b158015611ed257600080fd5b505af1925050508015611f0357506040513d601f19601f82011682018060405250810190611f009190612b06565b60015b611f9257611f0f613c77565b80611f1a5750611f57565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4e91906135c4565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f89906135e6565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201090613606565b60405180910390fd5b505b505050505050565b6120428473ffffffffffffffffffffffffffffffffffffffff166121f3565b156121eb578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612088959493929190613419565b602060405180830381600087803b1580156120a257600080fd5b505af19250505080156120d357506040513d601f19601f820116820180604052508101906120d09190612b06565b60015b612162576120df613c77565b806120ea5750612127565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211e91906135c4565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612159906135e6565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146121e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e090613606565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b82805461221290613b51565b90600052602060002090601f016020900481019282612234576000855561227b565b82601f1061224d57805160ff191683800117855561227b565b8280016001018555821561227b579182015b8281111561227a57825182559160200191906001019061225f565b5b509050612288919061228c565b5090565b5b808211156122a557600081600090555060010161228d565b5090565b60006122bc6122b784613872565b613841565b905080838252602082019050828560208602820111156122db57600080fd5b60005b8581101561230b57816122f1888261245a565b8452602084019350602083019250506001810190506122de565b5050509392505050565b60006123286123238461389e565b613841565b9050808382526020820190508260005b85811015612368578135850161234e88826125ea565b845260208401935060208301925050600181019050612338565b5050509392505050565b6000612385612380846138ca565b613841565b905080838252602082019050828560208602820111156123a457600080fd5b60005b858110156123d457816123ba8882612614565b8452602084019350602083019250506001810190506123a7565b5050509392505050565b60006123f16123ec846138f6565b613841565b90508281526020810184848401111561240957600080fd5b612414848285613b0f565b509392505050565b600061242f61242a84613926565b613841565b90508281526020810184848401111561244757600080fd5b612452848285613b0f565b509392505050565b60008135905061246981613d2d565b92915050565b600082601f83011261248057600080fd5b81356124908482602086016122a9565b91505092915050565b600082601f8301126124aa57600080fd5b81356124ba848260208601612315565b91505092915050565b60008083601f8401126124d557600080fd5b8235905067ffffffffffffffff8111156124ee57600080fd5b60208301915083602082028301111561250657600080fd5b9250929050565b600082601f83011261251e57600080fd5b813561252e848260208601612372565b91505092915050565b60008135905061254681613d44565b92915050565b60008135905061255b81613d5b565b92915050565b60008151905061257081613d5b565b92915050565b60008083601f84011261258857600080fd5b8235905067ffffffffffffffff8111156125a157600080fd5b6020830191508360018202830111156125b957600080fd5b9250929050565b600082601f8301126125d157600080fd5b81356125e18482602086016123de565b91505092915050565b600082601f8301126125fb57600080fd5b813561260b84826020860161241c565b91505092915050565b60008135905061262381613d72565b92915050565b60006020828403121561263b57600080fd5b60006126498482850161245a565b91505092915050565b6000806040838503121561266557600080fd5b60006126738582860161245a565b92505060206126848582860161245a565b9150509250929050565b60008060008060008060008060a0898b0312156126aa57600080fd5b60006126b88b828c0161245a565b98505060206126c98b828c0161245a565b975050604089013567ffffffffffffffff8111156126e657600080fd5b6126f28b828c016124c3565b9650965050606089013567ffffffffffffffff81111561271157600080fd5b61271d8b828c016124c3565b9450945050608089013567ffffffffffffffff81111561273c57600080fd5b6127488b828c01612576565b92509250509295985092959890939650565b600080600080600060a0868803121561277257600080fd5b60006127808882890161245a565b95505060206127918882890161245a565b945050604086013567ffffffffffffffff8111156127ae57600080fd5b6127ba8882890161250d565b935050606086013567ffffffffffffffff8111156127d757600080fd5b6127e38882890161250d565b925050608086013567ffffffffffffffff81111561280057600080fd5b61280c888289016125c0565b9150509295509295909350565b60008060008060008060a0878903121561283257600080fd5b600061284089828a0161245a565b965050602061285189828a0161245a565b955050604061286289828a01612614565b945050606061287389828a01612614565b935050608087013567ffffffffffffffff81111561289057600080fd5b61289c89828a01612576565b92509250509295509295509295565b600080600080600060a086880312156128c357600080fd5b60006128d18882890161245a565b95505060206128e28882890161245a565b94505060406128f388828901612614565b935050606061290488828901612614565b925050608086013567ffffffffffffffff81111561292157600080fd5b61292d888289016125c0565b9150509295509295909350565b6000806040838503121561294d57600080fd5b600061295b8582860161245a565b925050602061296c85828601612537565b9150509250929050565b6000806040838503121561298957600080fd5b60006129978582860161245a565b92505060206129a885828601612614565b9150509250929050565b600080604083850312156129c557600080fd5b600083013567ffffffffffffffff8111156129df57600080fd5b6129eb8582860161246f565b925050602083013567ffffffffffffffff811115612a0857600080fd5b612a148582860161250d565b9150509250929050565b600080600080600060a08688031215612a3657600080fd5b600086013567ffffffffffffffff811115612a5057600080fd5b612a5c8882890161250d565b955050602086013567ffffffffffffffff811115612a7957600080fd5b612a858882890161250d565b945050604086013567ffffffffffffffff811115612aa257600080fd5b612aae88828901612499565b9350506060612abf88828901612614565b9250506080612ad08882890161245a565b9150509295509295909350565b600060208284031215612aef57600080fd5b6000612afd8482850161254c565b91505092915050565b600060208284031215612b1857600080fd5b6000612b2684828501612561565b91505092915050565b600060208284031215612b4157600080fd5b6000612b4f84828501612614565b91505092915050565b60008060008060808587031215612b6e57600080fd5b6000612b7c87828801612614565b9450506020612b8d8782880161245a565b9350506040612b9e87828801612614565b9250506060612baf87828801612614565b91505092959194509250565b60008060408385031215612bce57600080fd5b6000612bdc85828601612614565b925050602083013567ffffffffffffffff811115612bf957600080fd5b612c05858286016125ea565b9150509250929050565b6000612c1b8383612d74565b905092915050565b6000612c2f83836133e0565b60208301905092915050565b612c4481613a9b565b82525050565b6000612c5582613976565b612c5f81856139bc565b935083602082028501612c7185613956565b8060005b85811015612cad5784840389528151612c8e8582612c0f565b9450612c99836139a2565b925060208a01995050600181019050612c75565b50829750879550505050505092915050565b6000612cca82613981565b612cd481856139cd565b9350612cdf83613966565b8060005b83811015612d10578151612cf78882612c23565b9750612d02836139af565b925050600181019050612ce3565b5085935050505092915050565b612d2681613aad565b82525050565b612d3581613ab9565b82525050565b6000612d468261398c565b612d5081856139de565b9350612d60818560208601613b1e565b612d6981613c59565b840191505092915050565b6000612d7f82613997565b612d8981856139ef565b9350612d99818560208601613b1e565b612da281613c59565b840191505092915050565b6000612db882613997565b612dc28185613a00565b9350612dd2818560208601613b1e565b612ddb81613c59565b840191505092915050565b6000612df3603483613a00565b91507f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008301527f526563656976657220696d706c656d656e7465720000000000000000000000006020830152604082019050919050565b6000612e59602883613a00565b91507f455243313135353a204552433131353552656365697665722072656a6563746560008301527f6420746f6b656e730000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ebf602b83613a00565b91507f455243313135353a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b6000612f25602483613a00565b91507f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008301527f616e6365000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f8b602983613a00565b91507f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008301527f20617070726f76656400000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ff1602283613a00565b91507f6e6674206f6e6c7920676f7665726e616e63652063616e6e2063616c6c20746860008301527f69730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613057602583613a00565b91507f455243313135353a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006130bd603283613a00565b91507f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b6000613123602383613a00565b91507f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613189602a83613a00565b91507f455243313135353a20696e73756666696369656e742062616c616e636520666f60008301527f72207472616e73666572000000000000000000000000000000000000000000006020830152604082019050919050565b60006131ef602483613a00565b91507f6e6674206f6e6c792069626f782065786368616e67652063616e2063616c6c2060008301527f74686973000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613255602983613a00565b91507f455243313135353a2073657474696e6720617070726f76616c2073746174757360008301527f20666f722073656c6600000000000000000000000000000000000000000000006020830152604082019050919050565b60006132bb602983613a00565b91507f455243313135353a206163636f756e747320616e6420696473206c656e67746860008301527f206d69736d6174636800000000000000000000000000000000000000000000006020830152604082019050919050565b6000613321602883613a00565b91507f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008301527f6d69736d617463680000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613387602183613a00565b91507f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6133e981613b05565b82525050565b6133f881613b05565b82525050565b60006020820190506134136000830184612c3b565b92915050565b600060a08201905061342e6000830188612c3b565b61343b6020830187612c3b565b818103604083015261344d8186612cbf565b905081810360608301526134618185612cbf565b905081810360808301526134758184612d3b565b90509695505050505050565b600060a0820190506134966000830188612c3b565b6134a36020830187612c3b565b6134b060408301866133ef565b6134bd60608301856133ef565b81810360808301526134cf8184612d3b565b90509695505050505050565b600060208201905081810360008301526134f58184612cbf565b905092915050565b600060808201905081810360008301526135178187612cbf565b9050818103602083015261352b8186612c4a565b9050818103604083015261353f8185612cbf565b905061354e60608301846133ef565b95945050505050565b600060408201905081810360008301526135718185612cbf565b905081810360208301526135858184612cbf565b90509392505050565b60006020820190506135a36000830184612d1d565b92915050565b60006020820190506135be6000830184612d2c565b92915050565b600060208201905081810360008301526135de8184612dad565b905092915050565b600060208201905081810360008301526135ff81612de6565b9050919050565b6000602082019050818103600083015261361f81612e4c565b9050919050565b6000602082019050818103600083015261363f81612eb2565b9050919050565b6000602082019050818103600083015261365f81612f18565b9050919050565b6000602082019050818103600083015261367f81612f7e565b9050919050565b6000602082019050818103600083015261369f81612fe4565b9050919050565b600060208201905081810360008301526136bf8161304a565b9050919050565b600060208201905081810360008301526136df816130b0565b9050919050565b600060208201905081810360008301526136ff81613116565b9050919050565b6000602082019050818103600083015261371f8161317c565b9050919050565b6000602082019050818103600083015261373f816131e2565b9050919050565b6000602082019050818103600083015261375f81613248565b9050919050565b6000602082019050818103600083015261377f816132ae565b9050919050565b6000602082019050818103600083015261379f81613314565b9050919050565b600060208201905081810360008301526137bf8161337a565b9050919050565b60006020820190506137db60008301846133ef565b92915050565b60006060820190506137f660008301866133ef565b6138036020830185612c3b565b61381060408301846133ef565b949350505050565b600060408201905061382d60008301856133ef565b61383a60208301846133ef565b9392505050565b6000604051905081810181811067ffffffffffffffff8211171561386857613867613c2a565b5b8060405250919050565b600067ffffffffffffffff82111561388d5761388c613c2a565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156138b9576138b8613c2a565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156138e5576138e4613c2a565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561391157613910613c2a565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561394157613940613c2a565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613a1c82613b05565b9150613a2783613b05565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a5c57613a5b613bcc565b5b828201905092915050565b6000613a7282613b05565b9150613a7d83613b05565b925082821015613a9057613a8f613bcc565b5b828203905092915050565b6000613aa682613ae5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613b3c578082015181840152602081019050613b21565b83811115613b4b576000848401525b50505050565b60006002820490506001821680613b6957607f821691505b60208210811415613b7d57613b7c613bfb565b5b50919050565b6000613b8e82613b05565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613bc157613bc0613bcc565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b600060443d1015613c8757613d2a565b60046000803e613c98600051613c6a565b6308c379a08114613ca95750613d2a565b60405160043d036004823e80513d602482011167ffffffffffffffff82111715613cd557505050613d2a565b808201805167ffffffffffffffff811115613cf4575050505050613d2a565b8060208301013d8501811115613d0f57505050505050613d2a565b613d1882613c59565b60208401016040528296505050505050505b90565b613d3681613a9b565b8114613d4157600080fd5b50565b613d4d81613aad565b8114613d5857600080fd5b50565b613d6481613ab9565b8114613d6f57600080fd5b50565b613d7b81613b05565b8114613d8657600080fd5b5056fea2646970667358221220dea1237535e1efce4961ae78809673a11baebcb44d4fd5661d96c02bd0277ab464736f6c63430008000033687474703a2f2f6c6f63616c686f73743a32383038302f652f7b69647d2e6a736f6e0000000000000000000000009ab363aee708075b0e19bf0c80740b68ac493c4b000000000000000000000000dc0f146a5c32f48562f9229d5f03af4933607211

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

0000000000000000000000009ab363aee708075b0e19bf0c80740b68ac493c4b000000000000000000000000dc0f146a5c32f48562f9229d5f03af4933607211

-----Decoded View---------------
Arg [0] : governance_ (address): 0x9ab363aee708075b0e19bf0c80740b68ac493c4b
Arg [1] : ibox_exchange (address): 0xdc0f146a5c32f48562f9229d5f03af4933607211

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000009ab363aee708075b0e19bf0c80740b68ac493c4b
Arg [1] : 000000000000000000000000dc0f146a5c32f48562f9229d5f03af4933607211


Deployed ByteCode Sourcemap

30898:4548:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19125:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18161:297;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33591:125;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32755:268;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33031:552;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34363:443;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32372:367;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19522:549;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33906:132;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33724:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32138:120;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20144:311;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35079:364;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20527:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34814:257;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34046:309;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32266:96;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19125:231;19211:7;19258:1;19239:21;;:7;:21;;;;19231:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;19326:9;:13;19336:2;19326:13;;;;;;;;;;;:22;19340:7;19326:22;;;;;;;;;;;;;;;;19319:29;;19125:231;;;;:::o;18161:297::-;18263:4;18302:26;18287:41;;;:11;:41;;;;:110;;;;18360:37;18345:52;;;:11;:52;;;;18287:110;:163;;;;18414:36;18438:11;18414:23;:36::i;:::-;18287:163;18280:170;;18161:297;;;:::o;33591:125::-;33660:13;33693:5;:15;33699:8;33693:15;;;;;;;;;;;33686:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33591:125;;;:::o;32755:268::-;31823:11;;;;;;;;;;;31809:25;;:10;:25;;;31800:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32931:28:::1;32937:4;32943:7;32952:6;32931:5;:28::i;:::-;32975:40;32990:9;33001:4;33007:7;32975:40;;;;;;;;:::i;:::-;;;;;;;;32755:268:::0;;;;:::o;33031:552::-;31823:11;;;;;;;;;;;31809:25;;:10;:25;;;31800:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33197:6:::1;33206;:13;33197:22;;33232;33271:1;33257:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33232:41;;33289:6;33284:225;33305:1;33301;:5;33284:225;;;33327:6;;:9;;;;;;;;;:::i;:::-;;;;;;33361:6;;33351:4;33356:1;33351:7;;;;;;;;;;;;;;;;;;;;;:16;;;::::0;::::1;33382:34;33388:4;33394:6;;33402;33409:1;33402:9;;;;;;;;;;;;;;;;;;;;;;33382:34;;;;;;;;;;;::::0;:5:::1;:34::i;:::-;33447:4;33452:1;33447:7;;;;;;;;;;;;;;;;;;;;;;33431:5;:13;33437:6;;33431:13;;;;;;;;;;;:23;;;;;;;;;;;;:::i;:::-;;33469:28;33484:4;33490:6;;33469:14;:28::i;:::-;33308:3;;;;;:::i;:::-;;;;33284:225;;;;33526:49;33542:4;33548;33554:8;33564:10;33526:49;;;;;;;;;:::i;:::-;;;;;;;;31886:1;;33031:552:::0;;;;;:::o;34363:443::-;34606:57;34634:4;34640:2;34644:3;34649:7;34658:4;34606:27;:57::i;:::-;34676:6;34685:3;:10;34676:19;;34713:6;34708:81;34729:1;34725;:5;34708:81;;;34751:26;34766:2;34770:3;34774:1;34770:6;;;;;;;;;;;;;;;;;;;;;;34751:14;:26::i;:::-;34732:3;;;;;:::i;:::-;;;;34708:81;;;;34363:443;;;;;;:::o;32372:367::-;32461:7;32503:14;;;;;;;;;;;32489:28;;:10;:28;;;32480:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;32571:6;;:9;;;;;;;;;:::i;:::-;;;;;;32593:38;32599:11;;;;;;;;;;;32612:6;;32620;32593:38;;;;;;;;;;;;:5;:38::i;:::-;32658:3;32642:5;:13;32648:6;;32642:13;;;;;;;;;;;:19;;;;;;;;;;;;:::i;:::-;;32672:35;32687:11;;;;;;;;;;;32700:6;;32672:14;:35::i;:::-;32725:6;;32718:13;;32372:367;;;;:::o;19522:549::-;19703:16;19764:3;:10;19745:8;:15;:29;19737:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;19833:30;19880:8;:15;19866:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19833:63;;19914:9;19909:122;19933:8;:15;19929:1;:19;19909:122;;;19989:30;19999:8;20008:1;19999:11;;;;;;;;;;;;;;;;;;;;;;20012:3;20016:1;20012:6;;;;;;;;;;;;;;;;;;;;;;19989:9;:30::i;:::-;19970:13;19984:1;19970:16;;;;;;;;;;;;;;;;;;;;;:49;;;;;19950:3;;;;:::i;:::-;;;19909:122;;;;20050:13;20043:20;;;19522:549;;;;:::o;33906:132::-;33967:17;34005:10;:16;34016:4;34005:16;;;;;;;;;;;;;;;:25;;33998:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33906:132;;;:::o;33724:87::-;33771:7;33797:6;;33790:13;;33724:87;:::o;32138:120::-;31823:11;;;;;;;;;;;31809:25;;:10;:25;;;31800:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32237:13:::1;32220:14;;:30;;;;;;;;;;;;;;;;;;32138:120:::0;:::o;20144:311::-;20263:8;20247:24;;:12;:10;:12::i;:::-;:24;;;;20239:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;20375:8;20330:18;:32;20349:12;:10;:12::i;:::-;20330:32;;;;;;;;;;;;;;;:42;20363:8;20330:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;20428:8;20399:48;;20414:12;:10;:12::i;:::-;20399:48;;;20438:8;20399:48;;;;;;:::i;:::-;;;;;;;;20144:311;;:::o;35079:364::-;35320:6;35356:78;35342:93;;35079:364;;;;;;;;;;:::o;20527:168::-;20626:4;20650:18;:27;20669:7;20650:27;;;;;;;;;;;;;;;:37;20678:8;20650:37;;;;;;;;;;;;;;;;;;;;;;;;;20643:44;;20527:168;;;;:::o;34814:257::-;34961:6;34993:69;34979:84;;34814:257;;;;;;;;:::o;34046:309::-;34264:50;34287:4;34293:2;34297;34301:6;34309:4;34264:22;:50::i;:::-;34325:22;34340:2;34344;34325:14;:22::i;:::-;34046:309;;;;;:::o;32266:96::-;32314:7;32340:14;;;;;;;;;;;32333:21;;32266:96;:::o;17082:157::-;17167:4;17206:25;17191:40;;;:11;:40;;;;17184:47;;17082:157;;;:::o;26260:605::-;26375:1;26356:21;;:7;:21;;;;26348:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;26430:16;26449:12;:10;:12::i;:::-;26430:31;;26474:105;26495:8;26505:7;26522:1;26526:21;26544:2;26526:17;:21::i;:::-;26549:25;26567:6;26549:17;:25::i;:::-;26474:105;;;;;;;;;;;;:20;:105::i;:::-;26592:22;26617:9;:13;26627:2;26617:13;;;;;;;;;;;:22;26631:7;26617:22;;;;;;;;;;;;;;;;26592:47;;26676:6;26658:14;:24;;26650:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26776:6;26759:14;:23;;;;:::i;:::-;26734:9;:13;26744:2;26734:13;;;;;;;;;;;:22;26748:7;26734:22;;;;;;;;;;;;;;;:48;;;;26842:1;26800:57;;26825:7;26800:57;;26815:8;26800:57;;;26846:2;26850:6;26800:57;;;;;;;:::i;:::-;;;;;;;;26260:605;;;;;:::o;24400:556::-;24534:1;24515:21;;:7;:21;;;;24507:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24587:16;24606:12;:10;:12::i;:::-;24587:31;;24631:107;24652:8;24670:1;24674:7;24683:21;24701:2;24683:17;:21::i;:::-;24706:25;24724:6;24706:17;:25::i;:::-;24733:4;24631:20;:107::i;:::-;24777:6;24751:9;:13;24761:2;24751:13;;;;;;;;;;;:22;24765:7;24751:22;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;24836:7;24799:57;;24832:1;24799:57;;24814:8;24799:57;;;24845:2;24849:6;24799:57;;;;;;;:::i;:::-;;;;;;;;24869:79;24900:8;24918:1;24922:7;24931:2;24935:6;24943:4;24869:30;:79::i;:::-;24400:556;;;;;:::o;31514:240::-;31627:1;31592:10;:16;31603:4;31592:16;;;;;;;;;;;;;;;:22;;:31;31615:7;31592:31;;;;;;;;;;;;:36;31588:157;;;31678:1;31644:10;:16;31655:4;31644:16;;;;;;;;;;;;;;;:22;;:31;31667:7;31644:31;;;;;;;;;;;:35;;;;31694:10;:16;31705:4;31694:16;;;;;;;;;;;;;;;:25;;31725:7;31694:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31588:157;31514:240;;:::o;21828:1239::-;22093:7;:14;22079:3;:10;:28;22071:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;22185:1;22171:16;;:2;:16;;;;22163:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;22270:12;:10;:12::i;:::-;22262:20;;:4;:20;;;:60;;;;22286:36;22303:4;22309:12;:10;:12::i;:::-;22286:16;:36::i;:::-;22262:60;22240:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;22413:16;22432:12;:10;:12::i;:::-;22413:31;;22457:60;22478:8;22488:4;22494:2;22498:3;22503:7;22512:4;22457:20;:60::i;:::-;22535:9;22530:377;22554:3;:10;22550:1;:14;22530:377;;;22586:10;22599:3;22603:1;22599:6;;;;;;;;;;;;;;;;;;;;;;22586:19;;22620:14;22637:7;22645:1;22637:10;;;;;;;;;;;;;;;;;;;;;;22620:27;;22664:19;22686:9;:13;22696:2;22686:13;;;;;;;;;;;:19;22700:4;22686:19;;;;;;;;;;;;;;;;22664:41;;22743:6;22728:11;:21;;22720:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22847:6;22833:11;:20;;;;:::i;:::-;22811:9;:13;22821:2;22811:13;;;;;;;;;;;:19;22825:4;22811:19;;;;;;;;;;;;;;;:42;;;;22889:6;22868:9;:13;22878:2;22868:13;;;;;;;;;;;:17;22882:2;22868:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;22530:377;;;22566:3;;;;:::i;:::-;;;22530:377;;;;22954:2;22924:47;;22948:4;22924:47;;22938:8;22924:47;;;22958:3;22963:7;22924:47;;;;;;;:::i;:::-;;;;;;;;22984:75;23020:8;23030:4;23036:2;23040:3;23045:7;23054:4;22984:35;:75::i;:::-;21828:1239;;;;;;:::o;16034:98::-;16087:7;16114:10;16107:17;;16034:98;:::o;20767:984::-;21007:1;20993:16;;:2;:16;;;;20985:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;21092:12;:10;:12::i;:::-;21084:20;;:4;:20;;;:60;;;;21108:36;21125:4;21131:12;:10;:12::i;:::-;21108:16;:36::i;:::-;21084:60;21062:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;21226:16;21245:12;:10;:12::i;:::-;21226:31;;21270:96;21291:8;21301:4;21307:2;21311:21;21329:2;21311:17;:21::i;:::-;21334:25;21352:6;21334:17;:25::i;:::-;21361:4;21270:20;:96::i;:::-;21379:19;21401:9;:13;21411:2;21401:13;;;;;;;;;;;:19;21415:4;21401:19;;;;;;;;;;;;;;;;21379:41;;21454:6;21439:11;:21;;21431:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;21554:6;21540:11;:20;;;;:::i;:::-;21518:9;:13;21528:2;21518:13;;;;;;;;;;;:19;21532:4;21518:19;;;;;;;;;;;;;;;:42;;;;21592:6;21571:9;:13;21581:2;21571:13;;;;;;;;;;;:17;21585:2;21571:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;21647:2;21616:46;;21641:4;21616:46;;21631:8;21616:46;;;21651:2;21655:6;21616:46;;;;;;;:::i;:::-;;;;;;;;21675:68;21706:8;21716:4;21722:2;21726;21730:6;21738:4;21675:30;:68::i;:::-;20767:984;;;;;;;:::o;30691:198::-;30757:16;30786:22;30825:1;30811:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30786:41;;30849:7;30838:5;30844:1;30838:8;;;;;;;;;;;;;;;;;;;;;:18;;;;;30876:5;30869:12;;;30691:198;;;:::o;28861:245::-;;;;;;;:::o;29114:762::-;29343:15;:2;:13;;;:15::i;:::-;29339:530;;;29396:2;29379:38;;;29418:8;29428:4;29434:2;29438:6;29446:4;29379:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;29375:483;;;;:::i;:::-;;;;;;;;29731:6;29724:14;;;;;;;;;;;:::i;:::-;;;;;;;;29375:483;29780:62;;;;;;;;;;:::i;:::-;;;;;;;;29375:483;29513:47;;;29501:59;;;:8;:59;;;;29497:158;;29585:50;;;;;;;;;;:::i;:::-;;;;;;;;29497:158;29452:218;29339:530;29114:762;;;;;;:::o;29884:799::-;30138:15;:2;:13;;;:15::i;:::-;30134:542;;;30191:2;30174:43;;;30218:8;30228:4;30234:3;30239:7;30248:4;30174:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30170:495;;;;:::i;:::-;;;;;;;;30538:6;30531:14;;;;;;;;;;;:::i;:::-;;;;;;;;30170:495;30587:62;;;;;;;;;;:::i;:::-;;;;;;;;30170:495;30315:52;;;30303:64;;;:8;:64;;;;30299:163;;30392:50;;;;;;;;;;:::i;:::-;;;;;;;;30299:163;30254:223;30134:542;29884:799;;;;;;:::o;8236:422::-;8296:4;8504:12;8615:7;8603:20;8595:28;;8649:1;8642:4;:8;8635:15;;;8236:422;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;668:615::-;;799:90;814:74;881:6;814:74;:::i;:::-;799:90;:::i;:::-;790:99;;909:5;937:6;930:5;923:21;963:4;956:5;952:16;945:23;;988:6;1019:1;1004:273;1029:6;1026:1;1023:13;1004:273;;;1121:3;1108:17;1100:6;1096:30;1151:47;1194:3;1182:10;1151:47;:::i;:::-;1146:3;1139:60;1228:4;1223:3;1219:14;1212:21;;1262:4;1257:3;1253:14;1246:21;;1064:213;1051:1;1048;1044:9;1039:14;;1004:273;;;1008:14;780:503;;;;;;;:::o;1306:622::-;;1427:80;1442:64;1499:6;1442:64;:::i;:::-;1427:80;:::i;:::-;1418:89;;1527:5;1555:6;1548:5;1541:21;1581:4;1574:5;1570:16;1563:23;;1606:6;1656:3;1648:4;1640:6;1636:17;1631:3;1627:27;1624:36;1621:2;;;1673:1;1670;1663:12;1621:2;1701:1;1686:236;1711:6;1708:1;1705:13;1686:236;;;1778:3;1806:37;1839:3;1827:10;1806:37;:::i;:::-;1801:3;1794:50;1873:4;1868:3;1864:14;1857:21;;1907:4;1902:3;1898:14;1891:21;;1746:176;1733:1;1730;1726:9;1721:14;;1686:236;;;1690:14;1408:520;;;;;;;:::o;1934:342::-;;2036:64;2051:48;2092:6;2051:48;:::i;:::-;2036:64;:::i;:::-;2027:73;;2123:6;2116:5;2109:21;2161:4;2154:5;2150:16;2199:3;2190:6;2185:3;2181:16;2178:25;2175:2;;;2216:1;2213;2206:12;2175:2;2229:41;2263:6;2258:3;2253;2229:41;:::i;:::-;2017:259;;;;;;:::o;2282:344::-;;2385:65;2400:49;2442:6;2400:49;:::i;:::-;2385:65;:::i;:::-;2376:74;;2473:6;2466:5;2459:21;2511:4;2504:5;2500:16;2549:3;2540:6;2535:3;2531:16;2528:25;2525:2;;;2566:1;2563;2556:12;2525:2;2579:41;2613:6;2608:3;2603;2579:41;:::i;:::-;2366:260;;;;;;:::o;2632:139::-;;2716:6;2703:20;2694:29;;2732:33;2759:5;2732:33;:::i;:::-;2684:87;;;;:::o;2794:303::-;;2914:3;2907:4;2899:6;2895:17;2891:27;2881:2;;2932:1;2929;2922:12;2881:2;2972:6;2959:20;2997:94;3087:3;3079:6;3072:4;3064:6;3060:17;2997:94;:::i;:::-;2988:103;;2871:226;;;;;:::o;3119:323::-;;3249:3;3242:4;3234:6;3230:17;3226:27;3216:2;;3267:1;3264;3257:12;3216:2;3307:6;3294:20;3332:104;3432:3;3424:6;3417:4;3409:6;3405:17;3332:104;:::i;:::-;3323:113;;3206:236;;;;;:::o;3465:367::-;;;3598:3;3591:4;3583:6;3579:17;3575:27;3565:2;;3616:1;3613;3606:12;3565:2;3652:6;3639:20;3629:30;;3682:18;3674:6;3671:30;3668:2;;;3714:1;3711;3704:12;3668:2;3751:4;3743:6;3739:17;3727:29;;3805:3;3797:4;3789:6;3785:17;3775:8;3771:32;3768:41;3765:2;;;3822:1;3819;3812:12;3765:2;3555:277;;;;;:::o;3855:303::-;;3975:3;3968:4;3960:6;3956:17;3952:27;3942:2;;3993:1;3990;3983:12;3942:2;4033:6;4020:20;4058:94;4148:3;4140:6;4133:4;4125:6;4121:17;4058:94;:::i;:::-;4049:103;;3932:226;;;;;:::o;4164:133::-;;4245:6;4232:20;4223:29;;4261:30;4285:5;4261:30;:::i;:::-;4213:84;;;;:::o;4303:137::-;;4386:6;4373:20;4364:29;;4402:32;4428:5;4402:32;:::i;:::-;4354:86;;;;:::o;4446:141::-;;4533:6;4527:13;4518:22;;4549:32;4575:5;4549:32;:::i;:::-;4508:79;;;;:::o;4606:351::-;;;4723:3;4716:4;4708:6;4704:17;4700:27;4690:2;;4741:1;4738;4731:12;4690:2;4777:6;4764:20;4754:30;;4807:18;4799:6;4796:30;4793:2;;;4839:1;4836;4829:12;4793:2;4876:4;4868:6;4864:17;4852:29;;4930:3;4922:4;4914:6;4910:17;4900:8;4896:32;4893:41;4890:2;;;4947:1;4944;4937:12;4890:2;4680:277;;;;;:::o;4976:271::-;;5080:3;5073:4;5065:6;5061:17;5057:27;5047:2;;5098:1;5095;5088:12;5047:2;5138:6;5125:20;5163:78;5237:3;5229:6;5222:4;5214:6;5210:17;5163:78;:::i;:::-;5154:87;;5037:210;;;;;:::o;5267:273::-;;5372:3;5365:4;5357:6;5353:17;5349:27;5339:2;;5390:1;5387;5380:12;5339:2;5430:6;5417:20;5455:79;5530:3;5522:6;5515:4;5507:6;5503:17;5455:79;:::i;:::-;5446:88;;5329:211;;;;;:::o;5546:139::-;;5630:6;5617:20;5608:29;;5646:33;5673:5;5646:33;:::i;:::-;5598:87;;;;:::o;5691:262::-;;5799:2;5787:9;5778:7;5774:23;5770:32;5767:2;;;5815:1;5812;5805:12;5767:2;5858:1;5883:53;5928:7;5919:6;5908:9;5904:22;5883:53;:::i;:::-;5873:63;;5829:117;5757:196;;;;:::o;5959:407::-;;;6084:2;6072:9;6063:7;6059:23;6055:32;6052:2;;;6100:1;6097;6090:12;6052:2;6143:1;6168:53;6213:7;6204:6;6193:9;6189:22;6168:53;:::i;:::-;6158:63;;6114:117;6270:2;6296:53;6341:7;6332:6;6321:9;6317:22;6296:53;:::i;:::-;6286:63;;6241:118;6042:324;;;;;:::o;6372:1301::-;;;;;;;;;6637:3;6625:9;6616:7;6612:23;6608:33;6605:2;;;6654:1;6651;6644:12;6605:2;6697:1;6722:53;6767:7;6758:6;6747:9;6743:22;6722:53;:::i;:::-;6712:63;;6668:117;6824:2;6850:53;6895:7;6886:6;6875:9;6871:22;6850:53;:::i;:::-;6840:63;;6795:118;6980:2;6969:9;6965:18;6952:32;7011:18;7003:6;7000:30;6997:2;;;7043:1;7040;7033:12;6997:2;7079:80;7151:7;7142:6;7131:9;7127:22;7079:80;:::i;:::-;7061:98;;;;6923:246;7236:2;7225:9;7221:18;7208:32;7267:18;7259:6;7256:30;7253:2;;;7299:1;7296;7289:12;7253:2;7335:80;7407:7;7398:6;7387:9;7383:22;7335:80;:::i;:::-;7317:98;;;;7179:246;7492:3;7481:9;7477:19;7464:33;7524:18;7516:6;7513:30;7510:2;;;7556:1;7553;7546:12;7510:2;7592:64;7648:7;7639:6;7628:9;7624:22;7592:64;:::i;:::-;7574:82;;;;7435:231;6595:1078;;;;;;;;;;;:::o;7679:1241::-;;;;;;7914:3;7902:9;7893:7;7889:23;7885:33;7882:2;;;7931:1;7928;7921:12;7882:2;7974:1;7999:53;8044:7;8035:6;8024:9;8020:22;7999:53;:::i;:::-;7989:63;;7945:117;8101:2;8127:53;8172:7;8163:6;8152:9;8148:22;8127:53;:::i;:::-;8117:63;;8072:118;8257:2;8246:9;8242:18;8229:32;8288:18;8280:6;8277:30;8274:2;;;8320:1;8317;8310:12;8274:2;8348:78;8418:7;8409:6;8398:9;8394:22;8348:78;:::i;:::-;8338:88;;8200:236;8503:2;8492:9;8488:18;8475:32;8534:18;8526:6;8523:30;8520:2;;;8566:1;8563;8556:12;8520:2;8594:78;8664:7;8655:6;8644:9;8640:22;8594:78;:::i;:::-;8584:88;;8446:236;8749:3;8738:9;8734:19;8721:33;8781:18;8773:6;8770:30;8767:2;;;8813:1;8810;8803:12;8767:2;8841:62;8895:7;8886:6;8875:9;8871:22;8841:62;:::i;:::-;8831:72;;8692:221;7872:1048;;;;;;;;:::o;8926:975::-;;;;;;;9121:3;9109:9;9100:7;9096:23;9092:33;9089:2;;;9138:1;9135;9128:12;9089:2;9181:1;9206:53;9251:7;9242:6;9231:9;9227:22;9206:53;:::i;:::-;9196:63;;9152:117;9308:2;9334:53;9379:7;9370:6;9359:9;9355:22;9334:53;:::i;:::-;9324:63;;9279:118;9436:2;9462:53;9507:7;9498:6;9487:9;9483:22;9462:53;:::i;:::-;9452:63;;9407:118;9564:2;9590:53;9635:7;9626:6;9615:9;9611:22;9590:53;:::i;:::-;9580:63;;9535:118;9720:3;9709:9;9705:19;9692:33;9752:18;9744:6;9741:30;9738:2;;;9784:1;9781;9774:12;9738:2;9820:64;9876:7;9867:6;9856:9;9852:22;9820:64;:::i;:::-;9802:82;;;;9663:231;9079:822;;;;;;;;:::o;9907:955::-;;;;;;10092:3;10080:9;10071:7;10067:23;10063:33;10060:2;;;10109:1;10106;10099:12;10060:2;10152:1;10177:53;10222:7;10213:6;10202:9;10198:22;10177:53;:::i;:::-;10167:63;;10123:117;10279:2;10305:53;10350:7;10341:6;10330:9;10326:22;10305:53;:::i;:::-;10295:63;;10250:118;10407:2;10433:53;10478:7;10469:6;10458:9;10454:22;10433:53;:::i;:::-;10423:63;;10378:118;10535:2;10561:53;10606:7;10597:6;10586:9;10582:22;10561:53;:::i;:::-;10551:63;;10506:118;10691:3;10680:9;10676:19;10663:33;10723:18;10715:6;10712:30;10709:2;;;10755:1;10752;10745:12;10709:2;10783:62;10837:7;10828:6;10817:9;10813:22;10783:62;:::i;:::-;10773:72;;10634:221;10050:812;;;;;;;;:::o;10868:401::-;;;10990:2;10978:9;10969:7;10965:23;10961:32;10958:2;;;11006:1;11003;10996:12;10958:2;11049:1;11074:53;11119:7;11110:6;11099:9;11095:22;11074:53;:::i;:::-;11064:63;;11020:117;11176:2;11202:50;11244:7;11235:6;11224:9;11220:22;11202:50;:::i;:::-;11192:60;;11147:115;10948:321;;;;;:::o;11275:407::-;;;11400:2;11388:9;11379:7;11375:23;11371:32;11368:2;;;11416:1;11413;11406:12;11368:2;11459:1;11484:53;11529:7;11520:6;11509:9;11505:22;11484:53;:::i;:::-;11474:63;;11430:117;11586:2;11612:53;11657:7;11648:6;11637:9;11633:22;11612:53;:::i;:::-;11602:63;;11557:118;11358:324;;;;;:::o;11688:693::-;;;11863:2;11851:9;11842:7;11838:23;11834:32;11831:2;;;11879:1;11876;11869:12;11831:2;11950:1;11939:9;11935:17;11922:31;11980:18;11972:6;11969:30;11966:2;;;12012:1;12009;12002:12;11966:2;12040:78;12110:7;12101:6;12090:9;12086:22;12040:78;:::i;:::-;12030:88;;11893:235;12195:2;12184:9;12180:18;12167:32;12226:18;12218:6;12215:30;12212:2;;;12258:1;12255;12248:12;12212:2;12286:78;12356:7;12347:6;12336:9;12332:22;12286:78;:::i;:::-;12276:88;;12138:236;11821:560;;;;;:::o;12387:1293::-;;;;;;12648:3;12636:9;12627:7;12623:23;12619:33;12616:2;;;12665:1;12662;12655:12;12616:2;12736:1;12725:9;12721:17;12708:31;12766:18;12758:6;12755:30;12752:2;;;12798:1;12795;12788:12;12752:2;12826:78;12896:7;12887:6;12876:9;12872:22;12826:78;:::i;:::-;12816:88;;12679:235;12981:2;12970:9;12966:18;12953:32;13012:18;13004:6;13001:30;12998:2;;;13044:1;13041;13034:12;12998:2;13072:78;13142:7;13133:6;13122:9;13118:22;13072:78;:::i;:::-;13062:88;;12924:236;13227:2;13216:9;13212:18;13199:32;13258:18;13250:6;13247:30;13244:2;;;13290:1;13287;13280:12;13244:2;13318:88;13398:7;13389:6;13378:9;13374:22;13318:88;:::i;:::-;13308:98;;13170:246;13455:2;13481:53;13526:7;13517:6;13506:9;13502:22;13481:53;:::i;:::-;13471:63;;13426:118;13583:3;13610:53;13655:7;13646:6;13635:9;13631:22;13610:53;:::i;:::-;13600:63;;13554:119;12606:1074;;;;;;;;:::o;13686:260::-;;13793:2;13781:9;13772:7;13768:23;13764:32;13761:2;;;13809:1;13806;13799:12;13761:2;13852:1;13877:52;13921:7;13912:6;13901:9;13897:22;13877:52;:::i;:::-;13867:62;;13823:116;13751:195;;;;:::o;13952:282::-;;14070:2;14058:9;14049:7;14045:23;14041:32;14038:2;;;14086:1;14083;14076:12;14038:2;14129:1;14154:63;14209:7;14200:6;14189:9;14185:22;14154:63;:::i;:::-;14144:73;;14100:127;14028:206;;;;:::o;14240:262::-;;14348:2;14336:9;14327:7;14323:23;14319:32;14316:2;;;14364:1;14361;14354:12;14316:2;14407:1;14432:53;14477:7;14468:6;14457:9;14453:22;14432:53;:::i;:::-;14422:63;;14378:117;14306:196;;;;:::o;14508:698::-;;;;;14667:3;14655:9;14646:7;14642:23;14638:33;14635:2;;;14684:1;14681;14674:12;14635:2;14727:1;14752:53;14797:7;14788:6;14777:9;14773:22;14752:53;:::i;:::-;14742:63;;14698:117;14854:2;14880:53;14925:7;14916:6;14905:9;14901:22;14880:53;:::i;:::-;14870:63;;14825:118;14982:2;15008:53;15053:7;15044:6;15033:9;15029:22;15008:53;:::i;:::-;14998:63;;14953:118;15110:2;15136:53;15181:7;15172:6;15161:9;15157:22;15136:53;:::i;:::-;15126:63;;15081:118;14625:581;;;;;;;:::o;15212:520::-;;;15347:2;15335:9;15326:7;15322:23;15318:32;15315:2;;;15363:1;15360;15353:12;15315:2;15406:1;15431:53;15476:7;15467:6;15456:9;15452:22;15431:53;:::i;:::-;15421:63;;15377:117;15561:2;15550:9;15546:18;15533:32;15592:18;15584:6;15581:30;15578:2;;;15624:1;15621;15614:12;15578:2;15652:63;15707:7;15698:6;15687:9;15683:22;15652:63;:::i;:::-;15642:73;;15504:221;15305:427;;;;;:::o;15738:196::-;;15862:66;15924:3;15916:6;15862:66;:::i;:::-;15848:80;;15838:96;;;;:::o;15940:179::-;;16030:46;16072:3;16064:6;16030:46;:::i;:::-;16108:4;16103:3;16099:14;16085:28;;16020:99;;;;:::o;16125:118::-;16212:24;16230:5;16212:24;:::i;:::-;16207:3;16200:37;16190:53;;:::o;16277:991::-;;16445:64;16503:5;16445:64;:::i;:::-;16525:96;16614:6;16609:3;16525:96;:::i;:::-;16518:103;;16647:3;16692:4;16684:6;16680:17;16675:3;16671:27;16722:66;16782:5;16722:66;:::i;:::-;16811:7;16842:1;16827:396;16852:6;16849:1;16846:13;16827:396;;;16923:9;16917:4;16913:20;16908:3;16901:33;16974:6;16968:13;17002:84;17081:4;17066:13;17002:84;:::i;:::-;16994:92;;17109:70;17172:6;17109:70;:::i;:::-;17099:80;;17208:4;17203:3;17199:14;17192:21;;16887:336;16874:1;16871;16867:9;16862:14;;16827:396;;;16831:14;17239:4;17232:11;;17259:3;17252:10;;16421:847;;;;;;;;;:::o;17304:732::-;;17452:54;17500:5;17452:54;:::i;:::-;17522:86;17601:6;17596:3;17522:86;:::i;:::-;17515:93;;17632:56;17682:5;17632:56;:::i;:::-;17711:7;17742:1;17727:284;17752:6;17749:1;17746:13;17727:284;;;17828:6;17822:13;17855:63;17914:3;17899:13;17855:63;:::i;:::-;17848:70;;17941:60;17994:6;17941:60;:::i;:::-;17931:70;;17787:224;17774:1;17771;17767:9;17762:14;;17727:284;;;17731:14;18027:3;18020:10;;17428:608;;;;;;;:::o;18042:109::-;18123:21;18138:5;18123:21;:::i;:::-;18118:3;18111:34;18101:50;;:::o;18157:115::-;18242:23;18259:5;18242:23;:::i;:::-;18237:3;18230:36;18220:52;;:::o;18278:360::-;;18392:38;18424:5;18392:38;:::i;:::-;18446:70;18509:6;18504:3;18446:70;:::i;:::-;18439:77;;18525:52;18570:6;18565:3;18558:4;18551:5;18547:16;18525:52;:::i;:::-;18602:29;18624:6;18602:29;:::i;:::-;18597:3;18593:39;18586:46;;18368:270;;;;;:::o;18644:344::-;;18750:39;18783:5;18750:39;:::i;:::-;18805:61;18859:6;18854:3;18805:61;:::i;:::-;18798:68;;18875:52;18920:6;18915:3;18908:4;18901:5;18897:16;18875:52;:::i;:::-;18952:29;18974:6;18952:29;:::i;:::-;18947:3;18943:39;18936:46;;18726:262;;;;;:::o;18994:364::-;;19110:39;19143:5;19110:39;:::i;:::-;19165:71;19229:6;19224:3;19165:71;:::i;:::-;19158:78;;19245:52;19290:6;19285:3;19278:4;19271:5;19267:16;19245:52;:::i;:::-;19322:29;19344:6;19322:29;:::i;:::-;19317:3;19313:39;19306:46;;19086:272;;;;;:::o;19364:384::-;;19527:67;19591:2;19586:3;19527:67;:::i;:::-;19520:74;;19624:34;19620:1;19615:3;19611:11;19604:55;19690:22;19685:2;19680:3;19676:12;19669:44;19739:2;19734:3;19730:12;19723:19;;19510:238;;;:::o;19754:372::-;;19917:67;19981:2;19976:3;19917:67;:::i;:::-;19910:74;;20014:34;20010:1;20005:3;20001:11;19994:55;20080:10;20075:2;20070:3;20066:12;20059:32;20117:2;20112:3;20108:12;20101:19;;19900:226;;;:::o;20132:375::-;;20295:67;20359:2;20354:3;20295:67;:::i;:::-;20288:74;;20392:34;20388:1;20383:3;20379:11;20372:55;20458:13;20453:2;20448:3;20444:12;20437:35;20498:2;20493:3;20489:12;20482:19;;20278:229;;;:::o;20513:368::-;;20676:67;20740:2;20735:3;20676:67;:::i;:::-;20669:74;;20773:34;20769:1;20764:3;20760:11;20753:55;20839:6;20834:2;20829:3;20825:12;20818:28;20872:2;20867:3;20863:12;20856:19;;20659:222;;;:::o;20887:373::-;;21050:67;21114:2;21109:3;21050:67;:::i;:::-;21043:74;;21147:34;21143:1;21138:3;21134:11;21127:55;21213:11;21208:2;21203:3;21199:12;21192:33;21251:2;21246:3;21242:12;21235:19;;21033:227;;;:::o;21266:366::-;;21429:67;21493:2;21488:3;21429:67;:::i;:::-;21422:74;;21526:34;21522:1;21517:3;21513:11;21506:55;21592:4;21587:2;21582:3;21578:12;21571:26;21623:2;21618:3;21614:12;21607:19;;21412:220;;;:::o;21638:369::-;;21801:67;21865:2;21860:3;21801:67;:::i;:::-;21794:74;;21898:34;21894:1;21889:3;21885:11;21878:55;21964:7;21959:2;21954:3;21950:12;21943:29;21998:2;21993:3;21989:12;21982:19;;21784:223;;;:::o;22013:382::-;;22176:67;22240:2;22235:3;22176:67;:::i;:::-;22169:74;;22273:34;22269:1;22264:3;22260:11;22253:55;22339:20;22334:2;22329:3;22325:12;22318:42;22386:2;22381:3;22377:12;22370:19;;22159:236;;;:::o;22401:367::-;;22564:67;22628:2;22623:3;22564:67;:::i;:::-;22557:74;;22661:34;22657:1;22652:3;22648:11;22641:55;22727:5;22722:2;22717:3;22713:12;22706:27;22759:2;22754:3;22750:12;22743:19;;22547:221;;;:::o;22774:374::-;;22937:67;23001:2;22996:3;22937:67;:::i;:::-;22930:74;;23034:34;23030:1;23025:3;23021:11;23014:55;23100:12;23095:2;23090:3;23086:12;23079:34;23139:2;23134:3;23130:12;23123:19;;22920:228;;;:::o;23154:368::-;;23317:67;23381:2;23376:3;23317:67;:::i;:::-;23310:74;;23414:34;23410:1;23405:3;23401:11;23394:55;23480:6;23475:2;23470:3;23466:12;23459:28;23513:2;23508:3;23504:12;23497:19;;23300:222;;;:::o;23528:373::-;;23691:67;23755:2;23750:3;23691:67;:::i;:::-;23684:74;;23788:34;23784:1;23779:3;23775:11;23768:55;23854:11;23849:2;23844:3;23840:12;23833:33;23892:2;23887:3;23883:12;23876:19;;23674:227;;;:::o;23907:373::-;;24070:67;24134:2;24129:3;24070:67;:::i;:::-;24063:74;;24167:34;24163:1;24158:3;24154:11;24147:55;24233:11;24228:2;24223:3;24219:12;24212:33;24271:2;24266:3;24262:12;24255:19;;24053:227;;;:::o;24286:372::-;;24449:67;24513:2;24508:3;24449:67;:::i;:::-;24442:74;;24546:34;24542:1;24537:3;24533:11;24526:55;24612:10;24607:2;24602:3;24598:12;24591:32;24649:2;24644:3;24640:12;24633:19;;24432:226;;;:::o;24664:365::-;;24827:67;24891:2;24886:3;24827:67;:::i;:::-;24820:74;;24924:34;24920:1;24915:3;24911:11;24904:55;24990:3;24985:2;24980:3;24976:12;24969:25;25020:2;25015:3;25011:12;25004:19;;24810:219;;;:::o;25035:108::-;25112:24;25130:5;25112:24;:::i;:::-;25107:3;25100:37;25090:53;;:::o;25149:118::-;25236:24;25254:5;25236:24;:::i;:::-;25231:3;25224:37;25214:53;;:::o;25273:222::-;;25404:2;25393:9;25389:18;25381:26;;25417:71;25485:1;25474:9;25470:17;25461:6;25417:71;:::i;:::-;25371:124;;;;:::o;25501:1053::-;;25862:3;25851:9;25847:19;25839:27;;25876:71;25944:1;25933:9;25929:17;25920:6;25876:71;:::i;:::-;25957:72;26025:2;26014:9;26010:18;26001:6;25957:72;:::i;:::-;26076:9;26070:4;26066:20;26061:2;26050:9;26046:18;26039:48;26104:108;26207:4;26198:6;26104:108;:::i;:::-;26096:116;;26259:9;26253:4;26249:20;26244:2;26233:9;26229:18;26222:48;26287:108;26390:4;26381:6;26287:108;:::i;:::-;26279:116;;26443:9;26437:4;26433:20;26427:3;26416:9;26412:19;26405:49;26471:76;26542:4;26533:6;26471:76;:::i;:::-;26463:84;;25829:725;;;;;;;;:::o;26560:751::-;;26821:3;26810:9;26806:19;26798:27;;26835:71;26903:1;26892:9;26888:17;26879:6;26835:71;:::i;:::-;26916:72;26984:2;26973:9;26969:18;26960:6;26916:72;:::i;:::-;26998;27066:2;27055:9;27051:18;27042:6;26998:72;:::i;:::-;27080;27148:2;27137:9;27133:18;27124:6;27080:72;:::i;:::-;27200:9;27194:4;27190:20;27184:3;27173:9;27169:19;27162:49;27228:76;27299:4;27290:6;27228:76;:::i;:::-;27220:84;;26788:523;;;;;;;;:::o;27317:373::-;;27498:2;27487:9;27483:18;27475:26;;27547:9;27541:4;27537:20;27533:1;27522:9;27518:17;27511:47;27575:108;27678:4;27669:6;27575:108;:::i;:::-;27567:116;;27465:225;;;;:::o;27696:1046::-;;28081:3;28070:9;28066:19;28058:27;;28131:9;28125:4;28121:20;28117:1;28106:9;28102:17;28095:47;28159:108;28262:4;28253:6;28159:108;:::i;:::-;28151:116;;28314:9;28308:4;28304:20;28299:2;28288:9;28284:18;28277:48;28342:128;28465:4;28456:6;28342:128;:::i;:::-;28334:136;;28517:9;28511:4;28507:20;28502:2;28491:9;28487:18;28480:48;28545:108;28648:4;28639:6;28545:108;:::i;:::-;28537:116;;28663:72;28731:2;28720:9;28716:18;28707:6;28663:72;:::i;:::-;28048:694;;;;;;;:::o;28748:634::-;;29007:2;28996:9;28992:18;28984:26;;29056:9;29050:4;29046:20;29042:1;29031:9;29027:17;29020:47;29084:108;29187:4;29178:6;29084:108;:::i;:::-;29076:116;;29239:9;29233:4;29229:20;29224:2;29213:9;29209:18;29202:48;29267:108;29370:4;29361:6;29267:108;:::i;:::-;29259:116;;28974:408;;;;;:::o;29388:210::-;;29513:2;29502:9;29498:18;29490:26;;29526:65;29588:1;29577:9;29573:17;29564:6;29526:65;:::i;:::-;29480:118;;;;:::o;29604:218::-;;29733:2;29722:9;29718:18;29710:26;;29746:69;29812:1;29801:9;29797:17;29788:6;29746:69;:::i;:::-;29700:122;;;;:::o;29828:313::-;;29979:2;29968:9;29964:18;29956:26;;30028:9;30022:4;30018:20;30014:1;30003:9;29999:17;29992:47;30056:78;30129:4;30120:6;30056:78;:::i;:::-;30048:86;;29946:195;;;;:::o;30147:419::-;;30351:2;30340:9;30336:18;30328:26;;30400:9;30394:4;30390:20;30386:1;30375:9;30371:17;30364:47;30428:131;30554:4;30428:131;:::i;:::-;30420:139;;30318:248;;;:::o;30572:419::-;;30776:2;30765:9;30761:18;30753:26;;30825:9;30819:4;30815:20;30811:1;30800:9;30796:17;30789:47;30853:131;30979:4;30853:131;:::i;:::-;30845:139;;30743:248;;;:::o;30997:419::-;;31201:2;31190:9;31186:18;31178:26;;31250:9;31244:4;31240:20;31236:1;31225:9;31221:17;31214:47;31278:131;31404:4;31278:131;:::i;:::-;31270:139;;31168:248;;;:::o;31422:419::-;;31626:2;31615:9;31611:18;31603:26;;31675:9;31669:4;31665:20;31661:1;31650:9;31646:17;31639:47;31703:131;31829:4;31703:131;:::i;:::-;31695:139;;31593:248;;;:::o;31847:419::-;;32051:2;32040:9;32036:18;32028:26;;32100:9;32094:4;32090:20;32086:1;32075:9;32071:17;32064:47;32128:131;32254:4;32128:131;:::i;:::-;32120:139;;32018:248;;;:::o;32272:419::-;;32476:2;32465:9;32461:18;32453:26;;32525:9;32519:4;32515:20;32511:1;32500:9;32496:17;32489:47;32553:131;32679:4;32553:131;:::i;:::-;32545:139;;32443:248;;;:::o;32697:419::-;;32901:2;32890:9;32886:18;32878:26;;32950:9;32944:4;32940:20;32936:1;32925:9;32921:17;32914:47;32978:131;33104:4;32978:131;:::i;:::-;32970:139;;32868:248;;;:::o;33122:419::-;;33326:2;33315:9;33311:18;33303:26;;33375:9;33369:4;33365:20;33361:1;33350:9;33346:17;33339:47;33403:131;33529:4;33403:131;:::i;:::-;33395:139;;33293:248;;;:::o;33547:419::-;;33751:2;33740:9;33736:18;33728:26;;33800:9;33794:4;33790:20;33786:1;33775:9;33771:17;33764:47;33828:131;33954:4;33828:131;:::i;:::-;33820:139;;33718:248;;;:::o;33972:419::-;;34176:2;34165:9;34161:18;34153:26;;34225:9;34219:4;34215:20;34211:1;34200:9;34196:17;34189:47;34253:131;34379:4;34253:131;:::i;:::-;34245:139;;34143:248;;;:::o;34397:419::-;;34601:2;34590:9;34586:18;34578:26;;34650:9;34644:4;34640:20;34636:1;34625:9;34621:17;34614:47;34678:131;34804:4;34678:131;:::i;:::-;34670:139;;34568:248;;;:::o;34822:419::-;;35026:2;35015:9;35011:18;35003:26;;35075:9;35069:4;35065:20;35061:1;35050:9;35046:17;35039:47;35103:131;35229:4;35103:131;:::i;:::-;35095:139;;34993:248;;;:::o;35247:419::-;;35451:2;35440:9;35436:18;35428:26;;35500:9;35494:4;35490:20;35486:1;35475:9;35471:17;35464:47;35528:131;35654:4;35528:131;:::i;:::-;35520:139;;35418:248;;;:::o;35672:419::-;;35876:2;35865:9;35861:18;35853:26;;35925:9;35919:4;35915:20;35911:1;35900:9;35896:17;35889:47;35953:131;36079:4;35953:131;:::i;:::-;35945:139;;35843:248;;;:::o;36097:419::-;;36301:2;36290:9;36286:18;36278:26;;36350:9;36344:4;36340:20;36336:1;36325:9;36321:17;36314:47;36378:131;36504:4;36378:131;:::i;:::-;36370:139;;36268:248;;;:::o;36522:222::-;;36653:2;36642:9;36638:18;36630:26;;36666:71;36734:1;36723:9;36719:17;36710:6;36666:71;:::i;:::-;36620:124;;;;:::o;36750:442::-;;36937:2;36926:9;36922:18;36914:26;;36950:71;37018:1;37007:9;37003:17;36994:6;36950:71;:::i;:::-;37031:72;37099:2;37088:9;37084:18;37075:6;37031:72;:::i;:::-;37113;37181:2;37170:9;37166:18;37157:6;37113:72;:::i;:::-;36904:288;;;;;;:::o;37198:332::-;;37357:2;37346:9;37342:18;37334:26;;37370:71;37438:1;37427:9;37423:17;37414:6;37370:71;:::i;:::-;37451:72;37519:2;37508:9;37504:18;37495:6;37451:72;:::i;:::-;37324:206;;;;;:::o;37536:283::-;;37602:2;37596:9;37586:19;;37644:4;37636:6;37632:17;37751:6;37739:10;37736:22;37715:18;37703:10;37700:34;37697:62;37694:2;;;37762:18;;:::i;:::-;37694:2;37802:10;37798:2;37791:22;37576:243;;;;:::o;37825:311::-;;37992:18;37984:6;37981:30;37978:2;;;38014:18;;:::i;:::-;37978:2;38064:4;38056:6;38052:17;38044:25;;38124:4;38118;38114:15;38106:23;;37907:229;;;:::o;38142:321::-;;38319:18;38311:6;38308:30;38305:2;;;38341:18;;:::i;:::-;38305:2;38391:4;38383:6;38379:17;38371:25;;38451:4;38445;38441:15;38433:23;;38234:229;;;:::o;38469:311::-;;38636:18;38628:6;38625:30;38622:2;;;38658:18;;:::i;:::-;38622:2;38708:4;38700:6;38696:17;38688:25;;38768:4;38762;38758:15;38750:23;;38551:229;;;:::o;38786:331::-;;38937:18;38929:6;38926:30;38923:2;;;38959:18;;:::i;:::-;38923:2;39044:4;39040:9;39033:4;39025:6;39021:17;39017:33;39009:41;;39105:4;39099;39095:15;39087:23;;38852:265;;;:::o;39123:332::-;;39275:18;39267:6;39264:30;39261:2;;;39297:18;;:::i;:::-;39261:2;39382:4;39378:9;39371:4;39363:6;39359:17;39355:33;39347:41;;39443:4;39437;39433:15;39425:23;;39190:265;;;:::o;39461:142::-;;39561:3;39553:11;;39591:4;39586:3;39582:14;39574:22;;39543:60;;;:::o;39609:132::-;;39699:3;39691:11;;39729:4;39724:3;39720:14;39712:22;;39681:60;;;:::o;39747:124::-;;39858:5;39852:12;39842:22;;39831:40;;;:::o;39877:114::-;;39978:5;39972:12;39962:22;;39951:40;;;:::o;39997:98::-;;40082:5;40076:12;40066:22;;40055:40;;;:::o;40101:99::-;;40187:5;40181:12;40171:22;;40160:40;;;:::o;40206:123::-;;40318:4;40313:3;40309:14;40301:22;;40291:38;;;:::o;40335:113::-;;40437:4;40432:3;40428:14;40420:22;;40410:38;;;:::o;40454:194::-;;40597:6;40592:3;40585:19;40637:4;40632:3;40628:14;40613:29;;40575:73;;;;:::o;40654:184::-;;40787:6;40782:3;40775:19;40827:4;40822:3;40818:14;40803:29;;40765:73;;;;:::o;40844:168::-;;40961:6;40956:3;40949:19;41001:4;40996:3;40992:14;40977:29;;40939:73;;;;:::o;41018:159::-;;41126:6;41121:3;41114:19;41166:4;41161:3;41157:14;41142:29;;41104:73;;;;:::o;41183:169::-;;41301:6;41296:3;41289:19;41341:4;41336:3;41332:14;41317:29;;41279:73;;;;:::o;41358:305::-;;41417:20;41435:1;41417:20;:::i;:::-;41412:25;;41451:20;41469:1;41451:20;:::i;:::-;41446:25;;41605:1;41537:66;41533:74;41530:1;41527:81;41524:2;;;41611:18;;:::i;:::-;41524:2;41655:1;41652;41648:9;41641:16;;41402:261;;;;:::o;41669:191::-;;41729:20;41747:1;41729:20;:::i;:::-;41724:25;;41763:20;41781:1;41763:20;:::i;:::-;41758:25;;41802:1;41799;41796:8;41793:2;;;41807:18;;:::i;:::-;41793:2;41852:1;41849;41845:9;41837:17;;41714:146;;;;:::o;41866:96::-;;41932:24;41950:5;41932:24;:::i;:::-;41921:35;;41911:51;;;:::o;41968:90::-;;42045:5;42038:13;42031:21;42020:32;;42010:48;;;:::o;42064:149::-;;42140:66;42133:5;42129:78;42118:89;;42108:105;;;:::o;42219:126::-;;42296:42;42289:5;42285:54;42274:65;;42264:81;;;:::o;42351:77::-;;42417:5;42406:16;;42396:32;;;:::o;42434:154::-;42518:6;42513:3;42508;42495:30;42580:1;42571:6;42566:3;42562:16;42555:27;42485:103;;;:::o;42594:307::-;42662:1;42672:113;42686:6;42683:1;42680:13;42672:113;;;42771:1;42766:3;42762:11;42756:18;42752:1;42747:3;42743:11;42736:39;42708:2;42705:1;42701:10;42696:15;;42672:113;;;42803:6;42800:1;42797:13;42794:2;;;42883:1;42874:6;42869:3;42865:16;42858:27;42794:2;42643:258;;;;:::o;42907:320::-;;42988:1;42982:4;42978:12;42968:22;;43035:1;43029:4;43025:12;43056:18;43046:2;;43112:4;43104:6;43100:17;43090:27;;43046:2;43174;43166:6;43163:14;43143:18;43140:38;43137:2;;;43193:18;;:::i;:::-;43137:2;42958:269;;;;:::o;43233:233::-;;43295:24;43313:5;43295:24;:::i;:::-;43286:33;;43341:66;43334:5;43331:77;43328:2;;;43411:18;;:::i;:::-;43328:2;43458:1;43451:5;43447:13;43440:20;;43276:190;;;:::o;43472:180::-;43520:77;43517:1;43510:88;43617:4;43614:1;43607:15;43641:4;43638:1;43631:15;43658:180;43706:77;43703:1;43696:88;43803:4;43800:1;43793:15;43827:4;43824:1;43817:15;43844:180;43892:77;43889:1;43882:88;43989:4;43986:1;43979:15;44013:4;44010:1;44003:15;44030:102;;44122:2;44118:7;44113:2;44106:5;44102:14;44098:28;44088:38;;44078:54;;;:::o;44138:106::-;;44231:5;44226:3;44222:15;44201:36;;44191:53;;;:::o;44250:833::-;;44327:4;44309:16;44306:26;44303:2;;;44335:5;;44303:2;44373:1;44370;44367;44352:23;44395:34;44426:1;44420:8;44395:34;:::i;:::-;44456:10;44451:3;44448:19;44438:2;;44471:5;;;44438:2;44506;44500:9;44564:1;44546:16;44542:24;44539:1;44533:4;44518:49;44597:4;44591:11;44696:16;44689:4;44681:6;44677:17;44674:39;44641:18;44633:6;44630:30;44614:113;44611:2;;;44742:5;;;;;44611:2;44788:6;44782:4;44778:17;44824:3;44818:10;44851:18;44843:6;44840:30;44837:2;;;44873:5;;;;;;;44837:2;44921:6;44914:4;44909:3;44905:14;44901:27;44958:16;44952:4;44948:27;44943:3;44940:36;44937:2;;;44979:5;;;;;;;;44937:2;45027:29;45049:6;45027:29;:::i;:::-;45020:4;45015:3;45011:14;45007:50;45003:2;44996:62;45074:3;45067:10;;44293:790;;;;;;;;:::o;45089:122::-;45162:24;45180:5;45162:24;:::i;:::-;45155:5;45152:35;45142:2;;45201:1;45198;45191:12;45142:2;45132:79;:::o;45217:116::-;45287:21;45302:5;45287:21;:::i;:::-;45280:5;45277:32;45267:2;;45323:1;45320;45313:12;45267:2;45257:76;:::o;45339:120::-;45411:23;45428:5;45411:23;:::i;:::-;45404:5;45401:34;45391:2;;45449:1;45446;45439:12;45391:2;45381:78;:::o;45465:122::-;45538:24;45556:5;45538:24;:::i;:::-;45531:5;45528:35;45518:2;;45577:1;45574;45567:12;45518:2;45508:79;:::o

Swarm Source

ipfs://dea1237535e1efce4961ae78809673a11baebcb44d4fd5661d96c02bd0277ab4
Block Transaction Gas Used Reward
Age Block Fee Address Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading