vite-plugin-react-server 1.4.2 → 1.4.4

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.
Files changed (74) hide show
  1. package/README.md +48 -313
  2. package/dist/package.json +123 -13
  3. package/dist/plugin/bundle/deferredStaticGeneration.js +14 -39
  4. package/dist/plugin/bundle/manifests.js +30 -48
  5. package/dist/plugin/config/autoDiscover/resolveAutoDiscover.d.ts.map +1 -1
  6. package/dist/plugin/config/autoDiscover/resolveAutoDiscover.js +4 -1
  7. package/dist/plugin/config/envPrefixFromConfig.js +12 -7
  8. package/dist/plugin/config/getCondition.d.ts.map +1 -1
  9. package/dist/plugin/config/getCondition.js +7 -5
  10. package/dist/plugin/dev-server/virtualRscHmrPlugin.js +23 -23
  11. package/dist/plugin/environments/createBuildEventPlugin.js +88 -98
  12. package/dist/plugin/environments/createEnvironmentPlugin.js +222 -250
  13. package/dist/plugin/helpers/createRscRenderHelpers.js +33 -34
  14. package/dist/plugin/helpers/createSharedLoader.d.ts.map +1 -1
  15. package/dist/plugin/helpers/createSharedLoader.js +4 -2
  16. package/dist/plugin/helpers/headlessStreamReuseHandler.js +30 -22
  17. package/dist/plugin/helpers/headlessStreamState.js +15 -28
  18. package/dist/plugin/helpers/resolveComponent.d.ts.map +1 -1
  19. package/dist/plugin/helpers/resolveComponent.js +4 -2
  20. package/dist/plugin/index.client.d.ts +5 -0
  21. package/dist/plugin/index.client.d.ts.map +1 -0
  22. package/dist/plugin/index.client.js +4 -0
  23. package/dist/plugin/index.d.ts +4 -3
  24. package/dist/plugin/index.d.ts.map +1 -1
  25. package/dist/plugin/index.js +10 -5
  26. package/dist/plugin/index.server.d.ts +5 -0
  27. package/dist/plugin/index.server.d.ts.map +1 -0
  28. package/dist/plugin/index.server.js +4 -0
  29. package/dist/plugin/metrics/createWorkerStartupMetrics.js +31 -13
  30. package/dist/plugin/orchestrator/createPluginOrchestrator.client.js +41 -38
  31. package/dist/plugin/orchestrator/createPluginOrchestrator.server.js +43 -46
  32. package/dist/plugin/plugin.client.js +2 -2
  33. package/dist/plugin/plugin.server.js +2 -2
  34. package/dist/plugin/react-static/createBuildLoader.client.js +12 -6
  35. package/dist/plugin/react-static/createBuildLoader.server.js +255 -235
  36. package/dist/plugin/react-static/plugin.client.js +684 -770
  37. package/dist/plugin/react-static/plugin.server.js +517 -603
  38. package/dist/plugin/react-static/processCssFilesForPages.js +103 -88
  39. package/dist/plugin/react-static/renderPage.client.js +455 -529
  40. package/dist/plugin/react-static/renderPage.server.js +485 -508
  41. package/dist/plugin/react-static/renderPagesBatched.js +277 -275
  42. package/dist/plugin/react-static/rscToHtmlStream.client.js +48 -29
  43. package/dist/plugin/react-static/rscToHtmlStream.server.js +62 -37
  44. package/dist/plugin/react-static/temporaryReferences.server.js +11 -2
  45. package/dist/plugin/stream/createMainThreadHandlers.js +40 -31
  46. package/dist/plugin/stream/renderRscStream.server.d.ts.map +1 -1
  47. package/dist/plugin/stream/renderRscStream.server.js +127 -144
  48. package/dist/plugin/transformer/createTransformerPlugin.js +226 -265
  49. package/dist/plugin/utils/checkReactVersion.d.ts +7 -0
  50. package/dist/plugin/utils/checkReactVersion.d.ts.map +1 -0
  51. package/dist/plugin/utils/checkReactVersion.js +23 -0
  52. package/dist/plugin/utils/envUrls.node.js +12 -11
  53. package/dist/plugin/vendor/vendor-alias.js +84 -114
  54. package/dist/plugin/vendor/vendor.client.d.ts.map +1 -1
  55. package/dist/plugin/vendor/vendor.client.js +1 -3
  56. package/dist/plugin/worker/rsc/handleRscRender.d.ts.map +1 -1
  57. package/dist/plugin/worker/rsc/handleRscRender.js +3 -1
  58. package/dist/tsconfig.tsbuildinfo +1 -1
  59. package/package.json +123 -13
  60. package/plugin/config/autoDiscover/resolveAutoDiscover.ts +4 -0
  61. package/plugin/config/getCondition.ts +6 -4
  62. package/plugin/helpers/createRscRenderHelpers.ts +1 -1
  63. package/plugin/helpers/createSharedLoader.ts +6 -1
  64. package/plugin/helpers/resolveComponent.ts +6 -1
  65. package/plugin/index.client.ts +4 -0
  66. package/plugin/index.server.ts +4 -0
  67. package/plugin/index.ts +12 -5
  68. package/plugin/plugin.client.ts +1 -1
  69. package/plugin/plugin.server.ts +1 -1
  70. package/plugin/stream/renderRscStream.server.ts +3 -0
  71. package/plugin/utils/checkReactVersion.ts +28 -0
  72. package/plugin/vendor/vendor.client.ts +0 -2
  73. package/plugin/worker/rsc/handleRscRender.ts +2 -0
  74. package/scripts/generate-toc.mjs +27 -294
@@ -1,11 +1,12 @@
1
- import { createAbsoluteURL, createBaseURL, createPageURL } from "./urls.js";
2
- import { getEnvValue } from "../env/getEnvKey.js";
3
- export const absoluteURL = (path) => createAbsoluteURL(getEnvValue("BASE_URL") ?? "/", getEnvValue("PUBLIC_ORIGIN") ?? "")(path);
4
- export const baseURL = (path) => createBaseURL(getEnvValue("BASE_URL") ?? "/")(path);
5
- export const pageURL = (path) => {
6
- const devValue = getEnvValue("DEV");
7
- const isDev = typeof devValue === "string"
8
- ? devValue === "true" || devValue === "1"
9
- : process.env["NODE_ENV"] === "development";
10
- return createPageURL(getEnvValue("BASE_URL") ?? "/", getEnvValue("PUBLIC_ORIGIN") ?? "", isDev)(path);
11
- };
1
+ /**
2
+ * vite-plugin-react-server
3
+ * Copyright (c) Nico Brinkkemper
4
+ * MIT License
5
+ */
6
+ import { createBaseURL } from './urls.js';
7
+ import { getEnvValue } from '../env/getEnvKey.js';
8
+
9
+ const baseURL = (path) => createBaseURL(getEnvValue("BASE_URL") ?? "/")(path);
10
+
11
+ export { baseURL };
12
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52VXJscy5ub2RlLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9wbHVnaW4vdXRpbHMvZW52VXJscy5ub2RlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUFic29sdXRlVVJMLCBjcmVhdGVCYXNlVVJMLCBjcmVhdGVQYWdlVVJMIH0gZnJvbSBcIi4vdXJscy5qc1wiO1xuaW1wb3J0IHsgZ2V0RW52VmFsdWUgfSBmcm9tIFwiLi4vZW52L2dldEVudktleS5qc1wiO1xuXG5leHBvcnQgY29uc3QgYWJzb2x1dGVVUkwgPSAocGF0aDogc3RyaW5nKSA9PlxuICBjcmVhdGVBYnNvbHV0ZVVSTChcbiAgICBnZXRFbnZWYWx1ZShcIkJBU0VfVVJMXCIpID8/IFwiL1wiLFxuICAgIGdldEVudlZhbHVlKFwiUFVCTElDX09SSUdJTlwiKSA/PyBcIlwiXG4gICkocGF0aCk7XG5cbmV4cG9ydCBjb25zdCBiYXNlVVJMID0gKHBhdGg6IHN0cmluZykgPT5cbiAgY3JlYXRlQmFzZVVSTChnZXRFbnZWYWx1ZShcIkJBU0VfVVJMXCIpID8/IFwiL1wiKShwYXRoKTtcblxuZXhwb3J0IGNvbnN0IHBhZ2VVUkwgPSAocGF0aDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGRldlZhbHVlID0gZ2V0RW52VmFsdWUoXCJERVZcIik7XG4gIGNvbnN0IGlzRGV2ID0gdHlwZW9mIGRldlZhbHVlID09PSBcInN0cmluZ1wiXG4gICAgPyBkZXZWYWx1ZSA9PT0gXCJ0cnVlXCIgfHwgZGV2VmFsdWUgPT09IFwiMVwiXG4gICAgOiBwcm9jZXNzLmVudltcIk5PREVfRU5WXCJdID09PSBcImRldmVsb3BtZW50XCI7XG4gIFxuICByZXR1cm4gY3JlYXRlUGFnZVVSTChcbiAgICBnZXRFbnZWYWx1ZShcIkJBU0VfVVJMXCIpID8/IFwiL1wiLFxuICAgIGdldEVudlZhbHVlKFwiUFVCTElDX09SSUdJTlwiKSA/PyBcIlwiLFxuICAgIGlzRGV2XG4gICkocGF0aCk7XG59O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBY1EsTUFBQSxPQUFBLEdBQWUsQ0FBQSxJQUlkLEtBQUEsYUFBQSxDQUFBLFlBQUEsVUFBQSxDQUFBLElBQUEsR0FBQSxDQUFBLENBQUEsSUFBQTs7OzsifQ==
@@ -1,131 +1,101 @@
1
- import { dirname, join } from "node:path";
2
- import { fileURLToPath } from "node:url";
3
- import { existsSync, lstatSync, readlinkSync, symlinkSync, unlinkSync } from "node:fs";
4
- // Find package root by walking up from current file until we find oss-experimental/
5
- // Works from both plugin/vendor/ (source) and dist/plugin/vendor/ (built)
1
+ /**
2
+ * vite-plugin-react-server
3
+ * Copyright (c) Nico Brinkkemper
4
+ * MIT License
5
+ */
6
+ import { join, dirname } from 'node:path';
7
+ import { fileURLToPath } from 'node:url';
8
+ import { existsSync, lstatSync, readlinkSync, unlinkSync, symlinkSync } from 'node:fs';
9
+
6
10
  const __dirname = dirname(fileURLToPath(import.meta.url));
7
11
  function findPkgRoot() {
8
- let dir = __dirname;
9
- for (let i = 0; i < 5; i++) {
10
- if (existsSync(join(dir, "oss-experimental", "react-server-dom-esm")))
11
- return dir;
12
- dir = dirname(dir);
13
- }
14
- return dirname(dirname(__dirname)); // fallback
12
+ let dir = __dirname;
13
+ for (let i = 0; i < 5; i++) {
14
+ if (existsSync(join(dir, "oss-experimental", "react-server-dom-esm"))) return dir;
15
+ dir = dirname(dir);
16
+ }
17
+ return dirname(dirname(__dirname));
15
18
  }
16
19
  const pkgRoot = findPkgRoot();
17
20
  const ossDir = join(pkgRoot, "oss-experimental");
18
- /**
19
- * Vite plugin that aliases `react-server-dom-esm/*` imports to the vendored
20
- * copy shipped with this plugin. This eliminates the need for consumers to
21
- * install `react-server-dom-esm` separately or use patch-package.
22
- *
23
- * Browser client entries use true ESM files for Rollup tree-shaking.
24
- * Server/static entries are CJS and must be loadable via native Node import()
25
- * (not eval'd as ESM by Vite's module runner, which lacks require()).
26
- *
27
- * In dev mode, we ensure the vendored package is reachable from node_modules
28
- * so Vite's module runner can externalize and natively import() CJS entries.
29
- */
30
- export function vitePluginVendorAlias() {
31
- return {
32
- name: "vite-plugin-react-server:vendor-alias",
33
- enforce: "pre",
34
- config(_config, env) {
35
- const pkg = join(ossDir, "react-server-dom-esm");
36
- const isProd = env.mode === "production";
37
- return {
38
- resolve: {
39
- alias: [
40
- // Browser client → ESM for Rollup tree-shaking
41
- {
42
- find: "react-server-dom-esm/client.browser",
43
- replacement: join(pkg, "esm", isProd
44
- ? "react-server-dom-esm-client.browser.production.js"
45
- : "react-server-dom-esm-client.browser.development.js")
46
- },
47
- ],
48
- },
49
- };
50
- },
51
- configResolved(config) {
52
- // Allow serving vendored files when the plugin is linked or in a monorepo.
53
- // Must be done in configResolved to append to the resolved allow list
54
- // (setting in config hook can override Vite's defaults).
55
- if (config.command === "serve" && config.server?.fs?.allow) {
56
- if (!config.server.fs.allow.includes(pkgRoot)) {
57
- config.server.fs.allow.push(pkgRoot);
58
- }
59
- }
60
- // Ensure vendored package is reachable via Node resolution in ALL Vite
61
- // contexts (dev server, vitest, SSR workers, custom scripts).
62
- // Vite's module runner resolves bare imports via Node — not plugin hooks —
63
- // so the package must be in node_modules for CJS entries to work.
64
- ensureVendoredPackageLinked(config.root);
65
- },
66
- resolveId(source) {
67
- if (!source.startsWith("react-server-dom-esm"))
68
- return;
69
- if (source === "react-server-dom-esm/client.browser")
70
- return;
71
- // Server/static entries: mark external so the runner/bundler uses native
72
- // import() rather than eval(). The resolved path points into the vendored
73
- // copy (reachable via symlink in dev, directly in build).
74
- if (isServerEntry(source)) {
75
- return { id: resolveVendored(source), external: true };
76
- }
77
- return resolveVendored(source);
78
- },
79
- };
80
- }
81
- /**
82
- * Ensure `node_modules/react-server-dom-esm` links to the vendored copy.
83
- * Only creates a symlink if no real install exists. Safe to call multiple times.
84
- */
85
- function ensureVendoredPackageLinked(root) {
86
- const pkg = join(ossDir, "react-server-dom-esm");
87
- const target = join(root ?? process.cwd(), "node_modules", "react-server-dom-esm");
88
- try {
89
- const stat = (() => { try {
90
- return lstatSync(target);
91
- }
92
- catch {
93
- return null;
94
- } })();
95
- if (stat?.isSymbolicLink()) {
96
- // Update symlink if it points elsewhere
97
- if (readlinkSync(target) !== pkg) {
98
- unlinkSync(target);
99
- symlinkSync(pkg, target, "junction");
21
+ function vitePluginVendorAlias() {
22
+ return {
23
+ name: "vite-plugin-react-server:vendor-alias",
24
+ enforce: "pre",
25
+ config(_config, env) {
26
+ const pkg = join(ossDir, "react-server-dom-esm");
27
+ const isProd = env.mode === "production";
28
+ return {
29
+ resolve: {
30
+ alias: [
31
+ // Browser client ESM for Rollup tree-shaking
32
+ {
33
+ find: "react-server-dom-esm/client.browser",
34
+ replacement: join(pkg, "esm", isProd ? "react-server-dom-esm-client.browser.production.js" : "react-server-dom-esm-client.browser.development.js")
100
35
  }
36
+ ]
101
37
  }
102
- else if (!stat) {
103
- // No existing file — create symlink
104
- symlinkSync(pkg, target, "junction");
38
+ };
39
+ },
40
+ configResolved(config) {
41
+ if (config.command === "serve" && config.server?.fs?.allow) {
42
+ if (!config.server.fs.allow.includes(pkgRoot)) {
43
+ config.server.fs.allow.push(pkgRoot);
105
44
  }
106
- // If a real directory/file exists (user installed it), leave it alone
45
+ }
46
+ ensureVendoredPackageLinked(config.root);
47
+ },
48
+ resolveId(source) {
49
+ if (!source.startsWith("react-server-dom-esm")) return;
50
+ if (source === "react-server-dom-esm/client.browser") return;
51
+ if (isServerEntry(source)) {
52
+ return { id: resolveVendored(source), external: true };
53
+ }
54
+ return resolveVendored(source);
107
55
  }
108
- catch {
109
- // Non-fatal: symlink creation can fail on some systems
56
+ };
57
+ }
58
+ function ensureVendoredPackageLinked(root) {
59
+ const pkg = join(ossDir, "react-server-dom-esm");
60
+ const target = join(root ?? process.cwd(), "node_modules", "react-server-dom-esm");
61
+ try {
62
+ const stat = (() => {
63
+ try {
64
+ return lstatSync(target);
65
+ } catch {
66
+ return null;
67
+ }
68
+ })();
69
+ if (stat?.isSymbolicLink()) {
70
+ if (readlinkSync(target) !== pkg) {
71
+ unlinkSync(target);
72
+ symlinkSync(pkg, target, "junction");
73
+ }
74
+ } else if (!stat) {
75
+ symlinkSync(pkg, target, "junction");
110
76
  }
77
+ } catch {
78
+ }
111
79
  }
112
80
  function isServerEntry(source) {
113
- return source.includes("/server") || source.includes("/static");
81
+ return source.includes("/server") || source.includes("/static");
114
82
  }
115
83
  const subpathMap = {
116
- "react-server-dom-esm": "index.js",
117
- "react-server-dom-esm/client": "client.js",
118
- "react-server-dom-esm/client.browser": "client.browser.js",
119
- "react-server-dom-esm/client.node": "client.node.js",
120
- "react-server-dom-esm/server": "server.node.js",
121
- "react-server-dom-esm/server.node": "server.node.js",
122
- "react-server-dom-esm/static": "static.node.js",
123
- "react-server-dom-esm/static.node": "static.node.js",
84
+ "react-server-dom-esm": "index.js",
85
+ "react-server-dom-esm/client": "client.js",
86
+ "react-server-dom-esm/client.browser": "client.browser.js",
87
+ "react-server-dom-esm/client.node": "client.node.js",
88
+ "react-server-dom-esm/server": "server.node.js",
89
+ "react-server-dom-esm/server.node": "server.node.js",
90
+ "react-server-dom-esm/static": "static.node.js",
91
+ "react-server-dom-esm/static.node": "static.node.js"
124
92
  };
125
93
  function resolveVendored(source) {
126
- const file = subpathMap[source];
127
- if (file)
128
- return join(ossDir, "react-server-dom-esm", file);
129
- const subpath = source.replace("react-server-dom-esm", "");
130
- return join(ossDir, "react-server-dom-esm", subpath || "index.js");
94
+ const file = subpathMap[source];
95
+ if (file) return join(ossDir, "react-server-dom-esm", file);
96
+ const subpath = source.replace("react-server-dom-esm", "");
97
+ return join(ossDir, "react-server-dom-esm", subpath || "index.js");
131
98
  }
99
+
100
+ export { vitePluginVendorAlias };
101
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVuZG9yLWFsaWFzLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9wbHVnaW4vdmVuZG9yL3ZlbmRvci1hbGlhcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBsdWdpbiB9IGZyb20gXCJ2aXRlXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gXCJub2RlOnVybFwiO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbHN0YXRTeW5jLCByZWFkbGlua1N5bmMsIHN5bWxpbmtTeW5jLCB1bmxpbmtTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcblxuLy8gRmluZCBwYWNrYWdlIHJvb3QgYnkgd2Fsa2luZyB1cCBmcm9tIGN1cnJlbnQgZmlsZSB1bnRpbCB3ZSBmaW5kIG9zcy1leHBlcmltZW50YWwvXG4vLyBXb3JrcyBmcm9tIGJvdGggcGx1Z2luL3ZlbmRvci8gKHNvdXJjZSkgYW5kIGRpc3QvcGx1Z2luL3ZlbmRvci8gKGJ1aWx0KVxuY29uc3QgX19kaXJuYW1lID0gZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpO1xuZnVuY3Rpb24gZmluZFBrZ1Jvb3QoKTogc3RyaW5nIHtcbiAgbGV0IGRpciA9IF9fZGlybmFtZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHtcbiAgICBpZiAoZXhpc3RzU3luYyhqb2luKGRpciwgXCJvc3MtZXhwZXJpbWVudGFsXCIsIFwicmVhY3Qtc2VydmVyLWRvbS1lc21cIikpKSByZXR1cm4gZGlyO1xuICAgIGRpciA9IGRpcm5hbWUoZGlyKTtcbiAgfVxuICByZXR1cm4gZGlybmFtZShkaXJuYW1lKF9fZGlybmFtZSkpOyAvLyBmYWxsYmFja1xufVxuY29uc3QgcGtnUm9vdCA9IGZpbmRQa2dSb290KCk7XG5jb25zdCBvc3NEaXIgPSBqb2luKHBrZ1Jvb3QsIFwib3NzLWV4cGVyaW1lbnRhbFwiKTtcblxuLyoqXG4gKiBWaXRlIHBsdWdpbiB0aGF0IGFsaWFzZXMgYHJlYWN0LXNlcnZlci1kb20tZXNtLypgIGltcG9ydHMgdG8gdGhlIHZlbmRvcmVkXG4gKiBjb3B5IHNoaXBwZWQgd2l0aCB0aGlzIHBsdWdpbi4gVGhpcyBlbGltaW5hdGVzIHRoZSBuZWVkIGZvciBjb25zdW1lcnMgdG9cbiAqIGluc3RhbGwgYHJlYWN0LXNlcnZlci1kb20tZXNtYCBzZXBhcmF0ZWx5IG9yIHVzZSBwYXRjaC1wYWNrYWdlLlxuICpcbiAqIEJyb3dzZXIgY2xpZW50IGVudHJpZXMgdXNlIHRydWUgRVNNIGZpbGVzIGZvciBSb2xsdXAgdHJlZS1zaGFraW5nLlxuICogU2VydmVyL3N0YXRpYyBlbnRyaWVzIGFyZSBDSlMgYW5kIG11c3QgYmUgbG9hZGFibGUgdmlhIG5hdGl2ZSBOb2RlIGltcG9ydCgpXG4gKiAobm90IGV2YWwnZCBhcyBFU00gYnkgVml0ZSdzIG1vZHVsZSBydW5uZXIsIHdoaWNoIGxhY2tzIHJlcXVpcmUoKSkuXG4gKlxuICogSW4gZGV2IG1vZGUsIHdlIGVuc3VyZSB0aGUgdmVuZG9yZWQgcGFja2FnZSBpcyByZWFjaGFibGUgZnJvbSBub2RlX21vZHVsZXNcbiAqIHNvIFZpdGUncyBtb2R1bGUgcnVubmVyIGNhbiBleHRlcm5hbGl6ZSBhbmQgbmF0aXZlbHkgaW1wb3J0KCkgQ0pTIGVudHJpZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2aXRlUGx1Z2luVmVuZG9yQWxpYXMoKTogUGx1Z2luIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBcInZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcjp2ZW5kb3ItYWxpYXNcIixcbiAgICBlbmZvcmNlOiBcInByZVwiLFxuXG4gICAgY29uZmlnKF9jb25maWcsIGVudikge1xuICAgICAgY29uc3QgcGtnID0gam9pbihvc3NEaXIsIFwicmVhY3Qtc2VydmVyLWRvbS1lc21cIik7XG4gICAgICBjb25zdCBpc1Byb2QgPSBlbnYubW9kZSA9PT0gXCJwcm9kdWN0aW9uXCI7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc29sdmU6IHtcbiAgICAgICAgICBhbGlhczogW1xuICAgICAgICAgICAgLy8gQnJvd3NlciBjbGllbnQg4oaSIEVTTSBmb3IgUm9sbHVwIHRyZWUtc2hha2luZ1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBmaW5kOiBcInJlYWN0LXNlcnZlci1kb20tZXNtL2NsaWVudC5icm93c2VyXCIsXG4gICAgICAgICAgICAgIHJlcGxhY2VtZW50OiBqb2luKHBrZywgXCJlc21cIiwgaXNQcm9kXG4gICAgICAgICAgICAgICAgPyBcInJlYWN0LXNlcnZlci1kb20tZXNtLWNsaWVudC5icm93c2VyLnByb2R1Y3Rpb24uanNcIlxuICAgICAgICAgICAgICAgIDogXCJyZWFjdC1zZXJ2ZXItZG9tLWVzbS1jbGllbnQuYnJvd3Nlci5kZXZlbG9wbWVudC5qc1wiKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9LFxuXG4gICAgY29uZmlnUmVzb2x2ZWQoY29uZmlnKSB7XG4gICAgICAvLyBBbGxvdyBzZXJ2aW5nIHZlbmRvcmVkIGZpbGVzIHdoZW4gdGhlIHBsdWdpbiBpcyBsaW5rZWQgb3IgaW4gYSBtb25vcmVwby5cbiAgICAgIC8vIE11c3QgYmUgZG9uZSBpbiBjb25maWdSZXNvbHZlZCB0byBhcHBlbmQgdG8gdGhlIHJlc29sdmVkIGFsbG93IGxpc3RcbiAgICAgIC8vIChzZXR0aW5nIGluIGNvbmZpZyBob29rIGNhbiBvdmVycmlkZSBWaXRlJ3MgZGVmYXVsdHMpLlxuICAgICAgaWYgKGNvbmZpZy5jb21tYW5kID09PSBcInNlcnZlXCIgJiYgY29uZmlnLnNlcnZlcj8uZnM/LmFsbG93KSB7XG4gICAgICAgIGlmICghY29uZmlnLnNlcnZlci5mcy5hbGxvdy5pbmNsdWRlcyhwa2dSb290KSkge1xuICAgICAgICAgIGNvbmZpZy5zZXJ2ZXIuZnMuYWxsb3cucHVzaChwa2dSb290KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBFbnN1cmUgdmVuZG9yZWQgcGFja2FnZSBpcyByZWFjaGFibGUgdmlhIE5vZGUgcmVzb2x1dGlvbiBpbiBBTEwgVml0ZVxuICAgICAgLy8gY29udGV4dHMgKGRldiBzZXJ2ZXIsIHZpdGVzdCwgU1NSIHdvcmtlcnMsIGN1c3RvbSBzY3JpcHRzKS5cbiAgICAgIC8vIFZpdGUncyBtb2R1bGUgcnVubmVyIHJlc29sdmVzIGJhcmUgaW1wb3J0cyB2aWEgTm9kZSDigJQgbm90IHBsdWdpbiBob29rcyDigJRcbiAgICAgIC8vIHNvIHRoZSBwYWNrYWdlIG11c3QgYmUgaW4gbm9kZV9tb2R1bGVzIGZvciBDSlMgZW50cmllcyB0byB3b3JrLlxuICAgICAgZW5zdXJlVmVuZG9yZWRQYWNrYWdlTGlua2VkKGNvbmZpZy5yb290KTtcbiAgICB9LFxuXG4gICAgcmVzb2x2ZUlkKHNvdXJjZSkge1xuICAgICAgaWYgKCFzb3VyY2Uuc3RhcnRzV2l0aChcInJlYWN0LXNlcnZlci1kb20tZXNtXCIpKSByZXR1cm47XG4gICAgICBpZiAoc291cmNlID09PSBcInJlYWN0LXNlcnZlci1kb20tZXNtL2NsaWVudC5icm93c2VyXCIpIHJldHVybjtcblxuICAgICAgLy8gU2VydmVyL3N0YXRpYyBlbnRyaWVzOiBtYXJrIGV4dGVybmFsIHNvIHRoZSBydW5uZXIvYnVuZGxlciB1c2VzIG5hdGl2ZVxuICAgICAgLy8gaW1wb3J0KCkgcmF0aGVyIHRoYW4gZXZhbCgpLiBUaGUgcmVzb2x2ZWQgcGF0aCBwb2ludHMgaW50byB0aGUgdmVuZG9yZWRcbiAgICAgIC8vIGNvcHkgKHJlYWNoYWJsZSB2aWEgc3ltbGluayBpbiBkZXYsIGRpcmVjdGx5IGluIGJ1aWxkKS5cbiAgICAgIGlmIChpc1NlcnZlckVudHJ5KHNvdXJjZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgaWQ6IHJlc29sdmVWZW5kb3JlZChzb3VyY2UpLCBleHRlcm5hbDogdHJ1ZSB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzb2x2ZVZlbmRvcmVkKHNvdXJjZSk7XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBFbnN1cmUgYG5vZGVfbW9kdWxlcy9yZWFjdC1zZXJ2ZXItZG9tLWVzbWAgbGlua3MgdG8gdGhlIHZlbmRvcmVkIGNvcHkuXG4gKiBPbmx5IGNyZWF0ZXMgYSBzeW1saW5rIGlmIG5vIHJlYWwgaW5zdGFsbCBleGlzdHMuIFNhZmUgdG8gY2FsbCBtdWx0aXBsZSB0aW1lcy5cbiAqL1xuZnVuY3Rpb24gZW5zdXJlVmVuZG9yZWRQYWNrYWdlTGlua2VkKHJvb3Q/OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgcGtnID0gam9pbihvc3NEaXIsIFwicmVhY3Qtc2VydmVyLWRvbS1lc21cIik7XG4gIGNvbnN0IHRhcmdldCA9IGpvaW4ocm9vdCA/PyBwcm9jZXNzLmN3ZCgpLCBcIm5vZGVfbW9kdWxlc1wiLCBcInJlYWN0LXNlcnZlci1kb20tZXNtXCIpO1xuICB0cnkge1xuICAgIGNvbnN0IHN0YXQgPSAoKCkgPT4geyB0cnkgeyByZXR1cm4gbHN0YXRTeW5jKHRhcmdldCk7IH0gY2F0Y2ggeyByZXR1cm4gbnVsbDsgfSB9KSgpO1xuICAgIGlmIChzdGF0Py5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAvLyBVcGRhdGUgc3ltbGluayBpZiBpdCBwb2ludHMgZWxzZXdoZXJlXG4gICAgICBpZiAocmVhZGxpbmtTeW5jKHRhcmdldCkgIT09IHBrZykge1xuICAgICAgICB1bmxpbmtTeW5jKHRhcmdldCk7XG4gICAgICAgIHN5bWxpbmtTeW5jKHBrZywgdGFyZ2V0LCBcImp1bmN0aW9uXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXN0YXQpIHtcbiAgICAgIC8vIE5vIGV4aXN0aW5nIGZpbGUg4oCUIGNyZWF0ZSBzeW1saW5rXG4gICAgICBzeW1saW5rU3luYyhwa2csIHRhcmdldCwgXCJqdW5jdGlvblwiKTtcbiAgICB9XG4gICAgLy8gSWYgYSByZWFsIGRpcmVjdG9yeS9maWxlIGV4aXN0cyAodXNlciBpbnN0YWxsZWQgaXQpLCBsZWF2ZSBpdCBhbG9uZVxuICB9IGNhdGNoIHtcbiAgICAvLyBOb24tZmF0YWw6IHN5bWxpbmsgY3JlYXRpb24gY2FuIGZhaWwgb24gc29tZSBzeXN0ZW1zXG4gIH1cbn1cblxuZnVuY3Rpb24gaXNTZXJ2ZXJFbnRyeShzb3VyY2U6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gc291cmNlLmluY2x1ZGVzKFwiL3NlcnZlclwiKSB8fCBzb3VyY2UuaW5jbHVkZXMoXCIvc3RhdGljXCIpO1xufVxuXG5jb25zdCBzdWJwYXRoTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBcInJlYWN0LXNlcnZlci1kb20tZXNtXCI6ICAgICAgICAgICAgICAgIFwiaW5kZXguanNcIixcbiAgXCJyZWFjdC1zZXJ2ZXItZG9tLWVzbS9jbGllbnRcIjogICAgICAgICBcImNsaWVudC5qc1wiLFxuICBcInJlYWN0LXNlcnZlci1kb20tZXNtL2NsaWVudC5icm93c2VyXCI6IFwiY2xpZW50LmJyb3dzZXIuanNcIixcbiAgXCJyZWFjdC1zZXJ2ZXItZG9tLWVzbS9jbGllbnQubm9kZVwiOiAgICBcImNsaWVudC5ub2RlLmpzXCIsXG4gIFwicmVhY3Qtc2VydmVyLWRvbS1lc20vc2VydmVyXCI6ICAgICAgICAgXCJzZXJ2ZXIubm9kZS5qc1wiLFxuICBcInJlYWN0LXNlcnZlci1kb20tZXNtL3NlcnZlci5ub2RlXCI6ICAgIFwic2VydmVyLm5vZGUuanNcIixcbiAgXCJyZWFjdC1zZXJ2ZXItZG9tLWVzbS9zdGF0aWNcIjogICAgICAgICBcInN0YXRpYy5ub2RlLmpzXCIsXG4gIFwicmVhY3Qtc2VydmVyLWRvbS1lc20vc3RhdGljLm5vZGVcIjogICAgXCJzdGF0aWMubm9kZS5qc1wiLFxufTtcblxuZnVuY3Rpb24gcmVzb2x2ZVZlbmRvcmVkKHNvdXJjZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgZmlsZSA9IHN1YnBhdGhNYXBbc291cmNlXTtcbiAgaWYgKGZpbGUpIHJldHVybiBqb2luKG9zc0RpciwgXCJyZWFjdC1zZXJ2ZXItZG9tLWVzbVwiLCBmaWxlKTtcbiAgY29uc3Qgc3VicGF0aCA9IHNvdXJjZS5yZXBsYWNlKFwicmVhY3Qtc2VydmVyLWRvbS1lc21cIiwgXCJcIik7XG4gIHJldHVybiBqb2luKG9zc0RpciwgXCJyZWFjdC1zZXJ2ZXItZG9tLWVzbVwiLCBzdWJwYXRoIHx8IFwiaW5kZXguanNcIik7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBT0EsTUFBTSxTQUFZLEdBQUEsT0FBQSxDQUFRLGFBQWMsQ0FBQSxNQUFBLENBQUEsSUFBQSxDQUFZLEdBQUcsQ0FBQyxDQUFBO0FBQ3hELFNBQVMsV0FBc0IsR0FBQTtBQUM3QixFQUFBLElBQUksR0FBTSxHQUFBLFNBQUE7QUFDVixFQUFBLEtBQUEsSUFBUyxDQUFJLEdBQUEsQ0FBQSxFQUFHLENBQUksR0FBQSxDQUFBLEVBQUcsQ0FBSyxFQUFBLEVBQUE7QUFDMUIsSUFBQSxJQUFJLFdBQVcsSUFBSyxDQUFBLEdBQUEsRUFBSyxvQkFBb0Isc0JBQXNCLENBQUMsR0FBVSxPQUFBLEdBQUE7QUFDOUUsSUFBQSxHQUFBLEdBQU0sUUFBUSxHQUFHLENBQUE7QUFBQTtBQUVuQixFQUFPLE9BQUEsT0FBQSxDQUFRLE9BQVEsQ0FBQSxTQUFTLENBQUMsQ0FBQTtBQUNuQztBQUNBLE1BQU0sVUFBVSxXQUFZLEVBQUE7QUFDNUIsTUFBTSxNQUFBLEdBQVMsSUFBSyxDQUFBLE9BQUEsRUFBUyxrQkFBa0IsQ0FBQTtBQWN4QyxTQUFTLHFCQUFnQyxHQUFBO0FBQzlDLEVBQU8sT0FBQTtBQUFBLElBQ0wsSUFBTSxFQUFBLHVDQUFBO0FBQUEsSUFDTixPQUFTLEVBQUEsS0FBQTtBQUFBLElBRVQsTUFBQSxDQUFPLFNBQVMsR0FBSyxFQUFBO0FBQ25CLE1BQU0sTUFBQSxHQUFBLEdBQU0sSUFBSyxDQUFBLE1BQUEsRUFBUSxzQkFBc0IsQ0FBQTtBQUMvQyxNQUFNLE1B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
@@ -1 +1 @@
1
- {"version":3,"file":"vendor.client.d.ts","sourceRoot":"","sources":["../../../plugin/vendor/vendor.client.ts"],"names":[],"mappings":"AAqBA,QAAA,MAAM,cAAc,EAA4E,cAAc,kCAAkC,CAAC,CAAC;AAKlJ,QAAA,MAAM,cAAc,EAAyC,cAAc,kBAAkB,CAAC,CAAC;AAC/F,QAAA,MAAM,KAAK,EAA8B,cAAc,OAAO,CAAC,CAAC;AAEhE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"vendor.client.d.ts","sourceRoot":"","sources":["../../../plugin/vendor/vendor.client.ts"],"names":[],"mappings":"AAmBA,QAAA,MAAM,cAAc,EAA4E,cAAc,kCAAkC,CAAC,CAAC;AAKlJ,QAAA,MAAM,cAAc,EAAyC,cAAc,kBAAkB,CAAC,CAAC;AAC/F,QAAA,MAAM,KAAK,EAA8B,cAAc,OAAO,CAAC,CAAC;AAEhE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC"}
@@ -7,9 +7,7 @@ import { createRequire } from 'node:module';
7
7
  import { dirname, join } from 'node:path';
8
8
  import { fileURLToPath } from 'node:url';
9
9
  import { existsSync } from 'node:fs';
10
- import { assertNonReactServer } from '../config/getCondition.js';
11
10
 
12
- assertNonReactServer();
13
11
  const __dirname = dirname(fileURLToPath(import.meta.url));
14
12
  function findPkgRoot() {
15
13
  let dir = __dirname;
@@ -28,4 +26,4 @@ const ReactDOMServer = projectRequire("react-dom/server");
28
26
  const React = projectRequire("react");
29
27
 
30
28
  export { React, ReactDOMClient, ReactDOMServer };
31
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVuZG9yLmNsaWVudC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL3ZlbmRvci92ZW5kb3IuY2xpZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibm9kZTptb2R1bGVcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IGFzc2VydE5vblJlYWN0U2VydmVyIH0gZnJvbSBcIi4uL2NvbmZpZy9nZXRDb25kaXRpb24uanNcIjtcblxuYXNzZXJ0Tm9uUmVhY3RTZXJ2ZXIoKTtcblxuY29uc3QgX19kaXJuYW1lID0gZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpO1xuZnVuY3Rpb24gZmluZFBrZ1Jvb3QoKTogc3RyaW5nIHtcbiAgbGV0IGRpciA9IF9fZGlybmFtZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHtcbiAgICBpZiAoZXhpc3RzU3luYyhqb2luKGRpciwgXCJvc3MtZXhwZXJpbWVudGFsXCIsIFwicmVhY3Qtc2VydmVyLWRvbS1lc21cIikpKSByZXR1cm4gZGlyO1xuICAgIGRpciA9IGRpcm5hbWUoZGlyKTtcbiAgfVxuICByZXR1cm4gZGlybmFtZShkaXJuYW1lKF9fZGlybmFtZSkpO1xufVxuY29uc3Qgb3NzRGlyID0gam9pbihmaW5kUGtnUm9vdCgpLCBcIm9zcy1leHBlcmltZW50YWxcIik7XG5cbi8vIExvYWQgcmVhY3Qtc2VydmVyLWRvbS1lc20vY2xpZW50Lm5vZGUgZGlyZWN0bHkgZnJvbSB2ZW5kb3JlZCBjb3B5XG5jb25zdCB2ZW5kb3JSZXF1aXJlID0gY3JlYXRlUmVxdWlyZShqb2luKG9zc0RpciwgXCJyZWFjdC1zZXJ2ZXItZG9tLWVzbVwiLCBcInBhY2thZ2UuanNvblwiKSk7XG5jb25zdCBSZWFjdERPTUNsaWVudCA9IHZlbmRvclJlcXVpcmUoam9pbihvc3NEaXIsIFwicmVhY3Qtc2VydmVyLWRvbS1lc21cIiwgXCJjbGllbnQubm9kZS5qc1wiKSkgYXMgdHlwZW9mIGltcG9ydChcInJlYWN0LXNlcnZlci1kb20tZXNtL2NsaWVudC5ub2RlXCIpO1xuXG4vLyBSZWFjdCBhbmQgcmVhY3QtZG9tIHN0aWxsIGNvbWUgZnJvbSB0aGUgY29uc3VtZXIncyBwcm9qZWN0XG5jb25zdCBwcm9qZWN0Um9vdCA9IHByb2Nlc3MuZW52W1wibnBtX2NvbmZpZ19sb2NhbF9wcmVmaXhcIl0gfHwgcHJvY2Vzcy5jd2QoKTtcbmNvbnN0IHByb2plY3RSZXF1aXJlID0gY3JlYXRlUmVxdWlyZShqb2luKHByb2plY3RSb290LCBcInBhY2thZ2UuanNvblwiKSk7XG5jb25zdCBSZWFjdERPTVNlcnZlciA9IHByb2plY3RSZXF1aXJlKFwicmVhY3QtZG9tL3NlcnZlclwiKSBhcyB0eXBlb2YgaW1wb3J0KFwicmVhY3QtZG9tL3NlcnZlclwiKTtcbmNvbnN0IFJlYWN0ID0gcHJvamVjdFJlcXVpcmUoXCJyZWFjdFwiKSBhcyB0eXBlb2YgaW1wb3J0KFwicmVhY3RcIik7XG5cbmV4cG9ydCB7IFJlYWN0RE9NU2VydmVyLCBSZWFjdCwgUmVhY3RET01DbGllbnQgfTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQU1BLG9CQUFxQixFQUFBO0FBRXJCLE1BQU0sU0FBWSxHQUFBLE9BQUEsQ0FBUSxhQUFjLENBQUEsTUFBQSxDQUFBLElBQUEsQ0FBWSxHQUFHLENBQUMsQ0FBQTtBQUN4RCxTQUFTLFdBQXNCLEdBQUE7QUFDN0IsRUFBQSxJQUFJLEdBQU0sR0FBQSxTQUFBO0FBQ1YsRUFBQSxLQUFBLElBQVMsQ0FBSSxHQUFBLENBQUEsRUFBRyxDQUFJLEdBQUEsQ0FBQSxFQUFHLENBQUssRUFBQSxFQUFBO0FBQzFCLElBQUEsSUFBSSxXQUFXLElBQUssQ0FBQSxHQUFBLEVBQUssb0JBQW9CLHNCQUFzQixDQUFDLEdBQVUsT0FBQSxHQUFBO0FBQzlFLElBQUEsR0FBQSxHQUFNLFFBQVEsR0FBRyxDQUFBO0FBQUE7QUFFbkIsRUFBTyxPQUFBLE9BQUEsQ0FBUSxPQUFRLENBQUEsU0FBUyxDQUFDLENBQUE7QUFDbkM7QUFDQSxNQUFNLE1BQVMsR0FBQSxJQUFBLENBQUssV0FBWSxFQUFBLEVBQUcsa0JBQWtCLENBQUE7QUFHckQsTUFBTSxnQkFBZ0IsYUFBYyxDQUFBLElBQUEsQ0FBSyxNQUFRLEVBQUEsc0JBQUEsRUFBd0IsY0FBYyxDQUFDLENBQUE7QUFDeEYsTUFBTSxpQkFBaUIsYUFBYyxDQUFBLElBQUEsQ0FBSyxNQUFRLEVBQUEsc0JBQUEsRUFBd0IsZ0JBQWdCLENBQUM7QUFHM0YsTUFBTSxjQUFjLE9BQVEsQ0FBQSxHQUFBLENBQUkseUJBQXlCLENBQUEsSUFBSyxRQUFRLEdBQUksRUFBQTtBQUMxRSxNQUFNLGNBQWlCLEdBQUEsYUFBQSxDQUFjLElBQUssQ0FBQSxXQUFBLEVBQWEsY0FBYyxDQUFDLENBQUE7QUFDaEUsTUFBQSxjQUFBLEdBQWlCLGVBQWUsa0JBQWtCO0FBQ2xELE1BQUEsS0FBQSxHQUFRLGVBQWUsT0FBTzs7OzsifQ==
29
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVuZG9yLmNsaWVudC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL3ZlbmRvci92ZW5kb3IuY2xpZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibm9kZTptb2R1bGVcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcblxuXG5jb25zdCBfX2Rpcm5hbWUgPSBkaXJuYW1lKGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKSk7XG5mdW5jdGlvbiBmaW5kUGtnUm9vdCgpOiBzdHJpbmcge1xuICBsZXQgZGlyID0gX19kaXJuYW1lO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDU7IGkrKykge1xuICAgIGlmIChleGlzdHNTeW5jKGpvaW4oZGlyLCBcIm9zcy1leHBlcmltZW50YWxcIiwgXCJyZWFjdC1zZXJ2ZXItZG9tLWVzbVwiKSkpIHJldHVybiBkaXI7XG4gICAgZGlyID0gZGlybmFtZShkaXIpO1xuICB9XG4gIHJldHVybiBkaXJuYW1lKGRpcm5hbWUoX19kaXJuYW1lKSk7XG59XG5jb25zdCBvc3NEaXIgPSBqb2luKGZpbmRQa2dSb290KCksIFwib3NzLWV4cGVyaW1lbnRhbFwiKTtcblxuLy8gTG9hZCByZWFjdC1zZXJ2ZXItZG9tLWVzbS9jbGllbnQubm9kZSBkaXJlY3RseSBmcm9tIHZlbmRvcmVkIGNvcHlcbmNvbnN0IHZlbmRvclJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGpvaW4ob3NzRGlyLCBcInJlYWN0LXNlcnZlci1kb20tZXNtXCIsIFwicGFja2FnZS5qc29uXCIpKTtcbmNvbnN0IFJlYWN0RE9NQ2xpZW50ID0gdmVuZG9yUmVxdWlyZShqb2luKG9zc0RpciwgXCJyZWFjdC1zZXJ2ZXItZG9tLWVzbVwiLCBcImNsaWVudC5ub2RlLmpzXCIpKSBhcyB0eXBlb2YgaW1wb3J0KFwicmVhY3Qtc2VydmVyLWRvbS1lc20vY2xpZW50Lm5vZGVcIik7XG5cbi8vIFJlYWN0IGFuZCByZWFjdC1kb20gc3RpbGwgY29tZSBmcm9tIHRoZSBjb25zdW1lcidzIHByb2plY3RcbmNvbnN0IHByb2plY3RSb290ID0gcHJvY2Vzcy5lbnZbXCJucG1fY29uZmlnX2xvY2FsX3ByZWZpeFwiXSB8fCBwcm9jZXNzLmN3ZCgpO1xuY29uc3QgcHJvamVjdFJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGpvaW4ocHJvamVjdFJvb3QsIFwicGFja2FnZS5qc29uXCIpKTtcbmNvbnN0IFJlYWN0RE9NU2VydmVyID0gcHJvamVjdFJlcXVpcmUoXCJyZWFjdC1kb20vc2VydmVyXCIpIGFzIHR5cGVvZiBpbXBvcnQoXCJyZWFjdC1kb20vc2VydmVyXCIpO1xuY29uc3QgUmVhY3QgPSBwcm9qZWN0UmVxdWlyZShcInJlYWN0XCIpIGFzIHR5cGVvZiBpbXBvcnQoXCJyZWFjdFwiKTtcblxuZXhwb3J0IHsgUmVhY3RET01TZXJ2ZXIsIFJlYWN0LCBSZWFjdERPTUNsaWVudCB9O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFNQSxNQUFNLFNBQVksR0FBQSxPQUFBLENBQVEsYUFBYyxDQUFBLE1BQUEsQ0FBQSxJQUFBLENBQVksR0FBRyxDQUFDLENBQUE7QUFDeEQsU0FBUyxXQUFzQixHQUFBO0FBQzdCLEVBQUEsSUFBSSxHQUFNLEdBQUEsU0FBQTtBQUNWLEVBQUEsS0FBQSxJQUFTLENBQUksR0FBQSxDQUFBLEVBQUcsQ0FBSSxHQUFBLENBQUEsRUFBRyxDQUFLLEVBQUEsRUFBQTtBQUMxQixJQUFBLElBQUksV0FBVyxJQUFLLENBQUEsR0FBQSxFQUFLLG9CQUFvQixzQkFBc0IsQ0FBQyxHQUFVLE9BQUEsR0FBQTtBQUM5RSxJQUFBLEdBQUEsR0FBTSxRQUFRLEdBQUcsQ0FBQTtBQUFBO0FBRW5CLEVBQU8sT0FBQSxPQUFBLENBQVEsT0FBUSxDQUFBLFNBQVMsQ0FBQyxDQUFBO0FBQ25DO0FBQ0EsTUFBTSxNQUFTLEdBQUEsSUFBQSxDQUFLLFdBQVksRUFBQSxFQUFHLGtCQUFrQixDQUFBO0FBR3JELE1BQU0sZ0JBQWdCLGFBQWMsQ0FBQSxJQUFBLENBQUssTUFBUSxFQUFBLHNCQUFBLEVBQXdCLGNBQWMsQ0FBQyxDQUFBO0FBQ3hGLE1BQU0saUJBQWlCLGFBQWMsQ0FBQSxJQUFBLENBQUssTUFBUSxFQUFBLHNCQUFBLEVBQXdCLGdCQUFnQixDQUFDO0FBRzNGLE1BQU0sY0FBYyxPQUFRLENBQUEsR0FBQSxDQUFJLHlCQUF5QixDQUFBLElBQUssUUFBUSxHQUFJLEVBQUE7QUFDMUUsTUFBTSxjQUFpQixHQUFBLGFBQUEsQ0FBYyxJQUFLLENBQUEsV0FBQSxFQUFhLGNBQWMsQ0FBQyxDQUFBO0FBQ2hFLE1BQUEsY0FBQSxHQUFpQixlQUFlLGtCQUFrQjtBQUNsRCxNQUFBLEtBQUEsR0FBUSxlQUFlLE9BQU87Ozs7In0=
@@ -1 +1 @@
1
- {"version":3,"file":"handleRscRender.d.ts","sourceRoot":"","sources":["../../../../plugin/worker/rsc/handleRscRender.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAQpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,eAAe,EAAE,iBAqd7B,CAAC"}
1
+ {"version":3,"file":"handleRscRender.d.ts","sourceRoot":"","sources":["../../../../plugin/worker/rsc/handleRscRender.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AASpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,eAAe,EAAE,iBAsd7B,CAAC"}
@@ -9,6 +9,7 @@ import { PassThrough } from 'node:stream';
9
9
  import { createLogger } from 'vite';
10
10
  import { React, ReactDOMServer } from '../../vendor/vendor.server.js';
11
11
  import { createElementWithReact } from '../../helpers/createElementWithReact.js';
12
+ import { checkReactExperimental } from '../../utils/checkReactVersion.js';
12
13
 
13
14
  const handleRscRender = function _handleRscRender(handlerOptions, handlers, rscStreamOverride, headlessStreamElements, headlessStreamErrors) {
14
15
  const {
@@ -178,6 +179,7 @@ const handleRscRender = function _handleRscRender(handlerOptions, handlers, rscS
178
179
  `[rsc-worker:${route}] *** CALLING renderToPipeableStream ***`
179
180
  );
180
181
  }
182
+ checkReactExperimental();
181
183
  const { pipe } = ReactDOMServer.renderToPipeableStream(
182
184
  element,
183
185
  finalHandlerOptions.moduleBasePath,
@@ -346,4 +348,4 @@ const handleRscRender = function _handleRscRender(handlerOptions, handlers, rscS
346
348
  };
347
349
 
348
350
  export { handleRscRender };
349
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlUnNjUmVuZGVyLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wbHVnaW4vd29ya2VyL3JzYy9oYW5kbGVSc2NSZW5kZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlUmVuZGVyTWV0cmljcyB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL21ldHJpY3MuanNcIjtcbmltcG9ydCB7IHdvcmtlckRhdGEgfSBmcm9tIFwibm9kZTp3b3JrZXJfdGhyZWFkc1wiO1xuaW1wb3J0IHsgUGFzc1Rocm91Z2ggfSBmcm9tIFwibm9kZTpzdHJlYW1cIjtcbmltcG9ydCB0eXBlIHsgSGFuZGxlUnNjUmVuZGVyRm4gfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCB7XG4gIFJlYWN0LFxuICBSZWFjdERPTVNlcnZlcixcbiAgdHlwZSBSZW5kZXJUb1BpcGVhYmxlU3RyZWFtT3B0aW9ucyxcbn0gZnJvbSBcIi4uLy4uL3ZlbmRvci92ZW5kb3Iuc2VydmVyLmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50V2l0aFJlYWN0IH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvY3JlYXRlRWxlbWVudFdpdGhSZWFjdC5qc1wiO1xuLyoqXG4gKiBIYW5kbGVzIHRoZSByZW5kZXJpbmcgb2YgUmVhY3QgU2VydmVyIENvbXBvbmVudCBzdHJlYW1zIGluIHRoZSBSU0Mgd29ya2VyIHRocmVhZC5cbiAqXG4gKiAqKlB1cnBvc2UqKjogQ3JlYXRlcyBSZWFjdCBTZXJ2ZXIgQ29tcG9uZW50IHN0cmVhbXMgdXNpbmcgUmVhY3RET01TZXJ2ZXIucmVuZGVyVG9QaXBlYWJsZVN0cmVhbVxuICogYW5kIG1hbmFnZXMgdGhlIHN0cmVhbSBsaWZlY3ljbGUsIGVycm9yIGhhbmRsaW5nLCBhbmQgZWxlbWVudCByZXVzZSBmb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLlxuICpcbiAqICoqS2V5IEZlYXR1cmVzKio6XG4gKiAtICoqU3RyZWFtIENyZWF0aW9uKio6IFVzZXMgUmVhY3RET01TZXJ2ZXIucmVuZGVyVG9QaXBlYWJsZVN0cmVhbSBmb3IgUlNDIHJlbmRlcmluZ1xuICogLSAqKkVycm9yIEhhbmRsaW5nKio6IENhdGNoZXMgUmVhY3QgcmVuZGVyaW5nIGVycm9ycyB2aWEgb25FcnJvciBjYWxsYmFjayBhbmQgY29tbXVuaWNhdGVzIHRvIG1haW4gdGhyZWFkXG4gKiAtICoqU3RyZWFtIFJldXNlKio6IE1hbmFnZXMgaGVhZGxlc3Mgc3RyZWFtIGVsZW1lbnQgcmV1c2UgZm9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvblxuICogLSAqKk1ldHJpY3MgQ29sbGVjdGlvbioqOiBUcmFja3MgcmVuZGVyaW5nIHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgdXNhZ2VcbiAqXG4gKiAqKkVycm9yIEhhbmRsaW5nIFN0cmF0ZWd5Kio6XG4gKiAtIFJlYWN0IHJlbmRlcmluZyBlcnJvcnMgYXJlIGNhdWdodCBieSBSZWFjdERPTVNlcnZlci5vbkVycm9yIGNhbGxiYWNrXG4gKiAtIEVycm9ycyBhcmUgc2VudCB0byBtYWluIHRocmVhZCB2aWEgaGFuZGxlcnMub25FcnJvciB3aXRoIGNvbnRleHQgaW5mb3JtYXRpb25cbiAqIC0gSGVhZGxlc3Mgc3RyZWFtIGVycm9ycyBhcmUgdHJhY2tlZCBmb3IgY29uZGl0aW9uYWwgcmV1c2UgbG9naWNcbiAqIC0gU3RyZWFtIGlzIHByb3Blcmx5IGVuZGVkIGV2ZW4gd2hlbiBlcnJvcnMgb2NjdXJcbiAqXG4gKiAqKlN0cmVhbSBUeXBlcyoqOlxuICogLSAqKkhlYWRsZXNzIFN0cmVhbXMqKjogUGFnZSBjb250ZW50IG9ubHkgKG5vIEhUTUwgd3JhcHBlcikgZm9yIC5yc2MgZmlsZXNcbiAqIC0gKipGdWxsIFN0cmVhbXMqKjogQ29tcGxldGUgSFRNTCBzdHJ1Y3R1cmUgZm9yIEhUTUwgZ2VuZXJhdGlvblxuICpcbiAqIEBwYXJhbSBoYW5kbGVyT3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgUlNDIHJlbmRlcmluZ1xuICogQHBhcmFtIGhhbmRsZXJzIC0gRXZlbnQgaGFuZGxlcnMgZm9yIHN0cmVhbSBsaWZlY3ljbGUgbWFuYWdlbWVudFxuICogQHBhcmFtIHJzY1N0cmVhbU92ZXJyaWRlIC0gT3B0aW9uYWwgb3ZlcnJpZGUgZm9yIFJTQyBzdHJlYW0gKGZvciB0ZXN0aW5nKVxuICogQHBhcmFtIGhlYWRsZXNzU3RyZWFtRWxlbWVudHMgLSBNYXAgZm9yIHN0b3JpbmcgcmV1c2FibGUgaGVhZGxlc3Mgc3RyZWFtIGVsZW1lbnRzXG4gKiBAcGFyYW0gaGVhZGxlc3NTdHJlYW1FcnJvcnMgLSBNYXAgZm9yIHRyYWNraW5nIGhlYWRsZXNzIHN0cmVhbSBlcnJvcnNcbiAqIEByZXR1cm5zIFJTQyBzdHJlYW0gcmVzdWx0IHdpdGggbWV0cmljcyBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnRcbiAqL1xuZXhwb3J0IGNvbnN0IGhhbmRsZVJzY1JlbmRlcjogSGFuZGxlUnNjUmVuZGVyRm4gPSBmdW5jdGlvbiBfaGFuZGxlUnNjUmVuZGVyKFxuICBoYW5kbGVyT3B0aW9ucyxcbiAgaGFuZGxlcnMsXG4gIHJzY1N0cmVhbU92ZXJyaWRlLFxuICBoZWFkbGVzc1N0cmVhbUVsZW1lbnRzLFxuICBoZWFkbGVzc1N0cmVhbUVycm9yc1xuKSB7XG4gIGNvbnN0IHtcbiAgICBpZCxcbiAgICByb3V0ZSxcbiAgICB2ZXJib3NlLFxuICAgIHJldXNlSGVhZGxlc3NTdHJlYW1JZCxcbiAgICBsb2dnZXIgPSBjcmVhdGVMb2dnZXIod29ya2VyRGF0YS5yZXNvbHZlZENvbmZpZz8ubG9nTGV2ZWwgPz8gXCJpbmZvXCIsIHtcbiAgICAgIHByZWZpeDogXCJ2aXRlOnBsdWdpbi1yZWFjdC1zZXJ2ZXIvd29ya2VyL3JzY1wiLFxuICAgIH0pLFxuICB9ID0gaGFuZGxlck9wdGlvbnM7XG5cblxuICB0cnkge1xuICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICBsb2dnZXI/LmluZm8oYFtyc2Mtd29ya2VyOiR7cm91dGV9XSBDcmVhdGluZyBSU0Mgc3RyZWFtYCk7XG4gICAgICBsb2dnZXI/LmluZm8oXG4gICAgICAgIGBbcnNjLXdvcmtlcjoke3JvdXRlfV0gaHRtbFBhdGggaW4gaGFuZGxlck9wdGlvbnM6IFwiJHtcbiAgICAgICAgICBoYW5kbGVyT3B0aW9ucy5odG1sUGF0aFxuICAgICAgICB9XCIgKHR5cGU6ICR7dHlwZW9mIGhhbmRsZXJPcHRpb25zLmh0bWxQYXRofSlgXG4gICAgICApO1xuICAgICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgICBgW3JzYy13b3JrZXI6JHtyb3V0ZX1dIEh0bWxDb21wb25lbnQgaW4gaGFuZGxlck9wdGlvbnM6ICR7XG4gICAgICAgICAgaGFuZGxlck9wdGlvbnMuSHRtbENvbXBvbmVudCA/IFwicHJlc2VudFwiIDogXCJ1bmRlZmluZWRcIlxuICAgICAgICB9YFxuICAgICAgKTtcbiAgICB9XG4gICAgLy8gQ2hlY2sgZm9yIHJldXNhYmxlIGVsZW1lbnRzIGZyb20gaGVhZGxlc3Mgc3RyZWFtXG4gICAgbGV0IGZpbmFsSGFuZGxlck9wdGlvbnMgPSB7XG4gICAgICBtb2R1bGVCYXNlOiB3b3JrZXJEYXRhLnVzZXJPcHRpb25zLm1vZHVsZUJhc2UgfHwgXCJcIixcbiAgICAgIHByb2plY3RSb290OiB3b3JrZXJEYXRhLnVzZXJPcHRpb25zLnByb2plY3RSb290IHx8IHByb2Nlc3MuY3dkKCksXG4gICAgICBjc3NGaWxlczogaGFuZGxlck9wdGlvbnNbXCJjc3NGaWxlc1wiXSB8fCBuZXcgTWFwKCksXG4gICAgICBnbG9iYWxDc3M6IGhhbmRsZXJPcHRpb25zW1wiZ2xvYmFsQ3NzXCJdIHx8IG5ldyBNYXAoKSxcbiAgICAgIG1hbmlmZXN0OiBoYW5kbGVyT3B0aW9uc1tcIm1hbmlmZXN0XCJdIHx8IHt9LFxuICAgICAgLi4uaGFuZGxlck9wdGlvbnMsXG4gICAgfTtcbiAgICBpZiAocmV1c2VIZWFkbGVzc1N0cmVhbUlkICYmIGhlYWRsZXNzU3RyZWFtRWxlbWVudHMpIHtcbiAgICAgIGNvbnN0IHJldXNhYmxlRGF0YSA9IGhlYWRsZXNzU3RyZWFtRWxlbWVudHMuZ2V0KHJldXNlSGVhZGxlc3NTdHJlYW1JZCk7XG4gICAgICBpZiAocmV1c2FibGVEYXRhKSB7XG4gICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgICAgICAgYFtyc2Mtd29ya2VyOiR7cm91dGV9XSBGb3VuZCByZXVzYWJsZSBzdHJlYW0gZnJvbSBoZWFkbGVzcyBzdHJlYW0gJHtyZXVzZUhlYWRsZXNzU3RyZWFtSWR9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVc2UgdGhlIHN0b3JlZCBSb290IGVsZW1lbnQgZGlyZWN0bHkgZm9yIHRoZSBmdWxsIHN0cmVhbVxuICAgICAgICBmaW5hbEhhbmRsZXJPcHRpb25zID0ge1xuICAgICAgICAgIC4uLmZpbmFsSGFuZGxlck9wdGlvbnMsXG4gICAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgUGFnZUNvbXBvbmVudCwgbGV0IHRoZSBmdWxsIHN0cmVhbSBjcmVhdGUgaXRzIG93biBIVE1MIHN0cnVjdHVyZVxuICAgICAgICAgIC8vIGJ1dCB3ZSdsbCB1c2UgdGhlIHN0b3JlZCBSb290IGVsZW1lbnQgaW5zdGVhZCBvZiBjcmVhdGluZyBhIG5ldyBvbmVcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAocmV1c2VIZWFkbGVzc1N0cmVhbUlkKSB7XG4gICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgICAgICAgYFtyc2Mtd29ya2VyOiR7cm91dGV9XSBObyByZXVzYWJsZSBkYXRhIGZvdW5kIGZvciBoZWFkbGVzcyBzdHJlYW0gJHtyZXVzZUhlYWRsZXNzU3RyZWFtSWR9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwYXNzVGhyb3VnaCA9XG4gICAgICByc2NTdHJlYW1PdmVycmlkZSB8fCBoYW5kbGVycy5nZXRXcml0YWJsZT8uKCkgfHwgbmV3IFBhc3NUaHJvdWdoKCk7XG5cbiAgICAvLyBObyBuZWVkIHRvIGNvbGxlY3QgY2h1bmtzIHNpbmNlIHdlJ3JlIHN0b3JpbmcgdGhlIFJlYWN0IGVsZW1lbnQgZGlyZWN0bHlcblxuICAgIC8vIENoZWNrIGlmIHdlIHNob3VsZCByZXVzZSBhIFBhZ2UgY29tcG9uZW50IGZyb20gYSBoZWFkbGVzcyBzdHJlYW1cbiAgICBsZXQgZmluYWxPcHRpb25zID0gZmluYWxIYW5kbGVyT3B0aW9ucztcbiAgICBpZiAoXG4gICAgICByZXVzZUhlYWRsZXNzU3RyZWFtSWQgJiZcbiAgICAgIGhlYWRsZXNzU3RyZWFtRWxlbWVudHM/LmhhcyhyZXVzZUhlYWRsZXNzU3RyZWFtSWQpXG4gICAgKSB7XG4gICAgICBjb25zdCByZXVzYWJsZURhdGEgPSBoZWFkbGVzc1N0cmVhbUVsZW1lbnRzLmdldChyZXVzZUhlYWRsZXNzU3RyZWFtSWQpO1xuICAgICAgaWYgKHJldXNhYmxlRGF0YSAmJiAhcmV1c2FibGVEYXRhLmVycm9yZWQpIHtcbiAgICAgICAgLy8gVXNlIHRoZSBzdG9yZWQgUGFnZSBjb21wb25lbnQgZnJvbSB0aGUgaGVhZGxlc3Mgc3RyZWFtXG4gICAgICAgIGZpbmFsT3B0aW9ucyA9IHtcbiAgICAgICAgICAuLi5maW5hbEhhbmRsZXJPcHRpb25zLFxuICAgICAgICAgIFBhZ2VDb21wb25lbnQ6IHJldXNhYmxlRGF0YS5QYWdlQ29tcG9uZW50LFxuICAgICAgICB9O1xuICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgIGxvZ2dlcj8uaW5mbyhcbiAgICAgICAgICAgIGBbcnNjLXdvcmtlcjoke3JvdXRlfV0gUmV1c2luZyBQYWdlIGNvbXBvbmVudCBmcm9tIGhlYWRsZXNzIHN0cmVhbSAke3JldXNlSGVhZGxlc3NTdHJlYW1JZH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVzZSBSZWFjdERPTVNlcnZlciBkaXJlY3RseSBpbiB0aGUgd29ya2VyXG4gICAgLy8gRm9yIGhlYWRsZXNzIHN0cmVhbXMsIHVzZSBGcmFnbWVudDsgZm9yIGZ1bGwgc3RyZWFtcywgdXNlIHRoZSBhY3R1YWwgSHRtbCBjb21wb25lbnRcbiAgICBjb25zdCBpc0hlYWRsZXNzID0gaWQuaW5jbHVkZXMoXCJoZWFkbGVzc1wiKTtcbiAgICBjb25zdCBlbGVtZW50ID0gY3JlYXRlRWxlbWVudFdpdGhSZWFjdChSZWFjdCwge1xuICAgICAgLi4uZmluYWxPcHRpb25zLFxuICAgICAgSHRtbDogaXNIZWFkbGVzcyA/IFJlYWN0LkZyYWdtZW50IDogZmluYWxPcHRpb25zLkh0bWxDb21wb25lbnQsXG4gICAgICBhczogaXNIZWFkbGVzcyA/IFJlYWN0LkZyYWdtZW50IDogXCJkaXZcIixcbiAgICB9KTtcbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgICBgW3JzYy13b3JrZXI6JHtyb3V0ZX1dIEFib3V0IHRvIHJlbmRlciBlbGVtZW50IGZvciByb3V0ZTogJHtyb3V0ZX1gXG4gICAgICApO1xuICAgICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgICBgW3JzYy13b3JrZXI6JHtyb3V0ZX1dIEVsZW1lbnQgdG8gcmVuZGVyOiAke2VsZW1lbnQgPyBPYmplY3Qua2V5cyhlbGVtZW50KS5sZW5ndGggOiAnbnVsbCd9IGtleXNgXG4gICAgICApO1xuICAgICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgICBgW3JzYy13b3JrZXI6JHtyb3V0ZX1dIFByb3BzOiAke2ZpbmFsSGFuZGxlck9wdGlvbnMgPyBPYmplY3Qua2V5cyhmaW5hbEhhbmRsZXJPcHRpb25zKS5sZW5ndGggOiAnbnVsbCd9IGtleXNgXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFNldCB1cCBjb21wbGV0aW9uIGRldGVjdGlvbiBsb2dpYyBiZWZvcmUgUmVhY3QgY2FsbGJhY2tzXG4gICAgY29uc3QgaXNNZXNzYWdlUG9ydFdyaXRhYmxlID0gaGFuZGxlcnMuZ2V0V3JpdGFibGU7XG5cbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgbG9nZ2VyPy5pbmZvKGBbcnNjLXdvcmtlcjoke3JvdXRlfV0gaXNNZXNzYWdlUG9ydFdyaXRhYmxlOiAkeyEhaXNNZXNzYWdlUG9ydFdyaXRhYmxlfWApO1xuICAgIH1cblxuICAgIGlmIChpc01lc3NhZ2VQb3J0V3JpdGFibGUpIHtcbiAgICAgIC8vIFR3by1wb3J0IG1vZGU6IFRoZSBzdHJlYW0gd2lsbCBjb21wbGV0ZSBuYXR1cmFsbHkgd2hlbiBSZWFjdCBmaW5pc2hlc1xuICAgICAgLy8gTm8gbWFudWFsIGNvbXBsZXRpb24gbG9naWMgbmVlZGVkIC0gUmVhY3Qgd2lsbCBzaWduYWwgY29tcGxldGlvbiB0aHJvdWdoIHByb3BlciBzdHJlYW0gZXZlbnRzXG4gICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICBsb2dnZXI/LmluZm8oYFtyc2Mtd29ya2VyOiR7cm91dGV9XSBUd28tcG9ydCBtb2RlIGRldGVjdGVkYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgIGxvZ2dlcj8uaW5mbyhgW3JzYy13b3JrZXI6JHtyb3V0ZX1dIFNpbmdsZS1wb3J0IG1vZGUgZGV0ZWN0ZWRgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBvblBvc3Rwb25lOiBvcHRpb25hbE9uUG9zdHBvbmUsXG4gICAgICBvbkVycm9yOiBvcHRpb25hbE9uRXJyb3IsXG4gICAgICAuLi5yZXN0XG4gICAgfSA9IGZpbmFsSGFuZGxlck9wdGlvbnNbXCJzZXJ2ZXJQaXBlYWJsZVN0cmVhbU9wdGlvbnNcIl0gfHwge307XG4gICAgY29uc3Qgc2VydmVyUGlwZWFibGVTdHJlYW1PcHRpb25zOiBSZW5kZXJUb1BpcGVhYmxlU3RyZWFtT3B0aW9ucyA9IHtcbiAgICAgIC4uLnJlc3QsXG4gICAgICBvblBvc3Rwb25lOiAocmVhc29uOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICBsb2dnZXI/LmluZm8oXG4gICAgICAgICAgICBgW3JzYy13b3JrZXI6JHtyb3V0ZX1dIENvbXBvbmVudCBwb3N0cG9uZWQgKFN1c3BlbnNlIGJvdW5kYXJ5KTogJHtyZWFzb259YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBvblBvc3Rwb25lIGlzIGZvciBTdXNwZW5zZSBib3VuZGFyaWVzIHdoZW4gY29tcG9uZW50cyBhcmUgZGVmZXJyZWRcbiAgICAgICAgLy8gVGhpcyBpcyBub3QgYWJvdXQgYmFja3ByZXNzdXJlIC0gaXQncyBhYm91dCBsYXp5IGxvYWRpbmcgYW5kIGNvbXBvbmVudCBzdXNwZW5zaW9uXG4gICAgICAgIC8vIEhhbmRsZSB0aHJvdWdoIG5vcm1hbCBoYW5kbGVyIGNoYWluLCBub3QgYXMgYSBzdHJlYW0gY29udHJvbCBzaWduYWxcblxuICAgICAgICBpZiAoaGFuZGxlcnMub25Qb3N0cG9uZSkge1xuICAgICAgICAgIGhhbmRsZXJzLm9uUG9zdHBvbmUoaWQsIHJlYXNvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbmFsT25Qb3N0cG9uZSkge1xuICAgICAgICAgIG9wdGlvbmFsT25Qb3N0cG9uZShyZWFzb24pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25FcnJvcjogKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgLy8gVHJhY2sgaGVhZGxlc3Mgc3RyZWFtIGVycm9ycyBmb3IgY29uZGl0aW9uYWwgcmV1c2UgbG9naWNcbiAgICAgICAgaWYgKGhlYWRsZXNzU3RyZWFtRXJyb3JzICYmIGhhbmRsZXJPcHRpb25zLmh0bWxQYXRoID09PSBcIlwiKSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBhIGhlYWRsZXNzIHN0cmVhbSAoaHRtbFBhdGggaXMgZW1wdHkpLCB0cmFjayB0aGUgZXJyb3JcbiAgICAgICAgICBoZWFkbGVzc1N0cmVhbUVycm9ycy5zZXQocm91dGUsIGVycm9yKTtcbiAgICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgICAgICAgICBgW3JzYy13b3JrZXI6JHtyb3V0ZX1dIFRyYWNrZWQgaGVhZGxlc3Mgc3RyZWFtIGVycm9yIGZvciByb3V0ZTogJHtyb3V0ZX1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG5cblxuICAgICAgICAvLyBTZW5kIGVycm9yIHRocm91Z2ggdG9Xb3JrZXIgZm9yIG1ldHJpY3MvbG9nZ2luZ1xuICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgIGxvZ2dlcj8uaW5mbyhcbiAgICAgICAgICAgIGBbcnNjLXdvcmtlcjoke3JvdXRlfV0gU2VuZGluZyBlcnJvciB0byBtYWluIHRocmVhZDogJHtlcnJvci5tZXNzYWdlfWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGhhbmRsZXJzLm9uRXJyb3IoaWQsIGVycm9yLCB7XG4gICAgICAgICAgcm91dGU6IHJvdXRlLFxuICAgICAgICAgIGNvbnRleHQ6IFwiUmVhY3Qgc3RyZWFtIGVycm9yXCIsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEVtaXQgcm91dGUuZXJyb3IgZXZlbnQgdG8gYWxsb3cgbWFpbiB0aHJlYWQgdG8gaGFuZGxlIHBhbmljIHRocmVzaG9sZCBsb2dpYyAobGlrZSBzZXJ2ZXItc2lkZSlcbiAgICAgICAgaWYgKGhhbmRsZXJPcHRpb25zWydvbkV2ZW50J10pIHtcbiAgICAgICAgICBoYW5kbGVyT3B0aW9uc1snb25FdmVudCddKHtcbiAgICAgICAgICAgIHR5cGU6IFwicm91dGUuZXJyb3JcIixcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgICByb3V0ZTogcm91dGUsXG4gICAgICAgICAgICAgIHBhbmljVGhyZXNob2xkOiBoYW5kbGVyT3B0aW9uc1sncGFuaWNUaHJlc2hvbGQnXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ1JJVElDQUw6IEVuc3VyZSBzdHJlYW0gaXMgZW5kZWQgd2hlbiBlcnJvciBvY2N1cnMgdG8gcHJldmVudCBoYW5naW5nIChsaWtlIHNlcnZlci1zaWRlIGRvZXMpXG4gICAgICAgIC8vIFVzZSBzZXRJbW1lZGlhdGUgdG8gZW5zdXJlIHRoZSBlcnJvciBoYW5kbGVyIGNvbXBsZXRlcyBiZWZvcmUgZW5kaW5nIHRoZSBzdHJlYW1cbiAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgICBpZiAoJ2Rlc3Ryb3llZCcgaW4gcGFzc1Rocm91Z2ggJiYgIXBhc3NUaHJvdWdoLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgcGFzc1Rocm91Z2guZW5kKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAob3B0aW9uYWxPbkVycm9yKSB7XG4gICAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICAgIGxvZ2dlcj8uaW5mbyhcbiAgICAgICAgICAgICAgYFtyc2Mtd29ya2VyOiR7cm91dGV9XSBFcnJvciBoYW5kbGluZyBjb21wbGV0ZWQsIGNhbGxpbmcgb3B0aW9uYWxPbkVycm9yYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3B0aW9uYWxPbkVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgICAgICAgYFtyc2Mtd29ya2VyOiR7cm91dGV9XSBvbkVycm9yIGhhbmRsZXIgZmluaXNoZWQgLSB3b3JrZXIgc2hvdWxkIGNvbnRpbnVlIG5vcm1hbGx5YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSBzYXRpc2ZpZXMgUmVuZGVyVG9QaXBlYWJsZVN0cmVhbU9wdGlvbnM7XG5cbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgICBgW3JzYy13b3JrZXI6JHtyb3V0ZX1dICoqKiBDQUxMSU5HIHJlbmRlclRvUGlwZWFibGVTdHJlYW0gKioqYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHBpcGUgfSA9IFJlYWN0RE9NU2VydmVyLnJlbmRlclRvUGlwZWFibGVTdHJlYW0oXG4gICAgICBlbGVtZW50LFxuICAgICAgZmluYWxIYW5kbGVyT3B0aW9ucy5tb2R1bGVCYXNlUGF0aCxcbiAgICAgIHNlcnZlclBpcGVhYmxlU3RyZWFtT3B0aW9uc1xuICAgICk7XG5cbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgICBgW3JzYy13b3JrZXI6JHtyb3V0ZX1dICoqKiByZW5kZXJUb1BpcGVhYmxlU3RyZWFtIHJldHVybmVkIHBpcGUgZnVuY3Rpb24gKioqYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgbG9nZ2VyPy5pbmZvKGBbcnNjLXdvcmtlcjoke3JvdXRlfV0gKioqIENBTExJTkcgcGlwZShwYXNzVGhyb3VnaCkgKioqYCk7XG4gICAgfVxuXG4gICAgcGlwZShwYXNzVGhyb3VnaCk7XG5cbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgICBgW3JzYy13b3JrZXI6JHtyb3V0ZX1dICoqKiBwaXBlKHBhc3NUaHJvdWdoKSBjYWxsIGNvbXBsZXRlZCAqKipgXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFR3by1wb3J0IG1vZGU6IFJlYWN0IHdpbGwgbmF0dXJhbGx5IGVuZCB0aGUgc3RyZWFtIHdoZW4gZG9uZSByZW5kZXJpbmdcbiAgICBpZiAoaXNNZXNzYWdlUG9ydFdyaXRhYmxlICYmIHZlcmJvc2UpIHtcbiAgICAgIGxvZ2dlcj8uaW5mbyhcbiAgICAgICAgYFtyc2Mtd29ya2VyOiR7cm91dGV9XSBUd28tcG9ydCBtb2RlOiB1c2luZyBzdGFuZGFyZCBwaXBlIGludGVyZmFjZSwgUmVhY3Qgd2lsbCBjYWxsIF9maW5hbCB3aGVuIGNvbXBsZXRlYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBMZXQgZXJyb3JzIGZsb3cgdGhyb3VnaCB0aGUgc3RyZWFtIG5hdHVyYWxseSAtIG1haW4gdGhyZWFkIHdpbGwgaGFuZGxlIHRoZW1cblxuICAgIC8vIFNldCB1cCBzdHJlYW0gaGFuZGxpbmcgdXNpbmcgb3VyIGhlbHBlclxuICAgIGNvbnN0IGhhc0h0bWwgPVxuICAgICAgaGFuZGxlck9wdGlvbnMuaHRtbFBhdGggIT09IFwiXCIgfHwgaGFuZGxlck9wdGlvbnMuSHRtbENvbXBvbmVudDtcblxuICAgIC8vIEluIGRldiBtb2RlLCBkb24ndCB1c2UgZmlsZS1iYXNlZCBtZXRyaWNzIGF0IGFsbCAtIGp1c3QgdHJhY2sgdGhlIHN0cmVhbVxuICAgIGNvbnN0IHJlbmRlck1ldHJpY3MgPSBjcmVhdGVSZW5kZXJNZXRyaWNzKHtcbiAgICAgIHR5cGU6IGhhc0h0bWwgPyBcInJzYy1mdWxsXCIgOiBcInJzYy1oZWFkbGVzc1wiLFxuICAgICAgcm91dGUsXG4gICAgICBmcm9tTWFpblRocmVhZDogZmFsc2UsXG4gICAgICBmcm9tUnNjV29ya2VyOiB0cnVlLFxuICAgICAgZnJvbUh0bWxXb3JrZXI6IGZhbHNlLFxuICAgICAgcHJvY2Vzc2luZ1RpbWU6IDAsXG4gICAgICBjaHVua3M6IDAsXG4gICAgICAvLyBObyBmaWxlIHBhdGhzIGluIGRldiBtb2RlIC0gd2UncmUgbm90IHdyaXRpbmcgZmlsZXNcbiAgICB9KTtcblxuXG4gICAgLy8gU2V0IHVwIGNvbXBsZXRpb24gZGV0ZWN0aW9uIGJhc2VkIG9uIHN0cmVhbSB0eXBlXG5cbiAgICAvLyBTZXQgdXAgY29tcGxldGlvbiBkZXRlY3Rpb24gZm9yIGJvdGggc2luZ2xlLXBvcnQgYW5kIHR3by1wb3J0IG1vZGVzXG4gICAgLy8gU2luY2Ugb25BbGxSZWFkeSBpcyBub3Qgd29ya2luZyBpbiB0aGUgcGF0Y2hlZCB2ZXJzaW9uLCB1c2Ugc3RyZWFtIGVuZCBldmVudFxuICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICBsb2dnZXI/LmluZm8oXG4gICAgICAgIGBbcnNjLXdvcmtlcjoke3JvdXRlfV0gU2V0dGluZyB1cCBzdHJlYW0gY29tcGxldGlvbiBkZXRlY3Rpb24gKG9uQWxsUmVhZHkgbm90IHdvcmtpbmcgaW4gcGF0Y2hlZCB2ZXJzaW9uKWBcbiAgICAgICk7XG4gICAgfVxuICAgIFxuICAgIGlmIChpc01lc3NhZ2VQb3J0V3JpdGFibGUpIHtcbiAgICAgIC8vIFR3by1wb3J0IG1vZGU6IG1vbml0b3IgZGF0YSBmbG93XG4gICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICBsb2dnZXI/LmluZm8oYFtyc2Mtd29ya2VyOiR7cm91dGV9XSBUd28tcG9ydCBtb2RlIGRldGVjdGVkYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNpbmdsZS1wb3J0IG1vZGU6IFNldCB1cCBkYXRhLWJhc2VkIGNvbXBsZXRpb24gZGV0ZWN0aW9uXG5cbiAgICAgIHBhc3NUaHJvdWdoLm9uKFwiZGF0YVwiLCAoY2h1bms6IEJ1ZmZlcikgPT4ge1xuICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgIGxvZ2dlcj8uaW5mbyhcbiAgICAgICAgICAgIGBbcnNjLXdvcmtlcjoke3JvdXRlfV0gU2luZ2xlLXBvcnQgbW9kZSBkYXRhIGNodW5rIHJlY2VpdmVkOiAke1xuICAgICAgICAgICAgICBjaHVuay5sZW5ndGhcbiAgICAgICAgICAgIH0gYnl0ZXMsIGNvbnRlbnQ6ICR7Y2h1bmsudG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTAwKX0uLi5gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERhdGEgY2h1bmsgcmVjZWl2ZWRcblxuICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgIGxvZ2dlcj8uaW5mbyhcbiAgICAgICAgICAgIGBbcnNjLXdvcmtlcjoke3JvdXRlfV0gRGF0YSBjaHVuayByZWNlaXZlZCwgcmVzZXR0aW5nIGNvbXBsZXRpb24gdGltZXIuIENodW5rIGNvbnRlbnQ6ICR7Y2h1bmtcbiAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgLnN1YnN0cmluZygwLCAxMDApfS4uLmBcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2FsbCBvbkRhdGEgZm9yIGJvdGggc2luZ2xlLXBvcnQgYW5kIHR3by1wb3J0IGNvbW11bmljYXRpb25cbiAgICAgICAgaGFuZGxlcnMub25EYXRhKGlkLCBjaHVuayk7XG4gICAgICAgIHJlbmRlck1ldHJpY3Muc3RyZWFtTWV0cmljcy5jaHVua3MrKztcbiAgICAgICAgcmVuZGVyTWV0cmljcy5zdHJlYW1NZXRyaWNzLmJ5dGVzICs9IGNodW5rLmxlbmd0aDtcblxuICAgICAgICAvLyBEYXRhIHJlY2VpdmVkXG4gICAgICB9KTtcbiAgICB9IC8vIEVuZCBvZiBzaW5nbGUtcG9ydCBtb2RlIGVsc2UgYmxvY2tcblxuICAgIC8vIFVuaWZpZWQgc3RyZWFtIGVuZCBoYW5kbGVyIGZvciBib3RoIHNpbmdsZS1wb3J0IGFuZCB0d28tcG9ydCBtb2Rlc1xuICAgIHBhc3NUaHJvdWdoLm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgIGxvZ2dlcj8uaW5mbyhgW3JzYy13b3JrZXI6JHtyb3V0ZX1dICoqKiBTVFJFQU0gRU5EIEVWRU5UIEZJUkVEICoqKmApO1xuICAgICAgfVxuXG5cbiAgICAgIC8vIFN0cmVhbSBjb21wbGV0ZWQgbmF0dXJhbGx5XG4gICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICBsb2dnZXI/LmluZm8oXG4gICAgICAgICAgYFtyc2Mtd29ya2VyOiR7cm91dGV9XSBTdHJlYW0gY29tcGxldGVkIG5hdHVyYWxseSwgY2hlY2tpbmcgZm9yIGhlYWRsZXNzIHN0cmVhbSByZXVzZWBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gU3RvcmUgUGFnZSBjb21wb25lbnQgZm9yIHJldXNlIGlmIHRoaXMgaXMgYSBoZWFkbGVzcyBzdHJlYW0gYW5kIG5vIGVycm9ycyBvY2N1cnJlZFxuICAgICAgaWYgKFxuICAgICAgICBoZWFkbGVzc1N0cmVhbUVsZW1lbnRzICYmXG4gICAgICAgIGlkLmluY2x1ZGVzKFwiaGVhZGxlc3NcIikgJiZcbiAgICAgICAgIWhlYWRsZXNzU3RyZWFtRXJyb3JzPy5oYXMocm91dGUpXG4gICAgICApIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIGhlYWRsZXNzIHN0cmVhbSB0aGF0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIHN0b3JlIHRoZSBQYWdlIGNvbXBvbmVudCBmb3IgcmV1c2VcbiAgICAgICAgY29uc3QgZGF0YVRvU3RvcmUgPSB7XG4gICAgICAgICAgUGFnZUNvbXBvbmVudDogZmluYWxIYW5kbGVyT3B0aW9uc1tcIlBhZ2VDb21wb25lbnRcIl0sIC8vIFN0b3JlIHRoZSBQYWdlIGNvbXBvbmVudCBmdW5jdGlvblxuICAgICAgICAgIGVycm9yZWQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgICBoZWFkbGVzc1N0cmVhbUVsZW1lbnRzLnNldChpZCwgZGF0YVRvU3RvcmUpO1xuICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgIGxvZ2dlcj8uaW5mbyhcbiAgICAgICAgICAgIGBbcnNjLXdvcmtlcjoke3JvdXRlfV0gU3RvcmVkIFBhZ2UgY29tcG9uZW50IGZvciBoZWFkbGVzcyBzdHJlYW0gJHtpZH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDYWxsIG9uRW5kIGZvciBib3RoIHNpbmdsZS1wb3J0IGFuZCB0d28tcG9ydCBjb21tdW5pY2F0aW9uXG4gICAgICAvLyBUaGlzIG1pcnJvcnMgdGhlIEhUTUwgd29ya2VyIHBhdHRlcm4gYW5kIGVuc3VyZXMgcHJvcGVyIHN0cmVhbSBjbGVhbnVwXG4gICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICBsb2dnZXI/LmluZm8oXG4gICAgICAgICAgYFtyc2Mtd29ya2VyOiR7cm91dGV9XSBDYWxsaW5nIGhhbmRsZXJzLm9uRW5kKCR7aWR9KSBmcm9tIGVuZCBldmVudCB0byB0cmlnZ2VyIGNvbXBsZXRpb25gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBoYW5kbGVycy5vbkVuZChpZCk7XG4gICAgICByZW5kZXJNZXRyaWNzLnN0cmVhbU1ldHJpY3MuZHVyYXRpb24gPVxuICAgICAgICBwZXJmb3JtYW5jZS5ub3coKSAtIHJlbmRlck1ldHJpY3Muc3RyZWFtTWV0cmljcy5zdGFydFRpbWU7XG4gICAgICBoYW5kbGVycy5vbk1ldHJpY3MoaWQsIHJlbmRlck1ldHJpY3MgYXMgYW55KTtcbiAgICB9KTtcblxuICAgIC8vIEFsc28gaGFuZGxlIHRoZSAnY2xvc2UnIGV2ZW50IGFzIGEgZmFsbGJhY2tcbiAgICBwYXNzVGhyb3VnaC5vbihcImNsb3NlXCIsICgpID0+IHtcbiAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgIGxvZ2dlcj8uaW5mbyhgW3JzYy13b3JrZXI6JHtyb3V0ZX1dICoqKiBTVFJFQU0gQ0xPU0UgRVZFTlQgRklSRUQgKioqYCk7XG4gICAgICB9XG4gICAgICAvLyBTdHJlYW0gY29tcGxldGVkXG5cbiAgICAgIC8vIFN0b3JlIFBhZ2UgY29tcG9uZW50IGZvciByZXVzZSBpZiB0aGlzIGlzIGEgaGVhZGxlc3Mgc3RyZWFtIGFuZCBubyBlcnJvcnMgb2NjdXJyZWRcbiAgICAgIGlmIChcbiAgICAgICAgaGVhZGxlc3NTdHJlYW1FbGVtZW50cyAmJlxuICAgICAgICBpZC5pbmNsdWRlcyhcImhlYWRsZXNzXCIpICYmXG4gICAgICAgICFoZWFkbGVzc1N0cmVhbUVycm9ycz8uaGFzKHJvdXRlKVxuICAgICAgKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBoZWFkbGVzcyBzdHJlYW0gdGhhdCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCBzdG9yZSB0aGUgUGFnZSBjb21wb25lbnQgZm9yIHJldXNlXG4gICAgICAgIGNvbnN0IGRhdGFUb1N0b3JlID0ge1xuICAgICAgICAgIFBhZ2VDb21wb25lbnQ6IGZpbmFsSGFuZGxlck9wdGlvbnNbXCJQYWdlQ29tcG9uZW50XCJdLCAvLyBTdG9yZSB0aGUgUGFnZSBjb21wb25lbnQgZnVuY3Rpb25cbiAgICAgICAgICBlcnJvcmVkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgICAgaGVhZGxlc3NTdHJlYW1FbGVtZW50cy5zZXQoaWQsIGRhdGFUb1N0b3JlKTtcbiAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICBsb2dnZXI/LmluZm8oXG4gICAgICAgICAgICBgW3JzYy13b3JrZXI6JHtyb3V0ZX1dIFN0b3JlZCBQYWdlIGNvbXBvbmVudCBmb3IgaGVhZGxlc3Mgc3RyZWFtICR7aWR9IChmcm9tIGNsb3NlIGV2ZW50KWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENhbGwgb25FbmQgZm9yIGJvdGggc2luZ2xlLXBvcnQgYW5kIHR3by1wb3J0IGNvbW11bmljYXRpb25cbiAgICAgIC8vIFRoaXMgbWlycm9ycyB0aGUgSFRNTCB3b3JrZXIgcGF0dGVybiBhbmQgZW5zdXJlcyBwcm9wZXIgc3RyZWFtIGNsZWFudXBcbiAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgIGxvZ2dlcj8uaW5mbyhcbiAgICAgICAgICBgW3JzYy13b3JrZXI6JHtyb3V0ZX1dIENhbGxpbmcgaGFuZGxlcnMub25FbmQoJHtpZH0pIGZyb20gY2xvc2UgZXZlbnQgdG8gdHJpZ2dlciBjb21wbGV0aW9uYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaGFuZGxlcnMub25FbmQoaWQpO1xuICAgICAgcmVuZGVyTWV0cmljcy5zdHJlYW1NZXRyaWNzLmR1cmF0aW9uID1cbiAgICAgICAgcGVyZm9ybWFuY2Uubm93KCkgLSByZW5kZXJNZXRyaWNzLnN0cmVhbU1ldHJpY3Muc3RhcnRUaW1lO1xuICAgICAgaGFuZGxlcnMub25NZXRyaWNzKGlkLCByZW5kZXJNZXRyaWNzIGFzIGFueSk7XG4gICAgfSk7XG5cbiAgICBwYXNzVGhyb3VnaC5vbihcInBpcGVcIiwgKHNyYzogYW55KSA9PiB7XG4gICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICBsb2dnZXI/LmluZm8oXG4gICAgICAgICAgYFtyc2Mtd29ya2VyOiR7cm91dGV9XSAqKiogU1RSRUFNIFBJUEUgRVZFTlQgRklSRUQgKioqIHJlYWRhYmxlRW5kZWQ6ICR7c3JjLnJlYWRhYmxlRW5kZWR9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcGFzc1Rocm91Z2gub24oXCJmaW5pc2hcIiwgKCkgPT4ge1xuICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgbG9nZ2VyPy5pbmZvKGBbcnNjLXdvcmtlcjoke3JvdXRlfV0gKioqIFNUUkVBTSBGSU5JU0ggRVZFTlQgRklSRUQgKioqYCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBwYXNzVGhyb3VnaC5vbihcImVycm9yXCIsIChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgbG9nZ2VyPy5lcnJvcihgW3JzYy13b3JrZXI6JHtyb3V0ZX1dIFN0cmVhbSBlcnJvcjogJHtlcnJvcn1gKTtcbiAgICAgIH1cbiAgICAgIC8vIENoZWNrIGlmIGl0J3MgYSBOb2RlLmpzIHN0cmVhbSB3aXRoIGVycm9yZWQgcHJvcGVydHlcbiAgICAgIGlmIChcImVycm9yZWRcIiBpbiBwYXNzVGhyb3VnaCAmJiBwYXNzVGhyb3VnaC5lcnJvcmVkKSB7XG4gICAgICAgIC8vIGFscmVhZHkgaGFuZGxlZCBieSB0aGUgc3RyZWFtXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFNlbmQgZXJyb3IgdGhyb3VnaCB0b1dvcmtlciAtIGxldCBtYWluIHRocmVhZCBoYW5kbGUgcGFuaWMgdGhyZXNob2xkIGxvZ2ljXG4gICAgICBoYW5kbGVycy5vbkVycm9yKGlkLCBlcnJvciwge1xuICAgICAgICByb3V0ZTogcm91dGUsXG4gICAgICAgIGNvbnRleHQ6IFwiUlNDIFN0cmVhbSBFcnJvclwiLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIEVuc3VyZSBzdHJlYW0gaXMgcHJvcGVybHkgZW5kZWQgd2hlbiBlcnJvciBvY2N1cnMgdG8gcHJldmVudCBcIkNvbm5lY3Rpb24gY2xvc2VkXCIgZXJyb3JzXG4gICAgICBoYW5kbGVycy5vbkVuZChpZCk7XG5cbiAgICAgIC8vIEVuc3VyZSBzdHJlYW0gaXMgZW5kZWQgd2hlbiBlcnJvciBvY2N1cnMgdG8gcHJldmVudCBoYW5naW5nXG4gICAgICAvLyBDaGVjayBpZiBpdCdzIGEgTm9kZS5qcyBzdHJlYW0gd2l0aCBkZXN0cm95ZWQgcHJvcGVydHlcbiAgICAgIGlmIChcImRlc3Ryb3llZFwiIGluIHBhc3NUaHJvdWdoICYmICFwYXNzVGhyb3VnaC5kZXN0cm95ZWQpIHtcbiAgICAgICAgcGFzc1Rocm91Z2guZW5kKCk7XG4gICAgICB9IGVsc2UgaWYgKFwiZW5kXCIgaW4gcGFzc1Rocm91Z2gpIHtcbiAgICAgICAgLy8gRm9yIFdyaXRhYmxlU3RyZWFtIHRoYXQgZG9lc24ndCBoYXZlIGRlc3Ryb3llZCBwcm9wZXJ0eVxuICAgICAgICBwYXNzVGhyb3VnaC5lbmQoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICBsb2dnZXI/LmluZm8oXG4gICAgICAgIGBbcnNjLXdvcmtlcjoke3JvdXRlfV0gUmVuZGVyIHNldHVwIGNvbXBsZXRlIGZvciByb3V0ZTogJHtyb3V0ZX0gLSBmdW5jdGlvbiByZXR1cm5pbmcsIHdvcmtlciBzaG91bGQgY29udGludWVgXG4gICAgICApO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgbG9nZ2VyPy5lcnJvcihcbiAgICAgICAgYFtyc2Mtd29ya2VyOiR7cm91dGV9XSBFcnJvciBpbiBoYW5kbGVSZW5kZXI6ICR7XG4gICAgICAgICAgKGVycm9yIGFzIEVycm9yKT8ubWVzc2FnZSA/PyBcIm5vIG1lc3NhZ2VcIlxuICAgICAgICB9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBTZW5kIGVycm9yIHRocm91Z2ggdG9Xb3JrZXIgLSBsZXQgbWFpbiB0aHJlYWQgaGFuZGxlIHBhbmljIHRocmVzaG9sZCBsb2dpY1xuICAgIGhhbmRsZXJzLm9uRXJyb3IoaWQsIGVycm9yLCB7XG4gICAgICByb3V0ZTogcm91dGUsXG4gICAgICBjb250ZXh0OiBcIlJTQyBXb3JrZXIgRXJyb3JcIixcbiAgICB9KTtcblxuICAgIC8vIENhbGwgb25FbmQgZm9yIGJvdGggc2luZ2xlLXBvcnQgYW5kIHR3by1wb3J0IGNvbW11bmljYXRpb25cbiAgICBoYW5kbGVycy5vbkVuZChpZCk7XG4gIH1cbn07XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBd0NPLE1BQU0sa0JBQXFDLFNBQVMsZ0JBQUEsQ0FDekQsZ0JBQ0EsUUFDQSxFQUFBLGlCQUFBLEVBQ0Esd0JBQ0Esb0JBQ0EsRUFBQTtBQUNBLEVBQU0sTUFBQTtBQUFBLElBQ0osRUFBQTtBQUFBLElBQ0EsS0FBQTtBQUFBLElBQ0EsT0FBQTtBQUFBLElBQ0EscUJBQUE7QUFBQSxJQUNBLE1BQVMsR0FBQSxZQUFBLENBQWEsVUFBVyxDQUFBLGNBQUEsRUFBZ0IsWUFBWSxNQUFRLEVBQUE7QUFBQSxNQUNuRSxNQUFRLEVBQUE7QUFBQSxLQUNUO0FBQUEsR0FDQyxHQUFBLGNBQUE7QUFHSixFQUFJLElBQUE7QUFDRixJQUFBLElBQUksT0FBUyxFQUFBO0FBQ1gsTUFBUSxNQUFBLEVBQUEsSUFBQSxDQUFLLENBQWUsWUFBQSxFQUFBLEtBQUssQ0FBdUIscUJBQUEsQ0FBQSxDQUFBO0FBQ3hELE1BQVEsTUFBQSxFQUFBLElBQUE7QUFBQSxRQUNOLENBQUEsWUFBQSxFQUFlLEtB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
351
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlUnNjUmVuZGVyLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wbHVnaW4vd29ya2VyL3JzYy9oYW5kbGVSc2NSZW5kZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlUmVuZGVyTWV0cmljcyB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL21ldHJpY3MuanNcIjtcbmltcG9ydCB7IHdvcmtlckRhdGEgfSBmcm9tIFwibm9kZTp3b3JrZXJfdGhyZWFkc1wiO1xuaW1wb3J0IHsgUGFzc1Rocm91Z2ggfSBmcm9tIFwibm9kZTpzdHJlYW1cIjtcbmltcG9ydCB0eXBlIHsgSGFuZGxlUnNjUmVuZGVyRm4gfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCB7XG4gIFJlYWN0LFxuICBSZWFjdERPTVNlcnZlcixcbiAgdHlwZSBSZW5kZXJUb1BpcGVhYmxlU3RyZWFtT3B0aW9ucyxcbn0gZnJvbSBcIi4uLy4uL3ZlbmRvci92ZW5kb3Iuc2VydmVyLmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50V2l0aFJlYWN0IH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvY3JlYXRlRWxlbWVudFdpdGhSZWFjdC5qc1wiO1xuaW1wb3J0IHsgY2hlY2tSZWFjdEV4cGVyaW1lbnRhbCB9IGZyb20gXCIuLi8uLi91dGlscy9jaGVja1JlYWN0VmVyc2lvbi5qc1wiO1xuLyoqXG4gKiBIYW5kbGVzIHRoZSByZW5kZXJpbmcgb2YgUmVhY3QgU2VydmVyIENvbXBvbmVudCBzdHJlYW1zIGluIHRoZSBSU0Mgd29ya2VyIHRocmVhZC5cbiAqXG4gKiAqKlB1cnBvc2UqKjogQ3JlYXRlcyBSZWFjdCBTZXJ2ZXIgQ29tcG9uZW50IHN0cmVhbXMgdXNpbmcgUmVhY3RET01TZXJ2ZXIucmVuZGVyVG9QaXBlYWJsZVN0cmVhbVxuICogYW5kIG1hbmFnZXMgdGhlIHN0cmVhbSBsaWZlY3ljbGUsIGVycm9yIGhhbmRsaW5nLCBhbmQgZWxlbWVudCByZXVzZSBmb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLlxuICpcbiAqICoqS2V5IEZlYXR1cmVzKio6XG4gKiAtICoqU3RyZWFtIENyZWF0aW9uKio6IFVzZXMgUmVhY3RET01TZXJ2ZXIucmVuZGVyVG9QaXBlYWJsZVN0cmVhbSBmb3IgUlNDIHJlbmRlcmluZ1xuICogLSAqKkVycm9yIEhhbmRsaW5nKio6IENhdGNoZXMgUmVhY3QgcmVuZGVyaW5nIGVycm9ycyB2aWEgb25FcnJvciBjYWxsYmFjayBhbmQgY29tbXVuaWNhdGVzIHRvIG1haW4gdGhyZWFkXG4gKiAtICoqU3RyZWFtIFJldXNlKio6IE1hbmFnZXMgaGVhZGxlc3Mgc3RyZWFtIGVsZW1lbnQgcmV1c2UgZm9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvblxuICogLSAqKk1ldHJpY3MgQ29sbGVjdGlvbioqOiBUcmFja3MgcmVuZGVyaW5nIHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgdXNhZ2VcbiAqXG4gKiAqKkVycm9yIEhhbmRsaW5nIFN0cmF0ZWd5Kio6XG4gKiAtIFJlYWN0IHJlbmRlcmluZyBlcnJvcnMgYXJlIGNhdWdodCBieSBSZWFjdERPTVNlcnZlci5vbkVycm9yIGNhbGxiYWNrXG4gKiAtIEVycm9ycyBhcmUgc2VudCB0byBtYWluIHRocmVhZCB2aWEgaGFuZGxlcnMub25FcnJvciB3aXRoIGNvbnRleHQgaW5mb3JtYXRpb25cbiAqIC0gSGVhZGxlc3Mgc3RyZWFtIGVycm9ycyBhcmUgdHJhY2tlZCBmb3IgY29uZGl0aW9uYWwgcmV1c2UgbG9naWNcbiAqIC0gU3RyZWFtIGlzIHByb3Blcmx5IGVuZGVkIGV2ZW4gd2hlbiBlcnJvcnMgb2NjdXJcbiAqXG4gKiAqKlN0cmVhbSBUeXBlcyoqOlxuICogLSAqKkhlYWRsZXNzIFN0cmVhbXMqKjogUGFnZSBjb250ZW50IG9ubHkgKG5vIEhUTUwgd3JhcHBlcikgZm9yIC5yc2MgZmlsZXNcbiAqIC0gKipGdWxsIFN0cmVhbXMqKjogQ29tcGxldGUgSFRNTCBzdHJ1Y3R1cmUgZm9yIEhUTUwgZ2VuZXJhdGlvblxuICpcbiAqIEBwYXJhbSBoYW5kbGVyT3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgUlNDIHJlbmRlcmluZ1xuICogQHBhcmFtIGhhbmRsZXJzIC0gRXZlbnQgaGFuZGxlcnMgZm9yIHN0cmVhbSBsaWZlY3ljbGUgbWFuYWdlbWVudFxuICogQHBhcmFtIHJzY1N0cmVhbU92ZXJyaWRlIC0gT3B0aW9uYWwgb3ZlcnJpZGUgZm9yIFJTQyBzdHJlYW0gKGZvciB0ZXN0aW5nKVxuICogQHBhcmFtIGhlYWRsZXNzU3RyZWFtRWxlbWVudHMgLSBNYXAgZm9yIHN0b3JpbmcgcmV1c2FibGUgaGVhZGxlc3Mgc3RyZWFtIGVsZW1lbnRzXG4gKiBAcGFyYW0gaGVhZGxlc3NTdHJlYW1FcnJvcnMgLSBNYXAgZm9yIHRyYWNraW5nIGhlYWRsZXNzIHN0cmVhbSBlcnJvcnNcbiAqIEByZXR1cm5zIFJTQyBzdHJlYW0gcmVzdWx0IHdpdGggbWV0cmljcyBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnRcbiAqL1xuZXhwb3J0IGNvbnN0IGhhbmRsZVJzY1JlbmRlcjogSGFuZGxlUnNjUmVuZGVyRm4gPSBmdW5jdGlvbiBfaGFuZGxlUnNjUmVuZGVyKFxuICBoYW5kbGVyT3B0aW9ucyxcbiAgaGFuZGxlcnMsXG4gIHJzY1N0cmVhbU92ZXJyaWRlLFxuICBoZWFkbGVzc1N0cmVhbUVsZW1lbnRzLFxuICBoZWFkbGVzc1N0cmVhbUVycm9yc1xuKSB7XG4gIGNvbnN0IHtcbiAgICBpZCxcbiAgICByb3V0ZSxcbiAgICB2ZXJib3NlLFxuICAgIHJldXNlSGVhZGxlc3NTdHJlYW1JZCxcbiAgICBsb2dnZXIgPSBjcmVhdGVMb2dnZXIod29ya2VyRGF0YS5yZXNvbHZlZENvbmZpZz8ubG9nTGV2ZWwgPz8gXCJpbmZvXCIsIHtcbiAgICAgIHByZWZpeDogXCJ2aXRlOnBsdWdpbi1yZWFjdC1zZXJ2ZXIvd29ya2VyL3JzY1wiLFxuICAgIH0pLFxuICB9ID0gaGFuZGxlck9wdGlvbnM7XG5cblxuICB0cnkge1xuICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICBsb2dnZXI/LmluZm8oYFtyc2Mtd29ya2VyOiR7cm91dGV9XSBDcmVhdGluZyBSU0Mgc3RyZWFtYCk7XG4gICAgICBsb2dnZXI/LmluZm8oXG4gICAgICAgIGBbcnNjLXdvcmtlcjoke3JvdXRlfV0gaHRtbFBhdGggaW4gaGFuZGxlck9wdGlvbnM6IFwiJHtcbiAgICAgICAgICBoYW5kbGVyT3B0aW9ucy5odG1sUGF0aFxuICAgICAgICB9XCIgKHR5cGU6ICR7dHlwZW9mIGhhbmRsZXJPcHRpb25zLmh0bWxQYXRofSlgXG4gICAgICApO1xuICAgICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgICBgW3JzYy13b3JrZXI6JHtyb3V0ZX1dIEh0bWxDb21wb25lbnQgaW4gaGFuZGxlck9wdGlvbnM6ICR7XG4gICAgICAgICAgaGFuZGxlck9wdGlvbnMuSHRtbENvbXBvbmVudCA/IFwicHJlc2VudFwiIDogXCJ1bmRlZmluZWRcIlxuICAgICAgICB9YFxuICAgICAgKTtcbiAgICB9XG4gICAgLy8gQ2hlY2sgZm9yIHJldXNhYmxlIGVsZW1lbnRzIGZyb20gaGVhZGxlc3Mgc3RyZWFtXG4gICAgbGV0IGZpbmFsSGFuZGxlck9wdGlvbnMgPSB7XG4gICAgICBtb2R1bGVCYXNlOiB3b3JrZXJEYXRhLnVzZXJPcHRpb25zLm1vZHVsZUJhc2UgfHwgXCJcIixcbiAgICAgIHByb2plY3RSb290OiB3b3JrZXJEYXRhLnVzZXJPcHRpb25zLnByb2plY3RSb290IHx8IHByb2Nlc3MuY3dkKCksXG4gICAgICBjc3NGaWxlczogaGFuZGxlck9wdGlvbnNbXCJjc3NGaWxlc1wiXSB8fCBuZXcgTWFwKCksXG4gICAgICBnbG9iYWxDc3M6IGhhbmRsZXJPcHRpb25zW1wiZ2xvYmFsQ3NzXCJdIHx8IG5ldyBNYXAoKSxcbiAgICAgIG1hbmlmZXN0OiBoYW5kbGVyT3B0aW9uc1tcIm1hbmlmZXN0XCJdIHx8IHt9LFxuICAgICAgLi4uaGFuZGxlck9wdGlvbnMsXG4gICAgfTtcbiAgICBpZiAocmV1c2VIZWFkbGVzc1N0cmVhbUlkICYmIGhlYWRsZXNzU3RyZWFtRWxlbWVudHMpIHtcbiAgICAgIGNvbnN0IHJldXNhYmxlRGF0YSA9IGhlYWRsZXNzU3RyZWFtRWxlbWVudHMuZ2V0KHJldXNlSGVhZGxlc3NTdHJlYW1JZCk7XG4gICAgICBpZiAocmV1c2FibGVEYXRhKSB7XG4gICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgICAgICAgYFtyc2Mtd29ya2VyOiR7cm91dGV9XSBGb3VuZCByZXVzYWJsZSBzdHJlYW0gZnJvbSBoZWFkbGVzcyBzdHJlYW0gJHtyZXVzZUhlYWRsZXNzU3RyZWFtSWR9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVc2UgdGhlIHN0b3JlZCBSb290IGVsZW1lbnQgZGlyZWN0bHkgZm9yIHRoZSBmdWxsIHN0cmVhbVxuICAgICAgICBmaW5hbEhhbmRsZXJPcHRpb25zID0ge1xuICAgICAgICAgIC4uLmZpbmFsSGFuZGxlck9wdGlvbnMsXG4gICAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgUGFnZUNvbXBvbmVudCwgbGV0IHRoZSBmdWxsIHN0cmVhbSBjcmVhdGUgaXRzIG93biBIVE1MIHN0cnVjdHVyZVxuICAgICAgICAgIC8vIGJ1dCB3ZSdsbCB1c2UgdGhlIHN0b3JlZCBSb290IGVsZW1lbnQgaW5zdGVhZCBvZiBjcmVhdGluZyBhIG5ldyBvbmVcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAocmV1c2VIZWFkbGVzc1N0cmVhbUlkKSB7XG4gICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgICAgICAgYFtyc2Mtd29ya2VyOiR7cm91dGV9XSBObyByZXVzYWJsZSBkYXRhIGZvdW5kIGZvciBoZWFkbGVzcyBzdHJlYW0gJHtyZXVzZUhlYWRsZXNzU3RyZWFtSWR9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwYXNzVGhyb3VnaCA9XG4gICAgICByc2NTdHJlYW1PdmVycmlkZSB8fCBoYW5kbGVycy5nZXRXcml0YWJsZT8uKCkgfHwgbmV3IFBhc3NUaHJvdWdoKCk7XG5cbiAgICAvLyBObyBuZWVkIHRvIGNvbGxlY3QgY2h1bmtzIHNpbmNlIHdlJ3JlIHN0b3JpbmcgdGhlIFJlYWN0IGVsZW1lbnQgZGlyZWN0bHlcblxuICAgIC8vIENoZWNrIGlmIHdlIHNob3VsZCByZXVzZSBhIFBhZ2UgY29tcG9uZW50IGZyb20gYSBoZWFkbGVzcyBzdHJlYW1cbiAgICBsZXQgZmluYWxPcHRpb25zID0gZmluYWxIYW5kbGVyT3B0aW9ucztcbiAgICBpZiAoXG4gICAgICByZXVzZUhlYWRsZXNzU3RyZWFtSWQgJiZcbiAgICAgIGhlYWRsZXNzU3RyZWFtRWxlbWVudHM/LmhhcyhyZXVzZUhlYWRsZXNzU3RyZWFtSWQpXG4gICAgKSB7XG4gICAgICBjb25zdCByZXVzYWJsZURhdGEgPSBoZWFkbGVzc1N0cmVhbUVsZW1lbnRzLmdldChyZXVzZUhlYWRsZXNzU3RyZWFtSWQpO1xuICAgICAgaWYgKHJldXNhYmxlRGF0YSAmJiAhcmV1c2FibGVEYXRhLmVycm9yZWQpIHtcbiAgICAgICAgLy8gVXNlIHRoZSBzdG9yZWQgUGFnZSBjb21wb25lbnQgZnJvbSB0aGUgaGVhZGxlc3Mgc3RyZWFtXG4gICAgICAgIGZpbmFsT3B0aW9ucyA9IHtcbiAgICAgICAgICAuLi5maW5hbEhhbmRsZXJPcHRpb25zLFxuICAgICAgICAgIFBhZ2VDb21wb25lbnQ6IHJldXNhYmxlRGF0YS5QYWdlQ29tcG9uZW50LFxuICAgICAgICB9O1xuICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgIGxvZ2dlcj8uaW5mbyhcbiAgICAgICAgICAgIGBbcnNjLXdvcmtlcjoke3JvdXRlfV0gUmV1c2luZyBQYWdlIGNvbXBvbmVudCBmcm9tIGhlYWRsZXNzIHN0cmVhbSAke3JldXNlSGVhZGxlc3NTdHJlYW1JZH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVzZSBSZWFjdERPTVNlcnZlciBkaXJlY3RseSBpbiB0aGUgd29ya2VyXG4gICAgLy8gRm9yIGhlYWRsZXNzIHN0cmVhbXMsIHVzZSBGcmFnbWVudDsgZm9yIGZ1bGwgc3RyZWFtcywgdXNlIHRoZSBhY3R1YWwgSHRtbCBjb21wb25lbnRcbiAgICBjb25zdCBpc0hlYWRsZXNzID0gaWQuaW5jbHVkZXMoXCJoZWFkbGVzc1wiKTtcbiAgICBjb25zdCBlbGVtZW50ID0gY3JlYXRlRWxlbWVudFdpdGhSZWFjdChSZWFjdCwge1xuICAgICAgLi4uZmluYWxPcHRpb25zLFxuICAgICAgSHRtbDogaXNIZWFkbGVzcyA/IFJlYWN0LkZyYWdtZW50IDogZmluYWxPcHRpb25zLkh0bWxDb21wb25lbnQsXG4gICAgICBhczogaXNIZWFkbGVzcyA/IFJlYWN0LkZyYWdtZW50IDogXCJkaXZcIixcbiAgICB9KTtcbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgICBgW3JzYy13b3JrZXI6JHtyb3V0ZX1dIEFib3V0IHRvIHJlbmRlciBlbGVtZW50IGZvciByb3V0ZTogJHtyb3V0ZX1gXG4gICAgICApO1xuICAgICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgICBgW3JzYy13b3JrZXI6JHtyb3V0ZX1dIEVsZW1lbnQgdG8gcmVuZGVyOiAke2VsZW1lbnQgPyBPYmplY3Qua2V5cyhlbGVtZW50KS5sZW5ndGggOiAnbnVsbCd9IGtleXNgXG4gICAgICApO1xuICAgICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgICBgW3JzYy13b3JrZXI6JHtyb3V0ZX1dIFByb3BzOiAke2ZpbmFsSGFuZGxlck9wdGlvbnMgPyBPYmplY3Qua2V5cyhmaW5hbEhhbmRsZXJPcHRpb25zKS5sZW5ndGggOiAnbnVsbCd9IGtleXNgXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFNldCB1cCBjb21wbGV0aW9uIGRldGVjdGlvbiBsb2dpYyBiZWZvcmUgUmVhY3QgY2FsbGJhY2tzXG4gICAgY29uc3QgaXNNZXNzYWdlUG9ydFdyaXRhYmxlID0gaGFuZGxlcnMuZ2V0V3JpdGFibGU7XG5cbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgbG9nZ2VyPy5pbmZvKGBbcnNjLXdvcmtlcjoke3JvdXRlfV0gaXNNZXNzYWdlUG9ydFdyaXRhYmxlOiAkeyEhaXNNZXNzYWdlUG9ydFdyaXRhYmxlfWApO1xuICAgIH1cblxuICAgIGlmIChpc01lc3NhZ2VQb3J0V3JpdGFibGUpIHtcbiAgICAgIC8vIFR3by1wb3J0IG1vZGU6IFRoZSBzdHJlYW0gd2lsbCBjb21wbGV0ZSBuYXR1cmFsbHkgd2hlbiBSZWFjdCBmaW5pc2hlc1xuICAgICAgLy8gTm8gbWFudWFsIGNvbXBsZXRpb24gbG9naWMgbmVlZGVkIC0gUmVhY3Qgd2lsbCBzaWduYWwgY29tcGxldGlvbiB0aHJvdWdoIHByb3BlciBzdHJlYW0gZXZlbnRzXG4gICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICBsb2dnZXI/LmluZm8oYFtyc2Mtd29ya2VyOiR7cm91dGV9XSBUd28tcG9ydCBtb2RlIGRldGVjdGVkYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgIGxvZ2dlcj8uaW5mbyhgW3JzYy13b3JrZXI6JHtyb3V0ZX1dIFNpbmdsZS1wb3J0IG1vZGUgZGV0ZWN0ZWRgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBvblBvc3Rwb25lOiBvcHRpb25hbE9uUG9zdHBvbmUsXG4gICAgICBvbkVycm9yOiBvcHRpb25hbE9uRXJyb3IsXG4gICAgICAuLi5yZXN0XG4gICAgfSA9IGZpbmFsSGFuZGxlck9wdGlvbnNbXCJzZXJ2ZXJQaXBlYWJsZVN0cmVhbU9wdGlvbnNcIl0gfHwge307XG4gICAgY29uc3Qgc2VydmVyUGlwZWFibGVTdHJlYW1PcHRpb25zOiBSZW5kZXJUb1BpcGVhYmxlU3RyZWFtT3B0aW9ucyA9IHtcbiAgICAgIC4uLnJlc3QsXG4gICAgICBvblBvc3Rwb25lOiAocmVhc29uOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICBsb2dnZXI/LmluZm8oXG4gICAgICAgICAgICBgW3JzYy13b3JrZXI6JHtyb3V0ZX1dIENvbXBvbmVudCBwb3N0cG9uZWQgKFN1c3BlbnNlIGJvdW5kYXJ5KTogJHtyZWFzb259YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBvblBvc3Rwb25lIGlzIGZvciBTdXNwZW5zZSBib3VuZGFyaWVzIHdoZW4gY29tcG9uZW50cyBhcmUgZGVmZXJyZWRcbiAgICAgICAgLy8gVGhpcyBpcyBub3QgYWJvdXQgYmFja3ByZXNzdXJlIC0gaXQncyBhYm91dCBsYXp5IGxvYWRpbmcgYW5kIGNvbXBvbmVudCBzdXNwZW5zaW9uXG4gICAgICAgIC8vIEhhbmRsZSB0aHJvdWdoIG5vcm1hbCBoYW5kbGVyIGNoYWluLCBub3QgYXMgYSBzdHJlYW0gY29udHJvbCBzaWduYWxcblxuICAgICAgICBpZiAoaGFuZGxlcnMub25Qb3N0cG9uZSkge1xuICAgICAgICAgIGhhbmRsZXJzLm9uUG9zdHBvbmUoaWQsIHJlYXNvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbmFsT25Qb3N0cG9uZSkge1xuICAgICAgICAgIG9wdGlvbmFsT25Qb3N0cG9uZShyZWFzb24pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25FcnJvcjogKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgLy8gVHJhY2sgaGVhZGxlc3Mgc3RyZWFtIGVycm9ycyBmb3IgY29uZGl0aW9uYWwgcmV1c2UgbG9naWNcbiAgICAgICAgaWYgKGhlYWRsZXNzU3RyZWFtRXJyb3JzICYmIGhhbmRsZXJPcHRpb25zLmh0bWxQYXRoID09PSBcIlwiKSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBhIGhlYWRsZXNzIHN0cmVhbSAoaHRtbFBhdGggaXMgZW1wdHkpLCB0cmFjayB0aGUgZXJyb3JcbiAgICAgICAgICBoZWFkbGVzc1N0cmVhbUVycm9ycy5zZXQocm91dGUsIGVycm9yKTtcbiAgICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgICAgICAgICBgW3JzYy13b3JrZXI6JHtyb3V0ZX1dIFRyYWNrZWQgaGVhZGxlc3Mgc3RyZWFtIGVycm9yIGZvciByb3V0ZTogJHtyb3V0ZX1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG5cblxuICAgICAgICAvLyBTZW5kIGVycm9yIHRocm91Z2ggdG9Xb3JrZXIgZm9yIG1ldHJpY3MvbG9nZ2luZ1xuICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgIGxvZ2dlcj8uaW5mbyhcbiAgICAgICAgICAgIGBbcnNjLXdvcmtlcjoke3JvdXRlfV0gU2VuZGluZyBlcnJvciB0byBtYWluIHRocmVhZDogJHtlcnJvci5tZXNzYWdlfWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGhhbmRsZXJzLm9uRXJyb3IoaWQsIGVycm9yLCB7XG4gICAgICAgICAgcm91dGU6IHJvdXRlLFxuICAgICAgICAgIGNvbnRleHQ6IFwiUmVhY3Qgc3RyZWFtIGVycm9yXCIsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEVtaXQgcm91dGUuZXJyb3IgZXZlbnQgdG8gYWxsb3cgbWFpbiB0aHJlYWQgdG8gaGFuZGxlIHBhbmljIHRocmVzaG9sZCBsb2dpYyAobGlrZSBzZXJ2ZXItc2lkZSlcbiAgICAgICAgaWYgKGhhbmRsZXJPcHRpb25zWydvbkV2ZW50J10pIHtcbiAgICAgICAgICBoYW5kbGVyT3B0aW9uc1snb25FdmVudCddKHtcbiAgICAgICAgICAgIHR5cGU6IFwicm91dGUuZXJyb3JcIixcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgICByb3V0ZTogcm91dGUsXG4gICAgICAgICAgICAgIHBhbmljVGhyZXNob2xkOiBoYW5kbGVyT3B0aW9uc1sncGFuaWNUaHJlc2hvbGQnXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ1JJVElDQUw6IEVuc3VyZSBzdHJlYW0gaXMgZW5kZWQgd2hlbiBlcnJvciBvY2N1cnMgdG8gcHJldmVudCBoYW5naW5nIChsaWtlIHNlcnZlci1zaWRlIGRvZXMpXG4gICAgICAgIC8vIFVzZSBzZXRJbW1lZGlhdGUgdG8gZW5zdXJlIHRoZSBlcnJvciBoYW5kbGVyIGNvbXBsZXRlcyBiZWZvcmUgZW5kaW5nIHRoZSBzdHJlYW1cbiAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgICBpZiAoJ2Rlc3Ryb3llZCcgaW4gcGFzc1Rocm91Z2ggJiYgIXBhc3NUaHJvdWdoLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgcGFzc1Rocm91Z2guZW5kKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAob3B0aW9uYWxPbkVycm9yKSB7XG4gICAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICAgIGxvZ2dlcj8uaW5mbyhcbiAgICAgICAgICAgICAgYFtyc2Mtd29ya2VyOiR7cm91dGV9XSBFcnJvciBoYW5kbGluZyBjb21wbGV0ZWQsIGNhbGxpbmcgb3B0aW9uYWxPbkVycm9yYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3B0aW9uYWxPbkVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgICAgICAgYFtyc2Mtd29ya2VyOiR7cm91dGV9XSBvbkVycm9yIGhhbmRsZXIgZmluaXNoZWQgLSB3b3JrZXIgc2hvdWxkIGNvbnRpbnVlIG5vcm1hbGx5YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSBzYXRpc2ZpZXMgUmVuZGVyVG9QaXBlYWJsZVN0cmVhbU9wdGlvbnM7XG5cbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgICBgW3JzYy13b3JrZXI6JHtyb3V0ZX1dICoqKiBDQUxMSU5HIHJlbmRlclRvUGlwZWFibGVTdHJlYW0gKioqYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjaGVja1JlYWN0RXhwZXJpbWVudGFsKCk7XG4gICAgY29uc3QgeyBwaXBlIH0gPSBSZWFjdERPTVNlcnZlci5yZW5kZXJUb1BpcGVhYmxlU3RyZWFtKFxuICAgICAgZWxlbWVudCxcbiAgICAgIGZpbmFsSGFuZGxlck9wdGlvbnMubW9kdWxlQmFzZVBhdGgsXG4gICAgICBzZXJ2ZXJQaXBlYWJsZVN0cmVhbU9wdGlvbnNcbiAgICApO1xuXG4gICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgIGxvZ2dlcj8uaW5mbyhcbiAgICAgICAgYFtyc2Mtd29ya2VyOiR7cm91dGV9XSAqKiogcmVuZGVyVG9QaXBlYWJsZVN0cmVhbSByZXR1cm5lZCBwaXBlIGZ1bmN0aW9uICoqKmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgIGxvZ2dlcj8uaW5mbyhgW3JzYy13b3JrZXI6JHtyb3V0ZX1dICoqKiBDQUxMSU5HIHBpcGUocGFzc1Rocm91Z2gpICoqKmApO1xuICAgIH1cblxuICAgIHBpcGUocGFzc1Rocm91Z2gpO1xuXG4gICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgIGxvZ2dlcj8uaW5mbyhcbiAgICAgICAgYFtyc2Mtd29ya2VyOiR7cm91dGV9XSAqKiogcGlwZShwYXNzVGhyb3VnaCkgY2FsbCBjb21wbGV0ZWQgKioqYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBUd28tcG9ydCBtb2RlOiBSZWFjdCB3aWxsIG5hdHVyYWxseSBlbmQgdGhlIHN0cmVhbSB3aGVuIGRvbmUgcmVuZGVyaW5nXG4gICAgaWYgKGlzTWVzc2FnZVBvcnRXcml0YWJsZSAmJiB2ZXJib3NlKSB7XG4gICAgICBsb2dnZXI/LmluZm8oXG4gICAgICAgIGBbcnNjLXdvcmtlcjoke3JvdXRlfV0gVHdvLXBvcnQgbW9kZTogdXNpbmcgc3RhbmRhcmQgcGlwZSBpbnRlcmZhY2UsIFJlYWN0IHdpbGwgY2FsbCBfZmluYWwgd2hlbiBjb21wbGV0ZWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gTGV0IGVycm9ycyBmbG93IHRocm91Z2ggdGhlIHN0cmVhbSBuYXR1cmFsbHkgLSBtYWluIHRocmVhZCB3aWxsIGhhbmRsZSB0aGVtXG5cbiAgICAvLyBTZXQgdXAgc3RyZWFtIGhhbmRsaW5nIHVzaW5nIG91ciBoZWxwZXJcbiAgICBjb25zdCBoYXNIdG1sID1cbiAgICAgIGhhbmRsZXJPcHRpb25zLmh0bWxQYXRoICE9PSBcIlwiIHx8IGhhbmRsZXJPcHRpb25zLkh0bWxDb21wb25lbnQ7XG5cbiAgICAvLyBJbiBkZXYgbW9kZSwgZG9uJ3QgdXNlIGZpbGUtYmFzZWQgbWV0cmljcyBhdCBhbGwgLSBqdXN0IHRyYWNrIHRoZSBzdHJlYW1cbiAgICBjb25zdCByZW5kZXJNZXRyaWNzID0gY3JlYXRlUmVuZGVyTWV0cmljcyh7XG4gICAgICB0eXBlOiBoYXNIdG1sID8gXCJyc2MtZnVsbFwiIDogXCJyc2MtaGVhZGxlc3NcIixcbiAgICAgIHJvdXRlLFxuICAgICAgZnJvbU1haW5UaHJlYWQ6IGZhbHNlLFxuICAgICAgZnJvbVJzY1dvcmtlcjogdHJ1ZSxcbiAgICAgIGZyb21IdG1sV29ya2VyOiBmYWxzZSxcbiAgICAgIHByb2Nlc3NpbmdUaW1lOiAwLFxuICAgICAgY2h1bmtzOiAwLFxuICAgICAgLy8gTm8gZmlsZSBwYXRocyBpbiBkZXYgbW9kZSAtIHdlJ3JlIG5vdCB3cml0aW5nIGZpbGVzXG4gICAgfSk7XG5cblxuICAgIC8vIFNldCB1cCBjb21wbGV0aW9uIGRldGVjdGlvbiBiYXNlZCBvbiBzdHJlYW0gdHlwZVxuXG4gICAgLy8gU2V0IHVwIGNvbXBsZXRpb24gZGV0ZWN0aW9uIGZvciBib3RoIHNpbmdsZS1wb3J0IGFuZCB0d28tcG9ydCBtb2Rlc1xuICAgIC8vIFNpbmNlIG9uQWxsUmVhZHkgaXMgbm90IHdvcmtpbmcgaW4gdGhlIHBhdGNoZWQgdmVyc2lvbiwgdXNlIHN0cmVhbSBlbmQgZXZlbnRcbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgICBgW3JzYy13b3JrZXI6JHtyb3V0ZX1dIFNldHRpbmcgdXAgc3RyZWFtIGNvbXBsZXRpb24gZGV0ZWN0aW9uIChvbkFsbFJlYWR5IG5vdCB3b3JraW5nIGluIHBhdGNoZWQgdmVyc2lvbilgXG4gICAgICApO1xuICAgIH1cbiAgICBcbiAgICBpZiAoaXNNZXNzYWdlUG9ydFdyaXRhYmxlKSB7XG4gICAgICAvLyBUd28tcG9ydCBtb2RlOiBtb25pdG9yIGRhdGEgZmxvd1xuICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgbG9nZ2VyPy5pbmZvKGBbcnNjLXdvcmtlcjoke3JvdXRlfV0gVHdvLXBvcnQgbW9kZSBkZXRlY3RlZGApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTaW5nbGUtcG9ydCBtb2RlOiBTZXQgdXAgZGF0YS1iYXNlZCBjb21wbGV0aW9uIGRldGVjdGlvblxuXG4gICAgICBwYXNzVGhyb3VnaC5vbihcImRhdGFcIiwgKGNodW5rOiBCdWZmZXIpID0+IHtcbiAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICBsb2dnZXI/LmluZm8oXG4gICAgICAgICAgICBgW3JzYy13b3JrZXI6JHtyb3V0ZX1dIFNpbmdsZS1wb3J0IG1vZGUgZGF0YSBjaHVuayByZWNlaXZlZDogJHtcbiAgICAgICAgICAgICAgY2h1bmsubGVuZ3RoXG4gICAgICAgICAgICB9IGJ5dGVzLCBjb250ZW50OiAke2NodW5rLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDAsIDEwMCl9Li4uYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEYXRhIGNodW5rIHJlY2VpdmVkXG5cbiAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICBsb2dnZXI/LmluZm8oXG4gICAgICAgICAgICBgW3JzYy13b3JrZXI6JHtyb3V0ZX1dIERhdGEgY2h1bmsgcmVjZWl2ZWQsIHJlc2V0dGluZyBjb21wbGV0aW9uIHRpbWVyLiBDaHVuayBjb250ZW50OiAke2NodW5rXG4gICAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAgIC5zdWJzdHJpbmcoMCwgMTAwKX0uLi5gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENhbGwgb25EYXRhIGZvciBib3RoIHNpbmdsZS1wb3J0IGFuZCB0d28tcG9ydCBjb21tdW5pY2F0aW9uXG4gICAgICAgIGhhbmRsZXJzLm9uRGF0YShpZCwgY2h1bmspO1xuICAgICAgICByZW5kZXJNZXRyaWNzLnN0cmVhbU1ldHJpY3MuY2h1bmtzKys7XG4gICAgICAgIHJlbmRlck1ldHJpY3Muc3RyZWFtTWV0cmljcy5ieXRlcyArPSBjaHVuay5sZW5ndGg7XG5cbiAgICAgICAgLy8gRGF0YSByZWNlaXZlZFxuICAgICAgfSk7XG4gICAgfSAvLyBFbmQgb2Ygc2luZ2xlLXBvcnQgbW9kZSBlbHNlIGJsb2NrXG5cbiAgICAvLyBVbmlmaWVkIHN0cmVhbSBlbmQgaGFuZGxlciBmb3IgYm90aCBzaW5nbGUtcG9ydCBhbmQgdHdvLXBvcnQgbW9kZXNcbiAgICBwYXNzVGhyb3VnaC5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICBsb2dnZXI/LmluZm8oYFtyc2Mtd29ya2VyOiR7cm91dGV9XSAqKiogU1RSRUFNIEVORCBFVkVOVCBGSVJFRCAqKipgKTtcbiAgICAgIH1cblxuXG4gICAgICAvLyBTdHJlYW0gY29tcGxldGVkIG5hdHVyYWxseVxuICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgICAgIGBbcnNjLXdvcmtlcjoke3JvdXRlfV0gU3RyZWFtIGNvbXBsZXRlZCBuYXR1cmFsbHksIGNoZWNraW5nIGZvciBoZWFkbGVzcyBzdHJlYW0gcmV1c2VgXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFN0b3JlIFBhZ2UgY29tcG9uZW50IGZvciByZXVzZSBpZiB0aGlzIGlzIGEgaGVhZGxlc3Mgc3RyZWFtIGFuZCBubyBlcnJvcnMgb2NjdXJyZWRcbiAgICAgIGlmIChcbiAgICAgICAgaGVhZGxlc3NTdHJlYW1FbGVtZW50cyAmJlxuICAgICAgICBpZC5pbmNsdWRlcyhcImhlYWRsZXNzXCIpICYmXG4gICAgICAgICFoZWFkbGVzc1N0cmVhbUVycm9ycz8uaGFzKHJvdXRlKVxuICAgICAgKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBoZWFkbGVzcyBzdHJlYW0gdGhhdCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCBzdG9yZSB0aGUgUGFnZSBjb21wb25lbnQgZm9yIHJldXNlXG4gICAgICAgIGNvbnN0IGRhdGFUb1N0b3JlID0ge1xuICAgICAgICAgIFBhZ2VDb21wb25lbnQ6IGZpbmFsSGFuZGxlck9wdGlvbnNbXCJQYWdlQ29tcG9uZW50XCJdLCAvLyBTdG9yZSB0aGUgUGFnZSBjb21wb25lbnQgZnVuY3Rpb25cbiAgICAgICAgICBlcnJvcmVkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgICAgaGVhZGxlc3NTdHJlYW1FbGVtZW50cy5zZXQoaWQsIGRhdGFUb1N0b3JlKTtcbiAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICBsb2dnZXI/LmluZm8oXG4gICAgICAgICAgICBgW3JzYy13b3JrZXI6JHtyb3V0ZX1dIFN0b3JlZCBQYWdlIGNvbXBvbmVudCBmb3IgaGVhZGxlc3Mgc3RyZWFtICR7aWR9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2FsbCBvbkVuZCBmb3IgYm90aCBzaW5nbGUtcG9ydCBhbmQgdHdvLXBvcnQgY29tbXVuaWNhdGlvblxuICAgICAgLy8gVGhpcyBtaXJyb3JzIHRoZSBIVE1MIHdvcmtlciBwYXR0ZXJuIGFuZCBlbnN1cmVzIHByb3BlciBzdHJlYW0gY2xlYW51cFxuICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgICAgIGBbcnNjLXdvcmtlcjoke3JvdXRlfV0gQ2FsbGluZyBoYW5kbGVycy5vbkVuZCgke2lkfSkgZnJvbSBlbmQgZXZlbnQgdG8gdHJpZ2dlciBjb21wbGV0aW9uYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaGFuZGxlcnMub25FbmQoaWQpO1xuICAgICAgcmVuZGVyTWV0cmljcy5zdHJlYW1NZXRyaWNzLmR1cmF0aW9uID1cbiAgICAgICAgcGVyZm9ybWFuY2Uubm93KCkgLSByZW5kZXJNZXRyaWNzLnN0cmVhbU1ldHJpY3Muc3RhcnRUaW1lO1xuICAgICAgaGFuZGxlcnMub25NZXRyaWNzKGlkLCByZW5kZXJNZXRyaWNzIGFzIGFueSk7XG4gICAgfSk7XG5cbiAgICAvLyBBbHNvIGhhbmRsZSB0aGUgJ2Nsb3NlJyBldmVudCBhcyBhIGZhbGxiYWNrXG4gICAgcGFzc1Rocm91Z2gub24oXCJjbG9zZVwiLCAoKSA9PiB7XG4gICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICBsb2dnZXI/LmluZm8oYFtyc2Mtd29ya2VyOiR7cm91dGV9XSAqKiogU1RSRUFNIENMT1NFIEVWRU5UIEZJUkVEICoqKmApO1xuICAgICAgfVxuICAgICAgLy8gU3RyZWFtIGNvbXBsZXRlZFxuXG4gICAgICAvLyBTdG9yZSBQYWdlIGNvbXBvbmVudCBmb3IgcmV1c2UgaWYgdGhpcyBpcyBhIGhlYWRsZXNzIHN0cmVhbSBhbmQgbm8gZXJyb3JzIG9jY3VycmVkXG4gICAgICBpZiAoXG4gICAgICAgIGhlYWRsZXNzU3RyZWFtRWxlbWVudHMgJiZcbiAgICAgICAgaWQuaW5jbHVkZXMoXCJoZWFkbGVzc1wiKSAmJlxuICAgICAgICAhaGVhZGxlc3NTdHJlYW1FcnJvcnM/Lmhhcyhyb3V0ZSlcbiAgICAgICkge1xuICAgICAgICAvLyBUaGlzIGlzIGEgaGVhZGxlc3Mgc3RyZWFtIHRoYXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgc3RvcmUgdGhlIFBhZ2UgY29tcG9uZW50IGZvciByZXVzZVxuICAgICAgICBjb25zdCBkYXRhVG9TdG9yZSA9IHtcbiAgICAgICAgICBQYWdlQ29tcG9uZW50OiBmaW5hbEhhbmRsZXJPcHRpb25zW1wiUGFnZUNvbXBvbmVudFwiXSwgLy8gU3RvcmUgdGhlIFBhZ2UgY29tcG9uZW50IGZ1bmN0aW9uXG4gICAgICAgICAgZXJyb3JlZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICAgIGhlYWRsZXNzU3RyZWFtRWxlbWVudHMuc2V0KGlkLCBkYXRhVG9TdG9yZSk7XG4gICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgICAgICAgYFtyc2Mtd29ya2VyOiR7cm91dGV9XSBTdG9yZWQgUGFnZSBjb21wb25lbnQgZm9yIGhlYWRsZXNzIHN0cmVhbSAke2lkfSAoZnJvbSBjbG9zZSBldmVudClgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDYWxsIG9uRW5kIGZvciBib3RoIHNpbmdsZS1wb3J0IGFuZCB0d28tcG9ydCBjb21tdW5pY2F0aW9uXG4gICAgICAvLyBUaGlzIG1pcnJvcnMgdGhlIEhUTUwgd29ya2VyIHBhdHRlcm4gYW5kIGVuc3VyZXMgcHJvcGVyIHN0cmVhbSBjbGVhbnVwXG4gICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICBsb2dnZXI/LmluZm8oXG4gICAgICAgICAgYFtyc2Mtd29ya2VyOiR7cm91dGV9XSBDYWxsaW5nIGhhbmRsZXJzLm9uRW5kKCR7aWR9KSBmcm9tIGNsb3NlIGV2ZW50IHRvIHRyaWdnZXIgY29tcGxldGlvbmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGhhbmRsZXJzLm9uRW5kKGlkKTtcbiAgICAgIHJlbmRlck1ldHJpY3Muc3RyZWFtTWV0cmljcy5kdXJhdGlvbiA9XG4gICAgICAgIHBlcmZvcm1hbmNlLm5vdygpIC0gcmVuZGVyTWV0cmljcy5zdHJlYW1NZXRyaWNzLnN0YXJ0VGltZTtcbiAgICAgIGhhbmRsZXJzLm9uTWV0cmljcyhpZCwgcmVuZGVyTWV0cmljcyBhcyBhbnkpO1xuICAgIH0pO1xuXG4gICAgcGFzc1Rocm91Z2gub24oXCJwaXBlXCIsIChzcmM6IGFueSkgPT4ge1xuICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgICAgIGBbcnNjLXdvcmtlcjoke3JvdXRlfV0gKioqIFNUUkVBTSBQSVBFIEVWRU5UIEZJUkVEICoqKiByZWFkYWJsZUVuZGVkOiAke3NyYy5yZWFkYWJsZUVuZGVkfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHBhc3NUaHJvdWdoLm9uKFwiZmluaXNoXCIsICgpID0+IHtcbiAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgIGxvZ2dlcj8uaW5mbyhgW3JzYy13b3JrZXI6JHtyb3V0ZX1dICoqKiBTVFJFQU0gRklOSVNIIEVWRU5UIEZJUkVEICoqKmApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcGFzc1Rocm91Z2gub24oXCJlcnJvclwiLCAoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgIGxvZ2dlcj8uZXJyb3IoYFtyc2Mtd29ya2VyOiR7cm91dGV9XSBTdHJlYW0gZXJyb3I6ICR7ZXJyb3J9YCk7XG4gICAgICB9XG4gICAgICAvLyBDaGVjayBpZiBpdCdzIGEgTm9kZS5qcyBzdHJlYW0gd2l0aCBlcnJvcmVkIHByb3BlcnR5XG4gICAgICBpZiAoXCJlcnJvcmVkXCIgaW4gcGFzc1Rocm91Z2ggJiYgcGFzc1Rocm91Z2guZXJyb3JlZCkge1xuICAgICAgICAvLyBhbHJlYWR5IGhhbmRsZWQgYnkgdGhlIHN0cmVhbVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBTZW5kIGVycm9yIHRocm91Z2ggdG9Xb3JrZXIgLSBsZXQgbWFpbiB0aHJlYWQgaGFuZGxlIHBhbmljIHRocmVzaG9sZCBsb2dpY1xuICAgICAgaGFuZGxlcnMub25FcnJvcihpZCwgZXJyb3IsIHtcbiAgICAgICAgcm91dGU6IHJvdXRlLFxuICAgICAgICBjb250ZXh0OiBcIlJTQyBTdHJlYW0gRXJyb3JcIixcbiAgICAgIH0pO1xuXG4gICAgICAvLyBFbnN1cmUgc3RyZWFtIGlzIHByb3Blcmx5IGVuZGVkIHdoZW4gZXJyb3Igb2NjdXJzIHRvIHByZXZlbnQgXCJDb25uZWN0aW9uIGNsb3NlZFwiIGVycm9yc1xuICAgICAgaGFuZGxlcnMub25FbmQoaWQpO1xuXG4gICAgICAvLyBFbnN1cmUgc3RyZWFtIGlzIGVuZGVkIHdoZW4gZXJyb3Igb2NjdXJzIHRvIHByZXZlbnQgaGFuZ2luZ1xuICAgICAgLy8gQ2hlY2sgaWYgaXQncyBhIE5vZGUuanMgc3RyZWFtIHdpdGggZGVzdHJveWVkIHByb3BlcnR5XG4gICAgICBpZiAoXCJkZXN0cm95ZWRcIiBpbiBwYXNzVGhyb3VnaCAmJiAhcGFzc1Rocm91Z2guZGVzdHJveWVkKSB7XG4gICAgICAgIHBhc3NUaHJvdWdoLmVuZCgpO1xuICAgICAgfSBlbHNlIGlmIChcImVuZFwiIGluIHBhc3NUaHJvdWdoKSB7XG4gICAgICAgIC8vIEZvciBXcml0YWJsZVN0cmVhbSB0aGF0IGRvZXNuJ3QgaGF2ZSBkZXN0cm95ZWQgcHJvcGVydHlcbiAgICAgICAgcGFzc1Rocm91Z2guZW5kKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgICBgW3JzYy13b3JrZXI6JHtyb3V0ZX1dIFJlbmRlciBzZXR1cCBjb21wbGV0ZSBmb3Igcm91dGU6ICR7cm91dGV9IC0gZnVuY3Rpb24gcmV0dXJuaW5nLCB3b3JrZXIgc2hvdWxkIGNvbnRpbnVlYFxuICAgICAgKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgIGxvZ2dlcj8uZXJyb3IoXG4gICAgICAgIGBbcnNjLXdvcmtlcjoke3JvdXRlfV0gRXJyb3IgaW4gaGFuZGxlUmVuZGVyOiAke1xuICAgICAgICAgIChlcnJvciBhcyBFcnJvcik/Lm1lc3NhZ2UgPz8gXCJubyBtZXNzYWdlXCJcbiAgICAgICAgfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gU2VuZCBlcnJvciB0aHJvdWdoIHRvV29ya2VyIC0gbGV0IG1haW4gdGhyZWFkIGhhbmRsZSBwYW5pYyB0aHJlc2hvbGQgbG9naWNcbiAgICBoYW5kbGVycy5vbkVycm9yKGlkLCBlcnJvciwge1xuICAgICAgcm91dGU6IHJvdXRlLFxuICAgICAgY29udGV4dDogXCJSU0MgV29ya2VyIEVycm9yXCIsXG4gICAgfSk7XG5cbiAgICAvLyBDYWxsIG9uRW5kIGZvciBib3RoIHNpbmdsZS1wb3J0IGFuZCB0d28tcG9ydCBjb21tdW5pY2F0aW9uXG4gICAgaGFuZGxlcnMub25FbmQoaWQpO1xuICB9XG59O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUF5Q08sTUFBTSxrQkFBcUMsU0FBUyxnQkFBQSxDQUN6RCxnQkFDQSxRQUNBLEVBQUEsaUJBQUEsRUFDQSx3QkFDQSxvQkFDQSxFQUFBO0FBQ0EsRUFBTSxNQUFBO0FBQUEsSUFDSixFQUFBO0FBQUEsSUFDQSxLQUFBO0FBQUEsSUFDQSxPQUFBO0FBQUEsSUFDQSxxQkFBQTtBQUFBLElBQ0EsTUFBUyxHQUFBLFlBQUEsQ0FBYSxVQUFXLENBQUEsY0FBQSxFQUFnQixZQUFZLE1BQVEsRUFBQTtBQUFBLE1BQ25FLE1BQVEsRUFBQTtBQUFBLEtBQ1Q7QUFBQSxHQUNDLEdBQUEsY0FBQTtBQUdKLEVBQUksSUFBQTtBQUNGLElBQUEsSUFBSSxPQUFTLEVBQUE7QUFDWCxNQUFRLE1BQUEs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