@sapui5/sap.fe.templates 1.141.2 → 1.143.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/templates/.library +1 -1
  3. package/src/sap/fe/templates/AnalyticalListPage/manifest.json +2 -2
  4. package/src/sap/fe/templates/ListReport/ExtensionAPI.js +1 -1
  5. package/src/sap/fe/templates/ListReport/ExtensionAPI.ts +1 -1
  6. package/src/sap/fe/templates/ListReport/LRMessageStrip.js +4 -1
  7. package/src/sap/fe/templates/ListReport/LRMessageStrip.ts +3 -0
  8. package/src/sap/fe/templates/ListReport/ListReport.view.xml +10 -12
  9. package/src/sap/fe/templates/ListReport/ListReportController.controller.js +95 -60
  10. package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +93 -54
  11. package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js +3 -2
  12. package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.ts +2 -1
  13. package/src/sap/fe/templates/ListReport/manifest.json +2 -2
  14. package/src/sap/fe/templates/ListReport/overrides/MessageHandler.js +25 -0
  15. package/src/sap/fe/templates/ListReport/overrides/MessageHandler.ts +20 -0
  16. package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +180 -13
  17. package/src/sap/fe/templates/ObjectPage/ExtensionAPI.ts +209 -13
  18. package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +4 -0
  19. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +157 -28
  20. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +200 -30
  21. package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +3 -2
  22. package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +2 -1
  23. package/src/sap/fe/templates/ObjectPage/manifest.json +2 -2
  24. package/src/sap/fe/templates/ObjectPage/view/fragments/Actions.fragment.xml +7 -4
  25. package/src/sap/fe/templates/ObjectPage/view/fragments/Heading.fragment.xml +2 -2
  26. package/src/sap/fe/templates/library.js +1 -1
  27. package/src/sap/fe/templates/messagebundle.properties +8 -7
  28. package/src/sap/fe/templates/messagebundle_ar.properties +5 -5
  29. package/src/sap/fe/templates/messagebundle_bg.properties +6 -6
  30. package/src/sap/fe/templates/messagebundle_ca.properties +4 -4
  31. package/src/sap/fe/templates/messagebundle_cnr.properties +5 -5
  32. package/src/sap/fe/templates/messagebundle_cs.properties +6 -6
  33. package/src/sap/fe/templates/messagebundle_cy.properties +5 -5
  34. package/src/sap/fe/templates/messagebundle_da.properties +6 -6
  35. package/src/sap/fe/templates/messagebundle_de.properties +7 -7
  36. package/src/sap/fe/templates/messagebundle_el.properties +5 -5
  37. package/src/sap/fe/templates/messagebundle_en.properties +6 -6
  38. package/src/sap/fe/templates/messagebundle_en_GB.properties +6 -6
  39. package/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +6 -6
  40. package/src/sap/fe/templates/messagebundle_es.properties +4 -4
  41. package/src/sap/fe/templates/messagebundle_es_MX.properties +4 -4
  42. package/src/sap/fe/templates/messagebundle_et.properties +4 -4
  43. package/src/sap/fe/templates/messagebundle_fi.properties +4 -4
  44. package/src/sap/fe/templates/messagebundle_fr.properties +4 -4
  45. package/src/sap/fe/templates/messagebundle_fr_CA.properties +5 -5
  46. package/src/sap/fe/templates/messagebundle_hi.properties +6 -6
  47. package/src/sap/fe/templates/messagebundle_hr.properties +4 -4
  48. package/src/sap/fe/templates/messagebundle_hu.properties +6 -6
  49. package/src/sap/fe/templates/messagebundle_id.properties +7 -7
  50. package/src/sap/fe/templates/messagebundle_it.properties +4 -4
  51. package/src/sap/fe/templates/messagebundle_iw.properties +6 -6
  52. package/src/sap/fe/templates/messagebundle_ja.properties +4 -4
  53. package/src/sap/fe/templates/messagebundle_kk.properties +4 -4
  54. package/src/sap/fe/templates/messagebundle_ko.properties +4 -4
  55. package/src/sap/fe/templates/messagebundle_lt.properties +4 -4
  56. package/src/sap/fe/templates/messagebundle_lv.properties +6 -6
  57. package/src/sap/fe/templates/messagebundle_mk.properties +4 -4
  58. package/src/sap/fe/templates/messagebundle_ms.properties +5 -5
  59. package/src/sap/fe/templates/messagebundle_nl.properties +4 -4
  60. package/src/sap/fe/templates/messagebundle_no.properties +4 -4
  61. package/src/sap/fe/templates/messagebundle_pl.properties +4 -4
  62. package/src/sap/fe/templates/messagebundle_pt.properties +5 -5
  63. package/src/sap/fe/templates/messagebundle_pt_PT.properties +6 -6
  64. package/src/sap/fe/templates/messagebundle_ro.properties +4 -4
  65. package/src/sap/fe/templates/messagebundle_ru.properties +4 -4
  66. package/src/sap/fe/templates/messagebundle_sh.properties +5 -5
  67. package/src/sap/fe/templates/messagebundle_sk.properties +4 -4
  68. package/src/sap/fe/templates/messagebundle_sl.properties +11 -11
  69. package/src/sap/fe/templates/messagebundle_sr.properties +5 -5
  70. package/src/sap/fe/templates/messagebundle_sv.properties +4 -4
  71. package/src/sap/fe/templates/messagebundle_th.properties +4 -4
  72. package/src/sap/fe/templates/messagebundle_tr.properties +4 -4
  73. package/src/sap/fe/templates/messagebundle_uk.properties +4 -4
  74. package/src/sap/fe/templates/messagebundle_vi.properties +6 -6
  75. package/src/sap/fe/templates/messagebundle_zh_CN.properties +4 -4
  76. package/src/sap/fe/templates/messagebundle_zh_TW.properties +4 -4
  77. package/src/sap/fe/templates/types/sap.fe.templates-auto-ext.d.js +10 -0
  78. package/src/sap/fe/templates/types/sap.fe.templates-auto-ext.d.ts +49 -0
  79. package/ui5.yaml +5 -0
@@ -9,6 +9,7 @@ import IntentBasedNavigation from "sap/fe/core/controllerextensions/IntentBasedN
9
9
  import InternalIntentBasedNavigation from "sap/fe/core/controllerextensions/InternalIntentBasedNavigation";
10
10
  import InternalRouting from "sap/fe/core/controllerextensions/InternalRouting";
11
11
  import KPIManagement from "sap/fe/core/controllerextensions/KPIManagement";
12
+ import MessageHandler from "sap/fe/core/controllerextensions/MessageHandler";
12
13
  import Placeholder from "sap/fe/core/controllerextensions/Placeholder";
13
14
  import Share from "sap/fe/core/controllerextensions/Share";
14
15
  import SideEffects from "sap/fe/core/controllerextensions/SideEffects";
@@ -21,11 +22,13 @@ import { getResourceModel } from "sap/fe/core/helpers/ResourceModelHelper";
21
22
  import * as StableIdHelper from "sap/fe/core/helpers/StableIdHelper";
22
23
  import { generate } from "sap/fe/core/helpers/StableIdHelper";
23
24
  import CoreLibrary from "sap/fe/core/library";
25
+ import type { TitleInformation } from "sap/fe/core/rootView/RootViewBaseController";
24
26
  import type Breadcrumbs from "sap/fe/macros/Breadcrumbs";
25
27
  import type ChartType from "sap/fe/macros/Chart";
26
28
  import type MacroAPI from "sap/fe/macros/MacroAPI";
27
29
  import type ChartDelegate from "sap/fe/macros/chart/ChartDelegate";
28
30
  import ChartUtils from "sap/fe/macros/chart/ChartUtils";
31
+ import type ContentSwitcher from "sap/fe/macros/contentSwitcher/ContentSwitcher";
29
32
  import type FilterBar from "sap/fe/macros/controls/FilterBar";
30
33
  import FilterUtils from "sap/fe/macros/filter/FilterUtils";
31
34
  import type FilterBarAPI from "sap/fe/macros/filterBar/FilterBarAPI";
@@ -54,8 +57,10 @@ import StateUtil from "sap/ui/mdc/p13n/StateUtil";
54
57
  import type JSONModel from "sap/ui/model/json/JSONModel";
55
58
  import type Context from "sap/ui/model/odata/v4/Context";
56
59
  import hasher from "sap/ui/thirdparty/hasher";
60
+ import type { TitleAdditionalInfo } from "sap/ushell/ui5service/ShellUIService";
57
61
  import * as ListReportTemplating from "./ListReportTemplating";
58
62
  import IntentBasedNavigationOverride from "./overrides/IntentBasedNavigation";
63
+ import MessageHandlerOverride from "./overrides/MessageHandler";
59
64
  import ShareOverrides from "./overrides/Share";
60
65
  import ViewStateOverrides from "./overrides/ViewState";
61
66
 
@@ -105,6 +110,9 @@ class ListReportController extends PageController {
105
110
  @usingExtension(Placeholder)
106
111
  placeholder!: Placeholder;
107
112
 
113
+ @usingExtension(MessageHandler.override(MessageHandlerOverride))
114
+ messageHandler!: MessageHandler;
115
+
108
116
  protected extensionAPI?: ExtensionAPI;
109
117
 
110
118
  private filterBarConditions?: unknown;
@@ -129,7 +137,8 @@ class ListReportController extends PageController {
129
137
 
130
138
  onInit(): void {
131
139
  PageController.prototype.onInit.apply(this);
132
- const oInternalModelContext = this.getView().getBindingContext("internal") as InternalModelContext;
140
+ const oInternalModelContext = this.getOwnerComponent().getBindingContext("internal") as InternalModelContext;
141
+ const uiModelContext = this.getOwnerComponent().getBindingContext("ui") as InternalModelContext;
133
142
  const filterBar = this._getFilterBarControl();
134
143
  if (filterBar) {
135
144
  this._storeFilterBarSelectionVariant(filterBar, oInternalModelContext);
@@ -160,11 +169,7 @@ class ListReportController extends PageController {
160
169
 
161
170
  // Configure the initial load settings
162
171
  this._setInitLoad();
163
- const view = this.getView();
164
- const uiModel = view.getModel("ui");
165
- const path = `/${view.getId()}`;
166
- uiModel.setProperty(path, { isEditable: false });
167
- view.bindElement({ path, model: "ui" });
172
+ uiModelContext.setProperty("", { isEditable: false });
168
173
  }
169
174
 
170
175
  onBeforeRendering(): void {
@@ -185,7 +190,13 @@ class ListReportController extends PageController {
185
190
  delete this.extensionAPI;
186
191
  }
187
192
 
188
- _onAfterBinding(): void {
193
+ async _onAfterBinding(): Promise<void> {
194
+ const internalModelContext = this.getView().getBindingContext("internal") as InternalModelContext;
195
+ if (!internalModelContext.getProperty("initialVariantApplied")) {
196
+ this.pageReady.waitFor(this._applyAppState());
197
+ internalModelContext.setProperty("initialVariantApplied", true);
198
+ }
199
+ await CommonUtils.getAppComponent(this.getView()).isAppComponentBusy();
189
200
  const aTables = this._getControls("table") as Table[];
190
201
  let updateActions = true;
191
202
  if (EditState.isEditStateDirty()) {
@@ -195,13 +206,11 @@ class ListReportController extends PageController {
195
206
  if (oTableBinding) {
196
207
  updateActions = false;
197
208
  const tableAPI = table?.getParent() as TableAPI;
198
-
199
209
  // Update the table content using side effects (listBinding.refresh doesn't keep expansion states in a TreeTable)
200
210
  CommonUtils.getAppComponent(this.getView())
201
211
  .getRoutingService()
202
212
  .waitForBindingCleanup()
203
- .then(async () => {
204
- await CommonUtils.getAppComponent(this.getView()).isAppComponentBusy();
213
+ .then(() => {
205
214
  oTableBinding.attachEventOnce("dataReceived", () => {
206
215
  this._updateTableActions(aTables);
207
216
  });
@@ -223,13 +232,6 @@ class ListReportController extends PageController {
223
232
  if (updateActions) {
224
233
  this._updateTableActions(aTables);
225
234
  }
226
-
227
- const internalModelContext = this.getView().getBindingContext("internal") as InternalModelContext;
228
- if (!internalModelContext.getProperty("initialVariantApplied")) {
229
- const viewId = this.getView().getId();
230
- this.pageReady.waitFor(this._applyAppState(viewId));
231
- internalModelContext.setProperty("initialVariantApplied", true);
232
- }
233
235
  const environmentCapabilities = CommonUtils.getAppComponent(this.getView()).getEnvironmentCapabilities();
234
236
  environmentCapabilities
235
237
  .isInsightsEnabled()
@@ -283,10 +285,10 @@ class ListReportController extends PageController {
283
285
  * This happens either when there is a change on the FilterBar and the search is triggered,
284
286
  * or when a tab with custom content is selected,
285
287
  * or when the view is forced to be refreshed through the Extension API for the list report's public method setTabContentToBeRefreshedOnNextOpening.
286
- * This method can be overwritten by the controller extension in case of customization.
287
- * @param mParameters Map containing the filter conditions of the FilterBar, the currentTabID
288
- * and the view refresh cause (tabChanged, search or forcedRefresh).
289
- * The map looks like this:
288
+ * This method can be overwritten by the controller extension for customization.
289
+ * @param mParameters Map containing the filter conditions of the FilterBar, the currentTabID,
290
+ * and the view refresh cause such as tabChanged, search, or forcedRefresh.
291
+ * See the following example of a map:
290
292
  * <code><pre>
291
293
  * {
292
294
  * filterConditions: {
@@ -315,9 +317,9 @@ class ListReportController extends PageController {
315
317
 
316
318
  /**
317
319
  * Method called when a filter or search value has been changed in the FilterBar,
318
- * but has not been validated yet by the end user (with the 'Go' or 'Search' button).
320
+ * but has not been validated yet by the end user with the 'Go' or 'Search' button.
319
321
  * Typically, the content of the current tab is greyed out until the filters are validated.
320
- * This method can be overwritten by the controller extension in case of customization.
322
+ * This method can be overwritten by the controller extension for customization.
321
323
  * @public
322
324
  */
323
325
  @publicExtension()
@@ -373,11 +375,43 @@ class ListReportController extends PageController {
373
375
  filterField.focus(focusInfo);
374
376
  }
375
377
 
378
+ /**
379
+ * Sets the focus when the header is expanded.
380
+ * The priorities are: (1) first empty mandatory filter field, (2) search field if focusable or first filter field, and (3) Go button.
381
+ * @param filterBar The filter bar control.
382
+ */
383
+ private _focusWhenHeaderExpanded(filterBar: FilterBar): void {
384
+ const firstEmptyMandatoryField = filterBar.getFilterItems().find(function (oFilterItem: FilterField) {
385
+ return oFilterItem.getRequired() && oFilterItem.getConditions().length === 0;
386
+ });
387
+ //Focusing on the first empty mandatory filter field, or on the first filter field if the table data is loaded
388
+ // Do a "silent" focus for FilterField, by adding the silent attribute. The silent attribute suppresses typeahead opening.
389
+ if (firstEmptyMandatoryField) {
390
+ if (firstEmptyMandatoryField.isA<FilterField>("sap.ui.mdc.FilterField")) {
391
+ this._focusSilent(firstEmptyMandatoryField);
392
+ } else {
393
+ (firstEmptyMandatoryField as Control).focus();
394
+ }
395
+ } else if (this._isInitLoadEnabled() && filterBar.getFilterItems().length > 0) {
396
+ // If there is no empty mandatory filter field, set silent focus on search field (if focusable), otherwise on first filter field
397
+ const basicSearchField = filterBar.getBasicSearchField();
398
+ const fieldToFocus = basicSearchField?.isFocusable() ? basicSearchField : filterBar.getFilterItems()[0];
399
+ if (fieldToFocus.isA<FilterField>("sap.ui.mdc.FilterField")) {
400
+ this._focusSilent(fieldToFocus);
401
+ } else {
402
+ (fieldToFocus as Control).focus();
403
+ }
404
+ } else {
405
+ //Focusing on the Go button
406
+ this.getView().byId(`${this._getFilterBarControlId()}-btnSearch`)?.focus();
407
+ }
408
+ }
409
+
376
410
  /**
377
411
  * This method sets the initial focus in a list report based on the User Experience guidelines.
378
412
  *
379
413
  */
380
- _setInitialFocus(): void {
414
+ async _setInitialFocus(): Promise<void> {
381
415
  const dynamicPage = this._getDynamicListReportControl(),
382
416
  isHeaderExpanded = dynamicPage.getHeaderExpanded(),
383
417
  filterBar = this._getFilterBarControl() as FilterBar;
@@ -387,45 +421,39 @@ class ListReportController extends PageController {
387
421
  filterBar.setShowMessages(true);
388
422
  }
389
423
  if (isHeaderExpanded) {
390
- const firstEmptyMandatoryField = filterBar.getFilterItems().find(function (oFilterItem: FilterField) {
391
- return oFilterItem.getRequired() && oFilterItem.getConditions().length === 0;
392
- });
393
- //Focusing on the first empty mandatory filter field, or on the first filter field if the table data is loaded
394
- // Do a "silent" focus for FilterField, by adding the silent attribute. The silent attribute suppresses typeahead opening.
395
- if (firstEmptyMandatoryField) {
396
- if (firstEmptyMandatoryField.isA<FilterField>("sap.ui.mdc.FilterField")) {
397
- this._focusSilent(firstEmptyMandatoryField);
398
- } else {
399
- (firstEmptyMandatoryField as Control).focus();
400
- }
401
- } else if (this._isInitLoadEnabled() && filterBar.getFilterItems().length > 0) {
402
- // Add check for available filterItems
403
- const fieldToFocus = filterBar.getFilterItems()[0];
404
- if (fieldToFocus.isA<FilterField>("sap.ui.mdc.FilterField")) {
405
- this._focusSilent(fieldToFocus);
406
- } else {
407
- (fieldToFocus as Control).focus();
408
- }
409
- } else {
410
- //Focusing on the Go button
411
- this.getView().byId(`${this._getFilterBarControlId()}-btnSearch`)?.focus();
412
- }
424
+ this._focusWhenHeaderExpanded(filterBar);
413
425
  } else if (this._isInitLoadEnabled()) {
414
- this._getTable()
426
+ await this._getTable()
415
427
  ?.focusRow(0)
416
428
  .catch(function (error: unknown) {
417
- Log.error("Error while setting initial focus on the table ", error as string);
429
+ if (error) {
430
+ // if there is no error it can just be that there are no lines to focus
431
+ Log.info("Error while setting initial focus on the table ", error as string);
432
+ }
418
433
  });
419
434
  }
420
435
  } else {
421
- this._getTable()
436
+ await this._getTable()
422
437
  ?.focusRow(0)
423
438
  .catch(function (error: unknown) {
424
- Log.error("Error while setting initial focus on the table ", error as string);
439
+ if (error) {
440
+ // if there is no error it can just be that there are no lines to focus
441
+ Log.info("Error while setting initial focus on the table ", error as string);
442
+ }
425
443
  });
426
444
  }
427
445
  }
428
446
 
447
+ /**
448
+ * Override to get the browser title of the LR page.
449
+ * @param _pageTitleInformation Present page title information
450
+ * @returns Title information to be used by shell services for browser title
451
+ */
452
+ async _getBrowserTitle(_pageTitleInformation: TitleInformation): Promise<TitleAdditionalInfo | undefined> {
453
+ // We shall fallback to defaul app title in case of list report.
454
+ return Promise.resolve(undefined);
455
+ }
456
+
429
457
  async _getPageTitleInformation(): Promise<{ title?: string; subtitle: string; intent: string; icon: string }> {
430
458
  const oManifestEntry = this.getAppComponent().getManifestEntry("sap.app");
431
459
  return Promise.resolve({
@@ -444,15 +472,15 @@ class ListReportController extends PageController {
444
472
  return this.getView().byId(this._getDynamicListReportControlId()) as DynamicPage;
445
473
  }
446
474
 
447
- _getAdaptationFilterBarControl(): Control {
475
+ _getAdaptationFilterBarControl(): Control | undefined {
448
476
  // If the adaptation filter bar is part of the DOM tree, the "Adapt Filter" dialog is open,
449
477
  // and we return the adaptation filter bar as an active control (visible for the user)
450
478
  const adaptationFilterBar = (this._getFilterBarControl() as { getInbuiltFilter?: Function }).getInbuiltFilter?.();
451
479
  return adaptationFilterBar?.getParent() ? adaptationFilterBar : undefined;
452
480
  }
453
481
 
454
- async _applyAppState(viewId: string): Promise<void> {
455
- await this.getAppComponent().getAppStateHandler().applyAppState(viewId, this.getView());
482
+ async _applyAppState(): Promise<void> {
483
+ await this.getAppComponent().getAppStateHandler().applyAppState(this.getView());
456
484
  const oFilterBar = this._getFilterBarControl();
457
485
  if (oFilterBar) {
458
486
  oFilterBar.enableRequests(true);
@@ -755,6 +783,17 @@ class ListReportController extends PageController {
755
783
  }
756
784
 
757
785
  handlers = {
786
+ onFilterLayoutSwitch(this: ListReportController, oEvent: UI5Event<{}, ContentSwitcher>): void {
787
+ const currentKey = oEvent.getSource().selectedKey;
788
+ const variantManagement = this._getControlFromPageModelProperty("/variantManagement/pageId");
789
+ if (variantManagement) {
790
+ if (currentKey === "ai") {
791
+ variantManagement.setVisible(false);
792
+ } else {
793
+ variantManagement.setVisible(true);
794
+ }
795
+ }
796
+ },
758
797
  onInlineEditSave(this: ListReportController): void {
759
798
  this.inlineEditFlow.inlineEditSave();
760
799
  },
@@ -356,13 +356,14 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
356
356
  * Get the count of the Tab containing the macro passed as parameter.
357
357
  * @param macroAPI The content of the tab we want to refresh
358
358
  */;
359
- _proto.refreshTabCount = function refreshTabCount(macroAPI) {
359
+ _proto.refreshTabCount = async function refreshTabCount(macroAPI) {
360
360
  const iconTabFilter = this._getTabFromInnerControl(macroAPI);
361
361
  if (!iconTabFilter) {
362
362
  return;
363
363
  }
364
364
  if (macroAPI?.getCounts) {
365
365
  iconTabFilter.setCount("...");
366
+ await this._getViewController().editFlow.syncTask(); // ensure all pending changes are done before refreshing counts
366
367
  macroAPI.getCounts().then(count => {
367
368
  return iconTabFilter.setCount(count || "0");
368
369
  }).catch(function (error) {
@@ -512,4 +513,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
512
513
  }), _class2)) || _class);
513
514
  return MultipleModeControl;
514
515
  }, false);
515
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCaW5kaW5nQWN0aW9uIiwiTXVsdGlwbGVNb2RlQ29udHJvbCIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwicHJvcGVydHkiLCJ0eXBlIiwiX2RlYzMiLCJkZWZhdWx0VmFsdWUiLCJfZGVjNCIsIl9kZWM1IiwiX2RlYzYiLCJhZ2dyZWdhdGlvbiIsIm11bHRpcGxlIiwiaXNEZWZhdWx0IiwiX2RlYzciLCJhc3NvY2lhdGlvbiIsIl9kZWM4IiwiX2RlYzkiLCJldmVudCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQ29udHJvbCIsImlkIiwic2V0dGluZ3MiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJvbkJlZm9yZVJlbmRlcmluZyIsImdldFRhYnNNb2RlbCIsIm9GaWx0ZXJDb250cm9sIiwiX2dldEZpbHRlckNvbnRyb2wiLCJzZXRDb3VudHNPdXREYXRlZCIsIm9GaWx0ZXJCYXJBUEkiLCJnZXRQYXJlbnQiLCJnZXRBbGxJbm5lckNvbnRyb2xzIiwiZm9yRWFjaCIsIm9NYWNyb0FQSSIsInNob3dDb3VudHMiLCJhdHRhY2hFdmVudCIsImludGVybmFsUmVmcmVzaFRhYnNDb3VudCIsImJpbmQiLCJzdXNwZW5kQmluZGluZyIsIl9vblNlYXJjaCIsIl9vbkZpbHRlckNoYW5nZWQiLCJvbkFmdGVyUmVuZGVyaW5nIiwiZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2wiLCJyZXN1bWVCaW5kaW5nIiwiZ2V0UHJvcGVydHkiLCJzZXRWaXNpYmxlT3ZlcnJpZGRlbiIsInNldFByb3BlcnR5IiwibWFjcm9BUEkiLCJpY29uVGFiRmlsdGVyIiwiX2dldFRhYkZyb21Jbm5lckNvbnRyb2wiLCJvcmlnaW5TZXRWaXNpYmxlIiwic2V0VmlzaWJsZSIsInZhbHVlIiwiZ2V0VmlzaWJsZSIsInJlZnJlc2hUYWJDb3VudCIsInJlbmRlciIsIm9SbSIsIm9Db250cm9sIiwicmVuZGVyQ29udHJvbCIsImNvbnRlbnQiLCJzVGFic01vZGVsIiwib0NvbnRlbnQiLCJ1bmRlZmluZWQiLCJvTW9kZWwiLCJnZXRNb2RlbCIsIkpTT05Nb2RlbCIsInNldE1vZGVsIiwib1NlbGVjdGVkVGFiIiwiZ2V0SXRlbXMiLCJmaW5kIiwib0l0ZW0iLCJnZXRLZXkiLCJnZXRTZWxlY3RlZEtleSIsImhhbmRsZVRhYkNoYW5nZSIsIm9FdmVudCIsIm9JY29uVGFiQmFyIiwiZ2V0U291cmNlIiwib011bHRpQ29udHJvbCIsIm1QYXJhbWV0ZXJzIiwiZ2V0UGFyYW1ldGVycyIsIl9zZXRJbm5lckJpbmRpbmciLCJzUHJldmlvdXNTZWxlY3RlZEtleSIsInByZXZpb3VzS2V5Iiwic1NlbGVjdGVkS2V5Iiwic2VsZWN0ZWRLZXkiLCJwZXJzb25hbGl6YXRpb25Qcm9taXNlIiwib0ZpbHRlckJhciIsIl9yZWZyZXNoQ3VzdG9tVmlldyIsImdldEZpbHRlckNvbmRpdGlvbnMiLCJoYW5kbGVQZXJzb25hbGl6YXRpb25VcGRhdGUiLCJfZ2V0Vmlld0NvbnRyb2xsZXIiLCJnZXRFeHRlbnNpb25BUEkiLCJ1cGRhdGVBcHBTdGF0ZSIsImZpcmVFdmVudCIsImljb25UYWJCYXIiLCJDb250cm9sUGVyc29uYWxpemF0aW9uV3JpdGVBUEkiLCJfX3VpNV9yZXF1aXJlX2FzeW5jIiwiZGVmYXVsdCIsImFkZCIsImNoYW5nZXMiLCJjaGFuZ2VTcGVjaWZpY0RhdGEiLCJjaGFuZ2VUeXBlIiwicHJldmlvdXNTZWxlY3RlZEtleSIsInNlbGVjdG9yRWxlbWVudCIsImVycm9yIiwiTG9nIiwicmVmcmVzaFNlbGVjdGVkSW5uZXJDb250cm9sQ29udGVudCIsImludmFsaWRhdGVDb250ZW50Iiwia2V5cyIsImtleSIsImJWYWx1ZSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInNldEZyZWV6ZUNvbnRlbnQiLCJfdXBkYXRlTXVsdGlUYWJOb3RBcHBsaWNhYmxlRmllbGRzIiwidGFic01vZGVsIiwicmVzdWx0cyIsInZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJ2aWV3RGF0YSIsImdldFZpZXdEYXRhIiwidXNlSGlkZGVuRmlsdGVyQmFyIiwib1RhYiIsInNUYWJJZCIsIm1JZ25vcmVkRmllbGRzIiwicmVmcmVzaE5vdEFwcGxpY2FibGVGaWVsZHMiLCJub3RBcHBsaWNhYmxlIiwiZmllbGRzIiwidGl0bGUiLCJfc2V0VGFiTWVzc2FnZVN0cmlwIiwiZW50aXR5VHlwZVBhdGgiLCJkYXRhIiwiaWdub3JlZEZpZWxkcyIsImdldFRleHQiLCJpc0EiLCJjaGVja05vbkZpbHRlcmFibGVFbnRpdHlTZXQiLCJzZXREYXRhIiwicmVzb3VyY2VNb2RlbCIsImdldFJlc291cmNlTW9kZWwiLCJvQ2hhcnQiLCJnZXRDb250ZW50IiwiYkVudGl0eVNldEZpbGVyYWJsZSIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldE1ldGFNb2RlbCIsImdldENvbnRleHQiLCJ0YXJnZXRPYmplY3QiLCJhbm5vdGF0aW9ucyIsIkNhcGFiaWxpdGllcyIsIkZpbHRlclJlc3RyaWN0aW9ucyIsIkZpbHRlcmFibGUiLCJpbmNsdWRlcyIsImJPbmx5Rm9yVmlzaWJsZVRhYiIsImlubmVyQ29udHJvbHMiLCJyZWR1Y2UiLCJhSW5uZXJDb250cm9scyIsInNJbm5lckNvbnRyb2wiLCJVSTVFbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJwdXNoIiwiZmlsdGVyIiwib0lubmVyQ29udHJvbCIsImZpbHRlckNvbnRyb2wiLCJvVmlldyIsImdldENvbnRyb2xsZXIiLCJvRmlsdGVyQ29uZGl0aW9ucyIsInNSZWZyZXNoQ2F1c2UiLCJvblZpZXdOZWVkc1JlZnJlc2giLCJmaWx0ZXJDb25kaXRpb25zIiwiY3VycmVudFRhYklkIiwicmVmcmVzaENhdXNlIiwiZ2V0Q291bnRzIiwic2V0Q291bnQiLCJ0aGVuIiwiY291bnQiLCJjYXRjaCIsInRhYmxlRXZlbnQiLCJldmVudE1hY3JvQVBJIiwidGFyZ2V0S2V5IiwidGFiS2V5cyIsIm1hcCIsInRhYiIsInNwbGl0IiwicmVmcmVzaFRhYnNDb3VudCIsIm9JY29uVGFiRmlsdGVyIiwiY291bnRzT3V0RGF0ZWQiLCJzZXRUYWJDb250ZW50VG9CZVJlZnJlc2hlZE9uTmV4dE9wZW5pbmciLCJzZWxlY3RlZFRhYktleSIsInJlZnJlc2hTZWxlY3RlZFRhYkNvbnRlbnQiLCJiUmVxdWVzdElmTm90SW5pdGlhbGl6ZWQiLCJiSXNTZWxlY3RlZEtleSIsInNBY3Rpb24iLCJSZXN1bWUiLCJTdXNwZW5kIiwicHJvcGVydGllcyIsInNUZXh0IiwiYUlnbm9yZWRGaWVsZHMiLCJBcnJheSIsImlzQXJyYXkiLCJhSWdub3JlZExhYmVscyIsIk1lc3NhZ2VTdHJpcCIsImdldExhYmVscyIsImdldFBhcmFtZXRlciIsIkNvbnRyb2wiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk11bHRpcGxlTW9kZUNvbnRyb2wudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBhZ2dyZWdhdGlvbiwgYXNzb2NpYXRpb24sIGRlZmluZVVJNUNsYXNzLCBldmVudCwgcHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCBNZXNzYWdlU3RyaXAgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWVzc2FnZVN0cmlwXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgTWFjcm9BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvTWFjcm9BUElcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9GaWx0ZXJCYXJcIjtcbmltcG9ydCB0eXBlIExpc3RSZXBvcnRDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvTGlzdFJlcG9ydENvbnRyb2xsZXIuY29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgSWNvblRhYkJhciBmcm9tIFwic2FwL20vSWNvblRhYkJhclwiO1xuaW1wb3J0IHR5cGUgeyBJY29uVGFiQmFyJFNlbGVjdEV2ZW50IH0gZnJvbSBcInNhcC9tL0ljb25UYWJCYXJcIjtcbmltcG9ydCB0eXBlIEljb25UYWJGaWx0ZXIgZnJvbSBcInNhcC9tL0ljb25UYWJGaWx0ZXJcIjtcbmltcG9ydCB0eXBlIENvcmVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIFJlbmRlck1hbmFnZXIgZnJvbSBcInNhcC91aS9jb3JlL1JlbmRlck1hbmFnZXJcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcblxuZXhwb3J0IHR5cGUgSW5uZXJDb250cm9sVHlwZSA9IE1hY3JvQVBJICZcblx0UGFydGlhbDx7XG5cdFx0cmVzdW1lQmluZGluZzogRnVuY3Rpb247XG5cdFx0c3VzcGVuZEJpbmRpbmc6IEZ1bmN0aW9uO1xuXHRcdGdldENvdW50czogRnVuY3Rpb247XG5cdFx0cmVmcmVzaE5vdEFwcGxpY2FibGVGaWVsZHM6IEZ1bmN0aW9uO1xuXHRcdGludmFsaWRhdGVDb250ZW50OiBGdW5jdGlvbjtcblx0XHRnZXRDb250ZW50OiBGdW5jdGlvbjtcblx0fT47XG5cbnR5cGUgTWVzc2FnZVN0cmlwUHJvcGVydGllcyA9IHtcblx0ZW50aXR5VHlwZVBhdGg6IHN0cmluZztcblx0aWdub3JlZEZpZWxkczogc3RyaW5nW107XG5cdHRpdGxlOiBzdHJpbmc7XG59O1xuXG5lbnVtIEJpbmRpbmdBY3Rpb24ge1xuXHRTdXNwZW5kID0gXCJzdXNwZW5kQmluZGluZ1wiLFxuXHRSZXN1bWUgPSBcInJlc3VtZUJpbmRpbmdcIlxufVxuXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUudGVtcGxhdGVzLkxpc3RSZXBvcnQuY29udHJvbHMuTXVsdGlwbGVNb2RlQ29udHJvbFwiKVxuY2xhc3MgTXVsdGlwbGVNb2RlQ29udHJvbCBleHRlbmRzIENvbnRyb2wge1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHRzaG93Q291bnRzITogYm9vbGVhbjtcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuXHRzZXRWaXNpYmxlT3ZlcnJpZGRlbiE6IGJvb2xlYW47XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0ZnJlZXplQ29udGVudCE6IGJvb2xlYW47XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0Y291bnRzT3V0RGF0ZWQhOiBib29sZWFuO1xuXG5cdEBhZ2dyZWdhdGlvbih7IHR5cGU6IFwic2FwLm0uSWNvblRhYkJhclwiLCBtdWx0aXBsZTogZmFsc2UsIGlzRGVmYXVsdDogdHJ1ZSB9KVxuXHRjb250ZW50ITogSWNvblRhYkJhcjtcblxuXHRAYXNzb2NpYXRpb24oeyB0eXBlOiBcInNhcC51aS5jb3JlLkNvbnRyb2xcIiwgbXVsdGlwbGU6IHRydWUgfSlcblx0aW5uZXJDb250cm9scyE6IHN0cmluZ1tdO1xuXG5cdEBhc3NvY2lhdGlvbih7IHR5cGU6IFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5GaWx0ZXJCYXJcIiwgbXVsdGlwbGU6IGZhbHNlIH0pXG5cdGZpbHRlckNvbnRyb2whOiBzdHJpbmc7XG5cblx0QGV2ZW50KClcblx0c2VsZWN0ITogRnVuY3Rpb247XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0aWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQgfCAoUHJvcGVydGllc09mPE11bHRpcGxlTW9kZUNvbnRyb2w+ICYgJENvbnRyb2xTZXR0aW5ncyksXG5cdFx0c2V0dGluZ3M/OiAkQ29udHJvbFNldHRpbmdzICYgUHJvcGVydGllc09mPE11bHRpcGxlTW9kZUNvbnRyb2w+XG5cdCkge1xuXHRcdHN1cGVyKGlkIGFzIHN0cmluZywgc2V0dGluZ3MpO1xuXHR9XG5cblx0b25CZWZvcmVSZW5kZXJpbmcoKTogdm9pZCB7XG5cdFx0dGhpcy5nZXRUYWJzTW9kZWwoKTsgLy8gR2VuZXJhdGUgdGhlIG1vZGVsIHdoaWNoIGlzIG1hbmRhdG9yeSBmb3Igc29tZSBiaW5kaW5nc1xuXG5cdFx0Y29uc3Qgb0ZpbHRlckNvbnRyb2wgPSB0aGlzLl9nZXRGaWx0ZXJDb250cm9sKCk7XG5cdFx0aWYgKCFvRmlsdGVyQ29udHJvbCkge1xuXHRcdFx0Ly8gSW4gY2FzZSB0aGVyZSdzIG5vIGZpbHRlcmJhciwgd2UgaGF2ZSB0byB1cGRhdGUgdGhlIGNvdW50cyBpbiB0aGUgdGFicyBpbW1lZGlhdGVseVxuXHRcdFx0dGhpcy5zZXRDb3VudHNPdXREYXRlZCh0cnVlKTtcblx0XHR9XG5cdFx0Y29uc3Qgb0ZpbHRlckJhckFQSSA9IG9GaWx0ZXJDb250cm9sPy5nZXRQYXJlbnQoKTtcblx0XHR0aGlzLmdldEFsbElubmVyQ29udHJvbHMoKS5mb3JFYWNoKChvTWFjcm9BUEkpID0+IHtcblx0XHRcdGlmICh0aGlzLnNob3dDb3VudHMpIHtcblx0XHRcdFx0b01hY3JvQVBJLmF0dGFjaEV2ZW50KFwiaW50ZXJuYWxEYXRhUmVxdWVzdGVkXCIsIHRoaXMuaW50ZXJuYWxSZWZyZXNoVGFic0NvdW50LmJpbmQodGhpcykpO1xuXHRcdFx0fVxuXHRcdFx0b01hY3JvQVBJLnN1c3BlbmRCaW5kaW5nPy4oKTtcblx0XHR9KTtcblx0XHRpZiAob0ZpbHRlckJhckFQSSkge1xuXHRcdFx0b0ZpbHRlckJhckFQSS5hdHRhY2hFdmVudChcImludGVybmFsU2VhcmNoXCIsIHRoaXMuX29uU2VhcmNoLmJpbmQodGhpcykpO1xuXHRcdFx0b0ZpbHRlckJhckFQSS5hdHRhY2hFdmVudChcImludGVybmFsRmlsdGVyQ2hhbmdlZFwiLCB0aGlzLl9vbkZpbHRlckNoYW5nZWQuYmluZCh0aGlzKSk7XG5cdFx0fVxuXHR9XG5cblx0b25BZnRlclJlbmRlcmluZygpOiB2b2lkIHtcblx0XHR0aGlzLmdldFNlbGVjdGVkSW5uZXJDb250cm9sKCk/LnJlc3VtZUJpbmRpbmc/LighdGhpcy5nZXRQcm9wZXJ0eShcImZyZWV6ZUNvbnRlbnRcIikpO1xuXHRcdGlmICh0aGlzLnNob3dDb3VudHMgJiYgIXRoaXMuc2V0VmlzaWJsZU92ZXJyaWRkZW4pIHtcblx0XHRcdHRoaXMuc2V0UHJvcGVydHkoXCJzZXRWaXNpYmxlT3ZlcnJpZGRlblwiLCB0cnVlKTtcblx0XHRcdHRoaXMuZ2V0QWxsSW5uZXJDb250cm9scygpLmZvckVhY2goKG1hY3JvQVBJOiBNYWNyb0FQSSk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBpY29uVGFiRmlsdGVyID0gdGhpcy5fZ2V0VGFiRnJvbUlubmVyQ29udHJvbChtYWNyb0FQSSk7XG5cdFx0XHRcdC8vIE5vIGNvdW50IHRvIHNob3dcblx0XHRcdFx0aWYgKCFpY29uVGFiRmlsdGVyKSByZXR1cm47XG5cblx0XHRcdFx0Y29uc3Qgb3JpZ2luU2V0VmlzaWJsZSA9IGljb25UYWJGaWx0ZXIuc2V0VmlzaWJsZTtcblx0XHRcdFx0aWNvblRhYkZpbHRlci5zZXRWaXNpYmxlID0gKHZhbHVlOiBib29sZWFuKTogSWNvblRhYkZpbHRlciA9PiB7XG5cdFx0XHRcdFx0aWYgKGljb25UYWJGaWx0ZXIuZ2V0VmlzaWJsZSgpID09PSBmYWxzZSAmJiB2YWx1ZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5yZWZyZXNoVGFiQ291bnQobWFjcm9BUEkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gb3JpZ2luU2V0VmlzaWJsZS5iaW5kKGljb25UYWJGaWx0ZXIpKHZhbHVlKTtcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHN0YXRpYyByZW5kZXIob1JtOiBSZW5kZXJNYW5hZ2VyLCBvQ29udHJvbDogTXVsdGlwbGVNb2RlQ29udHJvbCk6IHZvaWQge1xuXHRcdG9SbS5yZW5kZXJDb250cm9sKG9Db250cm9sLmNvbnRlbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG1vZGVsIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgSWNvblRhYkZpbHRlcnMuXG5cdCAqIEByZXR1cm5zIFRoZSBtb2RlbFxuXHQgKi9cblx0Z2V0VGFic01vZGVsKCk6IEpTT05Nb2RlbCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgc1RhYnNNb2RlbCA9IFwidGFic0ludGVybmFsXCI7XG5cdFx0Y29uc3Qgb0NvbnRlbnQgPSB0aGlzLmNvbnRlbnQ7XG5cdFx0aWYgKCFvQ29udGVudCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0bGV0IG9Nb2RlbCA9IG9Db250ZW50LmdldE1vZGVsKHNUYWJzTW9kZWwpIGFzIEpTT05Nb2RlbCB8IHVuZGVmaW5lZDtcblx0XHRpZiAoIW9Nb2RlbCkge1xuXHRcdFx0b01vZGVsID0gbmV3IEpTT05Nb2RlbCh7fSk7XG5cdFx0XHRvQ29udGVudC5zZXRNb2RlbChvTW9kZWwsIHNUYWJzTW9kZWwpO1xuXHRcdH1cblx0XHRyZXR1cm4gb01vZGVsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGlubmVyIGNvbnRyb2wgb2YgdGhlIGRpc3BsYXllZCB0YWIuXG5cdCAqIEByZXR1cm5zIFRoZSBjb250cm9sXG5cdCAqL1xuXHRnZXRTZWxlY3RlZElubmVyQ29udHJvbCgpOiBJbm5lckNvbnRyb2xUeXBlIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBvU2VsZWN0ZWRUYWIgPSB0aGlzLmNvbnRlbnQ/LmdldEl0ZW1zKCkuZmluZCgob0l0ZW0pID0+IChvSXRlbSBhcyBJY29uVGFiRmlsdGVyKS5nZXRLZXkoKSA9PT0gdGhpcy5jb250ZW50LmdldFNlbGVjdGVkS2V5KCkpO1xuXHRcdHJldHVybiBvU2VsZWN0ZWRUYWJcblx0XHRcdD8gdGhpcy5nZXRBbGxJbm5lckNvbnRyb2xzKCkuZmluZCgob01hY3JvQVBJKSA9PiB0aGlzLl9nZXRUYWJGcm9tSW5uZXJDb250cm9sKG9NYWNyb0FQSSkgPT09IG9TZWxlY3RlZFRhYilcblx0XHRcdDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgdGhlIGJpbmRpbmcgb2YgYWxsIGlubmVyIGNvbnRyb2xzIHdoZW4gdGhlIHNlbGVjdGVkIEljb25UYWJGaWx0ZXIgaXMgY2hhbmdlZC5cblx0ICogQHBhcmFtIG9FdmVudCBFdmVudCBmaXJlZCBieSB0aGUgSWNvblRhYkJhclxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgaWYgdGhlIHBlcnNvbmFsaXphdGlvbiBpcyB1cGRhdGVkLCBvdGhlcndpc2Ugbm90aGluZ1xuXHQgKi9cblx0c3RhdGljIGhhbmRsZVRhYkNoYW5nZShvRXZlbnQ6IEljb25UYWJCYXIkU2VsZWN0RXZlbnQpOiBQcm9taXNlPHZvaWQ+IHwgdm9pZCB7XG5cdFx0Y29uc3Qgb0ljb25UYWJCYXIgPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0Y29uc3Qgb011bHRpQ29udHJvbCA9IG9JY29uVGFiQmFyLmdldFBhcmVudCgpIGFzIE11bHRpcGxlTW9kZUNvbnRyb2w7XG5cblx0XHRjb25zdCBtUGFyYW1ldGVycyA9IG9FdmVudC5nZXRQYXJhbWV0ZXJzKCk7XG5cdFx0b011bHRpQ29udHJvbC5fc2V0SW5uZXJCaW5kaW5nKHRydWUpO1xuXHRcdGNvbnN0IHNQcmV2aW91c1NlbGVjdGVkS2V5ID0gbVBhcmFtZXRlcnM/LnByZXZpb3VzS2V5O1xuXHRcdGNvbnN0IHNTZWxlY3RlZEtleSA9IG1QYXJhbWV0ZXJzPy5zZWxlY3RlZEtleTtcblx0XHRsZXQgcGVyc29uYWxpemF0aW9uUHJvbWlzZTtcblx0XHRpZiAoc1NlbGVjdGVkS2V5ICYmIHNQcmV2aW91c1NlbGVjdGVkS2V5ICE9PSBzU2VsZWN0ZWRLZXkpIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSBvTXVsdGlDb250cm9sLl9nZXRGaWx0ZXJDb250cm9sKCk7XG5cdFx0XHRpZiAob0ZpbHRlckJhciAmJiAhb011bHRpQ29udHJvbC5nZXRQcm9wZXJ0eShcImZyZWV6ZUNvbnRlbnRcIikpIHtcblx0XHRcdFx0aWYgKCFvTXVsdGlDb250cm9sLmdldFNlbGVjdGVkSW5uZXJDb250cm9sKCkpIHtcblx0XHRcdFx0XHQvL2N1c3RvbSB0YWJcblx0XHRcdFx0XHRvTXVsdGlDb250cm9sLl9yZWZyZXNoQ3VzdG9tVmlldyhvRmlsdGVyQmFyLmdldEZpbHRlckNvbmRpdGlvbnMoKSwgXCJ0YWJDaGFuZ2VkXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRwZXJzb25hbGl6YXRpb25Qcm9taXNlID0gTXVsdGlwbGVNb2RlQ29udHJvbC5oYW5kbGVQZXJzb25hbGl6YXRpb25VcGRhdGUoc1NlbGVjdGVkS2V5LCBzUHJldmlvdXNTZWxlY3RlZEtleSwgb0ljb25UYWJCYXIpO1xuXHRcdH1cblxuXHRcdG9NdWx0aUNvbnRyb2wuX2dldFZpZXdDb250cm9sbGVyKCk/LmdldEV4dGVuc2lvbkFQSSgpPy51cGRhdGVBcHBTdGF0ZSgpO1xuXG5cdFx0b011bHRpQ29udHJvbC5maXJlRXZlbnQoXCJzZWxlY3RcIiwge1xuXHRcdFx0aWNvblRhYkJhcjogb0ljb25UYWJCYXIsXG5cdFx0XHRzZWxlY3RlZEtleTogc1NlbGVjdGVkS2V5LFxuXHRcdFx0cHJldmlvdXNLZXk6IHNQcmV2aW91c1NlbGVjdGVkS2V5XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHBlcnNvbmFsaXphdGlvblByb21pc2U7XG5cdH1cblxuXHRwcml2YXRlIHN0YXRpYyBhc3luYyBoYW5kbGVQZXJzb25hbGl6YXRpb25VcGRhdGUoXG5cdFx0c1NlbGVjdGVkS2V5OiBzdHJpbmcsXG5cdFx0c1ByZXZpb3VzU2VsZWN0ZWRLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRvSWNvblRhYkJhcjogSWNvblRhYkJhclxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgQ29udHJvbFBlcnNvbmFsaXphdGlvbldyaXRlQVBJID0gKGF3YWl0IGltcG9ydChcInNhcC91aS9mbC93cml0ZS9hcGkvQ29udHJvbFBlcnNvbmFsaXphdGlvbldyaXRlQVBJXCIpKS5kZWZhdWx0O1xuXHRcdFx0Q29udHJvbFBlcnNvbmFsaXphdGlvbldyaXRlQVBJLmFkZCh7XG5cdFx0XHRcdGNoYW5nZXM6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRjaGFuZ2VTcGVjaWZpY0RhdGE6IHtcblx0XHRcdFx0XHRcdFx0Y2hhbmdlVHlwZTogXCJzZWxlY3RJY29uVGFiQmFyRmlsdGVyXCIsXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHtcblx0XHRcdFx0XHRcdFx0XHRzZWxlY3RlZEtleTogc1NlbGVjdGVkS2V5LFxuXHRcdFx0XHRcdFx0XHRcdHByZXZpb3VzU2VsZWN0ZWRLZXk6IHNQcmV2aW91c1NlbGVjdGVkS2V5XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRzZWxlY3RvckVsZW1lbnQ6IG9JY29uVGFiQmFyXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRdXG5cdFx0XHR9KTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKFwiU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2hpbGUgdXBkYXRpbmcgdGhlIHBlcnNvbmFsaXphdGlvbiBzdGF0ZSBvZiB0aGUgTXVsdGlwbGVNb2RlQ29udHJvbFwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZWZyZXNoZXMgdGhlIGNvbnRlbnQgb2YgdGhlIHNlbGVjdGVkIGlubmVyIGNvbnRyb2wuXG5cdCAqXG5cdCAqL1xuXHRyZWZyZXNoU2VsZWN0ZWRJbm5lckNvbnRyb2xDb250ZW50KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmdldFNlbGVjdGVkSW5uZXJDb250cm9sKCkpIHtcblx0XHRcdHRoaXMuZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2woKT8uaW52YWxpZGF0ZUNvbnRlbnQ/LigpO1xuXHRcdFx0dGhpcy5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpPy5yZXN1bWVCaW5kaW5nPy4odHJ1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGN1c3RvbSB0YWJcblx0XHRcdHRoaXMuX3JlZnJlc2hDdXN0b21WaWV3KHVuZGVmaW5lZCwgXCJmb3JjZWRSZWZyZXNoXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBJbnZhbGlkYXRlcyB0aGUgY29udGVudCBvZiB0aGUgaW5uZXIgY29udHJvbHMuXG5cdCAqIEBwYXJhbSBba2V5c10gVGhlIGxpc3Qgb2YgdGhlIGtleXMgaWRlbnRpZnlpbmcgdGhlIHZpZXdzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IGZvciB3aGljaCB0aGUgdmlld3MnIGNvbnRlbnQgd2lsbCBiZSBpbnZhbGlkYXRlZC4gSWYgbm90IHByb3ZpZGVkLCBhbGwgdGhlIHZpZXdzJyBjb250ZW50IHdpbGwgYmUgaW52YWxpZGF0ZWRcblx0ICovXG5cdGludmFsaWRhdGVDb250ZW50KGtleXM/OiBzdHJpbmdbXSk6IHZvaWQge1xuXHRcdHRoaXMuc2V0Q291bnRzT3V0RGF0ZWQodHJ1ZSk7XG5cdFx0dGhpcy5nZXRBbGxJbm5lckNvbnRyb2xzKCkuZm9yRWFjaCgobWFjcm9BUEkpID0+IHtcblx0XHRcdGlmIChrZXlzKSB7XG5cdFx0XHRcdGNvbnN0IGljb25UYWJGaWx0ZXIgPSB0aGlzLl9nZXRUYWJGcm9tSW5uZXJDb250cm9sKG1hY3JvQVBJKTtcblx0XHRcdFx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdGljb25UYWJGaWx0ZXIgJiZcblx0XHRcdFx0XHRcdChpY29uVGFiRmlsdGVyLmdldEtleSgpID09PSBgZmU6OnRhYmxlOjoke2tleX06OkxpbmVJdGVtYCB8fCBpY29uVGFiRmlsdGVyLmdldEtleSgpID09PSBgZmU6OkN1c3RvbVRhYjo6JHtrZXl9YClcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG1hY3JvQVBJLmludmFsaWRhdGVDb250ZW50Py4oKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1hY3JvQVBJLmludmFsaWRhdGVDb250ZW50Py4oKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBjb3VudHMgdG8gXCJvdXQgb2YgZGF0ZVwiIG9yIFwidXAgdG8gZGF0ZVwiXG5cdCAqIElmIHRoZSBjb3VudHMgYXJlIHNldCB0byBcIm91dCBvZiBkYXRlXCIgYW5kIHRoZSBzZWxlY3RlZCBJY29uVGFiRmlsdGVyIGRvZXNuJ3QgY29udGFpbiBhbiBpbm5lciBjb250cm9sLCBhbGwgaW5uZXIgY29udHJvbHMgYXJlIHJlcXVlc3RlZCB0byBnZXQgdGhlIG5ldyBjb3VudHMuXG5cdCAqIEBwYXJhbSBiVmFsdWUgRWl0aGVyIGZyZWV6ZXMgdGhlIGNvbnRyb2wgb3Igbm90XG5cdCAqL1xuXHRzZXRDb3VudHNPdXREYXRlZChiVmFsdWUgPSB0cnVlKTogdm9pZCB7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcImNvdW50c091dERhdGVkXCIsIGJWYWx1ZSk7XG5cdFx0Ly8gaWYgdGhlIGN1cnJlbnQgdGFiIGlzIG5vdCBjb25maWd1cmVkIHdpdGggbm8gaW5uZXIgQ29udHJvbFxuXHRcdC8vIHRoZSB0YWIgY291bnRzIG11c3QgYmUgbWFudWFsbHkgcmVmcmVzaGVkIHNpbmNlIG5vIE1hY3JvIEFQSSB3aWxsIHNlbnQgZXZlbnQgaW50ZXJuYWxEYXRhUmVxdWVzdGVkXG5cdFx0aWYgKGJWYWx1ZSAmJiAhdGhpcy5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpKSB7XG5cdFx0XHR0aGlzLmludGVybmFsUmVmcmVzaFRhYnNDb3VudCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGcmVlemVzIHRoZSBjb250ZW50IDpcblx0ICogLSBjb250ZW50IGlzIGZyb3plbjogdGhlIGJpbmRpbmcgb2YgdGhlIGlubmVyIGNvbnRyb2xzIGFyZSBzdXNwZW5kZWQuXG5cdCAqIC0gY29udGVudCBpcyB1bmZyb3plbjogdGhlIGJpbmRpbmcgb2YgaW5uZXIgY29udHJvbCByZWxhdGVkIHRvIHRoZSBzZWxlY3RlZCBJY29uVGFiRmlsdGVyIGlzIHJlc3VtZWQuXG5cdCAqIEBwYXJhbSBiVmFsdWUgRnJlZXplIG9yIG5vdCB0aGUgY29udHJvbFxuXHQgKi9cblx0c2V0RnJlZXplQ29udGVudChiVmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHR0aGlzLnNldFByb3BlcnR5KFwiZnJlZXplQ29udGVudFwiLCBiVmFsdWUpO1xuXHRcdHRoaXMuX3NldElubmVyQmluZGluZygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgdGhlIGludGVybmFsIG1vZGVsIHdpdGggdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgbm90IGFwcGxpY2FibGUgb24gZWFjaCBJY29uVGFiRmlsdGVyIChjb250YWluaW5nIGlubmVyIGNvbnRyb2wpIGFjY29yZGluZyB0byB0aGUgZW50aXR5VHlwZSBvZiB0aGUgZmlsdGVyIGNvbnRyb2wuXG5cdCAqXG5cdCAqL1xuXHRfdXBkYXRlTXVsdGlUYWJOb3RBcHBsaWNhYmxlRmllbGRzKCk6IHZvaWQge1xuXHRcdGNvbnN0IHRhYnNNb2RlbCA9IHRoaXMuZ2V0VGFic01vZGVsKCk7XG5cdFx0Y29uc3Qgb0ZpbHRlckNvbnRyb2wgPSB0aGlzLl9nZXRGaWx0ZXJDb250cm9sKCkgYXMgQ29udHJvbDtcblx0XHRpZiAodGFic01vZGVsICYmIG9GaWx0ZXJDb250cm9sKSB7XG5cdFx0XHRjb25zdCByZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCB7IG5vdEFwcGxpY2FibGU6IHsgZmllbGRzOiBzdHJpbmdbXTsgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCB9IH0+ID0ge307XG5cdFx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzKTtcblx0XHRcdGNvbnN0IHZpZXdEYXRhID0gdmlldy5nZXRWaWV3RGF0YSgpO1xuXHRcdFx0aWYgKCF2aWV3RGF0YS51c2VIaWRkZW5GaWx0ZXJCYXIpIHtcblx0XHRcdFx0dGhpcy5nZXRBbGxJbm5lckNvbnRyb2xzKCkuZm9yRWFjaCgob01hY3JvQVBJKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgb1RhYiA9IHRoaXMuX2dldFRhYkZyb21Jbm5lckNvbnRyb2wob01hY3JvQVBJKTtcblx0XHRcdFx0XHRpZiAob1RhYikge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc1RhYklkID0gb1RhYi5nZXRLZXkoKTtcblx0XHRcdFx0XHRcdGNvbnN0IG1JZ25vcmVkRmllbGRzID0gb01hY3JvQVBJLnJlZnJlc2hOb3RBcHBsaWNhYmxlRmllbGRzPy4ob0ZpbHRlckNvbnRyb2wpIHx8IFtdO1xuXHRcdFx0XHRcdFx0cmVzdWx0c1tzVGFiSWRdID0ge1xuXHRcdFx0XHRcdFx0XHRub3RBcHBsaWNhYmxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0ZmllbGRzOiBtSWdub3JlZEZpZWxkcyxcblx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy5fc2V0VGFiTWVzc2FnZVN0cmlwKHtcblx0XHRcdFx0XHRcdFx0XHRcdGVudGl0eVR5cGVQYXRoOiBvRmlsdGVyQ29udHJvbC5kYXRhKFwiZW50aXR5VHlwZVwiKSxcblx0XHRcdFx0XHRcdFx0XHRcdGlnbm9yZWRGaWVsZHM6IG1JZ25vcmVkRmllbGRzLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6IG9UYWIuZ2V0VGV4dCgpXG5cdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdGlmIChvTWFjcm9BUEkgJiYgb01hY3JvQVBJLmlzQShcInNhcC5mZS5tYWNyb3MuQ2hhcnRcIikpIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0c1tzVGFiSWRdID0gdGhpcy5jaGVja05vbkZpbHRlcmFibGVFbnRpdHlTZXQob01hY3JvQVBJLCBzVGFiSWQsIHJlc3VsdHMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRhYnNNb2RlbC5zZXREYXRhKHJlc3VsdHMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNb2RpZmllcyB0aGUgbWVzc2FnZXN0cmlwIG1lc3NhZ2UgYmFzZWQgb24gZW50aXR5IHNldCBpcyBmaWxlcmFibGUgb3Igbm90LlxuXHQgKiBAcGFyYW0gb01hY3JvQVBJIE1hY3JvIGNoYXJ0IGFwaVxuXHQgKiBAcGFyYW0gc1RhYklkIFRhYiBrZXkgSURcblx0ICogQHBhcmFtIHJlc3VsdHMgU2hvdWxkIGNvbnRhaW4gZmllbGRzIGFuZCB0aXRsZVxuXHQgKiBAcmV0dXJucyBBbiBvYmplY3Qgb2YgbW9kaWZpZWQgZmllbGRzIGFuZCB0aXRsZVxuXHQgKi9cblx0Y2hlY2tOb25GaWx0ZXJhYmxlRW50aXR5U2V0KFxuXHRcdG9NYWNyb0FQSTogSW5uZXJDb250cm9sVHlwZSxcblx0XHRzVGFiSWQ6IHN0cmluZyxcblx0XHRyZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCB7IG5vdEFwcGxpY2FibGU6IHsgZmllbGRzOiBzdHJpbmdbXTsgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCB9IH0+XG5cdCk6IHsgbm90QXBwbGljYWJsZTogeyBmaWVsZHM6IHN0cmluZ1tdOyB0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkIH0gfSB7XG5cdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwob01hY3JvQVBJKTtcblx0XHRjb25zdCBvQ2hhcnQgPSBvTWFjcm9BUEk/LmdldENvbnRlbnQgPyBvTWFjcm9BUEkuZ2V0Q29udGVudCgpIDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGJFbnRpdHlTZXRGaWxlcmFibGUgPVxuXHRcdFx0b0NoYXJ0ICYmXG5cdFx0XHRNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPEVudGl0eVNldD4oXG5cdFx0XHRcdChvQ2hhcnQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKS5nZXRDb250ZXh0KGAke29DaGFydC5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIil9YClcblx0XHRcdCk/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcz8uRmlsdGVyUmVzdHJpY3Rpb25zPy5GaWx0ZXJhYmxlO1xuXHRcdGlmIChiRW50aXR5U2V0RmlsZXJhYmxlICE9PSB1bmRlZmluZWQgJiYgIWJFbnRpdHlTZXRGaWxlcmFibGUpIHtcblx0XHRcdGlmIChyZXN1bHRzW3NUYWJJZF0ubm90QXBwbGljYWJsZS5maWVsZHMuaW5jbHVkZXMoXCIkc2VhcmNoXCIpKSB7XG5cdFx0XHRcdHJlc3VsdHNbc1RhYklkXS5ub3RBcHBsaWNhYmxlLnRpdGxlICs9IFwiIFwiICsgcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19MUl9NVUxUSVZJWl9DSEFSVF9NVUxUSV9OT05fRklMVEVSQUJMRVwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdHNbc1RhYklkXS5ub3RBcHBsaWNhYmxlLmZpZWxkcyA9IFtcIm5vbkZpbHRlcmFibGVcIl07XG5cdFx0XHRcdHJlc3VsdHNbc1RhYklkXS5ub3RBcHBsaWNhYmxlLnRpdGxlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19MUl9NVUxUSVZJWl9DSEFSVF9NVUxUSV9OT05fRklMVEVSQUJMRVwiKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHNbc1RhYklkXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBpbm5lciBjb250cm9scy5cblx0ICogQHBhcmFtIGJPbmx5Rm9yVmlzaWJsZVRhYiBTaG91bGQgZGlzcGxheSBvbmx5IHRoZSB2aXNpYmxlIGNvbnRyb2xzXG5cdCAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGNvbnRyb2xzXG5cdCAqL1xuXHRnZXRBbGxJbm5lckNvbnRyb2xzKGJPbmx5Rm9yVmlzaWJsZVRhYiA9IGZhbHNlKTogSW5uZXJDb250cm9sVHlwZVtdIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0dGhpcy5pbm5lckNvbnRyb2xzLnJlZHVjZSgoYUlubmVyQ29udHJvbHM6IElubmVyQ29udHJvbFR5cGVbXSwgc0lubmVyQ29udHJvbDogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9Db250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChzSW5uZXJDb250cm9sKSBhcyBJbm5lckNvbnRyb2xUeXBlO1xuXHRcdFx0XHRpZiAob0NvbnRyb2wpIHtcblx0XHRcdFx0XHRhSW5uZXJDb250cm9scy5wdXNoKG9Db250cm9sKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gYUlubmVyQ29udHJvbHMuZmlsdGVyKFxuXHRcdFx0XHRcdChvSW5uZXJDb250cm9sKSA9PiAhYk9ubHlGb3JWaXNpYmxlVGFiIHx8IHRoaXMuX2dldFRhYkZyb21Jbm5lckNvbnRyb2wob0lubmVyQ29udHJvbCk/LmdldFZpc2libGUoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSwgW10pIHx8IFtdXG5cdFx0KTtcblx0fVxuXG5cdF9nZXRGaWx0ZXJDb250cm9sKCk6IEZpbHRlckJhciB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5maWx0ZXJDb250cm9sKSBhcyBGaWx0ZXJCYXIgfCB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0VGFiRnJvbUlubmVyQ29udHJvbChvQ29udHJvbDogQ29udHJvbCk6IEljb25UYWJGaWx0ZXIgfCB1bmRlZmluZWQge1xuXHRcdGxldCBvVGFiOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkID0gb0NvbnRyb2w7XG5cdFx0aWYgKG9UYWIgJiYgIW9UYWIuaXNBPEljb25UYWJGaWx0ZXI+KFwic2FwLm0uSWNvblRhYkZpbHRlclwiKSAmJiAob1RhYiBhcyB7IGdldFBhcmVudD86IEZ1bmN0aW9uIH0pLmdldFBhcmVudCkge1xuXHRcdFx0b1RhYiA9IG9Db250cm9sLmdldFBhcmVudCgpIGFzIFVJNUVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiBvVGFiICYmIG9UYWIuaXNBPEljb25UYWJGaWx0ZXI+KFwic2FwLm0uSWNvblRhYkZpbHRlclwiKSA/IG9UYWIgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0Vmlld0NvbnRyb2xsZXIoKTogUGFnZUNvbnRyb2xsZXIge1xuXHRcdGNvbnN0IG9WaWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzKTtcblx0XHRyZXR1cm4gb1ZpZXcgJiYgb1ZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHR9XG5cblx0X3JlZnJlc2hDdXN0b21WaWV3KG9GaWx0ZXJDb25kaXRpb25zOiB1bmtub3duLCBzUmVmcmVzaENhdXNlOiBzdHJpbmcpOiB2b2lkIHtcblx0XHQodGhpcy5fZ2V0Vmlld0NvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcik/Lm9uVmlld05lZWRzUmVmcmVzaD8uKHtcblx0XHRcdGZpbHRlckNvbmRpdGlvbnM6IG9GaWx0ZXJDb25kaXRpb25zLFxuXHRcdFx0Y3VycmVudFRhYklkOiB0aGlzLmNvbnRlbnQuZ2V0U2VsZWN0ZWRLZXkoKSxcblx0XHRcdHJlZnJlc2hDYXVzZTogc1JlZnJlc2hDYXVzZVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgY291bnQgb2YgdGhlIFRhYiBjb250YWluaW5nIHRoZSBtYWNybyBwYXNzZWQgYXMgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gbWFjcm9BUEkgVGhlIGNvbnRlbnQgb2YgdGhlIHRhYiB3ZSB3YW50IHRvIHJlZnJlc2hcblx0ICovXG5cdHJlZnJlc2hUYWJDb3VudChtYWNyb0FQSTogSW5uZXJDb250cm9sVHlwZSk6IHZvaWQge1xuXHRcdGNvbnN0IGljb25UYWJGaWx0ZXIgPSB0aGlzLl9nZXRUYWJGcm9tSW5uZXJDb250cm9sKG1hY3JvQVBJKTtcblx0XHRpZiAoIWljb25UYWJGaWx0ZXIpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKG1hY3JvQVBJPy5nZXRDb3VudHMpIHtcblx0XHRcdGljb25UYWJGaWx0ZXIuc2V0Q291bnQoXCIuLi5cIik7XG5cdFx0XHRtYWNyb0FQSVxuXHRcdFx0XHQuZ2V0Q291bnRzKClcblx0XHRcdFx0LnRoZW4oKGNvdW50OiBzdHJpbmcpOiBJY29uVGFiRmlsdGVyID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gaWNvblRhYkZpbHRlci5zZXRDb3VudChjb3VudCB8fCBcIjBcIik7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyb3I6IHVua25vd24pOiB2b2lkIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYEVycm9yIHdoaWxlIHJlcXVlc3RpbmcgQ291bnRzIGZvciBDb250cm9sOiAke2Vycm9yfWApO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRpbnRlcm5hbFJlZnJlc2hUYWJzQ291bnQodGFibGVFdmVudD86IENvcmVFdmVudCk6IHZvaWQge1xuXHRcdC8vIElmIHRoZSByZWZyZXNoIGlzIHRyaWdnZXJlZCBieSBhbiBldmVudCAoaW50ZXJuYWxEYXRhUmVxdWVzdGVkKVxuXHRcdC8vIHdlIGNhbm5vdCB1c2UgdGhlIHNlbGVjdGVkIGtleSBhcyByZWZlcmVuY2Ugc2luY2UgdGFibGUgY2FuIGJlIHJlZnJlc2hlZCBieSBTaWRlRWZmZWN0c1xuXHRcdC8vIHNvIHRoZSB0YWJsZSBjb3VsZCBiZSBpbnRvIGEgZGlmZmVyZW50IHRhYiAtPiB3ZSB1c2UgdGhlIHNvdXJjZSBvZiB0aGUgZXZlbnQgdG8gZmluZCB0aGUgdGFyZ2V0ZWQgdGFiXG5cdFx0Ly8gSWYgbm90IHRyaWdnZXJlZCBieSBhbiBldmVudCAtPiByZWZyZXNoIGF0IGxlYXN0IHRoZSBjb3VudHMgb2YgdGhlIGN1cnJlbnQgTWFjcm9BUElcblx0XHRjb25zdCBldmVudE1hY3JvQVBJID0gdGFibGVFdmVudD8uZ2V0U291cmNlKCkgYXMgTWFjcm9BUEk7XG5cdFx0Y29uc3QgdGFyZ2V0S2V5ID0gZXZlbnRNYWNyb0FQSSA/IHRoaXMuX2dldFRhYkZyb21Jbm5lckNvbnRyb2woZXZlbnRNYWNyb0FQSSk/LmdldEtleSgpIDogdGhpcy5jb250ZW50Py5nZXRTZWxlY3RlZEtleSgpO1xuXHRcdGlmICh0eXBlb2YgdGFyZ2V0S2V5ID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRpZiAodGFyZ2V0S2V5ID09PSBcIlwiKSB7XG5cdFx0XHRcdGNvbnN0IHRhYktleXMgPSB0aGlzLmNvbnRlbnQ/LmdldEl0ZW1zKCkubWFwKCh0YWIpID0+ICh0YWIgYXMgSWNvblRhYkZpbHRlcikuZ2V0S2V5KCkuc3BsaXQoXCI6OlwiKVsyXSkgPz8gW107XG5cdFx0XHRcdHRoaXMucmVmcmVzaFRhYnNDb3VudCh0YWJLZXlzKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMucmVmcmVzaFRhYnNDb3VudChbdGFyZ2V0S2V5LnNwbGl0KFwiOjpcIilbMl1dKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmVmcmVzaGVzIHRoZSBjb3VudCBvZiB0aGUgdmlld3MgaW4gdGhlIE11bHRpTW9kZSBjb250cm9sLlxuXHQgKiBAcGFyYW0gW2tleXNdIFRoZSBsaXN0IG9mIHRoZSBrZXlzIGlkZW50aWZ5aW5nIHRoZSB2aWV3cyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBmb3Igd2hpY2ggdGhlIHZpZXdzJyBjb3VudCB3aWxsIGJlIHJlZnJlc2hlZC4gSWYgbm90IHByb3ZpZGVkLCBhbGwgdGhlIHZpZXdzJyBjb3VudCB3aWxsIGJlIHJlZnJlc2hlZFxuXHQgKi9cblx0cmVmcmVzaFRhYnNDb3VudChrZXlzPzogc3RyaW5nW10pOiB2b2lkIHtcblx0XHRpZiAoIWtleXMpIHtcblx0XHRcdHRoaXMuc2V0Q291bnRzT3V0RGF0ZWQodHJ1ZSk7XG5cdFx0fVxuXHRcdHRoaXMuZ2V0QWxsSW5uZXJDb250cm9scyh0cnVlKS5mb3JFYWNoKChvTWFjcm9BUEkpOiB2b2lkID0+IHtcblx0XHRcdGNvbnN0IG9JY29uVGFiRmlsdGVyID0gdGhpcy5fZ2V0VGFiRnJvbUlubmVyQ29udHJvbChvTWFjcm9BUEkpO1xuXHRcdFx0aWYgKHRoaXMuY291bnRzT3V0RGF0ZWQgfHwgKGtleXMgJiYgb0ljb25UYWJGaWx0ZXIgJiYga2V5cy5pbmNsdWRlcyhvSWNvblRhYkZpbHRlci5nZXRLZXkoKS5zcGxpdChcIjo6XCIpWzJdKSkpIHtcblx0XHRcdFx0dGhpcy5yZWZyZXNoVGFiQ291bnQob01hY3JvQVBJKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHR0aGlzLnNldENvdW50c091dERhdGVkKGZhbHNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWZyZXNoZXMgdGhlIGNvbnRlbnQgb2YgdGhlIHVuZGVybHlpbmcgdmlld3MgdXBvbiB0aGUgbmV4dCBvcGVuaW5nLlxuXHQgKiBOb3RlOiBUaGUgY29udGVudCBvZiB0aGUgc2VsZWN0ZWQgdmlldywgaWYgcGFydCBvZiB0aGUgcHJvdmlkZWQga2V5cywgd2lsbCBiZSByZWZyZXNoZWQgaW1tZWRpYXRlbHkuXG5cdCAqIEBwYXJhbSBba2V5c10gVGhlIGxpc3Qgb2YgdGhlIGtleXMgaWRlbnRpZnlpbmcgdGhlIHZpZXdzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IGZvciB3aGljaCB0aGUgdmlld3MnIGNvbnRlbnQgd2lsbCBiZSByZWZyZXNoZWQuIElmIG5vdCBwcm92aWRlZCwgYWxsIHRoZSB2aWV3cycgY29udGVudCB3aWxsIGJlIHJlZnJlc2hlZFxuXHQgKi9cblx0c2V0VGFiQ29udGVudFRvQmVSZWZyZXNoZWRPbk5leHRPcGVuaW5nKGtleXM/OiBzdHJpbmdbXSk6IHZvaWQge1xuXHRcdGNvbnN0IHNlbGVjdGVkVGFiS2V5ID0gdGhpcz8uY29udGVudC5nZXRTZWxlY3RlZEtleSgpO1xuXHRcdGNvbnN0IHRhYktleXM6IHN0cmluZ1tdID0gW107XG5cdFx0Y29uc3QgcmVmcmVzaFNlbGVjdGVkVGFiQ29udGVudCA9IGtleXMgPyBrZXlzLmluY2x1ZGVzKHNlbGVjdGVkVGFiS2V5Py5zcGxpdChcIjo6XCIpWzJdKSA6IHRydWU7XG5cdFx0aWYgKGtleXMpIHtcblx0XHRcdGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcblx0XHRcdFx0aWYgKHNlbGVjdGVkVGFiS2V5ICE9PSBgZmU6OnRhYmxlOjoke2tleX06OkxpbmVJdGVtYCAmJiBzZWxlY3RlZFRhYktleSAhPT0gYGZlOjpDdXN0b21UYWI6OiR7a2V5fWApIHtcblx0XHRcdFx0XHR0YWJLZXlzLnB1c2goa2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzPy5nZXRBbGxJbm5lckNvbnRyb2xzKCkuZm9yRWFjaCgobWFjcm9BUEkpID0+IHtcblx0XHRcdFx0Y29uc3QgaWNvblRhYkZpbHRlciA9IHRoaXM/Ll9nZXRUYWJGcm9tSW5uZXJDb250cm9sKG1hY3JvQVBJKTtcblx0XHRcdFx0aWYgKGljb25UYWJGaWx0ZXIgJiYgaWNvblRhYkZpbHRlci5nZXRLZXkoKSAhPT0gc2VsZWN0ZWRUYWJLZXkpIHtcblx0XHRcdFx0XHR0YWJLZXlzLnB1c2goaWNvblRhYkZpbHRlci5nZXRLZXkoKS5zcGxpdChcIjo6XCIpWzJdKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHRoaXM/LmludmFsaWRhdGVDb250ZW50KHRhYktleXMpO1xuXHRcdGlmIChyZWZyZXNoU2VsZWN0ZWRUYWJDb250ZW50KSB7XG5cdFx0XHR0aGlzPy5yZWZyZXNoU2VsZWN0ZWRJbm5lckNvbnRyb2xDb250ZW50KCk7XG5cdFx0fVxuXHR9XG5cblx0X3NldElubmVyQmluZGluZyhiUmVxdWVzdElmTm90SW5pdGlhbGl6ZWQgPSBmYWxzZSk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmNvbnRlbnQpIHtcblx0XHRcdHRoaXMuZ2V0QWxsSW5uZXJDb250cm9scygpLmZvckVhY2goKG9NYWNyb0FQSSkgPT4ge1xuXHRcdFx0XHRjb25zdCBvSWNvblRhYkZpbHRlciA9IHRoaXMuX2dldFRhYkZyb21Jbm5lckNvbnRyb2wob01hY3JvQVBJKTtcblx0XHRcdFx0Y29uc3QgYklzU2VsZWN0ZWRLZXkgPSBvSWNvblRhYkZpbHRlcj8uZ2V0S2V5KCkgPT09IHRoaXMuY29udGVudC5nZXRTZWxlY3RlZEtleSgpO1xuXHRcdFx0XHRjb25zdCBzQWN0aW9uID0gYklzU2VsZWN0ZWRLZXkgJiYgIXRoaXMuZ2V0UHJvcGVydHkoXCJmcmVlemVDb250ZW50XCIpID8gQmluZGluZ0FjdGlvbi5SZXN1bWUgOiBCaW5kaW5nQWN0aW9uLlN1c3BlbmQ7XG5cdFx0XHRcdG9NYWNyb0FQSVtzQWN0aW9uXT8uKHNBY3Rpb24gPT09IEJpbmRpbmdBY3Rpb24uUmVzdW1lID8gYlJlcXVlc3RJZk5vdEluaXRpYWxpemVkICYmIGJJc1NlbGVjdGVkS2V5IDogdW5kZWZpbmVkKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdF9zZXRUYWJNZXNzYWdlU3RyaXAocHJvcGVydGllczogTWVzc2FnZVN0cmlwUHJvcGVydGllcyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IHNUZXh0ID0gXCJcIjtcblx0XHRjb25zdCBhSWdub3JlZEZpZWxkcyA9IHByb3BlcnRpZXMuaWdub3JlZEZpZWxkcztcblx0XHRjb25zdCBvRmlsdGVyQ29udHJvbCA9IHRoaXMuX2dldEZpbHRlckNvbnRyb2woKSBhcyBDb250cm9sO1xuXHRcdGlmIChvRmlsdGVyQ29udHJvbCAmJiBBcnJheS5pc0FycmF5KGFJZ25vcmVkRmllbGRzKSAmJiBhSWdub3JlZEZpZWxkcy5sZW5ndGggPiAwICYmIHByb3BlcnRpZXMudGl0bGUpIHtcblx0XHRcdGNvbnN0IGFJZ25vcmVkTGFiZWxzID0gTWVzc2FnZVN0cmlwLmdldExhYmVscyhcblx0XHRcdFx0YUlnbm9yZWRGaWVsZHMsXG5cdFx0XHRcdHByb3BlcnRpZXMuZW50aXR5VHlwZVBhdGgsXG5cdFx0XHRcdG9GaWx0ZXJDb250cm9sLFxuXHRcdFx0XHRnZXRSZXNvdXJjZU1vZGVsKG9GaWx0ZXJDb250cm9sKVxuXHRcdFx0KTtcblx0XHRcdHNUZXh0ID0gTWVzc2FnZVN0cmlwLmdldFRleHQoYUlnbm9yZWRMYWJlbHMsIG9GaWx0ZXJDb250cm9sLCBwcm9wZXJ0aWVzLnRpdGxlKTtcblx0XHRcdHJldHVybiBzVGV4dDtcblx0XHR9XG5cdH1cblxuXHRfb25TZWFyY2gob0V2ZW50OiBDb3JlRXZlbnQ8eyBjb25kaXRpb25zOiB1bmtub3duIH0+KTogdm9pZCB7XG5cdFx0dGhpcy5zZXRDb3VudHNPdXREYXRlZCh0cnVlKTtcblx0XHR0aGlzLnNldEZyZWV6ZUNvbnRlbnQoZmFsc2UpO1xuXHRcdGlmICh0aGlzLmdldFNlbGVjdGVkSW5uZXJDb250cm9sKCkpIHtcblx0XHRcdHRoaXMuX3VwZGF0ZU11bHRpVGFiTm90QXBwbGljYWJsZUZpZWxkcygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBjdXN0b20gdGFiXG5cdFx0XHR0aGlzLl9yZWZyZXNoQ3VzdG9tVmlldyhvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiY29uZGl0aW9uc1wiKSwgXCJzZWFyY2hcIik7XG5cdFx0fVxuXHR9XG5cblx0X29uRmlsdGVyQ2hhbmdlZChvRXZlbnQ6IENvcmVFdmVudDx7IGNvbmRpdGlvbnNCYXNlZDogYm9vbGVhbiB9Pik6IHZvaWQge1xuXHRcdGlmIChvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiY29uZGl0aW9uc0Jhc2VkXCIpKSB7XG5cdFx0XHR0aGlzLnNldEZyZWV6ZUNvbnRlbnQodHJ1ZSk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE11bHRpcGxlTW9kZUNvbnRyb2w7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQXVDS0EsYUFBYSwwQkFBYkEsYUFBYTtJQUFiQSxhQUFhO0lBQWJBLGFBQWE7SUFBQSxPQUFiQSxhQUFhO0VBQUEsRUFBYkEsYUFBYTtFQUFBLElBTVpDLG1CQUFtQixJQUFBQyxJQUFBLEdBRHhCQyxjQUFjLENBQUMsMERBQTBELENBQUMsRUFBQUMsS0FBQSxHQUV6RUMsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFVLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBRzdCRixR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
516
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCaW5kaW5nQWN0aW9uIiwiTXVsdGlwbGVNb2RlQ29udHJvbCIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwicHJvcGVydHkiLCJ0eXBlIiwiX2RlYzMiLCJkZWZhdWx0VmFsdWUiLCJfZGVjNCIsIl9kZWM1IiwiX2RlYzYiLCJhZ2dyZWdhdGlvbiIsIm11bHRpcGxlIiwiaXNEZWZhdWx0IiwiX2RlYzciLCJhc3NvY2lhdGlvbiIsIl9kZWM4IiwiX2RlYzkiLCJldmVudCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQ29udHJvbCIsImlkIiwic2V0dGluZ3MiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJvbkJlZm9yZVJlbmRlcmluZyIsImdldFRhYnNNb2RlbCIsIm9GaWx0ZXJDb250cm9sIiwiX2dldEZpbHRlckNvbnRyb2wiLCJzZXRDb3VudHNPdXREYXRlZCIsIm9GaWx0ZXJCYXJBUEkiLCJnZXRQYXJlbnQiLCJnZXRBbGxJbm5lckNvbnRyb2xzIiwiZm9yRWFjaCIsIm9NYWNyb0FQSSIsInNob3dDb3VudHMiLCJhdHRhY2hFdmVudCIsImludGVybmFsUmVmcmVzaFRhYnNDb3VudCIsImJpbmQiLCJzdXNwZW5kQmluZGluZyIsIl9vblNlYXJjaCIsIl9vbkZpbHRlckNoYW5nZWQiLCJvbkFmdGVyUmVuZGVyaW5nIiwiZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2wiLCJyZXN1bWVCaW5kaW5nIiwiZ2V0UHJvcGVydHkiLCJzZXRWaXNpYmxlT3ZlcnJpZGRlbiIsInNldFByb3BlcnR5IiwibWFjcm9BUEkiLCJpY29uVGFiRmlsdGVyIiwiX2dldFRhYkZyb21Jbm5lckNvbnRyb2wiLCJvcmlnaW5TZXRWaXNpYmxlIiwic2V0VmlzaWJsZSIsInZhbHVlIiwiZ2V0VmlzaWJsZSIsInJlZnJlc2hUYWJDb3VudCIsInJlbmRlciIsIm9SbSIsIm9Db250cm9sIiwicmVuZGVyQ29udHJvbCIsImNvbnRlbnQiLCJzVGFic01vZGVsIiwib0NvbnRlbnQiLCJ1bmRlZmluZWQiLCJvTW9kZWwiLCJnZXRNb2RlbCIsIkpTT05Nb2RlbCIsInNldE1vZGVsIiwib1NlbGVjdGVkVGFiIiwiZ2V0SXRlbXMiLCJmaW5kIiwib0l0ZW0iLCJnZXRLZXkiLCJnZXRTZWxlY3RlZEtleSIsImhhbmRsZVRhYkNoYW5nZSIsIm9FdmVudCIsIm9JY29uVGFiQmFyIiwiZ2V0U291cmNlIiwib011bHRpQ29udHJvbCIsIm1QYXJhbWV0ZXJzIiwiZ2V0UGFyYW1ldGVycyIsIl9zZXRJbm5lckJpbmRpbmciLCJzUHJldmlvdXNTZWxlY3RlZEtleSIsInByZXZpb3VzS2V5Iiwic1NlbGVjdGVkS2V5Iiwic2VsZWN0ZWRLZXkiLCJwZXJzb25hbGl6YXRpb25Qcm9taXNlIiwib0ZpbHRlckJhciIsIl9yZWZyZXNoQ3VzdG9tVmlldyIsImdldEZpbHRlckNvbmRpdGlvbnMiLCJoYW5kbGVQZXJzb25hbGl6YXRpb25VcGRhdGUiLCJfZ2V0Vmlld0NvbnRyb2xsZXIiLCJnZXRFeHRlbnNpb25BUEkiLCJ1cGRhdGVBcHBTdGF0ZSIsImZpcmVFdmVudCIsImljb25UYWJCYXIiLCJDb250cm9sUGVyc29uYWxpemF0aW9uV3JpdGVBUEkiLCJfX3VpNV9yZXF1aXJlX2FzeW5jIiwiZGVmYXVsdCIsImFkZCIsImNoYW5nZXMiLCJjaGFuZ2VTcGVjaWZpY0RhdGEiLCJjaGFuZ2VUeXBlIiwicHJldmlvdXNTZWxlY3RlZEtleSIsInNlbGVjdG9yRWxlbWVudCIsImVycm9yIiwiTG9nIiwicmVmcmVzaFNlbGVjdGVkSW5uZXJDb250cm9sQ29udGVudCIsImludmFsaWRhdGVDb250ZW50Iiwia2V5cyIsImtleSIsImJWYWx1ZSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInNldEZyZWV6ZUNvbnRlbnQiLCJfdXBkYXRlTXVsdGlUYWJOb3RBcHBsaWNhYmxlRmllbGRzIiwidGFic01vZGVsIiwicmVzdWx0cyIsInZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJ2aWV3RGF0YSIsImdldFZpZXdEYXRhIiwidXNlSGlkZGVuRmlsdGVyQmFyIiwib1RhYiIsInNUYWJJZCIsIm1JZ25vcmVkRmllbGRzIiwicmVmcmVzaE5vdEFwcGxpY2FibGVGaWVsZHMiLCJub3RBcHBsaWNhYmxlIiwiZmllbGRzIiwidGl0bGUiLCJfc2V0VGFiTWVzc2FnZVN0cmlwIiwiZW50aXR5VHlwZVBhdGgiLCJkYXRhIiwiaWdub3JlZEZpZWxkcyIsImdldFRleHQiLCJpc0EiLCJjaGVja05vbkZpbHRlcmFibGVFbnRpdHlTZXQiLCJzZXREYXRhIiwicmVzb3VyY2VNb2RlbCIsImdldFJlc291cmNlTW9kZWwiLCJvQ2hhcnQiLCJnZXRDb250ZW50IiwiYkVudGl0eVNldEZpbGVyYWJsZSIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldE1ldGFNb2RlbCIsImdldENvbnRleHQiLCJ0YXJnZXRPYmplY3QiLCJhbm5vdGF0aW9ucyIsIkNhcGFiaWxpdGllcyIsIkZpbHRlclJlc3RyaWN0aW9ucyIsIkZpbHRlcmFibGUiLCJpbmNsdWRlcyIsImJPbmx5Rm9yVmlzaWJsZVRhYiIsImlubmVyQ29udHJvbHMiLCJyZWR1Y2UiLCJhSW5uZXJDb250cm9scyIsInNJbm5lckNvbnRyb2wiLCJVSTVFbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJwdXNoIiwiZmlsdGVyIiwib0lubmVyQ29udHJvbCIsImZpbHRlckNvbnRyb2wiLCJvVmlldyIsImdldENvbnRyb2xsZXIiLCJvRmlsdGVyQ29uZGl0aW9ucyIsInNSZWZyZXNoQ2F1c2UiLCJvblZpZXdOZWVkc1JlZnJlc2giLCJmaWx0ZXJDb25kaXRpb25zIiwiY3VycmVudFRhYklkIiwicmVmcmVzaENhdXNlIiwiZ2V0Q291bnRzIiwic2V0Q291bnQiLCJlZGl0RmxvdyIsInN5bmNUYXNrIiwidGhlbiIsImNvdW50IiwiY2F0Y2giLCJ0YWJsZUV2ZW50IiwiZXZlbnRNYWNyb0FQSSIsInRhcmdldEtleSIsInRhYktleXMiLCJtYXAiLCJ0YWIiLCJzcGxpdCIsInJlZnJlc2hUYWJzQ291bnQiLCJvSWNvblRhYkZpbHRlciIsImNvdW50c091dERhdGVkIiwic2V0VGFiQ29udGVudFRvQmVSZWZyZXNoZWRPbk5leHRPcGVuaW5nIiwic2VsZWN0ZWRUYWJLZXkiLCJyZWZyZXNoU2VsZWN0ZWRUYWJDb250ZW50IiwiYlJlcXVlc3RJZk5vdEluaXRpYWxpemVkIiwiYklzU2VsZWN0ZWRLZXkiLCJzQWN0aW9uIiwiUmVzdW1lIiwiU3VzcGVuZCIsInByb3BlcnRpZXMiLCJzVGV4dCIsImFJZ25vcmVkRmllbGRzIiwiQXJyYXkiLCJpc0FycmF5IiwiYUlnbm9yZWRMYWJlbHMiLCJNZXNzYWdlU3RyaXAiLCJnZXRMYWJlbHMiLCJnZXRQYXJhbWV0ZXIiLCJDb250cm9sIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNdWx0aXBsZU1vZGVDb250cm9sLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5U2V0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgYWdncmVnYXRpb24sIGFzc29jaWF0aW9uLCBkZWZpbmVVSTVDbGFzcywgZXZlbnQsIHByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgTWVzc2FnZVN0cmlwIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01lc3NhZ2VTdHJpcFwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIE1hY3JvQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL01hY3JvQVBJXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgdHlwZSBMaXN0UmVwb3J0Q29udHJvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L0xpc3RSZXBvcnRDb250cm9sbGVyLmNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIEljb25UYWJCYXIgZnJvbSBcInNhcC9tL0ljb25UYWJCYXJcIjtcbmltcG9ydCB0eXBlIHsgSWNvblRhYkJhciRTZWxlY3RFdmVudCB9IGZyb20gXCJzYXAvbS9JY29uVGFiQmFyXCI7XG5pbXBvcnQgdHlwZSBJY29uVGFiRmlsdGVyIGZyb20gXCJzYXAvbS9JY29uVGFiRmlsdGVyXCI7XG5pbXBvcnQgdHlwZSBDb3JlRXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBSZW5kZXJNYW5hZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9SZW5kZXJNYW5hZ2VyXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5cbmV4cG9ydCB0eXBlIElubmVyQ29udHJvbFR5cGUgPSBNYWNyb0FQSSAmXG5cdFBhcnRpYWw8e1xuXHRcdHJlc3VtZUJpbmRpbmc6IEZ1bmN0aW9uO1xuXHRcdHN1c3BlbmRCaW5kaW5nOiBGdW5jdGlvbjtcblx0XHRnZXRDb3VudHM6IEZ1bmN0aW9uO1xuXHRcdHJlZnJlc2hOb3RBcHBsaWNhYmxlRmllbGRzOiBGdW5jdGlvbjtcblx0XHRpbnZhbGlkYXRlQ29udGVudDogRnVuY3Rpb247XG5cdFx0Z2V0Q29udGVudDogRnVuY3Rpb247XG5cdH0+O1xuXG50eXBlIE1lc3NhZ2VTdHJpcFByb3BlcnRpZXMgPSB7XG5cdGVudGl0eVR5cGVQYXRoOiBzdHJpbmc7XG5cdGlnbm9yZWRGaWVsZHM6IHN0cmluZ1tdO1xuXHR0aXRsZTogc3RyaW5nO1xufTtcblxuZW51bSBCaW5kaW5nQWN0aW9uIHtcblx0U3VzcGVuZCA9IFwic3VzcGVuZEJpbmRpbmdcIixcblx0UmVzdW1lID0gXCJyZXN1bWVCaW5kaW5nXCJcbn1cblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0LmNvbnRyb2xzLk11bHRpcGxlTW9kZUNvbnRyb2xcIilcbmNsYXNzIE11bHRpcGxlTW9kZUNvbnRyb2wgZXh0ZW5kcyBDb250cm9sIHtcblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIgfSlcblx0c2hvd0NvdW50cyE6IGJvb2xlYW47XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0c2V0VmlzaWJsZU92ZXJyaWRkZW4hOiBib29sZWFuO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdGZyZWV6ZUNvbnRlbnQhOiBib29sZWFuO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdGNvdW50c091dERhdGVkITogYm9vbGVhbjtcblxuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5tLkljb25UYWJCYXJcIiwgbXVsdGlwbGU6IGZhbHNlLCBpc0RlZmF1bHQ6IHRydWUgfSlcblx0Y29udGVudCE6IEljb25UYWJCYXI7XG5cblx0QGFzc29jaWF0aW9uKHsgdHlwZTogXCJzYXAudWkuY29yZS5Db250cm9sXCIsIG11bHRpcGxlOiB0cnVlIH0pXG5cdGlubmVyQ29udHJvbHMhOiBzdHJpbmdbXTtcblxuXHRAYXNzb2NpYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuRmlsdGVyQmFyXCIsIG11bHRpcGxlOiBmYWxzZSB9KVxuXHRmaWx0ZXJDb250cm9sITogc3RyaW5nO1xuXG5cdEBldmVudCgpXG5cdHNlbGVjdCE6IEZ1bmN0aW9uO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdGlkPzogc3RyaW5nIHwgdW5kZWZpbmVkIHwgKFByb3BlcnRpZXNPZjxNdWx0aXBsZU1vZGVDb250cm9sPiAmICRDb250cm9sU2V0dGluZ3MpLFxuXHRcdHNldHRpbmdzPzogJENvbnRyb2xTZXR0aW5ncyAmIFByb3BlcnRpZXNPZjxNdWx0aXBsZU1vZGVDb250cm9sPlxuXHQpIHtcblx0XHRzdXBlcihpZCBhcyBzdHJpbmcsIHNldHRpbmdzKTtcblx0fVxuXG5cdG9uQmVmb3JlUmVuZGVyaW5nKCk6IHZvaWQge1xuXHRcdHRoaXMuZ2V0VGFic01vZGVsKCk7IC8vIEdlbmVyYXRlIHRoZSBtb2RlbCB3aGljaCBpcyBtYW5kYXRvcnkgZm9yIHNvbWUgYmluZGluZ3NcblxuXHRcdGNvbnN0IG9GaWx0ZXJDb250cm9sID0gdGhpcy5fZ2V0RmlsdGVyQ29udHJvbCgpO1xuXHRcdGlmICghb0ZpbHRlckNvbnRyb2wpIHtcblx0XHRcdC8vIEluIGNhc2UgdGhlcmUncyBubyBmaWx0ZXJiYXIsIHdlIGhhdmUgdG8gdXBkYXRlIHRoZSBjb3VudHMgaW4gdGhlIHRhYnMgaW1tZWRpYXRlbHlcblx0XHRcdHRoaXMuc2V0Q291bnRzT3V0RGF0ZWQodHJ1ZSk7XG5cdFx0fVxuXHRcdGNvbnN0IG9GaWx0ZXJCYXJBUEkgPSBvRmlsdGVyQ29udHJvbD8uZ2V0UGFyZW50KCk7XG5cdFx0dGhpcy5nZXRBbGxJbm5lckNvbnRyb2xzKCkuZm9yRWFjaCgob01hY3JvQVBJKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5zaG93Q291bnRzKSB7XG5cdFx0XHRcdG9NYWNyb0FQSS5hdHRhY2hFdmVudChcImludGVybmFsRGF0YVJlcXVlc3RlZFwiLCB0aGlzLmludGVybmFsUmVmcmVzaFRhYnNDb3VudC5iaW5kKHRoaXMpKTtcblx0XHRcdH1cblx0XHRcdG9NYWNyb0FQSS5zdXNwZW5kQmluZGluZz8uKCk7XG5cdFx0fSk7XG5cdFx0aWYgKG9GaWx0ZXJCYXJBUEkpIHtcblx0XHRcdG9GaWx0ZXJCYXJBUEkuYXR0YWNoRXZlbnQoXCJpbnRlcm5hbFNlYXJjaFwiLCB0aGlzLl9vblNlYXJjaC5iaW5kKHRoaXMpKTtcblx0XHRcdG9GaWx0ZXJCYXJBUEkuYXR0YWNoRXZlbnQoXCJpbnRlcm5hbEZpbHRlckNoYW5nZWRcIiwgdGhpcy5fb25GaWx0ZXJDaGFuZ2VkLmJpbmQodGhpcykpO1xuXHRcdH1cblx0fVxuXG5cdG9uQWZ0ZXJSZW5kZXJpbmcoKTogdm9pZCB7XG5cdFx0dGhpcy5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpPy5yZXN1bWVCaW5kaW5nPy4oIXRoaXMuZ2V0UHJvcGVydHkoXCJmcmVlemVDb250ZW50XCIpKTtcblx0XHRpZiAodGhpcy5zaG93Q291bnRzICYmICF0aGlzLnNldFZpc2libGVPdmVycmlkZGVuKSB7XG5cdFx0XHR0aGlzLnNldFByb3BlcnR5KFwic2V0VmlzaWJsZU92ZXJyaWRkZW5cIiwgdHJ1ZSk7XG5cdFx0XHR0aGlzLmdldEFsbElubmVyQ29udHJvbHMoKS5mb3JFYWNoKChtYWNyb0FQSTogTWFjcm9BUEkpOiB2b2lkID0+IHtcblx0XHRcdFx0Y29uc3QgaWNvblRhYkZpbHRlciA9IHRoaXMuX2dldFRhYkZyb21Jbm5lckNvbnRyb2wobWFjcm9BUEkpO1xuXHRcdFx0XHQvLyBObyBjb3VudCB0byBzaG93XG5cdFx0XHRcdGlmICghaWNvblRhYkZpbHRlcikgcmV0dXJuO1xuXG5cdFx0XHRcdGNvbnN0IG9yaWdpblNldFZpc2libGUgPSBpY29uVGFiRmlsdGVyLnNldFZpc2libGU7XG5cdFx0XHRcdGljb25UYWJGaWx0ZXIuc2V0VmlzaWJsZSA9ICh2YWx1ZTogYm9vbGVhbik6IEljb25UYWJGaWx0ZXIgPT4ge1xuXHRcdFx0XHRcdGlmIChpY29uVGFiRmlsdGVyLmdldFZpc2libGUoKSA9PT0gZmFsc2UgJiYgdmFsdWUpIHtcblx0XHRcdFx0XHRcdHRoaXMucmVmcmVzaFRhYkNvdW50KG1hY3JvQVBJKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIG9yaWdpblNldFZpc2libGUuYmluZChpY29uVGFiRmlsdGVyKSh2YWx1ZSk7XG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRzdGF0aWMgcmVuZGVyKG9SbTogUmVuZGVyTWFuYWdlciwgb0NvbnRyb2w6IE11bHRpcGxlTW9kZUNvbnRyb2wpOiB2b2lkIHtcblx0XHRvUm0ucmVuZGVyQ29udHJvbChvQ29udHJvbC5jb250ZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBtb2RlbCBjb250YWluaW5nIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlIEljb25UYWJGaWx0ZXJzLlxuXHQgKiBAcmV0dXJucyBUaGUgbW9kZWxcblx0ICovXG5cdGdldFRhYnNNb2RlbCgpOiBKU09OTW9kZWwgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHNUYWJzTW9kZWwgPSBcInRhYnNJbnRlcm5hbFwiO1xuXHRcdGNvbnN0IG9Db250ZW50ID0gdGhpcy5jb250ZW50O1xuXHRcdGlmICghb0NvbnRlbnQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGxldCBvTW9kZWwgPSBvQ29udGVudC5nZXRNb2RlbChzVGFic01vZGVsKSBhcyBKU09OTW9kZWwgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKCFvTW9kZWwpIHtcblx0XHRcdG9Nb2RlbCA9IG5ldyBKU09OTW9kZWwoe30pO1xuXHRcdFx0b0NvbnRlbnQuc2V0TW9kZWwob01vZGVsLCBzVGFic01vZGVsKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9Nb2RlbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBpbm5lciBjb250cm9sIG9mIHRoZSBkaXNwbGF5ZWQgdGFiLlxuXHQgKiBAcmV0dXJucyBUaGUgY29udHJvbFxuXHQgKi9cblx0Z2V0U2VsZWN0ZWRJbm5lckNvbnRyb2woKTogSW5uZXJDb250cm9sVHlwZSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb1NlbGVjdGVkVGFiID0gdGhpcy5jb250ZW50Py5nZXRJdGVtcygpLmZpbmQoKG9JdGVtKSA9PiAob0l0ZW0gYXMgSWNvblRhYkZpbHRlcikuZ2V0S2V5KCkgPT09IHRoaXMuY29udGVudC5nZXRTZWxlY3RlZEtleSgpKTtcblx0XHRyZXR1cm4gb1NlbGVjdGVkVGFiXG5cdFx0XHQ/IHRoaXMuZ2V0QWxsSW5uZXJDb250cm9scygpLmZpbmQoKG9NYWNyb0FQSSkgPT4gdGhpcy5fZ2V0VGFiRnJvbUlubmVyQ29udHJvbChvTWFjcm9BUEkpID09PSBvU2VsZWN0ZWRUYWIpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIHRoZSBiaW5kaW5nIG9mIGFsbCBpbm5lciBjb250cm9scyB3aGVuIHRoZSBzZWxlY3RlZCBJY29uVGFiRmlsdGVyIGlzIGNoYW5nZWQuXG5cdCAqIEBwYXJhbSBvRXZlbnQgRXZlbnQgZmlyZWQgYnkgdGhlIEljb25UYWJCYXJcblx0ICogQHJldHVybnMgQSBwcm9taXNlIGlmIHRoZSBwZXJzb25hbGl6YXRpb24gaXMgdXBkYXRlZCwgb3RoZXJ3aXNlIG5vdGhpbmdcblx0ICovXG5cdHN0YXRpYyBoYW5kbGVUYWJDaGFuZ2Uob0V2ZW50OiBJY29uVGFiQmFyJFNlbGVjdEV2ZW50KTogUHJvbWlzZTx2b2lkPiB8IHZvaWQge1xuXHRcdGNvbnN0IG9JY29uVGFiQmFyID0gb0V2ZW50LmdldFNvdXJjZSgpO1xuXHRcdGNvbnN0IG9NdWx0aUNvbnRyb2wgPSBvSWNvblRhYkJhci5nZXRQYXJlbnQoKSBhcyBNdWx0aXBsZU1vZGVDb250cm9sO1xuXG5cdFx0Y29uc3QgbVBhcmFtZXRlcnMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVycygpO1xuXHRcdG9NdWx0aUNvbnRyb2wuX3NldElubmVyQmluZGluZyh0cnVlKTtcblx0XHRjb25zdCBzUHJldmlvdXNTZWxlY3RlZEtleSA9IG1QYXJhbWV0ZXJzPy5wcmV2aW91c0tleTtcblx0XHRjb25zdCBzU2VsZWN0ZWRLZXkgPSBtUGFyYW1ldGVycz8uc2VsZWN0ZWRLZXk7XG5cdFx0bGV0IHBlcnNvbmFsaXphdGlvblByb21pc2U7XG5cdFx0aWYgKHNTZWxlY3RlZEtleSAmJiBzUHJldmlvdXNTZWxlY3RlZEtleSAhPT0gc1NlbGVjdGVkS2V5KSB7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gb011bHRpQ29udHJvbC5fZ2V0RmlsdGVyQ29udHJvbCgpO1xuXHRcdFx0aWYgKG9GaWx0ZXJCYXIgJiYgIW9NdWx0aUNvbnRyb2wuZ2V0UHJvcGVydHkoXCJmcmVlemVDb250ZW50XCIpKSB7XG5cdFx0XHRcdGlmICghb011bHRpQ29udHJvbC5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpKSB7XG5cdFx0XHRcdFx0Ly9jdXN0b20gdGFiXG5cdFx0XHRcdFx0b011bHRpQ29udHJvbC5fcmVmcmVzaEN1c3RvbVZpZXcob0ZpbHRlckJhci5nZXRGaWx0ZXJDb25kaXRpb25zKCksIFwidGFiQ2hhbmdlZFwiKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cGVyc29uYWxpemF0aW9uUHJvbWlzZSA9IE11bHRpcGxlTW9kZUNvbnRyb2wuaGFuZGxlUGVyc29uYWxpemF0aW9uVXBkYXRlKHNTZWxlY3RlZEtleSwgc1ByZXZpb3VzU2VsZWN0ZWRLZXksIG9JY29uVGFiQmFyKTtcblx0XHR9XG5cblx0XHRvTXVsdGlDb250cm9sLl9nZXRWaWV3Q29udHJvbGxlcigpPy5nZXRFeHRlbnNpb25BUEkoKT8udXBkYXRlQXBwU3RhdGUoKTtcblxuXHRcdG9NdWx0aUNvbnRyb2wuZmlyZUV2ZW50KFwic2VsZWN0XCIsIHtcblx0XHRcdGljb25UYWJCYXI6IG9JY29uVGFiQmFyLFxuXHRcdFx0c2VsZWN0ZWRLZXk6IHNTZWxlY3RlZEtleSxcblx0XHRcdHByZXZpb3VzS2V5OiBzUHJldmlvdXNTZWxlY3RlZEtleVxuXHRcdH0pO1xuXHRcdHJldHVybiBwZXJzb25hbGl6YXRpb25Qcm9taXNlO1xuXHR9XG5cblx0cHJpdmF0ZSBzdGF0aWMgYXN5bmMgaGFuZGxlUGVyc29uYWxpemF0aW9uVXBkYXRlKFxuXHRcdHNTZWxlY3RlZEtleTogc3RyaW5nLFxuXHRcdHNQcmV2aW91c1NlbGVjdGVkS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0b0ljb25UYWJCYXI6IEljb25UYWJCYXJcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IENvbnRyb2xQZXJzb25hbGl6YXRpb25Xcml0ZUFQSSA9IChhd2FpdCBpbXBvcnQoXCJzYXAvdWkvZmwvd3JpdGUvYXBpL0NvbnRyb2xQZXJzb25hbGl6YXRpb25Xcml0ZUFQSVwiKSkuZGVmYXVsdDtcblx0XHRcdENvbnRyb2xQZXJzb25hbGl6YXRpb25Xcml0ZUFQSS5hZGQoe1xuXHRcdFx0XHRjaGFuZ2VzOiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0Y2hhbmdlU3BlY2lmaWNEYXRhOiB7XG5cdFx0XHRcdFx0XHRcdGNoYW5nZVR5cGU6IFwic2VsZWN0SWNvblRhYkJhckZpbHRlclwiLFxuXHRcdFx0XHRcdFx0XHRjb250ZW50OiB7XG5cdFx0XHRcdFx0XHRcdFx0c2VsZWN0ZWRLZXk6IHNTZWxlY3RlZEtleSxcblx0XHRcdFx0XHRcdFx0XHRwcmV2aW91c1NlbGVjdGVkS2V5OiBzUHJldmlvdXNTZWxlY3RlZEtleVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0c2VsZWN0b3JFbGVtZW50OiBvSWNvblRhYkJhclxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XVxuXHRcdFx0fSk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdExvZy5lcnJvcihcIlNvbWV0aGluZyB3ZW50IHdyb25nIHdoaWxlIHVwZGF0aW5nIHRoZSBwZXJzb25hbGl6YXRpb24gc3RhdGUgb2YgdGhlIE11bHRpcGxlTW9kZUNvbnRyb2xcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmVmcmVzaGVzIHRoZSBjb250ZW50IG9mIHRoZSBzZWxlY3RlZCBpbm5lciBjb250cm9sLlxuXHQgKlxuXHQgKi9cblx0cmVmcmVzaFNlbGVjdGVkSW5uZXJDb250cm9sQ29udGVudCgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpKSB7XG5cdFx0XHR0aGlzLmdldFNlbGVjdGVkSW5uZXJDb250cm9sKCk/LmludmFsaWRhdGVDb250ZW50Py4oKTtcblx0XHRcdHRoaXMuZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2woKT8ucmVzdW1lQmluZGluZz8uKHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBjdXN0b20gdGFiXG5cdFx0XHR0aGlzLl9yZWZyZXNoQ3VzdG9tVmlldyh1bmRlZmluZWQsIFwiZm9yY2VkUmVmcmVzaFwiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSW52YWxpZGF0ZXMgdGhlIGNvbnRlbnQgb2YgdGhlIGlubmVyIGNvbnRyb2xzLlxuXHQgKiBAcGFyYW0gW2tleXNdIFRoZSBsaXN0IG9mIHRoZSBrZXlzIGlkZW50aWZ5aW5nIHRoZSB2aWV3cyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBmb3Igd2hpY2ggdGhlIHZpZXdzJyBjb250ZW50IHdpbGwgYmUgaW52YWxpZGF0ZWQuIElmIG5vdCBwcm92aWRlZCwgYWxsIHRoZSB2aWV3cycgY29udGVudCB3aWxsIGJlIGludmFsaWRhdGVkXG5cdCAqL1xuXHRpbnZhbGlkYXRlQ29udGVudChrZXlzPzogc3RyaW5nW10pOiB2b2lkIHtcblx0XHR0aGlzLnNldENvdW50c091dERhdGVkKHRydWUpO1xuXHRcdHRoaXMuZ2V0QWxsSW5uZXJDb250cm9scygpLmZvckVhY2goKG1hY3JvQVBJKSA9PiB7XG5cdFx0XHRpZiAoa2V5cykge1xuXHRcdFx0XHRjb25zdCBpY29uVGFiRmlsdGVyID0gdGhpcy5fZ2V0VGFiRnJvbUlubmVyQ29udHJvbChtYWNyb0FQSSk7XG5cdFx0XHRcdGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRpY29uVGFiRmlsdGVyICYmXG5cdFx0XHRcdFx0XHQoaWNvblRhYkZpbHRlci5nZXRLZXkoKSA9PT0gYGZlOjp0YWJsZTo6JHtrZXl9OjpMaW5lSXRlbWAgfHwgaWNvblRhYkZpbHRlci5nZXRLZXkoKSA9PT0gYGZlOjpDdXN0b21UYWI6OiR7a2V5fWApXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRtYWNyb0FQSS5pbnZhbGlkYXRlQ29udGVudD8uKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtYWNyb0FQSS5pbnZhbGlkYXRlQ29udGVudD8uKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgY291bnRzIHRvIFwib3V0IG9mIGRhdGVcIiBvciBcInVwIHRvIGRhdGVcIlxuXHQgKiBJZiB0aGUgY291bnRzIGFyZSBzZXQgdG8gXCJvdXQgb2YgZGF0ZVwiIGFuZCB0aGUgc2VsZWN0ZWQgSWNvblRhYkZpbHRlciBkb2Vzbid0IGNvbnRhaW4gYW4gaW5uZXIgY29udHJvbCwgYWxsIGlubmVyIGNvbnRyb2xzIGFyZSByZXF1ZXN0ZWQgdG8gZ2V0IHRoZSBuZXcgY291bnRzLlxuXHQgKiBAcGFyYW0gYlZhbHVlIEVpdGhlciBmcmVlemVzIHRoZSBjb250cm9sIG9yIG5vdFxuXHQgKi9cblx0c2V0Q291bnRzT3V0RGF0ZWQoYlZhbHVlID0gdHJ1ZSk6IHZvaWQge1xuXHRcdHRoaXMuc2V0UHJvcGVydHkoXCJjb3VudHNPdXREYXRlZFwiLCBiVmFsdWUpO1xuXHRcdC8vIGlmIHRoZSBjdXJyZW50IHRhYiBpcyBub3QgY29uZmlndXJlZCB3aXRoIG5vIGlubmVyIENvbnRyb2xcblx0XHQvLyB0aGUgdGFiIGNvdW50cyBtdXN0IGJlIG1hbnVhbGx5IHJlZnJlc2hlZCBzaW5jZSBubyBNYWNybyBBUEkgd2lsbCBzZW50IGV2ZW50IGludGVybmFsRGF0YVJlcXVlc3RlZFxuXHRcdGlmIChiVmFsdWUgJiYgIXRoaXMuZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2woKSkge1xuXHRcdFx0dGhpcy5pbnRlcm5hbFJlZnJlc2hUYWJzQ291bnQoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRnJlZXplcyB0aGUgY29udGVudCA6XG5cdCAqIC0gY29udGVudCBpcyBmcm96ZW46IHRoZSBiaW5kaW5nIG9mIHRoZSBpbm5lciBjb250cm9scyBhcmUgc3VzcGVuZGVkLlxuXHQgKiAtIGNvbnRlbnQgaXMgdW5mcm96ZW46IHRoZSBiaW5kaW5nIG9mIGlubmVyIGNvbnRyb2wgcmVsYXRlZCB0byB0aGUgc2VsZWN0ZWQgSWNvblRhYkZpbHRlciBpcyByZXN1bWVkLlxuXHQgKiBAcGFyYW0gYlZhbHVlIEZyZWV6ZSBvciBub3QgdGhlIGNvbnRyb2xcblx0ICovXG5cdHNldEZyZWV6ZUNvbnRlbnQoYlZhbHVlOiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcImZyZWV6ZUNvbnRlbnRcIiwgYlZhbHVlKTtcblx0XHR0aGlzLl9zZXRJbm5lckJpbmRpbmcoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBtb2RlbCB3aXRoIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5vdCBhcHBsaWNhYmxlIG9uIGVhY2ggSWNvblRhYkZpbHRlciAoY29udGFpbmluZyBpbm5lciBjb250cm9sKSBhY2NvcmRpbmcgdG8gdGhlIGVudGl0eVR5cGUgb2YgdGhlIGZpbHRlciBjb250cm9sLlxuXHQgKlxuXHQgKi9cblx0X3VwZGF0ZU11bHRpVGFiTm90QXBwbGljYWJsZUZpZWxkcygpOiB2b2lkIHtcblx0XHRjb25zdCB0YWJzTW9kZWwgPSB0aGlzLmdldFRhYnNNb2RlbCgpO1xuXHRcdGNvbnN0IG9GaWx0ZXJDb250cm9sID0gdGhpcy5fZ2V0RmlsdGVyQ29udHJvbCgpIGFzIENvbnRyb2w7XG5cdFx0aWYgKHRhYnNNb2RlbCAmJiBvRmlsdGVyQ29udHJvbCkge1xuXHRcdFx0Y29uc3QgcmVzdWx0czogUmVjb3JkPHN0cmluZywgeyBub3RBcHBsaWNhYmxlOiB7IGZpZWxkczogc3RyaW5nW107IHRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQgfSB9PiA9IHt9O1xuXHRcdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGhpcyk7XG5cdFx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKTtcblx0XHRcdGlmICghdmlld0RhdGEudXNlSGlkZGVuRmlsdGVyQmFyKSB7XG5cdFx0XHRcdHRoaXMuZ2V0QWxsSW5uZXJDb250cm9scygpLmZvckVhY2goKG9NYWNyb0FQSSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IG9UYWIgPSB0aGlzLl9nZXRUYWJGcm9tSW5uZXJDb250cm9sKG9NYWNyb0FQSSk7XG5cdFx0XHRcdFx0aWYgKG9UYWIpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNUYWJJZCA9IG9UYWIuZ2V0S2V5KCk7XG5cdFx0XHRcdFx0XHRjb25zdCBtSWdub3JlZEZpZWxkcyA9IG9NYWNyb0FQSS5yZWZyZXNoTm90QXBwbGljYWJsZUZpZWxkcz8uKG9GaWx0ZXJDb250cm9sKSB8fCBbXTtcblx0XHRcdFx0XHRcdHJlc3VsdHNbc1RhYklkXSA9IHtcblx0XHRcdFx0XHRcdFx0bm90QXBwbGljYWJsZToge1xuXHRcdFx0XHRcdFx0XHRcdGZpZWxkczogbUlnbm9yZWRGaWVsZHMsXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMuX3NldFRhYk1lc3NhZ2VTdHJpcCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRlbnRpdHlUeXBlUGF0aDogb0ZpbHRlckNvbnRyb2wuZGF0YShcImVudGl0eVR5cGVcIiksXG5cdFx0XHRcdFx0XHRcdFx0XHRpZ25vcmVkRmllbGRzOiBtSWdub3JlZEZpZWxkcyxcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBvVGFiLmdldFRleHQoKVxuXHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRpZiAob01hY3JvQVBJICYmIG9NYWNyb0FQSS5pc0EoXCJzYXAuZmUubWFjcm9zLkNoYXJ0XCIpKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3VsdHNbc1RhYklkXSA9IHRoaXMuY2hlY2tOb25GaWx0ZXJhYmxlRW50aXR5U2V0KG9NYWNyb0FQSSwgc1RhYklkLCByZXN1bHRzKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0YWJzTW9kZWwuc2V0RGF0YShyZXN1bHRzKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTW9kaWZpZXMgdGhlIG1lc3NhZ2VzdHJpcCBtZXNzYWdlIGJhc2VkIG9uIGVudGl0eSBzZXQgaXMgZmlsZXJhYmxlIG9yIG5vdC5cblx0ICogQHBhcmFtIG9NYWNyb0FQSSBNYWNybyBjaGFydCBhcGlcblx0ICogQHBhcmFtIHNUYWJJZCBUYWIga2V5IElEXG5cdCAqIEBwYXJhbSByZXN1bHRzIFNob3VsZCBjb250YWluIGZpZWxkcyBhbmQgdGl0bGVcblx0ICogQHJldHVybnMgQW4gb2JqZWN0IG9mIG1vZGlmaWVkIGZpZWxkcyBhbmQgdGl0bGVcblx0ICovXG5cdGNoZWNrTm9uRmlsdGVyYWJsZUVudGl0eVNldChcblx0XHRvTWFjcm9BUEk6IElubmVyQ29udHJvbFR5cGUsXG5cdFx0c1RhYklkOiBzdHJpbmcsXG5cdFx0cmVzdWx0czogUmVjb3JkPHN0cmluZywgeyBub3RBcHBsaWNhYmxlOiB7IGZpZWxkczogc3RyaW5nW107IHRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQgfSB9PlxuXHQpOiB7IG5vdEFwcGxpY2FibGU6IHsgZmllbGRzOiBzdHJpbmdbXTsgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCB9IH0ge1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKG9NYWNyb0FQSSk7XG5cdFx0Y29uc3Qgb0NoYXJ0ID0gb01hY3JvQVBJPy5nZXRDb250ZW50ID8gb01hY3JvQVBJLmdldENvbnRlbnQoKSA6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBiRW50aXR5U2V0RmlsZXJhYmxlID1cblx0XHRcdG9DaGFydCAmJlxuXHRcdFx0TWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxFbnRpdHlTZXQ+KFxuXHRcdFx0XHQob0NoYXJ0LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkuZ2V0Q29udGV4dChgJHtvQ2hhcnQuZGF0YShcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpfWApXG5cdFx0XHQpPy50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5DYXBhYmlsaXRpZXM/LkZpbHRlclJlc3RyaWN0aW9ucz8uRmlsdGVyYWJsZTtcblx0XHRpZiAoYkVudGl0eVNldEZpbGVyYWJsZSAhPT0gdW5kZWZpbmVkICYmICFiRW50aXR5U2V0RmlsZXJhYmxlKSB7XG5cdFx0XHRpZiAocmVzdWx0c1tzVGFiSWRdLm5vdEFwcGxpY2FibGUuZmllbGRzLmluY2x1ZGVzKFwiJHNlYXJjaFwiKSkge1xuXHRcdFx0XHRyZXN1bHRzW3NUYWJJZF0ubm90QXBwbGljYWJsZS50aXRsZSArPSBcIiBcIiArIHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfTFJfTVVMVElWSVpfQ0hBUlRfTVVMVElfTk9OX0ZJTFRFUkFCTEVcIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXN1bHRzW3NUYWJJZF0ubm90QXBwbGljYWJsZS5maWVsZHMgPSBbXCJub25GaWx0ZXJhYmxlXCJdO1xuXHRcdFx0XHRyZXN1bHRzW3NUYWJJZF0ubm90QXBwbGljYWJsZS50aXRsZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfTFJfTVVMVElWSVpfQ0hBUlRfTVVMVElfTk9OX0ZJTFRFUkFCTEVcIik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRzW3NUYWJJZF07XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgaW5uZXIgY29udHJvbHMuXG5cdCAqIEBwYXJhbSBiT25seUZvclZpc2libGVUYWIgU2hvdWxkIGRpc3BsYXkgb25seSB0aGUgdmlzaWJsZSBjb250cm9sc1xuXHQgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBjb250cm9sc1xuXHQgKi9cblx0Z2V0QWxsSW5uZXJDb250cm9scyhiT25seUZvclZpc2libGVUYWIgPSBmYWxzZSk6IElubmVyQ29udHJvbFR5cGVbXSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdHRoaXMuaW5uZXJDb250cm9scy5yZWR1Y2UoKGFJbm5lckNvbnRyb2xzOiBJbm5lckNvbnRyb2xUeXBlW10sIHNJbm5lckNvbnRyb2w6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRjb25zdCBvQ29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoc0lubmVyQ29udHJvbCkgYXMgSW5uZXJDb250cm9sVHlwZTtcblx0XHRcdFx0aWYgKG9Db250cm9sKSB7XG5cdFx0XHRcdFx0YUlubmVyQ29udHJvbHMucHVzaChvQ29udHJvbCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGFJbm5lckNvbnRyb2xzLmZpbHRlcihcblx0XHRcdFx0XHQob0lubmVyQ29udHJvbCkgPT4gIWJPbmx5Rm9yVmlzaWJsZVRhYiB8fCB0aGlzLl9nZXRUYWJGcm9tSW5uZXJDb250cm9sKG9Jbm5lckNvbnRyb2wpPy5nZXRWaXNpYmxlKClcblx0XHRcdFx0KTtcblx0XHRcdH0sIFtdKSB8fCBbXVxuXHRcdCk7XG5cdH1cblxuXHRfZ2V0RmlsdGVyQ29udHJvbCgpOiBGaWx0ZXJCYXIgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZmlsdGVyQ29udHJvbCkgYXMgRmlsdGVyQmFyIHwgdW5kZWZpbmVkO1xuXHR9XG5cblx0X2dldFRhYkZyb21Jbm5lckNvbnRyb2wob0NvbnRyb2w6IENvbnRyb2wpOiBJY29uVGFiRmlsdGVyIHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgb1RhYjogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCA9IG9Db250cm9sO1xuXHRcdGlmIChvVGFiICYmICFvVGFiLmlzQTxJY29uVGFiRmlsdGVyPihcInNhcC5tLkljb25UYWJGaWx0ZXJcIikgJiYgKG9UYWIgYXMgeyBnZXRQYXJlbnQ/OiBGdW5jdGlvbiB9KS5nZXRQYXJlbnQpIHtcblx0XHRcdG9UYWIgPSBvQ29udHJvbC5nZXRQYXJlbnQoKSBhcyBVSTVFbGVtZW50IHwgdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gb1RhYiAmJiBvVGFiLmlzQTxJY29uVGFiRmlsdGVyPihcInNhcC5tLkljb25UYWJGaWx0ZXJcIikgPyBvVGFiIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0X2dldFZpZXdDb250cm9sbGVyKCk6IFBhZ2VDb250cm9sbGVyIHtcblx0XHRjb25zdCBvVmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGhpcyk7XG5cdFx0cmV0dXJuIG9WaWV3ICYmIG9WaWV3LmdldENvbnRyb2xsZXIoKTtcblx0fVxuXG5cdF9yZWZyZXNoQ3VzdG9tVmlldyhvRmlsdGVyQ29uZGl0aW9uczogdW5rbm93biwgc1JlZnJlc2hDYXVzZTogc3RyaW5nKTogdm9pZCB7XG5cdFx0KHRoaXMuX2dldFZpZXdDb250cm9sbGVyKCkgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIpPy5vblZpZXdOZWVkc1JlZnJlc2g/Lih7XG5cdFx0XHRmaWx0ZXJDb25kaXRpb25zOiBvRmlsdGVyQ29uZGl0aW9ucyxcblx0XHRcdGN1cnJlbnRUYWJJZDogdGhpcy5jb250ZW50LmdldFNlbGVjdGVkS2V5KCksXG5cdFx0XHRyZWZyZXNoQ2F1c2U6IHNSZWZyZXNoQ2F1c2Vcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGNvdW50IG9mIHRoZSBUYWIgY29udGFpbmluZyB0aGUgbWFjcm8gcGFzc2VkIGFzIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIG1hY3JvQVBJIFRoZSBjb250ZW50IG9mIHRoZSB0YWIgd2Ugd2FudCB0byByZWZyZXNoXG5cdCAqL1xuXHRhc3luYyByZWZyZXNoVGFiQ291bnQobWFjcm9BUEk6IElubmVyQ29udHJvbFR5cGUpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBpY29uVGFiRmlsdGVyID0gdGhpcy5fZ2V0VGFiRnJvbUlubmVyQ29udHJvbChtYWNyb0FQSSk7XG5cdFx0aWYgKCFpY29uVGFiRmlsdGVyKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChtYWNyb0FQST8uZ2V0Q291bnRzKSB7XG5cdFx0XHRpY29uVGFiRmlsdGVyLnNldENvdW50KFwiLi4uXCIpO1xuXHRcdFx0YXdhaXQgdGhpcy5fZ2V0Vmlld0NvbnRyb2xsZXIoKS5lZGl0Rmxvdy5zeW5jVGFzaygpOyAvLyBlbnN1cmUgYWxsIHBlbmRpbmcgY2hhbmdlcyBhcmUgZG9uZSBiZWZvcmUgcmVmcmVzaGluZyBjb3VudHNcblx0XHRcdG1hY3JvQVBJXG5cdFx0XHRcdC5nZXRDb3VudHMoKVxuXHRcdFx0XHQudGhlbigoY291bnQ6IHN0cmluZyk6IEljb25UYWJGaWx0ZXIgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBpY29uVGFiRmlsdGVyLnNldENvdW50KGNvdW50IHx8IFwiMFwiKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnJvcjogdW5rbm93bik6IHZvaWQge1xuXHRcdFx0XHRcdExvZy5lcnJvcihgRXJyb3Igd2hpbGUgcmVxdWVzdGluZyBDb3VudHMgZm9yIENvbnRyb2w6ICR7ZXJyb3J9YCk7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGludGVybmFsUmVmcmVzaFRhYnNDb3VudCh0YWJsZUV2ZW50PzogQ29yZUV2ZW50KTogdm9pZCB7XG5cdFx0Ly8gSWYgdGhlIHJlZnJlc2ggaXMgdHJpZ2dlcmVkIGJ5IGFuIGV2ZW50IChpbnRlcm5hbERhdGFSZXF1ZXN0ZWQpXG5cdFx0Ly8gd2UgY2Fubm90IHVzZSB0aGUgc2VsZWN0ZWQga2V5IGFzIHJlZmVyZW5jZSBzaW5jZSB0YWJsZSBjYW4gYmUgcmVmcmVzaGVkIGJ5IFNpZGVFZmZlY3RzXG5cdFx0Ly8gc28gdGhlIHRhYmxlIGNvdWxkIGJlIGludG8gYSBkaWZmZXJlbnQgdGFiIC0+IHdlIHVzZSB0aGUgc291cmNlIG9mIHRoZSBldmVudCB0byBmaW5kIHRoZSB0YXJnZXRlZCB0YWJcblx0XHQvLyBJZiBub3QgdHJpZ2dlcmVkIGJ5IGFuIGV2ZW50IC0+IHJlZnJlc2ggYXQgbGVhc3QgdGhlIGNvdW50cyBvZiB0aGUgY3VycmVudCBNYWNyb0FQSVxuXHRcdGNvbnN0IGV2ZW50TWFjcm9BUEkgPSB0YWJsZUV2ZW50Py5nZXRTb3VyY2UoKSBhcyBNYWNyb0FQSTtcblx0XHRjb25zdCB0YXJnZXRLZXkgPSBldmVudE1hY3JvQVBJID8gdGhpcy5fZ2V0VGFiRnJvbUlubmVyQ29udHJvbChldmVudE1hY3JvQVBJKT8uZ2V0S2V5KCkgOiB0aGlzLmNvbnRlbnQ/LmdldFNlbGVjdGVkS2V5KCk7XG5cdFx0aWYgKHR5cGVvZiB0YXJnZXRLZXkgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdGlmICh0YXJnZXRLZXkgPT09IFwiXCIpIHtcblx0XHRcdFx0Y29uc3QgdGFiS2V5cyA9IHRoaXMuY29udGVudD8uZ2V0SXRlbXMoKS5tYXAoKHRhYikgPT4gKHRhYiBhcyBJY29uVGFiRmlsdGVyKS5nZXRLZXkoKS5zcGxpdChcIjo6XCIpWzJdKSA/PyBbXTtcblx0XHRcdFx0dGhpcy5yZWZyZXNoVGFic0NvdW50KHRhYktleXMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5yZWZyZXNoVGFic0NvdW50KFt0YXJnZXRLZXkuc3BsaXQoXCI6OlwiKVsyXV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZWZyZXNoZXMgdGhlIGNvdW50IG9mIHRoZSB2aWV3cyBpbiB0aGUgTXVsdGlNb2RlIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBba2V5c10gVGhlIGxpc3Qgb2YgdGhlIGtleXMgaWRlbnRpZnlpbmcgdGhlIHZpZXdzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IGZvciB3aGljaCB0aGUgdmlld3MnIGNvdW50IHdpbGwgYmUgcmVmcmVzaGVkLiBJZiBub3QgcHJvdmlkZWQsIGFsbCB0aGUgdmlld3MnIGNvdW50IHdpbGwgYmUgcmVmcmVzaGVkXG5cdCAqL1xuXHRyZWZyZXNoVGFic0NvdW50KGtleXM/OiBzdHJpbmdbXSk6IHZvaWQge1xuXHRcdGlmICgha2V5cykge1xuXHRcdFx0dGhpcy5zZXRDb3VudHNPdXREYXRlZCh0cnVlKTtcblx0XHR9XG5cdFx0dGhpcy5nZXRBbGxJbm5lckNvbnRyb2xzKHRydWUpLmZvckVhY2goKG9NYWNyb0FQSSk6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3Qgb0ljb25UYWJGaWx0ZXIgPSB0aGlzLl9nZXRUYWJGcm9tSW5uZXJDb250cm9sKG9NYWNyb0FQSSk7XG5cdFx0XHRpZiAodGhpcy5jb3VudHNPdXREYXRlZCB8fCAoa2V5cyAmJiBvSWNvblRhYkZpbHRlciAmJiBrZXlzLmluY2x1ZGVzKG9JY29uVGFiRmlsdGVyLmdldEtleSgpLnNwbGl0KFwiOjpcIilbMl0pKSkge1xuXHRcdFx0XHR0aGlzLnJlZnJlc2hUYWJDb3VudChvTWFjcm9BUEkpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHRoaXMuc2V0Q291bnRzT3V0RGF0ZWQoZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZnJlc2hlcyB0aGUgY29udGVudCBvZiB0aGUgdW5kZXJseWluZyB2aWV3cyB1cG9uIHRoZSBuZXh0IG9wZW5pbmcuXG5cdCAqIE5vdGU6IFRoZSBjb250ZW50IG9mIHRoZSBzZWxlY3RlZCB2aWV3LCBpZiBwYXJ0IG9mIHRoZSBwcm92aWRlZCBrZXlzLCB3aWxsIGJlIHJlZnJlc2hlZCBpbW1lZGlhdGVseS5cblx0ICogQHBhcmFtIFtrZXlzXSBUaGUgbGlzdCBvZiB0aGUga2V5cyBpZGVudGlmeWluZyB0aGUgdmlld3MgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgZm9yIHdoaWNoIHRoZSB2aWV3cycgY29udGVudCB3aWxsIGJlIHJlZnJlc2hlZC4gSWYgbm90IHByb3ZpZGVkLCBhbGwgdGhlIHZpZXdzJyBjb250ZW50IHdpbGwgYmUgcmVmcmVzaGVkXG5cdCAqL1xuXHRzZXRUYWJDb250ZW50VG9CZVJlZnJlc2hlZE9uTmV4dE9wZW5pbmcoa2V5cz86IHN0cmluZ1tdKTogdm9pZCB7XG5cdFx0Y29uc3Qgc2VsZWN0ZWRUYWJLZXkgPSB0aGlzPy5jb250ZW50LmdldFNlbGVjdGVkS2V5KCk7XG5cdFx0Y29uc3QgdGFiS2V5czogc3RyaW5nW10gPSBbXTtcblx0XHRjb25zdCByZWZyZXNoU2VsZWN0ZWRUYWJDb250ZW50ID0ga2V5cyA/IGtleXMuaW5jbHVkZXMoc2VsZWN0ZWRUYWJLZXk/LnNwbGl0KFwiOjpcIilbMl0pIDogdHJ1ZTtcblx0XHRpZiAoa2V5cykge1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdFx0XHRpZiAoc2VsZWN0ZWRUYWJLZXkgIT09IGBmZTo6dGFibGU6OiR7a2V5fTo6TGluZUl0ZW1gICYmIHNlbGVjdGVkVGFiS2V5ICE9PSBgZmU6OkN1c3RvbVRhYjo6JHtrZXl9YCkge1xuXHRcdFx0XHRcdHRhYktleXMucHVzaChrZXkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXM/LmdldEFsbElubmVyQ29udHJvbHMoKS5mb3JFYWNoKChtYWNyb0FQSSkgPT4ge1xuXHRcdFx0XHRjb25zdCBpY29uVGFiRmlsdGVyID0gdGhpcz8uX2dldFRhYkZyb21Jbm5lckNvbnRyb2wobWFjcm9BUEkpO1xuXHRcdFx0XHRpZiAoaWNvblRhYkZpbHRlciAmJiBpY29uVGFiRmlsdGVyLmdldEtleSgpICE9PSBzZWxlY3RlZFRhYktleSkge1xuXHRcdFx0XHRcdHRhYktleXMucHVzaChpY29uVGFiRmlsdGVyLmdldEtleSgpLnNwbGl0KFwiOjpcIilbMl0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0dGhpcz8uaW52YWxpZGF0ZUNvbnRlbnQodGFiS2V5cyk7XG5cdFx0aWYgKHJlZnJlc2hTZWxlY3RlZFRhYkNvbnRlbnQpIHtcblx0XHRcdHRoaXM/LnJlZnJlc2hTZWxlY3RlZElubmVyQ29udHJvbENvbnRlbnQoKTtcblx0XHR9XG5cdH1cblxuXHRfc2V0SW5uZXJCaW5kaW5nKGJSZXF1ZXN0SWZOb3RJbml0aWFsaXplZCA9IGZhbHNlKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuY29udGVudCkge1xuXHRcdFx0dGhpcy5nZXRBbGxJbm5lckNvbnRyb2xzKCkuZm9yRWFjaCgob01hY3JvQVBJKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9JY29uVGFiRmlsdGVyID0gdGhpcy5fZ2V0VGFiRnJvbUlubmVyQ29udHJvbChvTWFjcm9BUEkpO1xuXHRcdFx0XHRjb25zdCBiSXNTZWxlY3RlZEtleSA9IG9JY29uVGFiRmlsdGVyPy5nZXRLZXkoKSA9PT0gdGhpcy5jb250ZW50LmdldFNlbGVjdGVkS2V5KCk7XG5cdFx0XHRcdGNvbnN0IHNBY3Rpb24gPSBiSXNTZWxlY3RlZEtleSAmJiAhdGhpcy5nZXRQcm9wZXJ0eShcImZyZWV6ZUNvbnRlbnRcIikgPyBCaW5kaW5nQWN0aW9uLlJlc3VtZSA6IEJpbmRpbmdBY3Rpb24uU3VzcGVuZDtcblx0XHRcdFx0b01hY3JvQVBJW3NBY3Rpb25dPy4oc0FjdGlvbiA9PT0gQmluZGluZ0FjdGlvbi5SZXN1bWUgPyBiUmVxdWVzdElmTm90SW5pdGlhbGl6ZWQgJiYgYklzU2VsZWN0ZWRLZXkgOiB1bmRlZmluZWQpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0X3NldFRhYk1lc3NhZ2VTdHJpcChwcm9wZXJ0aWVzOiBNZXNzYWdlU3RyaXBQcm9wZXJ0aWVzKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgc1RleHQgPSBcIlwiO1xuXHRcdGNvbnN0IGFJZ25vcmVkRmllbGRzID0gcHJvcGVydGllcy5pZ25vcmVkRmllbGRzO1xuXHRcdGNvbnN0IG9GaWx0ZXJDb250cm9sID0gdGhpcy5fZ2V0RmlsdGVyQ29udHJvbCgpIGFzIENvbnRyb2w7XG5cdFx0aWYgKG9GaWx0ZXJDb250cm9sICYmIEFycmF5LmlzQXJyYXkoYUlnbm9yZWRGaWVsZHMpICYmIGFJZ25vcmVkRmllbGRzLmxlbmd0aCA+IDAgJiYgcHJvcGVydGllcy50aXRsZSkge1xuXHRcdFx0Y29uc3QgYUlnbm9yZWRMYWJlbHMgPSBNZXNzYWdlU3RyaXAuZ2V0TGFiZWxzKFxuXHRcdFx0XHRhSWdub3JlZEZpZWxkcyxcblx0XHRcdFx0cHJvcGVydGllcy5lbnRpdHlUeXBlUGF0aCxcblx0XHRcdFx0b0ZpbHRlckNvbnRyb2wsXG5cdFx0XHRcdGdldFJlc291cmNlTW9kZWwob0ZpbHRlckNvbnRyb2wpXG5cdFx0XHQpO1xuXHRcdFx0c1RleHQgPSBNZXNzYWdlU3RyaXAuZ2V0VGV4dChhSWdub3JlZExhYmVscywgb0ZpbHRlckNvbnRyb2wsIHByb3BlcnRpZXMudGl0bGUpO1xuXHRcdFx0cmV0dXJuIHNUZXh0O1xuXHRcdH1cblx0fVxuXG5cdF9vblNlYXJjaChvRXZlbnQ6IENvcmVFdmVudDx7IGNvbmRpdGlvbnM6IHVua25vd24gfT4pOiB2b2lkIHtcblx0XHR0aGlzLnNldENvdW50c091dERhdGVkKHRydWUpO1xuXHRcdHRoaXMuc2V0RnJlZXplQ29udGVudChmYWxzZSk7XG5cdFx0aWYgKHRoaXMuZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2woKSkge1xuXHRcdFx0dGhpcy5fdXBkYXRlTXVsdGlUYWJOb3RBcHBsaWNhYmxlRmllbGRzKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGN1c3RvbSB0YWJcblx0XHRcdHRoaXMuX3JlZnJlc2hDdXN0b21WaWV3KG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJjb25kaXRpb25zXCIpLCBcInNlYXJjaFwiKTtcblx0XHR9XG5cdH1cblxuXHRfb25GaWx0ZXJDaGFuZ2VkKG9FdmVudDogQ29yZUV2ZW50PHsgY29uZGl0aW9uc0Jhc2VkOiBib29sZWFuIH0+KTogdm9pZCB7XG5cdFx0aWYgKG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJjb25kaXRpb25zQmFzZWRcIikpIHtcblx0XHRcdHRoaXMuc2V0RnJlZXplQ29udGVudCh0cnVlKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTXVsdGlwbGVNb2RlQ29udHJvbDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BdUNLQSxhQUFhLDBCQUFiQSxhQUFhO0lBQWJBLGFBQWE7SUFBYkEsYUFBYTtJQUFBLE9B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
@@ -387,13 +387,14 @@ class MultipleModeControl extends Control {
387
387
  * Get the count of the Tab containing the macro passed as parameter.
388
388
  * @param macroAPI The content of the tab we want to refresh
389
389
  */
390
- refreshTabCount(macroAPI: InnerControlType): void {
390
+ async refreshTabCount(macroAPI: InnerControlType): Promise<void> {
391
391
  const iconTabFilter = this._getTabFromInnerControl(macroAPI);
392
392
  if (!iconTabFilter) {
393
393
  return;
394
394
  }
395
395
  if (macroAPI?.getCounts) {
396
396
  iconTabFilter.setCount("...");
397
+ await this._getViewController().editFlow.syncTask(); // ensure all pending changes are done before refreshing counts
397
398
  macroAPI
398
399
  .getCounts()
399
400
  .then((count: string): IconTabFilter => {
@@ -1,11 +1,11 @@
1
1
  {
2
- "_version": "1.14.0",
2
+ "_version": "2.0.0",
3
3
  "sap.app": {
4
4
  "id": "sap.fe.templates.ListReport",
5
5
  "type": "component",
6
6
  "i18n": "../messagebundle.properties",
7
7
  "applicationVersion": {
8
- "version": "1.141.2"
8
+ "version": "1.143.0"
9
9
  },
10
10
  "title": "List Report",
11
11
  "tags": {
@@ -0,0 +1,25 @@
1
+ /*!
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
+ */
5
+ sap.ui.define(["sap/fe/core/CommonUtils"], function (CommonUtils) {
6
+ "use strict";
7
+
8
+ // import type NavContainer from "sap/m/NavContainer";
9
+
10
+ const MessageHandlerLRExtension = {
11
+ getShowBoundMessagesInMessageDialog: function () {
12
+ // For List Report, determines whether bound messages should be shown in a dialog or not
13
+ const appComponent = this.base.getAppComponent();
14
+ const getCurrentPageView = CommonUtils.getCurrentPageView(appComponent);
15
+ const currentPageViewID = getCurrentPageView?.getId();
16
+ const baseViewID = this.base.getView()?.getId();
17
+ if (currentPageViewID !== baseViewID) {
18
+ return false;
19
+ }
20
+ return true;
21
+ }
22
+ };
23
+ return MessageHandlerLRExtension;
24
+ }, false);
25
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlSGFuZGxlckxSRXh0ZW5zaW9uIiwiZ2V0U2hvd0JvdW5kTWVzc2FnZXNJbk1lc3NhZ2VEaWFsb2ciLCJhcHBDb21wb25lbnQiLCJiYXNlIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0Q3VycmVudFBhZ2VWaWV3IiwiQ29tbW9uVXRpbHMiLCJjdXJyZW50UGFnZVZpZXdJRCIsImdldElkIiwiYmFzZVZpZXdJRCIsImdldFZpZXciXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk1lc3NhZ2VIYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuLy8gaW1wb3J0IHR5cGUgTmF2Q29udGFpbmVyIGZyb20gXCJzYXAvbS9OYXZDb250YWluZXJcIjtcblxuY29uc3QgTWVzc2FnZUhhbmRsZXJMUkV4dGVuc2lvbiA9IHtcblx0Z2V0U2hvd0JvdW5kTWVzc2FnZXNJbk1lc3NhZ2VEaWFsb2c6IGZ1bmN0aW9uICh0aGlzOiBNZXNzYWdlSGFuZGxlcik6IGJvb2xlYW4ge1xuXHRcdC8vIEZvciBMaXN0IFJlcG9ydCwgZGV0ZXJtaW5lcyB3aGV0aGVyIGJvdW5kIG1lc3NhZ2VzIHNob3VsZCBiZSBzaG93biBpbiBhIGRpYWxvZyBvciBub3Rcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0Y29uc3QgZ2V0Q3VycmVudFBhZ2VWaWV3ID0gQ29tbW9uVXRpbHMuZ2V0Q3VycmVudFBhZ2VWaWV3KGFwcENvbXBvbmVudCk7XG5cdFx0Y29uc3QgY3VycmVudFBhZ2VWaWV3SUQgPSBnZXRDdXJyZW50UGFnZVZpZXc/LmdldElkKCk7XG5cdFx0Y29uc3QgYmFzZVZpZXdJRCA9IHRoaXMuYmFzZS5nZXRWaWV3KCk/LmdldElkKCk7XG5cblx0XHRpZiAoY3VycmVudFBhZ2VWaWV3SUQgIT09IGJhc2VWaWV3SUQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IE1lc3NhZ2VIYW5kbGVyTFJFeHRlbnNpb247XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7RUFFQTs7RUFFQSxNQUFNQSx5QkFBeUIsR0FBRztJQUNqQ0MsbUNBQW1DLEVBQUUsU0FBQUEsQ0FBQSxFQUF5QztNQUM3RTtNQUNBLE1BQU1DLFlBQVksR0FBRyxJQUFJLENBQUNDLElBQUksQ0FBQ0MsZUFBZSxDQUFDLENBQUM7TUFDaEQsTUFBTUMsa0JBQWtCLEdBQUdDLFdBQVcsQ0FBQ0Qsa0JBQWtCLENBQUNILFlBQVksQ0FBQztNQUN2RSxNQUFNSyxpQkFBaUIsR0FBR0Ysa0JBQWtCLEVBQUVHLEtBQUssQ0FBQyxDQUFDO01BQ3JELE1BQU1DLFVBQVUsR0FBRyxJQUFJLENBQUNOLElBQUksQ0FBQ08sT0FBTyxDQUFDLENBQUMsRUFBRUYsS0FBSyxDQUFDLENBQUM7TUFFL0MsSUFBSUQsaUJBQWlCLEtBQUtFLFVBQVUsRUFBRTtRQUNyQyxPQUFPLEtBQUs7TUFDYjtNQUNBLE9BQU8sSUFBSTtJQUNaO0VBQ0QsQ0FBQztFQUFDLE9BRWFULHlCQUF5QjtBQUFBIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,20 @@
1
+ import CommonUtils from "sap/fe/core/CommonUtils";
2
+ import type MessageHandler from "sap/fe/core/controllerextensions/MessageHandler";
3
+ // import type NavContainer from "sap/m/NavContainer";
4
+
5
+ const MessageHandlerLRExtension = {
6
+ getShowBoundMessagesInMessageDialog: function (this: MessageHandler): boolean {
7
+ // For List Report, determines whether bound messages should be shown in a dialog or not
8
+ const appComponent = this.base.getAppComponent();
9
+ const getCurrentPageView = CommonUtils.getCurrentPageView(appComponent);
10
+ const currentPageViewID = getCurrentPageView?.getId();
11
+ const baseViewID = this.base.getView()?.getId();
12
+
13
+ if (currentPageViewID !== baseViewID) {
14
+ return false;
15
+ }
16
+ return true;
17
+ }
18
+ };
19
+
20
+ export default MessageHandlerLRExtension;