@sapui5/sap.fe.templates 1.143.0 → 1.145.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 (113) 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 +1 -1
  4. package/src/sap/fe/templates/ListReport/Component.js +2 -2
  5. package/src/sap/fe/templates/ListReport/Component.ts +2 -2
  6. package/src/sap/fe/templates/ListReport/ExtensionAPI.js +1 -1
  7. package/src/sap/fe/templates/ListReport/ExtensionAPI.ts +1 -1
  8. package/src/sap/fe/templates/ListReport/LRMessageStrip.js +2 -2
  9. package/src/sap/fe/templates/ListReport/LRMessageStrip.ts +2 -2
  10. package/src/sap/fe/templates/ListReport/ListReport.view.xml +1 -1
  11. package/src/sap/fe/templates/ListReport/ListReportController.controller.js +19 -34
  12. package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +19 -33
  13. package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js +22 -19
  14. package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.ts +23 -20
  15. package/src/sap/fe/templates/ListReport/manifest.json +1 -1
  16. package/src/sap/fe/templates/ListReport/overrides/MessageHandler.js +5 -2
  17. package/src/sap/fe/templates/ListReport/overrides/MessageHandler.ts +4 -2
  18. package/src/sap/fe/templates/ListReport/overrides/Share.js +1 -1
  19. package/src/sap/fe/templates/ListReport/overrides/Share.ts +1 -1
  20. package/src/sap/fe/templates/ListReport/overrides/ViewState.js +2 -3
  21. package/src/sap/fe/templates/ListReport/overrides/ViewState.ts +1 -2
  22. package/src/sap/fe/templates/ListReport/view/fragments/CollectionVisualization.fragment.xml +32 -0
  23. package/src/sap/fe/templates/ListReport/view/fragments/MacroChart.fragment.xml +1 -0
  24. package/src/sap/fe/templates/ListReport/view/fragments/Table.fragment.xml +8 -6
  25. package/src/sap/fe/templates/ObjectPage/Component.js +33 -23
  26. package/src/sap/fe/templates/ObjectPage/Component.ts +34 -25
  27. package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +74 -3
  28. package/src/sap/fe/templates/ObjectPage/ExtensionAPI.ts +84 -4
  29. package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +4 -1
  30. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +149 -70
  31. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +173 -93
  32. package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +2 -71
  33. package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +0 -74
  34. package/src/sap/fe/templates/ObjectPage/card/actions/HeaderActions.js +6 -7
  35. package/src/sap/fe/templates/ObjectPage/card/actions/HeaderActions.ts +5 -6
  36. package/src/sap/fe/templates/ObjectPage/components/DraftToggle.js +107 -34
  37. package/src/sap/fe/templates/ObjectPage/components/DraftToggle.tsx +117 -42
  38. package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js +36 -30
  39. package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.ts +31 -26
  40. package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.js +10 -1
  41. package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.ts +15 -0
  42. package/src/sap/fe/templates/ObjectPage/designtime/ObjectPage.designtime.helper.js +22 -3
  43. package/src/sap/fe/templates/ObjectPage/designtime/ObjectPage.designtime.helper.ts +30 -1
  44. package/src/sap/fe/templates/ObjectPage/designtime/ObjectPage.designtime.js +5 -2
  45. package/src/sap/fe/templates/ObjectPage/designtime/ObjectPage.designtime.ts +7 -0
  46. package/src/sap/fe/templates/ObjectPage/manifest.json +6 -1
  47. package/src/sap/fe/templates/ObjectPage/overrides/CollaborationManager.js +2 -1
  48. package/src/sap/fe/templates/ObjectPage/overrides/CollaborationManager.ts +1 -0
  49. package/src/sap/fe/templates/ObjectPage/view/fragments/ExpandedHeading.fragment.xml +45 -7
  50. package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderContent.fragment.xml +9 -14
  51. package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacet.fragment.xml +1 -0
  52. package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacetCustomContainer.fragment.xml +1 -0
  53. package/src/sap/fe/templates/ObjectPage/view/fragments/Heading.fragment.xml +36 -6
  54. package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderAddress.fragment.xml +1 -1
  55. package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderContact.fragment.xml +1 -1
  56. package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderForm.fragment.xml +0 -1
  57. package/src/sap/fe/templates/ObjectPage/view/fragments/Section.fragment.xml +1 -0
  58. package/src/sap/fe/templates/ObjectPage/view/fragments/SectionContent.fragment.xml +86 -43
  59. package/src/sap/fe/templates/ObjectPage/view/fragments/SectionCustomSection.fragment.xml +6 -1
  60. package/src/sap/fe/templates/ObjectPage/view/fragments/SectionFormContent.fragment.xml +4 -3
  61. package/src/sap/fe/templates/ObjectPage/view/fragments/SectionMoreFormContent.fragment.xml +4 -3
  62. package/src/sap/fe/templates/ObjectPage/view/fragments/Table.fragment.xml +9 -7
  63. package/src/sap/fe/templates/library.js +1 -1
  64. package/src/sap/fe/templates/messagebundle.properties +21 -0
  65. package/src/sap/fe/templates/messagebundle_ar.properties +15 -1
  66. package/src/sap/fe/templates/messagebundle_bg.properties +14 -0
  67. package/src/sap/fe/templates/messagebundle_ca.properties +14 -0
  68. package/src/sap/fe/templates/messagebundle_cnr.properties +15 -1
  69. package/src/sap/fe/templates/messagebundle_cs.properties +14 -0
  70. package/src/sap/fe/templates/messagebundle_cy.properties +14 -0
  71. package/src/sap/fe/templates/messagebundle_da.properties +14 -0
  72. package/src/sap/fe/templates/messagebundle_de.properties +14 -0
  73. package/src/sap/fe/templates/messagebundle_el.properties +14 -0
  74. package/src/sap/fe/templates/messagebundle_en.properties +14 -0
  75. package/src/sap/fe/templates/messagebundle_en_GB.properties +14 -0
  76. package/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +14 -0
  77. package/src/sap/fe/templates/messagebundle_es.properties +14 -0
  78. package/src/sap/fe/templates/messagebundle_es_MX.properties +14 -0
  79. package/src/sap/fe/templates/messagebundle_et.properties +14 -0
  80. package/src/sap/fe/templates/messagebundle_fi.properties +14 -0
  81. package/src/sap/fe/templates/messagebundle_fr.properties +14 -0
  82. package/src/sap/fe/templates/messagebundle_fr_CA.properties +17 -3
  83. package/src/sap/fe/templates/messagebundle_hi.properties +14 -0
  84. package/src/sap/fe/templates/messagebundle_hr.properties +14 -0
  85. package/src/sap/fe/templates/messagebundle_hu.properties +14 -0
  86. package/src/sap/fe/templates/messagebundle_id.properties +14 -0
  87. package/src/sap/fe/templates/messagebundle_it.properties +15 -1
  88. package/src/sap/fe/templates/messagebundle_iw.properties +15 -1
  89. package/src/sap/fe/templates/messagebundle_ja.properties +15 -1
  90. package/src/sap/fe/templates/messagebundle_kk.properties +14 -0
  91. package/src/sap/fe/templates/messagebundle_ko.properties +15 -1
  92. package/src/sap/fe/templates/messagebundle_lt.properties +16 -2
  93. package/src/sap/fe/templates/messagebundle_lv.properties +14 -0
  94. package/src/sap/fe/templates/messagebundle_mk.properties +14 -0
  95. package/src/sap/fe/templates/messagebundle_ms.properties +14 -0
  96. package/src/sap/fe/templates/messagebundle_nl.properties +14 -0
  97. package/src/sap/fe/templates/messagebundle_no.properties +14 -0
  98. package/src/sap/fe/templates/messagebundle_pl.properties +14 -0
  99. package/src/sap/fe/templates/messagebundle_pt.properties +14 -0
  100. package/src/sap/fe/templates/messagebundle_pt_PT.properties +14 -0
  101. package/src/sap/fe/templates/messagebundle_ro.properties +14 -0
  102. package/src/sap/fe/templates/messagebundle_ru.properties +14 -0
  103. package/src/sap/fe/templates/messagebundle_sh.properties +15 -1
  104. package/src/sap/fe/templates/messagebundle_sk.properties +14 -0
  105. package/src/sap/fe/templates/messagebundle_sl.properties +17 -3
  106. package/src/sap/fe/templates/messagebundle_sr.properties +15 -1
  107. package/src/sap/fe/templates/messagebundle_sv.properties +14 -0
  108. package/src/sap/fe/templates/messagebundle_th.properties +14 -0
  109. package/src/sap/fe/templates/messagebundle_tr.properties +14 -0
  110. package/src/sap/fe/templates/messagebundle_uk.properties +14 -0
  111. package/src/sap/fe/templates/messagebundle_vi.properties +16 -2
  112. package/src/sap/fe/templates/messagebundle_zh_CN.properties +14 -0
  113. package/src/sap/fe/templates/messagebundle_zh_TW.properties +14 -0
@@ -20,19 +20,19 @@ import MessageStrip from "sap/fe/core/helpers/MessageStrip";
20
20
  import type { InternalModelContext } from "sap/fe/core/helpers/ModelHelper";
21
21
  import { getResourceModel } from "sap/fe/core/helpers/ResourceModelHelper";
22
22
  import * as StableIdHelper from "sap/fe/core/helpers/StableIdHelper";
23
- import { generate } from "sap/fe/core/helpers/StableIdHelper";
24
23
  import CoreLibrary from "sap/fe/core/library";
25
24
  import type { TitleInformation } from "sap/fe/core/rootView/RootViewBaseController";
26
25
  import type Breadcrumbs from "sap/fe/macros/Breadcrumbs";
27
26
  import type ChartType from "sap/fe/macros/Chart";
28
27
  import type MacroAPI from "sap/fe/macros/MacroAPI";
28
+ import type MessageButton from "sap/fe/macros/MessageButton";
29
+ import type TableAPI from "sap/fe/macros/Table";
29
30
  import type ChartDelegate from "sap/fe/macros/chart/ChartDelegate";
30
31
  import ChartUtils from "sap/fe/macros/chart/ChartUtils";
31
32
  import type ContentSwitcher from "sap/fe/macros/contentSwitcher/ContentSwitcher";
32
33
  import type FilterBar from "sap/fe/macros/controls/FilterBar";
33
34
  import FilterUtils from "sap/fe/macros/filter/FilterUtils";
34
35
  import type FilterBarAPI from "sap/fe/macros/filterBar/FilterBarAPI";
35
- import type TableAPI from "sap/fe/macros/table/TableAPI";
36
36
  import SelectionVariant from "sap/fe/navigation/SelectionVariant";
37
37
  import ExtensionAPI from "sap/fe/templates/ListReport/ExtensionAPI";
38
38
  import type MultipleModeControl from "sap/fe/templates/ListReport/controls/MultipleModeControl";
@@ -493,9 +493,9 @@ class ListReportController extends PageController {
493
493
  }
494
494
  }
495
495
 
496
- _getSegmentedButton(sControl: string): UI5Element | undefined {
497
- const sSegmentedButtonId = (sControl === "Chart" ? this.getChartControl() : this._getTable())?.data("segmentedButtonId");
498
- return this.getView().byId(sSegmentedButtonId);
496
+ _getSegmentedButton(): UI5Element | undefined {
497
+ const contentSwitcher = this.getView().byId("fe::ContentSwitcher") as UI5Element & { $segmentedButton?: { current?: UI5Element } };
498
+ return contentSwitcher?.$segmentedButton?.current;
499
499
  }
500
500
 
501
501
  _getControlFromPageModelProperty(sPath: string): Control | MacroAPI | undefined {
@@ -974,7 +974,7 @@ class ListReportController extends PageController {
974
974
  }
975
975
  this.getExtensionAPI().updateAppState();
976
976
  // setTimeout cause the variant needs to be applied before judging the auto search or updating the app state
977
- this.focusHandlingForSegmentedButton(selectedKey);
977
+ this.focusHandlingForSegmentedButton();
978
978
  },
979
979
  onDynamicPageTitleStateChanged(this: ListReportController, event: DynamicPageTitle$StateChangeEvent): void {
980
980
  const filterBar = this._getFilterBarControl();
@@ -991,34 +991,10 @@ class ListReportController extends PageController {
991
991
  };
992
992
 
993
993
  /**
994
- * Handles focus for the segmented button based on the selected key.
995
- * @param selectedKey The key representing the selected template content view
994
+ * Handles focus for the segmented button.
996
995
  */
997
- focusHandlingForSegmentedButton(selectedKey: string): void {
998
- const oChart = this.getChartControl();
999
- const oTable = this._getTable();
1000
- let segmentedButtonId: string;
1001
- switch (selectedKey) {
1002
- case TemplateContentView.Table:
1003
- segmentedButtonId = generate([oTable?.getId(), "SegmentedButton", "TemplateContentView"]);
1004
- this.addFocusDelegate(segmentedButtonId);
1005
- break;
1006
- case TemplateContentView.Chart:
1007
- case TemplateContentView.Hybrid:
1008
- segmentedButtonId = generate([oChart?.getId(), "SegmentedButton", "TemplateContentView"]);
1009
- this.addFocusDelegate(segmentedButtonId);
1010
- break;
1011
- default:
1012
- break;
1013
- }
1014
- }
1015
-
1016
- /**
1017
- * Adds an event delegate to a control and sets focus on it.
1018
- * @param segmentedButtonId The control to which the event delegate will be added.
1019
- */
1020
- addFocusDelegate(segmentedButtonId: string): void {
1021
- const segmentedButton = UI5Element.getElementById(segmentedButtonId);
996
+ focusHandlingForSegmentedButton(): void {
997
+ const segmentedButton = this._getSegmentedButton();
1022
998
  if (segmentedButton) {
1023
999
  const eventDelegate = {
1024
1000
  onAfterRendering: (): void => {
@@ -1054,6 +1030,16 @@ class ListReportController extends PageController {
1054
1030
  const internalModelContext = this.getView().getBindingContext("internal") as InternalModelContext | undefined;
1055
1031
  return (internalModelContext?.getProperty("filterBarSelectionVariant") as SelectionVariant) || new SelectionVariant();
1056
1032
  }
1033
+
1034
+ /**
1035
+ * Handles the visibility of the message button in the footer in case there is inline edit.
1036
+ * @param event
1037
+ */
1038
+ handleMessageButtonVisibility(event: UI5Event<{ visible: boolean }, MessageButton>): void {
1039
+ if (event.getParameter("visible")) {
1040
+ this.setShowFooter(event.getParameter("visible"));
1041
+ }
1042
+ }
1057
1043
  }
1058
1044
 
1059
1045
  export default ListReportController;
@@ -72,10 +72,31 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
72
72
  _initializerDefineProperty(_this, "innerControls", _descriptor6, _this);
73
73
  _initializerDefineProperty(_this, "filterControl", _descriptor7, _this);
74
74
  _initializerDefineProperty(_this, "select", _descriptor8, _this);
75
+ _this.content?.addEventDelegate({
76
+ onAfterRendering: _this.onAfterIconTabBarRendering.bind(_this)
77
+ });
75
78
  return _this;
76
79
  }
77
80
  _inheritsLoose(MultipleModeControl, _Control);
78
81
  var _proto = MultipleModeControl.prototype;
82
+ _proto.onAfterIconTabBarRendering = function onAfterIconTabBarRendering() {
83
+ this.getSelectedInnerControl()?.resumeBinding?.(!this.getProperty("freezeContent"));
84
+ if (this.showCounts && !this.setVisibleOverridden) {
85
+ this.setProperty("setVisibleOverridden", true);
86
+ this.getAllInnerControls().forEach(macroAPI => {
87
+ const iconTabFilter = this._getTabFromInnerControl(macroAPI);
88
+ // No count to show
89
+ if (!iconTabFilter) return;
90
+ const originSetVisible = iconTabFilter.setVisible;
91
+ iconTabFilter.setVisible = value => {
92
+ if (iconTabFilter.getVisible() === false && value) {
93
+ this.refreshTabCount(macroAPI);
94
+ }
95
+ return originSetVisible.bind(iconTabFilter)(value);
96
+ };
97
+ });
98
+ }
99
+ };
79
100
  _proto.onBeforeRendering = function onBeforeRendering() {
80
101
  this.getTabsModel(); // Generate the model which is mandatory for some bindings
81
102
 
@@ -96,24 +117,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
96
117
  oFilterBarAPI.attachEvent("internalFilterChanged", this._onFilterChanged.bind(this));
97
118
  }
98
119
  };
99
- _proto.onAfterRendering = function onAfterRendering() {
100
- this.getSelectedInnerControl()?.resumeBinding?.(!this.getProperty("freezeContent"));
101
- if (this.showCounts && !this.setVisibleOverridden) {
102
- this.setProperty("setVisibleOverridden", true);
103
- this.getAllInnerControls().forEach(macroAPI => {
104
- const iconTabFilter = this._getTabFromInnerControl(macroAPI);
105
- // No count to show
106
- if (!iconTabFilter) return;
107
- const originSetVisible = iconTabFilter.setVisible;
108
- iconTabFilter.setVisible = value => {
109
- if (iconTabFilter.getVisible() === false && value) {
110
- this.refreshTabCount(macroAPI);
111
- }
112
- return originSetVisible.bind(iconTabFilter)(value);
113
- };
114
- });
115
- }
116
- };
117
120
  MultipleModeControl.render = function render(oRm, oControl) {
118
121
  oRm.renderControl(oControl.content);
119
122
  }
@@ -513,4 +516,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
513
516
  }), _class2)) || _class);
514
517
  return MultipleModeControl;
515
518
  }, false);
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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
519
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCaW5kaW5nQWN0aW9uIiwiTXVsdGlwbGVNb2RlQ29udHJvbCIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwicHJvcGVydHkiLCJ0eXBlIiwiX2RlYzMiLCJkZWZhdWx0VmFsdWUiLCJfZGVjNCIsIl9kZWM1IiwiX2RlYzYiLCJhZ2dyZWdhdGlvbiIsIm11bHRpcGxlIiwiaXNEZWZhdWx0IiwiX2RlYzciLCJhc3NvY2lhdGlvbiIsIl9kZWM4IiwiX2RlYzkiLCJldmVudCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQ29udHJvbCIsImlkIiwic2V0dGluZ3MiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiY29udGVudCIsImFkZEV2ZW50RGVsZWdhdGUiLCJvbkFmdGVyUmVuZGVyaW5nIiwib25BZnRlckljb25UYWJCYXJSZW5kZXJpbmciLCJiaW5kIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJnZXRTZWxlY3RlZElubmVyQ29udHJvbCIsInJlc3VtZUJpbmRpbmciLCJnZXRQcm9wZXJ0eSIsInNob3dDb3VudHMiLCJzZXRWaXNpYmxlT3ZlcnJpZGRlbiIsInNldFByb3BlcnR5IiwiZ2V0QWxsSW5uZXJDb250cm9scyIsImZvckVhY2giLCJtYWNyb0FQSSIsImljb25UYWJGaWx0ZXIiLCJfZ2V0VGFiRnJvbUlubmVyQ29udHJvbCIsIm9yaWdpblNldFZpc2libGUiLCJzZXRWaXNpYmxlIiwidmFsdWUiLCJnZXRWaXNpYmxlIiwicmVmcmVzaFRhYkNvdW50Iiwib25CZWZvcmVSZW5kZXJpbmciLCJnZXRUYWJzTW9kZWwiLCJvRmlsdGVyQ29udHJvbCIsIl9nZXRGaWx0ZXJDb250cm9sIiwic2V0Q291bnRzT3V0RGF0ZWQiLCJvRmlsdGVyQmFyQVBJIiwiZ2V0UGFyZW50Iiwib01hY3JvQVBJIiwiYXR0YWNoRXZlbnQiLCJpbnRlcm5hbFJlZnJlc2hUYWJzQ291bnQiLCJzdXNwZW5kQmluZGluZyIsIl9vblNlYXJjaCIsIl9vbkZpbHRlckNoYW5nZWQiLCJyZW5kZXIiLCJvUm0iLCJvQ29udHJvbCIsInJlbmRlckNvbnRyb2wiLCJzVGFic01vZGVsIiwib0NvbnRlbnQiLCJ1bmRlZmluZWQiLCJvTW9kZWwiLCJnZXRNb2RlbCIsIkpTT05Nb2RlbCIsInNldE1vZGVsIiwib1NlbGVjdGVkVGFiIiwiZ2V0SXRlbXMiLCJmaW5kIiwib0l0ZW0iLCJnZXRLZXkiLCJnZXRTZWxlY3RlZEtleSIsImhhbmRsZVRhYkNoYW5nZSIsIm9FdmVudCIsIm9JY29uVGFiQmFyIiwiZ2V0U291cmNlIiwib011bHRpQ29udHJvbCIsIm1QYXJhbWV0ZXJzIiwiZ2V0UGFyYW1ldGVycyIsIl9zZXRJbm5lckJpbmRpbmciLCJzUHJldmlvdXNTZWxlY3RlZEtleSIsInByZXZpb3VzS2V5Iiwic1NlbGVjdGVkS2V5Iiwic2VsZWN0ZWRLZXkiLCJwZXJzb25hbGl6YXRpb25Qcm9taXNlIiwib0ZpbHRlckJhciIsIl9yZWZyZXNoQ3VzdG9tVmlldyIsImdldEZpbHRlckNvbmRpdGlvbnMiLCJoYW5kbGVQZXJzb25hbGl6YXRpb25VcGRhdGUiLCJfZ2V0Vmlld0NvbnRyb2xsZXIiLCJnZXRFeHRlbnNpb25BUEkiLCJ1cGRhdGVBcHBTdGF0ZSIsImZpcmVFdmVudCIsImljb25UYWJCYXIiLCJDb250cm9sUGVyc29uYWxpemF0aW9uV3JpdGVBUEkiLCJfX3VpNV9yZXF1aXJlX2FzeW5jIiwiZGVmYXVsdCIsImFkZCIsImNoYW5nZXMiLCJjaGFuZ2VTcGVjaWZpY0RhdGEiLCJjaGFuZ2VUeXBlIiwicHJldmlvdXNTZWxlY3RlZEtleSIsInNlbGVjdG9yRWxlbWVudCIsImVycm9yIiwiTG9nIiwicmVmcmVzaFNlbGVjdGVkSW5uZXJDb250cm9sQ29udGVudCIsImludmFsaWRhdGVDb250ZW50Iiwia2V5cyIsImtleSIsImJWYWx1ZSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInNldEZyZWV6ZUNvbnRlbnQiLCJfdXBkYXRlTXVsdGlUYWJOb3RBcHBsaWNhYmxlRmllbGRzIiwidGFic01vZGVsIiwicmVzdWx0cyIsInZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJ2aWV3RGF0YSIsImdldFZpZXdEYXRhIiwidXNlSGlkZGVuRmlsdGVyQmFyIiwib1RhYiIsInNUYWJJZCIsIm1JZ25vcmVkRmllbGRzIiwicmVmcmVzaE5vdEFwcGxpY2FibGVGaWVsZHMiLCJub3RBcHBsaWNhYmxlIiwiZmllbGRzIiwidGl0bGUiLCJfc2V0VGFiTWVzc2FnZVN0cmlwIiwiZW50aXR5VHlwZVBhdGgiLCJkYXRhIiwiaWdub3JlZEZpZWxkcyIsImdldFRleHQiLCJpc0EiLCJjaGVja05vbkZpbHRlcmFibGVFbnRpdHlTZXQiLCJzZXREYXRhIiwicmVzb3VyY2VNb2RlbCIsImdldFJlc291cmNlTW9kZWwiLCJvQ2hhcnQiLCJnZXRDb250ZW50IiwiYkVudGl0eVNldEZpbGVyYWJsZSIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldE1ldGFNb2RlbCIsImdldENvbnRleHQiLCJ0YXJnZXRPYmplY3QiLCJhbm5vdGF0aW9ucyIsIkNhcGFiaWxpdGllcyIsIkZpbHRlclJlc3RyaWN0aW9ucyIsIkZpbHRlcmFibGUiLCJpbmNsdWRlcyIsImJPbmx5Rm9yVmlzaWJsZVRhYiIsImlubmVyQ29udHJvbHMiLCJyZWR1Y2UiLCJhSW5uZXJDb250cm9scyIsInNJbm5lckNvbnRyb2wiLCJVSTVFbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJwdXNoIiwiZmlsdGVyIiwib0lubmVyQ29udHJvbCIsImZpbHRlckNvbnRyb2wiLCJvVmlldyIsImdldENvbnRyb2xsZXIiLCJvRmlsdGVyQ29uZGl0aW9ucyIsInNSZWZyZXNoQ2F1c2UiLCJvblZpZXdOZWVkc1JlZnJlc2giLCJmaWx0ZXJDb25kaXRpb25zIiwiY3VycmVudFRhYklkIiwicmVmcmVzaENhdXNlIiwiZ2V0Q291bnRzIiwic2V0Q291bnQiLCJlZGl0RmxvdyIsInN5bmNUYXNrIiwidGhlbiIsImNvdW50IiwiY2F0Y2giLCJ0YWJsZUV2ZW50IiwiZXZlbnRNYWNyb0FQSSIsInRhcmdldEtleSIsInRhYktleXMiLCJtYXAiLCJ0YWIiLCJzcGxpdCIsInJlZnJlc2hUYWJzQ291bnQiLCJvSWNvblRhYkZpbHRlciIsImNvdW50c091dERhdGVkIiwic2V0VGFiQ29udGVudFRvQmVSZWZyZXNoZWRPbk5leHRPcGVuaW5nIiwic2VsZWN0ZWRUYWJLZXkiLCJyZWZyZXNoU2VsZWN0ZWRUYWJDb250ZW50IiwiYlJlcXVlc3RJZk5vdEluaXRpYWxpemVkIiwiYklzU2VsZWN0ZWRLZXkiLCJzQWN0aW9uIiwiUmVzdW1lIiwiU3VzcGVuZCIsInByb3BlcnRpZXMiLCJzVGV4dCIsImFJZ25vcmVkRmllbGRzIiwiQXJyYXkiLCJpc0FycmF5IiwiYUlnbm9yZWRMYWJlbHMiLCJNZXNzYWdlU3RyaXAiLCJnZXRMYWJlbHMiLCJnZXRQYXJhbWV0ZXIiLCJDb250cm9sIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNdWx0aXBsZU1vZGVDb250cm9sLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5U2V0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgYWdncmVnYXRpb24sIGFzc29jaWF0aW9uLCBkZWZpbmVVSTVDbGFzcywgZXZlbnQsIHByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgTWVzc2FnZVN0cmlwIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01lc3NhZ2VTdHJpcFwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIE1hY3JvQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL01hY3JvQVBJXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgdHlwZSBMaXN0UmVwb3J0Q29udHJvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L0xpc3RSZXBvcnRDb250cm9sbGVyLmNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIEljb25UYWJCYXIgZnJvbSBcInNhcC9tL0ljb25UYWJCYXJcIjtcbmltcG9ydCB0eXBlIHsgSWNvblRhYkJhciRTZWxlY3RFdmVudCB9IGZyb20gXCJzYXAvbS9JY29uVGFiQmFyXCI7XG5pbXBvcnQgdHlwZSBJY29uVGFiRmlsdGVyIGZyb20gXCJzYXAvbS9JY29uVGFiRmlsdGVyXCI7XG5pbXBvcnQgdHlwZSBDb3JlRXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBSZW5kZXJNYW5hZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9SZW5kZXJNYW5hZ2VyXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5cbmV4cG9ydCB0eXBlIElubmVyQ29udHJvbFR5cGUgPSBNYWNyb0FQSSAmXG5cdFBhcnRpYWw8e1xuXHRcdHJlc3VtZUJpbmRpbmc6IEZ1bmN0aW9uO1xuXHRcdHN1c3BlbmRCaW5kaW5nOiBGdW5jdGlvbjtcblx0XHRnZXRDb3VudHM6IEZ1bmN0aW9uO1xuXHRcdHJlZnJlc2hOb3RBcHBsaWNhYmxlRmllbGRzOiBGdW5jdGlvbjtcblx0XHRpbnZhbGlkYXRlQ29udGVudDogRnVuY3Rpb247XG5cdFx0Z2V0Q29udGVudDogRnVuY3Rpb247XG5cdH0+O1xuXG50eXBlIE1lc3NhZ2VTdHJpcFByb3BlcnRpZXMgPSB7XG5cdGVudGl0eVR5cGVQYXRoOiBzdHJpbmc7XG5cdGlnbm9yZWRGaWVsZHM6IHN0cmluZ1tdO1xuXHR0aXRsZTogc3RyaW5nO1xufTtcblxuZW51bSBCaW5kaW5nQWN0aW9uIHtcblx0U3VzcGVuZCA9IFwic3VzcGVuZEJpbmRpbmdcIixcblx0UmVzdW1lID0gXCJyZXN1bWVCaW5kaW5nXCJcbn1cblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0LmNvbnRyb2xzLk11bHRpcGxlTW9kZUNvbnRyb2xcIilcbmNsYXNzIE11bHRpcGxlTW9kZUNvbnRyb2wgZXh0ZW5kcyBDb250cm9sIHtcblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIgfSlcblx0c2hvd0NvdW50cyE6IGJvb2xlYW47XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0c2V0VmlzaWJsZU92ZXJyaWRkZW4hOiBib29sZWFuO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdGZyZWV6ZUNvbnRlbnQhOiBib29sZWFuO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdGNvdW50c091dERhdGVkITogYm9vbGVhbjtcblxuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5tLkljb25UYWJCYXJcIiwgbXVsdGlwbGU6IGZhbHNlLCBpc0RlZmF1bHQ6IHRydWUgfSlcblx0Y29udGVudCE6IEljb25UYWJCYXI7XG5cblx0QGFzc29jaWF0aW9uKHsgdHlwZTogXCJzYXAudWkuY29yZS5Db250cm9sXCIsIG11bHRpcGxlOiB0cnVlIH0pXG5cdGlubmVyQ29udHJvbHMhOiBzdHJpbmdbXTtcblxuXHRAYXNzb2NpYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuRmlsdGVyQmFyXCIsIG11bHRpcGxlOiBmYWxzZSB9KVxuXHRmaWx0ZXJDb250cm9sITogc3RyaW5nO1xuXG5cdEBldmVudCgpXG5cdHNlbGVjdCE6IEZ1bmN0aW9uO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdGlkPzogc3RyaW5nIHwgdW5kZWZpbmVkIHwgKFByb3BlcnRpZXNPZjxNdWx0aXBsZU1vZGVDb250cm9sPiAmICRDb250cm9sU2V0dGluZ3MpLFxuXHRcdHNldHRpbmdzPzogJENvbnRyb2xTZXR0aW5ncyAmIFByb3BlcnRpZXNPZjxNdWx0aXBsZU1vZGVDb250cm9sPlxuXHQpIHtcblx0XHRzdXBlcihpZCBhcyBzdHJpbmcsIHNldHRpbmdzKTtcblx0XHR0aGlzLmNvbnRlbnQ/LmFkZEV2ZW50RGVsZWdhdGUoe1xuXHRcdFx0b25BZnRlclJlbmRlcmluZzogdGhpcy5vbkFmdGVySWNvblRhYkJhclJlbmRlcmluZy5iaW5kKHRoaXMpXG5cdFx0fSk7XG5cdH1cblxuXHRvbkFmdGVySWNvblRhYkJhclJlbmRlcmluZygpOiB2b2lkIHtcblx0XHR0aGlzLmdldFNlbGVjdGVkSW5uZXJDb250cm9sKCk/LnJlc3VtZUJpbmRpbmc/LighdGhpcy5nZXRQcm9wZXJ0eShcImZyZWV6ZUNvbnRlbnRcIikpO1xuXHRcdGlmICh0aGlzLnNob3dDb3VudHMgJiYgIXRoaXMuc2V0VmlzaWJsZU92ZXJyaWRkZW4pIHtcblx0XHRcdHRoaXMuc2V0UHJvcGVydHkoXCJzZXRWaXNpYmxlT3ZlcnJpZGRlblwiLCB0cnVlKTtcblx0XHRcdHRoaXMuZ2V0QWxsSW5uZXJDb250cm9scygpLmZvckVhY2goKG1hY3JvQVBJOiBNYWNyb0FQSSk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBpY29uVGFiRmlsdGVyID0gdGhpcy5fZ2V0VGFiRnJvbUlubmVyQ29udHJvbChtYWNyb0FQSSk7XG5cdFx0XHRcdC8vIE5vIGNvdW50IHRvIHNob3dcblx0XHRcdFx0aWYgKCFpY29uVGFiRmlsdGVyKSByZXR1cm47XG5cblx0XHRcdFx0Y29uc3Qgb3JpZ2luU2V0VmlzaWJsZSA9IGljb25UYWJGaWx0ZXIuc2V0VmlzaWJsZTtcblx0XHRcdFx0aWNvblRhYkZpbHRlci5zZXRWaXNpYmxlID0gKHZhbHVlOiBib29sZWFuKTogSWNvblRhYkZpbHRlciA9PiB7XG5cdFx0XHRcdFx0aWYgKGljb25UYWJGaWx0ZXIuZ2V0VmlzaWJsZSgpID09PSBmYWxzZSAmJiB2YWx1ZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5yZWZyZXNoVGFiQ291bnQobWFjcm9BUEkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gb3JpZ2luU2V0VmlzaWJsZS5iaW5kKGljb25UYWJGaWx0ZXIpKHZhbHVlKTtcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdG9uQmVmb3JlUmVuZGVyaW5nKCk6IHZvaWQge1xuXHRcdHRoaXMuZ2V0VGFic01vZGVsKCk7IC8vIEdlbmVyYXRlIHRoZSBtb2RlbCB3aGljaCBpcyBtYW5kYXRvcnkgZm9yIHNvbWUgYmluZGluZ3NcblxuXHRcdGNvbnN0IG9GaWx0ZXJDb250cm9sID0gdGhpcy5fZ2V0RmlsdGVyQ29udHJvbCgpO1xuXHRcdGlmICghb0ZpbHRlckNvbnRyb2wpIHtcblx0XHRcdC8vIEluIGNhc2UgdGhlcmUncyBubyBmaWx0ZXJiYXIsIHdlIGhhdmUgdG8gdXBkYXRlIHRoZSBjb3VudHMgaW4gdGhlIHRhYnMgaW1tZWRpYXRlbHlcblx0XHRcdHRoaXMuc2V0Q291bnRzT3V0RGF0ZWQodHJ1ZSk7XG5cdFx0fVxuXHRcdGNvbnN0IG9GaWx0ZXJCYXJBUEkgPSBvRmlsdGVyQ29udHJvbD8uZ2V0UGFyZW50KCk7XG5cdFx0dGhpcy5nZXRBbGxJbm5lckNvbnRyb2xzKCkuZm9yRWFjaCgob01hY3JvQVBJKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5zaG93Q291bnRzKSB7XG5cdFx0XHRcdG9NYWNyb0FQSS5hdHRhY2hFdmVudChcImludGVybmFsRGF0YVJlcXVlc3RlZFwiLCB0aGlzLmludGVybmFsUmVmcmVzaFRhYnNDb3VudC5iaW5kKHRoaXMpKTtcblx0XHRcdH1cblx0XHRcdG9NYWNyb0FQSS5zdXNwZW5kQmluZGluZz8uKCk7XG5cdFx0fSk7XG5cdFx0aWYgKG9GaWx0ZXJCYXJBUEkpIHtcblx0XHRcdG9GaWx0ZXJCYXJBUEkuYXR0YWNoRXZlbnQoXCJpbnRlcm5hbFNlYXJjaFwiLCB0aGlzLl9vblNlYXJjaC5iaW5kKHRoaXMpKTtcblx0XHRcdG9GaWx0ZXJCYXJBUEkuYXR0YWNoRXZlbnQoXCJpbnRlcm5hbEZpbHRlckNoYW5nZWRcIiwgdGhpcy5fb25GaWx0ZXJDaGFuZ2VkLmJpbmQodGhpcykpO1xuXHRcdH1cblx0fVxuXG5cdHN0YXRpYyByZW5kZXIob1JtOiBSZW5kZXJNYW5hZ2VyLCBvQ29udHJvbDogTXVsdGlwbGVNb2RlQ29udHJvbCk6IHZvaWQge1xuXHRcdG9SbS5yZW5kZXJDb250cm9sKG9Db250cm9sLmNvbnRlbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG1vZGVsIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgSWNvblRhYkZpbHRlcnMuXG5cdCAqIEByZXR1cm5zIFRoZSBtb2RlbFxuXHQgKi9cblx0Z2V0VGFic01vZGVsKCk6IEpTT05Nb2RlbCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgc1RhYnNNb2RlbCA9IFwidGFic0ludGVybmFsXCI7XG5cdFx0Y29uc3Qgb0NvbnRlbnQgPSB0aGlzLmNvbnRlbnQ7XG5cdFx0aWYgKCFvQ29udGVudCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0bGV0IG9Nb2RlbCA9IG9Db250ZW50LmdldE1vZGVsKHNUYWJzTW9kZWwpIGFzIEpTT05Nb2RlbCB8IHVuZGVmaW5lZDtcblx0XHRpZiAoIW9Nb2RlbCkge1xuXHRcdFx0b01vZGVsID0gbmV3IEpTT05Nb2RlbCh7fSk7XG5cdFx0XHRvQ29udGVudC5zZXRNb2RlbChvTW9kZWwsIHNUYWJzTW9kZWwpO1xuXHRcdH1cblx0XHRyZXR1cm4gb01vZGVsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGlubmVyIGNvbnRyb2wgb2YgdGhlIGRpc3BsYXllZCB0YWIuXG5cdCAqIEByZXR1cm5zIFRoZSBjb250cm9sXG5cdCAqL1xuXHRnZXRTZWxlY3RlZElubmVyQ29udHJvbCgpOiBJbm5lckNvbnRyb2xUeXBlIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBvU2VsZWN0ZWRUYWIgPSB0aGlzLmNvbnRlbnQ/LmdldEl0ZW1zKCkuZmluZCgob0l0ZW0pID0+IChvSXRlbSBhcyBJY29uVGFiRmlsdGVyKS5nZXRLZXkoKSA9PT0gdGhpcy5jb250ZW50LmdldFNlbGVjdGVkS2V5KCkpO1xuXHRcdHJldHVybiBvU2VsZWN0ZWRUYWJcblx0XHRcdD8gdGhpcy5nZXRBbGxJbm5lckNvbnRyb2xzKCkuZmluZCgob01hY3JvQVBJKSA9PiB0aGlzLl9nZXRUYWJGcm9tSW5uZXJDb250cm9sKG9NYWNyb0FQSSkgPT09IG9TZWxlY3RlZFRhYilcblx0XHRcdDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgdGhlIGJpbmRpbmcgb2YgYWxsIGlubmVyIGNvbnRyb2xzIHdoZW4gdGhlIHNlbGVjdGVkIEljb25UYWJGaWx0ZXIgaXMgY2hhbmdlZC5cblx0ICogQHBhcmFtIG9FdmVudCBFdmVudCBmaXJlZCBieSB0aGUgSWNvblRhYkJhclxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgaWYgdGhlIHBlcnNvbmFsaXphdGlvbiBpcyB1cGRhdGVkLCBvdGhlcndpc2Ugbm90aGluZ1xuXHQgKi9cblx0c3RhdGljIGhhbmRsZVRhYkNoYW5nZShvRXZlbnQ6IEljb25UYWJCYXIkU2VsZWN0RXZlbnQpOiBQcm9taXNlPHZvaWQ+IHwgdm9pZCB7XG5cdFx0Y29uc3Qgb0ljb25UYWJCYXIgPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0Y29uc3Qgb011bHRpQ29udHJvbCA9IG9JY29uVGFiQmFyLmdldFBhcmVudCgpIGFzIE11bHRpcGxlTW9kZUNvbnRyb2w7XG5cblx0XHRjb25zdCBtUGFyYW1ldGVycyA9IG9FdmVudC5nZXRQYXJhbWV0ZXJzKCk7XG5cdFx0b011bHRpQ29udHJvbC5fc2V0SW5uZXJCaW5kaW5nKHRydWUpO1xuXHRcdGNvbnN0IHNQcmV2aW91c1NlbGVjdGVkS2V5ID0gbVBhcmFtZXRlcnM/LnByZXZpb3VzS2V5O1xuXHRcdGNvbnN0IHNTZWxlY3RlZEtleSA9IG1QYXJhbWV0ZXJzPy5zZWxlY3RlZEtleTtcblx0XHRsZXQgcGVyc29uYWxpemF0aW9uUHJvbWlzZTtcblx0XHRpZiAoc1NlbGVjdGVkS2V5ICYmIHNQcmV2aW91c1NlbGVjdGVkS2V5ICE9PSBzU2VsZWN0ZWRLZXkpIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSBvTXVsdGlDb250cm9sLl9nZXRGaWx0ZXJDb250cm9sKCk7XG5cdFx0XHRpZiAob0ZpbHRlckJhciAmJiAhb011bHRpQ29udHJvbC5nZXRQcm9wZXJ0eShcImZyZWV6ZUNvbnRlbnRcIikpIHtcblx0XHRcdFx0aWYgKCFvTXVsdGlDb250cm9sLmdldFNlbGVjdGVkSW5uZXJDb250cm9sKCkpIHtcblx0XHRcdFx0XHQvL2N1c3RvbSB0YWJcblx0XHRcdFx0XHRvTXVsdGlDb250cm9sLl9yZWZyZXNoQ3VzdG9tVmlldyhvRmlsdGVyQmFyLmdldEZpbHRlckNvbmRpdGlvbnMoKSwgXCJ0YWJDaGFuZ2VkXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRwZXJzb25hbGl6YXRpb25Qcm9taXNlID0gTXVsdGlwbGVNb2RlQ29udHJvbC5oYW5kbGVQZXJzb25hbGl6YXRpb25VcGRhdGUoc1NlbGVjdGVkS2V5LCBzUHJldmlvdXNTZWxlY3RlZEtleSwgb0ljb25UYWJCYXIpO1xuXHRcdH1cblxuXHRcdG9NdWx0aUNvbnRyb2wuX2dldFZpZXdDb250cm9sbGVyKCk/LmdldEV4dGVuc2lvbkFQSSgpPy51cGRhdGVBcHBTdGF0ZSgpO1xuXG5cdFx0b011bHRpQ29udHJvbC5maXJlRXZlbnQoXCJzZWxlY3RcIiwge1xuXHRcdFx0aWNvblRhYkJhcjogb0ljb25UYWJCYXIsXG5cdFx0XHRzZWxlY3RlZEtleTogc1NlbGVjdGVkS2V5LFxuXHRcdFx0cHJldmlvdXNLZXk6IHNQcmV2aW91c1NlbGVjdGVkS2V5XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHBlcnNvbmFsaXphdGlvblByb21pc2U7XG5cdH1cblxuXHRwcml2YXRlIHN0YXRpYyBhc3luYyBoYW5kbGVQZXJzb25hbGl6YXRpb25VcGRhdGUoXG5cdFx0c1NlbGVjdGVkS2V5OiBzdHJpbmcsXG5cdFx0c1ByZXZpb3VzU2VsZWN0ZWRLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRvSWNvblRhYkJhcjogSWNvblRhYkJhclxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgQ29udHJvbFBlcnNvbmFsaXphdGlvbldyaXRlQVBJID0gKGF3YWl0IGltcG9ydChcInNhcC91aS9mbC93cml0ZS9hcGkvQ29udHJvbFBlcnNvbmFsaXphdGlvbldyaXRlQVBJXCIpKS5kZWZhdWx0O1xuXHRcdFx0Q29udHJvbFBlcnNvbmFsaXphdGlvbldyaXRlQVBJLmFkZCh7XG5cdFx0XHRcdGNoYW5nZXM6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRjaGFuZ2VTcGVjaWZpY0RhdGE6IHtcblx0XHRcdFx0XHRcdFx0Y2hhbmdlVHlwZTogXCJzZWxlY3RJY29uVGFiQmFyRmlsdGVyXCIsXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHtcblx0XHRcdFx0XHRcdFx0XHRzZWxlY3RlZEtleTogc1NlbGVjdGVkS2V5LFxuXHRcdFx0XHRcdFx0XHRcdHByZXZpb3VzU2VsZWN0ZWRLZXk6IHNQcmV2aW91c1NlbGVjdGVkS2V5XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRzZWxlY3RvckVsZW1lbnQ6IG9JY29uVGFiQmFyXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRdXG5cdFx0XHR9KTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKFwiU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2hpbGUgdXBkYXRpbmcgdGhlIHBlcnNvbmFsaXphdGlvbiBzdGF0ZSBvZiB0aGUgTXVsdGlwbGVNb2RlQ29udHJvbFwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZWZyZXNoZXMgdGhlIGNvbnRlbnQgb2YgdGhlIHNlbGVjdGVkIGlubmVyIGNvbnRyb2wuXG5cdCAqXG5cdCAqL1xuXHRyZWZyZXNoU2VsZWN0ZWRJbm5lckNvbnRyb2xDb250ZW50KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmdldFNlbGVjdGVkSW5uZXJDb250cm9sKCkpIHtcblx0XHRcdHRoaXMuZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2woKT8uaW52YWxpZGF0ZUNvbnRlbnQ/LigpO1xuXHRcdFx0dGhpcy5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpPy5yZXN1bWVCaW5kaW5nPy4odHJ1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGN1c3RvbSB0YWJcblx0XHRcdHRoaXMuX3JlZnJlc2hDdXN0b21WaWV3KHVuZGVmaW5lZCwgXCJmb3JjZWRSZWZyZXNoXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBJbnZhbGlkYXRlcyB0aGUgY29udGVudCBvZiB0aGUgaW5uZXIgY29udHJvbHMuXG5cdCAqIEBwYXJhbSBba2V5c10gVGhlIGxpc3Qgb2YgdGhlIGtleXMgaWRlbnRpZnlpbmcgdGhlIHZpZXdzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IGZvciB3aGljaCB0aGUgdmlld3MnIGNvbnRlbnQgd2lsbCBiZSBpbnZhbGlkYXRlZC4gSWYgbm90IHByb3ZpZGVkLCBhbGwgdGhlIHZpZXdzJyBjb250ZW50IHdpbGwgYmUgaW52YWxpZGF0ZWRcblx0ICovXG5cdGludmFsaWRhdGVDb250ZW50KGtleXM/OiBzdHJpbmdbXSk6IHZvaWQge1xuXHRcdHRoaXMuc2V0Q291bnRzT3V0RGF0ZWQodHJ1ZSk7XG5cdFx0dGhpcy5nZXRBbGxJbm5lckNvbnRyb2xzKCkuZm9yRWFjaCgobWFjcm9BUEkpID0+IHtcblx0XHRcdGlmIChrZXlzKSB7XG5cdFx0XHRcdGNvbnN0IGljb25UYWJGaWx0ZXIgPSB0aGlzLl9nZXRUYWJGcm9tSW5uZXJDb250cm9sKG1hY3JvQVBJKTtcblx0XHRcdFx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdGljb25UYWJGaWx0ZXIgJiZcblx0XHRcdFx0XHRcdChpY29uVGFiRmlsdGVyLmdldEtleSgpID09PSBgZmU6OnRhYmxlOjoke2tleX06OkxpbmVJdGVtYCB8fCBpY29uVGFiRmlsdGVyLmdldEtleSgpID09PSBgZmU6OkN1c3RvbVRhYjo6JHtrZXl9YClcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG1hY3JvQVBJLmludmFsaWRhdGVDb250ZW50Py4oKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1hY3JvQVBJLmludmFsaWRhdGVDb250ZW50Py4oKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBjb3VudHMgdG8gXCJvdXQgb2YgZGF0ZVwiIG9yIFwidXAgdG8gZGF0ZVwiXG5cdCAqIElmIHRoZSBjb3VudHMgYXJlIHNldCB0byBcIm91dCBvZiBkYXRlXCIgYW5kIHRoZSBzZWxlY3RlZCBJY29uVGFiRmlsdGVyIGRvZXNuJ3QgY29udGFpbiBhbiBpbm5lciBjb250cm9sLCBhbGwgaW5uZXIgY29udHJvbHMgYXJlIHJlcXVlc3RlZCB0byBnZXQgdGhlIG5ldyBjb3VudHMuXG5cdCAqIEBwYXJhbSBiVmFsdWUgRWl0aGVyIGZyZWV6ZXMgdGhlIGNvbnRyb2wgb3Igbm90XG5cdCAqL1xuXHRzZXRDb3VudHNPdXREYXRlZChiVmFsdWUgPSB0cnVlKTogdm9pZCB7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcImNvdW50c091dERhdGVkXCIsIGJWYWx1ZSk7XG5cdFx0Ly8gaWYgdGhlIGN1cnJlbnQgdGFiIGlzIG5vdCBjb25maWd1cmVkIHdpdGggbm8gaW5uZXIgQ29udHJvbFxuXHRcdC8vIHRoZSB0YWIgY291bnRzIG11c3QgYmUgbWFudWFsbHkgcmVmcmVzaGVkIHNpbmNlIG5vIE1hY3JvIEFQSSB3aWxsIHNlbnQgZXZlbnQgaW50ZXJuYWxEYXRhUmVxdWVzdGVkXG5cdFx0aWYgKGJWYWx1ZSAmJiAhdGhpcy5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpKSB7XG5cdFx0XHR0aGlzLmludGVybmFsUmVmcmVzaFRhYnNDb3VudCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGcmVlemVzIHRoZSBjb250ZW50IDpcblx0ICogLSBjb250ZW50IGlzIGZyb3plbjogdGhlIGJpbmRpbmcgb2YgdGhlIGlubmVyIGNvbnRyb2xzIGFyZSBzdXNwZW5kZWQuXG5cdCAqIC0gY29udGVudCBpcyB1bmZyb3plbjogdGhlIGJpbmRpbmcgb2YgaW5uZXIgY29udHJvbCByZWxhdGVkIHRvIHRoZSBzZWxlY3RlZCBJY29uVGFiRmlsdGVyIGlzIHJlc3VtZWQuXG5cdCAqIEBwYXJhbSBiVmFsdWUgRnJlZXplIG9yIG5vdCB0aGUgY29udHJvbFxuXHQgKi9cblx0c2V0RnJlZXplQ29udGVudChiVmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHR0aGlzLnNldFByb3BlcnR5KFwiZnJlZXplQ29udGVudFwiLCBiVmFsdWUpO1xuXHRcdHRoaXMuX3NldElubmVyQmluZGluZygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgdGhlIGludGVybmFsIG1vZGVsIHdpdGggdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgbm90IGFwcGxpY2FibGUgb24gZWFjaCBJY29uVGFiRmlsdGVyIChjb250YWluaW5nIGlubmVyIGNvbnRyb2wpIGFjY29yZGluZyB0byB0aGUgZW50aXR5VHlwZSBvZiB0aGUgZmlsdGVyIGNvbnRyb2wuXG5cdCAqXG5cdCAqL1xuXHRfdXBkYXRlTXVsdGlUYWJOb3RBcHBsaWNhYmxlRmllbGRzKCk6IHZvaWQge1xuXHRcdGNvbnN0IHRhYnNNb2RlbCA9IHRoaXMuZ2V0VGFic01vZGVsKCk7XG5cdFx0Y29uc3Qgb0ZpbHRlckNvbnRyb2wgPSB0aGlzLl9nZXRGaWx0ZXJDb250cm9sKCkgYXMgQ29udHJvbDtcblx0XHRpZiAodGFic01vZGVsICYmIG9GaWx0ZXJDb250cm9sKSB7XG5cdFx0XHRjb25zdCByZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCB7IG5vdEFwcGxpY2FibGU6IHsgZmllbGRzOiBzdHJpbmdbXTsgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCB9IH0+ID0ge307XG5cdFx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzKTtcblx0XHRcdGNvbnN0IHZpZXdEYXRhID0gdmlldy5nZXRWaWV3RGF0YSgpO1xuXHRcdFx0aWYgKCF2aWV3RGF0YS51c2VIaWRkZW5GaWx0ZXJCYXIpIHtcblx0XHRcdFx0dGhpcy5nZXRBbGxJbm5lckNvbnRyb2xzKCkuZm9yRWFjaCgob01hY3JvQVBJKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgb1RhYiA9IHRoaXMuX2dldFRhYkZyb21Jbm5lckNvbnRyb2wob01hY3JvQVBJKTtcblx0XHRcdFx0XHRpZiAob1RhYikge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc1RhYklkID0gb1RhYi5nZXRLZXkoKTtcblx0XHRcdFx0XHRcdGNvbnN0IG1JZ25vcmVkRmllbGRzID0gb01hY3JvQVBJLnJlZnJlc2hOb3RBcHBsaWNhYmxlRmllbGRzPy4ob0ZpbHRlckNvbnRyb2wpIHx8IFtdO1xuXHRcdFx0XHRcdFx0cmVzdWx0c1tzVGFiSWRdID0ge1xuXHRcdFx0XHRcdFx0XHRub3RBcHBsaWNhYmxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0ZmllbGRzOiBtSWdub3JlZEZpZWxkcyxcblx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy5fc2V0VGFiTWVzc2FnZVN0cmlwKHtcblx0XHRcdFx0XHRcdFx0XHRcdGVudGl0eVR5cGVQYXRoOiBvRmlsdGVyQ29udHJvbC5kYXRhKFwiZW50aXR5VHlwZVwiKSxcblx0XHRcdFx0XHRcdFx0XHRcdGlnbm9yZWRGaWVsZHM6IG1JZ25vcmVkRmllbGRzLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6IG9UYWIuZ2V0VGV4dCgpXG5cdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdGlmIChvTWFjcm9BUEkgJiYgb01hY3JvQVBJLmlzQShcInNhcC5mZS5tYWNyb3MuQ2hhcnRcIikpIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0c1tzVGFiSWRdID0gdGhpcy5jaGVja05vbkZpbHRlcmFibGVFbnRpdHlTZXQob01hY3JvQVBJLCBzVGFiSWQsIHJlc3VsdHMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRhYnNNb2RlbC5zZXREYXRhKHJlc3VsdHMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNb2RpZmllcyB0aGUgbWVzc2FnZXN0cmlwIG1lc3NhZ2UgYmFzZWQgb24gZW50aXR5IHNldCBpcyBmaWxlcmFibGUgb3Igbm90LlxuXHQgKiBAcGFyYW0gb01hY3JvQVBJIE1hY3JvIGNoYXJ0IGFwaVxuXHQgKiBAcGFyYW0gc1RhYklkIFRhYiBrZXkgSURcblx0ICogQHBhcmFtIHJlc3VsdHMgU2hvdWxkIGNvbnRhaW4gZmllbGRzIGFuZCB0aXRsZVxuXHQgKiBAcmV0dXJucyBBbiBvYmplY3Qgb2YgbW9kaWZpZWQgZmllbGRzIGFuZCB0aXRsZVxuXHQgKi9cblx0Y2hlY2tOb25GaWx0ZXJhYmxlRW50aXR5U2V0KFxuXHRcdG9NYWNyb0FQSTogSW5uZXJDb250cm9sVHlwZSxcblx0XHRzVGFiSWQ6IHN0cmluZyxcblx0XHRyZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCB7IG5vdEFwcGxpY2FibGU6IHsgZmllbGRzOiBzdHJpbmdbXTsgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCB9IH0+XG5cdCk6IHsgbm90QXBwbGljYWJsZTogeyBmaWVsZHM6IHN0cmluZ1tdOyB0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkIH0gfSB7XG5cdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwob01hY3JvQVBJKTtcblx0XHRjb25zdCBvQ2hhcnQgPSBvTWFjcm9BUEk/LmdldENvbnRlbnQgPyBvTWFjcm9BUEkuZ2V0Q29udGVudCgpIDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGJFbnRpdHlTZXRGaWxlcmFibGUgPVxuXHRcdFx0b0NoYXJ0ICYmXG5cdFx0XHRNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPEVudGl0eVNldD4oXG5cdFx0XHRcdChvQ2hhcnQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKS5nZXRDb250ZXh0KGAke29DaGFydC5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIil9YClcblx0XHRcdCk/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcz8uRmlsdGVyUmVzdHJpY3Rpb25zPy5GaWx0ZXJhYmxlO1xuXHRcdGlmIChiRW50aXR5U2V0RmlsZXJhYmxlICE9PSB1bmRlZmluZWQgJiYgIWJFbnRpdHlTZXRGaWxlcmFibGUpIHtcblx0XHRcdGlmIChyZXN1bHRzW3NUYWJJZF0ubm90QXBwbGljYWJsZS5maWVsZHMuaW5jbHVkZXMoXCIkc2VhcmNoXCIpKSB7XG5cdFx0XHRcdHJlc3VsdHNbc1RhYklkXS5ub3RBcHBsaWNhYmxlLnRpdGxlICs9IFwiIFwiICsgcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19MUl9NVUxUSVZJWl9DSEFSVF9NVUxUSV9OT05fRklMVEVSQUJMRVwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdHNbc1RhYklkXS5ub3RBcHBsaWNhYmxlLmZpZWxkcyA9IFtcIm5vbkZpbHRlcmFibGVcIl07XG5cdFx0XHRcdHJlc3VsdHNbc1RhYklkXS5ub3RBcHBsaWNhYmxlLnRpdGxlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19MUl9NVUxUSVZJWl9DSEFSVF9NVUxUSV9OT05fRklMVEVSQUJMRVwiKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHNbc1RhYklkXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBpbm5lciBjb250cm9scy5cblx0ICogQHBhcmFtIGJPbmx5Rm9yVmlzaWJsZVRhYiBTaG91bGQgZGlzcGxheSBvbmx5IHRoZSB2aXNpYmxlIGNvbnRyb2xzXG5cdCAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGNvbnRyb2xzXG5cdCAqL1xuXHRnZXRBbGxJbm5lckNvbnRyb2xzKGJPbmx5Rm9yVmlzaWJsZVRhYiA9IGZhbHNlKTogSW5uZXJDb250cm9sVHlwZVtdIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0dGhpcy5pbm5lckNvbnRyb2xzLnJlZHVjZSgoYUlubmVyQ29udHJvbHM6IElubmVyQ29udHJvbFR5cGVbXSwgc0lubmVyQ29udHJvbDogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9Db250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChzSW5uZXJDb250cm9sKSBhcyBJbm5lckNvbnRyb2xUeXBlO1xuXHRcdFx0XHRpZiAob0NvbnRyb2wpIHtcblx0XHRcdFx0XHRhSW5uZXJDb250cm9scy5wdXNoKG9Db250cm9sKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gYUlubmVyQ29udHJvbHMuZmlsdGVyKFxuXHRcdFx0XHRcdChvSW5uZXJDb250cm9sKSA9PiAhYk9ubHlGb3JWaXNpYmxlVGFiIHx8IHRoaXMuX2dldFRhYkZyb21Jbm5lckNvbnRyb2wob0lubmVyQ29udHJvbCk/LmdldFZpc2libGUoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSwgW10pIHx8IFtdXG5cdFx0KTtcblx0fVxuXG5cdF9nZXRGaWx0ZXJDb250cm9sKCk6IEZpbHRlckJhciB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5maWx0ZXJDb250cm9sKSBhcyBGaWx0ZXJCYXIgfCB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0VGFiRnJvbUlubmVyQ29udHJvbChvQ29udHJvbDogQ29udHJvbCk6IEljb25UYWJGaWx0ZXIgfCB1bmRlZmluZWQge1xuXHRcdGxldCBvVGFiOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkID0gb0NvbnRyb2w7XG5cdFx0aWYgKG9UYWIgJiYgIW9UYWIuaXNBPEljb25UYWJGaWx0ZXI+KFwic2FwLm0uSWNvblRhYkZpbHRlclwiKSAmJiAob1RhYiBhcyB7IGdldFBhcmVudD86IEZ1bmN0aW9uIH0pLmdldFBhcmVudCkge1xuXHRcdFx0b1RhYiA9IG9Db250cm9sLmdldFBhcmVudCgpIGFzIFVJNUVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiBvVGFiICYmIG9UYWIuaXNBPEljb25UYWJGaWx0ZXI+KFwic2FwLm0uSWNvblRhYkZpbHRlclwiKSA/IG9UYWIgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0Vmlld0NvbnRyb2xsZXIoKTogUGFnZUNvbnRyb2xsZXIge1xuXHRcdGNvbnN0IG9WaWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzKTtcblx0XHRyZXR1cm4gb1ZpZXcgJiYgb1ZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHR9XG5cblx0X3JlZnJlc2hDdXN0b21WaWV3KG9GaWx0ZXJDb25kaXRpb25zOiB1bmtub3duLCBzUmVmcmVzaENhdXNlOiBzdHJpbmcpOiB2b2lkIHtcblx0XHQodGhpcy5fZ2V0Vmlld0NvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcik/Lm9uVmlld05lZWRzUmVmcmVzaD8uKHtcblx0XHRcdGZpbHRlckNvbmRpdGlvbnM6IG9GaWx0ZXJDb25kaXRpb25zLFxuXHRcdFx0Y3VycmVudFRhYklkOiB0aGlzLmNvbnRlbnQuZ2V0U2VsZWN0ZWRLZXkoKSxcblx0XHRcdHJlZnJlc2hDYXVzZTogc1JlZnJlc2hDYXVzZVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgY291bnQgb2YgdGhlIFRhYiBjb250YWluaW5nIHRoZSBtYWNybyBwYXNzZWQgYXMgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gbWFjcm9BUEkgVGhlIGNvbnRlbnQgb2YgdGhlIHRhYiB3ZSB3YW50IHRvIHJlZnJlc2hcblx0ICovXG5cdGFzeW5jIHJlZnJlc2hUYWJDb3VudChtYWNyb0FQSTogSW5uZXJDb250cm9sVHlwZSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGljb25UYWJGaWx0ZXIgPSB0aGlzLl9nZXRUYWJGcm9tSW5uZXJDb250cm9sKG1hY3JvQVBJKTtcblx0XHRpZiAoIWljb25UYWJGaWx0ZXIpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKG1hY3JvQVBJPy5nZXRDb3VudHMpIHtcblx0XHRcdGljb25UYWJGaWx0ZXIuc2V0Q291bnQoXCIuLi5cIik7XG5cdFx0XHRhd2FpdCB0aGlzLl9nZXRWaWV3Q29udHJvbGxlcigpLmVkaXRGbG93LnN5bmNUYXNrKCk7IC8vIGVuc3VyZSBhbGwgcGVuZGluZyBjaGFuZ2VzIGFyZSBkb25lIGJlZm9yZSByZWZyZXNoaW5nIGNvdW50c1xuXHRcdFx0bWFjcm9BUElcblx0XHRcdFx0LmdldENvdW50cygpXG5cdFx0XHRcdC50aGVuKChjb3VudDogc3RyaW5nKTogSWNvblRhYkZpbHRlciA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGljb25UYWJGaWx0ZXIuc2V0Q291bnQoY291bnQgfHwgXCIwXCIpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yOiB1bmtub3duKTogdm9pZCB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBFcnJvciB3aGlsZSByZXF1ZXN0aW5nIENvdW50cyBmb3IgQ29udHJvbDogJHtlcnJvcn1gKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0aW50ZXJuYWxSZWZyZXNoVGFic0NvdW50KHRhYmxlRXZlbnQ/OiBDb3JlRXZlbnQpOiB2b2lkIHtcblx0XHQvLyBJZiB0aGUgcmVmcmVzaCBpcyB0cmlnZ2VyZWQgYnkgYW4gZXZlbnQgKGludGVybmFsRGF0YVJlcXVlc3RlZClcblx0XHQvLyB3ZSBjYW5ub3QgdXNlIHRoZSBzZWxlY3RlZCBrZXkgYXMgcmVmZXJlbmNlIHNpbmNlIHRhYmxlIGNhbiBiZSByZWZyZXNoZWQgYnkgU2lkZUVmZmVjdHNcblx0XHQvLyBzbyB0aGUgdGFibGUgY291bGQgYmUgaW50byBhIGRpZmZlcmVudCB0YWIgLT4gd2UgdXNlIHRoZSBzb3VyY2Ugb2YgdGhlIGV2ZW50IHRvIGZpbmQgdGhlIHRhcmdldGVkIHRhYlxuXHRcdC8vIElmIG5vdCB0cmlnZ2VyZWQgYnkgYW4gZXZlbnQgLT4gcmVmcmVzaCBhdCBsZWFzdCB0aGUgY291bnRzIG9mIHRoZSBjdXJyZW50IE1hY3JvQVBJXG5cdFx0Y29uc3QgZXZlbnRNYWNyb0FQSSA9IHRhYmxlRXZlbnQ/LmdldFNvdXJjZSgpIGFzIE1hY3JvQVBJO1xuXHRcdGNvbnN0IHRhcmdldEtleSA9IGV2ZW50TWFjcm9BUEkgPyB0aGlzLl9nZXRUYWJGcm9tSW5uZXJDb250cm9sKGV2ZW50TWFjcm9BUEkpPy5nZXRLZXkoKSA6IHRoaXMuY29udGVudD8uZ2V0U2VsZWN0ZWRLZXkoKTtcblx0XHRpZiAodHlwZW9mIHRhcmdldEtleSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0aWYgKHRhcmdldEtleSA9PT0gXCJcIikge1xuXHRcdFx0XHRjb25zdCB0YWJLZXlzID0gdGhpcy5jb250ZW50Py5nZXRJdGVtcygpLm1hcCgodGFiKSA9PiAodGFiIGFzIEljb25UYWJGaWx0ZXIpLmdldEtleSgpLnNwbGl0KFwiOjpcIilbMl0pID8/IFtdO1xuXHRcdFx0XHR0aGlzLnJlZnJlc2hUYWJzQ291bnQodGFiS2V5cyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnJlZnJlc2hUYWJzQ291bnQoW3RhcmdldEtleS5zcGxpdChcIjo6XCIpWzJdXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlZnJlc2hlcyB0aGUgY291bnQgb2YgdGhlIHZpZXdzIGluIHRoZSBNdWx0aU1vZGUgY29udHJvbC5cblx0ICogQHBhcmFtIFtrZXlzXSBUaGUgbGlzdCBvZiB0aGUga2V5cyBpZGVudGlmeWluZyB0aGUgdmlld3MgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgZm9yIHdoaWNoIHRoZSB2aWV3cycgY291bnQgd2lsbCBiZSByZWZyZXNoZWQuIElmIG5vdCBwcm92aWRlZCwgYWxsIHRoZSB2aWV3cycgY291bnQgd2lsbCBiZSByZWZyZXNoZWRcblx0ICovXG5cdHJlZnJlc2hUYWJzQ291bnQoa2V5cz86IHN0cmluZ1tdKTogdm9pZCB7XG5cdFx0aWYgKCFrZXlzKSB7XG5cdFx0XHR0aGlzLnNldENvdW50c091dERhdGVkKHRydWUpO1xuXHRcdH1cblx0XHR0aGlzLmdldEFsbElubmVyQ29udHJvbHModHJ1ZSkuZm9yRWFjaCgob01hY3JvQVBJKTogdm9pZCA9PiB7XG5cdFx0XHRjb25zdCBvSWNvblRhYkZpbHRlciA9IHRoaXMuX2dldFRhYkZyb21Jbm5lckNvbnRyb2wob01hY3JvQVBJKTtcblx0XHRcdGlmICh0aGlzLmNvdW50c091dERhdGVkIHx8IChrZXlzICYmIG9JY29uVGFiRmlsdGVyICYmIGtleXMuaW5jbHVkZXMob0ljb25UYWJGaWx0ZXIuZ2V0S2V5KCkuc3BsaXQoXCI6OlwiKVsyXSkpKSB7XG5cdFx0XHRcdHRoaXMucmVmcmVzaFRhYkNvdW50KG9NYWNyb0FQSSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0dGhpcy5zZXRDb3VudHNPdXREYXRlZChmYWxzZSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVmcmVzaGVzIHRoZSBjb250ZW50IG9mIHRoZSB1bmRlcmx5aW5nIHZpZXdzIHVwb24gdGhlIG5leHQgb3BlbmluZy5cblx0ICogTm90ZTogVGhlIGNvbnRlbnQgb2YgdGhlIHNlbGVjdGVkIHZpZXcsIGlmIHBhcnQgb2YgdGhlIHByb3ZpZGVkIGtleXMsIHdpbGwgYmUgcmVmcmVzaGVkIGltbWVkaWF0ZWx5LlxuXHQgKiBAcGFyYW0gW2tleXNdIFRoZSBsaXN0IG9mIHRoZSBrZXlzIGlkZW50aWZ5aW5nIHRoZSB2aWV3cyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBmb3Igd2hpY2ggdGhlIHZpZXdzJyBjb250ZW50IHdpbGwgYmUgcmVmcmVzaGVkLiBJZiBub3QgcHJvdmlkZWQsIGFsbCB0aGUgdmlld3MnIGNvbnRlbnQgd2lsbCBiZSByZWZyZXNoZWRcblx0ICovXG5cdHNldFRhYkNvbnRlbnRUb0JlUmVmcmVzaGVkT25OZXh0T3BlbmluZyhrZXlzPzogc3RyaW5nW10pOiB2b2lkIHtcblx0XHRjb25zdCBzZWxlY3RlZFRhYktleSA9IHRoaXM/LmNvbnRlbnQuZ2V0U2VsZWN0ZWRLZXkoKTtcblx0XHRjb25zdCB0YWJLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IHJlZnJlc2hTZWxlY3RlZFRhYkNvbnRlbnQgPSBrZXlzID8ga2V5cy5pbmNsdWRlcyhzZWxlY3RlZFRhYktleT8uc3BsaXQoXCI6OlwiKVsyXSkgOiB0cnVlO1xuXHRcdGlmIChrZXlzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG5cdFx0XHRcdGlmIChzZWxlY3RlZFRhYktleSAhPT0gYGZlOjp0YWJsZTo6JHtrZXl9OjpMaW5lSXRlbWAgJiYgc2VsZWN0ZWRUYWJLZXkgIT09IGBmZTo6Q3VzdG9tVGFiOjoke2tleX1gKSB7XG5cdFx0XHRcdFx0dGFiS2V5cy5wdXNoKGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcz8uZ2V0QWxsSW5uZXJDb250cm9scygpLmZvckVhY2goKG1hY3JvQVBJKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGljb25UYWJGaWx0ZXIgPSB0aGlzPy5fZ2V0VGFiRnJvbUlubmVyQ29udHJvbChtYWNyb0FQSSk7XG5cdFx0XHRcdGlmIChpY29uVGFiRmlsdGVyICYmIGljb25UYWJGaWx0ZXIuZ2V0S2V5KCkgIT09IHNlbGVjdGVkVGFiS2V5KSB7XG5cdFx0XHRcdFx0dGFiS2V5cy5wdXNoKGljb25UYWJGaWx0ZXIuZ2V0S2V5KCkuc3BsaXQoXCI6OlwiKVsyXSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHR0aGlzPy5pbnZhbGlkYXRlQ29udGVudCh0YWJLZXlzKTtcblx0XHRpZiAocmVmcmVzaFNlbGVjdGVkVGFiQ29udGVudCkge1xuXHRcdFx0dGhpcz8ucmVmcmVzaFNlbGVjdGVkSW5uZXJDb250cm9sQ29udGVudCgpO1xuXHRcdH1cblx0fVxuXG5cdF9zZXRJbm5lckJpbmRpbmcoYlJlcXVlc3RJZk5vdEluaXRpYWxpemVkID0gZmFsc2UpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5jb250ZW50KSB7XG5cdFx0XHR0aGlzLmdldEFsbElubmVyQ29udHJvbHMoKS5mb3JFYWNoKChvTWFjcm9BUEkpID0+IHtcblx0XHRcdFx0Y29uc3Qgb0ljb25UYWJGaWx0ZXIgPSB0aGlzLl9nZXRUYWJGcm9tSW5uZXJDb250cm9sKG9NYWNyb0FQSSk7XG5cdFx0XHRcdGNvbnN0IGJJc1NlbGVjdGVkS2V5ID0gb0ljb25UYWJGaWx0ZXI/LmdldEtleSgpID09PSB0aGlzLmNvbnRlbnQuZ2V0U2VsZWN0ZWRLZXkoKTtcblx0XHRcdFx0Y29uc3Qgc0FjdGlvbiA9IGJJc1NlbGVjdGVkS2V5ICYmICF0aGlzLmdldFByb3BlcnR5KFwiZnJlZXplQ29udGVudFwiKSA/IEJpbmRpbmdBY3Rpb24uUmVzdW1lIDogQmluZGluZ0FjdGlvbi5TdXNwZW5kO1xuXHRcdFx0XHRvTWFjcm9BUElbc0FjdGlvbl0/LihzQWN0aW9uID09PSBCaW5kaW5nQWN0aW9uLlJlc3VtZSA/IGJSZXF1ZXN0SWZOb3RJbml0aWFsaXplZCAmJiBiSXNTZWxlY3RlZEtleSA6IHVuZGVmaW5lZCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRfc2V0VGFiTWVzc2FnZVN0cmlwKHByb3BlcnRpZXM6IE1lc3NhZ2VTdHJpcFByb3BlcnRpZXMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGxldCBzVGV4dCA9IFwiXCI7XG5cdFx0Y29uc3QgYUlnbm9yZWRGaWVsZHMgPSBwcm9wZXJ0aWVzLmlnbm9yZWRGaWVsZHM7XG5cdFx0Y29uc3Qgb0ZpbHRlckNvbnRyb2wgPSB0aGlzLl9nZXRGaWx0ZXJDb250cm9sKCkgYXMgQ29udHJvbDtcblx0XHRpZiAob0ZpbHRlckNvbnRyb2wgJiYgQXJyYXkuaXNBcnJheShhSWdub3JlZEZpZWxkcykgJiYgYUlnbm9yZWRGaWVsZHMubGVuZ3RoID4gMCAmJiBwcm9wZXJ0aWVzLnRpdGxlKSB7XG5cdFx0XHRjb25zdCBhSWdub3JlZExhYmVscyA9IE1lc3NhZ2VTdHJpcC5nZXRMYWJlbHMoXG5cdFx0XHRcdGFJZ25vcmVkRmllbGRzLFxuXHRcdFx0XHRwcm9wZXJ0aWVzLmVudGl0eVR5cGVQYXRoLFxuXHRcdFx0XHRvRmlsdGVyQ29udHJvbCxcblx0XHRcdFx0Z2V0UmVzb3VyY2VNb2RlbChvRmlsdGVyQ29udHJvbClcblx0XHRcdCk7XG5cdFx0XHRzVGV4dCA9IE1lc3NhZ2VTdHJpcC5nZXRUZXh0KGFJZ25vcmVkTGFiZWxzLCBvRmlsdGVyQ29udHJvbCwgcHJvcGVydGllcy50aXRsZSk7XG5cdFx0XHRyZXR1cm4gc1RleHQ7XG5cdFx0fVxuXHR9XG5cblx0X29uU2VhcmNoKG9FdmVudDogQ29yZUV2ZW50PHsgY29uZGl0aW9uczogdW5rbm93biB9Pik6IHZvaWQge1xuXHRcdHRoaXMuc2V0Q291bnRzT3V0RGF0ZWQodHJ1ZSk7XG5cdFx0dGhpcy5zZXRGcmVlemVDb250ZW50KGZhbHNlKTtcblx0XHRpZiAodGhpcy5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpKSB7XG5cdFx0XHR0aGlzLl91cGRhdGVNdWx0aVRhYk5vdEFwcGxpY2FibGVGaWVsZHMoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gY3VzdG9tIHRhYlxuXHRcdFx0dGhpcy5fcmVmcmVzaEN1c3RvbVZpZXcob0V2ZW50LmdldFBhcmFtZXRlcihcImNvbmRpdGlvbnNcIiksIFwic2VhcmNoXCIpO1xuXHRcdH1cblx0fVxuXG5cdF9vbkZpbHRlckNoYW5nZWQob0V2ZW50OiBDb3JlRXZlbnQ8eyBjb25kaXRpb25zQmFzZWQ6IGJvb2xlYW4gfT4pOiB2b2lkIHtcblx0XHRpZiAob0V2ZW50LmdldFBhcmFtZXRlcihcImNvbmRpdGlvbnNCYXNlZFwiKSkge1xuXHRcdFx0dGhpcy5zZXRGcmVlemVDb250ZW50KHRydWUpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBNdWx0aXBsZU1vZGVDb250cm9sO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUF1Q0tBLGFBQWEsMEJBQWJBLGFBQWE7SUFBYkEsYUFBYTtJQUFiQSxhQUFhO0lBQUEsT0FBYkEsYUFBYTtFQUFBLEVBQWJBLGFBQWE7RUFBQSxJQU1aQyxtQkFBbUIsSUFBQUMsSUFBQSxHQUR4QkMsY0FBYyxDQUFDLDBEQUEwRCxDQUFDLEVBQUFDLEtBQUEsR0FFekVDLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBVSxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUc3QkYsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRSxTQUFTO0lBQUVFLFlBQVksRUFBRTtFQUFNLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBR2xESixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFLFNBQVM7SUFBRUUsWUFBWSxFQUFFO0VBQU0sQ0FBQyxDQUFDLEVBQUFFLEtBQUEsR0FHbERMLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUUsU0FBUztJQUFFRSxZQUFZLEVBQUU7RUFBTSxDQUFDLENBQUMsRUFBQUcsS0FBQSxHQUdsREMsV0FBVyxDQUFDO0lBQUVOLElBQUksRUFBRSxrQkFBa0I7SUFBRU8sUUFBUSxFQUFFLEtBQUs7SUFBRUMsU0FBUyxFQUFFO0VBQUssQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHM0VDLFdBQVcsQ0FBQztJQUFFVixJQUFJLEVBQUUscUJBQXFCO0lBQUVPLFFBQVEsRUFBRTtFQUFLLENBQUMsQ0FBQyxFQUFBSSxLQUFBLEdBRzVERCxXQUFXLENBQUM7SUFBRVYsSUFBSSxFQUFFLGtDQUFrQztJQUFFTyxRQUFRLEVBQUU7RUFBTSxDQUFDLENBQUMsRUFBQUssS0FBQSxHQUcxRUMsS0FBSyxDQUFDLENBQUMsRUFBQWpCLElBQUEsQ0FBQWtCLE1BQUEsSUFBQUMsT0FBQSwwQkFBQUMsUUFB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
@@ -73,6 +73,29 @@ class MultipleModeControl extends Control {
73
73
  settings?: $ControlSettings & PropertiesOf<MultipleModeControl>
74
74
  ) {
75
75
  super(id as string, settings);
76
+ this.content?.addEventDelegate({
77
+ onAfterRendering: this.onAfterIconTabBarRendering.bind(this)
78
+ });
79
+ }
80
+
81
+ onAfterIconTabBarRendering(): void {
82
+ this.getSelectedInnerControl()?.resumeBinding?.(!this.getProperty("freezeContent"));
83
+ if (this.showCounts && !this.setVisibleOverridden) {
84
+ this.setProperty("setVisibleOverridden", true);
85
+ this.getAllInnerControls().forEach((macroAPI: MacroAPI): void => {
86
+ const iconTabFilter = this._getTabFromInnerControl(macroAPI);
87
+ // No count to show
88
+ if (!iconTabFilter) return;
89
+
90
+ const originSetVisible = iconTabFilter.setVisible;
91
+ iconTabFilter.setVisible = (value: boolean): IconTabFilter => {
92
+ if (iconTabFilter.getVisible() === false && value) {
93
+ this.refreshTabCount(macroAPI);
94
+ }
95
+ return originSetVisible.bind(iconTabFilter)(value);
96
+ };
97
+ });
98
+ }
76
99
  }
77
100
 
78
101
  onBeforeRendering(): void {
@@ -96,26 +119,6 @@ class MultipleModeControl extends Control {
96
119
  }
97
120
  }
98
121
 
99
- onAfterRendering(): void {
100
- this.getSelectedInnerControl()?.resumeBinding?.(!this.getProperty("freezeContent"));
101
- if (this.showCounts && !this.setVisibleOverridden) {
102
- this.setProperty("setVisibleOverridden", true);
103
- this.getAllInnerControls().forEach((macroAPI: MacroAPI): void => {
104
- const iconTabFilter = this._getTabFromInnerControl(macroAPI);
105
- // No count to show
106
- if (!iconTabFilter) return;
107
-
108
- const originSetVisible = iconTabFilter.setVisible;
109
- iconTabFilter.setVisible = (value: boolean): IconTabFilter => {
110
- if (iconTabFilter.getVisible() === false && value) {
111
- this.refreshTabCount(macroAPI);
112
- }
113
- return originSetVisible.bind(iconTabFilter)(value);
114
- };
115
- });
116
- }
117
- }
118
-
119
122
  static render(oRm: RenderManager, oControl: MultipleModeControl): void {
120
123
  oRm.renderControl(oControl.content);
121
124
  }
@@ -5,7 +5,7 @@
5
5
  "type": "component",
6
6
  "i18n": "../messagebundle.properties",
7
7
  "applicationVersion": {
8
- "version": "1.143.0"
8
+ "version": "1.145.0"
9
9
  },
10
10
  "title": "List Report",
11
11
  "tags": {
@@ -14,7 +14,10 @@ sap.ui.define(["sap/fe/core/CommonUtils"], function (CommonUtils) {
14
14
  const getCurrentPageView = CommonUtils.getCurrentPageView(appComponent);
15
15
  const currentPageViewID = getCurrentPageView?.getId();
16
16
  const baseViewID = this.base.getView()?.getId();
17
- if (currentPageViewID !== baseViewID) {
17
+ //In FCL scenarios, multiple pages can be visible simultaneously (List Report + Object Page in columns).
18
+ //The original logic prevents showing bound messages from background columns.
19
+ //In non-FCL apps where only one page is visible at a time, this filtering isn't necessary.
20
+ if (appComponent._isFclEnabled() && currentPageViewID !== baseViewID) {
18
21
  return false;
19
22
  }
20
23
  return true;
@@ -22,4 +25,4 @@ sap.ui.define(["sap/fe/core/CommonUtils"], function (CommonUtils) {
22
25
  };
23
26
  return MessageHandlerLRExtension;
24
27
  }, false);
25
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlSGFuZGxlckxSRXh0ZW5zaW9uIiwiZ2V0U2hvd0JvdW5kTWVzc2FnZXNJbk1lc3NhZ2VEaWFsb2ciLCJhcHBDb21wb25lbnQiLCJiYXNlIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0Q3VycmVudFBhZ2VWaWV3IiwiQ29tbW9uVXRpbHMiLCJjdXJyZW50UGFnZVZpZXdJRCIsImdldElkIiwiYmFzZVZpZXdJRCIsImdldFZpZXciXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk1lc3NhZ2VIYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuLy8gaW1wb3J0IHR5cGUgTmF2Q29udGFpbmVyIGZyb20gXCJzYXAvbS9OYXZDb250YWluZXJcIjtcblxuY29uc3QgTWVzc2FnZUhhbmRsZXJMUkV4dGVuc2lvbiA9IHtcblx0Z2V0U2hvd0JvdW5kTWVzc2FnZXNJbk1lc3NhZ2VEaWFsb2c6IGZ1bmN0aW9uICh0aGlzOiBNZXNzYWdlSGFuZGxlcik6IGJvb2xlYW4ge1xuXHRcdC8vIEZvciBMaXN0IFJlcG9ydCwgZGV0ZXJtaW5lcyB3aGV0aGVyIGJvdW5kIG1lc3NhZ2VzIHNob3VsZCBiZSBzaG93biBpbiBhIGRpYWxvZyBvciBub3Rcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0Y29uc3QgZ2V0Q3VycmVudFBhZ2VWaWV3ID0gQ29tbW9uVXRpbHMuZ2V0Q3VycmVudFBhZ2VWaWV3KGFwcENvbXBvbmVudCk7XG5cdFx0Y29uc3QgY3VycmVudFBhZ2VWaWV3SUQgPSBnZXRDdXJyZW50UGFnZVZpZXc/LmdldElkKCk7XG5cdFx0Y29uc3QgYmFzZVZpZXdJRCA9IHRoaXMuYmFzZS5nZXRWaWV3KCk/LmdldElkKCk7XG5cblx0XHRpZiAoY3VycmVudFBhZ2VWaWV3SUQgIT09IGJhc2VWaWV3SUQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IE1lc3NhZ2VIYW5kbGVyTFJFeHRlbnNpb247XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7RUFFQTs7RUFFQSxNQUFNQSx5QkFBeUIsR0FBRztJQUNqQ0MsbUNBQW1DLEVBQUUsU0FBQUEsQ0FBQSxFQUF5QztNQUM3RTtNQUNBLE1BQU1DLFlBQVksR0FBRyxJQUFJLENBQUNDLElBQUksQ0FBQ0MsZUFBZSxDQUFDLENBQUM7TUFDaEQsTUFBTUMsa0JBQWtCLEdBQUdDLFdBQVcsQ0FBQ0Qsa0JBQWtCLENBQUNILFlBQVksQ0FBQztNQUN2RSxNQUFNSyxpQkFBaUIsR0FBR0Ysa0JBQWtCLEVBQUVHLEtBQUssQ0FBQyxDQUFDO01BQ3JELE1BQU1DLFVBQVUsR0FBRyxJQUFJLENBQUNOLElBQUksQ0FBQ08sT0FBTyxDQUFDLENBQUMsRUFBRUYsS0FBSyxDQUFDLENBQUM7TUFFL0MsSUFBSUQsaUJBQWlCLEtBQUtFLFVBQVUsRUFBRTtRQUNyQyxPQUFPLEtBQUs7TUFDYjtNQUNBLE9BQU8sSUFBSTtJQUNaO0VBQ0QsQ0FBQztFQUFDLE9BRWFULHlCQUF5QjtBQUFBIiwiaWdub3JlTGlzdCI6W119
28
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlSGFuZGxlckxSRXh0ZW5zaW9uIiwiZ2V0U2hvd0JvdW5kTWVzc2FnZXNJbk1lc3NhZ2VEaWFsb2ciLCJhcHBDb21wb25lbnQiLCJiYXNlIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0Q3VycmVudFBhZ2VWaWV3IiwiQ29tbW9uVXRpbHMiLCJjdXJyZW50UGFnZVZpZXdJRCIsImdldElkIiwiYmFzZVZpZXdJRCIsImdldFZpZXciLCJfaXNGY2xFbmFibGVkIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNZXNzYWdlSGFuZGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlSGFuZGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbi8vIGltcG9ydCB0eXBlIE5hdkNvbnRhaW5lciBmcm9tIFwic2FwL20vTmF2Q29udGFpbmVyXCI7XG5cbmNvbnN0IE1lc3NhZ2VIYW5kbGVyTFJFeHRlbnNpb24gPSB7XG5cdGdldFNob3dCb3VuZE1lc3NhZ2VzSW5NZXNzYWdlRGlhbG9nOiBmdW5jdGlvbiAodGhpczogTWVzc2FnZUhhbmRsZXIpOiBib29sZWFuIHtcblx0XHQvLyBGb3IgTGlzdCBSZXBvcnQsIGRldGVybWluZXMgd2hldGhlciBib3VuZCBtZXNzYWdlcyBzaG91bGQgYmUgc2hvd24gaW4gYSBkaWFsb2cgb3Igbm90XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdGNvbnN0IGdldEN1cnJlbnRQYWdlVmlldyA9IENvbW1vblV0aWxzLmdldEN1cnJlbnRQYWdlVmlldyhhcHBDb21wb25lbnQpO1xuXHRcdGNvbnN0IGN1cnJlbnRQYWdlVmlld0lEID0gZ2V0Q3VycmVudFBhZ2VWaWV3Py5nZXRJZCgpO1xuXHRcdGNvbnN0IGJhc2VWaWV3SUQgPSB0aGlzLmJhc2UuZ2V0VmlldygpPy5nZXRJZCgpO1xuXHRcdC8vSW4gRkNMIHNjZW5hcmlvcywgbXVsdGlwbGUgcGFnZXMgY2FuIGJlIHZpc2libGUgc2ltdWx0YW5lb3VzbHkgKExpc3QgUmVwb3J0ICsgT2JqZWN0IFBhZ2UgaW4gY29sdW1ucykuXG5cdFx0Ly9UaGUgb3JpZ2luYWwgbG9naWMgcHJldmVudHMgc2hvd2luZyBib3VuZCBtZXNzYWdlcyBmcm9tIGJhY2tncm91bmQgY29sdW1ucy5cblx0XHQvL0luIG5vbi1GQ0wgYXBwcyB3aGVyZSBvbmx5IG9uZSBwYWdlIGlzIHZpc2libGUgYXQgYSB0aW1lLCB0aGlzIGZpbHRlcmluZyBpc24ndCBuZWNlc3NhcnkuXG5cdFx0aWYgKGFwcENvbXBvbmVudC5faXNGY2xFbmFibGVkKCkgJiYgY3VycmVudFBhZ2VWaWV3SUQgIT09IGJhc2VWaWV3SUQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IE1lc3NhZ2VIYW5kbGVyTFJFeHRlbnNpb247XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7RUFFQTs7RUFFQSxNQUFNQSx5QkFBeUIsR0FBRztJQUNqQ0MsbUNBQW1DLEVBQUUsU0FBQUEsQ0FBQSxFQUF5QztNQUM3RTtNQUNBLE1BQU1DLFlBQVksR0FBRyxJQUFJLENBQUNDLElBQUksQ0FBQ0MsZUFBZSxDQUFDLENBQUM7TUFDaEQsTUFBTUMsa0JBQWtCLEdBQUdDLFdBQVcsQ0FBQ0Qsa0JBQWtCLENBQUNILFlBQVksQ0FBQztNQUN2RSxNQUFNSyxpQkFBaUIsR0FBR0Ysa0JBQWtCLEVBQUVHLEtBQUssQ0FBQyxDQUFDO01BQ3JELE1BQU1DLFVBQVUsR0FBRyxJQUFJLENBQUNOLElBQUksQ0FBQ08sT0FBTyxDQUFDLENBQUMsRUFBRUYsS0FBSyxDQUFDLENBQUM7TUFDL0M7TUFDQTtNQUNBO01BQ0EsSUFBSU4sWUFBWSxDQUFDUyxhQUFhLENBQUMsQ0FBQyxJQUFJSixpQkFBaUIsS0FBS0UsVUFBVSxFQUFFO1FBQ3JFLE9BQU8sS0FBSztNQUNiO01BQ0EsT0FBTyxJQUFJO0lBQ1o7RUFDRCxDQUFDO0VBQUMsT0FFYVQseUJBQXlCO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -9,8 +9,10 @@ const MessageHandlerLRExtension = {
9
9
  const getCurrentPageView = CommonUtils.getCurrentPageView(appComponent);
10
10
  const currentPageViewID = getCurrentPageView?.getId();
11
11
  const baseViewID = this.base.getView()?.getId();
12
-
13
- if (currentPageViewID !== baseViewID) {
12
+ //In FCL scenarios, multiple pages can be visible simultaneously (List Report + Object Page in columns).
13
+ //The original logic prevents showing bound messages from background columns.
14
+ //In non-FCL apps where only one page is visible at a time, this filtering isn't necessary.
15
+ if (appComponent._isFclEnabled() && currentPageViewID !== baseViewID) {
14
16
  return false;
15
17
  }
16
18
  return true;
@@ -174,4 +174,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/ui/core/routing/H
174
174
  };
175
175
  return ShareOverride;
176
176
  }, false);
177
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRDb3VudFVybCIsIm9Db250cm9sbGVyIiwib1RhYmxlIiwiX2dldFRhYmxlIiwidGFibGVBUEkiLCJnZXRQYXJlbnQiLCJkb3dubG9hZFVybCIsImdldERvd25sb2FkVXJsV2l0aEZpbHRlcnMiLCJzcGxpdFVybCIsInNwbGl0IiwiYmFzZVVybCIsInN1cHBvcnRlZFBhcmFtcyIsImxlbmd0aCIsInVybFBhcmFtcyIsImZvckVhY2giLCJ1cmxQYXJhbSIsInVybFBhcmFtUGFydHMiLCJwdXNoIiwiam9pbiIsImdldFNoYXJlRW1haWxVcmwiLCJvVVNoZWxsQ29udGFpbmVyIiwic2FwIiwidWkiLCJyZXF1aXJlIiwiZ2V0RkxQVXJsQXN5bmMiLCJ0aGVuIiwiZkxQVXJsIiwiY2F0Y2giLCJzRXJyb3IiLCJMb2ciLCJlcnJvciIsIlByb21pc2UiLCJyZXNvbHZlIiwiZG9jdW1lbnQiLCJVUkwiLCJnZXRTYXZlQXNUaWxlU2VydmljZVVybCIsImNvbnRyb2xsZXIiLCJvRmlsdGVyQmFyIiwiX2dldEZpbHRlckJhckNvbnRyb2wiLCJnZXRKYW1VcmwiLCJzSGFzaCIsIkhhc2hDaGFuZ2VyIiwiZ2V0SW5zdGFuY2UiLCJnZXRIYXNoIiwic0Jhc2VQYXRoIiwiaHJlZkZvckFwcFNwZWNpZmljSGFzaCIsImphbVVybCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaGFzaCIsInVzaGVsbENvbnRhaW5lciIsInJ1bm5pbmdJbklmcmFtZSIsImdldEZMUFVybCIsInNVcmwiLCJzdWJzdHJpbmciLCJpbmRleE9mIiwib3JpZ2luIiwicGF0aG5hbWUiLCJnZXRVcmxGb3JTYXZlQXNUaWxlIiwidmlldyIsInNoYXJlTWV0YWRhdGEiLCJhcHBDb21wb25lbnQiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsInJvdXRlclByb3h5IiwiZ2V0Um91dGVyUHJveHkiLCJyb290Vmlld0NvbnRyb2xsZXIiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJiYXNlUGF0aCIsImdldEFwcFNwZWNpZmljSGFzaCIsInNhdmVBc1RpbGVBcHBTdGF0ZSIsImdldEFwcFN0YXRlSGFuZGxlciIsImNyZWF0ZUFwcFN0YXRlIiwicmVwbGFjZUhhc2giLCJza2lwTWVyZ2UiLCJuZXdLZXkiLCJhcHBTdGF0ZUtleSIsInRpbGUiLCJ1cmwiLCJzZXRBcHBTdGF0ZUluSGFzaCIsInN5bmNUYWJsZURhdGFXaXRoR29DbGljayIsImZpbHRlckJhciIsImdldFZpZXciLCJnZXRCaW5kaW5nQ29udGV4dCIsImdldFByb3BlcnR5IiwidGFibGUiLCJiaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsImdldEJpbmRpbmciLCJhdHRhY2hFdmVudE9uY2UiLCJ0cmlnZ2VyU2VhcmNoIiwiZXJyIiwic2hhcmVJbmZvTW9kZWwiLCJnZXRNb2RlbCIsInNldFByb3BlcnR5IiwibWVzc2FnZSIsIkVycm9yIiwiU3RyaW5nIiwiZ2V0U2F2ZUFzVGlsZU1ldGFkYXRhIiwiZ2V0Q29udHJvbGxlciIsIm1hbmlmZXN0Q29uZmlndXJhdGlvbiIsImdldE1hbmlmZXN0IiwidUlNYW5pZmVzdCIsImljb24iLCJpY29ucyIsImFwcE1hbmlmZXN0IiwidGl0bGUiLCJxdWVyeVVybCIsIlNoYXJlT3ZlcnJpZGUiLCJhZGFwdFNoYXJlTWV0YWRhdGEiLCJiYXNlIiwiamFtIiwidGVhbXNVcmwiLCJnZXRUZWFtc1VybCIsImVtYWlsIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJTaGFyZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQXBwRGF0YUluZm8gfSBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwU3RhdGVIYW5kbGVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBTaGFyZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2hhcmVcIjtcbmltcG9ydCB0eXBlIHsgU2hhcmVNZXRhZGF0YSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaGFyZVwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbGxlciBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgSGFzaENoYW5nZXIgZnJvbSBcInNhcC91aS9jb3JlL3JvdXRpbmcvSGFzaENoYW5nZXJcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBMaXN0UmVwb3J0Q29udHJvbGxlciBmcm9tIFwiLi4vTGlzdFJlcG9ydENvbnRyb2xsZXIuY29udHJvbGxlclwiO1xuXG5hc3luYyBmdW5jdGlvbiBnZXRDb3VudFVybChvQ29udHJvbGxlcjogTGlzdFJlcG9ydENvbnRyb2xsZXIpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRjb25zdCBvVGFibGUgPSBvQ29udHJvbGxlci5fZ2V0VGFibGU/LigpO1xuXHRpZiAoIW9UYWJsZSkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cdGNvbnN0IHRhYmxlQVBJID0gb1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRjb25zdCBkb3dubG9hZFVybCA9IGF3YWl0IHRhYmxlQVBJLmdldERvd25sb2FkVXJsV2l0aEZpbHRlcnMoKTtcblx0Y29uc3Qgc3BsaXRVcmwgPSBkb3dubG9hZFVybC5zcGxpdChcIj9cIik7XG5cdGNvbnN0IGJhc2VVcmwgPSBgJHtzcGxpdFVybFswXX0vJGNvdW50P2A7XG5cdC8vIGdldERvd25sb2FkVXJsKCkgcmV0dXJucyB1cmwgd2l0aCAkc2VsZWN0LCAkZXhwYW5kIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgd2hlbiAvJGNvdW50IGlzIHVzZWQgdG8gZ2V0IHRoZSByZWNvcmQgY291bnQuIG9ubHkgJGFwcGx5LCAkc2VhcmNoLCAkZmlsdGVyIGlzIHN1cHBvcnRlZFxuXHQvLyA/JGNvdW50PXRydWUgcmV0dXJucyBjb3VudCBpbiBhIGZvcm1hdCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGJ5IEZMUCB5ZXQuXG5cdC8vIGN1cnJlbnRseSBzdXBwb3J0ZWQgZm9ybWF0IGZvciB2NCBpcyAuLi9jb3VudC4uIG9ubHkgKHdoZXJlIHRpbGUgcHJldmlldyB3aWxsIHN0aWxsIG5vdCB3b3JrKVxuXHRjb25zdCBzdXBwb3J0ZWRQYXJhbXM6IHN0cmluZ1tdID0gW107XG5cdGlmIChzcGxpdFVybC5sZW5ndGggPiAxKSB7XG5cdFx0Y29uc3QgdXJsUGFyYW1zID0gc3BsaXRVcmxbMV07XG5cdFx0dXJsUGFyYW1zLnNwbGl0KFwiJlwiKS5mb3JFYWNoKGZ1bmN0aW9uICh1cmxQYXJhbTogc3RyaW5nKSB7XG5cdFx0XHRjb25zdCB1cmxQYXJhbVBhcnRzID0gdXJsUGFyYW0uc3BsaXQoXCI9XCIpO1xuXHRcdFx0c3dpdGNoICh1cmxQYXJhbVBhcnRzWzBdKSB7XG5cdFx0XHRcdGNhc2UgXCIkYXBwbHlcIjpcblx0XHRcdFx0Y2FzZSBcIiRzZWFyY2hcIjpcblx0XHRcdFx0Y2FzZSBcIiRmaWx0ZXJcIjpcblx0XHRcdFx0XHRzdXBwb3J0ZWRQYXJhbXMucHVzaCh1cmxQYXJhbSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGJhc2VVcmwgKyBzdXBwb3J0ZWRQYXJhbXMuam9pbihcIiZcIik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFNoYXJlRW1haWxVcmwoKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0Y29uc3Qgb1VTaGVsbENvbnRhaW5lciA9IHNhcC51aS5yZXF1aXJlKFwic2FwL3VzaGVsbC9Db250YWluZXJcIik7XG5cdGlmIChvVVNoZWxsQ29udGFpbmVyKSB7XG5cdFx0cmV0dXJuIG9VU2hlbGxDb250YWluZXJcblx0XHRcdC5nZXRGTFBVcmxBc3luYyh0cnVlKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKGZMUFVybDogc3RyaW5nKSB7XG5cdFx0XHRcdHJldHVybiBmTFBVcmw7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChzRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiQ291bGQgbm90IHJldHJpZXZlIGNGTFAgVVJMIGZvciB0aGUgc2hhcmluZyBkaWFsb2cgKGRpYWxvZyB3aWxsIG5vdCBiZSBvcGVuZWQpXCIsIHNFcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShkb2N1bWVudC5VUkwpO1xuXHR9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFNhdmVBc1RpbGVTZXJ2aWNlVXJsKGNvbnRyb2xsZXI6IENvbnRyb2xsZXIpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRjb25zdCBvRmlsdGVyQmFyID0gKGNvbnRyb2xsZXIgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIpLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdGlmIChvRmlsdGVyQmFyKSB7XG5cdFx0cmV0dXJuIGdldENvdW50VXJsKGNvbnRyb2xsZXIgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIpO1xuXHR9XG5cdHJldHVybiBcIlwiO1xufVxuXG5mdW5jdGlvbiBnZXRKYW1VcmwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgc0hhc2ggPSBIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpLmdldEhhc2goKTtcblx0Y29uc3Qgc0Jhc2VQYXRoID0gSGFzaENoYW5nZXIuZ2V0SW5zdGFuY2UoKS5ocmVmRm9yQXBwU3BlY2lmaWNIYXNoID8gSGFzaENoYW5nZXIuZ2V0SW5zdGFuY2UoKS5ocmVmRm9yQXBwU3BlY2lmaWNIYXNoPy4oXCJcIikgOiBcIlwiO1xuXHRjb25zdCBqYW1VcmwgPSBzSGFzaCA/IHNCYXNlUGF0aCArIHNIYXNoIDogd2luZG93LmxvY2F0aW9uLmhhc2g7XG5cdC8vIGluIGNhc2Ugd2UgYXJlIGluIGNGTFAgc2NlbmFyaW8sIHRoZSBhcHBsaWNhdGlvbiBpcyBydW5uaW5nXG5cdC8vIGluc2lkZSBhbiBpZnJhbWUsIGFuZCB0aGVyZSBmb3Igd2UgbmVlZCB0byBnZXQgdGhlIGNGTFAgVVJMXG5cdC8vIGFuZCBub3QgJ2RvY3VtZW50LlVSTCcgdGhhdCByZXByZXNlbnRzIHRoZSBpZnJhbWUgVVJMXG5cdGNvbnN0IHVzaGVsbENvbnRhaW5lciA9IHNhcC51aS5yZXF1aXJlKFwic2FwL3VzaGVsbC9Db250YWluZXJcIik7XG5cdGlmICh1c2hlbGxDb250YWluZXIgJiYgdXNoZWxsQ29udGFpbmVyLnJ1bm5pbmdJbklmcmFtZSAmJiB1c2hlbGxDb250YWluZXIucnVubmluZ0luSWZyYW1lKCkpIHtcblx0XHR1c2hlbGxDb250YWluZXJcblx0XHRcdC5nZXRGTFBVcmwodHJ1ZSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChzVXJsOiBzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIHNVcmwuc3Vic3RyaW5nKDAsIHNVcmwuaW5kZXhPZihcIiNcIikpICsgamFtVXJsO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoc0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNvdWxkIG5vdCByZXRyaWV2ZSBjRkxQIFVSTCBmb3IgdGhlIHNoYXJpbmcgZGlhbG9nIChkaWFsb2cgd2lsbCBub3QgYmUgb3BlbmVkKVwiLCBzRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB3aW5kb3cubG9jYXRpb24ub3JpZ2luICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgamFtVXJsO1xuXHR9XG59XG5cbi8qKlxuICogR2V0IHRoZSB0aWxlIFVSTCBmb3Igc2F2ZSBhcyB0aWxlIGFjdGlvbi5cbiAqIEBwYXJhbSB2aWV3IFZpZXcgY29ubmVjdGVkIHRvIHRoaXMgY29udHJvbGxlci5cbiAqIEBwYXJhbSBzaGFyZU1ldGFkYXRhIE9iamVjdCBjb250YWluaW5nIHRoZSBzaGFyZSBtZXRhZGF0YS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0VXJsRm9yU2F2ZUFzVGlsZSh2aWV3OiBWaWV3LCBzaGFyZU1ldGFkYXRhOiBTaGFyZU1ldGFkYXRhKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh2aWV3KSxcblx0XHRyb3V0ZXJQcm94eSA9IGFwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpLFxuXHRcdGhhc2ggPSByb3V0ZXJQcm94eS5nZXRIYXNoKCksXG5cdFx0cm9vdFZpZXdDb250cm9sbGVyID0gYXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpLFxuXHRcdGJhc2VQYXRoID0gcm9vdFZpZXdDb250cm9sbGVyLmdldEFwcFNwZWNpZmljSGFzaCgpLFxuXHRcdHNhdmVBc1RpbGVBcHBTdGF0ZTogQXBwRGF0YUluZm8gfCB2b2lkID0gYXdhaXQgYXBwQ29tcG9uZW50XG5cdFx0XHQuZ2V0QXBwU3RhdGVIYW5kbGVyKClcblx0XHRcdC5jcmVhdGVBcHBTdGF0ZSh7IHJlcGxhY2VIYXNoOiBmYWxzZSwgc2tpcE1lcmdlOiB0cnVlIH0pO1xuXHRjb25zdCBuZXdLZXkgPSBzYXZlQXNUaWxlQXBwU3RhdGU/LmFwcFN0YXRlS2V5O1xuXHRpZiAobmV3S2V5ICYmIGJhc2VQYXRoKSB7XG5cdFx0c2hhcmVNZXRhZGF0YS50aWxlLnVybCA9IGJhc2VQYXRoICsgcm91dGVyUHJveHkuc2V0QXBwU3RhdGVJbkhhc2goaGFzaCwgbmV3S2V5KTtcblx0fVxufVxuXG4vKipcbiAqIFRyaWdnZXIgc2VhcmNoIGFuZCBsaXN0ZW4gdG8gZGF0YVJlY2VpdmVkIHRoZSBldmVudCB0byBzeW5jIGRhdGEgdG8gdGhlIHRhYmxlLlxuICogQHBhcmFtIGNvbnRyb2xsZXIgVGhlIGxpc3QgcmVwb3J0IGNvbnRyb2xsZXJcbiAqIEByZXR1cm5zIFRoZSBhc3luYyBwcm9taXNlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN5bmNUYWJsZURhdGFXaXRoR29DbGljayhjb250cm9sbGVyOiBMaXN0UmVwb3J0Q29udHJvbGxlcik6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCBmaWx0ZXJCYXIgPSBjb250cm9sbGVyLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkgYXMgRmlsdGVyQmFyO1xuXHR0cnkge1xuXHRcdC8vIHByb2dyYW1hdHRpY2FsbHkgdHJpZ2dlciBzZWFyY2hcblx0XHQvLyB0cmlnZ2VyIGdvIG9ubHkgaWYgZ28gaXMgbm90IGNsaWNrZWRcblx0XHRpZiAoKGNvbnRyb2xsZXIuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpLmdldFByb3BlcnR5KFwiaGFzUGVuZGluZ0ZpbHRlcnNcIikpIHtcblx0XHRcdHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdFx0XHRjb25zdCB0YWJsZSA9IGNvbnRyb2xsZXIuX2dldFRhYmxlPy4oKTtcblx0XHRcdFx0aWYgKCF0YWJsZSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBiaW5kaW5nID0gdGFibGUuZ2V0Um93QmluZGluZygpIHx8IHRhYmxlLmdldEJpbmRpbmcoXCJpdGVtc1wiKTtcblx0XHRcdFx0YmluZGluZy5hdHRhY2hFdmVudE9uY2UoXCJkYXRhUmVjZWl2ZWRcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGZpbHRlckJhci50cmlnZ2VyU2VhcmNoKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdGNvbnN0IHNoYXJlSW5mb01vZGVsID0gY29udHJvbGxlci5nZXRWaWV3KCk/LmdldE1vZGVsKFwic2hhcmVJbmZvXCIpIGFzIEpTT05Nb2RlbCB8IHVuZGVmaW5lZDtcblx0XHRpZiAoc2hhcmVJbmZvTW9kZWwpIHtcblx0XHRcdHNoYXJlSW5mb01vZGVsLnNldFByb3BlcnR5KFwiL3NhdmVBc1RpbGVDbGlja2VkXCIsIGZhbHNlKTtcblx0XHR9XG5cdFx0Y29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHRMb2cuZXJyb3IoYEZFIDogU2F2ZSBhcyB0aWxlIC0gZGF0YSBzeW5jIGZhaWxlZCA6IFNoYXJlIDogJHttZXNzYWdlfWApO1xuXHR9XG59XG5cbi8qKlxuICogVXBkYXRlIHRoZSBzaGFyZSBtZXRhIGRhdGEgd2hlbiBzYXZlIGFzIHRpbGUgYWN0aW9uIGlzIGNsaWNrZWQuXG4gKiBAcGFyYW0gdmlldyBWaWV3IGNvbm5lY3RlZCB0byB0aGlzIGNvbnRyb2xsZXJcbiAqIEBwYXJhbSBzaGFyZU1ldGFkYXRhIE9iamVjdCBjb250YWluaW5nIHRoZSBzaGFyZSBtZXRhZGF0YS5cbiAqIEByZXR1cm5zIFRoZSBhc3luYyBwcm9taXNlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFNhdmVBc1RpbGVNZXRhZGF0YSh2aWV3OiBWaWV3LCBzaGFyZU1ldGFkYXRhOiBTaGFyZU1ldGFkYXRhKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IHNoYXJlSW5mb01vZGVsID0gdmlldy5nZXRNb2RlbChcInNoYXJlSW5mb1wiKSBhcyBKU09OTW9kZWwgfCB1bmRlZmluZWQ7XG5cdGlmIChzaGFyZUluZm9Nb2RlbCAmJiBzaGFyZUluZm9Nb2RlbC5nZXRQcm9wZXJ0eShcIi9zYXZlQXNUaWxlQ2xpY2tlZFwiKSkge1xuXHRcdGF3YWl0IHN5bmNUYWJsZURhdGFXaXRoR29DbGljayh2aWV3LmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcik7XG5cdFx0YXdhaXQgZ2V0VXJsRm9yU2F2ZUFzVGlsZSh2aWV3LCBzaGFyZU1ldGFkYXRhKTtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodmlldyk7XG5cdFx0Y29uc3QgbWFuaWZlc3RDb25maWd1cmF0aW9uID0gYXBwQ29tcG9uZW50LmdldE1hbmlmZXN0KCk7XG5cdFx0Y29uc3QgdUlNYW5pZmVzdCA9IG1hbmlmZXN0Q29uZmlndXJhdGlvbltcInNhcC51aVwiXTtcblx0XHRjb25zdCBpY29uID0gKHVJTWFuaWZlc3QgJiYgdUlNYW5pZmVzdC5pY29ucyAmJiB1SU1hbmlmZXN0Lmljb25zLmljb24pIHx8IFwiXCI7XG5cdFx0Y29uc3QgYXBwTWFuaWZlc3QgPSBtYW5pZmVzdENvbmZpZ3VyYXRpb25bXCJzYXAuYXBwXCJdO1xuXHRcdGNvbnN0IHRpdGxlID0gKGFwcE1hbmlmZXN0ICYmIGFwcE1hbmlmZXN0LnRpdGxlKSB8fCBcIlwiO1xuXHRcdHNoYXJlTWV0YWRhdGEudGlsZS5pY29uID0gaWNvbjtcblx0XHRzaGFyZU1ldGFkYXRhLnRpbGUudGl0bGUgPSB0aXRsZTtcblx0XHRzaGFyZU1ldGFkYXRhLnRpbGUucXVlcnlVcmwgPSBhd2FpdCBnZXRTYXZlQXNUaWxlU2VydmljZVVybCh2aWV3LmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcik7XG5cdH1cbn1cblxuY29uc3QgU2hhcmVPdmVycmlkZSA9IHtcblx0YWRhcHRTaGFyZU1ldGFkYXRhOiBhc3luYyBmdW5jdGlvbiAodGhpczogU2hhcmUsIHNoYXJlTWV0YWRhdGE6IFNoYXJlTWV0YWRhdGEpOiBQcm9taXNlPFNoYXJlTWV0YWRhdGEgfCB1bmRlZmluZWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgZ2V0U2F2ZUFzVGlsZU1ldGFkYXRhKHRoaXMuYmFzZS5nZXRWaWV3KCksIHNoYXJlTWV0YWRhdGEpO1xuXHRcdFx0Y29uc3QgamFtVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBnZXRKYW1VcmwoKTtcblx0XHRcdC8vIFRPRE86IGNoZWNrIGlmIHRoZXJlIGlzIGFueSBzZW1hbnRpYyBkYXRlIHVzZWQgYmVmb3JlIGFkZGluZyBzZXJ2aWNlVVJMIGFzIEJMSTpGSU9SSVRFQ0hQMS0xODAyM1xuXHRcdFx0c2hhcmVNZXRhZGF0YS50aXRsZSA9IGRvY3VtZW50LnRpdGxlO1xuXHRcdFx0aWYgKGphbVVybCkge1xuXHRcdFx0XHRzaGFyZU1ldGFkYXRhLmphbS51cmwgPSBqYW1Vcmw7XG5cdFx0XHR9XG5cdFx0XHQvLyBNUyBUZWFtcyBjb2xsYWJvcmF0aW9uIGRvZXMgbm90IHdhbnQgdG8gYWxsb3cgZnVydGhlciBjaGFuZ2VzIHRvIHRoZSBVUkxcblx0XHRcdC8vIHNvIHVwZGF0ZSBjb2xsb2JvcmF0aW9uSW5mbyBtb2RlbCBhdCBMUiBvdmVycmlkZSB0byBpZ25vcmUgZnVydGhlciBleHRlbnNpb24gY2hhbmdlcyBhdCBtdWx0aXBsZSBsZXZlbHNcblx0XHRcdGNvbnN0IHNoYXJlSW5mb01vZGVsID0gdGhpcy5iYXNlPy5nZXRWaWV3KCk/LmdldE1vZGVsKFwic2hhcmVJbmZvXCIpIGFzIEpTT05Nb2RlbCB8IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IHRlYW1zVXJsID0gYXdhaXQgdGhpcy5nZXRUZWFtc1VybChzaGFyZU1ldGFkYXRhLnVybCk7XG5cdFx0XHRpZiAoc2hhcmVJbmZvTW9kZWwpIHtcblx0XHRcdFx0c2hhcmVJbmZvTW9kZWwuc2V0UHJvcGVydHkoXCIvY29sbGFib3JhdGlvbkluZm8vdXJsXCIsIHRlYW1zVXJsKTtcblx0XHRcdFx0c2hhcmVJbmZvTW9kZWwuc2V0UHJvcGVydHkoXCIvY29sbGFib3JhdGlvbkluZm8vYXBwVGl0bGVcIiwgc2hhcmVNZXRhZGF0YS50aXRsZSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBmTFBVcmwgPSBhd2FpdCBnZXRTaGFyZUVtYWlsVXJsKCk7XG5cdFx0XHRzaGFyZU1ldGFkYXRhLmVtYWlsLnVybCA9IGZMUFVybDtcblx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0fVxuXHRcdHJldHVybiBzaGFyZU1ldGFkYXRhO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBTaGFyZU92ZXJyaWRlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0VBY0EsZUFBZUEsV0FBV0EsQ0FBQ0MsV0FBaUMsRUFBbUI7SUFDOUUsTUFBTUMsTUFBTSxHQUFHRCxXQUFXLENBQUNFLFNBQVMsR0FBRyxDQUFDO0lBQ3hDLElBQUksQ0FBQ0QsTUFBTSxFQUFFO01BQ1osT0FBTyxFQUFFO0lBQ1Y7SUFDQSxNQUFNRSxRQUFRLEdBQUdGLE1BQU0sQ0FBQ0csU0FBUyxDQUFDLENBQWE7SUFDL0MsTUFBTUMsV0FBVyxHQUFHLE1BQU1GLFFBQVEsQ0FBQ0cseUJBQXlCLENBQUMsQ0FBQztJQUM5RCxNQUFNQyxRQUFRLEdBQUdGLFdBQVcsQ0FBQ0csS0FBSyxDQUFDLEdBQUcsQ0FBQztJQUN2QyxNQUFNQyxPQUFPLEdBQUcsR0FBR0YsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVO0lBQ3hDO0lBQ0E7SUFDQTtJQUNBLE1BQU1HLGVBQXlCLEdBQUcsRUFBRTtJQUNwQyxJQUFJSCxRQUFRLENBQUNJLE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDeEIsTUFBTUMsU0FBUyxHQUFHTCxRQUFRLENBQUMsQ0FBQyxDQUFDO01BQzdCSyxTQUFTLENBQUNKLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQ0ssT0FBTyxDQUFDLFVBQVVDLFFBQWdCLEVBQUU7UUFDeEQsTUFBTUMsYUFBYSxHQUFHRCxRQUFRLENBQUNOLEtBQUssQ0FBQyxHQUFH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
177
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRDb3VudFVybCIsIm9Db250cm9sbGVyIiwib1RhYmxlIiwiX2dldFRhYmxlIiwidGFibGVBUEkiLCJnZXRQYXJlbnQiLCJkb3dubG9hZFVybCIsImdldERvd25sb2FkVXJsV2l0aEZpbHRlcnMiLCJzcGxpdFVybCIsInNwbGl0IiwiYmFzZVVybCIsInN1cHBvcnRlZFBhcmFtcyIsImxlbmd0aCIsInVybFBhcmFtcyIsImZvckVhY2giLCJ1cmxQYXJhbSIsInVybFBhcmFtUGFydHMiLCJwdXNoIiwiam9pbiIsImdldFNoYXJlRW1haWxVcmwiLCJvVVNoZWxsQ29udGFpbmVyIiwic2FwIiwidWkiLCJyZXF1aXJlIiwiZ2V0RkxQVXJsQXN5bmMiLCJ0aGVuIiwiZkxQVXJsIiwiY2F0Y2giLCJzRXJyb3IiLCJMb2ciLCJlcnJvciIsIlByb21pc2UiLCJyZXNvbHZlIiwiZG9jdW1lbnQiLCJVUkwiLCJnZXRTYXZlQXNUaWxlU2VydmljZVVybCIsImNvbnRyb2xsZXIiLCJvRmlsdGVyQmFyIiwiX2dldEZpbHRlckJhckNvbnRyb2wiLCJnZXRKYW1VcmwiLCJzSGFzaCIsIkhhc2hDaGFuZ2VyIiwiZ2V0SW5zdGFuY2UiLCJnZXRIYXNoIiwic0Jhc2VQYXRoIiwiaHJlZkZvckFwcFNwZWNpZmljSGFzaCIsImphbVVybCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaGFzaCIsInVzaGVsbENvbnRhaW5lciIsInJ1bm5pbmdJbklmcmFtZSIsImdldEZMUFVybCIsInNVcmwiLCJzdWJzdHJpbmciLCJpbmRleE9mIiwib3JpZ2luIiwicGF0aG5hbWUiLCJnZXRVcmxGb3JTYXZlQXNUaWxlIiwidmlldyIsInNoYXJlTWV0YWRhdGEiLCJhcHBDb21wb25lbnQiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsInJvdXRlclByb3h5IiwiZ2V0Um91dGVyUHJveHkiLCJyb290Vmlld0NvbnRyb2xsZXIiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJiYXNlUGF0aCIsImdldEFwcFNwZWNpZmljSGFzaCIsInNhdmVBc1RpbGVBcHBTdGF0ZSIsImdldEFwcFN0YXRlSGFuZGxlciIsImNyZWF0ZUFwcFN0YXRlIiwicmVwbGFjZUhhc2giLCJza2lwTWVyZ2UiLCJuZXdLZXkiLCJhcHBTdGF0ZUtleSIsInRpbGUiLCJ1cmwiLCJzZXRBcHBTdGF0ZUluSGFzaCIsInN5bmNUYWJsZURhdGFXaXRoR29DbGljayIsImZpbHRlckJhciIsImdldFZpZXciLCJnZXRCaW5kaW5nQ29udGV4dCIsImdldFByb3BlcnR5IiwidGFibGUiLCJiaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsImdldEJpbmRpbmciLCJhdHRhY2hFdmVudE9uY2UiLCJ0cmlnZ2VyU2VhcmNoIiwiZXJyIiwic2hhcmVJbmZvTW9kZWwiLCJnZXRNb2RlbCIsInNldFByb3BlcnR5IiwibWVzc2FnZSIsIkVycm9yIiwiU3RyaW5nIiwiZ2V0U2F2ZUFzVGlsZU1ldGFkYXRhIiwiZ2V0Q29udHJvbGxlciIsIm1hbmlmZXN0Q29uZmlndXJhdGlvbiIsImdldE1hbmlmZXN0IiwidUlNYW5pZmVzdCIsImljb24iLCJpY29ucyIsImFwcE1hbmlmZXN0IiwidGl0bGUiLCJxdWVyeVVybCIsIlNoYXJlT3ZlcnJpZGUiLCJhZGFwdFNoYXJlTWV0YWRhdGEiLCJiYXNlIiwiamFtIiwidGVhbXNVcmwiLCJnZXRUZWFtc1VybCIsImVtYWlsIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJTaGFyZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQXBwRGF0YUluZm8gfSBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwU3RhdGVIYW5kbGVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBTaGFyZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2hhcmVcIjtcbmltcG9ydCB0eXBlIHsgU2hhcmVNZXRhZGF0YSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaGFyZVwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbGxlciBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgSGFzaENoYW5nZXIgZnJvbSBcInNhcC91aS9jb3JlL3JvdXRpbmcvSGFzaENoYW5nZXJcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBMaXN0UmVwb3J0Q29udHJvbGxlciBmcm9tIFwiLi4vTGlzdFJlcG9ydENvbnRyb2xsZXIuY29udHJvbGxlclwiO1xuXG5hc3luYyBmdW5jdGlvbiBnZXRDb3VudFVybChvQ29udHJvbGxlcjogTGlzdFJlcG9ydENvbnRyb2xsZXIpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRjb25zdCBvVGFibGUgPSBvQ29udHJvbGxlci5fZ2V0VGFibGU/LigpO1xuXHRpZiAoIW9UYWJsZSkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cdGNvbnN0IHRhYmxlQVBJID0gb1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRjb25zdCBkb3dubG9hZFVybCA9IGF3YWl0IHRhYmxlQVBJLmdldERvd25sb2FkVXJsV2l0aEZpbHRlcnMoKTtcblx0Y29uc3Qgc3BsaXRVcmwgPSBkb3dubG9hZFVybC5zcGxpdChcIj9cIik7XG5cdGNvbnN0IGJhc2VVcmwgPSBgJHtzcGxpdFVybFswXX0vJGNvdW50P2A7XG5cdC8vIGdldERvd25sb2FkVXJsKCkgcmV0dXJucyB1cmwgd2l0aCAkc2VsZWN0LCAkZXhwYW5kIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgd2hlbiAvJGNvdW50IGlzIHVzZWQgdG8gZ2V0IHRoZSByZWNvcmQgY291bnQuIG9ubHkgJGFwcGx5LCAkc2VhcmNoLCAkZmlsdGVyIGlzIHN1cHBvcnRlZFxuXHQvLyA/JGNvdW50PXRydWUgcmV0dXJucyBjb3VudCBpbiBhIGZvcm1hdCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGJ5IEZMUCB5ZXQuXG5cdC8vIGN1cnJlbnRseSBzdXBwb3J0ZWQgZm9ybWF0IGZvciB2NCBpcyAuLi9jb3VudC4uIG9ubHkgKHdoZXJlIHRpbGUgcHJldmlldyB3aWxsIHN0aWxsIG5vdCB3b3JrKVxuXHRjb25zdCBzdXBwb3J0ZWRQYXJhbXM6IHN0cmluZ1tdID0gW107XG5cdGlmIChzcGxpdFVybC5sZW5ndGggPiAxKSB7XG5cdFx0Y29uc3QgdXJsUGFyYW1zID0gc3BsaXRVcmxbMV07XG5cdFx0dXJsUGFyYW1zLnNwbGl0KFwiJlwiKS5mb3JFYWNoKGZ1bmN0aW9uICh1cmxQYXJhbTogc3RyaW5nKSB7XG5cdFx0XHRjb25zdCB1cmxQYXJhbVBhcnRzID0gdXJsUGFyYW0uc3BsaXQoXCI9XCIpO1xuXHRcdFx0c3dpdGNoICh1cmxQYXJhbVBhcnRzWzBdKSB7XG5cdFx0XHRcdGNhc2UgXCIkYXBwbHlcIjpcblx0XHRcdFx0Y2FzZSBcIiRzZWFyY2hcIjpcblx0XHRcdFx0Y2FzZSBcIiRmaWx0ZXJcIjpcblx0XHRcdFx0XHRzdXBwb3J0ZWRQYXJhbXMucHVzaCh1cmxQYXJhbSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGJhc2VVcmwgKyBzdXBwb3J0ZWRQYXJhbXMuam9pbihcIiZcIik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFNoYXJlRW1haWxVcmwoKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0Y29uc3Qgb1VTaGVsbENvbnRhaW5lciA9IHNhcC51aS5yZXF1aXJlKFwic2FwL3VzaGVsbC9Db250YWluZXJcIik7XG5cdGlmIChvVVNoZWxsQ29udGFpbmVyKSB7XG5cdFx0cmV0dXJuIG9VU2hlbGxDb250YWluZXJcblx0XHRcdC5nZXRGTFBVcmxBc3luYyh0cnVlKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKGZMUFVybDogc3RyaW5nKSB7XG5cdFx0XHRcdHJldHVybiBmTFBVcmw7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChzRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiQ291bGQgbm90IHJldHJpZXZlIGNGTFAgVVJMIGZvciB0aGUgc2hhcmluZyBkaWFsb2cgKGRpYWxvZyB3aWxsIG5vdCBiZSBvcGVuZWQpXCIsIHNFcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShkb2N1bWVudC5VUkwpO1xuXHR9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFNhdmVBc1RpbGVTZXJ2aWNlVXJsKGNvbnRyb2xsZXI6IENvbnRyb2xsZXIpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRjb25zdCBvRmlsdGVyQmFyID0gKGNvbnRyb2xsZXIgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIpLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdGlmIChvRmlsdGVyQmFyKSB7XG5cdFx0cmV0dXJuIGdldENvdW50VXJsKGNvbnRyb2xsZXIgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIpO1xuXHR9XG5cdHJldHVybiBcIlwiO1xufVxuXG5mdW5jdGlvbiBnZXRKYW1VcmwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgc0hhc2ggPSBIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpLmdldEhhc2goKTtcblx0Y29uc3Qgc0Jhc2VQYXRoID0gSGFzaENoYW5nZXIuZ2V0SW5zdGFuY2UoKS5ocmVmRm9yQXBwU3BlY2lmaWNIYXNoID8gSGFzaENoYW5nZXIuZ2V0SW5zdGFuY2UoKS5ocmVmRm9yQXBwU3BlY2lmaWNIYXNoPy4oXCJcIikgOiBcIlwiO1xuXHRjb25zdCBqYW1VcmwgPSBzSGFzaCA/IHNCYXNlUGF0aCArIHNIYXNoIDogd2luZG93LmxvY2F0aW9uLmhhc2g7XG5cdC8vIGluIGNhc2Ugd2UgYXJlIGluIGNGTFAgc2NlbmFyaW8sIHRoZSBhcHBsaWNhdGlvbiBpcyBydW5uaW5nXG5cdC8vIGluc2lkZSBhbiBpZnJhbWUsIGFuZCB0aGVyZSBmb3Igd2UgbmVlZCB0byBnZXQgdGhlIGNGTFAgVVJMXG5cdC8vIGFuZCBub3QgJ2RvY3VtZW50LlVSTCcgdGhhdCByZXByZXNlbnRzIHRoZSBpZnJhbWUgVVJMXG5cdGNvbnN0IHVzaGVsbENvbnRhaW5lciA9IHNhcC51aS5yZXF1aXJlKFwic2FwL3VzaGVsbC9Db250YWluZXJcIik7XG5cdGlmICh1c2hlbGxDb250YWluZXIgJiYgdXNoZWxsQ29udGFpbmVyLnJ1bm5pbmdJbklmcmFtZSAmJiB1c2hlbGxDb250YWluZXIucnVubmluZ0luSWZyYW1lKCkpIHtcblx0XHR1c2hlbGxDb250YWluZXJcblx0XHRcdC5nZXRGTFBVcmwodHJ1ZSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChzVXJsOiBzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIHNVcmwuc3Vic3RyaW5nKDAsIHNVcmwuaW5kZXhPZihcIiNcIikpICsgamFtVXJsO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoc0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNvdWxkIG5vdCByZXRyaWV2ZSBjRkxQIFVSTCBmb3IgdGhlIHNoYXJpbmcgZGlhbG9nIChkaWFsb2cgd2lsbCBub3QgYmUgb3BlbmVkKVwiLCBzRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB3aW5kb3cubG9jYXRpb24ub3JpZ2luICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgamFtVXJsO1xuXHR9XG59XG5cbi8qKlxuICogR2V0IHRoZSB0aWxlIFVSTCBmb3Igc2F2ZSBhcyB0aWxlIGFjdGlvbi5cbiAqIEBwYXJhbSB2aWV3IFZpZXcgY29ubmVjdGVkIHRvIHRoaXMgY29udHJvbGxlci5cbiAqIEBwYXJhbSBzaGFyZU1ldGFkYXRhIE9iamVjdCBjb250YWluaW5nIHRoZSBzaGFyZSBtZXRhZGF0YS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0VXJsRm9yU2F2ZUFzVGlsZSh2aWV3OiBWaWV3LCBzaGFyZU1ldGFkYXRhOiBTaGFyZU1ldGFkYXRhKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh2aWV3KSxcblx0XHRyb3V0ZXJQcm94eSA9IGFwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpLFxuXHRcdGhhc2ggPSByb3V0ZXJQcm94eS5nZXRIYXNoKCksXG5cdFx0cm9vdFZpZXdDb250cm9sbGVyID0gYXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpLFxuXHRcdGJhc2VQYXRoID0gcm9vdFZpZXdDb250cm9sbGVyLmdldEFwcFNwZWNpZmljSGFzaCgpLFxuXHRcdHNhdmVBc1RpbGVBcHBTdGF0ZTogQXBwRGF0YUluZm8gfCB2b2lkID0gYXdhaXQgYXBwQ29tcG9uZW50XG5cdFx0XHQuZ2V0QXBwU3RhdGVIYW5kbGVyKClcblx0XHRcdC5jcmVhdGVBcHBTdGF0ZSh7IHJlcGxhY2VIYXNoOiBmYWxzZSwgc2tpcE1lcmdlOiB0cnVlIH0pO1xuXHRjb25zdCBuZXdLZXkgPSBzYXZlQXNUaWxlQXBwU3RhdGU/LmFwcFN0YXRlS2V5O1xuXHRpZiAobmV3S2V5ICYmIGJhc2VQYXRoKSB7XG5cdFx0c2hhcmVNZXRhZGF0YS50aWxlLnVybCA9IGJhc2VQYXRoICsgcm91dGVyUHJveHkuc2V0QXBwU3RhdGVJbkhhc2goaGFzaCwgbmV3S2V5KTtcblx0fVxufVxuXG4vKipcbiAqIFRyaWdnZXIgc2VhcmNoIGFuZCBsaXN0ZW4gdG8gZGF0YVJlY2VpdmVkIHRoZSBldmVudCB0byBzeW5jIGRhdGEgdG8gdGhlIHRhYmxlLlxuICogQHBhcmFtIGNvbnRyb2xsZXIgVGhlIGxpc3QgcmVwb3J0IGNvbnRyb2xsZXJcbiAqIEByZXR1cm5zIFRoZSBhc3luYyBwcm9taXNlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN5bmNUYWJsZURhdGFXaXRoR29DbGljayhjb250cm9sbGVyOiBMaXN0UmVwb3J0Q29udHJvbGxlcik6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCBmaWx0ZXJCYXIgPSBjb250cm9sbGVyLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkgYXMgRmlsdGVyQmFyO1xuXHR0cnkge1xuXHRcdC8vIHByb2dyYW1hdHRpY2FsbHkgdHJpZ2dlciBzZWFyY2hcblx0XHQvLyB0cmlnZ2VyIGdvIG9ubHkgaWYgZ28gaXMgbm90IGNsaWNrZWRcblx0XHRpZiAoKGNvbnRyb2xsZXIuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpLmdldFByb3BlcnR5KFwiaGFzUGVuZGluZ0ZpbHRlcnNcIikpIHtcblx0XHRcdHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdFx0XHRjb25zdCB0YWJsZSA9IGNvbnRyb2xsZXIuX2dldFRhYmxlPy4oKTtcblx0XHRcdFx0aWYgKCF0YWJsZSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBiaW5kaW5nID0gdGFibGUuZ2V0Um93QmluZGluZygpIHx8IHRhYmxlLmdldEJpbmRpbmcoXCJpdGVtc1wiKTtcblx0XHRcdFx0YmluZGluZy5hdHRhY2hFdmVudE9uY2UoXCJkYXRhUmVjZWl2ZWRcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGZpbHRlckJhci50cmlnZ2VyU2VhcmNoKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdGNvbnN0IHNoYXJlSW5mb01vZGVsID0gY29udHJvbGxlci5nZXRWaWV3KCk/LmdldE1vZGVsKFwic2hhcmVJbmZvXCIpIGFzIEpTT05Nb2RlbCB8IHVuZGVmaW5lZDtcblx0XHRpZiAoc2hhcmVJbmZvTW9kZWwpIHtcblx0XHRcdHNoYXJlSW5mb01vZGVsLnNldFByb3BlcnR5KFwiL3NhdmVBc1RpbGVDbGlja2VkXCIsIGZhbHNlKTtcblx0XHR9XG5cdFx0Y29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHRMb2cuZXJyb3IoYEZFIDogU2F2ZSBhcyB0aWxlIC0gZGF0YSBzeW5jIGZhaWxlZCA6IFNoYXJlIDogJHttZXNzYWdlfWApO1xuXHR9XG59XG5cbi8qKlxuICogVXBkYXRlIHRoZSBzaGFyZSBtZXRhIGRhdGEgd2hlbiBzYXZlIGFzIHRpbGUgYWN0aW9uIGlzIGNsaWNrZWQuXG4gKiBAcGFyYW0gdmlldyBWaWV3IGNvbm5lY3RlZCB0byB0aGlzIGNvbnRyb2xsZXJcbiAqIEBwYXJhbSBzaGFyZU1ldGFkYXRhIE9iamVjdCBjb250YWluaW5nIHRoZSBzaGFyZSBtZXRhZGF0YS5cbiAqIEByZXR1cm5zIFRoZSBhc3luYyBwcm9taXNlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFNhdmVBc1RpbGVNZXRhZGF0YSh2aWV3OiBWaWV3LCBzaGFyZU1ldGFkYXRhOiBTaGFyZU1ldGFkYXRhKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IHNoYXJlSW5mb01vZGVsID0gdmlldy5nZXRNb2RlbChcInNoYXJlSW5mb1wiKSBhcyBKU09OTW9kZWwgfCB1bmRlZmluZWQ7XG5cdGlmIChzaGFyZUluZm9Nb2RlbCAmJiBzaGFyZUluZm9Nb2RlbC5nZXRQcm9wZXJ0eShcIi9zYXZlQXNUaWxlQ2xpY2tlZFwiKSkge1xuXHRcdGF3YWl0IHN5bmNUYWJsZURhdGFXaXRoR29DbGljayh2aWV3LmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcik7XG5cdFx0YXdhaXQgZ2V0VXJsRm9yU2F2ZUFzVGlsZSh2aWV3LCBzaGFyZU1ldGFkYXRhKTtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodmlldyk7XG5cdFx0Y29uc3QgbWFuaWZlc3RDb25maWd1cmF0aW9uID0gYXBwQ29tcG9uZW50LmdldE1hbmlmZXN0KCk7XG5cdFx0Y29uc3QgdUlNYW5pZmVzdCA9IG1hbmlmZXN0Q29uZmlndXJhdGlvbltcInNhcC51aVwiXTtcblx0XHRjb25zdCBpY29uID0gKHVJTWFuaWZlc3QgJiYgdUlNYW5pZmVzdC5pY29ucyAmJiB1SU1hbmlmZXN0Lmljb25zLmljb24pIHx8IFwiXCI7XG5cdFx0Y29uc3QgYXBwTWFuaWZlc3QgPSBtYW5pZmVzdENvbmZpZ3VyYXRpb25bXCJzYXAuYXBwXCJdO1xuXHRcdGNvbnN0IHRpdGxlID0gKGFwcE1hbmlmZXN0ICYmIGFwcE1hbmlmZXN0LnRpdGxlKSB8fCBcIlwiO1xuXHRcdHNoYXJlTWV0YWRhdGEudGlsZS5pY29uID0gaWNvbjtcblx0XHRzaGFyZU1ldGFkYXRhLnRpbGUudGl0bGUgPSB0aXRsZTtcblx0XHRzaGFyZU1ldGFkYXRhLnRpbGUucXVlcnlVcmwgPSBhd2FpdCBnZXRTYXZlQXNUaWxlU2VydmljZVVybCh2aWV3LmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcik7XG5cdH1cbn1cblxuY29uc3QgU2hhcmVPdmVycmlkZSA9IHtcblx0YWRhcHRTaGFyZU1ldGFkYXRhOiBhc3luYyBmdW5jdGlvbiAodGhpczogU2hhcmUsIHNoYXJlTWV0YWRhdGE6IFNoYXJlTWV0YWRhdGEpOiBQcm9taXNlPFNoYXJlTWV0YWRhdGEgfCB1bmRlZmluZWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgZ2V0U2F2ZUFzVGlsZU1ldGFkYXRhKHRoaXMuYmFzZS5nZXRWaWV3KCksIHNoYXJlTWV0YWRhdGEpO1xuXHRcdFx0Y29uc3QgamFtVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBnZXRKYW1VcmwoKTtcblx0XHRcdC8vIFRPRE86IGNoZWNrIGlmIHRoZXJlIGlzIGFueSBzZW1hbnRpYyBkYXRlIHVzZWQgYmVmb3JlIGFkZGluZyBzZXJ2aWNlVVJMIGFzIEJMSTpGSU9SSVRFQ0hQMS0xODAyM1xuXHRcdFx0c2hhcmVNZXRhZGF0YS50aXRsZSA9IGRvY3VtZW50LnRpdGxlO1xuXHRcdFx0aWYgKGphbVVybCkge1xuXHRcdFx0XHRzaGFyZU1ldGFkYXRhLmphbS51cmwgPSBqYW1Vcmw7XG5cdFx0XHR9XG5cdFx0XHQvLyBNUyBUZWFtcyBjb2xsYWJvcmF0aW9uIGRvZXMgbm90IHdhbnQgdG8gYWxsb3cgZnVydGhlciBjaGFuZ2VzIHRvIHRoZSBVUkxcblx0XHRcdC8vIHNvIHVwZGF0ZSBjb2xsb2JvcmF0aW9uSW5mbyBtb2RlbCBhdCBMUiBvdmVycmlkZSB0byBpZ25vcmUgZnVydGhlciBleHRlbnNpb24gY2hhbmdlcyBhdCBtdWx0aXBsZSBsZXZlbHNcblx0XHRcdGNvbnN0IHNoYXJlSW5mb01vZGVsID0gdGhpcy5iYXNlPy5nZXRWaWV3KCk/LmdldE1vZGVsKFwic2hhcmVJbmZvXCIpIGFzIEpTT05Nb2RlbCB8IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IHRlYW1zVXJsID0gYXdhaXQgdGhpcy5nZXRUZWFtc1VybChzaGFyZU1ldGFkYXRhLnVybCk7XG5cdFx0XHRpZiAoc2hhcmVJbmZvTW9kZWwpIHtcblx0XHRcdFx0c2hhcmVJbmZvTW9kZWwuc2V0UHJvcGVydHkoXCIvY29sbGFib3JhdGlvbkluZm8vdXJsXCIsIHRlYW1zVXJsKTtcblx0XHRcdFx0c2hhcmVJbmZvTW9kZWwuc2V0UHJvcGVydHkoXCIvY29sbGFib3JhdGlvbkluZm8vYXBwVGl0bGVcIiwgc2hhcmVNZXRhZGF0YS50aXRsZSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBmTFBVcmwgPSBhd2FpdCBnZXRTaGFyZUVtYWlsVXJsKCk7XG5cdFx0XHRzaGFyZU1ldGFkYXRhLmVtYWlsLnVybCA9IGZMUFVybDtcblx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0fVxuXHRcdHJldHVybiBzaGFyZU1ldGFkYXRhO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBTaGFyZU92ZXJyaWRlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0VBY0EsZUFBZUEsV0FBV0EsQ0FBQ0MsV0FBaUMsRUFBbUI7SUFDOUUsTUFBTUMsTUFBTSxHQUFHRCxXQUFXLENBQUNFLFNBQVMsR0FBRyxDQUFDO0lBQ3hDLElBQUksQ0FBQ0QsTUFBTSxFQUFFO01BQ1osT0FBTyxFQUFFO0lBQ1Y7SUFDQSxNQUFNRSxRQUFRLEdBQUdGLE1BQU0sQ0FBQ0csU0FBUyxDQUFDLENBQWE7SUFDL0MsTUFBTUMsV0FBVyxHQUFHLE1BQU1GLFFBQVEsQ0FBQ0cseUJBQXlCLENBQUMsQ0FBQztJQUM5RCxNQUFNQyxRQUFRLEdBQUdGLFdBQVcsQ0FBQ0csS0FBSyxDQUFDLEdBQUcsQ0FBQztJQUN2QyxNQUFNQyxPQUFPLEdBQUcsR0FBR0YsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVO0lBQ3hDO0lBQ0E7SUFDQTtJQUNBLE1BQU1HLGVBQXlCLEdBQUcsRUFBRTtJQUNwQyxJQUFJSCxRQUFRLENBQUNJLE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDeEIsTUFBTUMsU0FBUyxHQUFHTCxRQUFRLENBQUMsQ0FBQyxDQUFDO01BQzdCSyxTQUFTLENBQUNKLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQ0ssT0FBTyxDQUFDLFVBQVVDLFFBQWdCLEVBQUU7UUFDeEQsTUFBTUMsYUFBYSxHQUFHRCxRQUFRLENBQUNOLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFD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