From a866654ca75e615daf73bf0f0557b73506597ec3 Mon Sep 17 00:00:00 2001 From: Dylan Tientcheu Date: Tue, 10 Feb 2026 15:54:06 +0100 Subject: [PATCH 1/8] feat(docusaurus-adapter): Support docsearch key and adapter docs Co-authored-by: Cursor --- .../.gitignore | 1 + .../.npmignore | 3 + .../docusaurus-theme-search-algolia/README.md | 27 + .../libtmp/docSearchVersion.d.ts | 7 + .../libtmp/docSearchVersion.js | 11 + .../libtmp/index.d.ts | 9 + .../libtmp/index.js | 54 ++ .../libtmp/opensearch.d.ts | 16 + .../libtmp/opensearch.js | 69 ++ .../libtmp/templates/opensearch.d.ts | 8 + .../libtmp/templates/opensearch.js | 23 + .../libtmp/utils/escapeRegexp.d.ts | 11 + .../libtmp/utils/escapeRegexp.js | 19 + .../libtmp/utils/index.d.ts | 8 + .../libtmp/utils/index.js | 13 + .../libtmp/utils/normalizeUrl.d.ts | 19 + .../libtmp/utils/normalizeUrl.js | 87 +++ .../libtmp/validateThemeConfig.d.ts | 16 + .../libtmp/validateThemeConfig.js | 165 +++++ .../package.json | 68 ++ .../scripts/copy-assets.mjs | 77 ++ .../scripts/format-theme.mjs | 17 + .../src/__tests__/utils.test.ts | 47 ++ .../src/__tests__/validateThemeConfig.test.ts | 687 ++++++++++++++++++ .../src/client/index.ts | 16 + .../src/client/useAlgoliaAskAi.ts | 128 ++++ .../src/client/useAlgoliaAskAiSidepanel.ts | 122 ++++ .../useAlgoliaContextualFacetFilters.ts | 52 ++ .../src/client/useAlgoliaThemeConfig.ts | 17 + .../src/client/useSearchResultUrlProcessor.ts | 48 ++ .../src/client/utils.ts | 27 + .../src/deps.d.ts | 21 + .../src/docSearchVersion.ts | 10 + .../src/getDocSearchConfig.ts | 26 + .../src/index.ts | 84 +++ .../src/opensearch.ts | 101 +++ .../src/templates/opensearch.ts | 22 + .../src/theme-search-algolia.d.ts | 130 ++++ .../src/theme/SearchBar/index.tsx | 399 ++++++++++ .../src/theme/SearchBar/styles.css | 119 +++ .../src/theme/SearchPage/index.tsx | 518 +++++++++++++ .../src/theme/SearchPage/styles.module.css | 127 ++++ .../src/theme/SearchTranslations/index.ts | 371 ++++++++++ .../src/types.d.ts | 10 + .../src/utils/escapeRegexp.ts | 17 + .../src/utils/index.ts | 9 + .../src/utils/normalizeUrl.ts | 104 +++ .../src/validateThemeConfig.ts | 226 ++++++ .../tsconfig.client.json | 10 + .../tsconfig.client.tsbuildinfo | 1 + .../tsconfig.json | 11 + .../tsconfig.tsbuildinfo | 1 + eslint.config.mjs | 3 +- lerna.json | 3 +- package.json | 1 + packages/docsearch-core/package.json | 1 + packages/docsearch-css/src/button.css | 2 +- packages/docsearch-css/src/modal.css | 2 +- packages/docsearch-css/src/sidepanel.css | 1 + packages/website/docs/docsearch.mdx | 4 + packages/website/docs/docusaurus-adapter.mdx | 61 ++ packages/website/docs/integrations.md | 3 +- packages/website/docs/migrating-from-v3.md | 8 +- packages/website/docusaurus.config.mjs | 52 +- packages/website/package.json | 5 +- packages/website/sidebars.js | 2 +- packages/website/src/theme/Root.js | 101 --- tsconfig.base.client.json | 8 + tsconfig.base.json | 18 + yarn.lock | 66 +- 70 files changed, 4387 insertions(+), 143 deletions(-) create mode 100644 adapters/docusaurus-theme-search-algolia/.gitignore create mode 100644 adapters/docusaurus-theme-search-algolia/.npmignore create mode 100644 adapters/docusaurus-theme-search-algolia/README.md create mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/docSearchVersion.d.ts create mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/docSearchVersion.js create mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/index.d.ts create mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/index.js create mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/opensearch.d.ts create mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/opensearch.js create mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/templates/opensearch.d.ts create mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/templates/opensearch.js create mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/utils/escapeRegexp.d.ts create mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/utils/escapeRegexp.js create mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/utils/index.d.ts create mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/utils/index.js create mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/utils/normalizeUrl.d.ts create mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/utils/normalizeUrl.js create mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/validateThemeConfig.d.ts create mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/validateThemeConfig.js create mode 100644 adapters/docusaurus-theme-search-algolia/package.json create mode 100644 adapters/docusaurus-theme-search-algolia/scripts/copy-assets.mjs create mode 100644 adapters/docusaurus-theme-search-algolia/scripts/format-theme.mjs create mode 100644 adapters/docusaurus-theme-search-algolia/src/__tests__/utils.test.ts create mode 100644 adapters/docusaurus-theme-search-algolia/src/__tests__/validateThemeConfig.test.ts create mode 100644 adapters/docusaurus-theme-search-algolia/src/client/index.ts create mode 100644 adapters/docusaurus-theme-search-algolia/src/client/useAlgoliaAskAi.ts create mode 100644 adapters/docusaurus-theme-search-algolia/src/client/useAlgoliaAskAiSidepanel.ts create mode 100644 adapters/docusaurus-theme-search-algolia/src/client/useAlgoliaContextualFacetFilters.ts create mode 100644 adapters/docusaurus-theme-search-algolia/src/client/useAlgoliaThemeConfig.ts create mode 100644 adapters/docusaurus-theme-search-algolia/src/client/useSearchResultUrlProcessor.ts create mode 100644 adapters/docusaurus-theme-search-algolia/src/client/utils.ts create mode 100644 adapters/docusaurus-theme-search-algolia/src/deps.d.ts create mode 100644 adapters/docusaurus-theme-search-algolia/src/docSearchVersion.ts create mode 100644 adapters/docusaurus-theme-search-algolia/src/getDocSearchConfig.ts create mode 100644 adapters/docusaurus-theme-search-algolia/src/index.ts create mode 100644 adapters/docusaurus-theme-search-algolia/src/opensearch.ts create mode 100644 adapters/docusaurus-theme-search-algolia/src/templates/opensearch.ts create mode 100644 adapters/docusaurus-theme-search-algolia/src/theme-search-algolia.d.ts create mode 100644 adapters/docusaurus-theme-search-algolia/src/theme/SearchBar/index.tsx create mode 100644 adapters/docusaurus-theme-search-algolia/src/theme/SearchBar/styles.css create mode 100644 adapters/docusaurus-theme-search-algolia/src/theme/SearchPage/index.tsx create mode 100644 adapters/docusaurus-theme-search-algolia/src/theme/SearchPage/styles.module.css create mode 100644 adapters/docusaurus-theme-search-algolia/src/theme/SearchTranslations/index.ts create mode 100644 adapters/docusaurus-theme-search-algolia/src/types.d.ts create mode 100644 adapters/docusaurus-theme-search-algolia/src/utils/escapeRegexp.ts create mode 100644 adapters/docusaurus-theme-search-algolia/src/utils/index.ts create mode 100644 adapters/docusaurus-theme-search-algolia/src/utils/normalizeUrl.ts create mode 100644 adapters/docusaurus-theme-search-algolia/src/validateThemeConfig.ts create mode 100644 adapters/docusaurus-theme-search-algolia/tsconfig.client.json create mode 100644 adapters/docusaurus-theme-search-algolia/tsconfig.client.tsbuildinfo create mode 100644 adapters/docusaurus-theme-search-algolia/tsconfig.json create mode 100644 adapters/docusaurus-theme-search-algolia/tsconfig.tsbuildinfo create mode 100644 packages/website/docs/docusaurus-adapter.mdx delete mode 100644 packages/website/src/theme/Root.js create mode 100644 tsconfig.base.client.json create mode 100644 tsconfig.base.json diff --git a/adapters/docusaurus-theme-search-algolia/.gitignore b/adapters/docusaurus-theme-search-algolia/.gitignore new file mode 100644 index 0000000000..a65b41774a --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/.gitignore @@ -0,0 +1 @@ +lib diff --git a/adapters/docusaurus-theme-search-algolia/.npmignore b/adapters/docusaurus-theme-search-algolia/.npmignore new file mode 100644 index 0000000000..03c9ae1e1b --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/.npmignore @@ -0,0 +1,3 @@ +.tsbuildinfo* +tsconfig* +__tests__ diff --git a/adapters/docusaurus-theme-search-algolia/README.md b/adapters/docusaurus-theme-search-algolia/README.md new file mode 100644 index 0000000000..974060465f --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/README.md @@ -0,0 +1,27 @@ +# `@docsearch/docusaurus-adapter` + +Algolia search component for Docusaurus. + +## Usage + +Prefer configuring the adapter with `themeConfig.docsearch`: + +```js +// docusaurus.config.js +export default { + // ... + themeConfig: { + docsearch: { + appId: 'APP_ID', + apiKey: 'SEARCH_API_KEY', + indexName: 'INDEX_NAME', + askAi: { + assistantId: 'ASSISTANT_ID', + sidePanel: true, + }, + }, + }, +}; +``` + +`themeConfig.algolia` is still supported as a backward-compatible alias. diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/docSearchVersion.d.ts b/adapters/docusaurus-theme-search-algolia/libtmp/docSearchVersion.d.ts new file mode 100644 index 0000000000..69e8d70101 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/libtmp/docSearchVersion.d.ts @@ -0,0 +1,7 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +export declare const docSearchVersionString = "4.5.4"; diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/docSearchVersion.js b/adapters/docusaurus-theme-search-algolia/libtmp/docSearchVersion.js new file mode 100644 index 0000000000..3ddd5f8b4b --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/libtmp/docSearchVersion.js @@ -0,0 +1,11 @@ +"use strict"; +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.docSearchVersionString = void 0; +const react_1 = require("@docsearch/react"); +exports.docSearchVersionString = react_1.version; diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/index.d.ts b/adapters/docusaurus-theme-search-algolia/libtmp/index.d.ts new file mode 100644 index 0000000000..8b1b08ee68 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/libtmp/index.d.ts @@ -0,0 +1,9 @@ +/** + * Copyright (c) Facebook, Inc. And its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +import type { LoadContext, Plugin } from '@docusaurus/types'; +export default function themeSearchAlgolia(context: LoadContext): Plugin; +export { validateThemeConfig } from './validateThemeConfig'; diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/index.js b/adapters/docusaurus-theme-search-algolia/libtmp/index.js new file mode 100644 index 0000000000..8eb1e88dbf --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/libtmp/index.js @@ -0,0 +1,54 @@ +"use strict"; +/** + * Copyright (c) Facebook, Inc. And its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.validateThemeConfig = void 0; +exports.default = themeSearchAlgolia; +const theme_translations_1 = require("@docusaurus/theme-translations"); +const opensearch_1 = require("./opensearch"); +const utils_1 = require("./utils"); +function themeSearchAlgolia(context) { + const { baseUrl, siteConfig: { themeConfig }, i18n: { currentLocale }, } = context; + const { algolia: { searchPagePath }, } = themeConfig; + return { + name: 'docsearch-docusaurus-algolia-search', + getThemePath() { + return '../lib/theme'; + }, + getTypeScriptThemePath() { + return '../src/theme'; + }, + getDefaultCodeTranslationMessages() { + return (0, theme_translations_1.readDefaultCodeTranslationMessages)({ + locale: currentLocale, + name: 'theme-search-algolia', + }); + }, + contentLoaded({ actions: { addRoute } }) { + if (searchPagePath) { + addRoute({ + path: (0, utils_1.normalizeUrl)([baseUrl, searchPagePath]), + component: '@theme/SearchPage', + exact: true, + }); + } + }, + async postBuild() { + if ((0, opensearch_1.shouldCreateOpenSearchFile)({ context })) { + await (0, opensearch_1.createOpenSearchFile)({ context }); + } + }, + injectHtmlTags() { + if ((0, opensearch_1.shouldCreateOpenSearchFile)({ context })) { + return { headTags: (0, opensearch_1.createOpenSearchHeadTags)({ context }) }; + } + return {}; + }, + }; +} +var validateThemeConfig_1 = require("./validateThemeConfig"); +Object.defineProperty(exports, "validateThemeConfig", { enumerable: true, get: function () { return validateThemeConfig_1.validateThemeConfig; } }); diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/opensearch.d.ts b/adapters/docusaurus-theme-search-algolia/libtmp/opensearch.d.ts new file mode 100644 index 0000000000..79903d4a5b --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/libtmp/opensearch.d.ts @@ -0,0 +1,16 @@ +/** + * Copyright (c) Facebook, Inc. And its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +import type { HtmlTags, LoadContext } from '@docusaurus/types'; +export declare function shouldCreateOpenSearchFile({ context }: { + context: LoadContext; +}): boolean; +export declare function createOpenSearchFile({ context }: { + context: LoadContext; +}): Promise; +export declare function createOpenSearchHeadTags({ context }: { + context: LoadContext; +}): HtmlTags; diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/opensearch.js b/adapters/docusaurus-theme-search-algolia/libtmp/opensearch.js new file mode 100644 index 0000000000..b994ee0d4e --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/libtmp/opensearch.js @@ -0,0 +1,69 @@ +"use strict"; +/** + * Copyright (c) Facebook, Inc. And its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.shouldCreateOpenSearchFile = shouldCreateOpenSearchFile; +exports.createOpenSearchFile = createOpenSearchFile; +exports.createOpenSearchHeadTags = createOpenSearchHeadTags; +const path_1 = __importDefault(require("path")); +const eta_1 = require("eta"); +const fs_extra_1 = __importDefault(require("fs-extra")); +const lodash_1 = __importDefault(require("lodash")); +const opensearch_1 = __importDefault(require("./templates/opensearch")); +const utils_1 = require("./utils"); +const getCompiledOpenSearchTemplate = lodash_1.default.memoize(() => (0, eta_1.compile)(opensearch_1.default.trim())); +function renderOpenSearchTemplate(data) { + const compiled = getCompiledOpenSearchTemplate(); + return compiled(data, eta_1.defaultConfig); +} +const OPEN_SEARCH_FILENAME = 'opensearch.xml'; +function shouldCreateOpenSearchFile({ context }) { + const { siteConfig: { themeConfig, future: { experimental_router: router }, }, } = context; + const { algolia: { searchPagePath }, } = themeConfig; + return Boolean(searchPagePath) && router !== 'hash'; +} +function createOpenSearchFileContent({ context, searchPagePath, }) { + const { baseUrl, siteConfig: { title, url, favicon }, } = context; + const siteUrl = (0, utils_1.normalizeUrl)([url, baseUrl]); + return renderOpenSearchTemplate({ + title, + siteUrl, + searchUrl: (0, utils_1.normalizeUrl)([siteUrl, searchPagePath]), + faviconUrl: favicon ? (0, utils_1.normalizeUrl)([siteUrl, favicon]) : null, + }); +} +async function createOpenSearchFile({ context }) { + const { outDir, siteConfig: { themeConfig }, } = context; + const { algolia: { searchPagePath }, } = themeConfig; + if (!searchPagePath) { + throw new Error('no searchPagePath provided in themeConfig.algolia'); + } + const fileContent = createOpenSearchFileContent({ context, searchPagePath }); + try { + await fs_extra_1.default.writeFile(path_1.default.join(outDir, OPEN_SEARCH_FILENAME), fileContent); + } + catch (err) { + const error = new Error('Generating OpenSearch file failed.'); + error.cause = err; + throw error; + } +} +function createOpenSearchHeadTags({ context }) { + const { baseUrl, siteConfig: { title }, } = context; + return { + tagName: 'link', + attributes: { + rel: 'search', + type: 'application/opensearchdescription+xml', + title, + href: (0, utils_1.normalizeUrl)([baseUrl, OPEN_SEARCH_FILENAME]), + }, + }; +} diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/templates/opensearch.d.ts b/adapters/docusaurus-theme-search-algolia/libtmp/templates/opensearch.d.ts new file mode 100644 index 0000000000..fc6858e83b --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/libtmp/templates/opensearch.d.ts @@ -0,0 +1,8 @@ +/** + * Copyright (c) Facebook, Inc. And its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +declare const _default: "\n\n\n <%= it.title %>\n Search <%= it.title %>\n UTF-8\n <% if (it.faviconUrl) { _%>\n <%= it.faviconUrl %>\n <% } _%>\n ?q={searchTerms}\"/>\n opensearch.xml\" />\n <%= it.siteUrl %>\n\n"; +export default _default; diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/templates/opensearch.js b/adapters/docusaurus-theme-search-algolia/libtmp/templates/opensearch.js new file mode 100644 index 0000000000..01eca622d8 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/libtmp/templates/opensearch.js @@ -0,0 +1,23 @@ +"use strict"; +/** + * Copyright (c) Facebook, Inc. And its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = ` + + + <%= it.title %> + Search <%= it.title %> + UTF-8 + <% if (it.faviconUrl) { _%> + <%= it.faviconUrl %> + <% } _%> + + + <%= it.siteUrl %> + +`; diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/utils/escapeRegexp.d.ts b/adapters/docusaurus-theme-search-algolia/libtmp/utils/escapeRegexp.d.ts new file mode 100644 index 0000000000..bc8c6b3267 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/libtmp/utils/escapeRegexp.d.ts @@ -0,0 +1,11 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +/** + * Escapes special characters in a string for use in a regular expression. + * Based on escape-string-regexp package. + */ +export declare function escapeRegexp(string: string): string; diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/utils/escapeRegexp.js b/adapters/docusaurus-theme-search-algolia/libtmp/utils/escapeRegexp.js new file mode 100644 index 0000000000..a28ea13bb4 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/libtmp/utils/escapeRegexp.js @@ -0,0 +1,19 @@ +"use strict"; +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.escapeRegexp = escapeRegexp; +/** + * Escapes special characters in a string for use in a regular expression. + * Based on escape-string-regexp package. + */ +function escapeRegexp(string) { + // Escape characters with special meaning either inside or outside character + // sets. Use a simple backslash escape when it's always valid, and a `\xnn` + // escape when the simpler form would be disallowed by stricter unicodeness. + return string.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&').replace(/-/g, '\\x2d'); +} diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/utils/index.d.ts b/adapters/docusaurus-theme-search-algolia/libtmp/utils/index.d.ts new file mode 100644 index 0000000000..dabe3d4600 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/libtmp/utils/index.d.ts @@ -0,0 +1,8 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +export { normalizeUrl } from './normalizeUrl'; +export { escapeRegexp } from './escapeRegexp'; diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/utils/index.js b/adapters/docusaurus-theme-search-algolia/libtmp/utils/index.js new file mode 100644 index 0000000000..656bef45a7 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/libtmp/utils/index.js @@ -0,0 +1,13 @@ +"use strict"; +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.escapeRegexp = exports.normalizeUrl = void 0; +var normalizeUrl_1 = require("./normalizeUrl"); +Object.defineProperty(exports, "normalizeUrl", { enumerable: true, get: function () { return normalizeUrl_1.normalizeUrl; } }); +var escapeRegexp_1 = require("./escapeRegexp"); +Object.defineProperty(exports, "escapeRegexp", { enumerable: true, get: function () { return escapeRegexp_1.escapeRegexp; } }); diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/utils/normalizeUrl.d.ts b/adapters/docusaurus-theme-search-algolia/libtmp/utils/normalizeUrl.d.ts new file mode 100644 index 0000000000..b51acb9011 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/libtmp/utils/normalizeUrl.d.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +/** + * Much like `path.join`, but much better. Takes an array of URL segments, and + * joins them into a reasonable URL. + * + * - `["file:", "/home", "/user/", "website"]` => `file:///home/user/website` + * - `["file://", "home", "/user/", "website"]` => `file://home/user/website` (relative!) + * - Remove trailing slash before parameters or hash. + * - Replace `?` in query parameters with `&`. + * - Dedupe forward slashes in the entire path, avoiding protocol slashes. + * + * @throws {TypeError} If any of the URL segment is not a string, this throws. + */ +export declare function normalizeUrl(rawUrls: string[]): string; diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/utils/normalizeUrl.js b/adapters/docusaurus-theme-search-algolia/libtmp/utils/normalizeUrl.js new file mode 100644 index 0000000000..7e2431973f --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/libtmp/utils/normalizeUrl.js @@ -0,0 +1,87 @@ +"use strict"; +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.normalizeUrl = normalizeUrl; +/** + * Much like `path.join`, but much better. Takes an array of URL segments, and + * joins them into a reasonable URL. + * + * - `["file:", "/home", "/user/", "website"]` => `file:///home/user/website` + * - `["file://", "home", "/user/", "website"]` => `file://home/user/website` (relative!) + * - Remove trailing slash before parameters or hash. + * - Replace `?` in query parameters with `&`. + * - Dedupe forward slashes in the entire path, avoiding protocol slashes. + * + * @throws {TypeError} If any of the URL segment is not a string, this throws. + */ +function normalizeUrl(rawUrls) { + const urls = [...rawUrls]; + const resultArray = []; + let hasStartingSlash = false; + let hasEndingSlash = false; + const isNonEmptyArray = (arr) => arr.length > 0; + if (!isNonEmptyArray(urls)) { + return ''; + } + // If the first part is a plain protocol, we combine it with the next part. + if (urls[0].match(/^[^/:]+:\/*$/) && urls.length > 1) { + const first = urls.shift(); + if (first.startsWith('file:') && urls[0].startsWith('/')) { + // Force a double slash here, else we lose the information that the next + // segment is an absolute path + urls[0] = `${first}//${urls[0]}`; + } + else { + urls[0] = first + urls[0]; + } + } + // There must be two or three slashes in the file protocol, + // two slashes in anything else. + const replacement = urls[0].match(/^file:\/\/\//) ? '$1:///' : '$1://'; + urls[0] = urls[0].replace(/^(?[^/:]+):\/*/, replacement); + for (let i = 0; i < urls.length; i += 1) { + let component = urls[i]; + if (typeof component !== 'string') { + throw new TypeError(`Url must be a string. Received ${typeof component}`); + } + if (component === '') { + if (i === urls.length - 1 && hasEndingSlash) { + resultArray.push('/'); + } + continue; + } + if (component !== '/') { + if (i > 0) { + // Removing the starting slashes for each component but the first. + component = component.replace(/^\/+/, + // Special case where the first element of rawUrls is empty + // ["", "/hello"] => /hello + component.startsWith('/') && !hasStartingSlash ? '/' : ''); + } + hasEndingSlash = component.endsWith('/'); + // Removing the ending slashes for each component but the last. For the + // last component we will combine multiple slashes to a single one. + component = component.replace(/\/+$/, i < urls.length - 1 ? '' : '/'); + } + hasStartingSlash = true; + resultArray.push(component); + } + let str = resultArray.join('/'); + // Each input component is now separated by a single slash except the possible + // first plain protocol part. + // Remove trailing slash before parameters or hash. + str = str.replace(/\/(?\?|&|#[^!/])/g, '$1'); + // Replace ? in parameters with &. + const parts = str.split('?'); + str = parts.shift() + (parts.length > 0 ? '?' : '') + parts.join('&'); + // Dedupe forward slashes in the entire path, avoiding protocol slashes. + str = str.replace(/(?[^:/]\/)\/+/g, '$1'); + // Dedupe forward slashes at the beginning of the path. + str = str.replace(/^\/+/g, '/'); + return str; +} diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/validateThemeConfig.d.ts b/adapters/docusaurus-theme-search-algolia/libtmp/validateThemeConfig.d.ts new file mode 100644 index 0000000000..49c6d00ee7 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/libtmp/validateThemeConfig.d.ts @@ -0,0 +1,16 @@ +/** + * Copyright (c) Facebook, Inc. And its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +import type { ThemeConfig } from '@docsearch/docusaurus-adapter'; +import type { ThemeConfigValidationContext } from '@docusaurus/types'; +import Joi from 'joi'; +export declare const DEFAULT_CONFIG: { + contextualSearch: true; + searchParameters: {}; + searchPagePath: string; +}; +export declare const Schema: Joi.ObjectSchema; +export declare function validateThemeConfig({ validate, themeConfig: themeConfigInput, }: ThemeConfigValidationContext): ThemeConfig; diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/validateThemeConfig.js b/adapters/docusaurus-theme-search-algolia/libtmp/validateThemeConfig.js new file mode 100644 index 0000000000..ffea573580 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/libtmp/validateThemeConfig.js @@ -0,0 +1,165 @@ +"use strict"; +/** + * Copyright (c) Facebook, Inc. And its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Schema = exports.DEFAULT_CONFIG = void 0; +exports.validateThemeConfig = validateThemeConfig; +const joi_1 = __importDefault(require("joi")); +const docSearchVersion_1 = require("./docSearchVersion"); +const utils_1 = require("./utils"); +exports.DEFAULT_CONFIG = { + // Enabled by default, as it makes sense in most cases + // see also https://github.com/facebook/docusaurus/issues/5880 + contextualSearch: true, + searchParameters: {}, + searchPagePath: 'search', +}; +const FacetFiltersSchema = joi_1.default.array().items(joi_1.default.alternatives().try(joi_1.default.string(), joi_1.default.array().items(joi_1.default.string()))); +const AskAiSearchParametersSchema = joi_1.default.object({ + facetFilters: FacetFiltersSchema.optional(), + filters: joi_1.default.string().optional(), + attributesToRetrieve: joi_1.default.array().items(joi_1.default.string()).optional(), + restrictSearchableAttributes: joi_1.default.array().items(joi_1.default.string()).optional(), + distinct: joi_1.default.alternatives().try(joi_1.default.boolean(), joi_1.default.number(), joi_1.default.string()).optional(), +}).unknown(); +const SidePanelKeyboardShortcutsSchema = joi_1.default.object({ + 'Ctrl/Cmd+I': joi_1.default.boolean().optional(), +}); +const SidePanelSchema = joi_1.default.object({ + keyboardShortcuts: SidePanelKeyboardShortcutsSchema.optional(), + variant: joi_1.default.string().valid('floating', 'inline').optional(), + side: joi_1.default.string().valid('left', 'right').optional(), + width: joi_1.default.alternatives().try(joi_1.default.number(), joi_1.default.string()).optional(), + expandedWidth: joi_1.default.alternatives().try(joi_1.default.number(), joi_1.default.string()).optional(), + pushSelector: joi_1.default.string().optional(), + suggestedQuestions: joi_1.default.boolean().optional(), + translations: joi_1.default.object().optional().unknown(), + hideButton: joi_1.default.boolean().optional(), +}); +exports.Schema = joi_1.default.object({ + algolia: joi_1.default.object({ + // Docusaurus attributes + contextualSearch: joi_1.default.boolean().default(exports.DEFAULT_CONFIG.contextualSearch), + externalUrlRegex: joi_1.default.string().optional(), + // Algolia attributes + appId: joi_1.default.string().required().messages({ + 'any.required': '"algolia.appId" is required. If you haven\'t migrated to the new DocSearch infra, please refer to the blog post for instructions: https://docusaurus.io/blog/2021/11/21/algolia-docsearch-migration', + }), + apiKey: joi_1.default.string().required(), + indexName: joi_1.default.string().required(), + searchParameters: joi_1.default.object({ + facetFilters: FacetFiltersSchema.optional(), + }) + .default(exports.DEFAULT_CONFIG.searchParameters) + .unknown(), + searchPagePath: joi_1.default.alternatives() + .try(joi_1.default.boolean().invalid(true), joi_1.default.string()) + .allow(null) + .default(exports.DEFAULT_CONFIG.searchPagePath), + replaceSearchResultPathname: joi_1.default.object({ + from: joi_1.default.custom((from) => { + if (typeof from === 'string') { + return (0, utils_1.escapeRegexp)(from); + } + if (from instanceof RegExp) { + return from.source; + } + throw new Error(`it should be a RegExp or a string, but received ${from}`); + }).required(), + to: joi_1.default.string().required(), + }).optional(), + // Ask AI configuration (DocSearch v4 only) + askAi: joi_1.default.alternatives() + .try( + // Simple string format (assistantId only) + joi_1.default.string(), + // Full configuration object + joi_1.default.object({ + assistantId: joi_1.default.string().required(), + // Optional Ask AI configuration + indexName: joi_1.default.string().optional(), + apiKey: joi_1.default.string().optional(), + appId: joi_1.default.string().optional(), + agentStudio: joi_1.default.boolean().optional(), + searchParameters: AskAiSearchParametersSchema, + suggestedQuestions: joi_1.default.boolean().optional(), + sidePanel: joi_1.default.alternatives().try(joi_1.default.boolean(), SidePanelSchema).optional(), + })) + .custom((askAiInput, helpers) => { + if (!askAiInput) { + return askAiInput; + } + const algolia = helpers.state.ancestors[0]; + const algoliaFacetFilters = algolia.searchParameters?.facetFilters; + if (typeof askAiInput === 'string') { + return { + assistantId: askAiInput, + indexName: algolia.indexName, + apiKey: algolia.apiKey, + appId: algolia.appId, + ...(algoliaFacetFilters + ? { + searchParameters: { + facetFilters: algoliaFacetFilters, + }, + } + : {}), + }; + } + // Fill in missing fields with the top-level Algolia config + const normalizedAskAi = { ...askAiInput }; + normalizedAskAi.indexName = normalizedAskAi.indexName ?? algolia.indexName; + normalizedAskAi.apiKey = normalizedAskAi.apiKey ?? algolia.apiKey; + normalizedAskAi.appId = normalizedAskAi.appId ?? algolia.appId; + if (normalizedAskAi.agentStudio !== true && + normalizedAskAi.searchParameters?.facetFilters === undefined && + algoliaFacetFilters) { + normalizedAskAi.searchParameters = { + ...(normalizedAskAi.searchParameters ?? {}), + facetFilters: algoliaFacetFilters, + }; + } + return normalizedAskAi; + }) + .optional() + .messages({ + 'alternatives.types': 'askAi must be either a string (assistantId) or an object with indexName, apiKey, appId, and assistantId', + }), + }) + .label('themeConfig.algolia') + .required() + .unknown(), +}); +function ensureSidepanelSupported(themeConfig) { + const sidePanelEnabled = themeConfig.algolia.askAi && + typeof themeConfig.algolia.askAi === 'object' && + Boolean(themeConfig.algolia.askAi.sidePanel); + if (!sidePanelEnabled) { + return; + } + const isSidepanelSupported = (() => { + const match = docSearchVersion_1.docSearchVersionString.match(/^(?\d+)\.(?\d+)/); + if (!match?.groups) { + return false; + } + const major = Number(match.groups.major); + const minor = Number(match.groups.minor); + return major > 4 || (major === 4 && minor >= 5); + })(); + if (!isSidepanelSupported) { + throw new Error('The askAi.sidePanel feature is only supported in DocSearch v4.5+. ' + + 'Please upgrade to DocSearch v4.5+ or remove the askAi.sidePanel configuration.'); + } +} +function validateThemeConfig({ validate, themeConfig: themeConfigInput, }) { + const themeConfig = validate(exports.Schema, themeConfigInput); + ensureSidepanelSupported(themeConfig); + return themeConfig; +} diff --git a/adapters/docusaurus-theme-search-algolia/package.json b/adapters/docusaurus-theme-search-algolia/package.json new file mode 100644 index 0000000000..9f888ff44d --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/package.json @@ -0,0 +1,68 @@ +{ + "name": "@docsearch/docusaurus-adapter", + "version": "3.9.2", + "description": "Algolia search component for Docusaurus.", + "main": "lib/index.js", + "sideEffects": [ + "*.css" + ], + "exports": { + "./client": { + "types": "./lib/client/index.d.ts", + "default": "./lib/client/index.js" + }, + ".": { + "types": "./src/theme-search-algolia.d.ts", + "default": "./lib/index.js" + } + }, + "types": "src/theme-search-algolia.d.ts", + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/algolia/docsearch.git", + "directory": "adapters/docusaurus-theme-search-algolia" + }, + "license": "MIT", + "scripts": { + "build": "yarn exec tsc --build --force && node ./scripts/copy-assets.mjs && node ./scripts/format-theme.mjs", + "build:clean": "yarn clean && yarn build", + "clean": "rm -rf lib tsconfig.*.tsbuildinfo", + "watch": "run-p -c copy:watch build:watch", + "build:watch": "yarn exec tsc --build --watch", + "copy:watch": "node ./scripts/copy-assets.mjs --watch" + }, + "dependencies": { + "@docsearch/react": "^4.5.3", + "@docusaurus/core": "^3.9.2", + "@docusaurus/plugin-content-docs": "^3.9.2", + "@docusaurus/theme-common": "^3.9.2", + "@docusaurus/theme-translations": "^3.9.2", + "algoliasearch": "^5.37.0", + "algoliasearch-helper": "^3.26.0", + "clsx": "^2.0.0", + "eta": "^2.2.0", + "fs-extra": "^11.1.1", + "joi": "^17.9.2", + "lodash": "^4.17.21", + "tslib": "^2.6.0", + "utility-types": "^3.10.0" + }, + "devDependencies": { + "@docusaurus/core": "^3.9.2", + "@docusaurus/module-type-aliases": "3.9.2", + "@docusaurus/theme-classic": "3.9.2", + "@types/fs-extra": "^11.0.4", + "@types/lodash": "^4.17.10", + "typescript": "5.7.3" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "engines": { + "node": ">=20.0" + } +} diff --git a/adapters/docusaurus-theme-search-algolia/scripts/copy-assets.mjs b/adapters/docusaurus-theme-search-algolia/scripts/copy-assets.mjs new file mode 100644 index 0000000000..8311a85394 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/scripts/copy-assets.mjs @@ -0,0 +1,77 @@ +import fs from 'node:fs'; +import path from 'node:path'; + +import fse from 'fs-extra'; + +const WATCH_FLAG = '--watch'; +const ASSET_EXTENSIONS = new Set(['.css']); +const IGNORED_EXTENSIONS = new Set(['.ts', '.tsx', '.d.ts']); + +const cwd = process.cwd(); +const srcRoot = path.join(cwd, 'src', 'theme'); +const destRoot = path.join(cwd, 'lib', 'theme'); + +async function copyAssetFile(filePath) { + const relativePath = path.relative(srcRoot, filePath); + const destPath = path.join(destRoot, relativePath); + + await fse.ensureDir(path.dirname(destPath)); + await fse.copyFile(filePath, destPath); +} + +async function copyAssetsOnce() { + if (!(await fse.pathExists(srcRoot))) { + return; + } + + const entries = await fse.readdir(srcRoot, { recursive: true }); + const filePaths = entries + .filter((entry) => typeof entry === 'string') + .map((entry) => path.join(srcRoot, entry)) + .filter((entryPath) => fs.statSync(entryPath).isFile()); + + await Promise.all( + filePaths + .filter((filePath) => { + const extension = path.extname(filePath); + if (IGNORED_EXTENSIONS.has(extension)) { + return false; + } + return ASSET_EXTENSIONS.has(extension); + }) + .map((filePath) => copyAssetFile(filePath)), + ); +} + +function watchAssets() { + if (!fs.existsSync(srcRoot)) { + return; + } + + copyAssetsOnce(); + + fs.watch( + srcRoot, + { recursive: true }, + (_eventType, filename) => { + if (!filename) { + return; + } + const filePath = path.join(srcRoot, filename); + const extension = path.extname(filePath); + if (IGNORED_EXTENSIONS.has(extension) || !ASSET_EXTENSIONS.has(extension)) { + return; + } + if (!fs.existsSync(filePath)) { + return; + } + copyAssetFile(filePath); + }, + ); +} + +if (process.argv.includes(WATCH_FLAG)) { + watchAssets(); +} else { + copyAssetsOnce(); +} diff --git a/adapters/docusaurus-theme-search-algolia/scripts/format-theme.mjs b/adapters/docusaurus-theme-search-algolia/scripts/format-theme.mjs new file mode 100644 index 0000000000..e392e57ccb --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/scripts/format-theme.mjs @@ -0,0 +1,17 @@ +import { execSync } from 'node:child_process'; +import { existsSync } from 'node:fs'; +import { glob } from 'glob'; + +const pattern = 'lib/theme/**/*.js'; +const files = glob.sync(pattern); + +if (files.length > 0) { + try { + execSync(`prettier --config ../../.prettierrc --write "${pattern}"`, { + stdio: 'inherit', + }); + } catch (error) { + console.error('Prettier failed:', error.message); + process.exit(1); + } +} diff --git a/adapters/docusaurus-theme-search-algolia/src/__tests__/utils.test.ts b/adapters/docusaurus-theme-search-algolia/src/__tests__/utils.test.ts new file mode 100644 index 0000000000..b3ed86fff0 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/src/__tests__/utils.test.ts @@ -0,0 +1,47 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import {mergeFacetFilters} from '../client/utils'; + +describe('mergeFacetFilters', () => { + it('merges [string,string]', () => { + expect(mergeFacetFilters('f1', 'f2')).toEqual(['f1', 'f2']); + }); + + it('merges [string,array]', () => { + // TODO this looks wrong to me, should be ['f1', ['f2', 'f3']] ? + expect(mergeFacetFilters('f1', ['f2', 'f3'])).toEqual(['f1', 'f2', 'f3']); + }); + + it('merges [string,undefined]', () => { + expect(mergeFacetFilters('f1', undefined)).toEqual('f1'); + }); + + it('merges [undefined,string]', () => { + expect(mergeFacetFilters(undefined, 'f1')).toEqual('f1'); + }); + + it('merges [array,undefined]', () => { + expect(mergeFacetFilters(['f1', 'f2'], undefined)).toEqual(['f1', 'f2']); + }); + + it('merges [undefined,array]', () => { + expect(mergeFacetFilters(undefined, ['f1', 'f2'])).toEqual(['f1', 'f2']); + }); + + it('merges [array,array]', () => { + expect(mergeFacetFilters(['f1'], ['f2'])).toEqual(['f1', 'f2']); + + // TODO this looks wrong to me, should be [['f1', 'f2'], ['f3', 'f4']] ? + expect(mergeFacetFilters(['f1', 'f2'], ['f3', 'f4'])).toEqual([ + 'f1', + 'f2', + 'f3', + 'f4', + ]); + }); +}); diff --git a/adapters/docusaurus-theme-search-algolia/src/__tests__/validateThemeConfig.test.ts b/adapters/docusaurus-theme-search-algolia/src/__tests__/validateThemeConfig.test.ts new file mode 100644 index 0000000000..9cffb5f855 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/src/__tests__/validateThemeConfig.test.ts @@ -0,0 +1,687 @@ +/** + * Copyright (c) Facebook, Inc. And its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import type { ThemeConfig, UserThemeConfig } from '@docsearch/docusaurus-adapter'; +import type Joi from 'joi'; + +import { DEFAULT_CONFIG, validateThemeConfig } from '../validateThemeConfig'; + +// mock DocSearch to a v4.5 version to allow AskAI sidepanel tests to pass +jest.mock('@docsearch/react', () => ({ version: '4.5.3' })); + +type AlgoliaInput = UserThemeConfig['algolia']; +type DocSearchInput = UserThemeConfig['docsearch']; + +function testValidateThemeConfigWithUserThemeConfig(themeConfig: UserThemeConfig) { + function validate(schema: Joi.ObjectSchema<{ [key: string]: unknown }>, cfg: { [key: string]: unknown }) { + const { value, error } = schema.validate(cfg, { + convert: false, + }); + if (error) { + throw error; + } + return value as ThemeConfig; + } + + return validateThemeConfig({ + themeConfig: themeConfig as ThemeConfig, + validate, + }); +} + +function testValidateThemeConfig(algolia: AlgoliaInput) { + return testValidateThemeConfigWithUserThemeConfig(algolia ? { algolia } : {}); +} + +function testValidateThemeConfigDocSearch(docsearch: DocSearchInput) { + return testValidateThemeConfigWithUserThemeConfig(docsearch ? { docsearch } : {}); +} + +describe('validateThemeConfig', () => { + it('minimal config', () => { + const algolia: AlgoliaInput = { + indexName: 'index', + apiKey: 'apiKey', + appId: 'BH4D9OD16A', + }; + expect(testValidateThemeConfig(algolia)).toEqual({ + algolia: { + ...DEFAULT_CONFIG, + ...algolia, + }, + }); + }); + + it('unknown attributes', () => { + const algolia: AlgoliaInput = { + indexName: 'index', + apiKey: 'apiKey', + // @ts-expect-error: expected type error! + unknownKey: 'unknownKey', + appId: 'BH4D9OD16A', + }; + expect(testValidateThemeConfig(algolia)).toEqual({ + algolia: { + ...DEFAULT_CONFIG, + ...algolia, + }, + }); + }); + + it('undefined config', () => { + const algolia = undefined; + expect(() => testValidateThemeConfig(algolia)).toThrowErrorMatchingInlineSnapshot( + `""themeConfig.algolia" is required"`, + ); + }); + + it('empty config', () => { + expect(() => + testValidateThemeConfig( + // @ts-expect-error: expected type error! + {}, + ), + ).toThrowErrorMatchingInlineSnapshot( + `""algolia.appId" is required. If you haven't migrated to the new DocSearch infra, please refer to the blog post for instructions: https://docusaurus.io/blog/2021/11/21/algolia-docsearch-migration"`, + ); + }); + + it('missing indexName config', () => { + // @ts-expect-error: expected type error! + const algolia: AlgoliaInput = { + apiKey: 'apiKey', + appId: 'BH4D9OD16A', + }; + expect(() => testValidateThemeConfig(algolia)).toThrowErrorMatchingInlineSnapshot( + `""algolia.indexName" is required"`, + ); + }); + + it('missing apiKey config', () => { + // @ts-expect-error: expected type error! + const algolia: AlgoliaInput = { + indexName: 'indexName', + appId: 'BH4D9OD16A', + }; + expect(() => testValidateThemeConfig(algolia)).toThrowErrorMatchingInlineSnapshot(`""algolia.apiKey" is required"`); + }); + + it('missing appId config', () => { + // @ts-expect-error: expected type error! + const algolia: AlgoliaInput = { + indexName: 'indexName', + apiKey: 'apiKey', + }; + expect(() => testValidateThemeConfig(algolia)).toThrowErrorMatchingInlineSnapshot( + `""algolia.appId" is required. If you haven't migrated to the new DocSearch infra, please refer to the blog post for instructions: https://docusaurus.io/blog/2021/11/21/algolia-docsearch-migration"`, + ); + }); + + it('contextualSearch config', () => { + const algolia: AlgoliaInput = { + appId: 'BH4D9OD16A', + indexName: 'index', + apiKey: 'apiKey', + contextualSearch: true, + }; + expect(testValidateThemeConfig(algolia)).toEqual({ + algolia: { + ...DEFAULT_CONFIG, + ...algolia, + }, + }); + }); + + it('externalUrlRegex config', () => { + const algolia: AlgoliaInput = { + appId: 'BH4D9OD16A', + indexName: 'index', + apiKey: 'apiKey', + externalUrlRegex: 'http://external-domain.com', + }; + expect(testValidateThemeConfig(algolia)).toEqual({ + algolia: { + ...DEFAULT_CONFIG, + ...algolia, + }, + }); + }); + + describe('replaceSearchResultPathname', () => { + it('escapes from string', () => { + const algolia: AlgoliaInput = { + appId: 'BH4D9OD16A', + indexName: 'index', + apiKey: 'apiKey', + replaceSearchResultPathname: { + from: '/docs/some-\\special-.[regexp]{chars*}', + to: '/abc', + }, + }; + expect(testValidateThemeConfig(algolia)).toEqual({ + algolia: { + ...DEFAULT_CONFIG, + ...algolia, + replaceSearchResultPathname: { + from: '/docs/some\\x2d\\\\special\\x2d\\.\\[regexp\\]\\{chars\\*\\}', + to: '/abc', + }, + }, + }); + }); + + it('converts from regexp to string', () => { + const algolia: AlgoliaInput = { + appId: 'BH4D9OD16A', + indexName: 'index', + apiKey: 'apiKey', + replaceSearchResultPathname: { + // @ts-expect-error: test regexp input + from: /^\/docs\/(?:1\.0|next)/, + to: '/abc', + }, + }; + + expect(testValidateThemeConfig(algolia)).toEqual({ + algolia: { + ...DEFAULT_CONFIG, + ...algolia, + replaceSearchResultPathname: { + from: '^\\/docs\\/(?:1\\.0|next)', + to: '/abc', + }, + }, + }); + }); + }); + + it('searchParameters.facetFilters search config', () => { + const algolia: AlgoliaInput = { + appId: 'BH4D9OD16A', + indexName: 'index', + apiKey: 'apiKey', + searchParameters: { + facetFilters: ['version:1.0'], + }, + }; + expect(testValidateThemeConfig(algolia)).toEqual({ + algolia: { + ...DEFAULT_CONFIG, + ...algolia, + }, + }); + }); + + describe('askAi config validation', () => { + it('accepts string format (assistantId)', () => { + const algolia: AlgoliaInput = { + appId: 'BH4D9OD16A', + indexName: 'index', + apiKey: 'apiKey', + askAi: 'my-assistant-id', + }; + expect(testValidateThemeConfig(algolia)).toEqual({ + algolia: { + ...DEFAULT_CONFIG, + ...algolia, + askAi: { + assistantId: 'my-assistant-id', + indexName: algolia.indexName, + apiKey: algolia.apiKey, + appId: algolia.appId, + }, + }, + }); + }); + + it('accepts minimal object format', () => { + const algolia: AlgoliaInput = { + appId: 'BH4D9OD16A', + indexName: 'index', + apiKey: 'apiKey', + askAi: { + assistantId: 'my-assistant-id', + }, + }; + expect(testValidateThemeConfig(algolia)).toEqual({ + algolia: { + ...DEFAULT_CONFIG, + ...algolia, + askAi: { + assistantId: 'my-assistant-id', + indexName: algolia.indexName, + apiKey: algolia.apiKey, + appId: algolia.appId, + }, + }, + }); + }); + + it('accepts sidePanel as true', () => { + const algolia: AlgoliaInput = { + appId: 'BH4D9OD16A', + indexName: 'index', + apiKey: 'apiKey', + askAi: { + assistantId: 'my-assistant-id', + sidePanel: true, + }, + }; + expect(testValidateThemeConfig(algolia)).toEqual({ + algolia: { + ...DEFAULT_CONFIG, + ...algolia, + askAi: { + assistantId: 'my-assistant-id', + indexName: algolia.indexName, + apiKey: algolia.apiKey, + appId: algolia.appId, + sidePanel: true, + }, + }, + }); + }); + + it('accepts sidePanel as object', () => { + const algolia: AlgoliaInput = { + appId: 'BH4D9OD16A', + indexName: 'index', + apiKey: 'apiKey', + askAi: { + assistantId: 'my-assistant-id', + sidePanel: { + keyboardShortcuts: { + 'Ctrl/Cmd+I': false, + }, + variant: 'inline', + side: 'left', + width: '420px', + expandedWidth: 640, + pushSelector: '#__docusaurus', + }, + }, + }; + const sidePanelValue = ( + (algolia as NonNullable).askAi as Exclude['askAi'], string> + )?.sidePanel; + expect(testValidateThemeConfig(algolia)).toEqual({ + algolia: { + ...DEFAULT_CONFIG, + ...algolia, + askAi: { + assistantId: 'my-assistant-id', + indexName: algolia.indexName, + apiKey: algolia.apiKey, + appId: algolia.appId, + sidePanel: sidePanelValue, + }, + }, + }); + }); + + it('accepts sidePanel.hideButton as true', () => { + const algolia: AlgoliaInput = { + appId: 'BH4D9OD16A', + indexName: 'index', + apiKey: 'apiKey', + askAi: { + assistantId: 'my-assistant-id', + sidePanel: { + hideButton: true, + }, + }, + }; + expect(testValidateThemeConfig(algolia)).toEqual({ + algolia: { + ...DEFAULT_CONFIG, + ...algolia, + askAi: { + assistantId: 'my-assistant-id', + indexName: algolia.indexName, + apiKey: algolia.apiKey, + appId: algolia.appId, + sidePanel: { + hideButton: true, + }, + }, + }, + }); + }); + + it('accepts full object format', () => { + const algolia: AlgoliaInput = { + appId: 'BH4D9OD16A', + indexName: 'index', + apiKey: 'apiKey', + askAi: { + indexName: 'ai-index', + apiKey: 'ai-apiKey', + appId: 'ai-appId', + assistantId: 'my-assistant-id', + }, + }; + expect(testValidateThemeConfig(algolia)).toEqual({ + algolia: { + ...DEFAULT_CONFIG, + ...algolia, + }, + }); + }); + + it('accepts agentStudio=true with per-index searchParameters', () => { + const algolia: AlgoliaInput = { + appId: 'BH4D9OD16A', + indexName: 'index', + apiKey: 'apiKey', + askAi: { + assistantId: 'my-assistant-id', + agentStudio: true, + searchParameters: { + index: { + distinct: false, + }, + }, + }, + }; + expect(testValidateThemeConfig(algolia)).toEqual({ + algolia: { + ...DEFAULT_CONFIG, + ...algolia, + askAi: { + assistantId: 'my-assistant-id', + indexName: algolia.indexName, + apiKey: algolia.apiKey, + appId: algolia.appId, + agentStudio: true, + searchParameters: { + index: { + distinct: false, + }, + }, + }, + }, + }); + }); + + it('rejects invalid type', () => { + const algolia: AlgoliaInput = { + appId: 'BH4D9OD16A', + indexName: 'index', + apiKey: 'apiKey', + // @ts-expect-error: expected type error + askAi: 123, // Invalid: should be string or object + }; + expect(() => testValidateThemeConfig(algolia)).toThrowErrorMatchingInlineSnapshot( + `"askAi must be either a string (assistantId) or an object with indexName, apiKey, appId, and assistantId"`, + ); + }); + + it('rejects empty askAi', () => { + const algolia: AlgoliaInput = { + appId: 'BH4D9OD16A', + indexName: 'index', + apiKey: 'apiKey', + // @ts-expect-error: expected type error: missing mandatory fields + askAi: {}, + }; + expect(() => testValidateThemeConfig(algolia)).toThrowErrorMatchingInlineSnapshot( + `""algolia.askAi.assistantId" is required"`, + ); + }); + + it('accepts undefined askAi', () => { + const algolia: AlgoliaInput = { + appId: 'BH4D9OD16A', + indexName: 'index', + apiKey: 'apiKey', + }; + expect(testValidateThemeConfig(algolia)).toEqual({ + algolia: { + ...DEFAULT_CONFIG, + ...algolia, + }, + }); + }); + + describe('Ask AI search parameters', () => { + it('accepts Ask AI facet filters', () => { + const algolia = { + appId: 'BH4D9OD16A', + indexName: 'index', + apiKey: 'apiKey', + askAi: { + indexName: 'ai-index', + apiKey: 'ai-apiKey', + appId: 'ai-appId', + assistantId: 'my-assistant-id', + searchParameters: { + facetFilters: ['version:1.0'], + }, + }, + } satisfies AlgoliaInput; + + expect(testValidateThemeConfig(algolia)).toEqual({ + algolia: { + ...DEFAULT_CONFIG, + ...algolia, + }, + }); + }); + + it('accepts distinct Ask AI / algolia facet filters', () => { + const algolia = { + appId: 'BH4D9OD16A', + indexName: 'index', + apiKey: 'apiKey', + searchParameters: { + facetFilters: ['version:algolia'], + }, + askAi: { + indexName: 'ai-index', + apiKey: 'ai-apiKey', + appId: 'ai-appId', + assistantId: 'my-assistant-id', + searchParameters: { + facetFilters: ['version:askAi'], + }, + }, + } satisfies AlgoliaInput; + + expect(testValidateThemeConfig(algolia)).toEqual({ + algolia: { + ...DEFAULT_CONFIG, + ...algolia, + }, + }); + }); + + it('falls back to algolia facet filters', () => { + const algolia = { + appId: 'BH4D9OD16A', + indexName: 'index', + apiKey: 'apiKey', + searchParameters: { + facetFilters: ['version:1.0'], + }, + askAi: { + indexName: 'ai-index', + apiKey: 'ai-apiKey', + appId: 'ai-appId', + assistantId: 'my-assistant-id', + searchParameters: {}, + }, + } satisfies AlgoliaInput; + + expect(testValidateThemeConfig(algolia)).toEqual({ + algolia: { + ...DEFAULT_CONFIG, + ...algolia, + askAi: { + ...algolia.askAi, + searchParameters: { + facetFilters: ['version:1.0'], + }, + }, + }, + }); + }); + + it('falls back to algolia facet filters with AskAI string format (assistantId)', () => { + const algolia = { + appId: 'BH4D9OD16A', + indexName: 'index', + apiKey: 'apiKey', + searchParameters: { + facetFilters: ['version:1.0'], + }, + askAi: 'my-assistant-id', + } satisfies AlgoliaInput; + + expect(testValidateThemeConfig(algolia)).toEqual({ + algolia: { + ...DEFAULT_CONFIG, + ...algolia, + askAi: { + indexName: algolia.indexName, + apiKey: algolia.apiKey, + appId: algolia.appId, + assistantId: 'my-assistant-id', + searchParameters: { + facetFilters: ['version:1.0'], + }, + }, + }, + }); + }); + }); + + describe('Ask AI suggestedQuestions', () => { + it('accepts suggestedQuestions as true', () => { + const algolia = { + appId: 'BH4D9OD16A', + indexName: 'index', + apiKey: 'apiKey', + askAi: { + assistantId: 'my-assistant-id', + suggestedQuestions: true, + }, + } satisfies AlgoliaInput; + + expect(testValidateThemeConfig(algolia)).toEqual({ + algolia: { + ...DEFAULT_CONFIG, + ...algolia, + askAi: { + indexName: algolia.indexName, + apiKey: algolia.apiKey, + appId: algolia.appId, + assistantId: 'my-assistant-id', + suggestedQuestions: true, + }, + }, + }); + }); + + it('accepts suggestedQuestions as false', () => { + const algolia = { + appId: 'BH4D9OD16A', + indexName: 'index', + apiKey: 'apiKey', + askAi: { + assistantId: 'my-assistant-id', + suggestedQuestions: false, + }, + } satisfies AlgoliaInput; + + expect(testValidateThemeConfig(algolia)).toEqual({ + algolia: { + ...DEFAULT_CONFIG, + ...algolia, + askAi: { + indexName: algolia.indexName, + apiKey: algolia.apiKey, + appId: algolia.appId, + assistantId: 'my-assistant-id', + suggestedQuestions: false, + }, + }, + }); + }); + + it('rejects invalid suggestedQuestions type', () => { + const algolia: AlgoliaInput = { + appId: 'BH4D9OD16A', + indexName: 'index', + apiKey: 'apiKey', + askAi: { + assistantId: 'my-assistant-id', + // @ts-expect-error: expected type error + suggestedQuestions: 'invalid-string', + }, + }; + expect(() => testValidateThemeConfig(algolia)).toThrowErrorMatchingInlineSnapshot( + `""algolia.askAi.suggestedQuestions" must be a boolean"`, + ); + }); + + it('rejects suggestedQuestions as number', () => { + const algolia: AlgoliaInput = { + appId: 'BH4D9OD16A', + indexName: 'index', + apiKey: 'apiKey', + askAi: { + assistantId: 'my-assistant-id', + // @ts-expect-error: expected type error + suggestedQuestions: 123, + }, + }; + expect(() => testValidateThemeConfig(algolia)).toThrowErrorMatchingInlineSnapshot( + `""algolia.askAi.suggestedQuestions" must be a boolean"`, + ); + }); + }); + }); + + describe('theme config keys', () => { + it('accepts themeConfig.docsearch (preferred)', () => { + const docsearch: DocSearchInput = { + appId: 'BH4D9OD16A', + indexName: 'index', + apiKey: 'apiKey', + }; + + expect(testValidateThemeConfigDocSearch(docsearch)).toEqual({ + docsearch: { + ...DEFAULT_CONFIG, + ...docsearch, + }, + }); + }); + + it('rejects defining both themeConfig.docsearch and themeConfig.algolia', () => { + const docsearch: DocSearchInput = { + appId: 'BH4D9OD16A', + indexName: 'index', + apiKey: 'apiKey', + }; + const algolia: AlgoliaInput = { + appId: 'BH4D9OD16A', + indexName: 'index', + apiKey: 'apiKey', + }; + + expect(() => + testValidateThemeConfigWithUserThemeConfig({ + docsearch, + algolia, + }), + ).toThrowErrorMatchingInlineSnapshot( + `"Please provide either \\"themeConfig.docsearch\\" (preferred) or \\"themeConfig.algolia\\" (legacy), but not both."`, + ); + }); + }); +}); diff --git a/adapters/docusaurus-theme-search-algolia/src/client/index.ts b/adapters/docusaurus-theme-search-algolia/src/client/index.ts new file mode 100644 index 0000000000..53644f1216 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/src/client/index.ts @@ -0,0 +1,16 @@ +/** + * Copyright (c) Facebook, Inc. And its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +export { useAlgoliaThemeConfig } from './useAlgoliaThemeConfig'; +export { + useAlgoliaContextualFacetFilters, + useAlgoliaContextualFacetFiltersIfEnabled, +} from './useAlgoliaContextualFacetFilters'; +export { useSearchResultUrlProcessor } from './useSearchResultUrlProcessor'; +export { useAlgoliaAskAi } from './useAlgoliaAskAi'; +export { useAlgoliaAskAiSidepanel } from './useAlgoliaAskAiSidepanel'; +export { mergeFacetFilters } from './utils'; diff --git a/adapters/docusaurus-theme-search-algolia/src/client/useAlgoliaAskAi.ts b/adapters/docusaurus-theme-search-algolia/src/client/useAlgoliaAskAi.ts new file mode 100644 index 0000000000..6c47cb7c85 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/src/client/useAlgoliaAskAi.ts @@ -0,0 +1,128 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import {useCallback, useMemo, useState} from 'react'; +import translations from '@theme/SearchTranslations'; +import {useAlgoliaContextualFacetFiltersIfEnabled} from './useAlgoliaContextualFacetFilters'; +import {mergeFacetFilters} from './utils'; +import type {AskAiConfig} from '@docsearch/docusaurus-adapter'; +import type { + DocSearchModalProps, + DocSearchTranslations, +} from '@docsearch/react'; +import type {FacetFilters} from 'algoliasearch/lite'; + +// The minimal props the hook needs from DocSearch +interface DocSearchPropsLite { + indexName: string; + apiKey: string; + appId: string; + placeholder?: string; + translations?: DocSearchTranslations; + searchParameters?: DocSearchModalProps['searchParameters']; + askAi?: AskAiConfig; +} + +type OnAskAiToggle = NonNullable; +type AskAiConfigWithoutSidePanel = Omit; +type DocSearchAskAi = Exclude; +type DocSearchModalPropsLite = Partial>; + +type UseAskAiResult = { + canHandleAskAi: boolean; + isAskAiActive: boolean; + currentPlaceholder: string | undefined; + onAskAiToggle: OnAskAiToggle; + askAi?: AskAiConfig; + extraAskAiProps: DocSearchModalPropsLite & { + askAi?: DocSearchAskAi; + canHandleAskAi?: boolean; + isAskAiActive?: boolean; + onAskAiToggle?: OnAskAiToggle; + }; +}; + +// We need to apply contextualSearch facetFilters to AskAI filters +// This can't be done at config normalization time because contextual filters +// can only be determined at runtime +function applyAskAiContextualSearch( + askAi: AskAiConfig | undefined, + contextualSearchFilters: FacetFilters | undefined, +): AskAiConfig | undefined { + if (!askAi) { + return undefined; + } + if (askAi.agentStudio === true) { + return askAi; + } + if (!contextualSearchFilters) { + return askAi; + } + const askAiFacetFilters = askAi.searchParameters?.facetFilters; + return { + ...askAi, + searchParameters: { + ...askAi.searchParameters, + facetFilters: mergeFacetFilters( + askAiFacetFilters, + contextualSearchFilters, + ), + }, + }; +} + +export function useAlgoliaAskAi(props: DocSearchPropsLite): UseAskAiResult { + const [isAskAiActive, setIsAskAiActive] = useState(false); + const contextualSearchFilters = useAlgoliaContextualFacetFiltersIfEnabled(); + + const askAi = useMemo(() => { + return applyAskAiContextualSearch(props.askAi, contextualSearchFilters); + }, [props.askAi, contextualSearchFilters]); + + const askAiWithoutSidePanel = useMemo< + AskAiConfigWithoutSidePanel | undefined + >(() => { + if (!askAi) { + return undefined; + } + const {sidePanel: _sidePanel, ...docsearchAskAi} = askAi; + return docsearchAskAi; + }, [askAi]); + + const modalAskAi = useMemo(() => { + if (!askAiWithoutSidePanel) { + return undefined; + } + return askAiWithoutSidePanel as DocSearchAskAi; + }, [askAiWithoutSidePanel]); + + const canHandleAskAi = Boolean(askAi); + + const currentPlaceholder = isAskAiActive + ? translations.modal?.searchBox?.placeholderTextAskAi + : translations.modal?.searchBox?.placeholderText || props?.placeholder; + + const onAskAiToggle = useCallback((askAiToggle: boolean) => { + setIsAskAiActive(askAiToggle); + }, []); + + const extraAskAiProps: UseAskAiResult['extraAskAiProps'] = { + askAi: modalAskAi, + canHandleAskAi, + isAskAiActive, + onAskAiToggle, + }; + + return { + canHandleAskAi, + isAskAiActive, + currentPlaceholder, + onAskAiToggle, + askAi, + extraAskAiProps, + }; +} diff --git a/adapters/docusaurus-theme-search-algolia/src/client/useAlgoliaAskAiSidepanel.ts b/adapters/docusaurus-theme-search-algolia/src/client/useAlgoliaAskAiSidepanel.ts new file mode 100644 index 0000000000..9fa7e74007 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/src/client/useAlgoliaAskAiSidepanel.ts @@ -0,0 +1,122 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import {useCallback, useMemo, useRef, useState} from 'react'; +import type {AskAiConfig} from '@docsearch/docusaurus-adapter'; + +type AskAiTogglePayload = { + query: string; + messageId?: string; + suggestedQuestionId?: string; +}; + +type SidepanelOptions = Exclude, boolean>; + +type UseAlgoliaAskAiSidepanelParams = { + askAiConfig?: AskAiConfig; + importSidepanel: () => Promise; +}; + +type UseAlgoliaAskAiSidepanelResult = { + sidePanelEnabled: boolean; + showSidepanelButton: boolean; + sidePanelOptions?: SidepanelOptions; + sidePanelAgentStudio: boolean; + sidepanelPortalContainer: HTMLElement | null; + isSidepanelOpen: boolean; + sidepanelInitialMessage?: AskAiTogglePayload; + openSidepanel: (payload?: AskAiTogglePayload) => void; + closeSidepanel: () => void; + toggleSidepanel: () => void; + handleSidepanelOpen: () => void; + loadSidepanel: () => Promise; +}; + +export function useAlgoliaAskAiSidepanel({ + askAiConfig, + importSidepanel, +}: UseAlgoliaAskAiSidepanelParams): UseAlgoliaAskAiSidepanelResult { + const [isSidepanelOpen, setIsSidepanelOpen] = useState(false); + const [sidepanelInitialMessage, setSidepanelInitialMessage] = useState< + AskAiTogglePayload | undefined + >(undefined); + const openRequestId = useRef(0); + + const sidePanelConfig = askAiConfig?.sidePanel; + const sidePanelEnabled = Boolean(sidePanelConfig); + const sidePanelOptions = + typeof sidePanelConfig === 'object' ? sidePanelConfig : undefined; + const showSidepanelButton = + sidePanelEnabled && sidePanelOptions?.hideButton !== true; + const sidePanelAgentStudio = askAiConfig?.agentStudio ?? false; + + const sidepanelPortalContainer = useMemo(() => { + return typeof document !== 'undefined' ? document.body : null; + }, []); + + const loadSidepanel = useCallback(() => { + return importSidepanel(); + }, [importSidepanel]); + + const openSidepanel = useCallback( + (payload?: AskAiTogglePayload) => { + if (!sidePanelEnabled || !askAiConfig) { + return; + } + const initialMessage = + payload?.query && payload.query.length > 0 + ? { + query: payload.query, + messageId: payload.messageId, + suggestedQuestionId: payload.suggestedQuestionId, + } + : undefined; + const requestId = openRequestId.current + 1; + openRequestId.current = requestId; + setSidepanelInitialMessage(initialMessage); + loadSidepanel().then(() => { + if (openRequestId.current === requestId) { + setIsSidepanelOpen(true); + } + }); + }, + [askAiConfig, loadSidepanel, sidePanelEnabled], + ); + + const closeSidepanel = useCallback(() => { + openRequestId.current += 1; + setIsSidepanelOpen(false); + setSidepanelInitialMessage(undefined); + }, []); + + const toggleSidepanel = useCallback(() => { + if (isSidepanelOpen) { + closeSidepanel(); + return; + } + openSidepanel(); + }, [closeSidepanel, isSidepanelOpen, openSidepanel]); + + const handleSidepanelOpen = useCallback(() => { + setIsSidepanelOpen(true); + }, []); + + return { + sidePanelEnabled, + showSidepanelButton, + sidePanelOptions, + sidePanelAgentStudio, + sidepanelPortalContainer, + isSidepanelOpen, + sidepanelInitialMessage, + openSidepanel, + closeSidepanel, + toggleSidepanel, + handleSidepanelOpen, + loadSidepanel, + }; +} diff --git a/adapters/docusaurus-theme-search-algolia/src/client/useAlgoliaContextualFacetFilters.ts b/adapters/docusaurus-theme-search-algolia/src/client/useAlgoliaContextualFacetFilters.ts new file mode 100644 index 0000000000..144eed4a88 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/src/client/useAlgoliaContextualFacetFilters.ts @@ -0,0 +1,52 @@ +/** + * Copyright (c) Facebook, Inc. And its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import { useDocsContextualSearchTags } from '@docusaurus/plugin-content-docs/client'; +import { DEFAULT_SEARCH_TAG } from '@docusaurus/theme-common/internal'; +import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; +import type { FacetFilters } from 'algoliasearch/lite'; + +import { useAlgoliaThemeConfig } from './useAlgoliaThemeConfig'; + +function useSearchTags() { + try { + // only docs have custom search tags per version + const docsTags = useDocsContextualSearchTags(); + return [DEFAULT_SEARCH_TAG, ...docsTags]; + } catch (error) { + // In monorepo setups, duplicated docs plugin instances can cause + // React context lookup to fail during SSG. Fall back to default tags + // instead of crashing the whole build. + if (error instanceof Error && error.name === 'ReactContextError') { + return [DEFAULT_SEARCH_TAG]; + } + throw error; + } +} + +// Translate search-engine agnostic search tags to Algolia search filters +export function useAlgoliaContextualFacetFilters(): FacetFilters { + const locale = useDocusaurusContext().i18n.currentLocale; + const tags = useSearchTags(); + + // Seems safe to convert locale->language, see AlgoliaSearchMetadata comment + const languageFilter = `language:${locale}`; + + const tagsFilter = tags.map((tag) => `docusaurus_tag:${tag}`); + + return [languageFilter, tagsFilter]; +} + +export function useAlgoliaContextualFacetFiltersIfEnabled(): FacetFilters | undefined { + const { contextualSearch } = useAlgoliaThemeConfig(); + const facetFilters = useAlgoliaContextualFacetFilters(); + if (contextualSearch) { + return facetFilters; + } + + return undefined; +} diff --git a/adapters/docusaurus-theme-search-algolia/src/client/useAlgoliaThemeConfig.ts b/adapters/docusaurus-theme-search-algolia/src/client/useAlgoliaThemeConfig.ts new file mode 100644 index 0000000000..9131f55f6b --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/src/client/useAlgoliaThemeConfig.ts @@ -0,0 +1,17 @@ +/** + * Copyright (c) Facebook, Inc. And its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +import type { ThemeConfig, ThemeConfigAlgolia } from '@docsearch/docusaurus-adapter'; +import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; + +import { getDocSearchConfig } from '../getDocSearchConfig'; + +export function useAlgoliaThemeConfig(): ThemeConfigAlgolia { + const { + siteConfig: { themeConfig }, + } = useDocusaurusContext(); + return getDocSearchConfig(themeConfig as ThemeConfig); +} diff --git a/adapters/docusaurus-theme-search-algolia/src/client/useSearchResultUrlProcessor.ts b/adapters/docusaurus-theme-search-algolia/src/client/useSearchResultUrlProcessor.ts new file mode 100644 index 0000000000..17652ebacd --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/src/client/useSearchResultUrlProcessor.ts @@ -0,0 +1,48 @@ +/** + * Copyright (c) Facebook, Inc. And its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import type { ThemeConfigAlgolia } from '@docsearch/docusaurus-adapter'; +import { isRegexpStringMatch } from '@docusaurus/theme-common'; +import { useBaseUrlUtils } from '@docusaurus/useBaseUrl'; +import { useCallback } from 'react'; + +import { useAlgoliaThemeConfig } from './useAlgoliaThemeConfig'; + +function replacePathname( + pathname: string, + replaceSearchResultPathname: ThemeConfigAlgolia['replaceSearchResultPathname'], +): string { + return replaceSearchResultPathname + ? pathname.replaceAll(new RegExp(replaceSearchResultPathname.from, 'g'), replaceSearchResultPathname.to) + : pathname; +} + +/** + * Process the search result url from Algolia to its final form, ready to be + * navigated to or used as a link. + */ +export function useSearchResultUrlProcessor(): (url: string) => string { + const { withBaseUrl } = useBaseUrlUtils(); + const { externalUrlRegex, replaceSearchResultPathname } = useAlgoliaThemeConfig(); + + return useCallback( + (url: string) => { + const parsedURL = new URL(url); + + // Algolia contains an external domain => navigate to URL + if (isRegexpStringMatch(externalUrlRegex, parsedURL.href)) { + return url; + } + + // Otherwise => transform to relative URL for SPA navigation + const relativeUrl = `${parsedURL.pathname}${parsedURL.search}${parsedURL.hash}`; + + return withBaseUrl(replacePathname(relativeUrl, replaceSearchResultPathname)); + }, + [withBaseUrl, externalUrlRegex, replaceSearchResultPathname], + ); +} diff --git a/adapters/docusaurus-theme-search-algolia/src/client/utils.ts b/adapters/docusaurus-theme-search-algolia/src/client/utils.ts new file mode 100644 index 0000000000..a6581f4511 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/src/client/utils.ts @@ -0,0 +1,27 @@ +/** + * Copyright (c) Facebook, Inc. And its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import type { FacetFilters } from 'algoliasearch/lite'; + +export function mergeFacetFilters(f1: FacetFilters, f2: FacetFilters): FacetFilters; + +export function mergeFacetFilters(f1: FacetFilters | undefined, f2: FacetFilters | undefined): FacetFilters | undefined; + +export function mergeFacetFilters( + f1: FacetFilters | undefined, + f2: FacetFilters | undefined, +): FacetFilters | undefined { + if (f1 === undefined) { + return f2; + } + if (f2 === undefined) { + return f1; + } + + const normalize = (f: FacetFilters): FacetFilters => (typeof f === 'string' ? [f] : f); + return [...normalize(f1), ...normalize(f2)]; +} diff --git a/adapters/docusaurus-theme-search-algolia/src/deps.d.ts b/adapters/docusaurus-theme-search-algolia/src/deps.d.ts new file mode 100644 index 0000000000..86b08732e3 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/src/deps.d.ts @@ -0,0 +1,21 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +declare module '@docsearch/react/modal'; +declare module '@docsearch/react/style'; +declare module '@docsearch/react/style/sidepanel'; + + +// TODO incompatible declaration file +declare module 'eta' { + export const defaultConfig: object; + + export function compile( + template: string, + options?: object, + ): (data: object, config: object) => string; +} diff --git a/adapters/docusaurus-theme-search-algolia/src/docSearchVersion.ts b/adapters/docusaurus-theme-search-algolia/src/docSearchVersion.ts new file mode 100644 index 0000000000..a88ac04e8c --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/src/docSearchVersion.ts @@ -0,0 +1,10 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import {version as docSearchVersion} from '@docsearch/react'; + +export const docSearchVersionString = docSearchVersion; diff --git a/adapters/docusaurus-theme-search-algolia/src/getDocSearchConfig.ts b/adapters/docusaurus-theme-search-algolia/src/getDocSearchConfig.ts new file mode 100644 index 0000000000..95e678eb27 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/src/getDocSearchConfig.ts @@ -0,0 +1,26 @@ +/** + * Copyright (c) Facebook, Inc. And its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import type { ThemeConfig, ThemeConfigAlgolia } from '@docsearch/docusaurus-adapter'; + +export function hasLegacyAlgoliaConfig(themeConfig: ThemeConfig): boolean { + return Boolean(themeConfig.algolia); +} + +export function getDocSearchConfig(themeConfig: ThemeConfig): ThemeConfigAlgolia { + if (themeConfig.docsearch) { + return themeConfig.docsearch; + } + + if (themeConfig.algolia) { + return themeConfig.algolia; + } + + throw new Error( + 'No DocSearch config found. Please provide "themeConfig.docsearch" (preferred) or "themeConfig.algolia" (legacy).', + ); +} diff --git a/adapters/docusaurus-theme-search-algolia/src/index.ts b/adapters/docusaurus-theme-search-algolia/src/index.ts new file mode 100644 index 0000000000..9aea5e3148 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/src/index.ts @@ -0,0 +1,84 @@ +/** + * Copyright (c) Facebook, Inc. And its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import type { ThemeConfig } from '@docsearch/docusaurus-adapter'; +import { readDefaultCodeTranslationMessages } from '@docusaurus/theme-translations'; +import type { LoadContext, Plugin } from '@docusaurus/types'; + +import { getDocSearchConfig, hasLegacyAlgoliaConfig } from './getDocSearchConfig'; +import { createOpenSearchFile, createOpenSearchHeadTags, shouldCreateOpenSearchFile } from './opensearch'; +import { normalizeUrl } from './utils'; + +function hasClassicPreset(context: LoadContext): boolean { + return (context.siteConfig.presets ?? []).some((preset) => { + if (typeof preset === 'string') { + return preset === 'classic' || preset === '@docusaurus/preset-classic'; + } + + if (Array.isArray(preset)) { + return preset[0] === 'classic' || preset[0] === '@docusaurus/preset-classic'; + } + + return false; + }); +} + +export default function themeSearchAlgolia(context: LoadContext): Plugin { + const { + baseUrl, + siteConfig: { themeConfig }, + i18n: { currentLocale }, + } = context; + const { searchPagePath } = getDocSearchConfig(themeConfig as ThemeConfig); + const classicPresetWithLegacyAlgoliaConfig = + hasClassicPreset(context) && hasLegacyAlgoliaConfig(themeConfig as ThemeConfig); + + return { + name: 'docsearch-docusaurus-algolia-search', + + getThemePath() { + return '../lib/theme'; + }, + getTypeScriptThemePath() { + return '../src/theme'; + }, + + getDefaultCodeTranslationMessages() { + return readDefaultCodeTranslationMessages({ + locale: currentLocale, + name: 'theme-search-algolia', + }); + }, + + contentLoaded({ actions: { addRoute } }) { + // The classic preset adds /search through @docusaurus/theme-search-algolia, + // but only when the legacy "themeConfig.algolia" key is used. + if (searchPagePath && !classicPresetWithLegacyAlgoliaConfig) { + addRoute({ + path: normalizeUrl([baseUrl, searchPagePath]), + component: '@theme/SearchPage', + exact: true, + }); + } + }, + + async postBuild() { + if (shouldCreateOpenSearchFile({ context })) { + await createOpenSearchFile({ context }); + } + }, + + injectHtmlTags() { + if (shouldCreateOpenSearchFile({ context })) { + return { headTags: createOpenSearchHeadTags({ context }) }; + } + return {}; + }, + }; +} + +export { validateThemeConfig } from './validateThemeConfig'; diff --git a/adapters/docusaurus-theme-search-algolia/src/opensearch.ts b/adapters/docusaurus-theme-search-algolia/src/opensearch.ts new file mode 100644 index 0000000000..64b2459a9e --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/src/opensearch.ts @@ -0,0 +1,101 @@ +/** + * Copyright (c) Facebook, Inc. And its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import path from 'path'; + +import type { ThemeConfig } from '@docsearch/docusaurus-adapter'; +import type { HtmlTags, LoadContext } from '@docusaurus/types'; +import { defaultConfig, compile } from 'eta'; +import fs from 'fs-extra'; +import _ from 'lodash'; + +import { getDocSearchConfig } from './getDocSearchConfig'; +import openSearchTemplate from './templates/opensearch'; +import { normalizeUrl } from './utils'; + +const getCompiledOpenSearchTemplate = _.memoize(() => compile(openSearchTemplate.trim())); + +function renderOpenSearchTemplate(data: { + title: string; + siteUrl: string; + searchUrl: string; + faviconUrl: string | null; +}) { + const compiled = getCompiledOpenSearchTemplate(); + return compiled(data, defaultConfig); +} + +const OPEN_SEARCH_FILENAME = 'opensearch.xml'; + +export function shouldCreateOpenSearchFile({ context }: { context: LoadContext }): boolean { + const { + siteConfig: { + themeConfig, + future: { experimental_router: router }, + }, + } = context; + const { searchPagePath } = getDocSearchConfig(themeConfig as ThemeConfig); + + return Boolean(searchPagePath) && router !== 'hash'; +} + +function createOpenSearchFileContent({ + context, + searchPagePath, +}: { + context: LoadContext; + searchPagePath: string; +}): string { + const { + baseUrl, + siteConfig: { title, url, favicon }, + } = context; + + const siteUrl = normalizeUrl([url, baseUrl]); + + return renderOpenSearchTemplate({ + title, + siteUrl, + searchUrl: normalizeUrl([siteUrl, searchPagePath]), + faviconUrl: favicon ? normalizeUrl([siteUrl, favicon]) : null, + }); +} + +export async function createOpenSearchFile({ context }: { context: LoadContext }): Promise { + const { + outDir, + siteConfig: { themeConfig }, + } = context; + const { searchPagePath } = getDocSearchConfig(themeConfig as ThemeConfig); + if (!searchPagePath) { + throw new Error('no searchPagePath provided in themeConfig.docsearch or themeConfig.algolia'); + } + const fileContent = createOpenSearchFileContent({ context, searchPagePath }); + try { + await fs.writeFile(path.join(outDir, OPEN_SEARCH_FILENAME), fileContent); + } catch (err) { + const error = new Error('Generating OpenSearch file failed.'); + (error as Error & { cause?: unknown }).cause = err; + throw error; + } +} + +export function createOpenSearchHeadTags({ context }: { context: LoadContext }): HtmlTags { + const { + baseUrl, + siteConfig: { title }, + } = context; + return { + tagName: 'link', + attributes: { + rel: 'search', + type: 'application/opensearchdescription+xml', + title, + href: normalizeUrl([baseUrl, OPEN_SEARCH_FILENAME]), + }, + }; +} diff --git a/adapters/docusaurus-theme-search-algolia/src/templates/opensearch.ts b/adapters/docusaurus-theme-search-algolia/src/templates/opensearch.ts new file mode 100644 index 0000000000..0705a0032c --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/src/templates/opensearch.ts @@ -0,0 +1,22 @@ +/** + * Copyright (c) Facebook, Inc. And its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +export default ` + + + <%= it.title %> + Search <%= it.title %> + UTF-8 + <% if (it.faviconUrl) { _%> + <%= it.faviconUrl %> + <% } _%> + + + <%= it.siteUrl %> + +`; diff --git a/adapters/docusaurus-theme-search-algolia/src/theme-search-algolia.d.ts b/adapters/docusaurus-theme-search-algolia/src/theme-search-algolia.d.ts new file mode 100644 index 0000000000..46cc841187 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/src/theme-search-algolia.d.ts @@ -0,0 +1,130 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +declare module '@docsearch/docusaurus-adapter' { + import type {DeepPartial, Overwrite, Optional} from 'utility-types'; + + import type {DocSearchProps} from '@docsearch/react'; + import type {SidepanelProps} from '@docsearch/react/sidepanel'; + import type {FacetFilters} from 'algoliasearch/lite'; + + type AskAiSearchParameters = { + facetFilters?: FacetFilters; + filters?: string; + attributesToRetrieve?: string[]; + restrictSearchableAttributes?: string[]; + distinct?: boolean | number | string; + }; + + type AgentStudioSearchParameters = Record< + string, + Omit + >; + + // The config after normalization (e.g. AskAI string -> object) + // This matches DocSearch v4.3+ AskAi configuration + export type AskAiConfig = { + indexName: string; + apiKey: string; + appId: string; + assistantId: string; + suggestedQuestions?: boolean; + useStagingEnv?: boolean; + sidePanel?: boolean | (SidepanelProps & {hideButton?: boolean}); + } & ( + | { + agentStudio?: never; + searchParameters?: AskAiSearchParameters; + } + | { + agentStudio: false; + searchParameters?: AskAiSearchParameters; + } + | { + agentStudio: true; + searchParameters?: AgentStudioSearchParameters; + } + ); + + // DocSearch props that Docusaurus exposes directly through props forwarding + type DocusaurusDocSearchProps = Pick< + DocSearchProps, + | 'appId' + | 'apiKey' + | 'indexName' + | 'placeholder' + | 'translations' + | 'searchParameters' + | 'insights' + | 'initialQuery' + > & { + // Docusaurus normalizes the AskAI config to an object + askAi?: AskAiConfig; + }; + + export type ThemeConfigAlgolia = DocusaurusDocSearchProps & { + indexName: string; + + // Docusaurus custom options, not coming from DocSearch + contextualSearch: boolean; + externalUrlRegex?: string; + searchPagePath: string | false | null; + replaceSearchResultPathname?: { + from: string; + to: string; + }; + }; + + type UserDocSearchConfig = Overwrite< + DeepPartial, + { + // Required fields: + appId: ThemeConfigAlgolia['appId']; + apiKey: ThemeConfigAlgolia['apiKey']; + indexName: ThemeConfigAlgolia['indexName']; + // askAi also accepts a shorter string form + askAi?: + | string + | Optional; + } + >; + + export type ThemeConfig = { + // Preferred key. + docsearch?: ThemeConfigAlgolia; + // Backward-compatible alias. + algolia?: ThemeConfigAlgolia; + }; + + export type UserThemeConfig = { + // Preferred key. + docsearch?: UserDocSearchConfig; + // Backward-compatible alias. + algolia?: UserDocSearchConfig; + }; +} + +declare module '@theme/SearchPage' { + import type {ReactNode} from 'react'; + + export default function SearchPage(): ReactNode; +} + +declare module '@theme/SearchBar' { + import type {ReactNode} from 'react'; + + export default function SearchBar(): ReactNode; +} + +declare module '@theme/SearchTranslations' { + import type {DocSearchTranslations} from '@docsearch/react'; + + const translations: DocSearchTranslations & { + placeholder: string; + }; + export default translations; +} diff --git a/adapters/docusaurus-theme-search-algolia/src/theme/SearchBar/index.tsx b/adapters/docusaurus-theme-search-algolia/src/theme/SearchBar/index.tsx new file mode 100644 index 0000000000..b558b1a2b9 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/src/theme/SearchBar/index.tsx @@ -0,0 +1,399 @@ +/** + * Copyright (c) Facebook, Inc. And its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import type { AutocompleteState } from '@algolia/autocomplete-core'; +import type { ThemeConfigAlgolia } from '@docsearch/docusaurus-adapter'; +import type { + InternalDocSearchHit, + DocSearchModal as DocSearchModalType, + DocSearchModalProps, + StoredDocSearchHit, + DocSearchTransformClient, + DocSearchHit, + DocSearchTranslations, +} from '@docsearch/react'; +import { DocSearchButton } from '@docsearch/react/button'; +import { SidepanelButton } from '@docsearch/react/sidepanel'; +import type { Sidepanel as SidepanelType } from '@docsearch/react/sidepanel'; +import { useDocSearchKeyboardEvents } from '@docsearch/react/useDocSearchKeyboardEvents'; +import Head from '@docusaurus/Head'; +import Link from '@docusaurus/Link'; +import { useHistory } from '@docusaurus/router'; +import { isRegexpStringMatch, useSearchLinkCreator } from '@docusaurus/theme-common'; +import Translate from '@docusaurus/Translate'; +import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; +import translations from '@theme/SearchTranslations'; +import type { FacetFilters } from 'algoliasearch/lite'; +import React, { useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from 'react'; +import { createPortal } from 'react-dom'; + +import { + useAlgoliaContextualFacetFilters, + useAlgoliaThemeConfig, + useSearchResultUrlProcessor, + useAlgoliaAskAi, + useAlgoliaAskAiSidepanel, + mergeFacetFilters, +} from '../../client'; + +type DocSearchProps = Omit & { + contextualSearch?: string; + externalUrlRegex?: string; + searchPagePath: boolean | string; + askAi?: Exclude<(DocSearchModalProps & { askAi: unknown })['askAi'], string | undefined>; +}; + +type AskAiTogglePayload = { + query: string; + messageId?: string; + suggestedQuestionId?: string; +}; + +type OnAskAiToggle = (toggle: boolean, payload?: AskAiTogglePayload) => void; +type NavigatorNavigateParams = Parameters['navigate']>>[0]; + +interface AlgoliaSearchBarProps extends Omit { + indexName: string; + askAi?: ThemeConfigAlgolia['askAi']; + translations?: DocSearchTranslations; +} + +let DocSearchModal: typeof DocSearchModalType | null = null; +let DocSearchSidepanel: typeof SidepanelType | null = null; + +function importDocSearchModalIfNeeded(): Promise { + if (DocSearchModal) { + return Promise.resolve(); + } + + // eslint-disable-next-line import/dynamic-import-chunkname + return Promise.all([import('@docsearch/react/modal'), import('@docsearch/react/style'), import('./styles.css')]).then( + ([{ DocSearchModal: Modal }]) => { + DocSearchModal = Modal; + }, + ); +} + +async function importDocSearchSidepanelIfNeeded(): Promise { + await importDocSearchModalIfNeeded(); + if (DocSearchSidepanel) { + return Promise.resolve(); + } + + // eslint-disable-next-line import/dynamic-import-chunkname + return Promise.all([import('@docsearch/react/sidepanel'), import('@docsearch/react/style/sidepanel')]).then( + ([{ Sidepanel }]) => { + DocSearchSidepanel = Sidepanel; + }, + ); +} + +function useNavigator({ + externalUrlRegex, +}: Pick): DocSearchModalProps['navigator'] { + const history = useHistory(); + const [navigator] = useState(() => { + return { + navigate(params: NavigatorNavigateParams) { + // Algolia results could contain URL's from other domains which cannot + // be served through history and should navigate with window.location + if (isRegexpStringMatch(externalUrlRegex, params.itemUrl)) { + window.location.href = params.itemUrl; + } else { + history.push(params.itemUrl); + } + }, + }; + }); + return navigator; +} + +function useTransformSearchClient(): DocSearchModalProps['transformSearchClient'] { + const { + siteMetadata: { docusaurusVersion }, + } = useDocusaurusContext(); + return useCallback( + (searchClient: DocSearchTransformClient) => { + searchClient.addAlgoliaAgent('docusaurus', docusaurusVersion); + return searchClient; + }, + [docusaurusVersion], + ); +} + +function useTransformItems(props: Pick) { + const processSearchResultUrl = useSearchResultUrlProcessor(); + const [transformItems] = useState(() => { + return (items: DocSearchHit[]) => + props.transformItems + ? // Custom transformItems + props.transformItems(items) + : // Default transformItems + items.map((item) => ({ + ...item, + url: processSearchResultUrl(item.url), + })); + }); + return transformItems; +} + +function useResultsFooterComponent({ + closeModal, +}: { + closeModal: () => void; +}): DocSearchProps['resultsFooterComponent'] { + return useMemo( + () => + ({ state }) => , + [closeModal], + ); +} + +function Hit({ hit, children }: { hit: InternalDocSearchHit | StoredDocSearchHit; children: ReactNode }) { + return {children}; +} + +type ResultsFooterProps = { + state: AutocompleteState; + onClose: () => void; +}; + +function ResultsFooter({ state, onClose }: ResultsFooterProps) { + const createSearchLink = useSearchLinkCreator(); + const nbHits = (state.context as { nbHits?: number }).nbHits ?? 0; + + return ( + + + {'See all {count} results'} + + + ); +} + +function useSearchParameters({ contextualSearch, ...props }: DocSearchProps): DocSearchProps['searchParameters'] { + const contextualSearchFacetFilters = useAlgoliaContextualFacetFilters(); + + const configFacetFilters: FacetFilters = props.searchParameters?.facetFilters ?? []; + + const facetFilters: FacetFilters = contextualSearch + ? // Merge contextual search filters with config filters + mergeFacetFilters(contextualSearchFacetFilters, configFacetFilters) + : // ... or use config facetFilters + configFacetFilters; + + // We let users override default searchParameters if they want to + return { + ...props.searchParameters, + facetFilters, + }; +} + +function DocSearch({ externalUrlRegex, ...props }: AlgoliaSearchBarProps) { + const navigator = useNavigator({ externalUrlRegex }); + const searchParameters = useSearchParameters({ ...props } as DocSearchProps); + const transformItems = useTransformItems(props); + const transformSearchClient = useTransformSearchClient(); + + const searchContainer = useRef(null); + const searchButtonRef = useRef(null); + const [isOpen, setIsOpen] = useState(false); + const [initialQuery, setInitialQuery] = useState(undefined); + + const { isAskAiActive, currentPlaceholder, onAskAiToggle, extraAskAiProps, askAi } = useAlgoliaAskAi(props); + const { + sidePanelEnabled, + showSidepanelButton, + sidePanelOptions, + sidePanelAgentStudio, + sidepanelPortalContainer, + isSidepanelOpen, + sidepanelInitialMessage, + openSidepanel, + closeSidepanel, + toggleSidepanel, + handleSidepanelOpen, + loadSidepanel, + } = useAlgoliaAskAiSidepanel({ + askAiConfig: askAi, + importSidepanel: importDocSearchSidepanelIfNeeded, + }); + + const prepareSearchContainer = useCallback(() => { + if (!searchContainer.current) { + const divElement = document.createElement('div'); + searchContainer.current = divElement; + document.body.insertBefore(divElement, document.body.firstChild); + } + }, []); + + const openModal = useCallback(() => { + prepareSearchContainer(); + importDocSearchModalIfNeeded().then(() => setIsOpen(true)); + }, [prepareSearchContainer]); + + const closeModal = useCallback(() => { + setIsOpen(false); + searchButtonRef.current?.focus(); + setInitialQuery(undefined); + onAskAiToggle(false); + }, [onAskAiToggle]); + + const handleAskAiToggle = useCallback( + (active, payload) => { + if (active && sidePanelEnabled) { + closeModal(); + openSidepanel(payload); + return; + } + onAskAiToggle(active); + }, + [closeModal, onAskAiToggle, openSidepanel, sidePanelEnabled], + ); + + // cleanup search container + useEffect(() => { + return () => { + if (searchContainer.current) { + searchContainer.current.remove(); + searchContainer.current = null; + } + }; + }, []); + + const handleInput = useCallback( + (event: KeyboardEvent) => { + if (event.key === 'f' && (event.metaKey || event.ctrlKey)) { + // ignore browser's ctrl+f + return; + } + // prevents duplicate key insertion in the modal input + event.preventDefault(); + setInitialQuery(event.key); + openModal(); + }, + [openModal], + ); + + const resultsFooterComponent = useResultsFooterComponent({ closeModal }); + + useDocSearchKeyboardEvents({ + isOpen, + onOpen: openModal, + onClose: closeModal, + onInput: handleInput, + searchButtonRef, + isAskAiActive: isAskAiActive ?? false, + onAskAiToggle: onAskAiToggle ?? (() => {}), + }); + + return ( + <> + + {/* This hints the browser that the website will load data from Algolia, + and allows it to preconnect to the DocSearch cluster. It makes the first + query faster, especially on mobile. */} + + + +
+ + {showSidepanelButton && ( + + )} +
+ + {isOpen && + DocSearchModal && + searchContainer.current && + createPortal( + { + if (!sidePanelEnabled) { + return false; + } + closeModal(); + openSidepanel(payload); + return true; + }} + onClose={closeModal} + {...(props.searchPagePath && { + resultsFooterComponent, + })} + placeholder={currentPlaceholder} + {...(props as DocSearchProps)} + translations={props.translations?.modal ?? translations.modal} + searchParameters={searchParameters} + {...extraAskAiProps} + isHybridModeSupported={sidePanelEnabled} + onAskAiToggle={handleAskAiToggle as DocSearchModalProps['onAskAiToggle']} + />, + searchContainer.current, + )} + + {sidePanelEnabled && + DocSearchSidepanel && + askAi && + sidepanelPortalContainer && + createPortal( + , + sidepanelPortalContainer, + )} + + ); +} + +export default function SearchBar(props: Partial): ReactNode { + const themeConfig = useAlgoliaThemeConfig(); + + const docSearchProps: AlgoliaSearchBarProps = { + ...(themeConfig as unknown as AlgoliaSearchBarProps), + // Let props override theme config + // See https://github.com/facebook/docusaurus/pull/11581 + ...props, + }; + + return ; +} diff --git a/adapters/docusaurus-theme-search-algolia/src/theme/SearchBar/styles.css b/adapters/docusaurus-theme-search-algolia/src/theme/SearchBar/styles.css new file mode 100644 index 0000000000..6eb23aa177 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/src/theme/SearchBar/styles.css @@ -0,0 +1,119 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +:root { + --docsearch-primary-color: var(--ifm-color-primary); + --docsearch-text-color: var(--ifm-font-color-base); + --docsearch-border-radius: var(--ifm-global-radius); + --docsearch-highlight-color: var(--ifm-color-primary); + --docsearch-soft-primary-color: color-mix( + in srgb, + var(--ifm-color-primary) 12%, + transparent + ); + --docsearch-focus-color: var(--ifm-color-primary-dark); + --docsearch-subtle-color: var(--ifm-color-emphasis-200); + --docsearch-secondary-text-color: var(--ifm-color-emphasis-600); + --docsearch-icon-color: var(--ifm-color-emphasis-600); + --docsearch-muted-color: var(--ifm-color-emphasis-600); + --docsearch-container-background: rgb(0 0 0 / 60%); + --docsearch-background-color: var(--ifm-color-emphasis-200); + /* Modal */ + --docsearch-modal-background: var(--ifm-color-emphasis-100); + --docsearch-modal-shadow: var(--ifm-global-shadow-md); + /* Button */ + --docsearch-search-button-background: var(--ifm-background-color); + --docsearch-search-button-text-color: var(--ifm-color-emphasis-600); + /* Search box */ + --docsearch-searchbox-background: var(--ifm-background-color); + --docsearch-searchbox-focus-background: var(--ifm-background-surface-color); + /* Hit */ + --docsearch-hit-color: var(--ifm-font-color-base); + --docsearch-hit-highlight-color: color-mix( + in srgb, + var(--ifm-color-primary) 12%, + transparent + ); + --docsearch-hit-active-color: var(--ifm-color-white); + --docsearch-hit-background: var(--ifm-background-surface-color); + --docsearch-key-background: var(--ifm-color-emphasis-200); + --docsearch-key-color: var(--ifm-color-emphasis-600); + --docsearch-key-pressed-shadow: inset 0 2px 4px rgb(0 0 0 / 12%); + /* Footer */ + --docsearch-footer-background: var(--ifm-background-surface-color); + --docsearch-footer-shadow: 0 -1px 0 0 var(--ifm-color-emphasis-200); + --docsearch-key-gradient: linear-gradient( + -26.5deg, + var(--ifm-color-emphasis-300) 0%, + var(--ifm-color-emphasis-200) 100% + ); + + /* Sidepanel */ + --docsearch-sidepanel-background: var(--ifm-color-emphasis-100); + --docsearch-sidepanel-background-dark: var(--docsearch-searchbox-background); + --docsearch-sidepanel-white: var(--ifm-background-color); + --docsearch-sidepanel-primary: var(--docsearch-primary-color); + --docsearch-sidepanel-primary-dark: var(--ifm-color-primary-dark); + --docsearch-sidepanel-primary-disabled: var(--ifm-color-primary-lightest); + --docsearch-sidepanel-accent: var(--docsearch-highlight-color); + --docsearch-sidepanel-accent-muted: var(--ifm-color-primary-lightest); + --docsearch-sidepanel-border: var(--ifm-color-emphasis-200); + --docsearch-sidepanel-text-base: var(--docsearch-text-color); + --docsearch-sidepanel-text-muted: var(--docsearch-secondary-text-color); + --docsearch-sidepanel-scrollbar-color: var(--docsearch-muted-color); + --docsearch-sidepanel-scrollbar-bg: var(--docsearch-modal-background); + --docsearch-sidepanel-hit-background: var(--docsearch-hit-background); + --docsearch-sidepanel-hit-color: var(--docsearch-hit-color); + --docsearch-sidepanel-hit-highlight-color: var( + --docsearch-hit-highlight-color + ); +} + +.DocSearch-SearchBar { + display: flex; + align-items: center; + gap: 0.5rem; +} + +.DocSearch-Button { + border-radius: 0.5rem; +} + +.DocSearch-Sidepanel-Header { + height: 3.8rem; +} + +.DocSearch-Sidepanel-Title { + margin: 0; +} + +.DocSearch-Sidepanel-Header-TitleIcon { + display: none; +} + +.DocSearch-SidepanelButton.inline { + background-color: var(--ifm-background-color); +} + +/* Match inline panel borders with app borders */ +.DocSearch-Sidepanel-Container.inline { + box-shadow: 0 0 0 1px var(--docsearch-sidepanel-border); +} + +/* is aesthetically better to have no border radius */ +@media screen and (min-width: 769px) { + .DocSearch-Sidepanel-Container.inline.side-right { + border-radius: 0 !important; + } + .DocSearch-Sidepanel-Container.inline.side-left { + border-radius: 0 !important; + } +} + +.DocSearch-Container { + z-index: calc(var(--ifm-z-index-fixed) + 1); +} diff --git a/adapters/docusaurus-theme-search-algolia/src/theme/SearchPage/index.tsx b/adapters/docusaurus-theme-search-algolia/src/theme/SearchPage/index.tsx new file mode 100644 index 0000000000..75e398e12f --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/src/theme/SearchPage/index.tsx @@ -0,0 +1,518 @@ +/** + * Copyright (c) Facebook, Inc. And its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/* eslint-disable jsx-a11y/no-autofocus */ + +import { useAlgoliaThemeConfig, useSearchResultUrlProcessor } from '@docsearch/docusaurus-adapter/client'; +import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment'; +import Head from '@docusaurus/Head'; +import Link from '@docusaurus/Link'; +import { useAllDocsData } from '@docusaurus/plugin-content-docs/client'; +import { HtmlClassNameProvider, useEvent, usePluralForm, useSearchQueryString } from '@docusaurus/theme-common'; +import Translate, { translate } from '@docusaurus/Translate'; +import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; +import Heading from '@theme/Heading'; +import Layout from '@theme/Layout'; +import { liteClient } from 'algoliasearch/lite'; +import algoliaSearchHelper from 'algoliasearch-helper'; +import clsx from 'clsx'; +import React, { type ReactNode, useEffect, useReducer, useRef, useState } from 'react'; + +import styles from './styles.module.css'; + +// Very simple pluralization: probably good enough for now +function useDocumentsFoundPlural() { + const { selectMessage } = usePluralForm(); + return (count: number) => + selectMessage( + count, + translate( + { + id: 'theme.SearchPage.documentsFound.plurals', + description: + 'Pluralized label for "{count} documents found". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)', + message: 'One document found|{count} documents found', + }, + { count }, + ), + ); +} + +function useDocsSearchVersionsHelpers() { + const allDocsData = useAllDocsData(); + + // State of the version select menus / algolia facet filters + // docsPluginId -> versionName map + const [searchVersions, setSearchVersions] = useState<{ + [pluginId: string]: string; + }>(() => + Object.entries(allDocsData).reduce( + (acc, [pluginId, pluginData]) => ({ + ...acc, + [pluginId]: pluginData.versions[0]!.name, + }), + {}, + ), + ); + + // Set the value of a single select menu + const setSearchVersion = (pluginId: string, searchVersion: string) => + setSearchVersions((s) => ({ ...s, [pluginId]: searchVersion })); + + const versioningEnabled = Object.values(allDocsData).some((docsData) => docsData.versions.length > 1); + + return { + allDocsData, + versioningEnabled, + searchVersions, + setSearchVersion, + }; +} + +// We want to display one select per versioned docs plugin instance +function SearchVersionSelectList({ + docsSearchVersionsHelpers, +}: { + docsSearchVersionsHelpers: ReturnType; +}) { + const versionedPluginEntries = Object.entries(docsSearchVersionsHelpers.allDocsData) + // Do not show a version select for unversioned docs plugin instances + .filter(([, docsData]) => docsData.versions.length > 1); + + return ( +
+ {versionedPluginEntries.map(([pluginId, docsData]) => { + const labelPrefix = versionedPluginEntries.length > 1 ? `${pluginId}: ` : ''; + return ( + + ); + })} +
+ ); +} + +function AlgoliaLogo(): ReactNode { + return ( + + + {/* eslint-disable-next-line @docusaurus/no-untranslated-text */} + + + + + + + + + + + + + ); +} + +type ResultDispatcherState = { + items: Array<{ + title: string; + url: string; + summary: string; + breadcrumbs: string[]; + }>; + query: string | null; + totalResults: number | null; + totalPages: number | null; + lastPage: number | null; + hasMore: boolean | null; + loading: boolean | null; +}; + +type ResultDispatcher = + | { type: 'advance'; value?: undefined } + | { type: 'loading'; value?: undefined } + | { type: 'reset'; value?: undefined } + | { type: 'update'; value: ResultDispatcherState }; + +function getSearchPageTitle(searchQuery: string | undefined): string { + return searchQuery + ? translate( + { + id: 'theme.SearchPage.existingResultsTitle', + message: 'Search results for "{query}"', + description: 'The search page title for non-empty query', + }, + { + query: searchQuery, + }, + ) + : translate({ + id: 'theme.SearchPage.emptyResultsTitle', + message: 'Search the documentation', + description: 'The search page title for empty query', + }); +} + +function SearchPageContent(): ReactNode { + const { + i18n: { currentLocale }, + } = useDocusaurusContext(); + const { appId, apiKey, indexName, contextualSearch } = useAlgoliaThemeConfig(); + const processSearchResultUrl = useSearchResultUrlProcessor(); + const documentsFoundPlural = useDocumentsFoundPlural(); + + const docsSearchVersionsHelpers = useDocsSearchVersionsHelpers(); + const [searchQuery, setSearchQuery] = useSearchQueryString(); + const pageTitle = getSearchPageTitle(searchQuery); + + const initialSearchResultState: ResultDispatcherState = { + items: [], + query: null, + totalResults: null, + totalPages: null, + lastPage: null, + hasMore: null, + loading: null, + }; + const [searchResultState, searchResultStateDispatcher] = useReducer( + (prevState: ResultDispatcherState, data: ResultDispatcher) => { + switch (data.type) { + case 'reset': { + return initialSearchResultState; + } + case 'loading': { + return { ...prevState, loading: true }; + } + case 'update': { + if (searchQuery !== data.value.query) { + return prevState; + } + + return { + ...data.value, + items: data.value.lastPage === 0 ? data.value.items : prevState.items.concat(data.value.items), + }; + } + case 'advance': { + const hasMore = prevState.totalPages! > prevState.lastPage! + 1; + + return { + ...prevState, + lastPage: hasMore ? prevState.lastPage! + 1 : prevState.lastPage, + hasMore, + }; + } + default: + return prevState; + } + }, + initialSearchResultState, + ); + + // respect settings from the theme config for facets + const disjunctiveFacets = contextualSearch ? ['language', 'docusaurus_tag'] : []; + + const algoliaClient = liteClient(appId, apiKey); + const algoliaHelper = algoliaSearchHelper(algoliaClient, indexName, { + hitsPerPage: 15, + advancedSyntax: true, + disjunctiveFacets, + }); + + algoliaHelper.on('result', ({ results: { query, hits, page, nbHits, nbPages } }) => { + if (query === '' || !Array.isArray(hits)) { + searchResultStateDispatcher({ type: 'reset' }); + return; + } + + const sanitizeValue = (value: string) => + value.replace(/algolia-docsearch-suggestion--highlight/g, 'search-result-match'); + + const items = hits.map( + ({ + url, + _highlightResult: { hierarchy }, + _snippetResult: snippet = {}, + }: { + url: string; + _highlightResult: { hierarchy: { [key: string]: { value: string } } }; + _snippetResult: { content?: { value: string } }; + }) => { + const titles = Object.keys(hierarchy).map((key) => sanitizeValue(hierarchy[key]!.value)); + return { + title: titles.pop()!, + url: processSearchResultUrl(url), + summary: snippet.content ? `${sanitizeValue(snippet.content.value)}...` : '', + breadcrumbs: titles, + }; + }, + ); + + searchResultStateDispatcher({ + type: 'update', + value: { + items, + query, + totalResults: nbHits, + totalPages: nbPages, + lastPage: page, + hasMore: nbPages > page + 1, + loading: false, + }, + }); + }); + + const [loaderRef, setLoaderRef] = useState(null); + const prevY = useRef(0); + const observer = useRef( + ExecutionEnvironment.canUseIntersectionObserver && + new IntersectionObserver( + // TODO need to fix this React Compiler lint error + // eslint-disable-next-line react-compiler/react-compiler + (entries) => { + const { + isIntersecting, + boundingClientRect: { y: currentY }, + } = entries[0]!; + + if (isIntersecting && prevY.current > currentY) { + searchResultStateDispatcher({ type: 'advance' }); + } + + prevY.current = currentY; + }, + { threshold: 1 }, + ), + ); + + const makeSearch = useEvent((page: number = 0) => { + if (contextualSearch) { + algoliaHelper.addDisjunctiveFacetRefinement('docusaurus_tag', 'default'); + algoliaHelper.addDisjunctiveFacetRefinement('language', currentLocale); + + Object.entries(docsSearchVersionsHelpers.searchVersions).forEach(([pluginId, searchVersion]) => { + algoliaHelper.addDisjunctiveFacetRefinement('docusaurus_tag', `docs-${pluginId}-${searchVersion}`); + }); + } + + algoliaHelper.setQuery(searchQuery).setPage(page).search(); + }); + + useEffect(() => { + if (!loaderRef) { + return undefined; + } + const currentObserver = observer.current; + if (currentObserver) { + currentObserver.observe(loaderRef); + return () => currentObserver.unobserve(loaderRef); + } + return () => true; + }, [loaderRef]); + + useEffect(() => { + searchResultStateDispatcher({ type: 'reset' }); + + if (searchQuery) { + searchResultStateDispatcher({ type: 'loading' }); + + setTimeout(() => { + makeSearch(); + }, 300); + } + }, [searchQuery, docsSearchVersionsHelpers.searchVersions, makeSearch]); + + useEffect(() => { + if (!searchResultState.lastPage || searchResultState.lastPage === 0) { + return; + } + + makeSearch(searchResultState.lastPage); + }, [makeSearch, searchResultState.lastPage]); + + return ( + + + {pageTitle} + {/* + We should not index search pages + See https://github.com/facebook/docusaurus/pull/3233 + */} + + + +
+ {pageTitle} + +
e.preventDefault()}> +
+ setSearchQuery(e.target.value)} + /> +
+ + {contextualSearch && docsSearchVersionsHelpers.versioningEnabled && ( + + )} + + +
+
+ {searchResultState.totalResults !== null && documentsFoundPlural(searchResultState.totalResults)} +
+ +
+ + {translate({ + id: 'theme.SearchPage.algoliaLabel', + message: 'Powered by', + description: 'The text explain that the search powered by Algolia', + })} + + + + +
+
+ + {searchResultState.items.length > 0 ? ( +
+ {searchResultState.items.map(({ title, url, summary, breadcrumbs }, i) => ( +
+ + + + + {breadcrumbs.length > 0 && ( + + )} + + {summary && ( +

+ )} +

+ ))} +
+ ) : ( + [ + searchQuery && !searchResultState.loading && ( +

+ + No results were found + +

+ ), + Boolean(searchResultState.loading) &&
, + ] + )} + + {searchResultState.hasMore && ( +
+ + Fetching new results... + +
+ )} +
+ + ); +} + +export default function SearchPage(): ReactNode { + return ( + + + + ); +} diff --git a/adapters/docusaurus-theme-search-algolia/src/theme/SearchPage/styles.module.css b/adapters/docusaurus-theme-search-algolia/src/theme/SearchPage/styles.module.css new file mode 100644 index 0000000000..29c4389f55 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/src/theme/SearchPage/styles.module.css @@ -0,0 +1,127 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +.searchQueryInput, +.searchVersionInput { + border-radius: var(--ifm-global-radius); + border: 2px solid var(--ifm-toc-border-color); + font: var(--ifm-font-size-base) var(--ifm-font-family-base); + padding: 0.8rem; + width: 100%; + background: var(--docsearch-searchbox-focus-background); + color: var(--docsearch-text-color); + margin-bottom: 0.5rem; + transition: border var(--ifm-transition-fast) ease; +} + +.searchQueryInput:focus, +.searchVersionInput:focus { + border-color: var(--docsearch-primary-color); + outline: none; +} + +.searchQueryInput::placeholder { + color: var(--docsearch-muted-color); +} + +.searchResultsColumn { + font-size: 0.9rem; + font-weight: bold; +} + +.searchLogoColumn { + display: flex; + align-items: center; + gap: 0.5rem; + justify-content: flex-end; +} + +.searchLogoColumn a { + display: flex; +} + +.searchLogoColumn span { + color: var(--docsearch-muted-color); + font-weight: normal; +} + +.searchResultItem { + padding: 1rem 0; + border-bottom: 1px solid var(--ifm-toc-border-color); +} + +.searchResultItemHeading { + font-weight: 400; + margin-bottom: 0; +} + +.searchResultItemPath { + font-size: 0.8rem; + color: var(--ifm-color-content-secondary); + --ifm-breadcrumb-separator-size-multiplier: 1; +} + +.searchResultItemSummary { + margin: 0.5rem 0 0; + font-style: italic; +} + +@media only screen and (max-width: 996px) { + .searchQueryColumn { + max-width: 60% !important; + } + + .searchVersionColumn { + max-width: 40% !important; + } + + .searchResultsColumn { + max-width: 60% !important; + } + + .searchLogoColumn { + max-width: 40% !important; + padding-left: 0 !important; + } +} + +@media screen and (max-width: 576px) { + .searchQueryColumn { + max-width: 100% !important; + } + + .searchVersionColumn { + max-width: 100% !important; + padding-left: var(--ifm-spacing-horizontal) !important; + } +} + +.loadingSpinner { + width: 3rem; + height: 3rem; + border: 0.4em solid #eee; + border-top-color: var(--ifm-color-primary); + border-radius: 50%; + animation: loading-spin 1s linear infinite; + margin: 0 auto; +} + +@keyframes loading-spin { + 100% { + transform: rotate(360deg); + } +} + +.loader { + margin-top: 2rem; +} + +:global(.search-result-match) { + color: var(--docsearch-hit-color); + background: rgb(255 215 142 / 25%); + padding: 0.09em 0; +} diff --git a/adapters/docusaurus-theme-search-algolia/src/theme/SearchTranslations/index.ts b/adapters/docusaurus-theme-search-algolia/src/theme/SearchTranslations/index.ts new file mode 100644 index 0000000000..6d298c30fd --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/src/theme/SearchTranslations/index.ts @@ -0,0 +1,371 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import {translate} from '@docusaurus/Translate'; + +import type {DocSearchTranslations} from '@docsearch/react'; + +const translations: DocSearchTranslations & { + placeholder: string; + modal: { + searchBox: { + placeholderText: string; + placeholderTextAskAi: string; + placeholderTextAskAiStreaming: string; + enterKeyHintAskAi: string; + searchInputLabel: string; + backToKeywordSearchButtonText: string; + backToKeywordSearchButtonAriaLabel: string; + enterKeyHint: string; + clearButtonTitle: string; + clearButtonAriaLabel: string; + closeButtonText: string; + resetButtonTitle: string; + resetButtonAriaLabel: string; + cancelButtonText: string; + cancelButtonAriaLabel: string; + closeButtonAriaLabel: string; + }; + startScreen: { + recentConversationsTitle: string; + removeRecentConversationButtonTitle: string; + }; + resultsScreen: { + askAiPlaceholder: string; + }; + askAiScreen: { + disclaimerText: string; + relatedSourcesText: string; + thinkingText: string; + copyButtonText: string; + copyButtonCopiedText: string; + copyButtonTitle: string; + likeButtonTitle: string; + dislikeButtonTitle: string; + thanksForFeedbackText: string; + preToolCallText: string; + duringToolCallText: string; + afterToolCallText: string; + }; + footer: { + submitQuestionText: string; + poweredByText: string; + backToSearchText: string; + searchByText: string; + }; + }; +} = { + button: { + buttonText: translate({ + id: 'theme.SearchBar.label', + message: 'Search', + description: 'The ARIA label and placeholder for search button', + }), + buttonAriaLabel: translate({ + id: 'theme.SearchBar.label', + message: 'Search', + description: 'The ARIA label and placeholder for search button', + }), + }, + modal: { + searchBox: { + resetButtonTitle: translate({ + id: 'theme.SearchModal.searchBox.resetButtonTitle', + message: 'Clear the query', + description: 'The label and ARIA label for search box reset button', + }), + resetButtonAriaLabel: translate({ + id: 'theme.SearchModal.searchBox.resetButtonTitle', + message: 'Clear the query', + description: 'The label and ARIA label for search box reset button', + }), + cancelButtonText: translate({ + id: 'theme.SearchModal.searchBox.cancelButtonText', + message: 'Cancel', + description: 'The label and ARIA label for search box cancel button', + }), + cancelButtonAriaLabel: translate({ + id: 'theme.SearchModal.searchBox.cancelButtonText', + message: 'Cancel', + description: 'The label and ARIA label for search box cancel button', + }), + + // v4 + clearButtonTitle: translate({ + id: 'theme.SearchModal.searchBox.resetButtonTitle', + message: 'Clear the query', + description: 'The label and ARIA label for search box reset button', + }), + clearButtonAriaLabel: translate({ + id: 'theme.SearchModal.searchBox.resetButtonTitle', + message: 'Clear the query', + description: 'The label and ARIA label for search box reset button', + }), + closeButtonText: translate({ + id: 'theme.SearchModal.searchBox.cancelButtonText', + message: 'Cancel', + description: 'The label and ARIA label for search box cancel button', + }), + closeButtonAriaLabel: translate({ + id: 'theme.SearchModal.searchBox.cancelButtonText', + message: 'Cancel', + description: 'The label and ARIA label for search box cancel button', + }), + placeholderText: translate({ + id: 'theme.SearchModal.searchBox.placeholderText', + message: 'Search docs', + description: 'The placeholder text for the main search input field', + }), + placeholderTextAskAi: translate({ + id: 'theme.SearchModal.searchBox.placeholderTextAskAi', + message: 'Ask another question...', + description: 'The placeholder text when in AI question mode', + }), + placeholderTextAskAiStreaming: translate({ + id: 'theme.SearchModal.searchBox.placeholderTextAskAiStreaming', + message: 'Answering...', + description: + 'The placeholder text for search box when AI is streaming an answer', + }), + enterKeyHint: translate({ + id: 'theme.SearchModal.searchBox.enterKeyHint', + message: 'search', + description: 'The hint for the search box enter key text', + }), + enterKeyHintAskAi: translate({ + id: 'theme.SearchModal.searchBox.enterKeyHintAskAi', + message: 'enter', + description: 'The hint for the Ask AI search box enter key text', + }), + searchInputLabel: translate({ + id: 'theme.SearchModal.searchBox.searchInputLabel', + message: 'Search', + description: 'The ARIA label for search input', + }), + backToKeywordSearchButtonText: translate({ + id: 'theme.SearchModal.searchBox.backToKeywordSearchButtonText', + message: 'Back to keyword search', + description: 'The text for back to keyword search button', + }), + backToKeywordSearchButtonAriaLabel: translate({ + id: 'theme.SearchModal.searchBox.backToKeywordSearchButtonAriaLabel', + message: 'Back to keyword search', + description: 'The ARIA label for back to keyword search button', + }), + }, + startScreen: { + recentSearchesTitle: translate({ + id: 'theme.SearchModal.startScreen.recentSearchesTitle', + message: 'Recent', + description: 'The title for recent searches', + }), + noRecentSearchesText: translate({ + id: 'theme.SearchModal.startScreen.noRecentSearchesText', + message: 'No recent searches', + description: 'The text when there are no recent searches', + }), + saveRecentSearchButtonTitle: translate({ + id: 'theme.SearchModal.startScreen.saveRecentSearchButtonTitle', + message: 'Save this search', + description: 'The title for save recent search button', + }), + removeRecentSearchButtonTitle: translate({ + id: 'theme.SearchModal.startScreen.removeRecentSearchButtonTitle', + message: 'Remove this search from history', + description: 'The title for remove recent search button', + }), + favoriteSearchesTitle: translate({ + id: 'theme.SearchModal.startScreen.favoriteSearchesTitle', + message: 'Favorite', + description: 'The title for favorite searches', + }), + removeFavoriteSearchButtonTitle: translate({ + id: 'theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle', + message: 'Remove this search from favorites', + description: 'The title for remove favorite search button', + }), + recentConversationsTitle: translate({ + id: 'theme.SearchModal.startScreen.recentConversationsTitle', + message: 'Recent conversations', + description: 'The title for recent conversations', + }), + removeRecentConversationButtonTitle: translate({ + id: 'theme.SearchModal.startScreen.removeRecentConversationButtonTitle', + message: 'Remove this conversation from history', + description: 'The title for remove recent conversation button', + }), + }, + errorScreen: { + titleText: translate({ + id: 'theme.SearchModal.errorScreen.titleText', + message: 'Unable to fetch results', + description: 'The title for error screen', + }), + helpText: translate({ + id: 'theme.SearchModal.errorScreen.helpText', + message: 'You might want to check your network connection.', + description: 'The help text for error screen', + }), + }, + resultsScreen: { + askAiPlaceholder: translate({ + id: 'theme.SearchModal.resultsScreen.askAiPlaceholder', + message: 'Ask AI: ', + description: 'The placeholder text for Ask AI input', + }), + }, + askAiScreen: { + disclaimerText: translate({ + id: 'theme.SearchModal.askAiScreen.disclaimerText', + message: + 'Answers are generated with AI which can make mistakes. Verify responses.', + description: 'The disclaimer text for AI answers', + }), + relatedSourcesText: translate({ + id: 'theme.SearchModal.askAiScreen.relatedSourcesText', + message: 'Related sources', + description: 'The text for related sources', + }), + thinkingText: translate({ + id: 'theme.SearchModal.askAiScreen.thinkingText', + message: 'Thinking...', + description: 'The text when AI is thinking', + }), + copyButtonText: translate({ + id: 'theme.SearchModal.askAiScreen.copyButtonText', + message: 'Copy', + description: 'The text for copy button', + }), + copyButtonCopiedText: translate({ + id: 'theme.SearchModal.askAiScreen.copyButtonCopiedText', + message: 'Copied!', + description: 'The text for copy button when copied', + }), + copyButtonTitle: translate({ + id: 'theme.SearchModal.askAiScreen.copyButtonTitle', + message: 'Copy', + description: 'The title for copy button', + }), + likeButtonTitle: translate({ + id: 'theme.SearchModal.askAiScreen.likeButtonTitle', + message: 'Like', + description: 'The title for like button', + }), + dislikeButtonTitle: translate({ + id: 'theme.SearchModal.askAiScreen.dislikeButtonTitle', + message: 'Dislike', + description: 'The title for dislike button', + }), + thanksForFeedbackText: translate({ + id: 'theme.SearchModal.askAiScreen.thanksForFeedbackText', + message: 'Thanks for your feedback!', + description: 'The text for thanks for feedback', + }), + preToolCallText: translate({ + id: 'theme.SearchModal.askAiScreen.preToolCallText', + message: 'Searching...', + description: 'The text before tool call', + }), + duringToolCallText: translate({ + id: 'theme.SearchModal.askAiScreen.duringToolCallText', + message: 'Searching for ', + description: 'The text during tool call', + }), + afterToolCallText: translate({ + id: 'theme.SearchModal.askAiScreen.afterToolCallText', + message: 'Searched for', + description: 'The text after tool call', + }), + }, + footer: { + selectText: translate({ + id: 'theme.SearchModal.footer.selectText', + message: 'Select', + description: 'The select text for footer', + }), + submitQuestionText: translate({ + id: 'theme.SearchModal.footer.submitQuestionText', + message: 'Submit question', + description: 'The submit question text for footer', + }), + selectKeyAriaLabel: translate({ + id: 'theme.SearchModal.footer.selectKeyAriaLabel', + message: 'Enter key', + description: 'The ARIA label for select key in footer', + }), + navigateText: translate({ + id: 'theme.SearchModal.footer.navigateText', + message: 'Navigate', + description: 'The navigate text for footer', + }), + navigateUpKeyAriaLabel: translate({ + id: 'theme.SearchModal.footer.navigateUpKeyAriaLabel', + message: 'Arrow up', + description: 'The ARIA label for navigate up key in footer', + }), + navigateDownKeyAriaLabel: translate({ + id: 'theme.SearchModal.footer.navigateDownKeyAriaLabel', + message: 'Arrow down', + description: 'The ARIA label for navigate down key in footer', + }), + closeText: translate({ + id: 'theme.SearchModal.footer.closeText', + message: 'Close', + description: 'The close text for footer', + }), + closeKeyAriaLabel: translate({ + id: 'theme.SearchModal.footer.closeKeyAriaLabel', + message: 'Escape key', + description: 'The ARIA label for close key in footer', + }), + poweredByText: translate({ + id: 'theme.SearchModal.footer.searchByText', + message: 'Powered by', + description: "The 'Powered by' text for footer", + }), + searchByText: translate({ + id: 'theme.SearchModal.footer.searchByText', + message: 'Powered by', + description: "The 'Powered by' text for footer", + }), + backToSearchText: translate({ + id: 'theme.SearchModal.footer.backToSearchText', + message: 'Back to search', + description: 'The back to search text for footer', + }), + }, + noResultsScreen: { + noResultsText: translate({ + id: 'theme.SearchModal.noResultsScreen.noResultsText', + message: 'No results found for', + description: 'The text when there are no results', + }), + suggestedQueryText: translate({ + id: 'theme.SearchModal.noResultsScreen.suggestedQueryText', + message: 'Try searching for', + description: 'The text for suggested query', + }), + reportMissingResultsText: translate({ + id: 'theme.SearchModal.noResultsScreen.reportMissingResultsText', + message: 'Believe this query should return results?', + description: 'The text for reporting missing results', + }), + reportMissingResultsLinkText: translate({ + id: 'theme.SearchModal.noResultsScreen.reportMissingResultsLinkText', + message: 'Let us know.', + description: 'The link text for reporting missing results', + }), + }, + }, + placeholder: translate({ + id: 'theme.SearchModal.placeholder', + message: 'Search docs', + description: 'The placeholder of the input of the DocSearch pop-up modal', + }), +}; + +export default translations; diff --git a/adapters/docusaurus-theme-search-algolia/src/types.d.ts b/adapters/docusaurus-theme-search-algolia/src/types.d.ts new file mode 100644 index 0000000000..04ccef3c44 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/src/types.d.ts @@ -0,0 +1,10 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/// +/// +/// diff --git a/adapters/docusaurus-theme-search-algolia/src/utils/escapeRegexp.ts b/adapters/docusaurus-theme-search-algolia/src/utils/escapeRegexp.ts new file mode 100644 index 0000000000..0fe00c4340 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/src/utils/escapeRegexp.ts @@ -0,0 +1,17 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * Escapes special characters in a string for use in a regular expression. + * Based on escape-string-regexp package. + */ +export function escapeRegexp(string: string): string { + // Escape characters with special meaning either inside or outside character + // sets. Use a simple backslash escape when it's always valid, and a `\xnn` + // escape when the simpler form would be disallowed by stricter unicodeness. + return string.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&').replace(/-/g, '\\x2d'); +} diff --git a/adapters/docusaurus-theme-search-algolia/src/utils/index.ts b/adapters/docusaurus-theme-search-algolia/src/utils/index.ts new file mode 100644 index 0000000000..8af458e331 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/src/utils/index.ts @@ -0,0 +1,9 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +export {normalizeUrl} from './normalizeUrl'; +export {escapeRegexp} from './escapeRegexp'; diff --git a/adapters/docusaurus-theme-search-algolia/src/utils/normalizeUrl.ts b/adapters/docusaurus-theme-search-algolia/src/utils/normalizeUrl.ts new file mode 100644 index 0000000000..9e372fda32 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/src/utils/normalizeUrl.ts @@ -0,0 +1,104 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * Much like `path.join`, but much better. Takes an array of URL segments, and + * joins them into a reasonable URL. + * + * - `["file:", "/home", "/user/", "website"]` => `file:///home/user/website` + * - `["file://", "home", "/user/", "website"]` => `file://home/user/website` (relative!) + * - Remove trailing slash before parameters or hash. + * - Replace `?` in query parameters with `&`. + * - Dedupe forward slashes in the entire path, avoiding protocol slashes. + * + * @throws {TypeError} If any of the URL segment is not a string, this throws. + */ +export function normalizeUrl(rawUrls: string[]): string { + const urls = [...rawUrls]; + const resultArray = []; + + let hasStartingSlash = false; + let hasEndingSlash = false; + + const isNonEmptyArray = (arr: string[]): arr is [string, ...string[]] => + arr.length > 0; + + if (!isNonEmptyArray(urls)) { + return ''; + } + + // If the first part is a plain protocol, we combine it with the next part. + if (urls[0].match(/^[^/:]+:\/*$/) && urls.length > 1) { + const first = urls.shift()!; + if (first.startsWith('file:') && urls[0].startsWith('/')) { + // Force a double slash here, else we lose the information that the next + // segment is an absolute path + urls[0] = `${first}//${urls[0]}`; + } else { + urls[0] = first + urls[0]; + } + } + + // There must be two or three slashes in the file protocol, + // two slashes in anything else. + const replacement = urls[0].match(/^file:\/\/\//) ? '$1:///' : '$1://'; + urls[0] = urls[0].replace(/^(?[^/:]+):\/*/, replacement); + + for (let i = 0; i < urls.length; i += 1) { + let component = urls[i]; + + if (typeof component !== 'string') { + throw new TypeError(`Url must be a string. Received ${typeof component}`); + } + + if (component === '') { + if (i === urls.length - 1 && hasEndingSlash) { + resultArray.push('/'); + } + continue; + } + + if (component !== '/') { + if (i > 0) { + // Removing the starting slashes for each component but the first. + component = component.replace( + /^\/+/, + // Special case where the first element of rawUrls is empty + // ["", "/hello"] => /hello + component.startsWith('/') && !hasStartingSlash ? '/' : '', + ); + } + + hasEndingSlash = component.endsWith('/'); + // Removing the ending slashes for each component but the last. For the + // last component we will combine multiple slashes to a single one. + component = component.replace(/\/+$/, i < urls.length - 1 ? '' : '/'); + } + + hasStartingSlash = true; + resultArray.push(component); + } + + let str = resultArray.join('/'); + // Each input component is now separated by a single slash except the possible + // first plain protocol part. + + // Remove trailing slash before parameters or hash. + str = str.replace(/\/(?\?|&|#[^!/])/g, '$1'); + + // Replace ? in parameters with &. + const parts = str.split('?'); + str = parts.shift()! + (parts.length > 0 ? '?' : '') + parts.join('&'); + + // Dedupe forward slashes in the entire path, avoiding protocol slashes. + str = str.replace(/(?[^:/]\/)\/+/g, '$1'); + + // Dedupe forward slashes at the beginning of the path. + str = str.replace(/^\/+/g, '/'); + + return str; +} diff --git a/adapters/docusaurus-theme-search-algolia/src/validateThemeConfig.ts b/adapters/docusaurus-theme-search-algolia/src/validateThemeConfig.ts new file mode 100644 index 0000000000..3cb4cb402f --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/src/validateThemeConfig.ts @@ -0,0 +1,226 @@ +/** + * Copyright (c) Facebook, Inc. And its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import type { ThemeConfig, ThemeConfigAlgolia } from '@docsearch/docusaurus-adapter'; +import type { ThemeConfigValidationContext } from '@docusaurus/types'; +import Joi from 'joi'; + +import { getDocSearchConfig } from './getDocSearchConfig'; +import { docSearchVersionString } from './docSearchVersion'; +import { escapeRegexp } from './utils'; + +export const DEFAULT_CONFIG = { + // Enabled by default, as it makes sense in most cases + // see also https://github.com/facebook/docusaurus/issues/5880 + contextualSearch: true, + searchParameters: {}, + searchPagePath: 'search', +} satisfies Partial; + +const FacetFiltersSchema = Joi.array().items(Joi.alternatives().try(Joi.string(), Joi.array().items(Joi.string()))); + +const AskAiSearchParametersSchema = Joi.object({ + facetFilters: FacetFiltersSchema.optional(), + filters: Joi.string().optional(), + attributesToRetrieve: Joi.array().items(Joi.string()).optional(), + restrictSearchableAttributes: Joi.array().items(Joi.string()).optional(), + distinct: Joi.alternatives().try(Joi.boolean(), Joi.number(), Joi.string()).optional(), +}).unknown(); + +const SidePanelKeyboardShortcutsSchema = Joi.object({ + 'Ctrl/Cmd+I': Joi.boolean().optional(), +}); + +const SidePanelSchema = Joi.object({ + keyboardShortcuts: SidePanelKeyboardShortcutsSchema.optional(), + variant: Joi.string().valid('floating', 'inline').optional(), + side: Joi.string().valid('left', 'right').optional(), + width: Joi.alternatives().try(Joi.number(), Joi.string()).optional(), + expandedWidth: Joi.alternatives().try(Joi.number(), Joi.string()).optional(), + pushSelector: Joi.string().optional(), + suggestedQuestions: Joi.boolean().optional(), + translations: Joi.object().optional().unknown(), + hideButton: Joi.boolean().optional(), +}); + +export const Schema = Joi.object({ + algolia: Joi.object({ + // Docusaurus attributes + contextualSearch: Joi.boolean().default(DEFAULT_CONFIG.contextualSearch), + externalUrlRegex: Joi.string().optional(), + // Algolia attributes + appId: Joi.string().required().messages({ + 'any.required': + '"algolia.appId" is required. If you haven\'t migrated to the new DocSearch infra, please refer to the blog post for instructions: https://docusaurus.io/blog/2021/11/21/algolia-docsearch-migration', + }), + apiKey: Joi.string().required(), + indexName: Joi.string().required(), + searchParameters: Joi.object({ + facetFilters: FacetFiltersSchema.optional(), + }) + .default(DEFAULT_CONFIG.searchParameters) + .unknown(), + searchPagePath: Joi.alternatives() + .try(Joi.boolean().invalid(true), Joi.string()) + .allow(null) + .default(DEFAULT_CONFIG.searchPagePath), + replaceSearchResultPathname: Joi.object({ + from: Joi.custom((from) => { + if (typeof from === 'string') { + return escapeRegexp(from); + } + if (from instanceof RegExp) { + return from.source; + } + throw new Error(`it should be a RegExp or a string, but received ${from}`); + }).required(), + to: Joi.string().required(), + }).optional(), + // Ask AI configuration (DocSearch v4 only) + askAi: Joi.alternatives() + .try( + // Simple string format (assistantId only) + Joi.string(), + // Full configuration object + Joi.object({ + assistantId: Joi.string().required(), + // Optional Ask AI configuration + indexName: Joi.string().optional(), + apiKey: Joi.string().optional(), + appId: Joi.string().optional(), + agentStudio: Joi.boolean().optional(), + searchParameters: AskAiSearchParametersSchema, + suggestedQuestions: Joi.boolean().optional(), + sidePanel: Joi.alternatives().try(Joi.boolean(), SidePanelSchema).optional(), + }), + ) + .custom((askAiInput: ThemeConfigAlgolia['askAi'] | string | undefined, helpers) => { + if (!askAiInput) { + return askAiInput; + } + const algolia: ThemeConfigAlgolia = helpers.state.ancestors[0]; + const algoliaFacetFilters = algolia.searchParameters?.facetFilters; + if (typeof askAiInput === 'string') { + return { + assistantId: askAiInput, + indexName: algolia.indexName, + apiKey: algolia.apiKey, + appId: algolia.appId, + ...(algoliaFacetFilters + ? { + searchParameters: { + facetFilters: algoliaFacetFilters, + }, + } + : {}), + } satisfies ThemeConfigAlgolia['askAi']; + } + + // Fill in missing fields with the top-level Algolia config + const normalizedAskAi = { ...askAiInput }; + normalizedAskAi.indexName = normalizedAskAi.indexName ?? algolia.indexName; + normalizedAskAi.apiKey = normalizedAskAi.apiKey ?? algolia.apiKey; + normalizedAskAi.appId = normalizedAskAi.appId ?? algolia.appId; + if ( + normalizedAskAi.agentStudio !== true && + normalizedAskAi.searchParameters?.facetFilters === undefined && + algoliaFacetFilters + ) { + normalizedAskAi.searchParameters = { + ...(normalizedAskAi.searchParameters ?? {}), + facetFilters: algoliaFacetFilters, + }; + } + + return normalizedAskAi; + }) + .optional() + .messages({ + 'alternatives.types': + 'askAi must be either a string (assistantId) or an object with indexName, apiKey, appId, and assistantId', + }), + }) + .label('themeConfig.algolia') + .required() + .unknown(), +}); + +function ensureSidepanelSupported(themeConfig: ThemeConfig) { + const docsearch = getDocSearchConfig(themeConfig); + const sidePanelEnabled = + docsearch.askAi && + typeof docsearch.askAi === 'object' && + Boolean(docsearch.askAi.sidePanel); + + if (!sidePanelEnabled) { + return; + } + + const isSidepanelSupported = (() => { + const match = docSearchVersionString.match(/^(?\d+)\.(?\d+)/); + if (!match?.groups) { + return false; + } + const major = Number(match.groups.major); + const minor = Number(match.groups.minor); + return major > 4 || (major === 4 && minor >= 5); + })(); + + if (!isSidepanelSupported) { + throw new Error( + 'The askAi.sidePanel feature is only supported in DocSearch v4.5+. ' + + 'Please upgrade to DocSearch v4.5+ or remove the askAi.sidePanel configuration.', + ); + } +} + +function hasConfigValue(value: TValue | undefined | null): value is TValue { + return value !== undefined && value !== null; +} + +function getThemeConfigSource(themeConfig: ThemeConfig): 'docsearch' | 'algolia' | null { + const hasDocsearch = hasConfigValue(themeConfig.docsearch); + const hasAlgolia = hasConfigValue(themeConfig.algolia); + + if (hasDocsearch && hasAlgolia) { + throw new Error( + 'Please provide either "themeConfig.docsearch" (preferred) or "themeConfig.algolia" (legacy), but not both.', + ); + } + + if (hasDocsearch) { + return 'docsearch'; + } + + if (hasAlgolia) { + return 'algolia'; + } + + return null; +} + +export function validateThemeConfig({ + validate, + themeConfig: themeConfigInput, +}: ThemeConfigValidationContext): ThemeConfig { + const source = getThemeConfigSource(themeConfigInput); + + if (!source) { + return validate(Schema, {}); + } + + const validated = validate(Schema, { + algolia: source === 'docsearch' ? themeConfigInput.docsearch : themeConfigInput.algolia, + }) as ThemeConfig; + + const themeConfig = { + [source]: validated.algolia, + } as ThemeConfig; + + ensureSidepanelSupported(themeConfig); + return themeConfig; +} diff --git a/adapters/docusaurus-theme-search-algolia/tsconfig.client.json b/adapters/docusaurus-theme-search-algolia/tsconfig.client.json new file mode 100644 index 0000000000..861085c324 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/tsconfig.client.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.base.client.json", + "compilerOptions": { + "outDir": "lib", + "rootDir": "src", + "composite": true + }, + "include": ["src/theme", "src/client", "src/getDocSearchConfig.ts", "src/*.d.ts"], + "exclude": ["**/__tests__/**"] +} diff --git a/adapters/docusaurus-theme-search-algolia/tsconfig.client.tsbuildinfo b/adapters/docusaurus-theme-search-algolia/tsconfig.client.tsbuildinfo new file mode 100644 index 0000000000..9e2c590272 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/tsconfig.client.tsbuildinfo @@ -0,0 +1 @@ +{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/@types/react/global.d.ts","../../node_modules/csstype/index.d.ts","../../node_modules/@types/react/index.d.ts","../../node_modules/@types/react/jsx-runtime.d.ts","../../node_modules/@algolia/client-common/dist/common.d.ts","../../node_modules/@algolia/client-search/dist/browser.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/maybepromise.d.ts","../../node_modules/algoliasearch/dist/lite/browser.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/preset-algolia/algoliasearch.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/searchresponse.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/useragent.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/preset-algolia/createrequester.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/core/autocompleteenvironment.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/core/autocompletereshape.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/core/autocompleteplugin.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/core/autocompleteoptions.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/core/autocompletesource.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/core/autocompletecollection.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/core/autocompletecontext.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/core/autocompletestate.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/core/autocompletenavigator.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/core/autocompletepropgetters.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/core/autocompletesetters.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/core/autocompleteapi.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/core/index.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/createcancelablepromise.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/createcancelablepromiselist.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/createref.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/debounce.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/decycle.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/flatten.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/generateautocompleteid.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/getattributevaluebypath.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/getitemscount.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/invariant.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/isequal.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/noop.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/safelyrunonbrowser.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/useragents.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/version.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/warn.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/js/autocompleteclassnames.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/js/autocompleterenderer.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/js/highlighthitparams.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/js/autocompletecomponents.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/js/autocompletestate.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/js/autocompletesource.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/js/autocompletecollection.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/js/autocompleteplugin.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/js/autocompletepropgetters.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/js/autocompleterender.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/js/autocompletetranslations.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/js/autocompleteoptions.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/js/index.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/index.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/createconcurrentsafepromise.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getnextactiveitemid.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getnormalizedsources.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getpluginsubmitpromise.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getactiveitem.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getautocompleteelementid.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/isorcontainsnode.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/issamsung.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/maptoalgoliaresponse.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getnativeevent.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/index.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/types/autocompletestore.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/types/autocompletesubscribers.d.ts","../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/types/algoliainsightshit.d.ts","../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/createsearchinsightsapi.d.ts","../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/types/autocompleteinsightsapi.d.ts","../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/types/eventparams.d.ts","../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/types/insightsclient.d.ts","../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/types/index.d.ts","../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/createalgoliainsightsplugin.d.ts","../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/index.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/types/index.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/createautocomplete.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/getdefaultprops.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/index.d.ts","../../node_modules/utility-types/dist/aliases-and-guards.d.ts","../../node_modules/utility-types/dist/mapped-types.d.ts","../../node_modules/utility-types/dist/utility-types.d.ts","../../node_modules/utility-types/dist/functional-helpers.d.ts","../../node_modules/utility-types/dist/index.d.ts","../../packages/docsearch-core/dist/esm/index.d.ts","../../node_modules/@types/json-schema/index.d.ts","../../node_modules/@ai-sdk/provider/dist/index.d.ts","../../node_modules/zod/v4/core/standard-schema.d.cts","../../node_modules/zod/v4/core/util.d.cts","../../node_modules/zod/v4/core/versions.d.cts","../../node_modules/zod/v4/core/schemas.d.cts","../../node_modules/zod/v4/core/checks.d.cts","../../node_modules/zod/v4/core/errors.d.cts","../../node_modules/zod/v4/core/core.d.cts","../../node_modules/zod/v4/core/parse.d.cts","../../node_modules/zod/v4/core/regexes.d.cts","../../node_modules/zod/v4/locales/ar.d.cts","../../node_modules/zod/v4/locales/az.d.cts","../../node_modules/zod/v4/locales/be.d.cts","../../node_modules/zod/v4/locales/bg.d.cts","../../node_modules/zod/v4/locales/ca.d.cts","../../node_modules/zod/v4/locales/cs.d.cts","../../node_modules/zod/v4/locales/da.d.cts","../../node_modules/zod/v4/locales/de.d.cts","../../node_modules/zod/v4/locales/en.d.cts","../../node_modules/zod/v4/locales/eo.d.cts","../../node_modules/zod/v4/locales/es.d.cts","../../node_modules/zod/v4/locales/fa.d.cts","../../node_modules/zod/v4/locales/fi.d.cts","../../node_modules/zod/v4/locales/fr.d.cts","../../node_modules/zod/v4/locales/fr-ca.d.cts","../../node_modules/zod/v4/locales/he.d.cts","../../node_modules/zod/v4/locales/hu.d.cts","../../node_modules/zod/v4/locales/id.d.cts","../../node_modules/zod/v4/locales/is.d.cts","../../node_modules/zod/v4/locales/it.d.cts","../../node_modules/zod/v4/locales/ja.d.cts","../../node_modules/zod/v4/locales/ka.d.cts","../../node_modules/zod/v4/locales/kh.d.cts","../../node_modules/zod/v4/locales/km.d.cts","../../node_modules/zod/v4/locales/ko.d.cts","../../node_modules/zod/v4/locales/lt.d.cts","../../node_modules/zod/v4/locales/mk.d.cts","../../node_modules/zod/v4/locales/ms.d.cts","../../node_modules/zod/v4/locales/nl.d.cts","../../node_modules/zod/v4/locales/no.d.cts","../../node_modules/zod/v4/locales/ota.d.cts","../../node_modules/zod/v4/locales/ps.d.cts","../../node_modules/zod/v4/locales/pl.d.cts","../../node_modules/zod/v4/locales/pt.d.cts","../../node_modules/zod/v4/locales/ru.d.cts","../../node_modules/zod/v4/locales/sl.d.cts","../../node_modules/zod/v4/locales/sv.d.cts","../../node_modules/zod/v4/locales/ta.d.cts","../../node_modules/zod/v4/locales/th.d.cts","../../node_modules/zod/v4/locales/tr.d.cts","../../node_modules/zod/v4/locales/ua.d.cts","../../node_modules/zod/v4/locales/uk.d.cts","../../node_modules/zod/v4/locales/ur.d.cts","../../node_modules/zod/v4/locales/vi.d.cts","../../node_modules/zod/v4/locales/zh-cn.d.cts","../../node_modules/zod/v4/locales/zh-tw.d.cts","../../node_modules/zod/v4/locales/yo.d.cts","../../node_modules/zod/v4/locales/index.d.cts","../../node_modules/zod/v4/core/registries.d.cts","../../node_modules/zod/v4/core/doc.d.cts","../../node_modules/zod/v4/core/api.d.cts","../../node_modules/zod/v4/core/json-schema.d.cts","../../node_modules/zod/v4/core/to-json-schema.d.cts","../../node_modules/zod/v4/core/index.d.cts","../../node_modules/zod/v4/classic/errors.d.cts","../../node_modules/zod/v4/classic/parse.d.cts","../../node_modules/zod/v4/classic/schemas.d.cts","../../node_modules/zod/v4/classic/checks.d.cts","../../node_modules/zod/v4/classic/compat.d.cts","../../node_modules/zod/v4/classic/iso.d.cts","../../node_modules/zod/v4/classic/coerce.d.cts","../../node_modules/zod/v4/classic/external.d.cts","../../node_modules/zod/v4/classic/index.d.cts","../../node_modules/zod/v4/index.d.cts","../../node_modules/@standard-schema/spec/dist/index.d.ts","../../node_modules/zod/v3/helpers/typealiases.d.cts","../../node_modules/zod/v3/helpers/util.d.cts","../../node_modules/zod/v3/zoderror.d.cts","../../node_modules/zod/v3/locales/en.d.cts","../../node_modules/zod/v3/errors.d.cts","../../node_modules/zod/v3/helpers/parseutil.d.cts","../../node_modules/zod/v3/helpers/enumutil.d.cts","../../node_modules/zod/v3/helpers/errorutil.d.cts","../../node_modules/zod/v3/helpers/partialutil.d.cts","../../node_modules/zod/v3/standard-schema.d.cts","../../node_modules/zod/v3/types.d.cts","../../node_modules/zod/v3/external.d.cts","../../node_modules/zod/v3/index.d.cts","../../node_modules/eventsource-parser/dist/stream.d.ts","../../node_modules/@ai-sdk/provider-utils/dist/index.d.ts","../../node_modules/@ai-sdk/gateway/dist/index.d.ts","../../node_modules/@opentelemetry/api/build/src/baggage/internal/symbol.d.ts","../../node_modules/@opentelemetry/api/build/src/baggage/types.d.ts","../../node_modules/@opentelemetry/api/build/src/baggage/utils.d.ts","../../node_modules/@opentelemetry/api/build/src/common/exception.d.ts","../../node_modules/@opentelemetry/api/build/src/common/time.d.ts","../../node_modules/@opentelemetry/api/build/src/common/attributes.d.ts","../../node_modules/@opentelemetry/api/build/src/context/types.d.ts","../../node_modules/@opentelemetry/api/build/src/context/context.d.ts","../../node_modules/@opentelemetry/api/build/src/api/context.d.ts","../../node_modules/@opentelemetry/api/build/src/diag/types.d.ts","../../node_modules/@opentelemetry/api/build/src/diag/consolelogger.d.ts","../../node_modules/@opentelemetry/api/build/src/api/diag.d.ts","../../node_modules/@opentelemetry/api/build/src/metrics/observableresult.d.ts","../../node_modules/@opentelemetry/api/build/src/metrics/metric.d.ts","../../node_modules/@opentelemetry/api/build/src/metrics/meter.d.ts","../../node_modules/@opentelemetry/api/build/src/metrics/noopmeter.d.ts","../../node_modules/@opentelemetry/api/build/src/metrics/meterprovider.d.ts","../../node_modules/@opentelemetry/api/build/src/api/metrics.d.ts","../../node_modules/@opentelemetry/api/build/src/propagation/textmappropagator.d.ts","../../node_modules/@opentelemetry/api/build/src/baggage/context-helpers.d.ts","../../node_modules/@opentelemetry/api/build/src/api/propagation.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/attributes.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/trace_state.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/span_context.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/link.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/status.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/span.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/span_kind.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/spanoptions.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/tracer.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/tracer_options.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/proxytracer.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/tracer_provider.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/proxytracerprovider.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/samplingresult.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/sampler.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/trace_flags.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/internal/utils.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/spancontext-utils.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/invalid-span-constants.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/context-utils.d.ts","../../node_modules/@opentelemetry/api/build/src/api/trace.d.ts","../../node_modules/@opentelemetry/api/build/src/context-api.d.ts","../../node_modules/@opentelemetry/api/build/src/diag-api.d.ts","../../node_modules/@opentelemetry/api/build/src/metrics-api.d.ts","../../node_modules/@opentelemetry/api/build/src/propagation-api.d.ts","../../node_modules/@opentelemetry/api/build/src/trace-api.d.ts","../../node_modules/@opentelemetry/api/build/src/index.d.ts","../../node_modules/ai/dist/index.d.ts","../../node_modules/@ai-sdk/react/dist/index.d.ts","../../packages/docsearch-react/dist/esm/index.d.ts","../../packages/docsearch-react/dist/esm/sidepanel.d.ts","./src/theme-search-algolia.d.ts","../../packages/docsearch-react/dist/esm/docsearchbutton.d.ts","../../packages/docsearch-react/dist/esm/usedocsearchkeyboardevents.d.ts","../../node_modules/@types/prismjs/index.d.ts","../../node_modules/prism-react-renderer/dist/index.d.ts","../../node_modules/@docusaurus/theme-common/lib/hooks/usecodewordwrap.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/codeblockutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/contexts/colormode.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/usethemeconfig.d.ts","../../node_modules/@docusaurus/theme-common/lib/components/themedcomponent/index.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/storageutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/usepluralform.d.ts","../../node_modules/@docusaurus/theme-common/lib/components/collapsible/index.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/themeclassnames.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/accessibilityutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/reactutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/metadatautils.d.ts","../../node_modules/@docusaurus/theme-common/lib/contexts/navbarsecondarymenu/content.d.ts","../../node_modules/@docusaurus/theme-common/lib/hooks/usewindowsize.d.ts","../../node_modules/@docusaurus/utils/lib/constants.d.ts","../../node_modules/@docusaurus/utils/lib/emitutils.d.ts","../../node_modules/@docusaurus/utils/lib/gitutils.d.ts","../../node_modules/@docusaurus/types/src/i18n.d.ts","../../node_modules/acorn/dist/acorn.d.mts","../../node_modules/buffer/index.d.ts","../../node_modules/@types/estree/index.d.ts","../../node_modules/@types/eslint/use-at-your-own-risk.d.ts","../../node_modules/@types/eslint/index.d.ts","../../node_modules/@types/eslint-scope/index.d.ts","../../node_modules/schema-utils/declarations/validationerror.d.ts","../../node_modules/fast-uri/types/index.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/compile/codegen/code.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/compile/codegen/scope.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/compile/codegen/index.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/compile/rules.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/compile/util.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/compile/validate/subschema.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/compile/errors.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/compile/validate/index.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/compile/validate/datatype.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/applicator/additionalitems.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/applicator/items2020.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/applicator/contains.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/applicator/dependencies.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/applicator/propertynames.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/applicator/additionalproperties.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/applicator/not.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/applicator/anyof.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/applicator/oneof.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/applicator/if.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/applicator/index.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/validation/limitnumber.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/validation/multipleof.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/validation/pattern.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/validation/required.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/validation/uniqueitems.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/validation/const.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/validation/enum.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/validation/index.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/format/format.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedproperties.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/unevaluated/unevaluateditems.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/validation/dependentrequired.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/discriminator/types.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/discriminator/index.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/errors.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/types/json-schema.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/types/jtd-schema.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/runtime/validation_error.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/compile/ref_error.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/core.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/compile/resolve.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/compile/index.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/types/index.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/ajv.d.ts","../../node_modules/schema-utils/declarations/validate.d.ts","../../node_modules/schema-utils/declarations/index.d.ts","../../node_modules/tapable/tapable.d.ts","../../node_modules/webpack/types.d.ts","../../node_modules/webpack-merge/dist/types.d.ts","../../node_modules/commander/typings/index.d.ts","../../node_modules/joi/lib/index.d.ts","../../node_modules/react-helmet-async/index.d.ts","../../node_modules/@docusaurus/types/src/swizzle.d.ts","../../node_modules/@docusaurus/types/src/routing.d.ts","../../node_modules/@docusaurus/types/src/bundler.d.ts","../../node_modules/@docusaurus/types/src/plugin.d.ts","../../node_modules/@docusaurus/types/src/context.d.ts","../../node_modules/@docusaurus/types/src/reporting.d.ts","../../node_modules/@types/unist/index.d.ts","../../node_modules/@types/mdast/index.d.ts","../../node_modules/@types/estree-jsx/index.d.ts","../../node_modules/vfile-message/lib/index.d.ts","../../node_modules/vfile-message/index.d.ts","../../node_modules/vfile/lib/index.d.ts","../../node_modules/vfile/index.d.ts","../../node_modules/unified/lib/callable-instance.d.ts","../../node_modules/trough/lib/index.d.ts","../../node_modules/trough/index.d.ts","../../node_modules/unified/lib/index.d.ts","../../node_modules/unified/index.d.ts","../../node_modules/@mdx-js/mdx/node_modules/source-map/source-map.d.ts","../../node_modules/@types/hast/index.d.ts","../../node_modules/hast-util-to-estree/lib/handlers/comment.d.ts","../../node_modules/hast-util-to-estree/lib/handlers/element.d.ts","../../node_modules/micromark-util-types/index.d.ts","../../node_modules/mdast-util-from-markdown/lib/types.d.ts","../../node_modules/mdast-util-from-markdown/lib/index.d.ts","../../node_modules/mdast-util-from-markdown/index.d.ts","../../node_modules/mdast-util-to-markdown/lib/types.d.ts","../../node_modules/mdast-util-to-markdown/lib/index.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/blockquote.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/break.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/code.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/definition.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/emphasis.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/heading.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/html.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/image.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/image-reference.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/inline-code.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/link.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/link-reference.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/list.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/list-item.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/paragraph.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/root.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/strong.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/text.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/thematic-break.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/index.d.ts","../../node_modules/mdast-util-to-markdown/index.d.ts","../../node_modules/mdast-util-mdx-expression/lib/index.d.ts","../../node_modules/mdast-util-mdx-expression/index.d.ts","../../node_modules/hast-util-to-estree/lib/handlers/mdx-expression.d.ts","../../node_modules/mdast-util-mdx-jsx/lib/index.d.ts","../../node_modules/mdast-util-mdx-jsx/index.d.ts","../../node_modules/hast-util-to-estree/lib/handlers/mdx-jsx-element.d.ts","../../node_modules/mdast-util-mdxjs-esm/lib/index.d.ts","../../node_modules/mdast-util-mdxjs-esm/index.d.ts","../../node_modules/hast-util-to-estree/lib/handlers/mdxjs-esm.d.ts","../../node_modules/hast-util-to-estree/lib/handlers/root.d.ts","../../node_modules/hast-util-to-estree/lib/handlers/text.d.ts","../../node_modules/hast-util-to-estree/lib/handlers/index.d.ts","../../node_modules/hast-util-to-estree/lib/index.d.ts","../../node_modules/property-information/lib/util/info.d.ts","../../node_modules/property-information/lib/find.d.ts","../../node_modules/property-information/lib/hast-to-react.d.ts","../../node_modules/property-information/lib/normalize.d.ts","../../node_modules/property-information/index.d.ts","../../node_modules/hast-util-to-estree/lib/state.d.ts","../../node_modules/hast-util-to-estree/index.d.ts","../../node_modules/rehype-recma/lib/index.d.ts","../../node_modules/rehype-recma/index.d.ts","../../node_modules/mdast-util-to-hast/lib/state.d.ts","../../node_modules/mdast-util-to-hast/lib/footer.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/blockquote.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/break.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/code.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/delete.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/emphasis.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/footnote-reference.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/heading.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/html.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/image-reference.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/image.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/inline-code.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/link-reference.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/link.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/list-item.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/list.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/paragraph.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/root.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/strong.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/table.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/table-cell.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/table-row.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/text.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/thematic-break.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/index.d.ts","../../node_modules/mdast-util-to-hast/lib/index.d.ts","../../node_modules/mdast-util-to-hast/index.d.ts","../../node_modules/remark-rehype/lib/index.d.ts","../../node_modules/remark-rehype/index.d.ts","../../node_modules/@mdx-js/mdx/lib/core.d.ts","../../node_modules/@mdx-js/mdx/lib/node-types.d.ts","../../node_modules/@mdx-js/mdx/lib/compile.d.ts","../../node_modules/hast-util-to-jsx-runtime/lib/types.d.ts","../../node_modules/hast-util-to-jsx-runtime/lib/index.d.ts","../../node_modules/hast-util-to-jsx-runtime/index.d.ts","../../node_modules/@types/mdx/types.d.ts","../../node_modules/@mdx-js/mdx/lib/util/resolve-evaluate-options.d.ts","../../node_modules/@mdx-js/mdx/lib/evaluate.d.ts","../../node_modules/@mdx-js/mdx/lib/run.d.ts","../../node_modules/@mdx-js/mdx/index.d.ts","../../node_modules/@docusaurus/types/src/markdown.d.ts","../../node_modules/@docusaurus/types/src/config.d.ts","../../node_modules/@types/history/domutils.d.ts","../../node_modules/@types/history/createbrowserhistory.d.ts","../../node_modules/@types/history/createhashhistory.d.ts","../../node_modules/@types/history/creatememoryhistory.d.ts","../../node_modules/@types/history/locationutils.d.ts","../../node_modules/@types/history/pathutils.d.ts","../../node_modules/@types/history/index.d.ts","../../node_modules/@docusaurus/types/src/clientmodule.d.ts","../../node_modules/@docusaurus/types/src/utils.d.ts","../../node_modules/@docusaurus/types/src/index.d.ts","../../node_modules/@docusaurus/utils/lib/i18nutils.d.ts","../../node_modules/@docusaurus/utils/lib/jsutils.d.ts","../../node_modules/@docusaurus/utils/lib/urlutils.d.ts","../../node_modules/@docusaurus/utils/lib/tags.d.ts","../../node_modules/@docusaurus/utils/lib/slugger.d.ts","../../node_modules/@docusaurus/utils/lib/markdownutils.d.ts","../../node_modules/@docusaurus/utils/lib/markdownlinks.d.ts","../../node_modules/@docusaurus/utils/lib/pathutils.d.ts","../../node_modules/@docusaurus/utils/lib/hashutils.d.ts","../../node_modules/@types/node/ts5.7/compatibility/float16array.d.ts","../../node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../node_modules/@types/node/web-globals/crypto.d.ts","../../node_modules/@types/node/web-globals/domexception.d.ts","../../node_modules/@types/node/web-globals/events.d.ts","../../node_modules/undici-types/utility.d.ts","../../node_modules/undici-types/header.d.ts","../../node_modules/undici-types/readable.d.ts","../../node_modules/undici-types/fetch.d.ts","../../node_modules/undici-types/formdata.d.ts","../../node_modules/undici-types/connector.d.ts","../../node_modules/undici-types/client-stats.d.ts","../../node_modules/undici-types/client.d.ts","../../node_modules/undici-types/errors.d.ts","../../node_modules/undici-types/dispatcher.d.ts","../../node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/undici-types/global-origin.d.ts","../../node_modules/undici-types/pool-stats.d.ts","../../node_modules/undici-types/pool.d.ts","../../node_modules/undici-types/handlers.d.ts","../../node_modules/undici-types/balanced-pool.d.ts","../../node_modules/undici-types/h2c-client.d.ts","../../node_modules/undici-types/agent.d.ts","../../node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/undici-types/mock-call-history.d.ts","../../node_modules/undici-types/mock-agent.d.ts","../../node_modules/undici-types/mock-client.d.ts","../../node_modules/undici-types/mock-pool.d.ts","../../node_modules/undici-types/snapshot-agent.d.ts","../../node_modules/undici-types/mock-errors.d.ts","../../node_modules/undici-types/proxy-agent.d.ts","../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/undici-types/retry-handler.d.ts","../../node_modules/undici-types/retry-agent.d.ts","../../node_modules/undici-types/api.d.ts","../../node_modules/undici-types/cache-interceptor.d.ts","../../node_modules/undici-types/interceptors.d.ts","../../node_modules/undici-types/util.d.ts","../../node_modules/undici-types/cookies.d.ts","../../node_modules/undici-types/patch.d.ts","../../node_modules/undici-types/websocket.d.ts","../../node_modules/undici-types/eventsource.d.ts","../../node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/undici-types/content-type.d.ts","../../node_modules/undici-types/cache.d.ts","../../node_modules/undici-types/index.d.ts","../../node_modules/@types/node/web-globals/fetch.d.ts","../../node_modules/@types/node/web-globals/navigator.d.ts","../../node_modules/@types/node/web-globals/storage.d.ts","../../node_modules/@types/node/web-globals/streams.d.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.d.ts","../../node_modules/@types/node/inspector.generated.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/readline/promises.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/sea.d.ts","../../node_modules/@types/node/sqlite.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/test.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/ts5.7/index.d.ts","../../node_modules/@nodelib/fs.stat/out/types/index.d.ts","../../node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts","../../node_modules/@nodelib/fs.stat/out/settings.d.ts","../../node_modules/@nodelib/fs.stat/out/providers/async.d.ts","../../node_modules/@nodelib/fs.stat/out/index.d.ts","../../node_modules/@nodelib/fs.scandir/out/types/index.d.ts","../../node_modules/@nodelib/fs.scandir/out/adapters/fs.d.ts","../../node_modules/@nodelib/fs.scandir/out/settings.d.ts","../../node_modules/@nodelib/fs.scandir/out/providers/async.d.ts","../../node_modules/@nodelib/fs.scandir/out/index.d.ts","../../node_modules/@nodelib/fs.walk/out/types/index.d.ts","../../node_modules/@nodelib/fs.walk/out/settings.d.ts","../../node_modules/@nodelib/fs.walk/out/readers/reader.d.ts","../../node_modules/@nodelib/fs.walk/out/readers/async.d.ts","../../node_modules/@nodelib/fs.walk/out/providers/async.d.ts","../../node_modules/@nodelib/fs.walk/out/index.d.ts","../../node_modules/fast-glob/out/types/index.d.ts","../../node_modules/fast-glob/out/settings.d.ts","../../node_modules/fast-glob/out/managers/tasks.d.ts","../../node_modules/fast-glob/out/index.d.ts","../../node_modules/globby/index.d.ts","../../node_modules/@docusaurus/utils/lib/globutils.d.ts","../../node_modules/@docusaurus/utils/lib/webpackutils.d.ts","../../node_modules/@docusaurus/utils/lib/moduleutils.d.ts","../../node_modules/@docusaurus/utils/lib/datafileutils.d.ts","../../node_modules/@docusaurus/utils/lib/contentvisibilityutils.d.ts","../../node_modules/@docusaurus/utils/lib/regexputils.d.ts","../../node_modules/@docusaurus/utils/lib/cliutils.d.ts","../../node_modules/@docusaurus/utils/lib/routeutils.d.ts","../../node_modules/@docusaurus/utils/lib/lastupdateutils.d.ts","../../node_modules/@docusaurus/utils/lib/index.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/tagsutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/hooks/usesearchpage.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/anchorutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/footerutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/regexputils.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/jsutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/hooks/useprismtheme.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/admonitionutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/historyutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/skiptocontentutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/translations/contentvisibilitytranslations.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/errorboundaryutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/index.d.ts","../../node_modules/@types/react-dom/index.d.ts","./src/getdocsearchconfig.ts","./src/client/usealgoliathemeconfig.ts","../../node_modules/@types/react-router/index.d.ts","../../node_modules/@types/react-router-config/index.d.ts","../../node_modules/react-loadable/index.d.ts","../../node_modules/@types/react-router-dom/index.d.ts","../../node_modules/@types/react-dom/client.d.ts","../../node_modules/@docusaurus/module-type-aliases/src/index.d.ts","../../node_modules/@docusaurus/mdx-loader/lib/frontmatter.d.ts","../../node_modules/@docusaurus/mdx-loader/lib/remark/admonitions/index.d.ts","../../node_modules/@docusaurus/mdx-loader/lib/processor.d.ts","../../node_modules/@docusaurus/mdx-loader/lib/remark/resolvemarkdownlinks/index.d.ts","../../node_modules/@docusaurus/mdx-loader/lib/utils.d.ts","../../node_modules/@docusaurus/mdx-loader/lib/options.d.ts","../../node_modules/@docusaurus/mdx-loader/lib/loader.d.ts","../../node_modules/@docusaurus/mdx-loader/lib/remark/toc/types.d.ts","../../node_modules/@docusaurus/mdx-loader/lib/createmdxloader.d.ts","../../node_modules/@docusaurus/mdx-loader/lib/index.d.ts","../../node_modules/@docusaurus/plugin-content-docs/src/sidebars/types.ts","../../node_modules/@docusaurus/plugin-content-docs/src/plugin-content-docs.d.ts","../../node_modules/@docusaurus/plugin-content-docs/lib/client/docsutils.d.ts","../../node_modules/@docusaurus/plugin-content-docs/lib/client/docspreferredversion.d.ts","../../node_modules/@docusaurus/plugin-content-docs/lib/client/docsidebaritemsexpandedstate.d.ts","../../node_modules/@docusaurus/plugin-content-docs/lib/client/docsversion.d.ts","../../node_modules/@docusaurus/plugin-content-docs/lib/client/docssidebar.d.ts","../../node_modules/@docusaurus/plugin-content-docs/lib/client/doc.d.ts","../../node_modules/@docusaurus/plugin-content-docs/lib/client/docssearch.d.ts","../../node_modules/schema-dts/dist/schema.d.ts","../../node_modules/@docusaurus/plugin-content-docs/lib/client/structureddatautils.d.ts","../../node_modules/@docusaurus/plugin-content-docs/lib/client/index.d.ts","../../node_modules/@docusaurus/theme-common/lib/contexts/announcementbar.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/tabsutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/contexts/navbarmobilesidebar.d.ts","../../node_modules/@docusaurus/theme-common/lib/contexts/navbarsecondarymenu/display.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/usealternatepageutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/searchutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/titleformatterutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/uselocationchange.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/uselocalpathname.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/tocutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/scrollutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/routesutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/navbarutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/hooks/usetochighlight.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/intlutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/hooks/usehideablenavbar.d.ts","../../node_modules/@docusaurus/theme-common/lib/hooks/usekeyboardnavigation.d.ts","../../node_modules/@docusaurus/theme-common/lib/hooks/uselockbodyscroll.d.ts","../../node_modules/@docusaurus/theme-common/lib/hooks/usebacktotopbutton.d.ts","../../node_modules/@docusaurus/theme-common/lib/translations/blogtranslations.d.ts","../../node_modules/@docusaurus/theme-common/lib/internal.d.ts","./src/client/usealgoliacontextualfacetfilters.ts","./src/client/usesearchresulturlprocessor.ts","./src/client/utils.ts","./src/client/usealgoliaaskai.ts","./src/client/usealgoliaaskaisidepanel.ts","./src/client/index.ts","../../packages/docsearch-react/dist/esm/docsearchmodal.d.ts","./src/theme/searchbar/index.tsx","../../node_modules/@algolia/events/types/index.d.ts","../../node_modules/@algolia/recommend/dist/browser.d.ts","../../node_modules/@algolia/abtesting/dist/browser.d.ts","../../node_modules/@algolia/client-abtesting/dist/browser.d.ts","../../node_modules/@algolia/client-analytics/dist/browser.d.ts","../../node_modules/@algolia/client-insights/dist/browser.d.ts","../../node_modules/@algolia/client-personalization/dist/browser.d.ts","../../node_modules/@algolia/client-query-suggestions/dist/browser.d.ts","../../node_modules/@algolia/ingestion/dist/browser.d.ts","../../node_modules/@algolia/monitoring/dist/browser.d.ts","../../node_modules/algoliasearch/dist/browser.d.ts","../../node_modules/algoliasearch-helper/types/algoliasearch.d.ts","../../node_modules/algoliasearch-helper/index.d.ts","../../node_modules/clsx/clsx.d.mts","./src/theme/searchpage/index.tsx","./src/theme/searchtranslations/index.ts","./src/deps.d.ts","../../node_modules/feed/lib/typings/index.d.ts","../../node_modules/feed/lib/feed.d.ts","../../node_modules/@docusaurus/plugin-content-blog/src/plugin-content-blog.d.ts","../../node_modules/@docusaurus/plugin-content-pages/src/plugin-content-pages.d.ts","../../node_modules/@mdx-js/react/lib/index.d.ts","../../node_modules/@mdx-js/react/index.d.ts","../../node_modules/@docusaurus/theme-common/lib/components/details/index.d.ts","../../node_modules/@docusaurus/theme-classic/src/theme-classic.d.ts","./src/types.d.ts","../../node_modules/@types/aria-query/index.d.ts","../../node_modules/@babel/types/lib/index.d.ts","../../node_modules/@types/babel__generator/index.d.ts","../../node_modules/@babel/parser/typings/babel-parser.d.ts","../../node_modules/@types/babel__template/index.d.ts","../../node_modules/@types/babel__traverse/index.d.ts","../../node_modules/@types/babel__core/index.d.ts","../../node_modules/@types/connect/index.d.ts","../../node_modules/@types/body-parser/index.d.ts","../../node_modules/@types/bonjour/index.d.ts","../../node_modules/@types/send/index.d.ts","../../node_modules/@types/qs/index.d.ts","../../node_modules/@types/range-parser/index.d.ts","../../node_modules/@types/express-serve-static-core/index.d.ts","../../node_modules/@types/connect-history-api-fallback/index.d.ts","../../node_modules/@types/ms/index.d.ts","../../node_modules/@types/debug/index.d.ts","../../node_modules/@types/http-errors/index.d.ts","../../node_modules/@types/mime/index.d.ts","../../node_modules/@types/serve-static/node_modules/@types/send/index.d.ts","../../node_modules/@types/serve-static/index.d.ts","../../node_modules/@types/express/node_modules/@types/express-serve-static-core/index.d.ts","../../node_modules/@types/express/index.d.ts","../../node_modules/@types/jsonfile/index.d.ts","../../node_modules/@types/jsonfile/utils.d.ts","../../node_modules/@types/fs-extra/index.d.ts","../../node_modules/@types/glob/node_modules/@types/minimatch/index.d.ts","../../node_modules/@types/glob/index.d.ts","../../node_modules/@types/gtag.js/index.d.ts","../../node_modules/@types/html-minifier-terser/index.d.ts","../../node_modules/@types/http-cache-semantics/index.d.ts","../../node_modules/@types/http-proxy/index.d.ts","../../node_modules/@types/istanbul-lib-coverage/index.d.ts","../../node_modules/@types/istanbul-lib-report/index.d.ts","../../node_modules/@types/istanbul-reports/index.d.ts","../../node_modules/@types/json5/index.d.ts","../../node_modules/@types/keyv/index.d.ts","../../node_modules/@types/lodash/common/common.d.ts","../../node_modules/@types/lodash/common/array.d.ts","../../node_modules/@types/lodash/common/collection.d.ts","../../node_modules/@types/lodash/common/date.d.ts","../../node_modules/@types/lodash/common/function.d.ts","../../node_modules/@types/lodash/common/lang.d.ts","../../node_modules/@types/lodash/common/math.d.ts","../../node_modules/@types/lodash/common/number.d.ts","../../node_modules/@types/lodash/common/object.d.ts","../../node_modules/@types/lodash/common/seq.d.ts","../../node_modules/@types/lodash/common/string.d.ts","../../node_modules/@types/lodash/common/util.d.ts","../../node_modules/@types/lodash/index.d.ts","../../node_modules/@types/mdx/index.d.ts","../../node_modules/@types/minimatch/index.d.ts","../../node_modules/@types/minimist/index.d.ts","../../node_modules/@types/node-forge/index.d.ts","../../node_modules/@types/normalize-package-data/index.d.ts","../../node_modules/@types/resolve/index.d.ts","../../node_modules/@types/responselike/index.d.ts","../../node_modules/@types/retry/index.d.ts","../../node_modules/@types/sax/index.d.ts","../../node_modules/@types/serve-index/node_modules/@types/express/index.d.ts","../../node_modules/@types/serve-index/index.d.ts","../../node_modules/@types/sinonjs__fake-timers/index.d.ts","../../node_modules/@types/sizzle/index.d.ts","../../node_modules/@types/sockjs/index.d.ts","../../node_modules/@types/ws/index.d.ts","../../node_modules/@types/yargs-parser/index.d.ts","../../node_modules/@types/yargs/index.d.ts","../../node_modules/@types/yauzl/index.d.ts"],"fileIdsList":[[56,283,502,556,573,574,653,659,703,704,705,706,707,735,787],[55,56,60,281,283,502,556,573,574,659,703,705,735,787],[55,56,283,502,556,573,574,659,735,787],[56,60,283,502,556,573,574,653,659,681,702,735,787],[56,283,502,556,573,574,652,659,735,787],[55,56,283,502,556,573,574,650,653,659,735,787],[56,60,283,502,556,573,574,659,735,787],[283,502,556,573,574,659,735,787],[56,283,502,556,573,574,659,735,787],[55,60,137,281,282,502,556,573,574,659,735,787],[55,56,60,132,281,282,283,284,285,502,556,573,574,650,651,659,708,727,735,787],[55,56,60,283,502,556,573,574,650,659,681,708,723,724,735,787],[56,281,283,502,556,573,574,659,735,787],[283,502,556,573,574,650,659,735,787],[140,229,283,502,556,573,574,659,735,787],[140,213,214,227,228,283,502,556,573,574,659,735,787],[139,283,502,556,573,574,659,735,787],[213,227,229,279,283,502,556,573,574,659,735,787],[57,283,502,556,573,574,659,735,787],[129,283,502,556,573,574,659,735,787],[129,130,131,283,502,556,573,574,659,735,787],[118,129,283,502,556,573,574,659,735,787],[77,119,120,128,283,502,556,573,574,659,735,787],[118,283,502,556,573,574,659,735,787],[107,283,502,556,573,574,659,735,787],[69,129,283,502,556,573,574,659,735,787],[79,129,283,502,556,573,574,659,735,787],[78,79,108,109,110,111,112,113,114,115,116,117,283,502,556,573,574,659,735,787],[58,107,283,502,556,573,574,659,735,787],[107,126,283,502,556,573,574,659,735,787],[126,283,502,556,573,574,659,735,787],[126,127,283,502,556,573,574,659,735,787],[121,122,283,502,556,573,574,659,735,787],[107,123,126,283,502,556,573,574,659,735,787],[121,123,124,125,283,502,556,573,574,659,735,787],[73,74,75,283,502,556,573,574,659,735,787],[69,76,283,502,556,573,574,659,735,787],[72,76,283,502,556,573,574,659,735,787],[59,65,66,67,69,72,73,76,283,502,556,573,574,659,735,787],[66,68,69,76,283,502,556,573,574,659,735,787],[68,69,76,283,502,556,573,574,659,735,787],[69,72,76,283,502,556,573,574,659,735,787],[70,72,76,283,502,556,573,574,659,735,787],[58,59,61,62,64,68,72,76,283,502,556,573,574,659,735,787],[70,71,76,283,502,556,573,574,659,735,787],[65,66,67,68,69,70,71,72,74,75,76,283,502,556,573,574,659,735,787],[59,62,63,80,81,82,83,84,85,86,87,88,89,90,91,92,93,106,283,502,556,573,574,659,735,787],[77,99,283,502,556,573,574,659,735,787],[95,96,283,502,556,573,574,659,735,787],[59,77,94,95,97,98,99,101,102,103,104,283,502,556,573,574,659,735,787],[67,77,105,283,502,556,573,574,659,735,787],[77,98,283,502,556,573,574,659,735,787],[77,95,97,98,283,502,556,573,574,659,735,787],[77,100,283,502,556,573,574,659,735,787],[94,95,96,97,98,99,100,101,102,103,104,105,283,502,556,573,574,659,735,787],[58,60,283,502,556,573,574,659,735,787],[61,62,63,283,502,556,573,574,659,735,787],[58,283,502,556,573,574,659,735,787],[283,502,556,573,574,659,735,738,787],[283,361,502,556,573,574,659,665,735,787],[283,502,556,573,574,659,669,735,787],[55,283,502,556,573,574,659,662,665,666,667,668,735,787],[283,489,502,556,573,574,659,662,663,664,735,787],[283,502,556,573,574,637,659,660,661,665,735,787],[283,373,383,416,419,422,464,502,556,573,574,659,735,787],[283,373,383,416,419,422,464,489,502,556,573,574,659,735,787],[283,373,416,419,422,464,502,556,573,574,659,735,787],[283,502,556,573,574,637,659,662,665,735,787],[55,283,365,489,502,556,573,574,655,656,657,658,659,735,787],[55,137,283,489,502,556,573,574,637,659,669,729,730,735,787],[55,283,502,556,573,574,659,671,735,787],[55,283,502,556,573,574,659,735,787],[55,283,502,556,573,574,659,681,735,787],[55,283,502,556,573,574,659,671,681,735,787],[283,489,502,556,573,574,659,672,673,674,675,676,677,678,680,735,787],[283,502,556,573,574,659,671,679,735,787],[55,137,283,489,502,556,573,574,637,655,659,669,670,671,735,787],[56,137,283,502,556,573,574,637,659,671,735,787],[55,283,489,502,556,573,574,637,659,669,731,735,787],[55,137,283,286,287,489,502,556,573,574,637,650,659,669,671,702,730,731,733,734,735,787],[283,287,502,556,573,574,659,735,787],[283,290,291,292,293,294,295,296,297,298,299,300,301,502,556,573,574,638,639,640,641,642,643,644,645,646,647,648,649,659,735,787],[283,288,289,290,299,502,556,573,574,646,650,659,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,735,787],[55,283,287,288,502,556,573,574,659,735,787],[283,291,502,556,573,574,659,735,787],[283,486,502,556,573,574,659,735,787],[283,502,556,573,574,655,659,735,787],[283,502,556,573,574,637,659,735,787],[137,283,287,289,290,502,556,573,574,659,735,787],[283,361,502,556,573,574,659,735,787],[137,283,305,361,369,370,371,478,502,556,573,574,659,735,787],[283,305,367,368,369,479,502,556,573,574,659,735,787],[137,283,502,556,573,574,659,735,787],[283,305,366,367,368,369,370,371,478,479,487,488,502,556,573,574,659,735,787],[283,371,373,416,419,422,464,477,502,556,573,574,659,735,787],[283,305,361,362,363,364,365,366,367,368,370,479,502,556,573,574,659,735,787],[283,369,502,556,573,574,582,659,735,787],[283,496,502,556,573,574,659,735,787],[283,502,556,573,574,627,659,735,787],[283,489,502,556,573,574,659,735,787],[283,302,303,304,490,491,492,493,494,495,496,497,498,502,556,573,574,628,629,630,631,632,633,634,635,636,659,735,787],[283,489,494,502,556,573,574,659,735,787],[283,467,468,469,472,474,475,476,502,556,573,574,659,735,787],[283,378,467,502,556,573,574,659,735,787],[283,373,374,383,384,416,419,422,436,464,466,502,556,573,574,659,735,787],[283,378,473,474,502,556,573,574,659,735,787],[283,473,474,502,556,573,574,659,735,787],[283,469,472,473,502,556,573,574,659,735,787],[283,502,556,573,574,659,732,735,787],[55,283,473,502,556,573,574,659,735,787],[283,502,556,573,574,611,612,659,735,787],[283,502,556,573,574,612,613,614,615,659,735,787],[283,502,556,573,574,606,612,614,659,735,787],[283,502,556,573,574,611,613,659,735,787],[283,502,556,568,573,574,606,659,735,787],[283,502,556,568,573,574,606,607,659,735,787],[283,502,556,573,574,607,608,609,610,659,735,787],[283,502,556,573,574,607,609,659,735,787],[283,502,556,573,574,608,659,735,787],[283,502,556,573,574,588,606,616,617,618,621,659,735,787],[283,502,556,573,574,617,618,620,659,735,787],[283,502,556,567,573,574,606,616,617,618,619,659,735,787],[283,502,556,573,574,618,659,735,787],[283,502,556,573,574,616,617,659,735,787],[283,502,556,573,574,606,616,659,735,787],[237,283,502,556,573,574,659,735,787],[240,283,502,556,573,574,659,735,787],[245,247,283,502,556,573,574,659,735,787],[233,237,249,250,283,502,556,573,574,659,735,787],[260,263,269,271,283,502,556,573,574,659,735,787],[232,237,283,502,556,573,574,659,735,787],[231,283,502,556,573,574,659,735,787],[232,283,502,556,573,574,659,735,787],[239,283,502,556,573,574,659,735,787],[242,283,502,556,573,574,659,735,787],[232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,272,273,274,275,276,277,283,502,556,573,574,659,735,787],[248,283,502,556,573,574,659,735,787],[244,283,502,556,573,574,659,735,787],[245,283,502,556,573,574,659,735,787],[236,237,243,283,502,556,573,574,659,735,787],[244,245,283,502,556,573,574,659,735,787],[251,283,502,556,573,574,659,735,787],[272,283,502,556,573,574,659,735,787],[236,283,502,556,573,574,659,735,787],[237,254,257,283,502,556,573,574,659,735,787],[253,283,502,556,573,574,659,735,787],[254,283,502,556,573,574,659,735,787],[252,254,283,502,556,573,574,659,735,787],[237,257,259,260,261,283,502,556,573,574,659,735,787],[260,261,263,283,502,556,573,574,659,735,787],[237,252,255,258,265,283,502,556,573,574,659,735,787],[252,253,283,502,556,573,574,659,735,787],[234,235,252,254,255,256,283,502,556,573,574,659,735,787],[254,257,283,502,556,573,574,659,735,787],[235,252,255,258,283,502,556,573,574,659,735,787],[237,257,259,283,502,556,573,574,659,735,787],[260,261,283,502,556,573,574,659,735,787],[283,502,556,573,574,659,735,738,739,740,741,742,787],[283,502,556,573,574,659,735,738,740,787],[283,502,556,570,573,574,606,659,735,744,787],[283,502,556,562,573,574,606,659,735,787],[283,502,556,573,574,599,606,659,735,750,787],[283,502,556,570,573,574,606,659,735,787],[283,502,556,573,574,659,735,752,787],[283,308,310,374,502,556,573,574,659,735,787],[139,283,308,309,374,502,556,573,574,659,735,787],[283,310,502,556,573,574,659,735,787],[283,308,374,502,556,573,574,659,735,787],[283,502,556,567,570,573,574,606,659,735,747,748,749,787],[283,502,556,573,574,659,735,745,748,750,757,758,787],[283,502,556,568,573,574,606,659,735,760,761,787],[283,502,556,567,568,573,574,606,659,735,763,787],[283,372,502,556,573,574,659,735,787],[283,480,486,502,556,573,574,659,735,787],[283,481,482,483,484,485,502,556,573,574,659,735,787],[283,502,556,567,570,572,573,574,576,588,599,606,659,735,787],[283,502,556,573,574,659,735,769,787],[283,502,556,573,574,659,735,770,787],[283,502,556,568,573,574,599,606,659,735,787],[283,502,556,567,573,574,606,659,735,787],[283,502,556,573,574,659,735,774,776,777,778,779,780,781,782,783,784,785,786,787],[283,502,556,573,574,659,735,774,775,777,778,779,780,781,782,783,784,785,786,787],[283,502,556,573,574,659,735,775,776,777,778,779,780,781,782,783,784,785,786,787],[283,502,556,573,574,659,735,774,775,776,778,779,780,781,782,783,784,785,786,787],[283,502,556,573,574,659,735,774,775,776,777,779,780,781,782,783,784,785,786,787],[283,502,556,573,574,659,735,774,775,776,777,778,780,781,782,783,784,785,786,787],[283,502,556,573,574,659,735,774,775,776,777,778,779,781,782,783,784,785,786,787],[283,502,556,573,574,659,735,774,775,776,777,778,779,780,782,783,784,785,786,787],[283,502,556,573,574,659,735,774,775,776,777,778,779,780,781,783,784,785,786,787],[283,502,556,573,574,659,735,774,775,776,777,778,779,780,781,782,784,785,786,787],[283,502,556,573,574,659,735,774,775,776,777,778,779,780,781,782,783,785,786,787],[283,502,556,573,574,659,735,774,775,776,777,778,779,780,781,782,783,784,786,787],[283,502,556,573,574,659,735,774,775,776,777,778,779,780,781,782,783,784,785,787],[283,473,502,556,573,574,659,735,787],[283,502,556,573,574,606,659,735,787],[283,502,553,554,556,573,574,659,735,787],[283,502,555,556,573,574,659,735,787],[283,556,573,574,659,735,787],[283,502,556,561,573,574,591,659,735,787],[283,502,556,557,562,567,573,574,576,588,599,659,735,787],[283,502,556,557,558,567,573,574,576,659,735,787],[283,502,556,559,573,574,600,659,735,787],[283,502,556,560,561,568,573,574,577,659,735,787],[283,502,556,561,573,574,588,596,659,735,787],[283,502,556,562,564,567,573,574,576,659,735,787],[283,502,555,556,563,573,574,659,735,787],[283,502,556,564,565,573,574,659,735,787],[283,502,556,566,567,573,574,659,735,787],[283,502,555,556,567,573,574,659,735,787],[283,502,556,567,568,569,573,574,588,599,659,735,787],[283,502,556,567,568,569,573,574,583,588,591,659,735,787],[283,502,548,556,564,567,570,573,574,576,588,599,659,735,787],[283,502,556,567,568,570,571,573,574,576,588,596,599,659,735,787],[283,502,556,570,572,573,574,588,596,599,659,735,787],[283,502,556,567,573,574,659,735,787],[283,502,556,573,574,575,599,659,735,787],[283,502,556,564,567,573,574,576,588,659,735,787],[283,502,556,573,574,577,659,735,787],[283,502,556,573,574,578,659,735,787],[283,502,555,556,573,574,579,659,735,787],[283,502,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,659,735,787],[283,502,556,573,574,581,659,735,787],[283,502,556,573,574,582,659,735,787],[283,502,556,567,573,574,583,584,659,735,787],[283,502,556,573,574,583,585,600,602,659,735,787],[283,502,556,568,573,574,659,735,787],[283,502,556,567,573,574,588,589,591,659,735,787],[283,502,556,573,574,590,591,659,735,787],[283,502,556,573,574,588,589,659,735,787],[283,502,556,573,574,591,659,735,787],[283,502,556,573,574,592,659,735,787],[283,502,553,556,573,574,588,593,659,735,787],[283,502,556,567,573,574,594,595,659,735,787],[283,502,556,573,574,594,595,659,735,787],[283,502,556,561,573,574,576,588,596,659,735,787],[283,502,556,573,574,597,659,735,787],[283,499,500,501,502,503,504,505,506,507,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,659,735,787],[283,502,556,573,574,576,598,659,735,787],[283,502,556,570,573,574,582,599,659,735,787],[283,502,556,561,573,574,600,659,735,787],[283,502,556,573,574,588,601,659,735,787],[283,502,556,573,574,575,602,659,735,787],[283,502,556,573,574,603,659,735,787],[283,502,556,561,573,574,659,735,787],[283,502,548,556,573,574,659,735,787],[283,502,556,573,574,604,659,735,787],[283,502,548,556,567,569,573,574,579,588,591,599,601,602,604,659,735,787],[283,502,556,573,574,588,605,659,735,787],[55,283,486,502,556,573,574,654,659,735,787],[55,283,486,502,556,573,574,659,735,787],[53,54,283,502,556,573,574,659,735,787],[283,502,556,570,573,574,588,606,659,735,787],[283,502,556,573,574,588,606,659,735,787],[283,502,556,568,573,574,588,606,659,735,787],[283,502,556,568,573,574,659,735,787,796],[283,502,556,573,574,659,735,745,750,757,787],[283,502,556,570,573,574,606,659,735,754,756,787],[283,502,556,568,573,574,588,606,659,735,755,787],[283,502,556,567,570,572,573,574,576,588,596,599,605,606,659,735,787],[283,502,556,573,574,659,735,787,802],[283,502,556,567,573,574,588,606,659,735,787],[140,213,227,229,230,278,283,502,556,570,573,574,659,735,787],[283,502,556,573,574,659,711,722,735,787],[58,60,283,502,556,573,574,659,712,721,735,787],[57,58,283,502,556,573,574,659,712,713,714,715,716,717,718,719,720,735,787],[283,502,556,573,574,606,623,624,625,659,735,787],[283,502,556,573,574,623,624,659,735,787],[283,502,556,573,574,623,659,735,787],[283,502,556,573,574,606,622,659,735,787],[283,502,556,573,574,659,728,735,787],[283,502,556,573,574,626,659,735,787],[283,426,427,433,502,556,573,574,659,735,787],[283,374,385,416,419,422,434,464,502,556,573,574,659,735,787],[283,386,387,417,420,423,424,425,502,556,573,574,659,735,787],[283,374,416,434,502,556,573,574,659,735,787],[283,374,419,434,502,556,573,574,659,735,787],[283,422,434,502,556,573,574,659,735,787],[283,308,374,385,416,419,422,434,464,502,556,573,574,659,735,787],[283,308,374,385,416,419,422,432,464,502,556,573,574,659,735,787],[283,470,471,502,556,573,574,659,735,787],[283,385,416,419,422,464,470,472,502,556,573,574,659,735,787],[283,388,389,390,391,502,556,573,574,659,735,787],[283,373,388,389,391,416,419,422,464,502,556,573,574,659,735,787],[283,373,388,391,416,419,422,464,502,556,573,574,659,735,787],[283,373,374,385,415,416,419,422,464,502,556,573,574,659,735,787],[283,391,414,419,502,556,573,574,659,735,787],[283,372,373,374,385,391,414,416,418,419,422,464,502,556,573,574,659,735,787],[283,373,374,385,416,419,421,422,464,502,556,573,574,659,735,787],[283,391,414,419,422,502,556,573,574,659,735,787],[283,373,385,416,419,422,437,438,462,463,464,502,556,573,574,659,735,787],[283,385,416,419,422,437,464,502,556,573,574,659,735,787],[283,373,385,416,419,422,437,464,502,556,573,574,659,735,787],[283,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,502,556,573,574,659,735,787],[283,373,378,385,416,419,422,438,464,502,556,573,574,659,735,787],[283,392,393,413,502,556,573,574,659,735,787],[283,373,414,416,419,422,464,502,556,573,574,659,735,787],[283,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,502,556,573,574,659,735,787],[283,372,373,416,419,422,464,502,556,573,574,659,735,787],[55,283,286,502,556,573,574,659,735,787],[283,429,430,431,502,556,573,574,659,735,787],[283,428,432,502,556,573,574,659,735,787],[283,432,502,556,573,574,659,735,787],[283,434,435,502,556,573,574,659,735,787],[283,308,374,385,416,419,422,436,464,502,556,573,574,659,735,787],[283,464,465,502,556,573,574,659,735,787],[283,373,378,383,385,416,419,422,464,502,556,573,574,659,735,787],[283,358,502,556,573,574,659,735,787],[139,283,312,357,502,556,573,574,659,735,787],[139,283,358,502,556,573,574,659,735,787],[283,316,317,321,348,349,351,352,353,355,356,502,556,573,574,659,735,787],[283,314,315,502,556,573,574,659,735,787],[283,314,502,556,573,574,659,735,787],[283,316,356,502,556,573,574,659,735,787],[283,316,317,353,354,356,502,556,573,574,659,735,787],[283,356,502,556,573,574,659,735,787],[283,313,356,357,502,556,573,574,659,735,787],[283,316,317,355,356,502,556,573,574,659,735,787],[283,316,317,319,320,355,356,502,556,573,574,659,735,787],[283,316,317,318,355,356,502,556,573,574,659,735,787],[283,316,317,321,348,349,350,351,352,355,356,502,556,573,574,659,735,787],[283,313,316,317,321,353,355,502,556,573,574,659,735,787],[283,321,356,502,556,573,574,659,735,787],[283,323,324,325,326,327,328,329,330,331,332,356,502,556,573,574,659,735,787],[283,346,356,502,556,573,574,659,735,787],[283,322,333,341,342,343,344,345,347,502,556,573,574,659,735,787],[283,326,356,502,556,573,574,659,735,787],[283,334,335,336,337,338,339,340,356,502,556,573,574,659,735,787],[283,380,502,556,573,574,659,735,787],[283,502,514,517,520,521,556,573,574,599,659,735,787],[283,502,517,556,573,574,588,599,659,735,787],[283,502,517,521,556,573,574,599,659,735,787],[283,502,556,573,574,588,659,735,787],[283,502,511,556,573,574,659,735,787],[283,502,515,556,573,574,659,735,787],[283,502,513,514,517,556,573,574,599,659,735,787],[283,502,556,573,574,576,596,659,735,787],[283,502,511,556,573,574,606,659,735,787],[283,502,513,517,556,573,574,576,599,659,735,787],[283,502,508,509,510,512,516,556,567,573,574,588,599,659,735,787],[283,502,517,525,533,556,573,574,659,735,787],[283,502,509,515,556,573,574,659,735,787],[283,502,517,542,543,556,573,574,659,735,787],[283,502,509,512,517,556,573,574,591,599,606,659,735,787],[283,502,517,556,573,574,659,735,787],[283,502,513,517,556,573,574,599,659,735,787],[283,502,508,556,573,574,659,735,787],[283,502,511,512,513,515,516,517,518,519,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,543,544,545,546,547,556,573,574,659,735,787],[283,502,517,535,538,556,564,573,574,659,735,787],[283,502,517,525,526,527,556,573,574,659,735,787],[283,502,515,517,526,528,556,573,574,659,735,787],[283,502,516,556,573,574,659,735,787],[283,502,509,511,517,556,573,574,659,735,787],[283,502,517,521,526,528,556,573,574,659,735,787],[283,502,521,556,573,574,659,735,787],[283,502,515,517,520,556,573,574,599,659,735,787],[283,502,509,513,517,525,556,573,574,659,735,787],[283,502,517,535,556,573,574,659,735,787],[283,502,528,556,573,574,659,735,787],[283,502,511,517,542,556,573,574,591,604,606,659,735,787],[283,378,382,502,556,573,574,659,735,787],[283,372,378,379,381,383,502,556,573,574,659,735,787],[133,134,135,136,283,502,556,573,574,659,735,787],[133,283,502,556,573,574,659,735,787],[134,283,502,556,573,574,659,735,787],[283,375,502,556,573,574,659,735,787],[283,376,377,502,556,573,574,659,735,787],[283,372,376,378,502,556,573,574,659,735,787],[139,283,306,308,311,312,359,360,374,502,556,570,572,573,574,576,596,599,602,659,735,787],[217,218,283,502,556,573,574,659,735,787],[215,216,217,219,220,225,283,502,556,573,574,659,735,787],[216,217,283,502,556,573,574,659,735,787],[225,283,502,556,573,574,659,735,787],[226,283,502,556,573,574,659,735,787],[217,283,502,556,573,574,659,735,787],[215,216,217,220,221,222,223,224,283,502,556,573,574,659,735,787],[215,216,227,283,502,556,573,574,659,735,787],[203,283,502,556,573,574,659,735,787],[203,206,283,502,556,573,574,659,735,787],[197,203,204,205,206,207,208,209,210,283,502,556,573,574,659,735,787],[211,283,502,556,573,574,659,735,787],[203,204,283,502,556,573,574,659,735,787],[203,205,283,502,556,573,574,659,735,787],[142,144,145,146,147,283,502,556,573,574,659,735,787],[142,144,146,147,283,502,556,573,574,659,735,787],[142,144,146,283,502,556,573,574,659,735,787],[141,142,144,145,147,283,502,556,573,574,659,735,787],[142,143,144,145,146,147,148,149,197,198,199,200,201,202,283,502,556,573,574,659,735,787],[144,147,283,502,556,573,574,659,735,787],[141,142,143,145,146,147,283,502,556,573,574,659,735,787],[144,198,201,283,502,556,573,574,659,735,787],[144,145,146,147,283,502,556,573,574,659,735,787],[212,283,502,556,573,574,659,735,787],[146,283,502,556,573,574,659,735,787],[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,283,502,556,573,574,659,735,787],[55,138,283,502,556,573,574,659,735,787],[55,60,132,138,283,502,556,573,574,659,735,787],[55,60,132,138,279,280,283,502,556,573,574,659,735,787]],"fileInfos":[{"version":"e41c290ef7dd7dab3493e6cbe5909e0148edf4a8dad0271be08edec368a0f7b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"4fd3f3422b2d2a3dfd5cdd0f387b3a8ec45f006c6ea896a4cb41264c2100bb2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"62bb211266ee48b2d0edf0d8d1b191f0c24fc379a82bd4c1692a082c540bc6b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"f1e2a172204962276504466a6393426d2ca9c54894b1ad0a6c9dad867a65f876","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"170d4db14678c68178ee8a3d5a990d5afb759ecb6ec44dbd885c50f6da6204f6","affectsGlobalScope":true,"impliedFormat":1},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"0ff1b165090b491f5e1407ae680b9a0bc3806dc56827ec85f93c57390491e732","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"d98e1d00e6c79d46c66ed20ff97bc08daa10ec10eee3f349aaf89685e2731e11","impliedFormat":99},{"version":"fa516a771fdd8255c5d2d9203c24fe74083b0212d9c4111a4c53c46f436e16e8","impliedFormat":99},{"version":"3dbb82e6d1939fd00d094294131318197172ddcf73ba7f522566e53ef48cac1a","impliedFormat":1},{"version":"c6d8882260bbb3121389f0e1d5635158bcd73c620c57d732b6b951ad942eafbb","impliedFormat":99},{"version":"23769d87a06b881cf70c7509f60df4a3d63b4d489053da375603312ee3a0fbf5","impliedFormat":1},{"version":"2ca4540aabce6800f2217b6e2a282eb0a3bfebfe53561e58c9b9693d16bf1429","impliedFormat":1},{"version":"0ca29fde337113b172465f521f068014dd251fb0c9f02ffdd30a0732f4431ab1","impliedFormat":1},{"version":"c0a55e1da70b67be002877b3847b0b50b79b5e21fd440aec385ab68240d6a5c6","impliedFormat":1},{"version":"c3c441d8456d1bc31fe0bb10e320bfea6817c72a970cd9e40b8e8fcda10cbd51","impliedFormat":1},{"version":"130597be9ee0b264de06d5dae8c771bcfb9e81c9eb4134eb1d8016951e69c870","impliedFormat":1},{"version":"f306facbcd46afbdfadad41794a42d1a09eab13c0810dee92a28b9886ed8758e","impliedFormat":1},{"version":"b512101c6b755ff7525fc9269abaa47e0d0df4d261e786c68edd70f6dc6c9519","impliedFormat":1},{"version":"f4d4fc90a9674151603275b23ba709572be46bb0a9d192162a8e096e00e9a014","impliedFormat":1},{"version":"2983b451c80bbabe54f042b9d6f34547d098e40e00b6865f9cb297cc2f058849","impliedFormat":1},{"version":"98874d4bc3e2af71a70696e4938d2c0b947bf3d8315e0ef23db184433c9934f3","impliedFormat":1},{"version":"6bbeb959bc6c6442d90ae14b19b903ae193c5481c9d83b4e743539d6a816675c","impliedFormat":1},{"version":"d769c515846066942e5a8b0218686fb095a1750f602dfdef4a417042d1a35d58","impliedFormat":1},{"version":"4a16f11f66dcda4630d24ab7a1a015e5e9dc88de71905f40a2d53b1ff2c9b72f","impliedFormat":1},{"version":"c83df839216d7e3ef970934fcc331151b81abf2647cf5e6a3ad9642bad74d4f0","impliedFormat":1},{"version":"294bd17c185ad968753804a101ccc603844b59f30a795895313d200555e5debd","impliedFormat":1},{"version":"20e76a9367ae710ca103ff1f3cb951f2628c66c18ef4a7c48bc46eca7ff6b086","impliedFormat":1},{"version":"403f527dad17f9eded7043230a1a5a5ccfdf11fe928f9f3f5b1369f4ce882f60","impliedFormat":1},{"version":"a362046cc706eb5e9a3565ed5f87fd3cc7645daa2936eb3ce04587b1a2ac300a","impliedFormat":1},{"version":"abeaa9cbff1c48b5cbdf78b8ed5e33610febb7ccc16bc38c9e2a1a16fdac1971","impliedFormat":1},{"version":"aaa136ac0f40f4f0a6fc7d14a90dc900126ef9ffcc496d4518247be5d7d78360","impliedFormat":1},{"version":"bc7b0556d2f2f9f165b6da77ef8a75f138331efe892d422d5156a450f39d3f41","impliedFormat":1},{"version":"3874da82aeb3439bb276c5f3fe20be2a9894b49126377fcb66b3bd0802e1ecec","impliedFormat":1},{"version":"40b21c32d6093f70ddb6749d8d99327de738bfa8eaeb2a5057b8fc2740551de0","impliedFormat":1},{"version":"3a623ccdbdb3e9b5733436469c4790c2a20f9d877127f3a065b6023c5dea0ffb","impliedFormat":1},{"version":"4132c088cd466d5895e66a689733121acacf10452d801417938beceb100c975a","impliedFormat":1},{"version":"6b09a6d9b795845c16a5bef92160442e61320ca55ceef9f852409ae27e1cf49a","impliedFormat":1},{"version":"c6debb6cef57d1d3020160759e3ff94df73ad12cfb63d2e95164f67510b130be","impliedFormat":1},{"version":"311f919487e8c40f67cba3784a9af8c2adfb79eb01bd8bc821cc07a565c0b148","impliedFormat":1},{"version":"2f0ad5ea2e7e530ff91ccc2414f67f843a68beb38fb21b020e0a1725df29c7c0","impliedFormat":1},{"version":"529cf338bc74beb95a0778f2f17178ad78409ef6523840f9ede2079de3ecdc2b","impliedFormat":1},{"version":"5f37c6349a600730f3376e4bc4d4f16350f53975516f52276c313f3aa32421a9","impliedFormat":1},{"version":"3f81a9cdd412c1048d9c25535b9df0b463997d6cd88df0a0a91d4f42efd7af72","impliedFormat":1},{"version":"6211b2ad05f47d231a3e18235225d7894002dba541500dd1021033e919e14e84","impliedFormat":1},{"version":"baee18dea2b873c4898fe1e8c0f9a79ec5f635775013953f79daa1fb121db770","impliedFormat":1},{"version":"90000ff809298808b6409196ecaa5bbaa8768a576e2c63da49546c7d39153756","impliedFormat":1},{"version":"bba5b5dcf3abdd06a0cf893d3ce6ea00e89cfcd7fe799d933f675887a2c7b809","impliedFormat":1},{"version":"8abb5a1a747b3fafb0513c5f595ae41f7608203ec85c289af9a8499bee0cdd0d","impliedFormat":1},{"version":"b162314103b89e05cab5f0c65c1c6cc88cdf38b4618db69ff0736667e3e19a85","impliedFormat":1},{"version":"a92ac8af7861b950098ceb4d3b9b63656f012f5a96738af5ea0255c536083108","impliedFormat":1},{"version":"abe90b39bdb2f076232dfaeb9064eb659aaab4bd0f5f9c0712f4eadc1ddc312c","impliedFormat":1},{"version":"dd8df82fff2c1bedd09155629867c336d235f65e9f6c235aad38ec53d25dac30","impliedFormat":1},{"version":"f216a024fb59c9a9864deaa618eb49b19482f699de5f1ac2aa60435fdba30074","impliedFormat":1},{"version":"172395ed248e629a2e4b7426b3d27145a8bfc72c2324990385d72f019fe82150","impliedFormat":1},{"version":"e466cd2ac6e5591231b5d7f1a46372dd5acc7f756a9010e4312d54ee7af13589","impliedFormat":1},{"version":"5be7e85256dbf685d4cc2a6c5a68b60b5209f794768f8d15d2e8dc8f7b4366b6","impliedFormat":1},{"version":"563efdc90627de30c505901cdb1ac55012419486fb7ac3c351eeddf80cd7cd16","impliedFormat":1},{"version":"09887fa64ef252278983c7215aafde9a83aace65e129b5ca98fe1e1cb1427a4e","impliedFormat":1},{"version":"98bab473d4dac9cc8661d27766f3b434448502525c39b87d765ededea19b0b54","impliedFormat":1},{"version":"46c51930e69ccd9c3a069e6afe22ad8f057e4052ad9dbcea8554a13e25f3a8f0","impliedFormat":1},{"version":"adf0e839d9007c13092992a4f05f0df3a55e6cb3d6ad8001e75b1942189ea631","impliedFormat":1},{"version":"53b48efb03c058deb8fff1231547afac2cab5eac75512bd2b88029258520044e","impliedFormat":1},{"version":"c7008e25445194a33bae86ea59eb0697723ab026b3f752e4dae069b3308fe41d","impliedFormat":1},{"version":"4cbc005058899e5feed65b3d2d6957b4e909bc6ffec2a8f3918e023d285affdf","impliedFormat":1},{"version":"74a97040d1ee1aee275b556af4220b58cdf991bd2d51f762951a4226964632b9","impliedFormat":1},{"version":"b911a7c2e86018036e762b1382210cb667b2d7ae89051a6037571c1d9911462a","impliedFormat":1},{"version":"b60a4996f5cedf563a2612021acaf291ca1a7fbeb06acf549d0f533ef62bc0dd","impliedFormat":1},{"version":"568816f59f03f96ecf1e978b42075061c008b149f995aaa60e968e7732dd6405","impliedFormat":1},{"version":"776fc60a39a707fab820ade179a919f182704e6f39050deaf2e36d53f0e97179","impliedFormat":1},{"version":"39b7522fdc2159d684b0e23b5b1b2ad6b8eb9a6cce1226bda21c2c29bebd2515","impliedFormat":1},{"version":"cfc3340169107891b727617c2f3ed8ec456b57f5a13cff6a940933e302d9b781","impliedFormat":1},{"version":"ed079a2adbd67d772726ac68a7a73e62d1bfd62bcb34cfc905ec4af3993afea3","impliedFormat":1},{"version":"5157cf1fa372cdc6576a229b269ca05e299df0f92139c99885cd8cec87862758","impliedFormat":1},{"version":"36e7b8c4d43415dd1dd2b350fdd47ba36fa971a533cb6fd436e6c8235d0770fc","impliedFormat":1},{"version":"d20e713daec02605cb5f19f682de7c5e81107d71cf9ca5a86384e1f22dbbb42c","impliedFormat":1},{"version":"74135589d8b3f5f738353e2f49b726eb32f6837ec4d4adb4b6dbf881d5c2448e","impliedFormat":1},{"version":"86a7d51d8add5d573efa016388913c1a98d159100794f925a41da45c83f1f2c7","impliedFormat":1},{"version":"694940bbed3e6128b2117c87f0579fac2aab8069c86a875cf046719ce1843eb5","impliedFormat":1},{"version":"9920945a21dca849596b03a57c94627d34e47728374ebabb1881d0780daeae98","impliedFormat":1},{"version":"ea7fe47073f4d3f850f20df8b68ccafe1094cf69889105f7473f6aac71c6bd28","impliedFormat":1},{"version":"436e26b5eb594a43624302863e715d04997bdcc672ba69cf201be7a8fba1be48","impliedFormat":1},{"version":"e80b73b8cdd9ee251a5e001487d4b569193683fd3c490ebf57a031ac52f332a0","impliedFormat":1},{"version":"2dffb65044b6a28dcba73284ac6c274985b03a6ce4a3b33967d783df18f8b48c","impliedFormat":1},{"version":"f7e187abe606adf3c1e319e080d4301ba98cb9927fd851eded5bcac226b35fd1","impliedFormat":1},{"version":"335084b62e38b8882a84580945a03f5c887255ac9ba999af5df8b50275f3d94f","impliedFormat":1},{"version":"5d874fb879ab8601c02549817dceb2d0a30729cb7e161625dd6f819bbff1ec0b","impliedFormat":1},{"version":"ace68d700c2960e2d013598730888cde6d8825c54065c9f5077aaf3b2e55e3ad","impliedFormat":1},"6e018cd1a6f4431a2632a01410f898b52ecde5500da692087e644233317b3e80",{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"3e8b97f70a096dd3ce1757d460810e58e4a7de0d3d0ddfe430d02dc27295b3f4","impliedFormat":1},{"version":"309ebd217636d68cf8784cbc3272c16fb94fb8e969e18b6fe88c35200340aef1","impliedFormat":1},{"version":"f987c74a4b4baf361afbf22a16d230ee490d662f9aa2066853bb7ebbb8611355","impliedFormat":1},{"version":"1ff91526fcdd634148c655ef86e912a273ce6a0239e2505701561f086678262b","impliedFormat":1},{"version":"bd93f6fc4da70275db4def32903eed2be03547a41857142df63ddfebb9a67bdf","impliedFormat":1},{"version":"8d67b13da77316a8a2fabc21d340866ddf8a4b99e76a6c951cc45189142df652","impliedFormat":1},{"version":"7952419455ca298776db0005b9b5b75571d484d526a29bfbdf041652213bce6f","impliedFormat":1},{"version":"21360500b20e0ec570f26f1cbb388c155ede043698970f316969840da4f16465","impliedFormat":1},{"version":"3a819c2928ee06bbcc84e2797fd3558ae2ebb7e0ed8d87f71732fb2e2acc87b4","impliedFormat":1},{"version":"1765e61249cb44bf5064d42bfa06956455bbc74dc05f074d5727e8962592c920","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"568b463d762d0df07ed10081293715069168ad7cf6308525a3bb93777b127845","impliedFormat":1},{"version":"6e5857f38aa297a859cab4ec891408659218a5a2610cd317b6dcbef9979459cc","impliedFormat":1},{"version":"add0ce7b77ba5b308492fa68f77f24d1ed1d9148534bdf05ac17c30763fc1a79","impliedFormat":1},{"version":"56ccc6238510b913f5e6c21afdc447632873f76748d0b30a87cb313b42f1c196","impliedFormat":1},{"version":"c1a2e05eb6d7ca8d7e4a7f4c93ccf0c2857e842a64c98eaee4d85841ee9855e6","impliedFormat":1},{"version":"85021a58f728318a9c83977a8a3a09196dcfc61345e0b8bbbb39422c1594f36b","impliedFormat":1},{"version":"d91805544905a40fbd639ba1b85f65dc13d6996a07034848d634aa9edb63479e","impliedFormat":1},{"version":"6042774c61ece4ba77b3bf375f15942eb054675b7957882a00c22c0e4fe5865c","impliedFormat":1},{"version":"5a3bd57ed7a9d9afef74c75f77fce79ba3c786401af9810cdf45907c4e93f30e","impliedFormat":1},{"version":"8610f5dc475d74c4b095aafa0c191548bfd43f65802e6da54b5e526202b8cfe0","impliedFormat":1},{"version":"7b9496d2e1664155c3c293e1fbbe2aba288614163c88cb81ed6061905924b8f9","impliedFormat":1},{"version":"e27451b24234dfed45f6cf22112a04955183a99c42a2691fb4936d63cfe42761","impliedFormat":1},{"version":"58d65a2803c3b6629b0e18c8bf1bc883a686fcf0333230dd0151ab6e85b74307","impliedFormat":1},{"version":"e818471014c77c103330aee11f00a7a00b37b35500b53ea6f337aefacd6174c9","impliedFormat":1},{"version":"2fbc91ba70096f93f57e22d1f0af22b707dbb3f9f5692cc4f1200861d3b75d88","impliedFormat":1},{"version":"d8bc0c5487582c6d887c32c92d8b4ffb23310146fcb1d82adf4b15c77f57c4ac","impliedFormat":1},{"version":"8cb31102790372bebfd78dd56d6752913b0f3e2cefbeb08375acd9f5ba737155","impliedFormat":1},{"version":"76af14c3cce62da183aaf30375e3a4613109d16c7f16d30702f16d625a95e62c","impliedFormat":99},{"version":"d3cfde44f8089768ebb08098c96d01ca260b88bccf238d55eee93f1c620ff5a5","impliedFormat":1},{"version":"293eadad9dead44c6fd1db6de552663c33f215c55a1bfa2802a1bceed88ff0ec","impliedFormat":1},{"version":"206e73f49f16633113787cc651dc03dc900379395dfa02ab1ef4c9cbbcd5adc2","impliedFormat":1},{"version":"fec412ded391a7239ef58f455278154b62939370309c1fed322293d98c8796a6","impliedFormat":1},{"version":"e3498cf5e428e6c6b9e97bd88736f26d6cf147dedbfa5a8ad3ed8e05e059af8a","impliedFormat":1},{"version":"dba3f34531fd9b1b6e072928b6f885aa4d28dd6789cbd0e93563d43f4b62da53","impliedFormat":1},{"version":"f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","impliedFormat":1},{"version":"e4b03ddcf8563b1c0aee782a185286ed85a255ce8a30df8453aade2188bbc904","impliedFormat":1},{"version":"2329d90062487e1eaca87b5e06abcbbeeecf80a82f65f949fd332cfcf824b87b","impliedFormat":1},{"version":"25b3f581e12ede11e5739f57a86e8668fbc0124f6649506def306cad2c59d262","impliedFormat":1},{"version":"93c3e73824ad57f98fd23b39335dbdae2db0bd98199b0dc0b9ccc60bf3c5134a","impliedFormat":1},{"version":"a9ebb67d6bbead6044b43714b50dcb77b8f7541ffe803046fdec1714c1eba206","impliedFormat":1},{"version":"833e92c058d033cde3f29a6c7603f517001d1ddd8020bc94d2067a3bc69b2a8e","impliedFormat":1},{"version":"56e0775830b68d13c3d7f4ec75df7d016db6b879ef9676affb5233a9a289c192","impliedFormat":99},{"version":"9ceb6d915edc10d897896f61ce9aa3fe3fc78fd45a4e2e2c162ff8bc06640ef4","impliedFormat":1},{"version":"468d39d561873c6568ef6873a1db2acd7cf80c0e7243911f7c7256df9a8a41a5","impliedFormat":1},{"version":"a4e9e0d92dcad2cb387a5f1bdffe621569052f2d80186e11973aa7080260d296","impliedFormat":1},{"version":"f6380cc36fc3efc70084d288d0a05d0a2e09da012ee3853f9d62431e7216f129","impliedFormat":1},{"version":"497c3e541b4acf6c5d5ba75b03569cfe5fe25c8a87e6c87f1af98da6a3e7b918","impliedFormat":1},{"version":"d9429b81edf2fb2abf1e81e9c2e92615f596ed3166673d9b69b84c369b15fdc0","impliedFormat":1},{"version":"7e22943ae4e474854ca0695ab750a8026f55bb94278331fda02a4fb42efce063","impliedFormat":1},{"version":"7da9ff3d9a7e62ddca6393a23e67296ab88f2fcb94ee5f7fb977fa8e478852ac","impliedFormat":1},{"version":"e1b45cc21ea200308cbc8abae2fb0cfd014cb5b0e1d1643bcc50afa5959b6d83","impliedFormat":1},{"version":"c9740b0ce7533ce6ba21a7d424e38d2736acdddeab2b1a814c00396e62cc2f10","impliedFormat":1},{"version":"b3c1f6a3fdbb04c6b244de6d5772ffdd9e962a2faea1440e410049c13e874b87","impliedFormat":1},{"version":"dcaa872d9b52b9409979170734bdfd38f846c32114d05b70640fd05140b171bb","impliedFormat":1},{"version":"6c434d20da381fcd2e8b924a3ec9b8653cf8bed8e0da648e91f4c984bd2a5a91","impliedFormat":1},{"version":"992419d044caf6b14946fa7b9463819ab2eeb7af7c04919cc2087ce354c92266","impliedFormat":1},{"version":"fa9815e9ce1330289a5c0192e2e91eb6178c0caa83c19fe0c6a9f67013fe795c","impliedFormat":1},{"version":"06384a1a73fcf4524952ecd0d6b63171c5d41dd23573907a91ef0a687ddb4a8c","impliedFormat":1},{"version":"34b1594ecf1c84bcc7a04d9f583afa6345a6fea27a52cf2685f802629219de45","impliedFormat":1},{"version":"d82c9ca830d7b94b7530a2c5819064d8255b93dfeddc5b2ebb8a09316f002c89","impliedFormat":1},{"version":"7e046b9634add57e512412a7881efbc14d44d1c65eadd35432412aa564537975","impliedFormat":1},{"version":"aac9079b9e2b5180036f27ab37cb3cf4fd19955be48ccc82eab3f092ee3d4026","impliedFormat":1},{"version":"3d9c38933bc69e0a885da20f019de441a3b5433ce041ba5b9d3a541db4b568cb","impliedFormat":1},{"version":"606aa2b74372221b0f79ca8ae3568629f444cc454aa59b032e4cb602308dec94","impliedFormat":1},{"version":"50474eaea72bfda85cc37ae6cd29f0556965c0849495d96c8c04c940ef3d2f44","impliedFormat":1},{"version":"b4874382f863cf7dc82b3d15aed1e1372ac3fede462065d5bfc8510c0d8f7b19","impliedFormat":1},{"version":"df10b4f781871afb72b2d648d497671190b16b679bf7533b744cc10b3c6bf7ea","impliedFormat":1},{"version":"1fdc28754c77e852c92087c789a1461aa6eed19c335dc92ce6b16a188e7ba305","impliedFormat":1},{"version":"a656dab1d502d4ddc845b66d8735c484bfebbf0b1eda5fb29729222675759884","impliedFormat":1},{"version":"465a79505258d251068dc0047a67a3605dd26e6b15e9ad2cec297442cbb58820","impliedFormat":1},{"version":"ddae22d9329db28ce3d80a2a53f99eaed66959c1c9cd719c9b744e5470579d2f","impliedFormat":1},{"version":"d0e25feadef054c6fc6a7f55ccc3b27b7216142106b9ff50f5e7b19d85c62ca7","impliedFormat":1},{"version":"111214009193320cacbae104e8281f6cb37788b52a6a84d259f9822c8c71f6ca","impliedFormat":1},{"version":"01c8e2c8984c96b9b48be20ee396bd3689a3a3e6add8d50fe8229a7d4e62ff45","impliedFormat":1},{"version":"a4a0800b592e533897b4967b00fb00f7cd48af9714d300767cc231271aa100af","impliedFormat":1},{"version":"20aa818c3e16e40586f2fa26327ea17242c8873fe3412a69ec68846017219314","impliedFormat":1},{"version":"f498532f53d54f831851990cb4bcd96063d73e302906fa07e2df24aa5935c7d1","impliedFormat":1},{"version":"5fd19dfde8de7a0b91df6a9bbdc44b648fd1f245cae9e8b8cf210d83ee06f106","impliedFormat":1},{"version":"3b8d6638c32e63ea0679eb26d1eb78534f4cc02c27b80f1c0a19f348774f5571","impliedFormat":1},{"version":"ce0da52e69bc3d82a7b5bc40da6baad08d3790de13ad35e89148a88055b46809","impliedFormat":1},{"version":"9e01233da81bfed887f8d9a70d1a26bf11b8ddff165806cc586c84980bf8fc24","impliedFormat":1},{"version":"214a6afbab8b285fc97eb3cece36cae65ea2fca3cbd0c017a96159b14050d202","impliedFormat":1},{"version":"14beeca2944b75b229c0549e0996dc4b7863e07257e0d359d63a7be49a6b86a4","impliedFormat":1},{"version":"f7bb9adb1daa749208b47d1313a46837e4d27687f85a3af7777fc1c9b3dc06b1","impliedFormat":1},{"version":"c549fe2f52101ffe47f58107c702af7cdcd42da8c80afd79f707d1c5d77d4b6e","impliedFormat":1},{"version":"3966ea9e1c1a5f6e636606785999734988e135541b79adc6b5d00abdc0f4bf05","impliedFormat":1},{"version":"0b60b69c957adb27f990fbc27ea4ac1064249400262d7c4c1b0a1687506b3406","impliedFormat":1},{"version":"12c26e5d1befc0ded725cee4c2316f276013e6f2eb545966562ae9a0c1931357","impliedFormat":1},{"version":"27b247363f1376c12310f73ebac6debcde009c0b95b65a8207e4fa90e132b30a","impliedFormat":1},{"version":"05bd302e2249da923048c09dc684d1d74cb205551a87f22fb8badc09ec532a08","impliedFormat":1},{"version":"fe930ec064571ab3b698b13bddf60a29abf9d2f36d51ab1ca0083b087b061f3a","impliedFormat":1},{"version":"6b85c4198e4b62b0056d55135ad95909adf1b95c9a86cdbed2c0f4cc1a902d53","impliedFormat":1},{"version":"fe3e1bb54e8dedcffc6ff42fc6c382b555a1758eb6048620d43080274ddc1e90","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e36722be609155cf1cedb727b7b39849fb2c1106d4bca9195a682e30572427e","impliedFormat":1},"0322fab609ea7f0e95b9048d801709a945c3776a827e80099a4f4512d1315a3f","ac91dc23f1dc96b393e0cdb7f4913d41db8cba10daefa20a2cbb4a28634c2e90","2bd58ba23733dcb01d1783b86af1906aa85d38def4f1780f939744b5f34e7aac","1c20a89e68b64e44e70dc71946312f38a6aa3e8289b1c62af5be4b549c053859","4d21b010f3fb37647e2ef6884d0a9560f00d9499df0f23f7625eb068eedc2708",{"version":"e85d04f57b46201ddc8ba238a84322432a4803a5d65e0bbd8b3b4f05345edd51","impliedFormat":1},{"version":"713140d254961f506a4077c1b6a64c503122c621972a596b54eb693721234db1","impliedFormat":1},{"version":"2a87eec8f244fcdcf381f6c932860ed5a6588df126d5d576635cc5bb44161d03","impliedFormat":1},{"version":"1ce5c97d8b645948358991e5576939b4b8e0c945b7ba1c31e5c97374740032f2","impliedFormat":1},{"version":"9bb24979f54744a3407c0e798a7b492bf369e8c6e1f0eb07ed8a71e922c3cda5","impliedFormat":1},{"version":"60670f3f00b4cb86a4e0daadbb40fb2d48ca426afdb70bc04a71fab63eef50df","impliedFormat":1},{"version":"fa5e98fa28f4ac0ecf022c6fe12ac91017bedad678fe2438cd6a35686e250a24","impliedFormat":1},{"version":"722f7cc86262e43ce45ccd93a7b2f85979ba493c02bfdd7f774e0e85075774c6","impliedFormat":1},{"version":"dfcd31406879f99f8b4845fc20bef0143f7f0107d82d1932a2fd87170980246d","impliedFormat":1},{"version":"8d6eb71906be163246a66e062edf8e160eb2584f084022d42a4a71bc6f59c56b","impliedFormat":1},{"version":"ae72ff0e5387d3172a8198f3ea33b696f53f8e088e8a25e83b74ae2f9356435f","impliedFormat":1},{"version":"e8a429357486429f8720583b54b51e7370e848ca46bdbf5c8a993af22e84be0f","impliedFormat":1},{"version":"d7795d18e8289383602f65b8ab4413e86565875a88de5dc1d5100691e01cfd4b","impliedFormat":1},{"version":"adc9383bcb02e89453f6d2c3e2c1a755b2d3d4acba558d91864a3e60dd559736","impliedFormat":1},{"version":"8b212b7dfb214804d12fa4a90a0c253c14d28223630827b3f0eb236a517e982e","impliedFormat":1},{"version":"fc8b67f976a19fafd7714239a6a8b481c73eade184baa5cf5032a928eca591f4","impliedFormat":1},{"version":"af5f8b74ae228e2e775bf246b400cbaaf688ac283b3a26b05ffd91ec3c69d16e","impliedFormat":1},{"version":"6f5556b7bc11fad3eaa4b62fea9107169fb36521b9e2ab7a820c6142b326536b","impliedFormat":1},{"version":"e09ec1e01cfaa2dd4dbc0cb45d7a336595c049b3556447920931519ac737677e","impliedFormat":1},{"version":"cd362517992a5e7fad1c4343df2c56efabcd955dc04aa54a4cbbca190a6ca8f7","impliedFormat":1},{"version":"a4abbf5d5ecd7367532921a52e2a2762a6f5f38c3e4ad6c25e6e90152c403804","impliedFormat":99},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"a4a39b5714adfcadd3bbea6698ca2e942606d833bde62ad5fb6ec55f5e438ff8","impliedFormat":1},{"version":"bbc1d029093135d7d9bfa4b38cbf8761db505026cc458b5e9c8b74f4000e5e75","impliedFormat":1},{"version":"1f68ab0e055994eb337b67aa87d2a15e0200951e9664959b3866ee6f6b11a0fe","impliedFormat":1},{"version":"be5de08f7e80755a34e3247ebd7fd29634afc6143ae1860bd0efe2b8da6e6980","impliedFormat":1},{"version":"84bcc7c6b06f4d643a55dc63b56be0c81d990f8d549b66ea615c553268774dc3","impliedFormat":1},{"version":"2d225e7bda2871c066a7079c88174340950fb604f624f2586d3ea27bb9e5f4ff","impliedFormat":1},{"version":"6a785f84e63234035e511817dd48ada756d984dd8f9344e56eb8b2bdcd8fd001","impliedFormat":1},{"version":"c1422d016f7df2ccd3594c06f2923199acd09898f2c42f50ea8159f1f856f618","impliedFormat":1},{"version":"2973b1b7857ca144251375b97f98474e9847a890331e27132d5a8b3aea9350a8","impliedFormat":1},{"version":"0eb6152d37c84d6119295493dfcc20c331c6fda1304a513d159cdaa599dcb78b","impliedFormat":1},{"version":"237df26f8c326ca00cd9d2deb40214a079749062156386b6d75bdcecc6988a6b","impliedFormat":1},{"version":"cd44995ee13d5d23df17a10213fed7b483fabfd5ea08f267ab52c07ce0b6b4da","impliedFormat":1},{"version":"58ce1486f851942bd2d3056b399079bc9cb978ec933fe9833ea417e33eab676e","impliedFormat":1},{"version":"7557d4d7f19f94341f4413575a3453ba7f6039c9591015bcf4282a8e75414043","impliedFormat":1},{"version":"a3b2cc16f3ce2d882eca44e1066f57a24751545f2a5e4a153d4de31b4cac9bb5","impliedFormat":1},{"version":"ac2b3b377d3068bfb6e1cb8889c99098f2c875955e2325315991882a74d92cc8","impliedFormat":1},{"version":"8deb39d89095469957f73bd194d11f01d9894b8c1f1e27fbf3f6e8122576b336","impliedFormat":1},{"version":"a38a9c41f433b608a0d37e645a31eecf7233ef3d3fffeb626988d3219f80e32f","impliedFormat":1},{"version":"8e1428dcba6a984489863935049893631170a37f9584c0479f06e1a5b1f04332","impliedFormat":1},{"version":"1fce9ecb87a2d3898941c60df617e52e50fb0c03c9b7b2ba8381972448327285","impliedFormat":1},{"version":"5ef0597b8238443908b2c4bf69149ed3894ac0ddd0515ac583d38c7595b151f1","impliedFormat":1},{"version":"ac52b775a80badff5f4ac329c5725a26bd5aaadd57afa7ad9e98b4844767312a","impliedFormat":1},{"version":"6ae5b4a63010c82bf2522b4ecfc29ffe6a8b0c5eea6b2b35120077e9ac54d7a1","impliedFormat":1},{"version":"dd7109c49f416f218915921d44f0f28975df78e04e437c62e1e1eb3be5e18a35","impliedFormat":1},{"version":"eee181112e420b345fc78422a6cc32385ede3d27e2eaf8b8c4ad8b2c29e3e52e","impliedFormat":1},{"version":"25fbe57c8ee3079e2201fe580578fab4f3a78881c98865b7c96233af00bf9624","impliedFormat":1},{"version":"62cc8477858487b4c4de7d7ae5e745a8ce0015c1592f398b63ee05d6e64ca295","impliedFormat":1},{"version":"cc2a9ec3cb10e4c0b8738b02c31798fad312d21ef20b6a2f5be1d077e9f5409d","impliedFormat":1},{"version":"4b4fadcda7d34034737598c07e2dca5d7e1e633cb3ba8dd4d2e6a7782b30b296","impliedFormat":1},{"version":"360fdc8829a51c5428636f1f83e7db36fef6c5a15ed4411b582d00a1c2bd6e97","impliedFormat":1},{"version":"1cf0d15e6ab1ecabbf329b906ae8543e6b8955133b7f6655f04d433e3a0597ab","impliedFormat":1},{"version":"7c9f98fe812643141502b30fb2b5ec56d16aaf94f98580276ae37b7924dd44a4","impliedFormat":1},{"version":"b3547893f24f59d0a644c52f55901b15a3fa1a115bc5ea9a582911469b9348b7","impliedFormat":1},{"version":"596e5b88b6ca8399076afcc22af6e6e0c4700c7cd1f420a78d637c3fb44a885e","impliedFormat":1},{"version":"adddf736e08132c7059ee572b128fdacb1c2650ace80d0f582e93d097ed4fbaf","impliedFormat":1},{"version":"d4cad9dc13e9c5348637170ddd5d95f7ed5fdfc856ddca40234fa55518bc99a6","impliedFormat":1},{"version":"d70675ba7ba7d02e52b7070a369957a70827e4b2bca2c1680c38a832e87b61fd","impliedFormat":1},{"version":"3be71f4ce8988a01e2f5368bdd58e1d60236baf511e4510ee9291c7b3729a27e","impliedFormat":1},{"version":"423d2ccc38e369a7527988d682fafc40267bcd6688a7473e59c5eea20a29b64f","impliedFormat":1},{"version":"2f9fde0868ed030277c678b435f63fcf03d27c04301299580a4017963cc04ce6","impliedFormat":1},{"version":"feeb73d48cc41c6dd23d17473521b0af877751504c30c18dc84267c8eeea429a","impliedFormat":1},{"version":"25f1159094dc0bf3a71313a74e0885426af21c5d6564a254004f2cadf9c5b052","impliedFormat":1},{"version":"cde493e09daad4bb29922fe633f760be9f0e8e2f39cdca999cce3b8690b5e13a","impliedFormat":1},{"version":"3d7f9eb12aface876f7b535cc89dcd416daf77f0b3573333f16ec0a70bcf902a","impliedFormat":1},{"version":"b83139ae818dd20f365118f9999335ca4cd84ae518348619adc5728e7e0372d5","impliedFormat":1},{"version":"e0205f04611bea8b5b82168065b8ef1476a8e96236201494eb8c785331c43118","impliedFormat":1},{"version":"62d26d8ba4fa15ab425c1b57a050ed76c5b0ecbffaa53f182110aa3a02405a07","impliedFormat":1},{"version":"9941cbf7ca695e95d588f5f1692ab040b078d44a95d231fa9a8f828186b7b77d","impliedFormat":1},{"version":"41b8775befd7ded7245a627e9f4de6110236688ce4c124d2d40c37bc1a3bfe05","impliedFormat":1},{"version":"9de8d92a60e62a15c05a8685b1de0ea00d55033834b0c5ab7898c582e2320578","impliedFormat":1},{"version":"a00b0ad2a2a3c3731e481652cf853c57d9f4593e91e8c219b0862bda334e5d81","impliedFormat":1},{"version":"ef7c69c87186bc3b3b45238a1a1bac4c55fa1c5d065f45d4e45ab695291d9d05","impliedFormat":1},{"version":"eb9d3c462f322032ce6b08725c0ce51f147f5b0987e8ad81ccc73b908c7d933a","impliedFormat":1},{"version":"beb3cdd314c425b18bf4ace4ab6e6fedc6de732af63a0fd6d8d15c70426693c5","impliedFormat":1},{"version":"c72b982add26c5ddf410899bcafe3f47253a5d274d4b93d2ef67850d4af4545b","impliedFormat":1},{"version":"d023752daf2a5c2e27a2a850aedc10a48a42fb507dceae37db91dc8294aafdec","impliedFormat":1},{"version":"b8201c67e44d15814cbdfd0f1968c2d3450f6d4710cff2b86ca0748d279a2e7a","impliedFormat":1},{"version":"8766abe955b0fe1add2afcfdba0f39c687750c35ee41a43f69d10afd9ed132ce","impliedFormat":1},{"version":"18db0660a0c89ab26585e064d05daae7ed87e1509851904aa00b6393e37f4694","impliedFormat":1},{"version":"b7dce68b683b0daf599df3414b2e2d6903c3d02b513e33a7191682cee801bc78","impliedFormat":1},{"version":"0607a7bdc347f457ae4f5b96fd6d55d329f3427af6bbc667f71b59edba498fb0","impliedFormat":1},{"version":"01579ab25837ddd39c148b44f0603e6ac21c7d9e92c4e51f79cff193642dcfff","impliedFormat":1},{"version":"bec33abe96da3bb5dc21fa0a1e3843c5f80f7e443cc0fcbbdefadbfa5c781d8f","impliedFormat":1},{"version":"89121c1bf2990f5219bfd802a3e7fc557de447c62058d6af68d6b6348d64499a","impliedFormat":1},{"version":"d4a22007b481fe2a2e6bfd3a42c00cd62d41edb36d30fc4697df2692e9891fc8","impliedFormat":1},{"version":"5d08a179b846f5ee674624b349ebebe2121c455e3a265dc93da4e8d9e89722b4","impliedFormat":1},{"version":"2b37ba54ec067598bf912d56fcb81f6d8ad86a045c757e79440bdef97b52fe1b","impliedFormat":99},{"version":"1bc9dd465634109668661f998485a32da369755d9f32b5a55ed64a525566c94b","impliedFormat":99},{"version":"5702b3c2f5d248290ed99419d77ca1cc3e6c29db5847172377659c50e6303768","impliedFormat":99},{"version":"9764b2eb5b4fc0b8951468fb3dbd6cd922d7752343ef5fbf1a7cd3dfcd54a75e","impliedFormat":99},{"version":"1fc2d3fe8f31c52c802c4dee6c0157c5a1d1f6be44ece83c49174e316cf931ad","impliedFormat":99},{"version":"dc4aae103a0c812121d9db1f7a5ea98231801ed405bf577d1c9c46a893177e36","impliedFormat":99},{"version":"106d3f40907ba68d2ad8ce143a68358bad476e1cc4a5c710c11c7dbaac878308","impliedFormat":99},{"version":"42ad582d92b058b88570d5be95393cf0a6c09a29ba9aa44609465b41d39d2534","impliedFormat":99},{"version":"36e051a1e0d2f2a808dbb164d846be09b5d98e8b782b37922a3b75f57ee66698","impliedFormat":99},{"version":"89dcbbf69b16cd94043e16c7fbcfa04256577ec98bb8ae894833d2a922394db4","impliedFormat":1},{"version":"79b4369233a12c6fa4a07301ecb7085802c98f3a77cf9ab97eee27e1656f82e6","impliedFormat":1},{"version":"d9a75d09e41d52d7e1c8315cc637f995820a4a18a7356a0d30b1bed6d798aa70","impliedFormat":99},{"version":"a76819b2b56ccfc03484098828bdfe457bc16adb842f4308064a424cb8dba3e4","impliedFormat":99},{"version":"a5dbd4c9941b614526619bad31047ddd5f504ec4cdad88d6117b549faef34dd3","impliedFormat":99},{"version":"011423c04bfafb915ceb4faec12ea882d60acbe482780a667fa5095796c320f8","impliedFormat":99},{"version":"f8eb2909590ec619643841ead2fc4b4b183fbd859848ef051295d35fef9d8469","impliedFormat":99},{"version":"fe784567dd721417e2c4c7c1d7306f4b8611a4f232f5b7ce734382cf34b417d2","impliedFormat":99},{"version":"45d1e8fb4fd3e265b15f5a77866a8e21870eae4c69c473c33289a4b971e93704","impliedFormat":99},{"version":"cd40919f70c875ca07ecc5431cc740e366c008bcbe08ba14b8c78353fb4680df","impliedFormat":99},{"version":"ddfd9196f1f83997873bbe958ce99123f11b062f8309fc09d9c9667b2c284391","impliedFormat":99},{"version":"2999ba314a310f6a333199848166d008d088c6e36d090cbdcc69db67d8ae3154","impliedFormat":99},{"version":"62c1e573cd595d3204dfc02b96eba623020b181d2aa3ce6a33e030bc83bebb41","impliedFormat":99},{"version":"ca1616999d6ded0160fea978088a57df492b6c3f8c457a5879837a7e68d69033","impliedFormat":99},{"version":"835e3d95251bbc48918bb874768c13b8986b87ea60471ad8eceb6e38ddd8845e","impliedFormat":99},{"version":"de54e18f04dbcc892a4b4241b9e4c233cfce9be02ac5f43a631bbc25f479cd84","impliedFormat":99},{"version":"453fb9934e71eb8b52347e581b36c01d7751121a75a5cd1a96e3237e3fd9fc7e","impliedFormat":99},{"version":"bc1a1d0eba489e3eb5c2a4aa8cd986c700692b07a76a60b73a3c31e52c7ef983","impliedFormat":99},{"version":"4098e612efd242b5e203c5c0b9afbf7473209905ab2830598be5c7b3942643d0","impliedFormat":99},{"version":"28410cfb9a798bd7d0327fbf0afd4c4038799b1d6a3f86116dc972e31156b6d2","impliedFormat":99},{"version":"514ae9be6724e2164eb38f2a903ef56cf1d0e6ddb62d0d40f155f32d1317c116","impliedFormat":99},{"version":"970e5e94a9071fd5b5c41e2710c0ef7d73e7f7732911681592669e3f7bd06308","impliedFormat":99},{"version":"491fb8b0e0aef777cec1339cb8f5a1a599ed4973ee22a2f02812dd0f48bd78c1","impliedFormat":99},{"version":"6acf0b3018881977d2cfe4382ac3e3db7e103904c4b634be908f1ade06eb302d","impliedFormat":99},{"version":"2dbb2e03b4b7f6524ad5683e7b5aa2e6aef9c83cab1678afd8467fde6d5a3a92","impliedFormat":99},{"version":"135b12824cd5e495ea0a8f7e29aba52e1adb4581bb1e279fb179304ba60c0a44","impliedFormat":99},{"version":"e4c784392051f4bbb80304d3a909da18c98bc58b093456a09b3e3a1b7b10937f","impliedFormat":99},{"version":"2e87c3480512f057f2e7f44f6498b7e3677196e84e0884618fc9e8b6d6228bed","impliedFormat":99},{"version":"66984309d771b6b085e3369227077da237b40e798570f0a2ddbfea383db39812","impliedFormat":99},{"version":"e41be8943835ad083a4f8a558bd2a89b7fe39619ed99f1880187c75e231d033e","impliedFormat":99},{"version":"260558fff7344e4985cfc78472ae58cbc2487e406d23c1ddaf4d484618ce4cfd","impliedFormat":99},{"version":"a3d5be0365b28b3281541d39d9db08d30b88de49576ddfbbb5d086155017b283","impliedFormat":99},{"version":"985d310b29f50ce5d4b4666cf2e5a06e841f3e37d1d507bd14186c78649aa3dd","impliedFormat":99},{"version":"af1120ba3de51e52385019b7800e66e4694ebc9e6a4a68e9f4afc711f6ae88be","impliedFormat":99},{"version":"5c6b3840cbc84f6f60abfc5c58c3b67b7296b5ebe26fd370710cfc89bbe3a5f1","impliedFormat":99},{"version":"91ef552cc29ec57d616e95d73ee09765198c710fa34e20b25cb9f9cf502821f1","impliedFormat":99},{"version":"25b6edf357caf505aa8e21a944bb0f7a166c8dac6a61a49ad1a0366f1bde5160","impliedFormat":99},{"version":"1ab840e4672a64e3c705a9163142e2b79b898db88b3c18400e37dbe88a58fa60","impliedFormat":99},{"version":"48516730c1cf1b72cac2da04481983cfe61359101d8563314457ecb059b102a9","impliedFormat":99},{"version":"d391200bb56f44a4be56e6571b2aeedfe602c0fd3c686b87b1306ae62e80b1e9","impliedFormat":99},{"version":"3b3e4b39cbb8adb1f210af60388e4ad66f6dfdeb45b3c8dde961f557776d88fe","impliedFormat":99},{"version":"431f31d10ad58b5767c57ffbf44198303b754193ba8fbf034b7cf8a3ab68abc1","impliedFormat":99},{"version":"a52180aca81ba4ef18ac145083d5d272c3a19f26db54441d5a7d8ef4bd601765","impliedFormat":99},{"version":"9de8aba529388309bc46248fb9c6cca493111a6c9fc1c1f087a3b281fb145d77","impliedFormat":99},{"version":"2ccdfd33a753c18e8e5fe8a1eadefff968531d920bc9cdc7e4c97b0c6d3dcaf8","impliedFormat":99},{"version":"d64a434d7fb5040dbe7d5f4911145deda53e281b3f1887b9a610defd51b3c1a2","impliedFormat":99},{"version":"927f406568919fd7cd238ef7fe5e9c5e9ec826f1fff89830e480aff8cfd197da","impliedFormat":99},{"version":"a77d742410fe78bb054d325b690fda75459531db005b62ba0e9371c00163353c","impliedFormat":99},{"version":"f8de61dd3e3c4dc193bb341891d67d3979cb5523a57fcacaf46bf1e6284e6c35","impliedFormat":99},{"version":"f07c5fb951dfaf5eb0c6053f6a77c67e02d21c9586c58ed0836d892e438c5bb2","impliedFormat":99},{"version":"c97b20bb0ad5d42e1475255cb13ede29fe1b8c398db5cba2a5842f1cb973b658","impliedFormat":99},{"version":"5559999a83ecfa2da6009cdab20b402c63cd6bb0f7a13fc033a5b567b3eb404b","impliedFormat":99},{"version":"aec26ed2e2ef8f2dbc6ffce8e93503f0c1a6b6cf50b6a13141a8462e7a6b8c79","impliedFormat":99},{"version":"a510938c29a2e04183c801a340f0bbb5a0ae091651bd659214a8587d710ddfbb","impliedFormat":99},{"version":"07bcf85b52f652572fc2a7ec58e6de5dd4fcaf9bbc6f4706b124378cedcbb95c","impliedFormat":99},{"version":"4368a800522ca3dd131d3bbc05f2c46a8b7d612eefca41d5c2e5ac0428a45582","impliedFormat":99},{"version":"720e56f06175c21512bcaeed59a4d4173cd635ea7b4df3739901791b83f835b9","impliedFormat":99},{"version":"349949a8894257122f278f418f4ee2d39752c67b1f06162bb59747d8d06bbc51","impliedFormat":99},{"version":"364832fbef8fb60e1fee868343c0b64647ab8a4e6b0421ca6dafb10dff9979ba","impliedFormat":99},{"version":"dfe4d1087854351e45109f87e322a4fb9d3d28d8bd92aa0460f3578320f024e9","impliedFormat":99},{"version":"886051ae2ccc4c5545bedb4f9af372d69c7c3844ae68833ed1fba8cae8d90ef8","impliedFormat":99},{"version":"3f4e5997cb760b0ef04a7110b4dd18407718e7502e4bf6cd8dd8aa97af8456ff","impliedFormat":99},{"version":"381b5f28b29f104bbdd130704f0a0df347f2fc6cb7bab89cfdc2ec637e613f78","impliedFormat":99},{"version":"a52baccd4bf285e633816caffe74e7928870ce064ebc2a702e54d5e908228777","impliedFormat":99},{"version":"c6120582914acd667ce268849283702a625fee9893e9cad5cd27baada5f89f50","impliedFormat":99},{"version":"da1c22fbbf43de3065d227f8acbc10b132dfa2f3c725db415adbe392f6d1359f","impliedFormat":99},{"version":"858880acbe7e15f7e4f06ac82fd8f394dfe2362687271d5860900d584856c205","impliedFormat":99},{"version":"8dfb1bf0a03e4db2371bafe9ac3c5fb2a4481c77e904d2a210f3fed7d2ad243a","impliedFormat":99},{"version":"bc840f0c5e7274e66f61212bb517fb4348d3e25ed57a27e7783fed58301591e0","impliedFormat":99},{"version":"26438d4d1fc8c9923aea60424369c6e9e13f7ce2672e31137aa3d89b7e1ba9af","impliedFormat":99},{"version":"1ace7207aa2566178c72693b145a566f1209677a2d5e9fb948c8be56a1a61ca9","impliedFormat":99},{"version":"a776df294180c0fdb62ba1c56a959b0bb1d2967d25b372abefdb13d6eba14caf","impliedFormat":99},{"version":"6c88ea4c3b86430dd03de268fd178803d22dc6aa85f954f41b1a27c6bb6227f2","impliedFormat":99},{"version":"11e17a3addf249ae2d884b35543d2b40fabf55ddcbc04f8ee3dcdae8a0ce61eb","impliedFormat":99},{"version":"4fd8aac8f684ee9b1a61807c65ee48f217bf12c77eb169a84a3ba8ddf7335a86","impliedFormat":99},{"version":"1d0736a4bfcb9f32de29d6b15ac2fa0049fd447980cf1159d219543aa5266426","impliedFormat":99},{"version":"11083c0a8f45d2ec174df1cb565c7ba9770878d6820bf01d76d4fedb86052a77","impliedFormat":99},{"version":"d8e37104ef452b01cefe43990821adc3c6987423a73a1252aa55fb1d9ebc7e6d","impliedFormat":99},{"version":"f5622423ee5642dcf2b92d71b37967b458e8df3cf90b468675ff9fddaa532a0f","impliedFormat":99},{"version":"21a942886d6b3e372db0504c5ee277285cbe4f517a27fc4763cf8c48bd0f4310","impliedFormat":99},{"version":"41a4b2454b2d3a13b4fc4ec57d6a0a639127369f87da8f28037943019705d619","impliedFormat":99},{"version":"e9b82ac7186490d18dffaafda695f5d975dfee549096c0bf883387a8b6c3ab5a","impliedFormat":99},{"version":"eed9b5f5a6998abe0b408db4b8847a46eb401c9924ddc5b24b1cede3ebf4ee8c","impliedFormat":99},{"version":"f99db2cd80274f32467ae5231d74632c35596ab75fa65baac3fec9dd551cf9d7","impliedFormat":99},{"version":"c799ceedd4821387e6f3518cf5725f9430e2fb7cae1d4606119a243dea28ee40","impliedFormat":99},{"version":"dcf54538d0bfa5006f03bf111730788a7dd409a49036212a36b678afa0a5d8c6","impliedFormat":99},{"version":"1ed428700390f2f81996f60341acef406b26ad72f74fc05afaf3ca101ae18e61","impliedFormat":99},{"version":"417048bbdce52a57110e6c221d6fa4e883bde6464450894f3af378a8b9a82a47","impliedFormat":99},{"version":"ab0048d2b673c0d60afc882a4154abcb2edb9a10873375366f090ae7ae336fe8","impliedFormat":99},{"version":"f8a6bb79327f4a6afc63d28624654522fc80f7536efa7a617ef48200b7a5f673","impliedFormat":1},{"version":"3e61b9db82b5e4a8ffcdd54812fda9d980cd4772b1d9f56b323524368eed9e5a","impliedFormat":99},{"version":"dcbc70889e6105d3e0a369dcea59a2bd3094800be802cd206b617540ff422708","impliedFormat":99},{"version":"f0d325b9e8d30a91593dc922c602720cec5f41011e703655d1c3e4e183a22268","impliedFormat":99},{"version":"afbd42eb9f22aa6a53aa4d5f8e09bb289dd110836908064d2a18ea3ab86a1984","impliedFormat":99},{"version":"3132996c31314d85f1e2e5572a2e0b0ca04c59349c9169574a02bb65f77e5257","impliedFormat":1},{"version":"49530d42805effeefb5c9ecc64161451ff4f7fee8f0e6f00c30ccfca2991948c","impliedFormat":1},{"version":"271cde49dfd9b398ccc91bb3aaa43854cf76f4d14e10fed91cbac649aa6cbc63","affectsGlobalScope":true,"impliedFormat":1},{"version":"2bcecd31f1b4281710c666843fc55133a0ee25b143e59f35f49c62e168123f4b","impliedFormat":1},{"version":"a6273756fa05f794b64fe1aff45f4371d444f51ed0257f9364a8b25f3501915d","impliedFormat":1},{"version":"9c4e644fe9bf08d93c93bd892705842189fe345163f8896849d5964d21b56b78","impliedFormat":1},{"version":"25d91fb9ed77a828cc6c7a863236fb712dafcd52f816eec481bd0c1f589f4404","impliedFormat":1},{"version":"4cd14cea22eed1bfb0dc76183e56989f897ac5b14c0e2a819e5162eafdcfe243","impliedFormat":1},{"version":"8d32432f68ca4ce93ad717823976f2db2add94c70c19602bf87ee67fe51df48b","impliedFormat":1},{"version":"ee57aaff14b24ef49e381c8c13e046164daa0f0c078c2f29227fdf703ce47742","impliedFormat":1},{"version":"2d7196e8d39568d3db85476e645279cec672d4c76d30f577802b278a9d8da131","impliedFormat":1},{"version":"197a6f2763febaa594762ccde1fcd65307d9e5ed0d6b32189db73824a5c175bb","impliedFormat":1},{"version":"1bf22c9dab622297ae7f3e126346b6fc2fdde48a484de64e98ec362695179c80","impliedFormat":1},{"version":"80ba44fb2c285628cf99ccbc593055d57611b416359988b4c779f3a38aab658c","impliedFormat":1},{"version":"77b22c53e6f188ca5eb385defdbee1ab8854a0043e6700c9663e18bbe1f4c4f8","impliedFormat":1},{"version":"9f3b2c7365becfd7f1c3259c45c32c7dcaa9290a8f0433dc15c28f230a40b875","impliedFormat":1},{"version":"0250f9dd63c4cbac30f9155759244725e9511c3254f37af148585093abb232e1","impliedFormat":1},{"version":"f1efb9b111c4052eadc8c2d5ff703531728c48dd12d05e8faa910780d0e37a99","impliedFormat":1},{"version":"385e6beb29b630e2da34f897485a93b0e3af911db2a588c867ae8dc5e34e4365","impliedFormat":1},{"version":"a76bcade21aa1716bfd5e6ad737bad8d61dc2ccf3429014d3d80186867faf070","impliedFormat":1},{"version":"22fbde3378e80dc76b04ec18b5b21195fa283f150b8baf27734d38e6ae7aafed","impliedFormat":1},{"version":"cebfeedf63623d54f7423d58cae1ec204c0d8d97a66d5fb17579e26a902085e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"378281aa35786c27d5811af7e6bcaa492eebd0c7013d48137c35bbc69a2b9751","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"1b2dd1cbeb0cc6ae20795958ba5950395ebb2849b7c8326853dd15530c77ab0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"387a023d363f755eb63450a66c28b14cdd7bc30a104565e2dbf0a8988bb4a56c","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"3a80bc85f38526ca3b08007ee80712e7bb0601df178b23fbf0bf87036fce40ce","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"2931540c47ee0ff8a62860e61782eb17b155615db61e36986e54645ec67f67c2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"f6faf5f74e4c4cc309a6c6a6c4da02dbb840be5d3e92905a23dcd7b2b0bd1986","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"33e981bf6376e939f99bd7f89abec757c64897d33c005036b9a10d9587d80187","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"3bacf516d686d08682751a3bd2519ea3b8041a164bfb4f1d35728993e70a2426","impliedFormat":1},{"version":"7fb266686238369442bd1719bc0d7edd0199da4fb8540354e1ff7f16669b4323","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"c183b931b68ad184bc8e8372bf663f3d33304772fb482f29fb91b3c391031f3e","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"48cc3ec153b50985fb95153258a710782b25975b10dd4ac8a4f3920632d10790","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"e1528ca65ac90f6fa0e4a247eb656b4263c470bb22d9033e466463e13395e599","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"866078923a56d026e39243b4392e282c1c63159723996fa89243140e1388a98d","impliedFormat":1},{"version":"830171b27c5fdf9bcbe4cf7d428fcf3ae2c67780fb7fbdccdf70d1623d938bc4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d97fb21da858fb18b8ae72c314e9743fd52f73ebe2764e12af1db32fc03f853f","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ea15fd99b2e34cb25fe8346c955000bb70c8b423ae4377a972ef46bfb37f595","impliedFormat":1},{"version":"7cf69dd5502c41644c9e5106210b5da7144800670cbe861f66726fa209e231c4","impliedFormat":1},{"version":"72c1f5e0a28e473026074817561d1bc9647909cf253c8d56c41d1df8d95b85f7","impliedFormat":1},{"version":"f9b4137a0d285bd77dba2e6e895530112264310ae47e07bf311feae428fb8b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b21e13ed07d0df176ae31d6b7f01f7b17d66dbeb489c0d31d00de2ca14883da","impliedFormat":1},{"version":"51aecd2df90a3cffea1eb4696b33b2d78594ea2aa2138e6b9471ec4841c6c2ee","impliedFormat":1},{"version":"9d8f9e63e29a3396285620908e7f14d874d066caea747dc4b2c378f0599166b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"f929f0b6b3421a2d34344b0f421f45aeb2c84ad365ebf29d04312023b3accc58","impliedFormat":1},{"version":"db9ada976f9e52e13f7ae8b9a320f4b67b87685938c5879187d8864b2fbe97f3","impliedFormat":1},{"version":"9f39e70a354d0fba29ac3cdf6eca00b7f9e96f64b2b2780c432e8ea27f133743","impliedFormat":1},{"version":"0dace96cc0f7bc6d0ee2044921bdf19fe42d16284dbcc8ae200800d1c9579335","impliedFormat":1},{"version":"a2e2bbde231b65c53c764c12313897ffdfb6c49183dd31823ee2405f2f7b5378","impliedFormat":1},{"version":"ad1cc0ed328f3f708771272021be61ab146b32ecf2b78f3224959ff1e2cd2a5c","impliedFormat":1},{"version":"c64e1888baaa3253ca4405b455e4bf44f76357868a1bd0a52998ade9a092ad78","affectsGlobalScope":true,"impliedFormat":1},{"version":"d8cf132379078d0974a59df26069689a2d33c7dc826b5be56231841cb2f32e58","impliedFormat":1},{"version":"fbf413fc617837453c878a9174a1f1b383616857a3f8366bc41cf30df4aea7d5","impliedFormat":1},{"version":"148c73ec11318850f571172ceae3e55ce479d850fe18ec8eae0abd99d9f6c319","impliedFormat":1},{"version":"230bdc111d7578276e4a3bb9d075d85c78c6b68f428c3a9935e2eaa10f4ae1f5","impliedFormat":1},{"version":"e8aabbee5e7b9101b03bb4222607d57f38859b8115a8050a4eb91b4ee43a3a73","impliedFormat":1},{"version":"bbf42f98a5819f4f06e18c8b669a994afe9a17fe520ae3454a195e6eabf7700d","impliedFormat":1},{"version":"c0bb1b65757c72bbf8ddf7eaa532223bacf58041ff16c883e76f45506596e925","impliedFormat":1},{"version":"c8b85f7aed29f8f52b813f800611406b0bfe5cf3224d20a4bdda7c7f73ce368e","affectsGlobalScope":true,"impliedFormat":1},{"version":"145dcf25fd4967c610c53d93d7bc4dce8fbb1b6dd7935362472d4ae49363c7ba","impliedFormat":1},{"version":"ff65b8a8bd380c6d129becc35de02f7c29ad7ce03300331ca91311fb4044d1a9","impliedFormat":1},{"version":"76957a6d92b94b9e2852cf527fea32ad2dc0ef50f67fe2b14bd027c9ceef2d86","impliedFormat":1},{"version":"9043daec15206650fa119bad6b8d70136021ea7d52673a71f79a87a42ee38d44","affectsGlobalScope":true,"impliedFormat":1},{"version":"4e2de7ab2f74e36d7078bccdf831585b10dc6330bab56054921531b03f9beaf3","affectsGlobalScope":true,"impliedFormat":1},{"version":"a58a15da4c5ba3df60c910a043281256fa52d36a0fcdef9b9100c646282e88dd","impliedFormat":1},{"version":"b36beffbf8acdc3ebc58c8bb4b75574b31a2169869c70fc03f82895b93950a12","impliedFormat":1},{"version":"de263f0089aefbfd73c89562fb7254a7468b1f33b61839aafc3f035d60766cb4","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"8c81fd4a110490c43d7c578e8c6f69b3af01717189196899a6a44f93daa57a3a","impliedFormat":1},{"version":"5fb39858b2459864b139950a09adae4f38dad87c25bf572ce414f10e4bd7baab","impliedFormat":1},{"version":"65faec1b4bd63564aeec33eab9cacfaefd84ce2400f03903a71a1841fbce195f","impliedFormat":1},{"version":"b33b74b97952d9bf4fbd2951dcfbb5136656ddb310ce1c84518aaa77dbca9992","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"6b306cd4282bbb54d4a6bb23cfb7a271160983dfc38c67b5a132504cfcc34896","affectsGlobalScope":true,"impliedFormat":1},{"version":"c119835edf36415081dfd9ed15fc0cd37aaa28d232be029ad073f15f3d88c323","impliedFormat":1},{"version":"450172a56b944c2d83f45cc11c9a388ea967cd301a21202aa0a23c34c7506a18","impliedFormat":1},{"version":"9705cd157ffbb91c5cab48bdd2de5a437a372e63f870f8a8472e72ff634d47c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ae86f30d5d10e4f75ce8dcb6e1bd3a12ecec3d071a21e8f462c5c85c678efb41","impliedFormat":1},{"version":"72f8936aebf0c4a1adab767b97d34ba7d3a308afcf76de4417b9c16fb92ed548","impliedFormat":1},{"version":"e03460fe72b259f6d25ad029f085e4bedc3f90477da4401d8fbc1efa9793230e","impliedFormat":1},{"version":"4286a3a6619514fca656089aee160bb6f2e77f4dd53dc5a96b26a0b4fc778055","impliedFormat":1},{"version":"69e0a41d620fb678a899c65e073413b452f4db321b858fe422ad93fd686cd49a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3585d6891e9ea18e07d0755a6d90d71331558ba5dc5561933553209f886db106","affectsGlobalScope":true,"impliedFormat":1},{"version":"86be71cbb0593468644932a6eb96d527cfa600cecfc0b698af5f52e51804451d","impliedFormat":1},{"version":"84dd6b0fd2505135692935599d6606f50a421389e8d4535194bcded307ee5cf2","impliedFormat":1},{"version":"0d5b085f36e6dc55bc6332ecb9c733be3a534958c238fb8d8d18d4a2b6f2a15a","impliedFormat":1},{"version":"db19ea066fdc5f97df3f769e582ae3000380ab7942e266654bdb1a4650d19eaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"2a034894bf28c220a331c7a0229d33564803abe2ac1b9a5feee91b6b9b6e88ea","impliedFormat":1},{"version":"63228283eda38338f98e629d8033bffe727d2247ba2f3a1cbd1273a6827a1ec4","impliedFormat":1},{"version":"46324183533e34fad2461b51174132e8e0e4b3ac1ceb5032e4952992739d1eab","impliedFormat":1},{"version":"d3fa0530dfb1df408f0abd76486de39def69ca47683d4a3529b2d22fce27c693","impliedFormat":1},{"version":"d9be977c415df16e4defe4995caeca96e637eeef9d216d0d90cdba6fc617e97e","impliedFormat":1},{"version":"98e0c2b48d855a844099123e8ec20fe383ecd1c5877f3895b048656befe268d0","impliedFormat":1},{"version":"ff53802a97b7d11ab3c4395aa052baa14cd12d2b1ed236b520a833fdd2a15003","impliedFormat":1},{"version":"fce9262f840a74118112caf685b725e1cc86cd2b0927311511113d90d87cc61e","impliedFormat":1},{"version":"d7a7cac49af2a3bfc208fe68831fbfa569864f74a7f31cc3a607f641e6c583fd","impliedFormat":1},{"version":"9a80e3322d08274f0e41b77923c91fe67b2c8a5134a5278c2cb60a330441554e","impliedFormat":1},{"version":"2460af41191009298d931c592fb6d4151beea320f1f25b73605e2211e53e4e88","impliedFormat":1},{"version":"2f87ea988d84d1c617afdeba9d151435473ab24cd5fc456510c8db26d8bd1581","impliedFormat":1},{"version":"b7336c1c536e3deaedbda956739c6250ac2d0dd171730c42cb57b10368f38a14","impliedFormat":1},{"version":"6fb67d664aaab2f1d1ad4613b58548aecb4b4703b9e4c5dba6b865b31bd14722","impliedFormat":1},{"version":"4414644199b1a047b4234965e07d189781a92b578707c79c3933918d67cd9d85","impliedFormat":1},{"version":"04a4b38c6a1682059eac00e7d0948d99c46642b57003d61d0fe9ccc9df442887","impliedFormat":1},{"version":"f12ea658b060da1752c65ae4f1e4c248587f6cd4cb4acabbf79a110b6b02ff75","impliedFormat":1},{"version":"011b2857871a878d5eae463bedc4b3dd14755dc3a67d5d10f8fbb7823d119294","impliedFormat":1},{"version":"d406b797d7b2aff9f8bd6c023acfaa5a5fc415bfbf01975e23d415d3f54857af","impliedFormat":1},{"version":"7d71b2d1a537fe41760a16441cd95d98fcb59ddf9c714aba2fecba961ab253b6","impliedFormat":1},{"version":"a9bd8a2bbd03a72054cbdf0cd2a77fabea4e3ae591dd02b8f58bda0c34e50c1c","impliedFormat":1},{"version":"386cc88a3bdee8bc651ead59f8afc9dc5729fc933549bbd217409eabad05ba3e","impliedFormat":1},{"version":"41c78f187749098f9b8e8982839a010b6bf00dacc654d759b9c169127bcda034","impliedFormat":1},{"version":"3c2bc74b03662b252a2f0a0813618769795a67086d04cc646ecbdc9f365accbd","impliedFormat":1},{"version":"7734e65ea010fbe72d9b40f1d8751e6beed9ee23b6873b0a71d4cabf33ff1195","impliedFormat":1},{"version":"ed4cf7a3c503e67cf96266f3f8282250819aa4e2dd8f21fa91537c07c3dc790c","impliedFormat":1},{"version":"b01fb6f0512ae8caf204c6217fa2cc42abcbf5eb2eb72a20427ff7a955af9f3b","impliedFormat":1},{"version":"361e6c26ca7c4d005f9b4c7ca292657f476a4632bc659634bb43521b49fcc6e2","impliedFormat":1},{"version":"9f38804adbb5d9942944981147b1ffdea26683d2d41ebf498a7822f39c01a233","impliedFormat":1},{"version":"75d6380f5b4b8a4e4e61dd8f2e781002438473e202d806b129a29b1ae3b7329d","impliedFormat":1},{"version":"5bb405c8207f8cc3614dcfc207cd30651613bd959522c5871ee0f91710881777","impliedFormat":1},{"version":"af97f5c762c31843c9e3d4f7e9ad9c279ebcbaa568f8729a29183f6987a3726b","impliedFormat":1},{"version":"f945e0e522a12e3a8fe9c2801107711ff41038dac5647524a93ff867d954a27b","impliedFormat":1},{"version":"878b9a6090e149da9b3d9bf6613a84fac1f59e4e183d3186615a7ae5760812db","impliedFormat":1},{"version":"29a344b0ec2ebb6d736da158ad63091e2badfca1c800c3b723780b72a075ba82","impliedFormat":1},{"version":"b546b82719b214c8ab255a6f07fd91200119e9a59416ce984d25193f2b0c7747","impliedFormat":1},{"version":"4bc70244782fcc021d4ef0874301d65d2822ed10addbd06637bddad8018ce196","impliedFormat":1},{"version":"bec12c8989f9a8a61c0f4ecc0359a9afbf65dcaebc65ddb5b5ef6274d66d2138","impliedFormat":1},{"version":"a09669d0bd327788810ffd3d3cc1c4f5a3ddf37251065651deca8deea1a19d33","impliedFormat":1},{"version":"b8d0f6e12d6362a16d69b3bebf983920ea33d3ee21ac6031e65f5407ee2c2909","impliedFormat":1},{"version":"c7a9de6cf79f65cbbdb289b44083ff67cb73f59a4354feb529f52ebdead02dd1","impliedFormat":1},{"version":"a116507f5c4b2179f191eb857d76596206e9dc91613802fdd48ef8fde984d5bf","impliedFormat":1},{"version":"4e1ec83f37a0799a2a230b894601dec99f85c0b7ffc92f1bc85b4d2b9d7c6179","impliedFormat":1},{"version":"3ec8e21b8f949429ddcb49f80b06953c81bc50f56bd6ea6e2b9803fc6ed21e99","impliedFormat":1},{"version":"75c17591283913540d8ab0be61a97890bec2cbbe3158632aa503737a5d01d305","impliedFormat":1},{"version":"308c5fc45350fad0e65005659211d0e76f9575570d31e96cf7cd4f5faeaca882","impliedFormat":1},{"version":"be1cc4d94ea60cbe567bc29ed479d42587bf1e6cba490f123d329976b0fe4ee5","impliedFormat":1},{"version":"74ef4cc2d5619c3e63c7df4b4214f4c34136d34d44c7becad9329d0184a6fef5","signature":"c16133e0c1fa9e7ae9c86afae3ed7f335ca490c51ef48283fd044c0127c7f87a"},{"version":"3ce53aef0ff45c7fe00a7f305c2f84916bb12eef3ed01606d1af8267edeee9e2","signature":"a83b61b81863151deb620780b5bf84658bae9c1b86781ed76de043aafdca1dc1"},{"version":"1d4bc73751d6ec6285331d1ca378904f55d9e5e8aeaa69bc45b675c3df83e778","impliedFormat":1},{"version":"1cfafc077fd4b420e5e1c5f3e0e6b086f6ea424bf96a6c7af0d6d2ef2b008a81","impliedFormat":1},{"version":"527840e23d438abab6cac9bdd4672c888cbaf5abc54e7da1ee0915aaba06dda6","affectsGlobalScope":true,"impliedFormat":1},{"version":"8017277c3843df85296d8730f9edf097d68d7d5f9bc9d8124fcacf17ecfd487e","impliedFormat":1},{"version":"bc03c3c352f689e38c0ddd50c39b1e65d59273991bfc8858a9e3c0ebb79c023b","impliedFormat":1},{"version":"88932fc452666f86f68bae976df5825a406f5fef56aa0aca290b13d701ed74f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"4075757907f808df808613e647f84e2eec99cc169e0c91923f89a7e2e8b7f800","impliedFormat":1},{"version":"10f412fc0fd47949d1d9418a3fbae318fb828eff7f69aa61f024db9209ae6f0e","impliedFormat":1},{"version":"7398929ded2d0dd4d4981a9347418168430c93f55d8beb115b240c2768c6765f","impliedFormat":1},{"version":"906d5a8bb39407372c0a2d60d84054ab851e21d6bafd38d66211e6ad80d84799","impliedFormat":1},{"version":"b612e4c32b57d4cd79286dc9fcbfef249a9ba0455872118679b44f519f29c28f","impliedFormat":1},{"version":"39b6e1763585df311b4181724eaad2a753ca7495afb542c2f33e63d953de786a","impliedFormat":1},{"version":"4bfb50ef23d2593626b2647e30a71e18d1184325ebffff77c6c5c68f245b3cc4","impliedFormat":1},{"version":"604119670b50c8df98cc681ab220c5484eaf9c7aee9734e00df00e48765c63ed","impliedFormat":1},{"version":"3dfc94ab9005f81eafa894dead73bf6e34130c55005033bae7ba756cc6e3b1ee","impliedFormat":1},{"version":"9cc1b0d60c5bccce675d462ce26a7e03addd4ec69dfaae7e173cbd68314e676a","impliedFormat":1},{"version":"5f3683471145276ddd2d6aed918849693207283a987f65789b721e2736214947","impliedFormat":1},{"version":"73e1e5ee4db9ffa857b1477cc0490f5a3ac79668440b779dc7f03031b700c0c2","impliedFormat":1},{"version":"faed8411aa332ef216a8d42c97287a2de2ebf571f95cd4290e94baaea3f9f649","impliedFormat":1},{"version":"69109a4ab0b3995d7f908d4ef4c2a724019af7f804787445d5b54b40f4a28912","impliedFormat":1},{"version":"1e9976a8066912bc92bdd115e178455d84010f674ed6e8b8c5e9ba6e6481e58f","impliedFormat":1},{"version":"d4e5e4199a0d44dda463c2537e558187f9d55f141882583cb76ae4b7eaf8c0bf","impliedFormat":1},{"version":"a771b66b0df9046d74124826c5c1cab3350c532b94ed592db39b36dee4ee501c","impliedFormat":1},{"version":"a60488c759604104a759dfb131b6e4b13d52080a33c21d3c30ec0378d4a2fa34","impliedFormat":1},{"version":"9ada85338e97787c2ca26d897037e0b05879801bf1a898b7471e85e95304f2e3","impliedFormat":1},{"version":"098a869db6e8f94f810627bcee077dd21b4f6bb42d65fd27e0e41eb49f8597ba","impliedFormat":1},{"version":"99f50f5b37e6a6600d0ffefb7d78171b6dacfd7190284bcae51cfe38d5e08b5f","impliedFormat":1},{"version":"898c898e9dd255dfb7c04af5e2f1de43f577945ad9cfd978ad2fba20bffedcfc","impliedFormat":1},{"version":"a11f14e5c3a63af875cb648fd1c692373227fd0ed9593736a24963beee51baa6","impliedFormat":1},{"version":"bbb540b9a92c3fb0961c636b34deddecf827a9ace429e81521a8bad15ea2df5b","impliedFormat":1},{"version":"379d7f7530fa95c3abed897c07223640a3da8d1c7af6841f07d37b29a60ad73f","impliedFormat":1},{"version":"4b2dd0b3fdfadbca319f697b45250cc26e5b2398be90315a33d4e61dafc7f017","impliedFormat":1},{"version":"5ae4a3263f5e6f811f5f2eb1a194ddd243d2c80a6829e41be80f1bf6b8129256","impliedFormat":1},{"version":"b3a2f695df5f14c156dd240d02e6d9885d10645415658da0b472fe7510af692a","impliedFormat":1},{"version":"108d608dca853601727c878e272d985cc1725eb68fb3fa4eb41b8ad16b932df6","impliedFormat":1},{"version":"648ea4f174852dcfc84aed6109bb74be38f2284e32b0b2e4baf78043782ef88a","impliedFormat":1},{"version":"58265a050248d26b3fd1ae613370f52c6d4aeb08c01a344514e23b3e100c80d2","impliedFormat":1},{"version":"095ee967fef837fd016bc5950ac1c87965bda2c2b3ef3b6da6c0b9aa4db2225f","impliedFormat":1},{"version":"7d5c95cac1cc68fddee16cd05ce567ce2e33dd2af93beddff7f39395c343effa","impliedFormat":1},{"version":"f40cc3059b1e49c604e4b50cf295c9d3b80d070044a66b114b3c01aa26f7964b","impliedFormat":1},{"version":"3523adb9ca56693e953dff4fcbc946cc187f0427aa5aef93464b8934c9915806","impliedFormat":1},{"version":"1ebcd2800a2dc7a8092d51e76c59e44d62758e17d312927ee86dbbee77846803","impliedFormat":1},{"version":"9770fa0e3b84532fa93495f398112d3a55b5191427086c083f642699d20536a1","impliedFormat":1},{"version":"5e9d89ebe0d80018f016f536f05c3958236e777b1308e6e55ad218a91aa015da","impliedFormat":1},{"version":"60f190ada1ee8135dd5a49662782899f7219443051190e56d9cb882b552d1f0d","impliedFormat":1},{"version":"bad954dfc881df737734e8ffdc6aec87a37416c34c98829432bf952ac94e8144","impliedFormat":1},{"version":"e2ad280799dd76198bef5a0c581c165dc96c764bedebeb017cb22c3ef2ed011f","impliedFormat":1},{"version":"ff93f5776c42016e1abf0fb5597f660b0d5415b447cf1e468d8961b021aeed58","impliedFormat":1},{"version":"2046d695dd06003d8eb37c6a5e5c89559613dbb8562e5f1f0e1cdba893e2325b","impliedFormat":1},{"version":"82cec507700daca059a4e6bf2e626fd83126451521f6a1e6054a0c282230eb83","signature":"d3d685f4e5de8a2ddf2748755cda04d640d818ffa904856cd70279d8be29eeb2"},{"version":"1363d4e8998a581aca490ae9a9f49f2fe375d72adbbf8f2163050a24444dea6c","signature":"92139dcd3ce3e98d6d3ad7c08c83981cfc25f23b4ffcbdd1453507d675efb998"},{"version":"fbb68cd7b6dff67a1134e958cca2a9df3e72140216f4a23526ad60478e1dc163","signature":"f86243f4c8da42724fd9841bcc5dd4a975f6275b874742fe9f588c39b42dabf2"},{"version":"62fc4e189b595791f375e227bec65ca32585fedb424708003c84ce10cee0af4f","signature":"257962d6ca6064fc939b119196c8d0f117b4e463967ecd304ee3c4df4367c31c"},{"version":"131e8d408504a9328274c5f2e7ca0681f0e091b1d40a75ec058ac330620e41df","signature":"ec73e46abe76738c07809225c7fe8bdf08cf3c395ea3fea868375a17ec59f026"},{"version":"2952178542586db381f85e7ed51cf60eaddc829381824a539774c51a5e9dfcd2","signature":"bee9d147b886962e0b734f954e42a93a203435ddf29409949ae6bb05229224c5"},"88e9b57df367ab3f2323f17977e34680da4250b52dbc0e537343a2cfdccc6f70",{"version":"a471f5f784d9c735f38961f59f29f3577902ef920c22de18860bc1b7a60ad12a","signature":"e3b8e025decece4342925051285543e6821d1973fdd11f28102c161eae017b8b"},{"version":"45e0486208ed7ef8b8901a133af46388cac1328169a4dd303528d960e993c400","impliedFormat":1},{"version":"5e5d382e96c56c8e71b092fa455adbcd352b7cde40a4f2fcf62885a40b05d196","impliedFormat":99},{"version":"5df5a148750681ff497698be0a5b51e022d0fcda0d57391029f14b333c0e4978","impliedFormat":99},{"version":"b7309450ccb0df47eaef4762df3ef3fee33dd903700ac671e535ef8c8acc961c","impliedFormat":99},{"version":"88d20057ba6600765c5dea0a00f421d8917e2f8e55b1d51f0bec914a6232c9aa","impliedFormat":99},{"version":"1409441eb3c48c85385ae77ed814b38cb990f1bb9a761cad6c36dd07457ae7a9","impliedFormat":99},{"version":"8a54648b7892c5d7b874ec0555410e3cf075c927368f88e2f924857288e32ae3","impliedFormat":99},{"version":"516bb78d9bb379ee18f519ff06018897592981302409699bb80c3a7e3a026ec7","impliedFormat":99},{"version":"a006402724eed2e61b15df68c90c62f6ee9c849f8c00cbf9df40e0bc9effe5e9","impliedFormat":99},{"version":"6025a92f113a099e6c5e5af11b68dd65972e7ae11440862fe455dba4dea6140e","impliedFormat":99},{"version":"74f4a434a4a1651efd08536509d939b992c9672c27d3fcc12f028588ab904bef","impliedFormat":99},{"version":"c4a30d079e46d847387167210d884c71d5ee6ac588a7f8240d0aa44934e7b533","impliedFormat":1},{"version":"3f4a5d9eedacf72e9fc9b27e2389e12a27efb91ec14495044517b33f8f100870","impliedFormat":1},{"version":"c57b441e0c0a9cbdfa7d850dae1f8a387d6f81cbffbc3cd0465d530084c2417d","impliedFormat":99},{"version":"f967cffbd72b9e8aaecee9d8a028bae47f63888bc638c49fa14b7f9dd6ec5297","signature":"ef52515f37f9ed6f34c15957465c5c74e28bb1e8b62d4c332b5e134fb38f8ab4"},{"version":"55f350df4be57429247ffec3d340cf37c88509c240efbe90d72ba6f8d30f5645","signature":"2890e4e65e2f94b7245be0c6e41da175f626c899e30a968c139bb85a4042093a"},"1060db6730586d109b15f04d9e4ca2d9f9e0621f896e9bab68b6265f921d4725",{"version":"4f3fd1ad733a6114232de679b88dab76853b99ce7ae0803c35169494c9b42548","impliedFormat":1},{"version":"fc7e1a3be1bc9b1c019eb5fcd1f20318705f60597ce1211b2d697c05318c9e80","impliedFormat":1},{"version":"e3e43b12311e8f63a41fd1a2fa76dd67d4f66446108ee82d57b59a59c8da7f73","impliedFormat":1},{"version":"6cb446928c2756082bd3da6c83df1f5427a1df039df8ae77273526281d2b2799","impliedFormat":1},{"version":"470d46ab6536b2165d6d86a91603425c92b3be9c20dca186decaf4ae21b9300c","impliedFormat":99},{"version":"72a4fc5ef7dda8bf1d65463fa461972ac503a56aa2af81aa0204f84d4fb557c0","impliedFormat":99},{"version":"fc493cd994a6afbfe5659466667af217565003038be4d81f7df1a0d27972183a","impliedFormat":1},{"version":"950273a47af578cebefd993f2a85057ad8deb87683cd7d6e020fbe1010439858","impliedFormat":1},"60a1a218fa5e8a818d5979e59a51722cd534b0d3cb16fb79d3186b0549361eb2",{"version":"ae77d81a5541a8abb938a0efedf9ac4bea36fb3a24cc28cfa11c598863aba571","impliedFormat":1},{"version":"c2c2a861a338244d7dd700d0c52a78916b4bb75b98fc8ca5e7c501899fc03796","impliedFormat":1},{"version":"b6d03c9cfe2cf0ba4c673c209fcd7c46c815b2619fd2aad59fc4229aaef2ed43","impliedFormat":1},{"version":"adb467429462e3891de5bb4a82a4189b92005d61c7f9367c089baf03997c104e","impliedFormat":1},{"version":"670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","impliedFormat":1},{"version":"13b77ab19ef7aadd86a1e54f2f08ea23a6d74e102909e3c00d31f231ed040f62","impliedFormat":1},{"version":"069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9","impliedFormat":1},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"cc0d0b339f31ce0ab3b7a5b714d8e578ce698f1e13d7f8c60bfb766baeb1d35c","impliedFormat":1},{"version":"f9e22729fa06ed20f8b1fe60670b7c74933fdfd44d869ddfb1919c15a5cf12fb","impliedFormat":1},{"version":"d34aa8df2d0b18fb56b1d772ff9b3c7aea7256cf0d692f969be6e1d27b74d660","impliedFormat":1},{"version":"baac9896d29bcc55391d769e408ff400d61273d832dd500f21de766205255acb","impliedFormat":1},{"version":"2f5747b1508ccf83fad0c251ba1e5da2f5a30b78b09ffa1cfaf633045160afed","impliedFormat":1},{"version":"f429b61e369208ef7668ebf1dc63176e506fbfaea7b0ecc13d586a5839ebb071","affectsGlobalScope":true,"impliedFormat":1},{"version":"689be50b735f145624c6f391042155ae2ff6b90a93bac11ca5712bc866f6010c","impliedFormat":1},{"version":"fb893a0dfc3c9fb0f9ca93d0648694dd95f33cbad2c0f2c629f842981dfd4e2e","impliedFormat":1},{"version":"3eb11dbf3489064a47a2e1cf9d261b1f100ef0b3b50ffca6c44dd99d6dd81ac1","impliedFormat":1},{"version":"b71c603a539078a5e3a039b20f2b0a0d1708967530cf97dec8850a9ca45baa2b","impliedFormat":1},{"version":"d3f2d715f57df3f04bf7b16dde01dec10366f64fce44503c92b8f78f614c1769","impliedFormat":1},{"version":"cb90077223cc1365fa21ef0911a1f9b8f2f878943523d97350dc557973ca3823","impliedFormat":1},{"version":"18f1541b81b80d806120a3489af683edfb811deb91aeca19735d9bb2613e6311","impliedFormat":1},{"version":"94ee9ee71018d54902c3fe6730090a8a421dcad95fc372d9b69a6d5351194885","affectsGlobalScope":true,"impliedFormat":1},{"version":"232f118ae64ab84dcd26ddb60eaed5a6e44302d36249abf05e9e3fc2cbb701a2","impliedFormat":1},{"version":"211440ce81e87b3491cdf07155881344b0a61566df6e749acff0be7e8b9d1a07","impliedFormat":1},{"version":"5d9a0b6e6be8dbb259f64037bce02f34692e8c1519f5cd5d467d7fa4490dced4","impliedFormat":1},{"version":"880da0e0f3ebca42f9bd1bc2d3e5e7df33f2619d85f18ee0ed4bd16d1800bc32","impliedFormat":1},{"version":"963d59066dd6742da1918a6213a209bcc205b8ee53b1876ee2b4e6d80f97c85e","impliedFormat":1},{"version":"fd326577c62145816fe1acc306c734c2396487f76719d3785d4e825b34540b33","impliedFormat":1},{"version":"fab7e642480027e174565250294ba8eeeacbf7faa31c565472384bbad2deba01","affectsGlobalScope":true,"impliedFormat":1},{"version":"ee65fe452abe1309389c5f50710f24114e08a302d40708101c4aa950a2a7d044","impliedFormat":1},{"version":"d7dbe0ad36bdca8a6ecf143422a48e72cc8927bab7b23a1a2485c2f78a7022c6","impliedFormat":1},{"version":"26b7d0cd4b41ab557ef9e3bfeec42dcf24252843633e3d29f38d2c0b13aaa528","impliedFormat":1},{"version":"035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","impliedFormat":1},{"version":"a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","impliedFormat":1},{"version":"5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","impliedFormat":1},{"version":"96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","impliedFormat":1},{"version":"fec943fdb3275eb6e006b35e04a8e2e99e9adf3f4b969ddf15315ac7575a93e4","impliedFormat":1},{"version":"380b919bfa0516118edaf25b99e45f855e7bc3fd75ce4163a1cfe4a666388804","impliedFormat":1},{"version":"0d89e5c4ce6e3096e64504e1fa45a8ddccf488cb5fdc1980ea09db2a451f0b91","impliedFormat":1},{"version":"fcf79300e5257a23ed3bacaa6861d7c645139c6f7ece134d15e6669447e5e6db","impliedFormat":1},{"version":"187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","impliedFormat":1},{"version":"aa2c18a1b5a086bbcaae10a4efba409cc95ba7287d8cf8f2591b53704fea3dea","impliedFormat":1},{"version":"5a0b15210129310cee9fa6af9200714bb4b12af4a04d890e15f34dbea1cf1852","impliedFormat":1},{"version":"0244119dbcbcf34faf3ffdae72dab1e9bc2bc9efc3c477b2240ffa94af3bca56","impliedFormat":1},{"version":"00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","impliedFormat":1},{"version":"a873c50d3e47c21aa09fbe1e2023d9a44efb07cc0cb8c72f418bf301b0771fd3","impliedFormat":1},{"version":"7c14ccd2eaa82619fffc1bfa877eb68a012e9fb723d07ee98db451fadb618906","impliedFormat":1},{"version":"49c36529ee09ea9ce19525af5bb84985ea8e782cb7ee8c493d9e36d027a3d019","impliedFormat":1},{"version":"df996e25faa505f85aeb294d15ebe61b399cf1d1e49959cdfaf2cc0815c203f9","impliedFormat":1},{"version":"4f6a12044ee6f458db11964153830abbc499e73d065c51c329ec97407f4b13dd","impliedFormat":1},{"version":"8e0733c50eaac49b4e84954106acc144ec1a8019922d6afcde3762523a3634af","impliedFormat":1},{"version":"8841e2aa774b89bd23302dede20663306dc1b9902431ac64b24be8b8d0e3f649","impliedFormat":1},{"version":"fbca5ffaebf282ec3cdac47b0d1d4a138a8b0bb32105251a38acb235087d3318","impliedFormat":1},{"version":"7fadb2778688ebf3fd5b8d04f63d5bf27a43a3e420bc80732d3c6239067d1a4b","impliedFormat":1},{"version":"22293bd6fa12747929f8dfca3ec1684a3fe08638aa18023dd286ab337e88a592","impliedFormat":1},{"version":"8baa5d0febc68db886c40bf341e5c90dc215a90cd64552e47e8184be6b7e3358","impliedFormat":1},{"version":"8718fa41d7cf4aa91de4e8f164c90f88e0bf343aa92a1b9b725a9c675c64e16b","impliedFormat":1},{"version":"510616459e6edd01acbce333fb256e06bdffdad43ca233a9090164bf8bb83912","impliedFormat":1},{"version":"c73834a2aee5e08dea83bd8d347f131bc52f9ec5b06959165c55ef7a544cae82","impliedFormat":1},{"version":"8e04cf0688e0d921111659c2b55851957017148fa7b977b02727477d155b3c47","impliedFormat":1},{"version":"ddef25f825320de051dcb0e62ffce621b41c67712b5b4105740c32fd83f4c449","impliedFormat":1},{"version":"550650516d34048712520ffb1fce4a02f2d837761ee45c7d9868a7a35e7b0343","impliedFormat":1},{"version":"6537313aa6bd137e046dd52f48698d4075dd511886f17ee70bc1dda1b9fe1066","impliedFormat":1},{"version":"1b3dffaa4ca8e38ac434856843505af767a614d187fb3a5ef4fcebb023c355aa","impliedFormat":1},{"version":"1ba59c8bbeed2cb75b239bb12041582fa3e8ef32f8d0bd0ec802e38442d3f317","impliedFormat":1},{"version":"bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","impliedFormat":1},{"version":"26a770cec4bd2e7dbba95c6e536390fffe83c6268b78974a93727903b515c4e7","impliedFormat":1},{"version":"74d5a87c3616cd5d8691059d531504403aa857e09cbaecb1c64dfb9ace0db185","impliedFormat":1}],"root":[283,652,653,[703,708],710,[725,727],736],"options":{"allowSyntheticDefaultImports":true,"composite":true,"declaration":true,"esModuleInterop":true,"jsx":4,"module":99,"outDir":"./lib","rootDir":"./src","skipLibCheck":true,"strict":true,"target":99},"referencedMap":[[708,1],[706,2],[707,3],[703,4],[653,5],[704,6],[705,7],[727,8],[652,9],[283,10],[710,11],[725,12],[726,13],[736,14],[230,15],[229,16],[140,17],[280,18],[713,19],[130,20],[131,20],[132,21],[119,22],[120,20],[129,23],[78,8],[79,24],[108,25],[112,26],[113,20],[117,8],[109,8],[110,20],[111,27],[118,28],[114,8],[115,8],[116,29],[127,30],[122,31],[128,32],[121,8],[123,33],[124,34],[126,35],[125,8],[76,36],[70,37],[71,8],[65,8],[73,38],[68,39],[67,40],[74,41],[66,42],[75,43],[69,44],[72,45],[77,46],[80,8],[81,8],[82,8],[83,8],[84,8],[85,8],[86,8],[107,47],[87,8],[88,8],[94,8],[100,48],[97,49],[105,50],[101,51],[102,52],[103,53],[95,8],[99,53],[98,54],[104,8],[96,8],[106,55],[59,8],[89,8],[61,56],[64,57],[90,8],[62,58],[63,8],[91,8],[92,8],[93,8],[714,19],[715,19],[57,8],[716,19],[717,19],[718,19],[58,19],[711,8],[719,19],[720,19],[712,19],[740,59],[738,8],[668,60],[660,61],[669,62],[666,60],[665,63],[662,64],[661,65],[663,66],[667,67],[664,68],[659,69],[730,70],[677,71],[674,72],[673,73],[678,8],[676,71],[672,74],[675,71],[681,75],[680,76],[671,77],[670,78],[731,79],[735,80],[295,72],[734,72],[292,72],[682,72],[290,72],[684,72],[300,72],[685,72],[700,8],[288,72],[697,8],[698,8],[699,8],[644,81],[639,8],[695,8],[301,8],[650,82],[702,83],[701,72],[648,72],[297,8],[645,72],[640,8],[289,84],[649,72],[641,85],[646,86],[696,8],[643,8],[299,72],[694,72],[298,72],[642,8],[693,87],[692,72],[687,8],[647,72],[293,8],[683,72],[638,88],[296,8],[688,72],[691,61],[686,8],[690,8],[689,86],[294,8],[291,89],[368,90],[487,86],[479,91],[370,92],[305,93],[489,94],[478,95],[369,96],[371,8],[367,97],[366,72],[488,8],[634,8],[302,8],[632,8],[631,98],[303,8],[304,8],[628,99],[498,8],[490,100],[637,101],[491,8],[636,100],[496,8],[495,102],[630,8],[497,8],[633,8],[635,100],[494,8],[493,93],[492,8],[629,90],[477,103],[469,104],[467,105],[475,106],[468,8],[476,107],[474,108],[384,8],[733,109],[732,110],[613,111],[616,112],[615,113],[614,114],[612,115],[608,116],[611,117],[610,118],[609,119],[607,115],[622,120],[621,121],[620,122],[619,123],[618,124],[617,125],[239,126],[242,127],[248,128],[251,129],[272,130],[250,131],[231,8],[232,132],[233,133],[236,8],[234,8],[235,8],[273,134],[238,126],[237,8],[274,135],[241,127],[240,8],[278,136],[275,137],[245,138],[247,139],[244,140],[246,141],[243,138],[276,142],[249,126],[277,143],[252,144],[271,145],[268,146],[270,147],[255,148],[262,149],[264,150],[266,151],[265,152],[257,153],[254,146],[258,8],[269,154],[259,155],[256,8],[267,8],[253,8],[260,156],[261,8],[263,157],[214,8],[737,8],[743,158],[739,59],[741,159],[742,59],[745,160],[746,161],[751,162],[744,163],[753,164],[311,165],[310,166],[309,167],[374,168],[308,8],[750,169],[759,170],[758,169],[762,171],[764,172],[763,8],[765,8],[385,173],[481,174],[482,174],[483,174],[480,8],[486,175],[484,86],[485,86],[766,8],[767,8],[754,8],[768,176],[769,8],[770,177],[771,178],[139,8],[772,8],[760,179],[761,8],[773,180],[775,181],[776,182],[774,183],[777,184],[778,185],[779,186],[780,187],[781,188],[782,189],[783,190],[784,191],[785,192],[786,193],[373,173],[787,194],[473,8],[755,8],[788,8],[789,8],[752,8],[790,195],[553,196],[554,196],[555,197],[502,198],[556,199],[557,200],[558,201],[500,8],[559,202],[560,203],[561,204],[562,205],[563,206],[564,207],[565,207],[566,208],[567,209],[568,210],[569,211],[503,8],[501,8],[570,212],[571,213],[572,214],[573,215],[574,8],[575,216],[576,217],[577,218],[578,219],[579,220],[580,221],[581,222],[582,223],[583,224],[584,224],[585,225],[586,8],[587,226],[588,227],[590,228],[589,229],[591,230],[592,231],[593,232],[594,233],[595,234],[596,235],[597,236],[499,8],[606,237],[598,238],[599,239],[600,240],[601,241],[602,242],[603,243],[504,8],[505,244],[506,8],[507,8],[549,245],[550,246],[551,8],[552,230],[604,247],[605,248],[791,8],[286,8],[748,8],[749,8],[658,72],[651,72],[655,249],[657,249],[654,250],[53,8],[55,251],[56,72],[792,8],[793,252],[794,8],[795,253],[747,254],[797,255],[796,256],[757,257],[756,258],[798,8],[799,8],[800,163],[372,8],[801,259],[802,8],[803,260],[804,261],[306,8],[279,262],[723,263],[722,264],[721,265],[60,19],[307,8],[724,8],[363,8],[54,8],[228,8],[626,266],[625,267],[624,268],[623,269],[313,8],[729,270],[728,8],[627,271],[434,272],[386,273],[387,273],[426,274],[417,275],[420,276],[423,277],[424,273],[425,273],[427,278],[433,279],[472,280],[471,281],[470,279],[364,8],[391,282],[390,283],[389,284],[416,285],[415,286],[419,287],[418,286],[422,288],[421,289],[464,290],[438,291],[439,292],[440,292],[441,292],[442,292],[443,292],[444,292],[445,292],[446,292],[447,292],[448,292],[462,293],[449,292],[450,292],[451,292],[452,292],[453,292],[454,292],[455,292],[456,292],[458,292],[459,292],[457,292],[460,292],[461,292],[463,292],[437,294],[414,295],[394,296],[395,296],[396,296],[397,296],[398,296],[399,296],[400,67],[402,296],[401,296],[413,297],[403,296],[405,296],[404,296],[407,296],[406,296],[408,296],[409,296],[410,296],[411,296],[412,296],[393,296],[392,298],[388,8],[287,299],[432,300],[429,301],[430,8],[431,8],[428,302],[365,72],[656,72],[436,303],[435,304],[466,305],[465,306],[679,8],[359,307],[358,308],[312,309],[357,310],[314,8],[316,311],[315,312],[320,313],[355,314],[352,315],[354,316],[317,315],[318,317],[322,317],[321,318],[319,319],[353,320],[351,315],[356,321],[349,8],[350,8],[323,322],[328,315],[330,315],[325,315],[326,322],[332,315],[333,323],[324,315],[329,315],[331,315],[327,315],[347,324],[346,315],[348,325],[342,315],[344,315],[343,315],[339,315],[345,326],[340,315],[341,327],[334,315],[335,315],[336,315],[337,315],[338,315],[360,8],[381,328],[380,8],[51,8],[52,8],[9,8],[11,8],[10,8],[2,8],[12,8],[13,8],[14,8],[15,8],[16,8],[17,8],[18,8],[19,8],[3,8],[20,8],[21,8],[4,8],[22,8],[26,8],[23,8],[24,8],[25,8],[27,8],[28,8],[29,8],[5,8],[30,8],[31,8],[32,8],[33,8],[6,8],[37,8],[34,8],[35,8],[36,8],[38,8],[7,8],[39,8],[44,8],[45,8],[40,8],[41,8],[42,8],[43,8],[8,8],[49,8],[46,8],[47,8],[48,8],[1,8],[50,8],[525,329],[537,330],[523,331],[538,332],[547,333],[514,334],[515,335],[513,336],[546,195],[541,337],[545,338],[517,339],[534,340],[516,341],[544,342],[511,343],[512,337],[518,344],[519,8],[524,345],[522,344],[509,346],[548,347],[539,348],[528,349],[527,344],[529,350],[532,351],[526,352],[530,353],[542,195],[520,354],[521,355],[533,356],[510,332],[536,357],[535,344],[531,358],[540,8],[508,8],[543,359],[383,360],[379,8],[382,361],[133,8],[136,8],[137,362],[134,363],[135,364],[376,365],[375,173],[378,366],[377,367],[362,8],[361,368],[219,369],[226,370],[221,8],[222,8],[220,371],[223,372],[215,8],[216,8],[227,373],[218,374],[224,8],[225,375],[217,376],[207,377],[210,378],[208,378],[204,377],[211,379],[212,380],[209,378],[205,381],[206,382],[200,383],[145,384],[147,385],[199,8],[146,386],[203,387],[201,8],[148,384],[149,8],[198,388],[144,389],[141,8],[202,390],[142,391],[143,8],[213,392],[150,393],[151,393],[152,393],[153,393],[154,393],[155,393],[156,393],[157,393],[158,393],[159,393],[160,393],[161,393],[162,393],[164,393],[163,393],[165,393],[166,393],[167,393],[197,394],[168,393],[169,393],[170,393],[171,393],[172,393],[173,393],[174,393],[175,393],[176,393],[177,393],[178,393],[179,393],[180,393],[182,393],[181,393],[183,393],[184,393],[185,393],[186,393],[187,393],[188,393],[189,393],[190,393],[191,393],[192,393],[193,393],[196,393],[194,393],[195,393],[138,72],[284,395],[709,396],[281,397],[282,395],[285,72]],"latestChangedDtsFile":"./lib/theme/SearchTranslations/index.d.ts","version":"5.7.3"} \ No newline at end of file diff --git a/adapters/docusaurus-theme-search-algolia/tsconfig.json b/adapters/docusaurus-theme-search-algolia/tsconfig.json new file mode 100644 index 0000000000..1ca89a8713 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.base.json", + "references": [{"path": "./tsconfig.client.json"}], + "compilerOptions": { + "noEmit": false, + "outDir": "lib", + "rootDir": "src" + }, + "include": ["src"], + "exclude": ["src/client", "src/theme", "**/__tests__/**"] +} diff --git a/adapters/docusaurus-theme-search-algolia/tsconfig.tsbuildinfo b/adapters/docusaurus-theme-search-algolia/tsconfig.tsbuildinfo new file mode 100644 index 0000000000..6b02b786b5 --- /dev/null +++ b/adapters/docusaurus-theme-search-algolia/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","./src/deps.d.ts","../../node_modules/@types/react/global.d.ts","../../node_modules/csstype/index.d.ts","../../node_modules/@types/react/index.d.ts","../../node_modules/@types/react/jsx-runtime.d.ts","../../node_modules/@algolia/client-common/dist/common.d.cts","../../node_modules/@algolia/client-search/dist/node.d.cts","../../node_modules/@algolia/autocomplete-shared/dist/esm/maybepromise.d.ts","../../node_modules/algoliasearch/dist/lite/node.d.cts","../../node_modules/@algolia/autocomplete-shared/dist/esm/preset-algolia/algoliasearch.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/searchresponse.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/useragent.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/preset-algolia/createrequester.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/core/autocompleteenvironment.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/core/autocompletereshape.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/core/autocompleteplugin.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/core/autocompleteoptions.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/core/autocompletesource.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/core/autocompletecollection.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/core/autocompletecontext.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/core/autocompletestate.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/core/autocompletenavigator.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/core/autocompletepropgetters.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/core/autocompletesetters.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/core/autocompleteapi.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/core/index.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/createcancelablepromise.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/createcancelablepromiselist.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/createref.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/debounce.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/decycle.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/flatten.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/generateautocompleteid.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/getattributevaluebypath.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/getitemscount.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/invariant.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/isequal.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/noop.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/safelyrunonbrowser.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/useragents.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/version.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/warn.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/js/autocompleteclassnames.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/js/autocompleterenderer.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/js/highlighthitparams.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/js/autocompletecomponents.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/js/autocompletestate.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/js/autocompletesource.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/js/autocompletecollection.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/js/autocompleteplugin.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/js/autocompletepropgetters.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/js/autocompleterender.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/js/autocompletetranslations.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/js/autocompleteoptions.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/js/index.d.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/index.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/createconcurrentsafepromise.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getnextactiveitemid.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getnormalizedsources.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getpluginsubmitpromise.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getactiveitem.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getautocompleteelementid.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/isorcontainsnode.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/issamsung.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/maptoalgoliaresponse.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getnativeevent.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/index.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/types/autocompletestore.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/types/autocompletesubscribers.d.ts","../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/types/algoliainsightshit.d.ts","../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/createsearchinsightsapi.d.ts","../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/types/autocompleteinsightsapi.d.ts","../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/types/eventparams.d.ts","../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/types/insightsclient.d.ts","../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/types/index.d.ts","../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/createalgoliainsightsplugin.d.ts","../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/index.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/types/index.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/createautocomplete.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/getdefaultprops.d.ts","../../node_modules/@algolia/autocomplete-core/dist/esm/index.d.ts","../../packages/docsearch-core/dist/esm/index.d.ts","../../node_modules/@types/json-schema/index.d.ts","../../node_modules/@ai-sdk/provider/dist/index.d.ts","../../node_modules/zod/v4/core/standard-schema.d.cts","../../node_modules/zod/v4/core/util.d.cts","../../node_modules/zod/v4/core/versions.d.cts","../../node_modules/zod/v4/core/schemas.d.cts","../../node_modules/zod/v4/core/checks.d.cts","../../node_modules/zod/v4/core/errors.d.cts","../../node_modules/zod/v4/core/core.d.cts","../../node_modules/zod/v4/core/parse.d.cts","../../node_modules/zod/v4/core/regexes.d.cts","../../node_modules/zod/v4/locales/ar.d.cts","../../node_modules/zod/v4/locales/az.d.cts","../../node_modules/zod/v4/locales/be.d.cts","../../node_modules/zod/v4/locales/bg.d.cts","../../node_modules/zod/v4/locales/ca.d.cts","../../node_modules/zod/v4/locales/cs.d.cts","../../node_modules/zod/v4/locales/da.d.cts","../../node_modules/zod/v4/locales/de.d.cts","../../node_modules/zod/v4/locales/en.d.cts","../../node_modules/zod/v4/locales/eo.d.cts","../../node_modules/zod/v4/locales/es.d.cts","../../node_modules/zod/v4/locales/fa.d.cts","../../node_modules/zod/v4/locales/fi.d.cts","../../node_modules/zod/v4/locales/fr.d.cts","../../node_modules/zod/v4/locales/fr-ca.d.cts","../../node_modules/zod/v4/locales/he.d.cts","../../node_modules/zod/v4/locales/hu.d.cts","../../node_modules/zod/v4/locales/id.d.cts","../../node_modules/zod/v4/locales/is.d.cts","../../node_modules/zod/v4/locales/it.d.cts","../../node_modules/zod/v4/locales/ja.d.cts","../../node_modules/zod/v4/locales/ka.d.cts","../../node_modules/zod/v4/locales/kh.d.cts","../../node_modules/zod/v4/locales/km.d.cts","../../node_modules/zod/v4/locales/ko.d.cts","../../node_modules/zod/v4/locales/lt.d.cts","../../node_modules/zod/v4/locales/mk.d.cts","../../node_modules/zod/v4/locales/ms.d.cts","../../node_modules/zod/v4/locales/nl.d.cts","../../node_modules/zod/v4/locales/no.d.cts","../../node_modules/zod/v4/locales/ota.d.cts","../../node_modules/zod/v4/locales/ps.d.cts","../../node_modules/zod/v4/locales/pl.d.cts","../../node_modules/zod/v4/locales/pt.d.cts","../../node_modules/zod/v4/locales/ru.d.cts","../../node_modules/zod/v4/locales/sl.d.cts","../../node_modules/zod/v4/locales/sv.d.cts","../../node_modules/zod/v4/locales/ta.d.cts","../../node_modules/zod/v4/locales/th.d.cts","../../node_modules/zod/v4/locales/tr.d.cts","../../node_modules/zod/v4/locales/ua.d.cts","../../node_modules/zod/v4/locales/uk.d.cts","../../node_modules/zod/v4/locales/ur.d.cts","../../node_modules/zod/v4/locales/vi.d.cts","../../node_modules/zod/v4/locales/zh-cn.d.cts","../../node_modules/zod/v4/locales/zh-tw.d.cts","../../node_modules/zod/v4/locales/yo.d.cts","../../node_modules/zod/v4/locales/index.d.cts","../../node_modules/zod/v4/core/registries.d.cts","../../node_modules/zod/v4/core/doc.d.cts","../../node_modules/zod/v4/core/api.d.cts","../../node_modules/zod/v4/core/json-schema.d.cts","../../node_modules/zod/v4/core/to-json-schema.d.cts","../../node_modules/zod/v4/core/index.d.cts","../../node_modules/zod/v4/classic/errors.d.cts","../../node_modules/zod/v4/classic/parse.d.cts","../../node_modules/zod/v4/classic/schemas.d.cts","../../node_modules/zod/v4/classic/checks.d.cts","../../node_modules/zod/v4/classic/compat.d.cts","../../node_modules/zod/v4/classic/iso.d.cts","../../node_modules/zod/v4/classic/coerce.d.cts","../../node_modules/zod/v4/classic/external.d.cts","../../node_modules/zod/v4/classic/index.d.cts","../../node_modules/zod/v4/index.d.cts","../../node_modules/@standard-schema/spec/dist/index.d.cts","../../node_modules/zod/v3/helpers/typealiases.d.cts","../../node_modules/zod/v3/helpers/util.d.cts","../../node_modules/zod/v3/zoderror.d.cts","../../node_modules/zod/v3/locales/en.d.cts","../../node_modules/zod/v3/errors.d.cts","../../node_modules/zod/v3/helpers/parseutil.d.cts","../../node_modules/zod/v3/helpers/enumutil.d.cts","../../node_modules/zod/v3/helpers/errorutil.d.cts","../../node_modules/zod/v3/helpers/partialutil.d.cts","../../node_modules/zod/v3/standard-schema.d.cts","../../node_modules/zod/v3/types.d.cts","../../node_modules/zod/v3/external.d.cts","../../node_modules/zod/v3/index.d.cts","../../node_modules/eventsource-parser/dist/stream.d.cts","../../node_modules/@ai-sdk/provider-utils/dist/index.d.ts","../../node_modules/@ai-sdk/gateway/dist/index.d.ts","../../node_modules/@opentelemetry/api/build/src/baggage/internal/symbol.d.ts","../../node_modules/@opentelemetry/api/build/src/baggage/types.d.ts","../../node_modules/@opentelemetry/api/build/src/baggage/utils.d.ts","../../node_modules/@opentelemetry/api/build/src/common/exception.d.ts","../../node_modules/@opentelemetry/api/build/src/common/time.d.ts","../../node_modules/@opentelemetry/api/build/src/common/attributes.d.ts","../../node_modules/@opentelemetry/api/build/src/context/types.d.ts","../../node_modules/@opentelemetry/api/build/src/context/context.d.ts","../../node_modules/@opentelemetry/api/build/src/api/context.d.ts","../../node_modules/@opentelemetry/api/build/src/diag/types.d.ts","../../node_modules/@opentelemetry/api/build/src/diag/consolelogger.d.ts","../../node_modules/@opentelemetry/api/build/src/api/diag.d.ts","../../node_modules/@opentelemetry/api/build/src/metrics/observableresult.d.ts","../../node_modules/@opentelemetry/api/build/src/metrics/metric.d.ts","../../node_modules/@opentelemetry/api/build/src/metrics/meter.d.ts","../../node_modules/@opentelemetry/api/build/src/metrics/noopmeter.d.ts","../../node_modules/@opentelemetry/api/build/src/metrics/meterprovider.d.ts","../../node_modules/@opentelemetry/api/build/src/api/metrics.d.ts","../../node_modules/@opentelemetry/api/build/src/propagation/textmappropagator.d.ts","../../node_modules/@opentelemetry/api/build/src/baggage/context-helpers.d.ts","../../node_modules/@opentelemetry/api/build/src/api/propagation.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/attributes.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/trace_state.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/span_context.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/link.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/status.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/span.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/span_kind.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/spanoptions.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/tracer.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/tracer_options.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/proxytracer.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/tracer_provider.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/proxytracerprovider.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/samplingresult.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/sampler.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/trace_flags.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/internal/utils.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/spancontext-utils.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/invalid-span-constants.d.ts","../../node_modules/@opentelemetry/api/build/src/trace/context-utils.d.ts","../../node_modules/@opentelemetry/api/build/src/api/trace.d.ts","../../node_modules/@opentelemetry/api/build/src/context-api.d.ts","../../node_modules/@opentelemetry/api/build/src/diag-api.d.ts","../../node_modules/@opentelemetry/api/build/src/metrics-api.d.ts","../../node_modules/@opentelemetry/api/build/src/propagation-api.d.ts","../../node_modules/@opentelemetry/api/build/src/trace-api.d.ts","../../node_modules/@opentelemetry/api/build/src/index.d.ts","../../node_modules/ai/dist/index.d.ts","../../node_modules/@ai-sdk/react/dist/index.d.ts","../../packages/docsearch-react/dist/esm/index.d.ts","./src/docsearchversion.ts","../../node_modules/utility-types/dist/aliases-and-guards.d.ts","../../node_modules/utility-types/dist/mapped-types.d.ts","../../node_modules/utility-types/dist/utility-types.d.ts","../../node_modules/utility-types/dist/functional-helpers.d.ts","../../node_modules/utility-types/dist/index.d.ts","../../packages/docsearch-react/dist/esm/sidepanel.d.ts","../../node_modules/@algolia/client-common/dist/common.d.ts","../../node_modules/algoliasearch/dist/lite/browser.d.ts","./src/theme-search-algolia.d.ts","./lib/getdocsearchconfig.d.ts","../../node_modules/@docusaurus/types/src/i18n.d.ts","../../node_modules/acorn/dist/acorn.d.ts","../../node_modules/buffer/index.d.ts","../../node_modules/@types/estree/index.d.ts","../../node_modules/@types/eslint/use-at-your-own-risk.d.ts","../../node_modules/@types/eslint/index.d.ts","../../node_modules/@types/eslint-scope/index.d.ts","../../node_modules/schema-utils/declarations/validationerror.d.ts","../../node_modules/fast-uri/types/index.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/compile/codegen/code.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/compile/codegen/scope.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/compile/codegen/index.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/compile/rules.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/compile/util.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/compile/validate/subschema.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/compile/errors.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/compile/validate/index.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/compile/validate/datatype.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/applicator/additionalitems.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/applicator/items2020.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/applicator/contains.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/applicator/dependencies.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/applicator/propertynames.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/applicator/additionalproperties.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/applicator/not.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/applicator/anyof.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/applicator/oneof.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/applicator/if.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/applicator/index.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/validation/limitnumber.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/validation/multipleof.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/validation/pattern.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/validation/required.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/validation/uniqueitems.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/validation/const.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/validation/enum.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/validation/index.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/format/format.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedproperties.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/unevaluated/unevaluateditems.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/validation/dependentrequired.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/discriminator/types.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/discriminator/index.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/vocabularies/errors.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/types/json-schema.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/types/jtd-schema.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/runtime/validation_error.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/compile/ref_error.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/core.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/compile/resolve.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/compile/index.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/types/index.d.ts","../../node_modules/schema-utils/node_modules/ajv/dist/ajv.d.ts","../../node_modules/schema-utils/declarations/validate.d.ts","../../node_modules/schema-utils/declarations/index.d.ts","../../node_modules/tapable/tapable.d.ts","../../node_modules/webpack/types.d.ts","../../node_modules/webpack-merge/dist/types.d.ts","../../node_modules/commander/typings/index.d.ts","../../node_modules/joi/lib/index.d.ts","../../node_modules/react-helmet-async/index.d.ts","../../node_modules/@docusaurus/types/src/swizzle.d.ts","../../node_modules/@docusaurus/types/src/routing.d.ts","../../node_modules/@docusaurus/types/src/bundler.d.ts","../../node_modules/@docusaurus/types/src/plugin.d.ts","../../node_modules/@docusaurus/types/src/context.d.ts","../../node_modules/@docusaurus/types/src/reporting.d.ts","../../node_modules/@types/unist/index.d.ts","../../node_modules/@types/mdast/index.d.ts","../../node_modules/@types/estree-jsx/index.d.ts","../../node_modules/vfile-message/lib/index.d.ts","../../node_modules/vfile-message/index.d.ts","../../node_modules/vfile/lib/index.d.ts","../../node_modules/vfile/index.d.ts","../../node_modules/unified/lib/callable-instance.d.ts","../../node_modules/trough/lib/index.d.ts","../../node_modules/trough/index.d.ts","../../node_modules/unified/lib/index.d.ts","../../node_modules/unified/index.d.ts","../../node_modules/@mdx-js/mdx/node_modules/source-map/source-map.d.ts","../../node_modules/@types/hast/index.d.ts","../../node_modules/hast-util-to-estree/lib/handlers/comment.d.ts","../../node_modules/hast-util-to-estree/lib/handlers/element.d.ts","../../node_modules/micromark-util-types/index.d.ts","../../node_modules/mdast-util-from-markdown/lib/types.d.ts","../../node_modules/mdast-util-from-markdown/lib/index.d.ts","../../node_modules/mdast-util-from-markdown/index.d.ts","../../node_modules/mdast-util-to-markdown/lib/types.d.ts","../../node_modules/mdast-util-to-markdown/lib/index.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/blockquote.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/break.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/code.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/definition.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/emphasis.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/heading.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/html.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/image.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/image-reference.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/inline-code.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/link.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/link-reference.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/list.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/list-item.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/paragraph.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/root.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/strong.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/text.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/thematic-break.d.ts","../../node_modules/mdast-util-to-markdown/lib/handle/index.d.ts","../../node_modules/mdast-util-to-markdown/index.d.ts","../../node_modules/mdast-util-mdx-expression/lib/index.d.ts","../../node_modules/mdast-util-mdx-expression/index.d.ts","../../node_modules/hast-util-to-estree/lib/handlers/mdx-expression.d.ts","../../node_modules/mdast-util-mdx-jsx/lib/index.d.ts","../../node_modules/mdast-util-mdx-jsx/index.d.ts","../../node_modules/hast-util-to-estree/lib/handlers/mdx-jsx-element.d.ts","../../node_modules/mdast-util-mdxjs-esm/lib/index.d.ts","../../node_modules/mdast-util-mdxjs-esm/index.d.ts","../../node_modules/hast-util-to-estree/lib/handlers/mdxjs-esm.d.ts","../../node_modules/hast-util-to-estree/lib/handlers/root.d.ts","../../node_modules/hast-util-to-estree/lib/handlers/text.d.ts","../../node_modules/hast-util-to-estree/lib/handlers/index.d.ts","../../node_modules/hast-util-to-estree/lib/index.d.ts","../../node_modules/property-information/lib/util/info.d.ts","../../node_modules/property-information/lib/find.d.ts","../../node_modules/property-information/lib/hast-to-react.d.ts","../../node_modules/property-information/lib/normalize.d.ts","../../node_modules/property-information/index.d.ts","../../node_modules/hast-util-to-estree/lib/state.d.ts","../../node_modules/hast-util-to-estree/index.d.ts","../../node_modules/rehype-recma/lib/index.d.ts","../../node_modules/rehype-recma/index.d.ts","../../node_modules/mdast-util-to-hast/lib/state.d.ts","../../node_modules/mdast-util-to-hast/lib/footer.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/blockquote.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/break.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/code.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/delete.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/emphasis.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/footnote-reference.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/heading.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/html.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/image-reference.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/image.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/inline-code.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/link-reference.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/link.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/list-item.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/list.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/paragraph.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/root.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/strong.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/table.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/table-cell.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/table-row.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/text.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/thematic-break.d.ts","../../node_modules/mdast-util-to-hast/lib/handlers/index.d.ts","../../node_modules/mdast-util-to-hast/lib/index.d.ts","../../node_modules/mdast-util-to-hast/index.d.ts","../../node_modules/remark-rehype/lib/index.d.ts","../../node_modules/remark-rehype/index.d.ts","../../node_modules/@mdx-js/mdx/lib/core.d.ts","../../node_modules/@mdx-js/mdx/lib/node-types.d.ts","../../node_modules/@mdx-js/mdx/lib/compile.d.ts","../../node_modules/hast-util-to-jsx-runtime/lib/types.d.ts","../../node_modules/hast-util-to-jsx-runtime/lib/index.d.ts","../../node_modules/hast-util-to-jsx-runtime/index.d.ts","../../node_modules/@types/mdx/types.d.ts","../../node_modules/@mdx-js/mdx/lib/util/resolve-evaluate-options.d.ts","../../node_modules/@mdx-js/mdx/lib/evaluate.d.ts","../../node_modules/@mdx-js/mdx/lib/run.d.ts","../../node_modules/@mdx-js/mdx/index.d.ts","../../node_modules/@docusaurus/types/src/markdown.d.ts","../../node_modules/@docusaurus/types/src/config.d.ts","../../node_modules/@types/history/domutils.d.ts","../../node_modules/@types/history/createbrowserhistory.d.ts","../../node_modules/@types/history/createhashhistory.d.ts","../../node_modules/@types/history/creatememoryhistory.d.ts","../../node_modules/@types/history/locationutils.d.ts","../../node_modules/@types/history/pathutils.d.ts","../../node_modules/@types/history/index.d.ts","../../node_modules/@docusaurus/types/src/clientmodule.d.ts","../../node_modules/@docusaurus/types/src/utils.d.ts","../../node_modules/@docusaurus/types/src/index.d.ts","../../node_modules/@docusaurus/theme-translations/lib/index.d.ts","../../node_modules/eta/dist/types/file-handlers.d.ts","../../node_modules/eta/dist/types/compile.d.ts","../../node_modules/eta/dist/types/storage.d.ts","../../node_modules/eta/dist/types/config.d.ts","../../node_modules/eta/dist/types/compile-string.d.ts","../../node_modules/eta/dist/types/parse.d.ts","../../node_modules/eta/dist/types/render.d.ts","../../node_modules/eta/dist/types/containers.d.ts","../../node_modules/eta/dist/types/index.d.ts","../../node_modules/@types/node/ts5.7/compatibility/float16array.d.ts","../../node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../node_modules/@types/node/web-globals/crypto.d.ts","../../node_modules/@types/node/web-globals/domexception.d.ts","../../node_modules/@types/node/web-globals/events.d.ts","../../node_modules/undici-types/utility.d.ts","../../node_modules/undici-types/header.d.ts","../../node_modules/undici-types/readable.d.ts","../../node_modules/undici-types/fetch.d.ts","../../node_modules/undici-types/formdata.d.ts","../../node_modules/undici-types/connector.d.ts","../../node_modules/undici-types/client-stats.d.ts","../../node_modules/undici-types/client.d.ts","../../node_modules/undici-types/errors.d.ts","../../node_modules/undici-types/dispatcher.d.ts","../../node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/undici-types/global-origin.d.ts","../../node_modules/undici-types/pool-stats.d.ts","../../node_modules/undici-types/pool.d.ts","../../node_modules/undici-types/handlers.d.ts","../../node_modules/undici-types/balanced-pool.d.ts","../../node_modules/undici-types/h2c-client.d.ts","../../node_modules/undici-types/agent.d.ts","../../node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/undici-types/mock-call-history.d.ts","../../node_modules/undici-types/mock-agent.d.ts","../../node_modules/undici-types/mock-client.d.ts","../../node_modules/undici-types/mock-pool.d.ts","../../node_modules/undici-types/snapshot-agent.d.ts","../../node_modules/undici-types/mock-errors.d.ts","../../node_modules/undici-types/proxy-agent.d.ts","../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/undici-types/retry-handler.d.ts","../../node_modules/undici-types/retry-agent.d.ts","../../node_modules/undici-types/api.d.ts","../../node_modules/undici-types/cache-interceptor.d.ts","../../node_modules/undici-types/interceptors.d.ts","../../node_modules/undici-types/util.d.ts","../../node_modules/undici-types/cookies.d.ts","../../node_modules/undici-types/patch.d.ts","../../node_modules/undici-types/websocket.d.ts","../../node_modules/undici-types/eventsource.d.ts","../../node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/undici-types/content-type.d.ts","../../node_modules/undici-types/cache.d.ts","../../node_modules/undici-types/index.d.ts","../../node_modules/@types/node/web-globals/fetch.d.ts","../../node_modules/@types/node/web-globals/navigator.d.ts","../../node_modules/@types/node/web-globals/storage.d.ts","../../node_modules/@types/node/web-globals/streams.d.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.d.ts","../../node_modules/@types/node/inspector.generated.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/readline/promises.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/sea.d.ts","../../node_modules/@types/node/sqlite.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/test.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/ts5.7/index.d.ts","../../node_modules/@types/jsonfile/index.d.ts","../../node_modules/@types/jsonfile/utils.d.ts","../../node_modules/@types/fs-extra/index.d.ts","../../node_modules/@types/lodash/common/common.d.ts","../../node_modules/@types/lodash/common/array.d.ts","../../node_modules/@types/lodash/common/collection.d.ts","../../node_modules/@types/lodash/common/date.d.ts","../../node_modules/@types/lodash/common/function.d.ts","../../node_modules/@types/lodash/common/lang.d.ts","../../node_modules/@types/lodash/common/math.d.ts","../../node_modules/@types/lodash/common/number.d.ts","../../node_modules/@types/lodash/common/object.d.ts","../../node_modules/@types/lodash/common/seq.d.ts","../../node_modules/@types/lodash/common/string.d.ts","../../node_modules/@types/lodash/common/util.d.ts","../../node_modules/@types/lodash/index.d.ts","./src/templates/opensearch.ts","./src/utils/normalizeurl.ts","./src/utils/escaperegexp.ts","./src/utils/index.ts","./src/opensearch.ts","./src/validatethemeconfig.ts","./src/index.ts","../../node_modules/@types/react-router/index.d.ts","../../node_modules/@types/react-router-config/index.d.ts","../../node_modules/react-loadable/index.d.ts","../../node_modules/@types/react-router-dom/index.d.ts","../../node_modules/@types/react-dom/client.d.ts","../../node_modules/@docusaurus/module-type-aliases/src/index.d.ts","../../node_modules/@types/prismjs/index.d.ts","../../node_modules/prism-react-renderer/dist/index.d.ts","../../node_modules/@docusaurus/theme-common/lib/hooks/usecodewordwrap.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/codeblockutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/contexts/colormode.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/usethemeconfig.d.ts","../../node_modules/@docusaurus/theme-common/lib/components/themedcomponent/index.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/storageutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/usepluralform.d.ts","../../node_modules/@docusaurus/theme-common/lib/components/collapsible/index.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/themeclassnames.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/accessibilityutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/reactutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/metadatautils.d.ts","../../node_modules/@docusaurus/theme-common/lib/contexts/navbarsecondarymenu/content.d.ts","../../node_modules/@docusaurus/theme-common/lib/hooks/usewindowsize.d.ts","../../node_modules/@docusaurus/utils/lib/constants.d.ts","../../node_modules/@docusaurus/utils/lib/emitutils.d.ts","../../node_modules/@docusaurus/utils/lib/gitutils.d.ts","../../node_modules/@docusaurus/utils/lib/i18nutils.d.ts","../../node_modules/@docusaurus/utils/lib/jsutils.d.ts","../../node_modules/@docusaurus/utils/lib/urlutils.d.ts","../../node_modules/@docusaurus/utils/lib/tags.d.ts","../../node_modules/@docusaurus/utils/lib/slugger.d.ts","../../node_modules/@docusaurus/utils/lib/markdownutils.d.ts","../../node_modules/@docusaurus/utils/lib/markdownlinks.d.ts","../../node_modules/@docusaurus/utils/lib/pathutils.d.ts","../../node_modules/@docusaurus/utils/lib/hashutils.d.ts","../../node_modules/@nodelib/fs.stat/out/types/index.d.ts","../../node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts","../../node_modules/@nodelib/fs.stat/out/settings.d.ts","../../node_modules/@nodelib/fs.stat/out/providers/async.d.ts","../../node_modules/@nodelib/fs.stat/out/index.d.ts","../../node_modules/@nodelib/fs.scandir/out/types/index.d.ts","../../node_modules/@nodelib/fs.scandir/out/adapters/fs.d.ts","../../node_modules/@nodelib/fs.scandir/out/settings.d.ts","../../node_modules/@nodelib/fs.scandir/out/providers/async.d.ts","../../node_modules/@nodelib/fs.scandir/out/index.d.ts","../../node_modules/@nodelib/fs.walk/out/types/index.d.ts","../../node_modules/@nodelib/fs.walk/out/settings.d.ts","../../node_modules/@nodelib/fs.walk/out/readers/reader.d.ts","../../node_modules/@nodelib/fs.walk/out/readers/async.d.ts","../../node_modules/@nodelib/fs.walk/out/providers/async.d.ts","../../node_modules/@nodelib/fs.walk/out/index.d.ts","../../node_modules/fast-glob/out/types/index.d.ts","../../node_modules/fast-glob/out/settings.d.ts","../../node_modules/fast-glob/out/managers/tasks.d.ts","../../node_modules/fast-glob/out/index.d.ts","../../node_modules/globby/index.d.ts","../../node_modules/@docusaurus/utils/lib/globutils.d.ts","../../node_modules/@docusaurus/utils/lib/webpackutils.d.ts","../../node_modules/@docusaurus/utils/lib/moduleutils.d.ts","../../node_modules/@docusaurus/utils/lib/datafileutils.d.ts","../../node_modules/@docusaurus/utils/lib/contentvisibilityutils.d.ts","../../node_modules/@docusaurus/utils/lib/regexputils.d.ts","../../node_modules/@docusaurus/utils/lib/cliutils.d.ts","../../node_modules/@docusaurus/utils/lib/routeutils.d.ts","../../node_modules/@docusaurus/utils/lib/lastupdateutils.d.ts","../../node_modules/@docusaurus/utils/lib/index.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/tagsutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/hooks/usesearchpage.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/anchorutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/footerutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/regexputils.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/jsutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/hooks/useprismtheme.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/admonitionutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/historyutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/skiptocontentutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/translations/contentvisibilitytranslations.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/errorboundaryutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/index.d.ts","../../node_modules/@docusaurus/mdx-loader/lib/frontmatter.d.ts","../../node_modules/@docusaurus/mdx-loader/lib/remark/admonitions/index.d.ts","../../node_modules/@docusaurus/mdx-loader/lib/processor.d.ts","../../node_modules/@docusaurus/mdx-loader/lib/remark/resolvemarkdownlinks/index.d.ts","../../node_modules/@docusaurus/mdx-loader/lib/utils.d.ts","../../node_modules/@docusaurus/mdx-loader/lib/options.d.ts","../../node_modules/@docusaurus/mdx-loader/lib/loader.d.ts","../../node_modules/@docusaurus/mdx-loader/lib/remark/toc/types.d.ts","../../node_modules/@docusaurus/mdx-loader/lib/createmdxloader.d.ts","../../node_modules/@docusaurus/mdx-loader/lib/index.d.ts","../../node_modules/@docusaurus/plugin-content-docs/src/sidebars/types.ts","../../node_modules/@docusaurus/plugin-content-docs/src/plugin-content-docs.d.ts","../../node_modules/feed/lib/typings/index.d.ts","../../node_modules/feed/lib/feed.d.ts","../../node_modules/@docusaurus/plugin-content-blog/src/plugin-content-blog.d.ts","../../node_modules/@docusaurus/plugin-content-pages/src/plugin-content-pages.d.ts","../../node_modules/@mdx-js/react/lib/index.d.ts","../../node_modules/@mdx-js/react/index.d.ts","../../node_modules/@docusaurus/theme-common/lib/contexts/announcementbar.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/tabsutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/contexts/navbarmobilesidebar.d.ts","../../node_modules/@docusaurus/theme-common/lib/contexts/navbarsecondarymenu/display.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/usealternatepageutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/searchutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/titleformatterutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/uselocationchange.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/uselocalpathname.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/tocutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/scrollutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/routesutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/navbarutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/hooks/usetochighlight.d.ts","../../node_modules/@docusaurus/theme-common/lib/utils/intlutils.d.ts","../../node_modules/@docusaurus/theme-common/lib/hooks/usehideablenavbar.d.ts","../../node_modules/@docusaurus/theme-common/lib/hooks/usekeyboardnavigation.d.ts","../../node_modules/@docusaurus/theme-common/lib/hooks/uselockbodyscroll.d.ts","../../node_modules/@docusaurus/theme-common/lib/hooks/usebacktotopbutton.d.ts","../../node_modules/@docusaurus/theme-common/lib/translations/blogtranslations.d.ts","../../node_modules/@docusaurus/theme-common/lib/internal.d.ts","../../node_modules/@docusaurus/theme-common/lib/components/details/index.d.ts","../../node_modules/@docusaurus/theme-classic/src/theme-classic.d.ts","./src/types.d.ts","../../node_modules/@types/aria-query/index.d.ts","../../node_modules/@babel/types/lib/index.d.ts","../../node_modules/@types/babel__generator/index.d.ts","../../node_modules/@babel/parser/typings/babel-parser.d.ts","../../node_modules/@types/babel__template/index.d.ts","../../node_modules/@types/babel__traverse/index.d.ts","../../node_modules/@types/babel__core/index.d.ts","../../node_modules/@types/connect/index.d.ts","../../node_modules/@types/body-parser/index.d.ts","../../node_modules/@types/bonjour/index.d.ts","../../node_modules/@types/send/index.d.ts","../../node_modules/@types/qs/index.d.ts","../../node_modules/@types/range-parser/index.d.ts","../../node_modules/@types/express-serve-static-core/index.d.ts","../../node_modules/@types/connect-history-api-fallback/index.d.ts","../../node_modules/@types/ms/index.d.ts","../../node_modules/@types/debug/index.d.ts","../../node_modules/@types/http-errors/index.d.ts","../../node_modules/@types/mime/index.d.ts","../../node_modules/@types/serve-static/node_modules/@types/send/index.d.ts","../../node_modules/@types/serve-static/index.d.ts","../../node_modules/@types/express/node_modules/@types/express-serve-static-core/index.d.ts","../../node_modules/@types/express/index.d.ts","../../node_modules/@types/glob/node_modules/@types/minimatch/index.d.ts","../../node_modules/@types/glob/index.d.ts","../../node_modules/@types/gtag.js/index.d.ts","../../node_modules/@types/html-minifier-terser/index.d.ts","../../node_modules/@types/http-cache-semantics/index.d.ts","../../node_modules/@types/http-proxy/index.d.ts","../../node_modules/@types/istanbul-lib-coverage/index.d.ts","../../node_modules/@types/istanbul-lib-report/index.d.ts","../../node_modules/@types/istanbul-reports/index.d.ts","../../node_modules/@types/json5/index.d.ts","../../node_modules/@types/keyv/index.d.ts","../../node_modules/@types/mdx/index.d.ts","../../node_modules/@types/minimatch/index.d.ts","../../node_modules/@types/minimist/index.d.ts","../../node_modules/@types/node-forge/index.d.ts","../../node_modules/@types/normalize-package-data/index.d.ts","../../node_modules/@types/react-dom/index.d.ts","../../node_modules/@types/resolve/index.d.ts","../../node_modules/@types/responselike/index.d.ts","../../node_modules/@types/retry/index.d.ts","../../node_modules/@types/sax/index.d.ts","../../node_modules/@types/serve-index/node_modules/@types/express/index.d.ts","../../node_modules/@types/serve-index/index.d.ts","../../node_modules/@types/sinonjs__fake-timers/index.d.ts","../../node_modules/@types/sizzle/index.d.ts","../../node_modules/@types/sockjs/index.d.ts","../../node_modules/@types/ws/index.d.ts","../../node_modules/@types/yargs-parser/index.d.ts","../../node_modules/@types/yargs/index.d.ts","../../node_modules/@types/yauzl/index.d.ts","./src/getdocsearchconfig.ts"],"fileIdsList":[[287,487,541,558,559,620,733,769],[57,277,287,487,541,558,559,620,733,769],[57,287,288,473,474,487,541,558,559,611,612,613,620,733,769],[53,57,287,288,473,487,541,558,559,563,594,607,608,611,620,733,769],[57,287,487,541,558,559,620,733,769],[56,277,283,284,286,487,541,558,559,620,733,769],[287,487,541,558,559,620,692,733,769],[57,287,487,541,558,559,609,610,620,733,769],[57,278,287,288,348,473,487,541,558,559,611,620,733,769],[136,225,287,487,541,558,559,620,733,769],[136,209,210,223,224,287,487,541,558,559,620,733,769],[135,287,487,541,558,559,620,733,769],[209,223,225,275,287,487,541,558,559,620,733,769],[130,287,487,541,558,559,620,733,769],[130,131,132,287,487,541,558,559,620,733,769],[119,130,287,487,541,558,559,620,733,769],[78,120,121,129,287,487,541,558,559,620,733,769],[119,287,487,541,558,559,620,733,769],[108,287,487,541,558,559,620,733,769],[70,130,287,487,541,558,559,620,733,769],[80,130,287,487,541,558,559,620,733,769],[79,80,109,110,111,112,113,114,115,116,117,118,287,487,541,558,559,620,733,769],[59,108,287,487,541,558,559,620,733,769],[108,127,287,487,541,558,559,620,733,769],[127,287,487,541,558,559,620,733,769],[127,128,287,487,541,558,559,620,733,769],[122,123,287,487,541,558,559,620,733,769],[108,124,127,287,487,541,558,559,620,733,769],[122,124,125,126,287,487,541,558,559,620,733,769],[74,75,76,287,487,541,558,559,620,733,769],[70,77,287,487,541,558,559,620,733,769],[73,77,287,487,541,558,559,620,733,769],[60,66,67,68,70,73,74,77,287,487,541,558,559,620,733,769],[67,69,70,77,287,487,541,558,559,620,733,769],[69,70,77,287,487,541,558,559,620,733,769],[70,73,77,287,487,541,558,559,620,733,769],[71,73,77,287,487,541,558,559,620,733,769],[59,60,62,63,65,69,73,77,287,487,541,558,559,620,733,769],[71,72,77,287,487,541,558,559,620,733,769],[66,67,68,69,70,71,72,73,75,76,77,287,487,541,558,559,620,733,769],[60,63,64,81,82,83,84,85,86,87,88,89,90,91,92,93,94,107,287,487,541,558,559,620,733,769],[78,100,287,487,541,558,559,620,733,769],[96,97,287,487,541,558,559,620,733,769],[60,78,95,96,98,99,100,102,103,104,105,287,487,541,558,559,620,733,769],[68,78,106,287,487,541,558,559,620,733,769],[78,99,287,487,541,558,559,620,733,769],[78,96,98,99,287,487,541,558,559,620,733,769],[78,101,287,487,541,558,559,620,733,769],[95,96,97,98,99,100,101,102,103,104,105,106,287,487,541,558,559,620,733,769],[59,61,287,487,541,558,559,620,733,769],[62,63,64,287,487,541,558,559,620,733,769],[59,287,487,541,558,559,620,733,769],[58,287,487,541,558,559,620,733,769],[287,487,541,558,559,620,733,736,769],[287,345,487,541,558,559,620,698,733,769],[287,487,541,558,559,620,702,733,769],[56,287,487,541,558,559,620,695,698,699,700,701,733,769],[287,473,487,541,558,559,620,695,696,697,733,769],[287,487,541,558,559,620,679,693,694,698,733,769],[287,357,367,400,403,406,448,487,541,558,559,620,733,769],[287,357,367,400,403,406,448,473,487,541,558,559,620,733,769],[287,357,400,403,406,448,487,541,558,559,620,733,769],[287,487,541,558,559,620,679,695,698,733,769],[56,287,349,473,487,541,558,559,616,617,618,619,620,733,769],[56,283,287,473,487,541,558,559,620,679,702,706,707,733,769],[56,283,287,473,487,541,558,559,616,620,679,702,703,704,733,769],[57,283,287,487,541,558,559,620,679,704,733,769],[56,287,473,487,541,558,559,620,679,702,708,733,769],[56,283,287,473,487,541,558,559,620,621,622,679,692,702,704,707,708,710,731,732,733,769],[56,287,487,541,558,559,620,733,769],[287,487,541,558,559,620,622,733,769],[287,487,541,558,559,620,625,626,627,628,629,630,631,632,633,634,635,636,680,681,682,683,684,685,686,687,688,689,690,691,733,769],[287,487,541,558,559,620,623,624,625,634,688,692,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,733,769],[56,287,487,541,558,559,620,622,623,733,769],[287,487,541,558,559,620,626,733,769],[287,470,487,541,558,559,620,733,769],[287,487,541,558,559,616,620,733,769],[287,487,541,558,559,620,679,733,769],[283,287,487,541,558,559,620,622,624,625,733,769],[287,473,487,541,558,559,620,733,769],[287,345,487,541,558,559,620,733,769],[283,287,289,345,353,354,355,462,487,541,558,559,620,733,769],[287,289,351,352,353,463,487,541,558,559,620,733,769],[283,287,487,541,558,559,620,733,769],[287,289,350,351,352,353,354,355,462,463,471,472,487,541,558,559,620,733,769],[287,355,357,400,403,406,448,461,487,541,558,559,620,733,769],[287,289,345,346,347,348,349,350,351,352,354,463,487,541,558,559,620,733,769],[287,353,487,541,558,559,567,620,733,769],[287,487,541,558,559,620,646,733,769],[287,487,541,558,559,620,669,733,769],[287,487,541,558,559,620,637,638,639,640,641,642,643,644,645,646,647,648,670,671,672,673,674,675,676,677,678,733,769],[287,473,487,541,558,559,620,644,733,769],[287,451,452,453,456,458,459,460,487,541,558,559,620,733,769],[287,362,451,487,541,558,559,620,733,769],[287,357,358,367,368,400,403,406,420,448,450,487,541,558,559,620,733,769],[287,362,457,458,487,541,558,559,620,733,769],[287,457,458,487,541,558,559,620,733,769],[287,453,456,457,487,541,558,559,620,733,769],[287,487,541,558,559,620,709,733,769],[56,287,457,487,541,558,559,620,733,769],[287,487,541,558,559,620,653,654,733,769],[287,487,541,558,559,620,654,655,656,657,733,769],[287,487,541,558,559,591,620,654,656,733,769],[287,487,541,558,559,620,653,655,733,769],[287,487,541,553,558,559,591,620,733,769],[287,487,541,553,558,559,591,620,649,733,769],[287,487,541,558,559,620,649,650,651,652,733,769],[287,487,541,558,559,620,649,651,733,769],[287,487,541,558,559,620,650,733,769],[287,487,541,558,559,573,591,620,658,659,660,663,733,769],[287,487,541,558,559,620,659,660,662,733,769],[287,487,541,552,558,559,591,620,658,659,660,661,733,769],[287,487,541,558,559,620,660,733,769],[287,487,541,558,559,620,658,659,733,769],[287,487,541,558,559,591,620,658,733,769],[233,287,487,541,558,559,620,733,769],[236,287,487,541,558,559,620,733,769],[241,243,287,487,541,558,559,620,733,769],[229,233,245,246,287,487,541,558,559,620,733,769],[256,259,265,267,287,487,541,558,559,620,733,769],[228,233,287,487,541,558,559,620,733,769],[227,287,487,541,558,559,620,733,769],[228,287,487,541,558,559,620,733,769],[235,287,487,541,558,559,620,733,769],[238,287,487,541,558,559,620,733,769],[228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,268,269,270,271,272,273,287,487,541,558,559,620,733,769],[244,287,487,541,558,559,620,733,769],[240,287,487,541,558,559,620,733,769],[241,287,487,541,558,559,620,733,769],[232,233,239,287,487,541,558,559,620,733,769],[240,241,287,487,541,558,559,620,733,769],[247,287,487,541,558,559,620,733,769],[268,287,487,541,558,559,620,733,769],[232,287,487,541,558,559,620,733,769],[233,250,253,287,487,541,558,559,620,733,769],[249,287,487,541,558,559,620,733,769],[250,287,487,541,558,559,620,733,769],[248,250,287,487,541,558,559,620,733,769],[233,253,255,256,257,287,487,541,558,559,620,733,769],[256,257,259,287,487,541,558,559,620,733,769],[233,248,251,254,261,287,487,541,558,559,620,733,769],[248,249,287,487,541,558,559,620,733,769],[230,231,248,250,251,252,287,487,541,558,559,620,733,769],[250,253,287,487,541,558,559,620,733,769],[231,248,251,254,287,487,541,558,559,620,733,769],[233,253,255,287,487,541,558,559,620,733,769],[256,257,287,487,541,558,559,620,733,769],[287,487,541,558,559,620,733,736,737,738,739,740,769],[287,487,541,558,559,620,733,736,738,769],[287,487,541,555,558,559,591,620,733,742,769],[287,487,541,547,558,559,591,620,733,769],[287,487,541,558,559,584,591,620,733,748,769],[287,487,541,555,558,559,591,620,733,769],[287,487,541,558,559,620,733,750,769],[287,292,294,358,487,541,558,559,620,733,769],[135,287,292,293,358,487,541,558,559,620,733,769],[287,294,487,541,558,559,620,733,769],[287,292,358,487,541,558,559,620,733,769],[287,487,541,552,555,558,559,591,620,733,745,746,747,769],[287,487,541,558,559,620,733,743,746,748,755,756,769],[287,487,541,553,558,559,591,592,593,620,733,769],[287,487,541,552,553,558,559,591,620,733,758,769],[287,356,487,541,558,559,620,733,769],[287,464,470,487,541,558,559,620,733,769],[287,465,466,467,468,469,487,541,558,559,620,733,769],[287,487,541,552,555,557,558,559,561,573,584,591,620,733,769],[287,487,541,558,559,620,733,764,769],[287,487,541,558,559,620,733,765,769],[287,487,541,553,558,559,584,591,620,733,769],[287,487,541,552,558,559,591,620,733,769],[287,487,541,558,559,595,597,598,599,600,601,602,603,604,605,606,607,620,733,769],[287,487,541,558,559,595,596,598,599,600,601,602,603,604,605,606,607,620,733,769],[287,487,541,558,559,596,597,598,599,600,601,602,603,604,605,606,607,620,733,769],[287,487,541,558,559,595,596,597,599,600,601,602,603,604,605,606,607,620,733,769],[287,487,541,558,559,595,596,597,598,600,601,602,603,604,605,606,607,620,733,769],[287,487,541,558,559,595,596,597,598,599,601,602,603,604,605,606,607,620,733,769],[287,487,541,558,559,595,596,597,598,599,600,602,603,604,605,606,607,620,733,769],[287,487,541,558,559,595,596,597,598,599,600,601,603,604,605,606,607,620,733,769],[287,487,541,558,559,595,596,597,598,599,600,601,602,604,605,606,607,620,733,769],[287,487,541,558,559,595,596,597,598,599,600,601,602,603,605,606,607,620,733,769],[287,487,541,558,559,595,596,597,598,599,600,601,602,603,604,606,607,620,733,769],[287,487,541,558,559,595,596,597,598,599,600,601,602,603,604,605,607,620,733,769],[287,487,541,558,559,595,596,597,598,599,600,601,602,603,604,605,606,620,733,769],[287,457,487,541,558,559,620,733,769],[287,487,541,558,559,591,620,733,769],[287,487,538,539,541,558,559,620,733,769],[287,487,540,541,558,559,620,733,769],[287,541,558,559,620,733,769],[287,487,541,546,558,559,576,620,733,769],[287,487,541,542,547,552,558,559,561,573,584,620,733,769],[287,487,541,542,543,552,558,559,561,620,733,769],[287,487,541,544,558,559,585,620,733,769],[287,487,541,545,546,553,558,559,562,620,733,769],[287,487,541,546,558,559,573,581,620,733,769],[287,487,541,547,549,552,558,559,561,620,733,769],[287,487,540,541,548,558,559,620,733,769],[287,487,541,549,550,558,559,620,733,769],[287,487,541,551,552,558,559,620,733,769],[287,487,540,541,552,558,559,620,733,769],[287,487,541,552,553,554,558,559,573,584,620,733,769],[287,487,541,552,553,554,558,559,568,573,576,620,733,769],[287,487,533,541,549,552,555,558,559,561,573,584,620,733,769],[287,487,541,552,553,555,556,558,559,561,573,581,584,620,733,769],[287,487,541,555,557,558,559,573,581,584,620,733,769],[287,487,541,552,558,559,620,733,769],[287,487,541,558,559,560,584,620,733,769],[287,487,541,549,552,558,559,561,573,620,733,769],[287,487,541,558,559,562,620,733,769],[287,487,541,558,559,563,620,733,769],[287,487,540,541,558,559,564,620,733,769],[287,487,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,620,733,769],[287,487,541,558,559,566,620,733,769],[287,487,541,558,559,567,620,733,769],[287,487,541,552,558,559,568,569,620,733,769],[287,487,541,558,559,568,570,585,587,620,733,769],[287,487,541,553,558,559,620,733,769],[287,487,541,552,558,559,573,574,576,620,733,769],[287,487,541,558,559,575,576,620,733,769],[287,487,541,558,559,573,574,620,733,769],[287,487,541,558,559,576,620,733,769],[287,487,541,558,559,577,620,733,769],[287,487,538,541,558,559,573,578,620,733,769],[287,487,541,552,558,559,579,580,620,733,769],[287,487,541,558,559,579,580,620,733,769],[287,487,541,546,558,559,561,573,581,620,733,769],[287,487,541,558,559,582,620,733,769],[287,484,485,486,487,488,489,490,491,492,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,620,733,769],[287,487,541,558,559,561,583,620,733,769],[287,487,541,555,558,559,567,584,620,733,769],[287,487,541,546,558,559,585,620,733,769],[287,487,541,558,559,573,586,620,733,769],[287,487,541,558,559,560,587,620,733,769],[287,487,541,558,559,588,620,733,769],[287,487,541,546,558,559,620,733,769],[287,487,533,541,558,559,620,733,769],[287,487,541,558,559,589,620,733,769],[287,487,533,541,552,554,558,559,564,573,576,584,586,587,589,620,733,769],[287,487,541,558,559,573,590,620,733,769],[56,287,470,487,541,558,559,615,620,733,769],[56,287,470,487,541,558,559,620,733,769],[54,55,287,487,541,558,559,620,733,769],[287,487,541,555,558,559,573,591,620,733,769],[287,487,541,558,559,573,591,620,733,769],[287,487,541,553,558,559,573,591,620,733,769],[287,487,541,553,558,559,620,733,769,779],[287,487,541,558,559,620,733,743,748,755,769],[287,487,541,555,558,559,591,620,733,752,754,769],[287,487,541,553,558,559,573,591,620,733,753,769],[287,487,541,552,555,557,558,559,561,573,581,584,590,591,620,733,769],[287,487,541,558,559,620,733,769,785],[287,487,541,552,558,559,573,591,620,733,769],[136,209,223,225,226,274,287,487,541,555,558,559,620,733,769],[285,287,487,541,558,559,620,733,769],[287,478,487,541,558,559,620,733,769],[287,475,478,487,541,558,559,620,733,769],[287,476,477,487,541,558,559,620,733,769],[287,476,478,487,541,558,559,620,733,769],[287,475,476,478,479,480,481,482,487,541,558,559,620,733,769],[287,475,476,478,487,541,558,559,620,733,769],[287,487,541,558,559,591,620,665,666,667,733,769],[287,487,541,558,559,620,665,666,733,769],[287,487,541,558,559,620,665,733,769],[287,487,541,558,559,591,620,664,733,769],[287,487,541,558,559,620,705,733,769],[287,487,541,558,559,620,668,733,769],[287,410,411,417,487,541,558,559,620,733,769],[287,358,369,400,403,406,418,448,487,541,558,559,620,733,769],[287,370,371,401,404,407,408,409,487,541,558,559,620,733,769],[287,358,400,418,487,541,558,559,620,733,769],[287,358,403,418,487,541,558,559,620,733,769],[287,406,418,487,541,558,559,620,733,769],[287,292,358,369,400,403,406,418,448,487,541,558,559,620,733,769],[287,292,358,369,400,403,406,416,448,487,541,558,559,620,733,769],[287,454,455,487,541,558,559,620,733,769],[287,369,400,403,406,448,454,456,487,541,558,559,620,733,769],[287,372,373,374,375,487,541,558,559,620,733,769],[287,357,372,373,375,400,403,406,448,487,541,558,559,620,733,769],[287,357,372,375,400,403,406,448,487,541,558,559,620,733,769],[287,357,358,369,399,400,403,406,448,487,541,558,559,620,733,769],[287,375,398,403,487,541,558,559,620,733,769],[287,356,357,358,369,375,398,400,402,403,406,448,487,541,558,559,620,733,769],[287,357,358,369,400,403,405,406,448,487,541,558,559,620,733,769],[287,375,398,403,406,487,541,558,559,620,733,769],[287,357,369,400,403,406,421,422,446,447,448,487,541,558,559,620,733,769],[287,369,400,403,406,421,448,487,541,558,559,620,733,769],[287,357,369,400,403,406,421,448,487,541,558,559,620,733,769],[287,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,487,541,558,559,620,733,769],[287,357,362,369,400,403,406,422,448,487,541,558,559,620,733,769],[287,376,377,397,487,541,558,559,620,733,769],[287,357,398,400,403,406,448,487,541,558,559,620,733,769],[287,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,487,541,558,559,620,733,769],[287,356,357,400,403,406,448,487,541,558,559,620,733,769],[56,287,487,541,558,559,620,621,733,769],[287,413,414,415,487,541,558,559,620,733,769],[287,412,416,487,541,558,559,620,733,769],[287,416,487,541,558,559,620,733,769],[287,418,419,487,541,558,559,620,733,769],[287,292,358,369,400,403,406,420,448,487,541,558,559,620,733,769],[287,448,449,487,541,558,559,620,733,769],[287,357,362,367,369,400,403,406,448,487,541,558,559,620,733,769],[287,342,487,541,558,559,620,733,769],[135,287,296,341,487,541,558,559,620,733,769],[135,287,342,487,541,558,559,620,733,769],[287,300,301,305,332,333,335,336,337,339,340,487,541,558,559,620,733,769],[287,298,299,487,541,558,559,620,733,769],[287,298,487,541,558,559,620,733,769],[287,300,340,487,541,558,559,620,733,769],[287,300,301,337,338,340,487,541,558,559,620,733,769],[287,340,487,541,558,559,620,733,769],[287,297,340,341,487,541,558,559,620,733,769],[287,300,301,339,340,487,541,558,559,620,733,769],[287,300,301,303,304,339,340,487,541,558,559,620,733,769],[287,300,301,302,339,340,487,541,558,559,620,733,769],[287,300,301,305,332,333,334,335,336,339,340,487,541,558,559,620,733,769],[287,297,300,301,305,337,339,487,541,558,559,620,733,769],[287,305,340,487,541,558,559,620,733,769],[287,307,308,309,310,311,312,313,314,315,316,340,487,541,558,559,620,733,769],[287,330,340,487,541,558,559,620,733,769],[287,306,317,325,326,327,328,329,331,487,541,558,559,620,733,769],[287,310,340,487,541,558,559,620,733,769],[287,318,319,320,321,322,323,324,340,487,541,558,559,620,733,769],[287,364,487,541,558,559,620,733,769],[287,487,499,502,505,506,541,558,559,584,620,733,769],[287,487,502,541,558,559,573,584,620,733,769],[287,487,502,506,541,558,559,584,620,733,769],[287,487,541,558,559,573,620,733,769],[287,487,496,541,558,559,620,733,769],[287,487,500,541,558,559,620,733,769],[287,487,498,499,502,541,558,559,584,620,733,769],[287,487,541,558,559,561,581,620,733,769],[287,487,496,541,558,559,591,620,733,769],[287,487,498,502,541,558,559,561,584,620,733,769],[287,487,493,494,495,497,501,541,552,558,559,573,584,620,733,769],[287,487,502,510,518,541,558,559,620,733,769],[287,487,494,500,541,558,559,620,733,769],[287,487,502,527,528,541,558,559,620,733,769],[287,487,494,497,502,541,558,559,576,584,591,620,733,769],[287,487,502,541,558,559,620,733,769],[287,487,498,502,541,558,559,584,620,733,769],[287,487,493,541,558,559,620,733,769],[287,487,496,497,498,500,501,502,503,504,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,528,529,530,531,532,541,558,559,620,733,769],[287,487,502,520,523,541,549,558,559,620,733,769],[287,487,502,510,511,512,541,558,559,620,733,769],[287,487,500,502,511,513,541,558,559,620,733,769],[287,487,501,541,558,559,620,733,769],[287,487,494,496,502,541,558,559,620,733,769],[287,487,502,506,511,513,541,558,559,620,733,769],[287,487,506,541,558,559,620,733,769],[287,487,500,502,505,541,558,559,584,620,733,769],[287,487,494,498,502,510,541,558,559,620,733,769],[287,487,502,520,541,558,559,620,733,769],[287,487,513,541,558,559,620,733,769],[287,487,496,502,527,541,558,559,576,589,591,620,733,769],[287,362,366,487,541,558,559,620,733,769],[287,356,362,363,365,367,487,541,558,559,620,733,769],[279,280,281,282,287,487,541,558,559,620,733,769],[279,287,487,541,558,559,620,733,769],[280,287,487,541,558,559,620,733,769],[287,359,487,541,558,559,620,733,769],[287,360,361,487,541,558,559,620,733,769],[287,356,360,362,487,541,558,559,620,733,769],[135,287,290,292,295,296,343,344,358,487,541,555,557,558,559,561,581,584,587,620,733,769],[213,214,287,487,541,558,559,620,733,769],[211,212,213,215,216,221,287,487,541,558,559,620,733,769],[212,213,287,487,541,558,559,620,733,769],[221,287,487,541,558,559,620,733,769],[222,287,487,541,558,559,620,733,769],[213,287,487,541,558,559,620,733,769],[211,212,213,216,217,218,219,220,287,487,541,558,559,620,733,769],[211,212,223,287,487,541,558,559,620,733,769],[199,287,487,541,558,559,620,733,769],[199,202,287,487,541,558,559,620,733,769],[193,199,200,201,202,203,204,205,206,287,487,541,558,559,620,733,769],[207,287,487,541,558,559,620,733,769],[199,200,287,487,541,558,559,620,733,769],[199,201,287,487,541,558,559,620,733,769],[138,140,141,142,143,287,487,541,558,559,620,733,769],[138,140,142,143,287,487,541,558,559,620,733,769],[138,140,142,287,487,541,558,559,620,733,769],[137,138,140,141,143,287,487,541,558,559,620,733,769],[138,139,140,141,142,143,144,145,193,194,195,196,197,198,287,487,541,558,559,620,733,769],[140,143,287,487,541,558,559,620,733,769],[137,138,139,141,142,143,287,487,541,558,559,620,733,769],[140,194,197,287,487,541,558,559,620,733,769],[140,141,142,143,287,487,541,558,559,620,733,769],[208,287,487,541,558,559,620,733,769],[142,287,487,541,558,559,620,733,769],[146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,287,487,541,558,559,620,733,769],[56,61,133,134,275,276,287,487,541,558,559,620,733,769],[56,134,287,487,541,558,559,620,733,769]],"fileInfos":[{"version":"e41c290ef7dd7dab3493e6cbe5909e0148edf4a8dad0271be08edec368a0f7b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"4fd3f3422b2d2a3dfd5cdd0f387b3a8ec45f006c6ea896a4cb41264c2100bb2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"62bb211266ee48b2d0edf0d8d1b191f0c24fc379a82bd4c1692a082c540bc6b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"f1e2a172204962276504466a6393426d2ca9c54894b1ad0a6c9dad867a65f876","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"1060db6730586d109b15f04d9e4ca2d9f9e0621f896e9bab68b6265f921d4725","impliedFormat":1},{"version":"170d4db14678c68178ee8a3d5a990d5afb759ecb6ec44dbd885c50f6da6204f6","affectsGlobalScope":true,"impliedFormat":1},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"0ff1b165090b491f5e1407ae680b9a0bc3806dc56827ec85f93c57390491e732","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"d98e1d00e6c79d46c66ed20ff97bc08daa10ec10eee3f349aaf89685e2731e11","impliedFormat":1},{"version":"8a5f7a6fc84a3152fd5c820e54483d55d98c628ada9b59ff749b54975d0b7827","impliedFormat":1},{"version":"3dbb82e6d1939fd00d094294131318197172ddcf73ba7f522566e53ef48cac1a","impliedFormat":1},{"version":"5862be1871250c62cc4dc41646d36268c6149ed7d0fab68ba293b7e0e281359e","impliedFormat":1},{"version":"23769d87a06b881cf70c7509f60df4a3d63b4d489053da375603312ee3a0fbf5","impliedFormat":1},{"version":"2ca4540aabce6800f2217b6e2a282eb0a3bfebfe53561e58c9b9693d16bf1429","impliedFormat":1},{"version":"0ca29fde337113b172465f521f068014dd251fb0c9f02ffdd30a0732f4431ab1","impliedFormat":1},{"version":"c0a55e1da70b67be002877b3847b0b50b79b5e21fd440aec385ab68240d6a5c6","impliedFormat":1},{"version":"c3c441d8456d1bc31fe0bb10e320bfea6817c72a970cd9e40b8e8fcda10cbd51","impliedFormat":1},{"version":"130597be9ee0b264de06d5dae8c771bcfb9e81c9eb4134eb1d8016951e69c870","impliedFormat":1},{"version":"f306facbcd46afbdfadad41794a42d1a09eab13c0810dee92a28b9886ed8758e","impliedFormat":1},{"version":"b512101c6b755ff7525fc9269abaa47e0d0df4d261e786c68edd70f6dc6c9519","impliedFormat":1},{"version":"f4d4fc90a9674151603275b23ba709572be46bb0a9d192162a8e096e00e9a014","impliedFormat":1},{"version":"2983b451c80bbabe54f042b9d6f34547d098e40e00b6865f9cb297cc2f058849","impliedFormat":1},{"version":"98874d4bc3e2af71a70696e4938d2c0b947bf3d8315e0ef23db184433c9934f3","impliedFormat":1},{"version":"6bbeb959bc6c6442d90ae14b19b903ae193c5481c9d83b4e743539d6a816675c","impliedFormat":1},{"version":"d769c515846066942e5a8b0218686fb095a1750f602dfdef4a417042d1a35d58","impliedFormat":1},{"version":"4a16f11f66dcda4630d24ab7a1a015e5e9dc88de71905f40a2d53b1ff2c9b72f","impliedFormat":1},{"version":"c83df839216d7e3ef970934fcc331151b81abf2647cf5e6a3ad9642bad74d4f0","impliedFormat":1},{"version":"294bd17c185ad968753804a101ccc603844b59f30a795895313d200555e5debd","impliedFormat":1},{"version":"20e76a9367ae710ca103ff1f3cb951f2628c66c18ef4a7c48bc46eca7ff6b086","impliedFormat":1},{"version":"403f527dad17f9eded7043230a1a5a5ccfdf11fe928f9f3f5b1369f4ce882f60","impliedFormat":1},{"version":"a362046cc706eb5e9a3565ed5f87fd3cc7645daa2936eb3ce04587b1a2ac300a","impliedFormat":1},{"version":"abeaa9cbff1c48b5cbdf78b8ed5e33610febb7ccc16bc38c9e2a1a16fdac1971","impliedFormat":1},{"version":"aaa136ac0f40f4f0a6fc7d14a90dc900126ef9ffcc496d4518247be5d7d78360","impliedFormat":1},{"version":"bc7b0556d2f2f9f165b6da77ef8a75f138331efe892d422d5156a450f39d3f41","impliedFormat":1},{"version":"3874da82aeb3439bb276c5f3fe20be2a9894b49126377fcb66b3bd0802e1ecec","impliedFormat":1},{"version":"40b21c32d6093f70ddb6749d8d99327de738bfa8eaeb2a5057b8fc2740551de0","impliedFormat":1},{"version":"3a623ccdbdb3e9b5733436469c4790c2a20f9d877127f3a065b6023c5dea0ffb","impliedFormat":1},{"version":"4132c088cd466d5895e66a689733121acacf10452d801417938beceb100c975a","impliedFormat":1},{"version":"6b09a6d9b795845c16a5bef92160442e61320ca55ceef9f852409ae27e1cf49a","impliedFormat":1},{"version":"c6debb6cef57d1d3020160759e3ff94df73ad12cfb63d2e95164f67510b130be","impliedFormat":1},{"version":"311f919487e8c40f67cba3784a9af8c2adfb79eb01bd8bc821cc07a565c0b148","impliedFormat":1},{"version":"2f0ad5ea2e7e530ff91ccc2414f67f843a68beb38fb21b020e0a1725df29c7c0","impliedFormat":1},{"version":"529cf338bc74beb95a0778f2f17178ad78409ef6523840f9ede2079de3ecdc2b","impliedFormat":1},{"version":"5f37c6349a600730f3376e4bc4d4f16350f53975516f52276c313f3aa32421a9","impliedFormat":1},{"version":"3f81a9cdd412c1048d9c25535b9df0b463997d6cd88df0a0a91d4f42efd7af72","impliedFormat":1},{"version":"6211b2ad05f47d231a3e18235225d7894002dba541500dd1021033e919e14e84","impliedFormat":1},{"version":"baee18dea2b873c4898fe1e8c0f9a79ec5f635775013953f79daa1fb121db770","impliedFormat":1},{"version":"90000ff809298808b6409196ecaa5bbaa8768a576e2c63da49546c7d39153756","impliedFormat":1},{"version":"bba5b5dcf3abdd06a0cf893d3ce6ea00e89cfcd7fe799d933f675887a2c7b809","impliedFormat":1},{"version":"8abb5a1a747b3fafb0513c5f595ae41f7608203ec85c289af9a8499bee0cdd0d","impliedFormat":1},{"version":"b162314103b89e05cab5f0c65c1c6cc88cdf38b4618db69ff0736667e3e19a85","impliedFormat":1},{"version":"a92ac8af7861b950098ceb4d3b9b63656f012f5a96738af5ea0255c536083108","impliedFormat":1},{"version":"abe90b39bdb2f076232dfaeb9064eb659aaab4bd0f5f9c0712f4eadc1ddc312c","impliedFormat":1},{"version":"dd8df82fff2c1bedd09155629867c336d235f65e9f6c235aad38ec53d25dac30","impliedFormat":1},{"version":"f216a024fb59c9a9864deaa618eb49b19482f699de5f1ac2aa60435fdba30074","impliedFormat":1},{"version":"172395ed248e629a2e4b7426b3d27145a8bfc72c2324990385d72f019fe82150","impliedFormat":1},{"version":"e466cd2ac6e5591231b5d7f1a46372dd5acc7f756a9010e4312d54ee7af13589","impliedFormat":1},{"version":"5be7e85256dbf685d4cc2a6c5a68b60b5209f794768f8d15d2e8dc8f7b4366b6","impliedFormat":1},{"version":"563efdc90627de30c505901cdb1ac55012419486fb7ac3c351eeddf80cd7cd16","impliedFormat":1},{"version":"09887fa64ef252278983c7215aafde9a83aace65e129b5ca98fe1e1cb1427a4e","impliedFormat":1},{"version":"98bab473d4dac9cc8661d27766f3b434448502525c39b87d765ededea19b0b54","impliedFormat":1},{"version":"46c51930e69ccd9c3a069e6afe22ad8f057e4052ad9dbcea8554a13e25f3a8f0","impliedFormat":1},{"version":"adf0e839d9007c13092992a4f05f0df3a55e6cb3d6ad8001e75b1942189ea631","impliedFormat":1},{"version":"53b48efb03c058deb8fff1231547afac2cab5eac75512bd2b88029258520044e","impliedFormat":1},{"version":"c7008e25445194a33bae86ea59eb0697723ab026b3f752e4dae069b3308fe41d","impliedFormat":1},{"version":"4cbc005058899e5feed65b3d2d6957b4e909bc6ffec2a8f3918e023d285affdf","impliedFormat":1},{"version":"74a97040d1ee1aee275b556af4220b58cdf991bd2d51f762951a4226964632b9","impliedFormat":1},{"version":"b911a7c2e86018036e762b1382210cb667b2d7ae89051a6037571c1d9911462a","impliedFormat":1},{"version":"b60a4996f5cedf563a2612021acaf291ca1a7fbeb06acf549d0f533ef62bc0dd","impliedFormat":1},{"version":"568816f59f03f96ecf1e978b42075061c008b149f995aaa60e968e7732dd6405","impliedFormat":1},{"version":"776fc60a39a707fab820ade179a919f182704e6f39050deaf2e36d53f0e97179","impliedFormat":1},{"version":"39b7522fdc2159d684b0e23b5b1b2ad6b8eb9a6cce1226bda21c2c29bebd2515","impliedFormat":1},{"version":"cfc3340169107891b727617c2f3ed8ec456b57f5a13cff6a940933e302d9b781","impliedFormat":1},{"version":"ed079a2adbd67d772726ac68a7a73e62d1bfd62bcb34cfc905ec4af3993afea3","impliedFormat":1},{"version":"5157cf1fa372cdc6576a229b269ca05e299df0f92139c99885cd8cec87862758","impliedFormat":1},{"version":"36e7b8c4d43415dd1dd2b350fdd47ba36fa971a533cb6fd436e6c8235d0770fc","impliedFormat":1},{"version":"d20e713daec02605cb5f19f682de7c5e81107d71cf9ca5a86384e1f22dbbb42c","impliedFormat":1},{"version":"74135589d8b3f5f738353e2f49b726eb32f6837ec4d4adb4b6dbf881d5c2448e","impliedFormat":1},{"version":"86a7d51d8add5d573efa016388913c1a98d159100794f925a41da45c83f1f2c7","impliedFormat":1},{"version":"694940bbed3e6128b2117c87f0579fac2aab8069c86a875cf046719ce1843eb5","impliedFormat":1},{"version":"9920945a21dca849596b03a57c94627d34e47728374ebabb1881d0780daeae98","impliedFormat":1},{"version":"ea7fe47073f4d3f850f20df8b68ccafe1094cf69889105f7473f6aac71c6bd28","impliedFormat":1},{"version":"436e26b5eb594a43624302863e715d04997bdcc672ba69cf201be7a8fba1be48","impliedFormat":1},{"version":"e80b73b8cdd9ee251a5e001487d4b569193683fd3c490ebf57a031ac52f332a0","impliedFormat":1},{"version":"6e018cd1a6f4431a2632a01410f898b52ecde5500da692087e644233317b3e80","impliedFormat":99},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"3e8b97f70a096dd3ce1757d460810e58e4a7de0d3d0ddfe430d02dc27295b3f4","impliedFormat":1},{"version":"309ebd217636d68cf8784cbc3272c16fb94fb8e969e18b6fe88c35200340aef1","impliedFormat":1},{"version":"f987c74a4b4baf361afbf22a16d230ee490d662f9aa2066853bb7ebbb8611355","impliedFormat":1},{"version":"1ff91526fcdd634148c655ef86e912a273ce6a0239e2505701561f086678262b","impliedFormat":1},{"version":"bd93f6fc4da70275db4def32903eed2be03547a41857142df63ddfebb9a67bdf","impliedFormat":1},{"version":"8d67b13da77316a8a2fabc21d340866ddf8a4b99e76a6c951cc45189142df652","impliedFormat":1},{"version":"7952419455ca298776db0005b9b5b75571d484d526a29bfbdf041652213bce6f","impliedFormat":1},{"version":"21360500b20e0ec570f26f1cbb388c155ede043698970f316969840da4f16465","impliedFormat":1},{"version":"3a819c2928ee06bbcc84e2797fd3558ae2ebb7e0ed8d87f71732fb2e2acc87b4","impliedFormat":1},{"version":"1765e61249cb44bf5064d42bfa06956455bbc74dc05f074d5727e8962592c920","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"568b463d762d0df07ed10081293715069168ad7cf6308525a3bb93777b127845","impliedFormat":1},{"version":"6e5857f38aa297a859cab4ec891408659218a5a2610cd317b6dcbef9979459cc","impliedFormat":1},{"version":"add0ce7b77ba5b308492fa68f77f24d1ed1d9148534bdf05ac17c30763fc1a79","impliedFormat":1},{"version":"56ccc6238510b913f5e6c21afdc447632873f76748d0b30a87cb313b42f1c196","impliedFormat":1},{"version":"c1a2e05eb6d7ca8d7e4a7f4c93ccf0c2857e842a64c98eaee4d85841ee9855e6","impliedFormat":1},{"version":"85021a58f728318a9c83977a8a3a09196dcfc61345e0b8bbbb39422c1594f36b","impliedFormat":1},{"version":"d91805544905a40fbd639ba1b85f65dc13d6996a07034848d634aa9edb63479e","impliedFormat":1},{"version":"6042774c61ece4ba77b3bf375f15942eb054675b7957882a00c22c0e4fe5865c","impliedFormat":1},{"version":"5a3bd57ed7a9d9afef74c75f77fce79ba3c786401af9810cdf45907c4e93f30e","impliedFormat":1},{"version":"8610f5dc475d74c4b095aafa0c191548bfd43f65802e6da54b5e526202b8cfe0","impliedFormat":1},{"version":"7b9496d2e1664155c3c293e1fbbe2aba288614163c88cb81ed6061905924b8f9","impliedFormat":1},{"version":"e27451b24234dfed45f6cf22112a04955183a99c42a2691fb4936d63cfe42761","impliedFormat":1},{"version":"58d65a2803c3b6629b0e18c8bf1bc883a686fcf0333230dd0151ab6e85b74307","impliedFormat":1},{"version":"e818471014c77c103330aee11f00a7a00b37b35500b53ea6f337aefacd6174c9","impliedFormat":1},{"version":"2fbc91ba70096f93f57e22d1f0af22b707dbb3f9f5692cc4f1200861d3b75d88","impliedFormat":1},{"version":"d8bc0c5487582c6d887c32c92d8b4ffb23310146fcb1d82adf4b15c77f57c4ac","impliedFormat":1},{"version":"8cb31102790372bebfd78dd56d6752913b0f3e2cefbeb08375acd9f5ba737155","impliedFormat":1},{"version":"76af14c3cce62da183aaf30375e3a4613109d16c7f16d30702f16d625a95e62c","impliedFormat":1},{"version":"d3cfde44f8089768ebb08098c96d01ca260b88bccf238d55eee93f1c620ff5a5","impliedFormat":1},{"version":"293eadad9dead44c6fd1db6de552663c33f215c55a1bfa2802a1bceed88ff0ec","impliedFormat":1},{"version":"206e73f49f16633113787cc651dc03dc900379395dfa02ab1ef4c9cbbcd5adc2","impliedFormat":1},{"version":"fec412ded391a7239ef58f455278154b62939370309c1fed322293d98c8796a6","impliedFormat":1},{"version":"e3498cf5e428e6c6b9e97bd88736f26d6cf147dedbfa5a8ad3ed8e05e059af8a","impliedFormat":1},{"version":"dba3f34531fd9b1b6e072928b6f885aa4d28dd6789cbd0e93563d43f4b62da53","impliedFormat":1},{"version":"f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","impliedFormat":1},{"version":"e4b03ddcf8563b1c0aee782a185286ed85a255ce8a30df8453aade2188bbc904","impliedFormat":1},{"version":"2329d90062487e1eaca87b5e06abcbbeeecf80a82f65f949fd332cfcf824b87b","impliedFormat":1},{"version":"25b3f581e12ede11e5739f57a86e8668fbc0124f6649506def306cad2c59d262","impliedFormat":1},{"version":"93c3e73824ad57f98fd23b39335dbdae2db0bd98199b0dc0b9ccc60bf3c5134a","impliedFormat":1},{"version":"a9ebb67d6bbead6044b43714b50dcb77b8f7541ffe803046fdec1714c1eba206","impliedFormat":1},{"version":"833e92c058d033cde3f29a6c7603f517001d1ddd8020bc94d2067a3bc69b2a8e","impliedFormat":1},{"version":"56e0775830b68d13c3d7f4ec75df7d016db6b879ef9676affb5233a9a289c192","impliedFormat":1},{"version":"9ceb6d915edc10d897896f61ce9aa3fe3fc78fd45a4e2e2c162ff8bc06640ef4","impliedFormat":1},{"version":"468d39d561873c6568ef6873a1db2acd7cf80c0e7243911f7c7256df9a8a41a5","impliedFormat":1},{"version":"a4e9e0d92dcad2cb387a5f1bdffe621569052f2d80186e11973aa7080260d296","impliedFormat":1},{"version":"f6380cc36fc3efc70084d288d0a05d0a2e09da012ee3853f9d62431e7216f129","impliedFormat":1},{"version":"497c3e541b4acf6c5d5ba75b03569cfe5fe25c8a87e6c87f1af98da6a3e7b918","impliedFormat":1},{"version":"d9429b81edf2fb2abf1e81e9c2e92615f596ed3166673d9b69b84c369b15fdc0","impliedFormat":1},{"version":"7e22943ae4e474854ca0695ab750a8026f55bb94278331fda02a4fb42efce063","impliedFormat":1},{"version":"7da9ff3d9a7e62ddca6393a23e67296ab88f2fcb94ee5f7fb977fa8e478852ac","impliedFormat":1},{"version":"e1b45cc21ea200308cbc8abae2fb0cfd014cb5b0e1d1643bcc50afa5959b6d83","impliedFormat":1},{"version":"c9740b0ce7533ce6ba21a7d424e38d2736acdddeab2b1a814c00396e62cc2f10","impliedFormat":1},{"version":"b3c1f6a3fdbb04c6b244de6d5772ffdd9e962a2faea1440e410049c13e874b87","impliedFormat":1},{"version":"dcaa872d9b52b9409979170734bdfd38f846c32114d05b70640fd05140b171bb","impliedFormat":1},{"version":"6c434d20da381fcd2e8b924a3ec9b8653cf8bed8e0da648e91f4c984bd2a5a91","impliedFormat":1},{"version":"992419d044caf6b14946fa7b9463819ab2eeb7af7c04919cc2087ce354c92266","impliedFormat":1},{"version":"fa9815e9ce1330289a5c0192e2e91eb6178c0caa83c19fe0c6a9f67013fe795c","impliedFormat":1},{"version":"06384a1a73fcf4524952ecd0d6b63171c5d41dd23573907a91ef0a687ddb4a8c","impliedFormat":1},{"version":"34b1594ecf1c84bcc7a04d9f583afa6345a6fea27a52cf2685f802629219de45","impliedFormat":1},{"version":"d82c9ca830d7b94b7530a2c5819064d8255b93dfeddc5b2ebb8a09316f002c89","impliedFormat":1},{"version":"7e046b9634add57e512412a7881efbc14d44d1c65eadd35432412aa564537975","impliedFormat":1},{"version":"aac9079b9e2b5180036f27ab37cb3cf4fd19955be48ccc82eab3f092ee3d4026","impliedFormat":1},{"version":"3d9c38933bc69e0a885da20f019de441a3b5433ce041ba5b9d3a541db4b568cb","impliedFormat":1},{"version":"606aa2b74372221b0f79ca8ae3568629f444cc454aa59b032e4cb602308dec94","impliedFormat":1},{"version":"50474eaea72bfda85cc37ae6cd29f0556965c0849495d96c8c04c940ef3d2f44","impliedFormat":1},{"version":"b4874382f863cf7dc82b3d15aed1e1372ac3fede462065d5bfc8510c0d8f7b19","impliedFormat":1},{"version":"df10b4f781871afb72b2d648d497671190b16b679bf7533b744cc10b3c6bf7ea","impliedFormat":1},{"version":"1fdc28754c77e852c92087c789a1461aa6eed19c335dc92ce6b16a188e7ba305","impliedFormat":1},{"version":"a656dab1d502d4ddc845b66d8735c484bfebbf0b1eda5fb29729222675759884","impliedFormat":1},{"version":"465a79505258d251068dc0047a67a3605dd26e6b15e9ad2cec297442cbb58820","impliedFormat":1},{"version":"ddae22d9329db28ce3d80a2a53f99eaed66959c1c9cd719c9b744e5470579d2f","impliedFormat":1},{"version":"d0e25feadef054c6fc6a7f55ccc3b27b7216142106b9ff50f5e7b19d85c62ca7","impliedFormat":1},{"version":"111214009193320cacbae104e8281f6cb37788b52a6a84d259f9822c8c71f6ca","impliedFormat":1},{"version":"01c8e2c8984c96b9b48be20ee396bd3689a3a3e6add8d50fe8229a7d4e62ff45","impliedFormat":1},{"version":"a4a0800b592e533897b4967b00fb00f7cd48af9714d300767cc231271aa100af","impliedFormat":1},{"version":"20aa818c3e16e40586f2fa26327ea17242c8873fe3412a69ec68846017219314","impliedFormat":1},{"version":"f498532f53d54f831851990cb4bcd96063d73e302906fa07e2df24aa5935c7d1","impliedFormat":1},{"version":"5fd19dfde8de7a0b91df6a9bbdc44b648fd1f245cae9e8b8cf210d83ee06f106","impliedFormat":1},{"version":"3b8d6638c32e63ea0679eb26d1eb78534f4cc02c27b80f1c0a19f348774f5571","impliedFormat":1},{"version":"ce0da52e69bc3d82a7b5bc40da6baad08d3790de13ad35e89148a88055b46809","impliedFormat":1},{"version":"9e01233da81bfed887f8d9a70d1a26bf11b8ddff165806cc586c84980bf8fc24","impliedFormat":1},{"version":"214a6afbab8b285fc97eb3cece36cae65ea2fca3cbd0c017a96159b14050d202","impliedFormat":1},{"version":"14beeca2944b75b229c0549e0996dc4b7863e07257e0d359d63a7be49a6b86a4","impliedFormat":1},{"version":"f7bb9adb1daa749208b47d1313a46837e4d27687f85a3af7777fc1c9b3dc06b1","impliedFormat":1},{"version":"c549fe2f52101ffe47f58107c702af7cdcd42da8c80afd79f707d1c5d77d4b6e","impliedFormat":1},{"version":"3966ea9e1c1a5f6e636606785999734988e135541b79adc6b5d00abdc0f4bf05","impliedFormat":1},{"version":"0b60b69c957adb27f990fbc27ea4ac1064249400262d7c4c1b0a1687506b3406","impliedFormat":1},{"version":"12c26e5d1befc0ded725cee4c2316f276013e6f2eb545966562ae9a0c1931357","impliedFormat":1},{"version":"27b247363f1376c12310f73ebac6debcde009c0b95b65a8207e4fa90e132b30a","impliedFormat":1},{"version":"05bd302e2249da923048c09dc684d1d74cb205551a87f22fb8badc09ec532a08","impliedFormat":1},{"version":"fe930ec064571ab3b698b13bddf60a29abf9d2f36d51ab1ca0083b087b061f3a","impliedFormat":1},{"version":"6b85c4198e4b62b0056d55135ad95909adf1b95c9a86cdbed2c0f4cc1a902d53","impliedFormat":1},{"version":"fe3e1bb54e8dedcffc6ff42fc6c382b555a1758eb6048620d43080274ddc1e90","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e36722be609155cf1cedb727b7b39849fb2c1106d4bca9195a682e30572427e","impliedFormat":1},{"version":"0322fab609ea7f0e95b9048d801709a945c3776a827e80099a4f4512d1315a3f","impliedFormat":1},{"version":"93e28a250219afa8571bd755d386d4bd2a8418ca3e66d738e25350b7dffe8294","signature":"c92bd6fac7d42a5a1717e7fc574d8d5f1c6d2e6e11312e84e94fc078fb459a26","impliedFormat":1},{"version":"2dffb65044b6a28dcba73284ac6c274985b03a6ce4a3b33967d783df18f8b48c","impliedFormat":1},{"version":"f7e187abe606adf3c1e319e080d4301ba98cb9927fd851eded5bcac226b35fd1","impliedFormat":1},{"version":"335084b62e38b8882a84580945a03f5c887255ac9ba999af5df8b50275f3d94f","impliedFormat":1},{"version":"5d874fb879ab8601c02549817dceb2d0a30729cb7e161625dd6f819bbff1ec0b","impliedFormat":1},{"version":"ace68d700c2960e2d013598730888cde6d8825c54065c9f5077aaf3b2e55e3ad","impliedFormat":1},{"version":"ac91dc23f1dc96b393e0cdb7f4913d41db8cba10daefa20a2cbb4a28634c2e90","impliedFormat":1},{"version":"d98e1d00e6c79d46c66ed20ff97bc08daa10ec10eee3f349aaf89685e2731e11","impliedFormat":99},{"version":"c6d8882260bbb3121389f0e1d5635158bcd73c620c57d732b6b951ad942eafbb","impliedFormat":99},{"version":"2bd58ba23733dcb01d1783b86af1906aa85d38def4f1780f939744b5f34e7aac","impliedFormat":1},{"version":"c16133e0c1fa9e7ae9c86afae3ed7f335ca490c51ef48283fd044c0127c7f87a","impliedFormat":1},{"version":"cd362517992a5e7fad1c4343df2c56efabcd955dc04aa54a4cbbca190a6ca8f7","impliedFormat":1},{"version":"a4abbf5d5ecd7367532921a52e2a2762a6f5f38c3e4ad6c25e6e90152c403804","impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"a4a39b5714adfcadd3bbea6698ca2e942606d833bde62ad5fb6ec55f5e438ff8","impliedFormat":1},{"version":"bbc1d029093135d7d9bfa4b38cbf8761db505026cc458b5e9c8b74f4000e5e75","impliedFormat":1},{"version":"1f68ab0e055994eb337b67aa87d2a15e0200951e9664959b3866ee6f6b11a0fe","impliedFormat":1},{"version":"be5de08f7e80755a34e3247ebd7fd29634afc6143ae1860bd0efe2b8da6e6980","impliedFormat":1},{"version":"84bcc7c6b06f4d643a55dc63b56be0c81d990f8d549b66ea615c553268774dc3","impliedFormat":1},{"version":"2d225e7bda2871c066a7079c88174340950fb604f624f2586d3ea27bb9e5f4ff","impliedFormat":1},{"version":"6a785f84e63234035e511817dd48ada756d984dd8f9344e56eb8b2bdcd8fd001","impliedFormat":1},{"version":"c1422d016f7df2ccd3594c06f2923199acd09898f2c42f50ea8159f1f856f618","impliedFormat":1},{"version":"2973b1b7857ca144251375b97f98474e9847a890331e27132d5a8b3aea9350a8","impliedFormat":1},{"version":"0eb6152d37c84d6119295493dfcc20c331c6fda1304a513d159cdaa599dcb78b","impliedFormat":1},{"version":"237df26f8c326ca00cd9d2deb40214a079749062156386b6d75bdcecc6988a6b","impliedFormat":1},{"version":"cd44995ee13d5d23df17a10213fed7b483fabfd5ea08f267ab52c07ce0b6b4da","impliedFormat":1},{"version":"58ce1486f851942bd2d3056b399079bc9cb978ec933fe9833ea417e33eab676e","impliedFormat":1},{"version":"7557d4d7f19f94341f4413575a3453ba7f6039c9591015bcf4282a8e75414043","impliedFormat":1},{"version":"a3b2cc16f3ce2d882eca44e1066f57a24751545f2a5e4a153d4de31b4cac9bb5","impliedFormat":1},{"version":"ac2b3b377d3068bfb6e1cb8889c99098f2c875955e2325315991882a74d92cc8","impliedFormat":1},{"version":"8deb39d89095469957f73bd194d11f01d9894b8c1f1e27fbf3f6e8122576b336","impliedFormat":1},{"version":"a38a9c41f433b608a0d37e645a31eecf7233ef3d3fffeb626988d3219f80e32f","impliedFormat":1},{"version":"8e1428dcba6a984489863935049893631170a37f9584c0479f06e1a5b1f04332","impliedFormat":1},{"version":"1fce9ecb87a2d3898941c60df617e52e50fb0c03c9b7b2ba8381972448327285","impliedFormat":1},{"version":"5ef0597b8238443908b2c4bf69149ed3894ac0ddd0515ac583d38c7595b151f1","impliedFormat":1},{"version":"ac52b775a80badff5f4ac329c5725a26bd5aaadd57afa7ad9e98b4844767312a","impliedFormat":1},{"version":"6ae5b4a63010c82bf2522b4ecfc29ffe6a8b0c5eea6b2b35120077e9ac54d7a1","impliedFormat":1},{"version":"dd7109c49f416f218915921d44f0f28975df78e04e437c62e1e1eb3be5e18a35","impliedFormat":1},{"version":"eee181112e420b345fc78422a6cc32385ede3d27e2eaf8b8c4ad8b2c29e3e52e","impliedFormat":1},{"version":"25fbe57c8ee3079e2201fe580578fab4f3a78881c98865b7c96233af00bf9624","impliedFormat":1},{"version":"62cc8477858487b4c4de7d7ae5e745a8ce0015c1592f398b63ee05d6e64ca295","impliedFormat":1},{"version":"cc2a9ec3cb10e4c0b8738b02c31798fad312d21ef20b6a2f5be1d077e9f5409d","impliedFormat":1},{"version":"4b4fadcda7d34034737598c07e2dca5d7e1e633cb3ba8dd4d2e6a7782b30b296","impliedFormat":1},{"version":"360fdc8829a51c5428636f1f83e7db36fef6c5a15ed4411b582d00a1c2bd6e97","impliedFormat":1},{"version":"1cf0d15e6ab1ecabbf329b906ae8543e6b8955133b7f6655f04d433e3a0597ab","impliedFormat":1},{"version":"7c9f98fe812643141502b30fb2b5ec56d16aaf94f98580276ae37b7924dd44a4","impliedFormat":1},{"version":"b3547893f24f59d0a644c52f55901b15a3fa1a115bc5ea9a582911469b9348b7","impliedFormat":1},{"version":"596e5b88b6ca8399076afcc22af6e6e0c4700c7cd1f420a78d637c3fb44a885e","impliedFormat":1},{"version":"adddf736e08132c7059ee572b128fdacb1c2650ace80d0f582e93d097ed4fbaf","impliedFormat":1},{"version":"d4cad9dc13e9c5348637170ddd5d95f7ed5fdfc856ddca40234fa55518bc99a6","impliedFormat":1},{"version":"d70675ba7ba7d02e52b7070a369957a70827e4b2bca2c1680c38a832e87b61fd","impliedFormat":1},{"version":"3be71f4ce8988a01e2f5368bdd58e1d60236baf511e4510ee9291c7b3729a27e","impliedFormat":1},{"version":"423d2ccc38e369a7527988d682fafc40267bcd6688a7473e59c5eea20a29b64f","impliedFormat":1},{"version":"2f9fde0868ed030277c678b435f63fcf03d27c04301299580a4017963cc04ce6","impliedFormat":1},{"version":"feeb73d48cc41c6dd23d17473521b0af877751504c30c18dc84267c8eeea429a","impliedFormat":1},{"version":"25f1159094dc0bf3a71313a74e0885426af21c5d6564a254004f2cadf9c5b052","impliedFormat":1},{"version":"cde493e09daad4bb29922fe633f760be9f0e8e2f39cdca999cce3b8690b5e13a","impliedFormat":1},{"version":"3d7f9eb12aface876f7b535cc89dcd416daf77f0b3573333f16ec0a70bcf902a","impliedFormat":1},{"version":"b83139ae818dd20f365118f9999335ca4cd84ae518348619adc5728e7e0372d5","impliedFormat":1},{"version":"e0205f04611bea8b5b82168065b8ef1476a8e96236201494eb8c785331c43118","impliedFormat":1},{"version":"62d26d8ba4fa15ab425c1b57a050ed76c5b0ecbffaa53f182110aa3a02405a07","impliedFormat":1},{"version":"9941cbf7ca695e95d588f5f1692ab040b078d44a95d231fa9a8f828186b7b77d","impliedFormat":1},{"version":"41b8775befd7ded7245a627e9f4de6110236688ce4c124d2d40c37bc1a3bfe05","impliedFormat":1},{"version":"9de8d92a60e62a15c05a8685b1de0ea00d55033834b0c5ab7898c582e2320578","impliedFormat":1},{"version":"a00b0ad2a2a3c3731e481652cf853c57d9f4593e91e8c219b0862bda334e5d81","impliedFormat":1},{"version":"ef7c69c87186bc3b3b45238a1a1bac4c55fa1c5d065f45d4e45ab695291d9d05","impliedFormat":1},{"version":"eb9d3c462f322032ce6b08725c0ce51f147f5b0987e8ad81ccc73b908c7d933a","impliedFormat":1},{"version":"beb3cdd314c425b18bf4ace4ab6e6fedc6de732af63a0fd6d8d15c70426693c5","impliedFormat":1},{"version":"c72b982add26c5ddf410899bcafe3f47253a5d274d4b93d2ef67850d4af4545b","impliedFormat":1},{"version":"d023752daf2a5c2e27a2a850aedc10a48a42fb507dceae37db91dc8294aafdec","impliedFormat":1},{"version":"b8201c67e44d15814cbdfd0f1968c2d3450f6d4710cff2b86ca0748d279a2e7a","impliedFormat":1},{"version":"8766abe955b0fe1add2afcfdba0f39c687750c35ee41a43f69d10afd9ed132ce","impliedFormat":1},{"version":"18db0660a0c89ab26585e064d05daae7ed87e1509851904aa00b6393e37f4694","impliedFormat":1},{"version":"b7dce68b683b0daf599df3414b2e2d6903c3d02b513e33a7191682cee801bc78","impliedFormat":1},{"version":"0607a7bdc347f457ae4f5b96fd6d55d329f3427af6bbc667f71b59edba498fb0","impliedFormat":1},{"version":"01579ab25837ddd39c148b44f0603e6ac21c7d9e92c4e51f79cff193642dcfff","impliedFormat":1},{"version":"bec33abe96da3bb5dc21fa0a1e3843c5f80f7e443cc0fcbbdefadbfa5c781d8f","impliedFormat":1},{"version":"89121c1bf2990f5219bfd802a3e7fc557de447c62058d6af68d6b6348d64499a","impliedFormat":1},{"version":"d4a22007b481fe2a2e6bfd3a42c00cd62d41edb36d30fc4697df2692e9891fc8","impliedFormat":1},{"version":"5d08a179b846f5ee674624b349ebebe2121c455e3a265dc93da4e8d9e89722b4","impliedFormat":1},{"version":"2b37ba54ec067598bf912d56fcb81f6d8ad86a045c757e79440bdef97b52fe1b","impliedFormat":99},{"version":"1bc9dd465634109668661f998485a32da369755d9f32b5a55ed64a525566c94b","impliedFormat":99},{"version":"5702b3c2f5d248290ed99419d77ca1cc3e6c29db5847172377659c50e6303768","impliedFormat":99},{"version":"9764b2eb5b4fc0b8951468fb3dbd6cd922d7752343ef5fbf1a7cd3dfcd54a75e","impliedFormat":99},{"version":"1fc2d3fe8f31c52c802c4dee6c0157c5a1d1f6be44ece83c49174e316cf931ad","impliedFormat":99},{"version":"dc4aae103a0c812121d9db1f7a5ea98231801ed405bf577d1c9c46a893177e36","impliedFormat":99},{"version":"106d3f40907ba68d2ad8ce143a68358bad476e1cc4a5c710c11c7dbaac878308","impliedFormat":99},{"version":"42ad582d92b058b88570d5be95393cf0a6c09a29ba9aa44609465b41d39d2534","impliedFormat":99},{"version":"36e051a1e0d2f2a808dbb164d846be09b5d98e8b782b37922a3b75f57ee66698","impliedFormat":99},{"version":"89dcbbf69b16cd94043e16c7fbcfa04256577ec98bb8ae894833d2a922394db4","impliedFormat":1},{"version":"79b4369233a12c6fa4a07301ecb7085802c98f3a77cf9ab97eee27e1656f82e6","impliedFormat":1},{"version":"d9a75d09e41d52d7e1c8315cc637f995820a4a18a7356a0d30b1bed6d798aa70","impliedFormat":99},{"version":"a76819b2b56ccfc03484098828bdfe457bc16adb842f4308064a424cb8dba3e4","impliedFormat":99},{"version":"a5dbd4c9941b614526619bad31047ddd5f504ec4cdad88d6117b549faef34dd3","impliedFormat":99},{"version":"011423c04bfafb915ceb4faec12ea882d60acbe482780a667fa5095796c320f8","impliedFormat":99},{"version":"f8eb2909590ec619643841ead2fc4b4b183fbd859848ef051295d35fef9d8469","impliedFormat":99},{"version":"fe784567dd721417e2c4c7c1d7306f4b8611a4f232f5b7ce734382cf34b417d2","impliedFormat":99},{"version":"45d1e8fb4fd3e265b15f5a77866a8e21870eae4c69c473c33289a4b971e93704","impliedFormat":99},{"version":"cd40919f70c875ca07ecc5431cc740e366c008bcbe08ba14b8c78353fb4680df","impliedFormat":99},{"version":"ddfd9196f1f83997873bbe958ce99123f11b062f8309fc09d9c9667b2c284391","impliedFormat":99},{"version":"2999ba314a310f6a333199848166d008d088c6e36d090cbdcc69db67d8ae3154","impliedFormat":99},{"version":"62c1e573cd595d3204dfc02b96eba623020b181d2aa3ce6a33e030bc83bebb41","impliedFormat":99},{"version":"ca1616999d6ded0160fea978088a57df492b6c3f8c457a5879837a7e68d69033","impliedFormat":99},{"version":"835e3d95251bbc48918bb874768c13b8986b87ea60471ad8eceb6e38ddd8845e","impliedFormat":99},{"version":"de54e18f04dbcc892a4b4241b9e4c233cfce9be02ac5f43a631bbc25f479cd84","impliedFormat":99},{"version":"453fb9934e71eb8b52347e581b36c01d7751121a75a5cd1a96e3237e3fd9fc7e","impliedFormat":99},{"version":"bc1a1d0eba489e3eb5c2a4aa8cd986c700692b07a76a60b73a3c31e52c7ef983","impliedFormat":99},{"version":"4098e612efd242b5e203c5c0b9afbf7473209905ab2830598be5c7b3942643d0","impliedFormat":99},{"version":"28410cfb9a798bd7d0327fbf0afd4c4038799b1d6a3f86116dc972e31156b6d2","impliedFormat":99},{"version":"514ae9be6724e2164eb38f2a903ef56cf1d0e6ddb62d0d40f155f32d1317c116","impliedFormat":99},{"version":"970e5e94a9071fd5b5c41e2710c0ef7d73e7f7732911681592669e3f7bd06308","impliedFormat":99},{"version":"491fb8b0e0aef777cec1339cb8f5a1a599ed4973ee22a2f02812dd0f48bd78c1","impliedFormat":99},{"version":"6acf0b3018881977d2cfe4382ac3e3db7e103904c4b634be908f1ade06eb302d","impliedFormat":99},{"version":"2dbb2e03b4b7f6524ad5683e7b5aa2e6aef9c83cab1678afd8467fde6d5a3a92","impliedFormat":99},{"version":"135b12824cd5e495ea0a8f7e29aba52e1adb4581bb1e279fb179304ba60c0a44","impliedFormat":99},{"version":"e4c784392051f4bbb80304d3a909da18c98bc58b093456a09b3e3a1b7b10937f","impliedFormat":99},{"version":"2e87c3480512f057f2e7f44f6498b7e3677196e84e0884618fc9e8b6d6228bed","impliedFormat":99},{"version":"66984309d771b6b085e3369227077da237b40e798570f0a2ddbfea383db39812","impliedFormat":99},{"version":"e41be8943835ad083a4f8a558bd2a89b7fe39619ed99f1880187c75e231d033e","impliedFormat":99},{"version":"260558fff7344e4985cfc78472ae58cbc2487e406d23c1ddaf4d484618ce4cfd","impliedFormat":99},{"version":"a3d5be0365b28b3281541d39d9db08d30b88de49576ddfbbb5d086155017b283","impliedFormat":99},{"version":"985d310b29f50ce5d4b4666cf2e5a06e841f3e37d1d507bd14186c78649aa3dd","impliedFormat":99},{"version":"af1120ba3de51e52385019b7800e66e4694ebc9e6a4a68e9f4afc711f6ae88be","impliedFormat":99},{"version":"5c6b3840cbc84f6f60abfc5c58c3b67b7296b5ebe26fd370710cfc89bbe3a5f1","impliedFormat":99},{"version":"91ef552cc29ec57d616e95d73ee09765198c710fa34e20b25cb9f9cf502821f1","impliedFormat":99},{"version":"25b6edf357caf505aa8e21a944bb0f7a166c8dac6a61a49ad1a0366f1bde5160","impliedFormat":99},{"version":"1ab840e4672a64e3c705a9163142e2b79b898db88b3c18400e37dbe88a58fa60","impliedFormat":99},{"version":"48516730c1cf1b72cac2da04481983cfe61359101d8563314457ecb059b102a9","impliedFormat":99},{"version":"d391200bb56f44a4be56e6571b2aeedfe602c0fd3c686b87b1306ae62e80b1e9","impliedFormat":99},{"version":"3b3e4b39cbb8adb1f210af60388e4ad66f6dfdeb45b3c8dde961f557776d88fe","impliedFormat":99},{"version":"431f31d10ad58b5767c57ffbf44198303b754193ba8fbf034b7cf8a3ab68abc1","impliedFormat":99},{"version":"a52180aca81ba4ef18ac145083d5d272c3a19f26db54441d5a7d8ef4bd601765","impliedFormat":99},{"version":"9de8aba529388309bc46248fb9c6cca493111a6c9fc1c1f087a3b281fb145d77","impliedFormat":99},{"version":"2ccdfd33a753c18e8e5fe8a1eadefff968531d920bc9cdc7e4c97b0c6d3dcaf8","impliedFormat":99},{"version":"d64a434d7fb5040dbe7d5f4911145deda53e281b3f1887b9a610defd51b3c1a2","impliedFormat":99},{"version":"927f406568919fd7cd238ef7fe5e9c5e9ec826f1fff89830e480aff8cfd197da","impliedFormat":99},{"version":"a77d742410fe78bb054d325b690fda75459531db005b62ba0e9371c00163353c","impliedFormat":99},{"version":"f8de61dd3e3c4dc193bb341891d67d3979cb5523a57fcacaf46bf1e6284e6c35","impliedFormat":99},{"version":"f07c5fb951dfaf5eb0c6053f6a77c67e02d21c9586c58ed0836d892e438c5bb2","impliedFormat":99},{"version":"c97b20bb0ad5d42e1475255cb13ede29fe1b8c398db5cba2a5842f1cb973b658","impliedFormat":99},{"version":"5559999a83ecfa2da6009cdab20b402c63cd6bb0f7a13fc033a5b567b3eb404b","impliedFormat":99},{"version":"aec26ed2e2ef8f2dbc6ffce8e93503f0c1a6b6cf50b6a13141a8462e7a6b8c79","impliedFormat":99},{"version":"a510938c29a2e04183c801a340f0bbb5a0ae091651bd659214a8587d710ddfbb","impliedFormat":99},{"version":"07bcf85b52f652572fc2a7ec58e6de5dd4fcaf9bbc6f4706b124378cedcbb95c","impliedFormat":99},{"version":"4368a800522ca3dd131d3bbc05f2c46a8b7d612eefca41d5c2e5ac0428a45582","impliedFormat":99},{"version":"720e56f06175c21512bcaeed59a4d4173cd635ea7b4df3739901791b83f835b9","impliedFormat":99},{"version":"349949a8894257122f278f418f4ee2d39752c67b1f06162bb59747d8d06bbc51","impliedFormat":99},{"version":"364832fbef8fb60e1fee868343c0b64647ab8a4e6b0421ca6dafb10dff9979ba","impliedFormat":99},{"version":"dfe4d1087854351e45109f87e322a4fb9d3d28d8bd92aa0460f3578320f024e9","impliedFormat":99},{"version":"886051ae2ccc4c5545bedb4f9af372d69c7c3844ae68833ed1fba8cae8d90ef8","impliedFormat":99},{"version":"3f4e5997cb760b0ef04a7110b4dd18407718e7502e4bf6cd8dd8aa97af8456ff","impliedFormat":99},{"version":"381b5f28b29f104bbdd130704f0a0df347f2fc6cb7bab89cfdc2ec637e613f78","impliedFormat":99},{"version":"a52baccd4bf285e633816caffe74e7928870ce064ebc2a702e54d5e908228777","impliedFormat":99},{"version":"c6120582914acd667ce268849283702a625fee9893e9cad5cd27baada5f89f50","impliedFormat":99},{"version":"da1c22fbbf43de3065d227f8acbc10b132dfa2f3c725db415adbe392f6d1359f","impliedFormat":99},{"version":"858880acbe7e15f7e4f06ac82fd8f394dfe2362687271d5860900d584856c205","impliedFormat":99},{"version":"8dfb1bf0a03e4db2371bafe9ac3c5fb2a4481c77e904d2a210f3fed7d2ad243a","impliedFormat":99},{"version":"bc840f0c5e7274e66f61212bb517fb4348d3e25ed57a27e7783fed58301591e0","impliedFormat":99},{"version":"26438d4d1fc8c9923aea60424369c6e9e13f7ce2672e31137aa3d89b7e1ba9af","impliedFormat":99},{"version":"1ace7207aa2566178c72693b145a566f1209677a2d5e9fb948c8be56a1a61ca9","impliedFormat":99},{"version":"a776df294180c0fdb62ba1c56a959b0bb1d2967d25b372abefdb13d6eba14caf","impliedFormat":99},{"version":"6c88ea4c3b86430dd03de268fd178803d22dc6aa85f954f41b1a27c6bb6227f2","impliedFormat":99},{"version":"11e17a3addf249ae2d884b35543d2b40fabf55ddcbc04f8ee3dcdae8a0ce61eb","impliedFormat":99},{"version":"4fd8aac8f684ee9b1a61807c65ee48f217bf12c77eb169a84a3ba8ddf7335a86","impliedFormat":99},{"version":"1d0736a4bfcb9f32de29d6b15ac2fa0049fd447980cf1159d219543aa5266426","impliedFormat":99},{"version":"11083c0a8f45d2ec174df1cb565c7ba9770878d6820bf01d76d4fedb86052a77","impliedFormat":99},{"version":"d8e37104ef452b01cefe43990821adc3c6987423a73a1252aa55fb1d9ebc7e6d","impliedFormat":99},{"version":"f5622423ee5642dcf2b92d71b37967b458e8df3cf90b468675ff9fddaa532a0f","impliedFormat":99},{"version":"21a942886d6b3e372db0504c5ee277285cbe4f517a27fc4763cf8c48bd0f4310","impliedFormat":99},{"version":"41a4b2454b2d3a13b4fc4ec57d6a0a639127369f87da8f28037943019705d619","impliedFormat":99},{"version":"e9b82ac7186490d18dffaafda695f5d975dfee549096c0bf883387a8b6c3ab5a","impliedFormat":99},{"version":"eed9b5f5a6998abe0b408db4b8847a46eb401c9924ddc5b24b1cede3ebf4ee8c","impliedFormat":99},{"version":"f99db2cd80274f32467ae5231d74632c35596ab75fa65baac3fec9dd551cf9d7","impliedFormat":99},{"version":"c799ceedd4821387e6f3518cf5725f9430e2fb7cae1d4606119a243dea28ee40","impliedFormat":99},{"version":"dcf54538d0bfa5006f03bf111730788a7dd409a49036212a36b678afa0a5d8c6","impliedFormat":99},{"version":"1ed428700390f2f81996f60341acef406b26ad72f74fc05afaf3ca101ae18e61","impliedFormat":99},{"version":"417048bbdce52a57110e6c221d6fa4e883bde6464450894f3af378a8b9a82a47","impliedFormat":99},{"version":"ab0048d2b673c0d60afc882a4154abcb2edb9a10873375366f090ae7ae336fe8","impliedFormat":99},{"version":"f8a6bb79327f4a6afc63d28624654522fc80f7536efa7a617ef48200b7a5f673","impliedFormat":1},{"version":"3e61b9db82b5e4a8ffcdd54812fda9d980cd4772b1d9f56b323524368eed9e5a","impliedFormat":99},{"version":"dcbc70889e6105d3e0a369dcea59a2bd3094800be802cd206b617540ff422708","impliedFormat":99},{"version":"f0d325b9e8d30a91593dc922c602720cec5f41011e703655d1c3e4e183a22268","impliedFormat":99},{"version":"afbd42eb9f22aa6a53aa4d5f8e09bb289dd110836908064d2a18ea3ab86a1984","impliedFormat":99},{"version":"3132996c31314d85f1e2e5572a2e0b0ca04c59349c9169574a02bb65f77e5257","impliedFormat":1},{"version":"49530d42805effeefb5c9ecc64161451ff4f7fee8f0e6f00c30ccfca2991948c","impliedFormat":1},{"version":"271cde49dfd9b398ccc91bb3aaa43854cf76f4d14e10fed91cbac649aa6cbc63","affectsGlobalScope":true,"impliedFormat":1},{"version":"2bcecd31f1b4281710c666843fc55133a0ee25b143e59f35f49c62e168123f4b","impliedFormat":1},{"version":"a6273756fa05f794b64fe1aff45f4371d444f51ed0257f9364a8b25f3501915d","impliedFormat":1},{"version":"9c4e644fe9bf08d93c93bd892705842189fe345163f8896849d5964d21b56b78","impliedFormat":1},{"version":"25d91fb9ed77a828cc6c7a863236fb712dafcd52f816eec481bd0c1f589f4404","impliedFormat":1},{"version":"4cd14cea22eed1bfb0dc76183e56989f897ac5b14c0e2a819e5162eafdcfe243","impliedFormat":1},{"version":"8d32432f68ca4ce93ad717823976f2db2add94c70c19602bf87ee67fe51df48b","impliedFormat":1},{"version":"ee57aaff14b24ef49e381c8c13e046164daa0f0c078c2f29227fdf703ce47742","impliedFormat":1},{"version":"2d7196e8d39568d3db85476e645279cec672d4c76d30f577802b278a9d8da131","impliedFormat":1},{"version":"197a6f2763febaa594762ccde1fcd65307d9e5ed0d6b32189db73824a5c175bb","impliedFormat":1},{"version":"970c6b13100a9c81c7fc8cf3a6eb5f2a5782d1e8d28d1adc075458ace383eb6f","impliedFormat":1},{"version":"8811ac50ccb4215b947e36ab99fa6c98a9bde7aa411a7a3586d23586d92ea26d","impliedFormat":1},{"version":"76653873ad66ae01febc942feb2780bddf4c8efcb79543e1fffe036391bb180c","impliedFormat":1},{"version":"8a626a1c4e45eab6407ccb3cff961e4b0b38b2354cf565078efd00ff129b37e4","impliedFormat":1},{"version":"95fc02f5ca07af02e9df706380936af7bea6dfa45d11db75f44ac555190e40bf","impliedFormat":1},{"version":"aa8b911821341f619aea77862a84bd5202e3b3dd9bfeeaeeab8be8437f214b02","impliedFormat":1},{"version":"f80cbb18a29fc7d4a7cc13bebc8f31101783d76c770715a97b1f5cb8139ae55d","impliedFormat":1},{"version":"d2f1d47c880988b0b99346cb18cb6bc0e3103d1f293eaa00151622c2dbc7d73b","impliedFormat":1},{"version":"65bfff80486ce5480f8862e0edf615f32547faeb9585b9e0ade60df465eec663","impliedFormat":1},{"version":"e432f46d659cf305d09dd8d9d85b82b71d8481a236293b494d624720075c66ab","impliedFormat":1},{"version":"cebfeedf63623d54f7423d58cae1ec204c0d8d97a66d5fb17579e26a902085e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"378281aa35786c27d5811af7e6bcaa492eebd0c7013d48137c35bbc69a2b9751","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"1b2dd1cbeb0cc6ae20795958ba5950395ebb2849b7c8326853dd15530c77ab0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"387a023d363f755eb63450a66c28b14cdd7bc30a104565e2dbf0a8988bb4a56c","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"3a80bc85f38526ca3b08007ee80712e7bb0601df178b23fbf0bf87036fce40ce","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"2931540c47ee0ff8a62860e61782eb17b155615db61e36986e54645ec67f67c2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"f6faf5f74e4c4cc309a6c6a6c4da02dbb840be5d3e92905a23dcd7b2b0bd1986","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"33e981bf6376e939f99bd7f89abec757c64897d33c005036b9a10d9587d80187","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"3bacf516d686d08682751a3bd2519ea3b8041a164bfb4f1d35728993e70a2426","impliedFormat":1},{"version":"7fb266686238369442bd1719bc0d7edd0199da4fb8540354e1ff7f16669b4323","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"c183b931b68ad184bc8e8372bf663f3d33304772fb482f29fb91b3c391031f3e","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"48cc3ec153b50985fb95153258a710782b25975b10dd4ac8a4f3920632d10790","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"e1528ca65ac90f6fa0e4a247eb656b4263c470bb22d9033e466463e13395e599","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"866078923a56d026e39243b4392e282c1c63159723996fa89243140e1388a98d","impliedFormat":1},{"version":"830171b27c5fdf9bcbe4cf7d428fcf3ae2c67780fb7fbdccdf70d1623d938bc4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d97fb21da858fb18b8ae72c314e9743fd52f73ebe2764e12af1db32fc03f853f","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ea15fd99b2e34cb25fe8346c955000bb70c8b423ae4377a972ef46bfb37f595","impliedFormat":1},{"version":"7cf69dd5502c41644c9e5106210b5da7144800670cbe861f66726fa209e231c4","impliedFormat":1},{"version":"72c1f5e0a28e473026074817561d1bc9647909cf253c8d56c41d1df8d95b85f7","impliedFormat":1},{"version":"f9b4137a0d285bd77dba2e6e895530112264310ae47e07bf311feae428fb8b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b21e13ed07d0df176ae31d6b7f01f7b17d66dbeb489c0d31d00de2ca14883da","impliedFormat":1},{"version":"51aecd2df90a3cffea1eb4696b33b2d78594ea2aa2138e6b9471ec4841c6c2ee","impliedFormat":1},{"version":"9d8f9e63e29a3396285620908e7f14d874d066caea747dc4b2c378f0599166b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"f929f0b6b3421a2d34344b0f421f45aeb2c84ad365ebf29d04312023b3accc58","impliedFormat":1},{"version":"db9ada976f9e52e13f7ae8b9a320f4b67b87685938c5879187d8864b2fbe97f3","impliedFormat":1},{"version":"9f39e70a354d0fba29ac3cdf6eca00b7f9e96f64b2b2780c432e8ea27f133743","impliedFormat":1},{"version":"0dace96cc0f7bc6d0ee2044921bdf19fe42d16284dbcc8ae200800d1c9579335","impliedFormat":1},{"version":"a2e2bbde231b65c53c764c12313897ffdfb6c49183dd31823ee2405f2f7b5378","impliedFormat":1},{"version":"ad1cc0ed328f3f708771272021be61ab146b32ecf2b78f3224959ff1e2cd2a5c","impliedFormat":1},{"version":"c64e1888baaa3253ca4405b455e4bf44f76357868a1bd0a52998ade9a092ad78","affectsGlobalScope":true,"impliedFormat":1},{"version":"d8cf132379078d0974a59df26069689a2d33c7dc826b5be56231841cb2f32e58","impliedFormat":1},{"version":"fbf413fc617837453c878a9174a1f1b383616857a3f8366bc41cf30df4aea7d5","impliedFormat":1},{"version":"148c73ec11318850f571172ceae3e55ce479d850fe18ec8eae0abd99d9f6c319","impliedFormat":1},{"version":"230bdc111d7578276e4a3bb9d075d85c78c6b68f428c3a9935e2eaa10f4ae1f5","impliedFormat":1},{"version":"e8aabbee5e7b9101b03bb4222607d57f38859b8115a8050a4eb91b4ee43a3a73","impliedFormat":1},{"version":"bbf42f98a5819f4f06e18c8b669a994afe9a17fe520ae3454a195e6eabf7700d","impliedFormat":1},{"version":"c0bb1b65757c72bbf8ddf7eaa532223bacf58041ff16c883e76f45506596e925","impliedFormat":1},{"version":"c8b85f7aed29f8f52b813f800611406b0bfe5cf3224d20a4bdda7c7f73ce368e","affectsGlobalScope":true,"impliedFormat":1},{"version":"145dcf25fd4967c610c53d93d7bc4dce8fbb1b6dd7935362472d4ae49363c7ba","impliedFormat":1},{"version":"ff65b8a8bd380c6d129becc35de02f7c29ad7ce03300331ca91311fb4044d1a9","impliedFormat":1},{"version":"76957a6d92b94b9e2852cf527fea32ad2dc0ef50f67fe2b14bd027c9ceef2d86","impliedFormat":1},{"version":"9043daec15206650fa119bad6b8d70136021ea7d52673a71f79a87a42ee38d44","affectsGlobalScope":true,"impliedFormat":1},{"version":"4e2de7ab2f74e36d7078bccdf831585b10dc6330bab56054921531b03f9beaf3","affectsGlobalScope":true,"impliedFormat":1},{"version":"a58a15da4c5ba3df60c910a043281256fa52d36a0fcdef9b9100c646282e88dd","impliedFormat":1},{"version":"b36beffbf8acdc3ebc58c8bb4b75574b31a2169869c70fc03f82895b93950a12","impliedFormat":1},{"version":"de263f0089aefbfd73c89562fb7254a7468b1f33b61839aafc3f035d60766cb4","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"8c81fd4a110490c43d7c578e8c6f69b3af01717189196899a6a44f93daa57a3a","impliedFormat":1},{"version":"5fb39858b2459864b139950a09adae4f38dad87c25bf572ce414f10e4bd7baab","impliedFormat":1},{"version":"65faec1b4bd63564aeec33eab9cacfaefd84ce2400f03903a71a1841fbce195f","impliedFormat":1},{"version":"b33b74b97952d9bf4fbd2951dcfbb5136656ddb310ce1c84518aaa77dbca9992","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"6b306cd4282bbb54d4a6bb23cfb7a271160983dfc38c67b5a132504cfcc34896","affectsGlobalScope":true,"impliedFormat":1},{"version":"c119835edf36415081dfd9ed15fc0cd37aaa28d232be029ad073f15f3d88c323","impliedFormat":1},{"version":"450172a56b944c2d83f45cc11c9a388ea967cd301a21202aa0a23c34c7506a18","impliedFormat":1},{"version":"9705cd157ffbb91c5cab48bdd2de5a437a372e63f870f8a8472e72ff634d47c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ae86f30d5d10e4f75ce8dcb6e1bd3a12ecec3d071a21e8f462c5c85c678efb41","impliedFormat":1},{"version":"72f8936aebf0c4a1adab767b97d34ba7d3a308afcf76de4417b9c16fb92ed548","impliedFormat":1},{"version":"e03460fe72b259f6d25ad029f085e4bedc3f90477da4401d8fbc1efa9793230e","impliedFormat":1},{"version":"4286a3a6619514fca656089aee160bb6f2e77f4dd53dc5a96b26a0b4fc778055","impliedFormat":1},{"version":"69e0a41d620fb678a899c65e073413b452f4db321b858fe422ad93fd686cd49a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3585d6891e9ea18e07d0755a6d90d71331558ba5dc5561933553209f886db106","affectsGlobalScope":true,"impliedFormat":1},{"version":"86be71cbb0593468644932a6eb96d527cfa600cecfc0b698af5f52e51804451d","impliedFormat":1},{"version":"84dd6b0fd2505135692935599d6606f50a421389e8d4535194bcded307ee5cf2","impliedFormat":1},{"version":"0d5b085f36e6dc55bc6332ecb9c733be3a534958c238fb8d8d18d4a2b6f2a15a","impliedFormat":1},{"version":"db19ea066fdc5f97df3f769e582ae3000380ab7942e266654bdb1a4650d19eaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"2a034894bf28c220a331c7a0229d33564803abe2ac1b9a5feee91b6b9b6e88ea","impliedFormat":1},{"version":"63228283eda38338f98e629d8033bffe727d2247ba2f3a1cbd1273a6827a1ec4","impliedFormat":1},{"version":"211440ce81e87b3491cdf07155881344b0a61566df6e749acff0be7e8b9d1a07","impliedFormat":1},{"version":"5d9a0b6e6be8dbb259f64037bce02f34692e8c1519f5cd5d467d7fa4490dced4","impliedFormat":1},{"version":"880da0e0f3ebca42f9bd1bc2d3e5e7df33f2619d85f18ee0ed4bd16d1800bc32","impliedFormat":1},{"version":"380b919bfa0516118edaf25b99e45f855e7bc3fd75ce4163a1cfe4a666388804","impliedFormat":1},{"version":"0d89e5c4ce6e3096e64504e1fa45a8ddccf488cb5fdc1980ea09db2a451f0b91","impliedFormat":1},{"version":"fcf79300e5257a23ed3bacaa6861d7c645139c6f7ece134d15e6669447e5e6db","impliedFormat":1},{"version":"187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","impliedFormat":1},{"version":"aa2c18a1b5a086bbcaae10a4efba409cc95ba7287d8cf8f2591b53704fea3dea","impliedFormat":1},{"version":"5a0b15210129310cee9fa6af9200714bb4b12af4a04d890e15f34dbea1cf1852","impliedFormat":1},{"version":"0244119dbcbcf34faf3ffdae72dab1e9bc2bc9efc3c477b2240ffa94af3bca56","impliedFormat":1},{"version":"00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","impliedFormat":1},{"version":"a873c50d3e47c21aa09fbe1e2023d9a44efb07cc0cb8c72f418bf301b0771fd3","impliedFormat":1},{"version":"7c14ccd2eaa82619fffc1bfa877eb68a012e9fb723d07ee98db451fadb618906","impliedFormat":1},{"version":"49c36529ee09ea9ce19525af5bb84985ea8e782cb7ee8c493d9e36d027a3d019","impliedFormat":1},{"version":"df996e25faa505f85aeb294d15ebe61b399cf1d1e49959cdfaf2cc0815c203f9","impliedFormat":1},{"version":"4f6a12044ee6f458db11964153830abbc499e73d065c51c329ec97407f4b13dd","impliedFormat":1},{"version":"824f68d511a472db69b0026df76ef12200474736a5ee698e2074c7a1f252e2d7","signature":"0b77dd3a2f603600a1bffc40720d7d62607c7ecc66eb5883a2fa1304558f1e58","impliedFormat":1},{"version":"e9fb698c44710c16b5c7256d90e9b1404cb05f945f9bf4b3a7c46b64feefea96","signature":"3a3dc25bb315edda9c982d7d57d1fa871dd49745a418d94b4be4011c934f16ff","impliedFormat":1},{"version":"dd6a111bf736a14e70bc98140b7bddde7154ecb027db1be938d271e11e879307","signature":"cca97f6057bb4328aaef1592a490927ea9d0eaaac5cc04b3630aab651a283768","impliedFormat":1},{"version":"89f892cb6b201aeeb9f38266dbf4c57527113b0e18b4e2adc4d64589770cc65a","signature":"e901db33164849e90bef9252fed187b7992f83ecc904f97d5dd56275bc0754b8","impliedFormat":1},{"version":"1004805baafc57846a7584f0275424d00631c8dd7f13156093ef7659dbaed0d8","signature":"3b9c954e080d51a73f61e16bc0348681f6f4ff5e1ea29e2ecff7c578ef6891c6","impliedFormat":1},{"version":"903a6bc0eb7d2857b1a2ccecbe898fad7d121aa44b53e6a234c427b29f161fad","signature":"15c7f7113c8d2673762080cd7112c1a66c06b00c2d075b244e0a6a455c8b605e","impliedFormat":1},{"version":"663de56213a7200f97246bebf3c57fc0665dc78ac3753f48947061f099e44903","signature":"3384193b1ed9bd4631f6281d9484966e295c12696908f4dc0334fec65c8bc931","impliedFormat":1},{"version":"1d4bc73751d6ec6285331d1ca378904f55d9e5e8aeaa69bc45b675c3df83e778","impliedFormat":1},{"version":"1cfafc077fd4b420e5e1c5f3e0e6b086f6ea424bf96a6c7af0d6d2ef2b008a81","impliedFormat":1},{"version":"527840e23d438abab6cac9bdd4672c888cbaf5abc54e7da1ee0915aaba06dda6","affectsGlobalScope":true,"impliedFormat":1},{"version":"8017277c3843df85296d8730f9edf097d68d7d5f9bc9d8124fcacf17ecfd487e","impliedFormat":1},{"version":"bc03c3c352f689e38c0ddd50c39b1e65d59273991bfc8858a9e3c0ebb79c023b","impliedFormat":1},{"version":"88932fc452666f86f68bae976df5825a406f5fef56aa0aca290b13d701ed74f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"e85d04f57b46201ddc8ba238a84322432a4803a5d65e0bbd8b3b4f05345edd51","impliedFormat":1},{"version":"713140d254961f506a4077c1b6a64c503122c621972a596b54eb693721234db1","impliedFormat":1},{"version":"2a87eec8f244fcdcf381f6c932860ed5a6588df126d5d576635cc5bb44161d03","impliedFormat":1},{"version":"1ce5c97d8b645948358991e5576939b4b8e0c945b7ba1c31e5c97374740032f2","impliedFormat":1},{"version":"9bb24979f54744a3407c0e798a7b492bf369e8c6e1f0eb07ed8a71e922c3cda5","impliedFormat":1},{"version":"60670f3f00b4cb86a4e0daadbb40fb2d48ca426afdb70bc04a71fab63eef50df","impliedFormat":1},{"version":"fa5e98fa28f4ac0ecf022c6fe12ac91017bedad678fe2438cd6a35686e250a24","impliedFormat":1},{"version":"722f7cc86262e43ce45ccd93a7b2f85979ba493c02bfdd7f774e0e85075774c6","impliedFormat":1},{"version":"dfcd31406879f99f8b4845fc20bef0143f7f0107d82d1932a2fd87170980246d","impliedFormat":1},{"version":"8d6eb71906be163246a66e062edf8e160eb2584f084022d42a4a71bc6f59c56b","impliedFormat":1},{"version":"ae72ff0e5387d3172a8198f3ea33b696f53f8e088e8a25e83b74ae2f9356435f","impliedFormat":1},{"version":"e8a429357486429f8720583b54b51e7370e848ca46bdbf5c8a993af22e84be0f","impliedFormat":1},{"version":"d7795d18e8289383602f65b8ab4413e86565875a88de5dc1d5100691e01cfd4b","impliedFormat":1},{"version":"adc9383bcb02e89453f6d2c3e2c1a755b2d3d4acba558d91864a3e60dd559736","impliedFormat":1},{"version":"8b212b7dfb214804d12fa4a90a0c253c14d28223630827b3f0eb236a517e982e","impliedFormat":1},{"version":"fc8b67f976a19fafd7714239a6a8b481c73eade184baa5cf5032a928eca591f4","impliedFormat":1},{"version":"af5f8b74ae228e2e775bf246b400cbaaf688ac283b3a26b05ffd91ec3c69d16e","impliedFormat":1},{"version":"6f5556b7bc11fad3eaa4b62fea9107169fb36521b9e2ab7a820c6142b326536b","impliedFormat":1},{"version":"e09ec1e01cfaa2dd4dbc0cb45d7a336595c049b3556447920931519ac737677e","impliedFormat":1},{"version":"1bf22c9dab622297ae7f3e126346b6fc2fdde48a484de64e98ec362695179c80","impliedFormat":1},{"version":"80ba44fb2c285628cf99ccbc593055d57611b416359988b4c779f3a38aab658c","impliedFormat":1},{"version":"77b22c53e6f188ca5eb385defdbee1ab8854a0043e6700c9663e18bbe1f4c4f8","impliedFormat":1},{"version":"9f3b2c7365becfd7f1c3259c45c32c7dcaa9290a8f0433dc15c28f230a40b875","impliedFormat":1},{"version":"0250f9dd63c4cbac30f9155759244725e9511c3254f37af148585093abb232e1","impliedFormat":1},{"version":"f1efb9b111c4052eadc8c2d5ff703531728c48dd12d05e8faa910780d0e37a99","impliedFormat":1},{"version":"385e6beb29b630e2da34f897485a93b0e3af911db2a588c867ae8dc5e34e4365","impliedFormat":1},{"version":"a76bcade21aa1716bfd5e6ad737bad8d61dc2ccf3429014d3d80186867faf070","impliedFormat":1},{"version":"22fbde3378e80dc76b04ec18b5b21195fa283f150b8baf27734d38e6ae7aafed","impliedFormat":1},{"version":"46324183533e34fad2461b51174132e8e0e4b3ac1ceb5032e4952992739d1eab","impliedFormat":1},{"version":"d3fa0530dfb1df408f0abd76486de39def69ca47683d4a3529b2d22fce27c693","impliedFormat":1},{"version":"d9be977c415df16e4defe4995caeca96e637eeef9d216d0d90cdba6fc617e97e","impliedFormat":1},{"version":"98e0c2b48d855a844099123e8ec20fe383ecd1c5877f3895b048656befe268d0","impliedFormat":1},{"version":"ff53802a97b7d11ab3c4395aa052baa14cd12d2b1ed236b520a833fdd2a15003","impliedFormat":1},{"version":"fce9262f840a74118112caf685b725e1cc86cd2b0927311511113d90d87cc61e","impliedFormat":1},{"version":"d7a7cac49af2a3bfc208fe68831fbfa569864f74a7f31cc3a607f641e6c583fd","impliedFormat":1},{"version":"9a80e3322d08274f0e41b77923c91fe67b2c8a5134a5278c2cb60a330441554e","impliedFormat":1},{"version":"2460af41191009298d931c592fb6d4151beea320f1f25b73605e2211e53e4e88","impliedFormat":1},{"version":"2f87ea988d84d1c617afdeba9d151435473ab24cd5fc456510c8db26d8bd1581","impliedFormat":1},{"version":"b7336c1c536e3deaedbda956739c6250ac2d0dd171730c42cb57b10368f38a14","impliedFormat":1},{"version":"6fb67d664aaab2f1d1ad4613b58548aecb4b4703b9e4c5dba6b865b31bd14722","impliedFormat":1},{"version":"4414644199b1a047b4234965e07d189781a92b578707c79c3933918d67cd9d85","impliedFormat":1},{"version":"04a4b38c6a1682059eac00e7d0948d99c46642b57003d61d0fe9ccc9df442887","impliedFormat":1},{"version":"f12ea658b060da1752c65ae4f1e4c248587f6cd4cb4acabbf79a110b6b02ff75","impliedFormat":1},{"version":"011b2857871a878d5eae463bedc4b3dd14755dc3a67d5d10f8fbb7823d119294","impliedFormat":1},{"version":"d406b797d7b2aff9f8bd6c023acfaa5a5fc415bfbf01975e23d415d3f54857af","impliedFormat":1},{"version":"7d71b2d1a537fe41760a16441cd95d98fcb59ddf9c714aba2fecba961ab253b6","impliedFormat":1},{"version":"a9bd8a2bbd03a72054cbdf0cd2a77fabea4e3ae591dd02b8f58bda0c34e50c1c","impliedFormat":1},{"version":"386cc88a3bdee8bc651ead59f8afc9dc5729fc933549bbd217409eabad05ba3e","impliedFormat":1},{"version":"41c78f187749098f9b8e8982839a010b6bf00dacc654d759b9c169127bcda034","impliedFormat":1},{"version":"3c2bc74b03662b252a2f0a0813618769795a67086d04cc646ecbdc9f365accbd","impliedFormat":1},{"version":"7734e65ea010fbe72d9b40f1d8751e6beed9ee23b6873b0a71d4cabf33ff1195","impliedFormat":1},{"version":"ed4cf7a3c503e67cf96266f3f8282250819aa4e2dd8f21fa91537c07c3dc790c","impliedFormat":1},{"version":"b01fb6f0512ae8caf204c6217fa2cc42abcbf5eb2eb72a20427ff7a955af9f3b","impliedFormat":1},{"version":"361e6c26ca7c4d005f9b4c7ca292657f476a4632bc659634bb43521b49fcc6e2","impliedFormat":1},{"version":"9f38804adbb5d9942944981147b1ffdea26683d2d41ebf498a7822f39c01a233","impliedFormat":1},{"version":"75d6380f5b4b8a4e4e61dd8f2e781002438473e202d806b129a29b1ae3b7329d","impliedFormat":1},{"version":"5bb405c8207f8cc3614dcfc207cd30651613bd959522c5871ee0f91710881777","impliedFormat":1},{"version":"af97f5c762c31843c9e3d4f7e9ad9c279ebcbaa568f8729a29183f6987a3726b","impliedFormat":1},{"version":"f945e0e522a12e3a8fe9c2801107711ff41038dac5647524a93ff867d954a27b","impliedFormat":1},{"version":"878b9a6090e149da9b3d9bf6613a84fac1f59e4e183d3186615a7ae5760812db","impliedFormat":1},{"version":"29a344b0ec2ebb6d736da158ad63091e2badfca1c800c3b723780b72a075ba82","impliedFormat":1},{"version":"b546b82719b214c8ab255a6f07fd91200119e9a59416ce984d25193f2b0c7747","impliedFormat":1},{"version":"4bc70244782fcc021d4ef0874301d65d2822ed10addbd06637bddad8018ce196","impliedFormat":1},{"version":"bec12c8989f9a8a61c0f4ecc0359a9afbf65dcaebc65ddb5b5ef6274d66d2138","impliedFormat":1},{"version":"a09669d0bd327788810ffd3d3cc1c4f5a3ddf37251065651deca8deea1a19d33","impliedFormat":1},{"version":"b8d0f6e12d6362a16d69b3bebf983920ea33d3ee21ac6031e65f5407ee2c2909","impliedFormat":1},{"version":"c7a9de6cf79f65cbbdb289b44083ff67cb73f59a4354feb529f52ebdead02dd1","impliedFormat":1},{"version":"a116507f5c4b2179f191eb857d76596206e9dc91613802fdd48ef8fde984d5bf","impliedFormat":1},{"version":"4e1ec83f37a0799a2a230b894601dec99f85c0b7ffc92f1bc85b4d2b9d7c6179","impliedFormat":1},{"version":"3ec8e21b8f949429ddcb49f80b06953c81bc50f56bd6ea6e2b9803fc6ed21e99","impliedFormat":1},{"version":"75c17591283913540d8ab0be61a97890bec2cbbe3158632aa503737a5d01d305","impliedFormat":1},{"version":"308c5fc45350fad0e65005659211d0e76f9575570d31e96cf7cd4f5faeaca882","impliedFormat":1},{"version":"4075757907f808df808613e647f84e2eec99cc169e0c91923f89a7e2e8b7f800","impliedFormat":1},{"version":"10f412fc0fd47949d1d9418a3fbae318fb828eff7f69aa61f024db9209ae6f0e","impliedFormat":1},{"version":"7398929ded2d0dd4d4981a9347418168430c93f55d8beb115b240c2768c6765f","impliedFormat":1},{"version":"906d5a8bb39407372c0a2d60d84054ab851e21d6bafd38d66211e6ad80d84799","impliedFormat":1},{"version":"b612e4c32b57d4cd79286dc9fcbfef249a9ba0455872118679b44f519f29c28f","impliedFormat":1},{"version":"39b6e1763585df311b4181724eaad2a753ca7495afb542c2f33e63d953de786a","impliedFormat":1},{"version":"4bfb50ef23d2593626b2647e30a71e18d1184325ebffff77c6c5c68f245b3cc4","impliedFormat":1},{"version":"604119670b50c8df98cc681ab220c5484eaf9c7aee9734e00df00e48765c63ed","impliedFormat":1},{"version":"3dfc94ab9005f81eafa894dead73bf6e34130c55005033bae7ba756cc6e3b1ee","impliedFormat":1},{"version":"9cc1b0d60c5bccce675d462ce26a7e03addd4ec69dfaae7e173cbd68314e676a","impliedFormat":1},{"version":"5f3683471145276ddd2d6aed918849693207283a987f65789b721e2736214947","impliedFormat":1},{"version":"73e1e5ee4db9ffa857b1477cc0490f5a3ac79668440b779dc7f03031b700c0c2","impliedFormat":1},{"version":"4f3fd1ad733a6114232de679b88dab76853b99ce7ae0803c35169494c9b42548","impliedFormat":1},{"version":"fc7e1a3be1bc9b1c019eb5fcd1f20318705f60597ce1211b2d697c05318c9e80","impliedFormat":1},{"version":"e3e43b12311e8f63a41fd1a2fa76dd67d4f66446108ee82d57b59a59c8da7f73","impliedFormat":1},{"version":"6cb446928c2756082bd3da6c83df1f5427a1df039df8ae77273526281d2b2799","impliedFormat":1},{"version":"470d46ab6536b2165d6d86a91603425c92b3be9c20dca186decaf4ae21b9300c","impliedFormat":99},{"version":"72a4fc5ef7dda8bf1d65463fa461972ac503a56aa2af81aa0204f84d4fb557c0","impliedFormat":99},{"version":"a11f14e5c3a63af875cb648fd1c692373227fd0ed9593736a24963beee51baa6","impliedFormat":1},{"version":"bbb540b9a92c3fb0961c636b34deddecf827a9ace429e81521a8bad15ea2df5b","impliedFormat":1},{"version":"379d7f7530fa95c3abed897c07223640a3da8d1c7af6841f07d37b29a60ad73f","impliedFormat":1},{"version":"4b2dd0b3fdfadbca319f697b45250cc26e5b2398be90315a33d4e61dafc7f017","impliedFormat":1},{"version":"5ae4a3263f5e6f811f5f2eb1a194ddd243d2c80a6829e41be80f1bf6b8129256","impliedFormat":1},{"version":"b3a2f695df5f14c156dd240d02e6d9885d10645415658da0b472fe7510af692a","impliedFormat":1},{"version":"108d608dca853601727c878e272d985cc1725eb68fb3fa4eb41b8ad16b932df6","impliedFormat":1},{"version":"648ea4f174852dcfc84aed6109bb74be38f2284e32b0b2e4baf78043782ef88a","impliedFormat":1},{"version":"58265a050248d26b3fd1ae613370f52c6d4aeb08c01a344514e23b3e100c80d2","impliedFormat":1},{"version":"095ee967fef837fd016bc5950ac1c87965bda2c2b3ef3b6da6c0b9aa4db2225f","impliedFormat":1},{"version":"7d5c95cac1cc68fddee16cd05ce567ce2e33dd2af93beddff7f39395c343effa","impliedFormat":1},{"version":"f40cc3059b1e49c604e4b50cf295c9d3b80d070044a66b114b3c01aa26f7964b","impliedFormat":1},{"version":"3523adb9ca56693e953dff4fcbc946cc187f0427aa5aef93464b8934c9915806","impliedFormat":1},{"version":"1ebcd2800a2dc7a8092d51e76c59e44d62758e17d312927ee86dbbee77846803","impliedFormat":1},{"version":"9770fa0e3b84532fa93495f398112d3a55b5191427086c083f642699d20536a1","impliedFormat":1},{"version":"5e9d89ebe0d80018f016f536f05c3958236e777b1308e6e55ad218a91aa015da","impliedFormat":1},{"version":"60f190ada1ee8135dd5a49662782899f7219443051190e56d9cb882b552d1f0d","impliedFormat":1},{"version":"bad954dfc881df737734e8ffdc6aec87a37416c34c98829432bf952ac94e8144","impliedFormat":1},{"version":"e2ad280799dd76198bef5a0c581c165dc96c764bedebeb017cb22c3ef2ed011f","impliedFormat":1},{"version":"ff93f5776c42016e1abf0fb5597f660b0d5415b447cf1e468d8961b021aeed58","impliedFormat":1},{"version":"2046d695dd06003d8eb37c6a5e5c89559613dbb8562e5f1f0e1cdba893e2325b","impliedFormat":1},{"version":"fc493cd994a6afbfe5659466667af217565003038be4d81f7df1a0d27972183a","impliedFormat":1},{"version":"950273a47af578cebefd993f2a85057ad8deb87683cd7d6e020fbe1010439858","impliedFormat":1},{"version":"60a1a218fa5e8a818d5979e59a51722cd534b0d3cb16fb79d3186b0549361eb2","impliedFormat":1},{"version":"ae77d81a5541a8abb938a0efedf9ac4bea36fb3a24cc28cfa11c598863aba571","impliedFormat":1},{"version":"c2c2a861a338244d7dd700d0c52a78916b4bb75b98fc8ca5e7c501899fc03796","impliedFormat":1},{"version":"b6d03c9cfe2cf0ba4c673c209fcd7c46c815b2619fd2aad59fc4229aaef2ed43","impliedFormat":1},{"version":"adb467429462e3891de5bb4a82a4189b92005d61c7f9367c089baf03997c104e","impliedFormat":1},{"version":"670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","impliedFormat":1},{"version":"13b77ab19ef7aadd86a1e54f2f08ea23a6d74e102909e3c00d31f231ed040f62","impliedFormat":1},{"version":"069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9","impliedFormat":1},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"cc0d0b339f31ce0ab3b7a5b714d8e578ce698f1e13d7f8c60bfb766baeb1d35c","impliedFormat":1},{"version":"f9e22729fa06ed20f8b1fe60670b7c74933fdfd44d869ddfb1919c15a5cf12fb","impliedFormat":1},{"version":"d34aa8df2d0b18fb56b1d772ff9b3c7aea7256cf0d692f969be6e1d27b74d660","impliedFormat":1},{"version":"baac9896d29bcc55391d769e408ff400d61273d832dd500f21de766205255acb","impliedFormat":1},{"version":"2f5747b1508ccf83fad0c251ba1e5da2f5a30b78b09ffa1cfaf633045160afed","impliedFormat":1},{"version":"f429b61e369208ef7668ebf1dc63176e506fbfaea7b0ecc13d586a5839ebb071","affectsGlobalScope":true,"impliedFormat":1},{"version":"689be50b735f145624c6f391042155ae2ff6b90a93bac11ca5712bc866f6010c","impliedFormat":1},{"version":"fb893a0dfc3c9fb0f9ca93d0648694dd95f33cbad2c0f2c629f842981dfd4e2e","impliedFormat":1},{"version":"3eb11dbf3489064a47a2e1cf9d261b1f100ef0b3b50ffca6c44dd99d6dd81ac1","impliedFormat":1},{"version":"b71c603a539078a5e3a039b20f2b0a0d1708967530cf97dec8850a9ca45baa2b","impliedFormat":1},{"version":"d3f2d715f57df3f04bf7b16dde01dec10366f64fce44503c92b8f78f614c1769","impliedFormat":1},{"version":"cb90077223cc1365fa21ef0911a1f9b8f2f878943523d97350dc557973ca3823","impliedFormat":1},{"version":"18f1541b81b80d806120a3489af683edfb811deb91aeca19735d9bb2613e6311","impliedFormat":1},{"version":"94ee9ee71018d54902c3fe6730090a8a421dcad95fc372d9b69a6d5351194885","affectsGlobalScope":true,"impliedFormat":1},{"version":"232f118ae64ab84dcd26ddb60eaed5a6e44302d36249abf05e9e3fc2cbb701a2","impliedFormat":1},{"version":"963d59066dd6742da1918a6213a209bcc205b8ee53b1876ee2b4e6d80f97c85e","impliedFormat":1},{"version":"fd326577c62145816fe1acc306c734c2396487f76719d3785d4e825b34540b33","impliedFormat":1},{"version":"fab7e642480027e174565250294ba8eeeacbf7faa31c565472384bbad2deba01","affectsGlobalScope":true,"impliedFormat":1},{"version":"ee65fe452abe1309389c5f50710f24114e08a302d40708101c4aa950a2a7d044","impliedFormat":1},{"version":"d7dbe0ad36bdca8a6ecf143422a48e72cc8927bab7b23a1a2485c2f78a7022c6","impliedFormat":1},{"version":"26b7d0cd4b41ab557ef9e3bfeec42dcf24252843633e3d29f38d2c0b13aaa528","impliedFormat":1},{"version":"035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","impliedFormat":1},{"version":"a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","impliedFormat":1},{"version":"5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","impliedFormat":1},{"version":"96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","impliedFormat":1},{"version":"fec943fdb3275eb6e006b35e04a8e2e99e9adf3f4b969ddf15315ac7575a93e4","impliedFormat":1},{"version":"8e0733c50eaac49b4e84954106acc144ec1a8019922d6afcde3762523a3634af","impliedFormat":1},{"version":"8841e2aa774b89bd23302dede20663306dc1b9902431ac64b24be8b8d0e3f649","impliedFormat":1},{"version":"fbca5ffaebf282ec3cdac47b0d1d4a138a8b0bb32105251a38acb235087d3318","impliedFormat":1},{"version":"7fadb2778688ebf3fd5b8d04f63d5bf27a43a3e420bc80732d3c6239067d1a4b","impliedFormat":1},{"version":"22293bd6fa12747929f8dfca3ec1684a3fe08638aa18023dd286ab337e88a592","impliedFormat":1},{"version":"be1cc4d94ea60cbe567bc29ed479d42587bf1e6cba490f123d329976b0fe4ee5","impliedFormat":1},{"version":"8baa5d0febc68db886c40bf341e5c90dc215a90cd64552e47e8184be6b7e3358","impliedFormat":1},{"version":"8718fa41d7cf4aa91de4e8f164c90f88e0bf343aa92a1b9b725a9c675c64e16b","impliedFormat":1},{"version":"510616459e6edd01acbce333fb256e06bdffdad43ca233a9090164bf8bb83912","impliedFormat":1},{"version":"c73834a2aee5e08dea83bd8d347f131bc52f9ec5b06959165c55ef7a544cae82","impliedFormat":1},{"version":"8e04cf0688e0d921111659c2b55851957017148fa7b977b02727477d155b3c47","impliedFormat":1},{"version":"ddef25f825320de051dcb0e62ffce621b41c67712b5b4105740c32fd83f4c449","impliedFormat":1},{"version":"550650516d34048712520ffb1fce4a02f2d837761ee45c7d9868a7a35e7b0343","impliedFormat":1},{"version":"6537313aa6bd137e046dd52f48698d4075dd511886f17ee70bc1dda1b9fe1066","impliedFormat":1},{"version":"1b3dffaa4ca8e38ac434856843505af767a614d187fb3a5ef4fcebb023c355aa","impliedFormat":1},{"version":"1ba59c8bbeed2cb75b239bb12041582fa3e8ef32f8d0bd0ec802e38442d3f317","impliedFormat":1},{"version":"bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","impliedFormat":1},{"version":"26a770cec4bd2e7dbba95c6e536390fffe83c6268b78974a93727903b515c4e7","impliedFormat":1},{"version":"74d5a87c3616cd5d8691059d531504403aa857e09cbaecb1c64dfb9ace0db185","impliedFormat":1}],"root":[53,278,287,288,[608,614],734],"resolvedRoot":[[288,788]],"options":{"allowSyntheticDefaultImports":true,"composite":true,"declaration":true,"esModuleInterop":true,"jsx":4,"module":199,"outDir":"./lib","rootDir":"./src","skipLibCheck":true,"strict":true,"target":8},"referencedMap":[[288,1],[53,1],[278,2],[614,3],[612,4],[608,5],[287,6],[734,7],[610,5],[611,8],[609,5],[613,9],[226,10],[225,11],[136,12],[276,13],[131,14],[132,14],[133,15],[120,16],[121,14],[130,17],[79,1],[80,18],[109,19],[113,20],[114,14],[118,1],[110,1],[111,14],[112,21],[119,22],[115,1],[116,1],[117,23],[128,24],[123,25],[129,26],[122,1],[124,27],[125,28],[127,29],[126,1],[77,30],[71,31],[72,1],[66,1],[74,32],[69,33],[68,34],[75,35],[67,36],[76,37],[70,38],[73,39],[78,40],[81,1],[82,1],[83,1],[84,1],[85,1],[86,1],[87,1],[108,41],[88,1],[89,1],[95,1],[101,42],[98,43],[106,44],[102,45],[103,46],[104,47],[96,1],[100,47],[99,48],[105,1],[97,1],[107,49],[60,1],[90,1],[62,50],[65,51],[91,1],[63,52],[64,1],[92,1],[93,1],[94,1],[58,1],[285,1],[59,53],[738,54],[736,1],[701,55],[693,56],[702,57],[699,55],[698,58],[695,59],[694,60],[696,61],[700,62],[697,63],[620,64],[707,65],[704,66],[703,67],[708,68],[733,69],[630,70],[732,70],[627,70],[711,70],[625,70],[713,70],[635,70],[714,70],[729,1],[623,70],[726,1],[727,1],[728,1],[686,71],[681,1],[724,1],[636,1],[692,72],[731,73],[730,70],[690,70],[632,1],[687,70],[682,1],[624,74],[691,70],[683,75],[688,76],[725,1],[685,1],[634,70],[723,70],[633,70],[684,1],[722,77],[721,70],[716,1],[689,70],[628,1],[712,70],[680,78],[631,1],[717,70],[720,56],[715,1],[719,1],[718,76],[629,1],[626,79],[474,80],[352,81],[471,76],[463,82],[354,83],[289,84],[473,85],[462,86],[353,87],[355,1],[351,88],[350,70],[472,1],[676,1],[637,1],[674,1],[673,89],[638,1],[639,1],[670,90],[648,1],[640,80],[679,91],[641,1],[678,80],[646,1],[645,92],[672,1],[647,1],[675,1],[677,80],[644,1],[643,84],[642,1],[671,81],[461,93],[453,94],[451,95],[459,96],[452,1],[460,97],[458,98],[368,1],[710,99],[709,100],[655,101],[658,102],[657,103],[656,104],[654,105],[650,106],[653,107],[652,108],[651,109],[649,105],[664,110],[663,111],[662,112],[661,113],[660,114],[659,115],[235,116],[238,117],[244,118],[247,119],[268,120],[246,121],[227,1],[228,122],[229,123],[232,1],[230,1],[231,1],[269,124],[234,116],[233,1],[270,125],[237,117],[236,1],[274,126],[271,127],[241,128],[243,129],[240,130],[242,131],[239,128],[272,132],[245,116],[273,133],[248,134],[267,135],[264,136],[266,137],[251,138],[258,139],[260,140],[262,141],[261,142],[253,143],[250,136],[254,1],[265,144],[255,145],[252,1],[263,1],[249,1],[256,146],[257,1],[259,147],[210,1],[735,1],[741,148],[737,54],[739,149],[740,54],[743,150],[744,151],[749,152],[742,153],[751,154],[295,155],[294,156],[293,157],[358,158],[292,1],[748,159],[757,160],[756,159],[594,161],[759,162],[758,1],[760,1],[369,163],[465,164],[466,164],[467,164],[464,1],[470,165],[468,76],[469,76],[761,1],[762,1],[752,1],[763,166],[764,1],[765,167],[766,168],[135,1],[767,1],[592,169],[593,1],[768,170],[596,171],[597,172],[595,173],[598,174],[599,175],[600,176],[601,177],[602,178],[603,179],[604,180],[605,181],[606,182],[607,183],[357,163],[769,184],[457,1],[753,1],[770,1],[771,1],[750,1],[772,185],[538,186],[539,186],[540,187],[487,188],[541,189],[542,190],[543,191],[485,1],[544,192],[545,193],[546,194],[547,195],[548,196],[549,197],[550,197],[551,198],[552,199],[553,200],[554,201],[488,1],[486,1],[555,202],[556,203],[557,204],[558,205],[559,1],[560,206],[561,207],[562,208],[563,209],[564,210],[565,211],[566,212],[567,213],[568,214],[569,214],[570,215],[571,1],[572,216],[573,217],[575,218],[574,219],[576,220],[577,221],[578,222],[579,223],[580,224],[581,225],[582,226],[484,1],[591,227],[583,228],[584,229],[585,230],[586,231],[587,232],[588,233],[489,1],[490,234],[491,1],[492,1],[534,235],[535,236],[536,1],[537,220],[589,237],[590,238],[773,1],[621,1],[746,1],[747,1],[619,70],[774,70],[616,239],[618,239],[615,240],[54,1],[56,241],[57,70],[775,1],[776,242],[777,1],[778,243],[745,244],[780,245],[779,246],[755,247],[754,248],[781,1],[782,1],[783,153],[356,1],[784,249],[785,1],[786,250],[787,251],[290,1],[275,252],[286,253],[61,53],[291,1],[347,1],[55,1],[479,254],[476,255],[478,256],[482,256],[475,257],[483,258],[480,254],[481,259],[477,1],[224,1],[668,260],[667,261],[666,262],[665,263],[297,1],[706,264],[705,1],[669,265],[418,266],[370,267],[371,267],[410,268],[401,269],[404,270],[407,271],[408,267],[409,267],[411,272],[417,273],[456,274],[455,275],[454,273],[348,1],[375,276],[374,277],[373,278],[400,279],[399,280],[403,281],[402,280],[406,282],[405,283],[448,284],[422,285],[423,286],[424,286],[425,286],[426,286],[427,286],[428,286],[429,286],[430,286],[431,286],[432,286],[446,287],[433,286],[434,286],[435,286],[436,286],[437,286],[438,286],[439,286],[440,286],[442,286],[443,286],[441,286],[444,286],[445,286],[447,286],[421,288],[398,289],[378,290],[379,290],[380,290],[381,290],[382,290],[383,290],[384,62],[386,290],[385,290],[397,291],[387,290],[389,290],[388,290],[391,290],[390,290],[392,290],[393,290],[394,290],[395,290],[396,290],[377,290],[376,292],[372,1],[622,293],[416,294],[413,295],[414,1],[415,1],[412,296],[349,70],[617,70],[420,297],[419,298],[450,299],[449,300],[343,301],[342,302],[296,303],[341,304],[298,1],[300,305],[299,306],[304,307],[339,308],[336,309],[338,310],[301,309],[302,311],[306,311],[305,312],[303,313],[337,314],[335,309],[340,315],[333,1],[334,1],[307,316],[312,309],[314,309],[309,309],[310,316],[316,309],[317,317],[308,309],[313,309],[315,309],[311,309],[331,318],[330,309],[332,319],[326,309],[328,309],[327,309],[323,309],[329,320],[324,309],[325,321],[318,309],[319,309],[320,309],[321,309],[322,309],[344,1],[365,322],[364,1],[51,1],[52,1],[9,1],[11,1],[10,1],[2,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[3,1],[20,1],[21,1],[4,1],[22,1],[26,1],[23,1],[24,1],[25,1],[27,1],[28,1],[29,1],[5,1],[30,1],[31,1],[32,1],[33,1],[6,1],[37,1],[34,1],[35,1],[36,1],[38,1],[7,1],[39,1],[44,1],[45,1],[40,1],[41,1],[42,1],[43,1],[8,1],[49,1],[46,1],[47,1],[48,1],[1,1],[50,1],[510,323],[522,324],[508,325],[523,326],[532,327],[499,328],[500,329],[498,330],[531,185],[526,331],[530,332],[502,333],[519,334],[501,335],[529,336],[496,337],[497,331],[503,338],[504,1],[509,339],[507,338],[494,340],[533,341],[524,342],[513,343],[512,338],[514,344],[517,345],[511,346],[515,347],[527,185],[505,348],[506,349],[518,350],[495,326],[521,351],[520,338],[516,352],[525,1],[493,1],[528,353],[367,354],[363,1],[366,355],[279,1],[282,1],[283,356],[280,357],[281,358],[360,359],[359,163],[362,360],[361,361],[346,1],[345,362],[215,363],[222,364],[217,1],[218,1],[216,365],[219,366],[211,1],[212,1],[223,367],[214,368],[220,1],[221,369],[213,370],[203,371],[206,372],[204,372],[200,371],[207,373],[208,374],[205,372],[201,375],[202,376],[196,377],[141,378],[143,379],[195,1],[142,380],[199,381],[197,1],[144,378],[145,1],[194,382],[140,383],[137,1],[198,384],[138,385],[139,1],[209,386],[146,387],[147,387],[148,387],[149,387],[150,387],[151,387],[152,387],[153,387],[154,387],[155,387],[156,387],[157,387],[158,387],[160,387],[159,387],[161,387],[162,387],[163,387],[193,388],[164,387],[165,387],[166,387],[167,387],[168,387],[169,387],[170,387],[171,387],[172,387],[173,387],[174,387],[175,387],[176,387],[178,387],[177,387],[179,387],[180,387],[181,387],[182,387],[183,387],[184,387],[185,387],[186,387],[187,387],[188,387],[189,387],[192,387],[190,387],[191,387],[134,70],[277,389],[284,390]],"latestChangedDtsFile":"./lib/index.d.ts","version":"5.7.3"} \ No newline at end of file diff --git a/eslint.config.mjs b/eslint.config.mjs index 29d48e3cc2..3db74898e0 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -64,6 +64,7 @@ export default [ // TMP 'react/function-component-definition': ['off'], + '@typescript-eslint/explicit-function-return-type': ['off'], 'react/jsx-filename-extension': ['off'], 'jsdoc/check-examples': ['off'], }, @@ -82,7 +83,7 @@ export default [ }, }, { - files: ['packages/website/**/*'], + files: ['packages/website/**/*', 'adapters/**/*'], rules: { 'import/no-unresolved': 0, 'import/no-extraneous-dependencies': 0, diff --git a/lerna.json b/lerna.json index 0f0eddbd3b..0993504671 100644 --- a/lerna.json +++ b/lerna.json @@ -1,8 +1,9 @@ { "packages": [ + "adapters/*", "packages/*", "examples/*" ], "version": "4.5.4", "npmClient": "yarn" -} \ No newline at end of file +} diff --git a/package.json b/package.json index db28c21da0..f1227941fb 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "@docsearch/monorepo", "private": true, "workspaces": [ + "adapters/*", "packages/*", "examples/*" ], diff --git a/packages/docsearch-core/package.json b/packages/docsearch-core/package.json index 2a507af45a..58ccd47c07 100644 --- a/packages/docsearch-core/package.json +++ b/packages/docsearch-core/package.json @@ -3,6 +3,7 @@ "description": "Core package logic for DocSearch", "version": "4.5.4", "license": "MIT", + "type": "module", "homepage": "https://docsearch.algolia.com", "repository": { "type": "git", diff --git a/packages/docsearch-css/src/button.css b/packages/docsearch-css/src/button.css index c8af627baf..3865835b71 100644 --- a/packages/docsearch-css/src/button.css +++ b/packages/docsearch-css/src/button.css @@ -1,7 +1,7 @@ .DocSearch-Button { align-items: center; border: 1px solid var(--docsearch-subtle-color); - border-radius: 4px; + border-radius: .5rem; background-color: var(--docsearch-search-button-background); color: var(--docsearch-search-button-text-color); cursor: pointer; diff --git a/packages/docsearch-css/src/modal.css b/packages/docsearch-css/src/modal.css index 4deaf5a274..8084e60cd8 100644 --- a/packages/docsearch-css/src/modal.css +++ b/packages/docsearch-css/src/modal.css @@ -93,7 +93,7 @@ font-weight: 300; height: 100%; outline: none; - padding-block-start: 4px; + padding-block-start: 0px; padding-inline-start: 8px; width: 80%; line-height: 1.4; diff --git a/packages/docsearch-css/src/sidepanel.css b/packages/docsearch-css/src/sidepanel.css index 16645d1745..eb564e8cc5 100644 --- a/packages/docsearch-css/src/sidepanel.css +++ b/packages/docsearch-css/src/sidepanel.css @@ -339,6 +339,7 @@ html[data-theme='dark'] .DocSearch-SidepanelButton.inline:hover { font-weight: 600; line-height: 1.25rem; color: var(--docsearch-sidepanel-text-base); + margin: 0; } .DocSearch-Sidepanel-Content { diff --git a/packages/website/docs/docsearch.mdx b/packages/website/docs/docsearch.mdx index 4eef87fbba..e36965ff2b 100644 --- a/packages/website/docs/docsearch.mdx +++ b/packages/website/docs/docsearch.mdx @@ -15,6 +15,10 @@ DocSearch v4 provides a significant upgrade over previous versions, offering enh DocSearch packages are available on the [npm registry][10]. +### Docusaurus users + +If your docs site is powered by Docusaurus, use [`@docsearch/docusaurus-adapter`](/docs/docusaurus-adapter) for the latest DocSearch features (including new Ask AI capabilities such as sidepanel support), while keeping `@docusaurus/preset-classic`. + 0.5%", diff --git a/packages/website/sidebars.js b/packages/website/sidebars.js index 66a74ea93a..a708f51620 100644 --- a/packages/website/sidebars.js +++ b/packages/website/sidebars.js @@ -19,7 +19,7 @@ export default { { type: 'category', label: 'DocSearch v4', - items: ['docsearch', 'composable-api', 'styling', 'api', 'examples', 'migrating-from-v3'], + items: ['docsearch', 'docusaurus-adapter', 'composable-api', 'styling', 'api', 'examples', 'migrating-from-v3'], }, { type: 'category', diff --git a/packages/website/src/theme/Root.js b/packages/website/src/theme/Root.js deleted file mode 100644 index 25e818fa58..0000000000 --- a/packages/website/src/theme/Root.js +++ /dev/null @@ -1,101 +0,0 @@ -import { DocSearch } from '@docsearch/core'; -import { DocSearchButton, DocSearchModal } from '@docsearch/modal'; -import { Sidepanel, SidepanelButton } from '@docsearch/sidepanel'; -import BrowserOnly from '@docusaurus/BrowserOnly'; -import { useHistory } from '@docusaurus/router'; -import React from 'react'; -import { createPortal } from 'react-dom'; - -import '@docsearch/css/dist/sidepanel.css'; - -const APP_ID = 'PMZUYBQDAK'; -const API_KEY = '24b09689d5b4223813d9b8e48563c8f6'; -const ASSISTANT_ID = 'askAIDemo'; -const ASK_AI_INDEX_NAME = 'docsearch-markdown'; - -function useSearchResultUrlProcessor() { - return React.useCallback((url) => { - const parsedURL = new URL(url); - - // Otherwise => transform to relative URL for SPA navigation - const relativeUrl = `${parsedURL.pathname + parsedURL.hash}`; - - return relativeUrl; - }, []); -} - -function useNavigator() { - const history = useHistory(); - const [navigator] = React.useState(() => { - return { - navigate(params) { - history.push(params.itemUrl); - }, - }; - }); - return navigator; -} - -function useTransformItems() { - const processSearchResultUrl = useSearchResultUrlProcessor(); - const [transformItems] = React.useState(() => { - return (items) => - items.map((item) => ({ - ...item, - url: processSearchResultUrl(item.url), - })); - }); - return transformItems; -} - -export default function Root({ children }) { - const navigator = useNavigator(); - const transformItems = useTransformItems(); - - return ( - <> - {children} - - - {() => ( - - {createPortal( - <> - - - , - document.querySelector('.navbarSearchContainer_Bca1'), - )} - - - - - )} - - - ); -} diff --git a/tsconfig.base.client.json b/tsconfig.base.client.json new file mode 100644 index 0000000000..484ac83e76 --- /dev/null +++ b/tsconfig.base.client.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "moduleResolution": "bundler", + "module": "ESNext", + "target": "ESNext" + } +} diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 0000000000..bade77370d --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "rootDir": "${configDir}/src", + "outDir": "${configDir}/lib", + "composite": true, + "declaration": true, + "target": "ES2021", + "lib": ["ES2021", "DOM"], + "jsx": "react-jsx", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "resolveJsonModule": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "skipLibCheck": true, + "strict": true + } +} diff --git a/yarn.lock b/yarn.lock index 8a45ea912a..bc346ff08d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2384,6 +2384,35 @@ __metadata: languageName: unknown linkType: soft +"@docsearch/docusaurus-adapter@workspace:*, @docsearch/docusaurus-adapter@workspace:adapters/docusaurus-theme-search-algolia": + version: 0.0.0-use.local + resolution: "@docsearch/docusaurus-adapter@workspace:adapters/docusaurus-theme-search-algolia" + dependencies: + "@docsearch/react": "npm:^4.5.3" + "@docusaurus/core": "npm:^3.9.2" + "@docusaurus/module-type-aliases": "npm:3.9.2" + "@docusaurus/plugin-content-docs": "npm:^3.9.2" + "@docusaurus/theme-classic": "npm:3.9.2" + "@docusaurus/theme-common": "npm:^3.9.2" + "@docusaurus/theme-translations": "npm:^3.9.2" + "@types/fs-extra": "npm:^11.0.4" + "@types/lodash": "npm:^4.17.10" + algoliasearch: "npm:^5.37.0" + algoliasearch-helper: "npm:^3.26.0" + clsx: "npm:^2.0.0" + eta: "npm:^2.2.0" + fs-extra: "npm:^11.1.1" + joi: "npm:^17.9.2" + lodash: "npm:^4.17.21" + tslib: "npm:^2.6.0" + typescript: "npm:5.7.3" + utility-types: "npm:^3.10.0" + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + languageName: unknown + linkType: soft + "@docsearch/js-example@workspace:examples/demo-js": version: 0.0.0-use.local resolution: "@docsearch/js-example@workspace:examples/demo-js" @@ -2508,7 +2537,7 @@ __metadata: languageName: unknown linkType: soft -"@docsearch/react@npm:4.5.4, @docsearch/react@workspace:*, @docsearch/react@workspace:packages/docsearch-react": +"@docsearch/react@npm:4.5.4, @docsearch/react@npm:^4.5.3, @docsearch/react@workspace:*, @docsearch/react@workspace:packages/docsearch-react": version: 0.0.0-use.local resolution: "@docsearch/react@workspace:packages/docsearch-react" dependencies: @@ -2618,6 +2647,7 @@ __metadata: dependencies: "@docsearch/core": "workspace:*" "@docsearch/css": "workspace:*" + "@docsearch/docusaurus-adapter": "workspace:*" "@docsearch/react": "workspace:*" "@docsearch/sidepanel": "workspace:*" "@docusaurus/core": "npm:3.9.2" @@ -2711,7 +2741,7 @@ __metadata: languageName: node linkType: hard -"@docusaurus/core@npm:3.9.2": +"@docusaurus/core@npm:3.9.2, @docusaurus/core@npm:^3.9.2": version: 3.9.2 resolution: "@docusaurus/core@npm:3.9.2" dependencies: @@ -2872,7 +2902,7 @@ __metadata: languageName: node linkType: hard -"@docusaurus/plugin-content-docs@npm:3.9.2": +"@docusaurus/plugin-content-docs@npm:3.9.2, @docusaurus/plugin-content-docs@npm:^3.9.2": version: 3.9.2 resolution: "@docusaurus/plugin-content-docs@npm:3.9.2" dependencies: @@ -3097,7 +3127,7 @@ __metadata: languageName: node linkType: hard -"@docusaurus/theme-common@npm:3.9.2": +"@docusaurus/theme-common@npm:3.9.2, @docusaurus/theme-common@npm:^3.9.2": version: 3.9.2 resolution: "@docusaurus/theme-common@npm:3.9.2" dependencies: @@ -3148,7 +3178,7 @@ __metadata: languageName: node linkType: hard -"@docusaurus/theme-translations@npm:3.9.2": +"@docusaurus/theme-translations@npm:3.9.2, @docusaurus/theme-translations@npm:^3.9.2": version: 3.9.2 resolution: "@docusaurus/theme-translations@npm:3.9.2" dependencies: @@ -7332,6 +7362,16 @@ __metadata: languageName: node linkType: hard +"@types/fs-extra@npm:^11.0.4": + version: 11.0.4 + resolution: "@types/fs-extra@npm:11.0.4" + dependencies: + "@types/jsonfile": "npm:*" + "@types/node": "npm:*" + checksum: 10c0/9e34f9b24ea464f3c0b18c3f8a82aefc36dc524cc720fc2b886e5465abc66486ff4e439ea3fb2c0acebf91f6d3f74e514f9983b1f02d4243706bdbb7511796ad + languageName: node + linkType: hard + "@types/glob@npm:^7.1.1": version: 7.2.0 resolution: "@types/glob@npm:7.2.0" @@ -7434,6 +7474,15 @@ __metadata: languageName: node linkType: hard +"@types/jsonfile@npm:*": + version: 6.1.4 + resolution: "@types/jsonfile@npm:6.1.4" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/b12d068b021e4078f6ac4441353965769be87acf15326173e2aea9f3bf8ead41bd0ad29421df5bbeb0123ec3fc02eb0a734481d52903704a1454a1845896b9eb + languageName: node + linkType: hard + "@types/keyv@npm:^3.1.1": version: 3.1.4 resolution: "@types/keyv@npm:3.1.4" @@ -7443,6 +7492,13 @@ __metadata: languageName: node linkType: hard +"@types/lodash@npm:^4.17.10": + version: 4.17.23 + resolution: "@types/lodash@npm:4.17.23" + checksum: 10c0/9d9cbfb684e064a2b78aab9e220d398c9c2a7d36bc51a07b184ff382fa043a99b3d00c16c7f109b4eb8614118f4869678dbae7d5c6700ed16fb9340e26cc0bf6 + languageName: node + linkType: hard + "@types/mdast@npm:^4.0.0, @types/mdast@npm:^4.0.2": version: 4.0.4 resolution: "@types/mdast@npm:4.0.4" From be3e125ab18e46c4db32e604c04dc5bda1bccf69 Mon Sep 17 00:00:00 2001 From: Dylan Tientcheu Date: Tue, 10 Feb 2026 15:58:49 +0100 Subject: [PATCH 2/8] chore(release): include docusaurus adapter in shipjs publish list Co-authored-by: Cursor --- ship.config.mjs | 1 + 1 file changed, 1 insertion(+) diff --git a/ship.config.mjs b/ship.config.mjs index af95946dd6..50f07ca2c7 100644 --- a/ship.config.mjs +++ b/ship.config.mjs @@ -2,6 +2,7 @@ import fs from 'fs'; import path from 'path'; const packages = [ + 'adapters/docusaurus-theme-search-algolia', 'packages/docsearch-css', 'packages/docsearch-react', 'packages/docsearch-js', From 4cf853b683c9dec2c3066fb343cbbcc241bfaf30 Mon Sep 17 00:00:00 2001 From: Dylan Tientcheu Date: Tue, 10 Feb 2026 16:20:46 +0100 Subject: [PATCH 3/8] chore(docusaurus-adapter): remove libtmp and pin initial version Co-authored-by: Cursor --- .../.gitignore | 1 + .../libtmp/docSearchVersion.d.ts | 7 - .../libtmp/docSearchVersion.js | 11 -- .../libtmp/index.d.ts | 9 - .../libtmp/index.js | 54 ------ .../libtmp/opensearch.d.ts | 16 -- .../libtmp/opensearch.js | 69 -------- .../libtmp/templates/opensearch.d.ts | 8 - .../libtmp/templates/opensearch.js | 23 --- .../libtmp/utils/escapeRegexp.d.ts | 11 -- .../libtmp/utils/escapeRegexp.js | 19 -- .../libtmp/utils/index.d.ts | 8 - .../libtmp/utils/index.js | 13 -- .../libtmp/utils/normalizeUrl.d.ts | 19 -- .../libtmp/utils/normalizeUrl.js | 87 --------- .../libtmp/validateThemeConfig.d.ts | 16 -- .../libtmp/validateThemeConfig.js | 165 ------------------ .../package.json | 2 +- 18 files changed, 2 insertions(+), 536 deletions(-) delete mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/docSearchVersion.d.ts delete mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/docSearchVersion.js delete mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/index.d.ts delete mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/index.js delete mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/opensearch.d.ts delete mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/opensearch.js delete mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/templates/opensearch.d.ts delete mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/templates/opensearch.js delete mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/utils/escapeRegexp.d.ts delete mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/utils/escapeRegexp.js delete mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/utils/index.d.ts delete mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/utils/index.js delete mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/utils/normalizeUrl.d.ts delete mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/utils/normalizeUrl.js delete mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/validateThemeConfig.d.ts delete mode 100644 adapters/docusaurus-theme-search-algolia/libtmp/validateThemeConfig.js diff --git a/adapters/docusaurus-theme-search-algolia/.gitignore b/adapters/docusaurus-theme-search-algolia/.gitignore index a65b41774a..caaef74668 100644 --- a/adapters/docusaurus-theme-search-algolia/.gitignore +++ b/adapters/docusaurus-theme-search-algolia/.gitignore @@ -1 +1,2 @@ lib +libtmp diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/docSearchVersion.d.ts b/adapters/docusaurus-theme-search-algolia/libtmp/docSearchVersion.d.ts deleted file mode 100644 index 69e8d70101..0000000000 --- a/adapters/docusaurus-theme-search-algolia/libtmp/docSearchVersion.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -export declare const docSearchVersionString = "4.5.4"; diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/docSearchVersion.js b/adapters/docusaurus-theme-search-algolia/libtmp/docSearchVersion.js deleted file mode 100644 index 3ddd5f8b4b..0000000000 --- a/adapters/docusaurus-theme-search-algolia/libtmp/docSearchVersion.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.docSearchVersionString = void 0; -const react_1 = require("@docsearch/react"); -exports.docSearchVersionString = react_1.version; diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/index.d.ts b/adapters/docusaurus-theme-search-algolia/libtmp/index.d.ts deleted file mode 100644 index 8b1b08ee68..0000000000 --- a/adapters/docusaurus-theme-search-algolia/libtmp/index.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. And its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -import type { LoadContext, Plugin } from '@docusaurus/types'; -export default function themeSearchAlgolia(context: LoadContext): Plugin; -export { validateThemeConfig } from './validateThemeConfig'; diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/index.js b/adapters/docusaurus-theme-search-algolia/libtmp/index.js deleted file mode 100644 index 8eb1e88dbf..0000000000 --- a/adapters/docusaurus-theme-search-algolia/libtmp/index.js +++ /dev/null @@ -1,54 +0,0 @@ -"use strict"; -/** - * Copyright (c) Facebook, Inc. And its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.validateThemeConfig = void 0; -exports.default = themeSearchAlgolia; -const theme_translations_1 = require("@docusaurus/theme-translations"); -const opensearch_1 = require("./opensearch"); -const utils_1 = require("./utils"); -function themeSearchAlgolia(context) { - const { baseUrl, siteConfig: { themeConfig }, i18n: { currentLocale }, } = context; - const { algolia: { searchPagePath }, } = themeConfig; - return { - name: 'docsearch-docusaurus-algolia-search', - getThemePath() { - return '../lib/theme'; - }, - getTypeScriptThemePath() { - return '../src/theme'; - }, - getDefaultCodeTranslationMessages() { - return (0, theme_translations_1.readDefaultCodeTranslationMessages)({ - locale: currentLocale, - name: 'theme-search-algolia', - }); - }, - contentLoaded({ actions: { addRoute } }) { - if (searchPagePath) { - addRoute({ - path: (0, utils_1.normalizeUrl)([baseUrl, searchPagePath]), - component: '@theme/SearchPage', - exact: true, - }); - } - }, - async postBuild() { - if ((0, opensearch_1.shouldCreateOpenSearchFile)({ context })) { - await (0, opensearch_1.createOpenSearchFile)({ context }); - } - }, - injectHtmlTags() { - if ((0, opensearch_1.shouldCreateOpenSearchFile)({ context })) { - return { headTags: (0, opensearch_1.createOpenSearchHeadTags)({ context }) }; - } - return {}; - }, - }; -} -var validateThemeConfig_1 = require("./validateThemeConfig"); -Object.defineProperty(exports, "validateThemeConfig", { enumerable: true, get: function () { return validateThemeConfig_1.validateThemeConfig; } }); diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/opensearch.d.ts b/adapters/docusaurus-theme-search-algolia/libtmp/opensearch.d.ts deleted file mode 100644 index 79903d4a5b..0000000000 --- a/adapters/docusaurus-theme-search-algolia/libtmp/opensearch.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. And its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -import type { HtmlTags, LoadContext } from '@docusaurus/types'; -export declare function shouldCreateOpenSearchFile({ context }: { - context: LoadContext; -}): boolean; -export declare function createOpenSearchFile({ context }: { - context: LoadContext; -}): Promise; -export declare function createOpenSearchHeadTags({ context }: { - context: LoadContext; -}): HtmlTags; diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/opensearch.js b/adapters/docusaurus-theme-search-algolia/libtmp/opensearch.js deleted file mode 100644 index b994ee0d4e..0000000000 --- a/adapters/docusaurus-theme-search-algolia/libtmp/opensearch.js +++ /dev/null @@ -1,69 +0,0 @@ -"use strict"; -/** - * Copyright (c) Facebook, Inc. And its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.shouldCreateOpenSearchFile = shouldCreateOpenSearchFile; -exports.createOpenSearchFile = createOpenSearchFile; -exports.createOpenSearchHeadTags = createOpenSearchHeadTags; -const path_1 = __importDefault(require("path")); -const eta_1 = require("eta"); -const fs_extra_1 = __importDefault(require("fs-extra")); -const lodash_1 = __importDefault(require("lodash")); -const opensearch_1 = __importDefault(require("./templates/opensearch")); -const utils_1 = require("./utils"); -const getCompiledOpenSearchTemplate = lodash_1.default.memoize(() => (0, eta_1.compile)(opensearch_1.default.trim())); -function renderOpenSearchTemplate(data) { - const compiled = getCompiledOpenSearchTemplate(); - return compiled(data, eta_1.defaultConfig); -} -const OPEN_SEARCH_FILENAME = 'opensearch.xml'; -function shouldCreateOpenSearchFile({ context }) { - const { siteConfig: { themeConfig, future: { experimental_router: router }, }, } = context; - const { algolia: { searchPagePath }, } = themeConfig; - return Boolean(searchPagePath) && router !== 'hash'; -} -function createOpenSearchFileContent({ context, searchPagePath, }) { - const { baseUrl, siteConfig: { title, url, favicon }, } = context; - const siteUrl = (0, utils_1.normalizeUrl)([url, baseUrl]); - return renderOpenSearchTemplate({ - title, - siteUrl, - searchUrl: (0, utils_1.normalizeUrl)([siteUrl, searchPagePath]), - faviconUrl: favicon ? (0, utils_1.normalizeUrl)([siteUrl, favicon]) : null, - }); -} -async function createOpenSearchFile({ context }) { - const { outDir, siteConfig: { themeConfig }, } = context; - const { algolia: { searchPagePath }, } = themeConfig; - if (!searchPagePath) { - throw new Error('no searchPagePath provided in themeConfig.algolia'); - } - const fileContent = createOpenSearchFileContent({ context, searchPagePath }); - try { - await fs_extra_1.default.writeFile(path_1.default.join(outDir, OPEN_SEARCH_FILENAME), fileContent); - } - catch (err) { - const error = new Error('Generating OpenSearch file failed.'); - error.cause = err; - throw error; - } -} -function createOpenSearchHeadTags({ context }) { - const { baseUrl, siteConfig: { title }, } = context; - return { - tagName: 'link', - attributes: { - rel: 'search', - type: 'application/opensearchdescription+xml', - title, - href: (0, utils_1.normalizeUrl)([baseUrl, OPEN_SEARCH_FILENAME]), - }, - }; -} diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/templates/opensearch.d.ts b/adapters/docusaurus-theme-search-algolia/libtmp/templates/opensearch.d.ts deleted file mode 100644 index fc6858e83b..0000000000 --- a/adapters/docusaurus-theme-search-algolia/libtmp/templates/opensearch.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. And its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -declare const _default: "\n\n\n <%= it.title %>\n Search <%= it.title %>\n UTF-8\n <% if (it.faviconUrl) { _%>\n <%= it.faviconUrl %>\n <% } _%>\n ?q={searchTerms}\"/>\n opensearch.xml\" />\n <%= it.siteUrl %>\n\n"; -export default _default; diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/templates/opensearch.js b/adapters/docusaurus-theme-search-algolia/libtmp/templates/opensearch.js deleted file mode 100644 index 01eca622d8..0000000000 --- a/adapters/docusaurus-theme-search-algolia/libtmp/templates/opensearch.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -/** - * Copyright (c) Facebook, Inc. And its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.default = ` - - - <%= it.title %> - Search <%= it.title %> - UTF-8 - <% if (it.faviconUrl) { _%> - <%= it.faviconUrl %> - <% } _%> - - - <%= it.siteUrl %> - -`; diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/utils/escapeRegexp.d.ts b/adapters/docusaurus-theme-search-algolia/libtmp/utils/escapeRegexp.d.ts deleted file mode 100644 index bc8c6b3267..0000000000 --- a/adapters/docusaurus-theme-search-algolia/libtmp/utils/escapeRegexp.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** - * Escapes special characters in a string for use in a regular expression. - * Based on escape-string-regexp package. - */ -export declare function escapeRegexp(string: string): string; diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/utils/escapeRegexp.js b/adapters/docusaurus-theme-search-algolia/libtmp/utils/escapeRegexp.js deleted file mode 100644 index a28ea13bb4..0000000000 --- a/adapters/docusaurus-theme-search-algolia/libtmp/utils/escapeRegexp.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict"; -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.escapeRegexp = escapeRegexp; -/** - * Escapes special characters in a string for use in a regular expression. - * Based on escape-string-regexp package. - */ -function escapeRegexp(string) { - // Escape characters with special meaning either inside or outside character - // sets. Use a simple backslash escape when it's always valid, and a `\xnn` - // escape when the simpler form would be disallowed by stricter unicodeness. - return string.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&').replace(/-/g, '\\x2d'); -} diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/utils/index.d.ts b/adapters/docusaurus-theme-search-algolia/libtmp/utils/index.d.ts deleted file mode 100644 index dabe3d4600..0000000000 --- a/adapters/docusaurus-theme-search-algolia/libtmp/utils/index.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -export { normalizeUrl } from './normalizeUrl'; -export { escapeRegexp } from './escapeRegexp'; diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/utils/index.js b/adapters/docusaurus-theme-search-algolia/libtmp/utils/index.js deleted file mode 100644 index 656bef45a7..0000000000 --- a/adapters/docusaurus-theme-search-algolia/libtmp/utils/index.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.escapeRegexp = exports.normalizeUrl = void 0; -var normalizeUrl_1 = require("./normalizeUrl"); -Object.defineProperty(exports, "normalizeUrl", { enumerable: true, get: function () { return normalizeUrl_1.normalizeUrl; } }); -var escapeRegexp_1 = require("./escapeRegexp"); -Object.defineProperty(exports, "escapeRegexp", { enumerable: true, get: function () { return escapeRegexp_1.escapeRegexp; } }); diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/utils/normalizeUrl.d.ts b/adapters/docusaurus-theme-search-algolia/libtmp/utils/normalizeUrl.d.ts deleted file mode 100644 index b51acb9011..0000000000 --- a/adapters/docusaurus-theme-search-algolia/libtmp/utils/normalizeUrl.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** - * Much like `path.join`, but much better. Takes an array of URL segments, and - * joins them into a reasonable URL. - * - * - `["file:", "/home", "/user/", "website"]` => `file:///home/user/website` - * - `["file://", "home", "/user/", "website"]` => `file://home/user/website` (relative!) - * - Remove trailing slash before parameters or hash. - * - Replace `?` in query parameters with `&`. - * - Dedupe forward slashes in the entire path, avoiding protocol slashes. - * - * @throws {TypeError} If any of the URL segment is not a string, this throws. - */ -export declare function normalizeUrl(rawUrls: string[]): string; diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/utils/normalizeUrl.js b/adapters/docusaurus-theme-search-algolia/libtmp/utils/normalizeUrl.js deleted file mode 100644 index 7e2431973f..0000000000 --- a/adapters/docusaurus-theme-search-algolia/libtmp/utils/normalizeUrl.js +++ /dev/null @@ -1,87 +0,0 @@ -"use strict"; -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.normalizeUrl = normalizeUrl; -/** - * Much like `path.join`, but much better. Takes an array of URL segments, and - * joins them into a reasonable URL. - * - * - `["file:", "/home", "/user/", "website"]` => `file:///home/user/website` - * - `["file://", "home", "/user/", "website"]` => `file://home/user/website` (relative!) - * - Remove trailing slash before parameters or hash. - * - Replace `?` in query parameters with `&`. - * - Dedupe forward slashes in the entire path, avoiding protocol slashes. - * - * @throws {TypeError} If any of the URL segment is not a string, this throws. - */ -function normalizeUrl(rawUrls) { - const urls = [...rawUrls]; - const resultArray = []; - let hasStartingSlash = false; - let hasEndingSlash = false; - const isNonEmptyArray = (arr) => arr.length > 0; - if (!isNonEmptyArray(urls)) { - return ''; - } - // If the first part is a plain protocol, we combine it with the next part. - if (urls[0].match(/^[^/:]+:\/*$/) && urls.length > 1) { - const first = urls.shift(); - if (first.startsWith('file:') && urls[0].startsWith('/')) { - // Force a double slash here, else we lose the information that the next - // segment is an absolute path - urls[0] = `${first}//${urls[0]}`; - } - else { - urls[0] = first + urls[0]; - } - } - // There must be two or three slashes in the file protocol, - // two slashes in anything else. - const replacement = urls[0].match(/^file:\/\/\//) ? '$1:///' : '$1://'; - urls[0] = urls[0].replace(/^(?[^/:]+):\/*/, replacement); - for (let i = 0; i < urls.length; i += 1) { - let component = urls[i]; - if (typeof component !== 'string') { - throw new TypeError(`Url must be a string. Received ${typeof component}`); - } - if (component === '') { - if (i === urls.length - 1 && hasEndingSlash) { - resultArray.push('/'); - } - continue; - } - if (component !== '/') { - if (i > 0) { - // Removing the starting slashes for each component but the first. - component = component.replace(/^\/+/, - // Special case where the first element of rawUrls is empty - // ["", "/hello"] => /hello - component.startsWith('/') && !hasStartingSlash ? '/' : ''); - } - hasEndingSlash = component.endsWith('/'); - // Removing the ending slashes for each component but the last. For the - // last component we will combine multiple slashes to a single one. - component = component.replace(/\/+$/, i < urls.length - 1 ? '' : '/'); - } - hasStartingSlash = true; - resultArray.push(component); - } - let str = resultArray.join('/'); - // Each input component is now separated by a single slash except the possible - // first plain protocol part. - // Remove trailing slash before parameters or hash. - str = str.replace(/\/(?\?|&|#[^!/])/g, '$1'); - // Replace ? in parameters with &. - const parts = str.split('?'); - str = parts.shift() + (parts.length > 0 ? '?' : '') + parts.join('&'); - // Dedupe forward slashes in the entire path, avoiding protocol slashes. - str = str.replace(/(?[^:/]\/)\/+/g, '$1'); - // Dedupe forward slashes at the beginning of the path. - str = str.replace(/^\/+/g, '/'); - return str; -} diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/validateThemeConfig.d.ts b/adapters/docusaurus-theme-search-algolia/libtmp/validateThemeConfig.d.ts deleted file mode 100644 index 49c6d00ee7..0000000000 --- a/adapters/docusaurus-theme-search-algolia/libtmp/validateThemeConfig.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. And its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -import type { ThemeConfig } from '@docsearch/docusaurus-adapter'; -import type { ThemeConfigValidationContext } from '@docusaurus/types'; -import Joi from 'joi'; -export declare const DEFAULT_CONFIG: { - contextualSearch: true; - searchParameters: {}; - searchPagePath: string; -}; -export declare const Schema: Joi.ObjectSchema; -export declare function validateThemeConfig({ validate, themeConfig: themeConfigInput, }: ThemeConfigValidationContext): ThemeConfig; diff --git a/adapters/docusaurus-theme-search-algolia/libtmp/validateThemeConfig.js b/adapters/docusaurus-theme-search-algolia/libtmp/validateThemeConfig.js deleted file mode 100644 index ffea573580..0000000000 --- a/adapters/docusaurus-theme-search-algolia/libtmp/validateThemeConfig.js +++ /dev/null @@ -1,165 +0,0 @@ -"use strict"; -/** - * Copyright (c) Facebook, Inc. And its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Schema = exports.DEFAULT_CONFIG = void 0; -exports.validateThemeConfig = validateThemeConfig; -const joi_1 = __importDefault(require("joi")); -const docSearchVersion_1 = require("./docSearchVersion"); -const utils_1 = require("./utils"); -exports.DEFAULT_CONFIG = { - // Enabled by default, as it makes sense in most cases - // see also https://github.com/facebook/docusaurus/issues/5880 - contextualSearch: true, - searchParameters: {}, - searchPagePath: 'search', -}; -const FacetFiltersSchema = joi_1.default.array().items(joi_1.default.alternatives().try(joi_1.default.string(), joi_1.default.array().items(joi_1.default.string()))); -const AskAiSearchParametersSchema = joi_1.default.object({ - facetFilters: FacetFiltersSchema.optional(), - filters: joi_1.default.string().optional(), - attributesToRetrieve: joi_1.default.array().items(joi_1.default.string()).optional(), - restrictSearchableAttributes: joi_1.default.array().items(joi_1.default.string()).optional(), - distinct: joi_1.default.alternatives().try(joi_1.default.boolean(), joi_1.default.number(), joi_1.default.string()).optional(), -}).unknown(); -const SidePanelKeyboardShortcutsSchema = joi_1.default.object({ - 'Ctrl/Cmd+I': joi_1.default.boolean().optional(), -}); -const SidePanelSchema = joi_1.default.object({ - keyboardShortcuts: SidePanelKeyboardShortcutsSchema.optional(), - variant: joi_1.default.string().valid('floating', 'inline').optional(), - side: joi_1.default.string().valid('left', 'right').optional(), - width: joi_1.default.alternatives().try(joi_1.default.number(), joi_1.default.string()).optional(), - expandedWidth: joi_1.default.alternatives().try(joi_1.default.number(), joi_1.default.string()).optional(), - pushSelector: joi_1.default.string().optional(), - suggestedQuestions: joi_1.default.boolean().optional(), - translations: joi_1.default.object().optional().unknown(), - hideButton: joi_1.default.boolean().optional(), -}); -exports.Schema = joi_1.default.object({ - algolia: joi_1.default.object({ - // Docusaurus attributes - contextualSearch: joi_1.default.boolean().default(exports.DEFAULT_CONFIG.contextualSearch), - externalUrlRegex: joi_1.default.string().optional(), - // Algolia attributes - appId: joi_1.default.string().required().messages({ - 'any.required': '"algolia.appId" is required. If you haven\'t migrated to the new DocSearch infra, please refer to the blog post for instructions: https://docusaurus.io/blog/2021/11/21/algolia-docsearch-migration', - }), - apiKey: joi_1.default.string().required(), - indexName: joi_1.default.string().required(), - searchParameters: joi_1.default.object({ - facetFilters: FacetFiltersSchema.optional(), - }) - .default(exports.DEFAULT_CONFIG.searchParameters) - .unknown(), - searchPagePath: joi_1.default.alternatives() - .try(joi_1.default.boolean().invalid(true), joi_1.default.string()) - .allow(null) - .default(exports.DEFAULT_CONFIG.searchPagePath), - replaceSearchResultPathname: joi_1.default.object({ - from: joi_1.default.custom((from) => { - if (typeof from === 'string') { - return (0, utils_1.escapeRegexp)(from); - } - if (from instanceof RegExp) { - return from.source; - } - throw new Error(`it should be a RegExp or a string, but received ${from}`); - }).required(), - to: joi_1.default.string().required(), - }).optional(), - // Ask AI configuration (DocSearch v4 only) - askAi: joi_1.default.alternatives() - .try( - // Simple string format (assistantId only) - joi_1.default.string(), - // Full configuration object - joi_1.default.object({ - assistantId: joi_1.default.string().required(), - // Optional Ask AI configuration - indexName: joi_1.default.string().optional(), - apiKey: joi_1.default.string().optional(), - appId: joi_1.default.string().optional(), - agentStudio: joi_1.default.boolean().optional(), - searchParameters: AskAiSearchParametersSchema, - suggestedQuestions: joi_1.default.boolean().optional(), - sidePanel: joi_1.default.alternatives().try(joi_1.default.boolean(), SidePanelSchema).optional(), - })) - .custom((askAiInput, helpers) => { - if (!askAiInput) { - return askAiInput; - } - const algolia = helpers.state.ancestors[0]; - const algoliaFacetFilters = algolia.searchParameters?.facetFilters; - if (typeof askAiInput === 'string') { - return { - assistantId: askAiInput, - indexName: algolia.indexName, - apiKey: algolia.apiKey, - appId: algolia.appId, - ...(algoliaFacetFilters - ? { - searchParameters: { - facetFilters: algoliaFacetFilters, - }, - } - : {}), - }; - } - // Fill in missing fields with the top-level Algolia config - const normalizedAskAi = { ...askAiInput }; - normalizedAskAi.indexName = normalizedAskAi.indexName ?? algolia.indexName; - normalizedAskAi.apiKey = normalizedAskAi.apiKey ?? algolia.apiKey; - normalizedAskAi.appId = normalizedAskAi.appId ?? algolia.appId; - if (normalizedAskAi.agentStudio !== true && - normalizedAskAi.searchParameters?.facetFilters === undefined && - algoliaFacetFilters) { - normalizedAskAi.searchParameters = { - ...(normalizedAskAi.searchParameters ?? {}), - facetFilters: algoliaFacetFilters, - }; - } - return normalizedAskAi; - }) - .optional() - .messages({ - 'alternatives.types': 'askAi must be either a string (assistantId) or an object with indexName, apiKey, appId, and assistantId', - }), - }) - .label('themeConfig.algolia') - .required() - .unknown(), -}); -function ensureSidepanelSupported(themeConfig) { - const sidePanelEnabled = themeConfig.algolia.askAi && - typeof themeConfig.algolia.askAi === 'object' && - Boolean(themeConfig.algolia.askAi.sidePanel); - if (!sidePanelEnabled) { - return; - } - const isSidepanelSupported = (() => { - const match = docSearchVersion_1.docSearchVersionString.match(/^(?\d+)\.(?\d+)/); - if (!match?.groups) { - return false; - } - const major = Number(match.groups.major); - const minor = Number(match.groups.minor); - return major > 4 || (major === 4 && minor >= 5); - })(); - if (!isSidepanelSupported) { - throw new Error('The askAi.sidePanel feature is only supported in DocSearch v4.5+. ' + - 'Please upgrade to DocSearch v4.5+ or remove the askAi.sidePanel configuration.'); - } -} -function validateThemeConfig({ validate, themeConfig: themeConfigInput, }) { - const themeConfig = validate(exports.Schema, themeConfigInput); - ensureSidepanelSupported(themeConfig); - return themeConfig; -} diff --git a/adapters/docusaurus-theme-search-algolia/package.json b/adapters/docusaurus-theme-search-algolia/package.json index 9f888ff44d..a366303ff4 100644 --- a/adapters/docusaurus-theme-search-algolia/package.json +++ b/adapters/docusaurus-theme-search-algolia/package.json @@ -1,6 +1,6 @@ { "name": "@docsearch/docusaurus-adapter", - "version": "3.9.2", + "version": "4.5.4", "description": "Algolia search component for Docusaurus.", "main": "lib/index.js", "sideEffects": [ From 96b8d11114f50c9b5d417d6e7f933a0682fbaddc Mon Sep 17 00:00:00 2001 From: Dylan Tientcheu Date: Tue, 10 Feb 2026 16:56:32 +0100 Subject: [PATCH 4/8] fix: issue with footer --- .../.gitignore | 1 + .../src/__tests__/validateThemeConfig.test.ts | 3 +- .../src/theme/SearchBar/index.tsx | 29 ++++++++++++++----- .../src/theme/SearchPage/index.tsx | 26 ++++++++++------- .../src/validateThemeConfig.ts | 15 ++++------ .../tsconfig.client.tsbuildinfo | 1 - .../tsconfig.tsbuildinfo | 1 - 7 files changed, 46 insertions(+), 30 deletions(-) delete mode 100644 adapters/docusaurus-theme-search-algolia/tsconfig.client.tsbuildinfo delete mode 100644 adapters/docusaurus-theme-search-algolia/tsconfig.tsbuildinfo diff --git a/adapters/docusaurus-theme-search-algolia/.gitignore b/adapters/docusaurus-theme-search-algolia/.gitignore index caaef74668..c1ac5932f7 100644 --- a/adapters/docusaurus-theme-search-algolia/.gitignore +++ b/adapters/docusaurus-theme-search-algolia/.gitignore @@ -1,2 +1,3 @@ lib libtmp +*.tsbuildinfo diff --git a/adapters/docusaurus-theme-search-algolia/src/__tests__/validateThemeConfig.test.ts b/adapters/docusaurus-theme-search-algolia/src/__tests__/validateThemeConfig.test.ts index 9cffb5f855..4251f03a7d 100644 --- a/adapters/docusaurus-theme-search-algolia/src/__tests__/validateThemeConfig.test.ts +++ b/adapters/docusaurus-theme-search-algolia/src/__tests__/validateThemeConfig.test.ts @@ -7,11 +7,12 @@ import type { ThemeConfig, UserThemeConfig } from '@docsearch/docusaurus-adapter'; import type Joi from 'joi'; +import { describe, expect, it, vi } from 'vitest'; import { DEFAULT_CONFIG, validateThemeConfig } from '../validateThemeConfig'; // mock DocSearch to a v4.5 version to allow AskAI sidepanel tests to pass -jest.mock('@docsearch/react', () => ({ version: '4.5.3' })); +vi.mock('@docsearch/react', () => ({ version: '4.5.3' })); type AlgoliaInput = UserThemeConfig['algolia']; type DocSearchInput = UserThemeConfig['docsearch']; diff --git a/adapters/docusaurus-theme-search-algolia/src/theme/SearchBar/index.tsx b/adapters/docusaurus-theme-search-algolia/src/theme/SearchBar/index.tsx index b558b1a2b9..6b952a66e6 100644 --- a/adapters/docusaurus-theme-search-algolia/src/theme/SearchBar/index.tsx +++ b/adapters/docusaurus-theme-search-algolia/src/theme/SearchBar/index.tsx @@ -23,8 +23,9 @@ import { useDocSearchKeyboardEvents } from '@docsearch/react/useDocSearchKeyboar import Head from '@docusaurus/Head'; import Link from '@docusaurus/Link'; import { useHistory } from '@docusaurus/router'; -import { isRegexpStringMatch, useSearchLinkCreator } from '@docusaurus/theme-common'; +import { isRegexpStringMatch } from '@docusaurus/theme-common'; import Translate from '@docusaurus/Translate'; +import useBaseUrl from '@docusaurus/useBaseUrl'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import translations from '@theme/SearchTranslations'; import type { FacetFilters } from 'algoliasearch/lite'; @@ -143,13 +144,17 @@ function useTransformItems(props: Pick) { function useResultsFooterComponent({ closeModal, + searchPagePath, }: { closeModal: () => void; + searchPagePath?: string; }): DocSearchProps['resultsFooterComponent'] { return useMemo( () => - ({ state }) => , - [closeModal], + searchPagePath + ? ({ state }) => + : undefined, + [closeModal, searchPagePath], ); } @@ -160,14 +165,18 @@ function Hit({ hit, children }: { hit: InternalDocSearchHit | StoredDocSearchHit type ResultsFooterProps = { state: AutocompleteState; onClose: () => void; + searchPagePath: string; }; -function ResultsFooter({ state, onClose }: ResultsFooterProps) { - const createSearchLink = useSearchLinkCreator(); +function ResultsFooter({ state, onClose, searchPagePath }: ResultsFooterProps) { + const searchPageLink = useBaseUrl(searchPagePath); const nbHits = (state.context as { nbHits?: number }).nbHits ?? 0; + const searchLink = state.query + ? `${searchPageLink}${searchPageLink.includes('?') ? '&' : '?'}q=${encodeURIComponent(state.query)}` + : searchPageLink; return ( - + {'See all {count} results'} @@ -279,7 +288,11 @@ function DocSearch({ externalUrlRegex, ...props }: AlgoliaSearchBarProps) { [openModal], ); - const resultsFooterComponent = useResultsFooterComponent({ closeModal }); + const resultsFooterSearchPagePath = typeof props.searchPagePath === 'string' ? props.searchPagePath : undefined; + const resultsFooterComponent = useResultsFooterComponent({ + closeModal, + searchPagePath: resultsFooterSearchPagePath, + }); useDocSearchKeyboardEvents({ isOpen, @@ -345,7 +358,7 @@ function DocSearch({ externalUrlRegex, ...props }: AlgoliaSearchBarProps) { return true; }} onClose={closeModal} - {...(props.searchPagePath && { + {...(resultsFooterSearchPagePath && { resultsFooterComponent, })} placeholder={currentPlaceholder} diff --git a/adapters/docusaurus-theme-search-algolia/src/theme/SearchPage/index.tsx b/adapters/docusaurus-theme-search-algolia/src/theme/SearchPage/index.tsx index 75e398e12f..57e1cabe3c 100644 --- a/adapters/docusaurus-theme-search-algolia/src/theme/SearchPage/index.tsx +++ b/adapters/docusaurus-theme-search-algolia/src/theme/SearchPage/index.tsx @@ -92,9 +92,10 @@ function SearchVersionSelectList({ key={pluginId} defaultValue={docsSearchVersionsHelpers.searchVersions[pluginId]} className={styles.searchVersionInput} - onChange={(e) => docsSearchVersionsHelpers.setSearchVersion(pluginId, e.target.value)} + onBlur={(e) => docsSearchVersionsHelpers.setSearchVersion(pluginId, e.target.value)} > {docsData.versions.map((version, i) => ( + // eslint-disable-next-line react/no-array-index-key