@sapui5/sap.fe.core 1.95.0 → 1.98.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 (207) hide show
  1. package/package.json +5 -5
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +3 -3
  4. package/src/sap/fe/core/AppComponent.js +9 -44
  5. package/src/sap/fe/core/AppStateHandler.js +2 -2
  6. package/src/sap/fe/core/BaseController.js +1 -1
  7. package/src/sap/fe/core/BusyLocker.js +13 -1
  8. package/src/sap/fe/core/CommonUtils.js +129 -219
  9. package/src/sap/fe/core/ExtensionAPI.js +14 -6
  10. package/src/sap/fe/core/PageController.js +9 -35
  11. package/src/sap/fe/core/RouterProxy.js +79 -75
  12. package/src/sap/fe/core/Synchronization.js +1 -1
  13. package/src/sap/fe/core/TemplateComponent.js +16 -7
  14. package/src/sap/fe/core/TemplateModel.js +1 -1
  15. package/src/sap/fe/core/TransactionHelper.js +183 -65
  16. package/src/sap/fe/core/actions/draft.js +50 -23
  17. package/src/sap/fe/core/actions/messageHandling.js +86 -7
  18. package/src/sap/fe/core/actions/nonDraft.js +1 -1
  19. package/src/sap/fe/core/actions/operations.js +75 -33
  20. package/src/sap/fe/core/actions/sticky.js +1 -1
  21. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +1 -1
  22. package/src/sap/fe/core/controllerextensions/EditFlow.js +276 -122
  23. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +1 -1
  24. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +14 -6
  25. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +90 -46
  26. package/src/sap/fe/core/controllerextensions/InternalRouting.js +234 -232
  27. package/src/sap/fe/core/controllerextensions/KPIManagement.js +539 -209
  28. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +550 -213
  29. package/src/sap/fe/core/controllerextensions/MassEdit.js +79 -0
  30. package/src/sap/fe/core/controllerextensions/MessageHandler.js +227 -103
  31. package/src/sap/fe/core/controllerextensions/PageReady.js +2 -2
  32. package/src/sap/fe/core/controllerextensions/PageReady.ts +3 -7
  33. package/src/sap/fe/core/controllerextensions/Paginator.js +38 -12
  34. package/src/sap/fe/core/controllerextensions/Placeholder.js +16 -19
  35. package/src/sap/fe/core/controllerextensions/Routing.js +17 -2
  36. package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
  37. package/src/sap/fe/core/controllerextensions/Share.js +20 -7
  38. package/src/sap/fe/core/controllerextensions/SideEffects.js +8 -9
  39. package/src/sap/fe/core/controllerextensions/SideEffects.ts +19 -17
  40. package/src/sap/fe/core/controllerextensions/ViewState.js +54 -9
  41. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +40 -34
  42. package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +35 -0
  43. package/src/sap/fe/core/controls/CommandExecution.js +1 -1
  44. package/src/sap/fe/core/controls/ConditionalWrapper.js +1 -1
  45. package/src/sap/fe/core/controls/CustomQuickViewPage.js +110 -109
  46. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +7 -4
  47. package/src/sap/fe/core/controls/FieldWrapper.js +10 -4
  48. package/src/sap/fe/core/controls/FilterBar.js +1 -1
  49. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -6
  50. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +45 -0
  51. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +1 -1
  52. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +1 -1
  53. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +1 -1
  54. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +1 -1
  55. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +1 -1
  56. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +106 -0
  57. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +78 -0
  58. package/src/sap/fe/core/converters/ConverterContext.js +13 -1
  59. package/src/sap/fe/core/converters/ConverterContext.ts +10 -0
  60. package/src/sap/fe/core/converters/ManifestSettings.js +2 -1
  61. package/src/sap/fe/core/converters/ManifestSettings.ts +7 -1
  62. package/src/sap/fe/core/converters/ManifestWrapper.js +18 -7
  63. package/src/sap/fe/core/converters/ManifestWrapper.ts +15 -6
  64. package/src/sap/fe/core/converters/MetaModelConverter.js +920 -882
  65. package/src/sap/fe/core/converters/MetaModelConverter.ts +829 -853
  66. package/src/sap/fe/core/converters/annotations/DataField.js +54 -4
  67. package/src/sap/fe/core/converters/annotations/DataField.ts +53 -3
  68. package/src/sap/fe/core/converters/common/AnnotationConverter.js +83 -48
  69. package/src/sap/fe/core/converters/controls/Common/Action.js +15 -3
  70. package/src/sap/fe/core/converters/controls/Common/Action.ts +12 -3
  71. package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -3
  72. package/src/sap/fe/core/converters/controls/Common/Chart.ts +0 -2
  73. package/src/sap/fe/core/converters/controls/Common/Form.js +68 -21
  74. package/src/sap/fe/core/converters/controls/Common/Form.ts +60 -16
  75. package/src/sap/fe/core/converters/controls/Common/KPI.js +331 -248
  76. package/src/sap/fe/core/converters/controls/Common/KPI.ts +355 -287
  77. package/src/sap/fe/core/converters/controls/Common/Table.js +426 -332
  78. package/src/sap/fe/core/converters/controls/Common/Table.ts +516 -383
  79. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +468 -0
  80. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +609 -0
  81. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +30 -13
  82. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +31 -12
  83. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +2 -2
  84. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +1 -1
  85. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +15 -7
  86. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +27 -6
  87. package/src/sap/fe/core/converters/helpers/Aggregation.js +8 -1
  88. package/src/sap/fe/core/converters/helpers/Aggregation.ts +9 -1
  89. package/src/sap/fe/core/converters/helpers/BindingHelper.js +3 -2
  90. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +2 -2
  91. package/src/sap/fe/core/converters/helpers/ID.js +9 -1
  92. package/src/sap/fe/core/converters/helpers/ID.ts +6 -2
  93. package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -5
  94. package/src/sap/fe/core/converters/helpers/IssueManager.ts +6 -4
  95. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +2 -2
  96. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +1 -1
  97. package/src/sap/fe/core/converters/templates/ListReportConverter.js +34 -4
  98. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +36 -7
  99. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +2 -5
  100. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +1 -2
  101. package/src/sap/fe/core/designtime/AppComponent.designtime.js +11 -2
  102. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
  103. package/src/sap/fe/core/formatters/FPMFormatter.ts +8 -3
  104. package/src/sap/fe/core/formatters/TableFormatter.js +27 -4
  105. package/src/sap/fe/core/formatters/TableFormatter.ts +20 -3
  106. package/src/sap/fe/core/formatters/ValueFormatter.js +30 -5
  107. package/src/sap/fe/core/formatters/ValueFormatter.ts +25 -3
  108. package/src/sap/fe/core/fpm/Component.js +2 -2
  109. package/src/sap/fe/core/helpers/AppStartupHelper.js +359 -0
  110. package/src/sap/fe/core/helpers/AppStartupHelper.ts +388 -0
  111. package/src/sap/fe/core/helpers/BindingExpression.js +199 -111
  112. package/src/sap/fe/core/helpers/BindingExpression.ts +193 -102
  113. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -1
  114. package/src/sap/fe/core/helpers/EditState.js +1 -1
  115. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -3
  116. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  117. package/src/sap/fe/core/helpers/KeepAliveHelper.js +211 -0
  118. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +202 -0
  119. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +32 -0
  120. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.ts +36 -0
  121. package/src/sap/fe/core/helpers/MassEditHelper.js +678 -0
  122. package/src/sap/fe/core/helpers/ModelHelper.js +64 -1
  123. package/src/sap/fe/core/helpers/PasteHelper.js +7 -1
  124. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  125. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
  126. package/src/sap/fe/core/helpers/StableIdHelper.js +2 -2
  127. package/src/sap/fe/core/helpers/StableIdHelper.ts +1 -1
  128. package/src/sap/fe/core/library.js +28 -2
  129. package/src/sap/fe/core/library.support.js +10 -4
  130. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +62 -0
  131. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +66 -0
  132. package/src/sap/fe/core/messagebundle.properties +67 -3
  133. package/src/sap/fe/core/messagebundle_ar.properties +40 -3
  134. package/src/sap/fe/core/messagebundle_bg.properties +40 -3
  135. package/src/sap/fe/core/messagebundle_ca.properties +41 -4
  136. package/src/sap/fe/core/messagebundle_cs.properties +41 -4
  137. package/src/sap/fe/core/messagebundle_cy.properties +40 -3
  138. package/src/sap/fe/core/messagebundle_da.properties +40 -3
  139. package/src/sap/fe/core/messagebundle_de.properties +40 -3
  140. package/src/sap/fe/core/messagebundle_el.properties +40 -3
  141. package/src/sap/fe/core/messagebundle_en.properties +37 -0
  142. package/src/sap/fe/core/messagebundle_en_GB.properties +37 -0
  143. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +37 -0
  144. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +46 -2
  145. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +44 -0
  146. package/src/sap/fe/core/messagebundle_es.properties +40 -3
  147. package/src/sap/fe/core/messagebundle_es_MX.properties +41 -4
  148. package/src/sap/fe/core/messagebundle_et.properties +40 -3
  149. package/src/sap/fe/core/messagebundle_fi.properties +40 -3
  150. package/src/sap/fe/core/messagebundle_fr.properties +41 -4
  151. package/src/sap/fe/core/messagebundle_fr_CA.properties +40 -3
  152. package/src/sap/fe/core/messagebundle_hi.properties +40 -3
  153. package/src/sap/fe/core/messagebundle_hr.properties +40 -3
  154. package/src/sap/fe/core/messagebundle_hu.properties +41 -4
  155. package/src/sap/fe/core/messagebundle_id.properties +42 -5
  156. package/src/sap/fe/core/messagebundle_it.properties +40 -3
  157. package/src/sap/fe/core/messagebundle_iw.properties +40 -3
  158. package/src/sap/fe/core/messagebundle_ja.properties +49 -12
  159. package/src/sap/fe/core/messagebundle_kk.properties +40 -3
  160. package/src/sap/fe/core/messagebundle_ko.properties +40 -3
  161. package/src/sap/fe/core/messagebundle_lt.properties +40 -3
  162. package/src/sap/fe/core/messagebundle_lv.properties +40 -3
  163. package/src/sap/fe/core/messagebundle_ms.properties +40 -3
  164. package/src/sap/fe/core/messagebundle_nl.properties +40 -3
  165. package/src/sap/fe/core/messagebundle_no.properties +40 -3
  166. package/src/sap/fe/core/messagebundle_pl.properties +40 -3
  167. package/src/sap/fe/core/messagebundle_pt.properties +42 -5
  168. package/src/sap/fe/core/messagebundle_pt_PT.properties +40 -3
  169. package/src/sap/fe/core/messagebundle_ro.properties +40 -3
  170. package/src/sap/fe/core/messagebundle_ru.properties +40 -3
  171. package/src/sap/fe/core/messagebundle_sh.properties +40 -3
  172. package/src/sap/fe/core/messagebundle_sk.properties +40 -3
  173. package/src/sap/fe/core/messagebundle_sl.properties +40 -3
  174. package/src/sap/fe/core/messagebundle_sv.properties +41 -4
  175. package/src/sap/fe/core/messagebundle_th.properties +40 -3
  176. package/src/sap/fe/core/messagebundle_tr.properties +40 -3
  177. package/src/sap/fe/core/messagebundle_uk.properties +40 -3
  178. package/src/sap/fe/core/messagebundle_vi.properties +40 -3
  179. package/src/sap/fe/core/messagebundle_zh_CN.properties +40 -3
  180. package/src/sap/fe/core/messagebundle_zh_TW.properties +40 -3
  181. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -1
  182. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +1 -1
  183. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +4 -3
  184. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -0
  185. package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
  186. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +1 -1
  187. package/src/sap/fe/core/services/RoutingServiceFactory.js +98 -328
  188. package/src/sap/fe/core/services/ShellServicesFactory.js +31 -2
  189. package/src/sap/fe/core/services/ShellServicesFactory.ts +30 -1
  190. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +8 -5
  191. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +11 -6
  192. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +14 -5
  193. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +1 -1
  194. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +38 -0
  195. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.ts +18 -0
  196. package/src/sap/fe/core/templating/DataModelPathHelper.js +8 -37
  197. package/src/sap/fe/core/templating/DataModelPathHelper.ts +13 -33
  198. package/src/sap/fe/core/templating/DisplayModeFormatter.js +114 -0
  199. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +86 -0
  200. package/src/sap/fe/core/templating/EntitySetHelper.js +86 -3
  201. package/src/sap/fe/core/templating/EntitySetHelper.ts +44 -0
  202. package/src/sap/fe/core/templating/FilterHelper.js +10 -7
  203. package/src/sap/fe/core/templating/FilterHelper.ts +8 -6
  204. package/src/sap/fe/core/templating/PropertyHelper.js +2 -2
  205. package/src/sap/fe/core/templating/PropertyHelper.ts +1 -1
  206. package/src/sap/fe/core/templating/UIFormatters.js +47 -107
  207. package/src/sap/fe/core/templating/UIFormatters.ts +76 -72
@@ -14,6 +14,7 @@ sap.ui.define(["../ManifestSettings", "../controls/Common/DataVisualization", ".
14
14
  var annotationExpression = BindingExpression.annotationExpression;
15
15
  var insertCustomElements = ConfigurableObject.insertCustomElements;
16
16
  var getActionsFromManifest = Action.getActionsFromManifest;
17
+ var IconTabBarID = ID.IconTabBarID;
17
18
  var ChartID = ID.ChartID;
18
19
  var TableID = ID.TableID;
19
20
  var FilterVariantManagementID = ID.FilterVariantManagementID;
@@ -27,9 +28,18 @@ sap.ui.define(["../ManifestSettings", "../controls/Common/DataVisualization", ".
27
28
  var getDefaultLineItem = DataVisualization.getDefaultLineItem;
28
29
  var getDefaultChart = DataVisualization.getDefaultChart;
29
30
  var getDataVisualizationConfiguration = DataVisualization.getDataVisualizationConfiguration;
31
+ var VariantManagementType = ManifestSettings.VariantManagementType;
30
32
  var TemplateType = ManifestSettings.TemplateType;
31
33
  var VisualizationType = ManifestSettings.VisualizationType;
32
34
 
35
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
36
+
37
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
38
+
39
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
40
+
41
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
42
+
33
43
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function () {}; return { s: F, n: function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function (e) { throw e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function () { it = it.call(o); }, n: function () { var step = it.next(); normalCompletion = step.done; return step; }, e: function (e) { didErr = true; err = e; }, f: function () { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
34
44
 
35
45
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
@@ -56,6 +66,21 @@ sap.ui.define(["../ManifestSettings", "../controls/Common/DataVisualization", ".
56
66
  return tables;
57
67
  }
58
68
 
69
+ function getChartVisualizations(views) {
70
+ var charts = [];
71
+ views.forEach(function (view) {
72
+ if (!view.type) {
73
+ var visualizations = view.primaryVisualization ? view.primaryVisualization.visualizations : view.presentation.visualizations;
74
+ visualizations.forEach(function (visualization) {
75
+ if (visualization.type === VisualizationType.Chart) {
76
+ charts.push(visualization);
77
+ }
78
+ });
79
+ }
80
+ });
81
+ return charts;
82
+ }
83
+
59
84
  var getDefaultSemanticDates = function (filterFields) {
60
85
  var defaultSemanticDates = {};
61
86
 
@@ -465,6 +490,7 @@ sap.ui.define(["../ManifestSettings", "../controls/Common/DataVisualization", ".
465
490
  var showTabCounts = viewsDefinition ? (viewsDefinition === null || viewsDefinition === void 0 ? void 0 : viewsDefinition.showCounts) || hasMultipleEntitySets : undefined; // with multi EntitySets, tab counts are displayed by default
466
491
 
467
492
  var lrTableVisualizations = getTableVisualizations(views);
493
+ var lrChartVisualizations = getChartVisualizations(views);
468
494
  var showPinnableToggle = lrTableVisualizations.some(function (table) {
469
495
  return table.control.type === "ResponsiveTable";
470
496
  });
@@ -472,9 +498,6 @@ sap.ui.define(["../ManifestSettings", "../controls/Common/DataVisualization", ".
472
498
  var singleChartId = "";
473
499
  var filterBarId = FilterBarID(sContextPath);
474
500
  var filterVariantManagementID = FilterVariantManagementID(filterBarId);
475
- var targetControlIds = [filterBarId].concat(lrTableVisualizations.map(function (visualization) {
476
- return visualization.annotation.id;
477
- }));
478
501
  var fbConfig = manifestWrapper.getFilterConfiguration();
479
502
  var filterInitialLayout = (fbConfig === null || fbConfig === void 0 ? void 0 : fbConfig.initialLayout) !== undefined ? fbConfig === null || fbConfig === void 0 ? void 0 : fbConfig.initialLayout.toLowerCase() : "compact";
480
503
  var filterLayout = (fbConfig === null || fbConfig === void 0 ? void 0 : fbConfig.layout) !== undefined ? fbConfig === null || fbConfig === void 0 ? void 0 : fbConfig.layout.toLowerCase() : "compact";
@@ -498,6 +521,12 @@ sap.ui.define(["../ManifestSettings", "../controls/Common/DataVisualization", ".
498
521
  checkChartFilterBarId(views, filterBarId);
499
522
  }
500
523
 
524
+ var visualizationIds = lrTableVisualizations.map(function (visualization) {
525
+ return visualization.annotation.id;
526
+ }).concat(lrChartVisualizations.map(function (visualization) {
527
+ return visualization.id;
528
+ }));
529
+ var targetControlIds = [filterBarId].concat(_toConsumableArray(manifestWrapper.getVariantManagement() !== VariantManagementType.Control ? visualizationIds : []), _toConsumableArray(!hasMultiVisualizations && views.length > 1 ? [IconTabBarID()] : []));
501
530
  return {
502
531
  mainEntitySet: sContextPath,
503
532
  mainEntityType: sContextPath + "/",
@@ -522,6 +551,7 @@ sap.ui.define(["../ManifestSettings", "../controls/Common/DataVisualization", ".
522
551
  },
523
552
  isMultiEntitySets: hasMultipleEntitySets,
524
553
  hasMultiVisualizations: hasMultiVisualizations,
554
+ templateType: manifestWrapper.getTemplateType(),
525
555
  useSemanticDateRange: useSemanticDateRange,
526
556
  filterInitialLayout: filterInitialLayout,
527
557
  filterLayout: filterLayout,
@@ -595,4 +625,4 @@ sap.ui.define(["../ManifestSettings", "../controls/Common/DataVisualization", ".
595
625
 
596
626
  return _exports;
597
627
  }, false);
598
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxpc3RSZXBvcnRDb252ZXJ0ZXIudHMiXSwibmFtZXMiOlsiZ2V0VGFibGVWaXN1YWxpemF0aW9ucyIsInZpZXdzIiwidGFibGVzIiwiZm9yRWFjaCIsInZpZXciLCJ0eXBlIiwidmlzdWFsaXphdGlvbnMiLCJzZWNvbmRhcnlWaXN1YWxpemF0aW9uIiwicHJlc2VudGF0aW9uIiwidmlzdWFsaXphdGlvbiIsIlZpc3VhbGl6YXRpb25UeXBlIiwiVGFibGUiLCJwdXNoIiwiZ2V0RGVmYXVsdFNlbWFudGljRGF0ZXMiLCJmaWx0ZXJGaWVsZHMiLCJkZWZhdWx0U2VtYW50aWNEYXRlcyIsImZpbHRlckZpZWxkIiwic2V0dGluZ3MiLCJkZWZhdWx0VmFsdWVzIiwibGVuZ3RoIiwiZ2V0Q29tcGxpYW50VmlzdWFsaXphdGlvbkFubm90YXRpb24iLCJlbnRpdHlUeXBlIiwiY29udmVydGVyQ29udGV4dCIsImJJc0FMUCIsImFubm90YXRpb25QYXRoIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0RGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGgiLCJzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IiwiZ2V0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCIsInByZXNlbnRhdGlvblZhcmlhbnQiLCJQcmVzZW50YXRpb25WYXJpYW50IiwiRXJyb3IiLCJiUFZDb21wbGFpbnQiLCJpc1ByZXNlbnRhdGlvbkNvbXBsaWFudCIsInVuZGVmaW5lZCIsImlzU2VsZWN0aW9uUHJlc2VudGF0aW9uQ29tcGxpYW50IiwiZ2V0RGVmYXVsdFByZXNlbnRhdGlvblZhcmlhbnQiLCJkZWZhdWx0TGluZUl0ZW0iLCJnZXREZWZhdWx0TGluZUl0ZW0iLCJnZXRWaWV3Iiwidmlld0NvbnZlcnRlckNvbmZpZ3VyYXRpb24iLCJjb25maWciLCJnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24iLCJhbm5vdGF0aW9uIiwiZ2V0UmVsYXRpdmVBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImdldEVudGl0eVR5cGUiLCJ0YWJsZUNvbnRyb2xJZCIsImNoYXJ0Q29udHJvbElkIiwidGl0bGUiLCJzZWxlY3Rpb25WYXJpYW50UGF0aCIsImlzTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbiIsImtleSIsImNyZWF0ZVZpc3VhbGl6YXRpb24iLCJpc1ByaW1hcnkiLCJkZWZhdWx0VmlzdWFsaXphdGlvbiIsIkNoYXJ0IiwicHJlc2VudGF0aW9uQ3JlYXRlZCIsIk9iamVjdCIsImFzc2lnbiIsImdldFByZXNlbnRhdGlvbiIsIml0ZW0iLCJyZXNvbHZlZFRhcmdldCIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwidGFyZ2V0QW5ub3RhdGlvbiIsImNyZWF0ZUFscFZpZXciLCJwcmVzZW50YXRpb25zIiwiZGVmYXVsdFBhdGgiLCJwcmltYXJ5VmlzdWFsaXphdGlvbiIsImlkIiwiZ2V0VGVtcGxhdGVUeXBlIiwiVGVtcGxhdGVUeXBlIiwiQW5hbHl0aWNhbExpc3RQYWdlIiwiaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyIsInByaW1hcnkiLCJzZWNvbmRhcnkiLCJ2aWV3QW5ub3RhdGlvbiIsImNvbXBpbGVCaW5kaW5nIiwiYW5ub3RhdGlvbkV4cHJlc3Npb24iLCJUZXh0IiwidmlzdWFsaXphdGlvbkRlZmluaXRpb24iLCJpbmRleCIsInRhYmxlVmlzdWFsaXphdGlvbiIsImZpbHRlcnMiLCJjb250cm9sIiwiaGlkZGVuRmlsdGVycyIsInBhdGhzIiwia2VlcFByZXZpb3VzUHJlc29uYWxpemF0aW9uIiwiVGFibGVJRCIsInRlcm0iLCJTZWxlY3Rpb25WYXJpYW50Iiwic3BsaXQiLCJjaGFydFZpc3VhbGl6YXRpb24iLCJDaGFydElEIiwibGFiZWwiLCJmcmFnbWVudCIsInRlbXBsYXRlIiwiY3VzdG9tVGFiSWQiLCJDdXN0b21UYWJJRCIsImdldFZpZXdzIiwic2V0dGluZ3NWaWV3cyIsInZpZXdDb252ZXJ0ZXJDb25maWdzIiwicGF0aCIsIm1hbmlmZXN0V3JhcHBlciIsInZpZXdDb252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsImNvbnRleHRQYXRoIiwiZW50aXR5U2V0IiwiZ2V0Q29udGV4dFBhdGgiLCJyZXNvbHZlZFRhcmdldGNvbnZlcnRlckNvbnRleHQiLCJnZXRBbHBWaWV3Q29uZmlnIiwibWFwIiwidmlld0NvbnZlcnRlckNvbmZpZyIsInZpZXdDb25maWdzIiwiY2hhcnQiLCJ0YWJsZSIsImdldERlZmF1bHRDaGFydCIsImdldEhlYWRlckFjdGlvbnMiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJjaGVja0NoYXJ0RmlsdGVyQmFySWQiLCJmaWx0ZXJCYXJJZCIsImZpbHRlcklkIiwiY29udmVydFBhZ2UiLCJzQ29udGV4dFBhdGgiLCJ2aWV3c0RlZmluaXRpb24iLCJnZXRWaWV3Q29uZmlndXJhdGlvbiIsImhhc011bHRpcGxlRW50aXR5U2V0cyIsInNob3dUYWJDb3VudHMiLCJzaG93Q291bnRzIiwibHJUYWJsZVZpc3VhbGl6YXRpb25zIiwic2hvd1Bpbm5hYmxlVG9nZ2xlIiwic29tZSIsInNpbmdsZVRhYmxlSWQiLCJzaW5nbGVDaGFydElkIiwiRmlsdGVyQmFySUQiLCJmaWx0ZXJWYXJpYW50TWFuYWdlbWVudElEIiwiRmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCIsInRhcmdldENvbnRyb2xJZHMiLCJjb25jYXQiLCJmYkNvbmZpZyIsImdldEZpbHRlckNvbmZpZ3VyYXRpb24iLCJmaWx0ZXJJbml0aWFsTGF5b3V0IiwiaW5pdGlhbExheW91dCIsInRvTG93ZXJDYXNlIiwiZmlsdGVyTGF5b3V0IiwibGF5b3V0IiwidXNlU2VtYW50aWNEYXRlUmFuZ2UiLCJvQ29uZmlnIiwiZ2V0Q29udGVudEFyZWFJZCIsImNoYXJ0SWQiLCJ0YWJsZUlkIiwic2VsZWN0aW9uRmllbGRzIiwiZ2V0U2VsZWN0aW9uRmllbGRzIiwiaGlkZUJhc2ljU2VhcmNoIiwiZ2V0RmlsdGVyQmFyaGlkZUJhc2ljU2VhcmNoIiwic2VsZWN0aW9uVmFyaWFudCIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyIsImhlYWRlckFjdGlvbnMiLCJoYXNNdWx0aVZpc3VhbGl6YXRpb25zIiwibWFpbkVudGl0eVNldCIsIm1haW5FbnRpdHlUeXBlIiwiZmlsdGVyQmFyIiwiZmlsdGVyQ29uZGl0aW9ucyIsInZhcmlhbnRNYW5hZ2VtZW50Iiwiam9pbiIsImlzTXVsdGlFbnRpdHlTZXRzIiwia3BpRGVmaW5pdGlvbnMiLCJnZXRLUElEZWZpbml0aW9ucyJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF1SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVNBLHNCQUFULENBQWdDQyxLQUFoQyxFQUF5RjtBQUN4RixRQUFNQyxNQUE0QixHQUFHLEVBQXJDO0FBQ0FELElBQUFBLEtBQUssQ0FBQ0UsT0FBTixDQUFjLFVBQVNDLElBQVQsRUFBZTtBQUM1QixVQUFJLENBQUVBLElBQUQsQ0FBK0JDLElBQXBDLEVBQTBDO0FBQ3pDLFlBQU1DLGNBQWMsR0FBSUYsSUFBRCxDQUFpQ0csc0JBQWpDLEdBQ25CSCxJQUFELENBQWlDRyxzQkFBakMsQ0FBd0RELGNBRHBDLEdBRW5CRixJQUFELENBQStCSSxZQUEvQixDQUE0Q0YsY0FGL0M7QUFJQUEsUUFBQUEsY0FBYyxDQUFDSCxPQUFmLENBQXVCLFVBQVNNLGFBQVQsRUFBd0I7QUFDOUMsY0FBSUEsYUFBYSxDQUFDSixJQUFkLEtBQXVCSyxpQkFBaUIsQ0FBQ0MsS0FBN0MsRUFBb0Q7QUFDbkRULFlBQUFBLE1BQU0sQ0FBQ1UsSUFBUCxDQUFZSCxhQUFaO0FBQ0E7QUFDRCxTQUpEO0FBS0E7QUFDRCxLQVpEO0FBYUEsV0FBT1AsTUFBUDtBQUNBOztBQUVELE1BQU1XLHVCQUF1QixHQUFHLFVBQVNDLFlBQVQsRUFBc0c7QUFDckksUUFBTUMsb0JBQXlC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O0FBQUE7O0FBQUE7QUFDRCwrREFBd0I7QUFBQSxjQUFmRyxJQUFlO0FBQ3ZCQSxVQUFBQSxJQUFJLEdBQUdBLElBQVA7O0FBQ0EsY0FBSUEsSUFBSSxDQUFDNEMsY0FBTCxJQUF1QjVDLElBQUksQ0FBQzJDLGNBQWhDLEVBQWdEO0FBQy9DdUYsWUFBQUEsYUFBYSxHQUFHbEksSUFBSSxDQUFDNEMsY0FBckI7QUFDQXFGLFlBQUFBLGFBQWEsR0FBR2pJLElBQUksQ0FBQzJDLGNBQXJCO0FBQ0E7QUFDQTtBQUNEO0FBUkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVNELEtBWkQsTUFZTztBQUFBLGtEQUNXOUMsS0FEWDtBQUFBOztBQUFBO0FBQ04sK0RBQXdCO0FBQUEsY0FBZkcsTUFBZTtBQUN2QkEsVUFBQUEsTUFBSSxHQUFHQSxNQUFQOztBQUNBLGNBQUksQ0FBQ2lJLGFBQUQsSUFBbUJqSSxNQUFELENBQW9DMkMsY0FBMUQsRUFBMEU7QUFDekVzRixZQUFBQSxhQUFhLEdBQUlqSSxNQUFELENBQW9DMkMsY0FBcEMsSUFBc0QsRUFBdEU7QUFDQTs7QUFDRCxjQUFJLENBQUN1RixhQUFELElBQW1CbEksTUFBRCxDQUFvQzRDLGNBQTFELEVBQTBFO0FBQ3pFc0YsWUFBQUEsYUFBYSxHQUFJbEksTUFBRCxDQUFvQzRDLGNBQXBDLElBQXNELEVBQXRFO0FBQ0E7O0FBQ0QsY0FBSXNGLGFBQWEsSUFBSUQsYUFBckIsRUFBb0M7QUFDbkM7QUFDQTtBQUNEO0FBWks7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWFOOztBQUNELFFBQUlBLGFBQWEsSUFBSUMsYUFBckIsRUFBb0M7QUFDbkMsYUFBTztBQUNOZ0IsUUFBQUEsT0FBTyxFQUFFaEIsYUFESDtBQUVOaUIsUUFBQUEsT0FBTyxFQUFFbEI7QUFGSCxPQUFQO0FBSUE7O0FBQ0QsV0FBT25HLFNBQVA7QUFDQSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0TXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb24sXG5cdFZpZXdQYXRoQ29uZmlndXJhdGlvbixcblx0U2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uLFxuXHRWaXN1YWxpemF0aW9uVHlwZSxcblx0VGVtcGxhdGVUeXBlLFxuXHRDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbixcblx0Q3VzdG9tVmlld1RlbXBsYXRlQ29uZmlndXJhdGlvblxufSBmcm9tIFwiLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgRW50aXR5VHlwZSB9IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQge1xuXHREYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zLFxuXHREYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24sXG5cdGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbixcblx0Z2V0RGVmYXVsdENoYXJ0LFxuXHRnZXREZWZhdWx0TGluZUl0ZW0sXG5cdGdldERlZmF1bHRQcmVzZW50YXRpb25WYXJpYW50LFxuXHRnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LFxuXHRpc1ByZXNlbnRhdGlvbkNvbXBsaWFudCxcblx0Z2V0U2VsZWN0aW9uVmFyaWFudCxcblx0aXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnRcbn0gZnJvbSBcIi4uL2NvbnRyb2xzL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IHtcblx0TGluZUl0ZW0sXG5cdFByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMsXG5cdFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMsXG5cdFNlbGVjdGlvblZhcmlhbnRUeXBlVHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL2Rpc3QvZ2VuZXJhdGVkL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgQ3VzdG9tVGFiSUQsIEZpbHRlckJhcklELCBGaWx0ZXJWYXJpYW50TWFuYWdlbWVudElELCBUYWJsZUlELCBDaGFydElEIH0gZnJvbSBcIi4uL2hlbHBlcnMvSURcIjtcbmltcG9ydCB7IFRhYmxlVmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHsgQ2hhcnRWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0NoYXJ0XCI7XG5pbXBvcnQgeyBCYXNlQWN0aW9uLCBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHsgQ29uZmlndXJhYmxlT2JqZWN0LCBpbnNlcnRDdXN0b21FbGVtZW50cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBhbm5vdGF0aW9uRXhwcmVzc2lvbiwgY29tcGlsZUJpbmRpbmcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nRXhwcmVzc2lvblwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHsgS1BJRGVmaW5pdGlvbiwgZ2V0S1BJRGVmaW5pdGlvbnMgfSBmcm9tIFwiLi4vY29udHJvbHMvQ29tbW9uL0tQSVwiO1xuaW1wb3J0IHtcblx0Z2V0U2VsZWN0aW9uRmllbGRzLFxuXHRnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyxcblx0Z2V0RmlsdGVyQmFyaGlkZUJhc2ljU2VhcmNoLFxuXHRGaWx0ZXJGaWVsZCxcblx0Q3VzdG9tRWxlbWVudEZpbHRlckZpZWxkXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvRmlsdGVyQmFyXCI7XG5cbnR5cGUgVmlld0Fubm90YXRpb25zVHlwZVR5cGVzID0gU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyB8IFNlbGVjdGlvblZhcmlhbnRUeXBlVHlwZXM7XG50eXBlIFZhcmlhbnRNYW5hZ2VtZW50RGVmaW5pdGlvbiA9IHtcblx0aWQ6IHN0cmluZztcblx0dGFyZ2V0Q29udHJvbElkczogc3RyaW5nO1xufTtcblxudHlwZSBNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uID0gVmlld1BhdGhDb25maWd1cmF0aW9uICYge1xuXHRhbm5vdGF0aW9uPzogRGF0YVZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucztcbn07XG5cbnR5cGUgU2luZ2xlVmlld0NvbmZpZ3VyYXRpb24gPSB7XG5cdGFubm90YXRpb24/OiBEYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zO1xufTtcblxudHlwZSBDdXN0b21WaWV3Q29uZmlndXJhdGlvbiA9IEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb24gJiB7XG5cdHR5cGU6IHN0cmluZztcbn07XG5cbnR5cGUgVmlld0NvbmZpZ3VyYXRpb24gPSBNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uIHwgU2luZ2xlVmlld0NvbmZpZ3VyYXRpb24gfCBDdXN0b21WaWV3Q29uZmlndXJhdGlvbjtcbnR5cGUgVmlld0Fubm90YXRpb25Db25maWd1cmF0aW9uID0gTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbiB8IFNpbmdsZVZpZXdDb25maWd1cmF0aW9uO1xuXG50eXBlIFZpZXdDb252ZXJ0ZXJTZXR0aW5ncyA9IFZpZXdDb25maWd1cmF0aW9uICYge1xuXHRjb252ZXJ0ZXJDb250ZXh0PzogQ29udmVydGVyQ29udGV4dDtcbn07XG5cbnR5cGUgRGVmYXVsdFNlbWFudGljRGF0ZSA9IENvbmZpZ3VyYWJsZU9iamVjdCAmIHtcblx0b3BlcmF0b3I6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIExpc3RSZXBvcnREZWZpbml0aW9uID0ge1xuXHRtYWluRW50aXR5U2V0OiBzdHJpbmc7XG5cdG1haW5FbnRpdHlUeXBlOiBzdHJpbmc7IC8vIGVudGl0eVR5cGU+IGF0IHRoZSBzdGFydCBvZiBMUiB0ZW1wbGF0aW5nXG5cdHNpbmdsZVRhYmxlSWQ/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBzaW5nbGUgVGFibGUgbW9kZVxuXHRzaW5nbGVDaGFydElkPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggc2luZ2xlIFRhYmxlIG1vZGVcblx0c2hvd1RhYkNvdW50cz86IGJvb2xlYW47IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdGhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXTtcblx0c2hvd1Bpbm5hYmxlVG9nZ2xlPzogYm9vbGVhbjtcblx0ZmlsdGVyQmFyOiB7XG5cdFx0c2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdO1xuXHRcdGhpZGVCYXNpY1NlYXJjaDogYm9vbGVhbjtcblx0fTtcblx0dmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdO1xuXHRmaWx0ZXJDb25kaXRpb25zOiBvYmplY3Q7XG5cdGlzTXVsdGlFbnRpdHlTZXRzOiBib29sZWFuO1xuXHRmaWx0ZXJCYXJJZDogc3RyaW5nO1xuXHR2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnREZWZpbml0aW9uO1xuXHRoYXNNdWx0aVZpc3VhbGl6YXRpb25zOiBib29sZWFuO1xuXHR1c2VTZW1hbnRpY0RhdGVSYW5nZT86IGJvb2xlYW47XG5cdGZpbHRlckluaXRpYWxMYXlvdXQ/OiBzdHJpbmc7XG5cdGZpbHRlckxheW91dD86IHN0cmluZztcblx0a3BpRGVmaW5pdGlvbnM6IEtQSURlZmluaXRpb25bXTtcbn07XG5cbmV4cG9ydCB0eXBlIExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbiA9IFNpbmdsZVZpZXdEZWZpbml0aW9uIHwgQ3VzdG9tVmlld0RlZmluaXRpb24gfCBDb21iaW5lZFZpZXdEZWZpbml0aW9uO1xuXG5leHBvcnQgdHlwZSBDb21iaW5lZFZpZXdEZWZpbml0aW9uID0ge1xuXHRzZWxlY3Rpb25WYXJpYW50UGF0aD86IHN0cmluZzsgLy8gb25seSB3aXRoIG9uIG11bHRpIFRhYmxlIG1vZGVcblx0dGl0bGU/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdHByaW1hcnlWaXN1YWxpemF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb247XG5cdHNlY29uZGFyeVZpc3VhbGl6YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbjtcblx0dGFibGVDb250cm9sSWQ6IHN0cmluZztcblx0Y2hhcnRDb250cm9sSWQ6IHN0cmluZztcblx0ZGVmYXVsdFBhdGg/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBDdXN0b21WaWV3RGVmaW5pdGlvbiA9IHtcblx0dGl0bGU/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdGZyYWdtZW50OiBzdHJpbmc7XG5cdHR5cGU6IHN0cmluZztcblx0Y3VzdG9tVGFiSWQ6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBTaW5nbGVWaWV3RGVmaW5pdGlvbiA9IFNpbmdsZVRhYmxlVmlld0RlZmluaXRpb24gfCBTaW5nbGVDaGFydFZpZXdEZWZpbml0aW9uO1xuXG5leHBvcnQgdHlwZSBCYXNlU2luZ2xlVmlld0RlZmluaXRpb24gPSB7XG5cdHNlbGVjdGlvblZhcmlhbnRQYXRoPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggb24gbXVsdGkgVGFibGUgbW9kZVxuXHR0aXRsZT86IHN0cmluZzsgLy8gb25seSB3aXRoIG11bHRpIFRhYmxlIG1vZGVcblx0cHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb247XG59O1xuXG5leHBvcnQgdHlwZSBTaW5nbGVUYWJsZVZpZXdEZWZpbml0aW9uID0gQmFzZVNpbmdsZVZpZXdEZWZpbml0aW9uICYge1xuXHR0YWJsZUNvbnRyb2xJZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFNpbmdsZUNoYXJ0Vmlld0RlZmluaXRpb24gPSBCYXNlU2luZ2xlVmlld0RlZmluaXRpb24gJiB7XG5cdGNoYXJ0Q29udHJvbElkPzogc3RyaW5nO1xufTtcblxudHlwZSBDb250ZW50QXJlYUlEID0ge1xuXHRjaGFydElkOiBzdHJpbmc7XG5cdHRhYmxlSWQ6IHN0cmluZztcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIGFsbCBsaXN0IHJlcG9ydCB0YWJsZXMuXG4gKiBAcGFyYW0ge0xpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdfSB2aWV3cyBUaGUgbGlzdCByZXBvcnQgdmlld3MgY29uZmlndXJlZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEByZXR1cm5zIHtUYWJsZVZpc3VhbGl6YXRpb25bXX0gVGhlIGxpc3QgcmVwb3J0IHRhYmxlXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlVmlzdWFsaXphdGlvbnModmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdKTogVGFibGVWaXN1YWxpemF0aW9uW10ge1xuXHRjb25zdCB0YWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdID0gW107XG5cdHZpZXdzLmZvckVhY2goZnVuY3Rpb24odmlldykge1xuXHRcdGlmICghKHZpZXcgYXMgQ3VzdG9tVmlld0RlZmluaXRpb24pLnR5cGUpIHtcblx0XHRcdGNvbnN0IHZpc3VhbGl6YXRpb25zID0gKHZpZXcgYXMgQ29tYmluZWRWaWV3RGVmaW5pdGlvbikuc2Vjb25kYXJ5VmlzdWFsaXphdGlvblxuXHRcdFx0XHQ/ICh2aWV3IGFzIENvbWJpbmVkVmlld0RlZmluaXRpb24pLnNlY29uZGFyeVZpc3VhbGl6YXRpb24udmlzdWFsaXphdGlvbnNcblx0XHRcdFx0OiAodmlldyBhcyBTaW5nbGVWaWV3RGVmaW5pdGlvbikucHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zO1xuXG5cdFx0XHR2aXN1YWxpemF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpIHtcblx0XHRcdFx0XHR0YWJsZXMucHVzaCh2aXN1YWxpemF0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHRhYmxlcztcbn1cblxuY29uc3QgZ2V0RGVmYXVsdFNlbWFudGljRGF0ZXMgPSBmdW5jdGlvbihmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD4pOiBSZWNvcmQ8c3RyaW5nLCBEZWZhdWx0U2VtYW50aWNEYXRlPiB7XG5cdGNvbnN0IGRlZmF1bHRTZW1hbnRpY0RhdGVzOiBhbnkgPSB7fTtcblx0Zm9yIChjb25zdCBmaWx0ZXJGaWVsZCBpbiBmaWx0ZXJGaWVsZHMpIHtcblx0XHRpZiAoZmlsdGVyRmllbGRzW2ZpbHRlckZpZWxkXT8uc2V0dGluZ3M/LmRlZmF1bHRWYWx1ZXM/Lmxlbmd0aCkge1xuXHRcdFx0ZGVmYXVsdFNlbWFudGljRGF0ZXNbZmlsdGVyRmllbGRdID0gZmlsdGVyRmllbGRzW2ZpbHRlckZpZWxkXT8uc2V0dGluZ3M/LmRlZmF1bHRWYWx1ZXM7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBkZWZhdWx0U2VtYW50aWNEYXRlcztcbn07XG5cbi8qKlxuICogRmluZCBhIHZpc3VhbGl6YXRpb24gYW5ub3RhdGlvbiB0aGF0IGNhbiBiZSB1c2VkIGZvciByZW5kZXJpbmcgdGhlIGxpc3QgcmVwb3J0LlxuICpcbiAqIEBwYXJhbSB7RW50aXR5VHlwZX0gZW50aXR5VHlwZSBUaGUgY3VycmVudCBFbnRpdHlUeXBlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGJJc0FMUFxuICogQHJldHVybnMge0xpbmVJdGVtIHwgUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyB8IHVuZGVmaW5lZH0gQSBjb21wbGlhbnQgYW5ub3RhdGlvbiBmb3IgcmVuZGVyaW5nIHRoZSBsaXN0IHJlcG9ydFxuICovXG5mdW5jdGlvbiBnZXRDb21wbGlhbnRWaXN1YWxpemF0aW9uQW5ub3RhdGlvbihcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0YklzQUxQOiBCb29sZWFuXG4pOiBMaW5lSXRlbSB8IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMgfCBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgYW5ub3RhdGlvblBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldERlZmF1bHRUZW1wbGF0ZUFubm90YXRpb25QYXRoKCk7XG5cdGNvbnN0IHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgPSBnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KGVudGl0eVR5cGUsIGFubm90YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0aWYgKGFubm90YXRpb25QYXRoICYmIHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRjb25zdCBwcmVzZW50YXRpb25WYXJpYW50ID0gc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudC5QcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdGlmICghcHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiUHJlc2VudGF0aW9uIFZhcmlhbnQgaXMgbm90IGNvbmZpZ3VyZWQgaW4gdGhlIFNQViBtZW50aW9uZWQgaW4gdGhlIG1hbmlmZXN0XCIpO1xuXHRcdH1cblx0XHRjb25zdCBiUFZDb21wbGFpbnQgPSBpc1ByZXNlbnRhdGlvbkNvbXBsaWFudChzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LlByZXNlbnRhdGlvblZhcmlhbnQpO1xuXHRcdGlmICghYlBWQ29tcGxhaW50KSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoaXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnQoc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCwgYklzQUxQKSkge1xuXHRcdFx0cmV0dXJuIHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0fVxuXHR9XG5cdGlmIChzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0aWYgKGlzU2VsZWN0aW9uUHJlc2VudGF0aW9uQ29tcGxpYW50KHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQsIGJJc0FMUCkpIHtcblx0XHRcdHJldHVybiBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdH1cblx0fVxuXHRjb25zdCBwcmVzZW50YXRpb25WYXJpYW50ID0gZ2V0RGVmYXVsdFByZXNlbnRhdGlvblZhcmlhbnQoZW50aXR5VHlwZSk7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0aWYgKGlzUHJlc2VudGF0aW9uQ29tcGxpYW50KHByZXNlbnRhdGlvblZhcmlhbnQsIGJJc0FMUCkpIHtcblx0XHRcdHJldHVybiBwcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdH1cblx0fVxuXHRpZiAoIWJJc0FMUCkge1xuXHRcdGNvbnN0IGRlZmF1bHRMaW5lSXRlbSA9IGdldERlZmF1bHRMaW5lSXRlbShlbnRpdHlUeXBlKTtcblx0XHRpZiAoZGVmYXVsdExpbmVJdGVtKSB7XG5cdFx0XHRyZXR1cm4gZGVmYXVsdExpbmVJdGVtO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5jb25zdCBnZXRWaWV3ID0gZnVuY3Rpb24odmlld0NvbnZlcnRlckNvbmZpZ3VyYXRpb246IFZpZXdDb252ZXJ0ZXJTZXR0aW5ncyk6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbiB7XG5cdGxldCBjb25maWcgPSB2aWV3Q29udmVydGVyQ29uZmlndXJhdGlvbjtcblx0aWYgKGNvbmZpZy5jb252ZXJ0ZXJDb250ZXh0KSB7XG5cdFx0bGV0IGNvbnZlcnRlckNvbnRleHQgPSBjb25maWcuY29udmVydGVyQ29udGV4dDtcblx0XHRjb25maWcgPSBjb25maWcgYXMgVmlld0Fubm90YXRpb25Db25maWd1cmF0aW9uO1xuXHRcdGxldCBwcmVzZW50YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiA9IGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbihcblx0XHRcdGNvbmZpZy5hbm5vdGF0aW9uXG5cdFx0XHRcdD8gY29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoKGNvbmZpZy5hbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkpXG5cdFx0XHRcdDogXCJcIixcblx0XHRcdHRydWUsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0Y29uZmlnIGFzIFZpZXdQYXRoQ29uZmlndXJhdGlvblxuXHRcdCk7XG5cdFx0bGV0IHRhYmxlQ29udHJvbElkID0gXCJcIjtcblx0XHRsZXQgY2hhcnRDb250cm9sSWQgPSBcIlwiO1xuXHRcdGxldCB0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gXCJcIjtcblx0XHRsZXQgc2VsZWN0aW9uVmFyaWFudFBhdGggPSBcIlwiO1xuXHRcdGNvbnN0IGlzTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uKGNvbmZpZzogVmlld0NvbmZpZ3VyYXRpb24pOiBjb25maWcgaXMgTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbiB7XG5cdFx0XHRyZXR1cm4gKGNvbmZpZyBhcyBNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uKS5rZXkgIT09IHVuZGVmaW5lZDtcblx0XHR9O1xuXHRcdGNvbnN0IGNyZWF0ZVZpc3VhbGl6YXRpb24gPSBmdW5jdGlvbihwcmVzZW50YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiwgaXNQcmltYXJ5PzogYm9vbGVhbikge1xuXHRcdFx0bGV0IGRlZmF1bHRWaXN1YWxpemF0aW9uO1xuXHRcdFx0Zm9yIChjb25zdCB2aXN1YWxpemF0aW9uIG9mIHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucykge1xuXHRcdFx0XHRpZiAoaXNQcmltYXJ5ICYmIHZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpIHtcblx0XHRcdFx0XHRkZWZhdWx0VmlzdWFsaXphdGlvbiA9IHZpc3VhbGl6YXRpb247XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFpc1ByaW1hcnkgJiYgdmlzdWFsaXphdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSkge1xuXHRcdFx0XHRcdGRlZmF1bHRWaXN1YWxpemF0aW9uID0gdmlzdWFsaXphdGlvbjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcHJlc2VudGF0aW9uQ3JlYXRlZCA9IE9iamVjdC5hc3NpZ24oe30sIHByZXNlbnRhdGlvbik7XG5cdFx0XHRpZiAoZGVmYXVsdFZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0cHJlc2VudGF0aW9uQ3JlYXRlZC52aXN1YWxpemF0aW9ucyA9IFtkZWZhdWx0VmlzdWFsaXphdGlvbl07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcHJlc2VudGF0aW9uQ3JlYXRlZDtcblx0XHR9O1xuXHRcdGNvbnN0IGdldFByZXNlbnRhdGlvbiA9IGZ1bmN0aW9uKGl0ZW06IFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbikge1xuXHRcdFx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKGl0ZW0uYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0Y29uc3QgdGFyZ2V0QW5ub3RhdGlvbiA9IHJlc29sdmVkVGFyZ2V0LmFubm90YXRpb24gYXMgRGF0YVZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucztcblx0XHRcdGNvbnZlcnRlckNvbnRleHQgPSByZXNvbHZlZFRhcmdldC5jb252ZXJ0ZXJDb250ZXh0O1xuXHRcdFx0Y29uc3QgYW5ub3RhdGlvbiA9IHRhcmdldEFubm90YXRpb247XG5cdFx0XHRwcmVzZW50YXRpb24gPSBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24oXG5cdFx0XHRcdGFubm90YXRpb25cblx0XHRcdFx0XHQ/IGNvbnZlcnRlckNvbnRleHQuZ2V0UmVsYXRpdmVBbm5vdGF0aW9uUGF0aChhbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkpXG5cdFx0XHRcdFx0OiBcIlwiLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRjb25maWcgYXMgVmlld1BhdGhDb25maWd1cmF0aW9uXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIHByZXNlbnRhdGlvbjtcblx0XHR9O1xuXHRcdGNvbnN0IGNyZWF0ZUFscFZpZXcgPSBmdW5jdGlvbihcblx0XHRcdHByZXNlbnRhdGlvbnM6IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbltdLFxuXHRcdFx0ZGVmYXVsdFBhdGg6IFwiYm90aFwiIHwgXCJwcmltYXJ5XCIgfCBcInNlY29uZGFyeVwiIHwgdW5kZWZpbmVkXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBwcmltYXJ5VmlzdWFsaXphdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uIHwgdW5kZWZpbmVkID0gY3JlYXRlVmlzdWFsaXphdGlvbihwcmVzZW50YXRpb25zWzBdLCB0cnVlKTtcblx0XHRcdGNoYXJ0Q29udHJvbElkID0gKHByaW1hcnlWaXN1YWxpemF0aW9uPy52aXN1YWxpemF0aW9uc1swXSBhcyBDaGFydFZpc3VhbGl6YXRpb24pLmlkO1xuXHRcdFx0Y29uc3Qgc2Vjb25kYXJ5VmlzdWFsaXphdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uIHwgdW5kZWZpbmVkID0gY3JlYXRlVmlzdWFsaXphdGlvbihcblx0XHRcdFx0cHJlc2VudGF0aW9uc1sxXSA/IHByZXNlbnRhdGlvbnNbMV0gOiBwcmVzZW50YXRpb25zWzBdXG5cdFx0XHQpO1xuXHRcdFx0dGFibGVDb250cm9sSWQgPSAoc2Vjb25kYXJ5VmlzdWFsaXphdGlvbj8udmlzdWFsaXphdGlvbnNbMF0gYXMgVGFibGVWaXN1YWxpemF0aW9uKS5hbm5vdGF0aW9uLmlkO1xuXHRcdFx0aWYgKHByaW1hcnlWaXN1YWxpemF0aW9uICYmIHNlY29uZGFyeVZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0Y29uc3QgdmlldzogQ29tYmluZWRWaWV3RGVmaW5pdGlvbiA9IHtcblx0XHRcdFx0XHRwcmltYXJ5VmlzdWFsaXphdGlvbixcblx0XHRcdFx0XHRzZWNvbmRhcnlWaXN1YWxpemF0aW9uLFxuXHRcdFx0XHRcdHRhYmxlQ29udHJvbElkLFxuXHRcdFx0XHRcdGNoYXJ0Q29udHJvbElkLFxuXHRcdFx0XHRcdGRlZmF1bHRQYXRoXG5cdFx0XHRcdH07XG5cdFx0XHRcdHJldHVybiB2aWV3O1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0aWYgKHByZXNlbnRhdGlvbj8udmlzdWFsaXphdGlvbnM/Lmxlbmd0aCA9PT0gMiAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlKSB7XG5cdFx0XHRjb25zdCB2aWV3OiBDb21iaW5lZFZpZXdEZWZpbml0aW9uIHwgdW5kZWZpbmVkID0gY3JlYXRlQWxwVmlldyhbcHJlc2VudGF0aW9uXSwgXCJib3RoXCIpO1xuXHRcdFx0aWYgKHZpZXcpIHtcblx0XHRcdFx0cmV0dXJuIHZpZXc7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyhjb25maWcgYXMgVmlld1BhdGhDb25maWd1cmF0aW9uKSB8fFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgeyBwcmltYXJ5LCBzZWNvbmRhcnkgfSA9IGNvbmZpZyBhcyBDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbjtcblx0XHRcdGlmIChwcmltYXJ5ICYmIHByaW1hcnkubGVuZ3RoICYmIHNlY29uZGFyeSAmJiBzZWNvbmRhcnkubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IHZpZXc6IENvbWJpbmVkVmlld0RlZmluaXRpb24gfCB1bmRlZmluZWQgPSBjcmVhdGVBbHBWaWV3KFxuXHRcdFx0XHRcdFtnZXRQcmVzZW50YXRpb24ocHJpbWFyeVswXSksIGdldFByZXNlbnRhdGlvbihzZWNvbmRhcnlbMF0pXSxcblx0XHRcdFx0XHQoY29uZmlnIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uKS5kZWZhdWx0UGF0aFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAodmlldykge1xuXHRcdFx0XHRcdHJldHVybiB2aWV3O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJTZWNvbmRhcnlJdGVtcyBpbiB0aGUgVmlld3MgaXMgbm90IHByZXNlbnRcIik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChpc011bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24oY29uZmlnKSkge1xuXHRcdFx0Ly8ga2V5IGV4aXN0cyBvbmx5IG9uIG11bHRpIHRhYmxlcyBtb2RlXG5cdFx0XHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oKGNvbmZpZyBhcyBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24pLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IHZpZXdBbm5vdGF0aW9uOiBWaWV3QW5ub3RhdGlvbnNUeXBlVHlwZXMgPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uIGFzIFZpZXdBbm5vdGF0aW9uc1R5cGVUeXBlcztcblx0XHRcdGNvbnZlcnRlckNvbnRleHQgPSByZXNvbHZlZFRhcmdldC5jb252ZXJ0ZXJDb250ZXh0O1xuXHRcdFx0dGl0bGUgPSBjb21waWxlQmluZGluZyhhbm5vdGF0aW9uRXhwcmVzc2lvbih2aWV3QW5ub3RhdGlvbi5UZXh0KSk7XG5cdFx0XHQvLyBOZWVkIHRvIGxvb3Agb24gdGFibGUgaW50byB2aWV3cyBzaW5jZSBtdWx0aSB0YWJsZSBtb2RlIGdldCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIChoaWRkZW4gZmlsdGVycyBvciBUYWJsZSBJZClcblx0XHRcdHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucy5mb3JFYWNoKCh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbiwgaW5kZXgpID0+IHtcblx0XHRcdFx0c3dpdGNoICh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi50eXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZTpcblx0XHRcdFx0XHRcdGNvbnN0IHRhYmxlVmlzdWFsaXphdGlvbiA9IHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1tpbmRleF0gYXMgVGFibGVWaXN1YWxpemF0aW9uO1xuXHRcdFx0XHRcdFx0Y29uc3QgZmlsdGVycyA9IHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLmZpbHRlcnMgfHwge307XG5cdFx0XHRcdFx0XHRmaWx0ZXJzLmhpZGRlbkZpbHRlcnMgPSBmaWx0ZXJzLmhpZGRlbkZpbHRlcnMgfHwgeyBwYXRoczogW10gfTtcblx0XHRcdFx0XHRcdGlmICghKGNvbmZpZyBhcyBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24pLmtlZXBQcmV2aW91c1ByZXNvbmFsaXphdGlvbikge1xuXHRcdFx0XHRcdFx0XHQvLyBOZWVkIHRvIG92ZXJyaWRlIFRhYmxlIElkIHRvIG1hdGNoIHdpdGggVGFiIEtleSAoY3VycmVudGx5IG9ubHkgdGFibGUgaXMgbWFuYWdlZCBpbiBtdWx0aXBsZSB2aWV3IG1vZGUpXG5cdFx0XHRcdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmlkID0gVGFibGVJRCgoY29uZmlnIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbikua2V5IHx8IFwiXCIsIFwiTGluZUl0ZW1cIik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb25maWcgPSBjb25maWcgYXMgVmlld0Fubm90YXRpb25Db25maWd1cmF0aW9uO1xuXHRcdFx0XHRcdFx0aWYgKGNvbmZpZyAmJiBjb25maWcuYW5ub3RhdGlvbiAmJiBjb25maWcuYW5ub3RhdGlvbi50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0XHRcdFx0XHRcdHNlbGVjdGlvblZhcmlhbnRQYXRoID0gKGNvbmZpZy5hbm5vdGF0aW9uIGFzIFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMpLlNlbGVjdGlvblZhcmlhbnQuZnVsbHlRdWFsaWZpZWROYW1lLnNwbGl0KFxuXHRcdFx0XHRcdFx0XHRcdFwiQFwiXG5cdFx0XHRcdFx0XHRcdClbMV07XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50UGF0aCA9IChjb25maWcgYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKS5hbm5vdGF0aW9uUGF0aDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8vUHJvdmlkZSBTZWxlY3Rpb24gVmFyaWFudCB0byBoaWRkZW5GaWx0ZXJzIGluIG9yZGVyIHRvIHNldCB0aGUgU1YgZmlsdGVycyB0byB0aGUgdGFibGUuXG5cdFx0XHRcdFx0XHQvL01EQyBUYWJsZSBvdmVycmlkZXMgYmluZGluZyBGaWx0ZXIgYW5kIGZyb20gU0FQIEZFIHRoZSBvbmx5IG1ldGhvZCB3aGVyZSB3ZSBhcmUgYWJsZSB0byBhZGRcblx0XHRcdFx0XHRcdC8vYWRkaXRpb25hbCBmaWx0ZXIgaXMgJ3JlYmluZFRhYmxlJyBpbnRvIFRhYmxlIGRlbGVnYXRlLlxuXHRcdFx0XHRcdFx0Ly9UbyBhdm9pZCBpbXBsZW1lbnRpbmcgc3BlY2lmaWMgTFIgZmVhdHVyZSB0byBTQVAgRkUgTWFjcm8gVGFibGUsIHRoZSBmaWx0ZXIocykgcmVsYXRlZCB0byB0aGUgVGFiIChtdWx0aSB0YWJsZSBtb2RlKVxuXHRcdFx0XHRcdFx0Ly9jYW4gYmUgcGFzc2VkIHRvIG1hY3JvIHRhYmxlIHZpYSBwYXJhbWV0ZXIvY29udGV4dCBuYW1lZCBmaWx0ZXJzIGFuZCBrZXkgaGlkZGVuRmlsdGVycy5cblx0XHRcdFx0XHRcdGZpbHRlcnMuaGlkZGVuRmlsdGVycy5wYXRocy5wdXNoKHsgYW5ub3RhdGlvblBhdGg6IHNlbGVjdGlvblZhcmlhbnRQYXRoIH0pO1xuXHRcdFx0XHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wuZmlsdGVycyA9IGZpbHRlcnM7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0OlxuXHRcdFx0XHRcdFx0Y29uc3QgY2hhcnRWaXN1YWxpemF0aW9uID0gcHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zW2luZGV4XSBhcyBDaGFydFZpc3VhbGl6YXRpb247XG5cdFx0XHRcdFx0XHRjaGFydFZpc3VhbGl6YXRpb24uaWQgPSBDaGFydElEKChjb25maWcgYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKS5rZXkgfHwgXCJcIiwgXCJDaGFydFwiKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucy5mb3JFYWNoKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uID0+IHtcblx0XHRcdGlmICh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSkge1xuXHRcdFx0XHR0YWJsZUNvbnRyb2xJZCA9IHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLmFubm90YXRpb24uaWQ7XG5cdFx0XHR9IGVsc2UgaWYgKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSB7XG5cdFx0XHRcdGNoYXJ0Q29udHJvbElkID0gdmlzdWFsaXphdGlvbkRlZmluaXRpb24uaWQ7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHByZXNlbnRhdGlvbixcblx0XHRcdHRhYmxlQ29udHJvbElkLFxuXHRcdFx0Y2hhcnRDb250cm9sSWQsXG5cdFx0XHR0aXRsZSxcblx0XHRcdHNlbGVjdGlvblZhcmlhbnRQYXRoXG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRjb25maWcgPSBjb25maWcgYXMgQ3VzdG9tVmlld0NvbmZpZ3VyYXRpb247XG5cdFx0Y29uc3QgdGl0bGUgPSBjb25maWcubGFiZWwsXG5cdFx0XHRmcmFnbWVudCA9IGNvbmZpZy50ZW1wbGF0ZSxcblx0XHRcdHR5cGUgPSBjb25maWcudHlwZSxcblx0XHRcdGN1c3RvbVRhYklkID0gQ3VzdG9tVGFiSUQoY29uZmlnLmtleSB8fCBcIlwiKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGl0bGUsXG5cdFx0XHRmcmFnbWVudCxcblx0XHRcdHR5cGUsXG5cdFx0XHRjdXN0b21UYWJJZFxuXHRcdH07XG5cdH1cbn07XG5cbmNvbnN0IGdldFZpZXdzID0gZnVuY3Rpb24oXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHNldHRpbmdzVmlld3M6IE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkXG4pOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSB7XG5cdGxldCB2aWV3Q29udmVydGVyQ29uZmlnczogVmlld0NvbnZlcnRlclNldHRpbmdzW10gPSBbXTtcblx0aWYgKHNldHRpbmdzVmlld3MpIHtcblx0XHRzZXR0aW5nc1ZpZXdzLnBhdGhzLmZvckVhY2goKHBhdGg6IFZpZXdQYXRoQ29uZmlndXJhdGlvbiB8IEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb24pID0+IHtcblx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMocGF0aCBhcyBWaWV3UGF0aENvbmZpZ3VyYXRpb24pKSB7XG5cdFx0XHRcdGlmIChzZXR0aW5nc1ZpZXdzLnBhdGhzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJBTFAgZmxhdm9yIGNhbm5vdCBoYXZlIG11bHRpcGxlIHZpZXdzXCIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhdGggPSBwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdFx0XHRcdHZpZXdDb252ZXJ0ZXJDb25maWdzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogY29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdHByaW1hcnk6IHBhdGgucHJpbWFyeSxcblx0XHRcdFx0XHRcdHNlY29uZGFyeTogcGF0aC5zZWNvbmRhcnksXG5cdFx0XHRcdFx0XHRkZWZhdWx0UGF0aDogcGF0aC5kZWZhdWx0UGF0aFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKChwYXRoIGFzIEN1c3RvbVZpZXdDb25maWd1cmF0aW9uKS50ZW1wbGF0ZSkge1xuXHRcdFx0XHRwYXRoID0gcGF0aCBhcyBDdXN0b21WaWV3Q29uZmlndXJhdGlvbjtcblx0XHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MucHVzaCh7XG5cdFx0XHRcdFx0a2V5OiBwYXRoLmtleSxcblx0XHRcdFx0XHRsYWJlbDogcGF0aC5sYWJlbCxcblx0XHRcdFx0XHR0ZW1wbGF0ZTogcGF0aC50ZW1wbGF0ZSxcblx0XHRcdFx0XHR0eXBlOiBcIkN1c3RvbVwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cGF0aCA9IHBhdGggYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdFx0XHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLFxuXHRcdFx0XHRcdHZpZXdDb252ZXJ0ZXJDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKFxuXHRcdFx0XHRcdFx0cGF0aC5jb250ZXh0UGF0aCB8fCAocGF0aC5lbnRpdHlTZXQgJiYgXCIvXCIgKyBwYXRoLmVudGl0eVNldCkgfHwgY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRlbnRpdHlUeXBlID0gdmlld0NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXG5cdFx0XHRcdGlmIChlbnRpdHlUeXBlICYmIHZpZXdDb252ZXJ0ZXJDb250ZXh0KSB7XG5cdFx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvblBhdGggPSBtYW5pZmVzdFdyYXBwZXIuZ2V0RGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGgoKTtcblx0XHRcdFx0XHRsZXQgYW5ub3RhdGlvbjtcblx0XHRcdFx0XHRjb25zdCByZXNvbHZlZFRhcmdldCA9IHZpZXdDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKHBhdGguYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0XHRcdGNvbnN0IHRhcmdldEFubm90YXRpb24gPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uIGFzIERhdGFWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnM7XG5cdFx0XHRcdFx0Y29uc3QgcmVzb2x2ZWRUYXJnZXRjb252ZXJ0ZXJDb250ZXh0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dDtcblx0XHRcdFx0XHRpZiAodGFyZ2V0QW5ub3RhdGlvbikge1xuXHRcdFx0XHRcdFx0aWYgKHRhcmdldEFubm90YXRpb24udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uVmFyaWFudCkge1xuXHRcdFx0XHRcdFx0XHRpZiAoYW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uID0gZ2V0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudChcblx0XHRcdFx0XHRcdFx0XHRcdHZpZXdDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSxcblx0XHRcdFx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZWRUYXJnZXRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uID0gZ2V0RGVmYXVsdExpbmVJdGVtKHZpZXdDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSkgYXMgTGluZUl0ZW07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb24gPSB0YXJnZXRBbm5vdGF0aW9uO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MucHVzaCh7XG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IHZpZXdDb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uLFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogcGF0aC5hbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHRcdFx0a2VlcFByZXZpb3VzUHJlc29uYWxpemF0aW9uOiBwYXRoLmtlZXBQcmV2aW91c1ByZXNvbmFsaXphdGlvbixcblx0XHRcdFx0XHRcdFx0a2V5OiBwYXRoLmtleVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIFRPRE8gRGlhZ25vc3RpY3MgbWVzc2FnZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlKSB7XG5cdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncyA9IGdldEFscFZpZXdDb25maWcoY29udmVydGVyQ29udGV4dCwgdmlld0NvbnZlcnRlckNvbmZpZ3MpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncy5wdXNoKHtcblx0XHRcdFx0YW5ub3RhdGlvbjogZ2V0Q29tcGxpYW50VmlzdWFsaXphdGlvbkFubm90YXRpb24oZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgZmFsc2UpLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHZpZXdDb252ZXJ0ZXJDb25maWdzLm1hcCh2aWV3Q29udmVydGVyQ29uZmlnID0+IHtcblx0XHRyZXR1cm4gZ2V0Vmlldyh2aWV3Q29udmVydGVyQ29uZmlnKTtcblx0fSk7XG59O1xuXG5mdW5jdGlvbiBnZXRBbHBWaWV3Q29uZmlnKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIHZpZXdDb25maWdzOiBWaWV3Q29udmVydGVyU2V0dGluZ3NbXSk6IFZpZXdDb252ZXJ0ZXJTZXR0aW5nc1tdIHtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBhbm5vdGF0aW9uID0gZ2V0Q29tcGxpYW50VmlzdWFsaXphdGlvbkFubm90YXRpb24oZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgdHJ1ZSk7XG5cdGxldCBjaGFydCwgdGFibGU7XG5cdGlmIChhbm5vdGF0aW9uKSB7XG5cdFx0dmlld0NvbmZpZ3MucHVzaCh7XG5cdFx0XHRhbm5vdGF0aW9uOiBhbm5vdGF0aW9uLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGNoYXJ0ID0gZ2V0RGVmYXVsdENoYXJ0KGVudGl0eVR5cGUpO1xuXHRcdHRhYmxlID0gZ2V0RGVmYXVsdExpbmVJdGVtKGVudGl0eVR5cGUpO1xuXHRcdGlmIChjaGFydCAmJiB0YWJsZSkge1xuXHRcdFx0Y29uc3QgcHJpbWFyeTogU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uW10gPSBbeyBhbm5vdGF0aW9uUGF0aDogY2hhcnQudGVybSB9XTtcblx0XHRcdGNvbnN0IHNlY29uZGFyeTogU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uW10gPSBbeyBhbm5vdGF0aW9uUGF0aDogdGFibGUudGVybSB9XTtcblx0XHRcdHZpZXdDb25maWdzLnB1c2goe1xuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRwcmltYXJ5OiBwcmltYXJ5LFxuXHRcdFx0XHRzZWNvbmRhcnk6IHNlY29uZGFyeSxcblx0XHRcdFx0ZGVmYXVsdFBhdGg6IFwiYm90aFwiXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHZpZXdDb25maWdzO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0SGVhZGVyQWN0aW9ucyA9IGZ1bmN0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoW10sIGdldEFjdGlvbnNGcm9tTWFuaWZlc3QobWFuaWZlc3RXcmFwcGVyLmdldEhlYWRlckFjdGlvbnMoKSwgY29udmVydGVyQ29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNoZWNrQ2hhcnRGaWx0ZXJCYXJJZCA9IGZ1bmN0aW9uKHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSwgZmlsdGVyQmFySWQ6IHN0cmluZykge1xuXHR2aWV3cy5mb3JFYWNoKHZpZXcgPT4ge1xuXHRcdGlmICghKHZpZXcgYXMgQ3VzdG9tVmlld0RlZmluaXRpb24pLnR5cGUpIHtcblx0XHRcdGNvbnN0IHByZXNlbnRhdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uID0gKHZpZXcgYXMgU2luZ2xlVmlld0RlZmluaXRpb24pLnByZXNlbnRhdGlvbjtcblx0XHRcdHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucy5mb3JFYWNoKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uID0+IHtcblx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0ICYmIHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLmZpbHRlcklkICE9PSBmaWx0ZXJCYXJJZCkge1xuXHRcdFx0XHRcdHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLmZpbHRlcklkID0gZmlsdGVyQmFySWQ7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIExpc3RSZXBvcnREZWZpbml0aW9uIGZvciBtdWx0aXBsZSBlbnRpdHkgc2V0cyAobXVsdGlwbGUgdGFibGUgbW9kZSkuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyB7TGlzdFJlcG9ydERlZmluaXRpb259IFRoZSBsaXN0IHJlcG9ydCBkZWZpbml0aW9uIGJhc2VkIG9uIGFubm90YXRpb24gKyBtYW5pZmVzdFxuICovXG5leHBvcnQgY29uc3QgY29udmVydFBhZ2UgPSBmdW5jdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogTGlzdFJlcG9ydERlZmluaXRpb24ge1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IHNDb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblxuXHRpZiAoIXNDb250ZXh0UGF0aCkge1xuXHRcdC8vIElmIHdlIGRvbid0IGhhdmUgYW4gZW50aXR5U2V0IGF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhbiBpc3N1ZSBJJ2Qgc2F5XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XCJBbiBFbnRpdHlTZXQgaXMgcmVxdWlyZWQgdG8gYmUgYWJsZSB0byBkaXNwbGF5IGEgTGlzdFJlcG9ydCwgcGxlYXNlIGFkanVzdCB5b3VyIGBlbnRpdHlTZXRgIHByb3BlcnR5IHRvIHBvaW50IHRvIG9uZS5cIlxuXHRcdCk7XG5cdH1cblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3Qgdmlld3NEZWZpbml0aW9uOiBNdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCA9IG1hbmlmZXN0V3JhcHBlci5nZXRWaWV3Q29uZmlndXJhdGlvbigpO1xuXHRjb25zdCBoYXNNdWx0aXBsZUVudGl0eVNldHMgPSBtYW5pZmVzdFdyYXBwZXIuaGFzTXVsdGlwbGVFbnRpdHlTZXRzKCk7XG5cdGNvbnN0IHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSA9IGdldFZpZXdzKGNvbnZlcnRlckNvbnRleHQsIHZpZXdzRGVmaW5pdGlvbik7XG5cdGNvbnN0IHNob3dUYWJDb3VudHMgPSB2aWV3c0RlZmluaXRpb24gPyB2aWV3c0RlZmluaXRpb24/LnNob3dDb3VudHMgfHwgaGFzTXVsdGlwbGVFbnRpdHlTZXRzIDogdW5kZWZpbmVkOyAvLyB3aXRoIG11bHRpIEVudGl0eVNldHMsIHRhYiBjb3VudHMgYXJlIGRpc3BsYXllZCBieSBkZWZhdWx0XG5cdGNvbnN0IGxyVGFibGVWaXN1YWxpemF0aW9ucyA9IGdldFRhYmxlVmlzdWFsaXphdGlvbnModmlld3MpO1xuXHRjb25zdCBzaG93UGlubmFibGVUb2dnbGUgPSBsclRhYmxlVmlzdWFsaXphdGlvbnMuc29tZSh0YWJsZSA9PiB0YWJsZS5jb250cm9sLnR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpO1xuXHRsZXQgc2luZ2xlVGFibGVJZCA9IFwiXCI7XG5cdGxldCBzaW5nbGVDaGFydElkID0gXCJcIjtcblx0Y29uc3QgZmlsdGVyQmFySWQgPSBGaWx0ZXJCYXJJRChzQ29udGV4dFBhdGgpO1xuXHRjb25zdCBmaWx0ZXJWYXJpYW50TWFuYWdlbWVudElEID0gRmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRChmaWx0ZXJCYXJJZCk7XG5cdGNvbnN0IHRhcmdldENvbnRyb2xJZHMgPSBbZmlsdGVyQmFySWRdLmNvbmNhdChcblx0XHRsclRhYmxlVmlzdWFsaXphdGlvbnMubWFwKHZpc3VhbGl6YXRpb24gPT4ge1xuXHRcdFx0cmV0dXJuIHZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5pZDtcblx0XHR9KVxuXHQpO1xuXHRjb25zdCBmYkNvbmZpZyA9IG1hbmlmZXN0V3JhcHBlci5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCk7XG5cdGNvbnN0IGZpbHRlckluaXRpYWxMYXlvdXQgPSBmYkNvbmZpZz8uaW5pdGlhbExheW91dCAhPT0gdW5kZWZpbmVkID8gZmJDb25maWc/LmluaXRpYWxMYXlvdXQudG9Mb3dlckNhc2UoKSA6IFwiY29tcGFjdFwiO1xuXHRjb25zdCBmaWx0ZXJMYXlvdXQgPSBmYkNvbmZpZz8ubGF5b3V0ICE9PSB1bmRlZmluZWQgPyBmYkNvbmZpZz8ubGF5b3V0LnRvTG93ZXJDYXNlKCkgOiBcImNvbXBhY3RcIjtcblx0Y29uc3QgdXNlU2VtYW50aWNEYXRlUmFuZ2UgPSBmYkNvbmZpZy51c2VTZW1hbnRpY0RhdGVSYW5nZSAhPT0gdW5kZWZpbmVkID8gZmJDb25maWcudXNlU2VtYW50aWNEYXRlUmFuZ2UgOiB0cnVlO1xuXG5cdGNvbnN0IG9Db25maWcgPSBnZXRDb250ZW50QXJlYUlkKGNvbnZlcnRlckNvbnRleHQsIHZpZXdzKTtcblx0aWYgKG9Db25maWcpIHtcblx0XHRzaW5nbGVDaGFydElkID0gb0NvbmZpZy5jaGFydElkO1xuXHRcdHNpbmdsZVRhYmxlSWQgPSBvQ29uZmlnLnRhYmxlSWQ7XG5cdH1cblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzID0gZ2V0U2VsZWN0aW9uRmllbGRzKGNvbnZlcnRlckNvbnRleHQsIGxyVGFibGVWaXN1YWxpemF0aW9ucyk7XG5cblx0Y29uc3QgaGlkZUJhc2ljU2VhcmNoID0gZ2V0RmlsdGVyQmFyaGlkZUJhc2ljU2VhcmNoKGxyVGFibGVWaXN1YWxpemF0aW9ucywgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IHNlbGVjdGlvblZhcmlhbnQgPSBnZXRTZWxlY3Rpb25WYXJpYW50KGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBkZWZhdWx0U2VtYW50aWNEYXRlczogYW55ID0gdXNlU2VtYW50aWNEYXRlUmFuZ2Vcblx0XHQ/IGdldERlZmF1bHRTZW1hbnRpY0RhdGVzKGdldE1hbmlmZXN0RmlsdGVyRmllbGRzKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpKVxuXHRcdDoge307XG5cdC8vIFNvcnQgaGVhZGVyIGFjdGlvbnMgYWNjb3JkaW5nIHRvIHBvc2l0aW9uIGF0dHJpYnV0ZXMgaW4gbWFuaWZlc3Rcblx0Y29uc3QgaGVhZGVyQWN0aW9ucyA9IGdldEhlYWRlckFjdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGhhc011bHRpVmlzdWFsaXphdGlvbnM6IGJvb2xlYW4gPVxuXHRcdG1hbmlmZXN0V3JhcHBlci5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkgfHwgY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZTtcblx0aWYgKGhhc011bHRpcGxlRW50aXR5U2V0cykge1xuXHRcdGNoZWNrQ2hhcnRGaWx0ZXJCYXJJZCh2aWV3cywgZmlsdGVyQmFySWQpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRtYWluRW50aXR5U2V0OiBzQ29udGV4dFBhdGgsXG5cdFx0bWFpbkVudGl0eVR5cGU6IHNDb250ZXh0UGF0aCArIFwiL1wiLFxuXHRcdHNpbmdsZVRhYmxlSWQsXG5cdFx0c2luZ2xlQ2hhcnRJZCxcblx0XHRzaG93VGFiQ291bnRzLFxuXHRcdGhlYWRlckFjdGlvbnMsXG5cdFx0c2hvd1Bpbm5hYmxlVG9nZ2xlOiBzaG93UGlubmFibGVUb2dnbGUsXG5cdFx0ZmlsdGVyQmFyOiB7XG5cdFx0XHRzZWxlY3Rpb25GaWVsZHMsXG5cdFx0XHRoaWRlQmFzaWNTZWFyY2hcblx0XHR9LFxuXHRcdHZpZXdzOiB2aWV3cyxcblx0XHRmaWx0ZXJCYXJJZCxcblx0XHRmaWx0ZXJDb25kaXRpb25zOiB7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50OiBzZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0ZGVmYXVsdFNlbWFudGljRGF0ZXM6IGRlZmF1bHRTZW1hbnRpY0RhdGVzXG5cdFx0fSxcblx0XHR2YXJpYW50TWFuYWdlbWVudDoge1xuXHRcdFx0aWQ6IGZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQsXG5cdFx0XHR0YXJnZXRDb250cm9sSWRzOiB0YXJnZXRDb250cm9sSWRzLmpvaW4oXCIsXCIpXG5cdFx0fSxcblx0XHRpc011bHRpRW50aXR5U2V0czogaGFzTXVsdGlwbGVFbnRpdHlTZXRzLFxuXHRcdGhhc011bHRpVmlzdWFsaXphdGlvbnM6IGhhc011bHRpVmlzdWFsaXphdGlvbnMsXG5cdFx0dXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0ZmlsdGVySW5pdGlhbExheW91dCxcblx0XHRmaWx0ZXJMYXlvdXQsXG5cdFx0a3BpRGVmaW5pdGlvbnM6IGdldEtQSURlZmluaXRpb25zKGNvbnZlcnRlckNvbnRleHQpXG5cdH07XG59O1xuXG5mdW5jdGlvbiBnZXRDb250ZW50QXJlYUlkKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSk6IENvbnRlbnRBcmVhSUQgfCB1bmRlZmluZWQge1xuXHRsZXQgc2luZ2xlVGFibGVJZCA9IFwiXCIsXG5cdFx0c2luZ2xlQ2hhcnRJZCA9IFwiXCI7XG5cdGlmIChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMoKSB8fFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2Vcblx0KSB7XG5cdFx0Zm9yIChsZXQgdmlldyBvZiB2aWV3cykge1xuXHRcdFx0dmlldyA9IHZpZXcgYXMgQ29tYmluZWRWaWV3RGVmaW5pdGlvbjtcblx0XHRcdGlmICh2aWV3LmNoYXJ0Q29udHJvbElkICYmIHZpZXcudGFibGVDb250cm9sSWQpIHtcblx0XHRcdFx0c2luZ2xlQ2hhcnRJZCA9IHZpZXcuY2hhcnRDb250cm9sSWQ7XG5cdFx0XHRcdHNpbmdsZVRhYmxlSWQgPSB2aWV3LnRhYmxlQ29udHJvbElkO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Zm9yIChsZXQgdmlldyBvZiB2aWV3cykge1xuXHRcdFx0dmlldyA9IHZpZXcgYXMgU2luZ2xlVmlld0RlZmluaXRpb247XG5cdFx0XHRpZiAoIXNpbmdsZVRhYmxlSWQgJiYgKHZpZXcgYXMgU2luZ2xlVGFibGVWaWV3RGVmaW5pdGlvbikudGFibGVDb250cm9sSWQpIHtcblx0XHRcdFx0c2luZ2xlVGFibGVJZCA9ICh2aWV3IGFzIFNpbmdsZVRhYmxlVmlld0RlZmluaXRpb24pLnRhYmxlQ29udHJvbElkIHx8IFwiXCI7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXNpbmdsZUNoYXJ0SWQgJiYgKHZpZXcgYXMgU2luZ2xlQ2hhcnRWaWV3RGVmaW5pdGlvbikuY2hhcnRDb250cm9sSWQpIHtcblx0XHRcdFx0c2luZ2xlQ2hhcnRJZCA9ICh2aWV3IGFzIFNpbmdsZUNoYXJ0Vmlld0RlZmluaXRpb24pLmNoYXJ0Q29udHJvbElkIHx8IFwiXCI7XG5cdFx0XHR9XG5cdFx0XHRpZiAoc2luZ2xlQ2hhcnRJZCAmJiBzaW5nbGVUYWJsZUlkKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRpZiAoc2luZ2xlVGFibGVJZCB8fCBzaW5nbGVDaGFydElkKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNoYXJ0SWQ6IHNpbmdsZUNoYXJ0SWQsXG5cdFx0XHR0YWJsZUlkOiBzaW5nbGVUYWJsZUlkXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuIl19
628
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxpc3RSZXBvcnRDb252ZXJ0ZXIudHMiXSwibmFtZXMiOlsiZ2V0VGFibGVWaXN1YWxpemF0aW9ucyIsInZpZXdzIiwidGFibGVzIiwiZm9yRWFjaCIsInZpZXciLCJ0eXBlIiwidmlzdWFsaXphdGlvbnMiLCJzZWNvbmRhcnlWaXN1YWxpemF0aW9uIiwicHJlc2VudGF0aW9uIiwidmlzdWFsaXphdGlvbiIsIlZpc3VhbGl6YXRpb25UeXBlIiwiVGFibGUiLCJwdXNoIiwiZ2V0Q2hhcnRWaXN1YWxpemF0aW9ucyIsImNoYXJ0cyIsInByaW1hcnlWaXN1YWxpemF0aW9uIiwiQ2hhcnQiLCJnZXREZWZhdWx0U2VtYW50aWNEYXRlcyIsImZpbHRlckZpZWxkcyIsImRlZmF1bHRTZW1hbnRpY0RhdGVzIiwiZmlsdGVyRmllbGQiLCJzZXR0aW5ncyIsImRlZmF1bHRWYWx1ZXMiLCJsZW5ndGgiLCJnZXRDb21wbGlhbnRWaXN1YWxpemF0aW9uQW5ub3RhdGlvbiIsImVudGl0eVR5cGUiLCJjb252ZXJ0ZXJDb250ZXh0IiwiYklzQUxQIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXREZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCIsInNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQiLCJnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IiwicHJlc2VudGF0aW9uVmFyaWFudCIsIlByZXNlbnRhdGlvblZhcmlhbnQiLCJFcnJvciIsImJQVkNvbXBsYWludCIsImlzUHJlc2VudGF0aW9uQ29tcGxpYW50IiwidW5kZWZpbmVkIiwiaXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnQiLCJnZXREZWZhdWx0UHJlc2VudGF0aW9uVmFyaWFudCIsImRlZmF1bHRMaW5lSXRlbSIsImdldERlZmF1bHRMaW5lSXRlbSIsImdldFZpZXciLCJ2aWV3Q29udmVydGVyQ29uZmlndXJhdGlvbiIsImNvbmZpZyIsImdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbiIsImFubm90YXRpb24iLCJnZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZ2V0RW50aXR5VHlwZSIsInRhYmxlQ29udHJvbElkIiwiY2hhcnRDb250cm9sSWQiLCJ0aXRsZSIsInNlbGVjdGlvblZhcmlhbnRQYXRoIiwiaXNNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uIiwia2V5IiwiY3JlYXRlVmlzdWFsaXphdGlvbiIsImlzUHJpbWFyeSIsImRlZmF1bHRWaXN1YWxpemF0aW9uIiwicHJlc2VudGF0aW9uQ3JlYXRlZCIsIk9iamVjdCIsImFzc2lnbiIsImdldFByZXNlbnRhdGlvbiIsIml0ZW0iLCJyZXNvbHZlZFRhcmdldCIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwidGFyZ2V0QW5ub3RhdGlvbiIsImNyZWF0ZUFscFZpZXciLCJwcmVzZW50YXRpb25zIiwiZGVmYXVsdFBhdGgiLCJpZCIsImdldFRlbXBsYXRlVHlwZSIsIlRlbXBsYXRlVHlwZSIsIkFuYWx5dGljYWxMaXN0UGFnZSIsImhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMiLCJwcmltYXJ5Iiwic2Vjb25kYXJ5Iiwidmlld0Fubm90YXRpb24iLCJjb21waWxlQmluZGluZyIsImFubm90YXRpb25FeHByZXNzaW9uIiwiVGV4dCIsInZpc3VhbGl6YXRpb25EZWZpbml0aW9uIiwiaW5kZXgiLCJ0YWJsZVZpc3VhbGl6YXRpb24iLCJmaWx0ZXJzIiwiY29udHJvbCIsImhpZGRlbkZpbHRlcnMiLCJwYXRocyIsImtlZXBQcmV2aW91c1ByZXNvbmFsaXphdGlvbiIsIlRhYmxlSUQiLCJ0ZXJtIiwiU2VsZWN0aW9uVmFyaWFudCIsInNwbGl0IiwiY2hhcnRWaXN1YWxpemF0aW9uIiwiQ2hhcnRJRCIsImxhYmVsIiwiZnJhZ21lbnQiLCJ0ZW1wbGF0ZSIsImN1c3RvbVRhYklkIiwiQ3VzdG9tVGFiSUQiLCJnZXRWaWV3cyIsInNldHRpbmdzVmlld3MiLCJ2aWV3Q29udmVydGVyQ29uZmlncyIsInBhdGgiLCJtYW5pZmVzdFdyYXBwZXIiLCJ2aWV3Q29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJjb250ZXh0UGF0aCIsImVudGl0eVNldCIsImdldENvbnRleHRQYXRoIiwicmVzb2x2ZWRUYXJnZXRjb252ZXJ0ZXJDb250ZXh0IiwiZ2V0QWxwVmlld0NvbmZpZyIsIm1hcCIsInZpZXdDb252ZXJ0ZXJDb25maWciLCJ2aWV3Q29uZmlncyIsImNoYXJ0IiwidGFibGUiLCJnZXREZWZhdWx0Q2hhcnQiLCJnZXRIZWFkZXJBY3Rpb25zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiY2hlY2tDaGFydEZpbHRlckJhcklkIiwiZmlsdGVyQmFySWQiLCJmaWx0ZXJJZCIsImNvbnZlcnRQYWdlIiwic0NvbnRleHRQYXRoIiwidmlld3NEZWZpbml0aW9uIiwiZ2V0Vmlld0NvbmZpZ3VyYXRpb24iLCJoYXNNdWx0aXBsZUVudGl0eVNldHMiLCJzaG93VGFiQ291bnRzIiwic2hvd0NvdW50cyIsImxyVGFibGVWaXN1YWxpemF0aW9ucyIsImxyQ2hhcnRWaXN1YWxpemF0aW9ucyIsInNob3dQaW5uYWJsZVRvZ2dsZSIsInNvbWUiLCJzaW5nbGVUYWJsZUlkIiwic2luZ2xlQ2hhcnRJZCIsIkZpbHRlckJhcklEIiwiZmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCIsIkZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQiLCJmYkNvbmZpZyIsImdldEZpbHRlckNvbmZpZ3VyYXRpb24iLCJmaWx0ZXJJbml0aWFsTGF5b3V0IiwiaW5pdGlhbExheW91dCIsInRvTG93ZXJDYXNlIiwiZmlsdGVyTGF5b3V0IiwibGF5b3V0IiwidXNlU2VtYW50aWNEYXRlUmFuZ2UiLCJvQ29uZmlnIiwiZ2V0Q29udGVudEFyZWFJZCIsImNoYXJ0SWQiLCJ0YWJsZUlkIiwic2VsZWN0aW9uRmllbGRzIiwiZ2V0U2VsZWN0aW9uRmllbGRzIiwiaGlkZUJhc2ljU2VhcmNoIiwiZ2V0RmlsdGVyQmFyaGlkZUJhc2ljU2VhcmNoIiwic2VsZWN0aW9uVmFyaWFudCIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyIsImhlYWRlckFjdGlvbnMiLCJoYXNNdWx0aVZpc3VhbGl6YXRpb25zIiwidmlzdWFsaXphdGlvbklkcyIsImNvbmNhdCIsInRhcmdldENvbnRyb2xJZHMiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkNvbnRyb2wiLCJJY29uVGFiQmFySUQiLCJtYWluRW50aXR5U2V0IiwibWFpbkVudGl0eVR5cGUiLCJmaWx0ZXJCYXIiLCJmaWx0ZXJDb25kaXRpb25zIiwidmFyaWFudE1hbmFnZW1lbnQiLCJqb2luIiwiaXNNdWx0aUVudGl0eVNldHMiLCJ0ZW1wbGF0ZVR5cGUiLCJrcGlEZWZpbml0aW9ucyIsImdldEtQSURlZmluaXRpb25zIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVNBLHNCQUFULENBQWdDQyxLQUFoQyxFQUF5RjtBQUN4RixRQUFNQyxNQUE0QixHQUFHLEVBQXJDO0FBQ0FELElBQUFBLEtBQUssQ0FBQ0UsT0FBTixDQUFjLFVBQVNDLElBQVQsRUFBZTtBQUM1QixVQUFJLENBQUVBLElBQUQsQ0FBK0JDLElBQXBDLEVBQTBDO0FBQ3pDLFlBQU1DLGNBQWMsR0FBSUYsSUFBRCxDQUFpQ0csc0JBQWpDLEdBQ25CSCxJQUFELENBQWlDRyxzQkFBakMsQ0FBd0RELGNBRHBDLEdBRW5CRixJQUFELENBQStCSSxZQUEvQixDQUE0Q0YsY0FGL0M7QUFJQUEsUUFBQUEsY0FBYyxDQUFDSCxPQUFmLENBQXVCLFVBQVNNLGFBQVQsRUFBd0I7QUFDOUMsY0FBSUEsYUFBYSxDQUFDSixJQUFkLEtBQXVCSyxp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QUFBLE9BQU8sRUFBRWhCO0FBRkgsT0FBUDtBQUlBOztBQUNELFdBQU9sRyxTQUFQO0FBQ0EiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uLFxuXHRWaWV3UGF0aENvbmZpZ3VyYXRpb24sXG5cdFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbixcblx0VmlzdWFsaXphdGlvblR5cGUsXG5cdFRlbXBsYXRlVHlwZSxcblx0Q29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24sXG5cdEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb24sXG5cdFZhcmlhbnRNYW5hZ2VtZW50VHlwZVxufSBmcm9tIFwiLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgRW50aXR5VHlwZSB9IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQge1xuXHREYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zLFxuXHREYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24sXG5cdGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbixcblx0Z2V0RGVmYXVsdENoYXJ0LFxuXHRnZXREZWZhdWx0TGluZUl0ZW0sXG5cdGdldERlZmF1bHRQcmVzZW50YXRpb25WYXJpYW50LFxuXHRnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LFxuXHRpc1ByZXNlbnRhdGlvbkNvbXBsaWFudCxcblx0Z2V0U2VsZWN0aW9uVmFyaWFudCxcblx0aXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnRcbn0gZnJvbSBcIi4uL2NvbnRyb2xzL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IHtcblx0TGluZUl0ZW0sXG5cdFByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMsXG5cdFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMsXG5cdFNlbGVjdGlvblZhcmlhbnRUeXBlVHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL2Rpc3QvZ2VuZXJhdGVkL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgQ3VzdG9tVGFiSUQsIEZpbHRlckJhcklELCBGaWx0ZXJWYXJpYW50TWFuYWdlbWVudElELCBUYWJsZUlELCBDaGFydElELCBJY29uVGFiQmFySUQgfSBmcm9tIFwiLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHsgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgeyBDaGFydFZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQ2hhcnRcIjtcbmltcG9ydCB7IEJhc2VBY3Rpb24sIGdldEFjdGlvbnNGcm9tTWFuaWZlc3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBDb25maWd1cmFibGVPYmplY3QsIGluc2VydEN1c3RvbUVsZW1lbnRzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IGFubm90YXRpb25FeHByZXNzaW9uLCBjb21waWxlQmluZGluZyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdFeHByZXNzaW9uXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBLUElEZWZpbml0aW9uLCBnZXRLUElEZWZpbml0aW9ucyB9IGZyb20gXCIuLi9jb250cm9scy9Db21tb24vS1BJXCI7XG5pbXBvcnQge1xuXHRnZXRTZWxlY3Rpb25GaWVsZHMsXG5cdGdldE1hbmlmZXN0RmlsdGVyRmllbGRzLFxuXHRnZXRGaWx0ZXJCYXJoaWRlQmFzaWNTZWFyY2gsXG5cdEZpbHRlckZpZWxkLFxuXHRDdXN0b21FbGVtZW50RmlsdGVyRmllbGRcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9GaWx0ZXJCYXJcIjtcblxudHlwZSBWaWV3QW5ub3RhdGlvbnNUeXBlVHlwZXMgPSBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzIHwgU2VsZWN0aW9uVmFyaWFudFR5cGVUeXBlcztcbnR5cGUgVmFyaWFudE1hbmFnZW1lbnREZWZpbml0aW9uID0ge1xuXHRpZDogc3RyaW5nO1xuXHR0YXJnZXRDb250cm9sSWRzOiBzdHJpbmc7XG59O1xuXG50eXBlIE11bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24gPSBWaWV3UGF0aENvbmZpZ3VyYXRpb24gJiB7XG5cdGFubm90YXRpb24/OiBEYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zO1xufTtcblxudHlwZSBTaW5nbGVWaWV3Q29uZmlndXJhdGlvbiA9IHtcblx0YW5ub3RhdGlvbj86IERhdGFWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnM7XG59O1xuXG50eXBlIEN1c3RvbVZpZXdDb25maWd1cmF0aW9uID0gQ3VzdG9tVmlld1RlbXBsYXRlQ29uZmlndXJhdGlvbiAmIHtcblx0dHlwZTogc3RyaW5nO1xufTtcblxudHlwZSBWaWV3Q29uZmlndXJhdGlvbiA9IE11bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24gfCBTaW5nbGVWaWV3Q29uZmlndXJhdGlvbiB8IEN1c3RvbVZpZXdDb25maWd1cmF0aW9uO1xudHlwZSBWaWV3QW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24gPSBNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uIHwgU2luZ2xlVmlld0NvbmZpZ3VyYXRpb247XG5cbnR5cGUgVmlld0NvbnZlcnRlclNldHRpbmdzID0gVmlld0NvbmZpZ3VyYXRpb24gJiB7XG5cdGNvbnZlcnRlckNvbnRleHQ/OiBDb252ZXJ0ZXJDb250ZXh0O1xufTtcblxudHlwZSBEZWZhdWx0U2VtYW50aWNEYXRlID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHRvcGVyYXRvcjogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgTGlzdFJlcG9ydERlZmluaXRpb24gPSB7XG5cdG1haW5FbnRpdHlTZXQ6IHN0cmluZztcblx0bWFpbkVudGl0eVR5cGU6IHN0cmluZzsgLy8gZW50aXR5VHlwZT4gYXQgdGhlIHN0YXJ0IG9mIExSIHRlbXBsYXRpbmdcblx0c2luZ2xlVGFibGVJZD86IHN0cmluZzsgLy8gb25seSB3aXRoIHNpbmdsZSBUYWJsZSBtb2RlXG5cdHNpbmdsZUNoYXJ0SWQ/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBzaW5nbGUgVGFibGUgbW9kZVxuXHRzaG93VGFiQ291bnRzPzogYm9vbGVhbjsgLy8gb25seSB3aXRoIG11bHRpIFRhYmxlIG1vZGVcblx0aGVhZGVyQWN0aW9uczogQmFzZUFjdGlvbltdO1xuXHRzaG93UGlubmFibGVUb2dnbGU/OiBib29sZWFuO1xuXHRmaWx0ZXJCYXI6IHtcblx0XHRzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW107XG5cdFx0aGlkZUJhc2ljU2VhcmNoOiBib29sZWFuO1xuXHR9O1xuXHR2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW107XG5cdGZpbHRlckNvbmRpdGlvbnM6IG9iamVjdDtcblx0aXNNdWx0aUVudGl0eVNldHM6IGJvb2xlYW47XG5cdGZpbHRlckJhcklkOiBzdHJpbmc7XG5cdHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudERlZmluaXRpb247XG5cdGhhc011bHRpVmlzdWFsaXphdGlvbnM6IGJvb2xlYW47XG5cdHRlbXBsYXRlVHlwZTogVGVtcGxhdGVUeXBlO1xuXHR1c2VTZW1hbnRpY0RhdGVSYW5nZT86IGJvb2xlYW47XG5cdGZpbHRlckluaXRpYWxMYXlvdXQ/OiBzdHJpbmc7XG5cdGZpbHRlckxheW91dD86IHN0cmluZztcblx0a3BpRGVmaW5pdGlvbnM6IEtQSURlZmluaXRpb25bXTtcbn07XG5cbmV4cG9ydCB0eXBlIExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbiA9IFNpbmdsZVZpZXdEZWZpbml0aW9uIHwgQ3VzdG9tVmlld0RlZmluaXRpb24gfCBDb21iaW5lZFZpZXdEZWZpbml0aW9uO1xuXG5leHBvcnQgdHlwZSBDb21iaW5lZFZpZXdEZWZpbml0aW9uID0ge1xuXHRzZWxlY3Rpb25WYXJpYW50UGF0aD86IHN0cmluZzsgLy8gb25seSB3aXRoIG9uIG11bHRpIFRhYmxlIG1vZGVcblx0dGl0bGU/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdHByaW1hcnlWaXN1YWxpemF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb247XG5cdHNlY29uZGFyeVZpc3VhbGl6YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbjtcblx0dGFibGVDb250cm9sSWQ6IHN0cmluZztcblx0Y2hhcnRDb250cm9sSWQ6IHN0cmluZztcblx0ZGVmYXVsdFBhdGg/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBDdXN0b21WaWV3RGVmaW5pdGlvbiA9IHtcblx0dGl0bGU/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdGZyYWdtZW50OiBzdHJpbmc7XG5cdHR5cGU6IHN0cmluZztcblx0Y3VzdG9tVGFiSWQ6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBTaW5nbGVWaWV3RGVmaW5pdGlvbiA9IFNpbmdsZVRhYmxlVmlld0RlZmluaXRpb24gfCBTaW5nbGVDaGFydFZpZXdEZWZpbml0aW9uO1xuXG5leHBvcnQgdHlwZSBCYXNlU2luZ2xlVmlld0RlZmluaXRpb24gPSB7XG5cdHNlbGVjdGlvblZhcmlhbnRQYXRoPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggb24gbXVsdGkgVGFibGUgbW9kZVxuXHR0aXRsZT86IHN0cmluZzsgLy8gb25seSB3aXRoIG11bHRpIFRhYmxlIG1vZGVcblx0cHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb247XG59O1xuXG5leHBvcnQgdHlwZSBTaW5nbGVUYWJsZVZpZXdEZWZpbml0aW9uID0gQmFzZVNpbmdsZVZpZXdEZWZpbml0aW9uICYge1xuXHR0YWJsZUNvbnRyb2xJZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFNpbmdsZUNoYXJ0Vmlld0RlZmluaXRpb24gPSBCYXNlU2luZ2xlVmlld0RlZmluaXRpb24gJiB7XG5cdGNoYXJ0Q29udHJvbElkPzogc3RyaW5nO1xufTtcblxudHlwZSBDb250ZW50QXJlYUlEID0ge1xuXHRjaGFydElkOiBzdHJpbmc7XG5cdHRhYmxlSWQ6IHN0cmluZztcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIGFsbCBsaXN0IHJlcG9ydCB0YWJsZXMuXG4gKiBAcGFyYW0ge0xpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdfSB2aWV3cyBUaGUgbGlzdCByZXBvcnQgdmlld3MgY29uZmlndXJlZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEByZXR1cm5zIHtUYWJsZVZpc3VhbGl6YXRpb25bXX0gVGhlIGxpc3QgcmVwb3J0IHRhYmxlXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlVmlzdWFsaXphdGlvbnModmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdKTogVGFibGVWaXN1YWxpemF0aW9uW10ge1xuXHRjb25zdCB0YWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdID0gW107XG5cdHZpZXdzLmZvckVhY2goZnVuY3Rpb24odmlldykge1xuXHRcdGlmICghKHZpZXcgYXMgQ3VzdG9tVmlld0RlZmluaXRpb24pLnR5cGUpIHtcblx0XHRcdGNvbnN0IHZpc3VhbGl6YXRpb25zID0gKHZpZXcgYXMgQ29tYmluZWRWaWV3RGVmaW5pdGlvbikuc2Vjb25kYXJ5VmlzdWFsaXphdGlvblxuXHRcdFx0XHQ/ICh2aWV3IGFzIENvbWJpbmVkVmlld0RlZmluaXRpb24pLnNlY29uZGFyeVZpc3VhbGl6YXRpb24udmlzdWFsaXphdGlvbnNcblx0XHRcdFx0OiAodmlldyBhcyBTaW5nbGVWaWV3RGVmaW5pdGlvbikucHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zO1xuXG5cdFx0XHR2aXN1YWxpemF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpIHtcblx0XHRcdFx0XHR0YWJsZXMucHVzaCh2aXN1YWxpemF0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHRhYmxlcztcbn1cblxuZnVuY3Rpb24gZ2V0Q2hhcnRWaXN1YWxpemF0aW9ucyh2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW10pOiBDaGFydFZpc3VhbGl6YXRpb25bXSB7XG5cdGNvbnN0IGNoYXJ0czogQ2hhcnRWaXN1YWxpemF0aW9uW10gPSBbXTtcblx0dmlld3MuZm9yRWFjaChmdW5jdGlvbih2aWV3KSB7XG5cdFx0aWYgKCEodmlldyBhcyBDdXN0b21WaWV3RGVmaW5pdGlvbikudHlwZSkge1xuXHRcdFx0Y29uc3QgdmlzdWFsaXphdGlvbnMgPSAodmlldyBhcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uKS5wcmltYXJ5VmlzdWFsaXphdGlvblxuXHRcdFx0XHQ/ICh2aWV3IGFzIENvbWJpbmVkVmlld0RlZmluaXRpb24pLnByaW1hcnlWaXN1YWxpemF0aW9uLnZpc3VhbGl6YXRpb25zXG5cdFx0XHRcdDogKHZpZXcgYXMgU2luZ2xlVmlld0RlZmluaXRpb24pLnByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucztcblxuXHRcdFx0dmlzdWFsaXphdGlvbnMuZm9yRWFjaChmdW5jdGlvbih2aXN1YWxpemF0aW9uKSB7XG5cdFx0XHRcdGlmICh2aXN1YWxpemF0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSB7XG5cdFx0XHRcdFx0Y2hhcnRzLnB1c2godmlzdWFsaXphdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBjaGFydHM7XG59XG5cbmNvbnN0IGdldERlZmF1bHRTZW1hbnRpY0RhdGVzID0gZnVuY3Rpb24oZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQ+KTogUmVjb3JkPHN0cmluZywgRGVmYXVsdFNlbWFudGljRGF0ZT4ge1xuXHRjb25zdCBkZWZhdWx0U2VtYW50aWNEYXRlczogYW55ID0ge307XG5cdGZvciAoY29uc3QgZmlsdGVyRmllbGQgaW4gZmlsdGVyRmllbGRzKSB7XG5cdFx0aWYgKGZpbHRlckZpZWxkc1tmaWx0ZXJGaWVsZF0/LnNldHRpbmdzPy5kZWZhdWx0VmFsdWVzPy5sZW5ndGgpIHtcblx0XHRcdGRlZmF1bHRTZW1hbnRpY0RhdGVzW2ZpbHRlckZpZWxkXSA9IGZpbHRlckZpZWxkc1tmaWx0ZXJGaWVsZF0/LnNldHRpbmdzPy5kZWZhdWx0VmFsdWVzO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGVmYXVsdFNlbWFudGljRGF0ZXM7XG59O1xuXG4vKipcbiAqIEZpbmQgYSB2aXN1YWxpemF0aW9uIGFubm90YXRpb24gdGhhdCBjYW4gYmUgdXNlZCBmb3IgcmVuZGVyaW5nIHRoZSBsaXN0IHJlcG9ydC5cbiAqXG4gKiBAcGFyYW0ge0VudGl0eVR5cGV9IGVudGl0eVR5cGUgVGhlIGN1cnJlbnQgRW50aXR5VHlwZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBiSXNBTFBcbiAqIEByZXR1cm5zIHtMaW5lSXRlbSB8IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMgfCB1bmRlZmluZWR9IEEgY29tcGxpYW50IGFubm90YXRpb24gZm9yIHJlbmRlcmluZyB0aGUgbGlzdCByZXBvcnRcbiAqL1xuZnVuY3Rpb24gZ2V0Q29tcGxpYW50VmlzdWFsaXphdGlvbkFubm90YXRpb24oXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGJJc0FMUDogQm9vbGVhblxuKTogTGluZUl0ZW0gfCBQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzIHwgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGFubm90YXRpb25QYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXREZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCgpO1xuXHRjb25zdCBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50ID0gZ2V0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudChlbnRpdHlUeXBlLCBhbm5vdGF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGlmIChhbm5vdGF0aW9uUGF0aCAmJiBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0Y29uc3QgcHJlc2VudGF0aW9uVmFyaWFudCA9IHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQuUHJlc2VudGF0aW9uVmFyaWFudDtcblx0XHRpZiAoIXByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlByZXNlbnRhdGlvbiBWYXJpYW50IGlzIG5vdCBjb25maWd1cmVkIGluIHRoZSBTUFYgbWVudGlvbmVkIGluIHRoZSBtYW5pZmVzdFwiKTtcblx0XHR9XG5cdFx0Y29uc3QgYlBWQ29tcGxhaW50ID0gaXNQcmVzZW50YXRpb25Db21wbGlhbnQoc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudC5QcmVzZW50YXRpb25WYXJpYW50KTtcblx0XHRpZiAoIWJQVkNvbXBsYWludCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKGlzU2VsZWN0aW9uUHJlc2VudGF0aW9uQ29tcGxpYW50KHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQsIGJJc0FMUCkpIHtcblx0XHRcdHJldHVybiBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdH1cblx0fVxuXHRpZiAoc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdGlmIChpc1NlbGVjdGlvblByZXNlbnRhdGlvbkNvbXBsaWFudChzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LCBiSXNBTFApKSB7XG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudDtcblx0XHR9XG5cdH1cblx0Y29uc3QgcHJlc2VudGF0aW9uVmFyaWFudCA9IGdldERlZmF1bHRQcmVzZW50YXRpb25WYXJpYW50KGVudGl0eVR5cGUpO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdGlmIChpc1ByZXNlbnRhdGlvbkNvbXBsaWFudChwcmVzZW50YXRpb25WYXJpYW50LCBiSXNBTFApKSB7XG5cdFx0XHRyZXR1cm4gcHJlc2VudGF0aW9uVmFyaWFudDtcblx0XHR9XG5cdH1cblx0aWYgKCFiSXNBTFApIHtcblx0XHRjb25zdCBkZWZhdWx0TGluZUl0ZW0gPSBnZXREZWZhdWx0TGluZUl0ZW0oZW50aXR5VHlwZSk7XG5cdFx0aWYgKGRlZmF1bHRMaW5lSXRlbSkge1xuXHRcdFx0cmV0dXJuIGRlZmF1bHRMaW5lSXRlbTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuY29uc3QgZ2V0VmlldyA9IGZ1bmN0aW9uKHZpZXdDb252ZXJ0ZXJDb25maWd1cmF0aW9uOiBWaWV3Q29udmVydGVyU2V0dGluZ3MpOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb24ge1xuXHRsZXQgY29uZmlnID0gdmlld0NvbnZlcnRlckNvbmZpZ3VyYXRpb247XG5cdGlmIChjb25maWcuY29udmVydGVyQ29udGV4dCkge1xuXHRcdGxldCBjb252ZXJ0ZXJDb250ZXh0ID0gY29uZmlnLmNvbnZlcnRlckNvbnRleHQ7XG5cdFx0Y29uZmlnID0gY29uZmlnIGFzIFZpZXdBbm5vdGF0aW9uQ29uZmlndXJhdGlvbjtcblx0XHRsZXQgcHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24gPSBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24oXG5cdFx0XHRjb25maWcuYW5ub3RhdGlvblxuXHRcdFx0XHQ/IGNvbnZlcnRlckNvbnRleHQuZ2V0UmVsYXRpdmVBbm5vdGF0aW9uUGF0aChjb25maWcuYW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUsIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpKVxuXHRcdFx0XHQ6IFwiXCIsXG5cdFx0XHR0cnVlLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdGNvbmZpZyBhcyBWaWV3UGF0aENvbmZpZ3VyYXRpb25cblx0XHQpO1xuXHRcdGxldCB0YWJsZUNvbnRyb2xJZCA9IFwiXCI7XG5cdFx0bGV0IGNoYXJ0Q29udHJvbElkID0gXCJcIjtcblx0XHRsZXQgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IFwiXCI7XG5cdFx0bGV0IHNlbGVjdGlvblZhcmlhbnRQYXRoID0gXCJcIjtcblx0XHRjb25zdCBpc011bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbihjb25maWc6IFZpZXdDb25maWd1cmF0aW9uKTogY29uZmlnIGlzIE11bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24ge1xuXHRcdFx0cmV0dXJuIChjb25maWcgYXMgTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbikua2V5ICE9PSB1bmRlZmluZWQ7XG5cdFx0fTtcblx0XHRjb25zdCBjcmVhdGVWaXN1YWxpemF0aW9uID0gZnVuY3Rpb24ocHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24sIGlzUHJpbWFyeT86IGJvb2xlYW4pIHtcblx0XHRcdGxldCBkZWZhdWx0VmlzdWFsaXphdGlvbjtcblx0XHRcdGZvciAoY29uc3QgdmlzdWFsaXphdGlvbiBvZiBwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMpIHtcblx0XHRcdFx0aWYgKGlzUHJpbWFyeSAmJiB2aXN1YWxpemF0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSB7XG5cdFx0XHRcdFx0ZGVmYXVsdFZpc3VhbGl6YXRpb24gPSB2aXN1YWxpemF0aW9uO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghaXNQcmltYXJ5ICYmIHZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpIHtcblx0XHRcdFx0XHRkZWZhdWx0VmlzdWFsaXphdGlvbiA9IHZpc3VhbGl6YXRpb247XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnN0IHByZXNlbnRhdGlvbkNyZWF0ZWQgPSBPYmplY3QuYXNzaWduKHt9LCBwcmVzZW50YXRpb24pO1xuXHRcdFx0aWYgKGRlZmF1bHRWaXN1YWxpemF0aW9uKSB7XG5cdFx0XHRcdHByZXNlbnRhdGlvbkNyZWF0ZWQudmlzdWFsaXphdGlvbnMgPSBbZGVmYXVsdFZpc3VhbGl6YXRpb25dO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHByZXNlbnRhdGlvbkNyZWF0ZWQ7XG5cdFx0fTtcblx0XHRjb25zdCBnZXRQcmVzZW50YXRpb24gPSBmdW5jdGlvbihpdGVtOiBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24pIHtcblx0XHRcdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihpdGVtLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IHRhcmdldEFubm90YXRpb24gPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uIGFzIERhdGFWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnM7XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dDtcblx0XHRcdGNvbnN0IGFubm90YXRpb24gPSB0YXJnZXRBbm5vdGF0aW9uO1xuXHRcdFx0cHJlc2VudGF0aW9uID0gZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uKFxuXHRcdFx0XHRhbm5vdGF0aW9uXG5cdFx0XHRcdFx0PyBjb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgoYW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUsIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpKVxuXHRcdFx0XHRcdDogXCJcIixcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0Y29uZmlnIGFzIFZpZXdQYXRoQ29uZmlndXJhdGlvblxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBwcmVzZW50YXRpb247XG5cdFx0fTtcblx0XHRjb25zdCBjcmVhdGVBbHBWaWV3ID0gZnVuY3Rpb24oXG5cdFx0XHRwcmVzZW50YXRpb25zOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb25bXSxcblx0XHRcdGRlZmF1bHRQYXRoOiBcImJvdGhcIiB8IFwicHJpbWFyeVwiIHwgXCJzZWNvbmRhcnlcIiB8IHVuZGVmaW5lZFxuXHRcdCkge1xuXHRcdFx0Y29uc3QgcHJpbWFyeVZpc3VhbGl6YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCA9IGNyZWF0ZVZpc3VhbGl6YXRpb24ocHJlc2VudGF0aW9uc1swXSwgdHJ1ZSk7XG5cdFx0XHRjaGFydENvbnRyb2xJZCA9IChwcmltYXJ5VmlzdWFsaXphdGlvbj8udmlzdWFsaXphdGlvbnNbMF0gYXMgQ2hhcnRWaXN1YWxpemF0aW9uKS5pZDtcblx0XHRcdGNvbnN0IHNlY29uZGFyeVZpc3VhbGl6YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCA9IGNyZWF0ZVZpc3VhbGl6YXRpb24oXG5cdFx0XHRcdHByZXNlbnRhdGlvbnNbMV0gPyBwcmVzZW50YXRpb25zWzFdIDogcHJlc2VudGF0aW9uc1swXVxuXHRcdFx0KTtcblx0XHRcdHRhYmxlQ29udHJvbElkID0gKHNlY29uZGFyeVZpc3VhbGl6YXRpb24/LnZpc3VhbGl6YXRpb25zWzBdIGFzIFRhYmxlVmlzdWFsaXphdGlvbikuYW5ub3RhdGlvbi5pZDtcblx0XHRcdGlmIChwcmltYXJ5VmlzdWFsaXphdGlvbiAmJiBzZWNvbmRhcnlWaXN1YWxpemF0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IHZpZXc6IENvbWJpbmVkVmlld0RlZmluaXRpb24gPSB7XG5cdFx0XHRcdFx0cHJpbWFyeVZpc3VhbGl6YXRpb24sXG5cdFx0XHRcdFx0c2Vjb25kYXJ5VmlzdWFsaXphdGlvbixcblx0XHRcdFx0XHR0YWJsZUNvbnRyb2xJZCxcblx0XHRcdFx0XHRjaGFydENvbnRyb2xJZCxcblx0XHRcdFx0XHRkZWZhdWx0UGF0aFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRyZXR1cm4gdmlldztcblx0XHRcdH1cblx0XHR9O1xuXHRcdGlmIChwcmVzZW50YXRpb24/LnZpc3VhbGl6YXRpb25zPy5sZW5ndGggPT09IDIgJiYgY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSkge1xuXHRcdFx0Y29uc3QgdmlldzogQ29tYmluZWRWaWV3RGVmaW5pdGlvbiB8IHVuZGVmaW5lZCA9IGNyZWF0ZUFscFZpZXcoW3ByZXNlbnRhdGlvbl0sIFwiYm90aFwiKTtcblx0XHRcdGlmICh2aWV3KSB7XG5cdFx0XHRcdHJldHVybiB2aWV3O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMoY29uZmlnIGFzIFZpZXdQYXRoQ29uZmlndXJhdGlvbikgfHxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2Vcblx0XHQpIHtcblx0XHRcdGNvbnN0IHsgcHJpbWFyeSwgc2Vjb25kYXJ5IH0gPSBjb25maWcgYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb247XG5cdFx0XHRpZiAocHJpbWFyeSAmJiBwcmltYXJ5Lmxlbmd0aCAmJiBzZWNvbmRhcnkgJiYgc2Vjb25kYXJ5Lmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCB2aWV3OiBDb21iaW5lZFZpZXdEZWZpbml0aW9uIHwgdW5kZWZpbmVkID0gY3JlYXRlQWxwVmlldyhcblx0XHRcdFx0XHRbZ2V0UHJlc2VudGF0aW9uKHByaW1hcnlbMF0pLCBnZXRQcmVzZW50YXRpb24oc2Vjb25kYXJ5WzBdKV0sXG5cdFx0XHRcdFx0KGNvbmZpZyBhcyBDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbikuZGVmYXVsdFBhdGhcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKHZpZXcpIHtcblx0XHRcdFx0XHRyZXR1cm4gdmlldztcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiU2Vjb25kYXJ5SXRlbXMgaW4gdGhlIFZpZXdzIGlzIG5vdCBwcmVzZW50XCIpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaXNNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uKGNvbmZpZykpIHtcblx0XHRcdC8vIGtleSBleGlzdHMgb25seSBvbiBtdWx0aSB0YWJsZXMgbW9kZVxuXHRcdFx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKChjb25maWcgYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKS5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRjb25zdCB2aWV3QW5ub3RhdGlvbjogVmlld0Fubm90YXRpb25zVHlwZVR5cGVzID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBWaWV3QW5ub3RhdGlvbnNUeXBlVHlwZXM7XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dDtcblx0XHRcdHRpdGxlID0gY29tcGlsZUJpbmRpbmcoYW5ub3RhdGlvbkV4cHJlc3Npb24odmlld0Fubm90YXRpb24uVGV4dCkpO1xuXHRcdFx0Ly8gTmVlZCB0byBsb29wIG9uIHRhYmxlIGludG8gdmlld3Mgc2luY2UgbXVsdGkgdGFibGUgbW9kZSBnZXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiAoaGlkZGVuIGZpbHRlcnMgb3IgVGFibGUgSWQpXG5cdFx0XHRwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMuZm9yRWFjaCgodmlzdWFsaXphdGlvbkRlZmluaXRpb24sIGluZGV4KSA9PiB7XG5cdFx0XHRcdHN3aXRjaCAodmlzdWFsaXphdGlvbkRlZmluaXRpb24udHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgVmlzdWFsaXphdGlvblR5cGUuVGFibGU6XG5cdFx0XHRcdFx0XHRjb25zdCB0YWJsZVZpc3VhbGl6YXRpb24gPSBwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnNbaW5kZXhdIGFzIFRhYmxlVmlzdWFsaXphdGlvbjtcblx0XHRcdFx0XHRcdGNvbnN0IGZpbHRlcnMgPSB0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC5maWx0ZXJzIHx8IHt9O1xuXHRcdFx0XHRcdFx0ZmlsdGVycy5oaWRkZW5GaWx0ZXJzID0gZmlsdGVycy5oaWRkZW5GaWx0ZXJzIHx8IHsgcGF0aHM6IFtdIH07XG5cdFx0XHRcdFx0XHRpZiAoIShjb25maWcgYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKS5rZWVwUHJldmlvdXNQcmVzb25hbGl6YXRpb24pIHtcblx0XHRcdFx0XHRcdFx0Ly8gTmVlZCB0byBvdmVycmlkZSBUYWJsZSBJZCB0byBtYXRjaCB3aXRoIFRhYiBLZXkgKGN1cnJlbnRseSBvbmx5IHRhYmxlIGlzIG1hbmFnZWQgaW4gbXVsdGlwbGUgdmlldyBtb2RlKVxuXHRcdFx0XHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5pZCA9IFRhYmxlSUQoKGNvbmZpZyBhcyBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24pLmtleSB8fCBcIlwiLCBcIkxpbmVJdGVtXCIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y29uZmlnID0gY29uZmlnIGFzIFZpZXdBbm5vdGF0aW9uQ29uZmlndXJhdGlvbjtcblx0XHRcdFx0XHRcdGlmIChjb25maWcgJiYgY29uZmlnLmFubm90YXRpb24gJiYgY29uZmlnLmFubm90YXRpb24udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50UGF0aCA9IChjb25maWcuYW5ub3RhdGlvbiBhcyBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzKS5TZWxlY3Rpb25WYXJpYW50LmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdChcblx0XHRcdFx0XHRcdFx0XHRcIkBcIlxuXHRcdFx0XHRcdFx0XHQpWzFdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudFBhdGggPSAoY29uZmlnIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbikuYW5ub3RhdGlvblBhdGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvL1Byb3ZpZGUgU2VsZWN0aW9uIFZhcmlhbnQgdG8gaGlkZGVuRmlsdGVycyBpbiBvcmRlciB0byBzZXQgdGhlIFNWIGZpbHRlcnMgdG8gdGhlIHRhYmxlLlxuXHRcdFx0XHRcdFx0Ly9NREMgVGFibGUgb3ZlcnJpZGVzIGJpbmRpbmcgRmlsdGVyIGFuZCBmcm9tIFNBUCBGRSB0aGUgb25seSBtZXRob2Qgd2hlcmUgd2UgYXJlIGFibGUgdG8gYWRkXG5cdFx0XHRcdFx0XHQvL2FkZGl0aW9uYWwgZmlsdGVyIGlzICdyZWJpbmRUYWJsZScgaW50byBUYWJsZSBkZWxlZ2F0ZS5cblx0XHRcdFx0XHRcdC8vVG8gYXZvaWQgaW1wbGVtZW50aW5nIHNwZWNpZmljIExSIGZlYXR1cmUgdG8gU0FQIEZFIE1hY3JvIFRhYmxlLCB0aGUgZmlsdGVyKHMpIHJlbGF0ZWQgdG8gdGhlIFRhYiAobXVsdGkgdGFibGUgbW9kZSlcblx0XHRcdFx0XHRcdC8vY2FuIGJlIHBhc3NlZCB0byBtYWNybyB0YWJsZSB2aWEgcGFyYW1ldGVyL2NvbnRleHQgbmFtZWQgZmlsdGVycyBhbmQga2V5IGhpZGRlbkZpbHRlcnMuXG5cdFx0XHRcdFx0XHRmaWx0ZXJzLmhpZGRlbkZpbHRlcnMucGF0aHMucHVzaCh7IGFubm90YXRpb25QYXRoOiBzZWxlY3Rpb25WYXJpYW50UGF0aCB9KTtcblx0XHRcdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLmZpbHRlcnMgPSBmaWx0ZXJzO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBWaXN1YWxpemF0aW9uVHlwZS5DaGFydDpcblx0XHRcdFx0XHRcdGNvbnN0IGNoYXJ0VmlzdWFsaXphdGlvbiA9IHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1tpbmRleF0gYXMgQ2hhcnRWaXN1YWxpemF0aW9uO1xuXHRcdFx0XHRcdFx0Y2hhcnRWaXN1YWxpemF0aW9uLmlkID0gQ2hhcnRJRCgoY29uZmlnIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbikua2V5IHx8IFwiXCIsIFwiQ2hhcnRcIik7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMuZm9yRWFjaCh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbiA9PiB7XG5cdFx0XHRpZiAodmlzdWFsaXphdGlvbkRlZmluaXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpIHtcblx0XHRcdFx0dGFibGVDb250cm9sSWQgPSB2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmlkO1xuXHRcdFx0fSBlbHNlIGlmICh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCkge1xuXHRcdFx0XHRjaGFydENvbnRyb2xJZCA9IHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLmlkO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiB7XG5cdFx0XHRwcmVzZW50YXRpb24sXG5cdFx0XHR0YWJsZUNvbnRyb2xJZCxcblx0XHRcdGNoYXJ0Q29udHJvbElkLFxuXHRcdFx0dGl0bGUsXG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50UGF0aFxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0Y29uZmlnID0gY29uZmlnIGFzIEN1c3RvbVZpZXdDb25maWd1cmF0aW9uO1xuXHRcdGNvbnN0IHRpdGxlID0gY29uZmlnLmxhYmVsLFxuXHRcdFx0ZnJhZ21lbnQgPSBjb25maWcudGVtcGxhdGUsXG5cdFx0XHR0eXBlID0gY29uZmlnLnR5cGUsXG5cdFx0XHRjdXN0b21UYWJJZCA9IEN1c3RvbVRhYklEKGNvbmZpZy5rZXkgfHwgXCJcIik7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRpdGxlLFxuXHRcdFx0ZnJhZ21lbnQsXG5cdFx0XHR0eXBlLFxuXHRcdFx0Y3VzdG9tVGFiSWRcblx0XHR9O1xuXHR9XG59O1xuXG5jb25zdCBnZXRWaWV3cyA9IGZ1bmN0aW9uKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRzZXR0aW5nc1ZpZXdzOiBNdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZFxuKTogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW10ge1xuXHRsZXQgdmlld0NvbnZlcnRlckNvbmZpZ3M6IFZpZXdDb252ZXJ0ZXJTZXR0aW5nc1tdID0gW107XG5cdGlmIChzZXR0aW5nc1ZpZXdzKSB7XG5cdFx0c2V0dGluZ3NWaWV3cy5wYXRocy5mb3JFYWNoKChwYXRoOiBWaWV3UGF0aENvbmZpZ3VyYXRpb24gfCBDdXN0b21WaWV3VGVtcGxhdGVDb25maWd1cmF0aW9uKSA9PiB7XG5cdFx0XHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKHBhdGggYXMgVmlld1BhdGhDb25maWd1cmF0aW9uKSkge1xuXHRcdFx0XHRpZiAoc2V0dGluZ3NWaWV3cy5wYXRocy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiQUxQIGZsYXZvciBjYW5ub3QgaGF2ZSBtdWx0aXBsZSB2aWV3c1wiKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRwYXRoID0gcGF0aCBhcyBDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbjtcblx0XHRcdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncy5wdXNoKHtcblx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRwcmltYXJ5OiBwYXRoLnByaW1hcnksXG5cdFx0XHRcdFx0XHRzZWNvbmRhcnk6IHBhdGguc2Vjb25kYXJ5LFxuXHRcdFx0XHRcdFx0ZGVmYXVsdFBhdGg6IHBhdGguZGVmYXVsdFBhdGhcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICgocGF0aCBhcyBDdXN0b21WaWV3Q29uZmlndXJhdGlvbikudGVtcGxhdGUpIHtcblx0XHRcdFx0cGF0aCA9IHBhdGggYXMgQ3VzdG9tVmlld0NvbmZpZ3VyYXRpb247XG5cdFx0XHRcdHZpZXdDb252ZXJ0ZXJDb25maWdzLnB1c2goe1xuXHRcdFx0XHRcdGtleTogcGF0aC5rZXksXG5cdFx0XHRcdFx0bGFiZWw6IHBhdGgubGFiZWwsXG5cdFx0XHRcdFx0dGVtcGxhdGU6IHBhdGgudGVtcGxhdGUsXG5cdFx0XHRcdFx0dHlwZTogXCJDdXN0b21cIlxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHBhdGggPSBwYXRoIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbjtcblx0XHRcdFx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKSxcblx0XHRcdFx0XHR2aWV3Q29udmVydGVyQ29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihcblx0XHRcdFx0XHRcdHBhdGguY29udGV4dFBhdGggfHwgKHBhdGguZW50aXR5U2V0ICYmIFwiL1wiICsgcGF0aC5lbnRpdHlTZXQpIHx8IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0ZW50aXR5VHlwZSA9IHZpZXdDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblxuXHRcdFx0XHRpZiAoZW50aXR5VHlwZSAmJiB2aWV3Q29udmVydGVyQ29udGV4dCkge1xuXHRcdFx0XHRcdGNvbnN0IGFubm90YXRpb25QYXRoID0gbWFuaWZlc3RXcmFwcGVyLmdldERlZmF1bHRUZW1wbGF0ZUFubm90YXRpb25QYXRoKCk7XG5cdFx0XHRcdFx0bGV0IGFubm90YXRpb247XG5cdFx0XHRcdFx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSB2aWV3Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihwYXRoLmFubm90YXRpb25QYXRoKTtcblx0XHRcdFx0XHRjb25zdCB0YXJnZXRBbm5vdGF0aW9uID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBEYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zO1xuXHRcdFx0XHRcdGNvbnN0IHJlc29sdmVkVGFyZ2V0Y29udmVydGVyQ29udGV4dCA9IHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQ7XG5cdFx0XHRcdFx0aWYgKHRhcmdldEFubm90YXRpb24pIHtcblx0XHRcdFx0XHRcdGlmICh0YXJnZXRBbm5vdGF0aW9uLnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbiA9IGdldFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQoXG5cdFx0XHRcdFx0XHRcdFx0XHR2aWV3Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmVkVGFyZ2V0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbiA9IGdldERlZmF1bHRMaW5lSXRlbSh2aWV3Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkpIGFzIExpbmVJdGVtO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uID0gdGFyZ2V0QW5ub3RhdGlvbjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHZpZXdDb252ZXJ0ZXJDb25maWdzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiB2aWV3Q29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbixcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IHBhdGguYW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRcdGtlZXBQcmV2aW91c1ByZXNvbmFsaXphdGlvbjogcGF0aC5rZWVwUHJldmlvdXNQcmVzb25hbGl6YXRpb24sXG5cdFx0XHRcdFx0XHRcdGtleTogcGF0aC5rZXlcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBUT0RPIERpYWdub3N0aWNzIG1lc3NhZ2Vcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSkge1xuXHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MgPSBnZXRBbHBWaWV3Q29uZmlnKGNvbnZlcnRlckNvbnRleHQsIHZpZXdDb252ZXJ0ZXJDb25maWdzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MucHVzaCh7XG5cdFx0XHRcdGFubm90YXRpb246IGdldENvbXBsaWFudFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIGZhbHNlKSxcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogY29udmVydGVyQ29udGV4dFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2aWV3Q29udmVydGVyQ29uZmlncy5tYXAodmlld0NvbnZlcnRlckNvbmZpZyA9PiB7XG5cdFx0cmV0dXJuIGdldFZpZXcodmlld0NvbnZlcnRlckNvbmZpZyk7XG5cdH0pO1xufTtcblxuZnVuY3Rpb24gZ2V0QWxwVmlld0NvbmZpZyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LCB2aWV3Q29uZmlnczogVmlld0NvbnZlcnRlclNldHRpbmdzW10pOiBWaWV3Q29udmVydGVyU2V0dGluZ3NbXSB7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Y29uc3QgYW5ub3RhdGlvbiA9IGdldENvbXBsaWFudFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIHRydWUpO1xuXHRsZXQgY2hhcnQsIHRhYmxlO1xuXHRpZiAoYW5ub3RhdGlvbikge1xuXHRcdHZpZXdDb25maWdzLnB1c2goe1xuXHRcdFx0YW5ub3RhdGlvbjogYW5ub3RhdGlvbixcblx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRjaGFydCA9IGdldERlZmF1bHRDaGFydChlbnRpdHlUeXBlKTtcblx0XHR0YWJsZSA9IGdldERlZmF1bHRMaW5lSXRlbShlbnRpdHlUeXBlKTtcblx0XHRpZiAoY2hhcnQgJiYgdGFibGUpIHtcblx0XHRcdGNvbnN0IHByaW1hcnk6IFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbltdID0gW3sgYW5ub3RhdGlvblBhdGg6IGNoYXJ0LnRlcm0gfV07XG5cdFx0XHRjb25zdCBzZWNvbmRhcnk6IFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbltdID0gW3sgYW5ub3RhdGlvblBhdGg6IHRhYmxlLnRlcm0gfV07XG5cdFx0XHR2aWV3Q29uZmlncy5wdXNoKHtcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogY29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0cHJpbWFyeTogcHJpbWFyeSxcblx0XHRcdFx0c2Vjb25kYXJ5OiBzZWNvbmRhcnksXG5cdFx0XHRcdGRlZmF1bHRQYXRoOiBcImJvdGhcIlxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2aWV3Q29uZmlncztcbn1cblxuZXhwb3J0IGNvbnN0IGdldEhlYWRlckFjdGlvbnMgPSBmdW5jdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQmFzZUFjdGlvbltdIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0cmV0dXJuIGluc2VydEN1c3RvbUVsZW1lbnRzKFtdLCBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KG1hbmlmZXN0V3JhcHBlci5nZXRIZWFkZXJBY3Rpb25zKCksIGNvbnZlcnRlckNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjaGVja0NoYXJ0RmlsdGVyQmFySWQgPSBmdW5jdGlvbih2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW10sIGZpbHRlckJhcklkOiBzdHJpbmcpIHtcblx0dmlld3MuZm9yRWFjaCh2aWV3ID0+IHtcblx0XHRpZiAoISh2aWV3IGFzIEN1c3RvbVZpZXdEZWZpbml0aW9uKS50eXBlKSB7XG5cdFx0XHRjb25zdCBwcmVzZW50YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiA9ICh2aWV3IGFzIFNpbmdsZVZpZXdEZWZpbml0aW9uKS5wcmVzZW50YXRpb247XG5cdFx0XHRwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMuZm9yRWFjaCh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbiA9PiB7XG5cdFx0XHRcdGlmICh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCAmJiB2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi5maWx0ZXJJZCAhPT0gZmlsdGVyQmFySWQpIHtcblx0XHRcdFx0XHR2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi5maWx0ZXJJZCA9IGZpbHRlckJhcklkO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBMaXN0UmVwb3J0RGVmaW5pdGlvbiBmb3IgbXVsdGlwbGUgZW50aXR5IHNldHMgKG11bHRpcGxlIHRhYmxlIG1vZGUpLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge0xpc3RSZXBvcnREZWZpbml0aW9ufSBUaGUgbGlzdCByZXBvcnQgZGVmaW5pdGlvbiBiYXNlZCBvbiBhbm5vdGF0aW9uICsgbWFuaWZlc3RcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbnZlcnRQYWdlID0gZnVuY3Rpb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IExpc3RSZXBvcnREZWZpbml0aW9uIHtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBzQ29udGV4dFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cblx0aWYgKCFzQ29udGV4dFBhdGgpIHtcblx0XHQvLyBJZiB3ZSBkb24ndCBoYXZlIGFuIGVudGl0eVNldCBhdCB0aGlzIHBvaW50IHdlIGhhdmUgYW4gaXNzdWUgSSdkIHNheVxuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFwiQW4gRW50aXR5U2V0IGlzIHJlcXVpcmVkIHRvIGJlIGFibGUgdG8gZGlzcGxheSBhIExpc3RSZXBvcnQsIHBsZWFzZSBhZGp1c3QgeW91ciBgZW50aXR5U2V0YCBwcm9wZXJ0eSB0byBwb2ludCB0byBvbmUuXCJcblx0XHQpO1xuXHR9XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IHZpZXdzRGVmaW5pdGlvbjogTXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKTtcblx0Y29uc3QgaGFzTXVsdGlwbGVFbnRpdHlTZXRzID0gbWFuaWZlc3RXcmFwcGVyLmhhc011bHRpcGxlRW50aXR5U2V0cygpO1xuXHRjb25zdCB2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW10gPSBnZXRWaWV3cyhjb252ZXJ0ZXJDb250ZXh0LCB2aWV3c0RlZmluaXRpb24pO1xuXHRjb25zdCBzaG93VGFiQ291bnRzID0gdmlld3NEZWZpbml0aW9uID8gdmlld3NEZWZpbml0aW9uPy5zaG93Q291bnRzIHx8IGhhc011bHRpcGxlRW50aXR5U2V0cyA6IHVuZGVmaW5lZDsgLy8gd2l0aCBtdWx0aSBFbnRpdHlTZXRzLCB0YWIgY291bnRzIGFyZSBkaXNwbGF5ZWQgYnkgZGVmYXVsdFxuXHRjb25zdCBsclRhYmxlVmlzdWFsaXphdGlvbnMgPSBnZXRUYWJsZVZpc3VhbGl6YXRpb25zKHZpZXdzKTtcblx0Y29uc3QgbHJDaGFydFZpc3VhbGl6YXRpb25zID0gZ2V0Q2hhcnRWaXN1YWxpemF0aW9ucyh2aWV3cyk7XG5cdGNvbnN0IHNob3dQaW5uYWJsZVRvZ2dsZSA9IGxyVGFibGVWaXN1YWxpemF0aW9ucy5zb21lKHRhYmxlID0+IHRhYmxlLmNvbnRyb2wudHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIik7XG5cdGxldCBzaW5nbGVUYWJsZUlkID0gXCJcIjtcblx0bGV0IHNpbmdsZUNoYXJ0SWQgPSBcIlwiO1xuXHRjb25zdCBmaWx0ZXJCYXJJZCA9IEZpbHRlckJhcklEKHNDb250ZXh0UGF0aCk7XG5cdGNvbnN0IGZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQgPSBGaWx0ZXJWYXJpYW50TWFuYWdlbWVudElEKGZpbHRlckJhcklkKTtcblx0Y29uc3QgZmJDb25maWcgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0RmlsdGVyQ29uZmlndXJhdGlvbigpO1xuXHRjb25zdCBmaWx0ZXJJbml0aWFsTGF5b3V0ID0gZmJDb25maWc/LmluaXRpYWxMYXlvdXQgIT09IHVuZGVmaW5lZCA/IGZiQ29uZmlnPy5pbml0aWFsTGF5b3V0LnRvTG93ZXJDYXNlKCkgOiBcImNvbXBhY3RcIjtcblx0Y29uc3QgZmlsdGVyTGF5b3V0ID0gZmJDb25maWc/LmxheW91dCAhPT0gdW5kZWZpbmVkID8gZmJDb25maWc/LmxheW91dC50b0xvd2VyQ2FzZSgpIDogXCJjb21wYWN0XCI7XG5cdGNvbnN0IHVzZVNlbWFudGljRGF0ZVJhbmdlID0gZmJDb25maWcudXNlU2VtYW50aWNEYXRlUmFuZ2UgIT09IHVuZGVmaW5lZCA/IGZiQ29uZmlnLnVzZVNlbWFudGljRGF0ZVJhbmdlIDogdHJ1ZTtcblxuXHRjb25zdCBvQ29uZmlnID0gZ2V0Q29udGVudEFyZWFJZChjb252ZXJ0ZXJDb250ZXh0LCB2aWV3cyk7XG5cdGlmIChvQ29uZmlnKSB7XG5cdFx0c2luZ2xlQ2hhcnRJZCA9IG9Db25maWcuY2hhcnRJZDtcblx0XHRzaW5nbGVUYWJsZUlkID0gb0NvbmZpZy50YWJsZUlkO1xuXHR9XG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkcyA9IGdldFNlbGVjdGlvbkZpZWxkcyhjb252ZXJ0ZXJDb250ZXh0LCBsclRhYmxlVmlzdWFsaXphdGlvbnMpO1xuXG5cdGNvbnN0IGhpZGVCYXNpY1NlYXJjaCA9IGdldEZpbHRlckJhcmhpZGVCYXNpY1NlYXJjaChsclRhYmxlVmlzdWFsaXphdGlvbnMsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBzZWxlY3Rpb25WYXJpYW50ID0gZ2V0U2VsZWN0aW9uVmFyaWFudChlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgZGVmYXVsdFNlbWFudGljRGF0ZXM6IGFueSA9IHVzZVNlbWFudGljRGF0ZVJhbmdlXG5cdFx0PyBnZXREZWZhdWx0U2VtYW50aWNEYXRlcyhnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyhlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KSlcblx0XHQ6IHt9O1xuXHQvLyBTb3J0IGhlYWRlciBhY3Rpb25zIGFjY29yZGluZyB0byBwb3NpdGlvbiBhdHRyaWJ1dGVzIGluIG1hbmlmZXN0XG5cdGNvbnN0IGhlYWRlckFjdGlvbnMgPSBnZXRIZWFkZXJBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBoYXNNdWx0aVZpc3VhbGl6YXRpb25zOiBib29sZWFuID1cblx0XHRtYW5pZmVzdFdyYXBwZXIuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpIHx8IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2U7XG5cdGlmIChoYXNNdWx0aXBsZUVudGl0eVNldHMpIHtcblx0XHRjaGVja0NoYXJ0RmlsdGVyQmFySWQodmlld3MsIGZpbHRlckJhcklkKTtcblx0fVxuXG5cdGNvbnN0IHZpc3VhbGl6YXRpb25JZHMgPSAgbHJUYWJsZVZpc3VhbGl6YXRpb25zLm1hcCh2aXN1YWxpemF0aW9uID0+IHtcblx0XHRyZXR1cm4gdmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmlkO1xuXHR9KS5jb25jYXQoXG5cdGxyQ2hhcnRWaXN1YWxpemF0aW9ucy5tYXAodmlzdWFsaXphdGlvbiA9PiB7XG5cdFx0cmV0dXJuIHZpc3VhbGl6YXRpb24uaWQ7XG5cdH0pKTtcblx0Y29uc3QgdGFyZ2V0Q29udHJvbElkcyA9IFtcblx0XHRmaWx0ZXJCYXJJZCxcblx0XHQuLi4obWFuaWZlc3RXcmFwcGVyLmdldFZhcmlhbnRNYW5hZ2VtZW50KCkgIT09IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sID8gdmlzdWFsaXphdGlvbklkcyA6IFtdKSxcblx0XHQuLi4oIWhhc011bHRpVmlzdWFsaXphdGlvbnMgJiYgdmlld3MubGVuZ3RoID4gMSA/IFtJY29uVGFiQmFySUQoKV0gOiBbXSlcblx0XTtcblxuXHRyZXR1cm4ge1xuXHRcdG1haW5FbnRpdHlTZXQ6IHNDb250ZXh0UGF0aCxcblx0XHRtYWluRW50aXR5VHlwZTogc0NvbnRleHRQYXRoICsgXCIvXCIsXG5cdFx0c2luZ2xlVGFibGVJZCxcblx0XHRzaW5nbGVDaGFydElkLFxuXHRcdHNob3dUYWJDb3VudHMsXG5cdFx0aGVhZGVyQWN0aW9ucyxcblx0XHRzaG93UGlubmFibGVUb2dnbGU6IHNob3dQaW5uYWJsZVRvZ2dsZSxcblx0XHRmaWx0ZXJCYXI6IHtcblx0XHRcdHNlbGVjdGlvbkZpZWxkcyxcblx0XHRcdGhpZGVCYXNpY1NlYXJjaFxuXHRcdH0sXG5cdFx0dmlld3M6IHZpZXdzLFxuXHRcdGZpbHRlckJhcklkLFxuXHRcdGZpbHRlckNvbmRpdGlvbnM6IHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IHNlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRkZWZhdWx0U2VtYW50aWNEYXRlczogZGVmYXVsdFNlbWFudGljRGF0ZXNcblx0XHR9LFxuXHRcdHZhcmlhbnRNYW5hZ2VtZW50OiB7XG5cdFx0XHRpZDogZmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCxcblx0XHRcdHRhcmdldENvbnRyb2xJZHM6IHRhcmdldENvbnRyb2xJZHMuam9pbihcIixcIilcblx0XHR9LFxuXHRcdGlzTXVsdGlFbnRpdHlTZXRzOiBoYXNNdWx0aXBsZUVudGl0eVNldHMsXG5cdFx0aGFzTXVsdGlWaXN1YWxpemF0aW9uczogaGFzTXVsdGlWaXN1YWxpemF0aW9ucyxcblx0XHR0ZW1wbGF0ZVR5cGU6IG1hbmlmZXN0V3JhcHBlci5nZXRUZW1wbGF0ZVR5cGUoKSxcblx0XHR1c2VTZW1hbnRpY0RhdGVSYW5nZSxcblx0XHRmaWx0ZXJJbml0aWFsTGF5b3V0LFxuXHRcdGZpbHRlckxheW91dCxcblx0XHRrcGlEZWZpbml0aW9uczogZ2V0S1BJRGVmaW5pdGlvbnMoY29udmVydGVyQ29udGV4dClcblx0fTtcbn07XG5cbmZ1bmN0aW9uIGdldENvbnRlbnRBcmVhSWQoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgdmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdKTogQ29udGVudEFyZWFJRCB8IHVuZGVmaW5lZCB7XG5cdGxldCBzaW5nbGVUYWJsZUlkID0gXCJcIixcblx0XHRzaW5nbGVDaGFydElkID0gXCJcIjtcblx0aWYgKFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHQpIHtcblx0XHRmb3IgKGxldCB2aWV3IG9mIHZpZXdzKSB7XG5cdFx0XHR2aWV3ID0gdmlldyBhcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uO1xuXHRcdFx0aWYgKHZpZXcuY2hhcnRDb250cm9sSWQgJiYgdmlldy50YWJsZUNvbnRyb2xJZCkge1xuXHRcdFx0XHRzaW5nbGVDaGFydElkID0gdmlldy5jaGFydENvbnRyb2xJZDtcblx0XHRcdFx0c2luZ2xlVGFibGVJZCA9IHZpZXcudGFibGVDb250cm9sSWQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRmb3IgKGxldCB2aWV3IG9mIHZpZXdzKSB7XG5cdFx0XHR2aWV3ID0gdmlldyBhcyBTaW5nbGVWaWV3RGVmaW5pdGlvbjtcblx0XHRcdGlmICghc2luZ2xlVGFibGVJZCAmJiAodmlldyBhcyBTaW5nbGVUYWJsZVZpZXdEZWZpbml0aW9uKS50YWJsZUNvbnRyb2xJZCkge1xuXHRcdFx0XHRzaW5nbGVUYWJsZUlkID0gKHZpZXcgYXMgU2luZ2xlVGFibGVWaWV3RGVmaW5pdGlvbikudGFibGVDb250cm9sSWQgfHwgXCJcIjtcblx0XHRcdH1cblx0XHRcdGlmICghc2luZ2xlQ2hhcnRJZCAmJiAodmlldyBhcyBTaW5nbGVDaGFydFZpZXdEZWZpbml0aW9uKS5jaGFydENvbnRyb2xJZCkge1xuXHRcdFx0XHRzaW5nbGVDaGFydElkID0gKHZpZXcgYXMgU2luZ2xlQ2hhcnRWaWV3RGVmaW5pdGlvbikuY2hhcnRDb250cm9sSWQgfHwgXCJcIjtcblx0XHRcdH1cblx0XHRcdGlmIChzaW5nbGVDaGFydElkICYmIHNpbmdsZVRhYmxlSWQpIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGlmIChzaW5nbGVUYWJsZUlkIHx8IHNpbmdsZUNoYXJ0SWQpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2hhcnRJZDogc2luZ2xlQ2hhcnRJZCxcblx0XHRcdHRhYmxlSWQ6IHNpbmdsZVRhYmxlSWRcblx0XHR9O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG4iXX0=
@@ -5,7 +5,8 @@ import {
5
5
  VisualizationType,
6
6
  TemplateType,
7
7
  CombinedViewPathConfiguration,
8
- CustomViewTemplateConfiguration
8
+ CustomViewTemplateConfiguration,
9
+ VariantManagementType
9
10
  } from "../ManifestSettings";
10
11
  import { EntityType } from "@sap-ux/annotation-converter";
11
12
  import {
@@ -27,7 +28,7 @@ import {
27
28
  SelectionVariantTypeTypes
28
29
  } from "@sap-ux/vocabularies-types/dist/generated/UI";
29
30
  import { UIAnnotationTerms } from "@sap-ux/vocabularies-types";
30
- import { CustomTabID, FilterBarID, FilterVariantManagementID, TableID, ChartID } from "../helpers/ID";
31
+ import { CustomTabID, FilterBarID, FilterVariantManagementID, TableID, ChartID, IconTabBarID } from "../helpers/ID";
31
32
  import { TableVisualization } from "sap/fe/core/converters/controls/Common/Table";
32
33
  import { ChartVisualization } from "sap/fe/core/converters/controls/Common/Chart";
33
34
  import { BaseAction, getActionsFromManifest } from "sap/fe/core/converters/controls/Common/Action";
@@ -90,6 +91,7 @@ export type ListReportDefinition = {
90
91
  filterBarId: string;
91
92
  variantManagement: VariantManagementDefinition;
92
93
  hasMultiVisualizations: boolean;
94
+ templateType: TemplateType;
93
95
  useSemanticDateRange?: boolean;
94
96
  filterInitialLayout?: string;
95
97
  filterLayout?: string;
@@ -158,6 +160,24 @@ function getTableVisualizations(views: ListReportViewDefinition[]): TableVisuali
158
160
  return tables;
159
161
  }
160
162
 
163
+ function getChartVisualizations(views: ListReportViewDefinition[]): ChartVisualization[] {
164
+ const charts: ChartVisualization[] = [];
165
+ views.forEach(function(view) {
166
+ if (!(view as CustomViewDefinition).type) {
167
+ const visualizations = (view as CombinedViewDefinition).primaryVisualization
168
+ ? (view as CombinedViewDefinition).primaryVisualization.visualizations
169
+ : (view as SingleViewDefinition).presentation.visualizations;
170
+
171
+ visualizations.forEach(function(visualization) {
172
+ if (visualization.type === VisualizationType.Chart) {
173
+ charts.push(visualization);
174
+ }
175
+ });
176
+ }
177
+ });
178
+ return charts;
179
+ }
180
+
161
181
  const getDefaultSemanticDates = function(filterFields: Record<string, CustomElementFilterField>): Record<string, DefaultSemanticDate> {
162
182
  const defaultSemanticDates: any = {};
163
183
  for (const filterField in filterFields) {
@@ -532,16 +552,12 @@ export const convertPage = function(converterContext: ConverterContext): ListRep
532
552
  const views: ListReportViewDefinition[] = getViews(converterContext, viewsDefinition);
533
553
  const showTabCounts = viewsDefinition ? viewsDefinition?.showCounts || hasMultipleEntitySets : undefined; // with multi EntitySets, tab counts are displayed by default
534
554
  const lrTableVisualizations = getTableVisualizations(views);
555
+ const lrChartVisualizations = getChartVisualizations(views);
535
556
  const showPinnableToggle = lrTableVisualizations.some(table => table.control.type === "ResponsiveTable");
536
557
  let singleTableId = "";
537
558
  let singleChartId = "";
538
559
  const filterBarId = FilterBarID(sContextPath);
539
560
  const filterVariantManagementID = FilterVariantManagementID(filterBarId);
540
- const targetControlIds = [filterBarId].concat(
541
- lrTableVisualizations.map(visualization => {
542
- return visualization.annotation.id;
543
- })
544
- );
545
561
  const fbConfig = manifestWrapper.getFilterConfiguration();
546
562
  const filterInitialLayout = fbConfig?.initialLayout !== undefined ? fbConfig?.initialLayout.toLowerCase() : "compact";
547
563
  const filterLayout = fbConfig?.layout !== undefined ? fbConfig?.layout.toLowerCase() : "compact";
@@ -567,6 +583,18 @@ export const convertPage = function(converterContext: ConverterContext): ListRep
567
583
  checkChartFilterBarId(views, filterBarId);
568
584
  }
569
585
 
586
+ const visualizationIds = lrTableVisualizations.map(visualization => {
587
+ return visualization.annotation.id;
588
+ }).concat(
589
+ lrChartVisualizations.map(visualization => {
590
+ return visualization.id;
591
+ }));
592
+ const targetControlIds = [
593
+ filterBarId,
594
+ ...(manifestWrapper.getVariantManagement() !== VariantManagementType.Control ? visualizationIds : []),
595
+ ...(!hasMultiVisualizations && views.length > 1 ? [IconTabBarID()] : [])
596
+ ];
597
+
570
598
  return {
571
599
  mainEntitySet: sContextPath,
572
600
  mainEntityType: sContextPath + "/",
@@ -591,6 +619,7 @@ export const convertPage = function(converterContext: ConverterContext): ListRep
591
619
  },
592
620
  isMultiEntitySets: hasMultipleEntitySets,
593
621
  hasMultiVisualizations: hasMultiVisualizations,
622
+ templateType: manifestWrapper.getTemplateType(),
594
623
  useSemanticDateRange,
595
624
  filterInitialLayout,
596
625
  filterLayout,