@graphql-yoga/render-graphiql 5.18.1-alpha-20260127131538-66c36e2fed5dae50d2fa29797772599af69094ae → 5.18.1-alpha-20260127154041-2b82606fad30bedc0248544c6ab47175798d7b8f
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/graphiql.cjs +16 -0
- package/dist/graphiql.mjs +10 -0
- package/dist/index.cjs +46 -0
- package/dist/index.d.cts +7 -0
- package/dist/index.d.mts +7 -0
- package/dist/index.mjs +46 -0
- package/dist/node_modules/@graphql-tools/utils/typings/errors.d.cts +9 -0
- package/dist/node_modules/@graphql-tools/utils/typings/errors.d.mts +9 -0
- package/dist/node_modules/@graphql-tools/utils/typings/index.d.cts +1 -0
- package/dist/node_modules/@graphql-tools/utils/typings/index.d.mts +1 -0
- package/dist/node_modules/@whatwg-node/fetch/dist/index.d.cts +72 -0
- package/dist/node_modules/@whatwg-node/fetch/dist/index.d.mts +72 -0
- package/dist/node_modules/@whatwg-node/server/typings/createServerAdapter.d.cts +2 -0
- package/dist/node_modules/@whatwg-node/server/typings/createServerAdapter.d.mts +2 -0
- package/dist/node_modules/@whatwg-node/server/typings/index.d.cts +9 -0
- package/dist/node_modules/@whatwg-node/server/typings/index.d.mts +9 -0
- package/dist/node_modules/@whatwg-node/server/typings/plugins/types.d.cts +1 -0
- package/dist/node_modules/@whatwg-node/server/typings/plugins/types.d.mts +1 -0
- package/dist/node_modules/@whatwg-node/server/typings/plugins/useContentEncoding.d.cts +1 -0
- package/dist/node_modules/@whatwg-node/server/typings/plugins/useContentEncoding.d.mts +1 -0
- package/dist/node_modules/@whatwg-node/server/typings/plugins/useCors.d.cts +1 -0
- package/dist/node_modules/@whatwg-node/server/typings/plugins/useCors.d.mts +1 -0
- package/dist/node_modules/@whatwg-node/server/typings/plugins/useErrorHandling.d.cts +1 -0
- package/dist/node_modules/@whatwg-node/server/typings/plugins/useErrorHandling.d.mts +1 -0
- package/dist/node_modules/@whatwg-node/server/typings/types.d.cts +3 -0
- package/dist/node_modules/@whatwg-node/server/typings/types.d.mts +3 -0
- package/dist/node_modules/@whatwg-node/server/typings/utils.d.cts +1 -0
- package/dist/node_modules/@whatwg-node/server/typings/utils.d.mts +1 -0
- package/dist/node_modules/@whatwg-node/server/typings/uwebsockets.d.cts +1 -0
- package/dist/node_modules/@whatwg-node/server/typings/uwebsockets.d.mts +1 -0
- package/dist/packages/graphql-yoga/node_modules/@graphql-tools/schema/node_modules/@graphql-tools/utils/typings/errors.d.cts +9 -0
- package/dist/packages/graphql-yoga/node_modules/@graphql-tools/schema/node_modules/@graphql-tools/utils/typings/errors.d.mts +9 -0
- package/dist/packages/graphql-yoga/node_modules/@graphql-tools/schema/node_modules/@graphql-tools/utils/typings/index.d.cts +1 -0
- package/dist/packages/graphql-yoga/node_modules/@graphql-tools/schema/node_modules/@graphql-tools/utils/typings/index.d.mts +1 -0
- package/dist/packages/graphql-yoga/node_modules/@graphql-tools/schema/typings/addResolversToSchema.d.cts +1 -0
- package/dist/packages/graphql-yoga/node_modules/@graphql-tools/schema/typings/addResolversToSchema.d.mts +1 -0
- package/dist/packages/graphql-yoga/node_modules/@graphql-tools/schema/typings/assertResolversPresent.d.cts +1 -0
- package/dist/packages/graphql-yoga/node_modules/@graphql-tools/schema/typings/assertResolversPresent.d.mts +1 -0
- package/dist/packages/graphql-yoga/node_modules/@graphql-tools/schema/typings/chainResolvers.d.cts +1 -0
- package/dist/packages/graphql-yoga/node_modules/@graphql-tools/schema/typings/chainResolvers.d.mts +1 -0
- package/dist/packages/graphql-yoga/node_modules/@graphql-tools/schema/typings/checkForResolveTypeResolver.d.cts +1 -0
- package/dist/packages/graphql-yoga/node_modules/@graphql-tools/schema/typings/checkForResolveTypeResolver.d.mts +1 -0
- package/dist/packages/graphql-yoga/node_modules/@graphql-tools/schema/typings/extendResolversFromInterfaces.d.cts +1 -0
- package/dist/packages/graphql-yoga/node_modules/@graphql-tools/schema/typings/extendResolversFromInterfaces.d.mts +1 -0
- package/dist/packages/graphql-yoga/node_modules/@graphql-tools/schema/typings/index.d.cts +9 -0
- package/dist/packages/graphql-yoga/node_modules/@graphql-tools/schema/typings/index.d.mts +9 -0
- package/dist/packages/graphql-yoga/node_modules/@graphql-tools/schema/typings/makeExecutableSchema.d.cts +1 -0
- package/dist/packages/graphql-yoga/node_modules/@graphql-tools/schema/typings/makeExecutableSchema.d.mts +1 -0
- package/dist/packages/graphql-yoga/node_modules/@graphql-tools/schema/typings/merge-schemas.d.cts +1 -0
- package/dist/packages/graphql-yoga/node_modules/@graphql-tools/schema/typings/merge-schemas.d.mts +1 -0
- package/dist/packages/graphql-yoga/node_modules/@graphql-tools/schema/typings/types.d.cts +1 -0
- package/dist/packages/graphql-yoga/node_modules/@graphql-tools/schema/typings/types.d.mts +1 -0
- package/dist/packages/graphql-yoga/src/index.d.cts +16 -0
- package/dist/packages/graphql-yoga/src/index.d.mts +16 -0
- package/dist/packages/graphql-yoga/src/plugins/result-processor/regular.d.cts +2 -0
- package/dist/packages/graphql-yoga/src/plugins/result-processor/regular.d.mts +2 -0
- package/dist/packages/graphql-yoga/src/plugins/result-processor/sse.d.cts +1 -0
- package/dist/packages/graphql-yoga/src/plugins/result-processor/sse.d.mts +1 -0
- package/dist/packages/graphql-yoga/src/plugins/types.d.cts +4 -0
- package/dist/packages/graphql-yoga/src/plugins/types.d.mts +4 -0
- package/dist/packages/graphql-yoga/src/plugins/use-error-coordinate.d.cts +1 -0
- package/dist/packages/graphql-yoga/src/plugins/use-error-coordinate.d.mts +1 -0
- package/dist/packages/graphql-yoga/src/plugins/use-execution-cancellation.d.cts +1 -0
- package/dist/packages/graphql-yoga/src/plugins/use-execution-cancellation.d.mts +1 -0
- package/dist/packages/graphql-yoga/src/plugins/use-graphiql.d.cts +132 -0
- package/dist/packages/graphql-yoga/src/plugins/use-graphiql.d.mts +132 -0
- package/dist/packages/graphql-yoga/src/plugins/use-parser-and-validation-cache.d.cts +1 -0
- package/dist/packages/graphql-yoga/src/plugins/use-parser-and-validation-cache.d.mts +1 -0
- package/dist/packages/graphql-yoga/src/plugins/use-readiness-check.d.cts +2 -0
- package/dist/packages/graphql-yoga/src/plugins/use-readiness-check.d.mts +2 -0
- package/dist/packages/graphql-yoga/src/plugins/use-schema.d.cts +2 -0
- package/dist/packages/graphql-yoga/src/plugins/use-schema.d.mts +2 -0
- package/dist/packages/graphql-yoga/src/plugins/use-unhandled-route.d.cts +2 -0
- package/dist/packages/graphql-yoga/src/plugins/use-unhandled-route.d.mts +2 -0
- package/dist/packages/graphql-yoga/src/schema.d.cts +2 -0
- package/dist/packages/graphql-yoga/src/schema.d.mts +2 -0
- package/dist/packages/graphql-yoga/src/server.d.cts +8 -0
- package/dist/packages/graphql-yoga/src/server.d.mts +8 -0
- package/dist/packages/graphql-yoga/src/types.d.cts +5 -0
- package/dist/packages/graphql-yoga/src/types.d.mts +5 -0
- package/dist/packages/graphql-yoga/src/utils/mask-error.d.cts +1 -0
- package/dist/packages/graphql-yoga/src/utils/mask-error.d.mts +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
|
|
2
|
+
//#region src/graphiql.ts
|
|
3
|
+
const js = "(function(global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react'), require('react-dom/client'), require('graphiql/style.css'), require('@graphiql/plugin-explorer/style.css'), require('graphiql'), require('graphql'), require('@graphiql/plugin-explorer'), require('@graphql-tools/url-loader'), require('json-bigint-patch'), require('react/jsx-runtime')) :\n typeof define === 'function' && define.amd ? define(['exports', 'react', 'react-dom/client', 'graphiql/style.css', '@graphiql/plugin-explorer/style.css', 'graphiql', 'graphql', '@graphiql/plugin-explorer', '@graphql-tools/url-loader', 'json-bigint-patch', 'react/jsx-runtime'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.YogaGraphiQL = {}), global.react,global.react_dom_client,global.graphiql_style_css,global._graphiql_plugin_explorer_style_css,global.graphiql,global.graphql,global._graphiql_plugin_explorer,global._graphql_tools_url_loader,global.json_bigint_patch,global.react_jsx_runtime));\n})(this, function(exports, react, react_dom_client, graphiql_style_css, _graphiql_plugin_explorer_style_css, graphiql, graphql, _graphiql_plugin_explorer, _graphql_tools_url_loader, json_bigint_patch, react_jsx_runtime) {\n//#region rolldown:runtime\n var __create = Object.create;\n var __defProp = Object.defineProperty;\n var __getOwnPropDesc = Object.getOwnPropertyDescriptor;\n var __getOwnPropNames = Object.getOwnPropertyNames;\n var __getProtoOf = Object.getPrototypeOf;\n var __hasOwnProp = Object.prototype.hasOwnProperty;\n var __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {\n key = keys[i];\n if (!__hasOwnProp.call(to, key) && key !== except) {\n __defProp(to, key, {\n get: ((k) => from[k]).bind(null, key),\n enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable\n });\n }\n }\n }\n return to;\n };\n var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", {\n value: mod,\n enumerable: true\n }) : target, mod));\n\n//#endregion\nreact = __toESM(react);\n\n//#region src/YogaLogo.tsx\n const YogaLogo = () => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"svg\", {\n viewBox: \"0 0 90 90\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"path\", {\n d: \"M21 25.35c.728 0 1.42.156 2.043.435l19.1-10.985c.9-.5 2-.8 3-.8 1.1 0 2.1.3 3 .8l16.4 9.5c-1.2.8-2.1 2-2.7 3.4l-15.9-9.2c-.3-.2-.599-.2-.899-.2-.3 0-.6.1-.9.2L25.823 29.025A5.005 5.005 0 0 1 21 35.35a5 5 0 0 1 0-10Z\",\n fill: \"url(#a)\"\n }),\n /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"path\", {\n d: \"M67.244 35.033A5.002 5.002 0 0 1 69 25.35a5 5 0 0 1 2.544 9.305V55.2c0 2.2-1.2 4.2-3 5.3l-16.4 9.4c0-1.5-.5-3-1.4-4.1l15.6-9c.6-.3.9-.9.9-1.6V35.033Z\",\n fill: \"url(#b)\"\n }),\n /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"path\", {\n d: \"M49.844 69.106a5 5 0 1 1-9.78 2.043L21.843 60.6c-1.9-1.1-3-3.1-3-5.3V36.8c.7.2 1.5.4 2.2.4.7 0 1.4-.1 2-.3v18.4c0 .7.4 1.3.9 1.6l17.382 10.058a5.002 5.002 0 0 1 8.516 2.14l.002.002v.006Z\",\n fill: \"url(#c)\"\n }),\n /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"mask\", {\n id: \"g\",\n style: { maskType: \"alpha\" },\n maskUnits: \"userSpaceOnUse\",\n x: 16,\n y: 14,\n width: 58,\n height: 62,\n children: [\n /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"path\", {\n d: \"M21 25.35c.728 0 1.42.156 2.043.435l19.1-10.985c.9-.5 2-.8 3-.8 1.1 0 2.1.3 3 .8l16.4 9.5c-1.2.8-2.1 2-2.7 3.4l-15.9-9.2c-.3-.2-.599-.2-.899-.2-.3 0-.6.1-.9.2L25.823 29.025A5.005 5.005 0 0 1 21 35.35a5 5 0 0 1 0-10Z\",\n fill: \"url(#d)\"\n }),\n /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"path\", {\n d: \"M67.244 35.033A5.002 5.002 0 0 1 69 25.35a5 5 0 0 1 2.544 9.305V55.2c0 2.2-1.2 4.2-3 5.3l-16.4 9.4c0-1.5-.5-3-1.4-4.1l15.6-9c.6-.3.9-.9.9-1.6V35.033Z\",\n fill: \"url(#e)\"\n }),\n /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"path\", {\n d: \"M49.844 69.106a5 5 0 1 1-9.78 2.043L21.843 60.6c-1.9-1.1-3-3.1-3-5.3V36.8c.7.2 1.5.4 2.2.4.7 0 1.4-.1 2-.3v18.4c0 .7.4 1.3.9 1.6l17.382 10.058a5.002 5.002 0 0 1 8.516 2.14l.002.002v.006Z\",\n fill: \"url(#f)\"\n })\n ]\n }),\n /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"g\", {\n mask: \"url(#g)\",\n children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"g\", {\n filter: \"url(#h)\",\n children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"circle\", {\n cx: 73,\n cy: 25,\n r: 26,\n fill: \"#ED2E7E\"\n })\n }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"g\", {\n filter: \"url(#i)\",\n children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"circle\", {\n cx: 26,\n cy: 69,\n r: 26,\n fill: \"#1CC8EE\"\n })\n })]\n }),\n /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M49.395 32.395c0 2.314-1.815 6.152-4.395 6.152-2.573 0-4.395-3.836-4.395-6.152A4.4 4.4 0 0 1 45 28a4.4 4.4 0 0 1 4.395 4.395ZM35.331 49.043v-.828c0-5.403 2.521-7.215 4.548-8.67.513-.368.98-.705 1.369-1.07 1.08 1.19 2.377 1.83 3.751 1.83 1.375 0 2.672-.64 3.753-1.83.388.366.855.702 1.367 1.07 2.027 1.455 4.548 3.267 4.548 8.67v.828l-.827.049c-3.856.227-6.976-2.192-8.841-5.514-1.884 3.357-5.015 5.74-8.84 5.514l-.828-.049Zm22.814 2.032c-1.128-.184-8.133-1.324-13.145 4.618-4.99-5.938-11.804-4.834-13.091-4.625a1.74 1.74 0 0 1-.21.028l.002.023c.024.281.266 3.156 2.355 5.123L30 58h30l-4.104-1.758c1.958-1.766 2.244-3.973 2.355-4.833.019-.146.033-.253.049-.313a1.388 1.388 0 0 1-.154-.021Zm-17.662-.971c1.912-.783 3.19-1.93 4.516-3.494 1.332 1.574 2.616 2.716 4.516 3.494l.06.114.01.021c-1.495.574-3.16 1.586-4.581 2.905-1.414-1.322-3.038-2.324-4.58-2.929l.059-.111Z\",\n fill: \"url(#j)\"\n }),\n /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"mask\", {\n id: \"k\",\n style: { maskType: \"alpha\" },\n maskUnits: \"userSpaceOnUse\",\n x: 30,\n y: 28,\n width: 30,\n height: 30,\n children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M49.395 32.395c0 2.314-1.815 6.152-4.395 6.152-2.573 0-4.395-3.836-4.395-6.152A4.4 4.4 0 0 1 45 28a4.4 4.4 0 0 1 4.395 4.395ZM35.331 49.043v-.828c0-5.403 2.521-7.215 4.548-8.67.513-.368.98-.705 1.369-1.07 1.08 1.19 2.377 1.83 3.751 1.83 1.375 0 2.672-.64 3.753-1.83.388.366.855.702 1.367 1.07 2.027 1.455 4.548 3.267 4.548 8.67v.828l-.827.049c-3.856.227-6.976-2.192-8.841-5.514-1.884 3.357-5.015 5.74-8.84 5.514l-.828-.049Zm22.814 2.032c-1.128-.184-8.133-1.324-13.145 4.618-4.99-5.938-11.804-4.834-13.091-4.625a1.74 1.74 0 0 1-.21.028l.002.023c.024.281.266 3.156 2.355 5.123L30 58h30l-4.104-1.758c1.958-1.766 2.244-3.973 2.355-4.833.019-.146.033-.253.049-.313a1.388 1.388 0 0 1-.154-.021Zm-17.662-.971c1.912-.783 3.19-1.93 4.516-3.494 1.332 1.574 2.616 2.716 4.516 3.494l.06.114.01.021c-1.495.574-3.16 1.586-4.581 2.905-1.414-1.322-3.038-2.324-4.58-2.929l.059-.111Z\",\n fill: \"#000\"\n })\n }),\n /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"g\", {\n mask: \"url(#k)\",\n children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"g\", {\n filter: \"url(#l)\",\n children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"circle\", {\n cx: 38,\n cy: 6,\n r: 26,\n fill: \"#ED2E7E\"\n })\n }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"g\", {\n filter: \"url(#m)\",\n children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"circle\", {\n cx: 63,\n cy: 69,\n r: 26,\n fill: \"#1CC8EE\"\n })\n })]\n }),\n /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"defs\", { children: [\n /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"linearGradient\", {\n id: \"a\",\n x1: 16,\n y1: 14,\n x2: 87.213,\n y2: 44.598,\n gradientUnits: \"userSpaceOnUse\",\n children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"stop\", { stopColor: \"#7433FF\" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"stop\", {\n offset: 1,\n stopColor: \"#FFA3FD\"\n })]\n }),\n /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"linearGradient\", {\n id: \"b\",\n x1: 16,\n y1: 14,\n x2: 87.213,\n y2: 44.598,\n gradientUnits: \"userSpaceOnUse\",\n children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"stop\", { stopColor: \"#7433FF\" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"stop\", {\n offset: 1,\n stopColor: \"#FFA3FD\"\n })]\n }),\n /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"linearGradient\", {\n id: \"c\",\n x1: 16,\n y1: 14,\n x2: 87.213,\n y2: 44.598,\n gradientUnits: \"userSpaceOnUse\",\n children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"stop\", { stopColor: \"#7433FF\" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"stop\", {\n offset: 1,\n stopColor: \"#FFA3FD\"\n })]\n }),\n /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"linearGradient\", {\n id: \"d\",\n x1: 16,\n y1: 14,\n x2: 87.213,\n y2: 44.598,\n gradientUnits: \"userSpaceOnUse\",\n children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"stop\", { stopColor: \"#7433FF\" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"stop\", {\n offset: 1,\n stopColor: \"#FFA3FD\"\n })]\n }),\n /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"linearGradient\", {\n id: \"e\",\n x1: 16,\n y1: 14,\n x2: 87.213,\n y2: 44.598,\n gradientUnits: \"userSpaceOnUse\",\n children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"stop\", { stopColor: \"#7433FF\" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"stop\", {\n offset: 1,\n stopColor: \"#FFA3FD\"\n })]\n }),\n /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"linearGradient\", {\n id: \"f\",\n x1: 16,\n y1: 14,\n x2: 87.213,\n y2: 44.598,\n gradientUnits: \"userSpaceOnUse\",\n children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"stop\", { stopColor: \"#7433FF\" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"stop\", {\n offset: 1,\n stopColor: \"#FFA3FD\"\n })]\n }),\n /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"linearGradient\", {\n id: \"j\",\n x1: 30,\n y1: 28,\n x2: 66.165,\n y2: 44.436,\n gradientUnits: \"userSpaceOnUse\",\n children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"stop\", { stopColor: \"#7433FF\" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"stop\", {\n offset: 1,\n stopColor: \"#FFA3FD\"\n })]\n }),\n /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"filter\", {\n id: \"h\",\n x: 23,\n y: -25,\n width: 100,\n height: 100,\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\",\n children: [\n /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"feFlood\", {\n floodOpacity: 0,\n result: \"BackgroundImageFix\"\n }),\n /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"feBlend\", {\n in: \"SourceGraphic\",\n in2: \"BackgroundImageFix\",\n result: \"shape\"\n }),\n /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"feGaussianBlur\", {\n stdDeviation: 12,\n result: \"effect1_foregroundBlur_1677_11483\"\n })\n ]\n }),\n /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"filter\", {\n id: \"i\",\n x: -24,\n y: 19,\n width: 100,\n height: 100,\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\",\n children: [\n /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"feFlood\", {\n floodOpacity: 0,\n result: \"BackgroundImageFix\"\n }),\n /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"feBlend\", {\n in: \"SourceGraphic\",\n in2: \"BackgroundImageFix\",\n result: \"shape\"\n }),\n /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"feGaussianBlur\", {\n stdDeviation: 12,\n result: \"effect1_foregroundBlur_1677_11483\"\n })\n ]\n }),\n /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"filter\", {\n id: \"l\",\n x: -12,\n y: -44,\n width: 100,\n height: 100,\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\",\n children: [\n /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"feFlood\", {\n floodOpacity: 0,\n result: \"BackgroundImageFix\"\n }),\n /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"feBlend\", {\n in: \"SourceGraphic\",\n in2: \"BackgroundImageFix\",\n result: \"shape\"\n }),\n /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"feGaussianBlur\", {\n stdDeviation: 12,\n result: \"effect1_foregroundBlur_1677_11483\"\n })\n ]\n }),\n /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"filter\", {\n id: \"m\",\n x: 13,\n y: 19,\n width: 100,\n height: 100,\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\",\n children: [\n /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"feFlood\", {\n floodOpacity: 0,\n result: \"BackgroundImageFix\"\n }),\n /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"feBlend\", {\n in: \"SourceGraphic\",\n in2: \"BackgroundImageFix\",\n result: \"shape\"\n }),\n /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"feGaussianBlur\", {\n stdDeviation: 12,\n result: \"effect1_foregroundBlur_1677_11483\"\n })\n ]\n })\n ] })\n ]\n });\n\n//#endregion\n//#region src/YogaGraphiQL.tsx\n const getOperationWithFragments = (document, operationName) => {\n const definitions = document.definitions.filter((definition) => {\n if (definition.kind === graphql.Kind.OPERATION_DEFINITION && operationName && definition.name?.value !== operationName) return false;\n return true;\n });\n return {\n kind: graphql.Kind.DOCUMENT,\n definitions\n };\n };\n function YogaGraphiQL(props) {\n const initialQuery = `#\n# Welcome to ${props.title || \"Yoga GraphiQL\"}\n#\n# ${props.title || \"Yoga GraphiQL\"} is an in-browser tool for writing, validating, and\n# testing GraphQL queries.\n#\n# Type queries into this side of the screen, and you will see intelligent\n# typeaheads aware of the current GraphQL type schema and live syntax and\n# validation errors highlighted within the text.\n#\n# GraphQL queries typically start with a \"{\" character. Lines that start\n# with a # are ignored.\n#\n# An example GraphQL query might look like:\n#\n# {\n# field(arg: \"value\") {\n# subField\n# }\n# }\n#\n# Keyboard shortcuts:\n#\n# Prettify Query: Shift-Ctrl-P (or press the prettify button above)\n#\n# Merge Query: Shift-Ctrl-M (or press the merge button above)\n#\n# Run Query: Ctrl-Enter (or press the play button above)\n#\n# Auto Complete: Ctrl-Space (or just start typing)\n#\n`;\n const endpoint = new URL(props.endpoint ?? location.pathname, location.href).toString();\n const urlLoader = (0, react.useMemo)(() => new _graphql_tools_url_loader.UrlLoader(), []);\n const fetcher = (0, react.useMemo)(() => {\n if (props.fetcher) {\n if (props.endpoint) console.warn(\"You are using a custom fetcher and an endpoint. The endpoint will be ignored.\");\n return props.fetcher;\n }\n const executor = urlLoader.getExecutorAsync(endpoint, {\n subscriptionsProtocol: _graphql_tools_url_loader.SubscriptionProtocol.GRAPHQL_SSE,\n subscriptionsEndpoint: endpoint,\n credentials: \"same-origin\",\n specifiedByUrl: true,\n directiveIsRepeatable: true,\n inputValueDeprecation: true,\n ...props,\n headers: props.additionalHeaders || {},\n fetch: (...args) => globalThis.fetch(...args)\n });\n return function fetcher(graphQLParams, opts) {\n return executor({\n document: getOperationWithFragments((0, graphql.parse)(graphQLParams.query), graphQLParams.operationName ?? void 0),\n operationName: graphQLParams.operationName ?? void 0,\n variables: graphQLParams.variables,\n extensions: { headers: opts?.headers }\n });\n };\n }, [\n urlLoader,\n endpoint,\n props.fetcher\n ]);\n const explorer = (0, _graphiql_plugin_explorer.explorerPlugin)({ showAttribution: true });\n const currentUrl = new URL(location.href);\n const initialQueryFromUrl = currentUrl.searchParams.get(\"query\") || props.query || initialQuery;\n const { query: deprecatedInitialQuery = initialQueryFromUrl, headers: deprecatedInitialHeaders, variables: deprecatedInitialVariables, ...otherProps } = props;\n return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"div\", {\n className: \"graphiql-container\",\n children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(graphiql.GraphiQL, {\n shouldPersistHeaders: true,\n plugins: [explorer],\n schemaDescription: true,\n inputValueDeprecation: true,\n isHeadersEditorEnabled: true,\n defaultEditorToolsVisibility: true,\n initialQuery: deprecatedInitialQuery,\n defaultHeaders: deprecatedInitialHeaders,\n initialVariables: deprecatedInitialVariables,\n onEditQuery: (query, ast) => {\n currentUrl.searchParams.set(\"query\", query);\n history.replaceState({}, \"\", currentUrl);\n props.onEditQuery?.(query, ast);\n },\n ...otherProps,\n fetcher,\n children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(graphiql.GraphiQL.Logo, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"div\", {\n style: {\n display: \"flex\",\n alignItems: \"center\"\n },\n children: [typeof props?.logo === \"string\" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"div\", {\n style: {\n width: 40,\n display: \"flex\"\n },\n dangerouslySetInnerHTML: { __html: props.logo }\n }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"div\", {\n style: {\n width: 40,\n display: \"flex\"\n },\n children: props?.logo || /* @__PURE__ */ (0, react_jsx_runtime.jsx)(YogaLogo, {})\n }), typeof props?.title === \"string\" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"span\", { dangerouslySetInnerHTML: { __html: props.title } }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"span\", { children: props?.title || /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [\n \"Yoga Graph\",\n /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"em\", { children: \"i\" }),\n \"QL\"\n ] }) })]\n }) })\n })\n });\n }\n\n//#endregion\n//#region src/index.tsx\n function renderYogaGraphiQL(element, opts) {\n (0, react_dom_client.createRoot)(element).render(react.default.createElement(YogaGraphiQL, opts));\n }\n globalThis.React = react.default;\n\n//#endregion\nexports.renderYogaGraphiQL = renderYogaGraphiQL;\n});";
|
|
4
|
+
const css = "body,\nhtml {\n margin: 0;\n}\n\n.graphiql-container {\n height: 100vh;\n width: 100vw;\n}\n\n";
|
|
5
|
+
const favicon = "data:image/x-icon;base64,AAABAAYAAAAAAAEAIABiNgAAZgAAAICAAAABACAAKAgBAMg2AABAQAAAAQAgAChCAADwPgEAMDAAAAEAIACoJQAAGIEBACAgAAABACAAqBAAAMCmAQAQEAAAAQAgAGgEAABotwEAiVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAA2KUlEQVR42u3dd5hURbYA8HOq6obunp7AMDDEGQYERDKCijkjJhQRFAVz1lVXd01P367Z1VXXXSMgoICKSBQwIeoTEBUDInFgBkbi5JkON1TV+0NxVdKE25H6fZ9/yHRX3arue/rWvVWnABRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURTloIOJPgAlfhYOXkupK3KJI7PRFjpxJYIEAASQGgrQwJFM1pz0Za8diT5WJT5UADgIvHfkmjziyONYmPeUFI9CKfuDgBwUkoIEBAQAAjYQqJIAP6CEd8EnVwOVi05Y3sdO9PErsaMCQJp678h1SC1uSArn0oi4BbnshkLmNujNCBwQdgGFFcQQz0oJnxz/TR8r0W1SvKcCQBpaOHitwcLiPOKKO4kj+oIE0uTCECRqchFo8l7ic787dsmAaKLbp3hHBYA08/6Adb2o5d5EuBiBXOZ4VKwEKjcRJmdTXT5x9Nd9tye6nYo3VABIA/OPKmYs6nZAIS5mFr8dhcwGaMav/r4guEhFCWHiGUT55jHf9S9PdNuV5lEBIMXNGrzWHwjLq6jNryRc9GzW5X5DIUgkYhY13ElU5x8ctXxQONH9oDSNCgApav7hG3QmxBHUcu8mXByHQgbifAgSiSwnGv8MAG5kmlNx1IpBTqL7RWkcFQBSzLzBJUwP232R86uYw69GIWP/i38AhIpqwviLqLkvHb1iUEmij0dpOBUAUsiswaUZ/rB1O7Oc0USIQ0Amz+eHKB0gchkzrNeJHp121PLj6hJ9TMqBJc0XSNm3dwdubKnZzlnU4XdTzotAAkv0Me0LorSo5i4FKf+qG9E1g1YcXZvoY1L2TQWAJDZ7cIlmRJxTmO1eRTk/F4WkiT6mhkIiqilz3tB067kjVhz9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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADeV5gC3E6gDN5WmzbeVZ423kqkC+BYnwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2USnVNYyt8DUKr380ybA/9MmwP/UKr381jG5wdk+sFEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4GaJB9Y2sp7TKL/80ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ye//Nc1t57iX5wHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN1WlALWNbOV0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9c0uJnfUqYDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2USlRtMovvzTJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0yi//dk8s0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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0ybA/9cqu+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM8vvhzTJ8D80ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9MnwPzTNcAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADOJ8Pr0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0SbB+r8pyzMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANQnvj7TJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ya/+QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzTLAA9IpwMDTJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0yrAvdI3wAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANImwPnTJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0SbBPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3jW1BdcsvFHVKL/U0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ifA788rw4rMLMURAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANk6uAHWM7wP1Cm/FtMnwBfULr8U0zW+BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////gf///////////////////wD///////////////////wAP//////////////////4AB//////////////////+AAf//////////////////AAD//////////////////wAA//////////////////wAAP/////////////////wAACP////////////////4AAAg////////////////4AAAIH///////////////4AAAGAf//////////////8AAABAB//////////////8AAAAwAP/////////////8AAIAcAA/////////////8AAPw/AAD////////////8AAP//8AAP///////////+AAP///wAB///////////+AAH///+AAH//////////+AAH////4AAf//////////AAH/////gAB//////////AAH/////+AAH/////////gAD//////4AB/////////wAD///////AAP////////4AD///////8AB////////+ABwAAAAAADgAP////////gB+AAAAAAB/AD////////wB/4AAAAAB/4A////////8A//gAAAAB//gH////////AP/wAAAAAP/4B////////wD/8AAAAAD/+Af///////8A/+AABgAAf/gH////////AP/gABCAAH/4B////////wD/4AAgQAB/+Af///////8A/8AAwDAAf/gH////////AP/AAwAMAD/4B////////wD///4AB///+Af///////8A//8GAAYP//gH////////AP//AYAYD//4B////////wD//wBAIA//+Af///////8A//8AEIAP//gH////////AP//AAAAD//4B////////wD//wAGAA//+Af///////8A//8ABgAP//gH////////AP//AAAAD//4B////////wD//wAAAA//+Af///////8A//+AAAAf//gH////////AP//gAAAH//4B////////wD//8AAAD//+Af///////8A///gAAB///gH////////AP//8AAA///4B////////wD///gGAf//+Af///////8A///8GYP///gH////////AP///yBP///4B////////wD////AP///+Af///////8A////gB////gH/////////////4Af///4B////////4H///8AD///+Af///////4Af//+AAf//+AH///////8AD///gAH///AA///////+AA///4AB///wAH///////gAH//+AAf//4AB///////wAB///gAH//+AAP//////8AAf//4AB///gAD///////AAH//+AAf//4AA///////wAB///wAP//+AAP//////8AAP//+AH///gAD///////AAA///wD///4AA///////4AAD//+B///GAAf//////+AAAP//////BwAH///////wAAB//////gOAD///////+AAAH/////gBgB////////8IAAf////wAPD//////////gAD////wAD///////////8AAP///wAA////////////4AA///wAA/////////////AAH//4AA/////////////4AAf/4AAf/////////////wAB/4AAf/////////////+AAH4AAf//////////////4AAYAAf///////////////gAAAAf///////////////8AAAAP////////////////wAAAP/////////////////AAAP/////////////////8AAH//////////////////wAH//////////////////+AH///////////////////4H///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////KAAAAEAAAACAAAAAAQAgAAAAAAAAQAAASywAAEssAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADXN7JF1S26j9Utu4/XNbZFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANk6uADVLb4J0yrAC9M1vgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////w/////////8A/////////wD////////+AP////////gAH///////4AAH///////AAAP//////wABAP/////8Af+AP/////AD/8AP////4A//8AP////AP//8A////4CAAAEB////gYAAAcH///+H4AAH4P///4fAAAPg////h8AAA+D///+HwAAD4P///4f4AB/g////h/gAH+D///+H+AAf4P///4f4AB/g////h/gAH+D///+H+AAf4P///4f8AD/g////h/4Af+D///+H/wD/4P///4f/gf/g////h/+B/+D///8D/wD/wP///gH/AP+Af//+Af8A/4B///4B/wD/gH///gD/gf+Af//+AD/D/AB///8AD//wAP///8AH/+Az/////AH/gD//////AH4A///////AGAH//////+AAB///////+AAf///////+AH////////+A/////////8P////////////////////////////////////////////////////////////////////////////////////////////////////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAAEssAABLLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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0ybA99MmwP/TJsD/0ybA/NInwKbQKsIfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADZOrgA1Su+KdMowHvTJ8CB0ynAOM80wgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///D///wAA///4H///AAD///gf//8AAP//4Af//wAA//+AAf//AAD//gAAf/8AAP/8BCA//wAA//AP8A//AAD/4D/8A/8AAP/A//8D/wAA/4AAAAH/AAD/h4AB4f8AAP+HAADh/wAA/4cAAOH/AAD/h8AD4f8AAP+HwAPh/wAA/4fAA+H/AAD/h8AD4f8AAP+H4Afh/wAA/4fgB+H/AAD/h/gf4f8AAP+H+B/h/wAA/4P4H8H/AAD/A/gfwP8AAP8D+B/A/wAA/wH4H8D/AAD/AH5+AP8AAP+AH/gB/wAA//gH4B//AAD//gHAf/8AAP//AAD//wAA///AA///AAD///AP//8AAP//+B///wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABACAAAAAAAAAQAABLLAAASywAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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";
|
|
6
|
+
const editorWorkerService = "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { SimpleWorkerServer } from '../base/common/worker/simpleWorker.js';\nimport { EditorSimpleWorker } from './common/services/editorSimpleWorker.js';\nimport { EditorWorkerHost } from './common/services/editorWorkerHost.js';\nlet initialized = false;\nexport function initialize(foreignModule) {\n if (initialized) {\n return;\n }\n initialized = true;\n const simpleWorker = new SimpleWorkerServer((msg) => {\n globalThis.postMessage(msg);\n }, (workerServer) => new EditorSimpleWorker(EditorWorkerHost.getChannel(workerServer), foreignModule));\n globalThis.onmessage = (e) => {\n simpleWorker.onmessage(e.data);\n };\n}\nglobalThis.onmessage = (e) => {\n // Ignore first message in this case and initialize if not yet initialized\n if (!initialized) {\n initialize(null);\n }\n};\n";
|
|
7
|
+
const jsonWorker = "/*!-----------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.52.2(404545bded1df6ffa41ea0af4e8ddb219018c6c1)\n * Released under the MIT license\n * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt\n *-----------------------------------------------------------------------------*/\n\n\n// src/language/json/json.worker.ts\nimport * as worker from \"../../editor/editor.worker.js\";\n\n// node_modules/jsonc-parser/lib/esm/impl/scanner.js\nfunction createScanner(text, ignoreTrivia = false) {\n const len = text.length;\n let pos = 0, value = \"\", tokenOffset = 0, token = 16, lineNumber = 0, lineStartOffset = 0, tokenLineStartOffset = 0, prevTokenLineStartOffset = 0, scanError = 0;\n function scanHexDigits(count, exact) {\n let digits = 0;\n let value2 = 0;\n while (digits < count || !exact) {\n let ch = text.charCodeAt(pos);\n if (ch >= 48 && ch <= 57) {\n value2 = value2 * 16 + ch - 48;\n } else if (ch >= 65 && ch <= 70) {\n value2 = value2 * 16 + ch - 65 + 10;\n } else if (ch >= 97 && ch <= 102) {\n value2 = value2 * 16 + ch - 97 + 10;\n } else {\n break;\n }\n pos++;\n digits++;\n }\n if (digits < count) {\n value2 = -1;\n }\n return value2;\n }\n function setPosition(newPosition) {\n pos = newPosition;\n value = \"\";\n tokenOffset = 0;\n token = 16;\n scanError = 0;\n }\n function scanNumber() {\n let start = pos;\n if (text.charCodeAt(pos) === 48) {\n pos++;\n } else {\n pos++;\n while (pos < text.length && isDigit(text.charCodeAt(pos))) {\n pos++;\n }\n }\n if (pos < text.length && text.charCodeAt(pos) === 46) {\n pos++;\n if (pos < text.length && isDigit(text.charCodeAt(pos))) {\n pos++;\n while (pos < text.length && isDigit(text.charCodeAt(pos))) {\n pos++;\n }\n } else {\n scanError = 3;\n return text.substring(start, pos);\n }\n }\n let end = pos;\n if (pos < text.length && (text.charCodeAt(pos) === 69 || text.charCodeAt(pos) === 101)) {\n pos++;\n if (pos < text.length && text.charCodeAt(pos) === 43 || text.charCodeAt(pos) === 45) {\n pos++;\n }\n if (pos < text.length && isDigit(text.charCodeAt(pos))) {\n pos++;\n while (pos < text.length && isDigit(text.charCodeAt(pos))) {\n pos++;\n }\n end = pos;\n } else {\n scanError = 3;\n }\n }\n return text.substring(start, end);\n }\n function scanString() {\n let result = \"\", start = pos;\n while (true) {\n if (pos >= len) {\n result += text.substring(start, pos);\n scanError = 2;\n break;\n }\n const ch = text.charCodeAt(pos);\n if (ch === 34) {\n result += text.substring(start, pos);\n pos++;\n break;\n }\n if (ch === 92) {\n result += text.substring(start, pos);\n pos++;\n if (pos >= len) {\n scanError = 2;\n break;\n }\n const ch2 = text.charCodeAt(pos++);\n switch (ch2) {\n case 34:\n result += '\"';\n break;\n case 92:\n result += \"\\\\\";\n break;\n case 47:\n result += \"/\";\n break;\n case 98:\n result += \"\\b\";\n break;\n case 102:\n result += \"\\f\";\n break;\n case 110:\n result += \"\\n\";\n break;\n case 114:\n result += \"\\r\";\n break;\n case 116:\n result += \" \";\n break;\n case 117:\n const ch3 = scanHexDigits(4, true);\n if (ch3 >= 0) {\n result += String.fromCharCode(ch3);\n } else {\n scanError = 4;\n }\n break;\n default:\n scanError = 5;\n }\n start = pos;\n continue;\n }\n if (ch >= 0 && ch <= 31) {\n if (isLineBreak(ch)) {\n result += text.substring(start, pos);\n scanError = 2;\n break;\n } else {\n scanError = 6;\n }\n }\n pos++;\n }\n return result;\n }\n function scanNext() {\n value = \"\";\n scanError = 0;\n tokenOffset = pos;\n lineStartOffset = lineNumber;\n prevTokenLineStartOffset = tokenLineStartOffset;\n if (pos >= len) {\n tokenOffset = len;\n return token = 17;\n }\n let code = text.charCodeAt(pos);\n if (isWhiteSpace(code)) {\n do {\n pos++;\n value += String.fromCharCode(code);\n code = text.charCodeAt(pos);\n } while (isWhiteSpace(code));\n return token = 15;\n }\n if (isLineBreak(code)) {\n pos++;\n value += String.fromCharCode(code);\n if (code === 13 && text.charCodeAt(pos) === 10) {\n pos++;\n value += \"\\n\";\n }\n lineNumber++;\n tokenLineStartOffset = pos;\n return token = 14;\n }\n switch (code) {\n case 123:\n pos++;\n return token = 1;\n case 125:\n pos++;\n return token = 2;\n case 91:\n pos++;\n return token = 3;\n case 93:\n pos++;\n return token = 4;\n case 58:\n pos++;\n return token = 6;\n case 44:\n pos++;\n return token = 5;\n case 34:\n pos++;\n value = scanString();\n return token = 10;\n case 47:\n const start = pos - 1;\n if (text.charCodeAt(pos + 1) === 47) {\n pos += 2;\n while (pos < len) {\n if (isLineBreak(text.charCodeAt(pos))) {\n break;\n }\n pos++;\n }\n value = text.substring(start, pos);\n return token = 12;\n }\n if (text.charCodeAt(pos + 1) === 42) {\n pos += 2;\n const safeLength = len - 1;\n let commentClosed = false;\n while (pos < safeLength) {\n const ch = text.charCodeAt(pos);\n if (ch === 42 && text.charCodeAt(pos + 1) === 47) {\n pos += 2;\n commentClosed = true;\n break;\n }\n pos++;\n if (isLineBreak(ch)) {\n if (ch === 13 && text.charCodeAt(pos) === 10) {\n pos++;\n }\n lineNumber++;\n tokenLineStartOffset = pos;\n }\n }\n if (!commentClosed) {\n pos++;\n scanError = 1;\n }\n value = text.substring(start, pos);\n return token = 13;\n }\n value += String.fromCharCode(code);\n pos++;\n return token = 16;\n case 45:\n value += String.fromCharCode(code);\n pos++;\n if (pos === len || !isDigit(text.charCodeAt(pos))) {\n return token = 16;\n }\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n value += scanNumber();\n return token = 11;\n default:\n while (pos < len && isUnknownContentCharacter(code)) {\n pos++;\n code = text.charCodeAt(pos);\n }\n if (tokenOffset !== pos) {\n value = text.substring(tokenOffset, pos);\n switch (value) {\n case \"true\":\n return token = 8;\n case \"false\":\n return token = 9;\n case \"null\":\n return token = 7;\n }\n return token = 16;\n }\n value += String.fromCharCode(code);\n pos++;\n return token = 16;\n }\n }\n function isUnknownContentCharacter(code) {\n if (isWhiteSpace(code) || isLineBreak(code)) {\n return false;\n }\n switch (code) {\n case 125:\n case 93:\n case 123:\n case 91:\n case 34:\n case 58:\n case 44:\n case 47:\n return false;\n }\n return true;\n }\n function scanNextNonTrivia() {\n let result;\n do {\n result = scanNext();\n } while (result >= 12 && result <= 15);\n return result;\n }\n return {\n setPosition,\n getPosition: () => pos,\n scan: ignoreTrivia ? scanNextNonTrivia : scanNext,\n getToken: () => token,\n getTokenValue: () => value,\n getTokenOffset: () => tokenOffset,\n getTokenLength: () => pos - tokenOffset,\n getTokenStartLine: () => lineStartOffset,\n getTokenStartCharacter: () => tokenOffset - prevTokenLineStartOffset,\n getTokenError: () => scanError\n };\n}\nfunction isWhiteSpace(ch) {\n return ch === 32 || ch === 9;\n}\nfunction isLineBreak(ch) {\n return ch === 10 || ch === 13;\n}\nfunction isDigit(ch) {\n return ch >= 48 && ch <= 57;\n}\nvar CharacterCodes;\n(function(CharacterCodes2) {\n CharacterCodes2[CharacterCodes2[\"lineFeed\"] = 10] = \"lineFeed\";\n CharacterCodes2[CharacterCodes2[\"carriageReturn\"] = 13] = \"carriageReturn\";\n CharacterCodes2[CharacterCodes2[\"space\"] = 32] = \"space\";\n CharacterCodes2[CharacterCodes2[\"_0\"] = 48] = \"_0\";\n CharacterCodes2[CharacterCodes2[\"_1\"] = 49] = \"_1\";\n CharacterCodes2[CharacterCodes2[\"_2\"] = 50] = \"_2\";\n CharacterCodes2[CharacterCodes2[\"_3\"] = 51] = \"_3\";\n CharacterCodes2[CharacterCodes2[\"_4\"] = 52] = \"_4\";\n CharacterCodes2[CharacterCodes2[\"_5\"] = 53] = \"_5\";\n CharacterCodes2[CharacterCodes2[\"_6\"] = 54] = \"_6\";\n CharacterCodes2[CharacterCodes2[\"_7\"] = 55] = \"_7\";\n CharacterCodes2[CharacterCodes2[\"_8\"] = 56] = \"_8\";\n CharacterCodes2[CharacterCodes2[\"_9\"] = 57] = \"_9\";\n CharacterCodes2[CharacterCodes2[\"a\"] = 97] = \"a\";\n CharacterCodes2[CharacterCodes2[\"b\"] = 98] = \"b\";\n CharacterCodes2[CharacterCodes2[\"c\"] = 99] = \"c\";\n CharacterCodes2[CharacterCodes2[\"d\"] = 100] = \"d\";\n CharacterCodes2[CharacterCodes2[\"e\"] = 101] = \"e\";\n CharacterCodes2[CharacterCodes2[\"f\"] = 102] = \"f\";\n CharacterCodes2[CharacterCodes2[\"g\"] = 103] = \"g\";\n CharacterCodes2[CharacterCodes2[\"h\"] = 104] = \"h\";\n CharacterCodes2[CharacterCodes2[\"i\"] = 105] = \"i\";\n CharacterCodes2[CharacterCodes2[\"j\"] = 106] = \"j\";\n CharacterCodes2[CharacterCodes2[\"k\"] = 107] = \"k\";\n CharacterCodes2[CharacterCodes2[\"l\"] = 108] = \"l\";\n CharacterCodes2[CharacterCodes2[\"m\"] = 109] = \"m\";\n CharacterCodes2[CharacterCodes2[\"n\"] = 110] = \"n\";\n CharacterCodes2[CharacterCodes2[\"o\"] = 111] = \"o\";\n CharacterCodes2[CharacterCodes2[\"p\"] = 112] = \"p\";\n CharacterCodes2[CharacterCodes2[\"q\"] = 113] = \"q\";\n CharacterCodes2[CharacterCodes2[\"r\"] = 114] = \"r\";\n CharacterCodes2[CharacterCodes2[\"s\"] = 115] = \"s\";\n CharacterCodes2[CharacterCodes2[\"t\"] = 116] = \"t\";\n CharacterCodes2[CharacterCodes2[\"u\"] = 117] = \"u\";\n CharacterCodes2[CharacterCodes2[\"v\"] = 118] = \"v\";\n CharacterCodes2[CharacterCodes2[\"w\"] = 119] = \"w\";\n CharacterCodes2[CharacterCodes2[\"x\"] = 120] = \"x\";\n CharacterCodes2[CharacterCodes2[\"y\"] = 121] = \"y\";\n CharacterCodes2[CharacterCodes2[\"z\"] = 122] = \"z\";\n CharacterCodes2[CharacterCodes2[\"A\"] = 65] = \"A\";\n CharacterCodes2[CharacterCodes2[\"B\"] = 66] = \"B\";\n CharacterCodes2[CharacterCodes2[\"C\"] = 67] = \"C\";\n CharacterCodes2[CharacterCodes2[\"D\"] = 68] = \"D\";\n CharacterCodes2[CharacterCodes2[\"E\"] = 69] = \"E\";\n CharacterCodes2[CharacterCodes2[\"F\"] = 70] = \"F\";\n CharacterCodes2[CharacterCodes2[\"G\"] = 71] = \"G\";\n CharacterCodes2[CharacterCodes2[\"H\"] = 72] = \"H\";\n CharacterCodes2[CharacterCodes2[\"I\"] = 73] = \"I\";\n CharacterCodes2[CharacterCodes2[\"J\"] = 74] = \"J\";\n CharacterCodes2[CharacterCodes2[\"K\"] = 75] = \"K\";\n CharacterCodes2[CharacterCodes2[\"L\"] = 76] = \"L\";\n CharacterCodes2[CharacterCodes2[\"M\"] = 77] = \"M\";\n CharacterCodes2[CharacterCodes2[\"N\"] = 78] = \"N\";\n CharacterCodes2[CharacterCodes2[\"O\"] = 79] = \"O\";\n CharacterCodes2[CharacterCodes2[\"P\"] = 80] = \"P\";\n CharacterCodes2[CharacterCodes2[\"Q\"] = 81] = \"Q\";\n CharacterCodes2[CharacterCodes2[\"R\"] = 82] = \"R\";\n CharacterCodes2[CharacterCodes2[\"S\"] = 83] = \"S\";\n CharacterCodes2[CharacterCodes2[\"T\"] = 84] = \"T\";\n CharacterCodes2[CharacterCodes2[\"U\"] = 85] = \"U\";\n CharacterCodes2[CharacterCodes2[\"V\"] = 86] = \"V\";\n CharacterCodes2[CharacterCodes2[\"W\"] = 87] = \"W\";\n CharacterCodes2[CharacterCodes2[\"X\"] = 88] = \"X\";\n CharacterCodes2[CharacterCodes2[\"Y\"] = 89] = \"Y\";\n CharacterCodes2[CharacterCodes2[\"Z\"] = 90] = \"Z\";\n CharacterCodes2[CharacterCodes2[\"asterisk\"] = 42] = \"asterisk\";\n CharacterCodes2[CharacterCodes2[\"backslash\"] = 92] = \"backslash\";\n CharacterCodes2[CharacterCodes2[\"closeBrace\"] = 125] = \"closeBrace\";\n CharacterCodes2[CharacterCodes2[\"closeBracket\"] = 93] = \"closeBracket\";\n CharacterCodes2[CharacterCodes2[\"colon\"] = 58] = \"colon\";\n CharacterCodes2[CharacterCodes2[\"comma\"] = 44] = \"comma\";\n CharacterCodes2[CharacterCodes2[\"dot\"] = 46] = \"dot\";\n CharacterCodes2[CharacterCodes2[\"doubleQuote\"] = 34] = \"doubleQuote\";\n CharacterCodes2[CharacterCodes2[\"minus\"] = 45] = \"minus\";\n CharacterCodes2[CharacterCodes2[\"openBrace\"] = 123] = \"openBrace\";\n CharacterCodes2[CharacterCodes2[\"openBracket\"] = 91] = \"openBracket\";\n CharacterCodes2[CharacterCodes2[\"plus\"] = 43] = \"plus\";\n CharacterCodes2[CharacterCodes2[\"slash\"] = 47] = \"slash\";\n CharacterCodes2[CharacterCodes2[\"formFeed\"] = 12] = \"formFeed\";\n CharacterCodes2[CharacterCodes2[\"tab\"] = 9] = \"tab\";\n})(CharacterCodes || (CharacterCodes = {}));\n\n// node_modules/jsonc-parser/lib/esm/impl/string-intern.js\nvar cachedSpaces = new Array(20).fill(0).map((_, index) => {\n return \" \".repeat(index);\n});\nvar maxCachedValues = 200;\nvar cachedBreakLinesWithSpaces = {\n \" \": {\n \"\\n\": new Array(maxCachedValues).fill(0).map((_, index) => {\n return \"\\n\" + \" \".repeat(index);\n }),\n \"\\r\": new Array(maxCachedValues).fill(0).map((_, index) => {\n return \"\\r\" + \" \".repeat(index);\n }),\n \"\\r\\n\": new Array(maxCachedValues).fill(0).map((_, index) => {\n return \"\\r\\n\" + \" \".repeat(index);\n })\n },\n \" \": {\n \"\\n\": new Array(maxCachedValues).fill(0).map((_, index) => {\n return \"\\n\" + \" \".repeat(index);\n }),\n \"\\r\": new Array(maxCachedValues).fill(0).map((_, index) => {\n return \"\\r\" + \" \".repeat(index);\n }),\n \"\\r\\n\": new Array(maxCachedValues).fill(0).map((_, index) => {\n return \"\\r\\n\" + \" \".repeat(index);\n })\n }\n};\nvar supportedEols = [\"\\n\", \"\\r\", \"\\r\\n\"];\n\n// node_modules/jsonc-parser/lib/esm/impl/format.js\nfunction format(documentText, range, options) {\n let initialIndentLevel;\n let formatText;\n let formatTextStart;\n let rangeStart;\n let rangeEnd;\n if (range) {\n rangeStart = range.offset;\n rangeEnd = rangeStart + range.length;\n formatTextStart = rangeStart;\n while (formatTextStart > 0 && !isEOL(documentText, formatTextStart - 1)) {\n formatTextStart--;\n }\n let endOffset = rangeEnd;\n while (endOffset < documentText.length && !isEOL(documentText, endOffset)) {\n endOffset++;\n }\n formatText = documentText.substring(formatTextStart, endOffset);\n initialIndentLevel = computeIndentLevel(formatText, options);\n } else {\n formatText = documentText;\n initialIndentLevel = 0;\n formatTextStart = 0;\n rangeStart = 0;\n rangeEnd = documentText.length;\n }\n const eol = getEOL(options, documentText);\n const eolFastPathSupported = supportedEols.includes(eol);\n let numberLineBreaks = 0;\n let indentLevel = 0;\n let indentValue;\n if (options.insertSpaces) {\n indentValue = cachedSpaces[options.tabSize || 4] ?? repeat(cachedSpaces[1], options.tabSize || 4);\n } else {\n indentValue = \" \";\n }\n const indentType = indentValue === \" \" ? \" \" : \" \";\n let scanner = createScanner(formatText, false);\n let hasError = false;\n function newLinesAndIndent() {\n if (numberLineBreaks > 1) {\n return repeat(eol, numberLineBreaks) + repeat(indentValue, initialIndentLevel + indentLevel);\n }\n const amountOfSpaces = indentValue.length * (initialIndentLevel + indentLevel);\n if (!eolFastPathSupported || amountOfSpaces > cachedBreakLinesWithSpaces[indentType][eol].length) {\n return eol + repeat(indentValue, initialIndentLevel + indentLevel);\n }\n if (amountOfSpaces <= 0) {\n return eol;\n }\n return cachedBreakLinesWithSpaces[indentType][eol][amountOfSpaces];\n }\n function scanNext() {\n let token = scanner.scan();\n numberLineBreaks = 0;\n while (token === 15 || token === 14) {\n if (token === 14 && options.keepLines) {\n numberLineBreaks += 1;\n } else if (token === 14) {\n numberLineBreaks = 1;\n }\n token = scanner.scan();\n }\n hasError = token === 16 || scanner.getTokenError() !== 0;\n return token;\n }\n const editOperations = [];\n function addEdit(text, startOffset, endOffset) {\n if (!hasError && (!range || startOffset < rangeEnd && endOffset > rangeStart) && documentText.substring(startOffset, endOffset) !== text) {\n editOperations.push({ offset: startOffset, length: endOffset - startOffset, content: text });\n }\n }\n let firstToken = scanNext();\n if (options.keepLines && numberLineBreaks > 0) {\n addEdit(repeat(eol, numberLineBreaks), 0, 0);\n }\n if (firstToken !== 17) {\n let firstTokenStart = scanner.getTokenOffset() + formatTextStart;\n let initialIndent = indentValue.length * initialIndentLevel < 20 && options.insertSpaces ? cachedSpaces[indentValue.length * initialIndentLevel] : repeat(indentValue, initialIndentLevel);\n addEdit(initialIndent, formatTextStart, firstTokenStart);\n }\n while (firstToken !== 17) {\n let firstTokenEnd = scanner.getTokenOffset() + scanner.getTokenLength() + formatTextStart;\n let secondToken = scanNext();\n let replaceContent = \"\";\n let needsLineBreak = false;\n while (numberLineBreaks === 0 && (secondToken === 12 || secondToken === 13)) {\n let commentTokenStart = scanner.getTokenOffset() + formatTextStart;\n addEdit(cachedSpaces[1], firstTokenEnd, commentTokenStart);\n firstTokenEnd = scanner.getTokenOffset() + scanner.getTokenLength() + formatTextStart;\n needsLineBreak = secondToken === 12;\n replaceContent = needsLineBreak ? newLinesAndIndent() : \"\";\n secondToken = scanNext();\n }\n if (secondToken === 2) {\n if (firstToken !== 1) {\n indentLevel--;\n }\n ;\n if (options.keepLines && numberLineBreaks > 0 || !options.keepLines && firstToken !== 1) {\n replaceContent = newLinesAndIndent();\n } else if (options.keepLines) {\n replaceContent = cachedSpaces[1];\n }\n } else if (secondToken === 4) {\n if (firstToken !== 3) {\n indentLevel--;\n }\n ;\n if (options.keepLines && numberLineBreaks > 0 || !options.keepLines && firstToken !== 3) {\n replaceContent = newLinesAndIndent();\n } else if (options.keepLines) {\n replaceContent = cachedSpaces[1];\n }\n } else {\n switch (firstToken) {\n case 3:\n case 1:\n indentLevel++;\n if (options.keepLines && numberLineBreaks > 0 || !options.keepLines) {\n replaceContent = newLinesAndIndent();\n } else {\n replaceContent = cachedSpaces[1];\n }\n break;\n case 5:\n if (options.keepLines && numberLineBreaks > 0 || !options.keepLines) {\n replaceContent = newLinesAndIndent();\n } else {\n replaceContent = cachedSpaces[1];\n }\n break;\n case 12:\n replaceContent = newLinesAndIndent();\n break;\n case 13:\n if (numberLineBreaks > 0) {\n replaceContent = newLinesAndIndent();\n } else if (!needsLineBreak) {\n replaceContent = cachedSpaces[1];\n }\n break;\n case 6:\n if (options.keepLines && numberLineBreaks > 0) {\n replaceContent = newLinesAndIndent();\n } else if (!needsLineBreak) {\n replaceContent = cachedSpaces[1];\n }\n break;\n case 10:\n if (options.keepLines && numberLineBreaks > 0) {\n replaceContent = newLinesAndIndent();\n } else if (secondToken === 6 && !needsLineBreak) {\n replaceContent = \"\";\n }\n break;\n case 7:\n case 8:\n case 9:\n case 11:\n case 2:\n case 4:\n if (options.keepLines && numberLineBreaks > 0) {\n replaceContent = newLinesAndIndent();\n } else {\n if ((secondToken === 12 || secondToken === 13) && !needsLineBreak) {\n replaceContent = cachedSpaces[1];\n } else if (secondToken !== 5 && secondToken !== 17) {\n hasError = true;\n }\n }\n break;\n case 16:\n hasError = true;\n break;\n }\n if (numberLineBreaks > 0 && (secondToken === 12 || secondToken === 13)) {\n replaceContent = newLinesAndIndent();\n }\n }\n if (secondToken === 17) {\n if (options.keepLines && numberLineBreaks > 0) {\n replaceContent = newLinesAndIndent();\n } else {\n replaceContent = options.insertFinalNewline ? eol : \"\";\n }\n }\n const secondTokenStart = scanner.getTokenOffset() + formatTextStart;\n addEdit(replaceContent, firstTokenEnd, secondTokenStart);\n firstToken = secondToken;\n }\n return editOperations;\n}\nfunction repeat(s, count) {\n let result = \"\";\n for (let i = 0; i < count; i++) {\n result += s;\n }\n return result;\n}\nfunction computeIndentLevel(content, options) {\n let i = 0;\n let nChars = 0;\n const tabSize = options.tabSize || 4;\n while (i < content.length) {\n let ch = content.charAt(i);\n if (ch === cachedSpaces[1]) {\n nChars++;\n } else if (ch === \" \") {\n nChars += tabSize;\n } else {\n break;\n }\n i++;\n }\n return Math.floor(nChars / tabSize);\n}\nfunction getEOL(options, text) {\n for (let i = 0; i < text.length; i++) {\n const ch = text.charAt(i);\n if (ch === \"\\r\") {\n if (i + 1 < text.length && text.charAt(i + 1) === \"\\n\") {\n return \"\\r\\n\";\n }\n return \"\\r\";\n } else if (ch === \"\\n\") {\n return \"\\n\";\n }\n }\n return options && options.eol || \"\\n\";\n}\nfunction isEOL(text, offset) {\n return \"\\r\\n\".indexOf(text.charAt(offset)) !== -1;\n}\n\n// node_modules/jsonc-parser/lib/esm/impl/parser.js\nvar ParseOptions;\n(function(ParseOptions2) {\n ParseOptions2.DEFAULT = {\n allowTrailingComma: false\n };\n})(ParseOptions || (ParseOptions = {}));\nfunction parse(text, errors = [], options = ParseOptions.DEFAULT) {\n let currentProperty = null;\n let currentParent = [];\n const previousParents = [];\n function onValue(value) {\n if (Array.isArray(currentParent)) {\n currentParent.push(value);\n } else if (currentProperty !== null) {\n currentParent[currentProperty] = value;\n }\n }\n const visitor = {\n onObjectBegin: () => {\n const object = {};\n onValue(object);\n previousParents.push(currentParent);\n currentParent = object;\n currentProperty = null;\n },\n onObjectProperty: (name) => {\n currentProperty = name;\n },\n onObjectEnd: () => {\n currentParent = previousParents.pop();\n },\n onArrayBegin: () => {\n const array = [];\n onValue(array);\n previousParents.push(currentParent);\n currentParent = array;\n currentProperty = null;\n },\n onArrayEnd: () => {\n currentParent = previousParents.pop();\n },\n onLiteralValue: onValue,\n onError: (error, offset, length) => {\n errors.push({ error, offset, length });\n }\n };\n visit(text, visitor, options);\n return currentParent[0];\n}\nfunction getNodePath(node) {\n if (!node.parent || !node.parent.children) {\n return [];\n }\n const path = getNodePath(node.parent);\n if (node.parent.type === \"property\") {\n const key = node.parent.children[0].value;\n path.push(key);\n } else if (node.parent.type === \"array\") {\n const index = node.parent.children.indexOf(node);\n if (index !== -1) {\n path.push(index);\n }\n }\n return path;\n}\nfunction getNodeValue(node) {\n switch (node.type) {\n case \"array\":\n return node.children.map(getNodeValue);\n case \"object\":\n const obj = /* @__PURE__ */ Object.create(null);\n for (let prop of node.children) {\n const valueNode = prop.children[1];\n if (valueNode) {\n obj[prop.children[0].value] = getNodeValue(valueNode);\n }\n }\n return obj;\n case \"null\":\n case \"string\":\n case \"number\":\n case \"boolean\":\n return node.value;\n default:\n return void 0;\n }\n}\nfunction contains(node, offset, includeRightBound = false) {\n return offset >= node.offset && offset < node.offset + node.length || includeRightBound && offset === node.offset + node.length;\n}\nfunction findNodeAtOffset(node, offset, includeRightBound = false) {\n if (contains(node, offset, includeRightBound)) {\n const children = node.children;\n if (Array.isArray(children)) {\n for (let i = 0; i < children.length && children[i].offset <= offset; i++) {\n const item = findNodeAtOffset(children[i], offset, includeRightBound);\n if (item) {\n return item;\n }\n }\n }\n return node;\n }\n return void 0;\n}\nfunction visit(text, visitor, options = ParseOptions.DEFAULT) {\n const _scanner = createScanner(text, false);\n const _jsonPath = [];\n function toNoArgVisit(visitFunction) {\n return visitFunction ? () => visitFunction(_scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter()) : () => true;\n }\n function toNoArgVisitWithPath(visitFunction) {\n return visitFunction ? () => visitFunction(_scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter(), () => _jsonPath.slice()) : () => true;\n }\n function toOneArgVisit(visitFunction) {\n return visitFunction ? (arg) => visitFunction(arg, _scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter()) : () => true;\n }\n function toOneArgVisitWithPath(visitFunction) {\n return visitFunction ? (arg) => visitFunction(arg, _scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter(), () => _jsonPath.slice()) : () => true;\n }\n const onObjectBegin = toNoArgVisitWithPath(visitor.onObjectBegin), onObjectProperty = toOneArgVisitWithPath(visitor.onObjectProperty), onObjectEnd = toNoArgVisit(visitor.onObjectEnd), onArrayBegin = toNoArgVisitWithPath(visitor.onArrayBegin), onArrayEnd = toNoArgVisit(visitor.onArrayEnd), onLiteralValue = toOneArgVisitWithPath(visitor.onLiteralValue), onSeparator = toOneArgVisit(visitor.onSeparator), onComment = toNoArgVisit(visitor.onComment), onError = toOneArgVisit(visitor.onError);\n const disallowComments = options && options.disallowComments;\n const allowTrailingComma = options && options.allowTrailingComma;\n function scanNext() {\n while (true) {\n const token = _scanner.scan();\n switch (_scanner.getTokenError()) {\n case 4:\n handleError(\n 14\n /* ParseErrorCode.InvalidUnicode */\n );\n break;\n case 5:\n handleError(\n 15\n /* ParseErrorCode.InvalidEscapeCharacter */\n );\n break;\n case 3:\n handleError(\n 13\n /* ParseErrorCode.UnexpectedEndOfNumber */\n );\n break;\n case 1:\n if (!disallowComments) {\n handleError(\n 11\n /* ParseErrorCode.UnexpectedEndOfComment */\n );\n }\n break;\n case 2:\n handleError(\n 12\n /* ParseErrorCode.UnexpectedEndOfString */\n );\n break;\n case 6:\n handleError(\n 16\n /* ParseErrorCode.InvalidCharacter */\n );\n break;\n }\n switch (token) {\n case 12:\n case 13:\n if (disallowComments) {\n handleError(\n 10\n /* ParseErrorCode.InvalidCommentToken */\n );\n } else {\n onComment();\n }\n break;\n case 16:\n handleError(\n 1\n /* ParseErrorCode.InvalidSymbol */\n );\n break;\n case 15:\n case 14:\n break;\n default:\n return token;\n }\n }\n }\n function handleError(error, skipUntilAfter = [], skipUntil = []) {\n onError(error);\n if (skipUntilAfter.length + skipUntil.length > 0) {\n let token = _scanner.getToken();\n while (token !== 17) {\n if (skipUntilAfter.indexOf(token) !== -1) {\n scanNext();\n break;\n } else if (skipUntil.indexOf(token) !== -1) {\n break;\n }\n token = scanNext();\n }\n }\n }\n function parseString(isValue) {\n const value = _scanner.getTokenValue();\n if (isValue) {\n onLiteralValue(value);\n } else {\n onObjectProperty(value);\n _jsonPath.push(value);\n }\n scanNext();\n return true;\n }\n function parseLiteral() {\n switch (_scanner.getToken()) {\n case 11:\n const tokenValue = _scanner.getTokenValue();\n let value = Number(tokenValue);\n if (isNaN(value)) {\n handleError(\n 2\n /* ParseErrorCode.InvalidNumberFormat */\n );\n value = 0;\n }\n onLiteralValue(value);\n break;\n case 7:\n onLiteralValue(null);\n break;\n case 8:\n onLiteralValue(true);\n break;\n case 9:\n onLiteralValue(false);\n break;\n default:\n return false;\n }\n scanNext();\n return true;\n }\n function parseProperty() {\n if (_scanner.getToken() !== 10) {\n handleError(3, [], [\n 2,\n 5\n /* SyntaxKind.CommaToken */\n ]);\n return false;\n }\n parseString(false);\n if (_scanner.getToken() === 6) {\n onSeparator(\":\");\n scanNext();\n if (!parseValue()) {\n handleError(4, [], [\n 2,\n 5\n /* SyntaxKind.CommaToken */\n ]);\n }\n } else {\n handleError(5, [], [\n 2,\n 5\n /* SyntaxKind.CommaToken */\n ]);\n }\n _jsonPath.pop();\n return true;\n }\n function parseObject() {\n onObjectBegin();\n scanNext();\n let needsComma = false;\n while (_scanner.getToken() !== 2 && _scanner.getToken() !== 17) {\n if (_scanner.getToken() === 5) {\n if (!needsComma) {\n handleError(4, [], []);\n }\n onSeparator(\",\");\n scanNext();\n if (_scanner.getToken() === 2 && allowTrailingComma) {\n break;\n }\n } else if (needsComma) {\n handleError(6, [], []);\n }\n if (!parseProperty()) {\n handleError(4, [], [\n 2,\n 5\n /* SyntaxKind.CommaToken */\n ]);\n }\n needsComma = true;\n }\n onObjectEnd();\n if (_scanner.getToken() !== 2) {\n handleError(7, [\n 2\n /* SyntaxKind.CloseBraceToken */\n ], []);\n } else {\n scanNext();\n }\n return true;\n }\n function parseArray() {\n onArrayBegin();\n scanNext();\n let isFirstElement = true;\n let needsComma = false;\n while (_scanner.getToken() !== 4 && _scanner.getToken() !== 17) {\n if (_scanner.getToken() === 5) {\n if (!needsComma) {\n handleError(4, [], []);\n }\n onSeparator(\",\");\n scanNext();\n if (_scanner.getToken() === 4 && allowTrailingComma) {\n break;\n }\n } else if (needsComma) {\n handleError(6, [], []);\n }\n if (isFirstElement) {\n _jsonPath.push(0);\n isFirstElement = false;\n } else {\n _jsonPath[_jsonPath.length - 1]++;\n }\n if (!parseValue()) {\n handleError(4, [], [\n 4,\n 5\n /* SyntaxKind.CommaToken */\n ]);\n }\n needsComma = true;\n }\n onArrayEnd();\n if (!isFirstElement) {\n _jsonPath.pop();\n }\n if (_scanner.getToken() !== 4) {\n handleError(8, [\n 4\n /* SyntaxKind.CloseBracketToken */\n ], []);\n } else {\n scanNext();\n }\n return true;\n }\n function parseValue() {\n switch (_scanner.getToken()) {\n case 3:\n return parseArray();\n case 1:\n return parseObject();\n case 10:\n return parseString(true);\n default:\n return parseLiteral();\n }\n }\n scanNext();\n if (_scanner.getToken() === 17) {\n if (options.allowEmptyContent) {\n return true;\n }\n handleError(4, [], []);\n return false;\n }\n if (!parseValue()) {\n handleError(4, [], []);\n return false;\n }\n if (_scanner.getToken() !== 17) {\n handleError(9, [], []);\n }\n return true;\n}\n\n// node_modules/jsonc-parser/lib/esm/main.js\nvar createScanner2 = createScanner;\nvar ScanError;\n(function(ScanError2) {\n ScanError2[ScanError2[\"None\"] = 0] = \"None\";\n ScanError2[ScanError2[\"UnexpectedEndOfComment\"] = 1] = \"UnexpectedEndOfComment\";\n ScanError2[ScanError2[\"UnexpectedEndOfString\"] = 2] = \"UnexpectedEndOfString\";\n ScanError2[ScanError2[\"UnexpectedEndOfNumber\"] = 3] = \"UnexpectedEndOfNumber\";\n ScanError2[ScanError2[\"InvalidUnicode\"] = 4] = \"InvalidUnicode\";\n ScanError2[ScanError2[\"InvalidEscapeCharacter\"] = 5] = \"InvalidEscapeCharacter\";\n ScanError2[ScanError2[\"InvalidCharacter\"] = 6] = \"InvalidCharacter\";\n})(ScanError || (ScanError = {}));\nvar SyntaxKind;\n(function(SyntaxKind2) {\n SyntaxKind2[SyntaxKind2[\"OpenBraceToken\"] = 1] = \"OpenBraceToken\";\n SyntaxKind2[SyntaxKind2[\"CloseBraceToken\"] = 2] = \"CloseBraceToken\";\n SyntaxKind2[SyntaxKind2[\"OpenBracketToken\"] = 3] = \"OpenBracketToken\";\n SyntaxKind2[SyntaxKind2[\"CloseBracketToken\"] = 4] = \"CloseBracketToken\";\n SyntaxKind2[SyntaxKind2[\"CommaToken\"] = 5] = \"CommaToken\";\n SyntaxKind2[SyntaxKind2[\"ColonToken\"] = 6] = \"ColonToken\";\n SyntaxKind2[SyntaxKind2[\"NullKeyword\"] = 7] = \"NullKeyword\";\n SyntaxKind2[SyntaxKind2[\"TrueKeyword\"] = 8] = \"TrueKeyword\";\n SyntaxKind2[SyntaxKind2[\"FalseKeyword\"] = 9] = \"FalseKeyword\";\n SyntaxKind2[SyntaxKind2[\"StringLiteral\"] = 10] = \"StringLiteral\";\n SyntaxKind2[SyntaxKind2[\"NumericLiteral\"] = 11] = \"NumericLiteral\";\n SyntaxKind2[SyntaxKind2[\"LineCommentTrivia\"] = 12] = \"LineCommentTrivia\";\n SyntaxKind2[SyntaxKind2[\"BlockCommentTrivia\"] = 13] = \"BlockCommentTrivia\";\n SyntaxKind2[SyntaxKind2[\"LineBreakTrivia\"] = 14] = \"LineBreakTrivia\";\n SyntaxKind2[SyntaxKind2[\"Trivia\"] = 15] = \"Trivia\";\n SyntaxKind2[SyntaxKind2[\"Unknown\"] = 16] = \"Unknown\";\n SyntaxKind2[SyntaxKind2[\"EOF\"] = 17] = \"EOF\";\n})(SyntaxKind || (SyntaxKind = {}));\nvar parse2 = parse;\nvar findNodeAtOffset2 = findNodeAtOffset;\nvar getNodePath2 = getNodePath;\nvar getNodeValue2 = getNodeValue;\nvar ParseErrorCode;\n(function(ParseErrorCode2) {\n ParseErrorCode2[ParseErrorCode2[\"InvalidSymbol\"] = 1] = \"InvalidSymbol\";\n ParseErrorCode2[ParseErrorCode2[\"InvalidNumberFormat\"] = 2] = \"InvalidNumberFormat\";\n ParseErrorCode2[ParseErrorCode2[\"PropertyNameExpected\"] = 3] = \"PropertyNameExpected\";\n ParseErrorCode2[ParseErrorCode2[\"ValueExpected\"] = 4] = \"ValueExpected\";\n ParseErrorCode2[ParseErrorCode2[\"ColonExpected\"] = 5] = \"ColonExpected\";\n ParseErrorCode2[ParseErrorCode2[\"CommaExpected\"] = 6] = \"CommaExpected\";\n ParseErrorCode2[ParseErrorCode2[\"CloseBraceExpected\"] = 7] = \"CloseBraceExpected\";\n ParseErrorCode2[ParseErrorCode2[\"CloseBracketExpected\"] = 8] = \"CloseBracketExpected\";\n ParseErrorCode2[ParseErrorCode2[\"EndOfFileExpected\"] = 9] = \"EndOfFileExpected\";\n ParseErrorCode2[ParseErrorCode2[\"InvalidCommentToken\"] = 10] = \"InvalidCommentToken\";\n ParseErrorCode2[ParseErrorCode2[\"UnexpectedEndOfComment\"] = 11] = \"UnexpectedEndOfComment\";\n ParseErrorCode2[ParseErrorCode2[\"UnexpectedEndOfString\"] = 12] = \"UnexpectedEndOfString\";\n ParseErrorCode2[ParseErrorCode2[\"UnexpectedEndOfNumber\"] = 13] = \"UnexpectedEndOfNumber\";\n ParseErrorCode2[ParseErrorCode2[\"InvalidUnicode\"] = 14] = \"InvalidUnicode\";\n ParseErrorCode2[ParseErrorCode2[\"InvalidEscapeCharacter\"] = 15] = \"InvalidEscapeCharacter\";\n ParseErrorCode2[ParseErrorCode2[\"InvalidCharacter\"] = 16] = \"InvalidCharacter\";\n})(ParseErrorCode || (ParseErrorCode = {}));\nfunction format2(documentText, range, options) {\n return format(documentText, range, options);\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/utils/objects.js\nfunction equals(one, other) {\n if (one === other) {\n return true;\n }\n if (one === null || one === void 0 || other === null || other === void 0) {\n return false;\n }\n if (typeof one !== typeof other) {\n return false;\n }\n if (typeof one !== \"object\") {\n return false;\n }\n if (Array.isArray(one) !== Array.isArray(other)) {\n return false;\n }\n let i, key;\n if (Array.isArray(one)) {\n if (one.length !== other.length) {\n return false;\n }\n for (i = 0; i < one.length; i++) {\n if (!equals(one[i], other[i])) {\n return false;\n }\n }\n } else {\n const oneKeys = [];\n for (key in one) {\n oneKeys.push(key);\n }\n oneKeys.sort();\n const otherKeys = [];\n for (key in other) {\n otherKeys.push(key);\n }\n otherKeys.sort();\n if (!equals(oneKeys, otherKeys)) {\n return false;\n }\n for (i = 0; i < oneKeys.length; i++) {\n if (!equals(one[oneKeys[i]], other[oneKeys[i]])) {\n return false;\n }\n }\n }\n return true;\n}\nfunction isNumber(val) {\n return typeof val === \"number\";\n}\nfunction isDefined(val) {\n return typeof val !== \"undefined\";\n}\nfunction isBoolean(val) {\n return typeof val === \"boolean\";\n}\nfunction isString(val) {\n return typeof val === \"string\";\n}\nfunction isObject(val) {\n return typeof val === \"object\" && val !== null && !Array.isArray(val);\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/utils/strings.js\nfunction startsWith(haystack, needle) {\n if (haystack.length < needle.length) {\n return false;\n }\n for (let i = 0; i < needle.length; i++) {\n if (haystack[i] !== needle[i]) {\n return false;\n }\n }\n return true;\n}\nfunction endsWith(haystack, needle) {\n const diff = haystack.length - needle.length;\n if (diff > 0) {\n return haystack.lastIndexOf(needle) === diff;\n } else if (diff === 0) {\n return haystack === needle;\n } else {\n return false;\n }\n}\nfunction extendedRegExp(pattern) {\n let flags = \"\";\n if (startsWith(pattern, \"(?i)\")) {\n pattern = pattern.substring(4);\n flags = \"i\";\n }\n try {\n return new RegExp(pattern, flags + \"u\");\n } catch (e) {\n try {\n return new RegExp(pattern, flags);\n } catch (e2) {\n return void 0;\n }\n }\n}\nfunction stringLength(str) {\n let count = 0;\n for (let i = 0; i < str.length; i++) {\n count++;\n const code = str.charCodeAt(i);\n if (55296 <= code && code <= 56319) {\n i++;\n }\n }\n return count;\n}\n\n// node_modules/vscode-languageserver-types/lib/esm/main.js\nvar DocumentUri;\n(function(DocumentUri2) {\n function is(value) {\n return typeof value === \"string\";\n }\n DocumentUri2.is = is;\n})(DocumentUri || (DocumentUri = {}));\nvar URI;\n(function(URI3) {\n function is(value) {\n return typeof value === \"string\";\n }\n URI3.is = is;\n})(URI || (URI = {}));\nvar integer;\n(function(integer2) {\n integer2.MIN_VALUE = -2147483648;\n integer2.MAX_VALUE = 2147483647;\n function is(value) {\n return typeof value === \"number\" && integer2.MIN_VALUE <= value && value <= integer2.MAX_VALUE;\n }\n integer2.is = is;\n})(integer || (integer = {}));\nvar uinteger;\n(function(uinteger2) {\n uinteger2.MIN_VALUE = 0;\n uinteger2.MAX_VALUE = 2147483647;\n function is(value) {\n return typeof value === \"number\" && uinteger2.MIN_VALUE <= value && value <= uinteger2.MAX_VALUE;\n }\n uinteger2.is = is;\n})(uinteger || (uinteger = {}));\nvar Position;\n(function(Position2) {\n function create(line, character) {\n if (line === Number.MAX_VALUE) {\n line = uinteger.MAX_VALUE;\n }\n if (character === Number.MAX_VALUE) {\n character = uinteger.MAX_VALUE;\n }\n return { line, character };\n }\n Position2.create = create;\n function is(value) {\n let candidate = value;\n return Is.objectLiteral(candidate) && Is.uinteger(candidate.line) && Is.uinteger(candidate.character);\n }\n Position2.is = is;\n})(Position || (Position = {}));\nvar Range;\n(function(Range2) {\n function create(one, two, three, four) {\n if (Is.uinteger(one) && Is.uinteger(two) && Is.uinteger(three) && Is.uinteger(four)) {\n return { start: Position.create(one, two), end: Position.create(three, four) };\n } else if (Position.is(one) && Position.is(two)) {\n return { start: one, end: two };\n } else {\n throw new Error(`Range#create called with invalid arguments[${one}, ${two}, ${three}, ${four}]`);\n }\n }\n Range2.create = create;\n function is(value) {\n let candidate = value;\n return Is.objectLiteral(candidate) && Position.is(candidate.start) && Position.is(candidate.end);\n }\n Range2.is = is;\n})(Range || (Range = {}));\nvar Location;\n(function(Location2) {\n function create(uri, range) {\n return { uri, range };\n }\n Location2.create = create;\n function is(value) {\n let candidate = value;\n return Is.objectLiteral(candidate) && Range.is(candidate.range) && (Is.string(candidate.uri) || Is.undefined(candidate.uri));\n }\n Location2.is = is;\n})(Location || (Location = {}));\nvar LocationLink;\n(function(LocationLink2) {\n function create(targetUri, targetRange, targetSelectionRange, originSelectionRange) {\n return { targetUri, targetRange, targetSelectionRange, originSelectionRange };\n }\n LocationLink2.create = create;\n function is(value) {\n let candidate = value;\n return Is.objectLiteral(candidate) && Range.is(candidate.targetRange) && Is.string(candidate.targetUri) && Range.is(candidate.targetSelectionRange) && (Range.is(candidate.originSelectionRange) || Is.undefined(candidate.originSelectionRange));\n }\n LocationLink2.is = is;\n})(LocationLink || (LocationLink = {}));\nvar Color;\n(function(Color2) {\n function create(red, green, blue, alpha) {\n return {\n red,\n green,\n blue,\n alpha\n };\n }\n Color2.create = create;\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Is.numberRange(candidate.red, 0, 1) && Is.numberRange(candidate.green, 0, 1) && Is.numberRange(candidate.blue, 0, 1) && Is.numberRange(candidate.alpha, 0, 1);\n }\n Color2.is = is;\n})(Color || (Color = {}));\nvar ColorInformation;\n(function(ColorInformation2) {\n function create(range, color) {\n return {\n range,\n color\n };\n }\n ColorInformation2.create = create;\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Range.is(candidate.range) && Color.is(candidate.color);\n }\n ColorInformation2.is = is;\n})(ColorInformation || (ColorInformation = {}));\nvar ColorPresentation;\n(function(ColorPresentation2) {\n function create(label, textEdit, additionalTextEdits) {\n return {\n label,\n textEdit,\n additionalTextEdits\n };\n }\n ColorPresentation2.create = create;\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Is.string(candidate.label) && (Is.undefined(candidate.textEdit) || TextEdit.is(candidate)) && (Is.undefined(candidate.additionalTextEdits) || Is.typedArray(candidate.additionalTextEdits, TextEdit.is));\n }\n ColorPresentation2.is = is;\n})(ColorPresentation || (ColorPresentation = {}));\nvar FoldingRangeKind;\n(function(FoldingRangeKind2) {\n FoldingRangeKind2.Comment = \"comment\";\n FoldingRangeKind2.Imports = \"imports\";\n FoldingRangeKind2.Region = \"region\";\n})(FoldingRangeKind || (FoldingRangeKind = {}));\nvar FoldingRange;\n(function(FoldingRange2) {\n function create(startLine, endLine, startCharacter, endCharacter, kind, collapsedText) {\n const result = {\n startLine,\n endLine\n };\n if (Is.defined(startCharacter)) {\n result.startCharacter = startCharacter;\n }\n if (Is.defined(endCharacter)) {\n result.endCharacter = endCharacter;\n }\n if (Is.defined(kind)) {\n result.kind = kind;\n }\n if (Is.defined(collapsedText)) {\n result.collapsedText = collapsedText;\n }\n return result;\n }\n FoldingRange2.create = create;\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Is.uinteger(candidate.startLine) && Is.uinteger(candidate.startLine) && (Is.undefined(candidate.startCharacter) || Is.uinteger(candidate.startCharacter)) && (Is.undefined(candidate.endCharacter) || Is.uinteger(candidate.endCharacter)) && (Is.undefined(candidate.kind) || Is.string(candidate.kind));\n }\n FoldingRange2.is = is;\n})(FoldingRange || (FoldingRange = {}));\nvar DiagnosticRelatedInformation;\n(function(DiagnosticRelatedInformation2) {\n function create(location, message) {\n return {\n location,\n message\n };\n }\n DiagnosticRelatedInformation2.create = create;\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Location.is(candidate.location) && Is.string(candidate.message);\n }\n DiagnosticRelatedInformation2.is = is;\n})(DiagnosticRelatedInformation || (DiagnosticRelatedInformation = {}));\nvar DiagnosticSeverity;\n(function(DiagnosticSeverity2) {\n DiagnosticSeverity2.Error = 1;\n DiagnosticSeverity2.Warning = 2;\n DiagnosticSeverity2.Information = 3;\n DiagnosticSeverity2.Hint = 4;\n})(DiagnosticSeverity || (DiagnosticSeverity = {}));\nvar DiagnosticTag;\n(function(DiagnosticTag2) {\n DiagnosticTag2.Unnecessary = 1;\n DiagnosticTag2.Deprecated = 2;\n})(DiagnosticTag || (DiagnosticTag = {}));\nvar CodeDescription;\n(function(CodeDescription2) {\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Is.string(candidate.href);\n }\n CodeDescription2.is = is;\n})(CodeDescription || (CodeDescription = {}));\nvar Diagnostic;\n(function(Diagnostic2) {\n function create(range, message, severity, code, source, relatedInformation) {\n let result = { range, message };\n if (Is.defined(severity)) {\n result.severity = severity;\n }\n if (Is.defined(code)) {\n result.code = code;\n }\n if (Is.defined(source)) {\n result.source = source;\n }\n if (Is.defined(relatedInformation)) {\n result.relatedInformation = relatedInformation;\n }\n return result;\n }\n Diagnostic2.create = create;\n function is(value) {\n var _a;\n let candidate = value;\n return Is.defined(candidate) && Range.is(candidate.range) && Is.string(candidate.message) && (Is.number(candidate.severity) || Is.undefined(candidate.severity)) && (Is.integer(candidate.code) || Is.string(candidate.code) || Is.undefined(candidate.code)) && (Is.undefined(candidate.codeDescription) || Is.string((_a = candidate.codeDescription) === null || _a === void 0 ? void 0 : _a.href)) && (Is.string(candidate.source) || Is.undefined(candidate.source)) && (Is.undefined(candidate.relatedInformation) || Is.typedArray(candidate.relatedInformation, DiagnosticRelatedInformation.is));\n }\n Diagnostic2.is = is;\n})(Diagnostic || (Diagnostic = {}));\nvar Command;\n(function(Command2) {\n function create(title, command, ...args) {\n let result = { title, command };\n if (Is.defined(args) && args.length > 0) {\n result.arguments = args;\n }\n return result;\n }\n Command2.create = create;\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.string(candidate.title) && Is.string(candidate.command);\n }\n Command2.is = is;\n})(Command || (Command = {}));\nvar TextEdit;\n(function(TextEdit2) {\n function replace(range, newText) {\n return { range, newText };\n }\n TextEdit2.replace = replace;\n function insert(position, newText) {\n return { range: { start: position, end: position }, newText };\n }\n TextEdit2.insert = insert;\n function del(range) {\n return { range, newText: \"\" };\n }\n TextEdit2.del = del;\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Is.string(candidate.newText) && Range.is(candidate.range);\n }\n TextEdit2.is = is;\n})(TextEdit || (TextEdit = {}));\nvar ChangeAnnotation;\n(function(ChangeAnnotation2) {\n function create(label, needsConfirmation, description) {\n const result = { label };\n if (needsConfirmation !== void 0) {\n result.needsConfirmation = needsConfirmation;\n }\n if (description !== void 0) {\n result.description = description;\n }\n return result;\n }\n ChangeAnnotation2.create = create;\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Is.string(candidate.label) && (Is.boolean(candidate.needsConfirmation) || candidate.needsConfirmation === void 0) && (Is.string(candidate.description) || candidate.description === void 0);\n }\n ChangeAnnotation2.is = is;\n})(ChangeAnnotation || (ChangeAnnotation = {}));\nvar ChangeAnnotationIdentifier;\n(function(ChangeAnnotationIdentifier2) {\n function is(value) {\n const candidate = value;\n return Is.string(candidate);\n }\n ChangeAnnotationIdentifier2.is = is;\n})(ChangeAnnotationIdentifier || (ChangeAnnotationIdentifier = {}));\nvar AnnotatedTextEdit;\n(function(AnnotatedTextEdit2) {\n function replace(range, newText, annotation) {\n return { range, newText, annotationId: annotation };\n }\n AnnotatedTextEdit2.replace = replace;\n function insert(position, newText, annotation) {\n return { range: { start: position, end: position }, newText, annotationId: annotation };\n }\n AnnotatedTextEdit2.insert = insert;\n function del(range, annotation) {\n return { range, newText: \"\", annotationId: annotation };\n }\n AnnotatedTextEdit2.del = del;\n function is(value) {\n const candidate = value;\n return TextEdit.is(candidate) && (ChangeAnnotation.is(candidate.annotationId) || ChangeAnnotationIdentifier.is(candidate.annotationId));\n }\n AnnotatedTextEdit2.is = is;\n})(AnnotatedTextEdit || (AnnotatedTextEdit = {}));\nvar TextDocumentEdit;\n(function(TextDocumentEdit2) {\n function create(textDocument, edits) {\n return { textDocument, edits };\n }\n TextDocumentEdit2.create = create;\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && OptionalVersionedTextDocumentIdentifier.is(candidate.textDocument) && Array.isArray(candidate.edits);\n }\n TextDocumentEdit2.is = is;\n})(TextDocumentEdit || (TextDocumentEdit = {}));\nvar CreateFile;\n(function(CreateFile2) {\n function create(uri, options, annotation) {\n let result = {\n kind: \"create\",\n uri\n };\n if (options !== void 0 && (options.overwrite !== void 0 || options.ignoreIfExists !== void 0)) {\n result.options = options;\n }\n if (annotation !== void 0) {\n result.annotationId = annotation;\n }\n return result;\n }\n CreateFile2.create = create;\n function is(value) {\n let candidate = value;\n return candidate && candidate.kind === \"create\" && Is.string(candidate.uri) && (candidate.options === void 0 || (candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists))) && (candidate.annotationId === void 0 || ChangeAnnotationIdentifier.is(candidate.annotationId));\n }\n CreateFile2.is = is;\n})(CreateFile || (CreateFile = {}));\nvar RenameFile;\n(function(RenameFile2) {\n function create(oldUri, newUri, options, annotation) {\n let result = {\n kind: \"rename\",\n oldUri,\n newUri\n };\n if (options !== void 0 && (options.overwrite !== void 0 || options.ignoreIfExists !== void 0)) {\n result.options = options;\n }\n if (annotation !== void 0) {\n result.annotationId = annotation;\n }\n return result;\n }\n RenameFile2.create = create;\n function is(value) {\n let candidate = value;\n return candidate && candidate.kind === \"rename\" && Is.string(candidate.oldUri) && Is.string(candidate.newUri) && (candidate.options === void 0 || (candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists))) && (candidate.annotationId === void 0 || ChangeAnnotationIdentifier.is(candidate.annotationId));\n }\n RenameFile2.is = is;\n})(RenameFile || (RenameFile = {}));\nvar DeleteFile;\n(function(DeleteFile2) {\n function create(uri, options, annotation) {\n let result = {\n kind: \"delete\",\n uri\n };\n if (options !== void 0 && (options.recursive !== void 0 || options.ignoreIfNotExists !== void 0)) {\n result.options = options;\n }\n if (annotation !== void 0) {\n result.annotationId = annotation;\n }\n return result;\n }\n DeleteFile2.create = create;\n function is(value) {\n let candidate = value;\n return candidate && candidate.kind === \"delete\" && Is.string(candidate.uri) && (candidate.options === void 0 || (candidate.options.recursive === void 0 || Is.boolean(candidate.options.recursive)) && (candidate.options.ignoreIfNotExists === void 0 || Is.boolean(candidate.options.ignoreIfNotExists))) && (candidate.annotationId === void 0 || ChangeAnnotationIdentifier.is(candidate.annotationId));\n }\n DeleteFile2.is = is;\n})(DeleteFile || (DeleteFile = {}));\nvar WorkspaceEdit;\n(function(WorkspaceEdit2) {\n function is(value) {\n let candidate = value;\n return candidate && (candidate.changes !== void 0 || candidate.documentChanges !== void 0) && (candidate.documentChanges === void 0 || candidate.documentChanges.every((change) => {\n if (Is.string(change.kind)) {\n return CreateFile.is(change) || RenameFile.is(change) || DeleteFile.is(change);\n } else {\n return TextDocumentEdit.is(change);\n }\n }));\n }\n WorkspaceEdit2.is = is;\n})(WorkspaceEdit || (WorkspaceEdit = {}));\nvar TextDocumentIdentifier;\n(function(TextDocumentIdentifier2) {\n function create(uri) {\n return { uri };\n }\n TextDocumentIdentifier2.create = create;\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri);\n }\n TextDocumentIdentifier2.is = is;\n})(TextDocumentIdentifier || (TextDocumentIdentifier = {}));\nvar VersionedTextDocumentIdentifier;\n(function(VersionedTextDocumentIdentifier2) {\n function create(uri, version) {\n return { uri, version };\n }\n VersionedTextDocumentIdentifier2.create = create;\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri) && Is.integer(candidate.version);\n }\n VersionedTextDocumentIdentifier2.is = is;\n})(VersionedTextDocumentIdentifier || (VersionedTextDocumentIdentifier = {}));\nvar OptionalVersionedTextDocumentIdentifier;\n(function(OptionalVersionedTextDocumentIdentifier2) {\n function create(uri, version) {\n return { uri, version };\n }\n OptionalVersionedTextDocumentIdentifier2.create = create;\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri) && (candidate.version === null || Is.integer(candidate.version));\n }\n OptionalVersionedTextDocumentIdentifier2.is = is;\n})(OptionalVersionedTextDocumentIdentifier || (OptionalVersionedTextDocumentIdentifier = {}));\nvar TextDocumentItem;\n(function(TextDocumentItem2) {\n function create(uri, languageId, version, text) {\n return { uri, languageId, version, text };\n }\n TextDocumentItem2.create = create;\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri) && Is.string(candidate.languageId) && Is.integer(candidate.version) && Is.string(candidate.text);\n }\n TextDocumentItem2.is = is;\n})(TextDocumentItem || (TextDocumentItem = {}));\nvar MarkupKind;\n(function(MarkupKind2) {\n MarkupKind2.PlainText = \"plaintext\";\n MarkupKind2.Markdown = \"markdown\";\n function is(value) {\n const candidate = value;\n return candidate === MarkupKind2.PlainText || candidate === MarkupKind2.Markdown;\n }\n MarkupKind2.is = is;\n})(MarkupKind || (MarkupKind = {}));\nvar MarkupContent;\n(function(MarkupContent2) {\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(value) && MarkupKind.is(candidate.kind) && Is.string(candidate.value);\n }\n MarkupContent2.is = is;\n})(MarkupContent || (MarkupContent = {}));\nvar CompletionItemKind;\n(function(CompletionItemKind2) {\n CompletionItemKind2.Text = 1;\n CompletionItemKind2.Method = 2;\n CompletionItemKind2.Function = 3;\n CompletionItemKind2.Constructor = 4;\n CompletionItemKind2.Field = 5;\n CompletionItemKind2.Variable = 6;\n CompletionItemKind2.Class = 7;\n CompletionItemKind2.Interface = 8;\n CompletionItemKind2.Module = 9;\n CompletionItemKind2.Property = 10;\n CompletionItemKind2.Unit = 11;\n CompletionItemKind2.Value = 12;\n CompletionItemKind2.Enum = 13;\n CompletionItemKind2.Keyword = 14;\n CompletionItemKind2.Snippet = 15;\n CompletionItemKind2.Color = 16;\n CompletionItemKind2.File = 17;\n CompletionItemKind2.Reference = 18;\n CompletionItemKind2.Folder = 19;\n CompletionItemKind2.EnumMember = 20;\n CompletionItemKind2.Constant = 21;\n CompletionItemKind2.Struct = 22;\n CompletionItemKind2.Event = 23;\n CompletionItemKind2.Operator = 24;\n CompletionItemKind2.TypeParameter = 25;\n})(CompletionItemKind || (CompletionItemKind = {}));\nvar InsertTextFormat;\n(function(InsertTextFormat2) {\n InsertTextFormat2.PlainText = 1;\n InsertTextFormat2.Snippet = 2;\n})(InsertTextFormat || (InsertTextFormat = {}));\nvar CompletionItemTag;\n(function(CompletionItemTag2) {\n CompletionItemTag2.Deprecated = 1;\n})(CompletionItemTag || (CompletionItemTag = {}));\nvar InsertReplaceEdit;\n(function(InsertReplaceEdit2) {\n function create(newText, insert, replace) {\n return { newText, insert, replace };\n }\n InsertReplaceEdit2.create = create;\n function is(value) {\n const candidate = value;\n return candidate && Is.string(candidate.newText) && Range.is(candidate.insert) && Range.is(candidate.replace);\n }\n InsertReplaceEdit2.is = is;\n})(InsertReplaceEdit || (InsertReplaceEdit = {}));\nvar InsertTextMode;\n(function(InsertTextMode2) {\n InsertTextMode2.asIs = 1;\n InsertTextMode2.adjustIndentation = 2;\n})(InsertTextMode || (InsertTextMode = {}));\nvar CompletionItemLabelDetails;\n(function(CompletionItemLabelDetails2) {\n function is(value) {\n const candidate = value;\n return candidate && (Is.string(candidate.detail) || candidate.detail === void 0) && (Is.string(candidate.description) || candidate.description === void 0);\n }\n CompletionItemLabelDetails2.is = is;\n})(CompletionItemLabelDetails || (CompletionItemLabelDetails = {}));\nvar CompletionItem;\n(function(CompletionItem2) {\n function create(label) {\n return { label };\n }\n CompletionItem2.create = create;\n})(CompletionItem || (CompletionItem = {}));\nvar CompletionList;\n(function(CompletionList2) {\n function create(items, isIncomplete) {\n return { items: items ? items : [], isIncomplete: !!isIncomplete };\n }\n CompletionList2.create = create;\n})(CompletionList || (CompletionList = {}));\nvar MarkedString;\n(function(MarkedString2) {\n function fromPlainText(plainText) {\n return plainText.replace(/[\\\\`*_{}[\\]()#+\\-.!]/g, \"\\\\$&\");\n }\n MarkedString2.fromPlainText = fromPlainText;\n function is(value) {\n const candidate = value;\n return Is.string(candidate) || Is.objectLiteral(candidate) && Is.string(candidate.language) && Is.string(candidate.value);\n }\n MarkedString2.is = is;\n})(MarkedString || (MarkedString = {}));\nvar Hover;\n(function(Hover2) {\n function is(value) {\n let candidate = value;\n return !!candidate && Is.objectLiteral(candidate) && (MarkupContent.is(candidate.contents) || MarkedString.is(candidate.contents) || Is.typedArray(candidate.contents, MarkedString.is)) && (value.range === void 0 || Range.is(value.range));\n }\n Hover2.is = is;\n})(Hover || (Hover = {}));\nvar ParameterInformation;\n(function(ParameterInformation2) {\n function create(label, documentation) {\n return documentation ? { label, documentation } : { label };\n }\n ParameterInformation2.create = create;\n})(ParameterInformation || (ParameterInformation = {}));\nvar SignatureInformation;\n(function(SignatureInformation2) {\n function create(label, documentation, ...parameters) {\n let result = { label };\n if (Is.defined(documentation)) {\n result.documentation = documentation;\n }\n if (Is.defined(parameters)) {\n result.parameters = parameters;\n } else {\n result.parameters = [];\n }\n return result;\n }\n SignatureInformation2.create = create;\n})(SignatureInformation || (SignatureInformation = {}));\nvar DocumentHighlightKind;\n(function(DocumentHighlightKind2) {\n DocumentHighlightKind2.Text = 1;\n DocumentHighlightKind2.Read = 2;\n DocumentHighlightKind2.Write = 3;\n})(DocumentHighlightKind || (DocumentHighlightKind = {}));\nvar DocumentHighlight;\n(function(DocumentHighlight2) {\n function create(range, kind) {\n let result = { range };\n if (Is.number(kind)) {\n result.kind = kind;\n }\n return result;\n }\n DocumentHighlight2.create = create;\n})(DocumentHighlight || (DocumentHighlight = {}));\nvar SymbolKind;\n(function(SymbolKind2) {\n SymbolKind2.File = 1;\n SymbolKind2.Module = 2;\n SymbolKind2.Namespace = 3;\n SymbolKind2.Package = 4;\n SymbolKind2.Class = 5;\n SymbolKind2.Method = 6;\n SymbolKind2.Property = 7;\n SymbolKind2.Field = 8;\n SymbolKind2.Constructor = 9;\n SymbolKind2.Enum = 10;\n SymbolKind2.Interface = 11;\n SymbolKind2.Function = 12;\n SymbolKind2.Variable = 13;\n SymbolKind2.Constant = 14;\n SymbolKind2.String = 15;\n SymbolKind2.Number = 16;\n SymbolKind2.Boolean = 17;\n SymbolKind2.Array = 18;\n SymbolKind2.Object = 19;\n SymbolKind2.Key = 20;\n SymbolKind2.Null = 21;\n SymbolKind2.EnumMember = 22;\n SymbolKind2.Struct = 23;\n SymbolKind2.Event = 24;\n SymbolKind2.Operator = 25;\n SymbolKind2.TypeParameter = 26;\n})(SymbolKind || (SymbolKind = {}));\nvar SymbolTag;\n(function(SymbolTag2) {\n SymbolTag2.Deprecated = 1;\n})(SymbolTag || (SymbolTag = {}));\nvar SymbolInformation;\n(function(SymbolInformation2) {\n function create(name, kind, range, uri, containerName) {\n let result = {\n name,\n kind,\n location: { uri, range }\n };\n if (containerName) {\n result.containerName = containerName;\n }\n return result;\n }\n SymbolInformation2.create = create;\n})(SymbolInformation || (SymbolInformation = {}));\nvar WorkspaceSymbol;\n(function(WorkspaceSymbol2) {\n function create(name, kind, uri, range) {\n return range !== void 0 ? { name, kind, location: { uri, range } } : { name, kind, location: { uri } };\n }\n WorkspaceSymbol2.create = create;\n})(WorkspaceSymbol || (WorkspaceSymbol = {}));\nvar DocumentSymbol;\n(function(DocumentSymbol2) {\n function create(name, detail, kind, range, selectionRange, children) {\n let result = {\n name,\n detail,\n kind,\n range,\n selectionRange\n };\n if (children !== void 0) {\n result.children = children;\n }\n return result;\n }\n DocumentSymbol2.create = create;\n function is(value) {\n let candidate = value;\n return candidate && Is.string(candidate.name) && Is.number(candidate.kind) && Range.is(candidate.range) && Range.is(candidate.selectionRange) && (candidate.detail === void 0 || Is.string(candidate.detail)) && (candidate.deprecated === void 0 || Is.boolean(candidate.deprecated)) && (candidate.children === void 0 || Array.isArray(candidate.children)) && (candidate.tags === void 0 || Array.isArray(candidate.tags));\n }\n DocumentSymbol2.is = is;\n})(DocumentSymbol || (DocumentSymbol = {}));\nvar CodeActionKind;\n(function(CodeActionKind2) {\n CodeActionKind2.Empty = \"\";\n CodeActionKind2.QuickFix = \"quickfix\";\n CodeActionKind2.Refactor = \"refactor\";\n CodeActionKind2.RefactorExtract = \"refactor.extract\";\n CodeActionKind2.RefactorInline = \"refactor.inline\";\n CodeActionKind2.RefactorRewrite = \"refactor.rewrite\";\n CodeActionKind2.Source = \"source\";\n CodeActionKind2.SourceOrganizeImports = \"source.organizeImports\";\n CodeActionKind2.SourceFixAll = \"source.fixAll\";\n})(CodeActionKind || (CodeActionKind = {}));\nvar CodeActionTriggerKind;\n(function(CodeActionTriggerKind2) {\n CodeActionTriggerKind2.Invoked = 1;\n CodeActionTriggerKind2.Automatic = 2;\n})(CodeActionTriggerKind || (CodeActionTriggerKind = {}));\nvar CodeActionContext;\n(function(CodeActionContext2) {\n function create(diagnostics, only, triggerKind) {\n let result = { diagnostics };\n if (only !== void 0 && only !== null) {\n result.only = only;\n }\n if (triggerKind !== void 0 && triggerKind !== null) {\n result.triggerKind = triggerKind;\n }\n return result;\n }\n CodeActionContext2.create = create;\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.typedArray(candidate.diagnostics, Diagnostic.is) && (candidate.only === void 0 || Is.typedArray(candidate.only, Is.string)) && (candidate.triggerKind === void 0 || candidate.triggerKind === CodeActionTriggerKind.Invoked || candidate.triggerKind === CodeActionTriggerKind.Automatic);\n }\n CodeActionContext2.is = is;\n})(CodeActionContext || (CodeActionContext = {}));\nvar CodeAction;\n(function(CodeAction2) {\n function create(title, kindOrCommandOrEdit, kind) {\n let result = { title };\n let checkKind = true;\n if (typeof kindOrCommandOrEdit === \"string\") {\n checkKind = false;\n result.kind = kindOrCommandOrEdit;\n } else if (Command.is(kindOrCommandOrEdit)) {\n result.command = kindOrCommandOrEdit;\n } else {\n result.edit = kindOrCommandOrEdit;\n }\n if (checkKind && kind !== void 0) {\n result.kind = kind;\n }\n return result;\n }\n CodeAction2.create = create;\n function is(value) {\n let candidate = value;\n return candidate && Is.string(candidate.title) && (candidate.diagnostics === void 0 || Is.typedArray(candidate.diagnostics, Diagnostic.is)) && (candidate.kind === void 0 || Is.string(candidate.kind)) && (candidate.edit !== void 0 || candidate.command !== void 0) && (candidate.command === void 0 || Command.is(candidate.command)) && (candidate.isPreferred === void 0 || Is.boolean(candidate.isPreferred)) && (candidate.edit === void 0 || WorkspaceEdit.is(candidate.edit));\n }\n CodeAction2.is = is;\n})(CodeAction || (CodeAction = {}));\nvar CodeLens;\n(function(CodeLens2) {\n function create(range, data) {\n let result = { range };\n if (Is.defined(data)) {\n result.data = data;\n }\n return result;\n }\n CodeLens2.create = create;\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.command) || Command.is(candidate.command));\n }\n CodeLens2.is = is;\n})(CodeLens || (CodeLens = {}));\nvar FormattingOptions;\n(function(FormattingOptions2) {\n function create(tabSize, insertSpaces) {\n return { tabSize, insertSpaces };\n }\n FormattingOptions2.create = create;\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.uinteger(candidate.tabSize) && Is.boolean(candidate.insertSpaces);\n }\n FormattingOptions2.is = is;\n})(FormattingOptions || (FormattingOptions = {}));\nvar DocumentLink;\n(function(DocumentLink2) {\n function create(range, target, data) {\n return { range, target, data };\n }\n DocumentLink2.create = create;\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.target) || Is.string(candidate.target));\n }\n DocumentLink2.is = is;\n})(DocumentLink || (DocumentLink = {}));\nvar SelectionRange;\n(function(SelectionRange2) {\n function create(range, parent) {\n return { range, parent };\n }\n SelectionRange2.create = create;\n function is(value) {\n let candidate = value;\n return Is.objectLiteral(candidate) && Range.is(candidate.range) && (candidate.parent === void 0 || SelectionRange2.is(candidate.parent));\n }\n SelectionRange2.is = is;\n})(SelectionRange || (SelectionRange = {}));\nvar SemanticTokenTypes;\n(function(SemanticTokenTypes2) {\n SemanticTokenTypes2[\"namespace\"] = \"namespace\";\n SemanticTokenTypes2[\"type\"] = \"type\";\n SemanticTokenTypes2[\"class\"] = \"class\";\n SemanticTokenTypes2[\"enum\"] = \"enum\";\n SemanticTokenTypes2[\"interface\"] = \"interface\";\n SemanticTokenTypes2[\"struct\"] = \"struct\";\n SemanticTokenTypes2[\"typeParameter\"] = \"typeParameter\";\n SemanticTokenTypes2[\"parameter\"] = \"parameter\";\n SemanticTokenTypes2[\"variable\"] = \"variable\";\n SemanticTokenTypes2[\"property\"] = \"property\";\n SemanticTokenTypes2[\"enumMember\"] = \"enumMember\";\n SemanticTokenTypes2[\"event\"] = \"event\";\n SemanticTokenTypes2[\"function\"] = \"function\";\n SemanticTokenTypes2[\"method\"] = \"method\";\n SemanticTokenTypes2[\"macro\"] = \"macro\";\n SemanticTokenTypes2[\"keyword\"] = \"keyword\";\n SemanticTokenTypes2[\"modifier\"] = \"modifier\";\n SemanticTokenTypes2[\"comment\"] = \"comment\";\n SemanticTokenTypes2[\"string\"] = \"string\";\n SemanticTokenTypes2[\"number\"] = \"number\";\n SemanticTokenTypes2[\"regexp\"] = \"regexp\";\n SemanticTokenTypes2[\"operator\"] = \"operator\";\n SemanticTokenTypes2[\"decorator\"] = \"decorator\";\n})(SemanticTokenTypes || (SemanticTokenTypes = {}));\nvar SemanticTokenModifiers;\n(function(SemanticTokenModifiers2) {\n SemanticTokenModifiers2[\"declaration\"] = \"declaration\";\n SemanticTokenModifiers2[\"definition\"] = \"definition\";\n SemanticTokenModifiers2[\"readonly\"] = \"readonly\";\n SemanticTokenModifiers2[\"static\"] = \"static\";\n SemanticTokenModifiers2[\"deprecated\"] = \"deprecated\";\n SemanticTokenModifiers2[\"abstract\"] = \"abstract\";\n SemanticTokenModifiers2[\"async\"] = \"async\";\n SemanticTokenModifiers2[\"modification\"] = \"modification\";\n SemanticTokenModifiers2[\"documentation\"] = \"documentation\";\n SemanticTokenModifiers2[\"defaultLibrary\"] = \"defaultLibrary\";\n})(SemanticTokenModifiers || (SemanticTokenModifiers = {}));\nvar SemanticTokens;\n(function(SemanticTokens2) {\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && (candidate.resultId === void 0 || typeof candidate.resultId === \"string\") && Array.isArray(candidate.data) && (candidate.data.length === 0 || typeof candidate.data[0] === \"number\");\n }\n SemanticTokens2.is = is;\n})(SemanticTokens || (SemanticTokens = {}));\nvar InlineValueText;\n(function(InlineValueText2) {\n function create(range, text) {\n return { range, text };\n }\n InlineValueText2.create = create;\n function is(value) {\n const candidate = value;\n return candidate !== void 0 && candidate !== null && Range.is(candidate.range) && Is.string(candidate.text);\n }\n InlineValueText2.is = is;\n})(InlineValueText || (InlineValueText = {}));\nvar InlineValueVariableLookup;\n(function(InlineValueVariableLookup2) {\n function create(range, variableName, caseSensitiveLookup) {\n return { range, variableName, caseSensitiveLookup };\n }\n InlineValueVariableLookup2.create = create;\n function is(value) {\n const candidate = value;\n return candidate !== void 0 && candidate !== null && Range.is(candidate.range) && Is.boolean(candidate.caseSensitiveLookup) && (Is.string(candidate.variableName) || candidate.variableName === void 0);\n }\n InlineValueVariableLookup2.is = is;\n})(InlineValueVariableLookup || (InlineValueVariableLookup = {}));\nvar InlineValueEvaluatableExpression;\n(function(InlineValueEvaluatableExpression2) {\n function create(range, expression) {\n return { range, expression };\n }\n InlineValueEvaluatableExpression2.create = create;\n function is(value) {\n const candidate = value;\n return candidate !== void 0 && candidate !== null && Range.is(candidate.range) && (Is.string(candidate.expression) || candidate.expression === void 0);\n }\n InlineValueEvaluatableExpression2.is = is;\n})(InlineValueEvaluatableExpression || (InlineValueEvaluatableExpression = {}));\nvar InlineValueContext;\n(function(InlineValueContext2) {\n function create(frameId, stoppedLocation) {\n return { frameId, stoppedLocation };\n }\n InlineValueContext2.create = create;\n function is(value) {\n const candidate = value;\n return Is.defined(candidate) && Range.is(value.stoppedLocation);\n }\n InlineValueContext2.is = is;\n})(InlineValueContext || (InlineValueContext = {}));\nvar InlayHintKind;\n(function(InlayHintKind2) {\n InlayHintKind2.Type = 1;\n InlayHintKind2.Parameter = 2;\n function is(value) {\n return value === 1 || value === 2;\n }\n InlayHintKind2.is = is;\n})(InlayHintKind || (InlayHintKind = {}));\nvar InlayHintLabelPart;\n(function(InlayHintLabelPart2) {\n function create(value) {\n return { value };\n }\n InlayHintLabelPart2.create = create;\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && (candidate.tooltip === void 0 || Is.string(candidate.tooltip) || MarkupContent.is(candidate.tooltip)) && (candidate.location === void 0 || Location.is(candidate.location)) && (candidate.command === void 0 || Command.is(candidate.command));\n }\n InlayHintLabelPart2.is = is;\n})(InlayHintLabelPart || (InlayHintLabelPart = {}));\nvar InlayHint;\n(function(InlayHint2) {\n function create(position, label, kind) {\n const result = { position, label };\n if (kind !== void 0) {\n result.kind = kind;\n }\n return result;\n }\n InlayHint2.create = create;\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Position.is(candidate.position) && (Is.string(candidate.label) || Is.typedArray(candidate.label, InlayHintLabelPart.is)) && (candidate.kind === void 0 || InlayHintKind.is(candidate.kind)) && candidate.textEdits === void 0 || Is.typedArray(candidate.textEdits, TextEdit.is) && (candidate.tooltip === void 0 || Is.string(candidate.tooltip) || MarkupContent.is(candidate.tooltip)) && (candidate.paddingLeft === void 0 || Is.boolean(candidate.paddingLeft)) && (candidate.paddingRight === void 0 || Is.boolean(candidate.paddingRight));\n }\n InlayHint2.is = is;\n})(InlayHint || (InlayHint = {}));\nvar StringValue;\n(function(StringValue2) {\n function createSnippet(value) {\n return { kind: \"snippet\", value };\n }\n StringValue2.createSnippet = createSnippet;\n})(StringValue || (StringValue = {}));\nvar InlineCompletionItem;\n(function(InlineCompletionItem2) {\n function create(insertText, filterText, range, command) {\n return { insertText, filterText, range, command };\n }\n InlineCompletionItem2.create = create;\n})(InlineCompletionItem || (InlineCompletionItem = {}));\nvar InlineCompletionList;\n(function(InlineCompletionList2) {\n function create(items) {\n return { items };\n }\n InlineCompletionList2.create = create;\n})(InlineCompletionList || (InlineCompletionList = {}));\nvar InlineCompletionTriggerKind;\n(function(InlineCompletionTriggerKind2) {\n InlineCompletionTriggerKind2.Invoked = 0;\n InlineCompletionTriggerKind2.Automatic = 1;\n})(InlineCompletionTriggerKind || (InlineCompletionTriggerKind = {}));\nvar SelectedCompletionInfo;\n(function(SelectedCompletionInfo2) {\n function create(range, text) {\n return { range, text };\n }\n SelectedCompletionInfo2.create = create;\n})(SelectedCompletionInfo || (SelectedCompletionInfo = {}));\nvar InlineCompletionContext;\n(function(InlineCompletionContext2) {\n function create(triggerKind, selectedCompletionInfo) {\n return { triggerKind, selectedCompletionInfo };\n }\n InlineCompletionContext2.create = create;\n})(InlineCompletionContext || (InlineCompletionContext = {}));\nvar WorkspaceFolder;\n(function(WorkspaceFolder2) {\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && URI.is(candidate.uri) && Is.string(candidate.name);\n }\n WorkspaceFolder2.is = is;\n})(WorkspaceFolder || (WorkspaceFolder = {}));\nvar TextDocument;\n(function(TextDocument3) {\n function create(uri, languageId, version, content) {\n return new FullTextDocument(uri, languageId, version, content);\n }\n TextDocument3.create = create;\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri) && (Is.undefined(candidate.languageId) || Is.string(candidate.languageId)) && Is.uinteger(candidate.lineCount) && Is.func(candidate.getText) && Is.func(candidate.positionAt) && Is.func(candidate.offsetAt) ? true : false;\n }\n TextDocument3.is = is;\n function applyEdits(document, edits) {\n let text = document.getText();\n let sortedEdits = mergeSort2(edits, (a2, b) => {\n let diff = a2.range.start.line - b.range.start.line;\n if (diff === 0) {\n return a2.range.start.character - b.range.start.character;\n }\n return diff;\n });\n let lastModifiedOffset = text.length;\n for (let i = sortedEdits.length - 1; i >= 0; i--) {\n let e = sortedEdits[i];\n let startOffset = document.offsetAt(e.range.start);\n let endOffset = document.offsetAt(e.range.end);\n if (endOffset <= lastModifiedOffset) {\n text = text.substring(0, startOffset) + e.newText + text.substring(endOffset, text.length);\n } else {\n throw new Error(\"Overlapping edit\");\n }\n lastModifiedOffset = startOffset;\n }\n return text;\n }\n TextDocument3.applyEdits = applyEdits;\n function mergeSort2(data, compare) {\n if (data.length <= 1) {\n return data;\n }\n const p = data.length / 2 | 0;\n const left = data.slice(0, p);\n const right = data.slice(p);\n mergeSort2(left, compare);\n mergeSort2(right, compare);\n let leftIdx = 0;\n let rightIdx = 0;\n let i = 0;\n while (leftIdx < left.length && rightIdx < right.length) {\n let ret = compare(left[leftIdx], right[rightIdx]);\n if (ret <= 0) {\n data[i++] = left[leftIdx++];\n } else {\n data[i++] = right[rightIdx++];\n }\n }\n while (leftIdx < left.length) {\n data[i++] = left[leftIdx++];\n }\n while (rightIdx < right.length) {\n data[i++] = right[rightIdx++];\n }\n return data;\n }\n})(TextDocument || (TextDocument = {}));\nvar FullTextDocument = class {\n constructor(uri, languageId, version, content) {\n this._uri = uri;\n this._languageId = languageId;\n this._version = version;\n this._content = content;\n this._lineOffsets = void 0;\n }\n get uri() {\n return this._uri;\n }\n get languageId() {\n return this._languageId;\n }\n get version() {\n return this._version;\n }\n getText(range) {\n if (range) {\n let start = this.offsetAt(range.start);\n let end = this.offsetAt(range.end);\n return this._content.substring(start, end);\n }\n return this._content;\n }\n update(event, version) {\n this._content = event.text;\n this._version = version;\n this._lineOffsets = void 0;\n }\n getLineOffsets() {\n if (this._lineOffsets === void 0) {\n let lineOffsets = [];\n let text = this._content;\n let isLineStart = true;\n for (let i = 0; i < text.length; i++) {\n if (isLineStart) {\n lineOffsets.push(i);\n isLineStart = false;\n }\n let ch = text.charAt(i);\n isLineStart = ch === \"\\r\" || ch === \"\\n\";\n if (ch === \"\\r\" && i + 1 < text.length && text.charAt(i + 1) === \"\\n\") {\n i++;\n }\n }\n if (isLineStart && text.length > 0) {\n lineOffsets.push(text.length);\n }\n this._lineOffsets = lineOffsets;\n }\n return this._lineOffsets;\n }\n positionAt(offset) {\n offset = Math.max(Math.min(offset, this._content.length), 0);\n let lineOffsets = this.getLineOffsets();\n let low = 0, high = lineOffsets.length;\n if (high === 0) {\n return Position.create(0, offset);\n }\n while (low < high) {\n let mid = Math.floor((low + high) / 2);\n if (lineOffsets[mid] > offset) {\n high = mid;\n } else {\n low = mid + 1;\n }\n }\n let line = low - 1;\n return Position.create(line, offset - lineOffsets[line]);\n }\n offsetAt(position) {\n let lineOffsets = this.getLineOffsets();\n if (position.line >= lineOffsets.length) {\n return this._content.length;\n } else if (position.line < 0) {\n return 0;\n }\n let lineOffset = lineOffsets[position.line];\n let nextLineOffset = position.line + 1 < lineOffsets.length ? lineOffsets[position.line + 1] : this._content.length;\n return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);\n }\n get lineCount() {\n return this.getLineOffsets().length;\n }\n};\nvar Is;\n(function(Is2) {\n const toString = Object.prototype.toString;\n function defined(value) {\n return typeof value !== \"undefined\";\n }\n Is2.defined = defined;\n function undefined2(value) {\n return typeof value === \"undefined\";\n }\n Is2.undefined = undefined2;\n function boolean(value) {\n return value === true || value === false;\n }\n Is2.boolean = boolean;\n function string(value) {\n return toString.call(value) === \"[object String]\";\n }\n Is2.string = string;\n function number(value) {\n return toString.call(value) === \"[object Number]\";\n }\n Is2.number = number;\n function numberRange(value, min, max) {\n return toString.call(value) === \"[object Number]\" && min <= value && value <= max;\n }\n Is2.numberRange = numberRange;\n function integer2(value) {\n return toString.call(value) === \"[object Number]\" && -2147483648 <= value && value <= 2147483647;\n }\n Is2.integer = integer2;\n function uinteger2(value) {\n return toString.call(value) === \"[object Number]\" && 0 <= value && value <= 2147483647;\n }\n Is2.uinteger = uinteger2;\n function func(value) {\n return toString.call(value) === \"[object Function]\";\n }\n Is2.func = func;\n function objectLiteral(value) {\n return value !== null && typeof value === \"object\";\n }\n Is2.objectLiteral = objectLiteral;\n function typedArray(value, check) {\n return Array.isArray(value) && value.every(check);\n }\n Is2.typedArray = typedArray;\n})(Is || (Is = {}));\n\n// node_modules/vscode-languageserver-textdocument/lib/esm/main.js\nvar FullTextDocument2 = class _FullTextDocument {\n constructor(uri, languageId, version, content) {\n this._uri = uri;\n this._languageId = languageId;\n this._version = version;\n this._content = content;\n this._lineOffsets = void 0;\n }\n get uri() {\n return this._uri;\n }\n get languageId() {\n return this._languageId;\n }\n get version() {\n return this._version;\n }\n getText(range) {\n if (range) {\n const start = this.offsetAt(range.start);\n const end = this.offsetAt(range.end);\n return this._content.substring(start, end);\n }\n return this._content;\n }\n update(changes, version) {\n for (let change of changes) {\n if (_FullTextDocument.isIncremental(change)) {\n const range = getWellformedRange(change.range);\n const startOffset = this.offsetAt(range.start);\n const endOffset = this.offsetAt(range.end);\n this._content = this._content.substring(0, startOffset) + change.text + this._content.substring(endOffset, this._content.length);\n const startLine = Math.max(range.start.line, 0);\n const endLine = Math.max(range.end.line, 0);\n let lineOffsets = this._lineOffsets;\n const addedLineOffsets = computeLineOffsets(change.text, false, startOffset);\n if (endLine - startLine === addedLineOffsets.length) {\n for (let i = 0, len = addedLineOffsets.length; i < len; i++) {\n lineOffsets[i + startLine + 1] = addedLineOffsets[i];\n }\n } else {\n if (addedLineOffsets.length < 1e4) {\n lineOffsets.splice(startLine + 1, endLine - startLine, ...addedLineOffsets);\n } else {\n this._lineOffsets = lineOffsets = lineOffsets.slice(0, startLine + 1).concat(addedLineOffsets, lineOffsets.slice(endLine + 1));\n }\n }\n const diff = change.text.length - (endOffset - startOffset);\n if (diff !== 0) {\n for (let i = startLine + 1 + addedLineOffsets.length, len = lineOffsets.length; i < len; i++) {\n lineOffsets[i] = lineOffsets[i] + diff;\n }\n }\n } else if (_FullTextDocument.isFull(change)) {\n this._content = change.text;\n this._lineOffsets = void 0;\n } else {\n throw new Error(\"Unknown change event received\");\n }\n }\n this._version = version;\n }\n getLineOffsets() {\n if (this._lineOffsets === void 0) {\n this._lineOffsets = computeLineOffsets(this._content, true);\n }\n return this._lineOffsets;\n }\n positionAt(offset) {\n offset = Math.max(Math.min(offset, this._content.length), 0);\n let lineOffsets = this.getLineOffsets();\n let low = 0, high = lineOffsets.length;\n if (high === 0) {\n return { line: 0, character: offset };\n }\n while (low < high) {\n let mid = Math.floor((low + high) / 2);\n if (lineOffsets[mid] > offset) {\n high = mid;\n } else {\n low = mid + 1;\n }\n }\n let line = low - 1;\n return { line, character: offset - lineOffsets[line] };\n }\n offsetAt(position) {\n let lineOffsets = this.getLineOffsets();\n if (position.line >= lineOffsets.length) {\n return this._content.length;\n } else if (position.line < 0) {\n return 0;\n }\n let lineOffset = lineOffsets[position.line];\n let nextLineOffset = position.line + 1 < lineOffsets.length ? lineOffsets[position.line + 1] : this._content.length;\n return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);\n }\n get lineCount() {\n return this.getLineOffsets().length;\n }\n static isIncremental(event) {\n let candidate = event;\n return candidate !== void 0 && candidate !== null && typeof candidate.text === \"string\" && candidate.range !== void 0 && (candidate.rangeLength === void 0 || typeof candidate.rangeLength === \"number\");\n }\n static isFull(event) {\n let candidate = event;\n return candidate !== void 0 && candidate !== null && typeof candidate.text === \"string\" && candidate.range === void 0 && candidate.rangeLength === void 0;\n }\n};\nvar TextDocument2;\n(function(TextDocument3) {\n function create(uri, languageId, version, content) {\n return new FullTextDocument2(uri, languageId, version, content);\n }\n TextDocument3.create = create;\n function update(document, changes, version) {\n if (document instanceof FullTextDocument2) {\n document.update(changes, version);\n return document;\n } else {\n throw new Error(\"TextDocument.update: document must be created by TextDocument.create\");\n }\n }\n TextDocument3.update = update;\n function applyEdits(document, edits) {\n let text = document.getText();\n let sortedEdits = mergeSort(edits.map(getWellformedEdit), (a2, b) => {\n let diff = a2.range.start.line - b.range.start.line;\n if (diff === 0) {\n return a2.range.start.character - b.range.start.character;\n }\n return diff;\n });\n let lastModifiedOffset = 0;\n const spans = [];\n for (const e of sortedEdits) {\n let startOffset = document.offsetAt(e.range.start);\n if (startOffset < lastModifiedOffset) {\n throw new Error(\"Overlapping edit\");\n } else if (startOffset > lastModifiedOffset) {\n spans.push(text.substring(lastModifiedOffset, startOffset));\n }\n if (e.newText.length) {\n spans.push(e.newText);\n }\n lastModifiedOffset = document.offsetAt(e.range.end);\n }\n spans.push(text.substr(lastModifiedOffset));\n return spans.join(\"\");\n }\n TextDocument3.applyEdits = applyEdits;\n})(TextDocument2 || (TextDocument2 = {}));\nfunction mergeSort(data, compare) {\n if (data.length <= 1) {\n return data;\n }\n const p = data.length / 2 | 0;\n const left = data.slice(0, p);\n const right = data.slice(p);\n mergeSort(left, compare);\n mergeSort(right, compare);\n let leftIdx = 0;\n let rightIdx = 0;\n let i = 0;\n while (leftIdx < left.length && rightIdx < right.length) {\n let ret = compare(left[leftIdx], right[rightIdx]);\n if (ret <= 0) {\n data[i++] = left[leftIdx++];\n } else {\n data[i++] = right[rightIdx++];\n }\n }\n while (leftIdx < left.length) {\n data[i++] = left[leftIdx++];\n }\n while (rightIdx < right.length) {\n data[i++] = right[rightIdx++];\n }\n return data;\n}\nfunction computeLineOffsets(text, isAtLineStart, textOffset = 0) {\n const result = isAtLineStart ? [textOffset] : [];\n for (let i = 0; i < text.length; i++) {\n let ch = text.charCodeAt(i);\n if (ch === 13 || ch === 10) {\n if (ch === 13 && i + 1 < text.length && text.charCodeAt(i + 1) === 10) {\n i++;\n }\n result.push(textOffset + i + 1);\n }\n }\n return result;\n}\nfunction getWellformedRange(range) {\n const start = range.start;\n const end = range.end;\n if (start.line > end.line || start.line === end.line && start.character > end.character) {\n return { start: end, end: start };\n }\n return range;\n}\nfunction getWellformedEdit(textEdit) {\n const range = getWellformedRange(textEdit.range);\n if (range !== textEdit.range) {\n return { newText: textEdit.newText, range };\n }\n return textEdit;\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/jsonLanguageTypes.js\nvar ErrorCode;\n(function(ErrorCode2) {\n ErrorCode2[ErrorCode2[\"Undefined\"] = 0] = \"Undefined\";\n ErrorCode2[ErrorCode2[\"EnumValueMismatch\"] = 1] = \"EnumValueMismatch\";\n ErrorCode2[ErrorCode2[\"Deprecated\"] = 2] = \"Deprecated\";\n ErrorCode2[ErrorCode2[\"UnexpectedEndOfComment\"] = 257] = \"UnexpectedEndOfComment\";\n ErrorCode2[ErrorCode2[\"UnexpectedEndOfString\"] = 258] = \"UnexpectedEndOfString\";\n ErrorCode2[ErrorCode2[\"UnexpectedEndOfNumber\"] = 259] = \"UnexpectedEndOfNumber\";\n ErrorCode2[ErrorCode2[\"InvalidUnicode\"] = 260] = \"InvalidUnicode\";\n ErrorCode2[ErrorCode2[\"InvalidEscapeCharacter\"] = 261] = \"InvalidEscapeCharacter\";\n ErrorCode2[ErrorCode2[\"InvalidCharacter\"] = 262] = \"InvalidCharacter\";\n ErrorCode2[ErrorCode2[\"PropertyExpected\"] = 513] = \"PropertyExpected\";\n ErrorCode2[ErrorCode2[\"CommaExpected\"] = 514] = \"CommaExpected\";\n ErrorCode2[ErrorCode2[\"ColonExpected\"] = 515] = \"ColonExpected\";\n ErrorCode2[ErrorCode2[\"ValueExpected\"] = 516] = \"ValueExpected\";\n ErrorCode2[ErrorCode2[\"CommaOrCloseBacketExpected\"] = 517] = \"CommaOrCloseBacketExpected\";\n ErrorCode2[ErrorCode2[\"CommaOrCloseBraceExpected\"] = 518] = \"CommaOrCloseBraceExpected\";\n ErrorCode2[ErrorCode2[\"TrailingComma\"] = 519] = \"TrailingComma\";\n ErrorCode2[ErrorCode2[\"DuplicateKey\"] = 520] = \"DuplicateKey\";\n ErrorCode2[ErrorCode2[\"CommentNotPermitted\"] = 521] = \"CommentNotPermitted\";\n ErrorCode2[ErrorCode2[\"PropertyKeysMustBeDoublequoted\"] = 528] = \"PropertyKeysMustBeDoublequoted\";\n ErrorCode2[ErrorCode2[\"SchemaResolveError\"] = 768] = \"SchemaResolveError\";\n ErrorCode2[ErrorCode2[\"SchemaUnsupportedFeature\"] = 769] = \"SchemaUnsupportedFeature\";\n})(ErrorCode || (ErrorCode = {}));\nvar SchemaDraft;\n(function(SchemaDraft2) {\n SchemaDraft2[SchemaDraft2[\"v3\"] = 3] = \"v3\";\n SchemaDraft2[SchemaDraft2[\"v4\"] = 4] = \"v4\";\n SchemaDraft2[SchemaDraft2[\"v6\"] = 6] = \"v6\";\n SchemaDraft2[SchemaDraft2[\"v7\"] = 7] = \"v7\";\n SchemaDraft2[SchemaDraft2[\"v2019_09\"] = 19] = \"v2019_09\";\n SchemaDraft2[SchemaDraft2[\"v2020_12\"] = 20] = \"v2020_12\";\n})(SchemaDraft || (SchemaDraft = {}));\nvar ClientCapabilities;\n(function(ClientCapabilities2) {\n ClientCapabilities2.LATEST = {\n textDocument: {\n completion: {\n completionItem: {\n documentationFormat: [MarkupKind.Markdown, MarkupKind.PlainText],\n commitCharactersSupport: true,\n labelDetailsSupport: true\n }\n }\n }\n };\n})(ClientCapabilities || (ClientCapabilities = {}));\n\n// node_modules/@vscode/l10n/dist/browser.js\nvar bundle;\nfunction t(...args) {\n const firstArg = args[0];\n let key;\n let message;\n let formatArgs;\n if (typeof firstArg === \"string\") {\n key = firstArg;\n message = firstArg;\n args.splice(0, 1);\n formatArgs = !args || typeof args[0] !== \"object\" ? args : args[0];\n } else if (firstArg instanceof Array) {\n const replacements = args.slice(1);\n if (firstArg.length !== replacements.length + 1) {\n throw new Error(\"expected a string as the first argument to l10n.t\");\n }\n let str = firstArg[0];\n for (let i = 1; i < firstArg.length; i++) {\n str += `{${i - 1}}` + firstArg[i];\n }\n return t(str, ...replacements);\n } else {\n message = firstArg.message;\n key = message;\n if (firstArg.comment && firstArg.comment.length > 0) {\n key += `/${Array.isArray(firstArg.comment) ? firstArg.comment.join(\"\") : firstArg.comment}`;\n }\n formatArgs = firstArg.args ?? {};\n }\n const messageFromBundle = bundle?.[key];\n if (!messageFromBundle) {\n return format3(message, formatArgs);\n }\n if (typeof messageFromBundle === \"string\") {\n return format3(messageFromBundle, formatArgs);\n }\n if (messageFromBundle.comment) {\n return format3(messageFromBundle.message, formatArgs);\n }\n return format3(message, formatArgs);\n}\nvar _format2Regexp = /{([^}]+)}/g;\nfunction format3(template, values) {\n if (Object.keys(values).length === 0) {\n return template;\n }\n return template.replace(_format2Regexp, (match, group) => values[group] ?? match);\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/parser/jsonParser.js\nvar formats = {\n \"color-hex\": { errorMessage: t(\"Invalid color format. Use #RGB, #RGBA, #RRGGBB or #RRGGBBAA.\"), pattern: /^#([0-9A-Fa-f]{3,4}|([0-9A-Fa-f]{2}){3,4})$/ },\n \"date-time\": { errorMessage: t(\"String is not a RFC3339 date-time.\"), pattern: /^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)([01][0-9]|2[0-3]):([0-5][0-9]))$/i },\n \"date\": { errorMessage: t(\"String is not a RFC3339 date.\"), pattern: /^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/i },\n \"time\": { errorMessage: t(\"String is not a RFC3339 time.\"), pattern: /^([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)([01][0-9]|2[0-3]):([0-5][0-9]))$/i },\n \"email\": { errorMessage: t(\"String is not an e-mail address.\"), pattern: /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,}))$/ },\n \"hostname\": { errorMessage: t(\"String is not a hostname.\"), pattern: /^(?=.{1,253}\\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\\.?$/i },\n \"ipv4\": { errorMessage: t(\"String is not an IPv4 address.\"), pattern: /^(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)$/ },\n \"ipv6\": { errorMessage: t(\"String is not an IPv6 address.\"), pattern: /^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))$/i }\n};\nvar ASTNodeImpl = class {\n constructor(parent, offset, length = 0) {\n this.offset = offset;\n this.length = length;\n this.parent = parent;\n }\n get children() {\n return [];\n }\n toString() {\n return \"type: \" + this.type + \" (\" + this.offset + \"/\" + this.length + \")\" + (this.parent ? \" parent: {\" + this.parent.toString() + \"}\" : \"\");\n }\n};\nvar NullASTNodeImpl = class extends ASTNodeImpl {\n constructor(parent, offset) {\n super(parent, offset);\n this.type = \"null\";\n this.value = null;\n }\n};\nvar BooleanASTNodeImpl = class extends ASTNodeImpl {\n constructor(parent, boolValue, offset) {\n super(parent, offset);\n this.type = \"boolean\";\n this.value = boolValue;\n }\n};\nvar ArrayASTNodeImpl = class extends ASTNodeImpl {\n constructor(parent, offset) {\n super(parent, offset);\n this.type = \"array\";\n this.items = [];\n }\n get children() {\n return this.items;\n }\n};\nvar NumberASTNodeImpl = class extends ASTNodeImpl {\n constructor(parent, offset) {\n super(parent, offset);\n this.type = \"number\";\n this.isInteger = true;\n this.value = Number.NaN;\n }\n};\nvar StringASTNodeImpl = class extends ASTNodeImpl {\n constructor(parent, offset, length) {\n super(parent, offset, length);\n this.type = \"string\";\n this.value = \"\";\n }\n};\nvar PropertyASTNodeImpl = class extends ASTNodeImpl {\n constructor(parent, offset, keyNode) {\n super(parent, offset);\n this.type = \"property\";\n this.colonOffset = -1;\n this.keyNode = keyNode;\n }\n get children() {\n return this.valueNode ? [this.keyNode, this.valueNode] : [this.keyNode];\n }\n};\nvar ObjectASTNodeImpl = class extends ASTNodeImpl {\n constructor(parent, offset) {\n super(parent, offset);\n this.type = \"object\";\n this.properties = [];\n }\n get children() {\n return this.properties;\n }\n};\nfunction asSchema(schema) {\n if (isBoolean(schema)) {\n return schema ? {} : { \"not\": {} };\n }\n return schema;\n}\nvar EnumMatch;\n(function(EnumMatch2) {\n EnumMatch2[EnumMatch2[\"Key\"] = 0] = \"Key\";\n EnumMatch2[EnumMatch2[\"Enum\"] = 1] = \"Enum\";\n})(EnumMatch || (EnumMatch = {}));\nvar schemaDraftFromId = {\n \"http://json-schema.org/draft-03/schema#\": SchemaDraft.v3,\n \"http://json-schema.org/draft-04/schema#\": SchemaDraft.v4,\n \"http://json-schema.org/draft-06/schema#\": SchemaDraft.v6,\n \"http://json-schema.org/draft-07/schema#\": SchemaDraft.v7,\n \"https://json-schema.org/draft/2019-09/schema\": SchemaDraft.v2019_09,\n \"https://json-schema.org/draft/2020-12/schema\": SchemaDraft.v2020_12\n};\nvar EvaluationContext = class {\n constructor(schemaDraft) {\n this.schemaDraft = schemaDraft;\n }\n};\nvar SchemaCollector = class _SchemaCollector {\n constructor(focusOffset = -1, exclude) {\n this.focusOffset = focusOffset;\n this.exclude = exclude;\n this.schemas = [];\n }\n add(schema) {\n this.schemas.push(schema);\n }\n merge(other) {\n Array.prototype.push.apply(this.schemas, other.schemas);\n }\n include(node) {\n return (this.focusOffset === -1 || contains2(node, this.focusOffset)) && node !== this.exclude;\n }\n newSub() {\n return new _SchemaCollector(-1, this.exclude);\n }\n};\nvar NoOpSchemaCollector = class {\n constructor() {\n }\n get schemas() {\n return [];\n }\n add(_schema) {\n }\n merge(_other) {\n }\n include(_node) {\n return true;\n }\n newSub() {\n return this;\n }\n};\nNoOpSchemaCollector.instance = new NoOpSchemaCollector();\nvar ValidationResult = class {\n constructor() {\n this.problems = [];\n this.propertiesMatches = 0;\n this.processedProperties = /* @__PURE__ */ new Set();\n this.propertiesValueMatches = 0;\n this.primaryValueMatches = 0;\n this.enumValueMatch = false;\n this.enumValues = void 0;\n }\n hasProblems() {\n return !!this.problems.length;\n }\n merge(validationResult) {\n this.problems = this.problems.concat(validationResult.problems);\n this.propertiesMatches += validationResult.propertiesMatches;\n this.propertiesValueMatches += validationResult.propertiesValueMatches;\n this.mergeProcessedProperties(validationResult);\n }\n mergeEnumValues(validationResult) {\n if (!this.enumValueMatch && !validationResult.enumValueMatch && this.enumValues && validationResult.enumValues) {\n this.enumValues = this.enumValues.concat(validationResult.enumValues);\n for (const error of this.problems) {\n if (error.code === ErrorCode.EnumValueMismatch) {\n error.message = t(\"Value is not accepted. Valid values: {0}.\", this.enumValues.map((v) => JSON.stringify(v)).join(\", \"));\n }\n }\n }\n }\n mergePropertyMatch(propertyValidationResult) {\n this.problems = this.problems.concat(propertyValidationResult.problems);\n this.propertiesMatches++;\n if (propertyValidationResult.enumValueMatch || !propertyValidationResult.hasProblems() && propertyValidationResult.propertiesMatches) {\n this.propertiesValueMatches++;\n }\n if (propertyValidationResult.enumValueMatch && propertyValidationResult.enumValues && propertyValidationResult.enumValues.length === 1) {\n this.primaryValueMatches++;\n }\n }\n mergeProcessedProperties(validationResult) {\n validationResult.processedProperties.forEach((p) => this.processedProperties.add(p));\n }\n compare(other) {\n const hasProblems = this.hasProblems();\n if (hasProblems !== other.hasProblems()) {\n return hasProblems ? -1 : 1;\n }\n if (this.enumValueMatch !== other.enumValueMatch) {\n return other.enumValueMatch ? -1 : 1;\n }\n if (this.primaryValueMatches !== other.primaryValueMatches) {\n return this.primaryValueMatches - other.primaryValueMatches;\n }\n if (this.propertiesValueMatches !== other.propertiesValueMatches) {\n return this.propertiesValueMatches - other.propertiesValueMatches;\n }\n return this.propertiesMatches - other.propertiesMatches;\n }\n};\nfunction newJSONDocument(root, diagnostics = []) {\n return new JSONDocument(root, diagnostics, []);\n}\nfunction getNodeValue3(node) {\n return getNodeValue2(node);\n}\nfunction getNodePath3(node) {\n return getNodePath2(node);\n}\nfunction contains2(node, offset, includeRightBound = false) {\n return offset >= node.offset && offset < node.offset + node.length || includeRightBound && offset === node.offset + node.length;\n}\nvar JSONDocument = class {\n constructor(root, syntaxErrors = [], comments = []) {\n this.root = root;\n this.syntaxErrors = syntaxErrors;\n this.comments = comments;\n }\n getNodeFromOffset(offset, includeRightBound = false) {\n if (this.root) {\n return findNodeAtOffset2(this.root, offset, includeRightBound);\n }\n return void 0;\n }\n visit(visitor) {\n if (this.root) {\n const doVisit = (node) => {\n let ctn = visitor(node);\n const children = node.children;\n if (Array.isArray(children)) {\n for (let i = 0; i < children.length && ctn; i++) {\n ctn = doVisit(children[i]);\n }\n }\n return ctn;\n };\n doVisit(this.root);\n }\n }\n validate(textDocument, schema, severity = DiagnosticSeverity.Warning, schemaDraft) {\n if (this.root && schema) {\n const validationResult = new ValidationResult();\n validate(this.root, schema, validationResult, NoOpSchemaCollector.instance, new EvaluationContext(schemaDraft ?? getSchemaDraft(schema)));\n return validationResult.problems.map((p) => {\n const range = Range.create(textDocument.positionAt(p.location.offset), textDocument.positionAt(p.location.offset + p.location.length));\n return Diagnostic.create(range, p.message, p.severity ?? severity, p.code);\n });\n }\n return void 0;\n }\n getMatchingSchemas(schema, focusOffset = -1, exclude) {\n if (this.root && schema) {\n const matchingSchemas = new SchemaCollector(focusOffset, exclude);\n const schemaDraft = getSchemaDraft(schema);\n const context = new EvaluationContext(schemaDraft);\n validate(this.root, schema, new ValidationResult(), matchingSchemas, context);\n return matchingSchemas.schemas;\n }\n return [];\n }\n};\nfunction getSchemaDraft(schema, fallBack = SchemaDraft.v2020_12) {\n let schemaId = schema.$schema;\n if (schemaId) {\n return schemaDraftFromId[schemaId] ?? fallBack;\n }\n return fallBack;\n}\nfunction validate(n, schema, validationResult, matchingSchemas, context) {\n if (!n || !matchingSchemas.include(n)) {\n return;\n }\n if (n.type === \"property\") {\n return validate(n.valueNode, schema, validationResult, matchingSchemas, context);\n }\n const node = n;\n _validateNode();\n switch (node.type) {\n case \"object\":\n _validateObjectNode(node);\n break;\n case \"array\":\n _validateArrayNode(node);\n break;\n case \"string\":\n _validateStringNode(node);\n break;\n case \"number\":\n _validateNumberNode(node);\n break;\n }\n matchingSchemas.add({ node, schema });\n function _validateNode() {\n function matchesType(type) {\n return node.type === type || type === \"integer\" && node.type === \"number\" && node.isInteger;\n }\n if (Array.isArray(schema.type)) {\n if (!schema.type.some(matchesType)) {\n validationResult.problems.push({\n location: { offset: node.offset, length: node.length },\n message: schema.errorMessage || t(\"Incorrect type. Expected one of {0}.\", schema.type.join(\", \"))\n });\n }\n } else if (schema.type) {\n if (!matchesType(schema.type)) {\n validationResult.problems.push({\n location: { offset: node.offset, length: node.length },\n message: schema.errorMessage || t('Incorrect type. Expected \"{0}\".', schema.type)\n });\n }\n }\n if (Array.isArray(schema.allOf)) {\n for (const subSchemaRef of schema.allOf) {\n const subValidationResult = new ValidationResult();\n const subMatchingSchemas = matchingSchemas.newSub();\n validate(node, asSchema(subSchemaRef), subValidationResult, subMatchingSchemas, context);\n validationResult.merge(subValidationResult);\n matchingSchemas.merge(subMatchingSchemas);\n }\n }\n const notSchema = asSchema(schema.not);\n if (notSchema) {\n const subValidationResult = new ValidationResult();\n const subMatchingSchemas = matchingSchemas.newSub();\n validate(node, notSchema, subValidationResult, subMatchingSchemas, context);\n if (!subValidationResult.hasProblems()) {\n validationResult.problems.push({\n location: { offset: node.offset, length: node.length },\n message: schema.errorMessage || t(\"Matches a schema that is not allowed.\")\n });\n }\n for (const ms of subMatchingSchemas.schemas) {\n ms.inverted = !ms.inverted;\n matchingSchemas.add(ms);\n }\n }\n const testAlternatives = (alternatives, maxOneMatch) => {\n const matches = [];\n let bestMatch = void 0;\n for (const subSchemaRef of alternatives) {\n const subSchema = asSchema(subSchemaRef);\n const subValidationResult = new ValidationResult();\n const subMatchingSchemas = matchingSchemas.newSub();\n validate(node, subSchema, subValidationResult, subMatchingSchemas, context);\n if (!subValidationResult.hasProblems()) {\n matches.push(subSchema);\n }\n if (!bestMatch) {\n bestMatch = { schema: subSchema, validationResult: subValidationResult, matchingSchemas: subMatchingSchemas };\n } else {\n if (!maxOneMatch && !subValidationResult.hasProblems() && !bestMatch.validationResult.hasProblems()) {\n bestMatch.matchingSchemas.merge(subMatchingSchemas);\n bestMatch.validationResult.propertiesMatches += subValidationResult.propertiesMatches;\n bestMatch.validationResult.propertiesValueMatches += subValidationResult.propertiesValueMatches;\n bestMatch.validationResult.mergeProcessedProperties(subValidationResult);\n } else {\n const compareResult = subValidationResult.compare(bestMatch.validationResult);\n if (compareResult > 0) {\n bestMatch = { schema: subSchema, validationResult: subValidationResult, matchingSchemas: subMatchingSchemas };\n } else if (compareResult === 0) {\n bestMatch.matchingSchemas.merge(subMatchingSchemas);\n bestMatch.validationResult.mergeEnumValues(subValidationResult);\n }\n }\n }\n }\n if (matches.length > 1 && maxOneMatch) {\n validationResult.problems.push({\n location: { offset: node.offset, length: 1 },\n message: t(\"Matches multiple schemas when only one must validate.\")\n });\n }\n if (bestMatch) {\n validationResult.merge(bestMatch.validationResult);\n matchingSchemas.merge(bestMatch.matchingSchemas);\n }\n return matches.length;\n };\n if (Array.isArray(schema.anyOf)) {\n testAlternatives(schema.anyOf, false);\n }\n if (Array.isArray(schema.oneOf)) {\n testAlternatives(schema.oneOf, true);\n }\n const testBranch = (schema2) => {\n const subValidationResult = new ValidationResult();\n const subMatchingSchemas = matchingSchemas.newSub();\n validate(node, asSchema(schema2), subValidationResult, subMatchingSchemas, context);\n validationResult.merge(subValidationResult);\n matchingSchemas.merge(subMatchingSchemas);\n };\n const testCondition = (ifSchema2, thenSchema, elseSchema) => {\n const subSchema = asSchema(ifSchema2);\n const subValidationResult = new ValidationResult();\n const subMatchingSchemas = matchingSchemas.newSub();\n validate(node, subSchema, subValidationResult, subMatchingSchemas, context);\n matchingSchemas.merge(subMatchingSchemas);\n validationResult.mergeProcessedProperties(subValidationResult);\n if (!subValidationResult.hasProblems()) {\n if (thenSchema) {\n testBranch(thenSchema);\n }\n } else if (elseSchema) {\n testBranch(elseSchema);\n }\n };\n const ifSchema = asSchema(schema.if);\n if (ifSchema) {\n testCondition(ifSchema, asSchema(schema.then), asSchema(schema.else));\n }\n if (Array.isArray(schema.enum)) {\n const val = getNodeValue3(node);\n let enumValueMatch = false;\n for (const e of schema.enum) {\n if (equals(val, e)) {\n enumValueMatch = true;\n break;\n }\n }\n validationResult.enumValues = schema.enum;\n validationResult.enumValueMatch = enumValueMatch;\n if (!enumValueMatch) {\n validationResult.problems.push({\n location: { offset: node.offset, length: node.length },\n code: ErrorCode.EnumValueMismatch,\n message: schema.errorMessage || t(\"Value is not accepted. Valid values: {0}.\", schema.enum.map((v) => JSON.stringify(v)).join(\", \"))\n });\n }\n }\n if (isDefined(schema.const)) {\n const val = getNodeValue3(node);\n if (!equals(val, schema.const)) {\n validationResult.problems.push({\n location: { offset: node.offset, length: node.length },\n code: ErrorCode.EnumValueMismatch,\n message: schema.errorMessage || t(\"Value must be {0}.\", JSON.stringify(schema.const))\n });\n validationResult.enumValueMatch = false;\n } else {\n validationResult.enumValueMatch = true;\n }\n validationResult.enumValues = [schema.const];\n }\n let deprecationMessage = schema.deprecationMessage;\n if (deprecationMessage || schema.deprecated) {\n deprecationMessage = deprecationMessage || t(\"Value is deprecated\");\n let targetNode = node.parent?.type === \"property\" ? node.parent : node;\n validationResult.problems.push({\n location: { offset: targetNode.offset, length: targetNode.length },\n severity: DiagnosticSeverity.Warning,\n message: deprecationMessage,\n code: ErrorCode.Deprecated\n });\n }\n }\n function _validateNumberNode(node2) {\n const val = node2.value;\n function normalizeFloats(float) {\n const parts = /^(-?\\d+)(?:\\.(\\d+))?(?:e([-+]\\d+))?$/.exec(float.toString());\n return parts && {\n value: Number(parts[1] + (parts[2] || \"\")),\n multiplier: (parts[2]?.length || 0) - (parseInt(parts[3]) || 0)\n };\n }\n ;\n if (isNumber(schema.multipleOf)) {\n let remainder = -1;\n if (Number.isInteger(schema.multipleOf)) {\n remainder = val % schema.multipleOf;\n } else {\n let normMultipleOf = normalizeFloats(schema.multipleOf);\n let normValue = normalizeFloats(val);\n if (normMultipleOf && normValue) {\n const multiplier = 10 ** Math.abs(normValue.multiplier - normMultipleOf.multiplier);\n if (normValue.multiplier < normMultipleOf.multiplier) {\n normValue.value *= multiplier;\n } else {\n normMultipleOf.value *= multiplier;\n }\n remainder = normValue.value % normMultipleOf.value;\n }\n }\n if (remainder !== 0) {\n validationResult.problems.push({\n location: { offset: node2.offset, length: node2.length },\n message: t(\"Value is not divisible by {0}.\", schema.multipleOf)\n });\n }\n }\n function getExclusiveLimit(limit, exclusive) {\n if (isNumber(exclusive)) {\n return exclusive;\n }\n if (isBoolean(exclusive) && exclusive) {\n return limit;\n }\n return void 0;\n }\n function getLimit(limit, exclusive) {\n if (!isBoolean(exclusive) || !exclusive) {\n return limit;\n }\n return void 0;\n }\n const exclusiveMinimum = getExclusiveLimit(schema.minimum, schema.exclusiveMinimum);\n if (isNumber(exclusiveMinimum) && val <= exclusiveMinimum) {\n validationResult.problems.push({\n location: { offset: node2.offset, length: node2.length },\n message: t(\"Value is below the exclusive minimum of {0}.\", exclusiveMinimum)\n });\n }\n const exclusiveMaximum = getExclusiveLimit(schema.maximum, schema.exclusiveMaximum);\n if (isNumber(exclusiveMaximum) && val >= exclusiveMaximum) {\n validationResult.problems.push({\n location: { offset: node2.offset, length: node2.length },\n message: t(\"Value is above the exclusive maximum of {0}.\", exclusiveMaximum)\n });\n }\n const minimum = getLimit(schema.minimum, schema.exclusiveMinimum);\n if (isNumber(minimum) && val < minimum) {\n validationResult.problems.push({\n location: { offset: node2.offset, length: node2.length },\n message: t(\"Value is below the minimum of {0}.\", minimum)\n });\n }\n const maximum = getLimit(schema.maximum, schema.exclusiveMaximum);\n if (isNumber(maximum) && val > maximum) {\n validationResult.problems.push({\n location: { offset: node2.offset, length: node2.length },\n message: t(\"Value is above the maximum of {0}.\", maximum)\n });\n }\n }\n function _validateStringNode(node2) {\n if (isNumber(schema.minLength) && stringLength(node2.value) < schema.minLength) {\n validationResult.problems.push({\n location: { offset: node2.offset, length: node2.length },\n message: t(\"String is shorter than the minimum length of {0}.\", schema.minLength)\n });\n }\n if (isNumber(schema.maxLength) && stringLength(node2.value) > schema.maxLength) {\n validationResult.problems.push({\n location: { offset: node2.offset, length: node2.length },\n message: t(\"String is longer than the maximum length of {0}.\", schema.maxLength)\n });\n }\n if (isString(schema.pattern)) {\n const regex = extendedRegExp(schema.pattern);\n if (!regex?.test(node2.value)) {\n validationResult.problems.push({\n location: { offset: node2.offset, length: node2.length },\n message: schema.patternErrorMessage || schema.errorMessage || t('String does not match the pattern of \"{0}\".', schema.pattern)\n });\n }\n }\n if (schema.format) {\n switch (schema.format) {\n case \"uri\":\n case \"uri-reference\":\n {\n let errorMessage;\n if (!node2.value) {\n errorMessage = t(\"URI expected.\");\n } else {\n const match = /^(([^:/?#]+?):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/.exec(node2.value);\n if (!match) {\n errorMessage = t(\"URI is expected.\");\n } else if (!match[2] && schema.format === \"uri\") {\n errorMessage = t(\"URI with a scheme is expected.\");\n }\n }\n if (errorMessage) {\n validationResult.problems.push({\n location: { offset: node2.offset, length: node2.length },\n message: schema.patternErrorMessage || schema.errorMessage || t(\"String is not a URI: {0}\", errorMessage)\n });\n }\n }\n break;\n case \"color-hex\":\n case \"date-time\":\n case \"date\":\n case \"time\":\n case \"email\":\n case \"hostname\":\n case \"ipv4\":\n case \"ipv6\":\n const format5 = formats[schema.format];\n if (!node2.value || !format5.pattern.exec(node2.value)) {\n validationResult.problems.push({\n location: { offset: node2.offset, length: node2.length },\n message: schema.patternErrorMessage || schema.errorMessage || format5.errorMessage\n });\n }\n default:\n }\n }\n }\n function _validateArrayNode(node2) {\n let prefixItemsSchemas;\n let additionalItemSchema;\n if (context.schemaDraft >= SchemaDraft.v2020_12) {\n prefixItemsSchemas = schema.prefixItems;\n additionalItemSchema = !Array.isArray(schema.items) ? schema.items : void 0;\n } else {\n prefixItemsSchemas = Array.isArray(schema.items) ? schema.items : void 0;\n additionalItemSchema = !Array.isArray(schema.items) ? schema.items : schema.additionalItems;\n }\n let index = 0;\n if (prefixItemsSchemas !== void 0) {\n const max = Math.min(prefixItemsSchemas.length, node2.items.length);\n for (; index < max; index++) {\n const subSchemaRef = prefixItemsSchemas[index];\n const subSchema = asSchema(subSchemaRef);\n const itemValidationResult = new ValidationResult();\n const item = node2.items[index];\n if (item) {\n validate(item, subSchema, itemValidationResult, matchingSchemas, context);\n validationResult.mergePropertyMatch(itemValidationResult);\n }\n validationResult.processedProperties.add(String(index));\n }\n }\n if (additionalItemSchema !== void 0 && index < node2.items.length) {\n if (typeof additionalItemSchema === \"boolean\") {\n if (additionalItemSchema === false) {\n validationResult.problems.push({\n location: { offset: node2.offset, length: node2.length },\n message: t(\"Array has too many items according to schema. Expected {0} or fewer.\", index)\n });\n }\n for (; index < node2.items.length; index++) {\n validationResult.processedProperties.add(String(index));\n validationResult.propertiesValueMatches++;\n }\n } else {\n for (; index < node2.items.length; index++) {\n const itemValidationResult = new ValidationResult();\n validate(node2.items[index], additionalItemSchema, itemValidationResult, matchingSchemas, context);\n validationResult.mergePropertyMatch(itemValidationResult);\n validationResult.processedProperties.add(String(index));\n }\n }\n }\n const containsSchema = asSchema(schema.contains);\n if (containsSchema) {\n let containsCount = 0;\n for (let index2 = 0; index2 < node2.items.length; index2++) {\n const item = node2.items[index2];\n const itemValidationResult = new ValidationResult();\n validate(item, containsSchema, itemValidationResult, NoOpSchemaCollector.instance, context);\n if (!itemValidationResult.hasProblems()) {\n containsCount++;\n if (context.schemaDraft >= SchemaDraft.v2020_12) {\n validationResult.processedProperties.add(String(index2));\n }\n }\n }\n if (containsCount === 0 && !isNumber(schema.minContains)) {\n validationResult.problems.push({\n location: { offset: node2.offset, length: node2.length },\n message: schema.errorMessage || t(\"Array does not contain required item.\")\n });\n }\n if (isNumber(schema.minContains) && containsCount < schema.minContains) {\n validationResult.problems.push({\n location: { offset: node2.offset, length: node2.length },\n message: schema.errorMessage || t(\"Array has too few items that match the contains contraint. Expected {0} or more.\", schema.minContains)\n });\n }\n if (isNumber(schema.maxContains) && containsCount > schema.maxContains) {\n validationResult.problems.push({\n location: { offset: node2.offset, length: node2.length },\n message: schema.errorMessage || t(\"Array has too many items that match the contains contraint. Expected {0} or less.\", schema.maxContains)\n });\n }\n }\n const unevaluatedItems = schema.unevaluatedItems;\n if (unevaluatedItems !== void 0) {\n for (let i = 0; i < node2.items.length; i++) {\n if (!validationResult.processedProperties.has(String(i))) {\n if (unevaluatedItems === false) {\n validationResult.problems.push({\n location: { offset: node2.offset, length: node2.length },\n message: t(\"Item does not match any validation rule from the array.\")\n });\n } else {\n const itemValidationResult = new ValidationResult();\n validate(node2.items[i], schema.unevaluatedItems, itemValidationResult, matchingSchemas, context);\n validationResult.mergePropertyMatch(itemValidationResult);\n }\n }\n validationResult.processedProperties.add(String(i));\n validationResult.propertiesValueMatches++;\n }\n }\n if (isNumber(schema.minItems) && node2.items.length < schema.minItems) {\n validationResult.problems.push({\n location: { offset: node2.offset, length: node2.length },\n message: t(\"Array has too few items. Expected {0} or more.\", schema.minItems)\n });\n }\n if (isNumber(schema.maxItems) && node2.items.length > schema.maxItems) {\n validationResult.problems.push({\n location: { offset: node2.offset, length: node2.length },\n message: t(\"Array has too many items. Expected {0} or fewer.\", schema.maxItems)\n });\n }\n if (schema.uniqueItems === true) {\n let hasDuplicates = function() {\n for (let i = 0; i < values.length - 1; i++) {\n const value = values[i];\n for (let j = i + 1; j < values.length; j++) {\n if (equals(value, values[j])) {\n return true;\n }\n }\n }\n return false;\n };\n const values = getNodeValue3(node2);\n if (hasDuplicates()) {\n validationResult.problems.push({\n location: { offset: node2.offset, length: node2.length },\n message: t(\"Array has duplicate items.\")\n });\n }\n }\n }\n function _validateObjectNode(node2) {\n const seenKeys = /* @__PURE__ */ Object.create(null);\n const unprocessedProperties = /* @__PURE__ */ new Set();\n for (const propertyNode of node2.properties) {\n const key = propertyNode.keyNode.value;\n seenKeys[key] = propertyNode.valueNode;\n unprocessedProperties.add(key);\n }\n if (Array.isArray(schema.required)) {\n for (const propertyName of schema.required) {\n if (!seenKeys[propertyName]) {\n const keyNode = node2.parent && node2.parent.type === \"property\" && node2.parent.keyNode;\n const location = keyNode ? { offset: keyNode.offset, length: keyNode.length } : { offset: node2.offset, length: 1 };\n validationResult.problems.push({\n location,\n message: t('Missing property \"{0}\".', propertyName)\n });\n }\n }\n }\n const propertyProcessed = (prop) => {\n unprocessedProperties.delete(prop);\n validationResult.processedProperties.add(prop);\n };\n if (schema.properties) {\n for (const propertyName of Object.keys(schema.properties)) {\n propertyProcessed(propertyName);\n const propertySchema = schema.properties[propertyName];\n const child = seenKeys[propertyName];\n if (child) {\n if (isBoolean(propertySchema)) {\n if (!propertySchema) {\n const propertyNode = child.parent;\n validationResult.problems.push({\n location: { offset: propertyNode.keyNode.offset, length: propertyNode.keyNode.length },\n message: schema.errorMessage || t(\"Property {0} is not allowed.\", propertyName)\n });\n } else {\n validationResult.propertiesMatches++;\n validationResult.propertiesValueMatches++;\n }\n } else {\n const propertyValidationResult = new ValidationResult();\n validate(child, propertySchema, propertyValidationResult, matchingSchemas, context);\n validationResult.mergePropertyMatch(propertyValidationResult);\n }\n }\n }\n }\n if (schema.patternProperties) {\n for (const propertyPattern of Object.keys(schema.patternProperties)) {\n const regex = extendedRegExp(propertyPattern);\n if (regex) {\n const processed = [];\n for (const propertyName of unprocessedProperties) {\n if (regex.test(propertyName)) {\n processed.push(propertyName);\n const child = seenKeys[propertyName];\n if (child) {\n const propertySchema = schema.patternProperties[propertyPattern];\n if (isBoolean(propertySchema)) {\n if (!propertySchema) {\n const propertyNode = child.parent;\n validationResult.problems.push({\n location: { offset: propertyNode.keyNode.offset, length: propertyNode.keyNode.length },\n message: schema.errorMessage || t(\"Property {0} is not allowed.\", propertyName)\n });\n } else {\n validationResult.propertiesMatches++;\n validationResult.propertiesValueMatches++;\n }\n } else {\n const propertyValidationResult = new ValidationResult();\n validate(child, propertySchema, propertyValidationResult, matchingSchemas, context);\n validationResult.mergePropertyMatch(propertyValidationResult);\n }\n }\n }\n }\n processed.forEach(propertyProcessed);\n }\n }\n }\n const additionalProperties = schema.additionalProperties;\n if (additionalProperties !== void 0) {\n for (const propertyName of unprocessedProperties) {\n propertyProcessed(propertyName);\n const child = seenKeys[propertyName];\n if (child) {\n if (additionalProperties === false) {\n const propertyNode = child.parent;\n validationResult.problems.push({\n location: { offset: propertyNode.keyNode.offset, length: propertyNode.keyNode.length },\n message: schema.errorMessage || t(\"Property {0} is not allowed.\", propertyName)\n });\n } else if (additionalProperties !== true) {\n const propertyValidationResult = new ValidationResult();\n validate(child, additionalProperties, propertyValidationResult, matchingSchemas, context);\n validationResult.mergePropertyMatch(propertyValidationResult);\n }\n }\n }\n }\n const unevaluatedProperties = schema.unevaluatedProperties;\n if (unevaluatedProperties !== void 0) {\n const processed = [];\n for (const propertyName of unprocessedProperties) {\n if (!validationResult.processedProperties.has(propertyName)) {\n processed.push(propertyName);\n const child = seenKeys[propertyName];\n if (child) {\n if (unevaluatedProperties === false) {\n const propertyNode = child.parent;\n validationResult.problems.push({\n location: { offset: propertyNode.keyNode.offset, length: propertyNode.keyNode.length },\n message: schema.errorMessage || t(\"Property {0} is not allowed.\", propertyName)\n });\n } else if (unevaluatedProperties !== true) {\n const propertyValidationResult = new ValidationResult();\n validate(child, unevaluatedProperties, propertyValidationResult, matchingSchemas, context);\n validationResult.mergePropertyMatch(propertyValidationResult);\n }\n }\n }\n }\n processed.forEach(propertyProcessed);\n }\n if (isNumber(schema.maxProperties)) {\n if (node2.properties.length > schema.maxProperties) {\n validationResult.problems.push({\n location: { offset: node2.offset, length: node2.length },\n message: t(\"Object has more properties than limit of {0}.\", schema.maxProperties)\n });\n }\n }\n if (isNumber(schema.minProperties)) {\n if (node2.properties.length < schema.minProperties) {\n validationResult.problems.push({\n location: { offset: node2.offset, length: node2.length },\n message: t(\"Object has fewer properties than the required number of {0}\", schema.minProperties)\n });\n }\n }\n if (schema.dependentRequired) {\n for (const key in schema.dependentRequired) {\n const prop = seenKeys[key];\n const propertyDeps = schema.dependentRequired[key];\n if (prop && Array.isArray(propertyDeps)) {\n _validatePropertyDependencies(key, propertyDeps);\n }\n }\n }\n if (schema.dependentSchemas) {\n for (const key in schema.dependentSchemas) {\n const prop = seenKeys[key];\n const propertyDeps = schema.dependentSchemas[key];\n if (prop && isObject(propertyDeps)) {\n _validatePropertyDependencies(key, propertyDeps);\n }\n }\n }\n if (schema.dependencies) {\n for (const key in schema.dependencies) {\n const prop = seenKeys[key];\n if (prop) {\n _validatePropertyDependencies(key, schema.dependencies[key]);\n }\n }\n }\n const propertyNames = asSchema(schema.propertyNames);\n if (propertyNames) {\n for (const f2 of node2.properties) {\n const key = f2.keyNode;\n if (key) {\n validate(key, propertyNames, validationResult, NoOpSchemaCollector.instance, context);\n }\n }\n }\n function _validatePropertyDependencies(key, propertyDep) {\n if (Array.isArray(propertyDep)) {\n for (const requiredProp of propertyDep) {\n if (!seenKeys[requiredProp]) {\n validationResult.problems.push({\n location: { offset: node2.offset, length: node2.length },\n message: t(\"Object is missing property {0} required by property {1}.\", requiredProp, key)\n });\n } else {\n validationResult.propertiesValueMatches++;\n }\n }\n } else {\n const propertySchema = asSchema(propertyDep);\n if (propertySchema) {\n const propertyValidationResult = new ValidationResult();\n validate(node2, propertySchema, propertyValidationResult, matchingSchemas, context);\n validationResult.mergePropertyMatch(propertyValidationResult);\n }\n }\n }\n }\n}\nfunction parse3(textDocument, config) {\n const problems = [];\n let lastProblemOffset = -1;\n const text = textDocument.getText();\n const scanner = createScanner2(text, false);\n const commentRanges = config && config.collectComments ? [] : void 0;\n function _scanNext() {\n while (true) {\n const token2 = scanner.scan();\n _checkScanError();\n switch (token2) {\n case 12:\n case 13:\n if (Array.isArray(commentRanges)) {\n commentRanges.push(Range.create(textDocument.positionAt(scanner.getTokenOffset()), textDocument.positionAt(scanner.getTokenOffset() + scanner.getTokenLength())));\n }\n break;\n case 15:\n case 14:\n break;\n default:\n return token2;\n }\n }\n }\n function _accept(token2) {\n if (scanner.getToken() === token2) {\n _scanNext();\n return true;\n }\n return false;\n }\n function _errorAtRange(message, code, startOffset, endOffset, severity = DiagnosticSeverity.Error) {\n if (problems.length === 0 || startOffset !== lastProblemOffset) {\n const range = Range.create(textDocument.positionAt(startOffset), textDocument.positionAt(endOffset));\n problems.push(Diagnostic.create(range, message, severity, code, textDocument.languageId));\n lastProblemOffset = startOffset;\n }\n }\n function _error(message, code, node = void 0, skipUntilAfter = [], skipUntil = []) {\n let start = scanner.getTokenOffset();\n let end = scanner.getTokenOffset() + scanner.getTokenLength();\n if (start === end && start > 0) {\n start--;\n while (start > 0 && /\\s/.test(text.charAt(start))) {\n start--;\n }\n end = start + 1;\n }\n _errorAtRange(message, code, start, end);\n if (node) {\n _finalize(node, false);\n }\n if (skipUntilAfter.length + skipUntil.length > 0) {\n let token2 = scanner.getToken();\n while (token2 !== 17) {\n if (skipUntilAfter.indexOf(token2) !== -1) {\n _scanNext();\n break;\n } else if (skipUntil.indexOf(token2) !== -1) {\n break;\n }\n token2 = _scanNext();\n }\n }\n return node;\n }\n function _checkScanError() {\n switch (scanner.getTokenError()) {\n case 4:\n _error(t(\"Invalid unicode sequence in string.\"), ErrorCode.InvalidUnicode);\n return true;\n case 5:\n _error(t(\"Invalid escape character in string.\"), ErrorCode.InvalidEscapeCharacter);\n return true;\n case 3:\n _error(t(\"Unexpected end of number.\"), ErrorCode.UnexpectedEndOfNumber);\n return true;\n case 1:\n _error(t(\"Unexpected end of comment.\"), ErrorCode.UnexpectedEndOfComment);\n return true;\n case 2:\n _error(t(\"Unexpected end of string.\"), ErrorCode.UnexpectedEndOfString);\n return true;\n case 6:\n _error(t(\"Invalid characters in string. Control characters must be escaped.\"), ErrorCode.InvalidCharacter);\n return true;\n }\n return false;\n }\n function _finalize(node, scanNext) {\n node.length = scanner.getTokenOffset() + scanner.getTokenLength() - node.offset;\n if (scanNext) {\n _scanNext();\n }\n return node;\n }\n function _parseArray(parent) {\n if (scanner.getToken() !== 3) {\n return void 0;\n }\n const node = new ArrayASTNodeImpl(parent, scanner.getTokenOffset());\n _scanNext();\n const count = 0;\n let needsComma = false;\n while (scanner.getToken() !== 4 && scanner.getToken() !== 17) {\n if (scanner.getToken() === 5) {\n if (!needsComma) {\n _error(t(\"Value expected\"), ErrorCode.ValueExpected);\n }\n const commaOffset = scanner.getTokenOffset();\n _scanNext();\n if (scanner.getToken() === 4) {\n if (needsComma) {\n _errorAtRange(t(\"Trailing comma\"), ErrorCode.TrailingComma, commaOffset, commaOffset + 1);\n }\n continue;\n }\n } else if (needsComma) {\n _error(t(\"Expected comma\"), ErrorCode.CommaExpected);\n }\n const item = _parseValue(node);\n if (!item) {\n _error(t(\"Value expected\"), ErrorCode.ValueExpected, void 0, [], [\n 4,\n 5\n /* Json.SyntaxKind.CommaToken */\n ]);\n } else {\n node.items.push(item);\n }\n needsComma = true;\n }\n if (scanner.getToken() !== 4) {\n return _error(t(\"Expected comma or closing bracket\"), ErrorCode.CommaOrCloseBacketExpected, node);\n }\n return _finalize(node, true);\n }\n const keyPlaceholder = new StringASTNodeImpl(void 0, 0, 0);\n function _parseProperty(parent, keysSeen) {\n const node = new PropertyASTNodeImpl(parent, scanner.getTokenOffset(), keyPlaceholder);\n let key = _parseString(node);\n if (!key) {\n if (scanner.getToken() === 16) {\n _error(t(\"Property keys must be doublequoted\"), ErrorCode.PropertyKeysMustBeDoublequoted);\n const keyNode = new StringASTNodeImpl(node, scanner.getTokenOffset(), scanner.getTokenLength());\n keyNode.value = scanner.getTokenValue();\n key = keyNode;\n _scanNext();\n } else {\n return void 0;\n }\n }\n node.keyNode = key;\n if (key.value !== \"//\") {\n const seen = keysSeen[key.value];\n if (seen) {\n _errorAtRange(t(\"Duplicate object key\"), ErrorCode.DuplicateKey, node.keyNode.offset, node.keyNode.offset + node.keyNode.length, DiagnosticSeverity.Warning);\n if (isObject(seen)) {\n _errorAtRange(t(\"Duplicate object key\"), ErrorCode.DuplicateKey, seen.keyNode.offset, seen.keyNode.offset + seen.keyNode.length, DiagnosticSeverity.Warning);\n }\n keysSeen[key.value] = true;\n } else {\n keysSeen[key.value] = node;\n }\n }\n if (scanner.getToken() === 6) {\n node.colonOffset = scanner.getTokenOffset();\n _scanNext();\n } else {\n _error(t(\"Colon expected\"), ErrorCode.ColonExpected);\n if (scanner.getToken() === 10 && textDocument.positionAt(key.offset + key.length).line < textDocument.positionAt(scanner.getTokenOffset()).line) {\n node.length = key.length;\n return node;\n }\n }\n const value = _parseValue(node);\n if (!value) {\n return _error(t(\"Value expected\"), ErrorCode.ValueExpected, node, [], [\n 2,\n 5\n /* Json.SyntaxKind.CommaToken */\n ]);\n }\n node.valueNode = value;\n node.length = value.offset + value.length - node.offset;\n return node;\n }\n function _parseObject(parent) {\n if (scanner.getToken() !== 1) {\n return void 0;\n }\n const node = new ObjectASTNodeImpl(parent, scanner.getTokenOffset());\n const keysSeen = /* @__PURE__ */ Object.create(null);\n _scanNext();\n let needsComma = false;\n while (scanner.getToken() !== 2 && scanner.getToken() !== 17) {\n if (scanner.getToken() === 5) {\n if (!needsComma) {\n _error(t(\"Property expected\"), ErrorCode.PropertyExpected);\n }\n const commaOffset = scanner.getTokenOffset();\n _scanNext();\n if (scanner.getToken() === 2) {\n if (needsComma) {\n _errorAtRange(t(\"Trailing comma\"), ErrorCode.TrailingComma, commaOffset, commaOffset + 1);\n }\n continue;\n }\n } else if (needsComma) {\n _error(t(\"Expected comma\"), ErrorCode.CommaExpected);\n }\n const property = _parseProperty(node, keysSeen);\n if (!property) {\n _error(t(\"Property expected\"), ErrorCode.PropertyExpected, void 0, [], [\n 2,\n 5\n /* Json.SyntaxKind.CommaToken */\n ]);\n } else {\n node.properties.push(property);\n }\n needsComma = true;\n }\n if (scanner.getToken() !== 2) {\n return _error(t(\"Expected comma or closing brace\"), ErrorCode.CommaOrCloseBraceExpected, node);\n }\n return _finalize(node, true);\n }\n function _parseString(parent) {\n if (scanner.getToken() !== 10) {\n return void 0;\n }\n const node = new StringASTNodeImpl(parent, scanner.getTokenOffset());\n node.value = scanner.getTokenValue();\n return _finalize(node, true);\n }\n function _parseNumber(parent) {\n if (scanner.getToken() !== 11) {\n return void 0;\n }\n const node = new NumberASTNodeImpl(parent, scanner.getTokenOffset());\n if (scanner.getTokenError() === 0) {\n const tokenValue = scanner.getTokenValue();\n try {\n const numberValue = JSON.parse(tokenValue);\n if (!isNumber(numberValue)) {\n return _error(t(\"Invalid number format.\"), ErrorCode.Undefined, node);\n }\n node.value = numberValue;\n } catch (e) {\n return _error(t(\"Invalid number format.\"), ErrorCode.Undefined, node);\n }\n node.isInteger = tokenValue.indexOf(\".\") === -1;\n }\n return _finalize(node, true);\n }\n function _parseLiteral(parent) {\n let node;\n switch (scanner.getToken()) {\n case 7:\n return _finalize(new NullASTNodeImpl(parent, scanner.getTokenOffset()), true);\n case 8:\n return _finalize(new BooleanASTNodeImpl(parent, true, scanner.getTokenOffset()), true);\n case 9:\n return _finalize(new BooleanASTNodeImpl(parent, false, scanner.getTokenOffset()), true);\n default:\n return void 0;\n }\n }\n function _parseValue(parent) {\n return _parseArray(parent) || _parseObject(parent) || _parseString(parent) || _parseNumber(parent) || _parseLiteral(parent);\n }\n let _root = void 0;\n const token = _scanNext();\n if (token !== 17) {\n _root = _parseValue(_root);\n if (!_root) {\n _error(t(\"Expected a JSON object, array or literal.\"), ErrorCode.Undefined);\n } else if (scanner.getToken() !== 17) {\n _error(t(\"End of file expected.\"), ErrorCode.Undefined);\n }\n }\n return new JSONDocument(_root, problems, commentRanges);\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/utils/json.js\nfunction stringifyObject(obj, indent, stringifyLiteral) {\n if (obj !== null && typeof obj === \"object\") {\n const newIndent = indent + \" \";\n if (Array.isArray(obj)) {\n if (obj.length === 0) {\n return \"[]\";\n }\n let result = \"[\\n\";\n for (let i = 0; i < obj.length; i++) {\n result += newIndent + stringifyObject(obj[i], newIndent, stringifyLiteral);\n if (i < obj.length - 1) {\n result += \",\";\n }\n result += \"\\n\";\n }\n result += indent + \"]\";\n return result;\n } else {\n const keys = Object.keys(obj);\n if (keys.length === 0) {\n return \"{}\";\n }\n let result = \"{\\n\";\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n result += newIndent + JSON.stringify(key) + \": \" + stringifyObject(obj[key], newIndent, stringifyLiteral);\n if (i < keys.length - 1) {\n result += \",\";\n }\n result += \"\\n\";\n }\n result += indent + \"}\";\n return result;\n }\n }\n return stringifyLiteral(obj);\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/services/jsonCompletion.js\nvar valueCommitCharacters = [\",\", \"}\", \"]\"];\nvar propertyCommitCharacters = [\":\"];\nvar JSONCompletion = class {\n constructor(schemaService, contributions = [], promiseConstructor = Promise, clientCapabilities = {}) {\n this.schemaService = schemaService;\n this.contributions = contributions;\n this.promiseConstructor = promiseConstructor;\n this.clientCapabilities = clientCapabilities;\n }\n doResolve(item) {\n for (let i = this.contributions.length - 1; i >= 0; i--) {\n const resolveCompletion = this.contributions[i].resolveCompletion;\n if (resolveCompletion) {\n const resolver = resolveCompletion(item);\n if (resolver) {\n return resolver;\n }\n }\n }\n return this.promiseConstructor.resolve(item);\n }\n doComplete(document, position, doc) {\n const result = {\n items: [],\n isIncomplete: false\n };\n const text = document.getText();\n const offset = document.offsetAt(position);\n let node = doc.getNodeFromOffset(offset, true);\n if (this.isInComment(document, node ? node.offset : 0, offset)) {\n return Promise.resolve(result);\n }\n if (node && offset === node.offset + node.length && offset > 0) {\n const ch = text[offset - 1];\n if (node.type === \"object\" && ch === \"}\" || node.type === \"array\" && ch === \"]\") {\n node = node.parent;\n }\n }\n const currentWord = this.getCurrentWord(document, offset);\n let overwriteRange;\n if (node && (node.type === \"string\" || node.type === \"number\" || node.type === \"boolean\" || node.type === \"null\")) {\n overwriteRange = Range.create(document.positionAt(node.offset), document.positionAt(node.offset + node.length));\n } else {\n let overwriteStart = offset - currentWord.length;\n if (overwriteStart > 0 && text[overwriteStart - 1] === '\"') {\n overwriteStart--;\n }\n overwriteRange = Range.create(document.positionAt(overwriteStart), position);\n }\n const supportsCommitCharacters = false;\n const proposed = /* @__PURE__ */ new Map();\n const collector = {\n add: (suggestion) => {\n let label = suggestion.label;\n const existing = proposed.get(label);\n if (!existing) {\n label = label.replace(/[\\n]/g, \"\\u21B5\");\n if (label.length > 60) {\n const shortendedLabel = label.substr(0, 57).trim() + \"...\";\n if (!proposed.has(shortendedLabel)) {\n label = shortendedLabel;\n }\n }\n suggestion.textEdit = TextEdit.replace(overwriteRange, suggestion.insertText);\n if (supportsCommitCharacters) {\n suggestion.commitCharacters = suggestion.kind === CompletionItemKind.Property ? propertyCommitCharacters : valueCommitCharacters;\n }\n suggestion.label = label;\n proposed.set(label, suggestion);\n result.items.push(suggestion);\n } else {\n if (!existing.documentation) {\n existing.documentation = suggestion.documentation;\n }\n if (!existing.detail) {\n existing.detail = suggestion.detail;\n }\n if (!existing.labelDetails) {\n existing.labelDetails = suggestion.labelDetails;\n }\n }\n },\n setAsIncomplete: () => {\n result.isIncomplete = true;\n },\n error: (message) => {\n console.error(message);\n },\n getNumberOfProposals: () => {\n return result.items.length;\n }\n };\n return this.schemaService.getSchemaForResource(document.uri, doc).then((schema) => {\n const collectionPromises = [];\n let addValue = true;\n let currentKey = \"\";\n let currentProperty = void 0;\n if (node) {\n if (node.type === \"string\") {\n const parent = node.parent;\n if (parent && parent.type === \"property\" && parent.keyNode === node) {\n addValue = !parent.valueNode;\n currentProperty = parent;\n currentKey = text.substr(node.offset + 1, node.length - 2);\n if (parent) {\n node = parent.parent;\n }\n }\n }\n }\n if (node && node.type === \"object\") {\n if (node.offset === offset) {\n return result;\n }\n const properties = node.properties;\n properties.forEach((p) => {\n if (!currentProperty || currentProperty !== p) {\n proposed.set(p.keyNode.value, CompletionItem.create(\"__\"));\n }\n });\n let separatorAfter = \"\";\n if (addValue) {\n separatorAfter = this.evaluateSeparatorAfter(document, document.offsetAt(overwriteRange.end));\n }\n if (schema) {\n this.getPropertyCompletions(schema, doc, node, addValue, separatorAfter, collector);\n } else {\n this.getSchemaLessPropertyCompletions(doc, node, currentKey, collector);\n }\n const location = getNodePath3(node);\n this.contributions.forEach((contribution) => {\n const collectPromise = contribution.collectPropertyCompletions(document.uri, location, currentWord, addValue, separatorAfter === \"\", collector);\n if (collectPromise) {\n collectionPromises.push(collectPromise);\n }\n });\n if (!schema && currentWord.length > 0 && text.charAt(offset - currentWord.length - 1) !== '\"') {\n collector.add({\n kind: CompletionItemKind.Property,\n label: this.getLabelForValue(currentWord),\n insertText: this.getInsertTextForProperty(currentWord, void 0, false, separatorAfter),\n insertTextFormat: InsertTextFormat.Snippet,\n documentation: \"\"\n });\n collector.setAsIncomplete();\n }\n }\n const types = {};\n if (schema) {\n this.getValueCompletions(schema, doc, node, offset, document, collector, types);\n } else {\n this.getSchemaLessValueCompletions(doc, node, offset, document, collector);\n }\n if (this.contributions.length > 0) {\n this.getContributedValueCompletions(doc, node, offset, document, collector, collectionPromises);\n }\n return this.promiseConstructor.all(collectionPromises).then(() => {\n if (collector.getNumberOfProposals() === 0) {\n let offsetForSeparator = offset;\n if (node && (node.type === \"string\" || node.type === \"number\" || node.type === \"boolean\" || node.type === \"null\")) {\n offsetForSeparator = node.offset + node.length;\n }\n const separatorAfter = this.evaluateSeparatorAfter(document, offsetForSeparator);\n this.addFillerValueCompletions(types, separatorAfter, collector);\n }\n return result;\n });\n });\n }\n getPropertyCompletions(schema, doc, node, addValue, separatorAfter, collector) {\n const matchingSchemas = doc.getMatchingSchemas(schema.schema, node.offset);\n matchingSchemas.forEach((s) => {\n if (s.node === node && !s.inverted) {\n const schemaProperties = s.schema.properties;\n if (schemaProperties) {\n Object.keys(schemaProperties).forEach((key) => {\n const propertySchema = schemaProperties[key];\n if (typeof propertySchema === \"object\" && !propertySchema.deprecationMessage && !propertySchema.doNotSuggest) {\n const proposal = {\n kind: CompletionItemKind.Property,\n label: key,\n insertText: this.getInsertTextForProperty(key, propertySchema, addValue, separatorAfter),\n insertTextFormat: InsertTextFormat.Snippet,\n filterText: this.getFilterTextForValue(key),\n documentation: this.fromMarkup(propertySchema.markdownDescription) || propertySchema.description || \"\"\n };\n if (propertySchema.suggestSortText !== void 0) {\n proposal.sortText = propertySchema.suggestSortText;\n }\n if (proposal.insertText && endsWith(proposal.insertText, `$1${separatorAfter}`)) {\n proposal.command = {\n title: \"Suggest\",\n command: \"editor.action.triggerSuggest\"\n };\n }\n collector.add(proposal);\n }\n });\n }\n const schemaPropertyNames = s.schema.propertyNames;\n if (typeof schemaPropertyNames === \"object\" && !schemaPropertyNames.deprecationMessage && !schemaPropertyNames.doNotSuggest) {\n const propertyNameCompletionItem = (name, enumDescription = void 0) => {\n const proposal = {\n kind: CompletionItemKind.Property,\n label: name,\n insertText: this.getInsertTextForProperty(name, void 0, addValue, separatorAfter),\n insertTextFormat: InsertTextFormat.Snippet,\n filterText: this.getFilterTextForValue(name),\n documentation: enumDescription || this.fromMarkup(schemaPropertyNames.markdownDescription) || schemaPropertyNames.description || \"\"\n };\n if (schemaPropertyNames.suggestSortText !== void 0) {\n proposal.sortText = schemaPropertyNames.suggestSortText;\n }\n if (proposal.insertText && endsWith(proposal.insertText, `$1${separatorAfter}`)) {\n proposal.command = {\n title: \"Suggest\",\n command: \"editor.action.triggerSuggest\"\n };\n }\n collector.add(proposal);\n };\n if (schemaPropertyNames.enum) {\n for (let i = 0; i < schemaPropertyNames.enum.length; i++) {\n let enumDescription = void 0;\n if (schemaPropertyNames.markdownEnumDescriptions && i < schemaPropertyNames.markdownEnumDescriptions.length) {\n enumDescription = this.fromMarkup(schemaPropertyNames.markdownEnumDescriptions[i]);\n } else if (schemaPropertyNames.enumDescriptions && i < schemaPropertyNames.enumDescriptions.length) {\n enumDescription = schemaPropertyNames.enumDescriptions[i];\n }\n propertyNameCompletionItem(schemaPropertyNames.enum[i], enumDescription);\n }\n }\n if (schemaPropertyNames.const) {\n propertyNameCompletionItem(schemaPropertyNames.const);\n }\n }\n }\n });\n }\n getSchemaLessPropertyCompletions(doc, node, currentKey, collector) {\n const collectCompletionsForSimilarObject = (obj) => {\n obj.properties.forEach((p) => {\n const key = p.keyNode.value;\n collector.add({\n kind: CompletionItemKind.Property,\n label: key,\n insertText: this.getInsertTextForValue(key, \"\"),\n insertTextFormat: InsertTextFormat.Snippet,\n filterText: this.getFilterTextForValue(key),\n documentation: \"\"\n });\n });\n };\n if (node.parent) {\n if (node.parent.type === \"property\") {\n const parentKey = node.parent.keyNode.value;\n doc.visit((n) => {\n if (n.type === \"property\" && n !== node.parent && n.keyNode.value === parentKey && n.valueNode && n.valueNode.type === \"object\") {\n collectCompletionsForSimilarObject(n.valueNode);\n }\n return true;\n });\n } else if (node.parent.type === \"array\") {\n node.parent.items.forEach((n) => {\n if (n.type === \"object\" && n !== node) {\n collectCompletionsForSimilarObject(n);\n }\n });\n }\n } else if (node.type === \"object\") {\n collector.add({\n kind: CompletionItemKind.Property,\n label: \"$schema\",\n insertText: this.getInsertTextForProperty(\"$schema\", void 0, true, \"\"),\n insertTextFormat: InsertTextFormat.Snippet,\n documentation: \"\",\n filterText: this.getFilterTextForValue(\"$schema\")\n });\n }\n }\n getSchemaLessValueCompletions(doc, node, offset, document, collector) {\n let offsetForSeparator = offset;\n if (node && (node.type === \"string\" || node.type === \"number\" || node.type === \"boolean\" || node.type === \"null\")) {\n offsetForSeparator = node.offset + node.length;\n node = node.parent;\n }\n if (!node) {\n collector.add({\n kind: this.getSuggestionKind(\"object\"),\n label: \"Empty object\",\n insertText: this.getInsertTextForValue({}, \"\"),\n insertTextFormat: InsertTextFormat.Snippet,\n documentation: \"\"\n });\n collector.add({\n kind: this.getSuggestionKind(\"array\"),\n label: \"Empty array\",\n insertText: this.getInsertTextForValue([], \"\"),\n insertTextFormat: InsertTextFormat.Snippet,\n documentation: \"\"\n });\n return;\n }\n const separatorAfter = this.evaluateSeparatorAfter(document, offsetForSeparator);\n const collectSuggestionsForValues = (value) => {\n if (value.parent && !contains2(value.parent, offset, true)) {\n collector.add({\n kind: this.getSuggestionKind(value.type),\n label: this.getLabelTextForMatchingNode(value, document),\n insertText: this.getInsertTextForMatchingNode(value, document, separatorAfter),\n insertTextFormat: InsertTextFormat.Snippet,\n documentation: \"\"\n });\n }\n if (value.type === \"boolean\") {\n this.addBooleanValueCompletion(!value.value, separatorAfter, collector);\n }\n };\n if (node.type === \"property\") {\n if (offset > (node.colonOffset || 0)) {\n const valueNode = node.valueNode;\n if (valueNode && (offset > valueNode.offset + valueNode.length || valueNode.type === \"object\" || valueNode.type === \"array\")) {\n return;\n }\n const parentKey = node.keyNode.value;\n doc.visit((n) => {\n if (n.type === \"property\" && n.keyNode.value === parentKey && n.valueNode) {\n collectSuggestionsForValues(n.valueNode);\n }\n return true;\n });\n if (parentKey === \"$schema\" && node.parent && !node.parent.parent) {\n this.addDollarSchemaCompletions(separatorAfter, collector);\n }\n }\n }\n if (node.type === \"array\") {\n if (node.parent && node.parent.type === \"property\") {\n const parentKey = node.parent.keyNode.value;\n doc.visit((n) => {\n if (n.type === \"property\" && n.keyNode.value === parentKey && n.valueNode && n.valueNode.type === \"array\") {\n n.valueNode.items.forEach(collectSuggestionsForValues);\n }\n return true;\n });\n } else {\n node.items.forEach(collectSuggestionsForValues);\n }\n }\n }\n getValueCompletions(schema, doc, node, offset, document, collector, types) {\n let offsetForSeparator = offset;\n let parentKey = void 0;\n let valueNode = void 0;\n if (node && (node.type === \"string\" || node.type === \"number\" || node.type === \"boolean\" || node.type === \"null\")) {\n offsetForSeparator = node.offset + node.length;\n valueNode = node;\n node = node.parent;\n }\n if (!node) {\n this.addSchemaValueCompletions(schema.schema, \"\", collector, types);\n return;\n }\n if (node.type === \"property\" && offset > (node.colonOffset || 0)) {\n const valueNode2 = node.valueNode;\n if (valueNode2 && offset > valueNode2.offset + valueNode2.length) {\n return;\n }\n parentKey = node.keyNode.value;\n node = node.parent;\n }\n if (node && (parentKey !== void 0 || node.type === \"array\")) {\n const separatorAfter = this.evaluateSeparatorAfter(document, offsetForSeparator);\n const matchingSchemas = doc.getMatchingSchemas(schema.schema, node.offset, valueNode);\n for (const s of matchingSchemas) {\n if (s.node === node && !s.inverted && s.schema) {\n if (node.type === \"array\" && s.schema.items) {\n let c = collector;\n if (s.schema.uniqueItems) {\n const existingValues = /* @__PURE__ */ new Set();\n node.children.forEach((n) => {\n if (n.type !== \"array\" && n.type !== \"object\") {\n existingValues.add(this.getLabelForValue(getNodeValue3(n)));\n }\n });\n c = {\n ...collector,\n add(suggestion) {\n if (!existingValues.has(suggestion.label)) {\n collector.add(suggestion);\n }\n }\n };\n }\n if (Array.isArray(s.schema.items)) {\n const index = this.findItemAtOffset(node, document, offset);\n if (index < s.schema.items.length) {\n this.addSchemaValueCompletions(s.schema.items[index], separatorAfter, c, types);\n }\n } else {\n this.addSchemaValueCompletions(s.schema.items, separatorAfter, c, types);\n }\n }\n if (parentKey !== void 0) {\n let propertyMatched = false;\n if (s.schema.properties) {\n const propertySchema = s.schema.properties[parentKey];\n if (propertySchema) {\n propertyMatched = true;\n this.addSchemaValueCompletions(propertySchema, separatorAfter, collector, types);\n }\n }\n if (s.schema.patternProperties && !propertyMatched) {\n for (const pattern of Object.keys(s.schema.patternProperties)) {\n const regex = extendedRegExp(pattern);\n if (regex?.test(parentKey)) {\n propertyMatched = true;\n const propertySchema = s.schema.patternProperties[pattern];\n this.addSchemaValueCompletions(propertySchema, separatorAfter, collector, types);\n }\n }\n }\n if (s.schema.additionalProperties && !propertyMatched) {\n const propertySchema = s.schema.additionalProperties;\n this.addSchemaValueCompletions(propertySchema, separatorAfter, collector, types);\n }\n }\n }\n }\n if (parentKey === \"$schema\" && !node.parent) {\n this.addDollarSchemaCompletions(separatorAfter, collector);\n }\n if (types[\"boolean\"]) {\n this.addBooleanValueCompletion(true, separatorAfter, collector);\n this.addBooleanValueCompletion(false, separatorAfter, collector);\n }\n if (types[\"null\"]) {\n this.addNullValueCompletion(separatorAfter, collector);\n }\n }\n }\n getContributedValueCompletions(doc, node, offset, document, collector, collectionPromises) {\n if (!node) {\n this.contributions.forEach((contribution) => {\n const collectPromise = contribution.collectDefaultCompletions(document.uri, collector);\n if (collectPromise) {\n collectionPromises.push(collectPromise);\n }\n });\n } else {\n if (node.type === \"string\" || node.type === \"number\" || node.type === \"boolean\" || node.type === \"null\") {\n node = node.parent;\n }\n if (node && node.type === \"property\" && offset > (node.colonOffset || 0)) {\n const parentKey = node.keyNode.value;\n const valueNode = node.valueNode;\n if ((!valueNode || offset <= valueNode.offset + valueNode.length) && node.parent) {\n const location = getNodePath3(node.parent);\n this.contributions.forEach((contribution) => {\n const collectPromise = contribution.collectValueCompletions(document.uri, location, parentKey, collector);\n if (collectPromise) {\n collectionPromises.push(collectPromise);\n }\n });\n }\n }\n }\n }\n addSchemaValueCompletions(schema, separatorAfter, collector, types) {\n if (typeof schema === \"object\") {\n this.addEnumValueCompletions(schema, separatorAfter, collector);\n this.addDefaultValueCompletions(schema, separatorAfter, collector);\n this.collectTypes(schema, types);\n if (Array.isArray(schema.allOf)) {\n schema.allOf.forEach((s) => this.addSchemaValueCompletions(s, separatorAfter, collector, types));\n }\n if (Array.isArray(schema.anyOf)) {\n schema.anyOf.forEach((s) => this.addSchemaValueCompletions(s, separatorAfter, collector, types));\n }\n if (Array.isArray(schema.oneOf)) {\n schema.oneOf.forEach((s) => this.addSchemaValueCompletions(s, separatorAfter, collector, types));\n }\n }\n }\n addDefaultValueCompletions(schema, separatorAfter, collector, arrayDepth = 0) {\n let hasProposals = false;\n if (isDefined(schema.default)) {\n let type = schema.type;\n let value = schema.default;\n for (let i = arrayDepth; i > 0; i--) {\n value = [value];\n type = \"array\";\n }\n const completionItem = {\n kind: this.getSuggestionKind(type),\n label: this.getLabelForValue(value),\n insertText: this.getInsertTextForValue(value, separatorAfter),\n insertTextFormat: InsertTextFormat.Snippet\n };\n if (this.doesSupportsLabelDetails()) {\n completionItem.labelDetails = { description: t(\"Default value\") };\n } else {\n completionItem.detail = t(\"Default value\");\n }\n collector.add(completionItem);\n hasProposals = true;\n }\n if (Array.isArray(schema.examples)) {\n schema.examples.forEach((example) => {\n let type = schema.type;\n let value = example;\n for (let i = arrayDepth; i > 0; i--) {\n value = [value];\n type = \"array\";\n }\n collector.add({\n kind: this.getSuggestionKind(type),\n label: this.getLabelForValue(value),\n insertText: this.getInsertTextForValue(value, separatorAfter),\n insertTextFormat: InsertTextFormat.Snippet\n });\n hasProposals = true;\n });\n }\n if (Array.isArray(schema.defaultSnippets)) {\n schema.defaultSnippets.forEach((s) => {\n let type = schema.type;\n let value = s.body;\n let label = s.label;\n let insertText;\n let filterText;\n if (isDefined(value)) {\n let type2 = schema.type;\n for (let i = arrayDepth; i > 0; i--) {\n value = [value];\n type2 = \"array\";\n }\n insertText = this.getInsertTextForSnippetValue(value, separatorAfter);\n filterText = this.getFilterTextForSnippetValue(value);\n label = label || this.getLabelForSnippetValue(value);\n } else if (typeof s.bodyText === \"string\") {\n let prefix = \"\", suffix = \"\", indent = \"\";\n for (let i = arrayDepth; i > 0; i--) {\n prefix = prefix + indent + \"[\\n\";\n suffix = suffix + \"\\n\" + indent + \"]\";\n indent += \" \";\n type = \"array\";\n }\n insertText = prefix + indent + s.bodyText.split(\"\\n\").join(\"\\n\" + indent) + suffix + separatorAfter;\n label = label || insertText, filterText = insertText.replace(/[\\n]/g, \"\");\n } else {\n return;\n }\n collector.add({\n kind: this.getSuggestionKind(type),\n label,\n documentation: this.fromMarkup(s.markdownDescription) || s.description,\n insertText,\n insertTextFormat: InsertTextFormat.Snippet,\n filterText\n });\n hasProposals = true;\n });\n }\n if (!hasProposals && typeof schema.items === \"object\" && !Array.isArray(schema.items) && arrayDepth < 5) {\n this.addDefaultValueCompletions(schema.items, separatorAfter, collector, arrayDepth + 1);\n }\n }\n addEnumValueCompletions(schema, separatorAfter, collector) {\n if (isDefined(schema.const)) {\n collector.add({\n kind: this.getSuggestionKind(schema.type),\n label: this.getLabelForValue(schema.const),\n insertText: this.getInsertTextForValue(schema.const, separatorAfter),\n insertTextFormat: InsertTextFormat.Snippet,\n documentation: this.fromMarkup(schema.markdownDescription) || schema.description\n });\n }\n if (Array.isArray(schema.enum)) {\n for (let i = 0, length = schema.enum.length; i < length; i++) {\n const enm = schema.enum[i];\n let documentation = this.fromMarkup(schema.markdownDescription) || schema.description;\n if (schema.markdownEnumDescriptions && i < schema.markdownEnumDescriptions.length && this.doesSupportMarkdown()) {\n documentation = this.fromMarkup(schema.markdownEnumDescriptions[i]);\n } else if (schema.enumDescriptions && i < schema.enumDescriptions.length) {\n documentation = schema.enumDescriptions[i];\n }\n collector.add({\n kind: this.getSuggestionKind(schema.type),\n label: this.getLabelForValue(enm),\n insertText: this.getInsertTextForValue(enm, separatorAfter),\n insertTextFormat: InsertTextFormat.Snippet,\n documentation\n });\n }\n }\n }\n collectTypes(schema, types) {\n if (Array.isArray(schema.enum) || isDefined(schema.const)) {\n return;\n }\n const type = schema.type;\n if (Array.isArray(type)) {\n type.forEach((t2) => types[t2] = true);\n } else if (type) {\n types[type] = true;\n }\n }\n addFillerValueCompletions(types, separatorAfter, collector) {\n if (types[\"object\"]) {\n collector.add({\n kind: this.getSuggestionKind(\"object\"),\n label: \"{}\",\n insertText: this.getInsertTextForGuessedValue({}, separatorAfter),\n insertTextFormat: InsertTextFormat.Snippet,\n detail: t(\"New object\"),\n documentation: \"\"\n });\n }\n if (types[\"array\"]) {\n collector.add({\n kind: this.getSuggestionKind(\"array\"),\n label: \"[]\",\n insertText: this.getInsertTextForGuessedValue([], separatorAfter),\n insertTextFormat: InsertTextFormat.Snippet,\n detail: t(\"New array\"),\n documentation: \"\"\n });\n }\n }\n addBooleanValueCompletion(value, separatorAfter, collector) {\n collector.add({\n kind: this.getSuggestionKind(\"boolean\"),\n label: value ? \"true\" : \"false\",\n insertText: this.getInsertTextForValue(value, separatorAfter),\n insertTextFormat: InsertTextFormat.Snippet,\n documentation: \"\"\n });\n }\n addNullValueCompletion(separatorAfter, collector) {\n collector.add({\n kind: this.getSuggestionKind(\"null\"),\n label: \"null\",\n insertText: \"null\" + separatorAfter,\n insertTextFormat: InsertTextFormat.Snippet,\n documentation: \"\"\n });\n }\n addDollarSchemaCompletions(separatorAfter, collector) {\n const schemaIds = this.schemaService.getRegisteredSchemaIds((schema) => schema === \"http\" || schema === \"https\");\n schemaIds.forEach((schemaId) => {\n if (schemaId.startsWith(\"http://json-schema.org/draft-\")) {\n schemaId = schemaId + \"#\";\n }\n collector.add({\n kind: CompletionItemKind.Module,\n label: this.getLabelForValue(schemaId),\n filterText: this.getFilterTextForValue(schemaId),\n insertText: this.getInsertTextForValue(schemaId, separatorAfter),\n insertTextFormat: InsertTextFormat.Snippet,\n documentation: \"\"\n });\n });\n }\n getLabelForValue(value) {\n return JSON.stringify(value);\n }\n getValueFromLabel(value) {\n return JSON.parse(value);\n }\n getFilterTextForValue(value) {\n return JSON.stringify(value);\n }\n getFilterTextForSnippetValue(value) {\n return JSON.stringify(value).replace(/\\$\\{\\d+:([^}]+)\\}|\\$\\d+/g, \"$1\");\n }\n getLabelForSnippetValue(value) {\n const label = JSON.stringify(value);\n return label.replace(/\\$\\{\\d+:([^}]+)\\}|\\$\\d+/g, \"$1\");\n }\n getInsertTextForPlainText(text) {\n return text.replace(/[\\\\\\$\\}]/g, \"\\\\$&\");\n }\n getInsertTextForValue(value, separatorAfter) {\n const text = JSON.stringify(value, null, \" \");\n if (text === \"{}\") {\n return \"{$1}\" + separatorAfter;\n } else if (text === \"[]\") {\n return \"[$1]\" + separatorAfter;\n }\n return this.getInsertTextForPlainText(text + separatorAfter);\n }\n getInsertTextForSnippetValue(value, separatorAfter) {\n const replacer = (value2) => {\n if (typeof value2 === \"string\") {\n if (value2[0] === \"^\") {\n return value2.substr(1);\n }\n }\n return JSON.stringify(value2);\n };\n return stringifyObject(value, \"\", replacer) + separatorAfter;\n }\n getInsertTextForGuessedValue(value, separatorAfter) {\n switch (typeof value) {\n case \"object\":\n if (value === null) {\n return \"${1:null}\" + separatorAfter;\n }\n return this.getInsertTextForValue(value, separatorAfter);\n case \"string\":\n let snippetValue = JSON.stringify(value);\n snippetValue = snippetValue.substr(1, snippetValue.length - 2);\n snippetValue = this.getInsertTextForPlainText(snippetValue);\n return '\"${1:' + snippetValue + '}\"' + separatorAfter;\n case \"number\":\n case \"boolean\":\n return \"${1:\" + JSON.stringify(value) + \"}\" + separatorAfter;\n }\n return this.getInsertTextForValue(value, separatorAfter);\n }\n getSuggestionKind(type) {\n if (Array.isArray(type)) {\n const array = type;\n type = array.length > 0 ? array[0] : void 0;\n }\n if (!type) {\n return CompletionItemKind.Value;\n }\n switch (type) {\n case \"string\":\n return CompletionItemKind.Value;\n case \"object\":\n return CompletionItemKind.Module;\n case \"property\":\n return CompletionItemKind.Property;\n default:\n return CompletionItemKind.Value;\n }\n }\n getLabelTextForMatchingNode(node, document) {\n switch (node.type) {\n case \"array\":\n return \"[]\";\n case \"object\":\n return \"{}\";\n default:\n const content = document.getText().substr(node.offset, node.length);\n return content;\n }\n }\n getInsertTextForMatchingNode(node, document, separatorAfter) {\n switch (node.type) {\n case \"array\":\n return this.getInsertTextForValue([], separatorAfter);\n case \"object\":\n return this.getInsertTextForValue({}, separatorAfter);\n default:\n const content = document.getText().substr(node.offset, node.length) + separatorAfter;\n return this.getInsertTextForPlainText(content);\n }\n }\n getInsertTextForProperty(key, propertySchema, addValue, separatorAfter) {\n const propertyText = this.getInsertTextForValue(key, \"\");\n if (!addValue) {\n return propertyText;\n }\n const resultText = propertyText + \": \";\n let value;\n let nValueProposals = 0;\n if (propertySchema) {\n if (Array.isArray(propertySchema.defaultSnippets)) {\n if (propertySchema.defaultSnippets.length === 1) {\n const body = propertySchema.defaultSnippets[0].body;\n if (isDefined(body)) {\n value = this.getInsertTextForSnippetValue(body, \"\");\n }\n }\n nValueProposals += propertySchema.defaultSnippets.length;\n }\n if (propertySchema.enum) {\n if (!value && propertySchema.enum.length === 1) {\n value = this.getInsertTextForGuessedValue(propertySchema.enum[0], \"\");\n }\n nValueProposals += propertySchema.enum.length;\n }\n if (isDefined(propertySchema.const)) {\n if (!value) {\n value = this.getInsertTextForGuessedValue(propertySchema.const, \"\");\n }\n nValueProposals++;\n }\n if (isDefined(propertySchema.default)) {\n if (!value) {\n value = this.getInsertTextForGuessedValue(propertySchema.default, \"\");\n }\n nValueProposals++;\n }\n if (Array.isArray(propertySchema.examples) && propertySchema.examples.length) {\n if (!value) {\n value = this.getInsertTextForGuessedValue(propertySchema.examples[0], \"\");\n }\n nValueProposals += propertySchema.examples.length;\n }\n if (nValueProposals === 0) {\n let type = Array.isArray(propertySchema.type) ? propertySchema.type[0] : propertySchema.type;\n if (!type) {\n if (propertySchema.properties) {\n type = \"object\";\n } else if (propertySchema.items) {\n type = \"array\";\n }\n }\n switch (type) {\n case \"boolean\":\n value = \"$1\";\n break;\n case \"string\":\n value = '\"$1\"';\n break;\n case \"object\":\n value = \"{$1}\";\n break;\n case \"array\":\n value = \"[$1]\";\n break;\n case \"number\":\n case \"integer\":\n value = \"${1:0}\";\n break;\n case \"null\":\n value = \"${1:null}\";\n break;\n default:\n return propertyText;\n }\n }\n }\n if (!value || nValueProposals > 1) {\n value = \"$1\";\n }\n return resultText + value + separatorAfter;\n }\n getCurrentWord(document, offset) {\n let i = offset - 1;\n const text = document.getText();\n while (i >= 0 && ' \\n\\r\\v\":{[,]}'.indexOf(text.charAt(i)) === -1) {\n i--;\n }\n return text.substring(i + 1, offset);\n }\n evaluateSeparatorAfter(document, offset) {\n const scanner = createScanner2(document.getText(), true);\n scanner.setPosition(offset);\n const token = scanner.scan();\n switch (token) {\n case 5:\n case 2:\n case 4:\n case 17:\n return \"\";\n default:\n return \",\";\n }\n }\n findItemAtOffset(node, document, offset) {\n const scanner = createScanner2(document.getText(), true);\n const children = node.items;\n for (let i = children.length - 1; i >= 0; i--) {\n const child = children[i];\n if (offset > child.offset + child.length) {\n scanner.setPosition(child.offset + child.length);\n const token = scanner.scan();\n if (token === 5 && offset >= scanner.getTokenOffset() + scanner.getTokenLength()) {\n return i + 1;\n }\n return i;\n } else if (offset >= child.offset) {\n return i;\n }\n }\n return 0;\n }\n isInComment(document, start, offset) {\n const scanner = createScanner2(document.getText(), false);\n scanner.setPosition(start);\n let token = scanner.scan();\n while (token !== 17 && scanner.getTokenOffset() + scanner.getTokenLength() < offset) {\n token = scanner.scan();\n }\n return (token === 12 || token === 13) && scanner.getTokenOffset() <= offset;\n }\n fromMarkup(markupString) {\n if (markupString && this.doesSupportMarkdown()) {\n return {\n kind: MarkupKind.Markdown,\n value: markupString\n };\n }\n return void 0;\n }\n doesSupportMarkdown() {\n if (!isDefined(this.supportsMarkdown)) {\n const documentationFormat = this.clientCapabilities.textDocument?.completion?.completionItem?.documentationFormat;\n this.supportsMarkdown = Array.isArray(documentationFormat) && documentationFormat.indexOf(MarkupKind.Markdown) !== -1;\n }\n return this.supportsMarkdown;\n }\n doesSupportsCommitCharacters() {\n if (!isDefined(this.supportsCommitCharacters)) {\n this.labelDetailsSupport = this.clientCapabilities.textDocument?.completion?.completionItem?.commitCharactersSupport;\n }\n return this.supportsCommitCharacters;\n }\n doesSupportsLabelDetails() {\n if (!isDefined(this.labelDetailsSupport)) {\n this.labelDetailsSupport = this.clientCapabilities.textDocument?.completion?.completionItem?.labelDetailsSupport;\n }\n return this.labelDetailsSupport;\n }\n};\n\n// node_modules/vscode-json-languageservice/lib/esm/services/jsonHover.js\nvar JSONHover = class {\n constructor(schemaService, contributions = [], promiseConstructor) {\n this.schemaService = schemaService;\n this.contributions = contributions;\n this.promise = promiseConstructor || Promise;\n }\n doHover(document, position, doc) {\n const offset = document.offsetAt(position);\n let node = doc.getNodeFromOffset(offset);\n if (!node || (node.type === \"object\" || node.type === \"array\") && offset > node.offset + 1 && offset < node.offset + node.length - 1) {\n return this.promise.resolve(null);\n }\n const hoverRangeNode = node;\n if (node.type === \"string\") {\n const parent = node.parent;\n if (parent && parent.type === \"property\" && parent.keyNode === node) {\n node = parent.valueNode;\n if (!node) {\n return this.promise.resolve(null);\n }\n }\n }\n const hoverRange = Range.create(document.positionAt(hoverRangeNode.offset), document.positionAt(hoverRangeNode.offset + hoverRangeNode.length));\n const createHover = (contents) => {\n const result = {\n contents,\n range: hoverRange\n };\n return result;\n };\n const location = getNodePath3(node);\n for (let i = this.contributions.length - 1; i >= 0; i--) {\n const contribution = this.contributions[i];\n const promise = contribution.getInfoContribution(document.uri, location);\n if (promise) {\n return promise.then((htmlContent) => createHover(htmlContent));\n }\n }\n return this.schemaService.getSchemaForResource(document.uri, doc).then((schema) => {\n if (schema && node) {\n const matchingSchemas = doc.getMatchingSchemas(schema.schema, node.offset);\n let title = void 0;\n let markdownDescription = void 0;\n let markdownEnumValueDescription = void 0, enumValue = void 0;\n matchingSchemas.every((s) => {\n if (s.node === node && !s.inverted && s.schema) {\n title = title || s.schema.title;\n markdownDescription = markdownDescription || s.schema.markdownDescription || toMarkdown(s.schema.description);\n if (s.schema.enum) {\n const idx = s.schema.enum.indexOf(getNodeValue3(node));\n if (s.schema.markdownEnumDescriptions) {\n markdownEnumValueDescription = s.schema.markdownEnumDescriptions[idx];\n } else if (s.schema.enumDescriptions) {\n markdownEnumValueDescription = toMarkdown(s.schema.enumDescriptions[idx]);\n }\n if (markdownEnumValueDescription) {\n enumValue = s.schema.enum[idx];\n if (typeof enumValue !== \"string\") {\n enumValue = JSON.stringify(enumValue);\n }\n }\n }\n }\n return true;\n });\n let result = \"\";\n if (title) {\n result = toMarkdown(title);\n }\n if (markdownDescription) {\n if (result.length > 0) {\n result += \"\\n\\n\";\n }\n result += markdownDescription;\n }\n if (markdownEnumValueDescription) {\n if (result.length > 0) {\n result += \"\\n\\n\";\n }\n result += `\\`${toMarkdownCodeBlock(enumValue)}\\`: ${markdownEnumValueDescription}`;\n }\n return createHover([result]);\n }\n return null;\n });\n }\n};\nfunction toMarkdown(plain) {\n if (plain) {\n const res = plain.replace(/([^\\n\\r])(\\r?\\n)([^\\n\\r])/gm, \"$1\\n\\n$3\");\n return res.replace(/[\\\\`*_{}[\\]()#+\\-.!]/g, \"\\\\$&\");\n }\n return void 0;\n}\nfunction toMarkdownCodeBlock(content) {\n if (content.indexOf(\"`\") !== -1) {\n return \"`` \" + content + \" ``\";\n }\n return content;\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/services/jsonValidation.js\nvar JSONValidation = class {\n constructor(jsonSchemaService, promiseConstructor) {\n this.jsonSchemaService = jsonSchemaService;\n this.promise = promiseConstructor;\n this.validationEnabled = true;\n }\n configure(raw) {\n if (raw) {\n this.validationEnabled = raw.validate !== false;\n this.commentSeverity = raw.allowComments ? void 0 : DiagnosticSeverity.Error;\n }\n }\n doValidation(textDocument, jsonDocument, documentSettings, schema) {\n if (!this.validationEnabled) {\n return this.promise.resolve([]);\n }\n const diagnostics = [];\n const added = {};\n const addProblem = (problem) => {\n const signature = problem.range.start.line + \" \" + problem.range.start.character + \" \" + problem.message;\n if (!added[signature]) {\n added[signature] = true;\n diagnostics.push(problem);\n }\n };\n const getDiagnostics = (schema2) => {\n let trailingCommaSeverity = documentSettings?.trailingCommas ? toDiagnosticSeverity(documentSettings.trailingCommas) : DiagnosticSeverity.Error;\n let commentSeverity = documentSettings?.comments ? toDiagnosticSeverity(documentSettings.comments) : this.commentSeverity;\n let schemaValidation = documentSettings?.schemaValidation ? toDiagnosticSeverity(documentSettings.schemaValidation) : DiagnosticSeverity.Warning;\n let schemaRequest = documentSettings?.schemaRequest ? toDiagnosticSeverity(documentSettings.schemaRequest) : DiagnosticSeverity.Warning;\n if (schema2) {\n const addSchemaProblem = (errorMessage, errorCode) => {\n if (jsonDocument.root && schemaRequest) {\n const astRoot = jsonDocument.root;\n const property = astRoot.type === \"object\" ? astRoot.properties[0] : void 0;\n if (property && property.keyNode.value === \"$schema\") {\n const node = property.valueNode || property;\n const range = Range.create(textDocument.positionAt(node.offset), textDocument.positionAt(node.offset + node.length));\n addProblem(Diagnostic.create(range, errorMessage, schemaRequest, errorCode));\n } else {\n const range = Range.create(textDocument.positionAt(astRoot.offset), textDocument.positionAt(astRoot.offset + 1));\n addProblem(Diagnostic.create(range, errorMessage, schemaRequest, errorCode));\n }\n }\n };\n if (schema2.errors.length) {\n addSchemaProblem(schema2.errors[0], ErrorCode.SchemaResolveError);\n } else if (schemaValidation) {\n for (const warning of schema2.warnings) {\n addSchemaProblem(warning, ErrorCode.SchemaUnsupportedFeature);\n }\n const semanticErrors = jsonDocument.validate(textDocument, schema2.schema, schemaValidation, documentSettings?.schemaDraft);\n if (semanticErrors) {\n semanticErrors.forEach(addProblem);\n }\n }\n if (schemaAllowsComments(schema2.schema)) {\n commentSeverity = void 0;\n }\n if (schemaAllowsTrailingCommas(schema2.schema)) {\n trailingCommaSeverity = void 0;\n }\n }\n for (const p of jsonDocument.syntaxErrors) {\n if (p.code === ErrorCode.TrailingComma) {\n if (typeof trailingCommaSeverity !== \"number\") {\n continue;\n }\n p.severity = trailingCommaSeverity;\n }\n addProblem(p);\n }\n if (typeof commentSeverity === \"number\") {\n const message = t(\"Comments are not permitted in JSON.\");\n jsonDocument.comments.forEach((c) => {\n addProblem(Diagnostic.create(c, message, commentSeverity, ErrorCode.CommentNotPermitted));\n });\n }\n return diagnostics;\n };\n if (schema) {\n const uri = schema.id || \"schemaservice://untitled/\" + idCounter++;\n const handle = this.jsonSchemaService.registerExternalSchema({ uri, schema });\n return handle.getResolvedSchema().then((resolvedSchema) => {\n return getDiagnostics(resolvedSchema);\n });\n }\n return this.jsonSchemaService.getSchemaForResource(textDocument.uri, jsonDocument).then((schema2) => {\n return getDiagnostics(schema2);\n });\n }\n getLanguageStatus(textDocument, jsonDocument) {\n return { schemas: this.jsonSchemaService.getSchemaURIsForResource(textDocument.uri, jsonDocument) };\n }\n};\nvar idCounter = 0;\nfunction schemaAllowsComments(schemaRef) {\n if (schemaRef && typeof schemaRef === \"object\") {\n if (isBoolean(schemaRef.allowComments)) {\n return schemaRef.allowComments;\n }\n if (schemaRef.allOf) {\n for (const schema of schemaRef.allOf) {\n const allow = schemaAllowsComments(schema);\n if (isBoolean(allow)) {\n return allow;\n }\n }\n }\n }\n return void 0;\n}\nfunction schemaAllowsTrailingCommas(schemaRef) {\n if (schemaRef && typeof schemaRef === \"object\") {\n if (isBoolean(schemaRef.allowTrailingCommas)) {\n return schemaRef.allowTrailingCommas;\n }\n const deprSchemaRef = schemaRef;\n if (isBoolean(deprSchemaRef[\"allowsTrailingCommas\"])) {\n return deprSchemaRef[\"allowsTrailingCommas\"];\n }\n if (schemaRef.allOf) {\n for (const schema of schemaRef.allOf) {\n const allow = schemaAllowsTrailingCommas(schema);\n if (isBoolean(allow)) {\n return allow;\n }\n }\n }\n }\n return void 0;\n}\nfunction toDiagnosticSeverity(severityLevel) {\n switch (severityLevel) {\n case \"error\":\n return DiagnosticSeverity.Error;\n case \"warning\":\n return DiagnosticSeverity.Warning;\n case \"ignore\":\n return void 0;\n }\n return void 0;\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/utils/colors.js\nvar Digit0 = 48;\nvar Digit9 = 57;\nvar A = 65;\nvar a = 97;\nvar f = 102;\nfunction hexDigit(charCode) {\n if (charCode < Digit0) {\n return 0;\n }\n if (charCode <= Digit9) {\n return charCode - Digit0;\n }\n if (charCode < a) {\n charCode += a - A;\n }\n if (charCode >= a && charCode <= f) {\n return charCode - a + 10;\n }\n return 0;\n}\nfunction colorFromHex(text) {\n if (text[0] !== \"#\") {\n return void 0;\n }\n switch (text.length) {\n case 4:\n return {\n red: hexDigit(text.charCodeAt(1)) * 17 / 255,\n green: hexDigit(text.charCodeAt(2)) * 17 / 255,\n blue: hexDigit(text.charCodeAt(3)) * 17 / 255,\n alpha: 1\n };\n case 5:\n return {\n red: hexDigit(text.charCodeAt(1)) * 17 / 255,\n green: hexDigit(text.charCodeAt(2)) * 17 / 255,\n blue: hexDigit(text.charCodeAt(3)) * 17 / 255,\n alpha: hexDigit(text.charCodeAt(4)) * 17 / 255\n };\n case 7:\n return {\n red: (hexDigit(text.charCodeAt(1)) * 16 + hexDigit(text.charCodeAt(2))) / 255,\n green: (hexDigit(text.charCodeAt(3)) * 16 + hexDigit(text.charCodeAt(4))) / 255,\n blue: (hexDigit(text.charCodeAt(5)) * 16 + hexDigit(text.charCodeAt(6))) / 255,\n alpha: 1\n };\n case 9:\n return {\n red: (hexDigit(text.charCodeAt(1)) * 16 + hexDigit(text.charCodeAt(2))) / 255,\n green: (hexDigit(text.charCodeAt(3)) * 16 + hexDigit(text.charCodeAt(4))) / 255,\n blue: (hexDigit(text.charCodeAt(5)) * 16 + hexDigit(text.charCodeAt(6))) / 255,\n alpha: (hexDigit(text.charCodeAt(7)) * 16 + hexDigit(text.charCodeAt(8))) / 255\n };\n }\n return void 0;\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/services/jsonDocumentSymbols.js\nvar JSONDocumentSymbols = class {\n constructor(schemaService) {\n this.schemaService = schemaService;\n }\n findDocumentSymbols(document, doc, context = { resultLimit: Number.MAX_VALUE }) {\n const root = doc.root;\n if (!root) {\n return [];\n }\n let limit = context.resultLimit || Number.MAX_VALUE;\n const resourceString = document.uri;\n if (resourceString === \"vscode://defaultsettings/keybindings.json\" || endsWith(resourceString.toLowerCase(), \"/user/keybindings.json\")) {\n if (root.type === \"array\") {\n const result2 = [];\n for (const item of root.items) {\n if (item.type === \"object\") {\n for (const property of item.properties) {\n if (property.keyNode.value === \"key\" && property.valueNode) {\n const location = Location.create(document.uri, getRange(document, item));\n result2.push({ name: getName(property.valueNode), kind: SymbolKind.Function, location });\n limit--;\n if (limit <= 0) {\n if (context && context.onResultLimitExceeded) {\n context.onResultLimitExceeded(resourceString);\n }\n return result2;\n }\n }\n }\n }\n }\n return result2;\n }\n }\n const toVisit = [\n { node: root, containerName: \"\" }\n ];\n let nextToVisit = 0;\n let limitExceeded = false;\n const result = [];\n const collectOutlineEntries = (node, containerName) => {\n if (node.type === \"array\") {\n node.items.forEach((node2) => {\n if (node2) {\n toVisit.push({ node: node2, containerName });\n }\n });\n } else if (node.type === \"object\") {\n node.properties.forEach((property) => {\n const valueNode = property.valueNode;\n if (valueNode) {\n if (limit > 0) {\n limit--;\n const location = Location.create(document.uri, getRange(document, property));\n const childContainerName = containerName ? containerName + \".\" + property.keyNode.value : property.keyNode.value;\n result.push({ name: this.getKeyLabel(property), kind: this.getSymbolKind(valueNode.type), location, containerName });\n toVisit.push({ node: valueNode, containerName: childContainerName });\n } else {\n limitExceeded = true;\n }\n }\n });\n }\n };\n while (nextToVisit < toVisit.length) {\n const next = toVisit[nextToVisit++];\n collectOutlineEntries(next.node, next.containerName);\n }\n if (limitExceeded && context && context.onResultLimitExceeded) {\n context.onResultLimitExceeded(resourceString);\n }\n return result;\n }\n findDocumentSymbols2(document, doc, context = { resultLimit: Number.MAX_VALUE }) {\n const root = doc.root;\n if (!root) {\n return [];\n }\n let limit = context.resultLimit || Number.MAX_VALUE;\n const resourceString = document.uri;\n if (resourceString === \"vscode://defaultsettings/keybindings.json\" || endsWith(resourceString.toLowerCase(), \"/user/keybindings.json\")) {\n if (root.type === \"array\") {\n const result2 = [];\n for (const item of root.items) {\n if (item.type === \"object\") {\n for (const property of item.properties) {\n if (property.keyNode.value === \"key\" && property.valueNode) {\n const range = getRange(document, item);\n const selectionRange = getRange(document, property.keyNode);\n result2.push({ name: getName(property.valueNode), kind: SymbolKind.Function, range, selectionRange });\n limit--;\n if (limit <= 0) {\n if (context && context.onResultLimitExceeded) {\n context.onResultLimitExceeded(resourceString);\n }\n return result2;\n }\n }\n }\n }\n }\n return result2;\n }\n }\n const result = [];\n const toVisit = [\n { node: root, result }\n ];\n let nextToVisit = 0;\n let limitExceeded = false;\n const collectOutlineEntries = (node, result2) => {\n if (node.type === \"array\") {\n node.items.forEach((node2, index) => {\n if (node2) {\n if (limit > 0) {\n limit--;\n const range = getRange(document, node2);\n const selectionRange = range;\n const name = String(index);\n const symbol = { name, kind: this.getSymbolKind(node2.type), range, selectionRange, children: [] };\n result2.push(symbol);\n toVisit.push({ result: symbol.children, node: node2 });\n } else {\n limitExceeded = true;\n }\n }\n });\n } else if (node.type === \"object\") {\n node.properties.forEach((property) => {\n const valueNode = property.valueNode;\n if (valueNode) {\n if (limit > 0) {\n limit--;\n const range = getRange(document, property);\n const selectionRange = getRange(document, property.keyNode);\n const children = [];\n const symbol = { name: this.getKeyLabel(property), kind: this.getSymbolKind(valueNode.type), range, selectionRange, children, detail: this.getDetail(valueNode) };\n result2.push(symbol);\n toVisit.push({ result: children, node: valueNode });\n } else {\n limitExceeded = true;\n }\n }\n });\n }\n };\n while (nextToVisit < toVisit.length) {\n const next = toVisit[nextToVisit++];\n collectOutlineEntries(next.node, next.result);\n }\n if (limitExceeded && context && context.onResultLimitExceeded) {\n context.onResultLimitExceeded(resourceString);\n }\n return result;\n }\n getSymbolKind(nodeType) {\n switch (nodeType) {\n case \"object\":\n return SymbolKind.Module;\n case \"string\":\n return SymbolKind.String;\n case \"number\":\n return SymbolKind.Number;\n case \"array\":\n return SymbolKind.Array;\n case \"boolean\":\n return SymbolKind.Boolean;\n default:\n return SymbolKind.Variable;\n }\n }\n getKeyLabel(property) {\n let name = property.keyNode.value;\n if (name) {\n name = name.replace(/[\\n]/g, \"\\u21B5\");\n }\n if (name && name.trim()) {\n return name;\n }\n return `\"${name}\"`;\n }\n getDetail(node) {\n if (!node) {\n return void 0;\n }\n if (node.type === \"boolean\" || node.type === \"number\" || node.type === \"null\" || node.type === \"string\") {\n return String(node.value);\n } else {\n if (node.type === \"array\") {\n return node.children.length ? void 0 : \"[]\";\n } else if (node.type === \"object\") {\n return node.children.length ? void 0 : \"{}\";\n }\n }\n return void 0;\n }\n findDocumentColors(document, doc, context) {\n return this.schemaService.getSchemaForResource(document.uri, doc).then((schema) => {\n const result = [];\n if (schema) {\n let limit = context && typeof context.resultLimit === \"number\" ? context.resultLimit : Number.MAX_VALUE;\n const matchingSchemas = doc.getMatchingSchemas(schema.schema);\n const visitedNode = {};\n for (const s of matchingSchemas) {\n if (!s.inverted && s.schema && (s.schema.format === \"color\" || s.schema.format === \"color-hex\") && s.node && s.node.type === \"string\") {\n const nodeId = String(s.node.offset);\n if (!visitedNode[nodeId]) {\n const color = colorFromHex(getNodeValue3(s.node));\n if (color) {\n const range = getRange(document, s.node);\n result.push({ color, range });\n }\n visitedNode[nodeId] = true;\n limit--;\n if (limit <= 0) {\n if (context && context.onResultLimitExceeded) {\n context.onResultLimitExceeded(document.uri);\n }\n return result;\n }\n }\n }\n }\n }\n return result;\n });\n }\n getColorPresentations(document, doc, color, range) {\n const result = [];\n const red256 = Math.round(color.red * 255), green256 = Math.round(color.green * 255), blue256 = Math.round(color.blue * 255);\n function toTwoDigitHex(n) {\n const r = n.toString(16);\n return r.length !== 2 ? \"0\" + r : r;\n }\n let label;\n if (color.alpha === 1) {\n label = `#${toTwoDigitHex(red256)}${toTwoDigitHex(green256)}${toTwoDigitHex(blue256)}`;\n } else {\n label = `#${toTwoDigitHex(red256)}${toTwoDigitHex(green256)}${toTwoDigitHex(blue256)}${toTwoDigitHex(Math.round(color.alpha * 255))}`;\n }\n result.push({ label, textEdit: TextEdit.replace(range, JSON.stringify(label)) });\n return result;\n }\n};\nfunction getRange(document, node) {\n return Range.create(document.positionAt(node.offset), document.positionAt(node.offset + node.length));\n}\nfunction getName(node) {\n return getNodeValue3(node) || t(\"<empty>\");\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/services/configuration.js\nvar schemaContributions = {\n schemaAssociations: [],\n schemas: {\n // bundle the schema-schema to include (localized) descriptions\n \"http://json-schema.org/draft-04/schema#\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n \"definitions\": {\n \"schemaArray\": {\n \"type\": \"array\",\n \"minItems\": 1,\n \"items\": {\n \"$ref\": \"#\"\n }\n },\n \"positiveInteger\": {\n \"type\": \"integer\",\n \"minimum\": 0\n },\n \"positiveIntegerDefault0\": {\n \"allOf\": [\n {\n \"$ref\": \"#/definitions/positiveInteger\"\n },\n {\n \"default\": 0\n }\n ]\n },\n \"simpleTypes\": {\n \"type\": \"string\",\n \"enum\": [\n \"array\",\n \"boolean\",\n \"integer\",\n \"null\",\n \"number\",\n \"object\",\n \"string\"\n ]\n },\n \"stringArray\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"minItems\": 1,\n \"uniqueItems\": true\n }\n },\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"format\": \"uri\"\n },\n \"$schema\": {\n \"type\": \"string\",\n \"format\": \"uri\"\n },\n \"title\": {\n \"type\": \"string\"\n },\n \"description\": {\n \"type\": \"string\"\n },\n \"default\": {},\n \"multipleOf\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"exclusiveMinimum\": true\n },\n \"maximum\": {\n \"type\": \"number\"\n },\n \"exclusiveMaximum\": {\n \"type\": \"boolean\",\n \"default\": false\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"exclusiveMinimum\": {\n \"type\": \"boolean\",\n \"default\": false\n },\n \"maxLength\": {\n \"allOf\": [\n {\n \"$ref\": \"#/definitions/positiveInteger\"\n }\n ]\n },\n \"minLength\": {\n \"allOf\": [\n {\n \"$ref\": \"#/definitions/positiveIntegerDefault0\"\n }\n ]\n },\n \"pattern\": {\n \"type\": \"string\",\n \"format\": \"regex\"\n },\n \"additionalItems\": {\n \"anyOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"$ref\": \"#\"\n }\n ],\n \"default\": {}\n },\n \"items\": {\n \"anyOf\": [\n {\n \"$ref\": \"#\"\n },\n {\n \"$ref\": \"#/definitions/schemaArray\"\n }\n ],\n \"default\": {}\n },\n \"maxItems\": {\n \"allOf\": [\n {\n \"$ref\": \"#/definitions/positiveInteger\"\n }\n ]\n },\n \"minItems\": {\n \"allOf\": [\n {\n \"$ref\": \"#/definitions/positiveIntegerDefault0\"\n }\n ]\n },\n \"uniqueItems\": {\n \"type\": \"boolean\",\n \"default\": false\n },\n \"maxProperties\": {\n \"allOf\": [\n {\n \"$ref\": \"#/definitions/positiveInteger\"\n }\n ]\n },\n \"minProperties\": {\n \"allOf\": [\n {\n \"$ref\": \"#/definitions/positiveIntegerDefault0\"\n }\n ]\n },\n \"required\": {\n \"allOf\": [\n {\n \"$ref\": \"#/definitions/stringArray\"\n }\n ]\n },\n \"additionalProperties\": {\n \"anyOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"$ref\": \"#\"\n }\n ],\n \"default\": {}\n },\n \"definitions\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"$ref\": \"#\"\n },\n \"default\": {}\n },\n \"properties\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"$ref\": \"#\"\n },\n \"default\": {}\n },\n \"patternProperties\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"$ref\": \"#\"\n },\n \"default\": {}\n },\n \"dependencies\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"anyOf\": [\n {\n \"$ref\": \"#\"\n },\n {\n \"$ref\": \"#/definitions/stringArray\"\n }\n ]\n }\n },\n \"enum\": {\n \"type\": \"array\",\n \"minItems\": 1,\n \"uniqueItems\": true\n },\n \"type\": {\n \"anyOf\": [\n {\n \"$ref\": \"#/definitions/simpleTypes\"\n },\n {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/definitions/simpleTypes\"\n },\n \"minItems\": 1,\n \"uniqueItems\": true\n }\n ]\n },\n \"format\": {\n \"anyOf\": [\n {\n \"type\": \"string\",\n \"enum\": [\n \"date-time\",\n \"uri\",\n \"email\",\n \"hostname\",\n \"ipv4\",\n \"ipv6\",\n \"regex\"\n ]\n },\n {\n \"type\": \"string\"\n }\n ]\n },\n \"allOf\": {\n \"allOf\": [\n {\n \"$ref\": \"#/definitions/schemaArray\"\n }\n ]\n },\n \"anyOf\": {\n \"allOf\": [\n {\n \"$ref\": \"#/definitions/schemaArray\"\n }\n ]\n },\n \"oneOf\": {\n \"allOf\": [\n {\n \"$ref\": \"#/definitions/schemaArray\"\n }\n ]\n },\n \"not\": {\n \"allOf\": [\n {\n \"$ref\": \"#\"\n }\n ]\n }\n },\n \"dependencies\": {\n \"exclusiveMaximum\": [\n \"maximum\"\n ],\n \"exclusiveMinimum\": [\n \"minimum\"\n ]\n },\n \"default\": {}\n },\n \"http://json-schema.org/draft-07/schema#\": {\n \"definitions\": {\n \"schemaArray\": {\n \"type\": \"array\",\n \"minItems\": 1,\n \"items\": { \"$ref\": \"#\" }\n },\n \"nonNegativeInteger\": {\n \"type\": \"integer\",\n \"minimum\": 0\n },\n \"nonNegativeIntegerDefault0\": {\n \"allOf\": [\n { \"$ref\": \"#/definitions/nonNegativeInteger\" },\n { \"default\": 0 }\n ]\n },\n \"simpleTypes\": {\n \"enum\": [\n \"array\",\n \"boolean\",\n \"integer\",\n \"null\",\n \"number\",\n \"object\",\n \"string\"\n ]\n },\n \"stringArray\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"uniqueItems\": true,\n \"default\": []\n }\n },\n \"type\": [\"object\", \"boolean\"],\n \"properties\": {\n \"$id\": {\n \"type\": \"string\",\n \"format\": \"uri-reference\"\n },\n \"$schema\": {\n \"type\": \"string\",\n \"format\": \"uri\"\n },\n \"$ref\": {\n \"type\": \"string\",\n \"format\": \"uri-reference\"\n },\n \"$comment\": {\n \"type\": \"string\"\n },\n \"title\": {\n \"type\": \"string\"\n },\n \"description\": {\n \"type\": \"string\"\n },\n \"default\": true,\n \"readOnly\": {\n \"type\": \"boolean\",\n \"default\": false\n },\n \"examples\": {\n \"type\": \"array\",\n \"items\": true\n },\n \"multipleOf\": {\n \"type\": \"number\",\n \"exclusiveMinimum\": 0\n },\n \"maximum\": {\n \"type\": \"number\"\n },\n \"exclusiveMaximum\": {\n \"type\": \"number\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"exclusiveMinimum\": {\n \"type\": \"number\"\n },\n \"maxLength\": { \"$ref\": \"#/definitions/nonNegativeInteger\" },\n \"minLength\": { \"$ref\": \"#/definitions/nonNegativeIntegerDefault0\" },\n \"pattern\": {\n \"type\": \"string\",\n \"format\": \"regex\"\n },\n \"additionalItems\": { \"$ref\": \"#\" },\n \"items\": {\n \"anyOf\": [\n { \"$ref\": \"#\" },\n { \"$ref\": \"#/definitions/schemaArray\" }\n ],\n \"default\": true\n },\n \"maxItems\": { \"$ref\": \"#/definitions/nonNegativeInteger\" },\n \"minItems\": { \"$ref\": \"#/definitions/nonNegativeIntegerDefault0\" },\n \"uniqueItems\": {\n \"type\": \"boolean\",\n \"default\": false\n },\n \"contains\": { \"$ref\": \"#\" },\n \"maxProperties\": { \"$ref\": \"#/definitions/nonNegativeInteger\" },\n \"minProperties\": { \"$ref\": \"#/definitions/nonNegativeIntegerDefault0\" },\n \"required\": { \"$ref\": \"#/definitions/stringArray\" },\n \"additionalProperties\": { \"$ref\": \"#\" },\n \"definitions\": {\n \"type\": \"object\",\n \"additionalProperties\": { \"$ref\": \"#\" },\n \"default\": {}\n },\n \"properties\": {\n \"type\": \"object\",\n \"additionalProperties\": { \"$ref\": \"#\" },\n \"default\": {}\n },\n \"patternProperties\": {\n \"type\": \"object\",\n \"additionalProperties\": { \"$ref\": \"#\" },\n \"propertyNames\": { \"format\": \"regex\" },\n \"default\": {}\n },\n \"dependencies\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"anyOf\": [\n { \"$ref\": \"#\" },\n { \"$ref\": \"#/definitions/stringArray\" }\n ]\n }\n },\n \"propertyNames\": { \"$ref\": \"#\" },\n \"const\": true,\n \"enum\": {\n \"type\": \"array\",\n \"items\": true,\n \"minItems\": 1,\n \"uniqueItems\": true\n },\n \"type\": {\n \"anyOf\": [\n { \"$ref\": \"#/definitions/simpleTypes\" },\n {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/definitions/simpleTypes\" },\n \"minItems\": 1,\n \"uniqueItems\": true\n }\n ]\n },\n \"format\": { \"type\": \"string\" },\n \"contentMediaType\": { \"type\": \"string\" },\n \"contentEncoding\": { \"type\": \"string\" },\n \"if\": { \"$ref\": \"#\" },\n \"then\": { \"$ref\": \"#\" },\n \"else\": { \"$ref\": \"#\" },\n \"allOf\": { \"$ref\": \"#/definitions/schemaArray\" },\n \"anyOf\": { \"$ref\": \"#/definitions/schemaArray\" },\n \"oneOf\": { \"$ref\": \"#/definitions/schemaArray\" },\n \"not\": { \"$ref\": \"#\" }\n },\n \"default\": true\n }\n }\n};\nvar descriptions = {\n id: t(\"A unique identifier for the schema.\"),\n $schema: t(\"The schema to verify this document against.\"),\n title: t(\"A descriptive title of the element.\"),\n description: t(\"A long description of the element. Used in hover menus and suggestions.\"),\n default: t(\"A default value. Used by suggestions.\"),\n multipleOf: t(\"A number that should cleanly divide the current value (i.e. have no remainder).\"),\n maximum: t(\"The maximum numerical value, inclusive by default.\"),\n exclusiveMaximum: t(\"Makes the maximum property exclusive.\"),\n minimum: t(\"The minimum numerical value, inclusive by default.\"),\n exclusiveMinimum: t(\"Makes the minimum property exclusive.\"),\n maxLength: t(\"The maximum length of a string.\"),\n minLength: t(\"The minimum length of a string.\"),\n pattern: t(\"A regular expression to match the string against. It is not implicitly anchored.\"),\n additionalItems: t(\"For arrays, only when items is set as an array. If it is a schema, then this schema validates items after the ones specified by the items array. If it is false, then additional items will cause validation to fail.\"),\n items: t(\"For arrays. Can either be a schema to validate every element against or an array of schemas to validate each item against in order (the first schema will validate the first element, the second schema will validate the second element, and so on.\"),\n maxItems: t(\"The maximum number of items that can be inside an array. Inclusive.\"),\n minItems: t(\"The minimum number of items that can be inside an array. Inclusive.\"),\n uniqueItems: t(\"If all of the items in the array must be unique. Defaults to false.\"),\n maxProperties: t(\"The maximum number of properties an object can have. Inclusive.\"),\n minProperties: t(\"The minimum number of properties an object can have. Inclusive.\"),\n required: t(\"An array of strings that lists the names of all properties required on this object.\"),\n additionalProperties: t(\"Either a schema or a boolean. If a schema, then used to validate all properties not matched by 'properties' or 'patternProperties'. If false, then any properties not matched by either will cause this schema to fail.\"),\n definitions: t(\"Not used for validation. Place subschemas here that you wish to reference inline with $ref.\"),\n properties: t(\"A map of property names to schemas for each property.\"),\n patternProperties: t(\"A map of regular expressions on property names to schemas for matching properties.\"),\n dependencies: t(\"A map of property names to either an array of property names or a schema. An array of property names means the property named in the key depends on the properties in the array being present in the object in order to be valid. If the value is a schema, then the schema is only applied to the object if the property in the key exists on the object.\"),\n enum: t(\"The set of literal values that are valid.\"),\n type: t(\"Either a string of one of the basic schema types (number, integer, null, array, object, boolean, string) or an array of strings specifying a subset of those types.\"),\n format: t(\"Describes the format expected for the value.\"),\n allOf: t(\"An array of schemas, all of which must match.\"),\n anyOf: t(\"An array of schemas, where at least one must match.\"),\n oneOf: t(\"An array of schemas, exactly one of which must match.\"),\n not: t(\"A schema which must not match.\"),\n $id: t(\"A unique identifier for the schema.\"),\n $ref: t(\"Reference a definition hosted on any location.\"),\n $comment: t(\"Comments from schema authors to readers or maintainers of the schema.\"),\n readOnly: t(\"Indicates that the value of the instance is managed exclusively by the owning authority.\"),\n examples: t(\"Sample JSON values associated with a particular schema, for the purpose of illustrating usage.\"),\n contains: t('An array instance is valid against \"contains\" if at least one of its elements is valid against the given schema.'),\n propertyNames: t(\"If the instance is an object, this keyword validates if every property name in the instance validates against the provided schema.\"),\n const: t(\"An instance validates successfully against this keyword if its value is equal to the value of the keyword.\"),\n contentMediaType: t(\"Describes the media type of a string property.\"),\n contentEncoding: t(\"Describes the content encoding of a string property.\"),\n if: t('The validation outcome of the \"if\" subschema controls which of the \"then\" or \"else\" keywords are evaluated.'),\n then: t('The \"if\" subschema is used for validation when the \"if\" subschema succeeds.'),\n else: t('The \"else\" subschema is used for validation when the \"if\" subschema fails.')\n};\nfor (const schemaName in schemaContributions.schemas) {\n const schema = schemaContributions.schemas[schemaName];\n for (const property in schema.properties) {\n let propertyObject = schema.properties[property];\n if (typeof propertyObject === \"boolean\") {\n propertyObject = schema.properties[property] = {};\n }\n const description = descriptions[property];\n if (description) {\n propertyObject[\"description\"] = description;\n }\n }\n}\n\n// node_modules/vscode-uri/lib/esm/index.mjs\nvar LIB;\n(() => {\n \"use strict\";\n var t2 = { 470: (t3) => {\n function e2(t4) {\n if (\"string\" != typeof t4)\n throw new TypeError(\"Path must be a string. Received \" + JSON.stringify(t4));\n }\n function r2(t4, e3) {\n for (var r3, n3 = \"\", i = 0, o = -1, s = 0, h = 0; h <= t4.length; ++h) {\n if (h < t4.length)\n r3 = t4.charCodeAt(h);\n else {\n if (47 === r3)\n break;\n r3 = 47;\n }\n if (47 === r3) {\n if (o === h - 1 || 1 === s)\n ;\n else if (o !== h - 1 && 2 === s) {\n if (n3.length < 2 || 2 !== i || 46 !== n3.charCodeAt(n3.length - 1) || 46 !== n3.charCodeAt(n3.length - 2)) {\n if (n3.length > 2) {\n var a2 = n3.lastIndexOf(\"/\");\n if (a2 !== n3.length - 1) {\n -1 === a2 ? (n3 = \"\", i = 0) : i = (n3 = n3.slice(0, a2)).length - 1 - n3.lastIndexOf(\"/\"), o = h, s = 0;\n continue;\n }\n } else if (2 === n3.length || 1 === n3.length) {\n n3 = \"\", i = 0, o = h, s = 0;\n continue;\n }\n }\n e3 && (n3.length > 0 ? n3 += \"/..\" : n3 = \"..\", i = 2);\n } else\n n3.length > 0 ? n3 += \"/\" + t4.slice(o + 1, h) : n3 = t4.slice(o + 1, h), i = h - o - 1;\n o = h, s = 0;\n } else\n 46 === r3 && -1 !== s ? ++s : s = -1;\n }\n return n3;\n }\n var n2 = { resolve: function() {\n for (var t4, n3 = \"\", i = false, o = arguments.length - 1; o >= -1 && !i; o--) {\n var s;\n o >= 0 ? s = arguments[o] : (void 0 === t4 && (t4 = process.cwd()), s = t4), e2(s), 0 !== s.length && (n3 = s + \"/\" + n3, i = 47 === s.charCodeAt(0));\n }\n return n3 = r2(n3, !i), i ? n3.length > 0 ? \"/\" + n3 : \"/\" : n3.length > 0 ? n3 : \".\";\n }, normalize: function(t4) {\n if (e2(t4), 0 === t4.length)\n return \".\";\n var n3 = 47 === t4.charCodeAt(0), i = 47 === t4.charCodeAt(t4.length - 1);\n return 0 !== (t4 = r2(t4, !n3)).length || n3 || (t4 = \".\"), t4.length > 0 && i && (t4 += \"/\"), n3 ? \"/\" + t4 : t4;\n }, isAbsolute: function(t4) {\n return e2(t4), t4.length > 0 && 47 === t4.charCodeAt(0);\n }, join: function() {\n if (0 === arguments.length)\n return \".\";\n for (var t4, r3 = 0; r3 < arguments.length; ++r3) {\n var i = arguments[r3];\n e2(i), i.length > 0 && (void 0 === t4 ? t4 = i : t4 += \"/\" + i);\n }\n return void 0 === t4 ? \".\" : n2.normalize(t4);\n }, relative: function(t4, r3) {\n if (e2(t4), e2(r3), t4 === r3)\n return \"\";\n if ((t4 = n2.resolve(t4)) === (r3 = n2.resolve(r3)))\n return \"\";\n for (var i = 1; i < t4.length && 47 === t4.charCodeAt(i); ++i)\n ;\n for (var o = t4.length, s = o - i, h = 1; h < r3.length && 47 === r3.charCodeAt(h); ++h)\n ;\n for (var a2 = r3.length - h, c = s < a2 ? s : a2, f2 = -1, u = 0; u <= c; ++u) {\n if (u === c) {\n if (a2 > c) {\n if (47 === r3.charCodeAt(h + u))\n return r3.slice(h + u + 1);\n if (0 === u)\n return r3.slice(h + u);\n } else\n s > c && (47 === t4.charCodeAt(i + u) ? f2 = u : 0 === u && (f2 = 0));\n break;\n }\n var l = t4.charCodeAt(i + u);\n if (l !== r3.charCodeAt(h + u))\n break;\n 47 === l && (f2 = u);\n }\n var g = \"\";\n for (u = i + f2 + 1; u <= o; ++u)\n u !== o && 47 !== t4.charCodeAt(u) || (0 === g.length ? g += \"..\" : g += \"/..\");\n return g.length > 0 ? g + r3.slice(h + f2) : (h += f2, 47 === r3.charCodeAt(h) && ++h, r3.slice(h));\n }, _makeLong: function(t4) {\n return t4;\n }, dirname: function(t4) {\n if (e2(t4), 0 === t4.length)\n return \".\";\n for (var r3 = t4.charCodeAt(0), n3 = 47 === r3, i = -1, o = true, s = t4.length - 1; s >= 1; --s)\n if (47 === (r3 = t4.charCodeAt(s))) {\n if (!o) {\n i = s;\n break;\n }\n } else\n o = false;\n return -1 === i ? n3 ? \"/\" : \".\" : n3 && 1 === i ? \"//\" : t4.slice(0, i);\n }, basename: function(t4, r3) {\n if (void 0 !== r3 && \"string\" != typeof r3)\n throw new TypeError('\"ext\" argument must be a string');\n e2(t4);\n var n3, i = 0, o = -1, s = true;\n if (void 0 !== r3 && r3.length > 0 && r3.length <= t4.length) {\n if (r3.length === t4.length && r3 === t4)\n return \"\";\n var h = r3.length - 1, a2 = -1;\n for (n3 = t4.length - 1; n3 >= 0; --n3) {\n var c = t4.charCodeAt(n3);\n if (47 === c) {\n if (!s) {\n i = n3 + 1;\n break;\n }\n } else\n -1 === a2 && (s = false, a2 = n3 + 1), h >= 0 && (c === r3.charCodeAt(h) ? -1 == --h && (o = n3) : (h = -1, o = a2));\n }\n return i === o ? o = a2 : -1 === o && (o = t4.length), t4.slice(i, o);\n }\n for (n3 = t4.length - 1; n3 >= 0; --n3)\n if (47 === t4.charCodeAt(n3)) {\n if (!s) {\n i = n3 + 1;\n break;\n }\n } else\n -1 === o && (s = false, o = n3 + 1);\n return -1 === o ? \"\" : t4.slice(i, o);\n }, extname: function(t4) {\n e2(t4);\n for (var r3 = -1, n3 = 0, i = -1, o = true, s = 0, h = t4.length - 1; h >= 0; --h) {\n var a2 = t4.charCodeAt(h);\n if (47 !== a2)\n -1 === i && (o = false, i = h + 1), 46 === a2 ? -1 === r3 ? r3 = h : 1 !== s && (s = 1) : -1 !== r3 && (s = -1);\n else if (!o) {\n n3 = h + 1;\n break;\n }\n }\n return -1 === r3 || -1 === i || 0 === s || 1 === s && r3 === i - 1 && r3 === n3 + 1 ? \"\" : t4.slice(r3, i);\n }, format: function(t4) {\n if (null === t4 || \"object\" != typeof t4)\n throw new TypeError('The \"pathObject\" argument must be of type Object. Received type ' + typeof t4);\n return function(t5, e3) {\n var r3 = e3.dir || e3.root, n3 = e3.base || (e3.name || \"\") + (e3.ext || \"\");\n return r3 ? r3 === e3.root ? r3 + n3 : r3 + \"/\" + n3 : n3;\n }(0, t4);\n }, parse: function(t4) {\n e2(t4);\n var r3 = { root: \"\", dir: \"\", base: \"\", ext: \"\", name: \"\" };\n if (0 === t4.length)\n return r3;\n var n3, i = t4.charCodeAt(0), o = 47 === i;\n o ? (r3.root = \"/\", n3 = 1) : n3 = 0;\n for (var s = -1, h = 0, a2 = -1, c = true, f2 = t4.length - 1, u = 0; f2 >= n3; --f2)\n if (47 !== (i = t4.charCodeAt(f2)))\n -1 === a2 && (c = false, a2 = f2 + 1), 46 === i ? -1 === s ? s = f2 : 1 !== u && (u = 1) : -1 !== s && (u = -1);\n else if (!c) {\n h = f2 + 1;\n break;\n }\n return -1 === s || -1 === a2 || 0 === u || 1 === u && s === a2 - 1 && s === h + 1 ? -1 !== a2 && (r3.base = r3.name = 0 === h && o ? t4.slice(1, a2) : t4.slice(h, a2)) : (0 === h && o ? (r3.name = t4.slice(1, s), r3.base = t4.slice(1, a2)) : (r3.name = t4.slice(h, s), r3.base = t4.slice(h, a2)), r3.ext = t4.slice(s, a2)), h > 0 ? r3.dir = t4.slice(0, h - 1) : o && (r3.dir = \"/\"), r3;\n }, sep: \"/\", delimiter: \":\", win32: null, posix: null };\n n2.posix = n2, t3.exports = n2;\n } }, e = {};\n function r(n2) {\n var i = e[n2];\n if (void 0 !== i)\n return i.exports;\n var o = e[n2] = { exports: {} };\n return t2[n2](o, o.exports, r), o.exports;\n }\n r.d = (t3, e2) => {\n for (var n2 in e2)\n r.o(e2, n2) && !r.o(t3, n2) && Object.defineProperty(t3, n2, { enumerable: true, get: e2[n2] });\n }, r.o = (t3, e2) => Object.prototype.hasOwnProperty.call(t3, e2), r.r = (t3) => {\n \"undefined\" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t3, Symbol.toStringTag, { value: \"Module\" }), Object.defineProperty(t3, \"__esModule\", { value: true });\n };\n var n = {};\n (() => {\n let t3;\n if (r.r(n), r.d(n, { URI: () => f2, Utils: () => P }), \"object\" == typeof process)\n t3 = \"win32\" === process.platform;\n else if (\"object\" == typeof navigator) {\n let e3 = navigator.userAgent;\n t3 = e3.indexOf(\"Windows\") >= 0;\n }\n const e2 = /^\\w[\\w\\d+.-]*$/, i = /^\\//, o = /^\\/\\//;\n function s(t4, r2) {\n if (!t4.scheme && r2)\n throw new Error(`[UriError]: Scheme is missing: {scheme: \"\", authority: \"${t4.authority}\", path: \"${t4.path}\", query: \"${t4.query}\", fragment: \"${t4.fragment}\"}`);\n if (t4.scheme && !e2.test(t4.scheme))\n throw new Error(\"[UriError]: Scheme contains illegal characters.\");\n if (t4.path) {\n if (t4.authority) {\n if (!i.test(t4.path))\n throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash (\"/\") character');\n } else if (o.test(t4.path))\n throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters (\"//\")');\n }\n }\n const h = \"\", a2 = \"/\", c = /^(([^:/?#]+?):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/;\n class f2 {\n static isUri(t4) {\n return t4 instanceof f2 || !!t4 && \"string\" == typeof t4.authority && \"string\" == typeof t4.fragment && \"string\" == typeof t4.path && \"string\" == typeof t4.query && \"string\" == typeof t4.scheme && \"string\" == typeof t4.fsPath && \"function\" == typeof t4.with && \"function\" == typeof t4.toString;\n }\n scheme;\n authority;\n path;\n query;\n fragment;\n constructor(t4, e3, r2, n2, i2, o2 = false) {\n \"object\" == typeof t4 ? (this.scheme = t4.scheme || h, this.authority = t4.authority || h, this.path = t4.path || h, this.query = t4.query || h, this.fragment = t4.fragment || h) : (this.scheme = /* @__PURE__ */ function(t5, e4) {\n return t5 || e4 ? t5 : \"file\";\n }(t4, o2), this.authority = e3 || h, this.path = function(t5, e4) {\n switch (t5) {\n case \"https\":\n case \"http\":\n case \"file\":\n e4 ? e4[0] !== a2 && (e4 = a2 + e4) : e4 = a2;\n }\n return e4;\n }(this.scheme, r2 || h), this.query = n2 || h, this.fragment = i2 || h, s(this, o2));\n }\n get fsPath() {\n return m(this, false);\n }\n with(t4) {\n if (!t4)\n return this;\n let { scheme: e3, authority: r2, path: n2, query: i2, fragment: o2 } = t4;\n return void 0 === e3 ? e3 = this.scheme : null === e3 && (e3 = h), void 0 === r2 ? r2 = this.authority : null === r2 && (r2 = h), void 0 === n2 ? n2 = this.path : null === n2 && (n2 = h), void 0 === i2 ? i2 = this.query : null === i2 && (i2 = h), void 0 === o2 ? o2 = this.fragment : null === o2 && (o2 = h), e3 === this.scheme && r2 === this.authority && n2 === this.path && i2 === this.query && o2 === this.fragment ? this : new l(e3, r2, n2, i2, o2);\n }\n static parse(t4, e3 = false) {\n const r2 = c.exec(t4);\n return r2 ? new l(r2[2] || h, C(r2[4] || h), C(r2[5] || h), C(r2[7] || h), C(r2[9] || h), e3) : new l(h, h, h, h, h);\n }\n static file(e3) {\n let r2 = h;\n if (t3 && (e3 = e3.replace(/\\\\/g, a2)), e3[0] === a2 && e3[1] === a2) {\n const t4 = e3.indexOf(a2, 2);\n -1 === t4 ? (r2 = e3.substring(2), e3 = a2) : (r2 = e3.substring(2, t4), e3 = e3.substring(t4) || a2);\n }\n return new l(\"file\", r2, e3, h, h);\n }\n static from(t4) {\n const e3 = new l(t4.scheme, t4.authority, t4.path, t4.query, t4.fragment);\n return s(e3, true), e3;\n }\n toString(t4 = false) {\n return y(this, t4);\n }\n toJSON() {\n return this;\n }\n static revive(t4) {\n if (t4) {\n if (t4 instanceof f2)\n return t4;\n {\n const e3 = new l(t4);\n return e3._formatted = t4.external, e3._fsPath = t4._sep === u ? t4.fsPath : null, e3;\n }\n }\n return t4;\n }\n }\n const u = t3 ? 1 : void 0;\n class l extends f2 {\n _formatted = null;\n _fsPath = null;\n get fsPath() {\n return this._fsPath || (this._fsPath = m(this, false)), this._fsPath;\n }\n toString(t4 = false) {\n return t4 ? y(this, true) : (this._formatted || (this._formatted = y(this, false)), this._formatted);\n }\n toJSON() {\n const t4 = { $mid: 1 };\n return this._fsPath && (t4.fsPath = this._fsPath, t4._sep = u), this._formatted && (t4.external = this._formatted), this.path && (t4.path = this.path), this.scheme && (t4.scheme = this.scheme), this.authority && (t4.authority = this.authority), this.query && (t4.query = this.query), this.fragment && (t4.fragment = this.fragment), t4;\n }\n }\n const g = { 58: \"%3A\", 47: \"%2F\", 63: \"%3F\", 35: \"%23\", 91: \"%5B\", 93: \"%5D\", 64: \"%40\", 33: \"%21\", 36: \"%24\", 38: \"%26\", 39: \"%27\", 40: \"%28\", 41: \"%29\", 42: \"%2A\", 43: \"%2B\", 44: \"%2C\", 59: \"%3B\", 61: \"%3D\", 32: \"%20\" };\n function d(t4, e3, r2) {\n let n2, i2 = -1;\n for (let o2 = 0; o2 < t4.length; o2++) {\n const s2 = t4.charCodeAt(o2);\n if (s2 >= 97 && s2 <= 122 || s2 >= 65 && s2 <= 90 || s2 >= 48 && s2 <= 57 || 45 === s2 || 46 === s2 || 95 === s2 || 126 === s2 || e3 && 47 === s2 || r2 && 91 === s2 || r2 && 93 === s2 || r2 && 58 === s2)\n -1 !== i2 && (n2 += encodeURIComponent(t4.substring(i2, o2)), i2 = -1), void 0 !== n2 && (n2 += t4.charAt(o2));\n else {\n void 0 === n2 && (n2 = t4.substr(0, o2));\n const e4 = g[s2];\n void 0 !== e4 ? (-1 !== i2 && (n2 += encodeURIComponent(t4.substring(i2, o2)), i2 = -1), n2 += e4) : -1 === i2 && (i2 = o2);\n }\n }\n return -1 !== i2 && (n2 += encodeURIComponent(t4.substring(i2))), void 0 !== n2 ? n2 : t4;\n }\n function p(t4) {\n let e3;\n for (let r2 = 0; r2 < t4.length; r2++) {\n const n2 = t4.charCodeAt(r2);\n 35 === n2 || 63 === n2 ? (void 0 === e3 && (e3 = t4.substr(0, r2)), e3 += g[n2]) : void 0 !== e3 && (e3 += t4[r2]);\n }\n return void 0 !== e3 ? e3 : t4;\n }\n function m(e3, r2) {\n let n2;\n return n2 = e3.authority && e3.path.length > 1 && \"file\" === e3.scheme ? `//${e3.authority}${e3.path}` : 47 === e3.path.charCodeAt(0) && (e3.path.charCodeAt(1) >= 65 && e3.path.charCodeAt(1) <= 90 || e3.path.charCodeAt(1) >= 97 && e3.path.charCodeAt(1) <= 122) && 58 === e3.path.charCodeAt(2) ? r2 ? e3.path.substr(1) : e3.path[1].toLowerCase() + e3.path.substr(2) : e3.path, t3 && (n2 = n2.replace(/\\//g, \"\\\\\")), n2;\n }\n function y(t4, e3) {\n const r2 = e3 ? p : d;\n let n2 = \"\", { scheme: i2, authority: o2, path: s2, query: h2, fragment: c2 } = t4;\n if (i2 && (n2 += i2, n2 += \":\"), (o2 || \"file\" === i2) && (n2 += a2, n2 += a2), o2) {\n let t5 = o2.indexOf(\"@\");\n if (-1 !== t5) {\n const e4 = o2.substr(0, t5);\n o2 = o2.substr(t5 + 1), t5 = e4.lastIndexOf(\":\"), -1 === t5 ? n2 += r2(e4, false, false) : (n2 += r2(e4.substr(0, t5), false, false), n2 += \":\", n2 += r2(e4.substr(t5 + 1), false, true)), n2 += \"@\";\n }\n o2 = o2.toLowerCase(), t5 = o2.lastIndexOf(\":\"), -1 === t5 ? n2 += r2(o2, false, true) : (n2 += r2(o2.substr(0, t5), false, true), n2 += o2.substr(t5));\n }\n if (s2) {\n if (s2.length >= 3 && 47 === s2.charCodeAt(0) && 58 === s2.charCodeAt(2)) {\n const t5 = s2.charCodeAt(1);\n t5 >= 65 && t5 <= 90 && (s2 = `/${String.fromCharCode(t5 + 32)}:${s2.substr(3)}`);\n } else if (s2.length >= 2 && 58 === s2.charCodeAt(1)) {\n const t5 = s2.charCodeAt(0);\n t5 >= 65 && t5 <= 90 && (s2 = `${String.fromCharCode(t5 + 32)}:${s2.substr(2)}`);\n }\n n2 += r2(s2, true, false);\n }\n return h2 && (n2 += \"?\", n2 += r2(h2, false, false)), c2 && (n2 += \"#\", n2 += e3 ? c2 : d(c2, false, false)), n2;\n }\n function v(t4) {\n try {\n return decodeURIComponent(t4);\n } catch {\n return t4.length > 3 ? t4.substr(0, 3) + v(t4.substr(3)) : t4;\n }\n }\n const b = /(%[0-9A-Za-z][0-9A-Za-z])+/g;\n function C(t4) {\n return t4.match(b) ? t4.replace(b, (t5) => v(t5)) : t4;\n }\n var A2 = r(470);\n const w = A2.posix || A2, x = \"/\";\n var P;\n !function(t4) {\n t4.joinPath = function(t5, ...e3) {\n return t5.with({ path: w.join(t5.path, ...e3) });\n }, t4.resolvePath = function(t5, ...e3) {\n let r2 = t5.path, n2 = false;\n r2[0] !== x && (r2 = x + r2, n2 = true);\n let i2 = w.resolve(r2, ...e3);\n return n2 && i2[0] === x && !t5.authority && (i2 = i2.substring(1)), t5.with({ path: i2 });\n }, t4.dirname = function(t5) {\n if (0 === t5.path.length || t5.path === x)\n return t5;\n let e3 = w.dirname(t5.path);\n return 1 === e3.length && 46 === e3.charCodeAt(0) && (e3 = \"\"), t5.with({ path: e3 });\n }, t4.basename = function(t5) {\n return w.basename(t5.path);\n }, t4.extname = function(t5) {\n return w.extname(t5.path);\n };\n }(P || (P = {}));\n })(), LIB = n;\n})();\nvar { URI: URI2, Utils } = LIB;\n\n// node_modules/vscode-json-languageservice/lib/esm/utils/glob.js\nfunction createRegex(glob, opts) {\n if (typeof glob !== \"string\") {\n throw new TypeError(\"Expected a string\");\n }\n const str = String(glob);\n let reStr = \"\";\n const extended = opts ? !!opts.extended : false;\n const globstar = opts ? !!opts.globstar : false;\n let inGroup = false;\n const flags = opts && typeof opts.flags === \"string\" ? opts.flags : \"\";\n let c;\n for (let i = 0, len = str.length; i < len; i++) {\n c = str[i];\n switch (c) {\n case \"/\":\n case \"$\":\n case \"^\":\n case \"+\":\n case \".\":\n case \"(\":\n case \")\":\n case \"=\":\n case \"!\":\n case \"|\":\n reStr += \"\\\\\" + c;\n break;\n case \"?\":\n if (extended) {\n reStr += \".\";\n break;\n }\n case \"[\":\n case \"]\":\n if (extended) {\n reStr += c;\n break;\n }\n case \"{\":\n if (extended) {\n inGroup = true;\n reStr += \"(\";\n break;\n }\n case \"}\":\n if (extended) {\n inGroup = false;\n reStr += \")\";\n break;\n }\n case \",\":\n if (inGroup) {\n reStr += \"|\";\n break;\n }\n reStr += \"\\\\\" + c;\n break;\n case \"*\":\n const prevChar = str[i - 1];\n let starCount = 1;\n while (str[i + 1] === \"*\") {\n starCount++;\n i++;\n }\n const nextChar = str[i + 1];\n if (!globstar) {\n reStr += \".*\";\n } else {\n const isGlobstar = starCount > 1 && (prevChar === \"/\" || prevChar === void 0 || prevChar === \"{\" || prevChar === \",\") && (nextChar === \"/\" || nextChar === void 0 || nextChar === \",\" || nextChar === \"}\");\n if (isGlobstar) {\n if (nextChar === \"/\") {\n i++;\n } else if (prevChar === \"/\" && reStr.endsWith(\"\\\\/\")) {\n reStr = reStr.substr(0, reStr.length - 2);\n }\n reStr += \"((?:[^/]*(?:/|$))*)\";\n } else {\n reStr += \"([^/]*)\";\n }\n }\n break;\n default:\n reStr += c;\n }\n }\n if (!flags || !~flags.indexOf(\"g\")) {\n reStr = \"^\" + reStr + \"$\";\n }\n return new RegExp(reStr, flags);\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/services/jsonSchemaService.js\nvar BANG = \"!\";\nvar PATH_SEP = \"/\";\nvar FilePatternAssociation = class {\n constructor(pattern, folderUri, uris) {\n this.folderUri = folderUri;\n this.uris = uris;\n this.globWrappers = [];\n try {\n for (let patternString of pattern) {\n const include = patternString[0] !== BANG;\n if (!include) {\n patternString = patternString.substring(1);\n }\n if (patternString.length > 0) {\n if (patternString[0] === PATH_SEP) {\n patternString = patternString.substring(1);\n }\n this.globWrappers.push({\n regexp: createRegex(\"**/\" + patternString, { extended: true, globstar: true }),\n include\n });\n }\n }\n ;\n if (folderUri) {\n folderUri = normalizeResourceForMatching(folderUri);\n if (!folderUri.endsWith(\"/\")) {\n folderUri = folderUri + \"/\";\n }\n this.folderUri = folderUri;\n }\n } catch (e) {\n this.globWrappers.length = 0;\n this.uris = [];\n }\n }\n matchesPattern(fileName) {\n if (this.folderUri && !fileName.startsWith(this.folderUri)) {\n return false;\n }\n let match = false;\n for (const { regexp, include } of this.globWrappers) {\n if (regexp.test(fileName)) {\n match = include;\n }\n }\n return match;\n }\n getURIs() {\n return this.uris;\n }\n};\nvar SchemaHandle = class {\n constructor(service, uri, unresolvedSchemaContent) {\n this.service = service;\n this.uri = uri;\n this.dependencies = /* @__PURE__ */ new Set();\n this.anchors = void 0;\n if (unresolvedSchemaContent) {\n this.unresolvedSchema = this.service.promise.resolve(new UnresolvedSchema(unresolvedSchemaContent));\n }\n }\n getUnresolvedSchema() {\n if (!this.unresolvedSchema) {\n this.unresolvedSchema = this.service.loadSchema(this.uri);\n }\n return this.unresolvedSchema;\n }\n getResolvedSchema() {\n if (!this.resolvedSchema) {\n this.resolvedSchema = this.getUnresolvedSchema().then((unresolved) => {\n return this.service.resolveSchemaContent(unresolved, this);\n });\n }\n return this.resolvedSchema;\n }\n clearSchema() {\n const hasChanges = !!this.unresolvedSchema;\n this.resolvedSchema = void 0;\n this.unresolvedSchema = void 0;\n this.dependencies.clear();\n this.anchors = void 0;\n return hasChanges;\n }\n};\nvar UnresolvedSchema = class {\n constructor(schema, errors = []) {\n this.schema = schema;\n this.errors = errors;\n }\n};\nvar ResolvedSchema = class {\n constructor(schema, errors = [], warnings = [], schemaDraft) {\n this.schema = schema;\n this.errors = errors;\n this.warnings = warnings;\n this.schemaDraft = schemaDraft;\n }\n getSection(path) {\n const schemaRef = this.getSectionRecursive(path, this.schema);\n if (schemaRef) {\n return asSchema(schemaRef);\n }\n return void 0;\n }\n getSectionRecursive(path, schema) {\n if (!schema || typeof schema === \"boolean\" || path.length === 0) {\n return schema;\n }\n const next = path.shift();\n if (schema.properties && typeof schema.properties[next]) {\n return this.getSectionRecursive(path, schema.properties[next]);\n } else if (schema.patternProperties) {\n for (const pattern of Object.keys(schema.patternProperties)) {\n const regex = extendedRegExp(pattern);\n if (regex?.test(next)) {\n return this.getSectionRecursive(path, schema.patternProperties[pattern]);\n }\n }\n } else if (typeof schema.additionalProperties === \"object\") {\n return this.getSectionRecursive(path, schema.additionalProperties);\n } else if (next.match(\"[0-9]+\")) {\n if (Array.isArray(schema.items)) {\n const index = parseInt(next, 10);\n if (!isNaN(index) && schema.items[index]) {\n return this.getSectionRecursive(path, schema.items[index]);\n }\n } else if (schema.items) {\n return this.getSectionRecursive(path, schema.items);\n }\n }\n return void 0;\n }\n};\nvar JSONSchemaService = class {\n constructor(requestService, contextService, promiseConstructor) {\n this.contextService = contextService;\n this.requestService = requestService;\n this.promiseConstructor = promiseConstructor || Promise;\n this.callOnDispose = [];\n this.contributionSchemas = {};\n this.contributionAssociations = [];\n this.schemasById = {};\n this.filePatternAssociations = [];\n this.registeredSchemasIds = {};\n }\n getRegisteredSchemaIds(filter) {\n return Object.keys(this.registeredSchemasIds).filter((id) => {\n const scheme = URI2.parse(id).scheme;\n return scheme !== \"schemaservice\" && (!filter || filter(scheme));\n });\n }\n get promise() {\n return this.promiseConstructor;\n }\n dispose() {\n while (this.callOnDispose.length > 0) {\n this.callOnDispose.pop()();\n }\n }\n onResourceChange(uri) {\n this.cachedSchemaForResource = void 0;\n let hasChanges = false;\n uri = normalizeId(uri);\n const toWalk = [uri];\n const all = Object.keys(this.schemasById).map((key) => this.schemasById[key]);\n while (toWalk.length) {\n const curr = toWalk.pop();\n for (let i = 0; i < all.length; i++) {\n const handle = all[i];\n if (handle && (handle.uri === curr || handle.dependencies.has(curr))) {\n if (handle.uri !== curr) {\n toWalk.push(handle.uri);\n }\n if (handle.clearSchema()) {\n hasChanges = true;\n }\n all[i] = void 0;\n }\n }\n }\n return hasChanges;\n }\n setSchemaContributions(schemaContributions2) {\n if (schemaContributions2.schemas) {\n const schemas = schemaContributions2.schemas;\n for (const id in schemas) {\n const normalizedId = normalizeId(id);\n this.contributionSchemas[normalizedId] = this.addSchemaHandle(normalizedId, schemas[id]);\n }\n }\n if (Array.isArray(schemaContributions2.schemaAssociations)) {\n const schemaAssociations = schemaContributions2.schemaAssociations;\n for (let schemaAssociation of schemaAssociations) {\n const uris = schemaAssociation.uris.map(normalizeId);\n const association = this.addFilePatternAssociation(schemaAssociation.pattern, schemaAssociation.folderUri, uris);\n this.contributionAssociations.push(association);\n }\n }\n }\n addSchemaHandle(id, unresolvedSchemaContent) {\n const schemaHandle = new SchemaHandle(this, id, unresolvedSchemaContent);\n this.schemasById[id] = schemaHandle;\n return schemaHandle;\n }\n getOrAddSchemaHandle(id, unresolvedSchemaContent) {\n return this.schemasById[id] || this.addSchemaHandle(id, unresolvedSchemaContent);\n }\n addFilePatternAssociation(pattern, folderUri, uris) {\n const fpa = new FilePatternAssociation(pattern, folderUri, uris);\n this.filePatternAssociations.push(fpa);\n return fpa;\n }\n registerExternalSchema(config) {\n const id = normalizeId(config.uri);\n this.registeredSchemasIds[id] = true;\n this.cachedSchemaForResource = void 0;\n if (config.fileMatch && config.fileMatch.length) {\n this.addFilePatternAssociation(config.fileMatch, config.folderUri, [id]);\n }\n return config.schema ? this.addSchemaHandle(id, config.schema) : this.getOrAddSchemaHandle(id);\n }\n clearExternalSchemas() {\n this.schemasById = {};\n this.filePatternAssociations = [];\n this.registeredSchemasIds = {};\n this.cachedSchemaForResource = void 0;\n for (const id in this.contributionSchemas) {\n this.schemasById[id] = this.contributionSchemas[id];\n this.registeredSchemasIds[id] = true;\n }\n for (const contributionAssociation of this.contributionAssociations) {\n this.filePatternAssociations.push(contributionAssociation);\n }\n }\n getResolvedSchema(schemaId) {\n const id = normalizeId(schemaId);\n const schemaHandle = this.schemasById[id];\n if (schemaHandle) {\n return schemaHandle.getResolvedSchema();\n }\n return this.promise.resolve(void 0);\n }\n loadSchema(url) {\n if (!this.requestService) {\n const errorMessage = t(\"Unable to load schema from '{0}'. No schema request service available\", toDisplayString(url));\n return this.promise.resolve(new UnresolvedSchema({}, [errorMessage]));\n }\n if (url.startsWith(\"http://json-schema.org/\")) {\n url = \"https\" + url.substring(4);\n }\n return this.requestService(url).then((content) => {\n if (!content) {\n const errorMessage = t(\"Unable to load schema from '{0}': No content.\", toDisplayString(url));\n return new UnresolvedSchema({}, [errorMessage]);\n }\n const errors = [];\n if (content.charCodeAt(0) === 65279) {\n errors.push(t(\"Problem reading content from '{0}': UTF-8 with BOM detected, only UTF 8 is allowed.\", toDisplayString(url)));\n content = content.trimStart();\n }\n let schemaContent = {};\n const jsonErrors = [];\n schemaContent = parse2(content, jsonErrors);\n if (jsonErrors.length) {\n errors.push(t(\"Unable to parse content from '{0}': Parse error at offset {1}.\", toDisplayString(url), jsonErrors[0].offset));\n }\n return new UnresolvedSchema(schemaContent, errors);\n }, (error) => {\n let errorMessage = error.toString();\n const errorSplit = error.toString().split(\"Error: \");\n if (errorSplit.length > 1) {\n errorMessage = errorSplit[1];\n }\n if (endsWith(errorMessage, \".\")) {\n errorMessage = errorMessage.substr(0, errorMessage.length - 1);\n }\n return new UnresolvedSchema({}, [t(\"Unable to load schema from '{0}': {1}.\", toDisplayString(url), errorMessage)]);\n });\n }\n resolveSchemaContent(schemaToResolve, handle) {\n const resolveErrors = schemaToResolve.errors.slice(0);\n const schema = schemaToResolve.schema;\n let schemaDraft = schema.$schema ? normalizeId(schema.$schema) : void 0;\n if (schemaDraft === \"http://json-schema.org/draft-03/schema\") {\n return this.promise.resolve(new ResolvedSchema({}, [t(\"Draft-03 schemas are not supported.\")], [], schemaDraft));\n }\n let usesUnsupportedFeatures = /* @__PURE__ */ new Set();\n const contextService = this.contextService;\n const findSectionByJSONPointer = (schema2, path) => {\n path = decodeURIComponent(path);\n let current = schema2;\n if (path[0] === \"/\") {\n path = path.substring(1);\n }\n path.split(\"/\").some((part) => {\n part = part.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\n current = current[part];\n return !current;\n });\n return current;\n };\n const findSchemaById = (schema2, handle2, id) => {\n if (!handle2.anchors) {\n handle2.anchors = collectAnchors(schema2);\n }\n return handle2.anchors.get(id);\n };\n const merge = (target, section) => {\n for (const key in section) {\n if (section.hasOwnProperty(key) && key !== \"id\" && key !== \"$id\") {\n target[key] = section[key];\n }\n }\n };\n const mergeRef = (target, sourceRoot, sourceHandle, refSegment) => {\n let section;\n if (refSegment === void 0 || refSegment.length === 0) {\n section = sourceRoot;\n } else if (refSegment.charAt(0) === \"/\") {\n section = findSectionByJSONPointer(sourceRoot, refSegment);\n } else {\n section = findSchemaById(sourceRoot, sourceHandle, refSegment);\n }\n if (section) {\n merge(target, section);\n } else {\n resolveErrors.push(t(\"$ref '{0}' in '{1}' can not be resolved.\", refSegment || \"\", sourceHandle.uri));\n }\n };\n const resolveExternalLink = (node, uri, refSegment, parentHandle) => {\n if (contextService && !/^[A-Za-z][A-Za-z0-9+\\-.+]*:\\/\\/.*/.test(uri)) {\n uri = contextService.resolveRelativePath(uri, parentHandle.uri);\n }\n uri = normalizeId(uri);\n const referencedHandle = this.getOrAddSchemaHandle(uri);\n return referencedHandle.getUnresolvedSchema().then((unresolvedSchema) => {\n parentHandle.dependencies.add(uri);\n if (unresolvedSchema.errors.length) {\n const loc = refSegment ? uri + \"#\" + refSegment : uri;\n resolveErrors.push(t(\"Problems loading reference '{0}': {1}\", loc, unresolvedSchema.errors[0]));\n }\n mergeRef(node, unresolvedSchema.schema, referencedHandle, refSegment);\n return resolveRefs(node, unresolvedSchema.schema, referencedHandle);\n });\n };\n const resolveRefs = (node, parentSchema, parentHandle) => {\n const openPromises = [];\n this.traverseNodes(node, (next) => {\n const seenRefs = /* @__PURE__ */ new Set();\n while (next.$ref) {\n const ref = next.$ref;\n const segments = ref.split(\"#\", 2);\n delete next.$ref;\n if (segments[0].length > 0) {\n openPromises.push(resolveExternalLink(next, segments[0], segments[1], parentHandle));\n return;\n } else {\n if (!seenRefs.has(ref)) {\n const id = segments[1];\n mergeRef(next, parentSchema, parentHandle, id);\n seenRefs.add(ref);\n }\n }\n }\n if (next.$recursiveRef) {\n usesUnsupportedFeatures.add(\"$recursiveRef\");\n }\n if (next.$dynamicRef) {\n usesUnsupportedFeatures.add(\"$dynamicRef\");\n }\n });\n return this.promise.all(openPromises);\n };\n const collectAnchors = (root) => {\n const result = /* @__PURE__ */ new Map();\n this.traverseNodes(root, (next) => {\n const id = next.$id || next.id;\n const anchor = isString(id) && id.charAt(0) === \"#\" ? id.substring(1) : next.$anchor;\n if (anchor) {\n if (result.has(anchor)) {\n resolveErrors.push(t(\"Duplicate anchor declaration: '{0}'\", anchor));\n } else {\n result.set(anchor, next);\n }\n }\n if (next.$recursiveAnchor) {\n usesUnsupportedFeatures.add(\"$recursiveAnchor\");\n }\n if (next.$dynamicAnchor) {\n usesUnsupportedFeatures.add(\"$dynamicAnchor\");\n }\n });\n return result;\n };\n return resolveRefs(schema, schema, handle).then((_) => {\n let resolveWarnings = [];\n if (usesUnsupportedFeatures.size) {\n resolveWarnings.push(t(\"The schema uses meta-schema features ({0}) that are not yet supported by the validator.\", Array.from(usesUnsupportedFeatures.keys()).join(\", \")));\n }\n return new ResolvedSchema(schema, resolveErrors, resolveWarnings, schemaDraft);\n });\n }\n traverseNodes(root, handle) {\n if (!root || typeof root !== \"object\") {\n return Promise.resolve(null);\n }\n const seen = /* @__PURE__ */ new Set();\n const collectEntries = (...entries) => {\n for (const entry of entries) {\n if (isObject(entry)) {\n toWalk.push(entry);\n }\n }\n };\n const collectMapEntries = (...maps) => {\n for (const map of maps) {\n if (isObject(map)) {\n for (const k in map) {\n const key = k;\n const entry = map[key];\n if (isObject(entry)) {\n toWalk.push(entry);\n }\n }\n }\n }\n };\n const collectArrayEntries = (...arrays) => {\n for (const array of arrays) {\n if (Array.isArray(array)) {\n for (const entry of array) {\n if (isObject(entry)) {\n toWalk.push(entry);\n }\n }\n }\n }\n };\n const collectEntryOrArrayEntries = (items) => {\n if (Array.isArray(items)) {\n for (const entry of items) {\n if (isObject(entry)) {\n toWalk.push(entry);\n }\n }\n } else if (isObject(items)) {\n toWalk.push(items);\n }\n };\n const toWalk = [root];\n let next = toWalk.pop();\n while (next) {\n if (!seen.has(next)) {\n seen.add(next);\n handle(next);\n collectEntries(next.additionalItems, next.additionalProperties, next.not, next.contains, next.propertyNames, next.if, next.then, next.else, next.unevaluatedItems, next.unevaluatedProperties);\n collectMapEntries(next.definitions, next.$defs, next.properties, next.patternProperties, next.dependencies, next.dependentSchemas);\n collectArrayEntries(next.anyOf, next.allOf, next.oneOf, next.prefixItems);\n collectEntryOrArrayEntries(next.items);\n }\n next = toWalk.pop();\n }\n }\n getSchemaFromProperty(resource, document) {\n if (document.root?.type === \"object\") {\n for (const p of document.root.properties) {\n if (p.keyNode.value === \"$schema\" && p.valueNode?.type === \"string\") {\n let schemaId = p.valueNode.value;\n if (this.contextService && !/^\\w[\\w\\d+.-]*:/.test(schemaId)) {\n schemaId = this.contextService.resolveRelativePath(schemaId, resource);\n }\n return schemaId;\n }\n }\n }\n return void 0;\n }\n getAssociatedSchemas(resource) {\n const seen = /* @__PURE__ */ Object.create(null);\n const schemas = [];\n const normalizedResource = normalizeResourceForMatching(resource);\n for (const entry of this.filePatternAssociations) {\n if (entry.matchesPattern(normalizedResource)) {\n for (const schemaId of entry.getURIs()) {\n if (!seen[schemaId]) {\n schemas.push(schemaId);\n seen[schemaId] = true;\n }\n }\n }\n }\n return schemas;\n }\n getSchemaURIsForResource(resource, document) {\n let schemeId = document && this.getSchemaFromProperty(resource, document);\n if (schemeId) {\n return [schemeId];\n }\n return this.getAssociatedSchemas(resource);\n }\n getSchemaForResource(resource, document) {\n if (document) {\n let schemeId = this.getSchemaFromProperty(resource, document);\n if (schemeId) {\n const id = normalizeId(schemeId);\n return this.getOrAddSchemaHandle(id).getResolvedSchema();\n }\n }\n if (this.cachedSchemaForResource && this.cachedSchemaForResource.resource === resource) {\n return this.cachedSchemaForResource.resolvedSchema;\n }\n const schemas = this.getAssociatedSchemas(resource);\n const resolvedSchema = schemas.length > 0 ? this.createCombinedSchema(resource, schemas).getResolvedSchema() : this.promise.resolve(void 0);\n this.cachedSchemaForResource = { resource, resolvedSchema };\n return resolvedSchema;\n }\n createCombinedSchema(resource, schemaIds) {\n if (schemaIds.length === 1) {\n return this.getOrAddSchemaHandle(schemaIds[0]);\n } else {\n const combinedSchemaId = \"schemaservice://combinedSchema/\" + encodeURIComponent(resource);\n const combinedSchema = {\n allOf: schemaIds.map((schemaId) => ({ $ref: schemaId }))\n };\n return this.addSchemaHandle(combinedSchemaId, combinedSchema);\n }\n }\n getMatchingSchemas(document, jsonDocument, schema) {\n if (schema) {\n const id = schema.id || \"schemaservice://untitled/matchingSchemas/\" + idCounter2++;\n const handle = this.addSchemaHandle(id, schema);\n return handle.getResolvedSchema().then((resolvedSchema) => {\n return jsonDocument.getMatchingSchemas(resolvedSchema.schema).filter((s) => !s.inverted);\n });\n }\n return this.getSchemaForResource(document.uri, jsonDocument).then((schema2) => {\n if (schema2) {\n return jsonDocument.getMatchingSchemas(schema2.schema).filter((s) => !s.inverted);\n }\n return [];\n });\n }\n};\nvar idCounter2 = 0;\nfunction normalizeId(id) {\n try {\n return URI2.parse(id).toString(true);\n } catch (e) {\n return id;\n }\n}\nfunction normalizeResourceForMatching(resource) {\n try {\n return URI2.parse(resource).with({ fragment: null, query: null }).toString(true);\n } catch (e) {\n return resource;\n }\n}\nfunction toDisplayString(url) {\n try {\n const uri = URI2.parse(url);\n if (uri.scheme === \"file\") {\n return uri.fsPath;\n }\n } catch (e) {\n }\n return url;\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/services/jsonFolding.js\nfunction getFoldingRanges(document, context) {\n const ranges = [];\n const nestingLevels = [];\n const stack = [];\n let prevStart = -1;\n const scanner = createScanner2(document.getText(), false);\n let token = scanner.scan();\n function addRange(range) {\n ranges.push(range);\n nestingLevels.push(stack.length);\n }\n while (token !== 17) {\n switch (token) {\n case 1:\n case 3: {\n const startLine = document.positionAt(scanner.getTokenOffset()).line;\n const range = { startLine, endLine: startLine, kind: token === 1 ? \"object\" : \"array\" };\n stack.push(range);\n break;\n }\n case 2:\n case 4: {\n const kind = token === 2 ? \"object\" : \"array\";\n if (stack.length > 0 && stack[stack.length - 1].kind === kind) {\n const range = stack.pop();\n const line = document.positionAt(scanner.getTokenOffset()).line;\n if (range && line > range.startLine + 1 && prevStart !== range.startLine) {\n range.endLine = line - 1;\n addRange(range);\n prevStart = range.startLine;\n }\n }\n break;\n }\n case 13: {\n const startLine = document.positionAt(scanner.getTokenOffset()).line;\n const endLine = document.positionAt(scanner.getTokenOffset() + scanner.getTokenLength()).line;\n if (scanner.getTokenError() === 1 && startLine + 1 < document.lineCount) {\n scanner.setPosition(document.offsetAt(Position.create(startLine + 1, 0)));\n } else {\n if (startLine < endLine) {\n addRange({ startLine, endLine, kind: FoldingRangeKind.Comment });\n prevStart = startLine;\n }\n }\n break;\n }\n case 12: {\n const text = document.getText().substr(scanner.getTokenOffset(), scanner.getTokenLength());\n const m = text.match(/^\\/\\/\\s*#(region\\b)|(endregion\\b)/);\n if (m) {\n const line = document.positionAt(scanner.getTokenOffset()).line;\n if (m[1]) {\n const range = { startLine: line, endLine: line, kind: FoldingRangeKind.Region };\n stack.push(range);\n } else {\n let i = stack.length - 1;\n while (i >= 0 && stack[i].kind !== FoldingRangeKind.Region) {\n i--;\n }\n if (i >= 0) {\n const range = stack[i];\n stack.length = i;\n if (line > range.startLine && prevStart !== range.startLine) {\n range.endLine = line;\n addRange(range);\n prevStart = range.startLine;\n }\n }\n }\n }\n break;\n }\n }\n token = scanner.scan();\n }\n const rangeLimit = context && context.rangeLimit;\n if (typeof rangeLimit !== \"number\" || ranges.length <= rangeLimit) {\n return ranges;\n }\n if (context && context.onRangeLimitExceeded) {\n context.onRangeLimitExceeded(document.uri);\n }\n const counts = [];\n for (let level of nestingLevels) {\n if (level < 30) {\n counts[level] = (counts[level] || 0) + 1;\n }\n }\n let entries = 0;\n let maxLevel = 0;\n for (let i = 0; i < counts.length; i++) {\n const n = counts[i];\n if (n) {\n if (n + entries > rangeLimit) {\n maxLevel = i;\n break;\n }\n entries += n;\n }\n }\n const result = [];\n for (let i = 0; i < ranges.length; i++) {\n const level = nestingLevels[i];\n if (typeof level === \"number\") {\n if (level < maxLevel || level === maxLevel && entries++ < rangeLimit) {\n result.push(ranges[i]);\n }\n }\n }\n return result;\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/services/jsonSelectionRanges.js\nfunction getSelectionRanges(document, positions, doc) {\n function getSelectionRange(position) {\n let offset = document.offsetAt(position);\n let node = doc.getNodeFromOffset(offset, true);\n const result = [];\n while (node) {\n switch (node.type) {\n case \"string\":\n case \"object\":\n case \"array\":\n const cStart = node.offset + 1, cEnd = node.offset + node.length - 1;\n if (cStart < cEnd && offset >= cStart && offset <= cEnd) {\n result.push(newRange(cStart, cEnd));\n }\n result.push(newRange(node.offset, node.offset + node.length));\n break;\n case \"number\":\n case \"boolean\":\n case \"null\":\n case \"property\":\n result.push(newRange(node.offset, node.offset + node.length));\n break;\n }\n if (node.type === \"property\" || node.parent && node.parent.type === \"array\") {\n const afterCommaOffset = getOffsetAfterNextToken(\n node.offset + node.length,\n 5\n /* SyntaxKind.CommaToken */\n );\n if (afterCommaOffset !== -1) {\n result.push(newRange(node.offset, afterCommaOffset));\n }\n }\n node = node.parent;\n }\n let current = void 0;\n for (let index = result.length - 1; index >= 0; index--) {\n current = SelectionRange.create(result[index], current);\n }\n if (!current) {\n current = SelectionRange.create(Range.create(position, position));\n }\n return current;\n }\n function newRange(start, end) {\n return Range.create(document.positionAt(start), document.positionAt(end));\n }\n const scanner = createScanner2(document.getText(), true);\n function getOffsetAfterNextToken(offset, expectedToken) {\n scanner.setPosition(offset);\n let token = scanner.scan();\n if (token === expectedToken) {\n return scanner.getTokenOffset() + scanner.getTokenLength();\n }\n return -1;\n }\n return positions.map(getSelectionRange);\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/utils/format.js\nfunction format4(documentToFormat, formattingOptions, formattingRange) {\n let range = void 0;\n if (formattingRange) {\n const offset = documentToFormat.offsetAt(formattingRange.start);\n const length = documentToFormat.offsetAt(formattingRange.end) - offset;\n range = { offset, length };\n }\n const options = {\n tabSize: formattingOptions ? formattingOptions.tabSize : 4,\n insertSpaces: formattingOptions?.insertSpaces === true,\n insertFinalNewline: formattingOptions?.insertFinalNewline === true,\n eol: \"\\n\",\n keepLines: formattingOptions?.keepLines === true\n };\n return format2(documentToFormat.getText(), range, options).map((edit) => {\n return TextEdit.replace(Range.create(documentToFormat.positionAt(edit.offset), documentToFormat.positionAt(edit.offset + edit.length)), edit.content);\n });\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/utils/propertyTree.js\nvar Container;\n(function(Container2) {\n Container2[Container2[\"Object\"] = 0] = \"Object\";\n Container2[Container2[\"Array\"] = 1] = \"Array\";\n})(Container || (Container = {}));\nvar PropertyTree = class {\n constructor(propertyName, beginningLineNumber) {\n this.propertyName = propertyName ?? \"\";\n this.beginningLineNumber = beginningLineNumber;\n this.childrenProperties = [];\n this.lastProperty = false;\n this.noKeyName = false;\n }\n addChildProperty(childProperty) {\n childProperty.parent = this;\n if (this.childrenProperties.length > 0) {\n let insertionIndex = 0;\n if (childProperty.noKeyName) {\n insertionIndex = this.childrenProperties.length;\n } else {\n insertionIndex = binarySearchOnPropertyArray(this.childrenProperties, childProperty, compareProperties);\n }\n if (insertionIndex < 0) {\n insertionIndex = insertionIndex * -1 - 1;\n }\n this.childrenProperties.splice(insertionIndex, 0, childProperty);\n } else {\n this.childrenProperties.push(childProperty);\n }\n return childProperty;\n }\n};\nfunction compareProperties(propertyTree1, propertyTree2) {\n const propertyName1 = propertyTree1.propertyName.toLowerCase();\n const propertyName2 = propertyTree2.propertyName.toLowerCase();\n if (propertyName1 < propertyName2) {\n return -1;\n } else if (propertyName1 > propertyName2) {\n return 1;\n }\n return 0;\n}\nfunction binarySearchOnPropertyArray(propertyTreeArray, propertyTree, compare_fn) {\n const propertyName = propertyTree.propertyName.toLowerCase();\n const firstPropertyInArrayName = propertyTreeArray[0].propertyName.toLowerCase();\n const lastPropertyInArrayName = propertyTreeArray[propertyTreeArray.length - 1].propertyName.toLowerCase();\n if (propertyName < firstPropertyInArrayName) {\n return 0;\n }\n if (propertyName > lastPropertyInArrayName) {\n return propertyTreeArray.length;\n }\n let m = 0;\n let n = propertyTreeArray.length - 1;\n while (m <= n) {\n let k = n + m >> 1;\n let cmp = compare_fn(propertyTree, propertyTreeArray[k]);\n if (cmp > 0) {\n m = k + 1;\n } else if (cmp < 0) {\n n = k - 1;\n } else {\n return k;\n }\n }\n return -m - 1;\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/utils/sort.js\nfunction sort(documentToSort, formattingOptions) {\n const options = {\n ...formattingOptions,\n keepLines: false\n // keepLines must be false so that the properties are on separate lines for the sorting\n };\n const formattedJsonString = TextDocument2.applyEdits(documentToSort, format4(documentToSort, options, void 0));\n const formattedJsonDocument = TextDocument2.create(\"test://test.json\", \"json\", 0, formattedJsonString);\n const jsonPropertyTree = findJsoncPropertyTree(formattedJsonDocument);\n const sortedJsonDocument = sortJsoncDocument(formattedJsonDocument, jsonPropertyTree);\n const edits = format4(sortedJsonDocument, options, void 0);\n const sortedAndFormattedJsonDocument = TextDocument2.applyEdits(sortedJsonDocument, edits);\n return [TextEdit.replace(Range.create(Position.create(0, 0), documentToSort.positionAt(documentToSort.getText().length)), sortedAndFormattedJsonDocument)];\n}\nfunction findJsoncPropertyTree(formattedDocument) {\n const formattedString = formattedDocument.getText();\n const scanner = createScanner2(formattedString, false);\n let rootTree = new PropertyTree();\n let currentTree = rootTree;\n let currentProperty = rootTree;\n let lastProperty = rootTree;\n let token = void 0;\n let lastTokenLine = 0;\n let numberOfCharactersOnPreviousLines = 0;\n let lastNonTriviaNonCommentToken = void 0;\n let secondToLastNonTriviaNonCommentToken = void 0;\n let lineOfLastNonTriviaNonCommentToken = -1;\n let endIndexOfLastNonTriviaNonCommentToken = -1;\n let beginningLineNumber = 0;\n let endLineNumber = 0;\n let currentContainerStack = [];\n let updateLastPropertyEndLineNumber = false;\n let updateBeginningLineNumber = false;\n while ((token = scanner.scan()) !== 17) {\n if (updateLastPropertyEndLineNumber === true && token !== 14 && token !== 15 && token !== 12 && token !== 13 && currentProperty.endLineNumber === void 0) {\n let endLineNumber2 = scanner.getTokenStartLine();\n if (secondToLastNonTriviaNonCommentToken === 2 || secondToLastNonTriviaNonCommentToken === 4) {\n lastProperty.endLineNumber = endLineNumber2 - 1;\n } else {\n currentProperty.endLineNumber = endLineNumber2 - 1;\n }\n beginningLineNumber = endLineNumber2;\n updateLastPropertyEndLineNumber = false;\n }\n if (updateBeginningLineNumber === true && token !== 14 && token !== 15 && token !== 12 && token !== 13) {\n beginningLineNumber = scanner.getTokenStartLine();\n updateBeginningLineNumber = false;\n }\n if (scanner.getTokenStartLine() !== lastTokenLine) {\n for (let i = lastTokenLine; i < scanner.getTokenStartLine(); i++) {\n const lengthOfLine = formattedDocument.getText(Range.create(Position.create(i, 0), Position.create(i + 1, 0))).length;\n numberOfCharactersOnPreviousLines = numberOfCharactersOnPreviousLines + lengthOfLine;\n }\n lastTokenLine = scanner.getTokenStartLine();\n }\n switch (token) {\n case 10: {\n if (lastNonTriviaNonCommentToken === void 0 || lastNonTriviaNonCommentToken === 1 || lastNonTriviaNonCommentToken === 5 && currentContainerStack[currentContainerStack.length - 1] === Container.Object) {\n const childProperty = new PropertyTree(scanner.getTokenValue(), beginningLineNumber);\n lastProperty = currentProperty;\n currentProperty = currentTree.addChildProperty(childProperty);\n }\n break;\n }\n case 3: {\n if (rootTree.beginningLineNumber === void 0) {\n rootTree.beginningLineNumber = scanner.getTokenStartLine();\n }\n if (currentContainerStack[currentContainerStack.length - 1] === Container.Object) {\n currentTree = currentProperty;\n } else if (currentContainerStack[currentContainerStack.length - 1] === Container.Array) {\n const childProperty = new PropertyTree(scanner.getTokenValue(), beginningLineNumber);\n childProperty.noKeyName = true;\n lastProperty = currentProperty;\n currentProperty = currentTree.addChildProperty(childProperty);\n currentTree = currentProperty;\n }\n currentContainerStack.push(Container.Array);\n currentProperty.type = Container.Array;\n beginningLineNumber = scanner.getTokenStartLine();\n beginningLineNumber++;\n break;\n }\n case 1: {\n if (rootTree.beginningLineNumber === void 0) {\n rootTree.beginningLineNumber = scanner.getTokenStartLine();\n } else if (currentContainerStack[currentContainerStack.length - 1] === Container.Array) {\n const childProperty = new PropertyTree(scanner.getTokenValue(), beginningLineNumber);\n childProperty.noKeyName = true;\n lastProperty = currentProperty;\n currentProperty = currentTree.addChildProperty(childProperty);\n }\n currentProperty.type = Container.Object;\n currentContainerStack.push(Container.Object);\n currentTree = currentProperty;\n beginningLineNumber = scanner.getTokenStartLine();\n beginningLineNumber++;\n break;\n }\n case 4: {\n endLineNumber = scanner.getTokenStartLine();\n currentContainerStack.pop();\n if (currentProperty.endLineNumber === void 0 && (lastNonTriviaNonCommentToken === 2 || lastNonTriviaNonCommentToken === 4)) {\n currentProperty.endLineNumber = endLineNumber - 1;\n currentProperty.lastProperty = true;\n currentProperty.lineWhereToAddComma = lineOfLastNonTriviaNonCommentToken;\n currentProperty.indexWhereToAddComa = endIndexOfLastNonTriviaNonCommentToken;\n lastProperty = currentProperty;\n currentProperty = currentProperty ? currentProperty.parent : void 0;\n currentTree = currentProperty;\n }\n rootTree.endLineNumber = endLineNumber;\n beginningLineNumber = endLineNumber + 1;\n break;\n }\n case 2: {\n endLineNumber = scanner.getTokenStartLine();\n currentContainerStack.pop();\n if (lastNonTriviaNonCommentToken !== 1) {\n if (currentProperty.endLineNumber === void 0) {\n currentProperty.endLineNumber = endLineNumber - 1;\n currentProperty.lastProperty = true;\n currentProperty.lineWhereToAddComma = lineOfLastNonTriviaNonCommentToken;\n currentProperty.indexWhereToAddComa = endIndexOfLastNonTriviaNonCommentToken;\n }\n lastProperty = currentProperty;\n currentProperty = currentProperty ? currentProperty.parent : void 0;\n currentTree = currentProperty;\n }\n rootTree.endLineNumber = scanner.getTokenStartLine();\n beginningLineNumber = endLineNumber + 1;\n break;\n }\n case 5: {\n endLineNumber = scanner.getTokenStartLine();\n if (currentProperty.endLineNumber === void 0 && (currentContainerStack[currentContainerStack.length - 1] === Container.Object || currentContainerStack[currentContainerStack.length - 1] === Container.Array && (lastNonTriviaNonCommentToken === 2 || lastNonTriviaNonCommentToken === 4))) {\n currentProperty.endLineNumber = endLineNumber;\n currentProperty.commaIndex = scanner.getTokenOffset() - numberOfCharactersOnPreviousLines;\n currentProperty.commaLine = endLineNumber;\n }\n if (lastNonTriviaNonCommentToken === 2 || lastNonTriviaNonCommentToken === 4) {\n lastProperty = currentProperty;\n currentProperty = currentProperty ? currentProperty.parent : void 0;\n currentTree = currentProperty;\n }\n beginningLineNumber = endLineNumber + 1;\n break;\n }\n case 13: {\n if (lastNonTriviaNonCommentToken === 5 && lineOfLastNonTriviaNonCommentToken === scanner.getTokenStartLine() && (currentContainerStack[currentContainerStack.length - 1] === Container.Array && (secondToLastNonTriviaNonCommentToken === 2 || secondToLastNonTriviaNonCommentToken === 4) || currentContainerStack[currentContainerStack.length - 1] === Container.Object)) {\n if (currentContainerStack[currentContainerStack.length - 1] === Container.Array && (secondToLastNonTriviaNonCommentToken === 2 || secondToLastNonTriviaNonCommentToken === 4) || currentContainerStack[currentContainerStack.length - 1] === Container.Object) {\n currentProperty.endLineNumber = void 0;\n updateLastPropertyEndLineNumber = true;\n }\n }\n if ((lastNonTriviaNonCommentToken === 1 || lastNonTriviaNonCommentToken === 3) && lineOfLastNonTriviaNonCommentToken === scanner.getTokenStartLine()) {\n updateBeginningLineNumber = true;\n }\n break;\n }\n }\n if (token !== 14 && token !== 13 && token !== 12 && token !== 15) {\n secondToLastNonTriviaNonCommentToken = lastNonTriviaNonCommentToken;\n lastNonTriviaNonCommentToken = token;\n lineOfLastNonTriviaNonCommentToken = scanner.getTokenStartLine();\n endIndexOfLastNonTriviaNonCommentToken = scanner.getTokenOffset() + scanner.getTokenLength() - numberOfCharactersOnPreviousLines;\n }\n }\n return rootTree;\n}\nfunction sortJsoncDocument(jsonDocument, propertyTree) {\n if (propertyTree.childrenProperties.length === 0) {\n return jsonDocument;\n }\n const sortedJsonDocument = TextDocument2.create(\"test://test.json\", \"json\", 0, jsonDocument.getText());\n const queueToSort = [];\n updateSortingQueue(queueToSort, propertyTree, propertyTree.beginningLineNumber);\n while (queueToSort.length > 0) {\n const dataToSort = queueToSort.shift();\n const propertyTreeArray = dataToSort.propertyTreeArray;\n let beginningLineNumber = dataToSort.beginningLineNumber;\n for (let i = 0; i < propertyTreeArray.length; i++) {\n const propertyTree2 = propertyTreeArray[i];\n const range = Range.create(Position.create(propertyTree2.beginningLineNumber, 0), Position.create(propertyTree2.endLineNumber + 1, 0));\n const jsonContentToReplace = jsonDocument.getText(range);\n const jsonDocumentToReplace = TextDocument2.create(\"test://test.json\", \"json\", 0, jsonContentToReplace);\n if (propertyTree2.lastProperty === true && i !== propertyTreeArray.length - 1) {\n const lineWhereToAddComma = propertyTree2.lineWhereToAddComma - propertyTree2.beginningLineNumber;\n const indexWhereToAddComma = propertyTree2.indexWhereToAddComa;\n const edit2 = {\n range: Range.create(Position.create(lineWhereToAddComma, indexWhereToAddComma), Position.create(lineWhereToAddComma, indexWhereToAddComma)),\n text: \",\"\n };\n TextDocument2.update(jsonDocumentToReplace, [edit2], 1);\n } else if (propertyTree2.lastProperty === false && i === propertyTreeArray.length - 1) {\n const commaIndex = propertyTree2.commaIndex;\n const commaLine = propertyTree2.commaLine;\n const lineWhereToRemoveComma = commaLine - propertyTree2.beginningLineNumber;\n const edit2 = {\n range: Range.create(Position.create(lineWhereToRemoveComma, commaIndex), Position.create(lineWhereToRemoveComma, commaIndex + 1)),\n text: \"\"\n };\n TextDocument2.update(jsonDocumentToReplace, [edit2], 1);\n }\n const length = propertyTree2.endLineNumber - propertyTree2.beginningLineNumber + 1;\n const edit = {\n range: Range.create(Position.create(beginningLineNumber, 0), Position.create(beginningLineNumber + length, 0)),\n text: jsonDocumentToReplace.getText()\n };\n TextDocument2.update(sortedJsonDocument, [edit], 1);\n updateSortingQueue(queueToSort, propertyTree2, beginningLineNumber);\n beginningLineNumber = beginningLineNumber + length;\n }\n }\n return sortedJsonDocument;\n}\nfunction updateSortingQueue(queue, propertyTree, beginningLineNumber) {\n if (propertyTree.childrenProperties.length === 0) {\n return;\n }\n if (propertyTree.type === Container.Object) {\n let minimumBeginningLineNumber = Infinity;\n for (const childProperty of propertyTree.childrenProperties) {\n if (childProperty.beginningLineNumber < minimumBeginningLineNumber) {\n minimumBeginningLineNumber = childProperty.beginningLineNumber;\n }\n }\n const diff = minimumBeginningLineNumber - propertyTree.beginningLineNumber;\n beginningLineNumber = beginningLineNumber + diff;\n queue.push(new SortingRange(beginningLineNumber, propertyTree.childrenProperties));\n } else if (propertyTree.type === Container.Array) {\n updateSortingQueueForArrayProperties(queue, propertyTree, beginningLineNumber);\n }\n}\nfunction updateSortingQueueForArrayProperties(queue, propertyTree, beginningLineNumber) {\n for (const subObject of propertyTree.childrenProperties) {\n if (subObject.type === Container.Object) {\n let minimumBeginningLineNumber = Infinity;\n for (const childProperty of subObject.childrenProperties) {\n if (childProperty.beginningLineNumber < minimumBeginningLineNumber) {\n minimumBeginningLineNumber = childProperty.beginningLineNumber;\n }\n }\n const diff = minimumBeginningLineNumber - subObject.beginningLineNumber;\n queue.push(new SortingRange(beginningLineNumber + subObject.beginningLineNumber - propertyTree.beginningLineNumber + diff, subObject.childrenProperties));\n }\n if (subObject.type === Container.Array) {\n updateSortingQueueForArrayProperties(queue, subObject, beginningLineNumber + subObject.beginningLineNumber - propertyTree.beginningLineNumber);\n }\n }\n}\nvar SortingRange = class {\n constructor(beginningLineNumber, propertyTreeArray) {\n this.beginningLineNumber = beginningLineNumber;\n this.propertyTreeArray = propertyTreeArray;\n }\n};\n\n// node_modules/vscode-json-languageservice/lib/esm/services/jsonLinks.js\nfunction findLinks(document, doc) {\n const links = [];\n doc.visit((node) => {\n if (node.type === \"property\" && node.keyNode.value === \"$ref\" && node.valueNode?.type === \"string\") {\n const path = node.valueNode.value;\n const targetNode = findTargetNode(doc, path);\n if (targetNode) {\n const targetPos = document.positionAt(targetNode.offset);\n links.push({\n target: `${document.uri}#${targetPos.line + 1},${targetPos.character + 1}`,\n range: createRange(document, node.valueNode)\n });\n }\n }\n return true;\n });\n return Promise.resolve(links);\n}\nfunction createRange(document, node) {\n return Range.create(document.positionAt(node.offset + 1), document.positionAt(node.offset + node.length - 1));\n}\nfunction findTargetNode(doc, path) {\n const tokens = parseJSONPointer(path);\n if (!tokens) {\n return null;\n }\n return findNode(tokens, doc.root);\n}\nfunction findNode(pointer, node) {\n if (!node) {\n return null;\n }\n if (pointer.length === 0) {\n return node;\n }\n const token = pointer.shift();\n if (node && node.type === \"object\") {\n const propertyNode = node.properties.find((propertyNode2) => propertyNode2.keyNode.value === token);\n if (!propertyNode) {\n return null;\n }\n return findNode(pointer, propertyNode.valueNode);\n } else if (node && node.type === \"array\") {\n if (token.match(/^(0|[1-9][0-9]*)$/)) {\n const index = Number.parseInt(token);\n const arrayItem = node.items[index];\n if (!arrayItem) {\n return null;\n }\n return findNode(pointer, arrayItem);\n }\n }\n return null;\n}\nfunction parseJSONPointer(path) {\n if (path === \"#\") {\n return [];\n }\n if (path[0] !== \"#\" || path[1] !== \"/\") {\n return null;\n }\n return path.substring(2).split(/\\//).map(unescape);\n}\nfunction unescape(str) {\n return str.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/jsonLanguageService.js\nfunction getLanguageService(params) {\n const promise = params.promiseConstructor || Promise;\n const jsonSchemaService = new JSONSchemaService(params.schemaRequestService, params.workspaceContext, promise);\n jsonSchemaService.setSchemaContributions(schemaContributions);\n const jsonCompletion = new JSONCompletion(jsonSchemaService, params.contributions, promise, params.clientCapabilities);\n const jsonHover = new JSONHover(jsonSchemaService, params.contributions, promise);\n const jsonDocumentSymbols = new JSONDocumentSymbols(jsonSchemaService);\n const jsonValidation = new JSONValidation(jsonSchemaService, promise);\n return {\n configure: (settings) => {\n jsonSchemaService.clearExternalSchemas();\n settings.schemas?.forEach(jsonSchemaService.registerExternalSchema.bind(jsonSchemaService));\n jsonValidation.configure(settings);\n },\n resetSchema: (uri) => jsonSchemaService.onResourceChange(uri),\n doValidation: jsonValidation.doValidation.bind(jsonValidation),\n getLanguageStatus: jsonValidation.getLanguageStatus.bind(jsonValidation),\n parseJSONDocument: (document) => parse3(document, { collectComments: true }),\n newJSONDocument: (root, diagnostics) => newJSONDocument(root, diagnostics),\n getMatchingSchemas: jsonSchemaService.getMatchingSchemas.bind(jsonSchemaService),\n doResolve: jsonCompletion.doResolve.bind(jsonCompletion),\n doComplete: jsonCompletion.doComplete.bind(jsonCompletion),\n findDocumentSymbols: jsonDocumentSymbols.findDocumentSymbols.bind(jsonDocumentSymbols),\n findDocumentSymbols2: jsonDocumentSymbols.findDocumentSymbols2.bind(jsonDocumentSymbols),\n findDocumentColors: jsonDocumentSymbols.findDocumentColors.bind(jsonDocumentSymbols),\n getColorPresentations: jsonDocumentSymbols.getColorPresentations.bind(jsonDocumentSymbols),\n doHover: jsonHover.doHover.bind(jsonHover),\n getFoldingRanges,\n getSelectionRanges,\n findDefinition: () => Promise.resolve([]),\n findLinks,\n format: (document, range, options) => format4(document, options, range),\n sort: (document, options) => sort(document, options)\n };\n}\n\n// src/language/json/jsonWorker.ts\nvar defaultSchemaRequestService;\nif (typeof fetch !== \"undefined\") {\n defaultSchemaRequestService = function(url) {\n return fetch(url).then((response) => response.text());\n };\n}\nvar JSONWorker = class {\n constructor(ctx, createData) {\n this._ctx = ctx;\n this._languageSettings = createData.languageSettings;\n this._languageId = createData.languageId;\n this._languageService = getLanguageService({\n workspaceContext: {\n resolveRelativePath: (relativePath, resource) => {\n const base = resource.substr(0, resource.lastIndexOf(\"/\") + 1);\n return resolvePath(base, relativePath);\n }\n },\n schemaRequestService: createData.enableSchemaRequest ? defaultSchemaRequestService : void 0,\n clientCapabilities: ClientCapabilities.LATEST\n });\n this._languageService.configure(this._languageSettings);\n }\n async doValidation(uri) {\n let document = this._getTextDocument(uri);\n if (document) {\n let jsonDocument = this._languageService.parseJSONDocument(document);\n return this._languageService.doValidation(document, jsonDocument, this._languageSettings);\n }\n return Promise.resolve([]);\n }\n async doComplete(uri, position) {\n let document = this._getTextDocument(uri);\n if (!document) {\n return null;\n }\n let jsonDocument = this._languageService.parseJSONDocument(document);\n return this._languageService.doComplete(document, position, jsonDocument);\n }\n async doResolve(item) {\n return this._languageService.doResolve(item);\n }\n async doHover(uri, position) {\n let document = this._getTextDocument(uri);\n if (!document) {\n return null;\n }\n let jsonDocument = this._languageService.parseJSONDocument(document);\n return this._languageService.doHover(document, position, jsonDocument);\n }\n async format(uri, range, options) {\n let document = this._getTextDocument(uri);\n if (!document) {\n return [];\n }\n let textEdits = this._languageService.format(document, range, options);\n return Promise.resolve(textEdits);\n }\n async resetSchema(uri) {\n return Promise.resolve(this._languageService.resetSchema(uri));\n }\n async findDocumentSymbols(uri) {\n let document = this._getTextDocument(uri);\n if (!document) {\n return [];\n }\n let jsonDocument = this._languageService.parseJSONDocument(document);\n let symbols = this._languageService.findDocumentSymbols2(document, jsonDocument);\n return Promise.resolve(symbols);\n }\n async findDocumentColors(uri) {\n let document = this._getTextDocument(uri);\n if (!document) {\n return [];\n }\n let jsonDocument = this._languageService.parseJSONDocument(document);\n let colorSymbols = this._languageService.findDocumentColors(document, jsonDocument);\n return Promise.resolve(colorSymbols);\n }\n async getColorPresentations(uri, color, range) {\n let document = this._getTextDocument(uri);\n if (!document) {\n return [];\n }\n let jsonDocument = this._languageService.parseJSONDocument(document);\n let colorPresentations = this._languageService.getColorPresentations(\n document,\n jsonDocument,\n color,\n range\n );\n return Promise.resolve(colorPresentations);\n }\n async getFoldingRanges(uri, context) {\n let document = this._getTextDocument(uri);\n if (!document) {\n return [];\n }\n let ranges = this._languageService.getFoldingRanges(document, context);\n return Promise.resolve(ranges);\n }\n async getSelectionRanges(uri, positions) {\n let document = this._getTextDocument(uri);\n if (!document) {\n return [];\n }\n let jsonDocument = this._languageService.parseJSONDocument(document);\n let ranges = this._languageService.getSelectionRanges(document, positions, jsonDocument);\n return Promise.resolve(ranges);\n }\n async parseJSONDocument(uri) {\n let document = this._getTextDocument(uri);\n if (!document) {\n return null;\n }\n let jsonDocument = this._languageService.parseJSONDocument(document);\n return Promise.resolve(jsonDocument);\n }\n async getMatchingSchemas(uri) {\n let document = this._getTextDocument(uri);\n if (!document) {\n return [];\n }\n let jsonDocument = this._languageService.parseJSONDocument(document);\n return Promise.resolve(this._languageService.getMatchingSchemas(document, jsonDocument));\n }\n _getTextDocument(uri) {\n let models = this._ctx.getMirrorModels();\n for (let model of models) {\n if (model.uri.toString() === uri) {\n return TextDocument2.create(\n uri,\n this._languageId,\n model.version,\n model.getValue()\n );\n }\n }\n return null;\n }\n};\nvar Slash = \"/\".charCodeAt(0);\nvar Dot = \".\".charCodeAt(0);\nfunction isAbsolutePath(path) {\n return path.charCodeAt(0) === Slash;\n}\nfunction resolvePath(uriString, path) {\n if (isAbsolutePath(path)) {\n const uri = URI2.parse(uriString);\n const parts = path.split(\"/\");\n return uri.with({ path: normalizePath(parts) }).toString();\n }\n return joinPath(uriString, path);\n}\nfunction normalizePath(parts) {\n const newParts = [];\n for (const part of parts) {\n if (part.length === 0 || part.length === 1 && part.charCodeAt(0) === Dot) {\n } else if (part.length === 2 && part.charCodeAt(0) === Dot && part.charCodeAt(1) === Dot) {\n newParts.pop();\n } else {\n newParts.push(part);\n }\n }\n if (parts.length > 1 && parts[parts.length - 1].length === 0) {\n newParts.push(\"\");\n }\n let res = newParts.join(\"/\");\n if (parts[0].length === 0) {\n res = \"/\" + res;\n }\n return res;\n}\nfunction joinPath(uriString, ...paths) {\n const uri = URI2.parse(uriString);\n const parts = uri.path.split(\"/\");\n for (let path of paths) {\n parts.push(...path.split(\"/\"));\n }\n return uri.with({ path: normalizePath(parts) }).toString();\n}\n\n// src/language/json/json.worker.ts\nself.onmessage = () => {\n worker.initialize((ctx, createData) => {\n return new JSONWorker(ctx, createData);\n });\n};\n";
|
|
8
|
+
const graphqlWorker = "import { initialize } from 'monaco-editor/esm/vs/editor/editor.worker';\nimport { GraphQLWorker } from './GraphQLWorker';\nglobalThis.onmessage = () => {\n initialize((ctx, createData) => new GraphQLWorker(ctx, createData));\n};\n//# sourceMappingURL=graphql.worker.js.map";
|
|
9
|
+
|
|
10
|
+
//#endregion
|
|
11
|
+
exports.css = css;
|
|
12
|
+
exports.editorWorkerService = editorWorkerService;
|
|
13
|
+
exports.favicon = favicon;
|
|
14
|
+
exports.graphqlWorker = graphqlWorker;
|
|
15
|
+
exports.js = js;
|
|
16
|
+
exports.jsonWorker = jsonWorker;
|