ETH Price: $2,979.21 (-4.02%)
Gas: 2 Gwei

Token

Aura Meditators (MEDITATOR)
 

Overview

Max Total Supply

724 MEDITATOR

Holders

378

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
0xMaki
0x285b7eea81a5b66b62e7276a24c1e0f83f7409c1
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
AuraRelockers

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

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



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

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

// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)



/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}




// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/extensions/ERC1155Burnable.sol)




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




// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol)





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


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





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

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


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





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


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)



/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}



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





/**
 * @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: address zero is not a valid owner");
        return _balances[id][account];
    }

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

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

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

        return batchBalances;
    }

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

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

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

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

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

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

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

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

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

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * 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 _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

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

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

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

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

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

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

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

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

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

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

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

        address operator = _msgSender();

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

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

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

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

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

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

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `ids` and `amounts` 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 {}

    /**
     * @dev Hook that is called after 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 _afterTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

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

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

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

        return array;
    }
}


/**
 * @dev Extension of {ERC1155} that allows token holders to destroy both their
 * own tokens and those that they have been approved to use.
 *
 * _Available since v3.1._
 */
abstract contract ERC1155Burnable is ERC1155 {
    function burn(
        address account,
        uint256 id,
        uint256 value
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not token owner nor approved"
        );

        _burn(account, id, value);
    }

    function burnBatch(
        address account,
        uint256[] memory ids,
        uint256[] memory values
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not token owner nor approved"
        );

        _burnBatch(account, ids, values);
    }
}


// OpenZeppelin Contracts (last updated v4.7.0) (utils/cryptography/MerkleProof.sol)



/**
 * @dev These functions deal with verification of Merkle Tree proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 *
 * WARNING: You should avoid using leaf values that are 64 bytes long prior to
 * hashing, or use a hash function other than keccak256 for hashing leaves.
 * This is because the concatenation of a sorted pair of internal nodes in
 * the merkle tree could be reinterpreted as a leaf value.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Calldata version of {verify}
     *
     * _Available since v4.7._
     */
    function verifyCalldata(
        bytes32[] calldata proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProofCalldata(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Calldata version of {processProof}
     *
     * _Available since v4.7._
     */
    function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Returns true if the `leaves` can be proved to be a part of a Merkle tree defined by
     * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
     *
     * _Available since v4.7._
     */
    function multiProofVerify(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProof(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Calldata version of {multiProofVerify}
     *
     * _Available since v4.7._
     */
    function multiProofVerifyCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProofCalldata(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Returns the root of a tree reconstructed from `leaves` and the sibling nodes in `proof`,
     * consuming from one or the other at each step according to the instructions given by
     * `proofFlags`.
     *
     * _Available since v4.7._
     */
    function processMultiProof(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    /**
     * @dev Calldata version of {processMultiProof}
     *
     * _Available since v4.7._
     */
    function processMultiProofCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
        return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)





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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

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



contract AuraRelockers is ERC1155Burnable, Ownable {
    using Strings for uint256;

    /* -------------------------------------------------------------------
     Types
  ------------------------------------------------------------------- */

    enum Tier {
        COMMON,
        UNCOMMON,
        RARE,
        EPIC,
        LEGENDARY
    }

    /* -------------------------------------------------------------------
     Storage
  ------------------------------------------------------------------- */

    // Token name
    string public name;

    // Token symbol
    string public symbol;

    // Mapping from token ID to token supply
    mapping(uint256 => uint256) private tokenSupply;

    /// @dev Number used once for pseudo randomness
    uint256 public nonce;

    /// @dev Array of valid merkle roots
    bytes32[] public roots;

    /// @dev Map address to has claimed (user => rootIdx => claimed)
    mapping(address => mapping(uint256 => bool)) public claimedRoot;

    /// @dev Map address to has claimed (user => rootIdx => claimed)
    mapping(address => uint256) public userNonce;

    /* -------------------------------------------------------------------
     Events
  ------------------------------------------------------------------- */

    event RootsUpdated(bytes32 newRoot);

    event BaseUriUpdated(string oldBaseUri, string baseUri);

    event Minted(address user, Tier tier);

    /* -------------------------------------------------------------------
     Constructor
  ------------------------------------------------------------------- */

    /**
     * @param _name    Token name
     * @param _symbol  Token symbol
     * @param _baseUri Token Base URI
     */
    constructor(
        string memory _name,
        string memory _symbol,
        string memory _baseUri
    ) ERC1155(_baseUri) {
        name = _name;
        symbol = _symbol;
    }

    /* -------------------------------------------------------------------
     Setters
  ------------------------------------------------------------------- */

    /**
     * @dev Add root to roots array
     * @param _root Thew new merkle root to add
     */
    function addRoot(bytes32 _root) external onlyOwner {
        roots.push(_root);
        emit RootsUpdated(_root);
    }

    /**
     * @dev Update base URI
     * @param _baseUri The base URI
     */
    function setBaseUri(string memory _baseUri) external onlyOwner {
        string memory oldBaseUri = super.uri(0);
        _setURI(_baseUri);
        emit BaseUriUpdated(oldBaseUri, _baseUri);
    }

    /* -------------------------------------------------------------------
     Minting
  ------------------------------------------------------------------- */

    /**
     * @dev Mint token by providing a valid merkle proof
     * @param _to         Address to mint to
     * @param _proof      Merkle proof
     * @param _rootIndex  Index of the root in roots
     */
    function mint(
        address _to,
        bytes32[] memory _proof,
        uint256 _rootIndex
    ) external {
        require(userNonce[_to] < 5, "claimed 5");
        require(!claimedRoot[_to][_rootIndex], "claimed root");
        require(MerkleProof.verify(_proof, roots[_rootIndex], keccak256(abi.encodePacked(_to))), "!proof");

        // Get the next token ID and increment the global ID
        // Save the tier for this token ID and mint the token
        // to the _to address
        nonce += 1;
        userNonce[_to] += 1;
        claimedRoot[_to][_rootIndex] = true;
        Tier tier = _getTier();
        _mint(_to, uint256(tier), 1, new bytes(0));

        emit Minted(_to, tier);
    }

    /**
     * @dev Returns the URI of a token given its ID
     * @param id ID of the token to query
     * @return uri of the token or an empty string if it does not exist
     */
    function uri(uint256 id) public view override returns (string memory) {
        require(id < 5, "URI query for nonexistent token");

        string memory baseUri = super.uri(0);
        return string(abi.encodePacked(baseUri, Strings.toString(id)));
    }

    /**
     * @dev Returns the URI of the contract information
     */
    function contractURI() external view returns (string memory) {
        // base64-encoded string:
        // {
        //     "name": "Aura Meditators",
        //     "description": "An NFT collection exclusively for re-lockers of Aura.",
        //     "image": "ipfs://Qmf9oGfsP2rHJksY515JbzyMQ9h3GXCBrwiC7jCHAuj2Z2",
        //     "external_link": "https://aura.finance/",
        //     "seller_fee_basis_points": 0
        // }
        return string(abi.encodePacked("data:application/json;base64,ewoJIm5hbWUiOiAiQXVyYSBNZWRpdGF0b3JzIiwKCSJkZXNjcmlwdGlvbiI6ICJBbiBORlQgY29sbGVjdGlvbiBleGNsdXNpdmVseSBmb3IgcmUtbG9ja2VycyBvZiBBdXJhLiIsCgkiaW1hZ2UiOiAiaXBmczovL1FtZjlvR2ZzUDJySEprc1k1MTVKYnp5TVE5aDNHWENCcndpQzdqQ0hBdWoyWjIiLAoJImV4dGVybmFsX2xpbmsiOiAiaHR0cHM6Ly9hdXJhLmZpbmFuY2UvIiwKCSJzZWxsZXJfZmVlX2Jhc2lzX3BvaW50cyI6IDAKfQ=="));
    }

    /**
     * @dev Returns the total quantity for a token ID
     * @param id ID of the token to query
     * @return amount of token in existence
     */
    function totalSupply(uint256 id) external view returns (uint256) {
        return tokenSupply[id];
    }

    /* -------------------------------------------------------------------
     Internal
  ------------------------------------------------------------------- */

    function _getTier() internal view returns (Tier) {
        uint256 seed = _pseudoRand() % 199;

        if (seed == 0) {
            return Tier.LEGENDARY;
        } else if (seed <= 4) {
            return Tier.EPIC;
        } else if (seed <= 29) {
            return Tier.RARE;
        } else if (seed <= 89) {
            return Tier.UNCOMMON;
        } else {
            return Tier.COMMON;
        }
    }

    function _pseudoRand() internal view returns (uint256) {
        return
            uint256(
                keccak256(
                    abi.encodePacked(
                        block.timestamp +
                            block.difficulty +
                            ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (block.timestamp)) +
                            block.gaslimit +
                            ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (block.timestamp)) +
                            block.number,
                        nonce
                    )
                )
            );
    }

    function _beforeTokenTransfer(
        address, /* operator */
        address from,
        address to,
        uint256[] memory, /* ids */
        uint256[] memory, /* amounts */
        bytes memory /* data */
    ) internal pure override {
        // Allowed to mint and burn but all other transfers are
        // not allowed
        require(from == address(0) || to == address(0), "!transferable");
    }

    /**
     * @dev Internal override function for minting an NFT
     */
    function _mint(
        address account,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal override {
        super._mint(account, id, amount, data);

        tokenSupply[id] += amount;
    }

    /**
     * @dev Internal override function for burning an NFT
     */
    function _burn(
        address account,
        uint256 id,
        uint256 amount
    ) internal override {
        super._burn(account, id, amount);

        tokenSupply[id] -= amount;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_baseUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"oldBaseUri","type":"string"},{"indexed":false,"internalType":"string","name":"baseUri","type":"string"}],"name":"BaseUriUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"enum AuraRelockers.Tier","name":"tier","type":"uint8"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"newRoot","type":"bytes32"}],"name":"RootsUpdated","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":"bytes32","name":"_root","type":"bytes32"}],"name":"addRoot","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":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimedRoot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"_to","type":"address"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"},{"internalType":"uint256","name":"_rootIndex","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"roots","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseUri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50604051620053d7380380620053d783398181016040528101906200003791906200030d565b8062000049816200009760201b60201c565b506200006a6200005e620000ac60201b60201c565b620000b460201b60201c565b82600490816200007b919062000611565b5081600590816200008d919062000611565b50505050620006f8565b8060029081620000a8919062000611565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001e38262000198565b810181811067ffffffffffffffff82111715620002055762000204620001a9565b5b80604052505050565b60006200021a6200017a565b9050620002288282620001d8565b919050565b600067ffffffffffffffff8211156200024b576200024a620001a9565b5b620002568262000198565b9050602081019050919050565b60005b838110156200028357808201518184015260208101905062000266565b60008484015250505050565b6000620002a6620002a0846200022d565b6200020e565b905082815260208101848484011115620002c557620002c462000193565b5b620002d284828562000263565b509392505050565b600082601f830112620002f257620002f16200018e565b5b8151620003048482602086016200028f565b91505092915050565b60008060006060848603121562000329576200032862000184565b5b600084015167ffffffffffffffff8111156200034a576200034962000189565b5b6200035886828701620002da565b935050602084015167ffffffffffffffff8111156200037c576200037b62000189565b5b6200038a86828701620002da565b925050604084015167ffffffffffffffff811115620003ae57620003ad62000189565b5b620003bc86828701620002da565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200041957607f821691505b6020821081036200042f576200042e620003d1565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004997fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200045a565b620004a586836200045a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004f2620004ec620004e684620004bd565b620004c7565b620004bd565b9050919050565b6000819050919050565b6200050e83620004d1565b620005266200051d82620004f9565b84845462000467565b825550505050565b600090565b6200053d6200052e565b6200054a81848462000503565b505050565b5b8181101562000572576200056660008262000533565b60018101905062000550565b5050565b601f821115620005c1576200058b8162000435565b62000596846200044a565b81016020851015620005a6578190505b620005be620005b5856200044a565b8301826200054f565b50505b505050565b600082821c905092915050565b6000620005e660001984600802620005c6565b1980831691505092915050565b6000620006018383620005d3565b9150826002028217905092915050565b6200061c82620003c6565b67ffffffffffffffff811115620006385762000637620001a9565b5b62000644825462000400565b6200065182828562000576565b600060209050601f83116001811462000689576000841562000674578287015190505b620006808582620005f3565b865550620006f0565b601f198416620006998662000435565b60005b82811015620006c3578489015182556001820191506020850194506020810190506200069c565b86831015620006e35784890151620006df601f891682620005d3565b8355505b6001600288020188555050505b505050505050565b614ccf80620007086000396000f3fe608060405234801561001057600080fd5b50600436106101565760003560e01c8063a0bcfc7f116100c3578063d59e64611161007c578063d59e6461146103e9578063e8a3d48514610405578063e985e9c514610423578063f242432a14610453578063f2fde38b1461046f578063f5298aca1461048b57610156565b8063a0bcfc7f14610317578063a22cb46514610333578063a2dd9d871461034f578063affed0e01461036b578063bd85b03914610389578063c2b40ae4146103b957610156565b80632eb2c2d6116101155780632eb2c2d6146102695780634e1273f4146102855780636b20c454146102b5578063715018a6146102d15780638da5cb5b146102db57806395d89b41146102f957610156565b8062936d511461015b578062fdd58e1461018b57806301ffc9a7146101bb57806306fdde03146101eb5780630e89341c146102095780632e04b8e714610239575b600080fd5b61017560048036038101906101709190612b60565b6104a7565b6040516101829190612bbb565b60405180910390f35b6101a560048036038101906101a09190612b60565b6104d6565b6040516101b29190612be5565b60405180910390f35b6101d560048036038101906101d09190612c58565b61059e565b6040516101e29190612bbb565b60405180910390f35b6101f3610680565b6040516102009190612d15565b60405180910390f35b610223600480360381019061021e9190612d37565b61070e565b6040516102309190612d15565b60405180910390f35b610253600480360381019061024e9190612d64565b610793565b6040516102609190612be5565b60405180910390f35b610283600480360381019061027e9190612f8e565b6107ab565b005b61029f600480360381019061029a9190613120565b61084c565b6040516102ac9190613256565b60405180910390f35b6102cf60048036038101906102ca9190613278565b610965565b005b6102d9610a02565b005b6102e3610a16565b6040516102f09190613312565b60405180910390f35b610301610a40565b60405161030e9190612d15565b60405180910390f35b610331600480360381019061032c91906133ce565b610ace565b005b61034d60048036038101906103489190613443565b610b2a565b005b6103696004803603810190610364919061357c565b610b40565b005b610373610e7f565b6040516103809190612be5565b60405180910390f35b6103a3600480360381019061039e9190612d37565b610e85565b6040516103b09190612be5565b60405180910390f35b6103d360048036038101906103ce9190612d37565b610ea2565b6040516103e091906135fa565b60405180910390f35b61040360048036038101906103fe9190613615565b610ec6565b005b61040d610f31565b60405161041a9190612d15565b60405180910390f35b61043d60048036038101906104389190613642565b610f56565b60405161044a9190612bbb565b60405180910390f35b61046d60048036038101906104689190613682565b610fea565b005b61048960048036038101906104849190612d64565b61108b565b005b6104a560048036038101906104a09190613719565b61110e565b005b60096020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053d906137de565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061066957507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106795750610678826111ab565b5b9050919050565b6004805461068d9061382d565b80601f01602080910402602001604051908101604052809291908181526020018280546106b99061382d565b80156107065780601f106106db57610100808354040283529160200191610706565b820191906000526020600020905b8154815290600101906020018083116106e957829003601f168201915b505050505081565b606060058210610753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074a906138aa565b60405180910390fd5b600061075f6000611215565b90508061076b846112a9565b60405160200161077c929190613906565b604051602081830303815290604052915050919050565b600a6020528060005260406000206000915090505481565b6107b3611409565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806107f957506107f8856107f3611409565b610f56565b5b610838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082f9061399c565b60405180910390fd5b6108458585858585611411565b5050505050565b60608151835114610892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088990613a2e565b60405180910390fd5b6000835167ffffffffffffffff8111156108af576108ae612d96565b5b6040519080825280602002602001820160405280156108dd5781602001602082028036833780820191505090505b50905060005b845181101561095a5761092a85828151811061090257610901613a4e565b5b602002602001015185838151811061091d5761091c613a4e565b5b60200260200101516104d6565b82828151811061093d5761093c613a4e565b5b6020026020010181815250508061095390613aac565b90506108e3565b508091505092915050565b61096d611409565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806109b357506109b2836109ad611409565b610f56565b5b6109f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e99061399c565b60405180910390fd5b6109fd838383611732565b505050565b610a0a611a00565b610a146000611a7e565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610a4d9061382d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a799061382d565b8015610ac65780601f10610a9b57610100808354040283529160200191610ac6565b820191906000526020600020905b815481529060010190602001808311610aa957829003601f168201915b505050505081565b610ad6611a00565b6000610ae26000611215565b9050610aed82611b44565b7f99562a81a2bc5868cd8c30b7b2964f5e52ec358ace402063ecd18a505f5d08008183604051610b1e929190613af4565b60405180910390a15050565b610b3c610b35611409565b8383611b57565b5050565b6005600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410610bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb990613b77565b60405180910390fd5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002060009054906101000a900460ff1615610c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5790613be3565b60405180910390fd5b610caf8260088381548110610c7857610c77613a4e565b5b906000526020600020015485604051602001610c949190613c4b565b60405160208183030381529060405280519060200120611cc3565b610cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce590613cb2565b60405180910390fd5b600160076000828254610d019190613cd2565b925050819055506001600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d589190613cd2565b925050819055506001600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff0219169083151502179055506000610dd2611cda565b9050610e4084826004811115610deb57610dea613d06565b5b6001600067ffffffffffffffff811115610e0857610e07612d96565b5b6040519080825280601f01601f191660200182016040528015610e3a5781602001600182028036833780820191505090505b50611d44565b7f94e3d3b755fb8272fed036a2000052ce127005b67c47d63b3cb642cb0e7464128482604051610e71929190613d7d565b60405180910390a150505050565b60075481565b600060066000838152602001908152602001600020549050919050565b60088181548110610eb257600080fd5b906000526020600020016000915090505481565b610ece611a00565b60088190806001815401808255809150506001900390600052602060002001600090919091909150557fbac1d1a4003bb7d60cd530f9857f9eadadce150d519ac8764c71b57448735e8781604051610f2691906135fa565b60405180910390a150565b6060604051602001610f4290613f9a565b604051602081830303815290604052905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610ff2611409565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611038575061103785611032611409565b610f56565b5b611077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106e9061399c565b60405180910390fd5b6110848585858585611d80565b5050505050565b611093611a00565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f990614021565b60405180910390fd5b61110b81611a7e565b50565b611116611409565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061115c575061115b83611156611409565b610f56565b5b61119b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111929061399c565b60405180910390fd5b6111a683838361201b565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6060600280546112249061382d565b80601f01602080910402602001604051908101604052809291908181526020018280546112509061382d565b801561129d5780601f106112725761010080835404028352916020019161129d565b820191906000526020600020905b81548152906001019060200180831161128057829003601f168201915b50505050509050919050565b6060600082036112f0576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611404565b600082905060005b6000821461132257808061130b90613aac565b915050600a8261131b9190614070565b91506112f8565b60008167ffffffffffffffff81111561133e5761133d612d96565b5b6040519080825280601f01601f1916602001820160405280156113705781602001600182028036833780820191505090505b5090505b600085146113fd5760018261138991906140a1565b9150600a8561139891906140d5565b60306113a49190613cd2565b60f81b8183815181106113ba576113b9613a4e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856113f69190614070565b9450611374565b8093505050505b919050565b600033905090565b8151835114611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144c90614178565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036114c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bb9061420a565b60405180910390fd5b60006114ce611409565b90506114de818787878787612055565b60005b845181101561168f5760008582815181106114ff576114fe613a4e565b5b60200260200101519050600085838151811061151e5761151d613a4e565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156115bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b69061429c565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116749190613cd2565b925050819055505050508061168890613aac565b90506114e1565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516117069291906142bc565b60405180910390a461171c818787878787612103565b61172a81878787878761210b565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179890614365565b60405180910390fd5b80518251146117e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dc90614178565b60405180910390fd5b60006117ef611409565b905061180f81856000868660405180602001604052806000815250612055565b60005b835181101561195c5760008482815181106118305761182f613a4e565b5b60200260200101519050600084838151811061184f5761184e613a4e565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156118f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e7906143f7565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061195490613aac565b915050611812565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516119d49291906142bc565b60405180910390a46119fa81856000868660405180602001604052806000815250612103565b50505050565b611a08611409565b73ffffffffffffffffffffffffffffffffffffffff16611a26610a16565b73ffffffffffffffffffffffffffffffffffffffff1614611a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7390614463565b60405180910390fd5b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060029081611b53919061462f565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbc90614773565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cb69190612bbb565b60405180910390a3505050565b600082611cd085846122e2565b1490509392505050565b60008060c7611ce7612338565b611cf191906140d5565b905060008103611d05576004915050611d41565b60048111611d17576003915050611d41565b601d8111611d29576002915050611d41565b60598111611d3b576001915050611d41565b60009150505b90565b611d508484848461240c565b81600660008581526020019081526020016000206000828254611d739190613cd2565b9250508190555050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de69061420a565b60405180910390fd5b6000611df9611409565b90506000611e06856125bc565b90506000611e13856125bc565b9050611e23838989858589612055565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb19061429c565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f6f9190613cd2565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611fec929190614793565b60405180910390a4612002848a8a86868a612103565b612010848a8a8a8a8a612636565b505050505050505050565b61202683838361280d565b8060066000848152602001908152602001600020600082825461204991906140a1565b92505081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806120bc5750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b6120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f290614808565b60405180910390fd5b505050505050565b505050505050565b61212a8473ffffffffffffffffffffffffffffffffffffffff16612a53565b156122da578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161217095949392919061487d565b6020604051808303816000875af19250505080156121ac57506040513d601f19601f820116820180604052508101906121a991906148fa565b60015b612251576121b8614934565b806308c379a00361221457506121cc614956565b806121d75750612216565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220b9190612d15565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224890614a58565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146122d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cf90614aea565b60405180910390fd5b505b505050505050565b60008082905060005b845181101561232d576123188286838151811061230b5761230a613a4e565b5b6020026020010151612a76565b9150808061232590613aac565b9150506122eb565b508091505092915050565b600043423360405160200161234d9190613c4b565b6040516020818303038152906040528051906020012060001c6123709190614070565b4542416040516020016123839190614b45565b6040516020818303038152906040528051906020012060001c6123a69190614070565b44426123b29190613cd2565b6123bc9190613cd2565b6123c69190613cd2565b6123d09190613cd2565b6123da9190613cd2565b6007546040516020016123ee929190614b81565b6040516020818303038152906040528051906020012060001c905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361247b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247290614c1f565b60405180910390fd5b6000612485611409565b90506000612492856125bc565b9050600061249f856125bc565b90506124b083600089858589612055565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461250f9190613cd2565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161258d929190614793565b60405180910390a46125a483600089858589612103565b6125b383600089898989612636565b50505050505050565b60606000600167ffffffffffffffff8111156125db576125da612d96565b5b6040519080825280602002602001820160405280156126095781602001602082028036833780820191505090505b509050828160008151811061262157612620613a4e565b5b60200260200101818152505080915050919050565b6126558473ffffffffffffffffffffffffffffffffffffffff16612a53565b15612805578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161269b959493929190614c3f565b6020604051808303816000875af19250505080156126d757506040513d601f19601f820116820180604052508101906126d491906148fa565b60015b61277c576126e3614934565b806308c379a00361273f57506126f7614956565b806127025750612741565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127369190612d15565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277390614a58565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fa90614aea565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361287c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287390614365565b60405180910390fd5b6000612886611409565b90506000612893846125bc565b905060006128a0846125bc565b90506128c083876000858560405180602001604052806000815250612055565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015612957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294e906143f7565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051612a24929190614793565b60405180910390a4612a4a84886000868660405180602001604052806000815250612103565b50505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000818310612a8e57612a898284612aa1565b612a99565b612a988383612aa1565b5b905092915050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612af782612acc565b9050919050565b612b0781612aec565b8114612b1257600080fd5b50565b600081359050612b2481612afe565b92915050565b6000819050919050565b612b3d81612b2a565b8114612b4857600080fd5b50565b600081359050612b5a81612b34565b92915050565b60008060408385031215612b7757612b76612ac2565b5b6000612b8585828601612b15565b9250506020612b9685828601612b4b565b9150509250929050565b60008115159050919050565b612bb581612ba0565b82525050565b6000602082019050612bd06000830184612bac565b92915050565b612bdf81612b2a565b82525050565b6000602082019050612bfa6000830184612bd6565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612c3581612c00565b8114612c4057600080fd5b50565b600081359050612c5281612c2c565b92915050565b600060208284031215612c6e57612c6d612ac2565b5b6000612c7c84828501612c43565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612cbf578082015181840152602081019050612ca4565b60008484015250505050565b6000601f19601f8301169050919050565b6000612ce782612c85565b612cf18185612c90565b9350612d01818560208601612ca1565b612d0a81612ccb565b840191505092915050565b60006020820190508181036000830152612d2f8184612cdc565b905092915050565b600060208284031215612d4d57612d4c612ac2565b5b6000612d5b84828501612b4b565b91505092915050565b600060208284031215612d7a57612d79612ac2565b5b6000612d8884828501612b15565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612dce82612ccb565b810181811067ffffffffffffffff82111715612ded57612dec612d96565b5b80604052505050565b6000612e00612ab8565b9050612e0c8282612dc5565b919050565b600067ffffffffffffffff821115612e2c57612e2b612d96565b5b602082029050602081019050919050565b600080fd5b6000612e55612e5084612e11565b612df6565b90508083825260208201905060208402830185811115612e7857612e77612e3d565b5b835b81811015612ea15780612e8d8882612b4b565b845260208401935050602081019050612e7a565b5050509392505050565b600082601f830112612ec057612ebf612d91565b5b8135612ed0848260208601612e42565b91505092915050565b600080fd5b600067ffffffffffffffff821115612ef957612ef8612d96565b5b612f0282612ccb565b9050602081019050919050565b82818337600083830152505050565b6000612f31612f2c84612ede565b612df6565b905082815260208101848484011115612f4d57612f4c612ed9565b5b612f58848285612f0f565b509392505050565b600082601f830112612f7557612f74612d91565b5b8135612f85848260208601612f1e565b91505092915050565b600080600080600060a08688031215612faa57612fa9612ac2565b5b6000612fb888828901612b15565b9550506020612fc988828901612b15565b945050604086013567ffffffffffffffff811115612fea57612fe9612ac7565b5b612ff688828901612eab565b935050606086013567ffffffffffffffff81111561301757613016612ac7565b5b61302388828901612eab565b925050608086013567ffffffffffffffff81111561304457613043612ac7565b5b61305088828901612f60565b9150509295509295909350565b600067ffffffffffffffff82111561307857613077612d96565b5b602082029050602081019050919050565b600061309c6130978461305d565b612df6565b905080838252602082019050602084028301858111156130bf576130be612e3d565b5b835b818110156130e857806130d48882612b15565b8452602084019350506020810190506130c1565b5050509392505050565b600082601f83011261310757613106612d91565b5b8135613117848260208601613089565b91505092915050565b6000806040838503121561313757613136612ac2565b5b600083013567ffffffffffffffff81111561315557613154612ac7565b5b613161858286016130f2565b925050602083013567ffffffffffffffff81111561318257613181612ac7565b5b61318e85828601612eab565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6131cd81612b2a565b82525050565b60006131df83836131c4565b60208301905092915050565b6000602082019050919050565b600061320382613198565b61320d81856131a3565b9350613218836131b4565b8060005b8381101561324957815161323088826131d3565b975061323b836131eb565b92505060018101905061321c565b5085935050505092915050565b6000602082019050818103600083015261327081846131f8565b905092915050565b60008060006060848603121561329157613290612ac2565b5b600061329f86828701612b15565b935050602084013567ffffffffffffffff8111156132c0576132bf612ac7565b5b6132cc86828701612eab565b925050604084013567ffffffffffffffff8111156132ed576132ec612ac7565b5b6132f986828701612eab565b9150509250925092565b61330c81612aec565b82525050565b60006020820190506133276000830184613303565b92915050565b600067ffffffffffffffff82111561334857613347612d96565b5b61335182612ccb565b9050602081019050919050565b600061337161336c8461332d565b612df6565b90508281526020810184848401111561338d5761338c612ed9565b5b613398848285612f0f565b509392505050565b600082601f8301126133b5576133b4612d91565b5b81356133c584826020860161335e565b91505092915050565b6000602082840312156133e4576133e3612ac2565b5b600082013567ffffffffffffffff81111561340257613401612ac7565b5b61340e848285016133a0565b91505092915050565b61342081612ba0565b811461342b57600080fd5b50565b60008135905061343d81613417565b92915050565b6000806040838503121561345a57613459612ac2565b5b600061346885828601612b15565b92505060206134798582860161342e565b9150509250929050565b600067ffffffffffffffff82111561349e5761349d612d96565b5b602082029050602081019050919050565b6000819050919050565b6134c2816134af565b81146134cd57600080fd5b50565b6000813590506134df816134b9565b92915050565b60006134f86134f384613483565b612df6565b9050808382526020820190506020840283018581111561351b5761351a612e3d565b5b835b81811015613544578061353088826134d0565b84526020840193505060208101905061351d565b5050509392505050565b600082601f83011261356357613562612d91565b5b81356135738482602086016134e5565b91505092915050565b60008060006060848603121561359557613594612ac2565b5b60006135a386828701612b15565b935050602084013567ffffffffffffffff8111156135c4576135c3612ac7565b5b6135d08682870161354e565b92505060406135e186828701612b4b565b9150509250925092565b6135f4816134af565b82525050565b600060208201905061360f60008301846135eb565b92915050565b60006020828403121561362b5761362a612ac2565b5b6000613639848285016134d0565b91505092915050565b6000806040838503121561365957613658612ac2565b5b600061366785828601612b15565b925050602061367885828601612b15565b9150509250929050565b600080600080600060a0868803121561369e5761369d612ac2565b5b60006136ac88828901612b15565b95505060206136bd88828901612b15565b94505060406136ce88828901612b4b565b93505060606136df88828901612b4b565b925050608086013567ffffffffffffffff811115613700576136ff612ac7565b5b61370c88828901612f60565b9150509295509295909350565b60008060006060848603121561373257613731612ac2565b5b600061374086828701612b15565b935050602061375186828701612b4b565b925050604061376286828701612b4b565b9150509250925092565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b60006137c8602a83612c90565b91506137d38261376c565b604082019050919050565b600060208201905081810360008301526137f7816137bb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061384557607f821691505b602082108103613858576138576137fe565b5b50919050565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00600082015250565b6000613894601f83612c90565b915061389f8261385e565b602082019050919050565b600060208201905081810360008301526138c381613887565b9050919050565b600081905092915050565b60006138e082612c85565b6138ea81856138ca565b93506138fa818560208601612ca1565b80840191505092915050565b600061391282856138d5565b915061391e82846138d5565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b6000613986602f83612c90565b91506139918261392a565b604082019050919050565b600060208201905081810360008301526139b581613979565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613a18602983612c90565b9150613a23826139bc565b604082019050919050565b60006020820190508181036000830152613a4781613a0b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ab782612b2a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ae957613ae8613a7d565b5b600182019050919050565b60006040820190508181036000830152613b0e8185612cdc565b90508181036020830152613b228184612cdc565b90509392505050565b7f636c61696d656420350000000000000000000000000000000000000000000000600082015250565b6000613b61600983612c90565b9150613b6c82613b2b565b602082019050919050565b60006020820190508181036000830152613b9081613b54565b9050919050565b7f636c61696d656420726f6f740000000000000000000000000000000000000000600082015250565b6000613bcd600c83612c90565b9150613bd882613b97565b602082019050919050565b60006020820190508181036000830152613bfc81613bc0565b9050919050565b60008160601b9050919050565b6000613c1b82613c03565b9050919050565b6000613c2d82613c10565b9050919050565b613c45613c4082612aec565b613c22565b82525050565b6000613c578284613c34565b60148201915081905092915050565b7f2170726f6f660000000000000000000000000000000000000000000000000000600082015250565b6000613c9c600683612c90565b9150613ca782613c66565b602082019050919050565b60006020820190508181036000830152613ccb81613c8f565b9050919050565b6000613cdd82612b2a565b9150613ce883612b2a565b9250828201905080821115613d0057613cff613a7d565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60058110613d4657613d45613d06565b5b50565b6000819050613d5782613d35565b919050565b6000613d6782613d49565b9050919050565b613d7781613d5c565b82525050565b6000604082019050613d926000830185613303565b613d9f6020830184613d6e565b9392505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c65776f60008201527f4a496d3568625755694f694169515856795953424e5a5752706447463062334a60208201527f7a4969774b43534a6b5a584e6a636d6c7764476c766269493649434a4262694260408201527f4f526c5167593239736247566a64476c766269426c65474e7364584e70646d5660608201527f736553426d62334967636d55746247396a61325679637942765a69424264584a60808201527f684c69497343676b69615731685a3255694f6941696158426d637a6f764c314660a08201527f745a6a6c7652325a7a55444a795345707263316b314d54564b596e703554564560c08201527f3561444e4857454e43636e6470517a64715130684264576f79576a49694c416f60e08201527f4a496d563464475679626d467358327870626d73694f6941696148523063484d6101008201527f364c79396864584a684c6d5a70626d4675593255764969774b43534a7a5a57786101208201527f735a584a665a6d566c58324a6863326c7a5833427661573530637949364944416101408201527f4b66513d3d00000000000000000000000000000000000000000000000000000061016082015250565b6000613f83610165836138ca565b9150613f8e82613da6565b61016582019050919050565b6000613fa582613f75565b9150819050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061400b602683612c90565b915061401682613faf565b604082019050919050565b6000602082019050818103600083015261403a81613ffe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061407b82612b2a565b915061408683612b2a565b92508261409657614095614041565b5b828204905092915050565b60006140ac82612b2a565b91506140b783612b2a565b92508282039050818111156140cf576140ce613a7d565b5b92915050565b60006140e082612b2a565b91506140eb83612b2a565b9250826140fb576140fa614041565b5b828206905092915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000614162602883612c90565b915061416d82614106565b604082019050919050565b6000602082019050818103600083015261419181614155565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006141f4602583612c90565b91506141ff82614198565b604082019050919050565b60006020820190508181036000830152614223816141e7565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000614286602a83612c90565b91506142918261422a565b604082019050919050565b600060208201905081810360008301526142b581614279565b9050919050565b600060408201905081810360008301526142d681856131f8565b905081810360208301526142ea81846131f8565b90509392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061434f602383612c90565b915061435a826142f3565b604082019050919050565b6000602082019050818103600083015261437e81614342565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b60006143e1602483612c90565b91506143ec82614385565b604082019050919050565b60006020820190508181036000830152614410816143d4565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061444d602083612c90565b915061445882614417565b602082019050919050565b6000602082019050818103600083015261447c81614440565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026144e57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826144a8565b6144ef86836144a8565b95508019841693508086168417925050509392505050565b6000819050919050565b600061452c61452761452284612b2a565b614507565b612b2a565b9050919050565b6000819050919050565b61454683614511565b61455a61455282614533565b8484546144b5565b825550505050565b600090565b61456f614562565b61457a81848461453d565b505050565b5b8181101561459e57614593600082614567565b600181019050614580565b5050565b601f8211156145e3576145b481614483565b6145bd84614498565b810160208510156145cc578190505b6145e06145d885614498565b83018261457f565b50505b505050565b600082821c905092915050565b6000614606600019846008026145e8565b1980831691505092915050565b600061461f83836145f5565b9150826002028217905092915050565b61463882612c85565b67ffffffffffffffff81111561465157614650612d96565b5b61465b825461382d565b6146668282856145a2565b600060209050601f8311600181146146995760008415614687578287015190505b6146918582614613565b8655506146f9565b601f1984166146a786614483565b60005b828110156146cf578489015182556001820191506020850194506020810190506146aa565b868310156146ec57848901516146e8601f8916826145f5565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061475d602983612c90565b915061476882614701565b604082019050919050565b6000602082019050818103600083015261478c81614750565b9050919050565b60006040820190506147a86000830185612bd6565b6147b56020830184612bd6565b9392505050565b7f217472616e7366657261626c6500000000000000000000000000000000000000600082015250565b60006147f2600d83612c90565b91506147fd826147bc565b602082019050919050565b60006020820190508181036000830152614821816147e5565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061484f82614828565b6148598185614833565b9350614869818560208601612ca1565b61487281612ccb565b840191505092915050565b600060a0820190506148926000830188613303565b61489f6020830187613303565b81810360408301526148b181866131f8565b905081810360608301526148c581856131f8565b905081810360808301526148d98184614844565b90509695505050505050565b6000815190506148f481612c2c565b92915050565b6000602082840312156149105761490f612ac2565b5b600061491e848285016148e5565b91505092915050565b60008160e01c9050919050565b600060033d11156149535760046000803e614950600051614927565b90505b90565b600060443d106149e357614968612ab8565b60043d036004823e80513d602482011167ffffffffffffffff821117156149905750506149e3565b808201805167ffffffffffffffff8111156149ae57505050506149e3565b80602083010160043d0385018111156149cb5750505050506149e3565b6149da82602001850186612dc5565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000614a42603483612c90565b9150614a4d826149e6565b604082019050919050565b60006020820190508181036000830152614a7181614a35565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000614ad4602883612c90565b9150614adf82614a78565b604082019050919050565b60006020820190508181036000830152614b0381614ac7565b9050919050565b6000614b1582612acc565b9050919050565b6000614b2782613c10565b9050919050565b614b3f614b3a82614b0a565b614b1c565b82525050565b6000614b518284614b2e565b60148201915081905092915050565b6000819050919050565b614b7b614b7682612b2a565b614b60565b82525050565b6000614b8d8285614b6a565b602082019150614b9d8284614b6a565b6020820191508190509392505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c09602183612c90565b9150614c1482614bad565b604082019050919050565b60006020820190508181036000830152614c3881614bfc565b9050919050565b600060a082019050614c546000830188613303565b614c616020830187613303565b614c6e6040830186612bd6565b614c7b6060830185612bd6565b8181036080830152614c8d8184614844565b9050969550505050505056fea264697066735822122038345c8871738efde64ca50d50d238b9384b318c63a4e4bde730d49a82cc198864736f6c63430008110033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000f41757261204d6564697461746f7273000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094d4544495441544f5200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d624a3271653241684e4546577a3966566448746969504345755237444b4a5a38764548565565566f593837782f00000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101565760003560e01c8063a0bcfc7f116100c3578063d59e64611161007c578063d59e6461146103e9578063e8a3d48514610405578063e985e9c514610423578063f242432a14610453578063f2fde38b1461046f578063f5298aca1461048b57610156565b8063a0bcfc7f14610317578063a22cb46514610333578063a2dd9d871461034f578063affed0e01461036b578063bd85b03914610389578063c2b40ae4146103b957610156565b80632eb2c2d6116101155780632eb2c2d6146102695780634e1273f4146102855780636b20c454146102b5578063715018a6146102d15780638da5cb5b146102db57806395d89b41146102f957610156565b8062936d511461015b578062fdd58e1461018b57806301ffc9a7146101bb57806306fdde03146101eb5780630e89341c146102095780632e04b8e714610239575b600080fd5b61017560048036038101906101709190612b60565b6104a7565b6040516101829190612bbb565b60405180910390f35b6101a560048036038101906101a09190612b60565b6104d6565b6040516101b29190612be5565b60405180910390f35b6101d560048036038101906101d09190612c58565b61059e565b6040516101e29190612bbb565b60405180910390f35b6101f3610680565b6040516102009190612d15565b60405180910390f35b610223600480360381019061021e9190612d37565b61070e565b6040516102309190612d15565b60405180910390f35b610253600480360381019061024e9190612d64565b610793565b6040516102609190612be5565b60405180910390f35b610283600480360381019061027e9190612f8e565b6107ab565b005b61029f600480360381019061029a9190613120565b61084c565b6040516102ac9190613256565b60405180910390f35b6102cf60048036038101906102ca9190613278565b610965565b005b6102d9610a02565b005b6102e3610a16565b6040516102f09190613312565b60405180910390f35b610301610a40565b60405161030e9190612d15565b60405180910390f35b610331600480360381019061032c91906133ce565b610ace565b005b61034d60048036038101906103489190613443565b610b2a565b005b6103696004803603810190610364919061357c565b610b40565b005b610373610e7f565b6040516103809190612be5565b60405180910390f35b6103a3600480360381019061039e9190612d37565b610e85565b6040516103b09190612be5565b60405180910390f35b6103d360048036038101906103ce9190612d37565b610ea2565b6040516103e091906135fa565b60405180910390f35b61040360048036038101906103fe9190613615565b610ec6565b005b61040d610f31565b60405161041a9190612d15565b60405180910390f35b61043d60048036038101906104389190613642565b610f56565b60405161044a9190612bbb565b60405180910390f35b61046d60048036038101906104689190613682565b610fea565b005b61048960048036038101906104849190612d64565b61108b565b005b6104a560048036038101906104a09190613719565b61110e565b005b60096020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053d906137de565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061066957507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106795750610678826111ab565b5b9050919050565b6004805461068d9061382d565b80601f01602080910402602001604051908101604052809291908181526020018280546106b99061382d565b80156107065780601f106106db57610100808354040283529160200191610706565b820191906000526020600020905b8154815290600101906020018083116106e957829003601f168201915b505050505081565b606060058210610753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074a906138aa565b60405180910390fd5b600061075f6000611215565b90508061076b846112a9565b60405160200161077c929190613906565b604051602081830303815290604052915050919050565b600a6020528060005260406000206000915090505481565b6107b3611409565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806107f957506107f8856107f3611409565b610f56565b5b610838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082f9061399c565b60405180910390fd5b6108458585858585611411565b5050505050565b60608151835114610892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088990613a2e565b60405180910390fd5b6000835167ffffffffffffffff8111156108af576108ae612d96565b5b6040519080825280602002602001820160405280156108dd5781602001602082028036833780820191505090505b50905060005b845181101561095a5761092a85828151811061090257610901613a4e565b5b602002602001015185838151811061091d5761091c613a4e565b5b60200260200101516104d6565b82828151811061093d5761093c613a4e565b5b6020026020010181815250508061095390613aac565b90506108e3565b508091505092915050565b61096d611409565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806109b357506109b2836109ad611409565b610f56565b5b6109f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e99061399c565b60405180910390fd5b6109fd838383611732565b505050565b610a0a611a00565b610a146000611a7e565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610a4d9061382d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a799061382d565b8015610ac65780601f10610a9b57610100808354040283529160200191610ac6565b820191906000526020600020905b815481529060010190602001808311610aa957829003601f168201915b505050505081565b610ad6611a00565b6000610ae26000611215565b9050610aed82611b44565b7f99562a81a2bc5868cd8c30b7b2964f5e52ec358ace402063ecd18a505f5d08008183604051610b1e929190613af4565b60405180910390a15050565b610b3c610b35611409565b8383611b57565b5050565b6005600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410610bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb990613b77565b60405180910390fd5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002060009054906101000a900460ff1615610c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5790613be3565b60405180910390fd5b610caf8260088381548110610c7857610c77613a4e565b5b906000526020600020015485604051602001610c949190613c4b565b60405160208183030381529060405280519060200120611cc3565b610cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce590613cb2565b60405180910390fd5b600160076000828254610d019190613cd2565b925050819055506001600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d589190613cd2565b925050819055506001600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff0219169083151502179055506000610dd2611cda565b9050610e4084826004811115610deb57610dea613d06565b5b6001600067ffffffffffffffff811115610e0857610e07612d96565b5b6040519080825280601f01601f191660200182016040528015610e3a5781602001600182028036833780820191505090505b50611d44565b7f94e3d3b755fb8272fed036a2000052ce127005b67c47d63b3cb642cb0e7464128482604051610e71929190613d7d565b60405180910390a150505050565b60075481565b600060066000838152602001908152602001600020549050919050565b60088181548110610eb257600080fd5b906000526020600020016000915090505481565b610ece611a00565b60088190806001815401808255809150506001900390600052602060002001600090919091909150557fbac1d1a4003bb7d60cd530f9857f9eadadce150d519ac8764c71b57448735e8781604051610f2691906135fa565b60405180910390a150565b6060604051602001610f4290613f9a565b604051602081830303815290604052905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610ff2611409565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611038575061103785611032611409565b610f56565b5b611077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106e9061399c565b60405180910390fd5b6110848585858585611d80565b5050505050565b611093611a00565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f990614021565b60405180910390fd5b61110b81611a7e565b50565b611116611409565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061115c575061115b83611156611409565b610f56565b5b61119b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111929061399c565b60405180910390fd5b6111a683838361201b565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6060600280546112249061382d565b80601f01602080910402602001604051908101604052809291908181526020018280546112509061382d565b801561129d5780601f106112725761010080835404028352916020019161129d565b820191906000526020600020905b81548152906001019060200180831161128057829003601f168201915b50505050509050919050565b6060600082036112f0576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611404565b600082905060005b6000821461132257808061130b90613aac565b915050600a8261131b9190614070565b91506112f8565b60008167ffffffffffffffff81111561133e5761133d612d96565b5b6040519080825280601f01601f1916602001820160405280156113705781602001600182028036833780820191505090505b5090505b600085146113fd5760018261138991906140a1565b9150600a8561139891906140d5565b60306113a49190613cd2565b60f81b8183815181106113ba576113b9613a4e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856113f69190614070565b9450611374565b8093505050505b919050565b600033905090565b8151835114611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144c90614178565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036114c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bb9061420a565b60405180910390fd5b60006114ce611409565b90506114de818787878787612055565b60005b845181101561168f5760008582815181106114ff576114fe613a4e565b5b60200260200101519050600085838151811061151e5761151d613a4e565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156115bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b69061429c565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116749190613cd2565b925050819055505050508061168890613aac565b90506114e1565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516117069291906142bc565b60405180910390a461171c818787878787612103565b61172a81878787878761210b565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179890614365565b60405180910390fd5b80518251146117e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dc90614178565b60405180910390fd5b60006117ef611409565b905061180f81856000868660405180602001604052806000815250612055565b60005b835181101561195c5760008482815181106118305761182f613a4e565b5b60200260200101519050600084838151811061184f5761184e613a4e565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156118f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e7906143f7565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061195490613aac565b915050611812565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516119d49291906142bc565b60405180910390a46119fa81856000868660405180602001604052806000815250612103565b50505050565b611a08611409565b73ffffffffffffffffffffffffffffffffffffffff16611a26610a16565b73ffffffffffffffffffffffffffffffffffffffff1614611a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7390614463565b60405180910390fd5b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060029081611b53919061462f565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbc90614773565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cb69190612bbb565b60405180910390a3505050565b600082611cd085846122e2565b1490509392505050565b60008060c7611ce7612338565b611cf191906140d5565b905060008103611d05576004915050611d41565b60048111611d17576003915050611d41565b601d8111611d29576002915050611d41565b60598111611d3b576001915050611d41565b60009150505b90565b611d508484848461240c565b81600660008581526020019081526020016000206000828254611d739190613cd2565b9250508190555050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de69061420a565b60405180910390fd5b6000611df9611409565b90506000611e06856125bc565b90506000611e13856125bc565b9050611e23838989858589612055565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb19061429c565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f6f9190613cd2565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611fec929190614793565b60405180910390a4612002848a8a86868a612103565b612010848a8a8a8a8a612636565b505050505050505050565b61202683838361280d565b8060066000848152602001908152602001600020600082825461204991906140a1565b92505081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806120bc5750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b6120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f290614808565b60405180910390fd5b505050505050565b505050505050565b61212a8473ffffffffffffffffffffffffffffffffffffffff16612a53565b156122da578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161217095949392919061487d565b6020604051808303816000875af19250505080156121ac57506040513d601f19601f820116820180604052508101906121a991906148fa565b60015b612251576121b8614934565b806308c379a00361221457506121cc614956565b806121d75750612216565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220b9190612d15565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224890614a58565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146122d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cf90614aea565b60405180910390fd5b505b505050505050565b60008082905060005b845181101561232d576123188286838151811061230b5761230a613a4e565b5b6020026020010151612a76565b9150808061232590613aac565b9150506122eb565b508091505092915050565b600043423360405160200161234d9190613c4b565b6040516020818303038152906040528051906020012060001c6123709190614070565b4542416040516020016123839190614b45565b6040516020818303038152906040528051906020012060001c6123a69190614070565b44426123b29190613cd2565b6123bc9190613cd2565b6123c69190613cd2565b6123d09190613cd2565b6123da9190613cd2565b6007546040516020016123ee929190614b81565b6040516020818303038152906040528051906020012060001c905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361247b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247290614c1f565b60405180910390fd5b6000612485611409565b90506000612492856125bc565b9050600061249f856125bc565b90506124b083600089858589612055565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461250f9190613cd2565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161258d929190614793565b60405180910390a46125a483600089858589612103565b6125b383600089898989612636565b50505050505050565b60606000600167ffffffffffffffff8111156125db576125da612d96565b5b6040519080825280602002602001820160405280156126095781602001602082028036833780820191505090505b509050828160008151811061262157612620613a4e565b5b60200260200101818152505080915050919050565b6126558473ffffffffffffffffffffffffffffffffffffffff16612a53565b15612805578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161269b959493929190614c3f565b6020604051808303816000875af19250505080156126d757506040513d601f19601f820116820180604052508101906126d491906148fa565b60015b61277c576126e3614934565b806308c379a00361273f57506126f7614956565b806127025750612741565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127369190612d15565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277390614a58565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fa90614aea565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361287c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287390614365565b60405180910390fd5b6000612886611409565b90506000612893846125bc565b905060006128a0846125bc565b90506128c083876000858560405180602001604052806000815250612055565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015612957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294e906143f7565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051612a24929190614793565b60405180910390a4612a4a84886000868660405180602001604052806000815250612103565b50505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000818310612a8e57612a898284612aa1565b612a99565b612a988383612aa1565b5b905092915050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612af782612acc565b9050919050565b612b0781612aec565b8114612b1257600080fd5b50565b600081359050612b2481612afe565b92915050565b6000819050919050565b612b3d81612b2a565b8114612b4857600080fd5b50565b600081359050612b5a81612b34565b92915050565b60008060408385031215612b7757612b76612ac2565b5b6000612b8585828601612b15565b9250506020612b9685828601612b4b565b9150509250929050565b60008115159050919050565b612bb581612ba0565b82525050565b6000602082019050612bd06000830184612bac565b92915050565b612bdf81612b2a565b82525050565b6000602082019050612bfa6000830184612bd6565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612c3581612c00565b8114612c4057600080fd5b50565b600081359050612c5281612c2c565b92915050565b600060208284031215612c6e57612c6d612ac2565b5b6000612c7c84828501612c43565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612cbf578082015181840152602081019050612ca4565b60008484015250505050565b6000601f19601f8301169050919050565b6000612ce782612c85565b612cf18185612c90565b9350612d01818560208601612ca1565b612d0a81612ccb565b840191505092915050565b60006020820190508181036000830152612d2f8184612cdc565b905092915050565b600060208284031215612d4d57612d4c612ac2565b5b6000612d5b84828501612b4b565b91505092915050565b600060208284031215612d7a57612d79612ac2565b5b6000612d8884828501612b15565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612dce82612ccb565b810181811067ffffffffffffffff82111715612ded57612dec612d96565b5b80604052505050565b6000612e00612ab8565b9050612e0c8282612dc5565b919050565b600067ffffffffffffffff821115612e2c57612e2b612d96565b5b602082029050602081019050919050565b600080fd5b6000612e55612e5084612e11565b612df6565b90508083825260208201905060208402830185811115612e7857612e77612e3d565b5b835b81811015612ea15780612e8d8882612b4b565b845260208401935050602081019050612e7a565b5050509392505050565b600082601f830112612ec057612ebf612d91565b5b8135612ed0848260208601612e42565b91505092915050565b600080fd5b600067ffffffffffffffff821115612ef957612ef8612d96565b5b612f0282612ccb565b9050602081019050919050565b82818337600083830152505050565b6000612f31612f2c84612ede565b612df6565b905082815260208101848484011115612f4d57612f4c612ed9565b5b612f58848285612f0f565b509392505050565b600082601f830112612f7557612f74612d91565b5b8135612f85848260208601612f1e565b91505092915050565b600080600080600060a08688031215612faa57612fa9612ac2565b5b6000612fb888828901612b15565b9550506020612fc988828901612b15565b945050604086013567ffffffffffffffff811115612fea57612fe9612ac7565b5b612ff688828901612eab565b935050606086013567ffffffffffffffff81111561301757613016612ac7565b5b61302388828901612eab565b925050608086013567ffffffffffffffff81111561304457613043612ac7565b5b61305088828901612f60565b9150509295509295909350565b600067ffffffffffffffff82111561307857613077612d96565b5b602082029050602081019050919050565b600061309c6130978461305d565b612df6565b905080838252602082019050602084028301858111156130bf576130be612e3d565b5b835b818110156130e857806130d48882612b15565b8452602084019350506020810190506130c1565b5050509392505050565b600082601f83011261310757613106612d91565b5b8135613117848260208601613089565b91505092915050565b6000806040838503121561313757613136612ac2565b5b600083013567ffffffffffffffff81111561315557613154612ac7565b5b613161858286016130f2565b925050602083013567ffffffffffffffff81111561318257613181612ac7565b5b61318e85828601612eab565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6131cd81612b2a565b82525050565b60006131df83836131c4565b60208301905092915050565b6000602082019050919050565b600061320382613198565b61320d81856131a3565b9350613218836131b4565b8060005b8381101561324957815161323088826131d3565b975061323b836131eb565b92505060018101905061321c565b5085935050505092915050565b6000602082019050818103600083015261327081846131f8565b905092915050565b60008060006060848603121561329157613290612ac2565b5b600061329f86828701612b15565b935050602084013567ffffffffffffffff8111156132c0576132bf612ac7565b5b6132cc86828701612eab565b925050604084013567ffffffffffffffff8111156132ed576132ec612ac7565b5b6132f986828701612eab565b9150509250925092565b61330c81612aec565b82525050565b60006020820190506133276000830184613303565b92915050565b600067ffffffffffffffff82111561334857613347612d96565b5b61335182612ccb565b9050602081019050919050565b600061337161336c8461332d565b612df6565b90508281526020810184848401111561338d5761338c612ed9565b5b613398848285612f0f565b509392505050565b600082601f8301126133b5576133b4612d91565b5b81356133c584826020860161335e565b91505092915050565b6000602082840312156133e4576133e3612ac2565b5b600082013567ffffffffffffffff81111561340257613401612ac7565b5b61340e848285016133a0565b91505092915050565b61342081612ba0565b811461342b57600080fd5b50565b60008135905061343d81613417565b92915050565b6000806040838503121561345a57613459612ac2565b5b600061346885828601612b15565b92505060206134798582860161342e565b9150509250929050565b600067ffffffffffffffff82111561349e5761349d612d96565b5b602082029050602081019050919050565b6000819050919050565b6134c2816134af565b81146134cd57600080fd5b50565b6000813590506134df816134b9565b92915050565b60006134f86134f384613483565b612df6565b9050808382526020820190506020840283018581111561351b5761351a612e3d565b5b835b81811015613544578061353088826134d0565b84526020840193505060208101905061351d565b5050509392505050565b600082601f83011261356357613562612d91565b5b81356135738482602086016134e5565b91505092915050565b60008060006060848603121561359557613594612ac2565b5b60006135a386828701612b15565b935050602084013567ffffffffffffffff8111156135c4576135c3612ac7565b5b6135d08682870161354e565b92505060406135e186828701612b4b565b9150509250925092565b6135f4816134af565b82525050565b600060208201905061360f60008301846135eb565b92915050565b60006020828403121561362b5761362a612ac2565b5b6000613639848285016134d0565b91505092915050565b6000806040838503121561365957613658612ac2565b5b600061366785828601612b15565b925050602061367885828601612b15565b9150509250929050565b600080600080600060a0868803121561369e5761369d612ac2565b5b60006136ac88828901612b15565b95505060206136bd88828901612b15565b94505060406136ce88828901612b4b565b93505060606136df88828901612b4b565b925050608086013567ffffffffffffffff811115613700576136ff612ac7565b5b61370c88828901612f60565b9150509295509295909350565b60008060006060848603121561373257613731612ac2565b5b600061374086828701612b15565b935050602061375186828701612b4b565b925050604061376286828701612b4b565b9150509250925092565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b60006137c8602a83612c90565b91506137d38261376c565b604082019050919050565b600060208201905081810360008301526137f7816137bb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061384557607f821691505b602082108103613858576138576137fe565b5b50919050565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00600082015250565b6000613894601f83612c90565b915061389f8261385e565b602082019050919050565b600060208201905081810360008301526138c381613887565b9050919050565b600081905092915050565b60006138e082612c85565b6138ea81856138ca565b93506138fa818560208601612ca1565b80840191505092915050565b600061391282856138d5565b915061391e82846138d5565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b6000613986602f83612c90565b91506139918261392a565b604082019050919050565b600060208201905081810360008301526139b581613979565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613a18602983612c90565b9150613a23826139bc565b604082019050919050565b60006020820190508181036000830152613a4781613a0b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ab782612b2a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ae957613ae8613a7d565b5b600182019050919050565b60006040820190508181036000830152613b0e8185612cdc565b90508181036020830152613b228184612cdc565b90509392505050565b7f636c61696d656420350000000000000000000000000000000000000000000000600082015250565b6000613b61600983612c90565b9150613b6c82613b2b565b602082019050919050565b60006020820190508181036000830152613b9081613b54565b9050919050565b7f636c61696d656420726f6f740000000000000000000000000000000000000000600082015250565b6000613bcd600c83612c90565b9150613bd882613b97565b602082019050919050565b60006020820190508181036000830152613bfc81613bc0565b9050919050565b60008160601b9050919050565b6000613c1b82613c03565b9050919050565b6000613c2d82613c10565b9050919050565b613c45613c4082612aec565b613c22565b82525050565b6000613c578284613c34565b60148201915081905092915050565b7f2170726f6f660000000000000000000000000000000000000000000000000000600082015250565b6000613c9c600683612c90565b9150613ca782613c66565b602082019050919050565b60006020820190508181036000830152613ccb81613c8f565b9050919050565b6000613cdd82612b2a565b9150613ce883612b2a565b9250828201905080821115613d0057613cff613a7d565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60058110613d4657613d45613d06565b5b50565b6000819050613d5782613d35565b919050565b6000613d6782613d49565b9050919050565b613d7781613d5c565b82525050565b6000604082019050613d926000830185613303565b613d9f6020830184613d6e565b9392505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c65776f60008201527f4a496d3568625755694f694169515856795953424e5a5752706447463062334a60208201527f7a4969774b43534a6b5a584e6a636d6c7764476c766269493649434a4262694260408201527f4f526c5167593239736247566a64476c766269426c65474e7364584e70646d5660608201527f736553426d62334967636d55746247396a61325679637942765a69424264584a60808201527f684c69497343676b69615731685a3255694f6941696158426d637a6f764c314660a08201527f745a6a6c7652325a7a55444a795345707263316b314d54564b596e703554564560c08201527f3561444e4857454e43636e6470517a64715130684264576f79576a49694c416f60e08201527f4a496d563464475679626d467358327870626d73694f6941696148523063484d6101008201527f364c79396864584a684c6d5a70626d4675593255764969774b43534a7a5a57786101208201527f735a584a665a6d566c58324a6863326c7a5833427661573530637949364944416101408201527f4b66513d3d00000000000000000000000000000000000000000000000000000061016082015250565b6000613f83610165836138ca565b9150613f8e82613da6565b61016582019050919050565b6000613fa582613f75565b9150819050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061400b602683612c90565b915061401682613faf565b604082019050919050565b6000602082019050818103600083015261403a81613ffe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061407b82612b2a565b915061408683612b2a565b92508261409657614095614041565b5b828204905092915050565b60006140ac82612b2a565b91506140b783612b2a565b92508282039050818111156140cf576140ce613a7d565b5b92915050565b60006140e082612b2a565b91506140eb83612b2a565b9250826140fb576140fa614041565b5b828206905092915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000614162602883612c90565b915061416d82614106565b604082019050919050565b6000602082019050818103600083015261419181614155565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006141f4602583612c90565b91506141ff82614198565b604082019050919050565b60006020820190508181036000830152614223816141e7565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000614286602a83612c90565b91506142918261422a565b604082019050919050565b600060208201905081810360008301526142b581614279565b9050919050565b600060408201905081810360008301526142d681856131f8565b905081810360208301526142ea81846131f8565b90509392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061434f602383612c90565b915061435a826142f3565b604082019050919050565b6000602082019050818103600083015261437e81614342565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b60006143e1602483612c90565b91506143ec82614385565b604082019050919050565b60006020820190508181036000830152614410816143d4565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061444d602083612c90565b915061445882614417565b602082019050919050565b6000602082019050818103600083015261447c81614440565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026144e57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826144a8565b6144ef86836144a8565b95508019841693508086168417925050509392505050565b6000819050919050565b600061452c61452761452284612b2a565b614507565b612b2a565b9050919050565b6000819050919050565b61454683614511565b61455a61455282614533565b8484546144b5565b825550505050565b600090565b61456f614562565b61457a81848461453d565b505050565b5b8181101561459e57614593600082614567565b600181019050614580565b5050565b601f8211156145e3576145b481614483565b6145bd84614498565b810160208510156145cc578190505b6145e06145d885614498565b83018261457f565b50505b505050565b600082821c905092915050565b6000614606600019846008026145e8565b1980831691505092915050565b600061461f83836145f5565b9150826002028217905092915050565b61463882612c85565b67ffffffffffffffff81111561465157614650612d96565b5b61465b825461382d565b6146668282856145a2565b600060209050601f8311600181146146995760008415614687578287015190505b6146918582614613565b8655506146f9565b601f1984166146a786614483565b60005b828110156146cf578489015182556001820191506020850194506020810190506146aa565b868310156146ec57848901516146e8601f8916826145f5565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061475d602983612c90565b915061476882614701565b604082019050919050565b6000602082019050818103600083015261478c81614750565b9050919050565b60006040820190506147a86000830185612bd6565b6147b56020830184612bd6565b9392505050565b7f217472616e7366657261626c6500000000000000000000000000000000000000600082015250565b60006147f2600d83612c90565b91506147fd826147bc565b602082019050919050565b60006020820190508181036000830152614821816147e5565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061484f82614828565b6148598185614833565b9350614869818560208601612ca1565b61487281612ccb565b840191505092915050565b600060a0820190506148926000830188613303565b61489f6020830187613303565b81810360408301526148b181866131f8565b905081810360608301526148c581856131f8565b905081810360808301526148d98184614844565b90509695505050505050565b6000815190506148f481612c2c565b92915050565b6000602082840312156149105761490f612ac2565b5b600061491e848285016148e5565b91505092915050565b60008160e01c9050919050565b600060033d11156149535760046000803e614950600051614927565b90505b90565b600060443d106149e357614968612ab8565b60043d036004823e80513d602482011167ffffffffffffffff821117156149905750506149e3565b808201805167ffffffffffffffff8111156149ae57505050506149e3565b80602083010160043d0385018111156149cb5750505050506149e3565b6149da82602001850186612dc5565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000614a42603483612c90565b9150614a4d826149e6565b604082019050919050565b60006020820190508181036000830152614a7181614a35565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000614ad4602883612c90565b9150614adf82614a78565b604082019050919050565b60006020820190508181036000830152614b0381614ac7565b9050919050565b6000614b1582612acc565b9050919050565b6000614b2782613c10565b9050919050565b614b3f614b3a82614b0a565b614b1c565b82525050565b6000614b518284614b2e565b60148201915081905092915050565b6000819050919050565b614b7b614b7682612b2a565b614b60565b82525050565b6000614b8d8285614b6a565b602082019150614b9d8284614b6a565b6020820191508190509392505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c09602183612c90565b9150614c1482614bad565b604082019050919050565b60006020820190508181036000830152614c3881614bfc565b9050919050565b600060a082019050614c546000830188613303565b614c616020830187613303565b614c6e6040830186612bd6565b614c7b6060830185612bd6565b8181036080830152614c8d8184614844565b9050969550505050505056fea264697066735822122038345c8871738efde64ca50d50d238b9384b318c63a4e4bde730d49a82cc198864736f6c63430008110033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000f41757261204d6564697461746f7273000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094d4544495441544f5200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d624a3271653241684e4546577a3966566448746969504345755237444b4a5a38764548565565566f593837782f00000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Aura Meditators
Arg [1] : _symbol (string): MEDITATOR
Arg [2] : _baseUri (string): ipfs://QmbJ2qe2AhNEFWz9fVdHtiiPCEuR7DKJZ8vEHVUeVoY87x/

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [4] : 41757261204d6564697461746f72730000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [6] : 4d4544495441544f520000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [8] : 697066733a2f2f516d624a3271653241684e4546577a39665664487469695043
Arg [9] : 45755237444b4a5a38764548565565566f593837782f00000000000000000000


Deployed Bytecode Sourcemap

50519:7727:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51475:63;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22794:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21817:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51071:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54480:261;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51617:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24738:439;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23190:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38894:359;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49698:103;;;:::i;:::-;;49050:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51119:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52970:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23787:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53561:724;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51303:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55844:106;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51374:22;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52756:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54824:851;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24014:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24254:407;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49956:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38559:327;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51475:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22794:230::-;22880:7;22927:1;22908:21;;:7;:21;;;22900:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22994:9;:13;23004:2;22994:13;;;;;;;;;;;:22;23008:7;22994:22;;;;;;;;;;;;;;;;22987:29;;22794:230;;;;:::o;21817:310::-;21919:4;21971:26;21956:41;;;:11;:41;;;;:110;;;;22029:37;22014:52;;;:11;:52;;;;21956:110;:163;;;;22083:36;22107:11;22083:23;:36::i;:::-;21956:163;21936:183;;21817:310;;;:::o;51071:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;54480:261::-;54535:13;54574:1;54569:2;:6;54561:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;54624:21;54648:12;54658:1;54648:9;:12::i;:::-;54624:36;;54702:7;54711:20;54728:2;54711:16;:20::i;:::-;54685:47;;;;;;;;;:::i;:::-;;;;;;;;;;;;;54671:62;;;54480:261;;;:::o;51617:44::-;;;;;;;;;;;;;;;;;:::o;24738:439::-;24979:12;:10;:12::i;:::-;24971:20;;:4;:20;;;:60;;;;24995:36;25012:4;25018:12;:10;:12::i;:::-;24995:16;:36::i;:::-;24971:60;24949:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;25117:52;25140:4;25146:2;25150:3;25155:7;25164:4;25117:22;:52::i;:::-;24738:439;;;;;:::o;23190:524::-;23346:16;23407:3;:10;23388:8;:15;:29;23380:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;23476:30;23523:8;:15;23509:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23476:63;;23557:9;23552:122;23576:8;:15;23572:1;:19;23552:122;;;23632:30;23642:8;23651:1;23642:11;;;;;;;;:::i;:::-;;;;;;;;23655:3;23659:1;23655:6;;;;;;;;:::i;:::-;;;;;;;;23632:9;:30::i;:::-;23613:13;23627:1;23613:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;23593:3;;;;:::i;:::-;;;23552:122;;;;23693:13;23686:20;;;23190:524;;;;:::o;38894:359::-;39070:12;:10;:12::i;:::-;39059:23;;:7;:23;;;:66;;;;39086:39;39103:7;39112:12;:10;:12::i;:::-;39086:16;:39::i;:::-;39059:66;39037:163;;;;;;;;;;;;:::i;:::-;;;;;;;;;39213:32;39224:7;39233:3;39238:6;39213:10;:32::i;:::-;38894:359;;;:::o;49698:103::-;48936:13;:11;:13::i;:::-;49763:30:::1;49790:1;49763:18;:30::i;:::-;49698:103::o:0;49050:87::-;49096:7;49123:6;;;;;;;;;;;49116:13;;49050:87;:::o;51119:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;52970:201::-;48936:13;:11;:13::i;:::-;53044:24:::1;53071:12;53081:1;53071:9;:12::i;:::-;53044:39;;53094:17;53102:8;53094:7;:17::i;:::-;53127:36;53142:10;53154:8;53127:36;;;;;;;:::i;:::-;;;;;;;;53033:138;52970:201:::0;:::o;23787:155::-;23882:52;23901:12;:10;:12::i;:::-;23915:8;23925;23882:18;:52::i;:::-;23787:155;;:::o;53561:724::-;53712:1;53695:9;:14;53705:3;53695:14;;;;;;;;;;;;;;;;:18;53687:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;53747:11;:16;53759:3;53747:16;;;;;;;;;;;;;;;:28;53764:10;53747:28;;;;;;;;;;;;;;;;;;;;;53746:29;53738:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;53811:79;53830:6;53838:5;53844:10;53838:17;;;;;;;;:::i;:::-;;;;;;;;;;53884:3;53867:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;53857:32;;;;;;53811:18;:79::i;:::-;53803:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;54079:1;54070:5;;:10;;;;;;;:::i;:::-;;;;;;;;54109:1;54091:9;:14;54101:3;54091:14;;;;;;;;;;;;;;;;:19;;;;;;;:::i;:::-;;;;;;;;54152:4;54121:11;:16;54133:3;54121:16;;;;;;;;;;;;;;;:28;54138:10;54121:28;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;54167:9;54179:10;:8;:10::i;:::-;54167:22;;54200:42;54206:3;54219:4;54211:13;;;;;;;;:::i;:::-;;54226:1;54239;54229:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54200:5;:42::i;:::-;54260:17;54267:3;54272:4;54260:17;;;;;;;:::i;:::-;;;;;;;;53676:609;53561:724;;;:::o;51303:20::-;;;;:::o;55844:106::-;55900:7;55927:11;:15;55939:2;55927:15;;;;;;;;;;;;55920:22;;55844:106;;;:::o;51374:22::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;52756:122::-;48936:13;:11;:13::i;:::-;52818:5:::1;52829;52818:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52851:19;52864:5;52851:19;;;;;;:::i;:::-;;;;;;;;52756:122:::0;:::o;54824:851::-;54870:13;55289:377;;;;;;;:::i;:::-;;;;;;;;;;;;;55275:392;;54824:851;:::o;24014:168::-;24113:4;24137:18;:27;24156:7;24137:27;;;;;;;;;;;;;;;:37;24165:8;24137:37;;;;;;;;;;;;;;;;;;;;;;;;;24130:44;;24014:168;;;;:::o;24254:407::-;24470:12;:10;:12::i;:::-;24462:20;;:4;:20;;;:60;;;;24486:36;24503:4;24509:12;:10;:12::i;:::-;24486:16;:36::i;:::-;24462:60;24440:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;24608:45;24626:4;24632:2;24636;24640:6;24648:4;24608:17;:45::i;:::-;24254:407;;;;;:::o;49956:201::-;48936:13;:11;:13::i;:::-;50065:1:::1;50045:22;;:8;:22;;::::0;50037:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;50121:28;50140:8;50121:18;:28::i;:::-;49956:201:::0;:::o;38559:327::-;38710:12;:10;:12::i;:::-;38699:23;;:7;:23;;;:66;;;;38726:39;38743:7;38752:12;:10;:12::i;:::-;38726:16;:39::i;:::-;38699:66;38677:163;;;;;;;;;;;;:::i;:::-;;;;;;;;;38853:25;38859:7;38868:2;38872:5;38853;:25::i;:::-;38559:327;;;:::o;20741:157::-;20826:4;20865:25;20850:40;;;:11;:40;;;;20843:47;;20741:157;;;:::o;22538:105::-;22598:13;22631:4;22624:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22538:105;;;:::o;2045:723::-;2101:13;2331:1;2322:5;:10;2318:53;;2349:10;;;;;;;;;;;;;;;;;;;;;2318:53;2381:12;2396:5;2381:20;;2412:14;2437:78;2452:1;2444:4;:9;2437:78;;2470:8;;;;;:::i;:::-;;;;2501:2;2493:10;;;;;:::i;:::-;;;2437:78;;;2525:19;2557:6;2547:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2525:39;;2575:154;2591:1;2582:5;:10;2575:154;;2619:1;2609:11;;;;;:::i;:::-;;;2686:2;2678:5;:10;;;;:::i;:::-;2665:2;:24;;;;:::i;:::-;2652:39;;2635:6;2642;2635:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2715:2;2706:11;;;;;:::i;:::-;;;2575:154;;;2753:6;2739:21;;;;;2045:723;;;;:::o;1480:98::-;1533:7;1560:10;1553:17;;1480:98;:::o;26973:1146::-;27200:7;:14;27186:3;:10;:28;27178:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;27292:1;27278:16;;:2;:16;;;27270:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27349:16;27368:12;:10;:12::i;:::-;27349:31;;27393:60;27414:8;27424:4;27430:2;27434:3;27439:7;27448:4;27393:20;:60::i;:::-;27471:9;27466:421;27490:3;:10;27486:1;:14;27466:421;;;27522:10;27535:3;27539:1;27535:6;;;;;;;;:::i;:::-;;;;;;;;27522:19;;27556:14;27573:7;27581:1;27573:10;;;;;;;;:::i;:::-;;;;;;;;27556:27;;27600:19;27622:9;:13;27632:2;27622:13;;;;;;;;;;;:19;27636:4;27622:19;;;;;;;;;;;;;;;;27600:41;;27679:6;27664:11;:21;;27656:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27812:6;27798:11;:20;27776:9;:13;27786:2;27776:13;;;;;;;;;;;:19;27790:4;27776:19;;;;;;;;;;;;;;;:42;;;;27869:6;27848:9;:13;27858:2;27848:13;;;;;;;;;;;:17;27862:2;27848:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27507:380;;;27502:3;;;;:::i;:::-;;;27466:421;;;;27934:2;27904:47;;27928:4;27904:47;;27918:8;27904:47;;;27938:3;27943:7;27904:47;;;;;;;:::i;:::-;;;;;;;;27964:59;27984:8;27994:4;28000:2;28004:3;28009:7;28018:4;27964:19;:59::i;:::-;28036:75;28072:8;28082:4;28088:2;28092:3;28097:7;28106:4;28036:35;:75::i;:::-;27167:952;26973:1146;;;;;:::o;32738:969::-;32906:1;32890:18;;:4;:18;;;32882:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32981:7;:14;32967:3;:10;:28;32959:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;33053:16;33072:12;:10;:12::i;:::-;33053:31;;33097:66;33118:8;33128:4;33142:1;33146:3;33151:7;33097:66;;;;;;;;;;;;:20;:66::i;:::-;33181:9;33176:373;33200:3;:10;33196:1;:14;33176:373;;;33232:10;33245:3;33249:1;33245:6;;;;;;;;:::i;:::-;;;;;;;;33232:19;;33266:14;33283:7;33291:1;33283:10;;;;;;;;:::i;:::-;;;;;;;;33266:27;;33310:19;33332:9;:13;33342:2;33332:13;;;;;;;;;;;:19;33346:4;33332:19;;;;;;;;;;;;;;;;33310:41;;33389:6;33374:11;:21;;33366:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;33516:6;33502:11;:20;33480:9;:13;33490:2;33480:13;;;;;;;;;;;:19;33494:4;33480:19;;;;;;;;;;;;;;;:42;;;;33217:332;;;33212:3;;;;;:::i;:::-;;;;33176:373;;;;33604:1;33566:55;;33590:4;33566:55;;33580:8;33566:55;;;33608:3;33613:7;33566:55;;;;;;;:::i;:::-;;;;;;;;33634:65;33654:8;33664:4;33678:1;33682:3;33687:7;33634:65;;;;;;;;;;;;:19;:65::i;:::-;32871:836;32738:969;;;:::o;49215:132::-;49290:12;:10;:12::i;:::-;49279:23;;:7;:5;:7::i;:::-;:23;;;49271:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49215:132::o;50317:191::-;50391:16;50410:6;;;;;;;;;;;50391:25;;50436:8;50427:6;;:17;;;;;;;;;;;;;;;;;;50491:8;50460:40;;50481:8;50460:40;;;;;;;;;;;;50380:128;50317:191;:::o;28963:88::-;29037:6;29030:4;:13;;;;;;:::i;:::-;;28963:88;:::o;33850:331::-;34005:8;33996:17;;:5;:17;;;33988:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34108:8;34070:18;:25;34089:5;34070:25;;;;;;;;;;;;;;;:35;34096:8;34070:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34154:8;34132:41;;34147:5;34132:41;;;34164:8;34132:41;;;;;;:::i;:::-;;;;;;;;33850:331;;;:::o;40385:190::-;40510:4;40563;40534:25;40547:5;40554:4;40534:12;:25::i;:::-;:33;40527:40;;40385:190;;;;;:::o;56125:426::-;56168:4;56185:12;56216:3;56200:13;:11;:13::i;:::-;:19;;;;:::i;:::-;56185:34;;56244:1;56236:4;:9;56232:312;;56269:14;56262:21;;;;;56232:312;56313:1;56305:4;:9;56301:243;;56338:9;56331:16;;;;;56301:243;56377:2;56369:4;:10;56365:179;;56403:9;56396:16;;;;;56365:179;56442:2;56434:4;:10;56430:114;;56468:13;56461:20;;;;;56430:114;56521:11;56514:18;;;56125:426;;:::o;57722:235::-;57873:38;57885:7;57894:2;57898:6;57906:4;57873:11;:38::i;:::-;57943:6;57924:11;:15;57936:2;57924:15;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;57722:235;;;;:::o;25641:974::-;25843:1;25829:16;;:2;:16;;;25821:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25900:16;25919:12;:10;:12::i;:::-;25900:31;;25942:20;25965:21;25983:2;25965:17;:21::i;:::-;25942:44;;25997:24;26024:25;26042:6;26024:17;:25::i;:::-;25997:52;;26062:60;26083:8;26093:4;26099:2;26103:3;26108:7;26117:4;26062:20;:60::i;:::-;26135:19;26157:9;:13;26167:2;26157:13;;;;;;;;;;;:19;26171:4;26157:19;;;;;;;;;;;;;;;;26135:41;;26210:6;26195:11;:21;;26187:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26335:6;26321:11;:20;26299:9;:13;26309:2;26299:13;;;;;;;;;;;:19;26313:4;26299:19;;;;;;;;;;;;;;;:42;;;;26384:6;26363:9;:13;26373:2;26363:13;;;;;;;;;;;:17;26377:2;26363:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;26439:2;26408:46;;26433:4;26408:46;;26423:8;26408:46;;;26443:2;26447:6;26408:46;;;;;;;:::i;:::-;;;;;;;;26467:59;26487:8;26497:4;26503:2;26507:3;26512:7;26521:4;26467:19;:59::i;:::-;26539:68;26570:8;26580:4;26586:2;26590;26594:6;26602:4;26539:30;:68::i;:::-;25810:805;;;;25641:974;;;;;:::o;58042:201::-;58165:32;58177:7;58186:2;58190:6;58165:11;:32::i;:::-;58229:6;58210:11;:15;58222:2;58210:15;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;58042:201;;;:::o;57216:421::-;57589:1;57573:18;;:4;:18;;;:38;;;;57609:1;57595:16;;:2;:16;;;57573:38;57565:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;57216:421;;;;;;:::o;36315:220::-;;;;;;;:::o;37295:813::-;37535:15;:2;:13;;;:15::i;:::-;37531:570;;;37588:2;37571:43;;;37615:8;37625:4;37631:3;37636:7;37645:4;37571:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37567:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;37963:6;37956:14;;;;;;;;;;;:::i;:::-;;;;;;;;37567:523;;;38012:62;;;;;;;;;;:::i;:::-;;;;;;;;37567:523;37744:48;;;37732:60;;;:8;:60;;;;37728:159;;37817:50;;;;;;;;;;:::i;:::-;;;;;;;;37728:159;37651:251;37531:570;37295:813;;;;;;:::o;41252:296::-;41335:7;41355:20;41378:4;41355:27;;41398:9;41393:118;41417:5;:12;41413:1;:16;41393:118;;;41466:33;41476:12;41490:5;41496:1;41490:8;;;;;;;;:::i;:::-;;;;;;;;41466:9;:33::i;:::-;41451:48;;41431:3;;;;;:::i;:::-;;;;41393:118;;;;41528:12;41521:19;;;41252:296;;;;:::o;56559:649::-;56605:7;57099:12;57050:15;57032:10;57015:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;57005:39;;;;;;56997:48;;56996:70;;;;:::i;:::-;56949:14;56900:15;56878:14;56861:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;56851:43;;;;;;56843:52;;56842:74;;;;:::i;:::-;56793:16;56746:15;:63;;;;:::i;:::-;:171;;;;:::i;:::-;:217;;;;:::i;:::-;:321;;;;:::i;:::-;:365;;;;:::i;:::-;57138:5;;56703:463;;;;;;;;;:::i;:::-;;;;;;;;;;;;;56671:514;;;;;;56645:555;;56625:575;;56559:649;:::o;29437:729::-;29604:1;29590:16;;:2;:16;;;29582:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29657:16;29676:12;:10;:12::i;:::-;29657:31;;29699:20;29722:21;29740:2;29722:17;:21::i;:::-;29699:44;;29754:24;29781:25;29799:6;29781:17;:25::i;:::-;29754:52;;29819:66;29840:8;29858:1;29862:2;29866:3;29871:7;29880:4;29819:20;:66::i;:::-;29919:6;29898:9;:13;29908:2;29898:13;;;;;;;;;;;:17;29912:2;29898:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29978:2;29941:52;;29974:1;29941:52;;29956:8;29941:52;;;29982:2;29986:6;29941:52;;;;;;;:::i;:::-;;;;;;;;30006:65;30026:8;30044:1;30048:2;30052:3;30057:7;30066:4;30006:19;:65::i;:::-;30084:74;30115:8;30133:1;30137:2;30141;30145:6;30153:4;30084:30;:74::i;:::-;29571:595;;;29437:729;;;;:::o;38116:198::-;38182:16;38211:22;38250:1;38236:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38211:41;;38274:7;38263:5;38269:1;38263:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;38301:5;38294:12;;;38116:198;;;:::o;36543:744::-;36758:15;:2;:13;;;:15::i;:::-;36754:526;;;36811:2;36794:38;;;36833:8;36843:4;36849:2;36853:6;36861:4;36794:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36790:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;37142:6;37135:14;;;;;;;;;;;:::i;:::-;;;;;;;;36790:479;;;37191:62;;;;;;;;;;:::i;:::-;;;;;;;;36790:479;36928:43;;;36916:55;;;:8;:55;;;;36912:154;;36996:50;;;;;;;;;;:::i;:::-;;;;;;;;36912:154;36867:214;36754:526;36543:744;;;;;;:::o;31680:808::-;31823:1;31807:18;;:4;:18;;;31799:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31878:16;31897:12;:10;:12::i;:::-;31878:31;;31920:20;31943:21;31961:2;31943:17;:21::i;:::-;31920:44;;31975:24;32002:25;32020:6;32002:17;:25::i;:::-;31975:52;;32040:66;32061:8;32071:4;32085:1;32089:3;32094:7;32040:66;;;;;;;;;;;;:20;:66::i;:::-;32119:19;32141:9;:13;32151:2;32141:13;;;;;;;;;;;:19;32155:4;32141:19;;;;;;;;;;;;;;;;32119:41;;32194:6;32179:11;:21;;32171:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;32313:6;32299:11;:20;32277:9;:13;32287:2;32277:13;;;;;;;;;;;:19;32291:4;32277:19;;;;;;;;;;;;;;;:42;;;;32387:1;32348:54;;32373:4;32348:54;;32363:8;32348:54;;;32391:2;32395:6;32348:54;;;;;;;:::i;:::-;;;;;;;;32415:65;32435:8;32445:4;32459:1;32463:3;32468:7;32415:65;;;;;;;;;;;;:19;:65::i;:::-;31788:700;;;;31680:808;;;:::o;12642:326::-;12702:4;12959:1;12937:7;:19;;;:23;12930:30;;12642:326;;;:::o;47459:149::-;47522:7;47553:1;47549;:5;:51;;47580:20;47595:1;47598;47580:14;:20::i;:::-;47549:51;;;47557:20;47572:1;47575;47557:14;:20::i;:::-;47549:51;47542:58;;47459:149;;;;:::o;47616:268::-;47684:13;47791:1;47785:4;47778:15;47820:1;47814:4;47807:15;47861:4;47855;47845:21;47836:30;;47616:268;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:90::-;1711:7;1754:5;1747:13;1740:21;1729:32;;1677:90;;;:::o;1773:109::-;1854:21;1869:5;1854:21;:::i;:::-;1849:3;1842:34;1773:109;;:::o;1888:210::-;1975:4;2013:2;2002:9;1998:18;1990:26;;2026:65;2088:1;2077:9;2073:17;2064:6;2026:65;:::i;:::-;1888:210;;;;:::o;2104:118::-;2191:24;2209:5;2191:24;:::i;:::-;2186:3;2179:37;2104:118;;:::o;2228:222::-;2321:4;2359:2;2348:9;2344:18;2336:26;;2372:71;2440:1;2429:9;2425:17;2416:6;2372:71;:::i;:::-;2228:222;;;;:::o;2456:149::-;2492:7;2532:66;2525:5;2521:78;2510:89;;2456:149;;;:::o;2611:120::-;2683:23;2700:5;2683:23;:::i;:::-;2676:5;2673:34;2663:62;;2721:1;2718;2711:12;2663:62;2611:120;:::o;2737:137::-;2782:5;2820:6;2807:20;2798:29;;2836:32;2862:5;2836:32;:::i;:::-;2737:137;;;;:::o;2880:327::-;2938:6;2987:2;2975:9;2966:7;2962:23;2958:32;2955:119;;;2993:79;;:::i;:::-;2955:119;3113:1;3138:52;3182:7;3173:6;3162:9;3158:22;3138:52;:::i;:::-;3128:62;;3084:116;2880:327;;;;:::o;3213:99::-;3265:6;3299:5;3293:12;3283:22;;3213:99;;;:::o;3318:169::-;3402:11;3436:6;3431:3;3424:19;3476:4;3471:3;3467:14;3452:29;;3318:169;;;;:::o;3493:246::-;3574:1;3584:113;3598:6;3595:1;3592:13;3584:113;;;3683:1;3678:3;3674:11;3668:18;3664:1;3659:3;3655:11;3648:39;3620:2;3617:1;3613:10;3608:15;;3584:113;;;3731:1;3722:6;3717:3;3713:16;3706:27;3555:184;3493:246;;;:::o;3745:102::-;3786:6;3837:2;3833:7;3828:2;3821:5;3817:14;3813:28;3803:38;;3745:102;;;:::o;3853:377::-;3941:3;3969:39;4002:5;3969:39;:::i;:::-;4024:71;4088:6;4083:3;4024:71;:::i;:::-;4017:78;;4104:65;4162:6;4157:3;4150:4;4143:5;4139:16;4104:65;:::i;:::-;4194:29;4216:6;4194:29;:::i;:::-;4189:3;4185:39;4178:46;;3945:285;3853:377;;;;:::o;4236:313::-;4349:4;4387:2;4376:9;4372:18;4364:26;;4436:9;4430:4;4426:20;4422:1;4411:9;4407:17;4400:47;4464:78;4537:4;4528:6;4464:78;:::i;:::-;4456:86;;4236:313;;;;:::o;4555:329::-;4614:6;4663:2;4651:9;4642:7;4638:23;4634:32;4631:119;;;4669:79;;:::i;:::-;4631:119;4789:1;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4760:117;4555:329;;;;:::o;4890:::-;4949:6;4998:2;4986:9;4977:7;4973:23;4969:32;4966:119;;;5004:79;;:::i;:::-;4966:119;5124:1;5149:53;5194:7;5185:6;5174:9;5170:22;5149:53;:::i;:::-;5139:63;;5095:117;4890:329;;;;:::o;5225:117::-;5334:1;5331;5324:12;5348:180;5396:77;5393:1;5386:88;5493:4;5490:1;5483:15;5517:4;5514:1;5507:15;5534:281;5617:27;5639:4;5617:27;:::i;:::-;5609:6;5605:40;5747:6;5735:10;5732:22;5711:18;5699:10;5696:34;5693:62;5690:88;;;5758:18;;:::i;:::-;5690:88;5798:10;5794:2;5787:22;5577:238;5534:281;;:::o;5821:129::-;5855:6;5882:20;;:::i;:::-;5872:30;;5911:33;5939:4;5931:6;5911:33;:::i;:::-;5821:129;;;:::o;5956:311::-;6033:4;6123:18;6115:6;6112:30;6109:56;;;6145:18;;:::i;:::-;6109:56;6195:4;6187:6;6183:17;6175:25;;6255:4;6249;6245:15;6237:23;;5956:311;;;:::o;6273:117::-;6382:1;6379;6372:12;6413:710;6509:5;6534:81;6550:64;6607:6;6550:64;:::i;:::-;6534:81;:::i;:::-;6525:90;;6635:5;6664:6;6657:5;6650:21;6698:4;6691:5;6687:16;6680:23;;6751:4;6743:6;6739:17;6731:6;6727:30;6780:3;6772:6;6769:15;6766:122;;;6799:79;;:::i;:::-;6766:122;6914:6;6897:220;6931:6;6926:3;6923:15;6897:220;;;7006:3;7035:37;7068:3;7056:10;7035:37;:::i;:::-;7030:3;7023:50;7102:4;7097:3;7093:14;7086:21;;6973:144;6957:4;6952:3;6948:14;6941:21;;6897:220;;;6901:21;6515:608;;6413:710;;;;;:::o;7146:370::-;7217:5;7266:3;7259:4;7251:6;7247:17;7243:27;7233:122;;7274:79;;:::i;:::-;7233:122;7391:6;7378:20;7416:94;7506:3;7498:6;7491:4;7483:6;7479:17;7416:94;:::i;:::-;7407:103;;7223:293;7146:370;;;;:::o;7522:117::-;7631:1;7628;7621:12;7645:307;7706:4;7796:18;7788:6;7785:30;7782:56;;;7818:18;;:::i;:::-;7782:56;7856:29;7878:6;7856:29;:::i;:::-;7848:37;;7940:4;7934;7930:15;7922:23;;7645:307;;;:::o;7958:146::-;8055:6;8050:3;8045;8032:30;8096:1;8087:6;8082:3;8078:16;8071:27;7958:146;;;:::o;8110:423::-;8187:5;8212:65;8228:48;8269:6;8228:48;:::i;:::-;8212:65;:::i;:::-;8203:74;;8300:6;8293:5;8286:21;8338:4;8331:5;8327:16;8376:3;8367:6;8362:3;8358:16;8355:25;8352:112;;;8383:79;;:::i;:::-;8352:112;8473:54;8520:6;8515:3;8510;8473:54;:::i;:::-;8193:340;8110:423;;;;;:::o;8552:338::-;8607:5;8656:3;8649:4;8641:6;8637:17;8633:27;8623:122;;8664:79;;:::i;:::-;8623:122;8781:6;8768:20;8806:78;8880:3;8872:6;8865:4;8857:6;8853:17;8806:78;:::i;:::-;8797:87;;8613:277;8552:338;;;;:::o;8896:1509::-;9050:6;9058;9066;9074;9082;9131:3;9119:9;9110:7;9106:23;9102:33;9099:120;;;9138:79;;:::i;:::-;9099:120;9258:1;9283:53;9328:7;9319:6;9308:9;9304:22;9283:53;:::i;:::-;9273:63;;9229:117;9385:2;9411:53;9456:7;9447:6;9436:9;9432:22;9411:53;:::i;:::-;9401:63;;9356:118;9541:2;9530:9;9526:18;9513:32;9572:18;9564:6;9561:30;9558:117;;;9594:79;;:::i;:::-;9558:117;9699:78;9769:7;9760:6;9749:9;9745:22;9699:78;:::i;:::-;9689:88;;9484:303;9854:2;9843:9;9839:18;9826:32;9885:18;9877:6;9874:30;9871:117;;;9907:79;;:::i;:::-;9871:117;10012:78;10082:7;10073:6;10062:9;10058:22;10012:78;:::i;:::-;10002:88;;9797:303;10167:3;10156:9;10152:19;10139:33;10199:18;10191:6;10188:30;10185:117;;;10221:79;;:::i;:::-;10185:117;10326:62;10380:7;10371:6;10360:9;10356:22;10326:62;:::i;:::-;10316:72;;10110:288;8896:1509;;;;;;;;:::o;10411:311::-;10488:4;10578:18;10570:6;10567:30;10564:56;;;10600:18;;:::i;:::-;10564:56;10650:4;10642:6;10638:17;10630:25;;10710:4;10704;10700:15;10692:23;;10411:311;;;:::o;10745:710::-;10841:5;10866:81;10882:64;10939:6;10882:64;:::i;:::-;10866:81;:::i;:::-;10857:90;;10967:5;10996:6;10989:5;10982:21;11030:4;11023:5;11019:16;11012:23;;11083:4;11075:6;11071:17;11063:6;11059:30;11112:3;11104:6;11101:15;11098:122;;;11131:79;;:::i;:::-;11098:122;11246:6;11229:220;11263:6;11258:3;11255:15;11229:220;;;11338:3;11367:37;11400:3;11388:10;11367:37;:::i;:::-;11362:3;11355:50;11434:4;11429:3;11425:14;11418:21;;11305:144;11289:4;11284:3;11280:14;11273:21;;11229:220;;;11233:21;10847:608;;10745:710;;;;;:::o;11478:370::-;11549:5;11598:3;11591:4;11583:6;11579:17;11575:27;11565:122;;11606:79;;:::i;:::-;11565:122;11723:6;11710:20;11748:94;11838:3;11830:6;11823:4;11815:6;11811:17;11748:94;:::i;:::-;11739:103;;11555:293;11478:370;;;;:::o;11854:894::-;11972:6;11980;12029:2;12017:9;12008:7;12004:23;12000:32;11997:119;;;12035:79;;:::i;:::-;11997:119;12183:1;12172:9;12168:17;12155:31;12213:18;12205:6;12202:30;12199:117;;;12235:79;;:::i;:::-;12199:117;12340:78;12410:7;12401:6;12390:9;12386:22;12340:78;:::i;:::-;12330:88;;12126:302;12495:2;12484:9;12480:18;12467:32;12526:18;12518:6;12515:30;12512:117;;;12548:79;;:::i;:::-;12512:117;12653:78;12723:7;12714:6;12703:9;12699:22;12653:78;:::i;:::-;12643:88;;12438:303;11854:894;;;;;:::o;12754:114::-;12821:6;12855:5;12849:12;12839:22;;12754:114;;;:::o;12874:184::-;12973:11;13007:6;13002:3;12995:19;13047:4;13042:3;13038:14;13023:29;;12874:184;;;;:::o;13064:132::-;13131:4;13154:3;13146:11;;13184:4;13179:3;13175:14;13167:22;;13064:132;;;:::o;13202:108::-;13279:24;13297:5;13279:24;:::i;:::-;13274:3;13267:37;13202:108;;:::o;13316:179::-;13385:10;13406:46;13448:3;13440:6;13406:46;:::i;:::-;13484:4;13479:3;13475:14;13461:28;;13316:179;;;;:::o;13501:113::-;13571:4;13603;13598:3;13594:14;13586:22;;13501:113;;;:::o;13650:732::-;13769:3;13798:54;13846:5;13798:54;:::i;:::-;13868:86;13947:6;13942:3;13868:86;:::i;:::-;13861:93;;13978:56;14028:5;13978:56;:::i;:::-;14057:7;14088:1;14073:284;14098:6;14095:1;14092:13;14073:284;;;14174:6;14168:13;14201:63;14260:3;14245:13;14201:63;:::i;:::-;14194:70;;14287:60;14340:6;14287:60;:::i;:::-;14277:70;;14133:224;14120:1;14117;14113:9;14108:14;;14073:284;;;14077:14;14373:3;14366:10;;13774:608;;;13650:732;;;;:::o;14388:373::-;14531:4;14569:2;14558:9;14554:18;14546:26;;14618:9;14612:4;14608:20;14604:1;14593:9;14589:17;14582:47;14646:108;14749:4;14740:6;14646:108;:::i;:::-;14638:116;;14388:373;;;;:::o;14767:1039::-;14894:6;14902;14910;14959:2;14947:9;14938:7;14934:23;14930:32;14927:119;;;14965:79;;:::i;:::-;14927:119;15085:1;15110:53;15155:7;15146:6;15135:9;15131:22;15110:53;:::i;:::-;15100:63;;15056:117;15240:2;15229:9;15225:18;15212:32;15271:18;15263:6;15260:30;15257:117;;;15293:79;;:::i;:::-;15257:117;15398:78;15468:7;15459:6;15448:9;15444:22;15398:78;:::i;:::-;15388:88;;15183:303;15553:2;15542:9;15538:18;15525:32;15584:18;15576:6;15573:30;15570:117;;;15606:79;;:::i;:::-;15570:117;15711:78;15781:7;15772:6;15761:9;15757:22;15711:78;:::i;:::-;15701:88;;15496:303;14767:1039;;;;;:::o;15812:118::-;15899:24;15917:5;15899:24;:::i;:::-;15894:3;15887:37;15812:118;;:::o;15936:222::-;16029:4;16067:2;16056:9;16052:18;16044:26;;16080:71;16148:1;16137:9;16133:17;16124:6;16080:71;:::i;:::-;15936:222;;;;:::o;16164:308::-;16226:4;16316:18;16308:6;16305:30;16302:56;;;16338:18;;:::i;:::-;16302:56;16376:29;16398:6;16376:29;:::i;:::-;16368:37;;16460:4;16454;16450:15;16442:23;;16164:308;;;:::o;16478:425::-;16556:5;16581:66;16597:49;16639:6;16597:49;:::i;:::-;16581:66;:::i;:::-;16572:75;;16670:6;16663:5;16656:21;16708:4;16701:5;16697:16;16746:3;16737:6;16732:3;16728:16;16725:25;16722:112;;;16753:79;;:::i;:::-;16722:112;16843:54;16890:6;16885:3;16880;16843:54;:::i;:::-;16562:341;16478:425;;;;;:::o;16923:340::-;16979:5;17028:3;17021:4;17013:6;17009:17;17005:27;16995:122;;17036:79;;:::i;:::-;16995:122;17153:6;17140:20;17178:79;17253:3;17245:6;17238:4;17230:6;17226:17;17178:79;:::i;:::-;17169:88;;16985:278;16923:340;;;;:::o;17269:509::-;17338:6;17387:2;17375:9;17366:7;17362:23;17358:32;17355:119;;;17393:79;;:::i;:::-;17355:119;17541:1;17530:9;17526:17;17513:31;17571:18;17563:6;17560:30;17557:117;;;17593:79;;:::i;:::-;17557:117;17698:63;17753:7;17744:6;17733:9;17729:22;17698:63;:::i;:::-;17688:73;;17484:287;17269:509;;;;:::o;17784:116::-;17854:21;17869:5;17854:21;:::i;:::-;17847:5;17844:32;17834:60;;17890:1;17887;17880:12;17834:60;17784:116;:::o;17906:133::-;17949:5;17987:6;17974:20;17965:29;;18003:30;18027:5;18003:30;:::i;:::-;17906:133;;;;:::o;18045:468::-;18110:6;18118;18167:2;18155:9;18146:7;18142:23;18138:32;18135:119;;;18173:79;;:::i;:::-;18135:119;18293:1;18318:53;18363:7;18354:6;18343:9;18339:22;18318:53;:::i;:::-;18308:63;;18264:117;18420:2;18446:50;18488:7;18479:6;18468:9;18464:22;18446:50;:::i;:::-;18436:60;;18391:115;18045:468;;;;;:::o;18519:311::-;18596:4;18686:18;18678:6;18675:30;18672:56;;;18708:18;;:::i;:::-;18672:56;18758:4;18750:6;18746:17;18738:25;;18818:4;18812;18808:15;18800:23;;18519:311;;;:::o;18836:77::-;18873:7;18902:5;18891:16;;18836:77;;;:::o;18919:122::-;18992:24;19010:5;18992:24;:::i;:::-;18985:5;18982:35;18972:63;;19031:1;19028;19021:12;18972:63;18919:122;:::o;19047:139::-;19093:5;19131:6;19118:20;19109:29;;19147:33;19174:5;19147:33;:::i;:::-;19047:139;;;;:::o;19209:710::-;19305:5;19330:81;19346:64;19403:6;19346:64;:::i;:::-;19330:81;:::i;:::-;19321:90;;19431:5;19460:6;19453:5;19446:21;19494:4;19487:5;19483:16;19476:23;;19547:4;19539:6;19535:17;19527:6;19523:30;19576:3;19568:6;19565:15;19562:122;;;19595:79;;:::i;:::-;19562:122;19710:6;19693:220;19727:6;19722:3;19719:15;19693:220;;;19802:3;19831:37;19864:3;19852:10;19831:37;:::i;:::-;19826:3;19819:50;19898:4;19893:3;19889:14;19882:21;;19769:144;19753:4;19748:3;19744:14;19737:21;;19693:220;;;19697:21;19311:608;;19209:710;;;;;:::o;19942:370::-;20013:5;20062:3;20055:4;20047:6;20043:17;20039:27;20029:122;;20070:79;;:::i;:::-;20029:122;20187:6;20174:20;20212:94;20302:3;20294:6;20287:4;20279:6;20275:17;20212:94;:::i;:::-;20203:103;;20019:293;19942:370;;;;:::o;20318:829::-;20420:6;20428;20436;20485:2;20473:9;20464:7;20460:23;20456:32;20453:119;;;20491:79;;:::i;:::-;20453:119;20611:1;20636:53;20681:7;20672:6;20661:9;20657:22;20636:53;:::i;:::-;20626:63;;20582:117;20766:2;20755:9;20751:18;20738:32;20797:18;20789:6;20786:30;20783:117;;;20819:79;;:::i;:::-;20783:117;20924:78;20994:7;20985:6;20974:9;20970:22;20924:78;:::i;:::-;20914:88;;20709:303;21051:2;21077:53;21122:7;21113:6;21102:9;21098:22;21077:53;:::i;:::-;21067:63;;21022:118;20318:829;;;;;:::o;21153:118::-;21240:24;21258:5;21240:24;:::i;:::-;21235:3;21228:37;21153:118;;:::o;21277:222::-;21370:4;21408:2;21397:9;21393:18;21385:26;;21421:71;21489:1;21478:9;21474:17;21465:6;21421:71;:::i;:::-;21277:222;;;;:::o;21505:329::-;21564:6;21613:2;21601:9;21592:7;21588:23;21584:32;21581:119;;;21619:79;;:::i;:::-;21581:119;21739:1;21764:53;21809:7;21800:6;21789:9;21785:22;21764:53;:::i;:::-;21754:63;;21710:117;21505:329;;;;:::o;21840:474::-;21908:6;21916;21965:2;21953:9;21944:7;21940:23;21936:32;21933:119;;;21971:79;;:::i;:::-;21933:119;22091:1;22116:53;22161:7;22152:6;22141:9;22137:22;22116:53;:::i;:::-;22106:63;;22062:117;22218:2;22244:53;22289:7;22280:6;22269:9;22265:22;22244:53;:::i;:::-;22234:63;;22189:118;21840:474;;;;;:::o;22320:1089::-;22424:6;22432;22440;22448;22456;22505:3;22493:9;22484:7;22480:23;22476:33;22473:120;;;22512:79;;:::i;:::-;22473:120;22632:1;22657:53;22702:7;22693:6;22682:9;22678:22;22657:53;:::i;:::-;22647:63;;22603:117;22759:2;22785:53;22830:7;22821:6;22810:9;22806:22;22785:53;:::i;:::-;22775:63;;22730:118;22887:2;22913:53;22958:7;22949:6;22938:9;22934:22;22913:53;:::i;:::-;22903:63;;22858:118;23015:2;23041:53;23086:7;23077:6;23066:9;23062:22;23041:53;:::i;:::-;23031:63;;22986:118;23171:3;23160:9;23156:19;23143:33;23203:18;23195:6;23192:30;23189:117;;;23225:79;;:::i;:::-;23189:117;23330:62;23384:7;23375:6;23364:9;23360:22;23330:62;:::i;:::-;23320:72;;23114:288;22320:1089;;;;;;;;:::o;23415:619::-;23492:6;23500;23508;23557:2;23545:9;23536:7;23532:23;23528:32;23525:119;;;23563:79;;:::i;:::-;23525:119;23683:1;23708:53;23753:7;23744:6;23733:9;23729:22;23708:53;:::i;:::-;23698:63;;23654:117;23810:2;23836:53;23881:7;23872:6;23861:9;23857:22;23836:53;:::i;:::-;23826:63;;23781:118;23938:2;23964:53;24009:7;24000:6;23989:9;23985:22;23964:53;:::i;:::-;23954:63;;23909:118;23415:619;;;;;:::o;24040:229::-;24180:34;24176:1;24168:6;24164:14;24157:58;24249:12;24244:2;24236:6;24232:15;24225:37;24040:229;:::o;24275:366::-;24417:3;24438:67;24502:2;24497:3;24438:67;:::i;:::-;24431:74;;24514:93;24603:3;24514:93;:::i;:::-;24632:2;24627:3;24623:12;24616:19;;24275:366;;;:::o;24647:419::-;24813:4;24851:2;24840:9;24836:18;24828:26;;24900:9;24894:4;24890:20;24886:1;24875:9;24871:17;24864:47;24928:131;25054:4;24928:131;:::i;:::-;24920:139;;24647:419;;;:::o;25072:180::-;25120:77;25117:1;25110:88;25217:4;25214:1;25207:15;25241:4;25238:1;25231:15;25258:320;25302:6;25339:1;25333:4;25329:12;25319:22;;25386:1;25380:4;25376:12;25407:18;25397:81;;25463:4;25455:6;25451:17;25441:27;;25397:81;25525:2;25517:6;25514:14;25494:18;25491:38;25488:84;;25544:18;;:::i;:::-;25488:84;25309:269;25258:320;;;:::o;25584:181::-;25724:33;25720:1;25712:6;25708:14;25701:57;25584:181;:::o;25771:366::-;25913:3;25934:67;25998:2;25993:3;25934:67;:::i;:::-;25927:74;;26010:93;26099:3;26010:93;:::i;:::-;26128:2;26123:3;26119:12;26112:19;;25771:366;;;:::o;26143:419::-;26309:4;26347:2;26336:9;26332:18;26324:26;;26396:9;26390:4;26386:20;26382:1;26371:9;26367:17;26360:47;26424:131;26550:4;26424:131;:::i;:::-;26416:139;;26143:419;;;:::o;26568:148::-;26670:11;26707:3;26692:18;;26568:148;;;;:::o;26722:390::-;26828:3;26856:39;26889:5;26856:39;:::i;:::-;26911:89;26993:6;26988:3;26911:89;:::i;:::-;26904:96;;27009:65;27067:6;27062:3;27055:4;27048:5;27044:16;27009:65;:::i;:::-;27099:6;27094:3;27090:16;27083:23;;26832:280;26722:390;;;;:::o;27118:435::-;27298:3;27320:95;27411:3;27402:6;27320:95;:::i;:::-;27313:102;;27432:95;27523:3;27514:6;27432:95;:::i;:::-;27425:102;;27544:3;27537:10;;27118:435;;;;;:::o;27559:234::-;27699:34;27695:1;27687:6;27683:14;27676:58;27768:17;27763:2;27755:6;27751:15;27744:42;27559:234;:::o;27799:366::-;27941:3;27962:67;28026:2;28021:3;27962:67;:::i;:::-;27955:74;;28038:93;28127:3;28038:93;:::i;:::-;28156:2;28151:3;28147:12;28140:19;;27799:366;;;:::o;28171:419::-;28337:4;28375:2;28364:9;28360:18;28352:26;;28424:9;28418:4;28414:20;28410:1;28399:9;28395:17;28388:47;28452:131;28578:4;28452:131;:::i;:::-;28444:139;;28171:419;;;:::o;28596:228::-;28736:34;28732:1;28724:6;28720:14;28713:58;28805:11;28800:2;28792:6;28788:15;28781:36;28596:228;:::o;28830:366::-;28972:3;28993:67;29057:2;29052:3;28993:67;:::i;:::-;28986:74;;29069:93;29158:3;29069:93;:::i;:::-;29187:2;29182:3;29178:12;29171:19;;28830:366;;;:::o;29202:419::-;29368:4;29406:2;29395:9;29391:18;29383:26;;29455:9;29449:4;29445:20;29441:1;29430:9;29426:17;29419:47;29483:131;29609:4;29483:131;:::i;:::-;29475:139;;29202:419;;;:::o;29627:180::-;29675:77;29672:1;29665:88;29772:4;29769:1;29762:15;29796:4;29793:1;29786:15;29813:180;29861:77;29858:1;29851:88;29958:4;29955:1;29948:15;29982:4;29979:1;29972:15;29999:233;30038:3;30061:24;30079:5;30061:24;:::i;:::-;30052:33;;30107:66;30100:5;30097:77;30094:103;;30177:18;;:::i;:::-;30094:103;30224:1;30217:5;30213:13;30206:20;;29999:233;;;:::o;30238:514::-;30399:4;30437:2;30426:9;30422:18;30414:26;;30486:9;30480:4;30476:20;30472:1;30461:9;30457:17;30450:47;30514:78;30587:4;30578:6;30514:78;:::i;:::-;30506:86;;30639:9;30633:4;30629:20;30624:2;30613:9;30609:18;30602:48;30667:78;30740:4;30731:6;30667:78;:::i;:::-;30659:86;;30238:514;;;;;:::o;30758:159::-;30898:11;30894:1;30886:6;30882:14;30875:35;30758:159;:::o;30923:365::-;31065:3;31086:66;31150:1;31145:3;31086:66;:::i;:::-;31079:73;;31161:93;31250:3;31161:93;:::i;:::-;31279:2;31274:3;31270:12;31263:19;;30923:365;;;:::o;31294:419::-;31460:4;31498:2;31487:9;31483:18;31475:26;;31547:9;31541:4;31537:20;31533:1;31522:9;31518:17;31511:47;31575:131;31701:4;31575:131;:::i;:::-;31567:139;;31294:419;;;:::o;31719:162::-;31859:14;31855:1;31847:6;31843:14;31836:38;31719:162;:::o;31887:366::-;32029:3;32050:67;32114:2;32109:3;32050:67;:::i;:::-;32043:74;;32126:93;32215:3;32126:93;:::i;:::-;32244:2;32239:3;32235:12;32228:19;;31887:366;;;:::o;32259:419::-;32425:4;32463:2;32452:9;32448:18;32440:26;;32512:9;32506:4;32502:20;32498:1;32487:9;32483:17;32476:47;32540:131;32666:4;32540:131;:::i;:::-;32532:139;;32259:419;;;:::o;32684:94::-;32717:8;32765:5;32761:2;32757:14;32736:35;;32684:94;;;:::o;32784:::-;32823:7;32852:20;32866:5;32852:20;:::i;:::-;32841:31;;32784:94;;;:::o;32884:100::-;32923:7;32952:26;32972:5;32952:26;:::i;:::-;32941:37;;32884:100;;;:::o;32990:157::-;33095:45;33115:24;33133:5;33115:24;:::i;:::-;33095:45;:::i;:::-;33090:3;33083:58;32990:157;;:::o;33153:256::-;33265:3;33280:75;33351:3;33342:6;33280:75;:::i;:::-;33380:2;33375:3;33371:12;33364:19;;33400:3;33393:10;;33153:256;;;;:::o;33415:156::-;33555:8;33551:1;33543:6;33539:14;33532:32;33415:156;:::o;33577:365::-;33719:3;33740:66;33804:1;33799:3;33740:66;:::i;:::-;33733:73;;33815:93;33904:3;33815:93;:::i;:::-;33933:2;33928:3;33924:12;33917:19;;33577:365;;;:::o;33948:419::-;34114:4;34152:2;34141:9;34137:18;34129:26;;34201:9;34195:4;34191:20;34187:1;34176:9;34172:17;34165:47;34229:131;34355:4;34229:131;:::i;:::-;34221:139;;33948:419;;;:::o;34373:191::-;34413:3;34432:20;34450:1;34432:20;:::i;:::-;34427:25;;34466:20;34484:1;34466:20;:::i;:::-;34461:25;;34509:1;34506;34502:9;34495:16;;34530:3;34527:1;34524:10;34521:36;;;34537:18;;:::i;:::-;34521:36;34373:191;;;;:::o;34570:180::-;34618:77;34615:1;34608:88;34715:4;34712:1;34705:15;34739:4;34736:1;34729:15;34756:114;34838:1;34831:5;34828:12;34818:46;;34844:18;;:::i;:::-;34818:46;34756:114;:::o;34876:129::-;34922:7;34951:5;34940:16;;34957:42;34993:5;34957:42;:::i;:::-;34876:129;;;:::o;35011:::-;35068:9;35101:33;35128:5;35101:33;:::i;:::-;35088:46;;35011:129;;;:::o;35146:145::-;35240:44;35278:5;35240:44;:::i;:::-;35235:3;35228:57;35146:145;;:::o;35297:346::-;35425:4;35463:2;35452:9;35448:18;35440:26;;35476:71;35544:1;35533:9;35529:17;35520:6;35476:71;:::i;:::-;35557:79;35632:2;35621:9;35617:18;35608:6;35557:79;:::i;:::-;35297:346;;;;;:::o;35649:922::-;35789:34;35785:1;35777:6;35773:14;35766:58;35858:34;35853:2;35845:6;35841:15;35834:59;35927:34;35922:2;35914:6;35910:15;35903:59;35996:34;35991:2;35983:6;35979:15;35972:59;36066:34;36060:3;36052:6;36048:16;36041:60;36136:34;36130:3;36122:6;36118:16;36111:60;36206:34;36200:3;36192:6;36188:16;36181:60;36276:34;36270:3;36262:6;36258:16;36251:60;36346:34;36340:3;36332:6;36328:16;36321:60;36416:34;36410:3;36402:6;36398:16;36391:60;36486:34;36480:3;36472:6;36468:16;36461:60;36556:7;36550:3;36542:6;36538:16;36531:33;35649:922;:::o;36577:404::-;36737:3;36758:86;36840:3;36835;36758:86;:::i;:::-;36751:93;;36853;36942:3;36853:93;:::i;:::-;36971:3;36966;36962:13;36955:20;;36577:404;;;:::o;36987:381::-;37172:3;37194:148;37338:3;37194:148;:::i;:::-;37187:155;;37359:3;37352:10;;36987:381;;;:::o;37374:225::-;37514:34;37510:1;37502:6;37498:14;37491:58;37583:8;37578:2;37570:6;37566:15;37559:33;37374:225;:::o;37605:366::-;37747:3;37768:67;37832:2;37827:3;37768:67;:::i;:::-;37761:74;;37844:93;37933:3;37844:93;:::i;:::-;37962:2;37957:3;37953:12;37946:19;;37605:366;;;:::o;37977:419::-;38143:4;38181:2;38170:9;38166:18;38158:26;;38230:9;38224:4;38220:20;38216:1;38205:9;38201:17;38194:47;38258:131;38384:4;38258:131;:::i;:::-;38250:139;;37977:419;;;:::o;38402:180::-;38450:77;38447:1;38440:88;38547:4;38544:1;38537:15;38571:4;38568:1;38561:15;38588:185;38628:1;38645:20;38663:1;38645:20;:::i;:::-;38640:25;;38679:20;38697:1;38679:20;:::i;:::-;38674:25;;38718:1;38708:35;;38723:18;;:::i;:::-;38708:35;38765:1;38762;38758:9;38753:14;;38588:185;;;;:::o;38779:194::-;38819:4;38839:20;38857:1;38839:20;:::i;:::-;38834:25;;38873:20;38891:1;38873:20;:::i;:::-;38868:25;;38917:1;38914;38910:9;38902:17;;38941:1;38935:4;38932:11;38929:37;;;38946:18;;:::i;:::-;38929:37;38779:194;;;;:::o;38979:176::-;39011:1;39028:20;39046:1;39028:20;:::i;:::-;39023:25;;39062:20;39080:1;39062:20;:::i;:::-;39057:25;;39101:1;39091:35;;39106:18;;:::i;:::-;39091:35;39147:1;39144;39140:9;39135:14;;38979:176;;;;:::o;39161:227::-;39301:34;39297:1;39289:6;39285:14;39278:58;39370:10;39365:2;39357:6;39353:15;39346:35;39161:227;:::o;39394:366::-;39536:3;39557:67;39621:2;39616:3;39557:67;:::i;:::-;39550:74;;39633:93;39722:3;39633:93;:::i;:::-;39751:2;39746:3;39742:12;39735:19;;39394:366;;;:::o;39766:419::-;39932:4;39970:2;39959:9;39955:18;39947:26;;40019:9;40013:4;40009:20;40005:1;39994:9;39990:17;39983:47;40047:131;40173:4;40047:131;:::i;:::-;40039:139;;39766:419;;;:::o;40191:224::-;40331:34;40327:1;40319:6;40315:14;40308:58;40400:7;40395:2;40387:6;40383:15;40376:32;40191:224;:::o;40421:366::-;40563:3;40584:67;40648:2;40643:3;40584:67;:::i;:::-;40577:74;;40660:93;40749:3;40660:93;:::i;:::-;40778:2;40773:3;40769:12;40762:19;;40421:366;;;:::o;40793:419::-;40959:4;40997:2;40986:9;40982:18;40974:26;;41046:9;41040:4;41036:20;41032:1;41021:9;41017:17;41010:47;41074:131;41200:4;41074:131;:::i;:::-;41066:139;;40793:419;;;:::o;41218:229::-;41358:34;41354:1;41346:6;41342:14;41335:58;41427:12;41422:2;41414:6;41410:15;41403:37;41218:229;:::o;41453:366::-;41595:3;41616:67;41680:2;41675:3;41616:67;:::i;:::-;41609:74;;41692:93;41781:3;41692:93;:::i;:::-;41810:2;41805:3;41801:12;41794:19;;41453:366;;;:::o;41825:419::-;41991:4;42029:2;42018:9;42014:18;42006:26;;42078:9;42072:4;42068:20;42064:1;42053:9;42049:17;42042:47;42106:131;42232:4;42106:131;:::i;:::-;42098:139;;41825:419;;;:::o;42250:634::-;42471:4;42509:2;42498:9;42494:18;42486:26;;42558:9;42552:4;42548:20;42544:1;42533:9;42529:17;42522:47;42586:108;42689:4;42680:6;42586:108;:::i;:::-;42578:116;;42741:9;42735:4;42731:20;42726:2;42715:9;42711:18;42704:48;42769:108;42872:4;42863:6;42769:108;:::i;:::-;42761:116;;42250:634;;;;;:::o;42890:222::-;43030:34;43026:1;43018:6;43014:14;43007:58;43099:5;43094:2;43086:6;43082:15;43075:30;42890:222;:::o;43118:366::-;43260:3;43281:67;43345:2;43340:3;43281:67;:::i;:::-;43274:74;;43357:93;43446:3;43357:93;:::i;:::-;43475:2;43470:3;43466:12;43459:19;;43118:366;;;:::o;43490:419::-;43656:4;43694:2;43683:9;43679:18;43671:26;;43743:9;43737:4;43733:20;43729:1;43718:9;43714:17;43707:47;43771:131;43897:4;43771:131;:::i;:::-;43763:139;;43490:419;;;:::o;43915:223::-;44055:34;44051:1;44043:6;44039:14;44032:58;44124:6;44119:2;44111:6;44107:15;44100:31;43915:223;:::o;44144:366::-;44286:3;44307:67;44371:2;44366:3;44307:67;:::i;:::-;44300:74;;44383:93;44472:3;44383:93;:::i;:::-;44501:2;44496:3;44492:12;44485:19;;44144:366;;;:::o;44516:419::-;44682:4;44720:2;44709:9;44705:18;44697:26;;44769:9;44763:4;44759:20;44755:1;44744:9;44740:17;44733:47;44797:131;44923:4;44797:131;:::i;:::-;44789:139;;44516:419;;;:::o;44941:182::-;45081:34;45077:1;45069:6;45065:14;45058:58;44941:182;:::o;45129:366::-;45271:3;45292:67;45356:2;45351:3;45292:67;:::i;:::-;45285:74;;45368:93;45457:3;45368:93;:::i;:::-;45486:2;45481:3;45477:12;45470:19;;45129:366;;;:::o;45501:419::-;45667:4;45705:2;45694:9;45690:18;45682:26;;45754:9;45748:4;45744:20;45740:1;45729:9;45725:17;45718:47;45782:131;45908:4;45782:131;:::i;:::-;45774:139;;45501:419;;;:::o;45926:141::-;45975:4;45998:3;45990:11;;46021:3;46018:1;46011:14;46055:4;46052:1;46042:18;46034:26;;45926:141;;;:::o;46073:93::-;46110:6;46157:2;46152;46145:5;46141:14;46137:23;46127:33;;46073:93;;;:::o;46172:107::-;46216:8;46266:5;46260:4;46256:16;46235:37;;46172:107;;;;:::o;46285:393::-;46354:6;46404:1;46392:10;46388:18;46427:97;46457:66;46446:9;46427:97;:::i;:::-;46545:39;46575:8;46564:9;46545:39;:::i;:::-;46533:51;;46617:4;46613:9;46606:5;46602:21;46593:30;;46666:4;46656:8;46652:19;46645:5;46642:30;46632:40;;46361:317;;46285:393;;;;;:::o;46684:60::-;46712:3;46733:5;46726:12;;46684:60;;;:::o;46750:142::-;46800:9;46833:53;46851:34;46860:24;46878:5;46860:24;:::i;:::-;46851:34;:::i;:::-;46833:53;:::i;:::-;46820:66;;46750:142;;;:::o;46898:75::-;46941:3;46962:5;46955:12;;46898:75;;;:::o;46979:269::-;47089:39;47120:7;47089:39;:::i;:::-;47150:91;47199:41;47223:16;47199:41;:::i;:::-;47191:6;47184:4;47178:11;47150:91;:::i;:::-;47144:4;47137:105;47055:193;46979:269;;;:::o;47254:73::-;47299:3;47254:73;:::o;47333:189::-;47410:32;;:::i;:::-;47451:65;47509:6;47501;47495:4;47451:65;:::i;:::-;47386:136;47333:189;;:::o;47528:186::-;47588:120;47605:3;47598:5;47595:14;47588:120;;;47659:39;47696:1;47689:5;47659:39;:::i;:::-;47632:1;47625:5;47621:13;47612:22;;47588:120;;;47528:186;;:::o;47720:543::-;47821:2;47816:3;47813:11;47810:446;;;47855:38;47887:5;47855:38;:::i;:::-;47939:29;47957:10;47939:29;:::i;:::-;47929:8;47925:44;48122:2;48110:10;48107:18;48104:49;;;48143:8;48128:23;;48104:49;48166:80;48222:22;48240:3;48222:22;:::i;:::-;48212:8;48208:37;48195:11;48166:80;:::i;:::-;47825:431;;47810:446;47720:543;;;:::o;48269:117::-;48323:8;48373:5;48367:4;48363:16;48342:37;;48269:117;;;;:::o;48392:169::-;48436:6;48469:51;48517:1;48513:6;48505:5;48502:1;48498:13;48469:51;:::i;:::-;48465:56;48550:4;48544;48540:15;48530:25;;48443:118;48392:169;;;;:::o;48566:295::-;48642:4;48788:29;48813:3;48807:4;48788:29;:::i;:::-;48780:37;;48850:3;48847:1;48843:11;48837:4;48834:21;48826:29;;48566:295;;;;:::o;48866:1395::-;48983:37;49016:3;48983:37;:::i;:::-;49085:18;49077:6;49074:30;49071:56;;;49107:18;;:::i;:::-;49071:56;49151:38;49183:4;49177:11;49151:38;:::i;:::-;49236:67;49296:6;49288;49282:4;49236:67;:::i;:::-;49330:1;49354:4;49341:17;;49386:2;49378:6;49375:14;49403:1;49398:618;;;;50060:1;50077:6;50074:77;;;50126:9;50121:3;50117:19;50111:26;50102:35;;50074:77;50177:67;50237:6;50230:5;50177:67;:::i;:::-;50171:4;50164:81;50033:222;49368:887;;49398:618;49450:4;49446:9;49438:6;49434:22;49484:37;49516:4;49484:37;:::i;:::-;49543:1;49557:208;49571:7;49568:1;49565:14;49557:208;;;49650:9;49645:3;49641:19;49635:26;49627:6;49620:42;49701:1;49693:6;49689:14;49679:24;;49748:2;49737:9;49733:18;49720:31;;49594:4;49591:1;49587:12;49582:17;;49557:208;;;49793:6;49784:7;49781:19;49778:179;;;49851:9;49846:3;49842:19;49836:26;49894:48;49936:4;49928:6;49924:17;49913:9;49894:48;:::i;:::-;49886:6;49879:64;49801:156;49778:179;50003:1;49999;49991:6;49987:14;49983:22;49977:4;49970:36;49405:611;;;49368:887;;48958:1303;;;48866:1395;;:::o;50267:228::-;50407:34;50403:1;50395:6;50391:14;50384:58;50476:11;50471:2;50463:6;50459:15;50452:36;50267:228;:::o;50501:366::-;50643:3;50664:67;50728:2;50723:3;50664:67;:::i;:::-;50657:74;;50740:93;50829:3;50740:93;:::i;:::-;50858:2;50853:3;50849:12;50842:19;;50501:366;;;:::o;50873:419::-;51039:4;51077:2;51066:9;51062:18;51054:26;;51126:9;51120:4;51116:20;51112:1;51101:9;51097:17;51090:47;51154:131;51280:4;51154:131;:::i;:::-;51146:139;;50873:419;;;:::o;51298:332::-;51419:4;51457:2;51446:9;51442:18;51434:26;;51470:71;51538:1;51527:9;51523:17;51514:6;51470:71;:::i;:::-;51551:72;51619:2;51608:9;51604:18;51595:6;51551:72;:::i;:::-;51298:332;;;;;:::o;51636:163::-;51776:15;51772:1;51764:6;51760:14;51753:39;51636:163;:::o;51805:366::-;51947:3;51968:67;52032:2;52027:3;51968:67;:::i;:::-;51961:74;;52044:93;52133:3;52044:93;:::i;:::-;52162:2;52157:3;52153:12;52146:19;;51805:366;;;:::o;52177:419::-;52343:4;52381:2;52370:9;52366:18;52358:26;;52430:9;52424:4;52420:20;52416:1;52405:9;52401:17;52394:47;52458:131;52584:4;52458:131;:::i;:::-;52450:139;;52177:419;;;:::o;52602:98::-;52653:6;52687:5;52681:12;52671:22;;52602:98;;;:::o;52706:168::-;52789:11;52823:6;52818:3;52811:19;52863:4;52858:3;52854:14;52839:29;;52706:168;;;;:::o;52880:373::-;52966:3;52994:38;53026:5;52994:38;:::i;:::-;53048:70;53111:6;53106:3;53048:70;:::i;:::-;53041:77;;53127:65;53185:6;53180:3;53173:4;53166:5;53162:16;53127:65;:::i;:::-;53217:29;53239:6;53217:29;:::i;:::-;53212:3;53208:39;53201:46;;52970:283;52880:373;;;;:::o;53259:1053::-;53582:4;53620:3;53609:9;53605:19;53597:27;;53634:71;53702:1;53691:9;53687:17;53678:6;53634:71;:::i;:::-;53715:72;53783:2;53772:9;53768:18;53759:6;53715:72;:::i;:::-;53834:9;53828:4;53824:20;53819:2;53808:9;53804:18;53797:48;53862:108;53965:4;53956:6;53862:108;:::i;:::-;53854:116;;54017:9;54011:4;54007:20;54002:2;53991:9;53987:18;53980:48;54045:108;54148:4;54139:6;54045:108;:::i;:::-;54037:116;;54201:9;54195:4;54191:20;54185:3;54174:9;54170:19;54163:49;54229:76;54300:4;54291:6;54229:76;:::i;:::-;54221:84;;53259:1053;;;;;;;;:::o;54318:141::-;54374:5;54405:6;54399:13;54390:22;;54421:32;54447:5;54421:32;:::i;:::-;54318:141;;;;:::o;54465:349::-;54534:6;54583:2;54571:9;54562:7;54558:23;54554:32;54551:119;;;54589:79;;:::i;:::-;54551:119;54709:1;54734:63;54789:7;54780:6;54769:9;54765:22;54734:63;:::i;:::-;54724:73;;54680:127;54465:349;;;;:::o;54820:106::-;54864:8;54913:5;54908:3;54904:15;54883:36;;54820:106;;;:::o;54932:183::-;54967:3;55005:1;54987:16;54984:23;54981:128;;;55043:1;55040;55037;55022:23;55065:34;55096:1;55090:8;55065:34;:::i;:::-;55058:41;;54981:128;54932:183;:::o;55121:711::-;55160:3;55198:4;55180:16;55177:26;55206:5;55174:39;55235:20;;:::i;:::-;55310:1;55292:16;55288:24;55285:1;55279:4;55264:49;55343:4;55337:11;55442:16;55435:4;55427:6;55423:17;55420:39;55387:18;55379:6;55376:30;55360:113;55357:146;;;55488:5;;;;55357:146;55534:6;55528:4;55524:17;55570:3;55564:10;55597:18;55589:6;55586:30;55583:43;;;55619:5;;;;;;55583:43;55667:6;55660:4;55655:3;55651:14;55647:27;55726:1;55708:16;55704:24;55698:4;55694:35;55689:3;55686:44;55683:57;;;55733:5;;;;;;;55683:57;55750;55798:6;55792:4;55788:17;55780:6;55776:30;55770:4;55750:57;:::i;:::-;55823:3;55816:10;;55164:668;;;;;55121:711;;:::o;55838:239::-;55978:34;55974:1;55966:6;55962:14;55955:58;56047:22;56042:2;56034:6;56030:15;56023:47;55838:239;:::o;56083:366::-;56225:3;56246:67;56310:2;56305:3;56246:67;:::i;:::-;56239:74;;56322:93;56411:3;56322:93;:::i;:::-;56440:2;56435:3;56431:12;56424:19;;56083:366;;;:::o;56455:419::-;56621:4;56659:2;56648:9;56644:18;56636:26;;56708:9;56702:4;56698:20;56694:1;56683:9;56679:17;56672:47;56736:131;56862:4;56736:131;:::i;:::-;56728:139;;56455:419;;;:::o;56880:227::-;57020:34;57016:1;57008:6;57004:14;56997:58;57089:10;57084:2;57076:6;57072:15;57065:35;56880:227;:::o;57113:366::-;57255:3;57276:67;57340:2;57335:3;57276:67;:::i;:::-;57269:74;;57352:93;57441:3;57352:93;:::i;:::-;57470:2;57465:3;57461:12;57454:19;;57113:366;;;:::o;57485:419::-;57651:4;57689:2;57678:9;57674:18;57666:26;;57738:9;57732:4;57728:20;57724:1;57713:9;57709:17;57702:47;57766:131;57892:4;57766:131;:::i;:::-;57758:139;;57485:419;;;:::o;57910:104::-;57955:7;57984:24;58002:5;57984:24;:::i;:::-;57973:35;;57910:104;;;:::o;58020:108::-;58067:7;58096:26;58116:5;58096:26;:::i;:::-;58085:37;;58020:108;;;:::o;58134:189::-;58255:61;58283:32;58309:5;58283:32;:::i;:::-;58255:61;:::i;:::-;58250:3;58243:74;58134:189;;:::o;58329:288::-;58457:3;58472:91;58559:3;58550:6;58472:91;:::i;:::-;58588:2;58583:3;58579:12;58572:19;;58608:3;58601:10;;58329:288;;;;:::o;58623:79::-;58662:7;58691:5;58680:16;;58623:79;;;:::o;58708:157::-;58813:45;58833:24;58851:5;58833:24;:::i;:::-;58813:45;:::i;:::-;58808:3;58801:58;58708:157;;:::o;58871:397::-;59011:3;59026:75;59097:3;59088:6;59026:75;:::i;:::-;59126:2;59121:3;59117:12;59110:19;;59139:75;59210:3;59201:6;59139:75;:::i;:::-;59239:2;59234:3;59230:12;59223:19;;59259:3;59252:10;;58871:397;;;;;:::o;59274:220::-;59414:34;59410:1;59402:6;59398:14;59391:58;59483:3;59478:2;59470:6;59466:15;59459:28;59274:220;:::o;59500:366::-;59642:3;59663:67;59727:2;59722:3;59663:67;:::i;:::-;59656:74;;59739:93;59828:3;59739:93;:::i;:::-;59857:2;59852:3;59848:12;59841:19;;59500:366;;;:::o;59872:419::-;60038:4;60076:2;60065:9;60061:18;60053:26;;60125:9;60119:4;60115:20;60111:1;60100:9;60096:17;60089:47;60153:131;60279:4;60153:131;:::i;:::-;60145:139;;59872:419;;;:::o;60297:751::-;60520:4;60558:3;60547:9;60543:19;60535:27;;60572:71;60640:1;60629:9;60625:17;60616:6;60572:71;:::i;:::-;60653:72;60721:2;60710:9;60706:18;60697:6;60653:72;:::i;:::-;60735;60803:2;60792:9;60788:18;60779:6;60735:72;:::i;:::-;60817;60885:2;60874:9;60870:18;60861:6;60817:72;:::i;:::-;60937:9;60931:4;60927:20;60921:3;60910:9;60906:19;60899:49;60965:76;61036:4;61027:6;60965:76;:::i;:::-;60957:84;;60297:751;;;;;;;;:::o

Swarm Source

ipfs://38345c8871738efde64ca50d50d238b9384b318c63a4e4bde730d49a82cc1988
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.