@docsearch/react 4.0.0-beta.2 → 4.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/icons/MetaKeysIcon.tsx","../../src/icons/SearchIcon.tsx","../../src/useTheme.tsx","../../src/DocSearchButton.tsx","../../../../node_modules/@ai-sdk/provider/dist/index.mjs","../../../../node_modules/secure-json-parse/index.js","../../../../node_modules/@ai-sdk/provider-utils/dist/index.mjs","../../../../node_modules/nanoid/non-secure/index.js","../../../../node_modules/zod-to-json-schema/dist/esm/parsers/string.js","../../../../node_modules/@ai-sdk/ui-utils/dist/index.mjs","../../../../node_modules/use-sync-external-store/shim/index.js","../../../../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../../../../node_modules/dequal/lite/index.mjs","../../../../node_modules/swr/dist/_internal/config-context-client-v7VOFo66.mjs","../../../../node_modules/swr/dist/_internal/events.mjs","../../../../node_modules/swr/dist/_internal/index.mjs","../../../../node_modules/swr/dist/_internal/constants.mjs","../../../../node_modules/swr/dist/index/index.mjs","../../../../node_modules/@ai-sdk/react/node_modules/throttleit/index.js","../../../../node_modules/@ai-sdk/react/dist/index.mjs","../../../../node_modules/@algolia/autocomplete-shared/dist/esm/debounce.js","../../../../node_modules/@algolia/autocomplete-shared/dist/esm/flatten.js","../../../../node_modules/@algolia/autocomplete-shared/dist/esm/generateAutocompleteId.js","../../../../node_modules/@algolia/autocomplete-shared/dist/esm/getItemsCount.js","../../../../node_modules/@algolia/autocomplete-shared/dist/esm/isEqual.js","../../../../node_modules/@algolia/autocomplete-shared/dist/esm/noop.js","../../../../node_modules/@algolia/autocomplete-shared/dist/esm/version.js","../../../../node_modules/@algolia/autocomplete-shared/dist/esm/userAgents.js","../../../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/createClickedEvent.js","../../../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/isModernInsightsClient.js","../../../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/createSearchInsightsApi.js","../../../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/createViewedEvents.js","../../../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/isAlgoliaInsightsHit.js","../../../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/createAlgoliaInsightsPlugin.js","../../../../node_modules/@algolia/autocomplete-shared/dist/esm/safelyRunOnBrowser.js","../../../../node_modules/@algolia/autocomplete-shared/dist/esm/createRef.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/createCancelablePromise.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/createCancelablePromiseList.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getNextActiveItemId.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getNormalizedSources.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getPluginSubmitPromise.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getActiveItem.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getAutocompleteElementId.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/isSamsung.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getNativeEvent.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/createStore.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/getAutocompleteSetters.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/getDefaultProps.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/reshape.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/resolve.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/mapToAlgoliaResponse.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/onInput.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/createConcurrentSafePromise.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/onKeyDown.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/getPropGetters.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/isOrContainsNode.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/metadata.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/getCompletion.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/stateReducer.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/createAutocomplete.js","../../src/constants.ts","../../src/askai.ts","../../src/AlgoliaLogo.tsx","../../src/Footer.tsx","../../src/Hit.tsx","../../src/icons/LoadingIcon.tsx","../../src/icons/SparklesIcon.tsx","../../src/icons/RecentIcon.tsx","../../src/icons/CloseIcon.tsx","../../src/icons/AlertIcon.tsx","../../src/icons/SelectIcon.tsx","../../src/icons/SourceIcon.tsx","../../src/icons/StarIcon.tsx","../../src/icons/ErrorIcon.tsx","../../src/icons/NoResultsIcon.tsx","../../src/AggregatedSearchBlock.tsx","../../../../node_modules/marked/lib/marked.esm.js","../../src/MemoizedMarkdown.tsx","../../src/AskAiScreen.tsx","../../src/utils/ai.ts","../../src/utils/groupConsecutiveToolResults.ts","../../src/ErrorScreen.tsx","../../src/NoResultsScreen.tsx","../../src/Snippet.tsx","../../src/Results.tsx","../../src/utils/groupBy.ts","../../src/utils/identity.ts","../../src/utils/isModifierEvent.ts","../../src/utils/noop.ts","../../src/utils/removeHighlightTags.ts","../../src/ResultsScreen.tsx","../../src/StartScreen.tsx","../../src/ScreenState.tsx","../../src/icons/BackIcon.tsx","../../src/SearchBox.tsx","../../src/utils/storage.ts","../../src/stored-searches.ts","../../../../node_modules/@algolia/client-common/dist/common.js","../../src/version.ts","../../src/useSearchClient.ts","../../../../node_modules/algoliasearch/dist/lite/builds/browser.js","../../../../node_modules/@algolia/requester-browser-xhr/dist/requester.xhr.js","../../src/DocSearchModal.tsx","../../src/useTrapFocus.ts","../../src/useTouchEvents.ts","../../src/utils/scrollTo.ts","../../src/useDocSearchKeyboardEvents.ts","../../src/DocSearch.tsx"],"sourcesContent":["import React, { type JSX } from 'react';\n\nexport function MetaKeyIcon(): JSX.Element {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M8.19531 8.76758H7.33398C7.02539 8.76758 6.74414 8.69531 6.49023 8.55078C6.23633 8.40234 6.0332 8.20312 5.88086 7.95312C5.73242 7.70312 5.6582 7.42188 5.6582 7.10938C5.6582 6.80078 5.73242 6.51953 5.88086 6.26562C6.0332 6.01172 6.23633 5.80859 6.49023 5.65625C6.74414 5.50391 7.02539 5.42773 7.33398 5.42773C7.64258 5.42773 7.92383 5.50391 8.17773 5.65625C8.43164 5.80859 8.63281 6.01172 8.78125 6.26562C8.93359 6.51953 9.00977 6.80078 9.00977 7.10938V7.96484H10.9902V7.10938C10.9902 6.80078 11.0664 6.51953 11.2188 6.26562C11.3711 6.01172 11.5723 5.80859 11.8223 5.65625C12.0762 5.50391 12.3574 5.42773 12.666 5.42773C12.9746 5.42773 13.2559 5.50391 13.5098 5.65625C13.7637 5.80859 13.9648 6.01172 14.1133 6.26562C14.2656 6.51953 14.3418 6.80078 14.3418 7.10938C14.3418 7.42188 14.2656 7.70312 14.1133 7.95312C13.9648 8.20312 13.7637 8.40234 13.5098 8.55078C13.2559 8.69531 12.9746 8.76758 12.666 8.76758H11.8105V10.7773H12.666C12.9746 10.7773 13.2559 10.8516 13.5098 11C13.7637 11.1445 13.9648 11.3418 14.1133 11.5918C14.2656 11.8418 14.3418 12.123 14.3418 12.4355C14.3418 12.7441 14.2656 13.0254 14.1133 13.2793C13.9648 13.5332 13.7637 13.7363 13.5098 13.8887C13.2559 14.041 12.9746 14.1172 12.666 14.1172C12.3574 14.1172 12.0762 14.041 11.8223 13.8887C11.5723 13.7363 11.3711 13.5332 11.2188 13.2793C11.0664 13.0254 10.9902 12.7441 10.9902 12.4355V11.5801H9.00977V12.4355C9.00977 12.7441 8.93359 13.0254 8.78125 13.2793C8.63281 13.5332 8.43164 13.7363 8.17773 13.8887C7.92383 14.041 7.64258 14.1172 7.33398 14.1172C7.02539 14.1172 6.74414 14.041 6.49023 13.8887C6.23633 13.7363 6.0332 13.5332 5.88086 13.2793C5.73242 13.0254 5.6582 12.7441 5.6582 12.4355C5.6582 12.123 5.73242 11.8418 5.88086 11.5918C6.0332 11.3418 6.23633 11.1445 6.49023 11C6.74414 10.8516 7.02539 10.7773 7.33398 10.7773H8.19531V8.76758ZM7.33398 7.97656H8.19531V7.10938C8.19531 6.875 8.10938 6.67383 7.9375 6.50586C7.76953 6.33398 7.56836 6.24805 7.33398 6.24805C7.09961 6.24805 6.89648 6.33398 6.72461 6.50586C6.55664 6.67383 6.47266 6.875 6.47266 7.10938C6.47266 7.34766 6.55664 7.55273 6.72461 7.72461C6.89648 7.89258 7.09961 7.97656 7.33398 7.97656ZM12.666 7.97656C12.9004 7.97656 13.1016 7.89258 13.2695 7.72461C13.4414 7.55273 13.5273 7.34766 13.5273 7.10938C13.5273 6.875 13.4414 6.67383 13.2695 6.50586C13.1016 6.33398 12.9004 6.24805 12.666 6.24805C12.4316 6.24805 12.2305 6.33398 12.0625 6.50586C11.8945 6.67383 11.8105 6.875 11.8105 7.10938V7.97656H12.666ZM9.00977 10.7773H10.9902V8.76758H9.00977V10.7773ZM7.33398 11.5625C7.09961 11.5625 6.89648 11.6484 6.72461 11.8203C6.55664 11.9883 6.47266 12.1914 6.47266 12.4297C6.47266 12.6641 6.55664 12.8672 6.72461 13.0391C6.89648 13.207 7.09961 13.291 7.33398 13.291C7.56836 13.291 7.76953 13.207 7.9375 13.0391C8.10938 12.8672 8.19531 12.6641 8.19531 12.4297V11.5625H7.33398ZM12.666 11.5625H11.8105V12.4297C11.8105 12.6641 11.8945 12.8672 12.0625 13.0391C12.2305 13.207 12.4316 13.291 12.666 13.291C12.9004 13.291 13.1016 13.207 13.2695 13.0391C13.4414 12.8672 13.5273 12.6641 13.5273 12.4297C13.5273 12.1914 13.4414 11.9883 13.2695 11.8203C13.1016 11.6484 12.9004 11.5625 12.666 11.5625Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n\nexport function KKeyIcon(): JSX.Element {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M8.01562 11.1758L7.95703 9.65234H8.22656L11.9297 5.54492H13.2539L9.75586 9.32422L9.26367 9.79883L8.01562 11.1758ZM7.07812 14V5.54492H8.13281V14H7.07812ZM12.1992 14L9.04102 9.78711L9.76758 9.05469L13.5645 14H12.1992Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n\nexport function ControlKeyIcon(): JSX.Element {\n return (\n <svg width=\"33\" height=\"20\" viewBox=\"0 0 33 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M10.4824 14.1992C9.7168 14.1992 9.05469 14.0195 8.49609 13.6602C7.9375 13.3008 7.50586 12.791 7.20117 12.1309C6.90039 11.4707 6.75 10.6875 6.75 9.78125V9.76953C6.75 8.85938 6.90039 8.07422 7.20117 7.41406C7.50586 6.75391 7.93555 6.24414 8.49023 5.88477C9.04883 5.52539 9.71094 5.3457 10.4766 5.3457C11.0703 5.3457 11.6094 5.46289 12.0938 5.69727C12.582 5.92773 12.9844 6.25 13.3008 6.66406C13.6172 7.07422 13.8164 7.54883 13.8984 8.08789L13.8926 8.09961H12.832L12.8262 8.08789C12.7324 7.72461 12.5742 7.41211 12.3516 7.15039C12.1289 6.88477 11.8574 6.67969 11.5371 6.53516C11.2207 6.39062 10.8672 6.31836 10.4766 6.31836C9.9375 6.31836 9.46875 6.45898 9.07031 6.74023C8.67578 7.02148 8.37109 7.41992 8.15625 7.93555C7.94141 8.45117 7.83398 9.0625 7.83398 9.76953V9.78125C7.83398 10.4844 7.94141 11.0938 8.15625 11.6094C8.37109 12.125 8.67578 12.5234 9.07031 12.8047C9.46875 13.0859 9.93945 13.2266 10.4824 13.2266C10.877 13.2266 11.2344 13.1641 11.5547 13.0391C11.875 12.9102 12.1445 12.7285 12.3633 12.4941C12.582 12.2559 12.7344 11.9746 12.8203 11.6504L12.832 11.6387H13.8984V11.6504C13.8047 12.166 13.6016 12.6152 13.2891 12.998C12.9766 13.377 12.5801 13.6719 12.0996 13.8828C11.623 14.0938 11.084 14.1992 10.4824 14.1992ZM17.7832 14.0469C17.1348 14.0469 16.6641 13.916 16.3711 13.6543C16.082 13.3926 15.9375 12.9609 15.9375 12.3594V8.52734H14.9414V7.68359H15.9375V6.04883H16.9922V7.68359H18.375V8.52734H16.9922V12.1016C16.9922 12.4727 17.0625 12.7402 17.2031 12.9043C17.3438 13.0645 17.5781 13.1445 17.9062 13.1445C17.9961 13.1445 18.0723 13.1426 18.1348 13.1387C18.2012 13.1348 18.2812 13.1289 18.375 13.1211V13.9883C18.2773 14.0039 18.1797 14.0176 18.082 14.0293C17.9844 14.041 17.8848 14.0469 17.7832 14.0469ZM19.8984 14V7.68359H20.918V8.62109H21.0117C21.1328 8.28906 21.3379 8.03125 21.627 7.84766C21.916 7.66406 22.2734 7.57227 22.6992 7.57227C22.7969 7.57227 22.8926 7.57812 22.9863 7.58984C23.084 7.59766 23.1582 7.60547 23.209 7.61328V8.60352C23.1035 8.58398 23 8.57031 22.8984 8.5625C22.8008 8.55078 22.6953 8.54492 22.582 8.54492C22.2578 8.54492 21.9707 8.60938 21.7207 8.73828C21.4707 8.86719 21.2734 9.04688 21.1289 9.27734C20.9883 9.50781 20.918 9.77734 20.918 10.0859V14H19.8984ZM24.5273 14V5.17578H25.5469V14H24.5273Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n","import React, { type JSX } from 'react';\n\ninterface SearchIconProps {\n size?: number;\n color?: string;\n}\n\nexport function SearchIcon({ size = 20, color = 'currentColor' }: SearchIconProps): JSX.Element {\n return (\n <svg width={size} height={size} className=\"DocSearch-Search-Icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" stroke={color} fill=\"none\" strokeWidth=\"1.4\" />\n <path d=\"m21 21-4.3-4.3\" stroke={color} fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n","import { useEffect } from 'react';\n\nimport type { DocSearchTheme } from './types';\n\nexport interface UseThemeProps {\n theme?: DocSearchTheme;\n}\n\nexport const useTheme = ({ theme }: UseThemeProps): void => {\n useEffect(() => {\n if (theme) {\n const previousTheme = document.documentElement.dataset.theme;\n if (theme !== previousTheme) {\n document.documentElement.dataset.theme = theme;\n return (): void => {\n if (previousTheme === undefined) delete document.documentElement.dataset.theme;\n else document.documentElement.dataset.theme = previousTheme;\n };\n }\n }\n return undefined;\n }, [theme]);\n};\n","import React, { useEffect, useState, type JSX } from 'react';\n\nimport { ControlKeyIcon, KKeyIcon, MetaKeyIcon } from './icons/MetaKeysIcon';\nimport { SearchIcon } from './icons/SearchIcon';\nimport type { DocSearchTheme } from './types';\nimport { useTheme } from './useTheme';\n\nexport type ButtonTranslations = Partial<{\n buttonText: string;\n buttonAriaLabel: string;\n}>;\n\nexport type DocSearchButtonProps = React.ComponentProps<'button'> & {\n theme?: DocSearchTheme;\n translations?: ButtonTranslations;\n};\n\nconst ACTION_KEY_DEFAULT = 'Ctrl' as const;\nconst ACTION_KEY_APPLE = '⌘' as const;\n\nfunction isAppleDevice(): boolean {\n return /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform);\n}\n\nexport const DocSearchButton = React.forwardRef<HTMLButtonElement, DocSearchButtonProps>(\n ({ translations = {}, ...props }, ref) => {\n const { buttonText = 'Search', buttonAriaLabel = 'Search' } = translations;\n\n const [key, setKey] = useState<typeof ACTION_KEY_APPLE | typeof ACTION_KEY_DEFAULT | null>(null);\n useTheme({ theme: props.theme });\n useEffect(() => {\n if (typeof navigator !== 'undefined') {\n isAppleDevice() ? setKey(ACTION_KEY_APPLE) : setKey(ACTION_KEY_DEFAULT);\n }\n }, []);\n\n const [actionKeyReactsTo, actionKeyAltText, actionKeyChild] =\n key === ACTION_KEY_DEFAULT\n ? // eslint-disable-next-line react/jsx-key -- false flag\n ([ACTION_KEY_DEFAULT, 'Control', <ControlKeyIcon />] as const)\n : // eslint-disable-next-line react/jsx-key -- false flag\n (['Meta', 'Meta', <MetaKeyIcon />] as const);\n\n const shortcut = `${actionKeyAltText}+k`;\n return (\n <button\n type=\"button\"\n className=\"DocSearch DocSearch-Button\"\n aria-label={`${buttonAriaLabel} (${shortcut})`}\n aria-keyshortcuts={shortcut}\n {...props}\n ref={ref}\n >\n <span className=\"DocSearch-Button-Container\">\n <SearchIcon />\n <span className=\"DocSearch-Button-Placeholder\">{buttonText}</span>\n </span>\n\n <span className=\"DocSearch-Button-Keys\">\n {key !== null && (\n <>\n <DocSearchButtonKey reactsToKey={actionKeyReactsTo}>{actionKeyChild}</DocSearchButtonKey>\n <DocSearchButtonKey reactsToKey=\"k\">\n <KKeyIcon />\n </DocSearchButtonKey>\n </>\n )}\n </span>\n </button>\n );\n },\n);\n\ntype DocSearchButtonKeyProps = {\n reactsToKey?: string;\n};\n\nfunction DocSearchButtonKey({ reactsToKey, children }: React.PropsWithChildren<DocSearchButtonKeyProps>): JSX.Element {\n const [isKeyDown, setIsKeyDown] = useState(false);\n\n useEffect(() => {\n if (!reactsToKey) {\n return undefined;\n }\n\n function handleKeyDown(e: KeyboardEvent): void {\n if (e.key === reactsToKey) {\n setIsKeyDown(true);\n }\n }\n\n function handleKeyUp(e: KeyboardEvent): void {\n if (\n e.key === reactsToKey ||\n // keyup doesn't fire when Command is held down,\n // workaround is to mark key as also released when Command is released\n // See https://stackoverflow.com/a/73419500\n e.key === 'Meta'\n ) {\n setIsKeyDown(false);\n }\n }\n\n window.addEventListener('keydown', handleKeyDown);\n window.addEventListener('keyup', handleKeyUp);\n\n return (): void => {\n window.removeEventListener('keydown', handleKeyDown);\n window.removeEventListener('keyup', handleKeyUp);\n };\n }, [reactsToKey]);\n\n return (\n <kbd\n className={\n isKeyDown\n ? 'DocSearch-Button-Key DocSearch-Button-Key--pressed'\n : 'DocSearch-Button-Key' + (reactsToKey === 'Ctrl' ? ' DocSearch-Button-Key--ctrl' : '')\n }\n >\n {children}\n </kbd>\n );\n}\n","// src/errors/ai-sdk-error.ts\nvar marker = \"vercel.ai.error\";\nvar symbol = Symbol.for(marker);\nvar _a;\nvar _AISDKError = class _AISDKError extends Error {\n /**\n * Creates an AI SDK Error.\n *\n * @param {Object} params - The parameters for creating the error.\n * @param {string} params.name - The name of the error.\n * @param {string} params.message - The error message.\n * @param {unknown} [params.cause] - The underlying cause of the error.\n */\n constructor({\n name: name14,\n message,\n cause\n }) {\n super(message);\n this[_a] = true;\n this.name = name14;\n this.cause = cause;\n }\n /**\n * Checks if the given error is an AI SDK Error.\n * @param {unknown} error - The error to check.\n * @returns {boolean} True if the error is an AI SDK Error, false otherwise.\n */\n static isInstance(error) {\n return _AISDKError.hasMarker(error, marker);\n }\n static hasMarker(error, marker15) {\n const markerSymbol = Symbol.for(marker15);\n return error != null && typeof error === \"object\" && markerSymbol in error && typeof error[markerSymbol] === \"boolean\" && error[markerSymbol] === true;\n }\n};\n_a = symbol;\nvar AISDKError = _AISDKError;\n\n// src/errors/api-call-error.ts\nvar name = \"AI_APICallError\";\nvar marker2 = `vercel.ai.error.${name}`;\nvar symbol2 = Symbol.for(marker2);\nvar _a2;\nvar APICallError = class extends AISDKError {\n constructor({\n message,\n url,\n requestBodyValues,\n statusCode,\n responseHeaders,\n responseBody,\n cause,\n isRetryable = statusCode != null && (statusCode === 408 || // request timeout\n statusCode === 409 || // conflict\n statusCode === 429 || // too many requests\n statusCode >= 500),\n // server error\n data\n }) {\n super({ name, message, cause });\n this[_a2] = true;\n this.url = url;\n this.requestBodyValues = requestBodyValues;\n this.statusCode = statusCode;\n this.responseHeaders = responseHeaders;\n this.responseBody = responseBody;\n this.isRetryable = isRetryable;\n this.data = data;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker2);\n }\n};\n_a2 = symbol2;\n\n// src/errors/empty-response-body-error.ts\nvar name2 = \"AI_EmptyResponseBodyError\";\nvar marker3 = `vercel.ai.error.${name2}`;\nvar symbol3 = Symbol.for(marker3);\nvar _a3;\nvar EmptyResponseBodyError = class extends AISDKError {\n // used in isInstance\n constructor({ message = \"Empty response body\" } = {}) {\n super({ name: name2, message });\n this[_a3] = true;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker3);\n }\n};\n_a3 = symbol3;\n\n// src/errors/get-error-message.ts\nfunction getErrorMessage(error) {\n if (error == null) {\n return \"unknown error\";\n }\n if (typeof error === \"string\") {\n return error;\n }\n if (error instanceof Error) {\n return error.message;\n }\n return JSON.stringify(error);\n}\n\n// src/errors/invalid-argument-error.ts\nvar name3 = \"AI_InvalidArgumentError\";\nvar marker4 = `vercel.ai.error.${name3}`;\nvar symbol4 = Symbol.for(marker4);\nvar _a4;\nvar InvalidArgumentError = class extends AISDKError {\n constructor({\n message,\n cause,\n argument\n }) {\n super({ name: name3, message, cause });\n this[_a4] = true;\n this.argument = argument;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker4);\n }\n};\n_a4 = symbol4;\n\n// src/errors/invalid-prompt-error.ts\nvar name4 = \"AI_InvalidPromptError\";\nvar marker5 = `vercel.ai.error.${name4}`;\nvar symbol5 = Symbol.for(marker5);\nvar _a5;\nvar InvalidPromptError = class extends AISDKError {\n constructor({\n prompt,\n message,\n cause\n }) {\n super({ name: name4, message: `Invalid prompt: ${message}`, cause });\n this[_a5] = true;\n this.prompt = prompt;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker5);\n }\n};\n_a5 = symbol5;\n\n// src/errors/invalid-response-data-error.ts\nvar name5 = \"AI_InvalidResponseDataError\";\nvar marker6 = `vercel.ai.error.${name5}`;\nvar symbol6 = Symbol.for(marker6);\nvar _a6;\nvar InvalidResponseDataError = class extends AISDKError {\n constructor({\n data,\n message = `Invalid response data: ${JSON.stringify(data)}.`\n }) {\n super({ name: name5, message });\n this[_a6] = true;\n this.data = data;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker6);\n }\n};\n_a6 = symbol6;\n\n// src/errors/json-parse-error.ts\nvar name6 = \"AI_JSONParseError\";\nvar marker7 = `vercel.ai.error.${name6}`;\nvar symbol7 = Symbol.for(marker7);\nvar _a7;\nvar JSONParseError = class extends AISDKError {\n constructor({ text, cause }) {\n super({\n name: name6,\n message: `JSON parsing failed: Text: ${text}.\nError message: ${getErrorMessage(cause)}`,\n cause\n });\n this[_a7] = true;\n this.text = text;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker7);\n }\n};\n_a7 = symbol7;\n\n// src/errors/load-api-key-error.ts\nvar name7 = \"AI_LoadAPIKeyError\";\nvar marker8 = `vercel.ai.error.${name7}`;\nvar symbol8 = Symbol.for(marker8);\nvar _a8;\nvar LoadAPIKeyError = class extends AISDKError {\n // used in isInstance\n constructor({ message }) {\n super({ name: name7, message });\n this[_a8] = true;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker8);\n }\n};\n_a8 = symbol8;\n\n// src/errors/load-setting-error.ts\nvar name8 = \"AI_LoadSettingError\";\nvar marker9 = `vercel.ai.error.${name8}`;\nvar symbol9 = Symbol.for(marker9);\nvar _a9;\nvar LoadSettingError = class extends AISDKError {\n // used in isInstance\n constructor({ message }) {\n super({ name: name8, message });\n this[_a9] = true;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker9);\n }\n};\n_a9 = symbol9;\n\n// src/errors/no-content-generated-error.ts\nvar name9 = \"AI_NoContentGeneratedError\";\nvar marker10 = `vercel.ai.error.${name9}`;\nvar symbol10 = Symbol.for(marker10);\nvar _a10;\nvar NoContentGeneratedError = class extends AISDKError {\n // used in isInstance\n constructor({\n message = \"No content generated.\"\n } = {}) {\n super({ name: name9, message });\n this[_a10] = true;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker10);\n }\n};\n_a10 = symbol10;\n\n// src/errors/no-such-model-error.ts\nvar name10 = \"AI_NoSuchModelError\";\nvar marker11 = `vercel.ai.error.${name10}`;\nvar symbol11 = Symbol.for(marker11);\nvar _a11;\nvar NoSuchModelError = class extends AISDKError {\n constructor({\n errorName = name10,\n modelId,\n modelType,\n message = `No such ${modelType}: ${modelId}`\n }) {\n super({ name: errorName, message });\n this[_a11] = true;\n this.modelId = modelId;\n this.modelType = modelType;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker11);\n }\n};\n_a11 = symbol11;\n\n// src/errors/too-many-embedding-values-for-call-error.ts\nvar name11 = \"AI_TooManyEmbeddingValuesForCallError\";\nvar marker12 = `vercel.ai.error.${name11}`;\nvar symbol12 = Symbol.for(marker12);\nvar _a12;\nvar TooManyEmbeddingValuesForCallError = class extends AISDKError {\n constructor(options) {\n super({\n name: name11,\n message: `Too many values for a single embedding call. The ${options.provider} model \"${options.modelId}\" can only embed up to ${options.maxEmbeddingsPerCall} values per call, but ${options.values.length} values were provided.`\n });\n this[_a12] = true;\n this.provider = options.provider;\n this.modelId = options.modelId;\n this.maxEmbeddingsPerCall = options.maxEmbeddingsPerCall;\n this.values = options.values;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker12);\n }\n};\n_a12 = symbol12;\n\n// src/errors/type-validation-error.ts\nvar name12 = \"AI_TypeValidationError\";\nvar marker13 = `vercel.ai.error.${name12}`;\nvar symbol13 = Symbol.for(marker13);\nvar _a13;\nvar _TypeValidationError = class _TypeValidationError extends AISDKError {\n constructor({ value, cause }) {\n super({\n name: name12,\n message: `Type validation failed: Value: ${JSON.stringify(value)}.\nError message: ${getErrorMessage(cause)}`,\n cause\n });\n this[_a13] = true;\n this.value = value;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker13);\n }\n /**\n * Wraps an error into a TypeValidationError.\n * If the cause is already a TypeValidationError with the same value, it returns the cause.\n * Otherwise, it creates a new TypeValidationError.\n *\n * @param {Object} params - The parameters for wrapping the error.\n * @param {unknown} params.value - The value that failed validation.\n * @param {unknown} params.cause - The original error or cause of the validation failure.\n * @returns {TypeValidationError} A TypeValidationError instance.\n */\n static wrap({\n value,\n cause\n }) {\n return _TypeValidationError.isInstance(cause) && cause.value === value ? cause : new _TypeValidationError({ value, cause });\n }\n};\n_a13 = symbol13;\nvar TypeValidationError = _TypeValidationError;\n\n// src/errors/unsupported-functionality-error.ts\nvar name13 = \"AI_UnsupportedFunctionalityError\";\nvar marker14 = `vercel.ai.error.${name13}`;\nvar symbol14 = Symbol.for(marker14);\nvar _a14;\nvar UnsupportedFunctionalityError = class extends AISDKError {\n constructor({\n functionality,\n message = `'${functionality}' functionality not supported.`\n }) {\n super({ name: name13, message });\n this[_a14] = true;\n this.functionality = functionality;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker14);\n }\n};\n_a14 = symbol14;\n\n// src/json-value/is-json.ts\nfunction isJSONValue(value) {\n if (value === null || typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n return true;\n }\n if (Array.isArray(value)) {\n return value.every(isJSONValue);\n }\n if (typeof value === \"object\") {\n return Object.entries(value).every(\n ([key, val]) => typeof key === \"string\" && isJSONValue(val)\n );\n }\n return false;\n}\nfunction isJSONArray(value) {\n return Array.isArray(value) && value.every(isJSONValue);\n}\nfunction isJSONObject(value) {\n return value != null && typeof value === \"object\" && Object.entries(value).every(\n ([key, val]) => typeof key === \"string\" && isJSONValue(val)\n );\n}\nexport {\n AISDKError,\n APICallError,\n EmptyResponseBodyError,\n InvalidArgumentError,\n InvalidPromptError,\n InvalidResponseDataError,\n JSONParseError,\n LoadAPIKeyError,\n LoadSettingError,\n NoContentGeneratedError,\n NoSuchModelError,\n TooManyEmbeddingValuesForCallError,\n TypeValidationError,\n UnsupportedFunctionalityError,\n getErrorMessage,\n isJSONArray,\n isJSONObject,\n isJSONValue\n};\n//# sourceMappingURL=index.mjs.map","'use strict'\n\nconst hasBuffer = typeof Buffer !== 'undefined'\nconst suspectProtoRx = /\"(?:_|\\\\u005[Ff])(?:_|\\\\u005[Ff])(?:p|\\\\u0070)(?:r|\\\\u0072)(?:o|\\\\u006[Ff])(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:_|\\\\u005[Ff])(?:_|\\\\u005[Ff])\"\\s*:/\nconst suspectConstructorRx = /\"(?:c|\\\\u0063)(?:o|\\\\u006[Ff])(?:n|\\\\u006[Ee])(?:s|\\\\u0073)(?:t|\\\\u0074)(?:r|\\\\u0072)(?:u|\\\\u0075)(?:c|\\\\u0063)(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:r|\\\\u0072)\"\\s*:/\n\nfunction _parse (text, reviver, options) {\n // Normalize arguments\n if (options == null) {\n if (reviver !== null && typeof reviver === 'object') {\n options = reviver\n reviver = undefined\n }\n }\n\n if (hasBuffer && Buffer.isBuffer(text)) {\n text = text.toString()\n }\n\n // BOM checker\n if (text && text.charCodeAt(0) === 0xFEFF) {\n text = text.slice(1)\n }\n\n // Parse normally, allowing exceptions\n const obj = JSON.parse(text, reviver)\n\n // Ignore null and non-objects\n if (obj === null || typeof obj !== 'object') {\n return obj\n }\n\n const protoAction = (options && options.protoAction) || 'error'\n const constructorAction = (options && options.constructorAction) || 'error'\n\n // options: 'error' (default) / 'remove' / 'ignore'\n if (protoAction === 'ignore' && constructorAction === 'ignore') {\n return obj\n }\n\n if (protoAction !== 'ignore' && constructorAction !== 'ignore') {\n if (suspectProtoRx.test(text) === false && suspectConstructorRx.test(text) === false) {\n return obj\n }\n } else if (protoAction !== 'ignore' && constructorAction === 'ignore') {\n if (suspectProtoRx.test(text) === false) {\n return obj\n }\n } else {\n if (suspectConstructorRx.test(text) === false) {\n return obj\n }\n }\n\n // Scan result for proto keys\n return filter(obj, { protoAction, constructorAction, safe: options && options.safe })\n}\n\nfunction filter (obj, { protoAction = 'error', constructorAction = 'error', safe } = {}) {\n let next = [obj]\n\n while (next.length) {\n const nodes = next\n next = []\n\n for (const node of nodes) {\n if (protoAction !== 'ignore' && Object.prototype.hasOwnProperty.call(node, '__proto__')) { // Avoid calling node.hasOwnProperty directly\n if (safe === true) {\n return null\n } else if (protoAction === 'error') {\n throw new SyntaxError('Object contains forbidden prototype property')\n }\n\n delete node.__proto__ // eslint-disable-line no-proto\n }\n\n if (constructorAction !== 'ignore' &&\n Object.prototype.hasOwnProperty.call(node, 'constructor') &&\n Object.prototype.hasOwnProperty.call(node.constructor, 'prototype')) { // Avoid calling node.hasOwnProperty directly\n if (safe === true) {\n return null\n } else if (constructorAction === 'error') {\n throw new SyntaxError('Object contains forbidden prototype property')\n }\n\n delete node.constructor\n }\n\n for (const key in node) {\n const value = node[key]\n if (value && typeof value === 'object') {\n next.push(value)\n }\n }\n }\n }\n return obj\n}\n\nfunction parse (text, reviver, options) {\n const stackTraceLimit = Error.stackTraceLimit\n Error.stackTraceLimit = 0\n try {\n return _parse(text, reviver, options)\n } finally {\n Error.stackTraceLimit = stackTraceLimit\n }\n}\n\nfunction safeParse (text, reviver) {\n const stackTraceLimit = Error.stackTraceLimit\n Error.stackTraceLimit = 0\n try {\n return _parse(text, reviver, { safe: true })\n } catch (_e) {\n return null\n } finally {\n Error.stackTraceLimit = stackTraceLimit\n }\n}\n\nmodule.exports = parse\nmodule.exports.default = parse\nmodule.exports.parse = parse\nmodule.exports.safeParse = safeParse\nmodule.exports.scan = filter\n","// src/combine-headers.ts\nfunction combineHeaders(...headers) {\n return headers.reduce(\n (combinedHeaders, currentHeaders) => ({\n ...combinedHeaders,\n ...currentHeaders != null ? currentHeaders : {}\n }),\n {}\n );\n}\n\n// src/convert-async-iterator-to-readable-stream.ts\nfunction convertAsyncIteratorToReadableStream(iterator) {\n return new ReadableStream({\n /**\n * Called when the consumer wants to pull more data from the stream.\n *\n * @param {ReadableStreamDefaultController<T>} controller - The controller to enqueue data into the stream.\n * @returns {Promise<void>}\n */\n async pull(controller) {\n try {\n const { value, done } = await iterator.next();\n if (done) {\n controller.close();\n } else {\n controller.enqueue(value);\n }\n } catch (error) {\n controller.error(error);\n }\n },\n /**\n * Called when the consumer cancels the stream.\n */\n cancel() {\n }\n });\n}\n\n// src/delay.ts\nasync function delay(delayInMs) {\n return delayInMs == null ? Promise.resolve() : new Promise((resolve2) => setTimeout(resolve2, delayInMs));\n}\n\n// src/event-source-parser-stream.ts\nfunction createEventSourceParserStream() {\n let buffer = \"\";\n let event = void 0;\n let data = [];\n let lastEventId = void 0;\n let retry = void 0;\n function parseLine(line, controller) {\n if (line === \"\") {\n dispatchEvent(controller);\n return;\n }\n if (line.startsWith(\":\")) {\n return;\n }\n const colonIndex = line.indexOf(\":\");\n if (colonIndex === -1) {\n handleField(line, \"\");\n return;\n }\n const field = line.slice(0, colonIndex);\n const valueStart = colonIndex + 1;\n const value = valueStart < line.length && line[valueStart] === \" \" ? line.slice(valueStart + 1) : line.slice(valueStart);\n handleField(field, value);\n }\n function dispatchEvent(controller) {\n if (data.length > 0) {\n controller.enqueue({\n event,\n data: data.join(\"\\n\"),\n id: lastEventId,\n retry\n });\n data = [];\n event = void 0;\n retry = void 0;\n }\n }\n function handleField(field, value) {\n switch (field) {\n case \"event\":\n event = value;\n break;\n case \"data\":\n data.push(value);\n break;\n case \"id\":\n lastEventId = value;\n break;\n case \"retry\":\n const parsedRetry = parseInt(value, 10);\n if (!isNaN(parsedRetry)) {\n retry = parsedRetry;\n }\n break;\n }\n }\n return new TransformStream({\n transform(chunk, controller) {\n const { lines, incompleteLine } = splitLines(buffer, chunk);\n buffer = incompleteLine;\n for (let i = 0; i < lines.length; i++) {\n parseLine(lines[i], controller);\n }\n },\n flush(controller) {\n parseLine(buffer, controller);\n dispatchEvent(controller);\n }\n });\n}\nfunction splitLines(buffer, chunk) {\n const lines = [];\n let currentLine = buffer;\n for (let i = 0; i < chunk.length; ) {\n const char = chunk[i++];\n if (char === \"\\n\") {\n lines.push(currentLine);\n currentLine = \"\";\n } else if (char === \"\\r\") {\n lines.push(currentLine);\n currentLine = \"\";\n if (chunk[i] === \"\\n\") {\n i++;\n }\n } else {\n currentLine += char;\n }\n }\n return { lines, incompleteLine: currentLine };\n}\n\n// src/extract-response-headers.ts\nfunction extractResponseHeaders(response) {\n const headers = {};\n response.headers.forEach((value, key) => {\n headers[key] = value;\n });\n return headers;\n}\n\n// src/generate-id.ts\nimport { InvalidArgumentError } from \"@ai-sdk/provider\";\nimport { customAlphabet } from \"nanoid/non-secure\";\nvar createIdGenerator = ({\n prefix,\n size: defaultSize = 16,\n alphabet = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\",\n separator = \"-\"\n} = {}) => {\n const generator = customAlphabet(alphabet, defaultSize);\n if (prefix == null) {\n return generator;\n }\n if (alphabet.includes(separator)) {\n throw new InvalidArgumentError({\n argument: \"separator\",\n message: `The separator \"${separator}\" must not be part of the alphabet \"${alphabet}\".`\n });\n }\n return (size) => `${prefix}${separator}${generator(size)}`;\n};\nvar generateId = createIdGenerator();\n\n// src/get-error-message.ts\nfunction getErrorMessage(error) {\n if (error == null) {\n return \"unknown error\";\n }\n if (typeof error === \"string\") {\n return error;\n }\n if (error instanceof Error) {\n return error.message;\n }\n return JSON.stringify(error);\n}\n\n// src/get-from-api.ts\nimport { APICallError } from \"@ai-sdk/provider\";\n\n// src/remove-undefined-entries.ts\nfunction removeUndefinedEntries(record) {\n return Object.fromEntries(\n Object.entries(record).filter(([_key, value]) => value != null)\n );\n}\n\n// src/is-abort-error.ts\nfunction isAbortError(error) {\n return error instanceof Error && (error.name === \"AbortError\" || error.name === \"TimeoutError\");\n}\n\n// src/get-from-api.ts\nvar getOriginalFetch = () => globalThis.fetch;\nvar getFromApi = async ({\n url,\n headers = {},\n successfulResponseHandler,\n failedResponseHandler,\n abortSignal,\n fetch = getOriginalFetch()\n}) => {\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: removeUndefinedEntries(headers),\n signal: abortSignal\n });\n const responseHeaders = extractResponseHeaders(response);\n if (!response.ok) {\n let errorInformation;\n try {\n errorInformation = await failedResponseHandler({\n response,\n url,\n requestBodyValues: {}\n });\n } catch (error) {\n if (isAbortError(error) || APICallError.isInstance(error)) {\n throw error;\n }\n throw new APICallError({\n message: \"Failed to process error response\",\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues: {}\n });\n }\n throw errorInformation.value;\n }\n try {\n return await successfulResponseHandler({\n response,\n url,\n requestBodyValues: {}\n });\n } catch (error) {\n if (error instanceof Error) {\n if (isAbortError(error) || APICallError.isInstance(error)) {\n throw error;\n }\n }\n throw new APICallError({\n message: \"Failed to process successful response\",\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues: {}\n });\n }\n } catch (error) {\n if (isAbortError(error)) {\n throw error;\n }\n if (error instanceof TypeError && error.message === \"fetch failed\") {\n const cause = error.cause;\n if (cause != null) {\n throw new APICallError({\n message: `Cannot connect to API: ${cause.message}`,\n cause,\n url,\n isRetryable: true,\n requestBodyValues: {}\n });\n }\n }\n throw error;\n }\n};\n\n// src/load-api-key.ts\nimport { LoadAPIKeyError } from \"@ai-sdk/provider\";\nfunction loadApiKey({\n apiKey,\n environmentVariableName,\n apiKeyParameterName = \"apiKey\",\n description\n}) {\n if (typeof apiKey === \"string\") {\n return apiKey;\n }\n if (apiKey != null) {\n throw new LoadAPIKeyError({\n message: `${description} API key must be a string.`\n });\n }\n if (typeof process === \"undefined\") {\n throw new LoadAPIKeyError({\n message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter. Environment variables is not supported in this environment.`\n });\n }\n apiKey = process.env[environmentVariableName];\n if (apiKey == null) {\n throw new LoadAPIKeyError({\n message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter or the ${environmentVariableName} environment variable.`\n });\n }\n if (typeof apiKey !== \"string\") {\n throw new LoadAPIKeyError({\n message: `${description} API key must be a string. The value of the ${environmentVariableName} environment variable is not a string.`\n });\n }\n return apiKey;\n}\n\n// src/load-optional-setting.ts\nfunction loadOptionalSetting({\n settingValue,\n environmentVariableName\n}) {\n if (typeof settingValue === \"string\") {\n return settingValue;\n }\n if (settingValue != null || typeof process === \"undefined\") {\n return void 0;\n }\n settingValue = process.env[environmentVariableName];\n if (settingValue == null || typeof settingValue !== \"string\") {\n return void 0;\n }\n return settingValue;\n}\n\n// src/load-setting.ts\nimport { LoadSettingError } from \"@ai-sdk/provider\";\nfunction loadSetting({\n settingValue,\n environmentVariableName,\n settingName,\n description\n}) {\n if (typeof settingValue === \"string\") {\n return settingValue;\n }\n if (settingValue != null) {\n throw new LoadSettingError({\n message: `${description} setting must be a string.`\n });\n }\n if (typeof process === \"undefined\") {\n throw new LoadSettingError({\n message: `${description} setting is missing. Pass it using the '${settingName}' parameter. Environment variables is not supported in this environment.`\n });\n }\n settingValue = process.env[environmentVariableName];\n if (settingValue == null) {\n throw new LoadSettingError({\n message: `${description} setting is missing. Pass it using the '${settingName}' parameter or the ${environmentVariableName} environment variable.`\n });\n }\n if (typeof settingValue !== \"string\") {\n throw new LoadSettingError({\n message: `${description} setting must be a string. The value of the ${environmentVariableName} environment variable is not a string.`\n });\n }\n return settingValue;\n}\n\n// src/parse-json.ts\nimport {\n JSONParseError,\n TypeValidationError as TypeValidationError2\n} from \"@ai-sdk/provider\";\nimport SecureJSON from \"secure-json-parse\";\n\n// src/validate-types.ts\nimport { TypeValidationError } from \"@ai-sdk/provider\";\n\n// src/validator.ts\nvar validatorSymbol = Symbol.for(\"vercel.ai.validator\");\nfunction validator(validate) {\n return { [validatorSymbol]: true, validate };\n}\nfunction isValidator(value) {\n return typeof value === \"object\" && value !== null && validatorSymbol in value && value[validatorSymbol] === true && \"validate\" in value;\n}\nfunction asValidator(value) {\n return isValidator(value) ? value : zodValidator(value);\n}\nfunction zodValidator(zodSchema) {\n return validator((value) => {\n const result = zodSchema.safeParse(value);\n return result.success ? { success: true, value: result.data } : { success: false, error: result.error };\n });\n}\n\n// src/validate-types.ts\nfunction validateTypes({\n value,\n schema: inputSchema\n}) {\n const result = safeValidateTypes({ value, schema: inputSchema });\n if (!result.success) {\n throw TypeValidationError.wrap({ value, cause: result.error });\n }\n return result.value;\n}\nfunction safeValidateTypes({\n value,\n schema\n}) {\n const validator2 = asValidator(schema);\n try {\n if (validator2.validate == null) {\n return { success: true, value };\n }\n const result = validator2.validate(value);\n if (result.success) {\n return result;\n }\n return {\n success: false,\n error: TypeValidationError.wrap({ value, cause: result.error })\n };\n } catch (error) {\n return {\n success: false,\n error: TypeValidationError.wrap({ value, cause: error })\n };\n }\n}\n\n// src/parse-json.ts\nfunction parseJSON({\n text,\n schema\n}) {\n try {\n const value = SecureJSON.parse(text);\n if (schema == null) {\n return value;\n }\n return validateTypes({ value, schema });\n } catch (error) {\n if (JSONParseError.isInstance(error) || TypeValidationError2.isInstance(error)) {\n throw error;\n }\n throw new JSONParseError({ text, cause: error });\n }\n}\nfunction safeParseJSON({\n text,\n schema\n}) {\n try {\n const value = SecureJSON.parse(text);\n if (schema == null) {\n return { success: true, value, rawValue: value };\n }\n const validationResult = safeValidateTypes({ value, schema });\n return validationResult.success ? { ...validationResult, rawValue: value } : validationResult;\n } catch (error) {\n return {\n success: false,\n error: JSONParseError.isInstance(error) ? error : new JSONParseError({ text, cause: error })\n };\n }\n}\nfunction isParsableJson(input) {\n try {\n SecureJSON.parse(input);\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// src/parse-provider-options.ts\nimport { InvalidArgumentError as InvalidArgumentError2 } from \"@ai-sdk/provider\";\nfunction parseProviderOptions({\n provider,\n providerOptions,\n schema\n}) {\n if ((providerOptions == null ? void 0 : providerOptions[provider]) == null) {\n return void 0;\n }\n const parsedProviderOptions = safeValidateTypes({\n value: providerOptions[provider],\n schema\n });\n if (!parsedProviderOptions.success) {\n throw new InvalidArgumentError2({\n argument: \"providerOptions\",\n message: `invalid ${provider} provider options`,\n cause: parsedProviderOptions.error\n });\n }\n return parsedProviderOptions.value;\n}\n\n// src/post-to-api.ts\nimport { APICallError as APICallError2 } from \"@ai-sdk/provider\";\nvar getOriginalFetch2 = () => globalThis.fetch;\nvar postJsonToApi = async ({\n url,\n headers,\n body,\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n fetch\n}) => postToApi({\n url,\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers\n },\n body: {\n content: JSON.stringify(body),\n values: body\n },\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n fetch\n});\nvar postFormDataToApi = async ({\n url,\n headers,\n formData,\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n fetch\n}) => postToApi({\n url,\n headers,\n body: {\n content: formData,\n values: Object.fromEntries(formData.entries())\n },\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n fetch\n});\nvar postToApi = async ({\n url,\n headers = {},\n body,\n successfulResponseHandler,\n failedResponseHandler,\n abortSignal,\n fetch = getOriginalFetch2()\n}) => {\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: removeUndefinedEntries(headers),\n body: body.content,\n signal: abortSignal\n });\n const responseHeaders = extractResponseHeaders(response);\n if (!response.ok) {\n let errorInformation;\n try {\n errorInformation = await failedResponseHandler({\n response,\n url,\n requestBodyValues: body.values\n });\n } catch (error) {\n if (isAbortError(error) || APICallError2.isInstance(error)) {\n throw error;\n }\n throw new APICallError2({\n message: \"Failed to process error response\",\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues: body.values\n });\n }\n throw errorInformation.value;\n }\n try {\n return await successfulResponseHandler({\n response,\n url,\n requestBodyValues: body.values\n });\n } catch (error) {\n if (error instanceof Error) {\n if (isAbortError(error) || APICallError2.isInstance(error)) {\n throw error;\n }\n }\n throw new APICallError2({\n message: \"Failed to process successful response\",\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues: body.values\n });\n }\n } catch (error) {\n if (isAbortError(error)) {\n throw error;\n }\n if (error instanceof TypeError && error.message === \"fetch failed\") {\n const cause = error.cause;\n if (cause != null) {\n throw new APICallError2({\n message: `Cannot connect to API: ${cause.message}`,\n cause,\n url,\n requestBodyValues: body.values,\n isRetryable: true\n // retry when network error\n });\n }\n }\n throw error;\n }\n};\n\n// src/resolve.ts\nasync function resolve(value) {\n if (typeof value === \"function\") {\n value = value();\n }\n return Promise.resolve(value);\n}\n\n// src/response-handler.ts\nimport { APICallError as APICallError3, EmptyResponseBodyError } from \"@ai-sdk/provider\";\nvar createJsonErrorResponseHandler = ({\n errorSchema,\n errorToMessage,\n isRetryable\n}) => async ({ response, url, requestBodyValues }) => {\n const responseBody = await response.text();\n const responseHeaders = extractResponseHeaders(response);\n if (responseBody.trim() === \"\") {\n return {\n responseHeaders,\n value: new APICallError3({\n message: response.statusText,\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n isRetryable: isRetryable == null ? void 0 : isRetryable(response)\n })\n };\n }\n try {\n const parsedError = parseJSON({\n text: responseBody,\n schema: errorSchema\n });\n return {\n responseHeaders,\n value: new APICallError3({\n message: errorToMessage(parsedError),\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n data: parsedError,\n isRetryable: isRetryable == null ? void 0 : isRetryable(response, parsedError)\n })\n };\n } catch (parseError) {\n return {\n responseHeaders,\n value: new APICallError3({\n message: response.statusText,\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n isRetryable: isRetryable == null ? void 0 : isRetryable(response)\n })\n };\n }\n};\nvar createEventSourceResponseHandler = (chunkSchema) => async ({ response }) => {\n const responseHeaders = extractResponseHeaders(response);\n if (response.body == null) {\n throw new EmptyResponseBodyError({});\n }\n return {\n responseHeaders,\n value: response.body.pipeThrough(new TextDecoderStream()).pipeThrough(createEventSourceParserStream()).pipeThrough(\n new TransformStream({\n transform({ data }, controller) {\n if (data === \"[DONE]\") {\n return;\n }\n controller.enqueue(\n safeParseJSON({\n text: data,\n schema: chunkSchema\n })\n );\n }\n })\n )\n };\n};\nvar createJsonStreamResponseHandler = (chunkSchema) => async ({ response }) => {\n const responseHeaders = extractResponseHeaders(response);\n if (response.body == null) {\n throw new EmptyResponseBodyError({});\n }\n let buffer = \"\";\n return {\n responseHeaders,\n value: response.body.pipeThrough(new TextDecoderStream()).pipeThrough(\n new TransformStream({\n transform(chunkText, controller) {\n if (chunkText.endsWith(\"\\n\")) {\n controller.enqueue(\n safeParseJSON({\n text: buffer + chunkText,\n schema: chunkSchema\n })\n );\n buffer = \"\";\n } else {\n buffer += chunkText;\n }\n }\n })\n )\n };\n};\nvar createJsonResponseHandler = (responseSchema) => async ({ response, url, requestBodyValues }) => {\n const responseBody = await response.text();\n const parsedResult = safeParseJSON({\n text: responseBody,\n schema: responseSchema\n });\n const responseHeaders = extractResponseHeaders(response);\n if (!parsedResult.success) {\n throw new APICallError3({\n message: \"Invalid JSON response\",\n cause: parsedResult.error,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n url,\n requestBodyValues\n });\n }\n return {\n responseHeaders,\n value: parsedResult.value,\n rawValue: parsedResult.rawValue\n };\n};\nvar createBinaryResponseHandler = () => async ({ response, url, requestBodyValues }) => {\n const responseHeaders = extractResponseHeaders(response);\n if (!response.body) {\n throw new APICallError3({\n message: \"Response body is empty\",\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody: void 0\n });\n }\n try {\n const buffer = await response.arrayBuffer();\n return {\n responseHeaders,\n value: new Uint8Array(buffer)\n };\n } catch (error) {\n throw new APICallError3({\n message: \"Failed to read response as array buffer\",\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody: void 0,\n cause: error\n });\n }\n};\nvar createStatusCodeErrorResponseHandler = () => async ({ response, url, requestBodyValues }) => {\n const responseHeaders = extractResponseHeaders(response);\n const responseBody = await response.text();\n return {\n responseHeaders,\n value: new APICallError3({\n message: response.statusText,\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody\n })\n };\n};\n\n// src/uint8-utils.ts\nvar { btoa, atob } = globalThis;\nfunction convertBase64ToUint8Array(base64String) {\n const base64Url = base64String.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const latin1string = atob(base64Url);\n return Uint8Array.from(latin1string, (byte) => byte.codePointAt(0));\n}\nfunction convertUint8ArrayToBase64(array) {\n let latin1string = \"\";\n for (let i = 0; i < array.length; i++) {\n latin1string += String.fromCodePoint(array[i]);\n }\n return btoa(latin1string);\n}\n\n// src/without-trailing-slash.ts\nfunction withoutTrailingSlash(url) {\n return url == null ? void 0 : url.replace(/\\/$/, \"\");\n}\nexport {\n asValidator,\n combineHeaders,\n convertAsyncIteratorToReadableStream,\n convertBase64ToUint8Array,\n convertUint8ArrayToBase64,\n createBinaryResponseHandler,\n createEventSourceParserStream,\n createEventSourceResponseHandler,\n createIdGenerator,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n createJsonStreamResponseHandler,\n createStatusCodeErrorResponseHandler,\n delay,\n extractResponseHeaders,\n generateId,\n getErrorMessage,\n getFromApi,\n isAbortError,\n isParsableJson,\n isValidator,\n loadApiKey,\n loadOptionalSetting,\n loadSetting,\n parseJSON,\n parseProviderOptions,\n postFormDataToApi,\n postJsonToApi,\n postToApi,\n removeUndefinedEntries,\n resolve,\n safeParseJSON,\n safeValidateTypes,\n validateTypes,\n validator,\n validatorSymbol,\n withoutTrailingSlash,\n zodValidator\n};\n//# sourceMappingURL=index.mjs.map","// This alphabet uses `A-Za-z0-9_-` symbols.\n// The order of characters is optimized for better gzip and brotli compression.\n// References to the same file (works both for gzip and brotli):\n// `'use`, `andom`, and `rict'`\n// References to the brotli default dictionary:\n// `-26T`, `1983`, `40px`, `75px`, `bush`, `jack`, `mind`, `very`, and `wolf`\nlet urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n\nlet customAlphabet = (alphabet, defaultSize = 21) => {\n return (size = defaultSize) => {\n let id = ''\n // A compact alternative for `for (var i = 0; i < step; i++)`.\n let i = size | 0\n while (i--) {\n // `| 0` is more compact and faster than `Math.floor()`.\n id += alphabet[(Math.random() * alphabet.length) | 0]\n }\n return id\n }\n}\n\nlet nanoid = (size = 21) => {\n let id = ''\n // A compact alternative for `for (var i = 0; i < step; i++)`.\n let i = size | 0\n while (i--) {\n // `| 0` is more compact and faster than `Math.floor()`.\n id += urlAlphabet[(Math.random() * 64) | 0]\n }\n return id\n}\n\nexport { nanoid, customAlphabet }\n","import { setResponseValueAndErrors } from \"../errorMessages.js\";\nlet emojiRegex = undefined;\n/**\n * Generated from the regular expressions found here as of 2024-05-22:\n * https://github.com/colinhacks/zod/blob/master/src/types.ts.\n *\n * Expressions with /i flag have been changed accordingly.\n */\nexport const zodPatterns = {\n /**\n * `c` was changed to `[cC]` to replicate /i flag\n */\n cuid: /^[cC][^\\s-]{8,}$/,\n cuid2: /^[0-9a-z]+$/,\n ulid: /^[0-9A-HJKMNP-TV-Z]{26}$/,\n /**\n * `a-z` was added to replicate /i flag\n */\n email: /^(?!\\.)(?!.*\\.\\.)([a-zA-Z0-9_'+\\-\\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\\-]*\\.)+[a-zA-Z]{2,}$/,\n /**\n * Constructed a valid Unicode RegExp\n *\n * Lazily instantiate since this type of regex isn't supported\n * in all envs (e.g. React Native).\n *\n * See:\n * https://github.com/colinhacks/zod/issues/2433\n * Fix in Zod:\n * https://github.com/colinhacks/zod/commit/9340fd51e48576a75adc919bff65dbc4a5d4c99b\n */\n emoji: () => {\n if (emojiRegex === undefined) {\n emojiRegex = RegExp(\"^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$\", \"u\");\n }\n return emojiRegex;\n },\n /**\n * Unused\n */\n uuid: /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/,\n /**\n * Unused\n */\n ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,\n ipv4Cidr: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/,\n /**\n * Unused\n */\n ipv6: /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,\n ipv6Cidr: /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,\n base64: /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,\n base64url: /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,\n nanoid: /^[a-zA-Z0-9_-]{21}$/,\n jwt: /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/,\n};\nexport function parseStringDef(def, refs) {\n const res = {\n type: \"string\",\n };\n if (def.checks) {\n for (const check of def.checks) {\n switch (check.kind) {\n case \"min\":\n setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n ? Math.max(res.minLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"max\":\n setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n ? Math.min(res.maxLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"email\":\n switch (refs.emailStrategy) {\n case \"format:email\":\n addFormat(res, \"email\", check.message, refs);\n break;\n case \"format:idn-email\":\n addFormat(res, \"idn-email\", check.message, refs);\n break;\n case \"pattern:zod\":\n addPattern(res, zodPatterns.email, check.message, refs);\n break;\n }\n break;\n case \"url\":\n addFormat(res, \"uri\", check.message, refs);\n break;\n case \"uuid\":\n addFormat(res, \"uuid\", check.message, refs);\n break;\n case \"regex\":\n addPattern(res, check.regex, check.message, refs);\n break;\n case \"cuid\":\n addPattern(res, zodPatterns.cuid, check.message, refs);\n break;\n case \"cuid2\":\n addPattern(res, zodPatterns.cuid2, check.message, refs);\n break;\n case \"startsWith\":\n addPattern(res, RegExp(`^${escapeLiteralCheckValue(check.value, refs)}`), check.message, refs);\n break;\n case \"endsWith\":\n addPattern(res, RegExp(`${escapeLiteralCheckValue(check.value, refs)}$`), check.message, refs);\n break;\n case \"datetime\":\n addFormat(res, \"date-time\", check.message, refs);\n break;\n case \"date\":\n addFormat(res, \"date\", check.message, refs);\n break;\n case \"time\":\n addFormat(res, \"time\", check.message, refs);\n break;\n case \"duration\":\n addFormat(res, \"duration\", check.message, refs);\n break;\n case \"length\":\n setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n ? Math.max(res.minLength, check.value)\n : check.value, check.message, refs);\n setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n ? Math.min(res.maxLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"includes\": {\n addPattern(res, RegExp(escapeLiteralCheckValue(check.value, refs)), check.message, refs);\n break;\n }\n case \"ip\": {\n if (check.version !== \"v6\") {\n addFormat(res, \"ipv4\", check.message, refs);\n }\n if (check.version !== \"v4\") {\n addFormat(res, \"ipv6\", check.message, refs);\n }\n break;\n }\n case \"base64url\":\n addPattern(res, zodPatterns.base64url, check.message, refs);\n break;\n case \"jwt\":\n addPattern(res, zodPatterns.jwt, check.message, refs);\n break;\n case \"cidr\": {\n if (check.version !== \"v6\") {\n addPattern(res, zodPatterns.ipv4Cidr, check.message, refs);\n }\n if (check.version !== \"v4\") {\n addPattern(res, zodPatterns.ipv6Cidr, check.message, refs);\n }\n break;\n }\n case \"emoji\":\n addPattern(res, zodPatterns.emoji(), check.message, refs);\n break;\n case \"ulid\": {\n addPattern(res, zodPatterns.ulid, check.message, refs);\n break;\n }\n case \"base64\": {\n switch (refs.base64Strategy) {\n case \"format:binary\": {\n addFormat(res, \"binary\", check.message, refs);\n break;\n }\n case \"contentEncoding:base64\": {\n setResponseValueAndErrors(res, \"contentEncoding\", \"base64\", check.message, refs);\n break;\n }\n case \"pattern:zod\": {\n addPattern(res, zodPatterns.base64, check.message, refs);\n break;\n }\n }\n break;\n }\n case \"nanoid\": {\n addPattern(res, zodPatterns.nanoid, check.message, refs);\n }\n case \"toLowerCase\":\n case \"toUpperCase\":\n case \"trim\":\n break;\n default:\n /* c8 ignore next */\n ((_) => { })(check);\n }\n }\n }\n return res;\n}\nfunction escapeLiteralCheckValue(literal, refs) {\n return refs.patternStrategy === \"escape\"\n ? escapeNonAlphaNumeric(literal)\n : literal;\n}\nconst ALPHA_NUMERIC = new Set(\"ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789\");\nfunction escapeNonAlphaNumeric(source) {\n let result = \"\";\n for (let i = 0; i < source.length; i++) {\n if (!ALPHA_NUMERIC.has(source[i])) {\n result += \"\\\\\";\n }\n result += source[i];\n }\n return result;\n}\n// Adds a \"format\" keyword to the schema. If a format exists, both formats will be joined in an allOf-node, along with subsequent ones.\nfunction addFormat(schema, value, message, refs) {\n if (schema.format || schema.anyOf?.some((x) => x.format)) {\n if (!schema.anyOf) {\n schema.anyOf = [];\n }\n if (schema.format) {\n schema.anyOf.push({\n format: schema.format,\n ...(schema.errorMessage &&\n refs.errorMessages && {\n errorMessage: { format: schema.errorMessage.format },\n }),\n });\n delete schema.format;\n if (schema.errorMessage) {\n delete schema.errorMessage.format;\n if (Object.keys(schema.errorMessage).length === 0) {\n delete schema.errorMessage;\n }\n }\n }\n schema.anyOf.push({\n format: value,\n ...(message &&\n refs.errorMessages && { errorMessage: { format: message } }),\n });\n }\n else {\n setResponseValueAndErrors(schema, \"format\", value, message, refs);\n }\n}\n// Adds a \"pattern\" keyword to the schema. If a pattern exists, both patterns will be joined in an allOf-node, along with subsequent ones.\nfunction addPattern(schema, regex, message, refs) {\n if (schema.pattern || schema.allOf?.some((x) => x.pattern)) {\n if (!schema.allOf) {\n schema.allOf = [];\n }\n if (schema.pattern) {\n schema.allOf.push({\n pattern: schema.pattern,\n ...(schema.errorMessage &&\n refs.errorMessages && {\n errorMessage: { pattern: schema.errorMessage.pattern },\n }),\n });\n delete schema.pattern;\n if (schema.errorMessage) {\n delete schema.errorMessage.pattern;\n if (Object.keys(schema.errorMessage).length === 0) {\n delete schema.errorMessage;\n }\n }\n }\n schema.allOf.push({\n pattern: stringifyRegExpWithFlags(regex, refs),\n ...(message &&\n refs.errorMessages && { errorMessage: { pattern: message } }),\n });\n }\n else {\n setResponseValueAndErrors(schema, \"pattern\", stringifyRegExpWithFlags(regex, refs), message, refs);\n }\n}\n// Mutate z.string.regex() in a best attempt to accommodate for regex flags when applyRegexFlags is true\nfunction stringifyRegExpWithFlags(regex, refs) {\n if (!refs.applyRegexFlags || !regex.flags) {\n return regex.source;\n }\n // Currently handled flags\n const flags = {\n i: regex.flags.includes(\"i\"),\n m: regex.flags.includes(\"m\"),\n s: regex.flags.includes(\"s\"), // `.` matches newlines\n };\n // The general principle here is to step through each character, one at a time, applying mutations as flags require. We keep track when the current character is escaped, and when it's inside a group /like [this]/ or (also) a range like /[a-z]/. The following is fairly brittle imperative code; edit at your peril!\n const source = flags.i ? regex.source.toLowerCase() : regex.source;\n let pattern = \"\";\n let isEscaped = false;\n let inCharGroup = false;\n let inCharRange = false;\n for (let i = 0; i < source.length; i++) {\n if (isEscaped) {\n pattern += source[i];\n isEscaped = false;\n continue;\n }\n if (flags.i) {\n if (inCharGroup) {\n if (source[i].match(/[a-z]/)) {\n if (inCharRange) {\n pattern += source[i];\n pattern += `${source[i - 2]}-${source[i]}`.toUpperCase();\n inCharRange = false;\n }\n else if (source[i + 1] === \"-\" && source[i + 2]?.match(/[a-z]/)) {\n pattern += source[i];\n inCharRange = true;\n }\n else {\n pattern += `${source[i]}${source[i].toUpperCase()}`;\n }\n continue;\n }\n }\n else if (source[i].match(/[a-z]/)) {\n pattern += `[${source[i]}${source[i].toUpperCase()}]`;\n continue;\n }\n }\n if (flags.m) {\n if (source[i] === \"^\") {\n pattern += `(^|(?<=[\\r\\n]))`;\n continue;\n }\n else if (source[i] === \"$\") {\n pattern += `($|(?=[\\r\\n]))`;\n continue;\n }\n }\n if (flags.s && source[i] === \".\") {\n pattern += inCharGroup ? `${source[i]}\\r\\n` : `[${source[i]}\\r\\n]`;\n continue;\n }\n pattern += source[i];\n if (source[i] === \"\\\\\") {\n isEscaped = true;\n }\n else if (inCharGroup && source[i] === \"]\") {\n inCharGroup = false;\n }\n else if (!inCharGroup && source[i] === \"[\") {\n inCharGroup = true;\n }\n }\n try {\n new RegExp(pattern);\n }\n catch {\n console.warn(`Could not convert regex pattern at ${refs.currentPath.join(\"/\")} to a flag-independent form! Falling back to the flag-ignorant source`);\n return regex.source;\n }\n return pattern;\n}\n","// src/index.ts\nimport { generateId } from \"@ai-sdk/provider-utils\";\n\n// src/assistant-stream-parts.ts\nvar textStreamPart = {\n code: \"0\",\n name: \"text\",\n parse: (value) => {\n if (typeof value !== \"string\") {\n throw new Error('\"text\" parts expect a string value.');\n }\n return { type: \"text\", value };\n }\n};\nvar errorStreamPart = {\n code: \"3\",\n name: \"error\",\n parse: (value) => {\n if (typeof value !== \"string\") {\n throw new Error('\"error\" parts expect a string value.');\n }\n return { type: \"error\", value };\n }\n};\nvar assistantMessageStreamPart = {\n code: \"4\",\n name: \"assistant_message\",\n parse: (value) => {\n if (value == null || typeof value !== \"object\" || !(\"id\" in value) || !(\"role\" in value) || !(\"content\" in value) || typeof value.id !== \"string\" || typeof value.role !== \"string\" || value.role !== \"assistant\" || !Array.isArray(value.content) || !value.content.every(\n (item) => item != null && typeof item === \"object\" && \"type\" in item && item.type === \"text\" && \"text\" in item && item.text != null && typeof item.text === \"object\" && \"value\" in item.text && typeof item.text.value === \"string\"\n )) {\n throw new Error(\n '\"assistant_message\" parts expect an object with an \"id\", \"role\", and \"content\" property.'\n );\n }\n return {\n type: \"assistant_message\",\n value\n };\n }\n};\nvar assistantControlDataStreamPart = {\n code: \"5\",\n name: \"assistant_control_data\",\n parse: (value) => {\n if (value == null || typeof value !== \"object\" || !(\"threadId\" in value) || !(\"messageId\" in value) || typeof value.threadId !== \"string\" || typeof value.messageId !== \"string\") {\n throw new Error(\n '\"assistant_control_data\" parts expect an object with a \"threadId\" and \"messageId\" property.'\n );\n }\n return {\n type: \"assistant_control_data\",\n value: {\n threadId: value.threadId,\n messageId: value.messageId\n }\n };\n }\n};\nvar dataMessageStreamPart = {\n code: \"6\",\n name: \"data_message\",\n parse: (value) => {\n if (value == null || typeof value !== \"object\" || !(\"role\" in value) || !(\"data\" in value) || typeof value.role !== \"string\" || value.role !== \"data\") {\n throw new Error(\n '\"data_message\" parts expect an object with a \"role\" and \"data\" property.'\n );\n }\n return {\n type: \"data_message\",\n value\n };\n }\n};\nvar assistantStreamParts = [\n textStreamPart,\n errorStreamPart,\n assistantMessageStreamPart,\n assistantControlDataStreamPart,\n dataMessageStreamPart\n];\nvar assistantStreamPartsByCode = {\n [textStreamPart.code]: textStreamPart,\n [errorStreamPart.code]: errorStreamPart,\n [assistantMessageStreamPart.code]: assistantMessageStreamPart,\n [assistantControlDataStreamPart.code]: assistantControlDataStreamPart,\n [dataMessageStreamPart.code]: dataMessageStreamPart\n};\nvar StreamStringPrefixes = {\n [textStreamPart.name]: textStreamPart.code,\n [errorStreamPart.name]: errorStreamPart.code,\n [assistantMessageStreamPart.name]: assistantMessageStreamPart.code,\n [assistantControlDataStreamPart.name]: assistantControlDataStreamPart.code,\n [dataMessageStreamPart.name]: dataMessageStreamPart.code\n};\nvar validCodes = assistantStreamParts.map((part) => part.code);\nvar parseAssistantStreamPart = (line) => {\n const firstSeparatorIndex = line.indexOf(\":\");\n if (firstSeparatorIndex === -1) {\n throw new Error(\"Failed to parse stream string. No separator found.\");\n }\n const prefix = line.slice(0, firstSeparatorIndex);\n if (!validCodes.includes(prefix)) {\n throw new Error(`Failed to parse stream string. Invalid code ${prefix}.`);\n }\n const code = prefix;\n const textValue = line.slice(firstSeparatorIndex + 1);\n const jsonValue = JSON.parse(textValue);\n return assistantStreamPartsByCode[code].parse(jsonValue);\n};\nfunction formatAssistantStreamPart(type, value) {\n const streamPart = assistantStreamParts.find((part) => part.name === type);\n if (!streamPart) {\n throw new Error(`Invalid stream part type: ${type}`);\n }\n return `${streamPart.code}:${JSON.stringify(value)}\n`;\n}\n\n// src/process-chat-response.ts\nimport { generateId as generateIdFunction } from \"@ai-sdk/provider-utils\";\n\n// src/duplicated/usage.ts\nfunction calculateLanguageModelUsage({\n promptTokens,\n completionTokens\n}) {\n return {\n promptTokens,\n completionTokens,\n totalTokens: promptTokens + completionTokens\n };\n}\n\n// src/parse-partial-json.ts\nimport { safeParseJSON } from \"@ai-sdk/provider-utils\";\n\n// src/fix-json.ts\nfunction fixJson(input) {\n const stack = [\"ROOT\"];\n let lastValidIndex = -1;\n let literalStart = null;\n function processValueStart(char, i, swapState) {\n {\n switch (char) {\n case '\"': {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_STRING\");\n break;\n }\n case \"f\":\n case \"t\":\n case \"n\": {\n lastValidIndex = i;\n literalStart = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_LITERAL\");\n break;\n }\n case \"-\": {\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_NUMBER\");\n break;\n }\n case \"0\":\n case \"1\":\n case \"2\":\n case \"3\":\n case \"4\":\n case \"5\":\n case \"6\":\n case \"7\":\n case \"8\":\n case \"9\": {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_NUMBER\");\n break;\n }\n case \"{\": {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_OBJECT_START\");\n break;\n }\n case \"[\": {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_ARRAY_START\");\n break;\n }\n }\n }\n }\n function processAfterObjectValue(char, i) {\n switch (char) {\n case \",\": {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_AFTER_COMMA\");\n break;\n }\n case \"}\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n }\n }\n function processAfterArrayValue(char, i) {\n switch (char) {\n case \",\": {\n stack.pop();\n stack.push(\"INSIDE_ARRAY_AFTER_COMMA\");\n break;\n }\n case \"]\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n }\n }\n for (let i = 0; i < input.length; i++) {\n const char = input[i];\n const currentState = stack[stack.length - 1];\n switch (currentState) {\n case \"ROOT\":\n processValueStart(char, i, \"FINISH\");\n break;\n case \"INSIDE_OBJECT_START\": {\n switch (char) {\n case '\"': {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_KEY\");\n break;\n }\n case \"}\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n }\n break;\n }\n case \"INSIDE_OBJECT_AFTER_COMMA\": {\n switch (char) {\n case '\"': {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_KEY\");\n break;\n }\n }\n break;\n }\n case \"INSIDE_OBJECT_KEY\": {\n switch (char) {\n case '\"': {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_AFTER_KEY\");\n break;\n }\n }\n break;\n }\n case \"INSIDE_OBJECT_AFTER_KEY\": {\n switch (char) {\n case \":\": {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_BEFORE_VALUE\");\n break;\n }\n }\n break;\n }\n case \"INSIDE_OBJECT_BEFORE_VALUE\": {\n processValueStart(char, i, \"INSIDE_OBJECT_AFTER_VALUE\");\n break;\n }\n case \"INSIDE_OBJECT_AFTER_VALUE\": {\n processAfterObjectValue(char, i);\n break;\n }\n case \"INSIDE_STRING\": {\n switch (char) {\n case '\"': {\n stack.pop();\n lastValidIndex = i;\n break;\n }\n case \"\\\\\": {\n stack.push(\"INSIDE_STRING_ESCAPE\");\n break;\n }\n default: {\n lastValidIndex = i;\n }\n }\n break;\n }\n case \"INSIDE_ARRAY_START\": {\n switch (char) {\n case \"]\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n default: {\n lastValidIndex = i;\n processValueStart(char, i, \"INSIDE_ARRAY_AFTER_VALUE\");\n break;\n }\n }\n break;\n }\n case \"INSIDE_ARRAY_AFTER_VALUE\": {\n switch (char) {\n case \",\": {\n stack.pop();\n stack.push(\"INSIDE_ARRAY_AFTER_COMMA\");\n break;\n }\n case \"]\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n default: {\n lastValidIndex = i;\n break;\n }\n }\n break;\n }\n case \"INSIDE_ARRAY_AFTER_COMMA\": {\n processValueStart(char, i, \"INSIDE_ARRAY_AFTER_VALUE\");\n break;\n }\n case \"INSIDE_STRING_ESCAPE\": {\n stack.pop();\n lastValidIndex = i;\n break;\n }\n case \"INSIDE_NUMBER\": {\n switch (char) {\n case \"0\":\n case \"1\":\n case \"2\":\n case \"3\":\n case \"4\":\n case \"5\":\n case \"6\":\n case \"7\":\n case \"8\":\n case \"9\": {\n lastValidIndex = i;\n break;\n }\n case \"e\":\n case \"E\":\n case \"-\":\n case \".\": {\n break;\n }\n case \",\": {\n stack.pop();\n if (stack[stack.length - 1] === \"INSIDE_ARRAY_AFTER_VALUE\") {\n processAfterArrayValue(char, i);\n }\n if (stack[stack.length - 1] === \"INSIDE_OBJECT_AFTER_VALUE\") {\n processAfterObjectValue(char, i);\n }\n break;\n }\n case \"}\": {\n stack.pop();\n if (stack[stack.length - 1] === \"INSIDE_OBJECT_AFTER_VALUE\") {\n processAfterObjectValue(char, i);\n }\n break;\n }\n case \"]\": {\n stack.pop();\n if (stack[stack.length - 1] === \"INSIDE_ARRAY_AFTER_VALUE\") {\n processAfterArrayValue(char, i);\n }\n break;\n }\n default: {\n stack.pop();\n break;\n }\n }\n break;\n }\n case \"INSIDE_LITERAL\": {\n const partialLiteral = input.substring(literalStart, i + 1);\n if (!\"false\".startsWith(partialLiteral) && !\"true\".startsWith(partialLiteral) && !\"null\".startsWith(partialLiteral)) {\n stack.pop();\n if (stack[stack.length - 1] === \"INSIDE_OBJECT_AFTER_VALUE\") {\n processAfterObjectValue(char, i);\n } else if (stack[stack.length - 1] === \"INSIDE_ARRAY_AFTER_VALUE\") {\n processAfterArrayValue(char, i);\n }\n } else {\n lastValidIndex = i;\n }\n break;\n }\n }\n }\n let result = input.slice(0, lastValidIndex + 1);\n for (let i = stack.length - 1; i >= 0; i--) {\n const state = stack[i];\n switch (state) {\n case \"INSIDE_STRING\": {\n result += '\"';\n break;\n }\n case \"INSIDE_OBJECT_KEY\":\n case \"INSIDE_OBJECT_AFTER_KEY\":\n case \"INSIDE_OBJECT_AFTER_COMMA\":\n case \"INSIDE_OBJECT_START\":\n case \"INSIDE_OBJECT_BEFORE_VALUE\":\n case \"INSIDE_OBJECT_AFTER_VALUE\": {\n result += \"}\";\n break;\n }\n case \"INSIDE_ARRAY_START\":\n case \"INSIDE_ARRAY_AFTER_COMMA\":\n case \"INSIDE_ARRAY_AFTER_VALUE\": {\n result += \"]\";\n break;\n }\n case \"INSIDE_LITERAL\": {\n const partialLiteral = input.substring(literalStart, input.length);\n if (\"true\".startsWith(partialLiteral)) {\n result += \"true\".slice(partialLiteral.length);\n } else if (\"false\".startsWith(partialLiteral)) {\n result += \"false\".slice(partialLiteral.length);\n } else if (\"null\".startsWith(partialLiteral)) {\n result += \"null\".slice(partialLiteral.length);\n }\n }\n }\n }\n return result;\n}\n\n// src/parse-partial-json.ts\nfunction parsePartialJson(jsonText) {\n if (jsonText === void 0) {\n return { value: void 0, state: \"undefined-input\" };\n }\n let result = safeParseJSON({ text: jsonText });\n if (result.success) {\n return { value: result.value, state: \"successful-parse\" };\n }\n result = safeParseJSON({ text: fixJson(jsonText) });\n if (result.success) {\n return { value: result.value, state: \"repaired-parse\" };\n }\n return { value: void 0, state: \"failed-parse\" };\n}\n\n// src/data-stream-parts.ts\nvar textStreamPart2 = {\n code: \"0\",\n name: \"text\",\n parse: (value) => {\n if (typeof value !== \"string\") {\n throw new Error('\"text\" parts expect a string value.');\n }\n return { type: \"text\", value };\n }\n};\nvar dataStreamPart = {\n code: \"2\",\n name: \"data\",\n parse: (value) => {\n if (!Array.isArray(value)) {\n throw new Error('\"data\" parts expect an array value.');\n }\n return { type: \"data\", value };\n }\n};\nvar errorStreamPart2 = {\n code: \"3\",\n name: \"error\",\n parse: (value) => {\n if (typeof value !== \"string\") {\n throw new Error('\"error\" parts expect a string value.');\n }\n return { type: \"error\", value };\n }\n};\nvar messageAnnotationsStreamPart = {\n code: \"8\",\n name: \"message_annotations\",\n parse: (value) => {\n if (!Array.isArray(value)) {\n throw new Error('\"message_annotations\" parts expect an array value.');\n }\n return { type: \"message_annotations\", value };\n }\n};\nvar toolCallStreamPart = {\n code: \"9\",\n name: \"tool_call\",\n parse: (value) => {\n if (value == null || typeof value !== \"object\" || !(\"toolCallId\" in value) || typeof value.toolCallId !== \"string\" || !(\"toolName\" in value) || typeof value.toolName !== \"string\" || !(\"args\" in value) || typeof value.args !== \"object\") {\n throw new Error(\n '\"tool_call\" parts expect an object with a \"toolCallId\", \"toolName\", and \"args\" property.'\n );\n }\n return {\n type: \"tool_call\",\n value\n };\n }\n};\nvar toolResultStreamPart = {\n code: \"a\",\n name: \"tool_result\",\n parse: (value) => {\n if (value == null || typeof value !== \"object\" || !(\"toolCallId\" in value) || typeof value.toolCallId !== \"string\" || !(\"result\" in value)) {\n throw new Error(\n '\"tool_result\" parts expect an object with a \"toolCallId\" and a \"result\" property.'\n );\n }\n return {\n type: \"tool_result\",\n value\n };\n }\n};\nvar toolCallStreamingStartStreamPart = {\n code: \"b\",\n name: \"tool_call_streaming_start\",\n parse: (value) => {\n if (value == null || typeof value !== \"object\" || !(\"toolCallId\" in value) || typeof value.toolCallId !== \"string\" || !(\"toolName\" in value) || typeof value.toolName !== \"string\") {\n throw new Error(\n '\"tool_call_streaming_start\" parts expect an object with a \"toolCallId\" and \"toolName\" property.'\n );\n }\n return {\n type: \"tool_call_streaming_start\",\n value\n };\n }\n};\nvar toolCallDeltaStreamPart = {\n code: \"c\",\n name: \"tool_call_delta\",\n parse: (value) => {\n if (value == null || typeof value !== \"object\" || !(\"toolCallId\" in value) || typeof value.toolCallId !== \"string\" || !(\"argsTextDelta\" in value) || typeof value.argsTextDelta !== \"string\") {\n throw new Error(\n '\"tool_call_delta\" parts expect an object with a \"toolCallId\" and \"argsTextDelta\" property.'\n );\n }\n return {\n type: \"tool_call_delta\",\n value\n };\n }\n};\nvar finishMessageStreamPart = {\n code: \"d\",\n name: \"finish_message\",\n parse: (value) => {\n if (value == null || typeof value !== \"object\" || !(\"finishReason\" in value) || typeof value.finishReason !== \"string\") {\n throw new Error(\n '\"finish_message\" parts expect an object with a \"finishReason\" property.'\n );\n }\n const result = {\n finishReason: value.finishReason\n };\n if (\"usage\" in value && value.usage != null && typeof value.usage === \"object\" && \"promptTokens\" in value.usage && \"completionTokens\" in value.usage) {\n result.usage = {\n promptTokens: typeof value.usage.promptTokens === \"number\" ? value.usage.promptTokens : Number.NaN,\n completionTokens: typeof value.usage.completionTokens === \"number\" ? value.usage.completionTokens : Number.NaN\n };\n }\n return {\n type: \"finish_message\",\n value: result\n };\n }\n};\nvar finishStepStreamPart = {\n code: \"e\",\n name: \"finish_step\",\n parse: (value) => {\n if (value == null || typeof value !== \"object\" || !(\"finishReason\" in value) || typeof value.finishReason !== \"string\") {\n throw new Error(\n '\"finish_step\" parts expect an object with a \"finishReason\" property.'\n );\n }\n const result = {\n finishReason: value.finishReason,\n isContinued: false\n };\n if (\"usage\" in value && value.usage != null && typeof value.usage === \"object\" && \"promptTokens\" in value.usage && \"completionTokens\" in value.usage) {\n result.usage = {\n promptTokens: typeof value.usage.promptTokens === \"number\" ? value.usage.promptTokens : Number.NaN,\n completionTokens: typeof value.usage.completionTokens === \"number\" ? value.usage.completionTokens : Number.NaN\n };\n }\n if (\"isContinued\" in value && typeof value.isContinued === \"boolean\") {\n result.isContinued = value.isContinued;\n }\n return {\n type: \"finish_step\",\n value: result\n };\n }\n};\nvar startStepStreamPart = {\n code: \"f\",\n name: \"start_step\",\n parse: (value) => {\n if (value == null || typeof value !== \"object\" || !(\"messageId\" in value) || typeof value.messageId !== \"string\") {\n throw new Error(\n '\"start_step\" parts expect an object with an \"id\" property.'\n );\n }\n return {\n type: \"start_step\",\n value: {\n messageId: value.messageId\n }\n };\n }\n};\nvar reasoningStreamPart = {\n code: \"g\",\n name: \"reasoning\",\n parse: (value) => {\n if (typeof value !== \"string\") {\n throw new Error('\"reasoning\" parts expect a string value.');\n }\n return { type: \"reasoning\", value };\n }\n};\nvar sourcePart = {\n code: \"h\",\n name: \"source\",\n parse: (value) => {\n if (value == null || typeof value !== \"object\") {\n throw new Error('\"source\" parts expect a Source object.');\n }\n return {\n type: \"source\",\n value\n };\n }\n};\nvar redactedReasoningStreamPart = {\n code: \"i\",\n name: \"redacted_reasoning\",\n parse: (value) => {\n if (value == null || typeof value !== \"object\" || !(\"data\" in value) || typeof value.data !== \"string\") {\n throw new Error(\n '\"redacted_reasoning\" parts expect an object with a \"data\" property.'\n );\n }\n return { type: \"redacted_reasoning\", value: { data: value.data } };\n }\n};\nvar reasoningSignatureStreamPart = {\n code: \"j\",\n name: \"reasoning_signature\",\n parse: (value) => {\n if (value == null || typeof value !== \"object\" || !(\"signature\" in value) || typeof value.signature !== \"string\") {\n throw new Error(\n '\"reasoning_signature\" parts expect an object with a \"signature\" property.'\n );\n }\n return {\n type: \"reasoning_signature\",\n value: { signature: value.signature }\n };\n }\n};\nvar fileStreamPart = {\n code: \"k\",\n name: \"file\",\n parse: (value) => {\n if (value == null || typeof value !== \"object\" || !(\"data\" in value) || typeof value.data !== \"string\" || !(\"mimeType\" in value) || typeof value.mimeType !== \"string\") {\n throw new Error(\n '\"file\" parts expect an object with a \"data\" and \"mimeType\" property.'\n );\n }\n return { type: \"file\", value };\n }\n};\nvar dataStreamParts = [\n textStreamPart2,\n dataStreamPart,\n errorStreamPart2,\n messageAnnotationsStreamPart,\n toolCallStreamPart,\n toolResultStreamPart,\n toolCallStreamingStartStreamPart,\n toolCallDeltaStreamPart,\n finishMessageStreamPart,\n finishStepStreamPart,\n startStepStreamPart,\n reasoningStreamPart,\n sourcePart,\n redactedReasoningStreamPart,\n reasoningSignatureStreamPart,\n fileStreamPart\n];\nvar dataStreamPartsByCode = Object.fromEntries(\n dataStreamParts.map((part) => [part.code, part])\n);\nvar DataStreamStringPrefixes = Object.fromEntries(\n dataStreamParts.map((part) => [part.name, part.code])\n);\nvar validCodes2 = dataStreamParts.map((part) => part.code);\nvar parseDataStreamPart = (line) => {\n const firstSeparatorIndex = line.indexOf(\":\");\n if (firstSeparatorIndex === -1) {\n throw new Error(\"Failed to parse stream string. No separator found.\");\n }\n const prefix = line.slice(0, firstSeparatorIndex);\n if (!validCodes2.includes(prefix)) {\n throw new Error(`Failed to parse stream string. Invalid code ${prefix}.`);\n }\n const code = prefix;\n const textValue = line.slice(firstSeparatorIndex + 1);\n const jsonValue = JSON.parse(textValue);\n return dataStreamPartsByCode[code].parse(jsonValue);\n};\nfunction formatDataStreamPart(type, value) {\n const streamPart = dataStreamParts.find((part) => part.name === type);\n if (!streamPart) {\n throw new Error(`Invalid stream part type: ${type}`);\n }\n return `${streamPart.code}:${JSON.stringify(value)}\n`;\n}\n\n// src/process-data-stream.ts\nvar NEWLINE = \"\\n\".charCodeAt(0);\nfunction concatChunks(chunks, totalLength) {\n const concatenatedChunks = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of chunks) {\n concatenatedChunks.set(chunk, offset);\n offset += chunk.length;\n }\n chunks.length = 0;\n return concatenatedChunks;\n}\nasync function processDataStream({\n stream,\n onTextPart,\n onReasoningPart,\n onReasoningSignaturePart,\n onRedactedReasoningPart,\n onSourcePart,\n onFilePart,\n onDataPart,\n onErrorPart,\n onToolCallStreamingStartPart,\n onToolCallDeltaPart,\n onToolCallPart,\n onToolResultPart,\n onMessageAnnotationsPart,\n onFinishMessagePart,\n onFinishStepPart,\n onStartStepPart\n}) {\n const reader = stream.getReader();\n const decoder = new TextDecoder();\n const chunks = [];\n let totalLength = 0;\n while (true) {\n const { value } = await reader.read();\n if (value) {\n chunks.push(value);\n totalLength += value.length;\n if (value[value.length - 1] !== NEWLINE) {\n continue;\n }\n }\n if (chunks.length === 0) {\n break;\n }\n const concatenatedChunks = concatChunks(chunks, totalLength);\n totalLength = 0;\n const streamParts = decoder.decode(concatenatedChunks, { stream: true }).split(\"\\n\").filter((line) => line !== \"\").map(parseDataStreamPart);\n for (const { type, value: value2 } of streamParts) {\n switch (type) {\n case \"text\":\n await (onTextPart == null ? void 0 : onTextPart(value2));\n break;\n case \"reasoning\":\n await (onReasoningPart == null ? void 0 : onReasoningPart(value2));\n break;\n case \"reasoning_signature\":\n await (onReasoningSignaturePart == null ? void 0 : onReasoningSignaturePart(value2));\n break;\n case \"redacted_reasoning\":\n await (onRedactedReasoningPart == null ? void 0 : onRedactedReasoningPart(value2));\n break;\n case \"file\":\n await (onFilePart == null ? void 0 : onFilePart(value2));\n break;\n case \"source\":\n await (onSourcePart == null ? void 0 : onSourcePart(value2));\n break;\n case \"data\":\n await (onDataPart == null ? void 0 : onDataPart(value2));\n break;\n case \"error\":\n await (onErrorPart == null ? void 0 : onErrorPart(value2));\n break;\n case \"message_annotations\":\n await (onMessageAnnotationsPart == null ? void 0 : onMessageAnnotationsPart(value2));\n break;\n case \"tool_call_streaming_start\":\n await (onToolCallStreamingStartPart == null ? void 0 : onToolCallStreamingStartPart(value2));\n break;\n case \"tool_call_delta\":\n await (onToolCallDeltaPart == null ? void 0 : onToolCallDeltaPart(value2));\n break;\n case \"tool_call\":\n await (onToolCallPart == null ? void 0 : onToolCallPart(value2));\n break;\n case \"tool_result\":\n await (onToolResultPart == null ? void 0 : onToolResultPart(value2));\n break;\n case \"finish_message\":\n await (onFinishMessagePart == null ? void 0 : onFinishMessagePart(value2));\n break;\n case \"finish_step\":\n await (onFinishStepPart == null ? void 0 : onFinishStepPart(value2));\n break;\n case \"start_step\":\n await (onStartStepPart == null ? void 0 : onStartStepPart(value2));\n break;\n default: {\n const exhaustiveCheck = type;\n throw new Error(`Unknown stream part type: ${exhaustiveCheck}`);\n }\n }\n }\n }\n}\n\n// src/process-chat-response.ts\nasync function processChatResponse({\n stream,\n update,\n onToolCall,\n onFinish,\n generateId: generateId2 = generateIdFunction,\n getCurrentDate = () => /* @__PURE__ */ new Date(),\n lastMessage\n}) {\n var _a, _b;\n const replaceLastMessage = (lastMessage == null ? void 0 : lastMessage.role) === \"assistant\";\n let step = replaceLastMessage ? 1 + // find max step in existing tool invocations:\n ((_b = (_a = lastMessage.toolInvocations) == null ? void 0 : _a.reduce((max, toolInvocation) => {\n var _a2;\n return Math.max(max, (_a2 = toolInvocation.step) != null ? _a2 : 0);\n }, 0)) != null ? _b : 0) : 0;\n const message = replaceLastMessage ? structuredClone(lastMessage) : {\n id: generateId2(),\n createdAt: getCurrentDate(),\n role: \"assistant\",\n content: \"\",\n parts: []\n };\n let currentTextPart = void 0;\n let currentReasoningPart = void 0;\n let currentReasoningTextDetail = void 0;\n function updateToolInvocationPart(toolCallId, invocation) {\n const part = message.parts.find(\n (part2) => part2.type === \"tool-invocation\" && part2.toolInvocation.toolCallId === toolCallId\n );\n if (part != null) {\n part.toolInvocation = invocation;\n } else {\n message.parts.push({\n type: \"tool-invocation\",\n toolInvocation: invocation\n });\n }\n }\n const data = [];\n let messageAnnotations = replaceLastMessage ? lastMessage == null ? void 0 : lastMessage.annotations : void 0;\n const partialToolCalls = {};\n let usage = {\n completionTokens: NaN,\n promptTokens: NaN,\n totalTokens: NaN\n };\n let finishReason = \"unknown\";\n function execUpdate() {\n const copiedData = [...data];\n if (messageAnnotations == null ? void 0 : messageAnnotations.length) {\n message.annotations = messageAnnotations;\n }\n const copiedMessage = {\n // deep copy the message to ensure that deep changes (msg attachments) are updated\n // with SolidJS. SolidJS uses referential integration of sub-objects to detect changes.\n ...structuredClone(message),\n // add a revision id to ensure that the message is updated with SWR. SWR uses a\n // hashing approach by default to detect changes, but it only works for shallow\n // changes. This is why we need to add a revision id to ensure that the message\n // is updated with SWR (without it, the changes get stuck in SWR and are not\n // forwarded to rendering):\n revisionId: generateId2()\n };\n update({\n message: copiedMessage,\n data: copiedData,\n replaceLastMessage\n });\n }\n await processDataStream({\n stream,\n onTextPart(value) {\n if (currentTextPart == null) {\n currentTextPart = {\n type: \"text\",\n text: value\n };\n message.parts.push(currentTextPart);\n } else {\n currentTextPart.text += value;\n }\n message.content += value;\n execUpdate();\n },\n onReasoningPart(value) {\n var _a2;\n if (currentReasoningTextDetail == null) {\n currentReasoningTextDetail = { type: \"text\", text: value };\n if (currentReasoningPart != null) {\n currentReasoningPart.details.push(currentReasoningTextDetail);\n }\n } else {\n currentReasoningTextDetail.text += value;\n }\n if (currentReasoningPart == null) {\n currentReasoningPart = {\n type: \"reasoning\",\n reasoning: value,\n details: [currentReasoningTextDetail]\n };\n message.parts.push(currentReasoningPart);\n } else {\n currentReasoningPart.reasoning += value;\n }\n message.reasoning = ((_a2 = message.reasoning) != null ? _a2 : \"\") + value;\n execUpdate();\n },\n onReasoningSignaturePart(value) {\n if (currentReasoningTextDetail != null) {\n currentReasoningTextDetail.signature = value.signature;\n }\n },\n onRedactedReasoningPart(value) {\n if (currentReasoningPart == null) {\n currentReasoningPart = {\n type: \"reasoning\",\n reasoning: \"\",\n details: []\n };\n message.parts.push(currentReasoningPart);\n }\n currentReasoningPart.details.push({\n type: \"redacted\",\n data: value.data\n });\n currentReasoningTextDetail = void 0;\n execUpdate();\n },\n onFilePart(value) {\n message.parts.push({\n type: \"file\",\n mimeType: value.mimeType,\n data: value.data\n });\n execUpdate();\n },\n onSourcePart(value) {\n message.parts.push({\n type: \"source\",\n source: value\n });\n execUpdate();\n },\n onToolCallStreamingStartPart(value) {\n if (message.toolInvocations == null) {\n message.toolInvocations = [];\n }\n partialToolCalls[value.toolCallId] = {\n text: \"\",\n step,\n toolName: value.toolName,\n index: message.toolInvocations.length\n };\n const invocation = {\n state: \"partial-call\",\n step,\n toolCallId: value.toolCallId,\n toolName: value.toolName,\n args: void 0\n };\n message.toolInvocations.push(invocation);\n updateToolInvocationPart(value.toolCallId, invocation);\n execUpdate();\n },\n onToolCallDeltaPart(value) {\n const partialToolCall = partialToolCalls[value.toolCallId];\n partialToolCall.text += value.argsTextDelta;\n const { value: partialArgs } = parsePartialJson(partialToolCall.text);\n const invocation = {\n state: \"partial-call\",\n step: partialToolCall.step,\n toolCallId: value.toolCallId,\n toolName: partialToolCall.toolName,\n args: partialArgs\n };\n message.toolInvocations[partialToolCall.index] = invocation;\n updateToolInvocationPart(value.toolCallId, invocation);\n execUpdate();\n },\n async onToolCallPart(value) {\n const invocation = {\n state: \"call\",\n step,\n ...value\n };\n if (partialToolCalls[value.toolCallId] != null) {\n message.toolInvocations[partialToolCalls[value.toolCallId].index] = invocation;\n } else {\n if (message.toolInvocations == null) {\n message.toolInvocations = [];\n }\n message.toolInvocations.push(invocation);\n }\n updateToolInvocationPart(value.toolCallId, invocation);\n execUpdate();\n if (onToolCall) {\n const result = await onToolCall({ toolCall: value });\n if (result != null) {\n const invocation2 = {\n state: \"result\",\n step,\n ...value,\n result\n };\n message.toolInvocations[message.toolInvocations.length - 1] = invocation2;\n updateToolInvocationPart(value.toolCallId, invocation2);\n execUpdate();\n }\n }\n },\n onToolResultPart(value) {\n const toolInvocations = message.toolInvocations;\n if (toolInvocations == null) {\n throw new Error(\"tool_result must be preceded by a tool_call\");\n }\n const toolInvocationIndex = toolInvocations.findIndex(\n (invocation2) => invocation2.toolCallId === value.toolCallId\n );\n if (toolInvocationIndex === -1) {\n throw new Error(\n \"tool_result must be preceded by a tool_call with the same toolCallId\"\n );\n }\n const invocation = {\n ...toolInvocations[toolInvocationIndex],\n state: \"result\",\n ...value\n };\n toolInvocations[toolInvocationIndex] = invocation;\n updateToolInvocationPart(value.toolCallId, invocation);\n execUpdate();\n },\n onDataPart(value) {\n data.push(...value);\n execUpdate();\n },\n onMessageAnnotationsPart(value) {\n if (messageAnnotations == null) {\n messageAnnotations = [...value];\n } else {\n messageAnnotations.push(...value);\n }\n execUpdate();\n },\n onFinishStepPart(value) {\n step += 1;\n currentTextPart = value.isContinued ? currentTextPart : void 0;\n currentReasoningPart = void 0;\n currentReasoningTextDetail = void 0;\n },\n onStartStepPart(value) {\n if (!replaceLastMessage) {\n message.id = value.messageId;\n }\n message.parts.push({ type: \"step-start\" });\n execUpdate();\n },\n onFinishMessagePart(value) {\n finishReason = value.finishReason;\n if (value.usage != null) {\n usage = calculateLanguageModelUsage(value.usage);\n }\n },\n onErrorPart(error) {\n throw new Error(error);\n }\n });\n onFinish == null ? void 0 : onFinish({ message, finishReason, usage });\n}\n\n// src/process-chat-text-response.ts\nimport { generateId as generateIdFunction2 } from \"@ai-sdk/provider-utils\";\n\n// src/process-text-stream.ts\nasync function processTextStream({\n stream,\n onTextPart\n}) {\n const reader = stream.pipeThrough(new TextDecoderStream()).getReader();\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n await onTextPart(value);\n }\n}\n\n// src/process-chat-text-response.ts\nasync function processChatTextResponse({\n stream,\n update,\n onFinish,\n getCurrentDate = () => /* @__PURE__ */ new Date(),\n generateId: generateId2 = generateIdFunction2\n}) {\n const textPart = { type: \"text\", text: \"\" };\n const resultMessage = {\n id: generateId2(),\n createdAt: getCurrentDate(),\n role: \"assistant\",\n content: \"\",\n parts: [textPart]\n };\n await processTextStream({\n stream,\n onTextPart: (chunk) => {\n resultMessage.content += chunk;\n textPart.text += chunk;\n update({\n message: { ...resultMessage },\n data: [],\n replaceLastMessage: false\n });\n }\n });\n onFinish == null ? void 0 : onFinish(resultMessage, {\n usage: { completionTokens: NaN, promptTokens: NaN, totalTokens: NaN },\n finishReason: \"unknown\"\n });\n}\n\n// src/call-chat-api.ts\nvar getOriginalFetch = () => fetch;\nasync function callChatApi({\n api,\n body,\n streamProtocol = \"data\",\n credentials,\n headers,\n abortController,\n restoreMessagesOnFailure,\n onResponse,\n onUpdate,\n onFinish,\n onToolCall,\n generateId: generateId2,\n fetch: fetch2 = getOriginalFetch(),\n lastMessage,\n requestType = \"generate\"\n}) {\n var _a, _b, _c;\n const request = requestType === \"resume\" ? fetch2(`${api}?chatId=${body.id}`, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers\n },\n signal: (_a = abortController == null ? void 0 : abortController()) == null ? void 0 : _a.signal,\n credentials\n }) : fetch2(api, {\n method: \"POST\",\n body: JSON.stringify(body),\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers\n },\n signal: (_b = abortController == null ? void 0 : abortController()) == null ? void 0 : _b.signal,\n credentials\n });\n const response = await request.catch((err) => {\n restoreMessagesOnFailure();\n throw err;\n });\n if (onResponse) {\n try {\n await onResponse(response);\n } catch (err) {\n throw err;\n }\n }\n if (!response.ok) {\n restoreMessagesOnFailure();\n throw new Error(\n (_c = await response.text()) != null ? _c : \"Failed to fetch the chat response.\"\n );\n }\n if (!response.body) {\n throw new Error(\"The response body is empty.\");\n }\n switch (streamProtocol) {\n case \"text\": {\n await processChatTextResponse({\n stream: response.body,\n update: onUpdate,\n onFinish,\n generateId: generateId2\n });\n return;\n }\n case \"data\": {\n await processChatResponse({\n stream: response.body,\n update: onUpdate,\n lastMessage,\n onToolCall,\n onFinish({ message, finishReason, usage }) {\n if (onFinish && message != null) {\n onFinish(message, { usage, finishReason });\n }\n },\n generateId: generateId2\n });\n return;\n }\n default: {\n const exhaustiveCheck = streamProtocol;\n throw new Error(`Unknown stream protocol: ${exhaustiveCheck}`);\n }\n }\n}\n\n// src/call-completion-api.ts\nvar getOriginalFetch2 = () => fetch;\nasync function callCompletionApi({\n api,\n prompt,\n credentials,\n headers,\n body,\n streamProtocol = \"data\",\n setCompletion,\n setLoading,\n setError,\n setAbortController,\n onResponse,\n onFinish,\n onError,\n onData,\n fetch: fetch2 = getOriginalFetch2()\n}) {\n var _a;\n try {\n setLoading(true);\n setError(void 0);\n const abortController = new AbortController();\n setAbortController(abortController);\n setCompletion(\"\");\n const response = await fetch2(api, {\n method: \"POST\",\n body: JSON.stringify({\n prompt,\n ...body\n }),\n credentials,\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers\n },\n signal: abortController.signal\n }).catch((err) => {\n throw err;\n });\n if (onResponse) {\n try {\n await onResponse(response);\n } catch (err) {\n throw err;\n }\n }\n if (!response.ok) {\n throw new Error(\n (_a = await response.text()) != null ? _a : \"Failed to fetch the chat response.\"\n );\n }\n if (!response.body) {\n throw new Error(\"The response body is empty.\");\n }\n let result = \"\";\n switch (streamProtocol) {\n case \"text\": {\n await processTextStream({\n stream: response.body,\n onTextPart: (chunk) => {\n result += chunk;\n setCompletion(result);\n }\n });\n break;\n }\n case \"data\": {\n await processDataStream({\n stream: response.body,\n onTextPart(value) {\n result += value;\n setCompletion(result);\n },\n onDataPart(value) {\n onData == null ? void 0 : onData(value);\n },\n onErrorPart(value) {\n throw new Error(value);\n }\n });\n break;\n }\n default: {\n const exhaustiveCheck = streamProtocol;\n throw new Error(`Unknown stream protocol: ${exhaustiveCheck}`);\n }\n }\n if (onFinish) {\n onFinish(prompt, result);\n }\n setAbortController(null);\n return result;\n } catch (err) {\n if (err.name === \"AbortError\") {\n setAbortController(null);\n return null;\n }\n if (err instanceof Error) {\n if (onError) {\n onError(err);\n }\n }\n setError(err);\n } finally {\n setLoading(false);\n }\n}\n\n// src/data-url.ts\nfunction getTextFromDataUrl(dataUrl) {\n const [header, base64Content] = dataUrl.split(\",\");\n const mimeType = header.split(\";\")[0].split(\":\")[1];\n if (mimeType == null || base64Content == null) {\n throw new Error(\"Invalid data URL format\");\n }\n try {\n return window.atob(base64Content);\n } catch (error) {\n throw new Error(`Error decoding data URL`);\n }\n}\n\n// src/extract-max-tool-invocation-step.ts\nfunction extractMaxToolInvocationStep(toolInvocations) {\n return toolInvocations == null ? void 0 : toolInvocations.reduce((max, toolInvocation) => {\n var _a;\n return Math.max(max, (_a = toolInvocation.step) != null ? _a : 0);\n }, 0);\n}\n\n// src/get-message-parts.ts\nfunction getMessageParts(message) {\n var _a;\n return (_a = message.parts) != null ? _a : [\n ...message.toolInvocations ? message.toolInvocations.map((toolInvocation) => ({\n type: \"tool-invocation\",\n toolInvocation\n })) : [],\n ...message.reasoning ? [\n {\n type: \"reasoning\",\n reasoning: message.reasoning,\n details: [{ type: \"text\", text: message.reasoning }]\n }\n ] : [],\n ...message.content ? [{ type: \"text\", text: message.content }] : []\n ];\n}\n\n// src/fill-message-parts.ts\nfunction fillMessageParts(messages) {\n return messages.map((message) => ({\n ...message,\n parts: getMessageParts(message)\n }));\n}\n\n// src/is-deep-equal-data.ts\nfunction isDeepEqualData(obj1, obj2) {\n if (obj1 === obj2)\n return true;\n if (obj1 == null || obj2 == null)\n return false;\n if (typeof obj1 !== \"object\" && typeof obj2 !== \"object\")\n return obj1 === obj2;\n if (obj1.constructor !== obj2.constructor)\n return false;\n if (obj1 instanceof Date && obj2 instanceof Date) {\n return obj1.getTime() === obj2.getTime();\n }\n if (Array.isArray(obj1)) {\n if (obj1.length !== obj2.length)\n return false;\n for (let i = 0; i < obj1.length; i++) {\n if (!isDeepEqualData(obj1[i], obj2[i]))\n return false;\n }\n return true;\n }\n const keys1 = Object.keys(obj1);\n const keys2 = Object.keys(obj2);\n if (keys1.length !== keys2.length)\n return false;\n for (const key of keys1) {\n if (!keys2.includes(key))\n return false;\n if (!isDeepEqualData(obj1[key], obj2[key]))\n return false;\n }\n return true;\n}\n\n// src/prepare-attachments-for-request.ts\nasync function prepareAttachmentsForRequest(attachmentsFromOptions) {\n if (!attachmentsFromOptions) {\n return [];\n }\n if (globalThis.FileList && attachmentsFromOptions instanceof globalThis.FileList) {\n return Promise.all(\n Array.from(attachmentsFromOptions).map(async (attachment) => {\n const { name, type } = attachment;\n const dataUrl = await new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = (readerEvent) => {\n var _a;\n resolve((_a = readerEvent.target) == null ? void 0 : _a.result);\n };\n reader.onerror = (error) => reject(error);\n reader.readAsDataURL(attachment);\n });\n return {\n name,\n contentType: type,\n url: dataUrl\n };\n })\n );\n }\n if (Array.isArray(attachmentsFromOptions)) {\n return attachmentsFromOptions;\n }\n throw new Error(\"Invalid attachments type\");\n}\n\n// src/process-assistant-stream.ts\nvar NEWLINE2 = \"\\n\".charCodeAt(0);\nfunction concatChunks2(chunks, totalLength) {\n const concatenatedChunks = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of chunks) {\n concatenatedChunks.set(chunk, offset);\n offset += chunk.length;\n }\n chunks.length = 0;\n return concatenatedChunks;\n}\nasync function processAssistantStream({\n stream,\n onTextPart,\n onErrorPart,\n onAssistantMessagePart,\n onAssistantControlDataPart,\n onDataMessagePart\n}) {\n const reader = stream.getReader();\n const decoder = new TextDecoder();\n const chunks = [];\n let totalLength = 0;\n while (true) {\n const { value } = await reader.read();\n if (value) {\n chunks.push(value);\n totalLength += value.length;\n if (value[value.length - 1] !== NEWLINE2) {\n continue;\n }\n }\n if (chunks.length === 0) {\n break;\n }\n const concatenatedChunks = concatChunks2(chunks, totalLength);\n totalLength = 0;\n const streamParts = decoder.decode(concatenatedChunks, { stream: true }).split(\"\\n\").filter((line) => line !== \"\").map(parseAssistantStreamPart);\n for (const { type, value: value2 } of streamParts) {\n switch (type) {\n case \"text\":\n await (onTextPart == null ? void 0 : onTextPart(value2));\n break;\n case \"error\":\n await (onErrorPart == null ? void 0 : onErrorPart(value2));\n break;\n case \"assistant_message\":\n await (onAssistantMessagePart == null ? void 0 : onAssistantMessagePart(value2));\n break;\n case \"assistant_control_data\":\n await (onAssistantControlDataPart == null ? void 0 : onAssistantControlDataPart(value2));\n break;\n case \"data_message\":\n await (onDataMessagePart == null ? void 0 : onDataMessagePart(value2));\n break;\n default: {\n const exhaustiveCheck = type;\n throw new Error(`Unknown stream part type: ${exhaustiveCheck}`);\n }\n }\n }\n }\n}\n\n// src/schema.ts\nimport { validatorSymbol } from \"@ai-sdk/provider-utils\";\n\n// src/zod-schema.ts\nimport zodToJsonSchema from \"zod-to-json-schema\";\nfunction zodSchema(zodSchema2, options) {\n var _a;\n const useReferences = (_a = options == null ? void 0 : options.useReferences) != null ? _a : false;\n return jsonSchema(\n zodToJsonSchema(zodSchema2, {\n $refStrategy: useReferences ? \"root\" : \"none\",\n target: \"jsonSchema7\"\n // note: openai mode breaks various gemini conversions\n }),\n {\n validate: (value) => {\n const result = zodSchema2.safeParse(value);\n return result.success ? { success: true, value: result.data } : { success: false, error: result.error };\n }\n }\n );\n}\n\n// src/schema.ts\nvar schemaSymbol = Symbol.for(\"vercel.ai.schema\");\nfunction jsonSchema(jsonSchema2, {\n validate\n} = {}) {\n return {\n [schemaSymbol]: true,\n _type: void 0,\n // should never be used directly\n [validatorSymbol]: true,\n jsonSchema: jsonSchema2,\n validate\n };\n}\nfunction isSchema(value) {\n return typeof value === \"object\" && value !== null && schemaSymbol in value && value[schemaSymbol] === true && \"jsonSchema\" in value && \"validate\" in value;\n}\nfunction asSchema(schema) {\n return isSchema(schema) ? schema : zodSchema(schema);\n}\n\n// src/should-resubmit-messages.ts\nfunction shouldResubmitMessages({\n originalMaxToolInvocationStep,\n originalMessageCount,\n maxSteps,\n messages\n}) {\n var _a;\n const lastMessage = messages[messages.length - 1];\n return (\n // check if the feature is enabled:\n maxSteps > 1 && // ensure there is a last message:\n lastMessage != null && // ensure we actually have new steps (to prevent infinite loops in case of errors):\n (messages.length > originalMessageCount || extractMaxToolInvocationStep(lastMessage.toolInvocations) !== originalMaxToolInvocationStep) && // check that next step is possible:\n isAssistantMessageWithCompletedToolCalls(lastMessage) && // limit the number of automatic steps:\n ((_a = extractMaxToolInvocationStep(lastMessage.toolInvocations)) != null ? _a : 0) < maxSteps\n );\n}\nfunction isAssistantMessageWithCompletedToolCalls(message) {\n if (message.role !== \"assistant\") {\n return false;\n }\n const lastStepStartIndex = message.parts.reduce((lastIndex, part, index) => {\n return part.type === \"step-start\" ? index : lastIndex;\n }, -1);\n const lastStepToolInvocations = message.parts.slice(lastStepStartIndex + 1).filter((part) => part.type === \"tool-invocation\");\n return lastStepToolInvocations.length > 0 && lastStepToolInvocations.every((part) => \"result\" in part.toolInvocation);\n}\n\n// src/update-tool-call-result.ts\nfunction updateToolCallResult({\n messages,\n toolCallId,\n toolResult: result\n}) {\n var _a;\n const lastMessage = messages[messages.length - 1];\n const invocationPart = lastMessage.parts.find(\n (part) => part.type === \"tool-invocation\" && part.toolInvocation.toolCallId === toolCallId\n );\n if (invocationPart == null) {\n return;\n }\n const toolResult = {\n ...invocationPart.toolInvocation,\n state: \"result\",\n result\n };\n invocationPart.toolInvocation = toolResult;\n lastMessage.toolInvocations = (_a = lastMessage.toolInvocations) == null ? void 0 : _a.map(\n (toolInvocation) => toolInvocation.toolCallId === toolCallId ? toolResult : toolInvocation\n );\n}\nexport {\n asSchema,\n callChatApi,\n callCompletionApi,\n extractMaxToolInvocationStep,\n fillMessageParts,\n formatAssistantStreamPart,\n formatDataStreamPart,\n generateId,\n getMessageParts,\n getTextFromDataUrl,\n isAssistantMessageWithCompletedToolCalls,\n isDeepEqualData,\n jsonSchema,\n parseAssistantStreamPart,\n parseDataStreamPart,\n parsePartialJson,\n prepareAttachmentsForRequest,\n processAssistantStream,\n processDataStream,\n processTextStream,\n shouldResubmitMessages,\n updateToolCallResult,\n zodSchema\n};\n//# sourceMappingURL=index.mjs.map","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n var value = getSnapshot(),\n _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n}\nvar shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","var has = Object.prototype.hasOwnProperty;\n\nexport function dequal(foo, bar) {\n\tvar ctor, len;\n\tif (foo === bar) return true;\n\n\tif (foo && bar && (ctor=foo.constructor) === bar.constructor) {\n\t\tif (ctor === Date) return foo.getTime() === bar.getTime();\n\t\tif (ctor === RegExp) return foo.toString() === bar.toString();\n\n\t\tif (ctor === Array) {\n\t\t\tif ((len=foo.length) === bar.length) {\n\t\t\t\twhile (len-- && dequal(foo[len], bar[len]));\n\t\t\t}\n\t\t\treturn len === -1;\n\t\t}\n\n\t\tif (!ctor || typeof foo === 'object') {\n\t\t\tlen = 0;\n\t\t\tfor (ctor in foo) {\n\t\t\t\tif (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;\n\t\t\t\tif (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false;\n\t\t\t}\n\t\t\treturn Object.keys(bar).length === len;\n\t\t}\n\t}\n\n\treturn foo !== foo && bar !== bar;\n}\n","'use client';\nimport React, { useEffect, useLayoutEffect, createContext, useContext, useMemo, useRef, createElement } from 'react';\nimport * as revalidateEvents from './events.mjs';\nimport { dequal } from 'dequal/lite';\n\n// Global state used to deduplicate requests and store listeners\nconst SWRGlobalState = new WeakMap();\n\n// Shared state between server components and client components\nconst noop = ()=>{};\n// Using noop() as the undefined value as undefined can be replaced\n// by something else. Prettier ignore and extra parentheses are necessary here\n// to ensure that tsc doesn't remove the __NOINLINE__ comment.\n// prettier-ignore\nconst UNDEFINED = /*#__NOINLINE__*/ noop();\nconst OBJECT = Object;\nconst isUndefined = (v)=>v === UNDEFINED;\nconst isFunction = (v)=>typeof v == 'function';\nconst mergeObjects = (a, b)=>({\n ...a,\n ...b\n });\nconst isPromiseLike = (x)=>isFunction(x.then);\n\nconst EMPTY_CACHE = {};\nconst INITIAL_CACHE = {};\nconst STR_UNDEFINED = 'undefined';\n// NOTE: Use the function to guarantee it's re-evaluated between jsdom and node runtime for tests.\nconst isWindowDefined = typeof window != STR_UNDEFINED;\nconst isDocumentDefined = typeof document != STR_UNDEFINED;\nconst isLegacyDeno = isWindowDefined && 'Deno' in window;\nconst hasRequestAnimationFrame = ()=>isWindowDefined && typeof window['requestAnimationFrame'] != STR_UNDEFINED;\nconst createCacheHelper = (cache, key)=>{\n const state = SWRGlobalState.get(cache);\n return [\n // Getter\n ()=>!isUndefined(key) && cache.get(key) || EMPTY_CACHE,\n // Setter\n (info)=>{\n if (!isUndefined(key)) {\n const prev = cache.get(key);\n // Before writing to the store, we keep the value in the initial cache\n // if it's not there yet.\n if (!(key in INITIAL_CACHE)) {\n INITIAL_CACHE[key] = prev;\n }\n state[5](key, mergeObjects(prev, info), prev || EMPTY_CACHE);\n }\n },\n // Subscriber\n state[6],\n // Get server cache snapshot\n ()=>{\n if (!isUndefined(key)) {\n // If the cache was updated on the client, we return the stored initial value.\n if (key in INITIAL_CACHE) return INITIAL_CACHE[key];\n }\n // If we haven't done any client-side updates, we return the current value.\n return !isUndefined(key) && cache.get(key) || EMPTY_CACHE;\n }\n ];\n} // export { UNDEFINED, OBJECT, isUndefined, isFunction, mergeObjects, isPromiseLike }\n;\n\n/**\n * Due to the bug https://bugs.chromium.org/p/chromium/issues/detail?id=678075,\n * it's not reliable to detect if the browser is currently online or offline\n * based on `navigator.onLine`.\n * As a workaround, we always assume it's online on the first load, and change\n * the status upon `online` or `offline` events.\n */ let online = true;\nconst isOnline = ()=>online;\n// For node and React Native, `add/removeEventListener` doesn't exist on window.\nconst [onWindowEvent, offWindowEvent] = isWindowDefined && window.addEventListener ? [\n window.addEventListener.bind(window),\n window.removeEventListener.bind(window)\n] : [\n noop,\n noop\n];\nconst isVisible = ()=>{\n const visibilityState = isDocumentDefined && document.visibilityState;\n return isUndefined(visibilityState) || visibilityState !== 'hidden';\n};\nconst initFocus = (callback)=>{\n // focus revalidate\n if (isDocumentDefined) {\n document.addEventListener('visibilitychange', callback);\n }\n onWindowEvent('focus', callback);\n return ()=>{\n if (isDocumentDefined) {\n document.removeEventListener('visibilitychange', callback);\n }\n offWindowEvent('focus', callback);\n };\n};\nconst initReconnect = (callback)=>{\n // revalidate on reconnected\n const onOnline = ()=>{\n online = true;\n callback();\n };\n // nothing to revalidate, just update the status\n const onOffline = ()=>{\n online = false;\n };\n onWindowEvent('online', onOnline);\n onWindowEvent('offline', onOffline);\n return ()=>{\n offWindowEvent('online', onOnline);\n offWindowEvent('offline', onOffline);\n };\n};\nconst preset = {\n isOnline,\n isVisible\n};\nconst defaultConfigOptions = {\n initFocus,\n initReconnect\n};\n\nconst IS_REACT_LEGACY = !React.useId;\nconst IS_SERVER = !isWindowDefined || isLegacyDeno;\n// Polyfill requestAnimationFrame\nconst rAF = (f)=>hasRequestAnimationFrame() ? window['requestAnimationFrame'](f) : setTimeout(f, 1);\n// React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser.\nconst useIsomorphicLayoutEffect = IS_SERVER ? useEffect : useLayoutEffect;\n// This assignment is to extend the Navigator type to use effectiveType.\nconst navigatorConnection = typeof navigator !== 'undefined' && navigator.connection;\n// Adjust the config based on slow connection status (<= 70Kbps).\nconst slowConnection = !IS_SERVER && navigatorConnection && ([\n 'slow-2g',\n '2g'\n].includes(navigatorConnection.effectiveType) || navigatorConnection.saveData);\n\n// use WeakMap to store the object->key mapping\n// so the objects can be garbage collected.\n// WeakMap uses a hashtable under the hood, so the lookup\n// complexity is almost O(1).\nconst table = new WeakMap();\nconst isObjectType = (value, type)=>OBJECT.prototype.toString.call(value) === `[object ${type}]`;\n// counter of the key\nlet counter = 0;\n// A stable hash implementation that supports:\n// - Fast and ensures unique hash properties\n// - Handles unserializable values\n// - Handles object key ordering\n// - Generates short results\n//\n// This is not a serialization function, and the result is not guaranteed to be\n// parsable.\nconst stableHash = (arg)=>{\n const type = typeof arg;\n const isDate = isObjectType(arg, 'Date');\n const isRegex = isObjectType(arg, 'RegExp');\n const isPlainObject = isObjectType(arg, 'Object');\n let result;\n let index;\n if (OBJECT(arg) === arg && !isDate && !isRegex) {\n // Object/function, not null/date/regexp. Use WeakMap to store the id first.\n // If it's already hashed, directly return the result.\n result = table.get(arg);\n if (result) return result;\n // Store the hash first for circular reference detection before entering the\n // recursive `stableHash` calls.\n // For other objects like set and map, we use this id directly as the hash.\n result = ++counter + '~';\n table.set(arg, result);\n if (Array.isArray(arg)) {\n // Array.\n result = '@';\n for(index = 0; index < arg.length; index++){\n result += stableHash(arg[index]) + ',';\n }\n table.set(arg, result);\n }\n if (isPlainObject) {\n // Object, sort keys.\n result = '#';\n const keys = OBJECT.keys(arg).sort();\n while(!isUndefined(index = keys.pop())){\n if (!isUndefined(arg[index])) {\n result += index + ':' + stableHash(arg[index]) + ',';\n }\n }\n table.set(arg, result);\n }\n } else {\n result = isDate ? arg.toJSON() : type == 'symbol' ? arg.toString() : type == 'string' ? JSON.stringify(arg) : '' + arg;\n }\n return result;\n};\n\nconst serialize = (key)=>{\n if (isFunction(key)) {\n try {\n key = key();\n } catch (err) {\n // dependencies not ready\n key = '';\n }\n }\n // Use the original key as the argument of fetcher. This can be a string or an\n // array of values.\n const args = key;\n // If key is not falsy, or not an empty array, hash it.\n key = typeof key == 'string' ? key : (Array.isArray(key) ? key.length : key) ? stableHash(key) : '';\n return [\n key,\n args\n ];\n};\n\n// Global timestamp.\nlet __timestamp = 0;\nconst getTimestamp = ()=>++__timestamp;\n\nasync function internalMutate(...args) {\n const [cache, _key, _data, _opts] = args;\n // When passing as a boolean, it's explicitly used to disable/enable\n // revalidation.\n const options = mergeObjects({\n populateCache: true,\n throwOnError: true\n }, typeof _opts === 'boolean' ? {\n revalidate: _opts\n } : _opts || {});\n let populateCache = options.populateCache;\n const rollbackOnErrorOption = options.rollbackOnError;\n let optimisticData = options.optimisticData;\n const rollbackOnError = (error)=>{\n return typeof rollbackOnErrorOption === 'function' ? rollbackOnErrorOption(error) : rollbackOnErrorOption !== false;\n };\n const throwOnError = options.throwOnError;\n // If the second argument is a key filter, return the mutation results for all\n // filtered keys.\n if (isFunction(_key)) {\n const keyFilter = _key;\n const matchedKeys = [];\n const it = cache.keys();\n for (const key of it){\n if (// Skip the special useSWRInfinite and useSWRSubscription keys.\n !/^\\$(inf|sub)\\$/.test(key) && keyFilter(cache.get(key)._k)) {\n matchedKeys.push(key);\n }\n }\n return Promise.all(matchedKeys.map(mutateByKey));\n }\n return mutateByKey(_key);\n async function mutateByKey(_k) {\n // Serialize key\n const [key] = serialize(_k);\n if (!key) return;\n const [get, set] = createCacheHelper(cache, key);\n const [EVENT_REVALIDATORS, MUTATION, FETCH, PRELOAD] = SWRGlobalState.get(cache);\n const startRevalidate = ()=>{\n const revalidators = EVENT_REVALIDATORS[key];\n const revalidate = isFunction(options.revalidate) ? options.revalidate(get().data, _k) : options.revalidate !== false;\n if (revalidate) {\n // Invalidate the key by deleting the concurrent request markers so new\n // requests will not be deduped.\n delete FETCH[key];\n delete PRELOAD[key];\n if (revalidators && revalidators[0]) {\n return revalidators[0](revalidateEvents.MUTATE_EVENT).then(()=>get().data);\n }\n }\n return get().data;\n };\n // If there is no new data provided, revalidate the key with current state.\n if (args.length < 3) {\n // Revalidate and broadcast state.\n return startRevalidate();\n }\n let data = _data;\n let error;\n // Update global timestamps.\n const beforeMutationTs = getTimestamp();\n MUTATION[key] = [\n beforeMutationTs,\n 0\n ];\n const hasOptimisticData = !isUndefined(optimisticData);\n const state = get();\n // `displayedData` is the current value on screen. It could be the optimistic value\n // that is going to be overridden by a `committedData`, or get reverted back.\n // `committedData` is the validated value that comes from a fetch or mutation.\n const displayedData = state.data;\n const currentData = state._c;\n const committedData = isUndefined(currentData) ? displayedData : currentData;\n // Do optimistic data update.\n if (hasOptimisticData) {\n optimisticData = isFunction(optimisticData) ? optimisticData(committedData, displayedData) : optimisticData;\n // When we set optimistic data, backup the current committedData data in `_c`.\n set({\n data: optimisticData,\n _c: committedData\n });\n }\n if (isFunction(data)) {\n // `data` is a function, call it passing current cache value.\n try {\n data = data(committedData);\n } catch (err) {\n // If it throws an error synchronously, we shouldn't update the cache.\n error = err;\n }\n }\n // `data` is a promise/thenable, resolve the final data first.\n if (data && isPromiseLike(data)) {\n // This means that the mutation is async, we need to check timestamps to\n // avoid race conditions.\n data = await data.catch((err)=>{\n error = err;\n });\n // Check if other mutations have occurred since we've started this mutation.\n // If there's a race we don't update cache or broadcast the change,\n // just return the data.\n if (beforeMutationTs !== MUTATION[key][0]) {\n if (error) throw error;\n return data;\n } else if (error && hasOptimisticData && rollbackOnError(error)) {\n // Rollback. Always populate the cache in this case but without\n // transforming the data.\n populateCache = true;\n // Reset data to be the latest committed data, and clear the `_c` value.\n set({\n data: committedData,\n _c: UNDEFINED\n });\n }\n }\n // If we should write back the cache after request.\n if (populateCache) {\n if (!error) {\n // Transform the result into data.\n if (isFunction(populateCache)) {\n const populateCachedData = populateCache(data, committedData);\n set({\n data: populateCachedData,\n error: UNDEFINED,\n _c: UNDEFINED\n });\n } else {\n // Only update cached data and reset the error if there's no error. Data can be `undefined` here.\n set({\n data,\n error: UNDEFINED,\n _c: UNDEFINED\n });\n }\n }\n }\n // Reset the timestamp to mark the mutation has ended.\n MUTATION[key][1] = getTimestamp();\n // Update existing SWR Hooks' internal states:\n Promise.resolve(startRevalidate()).then(()=>{\n // The mutation and revalidation are ended, we can clear it since the data is\n // not an optimistic value anymore.\n set({\n _c: UNDEFINED\n });\n });\n // Throw error or return data\n if (error) {\n if (throwOnError) throw error;\n return;\n }\n return data;\n }\n}\n\nconst revalidateAllKeys = (revalidators, type)=>{\n for(const key in revalidators){\n if (revalidators[key][0]) revalidators[key][0](type);\n }\n};\nconst initCache = (provider, options)=>{\n // The global state for a specific provider will be used to deduplicate\n // requests and store listeners. As well as a mutate function that is bound to\n // the cache.\n // The provider's global state might be already initialized. Let's try to get the\n // global state associated with the provider first.\n if (!SWRGlobalState.has(provider)) {\n const opts = mergeObjects(defaultConfigOptions, options);\n // If there's no global state bound to the provider, create a new one with the\n // new mutate function.\n const EVENT_REVALIDATORS = Object.create(null);\n const mutate = internalMutate.bind(UNDEFINED, provider);\n let unmount = noop;\n const subscriptions = Object.create(null);\n const subscribe = (key, callback)=>{\n const subs = subscriptions[key] || [];\n subscriptions[key] = subs;\n subs.push(callback);\n return ()=>subs.splice(subs.indexOf(callback), 1);\n };\n const setter = (key, value, prev)=>{\n provider.set(key, value);\n const subs = subscriptions[key];\n if (subs) {\n for (const fn of subs){\n fn(value, prev);\n }\n }\n };\n const initProvider = ()=>{\n if (!SWRGlobalState.has(provider)) {\n // Update the state if it's new, or if the provider has been extended.\n SWRGlobalState.set(provider, [\n EVENT_REVALIDATORS,\n Object.create(null),\n Object.create(null),\n Object.create(null),\n mutate,\n setter,\n subscribe\n ]);\n if (!IS_SERVER) {\n // When listening to the native events for auto revalidations,\n // we intentionally put a delay (setTimeout) here to make sure they are\n // fired after immediate JavaScript executions, which can be\n // React's state updates.\n // This avoids some unnecessary revalidations such as\n // https://github.com/vercel/swr/issues/1680.\n const releaseFocus = opts.initFocus(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, revalidateEvents.FOCUS_EVENT)));\n const releaseReconnect = opts.initReconnect(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, revalidateEvents.RECONNECT_EVENT)));\n unmount = ()=>{\n releaseFocus && releaseFocus();\n releaseReconnect && releaseReconnect();\n // When un-mounting, we need to remove the cache provider from the state\n // storage too because it's a side-effect. Otherwise, when re-mounting we\n // will not re-register those event listeners.\n SWRGlobalState.delete(provider);\n };\n }\n }\n };\n initProvider();\n // This is a new provider, we need to initialize it and setup DOM events\n // listeners for `focus` and `reconnect` actions.\n // We might want to inject an extra layer on top of `provider` in the future,\n // such as key serialization, auto GC, etc.\n // For now, it's just a `Map` interface without any modifications.\n return [\n provider,\n mutate,\n initProvider,\n unmount\n ];\n }\n return [\n provider,\n SWRGlobalState.get(provider)[4]\n ];\n};\n\n// error retry\nconst onErrorRetry = (_, __, config, revalidate, opts)=>{\n const maxRetryCount = config.errorRetryCount;\n const currentRetryCount = opts.retryCount;\n // Exponential backoff\n const timeout = ~~((Math.random() + 0.5) * (1 << (currentRetryCount < 8 ? currentRetryCount : 8))) * config.errorRetryInterval;\n if (!isUndefined(maxRetryCount) && currentRetryCount > maxRetryCount) {\n return;\n }\n setTimeout(revalidate, timeout, opts);\n};\nconst compare = dequal;\n// Default cache provider\nconst [cache, mutate] = initCache(new Map());\n// Default config\nconst defaultConfig = mergeObjects({\n // events\n onLoadingSlow: noop,\n onSuccess: noop,\n onError: noop,\n onErrorRetry,\n onDiscarded: noop,\n // switches\n revalidateOnFocus: true,\n revalidateOnReconnect: true,\n revalidateIfStale: true,\n shouldRetryOnError: true,\n // timeouts\n errorRetryInterval: slowConnection ? 10000 : 5000,\n focusThrottleInterval: 5 * 1000,\n dedupingInterval: 2 * 1000,\n loadingTimeout: slowConnection ? 5000 : 3000,\n // providers\n compare,\n isPaused: ()=>false,\n cache,\n mutate,\n fallback: {}\n}, // use web preset by default\npreset);\n\nconst mergeConfigs = (a, b)=>{\n // Need to create a new object to avoid mutating the original here.\n const v = mergeObjects(a, b);\n // If two configs are provided, merge their `use` and `fallback` options.\n if (b) {\n const { use: u1, fallback: f1 } = a;\n const { use: u2, fallback: f2 } = b;\n if (u1 && u2) {\n v.use = u1.concat(u2);\n }\n if (f1 && f2) {\n v.fallback = mergeObjects(f1, f2);\n }\n }\n return v;\n};\n\nconst SWRConfigContext = createContext({});\nconst SWRConfig = (props)=>{\n const { value } = props;\n const parentConfig = useContext(SWRConfigContext);\n const isFunctionalConfig = isFunction(value);\n const config = useMemo(()=>isFunctionalConfig ? value(parentConfig) : value, [\n isFunctionalConfig,\n parentConfig,\n value\n ]);\n // Extend parent context values and middleware.\n const extendedConfig = useMemo(()=>isFunctionalConfig ? config : mergeConfigs(parentConfig, config), [\n isFunctionalConfig,\n parentConfig,\n config\n ]);\n // Should not use the inherited provider.\n const provider = config && config.provider;\n // initialize the cache only on first access.\n const cacheContextRef = useRef(UNDEFINED);\n if (provider && !cacheContextRef.current) {\n cacheContextRef.current = initCache(provider(extendedConfig.cache || cache), config);\n }\n const cacheContext = cacheContextRef.current;\n // Override the cache if a new provider is given.\n if (cacheContext) {\n extendedConfig.cache = cacheContext[0];\n extendedConfig.mutate = cacheContext[1];\n }\n // Unsubscribe events.\n useIsomorphicLayoutEffect(()=>{\n if (cacheContext) {\n cacheContext[2] && cacheContext[2]();\n return cacheContext[3];\n }\n }, []);\n return createElement(SWRConfigContext.Provider, mergeObjects(props, {\n value: extendedConfig\n }));\n};\n\nexport { noop as A, isPromiseLike as B, IS_REACT_LEGACY as I, OBJECT as O, SWRConfigContext as S, UNDEFINED as U, isFunction as a, SWRGlobalState as b, cache as c, defaultConfig as d, isUndefined as e, mergeConfigs as f, SWRConfig as g, initCache as h, isWindowDefined as i, mutate as j, compare as k, stableHash as l, mergeObjects as m, internalMutate as n, getTimestamp as o, preset as p, defaultConfigOptions as q, IS_SERVER as r, serialize as s, rAF as t, useIsomorphicLayoutEffect as u, slowConnection as v, isDocumentDefined as w, isLegacyDeno as x, hasRequestAnimationFrame as y, createCacheHelper as z };\n","const FOCUS_EVENT = 0;\nconst RECONNECT_EVENT = 1;\nconst MUTATE_EVENT = 2;\nconst ERROR_REVALIDATE_EVENT = 3;\n\nexport { ERROR_REVALIDATE_EVENT, FOCUS_EVENT, MUTATE_EVENT, RECONNECT_EVENT };\n","import { i as isWindowDefined, a as isFunction, m as mergeObjects, S as SWRConfigContext, d as defaultConfig, s as serialize, b as SWRGlobalState, c as cache, e as isUndefined, f as mergeConfigs } from './config-context-client-v7VOFo66.mjs';\nexport { I as IS_REACT_LEGACY, r as IS_SERVER, O as OBJECT, g as SWRConfig, U as UNDEFINED, k as compare, z as createCacheHelper, q as defaultConfigOptions, o as getTimestamp, y as hasRequestAnimationFrame, h as initCache, n as internalMutate, w as isDocumentDefined, x as isLegacyDeno, B as isPromiseLike, j as mutate, A as noop, p as preset, t as rAF, v as slowConnection, l as stableHash, u as useIsomorphicLayoutEffect } from './config-context-client-v7VOFo66.mjs';\nimport * as revalidateEvents from './events.mjs';\nexport { revalidateEvents };\nimport { INFINITE_PREFIX } from './constants.mjs';\nexport { INFINITE_PREFIX } from './constants.mjs';\nimport React, { useContext } from 'react';\nexport * from './types.mjs';\n\n// @ts-expect-error\nconst enableDevtools = isWindowDefined && window.__SWR_DEVTOOLS_USE__;\nconst use = enableDevtools ? window.__SWR_DEVTOOLS_USE__ : [];\nconst setupDevTools = ()=>{\n if (enableDevtools) {\n // @ts-expect-error\n window.__SWR_DEVTOOLS_REACT__ = React;\n }\n};\n\nconst normalize = (args)=>{\n return isFunction(args[1]) ? [\n args[0],\n args[1],\n args[2] || {}\n ] : [\n args[0],\n null,\n (args[1] === null ? args[2] : args[1]) || {}\n ];\n};\n\nconst useSWRConfig = ()=>{\n return mergeObjects(defaultConfig, useContext(SWRConfigContext));\n};\n\nconst preload = (key_, fetcher)=>{\n const [key, fnArg] = serialize(key_);\n const [, , , PRELOAD] = SWRGlobalState.get(cache);\n // Prevent preload to be called multiple times before used.\n if (PRELOAD[key]) return PRELOAD[key];\n const req = fetcher(fnArg);\n PRELOAD[key] = req;\n return req;\n};\nconst middleware = (useSWRNext)=>(key_, fetcher_, config)=>{\n // fetcher might be a sync function, so this should not be an async function\n const fetcher = fetcher_ && ((...args)=>{\n const [key] = serialize(key_);\n const [, , , PRELOAD] = SWRGlobalState.get(cache);\n if (key.startsWith(INFINITE_PREFIX)) {\n // we want the infinite fetcher to be called.\n // handling of the PRELOAD cache happens there.\n return fetcher_(...args);\n }\n const req = PRELOAD[key];\n if (isUndefined(req)) return fetcher_(...args);\n delete PRELOAD[key];\n return req;\n });\n return useSWRNext(key_, fetcher, config);\n };\n\nconst BUILT_IN_MIDDLEWARE = use.concat(middleware);\n\n// It's tricky to pass generic types as parameters, so we just directly override\n// the types here.\nconst withArgs = (hook)=>{\n return function useSWRArgs(...args) {\n // Get the default and inherited configuration.\n const fallbackConfig = useSWRConfig();\n // Normalize arguments.\n const [key, fn, _config] = normalize(args);\n // Merge configurations.\n const config = mergeConfigs(fallbackConfig, _config);\n // Apply middleware\n let next = hook;\n const { use } = config;\n const middleware = (use || []).concat(BUILT_IN_MIDDLEWARE);\n for(let i = middleware.length; i--;){\n next = middleware[i](next);\n }\n return next(key, fn || config.fetcher || null, config);\n };\n};\n\n// Add a callback function to a list of keyed callback functions and return\n// the unsubscribe function.\nconst subscribeCallback = (key, callbacks, callback)=>{\n const keyedRevalidators = callbacks[key] || (callbacks[key] = []);\n keyedRevalidators.push(callback);\n return ()=>{\n const index = keyedRevalidators.indexOf(callback);\n if (index >= 0) {\n // O(1): faster than splice\n keyedRevalidators[index] = keyedRevalidators[keyedRevalidators.length - 1];\n keyedRevalidators.pop();\n }\n };\n};\n\n// Create a custom hook with a middleware\nconst withMiddleware = (useSWR, middleware)=>{\n return (...args)=>{\n const [key, fn, config] = normalize(args);\n const uses = (config.use || []).concat(middleware);\n return useSWR(key, fn, {\n ...config,\n use: uses\n });\n };\n};\n\nsetupDevTools();\n\nexport { SWRGlobalState, cache, defaultConfig, isFunction, isUndefined, isWindowDefined, mergeConfigs, mergeObjects, normalize, preload, serialize, subscribeCallback, useSWRConfig, withArgs, withMiddleware };\n","const INFINITE_PREFIX = '$inf$';\n\nexport { INFINITE_PREFIX };\n","import React, { useRef, useMemo, useCallback, useDebugValue } from 'react';\nimport { useSyncExternalStore } from 'use-sync-external-store/shim/index.js';\nimport { OBJECT as OBJECT$1, SWRConfig as SWRConfig$1, defaultConfig, withArgs, SWRGlobalState, serialize as serialize$1, createCacheHelper, isUndefined as isUndefined$1, UNDEFINED as UNDEFINED$1, isPromiseLike, getTimestamp, isFunction as isFunction$1, revalidateEvents, internalMutate, useIsomorphicLayoutEffect, subscribeCallback, IS_SERVER, rAF, IS_REACT_LEGACY, mergeObjects } from '../_internal/index.mjs';\nexport { mutate, preload, useSWRConfig } from '../_internal/index.mjs';\n\n// Shared state between server components and client components\nconst noop = ()=>{};\n// Using noop() as the undefined value as undefined can be replaced\n// by something else. Prettier ignore and extra parentheses are necessary here\n// to ensure that tsc doesn't remove the __NOINLINE__ comment.\n// prettier-ignore\nconst UNDEFINED = /*#__NOINLINE__*/ noop();\nconst OBJECT = Object;\nconst isUndefined = (v)=>v === UNDEFINED;\nconst isFunction = (v)=>typeof v == 'function';\n\n// use WeakMap to store the object->key mapping\n// so the objects can be garbage collected.\n// WeakMap uses a hashtable under the hood, so the lookup\n// complexity is almost O(1).\nconst table = new WeakMap();\nconst isObjectType = (value, type)=>OBJECT.prototype.toString.call(value) === `[object ${type}]`;\n// counter of the key\nlet counter = 0;\n// A stable hash implementation that supports:\n// - Fast and ensures unique hash properties\n// - Handles unserializable values\n// - Handles object key ordering\n// - Generates short results\n//\n// This is not a serialization function, and the result is not guaranteed to be\n// parsable.\nconst stableHash = (arg)=>{\n const type = typeof arg;\n const isDate = isObjectType(arg, 'Date');\n const isRegex = isObjectType(arg, 'RegExp');\n const isPlainObject = isObjectType(arg, 'Object');\n let result;\n let index;\n if (OBJECT(arg) === arg && !isDate && !isRegex) {\n // Object/function, not null/date/regexp. Use WeakMap to store the id first.\n // If it's already hashed, directly return the result.\n result = table.get(arg);\n if (result) return result;\n // Store the hash first for circular reference detection before entering the\n // recursive `stableHash` calls.\n // For other objects like set and map, we use this id directly as the hash.\n result = ++counter + '~';\n table.set(arg, result);\n if (Array.isArray(arg)) {\n // Array.\n result = '@';\n for(index = 0; index < arg.length; index++){\n result += stableHash(arg[index]) + ',';\n }\n table.set(arg, result);\n }\n if (isPlainObject) {\n // Object, sort keys.\n result = '#';\n const keys = OBJECT.keys(arg).sort();\n while(!isUndefined(index = keys.pop())){\n if (!isUndefined(arg[index])) {\n result += index + ':' + stableHash(arg[index]) + ',';\n }\n }\n table.set(arg, result);\n }\n } else {\n result = isDate ? arg.toJSON() : type == 'symbol' ? arg.toString() : type == 'string' ? JSON.stringify(arg) : '' + arg;\n }\n return result;\n};\n\nconst serialize = (key)=>{\n if (isFunction(key)) {\n try {\n key = key();\n } catch (err) {\n // dependencies not ready\n key = '';\n }\n }\n // Use the original key as the argument of fetcher. This can be a string or an\n // array of values.\n const args = key;\n // If key is not falsy, or not an empty array, hash it.\n key = typeof key == 'string' ? key : (Array.isArray(key) ? key.length : key) ? stableHash(key) : '';\n return [\n key,\n args\n ];\n};\n\nconst unstable_serialize = (key)=>serialize(key)[0];\n\n/// <reference types=\"react/experimental\" />\nconst use = React.use || // This extra generic is to avoid TypeScript mixing up the generic and JSX sytax\n// and emitting an error.\n// We assume that this is only for the `use(thenable)` case, not `use(context)`.\n// https://github.com/facebook/react/blob/aed00dacfb79d17c53218404c52b1c7aa59c4a89/packages/react-server/src/ReactFizzThenable.js#L45\n((thenable)=>{\n switch(thenable.status){\n case 'pending':\n throw thenable;\n case 'fulfilled':\n return thenable.value;\n case 'rejected':\n throw thenable.reason;\n default:\n thenable.status = 'pending';\n thenable.then((v)=>{\n thenable.status = 'fulfilled';\n thenable.value = v;\n }, (e)=>{\n thenable.status = 'rejected';\n thenable.reason = e;\n });\n throw thenable;\n }\n});\nconst WITH_DEDUPE = {\n dedupe: true\n};\nconst useSWRHandler = (_key, fetcher, config)=>{\n const { cache, compare, suspense, fallbackData, revalidateOnMount, revalidateIfStale, refreshInterval, refreshWhenHidden, refreshWhenOffline, keepPreviousData } = config;\n const [EVENT_REVALIDATORS, MUTATION, FETCH, PRELOAD] = SWRGlobalState.get(cache);\n // `key` is the identifier of the SWR internal state,\n // `fnArg` is the argument/arguments parsed from the key, which will be passed\n // to the fetcher.\n // All of them are derived from `_key`.\n const [key, fnArg] = serialize$1(_key);\n // If it's the initial render of this hook.\n const initialMountedRef = useRef(false);\n // If the hook is unmounted already. This will be used to prevent some effects\n // to be called after unmounting.\n const unmountedRef = useRef(false);\n // Refs to keep the key and config.\n const keyRef = useRef(key);\n const fetcherRef = useRef(fetcher);\n const configRef = useRef(config);\n const getConfig = ()=>configRef.current;\n const isActive = ()=>getConfig().isVisible() && getConfig().isOnline();\n const [getCache, setCache, subscribeCache, getInitialCache] = createCacheHelper(cache, key);\n const stateDependencies = useRef({}).current;\n // Resolve the fallback data from either the inline option, or the global provider.\n // If it's a promise, we simply let React suspend and resolve it for us.\n const fallback = isUndefined$1(fallbackData) ? isUndefined$1(config.fallback) ? UNDEFINED$1 : config.fallback[key] : fallbackData;\n const isEqual = (prev, current)=>{\n for(const _ in stateDependencies){\n const t = _;\n if (t === 'data') {\n if (!compare(prev[t], current[t])) {\n if (!isUndefined$1(prev[t])) {\n return false;\n }\n if (!compare(returnedData, current[t])) {\n return false;\n }\n }\n } else {\n if (current[t] !== prev[t]) {\n return false;\n }\n }\n }\n return true;\n };\n const getSnapshot = useMemo(()=>{\n const shouldStartRequest = (()=>{\n if (!key) return false;\n if (!fetcher) return false;\n // If `revalidateOnMount` is set, we take the value directly.\n if (!isUndefined$1(revalidateOnMount)) return revalidateOnMount;\n // If it's paused, we skip revalidation.\n if (getConfig().isPaused()) return false;\n if (suspense) return false;\n return revalidateIfStale !== false;\n })();\n // Get the cache and merge it with expected states.\n const getSelectedCache = (state)=>{\n // We only select the needed fields from the state.\n const snapshot = mergeObjects(state);\n delete snapshot._k;\n if (!shouldStartRequest) {\n return snapshot;\n }\n return {\n isValidating: true,\n isLoading: true,\n ...snapshot\n };\n };\n const cachedData = getCache();\n const initialData = getInitialCache();\n const clientSnapshot = getSelectedCache(cachedData);\n const serverSnapshot = cachedData === initialData ? clientSnapshot : getSelectedCache(initialData);\n // To make sure that we are returning the same object reference to avoid\n // unnecessary re-renders, we keep the previous snapshot and use deep\n // comparison to check if we need to return a new one.\n let memorizedSnapshot = clientSnapshot;\n return [\n ()=>{\n const newSnapshot = getSelectedCache(getCache());\n const compareResult = isEqual(newSnapshot, memorizedSnapshot);\n if (compareResult) {\n // Mentally, we should always return the `memorizedSnapshot` here\n // as there's no change between the new and old snapshots.\n // However, since the `isEqual` function only compares selected fields,\n // the values of the unselected fields might be changed. That's\n // simply because we didn't track them.\n // To support the case in https://github.com/vercel/swr/pull/2576,\n // we need to update these fields in the `memorizedSnapshot` too\n // with direct mutations to ensure the snapshot is always up-to-date\n // even for the unselected fields, but only trigger re-renders when\n // the selected fields are changed.\n memorizedSnapshot.data = newSnapshot.data;\n memorizedSnapshot.isLoading = newSnapshot.isLoading;\n memorizedSnapshot.isValidating = newSnapshot.isValidating;\n memorizedSnapshot.error = newSnapshot.error;\n return memorizedSnapshot;\n } else {\n memorizedSnapshot = newSnapshot;\n return newSnapshot;\n }\n },\n ()=>serverSnapshot\n ];\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n cache,\n key\n ]);\n // Get the current state that SWR should return.\n const cached = useSyncExternalStore(useCallback((callback)=>subscribeCache(key, (current, prev)=>{\n if (!isEqual(prev, current)) callback();\n }), // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n cache,\n key\n ]), getSnapshot[0], getSnapshot[1]);\n const isInitialMount = !initialMountedRef.current;\n const hasRevalidator = EVENT_REVALIDATORS[key] && EVENT_REVALIDATORS[key].length > 0;\n const cachedData = cached.data;\n const data = isUndefined$1(cachedData) ? fallback && isPromiseLike(fallback) ? use(fallback) : fallback : cachedData;\n const error = cached.error;\n // Use a ref to store previously returned data. Use the initial data as its initial value.\n const laggyDataRef = useRef(data);\n const returnedData = keepPreviousData ? isUndefined$1(cachedData) ? isUndefined$1(laggyDataRef.current) ? data : laggyDataRef.current : cachedData : data;\n // - Suspense mode and there's stale data for the initial render.\n // - Not suspense mode and there is no fallback data and `revalidateIfStale` is enabled.\n // - `revalidateIfStale` is enabled but `data` is not defined.\n const shouldDoInitialRevalidation = (()=>{\n // if a key already has revalidators and also has error, we should not trigger revalidation\n if (hasRevalidator && !isUndefined$1(error)) return false;\n // If `revalidateOnMount` is set, we take the value directly.\n if (isInitialMount && !isUndefined$1(revalidateOnMount)) return revalidateOnMount;\n // If it's paused, we skip revalidation.\n if (getConfig().isPaused()) return false;\n // Under suspense mode, it will always fetch on render if there is no\n // stale data so no need to revalidate immediately mount it again.\n // If data exists, only revalidate if `revalidateIfStale` is true.\n if (suspense) return isUndefined$1(data) ? false : revalidateIfStale;\n // If there is no stale data, we need to revalidate when mount;\n // If `revalidateIfStale` is set to true, we will always revalidate.\n return isUndefined$1(data) || revalidateIfStale;\n })();\n // Resolve the default validating state:\n // If it's able to validate, and it should revalidate when mount, this will be true.\n const defaultValidatingState = !!(key && fetcher && isInitialMount && shouldDoInitialRevalidation);\n const isValidating = isUndefined$1(cached.isValidating) ? defaultValidatingState : cached.isValidating;\n const isLoading = isUndefined$1(cached.isLoading) ? defaultValidatingState : cached.isLoading;\n // The revalidation function is a carefully crafted wrapper of the original\n // `fetcher`, to correctly handle the many edge cases.\n const revalidate = useCallback(async (revalidateOpts)=>{\n const currentFetcher = fetcherRef.current;\n if (!key || !currentFetcher || unmountedRef.current || getConfig().isPaused()) {\n return false;\n }\n let newData;\n let startAt;\n let loading = true;\n const opts = revalidateOpts || {};\n // If there is no ongoing concurrent request, or `dedupe` is not set, a\n // new request should be initiated.\n const shouldStartNewRequest = !FETCH[key] || !opts.dedupe;\n /*\n For React 17\n Do unmount check for calls:\n If key has changed during the revalidation, or the component has been\n unmounted, old dispatch and old event callbacks should not take any\n effect\n\n For React 18\n only check if key has changed\n https://github.com/reactwg/react-18/discussions/82\n */ const callbackSafeguard = ()=>{\n if (IS_REACT_LEGACY) {\n return !unmountedRef.current && key === keyRef.current && initialMountedRef.current;\n }\n return key === keyRef.current;\n };\n // The final state object when the request finishes.\n const finalState = {\n isValidating: false,\n isLoading: false\n };\n const finishRequestAndUpdateState = ()=>{\n setCache(finalState);\n };\n const cleanupState = ()=>{\n // Check if it's still the same request before deleting it.\n const requestInfo = FETCH[key];\n if (requestInfo && requestInfo[1] === startAt) {\n delete FETCH[key];\n }\n };\n // Start fetching. Change the `isValidating` state, update the cache.\n const initialState = {\n isValidating: true\n };\n // It is in the `isLoading` state, if and only if there is no cached data.\n // This bypasses fallback data and laggy data.\n if (isUndefined$1(getCache().data)) {\n initialState.isLoading = true;\n }\n try {\n if (shouldStartNewRequest) {\n setCache(initialState);\n // If no cache is being rendered currently (it shows a blank page),\n // we trigger the loading slow event.\n if (config.loadingTimeout && isUndefined$1(getCache().data)) {\n setTimeout(()=>{\n if (loading && callbackSafeguard()) {\n getConfig().onLoadingSlow(key, config);\n }\n }, config.loadingTimeout);\n }\n // Start the request and save the timestamp.\n // Key must be truthy if entering here.\n FETCH[key] = [\n currentFetcher(fnArg),\n getTimestamp()\n ];\n }\n // Wait until the ongoing request is done. Deduplication is also\n // considered here.\n ;\n [newData, startAt] = FETCH[key];\n newData = await newData;\n if (shouldStartNewRequest) {\n // If the request isn't interrupted, clean it up after the\n // deduplication interval.\n setTimeout(cleanupState, config.dedupingInterval);\n }\n // If there're other ongoing request(s), started after the current one,\n // we need to ignore the current one to avoid possible race conditions:\n // req1------------------>res1 (current one)\n // req2---------------->res2\n // the request that fired later will always be kept.\n // The timestamp maybe be `undefined` or a number\n if (!FETCH[key] || FETCH[key][1] !== startAt) {\n if (shouldStartNewRequest) {\n if (callbackSafeguard()) {\n getConfig().onDiscarded(key);\n }\n }\n return false;\n }\n // Clear error.\n finalState.error = UNDEFINED$1;\n // If there're other mutations(s), that overlapped with the current revalidation:\n // case 1:\n // req------------------>res\n // mutate------>end\n // case 2:\n // req------------>res\n // mutate------>end\n // case 3:\n // req------------------>res\n // mutate-------...---------->\n // we have to ignore the revalidation result (res) because it's no longer fresh.\n // meanwhile, a new revalidation should be triggered when the mutation ends.\n const mutationInfo = MUTATION[key];\n if (!isUndefined$1(mutationInfo) && // case 1\n (startAt <= mutationInfo[0] || // case 2\n startAt <= mutationInfo[1] || // case 3\n mutationInfo[1] === 0)) {\n finishRequestAndUpdateState();\n if (shouldStartNewRequest) {\n if (callbackSafeguard()) {\n getConfig().onDiscarded(key);\n }\n }\n return false;\n }\n // Deep compare with the latest state to avoid extra re-renders.\n // For local state, compare and assign.\n const cacheData = getCache().data;\n // Since the compare fn could be custom fn\n // cacheData might be different from newData even when compare fn returns True\n finalState.data = compare(cacheData, newData) ? cacheData : newData;\n // Trigger the successful callback if it's the original request.\n if (shouldStartNewRequest) {\n if (callbackSafeguard()) {\n getConfig().onSuccess(newData, key, config);\n }\n }\n } catch (err) {\n cleanupState();\n const currentConfig = getConfig();\n const { shouldRetryOnError } = currentConfig;\n // Not paused, we continue handling the error. Otherwise, discard it.\n if (!currentConfig.isPaused()) {\n // Get a new error, don't use deep comparison for errors.\n finalState.error = err;\n // Error event and retry logic. Only for the actual request, not\n // deduped ones.\n if (shouldStartNewRequest && callbackSafeguard()) {\n currentConfig.onError(err, key, currentConfig);\n if (shouldRetryOnError === true || isFunction$1(shouldRetryOnError) && shouldRetryOnError(err)) {\n if (!getConfig().revalidateOnFocus || !getConfig().revalidateOnReconnect || isActive()) {\n // If it's inactive, stop. It will auto-revalidate when\n // refocusing or reconnecting.\n // When retrying, deduplication is always enabled.\n currentConfig.onErrorRetry(err, key, currentConfig, (_opts)=>{\n const revalidators = EVENT_REVALIDATORS[key];\n if (revalidators && revalidators[0]) {\n revalidators[0](revalidateEvents.ERROR_REVALIDATE_EVENT, _opts);\n }\n }, {\n retryCount: (opts.retryCount || 0) + 1,\n dedupe: true\n });\n }\n }\n }\n }\n }\n // Mark loading as stopped.\n loading = false;\n // Update the current hook's state.\n finishRequestAndUpdateState();\n return true;\n }, // `setState` is immutable, and `eventsCallback`, `fnArg`, and\n // `keyValidating` are depending on `key`, so we can exclude them from\n // the deps array.\n //\n // FIXME:\n // `fn` and `config` might be changed during the lifecycle,\n // but they might be changed every render like this.\n // `useSWR('key', () => fetch('/api/'), { suspense: true })`\n // So we omit the values from the deps array\n // even though it might cause unexpected behaviors.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n key,\n cache\n ]);\n // Similar to the global mutate but bound to the current cache and key.\n // `cache` isn't allowed to change during the lifecycle.\n const boundMutate = useCallback(// Use callback to make sure `keyRef.current` returns latest result every time\n (...args)=>{\n return internalMutate(cache, keyRef.current, ...args);\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n []);\n // The logic for updating refs.\n useIsomorphicLayoutEffect(()=>{\n fetcherRef.current = fetcher;\n configRef.current = config;\n // Handle laggy data updates. If there's cached data of the current key,\n // it'll be the correct reference.\n if (!isUndefined$1(cachedData)) {\n laggyDataRef.current = cachedData;\n }\n });\n // After mounted or key changed.\n useIsomorphicLayoutEffect(()=>{\n if (!key) return;\n const softRevalidate = revalidate.bind(UNDEFINED$1, WITH_DEDUPE);\n let nextFocusRevalidatedAt = 0;\n if (getConfig().revalidateOnFocus) {\n const initNow = Date.now();\n nextFocusRevalidatedAt = initNow + getConfig().focusThrottleInterval;\n }\n // Expose revalidators to global event listeners. So we can trigger\n // revalidation from the outside.\n const onRevalidate = (type, opts = {})=>{\n if (type == revalidateEvents.FOCUS_EVENT) {\n const now = Date.now();\n if (getConfig().revalidateOnFocus && now > nextFocusRevalidatedAt && isActive()) {\n nextFocusRevalidatedAt = now + getConfig().focusThrottleInterval;\n softRevalidate();\n }\n } else if (type == revalidateEvents.RECONNECT_EVENT) {\n if (getConfig().revalidateOnReconnect && isActive()) {\n softRevalidate();\n }\n } else if (type == revalidateEvents.MUTATE_EVENT) {\n return revalidate();\n } else if (type == revalidateEvents.ERROR_REVALIDATE_EVENT) {\n return revalidate(opts);\n }\n return;\n };\n const unsubEvents = subscribeCallback(key, EVENT_REVALIDATORS, onRevalidate);\n // Mark the component as mounted and update corresponding refs.\n unmountedRef.current = false;\n keyRef.current = key;\n initialMountedRef.current = true;\n // Keep the original key in the cache.\n setCache({\n _k: fnArg\n });\n // Trigger a revalidation\n if (shouldDoInitialRevalidation) {\n if (isUndefined$1(data) || IS_SERVER) {\n // Revalidate immediately.\n softRevalidate();\n } else {\n // Delay the revalidate if we have data to return so we won't block\n // rendering.\n rAF(softRevalidate);\n }\n }\n return ()=>{\n // Mark it as unmounted.\n unmountedRef.current = true;\n unsubEvents();\n };\n }, [\n key\n ]);\n // Polling\n useIsomorphicLayoutEffect(()=>{\n let timer;\n function next() {\n // Use the passed interval\n // ...or invoke the function with the updated data to get the interval\n const interval = isFunction$1(refreshInterval) ? refreshInterval(getCache().data) : refreshInterval;\n // We only start the next interval if `refreshInterval` is not 0, and:\n // - `force` is true, which is the start of polling\n // - or `timer` is not 0, which means the effect wasn't canceled\n if (interval && timer !== -1) {\n timer = setTimeout(execute, interval);\n }\n }\n function execute() {\n // Check if it's OK to execute:\n // Only revalidate when the page is visible, online, and not errored.\n if (!getCache().error && (refreshWhenHidden || getConfig().isVisible()) && (refreshWhenOffline || getConfig().isOnline())) {\n revalidate(WITH_DEDUPE).then(next);\n } else {\n // Schedule the next interval to check again.\n next();\n }\n }\n next();\n return ()=>{\n if (timer) {\n clearTimeout(timer);\n timer = -1;\n }\n };\n }, [\n refreshInterval,\n refreshWhenHidden,\n refreshWhenOffline,\n key\n ]);\n // Display debug info in React DevTools.\n useDebugValue(returnedData);\n // In Suspense mode, we can't return the empty `data` state.\n // If there is an `error`, the `error` needs to be thrown to the error boundary.\n // If there is no `error`, the `revalidation` promise needs to be thrown to\n // the suspense boundary.\n if (suspense && isUndefined$1(data) && key) {\n // SWR should throw when trying to use Suspense on the server with React 18,\n // without providing any fallback data. This causes hydration errors. See:\n // https://github.com/vercel/swr/issues/1832\n if (!IS_REACT_LEGACY && IS_SERVER) {\n throw new Error('Fallback data is required when using Suspense in SSR.');\n }\n // Always update fetcher and config refs even with the Suspense mode.\n fetcherRef.current = fetcher;\n configRef.current = config;\n unmountedRef.current = false;\n const req = PRELOAD[key];\n if (!isUndefined$1(req)) {\n const promise = boundMutate(req);\n use(promise);\n }\n if (isUndefined$1(error)) {\n const promise = revalidate(WITH_DEDUPE);\n if (!isUndefined$1(returnedData)) {\n promise.status = 'fulfilled';\n promise.value = true;\n }\n use(promise);\n } else {\n throw error;\n }\n }\n const swrResponse = {\n mutate: boundMutate,\n get data () {\n stateDependencies.data = true;\n return returnedData;\n },\n get error () {\n stateDependencies.error = true;\n return error;\n },\n get isValidating () {\n stateDependencies.isValidating = true;\n return isValidating;\n },\n get isLoading () {\n stateDependencies.isLoading = true;\n return isLoading;\n }\n };\n return swrResponse;\n};\nconst SWRConfig = OBJECT$1.defineProperty(SWRConfig$1, 'defaultValue', {\n value: defaultConfig\n});\n/**\n * A hook to fetch data.\n *\n * @link https://swr.vercel.app\n * @example\n * ```jsx\n * import useSWR from 'swr'\n * function Profile() {\n * const { data, error, isLoading } = useSWR('/api/user', fetcher)\n * if (error) return <div>failed to load</div>\n * if (isLoading) return <div>loading...</div>\n * return <div>hello {data.name}!</div>\n * }\n * ```\n */ const useSWR = withArgs(useSWRHandler);\n\n// useSWR\n\nexport { SWRConfig, useSWR as default, unstable_serialize };\n","function throttle(function_, wait) {\n\tif (typeof function_ !== 'function') {\n\t\tthrow new TypeError(`Expected the first argument to be a \\`function\\`, got \\`${typeof function_}\\`.`);\n\t}\n\n\t// TODO: Add `wait` validation too in the next major version.\n\n\tlet timeoutId;\n\tlet lastCallTime = 0;\n\n\treturn function throttled(...arguments_) { // eslint-disable-line func-names\n\t\tclearTimeout(timeoutId);\n\n\t\tconst now = Date.now();\n\t\tconst timeSinceLastCall = now - lastCallTime;\n\t\tconst delayForNextCall = wait - timeSinceLastCall;\n\n\t\tif (delayForNextCall <= 0) {\n\t\t\tlastCallTime = now;\n\t\t\tfunction_.apply(this, arguments_);\n\t\t} else {\n\t\t\ttimeoutId = setTimeout(() => {\n\t\t\t\tlastCallTime = Date.now();\n\t\t\t\tfunction_.apply(this, arguments_);\n\t\t\t}, delayForNextCall);\n\t\t}\n\t};\n}\n\nmodule.exports = throttle;\n","// src/use-assistant.ts\nimport { isAbortError } from \"@ai-sdk/provider-utils\";\nimport {\n generateId,\n processAssistantStream\n} from \"@ai-sdk/ui-utils\";\nimport { useCallback, useRef, useState } from \"react\";\nvar getOriginalFetch = () => fetch;\nfunction useAssistant({\n api,\n threadId: threadIdParam,\n credentials,\n headers,\n body,\n onError,\n fetch: fetch2\n}) {\n const [messages, setMessages] = useState([]);\n const [input, setInput] = useState(\"\");\n const [currentThreadId, setCurrentThreadId] = useState(\n void 0\n );\n const [status, setStatus] = useState(\"awaiting_message\");\n const [error, setError] = useState(void 0);\n const handleInputChange = (event) => {\n setInput(event.target.value);\n };\n const abortControllerRef = useRef(null);\n const stop = useCallback(() => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n abortControllerRef.current = null;\n }\n }, []);\n const append = async (message, requestOptions) => {\n var _a, _b;\n setStatus(\"in_progress\");\n setMessages((messages2) => {\n var _a2;\n return [\n ...messages2,\n {\n ...message,\n id: (_a2 = message.id) != null ? _a2 : generateId()\n }\n ];\n });\n setInput(\"\");\n const abortController = new AbortController();\n try {\n abortControllerRef.current = abortController;\n const actualFetch = fetch2 != null ? fetch2 : getOriginalFetch();\n const response = await actualFetch(api, {\n method: \"POST\",\n credentials,\n signal: abortController.signal,\n headers: { \"Content-Type\": \"application/json\", ...headers },\n body: JSON.stringify({\n ...body,\n // always use user-provided threadId when available:\n threadId: (_a = threadIdParam != null ? threadIdParam : currentThreadId) != null ? _a : null,\n message: message.content,\n // optional request data:\n data: requestOptions == null ? void 0 : requestOptions.data\n })\n });\n if (!response.ok) {\n throw new Error(\n (_b = await response.text()) != null ? _b : \"Failed to fetch the assistant response.\"\n );\n }\n if (response.body == null) {\n throw new Error(\"The response body is empty.\");\n }\n await processAssistantStream({\n stream: response.body,\n onAssistantMessagePart(value) {\n setMessages((messages2) => [\n ...messages2,\n {\n id: value.id,\n role: value.role,\n content: value.content[0].text.value,\n parts: []\n }\n ]);\n },\n onTextPart(value) {\n setMessages((messages2) => {\n const lastMessage = messages2[messages2.length - 1];\n return [\n ...messages2.slice(0, messages2.length - 1),\n {\n id: lastMessage.id,\n role: lastMessage.role,\n content: lastMessage.content + value,\n parts: lastMessage.parts\n }\n ];\n });\n },\n onAssistantControlDataPart(value) {\n setCurrentThreadId(value.threadId);\n setMessages((messages2) => {\n const lastMessage = messages2[messages2.length - 1];\n lastMessage.id = value.messageId;\n return [...messages2.slice(0, messages2.length - 1), lastMessage];\n });\n },\n onDataMessagePart(value) {\n setMessages((messages2) => {\n var _a2;\n return [\n ...messages2,\n {\n id: (_a2 = value.id) != null ? _a2 : generateId(),\n role: \"data\",\n content: \"\",\n data: value.data,\n parts: []\n }\n ];\n });\n },\n onErrorPart(value) {\n setError(new Error(value));\n }\n });\n } catch (error2) {\n if (isAbortError(error2) && abortController.signal.aborted) {\n abortControllerRef.current = null;\n return;\n }\n if (onError && error2 instanceof Error) {\n onError(error2);\n }\n setError(error2);\n } finally {\n abortControllerRef.current = null;\n setStatus(\"awaiting_message\");\n }\n };\n const submitMessage = async (event, requestOptions) => {\n var _a;\n (_a = event == null ? void 0 : event.preventDefault) == null ? void 0 : _a.call(event);\n if (input === \"\") {\n return;\n }\n append({ role: \"user\", content: input, parts: [] }, requestOptions);\n };\n const setThreadId = (threadId) => {\n setCurrentThreadId(threadId);\n setMessages([]);\n };\n return {\n append,\n messages,\n setMessages,\n threadId: currentThreadId,\n setThreadId,\n input,\n setInput,\n handleInputChange,\n submitMessage,\n status,\n error,\n stop\n };\n}\n\n// src/use-chat.ts\nimport {\n callChatApi,\n extractMaxToolInvocationStep,\n fillMessageParts,\n generateId as generateIdFunc,\n getMessageParts,\n isAssistantMessageWithCompletedToolCalls,\n prepareAttachmentsForRequest,\n shouldResubmitMessages,\n updateToolCallResult\n} from \"@ai-sdk/ui-utils\";\nimport { useCallback as useCallback2, useEffect as useEffect2, useMemo, useRef as useRef2, useState as useState3 } from \"react\";\nimport useSWR from \"swr\";\n\n// src/throttle.ts\nimport throttleFunction from \"throttleit\";\nfunction throttle(fn, waitMs) {\n return waitMs != null ? throttleFunction(fn, waitMs) : fn;\n}\n\n// src/util/use-stable-value.ts\nimport { isDeepEqualData } from \"@ai-sdk/ui-utils\";\nimport { useEffect, useState as useState2 } from \"react\";\nfunction useStableValue(latestValue) {\n const [value, setValue] = useState2(latestValue);\n useEffect(() => {\n if (!isDeepEqualData(latestValue, value)) {\n setValue(latestValue);\n }\n }, [latestValue, value]);\n return value;\n}\n\n// src/use-chat.ts\nfunction useChat({\n api = \"/api/chat\",\n id,\n initialMessages,\n initialInput = \"\",\n sendExtraMessageFields,\n onToolCall,\n experimental_prepareRequestBody,\n maxSteps = 1,\n streamProtocol = \"data\",\n onResponse,\n onFinish,\n onError,\n credentials,\n headers,\n body,\n generateId: generateId2 = generateIdFunc,\n fetch: fetch2,\n keepLastMessageOnError = true,\n experimental_throttle: throttleWaitMs\n} = {}) {\n const [hookId] = useState3(generateId2);\n const chatId = id != null ? id : hookId;\n const chatKey = typeof api === \"string\" ? [api, chatId] : chatId;\n const stableInitialMessages = useStableValue(initialMessages != null ? initialMessages : []);\n const processedInitialMessages = useMemo(\n () => fillMessageParts(stableInitialMessages),\n [stableInitialMessages]\n );\n const { data: messages, mutate } = useSWR(\n [chatKey, \"messages\"],\n null,\n { fallbackData: processedInitialMessages }\n );\n const messagesRef = useRef2(messages || []);\n useEffect2(() => {\n messagesRef.current = messages || [];\n }, [messages]);\n const { data: streamData, mutate: mutateStreamData } = useSWR([chatKey, \"streamData\"], null);\n const streamDataRef = useRef2(streamData);\n useEffect2(() => {\n streamDataRef.current = streamData;\n }, [streamData]);\n const { data: status = \"ready\", mutate: mutateStatus } = useSWR([chatKey, \"status\"], null);\n const { data: error = void 0, mutate: setError } = useSWR([chatKey, \"error\"], null);\n const abortControllerRef = useRef2(null);\n const extraMetadataRef = useRef2({\n credentials,\n headers,\n body\n });\n useEffect2(() => {\n extraMetadataRef.current = {\n credentials,\n headers,\n body\n };\n }, [credentials, headers, body]);\n const triggerRequest = useCallback2(\n async (chatRequest, requestType = \"generate\") => {\n var _a, _b;\n mutateStatus(\"submitted\");\n setError(void 0);\n const chatMessages = fillMessageParts(chatRequest.messages);\n const messageCount = chatMessages.length;\n const maxStep = extractMaxToolInvocationStep(\n (_a = chatMessages[chatMessages.length - 1]) == null ? void 0 : _a.toolInvocations\n );\n try {\n const abortController = new AbortController();\n abortControllerRef.current = abortController;\n const throttledMutate = throttle(mutate, throttleWaitMs);\n const throttledMutateStreamData = throttle(\n mutateStreamData,\n throttleWaitMs\n );\n const previousMessages = messagesRef.current;\n throttledMutate(chatMessages, false);\n const constructedMessagesPayload = sendExtraMessageFields ? chatMessages : chatMessages.map(\n ({\n role,\n content,\n experimental_attachments,\n data,\n annotations,\n toolInvocations,\n parts\n }) => ({\n role,\n content,\n ...experimental_attachments !== void 0 && {\n experimental_attachments\n },\n ...data !== void 0 && { data },\n ...annotations !== void 0 && { annotations },\n ...toolInvocations !== void 0 && { toolInvocations },\n ...parts !== void 0 && { parts }\n })\n );\n const existingData = streamDataRef.current;\n await callChatApi({\n api,\n body: (_b = experimental_prepareRequestBody == null ? void 0 : experimental_prepareRequestBody({\n id: chatId,\n messages: chatMessages,\n requestData: chatRequest.data,\n requestBody: chatRequest.body\n })) != null ? _b : {\n id: chatId,\n messages: constructedMessagesPayload,\n data: chatRequest.data,\n ...extraMetadataRef.current.body,\n ...chatRequest.body\n },\n streamProtocol,\n credentials: extraMetadataRef.current.credentials,\n headers: {\n ...extraMetadataRef.current.headers,\n ...chatRequest.headers\n },\n abortController: () => abortControllerRef.current,\n restoreMessagesOnFailure() {\n if (!keepLastMessageOnError) {\n throttledMutate(previousMessages, false);\n }\n },\n onResponse,\n onUpdate({ message, data, replaceLastMessage }) {\n mutateStatus(\"streaming\");\n throttledMutate(\n [\n ...replaceLastMessage ? chatMessages.slice(0, chatMessages.length - 1) : chatMessages,\n message\n ],\n false\n );\n if (data == null ? void 0 : data.length) {\n throttledMutateStreamData(\n [...existingData != null ? existingData : [], ...data],\n false\n );\n }\n },\n onToolCall,\n onFinish,\n generateId: generateId2,\n fetch: fetch2,\n lastMessage: chatMessages[chatMessages.length - 1],\n requestType\n });\n abortControllerRef.current = null;\n mutateStatus(\"ready\");\n } catch (err) {\n if (err.name === \"AbortError\") {\n abortControllerRef.current = null;\n mutateStatus(\"ready\");\n return null;\n }\n if (onError && err instanceof Error) {\n onError(err);\n }\n setError(err);\n mutateStatus(\"error\");\n }\n const messages2 = messagesRef.current;\n if (shouldResubmitMessages({\n originalMaxToolInvocationStep: maxStep,\n originalMessageCount: messageCount,\n maxSteps,\n messages: messages2\n })) {\n await triggerRequest({ messages: messages2 });\n }\n },\n [\n mutate,\n mutateStatus,\n api,\n extraMetadataRef,\n onResponse,\n onFinish,\n onError,\n setError,\n mutateStreamData,\n streamDataRef,\n streamProtocol,\n sendExtraMessageFields,\n experimental_prepareRequestBody,\n onToolCall,\n maxSteps,\n messagesRef,\n abortControllerRef,\n generateId2,\n fetch2,\n keepLastMessageOnError,\n throttleWaitMs,\n chatId\n ]\n );\n const append = useCallback2(\n async (message, {\n data,\n headers: headers2,\n body: body2,\n experimental_attachments = message.experimental_attachments\n } = {}) => {\n var _a, _b;\n const attachmentsForRequest = await prepareAttachmentsForRequest(\n experimental_attachments\n );\n const messages2 = messagesRef.current.concat({\n ...message,\n id: (_a = message.id) != null ? _a : generateId2(),\n createdAt: (_b = message.createdAt) != null ? _b : /* @__PURE__ */ new Date(),\n experimental_attachments: attachmentsForRequest.length > 0 ? attachmentsForRequest : void 0,\n parts: getMessageParts(message)\n });\n return triggerRequest({ messages: messages2, headers: headers2, body: body2, data });\n },\n [triggerRequest, generateId2]\n );\n const reload = useCallback2(\n async ({ data, headers: headers2, body: body2 } = {}) => {\n const messages2 = messagesRef.current;\n if (messages2.length === 0) {\n return null;\n }\n const lastMessage = messages2[messages2.length - 1];\n return triggerRequest({\n messages: lastMessage.role === \"assistant\" ? messages2.slice(0, -1) : messages2,\n headers: headers2,\n body: body2,\n data\n });\n },\n [triggerRequest]\n );\n const stop = useCallback2(() => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n abortControllerRef.current = null;\n }\n }, []);\n const experimental_resume = useCallback2(async () => {\n const messages2 = messagesRef.current;\n triggerRequest({ messages: messages2 }, \"resume\");\n }, [triggerRequest]);\n const setMessages = useCallback2(\n (messages2) => {\n if (typeof messages2 === \"function\") {\n messages2 = messages2(messagesRef.current);\n }\n const messagesWithParts = fillMessageParts(messages2);\n mutate(messagesWithParts, false);\n messagesRef.current = messagesWithParts;\n },\n [mutate]\n );\n const setData = useCallback2(\n (data) => {\n if (typeof data === \"function\") {\n data = data(streamDataRef.current);\n }\n mutateStreamData(data, false);\n streamDataRef.current = data;\n },\n [mutateStreamData]\n );\n const [input, setInput] = useState3(initialInput);\n const handleSubmit = useCallback2(\n async (event, options = {}, metadata) => {\n var _a;\n (_a = event == null ? void 0 : event.preventDefault) == null ? void 0 : _a.call(event);\n if (!input && !options.allowEmptySubmit)\n return;\n if (metadata) {\n extraMetadataRef.current = {\n ...extraMetadataRef.current,\n ...metadata\n };\n }\n const attachmentsForRequest = await prepareAttachmentsForRequest(\n options.experimental_attachments\n );\n const messages2 = messagesRef.current.concat({\n id: generateId2(),\n createdAt: /* @__PURE__ */ new Date(),\n role: \"user\",\n content: input,\n experimental_attachments: attachmentsForRequest.length > 0 ? attachmentsForRequest : void 0,\n parts: [{ type: \"text\", text: input }]\n });\n const chatRequest = {\n messages: messages2,\n headers: options.headers,\n body: options.body,\n data: options.data\n };\n triggerRequest(chatRequest);\n setInput(\"\");\n },\n [input, generateId2, triggerRequest]\n );\n const handleInputChange = (e) => {\n setInput(e.target.value);\n };\n const addToolResult = useCallback2(\n ({ toolCallId, result }) => {\n const currentMessages = messagesRef.current;\n updateToolCallResult({\n messages: currentMessages,\n toolCallId,\n toolResult: result\n });\n mutate(\n [\n ...currentMessages.slice(0, currentMessages.length - 1),\n { ...currentMessages[currentMessages.length - 1] }\n ],\n false\n );\n if (status === \"submitted\" || status === \"streaming\") {\n return;\n }\n const lastMessage = currentMessages[currentMessages.length - 1];\n if (isAssistantMessageWithCompletedToolCalls(lastMessage)) {\n triggerRequest({ messages: currentMessages });\n }\n },\n [mutate, status, triggerRequest]\n );\n return {\n messages: messages != null ? messages : [],\n id: chatId,\n setMessages,\n data: streamData,\n setData,\n error,\n append,\n reload,\n stop,\n experimental_resume,\n input,\n setInput,\n handleInputChange,\n handleSubmit,\n isLoading: status === \"submitted\" || status === \"streaming\",\n status,\n addToolResult\n };\n}\n\n// src/use-completion.ts\nimport {\n callCompletionApi\n} from \"@ai-sdk/ui-utils\";\nimport { useCallback as useCallback3, useEffect as useEffect3, useId, useRef as useRef3, useState as useState4 } from \"react\";\nimport useSWR2 from \"swr\";\nfunction useCompletion({\n api = \"/api/completion\",\n id,\n initialCompletion = \"\",\n initialInput = \"\",\n credentials,\n headers,\n body,\n streamProtocol = \"data\",\n fetch: fetch2,\n onResponse,\n onFinish,\n onError,\n experimental_throttle: throttleWaitMs\n} = {}) {\n const hookId = useId();\n const completionId = id || hookId;\n const { data, mutate } = useSWR2([api, completionId], null, {\n fallbackData: initialCompletion\n });\n const { data: isLoading = false, mutate: mutateLoading } = useSWR2(\n [completionId, \"loading\"],\n null\n );\n const { data: streamData, mutate: mutateStreamData } = useSWR2([completionId, \"streamData\"], null);\n const [error, setError] = useState4(void 0);\n const completion = data;\n const [abortController, setAbortController] = useState4(null);\n const extraMetadataRef = useRef3({\n credentials,\n headers,\n body\n });\n useEffect3(() => {\n extraMetadataRef.current = {\n credentials,\n headers,\n body\n };\n }, [credentials, headers, body]);\n const triggerRequest = useCallback3(\n async (prompt, options) => callCompletionApi({\n api,\n prompt,\n credentials: extraMetadataRef.current.credentials,\n headers: { ...extraMetadataRef.current.headers, ...options == null ? void 0 : options.headers },\n body: {\n ...extraMetadataRef.current.body,\n ...options == null ? void 0 : options.body\n },\n streamProtocol,\n fetch: fetch2,\n // throttle streamed ui updates:\n setCompletion: throttle(\n (completion2) => mutate(completion2, false),\n throttleWaitMs\n ),\n onData: throttle(\n (data2) => mutateStreamData([...streamData != null ? streamData : [], ...data2 != null ? data2 : []], false),\n throttleWaitMs\n ),\n setLoading: mutateLoading,\n setError,\n setAbortController,\n onResponse,\n onFinish,\n onError\n }),\n [\n mutate,\n mutateLoading,\n api,\n extraMetadataRef,\n setAbortController,\n onResponse,\n onFinish,\n onError,\n setError,\n streamData,\n streamProtocol,\n fetch2,\n mutateStreamData,\n throttleWaitMs\n ]\n );\n const stop = useCallback3(() => {\n if (abortController) {\n abortController.abort();\n setAbortController(null);\n }\n }, [abortController]);\n const setCompletion = useCallback3(\n (completion2) => {\n mutate(completion2, false);\n },\n [mutate]\n );\n const complete = useCallback3(\n async (prompt, options) => {\n return triggerRequest(prompt, options);\n },\n [triggerRequest]\n );\n const [input, setInput] = useState4(initialInput);\n const handleSubmit = useCallback3(\n (event) => {\n var _a;\n (_a = event == null ? void 0 : event.preventDefault) == null ? void 0 : _a.call(event);\n return input ? complete(input) : void 0;\n },\n [input, complete]\n );\n const handleInputChange = useCallback3(\n (e) => {\n setInput(e.target.value);\n },\n [setInput]\n );\n return {\n completion,\n complete,\n error,\n setCompletion,\n stop,\n input,\n setInput,\n handleInputChange,\n handleSubmit,\n isLoading,\n data: streamData\n };\n}\n\n// src/use-object.ts\nimport {\n isAbortError as isAbortError2,\n safeValidateTypes\n} from \"@ai-sdk/provider-utils\";\nimport {\n asSchema,\n isDeepEqualData as isDeepEqualData2,\n parsePartialJson\n} from \"@ai-sdk/ui-utils\";\nimport { useCallback as useCallback4, useId as useId2, useRef as useRef4, useState as useState5 } from \"react\";\nimport useSWR3 from \"swr\";\nvar getOriginalFetch2 = () => fetch;\nfunction useObject({\n api,\n id,\n schema,\n // required, in the future we will use it for validation\n initialValue,\n fetch: fetch2,\n onError,\n onFinish,\n headers,\n credentials\n}) {\n const hookId = useId2();\n const completionId = id != null ? id : hookId;\n const { data, mutate } = useSWR3(\n [api, completionId],\n null,\n { fallbackData: initialValue }\n );\n const [error, setError] = useState5(void 0);\n const [isLoading, setIsLoading] = useState5(false);\n const abortControllerRef = useRef4(null);\n const stop = useCallback4(() => {\n var _a;\n try {\n (_a = abortControllerRef.current) == null ? void 0 : _a.abort();\n } catch (ignored) {\n } finally {\n setIsLoading(false);\n abortControllerRef.current = null;\n }\n }, []);\n const submit = async (input) => {\n var _a;\n try {\n mutate(void 0);\n setIsLoading(true);\n setError(void 0);\n const abortController = new AbortController();\n abortControllerRef.current = abortController;\n const actualFetch = fetch2 != null ? fetch2 : getOriginalFetch2();\n const response = await actualFetch(api, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers\n },\n credentials,\n signal: abortController.signal,\n body: JSON.stringify(input)\n });\n if (!response.ok) {\n throw new Error(\n (_a = await response.text()) != null ? _a : \"Failed to fetch the response.\"\n );\n }\n if (response.body == null) {\n throw new Error(\"The response body is empty.\");\n }\n let accumulatedText = \"\";\n let latestObject = void 0;\n await response.body.pipeThrough(new TextDecoderStream()).pipeTo(\n new WritableStream({\n write(chunk) {\n accumulatedText += chunk;\n const { value } = parsePartialJson(accumulatedText);\n const currentObject = value;\n if (!isDeepEqualData2(latestObject, currentObject)) {\n latestObject = currentObject;\n mutate(currentObject);\n }\n },\n close() {\n setIsLoading(false);\n abortControllerRef.current = null;\n if (onFinish != null) {\n const validationResult = safeValidateTypes({\n value: latestObject,\n schema: asSchema(schema)\n });\n onFinish(\n validationResult.success ? { object: validationResult.value, error: void 0 } : { object: void 0, error: validationResult.error }\n );\n }\n }\n })\n );\n } catch (error2) {\n if (isAbortError2(error2)) {\n return;\n }\n if (onError && error2 instanceof Error) {\n onError(error2);\n }\n setIsLoading(false);\n setError(error2 instanceof Error ? error2 : new Error(String(error2)));\n }\n };\n return {\n submit,\n object: data,\n error,\n isLoading,\n stop\n };\n}\nvar experimental_useObject = useObject;\nexport {\n experimental_useObject,\n useAssistant,\n useChat,\n useCompletion\n};\n//# sourceMappingURL=index.mjs.map","export function debounce(fn, time) {\n var timerId = undefined;\n return function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (timerId) {\n clearTimeout(timerId);\n }\n timerId = setTimeout(function () {\n return fn.apply(void 0, args);\n }, time);\n };\n}","export function flatten(values) {\n return values.reduce(function (a, b) {\n return a.concat(b);\n }, []);\n}","var autocompleteId = 0;\nexport function generateAutocompleteId() {\n return \"autocomplete-\".concat(autocompleteId++);\n}","export function getItemsCount(state) {\n if (state.collections.length === 0) {\n return 0;\n }\n return state.collections.reduce(function (sum, collection) {\n return sum + collection.items.length;\n }, 0);\n}","function isPrimitive(obj) {\n return obj !== Object(obj);\n}\nexport function isEqual(first, second) {\n if (first === second) {\n return true;\n }\n if (isPrimitive(first) || isPrimitive(second) || typeof first === 'function' || typeof second === 'function') {\n return first === second;\n }\n if (Object.keys(first).length !== Object.keys(second).length) {\n return false;\n }\n for (var _i = 0, _Object$keys = Object.keys(first); _i < _Object$keys.length; _i++) {\n var key = _Object$keys[_i];\n if (!(key in second)) {\n return false;\n }\n if (!isEqual(first[key], second[key])) {\n return false;\n }\n }\n return true;\n}","export var noop = function noop() {};","export var version = '1.19.2';","import { version } from './version';\nexport var userAgents = [{\n segment: 'autocomplete-core',\n version: version\n}];","export function createClickedEvent(_ref) {\n var item = _ref.item,\n _ref$items = _ref.items,\n items = _ref$items === void 0 ? [] : _ref$items;\n return {\n index: item.__autocomplete_indexName,\n items: [item],\n positions: [1 + items.findIndex(function (x) {\n return x.objectID === item.objectID;\n })],\n queryID: item.__autocomplete_queryID,\n algoliaSource: ['autocomplete']\n };\n}","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n/**\n * Determines if a given insights `client` supports the optional call to `init`\n * and the ability to set credentials via extra parameters when sending events.\n */\nexport function isModernInsightsClient(client) {\n var _split$map = (client.version || '').split('.').map(Number),\n _split$map2 = _slicedToArray(_split$map, 2),\n major = _split$map2[0],\n minor = _split$map2[1];\n\n /* eslint-disable @typescript-eslint/camelcase */\n var v3 = major >= 3;\n var v2_4 = major === 2 && minor >= 4;\n var v1_10 = major === 1 && minor >= 10;\n return v3 || v2_4 || v1_10;\n /* eslint-enable @typescript-eslint/camelcase */\n}","var _excluded = [\"items\"],\n _excluded2 = [\"items\"];\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { isModernInsightsClient } from './isModernInsightsClient';\nfunction chunk(item) {\n var chunkSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 20;\n var chunks = [];\n for (var i = 0; i < item.objectIDs.length; i += chunkSize) {\n chunks.push(_objectSpread(_objectSpread({}, item), {}, {\n objectIDs: item.objectIDs.slice(i, i + chunkSize)\n }));\n }\n return chunks;\n}\nfunction mapToInsightsParamsApi(params) {\n return params.map(function (_ref) {\n var items = _ref.items,\n param = _objectWithoutProperties(_ref, _excluded);\n return _objectSpread(_objectSpread({}, param), {}, {\n objectIDs: (items === null || items === void 0 ? void 0 : items.map(function (_ref2) {\n var objectID = _ref2.objectID;\n return objectID;\n })) || param.objectIDs\n });\n });\n}\nexport function createSearchInsightsApi(searchInsights) {\n var canSendHeaders = isModernInsightsClient(searchInsights);\n function sendToInsights(method, payloads, items) {\n if (canSendHeaders && typeof items !== 'undefined') {\n var _items$0$__autocomple = items[0].__autocomplete_algoliaCredentials,\n appId = _items$0$__autocomple.appId,\n apiKey = _items$0$__autocomple.apiKey;\n var headers = {\n 'X-Algolia-Application-Id': appId,\n 'X-Algolia-API-Key': apiKey\n };\n searchInsights.apply(void 0, [method].concat(_toConsumableArray(payloads), [{\n headers: headers\n }]));\n } else {\n searchInsights.apply(void 0, [method].concat(_toConsumableArray(payloads)));\n }\n }\n return {\n /**\n * Initializes Insights with Algolia credentials.\n */\n init: function init(appId, apiKey) {\n searchInsights('init', {\n appId: appId,\n apiKey: apiKey\n });\n },\n /**\n * Sets the authenticated user token to attach to events.\n * Unsets the authenticated token by passing `undefined`.\n *\n * @link https://www.algolia.com/doc/api-reference/api-methods/set-authenticated-user-token/\n */\n setAuthenticatedUserToken: function setAuthenticatedUserToken(authenticatedUserToken) {\n searchInsights('setAuthenticatedUserToken', authenticatedUserToken);\n },\n /**\n * Sets the user token to attach to events.\n */\n setUserToken: function setUserToken(userToken) {\n searchInsights('setUserToken', userToken);\n },\n /**\n * Sends click events to capture a query and its clicked items and positions.\n *\n * @link https://www.algolia.com/doc/api-reference/api-methods/clicked-object-ids-after-search/\n */\n clickedObjectIDsAfterSearch: function clickedObjectIDsAfterSearch() {\n for (var _len = arguments.length, params = new Array(_len), _key = 0; _key < _len; _key++) {\n params[_key] = arguments[_key];\n }\n if (params.length > 0) {\n sendToInsights('clickedObjectIDsAfterSearch', mapToInsightsParamsApi(params), params[0].items);\n }\n },\n /**\n * Sends click events to capture clicked items.\n *\n * @link https://www.algolia.com/doc/api-reference/api-methods/clicked-object-ids/\n */\n clickedObjectIDs: function clickedObjectIDs() {\n for (var _len2 = arguments.length, params = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n params[_key2] = arguments[_key2];\n }\n if (params.length > 0) {\n sendToInsights('clickedObjectIDs', mapToInsightsParamsApi(params), params[0].items);\n }\n },\n /**\n * Sends click events to capture the filters a user clicks on.\n *\n * @link https://www.algolia.com/doc/api-reference/api-methods/clicked-filters/\n */\n clickedFilters: function clickedFilters() {\n for (var _len3 = arguments.length, params = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n params[_key3] = arguments[_key3];\n }\n if (params.length > 0) {\n searchInsights.apply(void 0, ['clickedFilters'].concat(params));\n }\n },\n /**\n * Sends conversion events to capture a query and its clicked items.\n *\n * @link https://www.algolia.com/doc/api-reference/api-methods/converted-object-ids-after-search/\n */\n convertedObjectIDsAfterSearch: function convertedObjectIDsAfterSearch() {\n for (var _len4 = arguments.length, params = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n params[_key4] = arguments[_key4];\n }\n if (params.length > 0) {\n sendToInsights('convertedObjectIDsAfterSearch', mapToInsightsParamsApi(params), params[0].items);\n }\n },\n /**\n * Sends conversion events to capture clicked items.\n *\n * @link https://www.algolia.com/doc/api-reference/api-methods/converted-object-ids/\n */\n convertedObjectIDs: function convertedObjectIDs() {\n for (var _len5 = arguments.length, params = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n params[_key5] = arguments[_key5];\n }\n if (params.length > 0) {\n sendToInsights('convertedObjectIDs', mapToInsightsParamsApi(params), params[0].items);\n }\n },\n /**\n * Sends conversion events to capture the filters a user uses when converting.\n *\n * @link https://www.algolia.com/doc/api-reference/api-methods/converted-filters/\n */\n convertedFilters: function convertedFilters() {\n for (var _len6 = arguments.length, params = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n params[_key6] = arguments[_key6];\n }\n if (params.length > 0) {\n searchInsights.apply(void 0, ['convertedFilters'].concat(params));\n }\n },\n /**\n * Sends view events to capture clicked items.\n *\n * @link https://www.algolia.com/doc/api-reference/api-methods/viewed-object-ids/\n */\n viewedObjectIDs: function viewedObjectIDs() {\n for (var _len7 = arguments.length, params = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n params[_key7] = arguments[_key7];\n }\n if (params.length > 0) {\n params.reduce(function (acc, _ref3) {\n var items = _ref3.items,\n param = _objectWithoutProperties(_ref3, _excluded2);\n return [].concat(_toConsumableArray(acc), _toConsumableArray(chunk(_objectSpread(_objectSpread({}, param), {}, {\n objectIDs: (items === null || items === void 0 ? void 0 : items.map(function (_ref4) {\n var objectID = _ref4.objectID;\n return objectID;\n })) || param.objectIDs\n })).map(function (payload) {\n return {\n items: items,\n payload: payload\n };\n })));\n }, []).forEach(function (_ref5) {\n var items = _ref5.items,\n payload = _ref5.payload;\n return sendToInsights('viewedObjectIDs', [payload], items);\n });\n }\n },\n /**\n * Sends view events to capture the filters a user uses when viewing.\n *\n * @link https://www.algolia.com/doc/api-reference/api-methods/viewed-filters/\n */\n viewedFilters: function viewedFilters() {\n for (var _len8 = arguments.length, params = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n params[_key8] = arguments[_key8];\n }\n if (params.length > 0) {\n searchInsights.apply(void 0, ['viewedFilters'].concat(params));\n }\n }\n };\n}","export function createViewedEvents(_ref) {\n var items = _ref.items;\n var itemsByIndexName = items.reduce(function (acc, current) {\n var _acc$current$__autoco;\n acc[current.__autocomplete_indexName] = ((_acc$current$__autoco = acc[current.__autocomplete_indexName]) !== null && _acc$current$__autoco !== void 0 ? _acc$current$__autoco : []).concat(current);\n return acc;\n }, {});\n return Object.keys(itemsByIndexName).map(function (indexName) {\n var items = itemsByIndexName[indexName];\n return {\n index: indexName,\n items: items,\n algoliaSource: ['autocomplete']\n };\n });\n}","export function isAlgoliaInsightsHit(hit) {\n return hit.objectID && hit.__autocomplete_indexName && hit.__autocomplete_queryID;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { createRef, debounce, isEqual, noop, safelyRunOnBrowser } from '@algolia/autocomplete-shared';\nimport { createClickedEvent } from './createClickedEvent';\nimport { createSearchInsightsApi } from './createSearchInsightsApi';\nimport { createViewedEvents } from './createViewedEvents';\nimport { isAlgoliaInsightsHit } from './isAlgoliaInsightsHit';\nvar VIEW_EVENT_DELAY = 400;\nvar ALGOLIA_INSIGHTS_VERSION = '2.15.0';\nvar ALGOLIA_INSIGHTS_SRC = \"https://cdn.jsdelivr.net/npm/search-insights@\".concat(ALGOLIA_INSIGHTS_VERSION, \"/dist/search-insights.min.js\");\nvar sendViewedObjectIDs = debounce(function (_ref) {\n var onItemsChange = _ref.onItemsChange,\n items = _ref.items,\n insights = _ref.insights,\n state = _ref.state;\n onItemsChange({\n insights: insights,\n insightsEvents: createViewedEvents({\n items: items\n }).map(function (event) {\n return _objectSpread({\n eventName: 'Items Viewed'\n }, event);\n }),\n state: state\n });\n}, VIEW_EVENT_DELAY);\nexport function createAlgoliaInsightsPlugin(options) {\n var _getOptions = getOptions(options),\n providedInsightsClient = _getOptions.insightsClient,\n insightsInitParams = _getOptions.insightsInitParams,\n onItemsChange = _getOptions.onItemsChange,\n onSelectEvent = _getOptions.onSelect,\n onActiveEvent = _getOptions.onActive,\n __autocomplete_clickAnalytics = _getOptions.__autocomplete_clickAnalytics;\n var insightsClient = providedInsightsClient;\n if (!providedInsightsClient) {\n safelyRunOnBrowser(function (_ref2) {\n var window = _ref2.window;\n var pointer = window.AlgoliaAnalyticsObject || 'aa';\n if (typeof pointer === 'string') {\n insightsClient = window[pointer];\n }\n if (!insightsClient) {\n window.AlgoliaAnalyticsObject = pointer;\n if (!window[pointer]) {\n window[pointer] = function () {\n if (!window[pointer].queue) {\n window[pointer].queue = [];\n }\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n window[pointer].queue.push(args);\n };\n }\n window[pointer].version = ALGOLIA_INSIGHTS_VERSION;\n insightsClient = window[pointer];\n loadInsights(window);\n }\n });\n }\n\n // We return an empty plugin if `insightsClient` is still undefined at\n // this stage, which can happen in server environments.\n if (!insightsClient) {\n return {};\n }\n if (insightsInitParams) {\n insightsClient('init', _objectSpread({\n partial: true\n }, insightsInitParams));\n }\n var insights = createSearchInsightsApi(insightsClient);\n var previousItems = createRef([]);\n var debouncedOnStateChange = debounce(function (_ref3) {\n var state = _ref3.state;\n if (!state.isOpen) {\n return;\n }\n var items = state.collections.reduce(function (acc, current) {\n return [].concat(_toConsumableArray(acc), _toConsumableArray(current.items));\n }, []).filter(isAlgoliaInsightsHit);\n if (!isEqual(previousItems.current.map(function (x) {\n return x.objectID;\n }), items.map(function (x) {\n return x.objectID;\n }))) {\n previousItems.current = items;\n if (items.length > 0) {\n sendViewedObjectIDs({\n onItemsChange: onItemsChange,\n items: items,\n insights: insights,\n state: state\n });\n }\n }\n }, 0);\n return {\n name: 'aa.algoliaInsightsPlugin',\n subscribe: function subscribe(_ref4) {\n var setContext = _ref4.setContext,\n onSelect = _ref4.onSelect,\n onActive = _ref4.onActive;\n function setInsightsContext(userToken) {\n setContext({\n algoliaInsightsPlugin: {\n __algoliaSearchParameters: _objectSpread(_objectSpread({}, __autocomplete_clickAnalytics ? {\n clickAnalytics: true\n } : {}), userToken ? {\n userToken: normalizeUserToken(userToken)\n } : {}),\n insights: insights\n }\n });\n }\n insightsClient('addAlgoliaAgent', 'insights-plugin');\n setInsightsContext();\n\n // Handles user token changes\n insightsClient('onUserTokenChange', function (userToken) {\n setInsightsContext(userToken);\n });\n insightsClient('getUserToken', null, function (_error, userToken) {\n setInsightsContext(userToken);\n });\n onSelect(function (_ref5) {\n var item = _ref5.item,\n state = _ref5.state,\n event = _ref5.event,\n source = _ref5.source;\n if (!isAlgoliaInsightsHit(item)) {\n return;\n }\n onSelectEvent({\n state: state,\n event: event,\n insights: insights,\n item: item,\n insightsEvents: [_objectSpread({\n eventName: 'Item Selected'\n }, createClickedEvent({\n item: item,\n items: source.getItems().filter(isAlgoliaInsightsHit)\n }))]\n });\n });\n onActive(function (_ref6) {\n var item = _ref6.item,\n source = _ref6.source,\n state = _ref6.state,\n event = _ref6.event;\n if (!isAlgoliaInsightsHit(item)) {\n return;\n }\n onActiveEvent({\n state: state,\n event: event,\n insights: insights,\n item: item,\n insightsEvents: [_objectSpread({\n eventName: 'Item Active'\n }, createClickedEvent({\n item: item,\n items: source.getItems().filter(isAlgoliaInsightsHit)\n }))]\n });\n });\n },\n onStateChange: function onStateChange(_ref7) {\n var state = _ref7.state;\n debouncedOnStateChange({\n state: state\n });\n },\n __autocomplete_pluginOptions: options\n };\n}\nfunction getAlgoliaSources() {\n var _context$algoliaInsig;\n var algoliaSourceBase = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var context = arguments.length > 1 ? arguments[1] : undefined;\n return [].concat(_toConsumableArray(algoliaSourceBase), ['autocomplete-internal'], _toConsumableArray((_context$algoliaInsig = context.algoliaInsightsPlugin) !== null && _context$algoliaInsig !== void 0 && _context$algoliaInsig.__automaticInsights ? ['autocomplete-automatic'] : []));\n}\nfunction getOptions(options) {\n return _objectSpread({\n onItemsChange: function onItemsChange(_ref8) {\n var insights = _ref8.insights,\n insightsEvents = _ref8.insightsEvents,\n state = _ref8.state;\n insights.viewedObjectIDs.apply(insights, _toConsumableArray(insightsEvents.map(function (event) {\n return _objectSpread(_objectSpread({}, event), {}, {\n algoliaSource: getAlgoliaSources(event.algoliaSource, state.context)\n });\n })));\n },\n onSelect: function onSelect(_ref9) {\n var insights = _ref9.insights,\n insightsEvents = _ref9.insightsEvents,\n state = _ref9.state;\n insights.clickedObjectIDsAfterSearch.apply(insights, _toConsumableArray(insightsEvents.map(function (event) {\n return _objectSpread(_objectSpread({}, event), {}, {\n algoliaSource: getAlgoliaSources(event.algoliaSource, state.context)\n });\n })));\n },\n onActive: noop,\n __autocomplete_clickAnalytics: true\n }, options);\n}\nfunction loadInsights(environment) {\n var errorMessage = \"[Autocomplete]: Could not load search-insights.js. Please load it manually following https://alg.li/insights-autocomplete\";\n try {\n var script = environment.document.createElement('script');\n script.async = true;\n script.src = ALGOLIA_INSIGHTS_SRC;\n script.onerror = function () {\n // eslint-disable-next-line no-console\n console.error(errorMessage);\n };\n document.body.appendChild(script);\n } catch (cause) {\n // eslint-disable-next-line no-console\n console.error(errorMessage);\n }\n}\n\n/**\n * While `search-insights` supports both string and number user tokens,\n * the Search API only accepts strings. This function normalizes the user token.\n */\nfunction normalizeUserToken(userToken) {\n return typeof userToken === 'number' ? userToken.toString() : userToken;\n}","/**\n * Safely runs code meant for browser environments only.\n */\nexport function safelyRunOnBrowser(callback) {\n if (typeof window !== 'undefined') {\n return callback({\n window: window\n });\n }\n return undefined;\n}","export function createRef(initialValue) {\n return {\n current: initialValue\n };\n}","function createInternalCancelablePromise(promise, initialState) {\n var state = initialState;\n return {\n then: function then(onfulfilled, onrejected) {\n return createInternalCancelablePromise(promise.then(createCallback(onfulfilled, state, promise), createCallback(onrejected, state, promise)), state);\n },\n catch: function _catch(onrejected) {\n return createInternalCancelablePromise(promise.catch(createCallback(onrejected, state, promise)), state);\n },\n finally: function _finally(onfinally) {\n if (onfinally) {\n state.onCancelList.push(onfinally);\n }\n return createInternalCancelablePromise(promise.finally(createCallback(onfinally && function () {\n state.onCancelList = [];\n return onfinally();\n }, state, promise)), state);\n },\n cancel: function cancel() {\n state.isCanceled = true;\n var callbacks = state.onCancelList;\n state.onCancelList = [];\n callbacks.forEach(function (callback) {\n callback();\n });\n },\n isCanceled: function isCanceled() {\n return state.isCanceled === true;\n }\n };\n}\nexport function createCancelablePromise(executor) {\n return createInternalCancelablePromise(new Promise(function (resolve, reject) {\n return executor(resolve, reject);\n }), {\n isCanceled: false,\n onCancelList: []\n });\n}\ncreateCancelablePromise.resolve = function (value) {\n return cancelable(Promise.resolve(value));\n};\ncreateCancelablePromise.reject = function (reason) {\n return cancelable(Promise.reject(reason));\n};\nexport function cancelable(promise) {\n return createInternalCancelablePromise(promise, {\n isCanceled: false,\n onCancelList: []\n });\n}\nfunction createCallback(onResult, state, fallback) {\n if (!onResult) {\n return fallback;\n }\n return function callback(arg) {\n if (state.isCanceled) {\n return arg;\n }\n return onResult(arg);\n };\n}","// Ensures multiple callers sync to the same promise.\nvar _hasWaitPromiseResolved = true;\nvar _waitPromise;\nexport function createCancelablePromiseList() {\n var list = [];\n return {\n add: function add(cancelablePromise) {\n list.push(cancelablePromise);\n return cancelablePromise.finally(function () {\n list = list.filter(function (item) {\n return item !== cancelablePromise;\n });\n });\n },\n cancelAll: function cancelAll() {\n list.forEach(function (promise) {\n return promise.cancel();\n });\n },\n isEmpty: function isEmpty() {\n return list.length === 0;\n },\n wait: function wait(timeout) {\n // Reuse promise if already exists. Keeps multiple callers subscribed to the same promise.\n if (!_hasWaitPromiseResolved) {\n return _waitPromise;\n }\n\n // Creates a promise which either resolves after all pending requests complete\n // or the timeout is reached (if provided). Whichever comes first.\n _hasWaitPromiseResolved = false;\n _waitPromise = !timeout ? Promise.all(list) : Promise.race([Promise.all(list), new Promise(function (resolve) {\n return setTimeout(resolve, timeout);\n })]);\n return _waitPromise.then(function () {\n _hasWaitPromiseResolved = true;\n });\n }\n };\n}","/**\n * Returns the next active item ID from the current state.\n *\n * We allow circular keyboard navigation from the base index.\n * The base index can either be `null` (nothing is highlighted) or `0`\n * (the first item is highlighted).\n * The base index is allowed to get assigned `null` only if\n * `props.defaultActiveItemId` is `null`. This pattern allows to \"stop\"\n * by the actual query before navigating to other suggestions as seen on\n * Google or Amazon.\n *\n * @param moveAmount The offset to increment (or decrement) the last index\n * @param baseIndex The current index to compute the next index from\n * @param itemCount The number of items\n * @param defaultActiveItemId The default active index to fallback to\n */\nexport function getNextActiveItemId(moveAmount, baseIndex, itemCount, defaultActiveItemId) {\n if (!itemCount) {\n return null;\n }\n if (moveAmount < 0 && (baseIndex === null || defaultActiveItemId !== null && baseIndex === 0)) {\n return itemCount + moveAmount;\n }\n var numericIndex = (baseIndex === null ? -1 : baseIndex) + moveAmount;\n if (numericIndex <= -1 || numericIndex >= itemCount) {\n return defaultActiveItemId === null ? null : 0;\n }\n return numericIndex;\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nimport { invariant, decycle, noop } from '@algolia/autocomplete-shared';\nexport function getNormalizedSources(getSources, params) {\n var seenSourceIds = [];\n return Promise.resolve(getSources(params)).then(function (sources) {\n invariant(Array.isArray(sources), function () {\n return \"The `getSources` function must return an array of sources but returned type \".concat(JSON.stringify(_typeof(sources)), \":\\n\\n\").concat(JSON.stringify(decycle(sources), null, 2));\n });\n return Promise.all(sources\n // We allow `undefined` and `false` sources to allow users to use\n // `Boolean(query) && source` (=> `false`).\n // We need to remove these values at this point.\n .filter(function (maybeSource) {\n return Boolean(maybeSource);\n }).map(function (source) {\n invariant(typeof source.sourceId === 'string', 'A source must provide a `sourceId` string.');\n if (seenSourceIds.includes(source.sourceId)) {\n throw new Error(\"[Autocomplete] The `sourceId` \".concat(JSON.stringify(source.sourceId), \" is not unique.\"));\n }\n seenSourceIds.push(source.sourceId);\n var defaultSource = {\n getItemInputValue: function getItemInputValue(_ref) {\n var state = _ref.state;\n return state.query;\n },\n getItemUrl: function getItemUrl() {\n return undefined;\n },\n onSelect: function onSelect(_ref2) {\n var setIsOpen = _ref2.setIsOpen;\n setIsOpen(false);\n },\n onActive: noop,\n onResolve: noop\n };\n Object.keys(defaultSource).forEach(function (key) {\n defaultSource[key].__default = true;\n });\n var normalizedSource = _objectSpread(_objectSpread({}, defaultSource), source);\n return Promise.resolve(normalizedSource);\n }));\n });\n}","function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\n/**\n * If a plugin is configured to await a submit event, this returns a promise\n * for either the max timeout value found or until it completes.\n * Otherwise, return undefined.\n */\nexport var getPluginSubmitPromise = function getPluginSubmitPromise(plugins, pendingRequests) {\n var waitUntilComplete = false;\n var timeouts = [];\n var _iterator = _createForOfIteratorHelper(plugins),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _plugin$__autocomplet, _plugin$__autocomplet2, _plugin$__autocomplet3;\n var plugin = _step.value;\n var value = (_plugin$__autocomplet = plugin.__autocomplete_pluginOptions) === null || _plugin$__autocomplet === void 0 ? void 0 : (_plugin$__autocomplet2 = (_plugin$__autocomplet3 = _plugin$__autocomplet).awaitSubmit) === null || _plugin$__autocomplet2 === void 0 ? void 0 : _plugin$__autocomplet2.call(_plugin$__autocomplet3);\n if (typeof value === 'number') {\n timeouts.push(value);\n } else if (value === true) {\n waitUntilComplete = true;\n break; // break loop as bool overrides num array below\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n if (waitUntilComplete) {\n return pendingRequests.wait();\n } else if (timeouts.length > 0) {\n return pendingRequests.wait(Math.max.apply(Math, timeouts));\n }\n return undefined;\n};","// We don't have access to the autocomplete source when we call `onKeyDown`\n// or `onClick` because those are native browser events.\n// However, we can get the source from the suggestion index.\nfunction getCollectionFromActiveItemId(state) {\n // Given 3 sources with respectively 1, 2 and 3 suggestions: [1, 2, 3]\n // We want to get the accumulated counts:\n // [1, 1 + 2, 1 + 2 + 3] = [1, 3, 3 + 3] = [1, 3, 6]\n var accumulatedCollectionsCount = state.collections.map(function (collections) {\n return collections.items.length;\n }).reduce(function (acc, collectionsCount, index) {\n var previousValue = acc[index - 1] || 0;\n var nextValue = previousValue + collectionsCount;\n acc.push(nextValue);\n return acc;\n }, []);\n\n // Based on the accumulated counts, we can infer the index of the suggestion.\n var collectionIndex = accumulatedCollectionsCount.reduce(function (acc, current) {\n if (current <= state.activeItemId) {\n return acc + 1;\n }\n return acc;\n }, 0);\n return state.collections[collectionIndex];\n}\n\n/**\n * Gets the highlighted index relative to a suggestion object (not the absolute\n * highlighted index).\n *\n * Example:\n * [['a', 'b'], ['c', 'd', 'e'], ['f']]\n * ↑\n * (absolute: 3, relative: 1)\n */\nfunction getRelativeActiveItemId(_ref) {\n var state = _ref.state,\n collection = _ref.collection;\n var isOffsetFound = false;\n var counter = 0;\n var previousItemsOffset = 0;\n while (isOffsetFound === false) {\n var currentCollection = state.collections[counter];\n if (currentCollection === collection) {\n isOffsetFound = true;\n break;\n }\n previousItemsOffset += currentCollection.items.length;\n counter++;\n }\n return state.activeItemId - previousItemsOffset;\n}\nexport function getActiveItem(state) {\n var collection = getCollectionFromActiveItemId(state);\n if (!collection) {\n return null;\n }\n var item = collection.items[getRelativeActiveItemId({\n state: state,\n collection: collection\n })];\n var source = collection.source;\n var itemInputValue = source.getItemInputValue({\n item: item,\n state: state\n });\n var itemUrl = source.getItemUrl({\n item: item,\n state: state\n });\n return {\n item: item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n source: source\n };\n}","/**\n * Returns a full element id for an autocomplete element.\n *\n * @param autocompleteInstanceId The id of the autocomplete instance\n * @param elementId The specific element id\n * @param source The source of the element, when it needs to be scoped\n */\nexport function getAutocompleteElementId(autocompleteInstanceId, elementId, source) {\n return [autocompleteInstanceId, source === null || source === void 0 ? void 0 : source.sourceId, elementId].filter(Boolean).join('-').replace(/\\s/g, '');\n}","var regex = /((gt|sm)-|galaxy nexus)|samsung[- ]|samsungbrowser/i;\nexport function isSamsung(userAgent) {\n return Boolean(userAgent && userAgent.match(regex));\n}","export function getNativeEvent(event) {\n return event.nativeEvent || event;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { createCancelablePromiseList } from './utils';\nexport function createStore(reducer, props, onStoreStateChange) {\n var state = props.initialState;\n return {\n getState: function getState() {\n return state;\n },\n dispatch: function dispatch(action, payload) {\n var prevState = _objectSpread({}, state);\n state = reducer(state, {\n type: action,\n props: props,\n payload: payload\n });\n onStoreStateChange({\n state: state,\n prevState: prevState\n });\n },\n pendingRequests: createCancelablePromiseList()\n };\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { flatten } from '@algolia/autocomplete-shared';\nexport function getAutocompleteSetters(_ref) {\n var store = _ref.store;\n var setActiveItemId = function setActiveItemId(value) {\n store.dispatch('setActiveItemId', value);\n };\n var setQuery = function setQuery(value) {\n store.dispatch('setQuery', value);\n };\n var setCollections = function setCollections(rawValue) {\n var baseItemId = 0;\n var value = rawValue.map(function (collection) {\n return _objectSpread(_objectSpread({}, collection), {}, {\n // We flatten the stored items to support calling `getAlgoliaResults`\n // from the source itself.\n items: flatten(collection.items).map(function (item) {\n return _objectSpread(_objectSpread({}, item), {}, {\n __autocomplete_id: baseItemId++\n });\n })\n });\n });\n store.dispatch('setCollections', value);\n };\n var setIsOpen = function setIsOpen(value) {\n store.dispatch('setIsOpen', value);\n };\n var setStatus = function setStatus(value) {\n store.dispatch('setStatus', value);\n };\n var setContext = function setContext(value) {\n store.dispatch('setContext', value);\n };\n return {\n setActiveItemId: setActiveItemId,\n setQuery: setQuery,\n setCollections: setCollections,\n setIsOpen: setIsOpen,\n setStatus: setStatus,\n setContext: setContext\n };\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { getItemsCount, generateAutocompleteId, flatten } from '@algolia/autocomplete-shared';\nimport { getNormalizedSources } from './utils';\nexport function getDefaultProps(props, pluginSubscribers) {\n var _props$id;\n /* eslint-disable no-restricted-globals */\n var environment = typeof window !== 'undefined' ? window : {};\n /* eslint-enable no-restricted-globals */\n var plugins = props.plugins || [];\n return _objectSpread(_objectSpread({\n debug: false,\n openOnFocus: false,\n enterKeyHint: undefined,\n ignoreCompositionEvents: false,\n placeholder: '',\n autoFocus: false,\n defaultActiveItemId: null,\n stallThreshold: 300,\n insights: undefined,\n environment: environment,\n shouldPanelOpen: function shouldPanelOpen(_ref) {\n var state = _ref.state;\n return getItemsCount(state) > 0;\n },\n reshape: function reshape(_ref2) {\n var sources = _ref2.sources;\n return sources;\n }\n }, props), {}, {\n // Since `generateAutocompleteId` triggers a side effect (it increments\n // an internal counter), we don't want to execute it if unnecessary.\n id: (_props$id = props.id) !== null && _props$id !== void 0 ? _props$id : generateAutocompleteId(),\n plugins: plugins,\n // The following props need to be deeply defaulted.\n initialState: _objectSpread({\n activeItemId: null,\n query: '',\n completion: null,\n collections: [],\n isOpen: false,\n status: 'idle',\n context: {}\n }, props.initialState),\n onStateChange: function onStateChange(params) {\n var _props$onStateChange;\n (_props$onStateChange = props.onStateChange) === null || _props$onStateChange === void 0 ? void 0 : _props$onStateChange.call(props, params);\n plugins.forEach(function (x) {\n var _x$onStateChange;\n return (_x$onStateChange = x.onStateChange) === null || _x$onStateChange === void 0 ? void 0 : _x$onStateChange.call(x, params);\n });\n },\n onSubmit: function onSubmit(params) {\n var _props$onSubmit;\n (_props$onSubmit = props.onSubmit) === null || _props$onSubmit === void 0 ? void 0 : _props$onSubmit.call(props, params);\n plugins.forEach(function (x) {\n var _x$onSubmit;\n return (_x$onSubmit = x.onSubmit) === null || _x$onSubmit === void 0 ? void 0 : _x$onSubmit.call(x, params);\n });\n },\n onReset: function onReset(params) {\n var _props$onReset;\n (_props$onReset = props.onReset) === null || _props$onReset === void 0 ? void 0 : _props$onReset.call(props, params);\n plugins.forEach(function (x) {\n var _x$onReset;\n return (_x$onReset = x.onReset) === null || _x$onReset === void 0 ? void 0 : _x$onReset.call(x, params);\n });\n },\n getSources: function getSources(params) {\n return Promise.all([].concat(_toConsumableArray(plugins.map(function (plugin) {\n return plugin.getSources;\n })), [props.getSources]).filter(Boolean).map(function (getSources) {\n return getNormalizedSources(getSources, params);\n })).then(function (nested) {\n return flatten(nested);\n }).then(function (sources) {\n return sources.map(function (source) {\n return _objectSpread(_objectSpread({}, source), {}, {\n onSelect: function onSelect(params) {\n source.onSelect(params);\n pluginSubscribers.forEach(function (x) {\n var _x$onSelect;\n return (_x$onSelect = x.onSelect) === null || _x$onSelect === void 0 ? void 0 : _x$onSelect.call(x, params);\n });\n },\n onActive: function onActive(params) {\n source.onActive(params);\n pluginSubscribers.forEach(function (x) {\n var _x$onActive;\n return (_x$onActive = x.onActive) === null || _x$onActive === void 0 ? void 0 : _x$onActive.call(x, params);\n });\n },\n onResolve: function onResolve(params) {\n source.onResolve(params);\n pluginSubscribers.forEach(function (x) {\n var _x$onResolve;\n return (_x$onResolve = x.onResolve) === null || _x$onResolve === void 0 ? void 0 : _x$onResolve.call(x, params);\n });\n }\n });\n });\n });\n },\n navigator: _objectSpread({\n navigate: function navigate(_ref3) {\n var itemUrl = _ref3.itemUrl;\n environment.location.assign(itemUrl);\n },\n navigateNewTab: function navigateNewTab(_ref4) {\n var itemUrl = _ref4.itemUrl;\n var windowReference = environment.open(itemUrl, '_blank', 'noopener');\n windowReference === null || windowReference === void 0 ? void 0 : windowReference.focus();\n },\n navigateNewWindow: function navigateNewWindow(_ref5) {\n var itemUrl = _ref5.itemUrl;\n environment.open(itemUrl, '_blank', 'noopener');\n }\n }, props.navigator)\n });\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { flatten } from '@algolia/autocomplete-shared';\nexport function reshape(_ref) {\n var collections = _ref.collections,\n props = _ref.props,\n state = _ref.state;\n // Sources are grouped by `sourceId` to conveniently pick them via destructuring.\n // Example: `const { recentSearchesPlugin } = sourcesBySourceId`\n var originalSourcesBySourceId = collections.reduce(function (acc, collection) {\n return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, collection.source.sourceId, _objectSpread(_objectSpread({}, collection.source), {}, {\n getItems: function getItems() {\n // We provide the resolved items from the collection to the `reshape` prop.\n return flatten(collection.items);\n }\n })));\n }, {});\n var _props$plugins$reduce = props.plugins.reduce(function (acc, plugin) {\n if (plugin.reshape) {\n return plugin.reshape(acc);\n }\n return acc;\n }, {\n sourcesBySourceId: originalSourcesBySourceId,\n state: state\n }),\n sourcesBySourceId = _props$plugins$reduce.sourcesBySourceId;\n var reshapeSources = props.reshape({\n sourcesBySourceId: sourcesBySourceId,\n sources: Object.values(sourcesBySourceId),\n state: state\n });\n\n // We reconstruct the collections with the items modified by the `reshape` prop.\n return flatten(reshapeSources).filter(Boolean).map(function (source) {\n return {\n source: source,\n items: source.getItems()\n };\n });\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nimport { decycle, flatten, invariant } from '@algolia/autocomplete-shared';\nimport { mapToAlgoliaResponse } from './utils';\nfunction isDescription(item) {\n return Boolean(item.execute);\n}\nfunction isRequesterDescription(description) {\n return Boolean(description === null || description === void 0 ? void 0 : description.execute);\n}\nexport function preResolve(itemsOrDescription, sourceId, state) {\n if (isRequesterDescription(itemsOrDescription)) {\n var contextParameters = itemsOrDescription.requesterId === 'algolia' ? Object.assign.apply(Object, [{}].concat(_toConsumableArray(Object.keys(state.context).map(function (key) {\n var _state$context$key;\n return (_state$context$key = state.context[key]) === null || _state$context$key === void 0 ? void 0 : _state$context$key.__algoliaSearchParameters;\n })))) : {};\n return _objectSpread(_objectSpread({}, itemsOrDescription), {}, {\n requests: itemsOrDescription.queries.map(function (query) {\n return {\n query: itemsOrDescription.requesterId === 'algolia' ? _objectSpread(_objectSpread({}, query), {}, {\n params: _objectSpread(_objectSpread({}, contextParameters), query.params)\n }) : query,\n sourceId: sourceId,\n transformResponse: itemsOrDescription.transformResponse\n };\n })\n });\n }\n return {\n items: itemsOrDescription,\n sourceId: sourceId\n };\n}\nexport function resolve(items) {\n var packed = items.reduce(function (acc, current) {\n if (!isDescription(current)) {\n acc.push(current);\n return acc;\n }\n var searchClient = current.searchClient,\n execute = current.execute,\n requesterId = current.requesterId,\n requests = current.requests;\n var container = acc.find(function (item) {\n return isDescription(current) && isDescription(item) && item.searchClient === searchClient && Boolean(requesterId) && item.requesterId === requesterId;\n });\n if (container) {\n var _container$items;\n (_container$items = container.items).push.apply(_container$items, _toConsumableArray(requests));\n } else {\n var request = {\n execute: execute,\n requesterId: requesterId,\n items: requests,\n searchClient: searchClient\n };\n acc.push(request);\n }\n return acc;\n }, []);\n var values = packed.map(function (maybeDescription) {\n if (!isDescription(maybeDescription)) {\n return Promise.resolve(maybeDescription);\n }\n var _ref = maybeDescription,\n execute = _ref.execute,\n items = _ref.items,\n searchClient = _ref.searchClient;\n return execute({\n searchClient: searchClient,\n requests: items\n });\n });\n return Promise.all(values).then(function (responses) {\n return flatten(responses);\n });\n}\nexport function postResolve(responses, sources, store) {\n return sources.map(function (source) {\n var matches = responses.filter(function (response) {\n return response.sourceId === source.sourceId;\n });\n var results = matches.map(function (_ref2) {\n var items = _ref2.items;\n return items;\n });\n var transform = matches[0].transformResponse;\n var items = transform ? transform(mapToAlgoliaResponse(results)) : results;\n source.onResolve({\n source: source,\n results: results,\n items: items,\n state: store.getState()\n });\n invariant(Array.isArray(items), function () {\n return \"The `getItems` function from source \\\"\".concat(source.sourceId, \"\\\" must return an array of items but returned type \").concat(JSON.stringify(_typeof(items)), \":\\n\\n\").concat(JSON.stringify(decycle(items), null, 2), \".\\n\\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems\");\n });\n invariant(items.every(Boolean), \"The `getItems` function from source \\\"\".concat(source.sourceId, \"\\\" must return an array of items but returned \").concat(JSON.stringify(undefined), \".\\n\\nDid you forget to return items?\\n\\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems\"));\n return {\n source: source,\n items: items\n };\n });\n}","export function mapToAlgoliaResponse(rawResults) {\n return {\n results: rawResults,\n hits: rawResults.map(function (result) {\n return result.hits;\n }).filter(Boolean),\n facetHits: rawResults.map(function (result) {\n var _facetHits;\n return (_facetHits = result.facetHits) === null || _facetHits === void 0 ? void 0 : _facetHits.map(function (facetHit) {\n // Bring support for the highlighting components.\n return {\n label: facetHit.value,\n count: facetHit.count,\n _highlightResult: {\n label: {\n value: facetHit.highlighted\n }\n }\n };\n });\n }).filter(Boolean)\n };\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"event\", \"nextState\", \"props\", \"query\", \"refresh\", \"store\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport { reshape } from './reshape';\nimport { preResolve, resolve, postResolve } from './resolve';\nimport { cancelable, createConcurrentSafePromise, getActiveItem } from './utils';\nvar lastStalledId = null;\nvar runConcurrentSafePromise = createConcurrentSafePromise();\nexport function onInput(_ref) {\n var event = _ref.event,\n _ref$nextState = _ref.nextState,\n nextState = _ref$nextState === void 0 ? {} : _ref$nextState,\n props = _ref.props,\n query = _ref.query,\n refresh = _ref.refresh,\n store = _ref.store,\n setters = _objectWithoutProperties(_ref, _excluded);\n if (lastStalledId) {\n props.environment.clearTimeout(lastStalledId);\n }\n var setCollections = setters.setCollections,\n setIsOpen = setters.setIsOpen,\n setQuery = setters.setQuery,\n setActiveItemId = setters.setActiveItemId,\n setStatus = setters.setStatus,\n setContext = setters.setContext;\n setQuery(query);\n setActiveItemId(props.defaultActiveItemId);\n if (!query && props.openOnFocus === false) {\n var _nextState$isOpen;\n var collections = store.getState().collections.map(function (collection) {\n return _objectSpread(_objectSpread({}, collection), {}, {\n items: []\n });\n });\n setStatus('idle');\n setCollections(collections);\n setIsOpen((_nextState$isOpen = nextState.isOpen) !== null && _nextState$isOpen !== void 0 ? _nextState$isOpen : props.shouldPanelOpen({\n state: store.getState()\n }));\n\n // We make sure to update the latest resolved value of the tracked\n // promises to keep late resolving promises from \"cancelling\" the state\n // updates performed in this code path.\n // We chain with a void promise to respect `onInput`'s expected return type.\n var _request = cancelable(runConcurrentSafePromise(collections).then(function () {\n return Promise.resolve();\n }));\n return store.pendingRequests.add(_request);\n }\n setStatus('loading');\n lastStalledId = props.environment.setTimeout(function () {\n setStatus('stalled');\n }, props.stallThreshold);\n\n // We track the entire promise chain triggered by `onInput` before mutating\n // the Autocomplete state to make sure that any state manipulation is based on\n // fresh data regardless of when promises individually resolve.\n // We don't track nested promises and only rely on the full chain resolution,\n // meaning we should only ever manipulate the state once this concurrent-safe\n // promise is resolved.\n var request = cancelable(runConcurrentSafePromise(props.getSources(_objectSpread({\n query: query,\n refresh: refresh,\n state: store.getState()\n }, setters)).then(function (sources) {\n return Promise.all(sources.map(function (source) {\n return Promise.resolve(source.getItems(_objectSpread({\n query: query,\n refresh: refresh,\n state: store.getState()\n }, setters))).then(function (itemsOrDescription) {\n return preResolve(itemsOrDescription, source.sourceId, store.getState());\n });\n })).then(resolve).then(function (responses) {\n var __automaticInsights = responses.some(function (_ref2) {\n var items = _ref2.items;\n return isSearchResponseWithAutomaticInsightsFlag(items);\n });\n\n // No need to pollute the context if `__automaticInsights=false`\n if (__automaticInsights) {\n var _store$getState$conte;\n setContext({\n algoliaInsightsPlugin: _objectSpread(_objectSpread({}, ((_store$getState$conte = store.getState().context) === null || _store$getState$conte === void 0 ? void 0 : _store$getState$conte.algoliaInsightsPlugin) || {}), {}, {\n __automaticInsights: __automaticInsights\n })\n });\n }\n return postResolve(responses, sources, store);\n }).then(function (collections) {\n return reshape({\n collections: collections,\n props: props,\n state: store.getState()\n });\n });\n }))).then(function (collections) {\n var _nextState$isOpen2;\n // Parameters passed to `onInput` could be stale when the following code\n // executes, because `onInput` calls may not resolve in order.\n // If it becomes a problem we'll need to save the last passed parameters.\n // See: https://codesandbox.io/s/agitated-cookies-y290z\n\n setStatus('idle');\n setCollections(collections);\n var isPanelOpen = props.shouldPanelOpen({\n state: store.getState()\n });\n setIsOpen((_nextState$isOpen2 = nextState.isOpen) !== null && _nextState$isOpen2 !== void 0 ? _nextState$isOpen2 : props.openOnFocus && !query && isPanelOpen || isPanelOpen);\n var highlightedItem = getActiveItem(store.getState());\n if (store.getState().activeItemId !== null && highlightedItem) {\n var item = highlightedItem.item,\n itemInputValue = highlightedItem.itemInputValue,\n itemUrl = highlightedItem.itemUrl,\n source = highlightedItem.source;\n source.onActive(_objectSpread({\n event: event,\n item: item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n refresh: refresh,\n source: source,\n state: store.getState()\n }, setters));\n }\n }).finally(function () {\n setStatus('idle');\n if (lastStalledId) {\n props.environment.clearTimeout(lastStalledId);\n }\n });\n return store.pendingRequests.add(request);\n}\nfunction isSearchResponseWithAutomaticInsightsFlag(items) {\n return !Array.isArray(items) && Boolean(items === null || items === void 0 ? void 0 : items._automaticInsights);\n}","/**\n * Creates a runner that executes promises in a concurrent-safe way.\n *\n * This is useful to prevent older promises to resolve after a newer promise,\n * otherwise resulting in stale resolved values.\n */\nexport function createConcurrentSafePromise() {\n var basePromiseId = -1;\n var latestResolvedId = -1;\n var latestResolvedValue = undefined;\n return function runConcurrentSafePromise(promise) {\n basePromiseId++;\n var currentPromiseId = basePromiseId;\n return Promise.resolve(promise).then(function (x) {\n // The promise might take too long to resolve and get outdated. This would\n // result in resolving stale values.\n // When this happens, we ignore the promise value and return the one\n // coming from the latest resolved value.\n //\n // +----------------------------------+\n // | 100ms |\n // | run(1) +---> R1 |\n // | 300ms |\n // | run(2) +-------------> R2 (SKIP) |\n // | 200ms |\n // | run(3) +--------> R3 |\n // +----------------------------------+\n if (latestResolvedValue && currentPromiseId < latestResolvedId) {\n return latestResolvedValue;\n }\n latestResolvedId = currentPromiseId;\n latestResolvedValue = x;\n return x;\n });\n };\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"event\", \"props\", \"refresh\", \"store\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport { onInput } from './onInput';\nimport { getPluginSubmitPromise, getActiveItem, getAutocompleteElementId } from './utils';\nexport function onKeyDown(_ref) {\n var event = _ref.event,\n props = _ref.props,\n refresh = _ref.refresh,\n store = _ref.store,\n setters = _objectWithoutProperties(_ref, _excluded);\n if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n // eslint-disable-next-line no-inner-declarations\n var triggerScrollIntoView = function triggerScrollIntoView() {\n var highlightedItem = getActiveItem(store.getState());\n var nodeItem = props.environment.document.getElementById(getAutocompleteElementId(props.id, \"item-\".concat(store.getState().activeItemId), highlightedItem === null || highlightedItem === void 0 ? void 0 : highlightedItem.source));\n if (nodeItem) {\n if (nodeItem.scrollIntoViewIfNeeded) {\n nodeItem.scrollIntoViewIfNeeded(false);\n } else {\n nodeItem.scrollIntoView(false);\n }\n }\n }; // eslint-disable-next-line no-inner-declarations\n var triggerOnActive = function triggerOnActive() {\n var highlightedItem = getActiveItem(store.getState());\n if (store.getState().activeItemId !== null && highlightedItem) {\n var item = highlightedItem.item,\n itemInputValue = highlightedItem.itemInputValue,\n itemUrl = highlightedItem.itemUrl,\n source = highlightedItem.source;\n source.onActive(_objectSpread({\n event: event,\n item: item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n refresh: refresh,\n source: source,\n state: store.getState()\n }, setters));\n }\n }; // Default browser behavior changes the caret placement on ArrowUp and\n // ArrowDown.\n event.preventDefault();\n\n // When re-opening the panel, we need to split the logic to keep the actions\n // synchronized as `onInput` returns a promise.\n if (store.getState().isOpen === false && (props.openOnFocus || Boolean(store.getState().query))) {\n onInput(_objectSpread({\n event: event,\n props: props,\n query: store.getState().query,\n refresh: refresh,\n store: store\n }, setters)).then(function () {\n store.dispatch(event.key, {\n nextActiveItemId: props.defaultActiveItemId\n });\n triggerOnActive();\n // Since we rely on the DOM, we need to wait for all the micro tasks to\n // finish (which include re-opening the panel) to make sure all the\n // elements are available.\n setTimeout(triggerScrollIntoView, 0);\n });\n } else {\n store.dispatch(event.key, {});\n triggerOnActive();\n triggerScrollIntoView();\n }\n } else if (event.key === 'Escape') {\n // This prevents the default browser behavior on `input[type=\"search\"]`\n // from removing the query right away because we first want to close the\n // panel.\n event.preventDefault();\n store.dispatch(event.key, null);\n\n // Hitting the `Escape` key signals the end of a user interaction with the\n // autocomplete. At this point, we should ignore any requests that are still\n // pending and could reopen the panel once they resolve, because that would\n // result in an unsolicited UI behavior.\n store.pendingRequests.cancelAll();\n } else if (event.key === 'Tab') {\n store.dispatch('blur', null);\n\n // Hitting the `Tab` key signals the end of a user interaction with the\n // autocomplete. At this point, we should ignore any requests that are still\n // pending and could reopen the panel once they resolve, because that would\n // result in an unsolicited UI behavior.\n store.pendingRequests.cancelAll();\n } else if (event.key === 'Enter') {\n // No active item, so we let the browser handle the native `onSubmit` form\n // event.\n if (store.getState().activeItemId === null || store.getState().collections.every(function (collection) {\n return collection.items.length === 0;\n })) {\n var waitForSubmit = getPluginSubmitPromise(props.plugins, store.pendingRequests);\n if (waitForSubmit !== undefined) {\n waitForSubmit.then(store.pendingRequests.cancelAll); // Cancel the rest if timeout number is provided\n } else if (!props.debug) {\n // If requests are still pending when the panel closes, they could reopen\n // the panel once they resolve.\n // We want to prevent any subsequent query from reopening the panel\n // because it would result in an unsolicited UI behavior.\n store.pendingRequests.cancelAll();\n }\n return;\n }\n\n // This prevents the `onSubmit` event to be sent because an item is\n // highlighted.\n event.preventDefault();\n var _ref2 = getActiveItem(store.getState()),\n item = _ref2.item,\n itemInputValue = _ref2.itemInputValue,\n itemUrl = _ref2.itemUrl,\n source = _ref2.source;\n if (event.metaKey || event.ctrlKey) {\n if (itemUrl !== undefined) {\n source.onSelect(_objectSpread({\n event: event,\n item: item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n refresh: refresh,\n source: source,\n state: store.getState()\n }, setters));\n props.navigator.navigateNewTab({\n itemUrl: itemUrl,\n item: item,\n state: store.getState()\n });\n }\n } else if (event.shiftKey) {\n if (itemUrl !== undefined) {\n source.onSelect(_objectSpread({\n event: event,\n item: item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n refresh: refresh,\n source: source,\n state: store.getState()\n }, setters));\n props.navigator.navigateNewWindow({\n itemUrl: itemUrl,\n item: item,\n state: store.getState()\n });\n }\n } else if (event.altKey) {\n // Keep native browser behavior\n } else {\n if (itemUrl !== undefined) {\n source.onSelect(_objectSpread({\n event: event,\n item: item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n refresh: refresh,\n source: source,\n state: store.getState()\n }, setters));\n props.navigator.navigate({\n itemUrl: itemUrl,\n item: item,\n state: store.getState()\n });\n return;\n }\n onInput(_objectSpread({\n event: event,\n nextState: {\n isOpen: false\n },\n props: props,\n query: itemInputValue,\n refresh: refresh,\n store: store\n }, setters)).then(function () {\n source.onSelect(_objectSpread({\n event: event,\n item: item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n refresh: refresh,\n source: source,\n state: store.getState()\n }, setters));\n });\n }\n }\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"props\", \"refresh\", \"store\"],\n _excluded2 = [\"inputElement\", \"formElement\", \"panelElement\"],\n _excluded3 = [\"inputElement\"],\n _excluded4 = [\"inputElement\", \"maxLength\"],\n _excluded5 = [\"source\"],\n _excluded6 = [\"item\", \"source\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport { noop } from '@algolia/autocomplete-shared';\nimport { onInput } from './onInput';\nimport { onKeyDown as _onKeyDown } from './onKeyDown';\nimport { getPluginSubmitPromise, getActiveItem, getAutocompleteElementId, isOrContainsNode, isSamsung, getNativeEvent } from './utils';\nexport function getPropGetters(_ref) {\n var props = _ref.props,\n refresh = _ref.refresh,\n store = _ref.store,\n setters = _objectWithoutProperties(_ref, _excluded);\n var getEnvironmentProps = function getEnvironmentProps(providedProps) {\n var inputElement = providedProps.inputElement,\n formElement = providedProps.formElement,\n panelElement = providedProps.panelElement,\n rest = _objectWithoutProperties(providedProps, _excluded2);\n function onMouseDownOrTouchStart(event) {\n // The `onTouchStart`/`onMouseDown` events shouldn't trigger the `blur`\n // handler when it's not an interaction with Autocomplete.\n // We detect it with the following heuristics:\n // - the panel is closed AND there are no pending requests\n // (no interaction with the autocomplete, no future state updates)\n // - OR the touched target is the input element (should open the panel)\n var isAutocompleteInteraction = store.getState().isOpen || !store.pendingRequests.isEmpty();\n if (!isAutocompleteInteraction || event.target === inputElement) {\n return;\n }\n\n // @TODO: support cases where there are multiple Autocomplete instances.\n // Right now, a second instance makes this computation return false.\n var isTargetWithinAutocomplete = [formElement, panelElement].some(function (contextNode) {\n return isOrContainsNode(contextNode, event.target);\n });\n if (isTargetWithinAutocomplete === false) {\n store.dispatch('blur', null);\n\n // If requests are still pending when the user closes the panel, they\n // could reopen the panel once they resolve.\n // We want to prevent any subsequent query from reopening the panel\n // because it would result in an unsolicited UI behavior.\n if (!props.debug) {\n store.pendingRequests.cancelAll();\n }\n }\n }\n return _objectSpread({\n // We do not rely on the native `blur` event of the input to close the\n // panel, but rather on a custom `touchstart`/`mousedown` event outside\n // of the autocomplete elements.\n // This ensures we don't mistakenly interpret interactions within the\n // autocomplete (but outside of the input) as a signal to close the panel.\n // For example, clicking reset button causes an input blur, but if\n // `openOnFocus=true`, it shouldn't close the panel.\n // On touch devices, scrolling results (`touchmove`) causes an input blur\n // but shouldn't close the panel.\n onTouchStart: onMouseDownOrTouchStart,\n onMouseDown: onMouseDownOrTouchStart,\n // When scrolling on touch devices (mobiles, tablets, etc.), we want to\n // mimic the native platform behavior where the input is blurred to\n // hide the virtual keyboard. This gives more vertical space to\n // discover all the suggestions showing up in the panel.\n onTouchMove: function onTouchMove(event) {\n if (store.getState().isOpen === false || inputElement !== props.environment.document.activeElement || event.target === inputElement) {\n return;\n }\n inputElement.blur();\n }\n }, rest);\n };\n var getRootProps = function getRootProps(rest) {\n return _objectSpread({\n role: 'combobox',\n 'aria-expanded': store.getState().isOpen,\n 'aria-haspopup': 'listbox',\n 'aria-controls': store.getState().isOpen ? store.getState().collections.map(function (_ref2) {\n var source = _ref2.source;\n return getAutocompleteElementId(props.id, 'list', source);\n }).join(' ') : undefined,\n 'aria-labelledby': getAutocompleteElementId(props.id, 'label')\n }, rest);\n };\n var getFormProps = function getFormProps(providedProps) {\n var inputElement = providedProps.inputElement,\n rest = _objectWithoutProperties(providedProps, _excluded3);\n var handleSubmit = function handleSubmit(event) {\n var _providedProps$inputE;\n props.onSubmit(_objectSpread({\n event: event,\n refresh: refresh,\n state: store.getState()\n }, setters));\n store.dispatch('submit', null);\n (_providedProps$inputE = providedProps.inputElement) === null || _providedProps$inputE === void 0 ? void 0 : _providedProps$inputE.blur();\n };\n return _objectSpread({\n action: '',\n noValidate: true,\n role: 'search',\n onSubmit: function onSubmit(event) {\n event.preventDefault();\n var waitForSubmit = getPluginSubmitPromise(props.plugins, store.pendingRequests);\n if (waitForSubmit !== undefined) {\n waitForSubmit.then(function () {\n return handleSubmit(event);\n });\n } else {\n handleSubmit(event);\n }\n },\n onReset: function onReset(event) {\n var _providedProps$inputE2;\n event.preventDefault();\n props.onReset(_objectSpread({\n event: event,\n refresh: refresh,\n state: store.getState()\n }, setters));\n store.dispatch('reset', null);\n (_providedProps$inputE2 = providedProps.inputElement) === null || _providedProps$inputE2 === void 0 ? void 0 : _providedProps$inputE2.focus();\n }\n }, rest);\n };\n var getInputProps = function getInputProps(providedProps) {\n var _props$environment$na;\n function onFocus(event) {\n // We want to trigger a query when `openOnFocus` is true\n // because the panel should open with the current query.\n if (props.openOnFocus || Boolean(store.getState().query)) {\n onInput(_objectSpread({\n event: event,\n props: props,\n query: store.getState().completion || store.getState().query,\n refresh: refresh,\n store: store\n }, setters));\n }\n store.dispatch('focus', null);\n }\n var _ref3 = providedProps || {},\n inputElement = _ref3.inputElement,\n _ref3$maxLength = _ref3.maxLength,\n maxLength = _ref3$maxLength === void 0 ? 512 : _ref3$maxLength,\n rest = _objectWithoutProperties(_ref3, _excluded4);\n var activeItem = getActiveItem(store.getState());\n var userAgent = ((_props$environment$na = props.environment.navigator) === null || _props$environment$na === void 0 ? void 0 : _props$environment$na.userAgent) || '';\n var shouldFallbackKeyHint = isSamsung(userAgent);\n var enterKeyHint = props.enterKeyHint || (activeItem !== null && activeItem !== void 0 && activeItem.itemUrl && !shouldFallbackKeyHint ? 'go' : 'search');\n return _objectSpread({\n 'aria-autocomplete': 'both',\n 'aria-activedescendant': store.getState().isOpen && store.getState().activeItemId !== null ? getAutocompleteElementId(props.id, \"item-\".concat(store.getState().activeItemId), activeItem === null || activeItem === void 0 ? void 0 : activeItem.source) : undefined,\n 'aria-controls': store.getState().isOpen ? store.getState().collections.filter(function (collection) {\n return collection.items.length > 0;\n }).map(function (_ref4) {\n var source = _ref4.source;\n return getAutocompleteElementId(props.id, 'list', source);\n }).join(' ') : undefined,\n 'aria-labelledby': getAutocompleteElementId(props.id, 'label'),\n value: store.getState().completion || store.getState().query,\n id: getAutocompleteElementId(props.id, 'input'),\n autoComplete: 'off',\n autoCorrect: 'off',\n autoCapitalize: 'off',\n enterKeyHint: enterKeyHint,\n spellCheck: 'false',\n autoFocus: props.autoFocus,\n placeholder: props.placeholder,\n maxLength: maxLength,\n type: 'search',\n onChange: function onChange(event) {\n var value = event.currentTarget.value;\n if (props.ignoreCompositionEvents && getNativeEvent(event).isComposing) {\n setters.setQuery(value);\n return;\n }\n onInput(_objectSpread({\n event: event,\n props: props,\n query: value.slice(0, maxLength),\n refresh: refresh,\n store: store\n }, setters));\n },\n onCompositionEnd: function onCompositionEnd(event) {\n onInput(_objectSpread({\n event: event,\n props: props,\n query: event.currentTarget.value.slice(0, maxLength),\n refresh: refresh,\n store: store\n }, setters));\n },\n onKeyDown: function onKeyDown(event) {\n if (getNativeEvent(event).isComposing) {\n return;\n }\n _onKeyDown(_objectSpread({\n event: event,\n props: props,\n refresh: refresh,\n store: store\n }, setters));\n },\n onFocus: onFocus,\n // We don't rely on the `blur` event.\n // See explanation in `onTouchStart`/`onMouseDown`.\n // @MAJOR See if we need to keep this handler.\n onBlur: noop,\n onClick: function onClick(event) {\n // When the panel is closed and you click on the input while\n // the input is focused, the `onFocus` event is not triggered\n // (default browser behavior).\n // In an autocomplete context, it makes sense to open the panel in this\n // case.\n // We mimic this event by catching the `onClick` event which\n // triggers the `onFocus` for the panel to open.\n if (providedProps.inputElement === props.environment.document.activeElement && !store.getState().isOpen) {\n onFocus(event);\n }\n }\n }, rest);\n };\n var getLabelProps = function getLabelProps(rest) {\n return _objectSpread({\n htmlFor: getAutocompleteElementId(props.id, 'input'),\n id: getAutocompleteElementId(props.id, 'label')\n }, rest);\n };\n var getListProps = function getListProps(providedProps) {\n var _ref5 = providedProps || {},\n source = _ref5.source,\n rest = _objectWithoutProperties(_ref5, _excluded5);\n return _objectSpread({\n role: 'listbox',\n 'aria-labelledby': getAutocompleteElementId(props.id, 'label'),\n id: getAutocompleteElementId(props.id, 'list', source)\n }, rest);\n };\n var getPanelProps = function getPanelProps(rest) {\n return _objectSpread({\n onMouseDown: function onMouseDown(event) {\n // Prevents the `activeElement` from being changed to the panel so\n // that the blur event is not triggered, otherwise it closes the\n // panel.\n event.preventDefault();\n },\n onMouseLeave: function onMouseLeave() {\n store.dispatch('mouseleave', null);\n }\n }, rest);\n };\n var getItemProps = function getItemProps(providedProps) {\n var item = providedProps.item,\n source = providedProps.source,\n rest = _objectWithoutProperties(providedProps, _excluded6);\n return _objectSpread({\n id: getAutocompleteElementId(props.id, \"item-\".concat(item.__autocomplete_id), source),\n role: 'option',\n 'aria-selected': store.getState().activeItemId === item.__autocomplete_id,\n onMouseMove: function onMouseMove(event) {\n if (item.__autocomplete_id === store.getState().activeItemId) {\n return;\n }\n store.dispatch('mousemove', item.__autocomplete_id);\n var activeItem = getActiveItem(store.getState());\n if (store.getState().activeItemId !== null && activeItem) {\n var _item = activeItem.item,\n itemInputValue = activeItem.itemInputValue,\n itemUrl = activeItem.itemUrl,\n _source = activeItem.source;\n _source.onActive(_objectSpread({\n event: event,\n item: _item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n refresh: refresh,\n source: _source,\n state: store.getState()\n }, setters));\n }\n },\n onMouseDown: function onMouseDown(event) {\n // Prevents the `activeElement` from being changed to the item so it\n // can remain with the current `activeElement`.\n event.preventDefault();\n },\n onClick: function onClick(event) {\n var itemInputValue = source.getItemInputValue({\n item: item,\n state: store.getState()\n });\n var itemUrl = source.getItemUrl({\n item: item,\n state: store.getState()\n });\n\n // If `getItemUrl` is provided, it means that the suggestion\n // is a link, not plain text that aims at updating the query.\n // We can therefore skip the state change because it will update\n // the `activeItemId`, resulting in a UI flash, especially\n // noticeable on mobile.\n var runPreCommand = itemUrl ? Promise.resolve() : onInput(_objectSpread({\n event: event,\n nextState: {\n isOpen: false\n },\n props: props,\n query: itemInputValue,\n refresh: refresh,\n store: store\n }, setters));\n runPreCommand.then(function () {\n source.onSelect(_objectSpread({\n event: event,\n item: item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n refresh: refresh,\n source: source,\n state: store.getState()\n }, setters));\n });\n }\n }, rest);\n };\n return {\n getEnvironmentProps: getEnvironmentProps,\n getRootProps: getRootProps,\n getFormProps: getFormProps,\n getLabelProps: getLabelProps,\n getInputProps: getInputProps,\n getPanelProps: getPanelProps,\n getListProps: getListProps,\n getItemProps: getItemProps\n };\n}","export function isOrContainsNode(parent, child) {\n return parent === child || parent.contains(child);\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { userAgents } from '@algolia/autocomplete-shared';\nexport function getMetadata(_ref) {\n var _, _options$__autocomple, _options$__autocomple2, _options$__autocomple3;\n var plugins = _ref.plugins,\n options = _ref.options;\n var optionsKey = (_ = (((_options$__autocomple = options.__autocomplete_metadata) === null || _options$__autocomple === void 0 ? void 0 : _options$__autocomple.userAgents) || [])[0]) === null || _ === void 0 ? void 0 : _.segment;\n var extraOptions = optionsKey ? _defineProperty({}, optionsKey, Object.keys(((_options$__autocomple2 = options.__autocomplete_metadata) === null || _options$__autocomple2 === void 0 ? void 0 : _options$__autocomple2.options) || {})) : {};\n return {\n plugins: plugins.map(function (plugin) {\n return {\n name: plugin.name,\n options: Object.keys(plugin.__autocomplete_pluginOptions || [])\n };\n }),\n options: _objectSpread({\n 'autocomplete-core': Object.keys(options)\n }, extraOptions),\n ua: userAgents.concat(((_options$__autocomple3 = options.__autocomplete_metadata) === null || _options$__autocomple3 === void 0 ? void 0 : _options$__autocomple3.userAgents) || [])\n };\n}\nexport function injectMetadata(_ref3) {\n var _environment$navigato, _environment$navigato2;\n var metadata = _ref3.metadata,\n environment = _ref3.environment;\n var isMetadataEnabled = (_environment$navigato = environment.navigator) === null || _environment$navigato === void 0 ? void 0 : (_environment$navigato2 = _environment$navigato.userAgent) === null || _environment$navigato2 === void 0 ? void 0 : _environment$navigato2.includes('Algolia Crawler');\n if (isMetadataEnabled) {\n var metadataContainer = environment.document.createElement('meta');\n var headRef = environment.document.querySelector('head');\n metadataContainer.name = 'algolia:metadata';\n setTimeout(function () {\n metadataContainer.content = JSON.stringify(metadata);\n headRef.appendChild(metadataContainer);\n }, 0);\n }\n}","import { getActiveItem } from './utils';\nexport function getCompletion(_ref) {\n var _getActiveItem;\n var state = _ref.state;\n if (state.isOpen === false || state.activeItemId === null) {\n return null;\n }\n return ((_getActiveItem = getActiveItem(state)) === null || _getActiveItem === void 0 ? void 0 : _getActiveItem.itemInputValue) || null;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { getItemsCount, invariant } from '@algolia/autocomplete-shared';\nimport { getCompletion } from './getCompletion';\nimport { getNextActiveItemId } from './utils';\nexport var stateReducer = function stateReducer(state, action) {\n switch (action.type) {\n case 'setActiveItemId':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: action.payload\n });\n }\n case 'setQuery':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n query: action.payload,\n completion: null\n });\n }\n case 'setCollections':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n collections: action.payload\n });\n }\n case 'setIsOpen':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n isOpen: action.payload\n });\n }\n case 'setStatus':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n status: action.payload\n });\n }\n case 'setContext':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n context: _objectSpread(_objectSpread({}, state.context), action.payload)\n });\n }\n case 'ArrowDown':\n {\n var nextState = _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: action.payload.hasOwnProperty('nextActiveItemId') ? action.payload.nextActiveItemId : getNextActiveItemId(1, state.activeItemId, getItemsCount(state), action.props.defaultActiveItemId)\n });\n return _objectSpread(_objectSpread({}, nextState), {}, {\n completion: getCompletion({\n state: nextState\n })\n });\n }\n case 'ArrowUp':\n {\n var _nextState = _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: getNextActiveItemId(-1, state.activeItemId, getItemsCount(state), action.props.defaultActiveItemId)\n });\n return _objectSpread(_objectSpread({}, _nextState), {}, {\n completion: getCompletion({\n state: _nextState\n })\n });\n }\n case 'Escape':\n {\n if (state.isOpen) {\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: null,\n isOpen: false,\n completion: null\n });\n }\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: null,\n query: '',\n status: 'idle',\n collections: []\n });\n }\n case 'submit':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: null,\n isOpen: false,\n status: 'idle'\n });\n }\n case 'reset':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId:\n // Since we open the panel on reset when openOnFocus=true\n // we need to restore the highlighted index to the defaultActiveItemId. (DocSearch use-case)\n\n // Since we close the panel when openOnFocus=false\n // we lose track of the highlighted index. (Query-suggestions use-case)\n action.props.openOnFocus === true ? action.props.defaultActiveItemId : null,\n status: 'idle',\n completion: null,\n query: ''\n });\n }\n case 'focus':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: action.props.defaultActiveItemId,\n isOpen: (action.props.openOnFocus || Boolean(state.query)) && action.props.shouldPanelOpen({\n state: state\n })\n });\n }\n case 'blur':\n {\n if (action.props.debug) {\n return state;\n }\n return _objectSpread(_objectSpread({}, state), {}, {\n isOpen: false,\n activeItemId: null\n });\n }\n case 'mousemove':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: action.payload\n });\n }\n case 'mouseleave':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: action.props.defaultActiveItemId\n });\n }\n default:\n invariant(false, \"The reducer action \".concat(JSON.stringify(action.type), \" is not supported.\"));\n return state;\n }\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { createAlgoliaInsightsPlugin } from '@algolia/autocomplete-plugin-algolia-insights';\nimport { checkOptions } from './checkOptions';\nimport { createStore } from './createStore';\nimport { getAutocompleteSetters } from './getAutocompleteSetters';\nimport { getDefaultProps } from './getDefaultProps';\nimport { getPropGetters } from './getPropGetters';\nimport { getMetadata, injectMetadata } from './metadata';\nimport { onInput } from './onInput';\nimport { stateReducer } from './stateReducer';\nexport function createAutocomplete(options) {\n checkOptions(options);\n var subscribers = [];\n var props = getDefaultProps(options, subscribers);\n var store = createStore(stateReducer, props, onStoreStateChange);\n var setters = getAutocompleteSetters({\n store: store\n });\n var propGetters = getPropGetters(_objectSpread({\n props: props,\n refresh: refresh,\n store: store,\n navigator: props.navigator\n }, setters));\n function onStoreStateChange(_ref) {\n var _state$context, _state$context$algoli;\n var prevState = _ref.prevState,\n state = _ref.state;\n props.onStateChange(_objectSpread({\n prevState: prevState,\n state: state,\n refresh: refresh,\n navigator: props.navigator\n }, setters));\n if (!isAlgoliaInsightsPluginEnabled() && (_state$context = state.context) !== null && _state$context !== void 0 && (_state$context$algoli = _state$context.algoliaInsightsPlugin) !== null && _state$context$algoli !== void 0 && _state$context$algoli.__automaticInsights && props.insights !== false) {\n var plugin = createAlgoliaInsightsPlugin({\n __autocomplete_clickAnalytics: false\n });\n props.plugins.push(plugin);\n subscribePlugins([plugin]);\n }\n }\n function refresh() {\n return onInput(_objectSpread({\n event: new Event('input'),\n nextState: {\n isOpen: store.getState().isOpen\n },\n props: props,\n navigator: props.navigator,\n query: store.getState().query,\n refresh: refresh,\n store: store\n }, setters));\n }\n function subscribePlugins(plugins) {\n plugins.forEach(function (plugin) {\n var _plugin$subscribe;\n return (_plugin$subscribe = plugin.subscribe) === null || _plugin$subscribe === void 0 ? void 0 : _plugin$subscribe.call(plugin, _objectSpread(_objectSpread({}, setters), {}, {\n navigator: props.navigator,\n refresh: refresh,\n onSelect: function onSelect(fn) {\n subscribers.push({\n onSelect: fn\n });\n },\n onActive: function onActive(fn) {\n subscribers.push({\n onActive: fn\n });\n },\n onResolve: function onResolve(fn) {\n subscribers.push({\n onResolve: fn\n });\n }\n }));\n });\n }\n function isAlgoliaInsightsPluginEnabled() {\n return props.plugins.some(function (plugin) {\n return plugin.name === 'aa.algoliaInsightsPlugin';\n });\n }\n if (props.insights && !isAlgoliaInsightsPluginEnabled()) {\n var insightsParams = typeof props.insights === 'boolean' ? {} : props.insights;\n props.plugins.push(createAlgoliaInsightsPlugin(insightsParams));\n }\n subscribePlugins(props.plugins);\n injectMetadata({\n metadata: getMetadata({\n plugins: props.plugins,\n options: options\n }),\n environment: props.environment\n });\n return _objectSpread(_objectSpread({\n refresh: refresh,\n navigator: props.navigator\n }, propGetters), setters);\n}","export const MAX_QUERY_SIZE = 512;\nexport const ASK_AI_API_URL = 'https://askai.algolia.com/chat';\nexport const USE_ASK_AI_TOKEN = true;\n","import { ASK_AI_API_URL, USE_ASK_AI_TOKEN } from './constants';\n\n// ... existing imports ...\nconst TOKEN_KEY = 'askai_token';\n\ntype TokenPayload = { exp: number };\n\nconst decode = (token: string): TokenPayload => {\n const [b64] = token.split('.');\n return JSON.parse(atob(b64));\n};\n\nconst isExpired = (token?: string | null): boolean => {\n if (!token) return true;\n try {\n const { exp } = decode(token);\n // refresh 30 s before the backend rejects it\n return Date.now() / 1000 > exp - 30;\n } catch {\n return true;\n }\n};\n\nlet inflight: Promise<string> | null = null;\n\n// call /token once, cache the promise while it’s running\n// eslint-disable-next-line require-await\nexport const getValidToken = async ({ assistantId }: { assistantId: string }): Promise<string> => {\n const cached = sessionStorage.getItem(TOKEN_KEY);\n if (!isExpired(cached)) return cached!;\n\n if (!inflight) {\n inflight = fetch(`${ASK_AI_API_URL}/token`, {\n method: 'POST',\n headers: {\n 'x-algolia-assistant-id': assistantId,\n 'content-type': 'application/json',\n },\n })\n .then((r) => r.json())\n .then(({ token }) => {\n sessionStorage.setItem(TOKEN_KEY, token);\n return token;\n })\n .finally(() => (inflight = null));\n }\n\n return inflight;\n};\n\nexport const postFeedback = async ({\n assistantId,\n thumbs,\n messageId,\n appId,\n}: {\n assistantId: string;\n thumbs: 0 | 1;\n messageId: string;\n appId: string;\n}): Promise<Response> => {\n const headers = new Headers();\n headers.set('x-algolia-assistant-id', assistantId);\n headers.set('content-type', 'application/json');\n\n if (USE_ASK_AI_TOKEN) {\n const token = await getValidToken({ assistantId });\n headers.set('authorization', `TOKEN ${token}`);\n }\n\n return fetch(`${ASK_AI_API_URL}/feedback`, {\n method: 'POST',\n body: JSON.stringify({\n appId,\n messageId,\n thumbs,\n }),\n headers,\n });\n};\n","import React, { type JSX } from 'react';\n\ntype AlgoliaLogoTranslations = Partial<{\n poweredByText: string;\n}>;\n\ntype AlgoliaLogoProps = {\n translations?: AlgoliaLogoTranslations;\n};\n\nexport function AlgoliaLogo({ translations = {} }: AlgoliaLogoProps): JSX.Element {\n const { poweredByText = 'Powered by' } = translations;\n\n return (\n <a\n href={`https://www.algolia.com/ref/docsearch/?utm_source=${window.location.hostname}&utm_medium=referral&utm_content=powered_by&utm_campaign=docsearch`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <span className=\"DocSearch-Label\">{poweredByText}</span>\n <svg\n width=\"80\"\n height=\"24\"\n aria-label=\"Algolia\"\n role=\"img\"\n id=\"Layer_1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 2196.2 500\"\n >\n <defs>\n <style>{'.cls-1,.cls-2{fill:#003dff;}.cls-2{fill-rule:evenodd;}'}</style>\n </defs>\n <path\n className=\"cls-2\"\n d=\"M1070.38,275.3V5.91c0-3.63-3.24-6.39-6.82-5.83l-50.46,7.94c-2.87,.45-4.99,2.93-4.99,5.84l.17,273.22c0,12.92,0,92.7,95.97,95.49,3.33,.1,6.09-2.58,6.09-5.91v-40.78c0-2.96-2.19-5.51-5.12-5.84-34.85-4.01-34.85-47.57-34.85-54.72Z\"\n />\n <rect className=\"cls-1\" x=\"1845.88\" y=\"104.73\" width=\"62.58\" height=\"277.9\" rx=\"5.9\" ry=\"5.9\" />\n <path\n className=\"cls-2\"\n d=\"M1851.78,71.38h50.77c3.26,0,5.9-2.64,5.9-5.9V5.9c0-3.62-3.24-6.39-6.82-5.83l-50.77,7.95c-2.87,.45-4.99,2.92-4.99,5.83v51.62c0,3.26,2.64,5.9,5.9,5.9Z\"\n />\n <path\n className=\"cls-2\"\n d=\"M1764.03,275.3V5.91c0-3.63-3.24-6.39-6.82-5.83l-50.46,7.94c-2.87,.45-4.99,2.93-4.99,5.84l.17,273.22c0,12.92,0,92.7,95.97,95.49,3.33,.1,6.09-2.58,6.09-5.91v-40.78c0-2.96-2.19-5.51-5.12-5.84-34.85-4.01-34.85-47.57-34.85-54.72Z\"\n />\n <path\n className=\"cls-2\"\n d=\"M1631.95,142.72c-11.14-12.25-24.83-21.65-40.78-28.31-15.92-6.53-33.26-9.85-52.07-9.85-18.78,0-36.15,3.17-51.92,9.85-15.59,6.66-29.29,16.05-40.76,28.31-11.47,12.23-20.38,26.87-26.76,44.03-6.38,17.17-9.24,37.37-9.24,58.36,0,20.99,3.19,36.87,9.55,54.21,6.38,17.32,15.14,32.11,26.45,44.36,11.29,12.23,24.83,21.62,40.6,28.46,15.77,6.83,40.12,10.33,52.4,10.48,12.25,0,36.78-3.82,52.7-10.48,15.92-6.68,29.46-16.23,40.78-28.46,11.29-12.25,20.05-27.04,26.25-44.36,6.22-17.34,9.24-33.22,9.24-54.21,0-20.99-3.34-41.19-10.03-58.36-6.38-17.17-15.14-31.8-26.43-44.03Zm-44.43,163.75c-11.47,15.75-27.56,23.7-48.09,23.7-20.55,0-36.63-7.8-48.1-23.7-11.47-15.75-17.21-34.01-17.21-61.2,0-26.89,5.59-49.14,17.06-64.87,11.45-15.75,27.54-23.52,48.07-23.52,20.55,0,36.63,7.78,48.09,23.52,11.47,15.57,17.36,37.98,17.36,64.87,0,27.19-5.72,45.3-17.19,61.2Z\"\n />\n <path\n className=\"cls-2\"\n d=\"M894.42,104.73h-49.33c-48.36,0-90.91,25.48-115.75,64.1-14.52,22.58-22.99,49.63-22.99,78.73,0,44.89,20.13,84.92,51.59,111.1,2.93,2.6,6.05,4.98,9.31,7.14,12.86,8.49,28.11,13.47,44.52,13.47,1.23,0,2.46-.03,3.68-.09,.36-.02,.71-.05,1.07-.07,.87-.05,1.75-.11,2.62-.2,.34-.03,.68-.08,1.02-.12,.91-.1,1.82-.21,2.73-.34,.21-.03,.42-.07,.63-.1,32.89-5.07,61.56-30.82,70.9-62.81v57.83c0,3.26,2.64,5.9,5.9,5.9h50.42c3.26,0,5.9-2.64,5.9-5.9V110.63c0-3.26-2.64-5.9-5.9-5.9h-56.32Zm0,206.92c-12.2,10.16-27.97,13.98-44.84,15.12-.16,.01-.33,.03-.49,.04-1.12,.07-2.24,.1-3.36,.1-42.24,0-77.12-35.89-77.12-79.37,0-10.25,1.96-20.01,5.42-28.98,11.22-29.12,38.77-49.74,71.06-49.74h49.33v142.83Z\"\n />\n <path\n className=\"cls-2\"\n d=\"M2133.97,104.73h-49.33c-48.36,0-90.91,25.48-115.75,64.1-14.52,22.58-22.99,49.63-22.99,78.73,0,44.89,20.13,84.92,51.59,111.1,2.93,2.6,6.05,4.98,9.31,7.14,12.86,8.49,28.11,13.47,44.52,13.47,1.23,0,2.46-.03,3.68-.09,.36-.02,.71-.05,1.07-.07,.87-.05,1.75-.11,2.62-.2,.34-.03,.68-.08,1.02-.12,.91-.1,1.82-.21,2.73-.34,.21-.03,.42-.07,.63-.1,32.89-5.07,61.56-30.82,70.9-62.81v57.83c0,3.26,2.64,5.9,5.9,5.9h50.42c3.26,0,5.9-2.64,5.9-5.9V110.63c0-3.26-2.64-5.9-5.9-5.9h-56.32Zm0,206.92c-12.2,10.16-27.97,13.98-44.84,15.12-.16,.01-.33,.03-.49,.04-1.12,.07-2.24,.1-3.36,.1-42.24,0-77.12-35.89-77.12-79.37,0-10.25,1.96-20.01,5.42-28.98,11.22-29.12,38.77-49.74,71.06-49.74h49.33v142.83Z\"\n />\n <path\n className=\"cls-2\"\n d=\"M1314.05,104.73h-49.33c-48.36,0-90.91,25.48-115.75,64.1-11.79,18.34-19.6,39.64-22.11,62.59-.58,5.3-.88,10.68-.88,16.14s.31,11.15,.93,16.59c4.28,38.09,23.14,71.61,50.66,94.52,2.93,2.6,6.05,4.98,9.31,7.14,12.86,8.49,28.11,13.47,44.52,13.47h0c17.99,0,34.61-5.93,48.16-15.97,16.29-11.58,28.88-28.54,34.48-47.75v50.26h-.11v11.08c0,21.84-5.71,38.27-17.34,49.36-11.61,11.08-31.04,16.63-58.25,16.63-11.12,0-28.79-.59-46.6-2.41-2.83-.29-5.46,1.5-6.27,4.22l-12.78,43.11c-1.02,3.46,1.27,7.02,4.83,7.53,21.52,3.08,42.52,4.68,54.65,4.68,48.91,0,85.16-10.75,108.89-32.21,21.48-19.41,33.15-48.89,35.2-88.52V110.63c0-3.26-2.64-5.9-5.9-5.9h-56.32Zm0,64.1s.65,139.13,0,143.36c-12.08,9.77-27.11,13.59-43.49,14.7-.16,.01-.33,.03-.49,.04-1.12,.07-2.24,.1-3.36,.1-1.32,0-2.63-.03-3.94-.1-40.41-2.11-74.52-37.26-74.52-79.38,0-10.25,1.96-20.01,5.42-28.98,11.22-29.12,38.77-49.74,71.06-49.74h49.33Z\"\n />\n <path\n className=\"cls-1\"\n d=\"M249.83,0C113.3,0,2,110.09,.03,246.16c-2,138.19,110.12,252.7,248.33,253.5,42.68,.25,83.79-10.19,120.3-30.03,3.56-1.93,4.11-6.83,1.08-9.51l-23.38-20.72c-4.75-4.21-11.51-5.4-17.36-2.92-25.48,10.84-53.17,16.38-81.71,16.03-111.68-1.37-201.91-94.29-200.13-205.96,1.76-110.26,92-199.41,202.67-199.41h202.69V407.41l-115-102.18c-3.72-3.31-9.42-2.66-12.42,1.31-18.46,24.44-48.53,39.64-81.93,37.34-46.33-3.2-83.87-40.5-87.34-86.81-4.15-55.24,39.63-101.52,94-101.52,49.18,0,89.68,37.85,93.91,85.95,.38,4.28,2.31,8.27,5.52,11.12l29.95,26.55c3.4,3.01,8.79,1.17,9.63-3.3,2.16-11.55,2.92-23.58,2.07-35.92-4.82-70.34-61.8-126.93-132.17-131.26-80.68-4.97-148.13,58.14-150.27,137.25-2.09,77.1,61.08,143.56,138.19,145.26,32.19,.71,62.03-9.41,86.14-26.95l150.26,133.2c6.44,5.71,16.61,1.14,16.61-7.47V9.48C499.66,4.25,495.42,0,490.18,0H249.83Z\"\n />\n </svg>\n </a>\n );\n}\n","import React, { type JSX } from 'react';\n\nimport { AlgoliaLogo } from './AlgoliaLogo';\n\nexport type FooterTranslations = Partial<{\n selectText: string;\n submitQuestionText: string;\n selectKeyAriaLabel: string;\n navigateText: string;\n navigateUpKeyAriaLabel: string;\n navigateDownKeyAriaLabel: string;\n closeText: string;\n backToSearchText: string;\n closeKeyAriaLabel: string;\n poweredByText: string;\n}>;\n\ntype FooterProps = Partial<{\n translations: FooterTranslations;\n isAskAiActive: boolean;\n}>;\n\ninterface CommandIconProps {\n children: React.ReactNode;\n ariaLabel: string;\n}\n\nfunction CommandIcon(props: CommandIconProps): JSX.Element {\n return (\n <svg width=\"20\" height=\"20\" aria-label={props.ariaLabel} viewBox=\"0 0 24 24\" role=\"img\">\n <g fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.4\">\n {props.children}\n </g>\n </svg>\n );\n}\n\nexport function Footer({ translations = {}, isAskAiActive = false }: FooterProps): JSX.Element {\n const {\n selectText = 'Select',\n selectKeyAriaLabel = 'Enter key',\n submitQuestionText = 'Submit question',\n navigateText = 'Navigate',\n navigateUpKeyAriaLabel = 'Arrow up',\n navigateDownKeyAriaLabel = 'Arrow down',\n closeText = 'Close',\n backToSearchText = 'Back to search',\n closeKeyAriaLabel = 'Escape key',\n poweredByText = 'Powered by',\n } = translations;\n\n return (\n <>\n <div className=\"DocSearch-Logo\">\n <AlgoliaLogo translations={{ poweredByText }} />\n </div>\n <ul className=\"DocSearch-Commands\">\n <li>\n <kbd className=\"DocSearch-Commands-Key\">\n <CommandIcon ariaLabel={navigateDownKeyAriaLabel}>\n <path d=\"M12 5v14\" />\n <path d=\"m19 12-7 7-7-7\" />\n </CommandIcon>\n </kbd>\n <kbd className=\"DocSearch-Commands-Key\">\n <CommandIcon ariaLabel={navigateUpKeyAriaLabel}>\n <path d=\"m5 12 7-7 7 7\" />\n <path d=\"M12 19V5\" />\n </CommandIcon>\n </kbd>\n <span className=\"DocSearch-Label\">{navigateText}</span>\n </li>\n <li>\n <kbd className=\"DocSearch-Commands-Key\">\n <CommandIcon ariaLabel={selectKeyAriaLabel}>\n <polyline points=\"9 10 4 15 9 20\" />\n <path d=\"M20 4v7a4 4 0 0 1-4 4H4\" />\n </CommandIcon>\n </kbd>\n <span className=\"DocSearch-Label\">{isAskAiActive ? submitQuestionText : selectText}</span>\n </li>\n <li>\n <kbd className=\"DocSearch-Commands-Key\">\n <span className=\"DocSearch-Escape-Key\">ESC</span>\n </kbd>\n <span className=\"DocSearch-Label\" aria-label={closeKeyAriaLabel}>\n {isAskAiActive ? backToSearchText : closeText}\n </span>\n </li>\n </ul>\n </>\n );\n}\n","import React, { type JSX } from 'react';\n\nimport type { InternalDocSearchHit, StoredDocSearchHit } from './types';\n\ninterface HitProps {\n hit: InternalDocSearchHit | StoredDocSearchHit;\n children: React.ReactNode;\n}\n\nexport function Hit({ hit, children }: HitProps): JSX.Element {\n return <a href={hit.url}>{children}</a>;\n}\n","import React, { type JSX } from 'react';\n\nexport function LoadingIcon({ className }: { className?: string }): JSX.Element {\n return (\n <svg viewBox=\"0 0 38 38\" className={className} stroke=\"currentColor\" strokeOpacity=\".5\">\n <g fill=\"none\" fillRule=\"evenodd\">\n <g transform=\"translate(1 1)\" strokeWidth=\"2\">\n <circle strokeOpacity=\".3\" cx=\"18\" cy=\"18\" r=\"18\" />\n <path d=\"M36 18c0-9.94-8.06-18-18-18\">\n <animateTransform\n attributeName=\"transform\"\n type=\"rotate\"\n from=\"0 18 18\"\n to=\"360 18 18\"\n dur=\"1s\"\n repeatCount=\"indefinite\"\n />\n </path>\n </g>\n </g>\n </svg>\n );\n}\n","import React, { type JSX } from 'react';\n\nexport function SparklesIcon(): JSX.Element {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"DocSearch-Hit-icon-sparkles\"\n >\n <path d=\"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z\" />\n <path d=\"M20 3v4\" />\n <path d=\"M22 5h-4\" />\n <path d=\"M4 17v2\" />\n <path d=\"M5 18H3\" />\n </svg>\n );\n}\n","import React, { type JSX } from 'react';\n\nexport function RecentIcon(): JSX.Element {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\">\n <g stroke=\"currentColor\" fill=\"none\" fillRule=\"evenodd\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M3.18 6.6a8.23 8.23 0 1112.93 9.94h0a8.23 8.23 0 01-11.63 0\" />\n <path d=\"M6.44 7.25H2.55V3.36M10.45 6v5.6M10.45 11.6L13 13\" />\n </g>\n </svg>\n );\n}\n","import React, { type JSX } from 'react';\n\nexport function CloseIcon(): JSX.Element {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\">\n <path\n d=\"M10 10l5.09-5.09L10 10l5.09 5.09L10 10zm0 0L4.91 4.91 10 10l-5.09 5.09L10 10z\"\n stroke=\"currentColor\"\n fill=\"none\"\n fillRule=\"evenodd\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","import React, { type JSX } from 'react';\n\nexport function AlertIcon(): JSX.Element {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n fillRule=\"evenodd\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n className=\"lucide lucide-triangle-alert-icon lucide-triangle-alert\"\n >\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\" />\n <path d=\"M12 9v4\" />\n <path d=\"M12 17h.01\" />\n </svg>\n );\n}\n","import React, { type JSX } from 'react';\n\nexport function SelectIcon(): JSX.Element {\n return (\n <svg className=\"DocSearch-Hit-Select-Icon\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\">\n <g stroke=\"currentColor\" fill=\"none\" fillRule=\"evenodd\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M18 3v4c0 2-2 4-4 4H2\" />\n <path d=\"M8 17l-6-6 6-6\" />\n </g>\n </svg>\n );\n}\n","import React, { type JSX } from 'react';\n\nconst LvlIcon: React.FC = () => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\" />\n <path d=\"M14 2v4a2 2 0 0 0 2 2h4\" />\n <path d=\"M10 9H8\" />\n <path d=\"M16 13H8\" />\n <path d=\"M16 17H8\" />\n </svg>\n );\n};\n\nexport function SourceIcon(props: { type: string }): JSX.Element {\n switch (props.type) {\n case 'lvl1':\n return <LvlIcon />;\n case 'content':\n return <ContentIcon />;\n default:\n return <AnchorIcon />;\n }\n}\n\nfunction AnchorIcon(): JSX.Element {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"4\" x2=\"20\" y1=\"9\" y2=\"9\" />\n <line x1=\"4\" x2=\"20\" y1=\"15\" y2=\"15\" />\n <line x1=\"10\" x2=\"8\" y1=\"3\" y2=\"21\" />\n <line x1=\"16\" x2=\"14\" y1=\"3\" y2=\"21\" />\n </svg>\n );\n}\n\nfunction ContentIcon(): JSX.Element {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\">\n <path\n d=\"M17 5H3h14zm0 5H3h14zm0 5H3h14z\"\n stroke=\"currentColor\"\n fill=\"none\"\n fillRule=\"evenodd\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","import React, { type JSX } from 'react';\n\nexport function StarIcon(): JSX.Element {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\">\n <path\n d=\"M10 14.2L5 17l1-5.6-4-4 5.5-.7 2.5-5 2.5 5 5.6.8-4 4 .9 5.5z\"\n stroke=\"currentColor\"\n fill=\"none\"\n fillRule=\"evenodd\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","import React, { type JSX } from 'react';\n\nexport function ErrorIcon(): JSX.Element {\n return (\n <svg\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n fillRule=\"evenodd\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M19 4.8a16 16 0 00-2-1.2m-3.3-1.2A16 16 0 001.1 4.7M16.7 8a12 12 0 00-2.8-1.4M10 6a12 12 0 00-6.7 2M12.3 14.7a4 4 0 00-4.5 0M14.5 11.4A8 8 0 0010 10M3 16L18 2M10 18h0\"></path>\n </svg>\n );\n}\n","import React, { type JSX } from 'react';\n\nexport function NoResultsIcon(): JSX.Element {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"64\"\n height=\"64\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"#5a5e9a\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m13.5 8.5-5 5\" />\n <path d=\"m8.5 8.5 5 5\" />\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.3-4.3\" />\n </svg>\n );\n}\n","import React, { type JSX, Fragment } from 'react';\n\nimport type { AskAiScreenTranslations } from './AskAiScreen';\nimport { SearchIcon } from './icons';\n\ninterface AggregatedSearchBlockProps {\n queries: string[];\n translations: AskAiScreenTranslations;\n onSearchQueryClick: (query: string) => void;\n}\n\n// allow translators to return either simple string parts or a fully custom node\nexport interface AggregatedToolCallParts {\n before?: string;\n separator?: string;\n lastSeparator?: string;\n after?: string;\n}\n\n// default english implementation (\"Searched for \\\"A\\\", \\\"B\\\" and \\\"C\\\"\")\nconst defaultAggregatedToolCallParts: AggregatedToolCallParts = {\n before: 'Searched for ',\n separator: ', ',\n lastSeparator: ' and ',\n after: '',\n};\n\nexport function AggregatedSearchBlock({\n queries,\n translations,\n onSearchQueryClick,\n}: AggregatedSearchBlockProps): JSX.Element | null {\n // no queries? no render\n if (queries.length === 0) return null;\n\n // if the translator provides a fully custom node, render it and bail out.\n if (typeof translations.aggregatedToolCallNode === 'function') {\n return <>{translations.aggregatedToolCallNode(queries, onSearchQueryClick)}</>;\n }\n\n // otherwise fall back to the classic english-pattern renderer.\n const parts = translations.aggregatedToolCallText\n ? translations.aggregatedToolCallText(queries)\n : defaultAggregatedToolCallParts;\n\n const { before = '', separator = ', ', lastSeparator = ' and ', after = '' } = parts || {};\n\n return (\n <div className=\"DocSearch-AskAiScreen-MessageContent-Tool Tool--AggregatedResult\">\n <SearchIcon size={18} />\n <span>\n {before && <span>{before}</span>}\n {queries.map((q, idx) => (\n // eslint-disable-next-line react/no-array-index-key\n <Fragment key={q + idx}>\n <span\n role=\"button\"\n tabIndex={0}\n className=\"DocSearch-AskAiScreen-MessageContent-Tool-Query\"\n onKeyDown={(e) => {\n if (e.key === 'enter' || e.key === ' ') {\n e.preventDefault();\n onSearchQueryClick(q);\n }\n }}\n onClick={() => onSearchQueryClick(q)}\n >\n &quot;{q}&quot;\n </span>\n {idx < queries.length - 2 && separator}\n {idx === queries.length - 2 && lastSeparator}\n </Fragment>\n ))}\n {after && <span>{after}</span>}\n </span>\n </div>\n );\n}\n","/**\n * marked v15.0.12 - a markdown parser\n * Copyright (c) 2011-2025, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\n\n// src/defaults.ts\nfunction _getDefaults() {\n return {\n async: false,\n breaks: false,\n extensions: null,\n gfm: true,\n hooks: null,\n pedantic: false,\n renderer: null,\n silent: false,\n tokenizer: null,\n walkTokens: null\n };\n}\nvar _defaults = _getDefaults();\nfunction changeDefaults(newDefaults) {\n _defaults = newDefaults;\n}\n\n// src/rules.ts\nvar noopTest = { exec: () => null };\nfunction edit(regex, opt = \"\") {\n let source = typeof regex === \"string\" ? regex : regex.source;\n const obj = {\n replace: (name, val) => {\n let valSource = typeof val === \"string\" ? val : val.source;\n valSource = valSource.replace(other.caret, \"$1\");\n source = source.replace(name, valSource);\n return obj;\n },\n getRegex: () => {\n return new RegExp(source, opt);\n }\n };\n return obj;\n}\nvar other = {\n codeRemoveIndent: /^(?: {1,4}| {0,3}\\t)/gm,\n outputLinkReplace: /\\\\([\\[\\]])/g,\n indentCodeCompensation: /^(\\s+)(?:```)/,\n beginningSpace: /^\\s+/,\n endingHash: /#$/,\n startingSpaceChar: /^ /,\n endingSpaceChar: / $/,\n nonSpaceChar: /[^ ]/,\n newLineCharGlobal: /\\n/g,\n tabCharGlobal: /\\t/g,\n multipleSpaceGlobal: /\\s+/g,\n blankLine: /^[ \\t]*$/,\n doubleBlankLine: /\\n[ \\t]*\\n[ \\t]*$/,\n blockquoteStart: /^ {0,3}>/,\n blockquoteSetextReplace: /\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,\n blockquoteSetextReplace2: /^ {0,3}>[ \\t]?/gm,\n listReplaceTabs: /^\\t+/,\n listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g,\n listIsTask: /^\\[[ xX]\\] /,\n listReplaceTask: /^\\[[ xX]\\] +/,\n anyLine: /\\n.*\\n/,\n hrefBrackets: /^<(.*)>$/,\n tableDelimiter: /[:|]/,\n tableAlignChars: /^\\||\\| *$/g,\n tableRowBlankLine: /\\n[ \\t]*$/,\n tableAlignRight: /^ *-+: *$/,\n tableAlignCenter: /^ *:-+: *$/,\n tableAlignLeft: /^ *:-+ *$/,\n startATag: /^<a /i,\n endATag: /^<\\/a>/i,\n startPreScriptTag: /^<(pre|code|kbd|script)(\\s|>)/i,\n endPreScriptTag: /^<\\/(pre|code|kbd|script)(\\s|>)/i,\n startAngleBracket: /^</,\n endAngleBracket: />$/,\n pedanticHrefTitle: /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,\n unicodeAlphaNumeric: /[\\p{L}\\p{N}]/u,\n escapeTest: /[&<>\"']/,\n escapeReplace: /[&<>\"']/g,\n escapeTestNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,\n escapeReplaceNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,\n unescapeTest: /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,\n caret: /(^|[^\\[])\\^/g,\n percentDecode: /%25/g,\n findPipe: /\\|/g,\n splitPipe: / \\|/,\n slashPipe: /\\\\\\|/g,\n carriageReturn: /\\r\\n|\\r/g,\n spaceLine: /^ +$/gm,\n notSpaceStart: /^\\S*/,\n endingNewline: /\\n$/,\n listItemRegex: (bull) => new RegExp(`^( {0,3}${bull})((?:[\t ][^\\\\n]*)?(?:\\\\n|$))`),\n nextBulletRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \t][^\\\\n]*)?(?:\\\\n|$))`),\n hrRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),\n fencesBeginRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`),\n headingBeginRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`),\n htmlBeginRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}<(?:[a-z].*>|!--)`, \"i\")\n};\nvar newline = /^(?:[ \\t]*(?:\\n|$))+/;\nvar blockCode = /^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/;\nvar fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nvar hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nvar heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nvar bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nvar lheadingCore = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/;\nvar lheading = edit(lheadingCore).replace(/bull/g, bullet).replace(/blockCode/g, /(?: {4}| {0,3}\\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\\n>]+>\\n/).replace(/\\|table/g, \"\").getRegex();\nvar lheadingGfm = edit(lheadingCore).replace(/bull/g, bullet).replace(/blockCode/g, /(?: {4}| {0,3}\\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\\n>]+>\\n/).replace(/table/g, / {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/).getRegex();\nvar _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nvar blockText = /^[^\\n]+/;\nvar _blockLabel = /(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/;\nvar def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/).replace(\"label\", _blockLabel).replace(\"title\", /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/).getRegex();\nvar list = edit(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/).replace(/bull/g, bullet).getRegex();\nvar _tag = \"address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul\";\nvar _comment = /<!--(?:-?>|[\\s\\S]*?(?:-->|$))/;\nvar html = edit(\n \"^ {0,3}(?:<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)|comment[^\\\\n]*(\\\\n+|$)|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$))\",\n \"i\"\n).replace(\"comment\", _comment).replace(\"tag\", _tag).replace(\"attribute\", / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex();\nvar paragraph = edit(_paragraph).replace(\"hr\", hr).replace(\"heading\", \" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\", \"\").replace(\"|table\", \"\").replace(\"blockquote\", \" {0,3}>\").replace(\"fences\", \" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\", \" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\", \"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\", _tag).getRegex();\nvar blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace(\"paragraph\", paragraph).getRegex();\nvar blockNormal = {\n blockquote,\n code: blockCode,\n def,\n fences,\n heading,\n hr,\n html,\n lheading,\n list,\n newline,\n paragraph,\n table: noopTest,\n text: blockText\n};\nvar gfmTable = edit(\n \"^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\"\n).replace(\"hr\", hr).replace(\"heading\", \" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"blockquote\", \" {0,3}>\").replace(\"code\", \"(?: {4}| {0,3}\t)[^\\\\n]\").replace(\"fences\", \" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\", \" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\", \"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\", _tag).getRegex();\nvar blockGfm = {\n ...blockNormal,\n lheading: lheadingGfm,\n table: gfmTable,\n paragraph: edit(_paragraph).replace(\"hr\", hr).replace(\"heading\", \" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\", \"\").replace(\"table\", gfmTable).replace(\"blockquote\", \" {0,3}>\").replace(\"fences\", \" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\", \" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\", \"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\", _tag).getRegex()\n};\nvar blockPedantic = {\n ...blockNormal,\n html: edit(\n `^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\\\s[^'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`\n ).replace(\"comment\", _comment).replace(/tag/g, \"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b\").getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest,\n // fences not supported\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(_paragraph).replace(\"hr\", hr).replace(\"heading\", \" *#{1,6} *[^\\n]\").replace(\"lheading\", lheading).replace(\"|table\", \"\").replace(\"blockquote\", \" {0,3}>\").replace(\"|fences\", \"\").replace(\"|list\", \"\").replace(\"|html\", \"\").replace(\"|tag\", \"\").getRegex()\n};\nvar escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nvar inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nvar br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nvar inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/;\nvar _punctuation = /[\\p{P}\\p{S}]/u;\nvar _punctuationOrSpace = /[\\s\\p{P}\\p{S}]/u;\nvar _notPunctuationOrSpace = /[^\\s\\p{P}\\p{S}]/u;\nvar punctuation = edit(/^((?![*_])punctSpace)/, \"u\").replace(/punctSpace/g, _punctuationOrSpace).getRegex();\nvar _punctuationGfmStrongEm = /(?!~)[\\p{P}\\p{S}]/u;\nvar _punctuationOrSpaceGfmStrongEm = /(?!~)[\\s\\p{P}\\p{S}]/u;\nvar _notPunctuationOrSpaceGfmStrongEm = /(?:[^\\s\\p{P}\\p{S}]|~)/u;\nvar blockSkip = /\\[[^[\\]]*?\\]\\((?:\\\\.|[^\\\\\\(\\)]|\\((?:\\\\.|[^\\\\\\(\\)])*\\))*\\)|`[^`]*?`|<[^<>]*?>/g;\nvar emStrongLDelimCore = /^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/;\nvar emStrongLDelim = edit(emStrongLDelimCore, \"u\").replace(/punct/g, _punctuation).getRegex();\nvar emStrongLDelimGfm = edit(emStrongLDelimCore, \"u\").replace(/punct/g, _punctuationGfmStrongEm).getRegex();\nvar emStrongRDelimAstCore = \"^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|notPunctSpace(\\\\*+)(?=notPunctSpace)\";\nvar emStrongRDelimAst = edit(emStrongRDelimAstCore, \"gu\").replace(/notPunctSpace/g, _notPunctuationOrSpace).replace(/punctSpace/g, _punctuationOrSpace).replace(/punct/g, _punctuation).getRegex();\nvar emStrongRDelimAstGfm = edit(emStrongRDelimAstCore, \"gu\").replace(/notPunctSpace/g, _notPunctuationOrSpaceGfmStrongEm).replace(/punctSpace/g, _punctuationOrSpaceGfmStrongEm).replace(/punct/g, _punctuationGfmStrongEm).getRegex();\nvar emStrongRDelimUnd = edit(\n \"^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)\",\n \"gu\"\n).replace(/notPunctSpace/g, _notPunctuationOrSpace).replace(/punctSpace/g, _punctuationOrSpace).replace(/punct/g, _punctuation).getRegex();\nvar anyPunctuation = edit(/\\\\(punct)/, \"gu\").replace(/punct/g, _punctuation).getRegex();\nvar autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/).replace(\"scheme\", /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(\"email\", /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex();\nvar _inlineComment = edit(_comment).replace(\"(?:-->|$)\", \"-->\").getRegex();\nvar tag = edit(\n \"^comment|^</[a-zA-Z][\\\\w:-]*\\\\s*>|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\"\n).replace(\"comment\", _inlineComment).replace(\"attribute\", /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/).getRegex();\nvar _inlineLabel = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\nvar link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/).replace(\"label\", _inlineLabel).replace(\"href\", /<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/).replace(\"title\", /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex();\nvar reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/).replace(\"label\", _inlineLabel).replace(\"ref\", _blockLabel).getRegex();\nvar nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/).replace(\"ref\", _blockLabel).getRegex();\nvar reflinkSearch = edit(\"reflink|nolink(?!\\\\()\", \"g\").replace(\"reflink\", reflink).replace(\"nolink\", nolink).getRegex();\nvar inlineNormal = {\n _backpedal: noopTest,\n // only used for GFM url\n anyPunctuation,\n autolink,\n blockSkip,\n br,\n code: inlineCode,\n del: noopTest,\n emStrongLDelim,\n emStrongRDelimAst,\n emStrongRDelimUnd,\n escape,\n link,\n nolink,\n punctuation,\n reflink,\n reflinkSearch,\n tag,\n text: inlineText,\n url: noopTest\n};\nvar inlinePedantic = {\n ...inlineNormal,\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/).replace(\"label\", _inlineLabel).getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace(\"label\", _inlineLabel).getRegex()\n};\nvar inlineGfm = {\n ...inlineNormal,\n emStrongRDelimAst: emStrongRDelimAstGfm,\n emStrongLDelim: emStrongLDelimGfm,\n url: edit(/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/, \"i\").replace(\"email\", /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])((?:\\\\.|[^\\\\])*?(?:\\\\.|[^\\s~\\\\]))\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/\n};\nvar inlineBreaks = {\n ...inlineGfm,\n br: edit(br).replace(\"{2,}\", \"*\").getRegex(),\n text: edit(inlineGfm.text).replace(\"\\\\b_\", \"\\\\b_| {2,}\\\\n\").replace(/\\{2,\\}/g, \"*\").getRegex()\n};\nvar block = {\n normal: blockNormal,\n gfm: blockGfm,\n pedantic: blockPedantic\n};\nvar inline = {\n normal: inlineNormal,\n gfm: inlineGfm,\n breaks: inlineBreaks,\n pedantic: inlinePedantic\n};\n\n// src/helpers.ts\nvar escapeReplacements = {\n \"&\": \"&amp;\",\n \"<\": \"&lt;\",\n \">\": \"&gt;\",\n '\"': \"&quot;\",\n \"'\": \"&#39;\"\n};\nvar getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape2(html2, encode) {\n if (encode) {\n if (other.escapeTest.test(html2)) {\n return html2.replace(other.escapeReplace, getEscapeReplacement);\n }\n } else {\n if (other.escapeTestNoEncode.test(html2)) {\n return html2.replace(other.escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n return html2;\n}\nfunction cleanUrl(href) {\n try {\n href = encodeURI(href).replace(other.percentDecode, \"%\");\n } catch {\n return null;\n }\n return href;\n}\nfunction splitCells(tableRow, count) {\n const row = tableRow.replace(other.findPipe, (match, offset, str) => {\n let escaped = false;\n let curr = offset;\n while (--curr >= 0 && str[curr] === \"\\\\\") escaped = !escaped;\n if (escaped) {\n return \"|\";\n } else {\n return \" |\";\n }\n }), cells = row.split(other.splitPipe);\n let i = 0;\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells.at(-1)?.trim()) {\n cells.pop();\n }\n if (count) {\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push(\"\");\n }\n }\n for (; i < cells.length; i++) {\n cells[i] = cells[i].trim().replace(other.slashPipe, \"|\");\n }\n return cells;\n}\nfunction rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return \"\";\n }\n let suffLen = 0;\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n return str.slice(0, l - suffLen);\n}\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n let level = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] === \"\\\\\") {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n if (level > 0) {\n return -2;\n }\n return -1;\n}\n\n// src/Tokenizer.ts\nfunction outputLink(cap, link2, raw, lexer2, rules) {\n const href = link2.href;\n const title = link2.title || null;\n const text = cap[1].replace(rules.other.outputLinkReplace, \"$1\");\n lexer2.state.inLink = true;\n const token = {\n type: cap[0].charAt(0) === \"!\" ? \"image\" : \"link\",\n raw,\n href,\n title,\n text,\n tokens: lexer2.inlineTokens(text)\n };\n lexer2.state.inLink = false;\n return token;\n}\nfunction indentCodeCompensation(raw, text, rules) {\n const matchIndentToCode = raw.match(rules.other.indentCodeCompensation);\n if (matchIndentToCode === null) {\n return text;\n }\n const indentToCode = matchIndentToCode[1];\n return text.split(\"\\n\").map((node) => {\n const matchIndentInNode = node.match(rules.other.beginningSpace);\n if (matchIndentInNode === null) {\n return node;\n }\n const [indentInNode] = matchIndentInNode;\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n return node;\n }).join(\"\\n\");\n}\nvar _Tokenizer = class {\n options;\n rules;\n // set by the lexer\n lexer;\n // set by the lexer\n constructor(options2) {\n this.options = options2 || _defaults;\n }\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: \"space\",\n raw: cap[0]\n };\n }\n }\n code(src) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(this.rules.other.codeRemoveIndent, \"\");\n return {\n type: \"code\",\n raw: cap[0],\n codeBlockStyle: \"indented\",\n text: !this.options.pedantic ? rtrim(text, \"\\n\") : text\n };\n }\n }\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || \"\", this.rules);\n return {\n type: \"code\",\n raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, \"$1\") : cap[2],\n text\n };\n }\n }\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n if (this.rules.other.endingHash.test(text)) {\n const trimmed = rtrim(text, \"#\");\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || this.rules.other.endingSpaceChar.test(trimmed)) {\n text = trimmed.trim();\n }\n }\n return {\n type: \"heading\",\n raw: cap[0],\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text)\n };\n }\n }\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: \"hr\",\n raw: rtrim(cap[0], \"\\n\")\n };\n }\n }\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n let lines = rtrim(cap[0], \"\\n\").split(\"\\n\");\n let raw = \"\";\n let text = \"\";\n const tokens = [];\n while (lines.length > 0) {\n let inBlockquote = false;\n const currentLines = [];\n let i;\n for (i = 0; i < lines.length; i++) {\n if (this.rules.other.blockquoteStart.test(lines[i])) {\n currentLines.push(lines[i]);\n inBlockquote = true;\n } else if (!inBlockquote) {\n currentLines.push(lines[i]);\n } else {\n break;\n }\n }\n lines = lines.slice(i);\n const currentRaw = currentLines.join(\"\\n\");\n const currentText = currentRaw.replace(this.rules.other.blockquoteSetextReplace, \"\\n $1\").replace(this.rules.other.blockquoteSetextReplace2, \"\");\n raw = raw ? `${raw}\n${currentRaw}` : currentRaw;\n text = text ? `${text}\n${currentText}` : currentText;\n const top = this.lexer.state.top;\n this.lexer.state.top = true;\n this.lexer.blockTokens(currentText, tokens, true);\n this.lexer.state.top = top;\n if (lines.length === 0) {\n break;\n }\n const lastToken = tokens.at(-1);\n if (lastToken?.type === \"code\") {\n break;\n } else if (lastToken?.type === \"blockquote\") {\n const oldToken = lastToken;\n const newText = oldToken.raw + \"\\n\" + lines.join(\"\\n\");\n const newToken = this.blockquote(newText);\n tokens[tokens.length - 1] = newToken;\n raw = raw.substring(0, raw.length - oldToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.text.length) + newToken.text;\n break;\n } else if (lastToken?.type === \"list\") {\n const oldToken = lastToken;\n const newText = oldToken.raw + \"\\n\" + lines.join(\"\\n\");\n const newToken = this.list(newText);\n tokens[tokens.length - 1] = newToken;\n raw = raw.substring(0, raw.length - lastToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.raw.length) + newToken.raw;\n lines = newText.substring(tokens.at(-1).raw.length).split(\"\\n\");\n continue;\n }\n }\n return {\n type: \"blockquote\",\n raw,\n tokens,\n text\n };\n }\n }\n list(src) {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n const list2 = {\n type: \"list\",\n raw: \"\",\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : \"\",\n loose: false,\n items: []\n };\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n if (this.options.pedantic) {\n bull = isordered ? bull : \"[*+-]\";\n }\n const itemRegex = this.rules.other.listItemRegex(bull);\n let endsWithBlankLine = false;\n while (src) {\n let endEarly = false;\n let raw = \"\";\n let itemContents = \"\";\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n if (this.rules.block.hr.test(src)) {\n break;\n }\n raw = cap[0];\n src = src.substring(raw.length);\n let line = cap[2].split(\"\\n\", 1)[0].replace(this.rules.other.listReplaceTabs, (t) => \" \".repeat(3 * t.length));\n let nextLine = src.split(\"\\n\", 1)[0];\n let blankLine = !line.trim();\n let indent = 0;\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimStart();\n } else if (blankLine) {\n indent = cap[1].length + 1;\n } else {\n indent = cap[2].search(this.rules.other.nonSpaceChar);\n indent = indent > 4 ? 1 : indent;\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n if (blankLine && this.rules.other.blankLine.test(nextLine)) {\n raw += nextLine + \"\\n\";\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n if (!endEarly) {\n const nextBulletRegex = this.rules.other.nextBulletRegex(indent);\n const hrRegex = this.rules.other.hrRegex(indent);\n const fencesBeginRegex = this.rules.other.fencesBeginRegex(indent);\n const headingBeginRegex = this.rules.other.headingBeginRegex(indent);\n const htmlBeginRegex = this.rules.other.htmlBeginRegex(indent);\n while (src) {\n const rawLine = src.split(\"\\n\", 1)[0];\n let nextLineWithoutTabs;\n nextLine = rawLine;\n if (this.options.pedantic) {\n nextLine = nextLine.replace(this.rules.other.listReplaceNesting, \" \");\n nextLineWithoutTabs = nextLine;\n } else {\n nextLineWithoutTabs = nextLine.replace(this.rules.other.tabCharGlobal, \" \");\n }\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n if (htmlBeginRegex.test(nextLine)) {\n break;\n }\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n if (hrRegex.test(nextLine)) {\n break;\n }\n if (nextLineWithoutTabs.search(this.rules.other.nonSpaceChar) >= indent || !nextLine.trim()) {\n itemContents += \"\\n\" + nextLineWithoutTabs.slice(indent);\n } else {\n if (blankLine) {\n break;\n }\n if (line.replace(this.rules.other.tabCharGlobal, \" \").search(this.rules.other.nonSpaceChar) >= 4) {\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n itemContents += \"\\n\" + nextLine;\n }\n if (!blankLine && !nextLine.trim()) {\n blankLine = true;\n }\n raw += rawLine + \"\\n\";\n src = src.substring(rawLine.length + 1);\n line = nextLineWithoutTabs.slice(indent);\n }\n }\n if (!list2.loose) {\n if (endsWithBlankLine) {\n list2.loose = true;\n } else if (this.rules.other.doubleBlankLine.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n let istask = null;\n let ischecked;\n if (this.options.gfm) {\n istask = this.rules.other.listIsTask.exec(itemContents);\n if (istask) {\n ischecked = istask[0] !== \"[ ] \";\n itemContents = itemContents.replace(this.rules.other.listReplaceTask, \"\");\n }\n }\n list2.items.push({\n type: \"list_item\",\n raw,\n task: !!istask,\n checked: ischecked,\n loose: false,\n text: itemContents,\n tokens: []\n });\n list2.raw += raw;\n }\n const lastItem = list2.items.at(-1);\n if (lastItem) {\n lastItem.raw = lastItem.raw.trimEnd();\n lastItem.text = lastItem.text.trimEnd();\n } else {\n return;\n }\n list2.raw = list2.raw.trimEnd();\n for (let i = 0; i < list2.items.length; i++) {\n this.lexer.state.top = false;\n list2.items[i].tokens = this.lexer.blockTokens(list2.items[i].text, []);\n if (!list2.loose) {\n const spacers = list2.items[i].tokens.filter((t) => t.type === \"space\");\n const hasMultipleLineBreaks = spacers.length > 0 && spacers.some((t) => this.rules.other.anyLine.test(t.raw));\n list2.loose = hasMultipleLineBreaks;\n }\n }\n if (list2.loose) {\n for (let i = 0; i < list2.items.length; i++) {\n list2.items[i].loose = true;\n }\n }\n return list2;\n }\n }\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const token = {\n type: \"html\",\n block: true,\n raw: cap[0],\n pre: cap[1] === \"pre\" || cap[1] === \"script\" || cap[1] === \"style\",\n text: cap[0]\n };\n return token;\n }\n }\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n const tag2 = cap[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, \" \");\n const href = cap[2] ? cap[2].replace(this.rules.other.hrefBrackets, \"$1\").replace(this.rules.inline.anyPunctuation, \"$1\") : \"\";\n const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, \"$1\") : cap[3];\n return {\n type: \"def\",\n tag: tag2,\n raw: cap[0],\n href,\n title\n };\n }\n }\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (!cap) {\n return;\n }\n if (!this.rules.other.tableDelimiter.test(cap[2])) {\n return;\n }\n const headers = splitCells(cap[1]);\n const aligns = cap[2].replace(this.rules.other.tableAlignChars, \"\").split(\"|\");\n const rows = cap[3]?.trim() ? cap[3].replace(this.rules.other.tableRowBlankLine, \"\").split(\"\\n\") : [];\n const item = {\n type: \"table\",\n raw: cap[0],\n header: [],\n align: [],\n rows: []\n };\n if (headers.length !== aligns.length) {\n return;\n }\n for (const align of aligns) {\n if (this.rules.other.tableAlignRight.test(align)) {\n item.align.push(\"right\");\n } else if (this.rules.other.tableAlignCenter.test(align)) {\n item.align.push(\"center\");\n } else if (this.rules.other.tableAlignLeft.test(align)) {\n item.align.push(\"left\");\n } else {\n item.align.push(null);\n }\n }\n for (let i = 0; i < headers.length; i++) {\n item.header.push({\n text: headers[i],\n tokens: this.lexer.inline(headers[i]),\n header: true,\n align: item.align[i]\n });\n }\n for (const row of rows) {\n item.rows.push(splitCells(row, item.header.length).map((cell, i) => {\n return {\n text: cell,\n tokens: this.lexer.inline(cell),\n header: false,\n align: item.align[i]\n };\n }));\n }\n return item;\n }\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: \"heading\",\n raw: cap[0],\n depth: cap[2].charAt(0) === \"=\" ? 1 : 2,\n text: cap[1],\n tokens: this.lexer.inline(cap[1])\n };\n }\n }\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === \"\\n\" ? cap[1].slice(0, -1) : cap[1];\n return {\n type: \"paragraph\",\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text)\n };\n }\n }\n text(src) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: \"text\",\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0])\n };\n }\n }\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: \"escape\",\n raw: cap[0],\n text: cap[1]\n };\n }\n }\n tag(src) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && this.rules.other.startATag.test(cap[0])) {\n this.lexer.state.inLink = true;\n } else if (this.lexer.state.inLink && this.rules.other.endATag.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n } else if (this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n return {\n type: \"html\",\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n block: false,\n text: cap[0]\n };\n }\n }\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && this.rules.other.startAngleBracket.test(trimmedUrl)) {\n if (!this.rules.other.endAngleBracket.test(trimmedUrl)) {\n return;\n }\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), \"\\\\\");\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n const lastParenIndex = findClosingBracket(cap[2], \"()\");\n if (lastParenIndex === -2) {\n return;\n }\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf(\"!\") === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = \"\";\n }\n }\n let href = cap[2];\n let title = \"\";\n if (this.options.pedantic) {\n const link2 = this.rules.other.pedanticHrefTitle.exec(href);\n if (link2) {\n href = link2[1];\n title = link2[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : \"\";\n }\n href = href.trim();\n if (this.rules.other.startAngleBracket.test(href)) {\n if (this.options.pedantic && !this.rules.other.endAngleBracket.test(trimmedUrl)) {\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline.anyPunctuation, \"$1\") : href,\n title: title ? title.replace(this.rules.inline.anyPunctuation, \"$1\") : title\n }, cap[0], this.lexer, this.rules);\n }\n }\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src)) || (cap = this.rules.inline.nolink.exec(src))) {\n const linkString = (cap[2] || cap[1]).replace(this.rules.other.multipleSpaceGlobal, \" \");\n const link2 = links[linkString.toLowerCase()];\n if (!link2) {\n const text = cap[0].charAt(0);\n return {\n type: \"text\",\n raw: text,\n text\n };\n }\n return outputLink(cap, link2, cap[0], this.lexer, this.rules);\n }\n }\n emStrong(src, maskedSrc, prevChar = \"\") {\n let match = this.rules.inline.emStrongLDelim.exec(src);\n if (!match) return;\n if (match[3] && prevChar.match(this.rules.other.unicodeAlphaNumeric)) return;\n const nextChar = match[1] || match[2] || \"\";\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n const endReg = match[0][0] === \"*\" ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n endReg.lastIndex = 0;\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n if (!rDelim) continue;\n rLength = [...rDelim].length;\n if (match[3] || match[4]) {\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) {\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue;\n }\n }\n delimTotal -= rLength;\n if (delimTotal > 0) continue;\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n if (Math.min(lLength, rLength) % 2) {\n const text2 = raw.slice(1, -1);\n return {\n type: \"em\",\n raw,\n text: text2,\n tokens: this.lexer.inlineTokens(text2)\n };\n }\n const text = raw.slice(2, -2);\n return {\n type: \"strong\",\n raw,\n text,\n tokens: this.lexer.inlineTokens(text)\n };\n }\n }\n }\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(this.rules.other.newLineCharGlobal, \" \");\n const hasNonSpaceChars = this.rules.other.nonSpaceChar.test(text);\n const hasSpaceCharsOnBothEnds = this.rules.other.startingSpaceChar.test(text) && this.rules.other.endingSpaceChar.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n return {\n type: \"codespan\",\n raw: cap[0],\n text\n };\n }\n }\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: \"br\",\n raw: cap[0]\n };\n }\n }\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: \"del\",\n raw: cap[0],\n text: cap[2],\n tokens: this.lexer.inlineTokens(cap[2])\n };\n }\n }\n autolink(src) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === \"@\") {\n text = cap[1];\n href = \"mailto:\" + text;\n } else {\n text = cap[1];\n href = text;\n }\n return {\n type: \"link\",\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: \"text\",\n raw: text,\n text\n }\n ]\n };\n }\n }\n url(src) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === \"@\") {\n text = cap[0];\n href = \"mailto:\" + text;\n } else {\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? \"\";\n } while (prevCapZero !== cap[0]);\n text = cap[0];\n if (cap[1] === \"www.\") {\n href = \"http://\" + cap[0];\n } else {\n href = cap[0];\n }\n }\n return {\n type: \"link\",\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: \"text\",\n raw: text,\n text\n }\n ]\n };\n }\n }\n inlineText(src) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n const escaped = this.lexer.state.inRawBlock;\n return {\n type: \"text\",\n raw: cap[0],\n text: cap[0],\n escaped\n };\n }\n }\n};\n\n// src/Lexer.ts\nvar _Lexer = class __Lexer {\n tokens;\n options;\n state;\n tokenizer;\n inlineQueue;\n constructor(options2) {\n this.tokens = [];\n this.tokens.links = /* @__PURE__ */ Object.create(null);\n this.options = options2 || _defaults;\n this.options.tokenizer = this.options.tokenizer || new _Tokenizer();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n this.tokenizer.lexer = this;\n this.inlineQueue = [];\n this.state = {\n inLink: false,\n inRawBlock: false,\n top: true\n };\n const rules = {\n other,\n block: block.normal,\n inline: inline.normal\n };\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n } else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n } else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block,\n inline\n };\n }\n /**\n * Static Lex Method\n */\n static lex(src, options2) {\n const lexer2 = new __Lexer(options2);\n return lexer2.lex(src);\n }\n /**\n * Static Lex Inline Method\n */\n static lexInline(src, options2) {\n const lexer2 = new __Lexer(options2);\n return lexer2.inlineTokens(src);\n }\n /**\n * Preprocessing\n */\n lex(src) {\n src = src.replace(other.carriageReturn, \"\\n\");\n this.blockTokens(src, this.tokens);\n for (let i = 0; i < this.inlineQueue.length; i++) {\n const next = this.inlineQueue[i];\n this.inlineTokens(next.src, next.tokens);\n }\n this.inlineQueue = [];\n return this.tokens;\n }\n blockTokens(src, tokens = [], lastParagraphClipped = false) {\n if (this.options.pedantic) {\n src = src.replace(other.tabCharGlobal, \" \").replace(other.spaceLine, \"\");\n }\n while (src) {\n let token;\n if (this.options.extensions?.block?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.raw.length === 1 && lastToken !== void 0) {\n lastToken.raw += \"\\n\";\n } else {\n tokens.push(token);\n }\n continue;\n }\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === \"paragraph\" || lastToken?.type === \"text\") {\n lastToken.raw += \"\\n\" + token.raw;\n lastToken.text += \"\\n\" + token.text;\n this.inlineQueue.at(-1).src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === \"paragraph\" || lastToken?.type === \"text\") {\n lastToken.raw += \"\\n\" + token.raw;\n lastToken.text += \"\\n\" + token.raw;\n this.inlineQueue.at(-1).src = lastToken.text;\n } else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n continue;\n }\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n let cutSrc = src;\n if (this.options.extensions?.startBlock) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startBlock.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === \"number\" && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n const lastToken = tokens.at(-1);\n if (lastParagraphClipped && lastToken?.type === \"paragraph\") {\n lastToken.raw += \"\\n\" + token.raw;\n lastToken.text += \"\\n\" + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1).src = lastToken.text;\n } else {\n tokens.push(token);\n }\n lastParagraphClipped = cutSrc.length !== src.length;\n src = src.substring(token.raw.length);\n continue;\n }\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === \"text\") {\n lastToken.raw += \"\\n\" + token.raw;\n lastToken.text += \"\\n\" + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1).src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n const errMsg = \"Infinite loop on byte: \" + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n this.state.top = true;\n return tokens;\n }\n inline(src, tokens = []) {\n this.inlineQueue.push({ src, tokens });\n return tokens;\n }\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = []) {\n let maskedSrc = src;\n let match = null;\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf(\"[\") + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + \"[\" + \"a\".repeat(match[0].length - 2) + \"]\" + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + \"++\" + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n }\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + \"[\" + \"a\".repeat(match[0].length - 2) + \"]\" + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n let keepPrevChar = false;\n let prevChar = \"\";\n while (src) {\n if (!keepPrevChar) {\n prevChar = \"\";\n }\n keepPrevChar = false;\n let token;\n if (this.options.extensions?.inline?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.type === \"text\" && lastToken?.type === \"text\") {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.autolink(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n let cutSrc = src;\n if (this.options.extensions?.startInline) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startInline.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === \"number\" && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (token = this.tokenizer.inlineText(cutSrc)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== \"_\") {\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n const lastToken = tokens.at(-1);\n if (lastToken?.type === \"text\") {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n const errMsg = \"Infinite loop on byte: \" + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n return tokens;\n }\n};\n\n// src/Renderer.ts\nvar _Renderer = class {\n options;\n parser;\n // set by the parser\n constructor(options2) {\n this.options = options2 || _defaults;\n }\n space(token) {\n return \"\";\n }\n code({ text, lang, escaped }) {\n const langString = (lang || \"\").match(other.notSpaceStart)?.[0];\n const code = text.replace(other.endingNewline, \"\") + \"\\n\";\n if (!langString) {\n return \"<pre><code>\" + (escaped ? code : escape2(code, true)) + \"</code></pre>\\n\";\n }\n return '<pre><code class=\"language-' + escape2(langString) + '\">' + (escaped ? code : escape2(code, true)) + \"</code></pre>\\n\";\n }\n blockquote({ tokens }) {\n const body = this.parser.parse(tokens);\n return `<blockquote>\n${body}</blockquote>\n`;\n }\n html({ text }) {\n return text;\n }\n heading({ tokens, depth }) {\n return `<h${depth}>${this.parser.parseInline(tokens)}</h${depth}>\n`;\n }\n hr(token) {\n return \"<hr>\\n\";\n }\n list(token) {\n const ordered = token.ordered;\n const start = token.start;\n let body = \"\";\n for (let j = 0; j < token.items.length; j++) {\n const item = token.items[j];\n body += this.listitem(item);\n }\n const type = ordered ? \"ol\" : \"ul\";\n const startAttr = ordered && start !== 1 ? ' start=\"' + start + '\"' : \"\";\n return \"<\" + type + startAttr + \">\\n\" + body + \"</\" + type + \">\\n\";\n }\n listitem(item) {\n let itemBody = \"\";\n if (item.task) {\n const checkbox = this.checkbox({ checked: !!item.checked });\n if (item.loose) {\n if (item.tokens[0]?.type === \"paragraph\") {\n item.tokens[0].text = checkbox + \" \" + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === \"text\") {\n item.tokens[0].tokens[0].text = checkbox + \" \" + escape2(item.tokens[0].tokens[0].text);\n item.tokens[0].tokens[0].escaped = true;\n }\n } else {\n item.tokens.unshift({\n type: \"text\",\n raw: checkbox + \" \",\n text: checkbox + \" \",\n escaped: true\n });\n }\n } else {\n itemBody += checkbox + \" \";\n }\n }\n itemBody += this.parser.parse(item.tokens, !!item.loose);\n return `<li>${itemBody}</li>\n`;\n }\n checkbox({ checked }) {\n return \"<input \" + (checked ? 'checked=\"\" ' : \"\") + 'disabled=\"\" type=\"checkbox\">';\n }\n paragraph({ tokens }) {\n return `<p>${this.parser.parseInline(tokens)}</p>\n`;\n }\n table(token) {\n let header = \"\";\n let cell = \"\";\n for (let j = 0; j < token.header.length; j++) {\n cell += this.tablecell(token.header[j]);\n }\n header += this.tablerow({ text: cell });\n let body = \"\";\n for (let j = 0; j < token.rows.length; j++) {\n const row = token.rows[j];\n cell = \"\";\n for (let k = 0; k < row.length; k++) {\n cell += this.tablecell(row[k]);\n }\n body += this.tablerow({ text: cell });\n }\n if (body) body = `<tbody>${body}</tbody>`;\n return \"<table>\\n<thead>\\n\" + header + \"</thead>\\n\" + body + \"</table>\\n\";\n }\n tablerow({ text }) {\n return `<tr>\n${text}</tr>\n`;\n }\n tablecell(token) {\n const content = this.parser.parseInline(token.tokens);\n const type = token.header ? \"th\" : \"td\";\n const tag2 = token.align ? `<${type} align=\"${token.align}\">` : `<${type}>`;\n return tag2 + content + `</${type}>\n`;\n }\n /**\n * span level renderer\n */\n strong({ tokens }) {\n return `<strong>${this.parser.parseInline(tokens)}</strong>`;\n }\n em({ tokens }) {\n return `<em>${this.parser.parseInline(tokens)}</em>`;\n }\n codespan({ text }) {\n return `<code>${escape2(text, true)}</code>`;\n }\n br(token) {\n return \"<br>\";\n }\n del({ tokens }) {\n return `<del>${this.parser.parseInline(tokens)}</del>`;\n }\n link({ href, title, tokens }) {\n const text = this.parser.parseInline(tokens);\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text;\n }\n href = cleanHref;\n let out = '<a href=\"' + href + '\"';\n if (title) {\n out += ' title=\"' + escape2(title) + '\"';\n }\n out += \">\" + text + \"</a>\";\n return out;\n }\n image({ href, title, text, tokens }) {\n if (tokens) {\n text = this.parser.parseInline(tokens, this.parser.textRenderer);\n }\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return escape2(text);\n }\n href = cleanHref;\n let out = `<img src=\"${href}\" alt=\"${text}\"`;\n if (title) {\n out += ` title=\"${escape2(title)}\"`;\n }\n out += \">\";\n return out;\n }\n text(token) {\n return \"tokens\" in token && token.tokens ? this.parser.parseInline(token.tokens) : \"escaped\" in token && token.escaped ? token.text : escape2(token.text);\n }\n};\n\n// src/TextRenderer.ts\nvar _TextRenderer = class {\n // no need for block level renderers\n strong({ text }) {\n return text;\n }\n em({ text }) {\n return text;\n }\n codespan({ text }) {\n return text;\n }\n del({ text }) {\n return text;\n }\n html({ text }) {\n return text;\n }\n text({ text }) {\n return text;\n }\n link({ text }) {\n return \"\" + text;\n }\n image({ text }) {\n return \"\" + text;\n }\n br() {\n return \"\";\n }\n};\n\n// src/Parser.ts\nvar _Parser = class __Parser {\n options;\n renderer;\n textRenderer;\n constructor(options2) {\n this.options = options2 || _defaults;\n this.options.renderer = this.options.renderer || new _Renderer();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.renderer.parser = this;\n this.textRenderer = new _TextRenderer();\n }\n /**\n * Static Parse Method\n */\n static parse(tokens, options2) {\n const parser2 = new __Parser(options2);\n return parser2.parse(tokens);\n }\n /**\n * Static Parse Inline Method\n */\n static parseInline(tokens, options2) {\n const parser2 = new __Parser(options2);\n return parser2.parseInline(tokens);\n }\n /**\n * Parse Loop\n */\n parse(tokens, top = true) {\n let out = \"\";\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const genericToken = anyToken;\n const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);\n if (ret !== false || ![\"space\", \"hr\", \"heading\", \"code\", \"table\", \"blockquote\", \"list\", \"html\", \"paragraph\", \"text\"].includes(genericToken.type)) {\n out += ret || \"\";\n continue;\n }\n }\n const token = anyToken;\n switch (token.type) {\n case \"space\": {\n out += this.renderer.space(token);\n continue;\n }\n case \"hr\": {\n out += this.renderer.hr(token);\n continue;\n }\n case \"heading\": {\n out += this.renderer.heading(token);\n continue;\n }\n case \"code\": {\n out += this.renderer.code(token);\n continue;\n }\n case \"table\": {\n out += this.renderer.table(token);\n continue;\n }\n case \"blockquote\": {\n out += this.renderer.blockquote(token);\n continue;\n }\n case \"list\": {\n out += this.renderer.list(token);\n continue;\n }\n case \"html\": {\n out += this.renderer.html(token);\n continue;\n }\n case \"paragraph\": {\n out += this.renderer.paragraph(token);\n continue;\n }\n case \"text\": {\n let textToken = token;\n let body = this.renderer.text(textToken);\n while (i + 1 < tokens.length && tokens[i + 1].type === \"text\") {\n textToken = tokens[++i];\n body += \"\\n\" + this.renderer.text(textToken);\n }\n if (top) {\n out += this.renderer.paragraph({\n type: \"paragraph\",\n raw: body,\n text: body,\n tokens: [{ type: \"text\", raw: body, text: body, escaped: true }]\n });\n } else {\n out += body;\n }\n continue;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return \"\";\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens, renderer = this.renderer) {\n let out = \"\";\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const ret = this.options.extensions.renderers[anyToken.type].call({ parser: this }, anyToken);\n if (ret !== false || ![\"escape\", \"html\", \"link\", \"image\", \"strong\", \"em\", \"codespan\", \"br\", \"del\", \"text\"].includes(anyToken.type)) {\n out += ret || \"\";\n continue;\n }\n }\n const token = anyToken;\n switch (token.type) {\n case \"escape\": {\n out += renderer.text(token);\n break;\n }\n case \"html\": {\n out += renderer.html(token);\n break;\n }\n case \"link\": {\n out += renderer.link(token);\n break;\n }\n case \"image\": {\n out += renderer.image(token);\n break;\n }\n case \"strong\": {\n out += renderer.strong(token);\n break;\n }\n case \"em\": {\n out += renderer.em(token);\n break;\n }\n case \"codespan\": {\n out += renderer.codespan(token);\n break;\n }\n case \"br\": {\n out += renderer.br(token);\n break;\n }\n case \"del\": {\n out += renderer.del(token);\n break;\n }\n case \"text\": {\n out += renderer.text(token);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return \"\";\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n};\n\n// src/Hooks.ts\nvar _Hooks = class {\n options;\n block;\n constructor(options2) {\n this.options = options2 || _defaults;\n }\n static passThroughHooks = /* @__PURE__ */ new Set([\n \"preprocess\",\n \"postprocess\",\n \"processAllTokens\"\n ]);\n /**\n * Process markdown before marked\n */\n preprocess(markdown) {\n return markdown;\n }\n /**\n * Process HTML after marked is finished\n */\n postprocess(html2) {\n return html2;\n }\n /**\n * Process all tokens before walk tokens\n */\n processAllTokens(tokens) {\n return tokens;\n }\n /**\n * Provide function to tokenize markdown\n */\n provideLexer() {\n return this.block ? _Lexer.lex : _Lexer.lexInline;\n }\n /**\n * Provide function to parse tokens\n */\n provideParser() {\n return this.block ? _Parser.parse : _Parser.parseInline;\n }\n};\n\n// src/Instance.ts\nvar Marked = class {\n defaults = _getDefaults();\n options = this.setOptions;\n parse = this.parseMarkdown(true);\n parseInline = this.parseMarkdown(false);\n Parser = _Parser;\n Renderer = _Renderer;\n TextRenderer = _TextRenderer;\n Lexer = _Lexer;\n Tokenizer = _Tokenizer;\n Hooks = _Hooks;\n constructor(...args) {\n this.use(...args);\n }\n /**\n * Run callback for every token\n */\n walkTokens(tokens, callback) {\n let values = [];\n for (const token of tokens) {\n values = values.concat(callback.call(this, token));\n switch (token.type) {\n case \"table\": {\n const tableToken = token;\n for (const cell of tableToken.header) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n for (const row of tableToken.rows) {\n for (const cell of row) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n }\n break;\n }\n case \"list\": {\n const listToken = token;\n values = values.concat(this.walkTokens(listToken.items, callback));\n break;\n }\n default: {\n const genericToken = token;\n if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n const tokens2 = genericToken[childTokens].flat(Infinity);\n values = values.concat(this.walkTokens(tokens2, callback));\n });\n } else if (genericToken.tokens) {\n values = values.concat(this.walkTokens(genericToken.tokens, callback));\n }\n }\n }\n }\n return values;\n }\n use(...args) {\n const extensions = this.defaults.extensions || { renderers: {}, childTokens: {} };\n args.forEach((pack) => {\n const opts = { ...pack };\n opts.async = this.defaults.async || opts.async || false;\n if (pack.extensions) {\n pack.extensions.forEach((ext) => {\n if (!ext.name) {\n throw new Error(\"extension name required\");\n }\n if (\"renderer\" in ext) {\n const prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n extensions.renderers[ext.name] = function(...args2) {\n let ret = ext.renderer.apply(this, args2);\n if (ret === false) {\n ret = prevRenderer.apply(this, args2);\n }\n return ret;\n };\n } else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if (\"tokenizer\" in ext) {\n if (!ext.level || ext.level !== \"block\" && ext.level !== \"inline\") {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n const extLevel = extensions[ext.level];\n if (extLevel) {\n extLevel.unshift(ext.tokenizer);\n } else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) {\n if (ext.level === \"block\") {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n } else {\n extensions.startBlock = [ext.start];\n }\n } else if (ext.level === \"inline\") {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n } else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if (\"childTokens\" in ext && ext.childTokens) {\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n if (pack.renderer) {\n const renderer = this.defaults.renderer || new _Renderer(this.defaults);\n for (const prop in pack.renderer) {\n if (!(prop in renderer)) {\n throw new Error(`renderer '${prop}' does not exist`);\n }\n if ([\"options\", \"parser\"].includes(prop)) {\n continue;\n }\n const rendererProp = prop;\n const rendererFunc = pack.renderer[rendererProp];\n const prevRenderer = renderer[rendererProp];\n renderer[rendererProp] = (...args2) => {\n let ret = rendererFunc.apply(renderer, args2);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args2);\n }\n return ret || \"\";\n };\n }\n opts.renderer = renderer;\n }\n if (pack.tokenizer) {\n const tokenizer = this.defaults.tokenizer || new _Tokenizer(this.defaults);\n for (const prop in pack.tokenizer) {\n if (!(prop in tokenizer)) {\n throw new Error(`tokenizer '${prop}' does not exist`);\n }\n if ([\"options\", \"rules\", \"lexer\"].includes(prop)) {\n continue;\n }\n const tokenizerProp = prop;\n const tokenizerFunc = pack.tokenizer[tokenizerProp];\n const prevTokenizer = tokenizer[tokenizerProp];\n tokenizer[tokenizerProp] = (...args2) => {\n let ret = tokenizerFunc.apply(tokenizer, args2);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args2);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n if (pack.hooks) {\n const hooks = this.defaults.hooks || new _Hooks();\n for (const prop in pack.hooks) {\n if (!(prop in hooks)) {\n throw new Error(`hook '${prop}' does not exist`);\n }\n if ([\"options\", \"block\"].includes(prop)) {\n continue;\n }\n const hooksProp = prop;\n const hooksFunc = pack.hooks[hooksProp];\n const prevHook = hooks[hooksProp];\n if (_Hooks.passThroughHooks.has(prop)) {\n hooks[hooksProp] = (arg) => {\n if (this.defaults.async) {\n return Promise.resolve(hooksFunc.call(hooks, arg)).then((ret2) => {\n return prevHook.call(hooks, ret2);\n });\n }\n const ret = hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n } else {\n hooks[hooksProp] = (...args2) => {\n let ret = hooksFunc.apply(hooks, args2);\n if (ret === false) {\n ret = prevHook.apply(hooks, args2);\n }\n return ret;\n };\n }\n }\n opts.hooks = hooks;\n }\n if (pack.walkTokens) {\n const walkTokens2 = this.defaults.walkTokens;\n const packWalktokens = pack.walkTokens;\n opts.walkTokens = function(token) {\n let values = [];\n values.push(packWalktokens.call(this, token));\n if (walkTokens2) {\n values = values.concat(walkTokens2.call(this, token));\n }\n return values;\n };\n }\n this.defaults = { ...this.defaults, ...opts };\n });\n return this;\n }\n setOptions(opt) {\n this.defaults = { ...this.defaults, ...opt };\n return this;\n }\n lexer(src, options2) {\n return _Lexer.lex(src, options2 ?? this.defaults);\n }\n parser(tokens, options2) {\n return _Parser.parse(tokens, options2 ?? this.defaults);\n }\n parseMarkdown(blockType) {\n const parse2 = (src, options2) => {\n const origOpt = { ...options2 };\n const opt = { ...this.defaults, ...origOpt };\n const throwError = this.onError(!!opt.silent, !!opt.async);\n if (this.defaults.async === true && origOpt.async === false) {\n return throwError(new Error(\"marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.\"));\n }\n if (typeof src === \"undefined\" || src === null) {\n return throwError(new Error(\"marked(): input parameter is undefined or null\"));\n }\n if (typeof src !== \"string\") {\n return throwError(new Error(\"marked(): input parameter is of type \" + Object.prototype.toString.call(src) + \", string expected\"));\n }\n if (opt.hooks) {\n opt.hooks.options = opt;\n opt.hooks.block = blockType;\n }\n const lexer2 = opt.hooks ? opt.hooks.provideLexer() : blockType ? _Lexer.lex : _Lexer.lexInline;\n const parser2 = opt.hooks ? opt.hooks.provideParser() : blockType ? _Parser.parse : _Parser.parseInline;\n if (opt.async) {\n return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src).then((src2) => lexer2(src2, opt)).then((tokens) => opt.hooks ? opt.hooks.processAllTokens(tokens) : tokens).then((tokens) => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens).then((tokens) => parser2(tokens, opt)).then((html2) => opt.hooks ? opt.hooks.postprocess(html2) : html2).catch(throwError);\n }\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src);\n }\n let tokens = lexer2(src, opt);\n if (opt.hooks) {\n tokens = opt.hooks.processAllTokens(tokens);\n }\n if (opt.walkTokens) {\n this.walkTokens(tokens, opt.walkTokens);\n }\n let html2 = parser2(tokens, opt);\n if (opt.hooks) {\n html2 = opt.hooks.postprocess(html2);\n }\n return html2;\n } catch (e) {\n return throwError(e);\n }\n };\n return parse2;\n }\n onError(silent, async) {\n return (e) => {\n e.message += \"\\nPlease report this to https://github.com/markedjs/marked.\";\n if (silent) {\n const msg = \"<p>An error occurred:</p><pre>\" + escape2(e.message + \"\", true) + \"</pre>\";\n if (async) {\n return Promise.resolve(msg);\n }\n return msg;\n }\n if (async) {\n return Promise.reject(e);\n }\n throw e;\n };\n }\n};\n\n// src/marked.ts\nvar markedInstance = new Marked();\nfunction marked(src, opt) {\n return markedInstance.parse(src, opt);\n}\nmarked.options = marked.setOptions = function(options2) {\n markedInstance.setOptions(options2);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\nmarked.getDefaults = _getDefaults;\nmarked.defaults = _defaults;\nmarked.use = function(...args) {\n markedInstance.use(...args);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\nmarked.walkTokens = function(tokens, callback) {\n return markedInstance.walkTokens(tokens, callback);\n};\nmarked.parseInline = markedInstance.parseInline;\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\nvar options = marked.options;\nvar setOptions = marked.setOptions;\nvar use = marked.use;\nvar walkTokens = marked.walkTokens;\nvar parseInline = marked.parseInline;\nvar parse = marked;\nvar parser = _Parser.parse;\nvar lexer = _Lexer.lex;\nexport {\n _Hooks as Hooks,\n _Lexer as Lexer,\n Marked,\n _Parser as Parser,\n _Renderer as Renderer,\n _TextRenderer as TextRenderer,\n _Tokenizer as Tokenizer,\n _defaults as defaults,\n _getDefaults as getDefaults,\n lexer,\n marked,\n options,\n parse,\n parseInline,\n parser,\n setOptions,\n use,\n walkTokens\n};\n//# sourceMappingURL=marked.esm.js.map\n","import { marked, type Tokens } from 'marked';\nimport React, { memo, useMemo, useEffect, useRef } from 'react';\n\n// escape html special chars for safe insertion into pre/code blocks\nfunction escapeHtml(html: string): string {\n return html\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n}\n\nconst renderer = new marked.Renderer();\n\nrenderer.code = ({ text, lang = '', escaped }: Tokens.Code): string => {\n const languageClass = lang ? `language-${lang}` : '';\n const safeCode = escaped ? text : escapeHtml(text);\n const encodedCode = encodeURIComponent(text);\n\n // svg icons (copy & check)\n const copyIconSvg = `<svg class=\"DocSearch-CodeSnippet-CopyIcon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\" /><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" /></svg>`;\n\n const checkIconSvg = `<svg class=\"DocSearch-CodeSnippet-CheckIcon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20 6 9 17l-5-5\" /></svg>`;\n\n return `\n <div class=\"DocSearch-CodeSnippet\">\n <button class=\"DocSearch-CodeSnippet-CopyButton\" data-code=\"${encodedCode}\" aria-label=\"copy code\">${copyIconSvg}${checkIconSvg}<span class=\"DocSearch-CodeSnippet-CopyButton-Label\"></span></button>\n <pre><code class=\"${languageClass}\">${safeCode}</code></pre>\n </div>\n `;\n};\n\n// ensure all markdown links open in a new tab with rel noopener for security\nrenderer.link = ({ href, title, text }: Tokens.Link): string => {\n const titleAttr = title ? ` title=\"${escapeHtml(title)}\"` : '';\n const hrefAttr = href ? escapeHtml(href) : '';\n const textEscaped = escapeHtml(text);\n return `<a href=\"${hrefAttr}\"${titleAttr} target=\"_blank\" rel=\"noopener noreferrer\">${textEscaped}</a>`;\n};\n\nexport const MemoizedMarkdown = memo(\n ({\n content,\n copyButtonText,\n copyButtonCopiedText,\n isStreaming,\n }: {\n content: string;\n copyButtonText: string;\n copyButtonCopiedText: string;\n isStreaming: boolean;\n }) => {\n const html = useMemo(\n () =>\n marked.parse(content, {\n gfm: true,\n breaks: true,\n renderer,\n }),\n [content],\n );\n\n // container ref to scope dom queries and events\n const containerRef = useRef<HTMLDivElement>(null);\n\n // setup copy buttons whenever content or translations change\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const buttons = Array.from(container.querySelectorAll<HTMLButtonElement>('.DocSearch-CodeSnippet-CopyButton'));\n\n buttons.forEach((btn) => {\n const label = btn.querySelector<HTMLElement>('.DocSearch-CodeSnippet-CopyButton-Label');\n if (label) label.textContent = copyButtonText;\n\n // ensure icons initial visibility\n btn.classList.remove('DocSearch-CodeSnippet-CopyButton--copied');\n });\n\n function handleClick(event: MouseEvent): void {\n const targetEl = event.target as HTMLElement;\n const btn = targetEl.closest<HTMLButtonElement>('.DocSearch-CodeSnippet-CopyButton');\n if (!btn) return;\n\n const encoded = btn.getAttribute('data-code') ?? '';\n navigator.clipboard.writeText(decodeURIComponent(encoded)).catch(() => {\n /* noop */\n });\n\n const label = btn.querySelector<HTMLElement>('.DocSearch-CodeSnippet-CopyButton-Label');\n if (!label) return;\n\n btn.classList.add('DocSearch-CodeSnippet-CopyButton--copied');\n const original = copyButtonText;\n label.textContent = copyButtonCopiedText;\n\n setTimeout(() => {\n btn.classList.remove('DocSearch-CodeSnippet-CopyButton--copied');\n label.textContent = original;\n }, 1500);\n }\n\n container.addEventListener('click', handleClick);\n\n // eslint-disable-next-line consistent-return\n return (): void => {\n container.removeEventListener('click', handleClick);\n };\n }, [html, copyButtonText, copyButtonCopiedText]);\n\n return (\n <div\n ref={containerRef}\n className={`DocSearch-Markdown-Content ${isStreaming ? 'DocSearch-Markdown-Content--streaming' : ''}`}\n dangerouslySetInnerHTML={{ __html: html }}\n />\n );\n },\n);\nMemoizedMarkdown.displayName = 'MemoizedMarkdown';\n","import type { UseChatHelpers } from '@ai-sdk/react';\nimport React, { type JSX, useState, useEffect, useMemo } from 'react';\n\nimport { AggregatedSearchBlock } from './AggregatedSearchBlock';\nimport { AlertIcon, LoadingIcon, SearchIcon } from './icons';\nimport { MemoizedMarkdown } from './MemoizedMarkdown';\nimport type { ScreenStateProps } from './ScreenState';\nimport type { StoredSearchPlugin } from './stored-searches';\nimport type { InternalDocSearchHit, StoredAskAiState } from './types';\nimport { extractLinksFromText } from './utils/ai';\nimport { groupConsecutiveToolResults } from './utils/groupConsecutiveToolResults';\n\nexport type AskAiScreenTranslations = Partial<{\n // Misc texts\n disclaimerText: string;\n relatedSourcesText: string;\n thinkingText: string;\n copyButtonText: string;\n copyButtonCopiedText: string;\n // Feedback buttons\n copyButtonTitle: string;\n likeButtonTitle: string;\n dislikeButtonTitle: string;\n thanksForFeedbackText: string;\n // Tool call texts\n preToolCallText: string;\n duringToolCallText: string;\n afterToolCallText: string;\n /**\n * Build the full jsx element for the aggregated search block.\n * If provided, completely overrides the default english renderer.\n */\n aggregatedToolCallNode?: (queries: string[], onSearchQueryClick: (query: string) => void) => React.ReactNode;\n\n /**\n * Generate the list connective parts only (backwards compatibility).\n * Receives full list of queries and should return translation parts for before/after/separators.\n * Example: (qs) => ({ before: 'searched for ', separator: ', ', lastSeparator: ' and ', after: '' }).\n */\n aggregatedToolCallText?: (queries: string[]) => {\n before?: string;\n separator?: string;\n lastSeparator?: string;\n after?: string;\n };\n}>;\n\ntype AskAiScreenProps = Omit<ScreenStateProps<InternalDocSearchHit>, 'translations'> & {\n messages: UseChatHelpers['messages'];\n status: UseChatHelpers['status'];\n askAiStreamError: Error | null;\n askAiFetchError: Error | undefined;\n translations?: AskAiScreenTranslations;\n};\n\ninterface AskAiScreenHeaderProps {\n disclaimerText: string;\n}\n\ninterface Exchange {\n id: string;\n userMessage: UseChatHelpers['messages'][number];\n assistantMessage: UseChatHelpers['messages'][number] | null;\n}\n\nfunction AskAiScreenHeader({ disclaimerText }: AskAiScreenHeaderProps): JSX.Element {\n return <p className=\"DocSearch-AskAiScreen-Disclaimer\">{disclaimerText}</p>;\n}\n\ninterface AskAiExchangeCardProps {\n exchange: Exchange;\n askAiStreamError: Error | null;\n isLastExchange: boolean;\n loadingStatus: UseChatHelpers['status'];\n onSearchQueryClick: (query: string) => void;\n translations: AskAiScreenTranslations;\n conversations: StoredSearchPlugin<StoredAskAiState>;\n onFeedback?: (messageId: string, thumbs: 0 | 1) => Promise<void>;\n}\n\nfunction AskAiExchangeCard({\n exchange,\n askAiStreamError,\n isLastExchange,\n loadingStatus,\n onSearchQueryClick,\n translations,\n conversations,\n onFeedback,\n}: AskAiExchangeCardProps): JSX.Element {\n const { userMessage, assistantMessage } = exchange;\n\n const showActions = !isLastExchange || (isLastExchange && loadingStatus === 'ready' && Boolean(assistantMessage));\n\n const urlsToDisplay = React.useMemo(() => extractLinksFromText(assistantMessage?.content || ''), [assistantMessage]);\n\n const displayParts = React.useMemo(() => {\n if (!Array.isArray(assistantMessage?.parts)) {\n return assistantMessage?.content ? [assistantMessage?.content] : [];\n }\n return groupConsecutiveToolResults(assistantMessage?.parts || []);\n }, [assistantMessage]);\n\n return (\n <div className=\"DocSearch-AskAiScreen-Response-Container\">\n <div className=\"DocSearch-AskAiScreen-Response\">\n <div className=\"DocSearch-AskAiScreen-Message DocSearch-AskAiScreen-Message--user\">\n <p className=\"DocSearch-AskAiScreen-Query\">{userMessage.content}</p>\n </div>\n <div className=\"DocSearch-AskAiScreen-Message DocSearch-AskAiScreen-Message--assistant\">\n <div className=\"DocSearch-AskAiScreen-MessageContent\">\n {loadingStatus === 'error' && askAiStreamError && isLastExchange && (\n <div className=\"DocSearch-AskAiScreen-MessageContent DocSearch-AskAiScreen-Error\">\n <AlertIcon />\n <p>{askAiStreamError.message}</p>\n </div>\n )}\n {loadingStatus === 'submitted' && isLastExchange && (\n <div className=\"DocSearch-AskAiScreen-MessageContent-Reasoning\">\n <span className=\"shimmer\">{translations.thinkingText || 'Thinking...'}</span>\n </div>\n )}\n {Array.isArray(displayParts)\n ? displayParts.map((part, idx) => {\n const index = idx;\n\n if (typeof part === 'string') {\n return (\n <MemoizedMarkdown\n key={index}\n content={part}\n copyButtonText={translations.copyButtonText || 'Copy'}\n copyButtonCopiedText={translations.copyButtonCopiedText || 'Copied!'}\n isStreaming={loadingStatus === 'streaming'}\n />\n );\n }\n\n // aggregated tool call rendering\n if (part && (part as any).type === 'aggregated-tool-call') {\n return (\n <AggregatedSearchBlock\n key={index}\n queries={(part as any).queries}\n translations={translations}\n onSearchQueryClick={onSearchQueryClick}\n />\n );\n }\n\n if (part.type === 'reasoning' && assistantMessage?.parts?.length === 1) {\n return (\n <div key={index} className=\"DocSearch-AskAiScreen-MessageContent-Reasoning shimmer\">\n <span className=\"shimmer\">Reasoning...</span>\n </div>\n );\n }\n\n if (part.type === 'text') {\n return (\n <MemoizedMarkdown\n key={index}\n content={part.text}\n copyButtonText={translations.copyButtonText || 'Copy'}\n copyButtonCopiedText={translations.copyButtonCopiedText || 'Copied!'}\n isStreaming={loadingStatus === 'streaming'}\n />\n );\n }\n if (part.type === 'tool-invocation') {\n const { toolInvocation } = part;\n if (toolInvocation.toolName === 'searchIndex') {\n switch (toolInvocation.state) {\n case 'partial-call':\n return (\n <div\n key={index}\n className=\"DocSearch-AskAiScreen-MessageContent-Tool Tool--PartialCall shimmer\"\n >\n <LoadingIcon className=\"DocSearch-AskAiScreen-SmallerLoadingIcon\" />\n <span>{translations.preToolCallText || 'Searching...'}</span>\n </div>\n );\n case 'call':\n return (\n <div key={index} className=\"DocSearch-AskAiScreen-MessageContent-Tool Tool--Call shimmer\">\n <LoadingIcon className=\"DocSearch-AskAiScreen-SmallerLoadingIcon\" />\n <span>\n {`${translations.duringToolCallText || 'Searching for '} \"${toolInvocation.args?.query || ''}\" ...`}\n </span>\n </div>\n );\n case 'result':\n return (\n <div key={index} className=\"DocSearch-AskAiScreen-MessageContent-Tool Tool--Result\">\n <SearchIcon size={18} />\n <span>\n {`${translations.afterToolCallText || 'Searched for'}`}{' '}\n <span\n role=\"button\"\n tabIndex={0}\n className=\"DocSearch-AskAiScreen-MessageContent-Tool-Query\"\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onSearchQueryClick(toolInvocation.args?.query || '');\n }\n }}\n onClick={() => onSearchQueryClick(toolInvocation.args?.query || '')}\n >\n {' '}\n &quot;{toolInvocation.args?.query || ''}&quot;\n </span>\n </span>\n </div>\n );\n default:\n return null;\n }\n }\n // fallback for unknown tool, should never happen in theory. :shrug:\n return (\n <span key={index} className=\"text-sm italic shimmer\">\n {translations.thinkingText || 'Thinking...'}\n </span>\n );\n }\n // fallback for unknown part type\n return null;\n })\n : assistantMessage?.content}\n </div>\n </div>\n <div className=\"DocSearch-AskAiScreen-Answer-Footer\">\n <AskAiScreenFooterActions\n id={userMessage?.id || exchange.id}\n showActions={showActions}\n latestAssistantMessageContent={assistantMessage?.content || null}\n translations={translations}\n conversations={conversations}\n onFeedback={onFeedback}\n />\n </div>\n </div>\n\n {/* Sources for this exchange */}\n {urlsToDisplay.length > 0 ? (\n <AskAiSourcesPanel urlsToDisplay={urlsToDisplay} relatedSourcesText={translations.relatedSourcesText} />\n ) : null}\n </div>\n );\n}\n\ninterface AskAiScreenFooterActionsProps {\n id: string;\n showActions: boolean;\n latestAssistantMessageContent: string | null;\n translations: AskAiScreenTranslations;\n conversations: StoredSearchPlugin<StoredAskAiState>;\n onFeedback?: (messageId: string, thumbs: 0 | 1) => Promise<void>;\n}\n\nfunction AskAiScreenFooterActions({\n id,\n showActions,\n latestAssistantMessageContent,\n translations,\n conversations,\n onFeedback,\n}: AskAiScreenFooterActionsProps): JSX.Element | null {\n // local state for feedback, initialised from stored conversations\n const initialFeedback = React.useMemo(() => {\n const message = conversations.getOne?.(id);\n return message?.feedback ?? null;\n }, [conversations, id]);\n\n const [feedback, setFeedback] = React.useState<'dislike' | 'like' | null>(initialFeedback);\n const [saving, setSaving] = React.useState(false);\n const [savingError, setSavingError] = React.useState<Error | null>(null);\n\n const handleFeedback = async (value: 'dislike' | 'like'): Promise<void> => {\n if (saving) return;\n setSavingError(null);\n setSaving(true);\n try {\n await onFeedback?.(id, value === 'like' ? 1 : 0);\n setFeedback(value);\n } catch (error) {\n setSavingError(error as Error);\n } finally {\n setSaving(false);\n }\n };\n\n const {\n likeButtonTitle = 'Like',\n dislikeButtonTitle = 'Dislike',\n thanksForFeedbackText = 'Thanks for your feedback!',\n } = translations;\n\n if (!showActions || !latestAssistantMessageContent) {\n return null;\n }\n\n return (\n <div className=\"DocSearch-AskAiScreen-Actions\">\n {feedback === null ? (\n <>\n {saving ? (\n <LoadingIcon className=\"DocSearch-AskAiScreen-SmallerLoadingIcon\" />\n ) : (\n <>\n <LikeButton title={likeButtonTitle} onClick={() => handleFeedback('like')} />\n <DislikeButton title={dislikeButtonTitle} onClick={() => handleFeedback('dislike')} />\n </>\n )}\n {savingError && (\n <p className=\"DocSearch-AskAiScreen-FeedbackText\">{savingError.message || 'An error occured'}</p>\n )}\n </>\n ) : (\n <p className=\"DocSearch-AskAiScreen-FeedbackText DocSearch-AskAiScreen-FeedbackText--visible\">\n {thanksForFeedbackText}\n </p>\n )}\n <CopyButton\n translations={translations}\n onClick={() => navigator.clipboard.writeText(latestAssistantMessageContent)}\n />\n </div>\n );\n}\n\ninterface AskAiSourcesPanelProps {\n urlsToDisplay: Array<{ url: string; title?: string }>;\n relatedSourcesText?: string;\n}\n\nfunction AskAiSourcesPanel({ urlsToDisplay, relatedSourcesText }: AskAiSourcesPanelProps): JSX.Element {\n return (\n <div className=\"DocSearch-AskAiScreen-RelatedSources\">\n <p className=\"DocSearch-AskAiScreen-RelatedSources-Title\">{relatedSourcesText || 'Related sources'}</p>\n <div className=\"DocSearch-AskAiScreen-RelatedSources-List\">\n {urlsToDisplay.length > 0 &&\n urlsToDisplay.map((link) => (\n <a\n key={link.url}\n href={link.url}\n className=\"DocSearch-AskAiScreen-RelatedSources-Item-Link\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <RelatedSourceIcon />\n <span>{link.title || link.url}</span>\n </a>\n ))}\n </div>\n </div>\n );\n}\n\nexport function AskAiScreen({ translations = {}, ...props }: AskAiScreenProps): JSX.Element | null {\n const { disclaimerText = 'Answers are generated with AI which can make mistakes. Verify responses.' } = translations;\n\n const { messages } = props;\n\n // Group messages into exchanges (user + assistant pairs)\n const exchanges: Exchange[] = useMemo(() => {\n const grouped: Exchange[] = [];\n for (let i = 0; i < messages.length; i++) {\n if (messages[i].role === 'user') {\n const userMessage = messages[i];\n const assistantMessage = messages[i + 1]?.role === 'assistant' ? messages[i + 1] : null;\n grouped.push({ id: userMessage.id, userMessage, assistantMessage });\n if (assistantMessage) {\n i++;\n }\n }\n }\n return grouped;\n }, [messages]);\n\n const handleSearchQueryClick = (query: string): void => {\n props.onAskAiToggle(false);\n props.setQuery(query);\n };\n\n return (\n <div className=\"DocSearch-AskAiScreen DocSearch-AskAiScreen-Container\">\n <AskAiScreenHeader disclaimerText={disclaimerText} />\n <div className=\"DocSearch-AskAiScreen-Body\">\n <div className=\"DocSearch-AskAiScreen-ExchangesList\">\n {exchanges\n .slice()\n .reverse()\n .map((exchange, index) => (\n <AskAiExchangeCard\n key={exchange.id}\n exchange={exchange}\n askAiStreamError={props.askAiStreamError}\n isLastExchange={index === 0}\n loadingStatus={props.status}\n translations={translations}\n conversations={props.conversations}\n onSearchQueryClick={handleSearchQueryClick}\n onFeedback={props.onFeedback}\n />\n ))}\n </div>\n </div>\n </div>\n );\n}\n\nfunction RelatedSourceIcon(): JSX.Element {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"4\" x2=\"20\" y1=\"9\" y2=\"9\" />\n <line x1=\"4\" x2=\"20\" y1=\"15\" y2=\"15\" />\n <line x1=\"10\" x2=\"8\" y1=\"3\" y2=\"21\" />\n <line x1=\"16\" x2=\"14\" y1=\"3\" y2=\"21\" />\n </svg>\n );\n}\n\nfunction CopyButton({\n onClick,\n translations,\n}: {\n onClick: () => void;\n translations: AskAiScreenTranslations;\n}): JSX.Element {\n const { copyButtonTitle = 'Copy', copyButtonCopiedText = 'Copied!' } = translations;\n\n const [isCopied, setIsCopied] = useState(false);\n\n useEffect(() => {\n if (isCopied) {\n const timer = setTimeout(() => {\n setIsCopied(false);\n }, 1500); // reset after 1.5 seconds\n return (): void => clearTimeout(timer);\n }\n return undefined;\n }, [isCopied]);\n\n const handleClick = (): void => {\n onClick();\n setIsCopied(true);\n };\n\n return (\n <button\n type=\"button\"\n className={`DocSearch-AskAiScreen-ActionButton DocSearch-AskAiScreen-CopyButton ${\n isCopied ? 'DocSearch-AskAiScreen-CopyButton--copied' : ''\n }`}\n disabled={isCopied} // disable button briefly after copy\n title={isCopied ? copyButtonCopiedText : copyButtonTitle}\n onClick={handleClick}\n >\n {isCopied ? (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-check-icon lucide-check\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n ) : (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-copy-icon lucide-copy\"\n >\n <rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\" />\n <path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" />\n </svg>\n )}\n </button>\n );\n}\n\nfunction LikeButton({ title, onClick }: { title: string; onClick: () => void }): JSX.Element {\n // @todo: implement like button\n return (\n <button\n type=\"button\"\n className=\"DocSearch-AskAiScreen-ActionButton DocSearch-AskAiScreen-LikeButton\"\n title={title}\n onClick={onClick}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-thumbs-up-icon lucide-thumbs-up\"\n >\n <path d=\"M7 10v12\" />\n <path d=\"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z\" />\n </svg>\n </button>\n );\n}\n\nfunction DislikeButton({ title, onClick }: { title: string; onClick: () => void }): JSX.Element {\n // @todo: implement dislike button\n return (\n <button\n type=\"button\"\n className=\"DocSearch-AskAiScreen-ActionButton DocSearch-AskAiScreen-DislikeButton\"\n title={title}\n onClick={onClick}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-thumbs-down-icon lucide-thumbs-down\"\n >\n <path d=\"M17 14V2\" />\n <path d=\"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z\" />\n </svg>\n </button>\n );\n}\n","import type { Message } from '@ai-sdk/react';\n\nimport type { StoredAskAiState } from '../types';\n\n// utility to extract links (markdown and bare urls) from a string\nexport function extractLinksFromText(text: string): Array<{ url: string; title?: string }> {\n // match [title](url) and bare urls\n const markdownLinkRegex = /\\[([^\\]]+)\\]\\((https?:\\/\\/[^\\s)]+)\\)/g;\n const urlRegex = /https?:\\/\\/[^\\s)]+/g;\n const links: Array<{ url: string; title?: string }> = [];\n const seen = new Set<string>();\n\n // extract markdown links first\n let match;\n while ((match = markdownLinkRegex.exec(text)) !== null) {\n let url = match[2];\n const title = match[1];\n // trim trailing punctuation\n url = url.replace(/[).,;!?]+$/, '');\n if (!seen.has(url)) {\n links.push({ url, title });\n seen.add(url);\n }\n }\n\n // extract bare urls\n while ((match = urlRegex.exec(text)) !== null) {\n let url = match[0];\n url = url.replace(/[).,;!?]+$/, '');\n if (!seen.has(url)) {\n links.push({ url });\n seen.add(url);\n }\n }\n\n return links;\n}\n\nexport const buildDummyAskAiHit = (query: string, messages: Message[]): StoredAskAiState => ({\n query,\n objectID: messages[0].content,\n messages,\n type: 'askAI',\n anchor: 'stored',\n\n // dummy content to make it a valid hit\n // this is useful to show it among other hits\n content: null,\n hierarchy: {\n lvl0: 'askAI',\n lvl1: messages[0].content, // use first message as hit name\n lvl2: null,\n lvl3: null,\n lvl4: null,\n lvl5: null,\n lvl6: null,\n },\n url: '',\n url_without_anchor: '',\n});\n","export interface AggregatedToolCallPart {\n type: 'aggregated-tool-call';\n queries: string[];\n}\n\n/**\n * Groups consecutive `searchIndex` tool invocation result parts together.\n * Empty or falsy queries are ignored.\n */\nexport function groupConsecutiveToolResults<T extends { type: string }>(parts: T[]): Array<AggregatedToolCallPart | T> {\n const aggregatedParts: Array<AggregatedToolCallPart | T> = [];\n\n for (let i = 0; i < parts.length; i++) {\n const part: any = parts[i];\n\n if (\n part?.type === 'tool-invocation' &&\n part.toolInvocation?.toolName === 'searchIndex' &&\n part.toolInvocation?.state === 'result'\n ) {\n // build list of consecutive result queries\n const queries: string[] = [];\n let j = i;\n while (j < parts.length) {\n const candidate: any = parts[j];\n if (\n candidate?.type === 'tool-invocation' &&\n candidate.toolInvocation?.toolName === 'searchIndex' &&\n candidate.toolInvocation?.state === 'result'\n ) {\n const q = (candidate.toolInvocation?.args?.query || '').trim();\n // eslint-disable-next-line max-depth\n if (q) {\n queries.push(q);\n }\n j++;\n } else {\n break;\n }\n }\n\n if (queries.length > 1) {\n aggregatedParts.push({ type: 'aggregated-tool-call', queries });\n } else if (queries.length === 1) {\n // only one valid query, push the original part so rendering remains unchanged\n aggregatedParts.push(part);\n }\n\n i = j - 1; // skip processed items\n } else {\n aggregatedParts.push(part);\n }\n }\n\n return aggregatedParts;\n}\n","import React, { type JSX } from 'react';\n\nimport { ErrorIcon } from './icons';\n\nexport type ErrorScreenTranslations = Partial<{\n titleText: string;\n helpText: string;\n}>;\n\ntype ErrorScreenProps = {\n translations?: ErrorScreenTranslations;\n};\n\nexport function ErrorScreen({ translations = {} }: ErrorScreenProps): JSX.Element {\n const { titleText = 'Unable to fetch results', helpText = 'You might want to check your network connection.' } =\n translations;\n return (\n <div className=\"DocSearch-ErrorScreen\">\n <div className=\"DocSearch-Screen-Icon\">\n <ErrorIcon />\n </div>\n <p className=\"DocSearch-Title\">{titleText}</p>\n <p className=\"DocSearch-Help\">{helpText}</p>\n </div>\n );\n}\n","import React, { type JSX } from 'react';\n\nimport { NoResultsIcon, SearchIcon } from './icons';\nimport type { ScreenStateProps } from './ScreenState';\nimport type { InternalDocSearchHit } from './types';\n\nexport type NoResultsScreenTranslations = Partial<{\n noResultsText: string;\n suggestedQueryText: string;\n reportMissingResultsText: string;\n reportMissingResultsLinkText: string;\n}>;\n\ntype NoResultsScreenProps = Omit<ScreenStateProps<InternalDocSearchHit>, 'translations'> & {\n translations?: NoResultsScreenTranslations;\n};\n\nexport function NoResultsScreen({ translations = {}, ...props }: NoResultsScreenProps): JSX.Element {\n const {\n noResultsText = 'No results found for',\n suggestedQueryText = 'Try searching for',\n reportMissingResultsText = 'Believe this query should return results?',\n reportMissingResultsLinkText = 'Let us know.',\n } = translations;\n const searchSuggestions: string[] | undefined = props.state.context.searchSuggestions as string[];\n\n return (\n <div className={`DocSearch-NoResults ${props.canHandleAskAi ? 'DocSearch-NoResults--withAskAi' : ''}`}>\n <div className=\"DocSearch-Screen-Icon\">\n <NoResultsIcon />\n </div>\n <p className=\"DocSearch-Title\">\n {noResultsText} \"<strong>{props.state.query}</strong>\"\n </p>\n\n {searchSuggestions && searchSuggestions.length > 0 && (\n <div className=\"DocSearch-NoResults-Prefill-List\">\n <p className=\"DocSearch-Help\">{suggestedQueryText}:</p>\n <div className=\"DocSearch-NoResults-Prefill-List-Items\">\n {searchSuggestions.slice(0, 3).reduce<React.ReactNode[]>(\n (acc, search) => [\n ...acc,\n <p key={search}>\n <SearchIcon size={16} />\n <button\n className=\"DocSearch-Prefill\"\n key={search}\n type=\"button\"\n onClick={() => {\n props.setQuery(search.toLowerCase() + ' ');\n props.refresh();\n props.inputRef.current!.focus();\n }}\n >\n {search}\n </button>\n </p>,\n ],\n [],\n )}\n </div>\n </div>\n )}\n\n {props.getMissingResultsUrl && (\n <p className=\"DocSearch-Help\">\n {`${reportMissingResultsText} `}\n <a href={props.getMissingResultsUrl({ query: props.state.query })} target=\"_blank\" rel=\"noopener noreferrer\">\n {reportMissingResultsLinkText}\n </a>\n </p>\n )}\n </div>\n );\n}\n","import { type JSX, createElement } from 'react';\n\nimport type { StoredDocSearchHit } from './types';\n\nfunction getPropertyByPath(object: Record<string, any>, path: string): any {\n const parts = path.split('.');\n\n return parts.reduce((prev, current) => {\n if (prev?.[current]) return prev[current];\n return null;\n }, object);\n}\n\ninterface SnippetProps<TItem> {\n hit: TItem;\n attribute: string;\n tagName?: string;\n [prop: string]: unknown;\n}\n\nexport function Snippet<TItem extends StoredDocSearchHit>({\n hit,\n attribute,\n tagName = 'span',\n ...rest\n}: SnippetProps<TItem>): JSX.Element {\n return createElement(tagName, {\n ...rest,\n dangerouslySetInnerHTML: {\n __html: getPropertyByPath(hit, `_snippetResult.${attribute}.value`) || getPropertyByPath(hit, attribute),\n },\n });\n}\n","import type { AutocompleteApi, AutocompleteState, BaseItem } from '@algolia/autocomplete-core';\nimport React, { type JSX } from 'react';\n\nimport type { DocSearchProps } from './DocSearch';\nimport { SparklesIcon } from './icons/SparklesIcon';\nimport { Snippet } from './Snippet';\nimport type { InternalDocSearchHit, StoredDocSearchHit } from './types';\n\nexport type ResultsTranslations = Partial<{\n askAiPlaceholder: string;\n}>;\ninterface ResultsProps<TItem extends BaseItem>\n extends AutocompleteApi<TItem, React.FormEvent, React.MouseEvent, React.KeyboardEvent> {\n title: string;\n translations?: ResultsTranslations;\n collection: AutocompleteState<TItem>['collections'][0];\n renderIcon: (props: { item: TItem; index: number }) => React.ReactNode;\n renderAction: (props: {\n item: TItem;\n runDeleteTransition: (cb: () => void) => void;\n runFavoriteTransition: (cb: () => void) => void;\n }) => React.ReactNode;\n onItemClick: (item: TItem, event: KeyboardEvent | MouseEvent) => void;\n hitComponent: DocSearchProps['hitComponent'];\n}\n\nexport function Results<TItem extends StoredDocSearchHit>(props: ResultsProps<TItem>): JSX.Element | null {\n if (!props.collection || props.collection.items.length === 0) {\n return null;\n }\n\n if (props.collection.source.sourceId === 'askAI') {\n return (\n <section className=\"DocSearch-AskAi-Section\">\n <ul {...props.getListProps({ source: props.collection.source })}>\n <AskAiButton item={props.collection.items[0]} translations={props.translations} {...props} />\n </ul>\n </section>\n );\n }\n\n if (props.collection.source.sourceId === 'recentConversations') {\n return (\n <section className=\"DocSearch-Hits\">\n <div className=\"DocSearch-Hit-source\">{props.title}</div>\n <ul {...props.getListProps({ source: props.collection.source })}>\n {props.collection.items.map((item, index) => {\n return <Result key={[props.title, item.objectID].join(':')} item={item} index={index} {...props} />;\n })}\n </ul>\n </section>\n );\n }\n\n return (\n <section className=\"DocSearch-Hits\">\n <div className=\"DocSearch-Hit-source\">{props.title}</div>\n\n <ul {...props.getListProps({ source: props.collection.source })}>\n {props.collection.items.map((item, index) => {\n return <Result key={[props.title, item.objectID].join(':')} item={item} index={index} {...props} />;\n })}\n </ul>\n </section>\n );\n}\n\ninterface ResultProps<TItem extends BaseItem> extends ResultsProps<TItem> {\n item: TItem;\n index: number;\n}\n\nfunction Result<TItem extends StoredDocSearchHit>({\n item,\n index,\n renderIcon,\n renderAction,\n getItemProps,\n onItemClick,\n collection,\n hitComponent,\n}: ResultProps<TItem>): JSX.Element {\n const [status, setStatus] = React.useState<'deleting' | 'favoriting' | 'idle'>('idle');\n\n const actionRef = React.useRef<(() => void) | null>(null);\n const Hit = hitComponent!;\n\n const runDeleteTransition = (cb: () => void): void => {\n setStatus('deleting');\n actionRef.current = cb;\n };\n\n const runFavoriteTransition = (cb: () => void): void => {\n setStatus('favoriting');\n actionRef.current = cb;\n };\n\n const handleAnimEnd = (): void => {\n actionRef.current?.();\n actionRef.current = null;\n };\n\n return (\n <li\n className={[\n 'DocSearch-Hit',\n (item as unknown as InternalDocSearchHit).__docsearch_parent && 'DocSearch-Hit--Child',\n status === 'favoriting' && 'DocSearch-Hit--favoriting',\n status === 'deleting' && 'DocSearch-Hit--deleting',\n ]\n .filter(Boolean)\n .join(' ')}\n onAnimationEnd={handleAnimEnd}\n {...getItemProps({\n item,\n source: collection.source,\n onClick(event) {\n onItemClick(item, event);\n },\n })}\n >\n <Hit hit={item}>\n <div className=\"DocSearch-Hit-Container\">\n {renderIcon({ item, index })}\n\n {item.hierarchy[item.type] && item.type === 'lvl1' && (\n <div className=\"DocSearch-Hit-content-wrapper\">\n <Snippet className=\"DocSearch-Hit-title\" hit={item} attribute=\"hierarchy.lvl1\" />\n {item.content && <Snippet className=\"DocSearch-Hit-path\" hit={item} attribute=\"content\" />}\n </div>\n )}\n\n {item.type === 'askAI' && (\n <div className=\"DocSearch-Hit-content-wrapper\">\n <Snippet className=\"DocSearch-Hit-title\" hit={item} attribute=\"hierarchy.lvl1\" />\n </div>\n )}\n\n {item.hierarchy[item.type] &&\n (item.type === 'lvl2' ||\n item.type === 'lvl3' ||\n item.type === 'lvl4' ||\n item.type === 'lvl5' ||\n item.type === 'lvl6') && (\n <div className=\"DocSearch-Hit-content-wrapper\">\n <Snippet className=\"DocSearch-Hit-title\" hit={item} attribute={`hierarchy.${item.type}`} />\n <Snippet className=\"DocSearch-Hit-path\" hit={item} attribute=\"hierarchy.lvl1\" />\n </div>\n )}\n\n {item.type === 'content' && (\n <div className=\"DocSearch-Hit-content-wrapper\">\n <Snippet className=\"DocSearch-Hit-title\" hit={item} attribute=\"content\" />\n <Snippet className=\"DocSearch-Hit-path\" hit={item} attribute=\"hierarchy.lvl1\" />\n </div>\n )}\n\n {renderAction({ item, runDeleteTransition, runFavoriteTransition })}\n </div>\n </Hit>\n </li>\n );\n}\n\ninterface AskAiButtonProps<TItem extends BaseItem> extends ResultsProps<TItem> {\n item: TItem;\n translations?: ResultsTranslations;\n}\n\nfunction AskAiButton<TItem extends StoredDocSearchHit>({\n item,\n getItemProps,\n onItemClick,\n translations,\n collection,\n}: AskAiButtonProps<TItem>): JSX.Element {\n const { askAiPlaceholder = 'Ask AI: ' } = translations || {};\n\n return (\n <li\n className=\"DocSearch-Hit\"\n {...getItemProps({\n item,\n source: collection.source,\n onClick(event) {\n onItemClick(item, event);\n },\n })}\n >\n <div className=\"DocSearch-Hit--AskAI\">\n <div className=\"DocSearch-Hit-AskAIButton DocSearch-Hit-Container\">\n <div className=\" DocSearch-Hit-AskAIButton-icon DocSearch-Hit-icon\">\n <SparklesIcon />\n </div>\n <div className=\"DocSearch-Hit-AskAIButton-title\">\n <span className=\"DocSearch-Hit-AskAIButton-title-highlight\">{askAiPlaceholder}</span>\n <mark className=\"DocSearch-Hit-AskAIButton-title-query\">{item.query || ''}</mark>\n </div>\n </div>\n </div>\n </li>\n );\n}\n","export function groupBy<TValue extends Record<string, unknown>>(\n values: TValue[],\n predicate: (value: TValue) => string,\n maxResultsPerGroup?: number,\n): Record<string, TValue[]> {\n return values.reduce<Record<string, TValue[]>>((acc, item) => {\n const key = predicate(item);\n\n if (!acc.hasOwnProperty(key)) {\n acc[key] = [];\n }\n\n // We limit each section to show 5 hits maximum.\n // This acts as a frontend alternative to `distinct`.\n if (acc[key].length < (maxResultsPerGroup || 5)) {\n acc[key].push(item);\n }\n\n return acc;\n }, {});\n}\n","export function identity<TParam>(x: TParam): TParam {\n return x;\n}\n","/**\n * Detect when an event is modified with a special key to let the browser\n * trigger its default behavior.\n */\nexport function isModifierEvent<TEvent extends KeyboardEvent | MouseEvent>(event: TEvent): boolean {\n const isMiddleClick = (event as MouseEvent).button === 1;\n\n return isMiddleClick || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;\n}\n","export function noop(..._args: any[]): void {}\n","import type { DocSearchHit, InternalDocSearchHit } from '../types';\n\nconst regexHighlightTags = /(<mark>|<\\/mark>)/g;\nconst regexHasHighlightTags = RegExp(regexHighlightTags.source);\n\nexport function removeHighlightTags(hit: DocSearchHit | InternalDocSearchHit): string {\n const internalDocSearchHit = hit as InternalDocSearchHit;\n\n if (!internalDocSearchHit.__docsearch_parent && !hit._highlightResult) {\n return hit.hierarchy.lvl0;\n }\n\n const lvl0 = internalDocSearchHit.__docsearch_parent\n ? internalDocSearchHit.__docsearch_parent?._highlightResult?.hierarchy?.lvl0\n : hit._highlightResult?.hierarchy?.lvl0;\n\n if (!lvl0) {\n return hit.hierarchy.lvl0;\n }\n\n return lvl0.value && regexHasHighlightTags.test(lvl0.value) ? lvl0.value.replace(regexHighlightTags, '') : lvl0.value;\n}\n","import React, { type JSX } from 'react';\n\nimport { SelectIcon, SourceIcon } from './icons';\nimport { Results } from './Results';\nimport type { ScreenStateProps } from './ScreenState';\nimport type { InternalDocSearchHit } from './types';\nimport { removeHighlightTags } from './utils';\n\nexport type ResultsScreenTranslations = Partial<{\n askAiPlaceholder: string;\n}>;\n\ntype ResultsScreenProps = Omit<ScreenStateProps<InternalDocSearchHit>, 'translations'> & {\n translations?: ResultsScreenTranslations;\n};\n\nexport function ResultsScreen({ translations = {}, ...props }: ResultsScreenProps): JSX.Element {\n return (\n <div className=\"DocSearch-Dropdown-Container\">\n {props.state.collections.map((collection) => {\n if (collection.items.length === 0) {\n return null;\n }\n\n const title = removeHighlightTags(collection.items[0]);\n\n return (\n <Results\n {...props}\n key={collection.source.sourceId}\n translations={translations}\n title={title}\n collection={collection}\n renderIcon={({ item, index }) => (\n <>\n {item.__docsearch_parent && (\n <svg className=\"DocSearch-Hit-Tree\" viewBox=\"0 0 24 54\">\n <g\n stroke=\"currentColor\"\n fill=\"none\"\n fillRule=\"evenodd\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n {item.__docsearch_parent !== collection.items[index + 1]?.__docsearch_parent ? (\n <path d=\"M8 6v21M20 27H8.3\" />\n ) : (\n <path d=\"M8 6v42M20 27H8.3\" />\n )}\n </g>\n </svg>\n )}\n\n <div className=\"DocSearch-Hit-icon\">\n <SourceIcon type={item.type} />\n </div>\n </>\n )}\n renderAction={() => (\n <div className=\"DocSearch-Hit-action\">\n <SelectIcon />\n </div>\n )}\n />\n );\n })}\n\n {props.resultsFooterComponent && (\n <section className=\"DocSearch-HitsFooter\">\n <props.resultsFooterComponent state={props.state} />\n </section>\n )}\n </div>\n );\n}\n","import React, { type JSX } from 'react';\n\nimport { RecentIcon, CloseIcon, StarIcon, SparklesIcon } from './icons';\nimport { Results } from './Results';\nimport type { ScreenStateProps } from './ScreenState';\nimport type { InternalDocSearchHit } from './types';\n\nexport type StartScreenTranslations = Partial<{\n recentSearchesTitle: string;\n noRecentSearchesText: string;\n saveRecentSearchButtonTitle: string;\n removeRecentSearchButtonTitle: string;\n favoriteSearchesTitle: string;\n removeFavoriteSearchButtonTitle: string;\n recentConversationsTitle: string;\n removeRecentConversationButtonTitle: string;\n}>;\n\ntype StartScreenProps = Omit<ScreenStateProps<InternalDocSearchHit>, 'translations'> & {\n hasCollections: boolean;\n translations?: StartScreenTranslations;\n};\n\nexport function StartScreen({ translations = {}, ...props }: StartScreenProps): JSX.Element | null {\n const {\n recentSearchesTitle = 'Recent',\n saveRecentSearchButtonTitle = 'Save this search',\n removeRecentSearchButtonTitle = 'Remove this search from history',\n favoriteSearchesTitle = 'Favorite',\n removeFavoriteSearchButtonTitle = 'Remove this search from favorites',\n recentConversationsTitle = 'Recent conversations',\n removeRecentConversationButtonTitle = 'Remove this conversation from history',\n } = translations;\n\n return (\n <div className=\"DocSearch-Dropdown-Container\">\n <Results\n {...props}\n title={recentSearchesTitle}\n collection={props.state.collections[0]}\n renderIcon={() => (\n <div className=\"DocSearch-Hit-icon\">\n <RecentIcon />\n </div>\n )}\n renderAction={({ item, runFavoriteTransition, runDeleteTransition }) => (\n <>\n <div className=\"DocSearch-Hit-action\">\n <button\n className=\"DocSearch-Hit-action-button\"\n title={saveRecentSearchButtonTitle}\n type=\"submit\"\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n runFavoriteTransition(() => {\n props.favoriteSearches.add(item);\n props.recentSearches.remove(item);\n props.refresh();\n });\n }}\n >\n <StarIcon />\n </button>\n </div>\n <div className=\"DocSearch-Hit-action\">\n <button\n className=\"DocSearch-Hit-action-button\"\n title={removeRecentSearchButtonTitle}\n type=\"submit\"\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n runDeleteTransition(() => {\n props.recentSearches.remove(item);\n props.refresh();\n });\n }}\n >\n <CloseIcon />\n </button>\n </div>\n </>\n )}\n />\n\n <Results\n {...props}\n title={favoriteSearchesTitle}\n collection={props.state.collections[1]}\n renderIcon={() => (\n <div className=\"DocSearch-Hit-icon\">\n <StarIcon />\n </div>\n )}\n renderAction={({ item, runDeleteTransition }) => (\n <div className=\"DocSearch-Hit-action\">\n <button\n className=\"DocSearch-Hit-action-button\"\n title={removeFavoriteSearchButtonTitle}\n type=\"submit\"\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n runDeleteTransition(() => {\n props.favoriteSearches.remove(item);\n props.refresh();\n });\n }}\n >\n <CloseIcon />\n </button>\n </div>\n )}\n />\n\n <Results\n {...props}\n title={recentConversationsTitle}\n collection={props.state.collections[2]}\n renderIcon={() => (\n <div className=\"DocSearch-Hit-icon\">\n <SparklesIcon />\n </div>\n )}\n renderAction={({ item, runDeleteTransition }) => (\n <div className=\"DocSearch-Hit-action\">\n <button\n className=\"DocSearch-Hit-action-button\"\n title={removeRecentConversationButtonTitle}\n type=\"submit\"\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n runDeleteTransition(() => {\n props.conversations.remove(item);\n props.refresh();\n });\n }}\n >\n <CloseIcon />\n </button>\n </div>\n )}\n />\n </div>\n );\n}\n","import type { UseChatHelpers } from '@ai-sdk/react';\nimport type { AutocompleteApi, AutocompleteState, BaseItem } from '@algolia/autocomplete-core';\nimport React from 'react';\n\nimport type { AskAiScreenTranslations } from './AskAiScreen';\nimport { AskAiScreen } from './AskAiScreen';\nimport type { DocSearchProps } from './DocSearch';\nimport type { ErrorScreenTranslations } from './ErrorScreen';\nimport { ErrorScreen } from './ErrorScreen';\nimport type { NoResultsScreenTranslations } from './NoResultsScreen';\nimport { NoResultsScreen } from './NoResultsScreen';\nimport type { ResultsScreenTranslations } from './ResultsScreen';\nimport { ResultsScreen } from './ResultsScreen';\nimport type { StartScreenTranslations } from './StartScreen';\nimport { StartScreen } from './StartScreen';\nimport type { StoredSearchPlugin } from './stored-searches';\nimport type { InternalDocSearchHit, StoredAskAiState, StoredDocSearchHit } from './types';\n\nexport type ScreenStateTranslations = Partial<{\n errorScreen: ErrorScreenTranslations;\n startScreen: StartScreenTranslations;\n noResultsScreen: NoResultsScreenTranslations;\n resultsScreen: ResultsScreenTranslations;\n askAiScreen: AskAiScreenTranslations;\n}>;\n\nexport interface ScreenStateProps<TItem extends BaseItem>\n extends AutocompleteApi<TItem, React.FormEvent, React.MouseEvent, React.KeyboardEvent> {\n state: AutocompleteState<TItem>;\n recentSearches: StoredSearchPlugin<StoredDocSearchHit>;\n favoriteSearches: StoredSearchPlugin<StoredDocSearchHit>;\n conversations: StoredSearchPlugin<StoredAskAiState>;\n onItemClick: (item: InternalDocSearchHit, event: KeyboardEvent | MouseEvent) => void;\n onAskAiToggle: (toggle: boolean) => void;\n isAskAiActive: boolean;\n canHandleAskAi: boolean;\n inputRef: React.MutableRefObject<HTMLInputElement | null>;\n hitComponent: DocSearchProps['hitComponent'];\n indexName: DocSearchProps['indexName'];\n messages: UseChatHelpers['messages'];\n status: UseChatHelpers['status'];\n askAiStreamError: Error | null;\n askAiFetchError: Error | undefined;\n disableUserPersonalization: boolean;\n resultsFooterComponent: DocSearchProps['resultsFooterComponent'];\n translations: ScreenStateTranslations;\n getMissingResultsUrl?: DocSearchProps['getMissingResultsUrl'];\n hasCollections: boolean;\n onFeedback?: (messageId: string, thumbs: 0 | 1) => Promise<void>;\n}\n\nexport const ScreenState = React.memo(\n ({ translations = {}, ...props }: ScreenStateProps<InternalDocSearchHit>) => {\n if (props.isAskAiActive && props.canHandleAskAi) {\n return (\n <AskAiScreen\n {...props}\n messages={props.messages}\n status={props.status}\n askAiStreamError={props.askAiStreamError}\n askAiFetchError={props.askAiFetchError}\n translations={translations?.askAiScreen}\n />\n );\n }\n\n if (props.state?.status === 'error') {\n return <ErrorScreen translations={translations?.errorScreen} />;\n }\n\n if (!props.state.query) {\n return <StartScreen {...props} hasCollections={props.hasCollections} translations={translations?.startScreen} />;\n }\n\n if (!props.hasCollections && !props.canHandleAskAi) {\n return <NoResultsScreen {...props} translations={translations?.noResultsScreen} />;\n }\n\n return (\n <>\n <ResultsScreen {...props} translations={translations?.resultsScreen} />\n {props.canHandleAskAi && props.state.collections.length === 1 && (\n // if there's one collection it is the ask ai action, show the no results screen\n <NoResultsScreen {...props} translations={translations?.noResultsScreen} />\n )}\n </>\n );\n },\n function areEqual(_prevProps, nextProps) {\n // We don't update the screen when Autocomplete is loading or stalled to\n // avoid UI flashes:\n // - Empty screen → Results screen\n // - NoResults screen → NoResults screen with another query\n return nextProps.state.status === 'loading' || nextProps.state.status === 'stalled';\n },\n);\n","import React, { type JSX } from 'react';\n\ninterface BackIconProps {\n size?: number;\n color?: string;\n}\n\nexport function BackIcon({ size = 20, color = 'currentColor' }: BackIconProps): JSX.Element {\n return (\n <svg\n width={size}\n height={size}\n className=\"DocSearch-Back-Icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={color}\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"m12 19-7-7 7-7\" />\n <path d=\"M19 12H5\" />\n </svg>\n );\n}\n","import type { UseChatHelpers } from '@ai-sdk/react';\nimport type { AutocompleteApi, AutocompleteState } from '@algolia/autocomplete-core';\nimport React, { type JSX, type RefObject } from 'react';\n\nimport { MAX_QUERY_SIZE } from './constants';\nimport { LoadingIcon, CloseIcon, SearchIcon, SparklesIcon } from './icons';\nimport { BackIcon } from './icons/BackIcon';\nimport type { InternalDocSearchHit } from './types';\n\nexport type SearchBoxTranslations = Partial<{\n clearButtonTitle: string;\n clearButtonAriaLabel: string;\n closeButtonText: string;\n closeButtonAriaLabel: string;\n placeholderText: string;\n placeholderTextAskAi: string;\n placeholderTextAskAiStreaming: string;\n enterKeyHint: string;\n enterKeyHintAskAi: string;\n searchInputLabel: string;\n backToKeywordSearchButtonText: string;\n backToKeywordSearchButtonAriaLabel: string;\n}>;\n\ninterface SearchBoxProps\n extends AutocompleteApi<InternalDocSearchHit, React.FormEvent, React.MouseEvent, React.KeyboardEvent> {\n state: AutocompleteState<InternalDocSearchHit>;\n autoFocus: boolean;\n inputRef: RefObject<HTMLInputElement | null>;\n onClose: () => void;\n onAskAiToggle: (toggle: boolean) => void;\n onAskAgain: (query: string) => void;\n placeholder: string;\n isAskAiActive: boolean;\n askAiStatus: UseChatHelpers['status'];\n isFromSelection: boolean;\n translations?: SearchBoxTranslations;\n}\n\nexport function SearchBox({ translations = {}, ...props }: SearchBoxProps): JSX.Element {\n const {\n clearButtonTitle = 'Clear',\n clearButtonAriaLabel = 'Clear the query',\n closeButtonText = 'Close',\n closeButtonAriaLabel = 'Close',\n searchInputLabel = 'Search',\n backToKeywordSearchButtonText = 'Back to keyword search',\n backToKeywordSearchButtonAriaLabel = 'Back to keyword search',\n placeholderTextAskAiStreaming = 'Answering...',\n } = translations;\n const { onReset } = props.getFormProps({\n inputElement: props.inputRef.current,\n });\n\n React.useEffect(() => {\n if (props.autoFocus && props.inputRef.current) {\n props.inputRef.current.focus();\n }\n }, [props.autoFocus, props.inputRef]);\n\n React.useEffect(() => {\n if (props.isFromSelection && props.inputRef.current) {\n props.inputRef.current.select();\n }\n }, [props.isFromSelection, props.inputRef]);\n\n const baseInputProps = props.getInputProps({\n inputElement: props.inputRef.current!,\n autoFocus: props.autoFocus,\n maxLength: MAX_QUERY_SIZE,\n });\n\n const blockedKeys = new Set(['ArrowUp', 'ArrowDown', 'Enter']);\n const origOnKeyDown = baseInputProps.onKeyDown;\n const origOnChange = baseInputProps.onChange;\n const isAskAiStreaming = props.askAiStatus === 'streaming' || props.askAiStatus === 'submitted';\n const isKeywordSearchLoading = props.state.status === 'stalled';\n\n // when returning to another status than streaming or submitted, we focus on the input\n React.useEffect(() => {\n if (props.askAiStatus !== 'streaming' && props.askAiStatus !== 'submitted' && props.inputRef.current) {\n props.inputRef.current.focus();\n }\n }, [props.askAiStatus, props.inputRef]);\n\n /**\n * We need to block the default behavior of the input when AskAI is active.\n * This is because the input is used to ask another question when the user presses enter.\n *\n * Learn more on default autocomplete behavior:\n * https://github.com/algolia/autocomplete/blob/next/packages/autocomplete-core/src/getDefaultProps.ts.\n */\n const inputProps = {\n ...baseInputProps,\n enterKeyHint: props.isAskAiActive ? ('enter' as const) : ('search' as const),\n onKeyDown: (e: React.KeyboardEvent<HTMLInputElement>): void => {\n // block these up, down, enter listeners when AskAI is active\n if (props.isAskAiActive && blockedKeys.has(e.key)) {\n // enter key asks another question\n if (e.key === 'Enter' && !isAskAiStreaming && props.state.query) {\n props.onAskAgain(props.state.query);\n }\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n origOnKeyDown?.(e);\n },\n onChange: (e: React.ChangeEvent<HTMLInputElement>): void => {\n if (props.isAskAiActive) {\n props.setQuery(e.currentTarget.value);\n // block search when AskAI is active\n // we don't want to trigger the search when the user types\n // we already know they are asking a question\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n origOnChange?.(e);\n },\n disabled: isAskAiStreaming,\n };\n\n return (\n <>\n <form\n className=\"DocSearch-Form\"\n onSubmit={(event) => {\n event.preventDefault();\n }}\n onReset={onReset}\n >\n {props.isAskAiActive ? (\n <>\n <button\n type=\"button\"\n tabIndex={0}\n className=\"DocSearch-AskAi-Return\"\n title={backToKeywordSearchButtonText}\n aria-label={backToKeywordSearchButtonAriaLabel}\n onClick={() => props.onAskAiToggle(false)}\n >\n <BackIcon />\n </button>\n </>\n ) : (\n <>\n {isKeywordSearchLoading && (\n <div className=\"DocSearch-LoadingIndicator\">\n <LoadingIcon />\n </div>\n )}\n {!isKeywordSearchLoading && (\n <label className=\"DocSearch-MagnifierLabel\" {...props.getLabelProps()}>\n <SearchIcon />\n <span className=\"DocSearch-VisuallyHiddenForAccessibility\">{searchInputLabel}</span>\n </label>\n )}\n </>\n )}\n\n <input\n className=\"DocSearch-Input\"\n ref={props.inputRef}\n {...inputProps}\n placeholder={isAskAiStreaming ? placeholderTextAskAiStreaming : props.placeholder}\n />\n\n <div className=\"DocSearch-Actions\">\n {isAskAiStreaming && (\n <button type=\"button\" className=\"DocSearch-StreamingIndicator\" onClick={() => props.onAskAiToggle(true)}>\n <SparklesIcon />\n </button>\n )}\n\n <button\n className=\"DocSearch-Clear\"\n type=\"reset\"\n aria-label={clearButtonAriaLabel}\n hidden={!props.state.query}\n tabIndex={props.state.query ? 0 : -1}\n aria-hidden={!props.state.query ? 'true' : 'false'}\n >\n {clearButtonTitle}\n </button>\n\n {(isAskAiStreaming || props.state.query) && <div className=\"DocSearch-Divider\" />}\n\n <button\n type=\"button\"\n title={closeButtonText}\n className=\"DocSearch-Close\"\n aria-label={closeButtonAriaLabel}\n onClick={props.onClose}\n >\n <CloseIcon />\n </button>\n </div>\n </form>\n </>\n );\n}\n","/**\n * Checks if local storage is available and usable.\n */\nexport function isLocalStorageSupported(): boolean {\n const key = '__TEST_KEY__';\n try {\n localStorage.setItem(key, '');\n localStorage.removeItem(key);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Creates a simple storage interface for arrays using localstorage.\n * Provides basic getitem and setitem functionality.\n * Falls back to a no-op implementation if localstorage is not supported..\n *\n * @template titem The type of items to store.\n * @param key - The localstorage key to use.\n * @returns An object with setitem and getitem methods.\n */\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nexport function createStorage<TItem>(key: string) {\n if (isLocalStorageSupported() === false) {\n return {\n setItem(): void {},\n getItem(): TItem[] {\n return [];\n },\n };\n }\n\n return {\n setItem(item: TItem[]): void {\n return window.localStorage.setItem(key, JSON.stringify(item));\n },\n getItem(): TItem[] {\n const item = window.localStorage.getItem(key);\n return item ? JSON.parse(item) : [];\n },\n };\n}\n\n/**\n * Creates a simple storage interface for a single object using localstorage.\n * Provides basic getitem, setitem, and removeitem functionality.\n * Falls back to a no-op implementation if localstorage is not supported.\n *\n * @template titem The type of the object to store.\n * @param key - The localstorage key to use.\n * @returns An object with setitem, getitem, and removeitem methods.\n */\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nexport function createObjectStorage<TItem>(key: string) {\n if (isLocalStorageSupported() === false) {\n return {\n setItem(_item: TItem | null): void {},\n getItem(): TItem | null {\n return null;\n },\n removeItem(): void {},\n };\n }\n\n return {\n setItem(item: TItem | null): void {\n if (item === null) {\n window.localStorage.removeItem(key);\n } else {\n window.localStorage.setItem(key, JSON.stringify(item));\n }\n },\n getItem(): TItem | null {\n const item = window.localStorage.getItem(key);\n try {\n return item ? (JSON.parse(item) as TItem) : null;\n } catch {\n // handle potential JSON parsing errors, e.g., corrupted data\n window.localStorage.removeItem(key); // clear corrupted data\n return null;\n }\n },\n removeItem(): void {\n window.localStorage.removeItem(key);\n },\n };\n}\n","import type { DocSearchHit, StoredAskAiState, StoredDocSearchHit, StoredAskAiMessage } from './types';\nimport { createStorage } from './utils/storage';\n\ntype CreateStoredSearchesOptions = {\n key: string;\n limit?: number;\n};\n\nexport type StoredSearchPlugin<TItem> = {\n add: (item: TItem) => void;\n remove: (item: TItem) => void;\n getAll: () => TItem[];\n addFeedback?: (messageId: string, feedback: 'dislike' | 'like') => void;\n getOne?: (messageId: string) => StoredAskAiMessage | undefined;\n};\n\nexport function createStoredSearches<TItem extends StoredDocSearchHit>({\n key,\n limit = 5,\n}: CreateStoredSearchesOptions): StoredSearchPlugin<TItem> {\n const storage = createStorage<TItem>(key);\n let items = storage.getItem().slice(0, limit);\n\n return {\n add(item: TItem): void {\n const { _highlightResult, _snippetResult, ...hit } = item as unknown as DocSearchHit;\n\n const isQueryAlreadySaved = items.findIndex((x) => x.objectID === hit.objectID);\n\n if (isQueryAlreadySaved > -1) {\n items.splice(isQueryAlreadySaved, 1);\n }\n\n items.unshift(hit as TItem);\n items = items.slice(0, limit);\n\n storage.setItem(items);\n },\n remove(item: TItem): void {\n items = items.filter((x) => x.objectID !== item.objectID);\n\n storage.setItem(items);\n },\n getAll(): TItem[] {\n return items;\n },\n };\n}\n\nexport function createStoredConversations<TItem extends StoredAskAiState>({\n key,\n limit = 5,\n}: CreateStoredSearchesOptions): StoredSearchPlugin<TItem> {\n const storage = createStorage<TItem>(key);\n let items = storage.getItem().slice(0, limit);\n\n return {\n add(item: TItem): void {\n const { objectID, messages } = item;\n\n // check if this query is already saved\n const isQueryAlreadySaved = items.findIndex(\n (x) => x.objectID === objectID || x.messages?.[0]?.content === messages?.[0]?.content,\n );\n\n if (isQueryAlreadySaved > -1) {\n items[isQueryAlreadySaved] = item;\n } else {\n items.unshift(item);\n items = items.slice(0, limit);\n }\n\n storage.setItem(items);\n },\n /** Record feedback (like/dislike) for a given message id within stored conversations. */\n addFeedback(messageId: string, feedback: 'dislike' | 'like'): void {\n const conv = items.find((c) => c.messages?.some((m) => m.id === messageId));\n if (!conv || !conv.messages) return;\n\n const msg = conv.messages.find((m) => m.id === messageId);\n if (!msg) return;\n\n (msg as any).feedback = feedback;\n\n storage.setItem(items);\n },\n getOne(messageId: string): StoredAskAiMessage | undefined {\n const conv = items.find((c) => c.messages?.some((m) => m.id === messageId));\n return conv?.messages?.find((m) => m.id === messageId);\n },\n getAll(): TItem[] {\n return items;\n },\n remove(item: TItem): void {\n items = items.filter((x) => x.objectID !== item.objectID);\n\n storage.setItem(items);\n },\n };\n}\n","// src/cache/createBrowserLocalStorageCache.ts\nfunction createBrowserLocalStorageCache(options) {\n let storage;\n const namespaceKey = `algolia-client-js-${options.key}`;\n function getStorage() {\n if (storage === void 0) {\n storage = options.localStorage || window.localStorage;\n }\n return storage;\n }\n function getNamespace() {\n return JSON.parse(getStorage().getItem(namespaceKey) || \"{}\");\n }\n function setNamespace(namespace) {\n getStorage().setItem(namespaceKey, JSON.stringify(namespace));\n }\n function removeOutdatedCacheItems() {\n const timeToLive = options.timeToLive ? options.timeToLive * 1e3 : null;\n const namespace = getNamespace();\n const filteredNamespaceWithoutOldFormattedCacheItems = Object.fromEntries(\n Object.entries(namespace).filter(([, cacheItem]) => {\n return cacheItem.timestamp !== void 0;\n })\n );\n setNamespace(filteredNamespaceWithoutOldFormattedCacheItems);\n if (!timeToLive) {\n return;\n }\n const filteredNamespaceWithoutExpiredItems = Object.fromEntries(\n Object.entries(filteredNamespaceWithoutOldFormattedCacheItems).filter(([, cacheItem]) => {\n const currentTimestamp = (/* @__PURE__ */ new Date()).getTime();\n const isExpired = cacheItem.timestamp + timeToLive < currentTimestamp;\n return !isExpired;\n })\n );\n setNamespace(filteredNamespaceWithoutExpiredItems);\n }\n return {\n get(key, defaultValue, events = {\n miss: () => Promise.resolve()\n }) {\n return Promise.resolve().then(() => {\n removeOutdatedCacheItems();\n return getNamespace()[JSON.stringify(key)];\n }).then((value) => {\n return Promise.all([value ? value.value : defaultValue(), value !== void 0]);\n }).then(([value, exists]) => {\n return Promise.all([value, exists || events.miss(value)]);\n }).then(([value]) => value);\n },\n set(key, value) {\n return Promise.resolve().then(() => {\n const namespace = getNamespace();\n namespace[JSON.stringify(key)] = {\n timestamp: (/* @__PURE__ */ new Date()).getTime(),\n value\n };\n getStorage().setItem(namespaceKey, JSON.stringify(namespace));\n return value;\n });\n },\n delete(key) {\n return Promise.resolve().then(() => {\n const namespace = getNamespace();\n delete namespace[JSON.stringify(key)];\n getStorage().setItem(namespaceKey, JSON.stringify(namespace));\n });\n },\n clear() {\n return Promise.resolve().then(() => {\n getStorage().removeItem(namespaceKey);\n });\n }\n };\n}\n\n// src/cache/createNullCache.ts\nfunction createNullCache() {\n return {\n get(_key, defaultValue, events = {\n miss: () => Promise.resolve()\n }) {\n const value = defaultValue();\n return value.then((result) => Promise.all([result, events.miss(result)])).then(([result]) => result);\n },\n set(_key, value) {\n return Promise.resolve(value);\n },\n delete(_key) {\n return Promise.resolve();\n },\n clear() {\n return Promise.resolve();\n }\n };\n}\n\n// src/cache/createFallbackableCache.ts\nfunction createFallbackableCache(options) {\n const caches = [...options.caches];\n const current = caches.shift();\n if (current === void 0) {\n return createNullCache();\n }\n return {\n get(key, defaultValue, events = {\n miss: () => Promise.resolve()\n }) {\n return current.get(key, defaultValue, events).catch(() => {\n return createFallbackableCache({ caches }).get(key, defaultValue, events);\n });\n },\n set(key, value) {\n return current.set(key, value).catch(() => {\n return createFallbackableCache({ caches }).set(key, value);\n });\n },\n delete(key) {\n return current.delete(key).catch(() => {\n return createFallbackableCache({ caches }).delete(key);\n });\n },\n clear() {\n return current.clear().catch(() => {\n return createFallbackableCache({ caches }).clear();\n });\n }\n };\n}\n\n// src/cache/createMemoryCache.ts\nfunction createMemoryCache(options = { serializable: true }) {\n let cache = {};\n return {\n get(key, defaultValue, events = {\n miss: () => Promise.resolve()\n }) {\n const keyAsString = JSON.stringify(key);\n if (keyAsString in cache) {\n return Promise.resolve(options.serializable ? JSON.parse(cache[keyAsString]) : cache[keyAsString]);\n }\n const promise = defaultValue();\n return promise.then((value) => events.miss(value)).then(() => promise);\n },\n set(key, value) {\n cache[JSON.stringify(key)] = options.serializable ? JSON.stringify(value) : value;\n return Promise.resolve(value);\n },\n delete(key) {\n delete cache[JSON.stringify(key)];\n return Promise.resolve();\n },\n clear() {\n cache = {};\n return Promise.resolve();\n }\n };\n}\n\n// src/constants.ts\nvar DEFAULT_CONNECT_TIMEOUT_BROWSER = 1e3;\nvar DEFAULT_READ_TIMEOUT_BROWSER = 2e3;\nvar DEFAULT_WRITE_TIMEOUT_BROWSER = 3e4;\nvar DEFAULT_CONNECT_TIMEOUT_NODE = 2e3;\nvar DEFAULT_READ_TIMEOUT_NODE = 5e3;\nvar DEFAULT_WRITE_TIMEOUT_NODE = 3e4;\n\n// src/createAlgoliaAgent.ts\nfunction createAlgoliaAgent(version) {\n const algoliaAgent = {\n value: `Algolia for JavaScript (${version})`,\n add(options) {\n const addedAlgoliaAgent = `; ${options.segment}${options.version !== void 0 ? ` (${options.version})` : \"\"}`;\n if (algoliaAgent.value.indexOf(addedAlgoliaAgent) === -1) {\n algoliaAgent.value = `${algoliaAgent.value}${addedAlgoliaAgent}`;\n }\n return algoliaAgent;\n }\n };\n return algoliaAgent;\n}\n\n// src/createAuth.ts\nfunction createAuth(appId, apiKey, authMode = \"WithinHeaders\") {\n const credentials = {\n \"x-algolia-api-key\": apiKey,\n \"x-algolia-application-id\": appId\n };\n return {\n headers() {\n return authMode === \"WithinHeaders\" ? credentials : {};\n },\n queryParameters() {\n return authMode === \"WithinQueryParameters\" ? credentials : {};\n }\n };\n}\n\n// src/createIterablePromise.ts\nfunction createIterablePromise({\n func,\n validate,\n aggregator,\n error,\n timeout = () => 0\n}) {\n const retry = (previousResponse) => {\n return new Promise((resolve, reject) => {\n func(previousResponse).then(async (response) => {\n if (aggregator) {\n await aggregator(response);\n }\n if (await validate(response)) {\n return resolve(response);\n }\n if (error && await error.validate(response)) {\n return reject(new Error(await error.message(response)));\n }\n return setTimeout(\n () => {\n retry(response).then(resolve).catch(reject);\n },\n await timeout()\n );\n }).catch((err) => {\n reject(err);\n });\n });\n };\n return retry();\n}\n\n// src/getAlgoliaAgent.ts\nfunction getAlgoliaAgent({ algoliaAgents, client, version }) {\n const defaultAlgoliaAgent = createAlgoliaAgent(version).add({\n segment: client,\n version\n });\n algoliaAgents.forEach((algoliaAgent) => defaultAlgoliaAgent.add(algoliaAgent));\n return defaultAlgoliaAgent;\n}\n\n// src/logger/createNullLogger.ts\nfunction createNullLogger() {\n return {\n debug(_message, _args) {\n return Promise.resolve();\n },\n info(_message, _args) {\n return Promise.resolve();\n },\n error(_message, _args) {\n return Promise.resolve();\n }\n };\n}\n\n// src/transporter/createStatefulHost.ts\nvar EXPIRATION_DELAY = 2 * 60 * 1e3;\nfunction createStatefulHost(host, status = \"up\") {\n const lastUpdate = Date.now();\n function isUp() {\n return status === \"up\" || Date.now() - lastUpdate > EXPIRATION_DELAY;\n }\n function isTimedOut() {\n return status === \"timed out\" && Date.now() - lastUpdate <= EXPIRATION_DELAY;\n }\n return { ...host, status, lastUpdate, isUp, isTimedOut };\n}\n\n// src/transporter/errors.ts\nvar AlgoliaError = class extends Error {\n name = \"AlgoliaError\";\n constructor(message, name) {\n super(message);\n if (name) {\n this.name = name;\n }\n }\n};\nvar IndexNotFoundError = class extends AlgoliaError {\n constructor(indexName) {\n super(`${indexName} does not exist`, \"IndexNotFoundError\");\n }\n};\nvar IndicesInSameAppError = class extends AlgoliaError {\n constructor() {\n super(\"Indices are in the same application. Use operationIndex instead.\", \"IndicesInSameAppError\");\n }\n};\nvar IndexAlreadyExistsError = class extends AlgoliaError {\n constructor(indexName) {\n super(`${indexName} index already exists.`, \"IndexAlreadyExistsError\");\n }\n};\nvar ErrorWithStackTrace = class extends AlgoliaError {\n stackTrace;\n constructor(message, stackTrace, name) {\n super(message, name);\n this.stackTrace = stackTrace;\n }\n};\nvar RetryError = class extends ErrorWithStackTrace {\n constructor(stackTrace) {\n super(\n \"Unreachable hosts - your application id may be incorrect. If the error persists, please reach out to the Algolia Support team: https://alg.li/support.\",\n stackTrace,\n \"RetryError\"\n );\n }\n};\nvar ApiError = class extends ErrorWithStackTrace {\n status;\n constructor(message, status, stackTrace, name = \"ApiError\") {\n super(message, stackTrace, name);\n this.status = status;\n }\n};\nvar DeserializationError = class extends AlgoliaError {\n response;\n constructor(message, response) {\n super(message, \"DeserializationError\");\n this.response = response;\n }\n};\nvar DetailedApiError = class extends ApiError {\n error;\n constructor(message, status, error, stackTrace) {\n super(message, status, stackTrace, \"DetailedApiError\");\n this.error = error;\n }\n};\n\n// src/transporter/helpers.ts\nfunction shuffle(array) {\n const shuffledArray = array;\n for (let c = array.length - 1; c > 0; c--) {\n const b = Math.floor(Math.random() * (c + 1));\n const a = array[c];\n shuffledArray[c] = array[b];\n shuffledArray[b] = a;\n }\n return shuffledArray;\n}\nfunction serializeUrl(host, path, queryParameters) {\n const queryParametersAsString = serializeQueryParameters(queryParameters);\n let url = `${host.protocol}://${host.url}${host.port ? `:${host.port}` : \"\"}/${path.charAt(0) === \"/\" ? path.substring(1) : path}`;\n if (queryParametersAsString.length) {\n url += `?${queryParametersAsString}`;\n }\n return url;\n}\nfunction serializeQueryParameters(parameters) {\n return Object.keys(parameters).filter((key) => parameters[key] !== void 0).sort().map(\n (key) => `${key}=${encodeURIComponent(\n Object.prototype.toString.call(parameters[key]) === \"[object Array]\" ? parameters[key].join(\",\") : parameters[key]\n ).replace(/\\+/g, \"%20\")}`\n ).join(\"&\");\n}\nfunction serializeData(request, requestOptions) {\n if (request.method === \"GET\" || request.data === void 0 && requestOptions.data === void 0) {\n return void 0;\n }\n const data = Array.isArray(request.data) ? request.data : { ...request.data, ...requestOptions.data };\n return JSON.stringify(data);\n}\nfunction serializeHeaders(baseHeaders, requestHeaders, requestOptionsHeaders) {\n const headers = {\n Accept: \"application/json\",\n ...baseHeaders,\n ...requestHeaders,\n ...requestOptionsHeaders\n };\n const serializedHeaders = {};\n Object.keys(headers).forEach((header) => {\n const value = headers[header];\n serializedHeaders[header.toLowerCase()] = value;\n });\n return serializedHeaders;\n}\nfunction deserializeSuccess(response) {\n try {\n return JSON.parse(response.content);\n } catch (e) {\n throw new DeserializationError(e.message, response);\n }\n}\nfunction deserializeFailure({ content, status }, stackFrame) {\n try {\n const parsed = JSON.parse(content);\n if (\"error\" in parsed) {\n return new DetailedApiError(parsed.message, status, parsed.error, stackFrame);\n }\n return new ApiError(parsed.message, status, stackFrame);\n } catch {\n }\n return new ApiError(content, status, stackFrame);\n}\n\n// src/transporter/responses.ts\nfunction isNetworkError({ isTimedOut, status }) {\n return !isTimedOut && ~~status === 0;\n}\nfunction isRetryable({ isTimedOut, status }) {\n return isTimedOut || isNetworkError({ isTimedOut, status }) || ~~(status / 100) !== 2 && ~~(status / 100) !== 4;\n}\nfunction isSuccess({ status }) {\n return ~~(status / 100) === 2;\n}\n\n// src/transporter/stackTrace.ts\nfunction stackTraceWithoutCredentials(stackTrace) {\n return stackTrace.map((stackFrame) => stackFrameWithoutCredentials(stackFrame));\n}\nfunction stackFrameWithoutCredentials(stackFrame) {\n const modifiedHeaders = stackFrame.request.headers[\"x-algolia-api-key\"] ? { \"x-algolia-api-key\": \"*****\" } : {};\n return {\n ...stackFrame,\n request: {\n ...stackFrame.request,\n headers: {\n ...stackFrame.request.headers,\n ...modifiedHeaders\n }\n }\n };\n}\n\n// src/transporter/createTransporter.ts\nfunction createTransporter({\n hosts,\n hostsCache,\n baseHeaders,\n logger,\n baseQueryParameters,\n algoliaAgent,\n timeouts,\n requester,\n requestsCache,\n responsesCache\n}) {\n async function createRetryableOptions(compatibleHosts) {\n const statefulHosts = await Promise.all(\n compatibleHosts.map((compatibleHost) => {\n return hostsCache.get(compatibleHost, () => {\n return Promise.resolve(createStatefulHost(compatibleHost));\n });\n })\n );\n const hostsUp = statefulHosts.filter((host) => host.isUp());\n const hostsTimedOut = statefulHosts.filter((host) => host.isTimedOut());\n const hostsAvailable = [...hostsUp, ...hostsTimedOut];\n const compatibleHostsAvailable = hostsAvailable.length > 0 ? hostsAvailable : compatibleHosts;\n return {\n hosts: compatibleHostsAvailable,\n getTimeout(timeoutsCount, baseTimeout) {\n const timeoutMultiplier = hostsTimedOut.length === 0 && timeoutsCount === 0 ? 1 : hostsTimedOut.length + 3 + timeoutsCount;\n return timeoutMultiplier * baseTimeout;\n }\n };\n }\n async function retryableRequest(request, requestOptions, isRead = true) {\n const stackTrace = [];\n const data = serializeData(request, requestOptions);\n const headers = serializeHeaders(baseHeaders, request.headers, requestOptions.headers);\n const dataQueryParameters = request.method === \"GET\" ? {\n ...request.data,\n ...requestOptions.data\n } : {};\n const queryParameters = {\n ...baseQueryParameters,\n ...request.queryParameters,\n ...dataQueryParameters\n };\n if (algoliaAgent.value) {\n queryParameters[\"x-algolia-agent\"] = algoliaAgent.value;\n }\n if (requestOptions && requestOptions.queryParameters) {\n for (const key of Object.keys(requestOptions.queryParameters)) {\n if (!requestOptions.queryParameters[key] || Object.prototype.toString.call(requestOptions.queryParameters[key]) === \"[object Object]\") {\n queryParameters[key] = requestOptions.queryParameters[key];\n } else {\n queryParameters[key] = requestOptions.queryParameters[key].toString();\n }\n }\n }\n let timeoutsCount = 0;\n const retry = async (retryableHosts, getTimeout) => {\n const host = retryableHosts.pop();\n if (host === void 0) {\n throw new RetryError(stackTraceWithoutCredentials(stackTrace));\n }\n const timeout = { ...timeouts, ...requestOptions.timeouts };\n const payload = {\n data,\n headers,\n method: request.method,\n url: serializeUrl(host, request.path, queryParameters),\n connectTimeout: getTimeout(timeoutsCount, timeout.connect),\n responseTimeout: getTimeout(timeoutsCount, isRead ? timeout.read : timeout.write)\n };\n const pushToStackTrace = (response2) => {\n const stackFrame = {\n request: payload,\n response: response2,\n host,\n triesLeft: retryableHosts.length\n };\n stackTrace.push(stackFrame);\n return stackFrame;\n };\n const response = await requester.send(payload);\n if (isRetryable(response)) {\n const stackFrame = pushToStackTrace(response);\n if (response.isTimedOut) {\n timeoutsCount++;\n }\n logger.info(\"Retryable failure\", stackFrameWithoutCredentials(stackFrame));\n await hostsCache.set(host, createStatefulHost(host, response.isTimedOut ? \"timed out\" : \"down\"));\n return retry(retryableHosts, getTimeout);\n }\n if (isSuccess(response)) {\n return deserializeSuccess(response);\n }\n pushToStackTrace(response);\n throw deserializeFailure(response, stackTrace);\n };\n const compatibleHosts = hosts.filter(\n (host) => host.accept === \"readWrite\" || (isRead ? host.accept === \"read\" : host.accept === \"write\")\n );\n const options = await createRetryableOptions(compatibleHosts);\n return retry([...options.hosts].reverse(), options.getTimeout);\n }\n function createRequest(request, requestOptions = {}) {\n const isRead = request.useReadTransporter || request.method === \"GET\";\n if (!isRead) {\n return retryableRequest(request, requestOptions, isRead);\n }\n const createRetryableRequest = () => {\n return retryableRequest(request, requestOptions);\n };\n const cacheable = requestOptions.cacheable || request.cacheable;\n if (cacheable !== true) {\n return createRetryableRequest();\n }\n const key = {\n request,\n requestOptions,\n transporter: {\n queryParameters: baseQueryParameters,\n headers: baseHeaders\n }\n };\n return responsesCache.get(\n key,\n () => {\n return requestsCache.get(\n key,\n () => (\n /**\n * Finally, if there is no request in progress with the same key,\n * this `createRetryableRequest()` will actually trigger the\n * retryable request.\n */\n requestsCache.set(key, createRetryableRequest()).then(\n (response) => Promise.all([requestsCache.delete(key), response]),\n (err) => Promise.all([requestsCache.delete(key), Promise.reject(err)])\n ).then(([_, response]) => response)\n )\n );\n },\n {\n /**\n * Of course, once we get this response back from the server, we\n * tell response cache to actually store the received response\n * to be used later.\n */\n miss: (response) => responsesCache.set(key, response)\n }\n );\n }\n return {\n hostsCache,\n requester,\n timeouts,\n logger,\n algoliaAgent,\n baseHeaders,\n baseQueryParameters,\n hosts,\n request: createRequest,\n requestsCache,\n responsesCache\n };\n}\n\n// src/types/logger.ts\nvar LogLevelEnum = {\n Debug: 1,\n Info: 2,\n Error: 3\n};\nexport {\n AlgoliaError,\n ApiError,\n DEFAULT_CONNECT_TIMEOUT_BROWSER,\n DEFAULT_CONNECT_TIMEOUT_NODE,\n DEFAULT_READ_TIMEOUT_BROWSER,\n DEFAULT_READ_TIMEOUT_NODE,\n DEFAULT_WRITE_TIMEOUT_BROWSER,\n DEFAULT_WRITE_TIMEOUT_NODE,\n DeserializationError,\n DetailedApiError,\n ErrorWithStackTrace,\n IndexAlreadyExistsError,\n IndexNotFoundError,\n IndicesInSameAppError,\n LogLevelEnum,\n RetryError,\n createAlgoliaAgent,\n createAuth,\n createBrowserLocalStorageCache,\n createFallbackableCache,\n createIterablePromise,\n createMemoryCache,\n createNullCache,\n createNullLogger,\n createStatefulHost,\n createTransporter,\n deserializeFailure,\n deserializeSuccess,\n getAlgoliaAgent,\n isNetworkError,\n isRetryable,\n isSuccess,\n serializeData,\n serializeHeaders,\n serializeQueryParameters,\n serializeUrl,\n shuffle,\n stackFrameWithoutCredentials,\n stackTraceWithoutCredentials\n};\n//# sourceMappingURL=common.js.map","export const version = '4.0.0-beta.2';\n","import { liteClient } from 'algoliasearch/lite';\nimport React from 'react';\n\nimport type { DocSearchTransformClient } from './DocSearch';\nimport { version } from './version';\n\nexport function useSearchClient(\n appId: string,\n apiKey: string,\n transformSearchClient: (searchClient: DocSearchTransformClient) => DocSearchTransformClient,\n): DocSearchTransformClient {\n const searchClient = React.useMemo(() => {\n const client = liteClient(appId, apiKey);\n client.addAlgoliaAgent('docsearch', version);\n\n // Since DocSearch.js relies on DocSearch React with an alias to Preact,\n // we cannot add the `docsearch-react` user agent by default, otherwise\n // it would also be sent on a DocSearch.js integration.\n // We therefore only add the `docsearch-react` user agent if `docsearch.js`\n // is not present.\n if (/docsearch.js \\(.*\\)/.test(client.transporter.algoliaAgent.value) === false) {\n client.addAlgoliaAgent('docsearch-react', version);\n }\n\n return transformSearchClient(client);\n }, [appId, apiKey, transformSearchClient]);\n\n return searchClient;\n}\n","// lite/builds/browser.ts\nimport { createXhrRequester } from \"@algolia/requester-browser-xhr\";\nimport {\n createBrowserLocalStorageCache,\n createFallbackableCache,\n createMemoryCache,\n createNullLogger\n} from \"@algolia/client-common\";\n\n// lite/src/liteClient.ts\nimport { createAuth, createTransporter, getAlgoliaAgent, shuffle } from \"@algolia/client-common\";\nvar apiClientVersion = \"5.28.0\";\nfunction getDefaultHosts(appId) {\n return [\n {\n url: `${appId}-dsn.algolia.net`,\n accept: \"read\",\n protocol: \"https\"\n },\n {\n url: `${appId}.algolia.net`,\n accept: \"write\",\n protocol: \"https\"\n }\n ].concat(\n shuffle([\n {\n url: `${appId}-1.algolianet.com`,\n accept: \"readWrite\",\n protocol: \"https\"\n },\n {\n url: `${appId}-2.algolianet.com`,\n accept: \"readWrite\",\n protocol: \"https\"\n },\n {\n url: `${appId}-3.algolianet.com`,\n accept: \"readWrite\",\n protocol: \"https\"\n }\n ])\n );\n}\nfunction createLiteClient({\n appId: appIdOption,\n apiKey: apiKeyOption,\n authMode,\n algoliaAgents,\n ...options\n}) {\n const auth = createAuth(appIdOption, apiKeyOption, authMode);\n const transporter = createTransporter({\n hosts: getDefaultHosts(appIdOption),\n ...options,\n algoliaAgent: getAlgoliaAgent({\n algoliaAgents,\n client: \"Lite\",\n version: apiClientVersion\n }),\n baseHeaders: {\n \"content-type\": \"text/plain\",\n ...auth.headers(),\n ...options.baseHeaders\n },\n baseQueryParameters: {\n ...auth.queryParameters(),\n ...options.baseQueryParameters\n }\n });\n return {\n transporter,\n /**\n * The `appId` currently in use.\n */\n appId: appIdOption,\n /**\n * The `apiKey` currently in use.\n */\n apiKey: apiKeyOption,\n /**\n * Clears the cache of the transporter for the `requestsCache` and `responsesCache` properties.\n */\n clearCache() {\n return Promise.all([transporter.requestsCache.clear(), transporter.responsesCache.clear()]).then(() => void 0);\n },\n /**\n * Get the value of the `algoliaAgent`, used by our libraries internally and telemetry system.\n */\n get _ua() {\n return transporter.algoliaAgent.value;\n },\n /**\n * Adds a `segment` to the `x-algolia-agent` sent with every requests.\n *\n * @param segment - The algolia agent (user-agent) segment to add.\n * @param version - The version of the agent.\n */\n addAlgoliaAgent(segment, version) {\n transporter.algoliaAgent.add({ segment, version });\n },\n /**\n * Helper method to switch the API key used to authenticate the requests.\n *\n * @param params - Method params.\n * @param params.apiKey - The new API Key to use.\n */\n setClientApiKey({ apiKey }) {\n if (!authMode || authMode === \"WithinHeaders\") {\n transporter.baseHeaders[\"x-algolia-api-key\"] = apiKey;\n } else {\n transporter.baseQueryParameters[\"x-algolia-api-key\"] = apiKey;\n }\n },\n /**\n * Helper: calls the `search` method but with certainty that we will only request Algolia records (hits) and not facets.\n * Disclaimer: We don't assert that the parameters you pass to this method only contains `hits` requests to prevent impacting search performances, this helper is purely for typing purposes.\n *\n * @summary Search multiple indices for `hits`.\n * @param searchMethodParams - Query requests and strategies. Results will be received in the same order as the queries.\n * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions.\n */\n searchForHits(searchMethodParams, requestOptions) {\n return this.search(searchMethodParams, requestOptions);\n },\n /**\n * Helper: calls the `search` method but with certainty that we will only request Algolia facets and not records (hits).\n * Disclaimer: We don't assert that the parameters you pass to this method only contains `facets` requests to prevent impacting search performances, this helper is purely for typing purposes.\n *\n * @summary Search multiple indices for `facets`.\n * @param searchMethodParams - Query requests and strategies. Results will be received in the same order as the queries.\n * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions.\n */\n searchForFacets(searchMethodParams, requestOptions) {\n return this.search(searchMethodParams, requestOptions);\n },\n /**\n * This method lets you send requests to the Algolia REST API.\n * @param customPost - The customPost object.\n * @param customPost.path - Path of the endpoint, anything after \\\"/1\\\" must be specified.\n * @param customPost.parameters - Query parameters to apply to the current query.\n * @param customPost.body - Parameters to send with the custom request.\n * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions.\n */\n customPost({ path, parameters, body }, requestOptions) {\n if (!path) {\n throw new Error(\"Parameter `path` is required when calling `customPost`.\");\n }\n const requestPath = \"/{path}\".replace(\"{path}\", path);\n const headers = {};\n const queryParameters = parameters ? parameters : {};\n const request = {\n method: \"POST\",\n path: requestPath,\n queryParameters,\n headers,\n data: body ? body : {}\n };\n return transporter.request(request, requestOptions);\n },\n /**\n * Retrieves recommendations from selected AI models.\n *\n * Required API Key ACLs:\n * - search\n * @param getRecommendationsParams - The getRecommendationsParams object.\n * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions.\n */\n getRecommendations(getRecommendationsParams, requestOptions) {\n if (getRecommendationsParams && Array.isArray(getRecommendationsParams)) {\n const newSignatureRequest = {\n requests: getRecommendationsParams\n };\n getRecommendationsParams = newSignatureRequest;\n }\n if (!getRecommendationsParams) {\n throw new Error(\"Parameter `getRecommendationsParams` is required when calling `getRecommendations`.\");\n }\n if (!getRecommendationsParams.requests) {\n throw new Error(\"Parameter `getRecommendationsParams.requests` is required when calling `getRecommendations`.\");\n }\n const requestPath = \"/1/indexes/*/recommendations\";\n const headers = {};\n const queryParameters = {};\n const request = {\n method: \"POST\",\n path: requestPath,\n queryParameters,\n headers,\n data: getRecommendationsParams,\n useReadTransporter: true,\n cacheable: true\n };\n return transporter.request(request, requestOptions);\n },\n /**\n * Sends multiple search requests to one or more indices. This can be useful in these cases: - Different indices for different purposes, such as, one index for products, another one for marketing content. - Multiple searches to the same index—for example, with different filters. Use the helper `searchForHits` or `searchForFacets` to get the results in a more convenient format, if you already know the return type you want.\n *\n * Required API Key ACLs:\n * - search\n * @param searchMethodParams - Muli-search request body. Results are returned in the same order as the requests.\n * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions.\n */\n search(searchMethodParams, requestOptions) {\n if (searchMethodParams && Array.isArray(searchMethodParams)) {\n const newSignatureRequest = {\n requests: searchMethodParams.map(({ params, ...legacyRequest }) => {\n if (legacyRequest.type === \"facet\") {\n return {\n ...legacyRequest,\n ...params,\n type: \"facet\"\n };\n }\n return {\n ...legacyRequest,\n ...params,\n facet: void 0,\n maxFacetHits: void 0,\n facetQuery: void 0\n };\n })\n };\n searchMethodParams = newSignatureRequest;\n }\n if (!searchMethodParams) {\n throw new Error(\"Parameter `searchMethodParams` is required when calling `search`.\");\n }\n if (!searchMethodParams.requests) {\n throw new Error(\"Parameter `searchMethodParams.requests` is required when calling `search`.\");\n }\n const requestPath = \"/1/indexes/*/queries\";\n const headers = {};\n const queryParameters = {};\n const request = {\n method: \"POST\",\n path: requestPath,\n queryParameters,\n headers,\n data: searchMethodParams,\n useReadTransporter: true,\n cacheable: true\n };\n return transporter.request(request, requestOptions);\n }\n };\n}\n\n// lite/builds/browser.ts\nfunction liteClient(appId, apiKey, options) {\n if (!appId || typeof appId !== \"string\") {\n throw new Error(\"`appId` is missing.\");\n }\n if (!apiKey || typeof apiKey !== \"string\") {\n throw new Error(\"`apiKey` is missing.\");\n }\n return createLiteClient({\n appId,\n apiKey,\n timeouts: {\n connect: 1e3,\n read: 2e3,\n write: 3e4\n },\n logger: createNullLogger(),\n requester: createXhrRequester(),\n algoliaAgents: [{ segment: \"Browser\" }],\n authMode: \"WithinQueryParameters\",\n responsesCache: createMemoryCache(),\n requestsCache: createMemoryCache({ serializable: false }),\n hostsCache: createFallbackableCache({\n caches: [createBrowserLocalStorageCache({ key: `${apiClientVersion}-${appId}` }), createMemoryCache()]\n }),\n ...options\n });\n}\nexport {\n apiClientVersion,\n liteClient\n};\n//# sourceMappingURL=browser.js.map","function m(){function r(t){return new Promise(s=>{let e=new XMLHttpRequest;e.open(t.method,t.url,!0),Object.keys(t.headers).forEach(n=>e.setRequestHeader(n,t.headers[n]));let i=(n,a)=>setTimeout(()=>{e.abort(),s({status:0,content:a,isTimedOut:!0})},n),u=i(t.connectTimeout,\"Connection timeout\"),o;e.onreadystatechange=()=>{e.readyState>e.OPENED&&o===void 0&&(clearTimeout(u),o=i(t.responseTimeout,\"Socket timeout\"))},e.onerror=()=>{e.status===0&&(clearTimeout(u),clearTimeout(o),s({content:e.responseText||\"Network request failed\",status:e.status,isTimedOut:!1}))},e.onload=()=>{clearTimeout(u),clearTimeout(o),s({content:e.responseText,status:e.status,isTimedOut:!1})},e.send(t.data)})}return{send:r}}export{m as createXhrRequester};\n//# sourceMappingURL=requester.xhr.js.map","import type { Message } from '@ai-sdk/react';\nimport { useChat } from '@ai-sdk/react';\nimport {\n type AutocompleteSource,\n type AlgoliaInsightsHit,\n createAutocomplete,\n type AutocompleteState,\n} from '@algolia/autocomplete-core';\nimport type { SearchResponse } from 'algoliasearch/lite';\nimport React, { type JSX } from 'react';\n\nimport { getValidToken, postFeedback } from './askai';\nimport { ASK_AI_API_URL, MAX_QUERY_SIZE, USE_ASK_AI_TOKEN } from './constants';\nimport type { DocSearchProps } from './DocSearch';\nimport type { FooterTranslations } from './Footer';\nimport { Footer } from './Footer';\nimport { Hit } from './Hit';\nimport type { ScreenStateTranslations } from './ScreenState';\nimport { ScreenState } from './ScreenState';\nimport type { SearchBoxTranslations } from './SearchBox';\nimport { SearchBox } from './SearchBox';\nimport { createStoredConversations, createStoredSearches } from './stored-searches';\nimport type { DocSearchHit, DocSearchState, InternalDocSearchHit, StoredAskAiState, StoredDocSearchHit } from './types';\nimport { useSearchClient } from './useSearchClient';\nimport { useTheme } from './useTheme';\nimport { useTouchEvents } from './useTouchEvents';\nimport { useTrapFocus } from './useTrapFocus';\nimport { groupBy, identity, noop, removeHighlightTags, isModifierEvent, scrollTo as scrollToUtils } from './utils';\nimport { buildDummyAskAiHit } from './utils/ai';\n\nexport type ModalTranslations = Partial<{\n searchBox: SearchBoxTranslations;\n footer: FooterTranslations;\n}> &\n ScreenStateTranslations;\n\nexport type DocSearchModalProps = DocSearchProps & {\n initialScrollY: number;\n onAskAiToggle: (toggle: boolean) => void;\n onClose?: () => void;\n isAskAiActive?: boolean;\n canHandleAskAi?: boolean;\n translations?: ModalTranslations;\n};\n\n/**\n * Helper function to build sources when there is no query\n * useful for recent searches and favorite searches.\n */\ntype BuildNoQuerySourcesOptions = {\n recentSearches: ReturnType<typeof createStoredSearches>;\n favoriteSearches: ReturnType<typeof createStoredSearches>;\n saveRecentSearch: (item: InternalDocSearchHit) => void;\n onClose: () => void;\n disableUserPersonalization: boolean;\n canHandleAskAi: boolean;\n};\n\nconst buildNoQuerySources = ({\n recentSearches,\n favoriteSearches,\n saveRecentSearch,\n onClose,\n disableUserPersonalization,\n}: BuildNoQuerySourcesOptions): Array<AutocompleteSource<InternalDocSearchHit>> => {\n if (disableUserPersonalization) {\n return [];\n }\n\n const sources: Array<AutocompleteSource<InternalDocSearchHit>> = [\n {\n sourceId: 'recentSearches',\n onSelect({ item, event }): void {\n saveRecentSearch(item);\n if (!isModifierEvent(event)) {\n onClose();\n }\n },\n getItemUrl({ item }): string {\n return item.url;\n },\n getItems(): InternalDocSearchHit[] {\n return recentSearches.getAll() as InternalDocSearchHit[];\n },\n },\n {\n sourceId: 'favoriteSearches',\n onSelect({ item, event }): void {\n saveRecentSearch(item);\n if (!isModifierEvent(event)) {\n onClose();\n }\n },\n getItemUrl({ item }): string {\n return item.url;\n },\n getItems(): InternalDocSearchHit[] {\n return favoriteSearches.getAll() as InternalDocSearchHit[];\n },\n },\n ];\n\n return sources;\n};\n\ntype BuildQuerySourcesState = Pick<AutocompleteState<InternalDocSearchHit>, 'context'>;\n\n/**\n * Helper function to build sources when there is a query\n * note: we only need specific parts of the state, not the full DocSearchState.\n */\nconst buildQuerySources = async ({\n query,\n state: sourcesState,\n setContext,\n setStatus,\n searchClient,\n indexName,\n searchParameters,\n snippetLength,\n insights,\n appId,\n apiKey,\n maxResultsPerGroup,\n transformItems = identity,\n saveRecentSearch,\n onClose,\n}: {\n query: string;\n state: BuildQuerySourcesState;\n setContext: (context: Partial<DocSearchState<InternalDocSearchHit>['context']>) => void;\n setStatus: (status: DocSearchState<InternalDocSearchHit>['status']) => void;\n searchClient: ReturnType<typeof useSearchClient>;\n indexName: string;\n searchParameters: DocSearchProps['searchParameters'];\n snippetLength: React.MutableRefObject<number>;\n insights: boolean;\n appId?: string;\n apiKey?: string;\n maxResultsPerGroup?: number;\n transformItems?: DocSearchProps['transformItems'];\n saveRecentSearch: (item: InternalDocSearchHit) => void;\n onClose: () => void;\n}): Promise<Array<AutocompleteSource<InternalDocSearchHit>>> => {\n const insightsActive = insights;\n\n try {\n const { results } = await searchClient.search<DocSearchHit>({\n requests: [\n {\n query,\n indexName,\n attributesToRetrieve: [\n 'hierarchy.lvl0',\n 'hierarchy.lvl1',\n 'hierarchy.lvl2',\n 'hierarchy.lvl3',\n 'hierarchy.lvl4',\n 'hierarchy.lvl5',\n 'hierarchy.lvl6',\n 'content',\n 'type',\n 'url',\n ],\n attributesToSnippet: [\n `hierarchy.lvl1:${snippetLength.current}`,\n `hierarchy.lvl2:${snippetLength.current}`,\n `hierarchy.lvl3:${snippetLength.current}`,\n `hierarchy.lvl4:${snippetLength.current}`,\n `hierarchy.lvl5:${snippetLength.current}`,\n `hierarchy.lvl6:${snippetLength.current}`,\n `content:${snippetLength.current}`,\n ],\n snippetEllipsisText: '…',\n highlightPreTag: '<mark>',\n highlightPostTag: '</mark>',\n hitsPerPage: 20,\n clickAnalytics: insightsActive,\n ...searchParameters,\n },\n ],\n });\n\n const firstResult = results[0] as SearchResponse<DocSearchHit>;\n const { hits, nbHits } = firstResult;\n const sources = groupBy<DocSearchHit>(hits, (hit) => removeHighlightTags(hit), maxResultsPerGroup);\n\n // We store the `lvl0`s to display them as search suggestions\n // in the \"no results\" screen.\n if ((sourcesState.context.searchSuggestions as any[]).length < Object.keys(sources).length) {\n setContext({\n searchSuggestions: Object.keys(sources),\n });\n }\n\n setContext({ nbHits });\n\n let insightsParams = {};\n\n if (insightsActive) {\n insightsParams = {\n __autocomplete_indexName: indexName,\n __autocomplete_queryID: firstResult.queryID,\n __autocomplete_algoliaCredentials: {\n appId,\n apiKey,\n },\n };\n }\n\n return Object.values<DocSearchHit[]>(sources).map((items, index) => {\n return {\n sourceId: `hits${index}`,\n onSelect({ item, event }): void {\n saveRecentSearch(item);\n if (!isModifierEvent(event)) {\n onClose();\n }\n },\n getItemUrl({ item }): string {\n return item.url;\n },\n getItems(): InternalDocSearchHit[] {\n return Object.values(groupBy(items, (item) => item.hierarchy.lvl1, maxResultsPerGroup))\n .map(transformItems)\n .map((groupedHits) =>\n groupedHits.map((item) => {\n let parent: InternalDocSearchHit | null = null;\n\n const potentialParent = groupedHits.find(\n (siblingItem) => siblingItem.type === 'lvl1' && siblingItem.hierarchy.lvl1 === item.hierarchy.lvl1,\n ) as InternalDocSearchHit | undefined;\n\n if (item.type !== 'lvl1' && potentialParent) {\n parent = potentialParent;\n }\n\n return {\n ...item,\n __docsearch_parent: parent,\n ...insightsParams,\n };\n }),\n )\n .flat();\n },\n };\n });\n } catch (error) {\n // The Algolia `RetryError` happens when all the servers have\n // failed, meaning that there's no chance the response comes\n // back. This is the right time to display an error.\n // See https://github.com/algolia/algoliasearch-client-javascript/blob/2ffddf59bc765cd1b664ee0346b28f00229d6e12/packages/transporter/src/errors/createRetryError.ts#L5\n if ((error as Error).name === 'RetryError') {\n setStatus('error');\n }\n throw error;\n }\n};\n\nexport function DocSearchModal({\n appId,\n apiKey,\n indexName,\n placeholder,\n askAi,\n searchParameters,\n maxResultsPerGroup,\n theme,\n onClose = noop,\n transformItems = identity,\n hitComponent = Hit,\n resultsFooterComponent = (): JSX.Element | null => null,\n navigator,\n initialScrollY = 0,\n transformSearchClient = identity,\n disableUserPersonalization = false,\n initialQuery: initialQueryFromProp = '',\n translations = {},\n getMissingResultsUrl,\n insights = false,\n onAskAiToggle,\n isAskAiActive = false,\n canHandleAskAi = false,\n}: DocSearchModalProps): JSX.Element {\n const { footer: footerTranslations, searchBox: searchBoxTranslations, ...screenStateTranslations } = translations;\n const [state, setState] = React.useState<DocSearchState<InternalDocSearchHit>>({\n query: '',\n collections: [],\n completion: null,\n context: {},\n isOpen: false,\n activeItemId: null,\n status: 'idle',\n });\n\n const containerRef = React.useRef<HTMLDivElement | null>(null);\n const modalRef = React.useRef<HTMLDivElement | null>(null);\n const formElementRef = React.useRef<HTMLDivElement | null>(null);\n const dropdownRef = React.useRef<HTMLDivElement | null>(null);\n const inputRef = React.useRef<HTMLInputElement | null>(null);\n const snippetLength = React.useRef<number>(15);\n const initialQueryFromSelection = React.useRef(\n typeof window !== 'undefined' ? window.getSelection()!.toString().slice(0, MAX_QUERY_SIZE) : '',\n ).current;\n const initialQuery = React.useRef(initialQueryFromProp || initialQueryFromSelection).current;\n // storage\n const conversations = React.useRef(\n createStoredConversations<StoredAskAiState>({\n key: `__DOCSEARCH_ASKAI_CONVERSATIONS__${indexName}`,\n limit: 10,\n }),\n ).current;\n const favoriteSearches = React.useRef(\n createStoredSearches<StoredDocSearchHit>({\n key: `__DOCSEARCH_FAVORITE_SEARCHES__${indexName}`,\n limit: 10,\n }),\n ).current;\n const recentSearches = React.useRef(\n createStoredSearches<StoredDocSearchHit>({\n key: `__DOCSEARCH_RECENT_SEARCHES__${indexName}`,\n // We display 7 recent searches and there's no favorites, but only\n // 4 when there are favorites.\n limit: favoriteSearches.getAll().length === 0 ? 7 : 4,\n }),\n ).current;\n\n const searchClient = useSearchClient(appId, apiKey, transformSearchClient);\n\n const askAiConfig = typeof askAi === 'object' ? askAi : null;\n const askAiConfigurationId = typeof askAi === 'string' ? askAi : askAiConfig?.assistantId || null;\n\n const [askAiStreamError, setAskAiStreamError] = React.useState<Error | null>(null);\n\n const {\n messages,\n append,\n status,\n setMessages,\n error: askAiFetchError,\n } = useChat({\n api: ASK_AI_API_URL,\n sendExtraMessageFields: true,\n fetch: async (input, init) => {\n if (!USE_ASK_AI_TOKEN) {\n return fetch(input, init);\n }\n\n if (!askAiConfigurationId) {\n throw new Error('Ask AI assistant ID is required');\n }\n const token = await getValidToken({ assistantId: askAiConfigurationId });\n const headers = new Headers(init.headers);\n headers.set('authorization', `TOKEN ${token}`);\n\n return fetch(input, { ...init, headers });\n },\n headers: {\n 'Content-Type': 'application/json',\n 'X-Algolia-API-Key': askAiConfig?.apiKey || apiKey,\n 'X-Algolia-Application-Id': askAiConfig?.appId || appId,\n 'X-Algolia-Index-Name': askAiConfig?.indexName || indexName,\n 'X-Algolia-Assistant-Id': askAiConfigurationId || '',\n },\n onError(streamError) {\n setAskAiStreamError(streamError);\n },\n });\n\n const prevStatus = React.useRef(status);\n React.useEffect(() => {\n if (disableUserPersonalization) {\n return;\n }\n // if we just transitioned from \"streaming\" → \"ready\", persist\n if (prevStatus.current === 'streaming' && status === 'ready') {\n conversations.add(buildDummyAskAiHit(messages[0].content, messages));\n }\n prevStatus.current = status;\n }, [status, messages, conversations, disableUserPersonalization]);\n\n const saveRecentSearch = React.useCallback(\n function saveRecentSearch(item: InternalDocSearchHit) {\n if (disableUserPersonalization) {\n return;\n }\n\n // We don't store `content` record, but their parent if available.\n const search = item.type === 'content' ? item.__docsearch_parent : item;\n\n // We save the recent search only if it's not favorited.\n if (search && favoriteSearches.getAll().findIndex((x) => x.objectID === search.objectID) === -1) {\n recentSearches.add(search);\n }\n },\n [favoriteSearches, recentSearches, disableUserPersonalization],\n );\n\n const sendItemClickEvent = React.useCallback(\n (item: InternalDocSearchHit) => {\n if (!state.context.algoliaInsightsPlugin || !item.__autocomplete_id) return;\n\n const insightsItem = item as AlgoliaInsightsHit;\n\n const insightsClickParams = {\n eventName: 'Item Selected',\n index: insightsItem.__autocomplete_indexName,\n items: [insightsItem],\n positions: [item.__autocomplete_id],\n queryID: insightsItem.__autocomplete_queryID,\n };\n\n state.context.algoliaInsightsPlugin.insights.clickedObjectIDsAfterSearch(insightsClickParams);\n },\n [state.context.algoliaInsightsPlugin],\n );\n\n const autocompleteRef =\n React.useRef<\n ReturnType<\n typeof createAutocomplete<\n InternalDocSearchHit,\n React.FormEvent<HTMLFormElement>,\n React.MouseEvent,\n React.KeyboardEvent\n >\n >\n >(undefined);\n\n const handleAskAiToggle = React.useCallback(\n (toggle: boolean, query: string) => {\n onAskAiToggle(toggle);\n append({\n role: 'user',\n content: query,\n });\n\n if (dropdownRef.current) {\n // some test environments (like jsdom) don't implement element.scrollTo\n const el = dropdownRef.current;\n if (typeof (el as any).scrollTo === 'function') {\n el.scrollTo({ top: 0, behavior: 'smooth' });\n } else {\n // fallback for environments without scrollTo support\n el.scrollTop = 0;\n }\n }\n\n // clear the query\n if (autocompleteRef.current) {\n autocompleteRef.current.setQuery('');\n }\n },\n [onAskAiToggle, append],\n );\n\n // feedback handler\n const handleFeedbackSubmit = React.useCallback(\n async (messageId: string, thumbs: 0 | 1): Promise<void> => {\n if (!askAiConfigurationId || !appId) return;\n const res = await postFeedback({\n assistantId: askAiConfigurationId,\n thumbs,\n messageId,\n appId,\n });\n if (res.status >= 300) throw new Error('Failed, try again later');\n conversations.addFeedback?.(messageId, thumbs === 1 ? 'like' : 'dislike');\n },\n [askAiConfigurationId, appId, conversations],\n );\n\n if (!autocompleteRef.current) {\n autocompleteRef.current = createAutocomplete({\n id: 'docsearch',\n defaultActiveItemId: 0,\n openOnFocus: true,\n initialState: {\n query: initialQuery,\n context: {\n searchSuggestions: [],\n },\n },\n insights: Boolean(insights),\n navigator,\n onStateChange(props) {\n setState(props.state);\n },\n getSources({ query, state: sourcesState, setContext, setStatus }) {\n if (!query) {\n const noQuerySources = buildNoQuerySources({\n recentSearches,\n favoriteSearches,\n saveRecentSearch,\n onClose,\n disableUserPersonalization,\n canHandleAskAi,\n });\n\n const recentConversationSource: Array<AutocompleteSource<InternalDocSearchHit & { messages?: Message[] }>> =\n canHandleAskAi\n ? [\n {\n sourceId: 'recentConversations',\n getItems(): InternalDocSearchHit[] {\n if (disableUserPersonalization) {\n return [];\n }\n return conversations.getAll() as unknown as InternalDocSearchHit[];\n },\n onSelect({ item }): void {\n if (item.messages) {\n setMessages(item.messages as any);\n onAskAiToggle(true);\n }\n },\n },\n ]\n : [];\n return [...noQuerySources, ...recentConversationSource];\n }\n\n const querySourcesState: BuildQuerySourcesState = { context: sourcesState.context };\n\n // Algolia sources\n const algoliaSourcesPromise = buildQuerySources({\n query,\n state: querySourcesState,\n setContext,\n setStatus,\n searchClient,\n indexName,\n searchParameters,\n snippetLength,\n insights: Boolean(insights),\n appId,\n apiKey,\n maxResultsPerGroup,\n transformItems,\n saveRecentSearch,\n onClose,\n });\n\n // AskAI source\n const askAiSource: Array<AutocompleteSource<InternalDocSearchHit>> = canHandleAskAi\n ? [\n {\n sourceId: 'askAI',\n getItems(): InternalDocSearchHit[] {\n // return a single item representing the Ask AI action\n // placeholder data matching the InternalDocSearchHit structure\n const askItem: InternalDocSearchHit = {\n type: 'askAI',\n query,\n url_without_anchor: '',\n objectID: `ask-ai-button`,\n content: null,\n url: '',\n anchor: null,\n hierarchy: {\n lvl0: 'Ask AI', // Or contextually relevant\n lvl1: query,\n lvl2: null,\n lvl3: null,\n lvl4: null,\n lvl5: null,\n lvl6: null,\n },\n _highlightResult: {} as any,\n _snippetResult: {} as any,\n __docsearch_parent: null,\n };\n return [askItem];\n },\n onSelect({ item }): void {\n if (item.type === 'askAI' && item.query) {\n handleAskAiToggle(true, item.query);\n }\n },\n },\n ]\n : [];\n\n // Combine Algolia results (once resolved) with the Ask AI source\n return algoliaSourcesPromise.then((algoliaSources) => {\n return [...askAiSource, ...algoliaSources];\n });\n },\n });\n }\n\n const autocomplete = autocompleteRef.current;\n\n const { getEnvironmentProps, getRootProps, refresh } = autocomplete;\n\n useTouchEvents({\n getEnvironmentProps,\n panelElement: dropdownRef.current,\n formElement: formElementRef.current,\n inputElement: inputRef.current,\n });\n useTrapFocus({ container: containerRef.current });\n useTheme({ theme });\n\n React.useEffect(() => {\n document.body.classList.add('DocSearch--active');\n\n return (): void => {\n document.body.classList.remove('DocSearch--active');\n\n // IE11 doesn't support `scrollTo` so we check that the method exists\n // first.\n window.scrollTo?.(0, initialScrollY);\n };\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n React.useLayoutEffect(() => {\n // Calculate the scrollbar width to compensate for removed scrollbar\n const scrollBarWidth = window.innerWidth - document.body.clientWidth;\n // Prevent layout shift by adding appropriate margin to the body\n document.body.style.marginRight = `${scrollBarWidth}px`;\n\n return (): void => {\n document.body.style.marginRight = '0px';\n };\n }, []);\n\n React.useEffect(() => {\n const isMobileMediaQuery = window.matchMedia('(max-width: 768px)');\n\n if (isMobileMediaQuery.matches) {\n snippetLength.current = 5;\n }\n }, []);\n\n React.useEffect(() => {\n if (dropdownRef.current && !isAskAiActive) {\n scrollToUtils(dropdownRef.current);\n }\n }, [state.query, isAskAiActive]);\n\n // We don't focus the input when there's an initial query (i.e. Selection\n // Search) because users rather want to see the results directly, without the\n // keyboard appearing.\n // We therefore need to refresh the autocomplete instance to load all the\n // results, which is usually triggered on focus.\n React.useEffect(() => {\n if (initialQuery.length > 0) {\n refresh();\n\n if (inputRef.current) {\n inputRef.current.focus();\n }\n }\n }, [initialQuery, refresh]);\n\n // We rely on a CSS property to set the modal height to the full viewport height\n // because all mobile browsers don't compute their height the same way.\n // See https://css-tricks.com/the-trick-to-viewport-units-on-mobile/\n React.useEffect(() => {\n function setFullViewportHeight(): void {\n if (modalRef.current) {\n const vh = window.innerHeight * 0.01;\n modalRef.current.style.setProperty('--docsearch-vh', `${vh}px`);\n }\n }\n\n setFullViewportHeight();\n\n window.addEventListener('resize', setFullViewportHeight);\n\n return (): void => {\n window.removeEventListener('resize', setFullViewportHeight);\n };\n }, []);\n\n // Refresh the autocomplete results when ask ai is toggled off\n // helps return to the previous ac state and start screen\n React.useEffect(() => {\n if (!isAskAiActive) {\n autocomplete.refresh();\n setMessages([]);\n }\n }, [isAskAiActive, autocomplete, setMessages]);\n\n // hide the dropdown on idle and no collections\n let showDocsearchDropdown = true;\n const hasCollections = state.collections.some((collection) => collection.items.length > 0);\n if (state.status === 'idle' && hasCollections === false && state.query.length === 0 && !isAskAiActive) {\n showDocsearchDropdown = false;\n }\n\n return (\n <div\n ref={containerRef}\n {...getRootProps({ 'aria-expanded': true })}\n className={[\n 'DocSearch',\n 'DocSearch-Container',\n state.status === 'stalled' && 'DocSearch-Container--Stalled',\n state.status === 'error' && 'DocSearch-Container--Errored',\n ]\n .filter(Boolean)\n .join(' ')}\n role=\"button\"\n tabIndex={0}\n onMouseDown={(event) => {\n if (event.target === event.currentTarget) {\n onClose();\n }\n }}\n >\n <div className=\"DocSearch-Modal\" ref={modalRef}>\n <header className=\"DocSearch-SearchBar\" ref={formElementRef}>\n <SearchBox\n {...autocomplete}\n state={state}\n placeholder={placeholder || 'Search docs'}\n autoFocus={initialQuery.length === 0}\n inputRef={inputRef}\n isFromSelection={Boolean(initialQuery) && initialQuery === initialQueryFromSelection}\n translations={searchBoxTranslations}\n isAskAiActive={isAskAiActive}\n askAiStatus={status}\n onClose={onClose}\n onAskAiToggle={onAskAiToggle}\n onAskAgain={(query) => {\n handleAskAiToggle(true, query);\n }}\n />\n </header>\n\n {showDocsearchDropdown && (\n <div className=\"DocSearch-Dropdown\" ref={dropdownRef}>\n <ScreenState\n {...autocomplete}\n indexName={indexName}\n state={state}\n hitComponent={hitComponent}\n resultsFooterComponent={resultsFooterComponent}\n disableUserPersonalization={disableUserPersonalization}\n recentSearches={recentSearches}\n favoriteSearches={favoriteSearches}\n conversations={conversations}\n inputRef={inputRef}\n translations={screenStateTranslations}\n getMissingResultsUrl={getMissingResultsUrl}\n isAskAiActive={isAskAiActive}\n canHandleAskAi={canHandleAskAi}\n messages={messages}\n askAiStreamError={askAiStreamError}\n askAiFetchError={askAiFetchError}\n status={status}\n hasCollections={hasCollections}\n onAskAiToggle={onAskAiToggle}\n onItemClick={(item, event) => {\n // if the item is askAI toggle the screen\n if (item.type === 'askAI' && item.query) {\n // if the item is askAI and the anchor is stored\n if (item.anchor === 'stored' && 'messages' in item) {\n setMessages(item.messages as any);\n onAskAiToggle(true);\n } else {\n handleAskAiToggle(true, item.query);\n }\n event.preventDefault();\n return;\n }\n\n // If insights is active, send insights click event\n sendItemClickEvent(item);\n\n saveRecentSearch(item);\n if (!isModifierEvent(event)) {\n onClose();\n }\n }}\n onFeedback={handleFeedbackSubmit}\n />\n </div>\n )}\n <footer className=\"DocSearch-Footer\">\n <Footer translations={footerTranslations} isAskAiActive={isAskAiActive} />\n </footer>\n </div>\n </div>\n );\n}\n","import React from 'react';\n\ninterface UseTrapFocusProps {\n container: HTMLElement | null;\n}\n\nexport function useTrapFocus({ container }: UseTrapFocusProps): void {\n React.useEffect(() => {\n if (!container) {\n return undefined;\n }\n\n const focusableElements = container.querySelectorAll<HTMLElement>(\n 'a[href]:not([disabled]), button:not([disabled]), input:not([disabled])',\n );\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n\n function trapFocus(event: KeyboardEvent): void {\n if (event.key !== 'Tab') {\n return;\n }\n\n if (event.shiftKey) {\n if (document.activeElement === firstElement) {\n event.preventDefault();\n lastElement.focus();\n }\n } else if (document.activeElement === lastElement) {\n event.preventDefault();\n firstElement.focus();\n }\n }\n\n container.addEventListener('keydown', trapFocus);\n\n return (): void => {\n container.removeEventListener('keydown', trapFocus);\n };\n }, [container]);\n}\n","import type { AutocompleteApi } from '@algolia/autocomplete-core';\nimport React from 'react';\n\ninterface UseTouchEventsProps {\n getEnvironmentProps: AutocompleteApi<any>['getEnvironmentProps'];\n panelElement: HTMLDivElement | null;\n formElement: HTMLDivElement | null;\n inputElement: HTMLInputElement | null;\n}\n\nexport function useTouchEvents({\n getEnvironmentProps,\n panelElement,\n formElement,\n inputElement,\n}: UseTouchEventsProps): void {\n React.useEffect(() => {\n if (!(panelElement && formElement && inputElement)) {\n return undefined;\n }\n\n const { onTouchStart, onTouchMove } = getEnvironmentProps({\n panelElement,\n formElement,\n inputElement,\n });\n\n window.addEventListener('touchstart', onTouchStart);\n window.addEventListener('touchmove', onTouchMove);\n\n return (): void => {\n window.removeEventListener('touchstart', onTouchStart);\n window.removeEventListener('touchmove', onTouchMove);\n };\n }, [getEnvironmentProps, panelElement, formElement, inputElement]);\n}\n","export function scrollTo(el: HTMLElement): void {\n // some test environments (like jsdom) don't implement element.scrollTo\n if (typeof el.scrollTo === 'function') {\n el.scrollTo({ top: 0, behavior: 'smooth' });\n } else {\n // fallback for environments without scrollTo support\n el.scrollTop = 0;\n }\n}\n","import React from 'react';\n\nexport interface UseDocSearchKeyboardEventsProps {\n isOpen: boolean;\n onOpen: () => void;\n onClose: () => void;\n onInput?: (event: KeyboardEvent) => void;\n searchButtonRef: React.RefObject<HTMLButtonElement | null>;\n isAskAiActive: boolean;\n onAskAiToggle: (toggle: boolean) => void;\n}\n\nfunction isEditingContent(event: KeyboardEvent): boolean {\n const element = event.composedPath()[0] as HTMLElement;\n const tagName = element.tagName;\n\n return element.isContentEditable || tagName === 'INPUT' || tagName === 'SELECT' || tagName === 'TEXTAREA';\n}\n\nexport function useDocSearchKeyboardEvents({\n isOpen,\n onOpen,\n onClose,\n onInput,\n isAskAiActive,\n onAskAiToggle,\n searchButtonRef,\n}: UseDocSearchKeyboardEventsProps): void {\n React.useEffect(() => {\n function onKeyDown(event: KeyboardEvent): void {\n if (isOpen && event.code === 'Escape' && isAskAiActive) {\n onAskAiToggle(false);\n return;\n }\n\n if (\n (event.code === 'Escape' && isOpen) ||\n // The `Cmd+K` shortcut both opens and closes the modal.\n // We need to check for `event.key` because it can be `undefined` with\n // Chrome's autofill feature.\n // See https://github.com/paperjs/paper.js/issues/1398\n (event.key?.toLowerCase() === 'k' && (event.metaKey || event.ctrlKey)) ||\n // The `/` shortcut opens but doesn't close the modal because it's\n // a character.\n (!isEditingContent(event) && event.key === '/' && !isOpen)\n ) {\n event.preventDefault();\n\n if (isOpen) {\n onClose();\n } else if (!document.body.classList.contains('DocSearch--active')) {\n // We check that no other DocSearch modal is showing before opening\n // another one.\n onOpen();\n }\n\n return;\n }\n\n if (searchButtonRef && searchButtonRef.current === document.activeElement && onInput) {\n if (/[a-zA-Z0-9]/.test(String.fromCharCode(event.keyCode))) {\n onInput(event);\n }\n }\n }\n\n window.addEventListener('keydown', onKeyDown);\n\n return (): void => {\n window.removeEventListener('keydown', onKeyDown);\n };\n }, [isOpen, onOpen, onClose, onInput, searchButtonRef, isAskAiActive, onAskAiToggle]);\n}\n","import type { AutocompleteOptions, AutocompleteState } from '@algolia/autocomplete-core';\nimport type { LiteClient, SearchParamsObject } from 'algoliasearch/lite';\nimport React, { type JSX } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { DocSearchButton } from './DocSearchButton';\nimport { DocSearchModal } from './DocSearchModal';\nimport type { DocSearchHit, DocSearchTheme, InternalDocSearchHit, StoredDocSearchHit } from './types';\nimport { useDocSearchKeyboardEvents } from './useDocSearchKeyboardEvents';\nimport { useTheme } from './useTheme';\n\nimport type { ButtonTranslations, ModalTranslations } from '.';\n\nexport type DocSearchTranslations = Partial<{\n button: ButtonTranslations;\n modal: ModalTranslations;\n}>;\n\n// The interface that describes the minimal implementation required for the algoliasearch client, when using the [`transformSearchClient`](https://docsearch.algolia.com/docs/api/#transformsearchclient) option.\nexport type DocSearchTransformClient = {\n search: LiteClient['search'];\n addAlgoliaAgent: LiteClient['addAlgoliaAgent'];\n transporter: Pick<LiteClient['transporter'], 'algoliaAgent'>;\n};\n\nexport type DocSearchAskAi = {\n /**\n * The index name to use for the ask AI feature. Your assistant will search this index for relevant documents.\n * If not provided, the index name will be used.\n */\n indexName?: string;\n /**\n * The API key to use for the ask AI feature. Your assistant will use this API key to search the index.\n * If not provided, the API key will be used.\n */\n apiKey?: string;\n /**\n * The app ID to use for the ask AI feature. Your assistant will use this app ID to search the index.\n * If not provided, the app ID will be used.\n */\n appId?: string;\n /**\n * The assistant ID to use for the ask AI feature.\n */\n assistantId: string | null;\n};\n\nexport interface DocSearchProps {\n appId: string;\n apiKey: string;\n indexName: string;\n askAi?: DocSearchAskAi | string;\n theme?: DocSearchTheme;\n placeholder?: string;\n searchParameters?: SearchParamsObject;\n maxResultsPerGroup?: number;\n transformItems?: (items: DocSearchHit[]) => DocSearchHit[];\n hitComponent?: (props: { hit: InternalDocSearchHit | StoredDocSearchHit; children: React.ReactNode }) => JSX.Element;\n resultsFooterComponent?: (props: { state: AutocompleteState<InternalDocSearchHit> }) => JSX.Element | null;\n transformSearchClient?: (searchClient: DocSearchTransformClient) => DocSearchTransformClient;\n disableUserPersonalization?: boolean;\n initialQuery?: string;\n navigator?: AutocompleteOptions<InternalDocSearchHit>['navigator'];\n translations?: DocSearchTranslations;\n getMissingResultsUrl?: ({ query }: { query: string }) => string;\n insights?: AutocompleteOptions<InternalDocSearchHit>['insights'];\n}\n\nexport function DocSearch({ ...props }: DocSearchProps): JSX.Element {\n const searchButtonRef = React.useRef<HTMLButtonElement>(null);\n const [isOpen, setIsOpen] = React.useState(false);\n const [initialQuery, setInitialQuery] = React.useState<string | undefined>(props?.initialQuery || undefined);\n const [isAskAiActive, setIsAskAiActive] = React.useState(false);\n\n let currentPlaceholder =\n props?.translations?.modal?.searchBox?.placeholderText || props?.placeholder || 'Search docs';\n\n // check if the instance is configured to handle ask ai\n const canHandleAskAi = Boolean(props?.askAi);\n\n if (canHandleAskAi) {\n currentPlaceholder = props?.translations?.modal?.searchBox?.placeholderText || 'Search docs or ask AI a question';\n }\n\n if (isAskAiActive) {\n currentPlaceholder = props?.translations?.modal?.searchBox?.placeholderTextAskAi || 'Ask another question...';\n }\n\n const onAskAiToggle = React.useCallback(\n (askAitoggle: boolean) => {\n setIsAskAiActive(askAitoggle);\n },\n [setIsAskAiActive],\n );\n\n const onOpen = React.useCallback(() => {\n setIsOpen(true);\n }, [setIsOpen]);\n\n const onClose = React.useCallback(() => {\n setIsOpen(false);\n setInitialQuery(props?.initialQuery);\n if (isAskAiActive) {\n setIsAskAiActive(false);\n }\n }, [setIsOpen, props.initialQuery, isAskAiActive, setIsAskAiActive]);\n\n const onInput = React.useCallback(\n (event: KeyboardEvent) => {\n setIsOpen(true);\n setInitialQuery(event.key);\n },\n [setIsOpen, setInitialQuery],\n );\n\n useDocSearchKeyboardEvents({\n isOpen,\n onOpen,\n onClose,\n onInput,\n isAskAiActive,\n onAskAiToggle,\n searchButtonRef,\n });\n useTheme({ theme: props.theme });\n\n return (\n <>\n <DocSearchButton ref={searchButtonRef} translations={props?.translations?.button} onClick={onOpen} />\n\n {isOpen &&\n createPortal(\n <DocSearchModal\n {...props}\n placeholder={currentPlaceholder}\n initialScrollY={window.scrollY}\n initialQuery={initialQuery}\n translations={props?.translations?.modal}\n isAskAiActive={isAskAiActive}\n canHandleAskAi={canHandleAskAi}\n onAskAiToggle={onAskAiToggle}\n onClose={onClose}\n />,\n document.body,\n )}\n </>\n );\n}\n"],"names":["MetaKeyIcon","React","createElement","width","height","viewBox","fill","xmlns","d","KKeyIcon","ControlKeyIcon","SearchIcon","_ref","_ref$size","size","undefined","_ref$color","color","className","cx","cy","r","stroke","strokeWidth","strokeLinecap","strokeLinejoin","useTheme","theme","useEffect","previousTheme","document","documentElement","dataset","ACTION_KEY_DEFAULT","DocSearchButton","forwardRef","ref","_ref$translations","translations","props","_objectWithoutProperties","_excluded","_translations$buttonT","buttonText","_translations$buttonA","buttonAriaLabel","_useState2","_slicedToArray","useState","key","setKey","navigator","test","platform","_ref3","actionKeyReactsTo","actionKeyAltText","actionKeyChild","shortcut","concat","_extends","type","Fragment","DocSearchButtonKey","reactsToKey","_ref4","children","_useState4","isKeyDown","setIsKeyDown","window","addEventListener","handleKeyDown","handleKeyUp","removeEventListener","e","_a","marker","symbol","Symbol","for","_AISDKError","Error","constructor","name","name14","message","cause","super","this","isInstance","error","hasMarker","marker15","markerSymbol","AISDKError","getErrorMessage","JSON","stringify","_a4","name3","marker4","symbol4","InvalidArgumentError","argument","_a7","name6","marker7","symbol7","JSONParseError","text","_a13","name12","marker13","symbol13","TypeValidationError","_TypeValidationError","value","wrap","hasBuffer","Buffer","suspectProtoRx","suspectConstructorRx","_parse","reviver","options","_typeof","isBuffer","toString","charCodeAt","slice","obj","parse","protoAction","constructorAction","filter","safe","arguments","length","_ref$protoAction","_ref$constructorActio","next","nodes","_step","_iterator","_createForOfIteratorHelper","s","n","done","node","Object","prototype","hasOwnProperty","call","SyntaxError","__proto__","push","err","f","stackTraceLimit","secureJsonParseModule","exports","default","safeParse","_e","scan","generateId","prefix","defaultSize","alphabet","separator","generator","id","i","Math","random","customAlphabet","includes","createIdGenerator","validatorSymbol","asValidator","isValidator","zodSchema","validate","result","success","data","safeParseJSON","schema","SecureJSON","rawValue","validationResult","validator2","safeValidateTypes","Set","textStreamPart","code","errorStreamPart","assistantMessageStreamPart","role","Array","isArray","content","every","item","assistantControlDataStreamPart","threadId","messageId","dataMessageStreamPart","fixJson","input","stack","lastValidIndex","literalStart","processValueStart","char","swapState","pop","processAfterObjectValue","processAfterArrayValue","partialLiteral","substring","startsWith","map","part","dataStreamParts","toolCallId","toolName","args","argsTextDelta","finishReason","usage","promptTokens","Number","NaN","completionTokens","isContinued","signature","mimeType","dataStreamPartsByCode","fromEntries","validCodes2","parseDataStreamPart","line","firstSeparatorIndex","indexOf","textValue","jsonValue","NEWLINE","concatChunks","chunks","totalLength","concatenatedChunks","Uint8Array","offset","chunk","set","async","processChatResponse","stream","update","onToolCall","onFinish","generateId2","generateIdFunction","getCurrentDate","Date","lastMessage","_b","replaceLastMessage","step","toolInvocations","reduce","max","toolInvocation","_a2","structuredClone","createdAt","parts","currentTextPart","currentReasoningPart","currentReasoningTextDetail","updateToolInvocationPart","invocation","find","part2","messageAnnotations","annotations","partialToolCalls","totalTokens","execUpdate","copiedData","copiedMessage","revisionId","onTextPart","onReasoningPart","onReasoningSignaturePart","onRedactedReasoningPart","onSourcePart","onFilePart","onDataPart","onErrorPart","onToolCallStreamingStartPart","onToolCallDeltaPart","onToolCallPart","onToolResultPart","onMessageAnnotationsPart","onFinishMessagePart","onFinishStepPart","onStartStepPart","reader","getReader","decoder","TextDecoder","read","streamParts","decode","split","value2","processDataStream","details","reasoning","source","index","state","partialToolCall","partialArgs","jsonText","parsePartialJson","toolCall","invocation2","toolInvocationIndex","findIndex","calculateLanguageModelUsage","processChatTextResponse","generateIdFunction2","textPart","resultMessage","pipeThrough","TextDecoderStream","processTextStream","getOriginalFetch","fetch","extractMaxToolInvocationStep","getMessageParts","fillMessageParts","messages","isDeepEqualData","obj1","obj2","getTime","keys1","keys","keys2","prepareAttachmentsForRequest","attachmentsFromOptions","globalThis","FileList","Promise","all","from","attachment","dataUrl","resolve","reject","FileReader","onload","readerEvent","target","onerror","readAsDataURL","contentType","url","isAssistantMessageWithCompletedToolCalls","lastStepStartIndex","lastIndex","lastStepToolInvocations","shimModule","require$$0","objectIs","is","x","y","useLayoutEffect","useDebugValue","checkIfSnapshotChanged","inst","latestGetSnapshot","getSnapshot","nextValue","shim","subscribe","_useState","forceUpdate","useSyncExternalStoreShim_production","useSyncExternalStore","has","SWRGlobalState","WeakMap","noop","UNDEFINED","OBJECT","isUndefined","v","isFunction","mergeObjects","a","b","isPromiseLike","then","EMPTY_CACHE","INITIAL_CACHE","STR_UNDEFINED","isWindowDefined","isDocumentDefined","isLegacyDeno","createCacheHelper","cache","get","info","prev","online","onWindowEvent","offWindowEvent","bind","preset","isOnline","isVisible","visibilityState","defaultConfigOptions","initFocus","callback","initReconnect","onOnline","onOffline","IS_REACT_LEGACY","useId","IS_SERVER","rAF","setTimeout","useIsomorphicLayoutEffect","navigatorConnection","connection","slowConnection","effectiveType","saveData","table","isObjectType","counter","stableHash","arg","isDate","isRegex","isPlainObject","toJSON","sort","serialize","__timestamp","getTimestamp","internalMutate","_key","_data","_opts","populateCache","throwOnError","revalidate","rollbackOnErrorOption","rollbackOnError","optimisticData","keyFilter","matchedKeys","it","_k","mutateByKey","EVENT_REVALIDATORS","MUTATION","FETCH","PRELOAD","startRevalidate","revalidators","beforeMutationTs","hasOptimisticData","displayedData","currentData","_c","committedData","catch","populateCachedData","revalidateAllKeys","compare","dequal","foo","bar","ctor","len","RegExp","mutate","provider","opts","create","unmount","subscriptions","subs","splice","setter","fn","initProvider","releaseFocus","releaseReconnect","delete","initCache","Map","defaultConfig","onLoadingSlow","onSuccess","onError","onErrorRetry","_","__","config","maxRetryCount","errorRetryCount","currentRetryCount","retryCount","timeout","errorRetryInterval","onDiscarded","revalidateOnFocus","revalidateOnReconnect","revalidateIfStale","shouldRetryOnError","focusThrottleInterval","dedupingInterval","loadingTimeout","isPaused","fallback","SWRConfigContext","createContext","enableDevtools","__SWR_DEVTOOLS_USE__","use","BUILT_IN_MIDDLEWARE","useSWRNext","key_","fetcher_","req","__SWR_DEVTOOLS_REACT__","thenable","status","reason","WITH_DEDUPE","dedupe","useSWR","hook","fetcher","suspense","fallbackData","revalidateOnMount","refreshInterval","refreshWhenHidden","refreshWhenOffline","keepPreviousData","fnArg","serialize$1","initialMountedRef","useRef","unmountedRef","keyRef","fetcherRef","configRef","getConfig","current","isActive","getCache","setCache","subscribeCache","getInitialCache","stateDependencies","isUndefined$1","UNDEFINED$1","isEqual","t","returnedData","useMemo","shouldStartRequest","getSelectedCache","snapshot","isValidating","isLoading","cachedData","initialData","clientSnapshot","serverSnapshot","memorizedSnapshot","newSnapshot","cached","useCallback","isInitialMount","hasRevalidator","laggyDataRef","shouldDoInitialRevalidation","defaultValidatingState","revalidateOpts","currentFetcher","newData","startAt","loading","shouldStartNewRequest","callbackSafeguard","finalState","finishRequestAndUpdateState","cleanupState","requestInfo","initialState","mutationInfo","cacheData","currentConfig","isFunction$1","boundMutate","softRevalidate","nextFocusRevalidatedAt","initNow","now","unsubEvents","callbacks","keyedRevalidators","subscribeCallback","timer","interval","execute","clearTimeout","promise","fallbackConfig","useContext","_config","normalize","u1","f1","u2","f2","mergeConfigs","middleware","throttleit","function_","wait","TypeError","timeoutId","lastCallTime","_this","_len","arguments_","delayForNextCall","apply","throttle","waitMs","throttleFunction","useStableValue","latestValue","setValue","useState2","useChat","api","initialMessages","initialInput","sendExtraMessageFields","experimental_prepareRequestBody","maxSteps","streamProtocol","onResponse","credentials","headers","body","generateIdFunc","fetch2","keepLastMessageOnError","experimental_throttle","throttleWaitMs","hookId","useState3","chatId","chatKey","stableInitialMessages","processedInitialMessages","messagesRef","useRef2","useEffect2","streamData","mutateStreamData","streamDataRef","mutateStatus","setError","abortControllerRef","extraMetadataRef","triggerRequest","useCallback2","chatRequest","requestType","chatMessages","messageCount","maxStep","abortController","AbortController","throttledMutate","throttledMutateStreamData","previousMessages","constructedMessagesPayload","experimental_attachments","existingData","restoreMessagesOnFailure","onUpdate","request","method","signal","response","ok","callChatApi","requestData","requestBody","messages2","originalMaxToolInvocationStep","originalMessageCount","shouldResubmitMessages","append","headers2","body2","attachmentsForRequest","reload","stop","abort","experimental_resume","setMessages","messagesWithParts","setData","setInput","handleSubmit","event","metadata","preventDefault","allowEmptySubmit","addToolResult","currentMessages","toolResult","invocationPart","updateToolCallResult","handleInputChange","debounce","time","timerId","flatten","values","autocompleteId","getItemsCount","collections","sum","collection","items","isPrimitive","first","second","_i","_Object$keys","userAgents","segment","version","createClickedEvent","_ref$items","__autocomplete_indexName","positions","objectID","queryID","__autocomplete_queryID","algoliaSource","arr","_arrayWithHoles","iterator","_s","_x","_r","_arr","_n","_d","return","_iterableToArrayLimit","o","minLen","_arrayLikeToArray","_unsupportedIterableToArray","_nonIterableRest","arr2","_excluded2","_toConsumableArray","_arrayWithoutHoles","iter","_iterableToArray","_nonIterableSpread","excluded","sourceKeys","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","ownKeys","object","enumerableOnly","symbols","sym","getOwnPropertyDescriptor","enumerable","_objectSpread","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","hint","prim","toPrimitive","res","String","_toPrimitive","_toPropertyKey","configurable","writable","mapToInsightsParamsApi","params","param","objectIDs","_ref2","createSearchInsightsApi","searchInsights","_split$map2","major","minor","canSendHeaders","sendToInsights","payloads","_items$0$__autocomple","__autocomplete_algoliaCredentials","appId","apiKey","init","setAuthenticatedUserToken","authenticatedUserToken","setUserToken","userToken","clickedObjectIDsAfterSearch","clickedObjectIDs","_len2","_key2","clickedFilters","_len3","_key3","convertedObjectIDsAfterSearch","_len4","_key4","convertedObjectIDs","_len5","_key5","convertedFilters","_len6","_key6","viewedObjectIDs","_len7","_key7","acc","chunkSize","payload","_ref5","viewedFilters","_len8","_key8","createViewedEvents","itemsByIndexName","_acc$current$__autoco","indexName","isAlgoliaInsightsHit","hit","ALGOLIA_INSIGHTS_VERSION","ALGOLIA_INSIGHTS_SRC","sendViewedObjectIDs","onItemsChange","insights","insightsEvents","eventName","createAlgoliaInsightsPlugin","_getOptions","_ref8","getAlgoliaSources","context","onSelect","_ref9","onActive","__autocomplete_clickAnalytics","getOptions","providedInsightsClient","insightsClient","insightsInitParams","onSelectEvent","onActiveEvent","safelyRunOnBrowser","pointer","AlgoliaAnalyticsObject","queue","environment","errorMessage","script","src","console","appendChild","loadInsights","partial","previousItems","debouncedOnStateChange","isOpen","setContext","setInsightsContext","algoliaInsightsPlugin","__algoliaSearchParameters","clickAnalytics","normalizeUserToken","_error","getItems","_ref6","onStateChange","_ref7","__autocomplete_pluginOptions","_context$algoliaInsig","__automaticInsights","createInternalCancelablePromise","onfulfilled","onrejected","createCallback","finally","onfinally","onCancelList","cancel","isCanceled","cancelable","onResult","_waitPromise","_hasWaitPromiseResolved","createCancelablePromiseList","list","add","cancelablePromise","cancelAll","isEmpty","race","getNextActiveItemId","moveAmount","baseIndex","itemCount","defaultActiveItemId","numericIndex","allowArrayLike","F","normalCompletion","didErr","_e2","getPluginSubmitPromise","plugins","pendingRequests","waitUntilComplete","timeouts","_plugin$__autocomplet","_plugin$__autocomplet2","_plugin$__autocomplet3","awaitSubmit","getActiveItem","collectionIndex","collectionsCount","activeItemId","getCollectionFromActiveItemId","isOffsetFound","previousItemsOffset","currentCollection","getRelativeActiveItemId","itemInputValue","getItemInputValue","itemUrl","getItemUrl","getAutocompleteElementId","autocompleteInstanceId","elementId","sourceId","Boolean","join","replace","regex","getNativeEvent","nativeEvent","createStore","reducer","onStoreStateChange","getState","dispatch","action","prevState","getDefaultProps","pluginSubscribers","_props$id","debug","openOnFocus","enterKeyHint","ignoreCompositionEvents","placeholder","autoFocus","stallThreshold","shouldPanelOpen","reshape","sources","query","completion","_props$onStateChange","_x$onStateChange","onSubmit","_props$onSubmit","_x$onSubmit","onReset","_props$onReset","_x$onReset","getSources","plugin","seenSourceIds","maybeSource","defaultSource","setIsOpen","onResolve","__default","normalizedSource","getNormalizedSources","nested","_x$onSelect","_x$onActive","_x$onResolve","navigate","location","assign","navigateNewTab","windowReference","open","focus","navigateNewWindow","isDescription","preResolve","itemsOrDescription","description","contextParameters","requesterId","_state$context$key","requests","queries","transformResponse","searchClient","container","_container$items","maybeDescription","responses","postResolve","store","rawResults","matches","results","transform","hits","facetHits","_facetHits","facetHit","label","count","_highlightResult","highlighted","basePromiseId","latestResolvedId","latestResolvedValue","lastStalledId","runConcurrentSafePromise","currentPromiseId","onInput","_ref$nextState","nextState","refresh","setters","setCollections","setQuery","setActiveItemId","setStatus","_nextState$isOpen","_request","_store$getState$conte","some","_automaticInsights","isSearchResponseWithAutomaticInsightsFlag","originalSourcesBySourceId","sourcesBySourceId","_nextState$isOpen2","isPanelOpen","highlightedItem","_excluded3","_excluded4","_excluded5","_excluded6","getPropGetters","getEnvironmentProps","providedProps","inputElement","formElement","panelElement","onMouseDownOrTouchStart","contextNode","parent","child","contains","onTouchStart","onMouseDown","onTouchMove","activeElement","blur","getRootProps","rest","getFormProps","_providedProps$inputE","noValidate","waitForSubmit","_providedProps$inputE2","getLabelProps","htmlFor","getInputProps","_props$environment$na","onFocus","_ref3$maxLength","maxLength","activeItem","shouldFallbackKeyHint","userAgent","match","isSamsung","autoComplete","autoCorrect","autoCapitalize","spellCheck","onChange","currentTarget","isComposing","onCompositionEnd","onKeyDown","triggerScrollIntoView","nodeItem","getElementById","scrollIntoViewIfNeeded","scrollIntoView","triggerOnActive","nextActiveItemId","metaKey","ctrlKey","shiftKey","altKey","_onKeyDown","onBlur","onClick","getPanelProps","onMouseLeave","getListProps","getItemProps","__autocomplete_id","onMouseMove","_item","_source","getMetadata","_options$__autocomple","_options$__autocomple2","_options$__autocomple3","optionsKey","__autocomplete_metadata","extraOptions","ua","getCompletion","_getActiveItem","stateReducer","_nextState","createAutocomplete","subscribers","_state$context","_state$context$algoli","isAlgoliaInsightsPluginEnabled","subscribePlugins","baseItemId","getAutocompleteSetters","propGetters","Event","_plugin$subscribe","insightsParams","_environment$navigato","_environment$navigato2","metadataContainer","headRef","querySelector","injectMetadata","ASK_AI_API_URL","TOKEN_KEY","isExpired","token","_decode","b64","atob","exp","_unused","inflight","getValidToken","_asyncToGenerator","_regeneratorRuntime","mark","_callee","assistantId","_context","sessionStorage","getItem","abrupt","json","setItem","postFeedback","_callee2","thumbs","_context2","Headers","sent","_x2","AlgoliaLogo","_translations$powered","poweredByText","href","hostname","rel","rx","ry","CommandIcon","ariaLabel","Footer","_ref$isAskAiActive","isAskAiActive","_translations$selectT","selectText","_translations$selectK","selectKeyAriaLabel","_translations$submitQ","submitQuestionText","_translations$navigat","navigateText","_translations$navigat2","navigateUpKeyAriaLabel","_translations$navigat3","navigateDownKeyAriaLabel","_translations$closeTe","closeText","_translations$backToS","backToSearchText","_translations$closeKe","closeKeyAriaLabel","points","Hit","LoadingIcon","strokeOpacity","fillRule","attributeName","to","dur","repeatCount","SparklesIcon","RecentIcon","CloseIcon","AlertIcon","SelectIcon","LvlIcon","SourceIcon","ContentIcon","AnchorIcon","x1","x2","y1","y2","StarIcon","ErrorIcon","NoResultsIcon","defaultAggregatedToolCallParts","before","lastSeparator","after","AggregatedSearchBlock","onSearchQueryClick","aggregatedToolCallNode","aggregatedToolCallText","_ref2$before","_ref2$separator","_ref2$lastSeparator","_ref2$after","q","idx","tabIndex","_getDefaults","breaks","extensions","gfm","hooks","pedantic","renderer","silent","tokenizer","walkTokens","_defaults","changeDefaults","newDefaults","escapeHtml","html","marked","Renderer","_ref$lang","lang","escaped","languageClass","safeCode","encodedCode","encodeURIComponent","link","title","titleAttr","hrefAttr","textEscaped","MemoizedMarkdown","memo","copyButtonText","copyButtonCopiedText","isStreaming","containerRef","querySelectorAll","btn","textContent","classList","remove","handleClick","_btn$getAttribute","closest","encoded","getAttribute","clipboard","writeText","decodeURIComponent","original","dangerouslySetInnerHTML","__html","displayName","AskAiScreenHeader","disclaimerText","AskAiExchangeCard","exchange","askAiStreamError","isLastExchange","loadingStatus","conversations","onFeedback","userMessage","assistantMessage","showActions","urlsToDisplay","markdownLinkRegex","urlRegex","links","seen","exec","extractLinksFromText","displayParts","aggregatedParts","_part$toolInvocation","_part$toolInvocation2","j","_candidate$toolInvoca","_candidate$toolInvoca2","candidate","_candidate$toolInvoca3","trim","groupConsecutiveToolResults","thinkingText","_assistantMessage$par","_toolInvocation$args","_toolInvocation$args4","preToolCallText","duringToolCallText","afterToolCallText","_toolInvocation$args2","_toolInvocation$args3","AskAiScreenFooterActions","latestAssistantMessageContent","AskAiSourcesPanel","relatedSourcesText","initialFeedback","_conversations$getOne","_message$feedback","getOne","feedback","_React$useState2","setFeedback","_React$useState4","saving","setSaving","_React$useState6","savingError","setSavingError","handleFeedback","t0","finish","_translations$likeBut","likeButtonTitle","_translations$dislike","dislikeButtonTitle","_translations$thanksF","thanksForFeedbackText","LikeButton","DislikeButton","CopyButton","RelatedSourceIcon","AskAiScreen","_ref6$translations","_translations$disclai","exchanges","grouped","_messages","handleSearchQueryClick","onAskAiToggle","reverse","_translations$copyBut","copyButtonTitle","_translations$copyBut2","isCopied","setIsCopied","disabled","ErrorScreen","_translations$titleTe","titleText","_translations$helpTex","helpText","NoResultsScreen","_translations$noResul","noResultsText","_translations$suggest","suggestedQueryText","_translations$reportM","reportMissingResultsText","_translations$reportM2","reportMissingResultsLinkText","searchSuggestions","canHandleAskAi","search","toLowerCase","inputRef","getMissingResultsUrl","getPropertyByPath","path","Snippet","attribute","_ref$tagName","tagName","Results","AskAiButton","Result","renderIcon","renderAction","onItemClick","hitComponent","actionRef","__docsearch_parent","onAnimationEnd","_actionRef$current","hierarchy","runDeleteTransition","cb","runFavoriteTransition","_ref3$askAiPlaceholde","askAiPlaceholder","groupBy","predicate","maxResultsPerGroup","identity","isModifierEvent","button","regexHighlightTags","regexHasHighlightTags","removeHighlightTags","_internalDocSearchHit","_hit$_highlightResult","internalDocSearchHit","lvl0","ResultsScreen","_collection$items","resultsFooterComponent","StartScreen","_translations$recentS","recentSearchesTitle","_translations$saveRec","saveRecentSearchButtonTitle","_translations$removeR","removeRecentSearchButtonTitle","_translations$favorit","favoriteSearchesTitle","_translations$removeF","removeFavoriteSearchButtonTitle","_translations$recentC","recentConversationsTitle","_translations$removeR2","removeRecentConversationButtonTitle","stopPropagation","favoriteSearches","recentSearches","ScreenState","_props$state","askAiFetchError","askAiScreen","errorScreen","hasCollections","resultsScreen","noResultsScreen","startScreen","_prevProps","nextProps","BackIcon","SearchBox","_translations$clearBu","clearButtonTitle","_translations$clearBu2","clearButtonAriaLabel","_translations$closeBu","closeButtonText","_translations$closeBu2","closeButtonAriaLabel","_translations$searchI","searchInputLabel","_translations$backToK","backToKeywordSearchButtonText","_translations$backToK2","backToKeywordSearchButtonAriaLabel","_translations$placeho","placeholderTextAskAiStreaming","isFromSelection","select","baseInputProps","blockedKeys","origOnKeyDown","origOnChange","isAskAiStreaming","askAiStatus","isKeywordSearchLoading","inputProps","onAskAgain","hidden","onClose","createStorage","localStorage","removeItem","isLocalStorageSupported","createStoredSearches","_ref$limit","limit","storage","_snippetResult","isQueryAlreadySaved","unshift","getAll","createBrowserLocalStorageCache","namespaceKey","getStorage","getNamespace","setNamespace","namespace","defaultValue","events","miss","timeToLive","filteredNamespaceWithoutOldFormattedCacheItems","entries","timestamp","cacheItem","currentTimestamp","exists","clear","useSearchClient","transformSearchClient","client","createLiteClient","connect","write","logger","requester","send","XMLHttpRequest","setRequestHeader","isTimedOut","u","connectTimeout","onreadystatechange","readyState","OPENED","responseTimeout","responseText","algoliaAgents","authMode","responsesCache","createMemoryCache","requestsCache","serializable","hostsCache","createFallbackableCache","caches","apiClientVersion","liteClient","addAlgoliaAgent","transporter","algoliaAgent","buildQuerySources","sourcesState","searchParameters","snippetLength","_ref6$transformItems","transformItems","saveRecentSearch","insightsActive","_yield$searchClient$s","firstResult","nbHits","attributesToRetrieve","attributesToSnippet","snippetEllipsisText","highlightPreTag","highlightPostTag","hitsPerPage","lvl1","groupedHits","potentialParent","siblingItem","flat","DocSearchModal","_ref10","_ref3$limit","askAi","_ref10$onClose","_ref10$transformItems","_ref10$hitComponent","_ref10$resultsFooterC","_ref10$initialScrollY","initialScrollY","_ref10$transformSearc","_ref10$disableUserPer","disableUserPersonalization","_ref10$initialQuery","initialQuery","initialQueryFromProp","_ref10$translations","_ref10$insights","_ref10$isAskAiActive","_ref10$canHandleAskAi","footerTranslations","footer","searchBoxTranslations","searchBox","screenStateTranslations","setState","modalRef","formElementRef","dropdownRef","initialQueryFromSelection","getSelection","_x$messages","_messages$","addFeedback","conv","c","_c$messages","m","msg","_conv$messages","_c$messages2","askAiConfig","askAiConfigurationId","setAskAiStreamError","_useChat","_fetch","_x3","_ref11","_x4","_x5","streamError","prevStatus","anchor","lvl2","lvl3","lvl4","lvl5","lvl6","url_without_anchor","buildDummyAskAiHit","sendItemClickEvent","insightsItem","insightsClickParams","autocompleteRef","handleAskAiToggle","toggle","el","scrollTo","top","behavior","scrollTop","handleFeedbackSubmit","_ref12","_callee3","_conversations$addFee","_context3","_x6","_x7","_ref13","noQuerySources","buildNoQuerySources","recentConversationSource","_ref14","querySourcesState","algoliaSourcesPromise","askAiSource","_ref15","algoliaSources","autocomplete","_getEnvironmentProps","useTouchEvents","focusableElements","firstElement","lastElement","trapFocus","_window$scrollTo","_window","scrollBarWidth","innerWidth","clientWidth","style","marginRight","matchMedia","setFullViewportHeight","vh","innerHeight","setProperty","showDocsearchDropdown","useDocSearchKeyboardEvents","onOpen","searchButtonRef","_event$key","element","composedPath","isContentEditable","isEditingContent","fromCharCode","keyCode","_props$translations","_props$translations4","_props$translations5","_props$translations2","_props$translations3","_objectDestructuringEmpty","setInitialQuery","setIsAskAiActive","currentPlaceholder","modal","placeholderText","placeholderTextAskAi","askAitoggle","createPortal","scrollY"],"mappings":";m1ZAEO,SAASA,IACd,OACEC,EAAAC,cAAA,MAAA,CAAKC,MAAM,KAAKC,OAAO,KAAKC,QAAQ,YAAYC,KAAK,OAAOC,MAAM,8BAChEN,EAAAC,cAAA,OAAA,CACEM,EAAE,ijGACFF,KAAK,iBAIb,CAEO,SAASG,IACd,OACER,EAAAC,cAAA,MAAA,CAAKC,MAAM,KAAKC,OAAO,KAAKC,QAAQ,YAAYC,KAAK,OAAOC,MAAM,8BAChEN,EAAAC,cAAA,OAAA,CACEM,EAAE,0NACFF,KAAK,iBAIb,CAEO,SAASI,IACd,OACET,EAAAC,cAAA,MAAA,CAAKC,MAAM,KAAKC,OAAO,KAAKC,QAAQ,YAAYC,KAAK,OAAOC,MAAM,8BAChEN,EAAAC,cAAA,OAAA,CACEM,EAAE,+rEACFF,KAAK,iBAIb,CC1BO,SAASK,EAAUC,GAAsE,IAAAC,EAAAD,EAAnEE,KAAAA,OAAOC,IAAHF,EAAG,GAAEA,EAAAG,EAAAJ,EAAEK,MAAAA,OAAQF,IAAHC,EAAG,eAAcA,EAC5D,OACEf,EAAAC,cAAA,MAAA,CAAKC,MAAOW,EAAMV,OAAQU,EAAMI,UAAU,wBAAwBb,QAAQ,YAAY,cAAY,QAChGJ,EAAAC,cAAA,SAAA,CAAQiB,GAAG,KAAKC,GAAG,KAAKC,EAAE,IAAIC,OAAQL,EAAOX,KAAK,OAAOiB,YAAY,QACrEtB,EAAAC,cAAA,OAAA,CAAMM,EAAE,iBAAiBc,OAAQL,EAAOX,KAAK,OAAOkB,cAAc,QAAQC,eAAe,UAG/F,CCNO,IAAMC,EAAW,SAAHd,GAAuC,IAAjCe,EAAKf,EAALe,MACzBC,EAAAA,WAAU,WACR,GAAID,EAAO,CACT,IAAME,EAAgBC,SAASC,gBAAgBC,QAAQL,MACvD,GAAIA,IAAUE,EAEZ,OADAC,SAASC,gBAAgBC,QAAQL,MAAQA,EAClC,gBACiBZ,IAAlBc,SAAoCC,SAASC,gBAAgBC,QAAQL,MACpEG,SAASC,gBAAgBC,QAAQL,MAAQE,CAC/C,CAEL,CAEF,GAAG,CAACF,GACN,qBCLMM,EAAqB,OAOdC,IAAAA,EAAkBjC,EAAMkC,YACnC,SAAAvB,EAAkCwB,GAAQ,IAAAC,EAAAzB,EAAvC0B,aAAAA,OAAYvB,IAAAsB,EAAG,CAAA,EAAEA,EAAKE,EAAKC,EAAA5B,EAAA6B,GAC5BC,EAA8DJ,EAAtDK,WAAAA,OAAa5B,IAAH2B,EAAG,SAAQA,EAAAE,EAAiCN,EAA/BO,gBAAAA,OAAkB9B,IAAH6B,EAAG,SAAQA,EAEuCE,EAAAC,EAA1EC,EAAQA,SAA6D,MAAK,GAAzFC,EAAGH,EAAA,GAAEI,EAAMJ,EAAA,GAClBpB,EAAS,CAAEC,MAAOY,EAAMZ,QACxBC,EAAAA,WAAU,WACiB,oBAAduB,YAVR,0BAA0BC,KAAKD,UAAUE,UAWxBH,EAdD,KAc4BA,EAAOjB,GAEvD,GAAE,IAEH,IAKkDqB,EAAAP,EAJhDE,IAAQhB,EAEH,CAACA,EAAoB,UAAWhC,EAAAC,cAACQ,EAAgB,OAEjD,CAAC,OAAQ,OAAQT,EAAAC,cAACF,EAAa,OAAY,GAL3CuD,EAAiBD,EAAA,GAAEE,EAAgBF,EAAA,GAAEG,EAAcH,EAAA,GAOpDI,EAAQ,GAAAC,OAAMH,EAAoB,MACxC,OACEvD,EAAAC,cAAA,SAAA0D,EAAA,CACEC,KAAK,SACL3C,UAAU,6BACV,aAAA,GAAAyC,OAAed,QAAec,OAAKD,EAAY,KAC/C,oBAAmBA,GACfnB,EAAK,CACTH,IAAKA,IAELnC,EAAAC,cAAA,OAAA,CAAMgB,UAAU,8BACdjB,EAAAC,cAACS,QACDV,EAAAC,cAAA,OAAA,CAAMgB,UAAU,gCAAgCyB,IAGlD1C,EAAAC,cAAA,OAAA,CAAMgB,UAAU,yBACL,OAAR+B,GACChD,EAAAC,cAAAD,EAAA6D,SACE7D,KAAAA,EAAAC,cAAC6D,EAAkB,CAACC,YAAaT,GAAoBE,GACrDxD,EAAAC,cAAC6D,EAAkB,CAACC,YAAY,KAC9B/D,EAAAC,cAACO,WAOf,IAOF,SAASsD,EAAkBE,GAA2F,IAAxFD,EAAWC,EAAXD,YAAaE,EAAQD,EAARC,SACQC,EAAApB,EAAfC,EAAQA,UAAC,GAAM,GAA1CoB,EAASD,EAAA,GAAEE,EAAYF,EAAA,GAkC9B,OAhCAvC,EAAAA,WAAU,WACR,GAAKoC,EAyBL,OAHAM,OAAOC,iBAAiB,UAAWC,GACnCF,OAAOC,iBAAiB,QAASE,GAE1B,WACLH,OAAOI,oBAAoB,UAAWF,GACtCF,OAAOI,oBAAoB,QAASD,EACrC,EAxBD,SAASD,EAAcG,GACjBA,EAAE1B,MAAQe,GACZK,GAAa,EAEjB,CAEA,SAASI,EAAYE,GAEjBA,EAAE1B,MAAQe,GAIA,SAAVW,EAAE1B,KAEFoB,GAAa,EAEjB,CASF,GAAG,CAACL,IAGF/D,EAAAC,cAAA,MAAA,CACEgB,UACEkD,EACI,qDACA,wBAA0C,SAAhBJ,EAAyB,8BAAgC,KAGxFE,EAGP,CC1HA,IAEIU,EAFAC,EAAS,kBACTC,EAASC,OAAOC,IAAIH,GAEpBI,EAAc,MAAMA,UAAoBC,MAS1C,WAAAC,EACEC,KAAMC,EAAMC,QACZA,EAAOC,MACPA,IAEAC,MAAMF,GACNG,KAAKb,IAAM,EACXa,KAAKL,KAAOC,EACZI,KAAKF,MAAQA,CACjB,CAME,iBAAOG,CAAWC,GAChB,OAAOV,EAAYW,UAAUD,EAAOd,EACxC,CACE,gBAAOe,CAAUD,EAAOE,GACtB,MAAMC,EAAef,OAAOC,IAAIa,GAChC,OAAgB,MAATF,GAAkC,iBAAVA,GAAsBG,KAAgBH,GAAwC,kBAAxBA,EAAMG,KAAuD,IAAxBH,EAAMG,EACpI,GAEAlB,EAAKE,EACL,IAAIiB,EAAad,EAyDjB,SAASe,EAAgBL,GACvB,OAAa,MAATA,EACK,gBAEY,iBAAVA,EACFA,EAELA,aAAiBT,MACZS,EAAML,QAERW,KAAKC,UAAUP,EACxB,CAGA,IAGIQ,EAHAC,EAAQ,0BACRC,EAAU,mBAAmBD,IAC7BE,EAAUvB,OAAOC,IAAIqB,GAErBE,EAAuB,cAAcR,EACvC,WAAAZ,EAAYG,QACVA,EAAOC,MACPA,EAAKiB,SACLA,IAEAhB,MAAM,CAAEJ,KAAMgB,EAAOd,UAASC,UAC9BE,KAAKU,IAAO,EACZV,KAAKe,SAAWA,CACpB,CACE,iBAAOd,CAAWC,GAChB,OAAOI,EAAWH,UAAUD,EAAOU,EACvC,GAEAF,EAAMG,EA4CN,IAGIG,EAHAC,EAAQ,oBACRC,EAAU,mBAAmBD,IAC7BE,EAAU7B,OAAOC,IAAI2B,GAErBE,EAAiB,cAAcd,EACjC,WAAAZ,EAAY2B,KAAEA,EAAIvB,MAAEA,IAClBC,MAAM,CACJJ,KAAMsB,EACNpB,QAAS,8BAA8BwB,sBAC5Bd,EAAgBT,KAC3BA,UAEFE,KAAKgB,IAAO,EACZhB,KAAKqB,KAAOA,CAChB,CACE,iBAAOpB,CAAWC,GAChB,OAAOI,EAAWH,UAAUD,EAAOgB,EACvC,GAEAF,EAAMG,EAsGN,IAGIG,EAHAC,EAAS,yBACTC,GAAW,mBAAmBD,IAC9BE,GAAWnC,OAAOC,IAAIiC,IAiC1BF,EAAOG,GACP,IAAIC,GAhCuB,MAAMC,UAA6BrB,EAC5D,WAAAZ,EAAYkC,MAAEA,EAAK9B,MAAEA,IACnBC,MAAM,CACJJ,KAAM4B,EACN1B,QAAS,kCAAkCW,KAAKC,UAAUmB,uBAC/CrB,EAAgBT,KAC3BA,UAEFE,KAAKsB,IAAQ,EACbtB,KAAK4B,MAAQA,CACjB,CACE,iBAAO3B,CAAWC,GAChB,OAAOI,EAAWH,UAAUD,EAAOsB,GACvC,CAWE,WAAOK,EAAKD,MACVA,EAAK9B,MACLA,IAEA,OAAO6B,EAAqB1B,WAAWH,IAAUA,EAAM8B,QAAUA,EAAQ9B,EAAQ,IAAI6B,EAAqB,CAAEC,QAAO9B,SACvH,8KClUA,IAAMgC,EAA8B,oBAAXC,OACnBC,EAAiB,gJACjBC,EAAuB,iKAE7B,SAASC,EAAQb,EAAMc,EAASC,GAEf,MAAXA,GACc,OAAZD,GAAuC,WAAnBE,EAAOF,KAC7BC,EAAUD,EACVA,OAAU7G,GAIVwG,GAAaC,OAAOO,SAASjB,KAC/BA,EAAOA,EAAKkB,YAIVlB,GAA+B,QAAvBA,EAAKmB,WAAW,KAC1BnB,EAAOA,EAAKoB,MAAM,IAIpB,IAAMC,EAAMlC,KAAKmC,MAAMtB,EAAMc,GAG7B,GAAY,OAARO,GAA+B,WAAfL,EAAOK,GACzB,OAAOA,EAGT,IAAME,EAAeR,GAAWA,EAAQQ,aAAgB,QAClDC,EAAqBT,GAAWA,EAAQS,mBAAsB,QAGpE,GAAoB,WAAhBD,GAAkD,WAAtBC,EAC9B,OAAOH,EAGT,GAAoB,WAAhBE,GAAkD,WAAtBC,GAC9B,IAAkC,IAA9Bb,EAAerE,KAAK0D,KAAuD,IAApCY,EAAqBtE,KAAK0D,GACnE,OAAOqB,OAEJ,GAAoB,WAAhBE,GAAkD,WAAtBC,GACrC,IAAkC,IAA9Bb,EAAerE,KAAK0D,GACtB,OAAOqB,OAGT,IAAwC,IAApCT,EAAqBtE,KAAK0D,GAC5B,OAAOqB,EAKX,OAAOI,EAAOJ,EAAK,CAAEE,YAAAA,EAAaC,kBAAAA,EAAmBE,KAAMX,GAAWA,EAAQW,MAChF,CAEA,SAASD,EAAQJ,GAGf,IAHuF,IAAAvH,EAAA6H,UAAAC,OAAA,QAAA3H,IAAA0H,UAAA,GAAAA,UAAA,GAAJ,CAAE,EAAAE,EAAA/H,EAA/DyH,YAAAA,OAActH,IAAH4H,EAAG,QAAOA,EAAAC,EAAAhI,EAAE0H,kBAAAA,OAAoBvH,IAAH6H,EAAG,QAAOA,EAAEJ,EAAI5H,EAAJ4H,KACtEK,EAAO,CAACV,GAELU,EAAKH,QAAQ,CAClB,IAAMI,EAAQD,EACdA,EAAO,GAAA,IAEiBE,EAFjBC,EAAAC,EAEYH,GAAK,IAAxB,IAAAE,EAAAE,MAAAH,EAAAC,EAAAG,KAAAC,MAA0B,CAAA,IAAfC,EAAIN,EAAA1B,MACb,GAAoB,WAAhBgB,GAA4BiB,OAAOC,UAAUC,eAAeC,KAAKJ,EAAM,aAAc,CACvF,IAAa,IAATb,EACF,OAAO,KACF,GAAoB,UAAhBH,EACT,MAAM,IAAIqB,YAAY,uDAGjBL,EAAKM,SACpB,CAEM,GAA0B,WAAtBrB,GACAgB,OAAOC,UAAUC,eAAeC,KAAKJ,EAAM,gBAC3CC,OAAOC,UAAUC,eAAeC,KAAKJ,EAAKlE,YAAa,aAAc,CACvE,IAAa,IAATqD,EACF,OAAO,KACF,GAA0B,UAAtBF,EACT,MAAM,IAAIoB,YAAY,uDAGjBL,EAAKlE,WACpB,CAEM,IAAK,IAAMlC,KAAOoG,EAAM,CACtB,IAAMhC,EAAQgC,EAAKpG,GACfoE,GAA0B,WAAjBS,EAAOT,IAClBwB,EAAKe,KAAKvC,EAEpB,CACA,CAAA,CAAA,MAAAwC,GAAAb,EAAArE,EAAAkF,EAAA,CAAA,QAAAb,EAAAc,GAAA,CACA,CACE,OAAO3B,CACT,CAEA,SAASC,EAAOtB,EAAMc,EAASC,GAC7B,IAAMkC,EAAkB7E,MAAM6E,gBAC9B7E,MAAM6E,gBAAkB,EACxB,IACE,OAAOpC,EAAOb,EAAMc,EAASC,EACjC,CAAY,QACR3C,MAAM6E,gBAAkBA,CAC5B,CACA,QAcAC,GAAAC,QAAiB7B,EACjB4B,GAAAC,QAAAC,QAAyB9B,EACzB4B,GAAAC,QAAA7B,MAAuBA,EACvB4B,GAAAC,QAAAE,UAfA,SAAoBrD,EAAMc,GACxB,IAAMmC,EAAkB7E,MAAM6E,gBAC9B7E,MAAM6E,gBAAkB,EACxB,IACE,OAAOpC,EAAOb,EAAMc,EAAS,CAAEY,MAAM,GACtC,CAAC,MAAO4B,GACP,OAAO,IACX,CAAY,QACRlF,MAAM6E,gBAAkBA,CAC5B,CACA,EAMAC,GAAAC,QAAAI,KAAsB9B,0BC0ClB+B,GAlBoB,GACtBC,SACAzJ,KAAM0J,EAAc,GACpBC,WAAW,iEACXC,YAAY,KACV,MACF,MAAMC,EClJa,SAACF,GAA+B,IAArBD,EAAW/B,UAAAC,OAAA,QAAA3H,IAAA0H,UAAA,GAAAA,UAAA,GAAG,GAC5C,OAAO,WAIL,IAJ6B,IACzBmC,EAAK,GAELC,EAAW,GAHLpC,UAAAC,OAAA,QAAA3H,IAAA0H,UAAA,GAAAA,UAAA,GAAG+B,GAINK,KAELD,GAAMH,EAAUK,KAAKC,SAAWN,EAAS/B,OAAU,GAErD,OAAOkC,CACR,CACH,CDuIoBI,CAAeP,EAAUD,GAC3C,GAAc,MAAVD,EACF,OAAOI,EAET,GAAIF,EAASQ,SAASP,GACpB,MAAM,IAAInE,EAAqB,CAC7BC,SAAU,YACVlB,QAAS,kBAAkBoF,wCAAgDD,QAG/E,OAAQ3J,GAAS,GAAGyJ,IAASG,IAAYC,EAAU7J,IAAO,EAE3CoK,GAmNbC,GAAkBpG,OAAOC,IAAI,uBAOjC,SAASoG,GAAY/D,GACnB,OAJF,SAAqBA,GACnB,MAAwB,iBAAVA,GAAgC,OAAVA,GAAkB8D,MAAmB9D,IAAoC,IAA3BA,EAAM8D,KAA6B,aAAc9D,CACrI,CAESgE,CAAYhE,GAASA,GAERiE,EAF6BjE,EAPhCkE,EAUClE,IAChB,MAAMmE,EAASF,EAAUnB,UAAU9C,GACnC,OAAOmE,EAAOC,QAAU,CAAEA,SAAS,EAAMpE,MAAOmE,EAAOE,MAAS,CAAED,SAAS,EAAO9F,MAAO6F,EAAO7F,MAAO,EAXlG,CAAEwF,CAACA,KAAkB,EAAMI,aAQpC,IAAsBD,EATHC,CAQnB,CA8DA,SAASI,IAAc7E,KACrBA,EAAI8E,OACJA,IAEA,IACE,MAAMvE,EAAQwE,GAAWzD,MAAMtB,GAC/B,GAAc,MAAV8E,EACF,MAAO,CAAEH,SAAS,EAAMpE,QAAOyE,SAAUzE,GAE3C,MAAM0E,EApDV,UAA2B1E,MACzBA,EAAKuE,OACLA,IAEA,MAAMI,EAAaZ,GAAYQ,GAC/B,IACE,GAA2B,MAAvBI,EAAWT,SACb,MAAO,CAAEE,SAAS,EAAMpE,SAE1B,MAAMmE,EAASQ,EAAWT,SAASlE,GACnC,OAAImE,EAAOC,QACFD,EAEF,CACLC,SAAS,EACT9F,MAAOwB,GAAoBG,KAAK,CAAED,QAAO9B,MAAOiG,EAAO7F,QAE1D,CAAC,MAAOA,GACP,MAAO,CACL8F,SAAS,EACT9F,MAAOwB,GAAoBG,KAAK,CAAED,QAAO9B,MAAOI,IAEtD,CACA,CA6B6BsG,CAAkB,CAAE5E,QAAOuE,WACpD,OAAOG,EAAiBN,QAAU,IAAKM,EAAkBD,SAAUzE,GAAU0E,CAC9E,CAAC,MAAOpG,GACP,MAAO,CACL8F,SAAS,EACT9F,MAAOkB,EAAenB,WAAWC,GAASA,EAAQ,IAAIkB,EAAe,CAAEC,OAAMvB,MAAOI,IAE1F,CACA,CE5QsB,IAAIuG,IAAI,gEClM9B,IAAIC,GAAiB,CACnBC,KAAM,IACNhH,KAAM,OACNgD,MAAQf,IACN,GAAqB,iBAAVA,EACT,MAAM,IAAInC,MAAM,uCAElB,MAAO,CAAErB,KAAM,OAAQwD,QAAO,GAG9BgF,GAAkB,CACpBD,KAAM,IACNhH,KAAM,QACNgD,MAAQf,IACN,GAAqB,iBAAVA,EACT,MAAM,IAAInC,MAAM,wCAElB,MAAO,CAAErB,KAAM,QAASwD,QAAO,GAG/BiF,GAA6B,CAC/BF,KAAM,IACNhH,KAAM,oBACNgD,MAAQf,IACN,KAAa,MAATA,GAAkC,iBAAVA,GAAwB,OAAQA,GAAY,SAAUA,GAAY,YAAaA,GAA8B,iBAAbA,EAAMuD,IAAyC,iBAAfvD,EAAMkF,MAAoC,cAAflF,EAAMkF,MAAyBC,MAAMC,QAAQpF,EAAMqF,UAAarF,EAAMqF,QAAQC,OAClQC,GAAiB,MAARA,GAAgC,iBAATA,GAAqB,SAAUA,GAAsB,SAAdA,EAAK/I,MAAmB,SAAU+I,GAAqB,MAAbA,EAAK9F,MAAqC,iBAAd8F,EAAK9F,MAAqB,UAAW8F,EAAK9F,MAAmC,iBAApB8F,EAAK9F,KAAKO,SAEjN,MAAM,IAAInC,MACR,4FAGJ,MAAO,CACLrB,KAAM,oBACNwD,QACD,GAGDwF,GAAiC,CACnCT,KAAM,IACNhH,KAAM,yBACNgD,MAAQf,IACN,GAAa,MAATA,GAAkC,iBAAVA,KAAwB,aAAcA,MAAY,cAAeA,IAAoC,iBAAnBA,EAAMyF,UAAoD,iBAApBzF,EAAM0F,UACxJ,MAAM,IAAI7H,MACR,+FAGJ,MAAO,CACLrB,KAAM,yBACNwD,MAAO,CACLyF,SAAUzF,EAAMyF,SAChBC,UAAW1F,EAAM0F,WAEpB,GAGDC,GAAwB,CAC1BZ,KAAM,IACNhH,KAAM,eACNgD,MAAQf,IACN,GAAa,MAATA,GAAkC,iBAAVA,KAAwB,SAAUA,MAAY,SAAUA,IAAgC,iBAAfA,EAAMkF,MAAoC,SAAflF,EAAMkF,KACpI,MAAM,IAAIrH,MACR,4EAGJ,MAAO,CACLrB,KAAM,eACNwD,QACD,GAmEL,SAAS4F,GAAQC,GACf,MAAMC,EAAQ,CAAC,QACf,IAAIC,GAAmB,EACnBC,EAAe,KACnB,SAASC,EAAkBC,EAAM1C,EAAG2C,GAEhC,OAAQD,GACN,IAAK,IACHH,EAAiBvC,EACjBsC,EAAMM,MACNN,EAAMvD,KAAK4D,GACXL,EAAMvD,KAAK,iBACX,MAEF,IAAK,IACL,IAAK,IACL,IAAK,IACHwD,EAAiBvC,EACjBwC,EAAexC,EACfsC,EAAMM,MACNN,EAAMvD,KAAK4D,GACXL,EAAMvD,KAAK,kBACX,MAEF,IAAK,IACHuD,EAAMM,MACNN,EAAMvD,KAAK4D,GACXL,EAAMvD,KAAK,iBACX,MAEF,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACHwD,EAAiBvC,EACjBsC,EAAMM,MACNN,EAAMvD,KAAK4D,GACXL,EAAMvD,KAAK,iBACX,MAEF,IAAK,IACHwD,EAAiBvC,EACjBsC,EAAMM,MACNN,EAAMvD,KAAK4D,GACXL,EAAMvD,KAAK,uBACX,MAEF,IAAK,IACHwD,EAAiBvC,EACjBsC,EAAMM,MACNN,EAAMvD,KAAK4D,GACXL,EAAMvD,KAAK,sBAKrB,CACE,SAAS8D,EAAwBH,EAAM1C,GACrC,OAAQ0C,GACN,IAAK,IACHJ,EAAMM,MACNN,EAAMvD,KAAK,6BACX,MAEF,IAAK,IACHwD,EAAiBvC,EACjBsC,EAAMM,MAId,CACE,SAASE,EAAuBJ,EAAM1C,GACpC,OAAQ0C,GACN,IAAK,IACHJ,EAAMM,MACNN,EAAMvD,KAAK,4BACX,MAEF,IAAK,IACHwD,EAAiBvC,EACjBsC,EAAMM,MAId,CACE,IAAK,IAAI5C,EAAI,EAAGA,EAAIqC,EAAMxE,OAAQmC,IAAK,CACrC,MAAM0C,EAAOL,EAAMrC,GAEnB,OADqBsC,EAAMA,EAAMzE,OAAS,IAExC,IAAK,OACH4E,EAAkBC,EAAM1C,EAAG,UAC3B,MACF,IAAK,sBACH,OAAQ0C,GACN,IAAK,IACHJ,EAAMM,MACNN,EAAMvD,KAAK,qBACX,MAEF,IAAK,IACHwD,EAAiBvC,EACjBsC,EAAMM,MAIV,MAEF,IAAK,4BACH,GACO,MADCF,EAEJJ,EAAMM,MACNN,EAAMvD,KAAK,qBAIf,MAEF,IAAK,oBACH,GACO,MADC2D,EAEJJ,EAAMM,MACNN,EAAMvD,KAAK,2BAIf,MAEF,IAAK,0BACH,GACO,MADC2D,EAEJJ,EAAMM,MACNN,EAAMvD,KAAK,8BAIf,MAEF,IAAK,6BACH0D,EAAkBC,EAAM1C,EAAG,6BAC3B,MAEF,IAAK,4BACH6C,EAAwBH,EAAM1C,GAC9B,MAEF,IAAK,gBACH,OAAQ0C,GACN,IAAK,IACHJ,EAAMM,MACNL,EAAiBvC,EACjB,MAEF,IAAK,KACHsC,EAAMvD,KAAK,wBACX,MAEF,QACEwD,EAAiBvC,EAGrB,MAEF,IAAK,qBACH,GACO,MADC0C,EAEJH,EAAiBvC,EACjBsC,EAAMM,WAINL,EAAiBvC,EACjByC,EAAkBC,EAAM1C,EAAG,4BAI/B,MAEF,IAAK,2BACH,OAAQ0C,GACN,IAAK,IACHJ,EAAMM,MACNN,EAAMvD,KAAK,4BACX,MAEF,IAAK,IACHwD,EAAiBvC,EACjBsC,EAAMM,MACN,MAEF,QACEL,EAAiBvC,EAIrB,MAEF,IAAK,2BACHyC,EAAkBC,EAAM1C,EAAG,4BAC3B,MAEF,IAAK,uBACHsC,EAAMM,MACNL,EAAiBvC,EACjB,MAEF,IAAK,gBACH,OAAQ0C,GACN,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACHH,EAAiBvC,EACjB,MAEF,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACH,MAEF,IAAK,IACHsC,EAAMM,MAC0B,6BAA5BN,EAAMA,EAAMzE,OAAS,IACvBiF,EAAuBJ,EAAM1C,GAEC,8BAA5BsC,EAAMA,EAAMzE,OAAS,IACvBgF,EAAwBH,EAAM1C,GAEhC,MAEF,IAAK,IACHsC,EAAMM,MAC0B,8BAA5BN,EAAMA,EAAMzE,OAAS,IACvBgF,EAAwBH,EAAM1C,GAEhC,MAEF,IAAK,IACHsC,EAAMM,MAC0B,6BAA5BN,EAAMA,EAAMzE,OAAS,IACvBiF,EAAuBJ,EAAM1C,GAE/B,MAEF,QACEsC,EAAMM,MAIV,MAEF,IAAK,iBAAkB,CACrB,MAAMG,EAAiBV,EAAMW,UAAUR,EAAcxC,EAAI,GACpD,QAAQiD,WAAWF,IAAoB,OAAOE,WAAWF,IAAoB,OAAOE,WAAWF,GAQlGR,EAAiBvC,GAPjBsC,EAAMM,MAC0B,8BAA5BN,EAAMA,EAAMzE,OAAS,GACvBgF,EAAwBH,EAAM1C,GACO,6BAA5BsC,EAAMA,EAAMzE,OAAS,IAC9BiF,EAAuBJ,EAAM1C,IAKjC,KACR,EAEA,CACE,IAAIW,EAAS0B,EAAMhF,MAAM,EAAGkF,EAAiB,GAC7C,IAAK,IAAIvC,EAAIsC,EAAMzE,OAAS,EAAGmC,GAAK,EAAGA,IAAK,CAE1C,OADcsC,EAAMtC,IAElB,IAAK,gBACHW,GAAU,IACV,MAEF,IAAK,oBACL,IAAK,0BACL,IAAK,4BACL,IAAK,sBACL,IAAK,6BACL,IAAK,4BACHA,GAAU,IACV,MAEF,IAAK,qBACL,IAAK,2BACL,IAAK,2BACHA,GAAU,IACV,MAEF,IAAK,iBAAkB,CACrB,MAAMoC,EAAiBV,EAAMW,UAAUR,EAAcH,EAAMxE,QACvD,OAAOoF,WAAWF,GACpBpC,GAAU,OAAOtD,MAAM0F,EAAelF,QAC7B,QAAQoF,WAAWF,GAC5BpC,GAAU,QAAQtD,MAAM0F,EAAelF,QAC9B,OAAOoF,WAAWF,KAC3BpC,GAAU,OAAOtD,MAAM0F,EAAelF,QAEhD,EAEA,CACE,OAAO8C,CACT,CA3X2B,CACzBW,GACAE,GACAC,GACAO,GACAG,IAgBoCe,KAAKC,GAASA,EAAK5B,OAyXzD,IAuOI6B,GAAkB,CAvOA,CACpB7B,KAAM,IACNhH,KAAM,OACNgD,MAAQf,IACN,GAAqB,iBAAVA,EACT,MAAM,IAAInC,MAAM,uCAElB,MAAO,CAAErB,KAAM,OAAQwD,QAAO,GAGb,CACnB+E,KAAM,IACNhH,KAAM,OACNgD,MAAQf,IACN,IAAKmF,MAAMC,QAAQpF,GACjB,MAAM,IAAInC,MAAM,uCAElB,MAAO,CAAErB,KAAM,OAAQwD,QAAO,GAGX,CACrB+E,KAAM,IACNhH,KAAM,QACNgD,MAAQf,IACN,GAAqB,iBAAVA,EACT,MAAM,IAAInC,MAAM,wCAElB,MAAO,CAAErB,KAAM,QAASwD,QAAO,GAGA,CACjC+E,KAAM,IACNhH,KAAM,sBACNgD,MAAQf,IACN,IAAKmF,MAAMC,QAAQpF,GACjB,MAAM,IAAInC,MAAM,sDAElB,MAAO,CAAErB,KAAM,sBAAuBwD,QAAO,GAGxB,CACvB+E,KAAM,IACNhH,KAAM,YACNgD,MAAQf,IACN,GAAa,MAATA,GAAkC,iBAAVA,KAAwB,eAAgBA,IAAsC,iBAArBA,EAAM6G,cAA6B,aAAc7G,IAAoC,iBAAnBA,EAAM8G,YAA2B,SAAU9G,IAAgC,iBAAfA,EAAM+G,KACvN,MAAM,IAAIlJ,MACR,4FAGJ,MAAO,CACLrB,KAAM,YACNwD,QACD,GAGsB,CACzB+E,KAAM,IACNhH,KAAM,cACNgD,MAAQf,IACN,GAAa,MAATA,GAAkC,iBAAVA,KAAwB,eAAgBA,IAAsC,iBAArBA,EAAM6G,cAA6B,WAAY7G,GAClI,MAAM,IAAInC,MACR,qFAGJ,MAAO,CACLrB,KAAM,cACNwD,QACD,GAGkC,CACrC+E,KAAM,IACNhH,KAAM,4BACNgD,MAAQf,IACN,GAAa,MAATA,GAAkC,iBAAVA,KAAwB,eAAgBA,IAAsC,iBAArBA,EAAM6G,cAA6B,aAAc7G,IAAoC,iBAAnBA,EAAM8G,SAC3J,MAAM,IAAIjJ,MACR,mGAGJ,MAAO,CACLrB,KAAM,4BACNwD,QACD,GAGyB,CAC5B+E,KAAM,IACNhH,KAAM,kBACNgD,MAAQf,IACN,GAAa,MAATA,GAAkC,iBAAVA,KAAwB,eAAgBA,IAAsC,iBAArBA,EAAM6G,cAA6B,kBAAmB7G,IAAyC,iBAAxBA,EAAMgH,cAChK,MAAM,IAAInJ,MACR,8FAGJ,MAAO,CACLrB,KAAM,kBACNwD,QACD,GAGyB,CAC5B+E,KAAM,IACNhH,KAAM,iBACNgD,MAAQf,IACN,GAAa,MAATA,GAAkC,iBAAVA,KAAwB,iBAAkBA,IAAwC,iBAAvBA,EAAMiH,aAC3F,MAAM,IAAIpJ,MACR,2EAGJ,MAAMsG,EAAS,CACb8C,aAAcjH,EAAMiH,cAQtB,MANI,UAAWjH,GAAwB,MAAfA,EAAMkH,OAAwC,iBAAhBlH,EAAMkH,OAAsB,iBAAkBlH,EAAMkH,OAAS,qBAAsBlH,EAAMkH,QAC7I/C,EAAO+C,MAAQ,CACbC,aAAkD,iBAA7BnH,EAAMkH,MAAMC,aAA4BnH,EAAMkH,MAAMC,aAAeC,OAAOC,IAC/FC,iBAA0D,iBAAjCtH,EAAMkH,MAAMI,iBAAgCtH,EAAMkH,MAAMI,iBAAmBF,OAAOC,MAGxG,CACL7K,KAAM,iBACNwD,MAAOmE,EACR,GAGsB,CACzBY,KAAM,IACNhH,KAAM,cACNgD,MAAQf,IACN,GAAa,MAATA,GAAkC,iBAAVA,KAAwB,iBAAkBA,IAAwC,iBAAvBA,EAAMiH,aAC3F,MAAM,IAAIpJ,MACR,wEAGJ,MAAMsG,EAAS,CACb8C,aAAcjH,EAAMiH,aACpBM,aAAa,GAWf,MATI,UAAWvH,GAAwB,MAAfA,EAAMkH,OAAwC,iBAAhBlH,EAAMkH,OAAsB,iBAAkBlH,EAAMkH,OAAS,qBAAsBlH,EAAMkH,QAC7I/C,EAAO+C,MAAQ,CACbC,aAAkD,iBAA7BnH,EAAMkH,MAAMC,aAA4BnH,EAAMkH,MAAMC,aAAeC,OAAOC,IAC/FC,iBAA0D,iBAAjCtH,EAAMkH,MAAMI,iBAAgCtH,EAAMkH,MAAMI,iBAAmBF,OAAOC,MAG3G,gBAAiBrH,GAAsC,kBAAtBA,EAAMuH,cACzCpD,EAAOoD,YAAcvH,EAAMuH,aAEtB,CACL/K,KAAM,cACNwD,MAAOmE,EACR,GAGqB,CACxBY,KAAM,IACNhH,KAAM,aACNgD,MAAQf,IACN,GAAa,MAATA,GAAkC,iBAAVA,KAAwB,cAAeA,IAAqC,iBAApBA,EAAM0F,UACxF,MAAM,IAAI7H,MACR,8DAGJ,MAAO,CACLrB,KAAM,aACNwD,MAAO,CACL0F,UAAW1F,EAAM0F,WAEpB,GAGqB,CACxBX,KAAM,IACNhH,KAAM,YACNgD,MAAQf,IACN,GAAqB,iBAAVA,EACT,MAAM,IAAInC,MAAM,4CAElB,MAAO,CAAErB,KAAM,YAAawD,QAAO,GAGtB,CACf+E,KAAM,IACNhH,KAAM,SACNgD,MAAQf,IACN,GAAa,MAATA,GAAkC,iBAAVA,EAC1B,MAAM,IAAInC,MAAM,0CAElB,MAAO,CACLrB,KAAM,SACNwD,QACD,GAG6B,CAChC+E,KAAM,IACNhH,KAAM,qBACNgD,MAAQf,IACN,GAAa,MAATA,GAAkC,iBAAVA,KAAwB,SAAUA,IAAgC,iBAAfA,EAAMqE,KACnF,MAAM,IAAIxG,MACR,uEAGJ,MAAO,CAAErB,KAAM,qBAAsBwD,MAAO,CAAEqE,KAAMrE,EAAMqE,MAAQ,GAGnC,CACjCU,KAAM,IACNhH,KAAM,sBACNgD,MAAQf,IACN,GAAa,MAATA,GAAkC,iBAAVA,KAAwB,cAAeA,IAAqC,iBAApBA,EAAMwH,UACxF,MAAM,IAAI3J,MACR,6EAGJ,MAAO,CACLrB,KAAM,sBACNwD,MAAO,CAAEwH,UAAWxH,EAAMwH,WAC3B,GAGgB,CACnBzC,KAAM,IACNhH,KAAM,OACNgD,MAAQf,IACN,GAAa,MAATA,GAAkC,iBAAVA,KAAwB,SAAUA,IAAgC,iBAAfA,EAAMqE,QAAuB,aAAcrE,IAAoC,iBAAnBA,EAAMyH,SAC/I,MAAM,IAAI5J,MACR,wEAGJ,MAAO,CAAErB,KAAM,OAAQwD,QAAO,IAqB9B0H,GAAwBzF,OAAO0F,YACjCf,GAAgBF,KAAKC,GAAS,CAACA,EAAK5B,KAAM4B,MAEb1E,OAAO0F,YACpCf,GAAgBF,KAAKC,GAAS,CAACA,EAAK5I,KAAM4I,EAAK5B,SAEjD,IAAI6C,GAAchB,GAAgBF,KAAKC,GAASA,EAAK5B,OACjD8C,GAAuBC,IACzB,MAAMC,EAAsBD,EAAKE,QAAQ,KACzC,IAA4B,IAAxBD,EACF,MAAM,IAAIlK,MAAM,sDAElB,MAAMqF,EAAS4E,EAAKjH,MAAM,EAAGkH,GAC7B,IAAKH,GAAYhE,SAASV,GACxB,MAAM,IAAIrF,MAAM,+CAA+CqF,MAEjE,MAAM6B,EAAO7B,EACP+E,EAAYH,EAAKjH,MAAMkH,EAAsB,GAC7CG,EAAYtJ,KAAKmC,MAAMkH,GAC7B,OAAOP,GAAsB3C,GAAMhE,MAAMmH,EAAU,EAYjDC,GAAU,KAAKvH,WAAW,GAC9B,SAASwH,GAAaC,EAAQC,GAC5B,MAAMC,EAAqB,IAAIC,WAAWF,GAC1C,IAAIG,EAAS,EACb,IAAK,MAAMC,KAASL,EAClBE,EAAmBI,IAAID,EAAOD,GAC9BA,GAAUC,EAAMrH,OAGlB,OADAgH,EAAOhH,OAAS,EACTkH,CACT,CAmGAK,eAAeC,IAAoBC,OACjCA,EAAMC,OACNA,EAAMC,WACNA,EAAUC,SACVA,EACAhG,WAAYiG,EAAcC,GAAkBC,eAC5CA,EAAiB,IAAsB,IAAIC,KAAMC,YACjDA,IAEA,IAAI/L,EAAIgM,EACR,MAAMC,EAA2E,eAAtC,MAAfF,OAAsB5P,EAAS4P,EAAYpE,MACvE,IAAIuE,EAAOD,EAAqB,GAItB,OAHRD,EAA2C,OAArChM,EAAK+L,EAAYI,sBAA2BhQ,EAAS6D,EAAGoM,QAAO,CAACC,EAAKC,KAC3E,IAAIC,EACJ,OAAOrG,KAAKmG,IAAIA,EAAoC,OAA9BE,EAAMD,EAAeJ,MAAgBK,EAAM,EAAE,GAClE,IAAcP,EAAK,GAAK,EAC3B,MAAMtL,EAAUuL,EAAqBO,gBAAgBT,GAAe,CAClE/F,GAAI2F,IACJc,UAAWZ,IACXlE,KAAM,YACNG,QAAS,GACT4E,MAAO,IAET,IAAIC,EACAC,EACAC,EACJ,SAASC,EAAyBxD,EAAYyD,GAC5C,MAAM3D,EAAO1I,EAAQgM,MAAMM,MACxBC,GAAyB,oBAAfA,EAAMhO,MAA8BgO,EAAMX,eAAehD,aAAeA,IAEzE,MAARF,EACFA,EAAKkD,eAAiBS,EAEtBrM,EAAQgM,MAAM1H,KAAK,CACjB/F,KAAM,kBACNqN,eAAgBS,GAGxB,CACE,MAAMjG,EAAO,GACb,IAAIoG,EAAqBjB,EAAoC,MAAfF,OAAsB5P,EAAS4P,EAAYoB,iBAAchR,EACvG,MAAMiR,EAAmB,CAAE,EAC3B,IAAIzD,EAAQ,CACVI,iBAAkBD,IAClBF,aAAcE,IACduD,YAAavD,KAEXJ,EAAe,UACnB,SAAS4D,IACP,MAAMC,EAAa,IAAIzG,IACG,MAAtBoG,OAA6B/Q,EAAS+Q,EAAmBpJ,UAC3DpD,EAAQyM,YAAcD,GAExB,MAAMM,EAAgB,IAGjBhB,gBAAgB9L,GAMnB+M,WAAY9B,KAEdH,EAAO,CACL9K,QAAS8M,EACT1G,KAAMyG,EACNtB,sBAEN,OAvKAZ,gBAAiCE,OAC/BA,EAAMmC,WACNA,EAAUC,gBACVA,EAAeC,yBACfA,EAAwBC,wBACxBA,EAAuBC,aACvBA,EAAYC,WACZA,EAAUC,WACVA,EAAUC,YACVA,EAAWC,6BACXA,EAA4BC,oBAC5BA,EAAmBC,eACnBA,EAAcC,iBACdA,EAAgBC,yBAChBA,EAAwBC,oBACxBA,EAAmBC,iBACnBA,EAAgBC,gBAChBA,IAEA,MAAMC,EAASnD,EAAOoD,YAChBC,EAAU,IAAIC,YACd/D,EAAS,GACf,IAAIC,EAAc,EAClB,OAAa,CACX,MAAMtI,MAAEA,SAAgBiM,EAAOI,OAC/B,GAAIrM,IACFqI,EAAO9F,KAAKvC,GACZsI,GAAetI,EAAMqB,OACjBrB,EAAMA,EAAMqB,OAAS,KAAO8G,IAC9B,SAGJ,GAAsB,IAAlBE,EAAOhH,OACT,MAEF,MAAMkH,EAAqBH,GAAaC,EAAQC,GAChDA,EAAc,EACd,MAAMgE,EAAcH,EAAQI,OAAOhE,EAAoB,CAAEO,QAAQ,IAAQ0D,MAAM,MAAMtL,QAAQ4G,GAAkB,KAATA,IAAapB,IAAImB,IACvH,IAAK,MAAMrL,KAAEA,EAAMwD,MAAOyM,KAAYH,EACpC,OAAQ9P,GACN,IAAK,aACkB,MAAdyO,OAAqBvR,EAASuR,EAAWwB,IAChD,MACF,IAAK,kBACuB,MAAnBvB,OAA0BxR,EAASwR,EAAgBuB,IAC1D,MACF,IAAK,4BACgC,MAA5BtB,OAAmCzR,EAASyR,EAAyBsB,IAC5E,MACF,IAAK,2BAC+B,MAA3BrB,OAAkC1R,EAAS0R,EAAwBqB,IAC1E,MACF,IAAK,aACkB,MAAdnB,OAAqB5R,EAAS4R,EAAWmB,IAChD,MACF,IAAK,eACoB,MAAhBpB,OAAuB3R,EAAS2R,EAAaoB,IACpD,MACF,IAAK,aACkB,MAAdlB,OAAqB7R,EAAS6R,EAAWkB,IAChD,MACF,IAAK,cACmB,MAAfjB,OAAsB9R,EAAS8R,EAAYiB,IAClD,MACF,IAAK,4BACgC,MAA5BZ,OAAmCnS,EAASmS,EAAyBY,IAC5E,MACF,IAAK,kCACoC,MAAhChB,OAAuC/R,EAAS+R,EAA6BgB,IACpF,MACF,IAAK,wBAC2B,MAAvBf,OAA8BhS,EAASgS,EAAoBe,IAClE,MACF,IAAK,kBACsB,MAAlBd,OAAyBjS,EAASiS,EAAec,IACxD,MACF,IAAK,oBACwB,MAApBb,OAA2BlS,EAASkS,EAAiBa,IAC5D,MACF,IAAK,uBAC2B,MAAvBX,OAA8BpS,EAASoS,EAAoBW,IAClE,MACF,IAAK,oBACwB,MAApBV,OAA2BrS,EAASqS,EAAiBU,IAC5D,MACF,IAAK,mBACuB,MAAnBT,OAA0BtS,EAASsS,EAAgBS,IAC1D,MACF,QAEE,MAAM,IAAI5O,MAAM,6BADQrB,KAKlC,CACA,CAyEQkQ,CAAkB,CACtB5D,SACA,UAAAmC,CAAWjL,GACc,MAAnBkK,GACFA,EAAkB,CAChB1N,KAAM,OACNiD,KAAMO,GAER/B,EAAQgM,MAAM1H,KAAK2H,IAEnBA,EAAgBzK,MAAQO,EAE1B/B,EAAQoH,SAAWrF,EACnB6K,GACD,EACD,eAAAK,CAAgBlL,GACd,IAAI8J,EAC8B,MAA9BM,GACFA,EAA6B,CAAE5N,KAAM,OAAQiD,KAAMO,GACvB,MAAxBmK,GACFA,EAAqBwC,QAAQpK,KAAK6H,IAGpCA,EAA2B3K,MAAQO,EAET,MAAxBmK,GACFA,EAAuB,CACrB3N,KAAM,YACNoQ,UAAW5M,EACX2M,QAAS,CAACvC,IAEZnM,EAAQgM,MAAM1H,KAAK4H,IAEnBA,EAAqByC,WAAa5M,EAEpC/B,EAAQ2O,WAA0C,OAA5B9C,EAAM7L,EAAQ2O,WAAqB9C,EAAM,IAAM9J,EACrE6K,GACD,EACD,wBAAAM,CAAyBnL,GACW,MAA9BoK,IACFA,EAA2B5C,UAAYxH,EAAMwH,UAEhD,EACD,uBAAA4D,CAAwBpL,GACM,MAAxBmK,IACFA,EAAuB,CACrB3N,KAAM,YACNoQ,UAAW,GACXD,QAAS,IAEX1O,EAAQgM,MAAM1H,KAAK4H,IAErBA,EAAqBwC,QAAQpK,KAAK,CAChC/F,KAAM,WACN6H,KAAMrE,EAAMqE,OAEd+F,OAA6B1Q,EAC7BmR,GACD,EACD,UAAAS,CAAWtL,GACT/B,EAAQgM,MAAM1H,KAAK,CACjB/F,KAAM,OACNiL,SAAUzH,EAAMyH,SAChBpD,KAAMrE,EAAMqE,OAEdwG,GACD,EACD,YAAAQ,CAAarL,GACX/B,EAAQgM,MAAM1H,KAAK,CACjB/F,KAAM,SACNqQ,OAAQ7M,IAEV6K,GACD,EACD,4BAAAY,CAA6BzL,GACI,MAA3B/B,EAAQyL,kBACVzL,EAAQyL,gBAAkB,IAE5BiB,EAAiB3K,EAAM6G,YAAc,CACnCpH,KAAM,GACNgK,OACA3C,SAAU9G,EAAM8G,SAChBgG,MAAO7O,EAAQyL,gBAAgBrI,QAEjC,MAAMiJ,EAAa,CACjByC,MAAO,eACPtD,OACA5C,WAAY7G,EAAM6G,WAClBC,SAAU9G,EAAM8G,SAChBC,UAAMrN,GAERuE,EAAQyL,gBAAgBnH,KAAK+H,GAC7BD,EAAyBrK,EAAM6G,WAAYyD,GAC3CO,GACD,EACD,mBAAAa,CAAoB1L,GAClB,MAAMgN,EAAkBrC,EAAiB3K,EAAM6G,YAC/CmG,EAAgBvN,MAAQO,EAAMgH,cAC9B,MAAQhH,MAAOiN,GA7jBrB,SAA0BC,GACxB,QAAiBxT,IAAbwT,EACF,MAAO,CAAElN,WAAOtG,EAAQqT,MAAO,mBAEjC,IAAI5I,EAASG,GAAc,CAAE7E,KAAMyN,IACnC,OAAI/I,EAAOC,QACF,CAAEpE,MAAOmE,EAAOnE,MAAO+M,MAAO,qBAEvC5I,EAASG,GAAc,CAAE7E,KAAMmG,GAAQsH,KACnC/I,EAAOC,QACF,CAAEpE,MAAOmE,EAAOnE,MAAO+M,MAAO,kBAEhC,CAAE/M,WAAOtG,EAAQqT,MAAO,gBACjC,CAgjBqCI,CAAiBH,EAAgBvN,MAC1D6K,EAAa,CACjByC,MAAO,eACPtD,KAAMuD,EAAgBvD,KACtB5C,WAAY7G,EAAM6G,WAClBC,SAAUkG,EAAgBlG,SAC1BC,KAAMkG,GAERhP,EAAQyL,gBAAgBsD,EAAgBF,OAASxC,EACjDD,EAAyBrK,EAAM6G,WAAYyD,GAC3CO,GACD,EACD,oBAAMc,CAAe3L,GACnB,MAAMsK,EAAa,CACjByC,MAAO,OACPtD,UACGzJ,GAYL,GAV0C,MAAtC2K,EAAiB3K,EAAM6G,YACzB5I,EAAQyL,gBAAgBiB,EAAiB3K,EAAM6G,YAAYiG,OAASxC,GAErC,MAA3BrM,EAAQyL,kBACVzL,EAAQyL,gBAAkB,IAE5BzL,EAAQyL,gBAAgBnH,KAAK+H,IAE/BD,EAAyBrK,EAAM6G,WAAYyD,GAC3CO,IACI7B,EAAY,CACd,MAAM7E,QAAe6E,EAAW,CAAEoE,SAAUpN,IAC5C,GAAc,MAAVmE,EAAgB,CAClB,MAAMkJ,EAAc,CAClBN,MAAO,SACPtD,UACGzJ,EACHmE,UAEFlG,EAAQyL,gBAAgBzL,EAAQyL,gBAAgBrI,OAAS,GAAKgM,EAC9DhD,EAAyBrK,EAAM6G,WAAYwG,GAC3CxC,GACV,CACA,CACK,EACD,gBAAAe,CAAiB5L,GACf,MAAM0J,EAAkBzL,EAAQyL,gBAChC,GAAuB,MAAnBA,EACF,MAAM,IAAI7L,MAAM,+CAElB,MAAMyP,EAAsB5D,EAAgB6D,WACzCF,GAAgBA,EAAYxG,aAAe7G,EAAM6G,aAEpD,IAA4B,IAAxByG,EACF,MAAM,IAAIzP,MACR,wEAGJ,MAAMyM,EAAa,IACdZ,EAAgB4D,GACnBP,MAAO,YACJ/M,GAEL0J,EAAgB4D,GAAuBhD,EACvCD,EAAyBrK,EAAM6G,WAAYyD,GAC3CO,GACD,EACD,UAAAU,CAAWvL,GACTqE,EAAK9B,QAAQvC,GACb6K,GACD,EACD,wBAAAgB,CAAyB7L,GACG,MAAtByK,EACFA,EAAqB,IAAIzK,GAEzByK,EAAmBlI,QAAQvC,GAE7B6K,GACD,EACD,gBAAAkB,CAAiB/L,GACfyJ,GAAQ,EACRS,EAAkBlK,EAAMuH,YAAc2C,OAAkBxQ,EACxDyQ,OAAuBzQ,EACvB0Q,OAA6B1Q,CAC9B,EACD,eAAAsS,CAAgBhM,GACTwJ,IACHvL,EAAQsF,GAAKvD,EAAM0F,WAErBzH,EAAQgM,MAAM1H,KAAK,CAAE/F,KAAM,eAC3BqO,GACD,EACD,mBAAAiB,CAAoB9L,GAClBiH,EAAejH,EAAMiH,aACF,MAAfjH,EAAMkH,QACRA,EAv+BR,UAAqCC,aACnCA,EAAYG,iBACZA,IAEA,MAAO,CACLH,eACAG,mBACAsD,YAAazD,EAAeG,EAEhC,CA89BgBkG,CAA4BxN,EAAMkH,OAE7C,EACD,WAAAsE,CAAYlN,GACV,MAAM,IAAIT,MAAMS,EACtB,IAEc,MAAZ2K,GAA4BA,EAAS,CAAEhL,UAASgJ,eAAcC,SAChE,CAqBA0B,eAAe6E,IAAwB3E,OACrCA,EAAMC,OACNA,EAAME,SACNA,EAAQG,eACRA,EAAiB,IAAsB,IAAIC,KAC3CpG,WAAYiG,EAAcwE,KAE1B,MAAMC,EAAW,CAAEnR,KAAM,OAAQiD,KAAM,IACjCmO,EAAgB,CACpBrK,GAAI2F,IACJc,UAAWZ,IACXlE,KAAM,YACNG,QAAS,GACT4E,MAAO,CAAC0D,UA5BZ/E,gBAAiCE,OAC/BA,EAAMmC,WACNA,IAEA,MAAMgB,EAASnD,EAAO+E,YAAY,IAAIC,mBAAqB5B,YAC3D,OAAa,CACX,MAAMnK,KAAEA,EAAI/B,MAAEA,SAAgBiM,EAAOI,OACrC,GAAItK,EACF,YAEIkJ,EAAWjL,EACrB,CACA,CAkBQ+N,CAAkB,CACtBjF,SACAmC,WAAavC,IACXkF,EAAcvI,SAAWqD,EACzBiF,EAASlO,MAAQiJ,EACjBK,EAAO,CACL9K,QAAS,IAAK2P,GACdvJ,KAAM,GACNmF,oBAAoB,GACpB,IAGM,MAAZP,GAA4BA,EAAS2E,EAAe,CAClD1G,MAAO,CAAEI,iBAAkBD,IAAKF,aAAcE,IAAKuD,YAAavD,KAChEJ,aAAc,WAElB,CAGA,IAAI+G,GAAmB,IAAMC,MAsN7B,SAASC,GAA6BxE,GACpC,OAA0B,MAAnBA,OAA0BhQ,EAASgQ,EAAgBC,QAAO,CAACC,EAAKC,KACrE,IAAItM,EACJ,OAAOkG,KAAKmG,IAAIA,EAAmC,OAA7BrM,EAAKsM,EAAeJ,MAAgBlM,EAAK,EAAE,GAChE,EACL,CAGA,SAAS4Q,GAAgBlQ,GACvB,IAAIV,EACJ,OAA+B,OAAvBA,EAAKU,EAAQgM,OAAiB1M,EAAK,IACtCU,EAAQyL,gBAAkBzL,EAAQyL,gBAAgBhD,KAAKmD,IAAoB,CAC5ErN,KAAM,kBACNqN,qBACI,MACH5L,EAAQ2O,UAAY,CACrB,CACEpQ,KAAM,YACNoQ,UAAW3O,EAAQ2O,UACnBD,QAAS,CAAC,CAAEnQ,KAAM,OAAQiD,KAAMxB,EAAQ2O,cAExC,MACD3O,EAAQoH,QAAU,CAAC,CAAE7I,KAAM,OAAQiD,KAAMxB,EAAQoH,UAAa,GAErE,CAGA,SAAS+I,GAAiBC,GACxB,OAAOA,EAAS3H,KAAKzI,IAAa,IAC7BA,EACHgM,MAAOkE,GAAgBlQ,MAE3B,CAGA,SAASqQ,GAAgBC,EAAMC,GAC7B,GAAID,IAASC,EACX,OAAO,EACT,GAAY,MAARD,GAAwB,MAARC,EAClB,OAAO,EACT,GAAoB,iBAATD,GAAqC,iBAATC,EACrC,OAAOD,IAASC,EAClB,GAAID,EAAKzQ,cAAgB0Q,EAAK1Q,YAC5B,OAAO,EACT,GAAIyQ,aAAgBlF,MAAQmF,aAAgBnF,KAC1C,OAAOkF,EAAKE,YAAcD,EAAKC,UAEjC,GAAItJ,MAAMC,QAAQmJ,GAAO,CACvB,GAAIA,EAAKlN,SAAWmN,EAAKnN,OACvB,OAAO,EACT,IAAK,IAAImC,EAAI,EAAGA,EAAI+K,EAAKlN,OAAQmC,IAC/B,IAAK8K,GAAgBC,EAAK/K,GAAIgL,EAAKhL,IACjC,OAAO,EAEX,OAAO,CACX,CACE,MAAMkL,EAAQzM,OAAO0M,KAAKJ,GACpBK,EAAQ3M,OAAO0M,KAAKH,GAC1B,GAAIE,EAAMrN,SAAWuN,EAAMvN,OACzB,OAAO,EACT,IAAK,MAAMzF,KAAO8S,EAAO,CACvB,IAAKE,EAAMhL,SAAShI,GAClB,OAAO,EACT,IAAK0S,GAAgBC,EAAK3S,GAAM4S,EAAK5S,IACnC,OAAO,CACb,CACE,OAAO,CACT,CAGAgN,eAAeiG,GAA6BC,GAC1C,IAAKA,EACH,MAAO,GAET,GAAIC,WAAWC,UAAYF,aAAkCC,WAAWC,SACtE,OAAOC,QAAQC,IACb/J,MAAMgK,KAAKL,GAAwBpI,KAAIkC,MAAOwG,IAC5C,MAAMrR,KAAEA,EAAIvB,KAAEA,GAAS4S,EACjBC,QAAgB,IAAIJ,SAAQ,CAACK,EAASC,KAC1C,MAAMtD,EAAS,IAAIuD,WACnBvD,EAAOwD,OAAUC,IACf,IAAInS,EACJ+R,EAAqC,OAA5B/R,EAAKmS,EAAYC,aAAkBjW,EAAS6D,EAAG4G,OAAO,EAEjE8H,EAAO2D,QAAWtR,GAAUiR,EAAOjR,GACnC2N,EAAO4D,cAAcT,EAAW,IAElC,MAAO,CACLrR,OACA+R,YAAatT,EACbuT,IAAKV,EACN,KAIP,GAAIlK,MAAMC,QAAQ0J,GAChB,OAAOA,EAET,MAAM,IAAIjR,MAAM,2BAClB,CAiIA,SAASmS,GAAyC/R,GAChD,GAAqB,cAAjBA,EAAQiH,KACV,OAAO,EAET,MAAM+K,EAAqBhS,EAAQgM,MAAMN,QAAO,CAACuG,EAAWvJ,EAAMmG,IAC3C,eAAdnG,EAAKnK,KAAwBsQ,EAAQoD,OAExCC,EAA0BlS,EAAQgM,MAAMpJ,MAAMoP,EAAqB,GAAG/O,QAAQyF,GAAuB,oBAAdA,EAAKnK,OAClG,OAAO2T,EAAwB9O,OAAS,GAAK8O,EAAwB7K,OAAOqB,GAAS,WAAYA,EAAKkD,gBACxG,mDCjmDEuG,GAAAxN,wCCQF,IAAIhK,EAAQyX,EAIRC,EAAW,mBAAsBrO,OAAOsO,GAAKtO,OAAOsO,GAHxD,SAAYC,EAAGC,GACb,OAAQD,IAAMC,IAAM,IAAMD,GAAK,EAAIA,GAAM,EAAIC,IAAQD,GAAMA,GAAKC,GAAMA,CACxE,EAEE9U,EAAW/C,EAAM+C,SACjBpB,EAAY3B,EAAM2B,UAClBmW,EAAkB9X,EAAM8X,gBACxBC,EAAgB/X,EAAM+X,cA0BxB,SAASC,EAAuBC,GAC9B,IAAIC,EAAoBD,EAAKE,YAC7BF,EAAOA,EAAK7Q,MACZ,IACE,IAAIgR,EAAYF,IAChB,OAAQR,EAASO,EAAMG,EACxB,CAAC,MAAO1S,GACP,OAAO,CACX,CACA,CAIA,IAAI2S,EACF,oBAAuBhU,aACvB,IAAuBA,OAAOxC,eAC9B,IAAuBwC,OAAOxC,SAAS5B,cANzC,SAAgCqY,EAAWH,GACzC,OAAOA,GACT,EArCA,SAAgCG,EAAWH,GACzC,IAAI/Q,EAAQ+Q,IACVI,EAAYxV,EAAS,CAAEkV,KAAM,CAAE7Q,MAAOA,EAAO+Q,YAAaA,KAC1DF,EAAOM,EAAU,GAAGN,KACpBO,EAAcD,EAAU,GAmB1B,OAlBAT,GACE,WACEG,EAAK7Q,MAAQA,EACb6Q,EAAKE,YAAcA,EACnBH,EAAuBC,IAASO,EAAY,CAAEP,KAAMA,GACrD,GACD,CAACK,EAAWlR,EAAO+Q,IAErBxW,GACE,WAEE,OADAqW,EAAuBC,IAASO,EAAY,CAAEP,KAAMA,IAC7CK,GAAU,WACfN,EAAuBC,IAASO,EAAY,CAAEP,KAAMA,GAC5D,GACK,GACD,CAACK,IAEHP,EAAc3Q,GACPA,CACT,SAoB4BqR,GAAAC,0BAC1B5X,IAAWd,EAAM0Y,qBAAuB1Y,EAAM0Y,qBAAuBL,KD9DpDZ,gBEHnB,IAAIkB,GAAMtP,OAAOC,UAAUC,eCM3B,MAAMqP,GAAiB,IAAIC,QAGrBC,GAAO,OAKPC,GAA8BD,KAC9BE,GAAS3P,OACT4P,GAAeC,GAAIA,IAAMH,GACzBI,GAAcD,GAAgB,mBAALA,EACzBE,GAAe,CAACC,EAAGC,KAAK,IACnBD,KACAC,IAELC,GAAiB3B,GAAIuB,GAAWvB,EAAE4B,MAElCC,GAAc,CAAE,EAChBC,GAAgB,CAAE,EAClBC,GAAgB,YAEhBC,UAAyBvV,QAAUsV,GACnCE,UAA2BhY,UAAY8X,GACvCG,GAAeF,IAAmB,SAAUvV,OAE5C0V,GAAoB,CAACC,EAAOhX,KAC9B,MAAMmR,EAAQyE,GAAeqB,IAAID,GACjC,MAAO,CAEH,KAAKf,GAAYjW,IAAQgX,EAAMC,IAAIjX,IAAQyW,GAE1CS,IACG,IAAKjB,GAAYjW,GAAM,CACnB,MAAMmX,EAAOH,EAAMC,IAAIjX,GAGjBA,KAAO0W,KACTA,GAAc1W,GAAOmX,GAEzBhG,EAAM,GAAGnR,EAAKoW,GAAae,EAAMD,GAAOC,GAAQV,GAChE,GAGQtF,EAAM,GAEN,KACS8E,GAAYjW,IAETA,KAAO0W,GAAsBA,GAAc1W,IAG3CiW,GAAYjW,IAAQgX,EAAMC,IAAIjX,IAAQyW,GAErD,EAUD,IAAIW,IAAS,EACjB,MAEOC,GAAeC,IAAkBV,IAAmBvV,OAAOC,iBAAmB,CACjFD,OAAOC,iBAAiBiW,KAAKlW,QAC7BA,OAAOI,oBAAoB8V,KAAKlW,SAChC,CACAyU,GACAA,IAoCE0B,GAAS,CACXC,SA5Ca,IAAIL,GA6CjBM,UApCc,KACd,MAAMC,EAAkBd,IAAqBhY,SAAS8Y,gBACtD,OAAO1B,GAAY0B,IAAwC,WAApBA,CAA4B,GAoCjEC,GAAuB,CACzBC,UAnCeC,IAEXjB,IACAhY,SAASyC,iBAAiB,mBAAoBwW,GAElDT,GAAc,QAASS,GAChB,KACCjB,IACAhY,SAAS4C,oBAAoB,mBAAoBqW,GAErDR,GAAe,QAASQ,EAAS,GA0BrCC,cAvBmBD,IAEnB,MAAME,EAAW,KACbZ,IAAS,EACTU,GAAU,EAGRG,EAAY,KACdb,IAAS,CAAK,EAIlB,OAFAC,GAAc,SAAUW,GACxBX,GAAc,UAAWY,GAClB,KACHX,GAAe,SAAUU,GACzBV,GAAe,UAAWW,EAAU,CACvC,GAWCC,IAAmBlb,EAAMmb,MACzBC,IAAaxB,IAAmBE,GAEhCuB,GAAOxR,GA/FwB+P,WAA0BvV,OAA8B,uBAAKsV,GA+FpDtV,OAA8B,sBAAEwF,GAAKyR,WAAWzR,EAAG,GAI3F0R,GAA4BH,GAAYzZ,EAAAA,UAAYmW,EAAeA,gBAEnE0D,GAA2C,oBAAdtY,WAA6BA,UAAUuY,WAEpEC,IAAkBN,IAAaI,KAAwB,CACzD,UACA,MACFxQ,SAASwQ,GAAoBG,gBAAkBH,GAAoBI,UAM/DC,GAAQ,IAAIhD,QACZiD,GAAe,CAAC1U,EAAOxD,IAAOoV,GAAO1P,UAAUvB,SAASyB,KAAKpC,KAAW,WAAWxD,KAEzF,IAAImY,GAAU,EASd,MAAMC,GAAcC,IAChB,MAAMrY,SAAcqY,EACdC,EAASJ,GAAaG,EAAK,QAC3BE,EAAUL,GAAaG,EAAK,UAC5BG,EAAgBN,GAAaG,EAAK,UACxC,IAAI1Q,EACA2I,EACJ,GAAI8E,GAAOiD,KAASA,GAAQC,GAAWC,EA8BnC5Q,EAAS2Q,EAASD,EAAII,SAAmB,UAARzY,EAAmBqY,EAAIlU,WAAqB,UAARnE,EAAmBoC,KAAKC,UAAUgW,GAAO,GAAKA,MA9BvE,CAI5C,GADA1Q,EAASsQ,GAAM5B,IAAIgC,GACf1Q,EAAQ,OAAOA,EAMnB,GAFAA,IAAWwQ,GAAU,IACrBF,GAAM9L,IAAIkM,EAAK1Q,GACXgB,MAAMC,QAAQyP,GAAM,CAGpB,IADA1Q,EAAS,IACL2I,EAAQ,EAAGA,EAAQ+H,EAAIxT,OAAQyL,IAC/B3I,GAAUyQ,GAAWC,EAAI/H,IAAU,IAEvC2H,GAAM9L,IAAIkM,EAAK1Q,EAC3B,CACQ,GAAI6Q,EAAe,CAEf7Q,EAAS,IACT,MAAMwK,EAAOiD,GAAOjD,KAAKkG,GAAKK,OAC9B,MAAOrD,GAAY/E,EAAQ6B,EAAKvI,QACvByL,GAAYgD,EAAI/H,MACjB3I,GAAU2I,EAAQ,IAAM8H,GAAWC,EAAI/H,IAAU,KAGzD2H,GAAM9L,IAAIkM,EAAK1Q,EAC3B,CACA,CAGI,OAAOA,CAAM,EAGXgR,GAAavZ,IACf,GAAImW,GAAWnW,GACX,IACIA,EAAMA,GACT,CAAC,MAAO4G,GAEL5G,EAAM,EAClB,CAII,MAAMmL,EAAOnL,EAGb,MAAO,CADPA,EAAoB,iBAAPA,EAAkBA,GAAOuJ,MAAMC,QAAQxJ,GAAOA,EAAIyF,OAASzF,GAAOgZ,GAAWhZ,GAAO,GAG7FmL,EACH,EAIL,IAAIqO,GAAc,EAClB,MAAMC,GAAe,MAAMD,GAE3BxM,eAAe0M,MAAkBvO,GAC7B,MAAO6L,EAAO2C,EAAMC,EAAOC,GAAS1O,EAG9BvG,EAAUwR,GAAa,CACzB0D,eAAe,EACfC,cAAc,GACE,kBAAVF,EAAsB,CAC5BG,WAAYH,GACZA,GAAS,CAAA,GACb,IAAIC,EAAgBlV,EAAQkV,cAC5B,MAAMG,EAAwBrV,EAAQsV,gBACtC,IAAIC,EAAiBvV,EAAQuV,eAC7B,MAGMJ,EAAenV,EAAQmV,aAG7B,GAAI5D,GAAWwD,GAAO,CAClB,MAAMS,EAAYT,EACZU,EAAc,GACdC,EAAKtD,EAAMjE,OACjB,IAAK,MAAM/S,KAAOsa,GAEb,iBAAiBna,KAAKH,IAAQoa,EAAUpD,EAAMC,IAAIjX,GAAKua,KACpDF,EAAY1T,KAAK3G,GAGzB,OAAOqT,QAAQC,IAAI+G,EAAYvP,IAAI0P,GAC3C,CACI,OAAOA,EAAYb,GACnB3M,eAAewN,EAAYD,GAEvB,MAAOva,GAAOuZ,GAAUgB,GACxB,IAAKva,EAAK,OACV,MAAOiX,EAAKlK,GAAOgK,GAAkBC,EAAOhX,IACrCya,EAAoBC,EAAUC,EAAOC,GAAWhF,GAAeqB,IAAID,GACpE6D,EAAkB,KACpB,MAAMC,EAAeL,EAAmBza,GAExC,OADmBmW,GAAWvR,EAAQoV,YAAcpV,EAAQoV,WAAW/C,IAAMxO,KAAM8R,IAA6B,IAAvB3V,EAAQoV,qBAItFW,EAAM3a,UACN4a,EAAQ5a,GACX8a,GAAgBA,EAAa,IACtBA,EAAa,GC1QnB,GD0QqDtE,MAAK,IAAIS,IAAMxO,OAGtEwO,IAAMxO,IAAI,EAGrB,GAAI0C,EAAK1F,OAAS,EAEd,OAAOoV,IAEX,IACInY,EADA+F,EAAOmR,EAGX,MAAMmB,EAAmBtB,KACzBiB,EAAS1a,GAAO,CACZ+a,EACA,GAEJ,MAAMC,GAAqB/E,GAAYkE,GACjChJ,EAAQ8F,IAIRgE,EAAgB9J,EAAM1I,KACtByS,EAAc/J,EAAMgK,GACpBC,EAAgBnF,GAAYiF,GAAeD,EAAgBC,EAUjE,GARIF,IACAb,EAAiBhE,GAAWgE,GAAkBA,EAAeiB,EAAeH,GAAiBd,EAE7FpN,EAAI,CACAtE,KAAM0R,EACNgB,GAAIC,KAGRjF,GAAW1N,GAEX,IACIA,EAAOA,EAAK2S,EACf,CAAC,MAAOxU,GAELlE,EAAQkE,CACxB,CAGQ,GAAI6B,GAAQ8N,GAAc9N,GAAO,CAS7B,GANAA,QAAaA,EAAK4S,OAAOzU,IACrBlE,EAAQkE,CAAG,IAKXmU,IAAqBL,EAAS1a,GAAK,GAAI,CACvC,GAAI0C,EAAO,MAAMA,EACjB,OAAO+F,CACV,CAAU/F,GAASsY,GA3FJ,CAACtY,GACmB,mBAA1BuX,EAAuCA,EAAsBvX,IAAmC,IAA1BuX,EA0FvCC,CAAgBxX,KAGrDoX,GAAgB,EAEhB/M,EAAI,CACAtE,KAAM2S,EACND,GAAIpF,KAGxB,CAEQ,GAAI+D,IACKpX,EAED,GAAIyT,GAAW2D,GAAgB,CAC3B,MAAMwB,EAAqBxB,EAAcrR,EAAM2S,GAC/CrO,EAAI,CACAtE,KAAM6S,EACN5Y,MAAOqT,GACPoF,GAAIpF,IAE5B,MAEoBhJ,EAAI,CACAtE,OACA/F,MAAOqT,GACPoF,GAAIpF,KAgBpB,GAVA2E,EAAS1a,GAAK,GAAKyZ,KAEnBpG,QAAQK,QAAQmH,KAAmBrE,MAAK,KAGpCzJ,EAAI,CACAoO,GAAIpF,IACN,KAGFrT,EAIJ,OAAO+F,EAHH,GAAIsR,EAAc,MAAMrX,CAIpC,CACA,CAEA,MAAM6Y,GAAoB,CAACT,EAAcla,KACrC,IAAI,MAAMZ,KAAO8a,EACTA,EAAa9a,GAAK,IAAI8a,EAAa9a,GAAK,GAAGY,EACvD,EA6FM4a,GDtdC,SAASC,EAAOC,EAAKC,GAC3B,IAAIC,EAAMC,EACV,GAAIH,IAAQC,EAAK,OAAO,EAExB,GAAID,GAAOC,IAAQC,EAAKF,EAAIxZ,eAAiByZ,EAAIzZ,YAAa,CAC7D,GAAI0Z,IAASnO,KAAM,OAAOiO,EAAI7I,YAAc8I,EAAI9I,UAChD,GAAI+I,IAASE,OAAQ,OAAOJ,EAAI3W,aAAe4W,EAAI5W,WAEnD,GAAI6W,IAASrS,MAAO,CACnB,IAAKsS,EAAIH,EAAIjW,UAAYkW,EAAIlW,OAC5B,KAAOoW,KAASJ,EAAOC,EAAIG,GAAMF,EAAIE,MAEtC,OAAiB,IAAVA,CACV,CAEE,IAAKD,GAAuB,iBAARF,EAAkB,CAErC,IAAKE,KADLC,EAAM,EACOH,EAAK,CACjB,GAAI/F,GAAInP,KAAKkV,EAAKE,MAAWC,IAAQlG,GAAInP,KAAKmV,EAAKC,GAAO,OAAO,EACjE,KAAMA,KAAQD,KAASF,EAAOC,EAAIE,GAAOD,EAAIC,IAAQ,OAAO,CAChE,CACG,OAAOvV,OAAO0M,KAAK4I,GAAKlW,SAAWoW,CACtC,CACA,CAEC,OAAOH,GAAQA,GAAOC,GAAQA,CAC/B,GC8bO3E,GAAO+E,IA7FI,EAACC,EAAUpX,KAMzB,IAAKgR,GAAeD,IAAIqG,GAAW,CAC/B,MAAMC,EAAO7F,GAAawB,GAAsBhT,GAG1C6V,EAAqBpU,OAAO6V,OAAO,MACnCH,EAASrC,GAAenC,KAAKxB,GAAWiG,GAC9C,IAAIG,EAAUrG,GACd,MAAMsG,EAAgB/V,OAAO6V,OAAO,MAC9B5G,EAAY,CAACtV,EAAK8X,KACpB,MAAMuE,EAAOD,EAAcpc,IAAQ,GAGnC,OAFAoc,EAAcpc,GAAOqc,EACrBA,EAAK1V,KAAKmR,GACH,IAAIuE,EAAKC,OAAOD,EAAKjQ,QAAQ0L,GAAW,EAAE,EAE/CyE,EAAS,CAACvc,EAAKoE,EAAO+S,KACxB6E,EAASjP,IAAI/M,EAAKoE,GAClB,MAAMiY,EAAOD,EAAcpc,GAC3B,GAAIqc,EACA,IAAK,MAAMG,KAAMH,EACbG,EAAGpY,EAAO+S,EAE9B,EAEcsF,EAAe,KACjB,IAAK7G,GAAeD,IAAIqG,KAEpBpG,GAAe7I,IAAIiP,EAAU,CACzBvB,EACApU,OAAO6V,OAAO,MACd7V,OAAO6V,OAAO,MACd7V,OAAO6V,OAAO,MACdH,EACAQ,EACAjH,KAEC8C,IAAW,CAOZ,MAAMsE,EAAeT,EAAKpE,UAAUS,WAAWf,KAAKxB,GAAWwF,GAAkBhE,KAAKxB,GAAW0E,EC7ajG,KD8aMkC,EAAmBV,EAAKlE,cAAcO,WAAWf,KAAKxB,GAAWwF,GAAkBhE,KAAKxB,GAAW0E,EC7arG,KD8aJ0B,EAAU,KACNO,GAAgBA,IAChBC,GAAoBA,IAIpB/G,GAAegH,OAAOZ,EAAS,CAEvD,CACA,EAQQ,OANAS,IAMO,CACHT,EACAD,EACAU,EACAN,EAEZ,CACI,MAAO,CACHH,EACApG,GAAeqB,IAAI+E,GAAU,GAChC,EAgBmBa,CAAU,IAAIC,KAEhCC,GAAgB3G,GAAa,CAE/B4G,cAAelH,GACfmH,UAAWnH,GACXoH,QAASpH,GACTqH,aAnBiB,CAACC,EAAGC,EAAIC,EAAQtD,EAAYiC,KAC7C,MAAMsB,EAAgBD,EAAOE,gBACvBC,EAAoBxB,EAAKyB,WAEzBC,MAAc9V,KAAKC,SAAW,KAAQ,IAAM2V,EAAoB,EAAIA,EAAoB,KAAOH,EAAOM,oBACvG3H,GAAYsH,IAAkBE,EAAoBF,GAGvDjF,WAAW0B,EAAY2D,EAAS1B,EAAK,EAYrC4B,YAAa/H,GAEbgI,mBAAmB,EACnBC,uBAAuB,EACvBC,mBAAmB,EACnBC,oBAAoB,EAEpBL,mBAAoBlF,GAAiB,IAAQ,IAC7CwF,sBAAuB,IACvBC,iBAAkB,IAClBC,eAAgB1F,GAAiB,IAAO,IAExC8C,WACA6C,SAAU,KAAI,EACdrH,SACA+E,UACAuC,SAAU,CAAA,GAEd9G,IAmBM+G,GAAmBC,EAAaA,cAAC,IE7fjCC,GAAiB7H,IAAmBvV,OAAOqd,qBAC3CC,GAAMF,GAAiBpd,OAAOqd,qBAAuB,GAmDrDE,GAAsBD,GAAIje,QAlBZme,GAAa,CAACC,EAAMC,EAAUzB,IAenCuB,EAAWC,EAbFC,QAAiB5T,KAC7B,MAAOnL,GAAOuZ,GAAUuF,IACX,CAAA,CAAA,CAAAlE,GAAWhF,GAAeqB,IAAID,IAC3C,GAAIhX,EAAI6K,WCjDI,SDoDR,OAAOkU,KAAY5T,GAEvB,MAAM6T,EAAMpE,EAAQ5a,GACpB,OAAIiW,GAAY+I,GAAaD,KAAY5T,WAClCyP,EAAQ5a,GACRgf,EACV,GACgC1B,KA9CjCmB,KAEApd,OAAO4d,uBAAyBjiB,GEkFxC,MAAM2hB,GAAM3hB,EAAM2hB,KAIlB,CAAEO,IACE,OAAOA,EAASC,QACZ,IAAK,UACD,MAAMD,EACV,IAAK,YACD,OAAOA,EAAS9a,MACpB,IAAK,WACD,MAAM8a,EAASE,OACnB,QASI,MARAF,EAASC,OAAS,UAClBD,EAAS1I,MAAMN,IACXgJ,EAASC,OAAS,YAClBD,EAAS9a,MAAQ8R,CAAC,IAClBxU,IACAwd,EAASC,OAAS,WAClBD,EAASE,OAAS1d,CAAC,IAEjBwd,EAEjB,GACKG,GAAc,CAChBC,QAAQ,GAugBFC,IF/jBQC,GE0DI,CAAC7F,EAAM8F,EAASnC,KAClC,MAAMtG,MAAEA,EAAKwE,QAAEA,EAAOkE,SAAEA,EAAQC,aAAEA,EAAYC,kBAAEA,EAAiB5B,kBAAEA,EAAiB6B,gBAAEA,EAAeC,kBAAEA,EAAiBC,mBAAEA,EAAkBC,iBAAEA,GAAqB1C,GAC5J7C,EAAoBC,EAAUC,EAAOC,GAAWhF,GAAeqB,IAAID,IAKnEhX,EAAKigB,GAASC,GAAYvG,GAE3BwG,EAAoBC,EAAMA,QAAC,GAG3BC,EAAeD,EAAMA,QAAC,GAEtBE,EAASF,EAAMA,OAACpgB,GAChBugB,EAAaH,EAAMA,OAACX,GACpBe,EAAYJ,EAAMA,OAAC9C,GACnBmD,EAAY,IAAID,EAAUE,QAC1BC,EAAW,IAAIF,IAAY/I,aAAe+I,IAAYhJ,YACrDmJ,EAAUC,EAAUC,EAAgBC,GAAmBhK,GAAkBC,EAAOhX,GACjFghB,EAAoBZ,EAAAA,OAAO,CAAE,GAAEM,QAG/BpC,EAAW2C,GAActB,GAAgBsB,GAAc3D,EAAOgB,UAAY4C,GAAc5D,EAAOgB,SAASte,GAAO2f,EAC/GwB,EAAU,CAAChK,EAAMuJ,KACnB,IAAI,MAAMtD,KAAK4D,EAAkB,CAC7B,MAAMI,EAAIhE,EACV,GAAU,SAANgE,GACA,IAAK5F,EAAQrE,EAAKiK,GAAIV,EAAQU,IAAK,CAC/B,IAAKH,GAAc9J,EAAKiK,IACpB,OAAO,EAEX,IAAK5F,EAAQ6F,EAAcX,EAAQU,IAC/B,OAAO,CAE/B,OAEgB,GAAIV,EAAQU,KAAOjK,EAAKiK,GACpB,OAAO,CAG3B,CACQ,OAAO,CAAI,EAETjM,EAAcmM,EAAAA,SAAQ,KACxB,MAAMC,IACGvhB,KACAyf,IAEAwB,GAAcrB,IAEfa,IAAYpC,aACZqB,IACyB,IAAtB1B,EAJuC4B,GAO5C4B,EAAoBrQ,IAEtB,MAAMsQ,EAAWrL,GAAajF,GAE9B,cADOsQ,EAASlH,GACXgH,EAGE,CACHG,cAAc,EACdC,WAAW,KACRF,GALIA,CAMV,EAECG,EAAahB,IACbiB,EAAcd,IACde,EAAiBN,EAAiBI,GAClCG,EAAiBH,IAAeC,EAAcC,EAAiBN,EAAiBK,GAItF,IAAIG,EAAoBF,EACxB,MAAO,CACH,KACI,MAAMG,EAAcT,EAAiBZ,KAErC,OADsBO,EAAQc,EAAaD,IAYvCA,EAAkBvZ,KAAOwZ,EAAYxZ,KACrCuZ,EAAkBL,UAAYM,EAAYN,UAC1CK,EAAkBN,aAAeO,EAAYP,aAC7CM,EAAkBtf,MAAQuf,EAAYvf,MAC/Bsf,IAEPA,EAAoBC,EACbA,EAC3B,EAEY,IAAIF,EACP,GAEF,CACC/K,EACAhX,IAGEkiB,EAASxM,wBAAqByM,EAAAA,aAAarK,GAAWgJ,EAAe9gB,GAAK,CAAC0gB,EAASvJ,KAC7EgK,EAAQhK,EAAMuJ,IAAU5I,GAAU,KAE/C,CACId,EACAhX,IACAmV,EAAY,GAAIA,EAAY,IAC1BiN,GAAkBjC,EAAkBO,QACpC2B,EAAiB5H,EAAmBza,IAAQya,EAAmBza,GAAKyF,OAAS,EAC7Emc,EAAaM,EAAOzZ,KACpBA,EAAOwY,GAAcW,GAActD,GAAY/H,GAAc+H,GAAYK,GAAIL,GAAYA,EAAWsD,EACpGlf,EAAQwf,EAAOxf,MAEf4f,EAAelC,EAAMA,OAAC3X,GACtB4Y,EAAerB,EAAmBiB,GAAcW,GAAcX,GAAcqB,EAAa5B,SAAWjY,EAAO6Z,EAAa5B,QAAUkB,EAAanZ,EAI/I8Z,IAEEF,IAAmBpB,GAAcve,MAEjC0f,IAAmBnB,GAAcrB,GAA2BA,GAE5Da,IAAYpC,aAIZqB,GAAiBuB,GAAcxY,IAAgBuV,EAG5CiD,GAAcxY,IAASuV,IAI5BwE,KAA4BxiB,GAAOyf,GAAW2C,GAAkBG,GAChEb,EAAeT,GAAciB,EAAOR,cAAgBc,EAAyBN,EAAOR,aACpFC,EAAYV,GAAciB,EAAOP,WAAaa,EAAyBN,EAAOP,UAG9E3H,EAAamI,eAAYnV,MAAOyV,IAClC,MAAMC,EAAiBnC,EAAWG,QAClC,IAAK1gB,IAAQ0iB,GAAkBrC,EAAaK,SAAWD,IAAYpC,WAC/D,OAAO,EAEX,IAAIsE,EACAC,EACAC,GAAU,EACd,MAAM5G,EAAOwG,GAAkB,CAAE,EAG3BK,GAAyBnI,EAAM3a,KAASic,EAAKqD,OAW5CyD,EAAoB,IACnB7K,IACQmI,EAAaK,SAAW1gB,IAAQsgB,EAAOI,SAAWP,EAAkBO,QAEzE1gB,IAAQsgB,EAAOI,QAGpBsC,EAAa,CACftB,cAAc,EACdC,WAAW,GAETsB,EAA8B,KAChCpC,EAASmC,EAAW,EAElBE,EAAe,KAEjB,MAAMC,EAAcxI,EAAM3a,GACtBmjB,GAAeA,EAAY,KAAOP,UAC3BjI,EAAM3a,EAC7B,EAGcojB,EAAe,CACjB1B,cAAc,GAIdT,GAAcL,IAAWnY,QACzB2a,EAAazB,WAAY,GAE7B,IAmCI,GAlCImB,IACAjC,EAASuC,GAGL9F,EAAOc,gBAAkB6C,GAAcL,IAAWnY,OAClD6P,YAAW,KACHuK,GAAWE,KACXtC,IAAYzD,cAAchd,EAAKsd,EAC3D,GACuBA,EAAOc,gBAIdzD,EAAM3a,GAAO,CACT0iB,EAAezC,GACfxG,QAMPkJ,EAASC,GAAWjI,EAAM3a,GAC3B2iB,QAAgBA,EACZG,GAGAxK,WAAW4K,EAAc5F,EAAOa,mBAQ/BxD,EAAM3a,IAAQ2a,EAAM3a,GAAK,KAAO4iB,EAMjC,OALIE,GACIC,KACAtC,IAAY5C,YAAY7d,IAGzB,EAGXgjB,EAAWtgB,MAAQwe,GAanB,MAAMmC,EAAe3I,EAAS1a,GAC9B,IAAKihB,GAAcoC,KAClBT,GAAWS,EAAa,IACzBT,GAAWS,EAAa,IACJ,IAApBA,EAAa,IAOT,OANAJ,IACIH,GACIC,KACAtC,IAAY5C,YAAY7d,IAGzB,EAIX,MAAMsjB,EAAY1C,IAAWnY,KAG7Bua,EAAWva,KAAO+S,EAAQ8H,EAAWX,GAAWW,EAAYX,EAExDG,GACIC,KACAtC,IAAYxD,UAAU0F,EAAS3iB,EAAKsd,EAG/C,CAAC,MAAO1W,GACLsc,IACA,MAAMK,EAAgB9C,KAChBxC,mBAAEA,GAAuBsF,EAE1BA,EAAclF,aAEf2E,EAAWtgB,MAAQkE,EAGfkc,GAAyBC,MACzBQ,EAAcrG,QAAQtW,EAAK5G,EAAKujB,KACL,IAAvBtF,GAA+BuF,GAAavF,IAAuBA,EAAmBrX,MACjF6Z,IAAY3C,mBAAsB2C,IAAY1C,wBAAyB4C,KAIxE4C,EAAcpG,aAAavW,EAAK5G,EAAKujB,GAAgB1J,IACjD,MAAMiB,EAAeL,EAAmBza,GACpC8a,GAAgBA,EAAa,IAC7BA,EAAa,GHzalB,EGya8DjB,EAC7F,GAC+B,CACC6D,YAAazB,EAAKyB,YAAc,GAAK,EACrC4B,QAAQ,MAMxC,CAKQ,OAHAuD,GAAU,EAEVI,KACO,CAAI,GAYf,CACIjjB,EACAgX,IAIEyM,EAActB,EAAWA,aAC/B,IAAIhX,IACOuO,GAAe1C,EAAOsJ,EAAOI,WAAYvV,IAEpD,IA+GA,GA7GAoN,IAA0B,KACtBgI,EAAWG,QAAUjB,EACrBe,EAAUE,QAAUpD,EAGf2D,GAAcW,KACfU,EAAa5B,QAAUkB,EACnC,IAGIrJ,IAA0B,KACtB,IAAKvY,EAAK,OACV,MAAM0jB,EAAiB1J,EAAWzC,KAAK2J,GAAa7B,IACpD,IAAIsE,EAAyB,EAC7B,GAAIlD,IAAY3C,kBAAmB,CAC/B,MAAM8F,EAAUnW,KAAKoW,MACrBF,EAAyBC,EAAUnD,IAAYvC,qBAC3D,CAGQ,MAkBM4F,EFlaY,EAAC9jB,EAAK+jB,EAAWjM,KACvC,MAAMkM,EAAoBD,EAAU/jB,KAAS+jB,EAAU/jB,GAAO,IAE9D,OADAgkB,EAAkBrd,KAAKmR,GAChB,KACH,MAAM5G,EAAQ8S,EAAkB5X,QAAQ0L,GACpC5G,GAAS,IAET8S,EAAkB9S,GAAS8S,EAAkBA,EAAkBve,OAAS,GACxEue,EAAkBxZ,MAC9B,CACK,EEwZuByZ,CAAkBjkB,EAAKya,GAlBtB,CAAC7Z,EAAMqb,EAAO,CAAA,KAC/B,GHxeQ,GGweJrb,EAAsC,CACtC,MAAMijB,EAAMpW,KAAKoW,MACbpD,IAAY3C,mBAAqB+F,EAAMF,GAA0BhD,MACjEgD,EAAyBE,EAAMpD,IAAYvC,sBAC3CwF,IAEpB,MAAmB,GH7eK,GG6eD9iB,EACH6f,IAAY1C,uBAAyB4C,KACrC+C,QAED,IHhfE,GGgfE9iB,EACP,OAAOoZ,IACJ,GHjfY,GGifRpZ,EACP,OAAOoZ,EAAWiC,EAClC,CACY,IAsBJ,OAlBAoE,EAAaK,SAAU,EACvBJ,EAAOI,QAAU1gB,EACjBmgB,EAAkBO,SAAU,EAE5BG,EAAS,CACLtG,GAAI0F,IAGJsC,IACItB,GAAcxY,IAAS2P,GAEvBsL,IAIArL,GAAIqL,IAGL,KAEHrD,EAAaK,SAAU,EACvBoD,GAAa,CAChB,GACF,CACC9jB,IAGJuY,IAA0B,KACtB,IAAI2L,EACJ,SAASte,IAGL,MAAMue,EAAWX,GAAa3D,GAAmBA,EAAgBe,IAAWnY,MAAQoX,EAIhFsE,QAAYD,IACZA,EAAQ5L,WAAW8L,EAASD,GAE5C,CACQ,SAASC,IAGAxD,IAAWle,QAAUod,IAAqBW,IAAY/I,cAAiBqI,IAAsBU,IAAYhJ,WAI1G7R,IAHAoU,EAAWqF,IAAa7I,KAAK5Q,EAK7C,CAEQ,OADAA,IACO,KACCse,IACAG,aAAaH,GACbA,GAAU,EAC1B,CACS,GACF,CACCrE,EACAC,EACAC,EACA/f,IAGJ+U,EAAAA,cAAcsM,GAKV3B,GAAYuB,GAAcxY,IAASzI,EAAK,CAIxC,IAAKkY,IAAmBE,GACpB,MAAM,IAAInW,MAAM,yDAGpBse,EAAWG,QAAUjB,EACrBe,EAAUE,QAAUpD,EACpB+C,EAAaK,SAAU,EACvB,MAAM1B,EAAMpE,EAAQ5a,GACpB,IAAKihB,GAAcjC,GAAM,CACrB,MAAMsF,EAAUb,EAAYzE,GAC5BL,GAAI2F,EAChB,CACQ,IAAIrD,GAAcve,GAQd,MAAMA,EARgB,CACtB,MAAM4hB,EAAUtK,EAAWqF,IACtB4B,GAAcI,KACfiD,EAAQnF,OAAS,YACjBmF,EAAQlgB,OAAQ,GAEpBua,GAAI2F,EAChB,CAGA,CAoBI,MAnBoB,CAChBvI,OAAQ0H,EACR,QAAIhb,GAEA,OADAuY,EAAkBvY,MAAO,EAClB4Y,CACV,EACD,SAAI3e,GAEA,OADAse,EAAkBte,OAAQ,EACnBA,CACV,EACD,gBAAIgf,GAEA,OADAV,EAAkBU,cAAe,EAC1BA,CACV,EACD,aAAIC,GAEA,OADAX,EAAkBW,WAAY,EACvBA,CACnB,EAEsB,EF3iBX,YAAuBxW,GAE1B,MAAMoZ,EArCHnO,GAAa2G,GAAeyH,EAAUA,WAACjG,MAuCnCve,EAAKwc,EAAIiI,GApDN,CAACtZ,GACRgL,GAAWhL,EAAK,IAAM,CACzBA,EAAK,GACLA,EAAK,GACLA,EAAK,IAAM,CAAA,GACX,CACAA,EAAK,GACL,MACa,OAAZA,EAAK,GAAcA,EAAK,GAAKA,EAAK,KAAO,CAAA,GA4CfuZ,CAAUvZ,GAE/BmS,EF6aO,EAACjH,EAAGC,KAErB,MAAMJ,EAAIE,GAAaC,EAAGC,GAE1B,GAAIA,EAAG,CACH,MAAQqI,IAAKgG,EAAIrG,SAAUsG,GAAOvO,GAC1BsI,IAAKkG,EAAIvG,SAAUwG,GAAOxO,EAC9BqO,GAAME,IACN3O,EAAEyI,IAAMgG,EAAGjkB,OAAOmkB,IAElBD,GAAME,IACN5O,EAAEoI,SAAWlI,GAAawO,EAAIE,GAE1C,CACI,OAAO5O,CAAC,EE3bW6O,CAAaR,EAAgBE,GAE5C,IAAI7e,EAAO4Z,GACX,MAAMb,IAAEA,GAAQrB,EACV0H,GAAcrG,GAAO,IAAIje,OAAOke,IACtC,IAAI,IAAIhX,EAAIod,EAAWvf,OAAQmC,KAC3BhC,EAAOof,EAAWpd,GAAGhC,GAEzB,OAAOA,EAAK5F,EAAKwc,GAAMc,EAAOmC,SAAW,KAAMnC,EAClD,GAhBY,IAACkC,mDGrClByF,GA7BA,SAAkBC,EAAWC,GAC5B,GAAyB,mBAAdD,EACV,MAAM,IAAIE,UAAS1kB,wDAAAA,OAAAmE,EAAmEqgB,GAAS,OAKhG,IAAIG,EACAC,EAAe,EAEnB,OAAO,WAAkC,IAAA,IAAAC,EAAA/iB,KAAAgjB,EAAAhgB,UAAAC,OAAZggB,EAAUlc,IAAAA,MAAAic,GAAA7L,EAAA,EAAAA,EAAA6L,EAAA7L,IAAV8L,EAAU9L,GAAAnU,UAAAmU,GACtC0K,aAAagB,GAEb,IAAMxB,EAAMpW,KAAKoW,MAEX6B,EAAmBP,GADCtB,EAAMyB,GAG5BI,GAAoB,GACvBJ,EAAezB,EACfqB,EAAUS,MAAMnjB,KAAMijB,IAEtBJ,EAAY/M,YAAW,WACtBgN,EAAe7X,KAAKoW,MACpBqB,EAAUS,MAAMJ,EAAME,EACtB,GAAEC,EAEJ,CACF,qBCgKA,SAASE,GAASpJ,EAAIqJ,GACpB,OAAiB,MAAVA,EAAiBC,GAAiBtJ,EAAIqJ,GAAUrJ,CACzD,CAKA,SAASuJ,GAAeC,GACtB,MAAO5hB,EAAO6hB,GAAYC,EAAAA,SAAUF,GAMpC,OALArnB,EAAAA,WAAU,KACH+T,GAAgBsT,EAAa5hB,IAChC6hB,EAASD,EACf,GACK,CAACA,EAAa5hB,IACVA,CACT,CAGA,SAAS+hB,IAAQC,IACfA,EAAM,YAAWze,GACjBA,EAAE0e,gBACFA,EAAeC,aACfA,EAAe,GAAEC,uBACjBA,EAAsBnZ,WACtBA,EAAUoZ,gCACVA,EAA+BC,SAC/BA,EAAW,EAACC,eACZA,EAAiB,OAAMC,WACvBA,EAAUtZ,SACVA,EAAQ6P,QACRA,EAAO0J,YACPA,EAAWC,QACXA,EAAOC,KACPA,EACAzf,WAAYiG,EAAcyZ,GAC1B1U,MAAO2U,EAAMC,uBACbA,GAAyB,EACzBC,sBAAuBC,GACrB,IACF,MAAOC,GAAUC,EAAStnB,SAACuN,GACrBga,EAAe,MAAN3f,EAAaA,EAAKyf,EAC3BG,EAAyB,iBAARnB,EAAmB,CAACA,EAAKkB,GAAUA,EACpDE,EAAwBzB,GAAkC,MAAnBM,EAA0BA,EAAkB,IACnFoB,EAA2BnG,EAAOA,SACtC,IAAM9O,GAAiBgV,IACvB,CAACA,KAEK/e,KAAMgK,EAAQsJ,OAAEA,GAAWwD,GACjC,CAACgI,EAAS,YACV,KACA,CAAE5H,aAAc8H,IAEZC,EAAcC,EAAAA,OAAQlV,GAAY,IACxCmV,EAAAA,WAAW,KACTF,EAAYhH,QAAUjO,GAAY,EAAE,GACnC,CAACA,IACJ,MAAQhK,KAAMof,EAAY9L,OAAQ+L,GAAqBvI,GAAO,CAACgI,EAAS,cAAe,MACjFQ,EAAgBJ,EAAOvH,OAACyH,GAC9BD,EAAAA,WAAW,KACTG,EAAcrH,QAAUmH,CAAU,GACjC,CAACA,IACJ,MAAQpf,KAAM0W,EAAS,QAASpD,OAAQiM,GAAiBzI,GAAO,CAACgI,EAAS,UAAW,OAC7E9e,KAAM/F,EAAgBqZ,OAAQkM,GAAa1I,GAAO,CAACgI,EAAS,SAAU,MACxEW,EAAqBP,EAAOvH,OAAC,MAC7B+H,EAAmBR,EAAAA,OAAQ,CAC/Bf,cACAC,UACAC,SAEFc,EAAAA,WAAW,KACTO,EAAiBzH,QAAU,CACzBkG,cACAC,UACAC,OACD,GACA,CAACF,EAAaC,EAASC,IAC1B,MAAMsB,EAAiBC,EAAYlG,aACjCnV,MAAOsb,EAAaC,EAAc,cAChC,IAAI5mB,EAAIgM,EACRqa,EAAa,aACbC,OAASnqB,GACT,MAAM0qB,EAAehW,GAAiB8V,EAAY7V,UAC5CgW,EAAeD,EAAa/iB,OAC5BijB,EAAUpW,GACkC,OAA/C3Q,EAAK6mB,EAAaA,EAAa/iB,OAAS,SAAc3H,EAAS6D,EAAGmM,iBAErE,IACE,MAAM6a,EAAkB,IAAIC,gBAC5BV,EAAmBxH,QAAUiI,EAC7B,MAAME,EAAkBjD,GAAS7J,EAAQoL,GACnC2B,EAA4BlD,GAChCkC,EACAX,GAEI4B,EAAmBrB,EAAYhH,QACrCmI,EAAgBL,GAAc,GAC9B,MAAMQ,EAA6BzC,EAAyBiC,EAAeA,EAAa1d,KACtF,EACExB,OACAG,UACAwf,2BACAxgB,OACAqG,cACAhB,kBACAO,YACK,CACL/E,OACAG,kBACgC,IAA7Bwf,GAAuC,CACxCA,oCAEU,IAATxgB,GAAmB,CAAEA,gBACL,IAAhBqG,GAA0B,CAAEA,uBACR,IAApBhB,GAA8B,CAAEA,2BACtB,IAAVO,GAAoB,CAAEA,aAGvB6a,EAAenB,EAAcrH,cVk3B3C1T,gBAA2BoZ,IACzBA,EAAGU,KACHA,EAAIJ,eACJA,EAAiB,OAAME,YACvBA,EAAWC,QACXA,EAAO8B,gBACPA,EAAeQ,yBACfA,EAAwBxC,WACxBA,EAAUyC,SACVA,EAAQ/b,SACRA,EAAQD,WACRA,EACA/F,WAAYiG,EACZ+E,MAAO2U,EAAS5U,KAAkB1E,YAClCA,EAAW6a,YACXA,EAAc,aAEd,IAAI5mB,EAAIgM,EAAIwN,EACZ,MAAMkO,EAA0B,WAAhBd,EAA2BvB,EAAO,GAAGZ,YAAcU,EAAKnf,KAAM,CAC5E2hB,OAAQ,MACRzC,QAAS,CACP,eAAgB,sBACbA,GAEL0C,OAAuE,OAA9D5nB,EAAwB,MAAnBgnB,OAA0B7qB,EAAS6qB,UAA6B7qB,EAAS6D,EAAG4nB,OAC1F3C,gBACGI,EAAOZ,EAAK,CACfkD,OAAQ,OACRxC,KAAM9jB,KAAKC,UAAU6jB,GACrBD,QAAS,CACP,eAAgB,sBACbA,GAEL0C,OAAuE,OAA9D5b,EAAwB,MAAnBgb,OAA0B7qB,EAAS6qB,UAA6B7qB,EAAS6P,EAAG4b,OAC1F3C,gBAEI4C,QAAiBH,EAAQhO,OAAOzU,IAEpC,MADAuiB,IACMviB,CAAG,IAEX,GAAI+f,EACF,UACQA,EAAW6C,EAClB,CAAC,MAAO5iB,GACP,MAAMA,CACZ,CAEE,IAAK4iB,EAASC,GAEZ,MADAN,IACM,IAAIlnB,MACwB,OAA/BkZ,QAAWqO,EAAS3lB,QAAkBsX,EAAK,sCAGhD,IAAKqO,EAAS1C,KACZ,MAAM,IAAI7kB,MAAM,+BAElB,OAAQykB,GACN,IAAK,OAOH,kBANM7U,GAAwB,CAC5B3E,OAAQsc,EAAS1C,KACjB3Z,OAAQic,EACR/b,WACAhG,WAAYiG,IAIhB,IAAK,OAaH,kBAZML,GAAoB,CACxBC,OAAQsc,EAAS1C,KACjB3Z,OAAQic,EACR1b,cACAN,aACA,QAAAC,EAAShL,QAAEA,EAAOgJ,aAAEA,EAAYC,MAAEA,IAC5B+B,GAAuB,MAAXhL,GACdgL,EAAShL,EAAS,CAAEiJ,QAAOD,gBAE9B,EACDhE,WAAYiG,IAIhB,QAEE,MAAM,IAAIrL,MAAM,4BADQykB,KAI9B,CUv8BcgD,CAAY,CAChBtD,MACAU,KAKO,OALAnZ,EAAwC,MAAnC6Y,OAA0C,EAASA,EAAgC,CAC7F7e,GAAI2f,EACJ7U,SAAU+V,EACVmB,YAAarB,EAAY7f,KACzBmhB,YAAatB,EAAYxB,QACbnZ,EAAK,CACjBhG,GAAI2f,EACJ7U,SAAUuW,EACVvgB,KAAM6f,EAAY7f,QACf0f,EAAiBzH,QAAQoG,QACzBwB,EAAYxB,MAEjBJ,iBACAE,YAAauB,EAAiBzH,QAAQkG,YACtCC,QAAS,IACJsB,EAAiBzH,QAAQmG,WACzByB,EAAYzB,SAEjB8B,gBAAiB,IAAMT,EAAmBxH,QAC1C,wBAAAyI,GACOlC,GACH4B,EAAgBE,GAAkB,EAErC,EACDpC,aACA,QAAAyC,EAAS/mB,QAAEA,EAAOoG,KAAEA,EAAImF,mBAAEA,IACxBoa,EAAa,aACba,EACE,IACKjb,EAAqB4a,EAAavjB,MAAM,EAAGujB,EAAa/iB,OAAS,GAAK+iB,EACzEnmB,IAEF,IAEU,MAARoG,OAAe,EAASA,EAAKhD,SAC/BqjB,EACE,IAAoB,MAAhBI,EAAuBA,EAAe,MAAOzgB,IACjD,EAGL,EACD2E,aACAC,WACAhG,WAAYiG,EACZ+E,MAAO2U,EACPtZ,YAAa8a,EAAaA,EAAa/iB,OAAS,GAChD8iB,gBAEFL,EAAmBxH,QAAU,KAC7BsH,EAAa,QACd,CAAC,MAAOphB,GACP,GAAiB,eAAbA,EAAIzE,KAGN,OAFA+lB,EAAmBxH,QAAU,KAC7BsH,EAAa,SACN,KAEL9K,GAAWtW,aAAe3E,OAC5Bib,EAAQtW,GAEVqhB,EAASrhB,GACTohB,EAAa,QACrB,CACM,MAAM6B,EAAYnC,EAAYhH,SVytCpC,UAAgCoJ,8BAC9BA,EAA6BC,qBAC7BA,EAAoBtD,SACpBA,EAAQhU,SACRA,IAEA,IAAI9Q,EACJ,MAAM+L,EAAc+E,EAASA,EAAShN,OAAS,GAC/C,OAEEghB,EAAW,GACI,MAAf/Y,IACC+E,EAAShN,OAASskB,GAAwBzX,GAA6B5E,EAAYI,mBAAqBgc,IACzG1V,GAAyC1G,KAC4B,OAAnE/L,EAAK2Q,GAA6B5E,EAAYI,kBAA4BnM,EAAK,GAAK8kB,CAE1F,EUxuCUuD,CAAuB,CACzBF,8BAA+BpB,EAC/BqB,qBAAsBtB,EACtBhC,WACAhU,SAAUoX,WAEJzB,EAAe,CAAE3V,SAAUoX,GACzC,GAEI,CACE9N,EACAiM,EACA5B,EACA+B,EACAxB,EACAtZ,EACA6P,EACA+K,EACAH,EACAC,EACArB,EACAH,EACAC,EACApZ,EACAqZ,EACAiB,EACAQ,EACA5a,EACA0Z,EACAC,EACAE,EACAG,IAGE2C,EAAS5B,EAAYlG,aACzBnV,MAAO3K,GACLoG,OACAoe,QAASqD,EACTpD,KAAMqD,EACNlB,2BAA2B5mB,EAAQ4mB,0BACjC,MACF,IAAItnB,EAAIgM,EACR,MAAMyc,QAA8BnX,GAClCgW,GAEIY,EAAYnC,EAAYhH,QAAQhgB,OAAO,IACxC2B,EACHsF,GAAyB,OAApBhG,EAAKU,EAAQsF,IAAchG,EAAK2L,IACrCc,UAAuC,OAA3BT,EAAKtL,EAAQ+L,WAAqBT,EAAqB,IAAIF,KACvEwb,yBAA0BmB,EAAsB3kB,OAAS,EAAI2kB,OAAwBtsB,EACrFuQ,MAAOkE,GAAgBlQ,KAEzB,OAAO+lB,EAAe,CAAE3V,SAAUoX,EAAWhD,QAASqD,EAAUpD,KAAMqD,EAAO1hB,QAAO,GAEtF,CAAC2f,EAAgB9a,IAEb+c,EAAShC,EAAYlG,aACzBnV,OAASvE,OAAMoe,QAASqD,EAAUpD,KAAMqD,GAAU,MAChD,MAAMN,EAAYnC,EAAYhH,QAC9B,GAAyB,IAArBmJ,EAAUpkB,OACZ,OAAO,KAET,MAAMiI,EAAcmc,EAAUA,EAAUpkB,OAAS,GACjD,OAAO2iB,EAAe,CACpB3V,SAA+B,cAArB/E,EAAYpE,KAAuBugB,EAAU5kB,MAAM,GAAK,GAAI4kB,EACtEhD,QAASqD,EACTpD,KAAMqD,EACN1hB,QACA,GAEJ,CAAC2f,IAEGkC,EAAOjC,EAAAA,aAAa,KACpBH,EAAmBxH,UACrBwH,EAAmBxH,QAAQ6J,QAC3BrC,EAAmBxH,QAAU,KACnC,GACK,IACG8J,EAAsBnC,EAAAA,aAAarb,UACvC,MAAM6c,EAAYnC,EAAYhH,QAC9B0H,EAAe,CAAE3V,SAAUoX,GAAa,SAAS,GAChD,CAACzB,IACEqC,EAAcpC,EAAYlG,aAC7B0H,IAC0B,mBAAdA,IACTA,EAAYA,EAAUnC,EAAYhH,UAEpC,MAAMgK,EAAoBlY,GAAiBqX,GAC3C9N,EAAO2O,GAAmB,GAC1BhD,EAAYhH,QAAUgK,CAAiB,GAEzC,CAAC3O,IAEG4O,EAAUtC,EAAYlG,aACzB1Z,IACqB,mBAATA,IACTA,EAAOA,EAAKsf,EAAcrH,UAE5BoH,EAAiBrf,GAAM,GACvBsf,EAAcrH,QAAUjY,CAAI,GAE9B,CAACqf,KAEI7d,EAAO2gB,GAAYvD,EAAAA,SAAUf,GAC9BuE,EAAexC,EAAYlG,aAC/BnV,MAAO8d,EAAOlmB,EAAU,CAAE,EAAEmmB,KAC1B,IAAIppB,EAEJ,GADwD,OAAvDA,EAAc,MAATmpB,OAAgBhtB,EAASgtB,EAAME,iBAAmCrpB,EAAG6E,KAAKskB,IAC3E7gB,IAAUrF,EAAQqmB,iBACrB,OACEF,IACF5C,EAAiBzH,QAAU,IACtByH,EAAiBzH,WACjBqK,IAGP,MAAMX,QAA8BnX,GAClCrO,EAAQqkB,0BAUJX,EAAc,CAClB7V,SATgBiV,EAAYhH,QAAQhgB,OAAO,CAC3CiH,GAAI2F,IACJc,UAA2B,IAAIX,KAC/BnE,KAAM,OACNG,QAASQ,EACTgf,yBAA0BmB,EAAsB3kB,OAAS,EAAI2kB,OAAwBtsB,EACrFuQ,MAAO,CAAC,CAAEzN,KAAM,OAAQiD,KAAMoG,MAI9B4c,QAASjiB,EAAQiiB,QACjBC,KAAMliB,EAAQkiB,KACdre,KAAM7D,EAAQ6D,MAEhB2f,EAAeE,GACfsC,EAAS,GAAG,GAEd,CAAC3gB,EAAOqD,EAAa8a,IAKjB8C,EAAgB7C,EAAYlG,aAChC,EAAGlX,aAAY1C,aACb,MAAM4iB,EAAkBzD,EAAYhH,QAapC,GVylCN,UAA8BjO,SAC5BA,EAAQxH,WACRA,EACAmgB,WAAY7iB,IAEZ,IAAI5G,EACJ,MAAM+L,EAAc+E,EAASA,EAAShN,OAAS,GACzC4lB,EAAiB3d,EAAYW,MAAMM,MACtC5D,GAAuB,oBAAdA,EAAKnK,MAA8BmK,EAAKkD,eAAehD,aAAeA,IAElF,GAAsB,MAAlBogB,EACF,OAEF,MAAMD,EAAa,IACdC,EAAepd,eAClBkD,MAAO,SACP5I,UAEF8iB,EAAepd,eAAiBmd,EAChC1d,EAAYI,gBAAwD,OAArCnM,EAAK+L,EAAYI,sBAA2BhQ,EAAS6D,EAAGmJ,KACpFmD,GAAmBA,EAAehD,aAAeA,EAAamgB,EAAand,GAEhF,CU3nCMqd,CAAqB,CACnB7Y,SAAU0Y,EACVlgB,aACAmgB,WAAY7iB,IAEdwT,EACE,IACKoP,EAAgBlmB,MAAM,EAAGkmB,EAAgB1lB,OAAS,GACrD,IAAK0lB,EAAgBA,EAAgB1lB,OAAS,MAEhD,GAEa,cAAX0Z,GAAqC,cAAXA,EAC5B,OAGE/K,GADgB+W,EAAgBA,EAAgB1lB,OAAS,KAE3D2iB,EAAe,CAAE3V,SAAU0Y,GACnC,GAEI,CAACpP,EAAQoD,EAAQiJ,IAEnB,MAAO,CACL3V,SAAsB,MAAZA,EAAmBA,EAAW,GACxC9K,GAAI2f,EACJmD,cACAhiB,KAAMof,EACN8C,UACAjoB,QACAunB,SACAI,SACAC,OACAE,sBACAvgB,QACA2gB,WACAW,kBAzCyB7pB,IACzBkpB,EAASlpB,EAAEqS,OAAO3P,MAAM,EAyCxBymB,eACAlJ,UAAsB,cAAXxC,GAAqC,cAAXA,EACrCA,SACA+L,gBAEJ,CC3iBO,SAASM,GAAShP,EAAIiP,GAC3B,IAAIC,OAAU5tB,EACd,OAAO,WACL,IAAK,IAAI0nB,EAAOhgB,UAAUC,OAAQ0F,EAAO,IAAI5B,MAAMic,GAAO7L,EAAO,EAAGA,EAAO6L,EAAM7L,IAC/ExO,EAAKwO,GAAQnU,UAAUmU,GAErB+R,GACFrH,aAAaqH,GAEfA,EAAUpT,YAAW,WACnB,OAAOkE,EAAGmJ,WAAM7nB,EAAQqN,EACzB,GAAEsgB,EACJ,CACH,CCbO,SAASE,GAAQC,GACtB,OAAOA,EAAO7d,QAAO,SAAUsI,EAAGC,GAChC,OAAOD,EAAE3V,OAAO4V,EACjB,GAAE,GACL,CCJA,IAAIuV,GAAiB,ECAd,SAASC,GAAc3a,GAC5B,OAAiC,IAA7BA,EAAM4a,YAAYtmB,OACb,EAEF0L,EAAM4a,YAAYhe,QAAO,SAAUie,EAAKC,GAC7C,OAAOD,EAAMC,EAAWC,MAAMzmB,MAC/B,GAAE,EACL,CCPA,SAAS0mB,GAAYjnB,GACnB,OAAOA,IAAQmB,OAAOnB,EACxB,CACO,SAASic,GAAQiL,EAAOC,GAC7B,GAAID,IAAUC,EACZ,OAAO,EAET,GAAIF,GAAYC,IAAUD,GAAYE,IAA4B,mBAAVD,GAA0C,mBAAXC,EACrF,OAAOD,IAAUC,EAEnB,GAAIhmB,OAAO0M,KAAKqZ,GAAO3mB,SAAWY,OAAO0M,KAAKsZ,GAAQ5mB,OACpD,OAAO,EAET,IAAK,IAAI6mB,EAAK,EAAGC,EAAelmB,OAAO0M,KAAKqZ,GAAQE,EAAKC,EAAa9mB,OAAQ6mB,IAAM,CAClF,IAAItsB,EAAMusB,EAAaD,GACvB,KAAMtsB,KAAOqsB,GACX,OAAO,EAET,IAAKlL,GAAQiL,EAAMpsB,GAAMqsB,EAAOrsB,IAC9B,OAAO,CAEX,CACA,OAAO,CACT,CCvBO,IAAI8V,GAAO,WAAkB,ECA7B,ICCI0W,GAAa,CAAC,CACvBC,QAAS,oBACTC,QDHmB,WEAd,SAASC,GAAmBhvB,GACjC,IAAIgM,EAAOhM,EAAKgM,KACdijB,EAAajvB,EAAKuuB,MAClBA,OAAuBpuB,IAAf8uB,EAAwB,GAAKA,EACvC,MAAO,CACL1b,MAAOvH,EAAKkjB,yBACZX,MAAO,CAACviB,GACRmjB,UAAW,CAAC,EAAIZ,EAAMva,WAAU,SAAUiD,GACxC,OAAOA,EAAEmY,WAAapjB,EAAKojB,QAC7B,KACAC,QAASrjB,EAAKsjB,uBACdC,cAAe,CAAC,gBAEpB,CCbA,SAASptB,GAAeqtB,EAAKvlB,GAAK,OAKlC,SAAyBulB,GAAO,GAAI5jB,MAAMC,QAAQ2jB,GAAM,OAAOA,CAAK,CAL3BC,CAAgBD,IAIzD,SAA+BA,EAAKvlB,GAAK,IAAI0kB,EAAK,MAAQa,EAAM,KAAO,oBAAsBrrB,QAAUqrB,EAAIrrB,OAAOurB,WAAaF,EAAI,cAAe,GAAI,MAAQb,EAAI,CAAE,IAAIgB,EAAInmB,EAAIomB,EAAIC,EAAIC,EAAO,GAAIC,GAAK,EAAIC,GAAK,EAAI,IAAM,GAAIJ,GAAMjB,EAAKA,EAAG9lB,KAAK2mB,IAAMvnB,KAAM,IAAMgC,QAAoD,OAAS8lB,GAAMJ,EAAKC,EAAG/mB,KAAK8lB,IAAKnmB,QAAUsnB,EAAK9mB,KAAK2mB,EAAGlpB,OAAQqpB,EAAKhoB,SAAWmC,GAAI8lB,GAAK,GAAM,CAAC,MAAO9mB,GAAO+mB,GAAK,EAAIxmB,EAAKP,CAAK,CAAU,QAAE,IAAM,IAAK8mB,GAAM,MAAQpB,EAAGsB,SAAWJ,EAAKlB,EAAGsB,SAAUvnB,OAAOmnB,KAAQA,GAAK,MAAQ,CAAU,QAAE,GAAIG,EAAI,MAAMxmB,CAAI,CAAE,CAAE,OAAOsmB,CAAM,CAAE,CAJ1gBI,CAAsBV,EAAKvlB,IAE5F,SAAqCkmB,EAAGC,GAAU,IAAKD,EAAG,OAAQ,GAAiB,iBAANA,EAAgB,OAAOE,GAAkBF,EAAGC,GAAS,IAAI7nB,EAAIG,OAAOC,UAAUvB,SAASyB,KAAKsnB,GAAG7oB,MAAM,MAAkB,WAANiB,GAAkB4nB,EAAE5rB,cAAagE,EAAI4nB,EAAE5rB,YAAYC,MAAM,GAAU,QAAN+D,GAAqB,QAANA,EAAa,OAAOqD,MAAMgK,KAAKua,GAAI,GAAU,cAAN5nB,GAAqB,2CAA2C/F,KAAK+F,GAAI,OAAO8nB,GAAkBF,EAAGC,EAAS,CAF7TE,CAA4Bd,EAAKvlB,IACnI,WAA8B,MAAM,IAAIwd,UAAU,4IAA8I,CADvD8I,EAAoB,CAG7J,SAASF,GAAkBb,EAAKtR,IAAkB,MAAPA,GAAeA,EAAMsR,EAAI1nB,UAAQoW,EAAMsR,EAAI1nB,QAAQ,IAAK,IAAImC,EAAI,EAAGumB,EAAO,IAAI5kB,MAAMsS,GAAMjU,EAAIiU,EAAKjU,IAAKumB,EAAKvmB,GAAKulB,EAAIvlB,GAAI,OAAOumB,CAAM,CCHlL,IAAI3uB,GAAY,CAAC,SACf4uB,GAAa,CAAC,SAChB,SAASvpB,GAAQK,GAAkC,OAAOL,GAAU,mBAAqB/C,QAAU,iBAAmBA,OAAOurB,SAAW,SAAUnoB,GAAO,cAAcA,CAAM,EAAG,SAAUA,GAAO,OAAOA,GAAO,mBAAqBpD,QAAUoD,EAAIhD,cAAgBJ,QAAUoD,IAAQpD,OAAOwE,UAAY,gBAAkBpB,CAAK,EAAGL,GAAQK,EAAM,CAC/U,SAASmpB,GAAmBlB,GAAO,OAInC,SAA4BA,GAAO,GAAI5jB,MAAMC,QAAQ2jB,GAAM,OAAOa,GAAkBb,EAAM,CAJhDmB,CAAmBnB,IAG7D,SAA0BoB,GAAQ,GAAsB,oBAAXzsB,QAAmD,MAAzBysB,EAAKzsB,OAAOurB,WAA2C,MAAtBkB,EAAK,cAAuB,OAAOhlB,MAAMgK,KAAKgb,EAAO,CAHxFC,CAAiBrB,IAEtF,SAAqCW,EAAGC,GAAU,IAAKD,EAAG,OAAQ,GAAiB,iBAANA,EAAgB,OAAOE,GAAkBF,EAAGC,GAAS,IAAI7nB,EAAIG,OAAOC,UAAUvB,SAASyB,KAAKsnB,GAAG7oB,MAAM,MAAkB,WAANiB,GAAkB4nB,EAAE5rB,cAAagE,EAAI4nB,EAAE5rB,YAAYC,MAAM,GAAU,QAAN+D,GAAqB,QAANA,EAAa,OAAOqD,MAAMgK,KAAKua,GAAI,GAAU,cAAN5nB,GAAqB,2CAA2C/F,KAAK+F,GAAI,OAAO8nB,GAAkBF,EAAGC,EAAS,CAFjUE,CAA4Bd,IAC1H,WAAgC,MAAM,IAAI/H,UAAU,uIAAyI,CAD3DqJ,EAAsB,CAKxJ,SAAST,GAAkBb,EAAKtR,IAAkB,MAAPA,GAAeA,EAAMsR,EAAI1nB,UAAQoW,EAAMsR,EAAI1nB,QAAQ,IAAK,IAAImC,EAAI,EAAGumB,EAAO,IAAI5kB,MAAMsS,GAAMjU,EAAIiU,EAAKjU,IAAKumB,EAAKvmB,GAAKulB,EAAIvlB,GAAI,OAAOumB,CAAM,CAClL,SAAS5uB,GAAyB0R,EAAQyd,GAAY,GAAc,MAAVzd,EAAgB,MAAO,CAAE,EAAE,IAAkEjR,EAAK4H,EAAnEmM,EACzF,SAAuC9C,EAAQyd,GAAY,GAAc,MAAVzd,EAAgB,MAAO,CAAE,EAAE,IAA2DjR,EAAK4H,EAA5DmM,EAAS,CAAE,EAAM4a,EAAatoB,OAAO0M,KAAK9B,GAAqB,IAAKrJ,EAAI,EAAGA,EAAI+mB,EAAWlpB,OAAQmC,IAAO5H,EAAM2uB,EAAW/mB,GAAQ8mB,EAAStiB,QAAQpM,IAAQ,IAAa+T,EAAO/T,GAAOiR,EAAOjR,IAAQ,OAAO+T,CAAQ,CADhN6a,CAA8B3d,EAAQyd,GAAuB,GAAIroB,OAAOwoB,sBAAuB,CAAE,IAAIC,EAAmBzoB,OAAOwoB,sBAAsB5d,GAAS,IAAKrJ,EAAI,EAAGA,EAAIknB,EAAiBrpB,OAAQmC,IAAO5H,EAAM8uB,EAAiBlnB,GAAQ8mB,EAAStiB,QAAQpM,IAAQ,GAAkBqG,OAAOC,UAAUyoB,qBAAqBvoB,KAAKyK,EAAQjR,KAAgB+T,EAAO/T,GAAOiR,EAAOjR,GAAQ,CAAE,OAAO+T,CAAQ,CAE3e,SAASib,GAAQC,EAAQC,GAAkB,IAAInc,EAAO1M,OAAO0M,KAAKkc,GAAS,GAAI5oB,OAAOwoB,sBAAuB,CAAE,IAAIM,EAAU9oB,OAAOwoB,sBAAsBI,GAASC,IAAmBC,EAAUA,EAAQ7pB,QAAO,SAAU8pB,GAAO,OAAO/oB,OAAOgpB,yBAAyBJ,EAAQG,GAAKE,UAAY,KAAKvc,EAAKpM,KAAKgf,MAAM5S,EAAMoc,EAAU,CAAE,OAAOpc,CAAM,CACpV,SAASwc,GAAcxb,GAAU,IAAK,IAAInM,EAAI,EAAGA,EAAIpC,UAAUC,OAAQmC,IAAK,CAAE,IAAIqJ,EAAS,MAAQzL,UAAUoC,GAAKpC,UAAUoC,GAAK,CAAE,EAAEA,EAAI,EAAIonB,GAAQ3oB,OAAO4K,IAAS,GAAIue,SAAQ,SAAUxvB,GAAOyvB,GAAgB1b,EAAQ/T,EAAKiR,EAAOjR,GAAO,IAAKqG,OAAOqpB,0BAA4BrpB,OAAOspB,iBAAiB5b,EAAQ1N,OAAOqpB,0BAA0Bze,IAAW+d,GAAQ3oB,OAAO4K,IAASue,SAAQ,SAAUxvB,GAAOqG,OAAOupB,eAAe7b,EAAQ/T,EAAKqG,OAAOgpB,yBAAyBpe,EAAQjR,GAAO,GAAI,CAAE,OAAO+T,CAAQ,CACzf,SAAS0b,GAAgBvqB,EAAKlF,EAAKoE,GAA4L,OAAnLpE,EAC5C,SAAwBiZ,GAAO,IAAIjZ,EACnC,SAAsBiK,EAAO4lB,GAAQ,GAAuB,WAAnBhrB,GAAQoF,IAAiC,OAAVA,EAAgB,OAAOA,EAAO,IAAI6lB,EAAO7lB,EAAMnI,OAAOiuB,aAAc,QAAajyB,IAATgyB,EAAoB,CAAE,IAAIE,EAAMF,EAAKtpB,KAAKyD,EAAO4lB,GAAQ,WAAY,GAAqB,WAAjBhrB,GAAQmrB,GAAmB,OAAOA,EAAK,MAAM,IAAI5K,UAAU,+CAAiD,CAAE,OAAiB,WAATyK,EAAoBI,OAASzkB,QAAQvB,EAAQ,CADnVimB,CAAajX,EAAK,UAAW,MAAwB,WAAjBpU,GAAQ7E,GAAoBA,EAAMiwB,OAAOjwB,EAAM,CAD1EmwB,CAAenwB,MAAiBkF,EAAOmB,OAAOupB,eAAe1qB,EAAKlF,EAAK,CAAEoE,MAAOA,EAAOkrB,YAAY,EAAMc,cAAc,EAAMC,UAAU,IAAkBnrB,EAAIlF,GAAOoE,EAAgBc,CAAK,CAc3O,SAASorB,GAAuBC,GAC9B,OAAOA,EAAOzlB,KAAI,SAAUnN,GAC1B,IAAIuuB,EAAQvuB,EAAKuuB,MACfsE,EAAQjxB,GAAyB5B,EAAM6B,IACzC,OAAO+vB,GAAcA,GAAc,CAAE,EAAEiB,GAAQ,CAAA,EAAI,CACjDC,WAAYvE,aAAqCpuB,EAASouB,EAAMphB,KAAI,SAAU4lB,GAE5E,OADeA,EAAM3D,QAEtB,MAAMyD,EAAMC,WAEjB,GACF,CACO,SAASE,GAAwBC,GACtC,ID5BEC,EACAC,EACAC,EC0BEC,GD5BFH,EAAc/wB,IC4B4B8wB,ED7BnBlE,SAAW,IAAI9b,MAAM,KAAK9F,IAAIU,QACZ,GACzCslB,EAAQD,EAAY,GACpBE,EAAQF,EAAY,GAGbC,GAAS,GACG,IAAVA,GAAeC,GAAS,GACb,IAAVD,GAAeC,GAAS,ICsBpC,SAASE,EAAe3H,EAAQ4H,EAAUhF,GACxC,GAAI8E,QAAmC,IAAV9E,EAAuB,CAClD,IAAIiF,EAAwBjF,EAAM,GAAGkF,kCAGjCvK,EAAU,CACZ,2BAHQsK,EAAsBE,MAI9B,oBAHSF,EAAsBG,QAKjCV,EAAejL,WAAM7nB,EAAQ,CAACwrB,GAAQ5oB,OAAO2tB,GAAmB6C,GAAW,CAAC,CAC1ErK,QAASA,KAEb,MACE+J,EAAejL,WAAM7nB,EAAQ,CAACwrB,GAAQ5oB,OAAO2tB,GAAmB6C,IAEpE,CACA,MAAO,CAILK,KAAM,SAAcF,EAAOC,GACzBV,EAAe,OAAQ,CACrBS,MAAOA,EACPC,OAAQA,GAEX,EAODE,0BAA2B,SAAmCC,GAC5Db,EAAe,4BAA6Ba,EAC7C,EAIDC,aAAc,SAAsBC,GAClCf,EAAe,eAAgBe,EAChC,EAMDC,4BAA6B,WAC3B,IAAK,IAAIpM,EAAOhgB,UAAUC,OAAQ8qB,EAAS,IAAIhnB,MAAMic,GAAO7L,EAAO,EAAGA,EAAO6L,EAAM7L,IACjF4W,EAAO5W,GAAQnU,UAAUmU,GAEvB4W,EAAO9qB,OAAS,GAClBwrB,EAAe,8BAA+BX,GAAuBC,GAASA,EAAO,GAAGrE,MAE3F,EAMD2F,iBAAkB,WAChB,IAAK,IAAIC,EAAQtsB,UAAUC,OAAQ8qB,EAAS,IAAIhnB,MAAMuoB,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACtFxB,EAAOwB,GAASvsB,UAAUusB,GAExBxB,EAAO9qB,OAAS,GAClBwrB,EAAe,mBAAoBX,GAAuBC,GAASA,EAAO,GAAGrE,MAEhF,EAMD8F,eAAgB,WACd,IAAK,IAAIC,EAAQzsB,UAAUC,OAAQ8qB,EAAS,IAAIhnB,MAAM0oB,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACtF3B,EAAO2B,GAAS1sB,UAAU0sB,GAExB3B,EAAO9qB,OAAS,GAClBmrB,EAAejL,WAAM7nB,EAAQ,CAAC,kBAAkB4C,OAAO6vB,GAE1D,EAMD4B,8BAA+B,WAC7B,IAAK,IAAIC,EAAQ5sB,UAAUC,OAAQ8qB,EAAS,IAAIhnB,MAAM6oB,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACtF9B,EAAO8B,GAAS7sB,UAAU6sB,GAExB9B,EAAO9qB,OAAS,GAClBwrB,EAAe,gCAAiCX,GAAuBC,GAASA,EAAO,GAAGrE,MAE7F,EAMDoG,mBAAoB,WAClB,IAAK,IAAIC,EAAQ/sB,UAAUC,OAAQ8qB,EAAS,IAAIhnB,MAAMgpB,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACtFjC,EAAOiC,GAAShtB,UAAUgtB,GAExBjC,EAAO9qB,OAAS,GAClBwrB,EAAe,qBAAsBX,GAAuBC,GAASA,EAAO,GAAGrE,MAElF,EAMDuG,iBAAkB,WAChB,IAAK,IAAIC,EAAQltB,UAAUC,OAAQ8qB,EAAS,IAAIhnB,MAAMmpB,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACtFpC,EAAOoC,GAASntB,UAAUmtB,GAExBpC,EAAO9qB,OAAS,GAClBmrB,EAAejL,WAAM7nB,EAAQ,CAAC,oBAAoB4C,OAAO6vB,GAE5D,EAMDqC,gBAAiB,WACf,IAAK,IAAIC,EAAQrtB,UAAUC,OAAQ8qB,EAAS,IAAIhnB,MAAMspB,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACtFvC,EAAOuC,GAASttB,UAAUstB,GAExBvC,EAAO9qB,OAAS,GAClB8qB,EAAOxiB,QAAO,SAAUglB,EAAK1yB,GAC3B,IAAI6rB,EAAQ7rB,EAAM6rB,MAChBsE,EAAQjxB,GAAyBc,EAAO+tB,IAC1C,MAAO,GAAG1tB,OAAO2tB,GAAmB0E,GAAM1E,GA5JpD,SAAe1kB,GAGb,IAFA,IAAIqpB,EAAYxtB,UAAUC,OAAS,QAAsB3H,IAAjB0H,UAAU,GAAmBA,UAAU,GAAK,GAChFiH,EAAS,GACJ7E,EAAI,EAAGA,EAAI+B,EAAK8mB,UAAUhrB,OAAQmC,GAAKorB,EAC9CvmB,EAAO9F,KAAK4oB,GAAcA,GAAc,CAAA,EAAI5lB,GAAO,GAAI,CACrD8mB,UAAW9mB,EAAK8mB,UAAUxrB,MAAM2C,EAAGA,EAAIorB,MAG3C,OAAOvmB,CACT,CAmJuEK,CAAMyiB,GAAcA,GAAc,CAAA,EAAIiB,GAAQ,CAAA,EAAI,CAC7GC,WAAYvE,aAAqCpuB,EAASouB,EAAMphB,KAAI,SAAU9J,GAE5E,OADeA,EAAM+rB,QAEtB,MAAMyD,EAAMC,aACX3lB,KAAI,SAAUmoB,GAChB,MAAO,CACL/G,MAAOA,EACP+G,QAASA,EAEZ,KACF,GAAE,IAAIzD,SAAQ,SAAU0D,GACvB,IAAIhH,EAAQgH,EAAMhH,MAElB,OAAO+E,EAAe,kBAAmB,CAD7BiC,EAAMD,SACkC/G,EACtD,GAEH,EAMDiH,cAAe,WACb,IAAK,IAAIC,EAAQ5tB,UAAUC,OAAQ8qB,EAAS,IAAIhnB,MAAM6pB,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACtF9C,EAAO8C,GAAS7tB,UAAU6tB,GAExB9C,EAAO9qB,OAAS,GAClBmrB,EAAejL,WAAM7nB,EAAQ,CAAC,iBAAiB4C,OAAO6vB,GAE1D,EAEJ,CC7MO,SAAS+C,GAAmB31B,GACjC,IACI41B,EADQ51B,EAAKuuB,MACYne,QAAO,SAAUglB,EAAKrS,GACjD,IAAI8S,EAEJ,OADAT,EAAIrS,EAAQmM,2BAAiG,QAAnE2G,EAAwBT,EAAIrS,EAAQmM,iCAAiE/uB,IAA1B01B,EAAmCA,EAAwB,IAAI9yB,OAAOggB,GACpLqS,CACR,GAAE,IACH,OAAO1sB,OAAO0M,KAAKwgB,GAAkBzoB,KAAI,SAAU2oB,GAEjD,MAAO,CACLviB,MAAOuiB,EACPvH,MAHUqH,EAAiBE,GAI3BvG,cAAe,CAAC,gBAEpB,GACF,CCfO,SAASwG,GAAqBC,GACnC,OAAOA,EAAI5G,UAAY4G,EAAI9G,0BAA4B8G,EAAI1G,sBAC7D,CCFA,SAASpoB,GAAQK,GAAkC,OAAOL,GAAU,mBAAqB/C,QAAU,iBAAmBA,OAAOurB,SAAW,SAAUnoB,GAAO,cAAcA,CAAM,EAAG,SAAUA,GAAO,OAAOA,GAAO,mBAAqBpD,QAAUoD,EAAIhD,cAAgBJ,QAAUoD,IAAQpD,OAAOwE,UAAY,gBAAkBpB,CAAK,EAAGL,GAAQK,EAAM,CAC/U,SAASmpB,GAAmBlB,GAAO,OAInC,SAA4BA,GAAO,GAAI5jB,MAAMC,QAAQ2jB,GAAM,OAAOa,GAAkBb,EAAM,CAJhDmB,CAAmBnB,IAG7D,SAA0BoB,GAAQ,GAAsB,oBAAXzsB,QAAmD,MAAzBysB,EAAKzsB,OAAOurB,WAA2C,MAAtBkB,EAAK,cAAuB,OAAOhlB,MAAMgK,KAAKgb,EAAO,CAHxFC,CAAiBrB,IAEtF,SAAqCW,EAAGC,GAAU,IAAKD,EAAG,OAAQ,GAAiB,iBAANA,EAAgB,OAAOE,GAAkBF,EAAGC,GAAS,IAAI7nB,EAAIG,OAAOC,UAAUvB,SAASyB,KAAKsnB,GAAG7oB,MAAM,MAAkB,WAANiB,GAAkB4nB,EAAE5rB,cAAagE,EAAI4nB,EAAE5rB,YAAYC,MAAM,GAAU,QAAN+D,GAAqB,QAANA,EAAa,OAAOqD,MAAMgK,KAAKua,GAAI,GAAU,cAAN5nB,GAAqB,2CAA2C/F,KAAK+F,GAAI,OAAO8nB,GAAkBF,EAAGC,EAAS,CAFjUE,CAA4Bd,IAC1H,WAAgC,MAAM,IAAI/H,UAAU,uIAAyI,CAD3DqJ,EAAsB,CAKxJ,SAAST,GAAkBb,EAAKtR,IAAkB,MAAPA,GAAeA,EAAMsR,EAAI1nB,UAAQoW,EAAMsR,EAAI1nB,QAAQ,IAAK,IAAImC,EAAI,EAAGumB,EAAO,IAAI5kB,MAAMsS,GAAMjU,EAAIiU,EAAKjU,IAAKumB,EAAKvmB,GAAKulB,EAAIvlB,GAAI,OAAOumB,CAAM,CAClL,SAASa,GAAQC,EAAQC,GAAkB,IAAInc,EAAO1M,OAAO0M,KAAKkc,GAAS,GAAI5oB,OAAOwoB,sBAAuB,CAAE,IAAIM,EAAU9oB,OAAOwoB,sBAAsBI,GAASC,IAAmBC,EAAUA,EAAQ7pB,QAAO,SAAU8pB,GAAO,OAAO/oB,OAAOgpB,yBAAyBJ,EAAQG,GAAKE,UAAY,KAAKvc,EAAKpM,KAAKgf,MAAM5S,EAAMoc,EAAU,CAAE,OAAOpc,CAAM,CACpV,SAASwc,GAAcxb,GAAU,IAAK,IAAInM,EAAI,EAAGA,EAAIpC,UAAUC,OAAQmC,IAAK,CAAE,IAAIqJ,EAAS,MAAQzL,UAAUoC,GAAKpC,UAAUoC,GAAK,CAAE,EAAEA,EAAI,EAAIonB,GAAQ3oB,OAAO4K,IAAS,GAAIue,SAAQ,SAAUxvB,GAAOyvB,GAAgB1b,EAAQ/T,EAAKiR,EAAOjR,GAAO,IAAKqG,OAAOqpB,0BAA4BrpB,OAAOspB,iBAAiB5b,EAAQ1N,OAAOqpB,0BAA0Bze,IAAW+d,GAAQ3oB,OAAO4K,IAASue,SAAQ,SAAUxvB,GAAOqG,OAAOupB,eAAe7b,EAAQ/T,EAAKqG,OAAOgpB,yBAAyBpe,EAAQjR,GAAO,GAAI,CAAE,OAAO+T,CAAQ,CACzf,SAAS0b,GAAgBvqB,EAAKlF,EAAKoE,GAA4L,OAAnLpE,EAC5C,SAAwBiZ,GAAO,IAAIjZ,EACnC,SAAsBiK,EAAO4lB,GAAQ,GAAuB,WAAnBhrB,GAAQoF,IAAiC,OAAVA,EAAgB,OAAOA,EAAO,IAAI6lB,EAAO7lB,EAAMnI,OAAOiuB,aAAc,QAAajyB,IAATgyB,EAAoB,CAAE,IAAIE,EAAMF,EAAKtpB,KAAKyD,EAAO4lB,GAAQ,WAAY,GAAqB,WAAjBhrB,GAAQmrB,GAAmB,OAAOA,EAAK,MAAM,IAAI5K,UAAU,+CAAiD,CAAE,OAAiB,WAATyK,EAAoBI,OAASzkB,QAAQvB,EAAQ,CADnVimB,CAAajX,EAAK,UAAW,MAAwB,WAAjBpU,GAAQ7E,GAAoBA,EAAMiwB,OAAOjwB,EAAM,CAD1EmwB,CAAenwB,MAAiBkF,EAAOmB,OAAOupB,eAAe1qB,EAAKlF,EAAK,CAAEoE,MAAOA,EAAOkrB,YAAY,EAAMc,cAAc,EAAMC,UAAU,IAAkBnrB,EAAIlF,GAAOoE,EAAgBc,CAAK,CAQ3O,IACI0uB,GAA2B,SAC3BC,GAAuB,gDAAgDnzB,OAAOkzB,GAA0B,gCACxGE,GAAsBtI,IAAS,SAAU7tB,GAC3C,IAAIo2B,EAAgBp2B,EAAKo2B,cACvB7H,EAAQvuB,EAAKuuB,MACb8H,EAAWr2B,EAAKq2B,SAChB7iB,EAAQxT,EAAKwT,MACf4iB,EAAc,CACZC,SAAUA,EACVC,eAAgBX,GAAmB,CACjCpH,MAAOA,IACNphB,KAAI,SAAUggB,GACf,OAAOyE,GAAc,CACnB2E,UAAW,gBACVpJ,EACL,IACA3Z,MAAOA,GAEX,GAnBuB,KAoBhB,SAASgjB,GAA4BvvB,GAC1C,IAAIwvB,EA6JN,SAAoBxvB,GAClB,OAAO2qB,GAAc,CACnBwE,cAAe,SAAuBM,GACpC,IAAIL,EAAWK,EAAML,SACnBC,EAAiBI,EAAMJ,eACvB9iB,EAAQkjB,EAAMljB,MAChB6iB,EAASpB,gBAAgBjN,MAAMqO,EAAU3F,GAAmB4F,EAAenpB,KAAI,SAAUggB,GACvF,OAAOyE,GAAcA,GAAc,CAAE,EAAEzE,GAAQ,CAAA,EAAI,CACjDoC,cAAeoH,GAAkBxJ,EAAMoC,cAAe/b,EAAMojB,UAE/D,KACF,EACDC,SAAU,SAAkBC,GAC1B,IAAIT,EAAWS,EAAMT,SACnBC,EAAiBQ,EAAMR,eACvB9iB,EAAQsjB,EAAMtjB,MAChB6iB,EAASpC,4BAA4BjM,MAAMqO,EAAU3F,GAAmB4F,EAAenpB,KAAI,SAAUggB,GACnG,OAAOyE,GAAcA,GAAc,CAAE,EAAEzE,GAAQ,CAAA,EAAI,CACjDoC,cAAeoH,GAAkBxJ,EAAMoC,cAAe/b,EAAMojB,UAE/D,KACF,EACDG,SAAU5e,GACV6e,+BAA+B,GAC9B/vB,EACL,CAtLoBgwB,CAAWhwB,GAC3BiwB,EAAyBT,EAAYU,eACrCC,EAAqBX,EAAYW,mBACjChB,EAAgBK,EAAYL,cAC5BiB,EAAgBZ,EAAYI,SAC5BS,EAAgBb,EAAYM,SAC5BC,EAAgCP,EAAYO,8BAC1CG,EAAiBD,EA8BrB,GA7BKA,GC3CA,SAA4B/c,GACjC,GAAsB,oBAAXzW,OACFyW,EAAS,CACdzW,OAAQA,QAId,CDqCI6zB,EAAmB,SAAUxE,GAC3B,IAAIrvB,EAASqvB,EAAMrvB,OACf8zB,EAAU9zB,EAAO+zB,wBAA0B,KACxB,iBAAZD,IACTL,EAAiBzzB,EAAO8zB,IAErBL,IACHzzB,EAAO+zB,uBAAyBD,EAC3B9zB,EAAO8zB,KACV9zB,EAAO8zB,GAAW,WACX9zB,EAAO8zB,GAASE,QACnBh0B,EAAO8zB,GAASE,MAAQ,IAE1B,IAAK,IAAI7P,EAAOhgB,UAAUC,OAAQ0F,EAAO,IAAI5B,MAAMic,GAAO7L,EAAO,EAAGA,EAAO6L,EAAM7L,IAC/ExO,EAAKwO,GAAQnU,UAAUmU,GAEzBtY,EAAO8zB,GAASE,MAAM1uB,KAAKwE,EAC5B,GAEH9J,EAAO8zB,GAASzI,QAAUkH,GAC1BkB,EAAiBzzB,EAAO8zB,GA0JhC,SAAsBG,GACpB,IAAIC,EAAe,4HACnB,IACE,IAAIC,EAASF,EAAYz2B,SAAS5B,cAAc,UAChDu4B,EAAOxoB,OAAQ,EACfwoB,EAAOC,IAAM5B,GACb2B,EAAOxhB,QAAU,WAEf0hB,QAAQhzB,MAAM6yB,EACf,EACD12B,SAASioB,KAAK6O,YAAYH,EAC3B,CAAC,MAAOlzB,GAEPozB,QAAQhzB,MAAM6yB,EAChB,CACF,CAxKQK,CAAav0B,GAEjB,KAKGyzB,EACH,MAAO,CAAE,EAEPC,GACFD,EAAe,OAAQvF,GAAc,CACnCsG,SAAS,GACRd,IAEL,IAAIf,EAAWrD,GAAwBmE,GACnCgB,EEnFG,CACLpV,QFkF4B,IAC1BqV,EAAyBvK,IAAS,SAAUnrB,GAC9C,IAAI8Q,EAAQ9Q,EAAM8Q,MAClB,GAAKA,EAAM6kB,OAAX,CAGA,IAAI9J,EAAQ/a,EAAM4a,YAAYhe,QAAO,SAAUglB,EAAKrS,GAClD,MAAO,GAAGhgB,OAAO2tB,GAAmB0E,GAAM1E,GAAmB3N,EAAQwL,OACvE,GAAG,IAAI5mB,OAAOouB,IACTvS,GAAQ2U,EAAcpV,QAAQ5V,KAAI,SAAU8J,GAC/C,OAAOA,EAAEmY,QACV,IAAGb,EAAMphB,KAAI,SAAU8J,GACtB,OAAOA,EAAEmY,QACV,OACC+I,EAAcpV,QAAUwL,EACpBA,EAAMzmB,OAAS,GACjBquB,GAAoB,CAClBC,cAAeA,EACf7H,MAAOA,EACP8H,SAAUA,EACV7iB,MAAOA,IAfb,CAmBD,GAAE,GACH,MAAO,CACLhP,KAAM,2BACNmT,UAAW,SAAmBtU,GAC5B,IAAIi1B,EAAaj1B,EAAMi1B,WACrBzB,EAAWxzB,EAAMwzB,SACjBE,EAAW1zB,EAAM0zB,SACnB,SAASwB,EAAmBvE,GAC1BsE,EAAW,CACTE,sBAAuB,CACrBC,0BAA2B7G,GAAcA,GAAc,CAAA,EAAIoF,EAAgC,CACzF0B,gBAAgB,GACd,CAAA,GAAK1E,EAAY,CACnBA,UAAW2E,GAAmB3E,IAC5B,IACJqC,SAAUA,IAGhB,CACAc,EAAe,kBAAmB,mBAClCoB,IAGApB,EAAe,qBAAqB,SAAUnD,GAC5CuE,EAAmBvE,EACrB,IACAmD,EAAe,eAAgB,MAAM,SAAUyB,EAAQ5E,GACrDuE,EAAmBvE,EACrB,IACA6C,GAAS,SAAUtB,GACjB,IAAIvpB,EAAOupB,EAAMvpB,KACfwH,EAAQ+hB,EAAM/hB,MACd2Z,EAAQoI,EAAMpI,MACd7Z,EAASiiB,EAAMjiB,OACZyiB,GAAqB/pB,IAG1BqrB,EAAc,CACZ7jB,MAAOA,EACP2Z,MAAOA,EACPkJ,SAAUA,EACVrqB,KAAMA,EACNsqB,eAAgB,CAAC1E,GAAc,CAC7B2E,UAAW,iBACVvH,GAAmB,CACpBhjB,KAAMA,EACNuiB,MAAOjb,EAAOulB,WAAWlxB,OAAOouB,SAGtC,IACAgB,GAAS,SAAU+B,GACjB,IAAI9sB,EAAO8sB,EAAM9sB,KACfsH,EAASwlB,EAAMxlB,OACfE,EAAQslB,EAAMtlB,MACd2Z,EAAQ2L,EAAM3L,MACX4I,GAAqB/pB,IAG1BsrB,EAAc,CACZ9jB,MAAOA,EACP2Z,MAAOA,EACPkJ,SAAUA,EACVrqB,KAAMA,EACNsqB,eAAgB,CAAC1E,GAAc,CAC7B2E,UAAW,eACVvH,GAAmB,CACpBhjB,KAAMA,EACNuiB,MAAOjb,EAAOulB,WAAWlxB,OAAOouB,SAGtC,GACD,EACDgD,cAAe,SAAuBC,GACpC,IAAIxlB,EAAQwlB,EAAMxlB,MAClB4kB,EAAuB,CACrB5kB,MAAOA,GAEV,EACDylB,6BAA8BhyB,EAElC,CACA,SAAS0vB,KACP,IAAIuC,EAEAtC,EAAU/uB,UAAUC,OAAS,EAAID,UAAU,QAAK1H,EACpD,MAAO,GAAG4C,OAAO2tB,GAFO7oB,UAAUC,OAAS,QAAsB3H,IAAjB0H,UAAU,GAAmBA,UAAU,GAAK,IAEpC,CAAC,yBAA0B6oB,GAA+E,QAA3DwI,EAAwBtC,EAAQ4B,6BAA6Dr4B,IAA1B+4B,GAAoCA,EAAsBC,oBAAsB,CAAC,0BAA4B,IACzR,CAgDA,SAASR,GAAmB3E,GAC1B,MAA4B,iBAAdA,EAAyBA,EAAU5sB,WAAa4sB,CAChE,CGpPA,SAASoF,GAAgCzS,EAASlB,GAChD,IAAIjS,EAAQiS,EACZ,MAAO,CACL5M,KAAM,SAAcwgB,EAAaC,GAC/B,OAAOF,GAAgCzS,EAAQ9N,KAAK0gB,GAAeF,EAAa7lB,EAAOmT,GAAU4S,GAAeD,EAAY9lB,EAAOmT,IAAWnT,EAC/I,EACDkK,MAAO,SAAgB4b,GACrB,OAAOF,GAAgCzS,EAAQjJ,MAAM6b,GAAeD,EAAY9lB,EAAOmT,IAAWnT,EACnG,EACDgmB,QAAS,SAAkBC,GAIzB,OAHIA,GACFjmB,EAAMkmB,aAAa1wB,KAAKywB,GAEnBL,GAAgCzS,EAAQ6S,QAAQD,GAAeE,GAAa,WAEjF,OADAjmB,EAAMkmB,aAAe,GACdD,GACR,EAAEjmB,EAAOmT,IAAWnT,EACtB,EACDmmB,OAAQ,WACNnmB,EAAMomB,YAAa,EACnB,IAAIxT,EAAY5S,EAAMkmB,aACtBlmB,EAAMkmB,aAAe,GACrBtT,EAAUyL,SAAQ,SAAU1X,GAC1BA,GACF,GACD,EACDyf,WAAY,WACV,OAA4B,IAArBpmB,EAAMomB,UACf,EAEJ,CAeO,SAASC,GAAWlT,GACzB,OAAOyS,GAAgCzS,EAAS,CAC9CiT,YAAY,EACZF,aAAc,IAElB,CACA,SAASH,GAAeO,EAAUtmB,EAAOmN,GACvC,OAAKmZ,EAGE,SAAkBxe,GACvB,OAAI9H,EAAMomB,WACDte,EAEFwe,EAASxe,EACjB,EAPQqF,CAQX,CC5DA,IACIoZ,GADAC,IAA0B,EAEvB,SAASC,KACd,IAAIC,EAAO,GACX,MAAO,CACLC,IAAK,SAAaC,GAEhB,OADAF,EAAKlxB,KAAKoxB,GACHA,EAAkBZ,SAAQ,WAC/BU,EAAOA,EAAKvyB,QAAO,SAAUqE,GAC3B,OAAOA,IAASouB,CAClB,GACF,GACD,EACDC,UAAW,WACTH,EAAKrI,SAAQ,SAAUlL,GACrB,OAAOA,EAAQgT,QACjB,GACD,EACDW,QAAS,WACP,OAAuB,IAAhBJ,EAAKpyB,MACb,EACD0f,KAAM,SAAcxH,GAElB,OAAKga,IAMLA,IAA0B,EAC1BD,GAAgB/Z,EAA8BtK,QAAQ6kB,KAAK,CAAC7kB,QAAQC,IAAIukB,GAAO,IAAIxkB,SAAQ,SAAUK,GACnG,OAAO4E,WAAW5E,EAASiK,EAC5B,MAFyBtK,QAAQC,IAAIukB,GAG/BH,GAAalhB,MAAK,WACvBmhB,IAA0B,CAC5B,KAXSD,EAYX,EAEJ,CCvBO,SAASS,GAAoBC,EAAYC,EAAWC,EAAWC,GACpE,IAAKD,EACH,OAAO,KAET,GAAIF,EAAa,IAAoB,OAAdC,GAA8C,OAAxBE,GAA8C,IAAdF,GAC3E,OAAOC,EAAYF,EAErB,IAAII,GAA8B,OAAdH,GAAuB,EAAGA,GAAaD,EAC3D,OAAII,IAAgB,GAAMA,GAAgBF,EACT,OAAxBC,EAA+B,KAAO,EAExCC,CACT,CC5BA,SAASxJ,GAAQC,EAAQC,GAAkB,IAAInc,EAAO1M,OAAO0M,KAAKkc,GAAS,GAAI5oB,OAAOwoB,sBAAuB,CAAE,IAAIM,EAAU9oB,OAAOwoB,sBAAsBI,GAASC,IAAmBC,EAAUA,EAAQ7pB,QAAO,SAAU8pB,GAAO,OAAO/oB,OAAOgpB,yBAAyBJ,EAAQG,GAAKE,UAAY,KAAKvc,EAAKpM,KAAKgf,MAAM5S,EAAMoc,EAAU,CAAE,OAAOpc,CAAM,CACpV,SAASwc,GAAcxb,GAAU,IAAK,IAAInM,EAAI,EAAGA,EAAIpC,UAAUC,OAAQmC,IAAK,CAAE,IAAIqJ,EAAS,MAAQzL,UAAUoC,GAAKpC,UAAUoC,GAAK,CAAE,EAAEA,EAAI,EAAIonB,GAAQ3oB,OAAO4K,IAAS,GAAIue,SAAQ,SAAUxvB,GAAOyvB,GAAgB1b,EAAQ/T,EAAKiR,EAAOjR,GAAO,IAAKqG,OAAOqpB,0BAA4BrpB,OAAOspB,iBAAiB5b,EAAQ1N,OAAOqpB,0BAA0Bze,IAAW+d,GAAQ3oB,OAAO4K,IAASue,SAAQ,SAAUxvB,GAAOqG,OAAOupB,eAAe7b,EAAQ/T,EAAKqG,OAAOgpB,yBAAyBpe,EAAQjR,GAAO,GAAI,CAAE,OAAO+T,CAAQ,CACzf,SAAS0b,GAAgBvqB,EAAKlF,EAAKoE,GAA4L,OAAnLpE,EAC5C,SAAwBiZ,GAAO,IAAIjZ,EACnC,SAAsBiK,EAAO4lB,GAAQ,GAAuB,WAAnBhrB,GAAQoF,IAAiC,OAAVA,EAAgB,OAAOA,EAAO,IAAI6lB,EAAO7lB,EAAMnI,OAAOiuB,aAAc,QAAajyB,IAATgyB,EAAoB,CAAE,IAAIE,EAAMF,EAAKtpB,KAAKyD,EAAO4lB,GAAQ,WAAY,GAAqB,WAAjBhrB,GAAQmrB,GAAmB,OAAOA,EAAK,MAAM,IAAI5K,UAAU,+CAAiD,CAAE,OAAiB,WAATyK,EAAoBI,OAASzkB,QAAQvB,EAAQ,CADnVimB,CAAajX,EAAK,UAAW,MAAwB,WAAjBpU,GAAQ7E,GAAoBA,EAAMiwB,OAAOjwB,EAAM,CAD1EmwB,CAAenwB,MAAiBkF,EAAOmB,OAAOupB,eAAe1qB,EAAKlF,EAAK,CAAEoE,MAAOA,EAAOkrB,YAAY,EAAMc,cAAc,EAAMC,UAAU,IAAkBnrB,EAAIlF,GAAOoE,EAAgBc,CAAK,CAG3O,SAASL,GAAQK,GAAkC,OAAOL,GAAU,mBAAqB/C,QAAU,iBAAmBA,OAAOurB,SAAW,SAAUnoB,GAAO,cAAcA,CAAM,EAAG,SAAUA,GAAO,OAAOA,GAAO,mBAAqBpD,QAAUoD,EAAIhD,cAAgBJ,QAAUoD,IAAQpD,OAAOwE,UAAY,gBAAkBpB,CAAK,EAAGL,GAAQK,EAAM,CCL/U,SAASc,GAA2B8nB,EAAG2K,GAAkB,IAAIne,EAAuB,oBAAXxY,QAA0BgsB,EAAEhsB,OAAOurB,WAAaS,EAAE,cAAe,IAAKxT,EAAI,CAAE,GAAI/Q,MAAMC,QAAQskB,KAAOxT,EAC9K,SAAqCwT,EAAGC,GAAU,IAAKD,EAAG,OAAQ,GAAiB,iBAANA,EAAgB,OAAOE,GAAkBF,EAAGC,GAAS,IAAI7nB,EAAIG,OAAOC,UAAUvB,SAASyB,KAAKsnB,GAAG7oB,MAAM,MAAkB,WAANiB,GAAkB4nB,EAAE5rB,cAAagE,EAAI4nB,EAAE5rB,YAAYC,MAAM,GAAU,QAAN+D,GAAqB,QAANA,EAAa,OAAOqD,MAAMgK,KAAKua,GAAI,GAAU,cAAN5nB,GAAqB,2CAA2C/F,KAAK+F,GAAI,OAAO8nB,GAAkBF,EAAGC,EAAS,CAD5OE,CAA4BH,KAAO2K,EAAqD,CAAMne,IAAIwT,EAAIxT,GAAI,IAAI1S,EAAI,EAAO8wB,EAAI,WAAe,EAAE,MAAO,CAAEzyB,EAAGyyB,EAAGxyB,EAAG,WAAe,OAAI0B,GAAKkmB,EAAEroB,OAAe,CAAEU,MAAM,GAAe,CAAEA,MAAM,EAAO/B,MAAO0pB,EAAElmB,KAAS,EAAElG,EAAG,SAAWyF,GAAM,MAAMA,CAAK,EAAEN,EAAG6xB,EAAK,CAAE,MAAM,IAAItT,UAAU,wIAA0I,CAAE,IAA6Cxe,EAAzC+xB,GAAmB,EAAMC,GAAS,EAAY,MAAO,CAAE3yB,EAAG,WAAeqU,EAAKA,EAAG9T,KAAKsnB,EAAK,EAAE5nB,EAAG,WAAe,IAAI2H,EAAOyM,EAAG1U,OAAsC,OAA9B+yB,EAAmB9qB,EAAK1H,KAAa0H,CAAO,EAAEnM,EAAG,SAAWm3B,GAAOD,GAAS,EAAMhyB,EAAMiyB,CAAM,EAAEhyB,EAAG,WAAe,IAAW8xB,GAAiC,MAAbre,EAAGsT,QAAgBtT,EAAGsT,QAAU,CAAU,QAAE,GAAIgL,EAAQ,MAAMhyB,CAAK,CAAE,EAAK,CAEr+B,SAASonB,GAAkBb,EAAKtR,IAAkB,MAAPA,GAAeA,EAAMsR,EAAI1nB,UAAQoW,EAAMsR,EAAI1nB,QAAQ,IAAK,IAAImC,EAAI,EAAGumB,EAAO,IAAI5kB,MAAMsS,GAAMjU,EAAIiU,EAAKjU,IAAKumB,EAAKvmB,GAAKulB,EAAIvlB,GAAI,OAAOumB,CAAM,CAM3K,IAAI2K,GAAyB,SAAgCC,EAASC,GAC3E,IAGElzB,EAHEmzB,GAAoB,EACpBC,EAAW,GACXnzB,EAAYC,GAA2B+yB,GAE3C,IACE,IAAKhzB,EAAUE,MAAOH,EAAQC,EAAUG,KAAKC,MAAO,CAClD,IAAIgzB,EAAuBC,EAAwBC,EAE/Cj1B,EAA0E,QAAjE+0B,EADArzB,EAAM1B,MACyBwyB,oCAAoE,IAA1BuC,GAAwI,QAA3FC,GAA0BC,EAAyBF,GAAuBG,mBAAoD,IAA3BF,OAA7G,EAA0JA,EAAuB5yB,KAAK6yB,GAC/S,GAAqB,iBAAVj1B,EACT80B,EAASvyB,KAAKvC,QACT,IAAc,IAAVA,EAAgB,CACzB60B,GAAoB,EACpB,KACF,CACF,CACD,CAAC,MAAOryB,GACPb,EAAUrE,EAAEkF,EACd,CAAU,QACRb,EAAUc,GACZ,CACA,OAAIoyB,EACKD,EAAgB7T,OACd+T,EAASzzB,OAAS,EACpBuzB,EAAgB7T,KAAKtd,KAAKmG,IAAI2X,MAAM9d,KAAMqxB,SAD5C,CAIT,ECgBO,SAASK,GAAcpoB,GAC5B,IAAI8a,EAlDN,SAAuC9a,GAIrC,IAUIqoB,EAV8BroB,EAAM4a,YAAYjhB,KAAI,SAAUihB,GAChE,OAAOA,EAAYG,MAAMzmB,MAC1B,IAAEsI,QAAO,SAAUglB,EAAK0G,EAAkBvoB,GACzC,IACIkE,GADgB2d,EAAI7hB,EAAQ,IAAM,GACNuoB,EAEhC,OADA1G,EAAIpsB,KAAKyO,GACF2d,CACR,GAAE,IAG+ChlB,QAAO,SAAUglB,EAAKrS,GACtE,OAAIA,GAAWvP,EAAMuoB,aACZ3G,EAAM,EAERA,CACR,GAAE,GACH,OAAO5hB,EAAM4a,YAAYyN,EAC3B,CA6BmBG,CAA8BxoB,GAC/C,IAAK8a,EACH,OAAO,KAET,IAAItiB,EAAOsiB,EAAWC,MAtBxB,SAAiCvuB,GAM/B,IALA,IAAIwT,EAAQxT,EAAKwT,MACf8a,EAAatuB,EAAKsuB,WAChB2N,GAAgB,EAChB7gB,EAAU,EACV8gB,EAAsB,GACD,IAAlBD,GAAyB,CAC9B,IAAIE,EAAoB3oB,EAAM4a,YAAYhT,GAC1C,GAAI+gB,IAAsB7N,EAAY,CACpC2N,GAAgB,EAChB,KACF,CACAC,GAAuBC,EAAkB5N,MAAMzmB,OAC/CsT,GACF,CACA,OAAO5H,EAAMuoB,aAAeG,CAC9B,CAM8BE,CAAwB,CAClD5oB,MAAOA,EACP8a,WAAYA,KAEVhb,EAASgb,EAAWhb,OASxB,MAAO,CACLtH,KAAMA,EACNqwB,eAVmB/oB,EAAOgpB,kBAAkB,CAC5CtwB,KAAMA,EACNwH,MAAOA,IASP+oB,QAPYjpB,EAAOkpB,WAAW,CAC9BxwB,KAAMA,EACNwH,MAAOA,IAMPF,OAAQA,EAEZ,CCrEO,SAASmpB,GAAyBC,EAAwBC,EAAWrpB,GAC1E,MAAO,CAACopB,EAAwBppB,aAAuCnT,EAASmT,EAAOspB,SAAUD,GAAWh1B,OAAOk1B,SAASC,KAAK,KAAKC,QAAQ,MAAO,GACvJ,CCTA,IAAIC,GAAQ,sDCAL,SAASC,GAAe9P,GAC7B,OAAOA,EAAM+P,aAAe/P,CAC9B,CCFA,SAASjmB,GAAQK,GAAkC,OAAOL,GAAU,mBAAqB/C,QAAU,iBAAmBA,OAAOurB,SAAW,SAAUnoB,GAAO,cAAcA,CAAM,EAAG,SAAUA,GAAO,OAAOA,GAAO,mBAAqBpD,QAAUoD,EAAIhD,cAAgBJ,QAAUoD,IAAQpD,OAAOwE,UAAY,gBAAkBpB,CAAK,EAAGL,GAAQK,EAAM,CAC/U,SAAS8pB,GAAQC,EAAQC,GAAkB,IAAInc,EAAO1M,OAAO0M,KAAKkc,GAAS,GAAI5oB,OAAOwoB,sBAAuB,CAAE,IAAIM,EAAU9oB,OAAOwoB,sBAAsBI,GAASC,IAAmBC,EAAUA,EAAQ7pB,QAAO,SAAU8pB,GAAO,OAAO/oB,OAAOgpB,yBAAyBJ,EAAQG,GAAKE,UAAY,KAAKvc,EAAKpM,KAAKgf,MAAM5S,EAAMoc,EAAU,CAAE,OAAOpc,CAAM,CAEpV,SAAS0c,GAAgBvqB,EAAKlF,EAAKoE,GAA4L,OAAnLpE,EAC5C,SAAwBiZ,GAAO,IAAIjZ,EACnC,SAAsBiK,EAAO4lB,GAAQ,GAAuB,WAAnBhrB,GAAQoF,IAAiC,OAAVA,EAAgB,OAAOA,EAAO,IAAI6lB,EAAO7lB,EAAMnI,OAAOiuB,aAAc,QAAajyB,IAATgyB,EAAoB,CAAE,IAAIE,EAAMF,EAAKtpB,KAAKyD,EAAO4lB,GAAQ,WAAY,GAAqB,WAAjBhrB,GAAQmrB,GAAmB,OAAOA,EAAK,MAAM,IAAI5K,UAAU,+CAAiD,CAAE,OAAiB,WAATyK,EAAoBI,OAASzkB,QAAQvB,EAAQ,CADnVimB,CAAajX,EAAK,UAAW,MAAwB,WAAjBpU,GAAQ7E,GAAoBA,EAAMiwB,OAAOjwB,EAAM,CAD1EmwB,CAAenwB,MAAiBkF,EAAOmB,OAAOupB,eAAe1qB,EAAKlF,EAAK,CAAEoE,MAAOA,EAAOkrB,YAAY,EAAMc,cAAc,EAAMC,UAAU,IAAkBnrB,EAAIlF,GAAOoE,EAAgBc,CAAK,CAIpO,SAAS41B,GAAYC,EAASz7B,EAAO07B,GAC1C,IAAI7pB,EAAQ7R,EAAM8jB,aAClB,MAAO,CACL6X,SAAU,WACR,OAAO9pB,CACR,EACD+pB,SAAU,SAAkBC,EAAQlI,GAClC,IAAImI,EAZV,SAAuBrnB,GAAU,IAAK,IAAInM,EAAI,EAAGA,EAAIpC,UAAUC,OAAQmC,IAAK,CAAE,IAAIqJ,EAAS,MAAQzL,UAAUoC,GAAKpC,UAAUoC,GAAK,CAAE,EAAEA,EAAI,EAAIonB,GAAQ3oB,OAAO4K,IAAS,GAAIue,SAAQ,SAAUxvB,GAAOyvB,GAAgB1b,EAAQ/T,EAAKiR,EAAOjR,GAAO,IAAKqG,OAAOqpB,0BAA4BrpB,OAAOspB,iBAAiB5b,EAAQ1N,OAAOqpB,0BAA0Bze,IAAW+d,GAAQ3oB,OAAO4K,IAASue,SAAQ,SAAUxvB,GAAOqG,OAAOupB,eAAe7b,EAAQ/T,EAAKqG,OAAOgpB,yBAAyBpe,EAAQjR,GAAO,GAAI,CAAE,OAAO+T,CAAQ,CAYnewb,CAAc,CAAE,EAAEpe,GAClCA,EAAQ4pB,EAAQ5pB,EAAO,CACrBvQ,KAAMu6B,EACN77B,MAAOA,EACP2zB,QAASA,IAEX+H,EAAmB,CACjB7pB,MAAOA,EACPiqB,UAAWA,GAEd,EACDpC,gBAAiBpB,KAErB,CC3BA,SAAS/yB,GAAQK,GAAkC,OAAOL,GAAU,mBAAqB/C,QAAU,iBAAmBA,OAAOurB,SAAW,SAAUnoB,GAAO,cAAcA,CAAM,EAAG,SAAUA,GAAO,OAAOA,GAAO,mBAAqBpD,QAAUoD,EAAIhD,cAAgBJ,QAAUoD,IAAQpD,OAAOwE,UAAY,gBAAkBpB,CAAK,EAAGL,GAAQK,EAAM,CAC/U,SAAS8pB,GAAQC,EAAQC,GAAkB,IAAInc,EAAO1M,OAAO0M,KAAKkc,GAAS,GAAI5oB,OAAOwoB,sBAAuB,CAAE,IAAIM,EAAU9oB,OAAOwoB,sBAAsBI,GAASC,IAAmBC,EAAUA,EAAQ7pB,QAAO,SAAU8pB,GAAO,OAAO/oB,OAAOgpB,yBAAyBJ,EAAQG,GAAKE,UAAY,KAAKvc,EAAKpM,KAAKgf,MAAM5S,EAAMoc,EAAU,CAAE,OAAOpc,CAAM,CACpV,SAASwc,GAAcxb,GAAU,IAAK,IAAInM,EAAI,EAAGA,EAAIpC,UAAUC,OAAQmC,IAAK,CAAE,IAAIqJ,EAAS,MAAQzL,UAAUoC,GAAKpC,UAAUoC,GAAK,CAAE,EAAEA,EAAI,EAAIonB,GAAQ3oB,OAAO4K,IAAS,GAAIue,SAAQ,SAAUxvB,GAAOyvB,GAAgB1b,EAAQ/T,EAAKiR,EAAOjR,GAAO,IAAKqG,OAAOqpB,0BAA4BrpB,OAAOspB,iBAAiB5b,EAAQ1N,OAAOqpB,0BAA0Bze,IAAW+d,GAAQ3oB,OAAO4K,IAASue,SAAQ,SAAUxvB,GAAOqG,OAAOupB,eAAe7b,EAAQ/T,EAAKqG,OAAOgpB,yBAAyBpe,EAAQjR,GAAO,GAAI,CAAE,OAAO+T,CAAQ,CACzf,SAAS0b,GAAgBvqB,EAAKlF,EAAKoE,GAA4L,OAAnLpE,EAC5C,SAAwBiZ,GAAO,IAAIjZ,EACnC,SAAsBiK,EAAO4lB,GAAQ,GAAuB,WAAnBhrB,GAAQoF,IAAiC,OAAVA,EAAgB,OAAOA,EAAO,IAAI6lB,EAAO7lB,EAAMnI,OAAOiuB,aAAc,QAAajyB,IAATgyB,EAAoB,CAAE,IAAIE,EAAMF,EAAKtpB,KAAKyD,EAAO4lB,GAAQ,WAAY,GAAqB,WAAjBhrB,GAAQmrB,GAAmB,OAAOA,EAAK,MAAM,IAAI5K,UAAU,+CAAiD,CAAE,OAAiB,WAATyK,EAAoBI,OAASzkB,QAAQvB,EAAQ,CADnVimB,CAAajX,EAAK,UAAW,MAAwB,WAAjBpU,GAAQ7E,GAAoBA,EAAMiwB,OAAOjwB,EAAM,CAD1EmwB,CAAenwB,MAAiBkF,EAAOmB,OAAOupB,eAAe1qB,EAAKlF,EAAK,CAAEoE,MAAOA,EAAOkrB,YAAY,EAAMc,cAAc,EAAMC,UAAU,IAAkBnrB,EAAIlF,GAAOoE,EAAgBc,CAAK,CCH3O,SAASL,GAAQK,GAAkC,OAAOL,GAAU,mBAAqB/C,QAAU,iBAAmBA,OAAOurB,SAAW,SAAUnoB,GAAO,cAAcA,CAAM,EAAG,SAAUA,GAAO,OAAOA,GAAO,mBAAqBpD,QAAUoD,EAAIhD,cAAgBJ,QAAUoD,IAAQpD,OAAOwE,UAAY,gBAAkBpB,CAAK,EAAGL,GAAQK,EAAM,CAC/U,SAASmpB,GAAmBlB,GAAO,OAInC,SAA4BA,GAAO,GAAI5jB,MAAMC,QAAQ2jB,GAAM,OAAOa,GAAkBb,EAAM,CAJhDmB,CAAmBnB,IAG7D,SAA0BoB,GAAQ,GAAsB,oBAAXzsB,QAAmD,MAAzBysB,EAAKzsB,OAAOurB,WAA2C,MAAtBkB,EAAK,cAAuB,OAAOhlB,MAAMgK,KAAKgb,EAAO,CAHxFC,CAAiBrB,IAEtF,SAAqCW,EAAGC,GAAU,IAAKD,EAAG,OAAQ,GAAiB,iBAANA,EAAgB,OAAOE,GAAkBF,EAAGC,GAAS,IAAI7nB,EAAIG,OAAOC,UAAUvB,SAASyB,KAAKsnB,GAAG7oB,MAAM,MAAkB,WAANiB,GAAkB4nB,EAAE5rB,cAAagE,EAAI4nB,EAAE5rB,YAAYC,MAAM,GAAU,QAAN+D,GAAqB,QAANA,EAAa,OAAOqD,MAAMgK,KAAKua,GAAI,GAAU,cAAN5nB,GAAqB,2CAA2C/F,KAAK+F,GAAI,OAAO8nB,GAAkBF,EAAGC,EAAS,CAFjUE,CAA4Bd,IAC1H,WAAgC,MAAM,IAAI/H,UAAU,uIAAyI,CAD3DqJ,EAAsB,CAKxJ,SAAST,GAAkBb,EAAKtR,IAAkB,MAAPA,GAAeA,EAAMsR,EAAI1nB,UAAQoW,EAAMsR,EAAI1nB,QAAQ,IAAK,IAAImC,EAAI,EAAGumB,EAAO,IAAI5kB,MAAMsS,GAAMjU,EAAIiU,EAAKjU,IAAKumB,EAAKvmB,GAAKulB,EAAIvlB,GAAI,OAAOumB,CAAM,CAClL,SAASa,GAAQC,EAAQC,GAAkB,IAAInc,EAAO1M,OAAO0M,KAAKkc,GAAS,GAAI5oB,OAAOwoB,sBAAuB,CAAE,IAAIM,EAAU9oB,OAAOwoB,sBAAsBI,GAASC,IAAmBC,EAAUA,EAAQ7pB,QAAO,SAAU8pB,GAAO,OAAO/oB,OAAOgpB,yBAAyBJ,EAAQG,GAAKE,UAAY,KAAKvc,EAAKpM,KAAKgf,MAAM5S,EAAMoc,EAAU,CAAE,OAAOpc,CAAM,CACpV,SAASwc,GAAcxb,GAAU,IAAK,IAAInM,EAAI,EAAGA,EAAIpC,UAAUC,OAAQmC,IAAK,CAAE,IAAIqJ,EAAS,MAAQzL,UAAUoC,GAAKpC,UAAUoC,GAAK,CAAE,EAAEA,EAAI,EAAIonB,GAAQ3oB,OAAO4K,IAAS,GAAIue,SAAQ,SAAUxvB,GAAOyvB,GAAgB1b,EAAQ/T,EAAKiR,EAAOjR,GAAO,IAAKqG,OAAOqpB,0BAA4BrpB,OAAOspB,iBAAiB5b,EAAQ1N,OAAOqpB,0BAA0Bze,IAAW+d,GAAQ3oB,OAAO4K,IAASue,SAAQ,SAAUxvB,GAAOqG,OAAOupB,eAAe7b,EAAQ/T,EAAKqG,OAAOgpB,yBAAyBpe,EAAQjR,GAAO,GAAI,CAAE,OAAO+T,CAAQ,CACzf,SAAS0b,GAAgBvqB,EAAKlF,EAAKoE,GAA4L,OAAnLpE,EAC5C,SAAwBiZ,GAAO,IAAIjZ,EACnC,SAAsBiK,EAAO4lB,GAAQ,GAAuB,WAAnBhrB,GAAQoF,IAAiC,OAAVA,EAAgB,OAAOA,EAAO,IAAI6lB,EAAO7lB,EAAMnI,OAAOiuB,aAAc,QAAajyB,IAATgyB,EAAoB,CAAE,IAAIE,EAAMF,EAAKtpB,KAAKyD,EAAO4lB,GAAQ,WAAY,GAAqB,WAAjBhrB,GAAQmrB,GAAmB,OAAOA,EAAK,MAAM,IAAI5K,UAAU,+CAAiD,CAAE,OAAiB,WAATyK,EAAoBI,OAASzkB,QAAQvB,EAAQ,CADnVimB,CAAajX,EAAK,UAAW,MAAwB,WAAjBpU,GAAQ7E,GAAoBA,EAAMiwB,OAAOjwB,EAAM,CAD1EmwB,CAAenwB,MAAiBkF,EAAOmB,OAAOupB,eAAe1qB,EAAKlF,EAAK,CAAEoE,MAAOA,EAAOkrB,YAAY,EAAMc,cAAc,EAAMC,UAAU,IAAkBnrB,EAAIlF,GAAOoE,EAAgBc,CAAK,CAKpO,SAASm2B,GAAgB/7B,EAAOg8B,GACrC,IAAIC,EAEAjG,EAAgC,oBAAXj0B,OAAyBA,OAAS,CAAE,EAEzD03B,EAAUz5B,EAAMy5B,SAAW,GAC/B,OAAOxJ,GAAcA,GAAc,CACjCiM,OAAO,EACPC,aAAa,EACbC,kBAAc59B,EACd69B,yBAAyB,EACzBC,YAAa,GACbC,WAAW,EACXtD,oBAAqB,KACrBuD,eAAgB,IAChB9H,cAAUl2B,EACVw3B,YAAaA,EACbyG,gBAAiB,SAAyBp+B,GAExC,OAAOmuB,GADKnuB,EAAKwT,OACa,CAC/B,EACD6qB,QAAS,SAAiBtL,GAExB,OADcA,EAAMuL,OAEtB,GACC38B,GAAQ,GAAI,CAGbqI,GAA+B,QAA1B4zB,EAAYj8B,EAAMqI,UAA8B7J,IAAdy9B,EAAuBA,EzBxCzD,gBAAgB76B,OAAOmrB,MyByC5BkN,QAASA,EAET3V,aAAcmM,GAAc,CAC1BmK,aAAc,KACdwC,MAAO,GACPC,WAAY,KACZpQ,YAAa,GACbiK,QAAQ,EACR7W,OAAQ,OACRoV,QAAS,CAAA,GACRj1B,EAAM8jB,cACTsT,cAAe,SAAuBnG,GACpC,IAAI6L,EAC6C,QAAhDA,EAAuB98B,EAAMo3B,qBAAoD54B,IAAzBs+B,GAA2CA,EAAqB51B,KAAKlH,EAAOixB,GACrIwI,EAAQvJ,SAAQ,SAAU5a,GACxB,IAAIynB,EACJ,OAAgD,QAAxCA,EAAmBznB,EAAE8hB,qBAAgD54B,IAArBu+B,OAA8Bv+B,EAASu+B,EAAiB71B,KAAKoO,EAAG2b,EAC1H,GACD,EACD+L,SAAU,SAAkB/L,GAC1B,IAAIgM,EACmC,QAAtCA,EAAkBj9B,EAAMg9B,gBAA0Cx+B,IAApBy+B,GAAsCA,EAAgB/1B,KAAKlH,EAAOixB,GACjHwI,EAAQvJ,SAAQ,SAAU5a,GACxB,IAAI4nB,EACJ,OAAsC,QAA9BA,EAAc5nB,EAAE0nB,gBAAsCx+B,IAAhB0+B,OAAyB1+B,EAAS0+B,EAAYh2B,KAAKoO,EAAG2b,EACtG,GACD,EACDkM,QAAS,SAAiBlM,GACxB,IAAImM,EACiC,QAApCA,EAAiBp9B,EAAMm9B,eAAwC3+B,IAAnB4+B,GAAqCA,EAAel2B,KAAKlH,EAAOixB,GAC7GwI,EAAQvJ,SAAQ,SAAU5a,GACxB,IAAI+nB,EACJ,OAAoC,QAA5BA,EAAa/nB,EAAE6nB,eAAoC3+B,IAAf6+B,OAAwB7+B,EAAS6+B,EAAWn2B,KAAKoO,EAAG2b,EAClG,GACD,EACDqM,WAAY,SAAoBrM,GAC9B,OAAOld,QAAQC,IAAI,GAAG5S,OAAO2tB,GAAmB0K,EAAQjuB,KAAI,SAAU+xB,GACpE,OAAOA,EAAOD,UAChB,KAAK,CAACt9B,EAAMs9B,aAAat3B,OAAOk1B,SAAS1vB,KAAI,SAAU8xB,GACrD,OR3ED,SAA8BA,EAAYrM,GAC/C,IAAIuM,EAAgB,GACpB,OAAOzpB,QAAQK,QAAQkpB,EAAWrM,IAAS/Z,MAAK,SAAUylB,GAIxD,OAAO5oB,QAAQC,IAAI2oB,EAIlB32B,QAAO,SAAUy3B,GAChB,OAAOvC,QAAQuC,EACjB,IAAGjyB,KAAI,SAAUmG,GAEf,GADiBA,EAAOspB,SACpBuC,EAAc90B,SAASiJ,EAAOspB,UAChC,MAAM,IAAIt4B,MAAM,iCAAiCvB,OAAOsC,KAAKC,UAAUgO,EAAOspB,UAAW,oBAE3FuC,EAAcn2B,KAAKsK,EAAOspB,UAC1B,IAAIyC,EAAgB,CAClB/C,kBAAmB,SAA2Bt8B,GAE5C,OADYA,EAAKwT,MACJ+qB,KACd,EACD/B,WAAY,WAEX,EACD3F,SAAU,SAAkB9D,IAE1BuM,EADgBvM,EAAMuM,YACZ,EACX,EACDvI,SAAU5e,GACVonB,UAAWpnB,IAEbzP,OAAO0M,KAAKiqB,GAAexN,SAAQ,SAAUxvB,GAC3Cg9B,EAAch9B,GAAKm9B,WAAY,CACjC,IACA,IAAIC,EAAmB7N,GAAcA,GAAc,CAAA,EAAIyN,GAAgB/rB,GACvE,OAAOoC,QAAQK,QAAQ0pB,EACzB,IACF,GACF,CQmCeC,CAAqBT,EAAYrM,EAC1C,KAAI/Z,MAAK,SAAU8mB,GACjB,OAAO3R,GAAQ2R,EACjB,IAAG9mB,MAAK,SAAUylB,GAChB,OAAOA,EAAQnxB,KAAI,SAAUmG,GAC3B,OAAOse,GAAcA,GAAc,CAAE,EAAEte,GAAS,CAAA,EAAI,CAClDujB,SAAU,SAAkBjE,GAC1Btf,EAAOujB,SAASjE,GAChB+K,EAAkB9L,SAAQ,SAAU5a,GAClC,IAAI2oB,EACJ,OAAsC,QAA9BA,EAAc3oB,EAAE4f,gBAAsC12B,IAAhBy/B,OAAyBz/B,EAASy/B,EAAY/2B,KAAKoO,EAAG2b,EACtG,GACD,EACDmE,SAAU,SAAkBnE,GAC1Btf,EAAOyjB,SAASnE,GAChB+K,EAAkB9L,SAAQ,SAAU5a,GAClC,IAAI4oB,EACJ,OAAsC,QAA9BA,EAAc5oB,EAAE8f,gBAAsC52B,IAAhB0/B,OAAyB1/B,EAAS0/B,EAAYh3B,KAAKoO,EAAG2b,EACtG,GACD,EACD2M,UAAW,SAAmB3M,GAC5Btf,EAAOisB,UAAU3M,GACjB+K,EAAkB9L,SAAQ,SAAU5a,GAClC,IAAI6oB,EACJ,OAAwC,QAAhCA,EAAe7oB,EAAEsoB,iBAAwCp/B,IAAjB2/B,OAA0B3/B,EAAS2/B,EAAaj3B,KAAKoO,EAAG2b,EAC1G,GACF,GAEJ,GACF,GACD,EACDrwB,UAAWqvB,GAAc,CACvBmO,SAAU,SAAkBr9B,GAC1B,IAAI65B,EAAU75B,EAAM65B,QACpB5E,EAAYqI,SAASC,OAAO1D,EAC7B,EACD2D,eAAgB,SAAwB78B,GACtC,IAAIk5B,EAAUl5B,EAAMk5B,QAChB4D,EAAkBxI,EAAYyI,KAAK7D,EAAS,SAAU,YAC1D4D,SAAkEA,EAAgBE,OACnF,EACDC,kBAAmB,SAA2B/K,GAC5C,IAAIgH,EAAUhH,EAAMgH,QACpB5E,EAAYyI,KAAK7D,EAAS,SAAU,WACtC,GACC56B,EAAMY,YAEb,CCjIA,SAAS2E,GAAQK,GAAkC,OAAOL,GAAU,mBAAqB/C,QAAU,iBAAmBA,OAAOurB,SAAW,SAAUnoB,GAAO,cAAcA,CAAM,EAAG,SAAUA,GAAO,OAAOA,GAAO,mBAAqBpD,QAAUoD,EAAIhD,cAAgBJ,QAAUoD,IAAQpD,OAAOwE,UAAY,gBAAkBpB,CAAK,EAAGL,GAAQK,EAAM,CAC/U,SAAS8pB,GAAQC,EAAQC,GAAkB,IAAInc,EAAO1M,OAAO0M,KAAKkc,GAAS,GAAI5oB,OAAOwoB,sBAAuB,CAAE,IAAIM,EAAU9oB,OAAOwoB,sBAAsBI,GAASC,IAAmBC,EAAUA,EAAQ7pB,QAAO,SAAU8pB,GAAO,OAAO/oB,OAAOgpB,yBAAyBJ,EAAQG,GAAKE,UAAY,KAAKvc,EAAKpM,KAAKgf,MAAM5S,EAAMoc,EAAU,CAAE,OAAOpc,CAAM,CACpV,SAASwc,GAAcxb,GAAU,IAAK,IAAInM,EAAI,EAAGA,EAAIpC,UAAUC,OAAQmC,IAAK,CAAE,IAAIqJ,EAAS,MAAQzL,UAAUoC,GAAKpC,UAAUoC,GAAK,CAAE,EAAEA,EAAI,EAAIonB,GAAQ3oB,OAAO4K,IAAS,GAAIue,SAAQ,SAAUxvB,GAAOyvB,GAAgB1b,EAAQ/T,EAAKiR,EAAOjR,GAAO,IAAKqG,OAAOqpB,0BAA4BrpB,OAAOspB,iBAAiB5b,EAAQ1N,OAAOqpB,0BAA0Bze,IAAW+d,GAAQ3oB,OAAO4K,IAASue,SAAQ,SAAUxvB,GAAOqG,OAAOupB,eAAe7b,EAAQ/T,EAAKqG,OAAOgpB,yBAAyBpe,EAAQjR,GAAO,GAAI,CAAE,OAAO+T,CAAQ,CACzf,SAAS0b,GAAgBvqB,EAAKlF,EAAKoE,GAA4L,OAAnLpE,EAC5C,SAAwBiZ,GAAO,IAAIjZ,EACnC,SAAsBiK,EAAO4lB,GAAQ,GAAuB,WAAnBhrB,GAAQoF,IAAiC,OAAVA,EAAgB,OAAOA,EAAO,IAAI6lB,EAAO7lB,EAAMnI,OAAOiuB,aAAc,QAAajyB,IAATgyB,EAAoB,CAAE,IAAIE,EAAMF,EAAKtpB,KAAKyD,EAAO4lB,GAAQ,WAAY,GAAqB,WAAjBhrB,GAAQmrB,GAAmB,OAAOA,EAAK,MAAM,IAAI5K,UAAU,+CAAiD,CAAE,OAAiB,WAATyK,EAAoBI,OAASzkB,QAAQvB,EAAQ,CADnVimB,CAAajX,EAAK,UAAW,MAAwB,WAAjBpU,GAAQ7E,GAAoBA,EAAMiwB,OAAOjwB,EAAM,CAD1EmwB,CAAenwB,MAAiBkF,EAAOmB,OAAOupB,eAAe1qB,EAAKlF,EAAK,CAAEoE,MAAOA,EAAOkrB,YAAY,EAAMc,cAAc,EAAMC,UAAU,IAAkBnrB,EAAIlF,GAAOoE,EAAgBc,CAAK,CCH3O,SAASL,GAAQK,GAAkC,OAAOL,GAAU,mBAAqB/C,QAAU,iBAAmBA,OAAOurB,SAAW,SAAUnoB,GAAO,cAAcA,CAAM,EAAG,SAAUA,GAAO,OAAOA,GAAO,mBAAqBpD,QAAUoD,EAAIhD,cAAgBJ,QAAUoD,IAAQpD,OAAOwE,UAAY,gBAAkBpB,CAAK,EAAGL,GAAQK,EAAM,CAC/U,SAAS8pB,GAAQC,EAAQC,GAAkB,IAAInc,EAAO1M,OAAO0M,KAAKkc,GAAS,GAAI5oB,OAAOwoB,sBAAuB,CAAE,IAAIM,EAAU9oB,OAAOwoB,sBAAsBI,GAASC,IAAmBC,EAAUA,EAAQ7pB,QAAO,SAAU8pB,GAAO,OAAO/oB,OAAOgpB,yBAAyBJ,EAAQG,GAAKE,UAAY,KAAKvc,EAAKpM,KAAKgf,MAAM5S,EAAMoc,EAAU,CAAE,OAAOpc,CAAM,CACpV,SAASwc,GAAcxb,GAAU,IAAK,IAAInM,EAAI,EAAGA,EAAIpC,UAAUC,OAAQmC,IAAK,CAAE,IAAIqJ,EAAS,MAAQzL,UAAUoC,GAAKpC,UAAUoC,GAAK,CAAE,EAAEA,EAAI,EAAIonB,GAAQ3oB,OAAO4K,IAAS,GAAIue,SAAQ,SAAUxvB,GAAOyvB,GAAgB1b,EAAQ/T,EAAKiR,EAAOjR,GAAO,IAAKqG,OAAOqpB,0BAA4BrpB,OAAOspB,iBAAiB5b,EAAQ1N,OAAOqpB,0BAA0Bze,IAAW+d,GAAQ3oB,OAAO4K,IAASue,SAAQ,SAAUxvB,GAAOqG,OAAOupB,eAAe7b,EAAQ/T,EAAKqG,OAAOgpB,yBAAyBpe,EAAQjR,GAAO,GAAI,CAAE,OAAO+T,CAAQ,CACzf,SAAS0b,GAAgBvqB,EAAKlF,EAAKoE,GAA4L,OAAnLpE,EAC5C,SAAwBiZ,GAAO,IAAIjZ,EACnC,SAAsBiK,EAAO4lB,GAAQ,GAAuB,WAAnBhrB,GAAQoF,IAAiC,OAAVA,EAAgB,OAAOA,EAAO,IAAI6lB,EAAO7lB,EAAMnI,OAAOiuB,aAAc,QAAajyB,IAATgyB,EAAoB,CAAE,IAAIE,EAAMF,EAAKtpB,KAAKyD,EAAO4lB,GAAQ,WAAY,GAAqB,WAAjBhrB,GAAQmrB,GAAmB,OAAOA,EAAK,MAAM,IAAI5K,UAAU,+CAAiD,CAAE,OAAiB,WAATyK,EAAoBI,OAASzkB,QAAQvB,EAAQ,CADnVimB,CAAajX,EAAK,UAAW,MAAwB,WAAjBpU,GAAQ7E,GAAoBA,EAAMiwB,OAAOjwB,EAAM,CAD1EmwB,CAAenwB,MAAiBkF,EAAOmB,OAAOupB,eAAe1qB,EAAKlF,EAAK,CAAEoE,MAAOA,EAAOkrB,YAAY,EAAMc,cAAc,EAAMC,UAAU,IAAkBnrB,EAAIlF,GAAOoE,EAAgBc,CAAK,CAG3O,SAASmpB,GAAmBlB,GAAO,OAInC,SAA4BA,GAAO,GAAI5jB,MAAMC,QAAQ2jB,GAAM,OAAOa,GAAkBb,EAAM,CAJhDmB,CAAmBnB,IAG7D,SAA0BoB,GAAQ,GAAsB,oBAAXzsB,QAAmD,MAAzBysB,EAAKzsB,OAAOurB,WAA2C,MAAtBkB,EAAK,cAAuB,OAAOhlB,MAAMgK,KAAKgb,EAAO,CAHxFC,CAAiBrB,IAEtF,SAAqCW,EAAGC,GAAU,IAAKD,EAAG,OAAQ,GAAiB,iBAANA,EAAgB,OAAOE,GAAkBF,EAAGC,GAAS,IAAI7nB,EAAIG,OAAOC,UAAUvB,SAASyB,KAAKsnB,GAAG7oB,MAAM,MAAkB,WAANiB,GAAkB4nB,EAAE5rB,cAAagE,EAAI4nB,EAAE5rB,YAAYC,MAAM,GAAU,QAAN+D,GAAqB,QAANA,EAAa,OAAOqD,MAAMgK,KAAKua,GAAI,GAAU,cAAN5nB,GAAqB,2CAA2C/F,KAAK+F,GAAI,OAAO8nB,GAAkBF,EAAGC,EAAS,CAFjUE,CAA4Bd,IAC1H,WAAgC,MAAM,IAAI/H,UAAU,uIAAyI,CAD3DqJ,EAAsB,CAKxJ,SAAST,GAAkBb,EAAKtR,IAAkB,MAAPA,GAAeA,EAAMsR,EAAI1nB,UAAQoW,EAAMsR,EAAI1nB,QAAQ,IAAK,IAAImC,EAAI,EAAGumB,EAAO,IAAI5kB,MAAMsS,GAAMjU,EAAIiU,EAAKjU,IAAKumB,EAAKvmB,GAAKulB,EAAIvlB,GAAI,OAAOumB,CAAM,CAGlL,SAAS+P,GAAcv0B,GACrB,OAAO6wB,QAAQ7wB,EAAKya,QACtB,CAIO,SAAS+Z,GAAWC,EAAoB7D,EAAUppB,GACvD,GAJ8BktB,EAIHD,EAHpB5D,QAAQ6D,aAAiDvgC,EAASugC,EAAYja,SAGrC,CAC9C,IAAIka,EAAuD,YAAnCF,EAAmBG,YAA4Bl4B,OAAOu3B,OAAOjY,MAAMtf,OAAQ,CAAC,CAAA,GAAI3F,OAAO2tB,GAAmBhoB,OAAO0M,KAAK5B,EAAMojB,SAASzpB,KAAI,SAAU9K,GACzK,IAAIw+B,EACJ,OAAqD,QAA7CA,EAAqBrtB,EAAMojB,QAAQv0B,UAAyClC,IAAvB0gC,OAAgC1gC,EAAS0gC,EAAmBpI,yBAC3H,OAAQ,CAAE,EACV,OAAO7G,GAAcA,GAAc,CAAE,EAAE6O,GAAqB,CAAA,EAAI,CAC9DK,SAAUL,EAAmBM,QAAQ5zB,KAAI,SAAUoxB,GACjD,MAAO,CACLA,MAA0C,YAAnCkC,EAAmBG,YAA4BhP,GAAcA,GAAc,CAAE,EAAE2M,GAAQ,GAAI,CAChG3L,OAAQhB,GAAcA,GAAc,CAAE,EAAE+O,GAAoBpC,EAAM3L,UAC/D2L,EACL3B,SAAUA,EACVoE,kBAAmBP,EAAmBO,kBAEzC,KAEL,CApBF,IAAgCN,EAqB9B,MAAO,CACLnS,MAAOkS,EACP7D,SAAUA,EAEd,CACO,SAAS7mB,GAAQwY,GACtB,IA0BIN,EA1BSM,EAAMne,QAAO,SAAUglB,EAAKrS,GACvC,IAAKwd,GAAcxd,GAEjB,OADAqS,EAAIpsB,KAAK+Z,GACFqS,EAET,IAAI6L,EAAele,EAAQke,aACzBxa,EAAU1D,EAAQ0D,QAClBma,EAAc7d,EAAQ6d,YACtBE,EAAW/d,EAAQ+d,SACjBI,EAAY9L,EAAIpkB,MAAK,SAAUhF,GACjC,OAAOu0B,GAAcxd,IAAYwd,GAAcv0B,IAASA,EAAKi1B,eAAiBA,GAAgBpE,QAAQ+D,IAAgB50B,EAAK40B,cAAgBA,CAC7I,IACA,GAAIM,EAAW,CACb,IAAIC,GACHA,EAAmBD,EAAU3S,OAAOvlB,KAAKgf,MAAMmZ,EAAkBzQ,GAAmBoQ,GACvF,KAAO,CACL,IAAIpV,EAAU,CACZjF,QAASA,EACTma,YAAaA,EACbrS,MAAOuS,EACPG,aAAcA,GAEhB7L,EAAIpsB,KAAK0iB,EACX,CACA,OAAO0J,CACR,GAAE,IACiBjoB,KAAI,SAAUi0B,GAChC,IAAKb,GAAca,GACjB,OAAO1rB,QAAQK,QAAQqrB,GAEzB,IAAIphC,EAAOohC,EACT3a,EAAUzmB,EAAKymB,QACf8H,EAAQvuB,EAAKuuB,MAEf,OAAO9H,EAAQ,CACbwa,aAFejhC,EAAKihC,aAGpBH,SAAUvS,GAEd,IACA,OAAO7Y,QAAQC,IAAIsY,GAAQpV,MAAK,SAAUwoB,GACxC,OAAOrT,GAAQqT,EACjB,GACF,CACO,SAASC,GAAYD,EAAW/C,EAASiD,GAC9C,OAAOjD,EAAQnxB,KAAI,SAAUmG,GAC3B,ICzFiCkuB,EDyF7BC,EAAUJ,EAAU15B,QAAO,SAAUkkB,GACvC,OAAOA,EAAS+Q,WAAatpB,EAAOspB,QACtC,IACI8E,EAAUD,EAAQt0B,KAAI,SAAU4lB,GAElC,OADYA,EAAMxE,KAEpB,IACIoT,EAAYF,EAAQ,GAAGT,kBACvBzS,EAAQoT,EAAYA,EChGnB,CACLD,QAFiCF,EDiGsBE,EC9FvDE,KAAMJ,EAAWr0B,KAAI,SAAUvC,GAC7B,OAAOA,EAAOg3B,IAChB,IAAGj6B,OAAOk1B,SACVgF,UAAWL,EAAWr0B,KAAI,SAAUvC,GAClC,IAAIk3B,EACJ,OAA2C,QAAnCA,EAAal3B,EAAOi3B,iBAAsC1hC,IAAf2hC,OAAwB3hC,EAAS2hC,EAAW30B,KAAI,SAAU40B,GAE3G,MAAO,CACLC,MAAOD,EAASt7B,MAChBw7B,MAAOF,EAASE,MAChBC,iBAAkB,CAChBF,MAAO,CACLv7B,MAAOs7B,EAASI,cAIxB,GACF,IAAGx6B,OAAOk1B,WD6EyD6E,EAWnE,OAVApuB,EAAOisB,UAAU,CACfjsB,OAAQA,EACRouB,QAASA,EACTnT,MAAOA,EACP/a,MAAO+tB,EAAMjE,aAKL/O,EAAMxiB,MAAM8wB,SAAU,wCAAyC95B,OAAOuQ,EAAOspB,SAAU,iDAAkD75B,OAAOsC,KAAKC,eAAUnF,GAAY,4IAC9K,CACLmT,OAAQA,EACRib,MAAOA,EAEX,GACF,CEjHA,SAASrnB,GAAQK,GAAkC,OAAOL,GAAU,mBAAqB/C,QAAU,iBAAmBA,OAAOurB,SAAW,SAAUnoB,GAAO,cAAcA,CAAM,EAAG,SAAUA,GAAO,OAAOA,GAAO,mBAAqBpD,QAAUoD,EAAIhD,cAAgBJ,QAAUoD,IAAQpD,OAAOwE,UAAY,gBAAkBpB,CAAK,EAAGL,GAAQK,EAAM,CAC/U,IAAI1F,GAAY,CAAC,QAAS,YAAa,QAAS,QAAS,UAAW,SACpE,SAASwvB,GAAQC,EAAQC,GAAkB,IAAInc,EAAO1M,OAAO0M,KAAKkc,GAAS,GAAI5oB,OAAOwoB,sBAAuB,CAAE,IAAIM,EAAU9oB,OAAOwoB,sBAAsBI,GAASC,IAAmBC,EAAUA,EAAQ7pB,QAAO,SAAU8pB,GAAO,OAAO/oB,OAAOgpB,yBAAyBJ,EAAQG,GAAKE,UAAY,KAAKvc,EAAKpM,KAAKgf,MAAM5S,EAAMoc,EAAU,CAAE,OAAOpc,CAAM,CACpV,SAASwc,GAAcxb,GAAU,IAAK,IAAInM,EAAI,EAAGA,EAAIpC,UAAUC,OAAQmC,IAAK,CAAE,IAAIqJ,EAAS,MAAQzL,UAAUoC,GAAKpC,UAAUoC,GAAK,CAAE,EAAEA,EAAI,EAAIonB,GAAQ3oB,OAAO4K,IAAS,GAAIue,SAAQ,SAAUxvB,GAAOyvB,GAAgB1b,EAAQ/T,EAAKiR,EAAOjR,GAAO,IAAKqG,OAAOqpB,0BAA4BrpB,OAAOspB,iBAAiB5b,EAAQ1N,OAAOqpB,0BAA0Bze,IAAW+d,GAAQ3oB,OAAO4K,IAASue,SAAQ,SAAUxvB,GAAOqG,OAAOupB,eAAe7b,EAAQ/T,EAAKqG,OAAOgpB,yBAAyBpe,EAAQjR,GAAO,GAAI,CAAE,OAAO+T,CAAQ,CACzf,SAAS0b,GAAgBvqB,EAAKlF,EAAKoE,GAA4L,OAAnLpE,EAC5C,SAAwBiZ,GAAO,IAAIjZ,EACnC,SAAsBiK,EAAO4lB,GAAQ,GAAuB,WAAnBhrB,GAAQoF,IAAiC,OAAVA,EAAgB,OAAOA,EAAO,IAAI6lB,EAAO7lB,EAAMnI,OAAOiuB,aAAc,QAAajyB,IAATgyB,EAAoB,CAAE,IAAIE,EAAMF,EAAKtpB,KAAKyD,EAAO4lB,GAAQ,WAAY,GAAqB,WAAjBhrB,GAAQmrB,GAAmB,OAAOA,EAAK,MAAM,IAAI5K,UAAU,+CAAiD,CAAE,OAAiB,WAATyK,EAAoBI,OAASzkB,QAAQvB,EAAQ,CADnVimB,CAAajX,EAAK,UAAW,MAAwB,WAAjBpU,GAAQ7E,GAAoBA,EAAMiwB,OAAOjwB,EAAM,CAD1EmwB,CAAenwB,MAAiBkF,EAAOmB,OAAOupB,eAAe1qB,EAAKlF,EAAK,CAAEoE,MAAOA,EAAOkrB,YAAY,EAAMc,cAAc,EAAMC,UAAU,IAAkBnrB,EAAIlF,GAAOoE,EAAgBc,CAAK,CAG3O,SAAS3F,GAAyB0R,EAAQyd,GAAY,GAAc,MAAVzd,EAAgB,MAAO,CAAE,EAAE,IAAkEjR,EAAK4H,EAAnEmM,EACzF,SAAuC9C,EAAQyd,GAAY,GAAc,MAAVzd,EAAgB,MAAO,CAAE,EAAE,IAA2DjR,EAAK4H,EAA5DmM,EAAS,CAAE,EAAM4a,EAAatoB,OAAO0M,KAAK9B,GAAqB,IAAKrJ,EAAI,EAAGA,EAAI+mB,EAAWlpB,OAAQmC,IAAO5H,EAAM2uB,EAAW/mB,GAAQ8mB,EAAStiB,QAAQpM,IAAQ,IAAa+T,EAAO/T,GAAOiR,EAAOjR,IAAQ,OAAO+T,CAAQ,CADhN6a,CAA8B3d,EAAQyd,GAAuB,GAAIroB,OAAOwoB,sBAAuB,CAAE,IAAIC,EAAmBzoB,OAAOwoB,sBAAsB5d,GAAS,IAAKrJ,EAAI,EAAGA,EAAIknB,EAAiBrpB,OAAQmC,IAAO5H,EAAM8uB,EAAiBlnB,GAAQ8mB,EAAStiB,QAAQpM,IAAQ,GAAkBqG,OAAOC,UAAUyoB,qBAAqBvoB,KAAKyK,EAAQjR,KAAgB+T,EAAO/T,GAAOiR,EAAOjR,GAAQ,CAAE,OAAO+T,CAAQ,CAK3e,ICLMgsB,GACAC,GACAC,GDGFC,GAAgB,KAChBC,ICNEJ,IAAkB,EAClBC,IAAqB,EACrBC,QAAsBniC,EACnB,SAAkCwmB,GAEvC,IAAI8b,IADJL,GAEA,OAAO1sB,QAAQK,QAAQ4Q,GAAS9N,MAAK,SAAU5B,GAc7C,OAAIqrB,IAAuBG,EAAmBJ,GACrCC,IAETD,GAAmBI,EACnBH,GAAsBrrB,EACfA,EACT,GACD,GDpBI,SAASyrB,GAAQ1iC,GACtB,IAAImtB,EAAQntB,EAAKmtB,MACfwV,EAAiB3iC,EAAK4iC,UACtBA,OAA+BziC,IAAnBwiC,EAA4B,CAAA,EAAKA,EAC7ChhC,EAAQ3B,EAAK2B,MACb48B,EAAQv+B,EAAKu+B,MACbsE,EAAU7iC,EAAK6iC,QACftB,EAAQvhC,EAAKuhC,MACbuB,EAAUlhC,GAAyB5B,EAAM6B,IACvC0gC,IACF5gC,EAAMg2B,YAAYjR,aAAa6b,IAEjC,IAAIQ,EAAiBD,EAAQC,eAC3BzD,EAAYwD,EAAQxD,UACpB0D,EAAWF,EAAQE,SACnBC,EAAkBH,EAAQG,gBAC1BC,EAAYJ,EAAQI,UACpB5K,EAAawK,EAAQxK,WAGvB,GAFA0K,EAASzE,GACT0E,EAAgBthC,EAAMi5B,sBACjB2D,IAA+B,IAAtB58B,EAAMm8B,YAAuB,CACzC,IAAIqF,EACA/U,EAAcmT,EAAMjE,WAAWlP,YAAYjhB,KAAI,SAAUmhB,GAC3D,OAAOsD,GAAcA,GAAc,CAAE,EAAEtD,GAAa,CAAA,EAAI,CACtDC,MAAO,IAEX,IACA2U,EAAU,QACVH,EAAe3U,GACfkR,EAAqD,QAA1C6D,EAAoBP,EAAUvK,cAA0Cl4B,IAAtBgjC,EAA+BA,EAAoBxhC,EAAMy8B,gBAAgB,CACpI5qB,MAAO+tB,EAAMjE,cAOf,IAAI8F,EAAWvJ,GAAW2I,GAAyBpU,GAAavV,MAAK,WACnE,OAAOnD,QAAQK,SACjB,KACA,OAAOwrB,EAAMlG,gBAAgBlB,IAAIiJ,EACnC,CACAF,EAAU,WACVX,GAAgB5gC,EAAMg2B,YAAYhd,YAAW,WAC3CuoB,EAAU,UACZ,GAAGvhC,EAAMw8B,gBAQT,IAAIzS,EAAUmO,GAAW2I,GAAyB7gC,EAAMs9B,WAAWrN,GAAc,CAC/E2M,MAAOA,EACPsE,QAASA,EACTrvB,MAAO+tB,EAAMjE,YACZwF,IAAUjqB,MAAK,SAAUylB,GAC1B,OAAO5oB,QAAQC,IAAI2oB,EAAQnxB,KAAI,SAAUmG,GACvC,OAAOoC,QAAQK,QAAQzC,EAAOulB,SAASjH,GAAc,CACnD2M,MAAOA,EACPsE,QAASA,EACTrvB,MAAO+tB,EAAMjE,YACZwF,KAAWjqB,MAAK,SAAU4nB,GAC3B,OAAOD,GAAWC,EAAoBntB,EAAOspB,SAAU2E,EAAMjE,WAC/D,GACF,KAAIzkB,KAAK9C,IAAS8C,MAAK,SAAUwoB,GAC/B,IAOMgC,EAPFlK,EAAsBkI,EAAUiC,MAAK,SAAUvQ,GAEjD,OAyDR,SAAmDxE,GACjD,OAAQ3iB,MAAMC,QAAQ0iB,IAAUsO,QAAQtO,aAAqCpuB,EAASouB,EAAMgV,mBAC9F,CA3DeC,CADKzQ,EAAMxE,MAEpB,IAGI4K,GAEFb,EAAW,CACTE,sBAAuB5G,GAAcA,GAAc,CAAA,GAA4D,QAAtDyR,EAAwB9B,EAAMjE,WAAW1G,eAA+Cz2B,IAA1BkjC,OAAmCljC,EAASkjC,EAAsB7K,wBAA0B,CAAA,GAAK,GAAI,CAC1NW,oBAAqBA,MAI3B,OAAOmI,GAAYD,EAAW/C,EAASiD,EACzC,IAAG1oB,MAAK,SAAUuV,GAChB,OH1FC,SAAiBpuB,GACtB,IAAIouB,EAAcpuB,EAAKouB,YACrBzsB,EAAQ3B,EAAK2B,MACb6R,EAAQxT,EAAKwT,MAGXiwB,EAA4BrV,EAAYhe,QAAO,SAAUglB,EAAK9G,GAChE,OAAOsD,GAAcA,GAAc,CAAE,EAAEwD,GAAM,CAAE,EAAEtD,GAAgB,GAAIxD,EAAWhb,OAAOspB,SAAUhL,GAAcA,GAAc,CAAE,EAAEtD,EAAWhb,QAAS,GAAI,CACvJulB,SAAU,WAER,OAAO7K,GAAQM,EAAWC,MAC5B,KAEH,GAAE,IAUDmV,EAT0B/hC,EAAMy5B,QAAQhrB,QAAO,SAAUglB,EAAK8J,GAC5D,OAAIA,EAAOb,QACFa,EAAOb,QAAQjJ,GAEjBA,CACT,GAAG,CACDsO,kBAAmBD,EACnBjwB,MAAOA,IAEiCkwB,kBAQ5C,OAAO1V,GAPcrsB,EAAM08B,QAAQ,CACjCqF,kBAAmBA,EACnBpF,QAAS51B,OAAOulB,OAAOyV,GACvBlwB,MAAOA,KAIsB7L,OAAOk1B,SAAS1vB,KAAI,SAAUmG,GAC3D,MAAO,CACLA,OAAQA,EACRib,MAAOjb,EAAOulB,WAElB,GACF,CGqDawF,CAAQ,CACbjQ,YAAaA,EACbzsB,MAAOA,EACP6R,MAAO+tB,EAAMjE,YAEjB,GACD,MAAIzkB,MAAK,SAAUuV,GAClB,IAAIuV,EAMJT,EAAU,QACVH,EAAe3U,GACf,IAAIwV,EAAcjiC,EAAMy8B,gBAAgB,CACtC5qB,MAAO+tB,EAAMjE,aAEfgC,EAAsD,QAA3CqE,EAAqBf,EAAUvK,cAA2Cl4B,IAAvBwjC,EAAgCA,EAAqBhiC,EAAMm8B,cAAgBS,GAASqF,GAAeA,GACjK,IAAIC,EAAkBjI,GAAc2F,EAAMjE,YAC1C,GAAsC,OAAlCiE,EAAMjE,WAAWvB,cAAyB8H,EAAiB,CAC7D,IAAI73B,EAAO63B,EAAgB73B,KACzBqwB,EAAiBwH,EAAgBxH,eACjCE,EAAUsH,EAAgBtH,QAC1BjpB,EAASuwB,EAAgBvwB,OAC3BA,EAAOyjB,SAASnF,GAAc,CAC5BzE,MAAOA,EACPnhB,KAAMA,EACNqwB,eAAgBA,EAChBE,QAASA,EACTsG,QAASA,EACTvvB,OAAQA,EACRE,MAAO+tB,EAAMjE,YACZwF,GACL,CACF,IAAGtJ,SAAQ,WACT0J,EAAU,QACNX,IACF5gC,EAAMg2B,YAAYjR,aAAa6b,GAEnC,IACA,OAAOhB,EAAMlG,gBAAgBlB,IAAIzO,EACnC,CE3IA,SAASxkB,GAAQK,GAAkC,OAAOL,GAAU,mBAAqB/C,QAAU,iBAAmBA,OAAOurB,SAAW,SAAUnoB,GAAO,cAAcA,CAAM,EAAG,SAAUA,GAAO,OAAOA,GAAO,mBAAqBpD,QAAUoD,EAAIhD,cAAgBJ,QAAUoD,IAAQpD,OAAOwE,UAAY,gBAAkBpB,CAAK,EAAGL,GAAQK,EAAM,CAC/U,IAAI1F,GAAY,CAAC,QAAS,QAAS,UAAW,SAC9C,SAASwvB,GAAQC,EAAQC,GAAkB,IAAInc,EAAO1M,OAAO0M,KAAKkc,GAAS,GAAI5oB,OAAOwoB,sBAAuB,CAAE,IAAIM,EAAU9oB,OAAOwoB,sBAAsBI,GAASC,IAAmBC,EAAUA,EAAQ7pB,QAAO,SAAU8pB,GAAO,OAAO/oB,OAAOgpB,yBAAyBJ,EAAQG,GAAKE,UAAY,KAAKvc,EAAKpM,KAAKgf,MAAM5S,EAAMoc,EAAU,CAAE,OAAOpc,CAAM,CACpV,SAASwc,GAAcxb,GAAU,IAAK,IAAInM,EAAI,EAAGA,EAAIpC,UAAUC,OAAQmC,IAAK,CAAE,IAAIqJ,EAAS,MAAQzL,UAAUoC,GAAKpC,UAAUoC,GAAK,CAAE,EAAEA,EAAI,EAAIonB,GAAQ3oB,OAAO4K,IAAS,GAAIue,SAAQ,SAAUxvB,GAAOyvB,GAAgB1b,EAAQ/T,EAAKiR,EAAOjR,GAAO,IAAKqG,OAAOqpB,0BAA4BrpB,OAAOspB,iBAAiB5b,EAAQ1N,OAAOqpB,0BAA0Bze,IAAW+d,GAAQ3oB,OAAO4K,IAASue,SAAQ,SAAUxvB,GAAOqG,OAAOupB,eAAe7b,EAAQ/T,EAAKqG,OAAOgpB,yBAAyBpe,EAAQjR,GAAO,GAAI,CAAE,OAAO+T,CAAQ,CACzf,SAAS0b,GAAgBvqB,EAAKlF,EAAKoE,GAA4L,OAAnLpE,EAC5C,SAAwBiZ,GAAO,IAAIjZ,EACnC,SAAsBiK,EAAO4lB,GAAQ,GAAuB,WAAnBhrB,GAAQoF,IAAiC,OAAVA,EAAgB,OAAOA,EAAO,IAAI6lB,EAAO7lB,EAAMnI,OAAOiuB,aAAc,QAAajyB,IAATgyB,EAAoB,CAAE,IAAIE,EAAMF,EAAKtpB,KAAKyD,EAAO4lB,GAAQ,WAAY,GAAqB,WAAjBhrB,GAAQmrB,GAAmB,OAAOA,EAAK,MAAM,IAAI5K,UAAU,+CAAiD,CAAE,OAAiB,WAATyK,EAAoBI,OAASzkB,QAAQvB,EAAQ,CADnVimB,CAAajX,EAAK,UAAW,MAAwB,WAAjBpU,GAAQ7E,GAAoBA,EAAMiwB,OAAOjwB,EAAM,CAD1EmwB,CAAenwB,MAAiBkF,EAAOmB,OAAOupB,eAAe1qB,EAAKlF,EAAK,CAAEoE,MAAOA,EAAOkrB,YAAY,EAAMc,cAAc,EAAMC,UAAU,IAAkBnrB,EAAIlF,GAAOoE,EAAgBc,CAAK,CAG3O,SAAS3F,GAAyB0R,EAAQyd,GAAY,GAAc,MAAVzd,EAAgB,MAAO,CAAE,EAAE,IAAkEjR,EAAK4H,EAAnEmM,EACzF,SAAuC9C,EAAQyd,GAAY,GAAc,MAAVzd,EAAgB,MAAO,CAAE,EAAE,IAA2DjR,EAAK4H,EAA5DmM,EAAS,CAAE,EAAM4a,EAAatoB,OAAO0M,KAAK9B,GAAqB,IAAKrJ,EAAI,EAAGA,EAAI+mB,EAAWlpB,OAAQmC,IAAO5H,EAAM2uB,EAAW/mB,GAAQ8mB,EAAStiB,QAAQpM,IAAQ,IAAa+T,EAAO/T,GAAOiR,EAAOjR,IAAQ,OAAO+T,CAAQ,CADhN6a,CAA8B3d,EAAQyd,GAAuB,GAAIroB,OAAOwoB,sBAAuB,CAAE,IAAIC,EAAmBzoB,OAAOwoB,sBAAsB5d,GAAS,IAAKrJ,EAAI,EAAGA,EAAIknB,EAAiBrpB,OAAQmC,IAAO5H,EAAM8uB,EAAiBlnB,GAAQ8mB,EAAStiB,QAAQpM,IAAQ,GAAkBqG,OAAOC,UAAUyoB,qBAAqBvoB,KAAKyK,EAAQjR,KAAgB+T,EAAO/T,GAAOiR,EAAOjR,GAAQ,CAAE,OAAO+T,CAAQ,CCP3e,SAASlP,GAAQK,GAAkC,OAAOL,GAAU,mBAAqB/C,QAAU,iBAAmBA,OAAOurB,SAAW,SAAUnoB,GAAO,cAAcA,CAAM,EAAG,SAAUA,GAAO,OAAOA,GAAO,mBAAqBpD,QAAUoD,EAAIhD,cAAgBJ,QAAUoD,IAAQpD,OAAOwE,UAAY,gBAAkBpB,CAAK,EAAGL,GAAQK,EAAM,CAC/U,IAAI1F,GAAY,CAAC,QAAS,UAAW,SACnC4uB,GAAa,CAAC,eAAgB,cAAe,gBAC7CqT,GAAa,CAAC,gBACdC,GAAa,CAAC,eAAgB,aAC9BC,GAAa,CAAC,UACdC,GAAa,CAAC,OAAQ,UACxB,SAAS5S,GAAQC,EAAQC,GAAkB,IAAInc,EAAO1M,OAAO0M,KAAKkc,GAAS,GAAI5oB,OAAOwoB,sBAAuB,CAAE,IAAIM,EAAU9oB,OAAOwoB,sBAAsBI,GAASC,IAAmBC,EAAUA,EAAQ7pB,QAAO,SAAU8pB,GAAO,OAAO/oB,OAAOgpB,yBAAyBJ,EAAQG,GAAKE,UAAY,KAAKvc,EAAKpM,KAAKgf,MAAM5S,EAAMoc,EAAU,CAAE,OAAOpc,CAAM,CACpV,SAASwc,GAAcxb,GAAU,IAAK,IAAInM,EAAI,EAAGA,EAAIpC,UAAUC,OAAQmC,IAAK,CAAE,IAAIqJ,EAAS,MAAQzL,UAAUoC,GAAKpC,UAAUoC,GAAK,CAAE,EAAEA,EAAI,EAAIonB,GAAQ3oB,OAAO4K,IAAS,GAAIue,SAAQ,SAAUxvB,GAAOyvB,GAAgB1b,EAAQ/T,EAAKiR,EAAOjR,GAAO,IAAKqG,OAAOqpB,0BAA4BrpB,OAAOspB,iBAAiB5b,EAAQ1N,OAAOqpB,0BAA0Bze,IAAW+d,GAAQ3oB,OAAO4K,IAASue,SAAQ,SAAUxvB,GAAOqG,OAAOupB,eAAe7b,EAAQ/T,EAAKqG,OAAOgpB,yBAAyBpe,EAAQjR,GAAO,GAAI,CAAE,OAAO+T,CAAQ,CACzf,SAAS0b,GAAgBvqB,EAAKlF,EAAKoE,GAA4L,OAAnLpE,EAC5C,SAAwBiZ,GAAO,IAAIjZ,EACnC,SAAsBiK,EAAO4lB,GAAQ,GAAuB,WAAnBhrB,GAAQoF,IAAiC,OAAVA,EAAgB,OAAOA,EAAO,IAAI6lB,EAAO7lB,EAAMnI,OAAOiuB,aAAc,QAAajyB,IAATgyB,EAAoB,CAAE,IAAIE,EAAMF,EAAKtpB,KAAKyD,EAAO4lB,GAAQ,WAAY,GAAqB,WAAjBhrB,GAAQmrB,GAAmB,OAAOA,EAAK,MAAM,IAAI5K,UAAU,+CAAiD,CAAE,OAAiB,WAATyK,EAAoBI,OAASzkB,QAAQvB,EAAQ,CADnVimB,CAAajX,EAAK,UAAW,MAAwB,WAAjBpU,GAAQ7E,GAAoBA,EAAMiwB,OAAOjwB,EAAM,CAD1EmwB,CAAenwB,MAAiBkF,EAAOmB,OAAOupB,eAAe1qB,EAAKlF,EAAK,CAAEoE,MAAOA,EAAOkrB,YAAY,EAAMc,cAAc,EAAMC,UAAU,IAAkBnrB,EAAIlF,GAAOoE,EAAgBc,CAAK,CAG3O,SAAS3F,GAAyB0R,EAAQyd,GAAY,GAAc,MAAVzd,EAAgB,MAAO,CAAE,EAAE,IAAkEjR,EAAK4H,EAAnEmM,EACzF,SAAuC9C,EAAQyd,GAAY,GAAc,MAAVzd,EAAgB,MAAO,CAAE,EAAE,IAA2DjR,EAAK4H,EAA5DmM,EAAS,CAAE,EAAM4a,EAAatoB,OAAO0M,KAAK9B,GAAqB,IAAKrJ,EAAI,EAAGA,EAAI+mB,EAAWlpB,OAAQmC,IAAO5H,EAAM2uB,EAAW/mB,GAAQ8mB,EAAStiB,QAAQpM,IAAQ,IAAa+T,EAAO/T,GAAOiR,EAAOjR,IAAQ,OAAO+T,CAAQ,CADhN6a,CAA8B3d,EAAQyd,GAAuB,GAAIroB,OAAOwoB,sBAAuB,CAAE,IAAIC,EAAmBzoB,OAAOwoB,sBAAsB5d,GAAS,IAAKrJ,EAAI,EAAGA,EAAIknB,EAAiBrpB,OAAQmC,IAAO5H,EAAM8uB,EAAiBlnB,GAAQ8mB,EAAStiB,QAAQpM,IAAQ,GAAkBqG,OAAOC,UAAUyoB,qBAAqBvoB,KAAKyK,EAAQjR,KAAgB+T,EAAO/T,GAAOiR,EAAOjR,GAAQ,CAAE,OAAO+T,CAAQ,CAMpe,SAAS8tB,GAAelkC,GAC7B,IAAI2B,EAAQ3B,EAAK2B,MACfkhC,EAAU7iC,EAAK6iC,QACftB,EAAQvhC,EAAKuhC,MACbuB,EAAUlhC,GAAyB5B,EAAM6B,IA0T3C,MAAO,CACLsiC,oBA1TwB,SAA6BC,GACrD,IAAIC,EAAeD,EAAcC,aAC/BC,EAAcF,EAAcE,YAC5BC,EAAeH,EAAcG,aAE/B,SAASC,EAAwBrX,IAOCoU,EAAMjE,WAAWjF,QAAWkJ,EAAMlG,gBAAgBf,WAChDnN,EAAM/W,SAAWiuB,IAShB,IAHF,CAACC,EAAaC,GAAcjB,MAAK,SAAUmB,GAC1E,OC3CyBC,ED2CDD,EC3CSE,ED2CIxX,EAAM/W,OC1C1CsuB,IAAWC,GAASD,EAAOE,SAASD,GADtC,IAA0BD,EAAQC,CD4CnC,MAEEpD,EAAMhE,SAAS,OAAQ,MAMlB57B,EAAMk8B,OACT0D,EAAMlG,gBAAgBhB,YAG5B,CACA,OAAOzI,GAAc,CAUnBiT,aAAcL,EACdM,YAAaN,EAKbO,YAAa,SAAqB5X,IACA,IAA5BoU,EAAMjE,WAAWjF,QAAoBgM,IAAiB1iC,EAAMg2B,YAAYz2B,SAAS8jC,eAAiB7X,EAAM/W,SAAWiuB,GAGvHA,EAAaY,MACf,GAnDOrjC,GAAyBwiC,EAAe3T,IAqDlD,EAkQCyU,aAjQiB,SAAsBC,GACvC,OAAOvT,GAAc,CACnBjmB,KAAM,WACN,gBAAiB41B,EAAMjE,WAAWjF,OAClC,gBAAiB,UACjB,gBAAiBkJ,EAAMjE,WAAWjF,OAASkJ,EAAMjE,WAAWlP,YAAYjhB,KAAI,SAAU4lB,GACpF,IAAIzf,EAASyf,EAAMzf,OACnB,OAAOmpB,GAAyB96B,EAAMqI,GAAI,OAAQsJ,EACpD,IAAGwpB,KAAK,UAAO38B,EACf,kBAAmBs8B,GAAyB96B,EAAMqI,GAAI,UACrDm7B,EACJ,EAuPCC,aAtPiB,SAAsBhB,GACpBA,EAAcC,aAC/Bc,IAAAA,EAAOvjC,GAAyBwiC,EAAeN,IAC7C5W,EAAe,SAAsBC,GACvC,IAAIkY,EACJ1jC,EAAMg9B,SAAS/M,GAAc,CAC3BzE,MAAOA,EACP0V,QAASA,EACTrvB,MAAO+tB,EAAMjE,YACZwF,IACHvB,EAAMhE,SAAS,SAAU,MACgC,QAAxD8H,EAAwBjB,EAAcC,oBAAoDlkC,IAA1BklC,GAA4CA,EAAsBJ,MACpI,EACD,OAAOrT,GAAc,CACnB4L,OAAQ,GACR8H,YAAY,EACZ35B,KAAM,SACNgzB,SAAU,SAAkBxR,GAC1BA,EAAME,iBACN,IAAIkY,EAAgBpK,GAAuBx5B,EAAMy5B,QAASmG,EAAMlG,sBAC1Cl7B,IAAlBolC,EACFA,EAAc1sB,MAAK,WACjB,OAAOqU,EAAaC,EACtB,IAEAD,EAAaC,EAEhB,EACD2R,QAAS,SAAiB3R,GACxB,IAAIqY,EACJrY,EAAME,iBACN1rB,EAAMm9B,QAAQlN,GAAc,CAC1BzE,MAAOA,EACP0V,QAASA,EACTrvB,MAAO+tB,EAAMjE,YACZwF,IACHvB,EAAMhE,SAAS,QAAS,MACkC,QAAzDiI,EAAyBpB,EAAcC,oBAAqDlkC,IAA3BqlC,GAA6CA,EAAuBnF,OACxI,GACC8E,EACJ,EA+MCM,cA3GkB,SAAuBN,GACzC,OAAOvT,GAAc,CACnB8T,QAASjJ,GAAyB96B,EAAMqI,GAAI,SAC5CA,GAAIyyB,GAAyB96B,EAAMqI,GAAI,UACtCm7B,EACJ,EAuGCQ,cA/MkB,SAAuBvB,GACzC,IAAIwB,EACJ,SAASC,EAAQ1Y,IAGXxrB,EAAMm8B,aAAejB,QAAQ0E,EAAMjE,WAAWiB,SAChDmE,GAAQ9Q,GAAc,CACpBzE,MAAOA,EACPxrB,MAAOA,EACP48B,MAAOgD,EAAMjE,WAAWkB,YAAc+C,EAAMjE,WAAWiB,MACvDsE,QAASA,EACTtB,MAAOA,GACNuB,IAELvB,EAAMhE,SAAS,QAAS,KAC1B,CACA,IAAI76B,EAAQ0hC,GAAiB,CAAE,EACd1hC,EAAM2hC,iBACrByB,EAAkBpjC,EAAMqjC,UACxBA,OAAgC5lC,IAApB2lC,EAA6B,IAAMA,EAC/CX,EAAOvjC,GAAyBc,EAAOqhC,IACrCiC,EAAapK,GAAc2F,EAAMjE,YAEjC2I,EX5JD,SAAmBC,GACxB,OAAOrJ,QAAQqJ,GAAaA,EAAUC,MAAMnJ,IAC9C,CW0JgCoJ,EAD+C,QAAzDR,EAAwBjkC,EAAMg2B,YAAYp1B,iBAAiDpC,IAA1BylC,OAAmCzlC,EAASylC,EAAsBM,YAAc,IAE/JnI,EAAep8B,EAAMo8B,eAAiBiI,SAAgDA,EAAWzJ,UAAY0J,EAAwB,KAAO,UAChJ,OAAOrU,GAAc,CACnB,oBAAqB,OACrB,wBAAyB2P,EAAMjE,WAAWjF,QAA4C,OAAlCkJ,EAAMjE,WAAWvB,aAAwBU,GAAyB96B,EAAMqI,GAAI,QAAQjH,OAAOw+B,EAAMjE,WAAWvB,cAAeiK,aAA+C7lC,EAAS6lC,EAAW1yB,aAAUnT,EAC5P,gBAAiBohC,EAAMjE,WAAWjF,OAASkJ,EAAMjE,WAAWlP,YAAYzmB,QAAO,SAAU2mB,GACvF,OAAOA,EAAWC,MAAMzmB,OAAS,CACnC,IAAGqF,KAAI,SAAU9J,GACf,IAAIiQ,EAASjQ,EAAMiQ,OACnB,OAAOmpB,GAAyB96B,EAAMqI,GAAI,OAAQsJ,EACpD,IAAGwpB,KAAK,UAAO38B,EACf,kBAAmBs8B,GAAyB96B,EAAMqI,GAAI,SACtDvD,MAAO86B,EAAMjE,WAAWkB,YAAc+C,EAAMjE,WAAWiB,MACvDv0B,GAAIyyB,GAAyB96B,EAAMqI,GAAI,SACvCq8B,aAAc,MACdC,YAAa,MACbC,eAAgB,MAChBxI,aAAcA,EACdyI,WAAY,QACZtI,UAAWv8B,EAAMu8B,UACjBD,YAAat8B,EAAMs8B,YACnB8H,UAAWA,EACX9iC,KAAM,SACNwjC,SAAU,SAAkBtZ,GAC1B,IAAI1mB,EAAQ0mB,EAAMuZ,cAAcjgC,MAC5B9E,EAAMq8B,yBAA2Bf,GAAe9P,GAAOwZ,YACzD7D,EAAQE,SAASv8B,GAGnBi8B,GAAQ9Q,GAAc,CACpBzE,MAAOA,EACPxrB,MAAOA,EACP48B,MAAO93B,EAAMa,MAAM,EAAGy+B,GACtBlD,QAASA,EACTtB,MAAOA,GACNuB,GACJ,EACD8D,iBAAkB,SAA0BzZ,GAC1CuV,GAAQ9Q,GAAc,CACpBzE,MAAOA,EACPxrB,MAAOA,EACP48B,MAAOpR,EAAMuZ,cAAcjgC,MAAMa,MAAM,EAAGy+B,GAC1ClD,QAASA,EACTtB,MAAOA,GACNuB,GACJ,EACD+D,UAAW,SAAmB1Z,GACxB8P,GAAe9P,GAAOwZ,aDjM3B,SAAmB3mC,GACxB,IAAImtB,EAAQntB,EAAKmtB,MACfxrB,EAAQ3B,EAAK2B,MACbkhC,EAAU7iC,EAAK6iC,QACftB,EAAQvhC,EAAKuhC,MACbuB,EAAUlhC,GAAyB5B,EAAM6B,IAC3C,GAAkB,YAAdsrB,EAAM9qB,KAAmC,cAAd8qB,EAAM9qB,IAAqB,CAExD,IAAIykC,EAAwB,WAC1B,IAAIjD,EAAkBjI,GAAc2F,EAAMjE,YACtCyJ,EAAWplC,EAAMg2B,YAAYz2B,SAAS8lC,eAAevK,GAAyB96B,EAAMqI,GAAI,QAAQjH,OAAOw+B,EAAMjE,WAAWvB,cAAe8H,aAAyD1jC,EAAS0jC,EAAgBvwB,SACzNyzB,IACEA,EAASE,uBACXF,EAASE,wBAAuB,GAEhCF,EAASG,gBAAe,GAG9B,EACIC,EAAkB,WACpB,IAAItD,EAAkBjI,GAAc2F,EAAMjE,YAC1C,GAAsC,OAAlCiE,EAAMjE,WAAWvB,cAAyB8H,EAAiB,CAC7D,IAAI73B,EAAO63B,EAAgB73B,KACzBqwB,EAAiBwH,EAAgBxH,eACjCE,EAAUsH,EAAgBtH,QAC1BjpB,EAASuwB,EAAgBvwB,OAC3BA,EAAOyjB,SAASnF,GAAc,CAC5BzE,MAAOA,EACPnhB,KAAMA,EACNqwB,eAAgBA,EAChBE,QAASA,EACTsG,QAASA,EACTvvB,OAAQA,EACRE,MAAO+tB,EAAMjE,YACZwF,GACL,CACF,EAEA3V,EAAME,kBAI0B,IAA5BkU,EAAMjE,WAAWjF,SAAqB12B,EAAMm8B,aAAejB,QAAQ0E,EAAMjE,WAAWiB,QACtFmE,GAAQ9Q,GAAc,CACpBzE,MAAOA,EACPxrB,MAAOA,EACP48B,MAAOgD,EAAMjE,WAAWiB,MACxBsE,QAASA,EACTtB,MAAOA,GACNuB,IAAUjqB,MAAK,WAChB0oB,EAAMhE,SAASpQ,EAAM9qB,IAAK,CACxB+kC,iBAAkBzlC,EAAMi5B,sBAE1BuM,IAIAxsB,WAAWmsB,EAAuB,EACpC,KAEAvF,EAAMhE,SAASpQ,EAAM9qB,IAAK,CAAA,GAC1B8kC,IACAL,IAEJ,MAAO,GAAkB,WAAd3Z,EAAM9qB,IAIf8qB,EAAME,iBACNkU,EAAMhE,SAASpQ,EAAM9qB,IAAK,MAM1Bk/B,EAAMlG,gBAAgBhB,iBACjB,GAAkB,QAAdlN,EAAM9qB,IACfk/B,EAAMhE,SAAS,OAAQ,MAMvBgE,EAAMlG,gBAAgBhB,iBACjB,GAAkB,UAAdlN,EAAM9qB,IAAiB,CAGhC,GAAsC,OAAlCk/B,EAAMjE,WAAWvB,cAAyBwF,EAAMjE,WAAWlP,YAAYriB,OAAM,SAAUuiB,GACzF,OAAmC,IAA5BA,EAAWC,MAAMzmB,MAC1B,IAAI,CACF,IAAIy9B,EAAgBpK,GAAuBx5B,EAAMy5B,QAASmG,EAAMlG,iBAUhE,iBATsBl7B,IAAlBolC,EACFA,EAAc1sB,KAAK0oB,EAAMlG,gBAAgBhB,WAC/B14B,EAAMk8B,OAKhB0D,EAAMlG,gBAAgBhB,YAG1B,CAIAlN,EAAME,iBACN,IAAI0F,EAAQ6I,GAAc2F,EAAMjE,YAC9BtxB,EAAO+mB,EAAM/mB,KACbqwB,EAAiBtJ,EAAMsJ,eACvBE,EAAUxJ,EAAMwJ,QAChBjpB,EAASyf,EAAMzf,OACjB,GAAI6Z,EAAMka,SAAWla,EAAMma,aACTnnC,IAAZo8B,IACFjpB,EAAOujB,SAASjF,GAAc,CAC5BzE,MAAOA,EACPnhB,KAAMA,EACNqwB,eAAgBA,EAChBE,QAASA,EACTsG,QAASA,EACTvvB,OAAQA,EACRE,MAAO+tB,EAAMjE,YACZwF,IACHnhC,EAAMY,UAAU29B,eAAe,CAC7B3D,QAASA,EACTvwB,KAAMA,EACNwH,MAAO+tB,EAAMjE,mBAGZ,GAAInQ,EAAMoa,cACCpnC,IAAZo8B,IACFjpB,EAAOujB,SAASjF,GAAc,CAC5BzE,MAAOA,EACPnhB,KAAMA,EACNqwB,eAAgBA,EAChBE,QAASA,EACTsG,QAASA,EACTvvB,OAAQA,EACRE,MAAO+tB,EAAMjE,YACZwF,IACHnhC,EAAMY,UAAU+9B,kBAAkB,CAChC/D,QAASA,EACTvwB,KAAMA,EACNwH,MAAO+tB,EAAMjE,mBAGZ,GAAInQ,EAAMqa,YAEV,CACL,QAAgBrnC,IAAZo8B,EAeF,OAdAjpB,EAAOujB,SAASjF,GAAc,CAC5BzE,MAAOA,EACPnhB,KAAMA,EACNqwB,eAAgBA,EAChBE,QAASA,EACTsG,QAASA,EACTvvB,OAAQA,EACRE,MAAO+tB,EAAMjE,YACZwF,SACHnhC,EAAMY,UAAUw9B,SAAS,CACvBxD,QAASA,EACTvwB,KAAMA,EACNwH,MAAO+tB,EAAMjE,aAIjBoF,GAAQ9Q,GAAc,CACpBzE,MAAOA,EACPyV,UAAW,CACTvK,QAAQ,GAEV12B,MAAOA,EACP48B,MAAOlC,EACPwG,QAASA,EACTtB,MAAOA,GACNuB,IAAUjqB,MAAK,WAChBvF,EAAOujB,SAASjF,GAAc,CAC5BzE,MAAOA,EACPnhB,KAAMA,EACNqwB,eAAgBA,EAChBE,QAASA,EACTsG,QAASA,EACTvvB,OAAQA,EACRE,MAAO+tB,EAAMjE,YACZwF,GACL,GACF,CACF,CACF,CCSQ2E,CAAW7V,GAAc,CACvBzE,MAAOA,EACPxrB,MAAOA,EACPkhC,QAASA,EACTtB,MAAOA,GACNuB,GACJ,EACD+C,QAASA,EAIT6B,OAAQvvB,GACRwvB,QAAS,SAAiBxa,GAQpBiX,EAAcC,eAAiB1iC,EAAMg2B,YAAYz2B,SAAS8jC,eAAkBzD,EAAMjE,WAAWjF,QAC/FwN,EAAQ1Y,EAEZ,GACCgY,EACJ,EA8GCyC,cA7FkB,SAAuBzC,GACzC,OAAOvT,GAAc,CACnBkT,YAAa,SAAqB3X,GAIhCA,EAAME,gBACP,EACDwa,aAAc,WACZtG,EAAMhE,SAAS,aAAc,KAC/B,GACC4H,EACJ,EAkFC2C,aAxGiB,SAAsB1D,GACvC,IAAI7O,EAAQ6O,GAAiB,CAAE,EAC7B9wB,EAASiiB,EAAMjiB,OACf6xB,EAAOvjC,GAAyB2zB,EAAOyO,IACzC,OAAOpS,GAAc,CACnBjmB,KAAM,UACN,kBAAmB8wB,GAAyB96B,EAAMqI,GAAI,SACtDA,GAAIyyB,GAAyB96B,EAAMqI,GAAI,OAAQsJ,IAC9C6xB,EACJ,EAgGC4C,aAlFiB,SAAsB3D,GACvC,IAAIp4B,EAAOo4B,EAAcp4B,KACvBsH,EAAS8wB,EAAc9wB,OACvB6xB,EAAOvjC,GAAyBwiC,EAAeH,IACjD,OAAOrS,GAAc,CACnB5nB,GAAIyyB,GAAyB96B,EAAMqI,GAAI,QAAQjH,OAAOiJ,EAAKg8B,mBAAoB10B,GAC/E3H,KAAM,SACN,gBAAiB41B,EAAMjE,WAAWvB,eAAiB/vB,EAAKg8B,kBACxDC,YAAa,SAAqB9a,GAChC,GAAInhB,EAAKg8B,oBAAsBzG,EAAMjE,WAAWvB,aAAhD,CAGAwF,EAAMhE,SAAS,YAAavxB,EAAKg8B,mBACjC,IAAIhC,EAAapK,GAAc2F,EAAMjE,YACrC,GAAsC,OAAlCiE,EAAMjE,WAAWvB,cAAyBiK,EAAY,CACxD,IAAIkC,EAAQlC,EAAWh6B,KACrBqwB,EAAiB2J,EAAW3J,eAC5BE,EAAUyJ,EAAWzJ,QACrB4L,EAAUnC,EAAW1yB,OACvB60B,EAAQpR,SAASnF,GAAc,CAC7BzE,MAAOA,EACPnhB,KAAMk8B,EACN7L,eAAgBA,EAChBE,QAASA,EACTsG,QAASA,EACTvvB,OAAQ60B,EACR30B,MAAO+tB,EAAMjE,YACZwF,GACL,CAjBA,CAkBD,EACDgC,YAAa,SAAqB3X,GAGhCA,EAAME,gBACP,EACDsa,QAAS,SAAiBxa,GACxB,IAAIkP,EAAiB/oB,EAAOgpB,kBAAkB,CAC5CtwB,KAAMA,EACNwH,MAAO+tB,EAAMjE,aAEXf,EAAUjpB,EAAOkpB,WAAW,CAC9BxwB,KAAMA,EACNwH,MAAO+tB,EAAMjE,cAQKf,EAAU7mB,QAAQK,UAAY2sB,GAAQ9Q,GAAc,CACtEzE,MAAOA,EACPyV,UAAW,CACTvK,QAAQ,GAEV12B,MAAOA,EACP48B,MAAOlC,EACPwG,QAASA,EACTtB,MAAOA,GACNuB,KACWjqB,MAAK,WACjBvF,EAAOujB,SAASjF,GAAc,CAC5BzE,MAAOA,EACPnhB,KAAMA,EACNqwB,eAAgBA,EAChBE,QAASA,EACTsG,QAASA,EACTvvB,OAAQA,EACRE,MAAO+tB,EAAMjE,YACZwF,GACL,GACF,GACCqC,EACJ,EAWH,CE1VA,SAASj+B,GAAQK,GAAkC,OAAOL,GAAU,mBAAqB/C,QAAU,iBAAmBA,OAAOurB,SAAW,SAAUnoB,GAAO,cAAcA,CAAM,EAAG,SAAUA,GAAO,OAAOA,GAAO,mBAAqBpD,QAAUoD,EAAIhD,cAAgBJ,QAAUoD,IAAQpD,OAAOwE,UAAY,gBAAkBpB,CAAK,EAAGL,GAAQK,EAAM,CAC/U,SAAS8pB,GAAQC,EAAQC,GAAkB,IAAInc,EAAO1M,OAAO0M,KAAKkc,GAAS,GAAI5oB,OAAOwoB,sBAAuB,CAAE,IAAIM,EAAU9oB,OAAOwoB,sBAAsBI,GAASC,IAAmBC,EAAUA,EAAQ7pB,QAAO,SAAU8pB,GAAO,OAAO/oB,OAAOgpB,yBAAyBJ,EAAQG,GAAKE,UAAY,KAAKvc,EAAKpM,KAAKgf,MAAM5S,EAAMoc,EAAU,CAAE,OAAOpc,CAAM,CACpV,SAASwc,GAAcxb,GAAU,IAAK,IAAInM,EAAI,EAAGA,EAAIpC,UAAUC,OAAQmC,IAAK,CAAE,IAAIqJ,EAAS,MAAQzL,UAAUoC,GAAKpC,UAAUoC,GAAK,CAAE,EAAEA,EAAI,EAAIonB,GAAQ3oB,OAAO4K,IAAS,GAAIue,SAAQ,SAAUxvB,GAAOyvB,GAAgB1b,EAAQ/T,EAAKiR,EAAOjR,GAAO,IAAKqG,OAAOqpB,0BAA4BrpB,OAAOspB,iBAAiB5b,EAAQ1N,OAAOqpB,0BAA0Bze,IAAW+d,GAAQ3oB,OAAO4K,IAASue,SAAQ,SAAUxvB,GAAOqG,OAAOupB,eAAe7b,EAAQ/T,EAAKqG,OAAOgpB,yBAAyBpe,EAAQjR,GAAO,GAAI,CAAE,OAAO+T,CAAQ,CACzf,SAAS0b,GAAgBvqB,EAAKlF,EAAKoE,GAA4L,OAAnLpE,EAC5C,SAAwBiZ,GAAO,IAAIjZ,EACnC,SAAsBiK,EAAO4lB,GAAQ,GAAuB,WAAnBhrB,GAAQoF,IAAiC,OAAVA,EAAgB,OAAOA,EAAO,IAAI6lB,EAAO7lB,EAAMnI,OAAOiuB,aAAc,QAAajyB,IAATgyB,EAAoB,CAAE,IAAIE,EAAMF,EAAKtpB,KAAKyD,EAAO4lB,GAAQ,WAAY,GAAqB,WAAjBhrB,GAAQmrB,GAAmB,OAAOA,EAAK,MAAM,IAAI5K,UAAU,+CAAiD,CAAE,OAAiB,WAATyK,EAAoBI,OAASzkB,QAAQvB,EAAQ,CADnVimB,CAAajX,EAAK,UAAW,MAAwB,WAAjBpU,GAAQ7E,GAAoBA,EAAMiwB,OAAOjwB,EAAM,CAD1EmwB,CAAenwB,MAAiBkF,EAAOmB,OAAOupB,eAAe1qB,EAAKlF,EAAK,CAAEoE,MAAOA,EAAOkrB,YAAY,EAAMc,cAAc,EAAMC,UAAU,IAAkBnrB,EAAIlF,GAAOoE,EAAgBc,CAAK,CAIpO,SAAS6gC,GAAYpoC,GAC1B,IAAIyf,EAAG4oB,EAAuBC,EAAwBC,EAClDnN,EAAUp7B,EAAKo7B,QACjBn0B,EAAUjH,EAAKiH,QACbuhC,EAAuL,QAAzK/oB,IAAoE,QAA7D4oB,EAAwBphC,EAAQwhC,+BAA+DtoC,IAA1BkoC,OAAmCloC,EAASkoC,EAAsBxZ,aAAe,IAAI,UAAsB1uB,IAANsf,OAAetf,EAASsf,EAAEqP,QACzN4Z,EAAeF,EAAa1W,GAAgB,CAAA,EAAI0W,EAAY9/B,OAAO0M,MAAqE,QAA9DkzB,EAAyBrhC,EAAQwhC,+BAAgEtoC,IAA3BmoC,OAAoCnoC,EAASmoC,EAAuBrhC,UAAY,KAAO,CAAE,EAC7O,MAAO,CACLm0B,QAASA,EAAQjuB,KAAI,SAAU+xB,GAC7B,MAAO,CACL16B,KAAM06B,EAAO16B,KACbyC,QAASyB,OAAO0M,KAAK8pB,EAAOjG,8BAAgC,IAEhE,IACAhyB,QAAS2qB,GAAc,CACrB,oBAAqBlpB,OAAO0M,KAAKnO,IAChCyhC,GACHC,GAAI9Z,GAAW9rB,QAAuE,QAA9DwlC,EAAyBthC,EAAQwhC,+BAAgEtoC,IAA3BooC,OAAoCpoC,EAASooC,EAAuB1Z,aAAe,IAErL,CCxBO,SAAS+Z,GAAc5oC,GAC5B,IAAI6oC,EACAr1B,EAAQxT,EAAKwT,MACjB,OAAqB,IAAjBA,EAAM6kB,QAA2C,OAAvB7kB,EAAMuoB,aAC3B,MAE2C,QAA3C8M,EAAiBjN,GAAcpoB,UAAuCrT,IAAnB0oC,OAA4B1oC,EAAS0oC,EAAexM,iBAAmB,IACrI,CCRA,SAASn1B,GAAQK,GAAkC,OAAOL,GAAU,mBAAqB/C,QAAU,iBAAmBA,OAAOurB,SAAW,SAAUnoB,GAAO,cAAcA,CAAM,EAAG,SAAUA,GAAO,OAAOA,GAAO,mBAAqBpD,QAAUoD,EAAIhD,cAAgBJ,QAAUoD,IAAQpD,OAAOwE,UAAY,gBAAkBpB,CAAK,EAAGL,GAAQK,EAAM,CAC/U,SAAS8pB,GAAQC,EAAQC,GAAkB,IAAInc,EAAO1M,OAAO0M,KAAKkc,GAAS,GAAI5oB,OAAOwoB,sBAAuB,CAAE,IAAIM,EAAU9oB,OAAOwoB,sBAAsBI,GAASC,IAAmBC,EAAUA,EAAQ7pB,QAAO,SAAU8pB,GAAO,OAAO/oB,OAAOgpB,yBAAyBJ,EAAQG,GAAKE,UAAY,KAAKvc,EAAKpM,KAAKgf,MAAM5S,EAAMoc,EAAU,CAAE,OAAOpc,CAAM,CACpV,SAASwc,GAAcxb,GAAU,IAAK,IAAInM,EAAI,EAAGA,EAAIpC,UAAUC,OAAQmC,IAAK,CAAE,IAAIqJ,EAAS,MAAQzL,UAAUoC,GAAKpC,UAAUoC,GAAK,CAAE,EAAEA,EAAI,EAAIonB,GAAQ3oB,OAAO4K,IAAS,GAAIue,SAAQ,SAAUxvB,GAAOyvB,GAAgB1b,EAAQ/T,EAAKiR,EAAOjR,GAAO,IAAKqG,OAAOqpB,0BAA4BrpB,OAAOspB,iBAAiB5b,EAAQ1N,OAAOqpB,0BAA0Bze,IAAW+d,GAAQ3oB,OAAO4K,IAASue,SAAQ,SAAUxvB,GAAOqG,OAAOupB,eAAe7b,EAAQ/T,EAAKqG,OAAOgpB,yBAAyBpe,EAAQjR,GAAO,GAAI,CAAE,OAAO+T,CAAQ,CACzf,SAAS0b,GAAgBvqB,EAAKlF,EAAKoE,GAA4L,OAAnLpE,EAC5C,SAAwBiZ,GAAO,IAAIjZ,EACnC,SAAsBiK,EAAO4lB,GAAQ,GAAuB,WAAnBhrB,GAAQoF,IAAiC,OAAVA,EAAgB,OAAOA,EAAO,IAAI6lB,EAAO7lB,EAAMnI,OAAOiuB,aAAc,QAAajyB,IAATgyB,EAAoB,CAAE,IAAIE,EAAMF,EAAKtpB,KAAKyD,EAAO4lB,GAAQ,WAAY,GAAqB,WAAjBhrB,GAAQmrB,GAAmB,OAAOA,EAAK,MAAM,IAAI5K,UAAU,+CAAiD,CAAE,OAAiB,WAATyK,EAAoBI,OAASzkB,QAAQvB,EAAQ,CADnVimB,CAAajX,EAAK,UAAW,MAAwB,WAAjBpU,GAAQ7E,GAAoBA,EAAMiwB,OAAOjwB,EAAM,CAD1EmwB,CAAenwB,MAAiBkF,EAAOmB,OAAOupB,eAAe1qB,EAAKlF,EAAK,CAAEoE,MAAOA,EAAOkrB,YAAY,EAAMc,cAAc,EAAMC,UAAU,IAAkBnrB,EAAIlF,GAAOoE,EAAgBc,CAAK,CAMpO,IAAIuhC,GAAe,SAAsBt1B,EAAOgqB,GACrD,OAAQA,EAAOv6B,MACb,IAAK,kBAqHL,IAAK,YAED,OAAO2uB,GAAcA,GAAc,CAAE,EAAEpe,GAAQ,CAAA,EAAI,CACjDuoB,aAAcyB,EAAOlI,UAlH3B,IAAK,WAED,OAAO1D,GAAcA,GAAc,CAAE,EAAEpe,GAAQ,CAAA,EAAI,CACjD+qB,MAAOf,EAAOlI,QACdkJ,WAAY,OAGlB,IAAK,iBAED,OAAO5M,GAAcA,GAAc,CAAE,EAAEpe,GAAQ,CAAA,EAAI,CACjD4a,YAAaoP,EAAOlI,UAG1B,IAAK,YAED,OAAO1D,GAAcA,GAAc,CAAE,EAAEpe,GAAQ,CAAA,EAAI,CACjD6kB,OAAQmF,EAAOlI,UAGrB,IAAK,YAED,OAAO1D,GAAcA,GAAc,CAAE,EAAEpe,GAAQ,CAAA,EAAI,CACjDgO,OAAQgc,EAAOlI,UAGrB,IAAK,aAED,OAAO1D,GAAcA,GAAc,CAAE,EAAEpe,GAAQ,CAAA,EAAI,CACjDojB,QAAShF,GAAcA,GAAc,CAAA,EAAIpe,EAAMojB,SAAU4G,EAAOlI,WAGtE,IAAK,YAED,IAAIsN,EAAYhR,GAAcA,GAAc,CAAA,EAAIpe,GAAQ,GAAI,CAC1DuoB,aAAcyB,EAAOlI,QAAQ1sB,eAAe,oBAAsB40B,EAAOlI,QAAQ8R,iBAAmB5M,GAAoB,EAAGhnB,EAAMuoB,aAAc5N,GAAc3a,GAAQgqB,EAAO77B,MAAMi5B,uBAEpL,OAAOhJ,GAAcA,GAAc,CAAE,EAAEgR,GAAY,CAAA,EAAI,CACrDpE,WAAYoK,GAAc,CACxBp1B,MAAOovB,MAIf,IAAK,UAED,IAAImG,EAAanX,GAAcA,GAAc,CAAA,EAAIpe,GAAQ,GAAI,CAC3DuoB,aAAcvB,IAAsB,EAAEhnB,EAAMuoB,aAAc5N,GAAc3a,GAAQgqB,EAAO77B,MAAMi5B,uBAE/F,OAAOhJ,GAAcA,GAAc,CAAE,EAAEmX,GAAa,CAAA,EAAI,CACtDvK,WAAYoK,GAAc,CACxBp1B,MAAOu1B,MAIf,IAAK,SAED,OAAIv1B,EAAM6kB,OACDzG,GAAcA,GAAc,CAAE,EAAEpe,GAAQ,CAAA,EAAI,CACjDuoB,aAAc,KACd1D,QAAQ,EACRmG,WAAY,OAGT5M,GAAcA,GAAc,CAAE,EAAEpe,GAAQ,CAAA,EAAI,CACjDuoB,aAAc,KACdwC,MAAO,GACP/c,OAAQ,OACR4M,YAAa,KAGnB,IAAK,SAED,OAAOwD,GAAcA,GAAc,CAAE,EAAEpe,GAAQ,CAAA,EAAI,CACjDuoB,aAAc,KACd1D,QAAQ,EACR7W,OAAQ,SAGd,IAAK,QAED,OAAOoQ,GAAcA,GAAc,CAAE,EAAEpe,GAAQ,CAAA,EAAI,CACjDuoB,cAM6B,IAA7ByB,EAAO77B,MAAMm8B,YAAuBN,EAAO77B,MAAMi5B,oBAAsB,KACvEpZ,OAAQ,OACRgd,WAAY,KACZD,MAAO,KAGb,IAAK,QAED,OAAO3M,GAAcA,GAAc,CAAE,EAAEpe,GAAQ,CAAA,EAAI,CACjDuoB,aAAcyB,EAAO77B,MAAMi5B,oBAC3BvC,QAASmF,EAAO77B,MAAMm8B,aAAejB,QAAQrpB,EAAM+qB,SAAWf,EAAO77B,MAAMy8B,gBAAgB,CACzF5qB,MAAOA,MAIf,IAAK,OAED,OAAIgqB,EAAO77B,MAAMk8B,MACRrqB,EAEFoe,GAAcA,GAAc,CAAE,EAAEpe,GAAQ,CAAA,EAAI,CACjD6kB,QAAQ,EACR0D,aAAc,OASpB,IAAK,aAED,OAAOnK,GAAcA,GAAc,CAAE,EAAEpe,GAAQ,CAAA,EAAI,CACjDuoB,aAAcyB,EAAO77B,MAAMi5B,sBAGjC,QAEE,MADiB,sBAAsB73B,OAAOsC,KAAKC,UAAUk4B,EAAOv6B,MAAO,sBACpEuQ,EAEb,EChJA,SAAStM,GAAQK,GAAkC,OAAOL,GAAU,mBAAqB/C,QAAU,iBAAmBA,OAAOurB,SAAW,SAAUnoB,GAAO,cAAcA,CAAM,EAAG,SAAUA,GAAO,OAAOA,GAAO,mBAAqBpD,QAAUoD,EAAIhD,cAAgBJ,QAAUoD,IAAQpD,OAAOwE,UAAY,gBAAkBpB,CAAK,EAAGL,GAAQK,EAAM,CAC/U,SAAS8pB,GAAQC,EAAQC,GAAkB,IAAInc,EAAO1M,OAAO0M,KAAKkc,GAAS,GAAI5oB,OAAOwoB,sBAAuB,CAAE,IAAIM,EAAU9oB,OAAOwoB,sBAAsBI,GAASC,IAAmBC,EAAUA,EAAQ7pB,QAAO,SAAU8pB,GAAO,OAAO/oB,OAAOgpB,yBAAyBJ,EAAQG,GAAKE,UAAY,KAAKvc,EAAKpM,KAAKgf,MAAM5S,EAAMoc,EAAU,CAAE,OAAOpc,CAAM,CACpV,SAASwc,GAAcxb,GAAU,IAAK,IAAInM,EAAI,EAAGA,EAAIpC,UAAUC,OAAQmC,IAAK,CAAE,IAAIqJ,EAAS,MAAQzL,UAAUoC,GAAKpC,UAAUoC,GAAK,CAAE,EAAEA,EAAI,EAAIonB,GAAQ3oB,OAAO4K,IAAS,GAAIue,SAAQ,SAAUxvB,GAAOyvB,GAAgB1b,EAAQ/T,EAAKiR,EAAOjR,GAAO,IAAKqG,OAAOqpB,0BAA4BrpB,OAAOspB,iBAAiB5b,EAAQ1N,OAAOqpB,0BAA0Bze,IAAW+d,GAAQ3oB,OAAO4K,IAASue,SAAQ,SAAUxvB,GAAOqG,OAAOupB,eAAe7b,EAAQ/T,EAAKqG,OAAOgpB,yBAAyBpe,EAAQjR,GAAO,GAAI,CAAE,OAAO+T,CAAQ,CACzf,SAAS0b,GAAgBvqB,EAAKlF,EAAKoE,GAA4L,OAAnLpE,EAC5C,SAAwBiZ,GAAO,IAAIjZ,EACnC,SAAsBiK,EAAO4lB,GAAQ,GAAuB,WAAnBhrB,GAAQoF,IAAiC,OAAVA,EAAgB,OAAOA,EAAO,IAAI6lB,EAAO7lB,EAAMnI,OAAOiuB,aAAc,QAAajyB,IAATgyB,EAAoB,CAAE,IAAIE,EAAMF,EAAKtpB,KAAKyD,EAAO4lB,GAAQ,WAAY,GAAqB,WAAjBhrB,GAAQmrB,GAAmB,OAAOA,EAAK,MAAM,IAAI5K,UAAU,+CAAiD,CAAE,OAAiB,WAATyK,EAAoBI,OAASzkB,QAAQvB,EAAQ,CADnVimB,CAAajX,EAAK,UAAW,MAAwB,WAAjBpU,GAAQ7E,GAAoBA,EAAMiwB,OAAOjwB,EAAM,CAD1EmwB,CAAenwB,MAAiBkF,EAAOmB,OAAOupB,eAAe1qB,EAAKlF,EAAK,CAAEoE,MAAOA,EAAOkrB,YAAY,EAAMc,cAAc,EAAMC,UAAU,IAAkBnrB,EAAIlF,GAAOoE,EAAgBc,CAAK,CAYpO,SAASyhC,GAAmB/hC,GAEjC,IAAIgiC,EAAc,GACdtnC,EAAQ+7B,GAAgBz2B,EAASgiC,GACjC1H,EAAQpE,GAAY2L,GAAcnnC,GAUtC,SAA4B3B,GAC1B,IAAIkpC,EAAgBC,EAChB1L,EAAYz9B,EAAKy9B,UACnBjqB,EAAQxT,EAAKwT,MAOf,GANA7R,EAAMo3B,cAAcnH,GAAc,CAChC6L,UAAWA,EACXjqB,MAAOA,EACPqvB,QAASA,EACTtgC,UAAWZ,EAAMY,WAChBugC,KACEsG,KAAyE,QAApCF,EAAiB11B,EAAMojB,eAAwCz2B,IAAnB+oC,GAAgG,QAAlEC,EAAwBD,EAAe1Q,6BAA6Dr4B,IAA1BgpC,GAAoCA,EAAsBhQ,sBAA0C,IAAnBx3B,EAAM00B,SAAoB,CACvS,IAAI6I,EAAS1I,GAA4B,CACvCQ,+BAA+B,IAEjCr1B,EAAMy5B,QAAQpyB,KAAKk2B,GACnBmK,EAAiB,CAACnK,GACpB,CACF,IA1BI4D,EbbC,SAAgC9iC,GACrC,IAAIuhC,EAAQvhC,EAAKuhC,MA+BjB,MAAO,CACL0B,gBA/BoB,SAAyBx8B,GAC7C86B,EAAMhE,SAAS,kBAAmB92B,EACnC,EA8BCu8B,SA7Ba,SAAkBv8B,GAC/B86B,EAAMhE,SAAS,WAAY92B,EAC5B,EA4BCs8B,eA3BmB,SAAwB73B,GAC3C,IAAIo+B,EAAa,EACb7iC,EAAQyE,EAASiC,KAAI,SAAUmhB,GACjC,OAAOsD,GAAcA,GAAc,CAAE,EAAEtD,GAAa,CAAA,EAAI,CAGtDC,MAAOP,GAAQM,EAAWC,OAAOphB,KAAI,SAAUnB,GAC7C,OAAO4lB,GAAcA,GAAc,CAAE,EAAE5lB,GAAO,CAAA,EAAI,CAChDg8B,kBAAmBsB,KAEtB,KAEL,IACA/H,EAAMhE,SAAS,iBAAkB92B,EAClC,EAcC64B,UAbc,SAAmB74B,GACjC86B,EAAMhE,SAAS,YAAa92B,EAC7B,EAYCy8B,UAXc,SAAmBz8B,GACjC86B,EAAMhE,SAAS,YAAa92B,EAC7B,EAUC6xB,WATe,SAAoB7xB,GACnC86B,EAAMhE,SAAS,aAAc92B,EAC9B,EASH,Ca3BgB8iC,CAAuB,CACnChI,MAAOA,IAELiI,EAActF,GAAetS,GAAc,CAC7CjwB,MAAOA,EACPkhC,QAASA,EACTtB,MAAOA,EACPh/B,UAAWZ,EAAMY,WAChBugC,IAmBH,SAASD,IACP,OAAOH,GAAQ9Q,GAAc,CAC3BzE,MAAO,IAAIsc,MAAM,SACjB7G,UAAW,CACTvK,OAAQkJ,EAAMjE,WAAWjF,QAE3B12B,MAAOA,EACPY,UAAWZ,EAAMY,UACjBg8B,MAAOgD,EAAMjE,WAAWiB,MACxBsE,QAASA,EACTtB,MAAOA,GACNuB,GACL,CACA,SAASuG,EAAiBjO,GACxBA,EAAQvJ,SAAQ,SAAUqN,GACxB,IAAIwK,EACJ,OAAkD,QAA1CA,EAAoBxK,EAAOvnB,iBAA6CxX,IAAtBupC,OAA+BvpC,EAASupC,EAAkB7gC,KAAKq2B,EAAQtN,GAAcA,GAAc,CAAA,EAAIkR,GAAU,GAAI,CAC7KvgC,UAAWZ,EAAMY,UACjBsgC,QAASA,EACThM,SAAU,SAAkBhY,GAC1BoqB,EAAYjgC,KAAK,CACf6tB,SAAUhY,GAEb,EACDkY,SAAU,SAAkBlY,GAC1BoqB,EAAYjgC,KAAK,CACf+tB,SAAUlY,GAEb,EACD0gB,UAAW,SAAmB1gB,GAC5BoqB,EAAYjgC,KAAK,CACfu2B,UAAW1gB,GAEf,IAEJ,GACF,CACA,SAASuqB,IACP,OAAOznC,EAAMy5B,QAAQkI,MAAK,SAAUpE,GAClC,MAAuB,6BAAhBA,EAAO16B,IAChB,GACF,CACA,GAAI7C,EAAM00B,WAAa+S,IAAkC,CACvD,IAAIO,EAA2C,kBAAnBhoC,EAAM00B,SAAyB,CAAA,EAAK10B,EAAM00B,SACtE10B,EAAMy5B,QAAQpyB,KAAKwtB,GAA4BmT,GACjD,CASA,OARAN,EAAiB1nC,EAAMy5B,SHnElB,SAAwB14B,GAC7B,IAAIknC,EAAuBC,EACvBzc,EAAW1qB,EAAM0qB,SACnBuK,EAAcj1B,EAAMi1B,YAEtB,GAD4E,QAAnDiS,EAAwBjS,EAAYp1B,iBAAiDpC,IAA1BypC,GAA2G,QAA9DC,EAAyBD,EAAsB1D,iBAAkD/lC,IAA3B0pC,OAAhF1pC,EAA6H0pC,EAAuBx/B,SAAS,mBAC7P,CACrB,IAAIy/B,EAAoBnS,EAAYz2B,SAAS5B,cAAc,QACvDyqC,EAAUpS,EAAYz2B,SAAS8oC,cAAc,QACjDF,EAAkBtlC,KAAO,mBACzBmW,YAAW,WACTmvB,EAAkBh+B,QAAUzG,KAAKC,UAAU8nB,GAC3C2c,EAAQ/R,YAAY8R,EACrB,GAAE,EACL,CACF,CGsDEG,CAAe,CACb7c,SAAUgb,GAAY,CACpBhN,QAASz5B,EAAMy5B,QACfn0B,QAASA,IAEX0wB,YAAah2B,EAAMg2B,cAEd/F,GAAcA,GAAc,CACjCiR,QAASA,EACTtgC,UAAWZ,EAAMY,WAChBinC,GAAc1G,EACnB,CCzGO,IACMoH,GAAiB,iCCExBC,GAAY,cASZC,GAAY,SAACC,GACjB,IAAKA,EAAO,OAAO,EACnB,IACE,IAAAC,EARW,SAACD,GACd,IAAOE,EAAuBpoC,EAAhBkoC,EAAMp3B,MAAM,KAAI,GAApB,GACV,OAAO5N,KAAKmC,MAAMgjC,KAAKD,GACzB,CAKoBv3B,CAAOq3B,GAAfI,EAAGH,EAAHG,IAER,OAAO36B,KAAKoW,MAAQ,IAAOukB,EAAM,EAClC,CAAC,MAAAC,GACA,OAAO,CACT,CACF,EAEIC,GAAmC,KAI1BC,GAAa,WAAA,IAAA7X,EAAA8X,EAAAC,IAAAC,MAAG,SAAAC,EAAAhrC,GAAA,IAAAirC,EAAA1mB,EAAA,OAAAumB,IAAApkC,MAAA,SAAAwkC,GAAA,cAAAA,EAAA1xB,KAAA0xB,EAAAjjC,MAAA,KAAA,EACqB,GADZgjC,EAAWjrC,EAAXirC,YAC9B1mB,EAAS4mB,eAAeC,QAAQjB,IACjCC,GAAU7lB,GAAO,CAAA2mB,EAAAjjC,KAAA,EAAA,KAAA,CAAA,OAAAijC,EAAAG,OAAA,SAAS9mB,GAAM,KAAA,EAgBpC,OAdIomB,KACHA,GAAWj2B,MAAK,GAAA3R,OAAImnC,GAAwB,UAAA,CAC1Cve,OAAQ,OACRzC,QAAS,CACP,yBAA0B+hB,EAC1B,eAAgB,sBAGjBpyB,MAAK,SAACpY,GAAC,OAAKA,EAAE6qC,MAAM,IACpBzyB,MAAK,SAAAnW,GAAe,IAAZ2nC,EAAK3nC,EAAL2nC,MAEP,OADAc,eAAeI,QAAQpB,GAAWE,GAC3BA,KAER7Q,SAAQ,WAAA,OAAOmR,GAAW,IAAI,KAClCO,EAAAG,OAAA,SAEMV,IAAQ,KAAA,EAAA,IAAA,MAAA,OAAAO,EAAAve,OAAA,GAAAqe,OAChB,OArBYJ,SAAahb,GAAA,OAAAmD,EAAA/K,MAAAnjB,KAAAgD,UAAA,CAAA,CAAA,GAuBb2jC,GAAY,WAAA,IAAAjW,EAAAsV,EAAAC,IAAAC,MAAG,SAAAU,EAAApoC,GAAA,IAAA4nC,EAAAS,EAAAv/B,EAAAunB,EAAAxK,EAAAmhB,EAAA,OAAAS,IAAApkC,MAAA,SAAAilC,GAAA,cAAAA,EAAAnyB,KAAAmyB,EAAA1jC,MAAA,KAAA,EAeN,OAdpBgjC,EAAW5nC,EAAX4nC,YACAS,EAAMroC,EAANqoC,OACAv/B,EAAS9I,EAAT8I,UACAunB,EAAKrwB,EAALqwB,OAOMxK,EAAU,IAAI0iB,SACZx8B,IAAI,yBAA0B67B,GACtC/hB,EAAQ9Z,IAAI,eAAgB,oBAERu8B,EAAA1jC,KAAA,EACE2iC,GAAc,CAAEK,YAAAA,IAAc,KAAA,EAA5CZ,EAAKsB,EAAAE,KACX3iB,EAAQ9Z,IAAI,yBAAerM,OAAWsnC,IAAS,KAAA,EAAA,OAAAsB,EAAAN,OAAA,SAG1C32B,MAAK3R,GAAAA,OAAImnC,GAA2B,aAAA,CACzCve,OAAQ,OACRxC,KAAM9jB,KAAKC,UAAU,CACnBouB,MAAAA,EACAvnB,UAAAA,EACAu/B,OAAAA,IAEFxiB,QAAAA,KACA,KAAA,GAAA,IAAA,MAAA,OAAAyiB,EAAAhf,OAAA,GAAA8e,OACH,OA7BYD,SAAYM,GAAA,OAAAvW,EAAAvN,MAAAnjB,KAAAgD,UAAA,CAAA,CAAA,GCxClB,SAASkkC,GAAW/rC,GAAuD,IAAAyB,EAAAzB,EAApD0B,aAC5BsqC,QADwC7rC,IAAAsB,EAAG,CAAA,EAAEA,GACrCwqC,cAAAA,OAAgB9rC,IAAH6rC,EAAG,aAAYA,EAEpC,OACE3sC,EAAAC,cAAA,IAAA,CACE4sC,KAAI,qDAAAnpC,OAAuDW,OAAOs8B,SAASmM,SAA6E,sEACxJ/1B,OAAO,SACPg2B,IAAI,uBAEJ/sC,EAAAC,cAAA,OAAA,CAAMgB,UAAU,mBAAmB2rC,GACnC5sC,EAAAC,cAAA,MAAA,CACEC,MAAM,KACNC,OAAO,KACP,aAAW,UACXmM,KAAK,MACL3B,GAAG,UACHrK,MAAM,6BACNF,QAAQ,kBAERJ,EAAAC,cAAA,OAAA,KACED,EAAAC,cAAQ,QAAA,KAAA,2DAEVD,EAAAC,cAAA,OAAA,CACEgB,UAAU,QACVV,EAAE,qOAEJP,EAAAC,cAAA,OAAA,CAAMgB,UAAU,QAAQ2W,EAAE,UAAUC,EAAE,SAAS3X,MAAM,QAAQC,OAAO,QAAQ6sC,GAAG,MAAMC,GAAG,QACxFjtC,EAAAC,cAAA,OAAA,CACEgB,UAAU,QACVV,EAAE,yJAEJP,EAAAC,cAAA,OAAA,CACEgB,UAAU,QACVV,EAAE,qOAEJP,EAAAC,cAAA,OAAA,CACEgB,UAAU,QACVV,EAAE,k0BAEJP,EAAAC,cAAA,OAAA,CACEgB,UAAU,QACVV,EAAE,sqBAEJP,EAAAC,cAAA,OAAA,CACEgB,UAAU,QACVV,EAAE,uqBAEJP,EAAAC,cAAA,OAAA,CACEgB,UAAU,QACVV,EAAE,82BAEJP,EAAAC,cAAA,OAAA,CACEgB,UAAU,QACVV,EAAE,4zBAKZ,CCzCA,SAAS2sC,GAAY5qC,GACnB,OACEtC,EAAAC,cAAA,MAAA,CAAKC,MAAM,KAAKC,OAAO,KAAK,aAAYmC,EAAM6qC,UAAW/sC,QAAQ,YAAYkM,KAAK,OAChFtM,EAAAC,cAAA,IAAA,CAAGI,KAAK,OAAOgB,OAAO,eAAeE,cAAc,QAAQC,eAAe,QAAQF,YAAY,OAC3FgB,EAAM2B,UAIf,CAEO,SAASmpC,GAAMzsC,GAAyE,IAAAyB,EAAAzB,EAAtE0B,aAAAA,OAAYvB,IAAAsB,EAAG,CAAA,EAAEA,EAAAirC,EAAA1sC,EAAE2sC,cAAAA,OAAgBxsC,IAAHusC,GAAQA,EAC/DE,EAWIlrC,EAVFmrC,WAAAA,OAAa1sC,IAAHysC,EAAG,SAAQA,EAAAE,EAUnBprC,EATFqrC,mBAAAA,OAAqB5sC,IAAH2sC,EAAG,YAAWA,EAAAE,EAS9BtrC,EARFurC,mBAAAA,OAAqB9sC,IAAH6sC,EAAG,kBAAiBA,EAAAE,EAQpCxrC,EAPFyrC,aAAAA,OAAehtC,IAAH+sC,EAAG,WAAUA,EAAAE,EAOvB1rC,EANF2rC,uBAAAA,OAAyBltC,IAAHitC,EAAG,WAAUA,EAAAE,EAMjC5rC,EALF6rC,yBAAAA,OAA2BptC,IAAHmtC,EAAG,aAAYA,EAAAE,EAKrC9rC,EAJF+rC,UAAAA,OAAYttC,IAAHqtC,EAAG,QAAOA,EAAAE,EAIjBhsC,EAHFisC,iBAAAA,OAAmBxtC,IAAHutC,EAAG,iBAAgBA,EAAAE,EAGjClsC,EAFFmsC,kBAAAA,OAAoB1tC,IAAHytC,EAAG,aAAYA,EAAA5B,EAE9BtqC,EADFuqC,cAAAA,OAAgB9rC,IAAH6rC,EAAG,aAAYA,EAG9B,OACE3sC,EAAAC,cAAAD,EAAA6D,SAAA,KACE7D,EAAAC,cAAA,MAAA,CAAKgB,UAAU,kBACbjB,EAAAC,cAACysC,GAAW,CAACrqC,aAAc,CAAEuqC,cAAAA,MAE/B5sC,EAAAC,cAAA,KAAA,CAAIgB,UAAU,sBACZjB,EAAAC,cACED,KAAAA,KAAAA,EAAAC,cAAA,MAAA,CAAKgB,UAAU,0BACbjB,EAAAC,cAACitC,GAAW,CAACC,UAAWe,GACtBluC,EAAAC,cAAA,OAAA,CAAMM,EAAE,aACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,qBAGZP,EAAAC,cAAA,MAAA,CAAKgB,UAAU,0BACbjB,EAAAC,cAACitC,GAAW,CAACC,UAAWa,GACtBhuC,EAAAC,cAAA,OAAA,CAAMM,EAAE,kBACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,eAGZP,EAAAC,cAAA,OAAA,CAAMgB,UAAU,mBAAmB6sC,IAErC9tC,EAAAC,cAAA,KAAA,KACED,EAAAC,cAAA,MAAA,CAAKgB,UAAU,0BACbjB,EAAAC,cAACitC,GAAW,CAACC,UAAWO,GACtB1tC,EAAAC,cAAA,WAAA,CAAUwuC,OAAO,mBACjBzuC,EAAAC,cAAA,OAAA,CAAMM,EAAE,8BAGZP,EAAAC,cAAA,OAAA,CAAMgB,UAAU,mBAAmBqsC,EAAgBM,EAAqBJ,IAE1ExtC,EAAAC,cACED,KAAAA,KAAAA,EAAAC,cAAA,MAAA,CAAKgB,UAAU,0BACbjB,EAAAC,cAAA,OAAA,CAAMgB,UAAU,wBAAuB,QAEzCjB,EAAAC,cAAA,OAAA,CAAMgB,UAAU,kBAAkB,aAAYutC,GAC3ClB,EAAgBgB,EAAmBF,KAMhD,CCnFO,SAASM,GAAG/tC,GAA2C,IAAxCg2B,EAAGh2B,EAAHg2B,IAAK1yB,EAAQtD,EAARsD,SACzB,OAAOjE,EAAAC,cAAA,IAAA,CAAG4sC,KAAMlW,EAAIxf,KAAMlT,EAC5B,CCTO,SAAS0qC,GAAWhuC,GAAqD,IAAlDM,EAASN,EAATM,UAC5B,OACEjB,EAAAC,cAAA,MAAA,CAAKG,QAAQ,YAAYa,UAAWA,EAAWI,OAAO,eAAeutC,cAAc,MACjF5uC,EAAAC,cAAA,IAAA,CAAGI,KAAK,OAAOwuC,SAAS,WACtB7uC,EAAAC,cAAA,IAAA,CAAGqiC,UAAU,iBAAiBhhC,YAAY,KACxCtB,EAAAC,cAAA,SAAA,CAAQ2uC,cAAc,KAAK1tC,GAAG,KAAKC,GAAG,KAAKC,EAAE,OAC7CpB,EAAAC,cAAA,OAAA,CAAMM,EAAE,+BACNP,EAAAC,cAAA,mBAAA,CACE6uC,cAAc,YACdlrC,KAAK,SACL2S,KAAK,UACLw4B,GAAG,YACHC,IAAI,KACJC,YAAY,kBAO1B,CCpBO,SAASC,KACd,OACElvC,EAAAC,cAAA,MAAA,CACEC,MAAM,KACNC,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLgB,OAAO,eACPC,YAAY,MACZC,cAAc,QACdC,eAAe,QACfP,UAAU,+BAEVjB,EAAAC,cAAA,OAAA,CAAMM,EAAE,gQACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,YACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,aACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,YACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,YAGd,CCpBO,SAAS4uC,KACd,OACEnvC,EAAAC,cAAA,MAAA,CAAKC,MAAM,KAAKC,OAAO,KAAKC,QAAQ,aAClCJ,EAAAC,cAAA,IAAA,CAAGoB,OAAO,eAAehB,KAAK,OAAOwuC,SAAS,UAAUttC,cAAc,QAAQC,eAAe,SAC3FxB,EAAAC,cAAA,OAAA,CAAMM,EAAE,gEACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,uDAIhB,CCTO,SAAS6uC,KACd,OACEpvC,EAAAC,cAAA,MAAA,CAAKC,MAAM,KAAKC,OAAO,KAAKC,QAAQ,aAClCJ,EAAAC,cAAA,OAAA,CACEM,EAAE,gFACFc,OAAO,eACPhB,KAAK,OACLwuC,SAAS,UACTttC,cAAc,QACdC,eAAe,UAIvB,CCbO,SAAS6tC,KACd,OACErvC,EAAAC,cAAA,MAAA,CACEC,MAAM,KACNC,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLwuC,SAAS,UACTxtC,OAAO,eACPE,cAAc,QACdC,eAAe,QACfF,YAAY,IACZL,UAAU,2DAEVjB,EAAAC,cAAA,OAAA,CAAMM,EAAE,6EACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,YACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,eAGd,CCnBO,SAAS+uC,KACd,OACEtvC,EAAAC,cAAA,MAAA,CAAKgB,UAAU,4BAA4Bf,MAAM,KAAKC,OAAO,KAAKC,QAAQ,aACxEJ,EAAAC,cAAA,IAAA,CAAGoB,OAAO,eAAehB,KAAK,OAAOwuC,SAAS,UAAUttC,cAAc,QAAQC,eAAe,SAC3FxB,EAAAC,cAAA,OAAA,CAAMM,EAAE,0BACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,oBAIhB,CCTA,IAAMgvC,GAAoB,WACxB,OACEvvC,EAAAC,cAAA,MAAA,CACEK,MAAM,6BACNJ,MAAM,KACNC,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLgB,OAAO,eACPC,YAAY,MACZC,cAAc,QACdC,eAAe,SAEfxB,EAAAC,cAAA,OAAA,CAAMM,EAAE,+DACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,4BACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,YACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,aACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,aAGd,EAEO,SAASivC,GAAWltC,GACzB,OAAQA,EAAMsB,MACZ,IAAK,OACH,OAAO5D,EAAAC,cAACsvC,SACV,IAAK,UACH,OAAOvvC,EAAAC,cAACwvC,SACV,QACE,OAAOzvC,EAAAC,cAACyvC,SAEd,CAEA,SAASA,KACP,OACE1vC,EAAAC,cAAA,MAAA,CACEK,MAAM,6BACNJ,MAAM,KACNC,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLgB,OAAO,eACPE,cAAc,QACdC,eAAe,SAEfxB,EAAAC,cAAA,OAAA,CAAM0vC,GAAG,IAAIC,GAAG,KAAKC,GAAG,IAAIC,GAAG,MAC/B9vC,EAAAC,cAAA,OAAA,CAAM0vC,GAAG,IAAIC,GAAG,KAAKC,GAAG,KAAKC,GAAG,OAChC9vC,EAAAC,cAAA,OAAA,CAAM0vC,GAAG,KAAKC,GAAG,IAAIC,GAAG,IAAIC,GAAG,OAC/B9vC,EAAAC,cAAA,OAAA,CAAM0vC,GAAG,KAAKC,GAAG,KAAKC,GAAG,IAAIC,GAAG,OAGtC,CAEA,SAASL,KACP,OACEzvC,EAAAC,cAAA,MAAA,CAAKC,MAAM,KAAKC,OAAO,KAAKC,QAAQ,aAClCJ,EAAAC,cAAA,OAAA,CACEM,EAAE,kCACFc,OAAO,eACPhB,KAAK,OACLwuC,SAAS,UACTrtC,eAAe,UAIvB,CCjEO,SAASuuC,KACd,OACE/vC,EAAAC,cAAA,MAAA,CAAKC,MAAM,KAAKC,OAAO,KAAKC,QAAQ,aAClCJ,EAAAC,cAAA,OAAA,CACEM,EAAE,+DACFc,OAAO,eACPhB,KAAK,OACLwuC,SAAS,UACTrtC,eAAe,UAIvB,CCZO,SAASwuC,KACd,OACEhwC,EAAAC,cAAA,MAAA,CACEC,MAAM,KACNC,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLwuC,SAAS,UACTxtC,OAAO,eACPE,cAAc,QACdC,eAAe,SAEfxB,EAAAC,cAAA,OAAA,CAAMM,EAAE,2KAGd,CCfO,SAAS0vC,KACd,OACEjwC,EAAAC,cAAA,MAAA,CACEK,MAAM,6BACNJ,MAAM,KACNC,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLgB,OAAO,UACPC,YAAY,MACZC,cAAc,QACdC,eAAe,SAEfxB,EAAAC,cAAA,OAAA,CAAMM,EAAE,kBACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,iBACRP,EAAAC,cAAA,SAAA,CAAQiB,GAAG,KAAKC,GAAG,KAAKC,EAAE,MAC1BpB,EAAAC,cAAA,OAAA,CAAMM,EAAE,mBAGd,CCDA,OAAM2vC,GAA0D,CAC9DC,OAAQ,gBACR1lC,UAAW,KACX2lC,cAAe,QACfC,MAAO,IAGF,SAASC,GAAqB3vC,GAIc,IAHjD+gC,EAAO/gC,EAAP+gC,QACAr/B,EAAY1B,EAAZ0B,aACAkuC,EAAkB5vC,EAAlB4vC,mBAGA,GAAuB,IAAnB7O,EAAQj5B,OAAc,OAAO,KAGjC,GAAmD,mBAAxCpG,EAAamuC,uBACtB,OAAOxwC,EAAAC,cAAAD,EAAA6D,SAAA,KAAGxB,EAAamuC,uBAAuB9O,EAAS6O,IAIzD,IAIA7c,GAJcrxB,EAAaouC,uBACvBpuC,EAAaouC,uBAAuB/O,GACpCwO,KAEoF,CAAE,EAAAQ,EAAAhd,EAAlFyc,OAAAA,OAASrvC,IAAH4vC,EAAG,GAAEA,EAAAC,EAAAjd,EAAEjpB,UAAAA,OAAY3J,IAAH6vC,EAAG,KAAIA,EAAAC,EAAAld,EAAE0c,cAAAA,OAAgBtvC,IAAH8vC,EAAG,QAAOA,EAAAC,EAAAnd,EAAE2c,MAAAA,OAAQvvC,IAAH+vC,EAAG,GAAEA,EAE1E,OACE7wC,EAAAC,cAAA,MAAA,CAAKgB,UAAU,oEACbjB,EAAAC,cAACS,EAAU,CAACG,KAAM,KAClBb,EAAAC,cACGkwC,OAAAA,KAAAA,GAAUnwC,EAAAC,0BAAOkwC,GACjBzO,EAAQ5zB,KAAI,SAACgjC,EAAGC,GAAG,OAElB/wC,EAAAC,cAAC4D,WAAQ,CAACb,IAAK8tC,EAAIC,GACjB/wC,EAAAC,cAAA,OAAA,CACEqM,KAAK,SACL0kC,SAAU,EACV/vC,UAAU,kDACVumC,UAAW,SAAC9iC,GACI,UAAVA,EAAE1B,KAA6B,MAAV0B,EAAE1B,MACzB0B,EAAEspB,iBACFuiB,EAAmBO,GAErB,EACFxI,QAAS,WAAF,OAAQiI,EAAmBO,EAAE,GACrC,IACQA,EAAE,KAEVC,EAAMrP,EAAQj5B,OAAS,GAAKgC,EAC5BsmC,IAAQrP,EAAQj5B,OAAS,GAAK2nC,MAGlCC,GAASrwC,EAAAC,cAAOowC,OAAAA,KAAAA,IAIzB,CCxEO,SAASY,KACd,MAAO,CACLjhC,OAAO,EACPkhC,QAAQ,EACRC,WAAY,KACZC,KAAK,EACLC,MAAO,KACPC,UAAU,EACVC,SAAU,KACVC,QAAQ,EACRC,UAAW,KACXC,WAAY,KAEhB,CAEO,IAAIC,GAdF,CACL3hC,OAAO,EACPkhC,QAAQ,EACRC,WAAY,KACZC,KAAK,EACLC,MAAO,KACPC,UAAU,EACVC,SAAU,KACVC,QAAQ,EACRC,UAAW,KACXC,WAAY,MAMT,SAASE,GAAeC,GAC7BF,GAAYE,CACd,2ysEAlBS,CACL7hC,OAAO,EACPkhC,QAAQ,EACRC,WAAY,KACZC,KAAK,EACLC,MAAO,KACPC,UAAU,EACVC,SAAU,KACVC,QAAQ,EACRC,UAAW,KACXC,WAAY,qmLCZhB,SAASI,GAAWC,GAClB,OAAOA,EACJrU,QAAQ,KAAM,SACdA,QAAQ,KAAM,QACdA,QAAQ,KAAM,QACdA,QAAQ,KAAM,UACdA,QAAQ,KAAM,QACnB,mhBAEA,IAAM6T,GAAW,IAAIS,GAAOC,SAE5BV,GAASplC,KAAO,SAAAxL,GAAuD,IAApDkG,EAAIlG,EAAJkG,KAAIqrC,EAAAvxC,EAAEwxC,KAAAA,OAAOrxC,IAAHoxC,EAAG,GAAEA,EAAEE,EAAOzxC,EAAPyxC,QAC5BC,EAAgBF,EAAI,YAAAzuC,OAAeyuC,GAAS,GAC5CG,EAAWF,EAAUvrC,EAAOirC,GAAWjrC,GACvC0rC,EAAcC,mBAAmB3rC,GAOvC,MAAA,gHAAAnD,OAEkE6uC,+BAAW7uC,OAN0S,qWAMnQA,OAJoK,uWAIrJA,OAC3G2uC,EAAa3uC,MAAAA,OAAK4uC,EAAQ,gCAGpD,EAGAf,GAASkB,KAAO,SAAA/e,GAAgD,IAA7CmZ,EAAInZ,EAAJmZ,KAAM6F,EAAKhf,EAALgf,MAAO7rC,EAAI6sB,EAAJ7sB,KACxB8rC,EAAYD,EAAKhvC,WAAAA,OAAcouC,GAAWY,GAAM,KAAM,GACtDE,EAAW/F,EAAOiF,GAAWjF,GAAQ,GACrCgG,EAAcf,GAAWjrC,GAC/B,MAAAnD,YAAAA,OAAmBkvC,EAAQlvC,KAAAA,OAAIivC,EAAS,+CAAAjvC,OAA8CmvC,EAAW,OACnG,EAEO,IAAMC,GAAmBC,EAAAA,MAC9B,SAAA1vC,GAUM,IATJoJ,EAAOpJ,EAAPoJ,QACAumC,EAAc3vC,EAAd2vC,eACAC,EAAoB5vC,EAApB4vC,qBACAC,EAAW7vC,EAAX6vC,YAOMnB,EAAOztB,EAAAA,SACX,WAAA,OACE0tB,GAAO7pC,MAAMsE,EAAS,CACpB2kC,KAAK,EACLF,QAAQ,EACRK,SAAAA,OAEJ,CAAC9kC,IAIG0mC,EAAe/vB,EAAMA,OAAiB,MAgD5C,OA7CAzhB,EAAAA,WAAU,WACR,IAAMkgC,EAAYsR,EAAazvB,QAC/B,GAAKme,EAsCL,OApCgBt1B,MAAMgK,KAAKsrB,EAAUuR,iBAAoC,sCAEjE5gB,SAAQ,SAAC6gB,GACf,IAAM1Q,EAAQ0Q,EAAI1I,cAA2B,2CACzChI,IAAOA,EAAM2Q,YAAcN,GAG/BK,EAAIE,UAAUC,OAAO,2CACvB,IAyBA3R,EAAUv9B,iBAAiB,QAASmvC,GAG7B,WACL5R,EAAUp9B,oBAAoB,QAASgvC,EACxC,EA5BD,SAASA,EAAY3lB,GAAyB,IAAA4lB,EAEtCL,EADWvlB,EAAM/W,OACF48B,QAA2B,qCAChD,GAAKN,EAAL,CAEA,IAAMO,EAAuCF,QAAhCA,EAAGL,EAAIQ,aAAa,oBAAYH,IAAAA,EAAAA,EAAI,GACjDxwC,UAAU4wC,UAAUC,UAAUC,mBAAmBJ,IAAUv1B,OAAM,WAC/D,IAGF,IAAMskB,EAAQ0Q,EAAI1I,cAA2B,2CAC7C,GAAKhI,EAAL,CAEA0Q,EAAIE,UAAUzY,IAAI,4CAClB,IAAMmZ,EAAWjB,EACjBrQ,EAAM2Q,YAAcL,EAEpB33B,YAAW,WACT+3B,EAAIE,UAAUC,OAAO,4CACrB7Q,EAAM2Q,YAAcW,CACrB,GAAE,KATS,CARF,CAkBZ,CAQD,GAAE,CAAClC,EAAMiB,EAAgBC,IAGxBjzC,EAAAC,cAAA,MAAA,CACEkC,IAAKgxC,EACLlyC,UAAS,8BAAAyC,OAAgCwvC,EAAc,wCAA0C,IACjGgB,wBAAyB,CAAEC,OAAQpC,IAGzC,IAEFe,GAAiBsB,YAAc,2CCxD/B,SAASC,GAAiB1zC,GAA0D,IAAvD2zC,EAAc3zC,EAAd2zC,eAC3B,OAAOt0C,EAAAC,cAAA,IAAA,CAAGgB,UAAU,oCAAoCqzC,EAC1D,CAaA,SAASC,GAAiB7gB,GASc,IARtC8gB,EAAQ9gB,EAAR8gB,SACAC,EAAgB/gB,EAAhB+gB,iBACAC,EAAchhB,EAAdghB,eACAC,EAAajhB,EAAbihB,cACApE,EAAkB7c,EAAlB6c,mBACAluC,EAAYqxB,EAAZrxB,aACAuyC,EAAalhB,EAAbkhB,cACAC,EAAUnhB,EAAVmhB,WAEQC,EAAkCN,EAAlCM,YAAaC,EAAqBP,EAArBO,iBAEfC,GAAeN,GAAmBA,GAAoC,UAAlBC,GAA6BnX,QAAQuX,GAEzFE,EAAgBj1C,EAAMskB,SAAQ,WAAA,OCzF/B,SAA8Bzd,GASnC,IAPA,IAMIigC,EANEoO,EAAoB,wCACpBC,EAAW,sBACXC,EAAgD,GAChDC,EAAO,IAAIppC,IAIiC,QAA1C66B,EAAQoO,EAAkBI,KAAKzuC,KAAiB,CACtD,IAAIsQ,EAAM2vB,EAAM,GACV4L,EAAQ5L,EAAM,GAEpB3vB,EAAMA,EAAIumB,QAAQ,aAAc,IAC3B2X,EAAK18B,IAAIxB,KACZi+B,EAAMzrC,KAAK,CAAEwN,IAAAA,EAAKu7B,MAAAA,IAClB2C,EAAKva,IAAI3jB,GAEb,CAGA,KAAyC,QAAjC2vB,EAAQqO,EAASG,KAAKzuC,KAAiB,CAC7C,IAAIsQ,EAAM2vB,EAAM,GAChB3vB,EAAMA,EAAIumB,QAAQ,aAAc,IAC3B2X,EAAK18B,IAAIxB,KACZi+B,EAAMzrC,KAAK,CAAEwN,IAAAA,IACbk+B,EAAKva,IAAI3jB,GAEb,CAEA,OAAOi+B,CACT,CD0D4CG,EAAqBR,aAAAA,EAAAA,EAAkBtoC,UAAW,MAAK,CAACsoC,IAE5FS,EAAex1C,EAAMskB,SAAQ,WACjC,OAAK/X,MAAMC,QAAQuoC,aAAAA,EAAAA,EAAkB1jC,OExFlC,SAAiEA,GAGtE,IAFA,IAAMokC,EAAqD,GAElD7qC,EAAI,EAAGA,EAAIyG,EAAM5I,OAAQmC,IAAK,CAAA,IAAA8qC,EAAAC,EAC/B5nC,EAAYsD,EAAMzG,GAExB,GACiB,qBAAfmD,aAAAA,EAAAA,EAAMnK,OAC4B,yBAAlC8xC,EAAA3nC,EAAKkD,sBAAcnQ,IAAA40C,OAAA50C,EAAnB40C,EAAqBxnC,WACU,YAAZ,QAAnBynC,EAAA5nC,EAAKkD,sBAAL0kC,IAAmBA,OAAnBA,EAAAA,EAAqBxhC,OACrB,CAIA,IAFA,IAAMutB,EAAoB,GACtBkU,EAAIhrC,EACDgrC,EAAIvkC,EAAM5I,QAAQ,CAAA,IAAAotC,EAAAC,EACjBC,EAAiB1kC,EAAMukC,GAC7B,GACsB,qBAApBG,aAAAA,EAAAA,EAAWnyC,OAC4B,yBAAvCiyC,EAAAE,EAAU9kC,sBAAcnQ,IAAA+0C,OAAA/0C,EAAxB+0C,EAA0B3nC,WACU,YAAZ,QAAxB4nC,EAAAC,EAAU9kC,sBAAV6kC,IAAwBA,OAAxBA,EAAAA,EAA0B3hC,OAS1B,MARA,IAAA6hC,EACMlF,IAA6B,QAAxBkF,EAAAD,EAAU9kC,sBAAcnQ,IAAAk1C,GAAM,QAANA,EAAxBA,EAA0B7nC,YAAIrN,IAAAk1C,OAAAl1C,EAA9Bk1C,EAAgC9W,QAAS,IAAI+W,OAEpDnF,GACFpP,EAAQ/3B,KAAKmnC,GAEf8E,GAIJ,CAEIlU,EAAQj5B,OAAS,EACnBgtC,EAAgB9rC,KAAK,CAAE/F,KAAM,uBAAwB89B,QAAAA,IACzB,IAAnBA,EAAQj5B,QAEjBgtC,EAAgB9rC,KAAKoE,GAGvBnD,EAAIgrC,EAAI,CACV,MACEH,EAAgB9rC,KAAKoE,EAEzB,CAEA,OAAO0nC,CACT,CF6CWS,EAA4BnB,aAAAA,EAAAA,EAAkB1jC,QAAS,IAFrD0jC,SAAAA,EAAkBtoC,QAAU,CAACsoC,aAAAA,EAAAA,EAAkBtoC,SAAW,EAGrE,GAAG,CAACsoC,IAEJ,OACE/0C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,4CACbjB,EAAAC,cAAA,MAAA,CAAKgB,UAAU,kCACbjB,EAAAC,cAAA,MAAA,CAAKgB,UAAU,qEACbjB,EAAAC,cAAA,IAAA,CAAGgB,UAAU,+BAA+B6zC,EAAYroC,UAE1DzM,EAAAC,cAAA,MAAA,CAAKgB,UAAU,0EACbjB,EAAAC,cAAA,MAAA,CAAKgB,UAAU,wCACM,UAAlB0zC,GAA6BF,GAAoBC,GAChD10C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,oEACbjB,EAAAC,cAACovC,GAAW,MACZrvC,EAAAC,cAAIw0C,IAAAA,KAAAA,EAAiBpvC,UAGN,cAAlBsvC,GAAiCD,GAChC10C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,kDACbjB,EAAAC,cAAA,OAAA,CAAMgB,UAAU,WAAWoB,EAAa8zC,cAAgB,gBAG3D5pC,MAAMC,QAAQgpC,GACXA,EAAa1nC,KAAI,SAACC,EAAMgjC,GAAQ,IAAAqF,EAAAC,EAAAC,EACxBpiC,EAAQ68B,EAEd,GAAoB,iBAAThjC,EACT,OACE/N,EAAAC,cAAC6yC,GAAgB,CACf9vC,IAAKkR,EACLzH,QAASsB,EACTilC,eAAgB3wC,EAAa2wC,gBAAkB,OAC/CC,qBAAsB5wC,EAAa4wC,sBAAwB,UAC3DC,YAA+B,cAAlByB,IAMnB,GAAI5mC,GAA+B,yBAAtBA,EAAanK,KACxB,OACE5D,EAAAC,cAACqwC,GAAqB,CACpBttC,IAAKkR,EACLwtB,QAAU3zB,EAAa2zB,QACvBr/B,aAAcA,EACdkuC,mBAAoBA,IAK1B,GAAkB,cAAdxiC,EAAKnK,MAA4D,KAApCmxC,SAAuB,QAAPqB,EAAhBrB,EAAkB1jC,aAAKvQ,IAAAs1C,OAAAt1C,EAAvBs1C,EAAyB3tC,QACxD,OACEzI,EAAAC,cAAA,MAAA,CAAK+C,IAAKkR,EAAOjT,UAAU,0DACzBjB,EAAAC,cAAA,OAAA,CAAMgB,UAAU,WAAU,iBAKhC,GAAkB,SAAd8M,EAAKnK,KACP,OACE5D,EAAAC,cAAC6yC,GAAgB,CACf9vC,IAAKkR,EACLzH,QAASsB,EAAKlH,KACdmsC,eAAgB3wC,EAAa2wC,gBAAkB,OAC/CC,qBAAsB5wC,EAAa4wC,sBAAwB,UAC3DC,YAA+B,cAAlByB,IAInB,GAAkB,oBAAd5mC,EAAKnK,KAA4B,CACnC,IAAQqN,EAAmBlD,EAAnBkD,eACR,GAAgC,gBAA5BA,EAAe/C,SACjB,OAAQ+C,EAAekD,OACrB,IAAK,eACH,OACEnU,EAAAC,cAAA,MAAA,CACE+C,IAAKkR,EACLjT,UAAU,uEAEVjB,EAAAC,cAAC0uC,GAAW,CAAC1tC,UAAU,6CACvBjB,EAAAC,cAAA,OAAA,KAAOoC,EAAak0C,iBAAmB,iBAG7C,IAAK,OACH,OACEv2C,EAAAC,cAAA,MAAA,CAAK+C,IAAKkR,EAAOjT,UAAU,gEACzBjB,EAAAC,cAAC0uC,GAAW,CAAC1tC,UAAU,6CACvBjB,EAAAC,cAAAyD,OAAAA,KAAAA,GAAAA,OACMrB,EAAam0C,oBAAsB,uBAAgB9yC,gBAAK2yC,EAAAplC,EAAe9C,YAAIrN,IAAAu1C,OAAAv1C,EAAnBu1C,EAAqBnX,QAAS,GAAE,WAIpG,IAAK,SACH,OACEl/B,EAAAC,cAAA,MAAA,CAAK+C,IAAKkR,EAAOjT,UAAU,0DACzBjB,EAAAC,cAACS,EAAU,CAACG,KAAM,KAClBb,EAAAC,cAAA,OAAA,KAAA,GAAAyD,OACMrB,EAAao0C,mBAAqB,gBAAkB,IACxDz2C,EAAAC,cAAA,OAAA,CACEqM,KAAK,SACL0kC,SAAU,EACV/vC,UAAU,kDACVumC,UAAW,SAAC9iC,GAC8B,IAAAgyC,EAA1B,UAAVhyC,EAAE1B,KAA6B,MAAV0B,EAAE1B,MACzB0B,EAAEspB,iBACFuiB,GAAsCmG,QAAnBA,EAAAzlC,EAAe9C,gBAAIuoC,SAAnBA,EAAqBxX,QAAS,IAEnD,EACFoJ,QAAS,WAAF,IAAAqO,EAAA,OAAQpG,GAAsCoG,QAAnBA,EAAA1lC,EAAe9C,gBAAIwoC,SAAnBA,EAAqBzX,QAAS,GAAG,GAElE,IAAI,KACqB,QAAnBoX,EAAArlC,EAAe9C,YAAfmoC,IAAmBA,OAAnBA,EAAAA,EAAqBpX,QAAS,GAAG,OAKlD,QACE,OAAO,KAIb,OACEl/B,EAAAC,cAAA,OAAA,CAAM+C,IAAKkR,EAAOjT,UAAU,0BACzBoB,EAAa8zC,cAAgB,cAGpC,CAEA,OAAO,IACR,IACDpB,aAAAA,EAAAA,EAAkBtoC,UAG1BzM,EAAAC,cAAA,MAAA,CAAKgB,UAAU,uCACbjB,EAAAC,cAAC22C,GAAwB,CACvBjsC,IAAImqC,aAAWh0C,EAAXg0C,EAAanqC,KAAM6pC,EAAS7pC,GAChCqqC,YAAaA,EACb6B,+BAA+B9B,eAAAA,EAAkBtoC,UAAW,KAC5DpK,aAAcA,EACduyC,cAAeA,EACfC,WAAYA,MAMjBI,EAAcxsC,OAAS,EACtBzI,EAAAC,cAAC62C,GAAiB,CAAC7B,cAAeA,EAAe8B,mBAAoB10C,EAAa00C,qBAChF,KAGV,CAWA,SAASH,GAAwBvzC,GAOqB,IANpDsH,EAAEtH,EAAFsH,GACAqqC,EAAW3xC,EAAX2xC,YACA6B,EAA6BxzC,EAA7BwzC,8BACAx0C,EAAYgB,EAAZhB,aACAuyC,EAAavxC,EAAbuxC,cACAC,EAAUxxC,EAAVwxC,WAGMmC,EAAkBh3C,EAAMskB,SAAQ,WAAM,IAAA2yB,EAAAC,EACpC7xC,EAA8B,QAAvB4xC,EAAGrC,EAAcuC,cAAMr2C,IAAAm2C,OAAAn2C,EAApBm2C,EAAAztC,KAAAorC,EAAuBjqC,GACvC,OAAwBusC,QAAxBA,EAAO7xC,aAAAA,EAAAA,EAAS+xC,gBAAQF,IAAAA,EAAAA,EAAI,IAC9B,GAAG,CAACtC,EAAejqC,IAEuE0sC,EAAAv0C,EAA1D9C,EAAM+C,SAAoCi0C,GAAgB,GAAnFI,EAAQC,EAAA,GAAEC,EAAWD,EAAA,GACqBE,EAAAz0C,EAArB9C,EAAM+C,UAAS,GAAM,GAA1Cy0C,EAAMD,EAAA,GAAEE,EAASF,EAAA,GACgDG,EAAA50C,EAAlC9C,EAAM+C,SAAuB,MAAK,GAAjE40C,EAAWD,EAAA,GAAEE,EAAcF,EAAA,GAE5BG,EAAc,WAAA,IAAA7zC,EAAAwnC,EAAAC,IAAAC,MAAG,SAAAC,EAAOvkC,GAAyB,OAAAqkC,IAAApkC,MAAA,SAAAwkC,GAAA,cAAAA,EAAA1xB,KAAA0xB,EAAAjjC,MAAA,KAAA,EAAA,IACjD4uC,EAAM,CAAA3L,EAAAjjC,KAAA,EAAA,KAAA,CAAA,OAAAijC,EAAAG,OAAA,UAAA,KAAA,EAEM,OADhB4L,EAAe,MACfH,GAAU,GAAM5L,EAAA1xB,KAAA,EAAA0xB,EAAAjjC,KAAA,EAERisC,aAAU/zC,EAAV+zC,EAAalqC,EAAc,SAAVvD,EAAmB,EAAI,GAAE,KAAA,EAChDkwC,EAAYlwC,GAAOykC,EAAAjjC,KAAA,GAAA,MAAA,KAAA,GAAAijC,EAAA1xB,KAAA,GAAA0xB,EAAAiM,GAAAjM,EAAA,MAAA,GAEnB+L,EAAc/L,EAAAiM,IAAiB,KAAA,GAEd,OAFcjM,EAAA1xB,KAAA,GAE/Bs9B,GAAU,GAAO5L,EAAAkM,OAAA,IAAA,KAAA,GAAA,IAAA,MAAA,OAAAlM,EAAAve,OAAA,GAAAqe,EAAA,KAAA,CAAA,CAAA,EAAA,GAAA,GAAA,UAEpB,OAZKkM,SAActnB,GAAA,OAAAvsB,EAAA2kB,MAAAnjB,KAAAgD,UAAA,EAAA,GAcpBwvC,EAII31C,EAHF41C,gBAAAA,OAAkBn3C,IAAHk3C,EAAG,OAAMA,EAAAE,EAGtB71C,EAFF81C,mBAAAA,OAAqBr3C,IAAHo3C,EAAG,UAASA,EAAAE,EAE5B/1C,EADFg2C,sBAAAA,OAAwBv3C,IAAHs3C,EAAG,4BAA2BA,EAGrD,OAAKpD,GAAgB6B,EAKnB72C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,iCACC,OAAbm2C,EACCp3C,EAAAC,cAAAD,EAAA6D,cACG2zC,EACCx3C,EAAAC,cAAC0uC,GAAW,CAAC1tC,UAAU,6CAEvBjB,EAAAC,cAAAD,EAAA6D,SACE7D,KAAAA,EAAAC,cAACq4C,GAAU,CAAC5F,MAAOuF,EAAiB3P,QAAS,WAAF,OAAQuP,EAAe,OAAO,IACzE73C,EAAAC,cAACs4C,GAAa,CAAC7F,MAAOyF,EAAoB7P,QAAS,WAAF,OAAQuP,EAAe,UAAU,KAGrFF,GACC33C,EAAAC,cAAA,IAAA,CAAGgB,UAAU,sCAAsC02C,EAAYtyC,SAAW,qBAI9ErF,EAAAC,cAAA,IAAA,CAAGgB,UAAU,kFACVo3C,GAGLr4C,EAAAC,cAACu4C,GAAU,CACTn2C,aAAcA,EACdimC,QAAS,WAAF,OAAQplC,UAAU4wC,UAAUC,UAAU8C,EAA8B,KA1BxE,IA8BX,CAOA,SAASC,GAAiB5gB,GAA6E,IAA1E+e,EAAa/e,EAAb+e,cAAe8B,EAAkB7gB,EAAlB6gB,mBAC1C,OACE/2C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,wCACbjB,EAAAC,cAAA,IAAA,CAAGgB,UAAU,8CAA8C81C,GAAsB,mBACjF/2C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,6CACZg0C,EAAcxsC,OAAS,GACtBwsC,EAAcnnC,KAAI,SAAC2kC,GAAI,OACrBzyC,EAAAC,cAAA,IAAA,CACE+C,IAAKyvC,EAAKt7B,IACV01B,KAAM4F,EAAKt7B,IACXlW,UAAU,iDACV8V,OAAO,SACPg2B,IAAI,uBAEJ/sC,EAAAC,cAACw4C,GAAmB,MACpBz4C,EAAAC,cAAOwyC,OAAAA,KAAAA,EAAKC,OAASD,EAAKt7B,KAE7B,KAIX,CAEO,SAASuhC,GAAWjf,GAAwE,IAAAkf,EAAAlf,EAArEp3B,aAAAA,OAAYvB,IAAA63C,EAAG,CAAA,EAAEA,EAAKr2C,EAAKC,EAAAk3B,EAAAj3B,IACvDo2C,EAAwGv2C,EAAhGiyC,eAAAA,OAAiBxzC,IAAH83C,EAAG,2EAA0EA,EAE3FnjC,EAAanT,EAAbmT,SAGFojC,EAAwBv0B,EAAAA,SAAQ,WAEpC,IADA,IAAMw0B,EAAsB,GACnBluC,EAAI,EAAGA,EAAI6K,EAAShN,OAAQmC,IACnC,GAAyB,SAArB6K,EAAS7K,GAAG0B,KAAiB,CAAA,IAAAysC,EACzBjE,EAAcr/B,EAAS7K,GACvBmqC,EAA6C,eAAXgE,QAAfA,EAAAtjC,EAAS7K,EAAI,UAAbmuC,IAAeA,OAAfA,EAAAA,EAAiBzsC,MAAuBmJ,EAAS7K,EAAI,GAAK,KACnFkuC,EAAQnvC,KAAK,CAAEgB,GAAImqC,EAAYnqC,GAAImqC,YAAAA,EAAaC,iBAAAA,IAC5CA,GACFnqC,GAEJ,CAEF,OAAOkuC,CACT,GAAG,CAACrjC,IAEEujC,EAAyB,SAAC9Z,GAC9B58B,EAAM22C,eAAc,GACpB32C,EAAMqhC,SAASzE,EAChB,EAED,OACEl/B,EAAAC,cAAA,MAAA,CAAKgB,UAAU,yDACbjB,EAAAC,cAACo0C,GAAiB,CAACC,eAAgBA,IACnCt0C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,8BACbjB,EAAAC,cAAA,MAAA,CAAKgB,UAAU,uCACZ43C,EACE5wC,QACAixC,UACAprC,KAAI,SAAC0mC,EAAUtgC,GAAK,OACnBlU,EAAAC,cAACs0C,GAAiB,CAChBvxC,IAAKwxC,EAAS7pC,GACd6pC,SAAUA,EACVC,iBAAkBnyC,EAAMmyC,iBACxBC,eAA0B,IAAVxgC,EAChBygC,cAAeryC,EAAM6f,OACrB9f,aAAcA,EACduyC,cAAetyC,EAAMsyC,cACrBrE,mBAAoByI,EACpBnE,WAAYvyC,EAAMuyC,YAErB,MAKb,CAEA,SAAS4D,KACP,OACEz4C,EAAAC,cAAA,MAAA,CACEK,MAAM,6BACNJ,MAAM,KACNC,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLgB,OAAO,eACPE,cAAc,QACdC,eAAe,SAEfxB,EAAAC,cAAA,OAAA,CAAM0vC,GAAG,IAAIC,GAAG,KAAKC,GAAG,IAAIC,GAAG,MAC/B9vC,EAAAC,cAAA,OAAA,CAAM0vC,GAAG,IAAIC,GAAG,KAAKC,GAAG,KAAKC,GAAG,OAChC9vC,EAAAC,cAAA,OAAA,CAAM0vC,GAAG,KAAKC,GAAG,IAAIC,GAAG,IAAIC,GAAG,OAC/B9vC,EAAAC,cAAA,OAAA,CAAM0vC,GAAG,KAAKC,GAAG,KAAKC,GAAG,IAAIC,GAAG,OAGtC,CAEA,SAAS0I,GAAU7e,GAMH,IALd2O,EAAO3O,EAAP2O,QACAjmC,EAAYs3B,EAAZt3B,aAKA82C,EAAuE92C,EAA/D+2C,gBAAAA,OAAkBt4C,IAAHq4C,EAAG,OAAMA,EAAAE,EAAuCh3C,EAArC4wC,qBAAAA,OAAuBnyC,IAAHu4C,EAAG,UAASA,EAEnBx2C,EAAAC,EAAfC,EAAQA,UAAC,GAAM,GAAxCu2C,EAAQz2C,EAAA,GAAE02C,EAAW12C,EAAA,GAE5BlB,EAAAA,WAAU,WACR,GAAI23C,EAAU,CACZ,IAAMpyB,EAAQ5L,YAAW,WACvBi+B,GAAY,EACb,GAAE,MACH,OAAO,WAAA,OAAYlyB,aAAaH,EAAM,CACxC,CAEF,GAAG,CAACoyB,IAOJ,OACEt5C,EAAAC,cAAA,SAAA,CACE2D,KAAK,SACL3C,UAAS,uEAAAyC,OACP41C,EAAW,2CAA6C,IAE1DE,SAAUF,EACV5G,MAAO4G,EAAWrG,EAAuBmG,EACzC9Q,QAbgB,WAClBA,IACAiR,GAAY,EACb,GAYID,EACCt5C,EAAAC,cAAA,MAAA,CACEK,MAAM,6BACNJ,MAAM,KACNC,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLgB,OAAO,eACPC,YAAY,MACZC,cAAc,QACdC,eAAe,QACfP,UAAU,yCAEVjB,EAAAC,cAAA,OAAA,CAAMM,EAAE,qBAGVP,EAAAC,cAAA,MAAA,CACEK,MAAM,6BACNJ,MAAM,KACNC,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLgB,OAAO,eACPC,YAAY,MACZC,cAAc,QACdC,eAAe,QACfP,UAAU,uCAEVjB,EAAAC,cAAA,OAAA,CAAMC,MAAM,KAAKC,OAAO,KAAKyX,EAAE,IAAIC,EAAE,IAAIm1B,GAAG,IAAIC,GAAG,MACnDjtC,EAAAC,cAAA,OAAA,CAAMM,EAAE,6DAKlB,CAEA,SAAS+3C,GAAUjhB,GAA0E,IAAvEqb,EAAKrb,EAALqb,MAAOpK,EAAOjR,EAAPiR,QAE3B,OACEtoC,EAAAC,cAAA,SAAA,CACE2D,KAAK,SACL3C,UAAU,sEACVyxC,MAAOA,EACPpK,QAASA,GAETtoC,EAAAC,cAAA,MAAA,CACEK,MAAM,6BACNJ,MAAM,KACNC,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLgB,OAAO,eACPC,YAAY,MACZC,cAAc,QACdC,eAAe,QACfP,UAAU,iDAEVjB,EAAAC,cAAA,OAAA,CAAMM,EAAE,aACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,8JAIhB,CAEA,SAASg4C,GAAa9gB,GAA0E,IAAvEib,EAAKjb,EAALib,MAAOpK,EAAO7Q,EAAP6Q,QAE9B,OACEtoC,EAAAC,cAAA,SAAA,CACE2D,KAAK,SACL3C,UAAU,yEACVyxC,MAAOA,EACPpK,QAASA,GAETtoC,EAAAC,cAAA,MAAA,CACEK,MAAM,6BACNJ,MAAM,KACNC,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLgB,OAAO,eACPC,YAAY,MACZC,cAAc,QACdC,eAAe,QACfP,UAAU,qDAEVjB,EAAAC,cAAA,OAAA,CAAMM,EAAE,aACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,6JAIhB,CGniBO,SAASk5C,GAAW94C,GAAuD,IAAAyB,EAAAzB,EAApD0B,aAAAA,OAAYvB,IAAAsB,EAAG,CAAA,EAAEA,EAC7Cs3C,EACEr3C,EADMs3C,UAAAA,OAAY74C,IAAH44C,EAAG,0BAAyBA,EAAAE,EAC3Cv3C,EAD6Cw3C,SAAAA,OAAW/4C,IAAH84C,EAAG,mDAAkDA,EAE5G,OACE55C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,yBACbjB,EAAAC,cAAA,MAAA,CAAKgB,UAAU,yBACbjB,EAAAC,cAAC+vC,GAAW,OAEdhwC,EAAAC,cAAA,IAAA,CAAGgB,UAAU,mBAAmB04C,GAChC35C,EAAAC,cAAA,IAAA,CAAGgB,UAAU,kBAAkB44C,GAGrC,yBCRO,SAASC,GAAen5C,GAAqE,IAAAyB,EAAAzB,EAAlE0B,aAAAA,OAAYvB,IAAAsB,EAAG,CAAA,EAAEA,EAAKE,EAAKC,EAAA5B,EAAA6B,IAC3Du3C,EAKI13C,EAJF23C,cAAAA,OAAgBl5C,IAAHi5C,EAAG,uBAAsBA,EAAAE,EAIpC53C,EAHF63C,mBAAAA,OAAqBp5C,IAAHm5C,EAAG,oBAAmBA,EAAAE,EAGtC93C,EAFF+3C,yBAAAA,OAA2Bt5C,IAAHq5C,EAAG,4CAA2CA,EAAAE,EAEpEh4C,EADFi4C,6BAAAA,OAA+Bx5C,IAAHu5C,EAAG,eAAcA,EAEzCE,EAA0Cj4C,EAAM6R,MAAMojB,QAAQgjB,kBAEpE,OACEv6C,EAAAC,cAAA,MAAA,CAAKgB,UAAS,uBAAAyC,OAAyBpB,EAAMk4C,eAAiB,iCAAmC,KAC/Fx6C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,yBACbjB,EAAAC,cAACgwC,GAAe,OAElBjwC,EAAAC,cAAA,IAAA,CAAGgB,UAAU,mBACV+4C,EAAc,KAAEh6C,EAAAC,cAASqC,SAAAA,KAAAA,EAAM6R,MAAM+qB,OAAe,KAGtDqb,GAAqBA,EAAkB9xC,OAAS,GAC/CzI,EAAAC,cAAA,MAAA,CAAKgB,UAAU,oCACbjB,EAAAC,cAAA,IAAA,CAAGgB,UAAU,kBAAkBi5C,EAAmB,KAClDl6C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,0CACZs5C,EAAkBtyC,MAAM,EAAG,GAAG8I,QAC7B,SAACglB,EAAK0kB,GAAM,MAAA/2C,GAAAA,OAAA2tB,EACP0E,GACH/1B,CAAAA,EAAAC,cAAA,IAAA,CAAG+C,IAAKy3C,GACNz6C,EAAAC,cAACS,EAAU,CAACG,KAAM,KAClBb,EAAAC,cAAA,SAAA,CACEgB,UAAU,oBACV+B,IAAKy3C,EACL72C,KAAK,SACL0kC,QAAS,WACPhmC,EAAMqhC,SAAS8W,EAAOC,cAAgB,KACtCp4C,EAAMkhC,UACNlhC,EAAMq4C,SAASj3B,QAASsd,OAC1B,GAECyZ,KAED,GAEN,MAMPn4C,EAAMs4C,sBACL56C,EAAAC,cAAA,IAAA,CAAGgB,UAAU,kBAAgB,GAAAyC,OACvB02C,EACJp6C,KAAAA,EAAAC,cAAA,IAAA,CAAG4sC,KAAMvqC,EAAMs4C,qBAAqB,CAAE1b,MAAO58B,EAAM6R,MAAM+qB,QAAUnoB,OAAO,SAASg2B,IAAI,uBACpFuN,IAMb,sCCtEA,SAASO,GAAkB5oB,EAA6B6oB,GAGtD,OAFcA,EAAKlnC,MAAM,KAEZ7C,QAAO,SAACoJ,EAAMuJ,GACzB,OAAIvJ,SAAAA,EAAOuJ,GAAiBvJ,EAAKuJ,GAC1B,IACR,GAAEuO,EACL,CASO,SAAS8oB,GAAOp6C,GAKc,IAJnCg2B,EAAGh2B,EAAHg2B,IACAqkB,EAASr6C,EAATq6C,UAASC,EAAAt6C,EACTu6C,QAAAA,OAAUp6C,IAAHm6C,EAAG,OAAMA,EACbnV,EAAIvjC,EAAA5B,EAAA6B,IAEP,OAAOvC,EAAAA,cAAci7C,EAAO3oB,EAAAA,KACvBuT,GAAI,GAAA,CACPoO,wBAAyB,CACvBC,OAAQ0G,GAAkBlkB,oBAAGjzB,OAAoBs3C,EAAS,YAAaH,GAAkBlkB,EAAKqkB,MAGpG,CCNO,SAASG,GAA0C74C,GACxD,OAAKA,EAAM2sB,YAAgD,IAAlC3sB,EAAM2sB,WAAWC,MAAMzmB,OAIP,UAArCnG,EAAM2sB,WAAWhb,OAAOspB,SAExBv9B,EAAAC,cAAA,UAAA,CAASgB,UAAU,2BACjBjB,EAAAC,mBAAQqC,EAAMmmC,aAAa,CAAEx0B,OAAQ3R,EAAM2sB,WAAWhb,SACpDjU,EAAAC,cAACm7C,GAAWz3C,EAAA,CAACgJ,KAAMrK,EAAM2sB,WAAWC,MAAM,GAAI7sB,aAAcC,EAAMD,cAAkBC,OAMxFA,EAAM2sB,WAAWhb,OAAOspB,SAExBv9B,EAAAC,cAAA,UAAA,CAASgB,UAAU,kBACjBjB,EAAAC,cAAA,MAAA,CAAKgB,UAAU,wBAAwBqB,EAAMowC,OAC7C1yC,EAAAC,cAAQqC,KAAAA,EAAMmmC,aAAa,CAAEx0B,OAAQ3R,EAAM2sB,WAAWhb,SACnD3R,EAAM2sB,WAAWC,MAAMphB,KAAI,SAACnB,EAAMuH,GACjC,OAAOlU,EAAAC,cAACo7C,GAAM13C,EAAA,CAACX,IAAK,CAACV,EAAMowC,MAAO/lC,EAAKojB,UAAU0N,KAAK,KAAM9wB,KAAMA,EAAMuH,MAAOA,GAAW5R,GAC3F,OApBA,IAqCX,CAOA,SAAS+4C,GAAM16C,GASqB,IARlCgM,EAAIhM,EAAJgM,KACAuH,EAAKvT,EAALuT,MACAonC,EAAU36C,EAAV26C,WACAC,EAAY56C,EAAZ46C,aACA7S,EAAY/nC,EAAZ+nC,aACA8S,EAAW76C,EAAX66C,YACAvsB,EAAUtuB,EAAVsuB,WACAwsB,EAAY96C,EAAZ86C,aAEsFpE,EAAAv0C,EAA1D9C,EAAM+C,SAA6C,QAAO,GAA/Eof,EAAMk1B,EAAA,GAAExT,EAASwT,EAAA,GAElBqE,EAAY17C,EAAMojB,OAA4B,MAC9CsrB,EAAM+M,EAiBZ,OACEz7C,EAAAC,cAAA,KAAA0D,EAAA,CACE1C,UAAW,CACT,gBACC0L,EAAyCgvC,oBAAsB,uBACrD,eAAXx5B,GAA2B,4BAChB,aAAXA,GAAyB,2BAExB7Z,OAAOk1B,SACPC,KAAK,KACRme,eAfkB,WAAY,IAAAC,EACf,QAAjBA,EAAAH,EAAUh4B,eAAO5iB,IAAA+6C,GAAjBA,EAAAryC,KAAAkyC,GACAA,EAAUh4B,QAAU,IACrB,GAaOglB,EAAa,CACf/7B,KAAAA,EACAsH,OAAQgb,EAAWhb,OACnBq0B,QAAAA,SAAQxa,GACN0tB,EAAY7uC,EAAMmhB,EACpB,KAGF9tB,EAAAC,cAACyuC,EAAG,CAAC/X,IAAKhqB,GACR3M,EAAAC,cAAA,MAAA,CAAKgB,UAAU,2BACZq6C,EAAW,CAAE3uC,KAAAA,EAAMuH,MAAAA,IAEnBvH,EAAKmvC,UAAUnvC,EAAK/I,OAAuB,SAAd+I,EAAK/I,MACjC5D,EAAAC,cAAA,MAAA,CAAKgB,UAAU,iCACbjB,EAAAC,cAAC86C,GAAO,CAAC95C,UAAU,sBAAsB01B,IAAKhqB,EAAMquC,UAAU,mBAC7DruC,EAAKF,SAAWzM,EAAAC,cAAC86C,GAAO,CAAC95C,UAAU,qBAAqB01B,IAAKhqB,EAAMquC,UAAU,aAInE,UAAdruC,EAAK/I,MACJ5D,EAAAC,cAAA,MAAA,CAAKgB,UAAU,iCACbjB,EAAAC,cAAC86C,GAAO,CAAC95C,UAAU,sBAAsB01B,IAAKhqB,EAAMquC,UAAU,oBAIjEruC,EAAKmvC,UAAUnvC,EAAK/I,QACJ,SAAd+I,EAAK/I,MACU,SAAd+I,EAAK/I,MACS,SAAd+I,EAAK/I,MACS,SAAd+I,EAAK/I,MACS,SAAd+I,EAAK/I,OACL5D,EAAAC,cAAA,MAAA,CAAKgB,UAAU,iCACbjB,EAAAC,cAAC86C,GAAO,CAAC95C,UAAU,sBAAsB01B,IAAKhqB,EAAMquC,UAASt3C,aAAAA,OAAeiJ,EAAK/I,QACjF5D,EAAAC,cAAC86C,GAAO,CAAC95C,UAAU,qBAAqB01B,IAAKhqB,EAAMquC,UAAU,oBAIpD,YAAdruC,EAAK/I,MACJ5D,EAAAC,cAAA,MAAA,CAAKgB,UAAU,iCACbjB,EAAAC,cAAC86C,GAAO,CAAC95C,UAAU,sBAAsB01B,IAAKhqB,EAAMquC,UAAU,YAC9Dh7C,EAAAC,cAAC86C,GAAO,CAAC95C,UAAU,qBAAqB01B,IAAKhqB,EAAMquC,UAAU,oBAIhEO,EAAa,CAAE5uC,KAAAA,EAAMovC,oBAtEF,SAACC,GAC3BnY,EAAU,YACV6X,EAAUh4B,QAAUs4B,CACrB,EAmEkDC,sBAjErB,SAACD,GAC7BnY,EAAU,cACV6X,EAAUh4B,QAAUs4B,CACrB,MAmEH,CAOA,SAASZ,GAAW1nB,GAMqB,IALvC/mB,EAAI+mB,EAAJ/mB,KACA+7B,EAAYhV,EAAZgV,aACA8S,EAAW9nB,EAAX8nB,YACAn5C,EAAYqxB,EAAZrxB,aACA4sB,EAAUyE,EAAVzE,WAE4DitB,GAAlB75C,GAAgB,CAAE,GAApD85C,iBAAAA,OAAmBr7C,IAAHo7C,EAAG,WAAUA,EAErC,OACEl8C,EAAAC,cAAA,KAAA0D,EAAA,CACE1C,UAAU,iBACNynC,EAAa,CACf/7B,KAAAA,EACAsH,OAAQgb,EAAWhb,OACnBq0B,QAAAA,SAAQxa,GACN0tB,EAAY7uC,EAAMmhB,EACpB,KAGF9tB,EAAAC,cAAA,MAAA,CAAKgB,UAAU,wBACbjB,EAAAC,cAAA,MAAA,CAAKgB,UAAU,qDACbjB,EAAAC,cAAA,MAAA,CAAKgB,UAAU,sDACbjB,EAAAC,cAACivC,GAAc,OAEjBlvC,EAAAC,cAAA,MAAA,CAAKgB,UAAU,mCACbjB,EAAAC,cAAA,OAAA,CAAMgB,UAAU,6CAA6Ck7C,GAC7Dn8C,EAAAC,cAAA,OAAA,CAAMgB,UAAU,yCAAyC0L,EAAKuyB,OAAS,OAMnF,CC1MO,SAASkd,GACdxtB,EACAytB,EACAC,GAEA,OAAO1tB,EAAO7d,QAAiC,SAACglB,EAAKppB,GACnD,IAAM3J,EAAMq5C,EAAU1vC,GAYtB,OAVKopB,EAAIxsB,eAAevG,KACtB+yB,EAAI/yB,GAAO,IAKT+yB,EAAI/yB,GAAKyF,QAAU6zC,GAAsB,IAC3CvmB,EAAI/yB,GAAK2G,KAAKgD,GAGTopB,CACR,GAAE,GACL,CCpBO,SAASwmB,GAAiB3kC,GAC/B,OAAOA,CACT,CCEO,SAAS4kC,GAA2D1uB,GAGzE,OAFuD,IAAhCA,EAAqB2uB,QAEpB3uB,EAAMqa,QAAUra,EAAMma,SAAWna,EAAMka,SAAWla,EAAMoa,QAClF,CCRO,SAASpvB,KAA4B,CCE5C,IAAM4jC,GAAqB,qBACrBC,GAAwB79B,OAAO49B,GAAmBzoC,QAEjD,SAAS2oC,GAAoBjmB,GAAkD,IAAAkmB,EAAAC,EAC9EC,EAAuBpmB,EAE7B,IAAKomB,EAAqBpB,qBAAuBhlB,EAAIkM,iBACnD,OAAOlM,EAAImlB,UAAUkB,KAGvB,IAAMA,EAAOD,EAAqBpB,mBACS,QADSkB,EAChDE,EAAqBpB,0BAAkBkB,IAAAA,WAAAA,EAAvCA,EAAyCha,wBAAgB/hC,IAAA+7C,GAAWA,QAAXA,EAAzDA,EAA2Df,iBAA3De,IAAoEA,OAApEA,EAAAA,EAAsEG,KAClD,QADsDF,EAC1EnmB,EAAIkM,wBAAgBia,IAAAA,WAAAA,EAApBA,EAAsBhB,iBAASh7C,IAAAg8C,OAAAh8C,EAA/Bg8C,EAAiCE,KAErC,OAAKA,EAIEA,EAAK51C,OAASu1C,GAAsBx5C,KAAK65C,EAAK51C,OAAS41C,EAAK51C,MAAMs2B,QAAQgf,GAAoB,IAAMM,EAAK51C,MAHvGuvB,EAAImlB,UAAUkB,IAIzB,yBCLO,SAASC,GAAat8C,GAAmE,IAAAyB,EAAAzB,EAAhE0B,aAAAA,OAAYvB,IAAAsB,EAAG,CAAA,EAAEA,EAAKE,EAAKC,EAAA5B,EAAA6B,IACzD,OACExC,EAAAC,cAAA,MAAA,CAAKgB,UAAU,gCACZqB,EAAM6R,MAAM4a,YAAYjhB,KAAI,SAACmhB,GAC5B,GAAgC,IAA5BA,EAAWC,MAAMzmB,OACnB,OAAO,KAGT,IAAMiqC,EAAQkK,GAAoB3tB,EAAWC,MAAM,IAEnD,OACElvB,EAAAC,cAACk7C,GAAOx3C,KACFrB,EAAK,CACTU,IAAKisB,EAAWhb,OAAOspB,SACvBl7B,aAAcA,EACdqwC,MAAOA,EACPzjB,WAAYA,EACZqsB,WAAY,SAAF5nB,GAAA,IAAAwpB,EAAKvwC,EAAI+mB,EAAJ/mB,KAAMuH,EAAKwf,EAALxf,MAAK,OACxBlU,EAAAC,cAAAD,EAAA6D,SACG8I,KAAAA,EAAKgvC,oBACJ37C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,qBAAqBb,QAAQ,aAC1CJ,EAAAC,cAAA,IAAA,CACEoB,OAAO,eACPhB,KAAK,OACLwuC,SAAS,UACTttC,cAAc,QACdC,eAAe,SAEdmL,EAAKgvC,sBAAkDuB,QAAhCA,EAAKjuB,EAAWC,MAAMhb,EAAQ,UAAzBgpC,IAA2BA,OAA3BA,EAAAA,EAA6BvB,oBACxD37C,EAAAC,cAAA,OAAA,CAAMM,EAAE,sBAERP,EAAAC,cAAA,OAAA,CAAMM,EAAE,wBAMhBP,EAAAC,cAAA,MAAA,CAAKgB,UAAU,sBACbjB,EAAAC,cAACuvC,GAAU,CAAC5rC,KAAM+I,EAAK/I,QAG3B,EACF23C,aAAc,WAAF,OACVv7C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,wBACbjB,EAAAC,cAACqvC,GAAU,MACP,IAIb,IAEAhtC,EAAM66C,wBACLn9C,EAAAC,cAAA,UAAA,CAASgB,UAAU,wBACjBjB,EAAAC,cAACqC,EAAM66C,uBAAsB,CAAChpC,MAAO7R,EAAM6R,SAKrD,yBCnDO,SAASipC,GAAWz8C,GAAwE,IAAAyB,EAAAzB,EAArE0B,aAAAA,OAAYvB,IAAAsB,EAAG,CAAA,EAAEA,EAAKE,EAAKC,EAAA5B,EAAA6B,IACvD66C,EAQIh7C,EAPFi7C,oBAAAA,OAAsBx8C,IAAHu8C,EAAG,SAAQA,EAAAE,EAO5Bl7C,EANFm7C,4BAAAA,OAA8B18C,IAAHy8C,EAAG,mBAAkBA,EAAAE,EAM9Cp7C,EALFq7C,8BAAAA,OAAgC58C,IAAH28C,EAAG,kCAAiCA,EAAAE,EAK/Dt7C,EAJFu7C,sBAAAA,OAAwB98C,IAAH68C,EAAG,WAAUA,EAAAE,EAIhCx7C,EAHFy7C,gCAAAA,OAAkCh9C,IAAH+8C,EAAG,oCAAmCA,EAAAE,EAGnE17C,EAFF27C,yBAAAA,OAA2Bl9C,IAAHi9C,EAAG,uBAAsBA,EAAAE,EAE/C57C,EADF67C,oCAAAA,OAAsCp9C,IAAHm9C,EAAG,wCAAuCA,EAG/E,OACEj+C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,gCACbjB,EAAAC,cAACk7C,GAAOx3C,KACFrB,EAAK,CACTowC,MAAO4K,EACPruB,WAAY3sB,EAAM6R,MAAM4a,YAAY,GACpCusB,WAAY,WAAF,OACRt7C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,sBACbjB,EAAAC,cAACkvC,GAAU,MAEb,EACFoM,aAAc,SAAF7nB,GAAA,IAAK/mB,EAAI+mB,EAAJ/mB,KAAMsvC,EAAqBvoB,EAArBuoB,sBAAuBF,EAAmBroB,EAAnBqoB,oBAAmB,OAC/D/7C,EAAAC,cAAAD,EAAA6D,SAAA,KACE7D,EAAAC,cAAA,MAAA,CAAKgB,UAAU,wBACbjB,EAAAC,cAAA,SAAA,CACEgB,UAAU,8BACVyxC,MAAO8K,EACP55C,KAAK,SACL0kC,QAAS,SAACxa,GACRA,EAAME,iBACNF,EAAMqwB,kBACNlC,GAAsB,WACpB35C,EAAM87C,iBAAiBtjB,IAAInuB,GAC3BrK,EAAM+7C,eAAe7K,OAAO7mC,GAC5BrK,EAAMkhC,SACR,GACF,GAEAxjC,EAAAC,cAAC8vC,GAAQ,QAGb/vC,EAAAC,cAAA,MAAA,CAAKgB,UAAU,wBACbjB,EAAAC,cAAA,SAAA,CACEgB,UAAU,8BACVyxC,MAAOgL,EACP95C,KAAK,SACL0kC,QAAS,SAACxa,GACRA,EAAME,iBACNF,EAAMqwB,kBACNpC,GAAoB,WAClBz5C,EAAM+7C,eAAe7K,OAAO7mC,GAC5BrK,EAAMkhC,SACR,GACF,GAEAxjC,EAAAC,cAACmvC,GAAW,QAGf,KAIPpvC,EAAAC,cAACk7C,GAAOx3C,EAAA,CAAA,EACFrB,EAAK,CACTowC,MAAOkL,EACP3uB,WAAY3sB,EAAM6R,MAAM4a,YAAY,GACpCusB,WAAY,WAAF,OACRt7C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,sBACbjB,EAAAC,cAAC8vC,GAAQ,MAEX,EACFwL,aAAc,SAAFl4C,GAAA,IAAKsJ,EAAItJ,EAAJsJ,KAAMovC,EAAmB14C,EAAnB04C,oBAAmB,OACxC/7C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,wBACbjB,EAAAC,cAAA,SAAA,CACEgB,UAAU,8BACVyxC,MAAOoL,EACPl6C,KAAK,SACL0kC,QAAS,SAACxa,GACRA,EAAME,iBACNF,EAAMqwB,kBACNpC,GAAoB,WAClBz5C,EAAM87C,iBAAiB5K,OAAO7mC,GAC9BrK,EAAMkhC,SACR,GACF,GAEAxjC,EAAAC,cAACmvC,GAAW,OAEV,KAIVpvC,EAAAC,cAACk7C,GAAOx3C,EAAA,CAAA,EACFrB,EAAK,CACTowC,MAAOsL,EACP/uB,WAAY3sB,EAAM6R,MAAM4a,YAAY,GACpCusB,WAAY,WAAF,OACRt7C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,sBACbjB,EAAAC,cAACivC,GAAY,MAEf,EACFqM,aAAc,SAAFv3C,GAAA,IAAK2I,EAAI3I,EAAJ2I,KAAMovC,EAAmB/3C,EAAnB+3C,oBAAmB,OACxC/7C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,wBACbjB,EAAAC,cAAA,SAAA,CACEgB,UAAU,8BACVyxC,MAAOwL,EACPt6C,KAAK,SACL0kC,QAAS,SAACxa,GACRA,EAAME,iBACNF,EAAMqwB,kBACNpC,GAAoB,WAClBz5C,EAAMsyC,cAAcpB,OAAO7mC,GAC3BrK,EAAMkhC,SACR,GACF,GAEAxjC,EAAAC,cAACmvC,GAAW,OAEV,KAKhB,yBChGakP,GAAct+C,EAAM+yC,MAC/B,SAAApyC,GAA6E,IAAA49C,EAAAn8C,EAAAzB,EAA1E0B,aAAAA,OAAYvB,IAAAsB,EAAG,CAAA,EAAEA,EAAKE,EAAKC,EAAA5B,EAAA6B,IAC5B,OAAIF,EAAMgrC,eAAiBhrC,EAAMk4C,eAE7Bx6C,EAAAC,cAACy4C,GAAW/0C,KACNrB,EAAK,CACTmT,SAAUnT,EAAMmT,SAChB0M,OAAQ7f,EAAM6f,OACdsyB,iBAAkBnyC,EAAMmyC,iBACxB+J,gBAAiBl8C,EAAMk8C,gBACvBn8C,aAAcA,aAAYvB,EAAZuB,EAAco8C,eAKN,WAAb,QAAXF,EAAAj8C,EAAM6R,aAAKrT,IAAAy9C,OAAAz9C,EAAXy9C,EAAap8B,QACRniB,EAAAC,cAACw5C,GAAW,CAACp3C,aAAcA,aAAYvB,EAAZuB,EAAcq8C,cAG7Cp8C,EAAM6R,MAAM+qB,MAIZ58B,EAAMq8C,gBAAmBr8C,EAAMk4C,eAKlCx6C,EAAAC,cAAAD,EAAA6D,SAAA,KACE7D,EAAAC,cAACg9C,GAAat5C,KAAKrB,EAAK,CAAED,aAAcA,aAAYvB,EAAZuB,EAAcu8C,iBACrDt8C,EAAMk4C,gBAAqD,IAAnCl4C,EAAM6R,MAAM4a,YAAYtmB,QAE/CzI,EAAAC,cAAC65C,GAAen2C,KAAKrB,EAAK,CAAED,aAAcA,aAAYvB,EAAZuB,EAAcw8C,oBARrD7+C,EAAAC,cAAC65C,GAAen2C,KAAKrB,EAAK,CAAED,aAAcA,aAAYvB,EAAZuB,EAAcw8C,mBAJxD7+C,EAAAC,cAACm9C,GAAWz5C,KAAKrB,EAAK,CAAEq8C,eAAgBr8C,EAAMq8C,eAAgBt8C,aAAcA,aAAYvB,EAAZuB,EAAcy8C,cAgBrG,IACA,SAAkBC,EAAYC,GAK5B,MAAkC,YAA3BA,EAAU7qC,MAAMgO,QAAmD,YAA3B68B,EAAU7qC,MAAMgO,MACjE,ICvFK,SAAS88B,GAAQt+C,GAAoE,IAAAC,EAAAD,EAAjEE,KAAAA,OAAOC,IAAHF,EAAG,GAAEA,EAAAG,EAAAJ,EAAEK,MAAAA,OAAQF,IAAHC,EAAG,eAAcA,EAC1D,OACEf,EAAAC,cAAA,MAAA,CACEC,MAAOW,EACPV,OAAQU,EACRI,UAAU,sBACVb,QAAQ,YACRC,KAAK,OACLgB,OAAQL,EACRM,YAAY,MACZC,cAAc,QACdC,eAAe,QACf,cAAY,QAEZxB,EAAAC,cAAA,OAAA,CAAMM,EAAE,mBACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,aAGd,yBCcO,SAAS2+C,GAASv+C,GAA+D,IAAAyB,EAAAzB,EAA5D0B,aAAAA,OAAYvB,IAAAsB,EAAG,CAAA,EAAEA,EAAKE,EAAKC,EAAA5B,EAAA6B,IACrD28C,EASI98C,EARF+8C,iBAAAA,OAAmBt+C,IAAHq+C,EAAG,QAAOA,EAAAE,EAQxBh9C,EAPFi9C,qBAAAA,OAAuBx+C,IAAHu+C,EAAG,kBAAiBA,EAAAE,EAOtCl9C,EANFm9C,gBAAAA,OAAkB1+C,IAAHy+C,EAAG,QAAOA,EAAAE,EAMvBp9C,EALFq9C,qBAAAA,OAAuB5+C,IAAH2+C,EAAG,QAAOA,EAAAE,EAK5Bt9C,EAJFu9C,iBAAAA,OAAmB9+C,IAAH6+C,EAAG,SAAQA,EAAAE,EAIzBx9C,EAHFy9C,8BAAAA,OAAgCh/C,IAAH++C,EAAG,yBAAwBA,EAAAE,EAGtD19C,EAFF29C,mCAAAA,OAAqCl/C,IAAHi/C,EAAG,yBAAwBA,EAAAE,EAE3D59C,EADF69C,8BAAAA,OAAgCp/C,IAAHm/C,EAAG,eAAcA,EAExCxgB,EAAYn9B,EAAMyjC,aAAa,CACrCf,aAAc1iC,EAAMq4C,SAASj3B,UADvB+b,QAIRz/B,EAAM2B,WAAU,WACVW,EAAMu8B,WAAav8B,EAAMq4C,SAASj3B,SACpCphB,EAAMq4C,SAASj3B,QAAQsd,OAE1B,GAAE,CAAC1+B,EAAMu8B,UAAWv8B,EAAMq4C,WAE3B36C,EAAM2B,WAAU,WACVW,EAAM69C,iBAAmB79C,EAAMq4C,SAASj3B,SAC1CphB,EAAMq4C,SAASj3B,QAAQ08B,QAE1B,GAAE,CAAC99C,EAAM69C,gBAAiB79C,EAAMq4C,WAEjC,IAAM0F,EAAiB/9C,EAAMgkC,cAAc,CACzCtB,aAAc1iC,EAAMq4C,SAASj3B,QAC7Bmb,UAAWv8B,EAAMu8B,UACjB6H,UlCrE0B,MkCwEtB4Z,EAAc,IAAIr0C,IAAI,CAAC,UAAW,YAAa,UAC/Cs0C,EAAgBF,EAAe7Y,UAC/BgZ,EAAeH,EAAejZ,SAC9BqZ,EAAyC,cAAtBn+C,EAAMo+C,aAAqD,cAAtBp+C,EAAMo+C,YAC9DC,EAAgD,YAAvBr+C,EAAM6R,MAAMgO,OAG3CniB,EAAM2B,WAAU,WACY,cAAtBW,EAAMo+C,aAAqD,cAAtBp+C,EAAMo+C,aAA+Bp+C,EAAMq4C,SAASj3B,SAC3FphB,EAAMq4C,SAASj3B,QAAQsd,OAE1B,GAAE,CAAC1+B,EAAMo+C,YAAap+C,EAAMq4C,WAS7B,IAAMiG,EAAUruB,EAAAA,KACX8tB,GAAc,GAAA,CACjB3hB,aAAcp8B,EAAMgrC,cAAiB,QAAqB,SAC1D9F,UAAW,SAAC9iC,GAEV,GAAIpC,EAAMgrC,eAAiBgT,EAAY3nC,IAAIjU,EAAE1B,KAO3C,MALc,UAAV0B,EAAE1B,MAAoBy9C,GAAoBn+C,EAAM6R,MAAM+qB,OACxD58B,EAAMu+C,WAAWv+C,EAAM6R,MAAM+qB,OAE/Bx6B,EAAEspB,sBACFtpB,EAAEy5C,kBAGJoC,SAAAA,EAAgB77C,EACjB,EACD0iC,SAAU,SAAC1iC,GACT,GAAIpC,EAAMgrC,cAOR,OANAhrC,EAAMqhC,SAASj/B,EAAE2iC,cAAcjgC,OAI/B1C,EAAEspB,sBACFtpB,EAAEy5C,kBAGJqC,SAAAA,EAAe97C,EAChB,EACD80C,SAAUiH,IAGZ,OACEzgD,EAAAC,cAAAD,EAAA6D,SAAA,KACE7D,EAAAC,cAAA,OAAA,CACEgB,UAAU,iBACVq+B,SAAU,SAACxR,GACTA,EAAME,gBACN,EACFyR,QAASA,GAERn9B,EAAMgrC,cACLttC,EAAAC,cAAAD,EAAA6D,SACE7D,KAAAA,EAAAC,cAAA,SAAA,CACE2D,KAAK,SACLotC,SAAU,EACV/vC,UAAU,yBACVyxC,MAAOoN,EACP,aAAYE,EACZ1X,QAAS,WAAF,OAAQhmC,EAAM22C,eAAc,EAAM,GAEzCj5C,EAAAC,cAACg/C,GAAU,QAIfj/C,EAAAC,cAAAD,EAAA6D,cACG88C,GACC3gD,EAAAC,cAAA,MAAA,CAAKgB,UAAU,8BACbjB,EAAAC,cAAC0uC,WAGHgS,GACA3gD,EAAAC,sBAAA0D,EAAA,CAAO1C,UAAU,4BAA+BqB,EAAM8jC,iBACpDpmC,EAAAC,cAACS,EAAY,MACbV,EAAAC,cAAA,OAAA,CAAMgB,UAAU,4CAA4C2+C,KAMpE5/C,EAAAC,cAAA,QAAA0D,EAAA,CACE1C,UAAU,kBACVkB,IAAKG,EAAMq4C,UACPiG,EAAU,CACdhiB,YAAa6hB,EAAmBP,EAAgC59C,EAAMs8B,eAGxE5+B,EAAAC,cAAA,MAAA,CAAKgB,UAAU,qBACZw/C,GACCzgD,EAAAC,cAAA,SAAA,CAAQ2D,KAAK,SAAS3C,UAAU,+BAA+BqnC,QAAS,WAAF,OAAQhmC,EAAM22C,eAAc,EAAK,GACrGj5C,EAAAC,cAACivC,GAAc,OAInBlvC,EAAAC,cAAA,SAAA,CACEgB,UAAU,kBACV2C,KAAK,QACL,aAAY07C,EACZwB,QAASx+C,EAAM6R,MAAM+qB,MACrB8R,SAAU1uC,EAAM6R,MAAM+qB,MAAQ,GAAO,EACrC,cAAc58B,EAAM6R,MAAM+qB,MAAiB,QAAT,QAEjCkgB,IAGDqB,GAAoBn+C,EAAM6R,MAAM+qB,QAAUl/B,EAAAC,cAAA,MAAA,CAAKgB,UAAU,sBAE3DjB,EAAAC,cAAA,SAAA,CACE2D,KAAK,SACL8uC,MAAO8M,EACPv+C,UAAU,kBACV,aAAYy+C,EACZpX,QAAShmC,EAAMy+C,SAEf/gD,EAAAC,cAACmvC,YAMb,CCjLO,SAAS4R,GAAqBh+C,GACnC,OAAkC,IAtB7B,WACL,IAAMA,EAAM,eACZ,IAGE,OAFAi+C,aAAa/U,QAAQlpC,EAAK,IAC1Bi+C,aAAaC,WAAWl+C,IACjB,CACR,CAAC,MAAAqoC,GACA,OAAO,CACT,CACF,CAaM8V,GACK,CACLjV,QAAAA,WAAkB,EAClBH,QAAO,WACL,MAAO,EACT,GAIG,CACLG,QAAAA,SAAQv/B,GACN,OAAOtI,OAAO48C,aAAa/U,QAAQlpC,EAAKgD,KAAKC,UAAU0G,GACxD,EACDo/B,QAAO,WACL,IAAMp/B,EAAOtI,OAAO48C,aAAalV,QAAQ/oC,GACzC,OAAO2J,EAAO3G,KAAKmC,MAAMwE,GAAQ,EACnC,EAEJ,8CC3BO,SAASy0C,GAAoBzgD,GAGuB,IAFzDqC,EAAGrC,EAAHqC,IAAGq+C,EAAA1gD,EACH2gD,MAAAA,OAAQxgD,IAAHugD,EAAG,EAACA,EAEHE,EAAUP,GAAqBh+C,GACjCksB,EAAQqyB,EAAQxV,UAAU9jC,MAAM,EAAGq5C,GAEvC,MAAO,CACLxmB,IAAAA,SAAInuB,GACF+mB,IAAAA,EAAqD/mB,EAA7B+mB,EAAhBmP,iBAAgCnP,EAAd8tB,eAAmB7qB,IAAAA,EAAGp0B,EAAAmxB,EAAAlxB,IAE1Ci/C,EAAsBvyB,EAAMva,WAAU,SAACiD,GAAC,OAAKA,EAAEmY,WAAa4G,EAAI5G,YAElE0xB,GAAsB,GACxBvyB,EAAM5P,OAAOmiC,EAAqB,GAGpCvyB,EAAMwyB,QAAQ/qB,GACdzH,EAAQA,EAAMjnB,MAAM,EAAGq5C,GAEvBC,EAAQrV,QAAQhd,EACjB,EACDskB,OAAAA,SAAO7mC,GACLuiB,EAAQA,EAAM5mB,QAAO,SAACsP,GAAC,OAAKA,EAAEmY,WAAapjB,EAAKojB,YAEhDwxB,EAAQrV,QAAQhd,EACjB,EACDyyB,OAAM,WACJ,OAAOzyB,CACT,EAEJ,CC7CO,SAAS0yB,GAA+Bh6C,GAC7C,IAAI25C,EAEEM,EAAAn+C,qBAAAA,OAAoCkE,EAAQ5E,KAElD,SAAS8+C,IAKP,YAJgBhhD,IAAZygD,IACFA,EAAU35C,EAAQq5C,cAAgB58C,OAAO48C,cAGpCM,CACT,CAEA,SAASQ,IACP,OAAO/7C,KAAKmC,MAAM25C,IAAa/V,QAAQ8V,IAAiB,KAC1D,CAEA,SAASG,EAAaC,GACpBH,IAAa5V,QAAQ2V,EAAc77C,KAAKC,UAAUg8C,GACpD,CA8BA,MAAO,CACLhoC,IAAAA,SACEjX,EACAk/C,GAIiB,IAHjBC,EAAA35C,UAAAC,OAAAD,QAAA1H,IAAA0H,UAAA1H,GAAA0H,UAA8B,GAAA,CAC5B45C,KAAM,WAAN,OAAY/rC,QAAQK,SAAQ,GAG9B,OAAOL,QAAQK,UACZ8C,MAAK,WArCZ,IACQ6oC,EACAJ,EAEAK,EAoCA,OAvCAD,EAAaz6C,EAAQy6C,WAAkC,IAArBz6C,EAAQy6C,WAAoB,KAC9DJ,EAAYF,IAQlBC,EANMM,EAAiDj5C,OAAO0F,YAC5D1F,OAAOk5C,QAAQN,GAAW35C,QAAO,SAAA3H,GAC/B,YAA+BG,IADmBgC,EAAAnC,EAAA,GAAN,GAC3B6hD,SACnB,MAKGH,GAaLL,EAT6C34C,OAAO0F,YAClD1F,OAAOk5C,QAAQD,GAAgDh6C,QAAO,SAAAjF,GAAmB,IAAfo/C,EAAe3/C,EAAAO,EAAA,GAAN,GAC3Eq/C,GAAmB,IAAIjyC,MAAOoF,UAGpC,QAFkB4sC,EAAUD,UAAYH,EAAaK,EAGvD,MAkBWX,IAAsD/7C,KAAKC,UAAUjD,GAC9E,IACCwW,MAAK,SAACpS,GACL,OAAOiP,QAAQC,IAAI,CAAClP,EAAQA,EAAMA,MAAQ86C,SAA0BphD,IAAVsG,GAC5D,IACCoS,MAAK,SAAA0c,GAAqB,IAAAuD,EAAA32B,EAAAozB,EAAA,GAAnB9uB,EAAAqyB,EAAA,GAAOkpB,EAAMlpB,EAAA,GACnB,OAAOpjB,QAAQC,IAAI,CAAClP,EAAOu7C,GAAUR,EAAOC,KAAKh7C,IACnD,IACCoS,MAAK,SAAAmgB,GAAO,OAAP72B,EAAA62B,EAAA,GAAO,EAAW,GAC5B,EAEA5pB,IAAAA,SAAY/M,EAAmCoE,GAC7C,OAAOiP,QAAQK,UAAU8C,MAAK,WAC5B,IAAMyoC,EAAYF,IASlB,OAPAE,EAAUj8C,KAAKC,UAAUjD,IAAQ,CAC/Bw/C,eAAe/xC,MAAOoF,UACtBzO,MAAAA,GAGF06C,IAAa5V,QAAQ2V,EAAc77C,KAAKC,UAAUg8C,IAE3C76C,IAEX,EAEAwY,OAAA,SAAO5c,GACL,OAAOqT,QAAQK,UAAU8C,MAAK,WAC5B,IAAMyoC,EAAYF,WAEXE,EAAUj8C,KAAKC,UAAUjD,IAEhC8+C,IAAa5V,QAAQ2V,EAAc77C,KAAKC,UAAUg8C,MAEtD,EAEAW,MAAA,WACE,OAAOvsC,QAAQK,UAAU8C,MAAK,WAC5BsoC,IAAaZ,WAAWW,KAE5B,EAEJ,2tVCzGO,IAAMnyB,GAAU,eCMhB,SAASmzB,GACdxuB,EACAC,EACAwuB,GAkBA,OAhBqB9iD,EAAMskB,SAAQ,WACjC,IAAMy+B,ECOH,SAAoB1uB,EAAeC,EAAgB1sB,GACxD,IAAKysB,GAA0B,iBAAVA,EACnB,MAAM,IAAIpvB,MAAM,uBAGlB,IAAKqvB,GAA4B,iBAAXA,EACpB,MAAM,IAAIrvB,MAAM,wBAGlB,OAAO+9C,GAAAzwB,EAAA,CACL8B,MAAAA,EACAC,OAAAA,EACA4H,SAAU,CACR+mB,QAAS,IACTxvC,KAAM,IACNyvC,MAAO,KAETC,kJACAC,UC4BK,CAAEC,KA5DT,SAAcj/B,GACZ,OAAO,IAAI/N,SAAS,SAAApN,GAClB,IAAMvE,EAAgB,IAAI4+C,eAC1B5+C,EAAcq8B,KAAK3c,EAAQkI,OAAQlI,EAAQjN,KAAK,GAEhD9N,OAAO0M,KAAKqO,EAAQyF,SAAS2I,SAAS,SAAAtpB,GAAA,OAAQxE,EAAc6+C,iBAAiBr6C,EAAKkb,EAAQyF,QAAQ3gB,GAAK,IAEvG,IAcI4nB,EAdElmB,EAAgB,SAAC1B,EAAiBmQ,GAAA,OAC/BiC,YAAW,WAChB5W,EAAc6oB,QAEdtkB,EAAQ,CACNkZ,OAAQ,EACR1V,QAAA4M,EACAmqC,YAAY,GAEhB,GAAGt6C,EAAO,EAGNu6C,EAAiB74C,EAAcwZ,EAAQs/B,eAAgB,sBAI7Dh/C,EAAci/C,mBAAqB,WAC7Bj/C,EAAck/C,WAAal/C,EAAcm/C,aAA8B/iD,IAApBgwB,IACrDzJ,aAAao8B,GAEb3yB,EAAkBlmB,EAAcwZ,EAAQ0/B,gBAAiB,kBAE7D,EAEAp/C,EAAcsS,QAAU,WAEO,IAAzBtS,EAAcyd,SAChBkF,aAAao8B,GACbp8B,aAAayJ,GAEb7nB,EAAQ,CACNwD,QAAS/H,EAAcq/C,cAAgB,yBACvC5hC,OAAQzd,EAAcyd,OACtBqhC,YAAY,IAGlB,EAEA9+C,EAAcmS,OAAS,WACrBwQ,aAAao8B,GACbp8B,aAAayJ,GAEb7nB,EAAQ,CACNwD,QAAS/H,EAAcq/C,aACvB5hC,OAAQzd,EAAcyd,OACtBqhC,YAAY,GAEhB,EAEA9+C,EAAc2+C,KAAKj/B,EAAQ3Y,KAC7B,GACF,GDzBEu4C,cAAe,CAAC,CAAEv0B,QAAS,YAC3Bw0B,SAAU,wBACVC,eAAgBC,KAChBC,cAAeD,GAAkB,CAAEE,cAAc,IACjDC,WAAYC,GAAwB,CAClCC,OAAQ,CAAC5C,GAA+B,CAAE5+C,OAAAU,OAAQ+gD,GAAgB/gD,KAAAA,OAAI2wB,KAAY8vB,SAEjFv8C,GAEP,CDnCmB88C,CAAWrwB,EAAOC,GAYjC,OAXAyuB,EAAO4B,gBAAgB,YAAaj1B,KAOsC,IAAtE,sBAAsBvsB,KAAK4/C,EAAO6B,YAAYC,aAAaz9C,QAC7D27C,EAAO4B,gBAAgB,kBAAmBj1B,IAGrCozB,EAAsBC,EAC9B,GAAE,CAAC1uB,EAAOC,EAAQwuB,GAGrB,+BGmFMgC,GAAiB,WAAA,IAAAnrB,EAAA6R,EAAAC,IAAAC,MAAG,SAAAC,EAAAlS,GAAA,IAAAyF,EAAA6lB,EAAA9rB,EAAA4K,EAAAjC,EAAAnL,EAAAuuB,EAAAC,EAAAjuB,EAAA3C,EAAAC,EAAAgoB,EAAA4I,EAAAC,EAAAC,EAAArE,EAAAsE,EAAAC,EAAAjjB,EAAAkjB,EAAAhjB,EAAAijB,EAAAvmB,EAAAqL,EAAA,OAAAmB,IAAApkC,MAAA,SAAAwkC,GAAA,cAAAA,EAAA1xB,KAAA0xB,EAAAjjC,MAAA,KAAA,EAiCO,OAhC/Bs2B,EAAKzF,EAALyF,MACO6lB,EAAYtrB,EAAnBtlB,MACA8kB,EAAUQ,EAAVR,WACA4K,EAASpK,EAAToK,UACAjC,EAAYnI,EAAZmI,aACAnL,EAASgD,EAAThD,UACAuuB,EAAgBvrB,EAAhBurB,iBACAC,EAAaxrB,EAAbwrB,cACAjuB,EAAQyC,EAARzC,SACA3C,EAAKoF,EAALpF,MACAC,EAAMmF,EAANnF,OACAgoB,EAAkB7iB,EAAlB6iB,mBAAkB4I,EAAAzrB,EAClB0rB,eAAAA,OAAcrkD,IAAAokD,EAAG3I,GAAQ2I,EACzBE,EAAgB3rB,EAAhB2rB,iBACArE,EAAOtnB,EAAPsnB,QAkBMsE,EAAiBruB,EAAQ6U,EAAA1xB,KAAA,EAAA0xB,EAAAjjC,KAAA,EAGHg5B,EAAa6Y,OAAqB,CAC1DhZ,SAAU,CAAAlP,EAAA,CAEN2M,MAAAA,EACAzI,UAAAA,EACAgvB,qBAAsB,CACpB,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,UACA,OACA,OAEFC,oBAAqB,CAAAhiD,kBAAAA,OACDuhD,EAAcvhC,SAAOhgB,kBAAAA,OACrBuhD,EAAcvhC,SAAOhgB,kBAAAA,OACrBuhD,EAAcvhC,SAAOhgB,kBAAAA,OACrBuhD,EAAcvhC,SAAOhgB,kBAAAA,OACrBuhD,EAAcvhC,SAAOhgB,kBAAAA,OACrBuhD,EAAcvhC,SAAOhgB,WAAAA,OAC5BuhD,EAAcvhC,UAE3BiiC,oBAAqB,IACrBC,gBAAiB,SACjBC,iBAAkB,UAClBC,YAAa,GACbzsB,eAAgBgsB,GACbL,MAGP,KAAA,EA2BD,OA3BCM,EAAAzZ,EAAAW,KAlCMnK,EAAOijB,EAAPjjB,QAoCFkjB,EAAcljB,EAAQ,GACpBE,EAAiBgjB,EAAjBhjB,KAAMijB,EAAWD,EAAXC,OACRvmB,EAAUmd,GAAsB7Z,GAAM,SAAC5L,GAAG,OAAKimB,GAAoBjmB,EAAM2lB,GAAAA,GAI1EyI,EAAaxtB,QAAQgjB,kBAA4B9xC,OAASY,OAAO0M,KAAKkpB,GAASx2B,QAClFwwB,EAAW,CACTshB,kBAAmBlxC,OAAO0M,KAAKkpB,KAInChG,EAAW,CAAEusB,OAAAA,IAETlb,EAAiB,CAAE,EAEnB+a,IACF/a,EAAiB,CACfza,yBAA0B4G,EAC1BxG,uBAAwBs1B,EAAYv1B,QACpCoE,kCAAmC,CACjCC,MAAAA,EACAC,OAAAA,KAGLuX,EAAAG,OAEM3iC,SAAAA,OAAOulB,OAAuBqQ,GAASnxB,KAAI,SAACohB,EAAOhb,GACxD,MAAO,CACLqpB,SAAQ75B,OAAAA,OAASwQ,GACjBsjB,SAAAA,SAAQH,GAAwB,IAArB1qB,EAAI0qB,EAAJ1qB,KAAMmhB,EAAKuJ,EAALvJ,MACfs3B,EAAiBz4C,GACZ6vC,GAAgB1uB,IACnBizB,GAEH,EACD5jB,WAAAA,SAAU1F,GACR,OADeA,EAAJ9qB,KACCwK,GACb,EACDqiB,SAAQ,WACN,OAAOnwB,OAAOulB,OAAOwtB,GAAQltB,GAAO,SAACviB,GAAI,OAAKA,EAAKmvC,UAAUiK,IAAI,GAAEzJ,IAChExuC,IAAIq3C,GACJr3C,KAAI,SAACk4C,GAAW,OACfA,EAAYl4C,KAAI,SAACnB,GACf,IAAI04B,EAAsC,KAEpC4gB,EAAkBD,EAAYr0C,MAClC,SAACu0C,GAAW,MAA0B,SAArBA,EAAYtiD,MAAmBsiD,EAAYpK,UAAUiK,OAASp5C,EAAKmvC,UAAUiK,IAAI,IAOpG,MAJkB,SAAdp5C,EAAK/I,MAAmBqiD,IAC1B5gB,EAAS4gB,GAGX1zB,EAAAA,EAAA,CAAA,EACK5lB,GAAI,CAAA,EAAA,CACPgvC,mBAAoBtW,GACjBiF,EAEP,GACF,IACC6b,MACL,EAEJ,KAAE,KAAA,GAQD,MARCta,EAAA1xB,KAAA,GAAA0xB,EAAAiM,GAAAjM,EAAA,MAAA,GAM4B,eAA1BA,EAAAiM,GAAiB3yC,MACnB0+B,EAAU,SACXgI,EAAAiM,GAAA,KAAA,GAAA,IAAA,MAAA,OAAAjM,EAAAve,OAAA,GAAAqe,EAAA,KAAA,CAAA,CAAA,EAAA,UAGJ,OAnJKmZ,SAAiBv0B,GAAA,OAAAoJ,EAAAhR,MAAAnjB,KAAAgD,UAAA,CAAA,CAAA,GAqJhB,SAAS49C,GAAcC,GAwBO,IN3OIhjD,EACvCL,EAAGsjD,EACHhF,EAEMC,EACFryB,EM+MJmF,EAAKgyB,EAALhyB,MACAC,EAAM+xB,EAAN/xB,OACAmC,EAAS4vB,EAAT5vB,UACAmI,EAAWynB,EAAXznB,YACA2nB,EAAKF,EAALE,MACAvB,EAAgBqB,EAAhBrB,iBACA1I,EAAkB+J,EAAlB/J,mBACA56C,EAAK2kD,EAAL3kD,MAAK8kD,EAAAH,EACLtF,QAAAA,OAAUjoC,IAAH0tC,EAAG1tC,GAAI0tC,EAAAC,EAAAJ,EACdlB,eAAAA,OAAiB5I,IAAHkK,EAAGlK,GAAQkK,EAAAC,EAAAL,EACzB5K,aAAAA,OAAe/M,IAAHgY,EAAGhY,GAAGgY,EAAAC,EAAAN,EAClBlJ,uBAAAA,OAAyBr8C,IAAH6lD,EAAG,WAAA,OAA0B,IAAI,EAAAA,EACvDzjD,EAASmjD,EAATnjD,UAAS0jD,EAAAP,EACTQ,eAAAA,OAAiB/lD,IAAH8lD,EAAG,EAACA,EAAAE,EAAAT,EAClBvD,sBAAAA,OAAwBvG,IAAHuK,EAAGvK,GAAQuK,EAAAC,EAAAV,EAChCW,2BAAAA,OAA6BlmD,IAAHimD,GAAQA,EAAAE,EAAAZ,EAClCa,aAAcC,OAAuBrmD,IAAHmmD,EAAG,GAAEA,EAAAG,EAAAf,EACvChkD,aAAAA,OAAYvB,IAAAsmD,EAAG,CAAA,EAAEA,EACjBxM,EAAoByL,EAApBzL,qBAAoByM,EAAAhB,EACpBrvB,SAAAA,OAAWl2B,IAAHumD,GAAQA,EAChBpO,EAAaoN,EAAbpN,cAAaqO,EAAAjB,EACb/Y,cAAAA,OAAgBxsC,IAAHwmD,GAAQA,EAAAC,EAAAlB,EACrB7L,eAAAA,OAAiB15C,IAAHymD,GAAQA,EAENC,EAAqFnlD,EAA7FolD,OAAuCC,EAAsDrlD,EAAjEslD,UAAqCC,GAAuBrlD,EAAKF,EAAYG,IAS/G60C,GAAAv0C,EARwB9C,EAAM+C,SAA+C,CAC7Em8B,MAAO,GACPnQ,YAAa,GACboQ,WAAY,KACZ5H,QAAS,CAAE,EACXyB,QAAQ,EACR0D,aAAc,KACdva,OAAQ,SACR,GARKhO,GAAKkjC,GAAA,GAAEwQ,GAAQxQ,GAAA,GAUhBlE,GAAenzC,EAAMojB,OAA8B,MACnD0kC,GAAW9nD,EAAMojB,OAA8B,MAC/C2kC,GAAiB/nD,EAAMojB,OAA8B,MACrD4kC,GAAchoD,EAAMojB,OAA8B,MAClDu3B,GAAW36C,EAAMojB,OAAgC,MACjD6hC,GAAgBjlD,EAAMojB,OAAe,IACrC6kC,GAA4BjoD,EAAMojB,OACpB,oBAAX/e,OAAyBA,OAAO6jD,eAAgBngD,WAAWE,MAAM,E1C/S9C,K0C+SmE,IAC7Fyb,QACIwjC,GAAelnD,EAAMojB,OAAO+jC,GAAwBc,IAA2BvkC,QAE/EkxB,GAAgB50C,EAAMojB,QNlQW/f,EMmQO,CAC1CL,IAAGU,oCAAAA,OAAsC+yB,GACzC6qB,MAAO,INpQXt+C,EAAGK,EAAHL,IAAGsjD,EAAAjjD,EACHi+C,MAAAA,OAAQxgD,IAAHwlD,EAAG,EAACA,EAEH/E,EAAUP,GAAqBh+C,GACjCksB,EAAQqyB,EAAQxV,UAAU9jC,MAAM,EAAGq5C,GAEhC,CACLxmB,IAAAA,SAAInuB,GACF,IAAQojB,EAAuBpjB,EAAvBojB,SAAUta,EAAa9I,EAAb8I,SAGZgsC,EAAsBvyB,EAAMva,WAChC,SAACiD,GAAC,IAAAuwC,EAAAC,EAAA,OAAKxwC,EAAEmY,WAAaA,YAAYo4B,EAAAvwC,EAAEnC,gBAAQ3U,IAAAqnD,WAAAA,EAAVA,EAAa,UAAErnD,IAAAqnD,OAAArnD,EAAfqnD,EAAiB17C,YAAYgJ,SAAa,QAAL2yC,EAAR3yC,EAAW,UAAX2yC,IAAaA,OAAbA,EAAAA,EAAe37C,QAAO,IAGnFg1C,GAAsB,EACxBvyB,EAAMuyB,GAAuB90C,GAE7BuiB,EAAMwyB,QAAQ/0C,GACduiB,EAAQA,EAAMjnB,MAAM,EAAGq5C,IAGzBC,EAAQrV,QAAQhd,EACjB,EAEDm5B,YAAAA,SAAYv7C,EAAmBsqC,GAC7B,IAAMkR,EAAOp5B,EAAMvd,MAAK,SAAC42C,GAAC,IAAAC,EAAA,OAAe,QAAfA,EAAKD,EAAE9yC,gBAAQ3U,IAAA0nD,OAAA1nD,EAAV0nD,EAAYvkB,MAAK,SAACwkB,GAAC,OAAKA,EAAE99C,KAAOmC,QAChE,GAAKw7C,GAASA,EAAK7yC,SAAnB,CAEA,IAAMizC,EAAMJ,EAAK7yC,SAAS9D,MAAK,SAAC82C,GAAC,OAAKA,EAAE99C,KAAOmC,KAC1C47C,IAEJA,EAAYtR,SAAWA,EAExBmK,EAAQrV,QAAQhd,GAPa,CAQ9B,EACDioB,OAAAA,SAAOrqC,GAAmD,IAAA67C,EAClDL,EAAOp5B,EAAMvd,MAAK,SAAC42C,GAAC,IAAAK,EAAA,OAAe,QAAfA,EAAKL,EAAE9yC,gBAAQ3U,IAAA8nD,OAAA9nD,EAAV8nD,EAAY3kB,MAAK,SAACwkB,GAAC,OAAKA,EAAE99C,KAAOmC,QAChE,OAAOw7C,SAAc,QAAVK,EAAJL,EAAM7yC,gBAANkzC,IAAcA,OAAdA,EAAAA,EAAgBh3C,MAAK,SAAC82C,GAAC,OAAKA,EAAE99C,KAAOmC,IAC7C,EACD60C,OAAM,WACJ,OAAOzyB,CACR,EACDskB,OAAAA,SAAO7mC,GACLuiB,EAAQA,EAAM5mB,QAAO,SAACsP,GAAC,OAAKA,EAAEmY,WAAapjB,EAAKojB,YAEhDwxB,EAAQrV,QAAQhd,EAClB,KMuNAxL,QACI06B,GAAmBp+C,EAAMojB,OAC7Bg+B,GAAyC,CACvCp+C,IAAGU,kCAAAA,OAAoC+yB,GACvC6qB,MAAO,MAET59B,QACI26B,GAAiBr+C,EAAMojB,OAC3Bg+B,GAAyC,CACvCp+C,IAAGU,gCAAAA,OAAkC+yB,GAGrC6qB,MAA4C,IAArClD,GAAiBuD,SAASl5C,OAAe,EAAI,KAEtDib,QAEIke,GAAeihB,GAAgBxuB,EAAOC,EAAQwuB,GAE9C+F,GAA+B,WAAjBhhD,EAAO0+C,GAAqBA,EAAQ,KAClDuC,GAAwC,iBAAVvC,EAAqBA,GAAQsC,cAAW/nD,EAAX+nD,GAAajd,cAAe,KAEX2L,GAAAz0C,EAAlC9C,EAAM+C,SAAuB,MAAK,GAA3E0xC,GAAgB8C,GAAA,GAAEwR,GAAmBxR,GAAA,GAE5CyR,GAMI7/B,GAAQ,CACVC,IAAKyhB,GACLthB,wBAAwB,EACxBlU,eAAK4zC,GAAA,SAAL5zC,EAAKo3B,EAAAyc,GAAA,OAAAD,EAAAtgC,MAAAnjB,KAAAgD,UAAA,CAAA,OAAL6M,EAAKtN,SAAA,WAAA,OAAAkhD,EAAAlhD,UAAA,EAALsN,CAAK,EAAA,WAAA,IAAA8zC,EAAA3d,EAAAC,IAAAC,MAAE,SAAAU,EAAOn/B,EAAOsnB,GAAI,IAAAyW,EAAAnhB,EAAA,OAAA4hB,IAAApkC,MAAA,SAAAilC,GAAA,cAAAA,EAAAnyB,KAAAmyB,EAAA1jC,MAAA,KAAA,EACF0jC,EAAA1jC,KAAA,EAAA,MACM,KAAA,EAAA,GAGtBkgD,GAAoB,CAAAxc,EAAA1jC,KAAA,EAAA,KAAA,CAAA,MACjB,IAAI3D,MAAM,mCAAkC,KAAA,EAAA,OAAAqnC,EAAA1jC,KAAA,EAEhC2iC,GAAc,CAAEK,YAAakd,KAAuB,KAAA,EAEzB,OAFzC9d,EAAKsB,EAAAE,MACL3iB,EAAU,IAAI0iB,QAAQhY,EAAK1K,UACzB9Z,IAAI,yBAAerM,OAAWsnC,IAASsB,EAAAN,OAAA,SAExC32B,MAAMpI,EAAKslB,EAAAA,EAAA,CAAA,EAAOgC,GAAI,CAAA,EAAA,CAAE1K,QAAAA,MAAU,KAAA,GAAA,IAAA,MAAA,OAAAyiB,EAAAhf,OAAA,GAAA8e,OAC1C,OAAAgd,SAAAA,EAAAC,GAAA,OAAAF,EAAAxgC,MAAAnjB,KAAAgD,UAAA,CAAA,CAbI,IAcLqhB,QAAS,CACP,eAAgB,mBAChB,qBAAqBg/B,gBAAAA,GAAav0B,SAAUA,EAC5C,4BAA4Bu0B,gBAAAA,GAAax0B,QAASA,EAClD,wBAAwBw0B,gBAAAA,GAAapyB,YAAaA,EAClD,yBAA0BqyB,IAAwB,IAEpD5oC,QAAAA,SAAQopC,GACNP,GAAoBO,EACtB,IA/BA7zC,GAAQuzC,GAARvzC,SACAwX,GAAM+7B,GAAN/7B,OACA9K,GAAM6mC,GAAN7mC,OACAsL,GAAWu7B,GAAXv7B,YACO+wB,GAAewK,GAAtBtjD,MA8BI6jD,GAAavpD,EAAMojB,OAAOjB,IAChCniB,EAAM2B,WAAU,WACVqlD,IAIuB,cAAvBuC,GAAW7lC,SAAsC,UAAXvB,IACxCyyB,GAAc9Z,IvBnVc,SAACoE,EAAezpB,GAAmB,MAAwB,CAC3FypB,MAAAA,EACAnP,SAAUta,EAAS,GAAGhJ,QACtBgJ,SAAAA,EACA7R,KAAM,QACN4lD,OAAQ,SAIR/8C,QAAS,KACTqvC,UAAW,CACTkB,KAAM,QACN+I,KAAMtwC,EAAS,GAAGhJ,QAClBg9C,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,KAAM,MAER1yC,IAAK,GACL2yC,mBAAoB,GACrB,CuB8TuBC,CAAmBt0C,GAAS,GAAGhJ,QAASgJ,KAE5D8zC,GAAW7lC,QAAUvB,GACtB,GAAE,CAACA,GAAQ1M,GAAUm/B,GAAeoS,IAErC,IAAM5B,GAAmBplD,EAAMmlB,aAC7B,SAA0BxY,GACxB,IAAIq6C,EAAJ,CAKA,IAAMvM,EAAuB,YAAd9tC,EAAK/I,KAAqB+I,EAAKgvC,mBAAqBhvC,EAG/D8tC,IAAyF,IAA/E2D,GAAiBuD,SAAShtC,WAAU,SAACiD,GAAC,OAAKA,EAAEmY,WAAa0qB,EAAO1qB,QAAS,KACtFsuB,GAAevjB,IAAI2f,EAPrB,CASD,GACD,CAAC2D,GAAkBC,GAAgB2I,IAG/BgD,GAAqBhqD,EAAMmlB,aAC/B,SAACxY,GACC,GAAKwH,GAAMojB,QAAQ4B,uBAA0BxsB,EAAKg8B,kBAAlD,CAEA,IAAMshB,EAAet9C,EAEfu9C,EAAsB,CAC1BhzB,UAAW,gBACXhjB,MAAO+1C,EAAap6B,yBACpBX,MAAO,CAAC+6B,GACRn6B,UAAW,CAACnjB,EAAKg8B,mBACjB3Y,QAASi6B,EAAah6B,wBAGxB9b,GAAMojB,QAAQ4B,sBAAsBnC,SAASpC,4BAA4Bs1B,EAZJ,CAatE,GACD,CAAC/1C,GAAMojB,QAAQ4B,wBAGXgxB,GACJnqD,EAAMojB,YASJtiB,GAEEspD,GAAoBpqD,EAAMmlB,aAC9B,SAACklC,EAAiBnrB,GAOhB,GANA+Z,EAAcoR,GACdp9B,GAAO,CACL3gB,KAAM,OACNG,QAASyyB,IAGP8oB,GAAYtkC,QAAS,CAEvB,IAAM4mC,EAAKtC,GAAYtkC,QACa,mBAAxB4mC,EAAWC,SACrBD,EAAGC,SAAS,CAAEC,IAAK,EAAGC,SAAU,WAGhCH,EAAGI,UAAY,CAEnB,CAGIP,GAAgBzmC,SAClBymC,GAAgBzmC,QAAQigB,SAAS,GAErC,GACA,CAACsV,EAAehsB,KAIZ09B,GAAuB3qD,EAAMmlB,YAAW,WAAA,IAAAylC,EAAApf,EAAAC,IAAAC,MAC5C,SAAAmf,EAAO/9C,EAAmBu/B,GAAa,IAAAye,EAAA,OAAArf,IAAApkC,MAAA,SAAA0jD,GAAA,cAAAA,EAAA5wC,KAAA4wC,EAAAniD,MAAA,KAAA,EAAA,GAChCkgD,IAAyBz0B,EAAK,CAAA02B,EAAAniD,KAAA,EAAA,KAAA,CAAA,OAAAmiD,EAAA/e,OAAA,UAAA,KAAA,EAAA,OAAA+e,EAAAniD,KAAA,EACjBujC,GAAa,CAC7BP,YAAakd,GACbzc,OAAAA,EACAv/B,UAAAA,EACAunB,MAAAA,IACA,KAAA,EALO,KAAA02B,EAAAve,KAMDrqB,QAAU,KAAG,CAAA4oC,EAAAniD,KAAA,EAAA,KAAA,CAAA,MAAQ,IAAI3D,MAAM,2BAA0B,KAAA,EACxC6lD,QAAzBA,EAAAlW,GAAcyT,mBAAdyC,IAAyBA,GAAzBA,EAAAthD,KAAAorC,GAA4B9nC,EAAsB,IAAXu/B,EAAe,OAAS,WAAW,KAAA,EAAA,IAAA,MAAA,OAAA0e,EAAAz9B,OAAA,GAAAu9B,OAC3E,OAAAG,SAAAA,EAAAC,GAAA,OAAAL,EAAAjiC,MAAAnjB,KAAAgD,UAAA,CAAA,CAX2C,GAY5C,CAACsgD,GAAsBz0B,EAAOugB,KAG3BuV,GAAgBzmC,UACnBymC,GAAgBzmC,QAAUimB,GAAmB,CAC3Ch/B,GAAI,YACJ4wB,oBAAqB,EACrBkD,aAAa,EACbrY,aAAc,CACZ8Y,MAAOgoB,GACP3vB,QAAS,CACPgjB,kBAAmB,KAGvBvjB,SAAUwG,QAAQxG,GAClB9zB,UAAAA,EACAw2B,cAAAA,SAAcp3B,GACZulD,GAASvlD,EAAM6R,MAChB,EACDyrB,WAAAA,SAAUsrB,GAAwD,IAArDhsB,EAAKgsB,EAALhsB,MAAc6lB,EAAYmG,EAAnB/2C,MAAqB8kB,EAAUiyB,EAAVjyB,WAAY4K,EAASqnB,EAATrnB,UACnD,IAAK3E,EAAO,CACV,IAAMisB,EAjbY,SAAHxqD,GAM0D,IALjF09C,EAAc19C,EAAd09C,eACAD,EAAgBz9C,EAAhBy9C,iBACAgH,EAAgBzkD,EAAhBykD,iBACArE,EAAOpgD,EAAPogD,QAGA,OAF0BpgD,EAA1BqmD,2BAGS,GAGwD,CAC/D,CACEzpB,SAAU,iBACV/F,SAAAA,SAAQ9D,GAAwB,IAArB/mB,EAAI+mB,EAAJ/mB,KAAMmhB,EAAK4F,EAAL5F,MACfs3B,EAAiBz4C,GACZ6vC,GAAgB1uB,IACnBizB,GAEH,EACD5jB,WAAAA,SAAU95B,GACR,OADeA,EAAJsJ,KACCwK,GACb,EACDqiB,SAAQ,WACN,OAAO6kB,EAAesD,QACxB,GAEF,CACEpkB,SAAU,mBACV/F,SAAAA,SAAQxzB,GAAwB,IAArB2I,EAAI3I,EAAJ2I,KAAMmhB,EAAK9pB,EAAL8pB,MACfs3B,EAAiBz4C,GACZ6vC,GAAgB1uB,IACnBizB,GAEH,EACD5jB,WAAAA,SAAUjH,GACR,OADeA,EAAJvpB,KACCwK,GACb,EACDqiB,SAAQ,WACN,OAAO4kB,EAAiBuD,QAC1B,GAKN,CAoYiCyJ,CAAoB,CACzC/M,eAAAA,GACAD,iBAAAA,GACAgH,iBAAAA,GACArE,QAAAA,EACAiG,2BAAAA,EACAxM,eAAAA,IAGI6Q,EACJ7Q,EACI,CACE,CACEjd,SAAU,sBACV/D,SAAQ,WACN,OAAIwtB,EACK,GAEFpS,GAAc+M,QACtB,EACDnqB,SAAAA,SAAQ8zB,GAAiB,IAAd3+C,EAAI2+C,EAAJ3+C,KACLA,EAAK8I,WACPgY,GAAY9gB,EAAK8I,UACjBwjC,GAAc,GAElB,IAGJ,GACN,MAAA,GAAAv1C,OAAA2tB,EAAW85B,GAAmBE,EAChC,CAEA,IAAME,EAA4C,CAAEh0B,QAASwtB,EAAaxtB,SAGpEi0B,EAAwB1G,GAAkB,CAC9C5lB,MAAAA,EACA/qB,MAAOo3C,EACPtyB,WAAAA,EACA4K,UAAAA,EACAjC,aAAAA,GACAnL,UAAAA,EACAuuB,iBAAAA,EACAC,cAAAA,GACAjuB,SAAUwG,QAAQxG,GAClB3C,MAAAA,EACAC,OAAAA,EACAgoB,mBAAAA,EACA6I,eAAAA,EACAC,iBAAAA,GACArE,QAAAA,IAII0K,EAA+DjR,EACjE,CACE,CACEjd,SAAU,QACV/D,SAAQ,WAwBN,MAAO,CArB+B,CACpC51B,KAAM,QACNs7B,MAAAA,EACA4qB,mBAAoB,GACpB/5B,SAAyB,gBACzBtjB,QAAS,KACT0K,IAAK,GACLqyC,OAAQ,KACR1N,UAAW,CACTkB,KAAM,SACN+I,KAAM7mB,EACNuqB,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,KAAM,MAERhnB,iBAAkB,CAAS,EAC3B2e,eAAgB,CAAS,EACzB7F,mBAAoB,MAGvB,EACDnkB,SAAAA,SAAQk0B,GAAiB,IAAd/+C,EAAI++C,EAAJ/+C,KACS,UAAdA,EAAK/I,MAAoB+I,EAAKuyB,OAChCkrB,IAAkB,EAAMz9C,EAAKuyB,MAEjC,IAGJ,GAGJ,OAAOssB,EAAsBhyC,MAAK,SAACmyC,GACjC,MAAA,GAAAjoD,OAAW+nD,EAAWp6B,EAAKs6B,GAC7B,GACF,KAIJ,IC1kB0BhrD,GAAGkhC,GD0kBvB+pB,GAAezB,GAAgBzmC,QAE7BohB,GAA+C8mB,GAA/C9mB,oBAAqBe,GAA0B+lB,GAA1B/lB,aAAcrC,GAAYooB,GAAZpoB,SExkBtC,SAAuB7iC,GAKA,IAJ5BmkC,EAAmBnkC,EAAnBmkC,oBACAI,EAAYvkC,EAAZukC,aACAD,EAAWtkC,EAAXskC,YACAD,EAAYrkC,EAAZqkC,aAEAhlC,EAAM2B,WAAU,WACd,GAAMujC,GAAgBD,GAAeD,EAArC,CAIA,IAAA6mB,EAAsC/mB,EAAoB,CACxDI,aAAAA,EACAD,YAAAA,EACAD,aAAAA,IAHMQ,EAAYqmB,EAAZrmB,aAAcE,EAAWmmB,EAAXnmB,YAStB,OAHArhC,OAAOC,iBAAiB,aAAckhC,GACtCnhC,OAAOC,iBAAiB,YAAaohC,GAE9B,WACLrhC,OAAOI,oBAAoB,aAAc+gC,GACzCnhC,OAAOI,oBAAoB,YAAaihC,EACzC,CAdD,CAeD,GAAE,CAACZ,EAAqBI,EAAcD,EAAaD,GACtD,CFijBE8mB,CAAe,CACbhnB,oBAAAA,GACAI,aAAc8iB,GAAYtkC,QAC1BuhB,YAAa8iB,GAAerkC,QAC5BshB,aAAc2V,GAASj3B,UCllBC/iB,GDolBb,CAAEkhC,UAAWsR,GAAazvB,SCplBVme,GAASlhC,GAATkhC,UAC7B7hC,EAAM2B,WAAU,WACd,GAAKkgC,GAAL,CAIA,IAAMkqB,EAAoBlqB,GAAUuR,iBAClC,0EAEI4Y,EAAeD,EAAkB,GACjCE,EAAcF,EAAkBA,EAAkBtjD,OAAS,GAoBjE,OAFAo5B,GAAUv9B,iBAAiB,UAAW4nD,GAE/B,WACLrqB,GAAUp9B,oBAAoB,UAAWynD,EAC1C,CA5BD,CAQA,SAASA,EAAUp+B,GACC,QAAdA,EAAM9qB,MAIN8qB,EAAMoa,SACJrmC,SAAS8jC,gBAAkBqmB,IAC7Bl+B,EAAME,iBACNi+B,EAAYjrB,SAELn/B,SAAS8jC,gBAAkBsmB,IACpCn+B,EAAME,iBACNg+B,EAAahrB,SAEjB,CAOF,GAAG,CAACa,KDojBJpgC,EAAS,CAAEC,MAAAA,IAEX1B,EAAM2B,WAAU,WAGd,OAFAE,SAASioB,KAAKypB,UAAUzY,IAAI,qBAErB,WAAY,IAAAqxB,EAAAC,EACjBvqD,SAASioB,KAAKypB,UAAUC,OAAO,qBAIhB2Y,QAAfA,GAAAC,EAAA/nD,QAAOkmD,oBAAQ4B,GAAfA,EAAA3iD,KAAA4iD,EAAkB,EAAGvF,EACtB,CAGF,GAAE,IAEH7mD,EAAM8X,iBAAgB,WAEpB,IAAMu0C,EAAiBhoD,OAAOioD,WAAazqD,SAASioB,KAAKyiC,YAIzD,OAFA1qD,SAASioB,KAAK0iC,MAAMC,YAAW/oD,GAAAA,OAAM2oD,EAAkB,MAEhD,WACLxqD,SAASioB,KAAK0iC,MAAMC,YAAc,KACnC,CACF,GAAE,IAEHzsD,EAAM2B,WAAU,WACa0C,OAAOqoD,WAAW,sBAEtBtqB,UACrB6iB,GAAcvhC,QAAU,EAE3B,GAAE,IAEH1jB,EAAM2B,WAAU,WG9nBX,IAAkB2oD,EH+nBjBtC,GAAYtkC,UAAY4pB,IG7nBH,mBAFJgd,EHgoBLtC,GAAYtkC,SG9nBhB6mC,SACZD,EAAGC,SAAS,CAAEC,IAAK,EAAGC,SAAU,WAGhCH,EAAGI,UAAY,EH4nBhB,GAAE,CAACv2C,GAAM+qB,MAAOoO,IAOjBttC,EAAM2B,WAAU,WACVulD,GAAaz+C,OAAS,IACxB+6B,KAEImX,GAASj3B,SACXi3B,GAASj3B,QAAQsd,QAGvB,GAAG,CAACkmB,GAAc1jB,KAKlBxjC,EAAM2B,WAAU,WACd,SAASgrD,IACP,GAAI7E,GAASpkC,QAAS,CACpB,IAAMkpC,EAA0B,IAArBvoD,OAAOwoD,YAClB/E,GAASpkC,QAAQ8oC,MAAMM,YAAY,iBAAgBppD,GAAAA,OAAKkpD,QAC1D,CACF,CAMA,OAJAD,IAEAtoD,OAAOC,iBAAiB,SAAUqoD,GAE3B,WACLtoD,OAAOI,oBAAoB,SAAUkoD,EACtC,CACF,GAAE,IAIH3sD,EAAM2B,WAAU,WACT2rC,IACHse,GAAapoB,UACb/V,GAAY,IAEf,GAAE,CAAC6f,EAAese,GAAcn+B,KAGjC,IAAIs/B,IAAwB,EACtBpO,GAAiBxqC,GAAM4a,YAAYkV,MAAK,SAAChV,GAAU,OAAKA,EAAWC,MAAMzmB,OAAS,KAKxF,MAJqB,SAAjB0L,GAAMgO,SAAwC,IAAnBw8B,IAAmD,IAAvBxqC,GAAM+qB,MAAMz2B,QAAiB6kC,IACtFyf,IAAwB,GAIxB/sD,EAAAC,cAAA,MAAA0D,EAAA,CACExB,IAAKgxC,IACDtN,GAAa,CAAE,iBAAiB,IAAO,CAC3C5kC,UAAW,CACT,YACA,sBACiB,YAAjBkT,GAAMgO,QAAwB,+BACb,UAAjBhO,GAAMgO,QAAsB,gCAE3B7Z,OAAOk1B,SACPC,KAAK,KACRnxB,KAAK,SACL0kC,SAAU,EACVvL,YAAa,SAAC3X,GACRA,EAAM/W,SAAW+W,EAAMuZ,eACzB0Z,GAEJ,IAEA/gD,EAAAC,cAAA,MAAA,CAAKgB,UAAU,kBAAkBkB,IAAK2lD,IACpC9nD,EAAAC,cAAA,SAAA,CAAQgB,UAAU,sBAAsBkB,IAAK4lD,IAC3C/nD,EAAAC,cAACi/C,GAASv7C,KACJioD,GAAY,CAChBz3C,MAAOA,GACPyqB,YAAaA,GAAe,cAC5BC,UAAmC,IAAxBqoB,GAAaz+C,OACxBkyC,SAAUA,GACVwF,gBAAiB3iB,QAAQ0pB,KAAiBA,KAAiBe,GAC3D5lD,aAAcqlD,EACdpa,cAAeA,EACfoT,YAAav+B,GACb4+B,QAASA,EACT9H,cAAeA,EACf4H,WAAY,SAAC3hB,GACXkrB,IAAkB,EAAMlrB,EAC1B,MAIH6tB,IACC/sD,EAAAC,cAAA,MAAA,CAAKgB,UAAU,qBAAqBkB,IAAK6lD,IACvChoD,EAAAC,cAACq+C,GAAW36C,KACNioD,GAAY,CAChBn1B,UAAWA,EACXtiB,MAAOA,GACPsnC,aAAcA,EACd0B,uBAAwBA,EACxB6J,2BAA4BA,EAC5B3I,eAAgBA,GAChBD,iBAAkBA,GAClBxJ,cAAeA,GACf+F,SAAUA,GACVt4C,aAAculD,GACdhN,qBAAsBA,EACtBtN,cAAeA,EACfkN,eAAgBA,EAChB/kC,SAAUA,GACVg/B,iBAAkBA,GAClB+J,gBAAiBA,GACjBr8B,OAAQA,GACRw8B,eAAgBA,GAChB1F,cAAeA,EACfuC,YAAa,SAAC7uC,EAAMmhB,GAElB,GAAkB,UAAdnhB,EAAK/I,MAAoB+I,EAAKuyB,MAShC,MAPoB,WAAhBvyB,EAAK68C,QAAuB,aAAc78C,GAC5C8gB,GAAY9gB,EAAK8I,UACjBwjC,GAAc,IAEdmR,IAAkB,EAAMz9C,EAAKuyB,YAE/BpR,EAAME,iBAKRg8B,GAAmBr9C,GAEnBy4C,GAAiBz4C,GACZ6vC,GAAgB1uB,IACnBizB,GAEF,EACFlM,WAAY8V,OAIlB3qD,EAAAC,cAAA,SAAA,CAAQgB,UAAU,oBAChBjB,EAAAC,cAACmtC,GAAM,CAAC/qC,aAAcmlD,EAAoBla,cAAeA,MAKnE,CInwBO,SAAS0f,GAA0BrsD,GAQA,IAPxCq4B,EAAMr4B,EAANq4B,OACAi0B,EAAMtsD,EAANssD,OACAlM,EAAOpgD,EAAPogD,QACA1d,EAAO1iC,EAAP0iC,QACAiK,EAAa3sC,EAAb2sC,cACA2L,EAAat4C,EAAbs4C,cACAiU,EAAevsD,EAAfusD,gBAEAltD,EAAM2B,WAAU,WACd,SAAS6lC,EAAU1Z,GAA4B,IAAAq/B,EAC7C,IAAIn0B,GAAyB,WAAflL,EAAM3hB,OAAqBmhC,EAKzC,MACkB,WAAfxf,EAAM3hB,MAAqB6sB,GAKE,OAApBm0B,QAATA,EAAAr/B,EAAM9qB,WAANmqD,IAASA,OAATA,EAAAA,EAAWzS,iBAA0B5sB,EAAMka,SAAWla,EAAMma,WA7BrE,SAA0Bna,GACxB,IAAMs/B,EAAUt/B,EAAMu/B,eAAe,GAC/BnS,EAAUkS,EAAQlS,QAExB,OAAOkS,EAAQE,mBAAiC,UAAZpS,GAAmC,WAAZA,GAAoC,aAAZA,CACrF,CA2BUqS,CAAiBz/B,IAAwB,MAAdA,EAAM9qB,MAAgBg2B,GAEnDlL,EAAME,sBAEFgL,EACF+nB,IACUl/C,SAASioB,KAAKypB,UAAUhO,SAAS,sBAG3C0nB,WAMAC,GAAmBA,EAAgBxpC,UAAY7hB,SAAS8jC,eAAiBtC,GACvE,cAAclgC,KAAK8vB,OAAOu6B,aAAa1/B,EAAM2/B,WAC/CpqB,EAAQvV,IA9BVmrB,GAAc,EAiClB,CAIA,OAFA50C,OAAOC,iBAAiB,UAAWkjC,GAE5B,WACLnjC,OAAOI,oBAAoB,UAAW+iC,EACvC,CACH,GAAG,CAACxO,EAAQi0B,EAAQlM,EAAS1d,EAAS6pB,EAAiB5f,EAAe2L,GACxE,aCJO,SAAkBt4C,GAA4C,IAAA+sD,EAAAC,EAAAC,EAY/CC,EAIDC,EAhBUxrD,EAAKqB,EAAA,CAAA,uEAAAoqD,CAAAptD,GAAAA,IAC5BusD,EAAkBltD,EAAMojB,OAA0B,MACPi0B,EAAAv0C,EAArB9C,EAAM+C,UAAS,GAAM,GAA1Ci2B,EAAMqe,EAAA,GAAEpX,EAASoX,EAAA,GACoFE,EAAAz0C,EAApE9C,EAAM+C,UAA6BT,eAAAA,EAAO4kD,oBAAgBpmD,GAAU,GAArGomD,EAAY3P,EAAA,GAAEyW,EAAezW,EAAA,GAC2BG,EAAA50C,EAArB9C,EAAM+C,UAAS,GAAM,GAAxDuqC,EAAaoK,EAAA,GAAEuW,EAAgBvW,EAAA,GAElCwW,GACF5rD,iBAAKorD,EAALprD,EAAOD,oBAAYvB,IAAA4sD,GAAO,QAAPA,EAAnBA,EAAqBS,aAAKT,IAAAA,GAAWA,QAAXA,EAA1BA,EAA4B/F,qBAAS+F,SAArCA,EAAuCU,mBAAmB9rD,aAAKxB,EAALwB,EAAOs8B,cAAe,cAG5E4b,EAAiBhd,QAAQl7B,aAAAA,EAAAA,EAAOikD,OAElC/L,IACF0T,GAAqB5rD,SAAmB,QAAdurD,EAALvrD,EAAOD,oBAAYvB,IAAA+sD,GAAOA,QAAPA,EAAnBA,EAAqBM,aAAKN,IAAAA,GAAW,QAAXA,EAA1BA,EAA4BlG,iBAA5BkG,IAAqCA,OAArCA,EAAAA,EAAuCO,kBAAmB,oCAG7E9gB,IACF4gB,GAAqB5rD,SAAmB,QAAdwrD,EAALxrD,EAAOD,oBAAYvB,IAAAgtD,GAAOA,QAAPA,EAAnBA,EAAqBK,aAAKL,IAAAA,GAAW,QAAXA,EAA1BA,EAA4BnG,iBAA5BmG,IAAqCA,OAArCA,EAAAA,EAAuCO,uBAAwB,2BAGtF,IAAMpV,EAAgBj5C,EAAMmlB,aAC1B,SAACmpC,GACCL,EAAiBK,EACnB,GACA,CAACL,IAGGhB,EAASjtD,EAAMmlB,aAAY,WAC/B8a,GAAU,EACZ,GAAG,CAACA,IAEE8gB,EAAU/gD,EAAMmlB,aAAY,WAChC8a,GAAU,GACV+tB,EAAgB1rD,eAAAA,EAAO4kD,cACnB5Z,GACF2gB,GAAiB,EAErB,GAAG,CAAChuB,EAAW39B,EAAM4kD,aAAc5Z,EAAe2gB,IAqBlD,OAXAjB,GAA2B,CACzBh0B,OAAAA,EACAi0B,OAAAA,EACAlM,QAAAA,EACA1d,QAZcrjC,EAAMmlB,aACpB,SAAC2I,GACCmS,GAAU,GACV+tB,EAAgBlgC,EAAM9qB,IACxB,GACA,CAACi9B,EAAW+tB,IAQZ1gB,cAAAA,EACA2L,cAAAA,EACAiU,gBAAAA,IAEFzrD,EAAS,CAAEC,MAAOY,EAAMZ,QAGtB1B,EAAAC,cAAAD,EAAA6D,SAAA,KACE7D,EAAAC,cAACgC,EAAe,CAACE,IAAK+qD,EAAiB7qD,aAAcC,SAAmBqrD,QAAdA,EAALrrD,EAAOD,oBAAPsrD,IAAmBA,OAAnBA,EAAAA,EAAqBlR,OAAQnU,QAAS2kB,IAE1Fj0B,GACCu1B,EAAAA,aACEvuD,EAAAC,cAACmmD,GAAcziD,KACTrB,EAAK,CACTs8B,YAAasvB,EACbrH,eAAgBxiD,OAAOmqD,QACvBtH,aAAcA,EACd7kD,aAAcC,SAAmBsrD,QAAdA,EAALtrD,EAAOD,oBAAPurD,IAAmBA,OAAnBA,EAAAA,EAAqBO,MACnC7gB,cAAeA,EACfkN,eAAgBA,EAChBvB,cAAeA,EACf8H,QAASA,KAEXl/C,SAASioB,MAInB","x_google_ignoreList":[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,76,97,100,101]}
1
+ {"version":3,"file":"index.js","sources":["../../src/icons/MetaKeysIcon.tsx","../../src/icons/SearchIcon.tsx","../../src/useTheme.tsx","../../src/DocSearchButton.tsx","../../../../node_modules/@ai-sdk/provider/dist/index.mjs","../../../../node_modules/secure-json-parse/index.js","../../../../node_modules/@ai-sdk/provider-utils/dist/index.mjs","../../../../node_modules/nanoid/non-secure/index.js","../../../../node_modules/zod-to-json-schema/dist/esm/parsers/string.js","../../../../node_modules/@ai-sdk/ui-utils/dist/index.mjs","../../../../node_modules/use-sync-external-store/shim/index.js","../../../../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../../../../node_modules/dequal/lite/index.mjs","../../../../node_modules/swr/dist/_internal/config-context-client-v7VOFo66.mjs","../../../../node_modules/swr/dist/_internal/events.mjs","../../../../node_modules/swr/dist/_internal/index.mjs","../../../../node_modules/swr/dist/_internal/constants.mjs","../../../../node_modules/swr/dist/index/index.mjs","../../../../node_modules/@ai-sdk/react/node_modules/throttleit/index.js","../../../../node_modules/@ai-sdk/react/dist/index.mjs","../../../../node_modules/@algolia/autocomplete-shared/dist/esm/debounce.js","../../../../node_modules/@algolia/autocomplete-shared/dist/esm/flatten.js","../../../../node_modules/@algolia/autocomplete-shared/dist/esm/generateAutocompleteId.js","../../../../node_modules/@algolia/autocomplete-shared/dist/esm/getItemsCount.js","../../../../node_modules/@algolia/autocomplete-shared/dist/esm/isEqual.js","../../../../node_modules/@algolia/autocomplete-shared/dist/esm/noop.js","../../../../node_modules/@algolia/autocomplete-shared/dist/esm/version.js","../../../../node_modules/@algolia/autocomplete-shared/dist/esm/userAgents.js","../../../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/createClickedEvent.js","../../../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/isModernInsightsClient.js","../../../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/createSearchInsightsApi.js","../../../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/createViewedEvents.js","../../../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/isAlgoliaInsightsHit.js","../../../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/createAlgoliaInsightsPlugin.js","../../../../node_modules/@algolia/autocomplete-shared/dist/esm/safelyRunOnBrowser.js","../../../../node_modules/@algolia/autocomplete-shared/dist/esm/createRef.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/createCancelablePromise.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/createCancelablePromiseList.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getNextActiveItemId.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getNormalizedSources.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getPluginSubmitPromise.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getActiveItem.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getAutocompleteElementId.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/isSamsung.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getNativeEvent.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/createStore.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/getAutocompleteSetters.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/getDefaultProps.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/reshape.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/resolve.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/mapToAlgoliaResponse.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/onInput.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/createConcurrentSafePromise.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/onKeyDown.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/getPropGetters.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/isOrContainsNode.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/metadata.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/getCompletion.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/stateReducer.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/createAutocomplete.js","../../src/constants.ts","../../src/askai.ts","../../src/AlgoliaLogo.tsx","../../src/Footer.tsx","../../src/Hit.tsx","../../src/icons/LoadingIcon.tsx","../../src/icons/SparklesIcon.tsx","../../src/icons/RecentIcon.tsx","../../src/icons/CloseIcon.tsx","../../src/icons/AlertIcon.tsx","../../src/icons/SelectIcon.tsx","../../src/icons/SourceIcon.tsx","../../src/icons/StarIcon.tsx","../../src/icons/ErrorIcon.tsx","../../src/icons/NoResultsIcon.tsx","../../src/AggregatedSearchBlock.tsx","../../../../node_modules/marked/lib/marked.esm.js","../../src/MemoizedMarkdown.tsx","../../src/AskAiScreen.tsx","../../src/utils/ai.ts","../../src/utils/groupConsecutiveToolResults.ts","../../src/ErrorScreen.tsx","../../src/NoResultsScreen.tsx","../../src/Snippet.tsx","../../src/Results.tsx","../../src/utils/groupBy.ts","../../src/utils/identity.ts","../../src/utils/isModifierEvent.ts","../../src/utils/noop.ts","../../src/utils/removeHighlightTags.ts","../../src/ResultsScreen.tsx","../../src/StartScreen.tsx","../../src/ScreenState.tsx","../../src/icons/BackIcon.tsx","../../src/SearchBox.tsx","../../src/utils/storage.ts","../../src/stored-searches.ts","../../../../node_modules/@algolia/client-common/dist/common.js","../../src/version.ts","../../src/useSearchClient.ts","../../../../node_modules/algoliasearch/dist/lite/builds/browser.js","../../../../node_modules/@algolia/requester-browser-xhr/dist/requester.xhr.js","../../src/DocSearchModal.tsx","../../src/useTrapFocus.ts","../../src/useTouchEvents.ts","../../src/utils/scrollTo.ts","../../src/useDocSearchKeyboardEvents.ts","../../src/DocSearch.tsx"],"sourcesContent":["import React, { type JSX } from 'react';\n\nexport function MetaKeyIcon(): JSX.Element {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M8.19531 8.76758H7.33398C7.02539 8.76758 6.74414 8.69531 6.49023 8.55078C6.23633 8.40234 6.0332 8.20312 5.88086 7.95312C5.73242 7.70312 5.6582 7.42188 5.6582 7.10938C5.6582 6.80078 5.73242 6.51953 5.88086 6.26562C6.0332 6.01172 6.23633 5.80859 6.49023 5.65625C6.74414 5.50391 7.02539 5.42773 7.33398 5.42773C7.64258 5.42773 7.92383 5.50391 8.17773 5.65625C8.43164 5.80859 8.63281 6.01172 8.78125 6.26562C8.93359 6.51953 9.00977 6.80078 9.00977 7.10938V7.96484H10.9902V7.10938C10.9902 6.80078 11.0664 6.51953 11.2188 6.26562C11.3711 6.01172 11.5723 5.80859 11.8223 5.65625C12.0762 5.50391 12.3574 5.42773 12.666 5.42773C12.9746 5.42773 13.2559 5.50391 13.5098 5.65625C13.7637 5.80859 13.9648 6.01172 14.1133 6.26562C14.2656 6.51953 14.3418 6.80078 14.3418 7.10938C14.3418 7.42188 14.2656 7.70312 14.1133 7.95312C13.9648 8.20312 13.7637 8.40234 13.5098 8.55078C13.2559 8.69531 12.9746 8.76758 12.666 8.76758H11.8105V10.7773H12.666C12.9746 10.7773 13.2559 10.8516 13.5098 11C13.7637 11.1445 13.9648 11.3418 14.1133 11.5918C14.2656 11.8418 14.3418 12.123 14.3418 12.4355C14.3418 12.7441 14.2656 13.0254 14.1133 13.2793C13.9648 13.5332 13.7637 13.7363 13.5098 13.8887C13.2559 14.041 12.9746 14.1172 12.666 14.1172C12.3574 14.1172 12.0762 14.041 11.8223 13.8887C11.5723 13.7363 11.3711 13.5332 11.2188 13.2793C11.0664 13.0254 10.9902 12.7441 10.9902 12.4355V11.5801H9.00977V12.4355C9.00977 12.7441 8.93359 13.0254 8.78125 13.2793C8.63281 13.5332 8.43164 13.7363 8.17773 13.8887C7.92383 14.041 7.64258 14.1172 7.33398 14.1172C7.02539 14.1172 6.74414 14.041 6.49023 13.8887C6.23633 13.7363 6.0332 13.5332 5.88086 13.2793C5.73242 13.0254 5.6582 12.7441 5.6582 12.4355C5.6582 12.123 5.73242 11.8418 5.88086 11.5918C6.0332 11.3418 6.23633 11.1445 6.49023 11C6.74414 10.8516 7.02539 10.7773 7.33398 10.7773H8.19531V8.76758ZM7.33398 7.97656H8.19531V7.10938C8.19531 6.875 8.10938 6.67383 7.9375 6.50586C7.76953 6.33398 7.56836 6.24805 7.33398 6.24805C7.09961 6.24805 6.89648 6.33398 6.72461 6.50586C6.55664 6.67383 6.47266 6.875 6.47266 7.10938C6.47266 7.34766 6.55664 7.55273 6.72461 7.72461C6.89648 7.89258 7.09961 7.97656 7.33398 7.97656ZM12.666 7.97656C12.9004 7.97656 13.1016 7.89258 13.2695 7.72461C13.4414 7.55273 13.5273 7.34766 13.5273 7.10938C13.5273 6.875 13.4414 6.67383 13.2695 6.50586C13.1016 6.33398 12.9004 6.24805 12.666 6.24805C12.4316 6.24805 12.2305 6.33398 12.0625 6.50586C11.8945 6.67383 11.8105 6.875 11.8105 7.10938V7.97656H12.666ZM9.00977 10.7773H10.9902V8.76758H9.00977V10.7773ZM7.33398 11.5625C7.09961 11.5625 6.89648 11.6484 6.72461 11.8203C6.55664 11.9883 6.47266 12.1914 6.47266 12.4297C6.47266 12.6641 6.55664 12.8672 6.72461 13.0391C6.89648 13.207 7.09961 13.291 7.33398 13.291C7.56836 13.291 7.76953 13.207 7.9375 13.0391C8.10938 12.8672 8.19531 12.6641 8.19531 12.4297V11.5625H7.33398ZM12.666 11.5625H11.8105V12.4297C11.8105 12.6641 11.8945 12.8672 12.0625 13.0391C12.2305 13.207 12.4316 13.291 12.666 13.291C12.9004 13.291 13.1016 13.207 13.2695 13.0391C13.4414 12.8672 13.5273 12.6641 13.5273 12.4297C13.5273 12.1914 13.4414 11.9883 13.2695 11.8203C13.1016 11.6484 12.9004 11.5625 12.666 11.5625Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n\nexport function KKeyIcon(): JSX.Element {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M8.01562 11.1758L7.95703 9.65234H8.22656L11.9297 5.54492H13.2539L9.75586 9.32422L9.26367 9.79883L8.01562 11.1758ZM7.07812 14V5.54492H8.13281V14H7.07812ZM12.1992 14L9.04102 9.78711L9.76758 9.05469L13.5645 14H12.1992Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n\nexport function ControlKeyIcon(): JSX.Element {\n return (\n <svg width=\"33\" height=\"20\" viewBox=\"0 0 33 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M10.4824 14.1992C9.7168 14.1992 9.05469 14.0195 8.49609 13.6602C7.9375 13.3008 7.50586 12.791 7.20117 12.1309C6.90039 11.4707 6.75 10.6875 6.75 9.78125V9.76953C6.75 8.85938 6.90039 8.07422 7.20117 7.41406C7.50586 6.75391 7.93555 6.24414 8.49023 5.88477C9.04883 5.52539 9.71094 5.3457 10.4766 5.3457C11.0703 5.3457 11.6094 5.46289 12.0938 5.69727C12.582 5.92773 12.9844 6.25 13.3008 6.66406C13.6172 7.07422 13.8164 7.54883 13.8984 8.08789L13.8926 8.09961H12.832L12.8262 8.08789C12.7324 7.72461 12.5742 7.41211 12.3516 7.15039C12.1289 6.88477 11.8574 6.67969 11.5371 6.53516C11.2207 6.39062 10.8672 6.31836 10.4766 6.31836C9.9375 6.31836 9.46875 6.45898 9.07031 6.74023C8.67578 7.02148 8.37109 7.41992 8.15625 7.93555C7.94141 8.45117 7.83398 9.0625 7.83398 9.76953V9.78125C7.83398 10.4844 7.94141 11.0938 8.15625 11.6094C8.37109 12.125 8.67578 12.5234 9.07031 12.8047C9.46875 13.0859 9.93945 13.2266 10.4824 13.2266C10.877 13.2266 11.2344 13.1641 11.5547 13.0391C11.875 12.9102 12.1445 12.7285 12.3633 12.4941C12.582 12.2559 12.7344 11.9746 12.8203 11.6504L12.832 11.6387H13.8984V11.6504C13.8047 12.166 13.6016 12.6152 13.2891 12.998C12.9766 13.377 12.5801 13.6719 12.0996 13.8828C11.623 14.0938 11.084 14.1992 10.4824 14.1992ZM17.7832 14.0469C17.1348 14.0469 16.6641 13.916 16.3711 13.6543C16.082 13.3926 15.9375 12.9609 15.9375 12.3594V8.52734H14.9414V7.68359H15.9375V6.04883H16.9922V7.68359H18.375V8.52734H16.9922V12.1016C16.9922 12.4727 17.0625 12.7402 17.2031 12.9043C17.3438 13.0645 17.5781 13.1445 17.9062 13.1445C17.9961 13.1445 18.0723 13.1426 18.1348 13.1387C18.2012 13.1348 18.2812 13.1289 18.375 13.1211V13.9883C18.2773 14.0039 18.1797 14.0176 18.082 14.0293C17.9844 14.041 17.8848 14.0469 17.7832 14.0469ZM19.8984 14V7.68359H20.918V8.62109H21.0117C21.1328 8.28906 21.3379 8.03125 21.627 7.84766C21.916 7.66406 22.2734 7.57227 22.6992 7.57227C22.7969 7.57227 22.8926 7.57812 22.9863 7.58984C23.084 7.59766 23.1582 7.60547 23.209 7.61328V8.60352C23.1035 8.58398 23 8.57031 22.8984 8.5625C22.8008 8.55078 22.6953 8.54492 22.582 8.54492C22.2578 8.54492 21.9707 8.60938 21.7207 8.73828C21.4707 8.86719 21.2734 9.04688 21.1289 9.27734C20.9883 9.50781 20.918 9.77734 20.918 10.0859V14H19.8984ZM24.5273 14V5.17578H25.5469V14H24.5273Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n","import React, { type JSX } from 'react';\n\ninterface SearchIconProps {\n size?: number;\n color?: string;\n}\n\nexport function SearchIcon({ size = 20, color = 'currentColor' }: SearchIconProps): JSX.Element {\n return (\n <svg width={size} height={size} className=\"DocSearch-Search-Icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" stroke={color} fill=\"none\" strokeWidth=\"1.4\" />\n <path d=\"m21 21-4.3-4.3\" stroke={color} fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n","import { useEffect } from 'react';\n\nimport type { DocSearchTheme } from './types';\n\nexport interface UseThemeProps {\n theme?: DocSearchTheme;\n}\n\nexport const useTheme = ({ theme }: UseThemeProps): void => {\n useEffect(() => {\n if (theme) {\n const previousTheme = document.documentElement.dataset.theme;\n if (theme !== previousTheme) {\n document.documentElement.dataset.theme = theme;\n return (): void => {\n if (previousTheme === undefined) delete document.documentElement.dataset.theme;\n else document.documentElement.dataset.theme = previousTheme;\n };\n }\n }\n return undefined;\n }, [theme]);\n};\n","import React, { useEffect, useState, type JSX } from 'react';\n\nimport { ControlKeyIcon, KKeyIcon, MetaKeyIcon } from './icons/MetaKeysIcon';\nimport { SearchIcon } from './icons/SearchIcon';\nimport type { DocSearchTheme } from './types';\nimport { useTheme } from './useTheme';\n\nexport type ButtonTranslations = Partial<{\n buttonText: string;\n buttonAriaLabel: string;\n}>;\n\nexport type DocSearchButtonProps = React.ComponentProps<'button'> & {\n theme?: DocSearchTheme;\n translations?: ButtonTranslations;\n};\n\nconst ACTION_KEY_DEFAULT = 'Ctrl' as const;\nconst ACTION_KEY_APPLE = '⌘' as const;\n\nfunction isAppleDevice(): boolean {\n return /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform);\n}\n\nexport const DocSearchButton = React.forwardRef<HTMLButtonElement, DocSearchButtonProps>(\n ({ translations = {}, ...props }, ref) => {\n const { buttonText = 'Search', buttonAriaLabel = 'Search' } = translations;\n\n const [key, setKey] = useState<typeof ACTION_KEY_APPLE | typeof ACTION_KEY_DEFAULT | null>(null);\n useTheme({ theme: props.theme });\n useEffect(() => {\n if (typeof navigator !== 'undefined') {\n isAppleDevice() ? setKey(ACTION_KEY_APPLE) : setKey(ACTION_KEY_DEFAULT);\n }\n }, []);\n\n const [actionKeyReactsTo, actionKeyAltText, actionKeyChild] =\n key === ACTION_KEY_DEFAULT\n ? // eslint-disable-next-line react/jsx-key -- false flag\n ([ACTION_KEY_DEFAULT, 'Control', <ControlKeyIcon />] as const)\n : // eslint-disable-next-line react/jsx-key -- false flag\n (['Meta', 'Meta', <MetaKeyIcon />] as const);\n\n const shortcut = `${actionKeyAltText}+k`;\n return (\n <button\n type=\"button\"\n className=\"DocSearch DocSearch-Button\"\n aria-label={`${buttonAriaLabel} (${shortcut})`}\n aria-keyshortcuts={shortcut}\n {...props}\n ref={ref}\n >\n <span className=\"DocSearch-Button-Container\">\n <SearchIcon />\n <span className=\"DocSearch-Button-Placeholder\">{buttonText}</span>\n </span>\n\n <span className=\"DocSearch-Button-Keys\">\n {key !== null && (\n <>\n <DocSearchButtonKey reactsToKey={actionKeyReactsTo}>{actionKeyChild}</DocSearchButtonKey>\n <DocSearchButtonKey reactsToKey=\"k\">\n <KKeyIcon />\n </DocSearchButtonKey>\n </>\n )}\n </span>\n </button>\n );\n },\n);\n\ntype DocSearchButtonKeyProps = {\n reactsToKey?: string;\n};\n\nfunction DocSearchButtonKey({ reactsToKey, children }: React.PropsWithChildren<DocSearchButtonKeyProps>): JSX.Element {\n const [isKeyDown, setIsKeyDown] = useState(false);\n\n useEffect(() => {\n if (!reactsToKey) {\n return undefined;\n }\n\n function handleKeyDown(e: KeyboardEvent): void {\n if (e.key === reactsToKey) {\n setIsKeyDown(true);\n }\n }\n\n function handleKeyUp(e: KeyboardEvent): void {\n if (\n e.key === reactsToKey ||\n // keyup doesn't fire when Command is held down,\n // workaround is to mark key as also released when Command is released\n // See https://stackoverflow.com/a/73419500\n e.key === 'Meta'\n ) {\n setIsKeyDown(false);\n }\n }\n\n window.addEventListener('keydown', handleKeyDown);\n window.addEventListener('keyup', handleKeyUp);\n\n return (): void => {\n window.removeEventListener('keydown', handleKeyDown);\n window.removeEventListener('keyup', handleKeyUp);\n };\n }, [reactsToKey]);\n\n return (\n <kbd\n className={\n isKeyDown\n ? 'DocSearch-Button-Key DocSearch-Button-Key--pressed'\n : 'DocSearch-Button-Key' + (reactsToKey === 'Ctrl' ? ' DocSearch-Button-Key--ctrl' : '')\n }\n >\n {children}\n </kbd>\n );\n}\n","// src/errors/ai-sdk-error.ts\nvar marker = \"vercel.ai.error\";\nvar symbol = Symbol.for(marker);\nvar _a;\nvar _AISDKError = class _AISDKError extends Error {\n /**\n * Creates an AI SDK Error.\n *\n * @param {Object} params - The parameters for creating the error.\n * @param {string} params.name - The name of the error.\n * @param {string} params.message - The error message.\n * @param {unknown} [params.cause] - The underlying cause of the error.\n */\n constructor({\n name: name14,\n message,\n cause\n }) {\n super(message);\n this[_a] = true;\n this.name = name14;\n this.cause = cause;\n }\n /**\n * Checks if the given error is an AI SDK Error.\n * @param {unknown} error - The error to check.\n * @returns {boolean} True if the error is an AI SDK Error, false otherwise.\n */\n static isInstance(error) {\n return _AISDKError.hasMarker(error, marker);\n }\n static hasMarker(error, marker15) {\n const markerSymbol = Symbol.for(marker15);\n return error != null && typeof error === \"object\" && markerSymbol in error && typeof error[markerSymbol] === \"boolean\" && error[markerSymbol] === true;\n }\n};\n_a = symbol;\nvar AISDKError = _AISDKError;\n\n// src/errors/api-call-error.ts\nvar name = \"AI_APICallError\";\nvar marker2 = `vercel.ai.error.${name}`;\nvar symbol2 = Symbol.for(marker2);\nvar _a2;\nvar APICallError = class extends AISDKError {\n constructor({\n message,\n url,\n requestBodyValues,\n statusCode,\n responseHeaders,\n responseBody,\n cause,\n isRetryable = statusCode != null && (statusCode === 408 || // request timeout\n statusCode === 409 || // conflict\n statusCode === 429 || // too many requests\n statusCode >= 500),\n // server error\n data\n }) {\n super({ name, message, cause });\n this[_a2] = true;\n this.url = url;\n this.requestBodyValues = requestBodyValues;\n this.statusCode = statusCode;\n this.responseHeaders = responseHeaders;\n this.responseBody = responseBody;\n this.isRetryable = isRetryable;\n this.data = data;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker2);\n }\n};\n_a2 = symbol2;\n\n// src/errors/empty-response-body-error.ts\nvar name2 = \"AI_EmptyResponseBodyError\";\nvar marker3 = `vercel.ai.error.${name2}`;\nvar symbol3 = Symbol.for(marker3);\nvar _a3;\nvar EmptyResponseBodyError = class extends AISDKError {\n // used in isInstance\n constructor({ message = \"Empty response body\" } = {}) {\n super({ name: name2, message });\n this[_a3] = true;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker3);\n }\n};\n_a3 = symbol3;\n\n// src/errors/get-error-message.ts\nfunction getErrorMessage(error) {\n if (error == null) {\n return \"unknown error\";\n }\n if (typeof error === \"string\") {\n return error;\n }\n if (error instanceof Error) {\n return error.message;\n }\n return JSON.stringify(error);\n}\n\n// src/errors/invalid-argument-error.ts\nvar name3 = \"AI_InvalidArgumentError\";\nvar marker4 = `vercel.ai.error.${name3}`;\nvar symbol4 = Symbol.for(marker4);\nvar _a4;\nvar InvalidArgumentError = class extends AISDKError {\n constructor({\n message,\n cause,\n argument\n }) {\n super({ name: name3, message, cause });\n this[_a4] = true;\n this.argument = argument;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker4);\n }\n};\n_a4 = symbol4;\n\n// src/errors/invalid-prompt-error.ts\nvar name4 = \"AI_InvalidPromptError\";\nvar marker5 = `vercel.ai.error.${name4}`;\nvar symbol5 = Symbol.for(marker5);\nvar _a5;\nvar InvalidPromptError = class extends AISDKError {\n constructor({\n prompt,\n message,\n cause\n }) {\n super({ name: name4, message: `Invalid prompt: ${message}`, cause });\n this[_a5] = true;\n this.prompt = prompt;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker5);\n }\n};\n_a5 = symbol5;\n\n// src/errors/invalid-response-data-error.ts\nvar name5 = \"AI_InvalidResponseDataError\";\nvar marker6 = `vercel.ai.error.${name5}`;\nvar symbol6 = Symbol.for(marker6);\nvar _a6;\nvar InvalidResponseDataError = class extends AISDKError {\n constructor({\n data,\n message = `Invalid response data: ${JSON.stringify(data)}.`\n }) {\n super({ name: name5, message });\n this[_a6] = true;\n this.data = data;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker6);\n }\n};\n_a6 = symbol6;\n\n// src/errors/json-parse-error.ts\nvar name6 = \"AI_JSONParseError\";\nvar marker7 = `vercel.ai.error.${name6}`;\nvar symbol7 = Symbol.for(marker7);\nvar _a7;\nvar JSONParseError = class extends AISDKError {\n constructor({ text, cause }) {\n super({\n name: name6,\n message: `JSON parsing failed: Text: ${text}.\nError message: ${getErrorMessage(cause)}`,\n cause\n });\n this[_a7] = true;\n this.text = text;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker7);\n }\n};\n_a7 = symbol7;\n\n// src/errors/load-api-key-error.ts\nvar name7 = \"AI_LoadAPIKeyError\";\nvar marker8 = `vercel.ai.error.${name7}`;\nvar symbol8 = Symbol.for(marker8);\nvar _a8;\nvar LoadAPIKeyError = class extends AISDKError {\n // used in isInstance\n constructor({ message }) {\n super({ name: name7, message });\n this[_a8] = true;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker8);\n }\n};\n_a8 = symbol8;\n\n// src/errors/load-setting-error.ts\nvar name8 = \"AI_LoadSettingError\";\nvar marker9 = `vercel.ai.error.${name8}`;\nvar symbol9 = Symbol.for(marker9);\nvar _a9;\nvar LoadSettingError = class extends AISDKError {\n // used in isInstance\n constructor({ message }) {\n super({ name: name8, message });\n this[_a9] = true;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker9);\n }\n};\n_a9 = symbol9;\n\n// src/errors/no-content-generated-error.ts\nvar name9 = \"AI_NoContentGeneratedError\";\nvar marker10 = `vercel.ai.error.${name9}`;\nvar symbol10 = Symbol.for(marker10);\nvar _a10;\nvar NoContentGeneratedError = class extends AISDKError {\n // used in isInstance\n constructor({\n message = \"No content generated.\"\n } = {}) {\n super({ name: name9, message });\n this[_a10] = true;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker10);\n }\n};\n_a10 = symbol10;\n\n// src/errors/no-such-model-error.ts\nvar name10 = \"AI_NoSuchModelError\";\nvar marker11 = `vercel.ai.error.${name10}`;\nvar symbol11 = Symbol.for(marker11);\nvar _a11;\nvar NoSuchModelError = class extends AISDKError {\n constructor({\n errorName = name10,\n modelId,\n modelType,\n message = `No such ${modelType}: ${modelId}`\n }) {\n super({ name: errorName, message });\n this[_a11] = true;\n this.modelId = modelId;\n this.modelType = modelType;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker11);\n }\n};\n_a11 = symbol11;\n\n// src/errors/too-many-embedding-values-for-call-error.ts\nvar name11 = \"AI_TooManyEmbeddingValuesForCallError\";\nvar marker12 = `vercel.ai.error.${name11}`;\nvar symbol12 = Symbol.for(marker12);\nvar _a12;\nvar TooManyEmbeddingValuesForCallError = class extends AISDKError {\n constructor(options) {\n super({\n name: name11,\n message: `Too many values for a single embedding call. The ${options.provider} model \"${options.modelId}\" can only embed up to ${options.maxEmbeddingsPerCall} values per call, but ${options.values.length} values were provided.`\n });\n this[_a12] = true;\n this.provider = options.provider;\n this.modelId = options.modelId;\n this.maxEmbeddingsPerCall = options.maxEmbeddingsPerCall;\n this.values = options.values;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker12);\n }\n};\n_a12 = symbol12;\n\n// src/errors/type-validation-error.ts\nvar name12 = \"AI_TypeValidationError\";\nvar marker13 = `vercel.ai.error.${name12}`;\nvar symbol13 = Symbol.for(marker13);\nvar _a13;\nvar _TypeValidationError = class _TypeValidationError extends AISDKError {\n constructor({ value, cause }) {\n super({\n name: name12,\n message: `Type validation failed: Value: ${JSON.stringify(value)}.\nError message: ${getErrorMessage(cause)}`,\n cause\n });\n this[_a13] = true;\n this.value = value;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker13);\n }\n /**\n * Wraps an error into a TypeValidationError.\n * If the cause is already a TypeValidationError with the same value, it returns the cause.\n * Otherwise, it creates a new TypeValidationError.\n *\n * @param {Object} params - The parameters for wrapping the error.\n * @param {unknown} params.value - The value that failed validation.\n * @param {unknown} params.cause - The original error or cause of the validation failure.\n * @returns {TypeValidationError} A TypeValidationError instance.\n */\n static wrap({\n value,\n cause\n }) {\n return _TypeValidationError.isInstance(cause) && cause.value === value ? cause : new _TypeValidationError({ value, cause });\n }\n};\n_a13 = symbol13;\nvar TypeValidationError = _TypeValidationError;\n\n// src/errors/unsupported-functionality-error.ts\nvar name13 = \"AI_UnsupportedFunctionalityError\";\nvar marker14 = `vercel.ai.error.${name13}`;\nvar symbol14 = Symbol.for(marker14);\nvar _a14;\nvar UnsupportedFunctionalityError = class extends AISDKError {\n constructor({\n functionality,\n message = `'${functionality}' functionality not supported.`\n }) {\n super({ name: name13, message });\n this[_a14] = true;\n this.functionality = functionality;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker14);\n }\n};\n_a14 = symbol14;\n\n// src/json-value/is-json.ts\nfunction isJSONValue(value) {\n if (value === null || typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n return true;\n }\n if (Array.isArray(value)) {\n return value.every(isJSONValue);\n }\n if (typeof value === \"object\") {\n return Object.entries(value).every(\n ([key, val]) => typeof key === \"string\" && isJSONValue(val)\n );\n }\n return false;\n}\nfunction isJSONArray(value) {\n return Array.isArray(value) && value.every(isJSONValue);\n}\nfunction isJSONObject(value) {\n return value != null && typeof value === \"object\" && Object.entries(value).every(\n ([key, val]) => typeof key === \"string\" && isJSONValue(val)\n );\n}\nexport {\n AISDKError,\n APICallError,\n EmptyResponseBodyError,\n InvalidArgumentError,\n InvalidPromptError,\n InvalidResponseDataError,\n JSONParseError,\n LoadAPIKeyError,\n LoadSettingError,\n NoContentGeneratedError,\n NoSuchModelError,\n TooManyEmbeddingValuesForCallError,\n TypeValidationError,\n UnsupportedFunctionalityError,\n getErrorMessage,\n isJSONArray,\n isJSONObject,\n isJSONValue\n};\n//# sourceMappingURL=index.mjs.map","'use strict'\n\nconst hasBuffer = typeof Buffer !== 'undefined'\nconst suspectProtoRx = /\"(?:_|\\\\u005[Ff])(?:_|\\\\u005[Ff])(?:p|\\\\u0070)(?:r|\\\\u0072)(?:o|\\\\u006[Ff])(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:_|\\\\u005[Ff])(?:_|\\\\u005[Ff])\"\\s*:/\nconst suspectConstructorRx = /\"(?:c|\\\\u0063)(?:o|\\\\u006[Ff])(?:n|\\\\u006[Ee])(?:s|\\\\u0073)(?:t|\\\\u0074)(?:r|\\\\u0072)(?:u|\\\\u0075)(?:c|\\\\u0063)(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:r|\\\\u0072)\"\\s*:/\n\nfunction _parse (text, reviver, options) {\n // Normalize arguments\n if (options == null) {\n if (reviver !== null && typeof reviver === 'object') {\n options = reviver\n reviver = undefined\n }\n }\n\n if (hasBuffer && Buffer.isBuffer(text)) {\n text = text.toString()\n }\n\n // BOM checker\n if (text && text.charCodeAt(0) === 0xFEFF) {\n text = text.slice(1)\n }\n\n // Parse normally, allowing exceptions\n const obj = JSON.parse(text, reviver)\n\n // Ignore null and non-objects\n if (obj === null || typeof obj !== 'object') {\n return obj\n }\n\n const protoAction = (options && options.protoAction) || 'error'\n const constructorAction = (options && options.constructorAction) || 'error'\n\n // options: 'error' (default) / 'remove' / 'ignore'\n if (protoAction === 'ignore' && constructorAction === 'ignore') {\n return obj\n }\n\n if (protoAction !== 'ignore' && constructorAction !== 'ignore') {\n if (suspectProtoRx.test(text) === false && suspectConstructorRx.test(text) === false) {\n return obj\n }\n } else if (protoAction !== 'ignore' && constructorAction === 'ignore') {\n if (suspectProtoRx.test(text) === false) {\n return obj\n }\n } else {\n if (suspectConstructorRx.test(text) === false) {\n return obj\n }\n }\n\n // Scan result for proto keys\n return filter(obj, { protoAction, constructorAction, safe: options && options.safe })\n}\n\nfunction filter (obj, { protoAction = 'error', constructorAction = 'error', safe } = {}) {\n let next = [obj]\n\n while (next.length) {\n const nodes = next\n next = []\n\n for (const node of nodes) {\n if (protoAction !== 'ignore' && Object.prototype.hasOwnProperty.call(node, '__proto__')) { // Avoid calling node.hasOwnProperty directly\n if (safe === true) {\n return null\n } else if (protoAction === 'error') {\n throw new SyntaxError('Object contains forbidden prototype property')\n }\n\n delete node.__proto__ // eslint-disable-line no-proto\n }\n\n if (constructorAction !== 'ignore' &&\n Object.prototype.hasOwnProperty.call(node, 'constructor') &&\n Object.prototype.hasOwnProperty.call(node.constructor, 'prototype')) { // Avoid calling node.hasOwnProperty directly\n if (safe === true) {\n return null\n } else if (constructorAction === 'error') {\n throw new SyntaxError('Object contains forbidden prototype property')\n }\n\n delete node.constructor\n }\n\n for (const key in node) {\n const value = node[key]\n if (value && typeof value === 'object') {\n next.push(value)\n }\n }\n }\n }\n return obj\n}\n\nfunction parse (text, reviver, options) {\n const stackTraceLimit = Error.stackTraceLimit\n Error.stackTraceLimit = 0\n try {\n return _parse(text, reviver, options)\n } finally {\n Error.stackTraceLimit = stackTraceLimit\n }\n}\n\nfunction safeParse (text, reviver) {\n const stackTraceLimit = Error.stackTraceLimit\n Error.stackTraceLimit = 0\n try {\n return _parse(text, reviver, { safe: true })\n } catch (_e) {\n return null\n } finally {\n Error.stackTraceLimit = stackTraceLimit\n }\n}\n\nmodule.exports = parse\nmodule.exports.default = parse\nmodule.exports.parse = parse\nmodule.exports.safeParse = safeParse\nmodule.exports.scan = filter\n","// src/combine-headers.ts\nfunction combineHeaders(...headers) {\n return headers.reduce(\n (combinedHeaders, currentHeaders) => ({\n ...combinedHeaders,\n ...currentHeaders != null ? currentHeaders : {}\n }),\n {}\n );\n}\n\n// src/convert-async-iterator-to-readable-stream.ts\nfunction convertAsyncIteratorToReadableStream(iterator) {\n return new ReadableStream({\n /**\n * Called when the consumer wants to pull more data from the stream.\n *\n * @param {ReadableStreamDefaultController<T>} controller - The controller to enqueue data into the stream.\n * @returns {Promise<void>}\n */\n async pull(controller) {\n try {\n const { value, done } = await iterator.next();\n if (done) {\n controller.close();\n } else {\n controller.enqueue(value);\n }\n } catch (error) {\n controller.error(error);\n }\n },\n /**\n * Called when the consumer cancels the stream.\n */\n cancel() {\n }\n });\n}\n\n// src/delay.ts\nasync function delay(delayInMs) {\n return delayInMs == null ? Promise.resolve() : new Promise((resolve2) => setTimeout(resolve2, delayInMs));\n}\n\n// src/event-source-parser-stream.ts\nfunction createEventSourceParserStream() {\n let buffer = \"\";\n let event = void 0;\n let data = [];\n let lastEventId = void 0;\n let retry = void 0;\n function parseLine(line, controller) {\n if (line === \"\") {\n dispatchEvent(controller);\n return;\n }\n if (line.startsWith(\":\")) {\n return;\n }\n const colonIndex = line.indexOf(\":\");\n if (colonIndex === -1) {\n handleField(line, \"\");\n return;\n }\n const field = line.slice(0, colonIndex);\n const valueStart = colonIndex + 1;\n const value = valueStart < line.length && line[valueStart] === \" \" ? line.slice(valueStart + 1) : line.slice(valueStart);\n handleField(field, value);\n }\n function dispatchEvent(controller) {\n if (data.length > 0) {\n controller.enqueue({\n event,\n data: data.join(\"\\n\"),\n id: lastEventId,\n retry\n });\n data = [];\n event = void 0;\n retry = void 0;\n }\n }\n function handleField(field, value) {\n switch (field) {\n case \"event\":\n event = value;\n break;\n case \"data\":\n data.push(value);\n break;\n case \"id\":\n lastEventId = value;\n break;\n case \"retry\":\n const parsedRetry = parseInt(value, 10);\n if (!isNaN(parsedRetry)) {\n retry = parsedRetry;\n }\n break;\n }\n }\n return new TransformStream({\n transform(chunk, controller) {\n const { lines, incompleteLine } = splitLines(buffer, chunk);\n buffer = incompleteLine;\n for (let i = 0; i < lines.length; i++) {\n parseLine(lines[i], controller);\n }\n },\n flush(controller) {\n parseLine(buffer, controller);\n dispatchEvent(controller);\n }\n });\n}\nfunction splitLines(buffer, chunk) {\n const lines = [];\n let currentLine = buffer;\n for (let i = 0; i < chunk.length; ) {\n const char = chunk[i++];\n if (char === \"\\n\") {\n lines.push(currentLine);\n currentLine = \"\";\n } else if (char === \"\\r\") {\n lines.push(currentLine);\n currentLine = \"\";\n if (chunk[i] === \"\\n\") {\n i++;\n }\n } else {\n currentLine += char;\n }\n }\n return { lines, incompleteLine: currentLine };\n}\n\n// src/extract-response-headers.ts\nfunction extractResponseHeaders(response) {\n const headers = {};\n response.headers.forEach((value, key) => {\n headers[key] = value;\n });\n return headers;\n}\n\n// src/generate-id.ts\nimport { InvalidArgumentError } from \"@ai-sdk/provider\";\nimport { customAlphabet } from \"nanoid/non-secure\";\nvar createIdGenerator = ({\n prefix,\n size: defaultSize = 16,\n alphabet = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\",\n separator = \"-\"\n} = {}) => {\n const generator = customAlphabet(alphabet, defaultSize);\n if (prefix == null) {\n return generator;\n }\n if (alphabet.includes(separator)) {\n throw new InvalidArgumentError({\n argument: \"separator\",\n message: `The separator \"${separator}\" must not be part of the alphabet \"${alphabet}\".`\n });\n }\n return (size) => `${prefix}${separator}${generator(size)}`;\n};\nvar generateId = createIdGenerator();\n\n// src/get-error-message.ts\nfunction getErrorMessage(error) {\n if (error == null) {\n return \"unknown error\";\n }\n if (typeof error === \"string\") {\n return error;\n }\n if (error instanceof Error) {\n return error.message;\n }\n return JSON.stringify(error);\n}\n\n// src/get-from-api.ts\nimport { APICallError } from \"@ai-sdk/provider\";\n\n// src/remove-undefined-entries.ts\nfunction removeUndefinedEntries(record) {\n return Object.fromEntries(\n Object.entries(record).filter(([_key, value]) => value != null)\n );\n}\n\n// src/is-abort-error.ts\nfunction isAbortError(error) {\n return error instanceof Error && (error.name === \"AbortError\" || error.name === \"TimeoutError\");\n}\n\n// src/get-from-api.ts\nvar getOriginalFetch = () => globalThis.fetch;\nvar getFromApi = async ({\n url,\n headers = {},\n successfulResponseHandler,\n failedResponseHandler,\n abortSignal,\n fetch = getOriginalFetch()\n}) => {\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: removeUndefinedEntries(headers),\n signal: abortSignal\n });\n const responseHeaders = extractResponseHeaders(response);\n if (!response.ok) {\n let errorInformation;\n try {\n errorInformation = await failedResponseHandler({\n response,\n url,\n requestBodyValues: {}\n });\n } catch (error) {\n if (isAbortError(error) || APICallError.isInstance(error)) {\n throw error;\n }\n throw new APICallError({\n message: \"Failed to process error response\",\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues: {}\n });\n }\n throw errorInformation.value;\n }\n try {\n return await successfulResponseHandler({\n response,\n url,\n requestBodyValues: {}\n });\n } catch (error) {\n if (error instanceof Error) {\n if (isAbortError(error) || APICallError.isInstance(error)) {\n throw error;\n }\n }\n throw new APICallError({\n message: \"Failed to process successful response\",\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues: {}\n });\n }\n } catch (error) {\n if (isAbortError(error)) {\n throw error;\n }\n if (error instanceof TypeError && error.message === \"fetch failed\") {\n const cause = error.cause;\n if (cause != null) {\n throw new APICallError({\n message: `Cannot connect to API: ${cause.message}`,\n cause,\n url,\n isRetryable: true,\n requestBodyValues: {}\n });\n }\n }\n throw error;\n }\n};\n\n// src/load-api-key.ts\nimport { LoadAPIKeyError } from \"@ai-sdk/provider\";\nfunction loadApiKey({\n apiKey,\n environmentVariableName,\n apiKeyParameterName = \"apiKey\",\n description\n}) {\n if (typeof apiKey === \"string\") {\n return apiKey;\n }\n if (apiKey != null) {\n throw new LoadAPIKeyError({\n message: `${description} API key must be a string.`\n });\n }\n if (typeof process === \"undefined\") {\n throw new LoadAPIKeyError({\n message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter. Environment variables is not supported in this environment.`\n });\n }\n apiKey = process.env[environmentVariableName];\n if (apiKey == null) {\n throw new LoadAPIKeyError({\n message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter or the ${environmentVariableName} environment variable.`\n });\n }\n if (typeof apiKey !== \"string\") {\n throw new LoadAPIKeyError({\n message: `${description} API key must be a string. The value of the ${environmentVariableName} environment variable is not a string.`\n });\n }\n return apiKey;\n}\n\n// src/load-optional-setting.ts\nfunction loadOptionalSetting({\n settingValue,\n environmentVariableName\n}) {\n if (typeof settingValue === \"string\") {\n return settingValue;\n }\n if (settingValue != null || typeof process === \"undefined\") {\n return void 0;\n }\n settingValue = process.env[environmentVariableName];\n if (settingValue == null || typeof settingValue !== \"string\") {\n return void 0;\n }\n return settingValue;\n}\n\n// src/load-setting.ts\nimport { LoadSettingError } from \"@ai-sdk/provider\";\nfunction loadSetting({\n settingValue,\n environmentVariableName,\n settingName,\n description\n}) {\n if (typeof settingValue === \"string\") {\n return settingValue;\n }\n if (settingValue != null) {\n throw new LoadSettingError({\n message: `${description} setting must be a string.`\n });\n }\n if (typeof process === \"undefined\") {\n throw new LoadSettingError({\n message: `${description} setting is missing. Pass it using the '${settingName}' parameter. Environment variables is not supported in this environment.`\n });\n }\n settingValue = process.env[environmentVariableName];\n if (settingValue == null) {\n throw new LoadSettingError({\n message: `${description} setting is missing. Pass it using the '${settingName}' parameter or the ${environmentVariableName} environment variable.`\n });\n }\n if (typeof settingValue !== \"string\") {\n throw new LoadSettingError({\n message: `${description} setting must be a string. The value of the ${environmentVariableName} environment variable is not a string.`\n });\n }\n return settingValue;\n}\n\n// src/parse-json.ts\nimport {\n JSONParseError,\n TypeValidationError as TypeValidationError2\n} from \"@ai-sdk/provider\";\nimport SecureJSON from \"secure-json-parse\";\n\n// src/validate-types.ts\nimport { TypeValidationError } from \"@ai-sdk/provider\";\n\n// src/validator.ts\nvar validatorSymbol = Symbol.for(\"vercel.ai.validator\");\nfunction validator(validate) {\n return { [validatorSymbol]: true, validate };\n}\nfunction isValidator(value) {\n return typeof value === \"object\" && value !== null && validatorSymbol in value && value[validatorSymbol] === true && \"validate\" in value;\n}\nfunction asValidator(value) {\n return isValidator(value) ? value : zodValidator(value);\n}\nfunction zodValidator(zodSchema) {\n return validator((value) => {\n const result = zodSchema.safeParse(value);\n return result.success ? { success: true, value: result.data } : { success: false, error: result.error };\n });\n}\n\n// src/validate-types.ts\nfunction validateTypes({\n value,\n schema: inputSchema\n}) {\n const result = safeValidateTypes({ value, schema: inputSchema });\n if (!result.success) {\n throw TypeValidationError.wrap({ value, cause: result.error });\n }\n return result.value;\n}\nfunction safeValidateTypes({\n value,\n schema\n}) {\n const validator2 = asValidator(schema);\n try {\n if (validator2.validate == null) {\n return { success: true, value };\n }\n const result = validator2.validate(value);\n if (result.success) {\n return result;\n }\n return {\n success: false,\n error: TypeValidationError.wrap({ value, cause: result.error })\n };\n } catch (error) {\n return {\n success: false,\n error: TypeValidationError.wrap({ value, cause: error })\n };\n }\n}\n\n// src/parse-json.ts\nfunction parseJSON({\n text,\n schema\n}) {\n try {\n const value = SecureJSON.parse(text);\n if (schema == null) {\n return value;\n }\n return validateTypes({ value, schema });\n } catch (error) {\n if (JSONParseError.isInstance(error) || TypeValidationError2.isInstance(error)) {\n throw error;\n }\n throw new JSONParseError({ text, cause: error });\n }\n}\nfunction safeParseJSON({\n text,\n schema\n}) {\n try {\n const value = SecureJSON.parse(text);\n if (schema == null) {\n return { success: true, value, rawValue: value };\n }\n const validationResult = safeValidateTypes({ value, schema });\n return validationResult.success ? { ...validationResult, rawValue: value } : validationResult;\n } catch (error) {\n return {\n success: false,\n error: JSONParseError.isInstance(error) ? error : new JSONParseError({ text, cause: error })\n };\n }\n}\nfunction isParsableJson(input) {\n try {\n SecureJSON.parse(input);\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// src/parse-provider-options.ts\nimport { InvalidArgumentError as InvalidArgumentError2 } from \"@ai-sdk/provider\";\nfunction parseProviderOptions({\n provider,\n providerOptions,\n schema\n}) {\n if ((providerOptions == null ? void 0 : providerOptions[provider]) == null) {\n return void 0;\n }\n const parsedProviderOptions = safeValidateTypes({\n value: providerOptions[provider],\n schema\n });\n if (!parsedProviderOptions.success) {\n throw new InvalidArgumentError2({\n argument: \"providerOptions\",\n message: `invalid ${provider} provider options`,\n cause: parsedProviderOptions.error\n });\n }\n return parsedProviderOptions.value;\n}\n\n// src/post-to-api.ts\nimport { APICallError as APICallError2 } from \"@ai-sdk/provider\";\nvar getOriginalFetch2 = () => globalThis.fetch;\nvar postJsonToApi = async ({\n url,\n headers,\n body,\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n fetch\n}) => postToApi({\n url,\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers\n },\n body: {\n content: JSON.stringify(body),\n values: body\n },\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n fetch\n});\nvar postFormDataToApi = async ({\n url,\n headers,\n formData,\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n fetch\n}) => postToApi({\n url,\n headers,\n body: {\n content: formData,\n values: Object.fromEntries(formData.entries())\n },\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n fetch\n});\nvar postToApi = async ({\n url,\n headers = {},\n body,\n successfulResponseHandler,\n failedResponseHandler,\n abortSignal,\n fetch = getOriginalFetch2()\n}) => {\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: removeUndefinedEntries(headers),\n body: body.content,\n signal: abortSignal\n });\n const responseHeaders = extractResponseHeaders(response);\n if (!response.ok) {\n let errorInformation;\n try {\n errorInformation = await failedResponseHandler({\n response,\n url,\n requestBodyValues: body.values\n });\n } catch (error) {\n if (isAbortError(error) || APICallError2.isInstance(error)) {\n throw error;\n }\n throw new APICallError2({\n message: \"Failed to process error response\",\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues: body.values\n });\n }\n throw errorInformation.value;\n }\n try {\n return await successfulResponseHandler({\n response,\n url,\n requestBodyValues: body.values\n });\n } catch (error) {\n if (error instanceof Error) {\n if (isAbortError(error) || APICallError2.isInstance(error)) {\n throw error;\n }\n }\n throw new APICallError2({\n message: \"Failed to process successful response\",\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues: body.values\n });\n }\n } catch (error) {\n if (isAbortError(error)) {\n throw error;\n }\n if (error instanceof TypeError && error.message === \"fetch failed\") {\n const cause = error.cause;\n if (cause != null) {\n throw new APICallError2({\n message: `Cannot connect to API: ${cause.message}`,\n cause,\n url,\n requestBodyValues: body.values,\n isRetryable: true\n // retry when network error\n });\n }\n }\n throw error;\n }\n};\n\n// src/resolve.ts\nasync function resolve(value) {\n if (typeof value === \"function\") {\n value = value();\n }\n return Promise.resolve(value);\n}\n\n// src/response-handler.ts\nimport { APICallError as APICallError3, EmptyResponseBodyError } from \"@ai-sdk/provider\";\nvar createJsonErrorResponseHandler = ({\n errorSchema,\n errorToMessage,\n isRetryable\n}) => async ({ response, url, requestBodyValues }) => {\n const responseBody = await response.text();\n const responseHeaders = extractResponseHeaders(response);\n if (responseBody.trim() === \"\") {\n return {\n responseHeaders,\n value: new APICallError3({\n message: response.statusText,\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n isRetryable: isRetryable == null ? void 0 : isRetryable(response)\n })\n };\n }\n try {\n const parsedError = parseJSON({\n text: responseBody,\n schema: errorSchema\n });\n return {\n responseHeaders,\n value: new APICallError3({\n message: errorToMessage(parsedError),\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n data: parsedError,\n isRetryable: isRetryable == null ? void 0 : isRetryable(response, parsedError)\n })\n };\n } catch (parseError) {\n return {\n responseHeaders,\n value: new APICallError3({\n message: response.statusText,\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n isRetryable: isRetryable == null ? void 0 : isRetryable(response)\n })\n };\n }\n};\nvar createEventSourceResponseHandler = (chunkSchema) => async ({ response }) => {\n const responseHeaders = extractResponseHeaders(response);\n if (response.body == null) {\n throw new EmptyResponseBodyError({});\n }\n return {\n responseHeaders,\n value: response.body.pipeThrough(new TextDecoderStream()).pipeThrough(createEventSourceParserStream()).pipeThrough(\n new TransformStream({\n transform({ data }, controller) {\n if (data === \"[DONE]\") {\n return;\n }\n controller.enqueue(\n safeParseJSON({\n text: data,\n schema: chunkSchema\n })\n );\n }\n })\n )\n };\n};\nvar createJsonStreamResponseHandler = (chunkSchema) => async ({ response }) => {\n const responseHeaders = extractResponseHeaders(response);\n if (response.body == null) {\n throw new EmptyResponseBodyError({});\n }\n let buffer = \"\";\n return {\n responseHeaders,\n value: response.body.pipeThrough(new TextDecoderStream()).pipeThrough(\n new TransformStream({\n transform(chunkText, controller) {\n if (chunkText.endsWith(\"\\n\")) {\n controller.enqueue(\n safeParseJSON({\n text: buffer + chunkText,\n schema: chunkSchema\n })\n );\n buffer = \"\";\n } else {\n buffer += chunkText;\n }\n }\n })\n )\n };\n};\nvar createJsonResponseHandler = (responseSchema) => async ({ response, url, requestBodyValues }) => {\n const responseBody = await response.text();\n const parsedResult = safeParseJSON({\n text: responseBody,\n schema: responseSchema\n });\n const responseHeaders = extractResponseHeaders(response);\n if (!parsedResult.success) {\n throw new APICallError3({\n message: \"Invalid JSON response\",\n cause: parsedResult.error,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n url,\n requestBodyValues\n });\n }\n return {\n responseHeaders,\n value: parsedResult.value,\n rawValue: parsedResult.rawValue\n };\n};\nvar createBinaryResponseHandler = () => async ({ response, url, requestBodyValues }) => {\n const responseHeaders = extractResponseHeaders(response);\n if (!response.body) {\n throw new APICallError3({\n message: \"Response body is empty\",\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody: void 0\n });\n }\n try {\n const buffer = await response.arrayBuffer();\n return {\n responseHeaders,\n value: new Uint8Array(buffer)\n };\n } catch (error) {\n throw new APICallError3({\n message: \"Failed to read response as array buffer\",\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody: void 0,\n cause: error\n });\n }\n};\nvar createStatusCodeErrorResponseHandler = () => async ({ response, url, requestBodyValues }) => {\n const responseHeaders = extractResponseHeaders(response);\n const responseBody = await response.text();\n return {\n responseHeaders,\n value: new APICallError3({\n message: response.statusText,\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody\n })\n };\n};\n\n// src/uint8-utils.ts\nvar { btoa, atob } = globalThis;\nfunction convertBase64ToUint8Array(base64String) {\n const base64Url = base64String.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const latin1string = atob(base64Url);\n return Uint8Array.from(latin1string, (byte) => byte.codePointAt(0));\n}\nfunction convertUint8ArrayToBase64(array) {\n let latin1string = \"\";\n for (let i = 0; i < array.length; i++) {\n latin1string += String.fromCodePoint(array[i]);\n }\n return btoa(latin1string);\n}\n\n// src/without-trailing-slash.ts\nfunction withoutTrailingSlash(url) {\n return url == null ? void 0 : url.replace(/\\/$/, \"\");\n}\nexport {\n asValidator,\n combineHeaders,\n convertAsyncIteratorToReadableStream,\n convertBase64ToUint8Array,\n convertUint8ArrayToBase64,\n createBinaryResponseHandler,\n createEventSourceParserStream,\n createEventSourceResponseHandler,\n createIdGenerator,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n createJsonStreamResponseHandler,\n createStatusCodeErrorResponseHandler,\n delay,\n extractResponseHeaders,\n generateId,\n getErrorMessage,\n getFromApi,\n isAbortError,\n isParsableJson,\n isValidator,\n loadApiKey,\n loadOptionalSetting,\n loadSetting,\n parseJSON,\n parseProviderOptions,\n postFormDataToApi,\n postJsonToApi,\n postToApi,\n removeUndefinedEntries,\n resolve,\n safeParseJSON,\n safeValidateTypes,\n validateTypes,\n validator,\n validatorSymbol,\n withoutTrailingSlash,\n zodValidator\n};\n//# sourceMappingURL=index.mjs.map","// This alphabet uses `A-Za-z0-9_-` symbols.\n// The order of characters is optimized for better gzip and brotli compression.\n// References to the same file (works both for gzip and brotli):\n// `'use`, `andom`, and `rict'`\n// References to the brotli default dictionary:\n// `-26T`, `1983`, `40px`, `75px`, `bush`, `jack`, `mind`, `very`, and `wolf`\nlet urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n\nlet customAlphabet = (alphabet, defaultSize = 21) => {\n return (size = defaultSize) => {\n let id = ''\n // A compact alternative for `for (var i = 0; i < step; i++)`.\n let i = size | 0\n while (i--) {\n // `| 0` is more compact and faster than `Math.floor()`.\n id += alphabet[(Math.random() * alphabet.length) | 0]\n }\n return id\n }\n}\n\nlet nanoid = (size = 21) => {\n let id = ''\n // A compact alternative for `for (var i = 0; i < step; i++)`.\n let i = size | 0\n while (i--) {\n // `| 0` is more compact and faster than `Math.floor()`.\n id += urlAlphabet[(Math.random() * 64) | 0]\n }\n return id\n}\n\nexport { nanoid, customAlphabet }\n","import { setResponseValueAndErrors } from \"../errorMessages.js\";\nlet emojiRegex = undefined;\n/**\n * Generated from the regular expressions found here as of 2024-05-22:\n * https://github.com/colinhacks/zod/blob/master/src/types.ts.\n *\n * Expressions with /i flag have been changed accordingly.\n */\nexport const zodPatterns = {\n /**\n * `c` was changed to `[cC]` to replicate /i flag\n */\n cuid: /^[cC][^\\s-]{8,}$/,\n cuid2: /^[0-9a-z]+$/,\n ulid: /^[0-9A-HJKMNP-TV-Z]{26}$/,\n /**\n * `a-z` was added to replicate /i flag\n */\n email: /^(?!\\.)(?!.*\\.\\.)([a-zA-Z0-9_'+\\-\\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\\-]*\\.)+[a-zA-Z]{2,}$/,\n /**\n * Constructed a valid Unicode RegExp\n *\n * Lazily instantiate since this type of regex isn't supported\n * in all envs (e.g. React Native).\n *\n * See:\n * https://github.com/colinhacks/zod/issues/2433\n * Fix in Zod:\n * https://github.com/colinhacks/zod/commit/9340fd51e48576a75adc919bff65dbc4a5d4c99b\n */\n emoji: () => {\n if (emojiRegex === undefined) {\n emojiRegex = RegExp(\"^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$\", \"u\");\n }\n return emojiRegex;\n },\n /**\n * Unused\n */\n uuid: /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/,\n /**\n * Unused\n */\n ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,\n ipv4Cidr: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/,\n /**\n * Unused\n */\n ipv6: /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,\n ipv6Cidr: /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,\n base64: /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,\n base64url: /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,\n nanoid: /^[a-zA-Z0-9_-]{21}$/,\n jwt: /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/,\n};\nexport function parseStringDef(def, refs) {\n const res = {\n type: \"string\",\n };\n if (def.checks) {\n for (const check of def.checks) {\n switch (check.kind) {\n case \"min\":\n setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n ? Math.max(res.minLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"max\":\n setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n ? Math.min(res.maxLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"email\":\n switch (refs.emailStrategy) {\n case \"format:email\":\n addFormat(res, \"email\", check.message, refs);\n break;\n case \"format:idn-email\":\n addFormat(res, \"idn-email\", check.message, refs);\n break;\n case \"pattern:zod\":\n addPattern(res, zodPatterns.email, check.message, refs);\n break;\n }\n break;\n case \"url\":\n addFormat(res, \"uri\", check.message, refs);\n break;\n case \"uuid\":\n addFormat(res, \"uuid\", check.message, refs);\n break;\n case \"regex\":\n addPattern(res, check.regex, check.message, refs);\n break;\n case \"cuid\":\n addPattern(res, zodPatterns.cuid, check.message, refs);\n break;\n case \"cuid2\":\n addPattern(res, zodPatterns.cuid2, check.message, refs);\n break;\n case \"startsWith\":\n addPattern(res, RegExp(`^${escapeLiteralCheckValue(check.value, refs)}`), check.message, refs);\n break;\n case \"endsWith\":\n addPattern(res, RegExp(`${escapeLiteralCheckValue(check.value, refs)}$`), check.message, refs);\n break;\n case \"datetime\":\n addFormat(res, \"date-time\", check.message, refs);\n break;\n case \"date\":\n addFormat(res, \"date\", check.message, refs);\n break;\n case \"time\":\n addFormat(res, \"time\", check.message, refs);\n break;\n case \"duration\":\n addFormat(res, \"duration\", check.message, refs);\n break;\n case \"length\":\n setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n ? Math.max(res.minLength, check.value)\n : check.value, check.message, refs);\n setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n ? Math.min(res.maxLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"includes\": {\n addPattern(res, RegExp(escapeLiteralCheckValue(check.value, refs)), check.message, refs);\n break;\n }\n case \"ip\": {\n if (check.version !== \"v6\") {\n addFormat(res, \"ipv4\", check.message, refs);\n }\n if (check.version !== \"v4\") {\n addFormat(res, \"ipv6\", check.message, refs);\n }\n break;\n }\n case \"base64url\":\n addPattern(res, zodPatterns.base64url, check.message, refs);\n break;\n case \"jwt\":\n addPattern(res, zodPatterns.jwt, check.message, refs);\n break;\n case \"cidr\": {\n if (check.version !== \"v6\") {\n addPattern(res, zodPatterns.ipv4Cidr, check.message, refs);\n }\n if (check.version !== \"v4\") {\n addPattern(res, zodPatterns.ipv6Cidr, check.message, refs);\n }\n break;\n }\n case \"emoji\":\n addPattern(res, zodPatterns.emoji(), check.message, refs);\n break;\n case \"ulid\": {\n addPattern(res, zodPatterns.ulid, check.message, refs);\n break;\n }\n case \"base64\": {\n switch (refs.base64Strategy) {\n case \"format:binary\": {\n addFormat(res, \"binary\", check.message, refs);\n break;\n }\n case \"contentEncoding:base64\": {\n setResponseValueAndErrors(res, \"contentEncoding\", \"base64\", check.message, refs);\n break;\n }\n case \"pattern:zod\": {\n addPattern(res, zodPatterns.base64, check.message, refs);\n break;\n }\n }\n break;\n }\n case \"nanoid\": {\n addPattern(res, zodPatterns.nanoid, check.message, refs);\n }\n case \"toLowerCase\":\n case \"toUpperCase\":\n case \"trim\":\n break;\n default:\n /* c8 ignore next */\n ((_) => { })(check);\n }\n }\n }\n return res;\n}\nfunction escapeLiteralCheckValue(literal, refs) {\n return refs.patternStrategy === \"escape\"\n ? escapeNonAlphaNumeric(literal)\n : literal;\n}\nconst ALPHA_NUMERIC = new Set(\"ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789\");\nfunction escapeNonAlphaNumeric(source) {\n let result = \"\";\n for (let i = 0; i < source.length; i++) {\n if (!ALPHA_NUMERIC.has(source[i])) {\n result += \"\\\\\";\n }\n result += source[i];\n }\n return result;\n}\n// Adds a \"format\" keyword to the schema. If a format exists, both formats will be joined in an allOf-node, along with subsequent ones.\nfunction addFormat(schema, value, message, refs) {\n if (schema.format || schema.anyOf?.some((x) => x.format)) {\n if (!schema.anyOf) {\n schema.anyOf = [];\n }\n if (schema.format) {\n schema.anyOf.push({\n format: schema.format,\n ...(schema.errorMessage &&\n refs.errorMessages && {\n errorMessage: { format: schema.errorMessage.format },\n }),\n });\n delete schema.format;\n if (schema.errorMessage) {\n delete schema.errorMessage.format;\n if (Object.keys(schema.errorMessage).length === 0) {\n delete schema.errorMessage;\n }\n }\n }\n schema.anyOf.push({\n format: value,\n ...(message &&\n refs.errorMessages && { errorMessage: { format: message } }),\n });\n }\n else {\n setResponseValueAndErrors(schema, \"format\", value, message, refs);\n }\n}\n// Adds a \"pattern\" keyword to the schema. If a pattern exists, both patterns will be joined in an allOf-node, along with subsequent ones.\nfunction addPattern(schema, regex, message, refs) {\n if (schema.pattern || schema.allOf?.some((x) => x.pattern)) {\n if (!schema.allOf) {\n schema.allOf = [];\n }\n if (schema.pattern) {\n schema.allOf.push({\n pattern: schema.pattern,\n ...(schema.errorMessage &&\n refs.errorMessages && {\n errorMessage: { pattern: schema.errorMessage.pattern },\n }),\n });\n delete schema.pattern;\n if (schema.errorMessage) {\n delete schema.errorMessage.pattern;\n if (Object.keys(schema.errorMessage).length === 0) {\n delete schema.errorMessage;\n }\n }\n }\n schema.allOf.push({\n pattern: stringifyRegExpWithFlags(regex, refs),\n ...(message &&\n refs.errorMessages && { errorMessage: { pattern: message } }),\n });\n }\n else {\n setResponseValueAndErrors(schema, \"pattern\", stringifyRegExpWithFlags(regex, refs), message, refs);\n }\n}\n// Mutate z.string.regex() in a best attempt to accommodate for regex flags when applyRegexFlags is true\nfunction stringifyRegExpWithFlags(regex, refs) {\n if (!refs.applyRegexFlags || !regex.flags) {\n return regex.source;\n }\n // Currently handled flags\n const flags = {\n i: regex.flags.includes(\"i\"),\n m: regex.flags.includes(\"m\"),\n s: regex.flags.includes(\"s\"), // `.` matches newlines\n };\n // The general principle here is to step through each character, one at a time, applying mutations as flags require. We keep track when the current character is escaped, and when it's inside a group /like [this]/ or (also) a range like /[a-z]/. The following is fairly brittle imperative code; edit at your peril!\n const source = flags.i ? regex.source.toLowerCase() : regex.source;\n let pattern = \"\";\n let isEscaped = false;\n let inCharGroup = false;\n let inCharRange = false;\n for (let i = 0; i < source.length; i++) {\n if (isEscaped) {\n pattern += source[i];\n isEscaped = false;\n continue;\n }\n if (flags.i) {\n if (inCharGroup) {\n if (source[i].match(/[a-z]/)) {\n if (inCharRange) {\n pattern += source[i];\n pattern += `${source[i - 2]}-${source[i]}`.toUpperCase();\n inCharRange = false;\n }\n else if (source[i + 1] === \"-\" && source[i + 2]?.match(/[a-z]/)) {\n pattern += source[i];\n inCharRange = true;\n }\n else {\n pattern += `${source[i]}${source[i].toUpperCase()}`;\n }\n continue;\n }\n }\n else if (source[i].match(/[a-z]/)) {\n pattern += `[${source[i]}${source[i].toUpperCase()}]`;\n continue;\n }\n }\n if (flags.m) {\n if (source[i] === \"^\") {\n pattern += `(^|(?<=[\\r\\n]))`;\n continue;\n }\n else if (source[i] === \"$\") {\n pattern += `($|(?=[\\r\\n]))`;\n continue;\n }\n }\n if (flags.s && source[i] === \".\") {\n pattern += inCharGroup ? `${source[i]}\\r\\n` : `[${source[i]}\\r\\n]`;\n continue;\n }\n pattern += source[i];\n if (source[i] === \"\\\\\") {\n isEscaped = true;\n }\n else if (inCharGroup && source[i] === \"]\") {\n inCharGroup = false;\n }\n else if (!inCharGroup && source[i] === \"[\") {\n inCharGroup = true;\n }\n }\n try {\n new RegExp(pattern);\n }\n catch {\n console.warn(`Could not convert regex pattern at ${refs.currentPath.join(\"/\")} to a flag-independent form! Falling back to the flag-ignorant source`);\n return regex.source;\n }\n return pattern;\n}\n","// src/index.ts\nimport { generateId } from \"@ai-sdk/provider-utils\";\n\n// src/assistant-stream-parts.ts\nvar textStreamPart = {\n code: \"0\",\n name: \"text\",\n parse: (value) => {\n if (typeof value !== \"string\") {\n throw new Error('\"text\" parts expect a string value.');\n }\n return { type: \"text\", value };\n }\n};\nvar errorStreamPart = {\n code: \"3\",\n name: \"error\",\n parse: (value) => {\n if (typeof value !== \"string\") {\n throw new Error('\"error\" parts expect a string value.');\n }\n return { type: \"error\", value };\n }\n};\nvar assistantMessageStreamPart = {\n code: \"4\",\n name: \"assistant_message\",\n parse: (value) => {\n if (value == null || typeof value !== \"object\" || !(\"id\" in value) || !(\"role\" in value) || !(\"content\" in value) || typeof value.id !== \"string\" || typeof value.role !== \"string\" || value.role !== \"assistant\" || !Array.isArray(value.content) || !value.content.every(\n (item) => item != null && typeof item === \"object\" && \"type\" in item && item.type === \"text\" && \"text\" in item && item.text != null && typeof item.text === \"object\" && \"value\" in item.text && typeof item.text.value === \"string\"\n )) {\n throw new Error(\n '\"assistant_message\" parts expect an object with an \"id\", \"role\", and \"content\" property.'\n );\n }\n return {\n type: \"assistant_message\",\n value\n };\n }\n};\nvar assistantControlDataStreamPart = {\n code: \"5\",\n name: \"assistant_control_data\",\n parse: (value) => {\n if (value == null || typeof value !== \"object\" || !(\"threadId\" in value) || !(\"messageId\" in value) || typeof value.threadId !== \"string\" || typeof value.messageId !== \"string\") {\n throw new Error(\n '\"assistant_control_data\" parts expect an object with a \"threadId\" and \"messageId\" property.'\n );\n }\n return {\n type: \"assistant_control_data\",\n value: {\n threadId: value.threadId,\n messageId: value.messageId\n }\n };\n }\n};\nvar dataMessageStreamPart = {\n code: \"6\",\n name: \"data_message\",\n parse: (value) => {\n if (value == null || typeof value !== \"object\" || !(\"role\" in value) || !(\"data\" in value) || typeof value.role !== \"string\" || value.role !== \"data\") {\n throw new Error(\n '\"data_message\" parts expect an object with a \"role\" and \"data\" property.'\n );\n }\n return {\n type: \"data_message\",\n value\n };\n }\n};\nvar assistantStreamParts = [\n textStreamPart,\n errorStreamPart,\n assistantMessageStreamPart,\n assistantControlDataStreamPart,\n dataMessageStreamPart\n];\nvar assistantStreamPartsByCode = {\n [textStreamPart.code]: textStreamPart,\n [errorStreamPart.code]: errorStreamPart,\n [assistantMessageStreamPart.code]: assistantMessageStreamPart,\n [assistantControlDataStreamPart.code]: assistantControlDataStreamPart,\n [dataMessageStreamPart.code]: dataMessageStreamPart\n};\nvar StreamStringPrefixes = {\n [textStreamPart.name]: textStreamPart.code,\n [errorStreamPart.name]: errorStreamPart.code,\n [assistantMessageStreamPart.name]: assistantMessageStreamPart.code,\n [assistantControlDataStreamPart.name]: assistantControlDataStreamPart.code,\n [dataMessageStreamPart.name]: dataMessageStreamPart.code\n};\nvar validCodes = assistantStreamParts.map((part) => part.code);\nvar parseAssistantStreamPart = (line) => {\n const firstSeparatorIndex = line.indexOf(\":\");\n if (firstSeparatorIndex === -1) {\n throw new Error(\"Failed to parse stream string. No separator found.\");\n }\n const prefix = line.slice(0, firstSeparatorIndex);\n if (!validCodes.includes(prefix)) {\n throw new Error(`Failed to parse stream string. Invalid code ${prefix}.`);\n }\n const code = prefix;\n const textValue = line.slice(firstSeparatorIndex + 1);\n const jsonValue = JSON.parse(textValue);\n return assistantStreamPartsByCode[code].parse(jsonValue);\n};\nfunction formatAssistantStreamPart(type, value) {\n const streamPart = assistantStreamParts.find((part) => part.name === type);\n if (!streamPart) {\n throw new Error(`Invalid stream part type: ${type}`);\n }\n return `${streamPart.code}:${JSON.stringify(value)}\n`;\n}\n\n// src/process-chat-response.ts\nimport { generateId as generateIdFunction } from \"@ai-sdk/provider-utils\";\n\n// src/duplicated/usage.ts\nfunction calculateLanguageModelUsage({\n promptTokens,\n completionTokens\n}) {\n return {\n promptTokens,\n completionTokens,\n totalTokens: promptTokens + completionTokens\n };\n}\n\n// src/parse-partial-json.ts\nimport { safeParseJSON } from \"@ai-sdk/provider-utils\";\n\n// src/fix-json.ts\nfunction fixJson(input) {\n const stack = [\"ROOT\"];\n let lastValidIndex = -1;\n let literalStart = null;\n function processValueStart(char, i, swapState) {\n {\n switch (char) {\n case '\"': {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_STRING\");\n break;\n }\n case \"f\":\n case \"t\":\n case \"n\": {\n lastValidIndex = i;\n literalStart = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_LITERAL\");\n break;\n }\n case \"-\": {\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_NUMBER\");\n break;\n }\n case \"0\":\n case \"1\":\n case \"2\":\n case \"3\":\n case \"4\":\n case \"5\":\n case \"6\":\n case \"7\":\n case \"8\":\n case \"9\": {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_NUMBER\");\n break;\n }\n case \"{\": {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_OBJECT_START\");\n break;\n }\n case \"[\": {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_ARRAY_START\");\n break;\n }\n }\n }\n }\n function processAfterObjectValue(char, i) {\n switch (char) {\n case \",\": {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_AFTER_COMMA\");\n break;\n }\n case \"}\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n }\n }\n function processAfterArrayValue(char, i) {\n switch (char) {\n case \",\": {\n stack.pop();\n stack.push(\"INSIDE_ARRAY_AFTER_COMMA\");\n break;\n }\n case \"]\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n }\n }\n for (let i = 0; i < input.length; i++) {\n const char = input[i];\n const currentState = stack[stack.length - 1];\n switch (currentState) {\n case \"ROOT\":\n processValueStart(char, i, \"FINISH\");\n break;\n case \"INSIDE_OBJECT_START\": {\n switch (char) {\n case '\"': {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_KEY\");\n break;\n }\n case \"}\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n }\n break;\n }\n case \"INSIDE_OBJECT_AFTER_COMMA\": {\n switch (char) {\n case '\"': {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_KEY\");\n break;\n }\n }\n break;\n }\n case \"INSIDE_OBJECT_KEY\": {\n switch (char) {\n case '\"': {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_AFTER_KEY\");\n break;\n }\n }\n break;\n }\n case \"INSIDE_OBJECT_AFTER_KEY\": {\n switch (char) {\n case \":\": {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_BEFORE_VALUE\");\n break;\n }\n }\n break;\n }\n case \"INSIDE_OBJECT_BEFORE_VALUE\": {\n processValueStart(char, i, \"INSIDE_OBJECT_AFTER_VALUE\");\n break;\n }\n case \"INSIDE_OBJECT_AFTER_VALUE\": {\n processAfterObjectValue(char, i);\n break;\n }\n case \"INSIDE_STRING\": {\n switch (char) {\n case '\"': {\n stack.pop();\n lastValidIndex = i;\n break;\n }\n case \"\\\\\": {\n stack.push(\"INSIDE_STRING_ESCAPE\");\n break;\n }\n default: {\n lastValidIndex = i;\n }\n }\n break;\n }\n case \"INSIDE_ARRAY_START\": {\n switch (char) {\n case \"]\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n default: {\n lastValidIndex = i;\n processValueStart(char, i, \"INSIDE_ARRAY_AFTER_VALUE\");\n break;\n }\n }\n break;\n }\n case \"INSIDE_ARRAY_AFTER_VALUE\": {\n switch (char) {\n case \",\": {\n stack.pop();\n stack.push(\"INSIDE_ARRAY_AFTER_COMMA\");\n break;\n }\n case \"]\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n default: {\n lastValidIndex = i;\n break;\n }\n }\n break;\n }\n case \"INSIDE_ARRAY_AFTER_COMMA\": {\n processValueStart(char, i, \"INSIDE_ARRAY_AFTER_VALUE\");\n break;\n }\n case \"INSIDE_STRING_ESCAPE\": {\n stack.pop();\n lastValidIndex = i;\n break;\n }\n case \"INSIDE_NUMBER\": {\n switch (char) {\n case \"0\":\n case \"1\":\n case \"2\":\n case \"3\":\n case \"4\":\n case \"5\":\n case \"6\":\n case \"7\":\n case \"8\":\n case \"9\": {\n lastValidIndex = i;\n break;\n }\n case \"e\":\n case \"E\":\n case \"-\":\n case \".\": {\n break;\n }\n case \",\": {\n stack.pop();\n if (stack[stack.length - 1] === \"INSIDE_ARRAY_AFTER_VALUE\") {\n processAfterArrayValue(char, i);\n }\n if (stack[stack.length - 1] === \"INSIDE_OBJECT_AFTER_VALUE\") {\n processAfterObjectValue(char, i);\n }\n break;\n }\n case \"}\": {\n stack.pop();\n if (stack[stack.length - 1] === \"INSIDE_OBJECT_AFTER_VALUE\") {\n processAfterObjectValue(char, i);\n }\n break;\n }\n case \"]\": {\n stack.pop();\n if (stack[stack.length - 1] === \"INSIDE_ARRAY_AFTER_VALUE\") {\n processAfterArrayValue(char, i);\n }\n break;\n }\n default: {\n stack.pop();\n break;\n }\n }\n break;\n }\n case \"INSIDE_LITERAL\": {\n const partialLiteral = input.substring(literalStart, i + 1);\n if (!\"false\".startsWith(partialLiteral) && !\"true\".startsWith(partialLiteral) && !\"null\".startsWith(partialLiteral)) {\n stack.pop();\n if (stack[stack.length - 1] === \"INSIDE_OBJECT_AFTER_VALUE\") {\n processAfterObjectValue(char, i);\n } else if (stack[stack.length - 1] === \"INSIDE_ARRAY_AFTER_VALUE\") {\n processAfterArrayValue(char, i);\n }\n } else {\n lastValidIndex = i;\n }\n break;\n }\n }\n }\n let result = input.slice(0, lastValidIndex + 1);\n for (let i = stack.length - 1; i >= 0; i--) {\n const state = stack[i];\n switch (state) {\n case \"INSIDE_STRING\": {\n result += '\"';\n break;\n }\n case \"INSIDE_OBJECT_KEY\":\n case \"INSIDE_OBJECT_AFTER_KEY\":\n case \"INSIDE_OBJECT_AFTER_COMMA\":\n case \"INSIDE_OBJECT_START\":\n case \"INSIDE_OBJECT_BEFORE_VALUE\":\n case \"INSIDE_OBJECT_AFTER_VALUE\": {\n result += \"}\";\n break;\n }\n case \"INSIDE_ARRAY_START\":\n case \"INSIDE_ARRAY_AFTER_COMMA\":\n case \"INSIDE_ARRAY_AFTER_VALUE\": {\n result += \"]\";\n break;\n }\n case \"INSIDE_LITERAL\": {\n const partialLiteral = input.substring(literalStart, input.length);\n if (\"true\".startsWith(partialLiteral)) {\n result += \"true\".slice(partialLiteral.length);\n } else if (\"false\".startsWith(partialLiteral)) {\n result += \"false\".slice(partialLiteral.length);\n } else if (\"null\".startsWith(partialLiteral)) {\n result += \"null\".slice(partialLiteral.length);\n }\n }\n }\n }\n return result;\n}\n\n// src/parse-partial-json.ts\nfunction parsePartialJson(jsonText) {\n if (jsonText === void 0) {\n return { value: void 0, state: \"undefined-input\" };\n }\n let result = safeParseJSON({ text: jsonText });\n if (result.success) {\n return { value: result.value, state: \"successful-parse\" };\n }\n result = safeParseJSON({ text: fixJson(jsonText) });\n if (result.success) {\n return { value: result.value, state: \"repaired-parse\" };\n }\n return { value: void 0, state: \"failed-parse\" };\n}\n\n// src/data-stream-parts.ts\nvar textStreamPart2 = {\n code: \"0\",\n name: \"text\",\n parse: (value) => {\n if (typeof value !== \"string\") {\n throw new Error('\"text\" parts expect a string value.');\n }\n return { type: \"text\", value };\n }\n};\nvar dataStreamPart = {\n code: \"2\",\n name: \"data\",\n parse: (value) => {\n if (!Array.isArray(value)) {\n throw new Error('\"data\" parts expect an array value.');\n }\n return { type: \"data\", value };\n }\n};\nvar errorStreamPart2 = {\n code: \"3\",\n name: \"error\",\n parse: (value) => {\n if (typeof value !== \"string\") {\n throw new Error('\"error\" parts expect a string value.');\n }\n return { type: \"error\", value };\n }\n};\nvar messageAnnotationsStreamPart = {\n code: \"8\",\n name: \"message_annotations\",\n parse: (value) => {\n if (!Array.isArray(value)) {\n throw new Error('\"message_annotations\" parts expect an array value.');\n }\n return { type: \"message_annotations\", value };\n }\n};\nvar toolCallStreamPart = {\n code: \"9\",\n name: \"tool_call\",\n parse: (value) => {\n if (value == null || typeof value !== \"object\" || !(\"toolCallId\" in value) || typeof value.toolCallId !== \"string\" || !(\"toolName\" in value) || typeof value.toolName !== \"string\" || !(\"args\" in value) || typeof value.args !== \"object\") {\n throw new Error(\n '\"tool_call\" parts expect an object with a \"toolCallId\", \"toolName\", and \"args\" property.'\n );\n }\n return {\n type: \"tool_call\",\n value\n };\n }\n};\nvar toolResultStreamPart = {\n code: \"a\",\n name: \"tool_result\",\n parse: (value) => {\n if (value == null || typeof value !== \"object\" || !(\"toolCallId\" in value) || typeof value.toolCallId !== \"string\" || !(\"result\" in value)) {\n throw new Error(\n '\"tool_result\" parts expect an object with a \"toolCallId\" and a \"result\" property.'\n );\n }\n return {\n type: \"tool_result\",\n value\n };\n }\n};\nvar toolCallStreamingStartStreamPart = {\n code: \"b\",\n name: \"tool_call_streaming_start\",\n parse: (value) => {\n if (value == null || typeof value !== \"object\" || !(\"toolCallId\" in value) || typeof value.toolCallId !== \"string\" || !(\"toolName\" in value) || typeof value.toolName !== \"string\") {\n throw new Error(\n '\"tool_call_streaming_start\" parts expect an object with a \"toolCallId\" and \"toolName\" property.'\n );\n }\n return {\n type: \"tool_call_streaming_start\",\n value\n };\n }\n};\nvar toolCallDeltaStreamPart = {\n code: \"c\",\n name: \"tool_call_delta\",\n parse: (value) => {\n if (value == null || typeof value !== \"object\" || !(\"toolCallId\" in value) || typeof value.toolCallId !== \"string\" || !(\"argsTextDelta\" in value) || typeof value.argsTextDelta !== \"string\") {\n throw new Error(\n '\"tool_call_delta\" parts expect an object with a \"toolCallId\" and \"argsTextDelta\" property.'\n );\n }\n return {\n type: \"tool_call_delta\",\n value\n };\n }\n};\nvar finishMessageStreamPart = {\n code: \"d\",\n name: \"finish_message\",\n parse: (value) => {\n if (value == null || typeof value !== \"object\" || !(\"finishReason\" in value) || typeof value.finishReason !== \"string\") {\n throw new Error(\n '\"finish_message\" parts expect an object with a \"finishReason\" property.'\n );\n }\n const result = {\n finishReason: value.finishReason\n };\n if (\"usage\" in value && value.usage != null && typeof value.usage === \"object\" && \"promptTokens\" in value.usage && \"completionTokens\" in value.usage) {\n result.usage = {\n promptTokens: typeof value.usage.promptTokens === \"number\" ? value.usage.promptTokens : Number.NaN,\n completionTokens: typeof value.usage.completionTokens === \"number\" ? value.usage.completionTokens : Number.NaN\n };\n }\n return {\n type: \"finish_message\",\n value: result\n };\n }\n};\nvar finishStepStreamPart = {\n code: \"e\",\n name: \"finish_step\",\n parse: (value) => {\n if (value == null || typeof value !== \"object\" || !(\"finishReason\" in value) || typeof value.finishReason !== \"string\") {\n throw new Error(\n '\"finish_step\" parts expect an object with a \"finishReason\" property.'\n );\n }\n const result = {\n finishReason: value.finishReason,\n isContinued: false\n };\n if (\"usage\" in value && value.usage != null && typeof value.usage === \"object\" && \"promptTokens\" in value.usage && \"completionTokens\" in value.usage) {\n result.usage = {\n promptTokens: typeof value.usage.promptTokens === \"number\" ? value.usage.promptTokens : Number.NaN,\n completionTokens: typeof value.usage.completionTokens === \"number\" ? value.usage.completionTokens : Number.NaN\n };\n }\n if (\"isContinued\" in value && typeof value.isContinued === \"boolean\") {\n result.isContinued = value.isContinued;\n }\n return {\n type: \"finish_step\",\n value: result\n };\n }\n};\nvar startStepStreamPart = {\n code: \"f\",\n name: \"start_step\",\n parse: (value) => {\n if (value == null || typeof value !== \"object\" || !(\"messageId\" in value) || typeof value.messageId !== \"string\") {\n throw new Error(\n '\"start_step\" parts expect an object with an \"id\" property.'\n );\n }\n return {\n type: \"start_step\",\n value: {\n messageId: value.messageId\n }\n };\n }\n};\nvar reasoningStreamPart = {\n code: \"g\",\n name: \"reasoning\",\n parse: (value) => {\n if (typeof value !== \"string\") {\n throw new Error('\"reasoning\" parts expect a string value.');\n }\n return { type: \"reasoning\", value };\n }\n};\nvar sourcePart = {\n code: \"h\",\n name: \"source\",\n parse: (value) => {\n if (value == null || typeof value !== \"object\") {\n throw new Error('\"source\" parts expect a Source object.');\n }\n return {\n type: \"source\",\n value\n };\n }\n};\nvar redactedReasoningStreamPart = {\n code: \"i\",\n name: \"redacted_reasoning\",\n parse: (value) => {\n if (value == null || typeof value !== \"object\" || !(\"data\" in value) || typeof value.data !== \"string\") {\n throw new Error(\n '\"redacted_reasoning\" parts expect an object with a \"data\" property.'\n );\n }\n return { type: \"redacted_reasoning\", value: { data: value.data } };\n }\n};\nvar reasoningSignatureStreamPart = {\n code: \"j\",\n name: \"reasoning_signature\",\n parse: (value) => {\n if (value == null || typeof value !== \"object\" || !(\"signature\" in value) || typeof value.signature !== \"string\") {\n throw new Error(\n '\"reasoning_signature\" parts expect an object with a \"signature\" property.'\n );\n }\n return {\n type: \"reasoning_signature\",\n value: { signature: value.signature }\n };\n }\n};\nvar fileStreamPart = {\n code: \"k\",\n name: \"file\",\n parse: (value) => {\n if (value == null || typeof value !== \"object\" || !(\"data\" in value) || typeof value.data !== \"string\" || !(\"mimeType\" in value) || typeof value.mimeType !== \"string\") {\n throw new Error(\n '\"file\" parts expect an object with a \"data\" and \"mimeType\" property.'\n );\n }\n return { type: \"file\", value };\n }\n};\nvar dataStreamParts = [\n textStreamPart2,\n dataStreamPart,\n errorStreamPart2,\n messageAnnotationsStreamPart,\n toolCallStreamPart,\n toolResultStreamPart,\n toolCallStreamingStartStreamPart,\n toolCallDeltaStreamPart,\n finishMessageStreamPart,\n finishStepStreamPart,\n startStepStreamPart,\n reasoningStreamPart,\n sourcePart,\n redactedReasoningStreamPart,\n reasoningSignatureStreamPart,\n fileStreamPart\n];\nvar dataStreamPartsByCode = Object.fromEntries(\n dataStreamParts.map((part) => [part.code, part])\n);\nvar DataStreamStringPrefixes = Object.fromEntries(\n dataStreamParts.map((part) => [part.name, part.code])\n);\nvar validCodes2 = dataStreamParts.map((part) => part.code);\nvar parseDataStreamPart = (line) => {\n const firstSeparatorIndex = line.indexOf(\":\");\n if (firstSeparatorIndex === -1) {\n throw new Error(\"Failed to parse stream string. No separator found.\");\n }\n const prefix = line.slice(0, firstSeparatorIndex);\n if (!validCodes2.includes(prefix)) {\n throw new Error(`Failed to parse stream string. Invalid code ${prefix}.`);\n }\n const code = prefix;\n const textValue = line.slice(firstSeparatorIndex + 1);\n const jsonValue = JSON.parse(textValue);\n return dataStreamPartsByCode[code].parse(jsonValue);\n};\nfunction formatDataStreamPart(type, value) {\n const streamPart = dataStreamParts.find((part) => part.name === type);\n if (!streamPart) {\n throw new Error(`Invalid stream part type: ${type}`);\n }\n return `${streamPart.code}:${JSON.stringify(value)}\n`;\n}\n\n// src/process-data-stream.ts\nvar NEWLINE = \"\\n\".charCodeAt(0);\nfunction concatChunks(chunks, totalLength) {\n const concatenatedChunks = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of chunks) {\n concatenatedChunks.set(chunk, offset);\n offset += chunk.length;\n }\n chunks.length = 0;\n return concatenatedChunks;\n}\nasync function processDataStream({\n stream,\n onTextPart,\n onReasoningPart,\n onReasoningSignaturePart,\n onRedactedReasoningPart,\n onSourcePart,\n onFilePart,\n onDataPart,\n onErrorPart,\n onToolCallStreamingStartPart,\n onToolCallDeltaPart,\n onToolCallPart,\n onToolResultPart,\n onMessageAnnotationsPart,\n onFinishMessagePart,\n onFinishStepPart,\n onStartStepPart\n}) {\n const reader = stream.getReader();\n const decoder = new TextDecoder();\n const chunks = [];\n let totalLength = 0;\n while (true) {\n const { value } = await reader.read();\n if (value) {\n chunks.push(value);\n totalLength += value.length;\n if (value[value.length - 1] !== NEWLINE) {\n continue;\n }\n }\n if (chunks.length === 0) {\n break;\n }\n const concatenatedChunks = concatChunks(chunks, totalLength);\n totalLength = 0;\n const streamParts = decoder.decode(concatenatedChunks, { stream: true }).split(\"\\n\").filter((line) => line !== \"\").map(parseDataStreamPart);\n for (const { type, value: value2 } of streamParts) {\n switch (type) {\n case \"text\":\n await (onTextPart == null ? void 0 : onTextPart(value2));\n break;\n case \"reasoning\":\n await (onReasoningPart == null ? void 0 : onReasoningPart(value2));\n break;\n case \"reasoning_signature\":\n await (onReasoningSignaturePart == null ? void 0 : onReasoningSignaturePart(value2));\n break;\n case \"redacted_reasoning\":\n await (onRedactedReasoningPart == null ? void 0 : onRedactedReasoningPart(value2));\n break;\n case \"file\":\n await (onFilePart == null ? void 0 : onFilePart(value2));\n break;\n case \"source\":\n await (onSourcePart == null ? void 0 : onSourcePart(value2));\n break;\n case \"data\":\n await (onDataPart == null ? void 0 : onDataPart(value2));\n break;\n case \"error\":\n await (onErrorPart == null ? void 0 : onErrorPart(value2));\n break;\n case \"message_annotations\":\n await (onMessageAnnotationsPart == null ? void 0 : onMessageAnnotationsPart(value2));\n break;\n case \"tool_call_streaming_start\":\n await (onToolCallStreamingStartPart == null ? void 0 : onToolCallStreamingStartPart(value2));\n break;\n case \"tool_call_delta\":\n await (onToolCallDeltaPart == null ? void 0 : onToolCallDeltaPart(value2));\n break;\n case \"tool_call\":\n await (onToolCallPart == null ? void 0 : onToolCallPart(value2));\n break;\n case \"tool_result\":\n await (onToolResultPart == null ? void 0 : onToolResultPart(value2));\n break;\n case \"finish_message\":\n await (onFinishMessagePart == null ? void 0 : onFinishMessagePart(value2));\n break;\n case \"finish_step\":\n await (onFinishStepPart == null ? void 0 : onFinishStepPart(value2));\n break;\n case \"start_step\":\n await (onStartStepPart == null ? void 0 : onStartStepPart(value2));\n break;\n default: {\n const exhaustiveCheck = type;\n throw new Error(`Unknown stream part type: ${exhaustiveCheck}`);\n }\n }\n }\n }\n}\n\n// src/process-chat-response.ts\nasync function processChatResponse({\n stream,\n update,\n onToolCall,\n onFinish,\n generateId: generateId2 = generateIdFunction,\n getCurrentDate = () => /* @__PURE__ */ new Date(),\n lastMessage\n}) {\n var _a, _b;\n const replaceLastMessage = (lastMessage == null ? void 0 : lastMessage.role) === \"assistant\";\n let step = replaceLastMessage ? 1 + // find max step in existing tool invocations:\n ((_b = (_a = lastMessage.toolInvocations) == null ? void 0 : _a.reduce((max, toolInvocation) => {\n var _a2;\n return Math.max(max, (_a2 = toolInvocation.step) != null ? _a2 : 0);\n }, 0)) != null ? _b : 0) : 0;\n const message = replaceLastMessage ? structuredClone(lastMessage) : {\n id: generateId2(),\n createdAt: getCurrentDate(),\n role: \"assistant\",\n content: \"\",\n parts: []\n };\n let currentTextPart = void 0;\n let currentReasoningPart = void 0;\n let currentReasoningTextDetail = void 0;\n function updateToolInvocationPart(toolCallId, invocation) {\n const part = message.parts.find(\n (part2) => part2.type === \"tool-invocation\" && part2.toolInvocation.toolCallId === toolCallId\n );\n if (part != null) {\n part.toolInvocation = invocation;\n } else {\n message.parts.push({\n type: \"tool-invocation\",\n toolInvocation: invocation\n });\n }\n }\n const data = [];\n let messageAnnotations = replaceLastMessage ? lastMessage == null ? void 0 : lastMessage.annotations : void 0;\n const partialToolCalls = {};\n let usage = {\n completionTokens: NaN,\n promptTokens: NaN,\n totalTokens: NaN\n };\n let finishReason = \"unknown\";\n function execUpdate() {\n const copiedData = [...data];\n if (messageAnnotations == null ? void 0 : messageAnnotations.length) {\n message.annotations = messageAnnotations;\n }\n const copiedMessage = {\n // deep copy the message to ensure that deep changes (msg attachments) are updated\n // with SolidJS. SolidJS uses referential integration of sub-objects to detect changes.\n ...structuredClone(message),\n // add a revision id to ensure that the message is updated with SWR. SWR uses a\n // hashing approach by default to detect changes, but it only works for shallow\n // changes. This is why we need to add a revision id to ensure that the message\n // is updated with SWR (without it, the changes get stuck in SWR and are not\n // forwarded to rendering):\n revisionId: generateId2()\n };\n update({\n message: copiedMessage,\n data: copiedData,\n replaceLastMessage\n });\n }\n await processDataStream({\n stream,\n onTextPart(value) {\n if (currentTextPart == null) {\n currentTextPart = {\n type: \"text\",\n text: value\n };\n message.parts.push(currentTextPart);\n } else {\n currentTextPart.text += value;\n }\n message.content += value;\n execUpdate();\n },\n onReasoningPart(value) {\n var _a2;\n if (currentReasoningTextDetail == null) {\n currentReasoningTextDetail = { type: \"text\", text: value };\n if (currentReasoningPart != null) {\n currentReasoningPart.details.push(currentReasoningTextDetail);\n }\n } else {\n currentReasoningTextDetail.text += value;\n }\n if (currentReasoningPart == null) {\n currentReasoningPart = {\n type: \"reasoning\",\n reasoning: value,\n details: [currentReasoningTextDetail]\n };\n message.parts.push(currentReasoningPart);\n } else {\n currentReasoningPart.reasoning += value;\n }\n message.reasoning = ((_a2 = message.reasoning) != null ? _a2 : \"\") + value;\n execUpdate();\n },\n onReasoningSignaturePart(value) {\n if (currentReasoningTextDetail != null) {\n currentReasoningTextDetail.signature = value.signature;\n }\n },\n onRedactedReasoningPart(value) {\n if (currentReasoningPart == null) {\n currentReasoningPart = {\n type: \"reasoning\",\n reasoning: \"\",\n details: []\n };\n message.parts.push(currentReasoningPart);\n }\n currentReasoningPart.details.push({\n type: \"redacted\",\n data: value.data\n });\n currentReasoningTextDetail = void 0;\n execUpdate();\n },\n onFilePart(value) {\n message.parts.push({\n type: \"file\",\n mimeType: value.mimeType,\n data: value.data\n });\n execUpdate();\n },\n onSourcePart(value) {\n message.parts.push({\n type: \"source\",\n source: value\n });\n execUpdate();\n },\n onToolCallStreamingStartPart(value) {\n if (message.toolInvocations == null) {\n message.toolInvocations = [];\n }\n partialToolCalls[value.toolCallId] = {\n text: \"\",\n step,\n toolName: value.toolName,\n index: message.toolInvocations.length\n };\n const invocation = {\n state: \"partial-call\",\n step,\n toolCallId: value.toolCallId,\n toolName: value.toolName,\n args: void 0\n };\n message.toolInvocations.push(invocation);\n updateToolInvocationPart(value.toolCallId, invocation);\n execUpdate();\n },\n onToolCallDeltaPart(value) {\n const partialToolCall = partialToolCalls[value.toolCallId];\n partialToolCall.text += value.argsTextDelta;\n const { value: partialArgs } = parsePartialJson(partialToolCall.text);\n const invocation = {\n state: \"partial-call\",\n step: partialToolCall.step,\n toolCallId: value.toolCallId,\n toolName: partialToolCall.toolName,\n args: partialArgs\n };\n message.toolInvocations[partialToolCall.index] = invocation;\n updateToolInvocationPart(value.toolCallId, invocation);\n execUpdate();\n },\n async onToolCallPart(value) {\n const invocation = {\n state: \"call\",\n step,\n ...value\n };\n if (partialToolCalls[value.toolCallId] != null) {\n message.toolInvocations[partialToolCalls[value.toolCallId].index] = invocation;\n } else {\n if (message.toolInvocations == null) {\n message.toolInvocations = [];\n }\n message.toolInvocations.push(invocation);\n }\n updateToolInvocationPart(value.toolCallId, invocation);\n execUpdate();\n if (onToolCall) {\n const result = await onToolCall({ toolCall: value });\n if (result != null) {\n const invocation2 = {\n state: \"result\",\n step,\n ...value,\n result\n };\n message.toolInvocations[message.toolInvocations.length - 1] = invocation2;\n updateToolInvocationPart(value.toolCallId, invocation2);\n execUpdate();\n }\n }\n },\n onToolResultPart(value) {\n const toolInvocations = message.toolInvocations;\n if (toolInvocations == null) {\n throw new Error(\"tool_result must be preceded by a tool_call\");\n }\n const toolInvocationIndex = toolInvocations.findIndex(\n (invocation2) => invocation2.toolCallId === value.toolCallId\n );\n if (toolInvocationIndex === -1) {\n throw new Error(\n \"tool_result must be preceded by a tool_call with the same toolCallId\"\n );\n }\n const invocation = {\n ...toolInvocations[toolInvocationIndex],\n state: \"result\",\n ...value\n };\n toolInvocations[toolInvocationIndex] = invocation;\n updateToolInvocationPart(value.toolCallId, invocation);\n execUpdate();\n },\n onDataPart(value) {\n data.push(...value);\n execUpdate();\n },\n onMessageAnnotationsPart(value) {\n if (messageAnnotations == null) {\n messageAnnotations = [...value];\n } else {\n messageAnnotations.push(...value);\n }\n execUpdate();\n },\n onFinishStepPart(value) {\n step += 1;\n currentTextPart = value.isContinued ? currentTextPart : void 0;\n currentReasoningPart = void 0;\n currentReasoningTextDetail = void 0;\n },\n onStartStepPart(value) {\n if (!replaceLastMessage) {\n message.id = value.messageId;\n }\n message.parts.push({ type: \"step-start\" });\n execUpdate();\n },\n onFinishMessagePart(value) {\n finishReason = value.finishReason;\n if (value.usage != null) {\n usage = calculateLanguageModelUsage(value.usage);\n }\n },\n onErrorPart(error) {\n throw new Error(error);\n }\n });\n onFinish == null ? void 0 : onFinish({ message, finishReason, usage });\n}\n\n// src/process-chat-text-response.ts\nimport { generateId as generateIdFunction2 } from \"@ai-sdk/provider-utils\";\n\n// src/process-text-stream.ts\nasync function processTextStream({\n stream,\n onTextPart\n}) {\n const reader = stream.pipeThrough(new TextDecoderStream()).getReader();\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n await onTextPart(value);\n }\n}\n\n// src/process-chat-text-response.ts\nasync function processChatTextResponse({\n stream,\n update,\n onFinish,\n getCurrentDate = () => /* @__PURE__ */ new Date(),\n generateId: generateId2 = generateIdFunction2\n}) {\n const textPart = { type: \"text\", text: \"\" };\n const resultMessage = {\n id: generateId2(),\n createdAt: getCurrentDate(),\n role: \"assistant\",\n content: \"\",\n parts: [textPart]\n };\n await processTextStream({\n stream,\n onTextPart: (chunk) => {\n resultMessage.content += chunk;\n textPart.text += chunk;\n update({\n message: { ...resultMessage },\n data: [],\n replaceLastMessage: false\n });\n }\n });\n onFinish == null ? void 0 : onFinish(resultMessage, {\n usage: { completionTokens: NaN, promptTokens: NaN, totalTokens: NaN },\n finishReason: \"unknown\"\n });\n}\n\n// src/call-chat-api.ts\nvar getOriginalFetch = () => fetch;\nasync function callChatApi({\n api,\n body,\n streamProtocol = \"data\",\n credentials,\n headers,\n abortController,\n restoreMessagesOnFailure,\n onResponse,\n onUpdate,\n onFinish,\n onToolCall,\n generateId: generateId2,\n fetch: fetch2 = getOriginalFetch(),\n lastMessage,\n requestType = \"generate\"\n}) {\n var _a, _b, _c;\n const request = requestType === \"resume\" ? fetch2(`${api}?chatId=${body.id}`, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers\n },\n signal: (_a = abortController == null ? void 0 : abortController()) == null ? void 0 : _a.signal,\n credentials\n }) : fetch2(api, {\n method: \"POST\",\n body: JSON.stringify(body),\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers\n },\n signal: (_b = abortController == null ? void 0 : abortController()) == null ? void 0 : _b.signal,\n credentials\n });\n const response = await request.catch((err) => {\n restoreMessagesOnFailure();\n throw err;\n });\n if (onResponse) {\n try {\n await onResponse(response);\n } catch (err) {\n throw err;\n }\n }\n if (!response.ok) {\n restoreMessagesOnFailure();\n throw new Error(\n (_c = await response.text()) != null ? _c : \"Failed to fetch the chat response.\"\n );\n }\n if (!response.body) {\n throw new Error(\"The response body is empty.\");\n }\n switch (streamProtocol) {\n case \"text\": {\n await processChatTextResponse({\n stream: response.body,\n update: onUpdate,\n onFinish,\n generateId: generateId2\n });\n return;\n }\n case \"data\": {\n await processChatResponse({\n stream: response.body,\n update: onUpdate,\n lastMessage,\n onToolCall,\n onFinish({ message, finishReason, usage }) {\n if (onFinish && message != null) {\n onFinish(message, { usage, finishReason });\n }\n },\n generateId: generateId2\n });\n return;\n }\n default: {\n const exhaustiveCheck = streamProtocol;\n throw new Error(`Unknown stream protocol: ${exhaustiveCheck}`);\n }\n }\n}\n\n// src/call-completion-api.ts\nvar getOriginalFetch2 = () => fetch;\nasync function callCompletionApi({\n api,\n prompt,\n credentials,\n headers,\n body,\n streamProtocol = \"data\",\n setCompletion,\n setLoading,\n setError,\n setAbortController,\n onResponse,\n onFinish,\n onError,\n onData,\n fetch: fetch2 = getOriginalFetch2()\n}) {\n var _a;\n try {\n setLoading(true);\n setError(void 0);\n const abortController = new AbortController();\n setAbortController(abortController);\n setCompletion(\"\");\n const response = await fetch2(api, {\n method: \"POST\",\n body: JSON.stringify({\n prompt,\n ...body\n }),\n credentials,\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers\n },\n signal: abortController.signal\n }).catch((err) => {\n throw err;\n });\n if (onResponse) {\n try {\n await onResponse(response);\n } catch (err) {\n throw err;\n }\n }\n if (!response.ok) {\n throw new Error(\n (_a = await response.text()) != null ? _a : \"Failed to fetch the chat response.\"\n );\n }\n if (!response.body) {\n throw new Error(\"The response body is empty.\");\n }\n let result = \"\";\n switch (streamProtocol) {\n case \"text\": {\n await processTextStream({\n stream: response.body,\n onTextPart: (chunk) => {\n result += chunk;\n setCompletion(result);\n }\n });\n break;\n }\n case \"data\": {\n await processDataStream({\n stream: response.body,\n onTextPart(value) {\n result += value;\n setCompletion(result);\n },\n onDataPart(value) {\n onData == null ? void 0 : onData(value);\n },\n onErrorPart(value) {\n throw new Error(value);\n }\n });\n break;\n }\n default: {\n const exhaustiveCheck = streamProtocol;\n throw new Error(`Unknown stream protocol: ${exhaustiveCheck}`);\n }\n }\n if (onFinish) {\n onFinish(prompt, result);\n }\n setAbortController(null);\n return result;\n } catch (err) {\n if (err.name === \"AbortError\") {\n setAbortController(null);\n return null;\n }\n if (err instanceof Error) {\n if (onError) {\n onError(err);\n }\n }\n setError(err);\n } finally {\n setLoading(false);\n }\n}\n\n// src/data-url.ts\nfunction getTextFromDataUrl(dataUrl) {\n const [header, base64Content] = dataUrl.split(\",\");\n const mimeType = header.split(\";\")[0].split(\":\")[1];\n if (mimeType == null || base64Content == null) {\n throw new Error(\"Invalid data URL format\");\n }\n try {\n return window.atob(base64Content);\n } catch (error) {\n throw new Error(`Error decoding data URL`);\n }\n}\n\n// src/extract-max-tool-invocation-step.ts\nfunction extractMaxToolInvocationStep(toolInvocations) {\n return toolInvocations == null ? void 0 : toolInvocations.reduce((max, toolInvocation) => {\n var _a;\n return Math.max(max, (_a = toolInvocation.step) != null ? _a : 0);\n }, 0);\n}\n\n// src/get-message-parts.ts\nfunction getMessageParts(message) {\n var _a;\n return (_a = message.parts) != null ? _a : [\n ...message.toolInvocations ? message.toolInvocations.map((toolInvocation) => ({\n type: \"tool-invocation\",\n toolInvocation\n })) : [],\n ...message.reasoning ? [\n {\n type: \"reasoning\",\n reasoning: message.reasoning,\n details: [{ type: \"text\", text: message.reasoning }]\n }\n ] : [],\n ...message.content ? [{ type: \"text\", text: message.content }] : []\n ];\n}\n\n// src/fill-message-parts.ts\nfunction fillMessageParts(messages) {\n return messages.map((message) => ({\n ...message,\n parts: getMessageParts(message)\n }));\n}\n\n// src/is-deep-equal-data.ts\nfunction isDeepEqualData(obj1, obj2) {\n if (obj1 === obj2)\n return true;\n if (obj1 == null || obj2 == null)\n return false;\n if (typeof obj1 !== \"object\" && typeof obj2 !== \"object\")\n return obj1 === obj2;\n if (obj1.constructor !== obj2.constructor)\n return false;\n if (obj1 instanceof Date && obj2 instanceof Date) {\n return obj1.getTime() === obj2.getTime();\n }\n if (Array.isArray(obj1)) {\n if (obj1.length !== obj2.length)\n return false;\n for (let i = 0; i < obj1.length; i++) {\n if (!isDeepEqualData(obj1[i], obj2[i]))\n return false;\n }\n return true;\n }\n const keys1 = Object.keys(obj1);\n const keys2 = Object.keys(obj2);\n if (keys1.length !== keys2.length)\n return false;\n for (const key of keys1) {\n if (!keys2.includes(key))\n return false;\n if (!isDeepEqualData(obj1[key], obj2[key]))\n return false;\n }\n return true;\n}\n\n// src/prepare-attachments-for-request.ts\nasync function prepareAttachmentsForRequest(attachmentsFromOptions) {\n if (!attachmentsFromOptions) {\n return [];\n }\n if (globalThis.FileList && attachmentsFromOptions instanceof globalThis.FileList) {\n return Promise.all(\n Array.from(attachmentsFromOptions).map(async (attachment) => {\n const { name, type } = attachment;\n const dataUrl = await new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = (readerEvent) => {\n var _a;\n resolve((_a = readerEvent.target) == null ? void 0 : _a.result);\n };\n reader.onerror = (error) => reject(error);\n reader.readAsDataURL(attachment);\n });\n return {\n name,\n contentType: type,\n url: dataUrl\n };\n })\n );\n }\n if (Array.isArray(attachmentsFromOptions)) {\n return attachmentsFromOptions;\n }\n throw new Error(\"Invalid attachments type\");\n}\n\n// src/process-assistant-stream.ts\nvar NEWLINE2 = \"\\n\".charCodeAt(0);\nfunction concatChunks2(chunks, totalLength) {\n const concatenatedChunks = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of chunks) {\n concatenatedChunks.set(chunk, offset);\n offset += chunk.length;\n }\n chunks.length = 0;\n return concatenatedChunks;\n}\nasync function processAssistantStream({\n stream,\n onTextPart,\n onErrorPart,\n onAssistantMessagePart,\n onAssistantControlDataPart,\n onDataMessagePart\n}) {\n const reader = stream.getReader();\n const decoder = new TextDecoder();\n const chunks = [];\n let totalLength = 0;\n while (true) {\n const { value } = await reader.read();\n if (value) {\n chunks.push(value);\n totalLength += value.length;\n if (value[value.length - 1] !== NEWLINE2) {\n continue;\n }\n }\n if (chunks.length === 0) {\n break;\n }\n const concatenatedChunks = concatChunks2(chunks, totalLength);\n totalLength = 0;\n const streamParts = decoder.decode(concatenatedChunks, { stream: true }).split(\"\\n\").filter((line) => line !== \"\").map(parseAssistantStreamPart);\n for (const { type, value: value2 } of streamParts) {\n switch (type) {\n case \"text\":\n await (onTextPart == null ? void 0 : onTextPart(value2));\n break;\n case \"error\":\n await (onErrorPart == null ? void 0 : onErrorPart(value2));\n break;\n case \"assistant_message\":\n await (onAssistantMessagePart == null ? void 0 : onAssistantMessagePart(value2));\n break;\n case \"assistant_control_data\":\n await (onAssistantControlDataPart == null ? void 0 : onAssistantControlDataPart(value2));\n break;\n case \"data_message\":\n await (onDataMessagePart == null ? void 0 : onDataMessagePart(value2));\n break;\n default: {\n const exhaustiveCheck = type;\n throw new Error(`Unknown stream part type: ${exhaustiveCheck}`);\n }\n }\n }\n }\n}\n\n// src/schema.ts\nimport { validatorSymbol } from \"@ai-sdk/provider-utils\";\n\n// src/zod-schema.ts\nimport zodToJsonSchema from \"zod-to-json-schema\";\nfunction zodSchema(zodSchema2, options) {\n var _a;\n const useReferences = (_a = options == null ? void 0 : options.useReferences) != null ? _a : false;\n return jsonSchema(\n zodToJsonSchema(zodSchema2, {\n $refStrategy: useReferences ? \"root\" : \"none\",\n target: \"jsonSchema7\"\n // note: openai mode breaks various gemini conversions\n }),\n {\n validate: (value) => {\n const result = zodSchema2.safeParse(value);\n return result.success ? { success: true, value: result.data } : { success: false, error: result.error };\n }\n }\n );\n}\n\n// src/schema.ts\nvar schemaSymbol = Symbol.for(\"vercel.ai.schema\");\nfunction jsonSchema(jsonSchema2, {\n validate\n} = {}) {\n return {\n [schemaSymbol]: true,\n _type: void 0,\n // should never be used directly\n [validatorSymbol]: true,\n jsonSchema: jsonSchema2,\n validate\n };\n}\nfunction isSchema(value) {\n return typeof value === \"object\" && value !== null && schemaSymbol in value && value[schemaSymbol] === true && \"jsonSchema\" in value && \"validate\" in value;\n}\nfunction asSchema(schema) {\n return isSchema(schema) ? schema : zodSchema(schema);\n}\n\n// src/should-resubmit-messages.ts\nfunction shouldResubmitMessages({\n originalMaxToolInvocationStep,\n originalMessageCount,\n maxSteps,\n messages\n}) {\n var _a;\n const lastMessage = messages[messages.length - 1];\n return (\n // check if the feature is enabled:\n maxSteps > 1 && // ensure there is a last message:\n lastMessage != null && // ensure we actually have new steps (to prevent infinite loops in case of errors):\n (messages.length > originalMessageCount || extractMaxToolInvocationStep(lastMessage.toolInvocations) !== originalMaxToolInvocationStep) && // check that next step is possible:\n isAssistantMessageWithCompletedToolCalls(lastMessage) && // limit the number of automatic steps:\n ((_a = extractMaxToolInvocationStep(lastMessage.toolInvocations)) != null ? _a : 0) < maxSteps\n );\n}\nfunction isAssistantMessageWithCompletedToolCalls(message) {\n if (message.role !== \"assistant\") {\n return false;\n }\n const lastStepStartIndex = message.parts.reduce((lastIndex, part, index) => {\n return part.type === \"step-start\" ? index : lastIndex;\n }, -1);\n const lastStepToolInvocations = message.parts.slice(lastStepStartIndex + 1).filter((part) => part.type === \"tool-invocation\");\n return lastStepToolInvocations.length > 0 && lastStepToolInvocations.every((part) => \"result\" in part.toolInvocation);\n}\n\n// src/update-tool-call-result.ts\nfunction updateToolCallResult({\n messages,\n toolCallId,\n toolResult: result\n}) {\n var _a;\n const lastMessage = messages[messages.length - 1];\n const invocationPart = lastMessage.parts.find(\n (part) => part.type === \"tool-invocation\" && part.toolInvocation.toolCallId === toolCallId\n );\n if (invocationPart == null) {\n return;\n }\n const toolResult = {\n ...invocationPart.toolInvocation,\n state: \"result\",\n result\n };\n invocationPart.toolInvocation = toolResult;\n lastMessage.toolInvocations = (_a = lastMessage.toolInvocations) == null ? void 0 : _a.map(\n (toolInvocation) => toolInvocation.toolCallId === toolCallId ? toolResult : toolInvocation\n );\n}\nexport {\n asSchema,\n callChatApi,\n callCompletionApi,\n extractMaxToolInvocationStep,\n fillMessageParts,\n formatAssistantStreamPart,\n formatDataStreamPart,\n generateId,\n getMessageParts,\n getTextFromDataUrl,\n isAssistantMessageWithCompletedToolCalls,\n isDeepEqualData,\n jsonSchema,\n parseAssistantStreamPart,\n parseDataStreamPart,\n parsePartialJson,\n prepareAttachmentsForRequest,\n processAssistantStream,\n processDataStream,\n processTextStream,\n shouldResubmitMessages,\n updateToolCallResult,\n zodSchema\n};\n//# sourceMappingURL=index.mjs.map","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n var value = getSnapshot(),\n _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n}\nvar shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","var has = Object.prototype.hasOwnProperty;\n\nexport function dequal(foo, bar) {\n\tvar ctor, len;\n\tif (foo === bar) return true;\n\n\tif (foo && bar && (ctor=foo.constructor) === bar.constructor) {\n\t\tif (ctor === Date) return foo.getTime() === bar.getTime();\n\t\tif (ctor === RegExp) return foo.toString() === bar.toString();\n\n\t\tif (ctor === Array) {\n\t\t\tif ((len=foo.length) === bar.length) {\n\t\t\t\twhile (len-- && dequal(foo[len], bar[len]));\n\t\t\t}\n\t\t\treturn len === -1;\n\t\t}\n\n\t\tif (!ctor || typeof foo === 'object') {\n\t\t\tlen = 0;\n\t\t\tfor (ctor in foo) {\n\t\t\t\tif (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;\n\t\t\t\tif (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false;\n\t\t\t}\n\t\t\treturn Object.keys(bar).length === len;\n\t\t}\n\t}\n\n\treturn foo !== foo && bar !== bar;\n}\n","'use client';\nimport React, { useEffect, useLayoutEffect, createContext, useContext, useMemo, useRef, createElement } from 'react';\nimport * as revalidateEvents from './events.mjs';\nimport { dequal } from 'dequal/lite';\n\n// Global state used to deduplicate requests and store listeners\nconst SWRGlobalState = new WeakMap();\n\n// Shared state between server components and client components\nconst noop = ()=>{};\n// Using noop() as the undefined value as undefined can be replaced\n// by something else. Prettier ignore and extra parentheses are necessary here\n// to ensure that tsc doesn't remove the __NOINLINE__ comment.\n// prettier-ignore\nconst UNDEFINED = /*#__NOINLINE__*/ noop();\nconst OBJECT = Object;\nconst isUndefined = (v)=>v === UNDEFINED;\nconst isFunction = (v)=>typeof v == 'function';\nconst mergeObjects = (a, b)=>({\n ...a,\n ...b\n });\nconst isPromiseLike = (x)=>isFunction(x.then);\n\nconst EMPTY_CACHE = {};\nconst INITIAL_CACHE = {};\nconst STR_UNDEFINED = 'undefined';\n// NOTE: Use the function to guarantee it's re-evaluated between jsdom and node runtime for tests.\nconst isWindowDefined = typeof window != STR_UNDEFINED;\nconst isDocumentDefined = typeof document != STR_UNDEFINED;\nconst isLegacyDeno = isWindowDefined && 'Deno' in window;\nconst hasRequestAnimationFrame = ()=>isWindowDefined && typeof window['requestAnimationFrame'] != STR_UNDEFINED;\nconst createCacheHelper = (cache, key)=>{\n const state = SWRGlobalState.get(cache);\n return [\n // Getter\n ()=>!isUndefined(key) && cache.get(key) || EMPTY_CACHE,\n // Setter\n (info)=>{\n if (!isUndefined(key)) {\n const prev = cache.get(key);\n // Before writing to the store, we keep the value in the initial cache\n // if it's not there yet.\n if (!(key in INITIAL_CACHE)) {\n INITIAL_CACHE[key] = prev;\n }\n state[5](key, mergeObjects(prev, info), prev || EMPTY_CACHE);\n }\n },\n // Subscriber\n state[6],\n // Get server cache snapshot\n ()=>{\n if (!isUndefined(key)) {\n // If the cache was updated on the client, we return the stored initial value.\n if (key in INITIAL_CACHE) return INITIAL_CACHE[key];\n }\n // If we haven't done any client-side updates, we return the current value.\n return !isUndefined(key) && cache.get(key) || EMPTY_CACHE;\n }\n ];\n} // export { UNDEFINED, OBJECT, isUndefined, isFunction, mergeObjects, isPromiseLike }\n;\n\n/**\n * Due to the bug https://bugs.chromium.org/p/chromium/issues/detail?id=678075,\n * it's not reliable to detect if the browser is currently online or offline\n * based on `navigator.onLine`.\n * As a workaround, we always assume it's online on the first load, and change\n * the status upon `online` or `offline` events.\n */ let online = true;\nconst isOnline = ()=>online;\n// For node and React Native, `add/removeEventListener` doesn't exist on window.\nconst [onWindowEvent, offWindowEvent] = isWindowDefined && window.addEventListener ? [\n window.addEventListener.bind(window),\n window.removeEventListener.bind(window)\n] : [\n noop,\n noop\n];\nconst isVisible = ()=>{\n const visibilityState = isDocumentDefined && document.visibilityState;\n return isUndefined(visibilityState) || visibilityState !== 'hidden';\n};\nconst initFocus = (callback)=>{\n // focus revalidate\n if (isDocumentDefined) {\n document.addEventListener('visibilitychange', callback);\n }\n onWindowEvent('focus', callback);\n return ()=>{\n if (isDocumentDefined) {\n document.removeEventListener('visibilitychange', callback);\n }\n offWindowEvent('focus', callback);\n };\n};\nconst initReconnect = (callback)=>{\n // revalidate on reconnected\n const onOnline = ()=>{\n online = true;\n callback();\n };\n // nothing to revalidate, just update the status\n const onOffline = ()=>{\n online = false;\n };\n onWindowEvent('online', onOnline);\n onWindowEvent('offline', onOffline);\n return ()=>{\n offWindowEvent('online', onOnline);\n offWindowEvent('offline', onOffline);\n };\n};\nconst preset = {\n isOnline,\n isVisible\n};\nconst defaultConfigOptions = {\n initFocus,\n initReconnect\n};\n\nconst IS_REACT_LEGACY = !React.useId;\nconst IS_SERVER = !isWindowDefined || isLegacyDeno;\n// Polyfill requestAnimationFrame\nconst rAF = (f)=>hasRequestAnimationFrame() ? window['requestAnimationFrame'](f) : setTimeout(f, 1);\n// React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser.\nconst useIsomorphicLayoutEffect = IS_SERVER ? useEffect : useLayoutEffect;\n// This assignment is to extend the Navigator type to use effectiveType.\nconst navigatorConnection = typeof navigator !== 'undefined' && navigator.connection;\n// Adjust the config based on slow connection status (<= 70Kbps).\nconst slowConnection = !IS_SERVER && navigatorConnection && ([\n 'slow-2g',\n '2g'\n].includes(navigatorConnection.effectiveType) || navigatorConnection.saveData);\n\n// use WeakMap to store the object->key mapping\n// so the objects can be garbage collected.\n// WeakMap uses a hashtable under the hood, so the lookup\n// complexity is almost O(1).\nconst table = new WeakMap();\nconst isObjectType = (value, type)=>OBJECT.prototype.toString.call(value) === `[object ${type}]`;\n// counter of the key\nlet counter = 0;\n// A stable hash implementation that supports:\n// - Fast and ensures unique hash properties\n// - Handles unserializable values\n// - Handles object key ordering\n// - Generates short results\n//\n// This is not a serialization function, and the result is not guaranteed to be\n// parsable.\nconst stableHash = (arg)=>{\n const type = typeof arg;\n const isDate = isObjectType(arg, 'Date');\n const isRegex = isObjectType(arg, 'RegExp');\n const isPlainObject = isObjectType(arg, 'Object');\n let result;\n let index;\n if (OBJECT(arg) === arg && !isDate && !isRegex) {\n // Object/function, not null/date/regexp. Use WeakMap to store the id first.\n // If it's already hashed, directly return the result.\n result = table.get(arg);\n if (result) return result;\n // Store the hash first for circular reference detection before entering the\n // recursive `stableHash` calls.\n // For other objects like set and map, we use this id directly as the hash.\n result = ++counter + '~';\n table.set(arg, result);\n if (Array.isArray(arg)) {\n // Array.\n result = '@';\n for(index = 0; index < arg.length; index++){\n result += stableHash(arg[index]) + ',';\n }\n table.set(arg, result);\n }\n if (isPlainObject) {\n // Object, sort keys.\n result = '#';\n const keys = OBJECT.keys(arg).sort();\n while(!isUndefined(index = keys.pop())){\n if (!isUndefined(arg[index])) {\n result += index + ':' + stableHash(arg[index]) + ',';\n }\n }\n table.set(arg, result);\n }\n } else {\n result = isDate ? arg.toJSON() : type == 'symbol' ? arg.toString() : type == 'string' ? JSON.stringify(arg) : '' + arg;\n }\n return result;\n};\n\nconst serialize = (key)=>{\n if (isFunction(key)) {\n try {\n key = key();\n } catch (err) {\n // dependencies not ready\n key = '';\n }\n }\n // Use the original key as the argument of fetcher. This can be a string or an\n // array of values.\n const args = key;\n // If key is not falsy, or not an empty array, hash it.\n key = typeof key == 'string' ? key : (Array.isArray(key) ? key.length : key) ? stableHash(key) : '';\n return [\n key,\n args\n ];\n};\n\n// Global timestamp.\nlet __timestamp = 0;\nconst getTimestamp = ()=>++__timestamp;\n\nasync function internalMutate(...args) {\n const [cache, _key, _data, _opts] = args;\n // When passing as a boolean, it's explicitly used to disable/enable\n // revalidation.\n const options = mergeObjects({\n populateCache: true,\n throwOnError: true\n }, typeof _opts === 'boolean' ? {\n revalidate: _opts\n } : _opts || {});\n let populateCache = options.populateCache;\n const rollbackOnErrorOption = options.rollbackOnError;\n let optimisticData = options.optimisticData;\n const rollbackOnError = (error)=>{\n return typeof rollbackOnErrorOption === 'function' ? rollbackOnErrorOption(error) : rollbackOnErrorOption !== false;\n };\n const throwOnError = options.throwOnError;\n // If the second argument is a key filter, return the mutation results for all\n // filtered keys.\n if (isFunction(_key)) {\n const keyFilter = _key;\n const matchedKeys = [];\n const it = cache.keys();\n for (const key of it){\n if (// Skip the special useSWRInfinite and useSWRSubscription keys.\n !/^\\$(inf|sub)\\$/.test(key) && keyFilter(cache.get(key)._k)) {\n matchedKeys.push(key);\n }\n }\n return Promise.all(matchedKeys.map(mutateByKey));\n }\n return mutateByKey(_key);\n async function mutateByKey(_k) {\n // Serialize key\n const [key] = serialize(_k);\n if (!key) return;\n const [get, set] = createCacheHelper(cache, key);\n const [EVENT_REVALIDATORS, MUTATION, FETCH, PRELOAD] = SWRGlobalState.get(cache);\n const startRevalidate = ()=>{\n const revalidators = EVENT_REVALIDATORS[key];\n const revalidate = isFunction(options.revalidate) ? options.revalidate(get().data, _k) : options.revalidate !== false;\n if (revalidate) {\n // Invalidate the key by deleting the concurrent request markers so new\n // requests will not be deduped.\n delete FETCH[key];\n delete PRELOAD[key];\n if (revalidators && revalidators[0]) {\n return revalidators[0](revalidateEvents.MUTATE_EVENT).then(()=>get().data);\n }\n }\n return get().data;\n };\n // If there is no new data provided, revalidate the key with current state.\n if (args.length < 3) {\n // Revalidate and broadcast state.\n return startRevalidate();\n }\n let data = _data;\n let error;\n // Update global timestamps.\n const beforeMutationTs = getTimestamp();\n MUTATION[key] = [\n beforeMutationTs,\n 0\n ];\n const hasOptimisticData = !isUndefined(optimisticData);\n const state = get();\n // `displayedData` is the current value on screen. It could be the optimistic value\n // that is going to be overridden by a `committedData`, or get reverted back.\n // `committedData` is the validated value that comes from a fetch or mutation.\n const displayedData = state.data;\n const currentData = state._c;\n const committedData = isUndefined(currentData) ? displayedData : currentData;\n // Do optimistic data update.\n if (hasOptimisticData) {\n optimisticData = isFunction(optimisticData) ? optimisticData(committedData, displayedData) : optimisticData;\n // When we set optimistic data, backup the current committedData data in `_c`.\n set({\n data: optimisticData,\n _c: committedData\n });\n }\n if (isFunction(data)) {\n // `data` is a function, call it passing current cache value.\n try {\n data = data(committedData);\n } catch (err) {\n // If it throws an error synchronously, we shouldn't update the cache.\n error = err;\n }\n }\n // `data` is a promise/thenable, resolve the final data first.\n if (data && isPromiseLike(data)) {\n // This means that the mutation is async, we need to check timestamps to\n // avoid race conditions.\n data = await data.catch((err)=>{\n error = err;\n });\n // Check if other mutations have occurred since we've started this mutation.\n // If there's a race we don't update cache or broadcast the change,\n // just return the data.\n if (beforeMutationTs !== MUTATION[key][0]) {\n if (error) throw error;\n return data;\n } else if (error && hasOptimisticData && rollbackOnError(error)) {\n // Rollback. Always populate the cache in this case but without\n // transforming the data.\n populateCache = true;\n // Reset data to be the latest committed data, and clear the `_c` value.\n set({\n data: committedData,\n _c: UNDEFINED\n });\n }\n }\n // If we should write back the cache after request.\n if (populateCache) {\n if (!error) {\n // Transform the result into data.\n if (isFunction(populateCache)) {\n const populateCachedData = populateCache(data, committedData);\n set({\n data: populateCachedData,\n error: UNDEFINED,\n _c: UNDEFINED\n });\n } else {\n // Only update cached data and reset the error if there's no error. Data can be `undefined` here.\n set({\n data,\n error: UNDEFINED,\n _c: UNDEFINED\n });\n }\n }\n }\n // Reset the timestamp to mark the mutation has ended.\n MUTATION[key][1] = getTimestamp();\n // Update existing SWR Hooks' internal states:\n Promise.resolve(startRevalidate()).then(()=>{\n // The mutation and revalidation are ended, we can clear it since the data is\n // not an optimistic value anymore.\n set({\n _c: UNDEFINED\n });\n });\n // Throw error or return data\n if (error) {\n if (throwOnError) throw error;\n return;\n }\n return data;\n }\n}\n\nconst revalidateAllKeys = (revalidators, type)=>{\n for(const key in revalidators){\n if (revalidators[key][0]) revalidators[key][0](type);\n }\n};\nconst initCache = (provider, options)=>{\n // The global state for a specific provider will be used to deduplicate\n // requests and store listeners. As well as a mutate function that is bound to\n // the cache.\n // The provider's global state might be already initialized. Let's try to get the\n // global state associated with the provider first.\n if (!SWRGlobalState.has(provider)) {\n const opts = mergeObjects(defaultConfigOptions, options);\n // If there's no global state bound to the provider, create a new one with the\n // new mutate function.\n const EVENT_REVALIDATORS = Object.create(null);\n const mutate = internalMutate.bind(UNDEFINED, provider);\n let unmount = noop;\n const subscriptions = Object.create(null);\n const subscribe = (key, callback)=>{\n const subs = subscriptions[key] || [];\n subscriptions[key] = subs;\n subs.push(callback);\n return ()=>subs.splice(subs.indexOf(callback), 1);\n };\n const setter = (key, value, prev)=>{\n provider.set(key, value);\n const subs = subscriptions[key];\n if (subs) {\n for (const fn of subs){\n fn(value, prev);\n }\n }\n };\n const initProvider = ()=>{\n if (!SWRGlobalState.has(provider)) {\n // Update the state if it's new, or if the provider has been extended.\n SWRGlobalState.set(provider, [\n EVENT_REVALIDATORS,\n Object.create(null),\n Object.create(null),\n Object.create(null),\n mutate,\n setter,\n subscribe\n ]);\n if (!IS_SERVER) {\n // When listening to the native events for auto revalidations,\n // we intentionally put a delay (setTimeout) here to make sure they are\n // fired after immediate JavaScript executions, which can be\n // React's state updates.\n // This avoids some unnecessary revalidations such as\n // https://github.com/vercel/swr/issues/1680.\n const releaseFocus = opts.initFocus(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, revalidateEvents.FOCUS_EVENT)));\n const releaseReconnect = opts.initReconnect(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, revalidateEvents.RECONNECT_EVENT)));\n unmount = ()=>{\n releaseFocus && releaseFocus();\n releaseReconnect && releaseReconnect();\n // When un-mounting, we need to remove the cache provider from the state\n // storage too because it's a side-effect. Otherwise, when re-mounting we\n // will not re-register those event listeners.\n SWRGlobalState.delete(provider);\n };\n }\n }\n };\n initProvider();\n // This is a new provider, we need to initialize it and setup DOM events\n // listeners for `focus` and `reconnect` actions.\n // We might want to inject an extra layer on top of `provider` in the future,\n // such as key serialization, auto GC, etc.\n // For now, it's just a `Map` interface without any modifications.\n return [\n provider,\n mutate,\n initProvider,\n unmount\n ];\n }\n return [\n provider,\n SWRGlobalState.get(provider)[4]\n ];\n};\n\n// error retry\nconst onErrorRetry = (_, __, config, revalidate, opts)=>{\n const maxRetryCount = config.errorRetryCount;\n const currentRetryCount = opts.retryCount;\n // Exponential backoff\n const timeout = ~~((Math.random() + 0.5) * (1 << (currentRetryCount < 8 ? currentRetryCount : 8))) * config.errorRetryInterval;\n if (!isUndefined(maxRetryCount) && currentRetryCount > maxRetryCount) {\n return;\n }\n setTimeout(revalidate, timeout, opts);\n};\nconst compare = dequal;\n// Default cache provider\nconst [cache, mutate] = initCache(new Map());\n// Default config\nconst defaultConfig = mergeObjects({\n // events\n onLoadingSlow: noop,\n onSuccess: noop,\n onError: noop,\n onErrorRetry,\n onDiscarded: noop,\n // switches\n revalidateOnFocus: true,\n revalidateOnReconnect: true,\n revalidateIfStale: true,\n shouldRetryOnError: true,\n // timeouts\n errorRetryInterval: slowConnection ? 10000 : 5000,\n focusThrottleInterval: 5 * 1000,\n dedupingInterval: 2 * 1000,\n loadingTimeout: slowConnection ? 5000 : 3000,\n // providers\n compare,\n isPaused: ()=>false,\n cache,\n mutate,\n fallback: {}\n}, // use web preset by default\npreset);\n\nconst mergeConfigs = (a, b)=>{\n // Need to create a new object to avoid mutating the original here.\n const v = mergeObjects(a, b);\n // If two configs are provided, merge their `use` and `fallback` options.\n if (b) {\n const { use: u1, fallback: f1 } = a;\n const { use: u2, fallback: f2 } = b;\n if (u1 && u2) {\n v.use = u1.concat(u2);\n }\n if (f1 && f2) {\n v.fallback = mergeObjects(f1, f2);\n }\n }\n return v;\n};\n\nconst SWRConfigContext = createContext({});\nconst SWRConfig = (props)=>{\n const { value } = props;\n const parentConfig = useContext(SWRConfigContext);\n const isFunctionalConfig = isFunction(value);\n const config = useMemo(()=>isFunctionalConfig ? value(parentConfig) : value, [\n isFunctionalConfig,\n parentConfig,\n value\n ]);\n // Extend parent context values and middleware.\n const extendedConfig = useMemo(()=>isFunctionalConfig ? config : mergeConfigs(parentConfig, config), [\n isFunctionalConfig,\n parentConfig,\n config\n ]);\n // Should not use the inherited provider.\n const provider = config && config.provider;\n // initialize the cache only on first access.\n const cacheContextRef = useRef(UNDEFINED);\n if (provider && !cacheContextRef.current) {\n cacheContextRef.current = initCache(provider(extendedConfig.cache || cache), config);\n }\n const cacheContext = cacheContextRef.current;\n // Override the cache if a new provider is given.\n if (cacheContext) {\n extendedConfig.cache = cacheContext[0];\n extendedConfig.mutate = cacheContext[1];\n }\n // Unsubscribe events.\n useIsomorphicLayoutEffect(()=>{\n if (cacheContext) {\n cacheContext[2] && cacheContext[2]();\n return cacheContext[3];\n }\n }, []);\n return createElement(SWRConfigContext.Provider, mergeObjects(props, {\n value: extendedConfig\n }));\n};\n\nexport { noop as A, isPromiseLike as B, IS_REACT_LEGACY as I, OBJECT as O, SWRConfigContext as S, UNDEFINED as U, isFunction as a, SWRGlobalState as b, cache as c, defaultConfig as d, isUndefined as e, mergeConfigs as f, SWRConfig as g, initCache as h, isWindowDefined as i, mutate as j, compare as k, stableHash as l, mergeObjects as m, internalMutate as n, getTimestamp as o, preset as p, defaultConfigOptions as q, IS_SERVER as r, serialize as s, rAF as t, useIsomorphicLayoutEffect as u, slowConnection as v, isDocumentDefined as w, isLegacyDeno as x, hasRequestAnimationFrame as y, createCacheHelper as z };\n","const FOCUS_EVENT = 0;\nconst RECONNECT_EVENT = 1;\nconst MUTATE_EVENT = 2;\nconst ERROR_REVALIDATE_EVENT = 3;\n\nexport { ERROR_REVALIDATE_EVENT, FOCUS_EVENT, MUTATE_EVENT, RECONNECT_EVENT };\n","import { i as isWindowDefined, a as isFunction, m as mergeObjects, S as SWRConfigContext, d as defaultConfig, s as serialize, b as SWRGlobalState, c as cache, e as isUndefined, f as mergeConfigs } from './config-context-client-v7VOFo66.mjs';\nexport { I as IS_REACT_LEGACY, r as IS_SERVER, O as OBJECT, g as SWRConfig, U as UNDEFINED, k as compare, z as createCacheHelper, q as defaultConfigOptions, o as getTimestamp, y as hasRequestAnimationFrame, h as initCache, n as internalMutate, w as isDocumentDefined, x as isLegacyDeno, B as isPromiseLike, j as mutate, A as noop, p as preset, t as rAF, v as slowConnection, l as stableHash, u as useIsomorphicLayoutEffect } from './config-context-client-v7VOFo66.mjs';\nimport * as revalidateEvents from './events.mjs';\nexport { revalidateEvents };\nimport { INFINITE_PREFIX } from './constants.mjs';\nexport { INFINITE_PREFIX } from './constants.mjs';\nimport React, { useContext } from 'react';\nexport * from './types.mjs';\n\n// @ts-expect-error\nconst enableDevtools = isWindowDefined && window.__SWR_DEVTOOLS_USE__;\nconst use = enableDevtools ? window.__SWR_DEVTOOLS_USE__ : [];\nconst setupDevTools = ()=>{\n if (enableDevtools) {\n // @ts-expect-error\n window.__SWR_DEVTOOLS_REACT__ = React;\n }\n};\n\nconst normalize = (args)=>{\n return isFunction(args[1]) ? [\n args[0],\n args[1],\n args[2] || {}\n ] : [\n args[0],\n null,\n (args[1] === null ? args[2] : args[1]) || {}\n ];\n};\n\nconst useSWRConfig = ()=>{\n return mergeObjects(defaultConfig, useContext(SWRConfigContext));\n};\n\nconst preload = (key_, fetcher)=>{\n const [key, fnArg] = serialize(key_);\n const [, , , PRELOAD] = SWRGlobalState.get(cache);\n // Prevent preload to be called multiple times before used.\n if (PRELOAD[key]) return PRELOAD[key];\n const req = fetcher(fnArg);\n PRELOAD[key] = req;\n return req;\n};\nconst middleware = (useSWRNext)=>(key_, fetcher_, config)=>{\n // fetcher might be a sync function, so this should not be an async function\n const fetcher = fetcher_ && ((...args)=>{\n const [key] = serialize(key_);\n const [, , , PRELOAD] = SWRGlobalState.get(cache);\n if (key.startsWith(INFINITE_PREFIX)) {\n // we want the infinite fetcher to be called.\n // handling of the PRELOAD cache happens there.\n return fetcher_(...args);\n }\n const req = PRELOAD[key];\n if (isUndefined(req)) return fetcher_(...args);\n delete PRELOAD[key];\n return req;\n });\n return useSWRNext(key_, fetcher, config);\n };\n\nconst BUILT_IN_MIDDLEWARE = use.concat(middleware);\n\n// It's tricky to pass generic types as parameters, so we just directly override\n// the types here.\nconst withArgs = (hook)=>{\n return function useSWRArgs(...args) {\n // Get the default and inherited configuration.\n const fallbackConfig = useSWRConfig();\n // Normalize arguments.\n const [key, fn, _config] = normalize(args);\n // Merge configurations.\n const config = mergeConfigs(fallbackConfig, _config);\n // Apply middleware\n let next = hook;\n const { use } = config;\n const middleware = (use || []).concat(BUILT_IN_MIDDLEWARE);\n for(let i = middleware.length; i--;){\n next = middleware[i](next);\n }\n return next(key, fn || config.fetcher || null, config);\n };\n};\n\n// Add a callback function to a list of keyed callback functions and return\n// the unsubscribe function.\nconst subscribeCallback = (key, callbacks, callback)=>{\n const keyedRevalidators = callbacks[key] || (callbacks[key] = []);\n keyedRevalidators.push(callback);\n return ()=>{\n const index = keyedRevalidators.indexOf(callback);\n if (index >= 0) {\n // O(1): faster than splice\n keyedRevalidators[index] = keyedRevalidators[keyedRevalidators.length - 1];\n keyedRevalidators.pop();\n }\n };\n};\n\n// Create a custom hook with a middleware\nconst withMiddleware = (useSWR, middleware)=>{\n return (...args)=>{\n const [key, fn, config] = normalize(args);\n const uses = (config.use || []).concat(middleware);\n return useSWR(key, fn, {\n ...config,\n use: uses\n });\n };\n};\n\nsetupDevTools();\n\nexport { SWRGlobalState, cache, defaultConfig, isFunction, isUndefined, isWindowDefined, mergeConfigs, mergeObjects, normalize, preload, serialize, subscribeCallback, useSWRConfig, withArgs, withMiddleware };\n","const INFINITE_PREFIX = '$inf$';\n\nexport { INFINITE_PREFIX };\n","import React, { useRef, useMemo, useCallback, useDebugValue } from 'react';\nimport { useSyncExternalStore } from 'use-sync-external-store/shim/index.js';\nimport { OBJECT as OBJECT$1, SWRConfig as SWRConfig$1, defaultConfig, withArgs, SWRGlobalState, serialize as serialize$1, createCacheHelper, isUndefined as isUndefined$1, UNDEFINED as UNDEFINED$1, isPromiseLike, getTimestamp, isFunction as isFunction$1, revalidateEvents, internalMutate, useIsomorphicLayoutEffect, subscribeCallback, IS_SERVER, rAF, IS_REACT_LEGACY, mergeObjects } from '../_internal/index.mjs';\nexport { mutate, preload, useSWRConfig } from '../_internal/index.mjs';\n\n// Shared state between server components and client components\nconst noop = ()=>{};\n// Using noop() as the undefined value as undefined can be replaced\n// by something else. Prettier ignore and extra parentheses are necessary here\n// to ensure that tsc doesn't remove the __NOINLINE__ comment.\n// prettier-ignore\nconst UNDEFINED = /*#__NOINLINE__*/ noop();\nconst OBJECT = Object;\nconst isUndefined = (v)=>v === UNDEFINED;\nconst isFunction = (v)=>typeof v == 'function';\n\n// use WeakMap to store the object->key mapping\n// so the objects can be garbage collected.\n// WeakMap uses a hashtable under the hood, so the lookup\n// complexity is almost O(1).\nconst table = new WeakMap();\nconst isObjectType = (value, type)=>OBJECT.prototype.toString.call(value) === `[object ${type}]`;\n// counter of the key\nlet counter = 0;\n// A stable hash implementation that supports:\n// - Fast and ensures unique hash properties\n// - Handles unserializable values\n// - Handles object key ordering\n// - Generates short results\n//\n// This is not a serialization function, and the result is not guaranteed to be\n// parsable.\nconst stableHash = (arg)=>{\n const type = typeof arg;\n const isDate = isObjectType(arg, 'Date');\n const isRegex = isObjectType(arg, 'RegExp');\n const isPlainObject = isObjectType(arg, 'Object');\n let result;\n let index;\n if (OBJECT(arg) === arg && !isDate && !isRegex) {\n // Object/function, not null/date/regexp. Use WeakMap to store the id first.\n // If it's already hashed, directly return the result.\n result = table.get(arg);\n if (result) return result;\n // Store the hash first for circular reference detection before entering the\n // recursive `stableHash` calls.\n // For other objects like set and map, we use this id directly as the hash.\n result = ++counter + '~';\n table.set(arg, result);\n if (Array.isArray(arg)) {\n // Array.\n result = '@';\n for(index = 0; index < arg.length; index++){\n result += stableHash(arg[index]) + ',';\n }\n table.set(arg, result);\n }\n if (isPlainObject) {\n // Object, sort keys.\n result = '#';\n const keys = OBJECT.keys(arg).sort();\n while(!isUndefined(index = keys.pop())){\n if (!isUndefined(arg[index])) {\n result += index + ':' + stableHash(arg[index]) + ',';\n }\n }\n table.set(arg, result);\n }\n } else {\n result = isDate ? arg.toJSON() : type == 'symbol' ? arg.toString() : type == 'string' ? JSON.stringify(arg) : '' + arg;\n }\n return result;\n};\n\nconst serialize = (key)=>{\n if (isFunction(key)) {\n try {\n key = key();\n } catch (err) {\n // dependencies not ready\n key = '';\n }\n }\n // Use the original key as the argument of fetcher. This can be a string or an\n // array of values.\n const args = key;\n // If key is not falsy, or not an empty array, hash it.\n key = typeof key == 'string' ? key : (Array.isArray(key) ? key.length : key) ? stableHash(key) : '';\n return [\n key,\n args\n ];\n};\n\nconst unstable_serialize = (key)=>serialize(key)[0];\n\n/// <reference types=\"react/experimental\" />\nconst use = React.use || // This extra generic is to avoid TypeScript mixing up the generic and JSX sytax\n// and emitting an error.\n// We assume that this is only for the `use(thenable)` case, not `use(context)`.\n// https://github.com/facebook/react/blob/aed00dacfb79d17c53218404c52b1c7aa59c4a89/packages/react-server/src/ReactFizzThenable.js#L45\n((thenable)=>{\n switch(thenable.status){\n case 'pending':\n throw thenable;\n case 'fulfilled':\n return thenable.value;\n case 'rejected':\n throw thenable.reason;\n default:\n thenable.status = 'pending';\n thenable.then((v)=>{\n thenable.status = 'fulfilled';\n thenable.value = v;\n }, (e)=>{\n thenable.status = 'rejected';\n thenable.reason = e;\n });\n throw thenable;\n }\n});\nconst WITH_DEDUPE = {\n dedupe: true\n};\nconst useSWRHandler = (_key, fetcher, config)=>{\n const { cache, compare, suspense, fallbackData, revalidateOnMount, revalidateIfStale, refreshInterval, refreshWhenHidden, refreshWhenOffline, keepPreviousData } = config;\n const [EVENT_REVALIDATORS, MUTATION, FETCH, PRELOAD] = SWRGlobalState.get(cache);\n // `key` is the identifier of the SWR internal state,\n // `fnArg` is the argument/arguments parsed from the key, which will be passed\n // to the fetcher.\n // All of them are derived from `_key`.\n const [key, fnArg] = serialize$1(_key);\n // If it's the initial render of this hook.\n const initialMountedRef = useRef(false);\n // If the hook is unmounted already. This will be used to prevent some effects\n // to be called after unmounting.\n const unmountedRef = useRef(false);\n // Refs to keep the key and config.\n const keyRef = useRef(key);\n const fetcherRef = useRef(fetcher);\n const configRef = useRef(config);\n const getConfig = ()=>configRef.current;\n const isActive = ()=>getConfig().isVisible() && getConfig().isOnline();\n const [getCache, setCache, subscribeCache, getInitialCache] = createCacheHelper(cache, key);\n const stateDependencies = useRef({}).current;\n // Resolve the fallback data from either the inline option, or the global provider.\n // If it's a promise, we simply let React suspend and resolve it for us.\n const fallback = isUndefined$1(fallbackData) ? isUndefined$1(config.fallback) ? UNDEFINED$1 : config.fallback[key] : fallbackData;\n const isEqual = (prev, current)=>{\n for(const _ in stateDependencies){\n const t = _;\n if (t === 'data') {\n if (!compare(prev[t], current[t])) {\n if (!isUndefined$1(prev[t])) {\n return false;\n }\n if (!compare(returnedData, current[t])) {\n return false;\n }\n }\n } else {\n if (current[t] !== prev[t]) {\n return false;\n }\n }\n }\n return true;\n };\n const getSnapshot = useMemo(()=>{\n const shouldStartRequest = (()=>{\n if (!key) return false;\n if (!fetcher) return false;\n // If `revalidateOnMount` is set, we take the value directly.\n if (!isUndefined$1(revalidateOnMount)) return revalidateOnMount;\n // If it's paused, we skip revalidation.\n if (getConfig().isPaused()) return false;\n if (suspense) return false;\n return revalidateIfStale !== false;\n })();\n // Get the cache and merge it with expected states.\n const getSelectedCache = (state)=>{\n // We only select the needed fields from the state.\n const snapshot = mergeObjects(state);\n delete snapshot._k;\n if (!shouldStartRequest) {\n return snapshot;\n }\n return {\n isValidating: true,\n isLoading: true,\n ...snapshot\n };\n };\n const cachedData = getCache();\n const initialData = getInitialCache();\n const clientSnapshot = getSelectedCache(cachedData);\n const serverSnapshot = cachedData === initialData ? clientSnapshot : getSelectedCache(initialData);\n // To make sure that we are returning the same object reference to avoid\n // unnecessary re-renders, we keep the previous snapshot and use deep\n // comparison to check if we need to return a new one.\n let memorizedSnapshot = clientSnapshot;\n return [\n ()=>{\n const newSnapshot = getSelectedCache(getCache());\n const compareResult = isEqual(newSnapshot, memorizedSnapshot);\n if (compareResult) {\n // Mentally, we should always return the `memorizedSnapshot` here\n // as there's no change between the new and old snapshots.\n // However, since the `isEqual` function only compares selected fields,\n // the values of the unselected fields might be changed. That's\n // simply because we didn't track them.\n // To support the case in https://github.com/vercel/swr/pull/2576,\n // we need to update these fields in the `memorizedSnapshot` too\n // with direct mutations to ensure the snapshot is always up-to-date\n // even for the unselected fields, but only trigger re-renders when\n // the selected fields are changed.\n memorizedSnapshot.data = newSnapshot.data;\n memorizedSnapshot.isLoading = newSnapshot.isLoading;\n memorizedSnapshot.isValidating = newSnapshot.isValidating;\n memorizedSnapshot.error = newSnapshot.error;\n return memorizedSnapshot;\n } else {\n memorizedSnapshot = newSnapshot;\n return newSnapshot;\n }\n },\n ()=>serverSnapshot\n ];\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n cache,\n key\n ]);\n // Get the current state that SWR should return.\n const cached = useSyncExternalStore(useCallback((callback)=>subscribeCache(key, (current, prev)=>{\n if (!isEqual(prev, current)) callback();\n }), // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n cache,\n key\n ]), getSnapshot[0], getSnapshot[1]);\n const isInitialMount = !initialMountedRef.current;\n const hasRevalidator = EVENT_REVALIDATORS[key] && EVENT_REVALIDATORS[key].length > 0;\n const cachedData = cached.data;\n const data = isUndefined$1(cachedData) ? fallback && isPromiseLike(fallback) ? use(fallback) : fallback : cachedData;\n const error = cached.error;\n // Use a ref to store previously returned data. Use the initial data as its initial value.\n const laggyDataRef = useRef(data);\n const returnedData = keepPreviousData ? isUndefined$1(cachedData) ? isUndefined$1(laggyDataRef.current) ? data : laggyDataRef.current : cachedData : data;\n // - Suspense mode and there's stale data for the initial render.\n // - Not suspense mode and there is no fallback data and `revalidateIfStale` is enabled.\n // - `revalidateIfStale` is enabled but `data` is not defined.\n const shouldDoInitialRevalidation = (()=>{\n // if a key already has revalidators and also has error, we should not trigger revalidation\n if (hasRevalidator && !isUndefined$1(error)) return false;\n // If `revalidateOnMount` is set, we take the value directly.\n if (isInitialMount && !isUndefined$1(revalidateOnMount)) return revalidateOnMount;\n // If it's paused, we skip revalidation.\n if (getConfig().isPaused()) return false;\n // Under suspense mode, it will always fetch on render if there is no\n // stale data so no need to revalidate immediately mount it again.\n // If data exists, only revalidate if `revalidateIfStale` is true.\n if (suspense) return isUndefined$1(data) ? false : revalidateIfStale;\n // If there is no stale data, we need to revalidate when mount;\n // If `revalidateIfStale` is set to true, we will always revalidate.\n return isUndefined$1(data) || revalidateIfStale;\n })();\n // Resolve the default validating state:\n // If it's able to validate, and it should revalidate when mount, this will be true.\n const defaultValidatingState = !!(key && fetcher && isInitialMount && shouldDoInitialRevalidation);\n const isValidating = isUndefined$1(cached.isValidating) ? defaultValidatingState : cached.isValidating;\n const isLoading = isUndefined$1(cached.isLoading) ? defaultValidatingState : cached.isLoading;\n // The revalidation function is a carefully crafted wrapper of the original\n // `fetcher`, to correctly handle the many edge cases.\n const revalidate = useCallback(async (revalidateOpts)=>{\n const currentFetcher = fetcherRef.current;\n if (!key || !currentFetcher || unmountedRef.current || getConfig().isPaused()) {\n return false;\n }\n let newData;\n let startAt;\n let loading = true;\n const opts = revalidateOpts || {};\n // If there is no ongoing concurrent request, or `dedupe` is not set, a\n // new request should be initiated.\n const shouldStartNewRequest = !FETCH[key] || !opts.dedupe;\n /*\n For React 17\n Do unmount check for calls:\n If key has changed during the revalidation, or the component has been\n unmounted, old dispatch and old event callbacks should not take any\n effect\n\n For React 18\n only check if key has changed\n https://github.com/reactwg/react-18/discussions/82\n */ const callbackSafeguard = ()=>{\n if (IS_REACT_LEGACY) {\n return !unmountedRef.current && key === keyRef.current && initialMountedRef.current;\n }\n return key === keyRef.current;\n };\n // The final state object when the request finishes.\n const finalState = {\n isValidating: false,\n isLoading: false\n };\n const finishRequestAndUpdateState = ()=>{\n setCache(finalState);\n };\n const cleanupState = ()=>{\n // Check if it's still the same request before deleting it.\n const requestInfo = FETCH[key];\n if (requestInfo && requestInfo[1] === startAt) {\n delete FETCH[key];\n }\n };\n // Start fetching. Change the `isValidating` state, update the cache.\n const initialState = {\n isValidating: true\n };\n // It is in the `isLoading` state, if and only if there is no cached data.\n // This bypasses fallback data and laggy data.\n if (isUndefined$1(getCache().data)) {\n initialState.isLoading = true;\n }\n try {\n if (shouldStartNewRequest) {\n setCache(initialState);\n // If no cache is being rendered currently (it shows a blank page),\n // we trigger the loading slow event.\n if (config.loadingTimeout && isUndefined$1(getCache().data)) {\n setTimeout(()=>{\n if (loading && callbackSafeguard()) {\n getConfig().onLoadingSlow(key, config);\n }\n }, config.loadingTimeout);\n }\n // Start the request and save the timestamp.\n // Key must be truthy if entering here.\n FETCH[key] = [\n currentFetcher(fnArg),\n getTimestamp()\n ];\n }\n // Wait until the ongoing request is done. Deduplication is also\n // considered here.\n ;\n [newData, startAt] = FETCH[key];\n newData = await newData;\n if (shouldStartNewRequest) {\n // If the request isn't interrupted, clean it up after the\n // deduplication interval.\n setTimeout(cleanupState, config.dedupingInterval);\n }\n // If there're other ongoing request(s), started after the current one,\n // we need to ignore the current one to avoid possible race conditions:\n // req1------------------>res1 (current one)\n // req2---------------->res2\n // the request that fired later will always be kept.\n // The timestamp maybe be `undefined` or a number\n if (!FETCH[key] || FETCH[key][1] !== startAt) {\n if (shouldStartNewRequest) {\n if (callbackSafeguard()) {\n getConfig().onDiscarded(key);\n }\n }\n return false;\n }\n // Clear error.\n finalState.error = UNDEFINED$1;\n // If there're other mutations(s), that overlapped with the current revalidation:\n // case 1:\n // req------------------>res\n // mutate------>end\n // case 2:\n // req------------>res\n // mutate------>end\n // case 3:\n // req------------------>res\n // mutate-------...---------->\n // we have to ignore the revalidation result (res) because it's no longer fresh.\n // meanwhile, a new revalidation should be triggered when the mutation ends.\n const mutationInfo = MUTATION[key];\n if (!isUndefined$1(mutationInfo) && // case 1\n (startAt <= mutationInfo[0] || // case 2\n startAt <= mutationInfo[1] || // case 3\n mutationInfo[1] === 0)) {\n finishRequestAndUpdateState();\n if (shouldStartNewRequest) {\n if (callbackSafeguard()) {\n getConfig().onDiscarded(key);\n }\n }\n return false;\n }\n // Deep compare with the latest state to avoid extra re-renders.\n // For local state, compare and assign.\n const cacheData = getCache().data;\n // Since the compare fn could be custom fn\n // cacheData might be different from newData even when compare fn returns True\n finalState.data = compare(cacheData, newData) ? cacheData : newData;\n // Trigger the successful callback if it's the original request.\n if (shouldStartNewRequest) {\n if (callbackSafeguard()) {\n getConfig().onSuccess(newData, key, config);\n }\n }\n } catch (err) {\n cleanupState();\n const currentConfig = getConfig();\n const { shouldRetryOnError } = currentConfig;\n // Not paused, we continue handling the error. Otherwise, discard it.\n if (!currentConfig.isPaused()) {\n // Get a new error, don't use deep comparison for errors.\n finalState.error = err;\n // Error event and retry logic. Only for the actual request, not\n // deduped ones.\n if (shouldStartNewRequest && callbackSafeguard()) {\n currentConfig.onError(err, key, currentConfig);\n if (shouldRetryOnError === true || isFunction$1(shouldRetryOnError) && shouldRetryOnError(err)) {\n if (!getConfig().revalidateOnFocus || !getConfig().revalidateOnReconnect || isActive()) {\n // If it's inactive, stop. It will auto-revalidate when\n // refocusing or reconnecting.\n // When retrying, deduplication is always enabled.\n currentConfig.onErrorRetry(err, key, currentConfig, (_opts)=>{\n const revalidators = EVENT_REVALIDATORS[key];\n if (revalidators && revalidators[0]) {\n revalidators[0](revalidateEvents.ERROR_REVALIDATE_EVENT, _opts);\n }\n }, {\n retryCount: (opts.retryCount || 0) + 1,\n dedupe: true\n });\n }\n }\n }\n }\n }\n // Mark loading as stopped.\n loading = false;\n // Update the current hook's state.\n finishRequestAndUpdateState();\n return true;\n }, // `setState` is immutable, and `eventsCallback`, `fnArg`, and\n // `keyValidating` are depending on `key`, so we can exclude them from\n // the deps array.\n //\n // FIXME:\n // `fn` and `config` might be changed during the lifecycle,\n // but they might be changed every render like this.\n // `useSWR('key', () => fetch('/api/'), { suspense: true })`\n // So we omit the values from the deps array\n // even though it might cause unexpected behaviors.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n key,\n cache\n ]);\n // Similar to the global mutate but bound to the current cache and key.\n // `cache` isn't allowed to change during the lifecycle.\n const boundMutate = useCallback(// Use callback to make sure `keyRef.current` returns latest result every time\n (...args)=>{\n return internalMutate(cache, keyRef.current, ...args);\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n []);\n // The logic for updating refs.\n useIsomorphicLayoutEffect(()=>{\n fetcherRef.current = fetcher;\n configRef.current = config;\n // Handle laggy data updates. If there's cached data of the current key,\n // it'll be the correct reference.\n if (!isUndefined$1(cachedData)) {\n laggyDataRef.current = cachedData;\n }\n });\n // After mounted or key changed.\n useIsomorphicLayoutEffect(()=>{\n if (!key) return;\n const softRevalidate = revalidate.bind(UNDEFINED$1, WITH_DEDUPE);\n let nextFocusRevalidatedAt = 0;\n if (getConfig().revalidateOnFocus) {\n const initNow = Date.now();\n nextFocusRevalidatedAt = initNow + getConfig().focusThrottleInterval;\n }\n // Expose revalidators to global event listeners. So we can trigger\n // revalidation from the outside.\n const onRevalidate = (type, opts = {})=>{\n if (type == revalidateEvents.FOCUS_EVENT) {\n const now = Date.now();\n if (getConfig().revalidateOnFocus && now > nextFocusRevalidatedAt && isActive()) {\n nextFocusRevalidatedAt = now + getConfig().focusThrottleInterval;\n softRevalidate();\n }\n } else if (type == revalidateEvents.RECONNECT_EVENT) {\n if (getConfig().revalidateOnReconnect && isActive()) {\n softRevalidate();\n }\n } else if (type == revalidateEvents.MUTATE_EVENT) {\n return revalidate();\n } else if (type == revalidateEvents.ERROR_REVALIDATE_EVENT) {\n return revalidate(opts);\n }\n return;\n };\n const unsubEvents = subscribeCallback(key, EVENT_REVALIDATORS, onRevalidate);\n // Mark the component as mounted and update corresponding refs.\n unmountedRef.current = false;\n keyRef.current = key;\n initialMountedRef.current = true;\n // Keep the original key in the cache.\n setCache({\n _k: fnArg\n });\n // Trigger a revalidation\n if (shouldDoInitialRevalidation) {\n if (isUndefined$1(data) || IS_SERVER) {\n // Revalidate immediately.\n softRevalidate();\n } else {\n // Delay the revalidate if we have data to return so we won't block\n // rendering.\n rAF(softRevalidate);\n }\n }\n return ()=>{\n // Mark it as unmounted.\n unmountedRef.current = true;\n unsubEvents();\n };\n }, [\n key\n ]);\n // Polling\n useIsomorphicLayoutEffect(()=>{\n let timer;\n function next() {\n // Use the passed interval\n // ...or invoke the function with the updated data to get the interval\n const interval = isFunction$1(refreshInterval) ? refreshInterval(getCache().data) : refreshInterval;\n // We only start the next interval if `refreshInterval` is not 0, and:\n // - `force` is true, which is the start of polling\n // - or `timer` is not 0, which means the effect wasn't canceled\n if (interval && timer !== -1) {\n timer = setTimeout(execute, interval);\n }\n }\n function execute() {\n // Check if it's OK to execute:\n // Only revalidate when the page is visible, online, and not errored.\n if (!getCache().error && (refreshWhenHidden || getConfig().isVisible()) && (refreshWhenOffline || getConfig().isOnline())) {\n revalidate(WITH_DEDUPE).then(next);\n } else {\n // Schedule the next interval to check again.\n next();\n }\n }\n next();\n return ()=>{\n if (timer) {\n clearTimeout(timer);\n timer = -1;\n }\n };\n }, [\n refreshInterval,\n refreshWhenHidden,\n refreshWhenOffline,\n key\n ]);\n // Display debug info in React DevTools.\n useDebugValue(returnedData);\n // In Suspense mode, we can't return the empty `data` state.\n // If there is an `error`, the `error` needs to be thrown to the error boundary.\n // If there is no `error`, the `revalidation` promise needs to be thrown to\n // the suspense boundary.\n if (suspense && isUndefined$1(data) && key) {\n // SWR should throw when trying to use Suspense on the server with React 18,\n // without providing any fallback data. This causes hydration errors. See:\n // https://github.com/vercel/swr/issues/1832\n if (!IS_REACT_LEGACY && IS_SERVER) {\n throw new Error('Fallback data is required when using Suspense in SSR.');\n }\n // Always update fetcher and config refs even with the Suspense mode.\n fetcherRef.current = fetcher;\n configRef.current = config;\n unmountedRef.current = false;\n const req = PRELOAD[key];\n if (!isUndefined$1(req)) {\n const promise = boundMutate(req);\n use(promise);\n }\n if (isUndefined$1(error)) {\n const promise = revalidate(WITH_DEDUPE);\n if (!isUndefined$1(returnedData)) {\n promise.status = 'fulfilled';\n promise.value = true;\n }\n use(promise);\n } else {\n throw error;\n }\n }\n const swrResponse = {\n mutate: boundMutate,\n get data () {\n stateDependencies.data = true;\n return returnedData;\n },\n get error () {\n stateDependencies.error = true;\n return error;\n },\n get isValidating () {\n stateDependencies.isValidating = true;\n return isValidating;\n },\n get isLoading () {\n stateDependencies.isLoading = true;\n return isLoading;\n }\n };\n return swrResponse;\n};\nconst SWRConfig = OBJECT$1.defineProperty(SWRConfig$1, 'defaultValue', {\n value: defaultConfig\n});\n/**\n * A hook to fetch data.\n *\n * @link https://swr.vercel.app\n * @example\n * ```jsx\n * import useSWR from 'swr'\n * function Profile() {\n * const { data, error, isLoading } = useSWR('/api/user', fetcher)\n * if (error) return <div>failed to load</div>\n * if (isLoading) return <div>loading...</div>\n * return <div>hello {data.name}!</div>\n * }\n * ```\n */ const useSWR = withArgs(useSWRHandler);\n\n// useSWR\n\nexport { SWRConfig, useSWR as default, unstable_serialize };\n","function throttle(function_, wait) {\n\tif (typeof function_ !== 'function') {\n\t\tthrow new TypeError(`Expected the first argument to be a \\`function\\`, got \\`${typeof function_}\\`.`);\n\t}\n\n\t// TODO: Add `wait` validation too in the next major version.\n\n\tlet timeoutId;\n\tlet lastCallTime = 0;\n\n\treturn function throttled(...arguments_) { // eslint-disable-line func-names\n\t\tclearTimeout(timeoutId);\n\n\t\tconst now = Date.now();\n\t\tconst timeSinceLastCall = now - lastCallTime;\n\t\tconst delayForNextCall = wait - timeSinceLastCall;\n\n\t\tif (delayForNextCall <= 0) {\n\t\t\tlastCallTime = now;\n\t\t\tfunction_.apply(this, arguments_);\n\t\t} else {\n\t\t\ttimeoutId = setTimeout(() => {\n\t\t\t\tlastCallTime = Date.now();\n\t\t\t\tfunction_.apply(this, arguments_);\n\t\t\t}, delayForNextCall);\n\t\t}\n\t};\n}\n\nmodule.exports = throttle;\n","// src/use-assistant.ts\nimport { isAbortError } from \"@ai-sdk/provider-utils\";\nimport {\n generateId,\n processAssistantStream\n} from \"@ai-sdk/ui-utils\";\nimport { useCallback, useRef, useState } from \"react\";\nvar getOriginalFetch = () => fetch;\nfunction useAssistant({\n api,\n threadId: threadIdParam,\n credentials,\n headers,\n body,\n onError,\n fetch: fetch2\n}) {\n const [messages, setMessages] = useState([]);\n const [input, setInput] = useState(\"\");\n const [currentThreadId, setCurrentThreadId] = useState(\n void 0\n );\n const [status, setStatus] = useState(\"awaiting_message\");\n const [error, setError] = useState(void 0);\n const handleInputChange = (event) => {\n setInput(event.target.value);\n };\n const abortControllerRef = useRef(null);\n const stop = useCallback(() => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n abortControllerRef.current = null;\n }\n }, []);\n const append = async (message, requestOptions) => {\n var _a, _b;\n setStatus(\"in_progress\");\n setMessages((messages2) => {\n var _a2;\n return [\n ...messages2,\n {\n ...message,\n id: (_a2 = message.id) != null ? _a2 : generateId()\n }\n ];\n });\n setInput(\"\");\n const abortController = new AbortController();\n try {\n abortControllerRef.current = abortController;\n const actualFetch = fetch2 != null ? fetch2 : getOriginalFetch();\n const response = await actualFetch(api, {\n method: \"POST\",\n credentials,\n signal: abortController.signal,\n headers: { \"Content-Type\": \"application/json\", ...headers },\n body: JSON.stringify({\n ...body,\n // always use user-provided threadId when available:\n threadId: (_a = threadIdParam != null ? threadIdParam : currentThreadId) != null ? _a : null,\n message: message.content,\n // optional request data:\n data: requestOptions == null ? void 0 : requestOptions.data\n })\n });\n if (!response.ok) {\n throw new Error(\n (_b = await response.text()) != null ? _b : \"Failed to fetch the assistant response.\"\n );\n }\n if (response.body == null) {\n throw new Error(\"The response body is empty.\");\n }\n await processAssistantStream({\n stream: response.body,\n onAssistantMessagePart(value) {\n setMessages((messages2) => [\n ...messages2,\n {\n id: value.id,\n role: value.role,\n content: value.content[0].text.value,\n parts: []\n }\n ]);\n },\n onTextPart(value) {\n setMessages((messages2) => {\n const lastMessage = messages2[messages2.length - 1];\n return [\n ...messages2.slice(0, messages2.length - 1),\n {\n id: lastMessage.id,\n role: lastMessage.role,\n content: lastMessage.content + value,\n parts: lastMessage.parts\n }\n ];\n });\n },\n onAssistantControlDataPart(value) {\n setCurrentThreadId(value.threadId);\n setMessages((messages2) => {\n const lastMessage = messages2[messages2.length - 1];\n lastMessage.id = value.messageId;\n return [...messages2.slice(0, messages2.length - 1), lastMessage];\n });\n },\n onDataMessagePart(value) {\n setMessages((messages2) => {\n var _a2;\n return [\n ...messages2,\n {\n id: (_a2 = value.id) != null ? _a2 : generateId(),\n role: \"data\",\n content: \"\",\n data: value.data,\n parts: []\n }\n ];\n });\n },\n onErrorPart(value) {\n setError(new Error(value));\n }\n });\n } catch (error2) {\n if (isAbortError(error2) && abortController.signal.aborted) {\n abortControllerRef.current = null;\n return;\n }\n if (onError && error2 instanceof Error) {\n onError(error2);\n }\n setError(error2);\n } finally {\n abortControllerRef.current = null;\n setStatus(\"awaiting_message\");\n }\n };\n const submitMessage = async (event, requestOptions) => {\n var _a;\n (_a = event == null ? void 0 : event.preventDefault) == null ? void 0 : _a.call(event);\n if (input === \"\") {\n return;\n }\n append({ role: \"user\", content: input, parts: [] }, requestOptions);\n };\n const setThreadId = (threadId) => {\n setCurrentThreadId(threadId);\n setMessages([]);\n };\n return {\n append,\n messages,\n setMessages,\n threadId: currentThreadId,\n setThreadId,\n input,\n setInput,\n handleInputChange,\n submitMessage,\n status,\n error,\n stop\n };\n}\n\n// src/use-chat.ts\nimport {\n callChatApi,\n extractMaxToolInvocationStep,\n fillMessageParts,\n generateId as generateIdFunc,\n getMessageParts,\n isAssistantMessageWithCompletedToolCalls,\n prepareAttachmentsForRequest,\n shouldResubmitMessages,\n updateToolCallResult\n} from \"@ai-sdk/ui-utils\";\nimport { useCallback as useCallback2, useEffect as useEffect2, useMemo, useRef as useRef2, useState as useState3 } from \"react\";\nimport useSWR from \"swr\";\n\n// src/throttle.ts\nimport throttleFunction from \"throttleit\";\nfunction throttle(fn, waitMs) {\n return waitMs != null ? throttleFunction(fn, waitMs) : fn;\n}\n\n// src/util/use-stable-value.ts\nimport { isDeepEqualData } from \"@ai-sdk/ui-utils\";\nimport { useEffect, useState as useState2 } from \"react\";\nfunction useStableValue(latestValue) {\n const [value, setValue] = useState2(latestValue);\n useEffect(() => {\n if (!isDeepEqualData(latestValue, value)) {\n setValue(latestValue);\n }\n }, [latestValue, value]);\n return value;\n}\n\n// src/use-chat.ts\nfunction useChat({\n api = \"/api/chat\",\n id,\n initialMessages,\n initialInput = \"\",\n sendExtraMessageFields,\n onToolCall,\n experimental_prepareRequestBody,\n maxSteps = 1,\n streamProtocol = \"data\",\n onResponse,\n onFinish,\n onError,\n credentials,\n headers,\n body,\n generateId: generateId2 = generateIdFunc,\n fetch: fetch2,\n keepLastMessageOnError = true,\n experimental_throttle: throttleWaitMs\n} = {}) {\n const [hookId] = useState3(generateId2);\n const chatId = id != null ? id : hookId;\n const chatKey = typeof api === \"string\" ? [api, chatId] : chatId;\n const stableInitialMessages = useStableValue(initialMessages != null ? initialMessages : []);\n const processedInitialMessages = useMemo(\n () => fillMessageParts(stableInitialMessages),\n [stableInitialMessages]\n );\n const { data: messages, mutate } = useSWR(\n [chatKey, \"messages\"],\n null,\n { fallbackData: processedInitialMessages }\n );\n const messagesRef = useRef2(messages || []);\n useEffect2(() => {\n messagesRef.current = messages || [];\n }, [messages]);\n const { data: streamData, mutate: mutateStreamData } = useSWR([chatKey, \"streamData\"], null);\n const streamDataRef = useRef2(streamData);\n useEffect2(() => {\n streamDataRef.current = streamData;\n }, [streamData]);\n const { data: status = \"ready\", mutate: mutateStatus } = useSWR([chatKey, \"status\"], null);\n const { data: error = void 0, mutate: setError } = useSWR([chatKey, \"error\"], null);\n const abortControllerRef = useRef2(null);\n const extraMetadataRef = useRef2({\n credentials,\n headers,\n body\n });\n useEffect2(() => {\n extraMetadataRef.current = {\n credentials,\n headers,\n body\n };\n }, [credentials, headers, body]);\n const triggerRequest = useCallback2(\n async (chatRequest, requestType = \"generate\") => {\n var _a, _b;\n mutateStatus(\"submitted\");\n setError(void 0);\n const chatMessages = fillMessageParts(chatRequest.messages);\n const messageCount = chatMessages.length;\n const maxStep = extractMaxToolInvocationStep(\n (_a = chatMessages[chatMessages.length - 1]) == null ? void 0 : _a.toolInvocations\n );\n try {\n const abortController = new AbortController();\n abortControllerRef.current = abortController;\n const throttledMutate = throttle(mutate, throttleWaitMs);\n const throttledMutateStreamData = throttle(\n mutateStreamData,\n throttleWaitMs\n );\n const previousMessages = messagesRef.current;\n throttledMutate(chatMessages, false);\n const constructedMessagesPayload = sendExtraMessageFields ? chatMessages : chatMessages.map(\n ({\n role,\n content,\n experimental_attachments,\n data,\n annotations,\n toolInvocations,\n parts\n }) => ({\n role,\n content,\n ...experimental_attachments !== void 0 && {\n experimental_attachments\n },\n ...data !== void 0 && { data },\n ...annotations !== void 0 && { annotations },\n ...toolInvocations !== void 0 && { toolInvocations },\n ...parts !== void 0 && { parts }\n })\n );\n const existingData = streamDataRef.current;\n await callChatApi({\n api,\n body: (_b = experimental_prepareRequestBody == null ? void 0 : experimental_prepareRequestBody({\n id: chatId,\n messages: chatMessages,\n requestData: chatRequest.data,\n requestBody: chatRequest.body\n })) != null ? _b : {\n id: chatId,\n messages: constructedMessagesPayload,\n data: chatRequest.data,\n ...extraMetadataRef.current.body,\n ...chatRequest.body\n },\n streamProtocol,\n credentials: extraMetadataRef.current.credentials,\n headers: {\n ...extraMetadataRef.current.headers,\n ...chatRequest.headers\n },\n abortController: () => abortControllerRef.current,\n restoreMessagesOnFailure() {\n if (!keepLastMessageOnError) {\n throttledMutate(previousMessages, false);\n }\n },\n onResponse,\n onUpdate({ message, data, replaceLastMessage }) {\n mutateStatus(\"streaming\");\n throttledMutate(\n [\n ...replaceLastMessage ? chatMessages.slice(0, chatMessages.length - 1) : chatMessages,\n message\n ],\n false\n );\n if (data == null ? void 0 : data.length) {\n throttledMutateStreamData(\n [...existingData != null ? existingData : [], ...data],\n false\n );\n }\n },\n onToolCall,\n onFinish,\n generateId: generateId2,\n fetch: fetch2,\n lastMessage: chatMessages[chatMessages.length - 1],\n requestType\n });\n abortControllerRef.current = null;\n mutateStatus(\"ready\");\n } catch (err) {\n if (err.name === \"AbortError\") {\n abortControllerRef.current = null;\n mutateStatus(\"ready\");\n return null;\n }\n if (onError && err instanceof Error) {\n onError(err);\n }\n setError(err);\n mutateStatus(\"error\");\n }\n const messages2 = messagesRef.current;\n if (shouldResubmitMessages({\n originalMaxToolInvocationStep: maxStep,\n originalMessageCount: messageCount,\n maxSteps,\n messages: messages2\n })) {\n await triggerRequest({ messages: messages2 });\n }\n },\n [\n mutate,\n mutateStatus,\n api,\n extraMetadataRef,\n onResponse,\n onFinish,\n onError,\n setError,\n mutateStreamData,\n streamDataRef,\n streamProtocol,\n sendExtraMessageFields,\n experimental_prepareRequestBody,\n onToolCall,\n maxSteps,\n messagesRef,\n abortControllerRef,\n generateId2,\n fetch2,\n keepLastMessageOnError,\n throttleWaitMs,\n chatId\n ]\n );\n const append = useCallback2(\n async (message, {\n data,\n headers: headers2,\n body: body2,\n experimental_attachments = message.experimental_attachments\n } = {}) => {\n var _a, _b;\n const attachmentsForRequest = await prepareAttachmentsForRequest(\n experimental_attachments\n );\n const messages2 = messagesRef.current.concat({\n ...message,\n id: (_a = message.id) != null ? _a : generateId2(),\n createdAt: (_b = message.createdAt) != null ? _b : /* @__PURE__ */ new Date(),\n experimental_attachments: attachmentsForRequest.length > 0 ? attachmentsForRequest : void 0,\n parts: getMessageParts(message)\n });\n return triggerRequest({ messages: messages2, headers: headers2, body: body2, data });\n },\n [triggerRequest, generateId2]\n );\n const reload = useCallback2(\n async ({ data, headers: headers2, body: body2 } = {}) => {\n const messages2 = messagesRef.current;\n if (messages2.length === 0) {\n return null;\n }\n const lastMessage = messages2[messages2.length - 1];\n return triggerRequest({\n messages: lastMessage.role === \"assistant\" ? messages2.slice(0, -1) : messages2,\n headers: headers2,\n body: body2,\n data\n });\n },\n [triggerRequest]\n );\n const stop = useCallback2(() => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n abortControllerRef.current = null;\n }\n }, []);\n const experimental_resume = useCallback2(async () => {\n const messages2 = messagesRef.current;\n triggerRequest({ messages: messages2 }, \"resume\");\n }, [triggerRequest]);\n const setMessages = useCallback2(\n (messages2) => {\n if (typeof messages2 === \"function\") {\n messages2 = messages2(messagesRef.current);\n }\n const messagesWithParts = fillMessageParts(messages2);\n mutate(messagesWithParts, false);\n messagesRef.current = messagesWithParts;\n },\n [mutate]\n );\n const setData = useCallback2(\n (data) => {\n if (typeof data === \"function\") {\n data = data(streamDataRef.current);\n }\n mutateStreamData(data, false);\n streamDataRef.current = data;\n },\n [mutateStreamData]\n );\n const [input, setInput] = useState3(initialInput);\n const handleSubmit = useCallback2(\n async (event, options = {}, metadata) => {\n var _a;\n (_a = event == null ? void 0 : event.preventDefault) == null ? void 0 : _a.call(event);\n if (!input && !options.allowEmptySubmit)\n return;\n if (metadata) {\n extraMetadataRef.current = {\n ...extraMetadataRef.current,\n ...metadata\n };\n }\n const attachmentsForRequest = await prepareAttachmentsForRequest(\n options.experimental_attachments\n );\n const messages2 = messagesRef.current.concat({\n id: generateId2(),\n createdAt: /* @__PURE__ */ new Date(),\n role: \"user\",\n content: input,\n experimental_attachments: attachmentsForRequest.length > 0 ? attachmentsForRequest : void 0,\n parts: [{ type: \"text\", text: input }]\n });\n const chatRequest = {\n messages: messages2,\n headers: options.headers,\n body: options.body,\n data: options.data\n };\n triggerRequest(chatRequest);\n setInput(\"\");\n },\n [input, generateId2, triggerRequest]\n );\n const handleInputChange = (e) => {\n setInput(e.target.value);\n };\n const addToolResult = useCallback2(\n ({ toolCallId, result }) => {\n const currentMessages = messagesRef.current;\n updateToolCallResult({\n messages: currentMessages,\n toolCallId,\n toolResult: result\n });\n mutate(\n [\n ...currentMessages.slice(0, currentMessages.length - 1),\n { ...currentMessages[currentMessages.length - 1] }\n ],\n false\n );\n if (status === \"submitted\" || status === \"streaming\") {\n return;\n }\n const lastMessage = currentMessages[currentMessages.length - 1];\n if (isAssistantMessageWithCompletedToolCalls(lastMessage)) {\n triggerRequest({ messages: currentMessages });\n }\n },\n [mutate, status, triggerRequest]\n );\n return {\n messages: messages != null ? messages : [],\n id: chatId,\n setMessages,\n data: streamData,\n setData,\n error,\n append,\n reload,\n stop,\n experimental_resume,\n input,\n setInput,\n handleInputChange,\n handleSubmit,\n isLoading: status === \"submitted\" || status === \"streaming\",\n status,\n addToolResult\n };\n}\n\n// src/use-completion.ts\nimport {\n callCompletionApi\n} from \"@ai-sdk/ui-utils\";\nimport { useCallback as useCallback3, useEffect as useEffect3, useId, useRef as useRef3, useState as useState4 } from \"react\";\nimport useSWR2 from \"swr\";\nfunction useCompletion({\n api = \"/api/completion\",\n id,\n initialCompletion = \"\",\n initialInput = \"\",\n credentials,\n headers,\n body,\n streamProtocol = \"data\",\n fetch: fetch2,\n onResponse,\n onFinish,\n onError,\n experimental_throttle: throttleWaitMs\n} = {}) {\n const hookId = useId();\n const completionId = id || hookId;\n const { data, mutate } = useSWR2([api, completionId], null, {\n fallbackData: initialCompletion\n });\n const { data: isLoading = false, mutate: mutateLoading } = useSWR2(\n [completionId, \"loading\"],\n null\n );\n const { data: streamData, mutate: mutateStreamData } = useSWR2([completionId, \"streamData\"], null);\n const [error, setError] = useState4(void 0);\n const completion = data;\n const [abortController, setAbortController] = useState4(null);\n const extraMetadataRef = useRef3({\n credentials,\n headers,\n body\n });\n useEffect3(() => {\n extraMetadataRef.current = {\n credentials,\n headers,\n body\n };\n }, [credentials, headers, body]);\n const triggerRequest = useCallback3(\n async (prompt, options) => callCompletionApi({\n api,\n prompt,\n credentials: extraMetadataRef.current.credentials,\n headers: { ...extraMetadataRef.current.headers, ...options == null ? void 0 : options.headers },\n body: {\n ...extraMetadataRef.current.body,\n ...options == null ? void 0 : options.body\n },\n streamProtocol,\n fetch: fetch2,\n // throttle streamed ui updates:\n setCompletion: throttle(\n (completion2) => mutate(completion2, false),\n throttleWaitMs\n ),\n onData: throttle(\n (data2) => mutateStreamData([...streamData != null ? streamData : [], ...data2 != null ? data2 : []], false),\n throttleWaitMs\n ),\n setLoading: mutateLoading,\n setError,\n setAbortController,\n onResponse,\n onFinish,\n onError\n }),\n [\n mutate,\n mutateLoading,\n api,\n extraMetadataRef,\n setAbortController,\n onResponse,\n onFinish,\n onError,\n setError,\n streamData,\n streamProtocol,\n fetch2,\n mutateStreamData,\n throttleWaitMs\n ]\n );\n const stop = useCallback3(() => {\n if (abortController) {\n abortController.abort();\n setAbortController(null);\n }\n }, [abortController]);\n const setCompletion = useCallback3(\n (completion2) => {\n mutate(completion2, false);\n },\n [mutate]\n );\n const complete = useCallback3(\n async (prompt, options) => {\n return triggerRequest(prompt, options);\n },\n [triggerRequest]\n );\n const [input, setInput] = useState4(initialInput);\n const handleSubmit = useCallback3(\n (event) => {\n var _a;\n (_a = event == null ? void 0 : event.preventDefault) == null ? void 0 : _a.call(event);\n return input ? complete(input) : void 0;\n },\n [input, complete]\n );\n const handleInputChange = useCallback3(\n (e) => {\n setInput(e.target.value);\n },\n [setInput]\n );\n return {\n completion,\n complete,\n error,\n setCompletion,\n stop,\n input,\n setInput,\n handleInputChange,\n handleSubmit,\n isLoading,\n data: streamData\n };\n}\n\n// src/use-object.ts\nimport {\n isAbortError as isAbortError2,\n safeValidateTypes\n} from \"@ai-sdk/provider-utils\";\nimport {\n asSchema,\n isDeepEqualData as isDeepEqualData2,\n parsePartialJson\n} from \"@ai-sdk/ui-utils\";\nimport { useCallback as useCallback4, useId as useId2, useRef as useRef4, useState as useState5 } from \"react\";\nimport useSWR3 from \"swr\";\nvar getOriginalFetch2 = () => fetch;\nfunction useObject({\n api,\n id,\n schema,\n // required, in the future we will use it for validation\n initialValue,\n fetch: fetch2,\n onError,\n onFinish,\n headers,\n credentials\n}) {\n const hookId = useId2();\n const completionId = id != null ? id : hookId;\n const { data, mutate } = useSWR3(\n [api, completionId],\n null,\n { fallbackData: initialValue }\n );\n const [error, setError] = useState5(void 0);\n const [isLoading, setIsLoading] = useState5(false);\n const abortControllerRef = useRef4(null);\n const stop = useCallback4(() => {\n var _a;\n try {\n (_a = abortControllerRef.current) == null ? void 0 : _a.abort();\n } catch (ignored) {\n } finally {\n setIsLoading(false);\n abortControllerRef.current = null;\n }\n }, []);\n const submit = async (input) => {\n var _a;\n try {\n mutate(void 0);\n setIsLoading(true);\n setError(void 0);\n const abortController = new AbortController();\n abortControllerRef.current = abortController;\n const actualFetch = fetch2 != null ? fetch2 : getOriginalFetch2();\n const response = await actualFetch(api, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers\n },\n credentials,\n signal: abortController.signal,\n body: JSON.stringify(input)\n });\n if (!response.ok) {\n throw new Error(\n (_a = await response.text()) != null ? _a : \"Failed to fetch the response.\"\n );\n }\n if (response.body == null) {\n throw new Error(\"The response body is empty.\");\n }\n let accumulatedText = \"\";\n let latestObject = void 0;\n await response.body.pipeThrough(new TextDecoderStream()).pipeTo(\n new WritableStream({\n write(chunk) {\n accumulatedText += chunk;\n const { value } = parsePartialJson(accumulatedText);\n const currentObject = value;\n if (!isDeepEqualData2(latestObject, currentObject)) {\n latestObject = currentObject;\n mutate(currentObject);\n }\n },\n close() {\n setIsLoading(false);\n abortControllerRef.current = null;\n if (onFinish != null) {\n const validationResult = safeValidateTypes({\n value: latestObject,\n schema: asSchema(schema)\n });\n onFinish(\n validationResult.success ? { object: validationResult.value, error: void 0 } : { object: void 0, error: validationResult.error }\n );\n }\n }\n })\n );\n } catch (error2) {\n if (isAbortError2(error2)) {\n return;\n }\n if (onError && error2 instanceof Error) {\n onError(error2);\n }\n setIsLoading(false);\n setError(error2 instanceof Error ? error2 : new Error(String(error2)));\n }\n };\n return {\n submit,\n object: data,\n error,\n isLoading,\n stop\n };\n}\nvar experimental_useObject = useObject;\nexport {\n experimental_useObject,\n useAssistant,\n useChat,\n useCompletion\n};\n//# sourceMappingURL=index.mjs.map","export function debounce(fn, time) {\n var timerId = undefined;\n return function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (timerId) {\n clearTimeout(timerId);\n }\n timerId = setTimeout(function () {\n return fn.apply(void 0, args);\n }, time);\n };\n}","export function flatten(values) {\n return values.reduce(function (a, b) {\n return a.concat(b);\n }, []);\n}","var autocompleteId = 0;\nexport function generateAutocompleteId() {\n return \"autocomplete-\".concat(autocompleteId++);\n}","export function getItemsCount(state) {\n if (state.collections.length === 0) {\n return 0;\n }\n return state.collections.reduce(function (sum, collection) {\n return sum + collection.items.length;\n }, 0);\n}","function isPrimitive(obj) {\n return obj !== Object(obj);\n}\nexport function isEqual(first, second) {\n if (first === second) {\n return true;\n }\n if (isPrimitive(first) || isPrimitive(second) || typeof first === 'function' || typeof second === 'function') {\n return first === second;\n }\n if (Object.keys(first).length !== Object.keys(second).length) {\n return false;\n }\n for (var _i = 0, _Object$keys = Object.keys(first); _i < _Object$keys.length; _i++) {\n var key = _Object$keys[_i];\n if (!(key in second)) {\n return false;\n }\n if (!isEqual(first[key], second[key])) {\n return false;\n }\n }\n return true;\n}","export var noop = function noop() {};","export var version = '1.19.2';","import { version } from './version';\nexport var userAgents = [{\n segment: 'autocomplete-core',\n version: version\n}];","export function createClickedEvent(_ref) {\n var item = _ref.item,\n _ref$items = _ref.items,\n items = _ref$items === void 0 ? [] : _ref$items;\n return {\n index: item.__autocomplete_indexName,\n items: [item],\n positions: [1 + items.findIndex(function (x) {\n return x.objectID === item.objectID;\n })],\n queryID: item.__autocomplete_queryID,\n algoliaSource: ['autocomplete']\n };\n}","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n/**\n * Determines if a given insights `client` supports the optional call to `init`\n * and the ability to set credentials via extra parameters when sending events.\n */\nexport function isModernInsightsClient(client) {\n var _split$map = (client.version || '').split('.').map(Number),\n _split$map2 = _slicedToArray(_split$map, 2),\n major = _split$map2[0],\n minor = _split$map2[1];\n\n /* eslint-disable @typescript-eslint/camelcase */\n var v3 = major >= 3;\n var v2_4 = major === 2 && minor >= 4;\n var v1_10 = major === 1 && minor >= 10;\n return v3 || v2_4 || v1_10;\n /* eslint-enable @typescript-eslint/camelcase */\n}","var _excluded = [\"items\"],\n _excluded2 = [\"items\"];\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { isModernInsightsClient } from './isModernInsightsClient';\nfunction chunk(item) {\n var chunkSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 20;\n var chunks = [];\n for (var i = 0; i < item.objectIDs.length; i += chunkSize) {\n chunks.push(_objectSpread(_objectSpread({}, item), {}, {\n objectIDs: item.objectIDs.slice(i, i + chunkSize)\n }));\n }\n return chunks;\n}\nfunction mapToInsightsParamsApi(params) {\n return params.map(function (_ref) {\n var items = _ref.items,\n param = _objectWithoutProperties(_ref, _excluded);\n return _objectSpread(_objectSpread({}, param), {}, {\n objectIDs: (items === null || items === void 0 ? void 0 : items.map(function (_ref2) {\n var objectID = _ref2.objectID;\n return objectID;\n })) || param.objectIDs\n });\n });\n}\nexport function createSearchInsightsApi(searchInsights) {\n var canSendHeaders = isModernInsightsClient(searchInsights);\n function sendToInsights(method, payloads, items) {\n if (canSendHeaders && typeof items !== 'undefined') {\n var _items$0$__autocomple = items[0].__autocomplete_algoliaCredentials,\n appId = _items$0$__autocomple.appId,\n apiKey = _items$0$__autocomple.apiKey;\n var headers = {\n 'X-Algolia-Application-Id': appId,\n 'X-Algolia-API-Key': apiKey\n };\n searchInsights.apply(void 0, [method].concat(_toConsumableArray(payloads), [{\n headers: headers\n }]));\n } else {\n searchInsights.apply(void 0, [method].concat(_toConsumableArray(payloads)));\n }\n }\n return {\n /**\n * Initializes Insights with Algolia credentials.\n */\n init: function init(appId, apiKey) {\n searchInsights('init', {\n appId: appId,\n apiKey: apiKey\n });\n },\n /**\n * Sets the authenticated user token to attach to events.\n * Unsets the authenticated token by passing `undefined`.\n *\n * @link https://www.algolia.com/doc/api-reference/api-methods/set-authenticated-user-token/\n */\n setAuthenticatedUserToken: function setAuthenticatedUserToken(authenticatedUserToken) {\n searchInsights('setAuthenticatedUserToken', authenticatedUserToken);\n },\n /**\n * Sets the user token to attach to events.\n */\n setUserToken: function setUserToken(userToken) {\n searchInsights('setUserToken', userToken);\n },\n /**\n * Sends click events to capture a query and its clicked items and positions.\n *\n * @link https://www.algolia.com/doc/api-reference/api-methods/clicked-object-ids-after-search/\n */\n clickedObjectIDsAfterSearch: function clickedObjectIDsAfterSearch() {\n for (var _len = arguments.length, params = new Array(_len), _key = 0; _key < _len; _key++) {\n params[_key] = arguments[_key];\n }\n if (params.length > 0) {\n sendToInsights('clickedObjectIDsAfterSearch', mapToInsightsParamsApi(params), params[0].items);\n }\n },\n /**\n * Sends click events to capture clicked items.\n *\n * @link https://www.algolia.com/doc/api-reference/api-methods/clicked-object-ids/\n */\n clickedObjectIDs: function clickedObjectIDs() {\n for (var _len2 = arguments.length, params = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n params[_key2] = arguments[_key2];\n }\n if (params.length > 0) {\n sendToInsights('clickedObjectIDs', mapToInsightsParamsApi(params), params[0].items);\n }\n },\n /**\n * Sends click events to capture the filters a user clicks on.\n *\n * @link https://www.algolia.com/doc/api-reference/api-methods/clicked-filters/\n */\n clickedFilters: function clickedFilters() {\n for (var _len3 = arguments.length, params = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n params[_key3] = arguments[_key3];\n }\n if (params.length > 0) {\n searchInsights.apply(void 0, ['clickedFilters'].concat(params));\n }\n },\n /**\n * Sends conversion events to capture a query and its clicked items.\n *\n * @link https://www.algolia.com/doc/api-reference/api-methods/converted-object-ids-after-search/\n */\n convertedObjectIDsAfterSearch: function convertedObjectIDsAfterSearch() {\n for (var _len4 = arguments.length, params = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n params[_key4] = arguments[_key4];\n }\n if (params.length > 0) {\n sendToInsights('convertedObjectIDsAfterSearch', mapToInsightsParamsApi(params), params[0].items);\n }\n },\n /**\n * Sends conversion events to capture clicked items.\n *\n * @link https://www.algolia.com/doc/api-reference/api-methods/converted-object-ids/\n */\n convertedObjectIDs: function convertedObjectIDs() {\n for (var _len5 = arguments.length, params = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n params[_key5] = arguments[_key5];\n }\n if (params.length > 0) {\n sendToInsights('convertedObjectIDs', mapToInsightsParamsApi(params), params[0].items);\n }\n },\n /**\n * Sends conversion events to capture the filters a user uses when converting.\n *\n * @link https://www.algolia.com/doc/api-reference/api-methods/converted-filters/\n */\n convertedFilters: function convertedFilters() {\n for (var _len6 = arguments.length, params = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n params[_key6] = arguments[_key6];\n }\n if (params.length > 0) {\n searchInsights.apply(void 0, ['convertedFilters'].concat(params));\n }\n },\n /**\n * Sends view events to capture clicked items.\n *\n * @link https://www.algolia.com/doc/api-reference/api-methods/viewed-object-ids/\n */\n viewedObjectIDs: function viewedObjectIDs() {\n for (var _len7 = arguments.length, params = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n params[_key7] = arguments[_key7];\n }\n if (params.length > 0) {\n params.reduce(function (acc, _ref3) {\n var items = _ref3.items,\n param = _objectWithoutProperties(_ref3, _excluded2);\n return [].concat(_toConsumableArray(acc), _toConsumableArray(chunk(_objectSpread(_objectSpread({}, param), {}, {\n objectIDs: (items === null || items === void 0 ? void 0 : items.map(function (_ref4) {\n var objectID = _ref4.objectID;\n return objectID;\n })) || param.objectIDs\n })).map(function (payload) {\n return {\n items: items,\n payload: payload\n };\n })));\n }, []).forEach(function (_ref5) {\n var items = _ref5.items,\n payload = _ref5.payload;\n return sendToInsights('viewedObjectIDs', [payload], items);\n });\n }\n },\n /**\n * Sends view events to capture the filters a user uses when viewing.\n *\n * @link https://www.algolia.com/doc/api-reference/api-methods/viewed-filters/\n */\n viewedFilters: function viewedFilters() {\n for (var _len8 = arguments.length, params = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n params[_key8] = arguments[_key8];\n }\n if (params.length > 0) {\n searchInsights.apply(void 0, ['viewedFilters'].concat(params));\n }\n }\n };\n}","export function createViewedEvents(_ref) {\n var items = _ref.items;\n var itemsByIndexName = items.reduce(function (acc, current) {\n var _acc$current$__autoco;\n acc[current.__autocomplete_indexName] = ((_acc$current$__autoco = acc[current.__autocomplete_indexName]) !== null && _acc$current$__autoco !== void 0 ? _acc$current$__autoco : []).concat(current);\n return acc;\n }, {});\n return Object.keys(itemsByIndexName).map(function (indexName) {\n var items = itemsByIndexName[indexName];\n return {\n index: indexName,\n items: items,\n algoliaSource: ['autocomplete']\n };\n });\n}","export function isAlgoliaInsightsHit(hit) {\n return hit.objectID && hit.__autocomplete_indexName && hit.__autocomplete_queryID;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { createRef, debounce, isEqual, noop, safelyRunOnBrowser } from '@algolia/autocomplete-shared';\nimport { createClickedEvent } from './createClickedEvent';\nimport { createSearchInsightsApi } from './createSearchInsightsApi';\nimport { createViewedEvents } from './createViewedEvents';\nimport { isAlgoliaInsightsHit } from './isAlgoliaInsightsHit';\nvar VIEW_EVENT_DELAY = 400;\nvar ALGOLIA_INSIGHTS_VERSION = '2.15.0';\nvar ALGOLIA_INSIGHTS_SRC = \"https://cdn.jsdelivr.net/npm/search-insights@\".concat(ALGOLIA_INSIGHTS_VERSION, \"/dist/search-insights.min.js\");\nvar sendViewedObjectIDs = debounce(function (_ref) {\n var onItemsChange = _ref.onItemsChange,\n items = _ref.items,\n insights = _ref.insights,\n state = _ref.state;\n onItemsChange({\n insights: insights,\n insightsEvents: createViewedEvents({\n items: items\n }).map(function (event) {\n return _objectSpread({\n eventName: 'Items Viewed'\n }, event);\n }),\n state: state\n });\n}, VIEW_EVENT_DELAY);\nexport function createAlgoliaInsightsPlugin(options) {\n var _getOptions = getOptions(options),\n providedInsightsClient = _getOptions.insightsClient,\n insightsInitParams = _getOptions.insightsInitParams,\n onItemsChange = _getOptions.onItemsChange,\n onSelectEvent = _getOptions.onSelect,\n onActiveEvent = _getOptions.onActive,\n __autocomplete_clickAnalytics = _getOptions.__autocomplete_clickAnalytics;\n var insightsClient = providedInsightsClient;\n if (!providedInsightsClient) {\n safelyRunOnBrowser(function (_ref2) {\n var window = _ref2.window;\n var pointer = window.AlgoliaAnalyticsObject || 'aa';\n if (typeof pointer === 'string') {\n insightsClient = window[pointer];\n }\n if (!insightsClient) {\n window.AlgoliaAnalyticsObject = pointer;\n if (!window[pointer]) {\n window[pointer] = function () {\n if (!window[pointer].queue) {\n window[pointer].queue = [];\n }\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n window[pointer].queue.push(args);\n };\n }\n window[pointer].version = ALGOLIA_INSIGHTS_VERSION;\n insightsClient = window[pointer];\n loadInsights(window);\n }\n });\n }\n\n // We return an empty plugin if `insightsClient` is still undefined at\n // this stage, which can happen in server environments.\n if (!insightsClient) {\n return {};\n }\n if (insightsInitParams) {\n insightsClient('init', _objectSpread({\n partial: true\n }, insightsInitParams));\n }\n var insights = createSearchInsightsApi(insightsClient);\n var previousItems = createRef([]);\n var debouncedOnStateChange = debounce(function (_ref3) {\n var state = _ref3.state;\n if (!state.isOpen) {\n return;\n }\n var items = state.collections.reduce(function (acc, current) {\n return [].concat(_toConsumableArray(acc), _toConsumableArray(current.items));\n }, []).filter(isAlgoliaInsightsHit);\n if (!isEqual(previousItems.current.map(function (x) {\n return x.objectID;\n }), items.map(function (x) {\n return x.objectID;\n }))) {\n previousItems.current = items;\n if (items.length > 0) {\n sendViewedObjectIDs({\n onItemsChange: onItemsChange,\n items: items,\n insights: insights,\n state: state\n });\n }\n }\n }, 0);\n return {\n name: 'aa.algoliaInsightsPlugin',\n subscribe: function subscribe(_ref4) {\n var setContext = _ref4.setContext,\n onSelect = _ref4.onSelect,\n onActive = _ref4.onActive;\n function setInsightsContext(userToken) {\n setContext({\n algoliaInsightsPlugin: {\n __algoliaSearchParameters: _objectSpread(_objectSpread({}, __autocomplete_clickAnalytics ? {\n clickAnalytics: true\n } : {}), userToken ? {\n userToken: normalizeUserToken(userToken)\n } : {}),\n insights: insights\n }\n });\n }\n insightsClient('addAlgoliaAgent', 'insights-plugin');\n setInsightsContext();\n\n // Handles user token changes\n insightsClient('onUserTokenChange', function (userToken) {\n setInsightsContext(userToken);\n });\n insightsClient('getUserToken', null, function (_error, userToken) {\n setInsightsContext(userToken);\n });\n onSelect(function (_ref5) {\n var item = _ref5.item,\n state = _ref5.state,\n event = _ref5.event,\n source = _ref5.source;\n if (!isAlgoliaInsightsHit(item)) {\n return;\n }\n onSelectEvent({\n state: state,\n event: event,\n insights: insights,\n item: item,\n insightsEvents: [_objectSpread({\n eventName: 'Item Selected'\n }, createClickedEvent({\n item: item,\n items: source.getItems().filter(isAlgoliaInsightsHit)\n }))]\n });\n });\n onActive(function (_ref6) {\n var item = _ref6.item,\n source = _ref6.source,\n state = _ref6.state,\n event = _ref6.event;\n if (!isAlgoliaInsightsHit(item)) {\n return;\n }\n onActiveEvent({\n state: state,\n event: event,\n insights: insights,\n item: item,\n insightsEvents: [_objectSpread({\n eventName: 'Item Active'\n }, createClickedEvent({\n item: item,\n items: source.getItems().filter(isAlgoliaInsightsHit)\n }))]\n });\n });\n },\n onStateChange: function onStateChange(_ref7) {\n var state = _ref7.state;\n debouncedOnStateChange({\n state: state\n });\n },\n __autocomplete_pluginOptions: options\n };\n}\nfunction getAlgoliaSources() {\n var _context$algoliaInsig;\n var algoliaSourceBase = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var context = arguments.length > 1 ? arguments[1] : undefined;\n return [].concat(_toConsumableArray(algoliaSourceBase), ['autocomplete-internal'], _toConsumableArray((_context$algoliaInsig = context.algoliaInsightsPlugin) !== null && _context$algoliaInsig !== void 0 && _context$algoliaInsig.__automaticInsights ? ['autocomplete-automatic'] : []));\n}\nfunction getOptions(options) {\n return _objectSpread({\n onItemsChange: function onItemsChange(_ref8) {\n var insights = _ref8.insights,\n insightsEvents = _ref8.insightsEvents,\n state = _ref8.state;\n insights.viewedObjectIDs.apply(insights, _toConsumableArray(insightsEvents.map(function (event) {\n return _objectSpread(_objectSpread({}, event), {}, {\n algoliaSource: getAlgoliaSources(event.algoliaSource, state.context)\n });\n })));\n },\n onSelect: function onSelect(_ref9) {\n var insights = _ref9.insights,\n insightsEvents = _ref9.insightsEvents,\n state = _ref9.state;\n insights.clickedObjectIDsAfterSearch.apply(insights, _toConsumableArray(insightsEvents.map(function (event) {\n return _objectSpread(_objectSpread({}, event), {}, {\n algoliaSource: getAlgoliaSources(event.algoliaSource, state.context)\n });\n })));\n },\n onActive: noop,\n __autocomplete_clickAnalytics: true\n }, options);\n}\nfunction loadInsights(environment) {\n var errorMessage = \"[Autocomplete]: Could not load search-insights.js. Please load it manually following https://alg.li/insights-autocomplete\";\n try {\n var script = environment.document.createElement('script');\n script.async = true;\n script.src = ALGOLIA_INSIGHTS_SRC;\n script.onerror = function () {\n // eslint-disable-next-line no-console\n console.error(errorMessage);\n };\n document.body.appendChild(script);\n } catch (cause) {\n // eslint-disable-next-line no-console\n console.error(errorMessage);\n }\n}\n\n/**\n * While `search-insights` supports both string and number user tokens,\n * the Search API only accepts strings. This function normalizes the user token.\n */\nfunction normalizeUserToken(userToken) {\n return typeof userToken === 'number' ? userToken.toString() : userToken;\n}","/**\n * Safely runs code meant for browser environments only.\n */\nexport function safelyRunOnBrowser(callback) {\n if (typeof window !== 'undefined') {\n return callback({\n window: window\n });\n }\n return undefined;\n}","export function createRef(initialValue) {\n return {\n current: initialValue\n };\n}","function createInternalCancelablePromise(promise, initialState) {\n var state = initialState;\n return {\n then: function then(onfulfilled, onrejected) {\n return createInternalCancelablePromise(promise.then(createCallback(onfulfilled, state, promise), createCallback(onrejected, state, promise)), state);\n },\n catch: function _catch(onrejected) {\n return createInternalCancelablePromise(promise.catch(createCallback(onrejected, state, promise)), state);\n },\n finally: function _finally(onfinally) {\n if (onfinally) {\n state.onCancelList.push(onfinally);\n }\n return createInternalCancelablePromise(promise.finally(createCallback(onfinally && function () {\n state.onCancelList = [];\n return onfinally();\n }, state, promise)), state);\n },\n cancel: function cancel() {\n state.isCanceled = true;\n var callbacks = state.onCancelList;\n state.onCancelList = [];\n callbacks.forEach(function (callback) {\n callback();\n });\n },\n isCanceled: function isCanceled() {\n return state.isCanceled === true;\n }\n };\n}\nexport function createCancelablePromise(executor) {\n return createInternalCancelablePromise(new Promise(function (resolve, reject) {\n return executor(resolve, reject);\n }), {\n isCanceled: false,\n onCancelList: []\n });\n}\ncreateCancelablePromise.resolve = function (value) {\n return cancelable(Promise.resolve(value));\n};\ncreateCancelablePromise.reject = function (reason) {\n return cancelable(Promise.reject(reason));\n};\nexport function cancelable(promise) {\n return createInternalCancelablePromise(promise, {\n isCanceled: false,\n onCancelList: []\n });\n}\nfunction createCallback(onResult, state, fallback) {\n if (!onResult) {\n return fallback;\n }\n return function callback(arg) {\n if (state.isCanceled) {\n return arg;\n }\n return onResult(arg);\n };\n}","// Ensures multiple callers sync to the same promise.\nvar _hasWaitPromiseResolved = true;\nvar _waitPromise;\nexport function createCancelablePromiseList() {\n var list = [];\n return {\n add: function add(cancelablePromise) {\n list.push(cancelablePromise);\n return cancelablePromise.finally(function () {\n list = list.filter(function (item) {\n return item !== cancelablePromise;\n });\n });\n },\n cancelAll: function cancelAll() {\n list.forEach(function (promise) {\n return promise.cancel();\n });\n },\n isEmpty: function isEmpty() {\n return list.length === 0;\n },\n wait: function wait(timeout) {\n // Reuse promise if already exists. Keeps multiple callers subscribed to the same promise.\n if (!_hasWaitPromiseResolved) {\n return _waitPromise;\n }\n\n // Creates a promise which either resolves after all pending requests complete\n // or the timeout is reached (if provided). Whichever comes first.\n _hasWaitPromiseResolved = false;\n _waitPromise = !timeout ? Promise.all(list) : Promise.race([Promise.all(list), new Promise(function (resolve) {\n return setTimeout(resolve, timeout);\n })]);\n return _waitPromise.then(function () {\n _hasWaitPromiseResolved = true;\n });\n }\n };\n}","/**\n * Returns the next active item ID from the current state.\n *\n * We allow circular keyboard navigation from the base index.\n * The base index can either be `null` (nothing is highlighted) or `0`\n * (the first item is highlighted).\n * The base index is allowed to get assigned `null` only if\n * `props.defaultActiveItemId` is `null`. This pattern allows to \"stop\"\n * by the actual query before navigating to other suggestions as seen on\n * Google or Amazon.\n *\n * @param moveAmount The offset to increment (or decrement) the last index\n * @param baseIndex The current index to compute the next index from\n * @param itemCount The number of items\n * @param defaultActiveItemId The default active index to fallback to\n */\nexport function getNextActiveItemId(moveAmount, baseIndex, itemCount, defaultActiveItemId) {\n if (!itemCount) {\n return null;\n }\n if (moveAmount < 0 && (baseIndex === null || defaultActiveItemId !== null && baseIndex === 0)) {\n return itemCount + moveAmount;\n }\n var numericIndex = (baseIndex === null ? -1 : baseIndex) + moveAmount;\n if (numericIndex <= -1 || numericIndex >= itemCount) {\n return defaultActiveItemId === null ? null : 0;\n }\n return numericIndex;\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nimport { invariant, decycle, noop } from '@algolia/autocomplete-shared';\nexport function getNormalizedSources(getSources, params) {\n var seenSourceIds = [];\n return Promise.resolve(getSources(params)).then(function (sources) {\n invariant(Array.isArray(sources), function () {\n return \"The `getSources` function must return an array of sources but returned type \".concat(JSON.stringify(_typeof(sources)), \":\\n\\n\").concat(JSON.stringify(decycle(sources), null, 2));\n });\n return Promise.all(sources\n // We allow `undefined` and `false` sources to allow users to use\n // `Boolean(query) && source` (=> `false`).\n // We need to remove these values at this point.\n .filter(function (maybeSource) {\n return Boolean(maybeSource);\n }).map(function (source) {\n invariant(typeof source.sourceId === 'string', 'A source must provide a `sourceId` string.');\n if (seenSourceIds.includes(source.sourceId)) {\n throw new Error(\"[Autocomplete] The `sourceId` \".concat(JSON.stringify(source.sourceId), \" is not unique.\"));\n }\n seenSourceIds.push(source.sourceId);\n var defaultSource = {\n getItemInputValue: function getItemInputValue(_ref) {\n var state = _ref.state;\n return state.query;\n },\n getItemUrl: function getItemUrl() {\n return undefined;\n },\n onSelect: function onSelect(_ref2) {\n var setIsOpen = _ref2.setIsOpen;\n setIsOpen(false);\n },\n onActive: noop,\n onResolve: noop\n };\n Object.keys(defaultSource).forEach(function (key) {\n defaultSource[key].__default = true;\n });\n var normalizedSource = _objectSpread(_objectSpread({}, defaultSource), source);\n return Promise.resolve(normalizedSource);\n }));\n });\n}","function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\n/**\n * If a plugin is configured to await a submit event, this returns a promise\n * for either the max timeout value found or until it completes.\n * Otherwise, return undefined.\n */\nexport var getPluginSubmitPromise = function getPluginSubmitPromise(plugins, pendingRequests) {\n var waitUntilComplete = false;\n var timeouts = [];\n var _iterator = _createForOfIteratorHelper(plugins),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _plugin$__autocomplet, _plugin$__autocomplet2, _plugin$__autocomplet3;\n var plugin = _step.value;\n var value = (_plugin$__autocomplet = plugin.__autocomplete_pluginOptions) === null || _plugin$__autocomplet === void 0 ? void 0 : (_plugin$__autocomplet2 = (_plugin$__autocomplet3 = _plugin$__autocomplet).awaitSubmit) === null || _plugin$__autocomplet2 === void 0 ? void 0 : _plugin$__autocomplet2.call(_plugin$__autocomplet3);\n if (typeof value === 'number') {\n timeouts.push(value);\n } else if (value === true) {\n waitUntilComplete = true;\n break; // break loop as bool overrides num array below\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n if (waitUntilComplete) {\n return pendingRequests.wait();\n } else if (timeouts.length > 0) {\n return pendingRequests.wait(Math.max.apply(Math, timeouts));\n }\n return undefined;\n};","// We don't have access to the autocomplete source when we call `onKeyDown`\n// or `onClick` because those are native browser events.\n// However, we can get the source from the suggestion index.\nfunction getCollectionFromActiveItemId(state) {\n // Given 3 sources with respectively 1, 2 and 3 suggestions: [1, 2, 3]\n // We want to get the accumulated counts:\n // [1, 1 + 2, 1 + 2 + 3] = [1, 3, 3 + 3] = [1, 3, 6]\n var accumulatedCollectionsCount = state.collections.map(function (collections) {\n return collections.items.length;\n }).reduce(function (acc, collectionsCount, index) {\n var previousValue = acc[index - 1] || 0;\n var nextValue = previousValue + collectionsCount;\n acc.push(nextValue);\n return acc;\n }, []);\n\n // Based on the accumulated counts, we can infer the index of the suggestion.\n var collectionIndex = accumulatedCollectionsCount.reduce(function (acc, current) {\n if (current <= state.activeItemId) {\n return acc + 1;\n }\n return acc;\n }, 0);\n return state.collections[collectionIndex];\n}\n\n/**\n * Gets the highlighted index relative to a suggestion object (not the absolute\n * highlighted index).\n *\n * Example:\n * [['a', 'b'], ['c', 'd', 'e'], ['f']]\n * ↑\n * (absolute: 3, relative: 1)\n */\nfunction getRelativeActiveItemId(_ref) {\n var state = _ref.state,\n collection = _ref.collection;\n var isOffsetFound = false;\n var counter = 0;\n var previousItemsOffset = 0;\n while (isOffsetFound === false) {\n var currentCollection = state.collections[counter];\n if (currentCollection === collection) {\n isOffsetFound = true;\n break;\n }\n previousItemsOffset += currentCollection.items.length;\n counter++;\n }\n return state.activeItemId - previousItemsOffset;\n}\nexport function getActiveItem(state) {\n var collection = getCollectionFromActiveItemId(state);\n if (!collection) {\n return null;\n }\n var item = collection.items[getRelativeActiveItemId({\n state: state,\n collection: collection\n })];\n var source = collection.source;\n var itemInputValue = source.getItemInputValue({\n item: item,\n state: state\n });\n var itemUrl = source.getItemUrl({\n item: item,\n state: state\n });\n return {\n item: item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n source: source\n };\n}","/**\n * Returns a full element id for an autocomplete element.\n *\n * @param autocompleteInstanceId The id of the autocomplete instance\n * @param elementId The specific element id\n * @param source The source of the element, when it needs to be scoped\n */\nexport function getAutocompleteElementId(autocompleteInstanceId, elementId, source) {\n return [autocompleteInstanceId, source === null || source === void 0 ? void 0 : source.sourceId, elementId].filter(Boolean).join('-').replace(/\\s/g, '');\n}","var regex = /((gt|sm)-|galaxy nexus)|samsung[- ]|samsungbrowser/i;\nexport function isSamsung(userAgent) {\n return Boolean(userAgent && userAgent.match(regex));\n}","export function getNativeEvent(event) {\n return event.nativeEvent || event;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { createCancelablePromiseList } from './utils';\nexport function createStore(reducer, props, onStoreStateChange) {\n var state = props.initialState;\n return {\n getState: function getState() {\n return state;\n },\n dispatch: function dispatch(action, payload) {\n var prevState = _objectSpread({}, state);\n state = reducer(state, {\n type: action,\n props: props,\n payload: payload\n });\n onStoreStateChange({\n state: state,\n prevState: prevState\n });\n },\n pendingRequests: createCancelablePromiseList()\n };\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { flatten } from '@algolia/autocomplete-shared';\nexport function getAutocompleteSetters(_ref) {\n var store = _ref.store;\n var setActiveItemId = function setActiveItemId(value) {\n store.dispatch('setActiveItemId', value);\n };\n var setQuery = function setQuery(value) {\n store.dispatch('setQuery', value);\n };\n var setCollections = function setCollections(rawValue) {\n var baseItemId = 0;\n var value = rawValue.map(function (collection) {\n return _objectSpread(_objectSpread({}, collection), {}, {\n // We flatten the stored items to support calling `getAlgoliaResults`\n // from the source itself.\n items: flatten(collection.items).map(function (item) {\n return _objectSpread(_objectSpread({}, item), {}, {\n __autocomplete_id: baseItemId++\n });\n })\n });\n });\n store.dispatch('setCollections', value);\n };\n var setIsOpen = function setIsOpen(value) {\n store.dispatch('setIsOpen', value);\n };\n var setStatus = function setStatus(value) {\n store.dispatch('setStatus', value);\n };\n var setContext = function setContext(value) {\n store.dispatch('setContext', value);\n };\n return {\n setActiveItemId: setActiveItemId,\n setQuery: setQuery,\n setCollections: setCollections,\n setIsOpen: setIsOpen,\n setStatus: setStatus,\n setContext: setContext\n };\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { getItemsCount, generateAutocompleteId, flatten } from '@algolia/autocomplete-shared';\nimport { getNormalizedSources } from './utils';\nexport function getDefaultProps(props, pluginSubscribers) {\n var _props$id;\n /* eslint-disable no-restricted-globals */\n var environment = typeof window !== 'undefined' ? window : {};\n /* eslint-enable no-restricted-globals */\n var plugins = props.plugins || [];\n return _objectSpread(_objectSpread({\n debug: false,\n openOnFocus: false,\n enterKeyHint: undefined,\n ignoreCompositionEvents: false,\n placeholder: '',\n autoFocus: false,\n defaultActiveItemId: null,\n stallThreshold: 300,\n insights: undefined,\n environment: environment,\n shouldPanelOpen: function shouldPanelOpen(_ref) {\n var state = _ref.state;\n return getItemsCount(state) > 0;\n },\n reshape: function reshape(_ref2) {\n var sources = _ref2.sources;\n return sources;\n }\n }, props), {}, {\n // Since `generateAutocompleteId` triggers a side effect (it increments\n // an internal counter), we don't want to execute it if unnecessary.\n id: (_props$id = props.id) !== null && _props$id !== void 0 ? _props$id : generateAutocompleteId(),\n plugins: plugins,\n // The following props need to be deeply defaulted.\n initialState: _objectSpread({\n activeItemId: null,\n query: '',\n completion: null,\n collections: [],\n isOpen: false,\n status: 'idle',\n context: {}\n }, props.initialState),\n onStateChange: function onStateChange(params) {\n var _props$onStateChange;\n (_props$onStateChange = props.onStateChange) === null || _props$onStateChange === void 0 ? void 0 : _props$onStateChange.call(props, params);\n plugins.forEach(function (x) {\n var _x$onStateChange;\n return (_x$onStateChange = x.onStateChange) === null || _x$onStateChange === void 0 ? void 0 : _x$onStateChange.call(x, params);\n });\n },\n onSubmit: function onSubmit(params) {\n var _props$onSubmit;\n (_props$onSubmit = props.onSubmit) === null || _props$onSubmit === void 0 ? void 0 : _props$onSubmit.call(props, params);\n plugins.forEach(function (x) {\n var _x$onSubmit;\n return (_x$onSubmit = x.onSubmit) === null || _x$onSubmit === void 0 ? void 0 : _x$onSubmit.call(x, params);\n });\n },\n onReset: function onReset(params) {\n var _props$onReset;\n (_props$onReset = props.onReset) === null || _props$onReset === void 0 ? void 0 : _props$onReset.call(props, params);\n plugins.forEach(function (x) {\n var _x$onReset;\n return (_x$onReset = x.onReset) === null || _x$onReset === void 0 ? void 0 : _x$onReset.call(x, params);\n });\n },\n getSources: function getSources(params) {\n return Promise.all([].concat(_toConsumableArray(plugins.map(function (plugin) {\n return plugin.getSources;\n })), [props.getSources]).filter(Boolean).map(function (getSources) {\n return getNormalizedSources(getSources, params);\n })).then(function (nested) {\n return flatten(nested);\n }).then(function (sources) {\n return sources.map(function (source) {\n return _objectSpread(_objectSpread({}, source), {}, {\n onSelect: function onSelect(params) {\n source.onSelect(params);\n pluginSubscribers.forEach(function (x) {\n var _x$onSelect;\n return (_x$onSelect = x.onSelect) === null || _x$onSelect === void 0 ? void 0 : _x$onSelect.call(x, params);\n });\n },\n onActive: function onActive(params) {\n source.onActive(params);\n pluginSubscribers.forEach(function (x) {\n var _x$onActive;\n return (_x$onActive = x.onActive) === null || _x$onActive === void 0 ? void 0 : _x$onActive.call(x, params);\n });\n },\n onResolve: function onResolve(params) {\n source.onResolve(params);\n pluginSubscribers.forEach(function (x) {\n var _x$onResolve;\n return (_x$onResolve = x.onResolve) === null || _x$onResolve === void 0 ? void 0 : _x$onResolve.call(x, params);\n });\n }\n });\n });\n });\n },\n navigator: _objectSpread({\n navigate: function navigate(_ref3) {\n var itemUrl = _ref3.itemUrl;\n environment.location.assign(itemUrl);\n },\n navigateNewTab: function navigateNewTab(_ref4) {\n var itemUrl = _ref4.itemUrl;\n var windowReference = environment.open(itemUrl, '_blank', 'noopener');\n windowReference === null || windowReference === void 0 ? void 0 : windowReference.focus();\n },\n navigateNewWindow: function navigateNewWindow(_ref5) {\n var itemUrl = _ref5.itemUrl;\n environment.open(itemUrl, '_blank', 'noopener');\n }\n }, props.navigator)\n });\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { flatten } from '@algolia/autocomplete-shared';\nexport function reshape(_ref) {\n var collections = _ref.collections,\n props = _ref.props,\n state = _ref.state;\n // Sources are grouped by `sourceId` to conveniently pick them via destructuring.\n // Example: `const { recentSearchesPlugin } = sourcesBySourceId`\n var originalSourcesBySourceId = collections.reduce(function (acc, collection) {\n return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, collection.source.sourceId, _objectSpread(_objectSpread({}, collection.source), {}, {\n getItems: function getItems() {\n // We provide the resolved items from the collection to the `reshape` prop.\n return flatten(collection.items);\n }\n })));\n }, {});\n var _props$plugins$reduce = props.plugins.reduce(function (acc, plugin) {\n if (plugin.reshape) {\n return plugin.reshape(acc);\n }\n return acc;\n }, {\n sourcesBySourceId: originalSourcesBySourceId,\n state: state\n }),\n sourcesBySourceId = _props$plugins$reduce.sourcesBySourceId;\n var reshapeSources = props.reshape({\n sourcesBySourceId: sourcesBySourceId,\n sources: Object.values(sourcesBySourceId),\n state: state\n });\n\n // We reconstruct the collections with the items modified by the `reshape` prop.\n return flatten(reshapeSources).filter(Boolean).map(function (source) {\n return {\n source: source,\n items: source.getItems()\n };\n });\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nimport { decycle, flatten, invariant } from '@algolia/autocomplete-shared';\nimport { mapToAlgoliaResponse } from './utils';\nfunction isDescription(item) {\n return Boolean(item.execute);\n}\nfunction isRequesterDescription(description) {\n return Boolean(description === null || description === void 0 ? void 0 : description.execute);\n}\nexport function preResolve(itemsOrDescription, sourceId, state) {\n if (isRequesterDescription(itemsOrDescription)) {\n var contextParameters = itemsOrDescription.requesterId === 'algolia' ? Object.assign.apply(Object, [{}].concat(_toConsumableArray(Object.keys(state.context).map(function (key) {\n var _state$context$key;\n return (_state$context$key = state.context[key]) === null || _state$context$key === void 0 ? void 0 : _state$context$key.__algoliaSearchParameters;\n })))) : {};\n return _objectSpread(_objectSpread({}, itemsOrDescription), {}, {\n requests: itemsOrDescription.queries.map(function (query) {\n return {\n query: itemsOrDescription.requesterId === 'algolia' ? _objectSpread(_objectSpread({}, query), {}, {\n params: _objectSpread(_objectSpread({}, contextParameters), query.params)\n }) : query,\n sourceId: sourceId,\n transformResponse: itemsOrDescription.transformResponse\n };\n })\n });\n }\n return {\n items: itemsOrDescription,\n sourceId: sourceId\n };\n}\nexport function resolve(items) {\n var packed = items.reduce(function (acc, current) {\n if (!isDescription(current)) {\n acc.push(current);\n return acc;\n }\n var searchClient = current.searchClient,\n execute = current.execute,\n requesterId = current.requesterId,\n requests = current.requests;\n var container = acc.find(function (item) {\n return isDescription(current) && isDescription(item) && item.searchClient === searchClient && Boolean(requesterId) && item.requesterId === requesterId;\n });\n if (container) {\n var _container$items;\n (_container$items = container.items).push.apply(_container$items, _toConsumableArray(requests));\n } else {\n var request = {\n execute: execute,\n requesterId: requesterId,\n items: requests,\n searchClient: searchClient\n };\n acc.push(request);\n }\n return acc;\n }, []);\n var values = packed.map(function (maybeDescription) {\n if (!isDescription(maybeDescription)) {\n return Promise.resolve(maybeDescription);\n }\n var _ref = maybeDescription,\n execute = _ref.execute,\n items = _ref.items,\n searchClient = _ref.searchClient;\n return execute({\n searchClient: searchClient,\n requests: items\n });\n });\n return Promise.all(values).then(function (responses) {\n return flatten(responses);\n });\n}\nexport function postResolve(responses, sources, store) {\n return sources.map(function (source) {\n var matches = responses.filter(function (response) {\n return response.sourceId === source.sourceId;\n });\n var results = matches.map(function (_ref2) {\n var items = _ref2.items;\n return items;\n });\n var transform = matches[0].transformResponse;\n var items = transform ? transform(mapToAlgoliaResponse(results)) : results;\n source.onResolve({\n source: source,\n results: results,\n items: items,\n state: store.getState()\n });\n invariant(Array.isArray(items), function () {\n return \"The `getItems` function from source \\\"\".concat(source.sourceId, \"\\\" must return an array of items but returned type \").concat(JSON.stringify(_typeof(items)), \":\\n\\n\").concat(JSON.stringify(decycle(items), null, 2), \".\\n\\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems\");\n });\n invariant(items.every(Boolean), \"The `getItems` function from source \\\"\".concat(source.sourceId, \"\\\" must return an array of items but returned \").concat(JSON.stringify(undefined), \".\\n\\nDid you forget to return items?\\n\\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems\"));\n return {\n source: source,\n items: items\n };\n });\n}","export function mapToAlgoliaResponse(rawResults) {\n return {\n results: rawResults,\n hits: rawResults.map(function (result) {\n return result.hits;\n }).filter(Boolean),\n facetHits: rawResults.map(function (result) {\n var _facetHits;\n return (_facetHits = result.facetHits) === null || _facetHits === void 0 ? void 0 : _facetHits.map(function (facetHit) {\n // Bring support for the highlighting components.\n return {\n label: facetHit.value,\n count: facetHit.count,\n _highlightResult: {\n label: {\n value: facetHit.highlighted\n }\n }\n };\n });\n }).filter(Boolean)\n };\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"event\", \"nextState\", \"props\", \"query\", \"refresh\", \"store\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport { reshape } from './reshape';\nimport { preResolve, resolve, postResolve } from './resolve';\nimport { cancelable, createConcurrentSafePromise, getActiveItem } from './utils';\nvar lastStalledId = null;\nvar runConcurrentSafePromise = createConcurrentSafePromise();\nexport function onInput(_ref) {\n var event = _ref.event,\n _ref$nextState = _ref.nextState,\n nextState = _ref$nextState === void 0 ? {} : _ref$nextState,\n props = _ref.props,\n query = _ref.query,\n refresh = _ref.refresh,\n store = _ref.store,\n setters = _objectWithoutProperties(_ref, _excluded);\n if (lastStalledId) {\n props.environment.clearTimeout(lastStalledId);\n }\n var setCollections = setters.setCollections,\n setIsOpen = setters.setIsOpen,\n setQuery = setters.setQuery,\n setActiveItemId = setters.setActiveItemId,\n setStatus = setters.setStatus,\n setContext = setters.setContext;\n setQuery(query);\n setActiveItemId(props.defaultActiveItemId);\n if (!query && props.openOnFocus === false) {\n var _nextState$isOpen;\n var collections = store.getState().collections.map(function (collection) {\n return _objectSpread(_objectSpread({}, collection), {}, {\n items: []\n });\n });\n setStatus('idle');\n setCollections(collections);\n setIsOpen((_nextState$isOpen = nextState.isOpen) !== null && _nextState$isOpen !== void 0 ? _nextState$isOpen : props.shouldPanelOpen({\n state: store.getState()\n }));\n\n // We make sure to update the latest resolved value of the tracked\n // promises to keep late resolving promises from \"cancelling\" the state\n // updates performed in this code path.\n // We chain with a void promise to respect `onInput`'s expected return type.\n var _request = cancelable(runConcurrentSafePromise(collections).then(function () {\n return Promise.resolve();\n }));\n return store.pendingRequests.add(_request);\n }\n setStatus('loading');\n lastStalledId = props.environment.setTimeout(function () {\n setStatus('stalled');\n }, props.stallThreshold);\n\n // We track the entire promise chain triggered by `onInput` before mutating\n // the Autocomplete state to make sure that any state manipulation is based on\n // fresh data regardless of when promises individually resolve.\n // We don't track nested promises and only rely on the full chain resolution,\n // meaning we should only ever manipulate the state once this concurrent-safe\n // promise is resolved.\n var request = cancelable(runConcurrentSafePromise(props.getSources(_objectSpread({\n query: query,\n refresh: refresh,\n state: store.getState()\n }, setters)).then(function (sources) {\n return Promise.all(sources.map(function (source) {\n return Promise.resolve(source.getItems(_objectSpread({\n query: query,\n refresh: refresh,\n state: store.getState()\n }, setters))).then(function (itemsOrDescription) {\n return preResolve(itemsOrDescription, source.sourceId, store.getState());\n });\n })).then(resolve).then(function (responses) {\n var __automaticInsights = responses.some(function (_ref2) {\n var items = _ref2.items;\n return isSearchResponseWithAutomaticInsightsFlag(items);\n });\n\n // No need to pollute the context if `__automaticInsights=false`\n if (__automaticInsights) {\n var _store$getState$conte;\n setContext({\n algoliaInsightsPlugin: _objectSpread(_objectSpread({}, ((_store$getState$conte = store.getState().context) === null || _store$getState$conte === void 0 ? void 0 : _store$getState$conte.algoliaInsightsPlugin) || {}), {}, {\n __automaticInsights: __automaticInsights\n })\n });\n }\n return postResolve(responses, sources, store);\n }).then(function (collections) {\n return reshape({\n collections: collections,\n props: props,\n state: store.getState()\n });\n });\n }))).then(function (collections) {\n var _nextState$isOpen2;\n // Parameters passed to `onInput` could be stale when the following code\n // executes, because `onInput` calls may not resolve in order.\n // If it becomes a problem we'll need to save the last passed parameters.\n // See: https://codesandbox.io/s/agitated-cookies-y290z\n\n setStatus('idle');\n setCollections(collections);\n var isPanelOpen = props.shouldPanelOpen({\n state: store.getState()\n });\n setIsOpen((_nextState$isOpen2 = nextState.isOpen) !== null && _nextState$isOpen2 !== void 0 ? _nextState$isOpen2 : props.openOnFocus && !query && isPanelOpen || isPanelOpen);\n var highlightedItem = getActiveItem(store.getState());\n if (store.getState().activeItemId !== null && highlightedItem) {\n var item = highlightedItem.item,\n itemInputValue = highlightedItem.itemInputValue,\n itemUrl = highlightedItem.itemUrl,\n source = highlightedItem.source;\n source.onActive(_objectSpread({\n event: event,\n item: item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n refresh: refresh,\n source: source,\n state: store.getState()\n }, setters));\n }\n }).finally(function () {\n setStatus('idle');\n if (lastStalledId) {\n props.environment.clearTimeout(lastStalledId);\n }\n });\n return store.pendingRequests.add(request);\n}\nfunction isSearchResponseWithAutomaticInsightsFlag(items) {\n return !Array.isArray(items) && Boolean(items === null || items === void 0 ? void 0 : items._automaticInsights);\n}","/**\n * Creates a runner that executes promises in a concurrent-safe way.\n *\n * This is useful to prevent older promises to resolve after a newer promise,\n * otherwise resulting in stale resolved values.\n */\nexport function createConcurrentSafePromise() {\n var basePromiseId = -1;\n var latestResolvedId = -1;\n var latestResolvedValue = undefined;\n return function runConcurrentSafePromise(promise) {\n basePromiseId++;\n var currentPromiseId = basePromiseId;\n return Promise.resolve(promise).then(function (x) {\n // The promise might take too long to resolve and get outdated. This would\n // result in resolving stale values.\n // When this happens, we ignore the promise value and return the one\n // coming from the latest resolved value.\n //\n // +----------------------------------+\n // | 100ms |\n // | run(1) +---> R1 |\n // | 300ms |\n // | run(2) +-------------> R2 (SKIP) |\n // | 200ms |\n // | run(3) +--------> R3 |\n // +----------------------------------+\n if (latestResolvedValue && currentPromiseId < latestResolvedId) {\n return latestResolvedValue;\n }\n latestResolvedId = currentPromiseId;\n latestResolvedValue = x;\n return x;\n });\n };\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"event\", \"props\", \"refresh\", \"store\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport { onInput } from './onInput';\nimport { getPluginSubmitPromise, getActiveItem, getAutocompleteElementId } from './utils';\nexport function onKeyDown(_ref) {\n var event = _ref.event,\n props = _ref.props,\n refresh = _ref.refresh,\n store = _ref.store,\n setters = _objectWithoutProperties(_ref, _excluded);\n if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n // eslint-disable-next-line no-inner-declarations\n var triggerScrollIntoView = function triggerScrollIntoView() {\n var highlightedItem = getActiveItem(store.getState());\n var nodeItem = props.environment.document.getElementById(getAutocompleteElementId(props.id, \"item-\".concat(store.getState().activeItemId), highlightedItem === null || highlightedItem === void 0 ? void 0 : highlightedItem.source));\n if (nodeItem) {\n if (nodeItem.scrollIntoViewIfNeeded) {\n nodeItem.scrollIntoViewIfNeeded(false);\n } else {\n nodeItem.scrollIntoView(false);\n }\n }\n }; // eslint-disable-next-line no-inner-declarations\n var triggerOnActive = function triggerOnActive() {\n var highlightedItem = getActiveItem(store.getState());\n if (store.getState().activeItemId !== null && highlightedItem) {\n var item = highlightedItem.item,\n itemInputValue = highlightedItem.itemInputValue,\n itemUrl = highlightedItem.itemUrl,\n source = highlightedItem.source;\n source.onActive(_objectSpread({\n event: event,\n item: item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n refresh: refresh,\n source: source,\n state: store.getState()\n }, setters));\n }\n }; // Default browser behavior changes the caret placement on ArrowUp and\n // ArrowDown.\n event.preventDefault();\n\n // When re-opening the panel, we need to split the logic to keep the actions\n // synchronized as `onInput` returns a promise.\n if (store.getState().isOpen === false && (props.openOnFocus || Boolean(store.getState().query))) {\n onInput(_objectSpread({\n event: event,\n props: props,\n query: store.getState().query,\n refresh: refresh,\n store: store\n }, setters)).then(function () {\n store.dispatch(event.key, {\n nextActiveItemId: props.defaultActiveItemId\n });\n triggerOnActive();\n // Since we rely on the DOM, we need to wait for all the micro tasks to\n // finish (which include re-opening the panel) to make sure all the\n // elements are available.\n setTimeout(triggerScrollIntoView, 0);\n });\n } else {\n store.dispatch(event.key, {});\n triggerOnActive();\n triggerScrollIntoView();\n }\n } else if (event.key === 'Escape') {\n // This prevents the default browser behavior on `input[type=\"search\"]`\n // from removing the query right away because we first want to close the\n // panel.\n event.preventDefault();\n store.dispatch(event.key, null);\n\n // Hitting the `Escape` key signals the end of a user interaction with the\n // autocomplete. At this point, we should ignore any requests that are still\n // pending and could reopen the panel once they resolve, because that would\n // result in an unsolicited UI behavior.\n store.pendingRequests.cancelAll();\n } else if (event.key === 'Tab') {\n store.dispatch('blur', null);\n\n // Hitting the `Tab` key signals the end of a user interaction with the\n // autocomplete. At this point, we should ignore any requests that are still\n // pending and could reopen the panel once they resolve, because that would\n // result in an unsolicited UI behavior.\n store.pendingRequests.cancelAll();\n } else if (event.key === 'Enter') {\n // No active item, so we let the browser handle the native `onSubmit` form\n // event.\n if (store.getState().activeItemId === null || store.getState().collections.every(function (collection) {\n return collection.items.length === 0;\n })) {\n var waitForSubmit = getPluginSubmitPromise(props.plugins, store.pendingRequests);\n if (waitForSubmit !== undefined) {\n waitForSubmit.then(store.pendingRequests.cancelAll); // Cancel the rest if timeout number is provided\n } else if (!props.debug) {\n // If requests are still pending when the panel closes, they could reopen\n // the panel once they resolve.\n // We want to prevent any subsequent query from reopening the panel\n // because it would result in an unsolicited UI behavior.\n store.pendingRequests.cancelAll();\n }\n return;\n }\n\n // This prevents the `onSubmit` event to be sent because an item is\n // highlighted.\n event.preventDefault();\n var _ref2 = getActiveItem(store.getState()),\n item = _ref2.item,\n itemInputValue = _ref2.itemInputValue,\n itemUrl = _ref2.itemUrl,\n source = _ref2.source;\n if (event.metaKey || event.ctrlKey) {\n if (itemUrl !== undefined) {\n source.onSelect(_objectSpread({\n event: event,\n item: item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n refresh: refresh,\n source: source,\n state: store.getState()\n }, setters));\n props.navigator.navigateNewTab({\n itemUrl: itemUrl,\n item: item,\n state: store.getState()\n });\n }\n } else if (event.shiftKey) {\n if (itemUrl !== undefined) {\n source.onSelect(_objectSpread({\n event: event,\n item: item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n refresh: refresh,\n source: source,\n state: store.getState()\n }, setters));\n props.navigator.navigateNewWindow({\n itemUrl: itemUrl,\n item: item,\n state: store.getState()\n });\n }\n } else if (event.altKey) {\n // Keep native browser behavior\n } else {\n if (itemUrl !== undefined) {\n source.onSelect(_objectSpread({\n event: event,\n item: item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n refresh: refresh,\n source: source,\n state: store.getState()\n }, setters));\n props.navigator.navigate({\n itemUrl: itemUrl,\n item: item,\n state: store.getState()\n });\n return;\n }\n onInput(_objectSpread({\n event: event,\n nextState: {\n isOpen: false\n },\n props: props,\n query: itemInputValue,\n refresh: refresh,\n store: store\n }, setters)).then(function () {\n source.onSelect(_objectSpread({\n event: event,\n item: item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n refresh: refresh,\n source: source,\n state: store.getState()\n }, setters));\n });\n }\n }\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"props\", \"refresh\", \"store\"],\n _excluded2 = [\"inputElement\", \"formElement\", \"panelElement\"],\n _excluded3 = [\"inputElement\"],\n _excluded4 = [\"inputElement\", \"maxLength\"],\n _excluded5 = [\"source\"],\n _excluded6 = [\"item\", \"source\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport { noop } from '@algolia/autocomplete-shared';\nimport { onInput } from './onInput';\nimport { onKeyDown as _onKeyDown } from './onKeyDown';\nimport { getPluginSubmitPromise, getActiveItem, getAutocompleteElementId, isOrContainsNode, isSamsung, getNativeEvent } from './utils';\nexport function getPropGetters(_ref) {\n var props = _ref.props,\n refresh = _ref.refresh,\n store = _ref.store,\n setters = _objectWithoutProperties(_ref, _excluded);\n var getEnvironmentProps = function getEnvironmentProps(providedProps) {\n var inputElement = providedProps.inputElement,\n formElement = providedProps.formElement,\n panelElement = providedProps.panelElement,\n rest = _objectWithoutProperties(providedProps, _excluded2);\n function onMouseDownOrTouchStart(event) {\n // The `onTouchStart`/`onMouseDown` events shouldn't trigger the `blur`\n // handler when it's not an interaction with Autocomplete.\n // We detect it with the following heuristics:\n // - the panel is closed AND there are no pending requests\n // (no interaction with the autocomplete, no future state updates)\n // - OR the touched target is the input element (should open the panel)\n var isAutocompleteInteraction = store.getState().isOpen || !store.pendingRequests.isEmpty();\n if (!isAutocompleteInteraction || event.target === inputElement) {\n return;\n }\n\n // @TODO: support cases where there are multiple Autocomplete instances.\n // Right now, a second instance makes this computation return false.\n var isTargetWithinAutocomplete = [formElement, panelElement].some(function (contextNode) {\n return isOrContainsNode(contextNode, event.target);\n });\n if (isTargetWithinAutocomplete === false) {\n store.dispatch('blur', null);\n\n // If requests are still pending when the user closes the panel, they\n // could reopen the panel once they resolve.\n // We want to prevent any subsequent query from reopening the panel\n // because it would result in an unsolicited UI behavior.\n if (!props.debug) {\n store.pendingRequests.cancelAll();\n }\n }\n }\n return _objectSpread({\n // We do not rely on the native `blur` event of the input to close the\n // panel, but rather on a custom `touchstart`/`mousedown` event outside\n // of the autocomplete elements.\n // This ensures we don't mistakenly interpret interactions within the\n // autocomplete (but outside of the input) as a signal to close the panel.\n // For example, clicking reset button causes an input blur, but if\n // `openOnFocus=true`, it shouldn't close the panel.\n // On touch devices, scrolling results (`touchmove`) causes an input blur\n // but shouldn't close the panel.\n onTouchStart: onMouseDownOrTouchStart,\n onMouseDown: onMouseDownOrTouchStart,\n // When scrolling on touch devices (mobiles, tablets, etc.), we want to\n // mimic the native platform behavior where the input is blurred to\n // hide the virtual keyboard. This gives more vertical space to\n // discover all the suggestions showing up in the panel.\n onTouchMove: function onTouchMove(event) {\n if (store.getState().isOpen === false || inputElement !== props.environment.document.activeElement || event.target === inputElement) {\n return;\n }\n inputElement.blur();\n }\n }, rest);\n };\n var getRootProps = function getRootProps(rest) {\n return _objectSpread({\n role: 'combobox',\n 'aria-expanded': store.getState().isOpen,\n 'aria-haspopup': 'listbox',\n 'aria-controls': store.getState().isOpen ? store.getState().collections.map(function (_ref2) {\n var source = _ref2.source;\n return getAutocompleteElementId(props.id, 'list', source);\n }).join(' ') : undefined,\n 'aria-labelledby': getAutocompleteElementId(props.id, 'label')\n }, rest);\n };\n var getFormProps = function getFormProps(providedProps) {\n var inputElement = providedProps.inputElement,\n rest = _objectWithoutProperties(providedProps, _excluded3);\n var handleSubmit = function handleSubmit(event) {\n var _providedProps$inputE;\n props.onSubmit(_objectSpread({\n event: event,\n refresh: refresh,\n state: store.getState()\n }, setters));\n store.dispatch('submit', null);\n (_providedProps$inputE = providedProps.inputElement) === null || _providedProps$inputE === void 0 ? void 0 : _providedProps$inputE.blur();\n };\n return _objectSpread({\n action: '',\n noValidate: true,\n role: 'search',\n onSubmit: function onSubmit(event) {\n event.preventDefault();\n var waitForSubmit = getPluginSubmitPromise(props.plugins, store.pendingRequests);\n if (waitForSubmit !== undefined) {\n waitForSubmit.then(function () {\n return handleSubmit(event);\n });\n } else {\n handleSubmit(event);\n }\n },\n onReset: function onReset(event) {\n var _providedProps$inputE2;\n event.preventDefault();\n props.onReset(_objectSpread({\n event: event,\n refresh: refresh,\n state: store.getState()\n }, setters));\n store.dispatch('reset', null);\n (_providedProps$inputE2 = providedProps.inputElement) === null || _providedProps$inputE2 === void 0 ? void 0 : _providedProps$inputE2.focus();\n }\n }, rest);\n };\n var getInputProps = function getInputProps(providedProps) {\n var _props$environment$na;\n function onFocus(event) {\n // We want to trigger a query when `openOnFocus` is true\n // because the panel should open with the current query.\n if (props.openOnFocus || Boolean(store.getState().query)) {\n onInput(_objectSpread({\n event: event,\n props: props,\n query: store.getState().completion || store.getState().query,\n refresh: refresh,\n store: store\n }, setters));\n }\n store.dispatch('focus', null);\n }\n var _ref3 = providedProps || {},\n inputElement = _ref3.inputElement,\n _ref3$maxLength = _ref3.maxLength,\n maxLength = _ref3$maxLength === void 0 ? 512 : _ref3$maxLength,\n rest = _objectWithoutProperties(_ref3, _excluded4);\n var activeItem = getActiveItem(store.getState());\n var userAgent = ((_props$environment$na = props.environment.navigator) === null || _props$environment$na === void 0 ? void 0 : _props$environment$na.userAgent) || '';\n var shouldFallbackKeyHint = isSamsung(userAgent);\n var enterKeyHint = props.enterKeyHint || (activeItem !== null && activeItem !== void 0 && activeItem.itemUrl && !shouldFallbackKeyHint ? 'go' : 'search');\n return _objectSpread({\n 'aria-autocomplete': 'both',\n 'aria-activedescendant': store.getState().isOpen && store.getState().activeItemId !== null ? getAutocompleteElementId(props.id, \"item-\".concat(store.getState().activeItemId), activeItem === null || activeItem === void 0 ? void 0 : activeItem.source) : undefined,\n 'aria-controls': store.getState().isOpen ? store.getState().collections.filter(function (collection) {\n return collection.items.length > 0;\n }).map(function (_ref4) {\n var source = _ref4.source;\n return getAutocompleteElementId(props.id, 'list', source);\n }).join(' ') : undefined,\n 'aria-labelledby': getAutocompleteElementId(props.id, 'label'),\n value: store.getState().completion || store.getState().query,\n id: getAutocompleteElementId(props.id, 'input'),\n autoComplete: 'off',\n autoCorrect: 'off',\n autoCapitalize: 'off',\n enterKeyHint: enterKeyHint,\n spellCheck: 'false',\n autoFocus: props.autoFocus,\n placeholder: props.placeholder,\n maxLength: maxLength,\n type: 'search',\n onChange: function onChange(event) {\n var value = event.currentTarget.value;\n if (props.ignoreCompositionEvents && getNativeEvent(event).isComposing) {\n setters.setQuery(value);\n return;\n }\n onInput(_objectSpread({\n event: event,\n props: props,\n query: value.slice(0, maxLength),\n refresh: refresh,\n store: store\n }, setters));\n },\n onCompositionEnd: function onCompositionEnd(event) {\n onInput(_objectSpread({\n event: event,\n props: props,\n query: event.currentTarget.value.slice(0, maxLength),\n refresh: refresh,\n store: store\n }, setters));\n },\n onKeyDown: function onKeyDown(event) {\n if (getNativeEvent(event).isComposing) {\n return;\n }\n _onKeyDown(_objectSpread({\n event: event,\n props: props,\n refresh: refresh,\n store: store\n }, setters));\n },\n onFocus: onFocus,\n // We don't rely on the `blur` event.\n // See explanation in `onTouchStart`/`onMouseDown`.\n // @MAJOR See if we need to keep this handler.\n onBlur: noop,\n onClick: function onClick(event) {\n // When the panel is closed and you click on the input while\n // the input is focused, the `onFocus` event is not triggered\n // (default browser behavior).\n // In an autocomplete context, it makes sense to open the panel in this\n // case.\n // We mimic this event by catching the `onClick` event which\n // triggers the `onFocus` for the panel to open.\n if (providedProps.inputElement === props.environment.document.activeElement && !store.getState().isOpen) {\n onFocus(event);\n }\n }\n }, rest);\n };\n var getLabelProps = function getLabelProps(rest) {\n return _objectSpread({\n htmlFor: getAutocompleteElementId(props.id, 'input'),\n id: getAutocompleteElementId(props.id, 'label')\n }, rest);\n };\n var getListProps = function getListProps(providedProps) {\n var _ref5 = providedProps || {},\n source = _ref5.source,\n rest = _objectWithoutProperties(_ref5, _excluded5);\n return _objectSpread({\n role: 'listbox',\n 'aria-labelledby': getAutocompleteElementId(props.id, 'label'),\n id: getAutocompleteElementId(props.id, 'list', source)\n }, rest);\n };\n var getPanelProps = function getPanelProps(rest) {\n return _objectSpread({\n onMouseDown: function onMouseDown(event) {\n // Prevents the `activeElement` from being changed to the panel so\n // that the blur event is not triggered, otherwise it closes the\n // panel.\n event.preventDefault();\n },\n onMouseLeave: function onMouseLeave() {\n store.dispatch('mouseleave', null);\n }\n }, rest);\n };\n var getItemProps = function getItemProps(providedProps) {\n var item = providedProps.item,\n source = providedProps.source,\n rest = _objectWithoutProperties(providedProps, _excluded6);\n return _objectSpread({\n id: getAutocompleteElementId(props.id, \"item-\".concat(item.__autocomplete_id), source),\n role: 'option',\n 'aria-selected': store.getState().activeItemId === item.__autocomplete_id,\n onMouseMove: function onMouseMove(event) {\n if (item.__autocomplete_id === store.getState().activeItemId) {\n return;\n }\n store.dispatch('mousemove', item.__autocomplete_id);\n var activeItem = getActiveItem(store.getState());\n if (store.getState().activeItemId !== null && activeItem) {\n var _item = activeItem.item,\n itemInputValue = activeItem.itemInputValue,\n itemUrl = activeItem.itemUrl,\n _source = activeItem.source;\n _source.onActive(_objectSpread({\n event: event,\n item: _item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n refresh: refresh,\n source: _source,\n state: store.getState()\n }, setters));\n }\n },\n onMouseDown: function onMouseDown(event) {\n // Prevents the `activeElement` from being changed to the item so it\n // can remain with the current `activeElement`.\n event.preventDefault();\n },\n onClick: function onClick(event) {\n var itemInputValue = source.getItemInputValue({\n item: item,\n state: store.getState()\n });\n var itemUrl = source.getItemUrl({\n item: item,\n state: store.getState()\n });\n\n // If `getItemUrl` is provided, it means that the suggestion\n // is a link, not plain text that aims at updating the query.\n // We can therefore skip the state change because it will update\n // the `activeItemId`, resulting in a UI flash, especially\n // noticeable on mobile.\n var runPreCommand = itemUrl ? Promise.resolve() : onInput(_objectSpread({\n event: event,\n nextState: {\n isOpen: false\n },\n props: props,\n query: itemInputValue,\n refresh: refresh,\n store: store\n }, setters));\n runPreCommand.then(function () {\n source.onSelect(_objectSpread({\n event: event,\n item: item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n refresh: refresh,\n source: source,\n state: store.getState()\n }, setters));\n });\n }\n }, rest);\n };\n return {\n getEnvironmentProps: getEnvironmentProps,\n getRootProps: getRootProps,\n getFormProps: getFormProps,\n getLabelProps: getLabelProps,\n getInputProps: getInputProps,\n getPanelProps: getPanelProps,\n getListProps: getListProps,\n getItemProps: getItemProps\n };\n}","export function isOrContainsNode(parent, child) {\n return parent === child || parent.contains(child);\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { userAgents } from '@algolia/autocomplete-shared';\nexport function getMetadata(_ref) {\n var _, _options$__autocomple, _options$__autocomple2, _options$__autocomple3;\n var plugins = _ref.plugins,\n options = _ref.options;\n var optionsKey = (_ = (((_options$__autocomple = options.__autocomplete_metadata) === null || _options$__autocomple === void 0 ? void 0 : _options$__autocomple.userAgents) || [])[0]) === null || _ === void 0 ? void 0 : _.segment;\n var extraOptions = optionsKey ? _defineProperty({}, optionsKey, Object.keys(((_options$__autocomple2 = options.__autocomplete_metadata) === null || _options$__autocomple2 === void 0 ? void 0 : _options$__autocomple2.options) || {})) : {};\n return {\n plugins: plugins.map(function (plugin) {\n return {\n name: plugin.name,\n options: Object.keys(plugin.__autocomplete_pluginOptions || [])\n };\n }),\n options: _objectSpread({\n 'autocomplete-core': Object.keys(options)\n }, extraOptions),\n ua: userAgents.concat(((_options$__autocomple3 = options.__autocomplete_metadata) === null || _options$__autocomple3 === void 0 ? void 0 : _options$__autocomple3.userAgents) || [])\n };\n}\nexport function injectMetadata(_ref3) {\n var _environment$navigato, _environment$navigato2;\n var metadata = _ref3.metadata,\n environment = _ref3.environment;\n var isMetadataEnabled = (_environment$navigato = environment.navigator) === null || _environment$navigato === void 0 ? void 0 : (_environment$navigato2 = _environment$navigato.userAgent) === null || _environment$navigato2 === void 0 ? void 0 : _environment$navigato2.includes('Algolia Crawler');\n if (isMetadataEnabled) {\n var metadataContainer = environment.document.createElement('meta');\n var headRef = environment.document.querySelector('head');\n metadataContainer.name = 'algolia:metadata';\n setTimeout(function () {\n metadataContainer.content = JSON.stringify(metadata);\n headRef.appendChild(metadataContainer);\n }, 0);\n }\n}","import { getActiveItem } from './utils';\nexport function getCompletion(_ref) {\n var _getActiveItem;\n var state = _ref.state;\n if (state.isOpen === false || state.activeItemId === null) {\n return null;\n }\n return ((_getActiveItem = getActiveItem(state)) === null || _getActiveItem === void 0 ? void 0 : _getActiveItem.itemInputValue) || null;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { getItemsCount, invariant } from '@algolia/autocomplete-shared';\nimport { getCompletion } from './getCompletion';\nimport { getNextActiveItemId } from './utils';\nexport var stateReducer = function stateReducer(state, action) {\n switch (action.type) {\n case 'setActiveItemId':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: action.payload\n });\n }\n case 'setQuery':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n query: action.payload,\n completion: null\n });\n }\n case 'setCollections':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n collections: action.payload\n });\n }\n case 'setIsOpen':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n isOpen: action.payload\n });\n }\n case 'setStatus':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n status: action.payload\n });\n }\n case 'setContext':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n context: _objectSpread(_objectSpread({}, state.context), action.payload)\n });\n }\n case 'ArrowDown':\n {\n var nextState = _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: action.payload.hasOwnProperty('nextActiveItemId') ? action.payload.nextActiveItemId : getNextActiveItemId(1, state.activeItemId, getItemsCount(state), action.props.defaultActiveItemId)\n });\n return _objectSpread(_objectSpread({}, nextState), {}, {\n completion: getCompletion({\n state: nextState\n })\n });\n }\n case 'ArrowUp':\n {\n var _nextState = _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: getNextActiveItemId(-1, state.activeItemId, getItemsCount(state), action.props.defaultActiveItemId)\n });\n return _objectSpread(_objectSpread({}, _nextState), {}, {\n completion: getCompletion({\n state: _nextState\n })\n });\n }\n case 'Escape':\n {\n if (state.isOpen) {\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: null,\n isOpen: false,\n completion: null\n });\n }\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: null,\n query: '',\n status: 'idle',\n collections: []\n });\n }\n case 'submit':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: null,\n isOpen: false,\n status: 'idle'\n });\n }\n case 'reset':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId:\n // Since we open the panel on reset when openOnFocus=true\n // we need to restore the highlighted index to the defaultActiveItemId. (DocSearch use-case)\n\n // Since we close the panel when openOnFocus=false\n // we lose track of the highlighted index. (Query-suggestions use-case)\n action.props.openOnFocus === true ? action.props.defaultActiveItemId : null,\n status: 'idle',\n completion: null,\n query: ''\n });\n }\n case 'focus':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: action.props.defaultActiveItemId,\n isOpen: (action.props.openOnFocus || Boolean(state.query)) && action.props.shouldPanelOpen({\n state: state\n })\n });\n }\n case 'blur':\n {\n if (action.props.debug) {\n return state;\n }\n return _objectSpread(_objectSpread({}, state), {}, {\n isOpen: false,\n activeItemId: null\n });\n }\n case 'mousemove':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: action.payload\n });\n }\n case 'mouseleave':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: action.props.defaultActiveItemId\n });\n }\n default:\n invariant(false, \"The reducer action \".concat(JSON.stringify(action.type), \" is not supported.\"));\n return state;\n }\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { createAlgoliaInsightsPlugin } from '@algolia/autocomplete-plugin-algolia-insights';\nimport { checkOptions } from './checkOptions';\nimport { createStore } from './createStore';\nimport { getAutocompleteSetters } from './getAutocompleteSetters';\nimport { getDefaultProps } from './getDefaultProps';\nimport { getPropGetters } from './getPropGetters';\nimport { getMetadata, injectMetadata } from './metadata';\nimport { onInput } from './onInput';\nimport { stateReducer } from './stateReducer';\nexport function createAutocomplete(options) {\n checkOptions(options);\n var subscribers = [];\n var props = getDefaultProps(options, subscribers);\n var store = createStore(stateReducer, props, onStoreStateChange);\n var setters = getAutocompleteSetters({\n store: store\n });\n var propGetters = getPropGetters(_objectSpread({\n props: props,\n refresh: refresh,\n store: store,\n navigator: props.navigator\n }, setters));\n function onStoreStateChange(_ref) {\n var _state$context, _state$context$algoli;\n var prevState = _ref.prevState,\n state = _ref.state;\n props.onStateChange(_objectSpread({\n prevState: prevState,\n state: state,\n refresh: refresh,\n navigator: props.navigator\n }, setters));\n if (!isAlgoliaInsightsPluginEnabled() && (_state$context = state.context) !== null && _state$context !== void 0 && (_state$context$algoli = _state$context.algoliaInsightsPlugin) !== null && _state$context$algoli !== void 0 && _state$context$algoli.__automaticInsights && props.insights !== false) {\n var plugin = createAlgoliaInsightsPlugin({\n __autocomplete_clickAnalytics: false\n });\n props.plugins.push(plugin);\n subscribePlugins([plugin]);\n }\n }\n function refresh() {\n return onInput(_objectSpread({\n event: new Event('input'),\n nextState: {\n isOpen: store.getState().isOpen\n },\n props: props,\n navigator: props.navigator,\n query: store.getState().query,\n refresh: refresh,\n store: store\n }, setters));\n }\n function subscribePlugins(plugins) {\n plugins.forEach(function (plugin) {\n var _plugin$subscribe;\n return (_plugin$subscribe = plugin.subscribe) === null || _plugin$subscribe === void 0 ? void 0 : _plugin$subscribe.call(plugin, _objectSpread(_objectSpread({}, setters), {}, {\n navigator: props.navigator,\n refresh: refresh,\n onSelect: function onSelect(fn) {\n subscribers.push({\n onSelect: fn\n });\n },\n onActive: function onActive(fn) {\n subscribers.push({\n onActive: fn\n });\n },\n onResolve: function onResolve(fn) {\n subscribers.push({\n onResolve: fn\n });\n }\n }));\n });\n }\n function isAlgoliaInsightsPluginEnabled() {\n return props.plugins.some(function (plugin) {\n return plugin.name === 'aa.algoliaInsightsPlugin';\n });\n }\n if (props.insights && !isAlgoliaInsightsPluginEnabled()) {\n var insightsParams = typeof props.insights === 'boolean' ? {} : props.insights;\n props.plugins.push(createAlgoliaInsightsPlugin(insightsParams));\n }\n subscribePlugins(props.plugins);\n injectMetadata({\n metadata: getMetadata({\n plugins: props.plugins,\n options: options\n }),\n environment: props.environment\n });\n return _objectSpread(_objectSpread({\n refresh: refresh,\n navigator: props.navigator\n }, propGetters), setters);\n}","export const MAX_QUERY_SIZE = 512;\nexport const ASK_AI_API_URL = 'https://askai.algolia.com/chat';\nexport const USE_ASK_AI_TOKEN = true;\n","import { ASK_AI_API_URL, USE_ASK_AI_TOKEN } from './constants';\n\n// ... existing imports ...\nconst TOKEN_KEY = 'askai_token';\n\ntype TokenPayload = { exp: number };\n\nconst decode = (token: string): TokenPayload => {\n const [b64] = token.split('.');\n return JSON.parse(atob(b64));\n};\n\nconst isExpired = (token?: string | null): boolean => {\n if (!token) return true;\n try {\n const { exp } = decode(token);\n // refresh 30 s before the backend rejects it\n return Date.now() / 1000 > exp - 30;\n } catch {\n return true;\n }\n};\n\nlet inflight: Promise<string> | null = null;\n\n// call /token once, cache the promise while it’s running\n// eslint-disable-next-line require-await\nexport const getValidToken = async ({ assistantId }: { assistantId: string }): Promise<string> => {\n const cached = sessionStorage.getItem(TOKEN_KEY);\n if (!isExpired(cached)) return cached!;\n\n if (!inflight) {\n inflight = fetch(`${ASK_AI_API_URL}/token`, {\n method: 'POST',\n headers: {\n 'x-algolia-assistant-id': assistantId,\n 'content-type': 'application/json',\n },\n })\n .then((r) => r.json())\n .then(({ token }) => {\n sessionStorage.setItem(TOKEN_KEY, token);\n return token;\n })\n .finally(() => (inflight = null));\n }\n\n return inflight;\n};\n\nexport const postFeedback = async ({\n assistantId,\n thumbs,\n messageId,\n appId,\n}: {\n assistantId: string;\n thumbs: 0 | 1;\n messageId: string;\n appId: string;\n}): Promise<Response> => {\n const headers = new Headers();\n headers.set('x-algolia-assistant-id', assistantId);\n headers.set('content-type', 'application/json');\n\n if (USE_ASK_AI_TOKEN) {\n const token = await getValidToken({ assistantId });\n headers.set('authorization', `TOKEN ${token}`);\n }\n\n return fetch(`${ASK_AI_API_URL}/feedback`, {\n method: 'POST',\n body: JSON.stringify({\n appId,\n messageId,\n thumbs,\n }),\n headers,\n });\n};\n","import React, { type JSX } from 'react';\n\ntype AlgoliaLogoTranslations = Partial<{\n poweredByText: string;\n}>;\n\ntype AlgoliaLogoProps = {\n translations?: AlgoliaLogoTranslations;\n};\n\nexport function AlgoliaLogo({ translations = {} }: AlgoliaLogoProps): JSX.Element {\n const { poweredByText = 'Powered by' } = translations;\n\n return (\n <a\n href={`https://www.algolia.com/ref/docsearch/?utm_source=${window.location.hostname}&utm_medium=referral&utm_content=powered_by&utm_campaign=docsearch`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <span className=\"DocSearch-Label\">{poweredByText}</span>\n <svg\n width=\"80\"\n height=\"24\"\n aria-label=\"Algolia\"\n role=\"img\"\n id=\"Layer_1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 2196.2 500\"\n >\n <defs>\n <style>{'.cls-1,.cls-2{fill:#003dff;}.cls-2{fill-rule:evenodd;}'}</style>\n </defs>\n <path\n className=\"cls-2\"\n d=\"M1070.38,275.3V5.91c0-3.63-3.24-6.39-6.82-5.83l-50.46,7.94c-2.87,.45-4.99,2.93-4.99,5.84l.17,273.22c0,12.92,0,92.7,95.97,95.49,3.33,.1,6.09-2.58,6.09-5.91v-40.78c0-2.96-2.19-5.51-5.12-5.84-34.85-4.01-34.85-47.57-34.85-54.72Z\"\n />\n <rect className=\"cls-1\" x=\"1845.88\" y=\"104.73\" width=\"62.58\" height=\"277.9\" rx=\"5.9\" ry=\"5.9\" />\n <path\n className=\"cls-2\"\n d=\"M1851.78,71.38h50.77c3.26,0,5.9-2.64,5.9-5.9V5.9c0-3.62-3.24-6.39-6.82-5.83l-50.77,7.95c-2.87,.45-4.99,2.92-4.99,5.83v51.62c0,3.26,2.64,5.9,5.9,5.9Z\"\n />\n <path\n className=\"cls-2\"\n d=\"M1764.03,275.3V5.91c0-3.63-3.24-6.39-6.82-5.83l-50.46,7.94c-2.87,.45-4.99,2.93-4.99,5.84l.17,273.22c0,12.92,0,92.7,95.97,95.49,3.33,.1,6.09-2.58,6.09-5.91v-40.78c0-2.96-2.19-5.51-5.12-5.84-34.85-4.01-34.85-47.57-34.85-54.72Z\"\n />\n <path\n className=\"cls-2\"\n d=\"M1631.95,142.72c-11.14-12.25-24.83-21.65-40.78-28.31-15.92-6.53-33.26-9.85-52.07-9.85-18.78,0-36.15,3.17-51.92,9.85-15.59,6.66-29.29,16.05-40.76,28.31-11.47,12.23-20.38,26.87-26.76,44.03-6.38,17.17-9.24,37.37-9.24,58.36,0,20.99,3.19,36.87,9.55,54.21,6.38,17.32,15.14,32.11,26.45,44.36,11.29,12.23,24.83,21.62,40.6,28.46,15.77,6.83,40.12,10.33,52.4,10.48,12.25,0,36.78-3.82,52.7-10.48,15.92-6.68,29.46-16.23,40.78-28.46,11.29-12.25,20.05-27.04,26.25-44.36,6.22-17.34,9.24-33.22,9.24-54.21,0-20.99-3.34-41.19-10.03-58.36-6.38-17.17-15.14-31.8-26.43-44.03Zm-44.43,163.75c-11.47,15.75-27.56,23.7-48.09,23.7-20.55,0-36.63-7.8-48.1-23.7-11.47-15.75-17.21-34.01-17.21-61.2,0-26.89,5.59-49.14,17.06-64.87,11.45-15.75,27.54-23.52,48.07-23.52,20.55,0,36.63,7.78,48.09,23.52,11.47,15.57,17.36,37.98,17.36,64.87,0,27.19-5.72,45.3-17.19,61.2Z\"\n />\n <path\n className=\"cls-2\"\n d=\"M894.42,104.73h-49.33c-48.36,0-90.91,25.48-115.75,64.1-14.52,22.58-22.99,49.63-22.99,78.73,0,44.89,20.13,84.92,51.59,111.1,2.93,2.6,6.05,4.98,9.31,7.14,12.86,8.49,28.11,13.47,44.52,13.47,1.23,0,2.46-.03,3.68-.09,.36-.02,.71-.05,1.07-.07,.87-.05,1.75-.11,2.62-.2,.34-.03,.68-.08,1.02-.12,.91-.1,1.82-.21,2.73-.34,.21-.03,.42-.07,.63-.1,32.89-5.07,61.56-30.82,70.9-62.81v57.83c0,3.26,2.64,5.9,5.9,5.9h50.42c3.26,0,5.9-2.64,5.9-5.9V110.63c0-3.26-2.64-5.9-5.9-5.9h-56.32Zm0,206.92c-12.2,10.16-27.97,13.98-44.84,15.12-.16,.01-.33,.03-.49,.04-1.12,.07-2.24,.1-3.36,.1-42.24,0-77.12-35.89-77.12-79.37,0-10.25,1.96-20.01,5.42-28.98,11.22-29.12,38.77-49.74,71.06-49.74h49.33v142.83Z\"\n />\n <path\n className=\"cls-2\"\n d=\"M2133.97,104.73h-49.33c-48.36,0-90.91,25.48-115.75,64.1-14.52,22.58-22.99,49.63-22.99,78.73,0,44.89,20.13,84.92,51.59,111.1,2.93,2.6,6.05,4.98,9.31,7.14,12.86,8.49,28.11,13.47,44.52,13.47,1.23,0,2.46-.03,3.68-.09,.36-.02,.71-.05,1.07-.07,.87-.05,1.75-.11,2.62-.2,.34-.03,.68-.08,1.02-.12,.91-.1,1.82-.21,2.73-.34,.21-.03,.42-.07,.63-.1,32.89-5.07,61.56-30.82,70.9-62.81v57.83c0,3.26,2.64,5.9,5.9,5.9h50.42c3.26,0,5.9-2.64,5.9-5.9V110.63c0-3.26-2.64-5.9-5.9-5.9h-56.32Zm0,206.92c-12.2,10.16-27.97,13.98-44.84,15.12-.16,.01-.33,.03-.49,.04-1.12,.07-2.24,.1-3.36,.1-42.24,0-77.12-35.89-77.12-79.37,0-10.25,1.96-20.01,5.42-28.98,11.22-29.12,38.77-49.74,71.06-49.74h49.33v142.83Z\"\n />\n <path\n className=\"cls-2\"\n d=\"M1314.05,104.73h-49.33c-48.36,0-90.91,25.48-115.75,64.1-11.79,18.34-19.6,39.64-22.11,62.59-.58,5.3-.88,10.68-.88,16.14s.31,11.15,.93,16.59c4.28,38.09,23.14,71.61,50.66,94.52,2.93,2.6,6.05,4.98,9.31,7.14,12.86,8.49,28.11,13.47,44.52,13.47h0c17.99,0,34.61-5.93,48.16-15.97,16.29-11.58,28.88-28.54,34.48-47.75v50.26h-.11v11.08c0,21.84-5.71,38.27-17.34,49.36-11.61,11.08-31.04,16.63-58.25,16.63-11.12,0-28.79-.59-46.6-2.41-2.83-.29-5.46,1.5-6.27,4.22l-12.78,43.11c-1.02,3.46,1.27,7.02,4.83,7.53,21.52,3.08,42.52,4.68,54.65,4.68,48.91,0,85.16-10.75,108.89-32.21,21.48-19.41,33.15-48.89,35.2-88.52V110.63c0-3.26-2.64-5.9-5.9-5.9h-56.32Zm0,64.1s.65,139.13,0,143.36c-12.08,9.77-27.11,13.59-43.49,14.7-.16,.01-.33,.03-.49,.04-1.12,.07-2.24,.1-3.36,.1-1.32,0-2.63-.03-3.94-.1-40.41-2.11-74.52-37.26-74.52-79.38,0-10.25,1.96-20.01,5.42-28.98,11.22-29.12,38.77-49.74,71.06-49.74h49.33Z\"\n />\n <path\n className=\"cls-1\"\n d=\"M249.83,0C113.3,0,2,110.09,.03,246.16c-2,138.19,110.12,252.7,248.33,253.5,42.68,.25,83.79-10.19,120.3-30.03,3.56-1.93,4.11-6.83,1.08-9.51l-23.38-20.72c-4.75-4.21-11.51-5.4-17.36-2.92-25.48,10.84-53.17,16.38-81.71,16.03-111.68-1.37-201.91-94.29-200.13-205.96,1.76-110.26,92-199.41,202.67-199.41h202.69V407.41l-115-102.18c-3.72-3.31-9.42-2.66-12.42,1.31-18.46,24.44-48.53,39.64-81.93,37.34-46.33-3.2-83.87-40.5-87.34-86.81-4.15-55.24,39.63-101.52,94-101.52,49.18,0,89.68,37.85,93.91,85.95,.38,4.28,2.31,8.27,5.52,11.12l29.95,26.55c3.4,3.01,8.79,1.17,9.63-3.3,2.16-11.55,2.92-23.58,2.07-35.92-4.82-70.34-61.8-126.93-132.17-131.26-80.68-4.97-148.13,58.14-150.27,137.25-2.09,77.1,61.08,143.56,138.19,145.26,32.19,.71,62.03-9.41,86.14-26.95l150.26,133.2c6.44,5.71,16.61,1.14,16.61-7.47V9.48C499.66,4.25,495.42,0,490.18,0H249.83Z\"\n />\n </svg>\n </a>\n );\n}\n","import React, { type JSX } from 'react';\n\nimport { AlgoliaLogo } from './AlgoliaLogo';\n\nexport type FooterTranslations = Partial<{\n selectText: string;\n submitQuestionText: string;\n selectKeyAriaLabel: string;\n navigateText: string;\n navigateUpKeyAriaLabel: string;\n navigateDownKeyAriaLabel: string;\n closeText: string;\n backToSearchText: string;\n closeKeyAriaLabel: string;\n poweredByText: string;\n}>;\n\ntype FooterProps = Partial<{\n translations: FooterTranslations;\n isAskAiActive: boolean;\n}>;\n\ninterface CommandIconProps {\n children: React.ReactNode;\n ariaLabel: string;\n}\n\nfunction CommandIcon(props: CommandIconProps): JSX.Element {\n return (\n <svg width=\"20\" height=\"20\" aria-label={props.ariaLabel} viewBox=\"0 0 24 24\" role=\"img\">\n <g fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.4\">\n {props.children}\n </g>\n </svg>\n );\n}\n\nexport function Footer({ translations = {}, isAskAiActive = false }: FooterProps): JSX.Element {\n const {\n selectText = 'Select',\n selectKeyAriaLabel = 'Enter key',\n submitQuestionText = 'Submit question',\n navigateText = 'Navigate',\n navigateUpKeyAriaLabel = 'Arrow up',\n navigateDownKeyAriaLabel = 'Arrow down',\n closeText = 'Close',\n backToSearchText = 'Back to search',\n closeKeyAriaLabel = 'Escape key',\n poweredByText = 'Powered by',\n } = translations;\n\n return (\n <>\n <div className=\"DocSearch-Logo\">\n <AlgoliaLogo translations={{ poweredByText }} />\n </div>\n <ul className=\"DocSearch-Commands\">\n <li>\n <kbd className=\"DocSearch-Commands-Key\">\n <CommandIcon ariaLabel={navigateDownKeyAriaLabel}>\n <path d=\"M12 5v14\" />\n <path d=\"m19 12-7 7-7-7\" />\n </CommandIcon>\n </kbd>\n <kbd className=\"DocSearch-Commands-Key\">\n <CommandIcon ariaLabel={navigateUpKeyAriaLabel}>\n <path d=\"m5 12 7-7 7 7\" />\n <path d=\"M12 19V5\" />\n </CommandIcon>\n </kbd>\n <span className=\"DocSearch-Label\">{navigateText}</span>\n </li>\n <li>\n <kbd className=\"DocSearch-Commands-Key\">\n <CommandIcon ariaLabel={selectKeyAriaLabel}>\n <polyline points=\"9 10 4 15 9 20\" />\n <path d=\"M20 4v7a4 4 0 0 1-4 4H4\" />\n </CommandIcon>\n </kbd>\n <span className=\"DocSearch-Label\">{isAskAiActive ? submitQuestionText : selectText}</span>\n </li>\n <li>\n <kbd className=\"DocSearch-Commands-Key\">\n <span className=\"DocSearch-Escape-Key\">ESC</span>\n </kbd>\n <span className=\"DocSearch-Label\" aria-label={closeKeyAriaLabel}>\n {isAskAiActive ? backToSearchText : closeText}\n </span>\n </li>\n </ul>\n </>\n );\n}\n","import React, { type JSX } from 'react';\n\nimport type { InternalDocSearchHit, StoredDocSearchHit } from './types';\n\ninterface HitProps {\n hit: InternalDocSearchHit | StoredDocSearchHit;\n children: React.ReactNode;\n}\n\nexport function Hit({ hit, children }: HitProps): JSX.Element {\n return <a href={hit.url}>{children}</a>;\n}\n","import React, { type JSX } from 'react';\n\nexport function LoadingIcon({ className }: { className?: string }): JSX.Element {\n return (\n <svg viewBox=\"0 0 38 38\" className={className} stroke=\"currentColor\" strokeOpacity=\".5\">\n <g fill=\"none\" fillRule=\"evenodd\">\n <g transform=\"translate(1 1)\" strokeWidth=\"2\">\n <circle strokeOpacity=\".3\" cx=\"18\" cy=\"18\" r=\"18\" />\n <path d=\"M36 18c0-9.94-8.06-18-18-18\">\n <animateTransform\n attributeName=\"transform\"\n type=\"rotate\"\n from=\"0 18 18\"\n to=\"360 18 18\"\n dur=\"1s\"\n repeatCount=\"indefinite\"\n />\n </path>\n </g>\n </g>\n </svg>\n );\n}\n","import React, { type JSX } from 'react';\n\nexport function SparklesIcon(): JSX.Element {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"DocSearch-Hit-icon-sparkles\"\n >\n <path d=\"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z\" />\n <path d=\"M20 3v4\" />\n <path d=\"M22 5h-4\" />\n <path d=\"M4 17v2\" />\n <path d=\"M5 18H3\" />\n </svg>\n );\n}\n","import React, { type JSX } from 'react';\n\nexport function RecentIcon(): JSX.Element {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\">\n <g stroke=\"currentColor\" fill=\"none\" fillRule=\"evenodd\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M3.18 6.6a8.23 8.23 0 1112.93 9.94h0a8.23 8.23 0 01-11.63 0\" />\n <path d=\"M6.44 7.25H2.55V3.36M10.45 6v5.6M10.45 11.6L13 13\" />\n </g>\n </svg>\n );\n}\n","import React, { type JSX } from 'react';\n\nexport function CloseIcon(): JSX.Element {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\">\n <path\n d=\"M10 10l5.09-5.09L10 10l5.09 5.09L10 10zm0 0L4.91 4.91 10 10l-5.09 5.09L10 10z\"\n stroke=\"currentColor\"\n fill=\"none\"\n fillRule=\"evenodd\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","import React, { type JSX } from 'react';\n\nexport function AlertIcon(): JSX.Element {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n fillRule=\"evenodd\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n className=\"lucide lucide-triangle-alert-icon lucide-triangle-alert\"\n >\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\" />\n <path d=\"M12 9v4\" />\n <path d=\"M12 17h.01\" />\n </svg>\n );\n}\n","import React, { type JSX } from 'react';\n\nexport function SelectIcon(): JSX.Element {\n return (\n <svg className=\"DocSearch-Hit-Select-Icon\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\">\n <g stroke=\"currentColor\" fill=\"none\" fillRule=\"evenodd\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M18 3v4c0 2-2 4-4 4H2\" />\n <path d=\"M8 17l-6-6 6-6\" />\n </g>\n </svg>\n );\n}\n","import React, { type JSX } from 'react';\n\nconst LvlIcon: React.FC = () => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\" />\n <path d=\"M14 2v4a2 2 0 0 0 2 2h4\" />\n <path d=\"M10 9H8\" />\n <path d=\"M16 13H8\" />\n <path d=\"M16 17H8\" />\n </svg>\n );\n};\n\nexport function SourceIcon(props: { type: string }): JSX.Element {\n switch (props.type) {\n case 'lvl1':\n return <LvlIcon />;\n case 'content':\n return <ContentIcon />;\n default:\n return <AnchorIcon />;\n }\n}\n\nfunction AnchorIcon(): JSX.Element {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"4\" x2=\"20\" y1=\"9\" y2=\"9\" />\n <line x1=\"4\" x2=\"20\" y1=\"15\" y2=\"15\" />\n <line x1=\"10\" x2=\"8\" y1=\"3\" y2=\"21\" />\n <line x1=\"16\" x2=\"14\" y1=\"3\" y2=\"21\" />\n </svg>\n );\n}\n\nfunction ContentIcon(): JSX.Element {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\">\n <path\n d=\"M17 5H3h14zm0 5H3h14zm0 5H3h14z\"\n stroke=\"currentColor\"\n fill=\"none\"\n fillRule=\"evenodd\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","import React, { type JSX } from 'react';\n\nexport function StarIcon(): JSX.Element {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\">\n <path\n d=\"M10 14.2L5 17l1-5.6-4-4 5.5-.7 2.5-5 2.5 5 5.6.8-4 4 .9 5.5z\"\n stroke=\"currentColor\"\n fill=\"none\"\n fillRule=\"evenodd\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","import React, { type JSX } from 'react';\n\nexport function ErrorIcon(): JSX.Element {\n return (\n <svg\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n fillRule=\"evenodd\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M19 4.8a16 16 0 00-2-1.2m-3.3-1.2A16 16 0 001.1 4.7M16.7 8a12 12 0 00-2.8-1.4M10 6a12 12 0 00-6.7 2M12.3 14.7a4 4 0 00-4.5 0M14.5 11.4A8 8 0 0010 10M3 16L18 2M10 18h0\"></path>\n </svg>\n );\n}\n","import React, { type JSX } from 'react';\n\nexport function NoResultsIcon(): JSX.Element {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"64\"\n height=\"64\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"#5a5e9a\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m13.5 8.5-5 5\" />\n <path d=\"m8.5 8.5 5 5\" />\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.3-4.3\" />\n </svg>\n );\n}\n","import React, { type JSX, Fragment } from 'react';\n\nimport type { AskAiScreenTranslations } from './AskAiScreen';\nimport { SearchIcon } from './icons';\n\ninterface AggregatedSearchBlockProps {\n queries: string[];\n translations: AskAiScreenTranslations;\n onSearchQueryClick: (query: string) => void;\n}\n\n// allow translators to return either simple string parts or a fully custom node\nexport interface AggregatedToolCallParts {\n before?: string;\n separator?: string;\n lastSeparator?: string;\n after?: string;\n}\n\n// default english implementation (\"Searched for \\\"A\\\", \\\"B\\\" and \\\"C\\\"\")\nconst defaultAggregatedToolCallParts: AggregatedToolCallParts = {\n before: 'Searched for ',\n separator: ', ',\n lastSeparator: ' and ',\n after: '',\n};\n\nexport function AggregatedSearchBlock({\n queries,\n translations,\n onSearchQueryClick,\n}: AggregatedSearchBlockProps): JSX.Element | null {\n // no queries? no render\n if (queries.length === 0) return null;\n\n // if the translator provides a fully custom node, render it and bail out.\n if (typeof translations.aggregatedToolCallNode === 'function') {\n return <>{translations.aggregatedToolCallNode(queries, onSearchQueryClick)}</>;\n }\n\n // otherwise fall back to the classic english-pattern renderer.\n const parts = translations.aggregatedToolCallText\n ? translations.aggregatedToolCallText(queries)\n : defaultAggregatedToolCallParts;\n\n const { before = '', separator = ', ', lastSeparator = ' and ', after = '' } = parts || {};\n\n return (\n <div className=\"DocSearch-AskAiScreen-MessageContent-Tool Tool--AggregatedResult\">\n <SearchIcon size={18} />\n <span>\n {before && <span>{before}</span>}\n {queries.map((q, idx) => (\n // eslint-disable-next-line react/no-array-index-key\n <Fragment key={q + idx}>\n <span\n role=\"button\"\n tabIndex={0}\n className=\"DocSearch-AskAiScreen-MessageContent-Tool-Query\"\n onKeyDown={(e) => {\n if (e.key === 'enter' || e.key === ' ') {\n e.preventDefault();\n onSearchQueryClick(q);\n }\n }}\n onClick={() => onSearchQueryClick(q)}\n >\n &quot;{q}&quot;\n </span>\n {idx < queries.length - 2 && separator}\n {idx === queries.length - 2 && lastSeparator}\n </Fragment>\n ))}\n {after && <span>{after}</span>}\n </span>\n </div>\n );\n}\n","/**\n * marked v15.0.12 - a markdown parser\n * Copyright (c) 2011-2025, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\n\n// src/defaults.ts\nfunction _getDefaults() {\n return {\n async: false,\n breaks: false,\n extensions: null,\n gfm: true,\n hooks: null,\n pedantic: false,\n renderer: null,\n silent: false,\n tokenizer: null,\n walkTokens: null\n };\n}\nvar _defaults = _getDefaults();\nfunction changeDefaults(newDefaults) {\n _defaults = newDefaults;\n}\n\n// src/rules.ts\nvar noopTest = { exec: () => null };\nfunction edit(regex, opt = \"\") {\n let source = typeof regex === \"string\" ? regex : regex.source;\n const obj = {\n replace: (name, val) => {\n let valSource = typeof val === \"string\" ? val : val.source;\n valSource = valSource.replace(other.caret, \"$1\");\n source = source.replace(name, valSource);\n return obj;\n },\n getRegex: () => {\n return new RegExp(source, opt);\n }\n };\n return obj;\n}\nvar other = {\n codeRemoveIndent: /^(?: {1,4}| {0,3}\\t)/gm,\n outputLinkReplace: /\\\\([\\[\\]])/g,\n indentCodeCompensation: /^(\\s+)(?:```)/,\n beginningSpace: /^\\s+/,\n endingHash: /#$/,\n startingSpaceChar: /^ /,\n endingSpaceChar: / $/,\n nonSpaceChar: /[^ ]/,\n newLineCharGlobal: /\\n/g,\n tabCharGlobal: /\\t/g,\n multipleSpaceGlobal: /\\s+/g,\n blankLine: /^[ \\t]*$/,\n doubleBlankLine: /\\n[ \\t]*\\n[ \\t]*$/,\n blockquoteStart: /^ {0,3}>/,\n blockquoteSetextReplace: /\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,\n blockquoteSetextReplace2: /^ {0,3}>[ \\t]?/gm,\n listReplaceTabs: /^\\t+/,\n listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g,\n listIsTask: /^\\[[ xX]\\] /,\n listReplaceTask: /^\\[[ xX]\\] +/,\n anyLine: /\\n.*\\n/,\n hrefBrackets: /^<(.*)>$/,\n tableDelimiter: /[:|]/,\n tableAlignChars: /^\\||\\| *$/g,\n tableRowBlankLine: /\\n[ \\t]*$/,\n tableAlignRight: /^ *-+: *$/,\n tableAlignCenter: /^ *:-+: *$/,\n tableAlignLeft: /^ *:-+ *$/,\n startATag: /^<a /i,\n endATag: /^<\\/a>/i,\n startPreScriptTag: /^<(pre|code|kbd|script)(\\s|>)/i,\n endPreScriptTag: /^<\\/(pre|code|kbd|script)(\\s|>)/i,\n startAngleBracket: /^</,\n endAngleBracket: />$/,\n pedanticHrefTitle: /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,\n unicodeAlphaNumeric: /[\\p{L}\\p{N}]/u,\n escapeTest: /[&<>\"']/,\n escapeReplace: /[&<>\"']/g,\n escapeTestNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,\n escapeReplaceNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,\n unescapeTest: /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,\n caret: /(^|[^\\[])\\^/g,\n percentDecode: /%25/g,\n findPipe: /\\|/g,\n splitPipe: / \\|/,\n slashPipe: /\\\\\\|/g,\n carriageReturn: /\\r\\n|\\r/g,\n spaceLine: /^ +$/gm,\n notSpaceStart: /^\\S*/,\n endingNewline: /\\n$/,\n listItemRegex: (bull) => new RegExp(`^( {0,3}${bull})((?:[\t ][^\\\\n]*)?(?:\\\\n|$))`),\n nextBulletRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \t][^\\\\n]*)?(?:\\\\n|$))`),\n hrRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),\n fencesBeginRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`),\n headingBeginRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`),\n htmlBeginRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}<(?:[a-z].*>|!--)`, \"i\")\n};\nvar newline = /^(?:[ \\t]*(?:\\n|$))+/;\nvar blockCode = /^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/;\nvar fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nvar hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nvar heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nvar bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nvar lheadingCore = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/;\nvar lheading = edit(lheadingCore).replace(/bull/g, bullet).replace(/blockCode/g, /(?: {4}| {0,3}\\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\\n>]+>\\n/).replace(/\\|table/g, \"\").getRegex();\nvar lheadingGfm = edit(lheadingCore).replace(/bull/g, bullet).replace(/blockCode/g, /(?: {4}| {0,3}\\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\\n>]+>\\n/).replace(/table/g, / {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/).getRegex();\nvar _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nvar blockText = /^[^\\n]+/;\nvar _blockLabel = /(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/;\nvar def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/).replace(\"label\", _blockLabel).replace(\"title\", /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/).getRegex();\nvar list = edit(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/).replace(/bull/g, bullet).getRegex();\nvar _tag = \"address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul\";\nvar _comment = /<!--(?:-?>|[\\s\\S]*?(?:-->|$))/;\nvar html = edit(\n \"^ {0,3}(?:<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)|comment[^\\\\n]*(\\\\n+|$)|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$))\",\n \"i\"\n).replace(\"comment\", _comment).replace(\"tag\", _tag).replace(\"attribute\", / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex();\nvar paragraph = edit(_paragraph).replace(\"hr\", hr).replace(\"heading\", \" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\", \"\").replace(\"|table\", \"\").replace(\"blockquote\", \" {0,3}>\").replace(\"fences\", \" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\", \" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\", \"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\", _tag).getRegex();\nvar blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace(\"paragraph\", paragraph).getRegex();\nvar blockNormal = {\n blockquote,\n code: blockCode,\n def,\n fences,\n heading,\n hr,\n html,\n lheading,\n list,\n newline,\n paragraph,\n table: noopTest,\n text: blockText\n};\nvar gfmTable = edit(\n \"^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\"\n).replace(\"hr\", hr).replace(\"heading\", \" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"blockquote\", \" {0,3}>\").replace(\"code\", \"(?: {4}| {0,3}\t)[^\\\\n]\").replace(\"fences\", \" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\", \" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\", \"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\", _tag).getRegex();\nvar blockGfm = {\n ...blockNormal,\n lheading: lheadingGfm,\n table: gfmTable,\n paragraph: edit(_paragraph).replace(\"hr\", hr).replace(\"heading\", \" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\", \"\").replace(\"table\", gfmTable).replace(\"blockquote\", \" {0,3}>\").replace(\"fences\", \" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\", \" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\", \"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\", _tag).getRegex()\n};\nvar blockPedantic = {\n ...blockNormal,\n html: edit(\n `^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\\\s[^'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`\n ).replace(\"comment\", _comment).replace(/tag/g, \"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b\").getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest,\n // fences not supported\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(_paragraph).replace(\"hr\", hr).replace(\"heading\", \" *#{1,6} *[^\\n]\").replace(\"lheading\", lheading).replace(\"|table\", \"\").replace(\"blockquote\", \" {0,3}>\").replace(\"|fences\", \"\").replace(\"|list\", \"\").replace(\"|html\", \"\").replace(\"|tag\", \"\").getRegex()\n};\nvar escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nvar inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nvar br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nvar inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/;\nvar _punctuation = /[\\p{P}\\p{S}]/u;\nvar _punctuationOrSpace = /[\\s\\p{P}\\p{S}]/u;\nvar _notPunctuationOrSpace = /[^\\s\\p{P}\\p{S}]/u;\nvar punctuation = edit(/^((?![*_])punctSpace)/, \"u\").replace(/punctSpace/g, _punctuationOrSpace).getRegex();\nvar _punctuationGfmStrongEm = /(?!~)[\\p{P}\\p{S}]/u;\nvar _punctuationOrSpaceGfmStrongEm = /(?!~)[\\s\\p{P}\\p{S}]/u;\nvar _notPunctuationOrSpaceGfmStrongEm = /(?:[^\\s\\p{P}\\p{S}]|~)/u;\nvar blockSkip = /\\[[^[\\]]*?\\]\\((?:\\\\.|[^\\\\\\(\\)]|\\((?:\\\\.|[^\\\\\\(\\)])*\\))*\\)|`[^`]*?`|<[^<>]*?>/g;\nvar emStrongLDelimCore = /^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/;\nvar emStrongLDelim = edit(emStrongLDelimCore, \"u\").replace(/punct/g, _punctuation).getRegex();\nvar emStrongLDelimGfm = edit(emStrongLDelimCore, \"u\").replace(/punct/g, _punctuationGfmStrongEm).getRegex();\nvar emStrongRDelimAstCore = \"^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|notPunctSpace(\\\\*+)(?=notPunctSpace)\";\nvar emStrongRDelimAst = edit(emStrongRDelimAstCore, \"gu\").replace(/notPunctSpace/g, _notPunctuationOrSpace).replace(/punctSpace/g, _punctuationOrSpace).replace(/punct/g, _punctuation).getRegex();\nvar emStrongRDelimAstGfm = edit(emStrongRDelimAstCore, \"gu\").replace(/notPunctSpace/g, _notPunctuationOrSpaceGfmStrongEm).replace(/punctSpace/g, _punctuationOrSpaceGfmStrongEm).replace(/punct/g, _punctuationGfmStrongEm).getRegex();\nvar emStrongRDelimUnd = edit(\n \"^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)\",\n \"gu\"\n).replace(/notPunctSpace/g, _notPunctuationOrSpace).replace(/punctSpace/g, _punctuationOrSpace).replace(/punct/g, _punctuation).getRegex();\nvar anyPunctuation = edit(/\\\\(punct)/, \"gu\").replace(/punct/g, _punctuation).getRegex();\nvar autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/).replace(\"scheme\", /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(\"email\", /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex();\nvar _inlineComment = edit(_comment).replace(\"(?:-->|$)\", \"-->\").getRegex();\nvar tag = edit(\n \"^comment|^</[a-zA-Z][\\\\w:-]*\\\\s*>|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\"\n).replace(\"comment\", _inlineComment).replace(\"attribute\", /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/).getRegex();\nvar _inlineLabel = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\nvar link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/).replace(\"label\", _inlineLabel).replace(\"href\", /<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/).replace(\"title\", /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex();\nvar reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/).replace(\"label\", _inlineLabel).replace(\"ref\", _blockLabel).getRegex();\nvar nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/).replace(\"ref\", _blockLabel).getRegex();\nvar reflinkSearch = edit(\"reflink|nolink(?!\\\\()\", \"g\").replace(\"reflink\", reflink).replace(\"nolink\", nolink).getRegex();\nvar inlineNormal = {\n _backpedal: noopTest,\n // only used for GFM url\n anyPunctuation,\n autolink,\n blockSkip,\n br,\n code: inlineCode,\n del: noopTest,\n emStrongLDelim,\n emStrongRDelimAst,\n emStrongRDelimUnd,\n escape,\n link,\n nolink,\n punctuation,\n reflink,\n reflinkSearch,\n tag,\n text: inlineText,\n url: noopTest\n};\nvar inlinePedantic = {\n ...inlineNormal,\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/).replace(\"label\", _inlineLabel).getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace(\"label\", _inlineLabel).getRegex()\n};\nvar inlineGfm = {\n ...inlineNormal,\n emStrongRDelimAst: emStrongRDelimAstGfm,\n emStrongLDelim: emStrongLDelimGfm,\n url: edit(/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/, \"i\").replace(\"email\", /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])((?:\\\\.|[^\\\\])*?(?:\\\\.|[^\\s~\\\\]))\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/\n};\nvar inlineBreaks = {\n ...inlineGfm,\n br: edit(br).replace(\"{2,}\", \"*\").getRegex(),\n text: edit(inlineGfm.text).replace(\"\\\\b_\", \"\\\\b_| {2,}\\\\n\").replace(/\\{2,\\}/g, \"*\").getRegex()\n};\nvar block = {\n normal: blockNormal,\n gfm: blockGfm,\n pedantic: blockPedantic\n};\nvar inline = {\n normal: inlineNormal,\n gfm: inlineGfm,\n breaks: inlineBreaks,\n pedantic: inlinePedantic\n};\n\n// src/helpers.ts\nvar escapeReplacements = {\n \"&\": \"&amp;\",\n \"<\": \"&lt;\",\n \">\": \"&gt;\",\n '\"': \"&quot;\",\n \"'\": \"&#39;\"\n};\nvar getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape2(html2, encode) {\n if (encode) {\n if (other.escapeTest.test(html2)) {\n return html2.replace(other.escapeReplace, getEscapeReplacement);\n }\n } else {\n if (other.escapeTestNoEncode.test(html2)) {\n return html2.replace(other.escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n return html2;\n}\nfunction cleanUrl(href) {\n try {\n href = encodeURI(href).replace(other.percentDecode, \"%\");\n } catch {\n return null;\n }\n return href;\n}\nfunction splitCells(tableRow, count) {\n const row = tableRow.replace(other.findPipe, (match, offset, str) => {\n let escaped = false;\n let curr = offset;\n while (--curr >= 0 && str[curr] === \"\\\\\") escaped = !escaped;\n if (escaped) {\n return \"|\";\n } else {\n return \" |\";\n }\n }), cells = row.split(other.splitPipe);\n let i = 0;\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells.at(-1)?.trim()) {\n cells.pop();\n }\n if (count) {\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push(\"\");\n }\n }\n for (; i < cells.length; i++) {\n cells[i] = cells[i].trim().replace(other.slashPipe, \"|\");\n }\n return cells;\n}\nfunction rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return \"\";\n }\n let suffLen = 0;\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n return str.slice(0, l - suffLen);\n}\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n let level = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] === \"\\\\\") {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n if (level > 0) {\n return -2;\n }\n return -1;\n}\n\n// src/Tokenizer.ts\nfunction outputLink(cap, link2, raw, lexer2, rules) {\n const href = link2.href;\n const title = link2.title || null;\n const text = cap[1].replace(rules.other.outputLinkReplace, \"$1\");\n lexer2.state.inLink = true;\n const token = {\n type: cap[0].charAt(0) === \"!\" ? \"image\" : \"link\",\n raw,\n href,\n title,\n text,\n tokens: lexer2.inlineTokens(text)\n };\n lexer2.state.inLink = false;\n return token;\n}\nfunction indentCodeCompensation(raw, text, rules) {\n const matchIndentToCode = raw.match(rules.other.indentCodeCompensation);\n if (matchIndentToCode === null) {\n return text;\n }\n const indentToCode = matchIndentToCode[1];\n return text.split(\"\\n\").map((node) => {\n const matchIndentInNode = node.match(rules.other.beginningSpace);\n if (matchIndentInNode === null) {\n return node;\n }\n const [indentInNode] = matchIndentInNode;\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n return node;\n }).join(\"\\n\");\n}\nvar _Tokenizer = class {\n options;\n rules;\n // set by the lexer\n lexer;\n // set by the lexer\n constructor(options2) {\n this.options = options2 || _defaults;\n }\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: \"space\",\n raw: cap[0]\n };\n }\n }\n code(src) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(this.rules.other.codeRemoveIndent, \"\");\n return {\n type: \"code\",\n raw: cap[0],\n codeBlockStyle: \"indented\",\n text: !this.options.pedantic ? rtrim(text, \"\\n\") : text\n };\n }\n }\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || \"\", this.rules);\n return {\n type: \"code\",\n raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, \"$1\") : cap[2],\n text\n };\n }\n }\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n if (this.rules.other.endingHash.test(text)) {\n const trimmed = rtrim(text, \"#\");\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || this.rules.other.endingSpaceChar.test(trimmed)) {\n text = trimmed.trim();\n }\n }\n return {\n type: \"heading\",\n raw: cap[0],\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text)\n };\n }\n }\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: \"hr\",\n raw: rtrim(cap[0], \"\\n\")\n };\n }\n }\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n let lines = rtrim(cap[0], \"\\n\").split(\"\\n\");\n let raw = \"\";\n let text = \"\";\n const tokens = [];\n while (lines.length > 0) {\n let inBlockquote = false;\n const currentLines = [];\n let i;\n for (i = 0; i < lines.length; i++) {\n if (this.rules.other.blockquoteStart.test(lines[i])) {\n currentLines.push(lines[i]);\n inBlockquote = true;\n } else if (!inBlockquote) {\n currentLines.push(lines[i]);\n } else {\n break;\n }\n }\n lines = lines.slice(i);\n const currentRaw = currentLines.join(\"\\n\");\n const currentText = currentRaw.replace(this.rules.other.blockquoteSetextReplace, \"\\n $1\").replace(this.rules.other.blockquoteSetextReplace2, \"\");\n raw = raw ? `${raw}\n${currentRaw}` : currentRaw;\n text = text ? `${text}\n${currentText}` : currentText;\n const top = this.lexer.state.top;\n this.lexer.state.top = true;\n this.lexer.blockTokens(currentText, tokens, true);\n this.lexer.state.top = top;\n if (lines.length === 0) {\n break;\n }\n const lastToken = tokens.at(-1);\n if (lastToken?.type === \"code\") {\n break;\n } else if (lastToken?.type === \"blockquote\") {\n const oldToken = lastToken;\n const newText = oldToken.raw + \"\\n\" + lines.join(\"\\n\");\n const newToken = this.blockquote(newText);\n tokens[tokens.length - 1] = newToken;\n raw = raw.substring(0, raw.length - oldToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.text.length) + newToken.text;\n break;\n } else if (lastToken?.type === \"list\") {\n const oldToken = lastToken;\n const newText = oldToken.raw + \"\\n\" + lines.join(\"\\n\");\n const newToken = this.list(newText);\n tokens[tokens.length - 1] = newToken;\n raw = raw.substring(0, raw.length - lastToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.raw.length) + newToken.raw;\n lines = newText.substring(tokens.at(-1).raw.length).split(\"\\n\");\n continue;\n }\n }\n return {\n type: \"blockquote\",\n raw,\n tokens,\n text\n };\n }\n }\n list(src) {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n const list2 = {\n type: \"list\",\n raw: \"\",\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : \"\",\n loose: false,\n items: []\n };\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n if (this.options.pedantic) {\n bull = isordered ? bull : \"[*+-]\";\n }\n const itemRegex = this.rules.other.listItemRegex(bull);\n let endsWithBlankLine = false;\n while (src) {\n let endEarly = false;\n let raw = \"\";\n let itemContents = \"\";\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n if (this.rules.block.hr.test(src)) {\n break;\n }\n raw = cap[0];\n src = src.substring(raw.length);\n let line = cap[2].split(\"\\n\", 1)[0].replace(this.rules.other.listReplaceTabs, (t) => \" \".repeat(3 * t.length));\n let nextLine = src.split(\"\\n\", 1)[0];\n let blankLine = !line.trim();\n let indent = 0;\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimStart();\n } else if (blankLine) {\n indent = cap[1].length + 1;\n } else {\n indent = cap[2].search(this.rules.other.nonSpaceChar);\n indent = indent > 4 ? 1 : indent;\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n if (blankLine && this.rules.other.blankLine.test(nextLine)) {\n raw += nextLine + \"\\n\";\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n if (!endEarly) {\n const nextBulletRegex = this.rules.other.nextBulletRegex(indent);\n const hrRegex = this.rules.other.hrRegex(indent);\n const fencesBeginRegex = this.rules.other.fencesBeginRegex(indent);\n const headingBeginRegex = this.rules.other.headingBeginRegex(indent);\n const htmlBeginRegex = this.rules.other.htmlBeginRegex(indent);\n while (src) {\n const rawLine = src.split(\"\\n\", 1)[0];\n let nextLineWithoutTabs;\n nextLine = rawLine;\n if (this.options.pedantic) {\n nextLine = nextLine.replace(this.rules.other.listReplaceNesting, \" \");\n nextLineWithoutTabs = nextLine;\n } else {\n nextLineWithoutTabs = nextLine.replace(this.rules.other.tabCharGlobal, \" \");\n }\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n if (htmlBeginRegex.test(nextLine)) {\n break;\n }\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n if (hrRegex.test(nextLine)) {\n break;\n }\n if (nextLineWithoutTabs.search(this.rules.other.nonSpaceChar) >= indent || !nextLine.trim()) {\n itemContents += \"\\n\" + nextLineWithoutTabs.slice(indent);\n } else {\n if (blankLine) {\n break;\n }\n if (line.replace(this.rules.other.tabCharGlobal, \" \").search(this.rules.other.nonSpaceChar) >= 4) {\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n itemContents += \"\\n\" + nextLine;\n }\n if (!blankLine && !nextLine.trim()) {\n blankLine = true;\n }\n raw += rawLine + \"\\n\";\n src = src.substring(rawLine.length + 1);\n line = nextLineWithoutTabs.slice(indent);\n }\n }\n if (!list2.loose) {\n if (endsWithBlankLine) {\n list2.loose = true;\n } else if (this.rules.other.doubleBlankLine.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n let istask = null;\n let ischecked;\n if (this.options.gfm) {\n istask = this.rules.other.listIsTask.exec(itemContents);\n if (istask) {\n ischecked = istask[0] !== \"[ ] \";\n itemContents = itemContents.replace(this.rules.other.listReplaceTask, \"\");\n }\n }\n list2.items.push({\n type: \"list_item\",\n raw,\n task: !!istask,\n checked: ischecked,\n loose: false,\n text: itemContents,\n tokens: []\n });\n list2.raw += raw;\n }\n const lastItem = list2.items.at(-1);\n if (lastItem) {\n lastItem.raw = lastItem.raw.trimEnd();\n lastItem.text = lastItem.text.trimEnd();\n } else {\n return;\n }\n list2.raw = list2.raw.trimEnd();\n for (let i = 0; i < list2.items.length; i++) {\n this.lexer.state.top = false;\n list2.items[i].tokens = this.lexer.blockTokens(list2.items[i].text, []);\n if (!list2.loose) {\n const spacers = list2.items[i].tokens.filter((t) => t.type === \"space\");\n const hasMultipleLineBreaks = spacers.length > 0 && spacers.some((t) => this.rules.other.anyLine.test(t.raw));\n list2.loose = hasMultipleLineBreaks;\n }\n }\n if (list2.loose) {\n for (let i = 0; i < list2.items.length; i++) {\n list2.items[i].loose = true;\n }\n }\n return list2;\n }\n }\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const token = {\n type: \"html\",\n block: true,\n raw: cap[0],\n pre: cap[1] === \"pre\" || cap[1] === \"script\" || cap[1] === \"style\",\n text: cap[0]\n };\n return token;\n }\n }\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n const tag2 = cap[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, \" \");\n const href = cap[2] ? cap[2].replace(this.rules.other.hrefBrackets, \"$1\").replace(this.rules.inline.anyPunctuation, \"$1\") : \"\";\n const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, \"$1\") : cap[3];\n return {\n type: \"def\",\n tag: tag2,\n raw: cap[0],\n href,\n title\n };\n }\n }\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (!cap) {\n return;\n }\n if (!this.rules.other.tableDelimiter.test(cap[2])) {\n return;\n }\n const headers = splitCells(cap[1]);\n const aligns = cap[2].replace(this.rules.other.tableAlignChars, \"\").split(\"|\");\n const rows = cap[3]?.trim() ? cap[3].replace(this.rules.other.tableRowBlankLine, \"\").split(\"\\n\") : [];\n const item = {\n type: \"table\",\n raw: cap[0],\n header: [],\n align: [],\n rows: []\n };\n if (headers.length !== aligns.length) {\n return;\n }\n for (const align of aligns) {\n if (this.rules.other.tableAlignRight.test(align)) {\n item.align.push(\"right\");\n } else if (this.rules.other.tableAlignCenter.test(align)) {\n item.align.push(\"center\");\n } else if (this.rules.other.tableAlignLeft.test(align)) {\n item.align.push(\"left\");\n } else {\n item.align.push(null);\n }\n }\n for (let i = 0; i < headers.length; i++) {\n item.header.push({\n text: headers[i],\n tokens: this.lexer.inline(headers[i]),\n header: true,\n align: item.align[i]\n });\n }\n for (const row of rows) {\n item.rows.push(splitCells(row, item.header.length).map((cell, i) => {\n return {\n text: cell,\n tokens: this.lexer.inline(cell),\n header: false,\n align: item.align[i]\n };\n }));\n }\n return item;\n }\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: \"heading\",\n raw: cap[0],\n depth: cap[2].charAt(0) === \"=\" ? 1 : 2,\n text: cap[1],\n tokens: this.lexer.inline(cap[1])\n };\n }\n }\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === \"\\n\" ? cap[1].slice(0, -1) : cap[1];\n return {\n type: \"paragraph\",\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text)\n };\n }\n }\n text(src) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: \"text\",\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0])\n };\n }\n }\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: \"escape\",\n raw: cap[0],\n text: cap[1]\n };\n }\n }\n tag(src) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && this.rules.other.startATag.test(cap[0])) {\n this.lexer.state.inLink = true;\n } else if (this.lexer.state.inLink && this.rules.other.endATag.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n } else if (this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n return {\n type: \"html\",\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n block: false,\n text: cap[0]\n };\n }\n }\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && this.rules.other.startAngleBracket.test(trimmedUrl)) {\n if (!this.rules.other.endAngleBracket.test(trimmedUrl)) {\n return;\n }\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), \"\\\\\");\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n const lastParenIndex = findClosingBracket(cap[2], \"()\");\n if (lastParenIndex === -2) {\n return;\n }\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf(\"!\") === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = \"\";\n }\n }\n let href = cap[2];\n let title = \"\";\n if (this.options.pedantic) {\n const link2 = this.rules.other.pedanticHrefTitle.exec(href);\n if (link2) {\n href = link2[1];\n title = link2[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : \"\";\n }\n href = href.trim();\n if (this.rules.other.startAngleBracket.test(href)) {\n if (this.options.pedantic && !this.rules.other.endAngleBracket.test(trimmedUrl)) {\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline.anyPunctuation, \"$1\") : href,\n title: title ? title.replace(this.rules.inline.anyPunctuation, \"$1\") : title\n }, cap[0], this.lexer, this.rules);\n }\n }\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src)) || (cap = this.rules.inline.nolink.exec(src))) {\n const linkString = (cap[2] || cap[1]).replace(this.rules.other.multipleSpaceGlobal, \" \");\n const link2 = links[linkString.toLowerCase()];\n if (!link2) {\n const text = cap[0].charAt(0);\n return {\n type: \"text\",\n raw: text,\n text\n };\n }\n return outputLink(cap, link2, cap[0], this.lexer, this.rules);\n }\n }\n emStrong(src, maskedSrc, prevChar = \"\") {\n let match = this.rules.inline.emStrongLDelim.exec(src);\n if (!match) return;\n if (match[3] && prevChar.match(this.rules.other.unicodeAlphaNumeric)) return;\n const nextChar = match[1] || match[2] || \"\";\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n const endReg = match[0][0] === \"*\" ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n endReg.lastIndex = 0;\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n if (!rDelim) continue;\n rLength = [...rDelim].length;\n if (match[3] || match[4]) {\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) {\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue;\n }\n }\n delimTotal -= rLength;\n if (delimTotal > 0) continue;\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n if (Math.min(lLength, rLength) % 2) {\n const text2 = raw.slice(1, -1);\n return {\n type: \"em\",\n raw,\n text: text2,\n tokens: this.lexer.inlineTokens(text2)\n };\n }\n const text = raw.slice(2, -2);\n return {\n type: \"strong\",\n raw,\n text,\n tokens: this.lexer.inlineTokens(text)\n };\n }\n }\n }\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(this.rules.other.newLineCharGlobal, \" \");\n const hasNonSpaceChars = this.rules.other.nonSpaceChar.test(text);\n const hasSpaceCharsOnBothEnds = this.rules.other.startingSpaceChar.test(text) && this.rules.other.endingSpaceChar.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n return {\n type: \"codespan\",\n raw: cap[0],\n text\n };\n }\n }\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: \"br\",\n raw: cap[0]\n };\n }\n }\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: \"del\",\n raw: cap[0],\n text: cap[2],\n tokens: this.lexer.inlineTokens(cap[2])\n };\n }\n }\n autolink(src) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === \"@\") {\n text = cap[1];\n href = \"mailto:\" + text;\n } else {\n text = cap[1];\n href = text;\n }\n return {\n type: \"link\",\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: \"text\",\n raw: text,\n text\n }\n ]\n };\n }\n }\n url(src) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === \"@\") {\n text = cap[0];\n href = \"mailto:\" + text;\n } else {\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? \"\";\n } while (prevCapZero !== cap[0]);\n text = cap[0];\n if (cap[1] === \"www.\") {\n href = \"http://\" + cap[0];\n } else {\n href = cap[0];\n }\n }\n return {\n type: \"link\",\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: \"text\",\n raw: text,\n text\n }\n ]\n };\n }\n }\n inlineText(src) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n const escaped = this.lexer.state.inRawBlock;\n return {\n type: \"text\",\n raw: cap[0],\n text: cap[0],\n escaped\n };\n }\n }\n};\n\n// src/Lexer.ts\nvar _Lexer = class __Lexer {\n tokens;\n options;\n state;\n tokenizer;\n inlineQueue;\n constructor(options2) {\n this.tokens = [];\n this.tokens.links = /* @__PURE__ */ Object.create(null);\n this.options = options2 || _defaults;\n this.options.tokenizer = this.options.tokenizer || new _Tokenizer();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n this.tokenizer.lexer = this;\n this.inlineQueue = [];\n this.state = {\n inLink: false,\n inRawBlock: false,\n top: true\n };\n const rules = {\n other,\n block: block.normal,\n inline: inline.normal\n };\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n } else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n } else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block,\n inline\n };\n }\n /**\n * Static Lex Method\n */\n static lex(src, options2) {\n const lexer2 = new __Lexer(options2);\n return lexer2.lex(src);\n }\n /**\n * Static Lex Inline Method\n */\n static lexInline(src, options2) {\n const lexer2 = new __Lexer(options2);\n return lexer2.inlineTokens(src);\n }\n /**\n * Preprocessing\n */\n lex(src) {\n src = src.replace(other.carriageReturn, \"\\n\");\n this.blockTokens(src, this.tokens);\n for (let i = 0; i < this.inlineQueue.length; i++) {\n const next = this.inlineQueue[i];\n this.inlineTokens(next.src, next.tokens);\n }\n this.inlineQueue = [];\n return this.tokens;\n }\n blockTokens(src, tokens = [], lastParagraphClipped = false) {\n if (this.options.pedantic) {\n src = src.replace(other.tabCharGlobal, \" \").replace(other.spaceLine, \"\");\n }\n while (src) {\n let token;\n if (this.options.extensions?.block?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.raw.length === 1 && lastToken !== void 0) {\n lastToken.raw += \"\\n\";\n } else {\n tokens.push(token);\n }\n continue;\n }\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === \"paragraph\" || lastToken?.type === \"text\") {\n lastToken.raw += \"\\n\" + token.raw;\n lastToken.text += \"\\n\" + token.text;\n this.inlineQueue.at(-1).src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === \"paragraph\" || lastToken?.type === \"text\") {\n lastToken.raw += \"\\n\" + token.raw;\n lastToken.text += \"\\n\" + token.raw;\n this.inlineQueue.at(-1).src = lastToken.text;\n } else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n continue;\n }\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n let cutSrc = src;\n if (this.options.extensions?.startBlock) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startBlock.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === \"number\" && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n const lastToken = tokens.at(-1);\n if (lastParagraphClipped && lastToken?.type === \"paragraph\") {\n lastToken.raw += \"\\n\" + token.raw;\n lastToken.text += \"\\n\" + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1).src = lastToken.text;\n } else {\n tokens.push(token);\n }\n lastParagraphClipped = cutSrc.length !== src.length;\n src = src.substring(token.raw.length);\n continue;\n }\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === \"text\") {\n lastToken.raw += \"\\n\" + token.raw;\n lastToken.text += \"\\n\" + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1).src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n const errMsg = \"Infinite loop on byte: \" + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n this.state.top = true;\n return tokens;\n }\n inline(src, tokens = []) {\n this.inlineQueue.push({ src, tokens });\n return tokens;\n }\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = []) {\n let maskedSrc = src;\n let match = null;\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf(\"[\") + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + \"[\" + \"a\".repeat(match[0].length - 2) + \"]\" + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + \"++\" + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n }\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + \"[\" + \"a\".repeat(match[0].length - 2) + \"]\" + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n let keepPrevChar = false;\n let prevChar = \"\";\n while (src) {\n if (!keepPrevChar) {\n prevChar = \"\";\n }\n keepPrevChar = false;\n let token;\n if (this.options.extensions?.inline?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.type === \"text\" && lastToken?.type === \"text\") {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.autolink(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n let cutSrc = src;\n if (this.options.extensions?.startInline) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startInline.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === \"number\" && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (token = this.tokenizer.inlineText(cutSrc)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== \"_\") {\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n const lastToken = tokens.at(-1);\n if (lastToken?.type === \"text\") {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n const errMsg = \"Infinite loop on byte: \" + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n return tokens;\n }\n};\n\n// src/Renderer.ts\nvar _Renderer = class {\n options;\n parser;\n // set by the parser\n constructor(options2) {\n this.options = options2 || _defaults;\n }\n space(token) {\n return \"\";\n }\n code({ text, lang, escaped }) {\n const langString = (lang || \"\").match(other.notSpaceStart)?.[0];\n const code = text.replace(other.endingNewline, \"\") + \"\\n\";\n if (!langString) {\n return \"<pre><code>\" + (escaped ? code : escape2(code, true)) + \"</code></pre>\\n\";\n }\n return '<pre><code class=\"language-' + escape2(langString) + '\">' + (escaped ? code : escape2(code, true)) + \"</code></pre>\\n\";\n }\n blockquote({ tokens }) {\n const body = this.parser.parse(tokens);\n return `<blockquote>\n${body}</blockquote>\n`;\n }\n html({ text }) {\n return text;\n }\n heading({ tokens, depth }) {\n return `<h${depth}>${this.parser.parseInline(tokens)}</h${depth}>\n`;\n }\n hr(token) {\n return \"<hr>\\n\";\n }\n list(token) {\n const ordered = token.ordered;\n const start = token.start;\n let body = \"\";\n for (let j = 0; j < token.items.length; j++) {\n const item = token.items[j];\n body += this.listitem(item);\n }\n const type = ordered ? \"ol\" : \"ul\";\n const startAttr = ordered && start !== 1 ? ' start=\"' + start + '\"' : \"\";\n return \"<\" + type + startAttr + \">\\n\" + body + \"</\" + type + \">\\n\";\n }\n listitem(item) {\n let itemBody = \"\";\n if (item.task) {\n const checkbox = this.checkbox({ checked: !!item.checked });\n if (item.loose) {\n if (item.tokens[0]?.type === \"paragraph\") {\n item.tokens[0].text = checkbox + \" \" + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === \"text\") {\n item.tokens[0].tokens[0].text = checkbox + \" \" + escape2(item.tokens[0].tokens[0].text);\n item.tokens[0].tokens[0].escaped = true;\n }\n } else {\n item.tokens.unshift({\n type: \"text\",\n raw: checkbox + \" \",\n text: checkbox + \" \",\n escaped: true\n });\n }\n } else {\n itemBody += checkbox + \" \";\n }\n }\n itemBody += this.parser.parse(item.tokens, !!item.loose);\n return `<li>${itemBody}</li>\n`;\n }\n checkbox({ checked }) {\n return \"<input \" + (checked ? 'checked=\"\" ' : \"\") + 'disabled=\"\" type=\"checkbox\">';\n }\n paragraph({ tokens }) {\n return `<p>${this.parser.parseInline(tokens)}</p>\n`;\n }\n table(token) {\n let header = \"\";\n let cell = \"\";\n for (let j = 0; j < token.header.length; j++) {\n cell += this.tablecell(token.header[j]);\n }\n header += this.tablerow({ text: cell });\n let body = \"\";\n for (let j = 0; j < token.rows.length; j++) {\n const row = token.rows[j];\n cell = \"\";\n for (let k = 0; k < row.length; k++) {\n cell += this.tablecell(row[k]);\n }\n body += this.tablerow({ text: cell });\n }\n if (body) body = `<tbody>${body}</tbody>`;\n return \"<table>\\n<thead>\\n\" + header + \"</thead>\\n\" + body + \"</table>\\n\";\n }\n tablerow({ text }) {\n return `<tr>\n${text}</tr>\n`;\n }\n tablecell(token) {\n const content = this.parser.parseInline(token.tokens);\n const type = token.header ? \"th\" : \"td\";\n const tag2 = token.align ? `<${type} align=\"${token.align}\">` : `<${type}>`;\n return tag2 + content + `</${type}>\n`;\n }\n /**\n * span level renderer\n */\n strong({ tokens }) {\n return `<strong>${this.parser.parseInline(tokens)}</strong>`;\n }\n em({ tokens }) {\n return `<em>${this.parser.parseInline(tokens)}</em>`;\n }\n codespan({ text }) {\n return `<code>${escape2(text, true)}</code>`;\n }\n br(token) {\n return \"<br>\";\n }\n del({ tokens }) {\n return `<del>${this.parser.parseInline(tokens)}</del>`;\n }\n link({ href, title, tokens }) {\n const text = this.parser.parseInline(tokens);\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text;\n }\n href = cleanHref;\n let out = '<a href=\"' + href + '\"';\n if (title) {\n out += ' title=\"' + escape2(title) + '\"';\n }\n out += \">\" + text + \"</a>\";\n return out;\n }\n image({ href, title, text, tokens }) {\n if (tokens) {\n text = this.parser.parseInline(tokens, this.parser.textRenderer);\n }\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return escape2(text);\n }\n href = cleanHref;\n let out = `<img src=\"${href}\" alt=\"${text}\"`;\n if (title) {\n out += ` title=\"${escape2(title)}\"`;\n }\n out += \">\";\n return out;\n }\n text(token) {\n return \"tokens\" in token && token.tokens ? this.parser.parseInline(token.tokens) : \"escaped\" in token && token.escaped ? token.text : escape2(token.text);\n }\n};\n\n// src/TextRenderer.ts\nvar _TextRenderer = class {\n // no need for block level renderers\n strong({ text }) {\n return text;\n }\n em({ text }) {\n return text;\n }\n codespan({ text }) {\n return text;\n }\n del({ text }) {\n return text;\n }\n html({ text }) {\n return text;\n }\n text({ text }) {\n return text;\n }\n link({ text }) {\n return \"\" + text;\n }\n image({ text }) {\n return \"\" + text;\n }\n br() {\n return \"\";\n }\n};\n\n// src/Parser.ts\nvar _Parser = class __Parser {\n options;\n renderer;\n textRenderer;\n constructor(options2) {\n this.options = options2 || _defaults;\n this.options.renderer = this.options.renderer || new _Renderer();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.renderer.parser = this;\n this.textRenderer = new _TextRenderer();\n }\n /**\n * Static Parse Method\n */\n static parse(tokens, options2) {\n const parser2 = new __Parser(options2);\n return parser2.parse(tokens);\n }\n /**\n * Static Parse Inline Method\n */\n static parseInline(tokens, options2) {\n const parser2 = new __Parser(options2);\n return parser2.parseInline(tokens);\n }\n /**\n * Parse Loop\n */\n parse(tokens, top = true) {\n let out = \"\";\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const genericToken = anyToken;\n const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);\n if (ret !== false || ![\"space\", \"hr\", \"heading\", \"code\", \"table\", \"blockquote\", \"list\", \"html\", \"paragraph\", \"text\"].includes(genericToken.type)) {\n out += ret || \"\";\n continue;\n }\n }\n const token = anyToken;\n switch (token.type) {\n case \"space\": {\n out += this.renderer.space(token);\n continue;\n }\n case \"hr\": {\n out += this.renderer.hr(token);\n continue;\n }\n case \"heading\": {\n out += this.renderer.heading(token);\n continue;\n }\n case \"code\": {\n out += this.renderer.code(token);\n continue;\n }\n case \"table\": {\n out += this.renderer.table(token);\n continue;\n }\n case \"blockquote\": {\n out += this.renderer.blockquote(token);\n continue;\n }\n case \"list\": {\n out += this.renderer.list(token);\n continue;\n }\n case \"html\": {\n out += this.renderer.html(token);\n continue;\n }\n case \"paragraph\": {\n out += this.renderer.paragraph(token);\n continue;\n }\n case \"text\": {\n let textToken = token;\n let body = this.renderer.text(textToken);\n while (i + 1 < tokens.length && tokens[i + 1].type === \"text\") {\n textToken = tokens[++i];\n body += \"\\n\" + this.renderer.text(textToken);\n }\n if (top) {\n out += this.renderer.paragraph({\n type: \"paragraph\",\n raw: body,\n text: body,\n tokens: [{ type: \"text\", raw: body, text: body, escaped: true }]\n });\n } else {\n out += body;\n }\n continue;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return \"\";\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens, renderer = this.renderer) {\n let out = \"\";\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const ret = this.options.extensions.renderers[anyToken.type].call({ parser: this }, anyToken);\n if (ret !== false || ![\"escape\", \"html\", \"link\", \"image\", \"strong\", \"em\", \"codespan\", \"br\", \"del\", \"text\"].includes(anyToken.type)) {\n out += ret || \"\";\n continue;\n }\n }\n const token = anyToken;\n switch (token.type) {\n case \"escape\": {\n out += renderer.text(token);\n break;\n }\n case \"html\": {\n out += renderer.html(token);\n break;\n }\n case \"link\": {\n out += renderer.link(token);\n break;\n }\n case \"image\": {\n out += renderer.image(token);\n break;\n }\n case \"strong\": {\n out += renderer.strong(token);\n break;\n }\n case \"em\": {\n out += renderer.em(token);\n break;\n }\n case \"codespan\": {\n out += renderer.codespan(token);\n break;\n }\n case \"br\": {\n out += renderer.br(token);\n break;\n }\n case \"del\": {\n out += renderer.del(token);\n break;\n }\n case \"text\": {\n out += renderer.text(token);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return \"\";\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n};\n\n// src/Hooks.ts\nvar _Hooks = class {\n options;\n block;\n constructor(options2) {\n this.options = options2 || _defaults;\n }\n static passThroughHooks = /* @__PURE__ */ new Set([\n \"preprocess\",\n \"postprocess\",\n \"processAllTokens\"\n ]);\n /**\n * Process markdown before marked\n */\n preprocess(markdown) {\n return markdown;\n }\n /**\n * Process HTML after marked is finished\n */\n postprocess(html2) {\n return html2;\n }\n /**\n * Process all tokens before walk tokens\n */\n processAllTokens(tokens) {\n return tokens;\n }\n /**\n * Provide function to tokenize markdown\n */\n provideLexer() {\n return this.block ? _Lexer.lex : _Lexer.lexInline;\n }\n /**\n * Provide function to parse tokens\n */\n provideParser() {\n return this.block ? _Parser.parse : _Parser.parseInline;\n }\n};\n\n// src/Instance.ts\nvar Marked = class {\n defaults = _getDefaults();\n options = this.setOptions;\n parse = this.parseMarkdown(true);\n parseInline = this.parseMarkdown(false);\n Parser = _Parser;\n Renderer = _Renderer;\n TextRenderer = _TextRenderer;\n Lexer = _Lexer;\n Tokenizer = _Tokenizer;\n Hooks = _Hooks;\n constructor(...args) {\n this.use(...args);\n }\n /**\n * Run callback for every token\n */\n walkTokens(tokens, callback) {\n let values = [];\n for (const token of tokens) {\n values = values.concat(callback.call(this, token));\n switch (token.type) {\n case \"table\": {\n const tableToken = token;\n for (const cell of tableToken.header) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n for (const row of tableToken.rows) {\n for (const cell of row) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n }\n break;\n }\n case \"list\": {\n const listToken = token;\n values = values.concat(this.walkTokens(listToken.items, callback));\n break;\n }\n default: {\n const genericToken = token;\n if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n const tokens2 = genericToken[childTokens].flat(Infinity);\n values = values.concat(this.walkTokens(tokens2, callback));\n });\n } else if (genericToken.tokens) {\n values = values.concat(this.walkTokens(genericToken.tokens, callback));\n }\n }\n }\n }\n return values;\n }\n use(...args) {\n const extensions = this.defaults.extensions || { renderers: {}, childTokens: {} };\n args.forEach((pack) => {\n const opts = { ...pack };\n opts.async = this.defaults.async || opts.async || false;\n if (pack.extensions) {\n pack.extensions.forEach((ext) => {\n if (!ext.name) {\n throw new Error(\"extension name required\");\n }\n if (\"renderer\" in ext) {\n const prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n extensions.renderers[ext.name] = function(...args2) {\n let ret = ext.renderer.apply(this, args2);\n if (ret === false) {\n ret = prevRenderer.apply(this, args2);\n }\n return ret;\n };\n } else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if (\"tokenizer\" in ext) {\n if (!ext.level || ext.level !== \"block\" && ext.level !== \"inline\") {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n const extLevel = extensions[ext.level];\n if (extLevel) {\n extLevel.unshift(ext.tokenizer);\n } else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) {\n if (ext.level === \"block\") {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n } else {\n extensions.startBlock = [ext.start];\n }\n } else if (ext.level === \"inline\") {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n } else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if (\"childTokens\" in ext && ext.childTokens) {\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n if (pack.renderer) {\n const renderer = this.defaults.renderer || new _Renderer(this.defaults);\n for (const prop in pack.renderer) {\n if (!(prop in renderer)) {\n throw new Error(`renderer '${prop}' does not exist`);\n }\n if ([\"options\", \"parser\"].includes(prop)) {\n continue;\n }\n const rendererProp = prop;\n const rendererFunc = pack.renderer[rendererProp];\n const prevRenderer = renderer[rendererProp];\n renderer[rendererProp] = (...args2) => {\n let ret = rendererFunc.apply(renderer, args2);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args2);\n }\n return ret || \"\";\n };\n }\n opts.renderer = renderer;\n }\n if (pack.tokenizer) {\n const tokenizer = this.defaults.tokenizer || new _Tokenizer(this.defaults);\n for (const prop in pack.tokenizer) {\n if (!(prop in tokenizer)) {\n throw new Error(`tokenizer '${prop}' does not exist`);\n }\n if ([\"options\", \"rules\", \"lexer\"].includes(prop)) {\n continue;\n }\n const tokenizerProp = prop;\n const tokenizerFunc = pack.tokenizer[tokenizerProp];\n const prevTokenizer = tokenizer[tokenizerProp];\n tokenizer[tokenizerProp] = (...args2) => {\n let ret = tokenizerFunc.apply(tokenizer, args2);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args2);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n if (pack.hooks) {\n const hooks = this.defaults.hooks || new _Hooks();\n for (const prop in pack.hooks) {\n if (!(prop in hooks)) {\n throw new Error(`hook '${prop}' does not exist`);\n }\n if ([\"options\", \"block\"].includes(prop)) {\n continue;\n }\n const hooksProp = prop;\n const hooksFunc = pack.hooks[hooksProp];\n const prevHook = hooks[hooksProp];\n if (_Hooks.passThroughHooks.has(prop)) {\n hooks[hooksProp] = (arg) => {\n if (this.defaults.async) {\n return Promise.resolve(hooksFunc.call(hooks, arg)).then((ret2) => {\n return prevHook.call(hooks, ret2);\n });\n }\n const ret = hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n } else {\n hooks[hooksProp] = (...args2) => {\n let ret = hooksFunc.apply(hooks, args2);\n if (ret === false) {\n ret = prevHook.apply(hooks, args2);\n }\n return ret;\n };\n }\n }\n opts.hooks = hooks;\n }\n if (pack.walkTokens) {\n const walkTokens2 = this.defaults.walkTokens;\n const packWalktokens = pack.walkTokens;\n opts.walkTokens = function(token) {\n let values = [];\n values.push(packWalktokens.call(this, token));\n if (walkTokens2) {\n values = values.concat(walkTokens2.call(this, token));\n }\n return values;\n };\n }\n this.defaults = { ...this.defaults, ...opts };\n });\n return this;\n }\n setOptions(opt) {\n this.defaults = { ...this.defaults, ...opt };\n return this;\n }\n lexer(src, options2) {\n return _Lexer.lex(src, options2 ?? this.defaults);\n }\n parser(tokens, options2) {\n return _Parser.parse(tokens, options2 ?? this.defaults);\n }\n parseMarkdown(blockType) {\n const parse2 = (src, options2) => {\n const origOpt = { ...options2 };\n const opt = { ...this.defaults, ...origOpt };\n const throwError = this.onError(!!opt.silent, !!opt.async);\n if (this.defaults.async === true && origOpt.async === false) {\n return throwError(new Error(\"marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.\"));\n }\n if (typeof src === \"undefined\" || src === null) {\n return throwError(new Error(\"marked(): input parameter is undefined or null\"));\n }\n if (typeof src !== \"string\") {\n return throwError(new Error(\"marked(): input parameter is of type \" + Object.prototype.toString.call(src) + \", string expected\"));\n }\n if (opt.hooks) {\n opt.hooks.options = opt;\n opt.hooks.block = blockType;\n }\n const lexer2 = opt.hooks ? opt.hooks.provideLexer() : blockType ? _Lexer.lex : _Lexer.lexInline;\n const parser2 = opt.hooks ? opt.hooks.provideParser() : blockType ? _Parser.parse : _Parser.parseInline;\n if (opt.async) {\n return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src).then((src2) => lexer2(src2, opt)).then((tokens) => opt.hooks ? opt.hooks.processAllTokens(tokens) : tokens).then((tokens) => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens).then((tokens) => parser2(tokens, opt)).then((html2) => opt.hooks ? opt.hooks.postprocess(html2) : html2).catch(throwError);\n }\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src);\n }\n let tokens = lexer2(src, opt);\n if (opt.hooks) {\n tokens = opt.hooks.processAllTokens(tokens);\n }\n if (opt.walkTokens) {\n this.walkTokens(tokens, opt.walkTokens);\n }\n let html2 = parser2(tokens, opt);\n if (opt.hooks) {\n html2 = opt.hooks.postprocess(html2);\n }\n return html2;\n } catch (e) {\n return throwError(e);\n }\n };\n return parse2;\n }\n onError(silent, async) {\n return (e) => {\n e.message += \"\\nPlease report this to https://github.com/markedjs/marked.\";\n if (silent) {\n const msg = \"<p>An error occurred:</p><pre>\" + escape2(e.message + \"\", true) + \"</pre>\";\n if (async) {\n return Promise.resolve(msg);\n }\n return msg;\n }\n if (async) {\n return Promise.reject(e);\n }\n throw e;\n };\n }\n};\n\n// src/marked.ts\nvar markedInstance = new Marked();\nfunction marked(src, opt) {\n return markedInstance.parse(src, opt);\n}\nmarked.options = marked.setOptions = function(options2) {\n markedInstance.setOptions(options2);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\nmarked.getDefaults = _getDefaults;\nmarked.defaults = _defaults;\nmarked.use = function(...args) {\n markedInstance.use(...args);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\nmarked.walkTokens = function(tokens, callback) {\n return markedInstance.walkTokens(tokens, callback);\n};\nmarked.parseInline = markedInstance.parseInline;\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\nvar options = marked.options;\nvar setOptions = marked.setOptions;\nvar use = marked.use;\nvar walkTokens = marked.walkTokens;\nvar parseInline = marked.parseInline;\nvar parse = marked;\nvar parser = _Parser.parse;\nvar lexer = _Lexer.lex;\nexport {\n _Hooks as Hooks,\n _Lexer as Lexer,\n Marked,\n _Parser as Parser,\n _Renderer as Renderer,\n _TextRenderer as TextRenderer,\n _Tokenizer as Tokenizer,\n _defaults as defaults,\n _getDefaults as getDefaults,\n lexer,\n marked,\n options,\n parse,\n parseInline,\n parser,\n setOptions,\n use,\n walkTokens\n};\n//# sourceMappingURL=marked.esm.js.map\n","import { marked, type Tokens } from 'marked';\nimport React, { memo, useMemo, useEffect, useRef } from 'react';\n\n// escape html special chars for safe insertion into pre/code blocks\nfunction escapeHtml(html: string): string {\n return html\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n}\n\nconst renderer = new marked.Renderer();\n\nrenderer.code = ({ text, lang = '', escaped }: Tokens.Code): string => {\n const languageClass = lang ? `language-${lang}` : '';\n const safeCode = escaped ? text : escapeHtml(text);\n const encodedCode = encodeURIComponent(text);\n\n // svg icons (copy & check)\n const copyIconSvg = `<svg class=\"DocSearch-CodeSnippet-CopyIcon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\" /><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" /></svg>`;\n\n const checkIconSvg = `<svg class=\"DocSearch-CodeSnippet-CheckIcon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20 6 9 17l-5-5\" /></svg>`;\n\n return `\n <div class=\"DocSearch-CodeSnippet\">\n <button class=\"DocSearch-CodeSnippet-CopyButton\" data-code=\"${encodedCode}\" aria-label=\"copy code\">${copyIconSvg}${checkIconSvg}<span class=\"DocSearch-CodeSnippet-CopyButton-Label\"></span></button>\n <pre><code class=\"${languageClass}\">${safeCode}</code></pre>\n </div>\n `;\n};\n\n// ensure all markdown links open in a new tab with rel noopener for security\nrenderer.link = ({ href, title, text }: Tokens.Link): string => {\n const titleAttr = title ? ` title=\"${escapeHtml(title)}\"` : '';\n const hrefAttr = href ? escapeHtml(href) : '';\n const textEscaped = escapeHtml(text);\n return `<a href=\"${hrefAttr}\"${titleAttr} target=\"_blank\" rel=\"noopener noreferrer\">${textEscaped}</a>`;\n};\n\nexport const MemoizedMarkdown = memo(\n ({\n content,\n copyButtonText,\n copyButtonCopiedText,\n isStreaming,\n }: {\n content: string;\n copyButtonText: string;\n copyButtonCopiedText: string;\n isStreaming: boolean;\n }) => {\n const html = useMemo(\n () =>\n marked.parse(content, {\n gfm: true,\n breaks: true,\n renderer,\n }),\n [content],\n );\n\n // container ref to scope dom queries and events\n const containerRef = useRef<HTMLDivElement>(null);\n\n // setup copy buttons whenever content or translations change\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const buttons = Array.from(container.querySelectorAll<HTMLButtonElement>('.DocSearch-CodeSnippet-CopyButton'));\n\n buttons.forEach((btn) => {\n const label = btn.querySelector<HTMLElement>('.DocSearch-CodeSnippet-CopyButton-Label');\n if (label) label.textContent = copyButtonText;\n\n // ensure icons initial visibility\n btn.classList.remove('DocSearch-CodeSnippet-CopyButton--copied');\n });\n\n function handleClick(event: MouseEvent): void {\n const targetEl = event.target as HTMLElement;\n const btn = targetEl.closest<HTMLButtonElement>('.DocSearch-CodeSnippet-CopyButton');\n if (!btn) return;\n\n const encoded = btn.getAttribute('data-code') ?? '';\n navigator.clipboard.writeText(decodeURIComponent(encoded)).catch(() => {\n /* noop */\n });\n\n const label = btn.querySelector<HTMLElement>('.DocSearch-CodeSnippet-CopyButton-Label');\n if (!label) return;\n\n btn.classList.add('DocSearch-CodeSnippet-CopyButton--copied');\n const original = copyButtonText;\n label.textContent = copyButtonCopiedText;\n\n setTimeout(() => {\n btn.classList.remove('DocSearch-CodeSnippet-CopyButton--copied');\n label.textContent = original;\n }, 1500);\n }\n\n container.addEventListener('click', handleClick);\n\n // eslint-disable-next-line consistent-return\n return (): void => {\n container.removeEventListener('click', handleClick);\n };\n }, [html, copyButtonText, copyButtonCopiedText]);\n\n return (\n <div\n ref={containerRef}\n className={`DocSearch-Markdown-Content ${isStreaming ? 'DocSearch-Markdown-Content--streaming' : ''}`}\n dangerouslySetInnerHTML={{ __html: html }}\n />\n );\n },\n);\nMemoizedMarkdown.displayName = 'MemoizedMarkdown';\n","import type { UseChatHelpers } from '@ai-sdk/react';\nimport React, { type JSX, useState, useEffect, useMemo } from 'react';\n\nimport { AggregatedSearchBlock } from './AggregatedSearchBlock';\nimport { AlertIcon, LoadingIcon, SearchIcon } from './icons';\nimport { MemoizedMarkdown } from './MemoizedMarkdown';\nimport type { ScreenStateProps } from './ScreenState';\nimport type { StoredSearchPlugin } from './stored-searches';\nimport type { InternalDocSearchHit, StoredAskAiState } from './types';\nimport { extractLinksFromText } from './utils/ai';\nimport { groupConsecutiveToolResults } from './utils/groupConsecutiveToolResults';\n\nexport type AskAiScreenTranslations = Partial<{\n // Misc texts\n disclaimerText: string;\n relatedSourcesText: string;\n thinkingText: string;\n copyButtonText: string;\n copyButtonCopiedText: string;\n // Feedback buttons\n copyButtonTitle: string;\n likeButtonTitle: string;\n dislikeButtonTitle: string;\n thanksForFeedbackText: string;\n // Tool call texts\n preToolCallText: string;\n duringToolCallText: string;\n afterToolCallText: string;\n /**\n * Build the full jsx element for the aggregated search block.\n * If provided, completely overrides the default english renderer.\n */\n aggregatedToolCallNode?: (queries: string[], onSearchQueryClick: (query: string) => void) => React.ReactNode;\n\n /**\n * Generate the list connective parts only (backwards compatibility).\n * Receives full list of queries and should return translation parts for before/after/separators.\n * Example: (qs) => ({ before: 'searched for ', separator: ', ', lastSeparator: ' and ', after: '' }).\n */\n aggregatedToolCallText?: (queries: string[]) => {\n before?: string;\n separator?: string;\n lastSeparator?: string;\n after?: string;\n };\n}>;\n\ntype AskAiScreenProps = Omit<ScreenStateProps<InternalDocSearchHit>, 'translations'> & {\n messages: UseChatHelpers['messages'];\n status: UseChatHelpers['status'];\n askAiStreamError: Error | null;\n askAiFetchError: Error | undefined;\n translations?: AskAiScreenTranslations;\n};\n\ninterface AskAiScreenHeaderProps {\n disclaimerText: string;\n}\n\ninterface Exchange {\n id: string;\n userMessage: UseChatHelpers['messages'][number];\n assistantMessage: UseChatHelpers['messages'][number] | null;\n}\n\nfunction AskAiScreenHeader({ disclaimerText }: AskAiScreenHeaderProps): JSX.Element {\n return <p className=\"DocSearch-AskAiScreen-Disclaimer\">{disclaimerText}</p>;\n}\n\ninterface AskAiExchangeCardProps {\n exchange: Exchange;\n askAiStreamError: Error | null;\n isLastExchange: boolean;\n loadingStatus: UseChatHelpers['status'];\n onSearchQueryClick: (query: string) => void;\n translations: AskAiScreenTranslations;\n conversations: StoredSearchPlugin<StoredAskAiState>;\n onFeedback?: (messageId: string, thumbs: 0 | 1) => Promise<void>;\n}\n\nfunction AskAiExchangeCard({\n exchange,\n askAiStreamError,\n isLastExchange,\n loadingStatus,\n onSearchQueryClick,\n translations,\n conversations,\n onFeedback,\n}: AskAiExchangeCardProps): JSX.Element {\n const { userMessage, assistantMessage } = exchange;\n\n const showActions = !isLastExchange || (isLastExchange && loadingStatus === 'ready' && Boolean(assistantMessage));\n\n const urlsToDisplay = React.useMemo(() => extractLinksFromText(assistantMessage?.content || ''), [assistantMessage]);\n\n const displayParts = React.useMemo(() => {\n if (!Array.isArray(assistantMessage?.parts)) {\n return assistantMessage?.content ? [assistantMessage?.content] : [];\n }\n return groupConsecutiveToolResults(assistantMessage?.parts || []);\n }, [assistantMessage]);\n\n return (\n <div className=\"DocSearch-AskAiScreen-Response-Container\">\n <div className=\"DocSearch-AskAiScreen-Response\">\n <div className=\"DocSearch-AskAiScreen-Message DocSearch-AskAiScreen-Message--user\">\n <p className=\"DocSearch-AskAiScreen-Query\">{userMessage.content}</p>\n </div>\n <div className=\"DocSearch-AskAiScreen-Message DocSearch-AskAiScreen-Message--assistant\">\n <div className=\"DocSearch-AskAiScreen-MessageContent\">\n {loadingStatus === 'error' && askAiStreamError && isLastExchange && (\n <div className=\"DocSearch-AskAiScreen-MessageContent DocSearch-AskAiScreen-Error\">\n <AlertIcon />\n <p>{askAiStreamError.message}</p>\n </div>\n )}\n {loadingStatus === 'submitted' && isLastExchange && (\n <div className=\"DocSearch-AskAiScreen-MessageContent-Reasoning\">\n <span className=\"shimmer\">{translations.thinkingText || 'Thinking...'}</span>\n </div>\n )}\n {Array.isArray(displayParts)\n ? displayParts.map((part, idx) => {\n const index = idx;\n\n if (typeof part === 'string') {\n return (\n <MemoizedMarkdown\n key={index}\n content={part}\n copyButtonText={translations.copyButtonText || 'Copy'}\n copyButtonCopiedText={translations.copyButtonCopiedText || 'Copied!'}\n isStreaming={loadingStatus === 'streaming'}\n />\n );\n }\n\n // aggregated tool call rendering\n if (part && (part as any).type === 'aggregated-tool-call') {\n return (\n <AggregatedSearchBlock\n key={index}\n queries={(part as any).queries}\n translations={translations}\n onSearchQueryClick={onSearchQueryClick}\n />\n );\n }\n\n if (part.type === 'reasoning' && assistantMessage?.parts?.length === 1) {\n return (\n <div key={index} className=\"DocSearch-AskAiScreen-MessageContent-Reasoning shimmer\">\n <span className=\"shimmer\">Reasoning...</span>\n </div>\n );\n }\n\n if (part.type === 'text') {\n return (\n <MemoizedMarkdown\n key={index}\n content={part.text}\n copyButtonText={translations.copyButtonText || 'Copy'}\n copyButtonCopiedText={translations.copyButtonCopiedText || 'Copied!'}\n isStreaming={loadingStatus === 'streaming'}\n />\n );\n }\n if (part.type === 'tool-invocation') {\n const { toolInvocation } = part;\n if (toolInvocation.toolName === 'searchIndex') {\n switch (toolInvocation.state) {\n case 'partial-call':\n return (\n <div\n key={index}\n className=\"DocSearch-AskAiScreen-MessageContent-Tool Tool--PartialCall shimmer\"\n >\n <LoadingIcon className=\"DocSearch-AskAiScreen-SmallerLoadingIcon\" />\n <span>{translations.preToolCallText || 'Searching...'}</span>\n </div>\n );\n case 'call':\n return (\n <div key={index} className=\"DocSearch-AskAiScreen-MessageContent-Tool Tool--Call shimmer\">\n <LoadingIcon className=\"DocSearch-AskAiScreen-SmallerLoadingIcon\" />\n <span>\n {`${translations.duringToolCallText || 'Searching for '} \"${toolInvocation.args?.query || ''}\" ...`}\n </span>\n </div>\n );\n case 'result':\n return (\n <div key={index} className=\"DocSearch-AskAiScreen-MessageContent-Tool Tool--Result\">\n <SearchIcon size={18} />\n <span>\n {`${translations.afterToolCallText || 'Searched for'}`}{' '}\n <span\n role=\"button\"\n tabIndex={0}\n className=\"DocSearch-AskAiScreen-MessageContent-Tool-Query\"\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onSearchQueryClick(toolInvocation.args?.query || '');\n }\n }}\n onClick={() => onSearchQueryClick(toolInvocation.args?.query || '')}\n >\n {' '}\n &quot;{toolInvocation.args?.query || ''}&quot;\n </span>\n </span>\n </div>\n );\n default:\n return null;\n }\n }\n // fallback for unknown tool, should never happen in theory. :shrug:\n return (\n <span key={index} className=\"text-sm italic shimmer\">\n {translations.thinkingText || 'Thinking...'}\n </span>\n );\n }\n // fallback for unknown part type\n return null;\n })\n : assistantMessage?.content}\n </div>\n </div>\n <div className=\"DocSearch-AskAiScreen-Answer-Footer\">\n <AskAiScreenFooterActions\n id={userMessage?.id || exchange.id}\n showActions={showActions}\n latestAssistantMessageContent={assistantMessage?.content || null}\n translations={translations}\n conversations={conversations}\n onFeedback={onFeedback}\n />\n </div>\n </div>\n\n {/* Sources for this exchange */}\n {urlsToDisplay.length > 0 ? (\n <AskAiSourcesPanel urlsToDisplay={urlsToDisplay} relatedSourcesText={translations.relatedSourcesText} />\n ) : null}\n </div>\n );\n}\n\ninterface AskAiScreenFooterActionsProps {\n id: string;\n showActions: boolean;\n latestAssistantMessageContent: string | null;\n translations: AskAiScreenTranslations;\n conversations: StoredSearchPlugin<StoredAskAiState>;\n onFeedback?: (messageId: string, thumbs: 0 | 1) => Promise<void>;\n}\n\nfunction AskAiScreenFooterActions({\n id,\n showActions,\n latestAssistantMessageContent,\n translations,\n conversations,\n onFeedback,\n}: AskAiScreenFooterActionsProps): JSX.Element | null {\n // local state for feedback, initialised from stored conversations\n const initialFeedback = React.useMemo(() => {\n const message = conversations.getOne?.(id);\n return message?.feedback ?? null;\n }, [conversations, id]);\n\n const [feedback, setFeedback] = React.useState<'dislike' | 'like' | null>(initialFeedback);\n const [saving, setSaving] = React.useState(false);\n const [savingError, setSavingError] = React.useState<Error | null>(null);\n\n const handleFeedback = async (value: 'dislike' | 'like'): Promise<void> => {\n if (saving) return;\n setSavingError(null);\n setSaving(true);\n try {\n await onFeedback?.(id, value === 'like' ? 1 : 0);\n setFeedback(value);\n } catch (error) {\n setSavingError(error as Error);\n } finally {\n setSaving(false);\n }\n };\n\n const {\n likeButtonTitle = 'Like',\n dislikeButtonTitle = 'Dislike',\n thanksForFeedbackText = 'Thanks for your feedback!',\n } = translations;\n\n if (!showActions || !latestAssistantMessageContent) {\n return null;\n }\n\n return (\n <div className=\"DocSearch-AskAiScreen-Actions\">\n {feedback === null ? (\n <>\n {saving ? (\n <LoadingIcon className=\"DocSearch-AskAiScreen-SmallerLoadingIcon\" />\n ) : (\n <>\n <LikeButton title={likeButtonTitle} onClick={() => handleFeedback('like')} />\n <DislikeButton title={dislikeButtonTitle} onClick={() => handleFeedback('dislike')} />\n </>\n )}\n {savingError && (\n <p className=\"DocSearch-AskAiScreen-FeedbackText\">{savingError.message || 'An error occured'}</p>\n )}\n </>\n ) : (\n <p className=\"DocSearch-AskAiScreen-FeedbackText DocSearch-AskAiScreen-FeedbackText--visible\">\n {thanksForFeedbackText}\n </p>\n )}\n <CopyButton\n translations={translations}\n onClick={() => navigator.clipboard.writeText(latestAssistantMessageContent)}\n />\n </div>\n );\n}\n\ninterface AskAiSourcesPanelProps {\n urlsToDisplay: Array<{ url: string; title?: string }>;\n relatedSourcesText?: string;\n}\n\nfunction AskAiSourcesPanel({ urlsToDisplay, relatedSourcesText }: AskAiSourcesPanelProps): JSX.Element {\n return (\n <div className=\"DocSearch-AskAiScreen-RelatedSources\">\n <p className=\"DocSearch-AskAiScreen-RelatedSources-Title\">{relatedSourcesText || 'Related sources'}</p>\n <div className=\"DocSearch-AskAiScreen-RelatedSources-List\">\n {urlsToDisplay.length > 0 &&\n urlsToDisplay.map((link) => (\n <a\n key={link.url}\n href={link.url}\n className=\"DocSearch-AskAiScreen-RelatedSources-Item-Link\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <RelatedSourceIcon />\n <span>{link.title || link.url}</span>\n </a>\n ))}\n </div>\n </div>\n );\n}\n\nexport function AskAiScreen({ translations = {}, ...props }: AskAiScreenProps): JSX.Element | null {\n const { disclaimerText = 'Answers are generated with AI which can make mistakes. Verify responses.' } = translations;\n\n const { messages } = props;\n\n // Group messages into exchanges (user + assistant pairs)\n const exchanges: Exchange[] = useMemo(() => {\n const grouped: Exchange[] = [];\n for (let i = 0; i < messages.length; i++) {\n if (messages[i].role === 'user') {\n const userMessage = messages[i];\n const assistantMessage = messages[i + 1]?.role === 'assistant' ? messages[i + 1] : null;\n grouped.push({ id: userMessage.id, userMessage, assistantMessage });\n if (assistantMessage) {\n i++;\n }\n }\n }\n return grouped;\n }, [messages]);\n\n const handleSearchQueryClick = (query: string): void => {\n props.onAskAiToggle(false);\n props.setQuery(query);\n };\n\n return (\n <div className=\"DocSearch-AskAiScreen DocSearch-AskAiScreen-Container\">\n <AskAiScreenHeader disclaimerText={disclaimerText} />\n <div className=\"DocSearch-AskAiScreen-Body\">\n <div className=\"DocSearch-AskAiScreen-ExchangesList\">\n {exchanges\n .slice()\n .reverse()\n .map((exchange, index) => (\n <AskAiExchangeCard\n key={exchange.id}\n exchange={exchange}\n askAiStreamError={props.askAiStreamError}\n isLastExchange={index === 0}\n loadingStatus={props.status}\n translations={translations}\n conversations={props.conversations}\n onSearchQueryClick={handleSearchQueryClick}\n onFeedback={props.onFeedback}\n />\n ))}\n </div>\n </div>\n </div>\n );\n}\n\nfunction RelatedSourceIcon(): JSX.Element {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"4\" x2=\"20\" y1=\"9\" y2=\"9\" />\n <line x1=\"4\" x2=\"20\" y1=\"15\" y2=\"15\" />\n <line x1=\"10\" x2=\"8\" y1=\"3\" y2=\"21\" />\n <line x1=\"16\" x2=\"14\" y1=\"3\" y2=\"21\" />\n </svg>\n );\n}\n\nfunction CopyButton({\n onClick,\n translations,\n}: {\n onClick: () => void;\n translations: AskAiScreenTranslations;\n}): JSX.Element {\n const { copyButtonTitle = 'Copy', copyButtonCopiedText = 'Copied!' } = translations;\n\n const [isCopied, setIsCopied] = useState(false);\n\n useEffect(() => {\n if (isCopied) {\n const timer = setTimeout(() => {\n setIsCopied(false);\n }, 1500); // reset after 1.5 seconds\n return (): void => clearTimeout(timer);\n }\n return undefined;\n }, [isCopied]);\n\n const handleClick = (): void => {\n onClick();\n setIsCopied(true);\n };\n\n return (\n <button\n type=\"button\"\n className={`DocSearch-AskAiScreen-ActionButton DocSearch-AskAiScreen-CopyButton ${\n isCopied ? 'DocSearch-AskAiScreen-CopyButton--copied' : ''\n }`}\n disabled={isCopied} // disable button briefly after copy\n title={isCopied ? copyButtonCopiedText : copyButtonTitle}\n onClick={handleClick}\n >\n {isCopied ? (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-check-icon lucide-check\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n ) : (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-copy-icon lucide-copy\"\n >\n <rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\" />\n <path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" />\n </svg>\n )}\n </button>\n );\n}\n\nfunction LikeButton({ title, onClick }: { title: string; onClick: () => void }): JSX.Element {\n // @todo: implement like button\n return (\n <button\n type=\"button\"\n className=\"DocSearch-AskAiScreen-ActionButton DocSearch-AskAiScreen-LikeButton\"\n title={title}\n onClick={onClick}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-thumbs-up-icon lucide-thumbs-up\"\n >\n <path d=\"M7 10v12\" />\n <path d=\"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z\" />\n </svg>\n </button>\n );\n}\n\nfunction DislikeButton({ title, onClick }: { title: string; onClick: () => void }): JSX.Element {\n // @todo: implement dislike button\n return (\n <button\n type=\"button\"\n className=\"DocSearch-AskAiScreen-ActionButton DocSearch-AskAiScreen-DislikeButton\"\n title={title}\n onClick={onClick}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-thumbs-down-icon lucide-thumbs-down\"\n >\n <path d=\"M17 14V2\" />\n <path d=\"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z\" />\n </svg>\n </button>\n );\n}\n","import type { Message } from '@ai-sdk/react';\n\nimport type { StoredAskAiState } from '../types';\n\n// utility to extract links (markdown and bare urls) from a string\nexport function extractLinksFromText(text: string): Array<{ url: string; title?: string }> {\n // match [title](url) and bare urls\n const markdownLinkRegex = /\\[([^\\]]+)\\]\\((https?:\\/\\/[^\\s)]+)\\)/g;\n const urlRegex = /https?:\\/\\/[^\\s)]+/g;\n const links: Array<{ url: string; title?: string }> = [];\n const seen = new Set<string>();\n\n // extract markdown links first\n let match;\n while ((match = markdownLinkRegex.exec(text)) !== null) {\n let url = match[2];\n const title = match[1];\n // trim trailing punctuation\n url = url.replace(/[).,;!?]+$/, '');\n if (!seen.has(url)) {\n links.push({ url, title });\n seen.add(url);\n }\n }\n\n // extract bare urls\n while ((match = urlRegex.exec(text)) !== null) {\n let url = match[0];\n url = url.replace(/[).,;!?]+$/, '');\n if (!seen.has(url)) {\n links.push({ url });\n seen.add(url);\n }\n }\n\n return links;\n}\n\nexport const buildDummyAskAiHit = (query: string, messages: Message[]): StoredAskAiState => ({\n query,\n objectID: messages[0].content,\n messages,\n type: 'askAI',\n anchor: 'stored',\n\n // dummy content to make it a valid hit\n // this is useful to show it among other hits\n content: null,\n hierarchy: {\n lvl0: 'askAI',\n lvl1: messages[0].content, // use first message as hit name\n lvl2: null,\n lvl3: null,\n lvl4: null,\n lvl5: null,\n lvl6: null,\n },\n url: '',\n url_without_anchor: '',\n});\n","export interface AggregatedToolCallPart {\n type: 'aggregated-tool-call';\n queries: string[];\n}\n\n/**\n * Groups consecutive `searchIndex` tool invocation result parts together.\n * Empty or falsy queries are ignored.\n */\nexport function groupConsecutiveToolResults<T extends { type: string }>(parts: T[]): Array<AggregatedToolCallPart | T> {\n const aggregatedParts: Array<AggregatedToolCallPart | T> = [];\n\n for (let i = 0; i < parts.length; i++) {\n const part: any = parts[i];\n\n if (\n part?.type === 'tool-invocation' &&\n part.toolInvocation?.toolName === 'searchIndex' &&\n part.toolInvocation?.state === 'result'\n ) {\n // build list of consecutive result queries\n const queries: string[] = [];\n let j = i;\n while (j < parts.length) {\n const candidate: any = parts[j];\n if (\n candidate?.type === 'tool-invocation' &&\n candidate.toolInvocation?.toolName === 'searchIndex' &&\n candidate.toolInvocation?.state === 'result'\n ) {\n const q = (candidate.toolInvocation?.args?.query || '').trim();\n // eslint-disable-next-line max-depth\n if (q) {\n queries.push(q);\n }\n j++;\n } else {\n break;\n }\n }\n\n if (queries.length > 1) {\n aggregatedParts.push({ type: 'aggregated-tool-call', queries });\n } else if (queries.length === 1) {\n // only one valid query, push the original part so rendering remains unchanged\n aggregatedParts.push(part);\n }\n\n i = j - 1; // skip processed items\n } else {\n aggregatedParts.push(part);\n }\n }\n\n return aggregatedParts;\n}\n","import React, { type JSX } from 'react';\n\nimport { ErrorIcon } from './icons';\n\nexport type ErrorScreenTranslations = Partial<{\n titleText: string;\n helpText: string;\n}>;\n\ntype ErrorScreenProps = {\n translations?: ErrorScreenTranslations;\n};\n\nexport function ErrorScreen({ translations = {} }: ErrorScreenProps): JSX.Element {\n const { titleText = 'Unable to fetch results', helpText = 'You might want to check your network connection.' } =\n translations;\n return (\n <div className=\"DocSearch-ErrorScreen\">\n <div className=\"DocSearch-Screen-Icon\">\n <ErrorIcon />\n </div>\n <p className=\"DocSearch-Title\">{titleText}</p>\n <p className=\"DocSearch-Help\">{helpText}</p>\n </div>\n );\n}\n","import React, { type JSX } from 'react';\n\nimport { NoResultsIcon, SearchIcon } from './icons';\nimport type { ScreenStateProps } from './ScreenState';\nimport type { InternalDocSearchHit } from './types';\n\nexport type NoResultsScreenTranslations = Partial<{\n noResultsText: string;\n suggestedQueryText: string;\n reportMissingResultsText: string;\n reportMissingResultsLinkText: string;\n}>;\n\ntype NoResultsScreenProps = Omit<ScreenStateProps<InternalDocSearchHit>, 'translations'> & {\n translations?: NoResultsScreenTranslations;\n};\n\nexport function NoResultsScreen({ translations = {}, ...props }: NoResultsScreenProps): JSX.Element {\n const {\n noResultsText = 'No results found for',\n suggestedQueryText = 'Try searching for',\n reportMissingResultsText = 'Believe this query should return results?',\n reportMissingResultsLinkText = 'Let us know.',\n } = translations;\n const searchSuggestions: string[] | undefined = props.state.context.searchSuggestions as string[];\n\n return (\n <div className={`DocSearch-NoResults ${props.canHandleAskAi ? 'DocSearch-NoResults--withAskAi' : ''}`}>\n <div className=\"DocSearch-Screen-Icon\">\n <NoResultsIcon />\n </div>\n <p className=\"DocSearch-Title\">\n {noResultsText} \"<strong>{props.state.query}</strong>\"\n </p>\n\n {searchSuggestions && searchSuggestions.length > 0 && (\n <div className=\"DocSearch-NoResults-Prefill-List\">\n <p className=\"DocSearch-Help\">{suggestedQueryText}:</p>\n <div className=\"DocSearch-NoResults-Prefill-List-Items\">\n {searchSuggestions.slice(0, 3).reduce<React.ReactNode[]>(\n (acc, search) => [\n ...acc,\n <p key={search}>\n <SearchIcon size={16} />\n <button\n className=\"DocSearch-Prefill\"\n key={search}\n type=\"button\"\n onClick={() => {\n props.setQuery(search.toLowerCase() + ' ');\n props.refresh();\n props.inputRef.current!.focus();\n }}\n >\n {search}\n </button>\n </p>,\n ],\n [],\n )}\n </div>\n </div>\n )}\n\n {props.getMissingResultsUrl && (\n <p className=\"DocSearch-Help\">\n {`${reportMissingResultsText} `}\n <a href={props.getMissingResultsUrl({ query: props.state.query })} target=\"_blank\" rel=\"noopener noreferrer\">\n {reportMissingResultsLinkText}\n </a>\n </p>\n )}\n </div>\n );\n}\n","import { type JSX, createElement } from 'react';\n\nimport type { StoredDocSearchHit } from './types';\n\nfunction getPropertyByPath(object: Record<string, any>, path: string): any {\n const parts = path.split('.');\n\n return parts.reduce((prev, current) => {\n if (prev?.[current]) return prev[current];\n return null;\n }, object);\n}\n\ninterface SnippetProps<TItem> {\n hit: TItem;\n attribute: string;\n tagName?: string;\n [prop: string]: unknown;\n}\n\nexport function Snippet<TItem extends StoredDocSearchHit>({\n hit,\n attribute,\n tagName = 'span',\n ...rest\n}: SnippetProps<TItem>): JSX.Element {\n return createElement(tagName, {\n ...rest,\n dangerouslySetInnerHTML: {\n __html: getPropertyByPath(hit, `_snippetResult.${attribute}.value`) || getPropertyByPath(hit, attribute),\n },\n });\n}\n","import type { AutocompleteApi, AutocompleteState, BaseItem } from '@algolia/autocomplete-core';\nimport React, { type JSX } from 'react';\n\nimport type { DocSearchProps } from './DocSearch';\nimport { SparklesIcon } from './icons/SparklesIcon';\nimport { Snippet } from './Snippet';\nimport type { InternalDocSearchHit, StoredDocSearchHit } from './types';\n\nexport type ResultsTranslations = Partial<{\n askAiPlaceholder: string;\n}>;\ninterface ResultsProps<TItem extends BaseItem>\n extends AutocompleteApi<TItem, React.FormEvent, React.MouseEvent, React.KeyboardEvent> {\n title: string;\n translations?: ResultsTranslations;\n collection: AutocompleteState<TItem>['collections'][0];\n renderIcon: (props: { item: TItem; index: number }) => React.ReactNode;\n renderAction: (props: {\n item: TItem;\n runDeleteTransition: (cb: () => void) => void;\n runFavoriteTransition: (cb: () => void) => void;\n }) => React.ReactNode;\n onItemClick: (item: TItem, event: KeyboardEvent | MouseEvent) => void;\n hitComponent: DocSearchProps['hitComponent'];\n}\n\nexport function Results<TItem extends StoredDocSearchHit>(props: ResultsProps<TItem>): JSX.Element | null {\n if (!props.collection || props.collection.items.length === 0) {\n return null;\n }\n\n if (props.collection.source.sourceId === 'askAI') {\n return (\n <section className=\"DocSearch-AskAi-Section\">\n <ul {...props.getListProps({ source: props.collection.source })}>\n <AskAiButton item={props.collection.items[0]} translations={props.translations} {...props} />\n </ul>\n </section>\n );\n }\n\n if (props.collection.source.sourceId === 'recentConversations') {\n return (\n <section className=\"DocSearch-Hits\">\n <div className=\"DocSearch-Hit-source\">{props.title}</div>\n <ul {...props.getListProps({ source: props.collection.source })}>\n {props.collection.items.map((item, index) => {\n return <Result key={[props.title, item.objectID].join(':')} item={item} index={index} {...props} />;\n })}\n </ul>\n </section>\n );\n }\n\n return (\n <section className=\"DocSearch-Hits\">\n <div className=\"DocSearch-Hit-source\">{props.title}</div>\n\n <ul {...props.getListProps({ source: props.collection.source })}>\n {props.collection.items.map((item, index) => {\n return <Result key={[props.title, item.objectID].join(':')} item={item} index={index} {...props} />;\n })}\n </ul>\n </section>\n );\n}\n\ninterface ResultProps<TItem extends BaseItem> extends ResultsProps<TItem> {\n item: TItem;\n index: number;\n}\n\nfunction Result<TItem extends StoredDocSearchHit>({\n item,\n index,\n renderIcon,\n renderAction,\n getItemProps,\n onItemClick,\n collection,\n hitComponent,\n}: ResultProps<TItem>): JSX.Element {\n const [status, setStatus] = React.useState<'deleting' | 'favoriting' | 'idle'>('idle');\n\n const actionRef = React.useRef<(() => void) | null>(null);\n const Hit = hitComponent!;\n\n const runDeleteTransition = (cb: () => void): void => {\n setStatus('deleting');\n actionRef.current = cb;\n };\n\n const runFavoriteTransition = (cb: () => void): void => {\n setStatus('favoriting');\n actionRef.current = cb;\n };\n\n const handleAnimEnd = (): void => {\n actionRef.current?.();\n actionRef.current = null;\n };\n\n return (\n <li\n className={[\n 'DocSearch-Hit',\n (item as unknown as InternalDocSearchHit).__docsearch_parent && 'DocSearch-Hit--Child',\n status === 'favoriting' && 'DocSearch-Hit--favoriting',\n status === 'deleting' && 'DocSearch-Hit--deleting',\n ]\n .filter(Boolean)\n .join(' ')}\n onAnimationEnd={handleAnimEnd}\n {...getItemProps({\n item,\n source: collection.source,\n onClick(event) {\n onItemClick(item, event);\n },\n })}\n >\n <Hit hit={item}>\n <div className=\"DocSearch-Hit-Container\">\n {renderIcon({ item, index })}\n\n {item.hierarchy[item.type] && item.type === 'lvl1' && (\n <div className=\"DocSearch-Hit-content-wrapper\">\n <Snippet className=\"DocSearch-Hit-title\" hit={item} attribute=\"hierarchy.lvl1\" />\n {item.content && <Snippet className=\"DocSearch-Hit-path\" hit={item} attribute=\"content\" />}\n </div>\n )}\n\n {item.type === 'askAI' && (\n <div className=\"DocSearch-Hit-content-wrapper\">\n <Snippet className=\"DocSearch-Hit-title\" hit={item} attribute=\"hierarchy.lvl1\" />\n </div>\n )}\n\n {item.hierarchy[item.type] &&\n (item.type === 'lvl2' ||\n item.type === 'lvl3' ||\n item.type === 'lvl4' ||\n item.type === 'lvl5' ||\n item.type === 'lvl6') && (\n <div className=\"DocSearch-Hit-content-wrapper\">\n <Snippet className=\"DocSearch-Hit-title\" hit={item} attribute={`hierarchy.${item.type}`} />\n <Snippet className=\"DocSearch-Hit-path\" hit={item} attribute=\"hierarchy.lvl1\" />\n </div>\n )}\n\n {item.type === 'content' && (\n <div className=\"DocSearch-Hit-content-wrapper\">\n <Snippet className=\"DocSearch-Hit-title\" hit={item} attribute=\"content\" />\n <Snippet className=\"DocSearch-Hit-path\" hit={item} attribute=\"hierarchy.lvl1\" />\n </div>\n )}\n\n {renderAction({ item, runDeleteTransition, runFavoriteTransition })}\n </div>\n </Hit>\n </li>\n );\n}\n\ninterface AskAiButtonProps<TItem extends BaseItem> extends ResultsProps<TItem> {\n item: TItem;\n translations?: ResultsTranslations;\n}\n\nfunction AskAiButton<TItem extends StoredDocSearchHit>({\n item,\n getItemProps,\n onItemClick,\n translations,\n collection,\n}: AskAiButtonProps<TItem>): JSX.Element {\n const { askAiPlaceholder = 'Ask AI: ' } = translations || {};\n\n return (\n <li\n className=\"DocSearch-Hit\"\n {...getItemProps({\n item,\n source: collection.source,\n onClick(event) {\n onItemClick(item, event);\n },\n })}\n >\n <div className=\"DocSearch-Hit--AskAI\">\n <div className=\"DocSearch-Hit-AskAIButton DocSearch-Hit-Container\">\n <div className=\" DocSearch-Hit-AskAIButton-icon DocSearch-Hit-icon\">\n <SparklesIcon />\n </div>\n <div className=\"DocSearch-Hit-AskAIButton-title\">\n <span className=\"DocSearch-Hit-AskAIButton-title-highlight\">{askAiPlaceholder}</span>\n <mark className=\"DocSearch-Hit-AskAIButton-title-query\">{item.query || ''}</mark>\n </div>\n </div>\n </div>\n </li>\n );\n}\n","export function groupBy<TValue extends Record<string, unknown>>(\n values: TValue[],\n predicate: (value: TValue) => string,\n maxResultsPerGroup?: number,\n): Record<string, TValue[]> {\n return values.reduce<Record<string, TValue[]>>((acc, item) => {\n const key = predicate(item);\n\n if (!acc.hasOwnProperty(key)) {\n acc[key] = [];\n }\n\n // We limit each section to show 5 hits maximum.\n // This acts as a frontend alternative to `distinct`.\n if (acc[key].length < (maxResultsPerGroup || 5)) {\n acc[key].push(item);\n }\n\n return acc;\n }, {});\n}\n","export function identity<TParam>(x: TParam): TParam {\n return x;\n}\n","/**\n * Detect when an event is modified with a special key to let the browser\n * trigger its default behavior.\n */\nexport function isModifierEvent<TEvent extends KeyboardEvent | MouseEvent>(event: TEvent): boolean {\n const isMiddleClick = (event as MouseEvent).button === 1;\n\n return isMiddleClick || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;\n}\n","export function noop(..._args: any[]): void {}\n","import type { DocSearchHit, InternalDocSearchHit } from '../types';\n\nconst regexHighlightTags = /(<mark>|<\\/mark>)/g;\nconst regexHasHighlightTags = RegExp(regexHighlightTags.source);\n\nexport function removeHighlightTags(hit: DocSearchHit | InternalDocSearchHit): string {\n const internalDocSearchHit = hit as InternalDocSearchHit;\n\n if (!internalDocSearchHit.__docsearch_parent && !hit._highlightResult) {\n return hit.hierarchy.lvl0;\n }\n\n const lvl0 = internalDocSearchHit.__docsearch_parent\n ? internalDocSearchHit.__docsearch_parent?._highlightResult?.hierarchy?.lvl0\n : hit._highlightResult?.hierarchy?.lvl0;\n\n if (!lvl0) {\n return hit.hierarchy.lvl0;\n }\n\n return lvl0.value && regexHasHighlightTags.test(lvl0.value) ? lvl0.value.replace(regexHighlightTags, '') : lvl0.value;\n}\n","import React, { type JSX } from 'react';\n\nimport { SelectIcon, SourceIcon } from './icons';\nimport { Results } from './Results';\nimport type { ScreenStateProps } from './ScreenState';\nimport type { InternalDocSearchHit } from './types';\nimport { removeHighlightTags } from './utils';\n\nexport type ResultsScreenTranslations = Partial<{\n askAiPlaceholder: string;\n}>;\n\ntype ResultsScreenProps = Omit<ScreenStateProps<InternalDocSearchHit>, 'translations'> & {\n translations?: ResultsScreenTranslations;\n};\n\nexport function ResultsScreen({ translations = {}, ...props }: ResultsScreenProps): JSX.Element {\n return (\n <div className=\"DocSearch-Dropdown-Container\">\n {props.state.collections.map((collection) => {\n if (collection.items.length === 0) {\n return null;\n }\n\n const title = removeHighlightTags(collection.items[0]);\n\n return (\n <Results\n {...props}\n key={collection.source.sourceId}\n translations={translations}\n title={title}\n collection={collection}\n renderIcon={({ item, index }) => (\n <>\n {item.__docsearch_parent && (\n <svg className=\"DocSearch-Hit-Tree\" viewBox=\"0 0 24 54\">\n <g\n stroke=\"currentColor\"\n fill=\"none\"\n fillRule=\"evenodd\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n {item.__docsearch_parent !== collection.items[index + 1]?.__docsearch_parent ? (\n <path d=\"M8 6v21M20 27H8.3\" />\n ) : (\n <path d=\"M8 6v42M20 27H8.3\" />\n )}\n </g>\n </svg>\n )}\n\n <div className=\"DocSearch-Hit-icon\">\n <SourceIcon type={item.type} />\n </div>\n </>\n )}\n renderAction={() => (\n <div className=\"DocSearch-Hit-action\">\n <SelectIcon />\n </div>\n )}\n />\n );\n })}\n\n {props.resultsFooterComponent && (\n <section className=\"DocSearch-HitsFooter\">\n <props.resultsFooterComponent state={props.state} />\n </section>\n )}\n </div>\n );\n}\n","import React, { type JSX } from 'react';\n\nimport { RecentIcon, CloseIcon, StarIcon, SparklesIcon } from './icons';\nimport { Results } from './Results';\nimport type { ScreenStateProps } from './ScreenState';\nimport type { InternalDocSearchHit } from './types';\n\nexport type StartScreenTranslations = Partial<{\n recentSearchesTitle: string;\n noRecentSearchesText: string;\n saveRecentSearchButtonTitle: string;\n removeRecentSearchButtonTitle: string;\n favoriteSearchesTitle: string;\n removeFavoriteSearchButtonTitle: string;\n recentConversationsTitle: string;\n removeRecentConversationButtonTitle: string;\n}>;\n\ntype StartScreenProps = Omit<ScreenStateProps<InternalDocSearchHit>, 'translations'> & {\n hasCollections: boolean;\n translations?: StartScreenTranslations;\n};\n\nexport function StartScreen({ translations = {}, ...props }: StartScreenProps): JSX.Element | null {\n const {\n recentSearchesTitle = 'Recent',\n saveRecentSearchButtonTitle = 'Save this search',\n removeRecentSearchButtonTitle = 'Remove this search from history',\n favoriteSearchesTitle = 'Favorite',\n removeFavoriteSearchButtonTitle = 'Remove this search from favorites',\n recentConversationsTitle = 'Recent conversations',\n removeRecentConversationButtonTitle = 'Remove this conversation from history',\n } = translations;\n\n return (\n <div className=\"DocSearch-Dropdown-Container\">\n <Results\n {...props}\n title={recentSearchesTitle}\n collection={props.state.collections[0]}\n renderIcon={() => (\n <div className=\"DocSearch-Hit-icon\">\n <RecentIcon />\n </div>\n )}\n renderAction={({ item, runFavoriteTransition, runDeleteTransition }) => (\n <>\n <div className=\"DocSearch-Hit-action\">\n <button\n className=\"DocSearch-Hit-action-button\"\n title={saveRecentSearchButtonTitle}\n type=\"submit\"\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n runFavoriteTransition(() => {\n props.favoriteSearches.add(item);\n props.recentSearches.remove(item);\n props.refresh();\n });\n }}\n >\n <StarIcon />\n </button>\n </div>\n <div className=\"DocSearch-Hit-action\">\n <button\n className=\"DocSearch-Hit-action-button\"\n title={removeRecentSearchButtonTitle}\n type=\"submit\"\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n runDeleteTransition(() => {\n props.recentSearches.remove(item);\n props.refresh();\n });\n }}\n >\n <CloseIcon />\n </button>\n </div>\n </>\n )}\n />\n\n <Results\n {...props}\n title={favoriteSearchesTitle}\n collection={props.state.collections[1]}\n renderIcon={() => (\n <div className=\"DocSearch-Hit-icon\">\n <StarIcon />\n </div>\n )}\n renderAction={({ item, runDeleteTransition }) => (\n <div className=\"DocSearch-Hit-action\">\n <button\n className=\"DocSearch-Hit-action-button\"\n title={removeFavoriteSearchButtonTitle}\n type=\"submit\"\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n runDeleteTransition(() => {\n props.favoriteSearches.remove(item);\n props.refresh();\n });\n }}\n >\n <CloseIcon />\n </button>\n </div>\n )}\n />\n\n <Results\n {...props}\n title={recentConversationsTitle}\n collection={props.state.collections[2]}\n renderIcon={() => (\n <div className=\"DocSearch-Hit-icon\">\n <SparklesIcon />\n </div>\n )}\n renderAction={({ item, runDeleteTransition }) => (\n <div className=\"DocSearch-Hit-action\">\n <button\n className=\"DocSearch-Hit-action-button\"\n title={removeRecentConversationButtonTitle}\n type=\"submit\"\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n runDeleteTransition(() => {\n props.conversations.remove(item);\n props.refresh();\n });\n }}\n >\n <CloseIcon />\n </button>\n </div>\n )}\n />\n </div>\n );\n}\n","import type { UseChatHelpers } from '@ai-sdk/react';\nimport type { AutocompleteApi, AutocompleteState, BaseItem } from '@algolia/autocomplete-core';\nimport React from 'react';\n\nimport type { AskAiScreenTranslations } from './AskAiScreen';\nimport { AskAiScreen } from './AskAiScreen';\nimport type { DocSearchProps } from './DocSearch';\nimport type { ErrorScreenTranslations } from './ErrorScreen';\nimport { ErrorScreen } from './ErrorScreen';\nimport type { NoResultsScreenTranslations } from './NoResultsScreen';\nimport { NoResultsScreen } from './NoResultsScreen';\nimport type { ResultsScreenTranslations } from './ResultsScreen';\nimport { ResultsScreen } from './ResultsScreen';\nimport type { StartScreenTranslations } from './StartScreen';\nimport { StartScreen } from './StartScreen';\nimport type { StoredSearchPlugin } from './stored-searches';\nimport type { InternalDocSearchHit, StoredAskAiState, StoredDocSearchHit } from './types';\n\nexport type ScreenStateTranslations = Partial<{\n errorScreen: ErrorScreenTranslations;\n startScreen: StartScreenTranslations;\n noResultsScreen: NoResultsScreenTranslations;\n resultsScreen: ResultsScreenTranslations;\n askAiScreen: AskAiScreenTranslations;\n}>;\n\nexport interface ScreenStateProps<TItem extends BaseItem>\n extends AutocompleteApi<TItem, React.FormEvent, React.MouseEvent, React.KeyboardEvent> {\n state: AutocompleteState<TItem>;\n recentSearches: StoredSearchPlugin<StoredDocSearchHit>;\n favoriteSearches: StoredSearchPlugin<StoredDocSearchHit>;\n conversations: StoredSearchPlugin<StoredAskAiState>;\n onItemClick: (item: InternalDocSearchHit, event: KeyboardEvent | MouseEvent) => void;\n onAskAiToggle: (toggle: boolean) => void;\n isAskAiActive: boolean;\n canHandleAskAi: boolean;\n inputRef: React.MutableRefObject<HTMLInputElement | null>;\n hitComponent: DocSearchProps['hitComponent'];\n indexName: DocSearchProps['indexName'];\n messages: UseChatHelpers['messages'];\n status: UseChatHelpers['status'];\n askAiStreamError: Error | null;\n askAiFetchError: Error | undefined;\n disableUserPersonalization: boolean;\n resultsFooterComponent: DocSearchProps['resultsFooterComponent'];\n translations: ScreenStateTranslations;\n getMissingResultsUrl?: DocSearchProps['getMissingResultsUrl'];\n hasCollections: boolean;\n onFeedback?: (messageId: string, thumbs: 0 | 1) => Promise<void>;\n}\n\nexport const ScreenState = React.memo(\n ({ translations = {}, ...props }: ScreenStateProps<InternalDocSearchHit>) => {\n if (props.isAskAiActive && props.canHandleAskAi) {\n return (\n <AskAiScreen\n {...props}\n messages={props.messages}\n status={props.status}\n askAiStreamError={props.askAiStreamError}\n askAiFetchError={props.askAiFetchError}\n translations={translations?.askAiScreen}\n />\n );\n }\n\n if (props.state?.status === 'error') {\n return <ErrorScreen translations={translations?.errorScreen} />;\n }\n\n if (!props.state.query) {\n return <StartScreen {...props} hasCollections={props.hasCollections} translations={translations?.startScreen} />;\n }\n\n if (!props.hasCollections && !props.canHandleAskAi) {\n return <NoResultsScreen {...props} translations={translations?.noResultsScreen} />;\n }\n\n return (\n <>\n <ResultsScreen {...props} translations={translations?.resultsScreen} />\n {props.canHandleAskAi && props.state.collections.length === 1 && (\n // if there's one collection it is the ask ai action, show the no results screen\n <NoResultsScreen {...props} translations={translations?.noResultsScreen} />\n )}\n </>\n );\n },\n function areEqual(_prevProps, nextProps) {\n // We don't update the screen when Autocomplete is loading or stalled to\n // avoid UI flashes:\n // - Empty screen → Results screen\n // - NoResults screen → NoResults screen with another query\n return nextProps.state.status === 'loading' || nextProps.state.status === 'stalled';\n },\n);\n","import React, { type JSX } from 'react';\n\ninterface BackIconProps {\n size?: number;\n color?: string;\n}\n\nexport function BackIcon({ size = 20, color = 'currentColor' }: BackIconProps): JSX.Element {\n return (\n <svg\n width={size}\n height={size}\n className=\"DocSearch-Back-Icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={color}\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"m12 19-7-7 7-7\" />\n <path d=\"M19 12H5\" />\n </svg>\n );\n}\n","import type { UseChatHelpers } from '@ai-sdk/react';\nimport type { AutocompleteApi, AutocompleteState } from '@algolia/autocomplete-core';\nimport React, { type JSX, type RefObject } from 'react';\n\nimport { MAX_QUERY_SIZE } from './constants';\nimport { LoadingIcon, CloseIcon, SearchIcon, SparklesIcon } from './icons';\nimport { BackIcon } from './icons/BackIcon';\nimport type { InternalDocSearchHit } from './types';\n\nexport type SearchBoxTranslations = Partial<{\n clearButtonTitle: string;\n clearButtonAriaLabel: string;\n closeButtonText: string;\n closeButtonAriaLabel: string;\n placeholderText: string;\n placeholderTextAskAi: string;\n placeholderTextAskAiStreaming: string;\n enterKeyHint: string;\n enterKeyHintAskAi: string;\n searchInputLabel: string;\n backToKeywordSearchButtonText: string;\n backToKeywordSearchButtonAriaLabel: string;\n}>;\n\ninterface SearchBoxProps\n extends AutocompleteApi<InternalDocSearchHit, React.FormEvent, React.MouseEvent, React.KeyboardEvent> {\n state: AutocompleteState<InternalDocSearchHit>;\n autoFocus: boolean;\n inputRef: RefObject<HTMLInputElement | null>;\n onClose: () => void;\n onAskAiToggle: (toggle: boolean) => void;\n onAskAgain: (query: string) => void;\n placeholder: string;\n isAskAiActive: boolean;\n askAiStatus: UseChatHelpers['status'];\n isFromSelection: boolean;\n translations?: SearchBoxTranslations;\n}\n\nexport function SearchBox({ translations = {}, ...props }: SearchBoxProps): JSX.Element {\n const {\n clearButtonTitle = 'Clear',\n clearButtonAriaLabel = 'Clear the query',\n closeButtonText = 'Close',\n closeButtonAriaLabel = 'Close',\n searchInputLabel = 'Search',\n backToKeywordSearchButtonText = 'Back to keyword search',\n backToKeywordSearchButtonAriaLabel = 'Back to keyword search',\n placeholderTextAskAiStreaming = 'Answering...',\n } = translations;\n const { onReset } = props.getFormProps({\n inputElement: props.inputRef.current,\n });\n\n React.useEffect(() => {\n if (props.autoFocus && props.inputRef.current) {\n props.inputRef.current.focus();\n }\n }, [props.autoFocus, props.inputRef]);\n\n React.useEffect(() => {\n if (props.isFromSelection && props.inputRef.current) {\n props.inputRef.current.select();\n }\n }, [props.isFromSelection, props.inputRef]);\n\n const baseInputProps = props.getInputProps({\n inputElement: props.inputRef.current!,\n autoFocus: props.autoFocus,\n maxLength: MAX_QUERY_SIZE,\n });\n\n const blockedKeys = new Set(['ArrowUp', 'ArrowDown', 'Enter']);\n const origOnKeyDown = baseInputProps.onKeyDown;\n const origOnChange = baseInputProps.onChange;\n const isAskAiStreaming = props.askAiStatus === 'streaming' || props.askAiStatus === 'submitted';\n const isKeywordSearchLoading = props.state.status === 'stalled';\n\n // when returning to another status than streaming or submitted, we focus on the input\n React.useEffect(() => {\n if (props.askAiStatus !== 'streaming' && props.askAiStatus !== 'submitted' && props.inputRef.current) {\n props.inputRef.current.focus();\n }\n }, [props.askAiStatus, props.inputRef]);\n\n /**\n * We need to block the default behavior of the input when AskAI is active.\n * This is because the input is used to ask another question when the user presses enter.\n *\n * Learn more on default autocomplete behavior:\n * https://github.com/algolia/autocomplete/blob/next/packages/autocomplete-core/src/getDefaultProps.ts.\n */\n const inputProps = {\n ...baseInputProps,\n enterKeyHint: props.isAskAiActive ? ('enter' as const) : ('search' as const),\n onKeyDown: (e: React.KeyboardEvent<HTMLInputElement>): void => {\n // block these up, down, enter listeners when AskAI is active\n if (props.isAskAiActive && blockedKeys.has(e.key)) {\n // enter key asks another question\n if (e.key === 'Enter' && !isAskAiStreaming && props.state.query) {\n props.onAskAgain(props.state.query);\n }\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n origOnKeyDown?.(e);\n },\n onChange: (e: React.ChangeEvent<HTMLInputElement>): void => {\n if (props.isAskAiActive) {\n props.setQuery(e.currentTarget.value);\n // block search when AskAI is active\n // we don't want to trigger the search when the user types\n // we already know they are asking a question\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n origOnChange?.(e);\n },\n disabled: isAskAiStreaming,\n };\n\n return (\n <>\n <form\n className=\"DocSearch-Form\"\n onSubmit={(event) => {\n event.preventDefault();\n }}\n onReset={onReset}\n >\n {props.isAskAiActive ? (\n <>\n <button\n type=\"button\"\n tabIndex={0}\n className=\"DocSearch-AskAi-Return\"\n title={backToKeywordSearchButtonText}\n aria-label={backToKeywordSearchButtonAriaLabel}\n onClick={() => props.onAskAiToggle(false)}\n >\n <BackIcon />\n </button>\n </>\n ) : (\n <>\n {isKeywordSearchLoading && (\n <div className=\"DocSearch-LoadingIndicator\">\n <LoadingIcon />\n </div>\n )}\n {!isKeywordSearchLoading && (\n <label className=\"DocSearch-MagnifierLabel\" {...props.getLabelProps()}>\n <SearchIcon />\n <span className=\"DocSearch-VisuallyHiddenForAccessibility\">{searchInputLabel}</span>\n </label>\n )}\n </>\n )}\n\n <input\n className=\"DocSearch-Input\"\n ref={props.inputRef}\n {...inputProps}\n placeholder={isAskAiStreaming ? placeholderTextAskAiStreaming : props.placeholder}\n />\n\n <div className=\"DocSearch-Actions\">\n {isAskAiStreaming && (\n <button type=\"button\" className=\"DocSearch-StreamingIndicator\" onClick={() => props.onAskAiToggle(true)}>\n <SparklesIcon />\n </button>\n )}\n\n <button\n className=\"DocSearch-Clear\"\n type=\"reset\"\n aria-label={clearButtonAriaLabel}\n hidden={!props.state.query}\n tabIndex={props.state.query ? 0 : -1}\n aria-hidden={!props.state.query ? 'true' : 'false'}\n >\n {clearButtonTitle}\n </button>\n\n {(isAskAiStreaming || props.state.query) && <div className=\"DocSearch-Divider\" />}\n\n <button\n type=\"button\"\n title={closeButtonText}\n className=\"DocSearch-Close\"\n aria-label={closeButtonAriaLabel}\n onClick={props.onClose}\n >\n <CloseIcon />\n </button>\n </div>\n </form>\n </>\n );\n}\n","/**\n * Checks if local storage is available and usable.\n */\nexport function isLocalStorageSupported(): boolean {\n const key = '__TEST_KEY__';\n try {\n localStorage.setItem(key, '');\n localStorage.removeItem(key);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Creates a simple storage interface for arrays using localstorage.\n * Provides basic getitem and setitem functionality.\n * Falls back to a no-op implementation if localstorage is not supported..\n *\n * @template titem The type of items to store.\n * @param key - The localstorage key to use.\n * @returns An object with setitem and getitem methods.\n */\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nexport function createStorage<TItem>(key: string) {\n if (isLocalStorageSupported() === false) {\n return {\n setItem(): void {},\n getItem(): TItem[] {\n return [];\n },\n };\n }\n\n return {\n setItem(item: TItem[]): void {\n return window.localStorage.setItem(key, JSON.stringify(item));\n },\n getItem(): TItem[] {\n const item = window.localStorage.getItem(key);\n return item ? JSON.parse(item) : [];\n },\n };\n}\n\n/**\n * Creates a simple storage interface for a single object using localstorage.\n * Provides basic getitem, setitem, and removeitem functionality.\n * Falls back to a no-op implementation if localstorage is not supported.\n *\n * @template titem The type of the object to store.\n * @param key - The localstorage key to use.\n * @returns An object with setitem, getitem, and removeitem methods.\n */\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nexport function createObjectStorage<TItem>(key: string) {\n if (isLocalStorageSupported() === false) {\n return {\n setItem(_item: TItem | null): void {},\n getItem(): TItem | null {\n return null;\n },\n removeItem(): void {},\n };\n }\n\n return {\n setItem(item: TItem | null): void {\n if (item === null) {\n window.localStorage.removeItem(key);\n } else {\n window.localStorage.setItem(key, JSON.stringify(item));\n }\n },\n getItem(): TItem | null {\n const item = window.localStorage.getItem(key);\n try {\n return item ? (JSON.parse(item) as TItem) : null;\n } catch {\n // handle potential JSON parsing errors, e.g., corrupted data\n window.localStorage.removeItem(key); // clear corrupted data\n return null;\n }\n },\n removeItem(): void {\n window.localStorage.removeItem(key);\n },\n };\n}\n","import type { DocSearchHit, StoredAskAiState, StoredDocSearchHit, StoredAskAiMessage } from './types';\nimport { createStorage } from './utils/storage';\n\ntype CreateStoredSearchesOptions = {\n key: string;\n limit?: number;\n};\n\nexport type StoredSearchPlugin<TItem> = {\n add: (item: TItem) => void;\n remove: (item: TItem) => void;\n getAll: () => TItem[];\n addFeedback?: (messageId: string, feedback: 'dislike' | 'like') => void;\n getOne?: (messageId: string) => StoredAskAiMessage | undefined;\n};\n\nexport function createStoredSearches<TItem extends StoredDocSearchHit>({\n key,\n limit = 5,\n}: CreateStoredSearchesOptions): StoredSearchPlugin<TItem> {\n const storage = createStorage<TItem>(key);\n let items = storage.getItem().slice(0, limit);\n\n return {\n add(item: TItem): void {\n const { _highlightResult, _snippetResult, ...hit } = item as unknown as DocSearchHit;\n\n const isQueryAlreadySaved = items.findIndex((x) => x.objectID === hit.objectID);\n\n if (isQueryAlreadySaved > -1) {\n items.splice(isQueryAlreadySaved, 1);\n }\n\n items.unshift(hit as TItem);\n items = items.slice(0, limit);\n\n storage.setItem(items);\n },\n remove(item: TItem): void {\n items = items.filter((x) => x.objectID !== item.objectID);\n\n storage.setItem(items);\n },\n getAll(): TItem[] {\n return items;\n },\n };\n}\n\nexport function createStoredConversations<TItem extends StoredAskAiState>({\n key,\n limit = 5,\n}: CreateStoredSearchesOptions): StoredSearchPlugin<TItem> {\n const storage = createStorage<TItem>(key);\n let items = storage.getItem().slice(0, limit);\n\n return {\n add(item: TItem): void {\n const { objectID, messages } = item;\n\n // check if this query is already saved\n const isQueryAlreadySaved = items.findIndex(\n (x) => x.objectID === objectID || x.messages?.[0]?.content === messages?.[0]?.content,\n );\n\n if (isQueryAlreadySaved > -1) {\n items[isQueryAlreadySaved] = item;\n } else {\n items.unshift(item);\n items = items.slice(0, limit);\n }\n\n storage.setItem(items);\n },\n /** Record feedback (like/dislike) for a given message id within stored conversations. */\n addFeedback(messageId: string, feedback: 'dislike' | 'like'): void {\n const conv = items.find((c) => c.messages?.some((m) => m.id === messageId));\n if (!conv || !conv.messages) return;\n\n const msg = conv.messages.find((m) => m.id === messageId);\n if (!msg) return;\n\n (msg as any).feedback = feedback;\n\n storage.setItem(items);\n },\n getOne(messageId: string): StoredAskAiMessage | undefined {\n const conv = items.find((c) => c.messages?.some((m) => m.id === messageId));\n return conv?.messages?.find((m) => m.id === messageId);\n },\n getAll(): TItem[] {\n return items;\n },\n remove(item: TItem): void {\n items = items.filter((x) => x.objectID !== item.objectID);\n\n storage.setItem(items);\n },\n };\n}\n","// src/cache/createBrowserLocalStorageCache.ts\nfunction createBrowserLocalStorageCache(options) {\n let storage;\n const namespaceKey = `algolia-client-js-${options.key}`;\n function getStorage() {\n if (storage === void 0) {\n storage = options.localStorage || window.localStorage;\n }\n return storage;\n }\n function getNamespace() {\n return JSON.parse(getStorage().getItem(namespaceKey) || \"{}\");\n }\n function setNamespace(namespace) {\n getStorage().setItem(namespaceKey, JSON.stringify(namespace));\n }\n function removeOutdatedCacheItems() {\n const timeToLive = options.timeToLive ? options.timeToLive * 1e3 : null;\n const namespace = getNamespace();\n const filteredNamespaceWithoutOldFormattedCacheItems = Object.fromEntries(\n Object.entries(namespace).filter(([, cacheItem]) => {\n return cacheItem.timestamp !== void 0;\n })\n );\n setNamespace(filteredNamespaceWithoutOldFormattedCacheItems);\n if (!timeToLive) {\n return;\n }\n const filteredNamespaceWithoutExpiredItems = Object.fromEntries(\n Object.entries(filteredNamespaceWithoutOldFormattedCacheItems).filter(([, cacheItem]) => {\n const currentTimestamp = (/* @__PURE__ */ new Date()).getTime();\n const isExpired = cacheItem.timestamp + timeToLive < currentTimestamp;\n return !isExpired;\n })\n );\n setNamespace(filteredNamespaceWithoutExpiredItems);\n }\n return {\n get(key, defaultValue, events = {\n miss: () => Promise.resolve()\n }) {\n return Promise.resolve().then(() => {\n removeOutdatedCacheItems();\n return getNamespace()[JSON.stringify(key)];\n }).then((value) => {\n return Promise.all([value ? value.value : defaultValue(), value !== void 0]);\n }).then(([value, exists]) => {\n return Promise.all([value, exists || events.miss(value)]);\n }).then(([value]) => value);\n },\n set(key, value) {\n return Promise.resolve().then(() => {\n const namespace = getNamespace();\n namespace[JSON.stringify(key)] = {\n timestamp: (/* @__PURE__ */ new Date()).getTime(),\n value\n };\n getStorage().setItem(namespaceKey, JSON.stringify(namespace));\n return value;\n });\n },\n delete(key) {\n return Promise.resolve().then(() => {\n const namespace = getNamespace();\n delete namespace[JSON.stringify(key)];\n getStorage().setItem(namespaceKey, JSON.stringify(namespace));\n });\n },\n clear() {\n return Promise.resolve().then(() => {\n getStorage().removeItem(namespaceKey);\n });\n }\n };\n}\n\n// src/cache/createNullCache.ts\nfunction createNullCache() {\n return {\n get(_key, defaultValue, events = {\n miss: () => Promise.resolve()\n }) {\n const value = defaultValue();\n return value.then((result) => Promise.all([result, events.miss(result)])).then(([result]) => result);\n },\n set(_key, value) {\n return Promise.resolve(value);\n },\n delete(_key) {\n return Promise.resolve();\n },\n clear() {\n return Promise.resolve();\n }\n };\n}\n\n// src/cache/createFallbackableCache.ts\nfunction createFallbackableCache(options) {\n const caches = [...options.caches];\n const current = caches.shift();\n if (current === void 0) {\n return createNullCache();\n }\n return {\n get(key, defaultValue, events = {\n miss: () => Promise.resolve()\n }) {\n return current.get(key, defaultValue, events).catch(() => {\n return createFallbackableCache({ caches }).get(key, defaultValue, events);\n });\n },\n set(key, value) {\n return current.set(key, value).catch(() => {\n return createFallbackableCache({ caches }).set(key, value);\n });\n },\n delete(key) {\n return current.delete(key).catch(() => {\n return createFallbackableCache({ caches }).delete(key);\n });\n },\n clear() {\n return current.clear().catch(() => {\n return createFallbackableCache({ caches }).clear();\n });\n }\n };\n}\n\n// src/cache/createMemoryCache.ts\nfunction createMemoryCache(options = { serializable: true }) {\n let cache = {};\n return {\n get(key, defaultValue, events = {\n miss: () => Promise.resolve()\n }) {\n const keyAsString = JSON.stringify(key);\n if (keyAsString in cache) {\n return Promise.resolve(options.serializable ? JSON.parse(cache[keyAsString]) : cache[keyAsString]);\n }\n const promise = defaultValue();\n return promise.then((value) => events.miss(value)).then(() => promise);\n },\n set(key, value) {\n cache[JSON.stringify(key)] = options.serializable ? JSON.stringify(value) : value;\n return Promise.resolve(value);\n },\n delete(key) {\n delete cache[JSON.stringify(key)];\n return Promise.resolve();\n },\n clear() {\n cache = {};\n return Promise.resolve();\n }\n };\n}\n\n// src/constants.ts\nvar DEFAULT_CONNECT_TIMEOUT_BROWSER = 1e3;\nvar DEFAULT_READ_TIMEOUT_BROWSER = 2e3;\nvar DEFAULT_WRITE_TIMEOUT_BROWSER = 3e4;\nvar DEFAULT_CONNECT_TIMEOUT_NODE = 2e3;\nvar DEFAULT_READ_TIMEOUT_NODE = 5e3;\nvar DEFAULT_WRITE_TIMEOUT_NODE = 3e4;\n\n// src/createAlgoliaAgent.ts\nfunction createAlgoliaAgent(version) {\n const algoliaAgent = {\n value: `Algolia for JavaScript (${version})`,\n add(options) {\n const addedAlgoliaAgent = `; ${options.segment}${options.version !== void 0 ? ` (${options.version})` : \"\"}`;\n if (algoliaAgent.value.indexOf(addedAlgoliaAgent) === -1) {\n algoliaAgent.value = `${algoliaAgent.value}${addedAlgoliaAgent}`;\n }\n return algoliaAgent;\n }\n };\n return algoliaAgent;\n}\n\n// src/createAuth.ts\nfunction createAuth(appId, apiKey, authMode = \"WithinHeaders\") {\n const credentials = {\n \"x-algolia-api-key\": apiKey,\n \"x-algolia-application-id\": appId\n };\n return {\n headers() {\n return authMode === \"WithinHeaders\" ? credentials : {};\n },\n queryParameters() {\n return authMode === \"WithinQueryParameters\" ? credentials : {};\n }\n };\n}\n\n// src/createIterablePromise.ts\nfunction createIterablePromise({\n func,\n validate,\n aggregator,\n error,\n timeout = () => 0\n}) {\n const retry = (previousResponse) => {\n return new Promise((resolve, reject) => {\n func(previousResponse).then(async (response) => {\n if (aggregator) {\n await aggregator(response);\n }\n if (await validate(response)) {\n return resolve(response);\n }\n if (error && await error.validate(response)) {\n return reject(new Error(await error.message(response)));\n }\n return setTimeout(\n () => {\n retry(response).then(resolve).catch(reject);\n },\n await timeout()\n );\n }).catch((err) => {\n reject(err);\n });\n });\n };\n return retry();\n}\n\n// src/getAlgoliaAgent.ts\nfunction getAlgoliaAgent({ algoliaAgents, client, version }) {\n const defaultAlgoliaAgent = createAlgoliaAgent(version).add({\n segment: client,\n version\n });\n algoliaAgents.forEach((algoliaAgent) => defaultAlgoliaAgent.add(algoliaAgent));\n return defaultAlgoliaAgent;\n}\n\n// src/logger/createNullLogger.ts\nfunction createNullLogger() {\n return {\n debug(_message, _args) {\n return Promise.resolve();\n },\n info(_message, _args) {\n return Promise.resolve();\n },\n error(_message, _args) {\n return Promise.resolve();\n }\n };\n}\n\n// src/transporter/createStatefulHost.ts\nvar EXPIRATION_DELAY = 2 * 60 * 1e3;\nfunction createStatefulHost(host, status = \"up\") {\n const lastUpdate = Date.now();\n function isUp() {\n return status === \"up\" || Date.now() - lastUpdate > EXPIRATION_DELAY;\n }\n function isTimedOut() {\n return status === \"timed out\" && Date.now() - lastUpdate <= EXPIRATION_DELAY;\n }\n return { ...host, status, lastUpdate, isUp, isTimedOut };\n}\n\n// src/transporter/errors.ts\nvar AlgoliaError = class extends Error {\n name = \"AlgoliaError\";\n constructor(message, name) {\n super(message);\n if (name) {\n this.name = name;\n }\n }\n};\nvar IndexNotFoundError = class extends AlgoliaError {\n constructor(indexName) {\n super(`${indexName} does not exist`, \"IndexNotFoundError\");\n }\n};\nvar IndicesInSameAppError = class extends AlgoliaError {\n constructor() {\n super(\"Indices are in the same application. Use operationIndex instead.\", \"IndicesInSameAppError\");\n }\n};\nvar IndexAlreadyExistsError = class extends AlgoliaError {\n constructor(indexName) {\n super(`${indexName} index already exists.`, \"IndexAlreadyExistsError\");\n }\n};\nvar ErrorWithStackTrace = class extends AlgoliaError {\n stackTrace;\n constructor(message, stackTrace, name) {\n super(message, name);\n this.stackTrace = stackTrace;\n }\n};\nvar RetryError = class extends ErrorWithStackTrace {\n constructor(stackTrace) {\n super(\n \"Unreachable hosts - your application id may be incorrect. If the error persists, please reach out to the Algolia Support team: https://alg.li/support.\",\n stackTrace,\n \"RetryError\"\n );\n }\n};\nvar ApiError = class extends ErrorWithStackTrace {\n status;\n constructor(message, status, stackTrace, name = \"ApiError\") {\n super(message, stackTrace, name);\n this.status = status;\n }\n};\nvar DeserializationError = class extends AlgoliaError {\n response;\n constructor(message, response) {\n super(message, \"DeserializationError\");\n this.response = response;\n }\n};\nvar DetailedApiError = class extends ApiError {\n error;\n constructor(message, status, error, stackTrace) {\n super(message, status, stackTrace, \"DetailedApiError\");\n this.error = error;\n }\n};\n\n// src/transporter/helpers.ts\nfunction shuffle(array) {\n const shuffledArray = array;\n for (let c = array.length - 1; c > 0; c--) {\n const b = Math.floor(Math.random() * (c + 1));\n const a = array[c];\n shuffledArray[c] = array[b];\n shuffledArray[b] = a;\n }\n return shuffledArray;\n}\nfunction serializeUrl(host, path, queryParameters) {\n const queryParametersAsString = serializeQueryParameters(queryParameters);\n let url = `${host.protocol}://${host.url}${host.port ? `:${host.port}` : \"\"}/${path.charAt(0) === \"/\" ? path.substring(1) : path}`;\n if (queryParametersAsString.length) {\n url += `?${queryParametersAsString}`;\n }\n return url;\n}\nfunction serializeQueryParameters(parameters) {\n return Object.keys(parameters).filter((key) => parameters[key] !== void 0).sort().map(\n (key) => `${key}=${encodeURIComponent(\n Object.prototype.toString.call(parameters[key]) === \"[object Array]\" ? parameters[key].join(\",\") : parameters[key]\n ).replace(/\\+/g, \"%20\")}`\n ).join(\"&\");\n}\nfunction serializeData(request, requestOptions) {\n if (request.method === \"GET\" || request.data === void 0 && requestOptions.data === void 0) {\n return void 0;\n }\n const data = Array.isArray(request.data) ? request.data : { ...request.data, ...requestOptions.data };\n return JSON.stringify(data);\n}\nfunction serializeHeaders(baseHeaders, requestHeaders, requestOptionsHeaders) {\n const headers = {\n Accept: \"application/json\",\n ...baseHeaders,\n ...requestHeaders,\n ...requestOptionsHeaders\n };\n const serializedHeaders = {};\n Object.keys(headers).forEach((header) => {\n const value = headers[header];\n serializedHeaders[header.toLowerCase()] = value;\n });\n return serializedHeaders;\n}\nfunction deserializeSuccess(response) {\n try {\n return JSON.parse(response.content);\n } catch (e) {\n throw new DeserializationError(e.message, response);\n }\n}\nfunction deserializeFailure({ content, status }, stackFrame) {\n try {\n const parsed = JSON.parse(content);\n if (\"error\" in parsed) {\n return new DetailedApiError(parsed.message, status, parsed.error, stackFrame);\n }\n return new ApiError(parsed.message, status, stackFrame);\n } catch {\n }\n return new ApiError(content, status, stackFrame);\n}\n\n// src/transporter/responses.ts\nfunction isNetworkError({ isTimedOut, status }) {\n return !isTimedOut && ~~status === 0;\n}\nfunction isRetryable({ isTimedOut, status }) {\n return isTimedOut || isNetworkError({ isTimedOut, status }) || ~~(status / 100) !== 2 && ~~(status / 100) !== 4;\n}\nfunction isSuccess({ status }) {\n return ~~(status / 100) === 2;\n}\n\n// src/transporter/stackTrace.ts\nfunction stackTraceWithoutCredentials(stackTrace) {\n return stackTrace.map((stackFrame) => stackFrameWithoutCredentials(stackFrame));\n}\nfunction stackFrameWithoutCredentials(stackFrame) {\n const modifiedHeaders = stackFrame.request.headers[\"x-algolia-api-key\"] ? { \"x-algolia-api-key\": \"*****\" } : {};\n return {\n ...stackFrame,\n request: {\n ...stackFrame.request,\n headers: {\n ...stackFrame.request.headers,\n ...modifiedHeaders\n }\n }\n };\n}\n\n// src/transporter/createTransporter.ts\nfunction createTransporter({\n hosts,\n hostsCache,\n baseHeaders,\n logger,\n baseQueryParameters,\n algoliaAgent,\n timeouts,\n requester,\n requestsCache,\n responsesCache\n}) {\n async function createRetryableOptions(compatibleHosts) {\n const statefulHosts = await Promise.all(\n compatibleHosts.map((compatibleHost) => {\n return hostsCache.get(compatibleHost, () => {\n return Promise.resolve(createStatefulHost(compatibleHost));\n });\n })\n );\n const hostsUp = statefulHosts.filter((host) => host.isUp());\n const hostsTimedOut = statefulHosts.filter((host) => host.isTimedOut());\n const hostsAvailable = [...hostsUp, ...hostsTimedOut];\n const compatibleHostsAvailable = hostsAvailable.length > 0 ? hostsAvailable : compatibleHosts;\n return {\n hosts: compatibleHostsAvailable,\n getTimeout(timeoutsCount, baseTimeout) {\n const timeoutMultiplier = hostsTimedOut.length === 0 && timeoutsCount === 0 ? 1 : hostsTimedOut.length + 3 + timeoutsCount;\n return timeoutMultiplier * baseTimeout;\n }\n };\n }\n async function retryableRequest(request, requestOptions, isRead = true) {\n const stackTrace = [];\n const data = serializeData(request, requestOptions);\n const headers = serializeHeaders(baseHeaders, request.headers, requestOptions.headers);\n const dataQueryParameters = request.method === \"GET\" ? {\n ...request.data,\n ...requestOptions.data\n } : {};\n const queryParameters = {\n ...baseQueryParameters,\n ...request.queryParameters,\n ...dataQueryParameters\n };\n if (algoliaAgent.value) {\n queryParameters[\"x-algolia-agent\"] = algoliaAgent.value;\n }\n if (requestOptions && requestOptions.queryParameters) {\n for (const key of Object.keys(requestOptions.queryParameters)) {\n if (!requestOptions.queryParameters[key] || Object.prototype.toString.call(requestOptions.queryParameters[key]) === \"[object Object]\") {\n queryParameters[key] = requestOptions.queryParameters[key];\n } else {\n queryParameters[key] = requestOptions.queryParameters[key].toString();\n }\n }\n }\n let timeoutsCount = 0;\n const retry = async (retryableHosts, getTimeout) => {\n const host = retryableHosts.pop();\n if (host === void 0) {\n throw new RetryError(stackTraceWithoutCredentials(stackTrace));\n }\n const timeout = { ...timeouts, ...requestOptions.timeouts };\n const payload = {\n data,\n headers,\n method: request.method,\n url: serializeUrl(host, request.path, queryParameters),\n connectTimeout: getTimeout(timeoutsCount, timeout.connect),\n responseTimeout: getTimeout(timeoutsCount, isRead ? timeout.read : timeout.write)\n };\n const pushToStackTrace = (response2) => {\n const stackFrame = {\n request: payload,\n response: response2,\n host,\n triesLeft: retryableHosts.length\n };\n stackTrace.push(stackFrame);\n return stackFrame;\n };\n const response = await requester.send(payload);\n if (isRetryable(response)) {\n const stackFrame = pushToStackTrace(response);\n if (response.isTimedOut) {\n timeoutsCount++;\n }\n logger.info(\"Retryable failure\", stackFrameWithoutCredentials(stackFrame));\n await hostsCache.set(host, createStatefulHost(host, response.isTimedOut ? \"timed out\" : \"down\"));\n return retry(retryableHosts, getTimeout);\n }\n if (isSuccess(response)) {\n return deserializeSuccess(response);\n }\n pushToStackTrace(response);\n throw deserializeFailure(response, stackTrace);\n };\n const compatibleHosts = hosts.filter(\n (host) => host.accept === \"readWrite\" || (isRead ? host.accept === \"read\" : host.accept === \"write\")\n );\n const options = await createRetryableOptions(compatibleHosts);\n return retry([...options.hosts].reverse(), options.getTimeout);\n }\n function createRequest(request, requestOptions = {}) {\n const isRead = request.useReadTransporter || request.method === \"GET\";\n if (!isRead) {\n return retryableRequest(request, requestOptions, isRead);\n }\n const createRetryableRequest = () => {\n return retryableRequest(request, requestOptions);\n };\n const cacheable = requestOptions.cacheable || request.cacheable;\n if (cacheable !== true) {\n return createRetryableRequest();\n }\n const key = {\n request,\n requestOptions,\n transporter: {\n queryParameters: baseQueryParameters,\n headers: baseHeaders\n }\n };\n return responsesCache.get(\n key,\n () => {\n return requestsCache.get(\n key,\n () => (\n /**\n * Finally, if there is no request in progress with the same key,\n * this `createRetryableRequest()` will actually trigger the\n * retryable request.\n */\n requestsCache.set(key, createRetryableRequest()).then(\n (response) => Promise.all([requestsCache.delete(key), response]),\n (err) => Promise.all([requestsCache.delete(key), Promise.reject(err)])\n ).then(([_, response]) => response)\n )\n );\n },\n {\n /**\n * Of course, once we get this response back from the server, we\n * tell response cache to actually store the received response\n * to be used later.\n */\n miss: (response) => responsesCache.set(key, response)\n }\n );\n }\n return {\n hostsCache,\n requester,\n timeouts,\n logger,\n algoliaAgent,\n baseHeaders,\n baseQueryParameters,\n hosts,\n request: createRequest,\n requestsCache,\n responsesCache\n };\n}\n\n// src/types/logger.ts\nvar LogLevelEnum = {\n Debug: 1,\n Info: 2,\n Error: 3\n};\nexport {\n AlgoliaError,\n ApiError,\n DEFAULT_CONNECT_TIMEOUT_BROWSER,\n DEFAULT_CONNECT_TIMEOUT_NODE,\n DEFAULT_READ_TIMEOUT_BROWSER,\n DEFAULT_READ_TIMEOUT_NODE,\n DEFAULT_WRITE_TIMEOUT_BROWSER,\n DEFAULT_WRITE_TIMEOUT_NODE,\n DeserializationError,\n DetailedApiError,\n ErrorWithStackTrace,\n IndexAlreadyExistsError,\n IndexNotFoundError,\n IndicesInSameAppError,\n LogLevelEnum,\n RetryError,\n createAlgoliaAgent,\n createAuth,\n createBrowserLocalStorageCache,\n createFallbackableCache,\n createIterablePromise,\n createMemoryCache,\n createNullCache,\n createNullLogger,\n createStatefulHost,\n createTransporter,\n deserializeFailure,\n deserializeSuccess,\n getAlgoliaAgent,\n isNetworkError,\n isRetryable,\n isSuccess,\n serializeData,\n serializeHeaders,\n serializeQueryParameters,\n serializeUrl,\n shuffle,\n stackFrameWithoutCredentials,\n stackTraceWithoutCredentials\n};\n//# sourceMappingURL=common.js.map","export const version = '4.0.0-beta.3';\n","import { liteClient } from 'algoliasearch/lite';\nimport React from 'react';\n\nimport type { DocSearchTransformClient } from './DocSearch';\nimport { version } from './version';\n\nexport function useSearchClient(\n appId: string,\n apiKey: string,\n transformSearchClient: (searchClient: DocSearchTransformClient) => DocSearchTransformClient,\n): DocSearchTransformClient {\n const searchClient = React.useMemo(() => {\n const client = liteClient(appId, apiKey);\n client.addAlgoliaAgent('docsearch', version);\n\n // Since DocSearch.js relies on DocSearch React with an alias to Preact,\n // we cannot add the `docsearch-react` user agent by default, otherwise\n // it would also be sent on a DocSearch.js integration.\n // We therefore only add the `docsearch-react` user agent if `docsearch.js`\n // is not present.\n if (/docsearch.js \\(.*\\)/.test(client.transporter.algoliaAgent.value) === false) {\n client.addAlgoliaAgent('docsearch-react', version);\n }\n\n return transformSearchClient(client);\n }, [appId, apiKey, transformSearchClient]);\n\n return searchClient;\n}\n","// lite/builds/browser.ts\nimport { createXhrRequester } from \"@algolia/requester-browser-xhr\";\nimport {\n createBrowserLocalStorageCache,\n createFallbackableCache,\n createMemoryCache,\n createNullLogger\n} from \"@algolia/client-common\";\n\n// lite/src/liteClient.ts\nimport { createAuth, createTransporter, getAlgoliaAgent, shuffle } from \"@algolia/client-common\";\nvar apiClientVersion = \"5.28.0\";\nfunction getDefaultHosts(appId) {\n return [\n {\n url: `${appId}-dsn.algolia.net`,\n accept: \"read\",\n protocol: \"https\"\n },\n {\n url: `${appId}.algolia.net`,\n accept: \"write\",\n protocol: \"https\"\n }\n ].concat(\n shuffle([\n {\n url: `${appId}-1.algolianet.com`,\n accept: \"readWrite\",\n protocol: \"https\"\n },\n {\n url: `${appId}-2.algolianet.com`,\n accept: \"readWrite\",\n protocol: \"https\"\n },\n {\n url: `${appId}-3.algolianet.com`,\n accept: \"readWrite\",\n protocol: \"https\"\n }\n ])\n );\n}\nfunction createLiteClient({\n appId: appIdOption,\n apiKey: apiKeyOption,\n authMode,\n algoliaAgents,\n ...options\n}) {\n const auth = createAuth(appIdOption, apiKeyOption, authMode);\n const transporter = createTransporter({\n hosts: getDefaultHosts(appIdOption),\n ...options,\n algoliaAgent: getAlgoliaAgent({\n algoliaAgents,\n client: \"Lite\",\n version: apiClientVersion\n }),\n baseHeaders: {\n \"content-type\": \"text/plain\",\n ...auth.headers(),\n ...options.baseHeaders\n },\n baseQueryParameters: {\n ...auth.queryParameters(),\n ...options.baseQueryParameters\n }\n });\n return {\n transporter,\n /**\n * The `appId` currently in use.\n */\n appId: appIdOption,\n /**\n * The `apiKey` currently in use.\n */\n apiKey: apiKeyOption,\n /**\n * Clears the cache of the transporter for the `requestsCache` and `responsesCache` properties.\n */\n clearCache() {\n return Promise.all([transporter.requestsCache.clear(), transporter.responsesCache.clear()]).then(() => void 0);\n },\n /**\n * Get the value of the `algoliaAgent`, used by our libraries internally and telemetry system.\n */\n get _ua() {\n return transporter.algoliaAgent.value;\n },\n /**\n * Adds a `segment` to the `x-algolia-agent` sent with every requests.\n *\n * @param segment - The algolia agent (user-agent) segment to add.\n * @param version - The version of the agent.\n */\n addAlgoliaAgent(segment, version) {\n transporter.algoliaAgent.add({ segment, version });\n },\n /**\n * Helper method to switch the API key used to authenticate the requests.\n *\n * @param params - Method params.\n * @param params.apiKey - The new API Key to use.\n */\n setClientApiKey({ apiKey }) {\n if (!authMode || authMode === \"WithinHeaders\") {\n transporter.baseHeaders[\"x-algolia-api-key\"] = apiKey;\n } else {\n transporter.baseQueryParameters[\"x-algolia-api-key\"] = apiKey;\n }\n },\n /**\n * Helper: calls the `search` method but with certainty that we will only request Algolia records (hits) and not facets.\n * Disclaimer: We don't assert that the parameters you pass to this method only contains `hits` requests to prevent impacting search performances, this helper is purely for typing purposes.\n *\n * @summary Search multiple indices for `hits`.\n * @param searchMethodParams - Query requests and strategies. Results will be received in the same order as the queries.\n * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions.\n */\n searchForHits(searchMethodParams, requestOptions) {\n return this.search(searchMethodParams, requestOptions);\n },\n /**\n * Helper: calls the `search` method but with certainty that we will only request Algolia facets and not records (hits).\n * Disclaimer: We don't assert that the parameters you pass to this method only contains `facets` requests to prevent impacting search performances, this helper is purely for typing purposes.\n *\n * @summary Search multiple indices for `facets`.\n * @param searchMethodParams - Query requests and strategies. Results will be received in the same order as the queries.\n * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions.\n */\n searchForFacets(searchMethodParams, requestOptions) {\n return this.search(searchMethodParams, requestOptions);\n },\n /**\n * This method lets you send requests to the Algolia REST API.\n * @param customPost - The customPost object.\n * @param customPost.path - Path of the endpoint, anything after \\\"/1\\\" must be specified.\n * @param customPost.parameters - Query parameters to apply to the current query.\n * @param customPost.body - Parameters to send with the custom request.\n * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions.\n */\n customPost({ path, parameters, body }, requestOptions) {\n if (!path) {\n throw new Error(\"Parameter `path` is required when calling `customPost`.\");\n }\n const requestPath = \"/{path}\".replace(\"{path}\", path);\n const headers = {};\n const queryParameters = parameters ? parameters : {};\n const request = {\n method: \"POST\",\n path: requestPath,\n queryParameters,\n headers,\n data: body ? body : {}\n };\n return transporter.request(request, requestOptions);\n },\n /**\n * Retrieves recommendations from selected AI models.\n *\n * Required API Key ACLs:\n * - search\n * @param getRecommendationsParams - The getRecommendationsParams object.\n * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions.\n */\n getRecommendations(getRecommendationsParams, requestOptions) {\n if (getRecommendationsParams && Array.isArray(getRecommendationsParams)) {\n const newSignatureRequest = {\n requests: getRecommendationsParams\n };\n getRecommendationsParams = newSignatureRequest;\n }\n if (!getRecommendationsParams) {\n throw new Error(\"Parameter `getRecommendationsParams` is required when calling `getRecommendations`.\");\n }\n if (!getRecommendationsParams.requests) {\n throw new Error(\"Parameter `getRecommendationsParams.requests` is required when calling `getRecommendations`.\");\n }\n const requestPath = \"/1/indexes/*/recommendations\";\n const headers = {};\n const queryParameters = {};\n const request = {\n method: \"POST\",\n path: requestPath,\n queryParameters,\n headers,\n data: getRecommendationsParams,\n useReadTransporter: true,\n cacheable: true\n };\n return transporter.request(request, requestOptions);\n },\n /**\n * Sends multiple search requests to one or more indices. This can be useful in these cases: - Different indices for different purposes, such as, one index for products, another one for marketing content. - Multiple searches to the same index—for example, with different filters. Use the helper `searchForHits` or `searchForFacets` to get the results in a more convenient format, if you already know the return type you want.\n *\n * Required API Key ACLs:\n * - search\n * @param searchMethodParams - Muli-search request body. Results are returned in the same order as the requests.\n * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions.\n */\n search(searchMethodParams, requestOptions) {\n if (searchMethodParams && Array.isArray(searchMethodParams)) {\n const newSignatureRequest = {\n requests: searchMethodParams.map(({ params, ...legacyRequest }) => {\n if (legacyRequest.type === \"facet\") {\n return {\n ...legacyRequest,\n ...params,\n type: \"facet\"\n };\n }\n return {\n ...legacyRequest,\n ...params,\n facet: void 0,\n maxFacetHits: void 0,\n facetQuery: void 0\n };\n })\n };\n searchMethodParams = newSignatureRequest;\n }\n if (!searchMethodParams) {\n throw new Error(\"Parameter `searchMethodParams` is required when calling `search`.\");\n }\n if (!searchMethodParams.requests) {\n throw new Error(\"Parameter `searchMethodParams.requests` is required when calling `search`.\");\n }\n const requestPath = \"/1/indexes/*/queries\";\n const headers = {};\n const queryParameters = {};\n const request = {\n method: \"POST\",\n path: requestPath,\n queryParameters,\n headers,\n data: searchMethodParams,\n useReadTransporter: true,\n cacheable: true\n };\n return transporter.request(request, requestOptions);\n }\n };\n}\n\n// lite/builds/browser.ts\nfunction liteClient(appId, apiKey, options) {\n if (!appId || typeof appId !== \"string\") {\n throw new Error(\"`appId` is missing.\");\n }\n if (!apiKey || typeof apiKey !== \"string\") {\n throw new Error(\"`apiKey` is missing.\");\n }\n return createLiteClient({\n appId,\n apiKey,\n timeouts: {\n connect: 1e3,\n read: 2e3,\n write: 3e4\n },\n logger: createNullLogger(),\n requester: createXhrRequester(),\n algoliaAgents: [{ segment: \"Browser\" }],\n authMode: \"WithinQueryParameters\",\n responsesCache: createMemoryCache(),\n requestsCache: createMemoryCache({ serializable: false }),\n hostsCache: createFallbackableCache({\n caches: [createBrowserLocalStorageCache({ key: `${apiClientVersion}-${appId}` }), createMemoryCache()]\n }),\n ...options\n });\n}\nexport {\n apiClientVersion,\n liteClient\n};\n//# sourceMappingURL=browser.js.map","function m(){function r(t){return new Promise(s=>{let e=new XMLHttpRequest;e.open(t.method,t.url,!0),Object.keys(t.headers).forEach(n=>e.setRequestHeader(n,t.headers[n]));let i=(n,a)=>setTimeout(()=>{e.abort(),s({status:0,content:a,isTimedOut:!0})},n),u=i(t.connectTimeout,\"Connection timeout\"),o;e.onreadystatechange=()=>{e.readyState>e.OPENED&&o===void 0&&(clearTimeout(u),o=i(t.responseTimeout,\"Socket timeout\"))},e.onerror=()=>{e.status===0&&(clearTimeout(u),clearTimeout(o),s({content:e.responseText||\"Network request failed\",status:e.status,isTimedOut:!1}))},e.onload=()=>{clearTimeout(u),clearTimeout(o),s({content:e.responseText,status:e.status,isTimedOut:!1})},e.send(t.data)})}return{send:r}}export{m as createXhrRequester};\n//# sourceMappingURL=requester.xhr.js.map","import type { Message } from '@ai-sdk/react';\nimport { useChat } from '@ai-sdk/react';\nimport {\n type AutocompleteSource,\n type AlgoliaInsightsHit,\n createAutocomplete,\n type AutocompleteState,\n} from '@algolia/autocomplete-core';\nimport type { SearchResponse } from 'algoliasearch/lite';\nimport React, { type JSX } from 'react';\n\nimport { getValidToken, postFeedback } from './askai';\nimport { ASK_AI_API_URL, MAX_QUERY_SIZE, USE_ASK_AI_TOKEN } from './constants';\nimport type { DocSearchProps } from './DocSearch';\nimport type { FooterTranslations } from './Footer';\nimport { Footer } from './Footer';\nimport { Hit } from './Hit';\nimport type { ScreenStateTranslations } from './ScreenState';\nimport { ScreenState } from './ScreenState';\nimport type { SearchBoxTranslations } from './SearchBox';\nimport { SearchBox } from './SearchBox';\nimport { createStoredConversations, createStoredSearches } from './stored-searches';\nimport type { DocSearchHit, DocSearchState, InternalDocSearchHit, StoredAskAiState, StoredDocSearchHit } from './types';\nimport { useSearchClient } from './useSearchClient';\nimport { useTheme } from './useTheme';\nimport { useTouchEvents } from './useTouchEvents';\nimport { useTrapFocus } from './useTrapFocus';\nimport { groupBy, identity, noop, removeHighlightTags, isModifierEvent, scrollTo as scrollToUtils } from './utils';\nimport { buildDummyAskAiHit } from './utils/ai';\n\nexport type ModalTranslations = Partial<{\n searchBox: SearchBoxTranslations;\n footer: FooterTranslations;\n}> &\n ScreenStateTranslations;\n\nexport type DocSearchModalProps = DocSearchProps & {\n initialScrollY: number;\n onAskAiToggle: (toggle: boolean) => void;\n onClose?: () => void;\n isAskAiActive?: boolean;\n canHandleAskAi?: boolean;\n translations?: ModalTranslations;\n};\n\n/**\n * Helper function to build sources when there is no query\n * useful for recent searches and favorite searches.\n */\ntype BuildNoQuerySourcesOptions = {\n recentSearches: ReturnType<typeof createStoredSearches>;\n favoriteSearches: ReturnType<typeof createStoredSearches>;\n saveRecentSearch: (item: InternalDocSearchHit) => void;\n onClose: () => void;\n disableUserPersonalization: boolean;\n canHandleAskAi: boolean;\n};\n\nconst buildNoQuerySources = ({\n recentSearches,\n favoriteSearches,\n saveRecentSearch,\n onClose,\n disableUserPersonalization,\n}: BuildNoQuerySourcesOptions): Array<AutocompleteSource<InternalDocSearchHit>> => {\n if (disableUserPersonalization) {\n return [];\n }\n\n const sources: Array<AutocompleteSource<InternalDocSearchHit>> = [\n {\n sourceId: 'recentSearches',\n onSelect({ item, event }): void {\n saveRecentSearch(item);\n if (!isModifierEvent(event)) {\n onClose();\n }\n },\n getItemUrl({ item }): string {\n return item.url;\n },\n getItems(): InternalDocSearchHit[] {\n return recentSearches.getAll() as InternalDocSearchHit[];\n },\n },\n {\n sourceId: 'favoriteSearches',\n onSelect({ item, event }): void {\n saveRecentSearch(item);\n if (!isModifierEvent(event)) {\n onClose();\n }\n },\n getItemUrl({ item }): string {\n return item.url;\n },\n getItems(): InternalDocSearchHit[] {\n return favoriteSearches.getAll() as InternalDocSearchHit[];\n },\n },\n ];\n\n return sources;\n};\n\ntype BuildQuerySourcesState = Pick<AutocompleteState<InternalDocSearchHit>, 'context'>;\n\n/**\n * Helper function to build sources when there is a query\n * note: we only need specific parts of the state, not the full DocSearchState.\n */\nconst buildQuerySources = async ({\n query,\n state: sourcesState,\n setContext,\n setStatus,\n searchClient,\n indexName,\n searchParameters,\n snippetLength,\n insights,\n appId,\n apiKey,\n maxResultsPerGroup,\n transformItems = identity,\n saveRecentSearch,\n onClose,\n}: {\n query: string;\n state: BuildQuerySourcesState;\n setContext: (context: Partial<DocSearchState<InternalDocSearchHit>['context']>) => void;\n setStatus: (status: DocSearchState<InternalDocSearchHit>['status']) => void;\n searchClient: ReturnType<typeof useSearchClient>;\n indexName: string;\n searchParameters: DocSearchProps['searchParameters'];\n snippetLength: React.MutableRefObject<number>;\n insights: boolean;\n appId?: string;\n apiKey?: string;\n maxResultsPerGroup?: number;\n transformItems?: DocSearchProps['transformItems'];\n saveRecentSearch: (item: InternalDocSearchHit) => void;\n onClose: () => void;\n}): Promise<Array<AutocompleteSource<InternalDocSearchHit>>> => {\n const insightsActive = insights;\n\n try {\n const { results } = await searchClient.search<DocSearchHit>({\n requests: [\n {\n query,\n indexName,\n attributesToRetrieve: [\n 'hierarchy.lvl0',\n 'hierarchy.lvl1',\n 'hierarchy.lvl2',\n 'hierarchy.lvl3',\n 'hierarchy.lvl4',\n 'hierarchy.lvl5',\n 'hierarchy.lvl6',\n 'content',\n 'type',\n 'url',\n ],\n attributesToSnippet: [\n `hierarchy.lvl1:${snippetLength.current}`,\n `hierarchy.lvl2:${snippetLength.current}`,\n `hierarchy.lvl3:${snippetLength.current}`,\n `hierarchy.lvl4:${snippetLength.current}`,\n `hierarchy.lvl5:${snippetLength.current}`,\n `hierarchy.lvl6:${snippetLength.current}`,\n `content:${snippetLength.current}`,\n ],\n snippetEllipsisText: '…',\n highlightPreTag: '<mark>',\n highlightPostTag: '</mark>',\n hitsPerPage: 20,\n clickAnalytics: insightsActive,\n ...searchParameters,\n },\n ],\n });\n\n const firstResult = results[0] as SearchResponse<DocSearchHit>;\n const { hits, nbHits } = firstResult;\n const sources = groupBy<DocSearchHit>(hits, (hit) => removeHighlightTags(hit), maxResultsPerGroup);\n\n // We store the `lvl0`s to display them as search suggestions\n // in the \"no results\" screen.\n if ((sourcesState.context.searchSuggestions as any[]).length < Object.keys(sources).length) {\n setContext({\n searchSuggestions: Object.keys(sources),\n });\n }\n\n setContext({ nbHits });\n\n let insightsParams = {};\n\n if (insightsActive) {\n insightsParams = {\n __autocomplete_indexName: indexName,\n __autocomplete_queryID: firstResult.queryID,\n __autocomplete_algoliaCredentials: {\n appId,\n apiKey,\n },\n };\n }\n\n return Object.values<DocSearchHit[]>(sources).map((items, index) => {\n return {\n sourceId: `hits${index}`,\n onSelect({ item, event }): void {\n saveRecentSearch(item);\n if (!isModifierEvent(event)) {\n onClose();\n }\n },\n getItemUrl({ item }): string {\n return item.url;\n },\n getItems(): InternalDocSearchHit[] {\n return Object.values(groupBy(items, (item) => item.hierarchy.lvl1, maxResultsPerGroup))\n .map(transformItems)\n .map((groupedHits) =>\n groupedHits.map((item) => {\n let parent: InternalDocSearchHit | null = null;\n\n const potentialParent = groupedHits.find(\n (siblingItem) => siblingItem.type === 'lvl1' && siblingItem.hierarchy.lvl1 === item.hierarchy.lvl1,\n ) as InternalDocSearchHit | undefined;\n\n if (item.type !== 'lvl1' && potentialParent) {\n parent = potentialParent;\n }\n\n return {\n ...item,\n __docsearch_parent: parent,\n ...insightsParams,\n };\n }),\n )\n .flat();\n },\n };\n });\n } catch (error) {\n // The Algolia `RetryError` happens when all the servers have\n // failed, meaning that there's no chance the response comes\n // back. This is the right time to display an error.\n // See https://github.com/algolia/algoliasearch-client-javascript/blob/2ffddf59bc765cd1b664ee0346b28f00229d6e12/packages/transporter/src/errors/createRetryError.ts#L5\n if ((error as Error).name === 'RetryError') {\n setStatus('error');\n }\n throw error;\n }\n};\n\nexport function DocSearchModal({\n appId,\n apiKey,\n indexName,\n placeholder,\n askAi,\n searchParameters,\n maxResultsPerGroup,\n theme,\n onClose = noop,\n transformItems = identity,\n hitComponent = Hit,\n resultsFooterComponent = (): JSX.Element | null => null,\n navigator,\n initialScrollY = 0,\n transformSearchClient = identity,\n disableUserPersonalization = false,\n initialQuery: initialQueryFromProp = '',\n translations = {},\n getMissingResultsUrl,\n insights = false,\n onAskAiToggle,\n isAskAiActive = false,\n canHandleAskAi = false,\n}: DocSearchModalProps): JSX.Element {\n const { footer: footerTranslations, searchBox: searchBoxTranslations, ...screenStateTranslations } = translations;\n const [state, setState] = React.useState<DocSearchState<InternalDocSearchHit>>({\n query: '',\n collections: [],\n completion: null,\n context: {},\n isOpen: false,\n activeItemId: null,\n status: 'idle',\n });\n\n const containerRef = React.useRef<HTMLDivElement | null>(null);\n const modalRef = React.useRef<HTMLDivElement | null>(null);\n const formElementRef = React.useRef<HTMLDivElement | null>(null);\n const dropdownRef = React.useRef<HTMLDivElement | null>(null);\n const inputRef = React.useRef<HTMLInputElement | null>(null);\n const snippetLength = React.useRef<number>(15);\n const initialQueryFromSelection = React.useRef(\n typeof window !== 'undefined' ? window.getSelection()!.toString().slice(0, MAX_QUERY_SIZE) : '',\n ).current;\n const initialQuery = React.useRef(initialQueryFromProp || initialQueryFromSelection).current;\n // storage\n const conversations = React.useRef(\n createStoredConversations<StoredAskAiState>({\n key: `__DOCSEARCH_ASKAI_CONVERSATIONS__${indexName}`,\n limit: 10,\n }),\n ).current;\n const favoriteSearches = React.useRef(\n createStoredSearches<StoredDocSearchHit>({\n key: `__DOCSEARCH_FAVORITE_SEARCHES__${indexName}`,\n limit: 10,\n }),\n ).current;\n const recentSearches = React.useRef(\n createStoredSearches<StoredDocSearchHit>({\n key: `__DOCSEARCH_RECENT_SEARCHES__${indexName}`,\n // We display 7 recent searches and there's no favorites, but only\n // 4 when there are favorites.\n limit: favoriteSearches.getAll().length === 0 ? 7 : 4,\n }),\n ).current;\n\n const searchClient = useSearchClient(appId, apiKey, transformSearchClient);\n\n const askAiConfig = typeof askAi === 'object' ? askAi : null;\n const askAiConfigurationId = typeof askAi === 'string' ? askAi : askAiConfig?.assistantId || null;\n const askAiSearchParameters = askAiConfig?.searchParameters;\n\n const [askAiStreamError, setAskAiStreamError] = React.useState<Error | null>(null);\n\n const {\n messages,\n append,\n status,\n setMessages,\n error: askAiFetchError,\n } = useChat({\n api: ASK_AI_API_URL,\n sendExtraMessageFields: true,\n fetch: async (input, init) => {\n if (!USE_ASK_AI_TOKEN) {\n return fetch(input, init);\n }\n\n if (!askAiConfigurationId) {\n throw new Error('Ask AI assistant ID is required');\n }\n const token = await getValidToken({ assistantId: askAiConfigurationId });\n const headers = new Headers(init.headers);\n headers.set('authorization', `TOKEN ${token}`);\n\n return fetch(input, { ...init, headers });\n },\n headers: {\n 'Content-Type': 'application/json',\n 'X-Algolia-API-Key': askAiConfig?.apiKey || apiKey,\n 'X-Algolia-Application-Id': askAiConfig?.appId || appId,\n 'X-Algolia-Index-Name': askAiConfig?.indexName || indexName,\n 'X-Algolia-Assistant-Id': askAiConfigurationId || '',\n },\n body: askAiSearchParameters ? { searchParameters: askAiSearchParameters } : {},\n onError(streamError) {\n setAskAiStreamError(streamError);\n },\n });\n\n const prevStatus = React.useRef(status);\n React.useEffect(() => {\n if (disableUserPersonalization) {\n return;\n }\n // if we just transitioned from \"streaming\" → \"ready\", persist\n if (prevStatus.current === 'streaming' && status === 'ready') {\n conversations.add(buildDummyAskAiHit(messages[0].content, messages));\n }\n prevStatus.current = status;\n }, [status, messages, conversations, disableUserPersonalization]);\n\n const saveRecentSearch = React.useCallback(\n function saveRecentSearch(item: InternalDocSearchHit) {\n if (disableUserPersonalization) {\n return;\n }\n\n // We don't store `content` record, but their parent if available.\n const search = item.type === 'content' ? item.__docsearch_parent : item;\n\n // We save the recent search only if it's not favorited.\n if (search && favoriteSearches.getAll().findIndex((x) => x.objectID === search.objectID) === -1) {\n recentSearches.add(search);\n }\n },\n [favoriteSearches, recentSearches, disableUserPersonalization],\n );\n\n const sendItemClickEvent = React.useCallback(\n (item: InternalDocSearchHit) => {\n if (!state.context.algoliaInsightsPlugin || !item.__autocomplete_id) return;\n\n const insightsItem = item as AlgoliaInsightsHit;\n\n const insightsClickParams = {\n eventName: 'Item Selected',\n index: insightsItem.__autocomplete_indexName,\n items: [insightsItem],\n positions: [item.__autocomplete_id],\n queryID: insightsItem.__autocomplete_queryID,\n };\n\n state.context.algoliaInsightsPlugin.insights.clickedObjectIDsAfterSearch(insightsClickParams);\n },\n [state.context.algoliaInsightsPlugin],\n );\n\n const autocompleteRef =\n React.useRef<\n ReturnType<\n typeof createAutocomplete<\n InternalDocSearchHit,\n React.FormEvent<HTMLFormElement>,\n React.MouseEvent,\n React.KeyboardEvent\n >\n >\n >(undefined);\n\n const handleAskAiToggle = React.useCallback(\n (toggle: boolean, query: string) => {\n onAskAiToggle(toggle);\n append({\n role: 'user',\n content: query,\n });\n\n if (dropdownRef.current) {\n // some test environments (like jsdom) don't implement element.scrollTo\n const el = dropdownRef.current;\n if (typeof (el as any).scrollTo === 'function') {\n el.scrollTo({ top: 0, behavior: 'smooth' });\n } else {\n // fallback for environments without scrollTo support\n el.scrollTop = 0;\n }\n }\n\n // clear the query\n if (autocompleteRef.current) {\n autocompleteRef.current.setQuery('');\n }\n },\n [onAskAiToggle, append],\n );\n\n // feedback handler\n const handleFeedbackSubmit = React.useCallback(\n async (messageId: string, thumbs: 0 | 1): Promise<void> => {\n if (!askAiConfigurationId || !appId) return;\n const res = await postFeedback({\n assistantId: askAiConfigurationId,\n thumbs,\n messageId,\n appId,\n });\n if (res.status >= 300) throw new Error('Failed, try again later');\n conversations.addFeedback?.(messageId, thumbs === 1 ? 'like' : 'dislike');\n },\n [askAiConfigurationId, appId, conversations],\n );\n\n if (!autocompleteRef.current) {\n autocompleteRef.current = createAutocomplete({\n id: 'docsearch',\n defaultActiveItemId: 0,\n openOnFocus: true,\n initialState: {\n query: initialQuery,\n context: {\n searchSuggestions: [],\n },\n },\n insights: Boolean(insights),\n navigator,\n onStateChange(props) {\n setState(props.state);\n },\n getSources({ query, state: sourcesState, setContext, setStatus }) {\n if (!query) {\n const noQuerySources = buildNoQuerySources({\n recentSearches,\n favoriteSearches,\n saveRecentSearch,\n onClose,\n disableUserPersonalization,\n canHandleAskAi,\n });\n\n const recentConversationSource: Array<AutocompleteSource<InternalDocSearchHit & { messages?: Message[] }>> =\n canHandleAskAi\n ? [\n {\n sourceId: 'recentConversations',\n getItems(): InternalDocSearchHit[] {\n if (disableUserPersonalization) {\n return [];\n }\n return conversations.getAll() as unknown as InternalDocSearchHit[];\n },\n onSelect({ item }): void {\n if (item.messages) {\n setMessages(item.messages as any);\n onAskAiToggle(true);\n }\n },\n },\n ]\n : [];\n return [...noQuerySources, ...recentConversationSource];\n }\n\n const querySourcesState: BuildQuerySourcesState = { context: sourcesState.context };\n\n // Algolia sources\n const algoliaSourcesPromise = buildQuerySources({\n query,\n state: querySourcesState,\n setContext,\n setStatus,\n searchClient,\n indexName,\n searchParameters,\n snippetLength,\n insights: Boolean(insights),\n appId,\n apiKey,\n maxResultsPerGroup,\n transformItems,\n saveRecentSearch,\n onClose,\n });\n\n // AskAI source\n const askAiSource: Array<AutocompleteSource<InternalDocSearchHit>> = canHandleAskAi\n ? [\n {\n sourceId: 'askAI',\n getItems(): InternalDocSearchHit[] {\n // return a single item representing the Ask AI action\n // placeholder data matching the InternalDocSearchHit structure\n const askItem: InternalDocSearchHit = {\n type: 'askAI',\n query,\n url_without_anchor: '',\n objectID: `ask-ai-button`,\n content: null,\n url: '',\n anchor: null,\n hierarchy: {\n lvl0: 'Ask AI', // Or contextually relevant\n lvl1: query,\n lvl2: null,\n lvl3: null,\n lvl4: null,\n lvl5: null,\n lvl6: null,\n },\n _highlightResult: {} as any,\n _snippetResult: {} as any,\n __docsearch_parent: null,\n };\n return [askItem];\n },\n onSelect({ item }): void {\n if (item.type === 'askAI' && item.query) {\n handleAskAiToggle(true, item.query);\n }\n },\n },\n ]\n : [];\n\n // Combine Algolia results (once resolved) with the Ask AI source\n return algoliaSourcesPromise.then((algoliaSources) => {\n return [...askAiSource, ...algoliaSources];\n });\n },\n });\n }\n\n const autocomplete = autocompleteRef.current;\n\n const { getEnvironmentProps, getRootProps, refresh } = autocomplete;\n\n useTouchEvents({\n getEnvironmentProps,\n panelElement: dropdownRef.current,\n formElement: formElementRef.current,\n inputElement: inputRef.current,\n });\n useTrapFocus({ container: containerRef.current });\n useTheme({ theme });\n\n React.useEffect(() => {\n document.body.classList.add('DocSearch--active');\n\n return (): void => {\n document.body.classList.remove('DocSearch--active');\n\n // IE11 doesn't support `scrollTo` so we check that the method exists\n // first.\n window.scrollTo?.(0, initialScrollY);\n };\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n React.useLayoutEffect(() => {\n // Calculate the scrollbar width to compensate for removed scrollbar\n const scrollBarWidth = window.innerWidth - document.body.clientWidth;\n // Prevent layout shift by adding appropriate margin to the body\n document.body.style.marginRight = `${scrollBarWidth}px`;\n\n return (): void => {\n document.body.style.marginRight = '0px';\n };\n }, []);\n\n React.useEffect(() => {\n const isMobileMediaQuery = window.matchMedia('(max-width: 768px)');\n\n if (isMobileMediaQuery.matches) {\n snippetLength.current = 5;\n }\n }, []);\n\n React.useEffect(() => {\n if (dropdownRef.current && !isAskAiActive) {\n scrollToUtils(dropdownRef.current);\n }\n }, [state.query, isAskAiActive]);\n\n // We don't focus the input when there's an initial query (i.e. Selection\n // Search) because users rather want to see the results directly, without the\n // keyboard appearing.\n // We therefore need to refresh the autocomplete instance to load all the\n // results, which is usually triggered on focus.\n React.useEffect(() => {\n if (initialQuery.length > 0) {\n refresh();\n\n if (inputRef.current) {\n inputRef.current.focus();\n }\n }\n }, [initialQuery, refresh]);\n\n // We rely on a CSS property to set the modal height to the full viewport height\n // because all mobile browsers don't compute their height the same way.\n // See https://css-tricks.com/the-trick-to-viewport-units-on-mobile/\n React.useEffect(() => {\n function setFullViewportHeight(): void {\n if (modalRef.current) {\n const vh = window.innerHeight * 0.01;\n modalRef.current.style.setProperty('--docsearch-vh', `${vh}px`);\n }\n }\n\n setFullViewportHeight();\n\n window.addEventListener('resize', setFullViewportHeight);\n\n return (): void => {\n window.removeEventListener('resize', setFullViewportHeight);\n };\n }, []);\n\n // Refresh the autocomplete results when ask ai is toggled off\n // helps return to the previous ac state and start screen\n React.useEffect(() => {\n if (!isAskAiActive) {\n autocomplete.refresh();\n setMessages([]);\n }\n }, [isAskAiActive, autocomplete, setMessages]);\n\n // hide the dropdown on idle and no collections\n let showDocsearchDropdown = true;\n const hasCollections = state.collections.some((collection) => collection.items.length > 0);\n if (state.status === 'idle' && hasCollections === false && state.query.length === 0 && !isAskAiActive) {\n showDocsearchDropdown = false;\n }\n\n return (\n <div\n ref={containerRef}\n {...getRootProps({ 'aria-expanded': true })}\n className={[\n 'DocSearch',\n 'DocSearch-Container',\n state.status === 'stalled' && 'DocSearch-Container--Stalled',\n state.status === 'error' && 'DocSearch-Container--Errored',\n ]\n .filter(Boolean)\n .join(' ')}\n role=\"button\"\n tabIndex={0}\n onMouseDown={(event) => {\n if (event.target === event.currentTarget) {\n onClose();\n }\n }}\n >\n <div className=\"DocSearch-Modal\" ref={modalRef}>\n <header className=\"DocSearch-SearchBar\" ref={formElementRef}>\n <SearchBox\n {...autocomplete}\n state={state}\n placeholder={placeholder || 'Search docs'}\n autoFocus={initialQuery.length === 0}\n inputRef={inputRef}\n isFromSelection={Boolean(initialQuery) && initialQuery === initialQueryFromSelection}\n translations={searchBoxTranslations}\n isAskAiActive={isAskAiActive}\n askAiStatus={status}\n onClose={onClose}\n onAskAiToggle={onAskAiToggle}\n onAskAgain={(query) => {\n handleAskAiToggle(true, query);\n }}\n />\n </header>\n\n {showDocsearchDropdown && (\n <div className=\"DocSearch-Dropdown\" ref={dropdownRef}>\n <ScreenState\n {...autocomplete}\n indexName={indexName}\n state={state}\n hitComponent={hitComponent}\n resultsFooterComponent={resultsFooterComponent}\n disableUserPersonalization={disableUserPersonalization}\n recentSearches={recentSearches}\n favoriteSearches={favoriteSearches}\n conversations={conversations}\n inputRef={inputRef}\n translations={screenStateTranslations}\n getMissingResultsUrl={getMissingResultsUrl}\n isAskAiActive={isAskAiActive}\n canHandleAskAi={canHandleAskAi}\n messages={messages}\n askAiStreamError={askAiStreamError}\n askAiFetchError={askAiFetchError}\n status={status}\n hasCollections={hasCollections}\n onAskAiToggle={onAskAiToggle}\n onItemClick={(item, event) => {\n // if the item is askAI toggle the screen\n if (item.type === 'askAI' && item.query) {\n // if the item is askAI and the anchor is stored\n if (item.anchor === 'stored' && 'messages' in item) {\n setMessages(item.messages as any);\n onAskAiToggle(true);\n } else {\n handleAskAiToggle(true, item.query);\n }\n event.preventDefault();\n return;\n }\n\n // If insights is active, send insights click event\n sendItemClickEvent(item);\n\n saveRecentSearch(item);\n if (!isModifierEvent(event)) {\n onClose();\n }\n }}\n onFeedback={handleFeedbackSubmit}\n />\n </div>\n )}\n <footer className=\"DocSearch-Footer\">\n <Footer translations={footerTranslations} isAskAiActive={isAskAiActive} />\n </footer>\n </div>\n </div>\n );\n}\n","import React from 'react';\n\ninterface UseTrapFocusProps {\n container: HTMLElement | null;\n}\n\nexport function useTrapFocus({ container }: UseTrapFocusProps): void {\n React.useEffect(() => {\n if (!container) {\n return undefined;\n }\n\n const focusableElements = container.querySelectorAll<HTMLElement>(\n 'a[href]:not([disabled]), button:not([disabled]), input:not([disabled])',\n );\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n\n function trapFocus(event: KeyboardEvent): void {\n if (event.key !== 'Tab') {\n return;\n }\n\n if (event.shiftKey) {\n if (document.activeElement === firstElement) {\n event.preventDefault();\n lastElement.focus();\n }\n } else if (document.activeElement === lastElement) {\n event.preventDefault();\n firstElement.focus();\n }\n }\n\n container.addEventListener('keydown', trapFocus);\n\n return (): void => {\n container.removeEventListener('keydown', trapFocus);\n };\n }, [container]);\n}\n","import type { AutocompleteApi } from '@algolia/autocomplete-core';\nimport React from 'react';\n\ninterface UseTouchEventsProps {\n getEnvironmentProps: AutocompleteApi<any>['getEnvironmentProps'];\n panelElement: HTMLDivElement | null;\n formElement: HTMLDivElement | null;\n inputElement: HTMLInputElement | null;\n}\n\nexport function useTouchEvents({\n getEnvironmentProps,\n panelElement,\n formElement,\n inputElement,\n}: UseTouchEventsProps): void {\n React.useEffect(() => {\n if (!(panelElement && formElement && inputElement)) {\n return undefined;\n }\n\n const { onTouchStart, onTouchMove } = getEnvironmentProps({\n panelElement,\n formElement,\n inputElement,\n });\n\n window.addEventListener('touchstart', onTouchStart);\n window.addEventListener('touchmove', onTouchMove);\n\n return (): void => {\n window.removeEventListener('touchstart', onTouchStart);\n window.removeEventListener('touchmove', onTouchMove);\n };\n }, [getEnvironmentProps, panelElement, formElement, inputElement]);\n}\n","export function scrollTo(el: HTMLElement): void {\n // some test environments (like jsdom) don't implement element.scrollTo\n if (typeof el.scrollTo === 'function') {\n el.scrollTo({ top: 0, behavior: 'smooth' });\n } else {\n // fallback for environments without scrollTo support\n el.scrollTop = 0;\n }\n}\n","import React from 'react';\n\nexport interface UseDocSearchKeyboardEventsProps {\n isOpen: boolean;\n onOpen: () => void;\n onClose: () => void;\n onInput?: (event: KeyboardEvent) => void;\n searchButtonRef: React.RefObject<HTMLButtonElement | null>;\n isAskAiActive: boolean;\n onAskAiToggle: (toggle: boolean) => void;\n}\n\nfunction isEditingContent(event: KeyboardEvent): boolean {\n const element = event.composedPath()[0] as HTMLElement;\n const tagName = element.tagName;\n\n return element.isContentEditable || tagName === 'INPUT' || tagName === 'SELECT' || tagName === 'TEXTAREA';\n}\n\nexport function useDocSearchKeyboardEvents({\n isOpen,\n onOpen,\n onClose,\n onInput,\n isAskAiActive,\n onAskAiToggle,\n searchButtonRef,\n}: UseDocSearchKeyboardEventsProps): void {\n React.useEffect(() => {\n function onKeyDown(event: KeyboardEvent): void {\n if (isOpen && event.code === 'Escape' && isAskAiActive) {\n onAskAiToggle(false);\n return;\n }\n\n if (\n (event.code === 'Escape' && isOpen) ||\n // The `Cmd+K` shortcut both opens and closes the modal.\n // We need to check for `event.key` because it can be `undefined` with\n // Chrome's autofill feature.\n // See https://github.com/paperjs/paper.js/issues/1398\n (event.key?.toLowerCase() === 'k' && (event.metaKey || event.ctrlKey)) ||\n // The `/` shortcut opens but doesn't close the modal because it's\n // a character.\n (!isEditingContent(event) && event.key === '/' && !isOpen)\n ) {\n event.preventDefault();\n\n if (isOpen) {\n onClose();\n } else if (!document.body.classList.contains('DocSearch--active')) {\n // We check that no other DocSearch modal is showing before opening\n // another one.\n onOpen();\n }\n\n return;\n }\n\n if (searchButtonRef && searchButtonRef.current === document.activeElement && onInput) {\n if (/[a-zA-Z0-9]/.test(String.fromCharCode(event.keyCode))) {\n onInput(event);\n }\n }\n }\n\n window.addEventListener('keydown', onKeyDown);\n\n return (): void => {\n window.removeEventListener('keydown', onKeyDown);\n };\n }, [isOpen, onOpen, onClose, onInput, searchButtonRef, isAskAiActive, onAskAiToggle]);\n}\n","import type { AutocompleteOptions, AutocompleteState } from '@algolia/autocomplete-core';\nimport type { LiteClient, SearchParamsObject } from 'algoliasearch/lite';\nimport React, { type JSX } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { DocSearchButton } from './DocSearchButton';\nimport { DocSearchModal } from './DocSearchModal';\nimport type { DocSearchHit, DocSearchTheme, InternalDocSearchHit, StoredDocSearchHit } from './types';\nimport { useDocSearchKeyboardEvents } from './useDocSearchKeyboardEvents';\nimport { useTheme } from './useTheme';\n\nimport type { ButtonTranslations, ModalTranslations } from '.';\n\nexport type DocSearchTranslations = Partial<{\n button: ButtonTranslations;\n modal: ModalTranslations;\n}>;\n\n// The interface that describes the minimal implementation required for the algoliasearch client, when using the [`transformSearchClient`](https://docsearch.algolia.com/docs/api/#transformsearchclient) option.\nexport type DocSearchTransformClient = {\n search: LiteClient['search'];\n addAlgoliaAgent: LiteClient['addAlgoliaAgent'];\n transporter: Pick<LiteClient['transporter'], 'algoliaAgent'>;\n};\n\nexport type DocSearchAskAi = {\n /**\n * The index name to use for the ask AI feature. Your assistant will search this index for relevant documents.\n * If not provided, the index name will be used.\n */\n indexName?: string;\n /**\n * The API key to use for the ask AI feature. Your assistant will use this API key to search the index.\n * If not provided, the API key will be used.\n */\n apiKey?: string;\n /**\n * The app ID to use for the ask AI feature. Your assistant will use this app ID to search the index.\n * If not provided, the app ID will be used.\n */\n appId?: string;\n /**\n * The assistant ID to use for the ask AI feature.\n */\n assistantId: string | null;\n /**\n * The search parameters to use for the ask AI feature.\n */\n searchParameters?: {\n facetFilters?: SearchParamsObject['facetFilters'];\n };\n};\n\nexport interface DocSearchProps {\n appId: string;\n apiKey: string;\n indexName: string;\n askAi?: DocSearchAskAi | string;\n theme?: DocSearchTheme;\n placeholder?: string;\n searchParameters?: SearchParamsObject;\n maxResultsPerGroup?: number;\n transformItems?: (items: DocSearchHit[]) => DocSearchHit[];\n hitComponent?: (props: { hit: InternalDocSearchHit | StoredDocSearchHit; children: React.ReactNode }) => JSX.Element;\n resultsFooterComponent?: (props: { state: AutocompleteState<InternalDocSearchHit> }) => JSX.Element | null;\n transformSearchClient?: (searchClient: DocSearchTransformClient) => DocSearchTransformClient;\n disableUserPersonalization?: boolean;\n initialQuery?: string;\n navigator?: AutocompleteOptions<InternalDocSearchHit>['navigator'];\n translations?: DocSearchTranslations;\n getMissingResultsUrl?: ({ query }: { query: string }) => string;\n insights?: AutocompleteOptions<InternalDocSearchHit>['insights'];\n}\n\nexport function DocSearch({ ...props }: DocSearchProps): JSX.Element {\n const searchButtonRef = React.useRef<HTMLButtonElement>(null);\n const [isOpen, setIsOpen] = React.useState(false);\n const [initialQuery, setInitialQuery] = React.useState<string | undefined>(props?.initialQuery || undefined);\n const [isAskAiActive, setIsAskAiActive] = React.useState(false);\n\n let currentPlaceholder =\n props?.translations?.modal?.searchBox?.placeholderText || props?.placeholder || 'Search docs';\n\n // check if the instance is configured to handle ask ai\n const canHandleAskAi = Boolean(props?.askAi);\n\n if (canHandleAskAi) {\n currentPlaceholder = props?.translations?.modal?.searchBox?.placeholderText || 'Search docs or ask AI a question';\n }\n\n if (isAskAiActive) {\n currentPlaceholder = props?.translations?.modal?.searchBox?.placeholderTextAskAi || 'Ask another question...';\n }\n\n const onAskAiToggle = React.useCallback(\n (askAitoggle: boolean) => {\n setIsAskAiActive(askAitoggle);\n },\n [setIsAskAiActive],\n );\n\n const onOpen = React.useCallback(() => {\n setIsOpen(true);\n }, [setIsOpen]);\n\n const onClose = React.useCallback(() => {\n setIsOpen(false);\n setInitialQuery(props?.initialQuery);\n if (isAskAiActive) {\n setIsAskAiActive(false);\n }\n }, [setIsOpen, props.initialQuery, isAskAiActive, setIsAskAiActive]);\n\n const onInput = React.useCallback(\n (event: KeyboardEvent) => {\n setIsOpen(true);\n setInitialQuery(event.key);\n },\n [setIsOpen, setInitialQuery],\n );\n\n useDocSearchKeyboardEvents({\n isOpen,\n onOpen,\n onClose,\n onInput,\n isAskAiActive,\n onAskAiToggle,\n searchButtonRef,\n });\n useTheme({ theme: props.theme });\n\n return (\n <>\n <DocSearchButton ref={searchButtonRef} translations={props?.translations?.button} onClick={onOpen} />\n\n {isOpen &&\n createPortal(\n <DocSearchModal\n {...props}\n placeholder={currentPlaceholder}\n initialScrollY={window.scrollY}\n initialQuery={initialQuery}\n translations={props?.translations?.modal}\n isAskAiActive={isAskAiActive}\n canHandleAskAi={canHandleAskAi}\n onAskAiToggle={onAskAiToggle}\n onClose={onClose}\n />,\n document.body,\n )}\n </>\n );\n}\n"],"names":["MetaKeyIcon","React","createElement","width","height","viewBox","fill","xmlns","d","KKeyIcon","ControlKeyIcon","SearchIcon","_ref","_ref$size","size","undefined","_ref$color","color","className","cx","cy","r","stroke","strokeWidth","strokeLinecap","strokeLinejoin","useTheme","theme","useEffect","previousTheme","document","documentElement","dataset","ACTION_KEY_DEFAULT","DocSearchButton","forwardRef","ref","_ref$translations","translations","props","_objectWithoutProperties","_excluded","_translations$buttonT","buttonText","_translations$buttonA","buttonAriaLabel","_useState2","_slicedToArray","useState","key","setKey","navigator","test","platform","_ref3","actionKeyReactsTo","actionKeyAltText","actionKeyChild","shortcut","concat","_extends","type","Fragment","DocSearchButtonKey","reactsToKey","_ref4","children","_useState4","isKeyDown","setIsKeyDown","window","addEventListener","handleKeyDown","handleKeyUp","removeEventListener","e","_a","marker","symbol","Symbol","for","_AISDKError","Error","constructor","name","name14","message","cause","super","this","isInstance","error","hasMarker","marker15","markerSymbol","AISDKError","getErrorMessage","JSON","stringify","_a4","name3","marker4","symbol4","InvalidArgumentError","argument","_a7","name6","marker7","symbol7","JSONParseError","text","_a13","name12","marker13","symbol13","TypeValidationError","_TypeValidationError","value","wrap","hasBuffer","Buffer","suspectProtoRx","suspectConstructorRx","_parse","reviver","options","_typeof","isBuffer","toString","charCodeAt","slice","obj","parse","protoAction","constructorAction","filter","safe","arguments","length","_ref$protoAction","_ref$constructorActio","next","nodes","_step","_iterator","_createForOfIteratorHelper","s","n","done","node","Object","prototype","hasOwnProperty","call","SyntaxError","__proto__","push","err","f","stackTraceLimit","secureJsonParseModule","exports","default","safeParse","_e","scan","generateId","prefix","defaultSize","alphabet","separator","generator","id","i","Math","random","customAlphabet","includes","createIdGenerator","validatorSymbol","asValidator","isValidator","zodSchema","validate","result","success","data","safeParseJSON","schema","SecureJSON","rawValue","validationResult","validator2","safeValidateTypes","Set","textStreamPart","code","errorStreamPart","assistantMessageStreamPart","role","Array","isArray","content","every","item","assistantControlDataStreamPart","threadId","messageId","dataMessageStreamPart","fixJson","input","stack","lastValidIndex","literalStart","processValueStart","char","swapState","pop","processAfterObjectValue","processAfterArrayValue","partialLiteral","substring","startsWith","map","part","dataStreamParts","toolCallId","toolName","args","argsTextDelta","finishReason","usage","promptTokens","Number","NaN","completionTokens","isContinued","signature","mimeType","dataStreamPartsByCode","fromEntries","validCodes2","parseDataStreamPart","line","firstSeparatorIndex","indexOf","textValue","jsonValue","NEWLINE","concatChunks","chunks","totalLength","concatenatedChunks","Uint8Array","offset","chunk","set","async","processChatResponse","stream","update","onToolCall","onFinish","generateId2","generateIdFunction","getCurrentDate","Date","lastMessage","_b","replaceLastMessage","step","toolInvocations","reduce","max","toolInvocation","_a2","structuredClone","createdAt","parts","currentTextPart","currentReasoningPart","currentReasoningTextDetail","updateToolInvocationPart","invocation","find","part2","messageAnnotations","annotations","partialToolCalls","totalTokens","execUpdate","copiedData","copiedMessage","revisionId","onTextPart","onReasoningPart","onReasoningSignaturePart","onRedactedReasoningPart","onSourcePart","onFilePart","onDataPart","onErrorPart","onToolCallStreamingStartPart","onToolCallDeltaPart","onToolCallPart","onToolResultPart","onMessageAnnotationsPart","onFinishMessagePart","onFinishStepPart","onStartStepPart","reader","getReader","decoder","TextDecoder","read","streamParts","decode","split","value2","processDataStream","details","reasoning","source","index","state","partialToolCall","partialArgs","jsonText","parsePartialJson","toolCall","invocation2","toolInvocationIndex","findIndex","calculateLanguageModelUsage","processChatTextResponse","generateIdFunction2","textPart","resultMessage","pipeThrough","TextDecoderStream","processTextStream","getOriginalFetch","fetch","extractMaxToolInvocationStep","getMessageParts","fillMessageParts","messages","isDeepEqualData","obj1","obj2","getTime","keys1","keys","keys2","prepareAttachmentsForRequest","attachmentsFromOptions","globalThis","FileList","Promise","all","from","attachment","dataUrl","resolve","reject","FileReader","onload","readerEvent","target","onerror","readAsDataURL","contentType","url","isAssistantMessageWithCompletedToolCalls","lastStepStartIndex","lastIndex","lastStepToolInvocations","shimModule","require$$0","objectIs","is","x","y","useLayoutEffect","useDebugValue","checkIfSnapshotChanged","inst","latestGetSnapshot","getSnapshot","nextValue","shim","subscribe","_useState","forceUpdate","useSyncExternalStoreShim_production","useSyncExternalStore","has","SWRGlobalState","WeakMap","noop","UNDEFINED","OBJECT","isUndefined","v","isFunction","mergeObjects","a","b","isPromiseLike","then","EMPTY_CACHE","INITIAL_CACHE","STR_UNDEFINED","isWindowDefined","isDocumentDefined","isLegacyDeno","createCacheHelper","cache","get","info","prev","online","onWindowEvent","offWindowEvent","bind","preset","isOnline","isVisible","visibilityState","defaultConfigOptions","initFocus","callback","initReconnect","onOnline","onOffline","IS_REACT_LEGACY","useId","IS_SERVER","rAF","setTimeout","useIsomorphicLayoutEffect","navigatorConnection","connection","slowConnection","effectiveType","saveData","table","isObjectType","counter","stableHash","arg","isDate","isRegex","isPlainObject","toJSON","sort","serialize","__timestamp","getTimestamp","internalMutate","_key","_data","_opts","populateCache","throwOnError","revalidate","rollbackOnErrorOption","rollbackOnError","optimisticData","keyFilter","matchedKeys","it","_k","mutateByKey","EVENT_REVALIDATORS","MUTATION","FETCH","PRELOAD","startRevalidate","revalidators","beforeMutationTs","hasOptimisticData","displayedData","currentData","_c","committedData","catch","populateCachedData","revalidateAllKeys","compare","dequal","foo","bar","ctor","len","RegExp","mutate","provider","opts","create","unmount","subscriptions","subs","splice","setter","fn","initProvider","releaseFocus","releaseReconnect","delete","initCache","Map","defaultConfig","onLoadingSlow","onSuccess","onError","onErrorRetry","_","__","config","maxRetryCount","errorRetryCount","currentRetryCount","retryCount","timeout","errorRetryInterval","onDiscarded","revalidateOnFocus","revalidateOnReconnect","revalidateIfStale","shouldRetryOnError","focusThrottleInterval","dedupingInterval","loadingTimeout","isPaused","fallback","SWRConfigContext","createContext","enableDevtools","__SWR_DEVTOOLS_USE__","use","BUILT_IN_MIDDLEWARE","useSWRNext","key_","fetcher_","req","__SWR_DEVTOOLS_REACT__","thenable","status","reason","WITH_DEDUPE","dedupe","useSWR","hook","fetcher","suspense","fallbackData","revalidateOnMount","refreshInterval","refreshWhenHidden","refreshWhenOffline","keepPreviousData","fnArg","serialize$1","initialMountedRef","useRef","unmountedRef","keyRef","fetcherRef","configRef","getConfig","current","isActive","getCache","setCache","subscribeCache","getInitialCache","stateDependencies","isUndefined$1","UNDEFINED$1","isEqual","t","returnedData","useMemo","shouldStartRequest","getSelectedCache","snapshot","isValidating","isLoading","cachedData","initialData","clientSnapshot","serverSnapshot","memorizedSnapshot","newSnapshot","cached","useCallback","isInitialMount","hasRevalidator","laggyDataRef","shouldDoInitialRevalidation","defaultValidatingState","revalidateOpts","currentFetcher","newData","startAt","loading","shouldStartNewRequest","callbackSafeguard","finalState","finishRequestAndUpdateState","cleanupState","requestInfo","initialState","mutationInfo","cacheData","currentConfig","isFunction$1","boundMutate","softRevalidate","nextFocusRevalidatedAt","initNow","now","unsubEvents","callbacks","keyedRevalidators","subscribeCallback","timer","interval","execute","clearTimeout","promise","fallbackConfig","useContext","_config","normalize","u1","f1","u2","f2","mergeConfigs","middleware","throttleit","function_","wait","TypeError","timeoutId","lastCallTime","_this","_len","arguments_","delayForNextCall","apply","throttle","waitMs","throttleFunction","useStableValue","latestValue","setValue","useState2","useChat","api","initialMessages","initialInput","sendExtraMessageFields","experimental_prepareRequestBody","maxSteps","streamProtocol","onResponse","credentials","headers","body","generateIdFunc","fetch2","keepLastMessageOnError","experimental_throttle","throttleWaitMs","hookId","useState3","chatId","chatKey","stableInitialMessages","processedInitialMessages","messagesRef","useRef2","useEffect2","streamData","mutateStreamData","streamDataRef","mutateStatus","setError","abortControllerRef","extraMetadataRef","triggerRequest","useCallback2","chatRequest","requestType","chatMessages","messageCount","maxStep","abortController","AbortController","throttledMutate","throttledMutateStreamData","previousMessages","constructedMessagesPayload","experimental_attachments","existingData","restoreMessagesOnFailure","onUpdate","request","method","signal","response","ok","callChatApi","requestData","requestBody","messages2","originalMaxToolInvocationStep","originalMessageCount","shouldResubmitMessages","append","headers2","body2","attachmentsForRequest","reload","stop","abort","experimental_resume","setMessages","messagesWithParts","setData","setInput","handleSubmit","event","metadata","preventDefault","allowEmptySubmit","addToolResult","currentMessages","toolResult","invocationPart","updateToolCallResult","handleInputChange","debounce","time","timerId","flatten","values","autocompleteId","getItemsCount","collections","sum","collection","items","isPrimitive","first","second","_i","_Object$keys","userAgents","segment","version","createClickedEvent","_ref$items","__autocomplete_indexName","positions","objectID","queryID","__autocomplete_queryID","algoliaSource","arr","_arrayWithHoles","iterator","_s","_x","_r","_arr","_n","_d","return","_iterableToArrayLimit","o","minLen","_arrayLikeToArray","_unsupportedIterableToArray","_nonIterableRest","arr2","_excluded2","_toConsumableArray","_arrayWithoutHoles","iter","_iterableToArray","_nonIterableSpread","excluded","sourceKeys","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","ownKeys","object","enumerableOnly","symbols","sym","getOwnPropertyDescriptor","enumerable","_objectSpread","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","hint","prim","toPrimitive","res","String","_toPrimitive","_toPropertyKey","configurable","writable","mapToInsightsParamsApi","params","param","objectIDs","_ref2","createSearchInsightsApi","searchInsights","_split$map2","major","minor","canSendHeaders","sendToInsights","payloads","_items$0$__autocomple","__autocomplete_algoliaCredentials","appId","apiKey","init","setAuthenticatedUserToken","authenticatedUserToken","setUserToken","userToken","clickedObjectIDsAfterSearch","clickedObjectIDs","_len2","_key2","clickedFilters","_len3","_key3","convertedObjectIDsAfterSearch","_len4","_key4","convertedObjectIDs","_len5","_key5","convertedFilters","_len6","_key6","viewedObjectIDs","_len7","_key7","acc","chunkSize","payload","_ref5","viewedFilters","_len8","_key8","createViewedEvents","itemsByIndexName","_acc$current$__autoco","indexName","isAlgoliaInsightsHit","hit","ALGOLIA_INSIGHTS_VERSION","ALGOLIA_INSIGHTS_SRC","sendViewedObjectIDs","onItemsChange","insights","insightsEvents","eventName","createAlgoliaInsightsPlugin","_getOptions","_ref8","getAlgoliaSources","context","onSelect","_ref9","onActive","__autocomplete_clickAnalytics","getOptions","providedInsightsClient","insightsClient","insightsInitParams","onSelectEvent","onActiveEvent","safelyRunOnBrowser","pointer","AlgoliaAnalyticsObject","queue","environment","errorMessage","script","src","console","appendChild","loadInsights","partial","previousItems","debouncedOnStateChange","isOpen","setContext","setInsightsContext","algoliaInsightsPlugin","__algoliaSearchParameters","clickAnalytics","normalizeUserToken","_error","getItems","_ref6","onStateChange","_ref7","__autocomplete_pluginOptions","_context$algoliaInsig","__automaticInsights","createInternalCancelablePromise","onfulfilled","onrejected","createCallback","finally","onfinally","onCancelList","cancel","isCanceled","cancelable","onResult","_waitPromise","_hasWaitPromiseResolved","createCancelablePromiseList","list","add","cancelablePromise","cancelAll","isEmpty","race","getNextActiveItemId","moveAmount","baseIndex","itemCount","defaultActiveItemId","numericIndex","allowArrayLike","F","normalCompletion","didErr","_e2","getPluginSubmitPromise","plugins","pendingRequests","waitUntilComplete","timeouts","_plugin$__autocomplet","_plugin$__autocomplet2","_plugin$__autocomplet3","awaitSubmit","getActiveItem","collectionIndex","collectionsCount","activeItemId","getCollectionFromActiveItemId","isOffsetFound","previousItemsOffset","currentCollection","getRelativeActiveItemId","itemInputValue","getItemInputValue","itemUrl","getItemUrl","getAutocompleteElementId","autocompleteInstanceId","elementId","sourceId","Boolean","join","replace","regex","getNativeEvent","nativeEvent","createStore","reducer","onStoreStateChange","getState","dispatch","action","prevState","getDefaultProps","pluginSubscribers","_props$id","debug","openOnFocus","enterKeyHint","ignoreCompositionEvents","placeholder","autoFocus","stallThreshold","shouldPanelOpen","reshape","sources","query","completion","_props$onStateChange","_x$onStateChange","onSubmit","_props$onSubmit","_x$onSubmit","onReset","_props$onReset","_x$onReset","getSources","plugin","seenSourceIds","maybeSource","defaultSource","setIsOpen","onResolve","__default","normalizedSource","getNormalizedSources","nested","_x$onSelect","_x$onActive","_x$onResolve","navigate","location","assign","navigateNewTab","windowReference","open","focus","navigateNewWindow","isDescription","preResolve","itemsOrDescription","description","contextParameters","requesterId","_state$context$key","requests","queries","transformResponse","searchClient","container","_container$items","maybeDescription","responses","postResolve","store","rawResults","matches","results","transform","hits","facetHits","_facetHits","facetHit","label","count","_highlightResult","highlighted","basePromiseId","latestResolvedId","latestResolvedValue","lastStalledId","runConcurrentSafePromise","currentPromiseId","onInput","_ref$nextState","nextState","refresh","setters","setCollections","setQuery","setActiveItemId","setStatus","_nextState$isOpen","_request","_store$getState$conte","some","_automaticInsights","isSearchResponseWithAutomaticInsightsFlag","originalSourcesBySourceId","sourcesBySourceId","_nextState$isOpen2","isPanelOpen","highlightedItem","_excluded3","_excluded4","_excluded5","_excluded6","getPropGetters","getEnvironmentProps","providedProps","inputElement","formElement","panelElement","onMouseDownOrTouchStart","contextNode","parent","child","contains","onTouchStart","onMouseDown","onTouchMove","activeElement","blur","getRootProps","rest","getFormProps","_providedProps$inputE","noValidate","waitForSubmit","_providedProps$inputE2","getLabelProps","htmlFor","getInputProps","_props$environment$na","onFocus","_ref3$maxLength","maxLength","activeItem","shouldFallbackKeyHint","userAgent","match","isSamsung","autoComplete","autoCorrect","autoCapitalize","spellCheck","onChange","currentTarget","isComposing","onCompositionEnd","onKeyDown","triggerScrollIntoView","nodeItem","getElementById","scrollIntoViewIfNeeded","scrollIntoView","triggerOnActive","nextActiveItemId","metaKey","ctrlKey","shiftKey","altKey","_onKeyDown","onBlur","onClick","getPanelProps","onMouseLeave","getListProps","getItemProps","__autocomplete_id","onMouseMove","_item","_source","getMetadata","_options$__autocomple","_options$__autocomple2","_options$__autocomple3","optionsKey","__autocomplete_metadata","extraOptions","ua","getCompletion","_getActiveItem","stateReducer","_nextState","createAutocomplete","subscribers","_state$context","_state$context$algoli","isAlgoliaInsightsPluginEnabled","subscribePlugins","baseItemId","getAutocompleteSetters","propGetters","Event","_plugin$subscribe","insightsParams","_environment$navigato","_environment$navigato2","metadataContainer","headRef","querySelector","injectMetadata","ASK_AI_API_URL","TOKEN_KEY","isExpired","token","_decode","b64","atob","exp","_unused","inflight","getValidToken","_asyncToGenerator","_regeneratorRuntime","mark","_callee","assistantId","_context","sessionStorage","getItem","abrupt","json","setItem","postFeedback","_callee2","thumbs","_context2","Headers","sent","_x2","AlgoliaLogo","_translations$powered","poweredByText","href","hostname","rel","rx","ry","CommandIcon","ariaLabel","Footer","_ref$isAskAiActive","isAskAiActive","_translations$selectT","selectText","_translations$selectK","selectKeyAriaLabel","_translations$submitQ","submitQuestionText","_translations$navigat","navigateText","_translations$navigat2","navigateUpKeyAriaLabel","_translations$navigat3","navigateDownKeyAriaLabel","_translations$closeTe","closeText","_translations$backToS","backToSearchText","_translations$closeKe","closeKeyAriaLabel","points","Hit","LoadingIcon","strokeOpacity","fillRule","attributeName","to","dur","repeatCount","SparklesIcon","RecentIcon","CloseIcon","AlertIcon","SelectIcon","LvlIcon","SourceIcon","ContentIcon","AnchorIcon","x1","x2","y1","y2","StarIcon","ErrorIcon","NoResultsIcon","defaultAggregatedToolCallParts","before","lastSeparator","after","AggregatedSearchBlock","onSearchQueryClick","aggregatedToolCallNode","aggregatedToolCallText","_ref2$before","_ref2$separator","_ref2$lastSeparator","_ref2$after","q","idx","tabIndex","_getDefaults","breaks","extensions","gfm","hooks","pedantic","renderer","silent","tokenizer","walkTokens","_defaults","changeDefaults","newDefaults","escapeHtml","html","marked","Renderer","_ref$lang","lang","escaped","languageClass","safeCode","encodedCode","encodeURIComponent","link","title","titleAttr","hrefAttr","textEscaped","MemoizedMarkdown","memo","copyButtonText","copyButtonCopiedText","isStreaming","containerRef","querySelectorAll","btn","textContent","classList","remove","handleClick","_btn$getAttribute","closest","encoded","getAttribute","clipboard","writeText","decodeURIComponent","original","dangerouslySetInnerHTML","__html","displayName","AskAiScreenHeader","disclaimerText","AskAiExchangeCard","exchange","askAiStreamError","isLastExchange","loadingStatus","conversations","onFeedback","userMessage","assistantMessage","showActions","urlsToDisplay","markdownLinkRegex","urlRegex","links","seen","exec","extractLinksFromText","displayParts","aggregatedParts","_part$toolInvocation","_part$toolInvocation2","j","_candidate$toolInvoca","_candidate$toolInvoca2","candidate","_candidate$toolInvoca3","trim","groupConsecutiveToolResults","thinkingText","_assistantMessage$par","_toolInvocation$args","_toolInvocation$args4","preToolCallText","duringToolCallText","afterToolCallText","_toolInvocation$args2","_toolInvocation$args3","AskAiScreenFooterActions","latestAssistantMessageContent","AskAiSourcesPanel","relatedSourcesText","initialFeedback","_conversations$getOne","_message$feedback","getOne","feedback","_React$useState2","setFeedback","_React$useState4","saving","setSaving","_React$useState6","savingError","setSavingError","handleFeedback","t0","finish","_translations$likeBut","likeButtonTitle","_translations$dislike","dislikeButtonTitle","_translations$thanksF","thanksForFeedbackText","LikeButton","DislikeButton","CopyButton","RelatedSourceIcon","AskAiScreen","_ref6$translations","_translations$disclai","exchanges","grouped","_messages","handleSearchQueryClick","onAskAiToggle","reverse","_translations$copyBut","copyButtonTitle","_translations$copyBut2","isCopied","setIsCopied","disabled","ErrorScreen","_translations$titleTe","titleText","_translations$helpTex","helpText","NoResultsScreen","_translations$noResul","noResultsText","_translations$suggest","suggestedQueryText","_translations$reportM","reportMissingResultsText","_translations$reportM2","reportMissingResultsLinkText","searchSuggestions","canHandleAskAi","search","toLowerCase","inputRef","getMissingResultsUrl","getPropertyByPath","path","Snippet","attribute","_ref$tagName","tagName","Results","AskAiButton","Result","renderIcon","renderAction","onItemClick","hitComponent","actionRef","__docsearch_parent","onAnimationEnd","_actionRef$current","hierarchy","runDeleteTransition","cb","runFavoriteTransition","_ref3$askAiPlaceholde","askAiPlaceholder","groupBy","predicate","maxResultsPerGroup","identity","isModifierEvent","button","regexHighlightTags","regexHasHighlightTags","removeHighlightTags","_internalDocSearchHit","_hit$_highlightResult","internalDocSearchHit","lvl0","ResultsScreen","_collection$items","resultsFooterComponent","StartScreen","_translations$recentS","recentSearchesTitle","_translations$saveRec","saveRecentSearchButtonTitle","_translations$removeR","removeRecentSearchButtonTitle","_translations$favorit","favoriteSearchesTitle","_translations$removeF","removeFavoriteSearchButtonTitle","_translations$recentC","recentConversationsTitle","_translations$removeR2","removeRecentConversationButtonTitle","stopPropagation","favoriteSearches","recentSearches","ScreenState","_props$state","askAiFetchError","askAiScreen","errorScreen","hasCollections","resultsScreen","noResultsScreen","startScreen","_prevProps","nextProps","BackIcon","SearchBox","_translations$clearBu","clearButtonTitle","_translations$clearBu2","clearButtonAriaLabel","_translations$closeBu","closeButtonText","_translations$closeBu2","closeButtonAriaLabel","_translations$searchI","searchInputLabel","_translations$backToK","backToKeywordSearchButtonText","_translations$backToK2","backToKeywordSearchButtonAriaLabel","_translations$placeho","placeholderTextAskAiStreaming","isFromSelection","select","baseInputProps","blockedKeys","origOnKeyDown","origOnChange","isAskAiStreaming","askAiStatus","isKeywordSearchLoading","inputProps","onAskAgain","hidden","onClose","createStorage","localStorage","removeItem","isLocalStorageSupported","createStoredSearches","_ref$limit","limit","storage","_snippetResult","isQueryAlreadySaved","unshift","getAll","createBrowserLocalStorageCache","namespaceKey","getStorage","getNamespace","setNamespace","namespace","defaultValue","events","miss","timeToLive","filteredNamespaceWithoutOldFormattedCacheItems","entries","timestamp","cacheItem","currentTimestamp","exists","clear","useSearchClient","transformSearchClient","client","createLiteClient","connect","write","logger","requester","send","XMLHttpRequest","setRequestHeader","isTimedOut","u","connectTimeout","onreadystatechange","readyState","OPENED","responseTimeout","responseText","algoliaAgents","authMode","responsesCache","createMemoryCache","requestsCache","serializable","hostsCache","createFallbackableCache","caches","apiClientVersion","liteClient","addAlgoliaAgent","transporter","algoliaAgent","buildQuerySources","sourcesState","searchParameters","snippetLength","_ref6$transformItems","transformItems","saveRecentSearch","insightsActive","_yield$searchClient$s","firstResult","nbHits","attributesToRetrieve","attributesToSnippet","snippetEllipsisText","highlightPreTag","highlightPostTag","hitsPerPage","lvl1","groupedHits","potentialParent","siblingItem","flat","DocSearchModal","_ref10","_ref3$limit","askAi","_ref10$onClose","_ref10$transformItems","_ref10$hitComponent","_ref10$resultsFooterC","_ref10$initialScrollY","initialScrollY","_ref10$transformSearc","_ref10$disableUserPer","disableUserPersonalization","_ref10$initialQuery","initialQuery","initialQueryFromProp","_ref10$translations","_ref10$insights","_ref10$isAskAiActive","_ref10$canHandleAskAi","footerTranslations","footer","searchBoxTranslations","searchBox","screenStateTranslations","setState","modalRef","formElementRef","dropdownRef","initialQueryFromSelection","getSelection","_x$messages","_messages$","addFeedback","conv","c","_c$messages","m","msg","_conv$messages","_c$messages2","askAiConfig","askAiConfigurationId","askAiSearchParameters","setAskAiStreamError","_useChat","_fetch","_x3","_ref11","_x4","_x5","streamError","prevStatus","anchor","lvl2","lvl3","lvl4","lvl5","lvl6","url_without_anchor","buildDummyAskAiHit","sendItemClickEvent","insightsItem","insightsClickParams","autocompleteRef","handleAskAiToggle","toggle","el","scrollTo","top","behavior","scrollTop","handleFeedbackSubmit","_ref12","_callee3","_conversations$addFee","_context3","_x6","_x7","_ref13","noQuerySources","buildNoQuerySources","recentConversationSource","_ref14","querySourcesState","algoliaSourcesPromise","askAiSource","_ref15","algoliaSources","autocomplete","_getEnvironmentProps","useTouchEvents","focusableElements","firstElement","lastElement","trapFocus","_window$scrollTo","_window","scrollBarWidth","innerWidth","clientWidth","style","marginRight","matchMedia","setFullViewportHeight","vh","innerHeight","setProperty","showDocsearchDropdown","useDocSearchKeyboardEvents","onOpen","searchButtonRef","_event$key","element","composedPath","isContentEditable","isEditingContent","fromCharCode","keyCode","_props$translations","_props$translations4","_props$translations5","_props$translations2","_props$translations3","_objectDestructuringEmpty","setInitialQuery","setIsAskAiActive","currentPlaceholder","modal","placeholderText","placeholderTextAskAi","askAitoggle","createPortal","scrollY"],"mappings":";m1ZAEO,SAASA,IACd,OACEC,EAAAC,cAAA,MAAA,CAAKC,MAAM,KAAKC,OAAO,KAAKC,QAAQ,YAAYC,KAAK,OAAOC,MAAM,8BAChEN,EAAAC,cAAA,OAAA,CACEM,EAAE,ijGACFF,KAAK,iBAIb,CAEO,SAASG,IACd,OACER,EAAAC,cAAA,MAAA,CAAKC,MAAM,KAAKC,OAAO,KAAKC,QAAQ,YAAYC,KAAK,OAAOC,MAAM,8BAChEN,EAAAC,cAAA,OAAA,CACEM,EAAE,0NACFF,KAAK,iBAIb,CAEO,SAASI,IACd,OACET,EAAAC,cAAA,MAAA,CAAKC,MAAM,KAAKC,OAAO,KAAKC,QAAQ,YAAYC,KAAK,OAAOC,MAAM,8BAChEN,EAAAC,cAAA,OAAA,CACEM,EAAE,+rEACFF,KAAK,iBAIb,CC1BO,SAASK,EAAUC,GAAsE,IAAAC,EAAAD,EAAnEE,KAAAA,OAAOC,IAAHF,EAAG,GAAEA,EAAAG,EAAAJ,EAAEK,MAAAA,OAAQF,IAAHC,EAAG,eAAcA,EAC5D,OACEf,EAAAC,cAAA,MAAA,CAAKC,MAAOW,EAAMV,OAAQU,EAAMI,UAAU,wBAAwBb,QAAQ,YAAY,cAAY,QAChGJ,EAAAC,cAAA,SAAA,CAAQiB,GAAG,KAAKC,GAAG,KAAKC,EAAE,IAAIC,OAAQL,EAAOX,KAAK,OAAOiB,YAAY,QACrEtB,EAAAC,cAAA,OAAA,CAAMM,EAAE,iBAAiBc,OAAQL,EAAOX,KAAK,OAAOkB,cAAc,QAAQC,eAAe,UAG/F,CCNO,IAAMC,EAAW,SAAHd,GAAuC,IAAjCe,EAAKf,EAALe,MACzBC,EAAAA,WAAU,WACR,GAAID,EAAO,CACT,IAAME,EAAgBC,SAASC,gBAAgBC,QAAQL,MACvD,GAAIA,IAAUE,EAEZ,OADAC,SAASC,gBAAgBC,QAAQL,MAAQA,EAClC,gBACiBZ,IAAlBc,SAAoCC,SAASC,gBAAgBC,QAAQL,MACpEG,SAASC,gBAAgBC,QAAQL,MAAQE,CAC/C,CAEL,CAEF,GAAG,CAACF,GACN,qBCLMM,EAAqB,OAOdC,IAAAA,EAAkBjC,EAAMkC,YACnC,SAAAvB,EAAkCwB,GAAQ,IAAAC,EAAAzB,EAAvC0B,aAAAA,OAAYvB,IAAAsB,EAAG,CAAA,EAAEA,EAAKE,EAAKC,EAAA5B,EAAA6B,GAC5BC,EAA8DJ,EAAtDK,WAAAA,OAAa5B,IAAH2B,EAAG,SAAQA,EAAAE,EAAiCN,EAA/BO,gBAAAA,OAAkB9B,IAAH6B,EAAG,SAAQA,EAEuCE,EAAAC,EAA1EC,EAAQA,SAA6D,MAAK,GAAzFC,EAAGH,EAAA,GAAEI,EAAMJ,EAAA,GAClBpB,EAAS,CAAEC,MAAOY,EAAMZ,QACxBC,EAAAA,WAAU,WACiB,oBAAduB,YAVR,0BAA0BC,KAAKD,UAAUE,UAWxBH,EAdD,KAc4BA,EAAOjB,GAEvD,GAAE,IAEH,IAKkDqB,EAAAP,EAJhDE,IAAQhB,EAEH,CAACA,EAAoB,UAAWhC,EAAAC,cAACQ,EAAgB,OAEjD,CAAC,OAAQ,OAAQT,EAAAC,cAACF,EAAa,OAAY,GAL3CuD,EAAiBD,EAAA,GAAEE,EAAgBF,EAAA,GAAEG,EAAcH,EAAA,GAOpDI,EAAQ,GAAAC,OAAMH,EAAoB,MACxC,OACEvD,EAAAC,cAAA,SAAA0D,EAAA,CACEC,KAAK,SACL3C,UAAU,6BACV,aAAA,GAAAyC,OAAed,QAAec,OAAKD,EAAY,KAC/C,oBAAmBA,GACfnB,EAAK,CACTH,IAAKA,IAELnC,EAAAC,cAAA,OAAA,CAAMgB,UAAU,8BACdjB,EAAAC,cAACS,QACDV,EAAAC,cAAA,OAAA,CAAMgB,UAAU,gCAAgCyB,IAGlD1C,EAAAC,cAAA,OAAA,CAAMgB,UAAU,yBACL,OAAR+B,GACChD,EAAAC,cAAAD,EAAA6D,SACE7D,KAAAA,EAAAC,cAAC6D,EAAkB,CAACC,YAAaT,GAAoBE,GACrDxD,EAAAC,cAAC6D,EAAkB,CAACC,YAAY,KAC9B/D,EAAAC,cAACO,WAOf,IAOF,SAASsD,EAAkBE,GAA2F,IAAxFD,EAAWC,EAAXD,YAAaE,EAAQD,EAARC,SACQC,EAAApB,EAAfC,EAAQA,UAAC,GAAM,GAA1CoB,EAASD,EAAA,GAAEE,EAAYF,EAAA,GAkC9B,OAhCAvC,EAAAA,WAAU,WACR,GAAKoC,EAyBL,OAHAM,OAAOC,iBAAiB,UAAWC,GACnCF,OAAOC,iBAAiB,QAASE,GAE1B,WACLH,OAAOI,oBAAoB,UAAWF,GACtCF,OAAOI,oBAAoB,QAASD,EACrC,EAxBD,SAASD,EAAcG,GACjBA,EAAE1B,MAAQe,GACZK,GAAa,EAEjB,CAEA,SAASI,EAAYE,GAEjBA,EAAE1B,MAAQe,GAIA,SAAVW,EAAE1B,KAEFoB,GAAa,EAEjB,CASF,GAAG,CAACL,IAGF/D,EAAAC,cAAA,MAAA,CACEgB,UACEkD,EACI,qDACA,wBAA0C,SAAhBJ,EAAyB,8BAAgC,KAGxFE,EAGP,CC1HA,IAEIU,EAFAC,EAAS,kBACTC,EAASC,OAAOC,IAAIH,GAEpBI,EAAc,MAAMA,UAAoBC,MAS1C,WAAAC,EACEC,KAAMC,EAAMC,QACZA,EAAOC,MACPA,IAEAC,MAAMF,GACNG,KAAKb,IAAM,EACXa,KAAKL,KAAOC,EACZI,KAAKF,MAAQA,CACjB,CAME,iBAAOG,CAAWC,GAChB,OAAOV,EAAYW,UAAUD,EAAOd,EACxC,CACE,gBAAOe,CAAUD,EAAOE,GACtB,MAAMC,EAAef,OAAOC,IAAIa,GAChC,OAAgB,MAATF,GAAkC,iBAAVA,GAAsBG,KAAgBH,GAAwC,kBAAxBA,EAAMG,KAAuD,IAAxBH,EAAMG,EACpI,GAEAlB,EAAKE,EACL,IAAIiB,EAAad,EAyDjB,SAASe,EAAgBL,GACvB,OAAa,MAATA,EACK,gBAEY,iBAAVA,EACFA,EAELA,aAAiBT,MACZS,EAAML,QAERW,KAAKC,UAAUP,EACxB,CAGA,IAGIQ,EAHAC,EAAQ,0BACRC,EAAU,mBAAmBD,IAC7BE,EAAUvB,OAAOC,IAAIqB,GAErBE,EAAuB,cAAcR,EACvC,WAAAZ,EAAYG,QACVA,EAAOC,MACPA,EAAKiB,SACLA,IAEAhB,MAAM,CAAEJ,KAAMgB,EAAOd,UAASC,UAC9BE,KAAKU,IAAO,EACZV,KAAKe,SAAWA,CACpB,CACE,iBAAOd,CAAWC,GAChB,OAAOI,EAAWH,UAAUD,EAAOU,EACvC,GAEAF,EAAMG,EA4CN,IAGIG,EAHAC,EAAQ,oBACRC,EAAU,mBAAmBD,IAC7BE,EAAU7B,OAAOC,IAAI2B,GAErBE,EAAiB,cAAcd,EACjC,WAAAZ,EAAY2B,KAAEA,EAAIvB,MAAEA,IAClBC,MAAM,CACJJ,KAAMsB,EACNpB,QAAS,8BAA8BwB,sBAC5Bd,EAAgBT,KAC3BA,UAEFE,KAAKgB,IAAO,EACZhB,KAAKqB,KAAOA,CAChB,CACE,iBAAOpB,CAAWC,GAChB,OAAOI,EAAWH,UAAUD,EAAOgB,EACvC,GAEAF,EAAMG,EAsGN,IAGIG,EAHAC,EAAS,yBACTC,GAAW,mBAAmBD,IAC9BE,GAAWnC,OAAOC,IAAIiC,IAiC1BF,EAAOG,GACP,IAAIC,GAhCuB,MAAMC,UAA6BrB,EAC5D,WAAAZ,EAAYkC,MAAEA,EAAK9B,MAAEA,IACnBC,MAAM,CACJJ,KAAM4B,EACN1B,QAAS,kCAAkCW,KAAKC,UAAUmB,uBAC/CrB,EAAgBT,KAC3BA,UAEFE,KAAKsB,IAAQ,EACbtB,KAAK4B,MAAQA,CACjB,CACE,iBAAO3B,CAAWC,GAChB,OAAOI,EAAWH,UAAUD,EAAOsB,GACvC,CAWE,WAAOK,EAAKD,MACVA,EAAK9B,MACLA,IAEA,OAAO6B,EAAqB1B,WAAWH,IAAUA,EAAM8B,QAAUA,EAAQ9B,EAAQ,IAAI6B,EAAqB,CAAEC,QAAO9B,SACvH,8KClUA,IAAMgC,EAA8B,oBAAXC,OACnBC,EAAiB,gJACjBC,EAAuB,iKAE7B,SAASC,EAAQb,EAAMc,EAASC,GAEf,MAAXA,GACc,OAAZD,GAAuC,WAAnBE,EAAOF,KAC7BC,EAAUD,EACVA,OAAU7G,GAIVwG,GAAaC,OAAOO,SAASjB,KAC/BA,EAAOA,EAAKkB,YAIVlB,GAA+B,QAAvBA,EAAKmB,WAAW,KAC1BnB,EAAOA,EAAKoB,MAAM,IAIpB,IAAMC,EAAMlC,KAAKmC,MAAMtB,EAAMc,GAG7B,GAAY,OAARO,GAA+B,WAAfL,EAAOK,GACzB,OAAOA,EAGT,IAAME,EAAeR,GAAWA,EAAQQ,aAAgB,QAClDC,EAAqBT,GAAWA,EAAQS,mBAAsB,QAGpE,GAAoB,WAAhBD,GAAkD,WAAtBC,EAC9B,OAAOH,EAGT,GAAoB,WAAhBE,GAAkD,WAAtBC,GAC9B,IAAkC,IAA9Bb,EAAerE,KAAK0D,KAAuD,IAApCY,EAAqBtE,KAAK0D,GACnE,OAAOqB,OAEJ,GAAoB,WAAhBE,GAAkD,WAAtBC,GACrC,IAAkC,IAA9Bb,EAAerE,KAAK0D,GACtB,OAAOqB,OAGT,IAAwC,IAApCT,EAAqBtE,KAAK0D,GAC5B,OAAOqB,EAKX,OAAOI,EAAOJ,EAAK,CAAEE,YAAAA,EAAaC,kBAAAA,EAAmBE,KAAMX,GAAWA,EAAQW,MAChF,CAEA,SAASD,EAAQJ,GAGf,IAHuF,IAAAvH,EAAA6H,UAAAC,OAAA,QAAA3H,IAAA0H,UAAA,GAAAA,UAAA,GAAJ,CAAE,EAAAE,EAAA/H,EAA/DyH,YAAAA,OAActH,IAAH4H,EAAG,QAAOA,EAAAC,EAAAhI,EAAE0H,kBAAAA,OAAoBvH,IAAH6H,EAAG,QAAOA,EAAEJ,EAAI5H,EAAJ4H,KACtEK,EAAO,CAACV,GAELU,EAAKH,QAAQ,CAClB,IAAMI,EAAQD,EACdA,EAAO,GAAA,IAEiBE,EAFjBC,EAAAC,EAEYH,GAAK,IAAxB,IAAAE,EAAAE,MAAAH,EAAAC,EAAAG,KAAAC,MAA0B,CAAA,IAAfC,EAAIN,EAAA1B,MACb,GAAoB,WAAhBgB,GAA4BiB,OAAOC,UAAUC,eAAeC,KAAKJ,EAAM,aAAc,CACvF,IAAa,IAATb,EACF,OAAO,KACF,GAAoB,UAAhBH,EACT,MAAM,IAAIqB,YAAY,uDAGjBL,EAAKM,SACpB,CAEM,GAA0B,WAAtBrB,GACAgB,OAAOC,UAAUC,eAAeC,KAAKJ,EAAM,gBAC3CC,OAAOC,UAAUC,eAAeC,KAAKJ,EAAKlE,YAAa,aAAc,CACvE,IAAa,IAATqD,EACF,OAAO,KACF,GAA0B,UAAtBF,EACT,MAAM,IAAIoB,YAAY,uDAGjBL,EAAKlE,WACpB,CAEM,IAAK,IAAMlC,KAAOoG,EAAM,CACtB,IAAMhC,EAAQgC,EAAKpG,GACfoE,GAA0B,WAAjBS,EAAOT,IAClBwB,EAAKe,KAAKvC,EAEpB,CACA,CAAA,CAAA,MAAAwC,GAAAb,EAAArE,EAAAkF,EAAA,CAAA,QAAAb,EAAAc,GAAA,CACA,CACE,OAAO3B,CACT,CAEA,SAASC,EAAOtB,EAAMc,EAASC,GAC7B,IAAMkC,EAAkB7E,MAAM6E,gBAC9B7E,MAAM6E,gBAAkB,EACxB,IACE,OAAOpC,EAAOb,EAAMc,EAASC,EACjC,CAAY,QACR3C,MAAM6E,gBAAkBA,CAC5B,CACA,QAcAC,GAAAC,QAAiB7B,EACjB4B,GAAAC,QAAAC,QAAyB9B,EACzB4B,GAAAC,QAAA7B,MAAuBA,EACvB4B,GAAAC,QAAAE,UAfA,SAAoBrD,EAAMc,GACxB,IAAMmC,EAAkB7E,MAAM6E,gBAC9B7E,MAAM6E,gBAAkB,EACxB,IACE,OAAOpC,EAAOb,EAAMc,EAAS,CAAEY,MAAM,GACtC,CAAC,MAAO4B,GACP,OAAO,IACX,CAAY,QACRlF,MAAM6E,gBAAkBA,CAC5B,CACA,EAMAC,GAAAC,QAAAI,KAAsB9B,0BC0ClB+B,GAlBoB,GACtBC,SACAzJ,KAAM0J,EAAc,GACpBC,WAAW,iEACXC,YAAY,KACV,MACF,MAAMC,EClJa,SAACF,GAA+B,IAArBD,EAAW/B,UAAAC,OAAA,QAAA3H,IAAA0H,UAAA,GAAAA,UAAA,GAAG,GAC5C,OAAO,WAIL,IAJ6B,IACzBmC,EAAK,GAELC,EAAW,GAHLpC,UAAAC,OAAA,QAAA3H,IAAA0H,UAAA,GAAAA,UAAA,GAAG+B,GAINK,KAELD,GAAMH,EAAUK,KAAKC,SAAWN,EAAS/B,OAAU,GAErD,OAAOkC,CACR,CACH,CDuIoBI,CAAeP,EAAUD,GAC3C,GAAc,MAAVD,EACF,OAAOI,EAET,GAAIF,EAASQ,SAASP,GACpB,MAAM,IAAInE,EAAqB,CAC7BC,SAAU,YACVlB,QAAS,kBAAkBoF,wCAAgDD,QAG/E,OAAQ3J,GAAS,GAAGyJ,IAASG,IAAYC,EAAU7J,IAAO,EAE3CoK,GAmNbC,GAAkBpG,OAAOC,IAAI,uBAOjC,SAASoG,GAAY/D,GACnB,OAJF,SAAqBA,GACnB,MAAwB,iBAAVA,GAAgC,OAAVA,GAAkB8D,MAAmB9D,IAAoC,IAA3BA,EAAM8D,KAA6B,aAAc9D,CACrI,CAESgE,CAAYhE,GAASA,GAERiE,EAF6BjE,EAPhCkE,EAUClE,IAChB,MAAMmE,EAASF,EAAUnB,UAAU9C,GACnC,OAAOmE,EAAOC,QAAU,CAAEA,SAAS,EAAMpE,MAAOmE,EAAOE,MAAS,CAAED,SAAS,EAAO9F,MAAO6F,EAAO7F,MAAO,EAXlG,CAAEwF,CAACA,KAAkB,EAAMI,aAQpC,IAAsBD,EATHC,CAQnB,CA8DA,SAASI,IAAc7E,KACrBA,EAAI8E,OACJA,IAEA,IACE,MAAMvE,EAAQwE,GAAWzD,MAAMtB,GAC/B,GAAc,MAAV8E,EACF,MAAO,CAAEH,SAAS,EAAMpE,QAAOyE,SAAUzE,GAE3C,MAAM0E,EApDV,UAA2B1E,MACzBA,EAAKuE,OACLA,IAEA,MAAMI,EAAaZ,GAAYQ,GAC/B,IACE,GAA2B,MAAvBI,EAAWT,SACb,MAAO,CAAEE,SAAS,EAAMpE,SAE1B,MAAMmE,EAASQ,EAAWT,SAASlE,GACnC,OAAImE,EAAOC,QACFD,EAEF,CACLC,SAAS,EACT9F,MAAOwB,GAAoBG,KAAK,CAAED,QAAO9B,MAAOiG,EAAO7F,QAE1D,CAAC,MAAOA,GACP,MAAO,CACL8F,SAAS,EACT9F,MAAOwB,GAAoBG,KAAK,CAAED,QAAO9B,MAAOI,IAEtD,CACA,CA6B6BsG,CAAkB,CAAE5E,QAAOuE,WACpD,OAAOG,EAAiBN,QAAU,IAAKM,EAAkBD,SAAUzE,GAAU0E,CAC9E,CAAC,MAAOpG,GACP,MAAO,CACL8F,SAAS,EACT9F,MAAOkB,EAAenB,WAAWC,GAASA,EAAQ,IAAIkB,EAAe,CAAEC,OAAMvB,MAAOI,IAE1F,CACA,CE5QsB,IAAIuG,IAAI,gEClM9B,IAAIC,GAAiB,CACnBC,KAAM,IACNhH,KAAM,OACNgD,MAAQf,IACN,GAAqB,iBAAVA,EACT,MAAM,IAAInC,MAAM,uCAElB,MAAO,CAAErB,KAAM,OAAQwD,QAAO,GAG9BgF,GAAkB,CACpBD,KAAM,IACNhH,KAAM,QACNgD,MAAQf,IACN,GAAqB,iBAAVA,EACT,MAAM,IAAInC,MAAM,wCAElB,MAAO,CAAErB,KAAM,QAASwD,QAAO,GAG/BiF,GAA6B,CAC/BF,KAAM,IACNhH,KAAM,oBACNgD,MAAQf,IACN,KAAa,MAATA,GAAkC,iBAAVA,GAAwB,OAAQA,GAAY,SAAUA,GAAY,YAAaA,GAA8B,iBAAbA,EAAMuD,IAAyC,iBAAfvD,EAAMkF,MAAoC,cAAflF,EAAMkF,MAAyBC,MAAMC,QAAQpF,EAAMqF,UAAarF,EAAMqF,QAAQC,OAClQC,GAAiB,MAARA,GAAgC,iBAATA,GAAqB,SAAUA,GAAsB,SAAdA,EAAK/I,MAAmB,SAAU+I,GAAqB,MAAbA,EAAK9F,MAAqC,iBAAd8F,EAAK9F,MAAqB,UAAW8F,EAAK9F,MAAmC,iBAApB8F,EAAK9F,KAAKO,SAEjN,MAAM,IAAInC,MACR,4FAGJ,MAAO,CACLrB,KAAM,oBACNwD,QACD,GAGDwF,GAAiC,CACnCT,KAAM,IACNhH,KAAM,yBACNgD,MAAQf,IACN,GAAa,MAATA,GAAkC,iBAAVA,KAAwB,aAAcA,MAAY,cAAeA,IAAoC,iBAAnBA,EAAMyF,UAAoD,iBAApBzF,EAAM0F,UACxJ,MAAM,IAAI7H,MACR,+FAGJ,MAAO,CACLrB,KAAM,yBACNwD,MAAO,CACLyF,SAAUzF,EAAMyF,SAChBC,UAAW1F,EAAM0F,WAEpB,GAGDC,GAAwB,CAC1BZ,KAAM,IACNhH,KAAM,eACNgD,MAAQf,IACN,GAAa,MAATA,GAAkC,iBAAVA,KAAwB,SAAUA,MAAY,SAAUA,IAAgC,iBAAfA,EAAMkF,MAAoC,SAAflF,EAAMkF,KACpI,MAAM,IAAIrH,MACR,4EAGJ,MAAO,CACLrB,KAAM,eACNwD,QACD,GAmEL,SAAS4F,GAAQC,GACf,MAAMC,EAAQ,CAAC,QACf,IAAIC,GAAmB,EACnBC,EAAe,KACnB,SAASC,EAAkBC,EAAM1C,EAAG2C,GAEhC,OAAQD,GACN,IAAK,IACHH,EAAiBvC,EACjBsC,EAAMM,MACNN,EAAMvD,KAAK4D,GACXL,EAAMvD,KAAK,iBACX,MAEF,IAAK,IACL,IAAK,IACL,IAAK,IACHwD,EAAiBvC,EACjBwC,EAAexC,EACfsC,EAAMM,MACNN,EAAMvD,KAAK4D,GACXL,EAAMvD,KAAK,kBACX,MAEF,IAAK,IACHuD,EAAMM,MACNN,EAAMvD,KAAK4D,GACXL,EAAMvD,KAAK,iBACX,MAEF,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACHwD,EAAiBvC,EACjBsC,EAAMM,MACNN,EAAMvD,KAAK4D,GACXL,EAAMvD,KAAK,iBACX,MAEF,IAAK,IACHwD,EAAiBvC,EACjBsC,EAAMM,MACNN,EAAMvD,KAAK4D,GACXL,EAAMvD,KAAK,uBACX,MAEF,IAAK,IACHwD,EAAiBvC,EACjBsC,EAAMM,MACNN,EAAMvD,KAAK4D,GACXL,EAAMvD,KAAK,sBAKrB,CACE,SAAS8D,EAAwBH,EAAM1C,GACrC,OAAQ0C,GACN,IAAK,IACHJ,EAAMM,MACNN,EAAMvD,KAAK,6BACX,MAEF,IAAK,IACHwD,EAAiBvC,EACjBsC,EAAMM,MAId,CACE,SAASE,EAAuBJ,EAAM1C,GACpC,OAAQ0C,GACN,IAAK,IACHJ,EAAMM,MACNN,EAAMvD,KAAK,4BACX,MAEF,IAAK,IACHwD,EAAiBvC,EACjBsC,EAAMM,MAId,CACE,IAAK,IAAI5C,EAAI,EAAGA,EAAIqC,EAAMxE,OAAQmC,IAAK,CACrC,MAAM0C,EAAOL,EAAMrC,GAEnB,OADqBsC,EAAMA,EAAMzE,OAAS,IAExC,IAAK,OACH4E,EAAkBC,EAAM1C,EAAG,UAC3B,MACF,IAAK,sBACH,OAAQ0C,GACN,IAAK,IACHJ,EAAMM,MACNN,EAAMvD,KAAK,qBACX,MAEF,IAAK,IACHwD,EAAiBvC,EACjBsC,EAAMM,MAIV,MAEF,IAAK,4BACH,GACO,MADCF,EAEJJ,EAAMM,MACNN,EAAMvD,KAAK,qBAIf,MAEF,IAAK,oBACH,GACO,MADC2D,EAEJJ,EAAMM,MACNN,EAAMvD,KAAK,2BAIf,MAEF,IAAK,0BACH,GACO,MADC2D,EAEJJ,EAAMM,MACNN,EAAMvD,KAAK,8BAIf,MAEF,IAAK,6BACH0D,EAAkBC,EAAM1C,EAAG,6BAC3B,MAEF,IAAK,4BACH6C,EAAwBH,EAAM1C,GAC9B,MAEF,IAAK,gBACH,OAAQ0C,GACN,IAAK,IACHJ,EAAMM,MACNL,EAAiBvC,EACjB,MAEF,IAAK,KACHsC,EAAMvD,KAAK,wBACX,MAEF,QACEwD,EAAiBvC,EAGrB,MAEF,IAAK,qBACH,GACO,MADC0C,EAEJH,EAAiBvC,EACjBsC,EAAMM,WAINL,EAAiBvC,EACjByC,EAAkBC,EAAM1C,EAAG,4BAI/B,MAEF,IAAK,2BACH,OAAQ0C,GACN,IAAK,IACHJ,EAAMM,MACNN,EAAMvD,KAAK,4BACX,MAEF,IAAK,IACHwD,EAAiBvC,EACjBsC,EAAMM,MACN,MAEF,QACEL,EAAiBvC,EAIrB,MAEF,IAAK,2BACHyC,EAAkBC,EAAM1C,EAAG,4BAC3B,MAEF,IAAK,uBACHsC,EAAMM,MACNL,EAAiBvC,EACjB,MAEF,IAAK,gBACH,OAAQ0C,GACN,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACHH,EAAiBvC,EACjB,MAEF,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACH,MAEF,IAAK,IACHsC,EAAMM,MAC0B,6BAA5BN,EAAMA,EAAMzE,OAAS,IACvBiF,EAAuBJ,EAAM1C,GAEC,8BAA5BsC,EAAMA,EAAMzE,OAAS,IACvBgF,EAAwBH,EAAM1C,GAEhC,MAEF,IAAK,IACHsC,EAAMM,MAC0B,8BAA5BN,EAAMA,EAAMzE,OAAS,IACvBgF,EAAwBH,EAAM1C,GAEhC,MAEF,IAAK,IACHsC,EAAMM,MAC0B,6BAA5BN,EAAMA,EAAMzE,OAAS,IACvBiF,EAAuBJ,EAAM1C,GAE/B,MAEF,QACEsC,EAAMM,MAIV,MAEF,IAAK,iBAAkB,CACrB,MAAMG,EAAiBV,EAAMW,UAAUR,EAAcxC,EAAI,GACpD,QAAQiD,WAAWF,IAAoB,OAAOE,WAAWF,IAAoB,OAAOE,WAAWF,GAQlGR,EAAiBvC,GAPjBsC,EAAMM,MAC0B,8BAA5BN,EAAMA,EAAMzE,OAAS,GACvBgF,EAAwBH,EAAM1C,GACO,6BAA5BsC,EAAMA,EAAMzE,OAAS,IAC9BiF,EAAuBJ,EAAM1C,IAKjC,KACR,EAEA,CACE,IAAIW,EAAS0B,EAAMhF,MAAM,EAAGkF,EAAiB,GAC7C,IAAK,IAAIvC,EAAIsC,EAAMzE,OAAS,EAAGmC,GAAK,EAAGA,IAAK,CAE1C,OADcsC,EAAMtC,IAElB,IAAK,gBACHW,GAAU,IACV,MAEF,IAAK,oBACL,IAAK,0BACL,IAAK,4BACL,IAAK,sBACL,IAAK,6BACL,IAAK,4BACHA,GAAU,IACV,MAEF,IAAK,qBACL,IAAK,2BACL,IAAK,2BACHA,GAAU,IACV,MAEF,IAAK,iBAAkB,CACrB,MAAMoC,EAAiBV,EAAMW,UAAUR,EAAcH,EAAMxE,QACvD,OAAOoF,WAAWF,GACpBpC,GAAU,OAAOtD,MAAM0F,EAAelF,QAC7B,QAAQoF,WAAWF,GAC5BpC,GAAU,QAAQtD,MAAM0F,EAAelF,QAC9B,OAAOoF,WAAWF,KAC3BpC,GAAU,OAAOtD,MAAM0F,EAAelF,QAEhD,EAEA,CACE,OAAO8C,CACT,CA3X2B,CACzBW,GACAE,GACAC,GACAO,GACAG,IAgBoCe,KAAKC,GAASA,EAAK5B,OAyXzD,IAuOI6B,GAAkB,CAvOA,CACpB7B,KAAM,IACNhH,KAAM,OACNgD,MAAQf,IACN,GAAqB,iBAAVA,EACT,MAAM,IAAInC,MAAM,uCAElB,MAAO,CAAErB,KAAM,OAAQwD,QAAO,GAGb,CACnB+E,KAAM,IACNhH,KAAM,OACNgD,MAAQf,IACN,IAAKmF,MAAMC,QAAQpF,GACjB,MAAM,IAAInC,MAAM,uCAElB,MAAO,CAAErB,KAAM,OAAQwD,QAAO,GAGX,CACrB+E,KAAM,IACNhH,KAAM,QACNgD,MAAQf,IACN,GAAqB,iBAAVA,EACT,MAAM,IAAInC,MAAM,wCAElB,MAAO,CAAErB,KAAM,QAASwD,QAAO,GAGA,CACjC+E,KAAM,IACNhH,KAAM,sBACNgD,MAAQf,IACN,IAAKmF,MAAMC,QAAQpF,GACjB,MAAM,IAAInC,MAAM,sDAElB,MAAO,CAAErB,KAAM,sBAAuBwD,QAAO,GAGxB,CACvB+E,KAAM,IACNhH,KAAM,YACNgD,MAAQf,IACN,GAAa,MAATA,GAAkC,iBAAVA,KAAwB,eAAgBA,IAAsC,iBAArBA,EAAM6G,cAA6B,aAAc7G,IAAoC,iBAAnBA,EAAM8G,YAA2B,SAAU9G,IAAgC,iBAAfA,EAAM+G,KACvN,MAAM,IAAIlJ,MACR,4FAGJ,MAAO,CACLrB,KAAM,YACNwD,QACD,GAGsB,CACzB+E,KAAM,IACNhH,KAAM,cACNgD,MAAQf,IACN,GAAa,MAATA,GAAkC,iBAAVA,KAAwB,eAAgBA,IAAsC,iBAArBA,EAAM6G,cAA6B,WAAY7G,GAClI,MAAM,IAAInC,MACR,qFAGJ,MAAO,CACLrB,KAAM,cACNwD,QACD,GAGkC,CACrC+E,KAAM,IACNhH,KAAM,4BACNgD,MAAQf,IACN,GAAa,MAATA,GAAkC,iBAAVA,KAAwB,eAAgBA,IAAsC,iBAArBA,EAAM6G,cAA6B,aAAc7G,IAAoC,iBAAnBA,EAAM8G,SAC3J,MAAM,IAAIjJ,MACR,mGAGJ,MAAO,CACLrB,KAAM,4BACNwD,QACD,GAGyB,CAC5B+E,KAAM,IACNhH,KAAM,kBACNgD,MAAQf,IACN,GAAa,MAATA,GAAkC,iBAAVA,KAAwB,eAAgBA,IAAsC,iBAArBA,EAAM6G,cAA6B,kBAAmB7G,IAAyC,iBAAxBA,EAAMgH,cAChK,MAAM,IAAInJ,MACR,8FAGJ,MAAO,CACLrB,KAAM,kBACNwD,QACD,GAGyB,CAC5B+E,KAAM,IACNhH,KAAM,iBACNgD,MAAQf,IACN,GAAa,MAATA,GAAkC,iBAAVA,KAAwB,iBAAkBA,IAAwC,iBAAvBA,EAAMiH,aAC3F,MAAM,IAAIpJ,MACR,2EAGJ,MAAMsG,EAAS,CACb8C,aAAcjH,EAAMiH,cAQtB,MANI,UAAWjH,GAAwB,MAAfA,EAAMkH,OAAwC,iBAAhBlH,EAAMkH,OAAsB,iBAAkBlH,EAAMkH,OAAS,qBAAsBlH,EAAMkH,QAC7I/C,EAAO+C,MAAQ,CACbC,aAAkD,iBAA7BnH,EAAMkH,MAAMC,aAA4BnH,EAAMkH,MAAMC,aAAeC,OAAOC,IAC/FC,iBAA0D,iBAAjCtH,EAAMkH,MAAMI,iBAAgCtH,EAAMkH,MAAMI,iBAAmBF,OAAOC,MAGxG,CACL7K,KAAM,iBACNwD,MAAOmE,EACR,GAGsB,CACzBY,KAAM,IACNhH,KAAM,cACNgD,MAAQf,IACN,GAAa,MAATA,GAAkC,iBAAVA,KAAwB,iBAAkBA,IAAwC,iBAAvBA,EAAMiH,aAC3F,MAAM,IAAIpJ,MACR,wEAGJ,MAAMsG,EAAS,CACb8C,aAAcjH,EAAMiH,aACpBM,aAAa,GAWf,MATI,UAAWvH,GAAwB,MAAfA,EAAMkH,OAAwC,iBAAhBlH,EAAMkH,OAAsB,iBAAkBlH,EAAMkH,OAAS,qBAAsBlH,EAAMkH,QAC7I/C,EAAO+C,MAAQ,CACbC,aAAkD,iBAA7BnH,EAAMkH,MAAMC,aAA4BnH,EAAMkH,MAAMC,aAAeC,OAAOC,IAC/FC,iBAA0D,iBAAjCtH,EAAMkH,MAAMI,iBAAgCtH,EAAMkH,MAAMI,iBAAmBF,OAAOC,MAG3G,gBAAiBrH,GAAsC,kBAAtBA,EAAMuH,cACzCpD,EAAOoD,YAAcvH,EAAMuH,aAEtB,CACL/K,KAAM,cACNwD,MAAOmE,EACR,GAGqB,CACxBY,KAAM,IACNhH,KAAM,aACNgD,MAAQf,IACN,GAAa,MAATA,GAAkC,iBAAVA,KAAwB,cAAeA,IAAqC,iBAApBA,EAAM0F,UACxF,MAAM,IAAI7H,MACR,8DAGJ,MAAO,CACLrB,KAAM,aACNwD,MAAO,CACL0F,UAAW1F,EAAM0F,WAEpB,GAGqB,CACxBX,KAAM,IACNhH,KAAM,YACNgD,MAAQf,IACN,GAAqB,iBAAVA,EACT,MAAM,IAAInC,MAAM,4CAElB,MAAO,CAAErB,KAAM,YAAawD,QAAO,GAGtB,CACf+E,KAAM,IACNhH,KAAM,SACNgD,MAAQf,IACN,GAAa,MAATA,GAAkC,iBAAVA,EAC1B,MAAM,IAAInC,MAAM,0CAElB,MAAO,CACLrB,KAAM,SACNwD,QACD,GAG6B,CAChC+E,KAAM,IACNhH,KAAM,qBACNgD,MAAQf,IACN,GAAa,MAATA,GAAkC,iBAAVA,KAAwB,SAAUA,IAAgC,iBAAfA,EAAMqE,KACnF,MAAM,IAAIxG,MACR,uEAGJ,MAAO,CAAErB,KAAM,qBAAsBwD,MAAO,CAAEqE,KAAMrE,EAAMqE,MAAQ,GAGnC,CACjCU,KAAM,IACNhH,KAAM,sBACNgD,MAAQf,IACN,GAAa,MAATA,GAAkC,iBAAVA,KAAwB,cAAeA,IAAqC,iBAApBA,EAAMwH,UACxF,MAAM,IAAI3J,MACR,6EAGJ,MAAO,CACLrB,KAAM,sBACNwD,MAAO,CAAEwH,UAAWxH,EAAMwH,WAC3B,GAGgB,CACnBzC,KAAM,IACNhH,KAAM,OACNgD,MAAQf,IACN,GAAa,MAATA,GAAkC,iBAAVA,KAAwB,SAAUA,IAAgC,iBAAfA,EAAMqE,QAAuB,aAAcrE,IAAoC,iBAAnBA,EAAMyH,SAC/I,MAAM,IAAI5J,MACR,wEAGJ,MAAO,CAAErB,KAAM,OAAQwD,QAAO,IAqB9B0H,GAAwBzF,OAAO0F,YACjCf,GAAgBF,KAAKC,GAAS,CAACA,EAAK5B,KAAM4B,MAEb1E,OAAO0F,YACpCf,GAAgBF,KAAKC,GAAS,CAACA,EAAK5I,KAAM4I,EAAK5B,SAEjD,IAAI6C,GAAchB,GAAgBF,KAAKC,GAASA,EAAK5B,OACjD8C,GAAuBC,IACzB,MAAMC,EAAsBD,EAAKE,QAAQ,KACzC,IAA4B,IAAxBD,EACF,MAAM,IAAIlK,MAAM,sDAElB,MAAMqF,EAAS4E,EAAKjH,MAAM,EAAGkH,GAC7B,IAAKH,GAAYhE,SAASV,GACxB,MAAM,IAAIrF,MAAM,+CAA+CqF,MAEjE,MAAM6B,EAAO7B,EACP+E,EAAYH,EAAKjH,MAAMkH,EAAsB,GAC7CG,EAAYtJ,KAAKmC,MAAMkH,GAC7B,OAAOP,GAAsB3C,GAAMhE,MAAMmH,EAAU,EAYjDC,GAAU,KAAKvH,WAAW,GAC9B,SAASwH,GAAaC,EAAQC,GAC5B,MAAMC,EAAqB,IAAIC,WAAWF,GAC1C,IAAIG,EAAS,EACb,IAAK,MAAMC,KAASL,EAClBE,EAAmBI,IAAID,EAAOD,GAC9BA,GAAUC,EAAMrH,OAGlB,OADAgH,EAAOhH,OAAS,EACTkH,CACT,CAmGAK,eAAeC,IAAoBC,OACjCA,EAAMC,OACNA,EAAMC,WACNA,EAAUC,SACVA,EACAhG,WAAYiG,EAAcC,GAAkBC,eAC5CA,EAAiB,IAAsB,IAAIC,KAAMC,YACjDA,IAEA,IAAI/L,EAAIgM,EACR,MAAMC,EAA2E,eAAtC,MAAfF,OAAsB5P,EAAS4P,EAAYpE,MACvE,IAAIuE,EAAOD,EAAqB,GAItB,OAHRD,EAA2C,OAArChM,EAAK+L,EAAYI,sBAA2BhQ,EAAS6D,EAAGoM,QAAO,CAACC,EAAKC,KAC3E,IAAIC,EACJ,OAAOrG,KAAKmG,IAAIA,EAAoC,OAA9BE,EAAMD,EAAeJ,MAAgBK,EAAM,EAAE,GAClE,IAAcP,EAAK,GAAK,EAC3B,MAAMtL,EAAUuL,EAAqBO,gBAAgBT,GAAe,CAClE/F,GAAI2F,IACJc,UAAWZ,IACXlE,KAAM,YACNG,QAAS,GACT4E,MAAO,IAET,IAAIC,EACAC,EACAC,EACJ,SAASC,EAAyBxD,EAAYyD,GAC5C,MAAM3D,EAAO1I,EAAQgM,MAAMM,MACxBC,GAAyB,oBAAfA,EAAMhO,MAA8BgO,EAAMX,eAAehD,aAAeA,IAEzE,MAARF,EACFA,EAAKkD,eAAiBS,EAEtBrM,EAAQgM,MAAM1H,KAAK,CACjB/F,KAAM,kBACNqN,eAAgBS,GAGxB,CACE,MAAMjG,EAAO,GACb,IAAIoG,EAAqBjB,EAAoC,MAAfF,OAAsB5P,EAAS4P,EAAYoB,iBAAchR,EACvG,MAAMiR,EAAmB,CAAE,EAC3B,IAAIzD,EAAQ,CACVI,iBAAkBD,IAClBF,aAAcE,IACduD,YAAavD,KAEXJ,EAAe,UACnB,SAAS4D,IACP,MAAMC,EAAa,IAAIzG,IACG,MAAtBoG,OAA6B/Q,EAAS+Q,EAAmBpJ,UAC3DpD,EAAQyM,YAAcD,GAExB,MAAMM,EAAgB,IAGjBhB,gBAAgB9L,GAMnB+M,WAAY9B,KAEdH,EAAO,CACL9K,QAAS8M,EACT1G,KAAMyG,EACNtB,sBAEN,OAvKAZ,gBAAiCE,OAC/BA,EAAMmC,WACNA,EAAUC,gBACVA,EAAeC,yBACfA,EAAwBC,wBACxBA,EAAuBC,aACvBA,EAAYC,WACZA,EAAUC,WACVA,EAAUC,YACVA,EAAWC,6BACXA,EAA4BC,oBAC5BA,EAAmBC,eACnBA,EAAcC,iBACdA,EAAgBC,yBAChBA,EAAwBC,oBACxBA,EAAmBC,iBACnBA,EAAgBC,gBAChBA,IAEA,MAAMC,EAASnD,EAAOoD,YAChBC,EAAU,IAAIC,YACd/D,EAAS,GACf,IAAIC,EAAc,EAClB,OAAa,CACX,MAAMtI,MAAEA,SAAgBiM,EAAOI,OAC/B,GAAIrM,IACFqI,EAAO9F,KAAKvC,GACZsI,GAAetI,EAAMqB,OACjBrB,EAAMA,EAAMqB,OAAS,KAAO8G,IAC9B,SAGJ,GAAsB,IAAlBE,EAAOhH,OACT,MAEF,MAAMkH,EAAqBH,GAAaC,EAAQC,GAChDA,EAAc,EACd,MAAMgE,EAAcH,EAAQI,OAAOhE,EAAoB,CAAEO,QAAQ,IAAQ0D,MAAM,MAAMtL,QAAQ4G,GAAkB,KAATA,IAAapB,IAAImB,IACvH,IAAK,MAAMrL,KAAEA,EAAMwD,MAAOyM,KAAYH,EACpC,OAAQ9P,GACN,IAAK,aACkB,MAAdyO,OAAqBvR,EAASuR,EAAWwB,IAChD,MACF,IAAK,kBACuB,MAAnBvB,OAA0BxR,EAASwR,EAAgBuB,IAC1D,MACF,IAAK,4BACgC,MAA5BtB,OAAmCzR,EAASyR,EAAyBsB,IAC5E,MACF,IAAK,2BAC+B,MAA3BrB,OAAkC1R,EAAS0R,EAAwBqB,IAC1E,MACF,IAAK,aACkB,MAAdnB,OAAqB5R,EAAS4R,EAAWmB,IAChD,MACF,IAAK,eACoB,MAAhBpB,OAAuB3R,EAAS2R,EAAaoB,IACpD,MACF,IAAK,aACkB,MAAdlB,OAAqB7R,EAAS6R,EAAWkB,IAChD,MACF,IAAK,cACmB,MAAfjB,OAAsB9R,EAAS8R,EAAYiB,IAClD,MACF,IAAK,4BACgC,MAA5BZ,OAAmCnS,EAASmS,EAAyBY,IAC5E,MACF,IAAK,kCACoC,MAAhChB,OAAuC/R,EAAS+R,EAA6BgB,IACpF,MACF,IAAK,wBAC2B,MAAvBf,OAA8BhS,EAASgS,EAAoBe,IAClE,MACF,IAAK,kBACsB,MAAlBd,OAAyBjS,EAASiS,EAAec,IACxD,MACF,IAAK,oBACwB,MAApBb,OAA2BlS,EAASkS,EAAiBa,IAC5D,MACF,IAAK,uBAC2B,MAAvBX,OAA8BpS,EAASoS,EAAoBW,IAClE,MACF,IAAK,oBACwB,MAApBV,OAA2BrS,EAASqS,EAAiBU,IAC5D,MACF,IAAK,mBACuB,MAAnBT,OAA0BtS,EAASsS,EAAgBS,IAC1D,MACF,QAEE,MAAM,IAAI5O,MAAM,6BADQrB,KAKlC,CACA,CAyEQkQ,CAAkB,CACtB5D,SACA,UAAAmC,CAAWjL,GACc,MAAnBkK,GACFA,EAAkB,CAChB1N,KAAM,OACNiD,KAAMO,GAER/B,EAAQgM,MAAM1H,KAAK2H,IAEnBA,EAAgBzK,MAAQO,EAE1B/B,EAAQoH,SAAWrF,EACnB6K,GACD,EACD,eAAAK,CAAgBlL,GACd,IAAI8J,EAC8B,MAA9BM,GACFA,EAA6B,CAAE5N,KAAM,OAAQiD,KAAMO,GACvB,MAAxBmK,GACFA,EAAqBwC,QAAQpK,KAAK6H,IAGpCA,EAA2B3K,MAAQO,EAET,MAAxBmK,GACFA,EAAuB,CACrB3N,KAAM,YACNoQ,UAAW5M,EACX2M,QAAS,CAACvC,IAEZnM,EAAQgM,MAAM1H,KAAK4H,IAEnBA,EAAqByC,WAAa5M,EAEpC/B,EAAQ2O,WAA0C,OAA5B9C,EAAM7L,EAAQ2O,WAAqB9C,EAAM,IAAM9J,EACrE6K,GACD,EACD,wBAAAM,CAAyBnL,GACW,MAA9BoK,IACFA,EAA2B5C,UAAYxH,EAAMwH,UAEhD,EACD,uBAAA4D,CAAwBpL,GACM,MAAxBmK,IACFA,EAAuB,CACrB3N,KAAM,YACNoQ,UAAW,GACXD,QAAS,IAEX1O,EAAQgM,MAAM1H,KAAK4H,IAErBA,EAAqBwC,QAAQpK,KAAK,CAChC/F,KAAM,WACN6H,KAAMrE,EAAMqE,OAEd+F,OAA6B1Q,EAC7BmR,GACD,EACD,UAAAS,CAAWtL,GACT/B,EAAQgM,MAAM1H,KAAK,CACjB/F,KAAM,OACNiL,SAAUzH,EAAMyH,SAChBpD,KAAMrE,EAAMqE,OAEdwG,GACD,EACD,YAAAQ,CAAarL,GACX/B,EAAQgM,MAAM1H,KAAK,CACjB/F,KAAM,SACNqQ,OAAQ7M,IAEV6K,GACD,EACD,4BAAAY,CAA6BzL,GACI,MAA3B/B,EAAQyL,kBACVzL,EAAQyL,gBAAkB,IAE5BiB,EAAiB3K,EAAM6G,YAAc,CACnCpH,KAAM,GACNgK,OACA3C,SAAU9G,EAAM8G,SAChBgG,MAAO7O,EAAQyL,gBAAgBrI,QAEjC,MAAMiJ,EAAa,CACjByC,MAAO,eACPtD,OACA5C,WAAY7G,EAAM6G,WAClBC,SAAU9G,EAAM8G,SAChBC,UAAMrN,GAERuE,EAAQyL,gBAAgBnH,KAAK+H,GAC7BD,EAAyBrK,EAAM6G,WAAYyD,GAC3CO,GACD,EACD,mBAAAa,CAAoB1L,GAClB,MAAMgN,EAAkBrC,EAAiB3K,EAAM6G,YAC/CmG,EAAgBvN,MAAQO,EAAMgH,cAC9B,MAAQhH,MAAOiN,GA7jBrB,SAA0BC,GACxB,QAAiBxT,IAAbwT,EACF,MAAO,CAAElN,WAAOtG,EAAQqT,MAAO,mBAEjC,IAAI5I,EAASG,GAAc,CAAE7E,KAAMyN,IACnC,OAAI/I,EAAOC,QACF,CAAEpE,MAAOmE,EAAOnE,MAAO+M,MAAO,qBAEvC5I,EAASG,GAAc,CAAE7E,KAAMmG,GAAQsH,KACnC/I,EAAOC,QACF,CAAEpE,MAAOmE,EAAOnE,MAAO+M,MAAO,kBAEhC,CAAE/M,WAAOtG,EAAQqT,MAAO,gBACjC,CAgjBqCI,CAAiBH,EAAgBvN,MAC1D6K,EAAa,CACjByC,MAAO,eACPtD,KAAMuD,EAAgBvD,KACtB5C,WAAY7G,EAAM6G,WAClBC,SAAUkG,EAAgBlG,SAC1BC,KAAMkG,GAERhP,EAAQyL,gBAAgBsD,EAAgBF,OAASxC,EACjDD,EAAyBrK,EAAM6G,WAAYyD,GAC3CO,GACD,EACD,oBAAMc,CAAe3L,GACnB,MAAMsK,EAAa,CACjByC,MAAO,OACPtD,UACGzJ,GAYL,GAV0C,MAAtC2K,EAAiB3K,EAAM6G,YACzB5I,EAAQyL,gBAAgBiB,EAAiB3K,EAAM6G,YAAYiG,OAASxC,GAErC,MAA3BrM,EAAQyL,kBACVzL,EAAQyL,gBAAkB,IAE5BzL,EAAQyL,gBAAgBnH,KAAK+H,IAE/BD,EAAyBrK,EAAM6G,WAAYyD,GAC3CO,IACI7B,EAAY,CACd,MAAM7E,QAAe6E,EAAW,CAAEoE,SAAUpN,IAC5C,GAAc,MAAVmE,EAAgB,CAClB,MAAMkJ,EAAc,CAClBN,MAAO,SACPtD,UACGzJ,EACHmE,UAEFlG,EAAQyL,gBAAgBzL,EAAQyL,gBAAgBrI,OAAS,GAAKgM,EAC9DhD,EAAyBrK,EAAM6G,WAAYwG,GAC3CxC,GACV,CACA,CACK,EACD,gBAAAe,CAAiB5L,GACf,MAAM0J,EAAkBzL,EAAQyL,gBAChC,GAAuB,MAAnBA,EACF,MAAM,IAAI7L,MAAM,+CAElB,MAAMyP,EAAsB5D,EAAgB6D,WACzCF,GAAgBA,EAAYxG,aAAe7G,EAAM6G,aAEpD,IAA4B,IAAxByG,EACF,MAAM,IAAIzP,MACR,wEAGJ,MAAMyM,EAAa,IACdZ,EAAgB4D,GACnBP,MAAO,YACJ/M,GAEL0J,EAAgB4D,GAAuBhD,EACvCD,EAAyBrK,EAAM6G,WAAYyD,GAC3CO,GACD,EACD,UAAAU,CAAWvL,GACTqE,EAAK9B,QAAQvC,GACb6K,GACD,EACD,wBAAAgB,CAAyB7L,GACG,MAAtByK,EACFA,EAAqB,IAAIzK,GAEzByK,EAAmBlI,QAAQvC,GAE7B6K,GACD,EACD,gBAAAkB,CAAiB/L,GACfyJ,GAAQ,EACRS,EAAkBlK,EAAMuH,YAAc2C,OAAkBxQ,EACxDyQ,OAAuBzQ,EACvB0Q,OAA6B1Q,CAC9B,EACD,eAAAsS,CAAgBhM,GACTwJ,IACHvL,EAAQsF,GAAKvD,EAAM0F,WAErBzH,EAAQgM,MAAM1H,KAAK,CAAE/F,KAAM,eAC3BqO,GACD,EACD,mBAAAiB,CAAoB9L,GAClBiH,EAAejH,EAAMiH,aACF,MAAfjH,EAAMkH,QACRA,EAv+BR,UAAqCC,aACnCA,EAAYG,iBACZA,IAEA,MAAO,CACLH,eACAG,mBACAsD,YAAazD,EAAeG,EAEhC,CA89BgBkG,CAA4BxN,EAAMkH,OAE7C,EACD,WAAAsE,CAAYlN,GACV,MAAM,IAAIT,MAAMS,EACtB,IAEc,MAAZ2K,GAA4BA,EAAS,CAAEhL,UAASgJ,eAAcC,SAChE,CAqBA0B,eAAe6E,IAAwB3E,OACrCA,EAAMC,OACNA,EAAME,SACNA,EAAQG,eACRA,EAAiB,IAAsB,IAAIC,KAC3CpG,WAAYiG,EAAcwE,KAE1B,MAAMC,EAAW,CAAEnR,KAAM,OAAQiD,KAAM,IACjCmO,EAAgB,CACpBrK,GAAI2F,IACJc,UAAWZ,IACXlE,KAAM,YACNG,QAAS,GACT4E,MAAO,CAAC0D,UA5BZ/E,gBAAiCE,OAC/BA,EAAMmC,WACNA,IAEA,MAAMgB,EAASnD,EAAO+E,YAAY,IAAIC,mBAAqB5B,YAC3D,OAAa,CACX,MAAMnK,KAAEA,EAAI/B,MAAEA,SAAgBiM,EAAOI,OACrC,GAAItK,EACF,YAEIkJ,EAAWjL,EACrB,CACA,CAkBQ+N,CAAkB,CACtBjF,SACAmC,WAAavC,IACXkF,EAAcvI,SAAWqD,EACzBiF,EAASlO,MAAQiJ,EACjBK,EAAO,CACL9K,QAAS,IAAK2P,GACdvJ,KAAM,GACNmF,oBAAoB,GACpB,IAGM,MAAZP,GAA4BA,EAAS2E,EAAe,CAClD1G,MAAO,CAAEI,iBAAkBD,IAAKF,aAAcE,IAAKuD,YAAavD,KAChEJ,aAAc,WAElB,CAGA,IAAI+G,GAAmB,IAAMC,MAsN7B,SAASC,GAA6BxE,GACpC,OAA0B,MAAnBA,OAA0BhQ,EAASgQ,EAAgBC,QAAO,CAACC,EAAKC,KACrE,IAAItM,EACJ,OAAOkG,KAAKmG,IAAIA,EAAmC,OAA7BrM,EAAKsM,EAAeJ,MAAgBlM,EAAK,EAAE,GAChE,EACL,CAGA,SAAS4Q,GAAgBlQ,GACvB,IAAIV,EACJ,OAA+B,OAAvBA,EAAKU,EAAQgM,OAAiB1M,EAAK,IACtCU,EAAQyL,gBAAkBzL,EAAQyL,gBAAgBhD,KAAKmD,IAAoB,CAC5ErN,KAAM,kBACNqN,qBACI,MACH5L,EAAQ2O,UAAY,CACrB,CACEpQ,KAAM,YACNoQ,UAAW3O,EAAQ2O,UACnBD,QAAS,CAAC,CAAEnQ,KAAM,OAAQiD,KAAMxB,EAAQ2O,cAExC,MACD3O,EAAQoH,QAAU,CAAC,CAAE7I,KAAM,OAAQiD,KAAMxB,EAAQoH,UAAa,GAErE,CAGA,SAAS+I,GAAiBC,GACxB,OAAOA,EAAS3H,KAAKzI,IAAa,IAC7BA,EACHgM,MAAOkE,GAAgBlQ,MAE3B,CAGA,SAASqQ,GAAgBC,EAAMC,GAC7B,GAAID,IAASC,EACX,OAAO,EACT,GAAY,MAARD,GAAwB,MAARC,EAClB,OAAO,EACT,GAAoB,iBAATD,GAAqC,iBAATC,EACrC,OAAOD,IAASC,EAClB,GAAID,EAAKzQ,cAAgB0Q,EAAK1Q,YAC5B,OAAO,EACT,GAAIyQ,aAAgBlF,MAAQmF,aAAgBnF,KAC1C,OAAOkF,EAAKE,YAAcD,EAAKC,UAEjC,GAAItJ,MAAMC,QAAQmJ,GAAO,CACvB,GAAIA,EAAKlN,SAAWmN,EAAKnN,OACvB,OAAO,EACT,IAAK,IAAImC,EAAI,EAAGA,EAAI+K,EAAKlN,OAAQmC,IAC/B,IAAK8K,GAAgBC,EAAK/K,GAAIgL,EAAKhL,IACjC,OAAO,EAEX,OAAO,CACX,CACE,MAAMkL,EAAQzM,OAAO0M,KAAKJ,GACpBK,EAAQ3M,OAAO0M,KAAKH,GAC1B,GAAIE,EAAMrN,SAAWuN,EAAMvN,OACzB,OAAO,EACT,IAAK,MAAMzF,KAAO8S,EAAO,CACvB,IAAKE,EAAMhL,SAAShI,GAClB,OAAO,EACT,IAAK0S,GAAgBC,EAAK3S,GAAM4S,EAAK5S,IACnC,OAAO,CACb,CACE,OAAO,CACT,CAGAgN,eAAeiG,GAA6BC,GAC1C,IAAKA,EACH,MAAO,GAET,GAAIC,WAAWC,UAAYF,aAAkCC,WAAWC,SACtE,OAAOC,QAAQC,IACb/J,MAAMgK,KAAKL,GAAwBpI,KAAIkC,MAAOwG,IAC5C,MAAMrR,KAAEA,EAAIvB,KAAEA,GAAS4S,EACjBC,QAAgB,IAAIJ,SAAQ,CAACK,EAASC,KAC1C,MAAMtD,EAAS,IAAIuD,WACnBvD,EAAOwD,OAAUC,IACf,IAAInS,EACJ+R,EAAqC,OAA5B/R,EAAKmS,EAAYC,aAAkBjW,EAAS6D,EAAG4G,OAAO,EAEjE8H,EAAO2D,QAAWtR,GAAUiR,EAAOjR,GACnC2N,EAAO4D,cAAcT,EAAW,IAElC,MAAO,CACLrR,OACA+R,YAAatT,EACbuT,IAAKV,EACN,KAIP,GAAIlK,MAAMC,QAAQ0J,GAChB,OAAOA,EAET,MAAM,IAAIjR,MAAM,2BAClB,CAiIA,SAASmS,GAAyC/R,GAChD,GAAqB,cAAjBA,EAAQiH,KACV,OAAO,EAET,MAAM+K,EAAqBhS,EAAQgM,MAAMN,QAAO,CAACuG,EAAWvJ,EAAMmG,IAC3C,eAAdnG,EAAKnK,KAAwBsQ,EAAQoD,OAExCC,EAA0BlS,EAAQgM,MAAMpJ,MAAMoP,EAAqB,GAAG/O,QAAQyF,GAAuB,oBAAdA,EAAKnK,OAClG,OAAO2T,EAAwB9O,OAAS,GAAK8O,EAAwB7K,OAAOqB,GAAS,WAAYA,EAAKkD,gBACxG,mDCjmDEuG,GAAAxN,wCCQF,IAAIhK,EAAQyX,EAIRC,EAAW,mBAAsBrO,OAAOsO,GAAKtO,OAAOsO,GAHxD,SAAYC,EAAGC,GACb,OAAQD,IAAMC,IAAM,IAAMD,GAAK,EAAIA,GAAM,EAAIC,IAAQD,GAAMA,GAAKC,GAAMA,CACxE,EAEE9U,EAAW/C,EAAM+C,SACjBpB,EAAY3B,EAAM2B,UAClBmW,EAAkB9X,EAAM8X,gBACxBC,EAAgB/X,EAAM+X,cA0BxB,SAASC,EAAuBC,GAC9B,IAAIC,EAAoBD,EAAKE,YAC7BF,EAAOA,EAAK7Q,MACZ,IACE,IAAIgR,EAAYF,IAChB,OAAQR,EAASO,EAAMG,EACxB,CAAC,MAAO1S,GACP,OAAO,CACX,CACA,CAIA,IAAI2S,EACF,oBAAuBhU,aACvB,IAAuBA,OAAOxC,eAC9B,IAAuBwC,OAAOxC,SAAS5B,cANzC,SAAgCqY,EAAWH,GACzC,OAAOA,GACT,EArCA,SAAgCG,EAAWH,GACzC,IAAI/Q,EAAQ+Q,IACVI,EAAYxV,EAAS,CAAEkV,KAAM,CAAE7Q,MAAOA,EAAO+Q,YAAaA,KAC1DF,EAAOM,EAAU,GAAGN,KACpBO,EAAcD,EAAU,GAmB1B,OAlBAT,GACE,WACEG,EAAK7Q,MAAQA,EACb6Q,EAAKE,YAAcA,EACnBH,EAAuBC,IAASO,EAAY,CAAEP,KAAMA,GACrD,GACD,CAACK,EAAWlR,EAAO+Q,IAErBxW,GACE,WAEE,OADAqW,EAAuBC,IAASO,EAAY,CAAEP,KAAMA,IAC7CK,GAAU,WACfN,EAAuBC,IAASO,EAAY,CAAEP,KAAMA,GAC5D,GACK,GACD,CAACK,IAEHP,EAAc3Q,GACPA,CACT,SAoB4BqR,GAAAC,0BAC1B5X,IAAWd,EAAM0Y,qBAAuB1Y,EAAM0Y,qBAAuBL,KD9DpDZ,gBEHnB,IAAIkB,GAAMtP,OAAOC,UAAUC,eCM3B,MAAMqP,GAAiB,IAAIC,QAGrBC,GAAO,OAKPC,GAA8BD,KAC9BE,GAAS3P,OACT4P,GAAeC,GAAIA,IAAMH,GACzBI,GAAcD,GAAgB,mBAALA,EACzBE,GAAe,CAACC,EAAGC,KAAK,IACnBD,KACAC,IAELC,GAAiB3B,GAAIuB,GAAWvB,EAAE4B,MAElCC,GAAc,CAAE,EAChBC,GAAgB,CAAE,EAClBC,GAAgB,YAEhBC,UAAyBvV,QAAUsV,GACnCE,UAA2BhY,UAAY8X,GACvCG,GAAeF,IAAmB,SAAUvV,OAE5C0V,GAAoB,CAACC,EAAOhX,KAC9B,MAAMmR,EAAQyE,GAAeqB,IAAID,GACjC,MAAO,CAEH,KAAKf,GAAYjW,IAAQgX,EAAMC,IAAIjX,IAAQyW,GAE1CS,IACG,IAAKjB,GAAYjW,GAAM,CACnB,MAAMmX,EAAOH,EAAMC,IAAIjX,GAGjBA,KAAO0W,KACTA,GAAc1W,GAAOmX,GAEzBhG,EAAM,GAAGnR,EAAKoW,GAAae,EAAMD,GAAOC,GAAQV,GAChE,GAGQtF,EAAM,GAEN,KACS8E,GAAYjW,IAETA,KAAO0W,GAAsBA,GAAc1W,IAG3CiW,GAAYjW,IAAQgX,EAAMC,IAAIjX,IAAQyW,GAErD,EAUD,IAAIW,IAAS,EACjB,MAEOC,GAAeC,IAAkBV,IAAmBvV,OAAOC,iBAAmB,CACjFD,OAAOC,iBAAiBiW,KAAKlW,QAC7BA,OAAOI,oBAAoB8V,KAAKlW,SAChC,CACAyU,GACAA,IAoCE0B,GAAS,CACXC,SA5Ca,IAAIL,GA6CjBM,UApCc,KACd,MAAMC,EAAkBd,IAAqBhY,SAAS8Y,gBACtD,OAAO1B,GAAY0B,IAAwC,WAApBA,CAA4B,GAoCjEC,GAAuB,CACzBC,UAnCeC,IAEXjB,IACAhY,SAASyC,iBAAiB,mBAAoBwW,GAElDT,GAAc,QAASS,GAChB,KACCjB,IACAhY,SAAS4C,oBAAoB,mBAAoBqW,GAErDR,GAAe,QAASQ,EAAS,GA0BrCC,cAvBmBD,IAEnB,MAAME,EAAW,KACbZ,IAAS,EACTU,GAAU,EAGRG,EAAY,KACdb,IAAS,CAAK,EAIlB,OAFAC,GAAc,SAAUW,GACxBX,GAAc,UAAWY,GAClB,KACHX,GAAe,SAAUU,GACzBV,GAAe,UAAWW,EAAU,CACvC,GAWCC,IAAmBlb,EAAMmb,MACzBC,IAAaxB,IAAmBE,GAEhCuB,GAAOxR,GA/FwB+P,WAA0BvV,OAA8B,uBAAKsV,GA+FpDtV,OAA8B,sBAAEwF,GAAKyR,WAAWzR,EAAG,GAI3F0R,GAA4BH,GAAYzZ,EAAAA,UAAYmW,EAAeA,gBAEnE0D,GAA2C,oBAAdtY,WAA6BA,UAAUuY,WAEpEC,IAAkBN,IAAaI,KAAwB,CACzD,UACA,MACFxQ,SAASwQ,GAAoBG,gBAAkBH,GAAoBI,UAM/DC,GAAQ,IAAIhD,QACZiD,GAAe,CAAC1U,EAAOxD,IAAOoV,GAAO1P,UAAUvB,SAASyB,KAAKpC,KAAW,WAAWxD,KAEzF,IAAImY,GAAU,EASd,MAAMC,GAAcC,IAChB,MAAMrY,SAAcqY,EACdC,EAASJ,GAAaG,EAAK,QAC3BE,EAAUL,GAAaG,EAAK,UAC5BG,EAAgBN,GAAaG,EAAK,UACxC,IAAI1Q,EACA2I,EACJ,GAAI8E,GAAOiD,KAASA,GAAQC,GAAWC,EA8BnC5Q,EAAS2Q,EAASD,EAAII,SAAmB,UAARzY,EAAmBqY,EAAIlU,WAAqB,UAARnE,EAAmBoC,KAAKC,UAAUgW,GAAO,GAAKA,MA9BvE,CAI5C,GADA1Q,EAASsQ,GAAM5B,IAAIgC,GACf1Q,EAAQ,OAAOA,EAMnB,GAFAA,IAAWwQ,GAAU,IACrBF,GAAM9L,IAAIkM,EAAK1Q,GACXgB,MAAMC,QAAQyP,GAAM,CAGpB,IADA1Q,EAAS,IACL2I,EAAQ,EAAGA,EAAQ+H,EAAIxT,OAAQyL,IAC/B3I,GAAUyQ,GAAWC,EAAI/H,IAAU,IAEvC2H,GAAM9L,IAAIkM,EAAK1Q,EAC3B,CACQ,GAAI6Q,EAAe,CAEf7Q,EAAS,IACT,MAAMwK,EAAOiD,GAAOjD,KAAKkG,GAAKK,OAC9B,MAAOrD,GAAY/E,EAAQ6B,EAAKvI,QACvByL,GAAYgD,EAAI/H,MACjB3I,GAAU2I,EAAQ,IAAM8H,GAAWC,EAAI/H,IAAU,KAGzD2H,GAAM9L,IAAIkM,EAAK1Q,EAC3B,CACA,CAGI,OAAOA,CAAM,EAGXgR,GAAavZ,IACf,GAAImW,GAAWnW,GACX,IACIA,EAAMA,GACT,CAAC,MAAO4G,GAEL5G,EAAM,EAClB,CAII,MAAMmL,EAAOnL,EAGb,MAAO,CADPA,EAAoB,iBAAPA,EAAkBA,GAAOuJ,MAAMC,QAAQxJ,GAAOA,EAAIyF,OAASzF,GAAOgZ,GAAWhZ,GAAO,GAG7FmL,EACH,EAIL,IAAIqO,GAAc,EAClB,MAAMC,GAAe,MAAMD,GAE3BxM,eAAe0M,MAAkBvO,GAC7B,MAAO6L,EAAO2C,EAAMC,EAAOC,GAAS1O,EAG9BvG,EAAUwR,GAAa,CACzB0D,eAAe,EACfC,cAAc,GACE,kBAAVF,EAAsB,CAC5BG,WAAYH,GACZA,GAAS,CAAA,GACb,IAAIC,EAAgBlV,EAAQkV,cAC5B,MAAMG,EAAwBrV,EAAQsV,gBACtC,IAAIC,EAAiBvV,EAAQuV,eAC7B,MAGMJ,EAAenV,EAAQmV,aAG7B,GAAI5D,GAAWwD,GAAO,CAClB,MAAMS,EAAYT,EACZU,EAAc,GACdC,EAAKtD,EAAMjE,OACjB,IAAK,MAAM/S,KAAOsa,GAEb,iBAAiBna,KAAKH,IAAQoa,EAAUpD,EAAMC,IAAIjX,GAAKua,KACpDF,EAAY1T,KAAK3G,GAGzB,OAAOqT,QAAQC,IAAI+G,EAAYvP,IAAI0P,GAC3C,CACI,OAAOA,EAAYb,GACnB3M,eAAewN,EAAYD,GAEvB,MAAOva,GAAOuZ,GAAUgB,GACxB,IAAKva,EAAK,OACV,MAAOiX,EAAKlK,GAAOgK,GAAkBC,EAAOhX,IACrCya,EAAoBC,EAAUC,EAAOC,GAAWhF,GAAeqB,IAAID,GACpE6D,EAAkB,KACpB,MAAMC,EAAeL,EAAmBza,GAExC,OADmBmW,GAAWvR,EAAQoV,YAAcpV,EAAQoV,WAAW/C,IAAMxO,KAAM8R,IAA6B,IAAvB3V,EAAQoV,qBAItFW,EAAM3a,UACN4a,EAAQ5a,GACX8a,GAAgBA,EAAa,IACtBA,EAAa,GC1QnB,GD0QqDtE,MAAK,IAAIS,IAAMxO,OAGtEwO,IAAMxO,IAAI,EAGrB,GAAI0C,EAAK1F,OAAS,EAEd,OAAOoV,IAEX,IACInY,EADA+F,EAAOmR,EAGX,MAAMmB,EAAmBtB,KACzBiB,EAAS1a,GAAO,CACZ+a,EACA,GAEJ,MAAMC,GAAqB/E,GAAYkE,GACjChJ,EAAQ8F,IAIRgE,EAAgB9J,EAAM1I,KACtByS,EAAc/J,EAAMgK,GACpBC,EAAgBnF,GAAYiF,GAAeD,EAAgBC,EAUjE,GARIF,IACAb,EAAiBhE,GAAWgE,GAAkBA,EAAeiB,EAAeH,GAAiBd,EAE7FpN,EAAI,CACAtE,KAAM0R,EACNgB,GAAIC,KAGRjF,GAAW1N,GAEX,IACIA,EAAOA,EAAK2S,EACf,CAAC,MAAOxU,GAELlE,EAAQkE,CACxB,CAGQ,GAAI6B,GAAQ8N,GAAc9N,GAAO,CAS7B,GANAA,QAAaA,EAAK4S,OAAOzU,IACrBlE,EAAQkE,CAAG,IAKXmU,IAAqBL,EAAS1a,GAAK,GAAI,CACvC,GAAI0C,EAAO,MAAMA,EACjB,OAAO+F,CACV,CAAU/F,GAASsY,GA3FJ,CAACtY,GACmB,mBAA1BuX,EAAuCA,EAAsBvX,IAAmC,IAA1BuX,EA0FvCC,CAAgBxX,KAGrDoX,GAAgB,EAEhB/M,EAAI,CACAtE,KAAM2S,EACND,GAAIpF,KAGxB,CAEQ,GAAI+D,IACKpX,EAED,GAAIyT,GAAW2D,GAAgB,CAC3B,MAAMwB,EAAqBxB,EAAcrR,EAAM2S,GAC/CrO,EAAI,CACAtE,KAAM6S,EACN5Y,MAAOqT,GACPoF,GAAIpF,IAE5B,MAEoBhJ,EAAI,CACAtE,OACA/F,MAAOqT,GACPoF,GAAIpF,KAgBpB,GAVA2E,EAAS1a,GAAK,GAAKyZ,KAEnBpG,QAAQK,QAAQmH,KAAmBrE,MAAK,KAGpCzJ,EAAI,CACAoO,GAAIpF,IACN,KAGFrT,EAIJ,OAAO+F,EAHH,GAAIsR,EAAc,MAAMrX,CAIpC,CACA,CAEA,MAAM6Y,GAAoB,CAACT,EAAcla,KACrC,IAAI,MAAMZ,KAAO8a,EACTA,EAAa9a,GAAK,IAAI8a,EAAa9a,GAAK,GAAGY,EACvD,EA6FM4a,GDtdC,SAASC,EAAOC,EAAKC,GAC3B,IAAIC,EAAMC,EACV,GAAIH,IAAQC,EAAK,OAAO,EAExB,GAAID,GAAOC,IAAQC,EAAKF,EAAIxZ,eAAiByZ,EAAIzZ,YAAa,CAC7D,GAAI0Z,IAASnO,KAAM,OAAOiO,EAAI7I,YAAc8I,EAAI9I,UAChD,GAAI+I,IAASE,OAAQ,OAAOJ,EAAI3W,aAAe4W,EAAI5W,WAEnD,GAAI6W,IAASrS,MAAO,CACnB,IAAKsS,EAAIH,EAAIjW,UAAYkW,EAAIlW,OAC5B,KAAOoW,KAASJ,EAAOC,EAAIG,GAAMF,EAAIE,MAEtC,OAAiB,IAAVA,CACV,CAEE,IAAKD,GAAuB,iBAARF,EAAkB,CAErC,IAAKE,KADLC,EAAM,EACOH,EAAK,CACjB,GAAI/F,GAAInP,KAAKkV,EAAKE,MAAWC,IAAQlG,GAAInP,KAAKmV,EAAKC,GAAO,OAAO,EACjE,KAAMA,KAAQD,KAASF,EAAOC,EAAIE,GAAOD,EAAIC,IAAQ,OAAO,CAChE,CACG,OAAOvV,OAAO0M,KAAK4I,GAAKlW,SAAWoW,CACtC,CACA,CAEC,OAAOH,GAAQA,GAAOC,GAAQA,CAC/B,GC8bO3E,GAAO+E,IA7FI,EAACC,EAAUpX,KAMzB,IAAKgR,GAAeD,IAAIqG,GAAW,CAC/B,MAAMC,EAAO7F,GAAawB,GAAsBhT,GAG1C6V,EAAqBpU,OAAO6V,OAAO,MACnCH,EAASrC,GAAenC,KAAKxB,GAAWiG,GAC9C,IAAIG,EAAUrG,GACd,MAAMsG,EAAgB/V,OAAO6V,OAAO,MAC9B5G,EAAY,CAACtV,EAAK8X,KACpB,MAAMuE,EAAOD,EAAcpc,IAAQ,GAGnC,OAFAoc,EAAcpc,GAAOqc,EACrBA,EAAK1V,KAAKmR,GACH,IAAIuE,EAAKC,OAAOD,EAAKjQ,QAAQ0L,GAAW,EAAE,EAE/CyE,EAAS,CAACvc,EAAKoE,EAAO+S,KACxB6E,EAASjP,IAAI/M,EAAKoE,GAClB,MAAMiY,EAAOD,EAAcpc,GAC3B,GAAIqc,EACA,IAAK,MAAMG,KAAMH,EACbG,EAAGpY,EAAO+S,EAE9B,EAEcsF,EAAe,KACjB,IAAK7G,GAAeD,IAAIqG,KAEpBpG,GAAe7I,IAAIiP,EAAU,CACzBvB,EACApU,OAAO6V,OAAO,MACd7V,OAAO6V,OAAO,MACd7V,OAAO6V,OAAO,MACdH,EACAQ,EACAjH,KAEC8C,IAAW,CAOZ,MAAMsE,EAAeT,EAAKpE,UAAUS,WAAWf,KAAKxB,GAAWwF,GAAkBhE,KAAKxB,GAAW0E,EC7ajG,KD8aMkC,EAAmBV,EAAKlE,cAAcO,WAAWf,KAAKxB,GAAWwF,GAAkBhE,KAAKxB,GAAW0E,EC7arG,KD8aJ0B,EAAU,KACNO,GAAgBA,IAChBC,GAAoBA,IAIpB/G,GAAegH,OAAOZ,EAAS,CAEvD,CACA,EAQQ,OANAS,IAMO,CACHT,EACAD,EACAU,EACAN,EAEZ,CACI,MAAO,CACHH,EACApG,GAAeqB,IAAI+E,GAAU,GAChC,EAgBmBa,CAAU,IAAIC,KAEhCC,GAAgB3G,GAAa,CAE/B4G,cAAelH,GACfmH,UAAWnH,GACXoH,QAASpH,GACTqH,aAnBiB,CAACC,EAAGC,EAAIC,EAAQtD,EAAYiC,KAC7C,MAAMsB,EAAgBD,EAAOE,gBACvBC,EAAoBxB,EAAKyB,WAEzBC,MAAc9V,KAAKC,SAAW,KAAQ,IAAM2V,EAAoB,EAAIA,EAAoB,KAAOH,EAAOM,oBACvG3H,GAAYsH,IAAkBE,EAAoBF,GAGvDjF,WAAW0B,EAAY2D,EAAS1B,EAAK,EAYrC4B,YAAa/H,GAEbgI,mBAAmB,EACnBC,uBAAuB,EACvBC,mBAAmB,EACnBC,oBAAoB,EAEpBL,mBAAoBlF,GAAiB,IAAQ,IAC7CwF,sBAAuB,IACvBC,iBAAkB,IAClBC,eAAgB1F,GAAiB,IAAO,IAExC8C,WACA6C,SAAU,KAAI,EACdrH,SACA+E,UACAuC,SAAU,CAAA,GAEd9G,IAmBM+G,GAAmBC,EAAaA,cAAC,IE7fjCC,GAAiB7H,IAAmBvV,OAAOqd,qBAC3CC,GAAMF,GAAiBpd,OAAOqd,qBAAuB,GAmDrDE,GAAsBD,GAAIje,QAlBZme,GAAa,CAACC,EAAMC,EAAUzB,IAenCuB,EAAWC,EAbFC,QAAiB5T,KAC7B,MAAOnL,GAAOuZ,GAAUuF,IACX,CAAA,CAAA,CAAAlE,GAAWhF,GAAeqB,IAAID,IAC3C,GAAIhX,EAAI6K,WCjDI,SDoDR,OAAOkU,KAAY5T,GAEvB,MAAM6T,EAAMpE,EAAQ5a,GACpB,OAAIiW,GAAY+I,GAAaD,KAAY5T,WAClCyP,EAAQ5a,GACRgf,EACV,GACgC1B,KA9CjCmB,KAEApd,OAAO4d,uBAAyBjiB,GEkFxC,MAAM2hB,GAAM3hB,EAAM2hB,KAIlB,CAAEO,IACE,OAAOA,EAASC,QACZ,IAAK,UACD,MAAMD,EACV,IAAK,YACD,OAAOA,EAAS9a,MACpB,IAAK,WACD,MAAM8a,EAASE,OACnB,QASI,MARAF,EAASC,OAAS,UAClBD,EAAS1I,MAAMN,IACXgJ,EAASC,OAAS,YAClBD,EAAS9a,MAAQ8R,CAAC,IAClBxU,IACAwd,EAASC,OAAS,WAClBD,EAASE,OAAS1d,CAAC,IAEjBwd,EAEjB,GACKG,GAAc,CAChBC,QAAQ,GAugBFC,IF/jBQC,GE0DI,CAAC7F,EAAM8F,EAASnC,KAClC,MAAMtG,MAAEA,EAAKwE,QAAEA,EAAOkE,SAAEA,EAAQC,aAAEA,EAAYC,kBAAEA,EAAiB5B,kBAAEA,EAAiB6B,gBAAEA,EAAeC,kBAAEA,EAAiBC,mBAAEA,EAAkBC,iBAAEA,GAAqB1C,GAC5J7C,EAAoBC,EAAUC,EAAOC,GAAWhF,GAAeqB,IAAID,IAKnEhX,EAAKigB,GAASC,GAAYvG,GAE3BwG,EAAoBC,EAAMA,QAAC,GAG3BC,EAAeD,EAAMA,QAAC,GAEtBE,EAASF,EAAMA,OAACpgB,GAChBugB,EAAaH,EAAMA,OAACX,GACpBe,EAAYJ,EAAMA,OAAC9C,GACnBmD,EAAY,IAAID,EAAUE,QAC1BC,EAAW,IAAIF,IAAY/I,aAAe+I,IAAYhJ,YACrDmJ,EAAUC,EAAUC,EAAgBC,GAAmBhK,GAAkBC,EAAOhX,GACjFghB,EAAoBZ,EAAAA,OAAO,CAAE,GAAEM,QAG/BpC,EAAW2C,GAActB,GAAgBsB,GAAc3D,EAAOgB,UAAY4C,GAAc5D,EAAOgB,SAASte,GAAO2f,EAC/GwB,EAAU,CAAChK,EAAMuJ,KACnB,IAAI,MAAMtD,KAAK4D,EAAkB,CAC7B,MAAMI,EAAIhE,EACV,GAAU,SAANgE,GACA,IAAK5F,EAAQrE,EAAKiK,GAAIV,EAAQU,IAAK,CAC/B,IAAKH,GAAc9J,EAAKiK,IACpB,OAAO,EAEX,IAAK5F,EAAQ6F,EAAcX,EAAQU,IAC/B,OAAO,CAE/B,OAEgB,GAAIV,EAAQU,KAAOjK,EAAKiK,GACpB,OAAO,CAG3B,CACQ,OAAO,CAAI,EAETjM,EAAcmM,EAAAA,SAAQ,KACxB,MAAMC,IACGvhB,KACAyf,IAEAwB,GAAcrB,IAEfa,IAAYpC,aACZqB,IACyB,IAAtB1B,EAJuC4B,GAO5C4B,EAAoBrQ,IAEtB,MAAMsQ,EAAWrL,GAAajF,GAE9B,cADOsQ,EAASlH,GACXgH,EAGE,CACHG,cAAc,EACdC,WAAW,KACRF,GALIA,CAMV,EAECG,EAAahB,IACbiB,EAAcd,IACde,EAAiBN,EAAiBI,GAClCG,EAAiBH,IAAeC,EAAcC,EAAiBN,EAAiBK,GAItF,IAAIG,EAAoBF,EACxB,MAAO,CACH,KACI,MAAMG,EAAcT,EAAiBZ,KAErC,OADsBO,EAAQc,EAAaD,IAYvCA,EAAkBvZ,KAAOwZ,EAAYxZ,KACrCuZ,EAAkBL,UAAYM,EAAYN,UAC1CK,EAAkBN,aAAeO,EAAYP,aAC7CM,EAAkBtf,MAAQuf,EAAYvf,MAC/Bsf,IAEPA,EAAoBC,EACbA,EAC3B,EAEY,IAAIF,EACP,GAEF,CACC/K,EACAhX,IAGEkiB,EAASxM,wBAAqByM,EAAAA,aAAarK,GAAWgJ,EAAe9gB,GAAK,CAAC0gB,EAASvJ,KAC7EgK,EAAQhK,EAAMuJ,IAAU5I,GAAU,KAE/C,CACId,EACAhX,IACAmV,EAAY,GAAIA,EAAY,IAC1BiN,GAAkBjC,EAAkBO,QACpC2B,EAAiB5H,EAAmBza,IAAQya,EAAmBza,GAAKyF,OAAS,EAC7Emc,EAAaM,EAAOzZ,KACpBA,EAAOwY,GAAcW,GAActD,GAAY/H,GAAc+H,GAAYK,GAAIL,GAAYA,EAAWsD,EACpGlf,EAAQwf,EAAOxf,MAEf4f,EAAelC,EAAMA,OAAC3X,GACtB4Y,EAAerB,EAAmBiB,GAAcW,GAAcX,GAAcqB,EAAa5B,SAAWjY,EAAO6Z,EAAa5B,QAAUkB,EAAanZ,EAI/I8Z,IAEEF,IAAmBpB,GAAcve,MAEjC0f,IAAmBnB,GAAcrB,GAA2BA,GAE5Da,IAAYpC,aAIZqB,GAAiBuB,GAAcxY,IAAgBuV,EAG5CiD,GAAcxY,IAASuV,IAI5BwE,KAA4BxiB,GAAOyf,GAAW2C,GAAkBG,GAChEb,EAAeT,GAAciB,EAAOR,cAAgBc,EAAyBN,EAAOR,aACpFC,EAAYV,GAAciB,EAAOP,WAAaa,EAAyBN,EAAOP,UAG9E3H,EAAamI,eAAYnV,MAAOyV,IAClC,MAAMC,EAAiBnC,EAAWG,QAClC,IAAK1gB,IAAQ0iB,GAAkBrC,EAAaK,SAAWD,IAAYpC,WAC/D,OAAO,EAEX,IAAIsE,EACAC,EACAC,GAAU,EACd,MAAM5G,EAAOwG,GAAkB,CAAE,EAG3BK,GAAyBnI,EAAM3a,KAASic,EAAKqD,OAW5CyD,EAAoB,IACnB7K,IACQmI,EAAaK,SAAW1gB,IAAQsgB,EAAOI,SAAWP,EAAkBO,QAEzE1gB,IAAQsgB,EAAOI,QAGpBsC,EAAa,CACftB,cAAc,EACdC,WAAW,GAETsB,EAA8B,KAChCpC,EAASmC,EAAW,EAElBE,EAAe,KAEjB,MAAMC,EAAcxI,EAAM3a,GACtBmjB,GAAeA,EAAY,KAAOP,UAC3BjI,EAAM3a,EAC7B,EAGcojB,EAAe,CACjB1B,cAAc,GAIdT,GAAcL,IAAWnY,QACzB2a,EAAazB,WAAY,GAE7B,IAmCI,GAlCImB,IACAjC,EAASuC,GAGL9F,EAAOc,gBAAkB6C,GAAcL,IAAWnY,OAClD6P,YAAW,KACHuK,GAAWE,KACXtC,IAAYzD,cAAchd,EAAKsd,EAC3D,GACuBA,EAAOc,gBAIdzD,EAAM3a,GAAO,CACT0iB,EAAezC,GACfxG,QAMPkJ,EAASC,GAAWjI,EAAM3a,GAC3B2iB,QAAgBA,EACZG,GAGAxK,WAAW4K,EAAc5F,EAAOa,mBAQ/BxD,EAAM3a,IAAQ2a,EAAM3a,GAAK,KAAO4iB,EAMjC,OALIE,GACIC,KACAtC,IAAY5C,YAAY7d,IAGzB,EAGXgjB,EAAWtgB,MAAQwe,GAanB,MAAMmC,EAAe3I,EAAS1a,GAC9B,IAAKihB,GAAcoC,KAClBT,GAAWS,EAAa,IACzBT,GAAWS,EAAa,IACJ,IAApBA,EAAa,IAOT,OANAJ,IACIH,GACIC,KACAtC,IAAY5C,YAAY7d,IAGzB,EAIX,MAAMsjB,EAAY1C,IAAWnY,KAG7Bua,EAAWva,KAAO+S,EAAQ8H,EAAWX,GAAWW,EAAYX,EAExDG,GACIC,KACAtC,IAAYxD,UAAU0F,EAAS3iB,EAAKsd,EAG/C,CAAC,MAAO1W,GACLsc,IACA,MAAMK,EAAgB9C,KAChBxC,mBAAEA,GAAuBsF,EAE1BA,EAAclF,aAEf2E,EAAWtgB,MAAQkE,EAGfkc,GAAyBC,MACzBQ,EAAcrG,QAAQtW,EAAK5G,EAAKujB,KACL,IAAvBtF,GAA+BuF,GAAavF,IAAuBA,EAAmBrX,MACjF6Z,IAAY3C,mBAAsB2C,IAAY1C,wBAAyB4C,KAIxE4C,EAAcpG,aAAavW,EAAK5G,EAAKujB,GAAgB1J,IACjD,MAAMiB,EAAeL,EAAmBza,GACpC8a,GAAgBA,EAAa,IAC7BA,EAAa,GHzalB,EGya8DjB,EAC7F,GAC+B,CACC6D,YAAazB,EAAKyB,YAAc,GAAK,EACrC4B,QAAQ,MAMxC,CAKQ,OAHAuD,GAAU,EAEVI,KACO,CAAI,GAYf,CACIjjB,EACAgX,IAIEyM,EAActB,EAAWA,aAC/B,IAAIhX,IACOuO,GAAe1C,EAAOsJ,EAAOI,WAAYvV,IAEpD,IA+GA,GA7GAoN,IAA0B,KACtBgI,EAAWG,QAAUjB,EACrBe,EAAUE,QAAUpD,EAGf2D,GAAcW,KACfU,EAAa5B,QAAUkB,EACnC,IAGIrJ,IAA0B,KACtB,IAAKvY,EAAK,OACV,MAAM0jB,EAAiB1J,EAAWzC,KAAK2J,GAAa7B,IACpD,IAAIsE,EAAyB,EAC7B,GAAIlD,IAAY3C,kBAAmB,CAC/B,MAAM8F,EAAUnW,KAAKoW,MACrBF,EAAyBC,EAAUnD,IAAYvC,qBAC3D,CAGQ,MAkBM4F,EFlaY,EAAC9jB,EAAK+jB,EAAWjM,KACvC,MAAMkM,EAAoBD,EAAU/jB,KAAS+jB,EAAU/jB,GAAO,IAE9D,OADAgkB,EAAkBrd,KAAKmR,GAChB,KACH,MAAM5G,EAAQ8S,EAAkB5X,QAAQ0L,GACpC5G,GAAS,IAET8S,EAAkB9S,GAAS8S,EAAkBA,EAAkBve,OAAS,GACxEue,EAAkBxZ,MAC9B,CACK,EEwZuByZ,CAAkBjkB,EAAKya,GAlBtB,CAAC7Z,EAAMqb,EAAO,CAAA,KAC/B,GHxeQ,GGweJrb,EAAsC,CACtC,MAAMijB,EAAMpW,KAAKoW,MACbpD,IAAY3C,mBAAqB+F,EAAMF,GAA0BhD,MACjEgD,EAAyBE,EAAMpD,IAAYvC,sBAC3CwF,IAEpB,MAAmB,GH7eK,GG6eD9iB,EACH6f,IAAY1C,uBAAyB4C,KACrC+C,QAED,IHhfE,GGgfE9iB,EACP,OAAOoZ,IACJ,GHjfY,GGifRpZ,EACP,OAAOoZ,EAAWiC,EAClC,CACY,IAsBJ,OAlBAoE,EAAaK,SAAU,EACvBJ,EAAOI,QAAU1gB,EACjBmgB,EAAkBO,SAAU,EAE5BG,EAAS,CACLtG,GAAI0F,IAGJsC,IACItB,GAAcxY,IAAS2P,GAEvBsL,IAIArL,GAAIqL,IAGL,KAEHrD,EAAaK,SAAU,EACvBoD,GAAa,CAChB,GACF,CACC9jB,IAGJuY,IAA0B,KACtB,IAAI2L,EACJ,SAASte,IAGL,MAAMue,EAAWX,GAAa3D,GAAmBA,EAAgBe,IAAWnY,MAAQoX,EAIhFsE,QAAYD,IACZA,EAAQ5L,WAAW8L,EAASD,GAE5C,CACQ,SAASC,IAGAxD,IAAWle,QAAUod,IAAqBW,IAAY/I,cAAiBqI,IAAsBU,IAAYhJ,WAI1G7R,IAHAoU,EAAWqF,IAAa7I,KAAK5Q,EAK7C,CAEQ,OADAA,IACO,KACCse,IACAG,aAAaH,GACbA,GAAU,EAC1B,CACS,GACF,CACCrE,EACAC,EACAC,EACA/f,IAGJ+U,EAAAA,cAAcsM,GAKV3B,GAAYuB,GAAcxY,IAASzI,EAAK,CAIxC,IAAKkY,IAAmBE,GACpB,MAAM,IAAInW,MAAM,yDAGpBse,EAAWG,QAAUjB,EACrBe,EAAUE,QAAUpD,EACpB+C,EAAaK,SAAU,EACvB,MAAM1B,EAAMpE,EAAQ5a,GACpB,IAAKihB,GAAcjC,GAAM,CACrB,MAAMsF,EAAUb,EAAYzE,GAC5BL,GAAI2F,EAChB,CACQ,IAAIrD,GAAcve,GAQd,MAAMA,EARgB,CACtB,MAAM4hB,EAAUtK,EAAWqF,IACtB4B,GAAcI,KACfiD,EAAQnF,OAAS,YACjBmF,EAAQlgB,OAAQ,GAEpBua,GAAI2F,EAChB,CAGA,CAoBI,MAnBoB,CAChBvI,OAAQ0H,EACR,QAAIhb,GAEA,OADAuY,EAAkBvY,MAAO,EAClB4Y,CACV,EACD,SAAI3e,GAEA,OADAse,EAAkBte,OAAQ,EACnBA,CACV,EACD,gBAAIgf,GAEA,OADAV,EAAkBU,cAAe,EAC1BA,CACV,EACD,aAAIC,GAEA,OADAX,EAAkBW,WAAY,EACvBA,CACnB,EAEsB,EF3iBX,YAAuBxW,GAE1B,MAAMoZ,EArCHnO,GAAa2G,GAAeyH,EAAUA,WAACjG,MAuCnCve,EAAKwc,EAAIiI,GApDN,CAACtZ,GACRgL,GAAWhL,EAAK,IAAM,CACzBA,EAAK,GACLA,EAAK,GACLA,EAAK,IAAM,CAAA,GACX,CACAA,EAAK,GACL,MACa,OAAZA,EAAK,GAAcA,EAAK,GAAKA,EAAK,KAAO,CAAA,GA4CfuZ,CAAUvZ,GAE/BmS,EF6aO,EAACjH,EAAGC,KAErB,MAAMJ,EAAIE,GAAaC,EAAGC,GAE1B,GAAIA,EAAG,CACH,MAAQqI,IAAKgG,EAAIrG,SAAUsG,GAAOvO,GAC1BsI,IAAKkG,EAAIvG,SAAUwG,GAAOxO,EAC9BqO,GAAME,IACN3O,EAAEyI,IAAMgG,EAAGjkB,OAAOmkB,IAElBD,GAAME,IACN5O,EAAEoI,SAAWlI,GAAawO,EAAIE,GAE1C,CACI,OAAO5O,CAAC,EE3bW6O,CAAaR,EAAgBE,GAE5C,IAAI7e,EAAO4Z,GACX,MAAMb,IAAEA,GAAQrB,EACV0H,GAAcrG,GAAO,IAAIje,OAAOke,IACtC,IAAI,IAAIhX,EAAIod,EAAWvf,OAAQmC,KAC3BhC,EAAOof,EAAWpd,GAAGhC,GAEzB,OAAOA,EAAK5F,EAAKwc,GAAMc,EAAOmC,SAAW,KAAMnC,EAClD,GAhBY,IAACkC,mDGrClByF,GA7BA,SAAkBC,EAAWC,GAC5B,GAAyB,mBAAdD,EACV,MAAM,IAAIE,UAAS1kB,wDAAAA,OAAAmE,EAAmEqgB,GAAS,OAKhG,IAAIG,EACAC,EAAe,EAEnB,OAAO,WAAkC,IAAA,IAAAC,EAAA/iB,KAAAgjB,EAAAhgB,UAAAC,OAAZggB,EAAUlc,IAAAA,MAAAic,GAAA7L,EAAA,EAAAA,EAAA6L,EAAA7L,IAAV8L,EAAU9L,GAAAnU,UAAAmU,GACtC0K,aAAagB,GAEb,IAAMxB,EAAMpW,KAAKoW,MAEX6B,EAAmBP,GADCtB,EAAMyB,GAG5BI,GAAoB,GACvBJ,EAAezB,EACfqB,EAAUS,MAAMnjB,KAAMijB,IAEtBJ,EAAY/M,YAAW,WACtBgN,EAAe7X,KAAKoW,MACpBqB,EAAUS,MAAMJ,EAAME,EACtB,GAAEC,EAEJ,CACF,qBCgKA,SAASE,GAASpJ,EAAIqJ,GACpB,OAAiB,MAAVA,EAAiBC,GAAiBtJ,EAAIqJ,GAAUrJ,CACzD,CAKA,SAASuJ,GAAeC,GACtB,MAAO5hB,EAAO6hB,GAAYC,EAAAA,SAAUF,GAMpC,OALArnB,EAAAA,WAAU,KACH+T,GAAgBsT,EAAa5hB,IAChC6hB,EAASD,EACf,GACK,CAACA,EAAa5hB,IACVA,CACT,CAGA,SAAS+hB,IAAQC,IACfA,EAAM,YAAWze,GACjBA,EAAE0e,gBACFA,EAAeC,aACfA,EAAe,GAAEC,uBACjBA,EAAsBnZ,WACtBA,EAAUoZ,gCACVA,EAA+BC,SAC/BA,EAAW,EAACC,eACZA,EAAiB,OAAMC,WACvBA,EAAUtZ,SACVA,EAAQ6P,QACRA,EAAO0J,YACPA,EAAWC,QACXA,EAAOC,KACPA,EACAzf,WAAYiG,EAAcyZ,GAC1B1U,MAAO2U,EAAMC,uBACbA,GAAyB,EACzBC,sBAAuBC,GACrB,IACF,MAAOC,GAAUC,EAAStnB,SAACuN,GACrBga,EAAe,MAAN3f,EAAaA,EAAKyf,EAC3BG,EAAyB,iBAARnB,EAAmB,CAACA,EAAKkB,GAAUA,EACpDE,EAAwBzB,GAAkC,MAAnBM,EAA0BA,EAAkB,IACnFoB,EAA2BnG,EAAOA,SACtC,IAAM9O,GAAiBgV,IACvB,CAACA,KAEK/e,KAAMgK,EAAQsJ,OAAEA,GAAWwD,GACjC,CAACgI,EAAS,YACV,KACA,CAAE5H,aAAc8H,IAEZC,EAAcC,EAAAA,OAAQlV,GAAY,IACxCmV,EAAAA,WAAW,KACTF,EAAYhH,QAAUjO,GAAY,EAAE,GACnC,CAACA,IACJ,MAAQhK,KAAMof,EAAY9L,OAAQ+L,GAAqBvI,GAAO,CAACgI,EAAS,cAAe,MACjFQ,EAAgBJ,EAAOvH,OAACyH,GAC9BD,EAAAA,WAAW,KACTG,EAAcrH,QAAUmH,CAAU,GACjC,CAACA,IACJ,MAAQpf,KAAM0W,EAAS,QAASpD,OAAQiM,GAAiBzI,GAAO,CAACgI,EAAS,UAAW,OAC7E9e,KAAM/F,EAAgBqZ,OAAQkM,GAAa1I,GAAO,CAACgI,EAAS,SAAU,MACxEW,EAAqBP,EAAOvH,OAAC,MAC7B+H,EAAmBR,EAAAA,OAAQ,CAC/Bf,cACAC,UACAC,SAEFc,EAAAA,WAAW,KACTO,EAAiBzH,QAAU,CACzBkG,cACAC,UACAC,OACD,GACA,CAACF,EAAaC,EAASC,IAC1B,MAAMsB,EAAiBC,EAAYlG,aACjCnV,MAAOsb,EAAaC,EAAc,cAChC,IAAI5mB,EAAIgM,EACRqa,EAAa,aACbC,OAASnqB,GACT,MAAM0qB,EAAehW,GAAiB8V,EAAY7V,UAC5CgW,EAAeD,EAAa/iB,OAC5BijB,EAAUpW,GACkC,OAA/C3Q,EAAK6mB,EAAaA,EAAa/iB,OAAS,SAAc3H,EAAS6D,EAAGmM,iBAErE,IACE,MAAM6a,EAAkB,IAAIC,gBAC5BV,EAAmBxH,QAAUiI,EAC7B,MAAME,EAAkBjD,GAAS7J,EAAQoL,GACnC2B,EAA4BlD,GAChCkC,EACAX,GAEI4B,EAAmBrB,EAAYhH,QACrCmI,EAAgBL,GAAc,GAC9B,MAAMQ,EAA6BzC,EAAyBiC,EAAeA,EAAa1d,KACtF,EACExB,OACAG,UACAwf,2BACAxgB,OACAqG,cACAhB,kBACAO,YACK,CACL/E,OACAG,kBACgC,IAA7Bwf,GAAuC,CACxCA,oCAEU,IAATxgB,GAAmB,CAAEA,gBACL,IAAhBqG,GAA0B,CAAEA,uBACR,IAApBhB,GAA8B,CAAEA,2BACtB,IAAVO,GAAoB,CAAEA,aAGvB6a,EAAenB,EAAcrH,cVk3B3C1T,gBAA2BoZ,IACzBA,EAAGU,KACHA,EAAIJ,eACJA,EAAiB,OAAME,YACvBA,EAAWC,QACXA,EAAO8B,gBACPA,EAAeQ,yBACfA,EAAwBxC,WACxBA,EAAUyC,SACVA,EAAQ/b,SACRA,EAAQD,WACRA,EACA/F,WAAYiG,EACZ+E,MAAO2U,EAAS5U,KAAkB1E,YAClCA,EAAW6a,YACXA,EAAc,aAEd,IAAI5mB,EAAIgM,EAAIwN,EACZ,MAAMkO,EAA0B,WAAhBd,EAA2BvB,EAAO,GAAGZ,YAAcU,EAAKnf,KAAM,CAC5E2hB,OAAQ,MACRzC,QAAS,CACP,eAAgB,sBACbA,GAEL0C,OAAuE,OAA9D5nB,EAAwB,MAAnBgnB,OAA0B7qB,EAAS6qB,UAA6B7qB,EAAS6D,EAAG4nB,OAC1F3C,gBACGI,EAAOZ,EAAK,CACfkD,OAAQ,OACRxC,KAAM9jB,KAAKC,UAAU6jB,GACrBD,QAAS,CACP,eAAgB,sBACbA,GAEL0C,OAAuE,OAA9D5b,EAAwB,MAAnBgb,OAA0B7qB,EAAS6qB,UAA6B7qB,EAAS6P,EAAG4b,OAC1F3C,gBAEI4C,QAAiBH,EAAQhO,OAAOzU,IAEpC,MADAuiB,IACMviB,CAAG,IAEX,GAAI+f,EACF,UACQA,EAAW6C,EAClB,CAAC,MAAO5iB,GACP,MAAMA,CACZ,CAEE,IAAK4iB,EAASC,GAEZ,MADAN,IACM,IAAIlnB,MACwB,OAA/BkZ,QAAWqO,EAAS3lB,QAAkBsX,EAAK,sCAGhD,IAAKqO,EAAS1C,KACZ,MAAM,IAAI7kB,MAAM,+BAElB,OAAQykB,GACN,IAAK,OAOH,kBANM7U,GAAwB,CAC5B3E,OAAQsc,EAAS1C,KACjB3Z,OAAQic,EACR/b,WACAhG,WAAYiG,IAIhB,IAAK,OAaH,kBAZML,GAAoB,CACxBC,OAAQsc,EAAS1C,KACjB3Z,OAAQic,EACR1b,cACAN,aACA,QAAAC,EAAShL,QAAEA,EAAOgJ,aAAEA,EAAYC,MAAEA,IAC5B+B,GAAuB,MAAXhL,GACdgL,EAAShL,EAAS,CAAEiJ,QAAOD,gBAE9B,EACDhE,WAAYiG,IAIhB,QAEE,MAAM,IAAIrL,MAAM,4BADQykB,KAI9B,CUv8BcgD,CAAY,CAChBtD,MACAU,KAKO,OALAnZ,EAAwC,MAAnC6Y,OAA0C,EAASA,EAAgC,CAC7F7e,GAAI2f,EACJ7U,SAAU+V,EACVmB,YAAarB,EAAY7f,KACzBmhB,YAAatB,EAAYxB,QACbnZ,EAAK,CACjBhG,GAAI2f,EACJ7U,SAAUuW,EACVvgB,KAAM6f,EAAY7f,QACf0f,EAAiBzH,QAAQoG,QACzBwB,EAAYxB,MAEjBJ,iBACAE,YAAauB,EAAiBzH,QAAQkG,YACtCC,QAAS,IACJsB,EAAiBzH,QAAQmG,WACzByB,EAAYzB,SAEjB8B,gBAAiB,IAAMT,EAAmBxH,QAC1C,wBAAAyI,GACOlC,GACH4B,EAAgBE,GAAkB,EAErC,EACDpC,aACA,QAAAyC,EAAS/mB,QAAEA,EAAOoG,KAAEA,EAAImF,mBAAEA,IACxBoa,EAAa,aACba,EACE,IACKjb,EAAqB4a,EAAavjB,MAAM,EAAGujB,EAAa/iB,OAAS,GAAK+iB,EACzEnmB,IAEF,IAEU,MAARoG,OAAe,EAASA,EAAKhD,SAC/BqjB,EACE,IAAoB,MAAhBI,EAAuBA,EAAe,MAAOzgB,IACjD,EAGL,EACD2E,aACAC,WACAhG,WAAYiG,EACZ+E,MAAO2U,EACPtZ,YAAa8a,EAAaA,EAAa/iB,OAAS,GAChD8iB,gBAEFL,EAAmBxH,QAAU,KAC7BsH,EAAa,QACd,CAAC,MAAOphB,GACP,GAAiB,eAAbA,EAAIzE,KAGN,OAFA+lB,EAAmBxH,QAAU,KAC7BsH,EAAa,SACN,KAEL9K,GAAWtW,aAAe3E,OAC5Bib,EAAQtW,GAEVqhB,EAASrhB,GACTohB,EAAa,QACrB,CACM,MAAM6B,EAAYnC,EAAYhH,SVytCpC,UAAgCoJ,8BAC9BA,EAA6BC,qBAC7BA,EAAoBtD,SACpBA,EAAQhU,SACRA,IAEA,IAAI9Q,EACJ,MAAM+L,EAAc+E,EAASA,EAAShN,OAAS,GAC/C,OAEEghB,EAAW,GACI,MAAf/Y,IACC+E,EAAShN,OAASskB,GAAwBzX,GAA6B5E,EAAYI,mBAAqBgc,IACzG1V,GAAyC1G,KAC4B,OAAnE/L,EAAK2Q,GAA6B5E,EAAYI,kBAA4BnM,EAAK,GAAK8kB,CAE1F,EUxuCUuD,CAAuB,CACzBF,8BAA+BpB,EAC/BqB,qBAAsBtB,EACtBhC,WACAhU,SAAUoX,WAEJzB,EAAe,CAAE3V,SAAUoX,GACzC,GAEI,CACE9N,EACAiM,EACA5B,EACA+B,EACAxB,EACAtZ,EACA6P,EACA+K,EACAH,EACAC,EACArB,EACAH,EACAC,EACApZ,EACAqZ,EACAiB,EACAQ,EACA5a,EACA0Z,EACAC,EACAE,EACAG,IAGE2C,EAAS5B,EAAYlG,aACzBnV,MAAO3K,GACLoG,OACAoe,QAASqD,EACTpD,KAAMqD,EACNlB,2BAA2B5mB,EAAQ4mB,0BACjC,MACF,IAAItnB,EAAIgM,EACR,MAAMyc,QAA8BnX,GAClCgW,GAEIY,EAAYnC,EAAYhH,QAAQhgB,OAAO,IACxC2B,EACHsF,GAAyB,OAApBhG,EAAKU,EAAQsF,IAAchG,EAAK2L,IACrCc,UAAuC,OAA3BT,EAAKtL,EAAQ+L,WAAqBT,EAAqB,IAAIF,KACvEwb,yBAA0BmB,EAAsB3kB,OAAS,EAAI2kB,OAAwBtsB,EACrFuQ,MAAOkE,GAAgBlQ,KAEzB,OAAO+lB,EAAe,CAAE3V,SAAUoX,EAAWhD,QAASqD,EAAUpD,KAAMqD,EAAO1hB,QAAO,GAEtF,CAAC2f,EAAgB9a,IAEb+c,EAAShC,EAAYlG,aACzBnV,OAASvE,OAAMoe,QAASqD,EAAUpD,KAAMqD,GAAU,MAChD,MAAMN,EAAYnC,EAAYhH,QAC9B,GAAyB,IAArBmJ,EAAUpkB,OACZ,OAAO,KAET,MAAMiI,EAAcmc,EAAUA,EAAUpkB,OAAS,GACjD,OAAO2iB,EAAe,CACpB3V,SAA+B,cAArB/E,EAAYpE,KAAuBugB,EAAU5kB,MAAM,GAAK,GAAI4kB,EACtEhD,QAASqD,EACTpD,KAAMqD,EACN1hB,QACA,GAEJ,CAAC2f,IAEGkC,EAAOjC,EAAAA,aAAa,KACpBH,EAAmBxH,UACrBwH,EAAmBxH,QAAQ6J,QAC3BrC,EAAmBxH,QAAU,KACnC,GACK,IACG8J,EAAsBnC,EAAAA,aAAarb,UACvC,MAAM6c,EAAYnC,EAAYhH,QAC9B0H,EAAe,CAAE3V,SAAUoX,GAAa,SAAS,GAChD,CAACzB,IACEqC,EAAcpC,EAAYlG,aAC7B0H,IAC0B,mBAAdA,IACTA,EAAYA,EAAUnC,EAAYhH,UAEpC,MAAMgK,EAAoBlY,GAAiBqX,GAC3C9N,EAAO2O,GAAmB,GAC1BhD,EAAYhH,QAAUgK,CAAiB,GAEzC,CAAC3O,IAEG4O,EAAUtC,EAAYlG,aACzB1Z,IACqB,mBAATA,IACTA,EAAOA,EAAKsf,EAAcrH,UAE5BoH,EAAiBrf,GAAM,GACvBsf,EAAcrH,QAAUjY,CAAI,GAE9B,CAACqf,KAEI7d,EAAO2gB,GAAYvD,EAAAA,SAAUf,GAC9BuE,EAAexC,EAAYlG,aAC/BnV,MAAO8d,EAAOlmB,EAAU,CAAE,EAAEmmB,KAC1B,IAAIppB,EAEJ,GADwD,OAAvDA,EAAc,MAATmpB,OAAgBhtB,EAASgtB,EAAME,iBAAmCrpB,EAAG6E,KAAKskB,IAC3E7gB,IAAUrF,EAAQqmB,iBACrB,OACEF,IACF5C,EAAiBzH,QAAU,IACtByH,EAAiBzH,WACjBqK,IAGP,MAAMX,QAA8BnX,GAClCrO,EAAQqkB,0BAUJX,EAAc,CAClB7V,SATgBiV,EAAYhH,QAAQhgB,OAAO,CAC3CiH,GAAI2F,IACJc,UAA2B,IAAIX,KAC/BnE,KAAM,OACNG,QAASQ,EACTgf,yBAA0BmB,EAAsB3kB,OAAS,EAAI2kB,OAAwBtsB,EACrFuQ,MAAO,CAAC,CAAEzN,KAAM,OAAQiD,KAAMoG,MAI9B4c,QAASjiB,EAAQiiB,QACjBC,KAAMliB,EAAQkiB,KACdre,KAAM7D,EAAQ6D,MAEhB2f,EAAeE,GACfsC,EAAS,GAAG,GAEd,CAAC3gB,EAAOqD,EAAa8a,IAKjB8C,EAAgB7C,EAAYlG,aAChC,EAAGlX,aAAY1C,aACb,MAAM4iB,EAAkBzD,EAAYhH,QAapC,GVylCN,UAA8BjO,SAC5BA,EAAQxH,WACRA,EACAmgB,WAAY7iB,IAEZ,IAAI5G,EACJ,MAAM+L,EAAc+E,EAASA,EAAShN,OAAS,GACzC4lB,EAAiB3d,EAAYW,MAAMM,MACtC5D,GAAuB,oBAAdA,EAAKnK,MAA8BmK,EAAKkD,eAAehD,aAAeA,IAElF,GAAsB,MAAlBogB,EACF,OAEF,MAAMD,EAAa,IACdC,EAAepd,eAClBkD,MAAO,SACP5I,UAEF8iB,EAAepd,eAAiBmd,EAChC1d,EAAYI,gBAAwD,OAArCnM,EAAK+L,EAAYI,sBAA2BhQ,EAAS6D,EAAGmJ,KACpFmD,GAAmBA,EAAehD,aAAeA,EAAamgB,EAAand,GAEhF,CU3nCMqd,CAAqB,CACnB7Y,SAAU0Y,EACVlgB,aACAmgB,WAAY7iB,IAEdwT,EACE,IACKoP,EAAgBlmB,MAAM,EAAGkmB,EAAgB1lB,OAAS,GACrD,IAAK0lB,EAAgBA,EAAgB1lB,OAAS,MAEhD,GAEa,cAAX0Z,GAAqC,cAAXA,EAC5B,OAGE/K,GADgB+W,EAAgBA,EAAgB1lB,OAAS,KAE3D2iB,EAAe,CAAE3V,SAAU0Y,GACnC,GAEI,CAACpP,EAAQoD,EAAQiJ,IAEnB,MAAO,CACL3V,SAAsB,MAAZA,EAAmBA,EAAW,GACxC9K,GAAI2f,EACJmD,cACAhiB,KAAMof,EACN8C,UACAjoB,QACAunB,SACAI,SACAC,OACAE,sBACAvgB,QACA2gB,WACAW,kBAzCyB7pB,IACzBkpB,EAASlpB,EAAEqS,OAAO3P,MAAM,EAyCxBymB,eACAlJ,UAAsB,cAAXxC,GAAqC,cAAXA,EACrCA,SACA+L,gBAEJ,CC3iBO,SAASM,GAAShP,EAAIiP,GAC3B,IAAIC,OAAU5tB,EACd,OAAO,WACL,IAAK,IAAI0nB,EAAOhgB,UAAUC,OAAQ0F,EAAO,IAAI5B,MAAMic,GAAO7L,EAAO,EAAGA,EAAO6L,EAAM7L,IAC/ExO,EAAKwO,GAAQnU,UAAUmU,GAErB+R,GACFrH,aAAaqH,GAEfA,EAAUpT,YAAW,WACnB,OAAOkE,EAAGmJ,WAAM7nB,EAAQqN,EACzB,GAAEsgB,EACJ,CACH,CCbO,SAASE,GAAQC,GACtB,OAAOA,EAAO7d,QAAO,SAAUsI,EAAGC,GAChC,OAAOD,EAAE3V,OAAO4V,EACjB,GAAE,GACL,CCJA,IAAIuV,GAAiB,ECAd,SAASC,GAAc3a,GAC5B,OAAiC,IAA7BA,EAAM4a,YAAYtmB,OACb,EAEF0L,EAAM4a,YAAYhe,QAAO,SAAUie,EAAKC,GAC7C,OAAOD,EAAMC,EAAWC,MAAMzmB,MAC/B,GAAE,EACL,CCPA,SAAS0mB,GAAYjnB,GACnB,OAAOA,IAAQmB,OAAOnB,EACxB,CACO,SAASic,GAAQiL,EAAOC,GAC7B,GAAID,IAAUC,EACZ,OAAO,EAET,GAAIF,GAAYC,IAAUD,GAAYE,IAA4B,mBAAVD,GAA0C,mBAAXC,EACrF,OAAOD,IAAUC,EAEnB,GAAIhmB,OAAO0M,KAAKqZ,GAAO3mB,SAAWY,OAAO0M,KAAKsZ,GAAQ5mB,OACpD,OAAO,EAET,IAAK,IAAI6mB,EAAK,EAAGC,EAAelmB,OAAO0M,KAAKqZ,GAAQE,EAAKC,EAAa9mB,OAAQ6mB,IAAM,CAClF,IAAItsB,EAAMusB,EAAaD,GACvB,KAAMtsB,KAAOqsB,GACX,OAAO,EAET,IAAKlL,GAAQiL,EAAMpsB,GAAMqsB,EAAOrsB,IAC9B,OAAO,CAEX,CACA,OAAO,CACT,CCvBO,IAAI8V,GAAO,WAAkB,ECA7B,ICCI0W,GAAa,CAAC,CACvBC,QAAS,oBACTC,QDHmB,WEAd,SAASC,GAAmBhvB,GACjC,IAAIgM,EAAOhM,EAAKgM,KACdijB,EAAajvB,EAAKuuB,MAClBA,OAAuBpuB,IAAf8uB,EAAwB,GAAKA,EACvC,MAAO,CACL1b,MAAOvH,EAAKkjB,yBACZX,MAAO,CAACviB,GACRmjB,UAAW,CAAC,EAAIZ,EAAMva,WAAU,SAAUiD,GACxC,OAAOA,EAAEmY,WAAapjB,EAAKojB,QAC7B,KACAC,QAASrjB,EAAKsjB,uBACdC,cAAe,CAAC,gBAEpB,CCbA,SAASptB,GAAeqtB,EAAKvlB,GAAK,OAKlC,SAAyBulB,GAAO,GAAI5jB,MAAMC,QAAQ2jB,GAAM,OAAOA,CAAK,CAL3BC,CAAgBD,IAIzD,SAA+BA,EAAKvlB,GAAK,IAAI0kB,EAAK,MAAQa,EAAM,KAAO,oBAAsBrrB,QAAUqrB,EAAIrrB,OAAOurB,WAAaF,EAAI,cAAe,GAAI,MAAQb,EAAI,CAAE,IAAIgB,EAAInmB,EAAIomB,EAAIC,EAAIC,EAAO,GAAIC,GAAK,EAAIC,GAAK,EAAI,IAAM,GAAIJ,GAAMjB,EAAKA,EAAG9lB,KAAK2mB,IAAMvnB,KAAM,IAAMgC,QAAoD,OAAS8lB,GAAMJ,EAAKC,EAAG/mB,KAAK8lB,IAAKnmB,QAAUsnB,EAAK9mB,KAAK2mB,EAAGlpB,OAAQqpB,EAAKhoB,SAAWmC,GAAI8lB,GAAK,GAAM,CAAC,MAAO9mB,GAAO+mB,GAAK,EAAIxmB,EAAKP,CAAK,CAAU,QAAE,IAAM,IAAK8mB,GAAM,MAAQpB,EAAGsB,SAAWJ,EAAKlB,EAAGsB,SAAUvnB,OAAOmnB,KAAQA,GAAK,MAAQ,CAAU,QAAE,GAAIG,EAAI,MAAMxmB,CAAI,CAAE,CAAE,OAAOsmB,CAAM,CAAE,CAJ1gBI,CAAsBV,EAAKvlB,IAE5F,SAAqCkmB,EAAGC,GAAU,IAAKD,EAAG,OAAQ,GAAiB,iBAANA,EAAgB,OAAOE,GAAkBF,EAAGC,GAAS,IAAI7nB,EAAIG,OAAOC,UAAUvB,SAASyB,KAAKsnB,GAAG7oB,MAAM,MAAkB,WAANiB,GAAkB4nB,EAAE5rB,cAAagE,EAAI4nB,EAAE5rB,YAAYC,MAAM,GAAU,QAAN+D,GAAqB,QAANA,EAAa,OAAOqD,MAAMgK,KAAKua,GAAI,GAAU,cAAN5nB,GAAqB,2CAA2C/F,KAAK+F,GAAI,OAAO8nB,GAAkBF,EAAGC,EAAS,CAF7TE,CAA4Bd,EAAKvlB,IACnI,WAA8B,MAAM,IAAIwd,UAAU,4IAA8I,CADvD8I,EAAoB,CAG7J,SAASF,GAAkBb,EAAKtR,IAAkB,MAAPA,GAAeA,EAAMsR,EAAI1nB,UAAQoW,EAAMsR,EAAI1nB,QAAQ,IAAK,IAAImC,EAAI,EAAGumB,EAAO,IAAI5kB,MAAMsS,GAAMjU,EAAIiU,EAAKjU,IAAKumB,EAAKvmB,GAAKulB,EAAIvlB,GAAI,OAAOumB,CAAM,CCHlL,IAAI3uB,GAAY,CAAC,SACf4uB,GAAa,CAAC,SAChB,SAASvpB,GAAQK,GAAkC,OAAOL,GAAU,mBAAqB/C,QAAU,iBAAmBA,OAAOurB,SAAW,SAAUnoB,GAAO,cAAcA,CAAM,EAAG,SAAUA,GAAO,OAAOA,GAAO,mBAAqBpD,QAAUoD,EAAIhD,cAAgBJ,QAAUoD,IAAQpD,OAAOwE,UAAY,gBAAkBpB,CAAK,EAAGL,GAAQK,EAAM,CAC/U,SAASmpB,GAAmBlB,GAAO,OAInC,SAA4BA,GAAO,GAAI5jB,MAAMC,QAAQ2jB,GAAM,OAAOa,GAAkBb,EAAM,CAJhDmB,CAAmBnB,IAG7D,SAA0BoB,GAAQ,GAAsB,oBAAXzsB,QAAmD,MAAzBysB,EAAKzsB,OAAOurB,WAA2C,MAAtBkB,EAAK,cAAuB,OAAOhlB,MAAMgK,KAAKgb,EAAO,CAHxFC,CAAiBrB,IAEtF,SAAqCW,EAAGC,GAAU,IAAKD,EAAG,OAAQ,GAAiB,iBAANA,EAAgB,OAAOE,GAAkBF,EAAGC,GAAS,IAAI7nB,EAAIG,OAAOC,UAAUvB,SAASyB,KAAKsnB,GAAG7oB,MAAM,MAAkB,WAANiB,GAAkB4nB,EAAE5rB,cAAagE,EAAI4nB,EAAE5rB,YAAYC,MAAM,GAAU,QAAN+D,GAAqB,QAANA,EAAa,OAAOqD,MAAMgK,KAAKua,GAAI,GAAU,cAAN5nB,GAAqB,2CAA2C/F,KAAK+F,GAAI,OAAO8nB,GAAkBF,EAAGC,EAAS,CAFjUE,CAA4Bd,IAC1H,WAAgC,MAAM,IAAI/H,UAAU,uIAAyI,CAD3DqJ,EAAsB,CAKxJ,SAAST,GAAkBb,EAAKtR,IAAkB,MAAPA,GAAeA,EAAMsR,EAAI1nB,UAAQoW,EAAMsR,EAAI1nB,QAAQ,IAAK,IAAImC,EAAI,EAAGumB,EAAO,IAAI5kB,MAAMsS,GAAMjU,EAAIiU,EAAKjU,IAAKumB,EAAKvmB,GAAKulB,EAAIvlB,GAAI,OAAOumB,CAAM,CAClL,SAAS5uB,GAAyB0R,EAAQyd,GAAY,GAAc,MAAVzd,EAAgB,MAAO,CAAE,EAAE,IAAkEjR,EAAK4H,EAAnEmM,EACzF,SAAuC9C,EAAQyd,GAAY,GAAc,MAAVzd,EAAgB,MAAO,CAAE,EAAE,IAA2DjR,EAAK4H,EAA5DmM,EAAS,CAAE,EAAM4a,EAAatoB,OAAO0M,KAAK9B,GAAqB,IAAKrJ,EAAI,EAAGA,EAAI+mB,EAAWlpB,OAAQmC,IAAO5H,EAAM2uB,EAAW/mB,GAAQ8mB,EAAStiB,QAAQpM,IAAQ,IAAa+T,EAAO/T,GAAOiR,EAAOjR,IAAQ,OAAO+T,CAAQ,CADhN6a,CAA8B3d,EAAQyd,GAAuB,GAAIroB,OAAOwoB,sBAAuB,CAAE,IAAIC,EAAmBzoB,OAAOwoB,sBAAsB5d,GAAS,IAAKrJ,EAAI,EAAGA,EAAIknB,EAAiBrpB,OAAQmC,IAAO5H,EAAM8uB,EAAiBlnB,GAAQ8mB,EAAStiB,QAAQpM,IAAQ,GAAkBqG,OAAOC,UAAUyoB,qBAAqBvoB,KAAKyK,EAAQjR,KAAgB+T,EAAO/T,GAAOiR,EAAOjR,GAAQ,CAAE,OAAO+T,CAAQ,CAE3e,SAASib,GAAQC,EAAQC,GAAkB,IAAInc,EAAO1M,OAAO0M,KAAKkc,GAAS,GAAI5oB,OAAOwoB,sBAAuB,CAAE,IAAIM,EAAU9oB,OAAOwoB,sBAAsBI,GAASC,IAAmBC,EAAUA,EAAQ7pB,QAAO,SAAU8pB,GAAO,OAAO/oB,OAAOgpB,yBAAyBJ,EAAQG,GAAKE,UAAY,KAAKvc,EAAKpM,KAAKgf,MAAM5S,EAAMoc,EAAU,CAAE,OAAOpc,CAAM,CACpV,SAASwc,GAAcxb,GAAU,IAAK,IAAInM,EAAI,EAAGA,EAAIpC,UAAUC,OAAQmC,IAAK,CAAE,IAAIqJ,EAAS,MAAQzL,UAAUoC,GAAKpC,UAAUoC,GAAK,CAAE,EAAEA,EAAI,EAAIonB,GAAQ3oB,OAAO4K,IAAS,GAAIue,SAAQ,SAAUxvB,GAAOyvB,GAAgB1b,EAAQ/T,EAAKiR,EAAOjR,GAAO,IAAKqG,OAAOqpB,0BAA4BrpB,OAAOspB,iBAAiB5b,EAAQ1N,OAAOqpB,0BAA0Bze,IAAW+d,GAAQ3oB,OAAO4K,IAASue,SAAQ,SAAUxvB,GAAOqG,OAAOupB,eAAe7b,EAAQ/T,EAAKqG,OAAOgpB,yBAAyBpe,EAAQjR,GAAO,GAAI,CAAE,OAAO+T,CAAQ,CACzf,SAAS0b,GAAgBvqB,EAAKlF,EAAKoE,GAA4L,OAAnLpE,EAC5C,SAAwBiZ,GAAO,IAAIjZ,EACnC,SAAsBiK,EAAO4lB,GAAQ,GAAuB,WAAnBhrB,GAAQoF,IAAiC,OAAVA,EAAgB,OAAOA,EAAO,IAAI6lB,EAAO7lB,EAAMnI,OAAOiuB,aAAc,QAAajyB,IAATgyB,EAAoB,CAAE,IAAIE,EAAMF,EAAKtpB,KAAKyD,EAAO4lB,GAAQ,WAAY,GAAqB,WAAjBhrB,GAAQmrB,GAAmB,OAAOA,EAAK,MAAM,IAAI5K,UAAU,+CAAiD,CAAE,OAAiB,WAATyK,EAAoBI,OAASzkB,QAAQvB,EAAQ,CADnVimB,CAAajX,EAAK,UAAW,MAAwB,WAAjBpU,GAAQ7E,GAAoBA,EAAMiwB,OAAOjwB,EAAM,CAD1EmwB,CAAenwB,MAAiBkF,EAAOmB,OAAOupB,eAAe1qB,EAAKlF,EAAK,CAAEoE,MAAOA,EAAOkrB,YAAY,EAAMc,cAAc,EAAMC,UAAU,IAAkBnrB,EAAIlF,GAAOoE,EAAgBc,CAAK,CAc3O,SAASorB,GAAuBC,GAC9B,OAAOA,EAAOzlB,KAAI,SAAUnN,GAC1B,IAAIuuB,EAAQvuB,EAAKuuB,MACfsE,EAAQjxB,GAAyB5B,EAAM6B,IACzC,OAAO+vB,GAAcA,GAAc,CAAE,EAAEiB,GAAQ,CAAA,EAAI,CACjDC,WAAYvE,aAAqCpuB,EAASouB,EAAMphB,KAAI,SAAU4lB,GAE5E,OADeA,EAAM3D,QAEtB,MAAMyD,EAAMC,WAEjB,GACF,CACO,SAASE,GAAwBC,GACtC,ID5BEC,EACAC,EACAC,EC0BEC,GD5BFH,EAAc/wB,IC4B4B8wB,ED7BnBlE,SAAW,IAAI9b,MAAM,KAAK9F,IAAIU,QACZ,GACzCslB,EAAQD,EAAY,GACpBE,EAAQF,EAAY,GAGbC,GAAS,GACG,IAAVA,GAAeC,GAAS,GACb,IAAVD,GAAeC,GAAS,ICsBpC,SAASE,EAAe3H,EAAQ4H,EAAUhF,GACxC,GAAI8E,QAAmC,IAAV9E,EAAuB,CAClD,IAAIiF,EAAwBjF,EAAM,GAAGkF,kCAGjCvK,EAAU,CACZ,2BAHQsK,EAAsBE,MAI9B,oBAHSF,EAAsBG,QAKjCV,EAAejL,WAAM7nB,EAAQ,CAACwrB,GAAQ5oB,OAAO2tB,GAAmB6C,GAAW,CAAC,CAC1ErK,QAASA,KAEb,MACE+J,EAAejL,WAAM7nB,EAAQ,CAACwrB,GAAQ5oB,OAAO2tB,GAAmB6C,IAEpE,CACA,MAAO,CAILK,KAAM,SAAcF,EAAOC,GACzBV,EAAe,OAAQ,CACrBS,MAAOA,EACPC,OAAQA,GAEX,EAODE,0BAA2B,SAAmCC,GAC5Db,EAAe,4BAA6Ba,EAC7C,EAIDC,aAAc,SAAsBC,GAClCf,EAAe,eAAgBe,EAChC,EAMDC,4BAA6B,WAC3B,IAAK,IAAIpM,EAAOhgB,UAAUC,OAAQ8qB,EAAS,IAAIhnB,MAAMic,GAAO7L,EAAO,EAAGA,EAAO6L,EAAM7L,IACjF4W,EAAO5W,GAAQnU,UAAUmU,GAEvB4W,EAAO9qB,OAAS,GAClBwrB,EAAe,8BAA+BX,GAAuBC,GAASA,EAAO,GAAGrE,MAE3F,EAMD2F,iBAAkB,WAChB,IAAK,IAAIC,EAAQtsB,UAAUC,OAAQ8qB,EAAS,IAAIhnB,MAAMuoB,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACtFxB,EAAOwB,GAASvsB,UAAUusB,GAExBxB,EAAO9qB,OAAS,GAClBwrB,EAAe,mBAAoBX,GAAuBC,GAASA,EAAO,GAAGrE,MAEhF,EAMD8F,eAAgB,WACd,IAAK,IAAIC,EAAQzsB,UAAUC,OAAQ8qB,EAAS,IAAIhnB,MAAM0oB,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACtF3B,EAAO2B,GAAS1sB,UAAU0sB,GAExB3B,EAAO9qB,OAAS,GAClBmrB,EAAejL,WAAM7nB,EAAQ,CAAC,kBAAkB4C,OAAO6vB,GAE1D,EAMD4B,8BAA+B,WAC7B,IAAK,IAAIC,EAAQ5sB,UAAUC,OAAQ8qB,EAAS,IAAIhnB,MAAM6oB,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACtF9B,EAAO8B,GAAS7sB,UAAU6sB,GAExB9B,EAAO9qB,OAAS,GAClBwrB,EAAe,gCAAiCX,GAAuBC,GAASA,EAAO,GAAGrE,MAE7F,EAMDoG,mBAAoB,WAClB,IAAK,IAAIC,EAAQ/sB,UAAUC,OAAQ8qB,EAAS,IAAIhnB,MAAMgpB,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACtFjC,EAAOiC,GAAShtB,UAAUgtB,GAExBjC,EAAO9qB,OAAS,GAClBwrB,EAAe,qBAAsBX,GAAuBC,GAASA,EAAO,GAAGrE,MAElF,EAMDuG,iBAAkB,WAChB,IAAK,IAAIC,EAAQltB,UAAUC,OAAQ8qB,EAAS,IAAIhnB,MAAMmpB,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACtFpC,EAAOoC,GAASntB,UAAUmtB,GAExBpC,EAAO9qB,OAAS,GAClBmrB,EAAejL,WAAM7nB,EAAQ,CAAC,oBAAoB4C,OAAO6vB,GAE5D,EAMDqC,gBAAiB,WACf,IAAK,IAAIC,EAAQrtB,UAAUC,OAAQ8qB,EAAS,IAAIhnB,MAAMspB,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACtFvC,EAAOuC,GAASttB,UAAUstB,GAExBvC,EAAO9qB,OAAS,GAClB8qB,EAAOxiB,QAAO,SAAUglB,EAAK1yB,GAC3B,IAAI6rB,EAAQ7rB,EAAM6rB,MAChBsE,EAAQjxB,GAAyBc,EAAO+tB,IAC1C,MAAO,GAAG1tB,OAAO2tB,GAAmB0E,GAAM1E,GA5JpD,SAAe1kB,GAGb,IAFA,IAAIqpB,EAAYxtB,UAAUC,OAAS,QAAsB3H,IAAjB0H,UAAU,GAAmBA,UAAU,GAAK,GAChFiH,EAAS,GACJ7E,EAAI,EAAGA,EAAI+B,EAAK8mB,UAAUhrB,OAAQmC,GAAKorB,EAC9CvmB,EAAO9F,KAAK4oB,GAAcA,GAAc,CAAA,EAAI5lB,GAAO,GAAI,CACrD8mB,UAAW9mB,EAAK8mB,UAAUxrB,MAAM2C,EAAGA,EAAIorB,MAG3C,OAAOvmB,CACT,CAmJuEK,CAAMyiB,GAAcA,GAAc,CAAA,EAAIiB,GAAQ,CAAA,EAAI,CAC7GC,WAAYvE,aAAqCpuB,EAASouB,EAAMphB,KAAI,SAAU9J,GAE5E,OADeA,EAAM+rB,QAEtB,MAAMyD,EAAMC,aACX3lB,KAAI,SAAUmoB,GAChB,MAAO,CACL/G,MAAOA,EACP+G,QAASA,EAEZ,KACF,GAAE,IAAIzD,SAAQ,SAAU0D,GACvB,IAAIhH,EAAQgH,EAAMhH,MAElB,OAAO+E,EAAe,kBAAmB,CAD7BiC,EAAMD,SACkC/G,EACtD,GAEH,EAMDiH,cAAe,WACb,IAAK,IAAIC,EAAQ5tB,UAAUC,OAAQ8qB,EAAS,IAAIhnB,MAAM6pB,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACtF9C,EAAO8C,GAAS7tB,UAAU6tB,GAExB9C,EAAO9qB,OAAS,GAClBmrB,EAAejL,WAAM7nB,EAAQ,CAAC,iBAAiB4C,OAAO6vB,GAE1D,EAEJ,CC7MO,SAAS+C,GAAmB31B,GACjC,IACI41B,EADQ51B,EAAKuuB,MACYne,QAAO,SAAUglB,EAAKrS,GACjD,IAAI8S,EAEJ,OADAT,EAAIrS,EAAQmM,2BAAiG,QAAnE2G,EAAwBT,EAAIrS,EAAQmM,iCAAiE/uB,IAA1B01B,EAAmCA,EAAwB,IAAI9yB,OAAOggB,GACpLqS,CACR,GAAE,IACH,OAAO1sB,OAAO0M,KAAKwgB,GAAkBzoB,KAAI,SAAU2oB,GAEjD,MAAO,CACLviB,MAAOuiB,EACPvH,MAHUqH,EAAiBE,GAI3BvG,cAAe,CAAC,gBAEpB,GACF,CCfO,SAASwG,GAAqBC,GACnC,OAAOA,EAAI5G,UAAY4G,EAAI9G,0BAA4B8G,EAAI1G,sBAC7D,CCFA,SAASpoB,GAAQK,GAAkC,OAAOL,GAAU,mBAAqB/C,QAAU,iBAAmBA,OAAOurB,SAAW,SAAUnoB,GAAO,cAAcA,CAAM,EAAG,SAAUA,GAAO,OAAOA,GAAO,mBAAqBpD,QAAUoD,EAAIhD,cAAgBJ,QAAUoD,IAAQpD,OAAOwE,UAAY,gBAAkBpB,CAAK,EAAGL,GAAQK,EAAM,CAC/U,SAASmpB,GAAmBlB,GAAO,OAInC,SAA4BA,GAAO,GAAI5jB,MAAMC,QAAQ2jB,GAAM,OAAOa,GAAkBb,EAAM,CAJhDmB,CAAmBnB,IAG7D,SAA0BoB,GAAQ,GAAsB,oBAAXzsB,QAAmD,MAAzBysB,EAAKzsB,OAAOurB,WAA2C,MAAtBkB,EAAK,cAAuB,OAAOhlB,MAAMgK,KAAKgb,EAAO,CAHxFC,CAAiBrB,IAEtF,SAAqCW,EAAGC,GAAU,IAAKD,EAAG,OAAQ,GAAiB,iBAANA,EAAgB,OAAOE,GAAkBF,EAAGC,GAAS,IAAI7nB,EAAIG,OAAOC,UAAUvB,SAASyB,KAAKsnB,GAAG7oB,MAAM,MAAkB,WAANiB,GAAkB4nB,EAAE5rB,cAAagE,EAAI4nB,EAAE5rB,YAAYC,MAAM,GAAU,QAAN+D,GAAqB,QAANA,EAAa,OAAOqD,MAAMgK,KAAKua,GAAI,GAAU,cAAN5nB,GAAqB,2CAA2C/F,KAAK+F,GAAI,OAAO8nB,GAAkBF,EAAGC,EAAS,CAFjUE,CAA4Bd,IAC1H,WAAgC,MAAM,IAAI/H,UAAU,uIAAyI,CAD3DqJ,EAAsB,CAKxJ,SAAST,GAAkBb,EAAKtR,IAAkB,MAAPA,GAAeA,EAAMsR,EAAI1nB,UAAQoW,EAAMsR,EAAI1nB,QAAQ,IAAK,IAAImC,EAAI,EAAGumB,EAAO,IAAI5kB,MAAMsS,GAAMjU,EAAIiU,EAAKjU,IAAKumB,EAAKvmB,GAAKulB,EAAIvlB,GAAI,OAAOumB,CAAM,CAClL,SAASa,GAAQC,EAAQC,GAAkB,IAAInc,EAAO1M,OAAO0M,KAAKkc,GAAS,GAAI5oB,OAAOwoB,sBAAuB,CAAE,IAAIM,EAAU9oB,OAAOwoB,sBAAsBI,GAASC,IAAmBC,EAAUA,EAAQ7pB,QAAO,SAAU8pB,GAAO,OAAO/oB,OAAOgpB,yBAAyBJ,EAAQG,GAAKE,UAAY,KAAKvc,EAAKpM,KAAKgf,MAAM5S,EAAMoc,EAAU,CAAE,OAAOpc,CAAM,CACpV,SAASwc,GAAcxb,GAAU,IAAK,IAAInM,EAAI,EAAGA,EAAIpC,UAAUC,OAAQmC,IAAK,CAAE,IAAIqJ,EAAS,MAAQzL,UAAUoC,GAAKpC,UAAUoC,GAAK,CAAE,EAAEA,EAAI,EAAIonB,GAAQ3oB,OAAO4K,IAAS,GAAIue,SAAQ,SAAUxvB,GAAOyvB,GAAgB1b,EAAQ/T,EAAKiR,EAAOjR,GAAO,IAAKqG,OAAOqpB,0BAA4BrpB,OAAOspB,iBAAiB5b,EAAQ1N,OAAOqpB,0BAA0Bze,IAAW+d,GAAQ3oB,OAAO4K,IAASue,SAAQ,SAAUxvB,GAAOqG,OAAOupB,eAAe7b,EAAQ/T,EAAKqG,OAAOgpB,yBAAyBpe,EAAQjR,GAAO,GAAI,CAAE,OAAO+T,CAAQ,CACzf,SAAS0b,GAAgBvqB,EAAKlF,EAAKoE,GAA4L,OAAnLpE,EAC5C,SAAwBiZ,GAAO,IAAIjZ,EACnC,SAAsBiK,EAAO4lB,GAAQ,GAAuB,WAAnBhrB,GAAQoF,IAAiC,OAAVA,EAAgB,OAAOA,EAAO,IAAI6lB,EAAO7lB,EAAMnI,OAAOiuB,aAAc,QAAajyB,IAATgyB,EAAoB,CAAE,IAAIE,EAAMF,EAAKtpB,KAAKyD,EAAO4lB,GAAQ,WAAY,GAAqB,WAAjBhrB,GAAQmrB,GAAmB,OAAOA,EAAK,MAAM,IAAI5K,UAAU,+CAAiD,CAAE,OAAiB,WAATyK,EAAoBI,OAASzkB,QAAQvB,EAAQ,CADnVimB,CAAajX,EAAK,UAAW,MAAwB,WAAjBpU,GAAQ7E,GAAoBA,EAAMiwB,OAAOjwB,EAAM,CAD1EmwB,CAAenwB,MAAiBkF,EAAOmB,OAAOupB,eAAe1qB,EAAKlF,EAAK,CAAEoE,MAAOA,EAAOkrB,YAAY,EAAMc,cAAc,EAAMC,UAAU,IAAkBnrB,EAAIlF,GAAOoE,EAAgBc,CAAK,CAQ3O,IACI0uB,GAA2B,SAC3BC,GAAuB,gDAAgDnzB,OAAOkzB,GAA0B,gCACxGE,GAAsBtI,IAAS,SAAU7tB,GAC3C,IAAIo2B,EAAgBp2B,EAAKo2B,cACvB7H,EAAQvuB,EAAKuuB,MACb8H,EAAWr2B,EAAKq2B,SAChB7iB,EAAQxT,EAAKwT,MACf4iB,EAAc,CACZC,SAAUA,EACVC,eAAgBX,GAAmB,CACjCpH,MAAOA,IACNphB,KAAI,SAAUggB,GACf,OAAOyE,GAAc,CACnB2E,UAAW,gBACVpJ,EACL,IACA3Z,MAAOA,GAEX,GAnBuB,KAoBhB,SAASgjB,GAA4BvvB,GAC1C,IAAIwvB,EA6JN,SAAoBxvB,GAClB,OAAO2qB,GAAc,CACnBwE,cAAe,SAAuBM,GACpC,IAAIL,EAAWK,EAAML,SACnBC,EAAiBI,EAAMJ,eACvB9iB,EAAQkjB,EAAMljB,MAChB6iB,EAASpB,gBAAgBjN,MAAMqO,EAAU3F,GAAmB4F,EAAenpB,KAAI,SAAUggB,GACvF,OAAOyE,GAAcA,GAAc,CAAE,EAAEzE,GAAQ,CAAA,EAAI,CACjDoC,cAAeoH,GAAkBxJ,EAAMoC,cAAe/b,EAAMojB,UAE/D,KACF,EACDC,SAAU,SAAkBC,GAC1B,IAAIT,EAAWS,EAAMT,SACnBC,EAAiBQ,EAAMR,eACvB9iB,EAAQsjB,EAAMtjB,MAChB6iB,EAASpC,4BAA4BjM,MAAMqO,EAAU3F,GAAmB4F,EAAenpB,KAAI,SAAUggB,GACnG,OAAOyE,GAAcA,GAAc,CAAE,EAAEzE,GAAQ,CAAA,EAAI,CACjDoC,cAAeoH,GAAkBxJ,EAAMoC,cAAe/b,EAAMojB,UAE/D,KACF,EACDG,SAAU5e,GACV6e,+BAA+B,GAC9B/vB,EACL,CAtLoBgwB,CAAWhwB,GAC3BiwB,EAAyBT,EAAYU,eACrCC,EAAqBX,EAAYW,mBACjChB,EAAgBK,EAAYL,cAC5BiB,EAAgBZ,EAAYI,SAC5BS,EAAgBb,EAAYM,SAC5BC,EAAgCP,EAAYO,8BAC1CG,EAAiBD,EA8BrB,GA7BKA,GC3CA,SAA4B/c,GACjC,GAAsB,oBAAXzW,OACFyW,EAAS,CACdzW,OAAQA,QAId,CDqCI6zB,EAAmB,SAAUxE,GAC3B,IAAIrvB,EAASqvB,EAAMrvB,OACf8zB,EAAU9zB,EAAO+zB,wBAA0B,KACxB,iBAAZD,IACTL,EAAiBzzB,EAAO8zB,IAErBL,IACHzzB,EAAO+zB,uBAAyBD,EAC3B9zB,EAAO8zB,KACV9zB,EAAO8zB,GAAW,WACX9zB,EAAO8zB,GAASE,QACnBh0B,EAAO8zB,GAASE,MAAQ,IAE1B,IAAK,IAAI7P,EAAOhgB,UAAUC,OAAQ0F,EAAO,IAAI5B,MAAMic,GAAO7L,EAAO,EAAGA,EAAO6L,EAAM7L,IAC/ExO,EAAKwO,GAAQnU,UAAUmU,GAEzBtY,EAAO8zB,GAASE,MAAM1uB,KAAKwE,EAC5B,GAEH9J,EAAO8zB,GAASzI,QAAUkH,GAC1BkB,EAAiBzzB,EAAO8zB,GA0JhC,SAAsBG,GACpB,IAAIC,EAAe,4HACnB,IACE,IAAIC,EAASF,EAAYz2B,SAAS5B,cAAc,UAChDu4B,EAAOxoB,OAAQ,EACfwoB,EAAOC,IAAM5B,GACb2B,EAAOxhB,QAAU,WAEf0hB,QAAQhzB,MAAM6yB,EACf,EACD12B,SAASioB,KAAK6O,YAAYH,EAC3B,CAAC,MAAOlzB,GAEPozB,QAAQhzB,MAAM6yB,EAChB,CACF,CAxKQK,CAAav0B,GAEjB,KAKGyzB,EACH,MAAO,CAAE,EAEPC,GACFD,EAAe,OAAQvF,GAAc,CACnCsG,SAAS,GACRd,IAEL,IAAIf,EAAWrD,GAAwBmE,GACnCgB,EEnFG,CACLpV,QFkF4B,IAC1BqV,EAAyBvK,IAAS,SAAUnrB,GAC9C,IAAI8Q,EAAQ9Q,EAAM8Q,MAClB,GAAKA,EAAM6kB,OAAX,CAGA,IAAI9J,EAAQ/a,EAAM4a,YAAYhe,QAAO,SAAUglB,EAAKrS,GAClD,MAAO,GAAGhgB,OAAO2tB,GAAmB0E,GAAM1E,GAAmB3N,EAAQwL,OACvE,GAAG,IAAI5mB,OAAOouB,IACTvS,GAAQ2U,EAAcpV,QAAQ5V,KAAI,SAAU8J,GAC/C,OAAOA,EAAEmY,QACV,IAAGb,EAAMphB,KAAI,SAAU8J,GACtB,OAAOA,EAAEmY,QACV,OACC+I,EAAcpV,QAAUwL,EACpBA,EAAMzmB,OAAS,GACjBquB,GAAoB,CAClBC,cAAeA,EACf7H,MAAOA,EACP8H,SAAUA,EACV7iB,MAAOA,IAfb,CAmBD,GAAE,GACH,MAAO,CACLhP,KAAM,2BACNmT,UAAW,SAAmBtU,GAC5B,IAAIi1B,EAAaj1B,EAAMi1B,WACrBzB,EAAWxzB,EAAMwzB,SACjBE,EAAW1zB,EAAM0zB,SACnB,SAASwB,EAAmBvE,GAC1BsE,EAAW,CACTE,sBAAuB,CACrBC,0BAA2B7G,GAAcA,GAAc,CAAA,EAAIoF,EAAgC,CACzF0B,gBAAgB,GACd,CAAA,GAAK1E,EAAY,CACnBA,UAAW2E,GAAmB3E,IAC5B,IACJqC,SAAUA,IAGhB,CACAc,EAAe,kBAAmB,mBAClCoB,IAGApB,EAAe,qBAAqB,SAAUnD,GAC5CuE,EAAmBvE,EACrB,IACAmD,EAAe,eAAgB,MAAM,SAAUyB,EAAQ5E,GACrDuE,EAAmBvE,EACrB,IACA6C,GAAS,SAAUtB,GACjB,IAAIvpB,EAAOupB,EAAMvpB,KACfwH,EAAQ+hB,EAAM/hB,MACd2Z,EAAQoI,EAAMpI,MACd7Z,EAASiiB,EAAMjiB,OACZyiB,GAAqB/pB,IAG1BqrB,EAAc,CACZ7jB,MAAOA,EACP2Z,MAAOA,EACPkJ,SAAUA,EACVrqB,KAAMA,EACNsqB,eAAgB,CAAC1E,GAAc,CAC7B2E,UAAW,iBACVvH,GAAmB,CACpBhjB,KAAMA,EACNuiB,MAAOjb,EAAOulB,WAAWlxB,OAAOouB,SAGtC,IACAgB,GAAS,SAAU+B,GACjB,IAAI9sB,EAAO8sB,EAAM9sB,KACfsH,EAASwlB,EAAMxlB,OACfE,EAAQslB,EAAMtlB,MACd2Z,EAAQ2L,EAAM3L,MACX4I,GAAqB/pB,IAG1BsrB,EAAc,CACZ9jB,MAAOA,EACP2Z,MAAOA,EACPkJ,SAAUA,EACVrqB,KAAMA,EACNsqB,eAAgB,CAAC1E,GAAc,CAC7B2E,UAAW,eACVvH,GAAmB,CACpBhjB,KAAMA,EACNuiB,MAAOjb,EAAOulB,WAAWlxB,OAAOouB,SAGtC,GACD,EACDgD,cAAe,SAAuBC,GACpC,IAAIxlB,EAAQwlB,EAAMxlB,MAClB4kB,EAAuB,CACrB5kB,MAAOA,GAEV,EACDylB,6BAA8BhyB,EAElC,CACA,SAAS0vB,KACP,IAAIuC,EAEAtC,EAAU/uB,UAAUC,OAAS,EAAID,UAAU,QAAK1H,EACpD,MAAO,GAAG4C,OAAO2tB,GAFO7oB,UAAUC,OAAS,QAAsB3H,IAAjB0H,UAAU,GAAmBA,UAAU,GAAK,IAEpC,CAAC,yBAA0B6oB,GAA+E,QAA3DwI,EAAwBtC,EAAQ4B,6BAA6Dr4B,IAA1B+4B,GAAoCA,EAAsBC,oBAAsB,CAAC,0BAA4B,IACzR,CAgDA,SAASR,GAAmB3E,GAC1B,MAA4B,iBAAdA,EAAyBA,EAAU5sB,WAAa4sB,CAChE,CGpPA,SAASoF,GAAgCzS,EAASlB,GAChD,IAAIjS,EAAQiS,EACZ,MAAO,CACL5M,KAAM,SAAcwgB,EAAaC,GAC/B,OAAOF,GAAgCzS,EAAQ9N,KAAK0gB,GAAeF,EAAa7lB,EAAOmT,GAAU4S,GAAeD,EAAY9lB,EAAOmT,IAAWnT,EAC/I,EACDkK,MAAO,SAAgB4b,GACrB,OAAOF,GAAgCzS,EAAQjJ,MAAM6b,GAAeD,EAAY9lB,EAAOmT,IAAWnT,EACnG,EACDgmB,QAAS,SAAkBC,GAIzB,OAHIA,GACFjmB,EAAMkmB,aAAa1wB,KAAKywB,GAEnBL,GAAgCzS,EAAQ6S,QAAQD,GAAeE,GAAa,WAEjF,OADAjmB,EAAMkmB,aAAe,GACdD,GACR,EAAEjmB,EAAOmT,IAAWnT,EACtB,EACDmmB,OAAQ,WACNnmB,EAAMomB,YAAa,EACnB,IAAIxT,EAAY5S,EAAMkmB,aACtBlmB,EAAMkmB,aAAe,GACrBtT,EAAUyL,SAAQ,SAAU1X,GAC1BA,GACF,GACD,EACDyf,WAAY,WACV,OAA4B,IAArBpmB,EAAMomB,UACf,EAEJ,CAeO,SAASC,GAAWlT,GACzB,OAAOyS,GAAgCzS,EAAS,CAC9CiT,YAAY,EACZF,aAAc,IAElB,CACA,SAASH,GAAeO,EAAUtmB,EAAOmN,GACvC,OAAKmZ,EAGE,SAAkBxe,GACvB,OAAI9H,EAAMomB,WACDte,EAEFwe,EAASxe,EACjB,EAPQqF,CAQX,CC5DA,IACIoZ,GADAC,IAA0B,EAEvB,SAASC,KACd,IAAIC,EAAO,GACX,MAAO,CACLC,IAAK,SAAaC,GAEhB,OADAF,EAAKlxB,KAAKoxB,GACHA,EAAkBZ,SAAQ,WAC/BU,EAAOA,EAAKvyB,QAAO,SAAUqE,GAC3B,OAAOA,IAASouB,CAClB,GACF,GACD,EACDC,UAAW,WACTH,EAAKrI,SAAQ,SAAUlL,GACrB,OAAOA,EAAQgT,QACjB,GACD,EACDW,QAAS,WACP,OAAuB,IAAhBJ,EAAKpyB,MACb,EACD0f,KAAM,SAAcxH,GAElB,OAAKga,IAMLA,IAA0B,EAC1BD,GAAgB/Z,EAA8BtK,QAAQ6kB,KAAK,CAAC7kB,QAAQC,IAAIukB,GAAO,IAAIxkB,SAAQ,SAAUK,GACnG,OAAO4E,WAAW5E,EAASiK,EAC5B,MAFyBtK,QAAQC,IAAIukB,GAG/BH,GAAalhB,MAAK,WACvBmhB,IAA0B,CAC5B,KAXSD,EAYX,EAEJ,CCvBO,SAASS,GAAoBC,EAAYC,EAAWC,EAAWC,GACpE,IAAKD,EACH,OAAO,KAET,GAAIF,EAAa,IAAoB,OAAdC,GAA8C,OAAxBE,GAA8C,IAAdF,GAC3E,OAAOC,EAAYF,EAErB,IAAII,GAA8B,OAAdH,GAAuB,EAAGA,GAAaD,EAC3D,OAAII,IAAgB,GAAMA,GAAgBF,EACT,OAAxBC,EAA+B,KAAO,EAExCC,CACT,CC5BA,SAASxJ,GAAQC,EAAQC,GAAkB,IAAInc,EAAO1M,OAAO0M,KAAKkc,GAAS,GAAI5oB,OAAOwoB,sBAAuB,CAAE,IAAIM,EAAU9oB,OAAOwoB,sBAAsBI,GAASC,IAAmBC,EAAUA,EAAQ7pB,QAAO,SAAU8pB,GAAO,OAAO/oB,OAAOgpB,yBAAyBJ,EAAQG,GAAKE,UAAY,KAAKvc,EAAKpM,KAAKgf,MAAM5S,EAAMoc,EAAU,CAAE,OAAOpc,CAAM,CACpV,SAASwc,GAAcxb,GAAU,IAAK,IAAInM,EAAI,EAAGA,EAAIpC,UAAUC,OAAQmC,IAAK,CAAE,IAAIqJ,EAAS,MAAQzL,UAAUoC,GAAKpC,UAAUoC,GAAK,CAAE,EAAEA,EAAI,EAAIonB,GAAQ3oB,OAAO4K,IAAS,GAAIue,SAAQ,SAAUxvB,GAAOyvB,GAAgB1b,EAAQ/T,EAAKiR,EAAOjR,GAAO,IAAKqG,OAAOqpB,0BAA4BrpB,OAAOspB,iBAAiB5b,EAAQ1N,OAAOqpB,0BAA0Bze,IAAW+d,GAAQ3oB,OAAO4K,IAASue,SAAQ,SAAUxvB,GAAOqG,OAAOupB,eAAe7b,EAAQ/T,EAAKqG,OAAOgpB,yBAAyBpe,EAAQjR,GAAO,GAAI,CAAE,OAAO+T,CAAQ,CACzf,SAAS0b,GAAgBvqB,EAAKlF,EAAKoE,GAA4L,OAAnLpE,EAC5C,SAAwBiZ,GAAO,IAAIjZ,EACnC,SAAsBiK,EAAO4lB,GAAQ,GAAuB,WAAnBhrB,GAAQoF,IAAiC,OAAVA,EAAgB,OAAOA,EAAO,IAAI6lB,EAAO7lB,EAAMnI,OAAOiuB,aAAc,QAAajyB,IAATgyB,EAAoB,CAAE,IAAIE,EAAMF,EAAKtpB,KAAKyD,EAAO4lB,GAAQ,WAAY,GAAqB,WAAjBhrB,GAAQmrB,GAAmB,OAAOA,EAAK,MAAM,IAAI5K,UAAU,+CAAiD,CAAE,OAAiB,WAATyK,EAAoBI,OAASzkB,QAAQvB,EAAQ,CADnVimB,CAAajX,EAAK,UAAW,MAAwB,WAAjBpU,GAAQ7E,GAAoBA,EAAMiwB,OAAOjwB,EAAM,CAD1EmwB,CAAenwB,MAAiBkF,EAAOmB,OAAOupB,eAAe1qB,EAAKlF,EAAK,CAAEoE,MAAOA,EAAOkrB,YAAY,EAAMc,cAAc,EAAMC,UAAU,IAAkBnrB,EAAIlF,GAAOoE,EAAgBc,CAAK,CAG3O,SAASL,GAAQK,GAAkC,OAAOL,GAAU,mBAAqB/C,QAAU,iBAAmBA,OAAOurB,SAAW,SAAUnoB,GAAO,cAAcA,CAAM,EAAG,SAAUA,GAAO,OAAOA,GAAO,mBAAqBpD,QAAUoD,EAAIhD,cAAgBJ,QAAUoD,IAAQpD,OAAOwE,UAAY,gBAAkBpB,CAAK,EAAGL,GAAQK,EAAM,CCL/U,SAASc,GAA2B8nB,EAAG2K,GAAkB,IAAIne,EAAuB,oBAAXxY,QAA0BgsB,EAAEhsB,OAAOurB,WAAaS,EAAE,cAAe,IAAKxT,EAAI,CAAE,GAAI/Q,MAAMC,QAAQskB,KAAOxT,EAC9K,SAAqCwT,EAAGC,GAAU,IAAKD,EAAG,OAAQ,GAAiB,iBAANA,EAAgB,OAAOE,GAAkBF,EAAGC,GAAS,IAAI7nB,EAAIG,OAAOC,UAAUvB,SAASyB,KAAKsnB,GAAG7oB,MAAM,MAAkB,WAANiB,GAAkB4nB,EAAE5rB,cAAagE,EAAI4nB,EAAE5rB,YAAYC,MAAM,GAAU,QAAN+D,GAAqB,QAANA,EAAa,OAAOqD,MAAMgK,KAAKua,GAAI,GAAU,cAAN5nB,GAAqB,2CAA2C/F,KAAK+F,GAAI,OAAO8nB,GAAkBF,EAAGC,EAAS,CAD5OE,CAA4BH,KAAO2K,EAAqD,CAAMne,IAAIwT,EAAIxT,GAAI,IAAI1S,EAAI,EAAO8wB,EAAI,WAAe,EAAE,MAAO,CAAEzyB,EAAGyyB,EAAGxyB,EAAG,WAAe,OAAI0B,GAAKkmB,EAAEroB,OAAe,CAAEU,MAAM,GAAe,CAAEA,MAAM,EAAO/B,MAAO0pB,EAAElmB,KAAS,EAAElG,EAAG,SAAWyF,GAAM,MAAMA,CAAK,EAAEN,EAAG6xB,EAAK,CAAE,MAAM,IAAItT,UAAU,wIAA0I,CAAE,IAA6Cxe,EAAzC+xB,GAAmB,EAAMC,GAAS,EAAY,MAAO,CAAE3yB,EAAG,WAAeqU,EAAKA,EAAG9T,KAAKsnB,EAAK,EAAE5nB,EAAG,WAAe,IAAI2H,EAAOyM,EAAG1U,OAAsC,OAA9B+yB,EAAmB9qB,EAAK1H,KAAa0H,CAAO,EAAEnM,EAAG,SAAWm3B,GAAOD,GAAS,EAAMhyB,EAAMiyB,CAAM,EAAEhyB,EAAG,WAAe,IAAW8xB,GAAiC,MAAbre,EAAGsT,QAAgBtT,EAAGsT,QAAU,CAAU,QAAE,GAAIgL,EAAQ,MAAMhyB,CAAK,CAAE,EAAK,CAEr+B,SAASonB,GAAkBb,EAAKtR,IAAkB,MAAPA,GAAeA,EAAMsR,EAAI1nB,UAAQoW,EAAMsR,EAAI1nB,QAAQ,IAAK,IAAImC,EAAI,EAAGumB,EAAO,IAAI5kB,MAAMsS,GAAMjU,EAAIiU,EAAKjU,IAAKumB,EAAKvmB,GAAKulB,EAAIvlB,GAAI,OAAOumB,CAAM,CAM3K,IAAI2K,GAAyB,SAAgCC,EAASC,GAC3E,IAGElzB,EAHEmzB,GAAoB,EACpBC,EAAW,GACXnzB,EAAYC,GAA2B+yB,GAE3C,IACE,IAAKhzB,EAAUE,MAAOH,EAAQC,EAAUG,KAAKC,MAAO,CAClD,IAAIgzB,EAAuBC,EAAwBC,EAE/Cj1B,EAA0E,QAAjE+0B,EADArzB,EAAM1B,MACyBwyB,oCAAoE,IAA1BuC,GAAwI,QAA3FC,GAA0BC,EAAyBF,GAAuBG,mBAAoD,IAA3BF,OAA7G,EAA0JA,EAAuB5yB,KAAK6yB,GAC/S,GAAqB,iBAAVj1B,EACT80B,EAASvyB,KAAKvC,QACT,IAAc,IAAVA,EAAgB,CACzB60B,GAAoB,EACpB,KACF,CACF,CACD,CAAC,MAAOryB,GACPb,EAAUrE,EAAEkF,EACd,CAAU,QACRb,EAAUc,GACZ,CACA,OAAIoyB,EACKD,EAAgB7T,OACd+T,EAASzzB,OAAS,EACpBuzB,EAAgB7T,KAAKtd,KAAKmG,IAAI2X,MAAM9d,KAAMqxB,SAD5C,CAIT,ECgBO,SAASK,GAAcpoB,GAC5B,IAAI8a,EAlDN,SAAuC9a,GAIrC,IAUIqoB,EAV8BroB,EAAM4a,YAAYjhB,KAAI,SAAUihB,GAChE,OAAOA,EAAYG,MAAMzmB,MAC1B,IAAEsI,QAAO,SAAUglB,EAAK0G,EAAkBvoB,GACzC,IACIkE,GADgB2d,EAAI7hB,EAAQ,IAAM,GACNuoB,EAEhC,OADA1G,EAAIpsB,KAAKyO,GACF2d,CACR,GAAE,IAG+ChlB,QAAO,SAAUglB,EAAKrS,GACtE,OAAIA,GAAWvP,EAAMuoB,aACZ3G,EAAM,EAERA,CACR,GAAE,GACH,OAAO5hB,EAAM4a,YAAYyN,EAC3B,CA6BmBG,CAA8BxoB,GAC/C,IAAK8a,EACH,OAAO,KAET,IAAItiB,EAAOsiB,EAAWC,MAtBxB,SAAiCvuB,GAM/B,IALA,IAAIwT,EAAQxT,EAAKwT,MACf8a,EAAatuB,EAAKsuB,WAChB2N,GAAgB,EAChB7gB,EAAU,EACV8gB,EAAsB,GACD,IAAlBD,GAAyB,CAC9B,IAAIE,EAAoB3oB,EAAM4a,YAAYhT,GAC1C,GAAI+gB,IAAsB7N,EAAY,CACpC2N,GAAgB,EAChB,KACF,CACAC,GAAuBC,EAAkB5N,MAAMzmB,OAC/CsT,GACF,CACA,OAAO5H,EAAMuoB,aAAeG,CAC9B,CAM8BE,CAAwB,CAClD5oB,MAAOA,EACP8a,WAAYA,KAEVhb,EAASgb,EAAWhb,OASxB,MAAO,CACLtH,KAAMA,EACNqwB,eAVmB/oB,EAAOgpB,kBAAkB,CAC5CtwB,KAAMA,EACNwH,MAAOA,IASP+oB,QAPYjpB,EAAOkpB,WAAW,CAC9BxwB,KAAMA,EACNwH,MAAOA,IAMPF,OAAQA,EAEZ,CCrEO,SAASmpB,GAAyBC,EAAwBC,EAAWrpB,GAC1E,MAAO,CAACopB,EAAwBppB,aAAuCnT,EAASmT,EAAOspB,SAAUD,GAAWh1B,OAAOk1B,SAASC,KAAK,KAAKC,QAAQ,MAAO,GACvJ,CCTA,IAAIC,GAAQ,sDCAL,SAASC,GAAe9P,GAC7B,OAAOA,EAAM+P,aAAe/P,CAC9B,CCFA,SAASjmB,GAAQK,GAAkC,OAAOL,GAAU,mBAAqB/C,QAAU,iBAAmBA,OAAOurB,SAAW,SAAUnoB,GAAO,cAAcA,CAAM,EAAG,SAAUA,GAAO,OAAOA,GAAO,mBAAqBpD,QAAUoD,EAAIhD,cAAgBJ,QAAUoD,IAAQpD,OAAOwE,UAAY,gBAAkBpB,CAAK,EAAGL,GAAQK,EAAM,CAC/U,SAAS8pB,GAAQC,EAAQC,GAAkB,IAAInc,EAAO1M,OAAO0M,KAAKkc,GAAS,GAAI5oB,OAAOwoB,sBAAuB,CAAE,IAAIM,EAAU9oB,OAAOwoB,sBAAsBI,GAASC,IAAmBC,EAAUA,EAAQ7pB,QAAO,SAAU8pB,GAAO,OAAO/oB,OAAOgpB,yBAAyBJ,EAAQG,GAAKE,UAAY,KAAKvc,EAAKpM,KAAKgf,MAAM5S,EAAMoc,EAAU,CAAE,OAAOpc,CAAM,CAEpV,SAAS0c,GAAgBvqB,EAAKlF,EAAKoE,GAA4L,OAAnLpE,EAC5C,SAAwBiZ,GAAO,IAAIjZ,EACnC,SAAsBiK,EAAO4lB,GAAQ,GAAuB,WAAnBhrB,GAAQoF,IAAiC,OAAVA,EAAgB,OAAOA,EAAO,IAAI6lB,EAAO7lB,EAAMnI,OAAOiuB,aAAc,QAAajyB,IAATgyB,EAAoB,CAAE,IAAIE,EAAMF,EAAKtpB,KAAKyD,EAAO4lB,GAAQ,WAAY,GAAqB,WAAjBhrB,GAAQmrB,GAAmB,OAAOA,EAAK,MAAM,IAAI5K,UAAU,+CAAiD,CAAE,OAAiB,WAATyK,EAAoBI,OAASzkB,QAAQvB,EAAQ,CADnVimB,CAAajX,EAAK,UAAW,MAAwB,WAAjBpU,GAAQ7E,GAAoBA,EAAMiwB,OAAOjwB,EAAM,CAD1EmwB,CAAenwB,MAAiBkF,EAAOmB,OAAOupB,eAAe1qB,EAAKlF,EAAK,CAAEoE,MAAOA,EAAOkrB,YAAY,EAAMc,cAAc,EAAMC,UAAU,IAAkBnrB,EAAIlF,GAAOoE,EAAgBc,CAAK,CAIpO,SAAS41B,GAAYC,EAASz7B,EAAO07B,GAC1C,IAAI7pB,EAAQ7R,EAAM8jB,aAClB,MAAO,CACL6X,SAAU,WACR,OAAO9pB,CACR,EACD+pB,SAAU,SAAkBC,EAAQlI,GAClC,IAAImI,EAZV,SAAuBrnB,GAAU,IAAK,IAAInM,EAAI,EAAGA,EAAIpC,UAAUC,OAAQmC,IAAK,CAAE,IAAIqJ,EAAS,MAAQzL,UAAUoC,GAAKpC,UAAUoC,GAAK,CAAE,EAAEA,EAAI,EAAIonB,GAAQ3oB,OAAO4K,IAAS,GAAIue,SAAQ,SAAUxvB,GAAOyvB,GAAgB1b,EAAQ/T,EAAKiR,EAAOjR,GAAO,IAAKqG,OAAOqpB,0BAA4BrpB,OAAOspB,iBAAiB5b,EAAQ1N,OAAOqpB,0BAA0Bze,IAAW+d,GAAQ3oB,OAAO4K,IAASue,SAAQ,SAAUxvB,GAAOqG,OAAOupB,eAAe7b,EAAQ/T,EAAKqG,OAAOgpB,yBAAyBpe,EAAQjR,GAAO,GAAI,CAAE,OAAO+T,CAAQ,CAYnewb,CAAc,CAAE,EAAEpe,GAClCA,EAAQ4pB,EAAQ5pB,EAAO,CACrBvQ,KAAMu6B,EACN77B,MAAOA,EACP2zB,QAASA,IAEX+H,EAAmB,CACjB7pB,MAAOA,EACPiqB,UAAWA,GAEd,EACDpC,gBAAiBpB,KAErB,CC3BA,SAAS/yB,GAAQK,GAAkC,OAAOL,GAAU,mBAAqB/C,QAAU,iBAAmBA,OAAOurB,SAAW,SAAUnoB,GAAO,cAAcA,CAAM,EAAG,SAAUA,GAAO,OAAOA,GAAO,mBAAqBpD,QAAUoD,EAAIhD,cAAgBJ,QAAUoD,IAAQpD,OAAOwE,UAAY,gBAAkBpB,CAAK,EAAGL,GAAQK,EAAM,CAC/U,SAAS8pB,GAAQC,EAAQC,GAAkB,IAAInc,EAAO1M,OAAO0M,KAAKkc,GAAS,GAAI5oB,OAAOwoB,sBAAuB,CAAE,IAAIM,EAAU9oB,OAAOwoB,sBAAsBI,GAASC,IAAmBC,EAAUA,EAAQ7pB,QAAO,SAAU8pB,GAAO,OAAO/oB,OAAOgpB,yBAAyBJ,EAAQG,GAAKE,UAAY,KAAKvc,EAAKpM,KAAKgf,MAAM5S,EAAMoc,EAAU,CAAE,OAAOpc,CAAM,CACpV,SAASwc,GAAcxb,GAAU,IAAK,IAAInM,EAAI,EAAGA,EAAIpC,UAAUC,OAAQmC,IAAK,CAAE,IAAIqJ,EAAS,MAAQzL,UAAUoC,GAAKpC,UAAUoC,GAAK,CAAE,EAAEA,EAAI,EAAIonB,GAAQ3oB,OAAO4K,IAAS,GAAIue,SAAQ,SAAUxvB,GAAOyvB,GAAgB1b,EAAQ/T,EAAKiR,EAAOjR,GAAO,IAAKqG,OAAOqpB,0BAA4BrpB,OAAOspB,iBAAiB5b,EAAQ1N,OAAOqpB,0BAA0Bze,IAAW+d,GAAQ3oB,OAAO4K,IAASue,SAAQ,SAAUxvB,GAAOqG,OAAOupB,eAAe7b,EAAQ/T,EAAKqG,OAAOgpB,yBAAyBpe,EAAQjR,GAAO,GAAI,CAAE,OAAO+T,CAAQ,CACzf,SAAS0b,GAAgBvqB,EAAKlF,EAAKoE,GAA4L,OAAnLpE,EAC5C,SAAwBiZ,GAAO,IAAIjZ,EACnC,SAAsBiK,EAAO4lB,GAAQ,GAAuB,WAAnBhrB,GAAQoF,IAAiC,OAAVA,EAAgB,OAAOA,EAAO,IAAI6lB,EAAO7lB,EAAMnI,OAAOiuB,aAAc,QAAajyB,IAATgyB,EAAoB,CAAE,IAAIE,EAAMF,EAAKtpB,KAAKyD,EAAO4lB,GAAQ,WAAY,GAAqB,WAAjBhrB,GAAQmrB,GAAmB,OAAOA,EAAK,MAAM,IAAI5K,UAAU,+CAAiD,CAAE,OAAiB,WAATyK,EAAoBI,OAASzkB,QAAQvB,EAAQ,CADnVimB,CAAajX,EAAK,UAAW,MAAwB,WAAjBpU,GAAQ7E,GAAoBA,EAAMiwB,OAAOjwB,EAAM,CAD1EmwB,CAAenwB,MAAiBkF,EAAOmB,OAAOupB,eAAe1qB,EAAKlF,EAAK,CAAEoE,MAAOA,EAAOkrB,YAAY,EAAMc,cAAc,EAAMC,UAAU,IAAkBnrB,EAAIlF,GAAOoE,EAAgBc,CAAK,CCH3O,SAASL,GAAQK,GAAkC,OAAOL,GAAU,mBAAqB/C,QAAU,iBAAmBA,OAAOurB,SAAW,SAAUnoB,GAAO,cAAcA,CAAM,EAAG,SAAUA,GAAO,OAAOA,GAAO,mBAAqBpD,QAAUoD,EAAIhD,cAAgBJ,QAAUoD,IAAQpD,OAAOwE,UAAY,gBAAkBpB,CAAK,EAAGL,GAAQK,EAAM,CAC/U,SAASmpB,GAAmBlB,GAAO,OAInC,SAA4BA,GAAO,GAAI5jB,MAAMC,QAAQ2jB,GAAM,OAAOa,GAAkBb,EAAM,CAJhDmB,CAAmBnB,IAG7D,SAA0BoB,GAAQ,GAAsB,oBAAXzsB,QAAmD,MAAzBysB,EAAKzsB,OAAOurB,WAA2C,MAAtBkB,EAAK,cAAuB,OAAOhlB,MAAMgK,KAAKgb,EAAO,CAHxFC,CAAiBrB,IAEtF,SAAqCW,EAAGC,GAAU,IAAKD,EAAG,OAAQ,GAAiB,iBAANA,EAAgB,OAAOE,GAAkBF,EAAGC,GAAS,IAAI7nB,EAAIG,OAAOC,UAAUvB,SAASyB,KAAKsnB,GAAG7oB,MAAM,MAAkB,WAANiB,GAAkB4nB,EAAE5rB,cAAagE,EAAI4nB,EAAE5rB,YAAYC,MAAM,GAAU,QAAN+D,GAAqB,QAANA,EAAa,OAAOqD,MAAMgK,KAAKua,GAAI,GAAU,cAAN5nB,GAAqB,2CAA2C/F,KAAK+F,GAAI,OAAO8nB,GAAkBF,EAAGC,EAAS,CAFjUE,CAA4Bd,IAC1H,WAAgC,MAAM,IAAI/H,UAAU,uIAAyI,CAD3DqJ,EAAsB,CAKxJ,SAAST,GAAkBb,EAAKtR,IAAkB,MAAPA,GAAeA,EAAMsR,EAAI1nB,UAAQoW,EAAMsR,EAAI1nB,QAAQ,IAAK,IAAImC,EAAI,EAAGumB,EAAO,IAAI5kB,MAAMsS,GAAMjU,EAAIiU,EAAKjU,IAAKumB,EAAKvmB,GAAKulB,EAAIvlB,GAAI,OAAOumB,CAAM,CAClL,SAASa,GAAQC,EAAQC,GAAkB,IAAInc,EAAO1M,OAAO0M,KAAKkc,GAAS,GAAI5oB,OAAOwoB,sBAAuB,CAAE,IAAIM,EAAU9oB,OAAOwoB,sBAAsBI,GAASC,IAAmBC,EAAUA,EAAQ7pB,QAAO,SAAU8pB,GAAO,OAAO/oB,OAAOgpB,yBAAyBJ,EAAQG,GAAKE,UAAY,KAAKvc,EAAKpM,KAAKgf,MAAM5S,EAAMoc,EAAU,CAAE,OAAOpc,CAAM,CACpV,SAASwc,GAAcxb,GAAU,IAAK,IAAInM,EAAI,EAAGA,EAAIpC,UAAUC,OAAQmC,IAAK,CAAE,IAAIqJ,EAAS,MAAQzL,UAAUoC,GAAKpC,UAAUoC,GAAK,CAAE,EAAEA,EAAI,EAAIonB,GAAQ3oB,OAAO4K,IAAS,GAAIue,SAAQ,SAAUxvB,GAAOyvB,GAAgB1b,EAAQ/T,EAAKiR,EAAOjR,GAAO,IAAKqG,OAAOqpB,0BAA4BrpB,OAAOspB,iBAAiB5b,EAAQ1N,OAAOqpB,0BAA0Bze,IAAW+d,GAAQ3oB,OAAO4K,IAASue,SAAQ,SAAUxvB,GAAOqG,OAAOupB,eAAe7b,EAAQ/T,EAAKqG,OAAOgpB,yBAAyBpe,EAAQjR,GAAO,GAAI,CAAE,OAAO+T,CAAQ,CACzf,SAAS0b,GAAgBvqB,EAAKlF,EAAKoE,GAA4L,OAAnLpE,EAC5C,SAAwBiZ,GAAO,IAAIjZ,EACnC,SAAsBiK,EAAO4lB,GAAQ,GAAuB,WAAnBhrB,GAAQoF,IAAiC,OAAVA,EAAgB,OAAOA,EAAO,IAAI6lB,EAAO7lB,EAAMnI,OAAOiuB,aAAc,QAAajyB,IAATgyB,EAAoB,CAAE,IAAIE,EAAMF,EAAKtpB,KAAKyD,EAAO4lB,GAAQ,WAAY,GAAqB,WAAjBhrB,GAAQmrB,GAAmB,OAAOA,EAAK,MAAM,IAAI5K,UAAU,+CAAiD,CAAE,OAAiB,WAATyK,EAAoBI,OAASzkB,QAAQvB,EAAQ,CADnVimB,CAAajX,EAAK,UAAW,MAAwB,WAAjBpU,GAAQ7E,GAAoBA,EAAMiwB,OAAOjwB,EAAM,CAD1EmwB,CAAenwB,MAAiBkF,EAAOmB,OAAOupB,eAAe1qB,EAAKlF,EAAK,CAAEoE,MAAOA,EAAOkrB,YAAY,EAAMc,cAAc,EAAMC,UAAU,IAAkBnrB,EAAIlF,GAAOoE,EAAgBc,CAAK,CAKpO,SAASm2B,GAAgB/7B,EAAOg8B,GACrC,IAAIC,EAEAjG,EAAgC,oBAAXj0B,OAAyBA,OAAS,CAAE,EAEzD03B,EAAUz5B,EAAMy5B,SAAW,GAC/B,OAAOxJ,GAAcA,GAAc,CACjCiM,OAAO,EACPC,aAAa,EACbC,kBAAc59B,EACd69B,yBAAyB,EACzBC,YAAa,GACbC,WAAW,EACXtD,oBAAqB,KACrBuD,eAAgB,IAChB9H,cAAUl2B,EACVw3B,YAAaA,EACbyG,gBAAiB,SAAyBp+B,GAExC,OAAOmuB,GADKnuB,EAAKwT,OACa,CAC/B,EACD6qB,QAAS,SAAiBtL,GAExB,OADcA,EAAMuL,OAEtB,GACC38B,GAAQ,GAAI,CAGbqI,GAA+B,QAA1B4zB,EAAYj8B,EAAMqI,UAA8B7J,IAAdy9B,EAAuBA,EzBxCzD,gBAAgB76B,OAAOmrB,MyByC5BkN,QAASA,EAET3V,aAAcmM,GAAc,CAC1BmK,aAAc,KACdwC,MAAO,GACPC,WAAY,KACZpQ,YAAa,GACbiK,QAAQ,EACR7W,OAAQ,OACRoV,QAAS,CAAA,GACRj1B,EAAM8jB,cACTsT,cAAe,SAAuBnG,GACpC,IAAI6L,EAC6C,QAAhDA,EAAuB98B,EAAMo3B,qBAAoD54B,IAAzBs+B,GAA2CA,EAAqB51B,KAAKlH,EAAOixB,GACrIwI,EAAQvJ,SAAQ,SAAU5a,GACxB,IAAIynB,EACJ,OAAgD,QAAxCA,EAAmBznB,EAAE8hB,qBAAgD54B,IAArBu+B,OAA8Bv+B,EAASu+B,EAAiB71B,KAAKoO,EAAG2b,EAC1H,GACD,EACD+L,SAAU,SAAkB/L,GAC1B,IAAIgM,EACmC,QAAtCA,EAAkBj9B,EAAMg9B,gBAA0Cx+B,IAApBy+B,GAAsCA,EAAgB/1B,KAAKlH,EAAOixB,GACjHwI,EAAQvJ,SAAQ,SAAU5a,GACxB,IAAI4nB,EACJ,OAAsC,QAA9BA,EAAc5nB,EAAE0nB,gBAAsCx+B,IAAhB0+B,OAAyB1+B,EAAS0+B,EAAYh2B,KAAKoO,EAAG2b,EACtG,GACD,EACDkM,QAAS,SAAiBlM,GACxB,IAAImM,EACiC,QAApCA,EAAiBp9B,EAAMm9B,eAAwC3+B,IAAnB4+B,GAAqCA,EAAel2B,KAAKlH,EAAOixB,GAC7GwI,EAAQvJ,SAAQ,SAAU5a,GACxB,IAAI+nB,EACJ,OAAoC,QAA5BA,EAAa/nB,EAAE6nB,eAAoC3+B,IAAf6+B,OAAwB7+B,EAAS6+B,EAAWn2B,KAAKoO,EAAG2b,EAClG,GACD,EACDqM,WAAY,SAAoBrM,GAC9B,OAAOld,QAAQC,IAAI,GAAG5S,OAAO2tB,GAAmB0K,EAAQjuB,KAAI,SAAU+xB,GACpE,OAAOA,EAAOD,UAChB,KAAK,CAACt9B,EAAMs9B,aAAat3B,OAAOk1B,SAAS1vB,KAAI,SAAU8xB,GACrD,OR3ED,SAA8BA,EAAYrM,GAC/C,IAAIuM,EAAgB,GACpB,OAAOzpB,QAAQK,QAAQkpB,EAAWrM,IAAS/Z,MAAK,SAAUylB,GAIxD,OAAO5oB,QAAQC,IAAI2oB,EAIlB32B,QAAO,SAAUy3B,GAChB,OAAOvC,QAAQuC,EACjB,IAAGjyB,KAAI,SAAUmG,GAEf,GADiBA,EAAOspB,SACpBuC,EAAc90B,SAASiJ,EAAOspB,UAChC,MAAM,IAAIt4B,MAAM,iCAAiCvB,OAAOsC,KAAKC,UAAUgO,EAAOspB,UAAW,oBAE3FuC,EAAcn2B,KAAKsK,EAAOspB,UAC1B,IAAIyC,EAAgB,CAClB/C,kBAAmB,SAA2Bt8B,GAE5C,OADYA,EAAKwT,MACJ+qB,KACd,EACD/B,WAAY,WAEX,EACD3F,SAAU,SAAkB9D,IAE1BuM,EADgBvM,EAAMuM,YACZ,EACX,EACDvI,SAAU5e,GACVonB,UAAWpnB,IAEbzP,OAAO0M,KAAKiqB,GAAexN,SAAQ,SAAUxvB,GAC3Cg9B,EAAch9B,GAAKm9B,WAAY,CACjC,IACA,IAAIC,EAAmB7N,GAAcA,GAAc,CAAA,EAAIyN,GAAgB/rB,GACvE,OAAOoC,QAAQK,QAAQ0pB,EACzB,IACF,GACF,CQmCeC,CAAqBT,EAAYrM,EAC1C,KAAI/Z,MAAK,SAAU8mB,GACjB,OAAO3R,GAAQ2R,EACjB,IAAG9mB,MAAK,SAAUylB,GAChB,OAAOA,EAAQnxB,KAAI,SAAUmG,GAC3B,OAAOse,GAAcA,GAAc,CAAE,EAAEte,GAAS,CAAA,EAAI,CAClDujB,SAAU,SAAkBjE,GAC1Btf,EAAOujB,SAASjE,GAChB+K,EAAkB9L,SAAQ,SAAU5a,GAClC,IAAI2oB,EACJ,OAAsC,QAA9BA,EAAc3oB,EAAE4f,gBAAsC12B,IAAhBy/B,OAAyBz/B,EAASy/B,EAAY/2B,KAAKoO,EAAG2b,EACtG,GACD,EACDmE,SAAU,SAAkBnE,GAC1Btf,EAAOyjB,SAASnE,GAChB+K,EAAkB9L,SAAQ,SAAU5a,GAClC,IAAI4oB,EACJ,OAAsC,QAA9BA,EAAc5oB,EAAE8f,gBAAsC52B,IAAhB0/B,OAAyB1/B,EAAS0/B,EAAYh3B,KAAKoO,EAAG2b,EACtG,GACD,EACD2M,UAAW,SAAmB3M,GAC5Btf,EAAOisB,UAAU3M,GACjB+K,EAAkB9L,SAAQ,SAAU5a,GAClC,IAAI6oB,EACJ,OAAwC,QAAhCA,EAAe7oB,EAAEsoB,iBAAwCp/B,IAAjB2/B,OAA0B3/B,EAAS2/B,EAAaj3B,KAAKoO,EAAG2b,EAC1G,GACF,GAEJ,GACF,GACD,EACDrwB,UAAWqvB,GAAc,CACvBmO,SAAU,SAAkBr9B,GAC1B,IAAI65B,EAAU75B,EAAM65B,QACpB5E,EAAYqI,SAASC,OAAO1D,EAC7B,EACD2D,eAAgB,SAAwB78B,GACtC,IAAIk5B,EAAUl5B,EAAMk5B,QAChB4D,EAAkBxI,EAAYyI,KAAK7D,EAAS,SAAU,YAC1D4D,SAAkEA,EAAgBE,OACnF,EACDC,kBAAmB,SAA2B/K,GAC5C,IAAIgH,EAAUhH,EAAMgH,QACpB5E,EAAYyI,KAAK7D,EAAS,SAAU,WACtC,GACC56B,EAAMY,YAEb,CCjIA,SAAS2E,GAAQK,GAAkC,OAAOL,GAAU,mBAAqB/C,QAAU,iBAAmBA,OAAOurB,SAAW,SAAUnoB,GAAO,cAAcA,CAAM,EAAG,SAAUA,GAAO,OAAOA,GAAO,mBAAqBpD,QAAUoD,EAAIhD,cAAgBJ,QAAUoD,IAAQpD,OAAOwE,UAAY,gBAAkBpB,CAAK,EAAGL,GAAQK,EAAM,CAC/U,SAAS8pB,GAAQC,EAAQC,GAAkB,IAAInc,EAAO1M,OAAO0M,KAAKkc,GAAS,GAAI5oB,OAAOwoB,sBAAuB,CAAE,IAAIM,EAAU9oB,OAAOwoB,sBAAsBI,GAASC,IAAmBC,EAAUA,EAAQ7pB,QAAO,SAAU8pB,GAAO,OAAO/oB,OAAOgpB,yBAAyBJ,EAAQG,GAAKE,UAAY,KAAKvc,EAAKpM,KAAKgf,MAAM5S,EAAMoc,EAAU,CAAE,OAAOpc,CAAM,CACpV,SAASwc,GAAcxb,GAAU,IAAK,IAAInM,EAAI,EAAGA,EAAIpC,UAAUC,OAAQmC,IAAK,CAAE,IAAIqJ,EAAS,MAAQzL,UAAUoC,GAAKpC,UAAUoC,GAAK,CAAE,EAAEA,EAAI,EAAIonB,GAAQ3oB,OAAO4K,IAAS,GAAIue,SAAQ,SAAUxvB,GAAOyvB,GAAgB1b,EAAQ/T,EAAKiR,EAAOjR,GAAO,IAAKqG,OAAOqpB,0BAA4BrpB,OAAOspB,iBAAiB5b,EAAQ1N,OAAOqpB,0BAA0Bze,IAAW+d,GAAQ3oB,OAAO4K,IAASue,SAAQ,SAAUxvB,GAAOqG,OAAOupB,eAAe7b,EAAQ/T,EAAKqG,OAAOgpB,yBAAyBpe,EAAQjR,GAAO,GAAI,CAAE,OAAO+T,CAAQ,CACzf,SAAS0b,GAAgBvqB,EAAKlF,EAAKoE,GAA4L,OAAnLpE,EAC5C,SAAwBiZ,GAAO,IAAIjZ,EACnC,SAAsBiK,EAAO4lB,GAAQ,GAAuB,WAAnBhrB,GAAQoF,IAAiC,OAAVA,EAAgB,OAAOA,EAAO,IAAI6lB,EAAO7lB,EAAMnI,OAAOiuB,aAAc,QAAajyB,IAATgyB,EAAoB,CAAE,IAAIE,EAAMF,EAAKtpB,KAAKyD,EAAO4lB,GAAQ,WAAY,GAAqB,WAAjBhrB,GAAQmrB,GAAmB,OAAOA,EAAK,MAAM,IAAI5K,UAAU,+CAAiD,CAAE,OAAiB,WAATyK,EAAoBI,OAASzkB,QAAQvB,EAAQ,CADnVimB,CAAajX,EAAK,UAAW,MAAwB,WAAjBpU,GAAQ7E,GAAoBA,EAAMiwB,OAAOjwB,EAAM,CAD1EmwB,CAAenwB,MAAiBkF,EAAOmB,OAAOupB,eAAe1qB,EAAKlF,EAAK,CAAEoE,MAAOA,EAAOkrB,YAAY,EAAMc,cAAc,EAAMC,UAAU,IAAkBnrB,EAAIlF,GAAOoE,EAAgBc,CAAK,CCH3O,SAASL,GAAQK,GAAkC,OAAOL,GAAU,mBAAqB/C,QAAU,iBAAmBA,OAAOurB,SAAW,SAAUnoB,GAAO,cAAcA,CAAM,EAAG,SAAUA,GAAO,OAAOA,GAAO,mBAAqBpD,QAAUoD,EAAIhD,cAAgBJ,QAAUoD,IAAQpD,OAAOwE,UAAY,gBAAkBpB,CAAK,EAAGL,GAAQK,EAAM,CAC/U,SAAS8pB,GAAQC,EAAQC,GAAkB,IAAInc,EAAO1M,OAAO0M,KAAKkc,GAAS,GAAI5oB,OAAOwoB,sBAAuB,CAAE,IAAIM,EAAU9oB,OAAOwoB,sBAAsBI,GAASC,IAAmBC,EAAUA,EAAQ7pB,QAAO,SAAU8pB,GAAO,OAAO/oB,OAAOgpB,yBAAyBJ,EAAQG,GAAKE,UAAY,KAAKvc,EAAKpM,KAAKgf,MAAM5S,EAAMoc,EAAU,CAAE,OAAOpc,CAAM,CACpV,SAASwc,GAAcxb,GAAU,IAAK,IAAInM,EAAI,EAAGA,EAAIpC,UAAUC,OAAQmC,IAAK,CAAE,IAAIqJ,EAAS,MAAQzL,UAAUoC,GAAKpC,UAAUoC,GAAK,CAAE,EAAEA,EAAI,EAAIonB,GAAQ3oB,OAAO4K,IAAS,GAAIue,SAAQ,SAAUxvB,GAAOyvB,GAAgB1b,EAAQ/T,EAAKiR,EAAOjR,GAAO,IAAKqG,OAAOqpB,0BAA4BrpB,OAAOspB,iBAAiB5b,EAAQ1N,OAAOqpB,0BAA0Bze,IAAW+d,GAAQ3oB,OAAO4K,IAASue,SAAQ,SAAUxvB,GAAOqG,OAAOupB,eAAe7b,EAAQ/T,EAAKqG,OAAOgpB,yBAAyBpe,EAAQjR,GAAO,GAAI,CAAE,OAAO+T,CAAQ,CACzf,SAAS0b,GAAgBvqB,EAAKlF,EAAKoE,GAA4L,OAAnLpE,EAC5C,SAAwBiZ,GAAO,IAAIjZ,EACnC,SAAsBiK,EAAO4lB,GAAQ,GAAuB,WAAnBhrB,GAAQoF,IAAiC,OAAVA,EAAgB,OAAOA,EAAO,IAAI6lB,EAAO7lB,EAAMnI,OAAOiuB,aAAc,QAAajyB,IAATgyB,EAAoB,CAAE,IAAIE,EAAMF,EAAKtpB,KAAKyD,EAAO4lB,GAAQ,WAAY,GAAqB,WAAjBhrB,GAAQmrB,GAAmB,OAAOA,EAAK,MAAM,IAAI5K,UAAU,+CAAiD,CAAE,OAAiB,WAATyK,EAAoBI,OAASzkB,QAAQvB,EAAQ,CADnVimB,CAAajX,EAAK,UAAW,MAAwB,WAAjBpU,GAAQ7E,GAAoBA,EAAMiwB,OAAOjwB,EAAM,CAD1EmwB,CAAenwB,MAAiBkF,EAAOmB,OAAOupB,eAAe1qB,EAAKlF,EAAK,CAAEoE,MAAOA,EAAOkrB,YAAY,EAAMc,cAAc,EAAMC,UAAU,IAAkBnrB,EAAIlF,GAAOoE,EAAgBc,CAAK,CAG3O,SAASmpB,GAAmBlB,GAAO,OAInC,SAA4BA,GAAO,GAAI5jB,MAAMC,QAAQ2jB,GAAM,OAAOa,GAAkBb,EAAM,CAJhDmB,CAAmBnB,IAG7D,SAA0BoB,GAAQ,GAAsB,oBAAXzsB,QAAmD,MAAzBysB,EAAKzsB,OAAOurB,WAA2C,MAAtBkB,EAAK,cAAuB,OAAOhlB,MAAMgK,KAAKgb,EAAO,CAHxFC,CAAiBrB,IAEtF,SAAqCW,EAAGC,GAAU,IAAKD,EAAG,OAAQ,GAAiB,iBAANA,EAAgB,OAAOE,GAAkBF,EAAGC,GAAS,IAAI7nB,EAAIG,OAAOC,UAAUvB,SAASyB,KAAKsnB,GAAG7oB,MAAM,MAAkB,WAANiB,GAAkB4nB,EAAE5rB,cAAagE,EAAI4nB,EAAE5rB,YAAYC,MAAM,GAAU,QAAN+D,GAAqB,QAANA,EAAa,OAAOqD,MAAMgK,KAAKua,GAAI,GAAU,cAAN5nB,GAAqB,2CAA2C/F,KAAK+F,GAAI,OAAO8nB,GAAkBF,EAAGC,EAAS,CAFjUE,CAA4Bd,IAC1H,WAAgC,MAAM,IAAI/H,UAAU,uIAAyI,CAD3DqJ,EAAsB,CAKxJ,SAAST,GAAkBb,EAAKtR,IAAkB,MAAPA,GAAeA,EAAMsR,EAAI1nB,UAAQoW,EAAMsR,EAAI1nB,QAAQ,IAAK,IAAImC,EAAI,EAAGumB,EAAO,IAAI5kB,MAAMsS,GAAMjU,EAAIiU,EAAKjU,IAAKumB,EAAKvmB,GAAKulB,EAAIvlB,GAAI,OAAOumB,CAAM,CAGlL,SAAS+P,GAAcv0B,GACrB,OAAO6wB,QAAQ7wB,EAAKya,QACtB,CAIO,SAAS+Z,GAAWC,EAAoB7D,EAAUppB,GACvD,GAJ8BktB,EAIHD,EAHpB5D,QAAQ6D,aAAiDvgC,EAASugC,EAAYja,SAGrC,CAC9C,IAAIka,EAAuD,YAAnCF,EAAmBG,YAA4Bl4B,OAAOu3B,OAAOjY,MAAMtf,OAAQ,CAAC,CAAA,GAAI3F,OAAO2tB,GAAmBhoB,OAAO0M,KAAK5B,EAAMojB,SAASzpB,KAAI,SAAU9K,GACzK,IAAIw+B,EACJ,OAAqD,QAA7CA,EAAqBrtB,EAAMojB,QAAQv0B,UAAyClC,IAAvB0gC,OAAgC1gC,EAAS0gC,EAAmBpI,yBAC3H,OAAQ,CAAE,EACV,OAAO7G,GAAcA,GAAc,CAAE,EAAE6O,GAAqB,CAAA,EAAI,CAC9DK,SAAUL,EAAmBM,QAAQ5zB,KAAI,SAAUoxB,GACjD,MAAO,CACLA,MAA0C,YAAnCkC,EAAmBG,YAA4BhP,GAAcA,GAAc,CAAE,EAAE2M,GAAQ,GAAI,CAChG3L,OAAQhB,GAAcA,GAAc,CAAE,EAAE+O,GAAoBpC,EAAM3L,UAC/D2L,EACL3B,SAAUA,EACVoE,kBAAmBP,EAAmBO,kBAEzC,KAEL,CApBF,IAAgCN,EAqB9B,MAAO,CACLnS,MAAOkS,EACP7D,SAAUA,EAEd,CACO,SAAS7mB,GAAQwY,GACtB,IA0BIN,EA1BSM,EAAMne,QAAO,SAAUglB,EAAKrS,GACvC,IAAKwd,GAAcxd,GAEjB,OADAqS,EAAIpsB,KAAK+Z,GACFqS,EAET,IAAI6L,EAAele,EAAQke,aACzBxa,EAAU1D,EAAQ0D,QAClBma,EAAc7d,EAAQ6d,YACtBE,EAAW/d,EAAQ+d,SACjBI,EAAY9L,EAAIpkB,MAAK,SAAUhF,GACjC,OAAOu0B,GAAcxd,IAAYwd,GAAcv0B,IAASA,EAAKi1B,eAAiBA,GAAgBpE,QAAQ+D,IAAgB50B,EAAK40B,cAAgBA,CAC7I,IACA,GAAIM,EAAW,CACb,IAAIC,GACHA,EAAmBD,EAAU3S,OAAOvlB,KAAKgf,MAAMmZ,EAAkBzQ,GAAmBoQ,GACvF,KAAO,CACL,IAAIpV,EAAU,CACZjF,QAASA,EACTma,YAAaA,EACbrS,MAAOuS,EACPG,aAAcA,GAEhB7L,EAAIpsB,KAAK0iB,EACX,CACA,OAAO0J,CACR,GAAE,IACiBjoB,KAAI,SAAUi0B,GAChC,IAAKb,GAAca,GACjB,OAAO1rB,QAAQK,QAAQqrB,GAEzB,IAAIphC,EAAOohC,EACT3a,EAAUzmB,EAAKymB,QACf8H,EAAQvuB,EAAKuuB,MAEf,OAAO9H,EAAQ,CACbwa,aAFejhC,EAAKihC,aAGpBH,SAAUvS,GAEd,IACA,OAAO7Y,QAAQC,IAAIsY,GAAQpV,MAAK,SAAUwoB,GACxC,OAAOrT,GAAQqT,EACjB,GACF,CACO,SAASC,GAAYD,EAAW/C,EAASiD,GAC9C,OAAOjD,EAAQnxB,KAAI,SAAUmG,GAC3B,ICzFiCkuB,EDyF7BC,EAAUJ,EAAU15B,QAAO,SAAUkkB,GACvC,OAAOA,EAAS+Q,WAAatpB,EAAOspB,QACtC,IACI8E,EAAUD,EAAQt0B,KAAI,SAAU4lB,GAElC,OADYA,EAAMxE,KAEpB,IACIoT,EAAYF,EAAQ,GAAGT,kBACvBzS,EAAQoT,EAAYA,EChGnB,CACLD,QAFiCF,EDiGsBE,EC9FvDE,KAAMJ,EAAWr0B,KAAI,SAAUvC,GAC7B,OAAOA,EAAOg3B,IAChB,IAAGj6B,OAAOk1B,SACVgF,UAAWL,EAAWr0B,KAAI,SAAUvC,GAClC,IAAIk3B,EACJ,OAA2C,QAAnCA,EAAal3B,EAAOi3B,iBAAsC1hC,IAAf2hC,OAAwB3hC,EAAS2hC,EAAW30B,KAAI,SAAU40B,GAE3G,MAAO,CACLC,MAAOD,EAASt7B,MAChBw7B,MAAOF,EAASE,MAChBC,iBAAkB,CAChBF,MAAO,CACLv7B,MAAOs7B,EAASI,cAIxB,GACF,IAAGx6B,OAAOk1B,WD6EyD6E,EAWnE,OAVApuB,EAAOisB,UAAU,CACfjsB,OAAQA,EACRouB,QAASA,EACTnT,MAAOA,EACP/a,MAAO+tB,EAAMjE,aAKL/O,EAAMxiB,MAAM8wB,SAAU,wCAAyC95B,OAAOuQ,EAAOspB,SAAU,iDAAkD75B,OAAOsC,KAAKC,eAAUnF,GAAY,4IAC9K,CACLmT,OAAQA,EACRib,MAAOA,EAEX,GACF,CEjHA,SAASrnB,GAAQK,GAAkC,OAAOL,GAAU,mBAAqB/C,QAAU,iBAAmBA,OAAOurB,SAAW,SAAUnoB,GAAO,cAAcA,CAAM,EAAG,SAAUA,GAAO,OAAOA,GAAO,mBAAqBpD,QAAUoD,EAAIhD,cAAgBJ,QAAUoD,IAAQpD,OAAOwE,UAAY,gBAAkBpB,CAAK,EAAGL,GAAQK,EAAM,CAC/U,IAAI1F,GAAY,CAAC,QAAS,YAAa,QAAS,QAAS,UAAW,SACpE,SAASwvB,GAAQC,EAAQC,GAAkB,IAAInc,EAAO1M,OAAO0M,KAAKkc,GAAS,GAAI5oB,OAAOwoB,sBAAuB,CAAE,IAAIM,EAAU9oB,OAAOwoB,sBAAsBI,GAASC,IAAmBC,EAAUA,EAAQ7pB,QAAO,SAAU8pB,GAAO,OAAO/oB,OAAOgpB,yBAAyBJ,EAAQG,GAAKE,UAAY,KAAKvc,EAAKpM,KAAKgf,MAAM5S,EAAMoc,EAAU,CAAE,OAAOpc,CAAM,CACpV,SAASwc,GAAcxb,GAAU,IAAK,IAAInM,EAAI,EAAGA,EAAIpC,UAAUC,OAAQmC,IAAK,CAAE,IAAIqJ,EAAS,MAAQzL,UAAUoC,GAAKpC,UAAUoC,GAAK,CAAE,EAAEA,EAAI,EAAIonB,GAAQ3oB,OAAO4K,IAAS,GAAIue,SAAQ,SAAUxvB,GAAOyvB,GAAgB1b,EAAQ/T,EAAKiR,EAAOjR,GAAO,IAAKqG,OAAOqpB,0BAA4BrpB,OAAOspB,iBAAiB5b,EAAQ1N,OAAOqpB,0BAA0Bze,IAAW+d,GAAQ3oB,OAAO4K,IAASue,SAAQ,SAAUxvB,GAAOqG,OAAOupB,eAAe7b,EAAQ/T,EAAKqG,OAAOgpB,yBAAyBpe,EAAQjR,GAAO,GAAI,CAAE,OAAO+T,CAAQ,CACzf,SAAS0b,GAAgBvqB,EAAKlF,EAAKoE,GAA4L,OAAnLpE,EAC5C,SAAwBiZ,GAAO,IAAIjZ,EACnC,SAAsBiK,EAAO4lB,GAAQ,GAAuB,WAAnBhrB,GAAQoF,IAAiC,OAAVA,EAAgB,OAAOA,EAAO,IAAI6lB,EAAO7lB,EAAMnI,OAAOiuB,aAAc,QAAajyB,IAATgyB,EAAoB,CAAE,IAAIE,EAAMF,EAAKtpB,KAAKyD,EAAO4lB,GAAQ,WAAY,GAAqB,WAAjBhrB,GAAQmrB,GAAmB,OAAOA,EAAK,MAAM,IAAI5K,UAAU,+CAAiD,CAAE,OAAiB,WAATyK,EAAoBI,OAASzkB,QAAQvB,EAAQ,CADnVimB,CAAajX,EAAK,UAAW,MAAwB,WAAjBpU,GAAQ7E,GAAoBA,EAAMiwB,OAAOjwB,EAAM,CAD1EmwB,CAAenwB,MAAiBkF,EAAOmB,OAAOupB,eAAe1qB,EAAKlF,EAAK,CAAEoE,MAAOA,EAAOkrB,YAAY,EAAMc,cAAc,EAAMC,UAAU,IAAkBnrB,EAAIlF,GAAOoE,EAAgBc,CAAK,CAG3O,SAAS3F,GAAyB0R,EAAQyd,GAAY,GAAc,MAAVzd,EAAgB,MAAO,CAAE,EAAE,IAAkEjR,EAAK4H,EAAnEmM,EACzF,SAAuC9C,EAAQyd,GAAY,GAAc,MAAVzd,EAAgB,MAAO,CAAE,EAAE,IAA2DjR,EAAK4H,EAA5DmM,EAAS,CAAE,EAAM4a,EAAatoB,OAAO0M,KAAK9B,GAAqB,IAAKrJ,EAAI,EAAGA,EAAI+mB,EAAWlpB,OAAQmC,IAAO5H,EAAM2uB,EAAW/mB,GAAQ8mB,EAAStiB,QAAQpM,IAAQ,IAAa+T,EAAO/T,GAAOiR,EAAOjR,IAAQ,OAAO+T,CAAQ,CADhN6a,CAA8B3d,EAAQyd,GAAuB,GAAIroB,OAAOwoB,sBAAuB,CAAE,IAAIC,EAAmBzoB,OAAOwoB,sBAAsB5d,GAAS,IAAKrJ,EAAI,EAAGA,EAAIknB,EAAiBrpB,OAAQmC,IAAO5H,EAAM8uB,EAAiBlnB,GAAQ8mB,EAAStiB,QAAQpM,IAAQ,GAAkBqG,OAAOC,UAAUyoB,qBAAqBvoB,KAAKyK,EAAQjR,KAAgB+T,EAAO/T,GAAOiR,EAAOjR,GAAQ,CAAE,OAAO+T,CAAQ,CAK3e,ICLMgsB,GACAC,GACAC,GDGFC,GAAgB,KAChBC,ICNEJ,IAAkB,EAClBC,IAAqB,EACrBC,QAAsBniC,EACnB,SAAkCwmB,GAEvC,IAAI8b,IADJL,GAEA,OAAO1sB,QAAQK,QAAQ4Q,GAAS9N,MAAK,SAAU5B,GAc7C,OAAIqrB,IAAuBG,EAAmBJ,GACrCC,IAETD,GAAmBI,EACnBH,GAAsBrrB,EACfA,EACT,GACD,GDpBI,SAASyrB,GAAQ1iC,GACtB,IAAImtB,EAAQntB,EAAKmtB,MACfwV,EAAiB3iC,EAAK4iC,UACtBA,OAA+BziC,IAAnBwiC,EAA4B,CAAA,EAAKA,EAC7ChhC,EAAQ3B,EAAK2B,MACb48B,EAAQv+B,EAAKu+B,MACbsE,EAAU7iC,EAAK6iC,QACftB,EAAQvhC,EAAKuhC,MACbuB,EAAUlhC,GAAyB5B,EAAM6B,IACvC0gC,IACF5gC,EAAMg2B,YAAYjR,aAAa6b,IAEjC,IAAIQ,EAAiBD,EAAQC,eAC3BzD,EAAYwD,EAAQxD,UACpB0D,EAAWF,EAAQE,SACnBC,EAAkBH,EAAQG,gBAC1BC,EAAYJ,EAAQI,UACpB5K,EAAawK,EAAQxK,WAGvB,GAFA0K,EAASzE,GACT0E,EAAgBthC,EAAMi5B,sBACjB2D,IAA+B,IAAtB58B,EAAMm8B,YAAuB,CACzC,IAAIqF,EACA/U,EAAcmT,EAAMjE,WAAWlP,YAAYjhB,KAAI,SAAUmhB,GAC3D,OAAOsD,GAAcA,GAAc,CAAE,EAAEtD,GAAa,CAAA,EAAI,CACtDC,MAAO,IAEX,IACA2U,EAAU,QACVH,EAAe3U,GACfkR,EAAqD,QAA1C6D,EAAoBP,EAAUvK,cAA0Cl4B,IAAtBgjC,EAA+BA,EAAoBxhC,EAAMy8B,gBAAgB,CACpI5qB,MAAO+tB,EAAMjE,cAOf,IAAI8F,EAAWvJ,GAAW2I,GAAyBpU,GAAavV,MAAK,WACnE,OAAOnD,QAAQK,SACjB,KACA,OAAOwrB,EAAMlG,gBAAgBlB,IAAIiJ,EACnC,CACAF,EAAU,WACVX,GAAgB5gC,EAAMg2B,YAAYhd,YAAW,WAC3CuoB,EAAU,UACZ,GAAGvhC,EAAMw8B,gBAQT,IAAIzS,EAAUmO,GAAW2I,GAAyB7gC,EAAMs9B,WAAWrN,GAAc,CAC/E2M,MAAOA,EACPsE,QAASA,EACTrvB,MAAO+tB,EAAMjE,YACZwF,IAAUjqB,MAAK,SAAUylB,GAC1B,OAAO5oB,QAAQC,IAAI2oB,EAAQnxB,KAAI,SAAUmG,GACvC,OAAOoC,QAAQK,QAAQzC,EAAOulB,SAASjH,GAAc,CACnD2M,MAAOA,EACPsE,QAASA,EACTrvB,MAAO+tB,EAAMjE,YACZwF,KAAWjqB,MAAK,SAAU4nB,GAC3B,OAAOD,GAAWC,EAAoBntB,EAAOspB,SAAU2E,EAAMjE,WAC/D,GACF,KAAIzkB,KAAK9C,IAAS8C,MAAK,SAAUwoB,GAC/B,IAOMgC,EAPFlK,EAAsBkI,EAAUiC,MAAK,SAAUvQ,GAEjD,OAyDR,SAAmDxE,GACjD,OAAQ3iB,MAAMC,QAAQ0iB,IAAUsO,QAAQtO,aAAqCpuB,EAASouB,EAAMgV,mBAC9F,CA3DeC,CADKzQ,EAAMxE,MAEpB,IAGI4K,GAEFb,EAAW,CACTE,sBAAuB5G,GAAcA,GAAc,CAAA,GAA4D,QAAtDyR,EAAwB9B,EAAMjE,WAAW1G,eAA+Cz2B,IAA1BkjC,OAAmCljC,EAASkjC,EAAsB7K,wBAA0B,CAAA,GAAK,GAAI,CAC1NW,oBAAqBA,MAI3B,OAAOmI,GAAYD,EAAW/C,EAASiD,EACzC,IAAG1oB,MAAK,SAAUuV,GAChB,OH1FC,SAAiBpuB,GACtB,IAAIouB,EAAcpuB,EAAKouB,YACrBzsB,EAAQ3B,EAAK2B,MACb6R,EAAQxT,EAAKwT,MAGXiwB,EAA4BrV,EAAYhe,QAAO,SAAUglB,EAAK9G,GAChE,OAAOsD,GAAcA,GAAc,CAAE,EAAEwD,GAAM,CAAE,EAAEtD,GAAgB,GAAIxD,EAAWhb,OAAOspB,SAAUhL,GAAcA,GAAc,CAAE,EAAEtD,EAAWhb,QAAS,GAAI,CACvJulB,SAAU,WAER,OAAO7K,GAAQM,EAAWC,MAC5B,KAEH,GAAE,IAUDmV,EAT0B/hC,EAAMy5B,QAAQhrB,QAAO,SAAUglB,EAAK8J,GAC5D,OAAIA,EAAOb,QACFa,EAAOb,QAAQjJ,GAEjBA,CACT,GAAG,CACDsO,kBAAmBD,EACnBjwB,MAAOA,IAEiCkwB,kBAQ5C,OAAO1V,GAPcrsB,EAAM08B,QAAQ,CACjCqF,kBAAmBA,EACnBpF,QAAS51B,OAAOulB,OAAOyV,GACvBlwB,MAAOA,KAIsB7L,OAAOk1B,SAAS1vB,KAAI,SAAUmG,GAC3D,MAAO,CACLA,OAAQA,EACRib,MAAOjb,EAAOulB,WAElB,GACF,CGqDawF,CAAQ,CACbjQ,YAAaA,EACbzsB,MAAOA,EACP6R,MAAO+tB,EAAMjE,YAEjB,GACD,MAAIzkB,MAAK,SAAUuV,GAClB,IAAIuV,EAMJT,EAAU,QACVH,EAAe3U,GACf,IAAIwV,EAAcjiC,EAAMy8B,gBAAgB,CACtC5qB,MAAO+tB,EAAMjE,aAEfgC,EAAsD,QAA3CqE,EAAqBf,EAAUvK,cAA2Cl4B,IAAvBwjC,EAAgCA,EAAqBhiC,EAAMm8B,cAAgBS,GAASqF,GAAeA,GACjK,IAAIC,EAAkBjI,GAAc2F,EAAMjE,YAC1C,GAAsC,OAAlCiE,EAAMjE,WAAWvB,cAAyB8H,EAAiB,CAC7D,IAAI73B,EAAO63B,EAAgB73B,KACzBqwB,EAAiBwH,EAAgBxH,eACjCE,EAAUsH,EAAgBtH,QAC1BjpB,EAASuwB,EAAgBvwB,OAC3BA,EAAOyjB,SAASnF,GAAc,CAC5BzE,MAAOA,EACPnhB,KAAMA,EACNqwB,eAAgBA,EAChBE,QAASA,EACTsG,QAASA,EACTvvB,OAAQA,EACRE,MAAO+tB,EAAMjE,YACZwF,GACL,CACF,IAAGtJ,SAAQ,WACT0J,EAAU,QACNX,IACF5gC,EAAMg2B,YAAYjR,aAAa6b,GAEnC,IACA,OAAOhB,EAAMlG,gBAAgBlB,IAAIzO,EACnC,CE3IA,SAASxkB,GAAQK,GAAkC,OAAOL,GAAU,mBAAqB/C,QAAU,iBAAmBA,OAAOurB,SAAW,SAAUnoB,GAAO,cAAcA,CAAM,EAAG,SAAUA,GAAO,OAAOA,GAAO,mBAAqBpD,QAAUoD,EAAIhD,cAAgBJ,QAAUoD,IAAQpD,OAAOwE,UAAY,gBAAkBpB,CAAK,EAAGL,GAAQK,EAAM,CAC/U,IAAI1F,GAAY,CAAC,QAAS,QAAS,UAAW,SAC9C,SAASwvB,GAAQC,EAAQC,GAAkB,IAAInc,EAAO1M,OAAO0M,KAAKkc,GAAS,GAAI5oB,OAAOwoB,sBAAuB,CAAE,IAAIM,EAAU9oB,OAAOwoB,sBAAsBI,GAASC,IAAmBC,EAAUA,EAAQ7pB,QAAO,SAAU8pB,GAAO,OAAO/oB,OAAOgpB,yBAAyBJ,EAAQG,GAAKE,UAAY,KAAKvc,EAAKpM,KAAKgf,MAAM5S,EAAMoc,EAAU,CAAE,OAAOpc,CAAM,CACpV,SAASwc,GAAcxb,GAAU,IAAK,IAAInM,EAAI,EAAGA,EAAIpC,UAAUC,OAAQmC,IAAK,CAAE,IAAIqJ,EAAS,MAAQzL,UAAUoC,GAAKpC,UAAUoC,GAAK,CAAE,EAAEA,EAAI,EAAIonB,GAAQ3oB,OAAO4K,IAAS,GAAIue,SAAQ,SAAUxvB,GAAOyvB,GAAgB1b,EAAQ/T,EAAKiR,EAAOjR,GAAO,IAAKqG,OAAOqpB,0BAA4BrpB,OAAOspB,iBAAiB5b,EAAQ1N,OAAOqpB,0BAA0Bze,IAAW+d,GAAQ3oB,OAAO4K,IAASue,SAAQ,SAAUxvB,GAAOqG,OAAOupB,eAAe7b,EAAQ/T,EAAKqG,OAAOgpB,yBAAyBpe,EAAQjR,GAAO,GAAI,CAAE,OAAO+T,CAAQ,CACzf,SAAS0b,GAAgBvqB,EAAKlF,EAAKoE,GAA4L,OAAnLpE,EAC5C,SAAwBiZ,GAAO,IAAIjZ,EACnC,SAAsBiK,EAAO4lB,GAAQ,GAAuB,WAAnBhrB,GAAQoF,IAAiC,OAAVA,EAAgB,OAAOA,EAAO,IAAI6lB,EAAO7lB,EAAMnI,OAAOiuB,aAAc,QAAajyB,IAATgyB,EAAoB,CAAE,IAAIE,EAAMF,EAAKtpB,KAAKyD,EAAO4lB,GAAQ,WAAY,GAAqB,WAAjBhrB,GAAQmrB,GAAmB,OAAOA,EAAK,MAAM,IAAI5K,UAAU,+CAAiD,CAAE,OAAiB,WAATyK,EAAoBI,OAASzkB,QAAQvB,EAAQ,CADnVimB,CAAajX,EAAK,UAAW,MAAwB,WAAjBpU,GAAQ7E,GAAoBA,EAAMiwB,OAAOjwB,EAAM,CAD1EmwB,CAAenwB,MAAiBkF,EAAOmB,OAAOupB,eAAe1qB,EAAKlF,EAAK,CAAEoE,MAAOA,EAAOkrB,YAAY,EAAMc,cAAc,EAAMC,UAAU,IAAkBnrB,EAAIlF,GAAOoE,EAAgBc,CAAK,CAG3O,SAAS3F,GAAyB0R,EAAQyd,GAAY,GAAc,MAAVzd,EAAgB,MAAO,CAAE,EAAE,IAAkEjR,EAAK4H,EAAnEmM,EACzF,SAAuC9C,EAAQyd,GAAY,GAAc,MAAVzd,EAAgB,MAAO,CAAE,EAAE,IAA2DjR,EAAK4H,EAA5DmM,EAAS,CAAE,EAAM4a,EAAatoB,OAAO0M,KAAK9B,GAAqB,IAAKrJ,EAAI,EAAGA,EAAI+mB,EAAWlpB,OAAQmC,IAAO5H,EAAM2uB,EAAW/mB,GAAQ8mB,EAAStiB,QAAQpM,IAAQ,IAAa+T,EAAO/T,GAAOiR,EAAOjR,IAAQ,OAAO+T,CAAQ,CADhN6a,CAA8B3d,EAAQyd,GAAuB,GAAIroB,OAAOwoB,sBAAuB,CAAE,IAAIC,EAAmBzoB,OAAOwoB,sBAAsB5d,GAAS,IAAKrJ,EAAI,EAAGA,EAAIknB,EAAiBrpB,OAAQmC,IAAO5H,EAAM8uB,EAAiBlnB,GAAQ8mB,EAAStiB,QAAQpM,IAAQ,GAAkBqG,OAAOC,UAAUyoB,qBAAqBvoB,KAAKyK,EAAQjR,KAAgB+T,EAAO/T,GAAOiR,EAAOjR,GAAQ,CAAE,OAAO+T,CAAQ,CCP3e,SAASlP,GAAQK,GAAkC,OAAOL,GAAU,mBAAqB/C,QAAU,iBAAmBA,OAAOurB,SAAW,SAAUnoB,GAAO,cAAcA,CAAM,EAAG,SAAUA,GAAO,OAAOA,GAAO,mBAAqBpD,QAAUoD,EAAIhD,cAAgBJ,QAAUoD,IAAQpD,OAAOwE,UAAY,gBAAkBpB,CAAK,EAAGL,GAAQK,EAAM,CAC/U,IAAI1F,GAAY,CAAC,QAAS,UAAW,SACnC4uB,GAAa,CAAC,eAAgB,cAAe,gBAC7CqT,GAAa,CAAC,gBACdC,GAAa,CAAC,eAAgB,aAC9BC,GAAa,CAAC,UACdC,GAAa,CAAC,OAAQ,UACxB,SAAS5S,GAAQC,EAAQC,GAAkB,IAAInc,EAAO1M,OAAO0M,KAAKkc,GAAS,GAAI5oB,OAAOwoB,sBAAuB,CAAE,IAAIM,EAAU9oB,OAAOwoB,sBAAsBI,GAASC,IAAmBC,EAAUA,EAAQ7pB,QAAO,SAAU8pB,GAAO,OAAO/oB,OAAOgpB,yBAAyBJ,EAAQG,GAAKE,UAAY,KAAKvc,EAAKpM,KAAKgf,MAAM5S,EAAMoc,EAAU,CAAE,OAAOpc,CAAM,CACpV,SAASwc,GAAcxb,GAAU,IAAK,IAAInM,EAAI,EAAGA,EAAIpC,UAAUC,OAAQmC,IAAK,CAAE,IAAIqJ,EAAS,MAAQzL,UAAUoC,GAAKpC,UAAUoC,GAAK,CAAE,EAAEA,EAAI,EAAIonB,GAAQ3oB,OAAO4K,IAAS,GAAIue,SAAQ,SAAUxvB,GAAOyvB,GAAgB1b,EAAQ/T,EAAKiR,EAAOjR,GAAO,IAAKqG,OAAOqpB,0BAA4BrpB,OAAOspB,iBAAiB5b,EAAQ1N,OAAOqpB,0BAA0Bze,IAAW+d,GAAQ3oB,OAAO4K,IAASue,SAAQ,SAAUxvB,GAAOqG,OAAOupB,eAAe7b,EAAQ/T,EAAKqG,OAAOgpB,yBAAyBpe,EAAQjR,GAAO,GAAI,CAAE,OAAO+T,CAAQ,CACzf,SAAS0b,GAAgBvqB,EAAKlF,EAAKoE,GAA4L,OAAnLpE,EAC5C,SAAwBiZ,GAAO,IAAIjZ,EACnC,SAAsBiK,EAAO4lB,GAAQ,GAAuB,WAAnBhrB,GAAQoF,IAAiC,OAAVA,EAAgB,OAAOA,EAAO,IAAI6lB,EAAO7lB,EAAMnI,OAAOiuB,aAAc,QAAajyB,IAATgyB,EAAoB,CAAE,IAAIE,EAAMF,EAAKtpB,KAAKyD,EAAO4lB,GAAQ,WAAY,GAAqB,WAAjBhrB,GAAQmrB,GAAmB,OAAOA,EAAK,MAAM,IAAI5K,UAAU,+CAAiD,CAAE,OAAiB,WAATyK,EAAoBI,OAASzkB,QAAQvB,EAAQ,CADnVimB,CAAajX,EAAK,UAAW,MAAwB,WAAjBpU,GAAQ7E,GAAoBA,EAAMiwB,OAAOjwB,EAAM,CAD1EmwB,CAAenwB,MAAiBkF,EAAOmB,OAAOupB,eAAe1qB,EAAKlF,EAAK,CAAEoE,MAAOA,EAAOkrB,YAAY,EAAMc,cAAc,EAAMC,UAAU,IAAkBnrB,EAAIlF,GAAOoE,EAAgBc,CAAK,CAG3O,SAAS3F,GAAyB0R,EAAQyd,GAAY,GAAc,MAAVzd,EAAgB,MAAO,CAAE,EAAE,IAAkEjR,EAAK4H,EAAnEmM,EACzF,SAAuC9C,EAAQyd,GAAY,GAAc,MAAVzd,EAAgB,MAAO,CAAE,EAAE,IAA2DjR,EAAK4H,EAA5DmM,EAAS,CAAE,EAAM4a,EAAatoB,OAAO0M,KAAK9B,GAAqB,IAAKrJ,EAAI,EAAGA,EAAI+mB,EAAWlpB,OAAQmC,IAAO5H,EAAM2uB,EAAW/mB,GAAQ8mB,EAAStiB,QAAQpM,IAAQ,IAAa+T,EAAO/T,GAAOiR,EAAOjR,IAAQ,OAAO+T,CAAQ,CADhN6a,CAA8B3d,EAAQyd,GAAuB,GAAIroB,OAAOwoB,sBAAuB,CAAE,IAAIC,EAAmBzoB,OAAOwoB,sBAAsB5d,GAAS,IAAKrJ,EAAI,EAAGA,EAAIknB,EAAiBrpB,OAAQmC,IAAO5H,EAAM8uB,EAAiBlnB,GAAQ8mB,EAAStiB,QAAQpM,IAAQ,GAAkBqG,OAAOC,UAAUyoB,qBAAqBvoB,KAAKyK,EAAQjR,KAAgB+T,EAAO/T,GAAOiR,EAAOjR,GAAQ,CAAE,OAAO+T,CAAQ,CAMpe,SAAS8tB,GAAelkC,GAC7B,IAAI2B,EAAQ3B,EAAK2B,MACfkhC,EAAU7iC,EAAK6iC,QACftB,EAAQvhC,EAAKuhC,MACbuB,EAAUlhC,GAAyB5B,EAAM6B,IA0T3C,MAAO,CACLsiC,oBA1TwB,SAA6BC,GACrD,IAAIC,EAAeD,EAAcC,aAC/BC,EAAcF,EAAcE,YAC5BC,EAAeH,EAAcG,aAE/B,SAASC,EAAwBrX,IAOCoU,EAAMjE,WAAWjF,QAAWkJ,EAAMlG,gBAAgBf,WAChDnN,EAAM/W,SAAWiuB,IAShB,IAHF,CAACC,EAAaC,GAAcjB,MAAK,SAAUmB,GAC1E,OC3CyBC,ED2CDD,EC3CSE,ED2CIxX,EAAM/W,OC1C1CsuB,IAAWC,GAASD,EAAOE,SAASD,GADtC,IAA0BD,EAAQC,CD4CnC,MAEEpD,EAAMhE,SAAS,OAAQ,MAMlB57B,EAAMk8B,OACT0D,EAAMlG,gBAAgBhB,YAG5B,CACA,OAAOzI,GAAc,CAUnBiT,aAAcL,EACdM,YAAaN,EAKbO,YAAa,SAAqB5X,IACA,IAA5BoU,EAAMjE,WAAWjF,QAAoBgM,IAAiB1iC,EAAMg2B,YAAYz2B,SAAS8jC,eAAiB7X,EAAM/W,SAAWiuB,GAGvHA,EAAaY,MACf,GAnDOrjC,GAAyBwiC,EAAe3T,IAqDlD,EAkQCyU,aAjQiB,SAAsBC,GACvC,OAAOvT,GAAc,CACnBjmB,KAAM,WACN,gBAAiB41B,EAAMjE,WAAWjF,OAClC,gBAAiB,UACjB,gBAAiBkJ,EAAMjE,WAAWjF,OAASkJ,EAAMjE,WAAWlP,YAAYjhB,KAAI,SAAU4lB,GACpF,IAAIzf,EAASyf,EAAMzf,OACnB,OAAOmpB,GAAyB96B,EAAMqI,GAAI,OAAQsJ,EACpD,IAAGwpB,KAAK,UAAO38B,EACf,kBAAmBs8B,GAAyB96B,EAAMqI,GAAI,UACrDm7B,EACJ,EAuPCC,aAtPiB,SAAsBhB,GACpBA,EAAcC,aAC/Bc,IAAAA,EAAOvjC,GAAyBwiC,EAAeN,IAC7C5W,EAAe,SAAsBC,GACvC,IAAIkY,EACJ1jC,EAAMg9B,SAAS/M,GAAc,CAC3BzE,MAAOA,EACP0V,QAASA,EACTrvB,MAAO+tB,EAAMjE,YACZwF,IACHvB,EAAMhE,SAAS,SAAU,MACgC,QAAxD8H,EAAwBjB,EAAcC,oBAAoDlkC,IAA1BklC,GAA4CA,EAAsBJ,MACpI,EACD,OAAOrT,GAAc,CACnB4L,OAAQ,GACR8H,YAAY,EACZ35B,KAAM,SACNgzB,SAAU,SAAkBxR,GAC1BA,EAAME,iBACN,IAAIkY,EAAgBpK,GAAuBx5B,EAAMy5B,QAASmG,EAAMlG,sBAC1Cl7B,IAAlBolC,EACFA,EAAc1sB,MAAK,WACjB,OAAOqU,EAAaC,EACtB,IAEAD,EAAaC,EAEhB,EACD2R,QAAS,SAAiB3R,GACxB,IAAIqY,EACJrY,EAAME,iBACN1rB,EAAMm9B,QAAQlN,GAAc,CAC1BzE,MAAOA,EACP0V,QAASA,EACTrvB,MAAO+tB,EAAMjE,YACZwF,IACHvB,EAAMhE,SAAS,QAAS,MACkC,QAAzDiI,EAAyBpB,EAAcC,oBAAqDlkC,IAA3BqlC,GAA6CA,EAAuBnF,OACxI,GACC8E,EACJ,EA+MCM,cA3GkB,SAAuBN,GACzC,OAAOvT,GAAc,CACnB8T,QAASjJ,GAAyB96B,EAAMqI,GAAI,SAC5CA,GAAIyyB,GAAyB96B,EAAMqI,GAAI,UACtCm7B,EACJ,EAuGCQ,cA/MkB,SAAuBvB,GACzC,IAAIwB,EACJ,SAASC,EAAQ1Y,IAGXxrB,EAAMm8B,aAAejB,QAAQ0E,EAAMjE,WAAWiB,SAChDmE,GAAQ9Q,GAAc,CACpBzE,MAAOA,EACPxrB,MAAOA,EACP48B,MAAOgD,EAAMjE,WAAWkB,YAAc+C,EAAMjE,WAAWiB,MACvDsE,QAASA,EACTtB,MAAOA,GACNuB,IAELvB,EAAMhE,SAAS,QAAS,KAC1B,CACA,IAAI76B,EAAQ0hC,GAAiB,CAAE,EACd1hC,EAAM2hC,iBACrByB,EAAkBpjC,EAAMqjC,UACxBA,OAAgC5lC,IAApB2lC,EAA6B,IAAMA,EAC/CX,EAAOvjC,GAAyBc,EAAOqhC,IACrCiC,EAAapK,GAAc2F,EAAMjE,YAEjC2I,EX5JD,SAAmBC,GACxB,OAAOrJ,QAAQqJ,GAAaA,EAAUC,MAAMnJ,IAC9C,CW0JgCoJ,EAD+C,QAAzDR,EAAwBjkC,EAAMg2B,YAAYp1B,iBAAiDpC,IAA1BylC,OAAmCzlC,EAASylC,EAAsBM,YAAc,IAE/JnI,EAAep8B,EAAMo8B,eAAiBiI,SAAgDA,EAAWzJ,UAAY0J,EAAwB,KAAO,UAChJ,OAAOrU,GAAc,CACnB,oBAAqB,OACrB,wBAAyB2P,EAAMjE,WAAWjF,QAA4C,OAAlCkJ,EAAMjE,WAAWvB,aAAwBU,GAAyB96B,EAAMqI,GAAI,QAAQjH,OAAOw+B,EAAMjE,WAAWvB,cAAeiK,aAA+C7lC,EAAS6lC,EAAW1yB,aAAUnT,EAC5P,gBAAiBohC,EAAMjE,WAAWjF,OAASkJ,EAAMjE,WAAWlP,YAAYzmB,QAAO,SAAU2mB,GACvF,OAAOA,EAAWC,MAAMzmB,OAAS,CACnC,IAAGqF,KAAI,SAAU9J,GACf,IAAIiQ,EAASjQ,EAAMiQ,OACnB,OAAOmpB,GAAyB96B,EAAMqI,GAAI,OAAQsJ,EACpD,IAAGwpB,KAAK,UAAO38B,EACf,kBAAmBs8B,GAAyB96B,EAAMqI,GAAI,SACtDvD,MAAO86B,EAAMjE,WAAWkB,YAAc+C,EAAMjE,WAAWiB,MACvDv0B,GAAIyyB,GAAyB96B,EAAMqI,GAAI,SACvCq8B,aAAc,MACdC,YAAa,MACbC,eAAgB,MAChBxI,aAAcA,EACdyI,WAAY,QACZtI,UAAWv8B,EAAMu8B,UACjBD,YAAat8B,EAAMs8B,YACnB8H,UAAWA,EACX9iC,KAAM,SACNwjC,SAAU,SAAkBtZ,GAC1B,IAAI1mB,EAAQ0mB,EAAMuZ,cAAcjgC,MAC5B9E,EAAMq8B,yBAA2Bf,GAAe9P,GAAOwZ,YACzD7D,EAAQE,SAASv8B,GAGnBi8B,GAAQ9Q,GAAc,CACpBzE,MAAOA,EACPxrB,MAAOA,EACP48B,MAAO93B,EAAMa,MAAM,EAAGy+B,GACtBlD,QAASA,EACTtB,MAAOA,GACNuB,GACJ,EACD8D,iBAAkB,SAA0BzZ,GAC1CuV,GAAQ9Q,GAAc,CACpBzE,MAAOA,EACPxrB,MAAOA,EACP48B,MAAOpR,EAAMuZ,cAAcjgC,MAAMa,MAAM,EAAGy+B,GAC1ClD,QAASA,EACTtB,MAAOA,GACNuB,GACJ,EACD+D,UAAW,SAAmB1Z,GACxB8P,GAAe9P,GAAOwZ,aDjM3B,SAAmB3mC,GACxB,IAAImtB,EAAQntB,EAAKmtB,MACfxrB,EAAQ3B,EAAK2B,MACbkhC,EAAU7iC,EAAK6iC,QACftB,EAAQvhC,EAAKuhC,MACbuB,EAAUlhC,GAAyB5B,EAAM6B,IAC3C,GAAkB,YAAdsrB,EAAM9qB,KAAmC,cAAd8qB,EAAM9qB,IAAqB,CAExD,IAAIykC,EAAwB,WAC1B,IAAIjD,EAAkBjI,GAAc2F,EAAMjE,YACtCyJ,EAAWplC,EAAMg2B,YAAYz2B,SAAS8lC,eAAevK,GAAyB96B,EAAMqI,GAAI,QAAQjH,OAAOw+B,EAAMjE,WAAWvB,cAAe8H,aAAyD1jC,EAAS0jC,EAAgBvwB,SACzNyzB,IACEA,EAASE,uBACXF,EAASE,wBAAuB,GAEhCF,EAASG,gBAAe,GAG9B,EACIC,EAAkB,WACpB,IAAItD,EAAkBjI,GAAc2F,EAAMjE,YAC1C,GAAsC,OAAlCiE,EAAMjE,WAAWvB,cAAyB8H,EAAiB,CAC7D,IAAI73B,EAAO63B,EAAgB73B,KACzBqwB,EAAiBwH,EAAgBxH,eACjCE,EAAUsH,EAAgBtH,QAC1BjpB,EAASuwB,EAAgBvwB,OAC3BA,EAAOyjB,SAASnF,GAAc,CAC5BzE,MAAOA,EACPnhB,KAAMA,EACNqwB,eAAgBA,EAChBE,QAASA,EACTsG,QAASA,EACTvvB,OAAQA,EACRE,MAAO+tB,EAAMjE,YACZwF,GACL,CACF,EAEA3V,EAAME,kBAI0B,IAA5BkU,EAAMjE,WAAWjF,SAAqB12B,EAAMm8B,aAAejB,QAAQ0E,EAAMjE,WAAWiB,QACtFmE,GAAQ9Q,GAAc,CACpBzE,MAAOA,EACPxrB,MAAOA,EACP48B,MAAOgD,EAAMjE,WAAWiB,MACxBsE,QAASA,EACTtB,MAAOA,GACNuB,IAAUjqB,MAAK,WAChB0oB,EAAMhE,SAASpQ,EAAM9qB,IAAK,CACxB+kC,iBAAkBzlC,EAAMi5B,sBAE1BuM,IAIAxsB,WAAWmsB,EAAuB,EACpC,KAEAvF,EAAMhE,SAASpQ,EAAM9qB,IAAK,CAAA,GAC1B8kC,IACAL,IAEJ,MAAO,GAAkB,WAAd3Z,EAAM9qB,IAIf8qB,EAAME,iBACNkU,EAAMhE,SAASpQ,EAAM9qB,IAAK,MAM1Bk/B,EAAMlG,gBAAgBhB,iBACjB,GAAkB,QAAdlN,EAAM9qB,IACfk/B,EAAMhE,SAAS,OAAQ,MAMvBgE,EAAMlG,gBAAgBhB,iBACjB,GAAkB,UAAdlN,EAAM9qB,IAAiB,CAGhC,GAAsC,OAAlCk/B,EAAMjE,WAAWvB,cAAyBwF,EAAMjE,WAAWlP,YAAYriB,OAAM,SAAUuiB,GACzF,OAAmC,IAA5BA,EAAWC,MAAMzmB,MAC1B,IAAI,CACF,IAAIy9B,EAAgBpK,GAAuBx5B,EAAMy5B,QAASmG,EAAMlG,iBAUhE,iBATsBl7B,IAAlBolC,EACFA,EAAc1sB,KAAK0oB,EAAMlG,gBAAgBhB,WAC/B14B,EAAMk8B,OAKhB0D,EAAMlG,gBAAgBhB,YAG1B,CAIAlN,EAAME,iBACN,IAAI0F,EAAQ6I,GAAc2F,EAAMjE,YAC9BtxB,EAAO+mB,EAAM/mB,KACbqwB,EAAiBtJ,EAAMsJ,eACvBE,EAAUxJ,EAAMwJ,QAChBjpB,EAASyf,EAAMzf,OACjB,GAAI6Z,EAAMka,SAAWla,EAAMma,aACTnnC,IAAZo8B,IACFjpB,EAAOujB,SAASjF,GAAc,CAC5BzE,MAAOA,EACPnhB,KAAMA,EACNqwB,eAAgBA,EAChBE,QAASA,EACTsG,QAASA,EACTvvB,OAAQA,EACRE,MAAO+tB,EAAMjE,YACZwF,IACHnhC,EAAMY,UAAU29B,eAAe,CAC7B3D,QAASA,EACTvwB,KAAMA,EACNwH,MAAO+tB,EAAMjE,mBAGZ,GAAInQ,EAAMoa,cACCpnC,IAAZo8B,IACFjpB,EAAOujB,SAASjF,GAAc,CAC5BzE,MAAOA,EACPnhB,KAAMA,EACNqwB,eAAgBA,EAChBE,QAASA,EACTsG,QAASA,EACTvvB,OAAQA,EACRE,MAAO+tB,EAAMjE,YACZwF,IACHnhC,EAAMY,UAAU+9B,kBAAkB,CAChC/D,QAASA,EACTvwB,KAAMA,EACNwH,MAAO+tB,EAAMjE,mBAGZ,GAAInQ,EAAMqa,YAEV,CACL,QAAgBrnC,IAAZo8B,EAeF,OAdAjpB,EAAOujB,SAASjF,GAAc,CAC5BzE,MAAOA,EACPnhB,KAAMA,EACNqwB,eAAgBA,EAChBE,QAASA,EACTsG,QAASA,EACTvvB,OAAQA,EACRE,MAAO+tB,EAAMjE,YACZwF,SACHnhC,EAAMY,UAAUw9B,SAAS,CACvBxD,QAASA,EACTvwB,KAAMA,EACNwH,MAAO+tB,EAAMjE,aAIjBoF,GAAQ9Q,GAAc,CACpBzE,MAAOA,EACPyV,UAAW,CACTvK,QAAQ,GAEV12B,MAAOA,EACP48B,MAAOlC,EACPwG,QAASA,EACTtB,MAAOA,GACNuB,IAAUjqB,MAAK,WAChBvF,EAAOujB,SAASjF,GAAc,CAC5BzE,MAAOA,EACPnhB,KAAMA,EACNqwB,eAAgBA,EAChBE,QAASA,EACTsG,QAASA,EACTvvB,OAAQA,EACRE,MAAO+tB,EAAMjE,YACZwF,GACL,GACF,CACF,CACF,CCSQ2E,CAAW7V,GAAc,CACvBzE,MAAOA,EACPxrB,MAAOA,EACPkhC,QAASA,EACTtB,MAAOA,GACNuB,GACJ,EACD+C,QAASA,EAIT6B,OAAQvvB,GACRwvB,QAAS,SAAiBxa,GAQpBiX,EAAcC,eAAiB1iC,EAAMg2B,YAAYz2B,SAAS8jC,eAAkBzD,EAAMjE,WAAWjF,QAC/FwN,EAAQ1Y,EAEZ,GACCgY,EACJ,EA8GCyC,cA7FkB,SAAuBzC,GACzC,OAAOvT,GAAc,CACnBkT,YAAa,SAAqB3X,GAIhCA,EAAME,gBACP,EACDwa,aAAc,WACZtG,EAAMhE,SAAS,aAAc,KAC/B,GACC4H,EACJ,EAkFC2C,aAxGiB,SAAsB1D,GACvC,IAAI7O,EAAQ6O,GAAiB,CAAE,EAC7B9wB,EAASiiB,EAAMjiB,OACf6xB,EAAOvjC,GAAyB2zB,EAAOyO,IACzC,OAAOpS,GAAc,CACnBjmB,KAAM,UACN,kBAAmB8wB,GAAyB96B,EAAMqI,GAAI,SACtDA,GAAIyyB,GAAyB96B,EAAMqI,GAAI,OAAQsJ,IAC9C6xB,EACJ,EAgGC4C,aAlFiB,SAAsB3D,GACvC,IAAIp4B,EAAOo4B,EAAcp4B,KACvBsH,EAAS8wB,EAAc9wB,OACvB6xB,EAAOvjC,GAAyBwiC,EAAeH,IACjD,OAAOrS,GAAc,CACnB5nB,GAAIyyB,GAAyB96B,EAAMqI,GAAI,QAAQjH,OAAOiJ,EAAKg8B,mBAAoB10B,GAC/E3H,KAAM,SACN,gBAAiB41B,EAAMjE,WAAWvB,eAAiB/vB,EAAKg8B,kBACxDC,YAAa,SAAqB9a,GAChC,GAAInhB,EAAKg8B,oBAAsBzG,EAAMjE,WAAWvB,aAAhD,CAGAwF,EAAMhE,SAAS,YAAavxB,EAAKg8B,mBACjC,IAAIhC,EAAapK,GAAc2F,EAAMjE,YACrC,GAAsC,OAAlCiE,EAAMjE,WAAWvB,cAAyBiK,EAAY,CACxD,IAAIkC,EAAQlC,EAAWh6B,KACrBqwB,EAAiB2J,EAAW3J,eAC5BE,EAAUyJ,EAAWzJ,QACrB4L,EAAUnC,EAAW1yB,OACvB60B,EAAQpR,SAASnF,GAAc,CAC7BzE,MAAOA,EACPnhB,KAAMk8B,EACN7L,eAAgBA,EAChBE,QAASA,EACTsG,QAASA,EACTvvB,OAAQ60B,EACR30B,MAAO+tB,EAAMjE,YACZwF,GACL,CAjBA,CAkBD,EACDgC,YAAa,SAAqB3X,GAGhCA,EAAME,gBACP,EACDsa,QAAS,SAAiBxa,GACxB,IAAIkP,EAAiB/oB,EAAOgpB,kBAAkB,CAC5CtwB,KAAMA,EACNwH,MAAO+tB,EAAMjE,aAEXf,EAAUjpB,EAAOkpB,WAAW,CAC9BxwB,KAAMA,EACNwH,MAAO+tB,EAAMjE,cAQKf,EAAU7mB,QAAQK,UAAY2sB,GAAQ9Q,GAAc,CACtEzE,MAAOA,EACPyV,UAAW,CACTvK,QAAQ,GAEV12B,MAAOA,EACP48B,MAAOlC,EACPwG,QAASA,EACTtB,MAAOA,GACNuB,KACWjqB,MAAK,WACjBvF,EAAOujB,SAASjF,GAAc,CAC5BzE,MAAOA,EACPnhB,KAAMA,EACNqwB,eAAgBA,EAChBE,QAASA,EACTsG,QAASA,EACTvvB,OAAQA,EACRE,MAAO+tB,EAAMjE,YACZwF,GACL,GACF,GACCqC,EACJ,EAWH,CE1VA,SAASj+B,GAAQK,GAAkC,OAAOL,GAAU,mBAAqB/C,QAAU,iBAAmBA,OAAOurB,SAAW,SAAUnoB,GAAO,cAAcA,CAAM,EAAG,SAAUA,GAAO,OAAOA,GAAO,mBAAqBpD,QAAUoD,EAAIhD,cAAgBJ,QAAUoD,IAAQpD,OAAOwE,UAAY,gBAAkBpB,CAAK,EAAGL,GAAQK,EAAM,CAC/U,SAAS8pB,GAAQC,EAAQC,GAAkB,IAAInc,EAAO1M,OAAO0M,KAAKkc,GAAS,GAAI5oB,OAAOwoB,sBAAuB,CAAE,IAAIM,EAAU9oB,OAAOwoB,sBAAsBI,GAASC,IAAmBC,EAAUA,EAAQ7pB,QAAO,SAAU8pB,GAAO,OAAO/oB,OAAOgpB,yBAAyBJ,EAAQG,GAAKE,UAAY,KAAKvc,EAAKpM,KAAKgf,MAAM5S,EAAMoc,EAAU,CAAE,OAAOpc,CAAM,CACpV,SAASwc,GAAcxb,GAAU,IAAK,IAAInM,EAAI,EAAGA,EAAIpC,UAAUC,OAAQmC,IAAK,CAAE,IAAIqJ,EAAS,MAAQzL,UAAUoC,GAAKpC,UAAUoC,GAAK,CAAE,EAAEA,EAAI,EAAIonB,GAAQ3oB,OAAO4K,IAAS,GAAIue,SAAQ,SAAUxvB,GAAOyvB,GAAgB1b,EAAQ/T,EAAKiR,EAAOjR,GAAO,IAAKqG,OAAOqpB,0BAA4BrpB,OAAOspB,iBAAiB5b,EAAQ1N,OAAOqpB,0BAA0Bze,IAAW+d,GAAQ3oB,OAAO4K,IAASue,SAAQ,SAAUxvB,GAAOqG,OAAOupB,eAAe7b,EAAQ/T,EAAKqG,OAAOgpB,yBAAyBpe,EAAQjR,GAAO,GAAI,CAAE,OAAO+T,CAAQ,CACzf,SAAS0b,GAAgBvqB,EAAKlF,EAAKoE,GAA4L,OAAnLpE,EAC5C,SAAwBiZ,GAAO,IAAIjZ,EACnC,SAAsBiK,EAAO4lB,GAAQ,GAAuB,WAAnBhrB,GAAQoF,IAAiC,OAAVA,EAAgB,OAAOA,EAAO,IAAI6lB,EAAO7lB,EAAMnI,OAAOiuB,aAAc,QAAajyB,IAATgyB,EAAoB,CAAE,IAAIE,EAAMF,EAAKtpB,KAAKyD,EAAO4lB,GAAQ,WAAY,GAAqB,WAAjBhrB,GAAQmrB,GAAmB,OAAOA,EAAK,MAAM,IAAI5K,UAAU,+CAAiD,CAAE,OAAiB,WAATyK,EAAoBI,OAASzkB,QAAQvB,EAAQ,CADnVimB,CAAajX,EAAK,UAAW,MAAwB,WAAjBpU,GAAQ7E,GAAoBA,EAAMiwB,OAAOjwB,EAAM,CAD1EmwB,CAAenwB,MAAiBkF,EAAOmB,OAAOupB,eAAe1qB,EAAKlF,EAAK,CAAEoE,MAAOA,EAAOkrB,YAAY,EAAMc,cAAc,EAAMC,UAAU,IAAkBnrB,EAAIlF,GAAOoE,EAAgBc,CAAK,CAIpO,SAAS6gC,GAAYpoC,GAC1B,IAAIyf,EAAG4oB,EAAuBC,EAAwBC,EAClDnN,EAAUp7B,EAAKo7B,QACjBn0B,EAAUjH,EAAKiH,QACbuhC,EAAuL,QAAzK/oB,IAAoE,QAA7D4oB,EAAwBphC,EAAQwhC,+BAA+DtoC,IAA1BkoC,OAAmCloC,EAASkoC,EAAsBxZ,aAAe,IAAI,UAAsB1uB,IAANsf,OAAetf,EAASsf,EAAEqP,QACzN4Z,EAAeF,EAAa1W,GAAgB,CAAA,EAAI0W,EAAY9/B,OAAO0M,MAAqE,QAA9DkzB,EAAyBrhC,EAAQwhC,+BAAgEtoC,IAA3BmoC,OAAoCnoC,EAASmoC,EAAuBrhC,UAAY,KAAO,CAAE,EAC7O,MAAO,CACLm0B,QAASA,EAAQjuB,KAAI,SAAU+xB,GAC7B,MAAO,CACL16B,KAAM06B,EAAO16B,KACbyC,QAASyB,OAAO0M,KAAK8pB,EAAOjG,8BAAgC,IAEhE,IACAhyB,QAAS2qB,GAAc,CACrB,oBAAqBlpB,OAAO0M,KAAKnO,IAChCyhC,GACHC,GAAI9Z,GAAW9rB,QAAuE,QAA9DwlC,EAAyBthC,EAAQwhC,+BAAgEtoC,IAA3BooC,OAAoCpoC,EAASooC,EAAuB1Z,aAAe,IAErL,CCxBO,SAAS+Z,GAAc5oC,GAC5B,IAAI6oC,EACAr1B,EAAQxT,EAAKwT,MACjB,OAAqB,IAAjBA,EAAM6kB,QAA2C,OAAvB7kB,EAAMuoB,aAC3B,MAE2C,QAA3C8M,EAAiBjN,GAAcpoB,UAAuCrT,IAAnB0oC,OAA4B1oC,EAAS0oC,EAAexM,iBAAmB,IACrI,CCRA,SAASn1B,GAAQK,GAAkC,OAAOL,GAAU,mBAAqB/C,QAAU,iBAAmBA,OAAOurB,SAAW,SAAUnoB,GAAO,cAAcA,CAAM,EAAG,SAAUA,GAAO,OAAOA,GAAO,mBAAqBpD,QAAUoD,EAAIhD,cAAgBJ,QAAUoD,IAAQpD,OAAOwE,UAAY,gBAAkBpB,CAAK,EAAGL,GAAQK,EAAM,CAC/U,SAAS8pB,GAAQC,EAAQC,GAAkB,IAAInc,EAAO1M,OAAO0M,KAAKkc,GAAS,GAAI5oB,OAAOwoB,sBAAuB,CAAE,IAAIM,EAAU9oB,OAAOwoB,sBAAsBI,GAASC,IAAmBC,EAAUA,EAAQ7pB,QAAO,SAAU8pB,GAAO,OAAO/oB,OAAOgpB,yBAAyBJ,EAAQG,GAAKE,UAAY,KAAKvc,EAAKpM,KAAKgf,MAAM5S,EAAMoc,EAAU,CAAE,OAAOpc,CAAM,CACpV,SAASwc,GAAcxb,GAAU,IAAK,IAAInM,EAAI,EAAGA,EAAIpC,UAAUC,OAAQmC,IAAK,CAAE,IAAIqJ,EAAS,MAAQzL,UAAUoC,GAAKpC,UAAUoC,GAAK,CAAE,EAAEA,EAAI,EAAIonB,GAAQ3oB,OAAO4K,IAAS,GAAIue,SAAQ,SAAUxvB,GAAOyvB,GAAgB1b,EAAQ/T,EAAKiR,EAAOjR,GAAO,IAAKqG,OAAOqpB,0BAA4BrpB,OAAOspB,iBAAiB5b,EAAQ1N,OAAOqpB,0BAA0Bze,IAAW+d,GAAQ3oB,OAAO4K,IAASue,SAAQ,SAAUxvB,GAAOqG,OAAOupB,eAAe7b,EAAQ/T,EAAKqG,OAAOgpB,yBAAyBpe,EAAQjR,GAAO,GAAI,CAAE,OAAO+T,CAAQ,CACzf,SAAS0b,GAAgBvqB,EAAKlF,EAAKoE,GAA4L,OAAnLpE,EAC5C,SAAwBiZ,GAAO,IAAIjZ,EACnC,SAAsBiK,EAAO4lB,GAAQ,GAAuB,WAAnBhrB,GAAQoF,IAAiC,OAAVA,EAAgB,OAAOA,EAAO,IAAI6lB,EAAO7lB,EAAMnI,OAAOiuB,aAAc,QAAajyB,IAATgyB,EAAoB,CAAE,IAAIE,EAAMF,EAAKtpB,KAAKyD,EAAO4lB,GAAQ,WAAY,GAAqB,WAAjBhrB,GAAQmrB,GAAmB,OAAOA,EAAK,MAAM,IAAI5K,UAAU,+CAAiD,CAAE,OAAiB,WAATyK,EAAoBI,OAASzkB,QAAQvB,EAAQ,CADnVimB,CAAajX,EAAK,UAAW,MAAwB,WAAjBpU,GAAQ7E,GAAoBA,EAAMiwB,OAAOjwB,EAAM,CAD1EmwB,CAAenwB,MAAiBkF,EAAOmB,OAAOupB,eAAe1qB,EAAKlF,EAAK,CAAEoE,MAAOA,EAAOkrB,YAAY,EAAMc,cAAc,EAAMC,UAAU,IAAkBnrB,EAAIlF,GAAOoE,EAAgBc,CAAK,CAMpO,IAAIuhC,GAAe,SAAsBt1B,EAAOgqB,GACrD,OAAQA,EAAOv6B,MACb,IAAK,kBAqHL,IAAK,YAED,OAAO2uB,GAAcA,GAAc,CAAE,EAAEpe,GAAQ,CAAA,EAAI,CACjDuoB,aAAcyB,EAAOlI,UAlH3B,IAAK,WAED,OAAO1D,GAAcA,GAAc,CAAE,EAAEpe,GAAQ,CAAA,EAAI,CACjD+qB,MAAOf,EAAOlI,QACdkJ,WAAY,OAGlB,IAAK,iBAED,OAAO5M,GAAcA,GAAc,CAAE,EAAEpe,GAAQ,CAAA,EAAI,CACjD4a,YAAaoP,EAAOlI,UAG1B,IAAK,YAED,OAAO1D,GAAcA,GAAc,CAAE,EAAEpe,GAAQ,CAAA,EAAI,CACjD6kB,OAAQmF,EAAOlI,UAGrB,IAAK,YAED,OAAO1D,GAAcA,GAAc,CAAE,EAAEpe,GAAQ,CAAA,EAAI,CACjDgO,OAAQgc,EAAOlI,UAGrB,IAAK,aAED,OAAO1D,GAAcA,GAAc,CAAE,EAAEpe,GAAQ,CAAA,EAAI,CACjDojB,QAAShF,GAAcA,GAAc,CAAA,EAAIpe,EAAMojB,SAAU4G,EAAOlI,WAGtE,IAAK,YAED,IAAIsN,EAAYhR,GAAcA,GAAc,CAAA,EAAIpe,GAAQ,GAAI,CAC1DuoB,aAAcyB,EAAOlI,QAAQ1sB,eAAe,oBAAsB40B,EAAOlI,QAAQ8R,iBAAmB5M,GAAoB,EAAGhnB,EAAMuoB,aAAc5N,GAAc3a,GAAQgqB,EAAO77B,MAAMi5B,uBAEpL,OAAOhJ,GAAcA,GAAc,CAAE,EAAEgR,GAAY,CAAA,EAAI,CACrDpE,WAAYoK,GAAc,CACxBp1B,MAAOovB,MAIf,IAAK,UAED,IAAImG,EAAanX,GAAcA,GAAc,CAAA,EAAIpe,GAAQ,GAAI,CAC3DuoB,aAAcvB,IAAsB,EAAEhnB,EAAMuoB,aAAc5N,GAAc3a,GAAQgqB,EAAO77B,MAAMi5B,uBAE/F,OAAOhJ,GAAcA,GAAc,CAAE,EAAEmX,GAAa,CAAA,EAAI,CACtDvK,WAAYoK,GAAc,CACxBp1B,MAAOu1B,MAIf,IAAK,SAED,OAAIv1B,EAAM6kB,OACDzG,GAAcA,GAAc,CAAE,EAAEpe,GAAQ,CAAA,EAAI,CACjDuoB,aAAc,KACd1D,QAAQ,EACRmG,WAAY,OAGT5M,GAAcA,GAAc,CAAE,EAAEpe,GAAQ,CAAA,EAAI,CACjDuoB,aAAc,KACdwC,MAAO,GACP/c,OAAQ,OACR4M,YAAa,KAGnB,IAAK,SAED,OAAOwD,GAAcA,GAAc,CAAE,EAAEpe,GAAQ,CAAA,EAAI,CACjDuoB,aAAc,KACd1D,QAAQ,EACR7W,OAAQ,SAGd,IAAK,QAED,OAAOoQ,GAAcA,GAAc,CAAE,EAAEpe,GAAQ,CAAA,EAAI,CACjDuoB,cAM6B,IAA7ByB,EAAO77B,MAAMm8B,YAAuBN,EAAO77B,MAAMi5B,oBAAsB,KACvEpZ,OAAQ,OACRgd,WAAY,KACZD,MAAO,KAGb,IAAK,QAED,OAAO3M,GAAcA,GAAc,CAAE,EAAEpe,GAAQ,CAAA,EAAI,CACjDuoB,aAAcyB,EAAO77B,MAAMi5B,oBAC3BvC,QAASmF,EAAO77B,MAAMm8B,aAAejB,QAAQrpB,EAAM+qB,SAAWf,EAAO77B,MAAMy8B,gBAAgB,CACzF5qB,MAAOA,MAIf,IAAK,OAED,OAAIgqB,EAAO77B,MAAMk8B,MACRrqB,EAEFoe,GAAcA,GAAc,CAAE,EAAEpe,GAAQ,CAAA,EAAI,CACjD6kB,QAAQ,EACR0D,aAAc,OASpB,IAAK,aAED,OAAOnK,GAAcA,GAAc,CAAE,EAAEpe,GAAQ,CAAA,EAAI,CACjDuoB,aAAcyB,EAAO77B,MAAMi5B,sBAGjC,QAEE,MADiB,sBAAsB73B,OAAOsC,KAAKC,UAAUk4B,EAAOv6B,MAAO,sBACpEuQ,EAEb,EChJA,SAAStM,GAAQK,GAAkC,OAAOL,GAAU,mBAAqB/C,QAAU,iBAAmBA,OAAOurB,SAAW,SAAUnoB,GAAO,cAAcA,CAAM,EAAG,SAAUA,GAAO,OAAOA,GAAO,mBAAqBpD,QAAUoD,EAAIhD,cAAgBJ,QAAUoD,IAAQpD,OAAOwE,UAAY,gBAAkBpB,CAAK,EAAGL,GAAQK,EAAM,CAC/U,SAAS8pB,GAAQC,EAAQC,GAAkB,IAAInc,EAAO1M,OAAO0M,KAAKkc,GAAS,GAAI5oB,OAAOwoB,sBAAuB,CAAE,IAAIM,EAAU9oB,OAAOwoB,sBAAsBI,GAASC,IAAmBC,EAAUA,EAAQ7pB,QAAO,SAAU8pB,GAAO,OAAO/oB,OAAOgpB,yBAAyBJ,EAAQG,GAAKE,UAAY,KAAKvc,EAAKpM,KAAKgf,MAAM5S,EAAMoc,EAAU,CAAE,OAAOpc,CAAM,CACpV,SAASwc,GAAcxb,GAAU,IAAK,IAAInM,EAAI,EAAGA,EAAIpC,UAAUC,OAAQmC,IAAK,CAAE,IAAIqJ,EAAS,MAAQzL,UAAUoC,GAAKpC,UAAUoC,GAAK,CAAE,EAAEA,EAAI,EAAIonB,GAAQ3oB,OAAO4K,IAAS,GAAIue,SAAQ,SAAUxvB,GAAOyvB,GAAgB1b,EAAQ/T,EAAKiR,EAAOjR,GAAO,IAAKqG,OAAOqpB,0BAA4BrpB,OAAOspB,iBAAiB5b,EAAQ1N,OAAOqpB,0BAA0Bze,IAAW+d,GAAQ3oB,OAAO4K,IAASue,SAAQ,SAAUxvB,GAAOqG,OAAOupB,eAAe7b,EAAQ/T,EAAKqG,OAAOgpB,yBAAyBpe,EAAQjR,GAAO,GAAI,CAAE,OAAO+T,CAAQ,CACzf,SAAS0b,GAAgBvqB,EAAKlF,EAAKoE,GAA4L,OAAnLpE,EAC5C,SAAwBiZ,GAAO,IAAIjZ,EACnC,SAAsBiK,EAAO4lB,GAAQ,GAAuB,WAAnBhrB,GAAQoF,IAAiC,OAAVA,EAAgB,OAAOA,EAAO,IAAI6lB,EAAO7lB,EAAMnI,OAAOiuB,aAAc,QAAajyB,IAATgyB,EAAoB,CAAE,IAAIE,EAAMF,EAAKtpB,KAAKyD,EAAO4lB,GAAQ,WAAY,GAAqB,WAAjBhrB,GAAQmrB,GAAmB,OAAOA,EAAK,MAAM,IAAI5K,UAAU,+CAAiD,CAAE,OAAiB,WAATyK,EAAoBI,OAASzkB,QAAQvB,EAAQ,CADnVimB,CAAajX,EAAK,UAAW,MAAwB,WAAjBpU,GAAQ7E,GAAoBA,EAAMiwB,OAAOjwB,EAAM,CAD1EmwB,CAAenwB,MAAiBkF,EAAOmB,OAAOupB,eAAe1qB,EAAKlF,EAAK,CAAEoE,MAAOA,EAAOkrB,YAAY,EAAMc,cAAc,EAAMC,UAAU,IAAkBnrB,EAAIlF,GAAOoE,EAAgBc,CAAK,CAYpO,SAASyhC,GAAmB/hC,GAEjC,IAAIgiC,EAAc,GACdtnC,EAAQ+7B,GAAgBz2B,EAASgiC,GACjC1H,EAAQpE,GAAY2L,GAAcnnC,GAUtC,SAA4B3B,GAC1B,IAAIkpC,EAAgBC,EAChB1L,EAAYz9B,EAAKy9B,UACnBjqB,EAAQxT,EAAKwT,MAOf,GANA7R,EAAMo3B,cAAcnH,GAAc,CAChC6L,UAAWA,EACXjqB,MAAOA,EACPqvB,QAASA,EACTtgC,UAAWZ,EAAMY,WAChBugC,KACEsG,KAAyE,QAApCF,EAAiB11B,EAAMojB,eAAwCz2B,IAAnB+oC,GAAgG,QAAlEC,EAAwBD,EAAe1Q,6BAA6Dr4B,IAA1BgpC,GAAoCA,EAAsBhQ,sBAA0C,IAAnBx3B,EAAM00B,SAAoB,CACvS,IAAI6I,EAAS1I,GAA4B,CACvCQ,+BAA+B,IAEjCr1B,EAAMy5B,QAAQpyB,KAAKk2B,GACnBmK,EAAiB,CAACnK,GACpB,CACF,IA1BI4D,EbbC,SAAgC9iC,GACrC,IAAIuhC,EAAQvhC,EAAKuhC,MA+BjB,MAAO,CACL0B,gBA/BoB,SAAyBx8B,GAC7C86B,EAAMhE,SAAS,kBAAmB92B,EACnC,EA8BCu8B,SA7Ba,SAAkBv8B,GAC/B86B,EAAMhE,SAAS,WAAY92B,EAC5B,EA4BCs8B,eA3BmB,SAAwB73B,GAC3C,IAAIo+B,EAAa,EACb7iC,EAAQyE,EAASiC,KAAI,SAAUmhB,GACjC,OAAOsD,GAAcA,GAAc,CAAE,EAAEtD,GAAa,CAAA,EAAI,CAGtDC,MAAOP,GAAQM,EAAWC,OAAOphB,KAAI,SAAUnB,GAC7C,OAAO4lB,GAAcA,GAAc,CAAE,EAAE5lB,GAAO,CAAA,EAAI,CAChDg8B,kBAAmBsB,KAEtB,KAEL,IACA/H,EAAMhE,SAAS,iBAAkB92B,EAClC,EAcC64B,UAbc,SAAmB74B,GACjC86B,EAAMhE,SAAS,YAAa92B,EAC7B,EAYCy8B,UAXc,SAAmBz8B,GACjC86B,EAAMhE,SAAS,YAAa92B,EAC7B,EAUC6xB,WATe,SAAoB7xB,GACnC86B,EAAMhE,SAAS,aAAc92B,EAC9B,EASH,Ca3BgB8iC,CAAuB,CACnChI,MAAOA,IAELiI,EAActF,GAAetS,GAAc,CAC7CjwB,MAAOA,EACPkhC,QAASA,EACTtB,MAAOA,EACPh/B,UAAWZ,EAAMY,WAChBugC,IAmBH,SAASD,IACP,OAAOH,GAAQ9Q,GAAc,CAC3BzE,MAAO,IAAIsc,MAAM,SACjB7G,UAAW,CACTvK,OAAQkJ,EAAMjE,WAAWjF,QAE3B12B,MAAOA,EACPY,UAAWZ,EAAMY,UACjBg8B,MAAOgD,EAAMjE,WAAWiB,MACxBsE,QAASA,EACTtB,MAAOA,GACNuB,GACL,CACA,SAASuG,EAAiBjO,GACxBA,EAAQvJ,SAAQ,SAAUqN,GACxB,IAAIwK,EACJ,OAAkD,QAA1CA,EAAoBxK,EAAOvnB,iBAA6CxX,IAAtBupC,OAA+BvpC,EAASupC,EAAkB7gC,KAAKq2B,EAAQtN,GAAcA,GAAc,CAAA,EAAIkR,GAAU,GAAI,CAC7KvgC,UAAWZ,EAAMY,UACjBsgC,QAASA,EACThM,SAAU,SAAkBhY,GAC1BoqB,EAAYjgC,KAAK,CACf6tB,SAAUhY,GAEb,EACDkY,SAAU,SAAkBlY,GAC1BoqB,EAAYjgC,KAAK,CACf+tB,SAAUlY,GAEb,EACD0gB,UAAW,SAAmB1gB,GAC5BoqB,EAAYjgC,KAAK,CACfu2B,UAAW1gB,GAEf,IAEJ,GACF,CACA,SAASuqB,IACP,OAAOznC,EAAMy5B,QAAQkI,MAAK,SAAUpE,GAClC,MAAuB,6BAAhBA,EAAO16B,IAChB,GACF,CACA,GAAI7C,EAAM00B,WAAa+S,IAAkC,CACvD,IAAIO,EAA2C,kBAAnBhoC,EAAM00B,SAAyB,CAAA,EAAK10B,EAAM00B,SACtE10B,EAAMy5B,QAAQpyB,KAAKwtB,GAA4BmT,GACjD,CASA,OARAN,EAAiB1nC,EAAMy5B,SHnElB,SAAwB14B,GAC7B,IAAIknC,EAAuBC,EACvBzc,EAAW1qB,EAAM0qB,SACnBuK,EAAcj1B,EAAMi1B,YAEtB,GAD4E,QAAnDiS,EAAwBjS,EAAYp1B,iBAAiDpC,IAA1BypC,GAA2G,QAA9DC,EAAyBD,EAAsB1D,iBAAkD/lC,IAA3B0pC,OAAhF1pC,EAA6H0pC,EAAuBx/B,SAAS,mBAC7P,CACrB,IAAIy/B,EAAoBnS,EAAYz2B,SAAS5B,cAAc,QACvDyqC,EAAUpS,EAAYz2B,SAAS8oC,cAAc,QACjDF,EAAkBtlC,KAAO,mBACzBmW,YAAW,WACTmvB,EAAkBh+B,QAAUzG,KAAKC,UAAU8nB,GAC3C2c,EAAQ/R,YAAY8R,EACrB,GAAE,EACL,CACF,CGsDEG,CAAe,CACb7c,SAAUgb,GAAY,CACpBhN,QAASz5B,EAAMy5B,QACfn0B,QAASA,IAEX0wB,YAAah2B,EAAMg2B,cAEd/F,GAAcA,GAAc,CACjCiR,QAASA,EACTtgC,UAAWZ,EAAMY,WAChBinC,GAAc1G,EACnB,CCzGO,IACMoH,GAAiB,iCCExBC,GAAY,cASZC,GAAY,SAACC,GACjB,IAAKA,EAAO,OAAO,EACnB,IACE,IAAAC,EARW,SAACD,GACd,IAAOE,EAAuBpoC,EAAhBkoC,EAAMp3B,MAAM,KAAI,GAApB,GACV,OAAO5N,KAAKmC,MAAMgjC,KAAKD,GACzB,CAKoBv3B,CAAOq3B,GAAfI,EAAGH,EAAHG,IAER,OAAO36B,KAAKoW,MAAQ,IAAOukB,EAAM,EAClC,CAAC,MAAAC,GACA,OAAO,CACT,CACF,EAEIC,GAAmC,KAI1BC,GAAa,WAAA,IAAA7X,EAAA8X,EAAAC,IAAAC,MAAG,SAAAC,EAAAhrC,GAAA,IAAAirC,EAAA1mB,EAAA,OAAAumB,IAAApkC,MAAA,SAAAwkC,GAAA,cAAAA,EAAA1xB,KAAA0xB,EAAAjjC,MAAA,KAAA,EACqB,GADZgjC,EAAWjrC,EAAXirC,YAC9B1mB,EAAS4mB,eAAeC,QAAQjB,IACjCC,GAAU7lB,GAAO,CAAA2mB,EAAAjjC,KAAA,EAAA,KAAA,CAAA,OAAAijC,EAAAG,OAAA,SAAS9mB,GAAM,KAAA,EAgBpC,OAdIomB,KACHA,GAAWj2B,MAAK,GAAA3R,OAAImnC,GAAwB,UAAA,CAC1Cve,OAAQ,OACRzC,QAAS,CACP,yBAA0B+hB,EAC1B,eAAgB,sBAGjBpyB,MAAK,SAACpY,GAAC,OAAKA,EAAE6qC,MAAM,IACpBzyB,MAAK,SAAAnW,GAAe,IAAZ2nC,EAAK3nC,EAAL2nC,MAEP,OADAc,eAAeI,QAAQpB,GAAWE,GAC3BA,KAER7Q,SAAQ,WAAA,OAAOmR,GAAW,IAAI,KAClCO,EAAAG,OAAA,SAEMV,IAAQ,KAAA,EAAA,IAAA,MAAA,OAAAO,EAAAve,OAAA,GAAAqe,OAChB,OArBYJ,SAAahb,GAAA,OAAAmD,EAAA/K,MAAAnjB,KAAAgD,UAAA,CAAA,CAAA,GAuBb2jC,GAAY,WAAA,IAAAjW,EAAAsV,EAAAC,IAAAC,MAAG,SAAAU,EAAApoC,GAAA,IAAA4nC,EAAAS,EAAAv/B,EAAAunB,EAAAxK,EAAAmhB,EAAA,OAAAS,IAAApkC,MAAA,SAAAilC,GAAA,cAAAA,EAAAnyB,KAAAmyB,EAAA1jC,MAAA,KAAA,EAeN,OAdpBgjC,EAAW5nC,EAAX4nC,YACAS,EAAMroC,EAANqoC,OACAv/B,EAAS9I,EAAT8I,UACAunB,EAAKrwB,EAALqwB,OAOMxK,EAAU,IAAI0iB,SACZx8B,IAAI,yBAA0B67B,GACtC/hB,EAAQ9Z,IAAI,eAAgB,oBAERu8B,EAAA1jC,KAAA,EACE2iC,GAAc,CAAEK,YAAAA,IAAc,KAAA,EAA5CZ,EAAKsB,EAAAE,KACX3iB,EAAQ9Z,IAAI,yBAAerM,OAAWsnC,IAAS,KAAA,EAAA,OAAAsB,EAAAN,OAAA,SAG1C32B,MAAK3R,GAAAA,OAAImnC,GAA2B,aAAA,CACzCve,OAAQ,OACRxC,KAAM9jB,KAAKC,UAAU,CACnBouB,MAAAA,EACAvnB,UAAAA,EACAu/B,OAAAA,IAEFxiB,QAAAA,KACA,KAAA,GAAA,IAAA,MAAA,OAAAyiB,EAAAhf,OAAA,GAAA8e,OACH,OA7BYD,SAAYM,GAAA,OAAAvW,EAAAvN,MAAAnjB,KAAAgD,UAAA,CAAA,CAAA,GCxClB,SAASkkC,GAAW/rC,GAAuD,IAAAyB,EAAAzB,EAApD0B,aAC5BsqC,QADwC7rC,IAAAsB,EAAG,CAAA,EAAEA,GACrCwqC,cAAAA,OAAgB9rC,IAAH6rC,EAAG,aAAYA,EAEpC,OACE3sC,EAAAC,cAAA,IAAA,CACE4sC,KAAI,qDAAAnpC,OAAuDW,OAAOs8B,SAASmM,SAA6E,sEACxJ/1B,OAAO,SACPg2B,IAAI,uBAEJ/sC,EAAAC,cAAA,OAAA,CAAMgB,UAAU,mBAAmB2rC,GACnC5sC,EAAAC,cAAA,MAAA,CACEC,MAAM,KACNC,OAAO,KACP,aAAW,UACXmM,KAAK,MACL3B,GAAG,UACHrK,MAAM,6BACNF,QAAQ,kBAERJ,EAAAC,cAAA,OAAA,KACED,EAAAC,cAAQ,QAAA,KAAA,2DAEVD,EAAAC,cAAA,OAAA,CACEgB,UAAU,QACVV,EAAE,qOAEJP,EAAAC,cAAA,OAAA,CAAMgB,UAAU,QAAQ2W,EAAE,UAAUC,EAAE,SAAS3X,MAAM,QAAQC,OAAO,QAAQ6sC,GAAG,MAAMC,GAAG,QACxFjtC,EAAAC,cAAA,OAAA,CACEgB,UAAU,QACVV,EAAE,yJAEJP,EAAAC,cAAA,OAAA,CACEgB,UAAU,QACVV,EAAE,qOAEJP,EAAAC,cAAA,OAAA,CACEgB,UAAU,QACVV,EAAE,k0BAEJP,EAAAC,cAAA,OAAA,CACEgB,UAAU,QACVV,EAAE,sqBAEJP,EAAAC,cAAA,OAAA,CACEgB,UAAU,QACVV,EAAE,uqBAEJP,EAAAC,cAAA,OAAA,CACEgB,UAAU,QACVV,EAAE,82BAEJP,EAAAC,cAAA,OAAA,CACEgB,UAAU,QACVV,EAAE,4zBAKZ,CCzCA,SAAS2sC,GAAY5qC,GACnB,OACEtC,EAAAC,cAAA,MAAA,CAAKC,MAAM,KAAKC,OAAO,KAAK,aAAYmC,EAAM6qC,UAAW/sC,QAAQ,YAAYkM,KAAK,OAChFtM,EAAAC,cAAA,IAAA,CAAGI,KAAK,OAAOgB,OAAO,eAAeE,cAAc,QAAQC,eAAe,QAAQF,YAAY,OAC3FgB,EAAM2B,UAIf,CAEO,SAASmpC,GAAMzsC,GAAyE,IAAAyB,EAAAzB,EAAtE0B,aAAAA,OAAYvB,IAAAsB,EAAG,CAAA,EAAEA,EAAAirC,EAAA1sC,EAAE2sC,cAAAA,OAAgBxsC,IAAHusC,GAAQA,EAC/DE,EAWIlrC,EAVFmrC,WAAAA,OAAa1sC,IAAHysC,EAAG,SAAQA,EAAAE,EAUnBprC,EATFqrC,mBAAAA,OAAqB5sC,IAAH2sC,EAAG,YAAWA,EAAAE,EAS9BtrC,EARFurC,mBAAAA,OAAqB9sC,IAAH6sC,EAAG,kBAAiBA,EAAAE,EAQpCxrC,EAPFyrC,aAAAA,OAAehtC,IAAH+sC,EAAG,WAAUA,EAAAE,EAOvB1rC,EANF2rC,uBAAAA,OAAyBltC,IAAHitC,EAAG,WAAUA,EAAAE,EAMjC5rC,EALF6rC,yBAAAA,OAA2BptC,IAAHmtC,EAAG,aAAYA,EAAAE,EAKrC9rC,EAJF+rC,UAAAA,OAAYttC,IAAHqtC,EAAG,QAAOA,EAAAE,EAIjBhsC,EAHFisC,iBAAAA,OAAmBxtC,IAAHutC,EAAG,iBAAgBA,EAAAE,EAGjClsC,EAFFmsC,kBAAAA,OAAoB1tC,IAAHytC,EAAG,aAAYA,EAAA5B,EAE9BtqC,EADFuqC,cAAAA,OAAgB9rC,IAAH6rC,EAAG,aAAYA,EAG9B,OACE3sC,EAAAC,cAAAD,EAAA6D,SAAA,KACE7D,EAAAC,cAAA,MAAA,CAAKgB,UAAU,kBACbjB,EAAAC,cAACysC,GAAW,CAACrqC,aAAc,CAAEuqC,cAAAA,MAE/B5sC,EAAAC,cAAA,KAAA,CAAIgB,UAAU,sBACZjB,EAAAC,cACED,KAAAA,KAAAA,EAAAC,cAAA,MAAA,CAAKgB,UAAU,0BACbjB,EAAAC,cAACitC,GAAW,CAACC,UAAWe,GACtBluC,EAAAC,cAAA,OAAA,CAAMM,EAAE,aACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,qBAGZP,EAAAC,cAAA,MAAA,CAAKgB,UAAU,0BACbjB,EAAAC,cAACitC,GAAW,CAACC,UAAWa,GACtBhuC,EAAAC,cAAA,OAAA,CAAMM,EAAE,kBACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,eAGZP,EAAAC,cAAA,OAAA,CAAMgB,UAAU,mBAAmB6sC,IAErC9tC,EAAAC,cAAA,KAAA,KACED,EAAAC,cAAA,MAAA,CAAKgB,UAAU,0BACbjB,EAAAC,cAACitC,GAAW,CAACC,UAAWO,GACtB1tC,EAAAC,cAAA,WAAA,CAAUwuC,OAAO,mBACjBzuC,EAAAC,cAAA,OAAA,CAAMM,EAAE,8BAGZP,EAAAC,cAAA,OAAA,CAAMgB,UAAU,mBAAmBqsC,EAAgBM,EAAqBJ,IAE1ExtC,EAAAC,cACED,KAAAA,KAAAA,EAAAC,cAAA,MAAA,CAAKgB,UAAU,0BACbjB,EAAAC,cAAA,OAAA,CAAMgB,UAAU,wBAAuB,QAEzCjB,EAAAC,cAAA,OAAA,CAAMgB,UAAU,kBAAkB,aAAYutC,GAC3ClB,EAAgBgB,EAAmBF,KAMhD,CCnFO,SAASM,GAAG/tC,GAA2C,IAAxCg2B,EAAGh2B,EAAHg2B,IAAK1yB,EAAQtD,EAARsD,SACzB,OAAOjE,EAAAC,cAAA,IAAA,CAAG4sC,KAAMlW,EAAIxf,KAAMlT,EAC5B,CCTO,SAAS0qC,GAAWhuC,GAAqD,IAAlDM,EAASN,EAATM,UAC5B,OACEjB,EAAAC,cAAA,MAAA,CAAKG,QAAQ,YAAYa,UAAWA,EAAWI,OAAO,eAAeutC,cAAc,MACjF5uC,EAAAC,cAAA,IAAA,CAAGI,KAAK,OAAOwuC,SAAS,WACtB7uC,EAAAC,cAAA,IAAA,CAAGqiC,UAAU,iBAAiBhhC,YAAY,KACxCtB,EAAAC,cAAA,SAAA,CAAQ2uC,cAAc,KAAK1tC,GAAG,KAAKC,GAAG,KAAKC,EAAE,OAC7CpB,EAAAC,cAAA,OAAA,CAAMM,EAAE,+BACNP,EAAAC,cAAA,mBAAA,CACE6uC,cAAc,YACdlrC,KAAK,SACL2S,KAAK,UACLw4B,GAAG,YACHC,IAAI,KACJC,YAAY,kBAO1B,CCpBO,SAASC,KACd,OACElvC,EAAAC,cAAA,MAAA,CACEC,MAAM,KACNC,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLgB,OAAO,eACPC,YAAY,MACZC,cAAc,QACdC,eAAe,QACfP,UAAU,+BAEVjB,EAAAC,cAAA,OAAA,CAAMM,EAAE,gQACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,YACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,aACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,YACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,YAGd,CCpBO,SAAS4uC,KACd,OACEnvC,EAAAC,cAAA,MAAA,CAAKC,MAAM,KAAKC,OAAO,KAAKC,QAAQ,aAClCJ,EAAAC,cAAA,IAAA,CAAGoB,OAAO,eAAehB,KAAK,OAAOwuC,SAAS,UAAUttC,cAAc,QAAQC,eAAe,SAC3FxB,EAAAC,cAAA,OAAA,CAAMM,EAAE,gEACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,uDAIhB,CCTO,SAAS6uC,KACd,OACEpvC,EAAAC,cAAA,MAAA,CAAKC,MAAM,KAAKC,OAAO,KAAKC,QAAQ,aAClCJ,EAAAC,cAAA,OAAA,CACEM,EAAE,gFACFc,OAAO,eACPhB,KAAK,OACLwuC,SAAS,UACTttC,cAAc,QACdC,eAAe,UAIvB,CCbO,SAAS6tC,KACd,OACErvC,EAAAC,cAAA,MAAA,CACEC,MAAM,KACNC,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLwuC,SAAS,UACTxtC,OAAO,eACPE,cAAc,QACdC,eAAe,QACfF,YAAY,IACZL,UAAU,2DAEVjB,EAAAC,cAAA,OAAA,CAAMM,EAAE,6EACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,YACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,eAGd,CCnBO,SAAS+uC,KACd,OACEtvC,EAAAC,cAAA,MAAA,CAAKgB,UAAU,4BAA4Bf,MAAM,KAAKC,OAAO,KAAKC,QAAQ,aACxEJ,EAAAC,cAAA,IAAA,CAAGoB,OAAO,eAAehB,KAAK,OAAOwuC,SAAS,UAAUttC,cAAc,QAAQC,eAAe,SAC3FxB,EAAAC,cAAA,OAAA,CAAMM,EAAE,0BACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,oBAIhB,CCTA,IAAMgvC,GAAoB,WACxB,OACEvvC,EAAAC,cAAA,MAAA,CACEK,MAAM,6BACNJ,MAAM,KACNC,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLgB,OAAO,eACPC,YAAY,MACZC,cAAc,QACdC,eAAe,SAEfxB,EAAAC,cAAA,OAAA,CAAMM,EAAE,+DACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,4BACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,YACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,aACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,aAGd,EAEO,SAASivC,GAAWltC,GACzB,OAAQA,EAAMsB,MACZ,IAAK,OACH,OAAO5D,EAAAC,cAACsvC,SACV,IAAK,UACH,OAAOvvC,EAAAC,cAACwvC,SACV,QACE,OAAOzvC,EAAAC,cAACyvC,SAEd,CAEA,SAASA,KACP,OACE1vC,EAAAC,cAAA,MAAA,CACEK,MAAM,6BACNJ,MAAM,KACNC,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLgB,OAAO,eACPE,cAAc,QACdC,eAAe,SAEfxB,EAAAC,cAAA,OAAA,CAAM0vC,GAAG,IAAIC,GAAG,KAAKC,GAAG,IAAIC,GAAG,MAC/B9vC,EAAAC,cAAA,OAAA,CAAM0vC,GAAG,IAAIC,GAAG,KAAKC,GAAG,KAAKC,GAAG,OAChC9vC,EAAAC,cAAA,OAAA,CAAM0vC,GAAG,KAAKC,GAAG,IAAIC,GAAG,IAAIC,GAAG,OAC/B9vC,EAAAC,cAAA,OAAA,CAAM0vC,GAAG,KAAKC,GAAG,KAAKC,GAAG,IAAIC,GAAG,OAGtC,CAEA,SAASL,KACP,OACEzvC,EAAAC,cAAA,MAAA,CAAKC,MAAM,KAAKC,OAAO,KAAKC,QAAQ,aAClCJ,EAAAC,cAAA,OAAA,CACEM,EAAE,kCACFc,OAAO,eACPhB,KAAK,OACLwuC,SAAS,UACTrtC,eAAe,UAIvB,CCjEO,SAASuuC,KACd,OACE/vC,EAAAC,cAAA,MAAA,CAAKC,MAAM,KAAKC,OAAO,KAAKC,QAAQ,aAClCJ,EAAAC,cAAA,OAAA,CACEM,EAAE,+DACFc,OAAO,eACPhB,KAAK,OACLwuC,SAAS,UACTrtC,eAAe,UAIvB,CCZO,SAASwuC,KACd,OACEhwC,EAAAC,cAAA,MAAA,CACEC,MAAM,KACNC,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLwuC,SAAS,UACTxtC,OAAO,eACPE,cAAc,QACdC,eAAe,SAEfxB,EAAAC,cAAA,OAAA,CAAMM,EAAE,2KAGd,CCfO,SAAS0vC,KACd,OACEjwC,EAAAC,cAAA,MAAA,CACEK,MAAM,6BACNJ,MAAM,KACNC,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLgB,OAAO,UACPC,YAAY,MACZC,cAAc,QACdC,eAAe,SAEfxB,EAAAC,cAAA,OAAA,CAAMM,EAAE,kBACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,iBACRP,EAAAC,cAAA,SAAA,CAAQiB,GAAG,KAAKC,GAAG,KAAKC,EAAE,MAC1BpB,EAAAC,cAAA,OAAA,CAAMM,EAAE,mBAGd,CCDA,OAAM2vC,GAA0D,CAC9DC,OAAQ,gBACR1lC,UAAW,KACX2lC,cAAe,QACfC,MAAO,IAGF,SAASC,GAAqB3vC,GAIc,IAHjD+gC,EAAO/gC,EAAP+gC,QACAr/B,EAAY1B,EAAZ0B,aACAkuC,EAAkB5vC,EAAlB4vC,mBAGA,GAAuB,IAAnB7O,EAAQj5B,OAAc,OAAO,KAGjC,GAAmD,mBAAxCpG,EAAamuC,uBACtB,OAAOxwC,EAAAC,cAAAD,EAAA6D,SAAA,KAAGxB,EAAamuC,uBAAuB9O,EAAS6O,IAIzD,IAIA7c,GAJcrxB,EAAaouC,uBACvBpuC,EAAaouC,uBAAuB/O,GACpCwO,KAEoF,CAAE,EAAAQ,EAAAhd,EAAlFyc,OAAAA,OAASrvC,IAAH4vC,EAAG,GAAEA,EAAAC,EAAAjd,EAAEjpB,UAAAA,OAAY3J,IAAH6vC,EAAG,KAAIA,EAAAC,EAAAld,EAAE0c,cAAAA,OAAgBtvC,IAAH8vC,EAAG,QAAOA,EAAAC,EAAAnd,EAAE2c,MAAAA,OAAQvvC,IAAH+vC,EAAG,GAAEA,EAE1E,OACE7wC,EAAAC,cAAA,MAAA,CAAKgB,UAAU,oEACbjB,EAAAC,cAACS,EAAU,CAACG,KAAM,KAClBb,EAAAC,cACGkwC,OAAAA,KAAAA,GAAUnwC,EAAAC,0BAAOkwC,GACjBzO,EAAQ5zB,KAAI,SAACgjC,EAAGC,GAAG,OAElB/wC,EAAAC,cAAC4D,WAAQ,CAACb,IAAK8tC,EAAIC,GACjB/wC,EAAAC,cAAA,OAAA,CACEqM,KAAK,SACL0kC,SAAU,EACV/vC,UAAU,kDACVumC,UAAW,SAAC9iC,GACI,UAAVA,EAAE1B,KAA6B,MAAV0B,EAAE1B,MACzB0B,EAAEspB,iBACFuiB,EAAmBO,GAErB,EACFxI,QAAS,WAAF,OAAQiI,EAAmBO,EAAE,GACrC,IACQA,EAAE,KAEVC,EAAMrP,EAAQj5B,OAAS,GAAKgC,EAC5BsmC,IAAQrP,EAAQj5B,OAAS,GAAK2nC,MAGlCC,GAASrwC,EAAAC,cAAOowC,OAAAA,KAAAA,IAIzB,CCxEO,SAASY,KACd,MAAO,CACLjhC,OAAO,EACPkhC,QAAQ,EACRC,WAAY,KACZC,KAAK,EACLC,MAAO,KACPC,UAAU,EACVC,SAAU,KACVC,QAAQ,EACRC,UAAW,KACXC,WAAY,KAEhB,CAEO,IAAIC,GAdF,CACL3hC,OAAO,EACPkhC,QAAQ,EACRC,WAAY,KACZC,KAAK,EACLC,MAAO,KACPC,UAAU,EACVC,SAAU,KACVC,QAAQ,EACRC,UAAW,KACXC,WAAY,MAMT,SAASE,GAAeC,GAC7BF,GAAYE,CACd,2ysEAlBS,CACL7hC,OAAO,EACPkhC,QAAQ,EACRC,WAAY,KACZC,KAAK,EACLC,MAAO,KACPC,UAAU,EACVC,SAAU,KACVC,QAAQ,EACRC,UAAW,KACXC,WAAY,qmLCZhB,SAASI,GAAWC,GAClB,OAAOA,EACJrU,QAAQ,KAAM,SACdA,QAAQ,KAAM,QACdA,QAAQ,KAAM,QACdA,QAAQ,KAAM,UACdA,QAAQ,KAAM,QACnB,mhBAEA,IAAM6T,GAAW,IAAIS,GAAOC,SAE5BV,GAASplC,KAAO,SAAAxL,GAAuD,IAApDkG,EAAIlG,EAAJkG,KAAIqrC,EAAAvxC,EAAEwxC,KAAAA,OAAOrxC,IAAHoxC,EAAG,GAAEA,EAAEE,EAAOzxC,EAAPyxC,QAC5BC,EAAgBF,EAAI,YAAAzuC,OAAeyuC,GAAS,GAC5CG,EAAWF,EAAUvrC,EAAOirC,GAAWjrC,GACvC0rC,EAAcC,mBAAmB3rC,GAOvC,MAAA,gHAAAnD,OAEkE6uC,+BAAW7uC,OAN0S,qWAMnQA,OAJoK,uWAIrJA,OAC3G2uC,EAAa3uC,MAAAA,OAAK4uC,EAAQ,gCAGpD,EAGAf,GAASkB,KAAO,SAAA/e,GAAgD,IAA7CmZ,EAAInZ,EAAJmZ,KAAM6F,EAAKhf,EAALgf,MAAO7rC,EAAI6sB,EAAJ7sB,KACxB8rC,EAAYD,EAAKhvC,WAAAA,OAAcouC,GAAWY,GAAM,KAAM,GACtDE,EAAW/F,EAAOiF,GAAWjF,GAAQ,GACrCgG,EAAcf,GAAWjrC,GAC/B,MAAAnD,YAAAA,OAAmBkvC,EAAQlvC,KAAAA,OAAIivC,EAAS,+CAAAjvC,OAA8CmvC,EAAW,OACnG,EAEO,IAAMC,GAAmBC,EAAAA,MAC9B,SAAA1vC,GAUM,IATJoJ,EAAOpJ,EAAPoJ,QACAumC,EAAc3vC,EAAd2vC,eACAC,EAAoB5vC,EAApB4vC,qBACAC,EAAW7vC,EAAX6vC,YAOMnB,EAAOztB,EAAAA,SACX,WAAA,OACE0tB,GAAO7pC,MAAMsE,EAAS,CACpB2kC,KAAK,EACLF,QAAQ,EACRK,SAAAA,OAEJ,CAAC9kC,IAIG0mC,EAAe/vB,EAAMA,OAAiB,MAgD5C,OA7CAzhB,EAAAA,WAAU,WACR,IAAMkgC,EAAYsR,EAAazvB,QAC/B,GAAKme,EAsCL,OApCgBt1B,MAAMgK,KAAKsrB,EAAUuR,iBAAoC,sCAEjE5gB,SAAQ,SAAC6gB,GACf,IAAM1Q,EAAQ0Q,EAAI1I,cAA2B,2CACzChI,IAAOA,EAAM2Q,YAAcN,GAG/BK,EAAIE,UAAUC,OAAO,2CACvB,IAyBA3R,EAAUv9B,iBAAiB,QAASmvC,GAG7B,WACL5R,EAAUp9B,oBAAoB,QAASgvC,EACxC,EA5BD,SAASA,EAAY3lB,GAAyB,IAAA4lB,EAEtCL,EADWvlB,EAAM/W,OACF48B,QAA2B,qCAChD,GAAKN,EAAL,CAEA,IAAMO,EAAuCF,QAAhCA,EAAGL,EAAIQ,aAAa,oBAAYH,IAAAA,EAAAA,EAAI,GACjDxwC,UAAU4wC,UAAUC,UAAUC,mBAAmBJ,IAAUv1B,OAAM,WAC/D,IAGF,IAAMskB,EAAQ0Q,EAAI1I,cAA2B,2CAC7C,GAAKhI,EAAL,CAEA0Q,EAAIE,UAAUzY,IAAI,4CAClB,IAAMmZ,EAAWjB,EACjBrQ,EAAM2Q,YAAcL,EAEpB33B,YAAW,WACT+3B,EAAIE,UAAUC,OAAO,4CACrB7Q,EAAM2Q,YAAcW,CACrB,GAAE,KATS,CARF,CAkBZ,CAQD,GAAE,CAAClC,EAAMiB,EAAgBC,IAGxBjzC,EAAAC,cAAA,MAAA,CACEkC,IAAKgxC,EACLlyC,UAAS,8BAAAyC,OAAgCwvC,EAAc,wCAA0C,IACjGgB,wBAAyB,CAAEC,OAAQpC,IAGzC,IAEFe,GAAiBsB,YAAc,2CCxD/B,SAASC,GAAiB1zC,GAA0D,IAAvD2zC,EAAc3zC,EAAd2zC,eAC3B,OAAOt0C,EAAAC,cAAA,IAAA,CAAGgB,UAAU,oCAAoCqzC,EAC1D,CAaA,SAASC,GAAiB7gB,GASc,IARtC8gB,EAAQ9gB,EAAR8gB,SACAC,EAAgB/gB,EAAhB+gB,iBACAC,EAAchhB,EAAdghB,eACAC,EAAajhB,EAAbihB,cACApE,EAAkB7c,EAAlB6c,mBACAluC,EAAYqxB,EAAZrxB,aACAuyC,EAAalhB,EAAbkhB,cACAC,EAAUnhB,EAAVmhB,WAEQC,EAAkCN,EAAlCM,YAAaC,EAAqBP,EAArBO,iBAEfC,GAAeN,GAAmBA,GAAoC,UAAlBC,GAA6BnX,QAAQuX,GAEzFE,EAAgBj1C,EAAMskB,SAAQ,WAAA,OCzF/B,SAA8Bzd,GASnC,IAPA,IAMIigC,EANEoO,EAAoB,wCACpBC,EAAW,sBACXC,EAAgD,GAChDC,EAAO,IAAIppC,IAIiC,QAA1C66B,EAAQoO,EAAkBI,KAAKzuC,KAAiB,CACtD,IAAIsQ,EAAM2vB,EAAM,GACV4L,EAAQ5L,EAAM,GAEpB3vB,EAAMA,EAAIumB,QAAQ,aAAc,IAC3B2X,EAAK18B,IAAIxB,KACZi+B,EAAMzrC,KAAK,CAAEwN,IAAAA,EAAKu7B,MAAAA,IAClB2C,EAAKva,IAAI3jB,GAEb,CAGA,KAAyC,QAAjC2vB,EAAQqO,EAASG,KAAKzuC,KAAiB,CAC7C,IAAIsQ,EAAM2vB,EAAM,GAChB3vB,EAAMA,EAAIumB,QAAQ,aAAc,IAC3B2X,EAAK18B,IAAIxB,KACZi+B,EAAMzrC,KAAK,CAAEwN,IAAAA,IACbk+B,EAAKva,IAAI3jB,GAEb,CAEA,OAAOi+B,CACT,CD0D4CG,EAAqBR,aAAAA,EAAAA,EAAkBtoC,UAAW,MAAK,CAACsoC,IAE5FS,EAAex1C,EAAMskB,SAAQ,WACjC,OAAK/X,MAAMC,QAAQuoC,aAAAA,EAAAA,EAAkB1jC,OExFlC,SAAiEA,GAGtE,IAFA,IAAMokC,EAAqD,GAElD7qC,EAAI,EAAGA,EAAIyG,EAAM5I,OAAQmC,IAAK,CAAA,IAAA8qC,EAAAC,EAC/B5nC,EAAYsD,EAAMzG,GAExB,GACiB,qBAAfmD,aAAAA,EAAAA,EAAMnK,OAC4B,yBAAlC8xC,EAAA3nC,EAAKkD,sBAAcnQ,IAAA40C,OAAA50C,EAAnB40C,EAAqBxnC,WACU,YAAZ,QAAnBynC,EAAA5nC,EAAKkD,sBAAL0kC,IAAmBA,OAAnBA,EAAAA,EAAqBxhC,OACrB,CAIA,IAFA,IAAMutB,EAAoB,GACtBkU,EAAIhrC,EACDgrC,EAAIvkC,EAAM5I,QAAQ,CAAA,IAAAotC,EAAAC,EACjBC,EAAiB1kC,EAAMukC,GAC7B,GACsB,qBAApBG,aAAAA,EAAAA,EAAWnyC,OAC4B,yBAAvCiyC,EAAAE,EAAU9kC,sBAAcnQ,IAAA+0C,OAAA/0C,EAAxB+0C,EAA0B3nC,WACU,YAAZ,QAAxB4nC,EAAAC,EAAU9kC,sBAAV6kC,IAAwBA,OAAxBA,EAAAA,EAA0B3hC,OAS1B,MARA,IAAA6hC,EACMlF,IAA6B,QAAxBkF,EAAAD,EAAU9kC,sBAAcnQ,IAAAk1C,GAAM,QAANA,EAAxBA,EAA0B7nC,YAAIrN,IAAAk1C,OAAAl1C,EAA9Bk1C,EAAgC9W,QAAS,IAAI+W,OAEpDnF,GACFpP,EAAQ/3B,KAAKmnC,GAEf8E,GAIJ,CAEIlU,EAAQj5B,OAAS,EACnBgtC,EAAgB9rC,KAAK,CAAE/F,KAAM,uBAAwB89B,QAAAA,IACzB,IAAnBA,EAAQj5B,QAEjBgtC,EAAgB9rC,KAAKoE,GAGvBnD,EAAIgrC,EAAI,CACV,MACEH,EAAgB9rC,KAAKoE,EAEzB,CAEA,OAAO0nC,CACT,CF6CWS,EAA4BnB,aAAAA,EAAAA,EAAkB1jC,QAAS,IAFrD0jC,SAAAA,EAAkBtoC,QAAU,CAACsoC,aAAAA,EAAAA,EAAkBtoC,SAAW,EAGrE,GAAG,CAACsoC,IAEJ,OACE/0C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,4CACbjB,EAAAC,cAAA,MAAA,CAAKgB,UAAU,kCACbjB,EAAAC,cAAA,MAAA,CAAKgB,UAAU,qEACbjB,EAAAC,cAAA,IAAA,CAAGgB,UAAU,+BAA+B6zC,EAAYroC,UAE1DzM,EAAAC,cAAA,MAAA,CAAKgB,UAAU,0EACbjB,EAAAC,cAAA,MAAA,CAAKgB,UAAU,wCACM,UAAlB0zC,GAA6BF,GAAoBC,GAChD10C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,oEACbjB,EAAAC,cAACovC,GAAW,MACZrvC,EAAAC,cAAIw0C,IAAAA,KAAAA,EAAiBpvC,UAGN,cAAlBsvC,GAAiCD,GAChC10C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,kDACbjB,EAAAC,cAAA,OAAA,CAAMgB,UAAU,WAAWoB,EAAa8zC,cAAgB,gBAG3D5pC,MAAMC,QAAQgpC,GACXA,EAAa1nC,KAAI,SAACC,EAAMgjC,GAAQ,IAAAqF,EAAAC,EAAAC,EACxBpiC,EAAQ68B,EAEd,GAAoB,iBAAThjC,EACT,OACE/N,EAAAC,cAAC6yC,GAAgB,CACf9vC,IAAKkR,EACLzH,QAASsB,EACTilC,eAAgB3wC,EAAa2wC,gBAAkB,OAC/CC,qBAAsB5wC,EAAa4wC,sBAAwB,UAC3DC,YAA+B,cAAlByB,IAMnB,GAAI5mC,GAA+B,yBAAtBA,EAAanK,KACxB,OACE5D,EAAAC,cAACqwC,GAAqB,CACpBttC,IAAKkR,EACLwtB,QAAU3zB,EAAa2zB,QACvBr/B,aAAcA,EACdkuC,mBAAoBA,IAK1B,GAAkB,cAAdxiC,EAAKnK,MAA4D,KAApCmxC,SAAuB,QAAPqB,EAAhBrB,EAAkB1jC,aAAKvQ,IAAAs1C,OAAAt1C,EAAvBs1C,EAAyB3tC,QACxD,OACEzI,EAAAC,cAAA,MAAA,CAAK+C,IAAKkR,EAAOjT,UAAU,0DACzBjB,EAAAC,cAAA,OAAA,CAAMgB,UAAU,WAAU,iBAKhC,GAAkB,SAAd8M,EAAKnK,KACP,OACE5D,EAAAC,cAAC6yC,GAAgB,CACf9vC,IAAKkR,EACLzH,QAASsB,EAAKlH,KACdmsC,eAAgB3wC,EAAa2wC,gBAAkB,OAC/CC,qBAAsB5wC,EAAa4wC,sBAAwB,UAC3DC,YAA+B,cAAlByB,IAInB,GAAkB,oBAAd5mC,EAAKnK,KAA4B,CACnC,IAAQqN,EAAmBlD,EAAnBkD,eACR,GAAgC,gBAA5BA,EAAe/C,SACjB,OAAQ+C,EAAekD,OACrB,IAAK,eACH,OACEnU,EAAAC,cAAA,MAAA,CACE+C,IAAKkR,EACLjT,UAAU,uEAEVjB,EAAAC,cAAC0uC,GAAW,CAAC1tC,UAAU,6CACvBjB,EAAAC,cAAA,OAAA,KAAOoC,EAAak0C,iBAAmB,iBAG7C,IAAK,OACH,OACEv2C,EAAAC,cAAA,MAAA,CAAK+C,IAAKkR,EAAOjT,UAAU,gEACzBjB,EAAAC,cAAC0uC,GAAW,CAAC1tC,UAAU,6CACvBjB,EAAAC,cAAAyD,OAAAA,KAAAA,GAAAA,OACMrB,EAAam0C,oBAAsB,uBAAgB9yC,gBAAK2yC,EAAAplC,EAAe9C,YAAIrN,IAAAu1C,OAAAv1C,EAAnBu1C,EAAqBnX,QAAS,GAAE,WAIpG,IAAK,SACH,OACEl/B,EAAAC,cAAA,MAAA,CAAK+C,IAAKkR,EAAOjT,UAAU,0DACzBjB,EAAAC,cAACS,EAAU,CAACG,KAAM,KAClBb,EAAAC,cAAA,OAAA,KAAA,GAAAyD,OACMrB,EAAao0C,mBAAqB,gBAAkB,IACxDz2C,EAAAC,cAAA,OAAA,CACEqM,KAAK,SACL0kC,SAAU,EACV/vC,UAAU,kDACVumC,UAAW,SAAC9iC,GAC8B,IAAAgyC,EAA1B,UAAVhyC,EAAE1B,KAA6B,MAAV0B,EAAE1B,MACzB0B,EAAEspB,iBACFuiB,GAAsCmG,QAAnBA,EAAAzlC,EAAe9C,gBAAIuoC,SAAnBA,EAAqBxX,QAAS,IAEnD,EACFoJ,QAAS,WAAF,IAAAqO,EAAA,OAAQpG,GAAsCoG,QAAnBA,EAAA1lC,EAAe9C,gBAAIwoC,SAAnBA,EAAqBzX,QAAS,GAAG,GAElE,IAAI,KACqB,QAAnBoX,EAAArlC,EAAe9C,YAAfmoC,IAAmBA,OAAnBA,EAAAA,EAAqBpX,QAAS,GAAG,OAKlD,QACE,OAAO,KAIb,OACEl/B,EAAAC,cAAA,OAAA,CAAM+C,IAAKkR,EAAOjT,UAAU,0BACzBoB,EAAa8zC,cAAgB,cAGpC,CAEA,OAAO,IACR,IACDpB,aAAAA,EAAAA,EAAkBtoC,UAG1BzM,EAAAC,cAAA,MAAA,CAAKgB,UAAU,uCACbjB,EAAAC,cAAC22C,GAAwB,CACvBjsC,IAAImqC,aAAWh0C,EAAXg0C,EAAanqC,KAAM6pC,EAAS7pC,GAChCqqC,YAAaA,EACb6B,+BAA+B9B,eAAAA,EAAkBtoC,UAAW,KAC5DpK,aAAcA,EACduyC,cAAeA,EACfC,WAAYA,MAMjBI,EAAcxsC,OAAS,EACtBzI,EAAAC,cAAC62C,GAAiB,CAAC7B,cAAeA,EAAe8B,mBAAoB10C,EAAa00C,qBAChF,KAGV,CAWA,SAASH,GAAwBvzC,GAOqB,IANpDsH,EAAEtH,EAAFsH,GACAqqC,EAAW3xC,EAAX2xC,YACA6B,EAA6BxzC,EAA7BwzC,8BACAx0C,EAAYgB,EAAZhB,aACAuyC,EAAavxC,EAAbuxC,cACAC,EAAUxxC,EAAVwxC,WAGMmC,EAAkBh3C,EAAMskB,SAAQ,WAAM,IAAA2yB,EAAAC,EACpC7xC,EAA8B,QAAvB4xC,EAAGrC,EAAcuC,cAAMr2C,IAAAm2C,OAAAn2C,EAApBm2C,EAAAztC,KAAAorC,EAAuBjqC,GACvC,OAAwBusC,QAAxBA,EAAO7xC,aAAAA,EAAAA,EAAS+xC,gBAAQF,IAAAA,EAAAA,EAAI,IAC9B,GAAG,CAACtC,EAAejqC,IAEuE0sC,EAAAv0C,EAA1D9C,EAAM+C,SAAoCi0C,GAAgB,GAAnFI,EAAQC,EAAA,GAAEC,EAAWD,EAAA,GACqBE,EAAAz0C,EAArB9C,EAAM+C,UAAS,GAAM,GAA1Cy0C,EAAMD,EAAA,GAAEE,EAASF,EAAA,GACgDG,EAAA50C,EAAlC9C,EAAM+C,SAAuB,MAAK,GAAjE40C,EAAWD,EAAA,GAAEE,EAAcF,EAAA,GAE5BG,EAAc,WAAA,IAAA7zC,EAAAwnC,EAAAC,IAAAC,MAAG,SAAAC,EAAOvkC,GAAyB,OAAAqkC,IAAApkC,MAAA,SAAAwkC,GAAA,cAAAA,EAAA1xB,KAAA0xB,EAAAjjC,MAAA,KAAA,EAAA,IACjD4uC,EAAM,CAAA3L,EAAAjjC,KAAA,EAAA,KAAA,CAAA,OAAAijC,EAAAG,OAAA,UAAA,KAAA,EAEM,OADhB4L,EAAe,MACfH,GAAU,GAAM5L,EAAA1xB,KAAA,EAAA0xB,EAAAjjC,KAAA,EAERisC,aAAU/zC,EAAV+zC,EAAalqC,EAAc,SAAVvD,EAAmB,EAAI,GAAE,KAAA,EAChDkwC,EAAYlwC,GAAOykC,EAAAjjC,KAAA,GAAA,MAAA,KAAA,GAAAijC,EAAA1xB,KAAA,GAAA0xB,EAAAiM,GAAAjM,EAAA,MAAA,GAEnB+L,EAAc/L,EAAAiM,IAAiB,KAAA,GAEd,OAFcjM,EAAA1xB,KAAA,GAE/Bs9B,GAAU,GAAO5L,EAAAkM,OAAA,IAAA,KAAA,GAAA,IAAA,MAAA,OAAAlM,EAAAve,OAAA,GAAAqe,EAAA,KAAA,CAAA,CAAA,EAAA,GAAA,GAAA,UAEpB,OAZKkM,SAActnB,GAAA,OAAAvsB,EAAA2kB,MAAAnjB,KAAAgD,UAAA,EAAA,GAcpBwvC,EAII31C,EAHF41C,gBAAAA,OAAkBn3C,IAAHk3C,EAAG,OAAMA,EAAAE,EAGtB71C,EAFF81C,mBAAAA,OAAqBr3C,IAAHo3C,EAAG,UAASA,EAAAE,EAE5B/1C,EADFg2C,sBAAAA,OAAwBv3C,IAAHs3C,EAAG,4BAA2BA,EAGrD,OAAKpD,GAAgB6B,EAKnB72C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,iCACC,OAAbm2C,EACCp3C,EAAAC,cAAAD,EAAA6D,cACG2zC,EACCx3C,EAAAC,cAAC0uC,GAAW,CAAC1tC,UAAU,6CAEvBjB,EAAAC,cAAAD,EAAA6D,SACE7D,KAAAA,EAAAC,cAACq4C,GAAU,CAAC5F,MAAOuF,EAAiB3P,QAAS,WAAF,OAAQuP,EAAe,OAAO,IACzE73C,EAAAC,cAACs4C,GAAa,CAAC7F,MAAOyF,EAAoB7P,QAAS,WAAF,OAAQuP,EAAe,UAAU,KAGrFF,GACC33C,EAAAC,cAAA,IAAA,CAAGgB,UAAU,sCAAsC02C,EAAYtyC,SAAW,qBAI9ErF,EAAAC,cAAA,IAAA,CAAGgB,UAAU,kFACVo3C,GAGLr4C,EAAAC,cAACu4C,GAAU,CACTn2C,aAAcA,EACdimC,QAAS,WAAF,OAAQplC,UAAU4wC,UAAUC,UAAU8C,EAA8B,KA1BxE,IA8BX,CAOA,SAASC,GAAiB5gB,GAA6E,IAA1E+e,EAAa/e,EAAb+e,cAAe8B,EAAkB7gB,EAAlB6gB,mBAC1C,OACE/2C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,wCACbjB,EAAAC,cAAA,IAAA,CAAGgB,UAAU,8CAA8C81C,GAAsB,mBACjF/2C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,6CACZg0C,EAAcxsC,OAAS,GACtBwsC,EAAcnnC,KAAI,SAAC2kC,GAAI,OACrBzyC,EAAAC,cAAA,IAAA,CACE+C,IAAKyvC,EAAKt7B,IACV01B,KAAM4F,EAAKt7B,IACXlW,UAAU,iDACV8V,OAAO,SACPg2B,IAAI,uBAEJ/sC,EAAAC,cAACw4C,GAAmB,MACpBz4C,EAAAC,cAAOwyC,OAAAA,KAAAA,EAAKC,OAASD,EAAKt7B,KAE7B,KAIX,CAEO,SAASuhC,GAAWjf,GAAwE,IAAAkf,EAAAlf,EAArEp3B,aAAAA,OAAYvB,IAAA63C,EAAG,CAAA,EAAEA,EAAKr2C,EAAKC,EAAAk3B,EAAAj3B,IACvDo2C,EAAwGv2C,EAAhGiyC,eAAAA,OAAiBxzC,IAAH83C,EAAG,2EAA0EA,EAE3FnjC,EAAanT,EAAbmT,SAGFojC,EAAwBv0B,EAAAA,SAAQ,WAEpC,IADA,IAAMw0B,EAAsB,GACnBluC,EAAI,EAAGA,EAAI6K,EAAShN,OAAQmC,IACnC,GAAyB,SAArB6K,EAAS7K,GAAG0B,KAAiB,CAAA,IAAAysC,EACzBjE,EAAcr/B,EAAS7K,GACvBmqC,EAA6C,eAAXgE,QAAfA,EAAAtjC,EAAS7K,EAAI,UAAbmuC,IAAeA,OAAfA,EAAAA,EAAiBzsC,MAAuBmJ,EAAS7K,EAAI,GAAK,KACnFkuC,EAAQnvC,KAAK,CAAEgB,GAAImqC,EAAYnqC,GAAImqC,YAAAA,EAAaC,iBAAAA,IAC5CA,GACFnqC,GAEJ,CAEF,OAAOkuC,CACT,GAAG,CAACrjC,IAEEujC,EAAyB,SAAC9Z,GAC9B58B,EAAM22C,eAAc,GACpB32C,EAAMqhC,SAASzE,EAChB,EAED,OACEl/B,EAAAC,cAAA,MAAA,CAAKgB,UAAU,yDACbjB,EAAAC,cAACo0C,GAAiB,CAACC,eAAgBA,IACnCt0C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,8BACbjB,EAAAC,cAAA,MAAA,CAAKgB,UAAU,uCACZ43C,EACE5wC,QACAixC,UACAprC,KAAI,SAAC0mC,EAAUtgC,GAAK,OACnBlU,EAAAC,cAACs0C,GAAiB,CAChBvxC,IAAKwxC,EAAS7pC,GACd6pC,SAAUA,EACVC,iBAAkBnyC,EAAMmyC,iBACxBC,eAA0B,IAAVxgC,EAChBygC,cAAeryC,EAAM6f,OACrB9f,aAAcA,EACduyC,cAAetyC,EAAMsyC,cACrBrE,mBAAoByI,EACpBnE,WAAYvyC,EAAMuyC,YAErB,MAKb,CAEA,SAAS4D,KACP,OACEz4C,EAAAC,cAAA,MAAA,CACEK,MAAM,6BACNJ,MAAM,KACNC,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLgB,OAAO,eACPE,cAAc,QACdC,eAAe,SAEfxB,EAAAC,cAAA,OAAA,CAAM0vC,GAAG,IAAIC,GAAG,KAAKC,GAAG,IAAIC,GAAG,MAC/B9vC,EAAAC,cAAA,OAAA,CAAM0vC,GAAG,IAAIC,GAAG,KAAKC,GAAG,KAAKC,GAAG,OAChC9vC,EAAAC,cAAA,OAAA,CAAM0vC,GAAG,KAAKC,GAAG,IAAIC,GAAG,IAAIC,GAAG,OAC/B9vC,EAAAC,cAAA,OAAA,CAAM0vC,GAAG,KAAKC,GAAG,KAAKC,GAAG,IAAIC,GAAG,OAGtC,CAEA,SAAS0I,GAAU7e,GAMH,IALd2O,EAAO3O,EAAP2O,QACAjmC,EAAYs3B,EAAZt3B,aAKA82C,EAAuE92C,EAA/D+2C,gBAAAA,OAAkBt4C,IAAHq4C,EAAG,OAAMA,EAAAE,EAAuCh3C,EAArC4wC,qBAAAA,OAAuBnyC,IAAHu4C,EAAG,UAASA,EAEnBx2C,EAAAC,EAAfC,EAAQA,UAAC,GAAM,GAAxCu2C,EAAQz2C,EAAA,GAAE02C,EAAW12C,EAAA,GAE5BlB,EAAAA,WAAU,WACR,GAAI23C,EAAU,CACZ,IAAMpyB,EAAQ5L,YAAW,WACvBi+B,GAAY,EACb,GAAE,MACH,OAAO,WAAA,OAAYlyB,aAAaH,EAAM,CACxC,CAEF,GAAG,CAACoyB,IAOJ,OACEt5C,EAAAC,cAAA,SAAA,CACE2D,KAAK,SACL3C,UAAS,uEAAAyC,OACP41C,EAAW,2CAA6C,IAE1DE,SAAUF,EACV5G,MAAO4G,EAAWrG,EAAuBmG,EACzC9Q,QAbgB,WAClBA,IACAiR,GAAY,EACb,GAYID,EACCt5C,EAAAC,cAAA,MAAA,CACEK,MAAM,6BACNJ,MAAM,KACNC,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLgB,OAAO,eACPC,YAAY,MACZC,cAAc,QACdC,eAAe,QACfP,UAAU,yCAEVjB,EAAAC,cAAA,OAAA,CAAMM,EAAE,qBAGVP,EAAAC,cAAA,MAAA,CACEK,MAAM,6BACNJ,MAAM,KACNC,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLgB,OAAO,eACPC,YAAY,MACZC,cAAc,QACdC,eAAe,QACfP,UAAU,uCAEVjB,EAAAC,cAAA,OAAA,CAAMC,MAAM,KAAKC,OAAO,KAAKyX,EAAE,IAAIC,EAAE,IAAIm1B,GAAG,IAAIC,GAAG,MACnDjtC,EAAAC,cAAA,OAAA,CAAMM,EAAE,6DAKlB,CAEA,SAAS+3C,GAAUjhB,GAA0E,IAAvEqb,EAAKrb,EAALqb,MAAOpK,EAAOjR,EAAPiR,QAE3B,OACEtoC,EAAAC,cAAA,SAAA,CACE2D,KAAK,SACL3C,UAAU,sEACVyxC,MAAOA,EACPpK,QAASA,GAETtoC,EAAAC,cAAA,MAAA,CACEK,MAAM,6BACNJ,MAAM,KACNC,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLgB,OAAO,eACPC,YAAY,MACZC,cAAc,QACdC,eAAe,QACfP,UAAU,iDAEVjB,EAAAC,cAAA,OAAA,CAAMM,EAAE,aACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,8JAIhB,CAEA,SAASg4C,GAAa9gB,GAA0E,IAAvEib,EAAKjb,EAALib,MAAOpK,EAAO7Q,EAAP6Q,QAE9B,OACEtoC,EAAAC,cAAA,SAAA,CACE2D,KAAK,SACL3C,UAAU,yEACVyxC,MAAOA,EACPpK,QAASA,GAETtoC,EAAAC,cAAA,MAAA,CACEK,MAAM,6BACNJ,MAAM,KACNC,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLgB,OAAO,eACPC,YAAY,MACZC,cAAc,QACdC,eAAe,QACfP,UAAU,qDAEVjB,EAAAC,cAAA,OAAA,CAAMM,EAAE,aACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,6JAIhB,CGniBO,SAASk5C,GAAW94C,GAAuD,IAAAyB,EAAAzB,EAApD0B,aAAAA,OAAYvB,IAAAsB,EAAG,CAAA,EAAEA,EAC7Cs3C,EACEr3C,EADMs3C,UAAAA,OAAY74C,IAAH44C,EAAG,0BAAyBA,EAAAE,EAC3Cv3C,EAD6Cw3C,SAAAA,OAAW/4C,IAAH84C,EAAG,mDAAkDA,EAE5G,OACE55C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,yBACbjB,EAAAC,cAAA,MAAA,CAAKgB,UAAU,yBACbjB,EAAAC,cAAC+vC,GAAW,OAEdhwC,EAAAC,cAAA,IAAA,CAAGgB,UAAU,mBAAmB04C,GAChC35C,EAAAC,cAAA,IAAA,CAAGgB,UAAU,kBAAkB44C,GAGrC,yBCRO,SAASC,GAAen5C,GAAqE,IAAAyB,EAAAzB,EAAlE0B,aAAAA,OAAYvB,IAAAsB,EAAG,CAAA,EAAEA,EAAKE,EAAKC,EAAA5B,EAAA6B,IAC3Du3C,EAKI13C,EAJF23C,cAAAA,OAAgBl5C,IAAHi5C,EAAG,uBAAsBA,EAAAE,EAIpC53C,EAHF63C,mBAAAA,OAAqBp5C,IAAHm5C,EAAG,oBAAmBA,EAAAE,EAGtC93C,EAFF+3C,yBAAAA,OAA2Bt5C,IAAHq5C,EAAG,4CAA2CA,EAAAE,EAEpEh4C,EADFi4C,6BAAAA,OAA+Bx5C,IAAHu5C,EAAG,eAAcA,EAEzCE,EAA0Cj4C,EAAM6R,MAAMojB,QAAQgjB,kBAEpE,OACEv6C,EAAAC,cAAA,MAAA,CAAKgB,UAAS,uBAAAyC,OAAyBpB,EAAMk4C,eAAiB,iCAAmC,KAC/Fx6C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,yBACbjB,EAAAC,cAACgwC,GAAe,OAElBjwC,EAAAC,cAAA,IAAA,CAAGgB,UAAU,mBACV+4C,EAAc,KAAEh6C,EAAAC,cAASqC,SAAAA,KAAAA,EAAM6R,MAAM+qB,OAAe,KAGtDqb,GAAqBA,EAAkB9xC,OAAS,GAC/CzI,EAAAC,cAAA,MAAA,CAAKgB,UAAU,oCACbjB,EAAAC,cAAA,IAAA,CAAGgB,UAAU,kBAAkBi5C,EAAmB,KAClDl6C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,0CACZs5C,EAAkBtyC,MAAM,EAAG,GAAG8I,QAC7B,SAACglB,EAAK0kB,GAAM,MAAA/2C,GAAAA,OAAA2tB,EACP0E,GACH/1B,CAAAA,EAAAC,cAAA,IAAA,CAAG+C,IAAKy3C,GACNz6C,EAAAC,cAACS,EAAU,CAACG,KAAM,KAClBb,EAAAC,cAAA,SAAA,CACEgB,UAAU,oBACV+B,IAAKy3C,EACL72C,KAAK,SACL0kC,QAAS,WACPhmC,EAAMqhC,SAAS8W,EAAOC,cAAgB,KACtCp4C,EAAMkhC,UACNlhC,EAAMq4C,SAASj3B,QAASsd,OAC1B,GAECyZ,KAED,GAEN,MAMPn4C,EAAMs4C,sBACL56C,EAAAC,cAAA,IAAA,CAAGgB,UAAU,kBAAgB,GAAAyC,OACvB02C,EACJp6C,KAAAA,EAAAC,cAAA,IAAA,CAAG4sC,KAAMvqC,EAAMs4C,qBAAqB,CAAE1b,MAAO58B,EAAM6R,MAAM+qB,QAAUnoB,OAAO,SAASg2B,IAAI,uBACpFuN,IAMb,sCCtEA,SAASO,GAAkB5oB,EAA6B6oB,GAGtD,OAFcA,EAAKlnC,MAAM,KAEZ7C,QAAO,SAACoJ,EAAMuJ,GACzB,OAAIvJ,SAAAA,EAAOuJ,GAAiBvJ,EAAKuJ,GAC1B,IACR,GAAEuO,EACL,CASO,SAAS8oB,GAAOp6C,GAKc,IAJnCg2B,EAAGh2B,EAAHg2B,IACAqkB,EAASr6C,EAATq6C,UAASC,EAAAt6C,EACTu6C,QAAAA,OAAUp6C,IAAHm6C,EAAG,OAAMA,EACbnV,EAAIvjC,EAAA5B,EAAA6B,IAEP,OAAOvC,EAAAA,cAAci7C,EAAO3oB,EAAAA,KACvBuT,GAAI,GAAA,CACPoO,wBAAyB,CACvBC,OAAQ0G,GAAkBlkB,oBAAGjzB,OAAoBs3C,EAAS,YAAaH,GAAkBlkB,EAAKqkB,MAGpG,CCNO,SAASG,GAA0C74C,GACxD,OAAKA,EAAM2sB,YAAgD,IAAlC3sB,EAAM2sB,WAAWC,MAAMzmB,OAIP,UAArCnG,EAAM2sB,WAAWhb,OAAOspB,SAExBv9B,EAAAC,cAAA,UAAA,CAASgB,UAAU,2BACjBjB,EAAAC,mBAAQqC,EAAMmmC,aAAa,CAAEx0B,OAAQ3R,EAAM2sB,WAAWhb,SACpDjU,EAAAC,cAACm7C,GAAWz3C,EAAA,CAACgJ,KAAMrK,EAAM2sB,WAAWC,MAAM,GAAI7sB,aAAcC,EAAMD,cAAkBC,OAMxFA,EAAM2sB,WAAWhb,OAAOspB,SAExBv9B,EAAAC,cAAA,UAAA,CAASgB,UAAU,kBACjBjB,EAAAC,cAAA,MAAA,CAAKgB,UAAU,wBAAwBqB,EAAMowC,OAC7C1yC,EAAAC,cAAQqC,KAAAA,EAAMmmC,aAAa,CAAEx0B,OAAQ3R,EAAM2sB,WAAWhb,SACnD3R,EAAM2sB,WAAWC,MAAMphB,KAAI,SAACnB,EAAMuH,GACjC,OAAOlU,EAAAC,cAACo7C,GAAM13C,EAAA,CAACX,IAAK,CAACV,EAAMowC,MAAO/lC,EAAKojB,UAAU0N,KAAK,KAAM9wB,KAAMA,EAAMuH,MAAOA,GAAW5R,GAC3F,OApBA,IAqCX,CAOA,SAAS+4C,GAAM16C,GASqB,IARlCgM,EAAIhM,EAAJgM,KACAuH,EAAKvT,EAALuT,MACAonC,EAAU36C,EAAV26C,WACAC,EAAY56C,EAAZ46C,aACA7S,EAAY/nC,EAAZ+nC,aACA8S,EAAW76C,EAAX66C,YACAvsB,EAAUtuB,EAAVsuB,WACAwsB,EAAY96C,EAAZ86C,aAEsFpE,EAAAv0C,EAA1D9C,EAAM+C,SAA6C,QAAO,GAA/Eof,EAAMk1B,EAAA,GAAExT,EAASwT,EAAA,GAElBqE,EAAY17C,EAAMojB,OAA4B,MAC9CsrB,EAAM+M,EAiBZ,OACEz7C,EAAAC,cAAA,KAAA0D,EAAA,CACE1C,UAAW,CACT,gBACC0L,EAAyCgvC,oBAAsB,uBACrD,eAAXx5B,GAA2B,4BAChB,aAAXA,GAAyB,2BAExB7Z,OAAOk1B,SACPC,KAAK,KACRme,eAfkB,WAAY,IAAAC,EACf,QAAjBA,EAAAH,EAAUh4B,eAAO5iB,IAAA+6C,GAAjBA,EAAAryC,KAAAkyC,GACAA,EAAUh4B,QAAU,IACrB,GAaOglB,EAAa,CACf/7B,KAAAA,EACAsH,OAAQgb,EAAWhb,OACnBq0B,QAAAA,SAAQxa,GACN0tB,EAAY7uC,EAAMmhB,EACpB,KAGF9tB,EAAAC,cAACyuC,EAAG,CAAC/X,IAAKhqB,GACR3M,EAAAC,cAAA,MAAA,CAAKgB,UAAU,2BACZq6C,EAAW,CAAE3uC,KAAAA,EAAMuH,MAAAA,IAEnBvH,EAAKmvC,UAAUnvC,EAAK/I,OAAuB,SAAd+I,EAAK/I,MACjC5D,EAAAC,cAAA,MAAA,CAAKgB,UAAU,iCACbjB,EAAAC,cAAC86C,GAAO,CAAC95C,UAAU,sBAAsB01B,IAAKhqB,EAAMquC,UAAU,mBAC7DruC,EAAKF,SAAWzM,EAAAC,cAAC86C,GAAO,CAAC95C,UAAU,qBAAqB01B,IAAKhqB,EAAMquC,UAAU,aAInE,UAAdruC,EAAK/I,MACJ5D,EAAAC,cAAA,MAAA,CAAKgB,UAAU,iCACbjB,EAAAC,cAAC86C,GAAO,CAAC95C,UAAU,sBAAsB01B,IAAKhqB,EAAMquC,UAAU,oBAIjEruC,EAAKmvC,UAAUnvC,EAAK/I,QACJ,SAAd+I,EAAK/I,MACU,SAAd+I,EAAK/I,MACS,SAAd+I,EAAK/I,MACS,SAAd+I,EAAK/I,MACS,SAAd+I,EAAK/I,OACL5D,EAAAC,cAAA,MAAA,CAAKgB,UAAU,iCACbjB,EAAAC,cAAC86C,GAAO,CAAC95C,UAAU,sBAAsB01B,IAAKhqB,EAAMquC,UAASt3C,aAAAA,OAAeiJ,EAAK/I,QACjF5D,EAAAC,cAAC86C,GAAO,CAAC95C,UAAU,qBAAqB01B,IAAKhqB,EAAMquC,UAAU,oBAIpD,YAAdruC,EAAK/I,MACJ5D,EAAAC,cAAA,MAAA,CAAKgB,UAAU,iCACbjB,EAAAC,cAAC86C,GAAO,CAAC95C,UAAU,sBAAsB01B,IAAKhqB,EAAMquC,UAAU,YAC9Dh7C,EAAAC,cAAC86C,GAAO,CAAC95C,UAAU,qBAAqB01B,IAAKhqB,EAAMquC,UAAU,oBAIhEO,EAAa,CAAE5uC,KAAAA,EAAMovC,oBAtEF,SAACC,GAC3BnY,EAAU,YACV6X,EAAUh4B,QAAUs4B,CACrB,EAmEkDC,sBAjErB,SAACD,GAC7BnY,EAAU,cACV6X,EAAUh4B,QAAUs4B,CACrB,MAmEH,CAOA,SAASZ,GAAW1nB,GAMqB,IALvC/mB,EAAI+mB,EAAJ/mB,KACA+7B,EAAYhV,EAAZgV,aACA8S,EAAW9nB,EAAX8nB,YACAn5C,EAAYqxB,EAAZrxB,aACA4sB,EAAUyE,EAAVzE,WAE4DitB,GAAlB75C,GAAgB,CAAE,GAApD85C,iBAAAA,OAAmBr7C,IAAHo7C,EAAG,WAAUA,EAErC,OACEl8C,EAAAC,cAAA,KAAA0D,EAAA,CACE1C,UAAU,iBACNynC,EAAa,CACf/7B,KAAAA,EACAsH,OAAQgb,EAAWhb,OACnBq0B,QAAAA,SAAQxa,GACN0tB,EAAY7uC,EAAMmhB,EACpB,KAGF9tB,EAAAC,cAAA,MAAA,CAAKgB,UAAU,wBACbjB,EAAAC,cAAA,MAAA,CAAKgB,UAAU,qDACbjB,EAAAC,cAAA,MAAA,CAAKgB,UAAU,sDACbjB,EAAAC,cAACivC,GAAc,OAEjBlvC,EAAAC,cAAA,MAAA,CAAKgB,UAAU,mCACbjB,EAAAC,cAAA,OAAA,CAAMgB,UAAU,6CAA6Ck7C,GAC7Dn8C,EAAAC,cAAA,OAAA,CAAMgB,UAAU,yCAAyC0L,EAAKuyB,OAAS,OAMnF,CC1MO,SAASkd,GACdxtB,EACAytB,EACAC,GAEA,OAAO1tB,EAAO7d,QAAiC,SAACglB,EAAKppB,GACnD,IAAM3J,EAAMq5C,EAAU1vC,GAYtB,OAVKopB,EAAIxsB,eAAevG,KACtB+yB,EAAI/yB,GAAO,IAKT+yB,EAAI/yB,GAAKyF,QAAU6zC,GAAsB,IAC3CvmB,EAAI/yB,GAAK2G,KAAKgD,GAGTopB,CACR,GAAE,GACL,CCpBO,SAASwmB,GAAiB3kC,GAC/B,OAAOA,CACT,CCEO,SAAS4kC,GAA2D1uB,GAGzE,OAFuD,IAAhCA,EAAqB2uB,QAEpB3uB,EAAMqa,QAAUra,EAAMma,SAAWna,EAAMka,SAAWla,EAAMoa,QAClF,CCRO,SAASpvB,KAA4B,CCE5C,IAAM4jC,GAAqB,qBACrBC,GAAwB79B,OAAO49B,GAAmBzoC,QAEjD,SAAS2oC,GAAoBjmB,GAAkD,IAAAkmB,EAAAC,EAC9EC,EAAuBpmB,EAE7B,IAAKomB,EAAqBpB,qBAAuBhlB,EAAIkM,iBACnD,OAAOlM,EAAImlB,UAAUkB,KAGvB,IAAMA,EAAOD,EAAqBpB,mBACS,QADSkB,EAChDE,EAAqBpB,0BAAkBkB,IAAAA,WAAAA,EAAvCA,EAAyCha,wBAAgB/hC,IAAA+7C,GAAWA,QAAXA,EAAzDA,EAA2Df,iBAA3De,IAAoEA,OAApEA,EAAAA,EAAsEG,KAClD,QADsDF,EAC1EnmB,EAAIkM,wBAAgBia,IAAAA,WAAAA,EAApBA,EAAsBhB,iBAASh7C,IAAAg8C,OAAAh8C,EAA/Bg8C,EAAiCE,KAErC,OAAKA,EAIEA,EAAK51C,OAASu1C,GAAsBx5C,KAAK65C,EAAK51C,OAAS41C,EAAK51C,MAAMs2B,QAAQgf,GAAoB,IAAMM,EAAK51C,MAHvGuvB,EAAImlB,UAAUkB,IAIzB,yBCLO,SAASC,GAAat8C,GAAmE,IAAAyB,EAAAzB,EAAhE0B,aAAAA,OAAYvB,IAAAsB,EAAG,CAAA,EAAEA,EAAKE,EAAKC,EAAA5B,EAAA6B,IACzD,OACExC,EAAAC,cAAA,MAAA,CAAKgB,UAAU,gCACZqB,EAAM6R,MAAM4a,YAAYjhB,KAAI,SAACmhB,GAC5B,GAAgC,IAA5BA,EAAWC,MAAMzmB,OACnB,OAAO,KAGT,IAAMiqC,EAAQkK,GAAoB3tB,EAAWC,MAAM,IAEnD,OACElvB,EAAAC,cAACk7C,GAAOx3C,KACFrB,EAAK,CACTU,IAAKisB,EAAWhb,OAAOspB,SACvBl7B,aAAcA,EACdqwC,MAAOA,EACPzjB,WAAYA,EACZqsB,WAAY,SAAF5nB,GAAA,IAAAwpB,EAAKvwC,EAAI+mB,EAAJ/mB,KAAMuH,EAAKwf,EAALxf,MAAK,OACxBlU,EAAAC,cAAAD,EAAA6D,SACG8I,KAAAA,EAAKgvC,oBACJ37C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,qBAAqBb,QAAQ,aAC1CJ,EAAAC,cAAA,IAAA,CACEoB,OAAO,eACPhB,KAAK,OACLwuC,SAAS,UACTttC,cAAc,QACdC,eAAe,SAEdmL,EAAKgvC,sBAAkDuB,QAAhCA,EAAKjuB,EAAWC,MAAMhb,EAAQ,UAAzBgpC,IAA2BA,OAA3BA,EAAAA,EAA6BvB,oBACxD37C,EAAAC,cAAA,OAAA,CAAMM,EAAE,sBAERP,EAAAC,cAAA,OAAA,CAAMM,EAAE,wBAMhBP,EAAAC,cAAA,MAAA,CAAKgB,UAAU,sBACbjB,EAAAC,cAACuvC,GAAU,CAAC5rC,KAAM+I,EAAK/I,QAG3B,EACF23C,aAAc,WAAF,OACVv7C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,wBACbjB,EAAAC,cAACqvC,GAAU,MACP,IAIb,IAEAhtC,EAAM66C,wBACLn9C,EAAAC,cAAA,UAAA,CAASgB,UAAU,wBACjBjB,EAAAC,cAACqC,EAAM66C,uBAAsB,CAAChpC,MAAO7R,EAAM6R,SAKrD,yBCnDO,SAASipC,GAAWz8C,GAAwE,IAAAyB,EAAAzB,EAArE0B,aAAAA,OAAYvB,IAAAsB,EAAG,CAAA,EAAEA,EAAKE,EAAKC,EAAA5B,EAAA6B,IACvD66C,EAQIh7C,EAPFi7C,oBAAAA,OAAsBx8C,IAAHu8C,EAAG,SAAQA,EAAAE,EAO5Bl7C,EANFm7C,4BAAAA,OAA8B18C,IAAHy8C,EAAG,mBAAkBA,EAAAE,EAM9Cp7C,EALFq7C,8BAAAA,OAAgC58C,IAAH28C,EAAG,kCAAiCA,EAAAE,EAK/Dt7C,EAJFu7C,sBAAAA,OAAwB98C,IAAH68C,EAAG,WAAUA,EAAAE,EAIhCx7C,EAHFy7C,gCAAAA,OAAkCh9C,IAAH+8C,EAAG,oCAAmCA,EAAAE,EAGnE17C,EAFF27C,yBAAAA,OAA2Bl9C,IAAHi9C,EAAG,uBAAsBA,EAAAE,EAE/C57C,EADF67C,oCAAAA,OAAsCp9C,IAAHm9C,EAAG,wCAAuCA,EAG/E,OACEj+C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,gCACbjB,EAAAC,cAACk7C,GAAOx3C,KACFrB,EAAK,CACTowC,MAAO4K,EACPruB,WAAY3sB,EAAM6R,MAAM4a,YAAY,GACpCusB,WAAY,WAAF,OACRt7C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,sBACbjB,EAAAC,cAACkvC,GAAU,MAEb,EACFoM,aAAc,SAAF7nB,GAAA,IAAK/mB,EAAI+mB,EAAJ/mB,KAAMsvC,EAAqBvoB,EAArBuoB,sBAAuBF,EAAmBroB,EAAnBqoB,oBAAmB,OAC/D/7C,EAAAC,cAAAD,EAAA6D,SAAA,KACE7D,EAAAC,cAAA,MAAA,CAAKgB,UAAU,wBACbjB,EAAAC,cAAA,SAAA,CACEgB,UAAU,8BACVyxC,MAAO8K,EACP55C,KAAK,SACL0kC,QAAS,SAACxa,GACRA,EAAME,iBACNF,EAAMqwB,kBACNlC,GAAsB,WACpB35C,EAAM87C,iBAAiBtjB,IAAInuB,GAC3BrK,EAAM+7C,eAAe7K,OAAO7mC,GAC5BrK,EAAMkhC,SACR,GACF,GAEAxjC,EAAAC,cAAC8vC,GAAQ,QAGb/vC,EAAAC,cAAA,MAAA,CAAKgB,UAAU,wBACbjB,EAAAC,cAAA,SAAA,CACEgB,UAAU,8BACVyxC,MAAOgL,EACP95C,KAAK,SACL0kC,QAAS,SAACxa,GACRA,EAAME,iBACNF,EAAMqwB,kBACNpC,GAAoB,WAClBz5C,EAAM+7C,eAAe7K,OAAO7mC,GAC5BrK,EAAMkhC,SACR,GACF,GAEAxjC,EAAAC,cAACmvC,GAAW,QAGf,KAIPpvC,EAAAC,cAACk7C,GAAOx3C,EAAA,CAAA,EACFrB,EAAK,CACTowC,MAAOkL,EACP3uB,WAAY3sB,EAAM6R,MAAM4a,YAAY,GACpCusB,WAAY,WAAF,OACRt7C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,sBACbjB,EAAAC,cAAC8vC,GAAQ,MAEX,EACFwL,aAAc,SAAFl4C,GAAA,IAAKsJ,EAAItJ,EAAJsJ,KAAMovC,EAAmB14C,EAAnB04C,oBAAmB,OACxC/7C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,wBACbjB,EAAAC,cAAA,SAAA,CACEgB,UAAU,8BACVyxC,MAAOoL,EACPl6C,KAAK,SACL0kC,QAAS,SAACxa,GACRA,EAAME,iBACNF,EAAMqwB,kBACNpC,GAAoB,WAClBz5C,EAAM87C,iBAAiB5K,OAAO7mC,GAC9BrK,EAAMkhC,SACR,GACF,GAEAxjC,EAAAC,cAACmvC,GAAW,OAEV,KAIVpvC,EAAAC,cAACk7C,GAAOx3C,EAAA,CAAA,EACFrB,EAAK,CACTowC,MAAOsL,EACP/uB,WAAY3sB,EAAM6R,MAAM4a,YAAY,GACpCusB,WAAY,WAAF,OACRt7C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,sBACbjB,EAAAC,cAACivC,GAAY,MAEf,EACFqM,aAAc,SAAFv3C,GAAA,IAAK2I,EAAI3I,EAAJ2I,KAAMovC,EAAmB/3C,EAAnB+3C,oBAAmB,OACxC/7C,EAAAC,cAAA,MAAA,CAAKgB,UAAU,wBACbjB,EAAAC,cAAA,SAAA,CACEgB,UAAU,8BACVyxC,MAAOwL,EACPt6C,KAAK,SACL0kC,QAAS,SAACxa,GACRA,EAAME,iBACNF,EAAMqwB,kBACNpC,GAAoB,WAClBz5C,EAAMsyC,cAAcpB,OAAO7mC,GAC3BrK,EAAMkhC,SACR,GACF,GAEAxjC,EAAAC,cAACmvC,GAAW,OAEV,KAKhB,yBChGakP,GAAct+C,EAAM+yC,MAC/B,SAAApyC,GAA6E,IAAA49C,EAAAn8C,EAAAzB,EAA1E0B,aAAAA,OAAYvB,IAAAsB,EAAG,CAAA,EAAEA,EAAKE,EAAKC,EAAA5B,EAAA6B,IAC5B,OAAIF,EAAMgrC,eAAiBhrC,EAAMk4C,eAE7Bx6C,EAAAC,cAACy4C,GAAW/0C,KACNrB,EAAK,CACTmT,SAAUnT,EAAMmT,SAChB0M,OAAQ7f,EAAM6f,OACdsyB,iBAAkBnyC,EAAMmyC,iBACxB+J,gBAAiBl8C,EAAMk8C,gBACvBn8C,aAAcA,aAAYvB,EAAZuB,EAAco8C,eAKN,WAAb,QAAXF,EAAAj8C,EAAM6R,aAAKrT,IAAAy9C,OAAAz9C,EAAXy9C,EAAap8B,QACRniB,EAAAC,cAACw5C,GAAW,CAACp3C,aAAcA,aAAYvB,EAAZuB,EAAcq8C,cAG7Cp8C,EAAM6R,MAAM+qB,MAIZ58B,EAAMq8C,gBAAmBr8C,EAAMk4C,eAKlCx6C,EAAAC,cAAAD,EAAA6D,SAAA,KACE7D,EAAAC,cAACg9C,GAAat5C,KAAKrB,EAAK,CAAED,aAAcA,aAAYvB,EAAZuB,EAAcu8C,iBACrDt8C,EAAMk4C,gBAAqD,IAAnCl4C,EAAM6R,MAAM4a,YAAYtmB,QAE/CzI,EAAAC,cAAC65C,GAAen2C,KAAKrB,EAAK,CAAED,aAAcA,aAAYvB,EAAZuB,EAAcw8C,oBARrD7+C,EAAAC,cAAC65C,GAAen2C,KAAKrB,EAAK,CAAED,aAAcA,aAAYvB,EAAZuB,EAAcw8C,mBAJxD7+C,EAAAC,cAACm9C,GAAWz5C,KAAKrB,EAAK,CAAEq8C,eAAgBr8C,EAAMq8C,eAAgBt8C,aAAcA,aAAYvB,EAAZuB,EAAcy8C,cAgBrG,IACA,SAAkBC,EAAYC,GAK5B,MAAkC,YAA3BA,EAAU7qC,MAAMgO,QAAmD,YAA3B68B,EAAU7qC,MAAMgO,MACjE,ICvFK,SAAS88B,GAAQt+C,GAAoE,IAAAC,EAAAD,EAAjEE,KAAAA,OAAOC,IAAHF,EAAG,GAAEA,EAAAG,EAAAJ,EAAEK,MAAAA,OAAQF,IAAHC,EAAG,eAAcA,EAC1D,OACEf,EAAAC,cAAA,MAAA,CACEC,MAAOW,EACPV,OAAQU,EACRI,UAAU,sBACVb,QAAQ,YACRC,KAAK,OACLgB,OAAQL,EACRM,YAAY,MACZC,cAAc,QACdC,eAAe,QACf,cAAY,QAEZxB,EAAAC,cAAA,OAAA,CAAMM,EAAE,mBACRP,EAAAC,cAAA,OAAA,CAAMM,EAAE,aAGd,yBCcO,SAAS2+C,GAASv+C,GAA+D,IAAAyB,EAAAzB,EAA5D0B,aAAAA,OAAYvB,IAAAsB,EAAG,CAAA,EAAEA,EAAKE,EAAKC,EAAA5B,EAAA6B,IACrD28C,EASI98C,EARF+8C,iBAAAA,OAAmBt+C,IAAHq+C,EAAG,QAAOA,EAAAE,EAQxBh9C,EAPFi9C,qBAAAA,OAAuBx+C,IAAHu+C,EAAG,kBAAiBA,EAAAE,EAOtCl9C,EANFm9C,gBAAAA,OAAkB1+C,IAAHy+C,EAAG,QAAOA,EAAAE,EAMvBp9C,EALFq9C,qBAAAA,OAAuB5+C,IAAH2+C,EAAG,QAAOA,EAAAE,EAK5Bt9C,EAJFu9C,iBAAAA,OAAmB9+C,IAAH6+C,EAAG,SAAQA,EAAAE,EAIzBx9C,EAHFy9C,8BAAAA,OAAgCh/C,IAAH++C,EAAG,yBAAwBA,EAAAE,EAGtD19C,EAFF29C,mCAAAA,OAAqCl/C,IAAHi/C,EAAG,yBAAwBA,EAAAE,EAE3D59C,EADF69C,8BAAAA,OAAgCp/C,IAAHm/C,EAAG,eAAcA,EAExCxgB,EAAYn9B,EAAMyjC,aAAa,CACrCf,aAAc1iC,EAAMq4C,SAASj3B,UADvB+b,QAIRz/B,EAAM2B,WAAU,WACVW,EAAMu8B,WAAav8B,EAAMq4C,SAASj3B,SACpCphB,EAAMq4C,SAASj3B,QAAQsd,OAE1B,GAAE,CAAC1+B,EAAMu8B,UAAWv8B,EAAMq4C,WAE3B36C,EAAM2B,WAAU,WACVW,EAAM69C,iBAAmB79C,EAAMq4C,SAASj3B,SAC1CphB,EAAMq4C,SAASj3B,QAAQ08B,QAE1B,GAAE,CAAC99C,EAAM69C,gBAAiB79C,EAAMq4C,WAEjC,IAAM0F,EAAiB/9C,EAAMgkC,cAAc,CACzCtB,aAAc1iC,EAAMq4C,SAASj3B,QAC7Bmb,UAAWv8B,EAAMu8B,UACjB6H,UlCrE0B,MkCwEtB4Z,EAAc,IAAIr0C,IAAI,CAAC,UAAW,YAAa,UAC/Cs0C,EAAgBF,EAAe7Y,UAC/BgZ,EAAeH,EAAejZ,SAC9BqZ,EAAyC,cAAtBn+C,EAAMo+C,aAAqD,cAAtBp+C,EAAMo+C,YAC9DC,EAAgD,YAAvBr+C,EAAM6R,MAAMgO,OAG3CniB,EAAM2B,WAAU,WACY,cAAtBW,EAAMo+C,aAAqD,cAAtBp+C,EAAMo+C,aAA+Bp+C,EAAMq4C,SAASj3B,SAC3FphB,EAAMq4C,SAASj3B,QAAQsd,OAE1B,GAAE,CAAC1+B,EAAMo+C,YAAap+C,EAAMq4C,WAS7B,IAAMiG,EAAUruB,EAAAA,KACX8tB,GAAc,GAAA,CACjB3hB,aAAcp8B,EAAMgrC,cAAiB,QAAqB,SAC1D9F,UAAW,SAAC9iC,GAEV,GAAIpC,EAAMgrC,eAAiBgT,EAAY3nC,IAAIjU,EAAE1B,KAO3C,MALc,UAAV0B,EAAE1B,MAAoBy9C,GAAoBn+C,EAAM6R,MAAM+qB,OACxD58B,EAAMu+C,WAAWv+C,EAAM6R,MAAM+qB,OAE/Bx6B,EAAEspB,sBACFtpB,EAAEy5C,kBAGJoC,SAAAA,EAAgB77C,EACjB,EACD0iC,SAAU,SAAC1iC,GACT,GAAIpC,EAAMgrC,cAOR,OANAhrC,EAAMqhC,SAASj/B,EAAE2iC,cAAcjgC,OAI/B1C,EAAEspB,sBACFtpB,EAAEy5C,kBAGJqC,SAAAA,EAAe97C,EAChB,EACD80C,SAAUiH,IAGZ,OACEzgD,EAAAC,cAAAD,EAAA6D,SAAA,KACE7D,EAAAC,cAAA,OAAA,CACEgB,UAAU,iBACVq+B,SAAU,SAACxR,GACTA,EAAME,gBACN,EACFyR,QAASA,GAERn9B,EAAMgrC,cACLttC,EAAAC,cAAAD,EAAA6D,SACE7D,KAAAA,EAAAC,cAAA,SAAA,CACE2D,KAAK,SACLotC,SAAU,EACV/vC,UAAU,yBACVyxC,MAAOoN,EACP,aAAYE,EACZ1X,QAAS,WAAF,OAAQhmC,EAAM22C,eAAc,EAAM,GAEzCj5C,EAAAC,cAACg/C,GAAU,QAIfj/C,EAAAC,cAAAD,EAAA6D,cACG88C,GACC3gD,EAAAC,cAAA,MAAA,CAAKgB,UAAU,8BACbjB,EAAAC,cAAC0uC,WAGHgS,GACA3gD,EAAAC,sBAAA0D,EAAA,CAAO1C,UAAU,4BAA+BqB,EAAM8jC,iBACpDpmC,EAAAC,cAACS,EAAY,MACbV,EAAAC,cAAA,OAAA,CAAMgB,UAAU,4CAA4C2+C,KAMpE5/C,EAAAC,cAAA,QAAA0D,EAAA,CACE1C,UAAU,kBACVkB,IAAKG,EAAMq4C,UACPiG,EAAU,CACdhiB,YAAa6hB,EAAmBP,EAAgC59C,EAAMs8B,eAGxE5+B,EAAAC,cAAA,MAAA,CAAKgB,UAAU,qBACZw/C,GACCzgD,EAAAC,cAAA,SAAA,CAAQ2D,KAAK,SAAS3C,UAAU,+BAA+BqnC,QAAS,WAAF,OAAQhmC,EAAM22C,eAAc,EAAK,GACrGj5C,EAAAC,cAACivC,GAAc,OAInBlvC,EAAAC,cAAA,SAAA,CACEgB,UAAU,kBACV2C,KAAK,QACL,aAAY07C,EACZwB,QAASx+C,EAAM6R,MAAM+qB,MACrB8R,SAAU1uC,EAAM6R,MAAM+qB,MAAQ,GAAO,EACrC,cAAc58B,EAAM6R,MAAM+qB,MAAiB,QAAT,QAEjCkgB,IAGDqB,GAAoBn+C,EAAM6R,MAAM+qB,QAAUl/B,EAAAC,cAAA,MAAA,CAAKgB,UAAU,sBAE3DjB,EAAAC,cAAA,SAAA,CACE2D,KAAK,SACL8uC,MAAO8M,EACPv+C,UAAU,kBACV,aAAYy+C,EACZpX,QAAShmC,EAAMy+C,SAEf/gD,EAAAC,cAACmvC,YAMb,CCjLO,SAAS4R,GAAqBh+C,GACnC,OAAkC,IAtB7B,WACL,IAAMA,EAAM,eACZ,IAGE,OAFAi+C,aAAa/U,QAAQlpC,EAAK,IAC1Bi+C,aAAaC,WAAWl+C,IACjB,CACR,CAAC,MAAAqoC,GACA,OAAO,CACT,CACF,CAaM8V,GACK,CACLjV,QAAAA,WAAkB,EAClBH,QAAO,WACL,MAAO,EACT,GAIG,CACLG,QAAAA,SAAQv/B,GACN,OAAOtI,OAAO48C,aAAa/U,QAAQlpC,EAAKgD,KAAKC,UAAU0G,GACxD,EACDo/B,QAAO,WACL,IAAMp/B,EAAOtI,OAAO48C,aAAalV,QAAQ/oC,GACzC,OAAO2J,EAAO3G,KAAKmC,MAAMwE,GAAQ,EACnC,EAEJ,8CC3BO,SAASy0C,GAAoBzgD,GAGuB,IAFzDqC,EAAGrC,EAAHqC,IAAGq+C,EAAA1gD,EACH2gD,MAAAA,OAAQxgD,IAAHugD,EAAG,EAACA,EAEHE,EAAUP,GAAqBh+C,GACjCksB,EAAQqyB,EAAQxV,UAAU9jC,MAAM,EAAGq5C,GAEvC,MAAO,CACLxmB,IAAAA,SAAInuB,GACF+mB,IAAAA,EAAqD/mB,EAA7B+mB,EAAhBmP,iBAAgCnP,EAAd8tB,eAAmB7qB,IAAAA,EAAGp0B,EAAAmxB,EAAAlxB,IAE1Ci/C,EAAsBvyB,EAAMva,WAAU,SAACiD,GAAC,OAAKA,EAAEmY,WAAa4G,EAAI5G,YAElE0xB,GAAsB,GACxBvyB,EAAM5P,OAAOmiC,EAAqB,GAGpCvyB,EAAMwyB,QAAQ/qB,GACdzH,EAAQA,EAAMjnB,MAAM,EAAGq5C,GAEvBC,EAAQrV,QAAQhd,EACjB,EACDskB,OAAAA,SAAO7mC,GACLuiB,EAAQA,EAAM5mB,QAAO,SAACsP,GAAC,OAAKA,EAAEmY,WAAapjB,EAAKojB,YAEhDwxB,EAAQrV,QAAQhd,EACjB,EACDyyB,OAAM,WACJ,OAAOzyB,CACT,EAEJ,CC7CO,SAAS0yB,GAA+Bh6C,GAC7C,IAAI25C,EAEEM,EAAAn+C,qBAAAA,OAAoCkE,EAAQ5E,KAElD,SAAS8+C,IAKP,YAJgBhhD,IAAZygD,IACFA,EAAU35C,EAAQq5C,cAAgB58C,OAAO48C,cAGpCM,CACT,CAEA,SAASQ,IACP,OAAO/7C,KAAKmC,MAAM25C,IAAa/V,QAAQ8V,IAAiB,KAC1D,CAEA,SAASG,EAAaC,GACpBH,IAAa5V,QAAQ2V,EAAc77C,KAAKC,UAAUg8C,GACpD,CA8BA,MAAO,CACLhoC,IAAAA,SACEjX,EACAk/C,GAIiB,IAHjBC,EAAA35C,UAAAC,OAAAD,QAAA1H,IAAA0H,UAAA1H,GAAA0H,UAA8B,GAAA,CAC5B45C,KAAM,WAAN,OAAY/rC,QAAQK,SAAQ,GAG9B,OAAOL,QAAQK,UACZ8C,MAAK,WArCZ,IACQ6oC,EACAJ,EAEAK,EAoCA,OAvCAD,EAAaz6C,EAAQy6C,WAAkC,IAArBz6C,EAAQy6C,WAAoB,KAC9DJ,EAAYF,IAQlBC,EANMM,EAAiDj5C,OAAO0F,YAC5D1F,OAAOk5C,QAAQN,GAAW35C,QAAO,SAAA3H,GAC/B,YAA+BG,IADmBgC,EAAAnC,EAAA,GAAN,GAC3B6hD,SACnB,MAKGH,GAaLL,EAT6C34C,OAAO0F,YAClD1F,OAAOk5C,QAAQD,GAAgDh6C,QAAO,SAAAjF,GAAmB,IAAfo/C,EAAe3/C,EAAAO,EAAA,GAAN,GAC3Eq/C,GAAmB,IAAIjyC,MAAOoF,UAGpC,QAFkB4sC,EAAUD,UAAYH,EAAaK,EAGvD,MAkBWX,IAAsD/7C,KAAKC,UAAUjD,GAC9E,IACCwW,MAAK,SAACpS,GACL,OAAOiP,QAAQC,IAAI,CAAClP,EAAQA,EAAMA,MAAQ86C,SAA0BphD,IAAVsG,GAC5D,IACCoS,MAAK,SAAA0c,GAAqB,IAAAuD,EAAA32B,EAAAozB,EAAA,GAAnB9uB,EAAAqyB,EAAA,GAAOkpB,EAAMlpB,EAAA,GACnB,OAAOpjB,QAAQC,IAAI,CAAClP,EAAOu7C,GAAUR,EAAOC,KAAKh7C,IACnD,IACCoS,MAAK,SAAAmgB,GAAO,OAAP72B,EAAA62B,EAAA,GAAO,EAAW,GAC5B,EAEA5pB,IAAAA,SAAY/M,EAAmCoE,GAC7C,OAAOiP,QAAQK,UAAU8C,MAAK,WAC5B,IAAMyoC,EAAYF,IASlB,OAPAE,EAAUj8C,KAAKC,UAAUjD,IAAQ,CAC/Bw/C,eAAe/xC,MAAOoF,UACtBzO,MAAAA,GAGF06C,IAAa5V,QAAQ2V,EAAc77C,KAAKC,UAAUg8C,IAE3C76C,IAEX,EAEAwY,OAAA,SAAO5c,GACL,OAAOqT,QAAQK,UAAU8C,MAAK,WAC5B,IAAMyoC,EAAYF,WAEXE,EAAUj8C,KAAKC,UAAUjD,IAEhC8+C,IAAa5V,QAAQ2V,EAAc77C,KAAKC,UAAUg8C,MAEtD,EAEAW,MAAA,WACE,OAAOvsC,QAAQK,UAAU8C,MAAK,WAC5BsoC,IAAaZ,WAAWW,KAE5B,EAEJ,2tVCzGO,IAAMnyB,GAAU,eCMhB,SAASmzB,GACdxuB,EACAC,EACAwuB,GAkBA,OAhBqB9iD,EAAMskB,SAAQ,WACjC,IAAMy+B,ECOH,SAAoB1uB,EAAeC,EAAgB1sB,GACxD,IAAKysB,GAA0B,iBAAVA,EACnB,MAAM,IAAIpvB,MAAM,uBAGlB,IAAKqvB,GAA4B,iBAAXA,EACpB,MAAM,IAAIrvB,MAAM,wBAGlB,OAAO+9C,GAAAzwB,EAAA,CACL8B,MAAAA,EACAC,OAAAA,EACA4H,SAAU,CACR+mB,QAAS,IACTxvC,KAAM,IACNyvC,MAAO,KAETC,kJACAC,UC4BK,CAAEC,KA5DT,SAAcj/B,GACZ,OAAO,IAAI/N,SAAS,SAAApN,GAClB,IAAMvE,EAAgB,IAAI4+C,eAC1B5+C,EAAcq8B,KAAK3c,EAAQkI,OAAQlI,EAAQjN,KAAK,GAEhD9N,OAAO0M,KAAKqO,EAAQyF,SAAS2I,SAAS,SAAAtpB,GAAA,OAAQxE,EAAc6+C,iBAAiBr6C,EAAKkb,EAAQyF,QAAQ3gB,GAAK,IAEvG,IAcI4nB,EAdElmB,EAAgB,SAAC1B,EAAiBmQ,GAAA,OAC/BiC,YAAW,WAChB5W,EAAc6oB,QAEdtkB,EAAQ,CACNkZ,OAAQ,EACR1V,QAAA4M,EACAmqC,YAAY,GAEhB,GAAGt6C,EAAO,EAGNu6C,EAAiB74C,EAAcwZ,EAAQs/B,eAAgB,sBAI7Dh/C,EAAci/C,mBAAqB,WAC7Bj/C,EAAck/C,WAAal/C,EAAcm/C,aAA8B/iD,IAApBgwB,IACrDzJ,aAAao8B,GAEb3yB,EAAkBlmB,EAAcwZ,EAAQ0/B,gBAAiB,kBAE7D,EAEAp/C,EAAcsS,QAAU,WAEO,IAAzBtS,EAAcyd,SAChBkF,aAAao8B,GACbp8B,aAAayJ,GAEb7nB,EAAQ,CACNwD,QAAS/H,EAAcq/C,cAAgB,yBACvC5hC,OAAQzd,EAAcyd,OACtBqhC,YAAY,IAGlB,EAEA9+C,EAAcmS,OAAS,WACrBwQ,aAAao8B,GACbp8B,aAAayJ,GAEb7nB,EAAQ,CACNwD,QAAS/H,EAAcq/C,aACvB5hC,OAAQzd,EAAcyd,OACtBqhC,YAAY,GAEhB,EAEA9+C,EAAc2+C,KAAKj/B,EAAQ3Y,KAC7B,GACF,GDzBEu4C,cAAe,CAAC,CAAEv0B,QAAS,YAC3Bw0B,SAAU,wBACVC,eAAgBC,KAChBC,cAAeD,GAAkB,CAAEE,cAAc,IACjDC,WAAYC,GAAwB,CAClCC,OAAQ,CAAC5C,GAA+B,CAAE5+C,OAAAU,OAAQ+gD,GAAgB/gD,KAAAA,OAAI2wB,KAAY8vB,SAEjFv8C,GAEP,CDnCmB88C,CAAWrwB,EAAOC,GAYjC,OAXAyuB,EAAO4B,gBAAgB,YAAaj1B,KAOsC,IAAtE,sBAAsBvsB,KAAK4/C,EAAO6B,YAAYC,aAAaz9C,QAC7D27C,EAAO4B,gBAAgB,kBAAmBj1B,IAGrCozB,EAAsBC,EAC9B,GAAE,CAAC1uB,EAAOC,EAAQwuB,GAGrB,+BGmFMgC,GAAiB,WAAA,IAAAnrB,EAAA6R,EAAAC,IAAAC,MAAG,SAAAC,EAAAlS,GAAA,IAAAyF,EAAA6lB,EAAA9rB,EAAA4K,EAAAjC,EAAAnL,EAAAuuB,EAAAC,EAAAjuB,EAAA3C,EAAAC,EAAAgoB,EAAA4I,EAAAC,EAAAC,EAAArE,EAAAsE,EAAAC,EAAAjjB,EAAAkjB,EAAAhjB,EAAAijB,EAAAvmB,EAAAqL,EAAA,OAAAmB,IAAApkC,MAAA,SAAAwkC,GAAA,cAAAA,EAAA1xB,KAAA0xB,EAAAjjC,MAAA,KAAA,EAiCO,OAhC/Bs2B,EAAKzF,EAALyF,MACO6lB,EAAYtrB,EAAnBtlB,MACA8kB,EAAUQ,EAAVR,WACA4K,EAASpK,EAAToK,UACAjC,EAAYnI,EAAZmI,aACAnL,EAASgD,EAAThD,UACAuuB,EAAgBvrB,EAAhBurB,iBACAC,EAAaxrB,EAAbwrB,cACAjuB,EAAQyC,EAARzC,SACA3C,EAAKoF,EAALpF,MACAC,EAAMmF,EAANnF,OACAgoB,EAAkB7iB,EAAlB6iB,mBAAkB4I,EAAAzrB,EAClB0rB,eAAAA,OAAcrkD,IAAAokD,EAAG3I,GAAQ2I,EACzBE,EAAgB3rB,EAAhB2rB,iBACArE,EAAOtnB,EAAPsnB,QAkBMsE,EAAiBruB,EAAQ6U,EAAA1xB,KAAA,EAAA0xB,EAAAjjC,KAAA,EAGHg5B,EAAa6Y,OAAqB,CAC1DhZ,SAAU,CAAAlP,EAAA,CAEN2M,MAAAA,EACAzI,UAAAA,EACAgvB,qBAAsB,CACpB,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,UACA,OACA,OAEFC,oBAAqB,CAAAhiD,kBAAAA,OACDuhD,EAAcvhC,SAAOhgB,kBAAAA,OACrBuhD,EAAcvhC,SAAOhgB,kBAAAA,OACrBuhD,EAAcvhC,SAAOhgB,kBAAAA,OACrBuhD,EAAcvhC,SAAOhgB,kBAAAA,OACrBuhD,EAAcvhC,SAAOhgB,kBAAAA,OACrBuhD,EAAcvhC,SAAOhgB,WAAAA,OAC5BuhD,EAAcvhC,UAE3BiiC,oBAAqB,IACrBC,gBAAiB,SACjBC,iBAAkB,UAClBC,YAAa,GACbzsB,eAAgBgsB,GACbL,MAGP,KAAA,EA2BD,OA3BCM,EAAAzZ,EAAAW,KAlCMnK,EAAOijB,EAAPjjB,QAoCFkjB,EAAcljB,EAAQ,GACpBE,EAAiBgjB,EAAjBhjB,KAAMijB,EAAWD,EAAXC,OACRvmB,EAAUmd,GAAsB7Z,GAAM,SAAC5L,GAAG,OAAKimB,GAAoBjmB,EAAM2lB,GAAAA,GAI1EyI,EAAaxtB,QAAQgjB,kBAA4B9xC,OAASY,OAAO0M,KAAKkpB,GAASx2B,QAClFwwB,EAAW,CACTshB,kBAAmBlxC,OAAO0M,KAAKkpB,KAInChG,EAAW,CAAEusB,OAAAA,IAETlb,EAAiB,CAAE,EAEnB+a,IACF/a,EAAiB,CACfza,yBAA0B4G,EAC1BxG,uBAAwBs1B,EAAYv1B,QACpCoE,kCAAmC,CACjCC,MAAAA,EACAC,OAAAA,KAGLuX,EAAAG,OAEM3iC,SAAAA,OAAOulB,OAAuBqQ,GAASnxB,KAAI,SAACohB,EAAOhb,GACxD,MAAO,CACLqpB,SAAQ75B,OAAAA,OAASwQ,GACjBsjB,SAAAA,SAAQH,GAAwB,IAArB1qB,EAAI0qB,EAAJ1qB,KAAMmhB,EAAKuJ,EAALvJ,MACfs3B,EAAiBz4C,GACZ6vC,GAAgB1uB,IACnBizB,GAEH,EACD5jB,WAAAA,SAAU1F,GACR,OADeA,EAAJ9qB,KACCwK,GACb,EACDqiB,SAAQ,WACN,OAAOnwB,OAAOulB,OAAOwtB,GAAQltB,GAAO,SAACviB,GAAI,OAAKA,EAAKmvC,UAAUiK,IAAI,GAAEzJ,IAChExuC,IAAIq3C,GACJr3C,KAAI,SAACk4C,GAAW,OACfA,EAAYl4C,KAAI,SAACnB,GACf,IAAI04B,EAAsC,KAEpC4gB,EAAkBD,EAAYr0C,MAClC,SAACu0C,GAAW,MAA0B,SAArBA,EAAYtiD,MAAmBsiD,EAAYpK,UAAUiK,OAASp5C,EAAKmvC,UAAUiK,IAAI,IAOpG,MAJkB,SAAdp5C,EAAK/I,MAAmBqiD,IAC1B5gB,EAAS4gB,GAGX1zB,EAAAA,EAAA,CAAA,EACK5lB,GAAI,CAAA,EAAA,CACPgvC,mBAAoBtW,GACjBiF,EAEP,GACF,IACC6b,MACL,EAEJ,KAAE,KAAA,GAQD,MARCta,EAAA1xB,KAAA,GAAA0xB,EAAAiM,GAAAjM,EAAA,MAAA,GAM4B,eAA1BA,EAAAiM,GAAiB3yC,MACnB0+B,EAAU,SACXgI,EAAAiM,GAAA,KAAA,GAAA,IAAA,MAAA,OAAAjM,EAAAve,OAAA,GAAAqe,EAAA,KAAA,CAAA,CAAA,EAAA,UAGJ,OAnJKmZ,SAAiBv0B,GAAA,OAAAoJ,EAAAhR,MAAAnjB,KAAAgD,UAAA,CAAA,CAAA,GAqJhB,SAAS49C,GAAcC,GAwBO,IN3OIhjD,EACvCL,EAAGsjD,EACHhF,EAEMC,EACFryB,EM+MJmF,EAAKgyB,EAALhyB,MACAC,EAAM+xB,EAAN/xB,OACAmC,EAAS4vB,EAAT5vB,UACAmI,EAAWynB,EAAXznB,YACA2nB,EAAKF,EAALE,MACAvB,EAAgBqB,EAAhBrB,iBACA1I,EAAkB+J,EAAlB/J,mBACA56C,EAAK2kD,EAAL3kD,MAAK8kD,EAAAH,EACLtF,QAAAA,OAAUjoC,IAAH0tC,EAAG1tC,GAAI0tC,EAAAC,EAAAJ,EACdlB,eAAAA,OAAiB5I,IAAHkK,EAAGlK,GAAQkK,EAAAC,EAAAL,EACzB5K,aAAAA,OAAe/M,IAAHgY,EAAGhY,GAAGgY,EAAAC,EAAAN,EAClBlJ,uBAAAA,OAAyBr8C,IAAH6lD,EAAG,WAAA,OAA0B,IAAI,EAAAA,EACvDzjD,EAASmjD,EAATnjD,UAAS0jD,EAAAP,EACTQ,eAAAA,OAAiB/lD,IAAH8lD,EAAG,EAACA,EAAAE,EAAAT,EAClBvD,sBAAAA,OAAwBvG,IAAHuK,EAAGvK,GAAQuK,EAAAC,EAAAV,EAChCW,2BAAAA,OAA6BlmD,IAAHimD,GAAQA,EAAAE,EAAAZ,EAClCa,aAAcC,OAAuBrmD,IAAHmmD,EAAG,GAAEA,EAAAG,EAAAf,EACvChkD,aAAAA,OAAYvB,IAAAsmD,EAAG,CAAA,EAAEA,EACjBxM,EAAoByL,EAApBzL,qBAAoByM,EAAAhB,EACpBrvB,SAAAA,OAAWl2B,IAAHumD,GAAQA,EAChBpO,EAAaoN,EAAbpN,cAAaqO,EAAAjB,EACb/Y,cAAAA,OAAgBxsC,IAAHwmD,GAAQA,EAAAC,EAAAlB,EACrB7L,eAAAA,OAAiB15C,IAAHymD,GAAQA,EAENC,EAAqFnlD,EAA7FolD,OAAuCC,EAAsDrlD,EAAjEslD,UAAqCC,GAAuBrlD,EAAKF,EAAYG,IAS/G60C,GAAAv0C,EARwB9C,EAAM+C,SAA+C,CAC7Em8B,MAAO,GACPnQ,YAAa,GACboQ,WAAY,KACZ5H,QAAS,CAAE,EACXyB,QAAQ,EACR0D,aAAc,KACdva,OAAQ,SACR,GARKhO,GAAKkjC,GAAA,GAAEwQ,GAAQxQ,GAAA,GAUhBlE,GAAenzC,EAAMojB,OAA8B,MACnD0kC,GAAW9nD,EAAMojB,OAA8B,MAC/C2kC,GAAiB/nD,EAAMojB,OAA8B,MACrD4kC,GAAchoD,EAAMojB,OAA8B,MAClDu3B,GAAW36C,EAAMojB,OAAgC,MACjD6hC,GAAgBjlD,EAAMojB,OAAe,IACrC6kC,GAA4BjoD,EAAMojB,OACpB,oBAAX/e,OAAyBA,OAAO6jD,eAAgBngD,WAAWE,MAAM,E1C/S9C,K0C+SmE,IAC7Fyb,QACIwjC,GAAelnD,EAAMojB,OAAO+jC,GAAwBc,IAA2BvkC,QAE/EkxB,GAAgB50C,EAAMojB,QNlQW/f,EMmQO,CAC1CL,IAAGU,oCAAAA,OAAsC+yB,GACzC6qB,MAAO,INpQXt+C,EAAGK,EAAHL,IAAGsjD,EAAAjjD,EACHi+C,MAAAA,OAAQxgD,IAAHwlD,EAAG,EAACA,EAEH/E,EAAUP,GAAqBh+C,GACjCksB,EAAQqyB,EAAQxV,UAAU9jC,MAAM,EAAGq5C,GAEhC,CACLxmB,IAAAA,SAAInuB,GACF,IAAQojB,EAAuBpjB,EAAvBojB,SAAUta,EAAa9I,EAAb8I,SAGZgsC,EAAsBvyB,EAAMva,WAChC,SAACiD,GAAC,IAAAuwC,EAAAC,EAAA,OAAKxwC,EAAEmY,WAAaA,YAAYo4B,EAAAvwC,EAAEnC,gBAAQ3U,IAAAqnD,WAAAA,EAAVA,EAAa,UAAErnD,IAAAqnD,OAAArnD,EAAfqnD,EAAiB17C,YAAYgJ,SAAa,QAAL2yC,EAAR3yC,EAAW,UAAX2yC,IAAaA,OAAbA,EAAAA,EAAe37C,QAAO,IAGnFg1C,GAAsB,EACxBvyB,EAAMuyB,GAAuB90C,GAE7BuiB,EAAMwyB,QAAQ/0C,GACduiB,EAAQA,EAAMjnB,MAAM,EAAGq5C,IAGzBC,EAAQrV,QAAQhd,EACjB,EAEDm5B,YAAAA,SAAYv7C,EAAmBsqC,GAC7B,IAAMkR,EAAOp5B,EAAMvd,MAAK,SAAC42C,GAAC,IAAAC,EAAA,OAAe,QAAfA,EAAKD,EAAE9yC,gBAAQ3U,IAAA0nD,OAAA1nD,EAAV0nD,EAAYvkB,MAAK,SAACwkB,GAAC,OAAKA,EAAE99C,KAAOmC,QAChE,GAAKw7C,GAASA,EAAK7yC,SAAnB,CAEA,IAAMizC,EAAMJ,EAAK7yC,SAAS9D,MAAK,SAAC82C,GAAC,OAAKA,EAAE99C,KAAOmC,KAC1C47C,IAEJA,EAAYtR,SAAWA,EAExBmK,EAAQrV,QAAQhd,GAPa,CAQ9B,EACDioB,OAAAA,SAAOrqC,GAAmD,IAAA67C,EAClDL,EAAOp5B,EAAMvd,MAAK,SAAC42C,GAAC,IAAAK,EAAA,OAAe,QAAfA,EAAKL,EAAE9yC,gBAAQ3U,IAAA8nD,OAAA9nD,EAAV8nD,EAAY3kB,MAAK,SAACwkB,GAAC,OAAKA,EAAE99C,KAAOmC,QAChE,OAAOw7C,SAAc,QAAVK,EAAJL,EAAM7yC,gBAANkzC,IAAcA,OAAdA,EAAAA,EAAgBh3C,MAAK,SAAC82C,GAAC,OAAKA,EAAE99C,KAAOmC,IAC7C,EACD60C,OAAM,WACJ,OAAOzyB,CACR,EACDskB,OAAAA,SAAO7mC,GACLuiB,EAAQA,EAAM5mB,QAAO,SAACsP,GAAC,OAAKA,EAAEmY,WAAapjB,EAAKojB,YAEhDwxB,EAAQrV,QAAQhd,EAClB,KMuNAxL,QACI06B,GAAmBp+C,EAAMojB,OAC7Bg+B,GAAyC,CACvCp+C,IAAGU,kCAAAA,OAAoC+yB,GACvC6qB,MAAO,MAET59B,QACI26B,GAAiBr+C,EAAMojB,OAC3Bg+B,GAAyC,CACvCp+C,IAAGU,gCAAAA,OAAkC+yB,GAGrC6qB,MAA4C,IAArClD,GAAiBuD,SAASl5C,OAAe,EAAI,KAEtDib,QAEIke,GAAeihB,GAAgBxuB,EAAOC,EAAQwuB,GAE9C+F,GAA+B,WAAjBhhD,EAAO0+C,GAAqBA,EAAQ,KAClDuC,GAAwC,iBAAVvC,EAAqBA,GAAQsC,cAAW/nD,EAAX+nD,GAAajd,cAAe,KACvFmd,GAAwBF,cAAAA,EAAAA,GAAa7D,iBAEuCzN,GAAAz0C,EAAlC9C,EAAM+C,SAAuB,MAAK,GAA3E0xC,GAAgB8C,GAAA,GAAEyR,GAAmBzR,GAAA,GAE5C0R,GAMI9/B,GAAQ,CACVC,IAAKyhB,GACLthB,wBAAwB,EACxBlU,eAAK6zC,GAAA,SAAL7zC,EAAKo3B,EAAA0c,GAAA,OAAAD,EAAAvgC,MAAAnjB,KAAAgD,UAAA,CAAA,OAAL6M,EAAKtN,SAAA,WAAA,OAAAmhD,EAAAnhD,UAAA,EAALsN,CAAK,EAAA,WAAA,IAAA+zC,EAAA5d,EAAAC,IAAAC,MAAE,SAAAU,EAAOn/B,EAAOsnB,GAAI,IAAAyW,EAAAnhB,EAAA,OAAA4hB,IAAApkC,MAAA,SAAAilC,GAAA,cAAAA,EAAAnyB,KAAAmyB,EAAA1jC,MAAA,KAAA,EACF0jC,EAAA1jC,KAAA,EAAA,MACM,KAAA,EAAA,GAGtBkgD,GAAoB,CAAAxc,EAAA1jC,KAAA,EAAA,KAAA,CAAA,MACjB,IAAI3D,MAAM,mCAAkC,KAAA,EAAA,OAAAqnC,EAAA1jC,KAAA,EAEhC2iC,GAAc,CAAEK,YAAakd,KAAuB,KAAA,EAEzB,OAFzC9d,EAAKsB,EAAAE,MACL3iB,EAAU,IAAI0iB,QAAQhY,EAAK1K,UACzB9Z,IAAI,yBAAerM,OAAWsnC,IAASsB,EAAAN,OAAA,SAExC32B,MAAMpI,EAAKslB,EAAAA,EAAA,CAAA,EAAOgC,GAAI,CAAA,EAAA,CAAE1K,QAAAA,MAAU,KAAA,GAAA,IAAA,MAAA,OAAAyiB,EAAAhf,OAAA,GAAA8e,OAC1C,OAAAid,SAAAA,EAAAC,GAAA,OAAAF,EAAAzgC,MAAAnjB,KAAAgD,UAAA,CAAA,CAbI,IAcLqhB,QAAS,CACP,eAAgB,mBAChB,qBAAqBg/B,gBAAAA,GAAav0B,SAAUA,EAC5C,4BAA4Bu0B,gBAAAA,GAAax0B,QAASA,EAClD,wBAAwBw0B,gBAAAA,GAAapyB,YAAaA,EAClD,yBAA0BqyB,IAAwB,IAEpDh/B,KAAMi/B,GAAwB,CAAE/D,iBAAkB+D,IAA0B,CAAE,EAC9E7oC,QAAAA,SAAQqpC,GACNP,GAAoBO,EACtB,IAhCA9zC,GAAQwzC,GAARxzC,SACAwX,GAAMg8B,GAANh8B,OACA9K,GAAM8mC,GAAN9mC,OACAsL,GAAWw7B,GAAXx7B,YACO+wB,GAAeyK,GAAtBvjD,MA+BI8jD,GAAaxpD,EAAMojB,OAAOjB,IAChCniB,EAAM2B,WAAU,WACVqlD,IAIuB,cAAvBwC,GAAW9lC,SAAsC,UAAXvB,IACxCyyB,GAAc9Z,IvBrVc,SAACoE,EAAezpB,GAAmB,MAAwB,CAC3FypB,MAAAA,EACAnP,SAAUta,EAAS,GAAGhJ,QACtBgJ,SAAAA,EACA7R,KAAM,QACN6lD,OAAQ,SAIRh9C,QAAS,KACTqvC,UAAW,CACTkB,KAAM,QACN+I,KAAMtwC,EAAS,GAAGhJ,QAClBi9C,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,KAAM,MAER3yC,IAAK,GACL4yC,mBAAoB,GACrB,CuBgUuBC,CAAmBv0C,GAAS,GAAGhJ,QAASgJ,KAE5D+zC,GAAW9lC,QAAUvB,GACtB,GAAE,CAACA,GAAQ1M,GAAUm/B,GAAeoS,IAErC,IAAM5B,GAAmBplD,EAAMmlB,aAC7B,SAA0BxY,GACxB,IAAIq6C,EAAJ,CAKA,IAAMvM,EAAuB,YAAd9tC,EAAK/I,KAAqB+I,EAAKgvC,mBAAqBhvC,EAG/D8tC,IAAyF,IAA/E2D,GAAiBuD,SAAShtC,WAAU,SAACiD,GAAC,OAAKA,EAAEmY,WAAa0qB,EAAO1qB,QAAS,KACtFsuB,GAAevjB,IAAI2f,EAPrB,CASD,GACD,CAAC2D,GAAkBC,GAAgB2I,IAG/BiD,GAAqBjqD,EAAMmlB,aAC/B,SAACxY,GACC,GAAKwH,GAAMojB,QAAQ4B,uBAA0BxsB,EAAKg8B,kBAAlD,CAEA,IAAMuhB,EAAev9C,EAEfw9C,EAAsB,CAC1BjzB,UAAW,gBACXhjB,MAAOg2C,EAAar6B,yBACpBX,MAAO,CAACg7B,GACRp6B,UAAW,CAACnjB,EAAKg8B,mBACjB3Y,QAASk6B,EAAaj6B,wBAGxB9b,GAAMojB,QAAQ4B,sBAAsBnC,SAASpC,4BAA4Bu1B,EAZJ,CAatE,GACD,CAACh2C,GAAMojB,QAAQ4B,wBAGXixB,GACJpqD,EAAMojB,YASJtiB,GAEEupD,GAAoBrqD,EAAMmlB,aAC9B,SAACmlC,EAAiBprB,GAOhB,GANA+Z,EAAcqR,GACdr9B,GAAO,CACL3gB,KAAM,OACNG,QAASyyB,IAGP8oB,GAAYtkC,QAAS,CAEvB,IAAM6mC,EAAKvC,GAAYtkC,QACa,mBAAxB6mC,EAAWC,SACrBD,EAAGC,SAAS,CAAEC,IAAK,EAAGC,SAAU,WAGhCH,EAAGI,UAAY,CAEnB,CAGIP,GAAgB1mC,SAClB0mC,GAAgB1mC,QAAQigB,SAAS,GAErC,GACA,CAACsV,EAAehsB,KAIZ29B,GAAuB5qD,EAAMmlB,YAAW,WAAA,IAAA0lC,EAAArf,EAAAC,IAAAC,MAC5C,SAAAof,EAAOh+C,EAAmBu/B,GAAa,IAAA0e,EAAA,OAAAtf,IAAApkC,MAAA,SAAA2jD,GAAA,cAAAA,EAAA7wC,KAAA6wC,EAAApiD,MAAA,KAAA,EAAA,GAChCkgD,IAAyBz0B,EAAK,CAAA22B,EAAApiD,KAAA,EAAA,KAAA,CAAA,OAAAoiD,EAAAhf,OAAA,UAAA,KAAA,EAAA,OAAAgf,EAAApiD,KAAA,EACjBujC,GAAa,CAC7BP,YAAakd,GACbzc,OAAAA,EACAv/B,UAAAA,EACAunB,MAAAA,IACA,KAAA,EALO,KAAA22B,EAAAxe,KAMDrqB,QAAU,KAAG,CAAA6oC,EAAApiD,KAAA,EAAA,KAAA,CAAA,MAAQ,IAAI3D,MAAM,2BAA0B,KAAA,EACxC8lD,QAAzBA,EAAAnW,GAAcyT,mBAAd0C,IAAyBA,GAAzBA,EAAAvhD,KAAAorC,GAA4B9nC,EAAsB,IAAXu/B,EAAe,OAAS,WAAW,KAAA,EAAA,IAAA,MAAA,OAAA2e,EAAA19B,OAAA,GAAAw9B,OAC3E,OAAAG,SAAAA,EAAAC,GAAA,OAAAL,EAAAliC,MAAAnjB,KAAAgD,UAAA,CAAA,CAX2C,GAY5C,CAACsgD,GAAsBz0B,EAAOugB,KAG3BwV,GAAgB1mC,UACnB0mC,GAAgB1mC,QAAUimB,GAAmB,CAC3Ch/B,GAAI,YACJ4wB,oBAAqB,EACrBkD,aAAa,EACbrY,aAAc,CACZ8Y,MAAOgoB,GACP3vB,QAAS,CACPgjB,kBAAmB,KAGvBvjB,SAAUwG,QAAQxG,GAClB9zB,UAAAA,EACAw2B,cAAAA,SAAcp3B,GACZulD,GAASvlD,EAAM6R,MAChB,EACDyrB,WAAAA,SAAUurB,GAAwD,IAArDjsB,EAAKisB,EAALjsB,MAAc6lB,EAAYoG,EAAnBh3C,MAAqB8kB,EAAUkyB,EAAVlyB,WAAY4K,EAASsnB,EAATtnB,UACnD,IAAK3E,EAAO,CACV,IAAMksB,EAnbY,SAAHzqD,GAM0D,IALjF09C,EAAc19C,EAAd09C,eACAD,EAAgBz9C,EAAhBy9C,iBACAgH,EAAgBzkD,EAAhBykD,iBACArE,EAAOpgD,EAAPogD,QAGA,OAF0BpgD,EAA1BqmD,2BAGS,GAGwD,CAC/D,CACEzpB,SAAU,iBACV/F,SAAAA,SAAQ9D,GAAwB,IAArB/mB,EAAI+mB,EAAJ/mB,KAAMmhB,EAAK4F,EAAL5F,MACfs3B,EAAiBz4C,GACZ6vC,GAAgB1uB,IACnBizB,GAEH,EACD5jB,WAAAA,SAAU95B,GACR,OADeA,EAAJsJ,KACCwK,GACb,EACDqiB,SAAQ,WACN,OAAO6kB,EAAesD,QACxB,GAEF,CACEpkB,SAAU,mBACV/F,SAAAA,SAAQxzB,GAAwB,IAArB2I,EAAI3I,EAAJ2I,KAAMmhB,EAAK9pB,EAAL8pB,MACfs3B,EAAiBz4C,GACZ6vC,GAAgB1uB,IACnBizB,GAEH,EACD5jB,WAAAA,SAAUjH,GACR,OADeA,EAAJvpB,KACCwK,GACb,EACDqiB,SAAQ,WACN,OAAO4kB,EAAiBuD,QAC1B,GAKN,CAsYiC0J,CAAoB,CACzChN,eAAAA,GACAD,iBAAAA,GACAgH,iBAAAA,GACArE,QAAAA,EACAiG,2BAAAA,EACAxM,eAAAA,IAGI8Q,EACJ9Q,EACI,CACE,CACEjd,SAAU,sBACV/D,SAAQ,WACN,OAAIwtB,EACK,GAEFpS,GAAc+M,QACtB,EACDnqB,SAAAA,SAAQ+zB,GAAiB,IAAd5+C,EAAI4+C,EAAJ5+C,KACLA,EAAK8I,WACPgY,GAAY9gB,EAAK8I,UACjBwjC,GAAc,GAElB,IAGJ,GACN,MAAA,GAAAv1C,OAAA2tB,EAAW+5B,GAAmBE,EAChC,CAEA,IAAME,EAA4C,CAAEj0B,QAASwtB,EAAaxtB,SAGpEk0B,EAAwB3G,GAAkB,CAC9C5lB,MAAAA,EACA/qB,MAAOq3C,EACPvyB,WAAAA,EACA4K,UAAAA,EACAjC,aAAAA,GACAnL,UAAAA,EACAuuB,iBAAAA,EACAC,cAAAA,GACAjuB,SAAUwG,QAAQxG,GAClB3C,MAAAA,EACAC,OAAAA,EACAgoB,mBAAAA,EACA6I,eAAAA,EACAC,iBAAAA,GACArE,QAAAA,IAII2K,EAA+DlR,EACjE,CACE,CACEjd,SAAU,QACV/D,SAAQ,WAwBN,MAAO,CArB+B,CACpC51B,KAAM,QACNs7B,MAAAA,EACA6qB,mBAAoB,GACpBh6B,SAAyB,gBACzBtjB,QAAS,KACT0K,IAAK,GACLsyC,OAAQ,KACR3N,UAAW,CACTkB,KAAM,SACN+I,KAAM7mB,EACNwqB,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,KAAM,MAERjnB,iBAAkB,CAAS,EAC3B2e,eAAgB,CAAS,EACzB7F,mBAAoB,MAGvB,EACDnkB,SAAAA,SAAQm0B,GAAiB,IAAdh/C,EAAIg/C,EAAJh/C,KACS,UAAdA,EAAK/I,MAAoB+I,EAAKuyB,OAChCmrB,IAAkB,EAAM19C,EAAKuyB,MAEjC,IAGJ,GAGJ,OAAOusB,EAAsBjyC,MAAK,SAACoyC,GACjC,MAAA,GAAAloD,OAAWgoD,EAAWr6B,EAAKu6B,GAC7B,GACF,KAIJ,IC5kB0BjrD,GAAGkhC,GD4kBvBgqB,GAAezB,GAAgB1mC,QAE7BohB,GAA+C+mB,GAA/C/mB,oBAAqBe,GAA0BgmB,GAA1BhmB,aAAcrC,GAAYqoB,GAAZroB,SE1kBtC,SAAuB7iC,GAKA,IAJ5BmkC,EAAmBnkC,EAAnBmkC,oBACAI,EAAYvkC,EAAZukC,aACAD,EAAWtkC,EAAXskC,YACAD,EAAYrkC,EAAZqkC,aAEAhlC,EAAM2B,WAAU,WACd,GAAMujC,GAAgBD,GAAeD,EAArC,CAIA,IAAA8mB,EAAsChnB,EAAoB,CACxDI,aAAAA,EACAD,YAAAA,EACAD,aAAAA,IAHMQ,EAAYsmB,EAAZtmB,aAAcE,EAAWomB,EAAXpmB,YAStB,OAHArhC,OAAOC,iBAAiB,aAAckhC,GACtCnhC,OAAOC,iBAAiB,YAAaohC,GAE9B,WACLrhC,OAAOI,oBAAoB,aAAc+gC,GACzCnhC,OAAOI,oBAAoB,YAAaihC,EACzC,CAdD,CAeD,GAAE,CAACZ,EAAqBI,EAAcD,EAAaD,GACtD,CFmjBE+mB,CAAe,CACbjnB,oBAAAA,GACAI,aAAc8iB,GAAYtkC,QAC1BuhB,YAAa8iB,GAAerkC,QAC5BshB,aAAc2V,GAASj3B,UCplBC/iB,GDslBb,CAAEkhC,UAAWsR,GAAazvB,SCtlBVme,GAASlhC,GAATkhC,UAC7B7hC,EAAM2B,WAAU,WACd,GAAKkgC,GAAL,CAIA,IAAMmqB,EAAoBnqB,GAAUuR,iBAClC,0EAEI6Y,EAAeD,EAAkB,GACjCE,EAAcF,EAAkBA,EAAkBvjD,OAAS,GAoBjE,OAFAo5B,GAAUv9B,iBAAiB,UAAW6nD,GAE/B,WACLtqB,GAAUp9B,oBAAoB,UAAW0nD,EAC1C,CA5BD,CAQA,SAASA,EAAUr+B,GACC,QAAdA,EAAM9qB,MAIN8qB,EAAMoa,SACJrmC,SAAS8jC,gBAAkBsmB,IAC7Bn+B,EAAME,iBACNk+B,EAAYlrB,SAELn/B,SAAS8jC,gBAAkBumB,IACpCp+B,EAAME,iBACNi+B,EAAajrB,SAEjB,CAOF,GAAG,CAACa,KDsjBJpgC,EAAS,CAAEC,MAAAA,IAEX1B,EAAM2B,WAAU,WAGd,OAFAE,SAASioB,KAAKypB,UAAUzY,IAAI,qBAErB,WAAY,IAAAsxB,EAAAC,EACjBxqD,SAASioB,KAAKypB,UAAUC,OAAO,qBAIhB4Y,QAAfA,GAAAC,EAAAhoD,QAAOmmD,oBAAQ4B,GAAfA,EAAA5iD,KAAA6iD,EAAkB,EAAGxF,EACtB,CAGF,GAAE,IAEH7mD,EAAM8X,iBAAgB,WAEpB,IAAMw0C,EAAiBjoD,OAAOkoD,WAAa1qD,SAASioB,KAAK0iC,YAIzD,OAFA3qD,SAASioB,KAAK2iC,MAAMC,YAAWhpD,GAAAA,OAAM4oD,EAAkB,MAEhD,WACLzqD,SAASioB,KAAK2iC,MAAMC,YAAc,KACnC,CACF,GAAE,IAEH1sD,EAAM2B,WAAU,WACa0C,OAAOsoD,WAAW,sBAEtBvqB,UACrB6iB,GAAcvhC,QAAU,EAE3B,GAAE,IAEH1jB,EAAM2B,WAAU,WGhoBX,IAAkB4oD,EHioBjBvC,GAAYtkC,UAAY4pB,IG/nBH,mBAFJid,EHkoBLvC,GAAYtkC,SGhoBhB8mC,SACZD,EAAGC,SAAS,CAAEC,IAAK,EAAGC,SAAU,WAGhCH,EAAGI,UAAY,EH8nBhB,GAAE,CAACx2C,GAAM+qB,MAAOoO,IAOjBttC,EAAM2B,WAAU,WACVulD,GAAaz+C,OAAS,IACxB+6B,KAEImX,GAASj3B,SACXi3B,GAASj3B,QAAQsd,QAGvB,GAAG,CAACkmB,GAAc1jB,KAKlBxjC,EAAM2B,WAAU,WACd,SAASirD,IACP,GAAI9E,GAASpkC,QAAS,CACpB,IAAMmpC,EAA0B,IAArBxoD,OAAOyoD,YAClBhF,GAASpkC,QAAQ+oC,MAAMM,YAAY,iBAAgBrpD,GAAAA,OAAKmpD,QAC1D,CACF,CAMA,OAJAD,IAEAvoD,OAAOC,iBAAiB,SAAUsoD,GAE3B,WACLvoD,OAAOI,oBAAoB,SAAUmoD,EACtC,CACF,GAAE,IAIH5sD,EAAM2B,WAAU,WACT2rC,IACHue,GAAaroB,UACb/V,GAAY,IAEf,GAAE,CAAC6f,EAAeue,GAAcp+B,KAGjC,IAAIu/B,IAAwB,EACtBrO,GAAiBxqC,GAAM4a,YAAYkV,MAAK,SAAChV,GAAU,OAAKA,EAAWC,MAAMzmB,OAAS,KAKxF,MAJqB,SAAjB0L,GAAMgO,SAAwC,IAAnBw8B,IAAmD,IAAvBxqC,GAAM+qB,MAAMz2B,QAAiB6kC,IACtF0f,IAAwB,GAIxBhtD,EAAAC,cAAA,MAAA0D,EAAA,CACExB,IAAKgxC,IACDtN,GAAa,CAAE,iBAAiB,IAAO,CAC3C5kC,UAAW,CACT,YACA,sBACiB,YAAjBkT,GAAMgO,QAAwB,+BACb,UAAjBhO,GAAMgO,QAAsB,gCAE3B7Z,OAAOk1B,SACPC,KAAK,KACRnxB,KAAK,SACL0kC,SAAU,EACVvL,YAAa,SAAC3X,GACRA,EAAM/W,SAAW+W,EAAMuZ,eACzB0Z,GAEJ,IAEA/gD,EAAAC,cAAA,MAAA,CAAKgB,UAAU,kBAAkBkB,IAAK2lD,IACpC9nD,EAAAC,cAAA,SAAA,CAAQgB,UAAU,sBAAsBkB,IAAK4lD,IAC3C/nD,EAAAC,cAACi/C,GAASv7C,KACJkoD,GAAY,CAChB13C,MAAOA,GACPyqB,YAAaA,GAAe,cAC5BC,UAAmC,IAAxBqoB,GAAaz+C,OACxBkyC,SAAUA,GACVwF,gBAAiB3iB,QAAQ0pB,KAAiBA,KAAiBe,GAC3D5lD,aAAcqlD,EACdpa,cAAeA,EACfoT,YAAav+B,GACb4+B,QAASA,EACT9H,cAAeA,EACf4H,WAAY,SAAC3hB,GACXmrB,IAAkB,EAAMnrB,EAC1B,MAIH8tB,IACChtD,EAAAC,cAAA,MAAA,CAAKgB,UAAU,qBAAqBkB,IAAK6lD,IACvChoD,EAAAC,cAACq+C,GAAW36C,KACNkoD,GAAY,CAChBp1B,UAAWA,EACXtiB,MAAOA,GACPsnC,aAAcA,EACd0B,uBAAwBA,EACxB6J,2BAA4BA,EAC5B3I,eAAgBA,GAChBD,iBAAkBA,GAClBxJ,cAAeA,GACf+F,SAAUA,GACVt4C,aAAculD,GACdhN,qBAAsBA,EACtBtN,cAAeA,EACfkN,eAAgBA,EAChB/kC,SAAUA,GACVg/B,iBAAkBA,GAClB+J,gBAAiBA,GACjBr8B,OAAQA,GACRw8B,eAAgBA,GAChB1F,cAAeA,EACfuC,YAAa,SAAC7uC,EAAMmhB,GAElB,GAAkB,UAAdnhB,EAAK/I,MAAoB+I,EAAKuyB,MAShC,MAPoB,WAAhBvyB,EAAK88C,QAAuB,aAAc98C,GAC5C8gB,GAAY9gB,EAAK8I,UACjBwjC,GAAc,IAEdoR,IAAkB,EAAM19C,EAAKuyB,YAE/BpR,EAAME,iBAKRi8B,GAAmBt9C,GAEnBy4C,GAAiBz4C,GACZ6vC,GAAgB1uB,IACnBizB,GAEF,EACFlM,WAAY+V,OAIlB5qD,EAAAC,cAAA,SAAA,CAAQgB,UAAU,oBAChBjB,EAAAC,cAACmtC,GAAM,CAAC/qC,aAAcmlD,EAAoBla,cAAeA,MAKnE,CIrwBO,SAAS2f,GAA0BtsD,GAQA,IAPxCq4B,EAAMr4B,EAANq4B,OACAk0B,EAAMvsD,EAANusD,OACAnM,EAAOpgD,EAAPogD,QACA1d,EAAO1iC,EAAP0iC,QACAiK,EAAa3sC,EAAb2sC,cACA2L,EAAat4C,EAAbs4C,cACAkU,EAAexsD,EAAfwsD,gBAEAntD,EAAM2B,WAAU,WACd,SAAS6lC,EAAU1Z,GAA4B,IAAAs/B,EAC7C,IAAIp0B,GAAyB,WAAflL,EAAM3hB,OAAqBmhC,EAKzC,MACkB,WAAfxf,EAAM3hB,MAAqB6sB,GAKE,OAApBo0B,QAATA,EAAAt/B,EAAM9qB,WAANoqD,IAASA,OAATA,EAAAA,EAAW1S,iBAA0B5sB,EAAMka,SAAWla,EAAMma,WA7BrE,SAA0Bna,GACxB,IAAMu/B,EAAUv/B,EAAMw/B,eAAe,GAC/BpS,EAAUmS,EAAQnS,QAExB,OAAOmS,EAAQE,mBAAiC,UAAZrS,GAAmC,WAAZA,GAAoC,aAAZA,CACrF,CA2BUsS,CAAiB1/B,IAAwB,MAAdA,EAAM9qB,MAAgBg2B,GAEnDlL,EAAME,sBAEFgL,EACF+nB,IACUl/C,SAASioB,KAAKypB,UAAUhO,SAAS,sBAG3C2nB,WAMAC,GAAmBA,EAAgBzpC,UAAY7hB,SAAS8jC,eAAiBtC,GACvE,cAAclgC,KAAK8vB,OAAOw6B,aAAa3/B,EAAM4/B,WAC/CrqB,EAAQvV,IA9BVmrB,GAAc,EAiClB,CAIA,OAFA50C,OAAOC,iBAAiB,UAAWkjC,GAE5B,WACLnjC,OAAOI,oBAAoB,UAAW+iC,EACvC,CACH,GAAG,CAACxO,EAAQk0B,EAAQnM,EAAS1d,EAAS8pB,EAAiB7f,EAAe2L,GACxE,aCEO,SAAkBt4C,GAA4C,IAAAgtD,EAAAC,EAAAC,EAY/CC,EAIDC,EAhBUzrD,EAAKqB,EAAA,CAAA,uEAAAqqD,CAAArtD,GAAAA,IAC5BwsD,EAAkBntD,EAAMojB,OAA0B,MACPi0B,EAAAv0C,EAArB9C,EAAM+C,UAAS,GAAM,GAA1Ci2B,EAAMqe,EAAA,GAAEpX,EAASoX,EAAA,GACoFE,EAAAz0C,EAApE9C,EAAM+C,UAA6BT,eAAAA,EAAO4kD,oBAAgBpmD,GAAU,GAArGomD,EAAY3P,EAAA,GAAE0W,EAAe1W,EAAA,GAC2BG,EAAA50C,EAArB9C,EAAM+C,UAAS,GAAM,GAAxDuqC,EAAaoK,EAAA,GAAEwW,EAAgBxW,EAAA,GAElCyW,GACF7rD,iBAAKqrD,EAALrrD,EAAOD,oBAAYvB,IAAA6sD,GAAO,QAAPA,EAAnBA,EAAqBS,aAAKT,IAAAA,GAAWA,QAAXA,EAA1BA,EAA4BhG,qBAASgG,SAArCA,EAAuCU,mBAAmB/rD,aAAKxB,EAALwB,EAAOs8B,cAAe,cAG5E4b,EAAiBhd,QAAQl7B,aAAAA,EAAAA,EAAOikD,OAElC/L,IACF2T,GAAqB7rD,SAAmB,QAAdwrD,EAALxrD,EAAOD,oBAAYvB,IAAAgtD,GAAOA,QAAPA,EAAnBA,EAAqBM,aAAKN,IAAAA,GAAW,QAAXA,EAA1BA,EAA4BnG,iBAA5BmG,IAAqCA,OAArCA,EAAAA,EAAuCO,kBAAmB,oCAG7E/gB,IACF6gB,GAAqB7rD,SAAmB,QAAdyrD,EAALzrD,EAAOD,oBAAYvB,IAAAitD,GAAOA,QAAPA,EAAnBA,EAAqBK,aAAKL,IAAAA,GAAW,QAAXA,EAA1BA,EAA4BpG,iBAA5BoG,IAAqCA,OAArCA,EAAAA,EAAuCO,uBAAwB,2BAGtF,IAAMrV,EAAgBj5C,EAAMmlB,aAC1B,SAACopC,GACCL,EAAiBK,EACnB,GACA,CAACL,IAGGhB,EAASltD,EAAMmlB,aAAY,WAC/B8a,GAAU,EACZ,GAAG,CAACA,IAEE8gB,EAAU/gD,EAAMmlB,aAAY,WAChC8a,GAAU,GACVguB,EAAgB3rD,eAAAA,EAAO4kD,cACnB5Z,GACF4gB,GAAiB,EAErB,GAAG,CAACjuB,EAAW39B,EAAM4kD,aAAc5Z,EAAe4gB,IAqBlD,OAXAjB,GAA2B,CACzBj0B,OAAAA,EACAk0B,OAAAA,EACAnM,QAAAA,EACA1d,QAZcrjC,EAAMmlB,aACpB,SAAC2I,GACCmS,GAAU,GACVguB,EAAgBngC,EAAM9qB,IACxB,GACA,CAACi9B,EAAWguB,IAQZ3gB,cAAAA,EACA2L,cAAAA,EACAkU,gBAAAA,IAEF1rD,EAAS,CAAEC,MAAOY,EAAMZ,QAGtB1B,EAAAC,cAAAD,EAAA6D,SAAA,KACE7D,EAAAC,cAACgC,EAAe,CAACE,IAAKgrD,EAAiB9qD,aAAcC,SAAmBsrD,QAAdA,EAALtrD,EAAOD,oBAAPurD,IAAmBA,OAAnBA,EAAAA,EAAqBnR,OAAQnU,QAAS4kB,IAE1Fl0B,GACCw1B,EAAAA,aACExuD,EAAAC,cAACmmD,GAAcziD,KACTrB,EAAK,CACTs8B,YAAauvB,EACbtH,eAAgBxiD,OAAOoqD,QACvBvH,aAAcA,EACd7kD,aAAcC,SAAmBurD,QAAdA,EAALvrD,EAAOD,oBAAPwrD,IAAmBA,OAAnBA,EAAAA,EAAqBO,MACnC9gB,cAAeA,EACfkN,eAAgBA,EAChBvB,cAAeA,EACf8H,QAASA,KAEXl/C,SAASioB,MAInB","x_google_ignoreList":[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,76,97,100,101]}