@mnaoumov/obsidian-dev-toolkit 3.2.0 → 3.2.1

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 (87) hide show
  1. package/dist/lib/cjs/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +1 -75
  2. package/dist/lib/cjs/bundlers/esbuild-impl/dependency.cjs +3 -77
  3. package/dist/lib/cjs/bundlers/esbuild-impl/feature-options.cjs +1 -75
  4. package/dist/lib/cjs/bundlers/esbuild-impl/fix-source-maps-plugin.cjs +1 -75
  5. package/dist/lib/cjs/bundlers/esbuild-impl/index.cjs +1 -75
  6. package/dist/lib/cjs/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +1 -75
  7. package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.cjs +3 -76
  8. package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.d.cts +1 -1
  9. package/dist/lib/cjs/bundlers/esbuild-impl/rename-css-plugin.cjs +1 -75
  10. package/dist/lib/cjs/bundlers/esbuild.cjs +1 -75
  11. package/dist/lib/cjs/bundlers/index.cjs +1 -75
  12. package/dist/lib/cjs/bundlers/obsidian-cli-reload.cjs +1 -75
  13. package/dist/lib/cjs/bundlers/obsidian-plugin-build.cjs +1 -75
  14. package/dist/lib/cjs/bundlers/obsidian-plugin-features.cjs +1 -75
  15. package/dist/lib/cjs/bundlers/obsidian-plugin-transforms.cjs +1 -75
  16. package/dist/lib/cjs/bundlers/obsidian-plugin-webpack-loader.cjs +1 -75
  17. package/dist/lib/cjs/bundlers/obsidian-plugins-folder-deployment.cjs +32 -85
  18. package/dist/lib/cjs/bundlers/parcel.cjs +112 -81
  19. package/dist/lib/cjs/bundlers/parcel.d.cts +13 -6
  20. package/dist/lib/cjs/bundlers/rollup-compatible-features.cjs +1 -75
  21. package/dist/lib/cjs/bundlers/rollup-compatible.cjs +1 -75
  22. package/dist/lib/cjs/bundlers/rollup.cjs +1 -75
  23. package/dist/lib/cjs/bundlers/vite.cjs +1 -75
  24. package/dist/lib/cjs/bundlers/webpack.cjs +3 -77
  25. package/dist/lib/cjs/demo-vault-app-json.cjs +1 -75
  26. package/dist/lib/cjs/demo-vault-buttons.cjs +1 -75
  27. package/dist/lib/cjs/demo-vault-cli.cjs +1 -75
  28. package/dist/lib/cjs/demo-vault-coverage.cjs +1 -75
  29. package/dist/lib/cjs/demo-vault.cjs +3 -77
  30. package/dist/lib/cjs/docs-site/index.cjs +1 -75
  31. package/dist/lib/cjs/docs-site/obsidian-external-type-links.cjs +1 -75
  32. package/dist/lib/cjs/formatters/dprint.cjs +1 -75
  33. package/dist/lib/cjs/formatters/index.cjs +1 -75
  34. package/dist/lib/cjs/index.cjs +1 -75
  35. package/dist/lib/cjs/integration-test-setup.cjs +1 -75
  36. package/dist/lib/cjs/integration-test-vitest-global-setup.cjs +1 -75
  37. package/dist/lib/cjs/jest-setup.cjs +1 -75
  38. package/dist/lib/cjs/linters/eslint-config.cjs +1 -75
  39. package/dist/lib/cjs/linters/eslint-rules/index.cjs +1 -75
  40. package/dist/lib/cjs/linters/eslint-rules/manifest-description.cjs +1 -75
  41. package/dist/lib/cjs/linters/eslint-rules/manifest-helpers.cjs +1 -75
  42. package/dist/lib/cjs/linters/eslint-rules/manifest-id.cjs +1 -75
  43. package/dist/lib/cjs/linters/eslint-rules/manifest-name.cjs +1 -75
  44. package/dist/lib/cjs/linters/eslint-rules/manifest-schema.cjs +1 -75
  45. package/dist/lib/cjs/linters/eslint-rules/no-local-obsidian-internals.cjs +1 -75
  46. package/dist/lib/cjs/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.cjs +2 -77
  47. package/dist/lib/cjs/linters/eslint-rules/no-untrusted-input-events.cjs +1 -75
  48. package/dist/lib/cjs/linters/eslint-rules/obsidian-dev-toolkit-plugin.cjs +1 -75
  49. package/dist/lib/cjs/linters/eslint-rules/plugin-name-as-code-in-ui.cjs +1 -75
  50. package/dist/lib/cjs/linters/eslint-rules/plugin-name-as-code.cjs +1 -75
  51. package/dist/lib/cjs/linters/eslint-rules/require-component-suffix.cjs +1 -75
  52. package/dist/lib/cjs/linters/eslint-rules/require-plugin-api-contract-schemas.cjs +1 -75
  53. package/dist/lib/cjs/linters/eslint.cjs +1 -75
  54. package/dist/lib/cjs/linters/index.cjs +1 -75
  55. package/dist/lib/cjs/linters/markdownlint-cli2-config.cjs +1 -75
  56. package/dist/lib/cjs/linters/markdownlint-rules/index.cjs +1 -75
  57. package/dist/lib/cjs/linters/markdownlint-rules/plugin-name-as-code.cjs +1 -75
  58. package/dist/lib/cjs/linters/markdownlint.cjs +1 -75
  59. package/dist/lib/cjs/linters/obsidianmd-rule-custom-message.cjs +1 -75
  60. package/dist/lib/cjs/linters/plugin-names.cjs +1 -75
  61. package/dist/lib/cjs/obsidian-plugin-repo-paths.cjs +1 -75
  62. package/dist/lib/cjs/setup.cjs +1 -75
  63. package/dist/lib/cjs/templates.cjs +3 -77
  64. package/dist/lib/cjs/test-runners/coverage-badge-cli.cjs +1 -75
  65. package/dist/lib/cjs/test-runners/coverage-badge.cjs +1 -75
  66. package/dist/lib/cjs/test-runners/e2e-runner-support.cjs +1 -75
  67. package/dist/lib/cjs/test-runners/index.cjs +1 -75
  68. package/dist/lib/cjs/test-runners/integration-test-plugin.cjs +3 -77
  69. package/dist/lib/cjs/test-runners/jest-config.cjs +1 -75
  70. package/dist/lib/cjs/test-runners/obsidian-test-runner.cjs +1 -75
  71. package/dist/lib/cjs/test-runners/performance-eval-cap.cjs +4 -75
  72. package/dist/lib/cjs/test-runners/performance-eval-cap.d.cts +12 -3
  73. package/dist/lib/cjs/test-runners/stale-build-global-setup.cjs +1 -75
  74. package/dist/lib/cjs/test-runners/vitest-config.cjs +4 -80
  75. package/dist/lib/cjs/test-runners/wdio-obsidian.cjs +1 -75
  76. package/dist/lib/cjs/version.cjs +1 -75
  77. package/dist/lib/cjs/vitest-setup.cjs +1 -75
  78. package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.d.mts +1 -1
  79. package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.mjs +3 -2
  80. package/dist/lib/esm/bundlers/obsidian-plugins-folder-deployment.mjs +32 -15
  81. package/dist/lib/esm/bundlers/parcel.d.mts +13 -6
  82. package/dist/lib/esm/bundlers/parcel.mjs +110 -5
  83. package/dist/lib/esm/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.mjs +2 -2
  84. package/dist/lib/esm/test-runners/performance-eval-cap.d.mts +12 -3
  85. package/dist/lib/esm/test-runners/performance-eval-cap.mjs +3 -1
  86. package/dist/lib/esm/test-runners/vitest-config.mjs +4 -5
  87. package/package.json +2 -1
@@ -29,80 +29,6 @@ function ensureBrowserProcess() {
29
29
 
30
30
  ensureBrowserProcess();
31
31
  })();
32
- (function patchObsidianRequire() {
33
- const originalRequire = require;
34
- if (!originalRequire || originalRequire.__isPatched) {
35
- return;
36
- }
37
-
38
- require = Object.assign(
39
- (id) => requirePatched(id),
40
- originalRequire,
41
- {
42
- __isPatched: true
43
- }
44
- );
45
-
46
- function extractDefault(module) {
47
- return module && module.__esModule && 'default' in module ? module.default : module;
48
- }
49
-
50
- const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
51
- '@codemirror/autocomplete',
52
- '@codemirror/collab',
53
- '@codemirror/commands',
54
- '@codemirror/language',
55
- '@codemirror/lint',
56
- '@codemirror/search',
57
- '@codemirror/state',
58
- '@codemirror/text',
59
- '@codemirror/view',
60
- '@lezer/common',
61
- '@lezer/highlight',
62
- '@lezer/lr',
63
- 'obsidian']
64
- );
65
-
66
- const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
67
- '@codemirror/closebrackets',
68
- '@codemirror/comment',
69
- '@codemirror/fold',
70
- '@codemirror/gutter',
71
- '@codemirror/highlight',
72
- '@codemirror/history',
73
- '@codemirror/matchbrackets',
74
- '@codemirror/panel',
75
- '@codemirror/rangeset',
76
- '@codemirror/rectangular-selection',
77
- '@codemirror/stream-parser',
78
- '@codemirror/tooltip']
79
- );
80
-
81
- function requirePatched(id) {
82
- if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
83
- return originalRequire?.(id);
84
- }
85
-
86
- // eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
87
- if (globalThis.app.isMobile) {
88
- if (id === 'process' || id === 'node:process') {
89
- // eslint-disable-next-line no-console -- Valid usage.
90
- console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
91
-
92
- return process;
93
- }
94
- } else {
95
- const module = originalRequire?.(id);
96
- if (module) {
97
- return extractDefault(module);
98
- }
99
- }
100
-
101
- // eslint-disable-next-line no-console -- Valid usage.
102
- console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
103
- return {};
104
- }
105
- })();
106
32
 
107
33
  "use strict";
108
34
  var __create = Object.create;
@@ -303,4 +229,4 @@ function isTailwindPlugin(plugin) {
303
229
  transformSolid,
304
230
  transformSvelte
305
231
  });
306
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9vYnNpZGlhbi1wbHVnaW4tdHJhbnNmb3Jtcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIHNvdXJjZSB0cmFuc2Zvcm1zIGV2ZXJ5IGJ1bmRsZXIgYWRhcHRlciBzaGFyZXMsIHNvIGEgZmVhdHVyZSBjb21waWxlcyB0aGUgc2FtZSB3YXkgd2hpY2hldmVyIGJ1bmRsZXIgcnVucyBpdDpcbiAqIFNvbGlkJ3MgSlNYLCBTdmVsdGUgY29tcG9uZW50cyBhbmQgbW9kdWxlcywgc3R5bGVzaGVldHMgdGhyb3VnaCBQb3N0Q1NTLCBUYWlsd2luZCBhbmQgQ1NTIG1vZHVsZXMsIGFuZCBXZWJBc3NlbWJseVxuICogbW9kdWxlcyBhcyBieXRlcy4gVGhlIGVzYnVpbGQsIHJvbGx1cCBhbmQgdml0ZSBhZGFwdGVycyBjYWxsIHRoZW0gaW4tcHJvY2VzczsgdGhlIHdlYnBhY2sgYWRhcHRlciB0aHJvdWdoIHRoZVxuICogbG9hZGVyIGl0IHNoaXBzLCBhbmQgdGhlIHBhcmNlbCBhZGFwdGVyIHRocm91Z2ggdGhlIHRyYW5zZm9ybWVycyBpdCBnZW5lcmF0ZXMuXG4gKlxuICogRXJhc2FibGUgVHlwZVNjcmlwdCBvbmx5IChubyBlbnVtcywgbm8gcGFyYW1ldGVyIHByb3BlcnRpZXMpLCBzbyBhIHdlYnBhY2sgbG9hZGVyIG9yIGEgcGFyY2VsIHdvcmtlciBjYW4gbG9hZCB0aGlzXG4gKiBtb2R1bGUgc3RyYWlnaHQgZnJvbSBzb3VyY2Ugd2hlbiB0aGUgdG9vbGtpdCBydW5zIGZyb20gc291cmNlLlxuICovXG5cbmltcG9ydCB0eXBlIHsgVHJhbnNmb3JtT3B0aW9ucyBhcyBCYWJlbFRyYW5zZm9ybU9wdGlvbnMgfSBmcm9tICdAYmFiZWwvY29yZSc7XG5pbXBvcnQgdHlwZSB7XG4gIEFjY2VwdGVkUGx1Z2luLFxuICBQcm9jZXNzT3B0aW9uc1xufSBmcm9tICdwb3N0Y3NzJztcblxuaW1wb3J0IHsgZXh0cmFjdERlZmF1bHRFeHBvcnRJbnRlcm9wIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQgeyB0cmFuc2Zvcm0gYXMgZXNidWlsZFRyYW5zZm9ybSB9IGZyb20gJ2VzYnVpbGQnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCBwb3N0Y3NzIGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHBvc3Rjc3NMb2FkQ29uZmlnXyBmcm9tICdwb3N0Y3NzLWxvYWQtY29uZmlnJztcbmltcG9ydCBwb3N0Y3NzTW9kdWxlc18gZnJvbSAncG9zdGNzcy1tb2R1bGVzJztcblxuaW1wb3J0IHR5cGUgeyBPYnNpZGlhblBsdWdpblN0eWxlc09wdGlvbnMgfSBmcm9tICcuL29ic2lkaWFuLXBsdWdpbi1mZWF0dXJlcy50cyc7XG5cbmltcG9ydCB7XG4gIGltcG9ydE9wdGlvbmFsUGVlcixcbiAgaXNDc3NNb2R1bGVGaWxlXG59IGZyb20gJy4vb2JzaWRpYW4tcGx1Z2luLWZlYXR1cmVzLnRzJztcblxuY29uc3QgcG9zdGNzc0xvYWRDb25maWcgPSBleHRyYWN0RGVmYXVsdEV4cG9ydEludGVyb3AocG9zdGNzc0xvYWRDb25maWdfKTtcbmNvbnN0IHBvc3Rjc3NNb2R1bGVzID0gZXh0cmFjdERlZmF1bHRFeHBvcnRJbnRlcm9wKHBvc3Rjc3NNb2R1bGVzXyk7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGxvYWRQb3N0Y3NzQ29uZmlnfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2FkUG9zdGNzc0NvbmZpZ1BhcmFtcyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgaXMgYSBwcm9kdWN0aW9uIGJ1aWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNQcm9kdWN0aW9uQnVpbGQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIgdGhlIHByb2plY3QncyBQb3N0Q1NTIGNvbmZpZ3VyYXRpb24gYW5kIHBhY2thZ2VzIGFyZSBmb3VuZCBmcm9tLiBEZWZhdWx0cyB0byB0aGUgcHJvamVjdCByb290LlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdEZvbGRlcj86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHN0eWxlc2hlZXQgb3B0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IHN0eWxlczogT2JzaWRpYW5QbHVnaW5TdHlsZXNPcHRpb25zO1xufVxuXG4vKipcbiAqIFdoYXQge0BsaW5rIGxvYWRQb3N0Y3NzQ29uZmlnfSBsb2FkZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9zdGNzc0NvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgZmlsZXMgdGhlIGNvbmZpZ3VyYXRpb24gY2FtZSBmcm9tLCBmb3IgYSB3YXRjaCBidWlsZCB0byB3YXRjaC5cbiAgICovXG4gIHJlYWRvbmx5IGRlcGVuZGVuY2llczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwcm9jZXNzIG9wdGlvbnMgb2YgdGhlIHByb2plY3QncyBjb25maWd1cmF0aW9uIChhIGN1c3RvbSBwYXJzZXIgb3Igc3ludGF4LCBzYXkpLlxuICAgKi9cbiAgcmVhZG9ubHkgb3B0aW9uczogUHJvY2Vzc09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW5zLCBpbiB0aGUgb3JkZXIgdGhleSBydW4uXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5zOiByZWFkb25seSBBY2NlcHRlZFBsdWdpbltdO1xufVxuXG4vKipcbiAqIEEgc291cmNlIG1hcCwgYXMgdGhlIHRyYW5zZm9ybXMgaGFuZCBpdCBvdmVyOiB0aGUgZGVjb2RlZCBKU09OIG9mIGEgdmVyc2lvbiAzIHNvdXJjZSBtYXAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU291cmNlTWFwTGlrZSB7XG4gIC8qKlxuICAgKiBUaGUgZW5jb2RlZCBtYXBwaW5ncy5cbiAgICovXG4gIHJlYWRvbmx5IG1hcHBpbmdzOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvcmlnaW5hbCBzb3VyY2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgbWFwIHZlcnNpb24uXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBudW1iZXI7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHRyYW5zZm9ybUNzc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNmb3JtQ3NzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBzdHlsZXNoZWV0J3MgcGF0aC5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYCoubW9kdWxlLmNzc2AgZmlsZXMgYXJlIHNjb3BlZCBoZXJlLiBBIGJ1bmRsZXIgdGhhdCBzY29wZXMgQ1NTIG1vZHVsZXMgaXRzZWxmIHBhc3NlcyBgZmFsc2VgLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNDc3NNb2R1bGVTY29wZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBpcyBhIHByb2R1Y3Rpb24gYnVpbGQuXG4gICAqL1xuICByZWFkb25seSBpc1Byb2R1Y3Rpb25CdWlsZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGZvbGRlciB0aGUgcHJvamVjdCdzIFBvc3RDU1MgY29uZmlndXJhdGlvbiBhbmQgcGFja2FnZXMgYXJlIGZvdW5kIGZyb20uIERlZmF1bHRzIHRvIHRoZSBwcm9qZWN0IHJvb3QuXG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0Rm9sZGVyPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgc3R5bGVzaGVldCdzIGNvbnRlbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzdHlsZXNoZWV0IG9wdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBzdHlsZXM6IE9ic2lkaWFuUGx1Z2luU3R5bGVzT3B0aW9ucztcbn1cblxuLyoqXG4gKiBUaGUgQ1NTIHtAbGluayB0cmFuc2Zvcm1Dc3N9IHByb2R1Y2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zZm9ybWVkQ3NzIHtcbiAgLyoqXG4gICAqIFRoZSBzdHlsZXNoZWV0LlxuICAgKi9cbiAgcmVhZG9ubHkgY3NzOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmaWxlcyBiZXNpZGVzIHRoZSBzdHlsZXNoZWV0IHRoYXQgdGhlIHJlc3VsdCBkZXBlbmRzIG9uLCBmb3IgYSB3YXRjaCBidWlsZCB0byB3YXRjaDogYSBQb3N0Q1NTIGNvbmZpZ3VyYXRpb24sXG4gICAqIG9yIGEgc3R5bGVzaGVldCBhIHBsdWdpbiBpbmxpbmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwZW5kZW5jaWVzOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHNjb3BlZCBjbGFzcyBuYW1lcyBieSB0aGVpciBvcmlnaW5hbCBvbmVzLCBmb3IgYSBDU1MgbW9kdWxlOyBgdW5kZWZpbmVkYCBmb3IgYW4gb3JkaW5hcnkgc3R5bGVzaGVldC5cbiAgICovXG4gIHJlYWRvbmx5IG1vZHVsZUV4cG9ydHM6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEEgSmF2YVNjcmlwdCBtb2R1bGUgYSB0cmFuc2Zvcm0gcHJvZHVjZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNmb3JtZWRNb2R1bGUge1xuICAvKipcbiAgICogVGhlIEphdmFTY3JpcHQgY29kZS5cbiAgICovXG4gIHJlYWRvbmx5IGNvZGU6IHN0cmluZztcblxuICAvKipcbiAgICogSXRzIHNvdXJjZSBtYXAsIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhlcmUgaXMgbm9uZS5cbiAgICovXG4gIHJlYWRvbmx5IG1hcDogU291cmNlTWFwTGlrZSB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgdHJhbnNmb3JtSnN4fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFuc2Zvcm1Kc3hQYXJhbXMgZXh0ZW5kcyBUcmFuc2Zvcm1Nb2R1bGVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHBhY2thZ2UgdGhhdCBzdXBwbGllcyB0aGUgYXV0b21hdGljIEpTWCBydW50aW1lOiBgcmVhY3RgIG9yIGBwcmVhY3RgLlxuICAgKi9cbiAgcmVhZG9ubHkganN4SW1wb3J0U291cmNlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBvZiBhIHRyYW5zZm9ybSB0aGF0IGNvbXBpbGVzIG9uZSBtb2R1bGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNmb3JtTW9kdWxlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgY29kZS5cbiAgICovXG4gIHJlYWRvbmx5IGNvZGU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNvdXJjZSBmaWxlJ3MgcGF0aC5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBpcyBhIHByb2R1Y3Rpb24gYnVpbGQuXG4gICAqL1xuICByZWFkb25seSBpc1Byb2R1Y3Rpb25CdWlsZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGZvbGRlciB0aGUgZnJhbWV3b3JrJ3MgcGFja2FnZXMgYXJlIHJlc29sdmVkIGZyb20uIERlZmF1bHRzIHRvIHRoZSBwcm9qZWN0IHJvb3QuXG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0Rm9sZGVyPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayB0cmFuc2Zvcm1Tb2xpZH0uXG4gKi9cbmV4cG9ydCB0eXBlIFRyYW5zZm9ybVNvbGlkUGFyYW1zID0gVHJhbnNmb3JtTW9kdWxlUGFyYW1zO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayB0cmFuc2Zvcm1TdmVsdGV9LlxuICovXG5leHBvcnQgdHlwZSBUcmFuc2Zvcm1TdmVsdGVQYXJhbXMgPSBUcmFuc2Zvcm1Nb2R1bGVQYXJhbXM7XG5cbmludGVyZmFjZSBCYWJlbENvcmVMaWtlIHtcbiAgdHJhbnNmb3JtQXN5bmM6IChjb2RlOiBzdHJpbmcsIG9wdGlvbnM6IEJhYmVsVHJhbnNmb3JtT3B0aW9ucykgPT4gUHJvbWlzZTxCYWJlbFJlc3VsdExpa2UgfCBudWxsPjtcbn1cblxuaW50ZXJmYWNlIEJhYmVsUmVzdWx0TGlrZSB7XG4gIHJlYWRvbmx5IGNvZGU/OiBudWxsIHwgc3RyaW5nO1xuICByZWFkb25seSBtYXA/OiBudWxsIHwgU291cmNlTWFwTGlrZTtcbn1cblxuaW50ZXJmYWNlIFBvc3Rjc3NEZXBlbmRlbmN5TWVzc2FnZSB7XG4gIHJlYWRvbmx5IGZpbGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFN2ZWx0ZUNvbXBpbGVPcHRpb25zTGlrZSBleHRlbmRzIFN2ZWx0ZU1vZHVsZUNvbXBpbGVPcHRpb25zTGlrZSB7XG4gIHJlYWRvbmx5IGNzczogJ2luamVjdGVkJztcbn1cblxuaW50ZXJmYWNlIFN2ZWx0ZUNvbXBpbGVSZXN1bHRMaWtlIHtcbiAgcmVhZG9ubHkganM6IFRyYW5zZm9ybWVkTW9kdWxlO1xufVxuXG5pbnRlcmZhY2UgU3ZlbHRlQ29tcGlsZXJMaWtlIHtcbiAgY29tcGlsZTogKHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBTdmVsdGVDb21waWxlT3B0aW9uc0xpa2UpID0+IFN2ZWx0ZUNvbXBpbGVSZXN1bHRMaWtlO1xuICBjb21waWxlTW9kdWxlOiAoc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IFN2ZWx0ZU1vZHVsZUNvbXBpbGVPcHRpb25zTGlrZSkgPT4gU3ZlbHRlQ29tcGlsZVJlc3VsdExpa2U7XG59XG5cbmludGVyZmFjZSBTdmVsdGVNb2R1bGVDb21waWxlT3B0aW9uc0xpa2Uge1xuICByZWFkb25seSBkZXY6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGZpbGVuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGdlbmVyYXRlOiAnY2xpZW50Jztcbn1cblxuaW50ZXJmYWNlIFRhaWx3aW5kUG9zdGNzc01vZHVsZSB7XG4gIHJlYWRvbmx5IGRlZmF1bHQ6IChvcHRpb25zPzogVGFpbHdpbmRQb3N0Y3NzT3B0aW9ucykgPT4gQWNjZXB0ZWRQbHVnaW47XG59XG5cbmludGVyZmFjZSBUYWlsd2luZFBvc3Rjc3NPcHRpb25zIHtcbiAgcmVhZG9ubHkgYmFzZT86IHN0cmluZztcbiAgcmVhZG9ubHkgb3B0aW1pemU/OiBib29sZWFuO1xufVxuXG5jb25zdCBTVkVMVEVfTU9EVUxFX1BBVFRFUk4gPSAvXFwuc3ZlbHRlXFwuW2NtXT9banRdcyQvaXU7XG5jb25zdCBUWVBFU0NSSVBUX01PRFVMRV9QQVRURVJOID0gL1xcLltjbV0/dHMkL2l1O1xuY29uc3QgVEFJTFdJTkRfUE9TVENTU19QTFVHSU5fTkFNRSA9ICdAdGFpbHdpbmRjc3MvcG9zdGNzcyc7XG5cbi8qKlxuICogQXBwZW5kcyBhIHNvdXJjZSBtYXAgdG8gYSBtb2R1bGUncyBjb2RlIGFzIGFuIGlubGluZSBgc291cmNlTWFwcGluZ1VSTGAgY29tbWVudCwgd2hpY2ggaXMgaG93IGEgYnVuZGxlciB0aGF0XG4gKiByZWFkcyBhIGxvYWRlZCBmaWxlJ3Mgb3duIHNvdXJjZSBtYXAgdGFrZXMgaXQuXG4gKlxuICogQHBhcmFtIG1vZHVsZSAtIFRoZSBtb2R1bGUuXG4gKiBAcmV0dXJucyBUaGUgY29kZSwgd2l0aCB0aGUgc291cmNlIG1hcCBpbmxpbmVkIHdoZW4gdGhlcmUgaXMgb25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kSW5saW5lU291cmNlTWFwKG1vZHVsZTogVHJhbnNmb3JtZWRNb2R1bGUpOiBzdHJpbmcge1xuICBpZiAoIW1vZHVsZS5tYXApIHtcbiAgICByZXR1cm4gbW9kdWxlLmNvZGU7XG4gIH1cbiAgY29uc3QgYmFzZTY0ID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkobW9kdWxlLm1hcCksICd1dGYtOCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgcmV0dXJuIGAke21vZHVsZS5jb2RlfVxcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCwke2Jhc2U2NH1cXG5gO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgSmF2YVNjcmlwdCBtb2R1bGUgYSBDU1MgbW9kdWxlJ3MgaW1wb3J0IHJlc29sdmVzIHRvOiBpdHMgc2NvcGVkIGNsYXNzIG5hbWVzLCBieSB0aGVpciBvcmlnaW5hbCBvbmVzLCBhc1xuICogdGhlIGRlZmF1bHQgZXhwb3J0LlxuICpcbiAqIEBwYXJhbSBtb2R1bGVFeHBvcnRzIC0gVGhlIHNjb3BlZCBjbGFzcyBuYW1lcy5cbiAqIEByZXR1cm5zIFRoZSBtb2R1bGUncyBjb2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3NzTW9kdWxlQ29kZShtb2R1bGVFeHBvcnRzOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pik6IHN0cmluZyB7XG4gIHJldHVybiBgZXhwb3J0IGRlZmF1bHQgJHtKU09OLnN0cmluZ2lmeShtb2R1bGVFeHBvcnRzKX07XFxuYDtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIEphdmFTY3JpcHQgbW9kdWxlIGEgYC53YXNtYCBpbXBvcnQgcmVzb2x2ZXMgdG86IHRoZSBXZWJBc3NlbWJseSBtb2R1bGUncyBieXRlcyBhcyBhIGBVaW50OEFycmF5YFxuICogZGVmYXVsdCBleHBvcnQsIGlubGluZWQgYXMgYmFzZTY0LCBiZWNhdXNlIGFuIE9ic2lkaWFuIHJlbGVhc2Ugc2hpcHMgYG1haW4uanNgIGFuZCBub3RoaW5nIGJlc2lkZSBpdC5cbiAqXG4gKiBAcGFyYW0gYnl0ZXMgLSBUaGUgV2ViQXNzZW1ibHkgbW9kdWxlJ3MgYnl0ZXMuXG4gKiBAcmV0dXJucyBUaGUgbW9kdWxlJ3MgY29kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdhc21Nb2R1bGVDb2RlKGJ5dGVzOiBVaW50OEFycmF5KTogc3RyaW5nIHtcbiAgY29uc3QgYmFzZTY0ID0gQnVmZmVyLmZyb20oYnl0ZXMpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgcmV0dXJuIGBjb25zdCBiaW5hcnkgPSBhdG9iKCR7SlNPTi5zdHJpbmdpZnkoYmFzZTY0KX0pO1xuY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShiaW5hcnkubGVuZ3RoKTtcbmZvciAobGV0IGkgPSAwOyBpIDwgYmluYXJ5Lmxlbmd0aDsgaSsrKSB7XG4gIGJ5dGVzW2ldID0gYmluYXJ5LmNoYXJDb2RlQXQoaSk7XG59XG5leHBvcnQgZGVmYXVsdCBieXRlcztcbmA7XG59XG5cbi8qKlxuICogTG9hZHMgdGhlIFBvc3RDU1MgcGx1Z2lucyBhIHN0eWxlc2hlZXQgZ29lcyB0aHJvdWdoLCB3aXRob3V0IHRoZSBDU1MtbW9kdWxlIHNjb3Bpbmc6IHRoZSBwcm9qZWN0J3MgUG9zdENTU1xuICogY29uZmlndXJhdGlvbiB3aGVuIGBwb3N0Y3NzYCBpcyBvbiwgYW5kIFRhaWx3aW5kIGFoZWFkIG9mIGl0IHdoZW4gYHRhaWx3aW5kYCBpcyBvbiBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZG9lcyBub3RcbiAqIGFscmVhZHkgcnVuIGl0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIExvYWRQb3N0Y3NzQ29uZmlnUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHtAbGluayBQb3N0Y3NzQ29uZmlnfTsgaXRzIGBwbHVnaW5zYCBpcyBlbXB0eSB3aGVuIG5laXRoZXIgYXBwbGllcy5cbiAqIEB0aHJvd3MgSWYgYHBvc3Rjc3NgIGlzIG9uIGFuZCB0aGUgcHJvamVjdCBoYXMgbm8gUG9zdENTUyBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFBvc3Rjc3NDb25maWcocGFyYW1zOiBMb2FkUG9zdGNzc0NvbmZpZ1BhcmFtcyk6IFByb21pc2U8UG9zdGNzc0NvbmZpZz4ge1xuICBjb25zdCB7IGlzUHJvZHVjdGlvbkJ1aWxkLCBwcm9qZWN0Rm9sZGVyLCBzdHlsZXMgfSA9IHBhcmFtcztcbiAgY29uc3QgcGx1Z2luczogQWNjZXB0ZWRQbHVnaW5bXSA9IFtdO1xuICBjb25zdCBkZXBlbmRlbmNpZXM6IHN0cmluZ1tdID0gW107XG4gIGxldCBvcHRpb25zOiBQcm9jZXNzT3B0aW9ucyA9IHt9O1xuXG4gIGlmIChzdHlsZXMucG9zdGNzcykge1xuICAgIGxldCBjb25maWc6IHBvc3Rjc3NMb2FkQ29uZmlnXy5SZXN1bHQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbmZpZyA9IGF3YWl0IHBvc3Rjc3NMb2FkQ29uZmlnKHsgY3dkOiBwcm9qZWN0Rm9sZGVyID8/IHByb2Nlc3MuY3dkKCksIGVudjogaXNQcm9kdWN0aW9uQnVpbGQgPyAncHJvZHVjdGlvbicgOiAnZGV2ZWxvcG1lbnQnIH0sIHByb2plY3RGb2xkZXIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBgc3R5bGVzLnBvc3Rjc3NgIGJ1aWxkIG9wdGlvbiBuZWVkcyBhIFBvc3RDU1MgY29uZmlndXJhdGlvbiAoYHBvc3Rjc3MuY29uZmlnLm1qc2AsIGAucG9zdGNzc3JjLmpzb25gLCAuLi4pIGluIHRoZSBwcm9qZWN0LicsIHtcbiAgICAgICAgY2F1c2U6IGVycm9yXG4gICAgICB9KTtcbiAgICB9XG4gICAgcGx1Z2lucy5wdXNoKC4uLmNvbmZpZy5wbHVnaW5zIGFzIEFjY2VwdGVkUGx1Z2luW10pO1xuICAgIG9wdGlvbnMgPSBjb25maWcub3B0aW9ucztcbiAgICBkZXBlbmRlbmNpZXMucHVzaChjb25maWcuZmlsZSk7XG4gIH1cblxuICBpZiAoc3R5bGVzLnRhaWx3aW5kICYmIHBsdWdpbnMuZXZlcnkoKHBsdWdpbikgPT4gIWlzVGFpbHdpbmRQbHVnaW4ocGx1Z2luKSkpIHtcbiAgICBjb25zdCB7IGRlZmF1bHQ6IHRhaWx3aW5kIH0gPSBhd2FpdCBpbXBvcnRPcHRpb25hbFBlZXI8VGFpbHdpbmRQb3N0Y3NzTW9kdWxlPih7XG4gICAgICBmZWF0dXJlOiAnc3R5bGVzLnRhaWx3aW5kJyxcbiAgICAgIHBhY2thZ2VOYW1lOiBUQUlMV0lORF9QT1NUQ1NTX1BMVUdJTl9OQU1FLFxuICAgICAgLi4uKHByb2plY3RGb2xkZXIgIT09IHVuZGVmaW5lZCAmJiB7IHByb2plY3RGb2xkZXIgfSlcbiAgICB9KTtcbiAgICBwbHVnaW5zLnVuc2hpZnQodGFpbHdpbmQoeyAuLi4ocHJvamVjdEZvbGRlciAhPT0gdW5kZWZpbmVkICYmIHsgYmFzZTogcHJvamVjdEZvbGRlciB9KSwgb3B0aW1pemU6IGlzUHJvZHVjdGlvbkJ1aWxkIH0pKTtcbiAgfVxuXG4gIHJldHVybiB7IGRlcGVuZGVuY2llcywgb3B0aW9ucywgcGx1Z2lucyB9O1xufVxuXG4vKipcbiAqIFJ1bnMgYSBzdHlsZXNoZWV0IHRocm91Z2ggdGhlIHBpcGVsaW5lIGl0cyBvcHRpb25zIGFzayBmb3I6IHRoZSBwcm9qZWN0J3MgUG9zdENTUyBjb25maWd1cmF0aW9uLCBUYWlsd2luZCwgYW5kIHRoZVxuICogQ1NTLW1vZHVsZSBzY29waW5nIG9mIGEgYCoubW9kdWxlLmNzc2AgZmlsZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBUcmFuc2Zvcm1Dc3NQYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUge0BsaW5rIFRyYW5zZm9ybWVkQ3NzfS5cbiAqIEB0aHJvd3MgSWYgYHBvc3Rjc3NgIGlzIG9uIGFuZCB0aGUgcHJvamVjdCBoYXMgbm8gUG9zdENTUyBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdHJhbnNmb3JtQ3NzKHBhcmFtczogVHJhbnNmb3JtQ3NzUGFyYW1zKTogUHJvbWlzZTxUcmFuc2Zvcm1lZENzcz4ge1xuICBjb25zdCB7IGZpbGVQYXRoLCBpc0Nzc01vZHVsZVNjb3BlZCwgc291cmNlLCBzdHlsZXMgfSA9IHBhcmFtcztcbiAgY29uc3QgcG9zdGNzc0NvbmZpZyA9IGF3YWl0IGxvYWRQb3N0Y3NzQ29uZmlnKHBhcmFtcyk7XG4gIGNvbnN0IHBsdWdpbnMgPSBbLi4ucG9zdGNzc0NvbmZpZy5wbHVnaW5zXTtcbiAgY29uc3QgZGVwZW5kZW5jaWVzID0gWy4uLnBvc3Rjc3NDb25maWcuZGVwZW5kZW5jaWVzXTtcblxuICBsZXQgbW9kdWxlRXhwb3J0czogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHVuZGVmaW5lZDtcbiAgaWYgKHN0eWxlcy5jc3NNb2R1bGVzICYmIGlzQ3NzTW9kdWxlU2NvcGVkICYmIGlzQ3NzTW9kdWxlRmlsZShmaWxlUGF0aCkpIHtcbiAgICBwbHVnaW5zLnB1c2gocG9zdGNzc01vZHVsZXMoe1xuICAgICAgZ2V0SlNPTihfY3NzRmlsZU5hbWUsIGpzb24pOiB2b2lkIHtcbiAgICAgICAgbW9kdWxlRXhwb3J0cyA9IGpzb247XG4gICAgICB9XG4gICAgfSkpO1xuICB9XG5cbiAgaWYgKHBsdWdpbnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHsgY3NzOiBzb3VyY2UsIGRlcGVuZGVuY2llcywgbW9kdWxlRXhwb3J0cyB9O1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9zdGNzcyhwbHVnaW5zKS5wcm9jZXNzKHNvdXJjZSwgeyAuLi5wb3N0Y3NzQ29uZmlnLm9wdGlvbnMsIGZyb206IGZpbGVQYXRoLCBtYXA6IGZhbHNlIH0pO1xuICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgcmVzdWx0Lm1lc3NhZ2VzIGFzIFBvc3Rjc3NEZXBlbmRlbmN5TWVzc2FnZVtdKSB7XG4gICAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gJ2RlcGVuZGVuY3knICYmIG1lc3NhZ2UuZmlsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZXBlbmRlbmNpZXMucHVzaChtZXNzYWdlLmZpbGUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4geyBjc3M6IHJlc3VsdC5jc3MsIGRlcGVuZGVuY2llcywgbW9kdWxlRXhwb3J0cyB9O1xufVxuXG4vKipcbiAqIENvbXBpbGVzIGEgUmVhY3Qgb3IgUHJlYWN0IEpTWCBvciBUU1ggbW9kdWxlIHdpdGggdGhlIGF1dG9tYXRpYyBKU1ggcnVudGltZSwgZm9yIGEgYnVuZGxlciB0aGF0IGRvZXMgbm90IHRha2UgdGhlXG4gKiBydW50aW1lIGZyb20gdGhlIHByb2plY3QncyB0c2NvbmZpZyAocGFyY2VsIGRvZXMgbm90IGZvbGxvdyBpdHMgYGV4dGVuZHNgKS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBUcmFuc2Zvcm1Kc3hQYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgY29tcGlsZWQgbW9kdWxlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdHJhbnNmb3JtSnN4KHBhcmFtczogVHJhbnNmb3JtSnN4UGFyYW1zKTogUHJvbWlzZTxUcmFuc2Zvcm1lZE1vZHVsZT4ge1xuICBjb25zdCB7IGNvZGUsIGZpbGVQYXRoLCBqc3hJbXBvcnRTb3VyY2UgfSA9IHBhcmFtcztcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXNidWlsZFRyYW5zZm9ybShjb2RlLCB7XG4gICAganN4OiAnYXV0b21hdGljJyxcbiAgICBqc3hJbXBvcnRTb3VyY2UsXG4gICAgbG9hZGVyOiAvXFwudHN4JC9pdS50ZXN0KGZpbGVQYXRoKSA/ICd0c3gnIDogJ2pzeCcsXG4gICAgc291cmNlZmlsZTogZmlsZVBhdGgsXG4gICAgc291cmNlbWFwOiAnZXh0ZXJuYWwnXG4gIH0pO1xuICByZXR1cm4geyBjb2RlOiByZXN1bHQuY29kZSwgbWFwOiBKU09OLnBhcnNlKHJlc3VsdC5tYXApIGFzIFNvdXJjZU1hcExpa2UgfTtcbn1cblxuLyoqXG4gKiBDb21waWxlcyBhIFNvbGlkIEpTWCBvciBUU1ggbW9kdWxlOiBlc2J1aWxkIHN0cmlwcyB0aGUgVHlwZVNjcmlwdCBhbmQga2VlcHMgdGhlIEpTWCwgdGhlbiBgYmFiZWwtcHJlc2V0LXNvbGlkYFxuICogY29tcGlsZXMgdGhlIEpTWCBpbnRvIERPTSBleHByZXNzaW9ucy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBUcmFuc2Zvcm1Nb2R1bGVQYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgY29tcGlsZWQgbW9kdWxlLlxuICogQHRocm93cyBJZiBCYWJlbCBwcm9kdWNlZCBubyBjb2RlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdHJhbnNmb3JtU29saWQocGFyYW1zOiBUcmFuc2Zvcm1Tb2xpZFBhcmFtcyk6IFByb21pc2U8VHJhbnNmb3JtZWRNb2R1bGU+IHtcbiAgY29uc3QgeyBjb2RlLCBmaWxlUGF0aCB9ID0gcGFyYW1zO1xuICBjb25zdCBmZWF0dXJlID0gJ2ZyYW1ld29yazogXFwnc29saWRcXCcnO1xuICBjb25zdCBwcm9qZWN0Rm9sZGVyT3B0aW9uID0gcGFyYW1zLnByb2plY3RGb2xkZXIgPT09IHVuZGVmaW5lZCA/IHt9IDogeyBwcm9qZWN0Rm9sZGVyOiBwYXJhbXMucHJvamVjdEZvbGRlciB9O1xuICBjb25zdCBiYWJlbCA9IGV4dHJhY3REZWZhdWx0RXhwb3J0SW50ZXJvcChhd2FpdCBpbXBvcnRPcHRpb25hbFBlZXI8QmFiZWxDb3JlTGlrZT4oeyBmZWF0dXJlLCBwYWNrYWdlTmFtZTogJ0BiYWJlbC9jb3JlJywgLi4ucHJvamVjdEZvbGRlck9wdGlvbiB9KSk7XG4gIGNvbnN0IHNvbGlkUHJlc2V0ID0gZXh0cmFjdERlZmF1bHRFeHBvcnRJbnRlcm9wKGF3YWl0IGltcG9ydE9wdGlvbmFsUGVlcjxvYmplY3Q+KHsgZmVhdHVyZSwgcGFja2FnZU5hbWU6ICdiYWJlbC1wcmVzZXQtc29saWQnLCAuLi5wcm9qZWN0Rm9sZGVyT3B0aW9uIH0pKTtcblxuICBjb25zdCBzdHJpcHBlZCA9IGF3YWl0IGVzYnVpbGRUcmFuc2Zvcm0oY29kZSwge1xuICAgIGpzeDogJ3ByZXNlcnZlJyxcbiAgICBsb2FkZXI6IC9cXC50c3gkL2l1LnRlc3QoZmlsZVBhdGgpID8gJ3RzeCcgOiAnanN4JyxcbiAgICBzb3VyY2VmaWxlOiBmaWxlUGF0aCxcbiAgICBzb3VyY2VtYXA6ICdleHRlcm5hbCdcbiAgfSk7XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFiZWwudHJhbnNmb3JtQXN5bmMoc3RyaXBwZWQuY29kZSwge1xuICAgIGJhYmVscmM6IGZhbHNlLFxuICAgIGNvbmZpZ0ZpbGU6IGZhbHNlLFxuICAgIGZpbGVuYW1lOiBmaWxlUGF0aCxcbiAgICBpbnB1dFNvdXJjZU1hcDogSlNPTi5wYXJzZShzdHJpcHBlZC5tYXApIGFzIEJhYmVsVHJhbnNmb3JtT3B0aW9uc1snaW5wdXRTb3VyY2VNYXAnXSxcbiAgICBwcmVzZXRzOiBbW3NvbGlkUHJlc2V0LCB7IGdlbmVyYXRlOiAnZG9tJywgaHlkcmF0YWJsZTogZmFsc2UgfV1dLFxuICAgIHNvdXJjZU1hcHM6IHRydWVcbiAgfSk7XG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBCYWJlbCByZXR1cm5zIG5vIGNvZGUgb25seSB3aGVuIGEgcGx1Z2luIGRyb3BzIHRoZSBmaWxlLCB3aGljaCB0aGUgU29saWQgcHJlc2V0IG5ldmVyIGRvZXMuICovXG4gIGlmICghcmVzdWx0Py5jb2RlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBCYWJlbCBwcm9kdWNlZCBubyBjb2RlIGZvciAke2ZpbGVQYXRofWApO1xuICB9XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gIC8vIFdpdGggYHNvdXJjZU1hcHNgIG9uLCBCYWJlbCBhbHdheXMgcmV0dXJucyBhIHNvdXJjZSBtYXAuXG4gIHJldHVybiB7IGNvZGU6IHJlc3VsdC5jb2RlLCBtYXA6IGVuc3VyZU5vbk51bGxhYmxlKHJlc3VsdC5tYXAsIGBCYWJlbCBwcm9kdWNlZCBubyBzb3VyY2UgbWFwIGZvciAke2ZpbGVQYXRofWApIH07XG59XG5cbi8qKlxuICogQ29tcGlsZXMgYSBTdmVsdGUgY29tcG9uZW50IChgLnN2ZWx0ZWApLCB3aXRoIGl0cyBzdHlsZXMgaW5qZWN0ZWQgYnkgdGhlIGNvbXBvbmVudCBpdHNlbGYsIG9yIGEgU3ZlbHRlIG1vZHVsZVxuICogKGAuc3ZlbHRlLnRzYCwgYC5zdmVsdGUuanNgKSwgd2hvc2UgVHlwZVNjcmlwdCBlc2J1aWxkIHN0cmlwcyBmaXJzdC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBUcmFuc2Zvcm1Nb2R1bGVQYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgY29tcGlsZWQgbW9kdWxlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdHJhbnNmb3JtU3ZlbHRlKHBhcmFtczogVHJhbnNmb3JtU3ZlbHRlUGFyYW1zKTogUHJvbWlzZTxUcmFuc2Zvcm1lZE1vZHVsZT4ge1xuICBjb25zdCB7IGNvZGUsIGZpbGVQYXRoLCBpc1Byb2R1Y3Rpb25CdWlsZCB9ID0gcGFyYW1zO1xuICBjb25zdCBjb21waWxlciA9IGV4dHJhY3REZWZhdWx0RXhwb3J0SW50ZXJvcChcbiAgICBhd2FpdCBpbXBvcnRPcHRpb25hbFBlZXI8U3ZlbHRlQ29tcGlsZXJMaWtlPih7XG4gICAgICBmZWF0dXJlOiAnZnJhbWV3b3JrOiBcXCdzdmVsdGVcXCcnLFxuICAgICAgcGFja2FnZU5hbWU6ICdzdmVsdGUnLFxuICAgICAgc3BlY2lmaWVyOiAnc3ZlbHRlL2NvbXBpbGVyJyxcbiAgICAgIC4uLihwYXJhbXMucHJvamVjdEZvbGRlciAhPT0gdW5kZWZpbmVkICYmIHsgcHJvamVjdEZvbGRlcjogcGFyYW1zLnByb2plY3RGb2xkZXIgfSlcbiAgICB9KVxuICApO1xuICBjb25zdCBtb2R1bGVPcHRpb25zOiBTdmVsdGVNb2R1bGVDb21waWxlT3B0aW9uc0xpa2UgPSB7IGRldjogIWlzUHJvZHVjdGlvbkJ1aWxkLCBmaWxlbmFtZTogZmlsZVBhdGgsIGdlbmVyYXRlOiAnY2xpZW50JyB9O1xuXG4gIGlmIChTVkVMVEVfTU9EVUxFX1BBVFRFUk4udGVzdChmaWxlUGF0aCkpIHtcbiAgICBsZXQgamF2YVNjcmlwdCA9IGNvZGU7XG4gICAgaWYgKFRZUEVTQ1JJUFRfTU9EVUxFX1BBVFRFUk4udGVzdChmaWxlUGF0aCkpIHtcbiAgICAgIGNvbnN0IHN0cmlwcGVkID0gYXdhaXQgZXNidWlsZFRyYW5zZm9ybShjb2RlLCB7IGxvYWRlcjogJ3RzJywgc291cmNlZmlsZTogZmlsZVBhdGggfSk7XG4gICAgICBqYXZhU2NyaXB0ID0gc3RyaXBwZWQuY29kZTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBpbGVyLmNvbXBpbGVNb2R1bGUoamF2YVNjcmlwdCwgbW9kdWxlT3B0aW9ucykuanM7XG4gIH1cblxuICByZXR1cm4gY29tcGlsZXIuY29tcGlsZShjb2RlLCB7IC4uLm1vZHVsZU9wdGlvbnMsIGNzczogJ2luamVjdGVkJyB9KS5qcztcbn1cblxuZnVuY3Rpb24gaXNUYWlsd2luZFBsdWdpbihwbHVnaW46IEFjY2VwdGVkUGx1Z2luKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgcGx1Z2luID09PSAnb2JqZWN0JyAmJiAncG9zdGNzc1BsdWdpbicgaW4gcGx1Z2luICYmIHBsdWdpbi5wb3N0Y3NzUGx1Z2luID09PSBUQUlMV0lORF9QT1NUQ1NTX1BMVUdJTl9OQU1FO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FB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LFFBQU0sV0FBVyxVQUFNLGVBQUFBLFdBQWlCLE1BQU07QUFBQSxJQUM1QyxLQUFLO0FBQUEsSUFDTCxRQUFRLFdBQVcsS0FBSyxRQUFRLElBQUksUUFBUTtBQUFBLElBQzVDLFlBQVk7QUFBQSxJQUNaLFdBQVc7QUFBQSxFQUNiLENBQUM7QUFFRCxRQUFNLFNBQVMsTUFBTSxNQUFNLGVBQWUsU0FBUyxNQUFNO0FBQUEsSUFDdkQsU0FBUztBQUFBLElBQ1QsWUFBWTtBQUFBLElBQ1osVUFBVTtBQUFBLElBQ1YsZ0JBQWdCLEtBQUssTUFBTSxTQUFTLEdBQUc7QUFBQSxJQUN2QyxTQUFTLENBQUMsQ0FBQyxhQUFhLEVBQUUsVUFBVSxPQUFPLFlBQVksTUFBTSxDQUFDLENBQUM7QUFBQSxJQUMvRCxZQUFZO0FBQUEsRUFDZCxDQUFDO0FBRUQsTUFBSSxDQUFDLFFBQVEsTUFBTTtBQUNqQixVQUFNLElBQUksTUFBTSw4QkFBOEIsUUFBUSxFQUFFO0FBQUEsRUFDMUQ7QUFHQSxTQUFPLEVBQUUsTUFBTSxPQUFPLE1BQU0sU0FBSyxzQ0FBa0IsT0FBTyxLQUFLLG9DQUFvQyxRQUFRLEVBQUUsRUFBRTtBQUNqSDtBQVNBLGVBQXNCLGdCQUFnQixRQUEyRDtBQUMvRixRQUFNLEVBQUUsTUFBTSxVQUFVLGtCQUFrQixJQUFJO0FBQzlDLFFBQU0sZUFBVztBQUFBLElBQ2YsVUFBTSxvREFBdUM7QUFBQSxNQUMzQyxTQUFTO0FBQUEsTUFDVCxhQUFhO0FBQUEsTUFDYixXQUFXO0FBQUEsTUFDWCxHQUFJLE9BQU8sa0JBQWtCLFVBQWEsRUFBRSxlQUFlLE9BQU8sY0FBYztBQUFBLElBQ2xGLENBQUM7QUFBQSxFQUNIO0FBQ0EsUUFBTSxnQkFBZ0QsRUFBRSxLQUFLLENBQUMsbUJBQW1CLFVBQVUsVUFBVSxVQUFVLFNBQVM7QUFFeEgsTUFBSSxzQkFBc0IsS0FBSyxRQUFRLEdBQUc7QUFDeEMsUUFBSSxhQUFhO0FBQ2pCLFFBQUksMEJBQTBCLEtBQUssUUFBUSxHQUFHO0FBQzVDLFlBQU0sV0FBVyxVQUFNLGVBQUFBLFdBQWlCLE1BQU0sRUFBRSxRQUFRLE1BQU0sWUFBWSxTQUFTLENBQUM7QUFDcEYsbUJBQWEsU0FBUztBQUFBLElBQ3hCO0FBQ0EsV0FBTyxTQUFTLGNBQWMsWUFBWSxhQUFhLEVBQUU7QUFBQSxFQUMzRDtBQUVBLFNBQU8sU0FBUyxRQUFRLE1BQU0sRUFBRSxHQUFHLGVBQWUsS0FBSyxXQUFXLENBQUMsRUFBRTtBQUN2RTtBQUVBLFNBQVMsaUJBQWlCLFFBQWlDO0FBQ3pELFNBQU8sT0FBTyxXQUFXLFlBQVksbUJBQW1CLFVBQVUsT0FBTyxrQkFBa0I7QUFDN0Y7IiwibmFtZXMiOlsicG9zdGNzc0xvYWRDb25maWdfIiwicG9zdGNzc01vZHVsZXNfIiwibW9kdWxlIiwicHJvY2VzcyIsInBvc3Rjc3MiLCJlc2J1aWxkVHJhbnNmb3JtIl19
232
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9vYnNpZGlhbi1wbHVnaW4tdHJhbnNmb3Jtcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIHNvdXJjZSB0cmFuc2Zvcm1zIGV2ZXJ5IGJ1bmRsZXIgYWRhcHRlciBzaGFyZXMsIHNvIGEgZmVhdHVyZSBjb21waWxlcyB0aGUgc2FtZSB3YXkgd2hpY2hldmVyIGJ1bmRsZXIgcnVucyBpdDpcbiAqIFNvbGlkJ3MgSlNYLCBTdmVsdGUgY29tcG9uZW50cyBhbmQgbW9kdWxlcywgc3R5bGVzaGVldHMgdGhyb3VnaCBQb3N0Q1NTLCBUYWlsd2luZCBhbmQgQ1NTIG1vZHVsZXMsIGFuZCBXZWJBc3NlbWJseVxuICogbW9kdWxlcyBhcyBieXRlcy4gVGhlIGVzYnVpbGQsIHJvbGx1cCBhbmQgdml0ZSBhZGFwdGVycyBjYWxsIHRoZW0gaW4tcHJvY2VzczsgdGhlIHdlYnBhY2sgYWRhcHRlciB0aHJvdWdoIHRoZVxuICogbG9hZGVyIGl0IHNoaXBzLCBhbmQgdGhlIHBhcmNlbCBhZGFwdGVyIHRocm91Z2ggdGhlIHRyYW5zZm9ybWVycyBpdCBnZW5lcmF0ZXMuXG4gKlxuICogRXJhc2FibGUgVHlwZVNjcmlwdCBvbmx5IChubyBlbnVtcywgbm8gcGFyYW1ldGVyIHByb3BlcnRpZXMpLCBzbyBhIHdlYnBhY2sgbG9hZGVyIG9yIGEgcGFyY2VsIHdvcmtlciBjYW4gbG9hZCB0aGlzXG4gKiBtb2R1bGUgc3RyYWlnaHQgZnJvbSBzb3VyY2Ugd2hlbiB0aGUgdG9vbGtpdCBydW5zIGZyb20gc291cmNlLlxuICovXG5cbmltcG9ydCB0eXBlIHsgVHJhbnNmb3JtT3B0aW9ucyBhcyBCYWJlbFRyYW5zZm9ybU9wdGlvbnMgfSBmcm9tICdAYmFiZWwvY29yZSc7XG5pbXBvcnQgdHlwZSB7XG4gIEFjY2VwdGVkUGx1Z2luLFxuICBQcm9jZXNzT3B0aW9uc1xufSBmcm9tICdwb3N0Y3NzJztcblxuaW1wb3J0IHsgZXh0cmFjdERlZmF1bHRFeHBvcnRJbnRlcm9wIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQgeyB0cmFuc2Zvcm0gYXMgZXNidWlsZFRyYW5zZm9ybSB9IGZyb20gJ2VzYnVpbGQnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCBwb3N0Y3NzIGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHBvc3Rjc3NMb2FkQ29uZmlnXyBmcm9tICdwb3N0Y3NzLWxvYWQtY29uZmlnJztcbmltcG9ydCBwb3N0Y3NzTW9kdWxlc18gZnJvbSAncG9zdGNzcy1tb2R1bGVzJztcblxuaW1wb3J0IHR5cGUgeyBPYnNpZGlhblBsdWdpblN0eWxlc09wdGlvbnMgfSBmcm9tICcuL29ic2lkaWFuLXBsdWdpbi1mZWF0dXJlcy50cyc7XG5cbmltcG9ydCB7XG4gIGltcG9ydE9wdGlvbmFsUGVlcixcbiAgaXNDc3NNb2R1bGVGaWxlXG59IGZyb20gJy4vb2JzaWRpYW4tcGx1Z2luLWZlYXR1cmVzLnRzJztcblxuY29uc3QgcG9zdGNzc0xvYWRDb25maWcgPSBleHRyYWN0RGVmYXVsdEV4cG9ydEludGVyb3AocG9zdGNzc0xvYWRDb25maWdfKTtcbmNvbnN0IHBvc3Rjc3NNb2R1bGVzID0gZXh0cmFjdERlZmF1bHRFeHBvcnRJbnRlcm9wKHBvc3Rjc3NNb2R1bGVzXyk7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGxvYWRQb3N0Y3NzQ29uZmlnfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2FkUG9zdGNzc0NvbmZpZ1BhcmFtcyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgaXMgYSBwcm9kdWN0aW9uIGJ1aWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNQcm9kdWN0aW9uQnVpbGQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIgdGhlIHByb2plY3QncyBQb3N0Q1NTIGNvbmZpZ3VyYXRpb24gYW5kIHBhY2thZ2VzIGFyZSBmb3VuZCBmcm9tLiBEZWZhdWx0cyB0byB0aGUgcHJvamVjdCByb290LlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdEZvbGRlcj86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHN0eWxlc2hlZXQgb3B0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IHN0eWxlczogT2JzaWRpYW5QbHVnaW5TdHlsZXNPcHRpb25zO1xufVxuXG4vKipcbiAqIFdoYXQge0BsaW5rIGxvYWRQb3N0Y3NzQ29uZmlnfSBsb2FkZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9zdGNzc0NvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgZmlsZXMgdGhlIGNvbmZpZ3VyYXRpb24gY2FtZSBmcm9tLCBmb3IgYSB3YXRjaCBidWlsZCB0byB3YXRjaC5cbiAgICovXG4gIHJlYWRvbmx5IGRlcGVuZGVuY2llczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwcm9jZXNzIG9wdGlvbnMgb2YgdGhlIHByb2plY3QncyBjb25maWd1cmF0aW9uIChhIGN1c3RvbSBwYXJzZXIgb3Igc3ludGF4LCBzYXkpLlxuICAgKi9cbiAgcmVhZG9ubHkgb3B0aW9uczogUHJvY2Vzc09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW5zLCBpbiB0aGUgb3JkZXIgdGhleSBydW4uXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5zOiByZWFkb25seSBBY2NlcHRlZFBsdWdpbltdO1xufVxuXG4vKipcbiAqIEEgc291cmNlIG1hcCwgYXMgdGhlIHRyYW5zZm9ybXMgaGFuZCBpdCBvdmVyOiB0aGUgZGVjb2RlZCBKU09OIG9mIGEgdmVyc2lvbiAzIHNvdXJjZSBtYXAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU291cmNlTWFwTGlrZSB7XG4gIC8qKlxuICAgKiBUaGUgZW5jb2RlZCBtYXBwaW5ncy5cbiAgICovXG4gIHJlYWRvbmx5IG1hcHBpbmdzOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvcmlnaW5hbCBzb3VyY2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgbWFwIHZlcnNpb24uXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBudW1iZXI7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHRyYW5zZm9ybUNzc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNmb3JtQ3NzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBzdHlsZXNoZWV0J3MgcGF0aC5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYCoubW9kdWxlLmNzc2AgZmlsZXMgYXJlIHNjb3BlZCBoZXJlLiBBIGJ1bmRsZXIgdGhhdCBzY29wZXMgQ1NTIG1vZHVsZXMgaXRzZWxmIHBhc3NlcyBgZmFsc2VgLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNDc3NNb2R1bGVTY29wZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBpcyBhIHByb2R1Y3Rpb24gYnVpbGQuXG4gICAqL1xuICByZWFkb25seSBpc1Byb2R1Y3Rpb25CdWlsZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGZvbGRlciB0aGUgcHJvamVjdCdzIFBvc3RDU1MgY29uZmlndXJhdGlvbiBhbmQgcGFja2FnZXMgYXJlIGZvdW5kIGZyb20uIERlZmF1bHRzIHRvIHRoZSBwcm9qZWN0IHJvb3QuXG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0Rm9sZGVyPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgc3R5bGVzaGVldCdzIGNvbnRlbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzdHlsZXNoZWV0IG9wdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBzdHlsZXM6IE9ic2lkaWFuUGx1Z2luU3R5bGVzT3B0aW9ucztcbn1cblxuLyoqXG4gKiBUaGUgQ1NTIHtAbGluayB0cmFuc2Zvcm1Dc3N9IHByb2R1Y2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zZm9ybWVkQ3NzIHtcbiAgLyoqXG4gICAqIFRoZSBzdHlsZXNoZWV0LlxuICAgKi9cbiAgcmVhZG9ubHkgY3NzOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmaWxlcyBiZXNpZGVzIHRoZSBzdHlsZXNoZWV0IHRoYXQgdGhlIHJlc3VsdCBkZXBlbmRzIG9uLCBmb3IgYSB3YXRjaCBidWlsZCB0byB3YXRjaDogYSBQb3N0Q1NTIGNvbmZpZ3VyYXRpb24sXG4gICAqIG9yIGEgc3R5bGVzaGVldCBhIHBsdWdpbiBpbmxpbmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwZW5kZW5jaWVzOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHNjb3BlZCBjbGFzcyBuYW1lcyBieSB0aGVpciBvcmlnaW5hbCBvbmVzLCBmb3IgYSBDU1MgbW9kdWxlOyBgdW5kZWZpbmVkYCBmb3IgYW4gb3JkaW5hcnkgc3R5bGVzaGVldC5cbiAgICovXG4gIHJlYWRvbmx5IG1vZHVsZUV4cG9ydHM6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEEgSmF2YVNjcmlwdCBtb2R1bGUgYSB0cmFuc2Zvcm0gcHJvZHVjZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNmb3JtZWRNb2R1bGUge1xuICAvKipcbiAgICogVGhlIEphdmFTY3JpcHQgY29kZS5cbiAgICovXG4gIHJlYWRvbmx5IGNvZGU6IHN0cmluZztcblxuICAvKipcbiAgICogSXRzIHNvdXJjZSBtYXAsIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhlcmUgaXMgbm9uZS5cbiAgICovXG4gIHJlYWRvbmx5IG1hcDogU291cmNlTWFwTGlrZSB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgdHJhbnNmb3JtSnN4fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFuc2Zvcm1Kc3hQYXJhbXMgZXh0ZW5kcyBUcmFuc2Zvcm1Nb2R1bGVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHBhY2thZ2UgdGhhdCBzdXBwbGllcyB0aGUgYXV0b21hdGljIEpTWCBydW50aW1lOiBgcmVhY3RgIG9yIGBwcmVhY3RgLlxuICAgKi9cbiAgcmVhZG9ubHkganN4SW1wb3J0U291cmNlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBvZiBhIHRyYW5zZm9ybSB0aGF0IGNvbXBpbGVzIG9uZSBtb2R1bGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNmb3JtTW9kdWxlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgY29kZS5cbiAgICovXG4gIHJlYWRvbmx5IGNvZGU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNvdXJjZSBmaWxlJ3MgcGF0aC5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBpcyBhIHByb2R1Y3Rpb24gYnVpbGQuXG4gICAqL1xuICByZWFkb25seSBpc1Byb2R1Y3Rpb25CdWlsZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGZvbGRlciB0aGUgZnJhbWV3b3JrJ3MgcGFja2FnZXMgYXJlIHJlc29sdmVkIGZyb20uIERlZmF1bHRzIHRvIHRoZSBwcm9qZWN0IHJvb3QuXG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0Rm9sZGVyPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayB0cmFuc2Zvcm1Tb2xpZH0uXG4gKi9cbmV4cG9ydCB0eXBlIFRyYW5zZm9ybVNvbGlkUGFyYW1zID0gVHJhbnNmb3JtTW9kdWxlUGFyYW1zO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayB0cmFuc2Zvcm1TdmVsdGV9LlxuICovXG5leHBvcnQgdHlwZSBUcmFuc2Zvcm1TdmVsdGVQYXJhbXMgPSBUcmFuc2Zvcm1Nb2R1bGVQYXJhbXM7XG5cbmludGVyZmFjZSBCYWJlbENvcmVMaWtlIHtcbiAgdHJhbnNmb3JtQXN5bmM6IChjb2RlOiBzdHJpbmcsIG9wdGlvbnM6IEJhYmVsVHJhbnNmb3JtT3B0aW9ucykgPT4gUHJvbWlzZTxCYWJlbFJlc3VsdExpa2UgfCBudWxsPjtcbn1cblxuaW50ZXJmYWNlIEJhYmVsUmVzdWx0TGlrZSB7XG4gIHJlYWRvbmx5IGNvZGU/OiBudWxsIHwgc3RyaW5nO1xuICByZWFkb25seSBtYXA/OiBudWxsIHwgU291cmNlTWFwTGlrZTtcbn1cblxuaW50ZXJmYWNlIFBvc3Rjc3NEZXBlbmRlbmN5TWVzc2FnZSB7XG4gIHJlYWRvbmx5IGZpbGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFN2ZWx0ZUNvbXBpbGVPcHRpb25zTGlrZSBleHRlbmRzIFN2ZWx0ZU1vZHVsZUNvbXBpbGVPcHRpb25zTGlrZSB7XG4gIHJlYWRvbmx5IGNzczogJ2luamVjdGVkJztcbn1cblxuaW50ZXJmYWNlIFN2ZWx0ZUNvbXBpbGVSZXN1bHRMaWtlIHtcbiAgcmVhZG9ubHkganM6IFRyYW5zZm9ybWVkTW9kdWxlO1xufVxuXG5pbnRlcmZhY2UgU3ZlbHRlQ29tcGlsZXJMaWtlIHtcbiAgY29tcGlsZTogKHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBTdmVsdGVDb21waWxlT3B0aW9uc0xpa2UpID0+IFN2ZWx0ZUNvbXBpbGVSZXN1bHRMaWtlO1xuICBjb21waWxlTW9kdWxlOiAoc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IFN2ZWx0ZU1vZHVsZUNvbXBpbGVPcHRpb25zTGlrZSkgPT4gU3ZlbHRlQ29tcGlsZVJlc3VsdExpa2U7XG59XG5cbmludGVyZmFjZSBTdmVsdGVNb2R1bGVDb21waWxlT3B0aW9uc0xpa2Uge1xuICByZWFkb25seSBkZXY6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGZpbGVuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGdlbmVyYXRlOiAnY2xpZW50Jztcbn1cblxuaW50ZXJmYWNlIFRhaWx3aW5kUG9zdGNzc01vZHVsZSB7XG4gIHJlYWRvbmx5IGRlZmF1bHQ6IChvcHRpb25zPzogVGFpbHdpbmRQb3N0Y3NzT3B0aW9ucykgPT4gQWNjZXB0ZWRQbHVnaW47XG59XG5cbmludGVyZmFjZSBUYWlsd2luZFBvc3Rjc3NPcHRpb25zIHtcbiAgcmVhZG9ubHkgYmFzZT86IHN0cmluZztcbiAgcmVhZG9ubHkgb3B0aW1pemU/OiBib29sZWFuO1xufVxuXG5jb25zdCBTVkVMVEVfTU9EVUxFX1BBVFRFUk4gPSAvXFwuc3ZlbHRlXFwuW2NtXT9banRdcyQvaXU7XG5jb25zdCBUWVBFU0NSSVBUX01PRFVMRV9QQVRURVJOID0gL1xcLltjbV0/dHMkL2l1O1xuY29uc3QgVEFJTFdJTkRfUE9TVENTU19QTFVHSU5fTkFNRSA9ICdAdGFpbHdpbmRjc3MvcG9zdGNzcyc7XG5cbi8qKlxuICogQXBwZW5kcyBhIHNvdXJjZSBtYXAgdG8gYSBtb2R1bGUncyBjb2RlIGFzIGFuIGlubGluZSBgc291cmNlTWFwcGluZ1VSTGAgY29tbWVudCwgd2hpY2ggaXMgaG93IGEgYnVuZGxlciB0aGF0XG4gKiByZWFkcyBhIGxvYWRlZCBmaWxlJ3Mgb3duIHNvdXJjZSBtYXAgdGFrZXMgaXQuXG4gKlxuICogQHBhcmFtIG1vZHVsZSAtIFRoZSBtb2R1bGUuXG4gKiBAcmV0dXJucyBUaGUgY29kZSwgd2l0aCB0aGUgc291cmNlIG1hcCBpbmxpbmVkIHdoZW4gdGhlcmUgaXMgb25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kSW5saW5lU291cmNlTWFwKG1vZHVsZTogVHJhbnNmb3JtZWRNb2R1bGUpOiBzdHJpbmcge1xuICBpZiAoIW1vZHVsZS5tYXApIHtcbiAgICByZXR1cm4gbW9kdWxlLmNvZGU7XG4gIH1cbiAgY29uc3QgYmFzZTY0ID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkobW9kdWxlLm1hcCksICd1dGYtOCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgcmV0dXJuIGAke21vZHVsZS5jb2RlfVxcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCwke2Jhc2U2NH1cXG5gO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgSmF2YVNjcmlwdCBtb2R1bGUgYSBDU1MgbW9kdWxlJ3MgaW1wb3J0IHJlc29sdmVzIHRvOiBpdHMgc2NvcGVkIGNsYXNzIG5hbWVzLCBieSB0aGVpciBvcmlnaW5hbCBvbmVzLCBhc1xuICogdGhlIGRlZmF1bHQgZXhwb3J0LlxuICpcbiAqIEBwYXJhbSBtb2R1bGVFeHBvcnRzIC0gVGhlIHNjb3BlZCBjbGFzcyBuYW1lcy5cbiAqIEByZXR1cm5zIFRoZSBtb2R1bGUncyBjb2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3NzTW9kdWxlQ29kZShtb2R1bGVFeHBvcnRzOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pik6IHN0cmluZyB7XG4gIHJldHVybiBgZXhwb3J0IGRlZmF1bHQgJHtKU09OLnN0cmluZ2lmeShtb2R1bGVFeHBvcnRzKX07XFxuYDtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIEphdmFTY3JpcHQgbW9kdWxlIGEgYC53YXNtYCBpbXBvcnQgcmVzb2x2ZXMgdG86IHRoZSBXZWJBc3NlbWJseSBtb2R1bGUncyBieXRlcyBhcyBhIGBVaW50OEFycmF5YFxuICogZGVmYXVsdCBleHBvcnQsIGlubGluZWQgYXMgYmFzZTY0LCBiZWNhdXNlIGFuIE9ic2lkaWFuIHJlbGVhc2Ugc2hpcHMgYG1haW4uanNgIGFuZCBub3RoaW5nIGJlc2lkZSBpdC5cbiAqXG4gKiBAcGFyYW0gYnl0ZXMgLSBUaGUgV2ViQXNzZW1ibHkgbW9kdWxlJ3MgYnl0ZXMuXG4gKiBAcmV0dXJucyBUaGUgbW9kdWxlJ3MgY29kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdhc21Nb2R1bGVDb2RlKGJ5dGVzOiBVaW50OEFycmF5KTogc3RyaW5nIHtcbiAgY29uc3QgYmFzZTY0ID0gQnVmZmVyLmZyb20oYnl0ZXMpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgcmV0dXJuIGBjb25zdCBiaW5hcnkgPSBhdG9iKCR7SlNPTi5zdHJpbmdpZnkoYmFzZTY0KX0pO1xuY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShiaW5hcnkubGVuZ3RoKTtcbmZvciAobGV0IGkgPSAwOyBpIDwgYmluYXJ5Lmxlbmd0aDsgaSsrKSB7XG4gIGJ5dGVzW2ldID0gYmluYXJ5LmNoYXJDb2RlQXQoaSk7XG59XG5leHBvcnQgZGVmYXVsdCBieXRlcztcbmA7XG59XG5cbi8qKlxuICogTG9hZHMgdGhlIFBvc3RDU1MgcGx1Z2lucyBhIHN0eWxlc2hlZXQgZ29lcyB0aHJvdWdoLCB3aXRob3V0IHRoZSBDU1MtbW9kdWxlIHNjb3Bpbmc6IHRoZSBwcm9qZWN0J3MgUG9zdENTU1xuICogY29uZmlndXJhdGlvbiB3aGVuIGBwb3N0Y3NzYCBpcyBvbiwgYW5kIFRhaWx3aW5kIGFoZWFkIG9mIGl0IHdoZW4gYHRhaWx3aW5kYCBpcyBvbiBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZG9lcyBub3RcbiAqIGFscmVhZHkgcnVuIGl0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIExvYWRQb3N0Y3NzQ29uZmlnUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHtAbGluayBQb3N0Y3NzQ29uZmlnfTsgaXRzIGBwbHVnaW5zYCBpcyBlbXB0eSB3aGVuIG5laXRoZXIgYXBwbGllcy5cbiAqIEB0aHJvd3MgSWYgYHBvc3Rjc3NgIGlzIG9uIGFuZCB0aGUgcHJvamVjdCBoYXMgbm8gUG9zdENTUyBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFBvc3Rjc3NDb25maWcocGFyYW1zOiBMb2FkUG9zdGNzc0NvbmZpZ1BhcmFtcyk6IFByb21pc2U8UG9zdGNzc0NvbmZpZz4ge1xuICBjb25zdCB7IGlzUHJvZHVjdGlvbkJ1aWxkLCBwcm9qZWN0Rm9sZGVyLCBzdHlsZXMgfSA9IHBhcmFtcztcbiAgY29uc3QgcGx1Z2luczogQWNjZXB0ZWRQbHVnaW5bXSA9IFtdO1xuICBjb25zdCBkZXBlbmRlbmNpZXM6IHN0cmluZ1tdID0gW107XG4gIGxldCBvcHRpb25zOiBQcm9jZXNzT3B0aW9ucyA9IHt9O1xuXG4gIGlmIChzdHlsZXMucG9zdGNzcykge1xuICAgIGxldCBjb25maWc6IHBvc3Rjc3NMb2FkQ29uZmlnXy5SZXN1bHQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbmZpZyA9IGF3YWl0IHBvc3Rjc3NMb2FkQ29uZmlnKHsgY3dkOiBwcm9qZWN0Rm9sZGVyID8/IHByb2Nlc3MuY3dkKCksIGVudjogaXNQcm9kdWN0aW9uQnVpbGQgPyAncHJvZHVjdGlvbicgOiAnZGV2ZWxvcG1lbnQnIH0sIHByb2plY3RGb2xkZXIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBgc3R5bGVzLnBvc3Rjc3NgIGJ1aWxkIG9wdGlvbiBuZWVkcyBhIFBvc3RDU1MgY29uZmlndXJhdGlvbiAoYHBvc3Rjc3MuY29uZmlnLm1qc2AsIGAucG9zdGNzc3JjLmpzb25gLCAuLi4pIGluIHRoZSBwcm9qZWN0LicsIHtcbiAgICAgICAgY2F1c2U6IGVycm9yXG4gICAgICB9KTtcbiAgICB9XG4gICAgcGx1Z2lucy5wdXNoKC4uLmNvbmZpZy5wbHVnaW5zIGFzIEFjY2VwdGVkUGx1Z2luW10pO1xuICAgIG9wdGlvbnMgPSBjb25maWcub3B0aW9ucztcbiAgICBkZXBlbmRlbmNpZXMucHVzaChjb25maWcuZmlsZSk7XG4gIH1cblxuICBpZiAoc3R5bGVzLnRhaWx3aW5kICYmIHBsdWdpbnMuZXZlcnkoKHBsdWdpbikgPT4gIWlzVGFpbHdpbmRQbHVnaW4ocGx1Z2luKSkpIHtcbiAgICBjb25zdCB7IGRlZmF1bHQ6IHRhaWx3aW5kIH0gPSBhd2FpdCBpbXBvcnRPcHRpb25hbFBlZXI8VGFpbHdpbmRQb3N0Y3NzTW9kdWxlPih7XG4gICAgICBmZWF0dXJlOiAnc3R5bGVzLnRhaWx3aW5kJyxcbiAgICAgIHBhY2thZ2VOYW1lOiBUQUlMV0lORF9QT1NUQ1NTX1BMVUdJTl9OQU1FLFxuICAgICAgLi4uKHByb2plY3RGb2xkZXIgIT09IHVuZGVmaW5lZCAmJiB7IHByb2plY3RGb2xkZXIgfSlcbiAgICB9KTtcbiAgICBwbHVnaW5zLnVuc2hpZnQodGFpbHdpbmQoeyAuLi4ocHJvamVjdEZvbGRlciAhPT0gdW5kZWZpbmVkICYmIHsgYmFzZTogcHJvamVjdEZvbGRlciB9KSwgb3B0aW1pemU6IGlzUHJvZHVjdGlvbkJ1aWxkIH0pKTtcbiAgfVxuXG4gIHJldHVybiB7IGRlcGVuZGVuY2llcywgb3B0aW9ucywgcGx1Z2lucyB9O1xufVxuXG4vKipcbiAqIFJ1bnMgYSBzdHlsZXNoZWV0IHRocm91Z2ggdGhlIHBpcGVsaW5lIGl0cyBvcHRpb25zIGFzayBmb3I6IHRoZSBwcm9qZWN0J3MgUG9zdENTUyBjb25maWd1cmF0aW9uLCBUYWlsd2luZCwgYW5kIHRoZVxuICogQ1NTLW1vZHVsZSBzY29waW5nIG9mIGEgYCoubW9kdWxlLmNzc2AgZmlsZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBUcmFuc2Zvcm1Dc3NQYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUge0BsaW5rIFRyYW5zZm9ybWVkQ3NzfS5cbiAqIEB0aHJvd3MgSWYgYHBvc3Rjc3NgIGlzIG9uIGFuZCB0aGUgcHJvamVjdCBoYXMgbm8gUG9zdENTUyBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdHJhbnNmb3JtQ3NzKHBhcmFtczogVHJhbnNmb3JtQ3NzUGFyYW1zKTogUHJvbWlzZTxUcmFuc2Zvcm1lZENzcz4ge1xuICBjb25zdCB7IGZpbGVQYXRoLCBpc0Nzc01vZHVsZVNjb3BlZCwgc291cmNlLCBzdHlsZXMgfSA9IHBhcmFtcztcbiAgY29uc3QgcG9zdGNzc0NvbmZpZyA9IGF3YWl0IGxvYWRQb3N0Y3NzQ29uZmlnKHBhcmFtcyk7XG4gIGNvbnN0IHBsdWdpbnMgPSBbLi4ucG9zdGNzc0NvbmZpZy5wbHVnaW5zXTtcbiAgY29uc3QgZGVwZW5kZW5jaWVzID0gWy4uLnBvc3Rjc3NDb25maWcuZGVwZW5kZW5jaWVzXTtcblxuICBsZXQgbW9kdWxlRXhwb3J0czogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHVuZGVmaW5lZDtcbiAgaWYgKHN0eWxlcy5jc3NNb2R1bGVzICYmIGlzQ3NzTW9kdWxlU2NvcGVkICYmIGlzQ3NzTW9kdWxlRmlsZShmaWxlUGF0aCkpIHtcbiAgICBwbHVnaW5zLnB1c2gocG9zdGNzc01vZHVsZXMoe1xuICAgICAgZ2V0SlNPTihfY3NzRmlsZU5hbWUsIGpzb24pOiB2b2lkIHtcbiAgICAgICAgbW9kdWxlRXhwb3J0cyA9IGpzb247XG4gICAgICB9XG4gICAgfSkpO1xuICB9XG5cbiAgaWYgKHBsdWdpbnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHsgY3NzOiBzb3VyY2UsIGRlcGVuZGVuY2llcywgbW9kdWxlRXhwb3J0cyB9O1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9zdGNzcyhwbHVnaW5zKS5wcm9jZXNzKHNvdXJjZSwgeyAuLi5wb3N0Y3NzQ29uZmlnLm9wdGlvbnMsIGZyb206IGZpbGVQYXRoLCBtYXA6IGZhbHNlIH0pO1xuICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgcmVzdWx0Lm1lc3NhZ2VzIGFzIFBvc3Rjc3NEZXBlbmRlbmN5TWVzc2FnZVtdKSB7XG4gICAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gJ2RlcGVuZGVuY3knICYmIG1lc3NhZ2UuZmlsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZXBlbmRlbmNpZXMucHVzaChtZXNzYWdlLmZpbGUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4geyBjc3M6IHJlc3VsdC5jc3MsIGRlcGVuZGVuY2llcywgbW9kdWxlRXhwb3J0cyB9O1xufVxuXG4vKipcbiAqIENvbXBpbGVzIGEgUmVhY3Qgb3IgUHJlYWN0IEpTWCBvciBUU1ggbW9kdWxlIHdpdGggdGhlIGF1dG9tYXRpYyBKU1ggcnVudGltZSwgZm9yIGEgYnVuZGxlciB0aGF0IGRvZXMgbm90IHRha2UgdGhlXG4gKiBydW50aW1lIGZyb20gdGhlIHByb2plY3QncyB0c2NvbmZpZyAocGFyY2VsIGRvZXMgbm90IGZvbGxvdyBpdHMgYGV4dGVuZHNgKS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBUcmFuc2Zvcm1Kc3hQYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgY29tcGlsZWQgbW9kdWxlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdHJhbnNmb3JtSnN4KHBhcmFtczogVHJhbnNmb3JtSnN4UGFyYW1zKTogUHJvbWlzZTxUcmFuc2Zvcm1lZE1vZHVsZT4ge1xuICBjb25zdCB7IGNvZGUsIGZpbGVQYXRoLCBqc3hJbXBvcnRTb3VyY2UgfSA9IHBhcmFtcztcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXNidWlsZFRyYW5zZm9ybShjb2RlLCB7XG4gICAganN4OiAnYXV0b21hdGljJyxcbiAgICBqc3hJbXBvcnRTb3VyY2UsXG4gICAgbG9hZGVyOiAvXFwudHN4JC9pdS50ZXN0KGZpbGVQYXRoKSA/ICd0c3gnIDogJ2pzeCcsXG4gICAgc291cmNlZmlsZTogZmlsZVBhdGgsXG4gICAgc291cmNlbWFwOiAnZXh0ZXJuYWwnXG4gIH0pO1xuICByZXR1cm4geyBjb2RlOiByZXN1bHQuY29kZSwgbWFwOiBKU09OLnBhcnNlKHJlc3VsdC5tYXApIGFzIFNvdXJjZU1hcExpa2UgfTtcbn1cblxuLyoqXG4gKiBDb21waWxlcyBhIFNvbGlkIEpTWCBvciBUU1ggbW9kdWxlOiBlc2J1aWxkIHN0cmlwcyB0aGUgVHlwZVNjcmlwdCBhbmQga2VlcHMgdGhlIEpTWCwgdGhlbiBgYmFiZWwtcHJlc2V0LXNvbGlkYFxuICogY29tcGlsZXMgdGhlIEpTWCBpbnRvIERPTSBleHByZXNzaW9ucy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBUcmFuc2Zvcm1Nb2R1bGVQYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgY29tcGlsZWQgbW9kdWxlLlxuICogQHRocm93cyBJZiBCYWJlbCBwcm9kdWNlZCBubyBjb2RlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdHJhbnNmb3JtU29saWQocGFyYW1zOiBUcmFuc2Zvcm1Tb2xpZFBhcmFtcyk6IFByb21pc2U8VHJhbnNmb3JtZWRNb2R1bGU+IHtcbiAgY29uc3QgeyBjb2RlLCBmaWxlUGF0aCB9ID0gcGFyYW1zO1xuICBjb25zdCBmZWF0dXJlID0gJ2ZyYW1ld29yazogXFwnc29saWRcXCcnO1xuICBjb25zdCBwcm9qZWN0Rm9sZGVyT3B0aW9uID0gcGFyYW1zLnByb2plY3RGb2xkZXIgPT09IHVuZGVmaW5lZCA/IHt9IDogeyBwcm9qZWN0Rm9sZGVyOiBwYXJhbXMucHJvamVjdEZvbGRlciB9O1xuICBjb25zdCBiYWJlbCA9IGV4dHJhY3REZWZhdWx0RXhwb3J0SW50ZXJvcChhd2FpdCBpbXBvcnRPcHRpb25hbFBlZXI8QmFiZWxDb3JlTGlrZT4oeyBmZWF0dXJlLCBwYWNrYWdlTmFtZTogJ0BiYWJlbC9jb3JlJywgLi4ucHJvamVjdEZvbGRlck9wdGlvbiB9KSk7XG4gIGNvbnN0IHNvbGlkUHJlc2V0ID0gZXh0cmFjdERlZmF1bHRFeHBvcnRJbnRlcm9wKGF3YWl0IGltcG9ydE9wdGlvbmFsUGVlcjxvYmplY3Q+KHsgZmVhdHVyZSwgcGFja2FnZU5hbWU6ICdiYWJlbC1wcmVzZXQtc29saWQnLCAuLi5wcm9qZWN0Rm9sZGVyT3B0aW9uIH0pKTtcblxuICBjb25zdCBzdHJpcHBlZCA9IGF3YWl0IGVzYnVpbGRUcmFuc2Zvcm0oY29kZSwge1xuICAgIGpzeDogJ3ByZXNlcnZlJyxcbiAgICBsb2FkZXI6IC9cXC50c3gkL2l1LnRlc3QoZmlsZVBhdGgpID8gJ3RzeCcgOiAnanN4JyxcbiAgICBzb3VyY2VmaWxlOiBmaWxlUGF0aCxcbiAgICBzb3VyY2VtYXA6ICdleHRlcm5hbCdcbiAgfSk7XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFiZWwudHJhbnNmb3JtQXN5bmMoc3RyaXBwZWQuY29kZSwge1xuICAgIGJhYmVscmM6IGZhbHNlLFxuICAgIGNvbmZpZ0ZpbGU6IGZhbHNlLFxuICAgIGZpbGVuYW1lOiBmaWxlUGF0aCxcbiAgICBpbnB1dFNvdXJjZU1hcDogSlNPTi5wYXJzZShzdHJpcHBlZC5tYXApIGFzIEJhYmVsVHJhbnNmb3JtT3B0aW9uc1snaW5wdXRTb3VyY2VNYXAnXSxcbiAgICBwcmVzZXRzOiBbW3NvbGlkUHJlc2V0LCB7IGdlbmVyYXRlOiAnZG9tJywgaHlkcmF0YWJsZTogZmFsc2UgfV1dLFxuICAgIHNvdXJjZU1hcHM6IHRydWVcbiAgfSk7XG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBCYWJlbCByZXR1cm5zIG5vIGNvZGUgb25seSB3aGVuIGEgcGx1Z2luIGRyb3BzIHRoZSBmaWxlLCB3aGljaCB0aGUgU29saWQgcHJlc2V0IG5ldmVyIGRvZXMuICovXG4gIGlmICghcmVzdWx0Py5jb2RlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBCYWJlbCBwcm9kdWNlZCBubyBjb2RlIGZvciAke2ZpbGVQYXRofWApO1xuICB9XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gIC8vIFdpdGggYHNvdXJjZU1hcHNgIG9uLCBCYWJlbCBhbHdheXMgcmV0dXJucyBhIHNvdXJjZSBtYXAuXG4gIHJldHVybiB7IGNvZGU6IHJlc3VsdC5jb2RlLCBtYXA6IGVuc3VyZU5vbk51bGxhYmxlKHJlc3VsdC5tYXAsIGBCYWJlbCBwcm9kdWNlZCBubyBzb3VyY2UgbWFwIGZvciAke2ZpbGVQYXRofWApIH07XG59XG5cbi8qKlxuICogQ29tcGlsZXMgYSBTdmVsdGUgY29tcG9uZW50IChgLnN2ZWx0ZWApLCB3aXRoIGl0cyBzdHlsZXMgaW5qZWN0ZWQgYnkgdGhlIGNvbXBvbmVudCBpdHNlbGYsIG9yIGEgU3ZlbHRlIG1vZHVsZVxuICogKGAuc3ZlbHRlLnRzYCwgYC5zdmVsdGUuanNgKSwgd2hvc2UgVHlwZVNjcmlwdCBlc2J1aWxkIHN0cmlwcyBmaXJzdC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBUcmFuc2Zvcm1Nb2R1bGVQYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgY29tcGlsZWQgbW9kdWxlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdHJhbnNmb3JtU3ZlbHRlKHBhcmFtczogVHJhbnNmb3JtU3ZlbHRlUGFyYW1zKTogUHJvbWlzZTxUcmFuc2Zvcm1lZE1vZHVsZT4ge1xuICBjb25zdCB7IGNvZGUsIGZpbGVQYXRoLCBpc1Byb2R1Y3Rpb25CdWlsZCB9ID0gcGFyYW1zO1xuICBjb25zdCBjb21waWxlciA9IGV4dHJhY3REZWZhdWx0RXhwb3J0SW50ZXJvcChcbiAgICBhd2FpdCBpbXBvcnRPcHRpb25hbFBlZXI8U3ZlbHRlQ29tcGlsZXJMaWtlPih7XG4gICAgICBmZWF0dXJlOiAnZnJhbWV3b3JrOiBcXCdzdmVsdGVcXCcnLFxuICAgICAgcGFja2FnZU5hbWU6ICdzdmVsdGUnLFxuICAgICAgc3BlY2lmaWVyOiAnc3ZlbHRlL2NvbXBpbGVyJyxcbiAgICAgIC4uLihwYXJhbXMucHJvamVjdEZvbGRlciAhPT0gdW5kZWZpbmVkICYmIHsgcHJvamVjdEZvbGRlcjogcGFyYW1zLnByb2plY3RGb2xkZXIgfSlcbiAgICB9KVxuICApO1xuICBjb25zdCBtb2R1bGVPcHRpb25zOiBTdmVsdGVNb2R1bGVDb21waWxlT3B0aW9uc0xpa2UgPSB7IGRldjogIWlzUHJvZHVjdGlvbkJ1aWxkLCBmaWxlbmFtZTogZmlsZVBhdGgsIGdlbmVyYXRlOiAnY2xpZW50JyB9O1xuXG4gIGlmIChTVkVMVEVfTU9EVUxFX1BBVFRFUk4udGVzdChmaWxlUGF0aCkpIHtcbiAgICBsZXQgamF2YVNjcmlwdCA9IGNvZGU7XG4gICAgaWYgKFRZUEVTQ1JJUFRfTU9EVUxFX1BBVFRFUk4udGVzdChmaWxlUGF0aCkpIHtcbiAgICAgIGNvbnN0IHN0cmlwcGVkID0gYXdhaXQgZXNidWlsZFRyYW5zZm9ybShjb2RlLCB7IGxvYWRlcjogJ3RzJywgc291cmNlZmlsZTogZmlsZVBhdGggfSk7XG4gICAgICBqYXZhU2NyaXB0ID0gc3RyaXBwZWQuY29kZTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBpbGVyLmNvbXBpbGVNb2R1bGUoamF2YVNjcmlwdCwgbW9kdWxlT3B0aW9ucykuanM7XG4gIH1cblxuICByZXR1cm4gY29tcGlsZXIuY29tcGlsZShjb2RlLCB7IC4uLm1vZHVsZU9wdGlvbnMsIGNzczogJ2luamVjdGVkJyB9KS5qcztcbn1cblxuZnVuY3Rpb24gaXNUYWlsd2luZFBsdWdpbihwbHVnaW46IEFjY2VwdGVkUGx1Z2luKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgcGx1Z2luID09PSAnb2JqZWN0JyAmJiAncG9zdGNzc1BsdWdpbicgaW4gcGx1Z2luICYmIHBsdWdpbi5wb3N0Y3NzUGx1Z2luID09PSBUQUlMV0lORF9QT1NUQ1NTX1BMVUdJTl9OQU1FO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFrQkEsMEJBQTRDO0FBQzVDLHlCQUFrQztBQUNsQyxxQkFBOEM7QUFDOUMsMEJBQW9CO0FBQ3BCLHFCQUFvQjtBQUNwQixpQ0FBK0I7QUFDL0IsNkJBQTRCO0FBSTVCLHNDQUdPO0FBRVAsTUFBTSx3QkFBb0IsaURBQTRCLDJCQUFBQSxPQUFrQjtBQUN4RSxNQUFNLHFCQUFpQixpREFBNEIsdUJBQUFDLE9BQWU7QUE0TmxFLE1BQU0sd0JBQXdCO0FBQzlCLE1BQU0sNEJBQTRCO0FBQ2xDLE1BQU0sK0JBQStCO0FBUzlCLFNBQVMsc0JBQXNCQyxTQUFtQztBQUN2RSxNQUFJLENBQUNBLFFBQU8sS0FBSztBQUNmLFdBQU9BLFFBQU87QUFBQSxFQUNoQjtBQUNBLFFBQU0sU0FBUyxPQUFPLEtBQUssS0FBSyxVQUFVQSxRQUFPLEdBQUcsR0FBRyxPQUFPLEVBQUUsU0FBUyxRQUFRO0FBQ2pGLFNBQU8sR0FBR0EsUUFBTyxJQUFJO0FBQUEsa0VBQXFFLE1BQU07QUFBQTtBQUNsRztBQVNPLFNBQVMsaUJBQWlCLGVBQXlEO0FBQ3hGLFNBQU8sa0JBQWtCLEtBQUssVUFBVSxhQUFhLENBQUM7QUFBQTtBQUN4RDtBQVNPLFNBQVMsa0JBQWtCLE9BQTJCO0FBQzNELFFBQU0sU0FBUyxPQUFPLEtBQUssS0FBSyxFQUFFLFNBQVMsUUFBUTtBQUNuRCxTQUFPLHVCQUF1QixLQUFLLFVBQVUsTUFBTSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBT3REO0FBV0EsZUFBc0Isa0JBQWtCLFFBQXlEO0FBQy9GLFFBQU0sRUFBRSxtQkFBbUIsZUFBZSxPQUFPLElBQUk7QUFDckQsUUFBTSxVQUE0QixDQUFDO0FBQ25DLFFBQU0sZUFBeUIsQ0FBQztBQUNoQyxNQUFJLFVBQTBCLENBQUM7QUFFL0IsTUFBSSxPQUFPLFNBQVM7QUFDbEIsUUFBSTtBQUNKLFFBQUk7QUFDRixlQUFTLE1BQU0sa0JBQWtCLEVBQUUsS0FBSyxpQkFBaUIsb0JBQUFDLFFBQVEsSUFBSSxHQUFHLEtBQUssb0JBQW9CLGVBQWUsY0FBYyxHQUFHLGFBQWE7QUFBQSxJQUNoSixTQUFTLE9BQU87QUFDZCxZQUFNLElBQUksTUFBTSxrSUFBa0k7QUFBQSxRQUNoSixPQUFPO0FBQUEsTUFDVCxDQUFDO0FBQUEsSUFDSDtBQUNBLFlBQVEsS0FBSyxHQUFHLE9BQU8sT0FBMkI7QUFDbEQsY0FBVSxPQUFPO0FBQ2pCLGlCQUFhLEtBQUssT0FBTyxJQUFJO0FBQUEsRUFDL0I7QUFFQSxNQUFJLE9BQU8sWUFBWSxRQUFRLE1BQU0sQ0FBQyxXQUFXLENBQUMsaUJBQWlCLE1BQU0sQ0FBQyxHQUFHO0FBQzNFLFVBQU0sRUFBRSxTQUFTLFNBQVMsSUFBSSxVQUFNLG9EQUEwQztBQUFBLE1BQzVFLFNBQVM7QUFBQSxNQUNULGFBQWE7QUFBQSxNQUNiLEdBQUksa0JBQWtCLFVBQWEsRUFBRSxjQUFjO0FBQUEsSUFDckQsQ0FBQztBQUNELFlBQVEsUUFBUSxTQUFTLEVBQUUsR0FBSSxrQkFBa0IsVUFBYSxFQUFFLE1BQU0sY0FBYyxHQUFJLFVBQVUsa0JBQWtCLENBQUMsQ0FBQztBQUFBLEVBQ3hIO0FBRUEsU0FBTyxFQUFFLGNBQWMsU0FBUyxRQUFRO0FBQzFDO0FBVUEsZUFBc0IsYUFBYSxRQUFxRDtBQUN0RixRQUFNLEVBQUUsVUFBVSxtQkFBbUIsUUFBUSxPQUFPLElBQUk7QUFDeEQsUUFBTSxnQkFBZ0IsTUFBTSxrQkFBa0IsTUFBTTtBQUNwRCxRQUFNLFVBQVUsQ0FBQyxHQUFHLGNBQWMsT0FBTztBQUN6QyxRQUFNLGVBQWUsQ0FBQyxHQUFHLGNBQWMsWUFBWTtBQUVuRCxNQUFJO0FBQ0osTUFBSSxPQUFPLGNBQWMseUJBQXFCLGlEQUFnQixRQUFRLEdBQUc7QUFDdkUsWUFBUSxLQUFLLGVBQWU7QUFBQSxNQUMxQixRQUFRLGNBQWMsTUFBWTtBQUNoQyx3QkFBZ0I7QUFBQSxNQUNsQjtBQUFBLElBQ0YsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVBLE1BQUksUUFBUSxXQUFXLEdBQUc7QUFDeEIsV0FBTyxFQUFFLEtBQUssUUFBUSxjQUFjLGNBQWM7QUFBQSxFQUNwRDtBQUVBLFFBQU0sU0FBUyxVQUFNLGVBQUFDLFNBQVEsT0FBTyxFQUFFLFFBQVEsUUFBUSxFQUFFLEdBQUcsY0FBYyxTQUFTLE1BQU0sVUFBVSxLQUFLLE1BQU0sQ0FBQztBQUM5RyxhQUFXLFdBQVcsT0FBTyxVQUF3QztBQUNuRSxRQUFJLFFBQVEsU0FBUyxnQkFBZ0IsUUFBUSxTQUFTLFFBQVc7QUFDL0QsbUJBQWEsS0FBSyxRQUFRLElBQUk7QUFBQSxJQUNoQztBQUFBLEVBQ0Y7QUFDQSxTQUFPLEVBQUUsS0FBSyxPQUFPLEtBQUssY0FBYyxjQUFjO0FBQ3hEO0FBU0EsZUFBc0IsYUFBYSxRQUF3RDtBQUN6RixRQUFNLEVBQUUsTUFBTSxVQUFVLGdCQUFnQixJQUFJO0FBQzVDLFFBQU0sU0FBUyxVQUFNLGVBQUFDLFdBQWlCLE1BQU07QUFBQSxJQUMxQyxLQUFLO0FBQUEsSUFDTDtBQUFBLElBQ0EsUUFBUSxXQUFXLEtBQUssUUFBUSxJQUFJLFFBQVE7QUFBQSxJQUM1QyxZQUFZO0FBQUEsSUFDWixXQUFXO0FBQUEsRUFDYixDQUFDO0FBQ0QsU0FBTyxFQUFFLE1BQU0sT0FBTyxNQUFNLEtBQUssS0FBSyxNQUFNLE9BQU8sR0FBRyxFQUFtQjtBQUMzRTtBQVVBLGVBQXNCLGVBQWUsUUFBMEQ7QUFDN0YsUUFBTSxFQUFFLE1BQU0sU0FBUyxJQUFJO0FBQzNCLFFBQU0sVUFBVTtBQUNoQixRQUFNLHNCQUFzQixPQUFPLGtCQUFrQixTQUFZLENBQUMsSUFBSSxFQUFFLGVBQWUsT0FBTyxjQUFjO0FBQzVHLFFBQU0sWUFBUSxpREFBNEIsVUFBTSxvREFBa0MsRUFBRSxTQUFTLGFBQWEsZUFBZSxHQUFHLG9CQUFvQixDQUFDLENBQUM7QUFDbEosUUFBTSxrQkFBYyxpREFBNEIsVUFBTSxvREFBMkIsRUFBRSxTQUFTLGFBQWEsc0JBQXNCLEdBQUcsb0JBQW9CLENBQUMsQ0FBQztBQUV4SixRQUFNLFdBQVcsVUFBTSxlQUFBQSxXQUFpQixNQUFNO0FBQUEsSUFDNUMsS0FBSztBQUFBLElBQ0wsUUFBUSxXQUFXLEtBQUssUUFBUSxJQUFJLFFBQVE7QUFBQSxJQUM1QyxZQUFZO0FBQUEsSUFDWixXQUFXO0FBQUEsRUFDYixDQUFDO0FBRUQsUUFBTSxTQUFTLE1BQU0sTUFBTSxlQUFlLFNBQVMsTUFBTTtBQUFBLElBQ3ZELFNBQVM7QUFBQSxJQUNULFlBQVk7QUFBQSxJQUNaLFVBQVU7QUFBQSxJQUNWLGdCQUFnQixLQUFLLE1BQU0sU0FBUyxHQUFHO0FBQUEsSUFDdkMsU0FBUyxDQUFDLENBQUMsYUFBYSxFQUFFLFVBQVUsT0FBTyxZQUFZLE1BQU0sQ0FBQyxDQUFDO0FBQUEsSUFDL0QsWUFBWTtBQUFBLEVBQ2QsQ0FBQztBQUVELE1BQUksQ0FBQyxRQUFRLE1BQU07QUFDakIsVUFBTSxJQUFJLE1BQU0sOEJBQThCLFFBQVEsRUFBRTtBQUFBLEVBQzFEO0FBR0EsU0FBTyxFQUFFLE1BQU0sT0FBTyxNQUFNLFNBQUssc0NBQWtCLE9BQU8sS0FBSyxvQ0FBb0MsUUFBUSxFQUFFLEVBQUU7QUFDakg7QUFTQSxlQUFzQixnQkFBZ0IsUUFBMkQ7QUFDL0YsUUFBTSxFQUFFLE1BQU0sVUFBVSxrQkFBa0IsSUFBSTtBQUM5QyxRQUFNLGVBQVc7QUFBQSxJQUNmLFVBQU0sb0RBQXVDO0FBQUEsTUFDM0MsU0FBUztBQUFBLE1BQ1QsYUFBYTtBQUFBLE1BQ2IsV0FBVztBQUFBLE1BQ1gsR0FBSSxPQUFPLGtCQUFrQixVQUFhLEVBQUUsZUFBZSxPQUFPLGNBQWM7QUFBQSxJQUNsRixDQUFDO0FBQUEsRUFDSDtBQUNBLFFBQU0sZ0JBQWdELEVBQUUsS0FBSyxDQUFDLG1CQUFtQixVQUFVLFVBQVUsVUFBVSxTQUFTO0FBRXhILE1BQUksc0JBQXNCLEtBQUssUUFBUSxHQUFHO0FBQ3hDLFFBQUksYUFBYTtBQUNqQixRQUFJLDBCQUEwQixLQUFLLFFBQVEsR0FBRztBQUM1QyxZQUFNLFdBQVcsVUFBTSxlQUFBQSxXQUFpQixNQUFNLEVBQUUsUUFBUSxNQUFNLFlBQVksU0FBUyxDQUFDO0FBQ3BGLG1CQUFhLFNBQVM7QUFBQSxJQUN4QjtBQUNBLFdBQU8sU0FBUyxjQUFjLFlBQVksYUFBYSxFQUFFO0FBQUEsRUFDM0Q7QUFFQSxTQUFPLFNBQVMsUUFBUSxNQUFNLEVBQUUsR0FBRyxlQUFlLEtBQUssV0FBVyxDQUFDLEVBQUU7QUFDdkU7QUFFQSxTQUFTLGlCQUFpQixRQUFpQztBQUN6RCxTQUFPLE9BQU8sV0FBVyxZQUFZLG1CQUFtQixVQUFVLE9BQU8sa0JBQWtCO0FBQzdGOyIsIm5hbWVzIjpbInBvc3Rjc3NMb2FkQ29uZmlnXyIsInBvc3Rjc3NNb2R1bGVzXyIsIm1vZHVsZSIsInByb2Nlc3MiLCJwb3N0Y3NzIiwiZXNidWlsZFRyYW5zZm9ybSJdfQ==
@@ -29,80 +29,6 @@ function ensureBrowserProcess() {
29
29
 
30
30
  ensureBrowserProcess();
31
31
  })();
32
- (function patchObsidianRequire() {
33
- const originalRequire = require;
34
- if (!originalRequire || originalRequire.__isPatched) {
35
- return;
36
- }
37
-
38
- require = Object.assign(
39
- (id) => requirePatched(id),
40
- originalRequire,
41
- {
42
- __isPatched: true
43
- }
44
- );
45
-
46
- function extractDefault(module) {
47
- return module && module.__esModule && 'default' in module ? module.default : module;
48
- }
49
-
50
- const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
51
- '@codemirror/autocomplete',
52
- '@codemirror/collab',
53
- '@codemirror/commands',
54
- '@codemirror/language',
55
- '@codemirror/lint',
56
- '@codemirror/search',
57
- '@codemirror/state',
58
- '@codemirror/text',
59
- '@codemirror/view',
60
- '@lezer/common',
61
- '@lezer/highlight',
62
- '@lezer/lr',
63
- 'obsidian']
64
- );
65
-
66
- const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
67
- '@codemirror/closebrackets',
68
- '@codemirror/comment',
69
- '@codemirror/fold',
70
- '@codemirror/gutter',
71
- '@codemirror/highlight',
72
- '@codemirror/history',
73
- '@codemirror/matchbrackets',
74
- '@codemirror/panel',
75
- '@codemirror/rangeset',
76
- '@codemirror/rectangular-selection',
77
- '@codemirror/stream-parser',
78
- '@codemirror/tooltip']
79
- );
80
-
81
- function requirePatched(id) {
82
- if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
83
- return originalRequire?.(id);
84
- }
85
-
86
- // eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
87
- if (globalThis.app.isMobile) {
88
- if (id === 'process' || id === 'node:process') {
89
- // eslint-disable-next-line no-console -- Valid usage.
90
- console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
91
-
92
- return process;
93
- }
94
- } else {
95
- const module = originalRequire?.(id);
96
- if (module) {
97
- return extractDefault(module);
98
- }
99
- }
100
-
101
- // eslint-disable-next-line no-console -- Valid usage.
102
- console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
103
- return {};
104
- }
105
- })();
106
32
 
107
33
  "use strict";
108
34
  var __defProp = Object.defineProperty;
@@ -179,4 +105,4 @@ async function transformModule(context, source) {
179
105
  0 && (module.exports = {
180
106
  raw
181
107
  });
182
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9vYnNpZGlhbi1wbHVnaW4td2VicGFjay1sb2FkZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSB3ZWJwYWNrIGxvYWRlciB0aGUgd2VicGFjayBhZGFwdGVyIGFkZHMgZm9yIHRoZSBidWlsZCBmZWF0dXJlczogaXQgcnVucyBvbmUgb2YgdGhlIHNoYXJlZCB0cmFuc2Zvcm1zIChTb2xpZCxcbiAqIFN2ZWx0ZSwgYSBzdHlsZXNoZWV0J3MgUG9zdENTUyBhbmQgVGFpbHdpbmQsIGEgV2ViQXNzZW1ibHkgbW9kdWxlJ3MgYnl0ZXMpIG9uIHRoZSBtb2R1bGUgaXQgaXMgZ2l2ZW4uIFRoZSBhZGFwdGVyXG4gKiBuYW1lcyBpdCBieSBwYXRoIGluIHRoZSBydWxlcyBpdCBhZGRzLCBzbyBhIHByb2plY3QgbmV2ZXIgbmFtZXMgaXQuXG4gKlxuICogRXJhc2FibGUgVHlwZVNjcmlwdCBvbmx5IChubyBlbnVtcywgbm8gcGFyYW1ldGVyIHByb3BlcnRpZXMpLCBzbyB3ZWJwYWNrIGNhbiBsb2FkIGl0IHN0cmFpZ2h0IGZyb20gc291cmNlIHdoZW4gdGhlXG4gKiB0b29sa2l0IHJ1bnMgZnJvbSBzb3VyY2UuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBMb2FkZXJDb250ZXh0IH0gZnJvbSAnd2VicGFjayc7XG5cbmltcG9ydCB7IGludm9rZUFzeW5jU2FmZWx5IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IHRyYW5zZm9ybSBhcyBlc2J1aWxkVHJhbnNmb3JtIH0gZnJvbSAnZXNidWlsZCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgRmVhdHVyZUZpbGVLaW5kLFxuICBPYnNpZGlhblBsdWdpblN0eWxlc09wdGlvbnNcbn0gZnJvbSAnLi9vYnNpZGlhbi1wbHVnaW4tZmVhdHVyZXMudHMnO1xuaW1wb3J0IHR5cGUgeyBTb3VyY2VNYXBMaWtlIH0gZnJvbSAnLi9vYnNpZGlhbi1wbHVnaW4tdHJhbnNmb3Jtcy50cyc7XG5cbmltcG9ydCB7XG4gIGdldFdhc21Nb2R1bGVDb2RlLFxuICB0cmFuc2Zvcm1Dc3MsXG4gIHRyYW5zZm9ybVNvbGlkLFxuICB0cmFuc2Zvcm1TdmVsdGVcbn0gZnJvbSAnLi9vYnNpZGlhbi1wbHVnaW4tdHJhbnNmb3Jtcy50cyc7XG5cbi8qKlxuICogV2hpY2ggdHJhbnNmb3JtIHRoZSBsb2FkZXIgcnVuczogb25lIG9mIHRoZSBzaGFyZWQgdHJhbnNmb3Jtcywgb3IgYHR5cGVzY3JpcHRgLCB3aGljaCBzdHJpcHMgdGhlIHR5cGVzIG9mIGEgVnVlXG4gKiBjb21wb25lbnQncyBgPHNjcmlwdCBsYW5nPVwidHNcIj5gIGJsb2NrIGFmdGVyIGB1bnBsdWdpbi12dWVgIGV4dHJhY3RlZCBpdC5cbiAqL1xuZXhwb3J0IHR5cGUgT2JzaWRpYW5QbHVnaW5XZWJwYWNrTG9hZGVyS2luZCA9ICd0eXBlc2NyaXB0JyB8IEZlYXR1cmVGaWxlS2luZDtcblxuLyoqXG4gKiBUaGUgb3B0aW9ucyB0aGUgd2VicGFjayBhZGFwdGVyIGdpdmVzIHRoZSBsb2FkZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2JzaWRpYW5QbHVnaW5XZWJwYWNrTG9hZGVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgaXMgYSBwcm9kdWN0aW9uIGJ1aWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNQcm9kdWN0aW9uQnVpbGQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoaWNoIHRyYW5zZm9ybSB0aGUgbG9hZGVyIHJ1bnMuXG4gICAqL1xuICByZWFkb25seSBraW5kOiBPYnNpZGlhblBsdWdpbldlYnBhY2tMb2FkZXJLaW5kO1xuXG4gIC8qKlxuICAgKiBUaGUgc3R5bGVzaGVldCBvcHRpb25zLCBmb3IgYSBgc3R5bGVzaGVldGAgbG9hZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgc3R5bGVzPzogT2JzaWRpYW5QbHVnaW5TdHlsZXNPcHRpb25zO1xufVxuXG5pbnRlcmZhY2UgTG9hZGVyUmVzdWx0IHtcbiAgcmVhZG9ubHkgY29kZTogc3RyaW5nO1xuICByZWFkb25seSBtYXA/OiBTb3VyY2VNYXBMaWtlIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRlbGxzIHdlYnBhY2sgdG8gaGFuZCB0aGUgbG9hZGVyIHRoZSBtb2R1bGUncyBieXRlcywgd2hpY2ggYSBXZWJBc3NlbWJseSBtb2R1bGUgbmVlZHMuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL2NvbnNpc3RlbnQtYm9vbGVhbi1uYW1lIC0tIGByYXdgIGlzIHRoZSBuYW1lIHdlYnBhY2sgcmVhZHMuXG5leHBvcnQgY29uc3QgcmF3ID0gdHJ1ZTtcblxuLyoqXG4gKiBSdW5zIHRoZSBzaGFyZWQgdHJhbnNmb3JtIHRoZSBsb2FkZXIncyBvcHRpb25zIG5hbWUgb24gb25lIG1vZHVsZS5cbiAqXG4gKiBAcGFyYW0gdGhpcyAtIFRoZSB3ZWJwYWNrIGxvYWRlciBjb250ZXh0LlxuICogQHBhcmFtIHNvdXJjZSAtIFRoZSBtb2R1bGUncyBieXRlcy5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLWRlZmF1bHQtZXhwb3J0IC0tIFdlYnBhY2sgdGFrZXMgYSBsb2FkZXIgZnJvbSBpdHMgbW9kdWxlJ3MgZGVmYXVsdCBleHBvcnQuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvYnNpZGlhblBsdWdpbldlYnBhY2tMb2FkZXIodGhpczogTG9hZGVyQ29udGV4dDxPYnNpZGlhblBsdWdpbldlYnBhY2tMb2FkZXJPcHRpb25zPiwgc291cmNlOiBCdWZmZXIpOiB2b2lkIHtcbiAgY29uc3QgY2FsbGJhY2sgPSB0aGlzLmFzeW5jKCk7XG4gIGludm9rZUFzeW5jU2FmZWx5KGFzeW5jICgpID0+IHtcbiAgICBsZXQgcmVzdWx0OiBMb2FkZXJSZXN1bHQ7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IHRyYW5zZm9ybU1vZHVsZSh0aGlzLCBzb3VyY2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvciBhcyBFcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdC5jb2RlLCByZXN1bHQubWFwICYmIEpTT04uc3RyaW5naWZ5KHJlc3VsdC5tYXApKTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHRyYW5zZm9ybU1vZHVsZShjb250ZXh0OiBMb2FkZXJDb250ZXh0PE9ic2lkaWFuUGx1Z2luV2VicGFja0xvYWRlck9wdGlvbnM+LCBzb3VyY2U6IEJ1ZmZlcik6IFByb21pc2U8TG9hZGVyUmVzdWx0PiB7XG4gIGNvbnN0IHsgaXNQcm9kdWN0aW9uQnVpbGQsIGtpbmQsIHN0eWxlcyB9ID0gY29udGV4dC5nZXRPcHRpb25zKCk7XG4gIGNvbnN0IGZpbGVQYXRoID0gY29udGV4dC5yZXNvdXJjZVBhdGg7XG4gIGNvbnN0IGNvZGUgPSBzb3VyY2UudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gIHN3aXRjaCAoa2luZCkge1xuICAgIGNhc2UgJ2pzeCc6IHtcbiAgICAgIHJldHVybiBhd2FpdCB0cmFuc2Zvcm1Tb2xpZCh7IGNvZGUsIGZpbGVQYXRoLCBpc1Byb2R1Y3Rpb25CdWlsZCB9KTtcbiAgICB9XG4gICAgY2FzZSAnc3R5bGVzaGVldCc6IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYW5zZm9ybUNzcyh7IGZpbGVQYXRoLCBpc0Nzc01vZHVsZVNjb3BlZDogZmFsc2UsIGlzUHJvZHVjdGlvbkJ1aWxkLCBzb3VyY2U6IGNvZGUsIHN0eWxlczogc3R5bGVzID8/IHt9IH0pO1xuICAgICAgZm9yIChjb25zdCBkZXBlbmRlbmN5IG9mIHJlc3VsdC5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgY29udGV4dC5hZGREZXBlbmRlbmN5KGRlcGVuZGVuY3kpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgY29kZTogcmVzdWx0LmNzcyB9O1xuICAgIH1cbiAgICBjYXNlICdzdmVsdGUnOiB7XG4gICAgICByZXR1cm4gYXdhaXQgdHJhbnNmb3JtU3ZlbHRlKHsgY29kZSwgZmlsZVBhdGgsIGlzUHJvZHVjdGlvbkJ1aWxkIH0pO1xuICAgIH1cbiAgICBjYXNlICd0eXBlc2NyaXB0Jzoge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXNidWlsZFRyYW5zZm9ybShjb2RlLCB7IGxvYWRlcjogJ3RzJywgc291cmNlZmlsZTogZmlsZVBhdGgsIHNvdXJjZW1hcDogJ2V4dGVybmFsJyB9KTtcbiAgICAgIHJldHVybiB7IGNvZGU6IHJlc3VsdC5jb2RlLCBtYXA6IEpTT04ucGFyc2UocmVzdWx0Lm1hcCkgYXMgU291cmNlTWFwTGlrZSB9O1xuICAgIH1cbiAgICBjYXNlICd3YXNtJzoge1xuICAgICAgcmV0dXJuIHsgY29kZTogZ2V0V2FzbU1vZHVsZUNvZGUoc291cmNlKSB9O1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbG9hZGVyIGtpbmQ6ICR7U3RyaW5nKGtpbmQpfWApO1xuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBYUEsbUJBQWtDO0FBQ2xDLHFCQUE4QztBQVE5Qyx3Q0FLTztBQXFDQSxNQUFNLE1BQU07QUFTSixTQUFSLDRCQUFzRyxRQUFzQjtBQUNqSSxRQUFNLFdBQVcsS0FBSyxNQUFNO0FBQzVCLHNDQUFrQixZQUFZO0FBQzVCLFFBQUk7QUFDSixRQUFJO0FBQ0YsZUFBUyxNQUFNLGdCQUFnQixNQUFNLE1BQU07QUFBQSxJQUM3QyxTQUFTLE9BQU87QUFDZCxlQUFTLEtBQWM7QUFDdkI7QUFBQSxJQUNGO0FBQ0EsYUFBUyxNQUFNLE9BQU8sTUFBTSxPQUFPLE9BQU8sS0FBSyxVQUFVLE9BQU8sR0FBRyxDQUFDO0FBQUEsRUFDdEUsQ0FBQztBQUNIO0FBRUEsZUFBZSxnQkFBZ0IsU0FBNEQsUUFBdUM7QUFDaEksUUFBTSxFQUFFLG1CQUFtQixNQUFNLE9BQU8sSUFBSSxRQUFRLFdBQVc7QUFDL0QsUUFBTSxXQUFXLFFBQVE7QUFDekIsUUFBTSxPQUFPLE9BQU8sU0FBUyxPQUFPO0FBQ3BDLFVBQVEsTUFBTTtBQUFBLElBQ1osS0FBSyxPQUFPO0FBQ1YsYUFBTyxVQUFNLGtEQUFlLEVBQUUsTUFBTSxVQUFVLGtCQUFrQixDQUFDO0FBQUEsSUFDbkU7QUFBQSxJQUNBLEtBQUssY0FBYztBQUNqQixZQUFNLFNBQVMsVUFBTSxnREFBYSxFQUFFLFVBQVUsbUJBQW1CLE9BQU8sbUJBQW1CLFFBQVEsTUFBTSxRQUFRLFVBQVUsQ0FBQyxFQUFFLENBQUM7QUFDL0gsaUJBQVcsY0FBYyxPQUFPLGNBQWM7QUFDNUMsZ0JBQVEsY0FBYyxVQUFVO0FBQUEsTUFDbEM7QUFDQSxhQUFPLEVBQUUsTUFBTSxPQUFPLElBQUk7QUFBQSxJQUM1QjtBQUFBLElBQ0EsS0FBSyxVQUFVO0FBQ2IsYUFBTyxVQUFNLG1EQUFnQixFQUFFLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQztBQUFBLElBQ3BFO0FBQUEsSUFDQSxLQUFLLGNBQWM7QUFDakIsWUFBTSxTQUFTLFVBQU0sZUFBQUEsV0FBaUIsTUFBTSxFQUFFLFFBQVEsTUFBTSxZQUFZLFVBQVUsV0FBVyxXQUFXLENBQUM7QUFDekcsYUFBTyxFQUFFLE1BQU0sT0FBTyxNQUFNLEtBQUssS0FBSyxNQUFNLE9BQU8sR0FBRyxFQUFtQjtBQUFBLElBQzNFO0FBQUEsSUFDQSxLQUFLLFFBQVE7QUFDWCxhQUFPLEVBQUUsVUFBTSxxREFBa0IsTUFBTSxFQUFFO0FBQUEsSUFDM0M7QUFBQSxJQUNBLFNBQVM7QUFDUCxZQUFNLElBQUksTUFBTSx3QkFBd0IsT0FBTyxJQUFJLENBQUMsRUFBRTtBQUFBLElBQ3hEO0FBQUEsRUFDRjtBQUNGOyIsIm5hbWVzIjpbImVzYnVpbGRUcmFuc2Zvcm0iXX0=
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9vYnNpZGlhbi1wbHVnaW4td2VicGFjay1sb2FkZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSB3ZWJwYWNrIGxvYWRlciB0aGUgd2VicGFjayBhZGFwdGVyIGFkZHMgZm9yIHRoZSBidWlsZCBmZWF0dXJlczogaXQgcnVucyBvbmUgb2YgdGhlIHNoYXJlZCB0cmFuc2Zvcm1zIChTb2xpZCxcbiAqIFN2ZWx0ZSwgYSBzdHlsZXNoZWV0J3MgUG9zdENTUyBhbmQgVGFpbHdpbmQsIGEgV2ViQXNzZW1ibHkgbW9kdWxlJ3MgYnl0ZXMpIG9uIHRoZSBtb2R1bGUgaXQgaXMgZ2l2ZW4uIFRoZSBhZGFwdGVyXG4gKiBuYW1lcyBpdCBieSBwYXRoIGluIHRoZSBydWxlcyBpdCBhZGRzLCBzbyBhIHByb2plY3QgbmV2ZXIgbmFtZXMgaXQuXG4gKlxuICogRXJhc2FibGUgVHlwZVNjcmlwdCBvbmx5IChubyBlbnVtcywgbm8gcGFyYW1ldGVyIHByb3BlcnRpZXMpLCBzbyB3ZWJwYWNrIGNhbiBsb2FkIGl0IHN0cmFpZ2h0IGZyb20gc291cmNlIHdoZW4gdGhlXG4gKiB0b29sa2l0IHJ1bnMgZnJvbSBzb3VyY2UuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBMb2FkZXJDb250ZXh0IH0gZnJvbSAnd2VicGFjayc7XG5cbmltcG9ydCB7IGludm9rZUFzeW5jU2FmZWx5IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IHRyYW5zZm9ybSBhcyBlc2J1aWxkVHJhbnNmb3JtIH0gZnJvbSAnZXNidWlsZCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgRmVhdHVyZUZpbGVLaW5kLFxuICBPYnNpZGlhblBsdWdpblN0eWxlc09wdGlvbnNcbn0gZnJvbSAnLi9vYnNpZGlhbi1wbHVnaW4tZmVhdHVyZXMudHMnO1xuaW1wb3J0IHR5cGUgeyBTb3VyY2VNYXBMaWtlIH0gZnJvbSAnLi9vYnNpZGlhbi1wbHVnaW4tdHJhbnNmb3Jtcy50cyc7XG5cbmltcG9ydCB7XG4gIGdldFdhc21Nb2R1bGVDb2RlLFxuICB0cmFuc2Zvcm1Dc3MsXG4gIHRyYW5zZm9ybVNvbGlkLFxuICB0cmFuc2Zvcm1TdmVsdGVcbn0gZnJvbSAnLi9vYnNpZGlhbi1wbHVnaW4tdHJhbnNmb3Jtcy50cyc7XG5cbi8qKlxuICogV2hpY2ggdHJhbnNmb3JtIHRoZSBsb2FkZXIgcnVuczogb25lIG9mIHRoZSBzaGFyZWQgdHJhbnNmb3Jtcywgb3IgYHR5cGVzY3JpcHRgLCB3aGljaCBzdHJpcHMgdGhlIHR5cGVzIG9mIGEgVnVlXG4gKiBjb21wb25lbnQncyBgPHNjcmlwdCBsYW5nPVwidHNcIj5gIGJsb2NrIGFmdGVyIGB1bnBsdWdpbi12dWVgIGV4dHJhY3RlZCBpdC5cbiAqL1xuZXhwb3J0IHR5cGUgT2JzaWRpYW5QbHVnaW5XZWJwYWNrTG9hZGVyS2luZCA9ICd0eXBlc2NyaXB0JyB8IEZlYXR1cmVGaWxlS2luZDtcblxuLyoqXG4gKiBUaGUgb3B0aW9ucyB0aGUgd2VicGFjayBhZGFwdGVyIGdpdmVzIHRoZSBsb2FkZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2JzaWRpYW5QbHVnaW5XZWJwYWNrTG9hZGVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgaXMgYSBwcm9kdWN0aW9uIGJ1aWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNQcm9kdWN0aW9uQnVpbGQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoaWNoIHRyYW5zZm9ybSB0aGUgbG9hZGVyIHJ1bnMuXG4gICAqL1xuICByZWFkb25seSBraW5kOiBPYnNpZGlhblBsdWdpbldlYnBhY2tMb2FkZXJLaW5kO1xuXG4gIC8qKlxuICAgKiBUaGUgc3R5bGVzaGVldCBvcHRpb25zLCBmb3IgYSBgc3R5bGVzaGVldGAgbG9hZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgc3R5bGVzPzogT2JzaWRpYW5QbHVnaW5TdHlsZXNPcHRpb25zO1xufVxuXG5pbnRlcmZhY2UgTG9hZGVyUmVzdWx0IHtcbiAgcmVhZG9ubHkgY29kZTogc3RyaW5nO1xuICByZWFkb25seSBtYXA/OiBTb3VyY2VNYXBMaWtlIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRlbGxzIHdlYnBhY2sgdG8gaGFuZCB0aGUgbG9hZGVyIHRoZSBtb2R1bGUncyBieXRlcywgd2hpY2ggYSBXZWJBc3NlbWJseSBtb2R1bGUgbmVlZHMuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL2NvbnNpc3RlbnQtYm9vbGVhbi1uYW1lIC0tIGByYXdgIGlzIHRoZSBuYW1lIHdlYnBhY2sgcmVhZHMuXG5leHBvcnQgY29uc3QgcmF3ID0gdHJ1ZTtcblxuLyoqXG4gKiBSdW5zIHRoZSBzaGFyZWQgdHJhbnNmb3JtIHRoZSBsb2FkZXIncyBvcHRpb25zIG5hbWUgb24gb25lIG1vZHVsZS5cbiAqXG4gKiBAcGFyYW0gdGhpcyAtIFRoZSB3ZWJwYWNrIGxvYWRlciBjb250ZXh0LlxuICogQHBhcmFtIHNvdXJjZSAtIFRoZSBtb2R1bGUncyBieXRlcy5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLWRlZmF1bHQtZXhwb3J0IC0tIFdlYnBhY2sgdGFrZXMgYSBsb2FkZXIgZnJvbSBpdHMgbW9kdWxlJ3MgZGVmYXVsdCBleHBvcnQuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvYnNpZGlhblBsdWdpbldlYnBhY2tMb2FkZXIodGhpczogTG9hZGVyQ29udGV4dDxPYnNpZGlhblBsdWdpbldlYnBhY2tMb2FkZXJPcHRpb25zPiwgc291cmNlOiBCdWZmZXIpOiB2b2lkIHtcbiAgY29uc3QgY2FsbGJhY2sgPSB0aGlzLmFzeW5jKCk7XG4gIGludm9rZUFzeW5jU2FmZWx5KGFzeW5jICgpID0+IHtcbiAgICBsZXQgcmVzdWx0OiBMb2FkZXJSZXN1bHQ7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IHRyYW5zZm9ybU1vZHVsZSh0aGlzLCBzb3VyY2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvciBhcyBFcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdC5jb2RlLCByZXN1bHQubWFwICYmIEpTT04uc3RyaW5naWZ5KHJlc3VsdC5tYXApKTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHRyYW5zZm9ybU1vZHVsZShjb250ZXh0OiBMb2FkZXJDb250ZXh0PE9ic2lkaWFuUGx1Z2luV2VicGFja0xvYWRlck9wdGlvbnM+LCBzb3VyY2U6IEJ1ZmZlcik6IFByb21pc2U8TG9hZGVyUmVzdWx0PiB7XG4gIGNvbnN0IHsgaXNQcm9kdWN0aW9uQnVpbGQsIGtpbmQsIHN0eWxlcyB9ID0gY29udGV4dC5nZXRPcHRpb25zKCk7XG4gIGNvbnN0IGZpbGVQYXRoID0gY29udGV4dC5yZXNvdXJjZVBhdGg7XG4gIGNvbnN0IGNvZGUgPSBzb3VyY2UudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gIHN3aXRjaCAoa2luZCkge1xuICAgIGNhc2UgJ2pzeCc6IHtcbiAgICAgIHJldHVybiBhd2FpdCB0cmFuc2Zvcm1Tb2xpZCh7IGNvZGUsIGZpbGVQYXRoLCBpc1Byb2R1Y3Rpb25CdWlsZCB9KTtcbiAgICB9XG4gICAgY2FzZSAnc3R5bGVzaGVldCc6IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYW5zZm9ybUNzcyh7IGZpbGVQYXRoLCBpc0Nzc01vZHVsZVNjb3BlZDogZmFsc2UsIGlzUHJvZHVjdGlvbkJ1aWxkLCBzb3VyY2U6IGNvZGUsIHN0eWxlczogc3R5bGVzID8/IHt9IH0pO1xuICAgICAgZm9yIChjb25zdCBkZXBlbmRlbmN5IG9mIHJlc3VsdC5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgY29udGV4dC5hZGREZXBlbmRlbmN5KGRlcGVuZGVuY3kpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgY29kZTogcmVzdWx0LmNzcyB9O1xuICAgIH1cbiAgICBjYXNlICdzdmVsdGUnOiB7XG4gICAgICByZXR1cm4gYXdhaXQgdHJhbnNmb3JtU3ZlbHRlKHsgY29kZSwgZmlsZVBhdGgsIGlzUHJvZHVjdGlvbkJ1aWxkIH0pO1xuICAgIH1cbiAgICBjYXNlICd0eXBlc2NyaXB0Jzoge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXNidWlsZFRyYW5zZm9ybShjb2RlLCB7IGxvYWRlcjogJ3RzJywgc291cmNlZmlsZTogZmlsZVBhdGgsIHNvdXJjZW1hcDogJ2V4dGVybmFsJyB9KTtcbiAgICAgIHJldHVybiB7IGNvZGU6IHJlc3VsdC5jb2RlLCBtYXA6IEpTT04ucGFyc2UocmVzdWx0Lm1hcCkgYXMgU291cmNlTWFwTGlrZSB9O1xuICAgIH1cbiAgICBjYXNlICd3YXNtJzoge1xuICAgICAgcmV0dXJuIHsgY29kZTogZ2V0V2FzbU1vZHVsZUNvZGUoc291cmNlKSB9O1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbG9hZGVyIGtpbmQ6ICR7U3RyaW5nKGtpbmQpfWApO1xuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWFBLG1CQUFrQztBQUNsQyxxQkFBOEM7QUFROUMsd0NBS087QUFxQ0EsTUFBTSxNQUFNO0FBU0osU0FBUiw0QkFBc0csUUFBc0I7QUFDakksUUFBTSxXQUFXLEtBQUssTUFBTTtBQUM1QixzQ0FBa0IsWUFBWTtBQUM1QixRQUFJO0FBQ0osUUFBSTtBQUNGLGVBQVMsTUFBTSxnQkFBZ0IsTUFBTSxNQUFNO0FBQUEsSUFDN0MsU0FBUyxPQUFPO0FBQ2QsZUFBUyxLQUFjO0FBQ3ZCO0FBQUEsSUFDRjtBQUNBLGFBQVMsTUFBTSxPQUFPLE1BQU0sT0FBTyxPQUFPLEtBQUssVUFBVSxPQUFPLEdBQUcsQ0FBQztBQUFBLEVBQ3RFLENBQUM7QUFDSDtBQUVBLGVBQWUsZ0JBQWdCLFNBQTRELFFBQXVDO0FBQ2hJLFFBQU0sRUFBRSxtQkFBbUIsTUFBTSxPQUFPLElBQUksUUFBUSxXQUFXO0FBQy9ELFFBQU0sV0FBVyxRQUFRO0FBQ3pCLFFBQU0sT0FBTyxPQUFPLFNBQVMsT0FBTztBQUNwQyxVQUFRLE1BQU07QUFBQSxJQUNaLEtBQUssT0FBTztBQUNWLGFBQU8sVUFBTSxrREFBZSxFQUFFLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQztBQUFBLElBQ25FO0FBQUEsSUFDQSxLQUFLLGNBQWM7QUFDakIsWUFBTSxTQUFTLFVBQU0sZ0RBQWEsRUFBRSxVQUFVLG1CQUFtQixPQUFPLG1CQUFtQixRQUFRLE1BQU0sUUFBUSxVQUFVLENBQUMsRUFBRSxDQUFDO0FBQy9ILGlCQUFXLGNBQWMsT0FBTyxjQUFjO0FBQzVDLGdCQUFRLGNBQWMsVUFBVTtBQUFBLE1BQ2xDO0FBQ0EsYUFBTyxFQUFFLE1BQU0sT0FBTyxJQUFJO0FBQUEsSUFDNUI7QUFBQSxJQUNBLEtBQUssVUFBVTtBQUNiLGFBQU8sVUFBTSxtREFBZ0IsRUFBRSxNQUFNLFVBQVUsa0JBQWtCLENBQUM7QUFBQSxJQUNwRTtBQUFBLElBQ0EsS0FBSyxjQUFjO0FBQ2pCLFlBQU0sU0FBUyxVQUFNLGVBQUFBLFdBQWlCLE1BQU0sRUFBRSxRQUFRLE1BQU0sWUFBWSxVQUFVLFdBQVcsV0FBVyxDQUFDO0FBQ3pHLGFBQU8sRUFBRSxNQUFNLE9BQU8sTUFBTSxLQUFLLEtBQUssTUFBTSxPQUFPLEdBQUcsRUFBbUI7QUFBQSxJQUMzRTtBQUFBLElBQ0EsS0FBSyxRQUFRO0FBQ1gsYUFBTyxFQUFFLFVBQU0scURBQWtCLE1BQU0sRUFBRTtBQUFBLElBQzNDO0FBQUEsSUFDQSxTQUFTO0FBQ1AsWUFBTSxJQUFJLE1BQU0sd0JBQXdCLE9BQU8sSUFBSSxDQUFDLEVBQUU7QUFBQSxJQUN4RDtBQUFBLEVBQ0Y7QUFDRjsiLCJuYW1lcyI6WyJlc2J1aWxkVHJhbnNmb3JtIl19