@mnaoumov/obsidian-lib 10.11.0 → 10.12.0

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 (117) hide show
  1. package/README.md +26 -0
  2. package/components/all-windows-status-bar-item-component/package.json +6 -0
  3. package/components/shared-component-pool-component/package.json +6 -0
  4. package/components/workspace-layout-state-component/package.json +6 -0
  5. package/dist/lib/cjs/__merged.cjs +76 -1
  6. package/dist/lib/cjs/__merged.d.cts +11 -4
  7. package/dist/lib/cjs/bug-report-diagnostics.cjs +222 -0
  8. package/dist/lib/cjs/bug-report-diagnostics.d.cts +186 -0
  9. package/dist/lib/cjs/bug-report.cjs +36 -10
  10. package/dist/lib/cjs/bug-report.d.cts +65 -0
  11. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.cjs +93 -2
  12. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.d.cts +34 -2
  13. package/dist/lib/cjs/components/all-windows-status-bar-item-component.cjs +245 -0
  14. package/dist/lib/cjs/components/all-windows-status-bar-item-component.d.cts +146 -0
  15. package/dist/lib/cjs/components/embed-extensions-component.cjs +20 -3
  16. package/dist/lib/cjs/components/embed-extensions-component.d.cts +8 -0
  17. package/dist/lib/cjs/components/embeddable-markdown-editor-component.cjs +16 -2
  18. package/dist/lib/cjs/components/embeddable-markdown-editor-component.d.cts +9 -0
  19. package/dist/lib/cjs/components/index.cjs +12 -3
  20. package/dist/lib/cjs/components/index.d.cts +3 -0
  21. package/dist/lib/cjs/components/plugin-gate-component.cjs +2 -9
  22. package/dist/lib/cjs/components/plugin-settings-component.cjs +7 -2
  23. package/dist/lib/cjs/components/shared-component-pool-component.cjs +368 -0
  24. package/dist/lib/cjs/components/shared-component-pool-component.d.cts +129 -0
  25. package/dist/lib/cjs/components/workspace-layout-state-component.cjs +495 -0
  26. package/dist/lib/cjs/components/workspace-layout-state-component.d.cts +239 -0
  27. package/dist/lib/cjs/css-class.cjs +5 -1
  28. package/dist/lib/cjs/css-class.d.cts +16 -0
  29. package/dist/lib/cjs/data-handler.cjs +156 -5
  30. package/dist/lib/cjs/data-handler.d.cts +128 -2
  31. package/dist/lib/cjs/desktop-git-runner.cjs +4 -14
  32. package/dist/lib/cjs/desktop-git-runner.d.cts +8 -2
  33. package/dist/lib/cjs/generated-during-build.cjs +2 -2
  34. package/dist/lib/cjs/git-rename-history.cjs +1 -1
  35. package/dist/lib/cjs/git-rename-history.d.cts +2 -2
  36. package/dist/lib/cjs/i18n/locales/en.cjs +23 -1
  37. package/dist/lib/cjs/i18n/locales/en.d.cts +22 -0
  38. package/dist/lib/cjs/i18n/locales/translations-map.d.cts +22 -0
  39. package/dist/lib/cjs/index.cjs +4 -1
  40. package/dist/lib/cjs/index.d.cts +1 -0
  41. package/dist/lib/cjs/markdown-view.cjs +191 -3
  42. package/dist/lib/cjs/markdown-view.d.cts +48 -1
  43. package/dist/lib/cjs/modals/copy-text-manually.cjs +181 -0
  44. package/dist/lib/cjs/modals/copy-text-manually.d.cts +38 -0
  45. package/dist/lib/cjs/modals/index.cjs +7 -1
  46. package/dist/lib/cjs/modals/index.d.cts +2 -0
  47. package/dist/lib/cjs/modals/review-bug-report-diagnostics.cjs +202 -0
  48. package/dist/lib/cjs/modals/review-bug-report-diagnostics.d.cts +30 -0
  49. package/dist/lib/cjs/plugin/index.cjs +4 -1
  50. package/dist/lib/cjs/plugin/index.d.cts +1 -0
  51. package/dist/lib/cjs/plugin/plugin-api.cjs +13 -4
  52. package/dist/lib/cjs/plugin/plugin-api.d.cts +5 -1
  53. package/dist/lib/cjs/plugin/plugin-install-state.cjs +46 -1
  54. package/dist/lib/cjs/plugin/plugin-install-state.d.cts +30 -0
  55. package/dist/lib/cjs/plugin/plugin-instance.cjs +448 -0
  56. package/dist/lib/cjs/plugin/plugin-instance.d.cts +251 -0
  57. package/dist/lib/cjs/plugin/plugin.cjs +16 -1
  58. package/dist/lib/cjs/plugin/plugin.d.cts +7 -0
  59. package/dist/lib/esm/__merged.d.mts +11 -4
  60. package/dist/lib/esm/__merged.mjs +83 -3
  61. package/dist/lib/esm/bug-report-diagnostics.d.mts +186 -0
  62. package/dist/lib/esm/bug-report-diagnostics.mjs +127 -0
  63. package/dist/lib/esm/bug-report.d.mts +65 -0
  64. package/dist/lib/esm/bug-report.mjs +33 -10
  65. package/dist/lib/esm/command-handlers/open-bug-report-command-handler.d.mts +34 -2
  66. package/dist/lib/esm/command-handlers/open-bug-report-command-handler.mjs +99 -3
  67. package/dist/lib/esm/components/all-windows-status-bar-item-component.d.mts +146 -0
  68. package/dist/lib/esm/components/all-windows-status-bar-item-component.mjs +154 -0
  69. package/dist/lib/esm/components/embed-extensions-component.d.mts +8 -0
  70. package/dist/lib/esm/components/embed-extensions-component.mjs +20 -3
  71. package/dist/lib/esm/components/embeddable-markdown-editor-component.d.mts +9 -0
  72. package/dist/lib/esm/components/embeddable-markdown-editor-component.mjs +16 -2
  73. package/dist/lib/esm/components/index.d.mts +3 -0
  74. package/dist/lib/esm/components/index.mjs +8 -2
  75. package/dist/lib/esm/components/plugin-gate-component.mjs +5 -13
  76. package/dist/lib/esm/components/plugin-settings-component.mjs +7 -2
  77. package/dist/lib/esm/components/shared-component-pool-component.d.mts +129 -0
  78. package/dist/lib/esm/components/shared-component-pool-component.mjs +280 -0
  79. package/dist/lib/esm/components/workspace-layout-state-component.d.mts +239 -0
  80. package/dist/lib/esm/components/workspace-layout-state-component.mjs +404 -0
  81. package/dist/lib/esm/css-class.d.mts +16 -0
  82. package/dist/lib/esm/css-class.mjs +5 -1
  83. package/dist/lib/esm/data-handler.d.mts +128 -2
  84. package/dist/lib/esm/data-handler.mjs +152 -4
  85. package/dist/lib/esm/desktop-git-runner.d.mts +8 -2
  86. package/dist/lib/esm/desktop-git-runner.mjs +3 -3
  87. package/dist/lib/esm/generated-during-build.mjs +2 -2
  88. package/dist/lib/esm/git-rename-history.d.mts +2 -2
  89. package/dist/lib/esm/git-rename-history.mjs +1 -1
  90. package/dist/lib/esm/i18n/locales/en.d.mts +22 -0
  91. package/dist/lib/esm/i18n/locales/en.mjs +23 -1
  92. package/dist/lib/esm/i18n/locales/translations-map.d.mts +22 -0
  93. package/dist/lib/esm/index.d.mts +1 -0
  94. package/dist/lib/esm/index.mjs +3 -1
  95. package/dist/lib/esm/markdown-view.d.mts +48 -1
  96. package/dist/lib/esm/markdown-view.mjs +192 -2
  97. package/dist/lib/esm/modals/copy-text-manually.d.mts +38 -0
  98. package/dist/lib/esm/modals/copy-text-manually.mjs +99 -0
  99. package/dist/lib/esm/modals/index.d.mts +2 -0
  100. package/dist/lib/esm/modals/index.mjs +5 -1
  101. package/dist/lib/esm/modals/review-bug-report-diagnostics.d.mts +30 -0
  102. package/dist/lib/esm/modals/review-bug-report-diagnostics.mjs +120 -0
  103. package/dist/lib/esm/plugin/index.d.mts +1 -0
  104. package/dist/lib/esm/plugin/index.mjs +3 -1
  105. package/dist/lib/esm/plugin/plugin-api.d.mts +5 -1
  106. package/dist/lib/esm/plugin/plugin-api.mjs +13 -4
  107. package/dist/lib/esm/plugin/plugin-install-state.d.mts +30 -0
  108. package/dist/lib/esm/plugin/plugin-install-state.mjs +44 -1
  109. package/dist/lib/esm/plugin/plugin-instance.d.mts +251 -0
  110. package/dist/lib/esm/plugin/plugin-instance.mjs +366 -0
  111. package/dist/lib/esm/plugin/plugin.d.mts +7 -0
  112. package/dist/lib/esm/plugin/plugin.mjs +16 -1
  113. package/dist/styles.css +16 -1
  114. package/modals/copy-text-manually/package.json +6 -0
  115. package/modals/review-bug-report-diagnostics/package.json +6 -0
  116. package/package.json +2 -1
  117. package/plugin/plugin-instance/package.json +6 -0
@@ -0,0 +1,186 @@
1
+ /// <reference path="./library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Optional diagnostics a plugin can attach to a bug report: sections of text the user reviews before
6
+ * anything leaves Obsidian, a bounded log buffer, and redaction of a plugin's own settings.
7
+ *
8
+ * Nothing here reads logs or settings by itself. A log buffer holds only what the plugin wrote to it since
9
+ * the buffer was created, never the console's history, and a settings section holds only the object the
10
+ * plugin hands over. Redaction replaces the values of caller-declared keys; it is not a promise to find
11
+ * every secret, which is why every section is shown to the user, and a potentially private one is left
12
+ * out unless the user includes it.
13
+ */
14
+ /**
15
+ * A section of diagnostics for a bug report.
16
+ */
17
+ export interface BugReportDiagnosticSection {
18
+ /**
19
+ * The section's text, shown to the user and sent as written.
20
+ */
21
+ readonly content: string;
22
+ /**
23
+ * A stable id, unique among the sections of one report.
24
+ */
25
+ readonly id: string;
26
+ /**
27
+ * Whether the section can hold private data, such as logs or settings. A potentially private section is
28
+ * left out of the report unless the user includes it.
29
+ *
30
+ * @default `false`
31
+ */
32
+ readonly isPotentiallyPrivate?: boolean;
33
+ /**
34
+ * The section's title.
35
+ */
36
+ readonly title: string;
37
+ }
38
+ /**
39
+ * Constructor parameters for {@link BugReportLogBuffer}.
40
+ */
41
+ export interface BugReportLogBufferConstructorOptions {
42
+ /**
43
+ * The most entries kept. Older entries are dropped first.
44
+ *
45
+ * @default {@link DEFAULT_BUG_REPORT_LOG_MAX_ENTRIES}
46
+ */
47
+ readonly maxEntries?: number;
48
+ /**
49
+ * The most characters kept of one entry. A longer entry is cut, and says so.
50
+ *
51
+ * @default {@link DEFAULT_BUG_REPORT_LOG_MAX_ENTRY_LENGTH}
52
+ */
53
+ readonly maxEntryLength?: number;
54
+ /**
55
+ * Gets the current time. For tests.
56
+ *
57
+ * @default `() => new Date()`
58
+ */
59
+ readonly now?: () => Date;
60
+ }
61
+ /**
62
+ * Parameters for {@link BugReportLogBuffer.toSection}.
63
+ */
64
+ export interface BugReportLogBufferToSectionOptions {
65
+ /**
66
+ * The section's id.
67
+ *
68
+ * @default `'logs'`
69
+ */
70
+ readonly id?: string;
71
+ /**
72
+ * The section's title.
73
+ *
74
+ * @default `'Logs'`
75
+ */
76
+ readonly title?: string;
77
+ }
78
+ /**
79
+ * Parameters for {@link createSettingsDiagnosticSection}.
80
+ */
81
+ export interface CreateSettingsDiagnosticSectionParams {
82
+ /**
83
+ * The section's id.
84
+ *
85
+ * @default `'settings'`
86
+ */
87
+ readonly id?: string;
88
+ /**
89
+ * The keys whose values are replaced with {@link REDACTED_VALUE}, at any depth, compared without case.
90
+ */
91
+ readonly secretKeys?: readonly string[];
92
+ /**
93
+ * The reporting plugin's own settings, such as its `data.json`.
94
+ */
95
+ readonly settings: unknown;
96
+ /**
97
+ * The section's title.
98
+ *
99
+ * @default `'Plugin settings'`
100
+ */
101
+ readonly title?: string;
102
+ }
103
+ /**
104
+ * The value that replaces a redacted setting.
105
+ */
106
+ export declare const REDACTED_VALUE = "[redacted]";
107
+ /**
108
+ * The default number of entries a {@link BugReportLogBuffer} keeps.
109
+ */
110
+ export declare const DEFAULT_BUG_REPORT_LOG_MAX_ENTRIES = 200;
111
+ /**
112
+ * The default number of characters a {@link BugReportLogBuffer} keeps of one entry.
113
+ */
114
+ export declare const DEFAULT_BUG_REPORT_LOG_MAX_ENTRY_LENGTH = 2000;
115
+ /**
116
+ * A bounded buffer of log entries a plugin writes for its bug reports. It keeps only what the plugin adds
117
+ * after creating it, at most {@link BugReportLogBufferConstructorOptions.maxEntries} entries, each cut to
118
+ * {@link BugReportLogBufferConstructorOptions.maxEntryLength} characters.
119
+ */
120
+ export declare class BugReportLogBuffer {
121
+ private readonly entries;
122
+ private readonly maxEntries;
123
+ private readonly maxEntryLength;
124
+ private readonly now;
125
+ /**
126
+ * Constructs a new instance.
127
+ *
128
+ * @param options - Constructor options.
129
+ */
130
+ constructor(options?: BugReportLogBufferConstructorOptions);
131
+ /**
132
+ * Adds an entry, stamped with the current time.
133
+ *
134
+ * @param message - The entry's text.
135
+ */
136
+ add(message: string): void;
137
+ /**
138
+ * Removes every entry.
139
+ */
140
+ clear(): void;
141
+ /**
142
+ * Gets the entries, oldest first.
143
+ *
144
+ * @returns The entries.
145
+ */
146
+ getEntries(): readonly string[];
147
+ /**
148
+ * Builds a potentially private diagnostic section holding the entries.
149
+ *
150
+ * @param options - The options.
151
+ * @returns The section.
152
+ */
153
+ toSection(options?: BugReportLogBufferToSectionOptions): BugReportDiagnosticSection;
154
+ }
155
+ /**
156
+ * Builds a potentially private diagnostic section holding the plugin's settings as JSON, with the values
157
+ * of {@link CreateSettingsDiagnosticSectionParams.secretKeys} redacted.
158
+ *
159
+ * @param params - The parameters.
160
+ * @returns The section.
161
+ */
162
+ export declare function createSettingsDiagnosticSection(params: CreateSettingsDiagnosticSectionParams): BugReportDiagnosticSection;
163
+ /**
164
+ * Renders diagnostic sections as Markdown: a level-3 heading and a fenced code block per section. The
165
+ * fence is longer than any run of backticks in the content, so no content can close it.
166
+ *
167
+ * @param sections - The sections.
168
+ * @returns The Markdown, or an empty string when there are no sections.
169
+ */
170
+ export declare function formatBugReportDiagnostics(sections: readonly BugReportDiagnosticSection[]): string;
171
+ /**
172
+ * Gets a Markdown code fence that the given content cannot close.
173
+ *
174
+ * @param content - The content to fence.
175
+ * @returns A run of backticks longer than the longest run in the content, and at least three long.
176
+ */
177
+ export declare function getMarkdownFence(content: string): string;
178
+ /**
179
+ * Copies settings, replacing the value of every key in `secretKeys`, at any depth and compared without
180
+ * case, with {@link REDACTED_VALUE}. The original is not changed.
181
+ *
182
+ * @param settings - The settings.
183
+ * @param secretKeys - The keys to redact.
184
+ * @returns The redacted copy.
185
+ */
186
+ export declare function redactSettings(settings: unknown, secretKeys: readonly string[]): unknown;
@@ -0,0 +1,127 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ const REDACTED_VALUE = "[redacted]";
7
+ const DEFAULT_BUG_REPORT_LOG_MAX_ENTRIES = 200;
8
+ const DEFAULT_BUG_REPORT_LOG_MAX_ENTRY_LENGTH = 2e3;
9
+ const JSON_INDENT = 2;
10
+ const MIN_FENCE_LENGTH = 3;
11
+ const TRUNCATION_MARKER = " [truncated]";
12
+ class BugReportLogBuffer {
13
+ entries = [];
14
+ maxEntries;
15
+ maxEntryLength;
16
+ now;
17
+ /**
18
+ * Constructs a new instance.
19
+ *
20
+ * @param options - Constructor options.
21
+ */
22
+ constructor(options = {}) {
23
+ this.maxEntries = Math.max(1, Math.floor(options.maxEntries ?? DEFAULT_BUG_REPORT_LOG_MAX_ENTRIES));
24
+ this.maxEntryLength = Math.max(1, Math.floor(options.maxEntryLength ?? DEFAULT_BUG_REPORT_LOG_MAX_ENTRY_LENGTH));
25
+ this.now = options.now ?? (() => /* @__PURE__ */ new Date());
26
+ }
27
+ /**
28
+ * Adds an entry, stamped with the current time.
29
+ *
30
+ * @param message - The entry's text.
31
+ */
32
+ add(message) {
33
+ const text = message.length > this.maxEntryLength ? message.slice(0, this.maxEntryLength) + TRUNCATION_MARKER : message;
34
+ this.entries.push(`${this.now().toISOString()} ${text}`);
35
+ if (this.entries.length > this.maxEntries) {
36
+ this.entries.splice(0, this.entries.length - this.maxEntries);
37
+ }
38
+ }
39
+ /**
40
+ * Removes every entry.
41
+ */
42
+ clear() {
43
+ this.entries.length = 0;
44
+ }
45
+ /**
46
+ * Gets the entries, oldest first.
47
+ *
48
+ * @returns The entries.
49
+ */
50
+ getEntries() {
51
+ return [...this.entries];
52
+ }
53
+ /**
54
+ * Builds a potentially private diagnostic section holding the entries.
55
+ *
56
+ * @param options - The options.
57
+ * @returns The section.
58
+ */
59
+ toSection(options = {}) {
60
+ return {
61
+ content: this.entries.length === 0 ? "(no log entries)" : this.entries.join("\n"),
62
+ id: options.id ?? "logs",
63
+ isPotentiallyPrivate: true,
64
+ title: options.title ?? "Logs"
65
+ };
66
+ }
67
+ }
68
+ function createSettingsDiagnosticSection(params) {
69
+ return {
70
+ content: JSON.stringify(redactSettings(params.settings, params.secretKeys ?? []), null, JSON_INDENT) ?? "undefined",
71
+ id: params.id ?? "settings",
72
+ isPotentiallyPrivate: true,
73
+ title: params.title ?? "Plugin settings"
74
+ };
75
+ }
76
+ function formatBugReportDiagnostics(sections) {
77
+ return sections.map((section) => {
78
+ const fence = getMarkdownFence(section.content);
79
+ return `### ${section.title}
80
+
81
+ ${fence}
82
+ ${section.content}
83
+ ${fence}`;
84
+ }).join("\n\n");
85
+ }
86
+ function getMarkdownFence(content) {
87
+ let longestRun = 0;
88
+ for (const match of content.matchAll(/`+/g)) {
89
+ longestRun = Math.max(longestRun, match[0].length);
90
+ }
91
+ return "`".repeat(Math.max(MIN_FENCE_LENGTH, longestRun + 1));
92
+ }
93
+ function redactSettings(settings, secretKeys) {
94
+ const lowerCaseSecretKeys = new Set(secretKeys.map((key) => key.toLowerCase()));
95
+ return redactValue(settings, lowerCaseSecretKeys, /* @__PURE__ */ new WeakSet());
96
+ }
97
+ function redactValue(value, lowerCaseSecretKeys, seen) {
98
+ if (typeof value !== "object" || value === null) {
99
+ return value;
100
+ }
101
+ if (seen.has(value)) {
102
+ return "[circular]";
103
+ }
104
+ seen.add(value);
105
+ if (Array.isArray(value)) {
106
+ const result2 = value.map((item) => redactValue(item, lowerCaseSecretKeys, seen));
107
+ seen.delete(value);
108
+ return result2;
109
+ }
110
+ const result = {};
111
+ for (const [key, child] of Object.entries(value)) {
112
+ result[key] = lowerCaseSecretKeys.has(key.toLowerCase()) ? REDACTED_VALUE : redactValue(child, lowerCaseSecretKeys, seen);
113
+ }
114
+ seen.delete(value);
115
+ return result;
116
+ }
117
+ export {
118
+ BugReportLogBuffer,
119
+ DEFAULT_BUG_REPORT_LOG_MAX_ENTRIES,
120
+ DEFAULT_BUG_REPORT_LOG_MAX_ENTRY_LENGTH,
121
+ REDACTED_VALUE,
122
+ createSettingsDiagnosticSection,
123
+ formatBugReportDiagnostics,
124
+ getMarkdownFence,
125
+ redactSettings
126
+ };
127
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2J1Zy1yZXBvcnQtZGlhZ25vc3RpY3MudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBPcHRpb25hbCBkaWFnbm9zdGljcyBhIHBsdWdpbiBjYW4gYXR0YWNoIHRvIGEgYnVnIHJlcG9ydDogc2VjdGlvbnMgb2YgdGV4dCB0aGUgdXNlciByZXZpZXdzIGJlZm9yZVxuICogYW55dGhpbmcgbGVhdmVzIE9ic2lkaWFuLCBhIGJvdW5kZWQgbG9nIGJ1ZmZlciwgYW5kIHJlZGFjdGlvbiBvZiBhIHBsdWdpbidzIG93biBzZXR0aW5ncy5cbiAqXG4gKiBOb3RoaW5nIGhlcmUgcmVhZHMgbG9ncyBvciBzZXR0aW5ncyBieSBpdHNlbGYuIEEgbG9nIGJ1ZmZlciBob2xkcyBvbmx5IHdoYXQgdGhlIHBsdWdpbiB3cm90ZSB0byBpdCBzaW5jZVxuICogdGhlIGJ1ZmZlciB3YXMgY3JlYXRlZCwgbmV2ZXIgdGhlIGNvbnNvbGUncyBoaXN0b3J5LCBhbmQgYSBzZXR0aW5ncyBzZWN0aW9uIGhvbGRzIG9ubHkgdGhlIG9iamVjdCB0aGVcbiAqIHBsdWdpbiBoYW5kcyBvdmVyLiBSZWRhY3Rpb24gcmVwbGFjZXMgdGhlIHZhbHVlcyBvZiBjYWxsZXItZGVjbGFyZWQga2V5czsgaXQgaXMgbm90IGEgcHJvbWlzZSB0byBmaW5kXG4gKiBldmVyeSBzZWNyZXQsIHdoaWNoIGlzIHdoeSBldmVyeSBzZWN0aW9uIGlzIHNob3duIHRvIHRoZSB1c2VyLCBhbmQgYSBwb3RlbnRpYWxseSBwcml2YXRlIG9uZSBpcyBsZWZ0XG4gKiBvdXQgdW5sZXNzIHRoZSB1c2VyIGluY2x1ZGVzIGl0LlxuICovXG5cbi8qKlxuICogQSBzZWN0aW9uIG9mIGRpYWdub3N0aWNzIGZvciBhIGJ1ZyByZXBvcnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVnUmVwb3J0RGlhZ25vc3RpY1NlY3Rpb24ge1xuICAvKipcbiAgICogVGhlIHNlY3Rpb24ncyB0ZXh0LCBzaG93biB0byB0aGUgdXNlciBhbmQgc2VudCBhcyB3cml0dGVuLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHN0YWJsZSBpZCwgdW5pcXVlIGFtb25nIHRoZSBzZWN0aW9ucyBvZiBvbmUgcmVwb3J0LlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgc2VjdGlvbiBjYW4gaG9sZCBwcml2YXRlIGRhdGEsIHN1Y2ggYXMgbG9ncyBvciBzZXR0aW5ncy4gQSBwb3RlbnRpYWxseSBwcml2YXRlIHNlY3Rpb24gaXNcbiAgICogbGVmdCBvdXQgb2YgdGhlIHJlcG9ydCB1bmxlc3MgdGhlIHVzZXIgaW5jbHVkZXMgaXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IGlzUG90ZW50aWFsbHlQcml2YXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHNlY3Rpb24ncyB0aXRsZS5cbiAgICovXG4gIHJlYWRvbmx5IHRpdGxlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uc3RydWN0b3IgcGFyYW1ldGVycyBmb3Ige0BsaW5rIEJ1Z1JlcG9ydExvZ0J1ZmZlcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVnUmVwb3J0TG9nQnVmZmVyQ29uc3RydWN0b3JPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBtb3N0IGVudHJpZXMga2VwdC4gT2xkZXIgZW50cmllcyBhcmUgZHJvcHBlZCBmaXJzdC5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIERFRkFVTFRfQlVHX1JFUE9SVF9MT0dfTUFYX0VOVFJJRVN9XG4gICAqL1xuICByZWFkb25seSBtYXhFbnRyaWVzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9zdCBjaGFyYWN0ZXJzIGtlcHQgb2Ygb25lIGVudHJ5LiBBIGxvbmdlciBlbnRyeSBpcyBjdXQsIGFuZCBzYXlzIHNvLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgREVGQVVMVF9CVUdfUkVQT1JUX0xPR19NQVhfRU5UUllfTEVOR1RIfVxuICAgKi9cbiAgcmVhZG9ubHkgbWF4RW50cnlMZW5ndGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgdGltZS4gRm9yIHRlc3RzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgKCkgPT4gbmV3IERhdGUoKWBcbiAgICovXG4gIHJlYWRvbmx5IG5vdz86ICgpID0+IERhdGU7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIEJ1Z1JlcG9ydExvZ0J1ZmZlci50b1NlY3Rpb259LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Z1JlcG9ydExvZ0J1ZmZlclRvU2VjdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHNlY3Rpb24ncyBpZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYCdsb2dzJ2BcbiAgICovXG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VjdGlvbidzIHRpdGxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJ0xvZ3MnYFxuICAgKi9cbiAgcmVhZG9ubHkgdGl0bGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNyZWF0ZVNldHRpbmdzRGlhZ25vc3RpY1NlY3Rpb259LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVNldHRpbmdzRGlhZ25vc3RpY1NlY3Rpb25QYXJhbXMge1xuICAvKipcbiAgICogVGhlIHNlY3Rpb24ncyBpZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYCdzZXR0aW5ncydgXG4gICAqL1xuICByZWFkb25seSBpZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGtleXMgd2hvc2UgdmFsdWVzIGFyZSByZXBsYWNlZCB3aXRoIHtAbGluayBSRURBQ1RFRF9WQUxVRX0sIGF0IGFueSBkZXB0aCwgY29tcGFyZWQgd2l0aG91dCBjYXNlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0S2V5cz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVwb3J0aW5nIHBsdWdpbidzIG93biBzZXR0aW5ncywgc3VjaCBhcyBpdHMgYGRhdGEuanNvbmAuXG4gICAqL1xuICByZWFkb25seSBzZXR0aW5nczogdW5rbm93bjtcblxuICAvKipcbiAgICogVGhlIHNlY3Rpb24ncyB0aXRsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYCdQbHVnaW4gc2V0dGluZ3MnYFxuICAgKi9cbiAgcmVhZG9ubHkgdGl0bGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHZhbHVlIHRoYXQgcmVwbGFjZXMgYSByZWRhY3RlZCBzZXR0aW5nLlxuICovXG5leHBvcnQgY29uc3QgUkVEQUNURURfVkFMVUUgPSAnW3JlZGFjdGVkXSc7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgbnVtYmVyIG9mIGVudHJpZXMgYSB7QGxpbmsgQnVnUmVwb3J0TG9nQnVmZmVyfSBrZWVwcy5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfQlVHX1JFUE9SVF9MT0dfTUFYX0VOVFJJRVMgPSAyMDA7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYSB7QGxpbmsgQnVnUmVwb3J0TG9nQnVmZmVyfSBrZWVwcyBvZiBvbmUgZW50cnkuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0JVR19SRVBPUlRfTE9HX01BWF9FTlRSWV9MRU5HVEggPSAyMDAwO1xuXG5jb25zdCBKU09OX0lOREVOVCA9IDI7XG5jb25zdCBNSU5fRkVOQ0VfTEVOR1RIID0gMztcbmNvbnN0IFRSVU5DQVRJT05fTUFSS0VSID0gJyBbdHJ1bmNhdGVkXSc7XG5cbi8qKlxuICogQSBib3VuZGVkIGJ1ZmZlciBvZiBsb2cgZW50cmllcyBhIHBsdWdpbiB3cml0ZXMgZm9yIGl0cyBidWcgcmVwb3J0cy4gSXQga2VlcHMgb25seSB3aGF0IHRoZSBwbHVnaW4gYWRkc1xuICogYWZ0ZXIgY3JlYXRpbmcgaXQsIGF0IG1vc3Qge0BsaW5rIEJ1Z1JlcG9ydExvZ0J1ZmZlckNvbnN0cnVjdG9yT3B0aW9ucy5tYXhFbnRyaWVzfSBlbnRyaWVzLCBlYWNoIGN1dCB0b1xuICoge0BsaW5rIEJ1Z1JlcG9ydExvZ0J1ZmZlckNvbnN0cnVjdG9yT3B0aW9ucy5tYXhFbnRyeUxlbmd0aH0gY2hhcmFjdGVycy5cbiAqL1xuZXhwb3J0IGNsYXNzIEJ1Z1JlcG9ydExvZ0J1ZmZlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW50cmllczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXhFbnRyaWVzOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4RW50cnlMZW5ndGg6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBub3c6ICgpID0+IERhdGU7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYSBuZXcgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQ29uc3RydWN0b3Igb3B0aW9ucy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBCdWdSZXBvcnRMb2dCdWZmZXJDb25zdHJ1Y3Rvck9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMubWF4RW50cmllcyA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3Iob3B0aW9ucy5tYXhFbnRyaWVzID8/IERFRkFVTFRfQlVHX1JFUE9SVF9MT0dfTUFYX0VOVFJJRVMpKTtcbiAgICB0aGlzLm1heEVudHJ5TGVuZ3RoID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihvcHRpb25zLm1heEVudHJ5TGVuZ3RoID8/IERFRkFVTFRfQlVHX1JFUE9SVF9MT0dfTUFYX0VOVFJZX0xFTkdUSCkpO1xuICAgIHRoaXMubm93ID0gb3B0aW9ucy5ub3cgPz8gKCgpOiBEYXRlID0+IG5ldyBEYXRlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gZW50cnksIHN0YW1wZWQgd2l0aCB0aGUgY3VycmVudCB0aW1lLlxuICAgKlxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBlbnRyeSdzIHRleHQuXG4gICAqL1xuICBwdWJsaWMgYWRkKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHRleHQgPSBtZXNzYWdlLmxlbmd0aCA+IHRoaXMubWF4RW50cnlMZW5ndGhcbiAgICAgID8gbWVzc2FnZS5zbGljZSgwLCB0aGlzLm1heEVudHJ5TGVuZ3RoKSArIFRSVU5DQVRJT05fTUFSS0VSXG4gICAgICA6IG1lc3NhZ2U7XG4gICAgdGhpcy5lbnRyaWVzLnB1c2goYCR7dGhpcy5ub3coKS50b0lTT1N0cmluZygpfSAke3RleHR9YCk7XG4gICAgaWYgKHRoaXMuZW50cmllcy5sZW5ndGggPiB0aGlzLm1heEVudHJpZXMpIHtcbiAgICAgIHRoaXMuZW50cmllcy5zcGxpY2UoMCwgdGhpcy5lbnRyaWVzLmxlbmd0aCAtIHRoaXMubWF4RW50cmllcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgZXZlcnkgZW50cnkuXG4gICAqL1xuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5lbnRyaWVzLmxlbmd0aCA9IDA7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZW50cmllcywgb2xkZXN0IGZpcnN0LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgZW50cmllcy5cbiAgICovXG4gIHB1YmxpYyBnZXRFbnRyaWVzKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuZW50cmllc107XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgcG90ZW50aWFsbHkgcHJpdmF0ZSBkaWFnbm9zdGljIHNlY3Rpb24gaG9sZGluZyB0aGUgZW50cmllcy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucy5cbiAgICogQHJldHVybnMgVGhlIHNlY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgdG9TZWN0aW9uKG9wdGlvbnM6IEJ1Z1JlcG9ydExvZ0J1ZmZlclRvU2VjdGlvbk9wdGlvbnMgPSB7fSk6IEJ1Z1JlcG9ydERpYWdub3N0aWNTZWN0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogdGhpcy5lbnRyaWVzLmxlbmd0aCA9PT0gMCA/ICcobm8gbG9nIGVudHJpZXMpJyA6IHRoaXMuZW50cmllcy5qb2luKCdcXG4nKSxcbiAgICAgIGlkOiBvcHRpb25zLmlkID8/ICdsb2dzJyxcbiAgICAgIGlzUG90ZW50aWFsbHlQcml2YXRlOiB0cnVlLFxuICAgICAgdGl0bGU6IG9wdGlvbnMudGl0bGUgPz8gJ0xvZ3MnXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhIHBvdGVudGlhbGx5IHByaXZhdGUgZGlhZ25vc3RpYyBzZWN0aW9uIGhvbGRpbmcgdGhlIHBsdWdpbidzIHNldHRpbmdzIGFzIEpTT04sIHdpdGggdGhlIHZhbHVlc1xuICogb2Yge0BsaW5rIENyZWF0ZVNldHRpbmdzRGlhZ25vc3RpY1NlY3Rpb25QYXJhbXMuc2VjcmV0S2V5c30gcmVkYWN0ZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgVGhlIHNlY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTZXR0aW5nc0RpYWdub3N0aWNTZWN0aW9uKHBhcmFtczogQ3JlYXRlU2V0dGluZ3NEaWFnbm9zdGljU2VjdGlvblBhcmFtcyk6IEJ1Z1JlcG9ydERpYWdub3N0aWNTZWN0aW9uIHtcbiAgcmV0dXJuIHtcbiAgICBjb250ZW50OiBKU09OLnN0cmluZ2lmeShyZWRhY3RTZXR0aW5ncyhwYXJhbXMuc2V0dGluZ3MsIHBhcmFtcy5zZWNyZXRLZXlzID8/IFtdKSwgbnVsbCwgSlNPTl9JTkRFTlQpID8/ICd1bmRlZmluZWQnLFxuICAgIGlkOiBwYXJhbXMuaWQgPz8gJ3NldHRpbmdzJyxcbiAgICBpc1BvdGVudGlhbGx5UHJpdmF0ZTogdHJ1ZSxcbiAgICB0aXRsZTogcGFyYW1zLnRpdGxlID8/ICdQbHVnaW4gc2V0dGluZ3MnXG4gIH07XG59XG5cbi8qKlxuICogUmVuZGVycyBkaWFnbm9zdGljIHNlY3Rpb25zIGFzIE1hcmtkb3duOiBhIGxldmVsLTMgaGVhZGluZyBhbmQgYSBmZW5jZWQgY29kZSBibG9jayBwZXIgc2VjdGlvbi4gVGhlXG4gKiBmZW5jZSBpcyBsb25nZXIgdGhhbiBhbnkgcnVuIG9mIGJhY2t0aWNrcyBpbiB0aGUgY29udGVudCwgc28gbm8gY29udGVudCBjYW4gY2xvc2UgaXQuXG4gKlxuICogQHBhcmFtIHNlY3Rpb25zIC0gVGhlIHNlY3Rpb25zLlxuICogQHJldHVybnMgVGhlIE1hcmtkb3duLCBvciBhbiBlbXB0eSBzdHJpbmcgd2hlbiB0aGVyZSBhcmUgbm8gc2VjdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRCdWdSZXBvcnREaWFnbm9zdGljcyhzZWN0aW9uczogcmVhZG9ubHkgQnVnUmVwb3J0RGlhZ25vc3RpY1NlY3Rpb25bXSk6IHN0cmluZyB7XG4gIHJldHVybiBzZWN0aW9ucy5tYXAoKHNlY3Rpb24pID0+IHtcbiAgICBjb25zdCBmZW5jZSA9IGdldE1hcmtkb3duRmVuY2Uoc2VjdGlvbi5jb250ZW50KTtcbiAgICByZXR1cm4gYCMjIyAke3NlY3Rpb24udGl0bGV9XFxuXFxuJHtmZW5jZX1cXG4ke3NlY3Rpb24uY29udGVudH1cXG4ke2ZlbmNlfWA7XG4gIH0pLmpvaW4oJ1xcblxcbicpO1xufVxuXG4vKipcbiAqIEdldHMgYSBNYXJrZG93biBjb2RlIGZlbmNlIHRoYXQgdGhlIGdpdmVuIGNvbnRlbnQgY2Fubm90IGNsb3NlLlxuICpcbiAqIEBwYXJhbSBjb250ZW50IC0gVGhlIGNvbnRlbnQgdG8gZmVuY2UuXG4gKiBAcmV0dXJucyBBIHJ1biBvZiBiYWNrdGlja3MgbG9uZ2VyIHRoYW4gdGhlIGxvbmdlc3QgcnVuIGluIHRoZSBjb250ZW50LCBhbmQgYXQgbGVhc3QgdGhyZWUgbG9uZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hcmtkb3duRmVuY2UoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IGxvbmdlc3RSdW4gPSAwO1xuICBmb3IgKGNvbnN0IG1hdGNoIG9mIGNvbnRlbnQubWF0Y2hBbGwoL2ArL2cpKSB7XG4gICAgbG9uZ2VzdFJ1biA9IE1hdGgubWF4KGxvbmdlc3RSdW4sIG1hdGNoWzBdLmxlbmd0aCk7XG4gIH1cbiAgcmV0dXJuICdgJy5yZXBlYXQoTWF0aC5tYXgoTUlOX0ZFTkNFX0xFTkdUSCwgbG9uZ2VzdFJ1biArIDEpKTtcbn1cblxuLyoqXG4gKiBDb3BpZXMgc2V0dGluZ3MsIHJlcGxhY2luZyB0aGUgdmFsdWUgb2YgZXZlcnkga2V5IGluIGBzZWNyZXRLZXlzYCwgYXQgYW55IGRlcHRoIGFuZCBjb21wYXJlZCB3aXRob3V0XG4gKiBjYXNlLCB3aXRoIHtAbGluayBSRURBQ1RFRF9WQUxVRX0uIFRoZSBvcmlnaW5hbCBpcyBub3QgY2hhbmdlZC5cbiAqXG4gKiBAcGFyYW0gc2V0dGluZ3MgLSBUaGUgc2V0dGluZ3MuXG4gKiBAcGFyYW0gc2VjcmV0S2V5cyAtIFRoZSBrZXlzIHRvIHJlZGFjdC5cbiAqIEByZXR1cm5zIFRoZSByZWRhY3RlZCBjb3B5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVkYWN0U2V0dGluZ3Moc2V0dGluZ3M6IHVua25vd24sIHNlY3JldEtleXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogdW5rbm93biB7XG4gIGNvbnN0IGxvd2VyQ2FzZVNlY3JldEtleXMgPSBuZXcgU2V0KHNlY3JldEtleXMubWFwKChrZXkpID0+IGtleS50b0xvd2VyQ2FzZSgpKSk7XG4gIHJldHVybiByZWRhY3RWYWx1ZShzZXR0aW5ncywgbG93ZXJDYXNlU2VjcmV0S2V5cywgbmV3IFdlYWtTZXQoKSk7XG59XG5cbmZ1bmN0aW9uIHJlZGFjdFZhbHVlKHZhbHVlOiB1bmtub3duLCBsb3dlckNhc2VTZWNyZXRLZXlzOiBSZWFkb25seVNldDxzdHJpbmc+LCBzZWVuOiBXZWFrU2V0PG9iamVjdD4pOiB1bmtub3duIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBpZiAoc2Vlbi5oYXModmFsdWUpKSB7XG4gICAgcmV0dXJuICdbY2lyY3VsYXJdJztcbiAgfVxuICBzZWVuLmFkZCh2YWx1ZSk7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdmFsdWUubWFwKChpdGVtOiB1bmtub3duKSA9PiByZWRhY3RWYWx1ZShpdGVtLCBsb3dlckNhc2VTZWNyZXRLZXlzLCBzZWVuKSk7XG4gICAgc2Vlbi5kZWxldGUodmFsdWUpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgY2hpbGRdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuICAgIHJlc3VsdFtrZXldID0gbG93ZXJDYXNlU2VjcmV0S2V5cy5oYXMoa2V5LnRvTG93ZXJDYXNlKCkpID8gUkVEQUNURURfVkFMVUUgOiByZWRhY3RWYWx1ZShjaGlsZCwgbG93ZXJDYXNlU2VjcmV0S2V5cywgc2Vlbik7XG4gIH1cbiAgc2Vlbi5kZWxldGUodmFsdWUpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFzSE8sTUFBTSxpQkFBaUI7QUFLdkIsTUFBTSxxQ0FBcUM7QUFLM0MsTUFBTSwwQ0FBMEM7QUFFdkQsTUFBTSxjQUFjO0FBQ3BCLE1BQU0sbUJBQW1CO0FBQ3pCLE1BQU0sb0JBQW9CO0FBT25CLE1BQU0sbUJBQW1CO0FBQUEsRUFDYixVQUFvQixDQUFDO0FBQUEsRUFDckI7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9WLFlBQVks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
@@ -13,6 +13,7 @@
13
13
  * structurally here, and reads as `unknown` if a later version drops it.
14
14
  */
15
15
  import type { App } from 'obsidian';
16
+ import type { BugReportDiagnosticSection } from './bug-report-diagnostics.mjs';
16
17
  /**
17
18
  * The ids of the bug-report issue form's fields that {@link getBugReportIssueFormUrl} prefills. GitHub
18
19
  * prefills a field from a query parameter named after the field's `id`, so a form must give its fields
@@ -40,6 +41,59 @@ export declare enum BugReportIssueFormFieldId {
40
41
  * The file name of the bug-report issue form, under `.github/ISSUE_TEMPLATE`.
41
42
  */
42
43
  export declare const BUG_REPORT_ISSUE_FORM_TEMPLATE = "bug_report.yml";
44
+ /**
45
+ * The default budget, in characters of the encoded URL, of a prefilled bug-report link.
46
+ *
47
+ * Measured against `github.com` on 2026-11-07, signed out: an issue-form URL up to about 6,540 characters
48
+ * was answered with the usual redirect to the form, about 8,088 with a 502, and 8,288 and more with a 414.
49
+ * 6,000 leaves room for a longer repository name and for a signed-in session's own limits.
50
+ */
51
+ export declare const DEFAULT_BUG_REPORT_MAX_URL_LENGTH = 6000;
52
+ /**
53
+ * A link to a bug-report issue form, as {@link buildBugReportIssueFormLink} builds it.
54
+ */
55
+ export interface BugReportIssueFormLink {
56
+ /**
57
+ * The text the user must paste into the form's environment field, when the full report did not fit the
58
+ * URL budget; `null` when the URL carries the whole report.
59
+ */
60
+ readonly clipboardText: null | string;
61
+ /**
62
+ * The link.
63
+ */
64
+ readonly url: string;
65
+ }
66
+ /**
67
+ * Parameters for {@link buildBugReportIssueFormLink}.
68
+ */
69
+ export interface BuildBugReportIssueFormLinkParams {
70
+ /**
71
+ * The diagnostics the user agreed to include, appended to the environment field.
72
+ */
73
+ readonly diagnostics?: readonly BugReportDiagnosticSection[];
74
+ /**
75
+ * The environment, from {@link getBugReportEnvironment}.
76
+ */
77
+ readonly environment: BugReportEnvironment;
78
+ /**
79
+ * The plugin's GitHub repository, as `owner/name`.
80
+ */
81
+ readonly gitHubRepo: string;
82
+ /**
83
+ * The most characters the encoded URL may have before the report moves to the clipboard.
84
+ *
85
+ * @default {@link DEFAULT_BUG_REPORT_MAX_URL_LENGTH}
86
+ */
87
+ readonly maxUrlLength?: number;
88
+ /**
89
+ * The issue's title. Leave it out to keep the form's own default title.
90
+ */
91
+ readonly title?: string;
92
+ }
93
+ /**
94
+ * The text the environment field holds when the report moved to the clipboard.
95
+ */
96
+ export declare const BUG_REPORT_PASTE_INSTRUCTIONS = "The full environment and diagnostics were copied to your clipboard because they are too long for a link. Replace this text by pasting them here.";
43
97
  /**
44
98
  * The environment a bug report needs.
45
99
  */
@@ -129,6 +183,17 @@ export interface GetGitHubIssueFormUrlParams {
129
183
  */
130
184
  readonly title?: string;
131
185
  }
186
+ /**
187
+ * Builds a link to a plugin's bug-report issue form, prefilled with the environment and the given
188
+ * diagnostics. When the encoded link would be longer than
189
+ * {@link BuildBugReportIssueFormLinkParams.maxUrlLength}, the environment field gets
190
+ * {@link BUG_REPORT_PASTE_INSTRUCTIONS} instead, and the full text is returned as
191
+ * {@link BugReportIssueFormLink.clipboardText} for the caller to copy. Nothing is cut.
192
+ *
193
+ * @param params - The parameters.
194
+ * @returns The link, and the text to paste when it did not fit.
195
+ */
196
+ export declare function buildBugReportIssueFormLink(params: BuildBugReportIssueFormLinkParams): BugReportIssueFormLink;
132
197
  /**
133
198
  * Renders a bug report's environment as a Markdown list.
134
199
  *
@@ -34,6 +34,7 @@ import {
34
34
  apiVersion,
35
35
  Platform
36
36
  } from "obsidian";
37
+ import { formatBugReportDiagnostics } from "./bug-report-diagnostics.mjs";
37
38
  import { getMobileAppInfo } from "./mobile-app-info.mjs";
38
39
  var BugReportIssueFormFieldId = /* @__PURE__ */ ((BugReportIssueFormFieldId2) => {
39
40
  BugReportIssueFormFieldId2["Environment"] = "environment";
@@ -43,7 +44,31 @@ var BugReportIssueFormFieldId = /* @__PURE__ */ ((BugReportIssueFormFieldId2) =>
43
44
  return BugReportIssueFormFieldId2;
44
45
  })(BugReportIssueFormFieldId || {});
45
46
  const BUG_REPORT_ISSUE_FORM_TEMPLATE = "bug_report.yml";
47
+ const DEFAULT_BUG_REPORT_MAX_URL_LENGTH = 6e3;
48
+ const BUG_REPORT_PASTE_INSTRUCTIONS = "The full environment and diagnostics were copied to your clipboard because they are too long for a link. Replace this text by pasting them here.";
46
49
  const UNKNOWN = "unknown";
50
+ function buildBugReportIssueFormLink(params) {
51
+ const { environment } = params;
52
+ const diagnosticsMarkdown = formatBugReportDiagnostics(params.diagnostics ?? []);
53
+ const environmentText = diagnosticsMarkdown === "" ? formatBugReportEnvironment(environment) : `${formatBugReportEnvironment(environment)}
54
+
55
+ ${diagnosticsMarkdown}`;
56
+ function buildUrl(environmentFieldValue) {
57
+ return getGitHubIssueFormUrl({
58
+ fields: {
59
+ ["environment" /* Environment */]: environmentFieldValue,
60
+ ["obsidian-version" /* ObsidianVersion */]: environment.obsidianVersion,
61
+ ["operating-system" /* OperatingSystem */]: environment.operatingSystem,
62
+ ["plugin-version" /* PluginVersion */]: environment.plugin.version ?? UNKNOWN
63
+ },
64
+ gitHubRepo: params.gitHubRepo,
65
+ template: BUG_REPORT_ISSUE_FORM_TEMPLATE,
66
+ ...params.title !== void 0 && { title: params.title }
67
+ });
68
+ }
69
+ const fullUrl = buildUrl(environmentText);
70
+ return fullUrl.length <= (params.maxUrlLength ?? DEFAULT_BUG_REPORT_MAX_URL_LENGTH) ? { clipboardText: null, url: fullUrl } : { clipboardText: environmentText, url: buildUrl(BUG_REPORT_PASTE_INSTRUCTIONS) };
71
+ }
47
72
  function formatBugReportEnvironment(environment) {
48
73
  const enabledPlugins = environment.enabledPlugins.length === 0 ? "none" : environment.enabledPlugins.map((pluginInfo) => formatPluginInfo(pluginInfo)).join(", ");
49
74
  return `- Plugin: ${formatPluginInfo(environment.plugin)}
@@ -68,17 +93,12 @@ async function getBugReportEnvironment(params) {
68
93
  }
69
94
  async function getBugReportIssueFormUrl(params) {
70
95
  const environment = await getBugReportEnvironment(params);
71
- return getGitHubIssueFormUrl({
72
- fields: {
73
- ["environment" /* Environment */]: formatBugReportEnvironment(environment),
74
- ["obsidian-version" /* ObsidianVersion */]: environment.obsidianVersion,
75
- ["operating-system" /* OperatingSystem */]: environment.operatingSystem,
76
- ["plugin-version" /* PluginVersion */]: environment.plugin.version ?? UNKNOWN
77
- },
96
+ return buildBugReportIssueFormLink({
97
+ environment,
78
98
  gitHubRepo: params.gitHubRepo,
79
- template: BUG_REPORT_ISSUE_FORM_TEMPLATE,
99
+ maxUrlLength: Infinity,
80
100
  ...params.title !== void 0 && { title: params.title }
81
- });
101
+ }).url;
82
102
  }
83
103
  function getGitHubIssueFormUrl(params) {
84
104
  const searchParams = new URLSearchParams({ template: params.template });
@@ -134,10 +154,13 @@ function getPluginInfo(app, pluginId) {
134
154
  }
135
155
  export {
136
156
  BUG_REPORT_ISSUE_FORM_TEMPLATE,
157
+ BUG_REPORT_PASTE_INSTRUCTIONS,
137
158
  BugReportIssueFormFieldId,
159
+ DEFAULT_BUG_REPORT_MAX_URL_LENGTH,
160
+ buildBugReportIssueFormLink,
138
161
  formatBugReportEnvironment,
139
162
  getBugReportEnvironment,
140
163
  getBugReportIssueFormUrl,
141
164
  getGitHubIssueFormUrl
142
165
  };
143
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9idWctcmVwb3J0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBIZWxwZXJzIGZvciBhIHBsdWdpbidzIGJ1ZyByZXBvcnRzOiB0aGUgZW52aXJvbm1lbnQgYSByZXBvcnQgbmVlZHMsIGFuZCBhIGxpbmsgdG8gYSBHaXRIdWIgaXNzdWUgZm9ybVxuICogcHJlZmlsbGVkIHdpdGggaXQuXG4gKlxuICogQ3Jvc3MtcGxhdGZvcm0tbG9hZGFibGU6IHRoZSBkZXNrdG9wIG9wZXJhdGluZy1zeXN0ZW0gbG9va3VwIHJlYWRzIGBub2RlOm9zYCwgc28gaXQgaXMgaW1wb3J0ZWRcbiAqIGR5bmFtaWNhbGx5LCBvbiBkZXNrdG9wIG9ubHkuXG4gKlxuICogVGhlIGRlc2t0b3AgaW5zdGFsbGVyIHZlcnNpb24gaXMgYFBsYXRmb3JtLmJ1aWxkYCwgd2hpY2ggbm8gcHVibGljIHR5cGluZyBkZWNsYXJlczogT2JzaWRpYW4ncyBkZXNrdG9wXG4gKiBzdGFydHVwIHNldHMgaXQgZnJvbSBFbGVjdHJvbidzIGBhcHAuZ2V0VmVyc2lvbigpYCAocmVhZCBmcm9tIE9ic2lkaWFuIGAxLjE1LjBgKSwgc28gaXQgaXMgcmVhZFxuICogc3RydWN0dXJhbGx5IGhlcmUsIGFuZCByZWFkcyBhcyBgdW5rbm93bmAgaWYgYSBsYXRlciB2ZXJzaW9uIGRyb3BzIGl0LlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQge1xuICBhcGlWZXJzaW9uLFxuICBQbGF0Zm9ybVxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGdldE1vYmlsZUFwcEluZm8gfSBmcm9tICcuL21vYmlsZS1hcHAtaW5mby50cyc7XG5cbi8qKlxuICogVGhlIGlkcyBvZiB0aGUgYnVnLXJlcG9ydCBpc3N1ZSBmb3JtJ3MgZmllbGRzIHRoYXQge0BsaW5rIGdldEJ1Z1JlcG9ydElzc3VlRm9ybVVybH0gcHJlZmlsbHMuIEdpdEh1YlxuICogcHJlZmlsbHMgYSBmaWVsZCBmcm9tIGEgcXVlcnkgcGFyYW1ldGVyIG5hbWVkIGFmdGVyIHRoZSBmaWVsZCdzIGBpZGAsIHNvIGEgZm9ybSBtdXN0IGdpdmUgaXRzIGZpZWxkc1xuICogdGhlc2UgaWRzIGZvciB0aGVtIHRvIGJlIGZpbGxlZC5cbiAqL1xuZXhwb3J0IGVudW0gQnVnUmVwb3J0SXNzdWVGb3JtRmllbGRJZCB7XG4gIC8qKlxuICAgKiBUaGUgd2hvbGUgZW52aXJvbm1lbnQsIGFzIHtAbGluayBmb3JtYXRCdWdSZXBvcnRFbnZpcm9ubWVudH0gcmVuZGVycyBpdC5cbiAgICovXG4gIEVudmlyb25tZW50ID0gJ2Vudmlyb25tZW50JyxcblxuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIHZlcnNpb24uXG4gICAqL1xuICBPYnNpZGlhblZlcnNpb24gPSAnb2JzaWRpYW4tdmVyc2lvbicsXG5cbiAgLyoqXG4gICAqIFRoZSBvcGVyYXRpbmcgc3lzdGVtLlxuICAgKi9cbiAgT3BlcmF0aW5nU3lzdGVtID0gJ29wZXJhdGluZy1zeXN0ZW0nLFxuXG4gIC8qKlxuICAgKiBUaGUgcmVwb3J0aW5nIHBsdWdpbidzIHZlcnNpb24uXG4gICAqL1xuICBQbHVnaW5WZXJzaW9uID0gJ3BsdWdpbi12ZXJzaW9uJ1xufVxuXG4vKipcbiAqIFRoZSBmaWxlIG5hbWUgb2YgdGhlIGJ1Zy1yZXBvcnQgaXNzdWUgZm9ybSwgdW5kZXIgYC5naXRodWIvSVNTVUVfVEVNUExBVEVgLlxuICovXG5leHBvcnQgY29uc3QgQlVHX1JFUE9SVF9JU1NVRV9GT1JNX1RFTVBMQVRFID0gJ2J1Z19yZXBvcnQueW1sJztcblxuLyoqXG4gKiBUaGUgZW52aXJvbm1lbnQgYSBidWcgcmVwb3J0IG5lZWRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Z1JlcG9ydEVudmlyb25tZW50IHtcbiAgLyoqXG4gICAqIFRoZSBvdGhlciBsb2FkZWQgcGx1Z2lucywgc29ydGVkIGJ5IGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZFBsdWdpbnM6IHJlYWRvbmx5IEJ1Z1JlcG9ydFBsdWdpbkluZm9bXTtcblxuICAvKipcbiAgICogVGhlIGluc3RhbGxlZCBhcHAncyB2ZXJzaW9uLCB3aGljaCBjYW4gbGFnIGJlaGluZCB7QGxpbmsgb2JzaWRpYW5WZXJzaW9ufS5cbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbGxlclZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIHZlcnNpb24uXG4gICAqL1xuICByZWFkb25seSBvYnNpZGlhblZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9wZXJhdGluZyBzeXN0ZW0ncyBuYW1lIGFuZCB2ZXJzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0aW5nU3lzdGVtOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbGF0Zm9ybTogYEFuZHJvaWRgLCBgaU9TYCwgYG1hY09TYCwgYFdpbmRvd3NgLCBgTGludXhgIG9yIGB1bmtub3duYC5cbiAgICovXG4gIHJlYWRvbmx5IHBsYXRmb3JtOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXBvcnRpbmcgcGx1Z2luLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luOiBCdWdSZXBvcnRQbHVnaW5JbmZvO1xufVxuXG4vKipcbiAqIEEgcGx1Z2luLCBhcyBhIGJ1ZyByZXBvcnQgbmFtZXMgaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVnUmVwb3J0UGx1Z2luSW5mbyB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luJ3MgaWQuXG4gICAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luJ3MgaW5zdGFsbGVkIHZlcnNpb24sIG9yIGBudWxsYCB3aGVuIGl0cyBtYW5pZmVzdCBpcyBub3Qga25vd24uXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBudWxsIHwgc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRCdWdSZXBvcnRFbnZpcm9ubWVudH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QnVnUmVwb3J0RW52aXJvbm1lbnRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIHJlcG9ydGluZyBwbHVnaW4uXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRCdWdSZXBvcnRJc3N1ZUZvcm1Vcmx9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEJ1Z1JlcG9ydElzc3VlRm9ybVVybFBhcmFtcyBleHRlbmRzIEdldEJ1Z1JlcG9ydEVudmlyb25tZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4ncyBHaXRIdWIgcmVwb3NpdG9yeSwgYXMgYG93bmVyL25hbWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0SHViUmVwbzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaXNzdWUncyB0aXRsZS4gTGVhdmUgaXQgb3V0IHRvIGtlZXAgdGhlIGZvcm0ncyBvd24gZGVmYXVsdCB0aXRsZS5cbiAgICovXG4gIHJlYWRvbmx5IHRpdGxlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRHaXRIdWJJc3N1ZUZvcm1Vcmx9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEdpdEh1Yklzc3VlRm9ybVVybFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgdmFsdWVzIHRvIHByZWZpbGwsIGtleWVkIGJ5IGZpZWxkIGBpZGAuXG4gICAqL1xuICByZWFkb25seSBmaWVsZHM/OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PjtcblxuICAvKipcbiAgICogVGhlIEdpdEh1YiByZXBvc2l0b3J5LCBhcyBgb3duZXIvbmFtZWAuXG4gICAqL1xuICByZWFkb25seSBnaXRIdWJSZXBvOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmb3JtJ3MgZmlsZSBuYW1lLCB1bmRlciBgLmdpdGh1Yi9JU1NVRV9URU1QTEFURWAuXG4gICAqL1xuICByZWFkb25seSB0ZW1wbGF0ZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaXNzdWUncyB0aXRsZS4gTGVhdmUgaXQgb3V0IHRvIGtlZXAgdGhlIGZvcm0ncyBvd24gZGVmYXVsdCB0aXRsZS5cbiAgICovXG4gIHJlYWRvbmx5IHRpdGxlPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQXBwQW5kT3BlcmF0aW5nU3lzdGVtIHtcbiAgcmVhZG9ubHkgaW5zdGFsbGVyVmVyc2lvbjogc3RyaW5nO1xuICByZWFkb25seSBvcGVyYXRpbmdTeXN0ZW06IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFBsYXRmb3JtV2l0aEJ1aWxkIHtcbiAgcmVhZG9ubHkgYnVpbGQ/OiB1bmtub3duO1xufVxuXG5jb25zdCBVTktOT1dOID0gJ3Vua25vd24nO1xuXG4vKipcbiAqIFJlbmRlcnMgYSBidWcgcmVwb3J0J3MgZW52aXJvbm1lbnQgYXMgYSBNYXJrZG93biBsaXN0LlxuICpcbiAqIEBwYXJhbSBlbnZpcm9ubWVudCAtIFRoZSBlbnZpcm9ubWVudC5cbiAqIEByZXR1cm5zIFRoZSBNYXJrZG93bi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEJ1Z1JlcG9ydEVudmlyb25tZW50KGVudmlyb25tZW50OiBCdWdSZXBvcnRFbnZpcm9ubWVudCk6IHN0cmluZyB7XG4gIGNvbnN0IGVuYWJsZWRQbHVnaW5zID0gZW52aXJvbm1lbnQuZW5hYmxlZFBsdWdpbnMubGVuZ3RoID09PSAwXG4gICAgPyAnbm9uZSdcbiAgICA6IGVudmlyb25tZW50LmVuYWJsZWRQbHVnaW5zLm1hcCgocGx1Z2luSW5mbykgPT4gZm9ybWF0UGx1Z2luSW5mbyhwbHVnaW5JbmZvKSkuam9pbignLCAnKTtcblxuICByZXR1cm4gYC0gUGx1Z2luOiAke2Zvcm1hdFBsdWdpbkluZm8oZW52aXJvbm1lbnQucGx1Z2luKX1cXG5gXG4gICAgKyBgLSBPYnNpZGlhbjogJHtlbnZpcm9ubWVudC5vYnNpZGlhblZlcnNpb259IChpbnN0YWxsZXIgJHtlbnZpcm9ubWVudC5pbnN0YWxsZXJWZXJzaW9ufSlcXG5gXG4gICAgKyBgLSBQbGF0Zm9ybTogJHtlbnZpcm9ubWVudC5wbGF0Zm9ybX1cXG5gXG4gICAgKyBgLSBPcGVyYXRpbmcgc3lzdGVtOiAke2Vudmlyb25tZW50Lm9wZXJhdGluZ1N5c3RlbX1cXG5gXG4gICAgKyBgLSBPdGhlciBlbmFibGVkIHBsdWdpbnM6ICR7ZW5hYmxlZFBsdWdpbnN9YDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBlbnZpcm9ubWVudCBhIGJ1ZyByZXBvcnQgbmVlZHM6IHRoZSBwbHVnaW4ncyB2ZXJzaW9uLCB0aGUgb3RoZXIgZW5hYmxlZCBwbHVnaW5zLCB0aGVcbiAqIE9ic2lkaWFuIGFuZCBpbnN0YWxsZXIgdmVyc2lvbnMsIHRoZSBwbGF0Zm9ybSBhbmQgdGhlIG9wZXJhdGluZyBzeXN0ZW0uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgVGhlIGVudmlyb25tZW50LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QnVnUmVwb3J0RW52aXJvbm1lbnQocGFyYW1zOiBHZXRCdWdSZXBvcnRFbnZpcm9ubWVudFBhcmFtcyk6IFByb21pc2U8QnVnUmVwb3J0RW52aXJvbm1lbnQ+IHtcbiAgY29uc3QgeyBhcHAsIHBsdWdpbklkIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHsgaW5zdGFsbGVyVmVyc2lvbiwgb3BlcmF0aW5nU3lzdGVtIH0gPSBhd2FpdCBnZXRBcHBBbmRPcGVyYXRpbmdTeXN0ZW0oKTtcblxuICByZXR1cm4ge1xuICAgIC8vIFRoZSBsb2FkZWQgcGx1Z2lucywgYXMgT2JzaWRpYW4ncyBTaG93IGRlYnVnIGluZm8gbGlzdHMgdGhlbTogYGVuYWJsZWRQbHVnaW5zYCBhbHNvIGhvbGRzIGFuIGlkXG4gICAgLy8gd2hvc2UgZm9sZGVyIHdhcyBkZWxldGVkLCBvciB3aG9zZSBsb2FkIGZhaWxlZC5cbiAgICBlbmFibGVkUGx1Z2luczogT2JqZWN0LmtleXMoYXBwLnBsdWdpbnMucGx1Z2lucylcbiAgICAgIC5maWx0ZXIoKGlkKSA9PiBpZCAhPT0gcGx1Z2luSWQpXG4gICAgICAuc29ydCgpXG4gICAgICAubWFwKChpZCkgPT4gZ2V0UGx1Z2luSW5mbyhhcHAsIGlkKSksXG4gICAgaW5zdGFsbGVyVmVyc2lvbixcbiAgICBvYnNpZGlhblZlcnNpb246IGFwaVZlcnNpb24sXG4gICAgb3BlcmF0aW5nU3lzdGVtLFxuICAgIHBsYXRmb3JtOiBnZXRQbGF0Zm9ybU5hbWUoKSxcbiAgICBwbHVnaW46IGdldFBsdWdpbkluZm8oYXBwLCBwbHVnaW5JZClcbiAgfTtcbn1cblxuLyoqXG4gKiBHZXRzIGEgbGluayB0byBhIHBsdWdpbidzIGJ1Zy1yZXBvcnQgaXNzdWUgZm9ybSAoe0BsaW5rIEJVR19SRVBPUlRfSVNTVUVfRk9STV9URU1QTEFURX0pLCBwcmVmaWxsZWQgd2l0aFxuICogdGhlIGVudmlyb25tZW50LCBpbiB0aGUgZmllbGRzIHtAbGluayBCdWdSZXBvcnRJc3N1ZUZvcm1GaWVsZElkfSBuYW1lcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgbGluay5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEJ1Z1JlcG9ydElzc3VlRm9ybVVybChwYXJhbXM6IEdldEJ1Z1JlcG9ydElzc3VlRm9ybVVybFBhcmFtcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGVudmlyb25tZW50ID0gYXdhaXQgZ2V0QnVnUmVwb3J0RW52aXJvbm1lbnQocGFyYW1zKTtcblxuICByZXR1cm4gZ2V0R2l0SHViSXNzdWVGb3JtVXJsKHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIFtCdWdSZXBvcnRJc3N1ZUZvcm1GaWVsZElkLkVudmlyb25tZW50XTogZm9ybWF0QnVnUmVwb3J0RW52aXJvbm1lbnQoZW52aXJvbm1lbnQpLFxuICAgICAgW0J1Z1JlcG9ydElzc3VlRm9ybUZpZWxkSWQuT2JzaWRpYW5WZXJzaW9uXTogZW52aXJvbm1lbnQub2JzaWRpYW5WZXJzaW9uLFxuICAgICAgW0J1Z1JlcG9ydElzc3VlRm9ybUZpZWxkSWQuT3BlcmF0aW5nU3lzdGVtXTogZW52aXJvbm1lbnQub3BlcmF0aW5nU3lzdGVtLFxuICAgICAgW0J1Z1JlcG9ydElzc3VlRm9ybUZpZWxkSWQuUGx1Z2luVmVyc2lvbl06IGVudmlyb25tZW50LnBsdWdpbi52ZXJzaW9uID8/IFVOS05PV05cbiAgICB9LFxuICAgIGdpdEh1YlJlcG86IHBhcmFtcy5naXRIdWJSZXBvLFxuICAgIHRlbXBsYXRlOiBCVUdfUkVQT1JUX0lTU1VFX0ZPUk1fVEVNUExBVEUsXG4gICAgLi4ucGFyYW1zLnRpdGxlICE9PSB1bmRlZmluZWQgJiYgeyB0aXRsZTogcGFyYW1zLnRpdGxlIH1cbiAgfSk7XG59XG5cbi8qKlxuICogR2V0cyBhIGxpbmsgdGhhdCBvcGVucyBhIEdpdEh1YiBpc3N1ZSBmb3JtIHdpdGggZmllbGRzIHByZWZpbGxlZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgbGluay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdpdEh1Yklzc3VlRm9ybVVybChwYXJhbXM6IEdldEdpdEh1Yklzc3VlRm9ybVVybFBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoeyB0ZW1wbGF0ZTogcGFyYW1zLnRlbXBsYXRlIH0pO1xuICBpZiAocGFyYW1zLnRpdGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICBzZWFyY2hQYXJhbXMuc2V0KCd0aXRsZScsIHBhcmFtcy50aXRsZSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IFtmaWVsZElkLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyYW1zLmZpZWxkcyA/PyB7fSkpIHtcbiAgICBzZWFyY2hQYXJhbXMuc2V0KGZpZWxkSWQsIHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBgaHR0cHM6Ly9naXRodWIuY29tLyR7cGFyYW1zLmdpdEh1YlJlcG99L2lzc3Vlcy9uZXc/JHtzZWFyY2hQYXJhbXMudG9TdHJpbmcoKX1gO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRQbHVnaW5JbmZvKHBsdWdpbkluZm86IEJ1Z1JlcG9ydFBsdWdpbkluZm8pOiBzdHJpbmcge1xuICByZXR1cm4gYFxcYCR7cGx1Z2luSW5mby5pZH1cXGAgJHtwbHVnaW5JbmZvLnZlcnNpb24gPz8gVU5LTk9XTn1gO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRBcHBBbmRPcGVyYXRpbmdTeXN0ZW0oKTogUHJvbWlzZTxBcHBBbmRPcGVyYXRpbmdTeXN0ZW0+IHtcbiAgaWYgKFBsYXRmb3JtLmlzTW9iaWxlQXBwKSB7XG4gICAgY29uc3QgbW9iaWxlQXBwSW5mbyA9IGF3YWl0IGdldE1vYmlsZUFwcEluZm8oKTtcbiAgICByZXR1cm4ge1xuICAgICAgaW5zdGFsbGVyVmVyc2lvbjogbW9iaWxlQXBwSW5mbz8uaW5zdGFsbGVyVmVyc2lvbiA/PyBVTktOT1dOLFxuICAgICAgb3BlcmF0aW5nU3lzdGVtOiBtb2JpbGVBcHBJbmZvPy5vcGVyYXRpbmdTeXN0ZW0gPz8gVU5LTk9XTlxuICAgIH07XG4gIH1cblxuICBpZiAoIVBsYXRmb3JtLmlzRGVza3RvcEFwcCkge1xuICAgIHJldHVybiB7IGluc3RhbGxlclZlcnNpb246IFVOS05PV04sIG9wZXJhdGluZ1N5c3RlbTogVU5LTk9XTiB9O1xuICB9XG5cbiAgLy8gQ29uZGl0aW9uYWwgaW1wb3J0IG9mIHRoZSBkZXNrdG9wLW9ubHkgbG9va3VwLCB3aGljaCByZWFkcyBgbm9kZTpvc2A7IHRoaXMgYnJhbmNoIHJ1bnMgb25seSBvbiBkZXNrdG9wLlxuICBjb25zdCB7IGdldERlc2t0b3BPcGVyYXRpbmdTeXN0ZW0gfSA9IGF3YWl0IGltcG9ydCgnLi9kZXNrdG9wLW9wZXJhdGluZy1zeXN0ZW0udHMnKTtcbiAgY29uc3QgYnVpbGQgPSAoUGxhdGZvcm0gYXMgUGxhdGZvcm1XaXRoQnVpbGQpLmJ1aWxkO1xuICByZXR1cm4ge1xuICAgIGluc3RhbGxlclZlcnNpb246IHR5cGVvZiBidWlsZCA9PT0gJ3N0cmluZycgPyBidWlsZCA6IFVOS05PV04sXG4gICAgb3BlcmF0aW5nU3lzdGVtOiBnZXREZXNrdG9wT3BlcmF0aW5nU3lzdGVtKClcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UGxhdGZvcm1OYW1lKCk6IHN0cmluZyB7XG4gIGlmIChQbGF0Zm9ybS5pc0FuZHJvaWRBcHApIHtcbiAgICByZXR1cm4gJ0FuZHJvaWQnO1xuICB9XG4gIGlmIChQbGF0Zm9ybS5pc0lvc0FwcCkge1xuICAgIHJldHVybiAnaU9TJztcbiAgfVxuICBpZiAoUGxhdGZvcm0uaXNNYWNPUykge1xuICAgIHJldHVybiAnbWFjT1MnO1xuICB9XG4gIGlmIChQbGF0Zm9ybS5pc1dpbikge1xuICAgIHJldHVybiAnV2luZG93cyc7XG4gIH1cbiAgcmV0dXJuIFBsYXRmb3JtLmlzTGludXggPyAnTGludXgnIDogVU5LTk9XTjtcbn1cblxuZnVuY3Rpb24gZ2V0UGx1Z2luSW5mbyhhcHA6IEFwcCwgcGx1Z2luSWQ6IHN0cmluZyk6IEJ1Z1JlcG9ydFBsdWdpbkluZm8ge1xuICByZXR1cm4ge1xuICAgIGlkOiBwbHVnaW5JZCxcbiAgICB2ZXJzaW9uOiBhcHAucGx1Z2lucy5tYW5pZmVzdHNbcGx1Z2luSWRdPy52ZXJzaW9uID8/IG51bGxcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFTLHdCQUF3QjtBQU8xQixJQUFLLDRCQUFMLGtCQUFL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UUFBTSxRQUFTLFNBQStCO0FBQzlDLFNBQU87QUFBQSxJQUNMLGtCQUFrQixPQUFPLFVBQVUsV0FBVyxRQUFRO0FBQUEsSUFDdEQsaUJBQWlCLDBCQUEwQjtBQUFBLEVBQzdDO0FBQ0Y7QUFFQSxTQUFTLGtCQUEwQjtBQUNqQyxNQUFJLFNBQVMsY0FBYztBQUN6QixXQUFPO0FBQUEsRUFDVDtBQUNBLE1BQUksU0FBUyxVQUFVO0FBQ3JCLFdBQU87QUFBQSxFQUNUO0FBQ0EsTUFBSSxTQUFTLFNBQVM7QUFDcEIsV0FBTztBQUFBLEVBQ1Q7QUFDQSxNQUFJLFNBQVMsT0FBTztBQUNsQixXQUFPO0FBQUEsRUFDVDtBQUNBLFNBQU8sU0FBUyxVQUFVLFVBQVU7QUFDdEM7QUFFQSxTQUFTLGNBQWMsS0FBVSxVQUF1QztBQUN0RSxTQUFPO0FBQUEsSUFDTCxJQUFJO0FBQUEsSUFDSixTQUFTLElBQUksUUFBUSxVQUFVLFFBQVEsR0FBRyxXQUFXO0FBQUEsRUFDdkQ7QUFDRjsiLCJuYW1lcyI6WyJCdWdSZXBvcnRJc3N1ZUZvcm1GaWVsZElkIl19
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9idWctcmVwb3J0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBIZWxwZXJzIGZvciBhIHBsdWdpbidzIGJ1ZyByZXBvcnRzOiB0aGUgZW52aXJvbm1lbnQgYSByZXBvcnQgbmVlZHMsIGFuZCBhIGxpbmsgdG8gYSBHaXRIdWIgaXNzdWUgZm9ybVxuICogcHJlZmlsbGVkIHdpdGggaXQuXG4gKlxuICogQ3Jvc3MtcGxhdGZvcm0tbG9hZGFibGU6IHRoZSBkZXNrdG9wIG9wZXJhdGluZy1zeXN0ZW0gbG9va3VwIHJlYWRzIGBub2RlOm9zYCwgc28gaXQgaXMgaW1wb3J0ZWRcbiAqIGR5bmFtaWNhbGx5LCBvbiBkZXNrdG9wIG9ubHkuXG4gKlxuICogVGhlIGRlc2t0b3AgaW5zdGFsbGVyIHZlcnNpb24gaXMgYFBsYXRmb3JtLmJ1aWxkYCwgd2hpY2ggbm8gcHVibGljIHR5cGluZyBkZWNsYXJlczogT2JzaWRpYW4ncyBkZXNrdG9wXG4gKiBzdGFydHVwIHNldHMgaXQgZnJvbSBFbGVjdHJvbidzIGBhcHAuZ2V0VmVyc2lvbigpYCAocmVhZCBmcm9tIE9ic2lkaWFuIGAxLjE1LjBgKSwgc28gaXQgaXMgcmVhZFxuICogc3RydWN0dXJhbGx5IGhlcmUsIGFuZCByZWFkcyBhcyBgdW5rbm93bmAgaWYgYSBsYXRlciB2ZXJzaW9uIGRyb3BzIGl0LlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQge1xuICBhcGlWZXJzaW9uLFxuICBQbGF0Zm9ybVxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgQnVnUmVwb3J0RGlhZ25vc3RpY1NlY3Rpb24gfSBmcm9tICcuL2J1Zy1yZXBvcnQtZGlhZ25vc3RpY3MudHMnO1xuXG5pbXBvcnQgeyBmb3JtYXRCdWdSZXBvcnREaWFnbm9zdGljcyB9IGZyb20gJy4vYnVnLXJlcG9ydC1kaWFnbm9zdGljcy50cyc7XG5pbXBvcnQgeyBnZXRNb2JpbGVBcHBJbmZvIH0gZnJvbSAnLi9tb2JpbGUtYXBwLWluZm8udHMnO1xuXG4vKipcbiAqIFRoZSBpZHMgb2YgdGhlIGJ1Zy1yZXBvcnQgaXNzdWUgZm9ybSdzIGZpZWxkcyB0aGF0IHtAbGluayBnZXRCdWdSZXBvcnRJc3N1ZUZvcm1Vcmx9IHByZWZpbGxzLiBHaXRIdWJcbiAqIHByZWZpbGxzIGEgZmllbGQgZnJvbSBhIHF1ZXJ5IHBhcmFtZXRlciBuYW1lZCBhZnRlciB0aGUgZmllbGQncyBgaWRgLCBzbyBhIGZvcm0gbXVzdCBnaXZlIGl0cyBmaWVsZHNcbiAqIHRoZXNlIGlkcyBmb3IgdGhlbSB0byBiZSBmaWxsZWQuXG4gKi9cbmV4cG9ydCBlbnVtIEJ1Z1JlcG9ydElzc3VlRm9ybUZpZWxkSWQge1xuICAvKipcbiAgICogVGhlIHdob2xlIGVudmlyb25tZW50LCBhcyB7QGxpbmsgZm9ybWF0QnVnUmVwb3J0RW52aXJvbm1lbnR9IHJlbmRlcnMgaXQuXG4gICAqL1xuICBFbnZpcm9ubWVudCA9ICdlbnZpcm9ubWVudCcsXG5cbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiB2ZXJzaW9uLlxuICAgKi9cbiAgT2JzaWRpYW5WZXJzaW9uID0gJ29ic2lkaWFuLXZlcnNpb24nLFxuXG4gIC8qKlxuICAgKiBUaGUgb3BlcmF0aW5nIHN5c3RlbS5cbiAgICovXG4gIE9wZXJhdGluZ1N5c3RlbSA9ICdvcGVyYXRpbmctc3lzdGVtJyxcblxuICAvKipcbiAgICogVGhlIHJlcG9ydGluZyBwbHVnaW4ncyB2ZXJzaW9uLlxuICAgKi9cbiAgUGx1Z2luVmVyc2lvbiA9ICdwbHVnaW4tdmVyc2lvbidcbn1cblxuLyoqXG4gKiBUaGUgZmlsZSBuYW1lIG9mIHRoZSBidWctcmVwb3J0IGlzc3VlIGZvcm0sIHVuZGVyIGAuZ2l0aHViL0lTU1VFX1RFTVBMQVRFYC5cbiAqL1xuZXhwb3J0IGNvbnN0IEJVR19SRVBPUlRfSVNTVUVfRk9STV9URU1QTEFURSA9ICdidWdfcmVwb3J0LnltbCc7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgYnVkZ2V0LCBpbiBjaGFyYWN0ZXJzIG9mIHRoZSBlbmNvZGVkIFVSTCwgb2YgYSBwcmVmaWxsZWQgYnVnLXJlcG9ydCBsaW5rLlxuICpcbiAqIE1lYXN1cmVkIGFnYWluc3QgYGdpdGh1Yi5jb21gIG9uIDIwMjYtMTEtMDcsIHNpZ25lZCBvdXQ6IGFuIGlzc3VlLWZvcm0gVVJMIHVwIHRvIGFib3V0IDYsNTQwIGNoYXJhY3RlcnNcbiAqIHdhcyBhbnN3ZXJlZCB3aXRoIHRoZSB1c3VhbCByZWRpcmVjdCB0byB0aGUgZm9ybSwgYWJvdXQgOCwwODggd2l0aCBhIDUwMiwgYW5kIDgsMjg4IGFuZCBtb3JlIHdpdGggYSA0MTQuXG4gKiA2LDAwMCBsZWF2ZXMgcm9vbSBmb3IgYSBsb25nZXIgcmVwb3NpdG9yeSBuYW1lIGFuZCBmb3IgYSBzaWduZWQtaW4gc2Vzc2lvbidzIG93biBsaW1pdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0JVR19SRVBPUlRfTUFYX1VSTF9MRU5HVEggPSA2MDAwO1xuXG4vKipcbiAqIEEgbGluayB0byBhIGJ1Zy1yZXBvcnQgaXNzdWUgZm9ybSwgYXMge0BsaW5rIGJ1aWxkQnVnUmVwb3J0SXNzdWVGb3JtTGlua30gYnVpbGRzIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Z1JlcG9ydElzc3VlRm9ybUxpbmsge1xuICAvKipcbiAgICogVGhlIHRleHQgdGhlIHVzZXIgbXVzdCBwYXN0ZSBpbnRvIHRoZSBmb3JtJ3MgZW52aXJvbm1lbnQgZmllbGQsIHdoZW4gdGhlIGZ1bGwgcmVwb3J0IGRpZCBub3QgZml0IHRoZVxuICAgKiBVUkwgYnVkZ2V0OyBgbnVsbGAgd2hlbiB0aGUgVVJMIGNhcnJpZXMgdGhlIHdob2xlIHJlcG9ydC5cbiAgICovXG4gIHJlYWRvbmx5IGNsaXBib2FyZFRleHQ6IG51bGwgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsaW5rLlxuICAgKi9cbiAgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGJ1aWxkQnVnUmVwb3J0SXNzdWVGb3JtTGlua30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRCdWdSZXBvcnRJc3N1ZUZvcm1MaW5rUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBkaWFnbm9zdGljcyB0aGUgdXNlciBhZ3JlZWQgdG8gaW5jbHVkZSwgYXBwZW5kZWQgdG8gdGhlIGVudmlyb25tZW50IGZpZWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgZGlhZ25vc3RpY3M/OiByZWFkb25seSBCdWdSZXBvcnREaWFnbm9zdGljU2VjdGlvbltdO1xuXG4gIC8qKlxuICAgKiBUaGUgZW52aXJvbm1lbnQsIGZyb20ge0BsaW5rIGdldEJ1Z1JlcG9ydEVudmlyb25tZW50fS5cbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50OiBCdWdSZXBvcnRFbnZpcm9ubWVudDtcblxuICAvKipcbiAgICogVGhlIHBsdWdpbidzIEdpdEh1YiByZXBvc2l0b3J5LCBhcyBgb3duZXIvbmFtZWAuXG4gICAqL1xuICByZWFkb25seSBnaXRIdWJSZXBvOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBtb3N0IGNoYXJhY3RlcnMgdGhlIGVuY29kZWQgVVJMIG1heSBoYXZlIGJlZm9yZSB0aGUgcmVwb3J0IG1vdmVzIHRvIHRoZSBjbGlwYm9hcmQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBERUZBVUxUX0JVR19SRVBPUlRfTUFYX1VSTF9MRU5HVEh9XG4gICAqL1xuICByZWFkb25seSBtYXhVcmxMZW5ndGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBpc3N1ZSdzIHRpdGxlLiBMZWF2ZSBpdCBvdXQgdG8ga2VlcCB0aGUgZm9ybSdzIG93biBkZWZhdWx0IHRpdGxlLlxuICAgKi9cbiAgcmVhZG9ubHkgdGl0bGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHRleHQgdGhlIGVudmlyb25tZW50IGZpZWxkIGhvbGRzIHdoZW4gdGhlIHJlcG9ydCBtb3ZlZCB0byB0aGUgY2xpcGJvYXJkLlxuICovXG5leHBvcnQgY29uc3QgQlVHX1JFUE9SVF9QQVNURV9JTlNUUlVDVElPTlMgPSAnVGhlIGZ1bGwgZW52aXJvbm1lbnQgYW5kIGRpYWdub3N0aWNzIHdlcmUgY29waWVkIHRvIHlvdXIgY2xpcGJvYXJkIGJlY2F1c2UgdGhleSBhcmUgdG9vIGxvbmcgZm9yIGEgbGluay4gUmVwbGFjZSB0aGlzIHRleHQgYnkgcGFzdGluZyB0aGVtIGhlcmUuJztcblxuLyoqXG4gKiBUaGUgZW52aXJvbm1lbnQgYSBidWcgcmVwb3J0IG5lZWRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Z1JlcG9ydEVudmlyb25tZW50IHtcbiAgLyoqXG4gICAqIFRoZSBvdGhlciBsb2FkZWQgcGx1Z2lucywgc29ydGVkIGJ5IGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZFBsdWdpbnM6IHJlYWRvbmx5IEJ1Z1JlcG9ydFBsdWdpbkluZm9bXTtcblxuICAvKipcbiAgICogVGhlIGluc3RhbGxlZCBhcHAncyB2ZXJzaW9uLCB3aGljaCBjYW4gbGFnIGJlaGluZCB7QGxpbmsgb2JzaWRpYW5WZXJzaW9ufS5cbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbGxlclZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIHZlcnNpb24uXG4gICAqL1xuICByZWFkb25seSBvYnNpZGlhblZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9wZXJhdGluZyBzeXN0ZW0ncyBuYW1lIGFuZCB2ZXJzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0aW5nU3lzdGVtOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbGF0Zm9ybTogYEFuZHJvaWRgLCBgaU9TYCwgYG1hY09TYCwgYFdpbmRvd3NgLCBgTGludXhgIG9yIGB1bmtub3duYC5cbiAgICovXG4gIHJlYWRvbmx5IHBsYXRmb3JtOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXBvcnRpbmcgcGx1Z2luLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luOiBCdWdSZXBvcnRQbHVnaW5JbmZvO1xufVxuXG4vKipcbiAqIEEgcGx1Z2luLCBhcyBhIGJ1ZyByZXBvcnQgbmFtZXMgaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVnUmVwb3J0UGx1Z2luSW5mbyB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luJ3MgaWQuXG4gICAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luJ3MgaW5zdGFsbGVkIHZlcnNpb24sIG9yIGBudWxsYCB3aGVuIGl0cyBtYW5pZmVzdCBpcyBub3Qga25vd24uXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBudWxsIHwgc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRCdWdSZXBvcnRFbnZpcm9ubWVudH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QnVnUmVwb3J0RW52aXJvbm1lbnRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIHJlcG9ydGluZyBwbHVnaW4uXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRCdWdSZXBvcnRJc3N1ZUZvcm1Vcmx9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEJ1Z1JlcG9ydElzc3VlRm9ybVVybFBhcmFtcyBleHRlbmRzIEdldEJ1Z1JlcG9ydEVudmlyb25tZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4ncyBHaXRIdWIgcmVwb3NpdG9yeSwgYXMgYG93bmVyL25hbWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0SHViUmVwbzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaXNzdWUncyB0aXRsZS4gTGVhdmUgaXQgb3V0IHRvIGtlZXAgdGhlIGZvcm0ncyBvd24gZGVmYXVsdCB0aXRsZS5cbiAgICovXG4gIHJlYWRvbmx5IHRpdGxlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRHaXRIdWJJc3N1ZUZvcm1Vcmx9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEdpdEh1Yklzc3VlRm9ybVVybFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgdmFsdWVzIHRvIHByZWZpbGwsIGtleWVkIGJ5IGZpZWxkIGBpZGAuXG4gICAqL1xuICByZWFkb25seSBmaWVsZHM/OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PjtcblxuICAvKipcbiAgICogVGhlIEdpdEh1YiByZXBvc2l0b3J5LCBhcyBgb3duZXIvbmFtZWAuXG4gICAqL1xuICByZWFkb25seSBnaXRIdWJSZXBvOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmb3JtJ3MgZmlsZSBuYW1lLCB1bmRlciBgLmdpdGh1Yi9JU1NVRV9URU1QTEFURWAuXG4gICAqL1xuICByZWFkb25seSB0ZW1wbGF0ZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaXNzdWUncyB0aXRsZS4gTGVhdmUgaXQgb3V0IHRvIGtlZXAgdGhlIGZvcm0ncyBvd24gZGVmYXVsdCB0aXRsZS5cbiAgICovXG4gIHJlYWRvbmx5IHRpdGxlPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQXBwQW5kT3BlcmF0aW5nU3lzdGVtIHtcbiAgcmVhZG9ubHkgaW5zdGFsbGVyVmVyc2lvbjogc3RyaW5nO1xuICByZWFkb25seSBvcGVyYXRpbmdTeXN0ZW06IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFBsYXRmb3JtV2l0aEJ1aWxkIHtcbiAgcmVhZG9ubHkgYnVpbGQ/OiB1bmtub3duO1xufVxuXG5jb25zdCBVTktOT1dOID0gJ3Vua25vd24nO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGxpbmsgdG8gYSBwbHVnaW4ncyBidWctcmVwb3J0IGlzc3VlIGZvcm0sIHByZWZpbGxlZCB3aXRoIHRoZSBlbnZpcm9ubWVudCBhbmQgdGhlIGdpdmVuXG4gKiBkaWFnbm9zdGljcy4gV2hlbiB0aGUgZW5jb2RlZCBsaW5rIHdvdWxkIGJlIGxvbmdlciB0aGFuXG4gKiB7QGxpbmsgQnVpbGRCdWdSZXBvcnRJc3N1ZUZvcm1MaW5rUGFyYW1zLm1heFVybExlbmd0aH0sIHRoZSBlbnZpcm9ubWVudCBmaWVsZCBnZXRzXG4gKiB7QGxpbmsgQlVHX1JFUE9SVF9QQVNURV9JTlNUUlVDVElPTlN9IGluc3RlYWQsIGFuZCB0aGUgZnVsbCB0ZXh0IGlzIHJldHVybmVkIGFzXG4gKiB7QGxpbmsgQnVnUmVwb3J0SXNzdWVGb3JtTGluay5jbGlwYm9hcmRUZXh0fSBmb3IgdGhlIGNhbGxlciB0byBjb3B5LiBOb3RoaW5nIGlzIGN1dC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgbGluaywgYW5kIHRoZSB0ZXh0IHRvIHBhc3RlIHdoZW4gaXQgZGlkIG5vdCBmaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEJ1Z1JlcG9ydElzc3VlRm9ybUxpbmsocGFyYW1zOiBCdWlsZEJ1Z1JlcG9ydElzc3VlRm9ybUxpbmtQYXJhbXMpOiBCdWdSZXBvcnRJc3N1ZUZvcm1MaW5rIHtcbiAgY29uc3QgeyBlbnZpcm9ubWVudCB9ID0gcGFyYW1zO1xuICBjb25zdCBkaWFnbm9zdGljc01hcmtkb3duID0gZm9ybWF0QnVnUmVwb3J0RGlhZ25vc3RpY3MocGFyYW1zLmRpYWdub3N0aWNzID8/IFtdKTtcbiAgY29uc3QgZW52aXJvbm1lbnRUZXh0ID0gZGlhZ25vc3RpY3NNYXJrZG93biA9PT0gJydcbiAgICA/IGZvcm1hdEJ1Z1JlcG9ydEVudmlyb25tZW50KGVudmlyb25tZW50KVxuICAgIDogYCR7Zm9ybWF0QnVnUmVwb3J0RW52aXJvbm1lbnQoZW52aXJvbm1lbnQpfVxcblxcbiR7ZGlhZ25vc3RpY3NNYXJrZG93bn1gO1xuXG4gIGZ1bmN0aW9uIGJ1aWxkVXJsKGVudmlyb25tZW50RmllbGRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0R2l0SHViSXNzdWVGb3JtVXJsKHtcbiAgICAgIGZpZWxkczoge1xuICAgICAgICBbQnVnUmVwb3J0SXNzdWVGb3JtRmllbGRJZC5FbnZpcm9ubWVudF06IGVudmlyb25tZW50RmllbGRWYWx1ZSxcbiAgICAgICAgW0J1Z1JlcG9ydElzc3VlRm9ybUZpZWxkSWQuT2JzaWRpYW5WZXJzaW9uXTogZW52aXJvbm1lbnQub2JzaWRpYW5WZXJzaW9uLFxuICAgICAgICBbQnVnUmVwb3J0SXNzdWVGb3JtRmllbGRJZC5PcGVyYXRpbmdTeXN0ZW1dOiBlbnZpcm9ubWVudC5vcGVyYXRpbmdTeXN0ZW0sXG4gICAgICAgIFtCdWdSZXBvcnRJc3N1ZUZvcm1GaWVsZElkLlBsdWdpblZlcnNpb25dOiBlbnZpcm9ubWVudC5wbHVnaW4udmVyc2lvbiA/PyBVTktOT1dOXG4gICAgICB9LFxuICAgICAgZ2l0SHViUmVwbzogcGFyYW1zLmdpdEh1YlJlcG8sXG4gICAgICB0ZW1wbGF0ZTogQlVHX1JFUE9SVF9JU1NVRV9GT1JNX1RFTVBMQVRFLFxuICAgICAgLi4ucGFyYW1zLnRpdGxlICE9PSB1bmRlZmluZWQgJiYgeyB0aXRsZTogcGFyYW1zLnRpdGxlIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGZ1bGxVcmwgPSBidWlsZFVybChlbnZpcm9ubWVudFRleHQpO1xuICByZXR1cm4gZnVsbFVybC5sZW5ndGggPD0gKHBhcmFtcy5tYXhVcmxMZW5ndGggPz8gREVGQVVMVF9CVUdfUkVQT1JUX01BWF9VUkxfTEVOR1RIKSA/IHsgY2xpcGJvYXJkVGV4dDogbnVsbCwgdXJsOiBmdWxsVXJsIH0gOiB7IGNsaXBib2FyZFRleHQ6IGVudmlyb25tZW50VGV4dCwgdXJsOiBidWlsZFVybChCVUdfUkVQT1JUX1BBU1RFX0lOU1RSVUNUSU9OUykgfTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgYnVnIHJlcG9ydCdzIGVudmlyb25tZW50IGFzIGEgTWFya2Rvd24gbGlzdC5cbiAqXG4gKiBAcGFyYW0gZW52aXJvbm1lbnQgLSBUaGUgZW52aXJvbm1lbnQuXG4gKiBAcmV0dXJucyBUaGUgTWFya2Rvd24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRCdWdSZXBvcnRFbnZpcm9ubWVudChlbnZpcm9ubWVudDogQnVnUmVwb3J0RW52aXJvbm1lbnQpOiBzdHJpbmcge1xuICBjb25zdCBlbmFibGVkUGx1Z2lucyA9IGVudmlyb25tZW50LmVuYWJsZWRQbHVnaW5zLmxlbmd0aCA9PT0gMFxuICAgID8gJ25vbmUnXG4gICAgOiBlbnZpcm9ubWVudC5lbmFibGVkUGx1Z2lucy5tYXAoKHBsdWdpbkluZm8pID0+IGZvcm1hdFBsdWdpbkluZm8ocGx1Z2luSW5mbykpLmpvaW4oJywgJyk7XG5cbiAgcmV0dXJuIGAtIFBsdWdpbjogJHtmb3JtYXRQbHVnaW5JbmZvKGVudmlyb25tZW50LnBsdWdpbil9XFxuYFxuICAgICsgYC0gT2JzaWRpYW46ICR7ZW52aXJvbm1lbnQub2JzaWRpYW5WZXJzaW9ufSAoaW5zdGFsbGVyICR7ZW52aXJvbm1lbnQuaW5zdGFsbGVyVmVyc2lvbn0pXFxuYFxuICAgICsgYC0gUGxhdGZvcm06ICR7ZW52aXJvbm1lbnQucGxhdGZvcm19XFxuYFxuICAgICsgYC0gT3BlcmF0aW5nIHN5c3RlbTogJHtlbnZpcm9ubWVudC5vcGVyYXRpbmdTeXN0ZW19XFxuYFxuICAgICsgYC0gT3RoZXIgZW5hYmxlZCBwbHVnaW5zOiAke2VuYWJsZWRQbHVnaW5zfWA7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgZW52aXJvbm1lbnQgYSBidWcgcmVwb3J0IG5lZWRzOiB0aGUgcGx1Z2luJ3MgdmVyc2lvbiwgdGhlIG90aGVyIGVuYWJsZWQgcGx1Z2lucywgdGhlXG4gKiBPYnNpZGlhbiBhbmQgaW5zdGFsbGVyIHZlcnNpb25zLCB0aGUgcGxhdGZvcm0gYW5kIHRoZSBvcGVyYXRpbmcgc3lzdGVtLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIFRoZSBlbnZpcm9ubWVudC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEJ1Z1JlcG9ydEVudmlyb25tZW50KHBhcmFtczogR2V0QnVnUmVwb3J0RW52aXJvbm1lbnRQYXJhbXMpOiBQcm9taXNlPEJ1Z1JlcG9ydEVudmlyb25tZW50PiB7XG4gIGNvbnN0IHsgYXBwLCBwbHVnaW5JZCB9ID0gcGFyYW1zO1xuICBjb25zdCB7IGluc3RhbGxlclZlcnNpb24sIG9wZXJhdGluZ1N5c3RlbSB9ID0gYXdhaXQgZ2V0QXBwQW5kT3BlcmF0aW5nU3lzdGVtKCk7XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBUaGUgbG9hZGVkIHBsdWdpbnMsIGFzIE9ic2lkaWFuJ3MgU2hvdyBkZWJ1ZyBpbmZvIGxpc3RzIHRoZW06IGBlbmFibGVkUGx1Z2luc2AgYWxzbyBob2xkcyBhbiBpZFxuICAgIC8vIHdob3NlIGZvbGRlciB3YXMgZGVsZXRlZCwgb3Igd2hvc2UgbG9hZCBmYWlsZWQuXG4gICAgZW5hYmxlZFBsdWdpbnM6IE9iamVjdC5rZXlzKGFwcC5wbHVnaW5zLnBsdWdpbnMpXG4gICAgICAuZmlsdGVyKChpZCkgPT4gaWQgIT09IHBsdWdpbklkKVxuICAgICAgLnNvcnQoKVxuICAgICAgLm1hcCgoaWQpID0+IGdldFBsdWdpbkluZm8oYXBwLCBpZCkpLFxuICAgIGluc3RhbGxlclZlcnNpb24sXG4gICAgb2JzaWRpYW5WZXJzaW9uOiBhcGlWZXJzaW9uLFxuICAgIG9wZXJhdGluZ1N5c3RlbSxcbiAgICBwbGF0Zm9ybTogZ2V0UGxhdGZvcm1OYW1lKCksXG4gICAgcGx1Z2luOiBnZXRQbHVnaW5JbmZvKGFwcCwgcGx1Z2luSWQpXG4gIH07XG59XG5cbi8qKlxuICogR2V0cyBhIGxpbmsgdG8gYSBwbHVnaW4ncyBidWctcmVwb3J0IGlzc3VlIGZvcm0gKHtAbGluayBCVUdfUkVQT1JUX0lTU1VFX0ZPUk1fVEVNUExBVEV9KSwgcHJlZmlsbGVkIHdpdGhcbiAqIHRoZSBlbnZpcm9ubWVudCwgaW4gdGhlIGZpZWxkcyB7QGxpbmsgQnVnUmVwb3J0SXNzdWVGb3JtRmllbGRJZH0gbmFtZXMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgVGhlIGxpbmsuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRCdWdSZXBvcnRJc3N1ZUZvcm1VcmwocGFyYW1zOiBHZXRCdWdSZXBvcnRJc3N1ZUZvcm1VcmxQYXJhbXMpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBlbnZpcm9ubWVudCA9IGF3YWl0IGdldEJ1Z1JlcG9ydEVudmlyb25tZW50KHBhcmFtcyk7XG5cbiAgcmV0dXJuIGJ1aWxkQnVnUmVwb3J0SXNzdWVGb3JtTGluayh7XG4gICAgZW52aXJvbm1lbnQsXG4gICAgZ2l0SHViUmVwbzogcGFyYW1zLmdpdEh1YlJlcG8sXG4gICAgbWF4VXJsTGVuZ3RoOiBJbmZpbml0eSxcbiAgICAuLi5wYXJhbXMudGl0bGUgIT09IHVuZGVmaW5lZCAmJiB7IHRpdGxlOiBwYXJhbXMudGl0bGUgfVxuICB9KS51cmw7XG59XG5cbi8qKlxuICogR2V0cyBhIGxpbmsgdGhhdCBvcGVucyBhIEdpdEh1YiBpc3N1ZSBmb3JtIHdpdGggZmllbGRzIHByZWZpbGxlZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgbGluay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdpdEh1Yklzc3VlRm9ybVVybChwYXJhbXM6IEdldEdpdEh1Yklzc3VlRm9ybVVybFBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoeyB0ZW1wbGF0ZTogcGFyYW1zLnRlbXBsYXRlIH0pO1xuICBpZiAocGFyYW1zLnRpdGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICBzZWFyY2hQYXJhbXMuc2V0KCd0aXRsZScsIHBhcmFtcy50aXRsZSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IFtmaWVsZElkLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyYW1zLmZpZWxkcyA/PyB7fSkpIHtcbiAgICBzZWFyY2hQYXJhbXMuc2V0KGZpZWxkSWQsIHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBgaHR0cHM6Ly9naXRodWIuY29tLyR7cGFyYW1zLmdpdEh1YlJlcG99L2lzc3Vlcy9uZXc/JHtzZWFyY2hQYXJhbXMudG9TdHJpbmcoKX1gO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRQbHVnaW5JbmZvKHBsdWdpbkluZm86IEJ1Z1JlcG9ydFBsdWdpbkluZm8pOiBzdHJpbmcge1xuICByZXR1cm4gYFxcYCR7cGx1Z2luSW5mby5pZH1cXGAgJHtwbHVnaW5JbmZvLnZlcnNpb24gPz8gVU5LTk9XTn1gO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRBcHBBbmRPcGVyYXRpbmdTeXN0ZW0oKTogUHJvbWlzZTxBcHBBbmRPcGVyYXRpbmdTeXN0ZW0+IHtcbiAgaWYgKFBsYXRmb3JtLmlzTW9iaWxlQXBwKSB7XG4gICAgY29uc3QgbW9iaWxlQXBwSW5mbyA9IGF3YWl0IGdldE1vYmlsZUFwcEluZm8oKTtcbiAgICByZXR1cm4ge1xuICAgICAgaW5zdGFsbGVyVmVyc2lvbjogbW9iaWxlQXBwSW5mbz8uaW5zdGFsbGVyVmVyc2lvbiA/PyBVTktOT1dOLFxuICAgICAgb3BlcmF0aW5nU3lzdGVtOiBtb2JpbGVBcHBJbmZvPy5vcGVyYXRpbmdTeXN0ZW0gPz8gVU5LTk9XTlxuICAgIH07XG4gIH1cblxuICBpZiAoIVBsYXRmb3JtLmlzRGVza3RvcEFwcCkge1xuICAgIHJldHVybiB7IGluc3RhbGxlclZlcnNpb246IFVOS05PV04sIG9wZXJhdGluZ1N5c3RlbTogVU5LTk9XTiB9O1xuICB9XG5cbiAgLy8gQ29uZGl0aW9uYWwgaW1wb3J0IG9mIHRoZSBkZXNrdG9wLW9ubHkgbG9va3VwLCB3aGljaCByZWFkcyBgbm9kZTpvc2A7IHRoaXMgYnJhbmNoIHJ1bnMgb25seSBvbiBkZXNrdG9wLlxuICBjb25zdCB7IGdldERlc2t0b3BPcGVyYXRpbmdTeXN0ZW0gfSA9IGF3YWl0IGltcG9ydCgnLi9kZXNrdG9wLW9wZXJhdGluZy1zeXN0ZW0udHMnKTtcbiAgY29uc3QgYnVpbGQgPSAoUGxhdGZvcm0gYXMgUGxhdGZvcm1XaXRoQnVpbGQpLmJ1aWxkO1xuICByZXR1cm4ge1xuICAgIGluc3RhbGxlclZlcnNpb246IHR5cGVvZiBidWlsZCA9PT0gJ3N0cmluZycgPyBidWlsZCA6IFVOS05PV04sXG4gICAgb3BlcmF0aW5nU3lzdGVtOiBnZXREZXNrdG9wT3BlcmF0aW5nU3lzdGVtKClcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UGxhdGZvcm1OYW1lKCk6IHN0cmluZyB7XG4gIGlmIChQbGF0Zm9ybS5pc0FuZHJvaWRBcHApIHtcbiAgICByZXR1cm4gJ0FuZHJvaWQnO1xuICB9XG4gIGlmIChQbGF0Zm9ybS5pc0lvc0FwcCkge1xuICAgIHJldHVybiAnaU9TJztcbiAgfVxuICBpZiAoUGxhdGZvcm0uaXNNYWNPUykge1xuICAgIHJldHVybiAnbWFjT1MnO1xuICB9XG4gIGlmIChQbGF0Zm9ybS5pc1dpbikge1xuICAgIHJldHVybiAnV2luZG93cyc7XG4gIH1cbiAgcmV0dXJuIFBsYXRmb3JtLmlzTGludXggPyAnTGludXgnIDogVU5LTk9XTjtcbn1cblxuZnVuY3Rpb24gZ2V0UGx1Z2luSW5mbyhhcHA6IEFwcCwgcGx1Z2luSWQ6IHN0cmluZyk6IEJ1Z1JlcG9ydFBsdWdpbkluZm8ge1xuICByZXR1cm4ge1xuICAgIGlkOiBwbHVnaW5JZCxcbiAgICB2ZXJzaW9uOiBhcHAucGx1Z2lucy5tYW5pZmVzdHNbcGx1Z2luSWRdPy52ZXJzaW9uID8/IG51bGxcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QWdCLEVBQUUsVUFBVSxPQUFPLFNBQVMsQ0FBQztBQUN0RSxNQUFJLE9BQU8sVUFBVSxRQUFXO0FBQzlCLGlCQUFhLElBQUksU0FBUyxPQUFPLEtBQUs7QUFBQSxFQUN4QztBQUVBLGFBQVcsQ0FBQyxTQUFTLEtBQUssS0FBSyxPQUFPLFFBQVEsT0FBTyxVQUFVLENBQUMsQ0FBQyxHQUFHO0FBQ2xFLGlCQUFhLElBQUksU0FBUyxLQUFLO0FBQUEsRUFDakM7QUFFQSxTQUFPLHNCQUFzQixPQUFPLFVBQVUsZUFBZSxhQUFhLFNBQVMsQ0FBQztBQUN0RjtBQUVBLFNBQVMsaUJBQWlCLFlBQXlDO0FBQ2pFLFNBQU8sS0FBSyxXQUFXLEVBQUUsTUFBTSxXQUFXLFdBQVcsT0FBTztBQUM5RDtBQUVBLGVBQWUsMkJBQTJEO0FBQ3hFLE1BQUksU0FBUyxhQUFhO0FBQ3hCLFVBQU0sZ0JBQWdCLE1BQU0saUJBQWlCO0FBQzdDLFdBQU87QUFBQSxNQUNMLGtCQUFrQixlQUFlLG9CQUFvQjtBQUFBLE1BQ3JELGlCQUFpQixlQUFlLG1CQUFtQjtBQUFBLElBQ3JEO0FBQUEsRUFDRjtBQUVBLE1BQUksQ0FBQyxTQUFTLGNBQWM7QUFDMUIsV0FBTyxFQUFFLGtCQUFrQixTQUFTLGlCQUFpQixRQUFRO0FBQUEsRUFDL0Q7QUFHQSxRQUFNLEVBQUUsMEJBQTBCLElBQUksTUFBTSxPQUFPLCtCQUErQjtBQUNsRixRQUFNLFFBQVMsU0FBK0I7QUFDOUMsU0FBTztBQUFBLElBQ0wsa0JBQWtCLE9BQU8sVUFBVSxXQUFXLFFBQVE7QUFBQSxJQUN0RCxpQkFBaUIsMEJBQTBCO0FBQUEsRUFDN0M7QUFDRjtBQUVBLFNBQVMsa0JBQTBCO0FBQ2pDLE1BQUksU0FBUyxjQUFjO0FBQ3pCLFdBQU87QUFBQSxFQUNUO0FBQ0EsTUFBSSxTQUFTLFVBQVU7QUFDckIsV0FBTztBQUFBLEVBQ1Q7QUFDQSxNQUFJLFNBQVMsU0FBUztBQUNwQixXQUFPO0FBQUEsRUFDVDtBQUNBLE1BQUksU0FBUyxPQUFPO0FBQ2xCLFdBQU87QUFBQSxFQUNUO0FBQ0EsU0FBTyxTQUFTLFVBQVUsVUFBVTtBQUN0QztBQUVBLFNBQVMsY0FBYyxLQUFVLFVBQXVDO0FBQ3RFLFNBQU87QUFBQSxJQUNMLElBQUk7QUFBQSxJQUNKLFNBQVMsSUFBSSxRQUFRLFVBQVUsUUFBUSxHQUFHLFdBQVc7QUFBQSxFQUN2RDtBQUNGOyIsIm5hbWVzIjpbIkJ1Z1JlcG9ydElzc3VlRm9ybUZpZWxkSWQiXX0=
@@ -5,6 +5,8 @@
5
5
  * Handles the "Report a bug" command.
6
6
  */
7
7
  import type { App } from 'obsidian';
8
+ import type { Promisable } from 'type-fest';
9
+ import type { BugReportDiagnosticSection } from '../bug-report-diagnostics.mjs';
8
10
  import { OpenGitHubCommandHandler } from './open-git-hub-command-handler.mjs';
9
11
  /**
10
12
  * Constructor parameters for {@link OpenBugReportCommandHandler}.
@@ -14,10 +16,23 @@ export interface OpenBugReportCommandHandlerConstructorParams {
14
16
  * The Obsidian app instance.
15
17
  */
16
18
  readonly app: App;
19
+ /**
20
+ * Gets the optional diagnostics the report can carry, such as a `BugReportLogBuffer`'s section or the
21
+ * plugin's own redacted settings. Called each time the command runs. When it returns any section, the
22
+ * user reviews them and chooses which to include before the form opens; a potentially private section
23
+ * starts excluded. Leave it out to open the form with the environment only, as before.
24
+ */
25
+ readonly getDiagnostics?: () => Promisable<readonly BugReportDiagnosticSection[]>;
17
26
  /**
18
27
  * The plugin's GitHub repository, as `owner/name`.
19
28
  */
20
29
  readonly gitHubRepo: string;
30
+ /**
31
+ * The most characters the encoded link may have before the report moves to the clipboard.
32
+ *
33
+ * @default `DEFAULT_BUG_REPORT_MAX_URL_LENGTH`
34
+ */
35
+ readonly maxUrlLength?: number;
21
36
  /**
22
37
  * The id of the reporting plugin.
23
38
  */
@@ -25,13 +40,23 @@ export interface OpenBugReportCommandHandlerConstructorParams {
25
40
  }
26
41
  /**
27
42
  * A command handler that opens the plugin's bug-report issue form on GitHub, prefilled with the
28
- * environment. See {@link getBugReportIssueFormUrl} for the field ids the form must use.
43
+ * environment and any diagnostics the user agreed to include. See {@link getBugReportIssueFormUrl} for the
44
+ * field ids the form must use, and {@link buildBugReportIssueFormLink} for what happens to a report too long
45
+ * for a link.
29
46
  */
30
47
  export declare class OpenBugReportCommandHandler extends OpenGitHubCommandHandler {
31
48
  /**
32
49
  * The Obsidian app instance.
33
50
  */
34
51
  protected readonly app: App;
52
+ /**
53
+ * Gets the optional diagnostics the report can carry.
54
+ */
55
+ protected readonly getDiagnostics: (() => Promisable<readonly BugReportDiagnosticSection[]>) | undefined;
56
+ /**
57
+ * The most characters the encoded link may have before the report moves to the clipboard.
58
+ */
59
+ protected readonly maxUrlLength: number | undefined;
35
60
  /**
36
61
  * The id of the reporting plugin.
37
62
  */
@@ -43,9 +68,16 @@ export declare class OpenBugReportCommandHandler extends OpenGitHubCommandHandle
43
68
  */
44
69
  constructor(params: OpenBugReportCommandHandlerConstructorParams);
45
70
  /**
46
- * Builds the prefilled bug-report URL.
71
+ * Lets the user review the diagnostics, if any, then opens the issue form. When the report is too long
72
+ * for a link, it is copied to the clipboard first, or shown for copying by hand when the clipboard
73
+ * refuses it.
74
+ */
75
+ execute(): Promise<void>;
76
+ /**
77
+ * Builds the prefilled bug-report URL, with the environment only.
47
78
  *
48
79
  * @returns The link.
49
80
  */
50
81
  protected getUrl(): Promise<string>;
82
+ private copyReport;
51
83
  }