@obsidian-typings/obsidian-catalyst-1.14.4 0.0.0 → 1.2.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.
- package/CHANGELOG.md +18 -0
- package/LICENSE +21 -0
- package/README.md +24 -2
- package/dist/cjs/implementations.cjs +1401 -0
- package/dist/cjs/implementations.d.cts +48523 -0
- package/dist/cjs/types.d.cts +76322 -0
- package/dist/esm/implementations.d.mts +48523 -0
- package/dist/esm/implementations.mjs +1379 -0
- package/dist/esm/types.d.mts +76322 -0
- package/dist/obsidian-typings.api.json +359680 -0
- package/implementations/package.json +5 -0
- package/package.json +140 -4
|
@@ -0,0 +1,1401 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
"use strict";
|
|
6
|
+
var __defProp = Object.defineProperty;
|
|
7
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
8
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
9
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
10
|
+
var __export = (target, all) => {
|
|
11
|
+
for (var name in all)
|
|
12
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
13
|
+
};
|
|
14
|
+
var __copyProps = (to, from, except, desc) => {
|
|
15
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
16
|
+
for (let key of __getOwnPropNames(from))
|
|
17
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
18
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
19
|
+
}
|
|
20
|
+
return to;
|
|
21
|
+
};
|
|
22
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
23
|
+
|
|
24
|
+
// src/obsidian/implementations/index.ts
|
|
25
|
+
var index_exports = {};
|
|
26
|
+
__export(index_exports, {
|
|
27
|
+
CustomArrayDictImpl: () => CustomArrayDictImpl,
|
|
28
|
+
FileExtension: () => FileExtension,
|
|
29
|
+
InternalPluginName: () => InternalPluginName,
|
|
30
|
+
ViewType: () => ViewType,
|
|
31
|
+
createTFileInstance: () => createTFileInstance,
|
|
32
|
+
createTFolderInstance: () => createTFolderInstance,
|
|
33
|
+
evaluateBaseHeadless: () => evaluateBaseHeadless,
|
|
34
|
+
getAbstractTextComponentConstructor: () => getAbstractTextComponentConstructor,
|
|
35
|
+
getAllPropertiesViewConstructor: () => getAllPropertiesViewConstructor,
|
|
36
|
+
getAppConstructor: () => getAppConstructor,
|
|
37
|
+
getAppMenuBarManagerConstructor: () => getAppMenuBarManagerConstructor,
|
|
38
|
+
getAppSettingConstructor: () => getAppSettingConstructor,
|
|
39
|
+
getAudioViewConstructor: () => getAudioViewConstructor,
|
|
40
|
+
getBacklinkViewConstructor: () => getBacklinkViewConstructor,
|
|
41
|
+
getBaseComponentConstructor: () => getBaseComponentConstructor,
|
|
42
|
+
getBasesContextConstructor: () => getBasesContextConstructor,
|
|
43
|
+
getBasesControllerFromRender: () => getBasesControllerFromRender,
|
|
44
|
+
getBasesEntryConstructor: () => getBasesEntryConstructor,
|
|
45
|
+
getBasesEntryGroupConstructor: () => getBasesEntryGroupConstructor,
|
|
46
|
+
getBasesQueryConstructor: () => getBasesQueryConstructor,
|
|
47
|
+
getBasesQueryResultConstructor: () => getBasesQueryResultConstructor,
|
|
48
|
+
getBasesViewConfigConstructor: () => getBasesViewConfigConstructor,
|
|
49
|
+
getBasesViewConstructor: () => getBasesViewConstructor,
|
|
50
|
+
getBookmarksViewConstructor: () => getBookmarksViewConstructor,
|
|
51
|
+
getBooleanValueConstructor: () => getBooleanValueConstructor,
|
|
52
|
+
getButtonComponentConstructor: () => getButtonComponentConstructor,
|
|
53
|
+
getCanvasViewConstructor: () => getCanvasViewConstructor,
|
|
54
|
+
getCapacitorAdapterConstructor: () => getCapacitorAdapterConstructor,
|
|
55
|
+
getCliConstructor: () => getCliConstructor,
|
|
56
|
+
getColorComponentConstructor: () => getColorComponentConstructor,
|
|
57
|
+
getCommandsConstructor: () => getCommandsConstructor,
|
|
58
|
+
getComponentConstructor: () => getComponentConstructor,
|
|
59
|
+
getConfirmationButtonConstructor: () => getConfirmationButtonConstructor,
|
|
60
|
+
getConfirmationModalConstructor: () => getConfirmationModalConstructor,
|
|
61
|
+
getCustomCSSConstructor: () => getCustomCSSConstructor,
|
|
62
|
+
getDataAdapterEx: () => getDataAdapterEx,
|
|
63
|
+
getDateValueConstructor: () => getDateValueConstructor,
|
|
64
|
+
getDisplayValueComponentConstructor: () => getDisplayValueComponentConstructor,
|
|
65
|
+
getDragManagerConstructor: () => getDragManagerConstructor,
|
|
66
|
+
getDropdownComponentConstructor: () => getDropdownComponentConstructor,
|
|
67
|
+
getDurationValueConstructor: () => getDurationValueConstructor,
|
|
68
|
+
getEditableFileViewConstructor: () => getEditableFileViewConstructor,
|
|
69
|
+
getEditorConstructor: () => getEditorConstructor,
|
|
70
|
+
getEditorSuggestsConstructor: () => getEditorSuggestsConstructor,
|
|
71
|
+
getEmbedRegistryConstructor: () => getEmbedRegistryConstructor,
|
|
72
|
+
getEmptyViewConstructor: () => getEmptyViewConstructor,
|
|
73
|
+
getEventsConstructor: () => getEventsConstructor,
|
|
74
|
+
getExtraButtonComponentConstructor: () => getExtraButtonComponentConstructor,
|
|
75
|
+
getFileExplorerViewConstructor: () => getFileExplorerViewConstructor,
|
|
76
|
+
getFileManagerConstructor: () => getFileManagerConstructor,
|
|
77
|
+
getFilePropertiesViewConstructor: () => getFilePropertiesViewConstructor,
|
|
78
|
+
getFileSystemAdapterConstructor: () => getFileSystemAdapterConstructor,
|
|
79
|
+
getFileValueConstructor: () => getFileValueConstructor,
|
|
80
|
+
getFoldManagerConstructor: () => getFoldManagerConstructor,
|
|
81
|
+
getFrameDomConstructor: () => getFrameDomConstructor,
|
|
82
|
+
getFuzzySuggestModalConstructor: () => getFuzzySuggestModalConstructor,
|
|
83
|
+
getGraphViewConstructor: () => getGraphViewConstructor,
|
|
84
|
+
getHTMLValueConstructor: () => getHTMLValueConstructor,
|
|
85
|
+
getHotkeyManagerConstructor: () => getHotkeyManagerConstructor,
|
|
86
|
+
getHoverPopoverConstructor: () => getHoverPopoverConstructor,
|
|
87
|
+
getIconValueConstructor: () => getIconValueConstructor,
|
|
88
|
+
getImageValueConstructor: () => getImageValueConstructor,
|
|
89
|
+
getImageViewConstructor: () => getImageViewConstructor,
|
|
90
|
+
getInternalPluginConstructor: () => getInternalPluginConstructor,
|
|
91
|
+
getInternalPluginsConstructor: () => getInternalPluginsConstructor,
|
|
92
|
+
getKeymapConstructor: () => getKeymapConstructor,
|
|
93
|
+
getLinkValueConstructor: () => getLinkValueConstructor,
|
|
94
|
+
getListValueConstructor: () => getListValueConstructor,
|
|
95
|
+
getLocalGraphViewConstructor: () => getLocalGraphViewConstructor,
|
|
96
|
+
getMarkdownPreviewRendererConstructor: () => getMarkdownPreviewRendererConstructor,
|
|
97
|
+
getMarkdownPreviewViewConstructor: () => getMarkdownPreviewViewConstructor,
|
|
98
|
+
getMarkdownRenderChildConstructor: () => getMarkdownRenderChildConstructor,
|
|
99
|
+
getMarkdownRendererConstructor: () => getMarkdownRendererConstructor,
|
|
100
|
+
getMarkdownViewConstructor: () => getMarkdownViewConstructor,
|
|
101
|
+
getMenuConstructor: () => getMenuConstructor,
|
|
102
|
+
getMenuItemConstructor: () => getMenuItemConstructor,
|
|
103
|
+
getMenuSeparatorConstructor: () => getMenuSeparatorConstructor,
|
|
104
|
+
getMetadataCacheConstructor: () => getMetadataCacheConstructor,
|
|
105
|
+
getMetadataTypeManagerConstructor: () => getMetadataTypeManagerConstructor,
|
|
106
|
+
getModalConstructor: () => getModalConstructor,
|
|
107
|
+
getMomentFormatComponentConstructor: () => getMomentFormatComponentConstructor,
|
|
108
|
+
getNotNullValueConstructor: () => getNotNullValueConstructor,
|
|
109
|
+
getNoticeConstructor: () => getNoticeConstructor,
|
|
110
|
+
getNullValueConstructor: () => getNullValueConstructor,
|
|
111
|
+
getNumberValueConstructor: () => getNumberValueConstructor,
|
|
112
|
+
getObjectValueConstructor: () => getObjectValueConstructor,
|
|
113
|
+
getObsidianDOMConstructor: () => getObsidianDOMConstructor,
|
|
114
|
+
getOutgoingLinkViewConstructor: () => getOutgoingLinkViewConstructor,
|
|
115
|
+
getOutlineViewConstructor: () => getOutlineViewConstructor,
|
|
116
|
+
getPdfViewConstructor: () => getPdfViewConstructor,
|
|
117
|
+
getPlatformEx: () => getPlatformEx,
|
|
118
|
+
getPluginsConstructor: () => getPluginsConstructor,
|
|
119
|
+
getProgressBarComponentConstructor: () => getProgressBarComponentConstructor,
|
|
120
|
+
getQueryControllerConstructor: () => getQueryControllerConstructor,
|
|
121
|
+
getRecentFileTrackerConstructor: () => getRecentFileTrackerConstructor,
|
|
122
|
+
getRegExpValueConstructor: () => getRegExpValueConstructor,
|
|
123
|
+
getRelativeDateValueConstructor: () => getRelativeDateValueConstructor,
|
|
124
|
+
getReleaseNotesViewConstructor: () => getReleaseNotesViewConstructor,
|
|
125
|
+
getRenderContextConstructor: () => getRenderContextConstructor,
|
|
126
|
+
getScopeConstructor: () => getScopeConstructor,
|
|
127
|
+
getSearchComponentConstructor: () => getSearchComponentConstructor,
|
|
128
|
+
getSearchViewConstructor: () => getSearchViewConstructor,
|
|
129
|
+
getSecretComponentConstructor: () => getSecretComponentConstructor,
|
|
130
|
+
getSecretStorageConstructor: () => getSecretStorageConstructor,
|
|
131
|
+
getSettingConstructor: () => getSettingConstructor,
|
|
132
|
+
getSettingGroupConstructor: () => getSettingGroupConstructor,
|
|
133
|
+
getSettingPageConstructor: () => getSettingPageConstructor,
|
|
134
|
+
getSettingTabConstructor: () => getSettingTabConstructor,
|
|
135
|
+
getShareReceiverConstructor: () => getShareReceiverConstructor,
|
|
136
|
+
getSliderComponentConstructor: () => getSliderComponentConstructor,
|
|
137
|
+
getStatusBarConstructor: () => getStatusBarConstructor,
|
|
138
|
+
getStringValueConstructor: () => getStringValueConstructor,
|
|
139
|
+
getSyncViewConstructor: () => getSyncViewConstructor,
|
|
140
|
+
getTAbstractFileConstructor: () => getTAbstractFileConstructor,
|
|
141
|
+
getTFileConstructor: () => getTFileConstructor,
|
|
142
|
+
getTFolderConstructor: () => getTFolderConstructor,
|
|
143
|
+
getTagValueConstructor: () => getTagValueConstructor,
|
|
144
|
+
getTagViewConstructor: () => getTagViewConstructor,
|
|
145
|
+
getTasksConstructor: () => getTasksConstructor,
|
|
146
|
+
getTextAreaComponentConstructor: () => getTextAreaComponentConstructor,
|
|
147
|
+
getTextComponentConstructor: () => getTextComponentConstructor,
|
|
148
|
+
getToggleComponentConstructor: () => getToggleComponentConstructor,
|
|
149
|
+
getUrlValueConstructor: () => getUrlValueConstructor,
|
|
150
|
+
getValueComponentConstructor: () => getValueComponentConstructor,
|
|
151
|
+
getValueConstructor: () => getValueConstructor,
|
|
152
|
+
getVaultConstructor: () => getVaultConstructor,
|
|
153
|
+
getVideoViewConstructor: () => getVideoViewConstructor,
|
|
154
|
+
getViewConstructorByViewType: () => getViewConstructorByViewType,
|
|
155
|
+
getViewRegistryConstructor: () => getViewRegistryConstructor,
|
|
156
|
+
getWebviewerHistoryViewConstructor: () => getWebviewerHistoryViewConstructor,
|
|
157
|
+
getWebviewerViewConstructor: () => getWebviewerViewConstructor,
|
|
158
|
+
getWorkspaceConstructor: () => getWorkspaceConstructor,
|
|
159
|
+
getWorkspaceContainerConstructor: () => getWorkspaceContainerConstructor,
|
|
160
|
+
getWorkspaceFloatingConstructor: () => getWorkspaceFloatingConstructor,
|
|
161
|
+
getWorkspaceItemConstructor: () => getWorkspaceItemConstructor,
|
|
162
|
+
getWorkspaceLeafConstructor: () => getWorkspaceLeafConstructor,
|
|
163
|
+
getWorkspaceLeafHistoryConstructor: () => getWorkspaceLeafHistoryConstructor,
|
|
164
|
+
getWorkspaceMobileDrawerConstructor: () => getWorkspaceMobileDrawerConstructor,
|
|
165
|
+
getWorkspaceParentConstructor: () => getWorkspaceParentConstructor,
|
|
166
|
+
getWorkspaceProtocolHandlerConstructor: () => getWorkspaceProtocolHandlerConstructor,
|
|
167
|
+
getWorkspaceRibbonConstructor: () => getWorkspaceRibbonConstructor,
|
|
168
|
+
getWorkspaceRootConstructor: () => getWorkspaceRootConstructor,
|
|
169
|
+
getWorkspaceSidedockConstructor: () => getWorkspaceSidedockConstructor,
|
|
170
|
+
getWorkspaceSplitConstructor: () => getWorkspaceSplitConstructor,
|
|
171
|
+
getWorkspaceTabsConstructor: () => getWorkspaceTabsConstructor,
|
|
172
|
+
getWorkspaceWindowConstructor: () => getWorkspaceWindowConstructor,
|
|
173
|
+
isEmbedCache: () => isEmbedCache,
|
|
174
|
+
isFrontmatterLinkCache: () => isFrontmatterLinkCache,
|
|
175
|
+
isLinkCache: () => isLinkCache,
|
|
176
|
+
isReferenceCache: () => isReferenceCache,
|
|
177
|
+
loadMermaid: () => loadMermaid,
|
|
178
|
+
loadPdfJs: () => loadPdfJs,
|
|
179
|
+
loadPrism: () => loadPrism,
|
|
180
|
+
parentFolderPath: () => parentFolderPath
|
|
181
|
+
});
|
|
182
|
+
module.exports = __toCommonJS(index_exports);
|
|
183
|
+
|
|
184
|
+
// src/obsidian/implementations/classes/CustomArrayDictImpl.ts
|
|
185
|
+
var CustomArrayDictImpl = class {
|
|
186
|
+
/**
|
|
187
|
+
* Internal map storing key-to-array mappings.
|
|
188
|
+
*/
|
|
189
|
+
data = /* @__PURE__ */ new Map();
|
|
190
|
+
/**
|
|
191
|
+
* Add a value to the array associated with the given key.
|
|
192
|
+
*
|
|
193
|
+
* @param key - The key.
|
|
194
|
+
* @param value - The value to add.
|
|
195
|
+
*/
|
|
196
|
+
add(key, value) {
|
|
197
|
+
let values = this.get(key);
|
|
198
|
+
if (!values) {
|
|
199
|
+
values = [];
|
|
200
|
+
this.data.set(key, values);
|
|
201
|
+
}
|
|
202
|
+
if (!values.includes(value)) {
|
|
203
|
+
values.push(value);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Remove all values for the given key.
|
|
208
|
+
*
|
|
209
|
+
* @param key - The key to clear.
|
|
210
|
+
*/
|
|
211
|
+
clear(key) {
|
|
212
|
+
this.data.delete(key);
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Remove all keys and their values.
|
|
216
|
+
*/
|
|
217
|
+
clearAll() {
|
|
218
|
+
this.data.clear();
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Check whether the array for the given key contains the specified value.
|
|
222
|
+
*
|
|
223
|
+
* @param key - The key.
|
|
224
|
+
* @param value - The value to check.
|
|
225
|
+
* @returns Whether the value exists.
|
|
226
|
+
*/
|
|
227
|
+
contains(key, value) {
|
|
228
|
+
return !!this.get(key)?.contains(value);
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Get the total number of values across all keys.
|
|
232
|
+
*
|
|
233
|
+
* @returns Total value count.
|
|
234
|
+
*/
|
|
235
|
+
count() {
|
|
236
|
+
let ans = 0;
|
|
237
|
+
for (const key of this.keys()) {
|
|
238
|
+
ans += this.get(key)?.length ?? 0;
|
|
239
|
+
}
|
|
240
|
+
return ans;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Get the array of values for the given key, or `null` if not found.
|
|
244
|
+
*
|
|
245
|
+
* @param key - The key.
|
|
246
|
+
* @returns Array of values, or `null`.
|
|
247
|
+
*/
|
|
248
|
+
get(key) {
|
|
249
|
+
return this.data.get(key) || null;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Get all keys in the dictionary.
|
|
253
|
+
*
|
|
254
|
+
* @returns Array of keys.
|
|
255
|
+
*/
|
|
256
|
+
keys() {
|
|
257
|
+
return Array.from(this.data.keys());
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Remove a specific value from the array associated with the given key.
|
|
261
|
+
*
|
|
262
|
+
* @param key - The key.
|
|
263
|
+
* @param value - The value to remove.
|
|
264
|
+
*/
|
|
265
|
+
remove(key, value) {
|
|
266
|
+
const values = this.get(key);
|
|
267
|
+
if (!values) {
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
values.remove(value);
|
|
271
|
+
if (values.length === 0) {
|
|
272
|
+
this.clear(key);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
};
|
|
276
|
+
|
|
277
|
+
// src/obsidian/implementations/constants/FileExtension.ts
|
|
278
|
+
var FileExtension = {
|
|
279
|
+
_3gp: "3gp",
|
|
280
|
+
avif: "avif",
|
|
281
|
+
bmp: "bmp",
|
|
282
|
+
canvas: "canvas",
|
|
283
|
+
flac: "flac",
|
|
284
|
+
gif: "gif",
|
|
285
|
+
jpeg: "jpeg",
|
|
286
|
+
jpg: "jpg",
|
|
287
|
+
m4a: "m4a",
|
|
288
|
+
md: "md",
|
|
289
|
+
mkv: "mkv",
|
|
290
|
+
mov: "mov",
|
|
291
|
+
mp3: "mp3",
|
|
292
|
+
mp4: "mp4",
|
|
293
|
+
oga: "oga",
|
|
294
|
+
ogg: "ogg",
|
|
295
|
+
ogv: "ogv",
|
|
296
|
+
opus: "opus",
|
|
297
|
+
pdf: "pdf",
|
|
298
|
+
png: "png",
|
|
299
|
+
svg: "svg",
|
|
300
|
+
wav: "wav",
|
|
301
|
+
webm: "webm",
|
|
302
|
+
webp: "webp"
|
|
303
|
+
};
|
|
304
|
+
|
|
305
|
+
// src/obsidian/implementations/constants/InternalPluginName.ts
|
|
306
|
+
var InternalPluginName = {
|
|
307
|
+
/**
|
|
308
|
+
* Plugin name in UI: Audio recorder.
|
|
309
|
+
*/
|
|
310
|
+
AudioRecorder: "audio-recorder",
|
|
311
|
+
/**
|
|
312
|
+
* Plugin name in UI: Backlinks.
|
|
313
|
+
*/
|
|
314
|
+
Backlink: "backlink",
|
|
315
|
+
/**
|
|
316
|
+
* Plugin name in UI: Bases.
|
|
317
|
+
*/
|
|
318
|
+
Bases: "bases",
|
|
319
|
+
/**
|
|
320
|
+
* Plugin name in UI: Bookmarks.
|
|
321
|
+
*/
|
|
322
|
+
Bookmarks: "bookmarks",
|
|
323
|
+
/**
|
|
324
|
+
* Plugin name in UI: Canvas.
|
|
325
|
+
*/
|
|
326
|
+
Canvas: "canvas",
|
|
327
|
+
/**
|
|
328
|
+
* Plugin name in UI: Command palette.
|
|
329
|
+
*/
|
|
330
|
+
CommandPalette: "command-palette",
|
|
331
|
+
/**
|
|
332
|
+
* Plugin name in UI: Daily notes.
|
|
333
|
+
*/
|
|
334
|
+
DailyNotes: "daily-notes",
|
|
335
|
+
/**
|
|
336
|
+
* Plugin name in UI: (hidden).
|
|
337
|
+
*/
|
|
338
|
+
EditorStatus: "editor-status",
|
|
339
|
+
/**
|
|
340
|
+
* Plugin name in UI: Files.
|
|
341
|
+
*/
|
|
342
|
+
FileExplorer: "file-explorer",
|
|
343
|
+
/**
|
|
344
|
+
* Plugin name in UI: File recovery.
|
|
345
|
+
*/
|
|
346
|
+
FileRecovery: "file-recovery",
|
|
347
|
+
/**
|
|
348
|
+
* Plugin name in UI: Footnotes.
|
|
349
|
+
*/
|
|
350
|
+
Footnotes: "footnotes",
|
|
351
|
+
/**
|
|
352
|
+
* Plugin name in UI: Search.
|
|
353
|
+
*/
|
|
354
|
+
GlobalSearch: "global-search",
|
|
355
|
+
/**
|
|
356
|
+
* Plugin name in UI: Graph view.
|
|
357
|
+
*/
|
|
358
|
+
Graph: "graph",
|
|
359
|
+
/**
|
|
360
|
+
* Plugin name in UI: Format converter.
|
|
361
|
+
*/
|
|
362
|
+
MarkdownImporter: "markdown-importer",
|
|
363
|
+
/**
|
|
364
|
+
* Plugin name in UI: Note composer.
|
|
365
|
+
*/
|
|
366
|
+
NoteComposer: "note-composer",
|
|
367
|
+
/**
|
|
368
|
+
* Plugin name in UI: Outgoing links.
|
|
369
|
+
*/
|
|
370
|
+
OutgoingLink: "outgoing-link",
|
|
371
|
+
/**
|
|
372
|
+
* Plugin name in UI: Outline.
|
|
373
|
+
*/
|
|
374
|
+
Outline: "outline",
|
|
375
|
+
/**
|
|
376
|
+
* Plugin name in UI: Page preview.
|
|
377
|
+
*/
|
|
378
|
+
PagePreview: "page-preview",
|
|
379
|
+
/**
|
|
380
|
+
* Plugin name in UI: Properties view.
|
|
381
|
+
*/
|
|
382
|
+
Properties: "properties",
|
|
383
|
+
/**
|
|
384
|
+
* Plugin name in UI: Publish.
|
|
385
|
+
*/
|
|
386
|
+
Publish: "publish",
|
|
387
|
+
/**
|
|
388
|
+
* Plugin name in UI: Random note.
|
|
389
|
+
*/
|
|
390
|
+
RandomNote: "random-note",
|
|
391
|
+
/**
|
|
392
|
+
* Plugin name in UI: Slash commands.
|
|
393
|
+
*/
|
|
394
|
+
SlashCommand: "slash-command",
|
|
395
|
+
/**
|
|
396
|
+
* Plugin name in UI: Slides.
|
|
397
|
+
*/
|
|
398
|
+
Slides: "slides",
|
|
399
|
+
/**
|
|
400
|
+
* Plugin name in UI: Quick Switcher.
|
|
401
|
+
*/
|
|
402
|
+
Switcher: "switcher",
|
|
403
|
+
/**
|
|
404
|
+
* Plugin name in UI: Sync.
|
|
405
|
+
*/
|
|
406
|
+
Sync: "sync",
|
|
407
|
+
/**
|
|
408
|
+
* Plugin name in UI: Tags view.
|
|
409
|
+
*/
|
|
410
|
+
TagPane: "tag-pane",
|
|
411
|
+
/**
|
|
412
|
+
* Plugin name in UI: Templates.
|
|
413
|
+
*/
|
|
414
|
+
Templates: "templates",
|
|
415
|
+
/**
|
|
416
|
+
* Plugin name in UI: Web viewer.
|
|
417
|
+
*/
|
|
418
|
+
Webviewer: "webviewer",
|
|
419
|
+
/**
|
|
420
|
+
* Plugin name in UI: Word count.
|
|
421
|
+
*/
|
|
422
|
+
WordCount: "word-count",
|
|
423
|
+
/**
|
|
424
|
+
* Plugin name in UI: Workspaces.
|
|
425
|
+
*/
|
|
426
|
+
Workspaces: "workspaces",
|
|
427
|
+
/**
|
|
428
|
+
* Plugin name in UI: Unique note creator.
|
|
429
|
+
*/
|
|
430
|
+
ZkPrefixer: "zk-prefixer"
|
|
431
|
+
};
|
|
432
|
+
|
|
433
|
+
// src/obsidian/implementations/constants/ViewType.ts
|
|
434
|
+
var ViewType = {
|
|
435
|
+
AllProperties: "all-properties",
|
|
436
|
+
Audio: "audio",
|
|
437
|
+
Backlink: InternalPluginName.Backlink,
|
|
438
|
+
Bases: InternalPluginName.Bases,
|
|
439
|
+
Bookmarks: InternalPluginName.Bookmarks,
|
|
440
|
+
Canvas: InternalPluginName.Canvas,
|
|
441
|
+
Empty: "empty",
|
|
442
|
+
FileExplorer: InternalPluginName.FileExplorer,
|
|
443
|
+
FileProperties: "file-properties",
|
|
444
|
+
Graph: InternalPluginName.Graph,
|
|
445
|
+
Image: "image",
|
|
446
|
+
LocalGraph: "localgraph",
|
|
447
|
+
Markdown: "markdown",
|
|
448
|
+
OutgoingLink: InternalPluginName.OutgoingLink,
|
|
449
|
+
Outline: InternalPluginName.Outline,
|
|
450
|
+
Pdf: "pdf",
|
|
451
|
+
ReleaseNotes: "release-notes",
|
|
452
|
+
Search: "search",
|
|
453
|
+
Sync: "sync",
|
|
454
|
+
Tag: "tag",
|
|
455
|
+
Video: "video",
|
|
456
|
+
Webviewer: "webviewer",
|
|
457
|
+
WebviewerHistory: "webviewer-history"
|
|
458
|
+
};
|
|
459
|
+
|
|
460
|
+
// src/obsidian/implementations/constructors/augmentations/bases/getBasesEntryConstructor.ts
|
|
461
|
+
var import_obsidian = require("obsidian");
|
|
462
|
+
function getBasesEntryConstructor() {
|
|
463
|
+
return import_obsidian.BasesEntry;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
// src/obsidian/implementations/constructors/augmentations/bases/getBasesEntryGroupConstructor.ts
|
|
467
|
+
var import_obsidian2 = require("obsidian");
|
|
468
|
+
function getBasesEntryGroupConstructor() {
|
|
469
|
+
return import_obsidian2.BasesEntryGroup;
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
// src/obsidian/implementations/constructors/augmentations/bases/getBasesQueryResultConstructor.ts
|
|
473
|
+
var import_obsidian3 = require("obsidian");
|
|
474
|
+
function getBasesQueryResultConstructor() {
|
|
475
|
+
return import_obsidian3.BasesQueryResult;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
// src/obsidian/implementations/constructors/augmentations/bases/getBasesViewConfigConstructor.ts
|
|
479
|
+
var import_obsidian4 = require("obsidian");
|
|
480
|
+
function getBasesViewConfigConstructor() {
|
|
481
|
+
return import_obsidian4.BasesViewConfig;
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
// src/obsidian/implementations/constructors/augmentations/bases/getQueryControllerConstructor.ts
|
|
485
|
+
var import_obsidian5 = require("obsidian");
|
|
486
|
+
function getQueryControllerConstructor() {
|
|
487
|
+
return import_obsidian5.QueryController;
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
// src/obsidian/implementations/constructors/augmentations/getAppConstructor.ts
|
|
491
|
+
var import_obsidian6 = require("obsidian");
|
|
492
|
+
function getAppConstructor() {
|
|
493
|
+
return import_obsidian6.App;
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
// src/obsidian/implementations/constructors/augmentations/getCapacitorAdapterConstructor.ts
|
|
497
|
+
var import_obsidian7 = require("obsidian");
|
|
498
|
+
function getCapacitorAdapterConstructor() {
|
|
499
|
+
return import_obsidian7.CapacitorAdapter;
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
// src/obsidian/implementations/constructors/augmentations/getConfirmationModalConstructor.ts
|
|
503
|
+
var import_obsidian8 = require("obsidian");
|
|
504
|
+
function getConfirmationModalConstructor() {
|
|
505
|
+
return import_obsidian8.ConfirmationModal;
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
// src/obsidian/implementations/constructors/augmentations/getEditorConstructor.ts
|
|
509
|
+
var import_obsidian9 = require("obsidian");
|
|
510
|
+
function getEditorConstructor() {
|
|
511
|
+
return import_obsidian9.Editor;
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
// src/obsidian/implementations/constructors/augmentations/getEventsConstructor.ts
|
|
515
|
+
var import_obsidian10 = require("obsidian");
|
|
516
|
+
function getEventsConstructor() {
|
|
517
|
+
return import_obsidian10.Events;
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
// src/obsidian/implementations/constructors/augmentations/getFileManagerConstructor.ts
|
|
521
|
+
var import_obsidian11 = require("obsidian");
|
|
522
|
+
function getFileManagerConstructor() {
|
|
523
|
+
return import_obsidian11.FileManager;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
// src/obsidian/implementations/constructors/augmentations/getFileSystemAdapterConstructor.ts
|
|
527
|
+
var import_obsidian12 = require("obsidian");
|
|
528
|
+
function getFileSystemAdapterConstructor() {
|
|
529
|
+
return import_obsidian12.FileSystemAdapter;
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
// src/obsidian/implementations/constructors/augmentations/getFuzzySuggestModalConstructor.ts
|
|
533
|
+
var import_obsidian13 = require("obsidian");
|
|
534
|
+
function getFuzzySuggestModalConstructor() {
|
|
535
|
+
return import_obsidian13.FuzzySuggestModal;
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
// src/obsidian/implementations/constructors/augmentations/getHoverPopoverConstructor.ts
|
|
539
|
+
var import_obsidian14 = require("obsidian");
|
|
540
|
+
function getHoverPopoverConstructor() {
|
|
541
|
+
return import_obsidian14.HoverPopover;
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
// src/obsidian/implementations/constructors/augmentations/getKeymapConstructor.ts
|
|
545
|
+
var import_obsidian15 = require("obsidian");
|
|
546
|
+
function getKeymapConstructor() {
|
|
547
|
+
return import_obsidian15.Keymap;
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
// src/obsidian/implementations/constructors/augmentations/getMarkdownPreviewRendererConstructor.ts
|
|
551
|
+
var import_obsidian16 = require("obsidian");
|
|
552
|
+
function getMarkdownPreviewRendererConstructor() {
|
|
553
|
+
return import_obsidian16.MarkdownPreviewRenderer;
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
// src/obsidian/implementations/constructors/augmentations/getMarkdownPreviewViewConstructor.ts
|
|
557
|
+
var import_obsidian17 = require("obsidian");
|
|
558
|
+
function getMarkdownPreviewViewConstructor() {
|
|
559
|
+
return import_obsidian17.MarkdownPreviewView;
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
// src/obsidian/implementations/constructors/augmentations/getMarkdownRenderChildConstructor.ts
|
|
563
|
+
var import_obsidian18 = require("obsidian");
|
|
564
|
+
function getMarkdownRenderChildConstructor() {
|
|
565
|
+
return import_obsidian18.MarkdownRenderChild;
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
// src/obsidian/implementations/constructors/augmentations/getMarkdownRendererConstructor.ts
|
|
569
|
+
var import_obsidian19 = require("obsidian");
|
|
570
|
+
function getMarkdownRendererConstructor() {
|
|
571
|
+
return import_obsidian19.MarkdownRenderer;
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
// src/obsidian/implementations/constructors/augmentations/getMenuConstructor.ts
|
|
575
|
+
var import_obsidian20 = require("obsidian");
|
|
576
|
+
function getMenuConstructor() {
|
|
577
|
+
return import_obsidian20.Menu;
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
// src/obsidian/implementations/constructors/augmentations/getMenuItemConstructor.ts
|
|
581
|
+
var import_obsidian21 = require("obsidian");
|
|
582
|
+
function getMenuItemConstructor() {
|
|
583
|
+
return import_obsidian21.MenuItem;
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
// src/obsidian/implementations/constructors/augmentations/getMenuSeparatorConstructor.ts
|
|
587
|
+
var import_obsidian22 = require("obsidian");
|
|
588
|
+
function getMenuSeparatorConstructor() {
|
|
589
|
+
return import_obsidian22.MenuSeparator;
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
// src/obsidian/implementations/constructors/augmentations/getMetadataCacheConstructor.ts
|
|
593
|
+
var import_obsidian23 = require("obsidian");
|
|
594
|
+
function getMetadataCacheConstructor() {
|
|
595
|
+
return import_obsidian23.MetadataCache;
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
// src/obsidian/implementations/constructors/augmentations/getModalConstructor.ts
|
|
599
|
+
var import_obsidian24 = require("obsidian");
|
|
600
|
+
function getModalConstructor() {
|
|
601
|
+
return import_obsidian24.Modal;
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
// src/obsidian/implementations/constructors/augmentations/getNoticeConstructor.ts
|
|
605
|
+
var import_obsidian25 = require("obsidian");
|
|
606
|
+
function getNoticeConstructor() {
|
|
607
|
+
return import_obsidian25.Notice;
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
// src/obsidian/implementations/constructors/augmentations/getRenderContextConstructor.ts
|
|
611
|
+
var import_obsidian26 = require("obsidian");
|
|
612
|
+
function getRenderContextConstructor() {
|
|
613
|
+
return import_obsidian26.RenderContext;
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
// src/obsidian/implementations/constructors/augmentations/getScopeConstructor.ts
|
|
617
|
+
var import_obsidian27 = require("obsidian");
|
|
618
|
+
function getScopeConstructor() {
|
|
619
|
+
return import_obsidian27.Scope;
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
// src/obsidian/implementations/constructors/augmentations/getSecretStorageConstructor.ts
|
|
623
|
+
var import_obsidian28 = require("obsidian");
|
|
624
|
+
function getSecretStorageConstructor() {
|
|
625
|
+
return import_obsidian28.SecretStorage;
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
// src/obsidian/implementations/constructors/augmentations/getSettingConstructor.ts
|
|
629
|
+
var import_obsidian29 = require("obsidian");
|
|
630
|
+
function getSettingConstructor() {
|
|
631
|
+
return import_obsidian29.Setting;
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
// src/obsidian/implementations/constructors/augmentations/getSettingGroupConstructor.ts
|
|
635
|
+
var import_obsidian30 = require("obsidian");
|
|
636
|
+
function getSettingGroupConstructor() {
|
|
637
|
+
return import_obsidian30.SettingGroup;
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
// src/obsidian/implementations/constructors/augmentations/getSettingPageConstructor.ts
|
|
641
|
+
var import_obsidian31 = require("obsidian");
|
|
642
|
+
function getSettingPageConstructor() {
|
|
643
|
+
return import_obsidian31.SettingPage;
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
// src/obsidian/implementations/constructors/augmentations/getSettingTabConstructor.ts
|
|
647
|
+
var import_obsidian32 = require("obsidian");
|
|
648
|
+
function getSettingTabConstructor() {
|
|
649
|
+
return import_obsidian32.SettingTab;
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
// src/obsidian/implementations/constructors/augmentations/getTAbstractFileConstructor.ts
|
|
653
|
+
var import_obsidian33 = require("obsidian");
|
|
654
|
+
function getTAbstractFileConstructor() {
|
|
655
|
+
return import_obsidian33.TAbstractFile;
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
// src/obsidian/implementations/constructors/augmentations/getTasksConstructor.ts
|
|
659
|
+
var import_obsidian34 = require("obsidian");
|
|
660
|
+
function getTasksConstructor() {
|
|
661
|
+
return import_obsidian34.Tasks;
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
// src/obsidian/implementations/constructors/augmentations/getTFileConstructor.ts
|
|
665
|
+
var import_obsidian35 = require("obsidian");
|
|
666
|
+
function getTFileConstructor() {
|
|
667
|
+
return import_obsidian35.TFile;
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
// src/obsidian/implementations/constructors/augmentations/getTFolderConstructor.ts
|
|
671
|
+
var import_obsidian36 = require("obsidian");
|
|
672
|
+
function getTFolderConstructor() {
|
|
673
|
+
return import_obsidian36.TFolder;
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
// src/obsidian/implementations/constructors/augmentations/getVaultConstructor.ts
|
|
677
|
+
var import_obsidian37 = require("obsidian");
|
|
678
|
+
function getVaultConstructor() {
|
|
679
|
+
return import_obsidian37.Vault;
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
// src/obsidian/implementations/constructors/augmentations/getWorkspaceConstructor.ts
|
|
683
|
+
var import_obsidian38 = require("obsidian");
|
|
684
|
+
function getWorkspaceConstructor() {
|
|
685
|
+
return import_obsidian38.Workspace;
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
// src/obsidian/implementations/constructors/augmentations/getWorkspaceContainerConstructor.ts
|
|
689
|
+
var import_obsidian39 = require("obsidian");
|
|
690
|
+
function getWorkspaceContainerConstructor() {
|
|
691
|
+
return import_obsidian39.WorkspaceContainer;
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
// src/obsidian/implementations/constructors/augmentations/getWorkspaceFloatingConstructor.ts
|
|
695
|
+
var import_obsidian40 = require("obsidian");
|
|
696
|
+
function getWorkspaceFloatingConstructor() {
|
|
697
|
+
return import_obsidian40.WorkspaceFloating;
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
// src/obsidian/implementations/constructors/augmentations/getWorkspaceItemConstructor.ts
|
|
701
|
+
var import_obsidian41 = require("obsidian");
|
|
702
|
+
function getWorkspaceItemConstructor() {
|
|
703
|
+
return import_obsidian41.WorkspaceItem;
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
// src/obsidian/implementations/constructors/augmentations/getWorkspaceLeafConstructor.ts
|
|
707
|
+
var import_obsidian42 = require("obsidian");
|
|
708
|
+
function getWorkspaceLeafConstructor() {
|
|
709
|
+
return import_obsidian42.WorkspaceLeaf;
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
// src/obsidian/implementations/constructors/augmentations/getWorkspaceMobileDrawerConstructor.ts
|
|
713
|
+
var import_obsidian43 = require("obsidian");
|
|
714
|
+
function getWorkspaceMobileDrawerConstructor() {
|
|
715
|
+
return import_obsidian43.WorkspaceMobileDrawer;
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
// src/obsidian/implementations/constructors/augmentations/getWorkspaceParentConstructor.ts
|
|
719
|
+
var import_obsidian44 = require("obsidian");
|
|
720
|
+
function getWorkspaceParentConstructor() {
|
|
721
|
+
return import_obsidian44.WorkspaceParent;
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
// src/obsidian/implementations/constructors/augmentations/getWorkspaceRibbonConstructor.ts
|
|
725
|
+
var import_obsidian45 = require("obsidian");
|
|
726
|
+
function getWorkspaceRibbonConstructor() {
|
|
727
|
+
return import_obsidian45.WorkspaceRibbon;
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
// src/obsidian/implementations/constructors/augmentations/getWorkspaceRootConstructor.ts
|
|
731
|
+
var import_obsidian46 = require("obsidian");
|
|
732
|
+
function getWorkspaceRootConstructor() {
|
|
733
|
+
return import_obsidian46.WorkspaceRoot;
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
// src/obsidian/implementations/constructors/augmentations/getWorkspaceSidedockConstructor.ts
|
|
737
|
+
var import_obsidian47 = require("obsidian");
|
|
738
|
+
function getWorkspaceSidedockConstructor() {
|
|
739
|
+
return import_obsidian47.WorkspaceSidedock;
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
// src/obsidian/implementations/constructors/augmentations/getWorkspaceSplitConstructor.ts
|
|
743
|
+
var import_obsidian48 = require("obsidian");
|
|
744
|
+
function getWorkspaceSplitConstructor() {
|
|
745
|
+
return import_obsidian48.WorkspaceSplit;
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
// src/obsidian/implementations/constructors/augmentations/getWorkspaceTabsConstructor.ts
|
|
749
|
+
var import_obsidian49 = require("obsidian");
|
|
750
|
+
function getWorkspaceTabsConstructor() {
|
|
751
|
+
return import_obsidian49.WorkspaceTabs;
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
// src/obsidian/implementations/constructors/augmentations/getWorkspaceWindowConstructor.ts
|
|
755
|
+
var import_obsidian50 = require("obsidian");
|
|
756
|
+
function getWorkspaceWindowConstructor() {
|
|
757
|
+
return import_obsidian50.WorkspaceWindow;
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
// src/obsidian/implementations/constructors/augmentations/settings/setting-components/getAbstractTextComponentConstructor.ts
|
|
761
|
+
var import_obsidian51 = require("obsidian");
|
|
762
|
+
function getAbstractTextComponentConstructor() {
|
|
763
|
+
return import_obsidian51.AbstractTextComponent;
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
// src/obsidian/implementations/constructors/augmentations/settings/setting-components/getBaseComponentConstructor.ts
|
|
767
|
+
var import_obsidian52 = require("obsidian");
|
|
768
|
+
function getBaseComponentConstructor() {
|
|
769
|
+
return import_obsidian52.BaseComponent;
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
// src/obsidian/implementations/constructors/augmentations/settings/setting-components/getButtonComponentConstructor.ts
|
|
773
|
+
var import_obsidian53 = require("obsidian");
|
|
774
|
+
function getButtonComponentConstructor() {
|
|
775
|
+
return import_obsidian53.ButtonComponent;
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
// src/obsidian/implementations/constructors/augmentations/settings/setting-components/getColorComponentConstructor.ts
|
|
779
|
+
var import_obsidian54 = require("obsidian");
|
|
780
|
+
function getColorComponentConstructor() {
|
|
781
|
+
return import_obsidian54.ColorComponent;
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
// src/obsidian/implementations/constructors/augmentations/settings/setting-components/getComponentConstructor.ts
|
|
785
|
+
var import_obsidian55 = require("obsidian");
|
|
786
|
+
function getComponentConstructor() {
|
|
787
|
+
return import_obsidian55.Component;
|
|
788
|
+
}
|
|
789
|
+
|
|
790
|
+
// src/obsidian/implementations/constructors/augmentations/settings/setting-components/getConfirmationButtonConstructor.ts
|
|
791
|
+
var import_obsidian56 = require("obsidian");
|
|
792
|
+
function getConfirmationButtonConstructor() {
|
|
793
|
+
return import_obsidian56.ConfirmationButton;
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
// src/obsidian/implementations/constructors/augmentations/settings/setting-components/getDisplayValueComponentConstructor.ts
|
|
797
|
+
var import_obsidian57 = require("obsidian");
|
|
798
|
+
function getDisplayValueComponentConstructor() {
|
|
799
|
+
return import_obsidian57.DisplayValueComponent;
|
|
800
|
+
}
|
|
801
|
+
|
|
802
|
+
// src/obsidian/implementations/constructors/augmentations/settings/setting-components/getDropdownComponentConstructor.ts
|
|
803
|
+
var import_obsidian58 = require("obsidian");
|
|
804
|
+
function getDropdownComponentConstructor() {
|
|
805
|
+
return import_obsidian58.DropdownComponent;
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
// src/obsidian/implementations/constructors/augmentations/settings/setting-components/getExtraButtonComponentConstructor.ts
|
|
809
|
+
var import_obsidian59 = require("obsidian");
|
|
810
|
+
function getExtraButtonComponentConstructor() {
|
|
811
|
+
return import_obsidian59.ExtraButtonComponent;
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
// src/obsidian/implementations/constructors/augmentations/settings/setting-components/getMomentFormatComponentConstructor.ts
|
|
815
|
+
var import_obsidian60 = require("obsidian");
|
|
816
|
+
function getMomentFormatComponentConstructor() {
|
|
817
|
+
return import_obsidian60.MomentFormatComponent;
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
// src/obsidian/implementations/constructors/augmentations/settings/setting-components/getProgressBarComponentConstructor.ts
|
|
821
|
+
var import_obsidian61 = require("obsidian");
|
|
822
|
+
function getProgressBarComponentConstructor() {
|
|
823
|
+
return import_obsidian61.ProgressBarComponent;
|
|
824
|
+
}
|
|
825
|
+
|
|
826
|
+
// src/obsidian/implementations/constructors/augmentations/settings/setting-components/getSearchComponentConstructor.ts
|
|
827
|
+
var import_obsidian62 = require("obsidian");
|
|
828
|
+
function getSearchComponentConstructor() {
|
|
829
|
+
return import_obsidian62.SearchComponent;
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
// src/obsidian/implementations/constructors/augmentations/settings/setting-components/getSecretComponentConstructor.ts
|
|
833
|
+
var import_obsidian63 = require("obsidian");
|
|
834
|
+
function getSecretComponentConstructor() {
|
|
835
|
+
return import_obsidian63.SecretComponent;
|
|
836
|
+
}
|
|
837
|
+
|
|
838
|
+
// src/obsidian/implementations/constructors/augmentations/settings/setting-components/getSliderComponentConstructor.ts
|
|
839
|
+
var import_obsidian64 = require("obsidian");
|
|
840
|
+
function getSliderComponentConstructor() {
|
|
841
|
+
return import_obsidian64.SliderComponent;
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
// src/obsidian/implementations/constructors/augmentations/settings/setting-components/getTextAreaComponentConstructor.ts
|
|
845
|
+
var import_obsidian65 = require("obsidian");
|
|
846
|
+
function getTextAreaComponentConstructor() {
|
|
847
|
+
return import_obsidian65.TextAreaComponent;
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
// src/obsidian/implementations/constructors/augmentations/settings/setting-components/getTextComponentConstructor.ts
|
|
851
|
+
var import_obsidian66 = require("obsidian");
|
|
852
|
+
function getTextComponentConstructor() {
|
|
853
|
+
return import_obsidian66.TextComponent;
|
|
854
|
+
}
|
|
855
|
+
|
|
856
|
+
// src/obsidian/implementations/constructors/augmentations/settings/setting-components/getToggleComponentConstructor.ts
|
|
857
|
+
var import_obsidian67 = require("obsidian");
|
|
858
|
+
function getToggleComponentConstructor() {
|
|
859
|
+
return import_obsidian67.ToggleComponent;
|
|
860
|
+
}
|
|
861
|
+
|
|
862
|
+
// src/obsidian/implementations/constructors/augmentations/settings/setting-components/getValueComponentConstructor.ts
|
|
863
|
+
var import_obsidian68 = require("obsidian");
|
|
864
|
+
function getValueComponentConstructor() {
|
|
865
|
+
return import_obsidian68.ValueComponent;
|
|
866
|
+
}
|
|
867
|
+
|
|
868
|
+
// src/obsidian/implementations/constructors/augmentations/values/getBooleanValueConstructor.ts
|
|
869
|
+
var import_obsidian69 = require("obsidian");
|
|
870
|
+
function getBooleanValueConstructor() {
|
|
871
|
+
return import_obsidian69.BooleanValue;
|
|
872
|
+
}
|
|
873
|
+
|
|
874
|
+
// src/obsidian/implementations/constructors/augmentations/values/getDateValueConstructor.ts
|
|
875
|
+
var import_obsidian70 = require("obsidian");
|
|
876
|
+
function getDateValueConstructor() {
|
|
877
|
+
return import_obsidian70.DateValue;
|
|
878
|
+
}
|
|
879
|
+
|
|
880
|
+
// src/obsidian/implementations/constructors/augmentations/values/getDurationValueConstructor.ts
|
|
881
|
+
var import_obsidian71 = require("obsidian");
|
|
882
|
+
function getDurationValueConstructor() {
|
|
883
|
+
return import_obsidian71.DurationValue;
|
|
884
|
+
}
|
|
885
|
+
|
|
886
|
+
// src/obsidian/implementations/constructors/augmentations/values/getFileValueConstructor.ts
|
|
887
|
+
var import_obsidian72 = require("obsidian");
|
|
888
|
+
function getFileValueConstructor() {
|
|
889
|
+
return import_obsidian72.FileValue;
|
|
890
|
+
}
|
|
891
|
+
|
|
892
|
+
// src/obsidian/implementations/constructors/augmentations/values/getHTMLValueConstructor.ts
|
|
893
|
+
var import_obsidian73 = require("obsidian");
|
|
894
|
+
function getHTMLValueConstructor() {
|
|
895
|
+
return import_obsidian73.HTMLValue;
|
|
896
|
+
}
|
|
897
|
+
|
|
898
|
+
// src/obsidian/implementations/constructors/augmentations/values/getIconValueConstructor.ts
|
|
899
|
+
var import_obsidian74 = require("obsidian");
|
|
900
|
+
function getIconValueConstructor() {
|
|
901
|
+
return import_obsidian74.IconValue;
|
|
902
|
+
}
|
|
903
|
+
|
|
904
|
+
// src/obsidian/implementations/constructors/augmentations/values/getImageValueConstructor.ts
|
|
905
|
+
var import_obsidian75 = require("obsidian");
|
|
906
|
+
function getImageValueConstructor() {
|
|
907
|
+
return import_obsidian75.ImageValue;
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
// src/obsidian/implementations/constructors/augmentations/values/getLinkValueConstructor.ts
|
|
911
|
+
var import_obsidian76 = require("obsidian");
|
|
912
|
+
function getLinkValueConstructor() {
|
|
913
|
+
return import_obsidian76.LinkValue;
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
// src/obsidian/implementations/constructors/augmentations/values/getListValueConstructor.ts
|
|
917
|
+
var import_obsidian77 = require("obsidian");
|
|
918
|
+
function getListValueConstructor() {
|
|
919
|
+
return import_obsidian77.ListValue;
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
// src/obsidian/implementations/constructors/augmentations/values/getNotNullValueConstructor.ts
|
|
923
|
+
var import_obsidian78 = require("obsidian");
|
|
924
|
+
function getNotNullValueConstructor() {
|
|
925
|
+
return import_obsidian78.NotNullValue;
|
|
926
|
+
}
|
|
927
|
+
|
|
928
|
+
// src/obsidian/implementations/constructors/augmentations/values/getNullValueConstructor.ts
|
|
929
|
+
var import_obsidian79 = require("obsidian");
|
|
930
|
+
function getNullValueConstructor() {
|
|
931
|
+
return import_obsidian79.NullValue;
|
|
932
|
+
}
|
|
933
|
+
|
|
934
|
+
// src/obsidian/implementations/constructors/augmentations/values/getNumberValueConstructor.ts
|
|
935
|
+
var import_obsidian80 = require("obsidian");
|
|
936
|
+
function getNumberValueConstructor() {
|
|
937
|
+
return import_obsidian80.NumberValue;
|
|
938
|
+
}
|
|
939
|
+
|
|
940
|
+
// src/obsidian/implementations/constructors/augmentations/values/getObjectValueConstructor.ts
|
|
941
|
+
var import_obsidian81 = require("obsidian");
|
|
942
|
+
function getObjectValueConstructor() {
|
|
943
|
+
return import_obsidian81.ObjectValue;
|
|
944
|
+
}
|
|
945
|
+
|
|
946
|
+
// src/obsidian/implementations/constructors/augmentations/values/getRegExpValueConstructor.ts
|
|
947
|
+
var import_obsidian82 = require("obsidian");
|
|
948
|
+
function getRegExpValueConstructor() {
|
|
949
|
+
return import_obsidian82.RegExpValue;
|
|
950
|
+
}
|
|
951
|
+
|
|
952
|
+
// src/obsidian/implementations/constructors/augmentations/values/getRelativeDateValueConstructor.ts
|
|
953
|
+
var import_obsidian83 = require("obsidian");
|
|
954
|
+
function getRelativeDateValueConstructor() {
|
|
955
|
+
return import_obsidian83.RelativeDateValue;
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
// src/obsidian/implementations/constructors/augmentations/values/getStringValueConstructor.ts
|
|
959
|
+
var import_obsidian84 = require("obsidian");
|
|
960
|
+
function getStringValueConstructor() {
|
|
961
|
+
return import_obsidian84.StringValue;
|
|
962
|
+
}
|
|
963
|
+
|
|
964
|
+
// src/obsidian/implementations/constructors/augmentations/values/getTagValueConstructor.ts
|
|
965
|
+
var import_obsidian85 = require("obsidian");
|
|
966
|
+
function getTagValueConstructor() {
|
|
967
|
+
return import_obsidian85.TagValue;
|
|
968
|
+
}
|
|
969
|
+
|
|
970
|
+
// src/obsidian/implementations/constructors/augmentations/values/getUrlValueConstructor.ts
|
|
971
|
+
var import_obsidian86 = require("obsidian");
|
|
972
|
+
function getUrlValueConstructor() {
|
|
973
|
+
return import_obsidian86.UrlValue;
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
// src/obsidian/implementations/constructors/augmentations/values/getValueConstructor.ts
|
|
977
|
+
var import_obsidian87 = require("obsidian");
|
|
978
|
+
function getValueConstructor() {
|
|
979
|
+
return import_obsidian87.Value;
|
|
980
|
+
}
|
|
981
|
+
|
|
982
|
+
// src/obsidian/implementations/constructors/augmentations/views/getEditableFileViewConstructor.ts
|
|
983
|
+
var import_obsidian88 = require("obsidian");
|
|
984
|
+
function getEditableFileViewConstructor() {
|
|
985
|
+
return import_obsidian88.EditableFileView;
|
|
986
|
+
}
|
|
987
|
+
|
|
988
|
+
// src/obsidian/implementations/constructors/augmentations/views/getMarkdownViewConstructor.ts
|
|
989
|
+
var import_obsidian89 = require("obsidian");
|
|
990
|
+
function getMarkdownViewConstructor() {
|
|
991
|
+
return import_obsidian89.MarkdownView;
|
|
992
|
+
}
|
|
993
|
+
|
|
994
|
+
// src/obsidian/implementations/constructors/internals/getAppMenuBarManagerConstructor.ts
|
|
995
|
+
function getAppMenuBarManagerConstructor(app) {
|
|
996
|
+
return app.appMenuBarManager.constructor;
|
|
997
|
+
}
|
|
998
|
+
|
|
999
|
+
// src/obsidian/implementations/constructors/internals/getAppSettingConstructor.ts
|
|
1000
|
+
function getAppSettingConstructor(app) {
|
|
1001
|
+
return app.setting.constructor;
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
// src/obsidian/implementations/constructors/internals/getCliConstructor.ts
|
|
1005
|
+
function getCliConstructor(app) {
|
|
1006
|
+
return app.cli.constructor;
|
|
1007
|
+
}
|
|
1008
|
+
|
|
1009
|
+
// src/obsidian/implementations/constructors/internals/getCommandsConstructor.ts
|
|
1010
|
+
function getCommandsConstructor(app) {
|
|
1011
|
+
return app.commands.constructor;
|
|
1012
|
+
}
|
|
1013
|
+
|
|
1014
|
+
// src/obsidian/implementations/constructors/internals/getCustomCSSConstructor.ts
|
|
1015
|
+
function getCustomCSSConstructor(app) {
|
|
1016
|
+
return app.customCss.constructor;
|
|
1017
|
+
}
|
|
1018
|
+
|
|
1019
|
+
// src/obsidian/implementations/constructors/internals/getDragManagerConstructor.ts
|
|
1020
|
+
function getDragManagerConstructor(app) {
|
|
1021
|
+
return app.dragManager.constructor;
|
|
1022
|
+
}
|
|
1023
|
+
|
|
1024
|
+
// src/obsidian/implementations/constructors/internals/getEditorSuggestsConstructor.ts
|
|
1025
|
+
function getEditorSuggestsConstructor(app) {
|
|
1026
|
+
return app.workspace.editorSuggest.constructor;
|
|
1027
|
+
}
|
|
1028
|
+
|
|
1029
|
+
// src/obsidian/implementations/constructors/internals/getEmbedRegistryConstructor.ts
|
|
1030
|
+
function getEmbedRegistryConstructor(app) {
|
|
1031
|
+
return app.embedRegistry.constructor;
|
|
1032
|
+
}
|
|
1033
|
+
|
|
1034
|
+
// src/obsidian/implementations/constructors/internals/getFoldManagerConstructor.ts
|
|
1035
|
+
function getFoldManagerConstructor(app) {
|
|
1036
|
+
return app.foldManager.constructor;
|
|
1037
|
+
}
|
|
1038
|
+
|
|
1039
|
+
// src/obsidian/implementations/constructors/internals/getFrameDomConstructor.ts
|
|
1040
|
+
function getFrameDomConstructor() {
|
|
1041
|
+
return window.frameDom.constructor;
|
|
1042
|
+
}
|
|
1043
|
+
|
|
1044
|
+
// src/obsidian/implementations/constructors/internals/getHotkeyManagerConstructor.ts
|
|
1045
|
+
function getHotkeyManagerConstructor(app) {
|
|
1046
|
+
return app.hotkeyManager.constructor;
|
|
1047
|
+
}
|
|
1048
|
+
|
|
1049
|
+
// src/obsidian/implementations/constructors/internals/getMetadataTypeManagerConstructor.ts
|
|
1050
|
+
function getMetadataTypeManagerConstructor(app) {
|
|
1051
|
+
return app.metadataTypeManager.constructor;
|
|
1052
|
+
}
|
|
1053
|
+
|
|
1054
|
+
// src/obsidian/implementations/constructors/internals/getObsidianDOMConstructor.ts
|
|
1055
|
+
function getObsidianDOMConstructor(app) {
|
|
1056
|
+
return app.dom.constructor;
|
|
1057
|
+
}
|
|
1058
|
+
|
|
1059
|
+
// src/obsidian/implementations/constructors/internals/getPluginsConstructor.ts
|
|
1060
|
+
function getPluginsConstructor(app) {
|
|
1061
|
+
return app.plugins.constructor;
|
|
1062
|
+
}
|
|
1063
|
+
|
|
1064
|
+
// src/obsidian/implementations/constructors/internals/getRecentFileTrackerConstructor.ts
|
|
1065
|
+
function getRecentFileTrackerConstructor(app) {
|
|
1066
|
+
return app.workspace.recentFileTracker.constructor;
|
|
1067
|
+
}
|
|
1068
|
+
|
|
1069
|
+
// src/obsidian/implementations/constructors/internals/getShareReceiverConstructor.ts
|
|
1070
|
+
function getShareReceiverConstructor(app) {
|
|
1071
|
+
return app.shareReceiver.constructor;
|
|
1072
|
+
}
|
|
1073
|
+
|
|
1074
|
+
// src/obsidian/implementations/constructors/internals/getStatusBarConstructor.ts
|
|
1075
|
+
function getStatusBarConstructor(app) {
|
|
1076
|
+
return app.statusBar.constructor;
|
|
1077
|
+
}
|
|
1078
|
+
|
|
1079
|
+
// src/obsidian/implementations/constructors/internals/getViewRegistryConstructor.ts
|
|
1080
|
+
function getViewRegistryConstructor(app) {
|
|
1081
|
+
return app.viewRegistry.constructor;
|
|
1082
|
+
}
|
|
1083
|
+
|
|
1084
|
+
// src/obsidian/implementations/constructors/internals/getWorkspaceLeafHistoryConstructor.ts
|
|
1085
|
+
function getWorkspaceLeafHistoryConstructor(app) {
|
|
1086
|
+
const leaf = app.workspace.getMostRecentLeaf();
|
|
1087
|
+
if (!leaf) {
|
|
1088
|
+
throw new Error("No workspace leaf available to extract WorkspaceLeafHistory constructor");
|
|
1089
|
+
}
|
|
1090
|
+
return leaf.history.constructor;
|
|
1091
|
+
}
|
|
1092
|
+
|
|
1093
|
+
// src/obsidian/implementations/constructors/internals/internal-plugins/bases/getBasesContextConstructor.ts
|
|
1094
|
+
function getBasesContextConstructor(app) {
|
|
1095
|
+
const basesPlugin = app.internalPlugins.getPluginById(InternalPluginName.Bases);
|
|
1096
|
+
if (!basesPlugin) {
|
|
1097
|
+
throw new Error(`The ${InternalPluginName.Bases} plugin is not loaded.`);
|
|
1098
|
+
}
|
|
1099
|
+
const queryControllerConstructor = getQueryControllerConstructor();
|
|
1100
|
+
const queryController = new queryControllerConstructor(app, basesPlugin.instance, createDiv());
|
|
1101
|
+
queryController.query = {};
|
|
1102
|
+
const basesContext = queryController.buildBasesContext();
|
|
1103
|
+
return basesContext.constructor;
|
|
1104
|
+
}
|
|
1105
|
+
|
|
1106
|
+
// src/obsidian/implementations/constructors/internals/internal-plugins/bases/getBasesQueryConstructor.ts
|
|
1107
|
+
var import_obsidian91 = require("obsidian");
|
|
1108
|
+
|
|
1109
|
+
// src/obsidian/implementations/functions/getBasesControllerFromRender.ts
|
|
1110
|
+
var import_obsidian90 = require("obsidian");
|
|
1111
|
+
async function getBasesControllerFromRender(app, content, sourcePath, component) {
|
|
1112
|
+
const containerEl = createDiv();
|
|
1113
|
+
containerEl.style.position = "absolute";
|
|
1114
|
+
containerEl.style.left = "-9999px";
|
|
1115
|
+
containerEl.style.width = "600px";
|
|
1116
|
+
document.body.appendChild(containerEl);
|
|
1117
|
+
component.register(() => {
|
|
1118
|
+
containerEl.remove();
|
|
1119
|
+
});
|
|
1120
|
+
await import_obsidian90.MarkdownRenderer.render(app, `\`\`\`base
|
|
1121
|
+
${content}
|
|
1122
|
+
\`\`\`
|
|
1123
|
+
`, containerEl, sourcePath, component);
|
|
1124
|
+
const queue = [component];
|
|
1125
|
+
const seen = /* @__PURE__ */ new Set();
|
|
1126
|
+
while (queue.length > 0) {
|
|
1127
|
+
const node = queue.shift();
|
|
1128
|
+
if (!node || seen.has(node)) {
|
|
1129
|
+
continue;
|
|
1130
|
+
}
|
|
1131
|
+
seen.add(node);
|
|
1132
|
+
if (node.results instanceof Map && "query" in node) {
|
|
1133
|
+
return node;
|
|
1134
|
+
}
|
|
1135
|
+
for (const child of node._children ?? []) {
|
|
1136
|
+
queue.push(child);
|
|
1137
|
+
}
|
|
1138
|
+
}
|
|
1139
|
+
throw new Error("Could not locate the BasesController in the rendered component tree.");
|
|
1140
|
+
}
|
|
1141
|
+
|
|
1142
|
+
// src/obsidian/implementations/constructors/internals/internal-plugins/bases/getBasesQueryConstructor.ts
|
|
1143
|
+
async function getBasesQueryConstructor(app) {
|
|
1144
|
+
const component = new import_obsidian91.Component();
|
|
1145
|
+
try {
|
|
1146
|
+
const controller = await getBasesControllerFromRender(app, "views: []\n", "getBasesQueryConstructor.base", component);
|
|
1147
|
+
const query = controller.query;
|
|
1148
|
+
if (!query) {
|
|
1149
|
+
throw new Error("The rendered base did not produce a query.");
|
|
1150
|
+
}
|
|
1151
|
+
return query.constructor;
|
|
1152
|
+
} finally {
|
|
1153
|
+
component.unload();
|
|
1154
|
+
}
|
|
1155
|
+
}
|
|
1156
|
+
|
|
1157
|
+
// src/obsidian/implementations/constructors/internals/internal-plugins/getInternalPluginConstructor.ts
|
|
1158
|
+
function getInternalPluginConstructor(app) {
|
|
1159
|
+
const anyPlugin = Object.values(app.internalPlugins.plugins)[0];
|
|
1160
|
+
if (!anyPlugin) {
|
|
1161
|
+
throw new Error("No internal plugin found");
|
|
1162
|
+
}
|
|
1163
|
+
return anyPlugin.constructor;
|
|
1164
|
+
}
|
|
1165
|
+
|
|
1166
|
+
// src/obsidian/implementations/constructors/internals/internal-plugins/getInternalPluginsConstructor.ts
|
|
1167
|
+
function getInternalPluginsConstructor(app) {
|
|
1168
|
+
return app.internalPlugins.constructor;
|
|
1169
|
+
}
|
|
1170
|
+
|
|
1171
|
+
// src/obsidian/implementations/constructors/internals/views/getViewConstructorByViewType.ts
|
|
1172
|
+
function getViewConstructorByViewType(app, viewType) {
|
|
1173
|
+
const leaf = app.workspace.createLeafInTabGroup();
|
|
1174
|
+
try {
|
|
1175
|
+
const viewCreator = app.viewRegistry.getViewCreatorByType(viewType);
|
|
1176
|
+
if (!viewCreator) {
|
|
1177
|
+
throw new Error("View creator not found");
|
|
1178
|
+
}
|
|
1179
|
+
const view = viewCreator(leaf);
|
|
1180
|
+
return view.constructor;
|
|
1181
|
+
} finally {
|
|
1182
|
+
leaf.detach();
|
|
1183
|
+
}
|
|
1184
|
+
}
|
|
1185
|
+
|
|
1186
|
+
// src/obsidian/implementations/constructors/internals/views/getAllPropertiesViewConstructor.ts
|
|
1187
|
+
function getAllPropertiesViewConstructor(app) {
|
|
1188
|
+
return getViewConstructorByViewType(app, ViewType.AllProperties);
|
|
1189
|
+
}
|
|
1190
|
+
|
|
1191
|
+
// src/obsidian/implementations/constructors/internals/views/getAudioViewConstructor.ts
|
|
1192
|
+
function getAudioViewConstructor(app) {
|
|
1193
|
+
return getViewConstructorByViewType(app, ViewType.Audio);
|
|
1194
|
+
}
|
|
1195
|
+
|
|
1196
|
+
// src/obsidian/implementations/constructors/internals/views/getBacklinkViewConstructor.ts
|
|
1197
|
+
function getBacklinkViewConstructor(app) {
|
|
1198
|
+
return getViewConstructorByViewType(app, ViewType.Backlink);
|
|
1199
|
+
}
|
|
1200
|
+
|
|
1201
|
+
// src/obsidian/implementations/constructors/internals/views/getBasesViewConstructor.ts
|
|
1202
|
+
function getBasesViewConstructor(app) {
|
|
1203
|
+
return getViewConstructorByViewType(app, ViewType.Bases);
|
|
1204
|
+
}
|
|
1205
|
+
|
|
1206
|
+
// src/obsidian/implementations/constructors/internals/views/getBookmarksViewConstructor.ts
|
|
1207
|
+
function getBookmarksViewConstructor(app) {
|
|
1208
|
+
return getViewConstructorByViewType(app, ViewType.Bookmarks);
|
|
1209
|
+
}
|
|
1210
|
+
|
|
1211
|
+
// src/obsidian/implementations/constructors/internals/views/getCanvasViewConstructor.ts
|
|
1212
|
+
function getCanvasViewConstructor(app) {
|
|
1213
|
+
return getViewConstructorByViewType(app, ViewType.Canvas);
|
|
1214
|
+
}
|
|
1215
|
+
|
|
1216
|
+
// src/obsidian/implementations/constructors/internals/views/getEmptyViewConstructor.ts
|
|
1217
|
+
function getEmptyViewConstructor(app) {
|
|
1218
|
+
return getViewConstructorByViewType(app, ViewType.Empty);
|
|
1219
|
+
}
|
|
1220
|
+
|
|
1221
|
+
// src/obsidian/implementations/constructors/internals/views/getFileExplorerViewConstructor.ts
|
|
1222
|
+
function getFileExplorerViewConstructor(app) {
|
|
1223
|
+
return getViewConstructorByViewType(app, ViewType.FileExplorer);
|
|
1224
|
+
}
|
|
1225
|
+
|
|
1226
|
+
// src/obsidian/implementations/constructors/internals/views/getFilePropertiesViewConstructor.ts
|
|
1227
|
+
function getFilePropertiesViewConstructor(app) {
|
|
1228
|
+
return getViewConstructorByViewType(app, ViewType.FileProperties);
|
|
1229
|
+
}
|
|
1230
|
+
|
|
1231
|
+
// src/obsidian/implementations/constructors/internals/views/getGraphViewConstructor.ts
|
|
1232
|
+
function getGraphViewConstructor(app) {
|
|
1233
|
+
return getViewConstructorByViewType(app, ViewType.Graph);
|
|
1234
|
+
}
|
|
1235
|
+
|
|
1236
|
+
// src/obsidian/implementations/constructors/internals/views/getImageViewConstructor.ts
|
|
1237
|
+
function getImageViewConstructor(app) {
|
|
1238
|
+
return getViewConstructorByViewType(app, ViewType.Image);
|
|
1239
|
+
}
|
|
1240
|
+
|
|
1241
|
+
// src/obsidian/implementations/constructors/internals/views/getLocalGraphViewConstructor.ts
|
|
1242
|
+
function getLocalGraphViewConstructor(app) {
|
|
1243
|
+
return getViewConstructorByViewType(app, ViewType.LocalGraph);
|
|
1244
|
+
}
|
|
1245
|
+
|
|
1246
|
+
// src/obsidian/implementations/constructors/internals/views/getOutgoingLinkViewConstructor.ts
|
|
1247
|
+
function getOutgoingLinkViewConstructor(app) {
|
|
1248
|
+
return getViewConstructorByViewType(app, ViewType.OutgoingLink);
|
|
1249
|
+
}
|
|
1250
|
+
|
|
1251
|
+
// src/obsidian/implementations/constructors/internals/views/getOutlineViewConstructor.ts
|
|
1252
|
+
function getOutlineViewConstructor(app) {
|
|
1253
|
+
return getViewConstructorByViewType(app, ViewType.Outline);
|
|
1254
|
+
}
|
|
1255
|
+
|
|
1256
|
+
// src/obsidian/implementations/constructors/internals/views/getPdfViewConstructor.ts
|
|
1257
|
+
function getPdfViewConstructor(app) {
|
|
1258
|
+
return getViewConstructorByViewType(app, ViewType.Pdf);
|
|
1259
|
+
}
|
|
1260
|
+
|
|
1261
|
+
// src/obsidian/implementations/constructors/internals/views/getReleaseNotesViewConstructor.ts
|
|
1262
|
+
function getReleaseNotesViewConstructor(app) {
|
|
1263
|
+
return getViewConstructorByViewType(app, ViewType.ReleaseNotes);
|
|
1264
|
+
}
|
|
1265
|
+
|
|
1266
|
+
// src/obsidian/implementations/constructors/internals/views/getSearchViewConstructor.ts
|
|
1267
|
+
function getSearchViewConstructor(app) {
|
|
1268
|
+
return getViewConstructorByViewType(app, ViewType.Search);
|
|
1269
|
+
}
|
|
1270
|
+
|
|
1271
|
+
// src/obsidian/implementations/constructors/internals/views/getSyncViewConstructor.ts
|
|
1272
|
+
function getSyncViewConstructor(app) {
|
|
1273
|
+
return getViewConstructorByViewType(app, ViewType.Sync);
|
|
1274
|
+
}
|
|
1275
|
+
|
|
1276
|
+
// src/obsidian/implementations/constructors/internals/views/getTagViewConstructor.ts
|
|
1277
|
+
function getTagViewConstructor(app) {
|
|
1278
|
+
return getViewConstructorByViewType(app, ViewType.Tag);
|
|
1279
|
+
}
|
|
1280
|
+
|
|
1281
|
+
// src/obsidian/implementations/constructors/internals/views/getVideoViewConstructor.ts
|
|
1282
|
+
function getVideoViewConstructor(app) {
|
|
1283
|
+
return getViewConstructorByViewType(app, ViewType.Video);
|
|
1284
|
+
}
|
|
1285
|
+
|
|
1286
|
+
// src/obsidian/implementations/constructors/internals/views/getWebviewerHistoryViewConstructor.ts
|
|
1287
|
+
function getWebviewerHistoryViewConstructor(app) {
|
|
1288
|
+
return getViewConstructorByViewType(app, ViewType.WebviewerHistory);
|
|
1289
|
+
}
|
|
1290
|
+
|
|
1291
|
+
// src/obsidian/implementations/constructors/internals/views/getWebviewerViewConstructor.ts
|
|
1292
|
+
function getWebviewerViewConstructor(app) {
|
|
1293
|
+
return getViewConstructorByViewType(app, ViewType.Webviewer);
|
|
1294
|
+
}
|
|
1295
|
+
|
|
1296
|
+
// src/obsidian/implementations/constructors/internals/workspace/getWorkspaceProtocolHandlerConstructor.ts
|
|
1297
|
+
function getWorkspaceProtocolHandlerConstructor(app) {
|
|
1298
|
+
return app.workspace.protocolHandler.constructor;
|
|
1299
|
+
}
|
|
1300
|
+
|
|
1301
|
+
// src/obsidian/implementations/utils/PathUtils.ts
|
|
1302
|
+
function parentFolderPath(path) {
|
|
1303
|
+
return path.replace(/\/?[^/]*$/, "") || "/";
|
|
1304
|
+
}
|
|
1305
|
+
|
|
1306
|
+
// src/obsidian/implementations/functions/createTFolderInstance.ts
|
|
1307
|
+
function createTFolderInstance(app, path) {
|
|
1308
|
+
let folder = app.vault.getFolderByPath(path);
|
|
1309
|
+
if (folder) {
|
|
1310
|
+
return folder;
|
|
1311
|
+
}
|
|
1312
|
+
folder = new (getTFolderConstructor())(app.vault, path);
|
|
1313
|
+
folder.parent = createTFolderInstance(app, parentFolderPath(path));
|
|
1314
|
+
folder.deleted = true;
|
|
1315
|
+
return folder;
|
|
1316
|
+
}
|
|
1317
|
+
|
|
1318
|
+
// src/obsidian/implementations/functions/createTFileInstance.ts
|
|
1319
|
+
function createTFileInstance(app, path) {
|
|
1320
|
+
let file = app.vault.getFileByPath(path);
|
|
1321
|
+
if (file) {
|
|
1322
|
+
return file;
|
|
1323
|
+
}
|
|
1324
|
+
file = new (getTFileConstructor())(app.vault, path);
|
|
1325
|
+
file.parent = createTFolderInstance(app, parentFolderPath(path));
|
|
1326
|
+
file.deleted = true;
|
|
1327
|
+
return file;
|
|
1328
|
+
}
|
|
1329
|
+
|
|
1330
|
+
// src/obsidian/implementations/functions/evaluateBaseHeadless.ts
|
|
1331
|
+
var import_obsidian92 = require("obsidian");
|
|
1332
|
+
async function evaluateBaseHeadless(app, content, sourcePath) {
|
|
1333
|
+
const SCAN_POLL_INTERVAL_IN_MILLISECONDS = 50;
|
|
1334
|
+
const SCAN_TIMEOUT_IN_MILLISECONDS = 3e4;
|
|
1335
|
+
const component = new import_obsidian92.Component();
|
|
1336
|
+
try {
|
|
1337
|
+
const controller = await getBasesControllerFromRender(app, content, sourcePath, component);
|
|
1338
|
+
const startTime = performance.now();
|
|
1339
|
+
while (controller.initialScan) {
|
|
1340
|
+
if (performance.now() - startTime > SCAN_TIMEOUT_IN_MILLISECONDS) {
|
|
1341
|
+
throw new Error("Timed out waiting for the base initial scan to settle.");
|
|
1342
|
+
}
|
|
1343
|
+
await new Promise((resolve) => {
|
|
1344
|
+
window.setTimeout(resolve, SCAN_POLL_INTERVAL_IN_MILLISECONDS);
|
|
1345
|
+
});
|
|
1346
|
+
}
|
|
1347
|
+
return Array.from(controller.results.values());
|
|
1348
|
+
} finally {
|
|
1349
|
+
component.unload();
|
|
1350
|
+
}
|
|
1351
|
+
}
|
|
1352
|
+
|
|
1353
|
+
// src/obsidian/implementations/functions/getDataAdapterEx.ts
|
|
1354
|
+
function getDataAdapterEx(app) {
|
|
1355
|
+
return app.vault.adapter;
|
|
1356
|
+
}
|
|
1357
|
+
|
|
1358
|
+
// src/obsidian/implementations/functions/getPlatformEx.ts
|
|
1359
|
+
var import_obsidian93 = require("obsidian");
|
|
1360
|
+
function getPlatformEx() {
|
|
1361
|
+
return import_obsidian93.Platform;
|
|
1362
|
+
}
|
|
1363
|
+
|
|
1364
|
+
// src/obsidian/implementations/functions/loadMermaid.ts
|
|
1365
|
+
var import_obsidian94 = require("obsidian");
|
|
1366
|
+
async function loadMermaid() {
|
|
1367
|
+
return await (0, import_obsidian94.loadMermaid)();
|
|
1368
|
+
}
|
|
1369
|
+
|
|
1370
|
+
// src/obsidian/implementations/functions/loadPdfJs.ts
|
|
1371
|
+
var import_obsidian95 = require("obsidian");
|
|
1372
|
+
async function loadPdfJs() {
|
|
1373
|
+
return await (0, import_obsidian95.loadPdfJs)();
|
|
1374
|
+
}
|
|
1375
|
+
|
|
1376
|
+
// src/obsidian/implementations/functions/loadPrism.ts
|
|
1377
|
+
var import_obsidian96 = require("obsidian");
|
|
1378
|
+
async function loadPrism() {
|
|
1379
|
+
return await (0, import_obsidian96.loadPrism)();
|
|
1380
|
+
}
|
|
1381
|
+
|
|
1382
|
+
// src/obsidian/implementations/type-guards/isReferenceCache.ts
|
|
1383
|
+
function isReferenceCache(reference) {
|
|
1384
|
+
return !!reference.position;
|
|
1385
|
+
}
|
|
1386
|
+
|
|
1387
|
+
// src/obsidian/implementations/type-guards/isEmbedCache.ts
|
|
1388
|
+
function isEmbedCache(reference) {
|
|
1389
|
+
return isReferenceCache(reference) && reference.original[0] === "!";
|
|
1390
|
+
}
|
|
1391
|
+
|
|
1392
|
+
// src/obsidian/implementations/type-guards/isFrontmatterLinkCache.ts
|
|
1393
|
+
function isFrontmatterLinkCache(reference) {
|
|
1394
|
+
return !!reference.key;
|
|
1395
|
+
}
|
|
1396
|
+
|
|
1397
|
+
// src/obsidian/implementations/type-guards/isLinkCache.ts
|
|
1398
|
+
function isLinkCache(reference) {
|
|
1399
|
+
return isReferenceCache(reference) && reference.original[0] !== "!";
|
|
1400
|
+
}
|
|
1401
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9pbmRleC50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NsYXNzZXMvQ3VzdG9tQXJyYXlEaWN0SW1wbC50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0YW50cy9GaWxlRXh0ZW5zaW9uLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RhbnRzL0ludGVybmFsUGx1Z2luTmFtZS50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0YW50cy9WaWV3VHlwZS50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2Jhc2VzL2dldEJhc2VzRW50cnlDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2Jhc2VzL2dldEJhc2VzRW50cnlHcm91cENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvYmFzZXMvZ2V0QmFzZXNRdWVyeVJlc3VsdENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvYmFzZXMvZ2V0QmFzZXNWaWV3Q29uZmlnQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9iYXNlcy9nZXRRdWVyeUNvbnRyb2xsZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldEFwcENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0Q2FwYWNpdG9yQWRhcHRlckNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0Q29uZmlybWF0aW9uTW9kYWxDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldEVkaXRvckNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0RXZlbnRzQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRGaWxlTWFuYWdlckNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0RmlsZVN5c3RlbUFkYXB0ZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldEZ1enp5U3VnZ2VzdE1vZGFsQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRIb3ZlclBvcG92ZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldEtleW1hcENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0TWFya2Rvd25QcmV2aWV3UmVuZGVyZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1hcmtkb3duUHJldmlld1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1hcmtkb3duUmVuZGVyQ2hpbGRDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1hcmtkb3duUmVuZGVyZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1lbnVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1lbnVJdGVtQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRNZW51U2VwYXJhdG9yQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRNZXRhZGF0YUNhY2hlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRNb2RhbENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0Tm90aWNlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRSZW5kZXJDb250ZXh0Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRTY29wZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0U2VjcmV0U3RvcmFnZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0U2V0dGluZ0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0U2V0dGluZ0dyb3VwQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRTZXR0aW5nUGFnZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0U2V0dGluZ1RhYkNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0VEFic3RyYWN0RmlsZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0VGFza3NDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFRGaWxlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRURm9sZGVyQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRWYXVsdENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0V29ya3NwYWNlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VDb250YWluZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFdvcmtzcGFjZUZsb2F0aW5nQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VJdGVtQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VMZWFmQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VNb2JpbGVEcmF3ZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFdvcmtzcGFjZVBhcmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0V29ya3NwYWNlUmliYm9uQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VSb290Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VTaWRlZG9ja0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0V29ya3NwYWNlU3BsaXRDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFdvcmtzcGFjZVRhYnNDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFdvcmtzcGFjZVdpbmRvd0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldEFic3RyYWN0VGV4dENvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldEJhc2VDb21wb25lbnRDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRCdXR0b25Db21wb25lbnRDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRDb2xvckNvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldENvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldENvbmZpcm1hdGlvbkJ1dHRvbkNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldERpc3BsYXlWYWx1ZUNvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldERyb3Bkb3duQ29tcG9uZW50Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9zZXR0aW5ncy9zZXR0aW5nLWNvbXBvbmVudHMvZ2V0RXh0cmFCdXR0b25Db21wb25lbnRDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRNb21lbnRGb3JtYXRDb21wb25lbnRDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRQcm9ncmVzc0JhckNvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFNlYXJjaENvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFNlY3JldENvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFNsaWRlckNvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFRleHRBcmVhQ29tcG9uZW50Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9zZXR0aW5ncy9zZXR0aW5nLWNvbXBvbmVudHMvZ2V0VGV4dENvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFRvZ2dsZUNvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFZhbHVlQ29tcG9uZW50Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0Qm9vbGVhblZhbHVlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0RGF0ZVZhbHVlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0RHVyYXRpb25WYWx1ZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldEZpbGVWYWx1ZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldEhUTUxWYWx1ZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldEljb25WYWx1ZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldEltYWdlVmFsdWVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRMaW5rVmFsdWVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRMaXN0VmFsdWVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXROb3ROdWxsVmFsdWVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXROdWxsVmFsdWVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXROdW1iZXJWYWx1ZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldE9iamVjdFZhbHVlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0UmVnRXhwVmFsdWVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRSZWxhdGl2ZURhdGVWYWx1ZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldFN0cmluZ1ZhbHVlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0VGFnVmFsdWVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRVcmxWYWx1ZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldFZhbHVlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92aWV3cy9nZXRFZGl0YWJsZUZpbGVWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92aWV3cy9nZXRNYXJrZG93blZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0QXBwTWVudUJhck1hbmFnZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0QXBwU2V0dGluZ0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRDbGlDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0Q29tbWFuZHNDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0Q3VzdG9tQ1NTQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldERyYWdNYW5hZ2VyQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldEVkaXRvclN1Z2dlc3RzQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldEVtYmVkUmVnaXN0cnlDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0Rm9sZE1hbmFnZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0RnJhbWVEb21Db25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0SG90a2V5TWFuYWdlckNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRNZXRhZGF0YVR5cGVNYW5hZ2VyQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldE9ic2lkaWFuRE9NQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldFBsdWdpbnNDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0UmVjZW50RmlsZVRyYWNrZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0U2hhcmVSZWNlaXZlckNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRTdGF0dXNCYXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0Vmlld1JlZ2lzdHJ5Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldFdvcmtzcGFjZUxlYWZIaXN0b3J5Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvYmFzZXMvZ2V0QmFzZXNDb250ZXh0Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvYmFzZXMvZ2V0QmFzZXNRdWVyeUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvZnVuY3Rpb25zL2dldEJhc2VzQ29udHJvbGxlckZyb21SZW5kZXIudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvZ2V0SW50ZXJuYWxQbHVnaW5Db25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9nZXRJbnRlcm5hbFBsdWdpbnNDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0QWxsUHJvcGVydGllc1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0QXVkaW9WaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldEJhY2tsaW5rVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRCYXNlc1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0Qm9va21hcmtzVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRDYW52YXNWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldEVtcHR5Vmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRGaWxlRXhwbG9yZXJWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldEZpbGVQcm9wZXJ0aWVzVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRHcmFwaFZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0SW1hZ2VWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldExvY2FsR3JhcGhWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldE91dGdvaW5nTGlua1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0T3V0bGluZVZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0UGRmVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRSZWxlYXNlTm90ZXNWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldFNlYXJjaFZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0U3luY1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0VGFnVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRWaWRlb1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0V2Vidmlld2VySGlzdG9yeVZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0V2Vidmlld2VyVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy93b3Jrc3BhY2UvZ2V0V29ya3NwYWNlUHJvdG9jb2xIYW5kbGVyQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy91dGlscy9QYXRoVXRpbHMudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9mdW5jdGlvbnMvY3JlYXRlVEZvbGRlckluc3RhbmNlLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvZnVuY3Rpb25zL2NyZWF0ZVRGaWxlSW5zdGFuY2UudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9mdW5jdGlvbnMvZXZhbHVhdGVCYXNlSGVhZGxlc3MudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9mdW5jdGlvbnMvZ2V0RGF0YUFkYXB0ZXJFeC50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2Z1bmN0aW9ucy9nZXRQbGF0Zm9ybUV4LnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvZnVuY3Rpb25zL2xvYWRNZXJtYWlkLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvZnVuY3Rpb25zL2xvYWRQZGZKcy50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2Z1bmN0aW9ucy9sb2FkUHJpc20udHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy90eXBlLWd1YXJkcy9pc1JlZmVyZW5jZUNhY2hlLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvdHlwZS1ndWFyZHMvaXNFbWJlZENhY2hlLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvdHlwZS1ndWFyZHMvaXNGcm9udG1hdHRlckxpbmtDYWNoZS50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL3R5cGUtZ3VhcmRzL2lzTGlua0NhY2hlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogZnJvbSAnLi9jbGFzc2VzL0N1c3RvbUFycmF5RGljdEltcGwudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMvRmlsZUV4dGVuc2lvbi50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cy9JbnRlcm5hbFBsdWdpbk5hbWUudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMvVmlld1R5cGUudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9iYXNlcy9nZXRCYXNlc0VudHJ5Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9iYXNlcy9nZXRCYXNlc0VudHJ5R3JvdXBDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2Jhc2VzL2dldEJhc2VzUXVlcnlSZXN1bHRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2Jhc2VzL2dldEJhc2VzVmlld0NvbmZpZ0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvYmFzZXMvZ2V0UXVlcnlDb250cm9sbGVyQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRBcHBDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldENhcGFjaXRvckFkYXB0ZXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldENvbmZpcm1hdGlvbk1vZGFsQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRFZGl0b3JDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldEV2ZW50c0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0RmlsZU1hbmFnZXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldEZpbGVTeXN0ZW1BZGFwdGVyQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRGdXp6eVN1Z2dlc3RNb2RhbENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0SG92ZXJQb3BvdmVyQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRLZXltYXBDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1hcmtkb3duUHJldmlld1JlbmRlcmVyQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRNYXJrZG93blByZXZpZXdWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRNYXJrZG93blJlbmRlckNoaWxkQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRNYXJrZG93blJlbmRlcmVyQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRNZW51Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRNZW51SXRlbUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0TWVudVNlcGFyYXRvckNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0TWV0YWRhdGFDYWNoZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0TW9kYWxDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE5vdGljZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0UmVuZGVyQ29udGV4dENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0U2NvcGVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFNlY3JldFN0b3JhZ2VDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFNldHRpbmdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFNldHRpbmdHcm91cENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0U2V0dGluZ1BhZ2VDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFNldHRpbmdUYWJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFRBYnN0cmFjdEZpbGVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFRhc2tzQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRURmlsZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0VEZvbGRlckNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0VmF1bHRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFdvcmtzcGFjZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0V29ya3NwYWNlQ29udGFpbmVyQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VGbG9hdGluZ0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0V29ya3NwYWNlSXRlbUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0V29ya3NwYWNlTGVhZkNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0V29ya3NwYWNlTW9iaWxlRHJhd2VyQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VQYXJlbnRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFdvcmtzcGFjZVJpYmJvbkNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0V29ya3NwYWNlUm9vdENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0V29ya3NwYWNlU2lkZWRvY2tDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFdvcmtzcGFjZVNwbGl0Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VUYWJzQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VXaW5kb3dDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRBYnN0cmFjdFRleHRDb21wb25lbnRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRCYXNlQ29tcG9uZW50Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9zZXR0aW5ncy9zZXR0aW5nLWNvbXBvbmVudHMvZ2V0QnV0dG9uQ29tcG9uZW50Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9zZXR0aW5ncy9zZXR0aW5nLWNvbXBvbmVudHMvZ2V0Q29sb3JDb21wb25lbnRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRDb21wb25lbnRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRDb25maXJtYXRpb25CdXR0b25Db25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXREaXNwbGF5VmFsdWVDb21wb25lbnRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXREcm9wZG93bkNvbXBvbmVudENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldEV4dHJhQnV0dG9uQ29tcG9uZW50Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9zZXR0aW5ncy9zZXR0aW5nLWNvbXBvbmVudHMvZ2V0TW9tZW50Rm9ybWF0Q29tcG9uZW50Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9zZXR0aW5ncy9zZXR0aW5nLWNvbXBvbmVudHMvZ2V0UHJvZ3Jlc3NCYXJDb21wb25lbnRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRTZWFyY2hDb21wb25lbnRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRTZWNyZXRDb21wb25lbnRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRTbGlkZXJDb21wb25lbnRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRUZXh0QXJlYUNvbXBvbmVudENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFRleHRDb21wb25lbnRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRUb2dnbGVDb21wb25lbnRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRWYWx1ZUNvbXBvbmVudENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldEJvb2xlYW5WYWx1ZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldERhdGVWYWx1ZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldER1cmF0aW9uVmFsdWVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRGaWxlVmFsdWVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRIVE1MVmFsdWVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRJY29uVmFsdWVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRJbWFnZVZhbHVlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0TGlua1ZhbHVlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0TGlzdFZhbHVlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0Tm90TnVsbFZhbHVlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0TnVsbFZhbHVlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0TnVtYmVyVmFsdWVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRPYmplY3RWYWx1ZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldFJlZ0V4cFZhbHVlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0UmVsYXRpdmVEYXRlVmFsdWVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRTdHJpbmdWYWx1ZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldFRhZ1ZhbHVlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0VXJsVmFsdWVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRWYWx1ZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmlld3MvZ2V0RWRpdGFibGVGaWxlVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmlld3MvZ2V0TWFya2Rvd25WaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldEFwcE1lbnVCYXJNYW5hZ2VyQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldEFwcFNldHRpbmdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0Q2xpQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldENvbW1hbmRzQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldEN1c3RvbUNTU0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy9nZXREcmFnTWFuYWdlckNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRFZGl0b3JTdWdnZXN0c0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRFbWJlZFJlZ2lzdHJ5Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldEZvbGRNYW5hZ2VyQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldEZyYW1lRG9tQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldEhvdGtleU1hbmFnZXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0TWV0YWRhdGFUeXBlTWFuYWdlckNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRPYnNpZGlhbkRPTUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRQbHVnaW5zQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldFJlY2VudEZpbGVUcmFja2VyQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldFNoYXJlUmVjZWl2ZXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0U3RhdHVzQmFyQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldFZpZXdSZWdpc3RyeUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRXb3Jrc3BhY2VMZWFmSGlzdG9yeUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL2Jhc2VzL2dldEJhc2VzQ29udGV4dENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL2Jhc2VzL2dldEJhc2VzUXVlcnlDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9nZXRJbnRlcm5hbFBsdWdpbkNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL2dldEludGVybmFsUGx1Z2luc0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRBbGxQcm9wZXJ0aWVzVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRBdWRpb1ZpZXdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0QmFja2xpbmtWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldEJhc2VzVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRCb29rbWFya3NWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldENhbnZhc1ZpZXdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0RW1wdHlWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldEZpbGVFeHBsb3JlclZpZXdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0RmlsZVByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldEdyYXBoVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRJbWFnZVZpZXdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0TG9jYWxHcmFwaFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0T3V0Z29pbmdMaW5rVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRPdXRsaW5lVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRQZGZWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldFJlbGVhc2VOb3Rlc1ZpZXdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0U2VhcmNoVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRTeW5jVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRUYWdWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldFZpZGVvVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRXZWJ2aWV3ZXJIaXN0b3J5Vmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRXZWJ2aWV3ZXJWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3dvcmtzcGFjZS9nZXRXb3Jrc3BhY2VQcm90b2NvbEhhbmRsZXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2Z1bmN0aW9ucy9jcmVhdGVURmlsZUluc3RhbmNlLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vZnVuY3Rpb25zL2NyZWF0ZVRGb2xkZXJJbnN0YW5jZS50cyc7XG5leHBvcnQgKiBmcm9tICcuL2Z1bmN0aW9ucy9ldmFsdWF0ZUJhc2VIZWFkbGVzcy50cyc7XG5leHBvcnQgKiBmcm9tICcuL2Z1bmN0aW9ucy9nZXRCYXNlc0NvbnRyb2xsZXJGcm9tUmVuZGVyLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vZnVuY3Rpb25zL2dldERhdGFBZGFwdGVyRXgudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9mdW5jdGlvbnMvZ2V0UGxhdGZvcm1FeC50cyc7XG5leHBvcnQgKiBmcm9tICcuL2Z1bmN0aW9ucy9sb2FkTWVybWFpZC50cyc7XG5leHBvcnQgKiBmcm9tICcuL2Z1bmN0aW9ucy9sb2FkUGRmSnMudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9mdW5jdGlvbnMvbG9hZFByaXNtLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZS1ndWFyZHMvaXNFbWJlZENhY2hlLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZS1ndWFyZHMvaXNGcm9udG1hdHRlckxpbmtDYWNoZS50cyc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGUtZ3VhcmRzL2lzTGlua0NhY2hlLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZS1ndWFyZHMvaXNSZWZlcmVuY2VDYWNoZS50cyc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzL1BhdGhVdGlscy50cyc7XG5leHBvcnQgdHlwZSAqIGZyb20gJy4uLy4uL2luZGV4LmQudHMnO1xuIiwgImltcG9ydCB0eXBlIHsgQ3VzdG9tQXJyYXlEaWN0IH0gZnJvbSAnLi4vLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb25zL0N1c3RvbUFycmF5RGljdC5kLmQudHMnO1xuXG4vKipcbiAqIEEgZGljdGlvbmFyeSB0aGF0IG1hcHMgc3RyaW5nIGtleXMgdG8gYXJyYXlzIG9mIHVuaXF1ZSB2YWx1ZXMsIGltcGxlbWVudGluZyB7QGxpbmsgQ3VzdG9tQXJyYXlEaWN0fS5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgY2xhc3MgQ3VzdG9tQXJyYXlEaWN0SW1wbDxUPiBpbXBsZW1lbnRzIEN1c3RvbUFycmF5RGljdDxUPiB7XG4gIC8qKlxuICAgKiBJbnRlcm5hbCBtYXAgc3RvcmluZyBrZXktdG8tYXJyYXkgbWFwcGluZ3MuXG4gICAqL1xuICBwdWJsaWMgZGF0YTogTWFwPHN0cmluZywgVFtdPiA9IG5ldyBNYXAoKTtcblxuICAvKipcbiAgICogQWRkIGEgdmFsdWUgdG8gdGhlIGFycmF5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4ga2V5LlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleS5cbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGFkZC5cbiAgICovXG4gIHB1YmxpYyBhZGQoa2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogdm9pZCB7XG4gICAgbGV0IHZhbHVlcyA9IHRoaXMuZ2V0KGtleSk7XG4gICAgaWYgKCF2YWx1ZXMpIHtcbiAgICAgIHZhbHVlcyA9IFtdO1xuICAgICAgdGhpcy5kYXRhLnNldChrZXksIHZhbHVlcyk7XG4gICAgfVxuXG4gICAgaWYgKCF2YWx1ZXMuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbGwgdmFsdWVzIGZvciB0aGUgZ2l2ZW4ga2V5LlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSB0byBjbGVhci5cbiAgICovXG4gIHB1YmxpYyBjbGVhcihrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZGF0YS5kZWxldGUoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYWxsIGtleXMgYW5kIHRoZWlyIHZhbHVlcy5cbiAgICovXG4gIHB1YmxpYyBjbGVhckFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGEuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRoZSBhcnJheSBmb3IgdGhlIGdpdmVuIGtleSBjb250YWlucyB0aGUgc3BlY2lmaWVkIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleS5cbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSB2YWx1ZSBleGlzdHMuXG4gICAqL1xuICBwdWJsaWMgY29udGFpbnMoa2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5nZXQoa2V5KT8uY29udGFpbnModmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdG90YWwgbnVtYmVyIG9mIHZhbHVlcyBhY3Jvc3MgYWxsIGtleXMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRvdGFsIHZhbHVlIGNvdW50LlxuICAgKi9cbiAgcHVibGljIGNvdW50KCk6IG51bWJlciB7XG4gICAgbGV0IGFucyA9IDA7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgdGhpcy5rZXlzKCkpIHtcbiAgICAgIGFucyArPSB0aGlzLmdldChrZXkpPy5sZW5ndGggPz8gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gYW5zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgYXJyYXkgb2YgdmFsdWVzIGZvciB0aGUgZ2l2ZW4ga2V5LCBvciBgbnVsbGAgaWYgbm90IGZvdW5kLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleS5cbiAgICogQHJldHVybnMgQXJyYXkgb2YgdmFsdWVzLCBvciBgbnVsbGAuXG4gICAqL1xuICBwdWJsaWMgZ2V0KGtleTogc3RyaW5nKTogbnVsbCB8IFRbXSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5nZXQoa2V5KSB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwga2V5cyBpbiB0aGUgZGljdGlvbmFyeS5cbiAgICpcbiAgICogQHJldHVybnMgQXJyYXkgb2Yga2V5cy5cbiAgICovXG4gIHB1YmxpYyBrZXlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmRhdGEua2V5cygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBzcGVjaWZpYyB2YWx1ZSBmcm9tIHRoZSBhcnJheSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGtleS5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byByZW1vdmUuXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlKGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0KGtleSk7XG4gICAgaWYgKCF2YWx1ZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YWx1ZXMucmVtb3ZlKHZhbHVlKTtcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5jbGVhcihrZXkpO1xuICAgIH1cbiAgfVxufVxuIiwgIi8qKlxuICogQ29uc3RhbnQgbWFwcGluZyBvZiBmaWxlIGV4dGVuc2lvbiBpZGVudGlmaWVycyByZWNvZ25pemVkIGFuZCBzdXBwb3J0ZWQgYnkgT2JzaWRpYW4uXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEZpbGVFeHRlbnNpb24gPSB7XG4gIF8zZ3A6ICczZ3AnLFxuICBhdmlmOiAnYXZpZicsXG4gIGJtcDogJ2JtcCcsXG4gIGNhbnZhczogJ2NhbnZhcycsXG4gIGZsYWM6ICdmbGFjJyxcbiAgZ2lmOiAnZ2lmJyxcbiAganBlZzogJ2pwZWcnLFxuICBqcGc6ICdqcGcnLFxuICBtNGE6ICdtNGEnLFxuICBtZDogJ21kJyxcbiAgbWt2OiAnbWt2JyxcbiAgbW92OiAnbW92JyxcbiAgbXAzOiAnbXAzJyxcbiAgbXA0OiAnbXA0JyxcbiAgb2dhOiAnb2dhJyxcbiAgb2dnOiAnb2dnJyxcbiAgb2d2OiAnb2d2JyxcbiAgb3B1czogJ29wdXMnLFxuICBwZGY6ICdwZGYnLFxuICBwbmc6ICdwbmcnLFxuICBzdmc6ICdzdmcnLFxuICB3YXY6ICd3YXYnLFxuICB3ZWJtOiAnd2VibScsXG4gIHdlYnA6ICd3ZWJwJ1xufSBhcyBjb25zdDtcbiIsICIvKipcbiAqIENvbnN0YW50IG1hcHBpbmcgb2YgaW50ZXJuYWwgKGNvcmUpIHBsdWdpbiBuYW1lIGlkZW50aWZpZXJzIGJ1bmRsZWQgd2l0aCBPYnNpZGlhbi5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgY29uc3QgSW50ZXJuYWxQbHVnaW5OYW1lID0ge1xuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IEF1ZGlvIHJlY29yZGVyLlxuICAgKi9cbiAgQXVkaW9SZWNvcmRlcjogJ2F1ZGlvLXJlY29yZGVyJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBCYWNrbGlua3MuXG4gICAqL1xuICBCYWNrbGluazogJ2JhY2tsaW5rJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBCYXNlcy5cbiAgICovXG4gIEJhc2VzOiAnYmFzZXMnLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IEJvb2ttYXJrcy5cbiAgICovXG4gIEJvb2ttYXJrczogJ2Jvb2ttYXJrcycsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogQ2FudmFzLlxuICAgKi9cbiAgQ2FudmFzOiAnY2FudmFzJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBDb21tYW5kIHBhbGV0dGUuXG4gICAqL1xuICBDb21tYW5kUGFsZXR0ZTogJ2NvbW1hbmQtcGFsZXR0ZScsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogRGFpbHkgbm90ZXMuXG4gICAqL1xuICBEYWlseU5vdGVzOiAnZGFpbHktbm90ZXMnLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IChoaWRkZW4pLlxuICAgKi9cbiAgRWRpdG9yU3RhdHVzOiAnZWRpdG9yLXN0YXR1cycsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogRmlsZXMuXG4gICAqL1xuICBGaWxlRXhwbG9yZXI6ICdmaWxlLWV4cGxvcmVyJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBGaWxlIHJlY292ZXJ5LlxuICAgKi9cbiAgRmlsZVJlY292ZXJ5OiAnZmlsZS1yZWNvdmVyeScsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogRm9vdG5vdGVzLlxuICAgKi9cbiAgRm9vdG5vdGVzOiAnZm9vdG5vdGVzJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBTZWFyY2guXG4gICAqL1xuICBHbG9iYWxTZWFyY2g6ICdnbG9iYWwtc2VhcmNoJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBHcmFwaCB2aWV3LlxuICAgKi9cbiAgR3JhcGg6ICdncmFwaCcsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogRm9ybWF0IGNvbnZlcnRlci5cbiAgICovXG4gIE1hcmtkb3duSW1wb3J0ZXI6ICdtYXJrZG93bi1pbXBvcnRlcicsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogTm90ZSBjb21wb3Nlci5cbiAgICovXG4gIE5vdGVDb21wb3NlcjogJ25vdGUtY29tcG9zZXInLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IE91dGdvaW5nIGxpbmtzLlxuICAgKi9cbiAgT3V0Z29pbmdMaW5rOiAnb3V0Z29pbmctbGluaycsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogT3V0bGluZS5cbiAgICovXG4gIE91dGxpbmU6ICdvdXRsaW5lJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBQYWdlIHByZXZpZXcuXG4gICAqL1xuICBQYWdlUHJldmlldzogJ3BhZ2UtcHJldmlldycsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogUHJvcGVydGllcyB2aWV3LlxuICAgKi9cbiAgUHJvcGVydGllczogJ3Byb3BlcnRpZXMnLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFB1Ymxpc2guXG4gICAqL1xuICBQdWJsaXNoOiAncHVibGlzaCcsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogUmFuZG9tIG5vdGUuXG4gICAqL1xuICBSYW5kb21Ob3RlOiAncmFuZG9tLW5vdGUnLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFNsYXNoIGNvbW1hbmRzLlxuICAgKi9cbiAgU2xhc2hDb21tYW5kOiAnc2xhc2gtY29tbWFuZCcsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogU2xpZGVzLlxuICAgKi9cbiAgU2xpZGVzOiAnc2xpZGVzJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBRdWljayBTd2l0Y2hlci5cbiAgICovXG4gIFN3aXRjaGVyOiAnc3dpdGNoZXInLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFN5bmMuXG4gICAqL1xuICBTeW5jOiAnc3luYycsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogVGFncyB2aWV3LlxuICAgKi9cbiAgVGFnUGFuZTogJ3RhZy1wYW5lJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBUZW1wbGF0ZXMuXG4gICAqL1xuICBUZW1wbGF0ZXM6ICd0ZW1wbGF0ZXMnLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFdlYiB2aWV3ZXIuXG4gICAqL1xuICBXZWJ2aWV3ZXI6ICd3ZWJ2aWV3ZXInLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFdvcmQgY291bnQuXG4gICAqL1xuICBXb3JkQ291bnQ6ICd3b3JkLWNvdW50JyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBXb3Jrc3BhY2VzLlxuICAgKi9cbiAgV29ya3NwYWNlczogJ3dvcmtzcGFjZXMnLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFVuaXF1ZSBub3RlIGNyZWF0b3IuXG4gICAqL1xuICBaa1ByZWZpeGVyOiAnemstcHJlZml4ZXInXG59IGFzIGNvbnN0O1xuIiwgImltcG9ydCB7IEludGVybmFsUGx1Z2luTmFtZSB9IGZyb20gJy4vSW50ZXJuYWxQbHVnaW5OYW1lLnRzJztcblxuLyoqXG4gKiBDb25zdGFudCBtYXBwaW5nIG9mIHZpZXcgdHlwZSBpZGVudGlmaWVycyB1c2VkIHRvIG9wZW4gYW5kIG1hbmFnZSBkaWZmZXJlbnQgbGVhZiB2aWV3cyBpbiBPYnNpZGlhbi5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgY29uc3QgVmlld1R5cGUgPSB7XG4gIEFsbFByb3BlcnRpZXM6ICdhbGwtcHJvcGVydGllcycsXG4gIEF1ZGlvOiAnYXVkaW8nLFxuICBCYWNrbGluazogSW50ZXJuYWxQbHVnaW5OYW1lLkJhY2tsaW5rLFxuICBCYXNlczogSW50ZXJuYWxQbHVnaW5OYW1lLkJhc2VzLFxuICBCb29rbWFya3M6IEludGVybmFsUGx1Z2luTmFtZS5Cb29rbWFya3MsXG4gIENhbnZhczogSW50ZXJuYWxQbHVnaW5OYW1lLkNhbnZhcyxcbiAgRW1wdHk6ICdlbXB0eScsXG4gIEZpbGVFeHBsb3JlcjogSW50ZXJuYWxQbHVnaW5OYW1lLkZpbGVFeHBsb3JlcixcbiAgRmlsZVByb3BlcnRpZXM6ICdmaWxlLXByb3BlcnRpZXMnLFxuICBHcmFwaDogSW50ZXJuYWxQbHVnaW5OYW1lLkdyYXBoLFxuICBJbWFnZTogJ2ltYWdlJyxcbiAgTG9jYWxHcmFwaDogJ2xvY2FsZ3JhcGgnLFxuICBNYXJrZG93bjogJ21hcmtkb3duJyxcbiAgT3V0Z29pbmdMaW5rOiBJbnRlcm5hbFBsdWdpbk5hbWUuT3V0Z29pbmdMaW5rLFxuICBPdXRsaW5lOiBJbnRlcm5hbFBsdWdpbk5hbWUuT3V0bGluZSxcbiAgUGRmOiAncGRmJyxcbiAgUmVsZWFzZU5vdGVzOiAncmVsZWFzZS1ub3RlcycsXG4gIFNlYXJjaDogJ3NlYXJjaCcsXG4gIFN5bmM6ICdzeW5jJyxcbiAgVGFnOiAndGFnJyxcbiAgVmlkZW86ICd2aWRlbycsXG4gIFdlYnZpZXdlcjogJ3dlYnZpZXdlcicsXG4gIFdlYnZpZXdlckhpc3Rvcnk6ICd3ZWJ2aWV3ZXItaGlzdG9yeSdcbn0gYXMgY29uc3Q7XG4iLCAiaW1wb3J0IHsgQmFzZXNFbnRyeSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNCYXNlc0VudHJ5fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0Jhc2VzRW50cnl9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCYXNlc0VudHJ5Q29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPEJhc2VzRW50cnk+IHtcbiAgcmV0dXJuIEJhc2VzRW50cnkgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEJhc2VzRW50cnk+O1xufVxuIiwgImltcG9ydCB7IEJhc2VzRW50cnlHcm91cCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNCYXNlc0VudHJ5R3JvdXB9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jQmFzZXNFbnRyeUdyb3VwfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFzZXNFbnRyeUdyb3VwQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPEJhc2VzRW50cnlHcm91cD4ge1xuICByZXR1cm4gQmFzZXNFbnRyeUdyb3VwIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxCYXNlc0VudHJ5R3JvdXA+O1xufVxuIiwgImltcG9ydCB7IEJhc2VzUXVlcnlSZXN1bHQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jQmFzZXNRdWVyeVJlc3VsdH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNCYXNlc1F1ZXJ5UmVzdWx0fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFzZXNRdWVyeVJlc3VsdENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxCYXNlc1F1ZXJ5UmVzdWx0PiB7XG4gIHJldHVybiBCYXNlc1F1ZXJ5UmVzdWx0IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxCYXNlc1F1ZXJ5UmVzdWx0Pjtcbn1cbiIsICJpbXBvcnQgeyBCYXNlc1ZpZXdDb25maWcgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jQmFzZXNWaWV3Q29uZmlnfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0Jhc2VzVmlld0NvbmZpZ30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJhc2VzVmlld0NvbmZpZ0NvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxCYXNlc1ZpZXdDb25maWc+IHtcbiAgcmV0dXJuIEJhc2VzVmlld0NvbmZpZyBhcyBFeHRyYWN0Q29uc3RydWN0b3I8QmFzZXNWaWV3Q29uZmlnPjtcbn1cbiIsICJpbXBvcnQgeyBRdWVyeUNvbnRyb2xsZXIgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jUXVlcnlDb250cm9sbGVyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1F1ZXJ5Q29udHJvbGxlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFF1ZXJ5Q29udHJvbGxlckNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxRdWVyeUNvbnRyb2xsZXI+IHtcbiAgcmV0dXJuIFF1ZXJ5Q29udHJvbGxlciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8UXVlcnlDb250cm9sbGVyPjtcbn1cbiIsICJpbXBvcnQgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jQXBwfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0FwcH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFwcENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxBcHA+IHtcbiAgcmV0dXJuIEFwcCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8QXBwPjtcbn1cbiIsICJpbXBvcnQgeyBDYXBhY2l0b3JBZGFwdGVyIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0NhcGFjaXRvckFkYXB0ZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jQ2FwYWNpdG9yQWRhcHRlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhcGFjaXRvckFkYXB0ZXJDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8Q2FwYWNpdG9yQWRhcHRlcj4ge1xuICByZXR1cm4gQ2FwYWNpdG9yQWRhcHRlciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8Q2FwYWNpdG9yQWRhcHRlcj47XG59XG4iLCAiaW1wb3J0IHsgQ29uZmlybWF0aW9uTW9kYWwgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jQ29uZmlybWF0aW9uTW9kYWx9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jQ29uZmlybWF0aW9uTW9kYWx9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maXJtYXRpb25Nb2RhbENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxDb25maXJtYXRpb25Nb2RhbD4ge1xuICByZXR1cm4gQ29uZmlybWF0aW9uTW9kYWwgYXMgRXh0cmFjdENvbnN0cnVjdG9yPENvbmZpcm1hdGlvbk1vZGFsPjtcbn1cbiIsICJpbXBvcnQgeyBFZGl0b3IgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jRWRpdG9yfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0VkaXRvcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVkaXRvckNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxFZGl0b3I+IHtcbiAgcmV0dXJuIEVkaXRvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8RWRpdG9yPjtcbn1cbiIsICJpbXBvcnQgeyBFdmVudHMgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jRXZlbnRzfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0V2ZW50c30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEV2ZW50c0NvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxFdmVudHM+IHtcbiAgcmV0dXJuIEV2ZW50cyBhcyBFeHRyYWN0Q29uc3RydWN0b3I8RXZlbnRzPjtcbn1cbiIsICJpbXBvcnQgeyBGaWxlTWFuYWdlciB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNGaWxlTWFuYWdlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNGaWxlTWFuYWdlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVNYW5hZ2VyQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPEZpbGVNYW5hZ2VyPiB7XG4gIHJldHVybiBGaWxlTWFuYWdlciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8RmlsZU1hbmFnZXI+O1xufVxuIiwgImltcG9ydCB7IEZpbGVTeXN0ZW1BZGFwdGVyIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0ZpbGVTeXN0ZW1BZGFwdGVyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0ZpbGVTeXN0ZW1BZGFwdGVyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZVN5c3RlbUFkYXB0ZXJDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8RmlsZVN5c3RlbUFkYXB0ZXI+IHtcbiAgcmV0dXJuIEZpbGVTeXN0ZW1BZGFwdGVyIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxGaWxlU3lzdGVtQWRhcHRlcj47XG59XG4iLCAiaW1wb3J0IHsgRnV6enlTdWdnZXN0TW9kYWwgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jRnV6enlTdWdnZXN0TW9kYWx9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jRnV6enlTdWdnZXN0TW9kYWx9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGdXp6eVN1Z2dlc3RNb2RhbENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxGdXp6eVN1Z2dlc3RNb2RhbDx1bmtub3duPj4ge1xuICByZXR1cm4gRnV6enlTdWdnZXN0TW9kYWwgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEZ1enp5U3VnZ2VzdE1vZGFsPHVua25vd24+Pjtcbn1cbiIsICJpbXBvcnQgeyBIb3ZlclBvcG92ZXIgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jSG92ZXJQb3BvdmVyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0hvdmVyUG9wb3Zlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhvdmVyUG9wb3ZlckNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxIb3ZlclBvcG92ZXI+IHtcbiAgcmV0dXJuIEhvdmVyUG9wb3ZlciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8SG92ZXJQb3BvdmVyPjtcbn1cbiIsICJpbXBvcnQgeyBLZXltYXAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jS2V5bWFwfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0tleW1hcH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEtleW1hcENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxLZXltYXA+IHtcbiAgcmV0dXJuIEtleW1hcCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8S2V5bWFwPjtcbn1cbiIsICJpbXBvcnQgeyBNYXJrZG93blByZXZpZXdSZW5kZXJlciB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNNYXJrZG93blByZXZpZXdSZW5kZXJlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNNYXJrZG93blByZXZpZXdSZW5kZXJlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hcmtkb3duUHJldmlld1JlbmRlcmVyQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPE1hcmtkb3duUHJldmlld1JlbmRlcmVyPiB7XG4gIHJldHVybiBNYXJrZG93blByZXZpZXdSZW5kZXJlciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8TWFya2Rvd25QcmV2aWV3UmVuZGVyZXI+O1xufVxuIiwgImltcG9ydCB7IE1hcmtkb3duUHJldmlld1ZpZXcgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jTWFya2Rvd25QcmV2aWV3Vmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNNYXJrZG93blByZXZpZXdWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFya2Rvd25QcmV2aWV3Vmlld0NvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxNYXJrZG93blByZXZpZXdWaWV3PiB7XG4gIHJldHVybiBNYXJrZG93blByZXZpZXdWaWV3IGFzIHVua25vd24gYXMgRXh0cmFjdENvbnN0cnVjdG9yPE1hcmtkb3duUHJldmlld1ZpZXc+O1xufVxuIiwgImltcG9ydCB7IE1hcmtkb3duUmVuZGVyQ2hpbGQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jTWFya2Rvd25SZW5kZXJDaGlsZH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNNYXJrZG93blJlbmRlckNoaWxkfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFya2Rvd25SZW5kZXJDaGlsZENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxNYXJrZG93blJlbmRlckNoaWxkPiB7XG4gIHJldHVybiBNYXJrZG93blJlbmRlckNoaWxkIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxNYXJrZG93blJlbmRlckNoaWxkPjtcbn1cbiIsICJpbXBvcnQgeyBNYXJrZG93blJlbmRlcmVyIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI01hcmtkb3duUmVuZGVyZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jTWFya2Rvd25SZW5kZXJlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hcmtkb3duUmVuZGVyZXJDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8TWFya2Rvd25SZW5kZXJlcj4ge1xuICByZXR1cm4gTWFya2Rvd25SZW5kZXJlciBhcyB1bmtub3duIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxNYXJrZG93blJlbmRlcmVyPjtcbn1cbiIsICJpbXBvcnQgeyBNZW51IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI01lbnV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jTWVudX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbnVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8TWVudT4ge1xuICByZXR1cm4gTWVudSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8TWVudT47XG59XG4iLCAiaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jTWVudUl0ZW19IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jTWVudUl0ZW19IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW51SXRlbUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxNZW51SXRlbT4ge1xuICByZXR1cm4gTWVudUl0ZW0gYXMgdW5rbm93biBhcyBFeHRyYWN0Q29uc3RydWN0b3I8TWVudUl0ZW0+O1xufVxuIiwgImltcG9ydCB7IE1lbnVTZXBhcmF0b3IgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jTWVudVNlcGFyYXRvcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNNZW51U2VwYXJhdG9yfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVudVNlcGFyYXRvckNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxNZW51U2VwYXJhdG9yPiB7XG4gIHJldHVybiBNZW51U2VwYXJhdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxNZW51U2VwYXJhdG9yPjtcbn1cbiIsICJpbXBvcnQgeyBNZXRhZGF0YUNhY2hlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI01ldGFkYXRhQ2FjaGV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jTWV0YWRhdGFDYWNoZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1ldGFkYXRhQ2FjaGVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8TWV0YWRhdGFDYWNoZT4ge1xuICByZXR1cm4gTWV0YWRhdGFDYWNoZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8TWV0YWRhdGFDYWNoZT47XG59XG4iLCAiaW1wb3J0IHsgTW9kYWwgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jTW9kYWx9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jTW9kYWx9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RhbENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxNb2RhbD4ge1xuICByZXR1cm4gTW9kYWwgYXMgRXh0cmFjdENvbnN0cnVjdG9yPE1vZGFsPjtcbn1cbiIsICJpbXBvcnQgeyBOb3RpY2UgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jTm90aWNlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI05vdGljZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5vdGljZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxOb3RpY2U+IHtcbiAgcmV0dXJuIE5vdGljZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8Tm90aWNlPjtcbn1cbiIsICJpbXBvcnQgeyBSZW5kZXJDb250ZXh0IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1JlbmRlckNvbnRleHR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jUmVuZGVyQ29udGV4dH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlbmRlckNvbnRleHRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8UmVuZGVyQ29udGV4dD4ge1xuICByZXR1cm4gUmVuZGVyQ29udGV4dCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8UmVuZGVyQ29udGV4dD47XG59XG4iLCAiaW1wb3J0IHsgU2NvcGUgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jU2NvcGV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jU2NvcGV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY29wZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxTY29wZT4ge1xuICByZXR1cm4gU2NvcGUgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFNjb3BlPjtcbn1cbiIsICJpbXBvcnQgeyBTZWNyZXRTdG9yYWdlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1NlY3JldFN0b3JhZ2V9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jU2VjcmV0U3RvcmFnZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlY3JldFN0b3JhZ2VDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8U2VjcmV0U3RvcmFnZT4ge1xuICByZXR1cm4gU2VjcmV0U3RvcmFnZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8U2VjcmV0U3RvcmFnZT47XG59XG4iLCAiaW1wb3J0IHsgU2V0dGluZyB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNTZXR0aW5nfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1NldHRpbmd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXR0aW5nQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFNldHRpbmc+IHtcbiAgcmV0dXJuIFNldHRpbmcgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFNldHRpbmc+O1xufVxuIiwgImltcG9ydCB7IFNldHRpbmdHcm91cCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNTZXR0aW5nR3JvdXB9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jU2V0dGluZ0dyb3VwfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2V0dGluZ0dyb3VwQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFNldHRpbmdHcm91cD4ge1xuICByZXR1cm4gU2V0dGluZ0dyb3VwIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxTZXR0aW5nR3JvdXA+O1xufVxuIiwgImltcG9ydCB7IFNldHRpbmdQYWdlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1NldHRpbmdQYWdlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1NldHRpbmdQYWdlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2V0dGluZ1BhZ2VDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8U2V0dGluZ1BhZ2U+IHtcbiAgcmV0dXJuIFNldHRpbmdQYWdlIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxTZXR0aW5nUGFnZT47XG59XG4iLCAiaW1wb3J0IHsgU2V0dGluZ1RhYiB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNTZXR0aW5nVGFifSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1NldHRpbmdUYWJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXR0aW5nVGFiQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFNldHRpbmdUYWI+IHtcbiAgcmV0dXJuIFNldHRpbmdUYWIgYXMgdW5rbm93biBhcyBFeHRyYWN0Q29uc3RydWN0b3I8U2V0dGluZ1RhYj47XG59XG4iLCAiaW1wb3J0IHsgVEFic3RyYWN0RmlsZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNUQWJzdHJhY3RGaWxlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1RBYnN0cmFjdEZpbGV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUQWJzdHJhY3RGaWxlQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFRBYnN0cmFjdEZpbGU+IHtcbiAgcmV0dXJuIFRBYnN0cmFjdEZpbGUgYXMgdW5rbm93biBhcyBFeHRyYWN0Q29uc3RydWN0b3I8VEFic3RyYWN0RmlsZT47XG59XG4iLCAiaW1wb3J0IHsgVGFza3MgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0b3JCYXNlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9Db25zdHJ1Y3RvckJhc2UuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jVGFza3N9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jVGFza3N9IGNvbnN0cnVjdG9yLlxuICogQHJlbWFyayBDb25zdHJ1Y3RvciBpcyBgbnVsbGAuIFNlZSB7QGxpbmsgaHR0cHM6Ly9mb3J1bS5vYnNpZGlhbi5tZC90L2FwaS1idWctdGFza3MtY2xhc3MvOTg5OTN9LlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYXNrc0NvbnN0cnVjdG9yKCk6IENvbnN0cnVjdG9yQmFzZTxbXSwgVGFza3M+IHtcbiAgcmV0dXJuIFRhc2tzIGFzIENvbnN0cnVjdG9yQmFzZTxbXSwgVGFza3M+O1xufVxuIiwgImltcG9ydCB7IFRGaWxlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1RGaWxlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1RGaWxlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VEZpbGVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8VEZpbGU+IHtcbiAgcmV0dXJuIFRGaWxlIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxURmlsZT47XG59XG4iLCAiaW1wb3J0IHsgVEZvbGRlciB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNURm9sZGVyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1RGb2xkZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRURm9sZGVyQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFRGb2xkZXI+IHtcbiAgcmV0dXJuIFRGb2xkZXIgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFRGb2xkZXI+O1xufVxuIiwgImltcG9ydCB7IFZhdWx0IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1ZhdWx0fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1ZhdWx0fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmF1bHRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8VmF1bHQ+IHtcbiAgcmV0dXJuIFZhdWx0IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxWYXVsdD47XG59XG4iLCAiaW1wb3J0IHsgV29ya3NwYWNlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2V9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3Jrc3BhY2VDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlPiB7XG4gIHJldHVybiBXb3Jrc3BhY2UgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZT47XG59XG4iLCAiaW1wb3J0IHsgV29ya3NwYWNlQ29udGFpbmVyIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZUNvbnRhaW5lcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VDb250YWluZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3Jrc3BhY2VDb250YWluZXJDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlQ29udGFpbmVyPiB7XG4gIHJldHVybiBXb3Jrc3BhY2VDb250YWluZXIgYXMgdW5rbm93biBhcyBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlQ29udGFpbmVyPjtcbn1cbiIsICJpbXBvcnQgeyBXb3Jrc3BhY2VGbG9hdGluZyB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VGbG9hdGluZ30gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VGbG9hdGluZ30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdvcmtzcGFjZUZsb2F0aW5nQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZUZsb2F0aW5nPiB7XG4gIHJldHVybiBXb3Jrc3BhY2VGbG9hdGluZyBhcyBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlRmxvYXRpbmc+O1xufVxuIiwgImltcG9ydCB7IFdvcmtzcGFjZUl0ZW0gfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jV29ya3NwYWNlSXRlbX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VJdGVtfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya3NwYWNlSXRlbUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VJdGVtPiB7XG4gIHJldHVybiBXb3Jrc3BhY2VJdGVtIGFzIHVua25vd24gYXMgRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZUl0ZW0+O1xufVxuIiwgImltcG9ydCB7IFdvcmtzcGFjZUxlYWYgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jV29ya3NwYWNlTGVhZn0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VMZWFmfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya3NwYWNlTGVhZkNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VMZWFmPiB7XG4gIHJldHVybiBXb3Jrc3BhY2VMZWFmIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VMZWFmPjtcbn1cbiIsICJpbXBvcnQgeyBXb3Jrc3BhY2VNb2JpbGVEcmF3ZXIgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jV29ya3NwYWNlTW9iaWxlRHJhd2VyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZU1vYmlsZURyYXdlcn0gY29uc3RydWN0b3IuXG4gKiBAcmVtYXJrIENvbnN0cnVjdG9yIGlzIGBudWxsYC4gU2VlIHtAbGluayBodHRwczovL2ZvcnVtLm9ic2lkaWFuLm1kL3QvYXBpLWJ1Zy10YXNrcy1jbGFzcy85ODk5M30uXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdvcmtzcGFjZU1vYmlsZURyYXdlckNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VNb2JpbGVEcmF3ZXI+IHtcbiAgcmV0dXJuIFdvcmtzcGFjZU1vYmlsZURyYXdlciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlTW9iaWxlRHJhd2VyPjtcbn1cbiIsICJpbXBvcnQgeyBXb3Jrc3BhY2VQYXJlbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jV29ya3NwYWNlUGFyZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZVBhcmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdvcmtzcGFjZVBhcmVudENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VQYXJlbnQ+IHtcbiAgcmV0dXJuIFdvcmtzcGFjZVBhcmVudCBhcyB1bmtub3duIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VQYXJlbnQ+O1xufVxuIiwgImltcG9ydCB7IFdvcmtzcGFjZVJpYmJvbiB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VSaWJib259IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jV29ya3NwYWNlUmliYm9ufSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya3NwYWNlUmliYm9uQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZVJpYmJvbj4ge1xuICByZXR1cm4gV29ya3NwYWNlUmliYm9uIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VSaWJib24+O1xufVxuIiwgImltcG9ydCB7IFdvcmtzcGFjZVJvb3QgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jV29ya3NwYWNlUm9vdH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VSb290fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya3NwYWNlUm9vdENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VSb290PiB7XG4gIHJldHVybiBXb3Jrc3BhY2VSb290IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VSb290Pjtcbn1cbiIsICJpbXBvcnQgeyBXb3Jrc3BhY2VTaWRlZG9jayB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VTaWRlZG9ja30gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VTaWRlZG9ja30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdvcmtzcGFjZVNpZGVkb2NrQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZVNpZGVkb2NrPiB7XG4gIHJldHVybiBXb3Jrc3BhY2VTaWRlZG9jayBhcyBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlU2lkZWRvY2s+O1xufVxuIiwgImltcG9ydCB7IFdvcmtzcGFjZVNwbGl0IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZVNwbGl0fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZVNwbGl0fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya3NwYWNlU3BsaXRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlU3BsaXQ+IHtcbiAgcmV0dXJuIFdvcmtzcGFjZVNwbGl0IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VTcGxpdD47XG59XG4iLCAiaW1wb3J0IHsgV29ya3NwYWNlVGFicyB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VUYWJzfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZVRhYnN9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3Jrc3BhY2VUYWJzQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZVRhYnM+IHtcbiAgcmV0dXJuIFdvcmtzcGFjZVRhYnMgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZVRhYnM+O1xufVxuIiwgImltcG9ydCB7IFdvcmtzcGFjZVdpbmRvdyB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VXaW5kb3d9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jV29ya3NwYWNlV2luZG93fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya3NwYWNlV2luZG93Q29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZVdpbmRvdz4ge1xuICByZXR1cm4gV29ya3NwYWNlV2luZG93IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VXaW5kb3c+O1xufVxuIiwgImltcG9ydCB7IEFic3RyYWN0VGV4dENvbXBvbmVudCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNBYnN0cmFjdFRleHRDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jQWJzdHJhY3RUZXh0Q29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWJzdHJhY3RUZXh0Q29tcG9uZW50Q29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFxuICBBYnN0cmFjdFRleHRDb21wb25lbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+XG4+IHtcbiAgcmV0dXJuIEFic3RyYWN0VGV4dENvbXBvbmVudCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8XG4gICAgQWJzdHJhY3RUZXh0Q29tcG9uZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PlxuICA+O1xufVxuIiwgImltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jQmFzZUNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNCYXNlQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFzZUNvbXBvbmVudENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxCYXNlQ29tcG9uZW50PiB7XG4gIHJldHVybiBCYXNlQ29tcG9uZW50IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxCYXNlQ29tcG9uZW50Pjtcbn1cbiIsICJpbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jQnV0dG9uQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0J1dHRvbkNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1dHRvbkNvbXBvbmVudENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxCdXR0b25Db21wb25lbnQ+IHtcbiAgcmV0dXJuIEJ1dHRvbkNvbXBvbmVudCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8QnV0dG9uQ29tcG9uZW50Pjtcbn1cbiIsICJpbXBvcnQgeyBDb2xvckNvbXBvbmVudCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNDb2xvckNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNDb2xvckNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbG9yQ29tcG9uZW50Q29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPENvbG9yQ29tcG9uZW50PiB7XG4gIHJldHVybiBDb2xvckNvbXBvbmVudCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8Q29sb3JDb21wb25lbnQ+O1xufVxuIiwgImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tcG9uZW50Q29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPENvbXBvbmVudD4ge1xuICByZXR1cm4gQ29tcG9uZW50IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxDb21wb25lbnQ+O1xufVxuIiwgImltcG9ydCB7IENvbmZpcm1hdGlvbkJ1dHRvbiB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNDb25maXJtYXRpb25CdXR0b259IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jQ29uZmlybWF0aW9uQnV0dG9ufSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlybWF0aW9uQnV0dG9uQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPENvbmZpcm1hdGlvbkJ1dHRvbj4ge1xuICByZXR1cm4gQ29uZmlybWF0aW9uQnV0dG9uIGFzIHVua25vd24gYXMgRXh0cmFjdENvbnN0cnVjdG9yPENvbmZpcm1hdGlvbkJ1dHRvbj47XG59XG4iLCAiaW1wb3J0IHsgRGlzcGxheVZhbHVlQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0Rpc3BsYXlWYWx1ZUNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNEaXNwbGF5VmFsdWVDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXNwbGF5VmFsdWVDb21wb25lbnRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8RGlzcGxheVZhbHVlQ29tcG9uZW50PiB7XG4gIHJldHVybiBEaXNwbGF5VmFsdWVDb21wb25lbnQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPERpc3BsYXlWYWx1ZUNvbXBvbmVudD47XG59XG4iLCAiaW1wb3J0IHsgRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jRHJvcGRvd25Db21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jRHJvcGRvd25Db21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREcm9wZG93bkNvbXBvbmVudENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxEcm9wZG93bkNvbXBvbmVudD4ge1xuICByZXR1cm4gRHJvcGRvd25Db21wb25lbnQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPERyb3Bkb3duQ29tcG9uZW50Pjtcbn1cbiIsICJpbXBvcnQgeyBFeHRyYUJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNFeHRyYUJ1dHRvbkNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNFeHRyYUJ1dHRvbkNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEV4dHJhQnV0dG9uQ29tcG9uZW50Q29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPEV4dHJhQnV0dG9uQ29tcG9uZW50PiB7XG4gIHJldHVybiBFeHRyYUJ1dHRvbkNvbXBvbmVudCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8RXh0cmFCdXR0b25Db21wb25lbnQ+O1xufVxuIiwgImltcG9ydCB7IE1vbWVudEZvcm1hdENvbXBvbmVudCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNNb21lbnRGb3JtYXRDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jTW9tZW50Rm9ybWF0Q29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9tZW50Rm9ybWF0Q29tcG9uZW50Q29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPE1vbWVudEZvcm1hdENvbXBvbmVudD4ge1xuICByZXR1cm4gTW9tZW50Rm9ybWF0Q29tcG9uZW50IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxNb21lbnRGb3JtYXRDb21wb25lbnQ+O1xufVxuIiwgImltcG9ydCB7IFByb2dyZXNzQmFyQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1Byb2dyZXNzQmFyQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1Byb2dyZXNzQmFyQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJvZ3Jlc3NCYXJDb21wb25lbnRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8UHJvZ3Jlc3NCYXJDb21wb25lbnQ+IHtcbiAgcmV0dXJuIFByb2dyZXNzQmFyQ29tcG9uZW50IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxQcm9ncmVzc0JhckNvbXBvbmVudD47XG59XG4iLCAiaW1wb3J0IHsgU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1NlYXJjaENvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNTZWFyY2hDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWFyY2hDb21wb25lbnRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8U2VhcmNoQ29tcG9uZW50PiB7XG4gIHJldHVybiBTZWFyY2hDb21wb25lbnQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFNlYXJjaENvbXBvbmVudD47XG59XG4iLCAiaW1wb3J0IHsgU2VjcmV0Q29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1NlY3JldENvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNTZWNyZXRDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWNyZXRDb21wb25lbnRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8U2VjcmV0Q29tcG9uZW50PiB7XG4gIHJldHVybiBTZWNyZXRDb21wb25lbnQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFNlY3JldENvbXBvbmVudD47XG59XG4iLCAiaW1wb3J0IHsgU2xpZGVyQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1NsaWRlckNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNTbGlkZXJDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTbGlkZXJDb21wb25lbnRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8U2xpZGVyQ29tcG9uZW50PiB7XG4gIHJldHVybiBTbGlkZXJDb21wb25lbnQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFNsaWRlckNvbXBvbmVudD47XG59XG4iLCAiaW1wb3J0IHsgVGV4dEFyZWFDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jVGV4dEFyZWFDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jVGV4dEFyZWFDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZXh0QXJlYUNvbXBvbmVudENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxUZXh0QXJlYUNvbXBvbmVudD4ge1xuICByZXR1cm4gVGV4dEFyZWFDb21wb25lbnQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFRleHRBcmVhQ29tcG9uZW50Pjtcbn1cbiIsICJpbXBvcnQgeyBUZXh0Q29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1RleHRDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jVGV4dENvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHRDb21wb25lbnRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8VGV4dENvbXBvbmVudD4ge1xuICByZXR1cm4gVGV4dENvbXBvbmVudCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8VGV4dENvbXBvbmVudD47XG59XG4iLCAiaW1wb3J0IHsgVG9nZ2xlQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1RvZ2dsZUNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNUb2dnbGVDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUb2dnbGVDb21wb25lbnRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8VG9nZ2xlQ29tcG9uZW50PiB7XG4gIHJldHVybiBUb2dnbGVDb21wb25lbnQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFRvZ2dsZUNvbXBvbmVudD47XG59XG4iLCAiaW1wb3J0IHsgVmFsdWVDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jVmFsdWVDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jVmFsdWVDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWx1ZUNvbXBvbmVudENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxWYWx1ZUNvbXBvbmVudDx1bmtub3duPj4ge1xuICByZXR1cm4gVmFsdWVDb21wb25lbnQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFZhbHVlQ29tcG9uZW50PHVua25vd24+Pjtcbn1cbiIsICJpbXBvcnQgeyBCb29sZWFuVmFsdWUgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jQm9vbGVhblZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0Jvb2xlYW5WYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJvb2xlYW5WYWx1ZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxCb29sZWFuVmFsdWU+IHtcbiAgcmV0dXJuIEJvb2xlYW5WYWx1ZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8Qm9vbGVhblZhbHVlPjtcbn1cbiIsICJpbXBvcnQgeyBEYXRlVmFsdWUgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jRGF0ZVZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0RhdGVWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVWYWx1ZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxEYXRlVmFsdWU+IHtcbiAgcmV0dXJuIERhdGVWYWx1ZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8RGF0ZVZhbHVlPjtcbn1cbiIsICJpbXBvcnQgeyBEdXJhdGlvblZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0R1cmF0aW9uVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jRHVyYXRpb25WYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldER1cmF0aW9uVmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8RHVyYXRpb25WYWx1ZT4ge1xuICByZXR1cm4gRHVyYXRpb25WYWx1ZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8RHVyYXRpb25WYWx1ZT47XG59XG4iLCAiaW1wb3J0IHsgRmlsZVZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0ZpbGVWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNGaWxlVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlVmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8RmlsZVZhbHVlPiB7XG4gIHJldHVybiBGaWxlVmFsdWUgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEZpbGVWYWx1ZT47XG59XG4iLCAiaW1wb3J0IHsgSFRNTFZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0hUTUxWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNIVE1MVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIVE1MVmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8SFRNTFZhbHVlPiB7XG4gIHJldHVybiBIVE1MVmFsdWUgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEhUTUxWYWx1ZT47XG59XG4iLCAiaW1wb3J0IHsgSWNvblZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0ljb25WYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNJY29uVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJY29uVmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8SWNvblZhbHVlPiB7XG4gIHJldHVybiBJY29uVmFsdWUgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEljb25WYWx1ZT47XG59XG4iLCAiaW1wb3J0IHsgSW1hZ2VWYWx1ZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNJbWFnZVZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0ltYWdlVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbWFnZVZhbHVlQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPEltYWdlVmFsdWU+IHtcbiAgcmV0dXJuIEltYWdlVmFsdWUgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEltYWdlVmFsdWU+O1xufVxuIiwgImltcG9ydCB7IExpbmtWYWx1ZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNMaW5rVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jTGlua1ZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlua1ZhbHVlQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPExpbmtWYWx1ZT4ge1xuICByZXR1cm4gTGlua1ZhbHVlIGFzIHVua25vd24gYXMgRXh0cmFjdENvbnN0cnVjdG9yPExpbmtWYWx1ZT47XG59XG4iLCAiaW1wb3J0IHsgTGlzdFZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0xpc3RWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNMaXN0VmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaXN0VmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8TGlzdFZhbHVlPiB7XG4gIHJldHVybiBMaXN0VmFsdWUgYXMgRXh0cmFjdENvbnN0cnVjdG9yPExpc3RWYWx1ZT47XG59XG4iLCAiaW1wb3J0IHsgTm90TnVsbFZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI05vdE51bGxWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNOb3ROdWxsVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROb3ROdWxsVmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8Tm90TnVsbFZhbHVlPiB7XG4gIHJldHVybiBOb3ROdWxsVmFsdWUgYXMgdW5rbm93biBhcyBFeHRyYWN0Q29uc3RydWN0b3I8Tm90TnVsbFZhbHVlPjtcbn1cbiIsICJpbXBvcnQgeyBOdWxsVmFsdWUgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jTnVsbFZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI051bGxWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE51bGxWYWx1ZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxOdWxsVmFsdWU+IHtcbiAgcmV0dXJuIE51bGxWYWx1ZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8TnVsbFZhbHVlPjtcbn1cbiIsICJpbXBvcnQgeyBOdW1iZXJWYWx1ZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNOdW1iZXJWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNOdW1iZXJWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE51bWJlclZhbHVlQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPE51bWJlclZhbHVlPiB7XG4gIHJldHVybiBOdW1iZXJWYWx1ZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8TnVtYmVyVmFsdWU+O1xufVxuIiwgImltcG9ydCB7IE9iamVjdFZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI09iamVjdFZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI09iamVjdFZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T2JqZWN0VmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8T2JqZWN0VmFsdWU+IHtcbiAgcmV0dXJuIE9iamVjdFZhbHVlIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxPYmplY3RWYWx1ZT47XG59XG4iLCAiaW1wb3J0IHsgUmVnRXhwVmFsdWUgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jUmVnRXhwVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jUmVnRXhwVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWdFeHBWYWx1ZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxSZWdFeHBWYWx1ZT4ge1xuICByZXR1cm4gUmVnRXhwVmFsdWUgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFJlZ0V4cFZhbHVlPjtcbn1cbiIsICJpbXBvcnQgeyBSZWxhdGl2ZURhdGVWYWx1ZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNSZWxhdGl2ZURhdGVWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNSZWxhdGl2ZURhdGVWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlbGF0aXZlRGF0ZVZhbHVlQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFJlbGF0aXZlRGF0ZVZhbHVlPiB7XG4gIHJldHVybiBSZWxhdGl2ZURhdGVWYWx1ZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8UmVsYXRpdmVEYXRlVmFsdWU+O1xufVxuIiwgImltcG9ydCB7IFN0cmluZ1ZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1N0cmluZ1ZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1N0cmluZ1ZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RyaW5nVmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8U3RyaW5nVmFsdWU+IHtcbiAgcmV0dXJuIFN0cmluZ1ZhbHVlIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxTdHJpbmdWYWx1ZT47XG59XG4iLCAiaW1wb3J0IHsgVGFnVmFsdWUgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jVGFnVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jVGFnVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWdWYWx1ZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxUYWdWYWx1ZT4ge1xuICByZXR1cm4gVGFnVmFsdWUgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFRhZ1ZhbHVlPjtcbn1cbiIsICJpbXBvcnQgeyBVcmxWYWx1ZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNVcmxWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNVcmxWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVybFZhbHVlQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFVybFZhbHVlPiB7XG4gIHJldHVybiBVcmxWYWx1ZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8VXJsVmFsdWU+O1xufVxuIiwgImltcG9ydCB7IFZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1ZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1ZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8VmFsdWU+IHtcbiAgcmV0dXJuIFZhbHVlIGFzIHVua25vd24gYXMgRXh0cmFjdENvbnN0cnVjdG9yPFZhbHVlPjtcbn1cbiIsICJpbXBvcnQgeyBFZGl0YWJsZUZpbGVWaWV3IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0VkaXRhYmxlRmlsZVZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jRWRpdGFibGVGaWxlVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVkaXRhYmxlRmlsZVZpZXdDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8RWRpdGFibGVGaWxlVmlldz4ge1xuICByZXR1cm4gRWRpdGFibGVGaWxlVmlldyBhcyBFeHRyYWN0Q29uc3RydWN0b3I8RWRpdGFibGVGaWxlVmlldz47XG59XG4iLCAiaW1wb3J0IHsgTWFya2Rvd25WaWV3IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI01hcmtkb3duVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNNYXJrZG93blZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXJrZG93blZpZXdDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8TWFya2Rvd25WaWV3PiB7XG4gIHJldHVybiBNYXJrZG93blZpZXcgYXMgRXh0cmFjdENvbnN0cnVjdG9yPE1hcmtkb3duVmlldz47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgQXBwTWVudUJhck1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvQXBwTWVudUJhck1hbmFnZXIuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEFwcE1lbnVCYXJNYW5hZ2VyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgQXBwTWVudUJhck1hbmFnZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcHBNZW51QmFyTWFuYWdlckNvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEFwcE1lbnVCYXJNYW5hZ2VyPiB7XG4gIHJldHVybiBhcHAuYXBwTWVudUJhck1hbmFnZXIuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEFwcE1lbnVCYXJNYW5hZ2VyPjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBBcHBTZXR0aW5nIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0FwcFNldHRpbmcuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEFwcFNldHRpbmd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBBcHBTZXR0aW5nfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXBwU2V0dGluZ0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEFwcFNldHRpbmc+IHtcbiAgcmV0dXJuIGFwcC5zZXR0aW5nLmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxBcHBTZXR0aW5nPjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBDbGkgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY2xpL0NsaS5kLnRzJztcbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgQ2xpfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgQ2xpfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xpQ29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8Q2xpPiB7XG4gIHJldHVybiBhcHAuY2xpLmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxDbGk+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IENvbW1hbmRzIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbW1hbmRzL0NvbW1hbmRzLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBDb21tYW5kc30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIENvbW1hbmRzfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tbWFuZHNDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxDb21tYW5kcz4ge1xuICByZXR1cm4gYXBwLmNvbW1hbmRzLmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxDb21tYW5kcz47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbUNTUyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jdXN0b20tY3NzL0N1c3RvbUNTUy5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBDdXN0b21DU1N9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBDdXN0b21DU1N9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXN0b21DU1NDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxDdXN0b21DU1M+IHtcbiAgcmV0dXJuIGFwcC5jdXN0b21Dc3MuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEN1c3RvbUNTUz47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IERyYWdNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2RyYWctbWFuYWdlci9EcmFnTWFuYWdlci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBEcmFnTWFuYWdlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIERyYWdNYW5hZ2VyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RHJhZ01hbmFnZXJDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxEcmFnTWFuYWdlcj4ge1xuICByZXR1cm4gYXBwLmRyYWdNYW5hZ2VyLmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxEcmFnTWFuYWdlcj47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEVkaXRvclN1Z2dlc3RzIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0VkaXRvclN1Z2dlc3RzLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEVkaXRvclN1Z2dlc3RzfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgRWRpdG9yU3VnZ2VzdHN9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFZGl0b3JTdWdnZXN0c0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEVkaXRvclN1Z2dlc3RzPiB7XG4gIHJldHVybiBhcHAud29ya3NwYWNlLmVkaXRvclN1Z2dlc3QuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEVkaXRvclN1Z2dlc3RzPjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgRW1iZWRSZWdpc3RyeSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9lbWJlZC1yZWdpc3RyeS9FbWJlZFJlZ2lzdHJ5LmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEVtYmVkUmVnaXN0cnl9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBFbWJlZFJlZ2lzdHJ5fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW1iZWRSZWdpc3RyeUNvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEVtYmVkUmVnaXN0cnk+IHtcbiAgcmV0dXJuIGFwcC5lbWJlZFJlZ2lzdHJ5LmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxFbWJlZFJlZ2lzdHJ5Pjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgRm9sZE1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvRm9sZE1hbmFnZXIuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgRm9sZE1hbmFnZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBGb2xkTWFuYWdlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvbGRNYW5hZ2VyQ29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8Rm9sZE1hbmFnZXI+IHtcbiAgcmV0dXJuIGFwcC5mb2xkTWFuYWdlci5jb25zdHJ1Y3RvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8Rm9sZE1hbmFnZXI+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEZyYW1lRG9tIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0ZyYW1lRG9tLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEZyYW1lRG9tfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEZyYW1lRG9tfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnJhbWVEb21Db25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8RnJhbWVEb20+IHtcbiAgcmV0dXJuIHdpbmRvdy5mcmFtZURvbS5jb25zdHJ1Y3RvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8RnJhbWVEb20+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBIb3RrZXlNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2hvdGtleS1tYW5hZ2VyL0hvdGtleU1hbmFnZXIuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgSG90a2V5TWFuYWdlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEhvdGtleU1hbmFnZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIb3RrZXlNYW5hZ2VyQ29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8SG90a2V5TWFuYWdlcj4ge1xuICByZXR1cm4gYXBwLmhvdGtleU1hbmFnZXIuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEhvdGtleU1hbmFnZXI+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBNZXRhZGF0YVR5cGVNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL21ldGFkYXRhLXR5cGUtbWFuYWdlci9NZXRhZGF0YVR5cGVNYW5hZ2VyLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIE1ldGFkYXRhVHlwZU1hbmFnZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBNZXRhZGF0YVR5cGVNYW5hZ2VyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWV0YWRhdGFUeXBlTWFuYWdlckNvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPE1ldGFkYXRhVHlwZU1hbmFnZXI+IHtcbiAgcmV0dXJuIGFwcC5tZXRhZGF0YVR5cGVNYW5hZ2VyLmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxNZXRhZGF0YVR5cGVNYW5hZ2VyPjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5ET00gfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvT2JzaWRpYW5ET00uZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgT2JzaWRpYW5ET019IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBPYnNpZGlhbkRPTX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9ic2lkaWFuRE9NQ29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8T2JzaWRpYW5ET00+IHtcbiAgcmV0dXJuIGFwcC5kb20uY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPE9ic2lkaWFuRE9NPjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgUGx1Z2lucyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9wbHVnaW5zL1BsdWdpbnMuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgUGx1Z2luc30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIFBsdWdpbnN9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQbHVnaW5zQ29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8UGx1Z2lucz4ge1xuICByZXR1cm4gYXBwLnBsdWdpbnMuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFBsdWdpbnM+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBSZWNlbnRGaWxlVHJhY2tlciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9SZWNlbnRGaWxlVHJhY2tlci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBSZWNlbnRGaWxlVHJhY2tlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIFJlY2VudEZpbGVUcmFja2VyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVjZW50RmlsZVRyYWNrZXJDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxSZWNlbnRGaWxlVHJhY2tlcj4ge1xuICByZXR1cm4gYXBwLndvcmtzcGFjZS5yZWNlbnRGaWxlVHJhY2tlci5jb25zdHJ1Y3RvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8UmVjZW50RmlsZVRyYWNrZXI+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBTaGFyZVJlY2VpdmVyIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL1NoYXJlUmVjZWl2ZXIuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgU2hhcmVSZWNlaXZlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIFNoYXJlUmVjZWl2ZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaGFyZVJlY2VpdmVyQ29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8U2hhcmVSZWNlaXZlcj4ge1xuICByZXR1cm4gYXBwLnNoYXJlUmVjZWl2ZXIuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFNoYXJlUmVjZWl2ZXI+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBTdGF0dXNCYXIgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvU3RhdHVzQmFyLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIFN0YXR1c0Jhcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIFN0YXR1c0Jhcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXR1c0JhckNvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPFN0YXR1c0Jhcj4ge1xuICByZXR1cm4gYXBwLnN0YXR1c0Jhci5jb25zdHJ1Y3RvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8U3RhdHVzQmFyPjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgVmlld1JlZ2lzdHJ5IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL3ZpZXctcmVnaXN0cnkvVmlld1JlZ2lzdHJ5LmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIFZpZXdSZWdpc3RyeX0gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIFZpZXdSZWdpc3RyeX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdSZWdpc3RyeUNvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPFZpZXdSZWdpc3RyeT4ge1xuICByZXR1cm4gYXBwLnZpZXdSZWdpc3RyeS5jb25zdHJ1Y3RvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8Vmlld1JlZ2lzdHJ5Pjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgV29ya3NwYWNlTGVhZkhpc3RvcnkgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvd29ya3NwYWNlLWxlYWYtaGlzdG9yeS9Xb3Jrc3BhY2VMZWFmSGlzdG9yeS5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBXb3Jrc3BhY2VMZWFmSGlzdG9yeX0gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIFdvcmtzcGFjZUxlYWZIaXN0b3J5fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya3NwYWNlTGVhZkhpc3RvcnlDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VMZWFmSGlzdG9yeT4ge1xuICBjb25zdCBsZWFmID0gYXBwLndvcmtzcGFjZS5nZXRNb3N0UmVjZW50TGVhZigpO1xuICBpZiAoIWxlYWYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHdvcmtzcGFjZSBsZWFmIGF2YWlsYWJsZSB0byBleHRyYWN0IFdvcmtzcGFjZUxlYWZIaXN0b3J5IGNvbnN0cnVjdG9yJyk7XG4gIH1cbiAgcmV0dXJuIGxlYWYuaGlzdG9yeS5jb25zdHJ1Y3RvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlTGVhZkhpc3Rvcnk+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBCYXNlc0NvbnRleHQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9iYXNlcy9CYXNlc0NvbnRleHQuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEJhc2VzUXVlcnkgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9iYXNlcy9CYXNlc1F1ZXJ5LmQudHMnO1xuXG5pbXBvcnQgeyBJbnRlcm5hbFBsdWdpbk5hbWUgfSBmcm9tICcuLi8uLi8uLi8uLi9jb25zdGFudHMvSW50ZXJuYWxQbHVnaW5OYW1lLnRzJztcbmltcG9ydCB7IGdldFF1ZXJ5Q29udHJvbGxlckNvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vYXVnbWVudGF0aW9ucy9iYXNlcy9nZXRRdWVyeUNvbnRyb2xsZXJDb25zdHJ1Y3Rvci50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgQmFzZXNDb250ZXh0fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgQmFzZXNDb250ZXh0fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFzZXNDb250ZXh0Q29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8QmFzZXNDb250ZXh0PiB7XG4gIGNvbnN0IGJhc2VzUGx1Z2luID0gYXBwLmludGVybmFsUGx1Z2lucy5nZXRQbHVnaW5CeUlkKEludGVybmFsUGx1Z2luTmFtZS5CYXNlcyk7XG4gIGlmICghYmFzZXNQbHVnaW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAke0ludGVybmFsUGx1Z2luTmFtZS5CYXNlc30gcGx1Z2luIGlzIG5vdCBsb2FkZWQuYCk7XG4gIH1cbiAgY29uc3QgcXVlcnlDb250cm9sbGVyQ29uc3RydWN0b3IgPSBnZXRRdWVyeUNvbnRyb2xsZXJDb25zdHJ1Y3RvcigpO1xuICBjb25zdCBxdWVyeUNvbnRyb2xsZXIgPSBuZXcgcXVlcnlDb250cm9sbGVyQ29uc3RydWN0b3IoYXBwLCBiYXNlc1BsdWdpbi5pbnN0YW5jZSwgY3JlYXRlRGl2KCkpO1xuICBxdWVyeUNvbnRyb2xsZXIucXVlcnkgPSB7fSBhcyBCYXNlc1F1ZXJ5O1xuICBjb25zdCBiYXNlc0NvbnRleHQgPSBxdWVyeUNvbnRyb2xsZXIuYnVpbGRCYXNlc0NvbnRleHQoKTtcbiAgcmV0dXJuIGJhc2VzQ29udGV4dC5jb25zdHJ1Y3RvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8QmFzZXNDb250ZXh0Pjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEJhc2VzUXVlcnlDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvQmFzZXNRdWVyeUNvbnN0cnVjdG9yLmQudHMnO1xuXG5pbXBvcnQgeyBnZXRCYXNlc0NvbnRyb2xsZXJGcm9tUmVuZGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vZnVuY3Rpb25zL2dldEJhc2VzQ29udHJvbGxlckZyb21SZW5kZXIudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEJhc2VzUXVlcnl9IGNvbnN0cnVjdG9yICh0aGUgYC5iYXNlYCBwYXJzZXIsIGV4cG9zaW5nIHRoZSBzdGF0aWMgYGZyb21TdHJpbmdgKS5cbiAqXG4gKiBgQmFzZXNRdWVyeWAgaGFzIG5vIHB1YmxpYyBgb2JzaWRpYW5gIGV4cG9ydCBhbmQgbm8gbGVhZi1mcmVlIGZhY3RvcnksIHNvIHRoZSBjbGFzcyBpcyBoYXJ2ZXN0ZWQgYXRcbiAqIHJ1bnRpbWU6IGEgdGhyb3dhd2F5IGJhc2UgaXMgcmVuZGVyZWQgb2ZmLXNjcmVlbiAodmlhIHtAbGluayBnZXRCYXNlc0NvbnRyb2xsZXJGcm9tUmVuZGVyfSkgYW5kIHRoZVxuICogY29uc3RydWN0b3IgaXMgcmVhZCBvZmYgdGhlIHJlc3VsdGluZyBxdWVyeS4gVGhlIHRocm93YXdheSByZW5kZXIgaXMgdG9ybiBkb3duIGJlZm9yZSByZXR1cm5pbmcuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEJhc2VzUXVlcnl9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRCYXNlc1F1ZXJ5Q29uc3RydWN0b3IoYXBwOiBBcHApOiBQcm9taXNlPEJhc2VzUXVlcnlDb25zdHJ1Y3Rvcj4ge1xuICBjb25zdCBjb21wb25lbnQgPSBuZXcgQ29tcG9uZW50KCk7XG4gIHRyeSB7XG4gICAgY29uc3QgY29udHJvbGxlciA9IGF3YWl0IGdldEJhc2VzQ29udHJvbGxlckZyb21SZW5kZXIoYXBwLCAndmlld3M6IFtdXFxuJywgJ2dldEJhc2VzUXVlcnlDb25zdHJ1Y3Rvci5iYXNlJywgY29tcG9uZW50KTtcbiAgICBjb25zdCBxdWVyeSA9IGNvbnRyb2xsZXIucXVlcnk7XG4gICAgaWYgKCFxdWVyeSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgcmVuZGVyZWQgYmFzZSBkaWQgbm90IHByb2R1Y2UgYSBxdWVyeS4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXJ5LmNvbnN0cnVjdG9yIGFzIHVua25vd24gYXMgQmFzZXNRdWVyeUNvbnN0cnVjdG9yO1xuICB9IGZpbmFsbHkge1xuICAgIGNvbXBvbmVudC51bmxvYWQoKTtcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBDb21wb25lbnRcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBNYXJrZG93blJlbmRlcmVyIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEJhc2VzQ29udHJvbGxlciB9IGZyb20gJy4uLy4uL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL2Jhc2VzL0Jhc2VzQ29udHJvbGxlci5kLnRzJztcblxuLyoqXG4gKiBSZW5kZXIgYSBiYXNlIGludG8gYSBkZXRhY2hlZCwgb2ZmLXNjcmVlbiBlbGVtZW50IGFuZCByZXR1cm4gdGhlIGxpdmUge0BsaW5rIEJhc2VzQ29udHJvbGxlcn0gdGhhdCBkcml2ZXNcbiAqIGl0LiBUaGlzIGlzIHRoZSBsZWFmLWZyZWUgcm91dGUgdG8gaGVhZGxlc3MgYmFzZSBldmFsdWF0aW9uOiBpdCBydW5zIE9ic2lkaWFuJ3Mgb3duIGJhc2UtZW1iZWQgcHJvY2Vzc29yXG4gKiB2aWEgdGhlIHB1YmxpYyB7QGxpbmsgb2JzaWRpYW4jTWFya2Rvd25SZW5kZXJlci5yZW5kZXJ9LCB0aGVuIGxvY2F0ZXMgdGhlIGNvbnRyb2xsZXIgaW4gdGhlIHJlbmRlcidzXG4gKiBjb21wb25lbnQgdHJlZS5cbiAqXG4gKiBUaGUgY2FsbGVyIG93bnMgYGNvbXBvbmVudGAncyBsaWZlY3ljbGUgYW5kIE1VU1QgY2FsbCBgY29tcG9uZW50LnVubG9hZCgpYCBvbmNlIGRvbmUgd2l0aCB0aGUgY29udHJvbGxlclxuICogKHdoaWNoIGFsc28gZGV0YWNoZXMgdGhlIHJlbmRlcmVkIGVsZW1lbnQpLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIGNvbnRlbnQgLSBUaGUgYC5iYXNlYCBmaWxlIGNvbnRlbnQgKHRoZSBib2R5IG9mIGEgYGJhc2VgIGNvZGUgYmxvY2spLlxuICogQHBhcmFtIHNvdXJjZVBhdGggLSBUaGUgcGF0aCBzdXBwbHlpbmcgdGhlIHF1ZXJ5J3MgZmlsZSBjb250ZXh0LlxuICogQHBhcmFtIGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgdGhhdCBvd25zIHRoZSByZW5kZXI7IHRoZSBjYWxsZXIgdW5sb2FkcyBpdC5cbiAqIEByZXR1cm5zIFRoZSBsaXZlIHtAbGluayBCYXNlc0NvbnRyb2xsZXJ9IGZvciB0aGUgcmVuZGVyZWQgYmFzZS5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QmFzZXNDb250cm9sbGVyRnJvbVJlbmRlcihcbiAgYXBwOiBBcHAsXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgc291cmNlUGF0aDogc3RyaW5nLFxuICBjb21wb25lbnQ6IENvbXBvbmVudFxuKTogUHJvbWlzZTxCYXNlc0NvbnRyb2xsZXI+IHtcbiAgLy8gVGhlIGBfY2hpbGRyZW5gIHdhbGsgcGx1cyB0aGUgY29udHJvbGxlcidzIGBxdWVyeWAgLyBgcmVzdWx0c2AgYXJlIHJ1bnRpbWUgaW50ZXJuYWxzIG5vdCBtb2RlbGVkIG9uXG4gIC8vIENvbXBvbmVudCwgc28gdGhleSBhcmUgdHlwZWQgbG9jYWxseSBwdXJlbHkgdG8gYnJlYWR0aC1maXJzdCBzZWFyY2ggdGhlIHJlbmRlciB0cmVlLlxuICBpbnRlcmZhY2UgQ29tcG9uZW50VHJlZU5vZGUge1xuICAgIC8qKiBUaGUgY2hpbGQgY29tcG9uZW50cywgaWYgYW55LiAqL1xuICAgIF9jaGlsZHJlbj86IENvbXBvbmVudFRyZWVOb2RlW107XG5cbiAgICAvKiogVGhlIGN1cnJlbnQgcXVlcnksIHByZXNlbnQgb24gYSBjb250cm9sbGVyLiAqL1xuICAgIHF1ZXJ5PzogdW5rbm93bjtcblxuICAgIC8qKiBUaGUgcXVlcnkgcmVzdWx0cywgcHJlc2VudCBhcyBhIGBNYXBgIG9uIGEgY29udHJvbGxlci4gKi9cbiAgICByZXN1bHRzPzogdW5rbm93bjtcbiAgfVxuXG4gIC8vIFRoZSBlbGVtZW50IG11c3QgYmUgYXR0YWNoZWQgdG8gdGhlIGRvY3VtZW50IChub3QgbWVyZWx5IGRldGFjaGVkKSBmb3IgdGhlIGJhc2UncyBpbml0aWFsIHNjYW4gdG8gcnVuLFxuICAvLyBzbyBpdCBpcyBwb3NpdGlvbmVkIG9mZi1zY3JlZW4gcmF0aGVyIHRoYW4gaGlkZGVuLiBJdCBpcyByZW1vdmVkIHdoZW4gdGhlIGNhbGxlciB1bmxvYWRzIGBjb21wb25lbnRgLlxuICBjb25zdCBjb250YWluZXJFbCA9IGNyZWF0ZURpdigpO1xuICBjb250YWluZXJFbC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gIGNvbnRhaW5lckVsLnN0eWxlLmxlZnQgPSAnLTk5OTlweCc7XG4gIGNvbnRhaW5lckVsLnN0eWxlLndpZHRoID0gJzYwMHB4JztcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb250YWluZXJFbCk7XG4gIGNvbXBvbmVudC5yZWdpc3RlcigoKSA9PiB7XG4gICAgY29udGFpbmVyRWwucmVtb3ZlKCk7XG4gIH0pO1xuXG4gIGF3YWl0IE1hcmtkb3duUmVuZGVyZXIucmVuZGVyKGFwcCwgYFxcYFxcYFxcYGJhc2VcXG4ke2NvbnRlbnR9XFxuXFxgXFxgXFxgXFxuYCwgY29udGFpbmVyRWwsIHNvdXJjZVBhdGgsIGNvbXBvbmVudCk7XG5cbiAgY29uc3QgcXVldWU6IENvbXBvbmVudFRyZWVOb2RlW10gPSBbY29tcG9uZW50IGFzIHVua25vd24gYXMgQ29tcG9uZW50VHJlZU5vZGVdO1xuICBjb25zdCBzZWVuID0gbmV3IFNldDxDb21wb25lbnRUcmVlTm9kZT4oKTtcblxuICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IG5vZGUgPSBxdWV1ZS5zaGlmdCgpO1xuICAgIGlmICghbm9kZSB8fCBzZWVuLmhhcyhub2RlKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHNlZW4uYWRkKG5vZGUpO1xuXG4gICAgaWYgKG5vZGUucmVzdWx0cyBpbnN0YW5jZW9mIE1hcCAmJiAncXVlcnknIGluIG5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlIGFzIHVua25vd24gYXMgQmFzZXNDb250cm9sbGVyO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5fY2hpbGRyZW4gPz8gW10pIHtcbiAgICAgIHF1ZXVlLnB1c2goY2hpbGQpO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGxvY2F0ZSB0aGUgQmFzZXNDb250cm9sbGVyIGluIHRoZSByZW5kZXJlZCBjb21wb25lbnQgdHJlZS4nKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxQbHVnaW4gfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9JbnRlcm5hbFBsdWdpbi5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBJbnRlcm5hbFBsdWdpbn0gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEludGVybmFsUGx1Z2lufSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW50ZXJuYWxQbHVnaW5Db25zdHJ1Y3RvcjxJbnN0YW5jZT4oYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8SW50ZXJuYWxQbHVnaW48SW5zdGFuY2U+PiB7XG4gIGNvbnN0IGFueVBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYXBwLmludGVybmFsUGx1Z2lucy5wbHVnaW5zKVswXTtcbiAgaWYgKCFhbnlQbHVnaW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGludGVybmFsIHBsdWdpbiBmb3VuZCcpO1xuICB9XG4gIHJldHVybiBhbnlQbHVnaW4uY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEludGVybmFsUGx1Z2luPEluc3RhbmNlPj47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsUGx1Z2lucyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL0ludGVybmFsUGx1Z2lucy5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBJbnRlcm5hbFBsdWdpbnN9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBJbnRlcm5hbFBsdWdpbnN9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnRlcm5hbFBsdWdpbnNDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxJbnRlcm5hbFBsdWdpbnM+IHtcbiAgcmV0dXJuIGFwcC5pbnRlcm5hbFBsdWdpbnMuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEludGVybmFsUGx1Z2lucz47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IFZpZXdUeXBlVHlwZSB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy92aWV3cy9WaWV3VHlwZVR5cGUuZC5kLnRzJztcbmltcG9ydCB0eXBlIHsgVmlld1R5cGVWaWV3TWFwcGluZyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy92aWV3cy9WaWV3VHlwZVZpZXdNYXBwaW5nLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgdmlldyBjb25zdHJ1Y3RvciBieSB2aWV3IHR5cGUuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAuXG4gKiBAcGFyYW0gdmlld1R5cGUgLSBUaGUgdmlldyB0eXBlLlxuICogQHJldHVybnMgVGhlIHZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGU8VFZpZXdUeXBlIGV4dGVuZHMgVmlld1R5cGVUeXBlPihcbiAgYXBwOiBBcHAsXG4gIHZpZXdUeXBlOiBUVmlld1R5cGVcbik6IEV4dHJhY3RDb25zdHJ1Y3RvcjxWaWV3VHlwZVZpZXdNYXBwaW5nW1RWaWV3VHlwZV0+IHtcbiAgY29uc3QgbGVhZiA9IGFwcC53b3Jrc3BhY2UuY3JlYXRlTGVhZkluVGFiR3JvdXAoKTtcbiAgdHJ5IHtcbiAgICBjb25zdCB2aWV3Q3JlYXRvciA9IGFwcC52aWV3UmVnaXN0cnkuZ2V0Vmlld0NyZWF0b3JCeVR5cGUodmlld1R5cGUpO1xuICAgIGlmICghdmlld0NyZWF0b3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVmlldyBjcmVhdG9yIG5vdCBmb3VuZCcpO1xuICAgIH1cbiAgICBjb25zdCB2aWV3ID0gdmlld0NyZWF0b3IobGVhZik7XG4gICAgcmV0dXJuIHZpZXcuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFZpZXdUeXBlVmlld01hcHBpbmdbVFZpZXdUeXBlXT47XG4gIH0gZmluYWxseSB7XG4gICAgbGVhZi5kZXRhY2goKTtcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBBbGxQcm9wZXJ0aWVzVmlldyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL3Byb3BlcnRpZXMvQWxsUHJvcGVydGllc1ZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEFsbFByb3BlcnRpZXNWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgQWxsUHJvcGVydGllc1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxQcm9wZXJ0aWVzVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEFsbFByb3BlcnRpZXNWaWV3PiB7XG4gIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuQWxsUHJvcGVydGllcyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEF1ZGlvVmlldyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy92aWV3cy9BdWRpb1ZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEF1ZGlvVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEF1ZGlvVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEF1ZGlvVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEF1ZGlvVmlldz4ge1xuICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLkF1ZGlvKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgQmFja2xpbmtWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvYmFja2xpbmsvQmFja2xpbmtWaWV3LmQudHMnO1xuXG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBCYWNrbGlua1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBCYWNrbGlua1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCYWNrbGlua1ZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxCYWNrbGlua1ZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5CYWNrbGluayk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEJhc2VzVmlldyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL2Jhc2VzL0Jhc2VzVmlldy5kLnRzJztcblxuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgQmFzZXNWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgQmFzZXNWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFzZXNWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8QmFzZXNWaWV3PiB7XG4gIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuQmFzZXMpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBCb29rbWFya3NWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvYm9va21hcmtzL0Jvb2ttYXJrc1ZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEJvb2ttYXJrc1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBCb29rbWFya3NWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Qm9va21hcmtzVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEJvb2ttYXJrc1ZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5Cb29rbWFya3MpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBDYW52YXNWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvY2FudmFzL0NhbnZhc1ZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIENhbnZhc1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBDYW52YXNWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FudmFzVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPENhbnZhc1ZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5DYW52YXMpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBFbXB0eVZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvdmlld3MvRW1wdHlWaWV3LmQudHMnO1xuXG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBFbXB0eVZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBFbXB0eVZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbXB0eVZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxFbXB0eVZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5FbXB0eSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEZpbGVFeHBsb3JlclZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9maWxlLWV4cGxvcmVyL0ZpbGVFeHBsb3JlclZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEZpbGVFeHBsb3JlclZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBGaWxlRXhwbG9yZXJWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZUV4cGxvcmVyVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEZpbGVFeHBsb3JlclZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5GaWxlRXhwbG9yZXIpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBGaWxlUHJvcGVydGllc1ZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9wcm9wZXJ0aWVzL0ZpbGVQcm9wZXJ0aWVzVmlldy5kLnRzJztcblxuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgRmlsZVByb3BlcnRpZXNWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgRmlsZVByb3BlcnRpZXNWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZVByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8RmlsZVByb3BlcnRpZXNWaWV3PiB7XG4gIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuRmlsZVByb3BlcnRpZXMpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBHcmFwaFZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9ncmFwaC9HcmFwaFZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEdyYXBoVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEdyYXBoVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdyYXBoVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEdyYXBoVmlldz4ge1xuICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLkdyYXBoKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgSW1hZ2VWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL3ZpZXdzL0ltYWdlVmlldy5kLnRzJztcblxuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgSW1hZ2VWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgSW1hZ2VWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW1hZ2VWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8SW1hZ2VWaWV3PiB7XG4gIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuSW1hZ2UpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBMb2NhbEdyYXBoVmlldyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL2dyYXBoL0xvY2FsR3JhcGhWaWV3LmQudHMnO1xuXG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBMb2NhbEdyYXBoVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIExvY2FsR3JhcGhWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9jYWxHcmFwaFZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxMb2NhbEdyYXBoVmlldz4ge1xuICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLkxvY2FsR3JhcGgpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBPdXRnb2luZ0xpbmtWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvb3V0Z29pbmctbGluay9PdXRnb2luZ0xpbmtWaWV3LmQudHMnO1xuXG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBPdXRnb2luZ0xpbmtWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgT3V0Z29pbmdMaW5rVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE91dGdvaW5nTGlua1ZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxPdXRnb2luZ0xpbmtWaWV3PiB7XG4gIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuT3V0Z29pbmdMaW5rKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgT3V0bGluZVZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9vdXRsaW5lL091dGxpbmVWaWV3LmQudHMnO1xuXG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBPdXRsaW5lVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIE91dGxpbmVWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3V0bGluZVZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxPdXRsaW5lVmlldz4ge1xuICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLk91dGxpbmUpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBQZGZWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL3ZpZXdzL1BkZlZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIFBkZlZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBQZGZWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGRmVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPFBkZlZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5QZGYpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBSZWxlYXNlTm90ZXNWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL3ZpZXdzL1JlbGVhc2VOb3Rlc1ZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIFJlbGVhc2VOb3Rlc1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBSZWxlYXNlTm90ZXNWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVsZWFzZU5vdGVzVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPFJlbGVhc2VOb3Rlc1ZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5SZWxlYXNlTm90ZXMpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBTZWFyY2hWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvZ2xvYmFsLXNlYXJjaC9TZWFyY2hWaWV3LmQudHMnO1xuXG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBTZWFyY2hWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgU2VhcmNoVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlYXJjaFZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxTZWFyY2hWaWV3PiB7XG4gIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuU2VhcmNoKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgU3luY1ZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9zeW5jL1N5bmNWaWV3LmQudHMnO1xuXG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBTeW5jVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIFN5bmNWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3luY1ZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxTeW5jVmlldz4ge1xuICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLlN5bmMpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBUYWdWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL3ZpZXdzL1RhZ1ZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIFRhZ1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBUYWdWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFnVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPFRhZ1ZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5UYWcpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBWaWRlb1ZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvdmlld3MvVmlkZW9WaWV3LmQudHMnO1xuXG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBWaWRlb1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBWaWRlb1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWRlb1ZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxWaWRlb1ZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5WaWRlbyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IFdlYnZpZXdlckhpc3RvcnlWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvd2Vidmlld2VyL1dlYnZpZXdlckhpc3RvcnlWaWV3LmQudHMnO1xuXG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBXZWJ2aWV3ZXJIaXN0b3J5Vmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIFdlYnZpZXdlckhpc3RvcnlWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2Vidmlld2VySGlzdG9yeVZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxXZWJ2aWV3ZXJIaXN0b3J5Vmlldz4ge1xuICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLldlYnZpZXdlckhpc3RvcnkpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBXZWJ2aWV3ZXJWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvd2Vidmlld2VyL1dlYnZpZXdlclZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIFdlYnZpZXdlclZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBXZWJ2aWV3ZXJWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2Vidmlld2VyVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPFdlYnZpZXdlclZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5XZWJ2aWV3ZXIpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VQcm90b2NvbEhhbmRsZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvd29ya3NwYWNlL1dvcmtzcGFjZVByb3RvY29sSGFuZGxlci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBXb3Jrc3BhY2VQcm90b2NvbEhhbmRsZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBXb3Jrc3BhY2VQcm90b2NvbEhhbmRsZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3Jrc3BhY2VQcm90b2NvbEhhbmRsZXJDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VQcm90b2NvbEhhbmRsZXI+IHtcbiAgcmV0dXJuIGFwcC53b3Jrc3BhY2UucHJvdG9jb2xIYW5kbGVyLmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VQcm90b2NvbEhhbmRsZXI+O1xufVxuIiwgIi8qKlxuICogR2V0IHRoZSBwYXJlbnQgZm9sZGVyIHBhdGggb2YgYSBnaXZlbiBwYXRoLlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdG8gZ2V0IHRoZSBwYXJlbnQgZm9sZGVyIHBhdGggb2YuXG4gKiBAcmV0dXJucyBUaGUgcGFyZW50IGZvbGRlciBwYXRoLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJlbnRGb2xkZXJQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcLz9bXi9dKiQvLCAnJykgfHwgJy8nO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBURm9sZGVyXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgZ2V0VEZvbGRlckNvbnN0cnVjdG9yIH0gZnJvbSAnLi4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0VEZvbGRlckNvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB7IHBhcmVudEZvbGRlclBhdGggfSBmcm9tICcuLi91dGlscy9QYXRoVXRpbHMudHMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW5kIHByb3Blcmx5IGluaXRpYWxpemVzIHRoZSBpbnN0YW5jZSBvZiB7QGxpbmsgb2JzaWRpYW4jVEZvbGRlcn0gZXZlbiB0aGUgdW5kZXJseWluZyBmb2xkZXIgZG9lcyBub3QgZXhpc3QuXG4gKiBUaGlzIGRvZXNuJ3QgY3JlYXRlIHRoZSBtaXNzaW5nIGZvbGRlciBvbiB0aGUgZmlsZSBzeXN0ZW0uXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBmb2xkZXIuXG4gKiBAcmV0dXJucyBUaGUgY3JlYXRlZCB7QGxpbmsgb2JzaWRpYW4jVEZvbGRlcn0gaW5zdGFuY2UuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRGb2xkZXJJbnN0YW5jZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogVEZvbGRlciB7XG4gIGxldCBmb2xkZXIgPSBhcHAudmF1bHQuZ2V0Rm9sZGVyQnlQYXRoKHBhdGgpO1xuICBpZiAoZm9sZGVyKSB7XG4gICAgcmV0dXJuIGZvbGRlcjtcbiAgfVxuXG4gIGZvbGRlciA9IG5ldyAoZ2V0VEZvbGRlckNvbnN0cnVjdG9yKCkpKGFwcC52YXVsdCwgcGF0aCk7XG4gIGZvbGRlci5wYXJlbnQgPSBjcmVhdGVURm9sZGVySW5zdGFuY2UoYXBwLCBwYXJlbnRGb2xkZXJQYXRoKHBhdGgpKTtcbiAgZm9sZGVyLmRlbGV0ZWQgPSB0cnVlO1xuICByZXR1cm4gZm9sZGVyO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBURmlsZVxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGdldFRGaWxlQ29uc3RydWN0b3IgfSBmcm9tICcuLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRURmlsZUNvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB7IHBhcmVudEZvbGRlclBhdGggfSBmcm9tICcuLi91dGlscy9QYXRoVXRpbHMudHMnO1xuaW1wb3J0IHsgY3JlYXRlVEZvbGRlckluc3RhbmNlIH0gZnJvbSAnLi9jcmVhdGVURm9sZGVySW5zdGFuY2UudHMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW5kIHByb3Blcmx5IGluaXRpYWxpemVzIHRoZSBpbnN0YW5jZSBvZiB7QGxpbmsgb2JzaWRpYW4jVEZpbGV9IGV2ZW4gdGhlIHVuZGVybHlpbmcgZmlsZSBkb2VzIG5vdCBleGlzdC5cbiAqIFRoaXMgZG9lc24ndCBjcmVhdGUgdGhlIG1pc3NpbmcgZmlsZSBvbiB0aGUgZmlsZSBzeXN0ZW0uXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBmaWxlLlxuICogQHJldHVybnMgVGhlIGNyZWF0ZWQge0BsaW5rIG9ic2lkaWFuI1RGaWxlfSBpbnN0YW5jZS5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVEZpbGVJbnN0YW5jZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogVEZpbGUge1xuICBsZXQgZmlsZSA9IGFwcC52YXVsdC5nZXRGaWxlQnlQYXRoKHBhdGgpO1xuICBpZiAoZmlsZSkge1xuICAgIHJldHVybiBmaWxlO1xuICB9XG5cbiAgZmlsZSA9IG5ldyAoZ2V0VEZpbGVDb25zdHJ1Y3RvcigpKShhcHAudmF1bHQsIHBhdGgpO1xuICBmaWxlLnBhcmVudCA9IGNyZWF0ZVRGb2xkZXJJbnN0YW5jZShhcHAsIHBhcmVudEZvbGRlclBhdGgocGF0aCkpO1xuICBmaWxlLmRlbGV0ZWQgPSB0cnVlO1xuICByZXR1cm4gZmlsZTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgQmFzZXNFbnRyeVxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgZ2V0QmFzZXNDb250cm9sbGVyRnJvbVJlbmRlciB9IGZyb20gJy4vZ2V0QmFzZXNDb250cm9sbGVyRnJvbVJlbmRlci50cyc7XG5cbi8qKlxuICogRXZhbHVhdGUgYSBgLmJhc2VgIGZpbGUgaW4gaGVhZGxlc3MgbW9kZSBcdTIwMTQgd2l0aCBubyBsZWFmIG9yIG9wZW4gdmlldyBcdTIwMTQgYW5kIHJldHVybiBpdHMgZW50cmllcy5cbiAqXG4gKiBJdCByZW5kZXJzIHRoZSBiYXNlIG9mZi1zY3JlZW4gdmlhIHtAbGluayBnZXRCYXNlc0NvbnRyb2xsZXJGcm9tUmVuZGVyfSwgd2FpdHMgZm9yIHRoZSBpbml0aWFsIHZhdWx0IHNjYW5cbiAqIHRvIHNldHRsZSwgdGhlbiByZWFkcyB0aGUgY29udHJvbGxlcidzIHJlc3VsdHMuIEV2ZXJ5dGhpbmcgaXMgdG9ybiBkb3duIGJlZm9yZSByZXR1cm5pbmcuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gY29udGVudCAtIFRoZSBgLmJhc2VgIGZpbGUgY29udGVudCAodGhlIGJvZHkgb2YgYSBgYmFzZWAgY29kZSBibG9jaykuXG4gKiBAcGFyYW0gc291cmNlUGF0aCAtIFRoZSBwYXRoIHN1cHBseWluZyB0aGUgcXVlcnkncyBmaWxlIGNvbnRleHQuXG4gKiBAcmV0dXJucyBUaGUgZXZhbHVhdGVkIGJhc2UgZW50cmllcy5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXZhbHVhdGVCYXNlSGVhZGxlc3MoYXBwOiBBcHAsIGNvbnRlbnQ6IHN0cmluZywgc291cmNlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxCYXNlc0VudHJ5W10+IHtcbiAgY29uc3QgU0NBTl9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDUwO1xuICBjb25zdCBTQ0FOX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMzAwMDA7XG5cbiAgY29uc3QgY29tcG9uZW50ID0gbmV3IENvbXBvbmVudCgpO1xuICB0cnkge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBhd2FpdCBnZXRCYXNlc0NvbnRyb2xsZXJGcm9tUmVuZGVyKGFwcCwgY29udGVudCwgc291cmNlUGF0aCwgY29tcG9uZW50KTtcblxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIHdoaWxlIChjb250cm9sbGVyLmluaXRpYWxTY2FuKSB7XG4gICAgICBpZiAocGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWUgPiBTQ0FOX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGltZWQgb3V0IHdhaXRpbmcgZm9yIHRoZSBiYXNlIGluaXRpYWwgc2NhbiB0byBzZXR0bGUuJyk7XG4gICAgICB9XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICB3aW5kb3cuc2V0VGltZW91dChyZXNvbHZlLCBTQ0FOX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRyb2xsZXIucmVzdWx0cy52YWx1ZXMoKSk7XG4gIH0gZmluYWxseSB7XG4gICAgY29tcG9uZW50LnVubG9hZCgpO1xuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRGF0YUFkYXB0ZXJFeCB9IGZyb20gJy4uLy4uL2ludGVybmFscy9EYXRhQWRhcHRlckV4LmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgaW5zdGFuY2Ugb2YgdGhlIGN1cnJlbnQge0BsaW5rIERhdGFBZGFwdGVyRXh9LlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUgZGF0YSBhZGFwdGVyIGV4dGVuc2lvbi5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0YUFkYXB0ZXJFeChhcHA6IEFwcCk6IERhdGFBZGFwdGVyRXgge1xuICByZXR1cm4gYXBwLnZhdWx0LmFkYXB0ZXIgYXMgRGF0YUFkYXB0ZXJFeDtcbn1cbiIsICJpbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBQbGF0Zm9ybUV4IH0gZnJvbSAnLi4vLi4vaW50ZXJuYWxzL1BsYXRmb3JtRXguZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jUGxhdGZvcm19IGNvbnN0YW50IGFzIHtAbGluayBQbGF0Zm9ybUV4fS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgcGxhdGZvcm0gZXh0ZW5zaW9uLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQbGF0Zm9ybUV4KCk6IFBsYXRmb3JtRXgge1xuICByZXR1cm4gUGxhdGZvcm0gYXMgUGxhdGZvcm1FeDtcbn1cbiIsICJpbXBvcnQgeyBsb2FkTWVybWFpZCBhcyBsb2FkTWVybWFpZE9yaWdpbmFsIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IE1lcm1haWQgfSBmcm9tICcuLi8uLi8uLi9tZXJtYWlkL2ludGVybmFscy9NZXJtYWlkLmQudHMnO1xuXG4vKipcbiAqIExvYWQgTWVybWFpZCBhbmQgcmV0dXJuIGEgcHJvbWlzZSB0byB0aGUgZ2xvYmFsIG1lcm1haWQgb2JqZWN0LlxuICogQ2FuIGFsc28gdXNlIGB3aW5kb3cubWVybWFpZGAgYWZ0ZXIgdGhpcyBwcm9taXNlIHJlc29sdmVzIHRvIGdldCB0aGUgc2FtZSByZWZlcmVuY2UuXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGdsb2JhbCBgd2luZG93Lm1lcm1haWRgIG9iamVjdC5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL21lcm1haWQuanMub3JnLyB8IE9mZmljaWFsIE1lcm1haWQgZG9jdW1lbnRhdGlvbn0uXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZE1lcm1haWQoKTogUHJvbWlzZTxNZXJtYWlkPiB7XG4gIHJldHVybiAoYXdhaXQgbG9hZE1lcm1haWRPcmlnaW5hbCgpKSBhcyBNZXJtYWlkO1xufVxuIiwgImltcG9ydCB7IGxvYWRQZGZKcyBhcyBsb2FkUGRmSnNPcmlnaW5hbCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBQZGZKc01vZHVsZSB9IGZyb20gJy4uLy4uLy4uL3BkZmpzLWRpc3QvaW50ZXJuYWxzL1BkZkpzTW9kdWxlLmQudHMnO1xuXG4vKipcbiAqIExvYWQgUERGLmpzIGFuZCByZXR1cm4gYSBwcm9taXNlIHRvIHRoZSBnbG9iYWwgcGRmanNMaWIgb2JqZWN0LlxuICogQ2FuIGFsc28gdXNlIGB3aW5kb3cucGRmanNMaWJgIGFmdGVyIHRoaXMgcHJvbWlzZSByZXNvbHZlcyB0byBnZXQgdGhlIHNhbWUgcmVmZXJlbmNlLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBnbG9iYWwgYHdpbmRvdy5wZGZqc0xpYmAgb2JqZWN0LlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW96aWxsYS5naXRodWIuaW8vcGRmLmpzLyB8IE9mZmljaWFsIFBERi5qcyBkb2N1bWVudGF0aW9ufS5cbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkUGRmSnMoKTogUHJvbWlzZTxQZGZKc01vZHVsZT4ge1xuICByZXR1cm4gKGF3YWl0IGxvYWRQZGZKc09yaWdpbmFsKCkpIGFzIFBkZkpzTW9kdWxlO1xufVxuIiwgImltcG9ydCB7IGxvYWRQcmlzbSBhcyBsb2FkUHJpc21PcmlnaW5hbCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBQcmlzbU1vZHVsZSB9IGZyb20gJy4uLy4uLy4uL3ByaXNtanMvaW50ZXJuYWxzL1ByaXNtTW9kdWxlLmQudHMnO1xuXG4vKipcbiAqIExvYWQgUHJpc20uanMgYW5kIHJldHVybiBhIHByb21pc2UgdG8gdGhlIGdsb2JhbCBQcmlzbSBvYmplY3QuXG4gKiBDYW4gYWxzbyB1c2UgYHdpbmRvdy5QcmlzbWAgYWZ0ZXIgdGhpcyBwcm9taXNlIHJlc29sdmVzIHRvIGdldCB0aGUgc2FtZSByZWZlcmVuY2UuXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGdsb2JhbCBgd2luZG93LlByaXNtYCBvYmplY3QuXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9wcmlzbWpzLmNvbS8gfCBPZmZpY2lhbCBQcmlzbSBkb2N1bWVudGF0aW9ufS5cbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkUHJpc20oKTogUHJvbWlzZTxQcmlzbU1vZHVsZT4ge1xuICByZXR1cm4gKGF3YWl0IGxvYWRQcmlzbU9yaWdpbmFsKCkpIGFzIFByaXNtTW9kdWxlO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgUmVmZXJlbmNlLFxuICBSZWZlcmVuY2VDYWNoZVxufSBmcm9tICdvYnNpZGlhbic7XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHJlZmVyZW5jZSBpcyBhIHJlZmVyZW5jZSBjYWNoZS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBpcyBhIHJlZmVyZW5jZSBjYWNoZS5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZWZlcmVuY2VDYWNoZShyZWZlcmVuY2U6IFJlZmVyZW5jZSk6IHJlZmVyZW5jZSBpcyBSZWZlcmVuY2VDYWNoZSB7XG4gIHJldHVybiAhIShyZWZlcmVuY2UgYXMgUGFydGlhbDxSZWZlcmVuY2VDYWNoZT4pLnBvc2l0aW9uO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgRW1iZWRDYWNoZSxcbiAgUmVmZXJlbmNlXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgaXNSZWZlcmVuY2VDYWNoZSB9IGZyb20gJy4vaXNSZWZlcmVuY2VDYWNoZS50cyc7XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHJlZmVyZW5jZSBpcyBhbiBlbWJlZCBjYWNoZS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBpcyBhbiBlbWJlZCBjYWNoZS5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbWJlZENhY2hlKHJlZmVyZW5jZTogUmVmZXJlbmNlKTogcmVmZXJlbmNlIGlzIEVtYmVkQ2FjaGUge1xuICByZXR1cm4gaXNSZWZlcmVuY2VDYWNoZShyZWZlcmVuY2UpICYmIHJlZmVyZW5jZS5vcmlnaW5hbFswXSA9PT0gJyEnO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgRnJvbnRtYXR0ZXJMaW5rQ2FjaGUsXG4gIFJlZmVyZW5jZVxufSBmcm9tICdvYnNpZGlhbic7XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHJlZmVyZW5jZSBpcyBhIGZyb250bWF0dGVyIGxpbmsgY2FjaGUuXG4gKlxuICogQHBhcmFtIHJlZmVyZW5jZSAtIFRoZSByZWZlcmVuY2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSByZWZlcmVuY2UgaXMgYSBmcm9udG1hdHRlciBsaW5rIGNhY2hlLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Zyb250bWF0dGVyTGlua0NhY2hlKHJlZmVyZW5jZTogUmVmZXJlbmNlKTogcmVmZXJlbmNlIGlzIEZyb250bWF0dGVyTGlua0NhY2hlIHtcbiAgcmV0dXJuICEhKHJlZmVyZW5jZSBhcyBQYXJ0aWFsPEZyb250bWF0dGVyTGlua0NhY2hlPikua2V5O1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgTGlua0NhY2hlLFxuICBSZWZlcmVuY2Vcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBpc1JlZmVyZW5jZUNhY2hlIH0gZnJvbSAnLi9pc1JlZmVyZW5jZUNhY2hlLnRzJztcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcmVmZXJlbmNlIGlzIGEgbGluayBjYWNoZS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBpcyBhIGxpbmsgY2FjaGUuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTGlua0NhY2hlKHJlZmVyZW5jZTogUmVmZXJlbmNlKTogcmVmZXJlbmNlIGlzIExpbmtDYWNoZSB7XG4gIHJldHVybiBpc1JlZmVyZW5jZUNhY2hlKHJlZmVyZW5jZSkgJiYgcmVmZXJlbmNlLm9yaWdpbmFsWzBdICE9PSAnISc7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7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QSxJQUFBQyxvQkFBK0I7QUFZeEIsU0FBUywrQkFBbUU7QUFDakYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBMEI7QUFZbkIsU0FBUywwQkFBeUQ7QUFDdkUsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBbUM7QUFZNUIsU0FBUyxtQ0FBMkU7QUFDekYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBc0M7QUFZL0IsU0FBUyxzQ0FBaUY7QUFDL0YsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBa0M7QUFZM0IsU0FBUyxrQ0FBeUU7QUFDdkYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBcUM7QUFZOUIsU0FBUyxxQ0FBK0U7QUFDN0YsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBc0M7QUFZL0IsU0FBUyxzQ0FBaUY7QUFDL0YsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBcUM7QUFZOUIsU0FBUyxxQ0FBK0U7QUFDN0YsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBZ0M7QUFZekIsU0FBUyxnQ0FBcUU7QUFDbkYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBZ0M7QUFZekIsU0FBUyxnQ0FBcUU7QUFDbkYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBZ0M7QUFZekIsU0FBUyxnQ0FBcUU7QUFDbkYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBa0M7QUFZM0IsU0FBUyxrQ0FBeUU7QUFDdkYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBOEI7QUFZdkIsU0FBUyw4QkFBaUU7QUFDL0UsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBZ0M7QUFZekIsU0FBUyxnQ0FBcUU7QUFDbkYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBK0I7QUFZeEIsU0FBUywrQkFBNEU7QUFDMUYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBNkI7QUFZdEIsU0FBUyw2QkFBK0Q7QUFDN0UsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBMEI7QUFZbkIsU0FBUywwQkFBeUQ7QUFDdkUsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBOEI7QUFZdkIsU0FBUyw4QkFBaUU7QUFDL0UsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBMEI7QUFZbkIsU0FBUywwQkFBeUQ7QUFDdkUsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBMEI7QUFZbkIsU0FBUywwQkFBeUQ7QUFDdkUsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBMEI7QUFZbkIsU0FBUywwQkFBeUQ7QUFDdkUsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBMkI7QUFZcEIsU0FBUywyQkFBMkQ7QUFDekUsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBMEI7QUFZbkIsU0FBUywwQkFBeUQ7QUFDdkUsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBMEI7QUFZbkIsU0FBUywwQkFBeUQ7QUFDdkUsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBNkI7QUFZdEIsU0FBUyw2QkFBK0Q7QUFDN0UsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBMEI7QUFZbkIsU0FBUywwQkFBeUQ7QUFDdkUsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBNEI7QUFZckIsU0FBUyw0QkFBNkQ7QUFDM0UsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBNEI7QUFZckIsU0FBUyw0QkFBNkQ7QUFDM0UsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBNEI7QUFZckIsU0FBUyw0QkFBNkQ7QUFDM0UsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBa0M7QUFZM0IsU0FBUyxrQ0FBeUU7QUFDdkYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBNEI7QUFZckIsU0FBUyw0QkFBNkQ7QUFDM0UsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBeUI7QUFZbEIsU0FBUyx5QkFBdUQ7QUFDckUsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBeUI7QUFZbEIsU0FBUyx5QkFBdUQ7QUFDckUsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBc0I7QUFZ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QXlCO0FBQ3hELFNBQU8sSUFBSSxNQUFNO0FBQ25COzs7QUNmQSxJQUFBQyxvQkFBeUI7QUFZbEIsU0FBUyxnQkFBNEI7QUFDMUMsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBbUQ7QUFjbkQsZUFBc0IsY0FBZ0M7QUFDcEQsU0FBUSxVQUFNLGtCQUFBQyxhQUFvQjtBQUNwQzs7O0FDaEJBLElBQUFDLG9CQUErQztBQWMvQyxlQUFzQixZQUFrQztBQUN0RCxTQUFRLFVBQU0sa0JBQUFDLFdBQWtCO0FBQ2xDOzs7QUNoQkEsSUFBQUMsb0JBQStDO0FBYy9DLGVBQXNCLFlBQWtDO0FBQ3RELFNBQVEsVUFBTSxrQkFBQUMsV0FBa0I7QUFDbEM7OztBQ0ZPLFNBQVMsaUJBQWlCLFdBQW1EO0FBQ2xGLFNBQU8sQ0FBQyxDQUFFLFVBQXNDO0FBQ2xEOzs7QUNBTyxTQUFTLGFBQWEsV0FBK0M7QUFDMUUsU0FBTyxpQkFBaUIsU0FBUyxLQUFLLFVBQVUsU0FBUyxDQUFDLE1BQU07QUFDbEU7OztBQ0pPLFNBQVMsdUJBQXVCLFdBQXlEO0FBQzlGLFNBQU8sQ0FBQyxDQUFFLFVBQTRDO0FBQ3hEOzs7QUNBTyxTQUFTLFlBQVksV0FBOEM7QUFDeEUsU0FBTyxpQkFBaUIsU0FBUyxLQUFLLFVBQVUsU0FBUyxDQUFDLE1BQU07QUFDbEU7IiwKICAibmFtZXMiOiBbImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImxvYWRNZXJtYWlkT3JpZ2luYWwiLCAiaW1wb3J0X29ic2lkaWFuIiwgImxvYWRQZGZKc09yaWdpbmFsIiwgImltcG9ydF9vYnNpZGlhbiIsICJsb2FkUHJpc21PcmlnaW5hbCJdCn0K
|