@sapui5/sap.fe.controls 1.136.0 → 1.136.2
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/package.json +1 -1
- package/src/sap/fe/controls/.library +1 -1
- package/src/sap/fe/controls/easyFilter/AINotice.js +65 -33
- package/src/sap/fe/controls/easyFilter/AINotice.tsx +72 -43
- package/src/sap/fe/controls/easyFilter/EasyFilterBarContainer.js +4 -2
- package/src/sap/fe/controls/easyFilter/EasyFilterBarContainer.tsx +21 -8
- package/src/sap/fe/controls/easyFilter/EasyFilterInput.js +45 -4
- package/src/sap/fe/controls/easyFilter/EasyFilterInput.tsx +46 -2
- package/src/sap/fe/controls/easyFilter/Token.js +1 -5
- package/src/sap/fe/controls/easyFilter/Token.tsx +0 -6
- package/src/sap/fe/controls/easyFilter/innerControls/ValueHelpPreviewFactory.js +5 -13
- package/src/sap/fe/controls/easyFilter/innerControls/ValueHelpPreviewFactory.ts +4 -12
- package/src/sap/fe/controls/library.js +1 -1
- package/src/sap/fe/controls/messagebundle.properties +2 -0
- package/src/sap/fe/controls/messagebundle_ar.properties +3 -2
- package/src/sap/fe/controls/messagebundle_bg.properties +3 -2
- package/src/sap/fe/controls/messagebundle_ca.properties +3 -2
- package/src/sap/fe/controls/messagebundle_cnr.properties +3 -2
- package/src/sap/fe/controls/messagebundle_cs.properties +3 -2
- package/src/sap/fe/controls/messagebundle_cy.properties +2 -1
- package/src/sap/fe/controls/messagebundle_da.properties +3 -2
- package/src/sap/fe/controls/messagebundle_de.properties +5 -4
- package/src/sap/fe/controls/messagebundle_el.properties +3 -2
- package/src/sap/fe/controls/messagebundle_en.properties +2 -1
- package/src/sap/fe/controls/messagebundle_en_GB.properties +2 -1
- package/src/sap/fe/controls/messagebundle_en_US_saprigi.properties +2 -1
- package/src/sap/fe/controls/messagebundle_es.properties +3 -2
- package/src/sap/fe/controls/messagebundle_es_MX.properties +4 -3
- package/src/sap/fe/controls/messagebundle_et.properties +2 -1
- package/src/sap/fe/controls/messagebundle_fi.properties +2 -1
- package/src/sap/fe/controls/messagebundle_fr.properties +3 -2
- package/src/sap/fe/controls/messagebundle_fr_CA.properties +3 -2
- package/src/sap/fe/controls/messagebundle_hi.properties +2 -1
- package/src/sap/fe/controls/messagebundle_hr.properties +3 -2
- package/src/sap/fe/controls/messagebundle_hu.properties +3 -2
- package/src/sap/fe/controls/messagebundle_id.properties +3 -2
- package/src/sap/fe/controls/messagebundle_it.properties +3 -2
- package/src/sap/fe/controls/messagebundle_iw.properties +2 -1
- package/src/sap/fe/controls/messagebundle_ja.properties +3 -2
- package/src/sap/fe/controls/messagebundle_kk.properties +3 -2
- package/src/sap/fe/controls/messagebundle_ko.properties +2 -1
- package/src/sap/fe/controls/messagebundle_lt.properties +3 -2
- package/src/sap/fe/controls/messagebundle_lv.properties +3 -2
- package/src/sap/fe/controls/messagebundle_mk.properties +2 -1
- package/src/sap/fe/controls/messagebundle_ms.properties +3 -2
- package/src/sap/fe/controls/messagebundle_nl.properties +3 -2
- package/src/sap/fe/controls/messagebundle_no.properties +3 -2
- package/src/sap/fe/controls/messagebundle_pl.properties +3 -2
- package/src/sap/fe/controls/messagebundle_pt.properties +3 -2
- package/src/sap/fe/controls/messagebundle_pt_PT.properties +3 -2
- package/src/sap/fe/controls/messagebundle_ro.properties +3 -2
- package/src/sap/fe/controls/messagebundle_ru.properties +2 -1
- package/src/sap/fe/controls/messagebundle_sh.properties +3 -2
- package/src/sap/fe/controls/messagebundle_sk.properties +2 -1
- package/src/sap/fe/controls/messagebundle_sl.properties +3 -2
- package/src/sap/fe/controls/messagebundle_sr.properties +3 -2
- package/src/sap/fe/controls/messagebundle_sv.properties +2 -1
- package/src/sap/fe/controls/messagebundle_th.properties +2 -1
- package/src/sap/fe/controls/messagebundle_tr.properties +3 -2
- package/src/sap/fe/controls/messagebundle_uk.properties +3 -2
- package/src/sap/fe/controls/messagebundle_vi.properties +3 -2
- package/src/sap/fe/controls/messagebundle_zh_CN.properties +2 -1
- package/src/sap/fe/controls/messagebundle_zh_TW.properties +2 -1
- package/src/sap/fe/controls/shortcuts/popup/ShortcutTool.js +28 -10
- package/src/sap/fe/controls/shortcuts/popup/ShortcutTool.tsx +27 -13
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe/base/EventDelegateHook", "sap/fe/base/jsx-runtime/jsx", "sap/fe/controls/easyFilter/ShellHistoryProvider", "sap/m/Button", "sap/m/CustomListItem", "sap/m/FlexBox", "sap/m/HBox", "sap/m/IllustratedMessage", "sap/m/IllustratedMessageSize", "sap/m/IllustratedMessageType", "sap/m/Input", "sap/m/List", "sap/m/Popover", "sap/m/Text", "sap/m/Title", "sap/m/library", "sap/ui/core/Control", "sap/ui/core/CustomData", "sap/ui/core/Lib", "sap/ui/core/library", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/jsxs"], function (Log, BindingToolkit, ClassSupport, EventDelegateHook, jsx, ShellHistoryProvider, Button, CustomListItem, FlexBox, HBox, IllustratedMessage, IllustratedMessageSize, IllustratedMessageType, Input, List, Popover, Text, Title, library, Control, CustomData, Lib, coreLibrary, _jsx, _jsxs) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe/base/EventDelegateHook", "sap/fe/base/jsx-runtime/jsx", "sap/fe/controls/easyFilter/ShellHistoryProvider", "sap/m/Button", "sap/m/CustomListItem", "sap/m/FlexBox", "sap/m/HBox", "sap/m/IllustratedMessage", "sap/m/IllustratedMessageSize", "sap/m/IllustratedMessageType", "sap/m/Input", "sap/m/List", "sap/m/Popover", "sap/m/Text", "sap/m/Title", "sap/m/library", "sap/ui/core/Control", "sap/ui/core/CustomData", "sap/ui/core/InvisibleText", "sap/ui/core/Lib", "sap/ui/core/library", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/jsxs"], function (Log, BindingToolkit, ClassSupport, EventDelegateHook, jsx, ShellHistoryProvider, Button, CustomListItem, FlexBox, HBox, IllustratedMessage, IllustratedMessageSize, IllustratedMessageType, Input, List, Popover, Text, Title, library, Control, CustomData, InvisibleText, Lib, coreLibrary, _jsx, _jsxs) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7;
|
|
@@ -103,8 +103,14 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
103
103
|
},
|
|
104
104
|
placeholder: this.resourceBundle.getText("M_EASY_FILTER_PLACEHOLDER")
|
|
105
105
|
});
|
|
106
|
+
const textBinding = this.resourceBundle.getText("T_EASY_FILTER_INPUT_TEXT_LINK_POPOVER_ARIA");
|
|
107
|
+
const invisibleText = new InvisibleText({
|
|
108
|
+
text: textBinding
|
|
109
|
+
}).toStatic();
|
|
106
110
|
const favoritePopover = this.createFavoritePopover();
|
|
107
111
|
this.$favoritePopover = favoritePopover;
|
|
112
|
+
this.$searchInput.addAriaDescribedBy(favoritePopover);
|
|
113
|
+
this.$searchInput.addAriaDescribedBy(invisibleText);
|
|
108
114
|
this.$searchInput.addDependent(favoritePopover);
|
|
109
115
|
this.$searchInput.addEventDelegate({
|
|
110
116
|
onkeyup: e => {
|
|
@@ -120,6 +126,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
120
126
|
e.preventDefault();
|
|
121
127
|
this.$searchInput?.setValue(this.$searchInput?.getPlaceholder());
|
|
122
128
|
this.fireEvent("liveChange");
|
|
129
|
+
} else if (e.key === "ArrowDown") {
|
|
130
|
+
const popoverConainer = this.$favoritePopover?.getContent()[0];
|
|
131
|
+
const containerItems = popoverConainer.getItems();
|
|
132
|
+
containerItems?.find(item => item.isFocusable() && (item.focus(), true));
|
|
123
133
|
}
|
|
124
134
|
},
|
|
125
135
|
ontap: () => {
|
|
@@ -129,6 +139,29 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
129
139
|
this.openSuggestionPopover();
|
|
130
140
|
}
|
|
131
141
|
});
|
|
142
|
+
this.$favoritePopover.addEventDelegate({
|
|
143
|
+
onkeydown: e => {
|
|
144
|
+
const targetText = e.target?.outerText;
|
|
145
|
+
const targetId = e.target?.id;
|
|
146
|
+
switch (e.key) {
|
|
147
|
+
case "Enter":
|
|
148
|
+
this.$searchInput?.setValue(targetText);
|
|
149
|
+
break;
|
|
150
|
+
case "Delete":
|
|
151
|
+
if (targetId?.includes("easyFilterFavoriteItem")) {
|
|
152
|
+
this.state.favoriteQueries = this.state.favoriteQueries.filter(data => data.toLowerCase() !== targetText.toLowerCase());
|
|
153
|
+
} else {
|
|
154
|
+
this.state.recentQueries = this.state.recentQueries.filter(query => query !== targetText);
|
|
155
|
+
}
|
|
156
|
+
break;
|
|
157
|
+
case "Escape":
|
|
158
|
+
if (this.$favoritePopover?.isOpen()) {
|
|
159
|
+
this.$favoritePopover.close();
|
|
160
|
+
}
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
});
|
|
132
165
|
};
|
|
133
166
|
_proto.openSuggestionPopover = function openSuggestionPopover() {
|
|
134
167
|
if (!this.$searchInput?.getValue() && (!this.$favoritePopover || !this.$favoritePopover?.isOpen())) {
|
|
@@ -229,6 +262,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
229
262
|
}
|
|
230
263
|
}
|
|
231
264
|
}), _jsx(Title, {
|
|
265
|
+
id: this.getId() + "-easyFilterFavoriteTitle",
|
|
232
266
|
titleStyle: TitleLevel.H6,
|
|
233
267
|
text: this.resourceBundle.getText("M_EASY_FILTER_POPOVER_FAVORITE_TITLE"),
|
|
234
268
|
class: "sapFeControlsTitleBorder",
|
|
@@ -245,7 +279,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
245
279
|
}),
|
|
246
280
|
items: (id, ctx) => {
|
|
247
281
|
return _jsx(CustomListItem, {
|
|
282
|
+
id: id + "-easyFilterFavoriteItem",
|
|
248
283
|
class: "sapUiSmallMarginBegin",
|
|
284
|
+
ariaLabelledBy: [id + "-easyFilterFavoriteTitle"],
|
|
249
285
|
customData: [_jsx(CustomData, {
|
|
250
286
|
value: ctx.getObject()
|
|
251
287
|
}, "text")],
|
|
@@ -276,6 +312,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
276
312
|
}), _jsx(Button, {
|
|
277
313
|
icon: "sap-icon://favorite",
|
|
278
314
|
tooltip: this.resourceBundle.getText("M_EASY_FILTER_FILLED_STAR"),
|
|
315
|
+
ariaLabelledBy: [this.getId() + "-easyFilterFavoriteItem"],
|
|
279
316
|
type: ButtonType.Transparent,
|
|
280
317
|
press: () => {
|
|
281
318
|
//Retaining the focus on popover doesn't make the popover close on every interaction
|
|
@@ -292,6 +329,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
292
329
|
}
|
|
293
330
|
}
|
|
294
331
|
}), _jsx(Title, {
|
|
332
|
+
id: this.getId() + "-easyFilterLastUsedTitle",
|
|
295
333
|
titleStyle: TitleLevel.H6,
|
|
296
334
|
text: this.resourceBundle.getText("M_EASY_FILTER_POPOVER_LAST_USED"),
|
|
297
335
|
class: "sapFeControlsTitleBorder",
|
|
@@ -301,8 +339,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
301
339
|
visible: equal(bindState(this.state, "isHistoryEnabled"), true),
|
|
302
340
|
mode: ListMode.Delete,
|
|
303
341
|
delete: e => {
|
|
304
|
-
|
|
305
|
-
|
|
342
|
+
const item = e.getParameter("listItem");
|
|
343
|
+
item.focus();
|
|
306
344
|
let queryString = e.getParameter("listItem")?.data("text");
|
|
307
345
|
if (!queryString) return;
|
|
308
346
|
// Normalize backslashes before comparing
|
|
@@ -318,6 +356,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
318
356
|
}),
|
|
319
357
|
items: (id, ctx) => {
|
|
320
358
|
return _jsx(CustomListItem, {
|
|
359
|
+
id: id + "-easyFilterLastUsedItem",
|
|
321
360
|
press: () => {
|
|
322
361
|
this.$searchInput?.setValue(ctx.getObject().text);
|
|
323
362
|
this.onEnterPressed();
|
|
@@ -326,6 +365,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
326
365
|
customData: [_jsx(CustomData, {
|
|
327
366
|
value: ctx.getObject().text
|
|
328
367
|
}, "text")],
|
|
368
|
+
ariaLabelledBy: [id + "-easyFilterLastUsedTitle"],
|
|
329
369
|
children: _jsxs(FlexBox, {
|
|
330
370
|
width: "100%",
|
|
331
371
|
direction: FlexDirection.Row,
|
|
@@ -351,6 +391,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
351
391
|
tooltip: ctx.getObject().isFavorite ? this.resourceBundle.getText("M_EASY_FILTER_FILLED_STAR") : this.resourceBundle.getText("M_EASY_FILTER_EMPTY_START"),
|
|
352
392
|
enabled: lessThan(length(bindState(this.state, "favoriteQueries")), 5),
|
|
353
393
|
type: ButtonType.Transparent,
|
|
394
|
+
ariaLabelledBy: [id + "-easyFilterLastUsedItem"],
|
|
354
395
|
press: () => {
|
|
355
396
|
//Retaining the focus on popover doesn't make the popover close on every interaction
|
|
356
397
|
this.$favoritePopover?.focus();
|
|
@@ -441,4 +482,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
441
482
|
_exports = EasyFilterInput;
|
|
442
483
|
return _exports;
|
|
443
484
|
}, false);
|
|
444
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFYXN5RmlsdGVySW5wdXQiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsImFnZ3JlZ2F0aW9uIiwidHlwZSIsIm11bHRpcGxlIiwiaXNEZWZhdWx0IiwiX2RlYzMiLCJwcm9wZXJ0eSIsIl9kZWM0IiwiX2RlYzUiLCJldmVudCIsIl9kZWM2IiwiX2RlYzciLCJfZGVjOCIsImRlZmluZVN0YXRlIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9Db250cm9sIiwicHJvcGVydGllcyIsIm90aGVycyIsIl90aGlzIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZGVzY3JpcHRvcjUiLCJfZGVzY3JpcHRvcjYiLCJfZGVzY3JpcHRvcjciLCJpbml0aWFsaXplIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImdldFZhbHVlIiwiJHNlYXJjaElucHV0IiwiaXNIaXN0b3J5RW5hYmxlZCIsInN0YXRlIiwidmFsdWVPZiIsInNldFZhbHVlIiwidmFsdWUiLCJzZXRQbGFjZWhvbGRlciIsImdldFBsYWNlaG9sZGVyIiwicmVjb21tZW5kZWRRdWVyaWVzIiwicmVjb21tZW5kZWRWYWx1ZXMiLCJyZXNvdXJjZUJ1bmRsZSIsIkxpYiIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiY3JlYXRlSW5wdXQiLCJzZXRBc0ludmFsaWQiLCJtZXNzYWdlIiwic2V0VmFsdWVTdGF0ZSIsIlZhbHVlU3RhdGUiLCJXYXJuaW5nIiwic2V0VmFsdWVTdGF0ZVRleHQiLCJvcGVuVmFsdWVTdGF0ZU1lc3NhZ2UiLCJfanN4IiwiSW5wdXQiLCJ3aWR0aCIsInNob3dDbGVhckljb24iLCJjaGFuZ2UiLCJlIiwiZmlyZUV2ZW50IiwicXVlcnkiLCJnZXRQYXJhbWV0ZXIiLCJsaXZlQ2hhbmdlIiwicXVlcnlDaGFuZ2VkIiwiZ2V0U291cmNlIiwiJGZhdm9yaXRlUG9wb3ZlciIsImlzT3BlbiIsIm9wZW5TdWdnZXN0aW9uUG9wb3ZlciIsImdldFRleHQiLCJwbGFjZWhvbGRlciIsImZhdm9yaXRlUG9wb3ZlciIsImNyZWF0ZUZhdm9yaXRlUG9wb3ZlciIsImFkZERlcGVuZGVudCIsImFkZEV2ZW50RGVsZWdhdGUiLCJvbmtleXVwIiwia2V5Iiwib25FbnRlclByZXNzZWQiLCJjbG9zZSIsIm9ua2V5ZG93biIsImxlbmd0aCIsInByZXZlbnREZWZhdWx0Iiwib250YXAiLCJvbmZvY3VzaW4iLCJzaGVsbEhpc3RvcnlQcm92aWRlciIsImZhdm9yaXRlUXVlcmllcyIsImdldEZhdm9yaXRlUXVlcmllcyIsInJlY2VudFF1ZXJpZXMiLCJnZXRSZWNlbnRRdWVyaWVzIiwibWFwIiwib3BlbkJ5IiwicmVxdWVzdEZhdm9yaXRlIiwibWFnaWNRdWVyeSIsImFkZFJlY2VudFF1ZXJ5IiwicXVlcnlTdHJpbmciLCJyZXBsYWNlIiwicmVjZW50UXVlcnlJbmRleCIsImZpbmRJbmRleCIsInRvTG93ZXJDYXNlIiwiY29uY2F0Iiwic2xpY2UiLCJmaWx0ZXIiLCJ1bnNoaWZ0Iiwib25TdGF0ZUNoYW5nZSIsImNoYW5nZWRQcm9wcyIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsImluY2x1ZGVzIiwic2V0RmF2b3JpdGVRdWVyaWVzIiwic2V0UmVjZW50UXVlcmllcyIsInJlY2VudFF1ZXJpZXNXaXRGYXZvcml0ZXMiLCJyZWNlbnRRdWVyeSIsInRleHQiLCJpc0Zhdm9yaXRlIiwiZmluZCIsImZhdm9yaXRlUXVlcnkiLCJpbml0U2hlbGxIaXN0b3J5UHJvdmlkZXIiLCJTaGVsbEhpc3RvcnlQcm92aWRlciIsImdldEluc3RhbmNlIiwiYXBwSWQiLCJlcnJvciIsIkxvZyIsIlBvcG92ZXIiLCJpZCIsImdldElkIiwic2hvd0hlYWRlciIsImhvcml6b250YWxTY3JvbGxpbmciLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnRUeXBlIiwiQm90dG9tIiwic2hvd0Fycm93IiwiaW5pdGlhbEZvY3VzIiwiY2xhc3MiLCJ2aXNpYmxlIiwiZXF1YWwiLCJiaW5kU3RhdGUiLCJjaGlsZHJlbiIsImNvbnRlbnQiLCJGbGV4Qm94IiwiZGlyZWN0aW9uIiwiRmxleERpcmVjdGlvbiIsIkNvbHVtbiIsInJlbmRlclR5cGUiLCJpdGVtcyIsIlRpdGxlIiwidGl0bGVTdHlsZSIsIlRpdGxlTGV2ZWwiLCJINiIsIkhCb3giLCJ3cmFwIiwiRmxleFdyYXAiLCJXcmFwIiwiY3R4IiwiQnV0dG9uIiwiZ2V0T2JqZWN0IiwicHJlc3MiLCJiaW5kIiwiTGlzdCIsIm5vRGF0YSIsIklsbHVzdHJhdGVkTWVzc2FnZSIsInRpdGxlIiwiaWxsdXN0cmF0aW9uU2l6ZSIsIklsbHVzdHJhdGVkTWVzc2FnZVNpemUiLCJFeHRyYVNtYWxsIiwiaWxsdXN0cmF0aW9uVHlwZSIsIklsbHVzdHJhdGVkTWVzc2FnZVR5cGUiLCJOb0VudHJpZXMiLCJkZXNjcmlwdGlvbiIsIkN1c3RvbUxpc3RJdGVtIiwiY3VzdG9tRGF0YSIsIkN1c3RvbURhdGEiLCJfanN4cyIsIlJvdyIsImFsaWduSXRlbXMiLCJGbGV4QWxpZ25JdGVtcyIsIkNlbnRlciIsImp1c3RpZnlDb250ZW50IiwiRmxleEp1c3RpZnlDb250ZW50IiwiU3BhY2VCZXR3ZWVuIiwiVGV4dCIsInRvb2x0aXAiLCJ3cmFwcGluZyIsImRlcGVuZGVudHMiLCJFdmVudERlbGVnYXRlSG9vayIsInRhcCIsImljb24iLCJCdXR0b25UeXBlIiwiVHJhbnNwYXJlbnQiLCJmb2N1cyIsImluZGV4IiwiaW5kZXhPZiIsIm1vZGUiLCJMaXN0TW9kZSIsIkRlbGV0ZSIsImRlbGV0ZSIsImRhdGEiLCJlbmFibGVkIiwibGVzc1RoYW4iLCJyZW1vdmVGcm9tRmF2b3JpdGVzIiwiYWRkVG9GYXZvcml0ZXMiLCJuZXdGYXZvcml0ZSIsInBvcCIsInJlbmRlciIsInJtIiwiY29udHJvbCIsImpzeCIsInJlbmRlclVzaW5nUmVuZGVyTWFuYWdlciIsInJlZiIsIkNvbnRyb2wiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkVhc3lGaWx0ZXJJbnB1dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IHR5cGUgeyBQYXRoSW5Nb2RlbEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGJpbmRTdGF0ZSwgZXF1YWwsIGxlbmd0aCwgbGVzc1RoYW4gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBkZWZpbmVTdGF0ZSwgZGVmaW5lVUk1Q2xhc3MsIGV2ZW50LCBwcm9wZXJ0eSwgdHlwZSBQcm9wZXJ0aWVzT2YsIHR5cGUgU3RhdGVPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBFdmVudERlbGVnYXRlSG9vayBmcm9tIFwic2FwL2ZlL2Jhc2UvRXZlbnREZWxlZ2F0ZUhvb2tcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IFNoZWxsSGlzdG9yeVByb3ZpZGVyIGZyb20gXCJzYXAvZmUvY29udHJvbHMvZWFzeUZpbHRlci9TaGVsbEhpc3RvcnlQcm92aWRlclwiO1xuaW1wb3J0IHR5cGUgeyBCdXR0b24kUHJlc3NFdmVudCB9IGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IEN1c3RvbUxpc3RJdGVtIGZyb20gXCJzYXAvbS9DdXN0b21MaXN0SXRlbVwiO1xuaW1wb3J0IEZsZXhCb3ggZnJvbSBcInNhcC9tL0ZsZXhCb3hcIjtcbmltcG9ydCBIQm94IGZyb20gXCJzYXAvbS9IQm94XCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2VTaXplIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VTaXplXCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZVwiO1xuaW1wb3J0IHR5cGUgeyBJbnB1dCRMaXZlQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL20vSW5wdXRcIjtcbmltcG9ydCBJbnB1dCBmcm9tIFwic2FwL20vSW5wdXRcIjtcbmltcG9ydCBMaXN0IGZyb20gXCJzYXAvbS9MaXN0XCI7XG5pbXBvcnQgdHlwZSB7IExpc3RCYXNlJERlbGV0ZUV2ZW50IH0gZnJvbSBcInNhcC9tL0xpc3RCYXNlXCI7XG5pbXBvcnQgUG9wb3ZlciBmcm9tIFwic2FwL20vUG9wb3ZlclwiO1xuaW1wb3J0IHR5cGUgU3RhbmRhcmRMaXN0SXRlbSBmcm9tIFwic2FwL20vU3RhbmRhcmRMaXN0SXRlbVwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBUaXRsZSBmcm9tIFwic2FwL20vVGl0bGVcIjtcbmltcG9ydCB7IEJ1dHRvblR5cGUsIEZsZXhBbGlnbkl0ZW1zLCBGbGV4RGlyZWN0aW9uLCBGbGV4SnVzdGlmeUNvbnRlbnQsIEZsZXhXcmFwLCBMaXN0TW9kZSwgUGxhY2VtZW50VHlwZSB9IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEN1c3RvbURhdGEgZnJvbSBcInNhcC91aS9jb3JlL0N1c3RvbURhdGFcIjtcbmltcG9ydCBMaWIgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgUmVuZGVyTWFuYWdlciBmcm9tIFwic2FwL3VpL2NvcmUvUmVuZGVyTWFuYWdlclwiO1xuaW1wb3J0IHsgVGl0bGVMZXZlbCwgVmFsdWVTdGF0ZSB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBFdmVudEhhbmRsZXIgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5cbnR5cGUgUmVjZW50VHlwZSA9IHtcblx0dGV4dDogc3RyaW5nO1xuXHRpc0Zhdm9yaXRlOiBib29sZWFuO1xufTtcbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb250cm9scy5lYXN5RmlsdGVyLkVhc3lGaWx0ZXJJbnB1dFwiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWFzeUZpbHRlcklucHV0IGV4dGVuZHMgQ29udHJvbCB7XG5cdEBhZ2dyZWdhdGlvbih7IHR5cGU6IFwic2FwLm0uSW5wdXRcIiwgbXVsdGlwbGU6IGZhbHNlLCBpc0RlZmF1bHQ6IHRydWUgfSlcblx0JHNlYXJjaElucHV0ITogSW5wdXQ7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRhcHBJZD86IHN0cmluZztcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcImFycmF5XCIgfSlcblx0cmVjb21tZW5kZWRWYWx1ZXM/OiBzdHJpbmdbXTtcblxuXHRAZXZlbnQoKVxuXHRxdWVyeUNoYW5nZWQ/OiBFdmVudEhhbmRsZXI8VUk1RXZlbnQ8eyBxdWVyeTogc3RyaW5nIH0sIEVhc3lGaWx0ZXJJbnB1dD4+O1xuXG5cdEBldmVudCgpXG5cdGVudGVyUHJlc3NlZD86IEV2ZW50SGFuZGxlcjxVSTVFdmVudDx7IHF1ZXJ5OiBzdHJpbmcgfSwgRWFzeUZpbHRlcklucHV0Pj47XG5cblx0QGV2ZW50KClcblx0bGl2ZUNoYW5nZT86IEV2ZW50SGFuZGxlcjtcblxuXHRwcml2YXRlIHJlc291cmNlQnVuZGxlITogUmVzb3VyY2VCdW5kbGU7XG5cblx0c2hlbGxIaXN0b3J5UHJvdmlkZXI6IFNoZWxsSGlzdG9yeVByb3ZpZGVyIHwgdW5kZWZpbmVkO1xuXG5cdCRmYXZvcml0ZVBvcG92ZXI6IFBvcG92ZXIgfCB1bmRlZmluZWQ7XG5cblx0QGRlZmluZVN0YXRlKClcblx0cHJvdGVjdGVkIHN0YXRlOiBTdGF0ZU9mPHtcblx0XHRxdWVyeUNoYW5nZWQ6IGJvb2xlYW47XG5cdFx0cmVjZW50UXVlcmllczogcmVhZG9ubHkgc3RyaW5nW107XG5cdFx0cmVjZW50UXVlcmllc1dpdEZhdm9yaXRlczogcmVhZG9ubHkgUmVjZW50VHlwZVtdO1xuXHRcdGlzSGlzdG9yeUVuYWJsZWQ6IGJvb2xlYW47XG5cdFx0ZmF2b3JpdGVRdWVyaWVzOiBzdHJpbmdbXTtcblx0XHRyZWNvbW1lbmRlZFF1ZXJpZXM6IHN0cmluZ1tdO1xuXHR9PiA9IHtcblx0XHRxdWVyeUNoYW5nZWQ6IGZhbHNlLFxuXHRcdGlzSGlzdG9yeUVuYWJsZWQ6IGZhbHNlLFxuXHRcdHJlY2VudFF1ZXJpZXM6IFtdLFxuXHRcdHJlY2VudFF1ZXJpZXNXaXRGYXZvcml0ZXM6IFtdLFxuXHRcdGZhdm9yaXRlUXVlcmllczogW10gYXMgc3RyaW5nW10sXG5cdFx0cmVjb21tZW5kZWRRdWVyaWVzOiBbXSBhcyBzdHJpbmdbXVxuXHR9O1xuXG5cdGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IHN0cmluZyB8ICgkQ29udHJvbFNldHRpbmdzICYgUHJvcGVydGllc09mPEVhc3lGaWx0ZXJJbnB1dD4pLCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcGVydGllcyBhcyBzdHJpbmcsIG90aGVycyk7XG5cdFx0dGhpcy5pbml0aWFsaXplKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0VmFsdWUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy4kc2VhcmNoSW5wdXQuZ2V0VmFsdWUoKTtcblx0fVxuXG5cdHB1YmxpYyBpc0hpc3RvcnlFbmFibGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLnN0YXRlLmlzSGlzdG9yeUVuYWJsZWQudmFsdWVPZigpO1xuXHR9XG5cblx0c2V0VmFsdWUodmFsdWU6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuJHNlYXJjaElucHV0LnNldFZhbHVlKHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dC5zZXRQbGFjZWhvbGRlcih2YWx1ZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy4kc2VhcmNoSW5wdXQuZ2V0UGxhY2Vob2xkZXIoKTtcblx0fVxuXG5cdGluaXRpYWxpemUoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS5yZWNvbW1lbmRlZFF1ZXJpZXMgPSB0aGlzLnJlY29tbWVuZGVkVmFsdWVzID8/IFtdO1xuXHRcdHRoaXMucmVzb3VyY2VCdW5kbGUgPSBMaWIuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29udHJvbHNcIikhO1xuXHRcdHRoaXMuY3JlYXRlSW5wdXQoKTtcblx0fVxuXG5cdHNldEFzSW52YWxpZChtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dC5zZXRWYWx1ZVN0YXRlKFZhbHVlU3RhdGUuV2FybmluZyk7XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQuc2V0VmFsdWVTdGF0ZVRleHQobWVzc2FnZSk7XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQub3BlblZhbHVlU3RhdGVNZXNzYWdlKCk7XG5cdH1cblxuXHRjcmVhdGVJbnB1dCgpOiB2b2lkIHtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dCA9IChcblx0XHRcdDxJbnB1dFxuXHRcdFx0XHR3aWR0aD1cIjEwMCVcIlxuXHRcdFx0XHRzaG93Q2xlYXJJY29uPXt0cnVlfVxuXHRcdFx0XHRjaGFuZ2U9eyhlKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5maXJlRXZlbnQoXCJxdWVyeUNoYW5nZWRcIiwgeyBxdWVyeTogZS5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKSB9KTtcblx0XHRcdFx0fX1cblx0XHRcdFx0bGl2ZUNoYW5nZT17KGU6IElucHV0JExpdmVDaGFuZ2VFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHRoaXMuc3RhdGUucXVlcnlDaGFuZ2VkID0gdHJ1ZTtcblx0XHRcdFx0XHR0aGlzLmZpcmVFdmVudChcImxpdmVDaGFuZ2VcIik7XG5cdFx0XHRcdFx0aWYgKCFlLmdldFNvdXJjZSgpLmdldFZhbHVlKCkgJiYgISh0aGlzLiRmYXZvcml0ZVBvcG92ZXI/LmlzT3BlbigpID8/IGZhbHNlKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5vcGVuU3VnZ2VzdGlvblBvcG92ZXIoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGUuZ2V0UGFyYW1ldGVyKFwidmFsdWVcIikgPT09IFwiXCIpIHtcblx0XHRcdFx0XHRcdHRoaXMuc2V0UGxhY2Vob2xkZXIodGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QTEFDRUhPTERFUlwiKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9fVxuXHRcdFx0XHRwbGFjZWhvbGRlcj17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QTEFDRUhPTERFUlwiKX1cblx0XHRcdD48L0lucHV0PlxuXHRcdCk7XG5cdFx0Y29uc3QgZmF2b3JpdGVQb3BvdmVyID0gdGhpcy5jcmVhdGVGYXZvcml0ZVBvcG92ZXIoKTtcblx0XHR0aGlzLiRmYXZvcml0ZVBvcG92ZXIgPSBmYXZvcml0ZVBvcG92ZXI7XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQuYWRkRGVwZW5kZW50KGZhdm9yaXRlUG9wb3Zlcik7XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQuYWRkRXZlbnREZWxlZ2F0ZSh7XG5cdFx0XHRvbmtleXVwOiAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoZS5rZXkgPT09IFwiRW50ZXJcIikge1xuXHRcdFx0XHRcdHRoaXMub25FbnRlclByZXNzZWQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy4kZmF2b3JpdGVQb3BvdmVyICYmIHRoaXMuJHNlYXJjaElucHV0LmdldFZhbHVlKCkpIHtcblx0XHRcdFx0XHR0aGlzLiRmYXZvcml0ZVBvcG92ZXIuY2xvc2UoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG9ua2V5ZG93bjogKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGUua2V5ID09PSBcIlRhYlwiICYmXG5cdFx0XHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LmdldFZhbHVlKCkubGVuZ3RoID09PSAwICYmXG5cdFx0XHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LmdldFZhbHVlKCkgIT09IHRoaXMuJHNlYXJjaElucHV0Py5nZXRQbGFjZWhvbGRlcigpICYmXG5cdFx0XHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LmdldFBsYWNlaG9sZGVyKCkgIT09IHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUExBQ0VIT0xERVJcIilcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZSh0aGlzLiRzZWFyY2hJbnB1dD8uZ2V0UGxhY2Vob2xkZXIoKSk7XG5cdFx0XHRcdFx0dGhpcy5maXJlRXZlbnQoXCJsaXZlQ2hhbmdlXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0b250YXA6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5vcGVuU3VnZ2VzdGlvblBvcG92ZXIoKTtcblx0XHRcdH0sXG5cdFx0XHRvbmZvY3VzaW46ICgpID0+IHtcblx0XHRcdFx0dGhpcy5vcGVuU3VnZ2VzdGlvblBvcG92ZXIoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgb3BlblN1Z2dlc3Rpb25Qb3BvdmVyKCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy4kc2VhcmNoSW5wdXQ/LmdldFZhbHVlKCkgJiYgKCF0aGlzLiRmYXZvcml0ZVBvcG92ZXIgfHwgIXRoaXMuJGZhdm9yaXRlUG9wb3Zlcj8uaXNPcGVuKCkpKSB7XG5cdFx0XHQvLyBPcGVuIHRoZSBlYXN5IGZpbHRlciBwb3BvdmVyXG5cdFx0XHR0aGlzLnN0YXRlLmlzSGlzdG9yeUVuYWJsZWQgPSB0aGlzLnNoZWxsSGlzdG9yeVByb3ZpZGVyPy5pc0hpc3RvcnlFbmFibGVkKCkgPz8gZmFsc2U7XG5cdFx0XHR0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcyA9IHRoaXMuc2hlbGxIaXN0b3J5UHJvdmlkZXI/LmdldEZhdm9yaXRlUXVlcmllcygpID8/IFtdO1xuXHRcdFx0dGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzID0gKHRoaXMuc2hlbGxIaXN0b3J5UHJvdmlkZXI/LmdldFJlY2VudFF1ZXJpZXMoKSA/PyBbXSkubWFwKChxdWVyeSkgPT4gcXVlcnkpO1xuXHRcdFx0dGhpcy4kZmF2b3JpdGVQb3BvdmVyPy5vcGVuQnkodGhpcy4kc2VhcmNoSW5wdXQpO1xuXHRcdH1cblx0fVxuXG5cdHJlcXVlc3RGYXZvcml0ZShlOiBCdXR0b24kUHJlc3NFdmVudCk6IHZvaWQge1xuXHRcdHRoaXMuJGZhdm9yaXRlUG9wb3Zlcj8uY2xvc2UoKTtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uc2V0VmFsdWUoZS5nZXRTb3VyY2UoKS5nZXRUZXh0KCkpO1xuXHRcdHRoaXMub25FbnRlclByZXNzZWQoKTtcblx0fVxuXG5cdG9uRW50ZXJQcmVzc2VkKCk6IHZvaWQge1xuXHRcdHRoaXMuJGZhdm9yaXRlUG9wb3Zlcj8uY2xvc2UoKTtcblx0XHR0aGlzLnN0YXRlLnF1ZXJ5Q2hhbmdlZCA9IGZhbHNlO1xuXHRcdGxldCBtYWdpY1F1ZXJ5ID0gdGhpcy4kc2VhcmNoSW5wdXQ/LmdldFZhbHVlKCk7XG5cdFx0aWYgKG1hZ2ljUXVlcnkgPT09IFwiXCIgJiYgdGhpcy4kc2VhcmNoSW5wdXQuZ2V0UGxhY2Vob2xkZXIoKSAhPT0gdGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QTEFDRUhPTERFUlwiKSkge1xuXHRcdFx0bWFnaWNRdWVyeSA9IHRoaXMuJHNlYXJjaElucHV0LmdldFBsYWNlaG9sZGVyKCk7XG5cdFx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uc2V0VmFsdWUobWFnaWNRdWVyeSk7XG5cdFx0fVxuXHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZVN0YXRlVGV4dChcIlwiKTtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uc2V0VmFsdWVTdGF0ZShcIk5vbmVcIik7XG5cdFx0dGhpcy5maXJlRXZlbnQoXCJlbnRlclByZXNzZWRcIiwgeyBxdWVyeTogbWFnaWNRdWVyeSB9KTtcblx0fVxuXG5cdGFkZFJlY2VudFF1ZXJ5KHF1ZXJ5U3RyaW5nOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHQvLyBOb3JtYWxpemUgYmFja3NsYXNoZXMgYmVmb3JlIHN0b3Jpbmdcblx0XHRxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nPy5yZXBsYWNlKC9cXFxcL2csIFwiXFxcXFxcXFxcIik7XG5cblx0XHRjb25zdCByZWNlbnRRdWVyeUluZGV4ID0gdGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzLmZpbmRJbmRleCgocXVlcnkpID0+IHF1ZXJ5LnRvTG93ZXJDYXNlKCkgPT09IHF1ZXJ5U3RyaW5nPy50b0xvd2VyQ2FzZSgpKTtcblx0XHRpZiAocXVlcnlTdHJpbmcgJiYgcmVjZW50UXVlcnlJbmRleCA9PT0gLTEpIHtcblx0XHRcdHRoaXMuc3RhdGUucmVjZW50UXVlcmllcyA9IFtxdWVyeVN0cmluZ10uY29uY2F0KHRoaXMuc3RhdGUucmVjZW50UXVlcmllcyk7XG5cdFx0XHRpZiAodGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzLmxlbmd0aCA+IDUpIHtcblx0XHRcdFx0dGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzID0gdGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzLnNsaWNlKDAsIDUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAocXVlcnlTdHJpbmcpIHtcblx0XHRcdGNvbnN0IHJlY2VudFF1ZXJpZXMgPSB0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMuZmlsdGVyKChxdWVyeSkgPT4gcXVlcnkudG9Mb3dlckNhc2UoKSAhPT0gcXVlcnlTdHJpbmc/LnRvTG93ZXJDYXNlKCkpO1xuXHRcdFx0cmVjZW50UXVlcmllcy51bnNoaWZ0KHF1ZXJ5U3RyaW5nKTtcblx0XHRcdHRoaXMuc3RhdGUucmVjZW50UXVlcmllcyA9IHJlY2VudFF1ZXJpZXM7XG5cdFx0fVxuXHR9XG5cblx0b25TdGF0ZUNoYW5nZShjaGFuZ2VkUHJvcHM6IHN0cmluZ1tdID0gW10pOiB2b2lkIHtcblx0XHRpZiAoY2hhbmdlZFByb3BzLmluY2x1ZGVzKFwiZmF2b3JpdGVRdWVyaWVzXCIpIHx8IGNoYW5nZWRQcm9wcy5pbmNsdWRlcyhcInJlY2VudFF1ZXJpZXNcIikpIHtcblx0XHRcdHRoaXMuc2hlbGxIaXN0b3J5UHJvdmlkZXI/LnNldEZhdm9yaXRlUXVlcmllcyh0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcyk7XG5cdFx0XHR0aGlzLnNoZWxsSGlzdG9yeVByb3ZpZGVyPy5zZXRSZWNlbnRRdWVyaWVzKHRoaXMuc3RhdGUucmVjZW50UXVlcmllcy5tYXAoKHF1ZXJ5KSA9PiBxdWVyeSkpO1xuXHRcdFx0dGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzV2l0RmF2b3JpdGVzID0gdGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzLm1hcCgocmVjZW50UXVlcnkpID0+IHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHR0ZXh0OiByZWNlbnRRdWVyeSxcblx0XHRcdFx0XHRpc0Zhdm9yaXRlOiAhIXRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzLmZpbmQoKGZhdm9yaXRlUXVlcnkpID0+IGZhdm9yaXRlUXVlcnkgPT09IHJlY2VudFF1ZXJ5KVxuXHRcdFx0XHR9O1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgaW5pdFNoZWxsSGlzdG9yeVByb3ZpZGVyKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzLnNoZWxsSGlzdG9yeVByb3ZpZGVyID0gYXdhaXQgU2hlbGxIaXN0b3J5UHJvdmlkZXIuZ2V0SW5zdGFuY2UodGhpcy5hcHBJZCA/PyBcIjx1bmtub3duQXBwPlwiKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgY3JlYXRpbmcgU2hlbGxIaXN0b3J5UHJvdmlkZXIgZm9yIGVhc3kgZmlsdGVyXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG5cblx0Y3JlYXRlRmF2b3JpdGVQb3BvdmVyKCk6IFBvcG92ZXIge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8UG9wb3ZlclxuXHRcdFx0XHRpZD17dGhpcy5nZXRJZCgpICsgXCItZmF2b3JpdGVQb3BvdmVyXCJ9XG5cdFx0XHRcdHNob3dIZWFkZXI9e2ZhbHNlfVxuXHRcdFx0XHRob3Jpem9udGFsU2Nyb2xsaW5nPXtmYWxzZX1cblx0XHRcdFx0cGxhY2VtZW50PXtQbGFjZW1lbnRUeXBlLkJvdHRvbX1cblx0XHRcdFx0c2hvd0Fycm93PXtmYWxzZX1cblx0XHRcdFx0aW5pdGlhbEZvY3VzPXt0aGlzLiRzZWFyY2hJbnB1dH1cblx0XHRcdFx0Y2xhc3M9e1wic2FwRkVDb250cm9sc1BvcG92ZXJcIn1cblx0XHRcdFx0dmlzaWJsZT17dGhpcy5zdGF0ZS5yZWNvbW1lbmRlZFF1ZXJpZXMubGVuZ3RoID4gMCB8fCBlcXVhbChiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJpc0hpc3RvcnlFbmFibGVkXCIpLCB0cnVlKX1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjb250ZW50OiAoXG5cdFx0XHRcdFx0XHQ8RmxleEJveCBkaXJlY3Rpb249e0ZsZXhEaXJlY3Rpb24uQ29sdW1ufSBjbGFzcz17XCJzYXBVaUNvbnRlbnRQYWRkaW5nXCJ9IHJlbmRlclR5cGU9e1wiQmFyZVwifT5cblx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRpdGVtczogW1xuXHRcdFx0XHRcdFx0XHRcdFx0PFRpdGxlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlU3R5bGU9e1RpdGxlTGV2ZWwuSDZ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUE9QT1ZFUl9TVUdHRVNUSU9OU19USVRMRVwiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwRmVDb250cm9sc1RpdGxlQm9yZGVyXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGU9e3RoaXMuc3RhdGUucmVjb21tZW5kZWRRdWVyaWVzLmxlbmd0aCA+IDB9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPixcblx0XHRcdFx0XHRcdFx0XHRcdDxIQm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcFVpQ29udGVudFBhZGRpbmdcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0aXRlbXM9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInJlY29tbWVuZGVkUXVlcmllc1wiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0d3JhcD17RmxleFdyYXAuV3JhcH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17dGhpcy5zdGF0ZS5yZWNvbW1lbmRlZFF1ZXJpZXMubGVuZ3RoID4gMH1cblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtczogKGlkOiBzdHJpbmcsIGN0eDogQ29udGV4dCk6IFN0YW5kYXJkTGlzdEl0ZW0gPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcFVpVGlueU1hcmdpbkVuZFwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ9e2N0eC5nZXRPYmplY3QoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcmVzcz17dGhpcy5yZXF1ZXN0RmF2b3JpdGUuYmluZCh0aGlzKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9IQm94Pixcblx0XHRcdFx0XHRcdFx0XHRcdDxUaXRsZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZVN0eWxlPXtUaXRsZUxldmVsLkg2fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0PXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BPUE9WRVJfRkFWT1JJVEVfVElUTEVcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcEZlQ29udHJvbHNUaXRsZUJvcmRlclwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPXtlcXVhbChiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJpc0hpc3RvcnlFbmFibGVkXCIpLCB0cnVlKX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+LFxuXHRcdFx0XHRcdFx0XHRcdFx0PExpc3Rcblx0XHRcdFx0XHRcdFx0XHRcdFx0aXRlbXM9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcImZhdm9yaXRlUXVlcmllc1wiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17ZXF1YWwoYmluZFN0YXRlKHRoaXMuc3RhdGUsIFwiaXNIaXN0b3J5RW5hYmxlZFwiKSwgdHJ1ZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bm9EYXRhOiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8SWxsdXN0cmF0ZWRNZXNzYWdlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BPUE9WRVJfRU1QVFlfRkFWT1JJVEVfVElUTEVcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlsbHVzdHJhdGlvblNpemU9e0lsbHVzdHJhdGVkTWVzc2FnZVNpemUuRXh0cmFTbWFsbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZT17SWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob0VudHJpZXN9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJNX0VBU1lfRklMVEVSX1BPUE9WRVJfRU1QVFlfRkFWT1JJVEVfREVTQ1JJUFRJT05cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1zOiAoaWQ6IHN0cmluZywgY3R4OiBDb250ZXh0KTogU3RhbmRhcmRMaXN0SXRlbSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q3VzdG9tTGlzdEl0ZW1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz17XCJzYXBVaVNtYWxsTWFyZ2luQmVnaW5cIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdXN0b21EYXRhPXtbPEN1c3RvbURhdGEga2V5PXtcInRleHRcIn0gdmFsdWU9e2N0eC5nZXRPYmplY3QoKX0gLz5dfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWFyY2hJbnB1dC5zZXRWYWx1ZShjdHguZ2V0T2JqZWN0KCkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5vbkVudGVyUHJlc3NlZCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8RmxleEJveFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0d2lkdGg9e1wiMTAwJVwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlyZWN0aW9uPXtGbGV4RGlyZWN0aW9uLlJvd31cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsaWduSXRlbXM9e0ZsZXhBbGlnbkl0ZW1zLkNlbnRlcn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGp1c3RpZnlDb250ZW50PXtGbGV4SnVzdGlmeUNvbnRlbnQuU3BhY2VCZXR3ZWVufVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVuZGVyVHlwZT17XCJCYXJlXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17aWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PFRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dD17Y3R4LmdldE9iamVjdCgpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwPXtjdHguZ2V0T2JqZWN0KCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHdyYXBwaW5nPXtmYWxzZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJzYXBGRUNvbnRyb2xzUG9pbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVwZW5kZW50czogKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEV2ZW50RGVsZWdhdGVIb29rXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRhcD17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZShcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGN0eC5nZXRPYmplY3QoKS5yZXBsYWNlKC9cXFxcXFxcXC9nLCBcIlxcXFxcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMub25FbnRlclByZXNzZWQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9UZXh0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpY29uPXtcInNhcC1pY29uOi8vZmF2b3JpdGVcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dG9vbHRpcD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9GSUxMRURfU1RBUlwiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvL1JldGFpbmluZyB0aGUgZm9jdXMgb24gcG9wb3ZlciBkb2Vzbid0IG1ha2UgdGhlIHBvcG92ZXIgY2xvc2Ugb24gZXZlcnkgaW50ZXJhY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRmYXZvcml0ZVBvcG92ZXI/LmZvY3VzKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgcXVlcnlTdHJpbmcgPSBjdHguZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgaW5kZXggPSB0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcy5pbmRleE9mKHF1ZXJ5U3RyaW5nKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoaW5kZXggIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcyA9IHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzLmZpbHRlcihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KHF1ZXJ5KSA9PiBxdWVyeSAhPT0gcXVlcnlTdHJpbmdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvQ3VzdG9tTGlzdEl0ZW0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvTGlzdD4sXG5cdFx0XHRcdFx0XHRcdFx0XHQ8VGl0bGVcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGVTdHlsZT17VGl0bGVMZXZlbC5INn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX0xBU1RfVVNFRFwiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwRmVDb250cm9sc1RpdGxlQm9yZGVyXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGU9e2VxdWFsKGJpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcImlzSGlzdG9yeUVuYWJsZWRcIiksIHRydWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0Lz4sXG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGlzdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtcz17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwicmVjZW50UXVlcmllc1dpdEZhdm9yaXRlc1wiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17ZXF1YWwoYmluZFN0YXRlKHRoaXMuc3RhdGUsIFwiaXNIaXN0b3J5RW5hYmxlZFwiKSwgdHJ1ZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1vZGU9e0xpc3RNb2RlLkRlbGV0ZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVsZXRlPXsoZTogTGlzdEJhc2UkRGVsZXRlRXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvL1JldGFpbmluZyB0aGUgZm9jdXMgb24gcG9wb3ZlciBkb2Vzbid0IG1ha2UgdGhlIHBvcG92ZXIgY2xvc2Ugb24gZXZlcnkgaW50ZXJhY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRmYXZvcml0ZVBvcG92ZXI/LmZvY3VzKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IHF1ZXJ5U3RyaW5nID0gZS5nZXRQYXJhbWV0ZXIoXCJsaXN0SXRlbVwiKT8uZGF0YShcInRleHRcIik7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIXF1ZXJ5U3RyaW5nKSByZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gTm9ybWFsaXplIGJhY2tzbGFzaGVzIGJlZm9yZSBjb21wYXJpbmdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nPy5yZXBsYWNlKC9cXFxcL2csIFwiXFxcXFxcXFxcIik7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMgPSB0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMuZmlsdGVyKChxdWVyeSkgPT4gcXVlcnkgIT09IHF1ZXJ5U3RyaW5nKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRub0RhdGE6IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxJbGx1c3RyYXRlZE1lc3NhZ2Vcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUE9QT1ZFUl9FTVBUWV9MQVNUX1VTRURfVElUTEVcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlsbHVzdHJhdGlvblNpemU9e0lsbHVzdHJhdGVkTWVzc2FnZVNpemUuRXh0cmFTbWFsbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZT17SWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob0VudHJpZXN9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJNX0VBU1lfRklMVEVSX1BPUE9WRVJfRU1QVFlfUkVDRU5UX0RFU0NSSVBUSU9OXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtczogKGlkOiBzdHJpbmcsIGN0eDogQ29udGV4dCk6IEZsZXhCb3ggPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEN1c3RvbUxpc3RJdGVtXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZShjdHguZ2V0T2JqZWN0KCkudGV4dCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uRW50ZXJQcmVzc2VkKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz17XCJzYXBVaVNtYWxsTWFyZ2luQmVnaW5cIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdXN0b21EYXRhPXtbPEN1c3RvbURhdGEga2V5PXtcInRleHRcIn0gdmFsdWU9e2N0eC5nZXRPYmplY3QoKS50ZXh0fSAvPl19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8RmxleEJveFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0d2lkdGg9e1wiMTAwJVwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlyZWN0aW9uPXtGbGV4RGlyZWN0aW9uLlJvd31cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsaWduSXRlbXM9e0ZsZXhBbGlnbkl0ZW1zLkNlbnRlcn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGp1c3RpZnlDb250ZW50PXtGbGV4SnVzdGlmeUNvbnRlbnQuU3BhY2VCZXR3ZWVufVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVuZGVyVHlwZT17XCJCYXJlXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17aWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PFRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dD17Y3R4LmdldE9iamVjdCgpLnRleHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRvb2x0aXA9e2N0eC5nZXRPYmplY3QoKS50ZXh0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3cmFwcGluZz17ZmFsc2V9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwic2FwRkVDb250cm9sc1BvaW50ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlcGVuZGVudHM6IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxFdmVudERlbGVnYXRlSG9va1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YXA9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uc2V0VmFsdWUoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdHguZ2V0T2JqZWN0KCkudGV4dC5yZXBsYWNlKC9cXFxcXFxcXC9nLCBcIlxcXFxcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMub25FbnRlclByZXNzZWQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9UZXh0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpY29uPXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdHguZ2V0T2JqZWN0KCkuaXNGYXZvcml0ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyBcInNhcC1pY29uOi8vZmF2b3JpdGVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OiBcInNhcC1pY29uOi8vYWRkLWZhdm9yaXRlXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwPXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdHguZ2V0T2JqZWN0KCkuaXNGYXZvcml0ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyB0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX0ZJTExFRF9TVEFSXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfRU1QVFlfU1RBUlRcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbmFibGVkPXtsZXNzVGhhbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsZW5ndGgoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRiaW5kU3RhdGUoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc3RhdGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiZmF2b3JpdGVRdWVyaWVzXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkgYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPHVua25vd24+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ1XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly9SZXRhaW5pbmcgdGhlIGZvY3VzIG9uIHBvcG92ZXIgZG9lc24ndCBtYWtlIHRoZSBwb3BvdmVyIGNsb3NlIG9uIGV2ZXJ5IGludGVyYWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kZmF2b3JpdGVQb3BvdmVyPy5mb2N1cygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHF1ZXJ5U3RyaW5nID0gY3R4LmdldE9iamVjdCgpLnRleHQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgaXNGYXZvcml0ZSA9IGN0eC5nZXRPYmplY3QoKS5pc0Zhdm9yaXRlO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGlzRmF2b3JpdGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMucmVtb3ZlRnJvbUZhdm9yaXRlcyhxdWVyeVN0cmluZyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYWRkVG9GYXZvcml0ZXMocXVlcnlTdHJpbmcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9GbGV4Qm94PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L0N1c3RvbUxpc3RJdGVtPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L0xpc3Q+XG5cdFx0XHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0PC9GbGV4Qm94PlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvUG9wb3Zlcj5cblx0XHQpIGFzIFBvcG92ZXI7XG5cdH1cblxuXHRwcml2YXRlIHJlbW92ZUZyb21GYXZvcml0ZXMocXVlcnk6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzID0gdGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMuZmlsdGVyKChkYXRhKSA9PiBkYXRhLnRvTG93ZXJDYXNlKCkgIT09IHF1ZXJ5LnRvTG93ZXJDYXNlKCkpO1xuXHR9XG5cblx0cHJpdmF0ZSBhZGRUb0Zhdm9yaXRlcyhxdWVyeTogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgbmV3RmF2b3JpdGUgPSBbcXVlcnldLmNvbmNhdCh0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcy5jb25jYXQoKSk7XG5cdFx0aWYgKG5ld0Zhdm9yaXRlLmxlbmd0aCA+IDUpIHtcblx0XHRcdG5ld0Zhdm9yaXRlLnBvcCgpO1xuXHRcdH1cblx0XHR0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcyA9IG5ld0Zhdm9yaXRlO1xuXHR9XG5cblx0c3RhdGljIHJlbmRlcihybTogUmVuZGVyTWFuYWdlciwgY29udHJvbDogRWFzeUZpbHRlcklucHV0KTogdm9pZCB7XG5cdFx0cmV0dXJuIGpzeC5yZW5kZXJVc2luZ1JlbmRlck1hbmFnZXIocm0sIGNvbnRyb2wsICgpID0+IHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxzcGFuIHJlZj17Y29udHJvbH0gY2xhc3M9e1wic2FwRkVFYXN5RmlsdGVySW5wdXRcIn0+XG5cdFx0XHRcdFx0e2NvbnRyb2wuJHNlYXJjaElucHV0fVxuXHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHQpO1xuXHRcdH0pO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01Bd0NxQkEsZUFBZSxJQUFBQyxJQUFBLEdBRG5DQyxjQUFjLENBQUMsNENB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
|
|
485
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFYXN5RmlsdGVySW5wdXQiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsImFnZ3JlZ2F0aW9uIiwidHlwZSIsIm11bHRpcGxlIiwiaXNEZWZhdWx0IiwiX2RlYzMiLCJwcm9wZXJ0eSIsIl9kZWM0IiwiX2RlYzUiLCJldmVudCIsIl9kZWM2IiwiX2RlYzciLCJfZGVjOCIsImRlZmluZVN0YXRlIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9Db250cm9sIiwicHJvcGVydGllcyIsIm90aGVycyIsIl90aGlzIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZGVzY3JpcHRvcjUiLCJfZGVzY3JpcHRvcjYiLCJfZGVzY3JpcHRvcjciLCJpbml0aWFsaXplIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImdldFZhbHVlIiwiJHNlYXJjaElucHV0IiwiaXNIaXN0b3J5RW5hYmxlZCIsInN0YXRlIiwidmFsdWVPZiIsInNldFZhbHVlIiwidmFsdWUiLCJzZXRQbGFjZWhvbGRlciIsImdldFBsYWNlaG9sZGVyIiwicmVjb21tZW5kZWRRdWVyaWVzIiwicmVjb21tZW5kZWRWYWx1ZXMiLCJyZXNvdXJjZUJ1bmRsZSIsIkxpYiIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiY3JlYXRlSW5wdXQiLCJzZXRBc0ludmFsaWQiLCJtZXNzYWdlIiwic2V0VmFsdWVTdGF0ZSIsIlZhbHVlU3RhdGUiLCJXYXJuaW5nIiwic2V0VmFsdWVTdGF0ZVRleHQiLCJvcGVuVmFsdWVTdGF0ZU1lc3NhZ2UiLCJfanN4IiwiSW5wdXQiLCJ3aWR0aCIsInNob3dDbGVhckljb24iLCJjaGFuZ2UiLCJlIiwiZmlyZUV2ZW50IiwicXVlcnkiLCJnZXRQYXJhbWV0ZXIiLCJsaXZlQ2hhbmdlIiwicXVlcnlDaGFuZ2VkIiwiZ2V0U291cmNlIiwiJGZhdm9yaXRlUG9wb3ZlciIsImlzT3BlbiIsIm9wZW5TdWdnZXN0aW9uUG9wb3ZlciIsImdldFRleHQiLCJwbGFjZWhvbGRlciIsInRleHRCaW5kaW5nIiwiaW52aXNpYmxlVGV4dCIsIkludmlzaWJsZVRleHQiLCJ0ZXh0IiwidG9TdGF0aWMiLCJmYXZvcml0ZVBvcG92ZXIiLCJjcmVhdGVGYXZvcml0ZVBvcG92ZXIiLCJhZGRBcmlhRGVzY3JpYmVkQnkiLCJhZGREZXBlbmRlbnQiLCJhZGRFdmVudERlbGVnYXRlIiwib25rZXl1cCIsImtleSIsIm9uRW50ZXJQcmVzc2VkIiwiY2xvc2UiLCJvbmtleWRvd24iLCJsZW5ndGgiLCJwcmV2ZW50RGVmYXVsdCIsInBvcG92ZXJDb25haW5lciIsImdldENvbnRlbnQiLCJjb250YWluZXJJdGVtcyIsImdldEl0ZW1zIiwiZmluZCIsIml0ZW0iLCJpc0ZvY3VzYWJsZSIsImZvY3VzIiwib250YXAiLCJvbmZvY3VzaW4iLCJ0YXJnZXRUZXh0IiwidGFyZ2V0Iiwib3V0ZXJUZXh0IiwidGFyZ2V0SWQiLCJpZCIsImluY2x1ZGVzIiwiZmF2b3JpdGVRdWVyaWVzIiwiZmlsdGVyIiwiZGF0YSIsInRvTG93ZXJDYXNlIiwicmVjZW50UXVlcmllcyIsInNoZWxsSGlzdG9yeVByb3ZpZGVyIiwiZ2V0RmF2b3JpdGVRdWVyaWVzIiwiZ2V0UmVjZW50UXVlcmllcyIsIm1hcCIsIm9wZW5CeSIsInJlcXVlc3RGYXZvcml0ZSIsIm1hZ2ljUXVlcnkiLCJhZGRSZWNlbnRRdWVyeSIsInF1ZXJ5U3RyaW5nIiwicmVwbGFjZSIsInJlY2VudFF1ZXJ5SW5kZXgiLCJmaW5kSW5kZXgiLCJjb25jYXQiLCJzbGljZSIsInVuc2hpZnQiLCJvblN0YXRlQ2hhbmdlIiwiY2hhbmdlZFByb3BzIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwic2V0RmF2b3JpdGVRdWVyaWVzIiwic2V0UmVjZW50UXVlcmllcyIsInJlY2VudFF1ZXJpZXNXaXRGYXZvcml0ZXMiLCJyZWNlbnRRdWVyeSIsImlzRmF2b3JpdGUiLCJmYXZvcml0ZVF1ZXJ5IiwiaW5pdFNoZWxsSGlzdG9yeVByb3ZpZGVyIiwiU2hlbGxIaXN0b3J5UHJvdmlkZXIiLCJnZXRJbnN0YW5jZSIsImFwcElkIiwiZXJyb3IiLCJMb2ciLCJQb3BvdmVyIiwiZ2V0SWQiLCJzaG93SGVhZGVyIiwiaG9yaXpvbnRhbFNjcm9sbGluZyIsInBsYWNlbWVudCIsIlBsYWNlbWVudFR5cGUiLCJCb3R0b20iLCJzaG93QXJyb3ciLCJpbml0aWFsRm9jdXMiLCJjbGFzcyIsInZpc2libGUiLCJlcXVhbCIsImJpbmRTdGF0ZSIsImNoaWxkcmVuIiwiY29udGVudCIsIkZsZXhCb3giLCJkaXJlY3Rpb24iLCJGbGV4RGlyZWN0aW9uIiwiQ29sdW1uIiwicmVuZGVyVHlwZSIsIml0ZW1zIiwiVGl0bGUiLCJ0aXRsZVN0eWxlIiwiVGl0bGVMZXZlbCIsIkg2IiwiSEJveCIsIndyYXAiLCJGbGV4V3JhcCIsIldyYXAiLCJjdHgiLCJCdXR0b24iLCJnZXRPYmplY3QiLCJwcmVzcyIsImJpbmQiLCJMaXN0Iiwibm9EYXRhIiwiSWxsdXN0cmF0ZWRNZXNzYWdlIiwidGl0bGUiLCJpbGx1c3RyYXRpb25TaXplIiwiSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZSIsIkV4dHJhU21hbGwiLCJpbGx1c3RyYXRpb25UeXBlIiwiSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZSIsIk5vRW50cmllcyIsImRlc2NyaXB0aW9uIiwiQ3VzdG9tTGlzdEl0ZW0iLCJhcmlhTGFiZWxsZWRCeSIsImN1c3RvbURhdGEiLCJDdXN0b21EYXRhIiwiX2pzeHMiLCJSb3ciLCJhbGlnbkl0ZW1zIiwiRmxleEFsaWduSXRlbXMiLCJDZW50ZXIiLCJqdXN0aWZ5Q29udGVudCIsIkZsZXhKdXN0aWZ5Q29udGVudCIsIlNwYWNlQmV0d2VlbiIsIlRleHQiLCJ0b29sdGlwIiwid3JhcHBpbmciLCJkZXBlbmRlbnRzIiwiRXZlbnREZWxlZ2F0ZUhvb2siLCJ0YXAiLCJpY29uIiwiQnV0dG9uVHlwZSIsIlRyYW5zcGFyZW50IiwiaW5kZXgiLCJpbmRleE9mIiwibW9kZSIsIkxpc3RNb2RlIiwiRGVsZXRlIiwiZGVsZXRlIiwiZW5hYmxlZCIsImxlc3NUaGFuIiwicmVtb3ZlRnJvbUZhdm9yaXRlcyIsImFkZFRvRmF2b3JpdGVzIiwibmV3RmF2b3JpdGUiLCJwb3AiLCJyZW5kZXIiLCJybSIsImNvbnRyb2wiLCJqc3giLCJyZW5kZXJVc2luZ1JlbmRlck1hbmFnZXIiLCJyZWYiLCJDb250cm9sIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJFYXN5RmlsdGVySW5wdXQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCB0eXBlIHsgUGF0aEluTW9kZWxFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBiaW5kU3RhdGUsIGVxdWFsLCBsZW5ndGgsIGxlc3NUaGFuIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBhZ2dyZWdhdGlvbiwgZGVmaW5lU3RhdGUsIGRlZmluZVVJNUNsYXNzLCBldmVudCwgcHJvcGVydHksIHR5cGUgUHJvcGVydGllc09mLCB0eXBlIFN0YXRlT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgRXZlbnREZWxlZ2F0ZUhvb2sgZnJvbSBcInNhcC9mZS9iYXNlL0V2ZW50RGVsZWdhdGVIb29rXCI7XG5pbXBvcnQganN4IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCBTaGVsbEhpc3RvcnlQcm92aWRlciBmcm9tIFwic2FwL2ZlL2NvbnRyb2xzL2Vhc3lGaWx0ZXIvU2hlbGxIaXN0b3J5UHJvdmlkZXJcIjtcbmltcG9ydCB0eXBlIHsgQnV0dG9uJFByZXNzRXZlbnQgfSBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBDdXN0b21MaXN0SXRlbSBmcm9tIFwic2FwL20vQ3VzdG9tTGlzdEl0ZW1cIjtcbmltcG9ydCBGbGV4Qm94IGZyb20gXCJzYXAvbS9GbGV4Qm94XCI7XG5pbXBvcnQgSEJveCBmcm9tIFwic2FwL20vSEJveFwiO1xuaW1wb3J0IElsbHVzdHJhdGVkTWVzc2FnZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlXCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZVwiO1xuaW1wb3J0IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUgZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVR5cGVcIjtcbmltcG9ydCB0eXBlIHsgSW5wdXQkTGl2ZUNoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC9tL0lucHV0XCI7XG5pbXBvcnQgSW5wdXQgZnJvbSBcInNhcC9tL0lucHV0XCI7XG5pbXBvcnQgTGlzdCBmcm9tIFwic2FwL20vTGlzdFwiO1xuaW1wb3J0IHR5cGUgeyBMaXN0QmFzZSREZWxldGVFdmVudCB9IGZyb20gXCJzYXAvbS9MaXN0QmFzZVwiO1xuaW1wb3J0IFBvcG92ZXIgZnJvbSBcInNhcC9tL1BvcG92ZXJcIjtcbmltcG9ydCB0eXBlIFN0YW5kYXJkTGlzdEl0ZW0gZnJvbSBcInNhcC9tL1N0YW5kYXJkTGlzdEl0ZW1cIjtcbmltcG9ydCBUZXh0IGZyb20gXCJzYXAvbS9UZXh0XCI7XG5pbXBvcnQgVGl0bGUgZnJvbSBcInNhcC9tL1RpdGxlXCI7XG5pbXBvcnQgeyBCdXR0b25UeXBlLCBGbGV4QWxpZ25JdGVtcywgRmxleERpcmVjdGlvbiwgRmxleEp1c3RpZnlDb250ZW50LCBGbGV4V3JhcCwgTGlzdE1vZGUsIFBsYWNlbWVudFR5cGUgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDdXN0b21EYXRhIGZyb20gXCJzYXAvdWkvY29yZS9DdXN0b21EYXRhXCI7XG5pbXBvcnQgSW52aXNpYmxlVGV4dCBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlVGV4dFwiO1xuaW1wb3J0IExpYiBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSBSZW5kZXJNYW5hZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9SZW5kZXJNYW5hZ2VyXCI7XG5pbXBvcnQgeyBUaXRsZUxldmVsLCBWYWx1ZVN0YXRlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEV2ZW50SGFuZGxlciB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcblxudHlwZSBSZWNlbnRUeXBlID0ge1xuXHR0ZXh0OiBzdHJpbmc7XG5cdGlzRmF2b3JpdGU6IGJvb2xlYW47XG59O1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvbnRyb2xzLmVhc3lGaWx0ZXIuRWFzeUZpbHRlcklucHV0XCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFYXN5RmlsdGVySW5wdXQgZXh0ZW5kcyBDb250cm9sIHtcblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAubS5JbnB1dFwiLCBtdWx0aXBsZTogZmFsc2UsIGlzRGVmYXVsdDogdHJ1ZSB9KVxuXHQkc2VhcmNoSW5wdXQhOiBJbnB1dDtcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGFwcElkPzogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYXJyYXlcIiB9KVxuXHRyZWNvbW1lbmRlZFZhbHVlcz86IHN0cmluZ1tdO1xuXG5cdEBldmVudCgpXG5cdHF1ZXJ5Q2hhbmdlZD86IEV2ZW50SGFuZGxlcjxVSTVFdmVudDx7IHF1ZXJ5OiBzdHJpbmcgfSwgRWFzeUZpbHRlcklucHV0Pj47XG5cblx0QGV2ZW50KClcblx0ZW50ZXJQcmVzc2VkPzogRXZlbnRIYW5kbGVyPFVJNUV2ZW50PHsgcXVlcnk6IHN0cmluZyB9LCBFYXN5RmlsdGVySW5wdXQ+PjtcblxuXHRAZXZlbnQoKVxuXHRsaXZlQ2hhbmdlPzogRXZlbnRIYW5kbGVyO1xuXG5cdHByaXZhdGUgcmVzb3VyY2VCdW5kbGUhOiBSZXNvdXJjZUJ1bmRsZTtcblxuXHRzaGVsbEhpc3RvcnlQcm92aWRlcjogU2hlbGxIaXN0b3J5UHJvdmlkZXIgfCB1bmRlZmluZWQ7XG5cblx0JGZhdm9yaXRlUG9wb3ZlcjogUG9wb3ZlciB8IHVuZGVmaW5lZDtcblxuXHRAZGVmaW5lU3RhdGUoKVxuXHRwcm90ZWN0ZWQgc3RhdGU6IFN0YXRlT2Y8e1xuXHRcdHF1ZXJ5Q2hhbmdlZDogYm9vbGVhbjtcblx0XHRyZWNlbnRRdWVyaWVzOiByZWFkb25seSBzdHJpbmdbXTtcblx0XHRyZWNlbnRRdWVyaWVzV2l0RmF2b3JpdGVzOiByZWFkb25seSBSZWNlbnRUeXBlW107XG5cdFx0aXNIaXN0b3J5RW5hYmxlZDogYm9vbGVhbjtcblx0XHRmYXZvcml0ZVF1ZXJpZXM6IHN0cmluZ1tdO1xuXHRcdHJlY29tbWVuZGVkUXVlcmllczogc3RyaW5nW107XG5cdH0+ID0ge1xuXHRcdHF1ZXJ5Q2hhbmdlZDogZmFsc2UsXG5cdFx0aXNIaXN0b3J5RW5hYmxlZDogZmFsc2UsXG5cdFx0cmVjZW50UXVlcmllczogW10sXG5cdFx0cmVjZW50UXVlcmllc1dpdEZhdm9yaXRlczogW10sXG5cdFx0ZmF2b3JpdGVRdWVyaWVzOiBbXSBhcyBzdHJpbmdbXSxcblx0XHRyZWNvbW1lbmRlZFF1ZXJpZXM6IFtdIGFzIHN0cmluZ1tdXG5cdH07XG5cblx0Y29uc3RydWN0b3IocHJvcGVydGllczogc3RyaW5nIHwgKCRDb250cm9sU2V0dGluZ3MgJiBQcm9wZXJ0aWVzT2Y8RWFzeUZpbHRlcklucHV0PiksIG90aGVycz86ICRDb250cm9sU2V0dGluZ3MpIHtcblx0XHRzdXBlcihwcm9wZXJ0aWVzIGFzIHN0cmluZywgb3RoZXJzKTtcblx0XHR0aGlzLmluaXRpYWxpemUoKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRWYWx1ZSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLiRzZWFyY2hJbnB1dC5nZXRWYWx1ZSgpO1xuXHR9XG5cblx0cHVibGljIGlzSGlzdG9yeUVuYWJsZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuc3RhdGUuaXNIaXN0b3J5RW5hYmxlZC52YWx1ZU9mKCk7XG5cdH1cblxuXHRzZXRWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdGhpcyB7XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQuc2V0VmFsdWUodmFsdWUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0UGxhY2Vob2xkZXIodmFsdWU6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuJHNlYXJjaElucHV0LnNldFBsYWNlaG9sZGVyKHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBnZXRQbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLiRzZWFyY2hJbnB1dC5nZXRQbGFjZWhvbGRlcigpO1xuXHR9XG5cblx0aW5pdGlhbGl6ZSgpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXRlLnJlY29tbWVuZGVkUXVlcmllcyA9IHRoaXMucmVjb21tZW5kZWRWYWx1ZXMgPz8gW107XG5cdFx0dGhpcy5yZXNvdXJjZUJ1bmRsZSA9IExpYi5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb250cm9sc1wiKSE7XG5cdFx0dGhpcy5jcmVhdGVJbnB1dCgpO1xuXHR9XG5cblx0c2V0QXNJbnZhbGlkKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuJHNlYXJjaElucHV0LnNldFZhbHVlU3RhdGUoVmFsdWVTdGF0ZS5XYXJuaW5nKTtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dC5zZXRWYWx1ZVN0YXRlVGV4dChtZXNzYWdlKTtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dC5vcGVuVmFsdWVTdGF0ZU1lc3NhZ2UoKTtcblx0fVxuXG5cdGNyZWF0ZUlucHV0KCk6IHZvaWQge1xuXHRcdHRoaXMuJHNlYXJjaElucHV0ID0gKFxuXHRcdFx0PElucHV0XG5cdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdHNob3dDbGVhckljb249e3RydWV9XG5cdFx0XHRcdGNoYW5nZT17KGUpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLmZpcmVFdmVudChcInF1ZXJ5Q2hhbmdlZFwiLCB7IHF1ZXJ5OiBlLmdldFBhcmFtZXRlcihcInZhbHVlXCIpIH0pO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRsaXZlQ2hhbmdlPXsoZTogSW5wdXQkTGl2ZUNoYW5nZUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5zdGF0ZS5xdWVyeUNoYW5nZWQgPSB0cnVlO1xuXHRcdFx0XHRcdHRoaXMuZmlyZUV2ZW50KFwibGl2ZUNoYW5nZVwiKTtcblx0XHRcdFx0XHRpZiAoIWUuZ2V0U291cmNlKCkuZ2V0VmFsdWUoKSAmJiAhKHRoaXMuJGZhdm9yaXRlUG9wb3Zlcj8uaXNPcGVuKCkgPz8gZmFsc2UpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9wZW5TdWdnZXN0aW9uUG9wb3ZlcigpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoZS5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKSA9PT0gXCJcIikge1xuXHRcdFx0XHRcdFx0dGhpcy5zZXRQbGFjZWhvbGRlcih0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BMQUNFSE9MREVSXCIpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH19XG5cdFx0XHRcdHBsYWNlaG9sZGVyPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BMQUNFSE9MREVSXCIpfVxuXHRcdFx0PjwvSW5wdXQ+XG5cdFx0KTtcblxuXHRcdGNvbnN0IHRleHRCaW5kaW5nID0gdGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiVF9FQVNZX0ZJTFRFUl9JTlBVVF9URVhUX0xJTktfUE9QT1ZFUl9BUklBXCIpO1xuXHRcdGNvbnN0IGludmlzaWJsZVRleHQgPSBuZXcgSW52aXNpYmxlVGV4dCh7IHRleHQ6IHRleHRCaW5kaW5nIH0pLnRvU3RhdGljKCk7XG5cdFx0Y29uc3QgZmF2b3JpdGVQb3BvdmVyID0gdGhpcy5jcmVhdGVGYXZvcml0ZVBvcG92ZXIoKTtcblx0XHR0aGlzLiRmYXZvcml0ZVBvcG92ZXIgPSBmYXZvcml0ZVBvcG92ZXI7XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQuYWRkQXJpYURlc2NyaWJlZEJ5KGZhdm9yaXRlUG9wb3Zlcik7XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQuYWRkQXJpYURlc2NyaWJlZEJ5KGludmlzaWJsZVRleHQpO1xuXHRcdHRoaXMuJHNlYXJjaElucHV0LmFkZERlcGVuZGVudChmYXZvcml0ZVBvcG92ZXIpO1xuXHRcdHRoaXMuJHNlYXJjaElucHV0LmFkZEV2ZW50RGVsZWdhdGUoe1xuXHRcdFx0b25rZXl1cDogKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKGUua2V5ID09PSBcIkVudGVyXCIpIHtcblx0XHRcdFx0XHR0aGlzLm9uRW50ZXJQcmVzc2VkKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuJGZhdm9yaXRlUG9wb3ZlciAmJiB0aGlzLiRzZWFyY2hJbnB1dC5nZXRWYWx1ZSgpKSB7XG5cdFx0XHRcdFx0dGhpcy4kZmF2b3JpdGVQb3BvdmVyLmNsb3NlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRvbmtleWRvd246IChlOiBLZXlib2FyZEV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRlLmtleSA9PT0gXCJUYWJcIiAmJlxuXHRcdFx0XHRcdHRoaXMuJHNlYXJjaElucHV0Py5nZXRWYWx1ZSgpLmxlbmd0aCA9PT0gMCAmJlxuXHRcdFx0XHRcdHRoaXMuJHNlYXJjaElucHV0Py5nZXRWYWx1ZSgpICE9PSB0aGlzLiRzZWFyY2hJbnB1dD8uZ2V0UGxhY2Vob2xkZXIoKSAmJlxuXHRcdFx0XHRcdHRoaXMuJHNlYXJjaElucHV0Py5nZXRQbGFjZWhvbGRlcigpICE9PSB0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BMQUNFSE9MREVSXCIpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uc2V0VmFsdWUodGhpcy4kc2VhcmNoSW5wdXQ/LmdldFBsYWNlaG9sZGVyKCkpO1xuXHRcdFx0XHRcdHRoaXMuZmlyZUV2ZW50KFwibGl2ZUNoYW5nZVwiKTtcblx0XHRcdFx0fSBlbHNlIGlmIChlLmtleSA9PT0gXCJBcnJvd0Rvd25cIikge1xuXHRcdFx0XHRcdGNvbnN0IHBvcG92ZXJDb25haW5lciA9IHRoaXMuJGZhdm9yaXRlUG9wb3Zlcj8uZ2V0Q29udGVudCgpWzBdO1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRhaW5lckl0ZW1zID0gKHBvcG92ZXJDb25haW5lciBhcyBGbGV4Qm94KS5nZXRJdGVtcygpO1xuXHRcdFx0XHRcdGNvbnRhaW5lckl0ZW1zPy5maW5kKChpdGVtKSA9PiBpdGVtLmlzRm9jdXNhYmxlKCkgJiYgKGl0ZW0uZm9jdXMoKSwgdHJ1ZSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0b250YXA6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5vcGVuU3VnZ2VzdGlvblBvcG92ZXIoKTtcblx0XHRcdH0sXG5cdFx0XHRvbmZvY3VzaW46ICgpID0+IHtcblx0XHRcdFx0dGhpcy5vcGVuU3VnZ2VzdGlvblBvcG92ZXIoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHR0aGlzLiRmYXZvcml0ZVBvcG92ZXIuYWRkRXZlbnREZWxlZ2F0ZSh7XG5cdFx0XHRvbmtleWRvd246IChlOiBLZXlib2FyZEV2ZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHRhcmdldFRleHQgPSAoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5vdXRlclRleHQ7XG5cdFx0XHRcdGNvbnN0IHRhcmdldElkID0gKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8uaWQ7XG5cdFx0XHRcdHN3aXRjaCAoZS5rZXkpIHtcblx0XHRcdFx0XHRjYXNlIFwiRW50ZXJcIjpcblx0XHRcdFx0XHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZSh0YXJnZXRUZXh0KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJEZWxldGVcIjpcblx0XHRcdFx0XHRcdGlmICh0YXJnZXRJZD8uaW5jbHVkZXMoXCJlYXN5RmlsdGVyRmF2b3JpdGVJdGVtXCIpKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzID0gdGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMuZmlsdGVyKFxuXHRcdFx0XHRcdFx0XHRcdChkYXRhKSA9PiBkYXRhLnRvTG93ZXJDYXNlKCkgIT09IHRhcmdldFRleHQudG9Mb3dlckNhc2UoKVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzID0gdGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzLmZpbHRlcigocXVlcnkpID0+IHF1ZXJ5ICE9PSB0YXJnZXRUZXh0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJFc2NhcGVcIjpcblx0XHRcdFx0XHRcdGlmICh0aGlzLiRmYXZvcml0ZVBvcG92ZXI/LmlzT3BlbigpKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJGZhdm9yaXRlUG9wb3Zlci5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgb3BlblN1Z2dlc3Rpb25Qb3BvdmVyKCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy4kc2VhcmNoSW5wdXQ/LmdldFZhbHVlKCkgJiYgKCF0aGlzLiRmYXZvcml0ZVBvcG92ZXIgfHwgIXRoaXMuJGZhdm9yaXRlUG9wb3Zlcj8uaXNPcGVuKCkpKSB7XG5cdFx0XHQvLyBPcGVuIHRoZSBlYXN5IGZpbHRlciBwb3BvdmVyXG5cdFx0XHR0aGlzLnN0YXRlLmlzSGlzdG9yeUVuYWJsZWQgPSB0aGlzLnNoZWxsSGlzdG9yeVByb3ZpZGVyPy5pc0hpc3RvcnlFbmFibGVkKCkgPz8gZmFsc2U7XG5cdFx0XHR0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcyA9IHRoaXMuc2hlbGxIaXN0b3J5UHJvdmlkZXI/LmdldEZhdm9yaXRlUXVlcmllcygpID8/IFtdO1xuXHRcdFx0dGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzID0gKHRoaXMuc2hlbGxIaXN0b3J5UHJvdmlkZXI/LmdldFJlY2VudFF1ZXJpZXMoKSA/PyBbXSkubWFwKChxdWVyeSkgPT4gcXVlcnkpO1xuXHRcdFx0dGhpcy4kZmF2b3JpdGVQb3BvdmVyPy5vcGVuQnkodGhpcy4kc2VhcmNoSW5wdXQpO1xuXHRcdH1cblx0fVxuXG5cdHJlcXVlc3RGYXZvcml0ZShlOiBCdXR0b24kUHJlc3NFdmVudCk6IHZvaWQge1xuXHRcdHRoaXMuJGZhdm9yaXRlUG9wb3Zlcj8uY2xvc2UoKTtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uc2V0VmFsdWUoZS5nZXRTb3VyY2UoKS5nZXRUZXh0KCkpO1xuXHRcdHRoaXMub25FbnRlclByZXNzZWQoKTtcblx0fVxuXG5cdG9uRW50ZXJQcmVzc2VkKCk6IHZvaWQge1xuXHRcdHRoaXMuJGZhdm9yaXRlUG9wb3Zlcj8uY2xvc2UoKTtcblx0XHR0aGlzLnN0YXRlLnF1ZXJ5Q2hhbmdlZCA9IGZhbHNlO1xuXHRcdGxldCBtYWdpY1F1ZXJ5ID0gdGhpcy4kc2VhcmNoSW5wdXQ/LmdldFZhbHVlKCk7XG5cdFx0aWYgKG1hZ2ljUXVlcnkgPT09IFwiXCIgJiYgdGhpcy4kc2VhcmNoSW5wdXQuZ2V0UGxhY2Vob2xkZXIoKSAhPT0gdGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QTEFDRUhPTERFUlwiKSkge1xuXHRcdFx0bWFnaWNRdWVyeSA9IHRoaXMuJHNlYXJjaElucHV0LmdldFBsYWNlaG9sZGVyKCk7XG5cdFx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uc2V0VmFsdWUobWFnaWNRdWVyeSk7XG5cdFx0fVxuXHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZVN0YXRlVGV4dChcIlwiKTtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uc2V0VmFsdWVTdGF0ZShcIk5vbmVcIik7XG5cdFx0dGhpcy5maXJlRXZlbnQoXCJlbnRlclByZXNzZWRcIiwgeyBxdWVyeTogbWFnaWNRdWVyeSB9KTtcblx0fVxuXG5cdGFkZFJlY2VudFF1ZXJ5KHF1ZXJ5U3RyaW5nOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHQvLyBOb3JtYWxpemUgYmFja3NsYXNoZXMgYmVmb3JlIHN0b3Jpbmdcblx0XHRxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nPy5yZXBsYWNlKC9cXFxcL2csIFwiXFxcXFxcXFxcIik7XG5cblx0XHRjb25zdCByZWNlbnRRdWVyeUluZGV4ID0gdGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzLmZpbmRJbmRleCgocXVlcnkpID0+IHF1ZXJ5LnRvTG93ZXJDYXNlKCkgPT09IHF1ZXJ5U3RyaW5nPy50b0xvd2VyQ2FzZSgpKTtcblx0XHRpZiAocXVlcnlTdHJpbmcgJiYgcmVjZW50UXVlcnlJbmRleCA9PT0gLTEpIHtcblx0XHRcdHRoaXMuc3RhdGUucmVjZW50UXVlcmllcyA9IFtxdWVyeVN0cmluZ10uY29uY2F0KHRoaXMuc3RhdGUucmVjZW50UXVlcmllcyk7XG5cdFx0XHRpZiAodGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzLmxlbmd0aCA+IDUpIHtcblx0XHRcdFx0dGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzID0gdGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzLnNsaWNlKDAsIDUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAocXVlcnlTdHJpbmcpIHtcblx0XHRcdGNvbnN0IHJlY2VudFF1ZXJpZXMgPSB0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMuZmlsdGVyKChxdWVyeSkgPT4gcXVlcnkudG9Mb3dlckNhc2UoKSAhPT0gcXVlcnlTdHJpbmc/LnRvTG93ZXJDYXNlKCkpO1xuXHRcdFx0cmVjZW50UXVlcmllcy51bnNoaWZ0KHF1ZXJ5U3RyaW5nKTtcblx0XHRcdHRoaXMuc3RhdGUucmVjZW50UXVlcmllcyA9IHJlY2VudFF1ZXJpZXM7XG5cdFx0fVxuXHR9XG5cblx0b25TdGF0ZUNoYW5nZShjaGFuZ2VkUHJvcHM6IHN0cmluZ1tdID0gW10pOiB2b2lkIHtcblx0XHRpZiAoY2hhbmdlZFByb3BzLmluY2x1ZGVzKFwiZmF2b3JpdGVRdWVyaWVzXCIpIHx8IGNoYW5nZWRQcm9wcy5pbmNsdWRlcyhcInJlY2VudFF1ZXJpZXNcIikpIHtcblx0XHRcdHRoaXMuc2hlbGxIaXN0b3J5UHJvdmlkZXI/LnNldEZhdm9yaXRlUXVlcmllcyh0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcyk7XG5cdFx0XHR0aGlzLnNoZWxsSGlzdG9yeVByb3ZpZGVyPy5zZXRSZWNlbnRRdWVyaWVzKHRoaXMuc3RhdGUucmVjZW50UXVlcmllcy5tYXAoKHF1ZXJ5KSA9PiBxdWVyeSkpO1xuXHRcdFx0dGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzV2l0RmF2b3JpdGVzID0gdGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzLm1hcCgocmVjZW50UXVlcnkpID0+IHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHR0ZXh0OiByZWNlbnRRdWVyeSxcblx0XHRcdFx0XHRpc0Zhdm9yaXRlOiAhIXRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzLmZpbmQoKGZhdm9yaXRlUXVlcnkpID0+IGZhdm9yaXRlUXVlcnkgPT09IHJlY2VudFF1ZXJ5KVxuXHRcdFx0XHR9O1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgaW5pdFNoZWxsSGlzdG9yeVByb3ZpZGVyKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzLnNoZWxsSGlzdG9yeVByb3ZpZGVyID0gYXdhaXQgU2hlbGxIaXN0b3J5UHJvdmlkZXIuZ2V0SW5zdGFuY2UodGhpcy5hcHBJZCA/PyBcIjx1bmtub3duQXBwPlwiKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgY3JlYXRpbmcgU2hlbGxIaXN0b3J5UHJvdmlkZXIgZm9yIGVhc3kgZmlsdGVyXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG5cblx0Y3JlYXRlRmF2b3JpdGVQb3BvdmVyKCk6IFBvcG92ZXIge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8UG9wb3ZlclxuXHRcdFx0XHRpZD17dGhpcy5nZXRJZCgpICsgXCItZmF2b3JpdGVQb3BvdmVyXCJ9XG5cdFx0XHRcdHNob3dIZWFkZXI9e2ZhbHNlfVxuXHRcdFx0XHRob3Jpem9udGFsU2Nyb2xsaW5nPXtmYWxzZX1cblx0XHRcdFx0cGxhY2VtZW50PXtQbGFjZW1lbnRUeXBlLkJvdHRvbX1cblx0XHRcdFx0c2hvd0Fycm93PXtmYWxzZX1cblx0XHRcdFx0aW5pdGlhbEZvY3VzPXt0aGlzLiRzZWFyY2hJbnB1dH1cblx0XHRcdFx0Y2xhc3M9e1wic2FwRkVDb250cm9sc1BvcG92ZXJcIn1cblx0XHRcdFx0dmlzaWJsZT17dGhpcy5zdGF0ZS5yZWNvbW1lbmRlZFF1ZXJpZXMubGVuZ3RoID4gMCB8fCBlcXVhbChiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJpc0hpc3RvcnlFbmFibGVkXCIpLCB0cnVlKX1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjb250ZW50OiAoXG5cdFx0XHRcdFx0XHQ8RmxleEJveCBkaXJlY3Rpb249e0ZsZXhEaXJlY3Rpb24uQ29sdW1ufSBjbGFzcz17XCJzYXBVaUNvbnRlbnRQYWRkaW5nXCJ9IHJlbmRlclR5cGU9e1wiQmFyZVwifT5cblx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRpdGVtczogW1xuXHRcdFx0XHRcdFx0XHRcdFx0PFRpdGxlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlU3R5bGU9e1RpdGxlTGV2ZWwuSDZ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUE9QT1ZFUl9TVUdHRVNUSU9OU19USVRMRVwiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwRmVDb250cm9sc1RpdGxlQm9yZGVyXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGU9e3RoaXMuc3RhdGUucmVjb21tZW5kZWRRdWVyaWVzLmxlbmd0aCA+IDB9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPixcblx0XHRcdFx0XHRcdFx0XHRcdDxIQm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcFVpQ29udGVudFBhZGRpbmdcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0aXRlbXM9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInJlY29tbWVuZGVkUXVlcmllc1wiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0d3JhcD17RmxleFdyYXAuV3JhcH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17dGhpcy5zdGF0ZS5yZWNvbW1lbmRlZFF1ZXJpZXMubGVuZ3RoID4gMH1cblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtczogKGlkOiBzdHJpbmcsIGN0eDogQ29udGV4dCk6IFN0YW5kYXJkTGlzdEl0ZW0gPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcFVpVGlueU1hcmdpbkVuZFwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ9e2N0eC5nZXRPYmplY3QoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcmVzcz17dGhpcy5yZXF1ZXN0RmF2b3JpdGUuYmluZCh0aGlzKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9IQm94Pixcblx0XHRcdFx0XHRcdFx0XHRcdDxUaXRsZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17dGhpcy5nZXRJZCgpICsgXCItZWFzeUZpbHRlckZhdm9yaXRlVGl0bGVcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGVTdHlsZT17VGl0bGVMZXZlbC5INn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX0ZBVk9SSVRFX1RJVExFXCIpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz17XCJzYXBGZUNvbnRyb2xzVGl0bGVCb3JkZXJcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17ZXF1YWwoYmluZFN0YXRlKHRoaXMuc3RhdGUsIFwiaXNIaXN0b3J5RW5hYmxlZFwiKSwgdHJ1ZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPixcblx0XHRcdFx0XHRcdFx0XHRcdDxMaXN0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1zPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJmYXZvcml0ZVF1ZXJpZXNcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGU9e2VxdWFsKGJpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcImlzSGlzdG9yeUVuYWJsZWRcIiksIHRydWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5vRGF0YTogKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PElsbHVzdHJhdGVkTWVzc2FnZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZT17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX0VNUFRZX0ZBVk9SSVRFX1RJVExFXCIpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbGx1c3RyYXRpb25TaXplPXtJbGx1c3RyYXRlZE1lc3NhZ2VTaXplLkV4dHJhU21hbGx9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU9e0lsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9FbnRyaWVzfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbj17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX0VNUFRZX0ZBVk9SSVRFX0RFU0NSSVBUSU9OXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtczogKGlkOiBzdHJpbmcsIGN0eDogQ29udGV4dCk6IFN0YW5kYXJkTGlzdEl0ZW0gPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEN1c3RvbUxpc3RJdGVtXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9e2lkICsgXCItZWFzeUZpbHRlckZhdm9yaXRlSXRlbVwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcFVpU21hbGxNYXJnaW5CZWdpblwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtbaWQgKyBcIi1lYXN5RmlsdGVyRmF2b3JpdGVUaXRsZVwiXX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdXN0b21EYXRhPXtbPEN1c3RvbURhdGEga2V5PXtcInRleHRcIn0gdmFsdWU9e2N0eC5nZXRPYmplY3QoKX0gLz5dfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWFyY2hJbnB1dC5zZXRWYWx1ZShjdHguZ2V0T2JqZWN0KCkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5vbkVudGVyUHJlc3NlZCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8RmxleEJveFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0d2lkdGg9e1wiMTAwJVwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlyZWN0aW9uPXtGbGV4RGlyZWN0aW9uLlJvd31cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsaWduSXRlbXM9e0ZsZXhBbGlnbkl0ZW1zLkNlbnRlcn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGp1c3RpZnlDb250ZW50PXtGbGV4SnVzdGlmeUNvbnRlbnQuU3BhY2VCZXR3ZWVufVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVuZGVyVHlwZT17XCJCYXJlXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17aWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PFRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dD17Y3R4LmdldE9iamVjdCgpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwPXtjdHguZ2V0T2JqZWN0KCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHdyYXBwaW5nPXtmYWxzZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJzYXBGRUNvbnRyb2xzUG9pbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVwZW5kZW50czogKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEV2ZW50RGVsZWdhdGVIb29rXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRhcD17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZShcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGN0eC5nZXRPYmplY3QoKS5yZXBsYWNlKC9cXFxcXFxcXC9nLCBcIlxcXFxcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMub25FbnRlclByZXNzZWQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9UZXh0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpY29uPXtcInNhcC1pY29uOi8vZmF2b3JpdGVcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dG9vbHRpcD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9GSUxMRURfU1RBUlwiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1t0aGlzLmdldElkKCkgKyBcIi1lYXN5RmlsdGVyRmF2b3JpdGVJdGVtXCJdfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPXtCdXR0b25UeXBlLlRyYW5zcGFyZW50fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vUmV0YWluaW5nIHRoZSBmb2N1cyBvbiBwb3BvdmVyIGRvZXNuJ3QgbWFrZSB0aGUgcG9wb3ZlciBjbG9zZSBvbiBldmVyeSBpbnRlcmFjdGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJGZhdm9yaXRlUG9wb3Zlcj8uZm9jdXMoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBxdWVyeVN0cmluZyA9IGN0eC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBpbmRleCA9IHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzLmluZGV4T2YocXVlcnlTdHJpbmcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChpbmRleCAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzID0gdGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMuZmlsdGVyKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQocXVlcnkpID0+IHF1ZXJ5ICE9PSBxdWVyeVN0cmluZ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvRmxleEJveD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9DdXN0b21MaXN0SXRlbT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9MaXN0Pixcblx0XHRcdFx0XHRcdFx0XHRcdDxUaXRsZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17dGhpcy5nZXRJZCgpICsgXCItZWFzeUZpbHRlckxhc3RVc2VkVGl0bGVcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGVTdHlsZT17VGl0bGVMZXZlbC5INn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX0xBU1RfVVNFRFwiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwRmVDb250cm9sc1RpdGxlQm9yZGVyXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGU9e2VxdWFsKGJpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcImlzSGlzdG9yeUVuYWJsZWRcIiksIHRydWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0Lz4sXG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGlzdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtcz17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwicmVjZW50UXVlcmllc1dpdEZhdm9yaXRlc1wiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17ZXF1YWwoYmluZFN0YXRlKHRoaXMuc3RhdGUsIFwiaXNIaXN0b3J5RW5hYmxlZFwiKSwgdHJ1ZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1vZGU9e0xpc3RNb2RlLkRlbGV0ZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVsZXRlPXsoZTogTGlzdEJhc2UkRGVsZXRlRXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBpdGVtID0gZS5nZXRQYXJhbWV0ZXIoXCJsaXN0SXRlbVwiKSBhcyBDdXN0b21MaXN0SXRlbTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtLmZvY3VzKCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgcXVlcnlTdHJpbmcgPSBlLmdldFBhcmFtZXRlcihcImxpc3RJdGVtXCIpPy5kYXRhKFwidGV4dFwiKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICghcXVlcnlTdHJpbmcpIHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBOb3JtYWxpemUgYmFja3NsYXNoZXMgYmVmb3JlIGNvbXBhcmluZ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmc/LnJlcGxhY2UoL1xcXFwvZywgXCJcXFxcXFxcXFwiKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc3RhdGUucmVjZW50UXVlcmllcyA9IHRoaXMuc3RhdGUucmVjZW50UXVlcmllcy5maWx0ZXIoKHF1ZXJ5KSA9PiBxdWVyeSAhPT0gcXVlcnlTdHJpbmcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5vRGF0YTogKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PElsbHVzdHJhdGVkTWVzc2FnZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZT17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX0VNUFRZX0xBU1RfVVNFRF9USVRMRVwiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWxsdXN0cmF0aW9uU2l6ZT17SWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZS5FeHRyYVNtYWxsfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlPXtJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vRW50cmllc31cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb249e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIk1fRUFTWV9GSUxURVJfUE9QT1ZFUl9FTVBUWV9SRUNFTlRfREVTQ1JJUFRJT05cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1zOiAoaWQ6IHN0cmluZywgY3R4OiBDb250ZXh0KTogRmxleEJveCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q3VzdG9tTGlzdEl0ZW1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17aWQgKyBcIi1lYXN5RmlsdGVyTGFzdFVzZWRJdGVtXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZShjdHguZ2V0T2JqZWN0KCkudGV4dCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uRW50ZXJQcmVzc2VkKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz17XCJzYXBVaVNtYWxsTWFyZ2luQmVnaW5cIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdXN0b21EYXRhPXtbPEN1c3RvbURhdGEga2V5PXtcInRleHRcIn0gdmFsdWU9e2N0eC5nZXRPYmplY3QoKS50ZXh0fSAvPl19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1tpZCArIFwiLWVhc3lGaWx0ZXJMYXN0VXNlZFRpdGxlXCJdfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEZsZXhCb3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHdpZHRoPXtcIjEwMCVcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpcmVjdGlvbj17RmxleERpcmVjdGlvbi5Sb3d9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhbGlnbkl0ZW1zPXtGbGV4QWxpZ25JdGVtcy5DZW50ZXJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRqdXN0aWZ5Q29udGVudD17RmxleEp1c3RpZnlDb250ZW50LlNwYWNlQmV0d2Vlbn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlbmRlclR5cGU9e1wiQmFyZVwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9e2lkfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxUZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ9e2N0eC5nZXRPYmplY3QoKS50ZXh0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwPXtjdHguZ2V0T2JqZWN0KCkudGV4dH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0d3JhcHBpbmc9e2ZhbHNlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInNhcEZFQ29udHJvbHNQb2ludGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZXBlbmRlbnRzOiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8RXZlbnREZWxlZ2F0ZUhvb2tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFwPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LnNldFZhbHVlKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y3R4LmdldE9iamVjdCgpLnRleHQucmVwbGFjZSgvXFxcXFxcXFwvZywgXCJcXFxcXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uRW50ZXJQcmVzc2VkKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvVGV4dD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWNvbj17XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y3R4LmdldE9iamVjdCgpLmlzRmF2b3JpdGVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gXCJzYXAtaWNvbjovL2Zhdm9yaXRlXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogXCJzYXAtaWNvbjovL2FkZC1mYXZvcml0ZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dG9vbHRpcD17XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y3R4LmdldE9iamVjdCgpLmlzRmF2b3JpdGVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gdGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9GSUxMRURfU1RBUlwiKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OiB0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX0VNUFRZX1NUQVJUXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZW5hYmxlZD17bGVzc1RoYW4oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGVuZ3RoKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YmluZFN0YXRlKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnN0YXRlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcImZhdm9yaXRlUXVlcmllc1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpIGFzIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjx1bmtub3duPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0NVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPXtCdXR0b25UeXBlLlRyYW5zcGFyZW50fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17W2lkICsgXCItZWFzeUZpbHRlckxhc3RVc2VkSXRlbVwiXX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvL1JldGFpbmluZyB0aGUgZm9jdXMgb24gcG9wb3ZlciBkb2Vzbid0IG1ha2UgdGhlIHBvcG92ZXIgY2xvc2Ugb24gZXZlcnkgaW50ZXJhY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRmYXZvcml0ZVBvcG92ZXI/LmZvY3VzKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgcXVlcnlTdHJpbmcgPSBjdHguZ2V0T2JqZWN0KCkudGV4dDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBpc0Zhdm9yaXRlID0gY3R4LmdldE9iamVjdCgpLmlzRmF2b3JpdGU7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoaXNGYXZvcml0ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5yZW1vdmVGcm9tRmF2b3JpdGVzKHF1ZXJ5U3RyaW5nKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hZGRUb0Zhdm9yaXRlcyhxdWVyeVN0cmluZyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvQ3VzdG9tTGlzdEl0ZW0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvTGlzdD5cblx0XHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9Qb3BvdmVyPlxuXHRcdCkgYXMgUG9wb3Zlcjtcblx0fVxuXG5cdHByaXZhdGUgcmVtb3ZlRnJvbUZhdm9yaXRlcyhxdWVyeTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMgPSB0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcy5maWx0ZXIoKGRhdGEpID0+IGRhdGEudG9Mb3dlckNhc2UoKSAhPT0gcXVlcnkudG9Mb3dlckNhc2UoKSk7XG5cdH1cblxuXHRwcml2YXRlIGFkZFRvRmF2b3JpdGVzKHF1ZXJ5OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBuZXdGYXZvcml0ZSA9IFtxdWVyeV0uY29uY2F0KHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzLmNvbmNhdCgpKTtcblx0XHRpZiAobmV3RmF2b3JpdGUubGVuZ3RoID4gNSkge1xuXHRcdFx0bmV3RmF2b3JpdGUucG9wKCk7XG5cdFx0fVxuXHRcdHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzID0gbmV3RmF2b3JpdGU7XG5cdH1cblxuXHRzdGF0aWMgcmVuZGVyKHJtOiBSZW5kZXJNYW5hZ2VyLCBjb250cm9sOiBFYXN5RmlsdGVySW5wdXQpOiB2b2lkIHtcblx0XHRyZXR1cm4ganN4LnJlbmRlclVzaW5nUmVuZGVyTWFuYWdlcihybSwgY29udHJvbCwgKCkgPT4ge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PHNwYW4gcmVmPXtjb250cm9sfSBjbGFzcz17XCJzYXBGRUVhc3lGaWx0ZXJJbnB1dFwifT5cblx0XHRcdFx0XHR7Y29udHJvbC4kc2VhcmNoSW5wdXR9XG5cdFx0XHRcdDwvc3Bhbj5cblx0XHRcdCk7XG5cdFx0fSk7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUF5Q3FCQSxlQUFlLElBQUFDLElBQUEsR0FEbkNDLGNBQWMsQ0FBQyw0Q0FBNEMsQ0FBQyxFQUFBQyxLQUFBLEdBRTNEQyxXQUFXLENBQUM7SUFBRUMsSUFBSSxFQUFFLGFBQWE7SUFBRUMsUUFBUSxFQUFFLEtBQUs7SUFBRUMsU0FBUyxFQUFFO0VBQUssQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHdEVDLFFBQVEsQ0FBQztJQUFFSixJQUFJLEVBQUU7RUFBUyxDQUFDLENBQUMsRUFBQUssS0FBQSxHQUc1QkQsUUFBUSxDQUFDO0lBQUVKLElBQUksRUFBRTtFQUFRLENBQUMsQ0FBQyxFQUFBTSxLQUFBLEdBRzNCQyxLQUFLLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBR1BELEtBQUssQ0FBQyxDQUFDLEVBQUFF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
|
|
@@ -27,6 +27,7 @@ import type UI5Event from "sap/ui/base/Event";
|
|
|
27
27
|
import type { $ControlSettings } from "sap/ui/core/Control";
|
|
28
28
|
import Control from "sap/ui/core/Control";
|
|
29
29
|
import CustomData from "sap/ui/core/CustomData";
|
|
30
|
+
import InvisibleText from "sap/ui/core/InvisibleText";
|
|
30
31
|
import Lib from "sap/ui/core/Lib";
|
|
31
32
|
import type RenderManager from "sap/ui/core/RenderManager";
|
|
32
33
|
import { TitleLevel, ValueState } from "sap/ui/core/library";
|
|
@@ -140,8 +141,13 @@ export default class EasyFilterInput extends Control {
|
|
|
140
141
|
placeholder={this.resourceBundle.getText("M_EASY_FILTER_PLACEHOLDER")}
|
|
141
142
|
></Input>
|
|
142
143
|
);
|
|
144
|
+
|
|
145
|
+
const textBinding = this.resourceBundle.getText("T_EASY_FILTER_INPUT_TEXT_LINK_POPOVER_ARIA");
|
|
146
|
+
const invisibleText = new InvisibleText({ text: textBinding }).toStatic();
|
|
143
147
|
const favoritePopover = this.createFavoritePopover();
|
|
144
148
|
this.$favoritePopover = favoritePopover;
|
|
149
|
+
this.$searchInput.addAriaDescribedBy(favoritePopover);
|
|
150
|
+
this.$searchInput.addAriaDescribedBy(invisibleText);
|
|
145
151
|
this.$searchInput.addDependent(favoritePopover);
|
|
146
152
|
this.$searchInput.addEventDelegate({
|
|
147
153
|
onkeyup: (e: KeyboardEvent) => {
|
|
@@ -162,6 +168,10 @@ export default class EasyFilterInput extends Control {
|
|
|
162
168
|
e.preventDefault();
|
|
163
169
|
this.$searchInput?.setValue(this.$searchInput?.getPlaceholder());
|
|
164
170
|
this.fireEvent("liveChange");
|
|
171
|
+
} else if (e.key === "ArrowDown") {
|
|
172
|
+
const popoverConainer = this.$favoritePopover?.getContent()[0];
|
|
173
|
+
const containerItems = (popoverConainer as FlexBox).getItems();
|
|
174
|
+
containerItems?.find((item) => item.isFocusable() && (item.focus(), true));
|
|
165
175
|
}
|
|
166
176
|
},
|
|
167
177
|
ontap: () => {
|
|
@@ -171,6 +181,31 @@ export default class EasyFilterInput extends Control {
|
|
|
171
181
|
this.openSuggestionPopover();
|
|
172
182
|
}
|
|
173
183
|
});
|
|
184
|
+
this.$favoritePopover.addEventDelegate({
|
|
185
|
+
onkeydown: (e: KeyboardEvent) => {
|
|
186
|
+
const targetText = (e.target as HTMLElement)?.outerText;
|
|
187
|
+
const targetId = (e.target as HTMLElement)?.id;
|
|
188
|
+
switch (e.key) {
|
|
189
|
+
case "Enter":
|
|
190
|
+
this.$searchInput?.setValue(targetText);
|
|
191
|
+
break;
|
|
192
|
+
case "Delete":
|
|
193
|
+
if (targetId?.includes("easyFilterFavoriteItem")) {
|
|
194
|
+
this.state.favoriteQueries = this.state.favoriteQueries.filter(
|
|
195
|
+
(data) => data.toLowerCase() !== targetText.toLowerCase()
|
|
196
|
+
);
|
|
197
|
+
} else {
|
|
198
|
+
this.state.recentQueries = this.state.recentQueries.filter((query) => query !== targetText);
|
|
199
|
+
}
|
|
200
|
+
break;
|
|
201
|
+
case "Escape":
|
|
202
|
+
if (this.$favoritePopover?.isOpen()) {
|
|
203
|
+
this.$favoritePopover.close();
|
|
204
|
+
}
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
});
|
|
174
209
|
}
|
|
175
210
|
|
|
176
211
|
private openSuggestionPopover(): void {
|
|
@@ -282,6 +317,7 @@ export default class EasyFilterInput extends Control {
|
|
|
282
317
|
}}
|
|
283
318
|
</HBox>,
|
|
284
319
|
<Title
|
|
320
|
+
id={this.getId() + "-easyFilterFavoriteTitle"}
|
|
285
321
|
titleStyle={TitleLevel.H6}
|
|
286
322
|
text={this.resourceBundle.getText("M_EASY_FILTER_POPOVER_FAVORITE_TITLE")}
|
|
287
323
|
class={"sapFeControlsTitleBorder"}
|
|
@@ -305,7 +341,9 @@ export default class EasyFilterInput extends Control {
|
|
|
305
341
|
items: (id: string, ctx: Context): StandardListItem => {
|
|
306
342
|
return (
|
|
307
343
|
<CustomListItem
|
|
344
|
+
id={id + "-easyFilterFavoriteItem"}
|
|
308
345
|
class={"sapUiSmallMarginBegin"}
|
|
346
|
+
ariaLabelledBy={[id + "-easyFilterFavoriteTitle"]}
|
|
309
347
|
customData={[<CustomData key={"text"} value={ctx.getObject()} />]}
|
|
310
348
|
press={(): void => {
|
|
311
349
|
this.$searchInput.setValue(ctx.getObject());
|
|
@@ -342,6 +380,7 @@ export default class EasyFilterInput extends Control {
|
|
|
342
380
|
<Button
|
|
343
381
|
icon={"sap-icon://favorite"}
|
|
344
382
|
tooltip={this.resourceBundle.getText("M_EASY_FILTER_FILLED_STAR")}
|
|
383
|
+
ariaLabelledBy={[this.getId() + "-easyFilterFavoriteItem"]}
|
|
345
384
|
type={ButtonType.Transparent}
|
|
346
385
|
press={(): void => {
|
|
347
386
|
//Retaining the focus on popover doesn't make the popover close on every interaction
|
|
@@ -362,6 +401,7 @@ export default class EasyFilterInput extends Control {
|
|
|
362
401
|
}}
|
|
363
402
|
</List>,
|
|
364
403
|
<Title
|
|
404
|
+
id={this.getId() + "-easyFilterLastUsedTitle"}
|
|
365
405
|
titleStyle={TitleLevel.H6}
|
|
366
406
|
text={this.resourceBundle.getText("M_EASY_FILTER_POPOVER_LAST_USED")}
|
|
367
407
|
class={"sapFeControlsTitleBorder"}
|
|
@@ -372,8 +412,9 @@ export default class EasyFilterInput extends Control {
|
|
|
372
412
|
visible={equal(bindState(this.state, "isHistoryEnabled"), true)}
|
|
373
413
|
mode={ListMode.Delete}
|
|
374
414
|
delete={(e: ListBase$DeleteEvent): void => {
|
|
375
|
-
|
|
376
|
-
|
|
415
|
+
const item = e.getParameter("listItem") as CustomListItem;
|
|
416
|
+
item.focus();
|
|
417
|
+
|
|
377
418
|
let queryString = e.getParameter("listItem")?.data("text");
|
|
378
419
|
|
|
379
420
|
if (!queryString) return;
|
|
@@ -397,12 +438,14 @@ export default class EasyFilterInput extends Control {
|
|
|
397
438
|
items: (id: string, ctx: Context): FlexBox => {
|
|
398
439
|
return (
|
|
399
440
|
<CustomListItem
|
|
441
|
+
id={id + "-easyFilterLastUsedItem"}
|
|
400
442
|
press={(): void => {
|
|
401
443
|
this.$searchInput?.setValue(ctx.getObject().text);
|
|
402
444
|
this.onEnterPressed();
|
|
403
445
|
}}
|
|
404
446
|
class={"sapUiSmallMarginBegin"}
|
|
405
447
|
customData={[<CustomData key={"text"} value={ctx.getObject().text} />]}
|
|
448
|
+
ariaLabelledBy={[id + "-easyFilterLastUsedTitle"]}
|
|
406
449
|
>
|
|
407
450
|
<FlexBox
|
|
408
451
|
width={"100%"}
|
|
@@ -452,6 +495,7 @@ export default class EasyFilterInput extends Control {
|
|
|
452
495
|
5
|
|
453
496
|
)}
|
|
454
497
|
type={ButtonType.Transparent}
|
|
498
|
+
ariaLabelledBy={[id + "-easyFilterLastUsedItem"]}
|
|
455
499
|
press={(): void => {
|
|
456
500
|
//Retaining the focus on popover doesn't make the popover close on every interaction
|
|
457
501
|
this.$favoritePopover?.focus();
|