Token Revealed Truth NFT
Overview ERC1155
Total Supply:
0 TRUTH
Holders:
29 addresses
Transfers:
-
Contract:
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
RevealedTruth
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-03-05 */ //SPDX-License-Identifier: MIT // Revealed Truth NFT by xrpant for Smolrun // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @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); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev 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); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: 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; } } // File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/extensions/ERC1155Supply.sol) pragma solidity ^0.8.0; /** * @dev Extension of ERC1155 that adds tracking of total supply per id. * * Useful for scenarios where Fungible and Non-fungible tokens have to be * clearly identified. Note: While a totalSupply of 1 might mean the * corresponding is an NFT, there is no guarantees that no other token with the * same id are not going to be minted. */ abstract contract ERC1155Supply is ERC1155 { mapping(uint256 => uint256) private _totalSupply; /** * @dev Total amount of tokens in with a given id. */ function totalSupply(uint256 id) public view virtual returns (uint256) { return _totalSupply[id]; } /** * @dev Indicates whether any token exist with a given id, or not. */ function exists(uint256 id) public view virtual returns (bool) { return ERC1155Supply.totalSupply(id) > 0; } /** * @dev See {ERC1155-_beforeTokenTransfer}. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); if (from == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] += amounts[i]; } } if (to == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 supply = _totalSupply[id]; require(supply >= amount, "ERC1155: burn amount exceeds totalSupply"); unchecked { _totalSupply[id] = supply - amount; } } } } } pragma solidity ^0.8.7; interface IERC2981Royalties { function royaltyInfo(uint256 tokenID, uint256 value) external view returns(address receiver, uint256 royaltyAmount); } contract RevealedTruth is ERC1155Supply, Ownable { using Strings for uint256; string public baseURI = "ipfs://bafybeibir7xhqtdjcf2xqlygdzesg4gk4h4c4zstpwivt2ockgveq72zz4/"; string public name = "Revealed Truth NFT"; string public symbol = "TRUTH"; uint256 public numberMinted = 0; uint256 public startTime; constructor() ERC1155(baseURI) { startTime = block.timestamp; } function mint(uint256 amount) public { numberMinted += amount; _mint(msg.sender, getDay(), amount, ""); } // View Functions function uri(uint256 typeId) public view override returns (string memory) { return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI,typeId.toString(),".json")) : ""; } function getDay() public view returns(uint256) { return ((block.timestamp - startTime) / 86400 % 365) + 1; } // Admin Functions function setBaseURI(string memory _newBaseURI) external onlyOwner { baseURI = _newBaseURI; } function withdrawERC20(address _tokenAddress, uint256 _amount, address _to) public onlyOwner { IERC20 token = IERC20(_tokenAddress); token.transfer(_to, _amount); } function withdrawBalance(address _to) public onlyOwner { (bool success, ) = payable(_to).call{value: address(this).balance}(""); require(success, "Failed to withdraw!"); } // Royalties function supportsInterface(bytes4 interfaceID) public view override returns(bool) { return interfaceID == type(IERC2981Royalties).interfaceId || super.supportsInterface(interfaceID); } function royaltyInfo(uint256, uint256 value) external view returns(address, uint256) { return (address(this) , value); } receive() external payable { } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberMinted","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"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"typeId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526040518060800160405280604381526020016200436e60439139600590816200002e9190620004ff565b506040518060400160405280601281526020017f52657665616c6564205472757468204e4654000000000000000000000000000081525060069081620000759190620004ff565b506040518060400160405280600581526020017f545255544800000000000000000000000000000000000000000000000000000081525060079081620000bc9190620004ff565b506000600855348015620000cf57600080fd5b5060058054620000df90620002ee565b80601f01602080910402602001604051908101604052809291908181526020018280546200010d90620002ee565b80156200015e5780601f1062000132576101008083540402835291602001916200015e565b820191906000526020600020905b8154815290600101906020018083116200014057829003601f168201915b50505050506200017481620001a260201b60201c565b506200019562000189620001b760201b60201c565b620001bf60201b60201c565b42600981905550620005e6565b8060029081620001b39190620004ff565b5050565b600033905090565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200030757607f821691505b6020821081036200031d576200031c620002bf565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000348565b62000393868362000348565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003e0620003da620003d484620003ab565b620003b5565b620003ab565b9050919050565b6000819050919050565b620003fc83620003bf565b620004146200040b82620003e7565b84845462000355565b825550505050565b600090565b6200042b6200041c565b62000438818484620003f1565b505050565b5b8181101562000460576200045460008262000421565b6001810190506200043e565b5050565b601f821115620004af57620004798162000323565b620004848462000338565b8101602085101562000494578190505b620004ac620004a38562000338565b8301826200043d565b50505b505050565b600082821c905092915050565b6000620004d460001984600802620004b4565b1980831691505092915050565b6000620004ef8383620004c1565b9150826002028217905092915050565b6200050a8262000285565b67ffffffffffffffff81111562000526576200052562000290565b5b620005328254620002ee565b6200053f82828562000464565b600060209050601f83116001811462000577576000841562000562578287015190505b6200056e8582620004e1565b865550620005de565b601f198416620005878662000323565b60005b82811015620005b1578489015182556001820191506020850194506020810190506200058a565b86831015620005d15784890151620005cd601f891682620004c1565b8355505b6001600288020188555050505b505050505050565b613d7880620005f66000396000f3fe60806040526004361061014e5760003560e01c80636c0360eb116100b6578063a0712d681161006f578063a0712d68146104b1578063a22cb465146104da578063bd85b03914610503578063e985e9c514610540578063f242432a1461057d578063f2fde38b146105a657610155565b80636c0360eb146103c5578063715018a6146103f0578063756af45f1461040757806378e97925146104305780638da5cb5b1461045b57806395d89b411461048657610155565b80632eb2c2d6116101085780632eb2c2d6146102a557806349a772b5146102ce5780634e1273f4146102f95780634f558e791461033657806355f804b3146103735780635fc3ea0b1461039c57610155565b8062fdd58e1461015a57806301ffc9a71461019757806306fdde03146101d45780630e89341c146101ff57806314ba5c091461023c5780632a55205a1461026757610155565b3661015557005b600080fd5b34801561016657600080fd5b50610181600480360381019061017c91906122b0565b6105cf565b60405161018e91906122ff565b60405180910390f35b3480156101a357600080fd5b506101be60048036038101906101b99190612372565b610697565b6040516101cb91906123ba565b60405180910390f35b3480156101e057600080fd5b506101e9610711565b6040516101f69190612465565b60405180910390f35b34801561020b57600080fd5b5061022660048036038101906102219190612487565b61079f565b6040516102339190612465565b60405180910390f35b34801561024857600080fd5b506102516107ff565b60405161025e91906122ff565b60405180910390f35b34801561027357600080fd5b5061028e600480360381019061028991906124b4565b61083b565b60405161029c929190612503565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c79190612729565b61084b565b005b3480156102da57600080fd5b506102e36108ec565b6040516102f091906122ff565b60405180910390f35b34801561030557600080fd5b50610320600480360381019061031b91906128bb565b6108f2565b60405161032d91906129f1565b60405180910390f35b34801561034257600080fd5b5061035d60048036038101906103589190612487565b610a0b565b60405161036a91906123ba565b60405180910390f35b34801561037f57600080fd5b5061039a60048036038101906103959190612ab4565b610a1f565b005b3480156103a857600080fd5b506103c360048036038101906103be9190612afd565b610a3a565b005b3480156103d157600080fd5b506103da610acc565b6040516103e79190612465565b60405180910390f35b3480156103fc57600080fd5b50610405610b5a565b005b34801561041357600080fd5b5061042e60048036038101906104299190612b50565b610b6e565b005b34801561043c57600080fd5b50610445610c26565b60405161045291906122ff565b60405180910390f35b34801561046757600080fd5b50610470610c2c565b60405161047d9190612b7d565b60405180910390f35b34801561049257600080fd5b5061049b610c56565b6040516104a89190612465565b60405180910390f35b3480156104bd57600080fd5b506104d860048036038101906104d39190612487565b610ce4565b005b3480156104e657600080fd5b5061050160048036038101906104fc9190612bc4565b610d22565b005b34801561050f57600080fd5b5061052a60048036038101906105259190612487565b610d38565b60405161053791906122ff565b60405180910390f35b34801561054c57600080fd5b5061056760048036038101906105629190612c04565b610d55565b60405161057491906123ba565b60405180910390f35b34801561058957600080fd5b506105a4600480360381019061059f9190612c44565b610de9565b005b3480156105b257600080fd5b506105cd60048036038101906105c89190612b50565b610e8a565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361063f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063690612d4d565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061070a575061070982610f0d565b5b9050919050565b6006805461071e90612d9c565b80601f016020809104026020016040519081016040528092919081815260200182805461074a90612d9c565b80156107975780601f1061076c57610100808354040283529160200191610797565b820191906000526020600020905b81548152906001019060200180831161077a57829003601f168201915b505050505081565b60606000600580546107b090612d9c565b9050116107cc57604051806020016040528060008152506107f8565b60056107d783610fef565b6040516020016107e8929190612eed565b6040516020818303038152906040525b9050919050565b6000600161016d62015180600954426108189190612f4b565b6108229190612fae565b61082c9190612fdf565b6108369190613010565b905090565b6000803083915091509250929050565b61085361114f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061089957506108988561089361114f565b610d55565b5b6108d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cf906130b6565b60405180910390fd5b6108e58585858585611157565b5050505050565b60085481565b60608151835114610938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092f90613148565b60405180910390fd5b6000835167ffffffffffffffff81111561095557610954612531565b5b6040519080825280602002602001820160405280156109835781602001602082028036833780820191505090505b50905060005b8451811015610a00576109d08582815181106109a8576109a7613168565b5b60200260200101518583815181106109c3576109c2613168565b5b60200260200101516105cf565b8282815181106109e3576109e2613168565b5b602002602001018181525050806109f990613197565b9050610989565b508091505092915050565b600080610a1783610d38565b119050919050565b610a27611478565b8060059081610a369190613376565b5050565b610a42611478565b60008390508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b8152600401610a82929190612503565b6020604051808303816000875af1158015610aa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac5919061345d565b5050505050565b60058054610ad990612d9c565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0590612d9c565b8015610b525780601f10610b2757610100808354040283529160200191610b52565b820191906000526020600020905b815481529060010190602001808311610b3557829003601f168201915b505050505081565b610b62611478565b610b6c60006114f6565b565b610b76611478565b60008173ffffffffffffffffffffffffffffffffffffffff1647604051610b9c906134bb565b60006040518083038185875af1925050503d8060008114610bd9576040519150601f19603f3d011682016040523d82523d6000602084013e610bde565b606091505b5050905080610c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c199061351c565b60405180910390fd5b5050565b60095481565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60078054610c6390612d9c565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8f90612d9c565b8015610cdc5780601f10610cb157610100808354040283529160200191610cdc565b820191906000526020600020905b815481529060010190602001808311610cbf57829003601f168201915b505050505081565b8060086000828254610cf69190613010565b92505081905550610d1f33610d096107ff565b83604051806020016040528060008152506115bc565b50565b610d34610d2d61114f565b838361176c565b5050565b600060036000838152602001908152602001600020549050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610df161114f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e375750610e3685610e3161114f565b610d55565b5b610e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6d906130b6565b60405180910390fd5b610e8385858585856118d8565b5050505050565b610e92611478565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef8906135ae565b60405180910390fd5b610f0a816114f6565b50565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610fd857507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610fe85750610fe782611b73565b5b9050919050565b606060008203611036576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061114a565b600082905060005b6000821461106857808061105190613197565b915050600a826110619190612fae565b915061103e565b60008167ffffffffffffffff81111561108457611083612531565b5b6040519080825280601f01601f1916602001820160405280156110b65781602001600182028036833780820191505090505b5090505b60008514611143576001826110cf9190612f4b565b9150600a856110de9190612fdf565b60306110ea9190613010565b60f81b818381518110611100576110ff613168565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561113c9190612fae565b94506110ba565b8093505050505b919050565b600033905090565b815183511461119b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119290613640565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361120a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611201906136d2565b60405180910390fd5b600061121461114f565b9050611224818787878787611bdd565b60005b84518110156113d557600085828151811061124557611244613168565b5b60200260200101519050600085838151811061126457611263613168565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fc90613764565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113ba9190613010565b92505081905550505050806113ce90613197565b9050611227565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161144c929190613784565b60405180910390a4611462818787878787611dad565b611470818787878787611db5565b505050505050565b61148061114f565b73ffffffffffffffffffffffffffffffffffffffff1661149e610c2c565b73ffffffffffffffffffffffffffffffffffffffff16146114f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114eb90613807565b60405180910390fd5b565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361162b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162290613899565b60405180910390fd5b600061163561114f565b9050600061164285611f8c565b9050600061164f85611f8c565b905061166083600089858589611bdd565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116bf9190613010565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161173d9291906138b9565b60405180910390a461175483600089858589611dad565b61176383600089898989612006565b50505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d190613954565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118cb91906123ba565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193e906136d2565b60405180910390fd5b600061195161114f565b9050600061195e85611f8c565b9050600061196b85611f8c565b905061197b838989858589611bdd565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0990613764565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ac79190613010565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611b449291906138b9565b60405180910390a4611b5a848a8a86868a611dad565b611b68848a8a8a8a8a612006565b505050505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611beb8686868686866121dd565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611c9c5760005b8351811015611c9a57828181518110611c3e57611c3d613168565b5b602002602001015160036000868481518110611c5d57611c5c613168565b5b602002602001015181526020019081526020016000206000828254611c829190613010565b9250508190555080611c9390613197565b9050611c22565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611da55760005b8351811015611da3576000848281518110611cf157611cf0613168565b5b602002602001015190506000848381518110611d1057611d0f613168565b5b6020026020010151905060006003600084815260200190815260200160002054905081811015611d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6c906139e6565b60405180910390fd5b818103600360008581526020019081526020016000208190555050505080611d9c90613197565b9050611cd3565b505b505050505050565b505050505050565b611dd48473ffffffffffffffffffffffffffffffffffffffff166121e5565b15611f84578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611e1a959493929190613a5b565b6020604051808303816000875af1925050508015611e5657506040513d601f19601f82011682018060405250810190611e539190613ad8565b60015b611efb57611e62613b12565b806308c379a003611ebe5750611e76613b34565b80611e815750611ec0565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb59190612465565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef290613c36565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7990613cc8565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611fab57611faa612531565b5b604051908082528060200260200182016040528015611fd95781602001602082028036833780820191505090505b5090508281600081518110611ff157611ff0613168565b5b60200260200101818152505080915050919050565b6120258473ffffffffffffffffffffffffffffffffffffffff166121e5565b156121d5578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161206b959493929190613ce8565b6020604051808303816000875af19250505080156120a757506040513d601f19601f820116820180604052508101906120a49190613ad8565b60015b61214c576120b3613b12565b806308c379a00361210f57506120c7613b34565b806120d25750612111565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121069190612465565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214390613c36565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146121d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ca90613cc8565b60405180910390fd5b505b505050505050565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006122478261221c565b9050919050565b6122578161223c565b811461226257600080fd5b50565b6000813590506122748161224e565b92915050565b6000819050919050565b61228d8161227a565b811461229857600080fd5b50565b6000813590506122aa81612284565b92915050565b600080604083850312156122c7576122c6612212565b5b60006122d585828601612265565b92505060206122e68582860161229b565b9150509250929050565b6122f98161227a565b82525050565b600060208201905061231460008301846122f0565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61234f8161231a565b811461235a57600080fd5b50565b60008135905061236c81612346565b92915050565b60006020828403121561238857612387612212565b5b60006123968482850161235d565b91505092915050565b60008115159050919050565b6123b48161239f565b82525050565b60006020820190506123cf60008301846123ab565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561240f5780820151818401526020810190506123f4565b60008484015250505050565b6000601f19601f8301169050919050565b6000612437826123d5565b61244181856123e0565b93506124518185602086016123f1565b61245a8161241b565b840191505092915050565b6000602082019050818103600083015261247f818461242c565b905092915050565b60006020828403121561249d5761249c612212565b5b60006124ab8482850161229b565b91505092915050565b600080604083850312156124cb576124ca612212565b5b60006124d98582860161229b565b92505060206124ea8582860161229b565b9150509250929050565b6124fd8161223c565b82525050565b600060408201905061251860008301856124f4565b61252560208301846122f0565b9392505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6125698261241b565b810181811067ffffffffffffffff8211171561258857612587612531565b5b80604052505050565b600061259b612208565b90506125a78282612560565b919050565b600067ffffffffffffffff8211156125c7576125c6612531565b5b602082029050602081019050919050565b600080fd5b60006125f06125eb846125ac565b612591565b90508083825260208201905060208402830185811115612613576126126125d8565b5b835b8181101561263c5780612628888261229b565b845260208401935050602081019050612615565b5050509392505050565b600082601f83011261265b5761265a61252c565b5b813561266b8482602086016125dd565b91505092915050565b600080fd5b600067ffffffffffffffff82111561269457612693612531565b5b61269d8261241b565b9050602081019050919050565b82818337600083830152505050565b60006126cc6126c784612679565b612591565b9050828152602081018484840111156126e8576126e7612674565b5b6126f38482856126aa565b509392505050565b600082601f8301126127105761270f61252c565b5b81356127208482602086016126b9565b91505092915050565b600080600080600060a0868803121561274557612744612212565b5b600061275388828901612265565b955050602061276488828901612265565b945050604086013567ffffffffffffffff81111561278557612784612217565b5b61279188828901612646565b935050606086013567ffffffffffffffff8111156127b2576127b1612217565b5b6127be88828901612646565b925050608086013567ffffffffffffffff8111156127df576127de612217565b5b6127eb888289016126fb565b9150509295509295909350565b600067ffffffffffffffff82111561281357612812612531565b5b602082029050602081019050919050565b6000612837612832846127f8565b612591565b9050808382526020820190506020840283018581111561285a576128596125d8565b5b835b81811015612883578061286f8882612265565b84526020840193505060208101905061285c565b5050509392505050565b600082601f8301126128a2576128a161252c565b5b81356128b2848260208601612824565b91505092915050565b600080604083850312156128d2576128d1612212565b5b600083013567ffffffffffffffff8111156128f0576128ef612217565b5b6128fc8582860161288d565b925050602083013567ffffffffffffffff81111561291d5761291c612217565b5b61292985828601612646565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6129688161227a565b82525050565b600061297a838361295f565b60208301905092915050565b6000602082019050919050565b600061299e82612933565b6129a8818561293e565b93506129b38361294f565b8060005b838110156129e45781516129cb888261296e565b97506129d683612986565b9250506001810190506129b7565b5085935050505092915050565b60006020820190508181036000830152612a0b8184612993565b905092915050565b600067ffffffffffffffff821115612a2e57612a2d612531565b5b612a378261241b565b9050602081019050919050565b6000612a57612a5284612a13565b612591565b905082815260208101848484011115612a7357612a72612674565b5b612a7e8482856126aa565b509392505050565b600082601f830112612a9b57612a9a61252c565b5b8135612aab848260208601612a44565b91505092915050565b600060208284031215612aca57612ac9612212565b5b600082013567ffffffffffffffff811115612ae857612ae7612217565b5b612af484828501612a86565b91505092915050565b600080600060608486031215612b1657612b15612212565b5b6000612b2486828701612265565b9350506020612b358682870161229b565b9250506040612b4686828701612265565b9150509250925092565b600060208284031215612b6657612b65612212565b5b6000612b7484828501612265565b91505092915050565b6000602082019050612b9260008301846124f4565b92915050565b612ba18161239f565b8114612bac57600080fd5b50565b600081359050612bbe81612b98565b92915050565b60008060408385031215612bdb57612bda612212565b5b6000612be985828601612265565b9250506020612bfa85828601612baf565b9150509250929050565b60008060408385031215612c1b57612c1a612212565b5b6000612c2985828601612265565b9250506020612c3a85828601612265565b9150509250929050565b600080600080600060a08688031215612c6057612c5f612212565b5b6000612c6e88828901612265565b9550506020612c7f88828901612265565b9450506040612c908882890161229b565b9350506060612ca18882890161229b565b925050608086013567ffffffffffffffff811115612cc257612cc1612217565b5b612cce888289016126fb565b9150509295509295909350565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000612d37602a836123e0565b9150612d4282612cdb565b604082019050919050565b60006020820190508181036000830152612d6681612d2a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612db457607f821691505b602082108103612dc757612dc6612d6d565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154612dfa81612d9c565b612e048186612dcd565b94506001821660008114612e1f5760018114612e3457612e67565b60ff1983168652811515820286019350612e67565b612e3d85612dd8565b60005b83811015612e5f57815481890152600182019150602081019050612e40565b838801955050505b50505092915050565b6000612e7b826123d5565b612e858185612dcd565b9350612e958185602086016123f1565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000612ed7600583612dcd565b9150612ee282612ea1565b600582019050919050565b6000612ef98285612ded565b9150612f058284612e70565b9150612f1082612eca565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f568261227a565b9150612f618361227a565b9250828203905081811115612f7957612f78612f1c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612fb98261227a565b9150612fc48361227a565b925082612fd457612fd3612f7f565b5b828204905092915050565b6000612fea8261227a565b9150612ff58361227a565b92508261300557613004612f7f565b5b828206905092915050565b600061301b8261227a565b91506130268361227a565b925082820190508082111561303e5761303d612f1c565b5b92915050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b60006130a0602f836123e0565b91506130ab82613044565b604082019050919050565b600060208201905081810360008301526130cf81613093565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006131326029836123e0565b915061313d826130d6565b604082019050919050565b6000602082019050818103600083015261316181613125565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006131a28261227a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036131d4576131d3612f1c565b5b600182019050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261322c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826131ef565b61323686836131ef565b95508019841693508086168417925050509392505050565b6000819050919050565b600061327361326e6132698461227a565b61324e565b61227a565b9050919050565b6000819050919050565b61328d83613258565b6132a16132998261327a565b8484546131fc565b825550505050565b600090565b6132b66132a9565b6132c1818484613284565b505050565b5b818110156132e5576132da6000826132ae565b6001810190506132c7565b5050565b601f82111561332a576132fb81612dd8565b613304846131df565b81016020851015613313578190505b61332761331f856131df565b8301826132c6565b50505b505050565b600082821c905092915050565b600061334d6000198460080261332f565b1980831691505092915050565b6000613366838361333c565b9150826002028217905092915050565b61337f826123d5565b67ffffffffffffffff81111561339857613397612531565b5b6133a28254612d9c565b6133ad8282856132e9565b600060209050601f8311600181146133e057600084156133ce578287015190505b6133d8858261335a565b865550613440565b601f1984166133ee86612dd8565b60005b82811015613416578489015182556001820191506020850194506020810190506133f1565b86831015613433578489015161342f601f89168261333c565b8355505b6001600288020188555050505b505050505050565b60008151905061345781612b98565b92915050565b60006020828403121561347357613472612212565b5b600061348184828501613448565b91505092915050565b600081905092915050565b50565b60006134a560008361348a565b91506134b082613495565b600082019050919050565b60006134c682613498565b9150819050919050565b7f4661696c656420746f2077697468647261772100000000000000000000000000600082015250565b60006135066013836123e0565b9150613511826134d0565b602082019050919050565b60006020820190508181036000830152613535816134f9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006135986026836123e0565b91506135a38261353c565b604082019050919050565b600060208201905081810360008301526135c78161358b565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061362a6028836123e0565b9150613635826135ce565b604082019050919050565b600060208201905081810360008301526136598161361d565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006136bc6025836123e0565b91506136c782613660565b604082019050919050565b600060208201905081810360008301526136eb816136af565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b600061374e602a836123e0565b9150613759826136f2565b604082019050919050565b6000602082019050818103600083015261377d81613741565b9050919050565b6000604082019050818103600083015261379e8185612993565b905081810360208301526137b28184612993565b90509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006137f16020836123e0565b91506137fc826137bb565b602082019050919050565b60006020820190508181036000830152613820816137e4565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006138836021836123e0565b915061388e82613827565b604082019050919050565b600060208201905081810360008301526138b281613876565b9050919050565b60006040820190506138ce60008301856122f0565b6138db60208301846122f0565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061393e6029836123e0565b9150613949826138e2565b604082019050919050565b6000602082019050818103600083015261396d81613931565b9050919050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b60006139d06028836123e0565b91506139db82613974565b604082019050919050565b600060208201905081810360008301526139ff816139c3565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613a2d82613a06565b613a378185613a11565b9350613a478185602086016123f1565b613a508161241b565b840191505092915050565b600060a082019050613a7060008301886124f4565b613a7d60208301876124f4565b8181036040830152613a8f8186612993565b90508181036060830152613aa38185612993565b90508181036080830152613ab78184613a22565b90509695505050505050565b600081519050613ad281612346565b92915050565b600060208284031215613aee57613aed612212565b5b6000613afc84828501613ac3565b91505092915050565b60008160e01c9050919050565b600060033d1115613b315760046000803e613b2e600051613b05565b90505b90565b600060443d10613bc157613b46612208565b60043d036004823e80513d602482011167ffffffffffffffff82111715613b6e575050613bc1565b808201805167ffffffffffffffff811115613b8c5750505050613bc1565b80602083010160043d038501811115613ba9575050505050613bc1565b613bb882602001850186612560565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613c206034836123e0565b9150613c2b82613bc4565b604082019050919050565b60006020820190508181036000830152613c4f81613c13565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613cb26028836123e0565b9150613cbd82613c56565b604082019050919050565b60006020820190508181036000830152613ce181613ca5565b9050919050565b600060a082019050613cfd60008301886124f4565b613d0a60208301876124f4565b613d1760408301866122f0565b613d2460608301856122f0565b8181036080830152613d368184613a22565b9050969550505050505056fea2646970667358221220819666ad2c479ab2c42372262e6116e2f8b37933dfa5c33dd6f4d92b8ce7164064736f6c63430008120033697066733a2f2f626166796265696269723778687174646a63663278716c7967647a65736734676b34683463347a73747077697674326f636b6776657137327a7a342f
Deployed ByteCode Sourcemap
51325:1914:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33530:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52853:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51515:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51917:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52164:122;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53059:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;35474:439;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51602:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33926:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50008:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52318:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52432:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51415:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7855:103;;;;;;;;;;;;;:::i;:::-;;52629:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51640:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7207:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51563:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51758:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34523:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49797:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34750:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34990:407;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8113:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33530:230;33616:7;33663:1;33644:21;;:7;:21;;;33636:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;33730:9;:13;33740:2;33730:13;;;;;;;;;;;:22;33744:7;33730:22;;;;;;;;;;;;;;;;33723:29;;33530:230;;;;:::o;52853:198::-;52929:4;52968:35;52953:50;;;:11;:50;;;;:90;;;;53007:36;53031:11;53007:23;:36::i;:::-;52953:90;52946:97;;52853:198;;;:::o;51515:41::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51917:239::-;51976:13;52046:1;52028:7;52022:21;;;;;:::i;:::-;;;:25;:126;;;;;;;;;;;;;;;;;52091:7;52099:17;:6;:15;:17::i;:::-;52074:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52022:126;52002:146;;51917:239;;;:::o;52164:122::-;52202:7;52277:1;52270:3;52262:5;52249:9;;52231:15;:27;;;;:::i;:::-;52230:37;;;;:::i;:::-;:43;;;;:::i;:::-;52229:49;;;;:::i;:::-;52222:56;;52164:122;:::o;53059:134::-;53126:7;53135;53171:4;53179:5;53155:30;;;;53059:134;;;;;:::o;35474:439::-;35715:12;:10;:12::i;:::-;35707:20;;:4;:20;;;:60;;;;35731:36;35748:4;35754:12;:10;:12::i;:::-;35731:16;:36::i;:::-;35707:60;35685:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;35853:52;35876:4;35882:2;35886:3;35891:7;35900:4;35853:22;:52::i;:::-;35474:439;;;;;:::o;51602:31::-;;;;:::o;33926:524::-;34082:16;34143:3;:10;34124:8;:15;:29;34116:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;34212:30;34259:8;:15;34245:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34212:63;;34293:9;34288:122;34312:8;:15;34308:1;:19;34288:122;;;34368:30;34378:8;34387:1;34378:11;;;;;;;;:::i;:::-;;;;;;;;34391:3;34395:1;34391:6;;;;;;;;:::i;:::-;;;;;;;;34368:9;:30::i;:::-;34349:13;34363:1;34349:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;34329:3;;;;:::i;:::-;;;34288:122;;;;34429:13;34422:20;;;33926:524;;;;:::o;50008:122::-;50065:4;50121:1;50089:29;50115:2;50089:25;:29::i;:::-;:33;50082:40;;50008:122;;;:::o;52318:106::-;7093:13;:11;:13::i;:::-;52405:11:::1;52395:7;:21;;;;;;:::i;:::-;;52318:106:::0;:::o;52432:189::-;7093:13;:11;:13::i;:::-;52536:12:::1;52558:13;52536:36;;52585:5;:14;;;52600:3;52605:7;52585:28;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;52525:96;52432:189:::0;;;:::o;51415:93::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7855:103::-;7093:13;:11;:13::i;:::-;7920:30:::1;7947:1;7920:18;:30::i;:::-;7855:103::o:0;52629:198::-;7093:13;:11;:13::i;:::-;52700:12:::1;52726:3;52718:17;;52743:21;52718:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52699:70;;;52788:7;52780:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;52684:143;52629:198:::0;:::o;51640:24::-;;;;:::o;7207:87::-;7253:7;7280:6;;;;;;;;;;;7273:13;;7207:87;:::o;51563:30::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51758:128::-;51822:6;51806:12;;:22;;;;;;;:::i;:::-;;;;;;;;51839:39;51845:10;51857:8;:6;:8::i;:::-;51867:6;51839:39;;;;;;;;;;;;:5;:39::i;:::-;51758:128;:::o;34523:155::-;34618:52;34637:12;:10;:12::i;:::-;34651:8;34661;34618:18;:52::i;:::-;34523:155;;:::o;49797:113::-;49859:7;49886:12;:16;49899:2;49886:16;;;;;;;;;;;;49879:23;;49797:113;;;:::o;34750:168::-;34849:4;34873:18;:27;34892:7;34873:27;;;;;;;;;;;;;;;:37;34901:8;34873:37;;;;;;;;;;;;;;;;;;;;;;;;;34866:44;;34750:168;;;;:::o;34990:407::-;35206:12;:10;:12::i;:::-;35198:20;;:4;:20;;;:60;;;;35222:36;35239:4;35245:12;:10;:12::i;:::-;35222:16;:36::i;:::-;35198:60;35176:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;35344:45;35362:4;35368:2;35372;35376:6;35384:4;35344:17;:45::i;:::-;34990:407;;;;;:::o;8113:201::-;7093:13;:11;:13::i;:::-;8222:1:::1;8202:22;;:8;:22;;::::0;8194:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;8278:28;8297:8;8278:18;:28::i;:::-;8113:201:::0;:::o;32553:310::-;32655:4;32707:26;32692:41;;;:11;:41;;;;:110;;;;32765:37;32750:52;;;:11;:52;;;;32692:110;:163;;;;32819:36;32843:11;32819:23;:36::i;:::-;32692:163;32672:183;;32553:310;;;:::o;441:723::-;497:13;727:1;718:5;:10;714:53;;745:10;;;;;;;;;;;;;;;;;;;;;714:53;777:12;792:5;777:20;;808:14;833:78;848:1;840:4;:9;833:78;;866:8;;;;;:::i;:::-;;;;897:2;889:10;;;;;:::i;:::-;;;833:78;;;921:19;953:6;943:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;921:39;;971:154;987:1;978:5;:10;971:154;;1015:1;1005:11;;;;;:::i;:::-;;;1082:2;1074:5;:10;;;;:::i;:::-;1061:2;:24;;;;:::i;:::-;1048:39;;1031:6;1038;1031:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1111:2;1102:11;;;;;:::i;:::-;;;971:154;;;1149:6;1135:21;;;;;441:723;;;;:::o;5758:98::-;5811:7;5838:10;5831:17;;5758:98;:::o;37709:1146::-;37936:7;:14;37922:3;:10;:28;37914:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;38028:1;38014:16;;:2;:16;;;38006:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;38085:16;38104:12;:10;:12::i;:::-;38085:31;;38129:60;38150:8;38160:4;38166:2;38170:3;38175:7;38184:4;38129:20;:60::i;:::-;38207:9;38202:421;38226:3;:10;38222:1;:14;38202:421;;;38258:10;38271:3;38275:1;38271:6;;;;;;;;:::i;:::-;;;;;;;;38258:19;;38292:14;38309:7;38317:1;38309:10;;;;;;;;:::i;:::-;;;;;;;;38292:27;;38336:19;38358:9;:13;38368:2;38358:13;;;;;;;;;;;:19;38372:4;38358:19;;;;;;;;;;;;;;;;38336:41;;38415:6;38400:11;:21;;38392:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;38548:6;38534:11;:20;38512:9;:13;38522:2;38512:13;;;;;;;;;;;:19;38526:4;38512:19;;;;;;;;;;;;;;;:42;;;;38605:6;38584:9;:13;38594:2;38584:13;;;;;;;;;;;:17;38598:2;38584:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;38243:380;;;38238:3;;;;:::i;:::-;;;38202:421;;;;38670:2;38640:47;;38664:4;38640:47;;38654:8;38640:47;;;38674:3;38679:7;38640:47;;;;;;;:::i;:::-;;;;;;;;38700:59;38720:8;38730:4;38736:2;38740:3;38745:7;38754:4;38700:19;:59::i;:::-;38772:75;38808:8;38818:4;38824:2;38828:3;38833:7;38842:4;38772:35;:75::i;:::-;37903:952;37709:1146;;;;;:::o;7372:132::-;7447:12;:10;:12::i;:::-;7436:23;;:7;:5;:7::i;:::-;:23;;;7428:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7372:132::o;8474:191::-;8548:16;8567:6;;;;;;;;;;;8548:25;;8593:8;8584:6;;:17;;;;;;;;;;;;;;;;;;8648:8;8617:40;;8638:8;8617:40;;;;;;;;;;;;8537:128;8474:191;:::o;40173:729::-;40340:1;40326:16;;:2;:16;;;40318:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;40393:16;40412:12;:10;:12::i;:::-;40393:31;;40435:20;40458:21;40476:2;40458:17;:21::i;:::-;40435:44;;40490:24;40517:25;40535:6;40517:17;:25::i;:::-;40490:52;;40555:66;40576:8;40594:1;40598:2;40602:3;40607:7;40616:4;40555:20;:66::i;:::-;40655:6;40634:9;:13;40644:2;40634:13;;;;;;;;;;;:17;40648:2;40634:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;40714:2;40677:52;;40710:1;40677:52;;40692:8;40677:52;;;40718:2;40722:6;40677:52;;;;;;;:::i;:::-;;;;;;;;40742:65;40762:8;40780:1;40784:2;40788:3;40793:7;40802:4;40742:19;:65::i;:::-;40820:74;40851:8;40869:1;40873:2;40877;40881:6;40889:4;40820:30;:74::i;:::-;40307:595;;;40173:729;;;;:::o;44586:331::-;44741:8;44732:17;;:5;:17;;;44724:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;44844:8;44806:18;:25;44825:5;44806:25;;;;;;;;;;;;;;;:35;44832:8;44806:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;44890:8;44868:41;;44883:5;44868:41;;;44900:8;44868:41;;;;;;:::i;:::-;;;;;;;;44586:331;;;:::o;36377:974::-;36579:1;36565:16;;:2;:16;;;36557:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;36636:16;36655:12;:10;:12::i;:::-;36636:31;;36678:20;36701:21;36719:2;36701:17;:21::i;:::-;36678:44;;36733:24;36760:25;36778:6;36760:17;:25::i;:::-;36733:52;;36798:60;36819:8;36829:4;36835:2;36839:3;36844:7;36853:4;36798:20;:60::i;:::-;36871:19;36893:9;:13;36903:2;36893:13;;;;;;;;;;;:19;36907:4;36893:19;;;;;;;;;;;;;;;;36871:41;;36946:6;36931:11;:21;;36923:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;37071:6;37057:11;:20;37035:9;:13;37045:2;37035:13;;;;;;;;;;;:19;37049:4;37035:19;;;;;;;;;;;;;;;:42;;;;37120:6;37099:9;:13;37109:2;37099:13;;;;;;;;;;;:17;37113:2;37099:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;37175:2;37144:46;;37169:4;37144:46;;37159:8;37144:46;;;37179:2;37183:6;37144:46;;;;;;;:::i;:::-;;;;;;;;37203:59;37223:8;37233:4;37239:2;37243:3;37248:7;37257:4;37203:19;:59::i;:::-;37275:68;37306:8;37316:4;37322:2;37326;37330:6;37338:4;37275:30;:68::i;:::-;36546:805;;;;36377:974;;;;;:::o;23834:157::-;23919:4;23958:25;23943:40;;;:11;:40;;;;23936:47;;23834:157;;;:::o;50205:931::-;50444:66;50471:8;50481:4;50487:2;50491:3;50496:7;50505:4;50444:26;:66::i;:::-;50543:1;50527:18;;:4;:18;;;50523:160;;50567:9;50562:110;50586:3;:10;50582:1;:14;50562:110;;;50646:7;50654:1;50646:10;;;;;;;;:::i;:::-;;;;;;;;50622:12;:20;50635:3;50639:1;50635:6;;;;;;;;:::i;:::-;;;;;;;;50622:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;50598:3;;;;:::i;:::-;;;50562:110;;;;50523:160;50713:1;50699:16;;:2;:16;;;50695:434;;50737:9;50732:386;50756:3;:10;50752:1;:14;50732:386;;;50792:10;50805:3;50809:1;50805:6;;;;;;;;:::i;:::-;;;;;;;;50792:19;;50830:14;50847:7;50855:1;50847:10;;;;;;;;:::i;:::-;;;;;;;;50830:27;;50876:14;50893:12;:16;50906:2;50893:16;;;;;;;;;;;;50876:33;;50946:6;50936;:16;;50928:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;51077:6;51068;:15;51049:12;:16;51062:2;51049:16;;;;;;;;;;;:34;;;;50773:345;;;50768:3;;;;:::i;:::-;;;50732:386;;;;50695:434;50205:931;;;;;;:::o;47051:220::-;;;;;;;:::o;48031:813::-;48271:15;:2;:13;;;:15::i;:::-;48267:570;;;48324:2;48307:43;;;48351:8;48361:4;48367:3;48372:7;48381:4;48307:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;48303:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;48699:6;48692:14;;;;;;;;;;;:::i;:::-;;;;;;;;48303:523;;;48748:62;;;;;;;;;;:::i;:::-;;;;;;;;48303:523;48480:48;;;48468:60;;;:8;:60;;;;48464:159;;48553:50;;;;;;;;;;:::i;:::-;;;;;;;;48464:159;48387:251;48267:570;48031:813;;;;;;:::o;48852:198::-;48918:16;48947:22;48986:1;48972:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48947:41;;49010:7;48999:5;49005:1;48999:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;49037:5;49030:12;;;48852:198;;;:::o;47279:744::-;47494:15;:2;:13;;;:15::i;:::-;47490:526;;;47547:2;47530:38;;;47569:8;47579:4;47585:2;47589:6;47597:4;47530:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;47526:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;47878:6;47871:14;;;;;;;;;;;:::i;:::-;;;;;;;;47526:479;;;47927:62;;;;;;;;;;:::i;:::-;;;;;;;;47526:479;47664:43;;;47652:55;;;:8;:55;;;;47648:154;;47732:50;;;;;;;;;;:::i;:::-;;;;;;;;47648:154;47603:214;47490:526;47279:744;;;;;;:::o;45875:221::-;;;;;;;:::o;9905:326::-;9965:4;10222:1;10200:7;:19;;;:23;10193:30;;9905:326;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:99::-;3265:6;3299:5;3293:12;3283:22;;3213:99;;;:::o;3318:169::-;3402:11;3436:6;3431:3;3424:19;3476:4;3471:3;3467:14;3452:29;;3318:169;;;;:::o;3493:246::-;3574:1;3584:113;3598:6;3595:1;3592:13;3584:113;;;3683:1;3678:3;3674:11;3668:18;3664:1;3659:3;3655:11;3648:39;3620:2;3617:1;3613:10;3608:15;;3584:113;;;3731:1;3722:6;3717:3;3713:16;3706:27;3555:184;3493:246;;;:::o;3745:102::-;3786:6;3837:2;3833:7;3828:2;3821:5;3817:14;3813:28;3803:38;;3745:102;;;:::o;3853:377::-;3941:3;3969:39;4002:5;3969:39;:::i;:::-;4024:71;4088:6;4083:3;4024:71;:::i;:::-;4017:78;;4104:65;4162:6;4157:3;4150:4;4143:5;4139:16;4104:65;:::i;:::-;4194:29;4216:6;4194:29;:::i;:::-;4189:3;4185:39;4178:46;;3945:285;3853:377;;;;:::o;4236:313::-;4349:4;4387:2;4376:9;4372:18;4364:26;;4436:9;4430:4;4426:20;4422:1;4411:9;4407:17;4400:47;4464:78;4537:4;4528:6;4464:78;:::i;:::-;4456:86;;4236:313;;;;:::o;4555:329::-;4614:6;4663:2;4651:9;4642:7;4638:23;4634:32;4631:119;;;4669:79;;:::i;:::-;4631:119;4789:1;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4760:117;4555:329;;;;:::o;4890:474::-;4958:6;4966;5015:2;5003:9;4994:7;4990:23;4986:32;4983:119;;;5021:79;;:::i;:::-;4983:119;5141:1;5166:53;5211:7;5202:6;5191:9;5187:22;5166:53;:::i;:::-;5156:63;;5112:117;5268:2;5294:53;5339:7;5330:6;5319:9;5315:22;5294:53;:::i;:::-;5284:63;;5239:118;4890:474;;;;;:::o;5370:118::-;5457:24;5475:5;5457:24;:::i;:::-;5452:3;5445:37;5370:118;;:::o;5494:332::-;5615:4;5653:2;5642:9;5638:18;5630:26;;5666:71;5734:1;5723:9;5719:17;5710:6;5666:71;:::i;:::-;5747:72;5815:2;5804:9;5800:18;5791:6;5747:72;:::i;:::-;5494:332;;;;;:::o;5832:117::-;5941:1;5938;5931:12;5955:180;6003:77;6000:1;5993:88;6100:4;6097:1;6090:15;6124:4;6121:1;6114:15;6141:281;6224:27;6246:4;6224:27;:::i;:::-;6216:6;6212:40;6354:6;6342:10;6339:22;6318:18;6306:10;6303:34;6300:62;6297:88;;;6365:18;;:::i;:::-;6297:88;6405:10;6401:2;6394:22;6184:238;6141:281;;:::o;6428:129::-;6462:6;6489:20;;:::i;:::-;6479:30;;6518:33;6546:4;6538:6;6518:33;:::i;:::-;6428:129;;;:::o;6563:311::-;6640:4;6730:18;6722:6;6719:30;6716:56;;;6752:18;;:::i;:::-;6716:56;6802:4;6794:6;6790:17;6782:25;;6862:4;6856;6852:15;6844:23;;6563:311;;;:::o;6880:117::-;6989:1;6986;6979:12;7020:710;7116:5;7141:81;7157:64;7214:6;7157:64;:::i;:::-;7141:81;:::i;:::-;7132:90;;7242:5;7271:6;7264:5;7257:21;7305:4;7298:5;7294:16;7287:23;;7358:4;7350:6;7346:17;7338:6;7334:30;7387:3;7379:6;7376:15;7373:122;;;7406:79;;:::i;:::-;7373:122;7521:6;7504:220;7538:6;7533:3;7530:15;7504:220;;;7613:3;7642:37;7675:3;7663:10;7642:37;:::i;:::-;7637:3;7630:50;7709:4;7704:3;7700:14;7693:21;;7580:144;7564:4;7559:3;7555:14;7548:21;;7504:220;;;7508:21;7122:608;;7020:710;;;;;:::o;7753:370::-;7824:5;7873:3;7866:4;7858:6;7854:17;7850:27;7840:122;;7881:79;;:::i;:::-;7840:122;7998:6;7985:20;8023:94;8113:3;8105:6;8098:4;8090:6;8086:17;8023:94;:::i;:::-;8014:103;;7830:293;7753:370;;;;:::o;8129:117::-;8238:1;8235;8228:12;8252:307;8313:4;8403:18;8395:6;8392:30;8389:56;;;8425:18;;:::i;:::-;8389:56;8463:29;8485:6;8463:29;:::i;:::-;8455:37;;8547:4;8541;8537:15;8529:23;;8252:307;;;:::o;8565:146::-;8662:6;8657:3;8652;8639:30;8703:1;8694:6;8689:3;8685:16;8678:27;8565:146;;;:::o;8717:423::-;8794:5;8819:65;8835:48;8876:6;8835:48;:::i;:::-;8819:65;:::i;:::-;8810:74;;8907:6;8900:5;8893:21;8945:4;8938:5;8934:16;8983:3;8974:6;8969:3;8965:16;8962:25;8959:112;;;8990:79;;:::i;:::-;8959:112;9080:54;9127:6;9122:3;9117;9080:54;:::i;:::-;8800:340;8717:423;;;;;:::o;9159:338::-;9214:5;9263:3;9256:4;9248:6;9244:17;9240:27;9230:122;;9271:79;;:::i;:::-;9230:122;9388:6;9375:20;9413:78;9487:3;9479:6;9472:4;9464:6;9460:17;9413:78;:::i;:::-;9404:87;;9220:277;9159:338;;;;:::o;9503:1509::-;9657:6;9665;9673;9681;9689;9738:3;9726:9;9717:7;9713:23;9709:33;9706:120;;;9745:79;;:::i;:::-;9706:120;9865:1;9890:53;9935:7;9926:6;9915:9;9911:22;9890:53;:::i;:::-;9880:63;;9836:117;9992:2;10018:53;10063:7;10054:6;10043:9;10039:22;10018:53;:::i;:::-;10008:63;;9963:118;10148:2;10137:9;10133:18;10120:32;10179:18;10171:6;10168:30;10165:117;;;10201:79;;:::i;:::-;10165:117;10306:78;10376:7;10367:6;10356:9;10352:22;10306:78;:::i;:::-;10296:88;;10091:303;10461:2;10450:9;10446:18;10433:32;10492:18;10484:6;10481:30;10478:117;;;10514:79;;:::i;:::-;10478:117;10619:78;10689:7;10680:6;10669:9;10665:22;10619:78;:::i;:::-;10609:88;;10404:303;10774:3;10763:9;10759:19;10746:33;10806:18;10798:6;10795:30;10792:117;;;10828:79;;:::i;:::-;10792:117;10933:62;10987:7;10978:6;10967:9;10963:22;10933:62;:::i;:::-;10923:72;;10717:288;9503:1509;;;;;;;;:::o;11018:311::-;11095:4;11185:18;11177:6;11174:30;11171:56;;;11207:18;;:::i;:::-;11171:56;11257:4;11249:6;11245:17;11237:25;;11317:4;11311;11307:15;11299:23;;11018:311;;;:::o;11352:710::-;11448:5;11473:81;11489:64;11546:6;11489:64;:::i;:::-;11473:81;:::i;:::-;11464:90;;11574:5;11603:6;11596:5;11589:21;11637:4;11630:5;11626:16;11619:23;;11690:4;11682:6;11678:17;11670:6;11666:30;11719:3;11711:6;11708:15;11705:122;;;11738:79;;:::i;:::-;11705:122;11853:6;11836:220;11870:6;11865:3;11862:15;11836:220;;;11945:3;11974:37;12007:3;11995:10;11974:37;:::i;:::-;11969:3;11962:50;12041:4;12036:3;12032:14;12025:21;;11912:144;11896:4;11891:3;11887:14;11880:21;;11836:220;;;11840:21;11454:608;;11352:710;;;;;:::o;12085:370::-;12156:5;12205:3;12198:4;12190:6;12186:17;12182:27;12172:122;;12213:79;;:::i;:::-;12172:122;12330:6;12317:20;12355:94;12445:3;12437:6;12430:4;12422:6;12418:17;12355:94;:::i;:::-;12346:103;;12162:293;12085:370;;;;:::o;12461:894::-;12579:6;12587;12636:2;12624:9;12615:7;12611:23;12607:32;12604:119;;;12642:79;;:::i;:::-;12604:119;12790:1;12779:9;12775:17;12762:31;12820:18;12812:6;12809:30;12806:117;;;12842:79;;:::i;:::-;12806:117;12947:78;13017:7;13008:6;12997:9;12993:22;12947:78;:::i;:::-;12937:88;;12733:302;13102:2;13091:9;13087:18;13074:32;13133:18;13125:6;13122:30;13119:117;;;13155:79;;:::i;:::-;13119:117;13260:78;13330:7;13321:6;13310:9;13306:22;13260:78;:::i;:::-;13250:88;;13045:303;12461:894;;;;;:::o;13361:114::-;13428:6;13462:5;13456:12;13446:22;;13361:114;;;:::o;13481:184::-;13580:11;13614:6;13609:3;13602:19;13654:4;13649:3;13645:14;13630:29;;13481:184;;;;:::o;13671:132::-;13738:4;13761:3;13753:11;;13791:4;13786:3;13782:14;13774:22;;13671:132;;;:::o;13809:108::-;13886:24;13904:5;13886:24;:::i;:::-;13881:3;13874:37;13809:108;;:::o;13923:179::-;13992:10;14013:46;14055:3;14047:6;14013:46;:::i;:::-;14091:4;14086:3;14082:14;14068:28;;13923:179;;;;:::o;14108:113::-;14178:4;14210;14205:3;14201:14;14193:22;;14108:113;;;:::o;14257:732::-;14376:3;14405:54;14453:5;14405:54;:::i;:::-;14475:86;14554:6;14549:3;14475:86;:::i;:::-;14468:93;;14585:56;14635:5;14585:56;:::i;:::-;14664:7;14695:1;14680:284;14705:6;14702:1;14699:13;14680:284;;;14781:6;14775:13;14808:63;14867:3;14852:13;14808:63;:::i;:::-;14801:70;;14894:60;14947:6;14894:60;:::i;:::-;14884:70;;14740:224;14727:1;14724;14720:9;14715:14;;14680:284;;;14684:14;14980:3;14973:10;;14381:608;;;14257:732;;;;:::o;14995:373::-;15138:4;15176:2;15165:9;15161:18;15153:26;;15225:9;15219:4;15215:20;15211:1;15200:9;15196:17;15189:47;15253:108;15356:4;15347:6;15253:108;:::i;:::-;15245:116;;14995:373;;;;:::o;15374:308::-;15436:4;15526:18;15518:6;15515:30;15512:56;;;15548:18;;:::i;:::-;15512:56;15586:29;15608:6;15586:29;:::i;:::-;15578:37;;15670:4;15664;15660:15;15652:23;;15374:308;;;:::o;15688:425::-;15766:5;15791:66;15807:49;15849:6;15807:49;:::i;:::-;15791:66;:::i;:::-;15782:75;;15880:6;15873:5;15866:21;15918:4;15911:5;15907:16;15956:3;15947:6;15942:3;15938:16;15935:25;15932:112;;;15963:79;;:::i;:::-;15932:112;16053:54;16100:6;16095:3;16090;16053:54;:::i;:::-;15772:341;15688:425;;;;;:::o;16133:340::-;16189:5;16238:3;16231:4;16223:6;16219:17;16215:27;16205:122;;16246:79;;:::i;:::-;16205:122;16363:6;16350:20;16388:79;16463:3;16455:6;16448:4;16440:6;16436:17;16388:79;:::i;:::-;16379:88;;16195:278;16133:340;;;;:::o;16479:509::-;16548:6;16597:2;16585:9;16576:7;16572:23;16568:32;16565:119;;;16603:79;;:::i;:::-;16565:119;16751:1;16740:9;16736:17;16723:31;16781:18;16773:6;16770:30;16767:117;;;16803:79;;:::i;:::-;16767:117;16908:63;16963:7;16954:6;16943:9;16939:22;16908:63;:::i;:::-;16898:73;;16694:287;16479:509;;;;:::o;16994:619::-;17071:6;17079;17087;17136:2;17124:9;17115:7;17111:23;17107:32;17104:119;;;17142:79;;:::i;:::-;17104:119;17262:1;17287:53;17332:7;17323:6;17312:9;17308:22;17287:53;:::i;:::-;17277:63;;17233:117;17389:2;17415:53;17460:7;17451:6;17440:9;17436:22;17415:53;:::i;:::-;17405:63;;17360:118;17517:2;17543:53;17588:7;17579:6;17568:9;17564:22;17543:53;:::i;:::-;17533:63;;17488:118;16994:619;;;;;:::o;17619:329::-;17678:6;17727:2;17715:9;17706:7;17702:23;17698:32;17695:119;;;17733:79;;:::i;:::-;17695:119;17853:1;17878:53;17923:7;17914:6;17903:9;17899:22;17878:53;:::i;:::-;17868:63;;17824:117;17619:329;;;;:::o;17954:222::-;18047:4;18085:2;18074:9;18070:18;18062:26;;18098:71;18166:1;18155:9;18151:17;18142:6;18098:71;:::i;:::-;17954:222;;;;:::o;18182:116::-;18252:21;18267:5;18252:21;:::i;:::-;18245:5;18242:32;18232:60;;18288:1;18285;18278:12;18232:60;18182:116;:::o;18304:133::-;18347:5;18385:6;18372:20;18363:29;;18401:30;18425:5;18401:30;:::i;:::-;18304:133;;;;:::o;18443:468::-;18508:6;18516;18565:2;18553:9;18544:7;18540:23;18536:32;18533:119;;;18571:79;;:::i;:::-;18533:119;18691:1;18716:53;18761:7;18752:6;18741:9;18737:22;18716:53;:::i;:::-;18706:63;;18662:117;18818:2;18844:50;18886:7;18877:6;18866:9;18862:22;18844:50;:::i;:::-;18834:60;;18789:115;18443:468;;;;;:::o;18917:474::-;18985:6;18993;19042:2;19030:9;19021:7;19017:23;19013:32;19010:119;;;19048:79;;:::i;:::-;19010:119;19168:1;19193:53;19238:7;19229:6;19218:9;19214:22;19193:53;:::i;:::-;19183:63;;19139:117;19295:2;19321:53;19366:7;19357:6;19346:9;19342:22;19321:53;:::i;:::-;19311:63;;19266:118;18917:474;;;;;:::o;19397:1089::-;19501:6;19509;19517;19525;19533;19582:3;19570:9;19561:7;19557:23;19553:33;19550:120;;;19589:79;;:::i;:::-;19550:120;19709:1;19734:53;19779:7;19770:6;19759:9;19755:22;19734:53;:::i;:::-;19724:63;;19680:117;19836:2;19862:53;19907:7;19898:6;19887:9;19883:22;19862:53;:::i;:::-;19852:63;;19807:118;19964:2;19990:53;20035:7;20026:6;20015:9;20011:22;19990:53;:::i;:::-;19980:63;;19935:118;20092:2;20118:53;20163:7;20154:6;20143:9;20139:22;20118:53;:::i;:::-;20108:63;;20063:118;20248:3;20237:9;20233:19;20220:33;20280:18;20272:6;20269:30;20266:117;;;20302:79;;:::i;:::-;20266:117;20407:62;20461:7;20452:6;20441:9;20437:22;20407:62;:::i;:::-;20397:72;;20191:288;19397:1089;;;;;;;;:::o;20492:229::-;20632:34;20628:1;20620:6;20616:14;20609:58;20701:12;20696:2;20688:6;20684:15;20677:37;20492:229;:::o;20727:366::-;20869:3;20890:67;20954:2;20949:3;20890:67;:::i;:::-;20883:74;;20966:93;21055:3;20966:93;:::i;:::-;21084:2;21079:3;21075:12;21068:19;;20727:366;;;:::o;21099:419::-;21265:4;21303:2;21292:9;21288:18;21280:26;;21352:9;21346:4;21342:20;21338:1;21327:9;21323:17;21316:47;21380:131;21506:4;21380:131;:::i;:::-;21372:139;;21099:419;;;:::o;21524:180::-;21572:77;21569:1;21562:88;21669:4;21666:1;21659:15;21693:4;21690:1;21683:15;21710:320;21754:6;21791:1;21785:4;21781:12;21771:22;;21838:1;21832:4;21828:12;21859:18;21849:81;;21915:4;21907:6;21903:17;21893:27;;21849:81;21977:2;21969:6;21966:14;21946:18;21943:38;21940:84;;21996:18;;:::i;:::-;21940:84;21761:269;21710:320;;;:::o;22036:148::-;22138:11;22175:3;22160:18;;22036:148;;;;:::o;22190:141::-;22239:4;22262:3;22254:11;;22285:3;22282:1;22275:14;22319:4;22316:1;22306:18;22298:26;;22190:141;;;:::o;22361:874::-;22464:3;22501:5;22495:12;22530:36;22556:9;22530:36;:::i;:::-;22582:89;22664:6;22659:3;22582:89;:::i;:::-;22575:96;;22702:1;22691:9;22687:17;22718:1;22713:166;;;;22893:1;22888:341;;;;22680:549;;22713:166;22797:4;22793:9;22782;22778:25;22773:3;22766:38;22859:6;22852:14;22845:22;22837:6;22833:35;22828:3;22824:45;22817:52;;22713:166;;22888:341;22955:38;22987:5;22955:38;:::i;:::-;23015:1;23029:154;23043:6;23040:1;23037:13;23029:154;;;23117:7;23111:14;23107:1;23102:3;23098:11;23091:35;23167:1;23158:7;23154:15;23143:26;;23065:4;23062:1;23058:12;23053:17;;23029:154;;;23212:6;23207:3;23203:16;23196:23;;22895:334;;22680:549;;22468:767;;22361:874;;;;:::o;23241:390::-;23347:3;23375:39;23408:5;23375:39;:::i;:::-;23430:89;23512:6;23507:3;23430:89;:::i;:::-;23423:96;;23528:65;23586:6;23581:3;23574:4;23567:5;23563:16;23528:65;:::i;:::-;23618:6;23613:3;23609:16;23602:23;;23351:280;23241:390;;;;:::o;23637:155::-;23777:7;23773:1;23765:6;23761:14;23754:31;23637:155;:::o;23798:400::-;23958:3;23979:84;24061:1;24056:3;23979:84;:::i;:::-;23972:91;;24072:93;24161:3;24072:93;:::i;:::-;24190:1;24185:3;24181:11;24174:18;;23798:400;;;:::o;24204:695::-;24482:3;24504:92;24592:3;24583:6;24504:92;:::i;:::-;24497:99;;24613:95;24704:3;24695:6;24613:95;:::i;:::-;24606:102;;24725:148;24869:3;24725:148;:::i;:::-;24718:155;;24890:3;24883:10;;24204:695;;;;;:::o;24905:180::-;24953:77;24950:1;24943:88;25050:4;25047:1;25040:15;25074:4;25071:1;25064:15;25091:194;25131:4;25151:20;25169:1;25151:20;:::i;:::-;25146:25;;25185:20;25203:1;25185:20;:::i;:::-;25180:25;;25229:1;25226;25222:9;25214:17;;25253:1;25247:4;25244:11;25241:37;;;25258:18;;:::i;:::-;25241:37;25091:194;;;;:::o;25291:180::-;25339:77;25336:1;25329:88;25436:4;25433:1;25426:15;25460:4;25457:1;25450:15;25477:185;25517:1;25534:20;25552:1;25534:20;:::i;:::-;25529:25;;25568:20;25586:1;25568:20;:::i;:::-;25563:25;;25607:1;25597:35;;25612:18;;:::i;:::-;25597:35;25654:1;25651;25647:9;25642:14;;25477:185;;;;:::o;25668:176::-;25700:1;25717:20;25735:1;25717:20;:::i;:::-;25712:25;;25751:20;25769:1;25751:20;:::i;:::-;25746:25;;25790:1;25780:35;;25795:18;;:::i;:::-;25780:35;25836:1;25833;25829:9;25824:14;;25668:176;;;;:::o;25850:191::-;25890:3;25909:20;25927:1;25909:20;:::i;:::-;25904:25;;25943:20;25961:1;25943:20;:::i;:::-;25938:25;;25986:1;25983;25979:9;25972:16;;26007:3;26004:1;26001:10;25998:36;;;26014:18;;:::i;:::-;25998:36;25850:191;;;;:::o;26047:234::-;26187:34;26183:1;26175:6;26171:14;26164:58;26256:17;26251:2;26243:6;26239:15;26232:42;26047:234;:::o;26287:366::-;26429:3;26450:67;26514:2;26509:3;26450:67;:::i;:::-;26443:74;;26526:93;26615:3;26526:93;:::i;:::-;26644:2;26639:3;26635:12;26628:19;;26287:366;;;:::o;26659:419::-;26825:4;26863:2;26852:9;26848:18;26840:26;;26912:9;26906:4;26902:20;26898:1;26887:9;26883:17;26876:47;26940:131;27066:4;26940:131;:::i;:::-;26932:139;;26659:419;;;:::o;27084:228::-;27224:34;27220:1;27212:6;27208:14;27201:58;27293:11;27288:2;27280:6;27276:15;27269:36;27084:228;:::o;27318:366::-;27460:3;27481:67;27545:2;27540:3;27481:67;:::i;:::-;27474:74;;27557:93;27646:3;27557:93;:::i;:::-;27675:2;27670:3;27666:12;27659:19;;27318:366;;;:::o;27690:419::-;27856:4;27894:2;27883:9;27879:18;27871:26;;27943:9;27937:4;27933:20;27929:1;27918:9;27914:17;27907:47;27971:131;28097:4;27971:131;:::i;:::-;27963:139;;27690:419;;;:::o;28115:180::-;28163:77;28160:1;28153:88;28260:4;28257:1;28250:15;28284:4;28281:1;28274:15;28301:233;28340:3;28363:24;28381:5;28363:24;:::i;:::-;28354:33;;28409:66;28402:5;28399:77;28396:103;;28479:18;;:::i;:::-;28396:103;28526:1;28519:5;28515:13;28508:20;;28301:233;;;:::o;28540:93::-;28577:6;28624:2;28619;28612:5;28608:14;28604:23;28594:33;;28540:93;;;:::o;28639:107::-;28683:8;28733:5;28727:4;28723:16;28702:37;;28639:107;;;;:::o;28752:393::-;28821:6;28871:1;28859:10;28855:18;28894:97;28924:66;28913:9;28894:97;:::i;:::-;29012:39;29042:8;29031:9;29012:39;:::i;:::-;29000:51;;29084:4;29080:9;29073:5;29069:21;29060:30;;29133:4;29123:8;29119:19;29112:5;29109:30;29099:40;;28828:317;;28752:393;;;;;:::o;29151:60::-;29179:3;29200:5;29193:12;;29151:60;;;:::o;29217:142::-;29267:9;29300:53;29318:34;29327:24;29345:5;29327:24;:::i;:::-;29318:34;:::i;:::-;29300:53;:::i;:::-;29287:66;;29217:142;;;:::o;29365:75::-;29408:3;29429:5;29422:12;;29365:75;;;:::o;29446:269::-;29556:39;29587:7;29556:39;:::i;:::-;29617:91;29666:41;29690:16;29666:41;:::i;:::-;29658:6;29651:4;29645:11;29617:91;:::i;:::-;29611:4;29604:105;29522:193;29446:269;;;:::o;29721:73::-;29766:3;29721:73;:::o;29800:189::-;29877:32;;:::i;:::-;29918:65;29976:6;29968;29962:4;29918:65;:::i;:::-;29853:136;29800:189;;:::o;29995:186::-;30055:120;30072:3;30065:5;30062:14;30055:120;;;30126:39;30163:1;30156:5;30126:39;:::i;:::-;30099:1;30092:5;30088:13;30079:22;;30055:120;;;29995:186;;:::o;30187:543::-;30288:2;30283:3;30280:11;30277:446;;;30322:38;30354:5;30322:38;:::i;:::-;30406:29;30424:10;30406:29;:::i;:::-;30396:8;30392:44;30589:2;30577:10;30574:18;30571:49;;;30610:8;30595:23;;30571:49;30633:80;30689:22;30707:3;30689:22;:::i;:::-;30679:8;30675:37;30662:11;30633:80;:::i;:::-;30292:431;;30277:446;30187:543;;;:::o;30736:117::-;30790:8;30840:5;30834:4;30830:16;30809:37;;30736:117;;;;:::o;30859:169::-;30903:6;30936:51;30984:1;30980:6;30972:5;30969:1;30965:13;30936:51;:::i;:::-;30932:56;31017:4;31011;31007:15;30997:25;;30910:118;30859:169;;;;:::o;31033:295::-;31109:4;31255:29;31280:3;31274:4;31255:29;:::i;:::-;31247:37;;31317:3;31314:1;31310:11;31304:4;31301:21;31293:29;;31033:295;;;;:::o;31333:1395::-;31450:37;31483:3;31450:37;:::i;:::-;31552:18;31544:6;31541:30;31538:56;;;31574:18;;:::i;:::-;31538:56;31618:38;31650:4;31644:11;31618:38;:::i;:::-;31703:67;31763:6;31755;31749:4;31703:67;:::i;:::-;31797:1;31821:4;31808:17;;31853:2;31845:6;31842:14;31870:1;31865:618;;;;32527:1;32544:6;32541:77;;;32593:9;32588:3;32584:19;32578:26;32569:35;;32541:77;32644:67;32704:6;32697:5;32644:67;:::i;:::-;32638:4;32631:81;32500:222;31835:887;;31865:618;31917:4;31913:9;31905:6;31901:22;31951:37;31983:4;31951:37;:::i;:::-;32010:1;32024:208;32038:7;32035:1;32032:14;32024:208;;;32117:9;32112:3;32108:19;32102:26;32094:6;32087:42;32168:1;32160:6;32156:14;32146:24;;32215:2;32204:9;32200:18;32187:31;;32061:4;32058:1;32054:12;32049:17;;32024:208;;;32260:6;32251:7;32248:19;32245:179;;;32318:9;32313:3;32309:19;32303:26;32361:48;32403:4;32395:6;32391:17;32380:9;32361:48;:::i;:::-;32353:6;32346:64;32268:156;32245:179;32470:1;32466;32458:6;32454:14;32450:22;32444:4;32437:36;31872:611;;;31835:887;;31425:1303;;;31333:1395;;:::o;32734:137::-;32788:5;32819:6;32813:13;32804:22;;32835:30;32859:5;32835:30;:::i;:::-;32734:137;;;;:::o;32877:345::-;32944:6;32993:2;32981:9;32972:7;32968:23;32964:32;32961:119;;;32999:79;;:::i;:::-;32961:119;33119:1;33144:61;33197:7;33188:6;33177:9;33173:22;33144:61;:::i;:::-;33134:71;;33090:125;32877:345;;;;:::o;33228:147::-;33329:11;33366:3;33351:18;;33228:147;;;;:::o;33381:114::-;;:::o;33501:398::-;33660:3;33681:83;33762:1;33757:3;33681:83;:::i;:::-;33674:90;;33773:93;33862:3;33773:93;:::i;:::-;33891:1;33886:3;33882:11;33875:18;;33501:398;;;:::o;33905:379::-;34089:3;34111:147;34254:3;34111:147;:::i;:::-;34104:154;;34275:3;34268:10;;33905:379;;;:::o;34290:169::-;34430:21;34426:1;34418:6;34414:14;34407:45;34290:169;:::o;34465:366::-;34607:3;34628:67;34692:2;34687:3;34628:67;:::i;:::-;34621:74;;34704:93;34793:3;34704:93;:::i;:::-;34822:2;34817:3;34813:12;34806:19;;34465:366;;;:::o;34837:419::-;35003:4;35041:2;35030:9;35026:18;35018:26;;35090:9;35084:4;35080:20;35076:1;35065:9;35061:17;35054:47;35118:131;35244:4;35118:131;:::i;:::-;35110:139;;34837:419;;;:::o;35262:225::-;35402:34;35398:1;35390:6;35386:14;35379:58;35471:8;35466:2;35458:6;35454:15;35447:33;35262:225;:::o;35493:366::-;35635:3;35656:67;35720:2;35715:3;35656:67;:::i;:::-;35649:74;;35732:93;35821:3;35732:93;:::i;:::-;35850:2;35845:3;35841:12;35834:19;;35493:366;;;:::o;35865:419::-;36031:4;36069:2;36058:9;36054:18;36046:26;;36118:9;36112:4;36108:20;36104:1;36093:9;36089:17;36082:47;36146:131;36272:4;36146:131;:::i;:::-;36138:139;;35865:419;;;:::o;36290:227::-;36430:34;36426:1;36418:6;36414:14;36407:58;36499:10;36494:2;36486:6;36482:15;36475:35;36290:227;:::o;36523:366::-;36665:3;36686:67;36750:2;36745:3;36686:67;:::i;:::-;36679:74;;36762:93;36851:3;36762:93;:::i;:::-;36880:2;36875:3;36871:12;36864:19;;36523:366;;;:::o;36895:419::-;37061:4;37099:2;37088:9;37084:18;37076:26;;37148:9;37142:4;37138:20;37134:1;37123:9;37119:17;37112:47;37176:131;37302:4;37176:131;:::i;:::-;37168:139;;36895:419;;;:::o;37320:224::-;37460:34;37456:1;37448:6;37444:14;37437:58;37529:7;37524:2;37516:6;37512:15;37505:32;37320:224;:::o;37550:366::-;37692:3;37713:67;37777:2;37772:3;37713:67;:::i;:::-;37706:74;;37789:93;37878:3;37789:93;:::i;:::-;37907:2;37902:3;37898:12;37891:19;;37550:366;;;:::o;37922:419::-;38088:4;38126:2;38115:9;38111:18;38103:26;;38175:9;38169:4;38165:20;38161:1;38150:9;38146:17;38139:47;38203:131;38329:4;38203:131;:::i;:::-;38195:139;;37922:419;;;:::o;38347:229::-;38487:34;38483:1;38475:6;38471:14;38464:58;38556:12;38551:2;38543:6;38539:15;38532:37;38347:229;:::o;38582:366::-;38724:3;38745:67;38809:2;38804:3;38745:67;:::i;:::-;38738:74;;38821:93;38910:3;38821:93;:::i;:::-;38939:2;38934:3;38930:12;38923:19;;38582:366;;;:::o;38954:419::-;39120:4;39158:2;39147:9;39143:18;39135:26;;39207:9;39201:4;39197:20;39193:1;39182:9;39178:17;39171:47;39235:131;39361:4;39235:131;:::i;:::-;39227:139;;38954:419;;;:::o;39379:634::-;39600:4;39638:2;39627:9;39623:18;39615:26;;39687:9;39681:4;39677:20;39673:1;39662:9;39658:17;39651:47;39715:108;39818:4;39809:6;39715:108;:::i;:::-;39707:116;;39870:9;39864:4;39860:20;39855:2;39844:9;39840:18;39833:48;39898:108;40001:4;39992:6;39898:108;:::i;:::-;39890:116;;39379:634;;;;;:::o;40019:182::-;40159:34;40155:1;40147:6;40143:14;40136:58;40019:182;:::o;40207:366::-;40349:3;40370:67;40434:2;40429:3;40370:67;:::i;:::-;40363:74;;40446:93;40535:3;40446:93;:::i;:::-;40564:2;40559:3;40555:12;40548:19;;40207:366;;;:::o;40579:419::-;40745:4;40783:2;40772:9;40768:18;40760:26;;40832:9;40826:4;40822:20;40818:1;40807:9;40803:17;40796:47;40860:131;40986:4;40860:131;:::i;:::-;40852:139;;40579:419;;;:::o;41004:220::-;41144:34;41140:1;41132:6;41128:14;41121:58;41213:3;41208:2;41200:6;41196:15;41189:28;41004:220;:::o;41230:366::-;41372:3;41393:67;41457:2;41452:3;41393:67;:::i;:::-;41386:74;;41469:93;41558:3;41469:93;:::i;:::-;41587:2;41582:3;41578:12;41571:19;;41230:366;;;:::o;41602:419::-;41768:4;41806:2;41795:9;41791:18;41783:26;;41855:9;41849:4;41845:20;41841:1;41830:9;41826:17;41819:47;41883:131;42009:4;41883:131;:::i;:::-;41875:139;;41602:419;;;:::o;42027:332::-;42148:4;42186:2;42175:9;42171:18;42163:26;;42199:71;42267:1;42256:9;42252:17;42243:6;42199:71;:::i;:::-;42280:72;42348:2;42337:9;42333:18;42324:6;42280:72;:::i;:::-;42027:332;;;;;:::o;42365:228::-;42505:34;42501:1;42493:6;42489:14;42482:58;42574:11;42569:2;42561:6;42557:15;42550:36;42365:228;:::o;42599:366::-;42741:3;42762:67;42826:2;42821:3;42762:67;:::i;:::-;42755:74;;42838:93;42927:3;42838:93;:::i;:::-;42956:2;42951:3;42947:12;42940:19;;42599:366;;;:::o;42971:419::-;43137:4;43175:2;43164:9;43160:18;43152:26;;43224:9;43218:4;43214:20;43210:1;43199:9;43195:17;43188:47;43252:131;43378:4;43252:131;:::i;:::-;43244:139;;42971:419;;;:::o;43396:227::-;43536:34;43532:1;43524:6;43520:14;43513:58;43605:10;43600:2;43592:6;43588:15;43581:35;43396:227;:::o;43629:366::-;43771:3;43792:67;43856:2;43851:3;43792:67;:::i;:::-;43785:74;;43868:93;43957:3;43868:93;:::i;:::-;43986:2;43981:3;43977:12;43970:19;;43629:366;;;:::o;44001:419::-;44167:4;44205:2;44194:9;44190:18;44182:26;;44254:9;44248:4;44244:20;44240:1;44229:9;44225:17;44218:47;44282:131;44408:4;44282:131;:::i;:::-;44274:139;;44001:419;;;:::o;44426:98::-;44477:6;44511:5;44505:12;44495:22;;44426:98;;;:::o;44530:168::-;44613:11;44647:6;44642:3;44635:19;44687:4;44682:3;44678:14;44663:29;;44530:168;;;;:::o;44704:373::-;44790:3;44818:38;44850:5;44818:38;:::i;:::-;44872:70;44935:6;44930:3;44872:70;:::i;:::-;44865:77;;44951:65;45009:6;45004:3;44997:4;44990:5;44986:16;44951:65;:::i;:::-;45041:29;45063:6;45041:29;:::i;:::-;45036:3;45032:39;45025:46;;44794:283;44704:373;;;;:::o;45083:1053::-;45406:4;45444:3;45433:9;45429:19;45421:27;;45458:71;45526:1;45515:9;45511:17;45502:6;45458:71;:::i;:::-;45539:72;45607:2;45596:9;45592:18;45583:6;45539:72;:::i;:::-;45658:9;45652:4;45648:20;45643:2;45632:9;45628:18;45621:48;45686:108;45789:4;45780:6;45686:108;:::i;:::-;45678:116;;45841:9;45835:4;45831:20;45826:2;45815:9;45811:18;45804:48;45869:108;45972:4;45963:6;45869:108;:::i;:::-;45861:116;;46025:9;46019:4;46015:20;46009:3;45998:9;45994:19;45987:49;46053:76;46124:4;46115:6;46053:76;:::i;:::-;46045:84;;45083:1053;;;;;;;;:::o;46142:141::-;46198:5;46229:6;46223:13;46214:22;;46245:32;46271:5;46245:32;:::i;:::-;46142:141;;;;:::o;46289:349::-;46358:6;46407:2;46395:9;46386:7;46382:23;46378:32;46375:119;;;46413:79;;:::i;:::-;46375:119;46533:1;46558:63;46613:7;46604:6;46593:9;46589:22;46558:63;:::i;:::-;46548:73;;46504:127;46289:349;;;;:::o;46644:106::-;46688:8;46737:5;46732:3;46728:15;46707:36;;46644:106;;;:::o;46756:183::-;46791:3;46829:1;46811:16;46808:23;46805:128;;;46867:1;46864;46861;46846:23;46889:34;46920:1;46914:8;46889:34;:::i;:::-;46882:41;;46805:128;46756:183;:::o;46945:711::-;46984:3;47022:4;47004:16;47001:26;47030:5;46998:39;47059:20;;:::i;:::-;47134:1;47116:16;47112:24;47109:1;47103:4;47088:49;47167:4;47161:11;47266:16;47259:4;47251:6;47247:17;47244:39;47211:18;47203:6;47200:30;47184:113;47181:146;;;47312:5;;;;47181:146;47358:6;47352:4;47348:17;47394:3;47388:10;47421:18;47413:6;47410:30;47407:43;;;47443:5;;;;;;47407:43;47491:6;47484:4;47479:3;47475:14;47471:27;47550:1;47532:16;47528:24;47522:4;47518:35;47513:3;47510:44;47507:57;;;47557:5;;;;;;;47507:57;47574;47622:6;47616:4;47612:17;47604:6;47600:30;47594:4;47574:57;:::i;:::-;47647:3;47640:10;;46988:668;;;;;46945:711;;:::o;47662:239::-;47802:34;47798:1;47790:6;47786:14;47779:58;47871:22;47866:2;47858:6;47854:15;47847:47;47662:239;:::o;47907:366::-;48049:3;48070:67;48134:2;48129:3;48070:67;:::i;:::-;48063:74;;48146:93;48235:3;48146:93;:::i;:::-;48264:2;48259:3;48255:12;48248:19;;47907:366;;;:::o;48279:419::-;48445:4;48483:2;48472:9;48468:18;48460:26;;48532:9;48526:4;48522:20;48518:1;48507:9;48503:17;48496:47;48560:131;48686:4;48560:131;:::i;:::-;48552:139;;48279:419;;;:::o;48704:227::-;48844:34;48840:1;48832:6;48828:14;48821:58;48913:10;48908:2;48900:6;48896:15;48889:35;48704:227;:::o;48937:366::-;49079:3;49100:67;49164:2;49159:3;49100:67;:::i;:::-;49093:74;;49176:93;49265:3;49176:93;:::i;:::-;49294:2;49289:3;49285:12;49278:19;;48937:366;;;:::o;49309:419::-;49475:4;49513:2;49502:9;49498:18;49490:26;;49562:9;49556:4;49552:20;49548:1;49537:9;49533:17;49526:47;49590:131;49716:4;49590:131;:::i;:::-;49582:139;;49309:419;;;:::o;49734:751::-;49957:4;49995:3;49984:9;49980:19;49972:27;;50009:71;50077:1;50066:9;50062:17;50053:6;50009:71;:::i;:::-;50090:72;50158:2;50147:9;50143:18;50134:6;50090:72;:::i;:::-;50172;50240:2;50229:9;50225:18;50216:6;50172:72;:::i;:::-;50254;50322:2;50311:9;50307:18;50298:6;50254:72;:::i;:::-;50374:9;50368:4;50364:20;50358:3;50347:9;50343:19;50336:49;50402:76;50473:4;50464:6;50402:76;:::i;:::-;50394:84;;49734:751;;;;;;;;:::o
Swarm Source
ipfs://819666ad2c479ab2c42372262e6116e2f8b37933dfa5c33dd6f4d92b8ce71640