@sapui5/sap.fe.core 1.141.2 → 1.142.1

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 +1 -1
  2. package/src/sap/fe/core/.library +4 -1
  3. package/src/sap/fe/core/ActionRuntime.js +48 -23
  4. package/src/sap/fe/core/ActionRuntime.ts +61 -35
  5. package/src/sap/fe/core/AppComponent.js +76 -6
  6. package/src/sap/fe/core/AppComponent.ts +94 -8
  7. package/src/sap/fe/core/AppStateHandler.js +9 -8
  8. package/src/sap/fe/core/AppStateHandler.ts +13 -9
  9. package/src/sap/fe/core/BaseController.js +8 -5
  10. package/src/sap/fe/core/BaseController.ts +6 -1
  11. package/src/sap/fe/core/CommonUtils.js +4 -123
  12. package/src/sap/fe/core/CommonUtils.ts +3 -172
  13. package/src/sap/fe/core/ExtensionAPI.js +3 -10
  14. package/src/sap/fe/core/ExtensionAPI.ts +2 -14
  15. package/src/sap/fe/core/PageController.js +64 -43
  16. package/src/sap/fe/core/PageController.ts +62 -47
  17. package/src/sap/fe/core/TemplateComponent.js +20 -1
  18. package/src/sap/fe/core/TemplateComponent.ts +24 -2
  19. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +37 -24
  20. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +47 -31
  21. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
  22. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +4 -0
  23. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +4 -1
  24. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +3 -0
  25. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +4 -1
  26. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +4 -0
  27. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +7 -5
  28. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +22 -2
  29. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +82 -39
  30. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +91 -54
  31. package/src/sap/fe/core/controllerextensions/EditFlow.js +25 -3
  32. package/src/sap/fe/core/controllerextensions/EditFlow.ts +27 -3
  33. package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +9 -7
  34. package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +17 -5
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +37 -18
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +49 -17
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +30 -15
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +32 -14
  39. package/src/sap/fe/core/controllerextensions/MessageHandler.js +9 -10
  40. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +8 -9
  41. package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
  42. package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
  43. package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -2
  44. package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -1
  45. package/src/sap/fe/core/controllerextensions/Recommendations.js +3 -3
  46. package/src/sap/fe/core/controllerextensions/Recommendations.ts +2 -2
  47. package/src/sap/fe/core/controllerextensions/Routing.js +9 -5
  48. package/src/sap/fe/core/controllerextensions/Routing.ts +7 -7
  49. package/src/sap/fe/core/controllerextensions/Share.js +5 -5
  50. package/src/sap/fe/core/controllerextensions/Share.ts +4 -4
  51. package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
  52. package/src/sap/fe/core/controllerextensions/SideEffects.ts +17 -2
  53. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +2 -2
  54. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +1 -1
  55. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +3 -3
  56. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +3 -2
  57. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +33 -11
  58. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +45 -14
  59. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -3
  60. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +41 -8
  61. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +10 -4
  62. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +6 -1
  63. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +7 -7
  64. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +6 -5
  65. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +2 -2
  66. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
  67. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +2 -1
  68. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +1 -0
  69. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +10 -6
  70. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +6 -5
  71. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +11 -9
  72. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +22 -9
  73. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +9 -4
  74. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +10 -4
  75. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +31 -2
  76. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +34 -1
  77. package/src/sap/fe/core/converters/ManifestSettings.js +7 -1
  78. package/src/sap/fe/core/converters/ManifestSettings.ts +37 -0
  79. package/src/sap/fe/core/converters/ManifestWrapper.js +29 -9
  80. package/src/sap/fe/core/converters/ManifestWrapper.ts +29 -11
  81. package/src/sap/fe/core/converters/annotations/DataField.js +46 -19
  82. package/src/sap/fe/core/converters/annotations/DataField.ts +93 -19
  83. package/src/sap/fe/core/converters/common/AnnotationConverter.js +88 -35
  84. package/src/sap/fe/core/converters/controls/Common/Action.js +57 -20
  85. package/src/sap/fe/core/converters/controls/Common/Action.ts +71 -21
  86. package/src/sap/fe/core/converters/controls/Common/Chart.js +13 -3
  87. package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -4
  88. package/src/sap/fe/core/converters/controls/Common/Form.js +18 -3
  89. package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -1
  90. package/src/sap/fe/core/converters/controls/Common/Table.js +89 -57
  91. package/src/sap/fe/core/converters/controls/Common/Table.ts +110 -56
  92. package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.js +243 -0
  93. package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.ts +309 -0
  94. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +142 -58
  95. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +172 -78
  96. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +12 -18
  97. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +13 -27
  98. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -16
  99. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +6 -17
  100. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +16 -5
  101. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +16 -5
  102. package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -2
  103. package/src/sap/fe/core/converters/helpers/Aggregation.ts +11 -1
  104. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +27 -3
  105. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +28 -1
  106. package/src/sap/fe/core/converters/helpers/ID.js +3 -1
  107. package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
  108. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +5 -2
  109. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +7 -1
  110. package/src/sap/fe/core/converters/templates/ListReportConverter.js +11 -3
  111. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -4
  112. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +19 -8
  113. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +18 -7
  114. package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +8 -3
  115. package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +7 -2
  116. package/src/sap/fe/core/formatters/FPMFormatter.js +2 -2
  117. package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
  118. package/src/sap/fe/core/fpm/Component.js +8 -1
  119. package/src/sap/fe/core/fpm/Component.ts +8 -0
  120. package/src/sap/fe/core/fpm/manifest.json +1 -1
  121. package/src/sap/fe/core/helpers/AppStartupHelper.js +79 -25
  122. package/src/sap/fe/core/helpers/AppStartupHelper.ts +91 -32
  123. package/src/sap/fe/core/helpers/ManifestHelper.js +6 -3
  124. package/src/sap/fe/core/helpers/ManifestHelper.ts +3 -0
  125. package/src/sap/fe/core/helpers/MetaModelFunction.js +12 -3
  126. package/src/sap/fe/core/helpers/MetaModelFunction.ts +11 -3
  127. package/src/sap/fe/core/helpers/ModelHelper.js +48 -9
  128. package/src/sap/fe/core/helpers/ModelHelper.ts +55 -10
  129. package/src/sap/fe/core/helpers/TypeGuards.js +12 -2
  130. package/src/sap/fe/core/helpers/TypeGuards.ts +10 -1
  131. package/src/sap/fe/core/helpers/WebSocket.js +6 -7
  132. package/src/sap/fe/core/helpers/WebSocket.ts +10 -6
  133. package/src/sap/fe/core/library.js +30 -3
  134. package/src/sap/fe/core/library.ts +28 -1
  135. package/src/sap/fe/core/messagebundle.properties +8 -1
  136. package/src/sap/fe/core/messagebundle_ar.properties +7 -0
  137. package/src/sap/fe/core/messagebundle_bg.properties +10 -3
  138. package/src/sap/fe/core/messagebundle_ca.properties +7 -0
  139. package/src/sap/fe/core/messagebundle_cnr.properties +7 -0
  140. package/src/sap/fe/core/messagebundle_cs.properties +7 -0
  141. package/src/sap/fe/core/messagebundle_cy.properties +8 -1
  142. package/src/sap/fe/core/messagebundle_da.properties +7 -0
  143. package/src/sap/fe/core/messagebundle_de.properties +7 -0
  144. package/src/sap/fe/core/messagebundle_el.properties +7 -0
  145. package/src/sap/fe/core/messagebundle_en.properties +8 -1
  146. package/src/sap/fe/core/messagebundle_en_GB.properties +7 -0
  147. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +5 -0
  148. package/src/sap/fe/core/messagebundle_es.properties +8 -1
  149. package/src/sap/fe/core/messagebundle_es_MX.properties +7 -0
  150. package/src/sap/fe/core/messagebundle_et.properties +7 -0
  151. package/src/sap/fe/core/messagebundle_fi.properties +7 -0
  152. package/src/sap/fe/core/messagebundle_fr.properties +16 -9
  153. package/src/sap/fe/core/messagebundle_fr_CA.properties +7 -0
  154. package/src/sap/fe/core/messagebundle_hi.properties +8 -1
  155. package/src/sap/fe/core/messagebundle_hr.properties +7 -0
  156. package/src/sap/fe/core/messagebundle_hu.properties +7 -0
  157. package/src/sap/fe/core/messagebundle_id.properties +7 -0
  158. package/src/sap/fe/core/messagebundle_it.properties +7 -0
  159. package/src/sap/fe/core/messagebundle_iw.properties +7 -0
  160. package/src/sap/fe/core/messagebundle_ja.properties +8 -1
  161. package/src/sap/fe/core/messagebundle_kk.properties +7 -0
  162. package/src/sap/fe/core/messagebundle_ko.properties +7 -0
  163. package/src/sap/fe/core/messagebundle_lt.properties +7 -0
  164. package/src/sap/fe/core/messagebundle_lv.properties +7 -0
  165. package/src/sap/fe/core/messagebundle_mk.properties +7 -0
  166. package/src/sap/fe/core/messagebundle_ms.properties +7 -0
  167. package/src/sap/fe/core/messagebundle_nl.properties +7 -0
  168. package/src/sap/fe/core/messagebundle_no.properties +7 -0
  169. package/src/sap/fe/core/messagebundle_pl.properties +7 -0
  170. package/src/sap/fe/core/messagebundle_pt.properties +7 -0
  171. package/src/sap/fe/core/messagebundle_pt_PT.properties +7 -0
  172. package/src/sap/fe/core/messagebundle_ro.properties +7 -0
  173. package/src/sap/fe/core/messagebundle_ru.properties +7 -0
  174. package/src/sap/fe/core/messagebundle_sh.properties +7 -0
  175. package/src/sap/fe/core/messagebundle_sk.properties +7 -0
  176. package/src/sap/fe/core/messagebundle_sl.properties +7 -0
  177. package/src/sap/fe/core/messagebundle_sr.properties +7 -0
  178. package/src/sap/fe/core/messagebundle_sv.properties +7 -0
  179. package/src/sap/fe/core/messagebundle_th.properties +7 -0
  180. package/src/sap/fe/core/messagebundle_tr.properties +7 -0
  181. package/src/sap/fe/core/messagebundle_uk.properties +7 -0
  182. package/src/sap/fe/core/messagebundle_vi.properties +7 -0
  183. package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -1
  184. package/src/sap/fe/core/messagebundle_zh_TW.properties +7 -0
  185. package/src/sap/fe/core/rootView/Fcl.controller.js +21 -7
  186. package/src/sap/fe/core/rootView/Fcl.controller.ts +28 -6
  187. package/src/sap/fe/core/rootView/RootViewBaseController.js +96 -88
  188. package/src/sap/fe/core/rootView/RootViewBaseController.ts +106 -96
  189. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +14 -10
  190. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -10
  191. package/src/sap/fe/core/services/RoutingServiceFactory.js +16 -7
  192. package/src/sap/fe/core/services/RoutingServiceFactory.ts +23 -10
  193. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +9 -7
  194. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +13 -8
  195. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +62 -6
  196. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +74 -11
  197. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +33 -15
  198. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +31 -11
  199. package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
  200. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +4 -6
  201. package/src/sap/fe/core/templating/UIFormatters.js +17 -2
  202. package/src/sap/fe/core/templating/UIFormatters.ts +25 -1
  203. package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.js +10 -0
  204. package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.ts +369 -0
  205. package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.js +9 -0
  206. package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.ts +49 -0
  207. package/ui5.yaml +2 -0
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/DataModelPathHelper", "../../../helpers/StableIdHelper", "../../ManifestSettings", "../../helpers/ConfigurableObject", "../../helpers/DataFieldHelper", "../../helpers/ID", "../../helpers/Key"], function (Log, BindingToolkit, DataField, TypeGuards, DataModelPathHelper, StableIdHelper, ManifestSettings, ConfigurableObject, DataFieldHelper, ID, Key) {
5
+ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/DataModelPathHelper", "../../../helpers/StableIdHelper", "../../ManifestSettings", "../../helpers/ConfigurableObject", "../../helpers/DataFieldHelper", "../../helpers/ID", "../../helpers/Key"], function (Log, BindingToolkit, DataField, Action, TypeGuards, DataModelPathHelper, StableIdHelper, ManifestSettings, ConfigurableObject, DataFieldHelper, ID, Key) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
@@ -19,6 +19,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
19
19
  var getTargetEntitySetPath = DataModelPathHelper.getTargetEntitySetPath;
20
20
  var isSingleton = TypeGuards.isSingleton;
21
21
  var isNavigationProperty = TypeGuards.isNavigationProperty;
22
+ var addSeparators = Action.addSeparators;
22
23
  var getSemanticObjectPath = DataField.getSemanticObjectPath;
23
24
  var pathInModel = BindingToolkit.pathInModel;
24
25
  var not = BindingToolkit.not;
@@ -177,6 +178,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
177
178
  }),
178
179
  ...(manifestFormContainer.fields[fieldId].semanticObject !== undefined && {
179
180
  semanticObject: manifestFormContainer.fields[fieldId].semanticObject
181
+ }),
182
+ ...(manifestFormContainer.fields[fieldId].visible !== undefined && {
183
+ visible: typeof manifestFormContainer.fields[fieldId].visible === "boolean" ? compileExpression(manifestFormContainer.fields[fieldId].visible) : manifestFormContainer.fields[fieldId].visible
180
184
  })
181
185
  };
182
186
  });
@@ -205,7 +209,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
205
209
  const aFormElements = insertCustomElements(getFormElementsFromAnnotations(facetDefinition, converterContext), getFormElementsFromManifest(facetDefinition, converterContext), {
206
210
  formatOptions: OverrideType.overwrite,
207
211
  readOnly: OverrideType.overwrite,
208
- semanticObject: OverrideType.overwrite
212
+ semanticObject: OverrideType.overwrite,
213
+ visible: OverrideType.overwrite
209
214
  });
210
215
  actions = actions !== undefined ? actions.filter(action => action.facetName == facetDefinition.fullyQualifiedName) : [];
211
216
  if (actions.length === 0) {
@@ -225,6 +230,16 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
225
230
  actions = [oActionShowDetails];
226
231
  }
227
232
  }
233
+
234
+ // Add separators based on overflowGroups configuration from manifest
235
+ if (actions) {
236
+ const manifestWrapper = converterContext.getManifestWrapper();
237
+ const formManifestConfig = manifestWrapper.getFormContainer(facetDefinition.Target.value);
238
+ const overflowGroupsConfig = formManifestConfig?.overflowGroups;
239
+ if (overflowGroupsConfig) {
240
+ actions = addSeparators(actions, overflowGroupsConfig);
241
+ }
242
+ }
228
243
  return {
229
244
  id: sFormContainerId,
230
245
  formElements: aFormElements,
@@ -285,4 +300,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
285
300
  _exports.createFormDefinition = createFormDefinition;
286
301
  return _exports;
287
302
  }, false);
288
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGb3JtRWxlbWVudFR5cGUiLCJfZXhwb3J0cyIsImdldEZvcm1hdE9wdGlvbnNGb3JGb3JtRWxlbWVudCIsImZhY2V0RGVmaW5pdGlvbiIsImNvbnZlcnRlckNvbnRleHQiLCJmaWVsZCIsIm1hbmlmZXN0V3JhcHBlciIsImhvcml6b250YWxMYXlvdXQiLCJmb3JtYXRPcHRpb25zIiwidGV4dExpbmVzRWRpdCIsIiRUeXBlIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0SG9yaXpvbnRhbExheW91dEZvckZpZWxkR3JvdXAiLCJUYXJnZXQiLCJ2YWx1ZSIsImZpZWxkR3JvdXBIb3Jpem9udGFsTGF5b3V0IiwiaXNGaWVsZFBhcnRPZlByZXZpZXciLCJmb3JtUGFydE9mUHJldmlldyIsInZhbHVlT2YiLCJhbm5vdGF0aW9ucyIsIlVJIiwiUGFydE9mUHJldmlldyIsInVuZGVmaW5lZCIsImdldEZvcm1FbGVtZW50c0Zyb21Bbm5vdGF0aW9ucyIsImZvcm1FbGVtZW50cyIsInJlc29sdmVkVGFyZ2V0IiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJmb3JtQW5ub3RhdGlvbiIsImFubm90YXRpb24iLCJnZXREYXRhRmllbGRzRnJvbUFubm90YXRpb25zIiwiZGF0YUZpZWxkS2V5IiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwic2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCIsImdldFNlbWFudGljT2JqZWN0UGF0aCIsIm1hbmlmZXN0RmllbGRzIiwiZ2V0Rm9ybUNvbnRhaW5lciIsImZpZWxkcyIsInNlbWFudGljT2JqZWN0TWFuaWZlc3RTZXR0aW5ncyIsInNlbWFudGljT2JqZWN0IiwiaXNSZWZlcmVuY2VQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4iLCJmb3JtRWxlbWVudCIsImtleSIsInR5cGUiLCJBbm5vdGF0aW9uIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwic2VtYW50aWNPYmplY3RQYXRoIiwiaXNQYXJ0T2ZQcmV2aWV3IiwibGFiZWwiLCJMYWJlbCIsIlZhbHVlIiwiJHRhcmdldCIsIkNvbW1vbiIsInRvU3RyaW5nIiwiY29ubmVjdGVkRmllbGRzIiwiT2JqZWN0IiwidmFsdWVzIiwiRGF0YSIsImZpbHRlciIsImNvbm5lY3RlZEZpZWxkIiwiaGFzT3duUHJvcGVydHkiLCJtYXAiLCJjb25ubmVjdGVkRmllbGRFbGVtZW50IiwicmV0dXJuT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXQiLCJ0YXJnZXQiLCJUZW1wbGF0ZSIsImZpZWxkR3JvdXBFbGVtZW50cyIsImZpZWxkR3JvdXBFbGVtZW50IiwiZWxlbWVudCIsInB1c2giLCJ0ZXJtIiwiZm9yRWFjaCIsInF1YWxpZmllciIsImdldEZvcm1FbGVtZW50c0Zyb21NYW5pZmVzdCIsIm1hbmlmZXN0Rm9ybUNvbnRhaW5lciIsImtleXMiLCJmaWVsZElkIiwiaWQiLCJEZWZhdWx0IiwidGVtcGxhdGUiLCJwcm9wZXJ0eVBhdGgiLCJwcm9wZXJ0eSIsImZldGNoVGV4dEZyb21NZXRhTW9kZWwiLCJwb3NpdGlvbiIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkFmdGVyIiwicmVhZE9ubHkiLCJhY3Rpb25zIiwiYWRkaXRpb25hbFNldHRpbmdzIiwic0Zvcm1Db250YWluZXJJZCIsImNyZWF0ZUlkRm9yQW5ub3RhdGlvbiIsInNBbm5vdGF0aW9uUGF0aCIsImlzVmlzaWJsZSIsImNvbXBpbGVFeHByZXNzaW9uIiwibm90IiwiZXF1YWwiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJIaWRkZW4iLCJzRW50aXR5U2V0UGF0aCIsImVudGl0eVNldCIsImdldEVudGl0eVNldCIsImRhdGFNb2RlbE9iamVjdFBhdGhUYXJnZXQiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidGFyZ2V0T2JqZWN0IiwiZ2V0VGFyZ2V0RW50aXR5U2V0UGF0aCIsImlzTmF2aWdhdGlvblByb3BlcnR5IiwiY29udGFpbnNUYXJnZXQiLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwiaXNTaW5nbGV0b24iLCJhRm9ybUVsZW1lbnRzIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJPdmVycmlkZVR5cGUiLCJvdmVyd3JpdGUiLCJhY3Rpb24iLCJmYWNldE5hbWUiLCJsZW5ndGgiLCJvQWN0aW9uU2hvd0RldGFpbHMiLCJnZXRGb3JtU3RhbmRhcmRBY3Rpb25CdXR0b25JRCIsInRleHQiLCJpZkVsc2UiLCJwYXRoSW5Nb2RlbCIsIkFjdGlvblR5cGUiLCJTaG93Rm9ybURldGFpbHMiLCJwcmVzcyIsInNvbWUiLCJvRm9ybUVsZW1lbnQiLCJ1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3RlcyIsImFubm90YXRpb25IaWRkZW4iLCJnZXRGb3JtQ29udGFpbmVyc0ZvckNvbGxlY3Rpb24iLCJmb3JtQ29udGFpbmVycyIsImZvcm1Db250YWluZXJTZXR0aW5ncyIsIkZhY2V0cyIsImZhY2V0IiwiZXJyb3IiLCJMb2ciLCJpc1JlZmVyZW5jZUZhY2V0IiwiY3JlYXRlRm9ybURlZmluaXRpb24iLCJnZXRGb3JtSUQiLCJ1c2VGb3JtQ29udGFpbmVyTGFiZWxzIiwiaGFzRmFjZXRzTm90UGFydE9mUHJldmlldyIsImNoaWxkRmFjZXQiLCJFcnJvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRm9ybS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE1hc2tlZCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgeyBDb21tb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBDb250YWN0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tdW5pY2F0aW9uXCI7XG5pbXBvcnQgeyBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tdW5pY2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENvbGxlY3Rpb25GYWNldCxcblx0Q29sbGVjdGlvbkZhY2V0VHlwZXMsXG5cdERhdGFGaWVsZCxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YVBvaW50LFxuXHRGYWNldFR5cGVzLFxuXHRGaWVsZEdyb3VwLFxuXHRGaWVsZEdyb3VwVHlwZSxcblx0SWRlbnRpZmljYXRpb24sXG5cdElucHV0TWFzayxcblx0UGFydE9mUHJldmlldyxcblx0UmVmZXJlbmNlRmFjZXQsXG5cdFJlZmVyZW5jZUZhY2V0VHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgZXF1YWwsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiwgaWZFbHNlLCBub3QsIHBhdGhJbk1vZGVsIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgeyBnZXRTZW1hbnRpY09iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB0eXBlIHsgQmFzZUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IGlzTmF2aWdhdGlvblByb3BlcnR5LCBpc1NpbmdsZXRvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7IGdldFRhcmdldEVudGl0eVNldFBhdGgsIGdldFRhcmdldE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBjcmVhdGVJZEZvckFubm90YXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uLCBGb3JtYXRPcHRpb25zVHlwZSB9IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBBY3Rpb25UeXBlIH0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhYmxlT2JqZWN0LCBDdXN0b21FbGVtZW50IH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBPdmVycmlkZVR5cGUsIFBsYWNlbWVudCwgaW5zZXJ0Q3VzdG9tRWxlbWVudHMgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IGlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvRGF0YUZpZWxkSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRGb3JtSUQsIGdldEZvcm1TdGFuZGFyZEFjdGlvbkJ1dHRvbklEIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvSURcIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0tleVwiO1xuXG5leHBvcnQgdHlwZSBGb3JtRGVmaW5pdGlvbiA9IHtcblx0aWQ6IHN0cmluZztcblx0dXNlRm9ybUNvbnRhaW5lckxhYmVsczogYm9vbGVhbjtcblx0aGFzRmFjZXRzTm90UGFydE9mUHJldmlldzogYm9vbGVhbjtcblx0Zm9ybUNvbnRhaW5lcnM6IEZvcm1Db250YWluZXJbXTtcblx0aXNWaXNpYmxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcbn07XG5cbmV4cG9ydCBlbnVtIEZvcm1FbGVtZW50VHlwZSB7XG5cdERlZmF1bHQgPSBcIkRlZmF1bHRcIixcblx0U2xvdCA9IFwiU2xvdFwiLFxuXHRBbm5vdGF0aW9uID0gXCJBbm5vdGF0aW9uXCJcbn1cblxuZXhwb3J0IHR5cGUgQmFzZUZvcm1FbGVtZW50ID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHRpZD86IHN0cmluZztcblx0dHlwZTogRm9ybUVsZW1lbnRUeXBlO1xuXHRsYWJlbD86IHN0cmluZztcblx0dmlzaWJsZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRmb3JtYXRPcHRpb25zPzogRm9ybWF0T3B0aW9uc1R5cGU7XG5cdHJlYWRPbmx5PzogYm9vbGVhbjtcblx0c2VtYW50aWNPYmplY3Q/OiBzdHJpbmc7XG5cdGFubm90YXRpb25QYXRoPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQW5ub3RhdGlvbkZvcm1FbGVtZW50ID0gQmFzZUZvcm1FbGVtZW50ICYge1xuXHRpZFByZWZpeD86IHN0cmluZztcblx0YW5ub3RhdGlvblBhdGg/OiBzdHJpbmc7XG5cdGlzVmFsdWVNdWx0aWxpbmVUZXh0PzogYm9vbGVhbjtcblx0c2VtYW50aWNPYmplY3RQYXRoPzogc3RyaW5nO1xuXHRjb25uZWN0ZWRGaWVsZHM/OiB7XG5cdFx0c2VtYW50aWNPYmplY3RQYXRoPzogc3RyaW5nO1xuXHRcdG9yaWdpbmFsT2JqZWN0PzogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcztcblx0XHRvcmlnaW5hbFRlbXBsYXRlPzogc3RyaW5nO1xuXHR9W107XG5cdGZpZWxkR3JvdXBFbGVtZW50cz86IERhdGFGaWVsZEFic3RyYWN0VHlwZXNbXTtcblx0aXNQYXJ0T2ZQcmV2aWV3PzogYm9vbGVhbjtcblx0Y29ubmVjdGVkRmllbGRzVGFyZ2V0PzogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH07XG59O1xuXG5leHBvcnQgdHlwZSBDdXN0b21Gb3JtRWxlbWVudCA9IEN1c3RvbUVsZW1lbnQ8XG5cdEJhc2VGb3JtRWxlbWVudCAmIHtcblx0XHR0eXBlOiBGb3JtRWxlbWVudFR5cGU7XG5cdFx0dGVtcGxhdGU6IHN0cmluZztcblx0XHRwcm9wZXJ0eVBhdGg/OiBzdHJpbmc7XG5cdH1cbj47XG5cbmV4cG9ydCB0eXBlIEZvcm1FbGVtZW50ID0gQ3VzdG9tRm9ybUVsZW1lbnQgfCBBbm5vdGF0aW9uRm9ybUVsZW1lbnQ7XG5cbmV4cG9ydCB0eXBlIEFkZGl0aW9uYWxGb3JtU2V0dGluZ3MgPSB7XG5cdHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEZvcm1Db250YWluZXIgPSB7XG5cdGlkPzogc3RyaW5nO1xuXHRmb3JtRWxlbWVudHM6IEZvcm1FbGVtZW50W107XG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdGlzVmlzaWJsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGFubm90YXRpb25IaWRkZW46IGJvb2xlYW47XG5cdGVudGl0eVNldD86IHN0cmluZztcblx0YWN0aW9ucz86IEJhc2VBY3Rpb25bXTtcblx0dXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXM/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGRlZmF1bHQgZm9ybWF0IG9wdGlvbnMgZm9yIHRleHQgZmllbGRzIGluIGEgZm9ybS5cbiAqIEl0IGFsc28gYWRkcyB0aGUgaG9yaXpvbnRhbCBsYXlvdXQgYXMgYSBmb3JtYXQgb3B0aW9uIGZvciBmaWVsZCBncm91cHMuXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uIFRoZSBmYWNldCBkZWZpbml0aW9uIHRvIGdldCB0aGUgZm9ybWF0IG9wdGlvbnMgZm9yXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQgdG8gZmV0Y2ggYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuICogQHBhcmFtIGZpZWxkIFRoZSBmaWVsZCBmb3Igd2hpY2ggdGhlIGZvcm1hdCBvcHRpb25zIGFyZSB0byBiZSByZXR1cm5lZFxuICogQHJldHVybnMgVGhlIGNvbGxlY3Rpb24gb2YgZm9ybWF0IG9wdGlvbnMgZm9yIHRoZSBGb3JtRWxlbWVudFxuICovXG5mdW5jdGlvbiBnZXRGb3JtYXRPcHRpb25zRm9yRm9ybUVsZW1lbnQoXG5cdGZhY2V0RGVmaW5pdGlvbjogUmVmZXJlbmNlRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRmaWVsZD86IERhdGFGaWVsZEFic3RyYWN0VHlwZXNcbik6IEZvcm1hdE9wdGlvbnNUeXBlIHtcblx0bGV0IG1hbmlmZXN0V3JhcHBlciwgaG9yaXpvbnRhbExheW91dDtcblx0Y29uc3QgZm9ybWF0T3B0aW9uczogRm9ybWF0T3B0aW9uc1R5cGUgPSB7XG5cdFx0dGV4dExpbmVzRWRpdDogNCAvLyBkZWZhdWx0XG5cdH07XG5cdGlmIChmaWVsZCAmJiBmaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikge1xuXHRcdG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdFx0aG9yaXpvbnRhbExheW91dCA9IG1hbmlmZXN0V3JhcHBlci5nZXRIb3Jpem9udGFsTGF5b3V0Rm9yRmllbGRHcm91cChmYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlLCBmaWVsZC5UYXJnZXQ/LnZhbHVlKTtcblx0XHRpZiAoaG9yaXpvbnRhbExheW91dCA9PT0gdHJ1ZSkge1xuXHRcdFx0Zm9ybWF0T3B0aW9ucy5maWVsZEdyb3VwSG9yaXpvbnRhbExheW91dCA9IGhvcml6b250YWxMYXlvdXQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmb3JtYXRPcHRpb25zO1xufVxuXG5mdW5jdGlvbiBpc0ZpZWxkUGFydE9mUHJldmlldyhmaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcywgZm9ybVBhcnRPZlByZXZpZXc/OiBQYXJ0T2ZQcmV2aWV3KTogYm9vbGVhbiB7XG5cdC8vIEJvdGggZWFjaCBmb3JtIGFuZCBmaWVsZCBjYW4gaGF2ZSB0aGUgUGFydE9mUHJldmlldyBhbm5vdGF0aW9uLiBPbmx5IGlmIHRoZSBmb3JtIGlzIG5vdCBoaWRkZW4gKG5vdCBwYXJ0T2ZQcmV2aWV3KSB3ZSBhbGxvdyB0b2dnbGluZyBvbiBmaWVsZCBsZXZlbFxuXHRyZXR1cm4gKFxuXHRcdGZvcm1QYXJ0T2ZQcmV2aWV3Py52YWx1ZU9mKCkgPT09IGZhbHNlIHx8XG5cdFx0ZmllbGQuYW5ub3RhdGlvbnM/LlVJPy5QYXJ0T2ZQcmV2aWV3ID09PSB1bmRlZmluZWQgfHxcblx0XHRmaWVsZC5hbm5vdGF0aW9ucz8uVUk/LlBhcnRPZlByZXZpZXcudmFsdWVPZigpID09PSB0cnVlXG5cdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtRWxlbWVudHNGcm9tQW5ub3RhdGlvbnMoXG5cdGZhY2V0RGVmaW5pdGlvbjogUmVmZXJlbmNlRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBBbm5vdGF0aW9uRm9ybUVsZW1lbnRbXSB7XG5cdGNvbnN0IGZvcm1FbGVtZW50czogQW5ub3RhdGlvbkZvcm1FbGVtZW50W10gPSBbXTtcblx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQudmFsdWUpO1xuXHRjb25zdCBmb3JtQW5ub3RhdGlvbjogSWRlbnRpZmljYXRpb24gfCBGaWVsZEdyb3VwIHwgQ29udGFjdCB8IERhdGFQb2ludCB8IElucHV0TWFzayB8IE1hc2tlZCA9IHJlc29sdmVkVGFyZ2V0LmFubm90YXRpb24gYXNcblx0XHR8IElkZW50aWZpY2F0aW9uXG5cdFx0fCBGaWVsZEdyb3VwXG5cdFx0fCBDb250YWN0XG5cdFx0fCBEYXRhUG9pbnRcblx0XHR8IElucHV0TWFza1xuXHRcdHwgTWFza2VkO1xuXHRjb252ZXJ0ZXJDb250ZXh0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dDtcblxuXHRmdW5jdGlvbiBnZXREYXRhRmllbGRzRnJvbUFubm90YXRpb25zKGZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBmb3JtUGFydE9mUHJldmlldzogUGFydE9mUHJldmlldyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRcdGNvbnN0IGRhdGFGaWVsZEtleSA9IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZmllbGQpO1xuXHRcdGNvbnN0IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGggPSBnZXRTZW1hbnRpY09iamVjdFBhdGgoY29udmVydGVyQ29udGV4dCwgZmllbGQpO1xuXHRcdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdFx0Y29uc3QgbWFuaWZlc3RGaWVsZHMgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0Rm9ybUNvbnRhaW5lcihmYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlKT8uZmllbGRzO1xuXHRcdGNvbnN0IHNlbWFudGljT2JqZWN0TWFuaWZlc3RTZXR0aW5ncyA9IG1hbmlmZXN0RmllbGRzPy5bZGF0YUZpZWxkS2V5XT8uc2VtYW50aWNPYmplY3Q7XG5cdFx0aWYgKFxuXHRcdFx0ZmllbGQuJFR5cGUgIT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbiAmJlxuXHRcdFx0ZmllbGQuJFR5cGUgIT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiAmJlxuXHRcdFx0ZmllbGQuJFR5cGUgIT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbkdyb3VwICYmXG5cdFx0XHQhaXNSZWZlcmVuY2VQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4oZmllbGQpXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBmb3JtRWxlbWVudCA9IHtcblx0XHRcdFx0a2V5OiBkYXRhRmllbGRLZXksXG5cdFx0XHRcdHR5cGU6IEZvcm1FbGVtZW50VHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogYCR7Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSl9L2AsXG5cdFx0XHRcdHNlbWFudGljT2JqZWN0UGF0aDogc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0Zm9ybWF0T3B0aW9uczogZ2V0Rm9ybWF0T3B0aW9uc0ZvckZvcm1FbGVtZW50KGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCwgZmllbGQpLFxuXHRcdFx0XHRpc1BhcnRPZlByZXZpZXc6IGlzRmllbGRQYXJ0T2ZQcmV2aWV3KGZpZWxkLCBmb3JtUGFydE9mUHJldmlldyksXG5cdFx0XHRcdGxhYmVsOiBmaWVsZC5MYWJlbCA/PyAoZmllbGQgYXMgRGF0YUZpZWxkKS5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdHNlbWFudGljT2JqZWN0OiBzZW1hbnRpY09iamVjdE1hbmlmZXN0U2V0dGluZ3Ncblx0XHRcdH07XG5cblx0XHRcdGlmIChcblx0XHRcdFx0ZmllbGQuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQW5ub3RhdGlvblwiICYmXG5cdFx0XHRcdGZpZWxkLlRhcmdldC4kdGFyZ2V0Py4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Db25uZWN0ZWRGaWVsZHNUeXBlXCJcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBjb25uZWN0ZWRGaWVsZHMgPSBPYmplY3QudmFsdWVzKGZpZWxkLlRhcmdldC4kdGFyZ2V0LkRhdGEpLmZpbHRlcihcblx0XHRcdFx0XHQoY29ubmVjdGVkRmllbGQ6IHVua25vd24pID0+IChjb25uZWN0ZWRGaWVsZCBhcyBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKT8uaGFzT3duUHJvcGVydHkoXCJWYWx1ZVwiKVxuXHRcdFx0XHQpIGFzIERhdGFGaWVsZEFic3RyYWN0VHlwZXNbXTtcblx0XHRcdFx0KGZvcm1FbGVtZW50IGFzIEFubm90YXRpb25Gb3JtRWxlbWVudCkuY29ubmVjdGVkRmllbGRzID0gY29ubmVjdGVkRmllbGRzLm1hcCgoY29ubm5lY3RlZEZpZWxkRWxlbWVudCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHJldHVybk9iamVjdCA9IHtcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0UGF0aDogZ2V0U2VtYW50aWNPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQsIGNvbm5uZWN0ZWRGaWVsZEVsZW1lbnQpXG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXR1cm5PYmplY3QsIFwib3JpZ2luYWxPYmplY3RcIiwge1xuXHRcdFx0XHRcdFx0Z2V0OiAoKSA9PiBjb25ubmVjdGVkRmllbGRFbGVtZW50XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkocmV0dXJuT2JqZWN0LCBcIm9yaWdpbmFsVGVtcGxhdGVcIiwge1xuXHRcdFx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHRhcmdldCA9IGZpZWxkLlRhcmdldD8uJHRhcmdldDtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRhcmdldCAmJiBcIlRlbXBsYXRlXCIgaW4gdGFyZ2V0ID8gdGFyZ2V0LlRlbXBsYXRlIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0cmV0dXJuIHJldHVybk9iamVjdDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRmaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBbm5vdGF0aW9uXCIgJiZcblx0XHRcdFx0ZmllbGQuVGFyZ2V0LiR0YXJnZXQ/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZpZWxkR3JvdXBUeXBlXCJcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBmaWVsZEdyb3VwRWxlbWVudHMgPSBPYmplY3QudmFsdWVzKGZpZWxkLlRhcmdldC4kdGFyZ2V0LkRhdGEpLmZpbHRlcihcblx0XHRcdFx0XHQoZmllbGRHcm91cEVsZW1lbnQpID0+IGZpZWxkR3JvdXBFbGVtZW50Py5oYXNPd25Qcm9wZXJ0eShcIlZhbHVlXCIpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdChmb3JtRWxlbWVudCBhcyBBbm5vdGF0aW9uRm9ybUVsZW1lbnQpLmZpZWxkR3JvdXBFbGVtZW50cyA9IGZpZWxkR3JvdXBFbGVtZW50cy5tYXAoKGVsZW1lbnQpID0+ICh7XG5cdFx0XHRcdFx0JFR5cGU6IGVsZW1lbnQuJFR5cGUsXG5cdFx0XHRcdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBlbGVtZW50LmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0XHRMYWJlbDogZWxlbWVudC5MYWJlbFxuXHRcdFx0XHR9KSkgYXMgdW5rbm93biBhcyBEYXRhRmllbGRBYnN0cmFjdFR5cGVzW107XG5cdFx0XHR9XG5cdFx0XHRmb3JtRWxlbWVudHMucHVzaChmb3JtRWxlbWVudCk7XG5cdFx0fVxuXHR9XG5cblx0c3dpdGNoIChmb3JtQW5ub3RhdGlvbj8udGVybSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuRmllbGRHcm91cDpcblx0XHRcdGZvcm1Bbm5vdGF0aW9uLkRhdGEuZm9yRWFjaCgoZmllbGQpID0+IGdldERhdGFGaWVsZHNGcm9tQW5ub3RhdGlvbnMoZmllbGQsIGZhY2V0RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uVUk/LlBhcnRPZlByZXZpZXcpKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuSWRlbnRpZmljYXRpb246XG5cdFx0XHRmb3JtQW5ub3RhdGlvbi5mb3JFYWNoKChmaWVsZCkgPT4gZ2V0RGF0YUZpZWxkc0Zyb21Bbm5vdGF0aW9ucyhmaWVsZCwgZmFjZXREZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uUGFydE9mUHJldmlldykpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5EYXRhUG9pbnQ6XG5cdFx0XHRmb3JtRWxlbWVudHMucHVzaCh7XG5cdFx0XHRcdC8vIGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChmb3JtQW5ub3RhdGlvbiksXG5cdFx0XHRcdGtleTogYERhdGFQb2ludDo6JHtmb3JtQW5ub3RhdGlvbi5xdWFsaWZpZXIgPyBmb3JtQW5ub3RhdGlvbi5xdWFsaWZpZXIgOiBcIlwifWAsXG5cdFx0XHRcdHR5cGU6IEZvcm1FbGVtZW50VHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogYCR7Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGZvcm1Bbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSl9L2Bcblx0XHRcdH0pO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5JbnB1dE1hc2s6XG5cdFx0XHRmb3JtRWxlbWVudHMucHVzaCh7XG5cdFx0XHRcdGtleTogYE1hc2tlZElucHV0Ojoke2Zvcm1Bbm5vdGF0aW9uLnF1YWxpZmllciA/IGZvcm1Bbm5vdGF0aW9uLnF1YWxpZmllciA6IFwiXCJ9YCxcblx0XHRcdFx0dHlwZTogRm9ybUVsZW1lbnRUeXBlLkFubm90YXRpb24sXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBgJHtjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZm9ybUFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lKX0vYFxuXHRcdFx0fSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIENvbW1vbkFubm90YXRpb25UZXJtcy5NYXNrZWQ6XG5cdFx0XHRmb3JtRWxlbWVudHMucHVzaCh7XG5cdFx0XHRcdGtleTogYE1hc2tlZDo6JHtmb3JtQW5ub3RhdGlvbi5xdWFsaWZpZXIgPyBmb3JtQW5ub3RhdGlvbi5xdWFsaWZpZXIgOiBcIlwifWAsXG5cdFx0XHRcdHR5cGU6IEZvcm1FbGVtZW50VHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogYCR7Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGZvcm1Bbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSl9L2Bcblx0XHRcdH0pO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblRlcm1zLkNvbnRhY3Q6XG5cdFx0XHRmb3JtRWxlbWVudHMucHVzaCh7XG5cdFx0XHRcdC8vIGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChmb3JtQW5ub3RhdGlvbiksXG5cdFx0XHRcdGtleTogYENvbnRhY3Q6OiR7Zm9ybUFubm90YXRpb24ucXVhbGlmaWVyID8gZm9ybUFubm90YXRpb24ucXVhbGlmaWVyIDogXCJcIn1gLFxuXHRcdFx0XHR0eXBlOiBGb3JtRWxlbWVudFR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGAke2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChmb3JtQW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUpfS9gXG5cdFx0XHR9KTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRicmVhaztcblx0fVxuXHRyZXR1cm4gZm9ybUVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUVsZW1lbnRzRnJvbU1hbmlmZXN0KFxuXHRmYWNldERlZmluaXRpb246IFJlZmVyZW5jZUZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogUmVjb3JkPHN0cmluZywgQ3VzdG9tRm9ybUVsZW1lbnQ+IHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgbWFuaWZlc3RGb3JtQ29udGFpbmVyOiBGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uID0gbWFuaWZlc3RXcmFwcGVyLmdldEZvcm1Db250YWluZXIoZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZSk7XG5cdGNvbnN0IGZvcm1FbGVtZW50czogUmVjb3JkPHN0cmluZywgQ3VzdG9tRm9ybUVsZW1lbnQ+ID0ge307XG5cdGlmIChtYW5pZmVzdEZvcm1Db250YWluZXI/LmZpZWxkcykge1xuXHRcdE9iamVjdC5rZXlzKG1hbmlmZXN0Rm9ybUNvbnRhaW5lcj8uZmllbGRzKS5mb3JFYWNoKChmaWVsZElkKSA9PiB7XG5cdFx0XHRmb3JtRWxlbWVudHNbZmllbGRJZF0gPSB7XG5cdFx0XHRcdGtleTogZmllbGRJZCxcblx0XHRcdFx0aWQ6IGBDdXN0b21Gb3JtRWxlbWVudDo6JHtmaWVsZElkfWAsXG5cdFx0XHRcdHR5cGU6IG1hbmlmZXN0Rm9ybUNvbnRhaW5lci5maWVsZHNbZmllbGRJZF0udHlwZSB8fCBGb3JtRWxlbWVudFR5cGUuRGVmYXVsdCxcblx0XHRcdFx0dGVtcGxhdGU6IG1hbmlmZXN0Rm9ybUNvbnRhaW5lci5maWVsZHNbZmllbGRJZF0udGVtcGxhdGUsXG5cdFx0XHRcdHByb3BlcnR5UGF0aDogbWFuaWZlc3RGb3JtQ29udGFpbmVyLmZpZWxkc1tmaWVsZElkXT8ucHJvcGVydHksXG5cdFx0XHRcdGxhYmVsOiBjb252ZXJ0ZXJDb250ZXh0LmZldGNoVGV4dEZyb21NZXRhTW9kZWwobWFuaWZlc3RGb3JtQ29udGFpbmVyLmZpZWxkc1tmaWVsZElkXS5sYWJlbCksXG5cdFx0XHRcdHBvc2l0aW9uOiBtYW5pZmVzdEZvcm1Db250YWluZXIuZmllbGRzW2ZpZWxkSWRdLnBvc2l0aW9uIHx8IHtcblx0XHRcdFx0XHRwbGFjZW1lbnQ6IFBsYWNlbWVudC5BZnRlclxuXHRcdFx0XHR9LFxuXHRcdFx0XHRmb3JtYXRPcHRpb25zOiB7XG5cdFx0XHRcdFx0Li4uZ2V0Rm9ybWF0T3B0aW9uc0ZvckZvcm1FbGVtZW50KGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFx0Li4ubWFuaWZlc3RGb3JtQ29udGFpbmVyLmZpZWxkc1tmaWVsZElkXS5mb3JtYXRPcHRpb25zXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC4uLihtYW5pZmVzdEZvcm1Db250YWluZXIuZmllbGRzW2ZpZWxkSWRdLnJlYWRPbmx5ICE9PSB1bmRlZmluZWQgJiYge1xuXHRcdFx0XHRcdHJlYWRPbmx5OiBtYW5pZmVzdEZvcm1Db250YWluZXIuZmllbGRzW2ZpZWxkSWRdLnJlYWRPbmx5XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHQuLi4obWFuaWZlc3RGb3JtQ29udGFpbmVyLmZpZWxkc1tmaWVsZElkXS5zZW1hbnRpY09iamVjdCAhPT0gdW5kZWZpbmVkICYmIHtcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogbWFuaWZlc3RGb3JtQ29udGFpbmVyLmZpZWxkc1tmaWVsZElkXS5zZW1hbnRpY09iamVjdFxuXHRcdFx0XHR9KVxuXHRcdFx0fTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gZm9ybUVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUNvbnRhaW5lcihcblx0ZmFjZXREZWZpbml0aW9uOiBSZWZlcmVuY2VGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGFjdGlvbnM/OiBCYXNlQWN0aW9uW10sXG5cdGFkZGl0aW9uYWxTZXR0aW5ncz86IEFkZGl0aW9uYWxGb3JtU2V0dGluZ3Ncbik6IEZvcm1Db250YWluZXIge1xuXHRjb25zdCBzRm9ybUNvbnRhaW5lcklkID0gY3JlYXRlSWRGb3JBbm5vdGF0aW9uKGZhY2V0RGVmaW5pdGlvbikgYXMgc3RyaW5nO1xuXHRjb25zdCBzQW5ub3RhdGlvblBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZmFjZXREZWZpbml0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSk7XG5cdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihmYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlKTtcblx0Y29uc3QgaXNWaXNpYmxlID0gY29tcGlsZUV4cHJlc3Npb24obm90KGVxdWFsKHRydWUsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihmYWNldERlZmluaXRpb24uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pKSkpO1xuXHRsZXQgc0VudGl0eVNldFBhdGghOiBzdHJpbmc7XG5cdC8vIHJlc29sdmVkVGFyZ2V0IGRvZXNuJ3QgaGF2ZSBhIGVudGl0eVNldCBpbiBjYXNlIENvbnRhaW5tZW50cyBhbmQgUGFyYW10ZXJpemVkIHNlcnZpY2VzLlxuXHRjb25zdCBlbnRpdHlTZXQgPSByZXNvbHZlZFRhcmdldC5jb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoVGFyZ2V0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0T2JqZWN0O1xuXHRpZiAoZW50aXR5U2V0ICYmIGVudGl0eVNldCAhPT0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSkge1xuXHRcdHNFbnRpdHlTZXRQYXRoID0gZ2V0VGFyZ2V0RW50aXR5U2V0UGF0aChyZXNvbHZlZFRhcmdldC5jb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cdH0gZWxzZSBpZiAoaXNOYXZpZ2F0aW9uUHJvcGVydHkoZGF0YU1vZGVsT2JqZWN0UGF0aFRhcmdldCkgJiYgZGF0YU1vZGVsT2JqZWN0UGF0aFRhcmdldD8uY29udGFpbnNUYXJnZXQgPT09IHRydWUpIHtcblx0XHRzRW50aXR5U2V0UGF0aCA9IGdldFRhcmdldE9iamVjdFBhdGgocmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIGZhbHNlKTtcblx0fSBlbHNlIGlmIChlbnRpdHlTZXQgJiYgIXNFbnRpdHlTZXRQYXRoICYmIGlzU2luZ2xldG9uKGVudGl0eVNldCkpIHtcblx0XHRzRW50aXR5U2V0UGF0aCA9IGVudGl0eVNldC5mdWxseVF1YWxpZmllZE5hbWU7XG5cdH0gZWxzZSBpZiAoIWVudGl0eVNldCAmJiBpc05hdmlnYXRpb25Qcm9wZXJ0eShkYXRhTW9kZWxPYmplY3RQYXRoVGFyZ2V0KSAmJiBkYXRhTW9kZWxPYmplY3RQYXRoVGFyZ2V0Py5jb250YWluc1RhcmdldCA9PT0gZmFsc2UpIHtcblx0XHRzRW50aXR5U2V0UGF0aCA9IGdldFRhcmdldE9iamVjdFBhdGgocmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIGZhbHNlKTtcblx0fVxuXHRjb25zdCBhRm9ybUVsZW1lbnRzID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoXG5cdFx0Z2V0Rm9ybUVsZW1lbnRzRnJvbUFubm90YXRpb25zKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0Z2V0Rm9ybUVsZW1lbnRzRnJvbU1hbmlmZXN0KGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0eyBmb3JtYXRPcHRpb25zOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLCByZWFkT25seTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSwgc2VtYW50aWNPYmplY3Q6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUgfVxuXHQpO1xuXG5cdGFjdGlvbnMgPSBhY3Rpb25zICE9PSB1bmRlZmluZWQgPyBhY3Rpb25zLmZpbHRlcigoYWN0aW9uKSA9PiBhY3Rpb24uZmFjZXROYW1lID09IGZhY2V0RGVmaW5pdGlvbi5mdWxseVF1YWxpZmllZE5hbWUpIDogW107XG5cdGlmIChhY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuXHRcdGFjdGlvbnMgPSB1bmRlZmluZWQ7XG5cdH1cblxuXHRjb25zdCBvQWN0aW9uU2hvd0RldGFpbHM6IEJhc2VBY3Rpb24gPSB7XG5cdFx0aWQ6IGdldEZvcm1TdGFuZGFyZEFjdGlvbkJ1dHRvbklEKHNGb3JtQ29udGFpbmVySWQsIFwiU2hvd0hpZGVEZXRhaWxzXCIpLFxuXHRcdGtleTogXCJTdGFuZGFyZEFjdGlvbjo6U2hvd0hpZGVEZXRhaWxzXCIsXG5cdFx0dGV4dDogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKFwic2hvd0RldGFpbHNcIiwgXCJpbnRlcm5hbFwiKSwgdHJ1ZSksXG5cdFx0XHRcdHBhdGhJbk1vZGVsKFwiVF9DT01NT05fT0JKRUNUX1BBR0VfSElERV9GT1JNX0NPTlRBSU5FUl9ERVRBSUxTXCIsIFwic2FwLmZlLmkxOG5cIiksXG5cdFx0XHRcdHBhdGhJbk1vZGVsKFwiVF9DT01NT05fT0JKRUNUX1BBR0VfU0hPV19GT1JNX0NPTlRBSU5FUl9ERVRBSUxTXCIsIFwic2FwLmZlLmkxOG5cIilcblx0XHRcdClcblx0XHQpLFxuXHRcdHR5cGU6IEFjdGlvblR5cGUuU2hvd0Zvcm1EZXRhaWxzLFxuXHRcdHByZXNzOiBcIkZvcm1Db250YWluZXJSdW50aW1lLnRvZ2dsZURldGFpbHNcIlxuXHR9O1xuXG5cdGlmIChcblx0XHRmYWNldERlZmluaXRpb24uYW5ub3RhdGlvbnM/LlVJPy5QYXJ0T2ZQcmV2aWV3Py52YWx1ZU9mKCkgIT09IGZhbHNlICYmXG5cdFx0YUZvcm1FbGVtZW50cy5zb21lKChvRm9ybUVsZW1lbnQpID0+IG9Gb3JtRWxlbWVudC5pc1BhcnRPZlByZXZpZXcgPT09IGZhbHNlKVxuXHQpIHtcblx0XHRpZiAoYWN0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRhY3Rpb25zLnB1c2gob0FjdGlvblNob3dEZXRhaWxzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YWN0aW9ucyA9IFtvQWN0aW9uU2hvd0RldGFpbHNdO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0aWQ6IHNGb3JtQ29udGFpbmVySWQsXG5cdFx0Zm9ybUVsZW1lbnRzOiBhRm9ybUVsZW1lbnRzLFxuXHRcdGFubm90YXRpb25QYXRoOiBzQW5ub3RhdGlvblBhdGgsXG5cdFx0aXNWaXNpYmxlOiBpc1Zpc2libGUsXG5cdFx0ZW50aXR5U2V0OiBzRW50aXR5U2V0UGF0aCxcblx0XHRhY3Rpb25zOiBhY3Rpb25zLFxuXHRcdHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzOiBhZGRpdGlvbmFsU2V0dGluZ3M/LnVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzLFxuXHRcdGFubm90YXRpb25IaWRkZW46IGZhY2V0RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiA/IHRydWUgOiBmYWxzZVxuXHR9O1xufVxuXG5mdW5jdGlvbiBnZXRGb3JtQ29udGFpbmVyc0ZvckNvbGxlY3Rpb24oXG5cdGZhY2V0RGVmaW5pdGlvbjogQ29sbGVjdGlvbkZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0YWN0aW9ucz86IEJhc2VBY3Rpb25bXSxcblx0YWRkaXRpb25hbFNldHRpbmdzPzogQWRkaXRpb25hbEZvcm1TZXR0aW5nc1xuKTogRm9ybUNvbnRhaW5lcltdIHtcblx0Y29uc3QgZm9ybUNvbnRhaW5lcnM6IEZvcm1Db250YWluZXJbXSA9IFtdO1xuXHRjb25zdCBmb3JtQ29udGFpbmVyU2V0dGluZ3MgPSB7XG5cdFx0dXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXM6IGFkZGl0aW9uYWxTZXR0aW5ncz8udXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXNcblx0fTtcblx0ZmFjZXREZWZpbml0aW9uLkZhY2V0cz8uZm9yRWFjaCgoZmFjZXQpID0+IHtcblx0XHQvLyBJZ25vcmUgbGV2ZWwgMyBjb2xsZWN0aW9uIGZhY2V0XG5cdFx0aWYgKGZhY2V0LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdGZvcm1Db250YWluZXJzLnB1c2goZ2V0Rm9ybUNvbnRhaW5lcihmYWNldCBhcyBSZWZlcmVuY2VGYWNldFR5cGVzLCBjb252ZXJ0ZXJDb250ZXh0LCBhY3Rpb25zLCBmb3JtQ29udGFpbmVyU2V0dGluZ3MpKTtcblx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKGBTa2lwcGluZyBmYWNldCAke2ZhY2V0LmZ1bGx5UXVhbGlmaWVkTmFtZX0gZHVlIHRvIGVycm9yOmAsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGZvcm1Db250YWluZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWZlcmVuY2VGYWNldChmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMpOiBmYWNldERlZmluaXRpb24gaXMgUmVmZXJlbmNlRmFjZXRUeXBlcyB7XG5cdHJldHVybiBmYWNldERlZmluaXRpb24uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRm9ybURlZmluaXRpb24oXG5cdGZhY2V0RGVmaW5pdGlvbjogRmllbGRHcm91cFR5cGUgfCBDb2xsZWN0aW9uRmFjZXQgfCBSZWZlcmVuY2VGYWNldCB8IHVuZGVmaW5lZCxcblx0aXNWaXNpYmxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRhY3Rpb25zPzogQmFzZUFjdGlvbltdLFxuXHRhZGRpdGlvbmFsU2V0dGluZ3M/OiBBZGRpdGlvbmFsRm9ybVNldHRpbmdzXG4pOiBGb3JtRGVmaW5pdGlvbiB7XG5cdHN3aXRjaCAoZmFjZXREZWZpbml0aW9uPy4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0OlxuXHRcdFx0Ly8gS2VlcCBvbmx5IHZhbGlkIGNoaWxkcmVuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRpZDogZ2V0Rm9ybUlEKGZhY2V0RGVmaW5pdGlvbiksXG5cdFx0XHRcdHVzZUZvcm1Db250YWluZXJMYWJlbHM6IHRydWUsXG5cdFx0XHRcdGhhc0ZhY2V0c05vdFBhcnRPZlByZXZpZXc6IGZhY2V0RGVmaW5pdGlvbi5GYWNldHMuc29tZShcblx0XHRcdFx0XHQoY2hpbGRGYWNldCkgPT4gY2hpbGRGYWNldC5hbm5vdGF0aW9ucz8uVUk/LlBhcnRPZlByZXZpZXc/LnZhbHVlT2YoKSA9PT0gZmFsc2Vcblx0XHRcdFx0KSxcblx0XHRcdFx0Zm9ybUNvbnRhaW5lcnM6IGdldEZvcm1Db250YWluZXJzRm9yQ29sbGVjdGlvbihmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQsIGFjdGlvbnMsIGFkZGl0aW9uYWxTZXR0aW5ncyksXG5cdFx0XHRcdGlzVmlzaWJsZTogaXNWaXNpYmxlXG5cdFx0XHR9O1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQ6XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRpZDogZ2V0Rm9ybUlEKGZhY2V0RGVmaW5pdGlvbiksXG5cdFx0XHRcdHVzZUZvcm1Db250YWluZXJMYWJlbHM6IGZhbHNlLFxuXHRcdFx0XHRoYXNGYWNldHNOb3RQYXJ0T2ZQcmV2aWV3OiBmYWNldERlZmluaXRpb24uYW5ub3RhdGlvbnM/LlVJPy5QYXJ0T2ZQcmV2aWV3Py52YWx1ZU9mKCkgPT09IGZhbHNlLFxuXHRcdFx0XHRmb3JtQ29udGFpbmVyczogW2dldEZvcm1Db250YWluZXIoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LCBhY3Rpb25zLCBhZGRpdGlvbmFsU2V0dGluZ3MpXSxcblx0XHRcdFx0aXNWaXNpYmxlOiBpc1Zpc2libGVcblx0XHRcdH07XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjcmVhdGUgZm9ybSBiYXNlZCBvbiBSZWZlcmVuY2VVUkxGYWNldFwiKTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BOENZQSxlQUFlLDBCQUFmQSxlQUFlO0lBQWZBLGVBQWU7SUFBZkEsZUFBZTtJQUFmQSxlQUFlO0lBQUEsT0FBZkEsZUFBZTtFQUFBO0VBQUFDLFFBQUEsQ0FBQUQsZUFBQSxHQUFB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
303
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGb3JtRWxlbWVudFR5cGUiLCJfZXhwb3J0cyIsImdldEZvcm1hdE9wdGlvbnNGb3JGb3JtRWxlbWVudCIsImZhY2V0RGVmaW5pdGlvbiIsImNvbnZlcnRlckNvbnRleHQiLCJmaWVsZCIsIm1hbmlmZXN0V3JhcHBlciIsImhvcml6b250YWxMYXlvdXQiLCJmb3JtYXRPcHRpb25zIiwidGV4dExpbmVzRWRpdCIsIiRUeXBlIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0SG9yaXpvbnRhbExheW91dEZvckZpZWxkR3JvdXAiLCJUYXJnZXQiLCJ2YWx1ZSIsImZpZWxkR3JvdXBIb3Jpem9udGFsTGF5b3V0IiwiaXNGaWVsZFBhcnRPZlByZXZpZXciLCJmb3JtUGFydE9mUHJldmlldyIsInZhbHVlT2YiLCJhbm5vdGF0aW9ucyIsIlVJIiwiUGFydE9mUHJldmlldyIsInVuZGVmaW5lZCIsImdldEZvcm1FbGVtZW50c0Zyb21Bbm5vdGF0aW9ucyIsImZvcm1FbGVtZW50cyIsInJlc29sdmVkVGFyZ2V0IiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJmb3JtQW5ub3RhdGlvbiIsImFubm90YXRpb24iLCJnZXREYXRhRmllbGRzRnJvbUFubm90YXRpb25zIiwiZGF0YUZpZWxkS2V5IiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwic2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCIsImdldFNlbWFudGljT2JqZWN0UGF0aCIsIm1hbmlmZXN0RmllbGRzIiwiZ2V0Rm9ybUNvbnRhaW5lciIsImZpZWxkcyIsInNlbWFudGljT2JqZWN0TWFuaWZlc3RTZXR0aW5ncyIsInNlbWFudGljT2JqZWN0IiwiaXNSZWZlcmVuY2VQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4iLCJmb3JtRWxlbWVudCIsImtleSIsInR5cGUiLCJBbm5vdGF0aW9uIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwic2VtYW50aWNPYmplY3RQYXRoIiwiaXNQYXJ0T2ZQcmV2aWV3IiwibGFiZWwiLCJMYWJlbCIsIlZhbHVlIiwiJHRhcmdldCIsIkNvbW1vbiIsInRvU3RyaW5nIiwiY29ubmVjdGVkRmllbGRzIiwiT2JqZWN0IiwidmFsdWVzIiwiRGF0YSIsImZpbHRlciIsImNvbm5lY3RlZEZpZWxkIiwiaGFzT3duUHJvcGVydHkiLCJtYXAiLCJjb25ubmVjdGVkRmllbGRFbGVtZW50IiwicmV0dXJuT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXQiLCJ0YXJnZXQiLCJUZW1wbGF0ZSIsImZpZWxkR3JvdXBFbGVtZW50cyIsImZpZWxkR3JvdXBFbGVtZW50IiwiZWxlbWVudCIsInB1c2giLCJ0ZXJtIiwiZm9yRWFjaCIsInF1YWxpZmllciIsImdldEZvcm1FbGVtZW50c0Zyb21NYW5pZmVzdCIsIm1hbmlmZXN0Rm9ybUNvbnRhaW5lciIsImtleXMiLCJmaWVsZElkIiwiaWQiLCJEZWZhdWx0IiwidGVtcGxhdGUiLCJwcm9wZXJ0eVBhdGgiLCJwcm9wZXJ0eSIsImZldGNoVGV4dEZyb21NZXRhTW9kZWwiLCJwb3NpdGlvbiIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkFmdGVyIiwicmVhZE9ubHkiLCJ2aXNpYmxlIiwiY29tcGlsZUV4cHJlc3Npb24iLCJhY3Rpb25zIiwiYWRkaXRpb25hbFNldHRpbmdzIiwic0Zvcm1Db250YWluZXJJZCIsImNyZWF0ZUlkRm9yQW5ub3RhdGlvbiIsInNBbm5vdGF0aW9uUGF0aCIsImlzVmlzaWJsZSIsIm5vdCIsImVxdWFsIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiSGlkZGVuIiwic0VudGl0eVNldFBhdGgiLCJlbnRpdHlTZXQiLCJnZXRFbnRpdHlTZXQiLCJkYXRhTW9kZWxPYmplY3RQYXRoVGFyZ2V0IiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsInRhcmdldE9iamVjdCIsImdldFRhcmdldEVudGl0eVNldFBhdGgiLCJpc05hdmlnYXRpb25Qcm9wZXJ0eSIsImNvbnRhaW5zVGFyZ2V0IiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImlzU2luZ2xldG9uIiwiYUZvcm1FbGVtZW50cyIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwiYWN0aW9uIiwiZmFjZXROYW1lIiwibGVuZ3RoIiwib0FjdGlvblNob3dEZXRhaWxzIiwiZ2V0Rm9ybVN0YW5kYXJkQWN0aW9uQnV0dG9uSUQiLCJ0ZXh0IiwiaWZFbHNlIiwicGF0aEluTW9kZWwiLCJBY3Rpb25UeXBlIiwiU2hvd0Zvcm1EZXRhaWxzIiwicHJlc3MiLCJzb21lIiwib0Zvcm1FbGVtZW50IiwiZm9ybU1hbmlmZXN0Q29uZmlnIiwib3ZlcmZsb3dHcm91cHNDb25maWciLCJvdmVyZmxvd0dyb3VwcyIsImFkZFNlcGFyYXRvcnMiLCJ1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3RlcyIsImFubm90YXRpb25IaWRkZW4iLCJnZXRGb3JtQ29udGFpbmVyc0ZvckNvbGxlY3Rpb24iLCJmb3JtQ29udGFpbmVycyIsImZvcm1Db250YWluZXJTZXR0aW5ncyIsIkZhY2V0cyIsImZhY2V0IiwiZXJyb3IiLCJMb2ciLCJpc1JlZmVyZW5jZUZhY2V0IiwiY3JlYXRlRm9ybURlZmluaXRpb24iLCJnZXRGb3JtSUQiLCJ1c2VGb3JtQ29udGFpbmVyTGFiZWxzIiwiaGFzRmFjZXRzTm90UGFydE9mUHJldmlldyIsImNoaWxkRmFjZXQiLCJFcnJvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRm9ybS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE1hc2tlZCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgeyBDb21tb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBDb250YWN0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tdW5pY2F0aW9uXCI7XG5pbXBvcnQgeyBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tdW5pY2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENvbGxlY3Rpb25GYWNldCxcblx0Q29sbGVjdGlvbkZhY2V0VHlwZXMsXG5cdERhdGFGaWVsZCxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YVBvaW50LFxuXHRGYWNldFR5cGVzLFxuXHRGaWVsZEdyb3VwLFxuXHRGaWVsZEdyb3VwVHlwZSxcblx0SWRlbnRpZmljYXRpb24sXG5cdElucHV0TWFzayxcblx0UGFydE9mUHJldmlldyxcblx0UmVmZXJlbmNlRmFjZXQsXG5cdFJlZmVyZW5jZUZhY2V0VHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgZXF1YWwsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiwgaWZFbHNlLCBub3QsIHBhdGhJbk1vZGVsIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgeyBnZXRTZW1hbnRpY09iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB0eXBlIHsgQmFzZUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IGFkZFNlcGFyYXRvcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBpc05hdmlnYXRpb25Qcm9wZXJ0eSwgaXNTaW5nbGV0b24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgeyBnZXRUYXJnZXRFbnRpdHlTZXRQYXRoLCBnZXRUYXJnZXRPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgY3JlYXRlSWRGb3JBbm5vdGF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgRm9ybU1hbmlmZXN0Q29uZmlndXJhdGlvbiwgRm9ybWF0T3B0aW9uc1R5cGUgfSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgQWN0aW9uVHlwZSB9IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZU9iamVjdCwgQ3VzdG9tRWxlbWVudCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgT3ZlcnJpZGVUeXBlLCBQbGFjZW1lbnQsIGluc2VydEN1c3RvbUVsZW1lbnRzIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbiB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0RhdGFGaWVsZEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0Rm9ybUlELCBnZXRGb3JtU3RhbmRhcmRBY3Rpb25CdXR0b25JRCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9LZXlcIjtcblxuZXhwb3J0IHR5cGUgRm9ybURlZmluaXRpb24gPSB7XG5cdGlkOiBzdHJpbmc7XG5cdHVzZUZvcm1Db250YWluZXJMYWJlbHM6IGJvb2xlYW47XG5cdGhhc0ZhY2V0c05vdFBhcnRPZlByZXZpZXc6IGJvb2xlYW47XG5cdGZvcm1Db250YWluZXJzOiBGb3JtQ29udGFpbmVyW107XG5cdGlzVmlzaWJsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG59O1xuXG5leHBvcnQgZW51bSBGb3JtRWxlbWVudFR5cGUge1xuXHREZWZhdWx0ID0gXCJEZWZhdWx0XCIsXG5cdFNsb3QgPSBcIlNsb3RcIixcblx0QW5ub3RhdGlvbiA9IFwiQW5ub3RhdGlvblwiXG59XG5cbmV4cG9ydCB0eXBlIEJhc2VGb3JtRWxlbWVudCA9IENvbmZpZ3VyYWJsZU9iamVjdCAmIHtcblx0aWQ/OiBzdHJpbmc7XG5cdHR5cGU6IEZvcm1FbGVtZW50VHlwZTtcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0Zm9ybWF0T3B0aW9ucz86IEZvcm1hdE9wdGlvbnNUeXBlO1xuXHRyZWFkT25seT86IGJvb2xlYW47XG5cdHNlbWFudGljT2JqZWN0Pzogc3RyaW5nO1xuXHRhbm5vdGF0aW9uUGF0aD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEFubm90YXRpb25Gb3JtRWxlbWVudCA9IEJhc2VGb3JtRWxlbWVudCAmIHtcblx0aWRQcmVmaXg/OiBzdHJpbmc7XG5cdGFubm90YXRpb25QYXRoPzogc3RyaW5nO1xuXHRpc1ZhbHVlTXVsdGlsaW5lVGV4dD86IGJvb2xlYW47XG5cdHNlbWFudGljT2JqZWN0UGF0aD86IHN0cmluZztcblx0Y29ubmVjdGVkRmllbGRzPzoge1xuXHRcdHNlbWFudGljT2JqZWN0UGF0aD86IHN0cmluZztcblx0XHRvcmlnaW5hbE9iamVjdD86IERhdGFGaWVsZEFic3RyYWN0VHlwZXM7XG5cdFx0b3JpZ2luYWxUZW1wbGF0ZT86IHN0cmluZztcblx0fVtdO1xuXHRmaWVsZEdyb3VwRWxlbWVudHM/OiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzW107XG5cdGlzUGFydE9mUHJldmlldz86IGJvb2xlYW47XG5cdGNvbm5lY3RlZEZpZWxkc1RhcmdldD86IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9O1xufTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tRm9ybUVsZW1lbnQgPSBDdXN0b21FbGVtZW50PFxuXHRCYXNlRm9ybUVsZW1lbnQgJiB7XG5cdFx0dHlwZTogRm9ybUVsZW1lbnRUeXBlO1xuXHRcdHRlbXBsYXRlOiBzdHJpbmc7XG5cdFx0cHJvcGVydHlQYXRoPzogc3RyaW5nO1xuXHR9XG4+O1xuXG5leHBvcnQgdHlwZSBGb3JtRWxlbWVudCA9IEN1c3RvbUZvcm1FbGVtZW50IHwgQW5ub3RhdGlvbkZvcm1FbGVtZW50O1xuXG5leHBvcnQgdHlwZSBBZGRpdGlvbmFsRm9ybVNldHRpbmdzID0ge1xuXHR1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3Rlcz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBGb3JtQ29udGFpbmVyID0ge1xuXHRpZD86IHN0cmluZztcblx0Zm9ybUVsZW1lbnRzOiBGb3JtRWxlbWVudFtdO1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRpc1Zpc2libGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRhbm5vdGF0aW9uSGlkZGVuOiBib29sZWFuO1xuXHRlbnRpdHlTZXQ/OiBzdHJpbmc7XG5cdGFjdGlvbnM/OiBCYXNlQWN0aW9uW107XG5cdHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzPzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogUmV0dXJucyBkZWZhdWx0IGZvcm1hdCBvcHRpb25zIGZvciB0ZXh0IGZpZWxkcyBpbiBhIGZvcm0uXG4gKiBJdCBhbHNvIGFkZHMgdGhlIGhvcml6b250YWwgbGF5b3V0IGFzIGEgZm9ybWF0IG9wdGlvbiBmb3IgZmllbGQgZ3JvdXBzLlxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvbiBUaGUgZmFjZXQgZGVmaW5pdGlvbiB0byBnZXQgdGhlIGZvcm1hdCBvcHRpb25zIGZvclxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0IHRvIGZldGNoIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbiAqIEBwYXJhbSBmaWVsZCBUaGUgZmllbGQgZm9yIHdoaWNoIHRoZSBmb3JtYXQgb3B0aW9ucyBhcmUgdG8gYmUgcmV0dXJuZWRcbiAqIEByZXR1cm5zIFRoZSBjb2xsZWN0aW9uIG9mIGZvcm1hdCBvcHRpb25zIGZvciB0aGUgRm9ybUVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0Rm9ybWF0T3B0aW9uc0ZvckZvcm1FbGVtZW50KFxuXHRmYWNldERlZmluaXRpb246IFJlZmVyZW5jZUZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZmllbGQ/OiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzXG4pOiBGb3JtYXRPcHRpb25zVHlwZSB7XG5cdGxldCBtYW5pZmVzdFdyYXBwZXIsIGhvcml6b250YWxMYXlvdXQ7XG5cdGNvbnN0IGZvcm1hdE9wdGlvbnM6IEZvcm1hdE9wdGlvbnNUeXBlID0ge1xuXHRcdHRleHRMaW5lc0VkaXQ6IDQgLy8gZGVmYXVsdFxuXHR9O1xuXHRpZiAoZmllbGQgJiYgZmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pIHtcblx0XHRtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRcdGhvcml6b250YWxMYXlvdXQgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0SG9yaXpvbnRhbExheW91dEZvckZpZWxkR3JvdXAoZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZSwgZmllbGQuVGFyZ2V0Py52YWx1ZSk7XG5cdFx0aWYgKGhvcml6b250YWxMYXlvdXQgPT09IHRydWUpIHtcblx0XHRcdGZvcm1hdE9wdGlvbnMuZmllbGRHcm91cEhvcml6b250YWxMYXlvdXQgPSBob3Jpem9udGFsTGF5b3V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZm9ybWF0T3B0aW9ucztcbn1cblxuZnVuY3Rpb24gaXNGaWVsZFBhcnRPZlByZXZpZXcoZmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIGZvcm1QYXJ0T2ZQcmV2aWV3PzogUGFydE9mUHJldmlldyk6IGJvb2xlYW4ge1xuXHQvLyBCb3RoIGVhY2ggZm9ybSBhbmQgZmllbGQgY2FuIGhhdmUgdGhlIFBhcnRPZlByZXZpZXcgYW5ub3RhdGlvbi4gT25seSBpZiB0aGUgZm9ybSBpcyBub3QgaGlkZGVuIChub3QgcGFydE9mUHJldmlldykgd2UgYWxsb3cgdG9nZ2xpbmcgb24gZmllbGQgbGV2ZWxcblx0cmV0dXJuIChcblx0XHRmb3JtUGFydE9mUHJldmlldz8udmFsdWVPZigpID09PSBmYWxzZSB8fFxuXHRcdGZpZWxkLmFubm90YXRpb25zPy5VST8uUGFydE9mUHJldmlldyA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0ZmllbGQuYW5ub3RhdGlvbnM/LlVJPy5QYXJ0T2ZQcmV2aWV3LnZhbHVlT2YoKSA9PT0gdHJ1ZVxuXHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUVsZW1lbnRzRnJvbUFubm90YXRpb25zKFxuXHRmYWNldERlZmluaXRpb246IFJlZmVyZW5jZUZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogQW5ub3RhdGlvbkZvcm1FbGVtZW50W10ge1xuXHRjb25zdCBmb3JtRWxlbWVudHM6IEFubm90YXRpb25Gb3JtRWxlbWVudFtdID0gW107XG5cdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihmYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlKTtcblx0Y29uc3QgZm9ybUFubm90YXRpb246IElkZW50aWZpY2F0aW9uIHwgRmllbGRHcm91cCB8IENvbnRhY3QgfCBEYXRhUG9pbnQgfCBJbnB1dE1hc2sgfCBNYXNrZWQgPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uIGFzXG5cdFx0fCBJZGVudGlmaWNhdGlvblxuXHRcdHwgRmllbGRHcm91cFxuXHRcdHwgQ29udGFjdFxuXHRcdHwgRGF0YVBvaW50XG5cdFx0fCBJbnB1dE1hc2tcblx0XHR8IE1hc2tlZDtcblx0Y29udmVydGVyQ29udGV4dCA9IHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQ7XG5cblx0ZnVuY3Rpb24gZ2V0RGF0YUZpZWxkc0Zyb21Bbm5vdGF0aW9ucyhmaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcywgZm9ybVBhcnRPZlByZXZpZXc6IFBhcnRPZlByZXZpZXcgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRjb25zdCBkYXRhRmllbGRLZXkgPSBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGZpZWxkKTtcblx0XHRjb25zdCBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoID0gZ2V0U2VtYW50aWNPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQsIGZpZWxkKTtcblx0XHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRcdGNvbnN0IG1hbmlmZXN0RmllbGRzID0gbWFuaWZlc3RXcmFwcGVyLmdldEZvcm1Db250YWluZXIoZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZSk/LmZpZWxkcztcblx0XHRjb25zdCBzZW1hbnRpY09iamVjdE1hbmlmZXN0U2V0dGluZ3MgPSBtYW5pZmVzdEZpZWxkcz8uW2RhdGFGaWVsZEtleV0/LnNlbWFudGljT2JqZWN0O1xuXHRcdGlmIChcblx0XHRcdGZpZWxkLiRUeXBlICE9PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24gJiZcblx0XHRcdGZpZWxkLiRUeXBlICE9PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gJiZcblx0XHRcdGZpZWxkLiRUeXBlICE9PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cCAmJlxuXHRcdFx0IWlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuKGZpZWxkKVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgZm9ybUVsZW1lbnQgPSB7XG5cdFx0XHRcdGtleTogZGF0YUZpZWxkS2V5LFxuXHRcdFx0XHR0eXBlOiBGb3JtRWxlbWVudFR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGAke2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChmaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpfS9gLFxuXHRcdFx0XHRzZW1hbnRpY09iamVjdFBhdGg6IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM6IGdldEZvcm1hdE9wdGlvbnNGb3JGb3JtRWxlbWVudChmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQsIGZpZWxkKSxcblx0XHRcdFx0aXNQYXJ0T2ZQcmV2aWV3OiBpc0ZpZWxkUGFydE9mUHJldmlldyhmaWVsZCwgZm9ybVBhcnRPZlByZXZpZXcpLFxuXHRcdFx0XHRsYWJlbDogZmllbGQuTGFiZWwgPz8gKGZpZWxkIGFzIERhdGFGaWVsZCkuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpLFxuXHRcdFx0XHRzZW1hbnRpY09iamVjdDogc2VtYW50aWNPYmplY3RNYW5pZmVzdFNldHRpbmdzXG5cdFx0XHR9O1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFubm90YXRpb25cIiAmJlxuXHRcdFx0XHRmaWVsZC5UYXJnZXQuJHRhcmdldD8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ29ubmVjdGVkRmllbGRzVHlwZVwiXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3QgY29ubmVjdGVkRmllbGRzID0gT2JqZWN0LnZhbHVlcyhmaWVsZC5UYXJnZXQuJHRhcmdldC5EYXRhKS5maWx0ZXIoXG5cdFx0XHRcdFx0KGNvbm5lY3RlZEZpZWxkOiB1bmtub3duKSA9PiAoY29ubmVjdGVkRmllbGQgYXMgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk/Lmhhc093blByb3BlcnR5KFwiVmFsdWVcIilcblx0XHRcdFx0KSBhcyBEYXRhRmllbGRBYnN0cmFjdFR5cGVzW107XG5cdFx0XHRcdChmb3JtRWxlbWVudCBhcyBBbm5vdGF0aW9uRm9ybUVsZW1lbnQpLmNvbm5lY3RlZEZpZWxkcyA9IGNvbm5lY3RlZEZpZWxkcy5tYXAoKGNvbm5uZWN0ZWRGaWVsZEVsZW1lbnQpID0+IHtcblx0XHRcdFx0XHRjb25zdCByZXR1cm5PYmplY3QgPSB7XG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdFBhdGg6IGdldFNlbWFudGljT2JqZWN0UGF0aChjb252ZXJ0ZXJDb250ZXh0LCBjb25ubmVjdGVkRmllbGRFbGVtZW50KVxuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkocmV0dXJuT2JqZWN0LCBcIm9yaWdpbmFsT2JqZWN0XCIsIHtcblx0XHRcdFx0XHRcdGdldDogKCkgPT4gY29ubm5lY3RlZEZpZWxkRWxlbWVudFxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHJldHVybk9iamVjdCwgXCJvcmlnaW5hbFRlbXBsYXRlXCIsIHtcblx0XHRcdFx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCB0YXJnZXQgPSBmaWVsZC5UYXJnZXQ/LiR0YXJnZXQ7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0YXJnZXQgJiYgXCJUZW1wbGF0ZVwiIGluIHRhcmdldCA/IHRhcmdldC5UZW1wbGF0ZSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdHJldHVybiByZXR1cm5PYmplY3Q7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0ZmllbGQuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQW5ub3RhdGlvblwiICYmXG5cdFx0XHRcdGZpZWxkLlRhcmdldC4kdGFyZ2V0Py4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWVsZEdyb3VwVHlwZVwiXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3QgZmllbGRHcm91cEVsZW1lbnRzID0gT2JqZWN0LnZhbHVlcyhmaWVsZC5UYXJnZXQuJHRhcmdldC5EYXRhKS5maWx0ZXIoXG5cdFx0XHRcdFx0KGZpZWxkR3JvdXBFbGVtZW50KSA9PiBmaWVsZEdyb3VwRWxlbWVudD8uaGFzT3duUHJvcGVydHkoXCJWYWx1ZVwiKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHQoZm9ybUVsZW1lbnQgYXMgQW5ub3RhdGlvbkZvcm1FbGVtZW50KS5maWVsZEdyb3VwRWxlbWVudHMgPSBmaWVsZEdyb3VwRWxlbWVudHMubWFwKChlbGVtZW50KSA9PiAoe1xuXHRcdFx0XHRcdCRUeXBlOiBlbGVtZW50LiRUeXBlLFxuXHRcdFx0XHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogZWxlbWVudC5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdFx0TGFiZWw6IGVsZW1lbnQuTGFiZWxcblx0XHRcdFx0fSkpIGFzIHVua25vd24gYXMgRGF0YUZpZWxkQWJzdHJhY3RUeXBlc1tdO1xuXHRcdFx0fVxuXHRcdFx0Zm9ybUVsZW1lbnRzLnB1c2goZm9ybUVsZW1lbnQpO1xuXHRcdH1cblx0fVxuXG5cdHN3aXRjaCAoZm9ybUFubm90YXRpb24/LnRlcm0pIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXA6XG5cdFx0XHRmb3JtQW5ub3RhdGlvbi5EYXRhLmZvckVhY2goKGZpZWxkKSA9PiBnZXREYXRhRmllbGRzRnJvbUFubm90YXRpb25zKGZpZWxkLCBmYWNldERlZmluaXRpb24uYW5ub3RhdGlvbnM/LlVJPy5QYXJ0T2ZQcmV2aWV3KSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLklkZW50aWZpY2F0aW9uOlxuXHRcdFx0Zm9ybUFubm90YXRpb24uZm9yRWFjaCgoZmllbGQpID0+IGdldERhdGFGaWVsZHNGcm9tQW5ub3RhdGlvbnMoZmllbGQsIGZhY2V0RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uVUk/LlBhcnRPZlByZXZpZXcpKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuRGF0YVBvaW50OlxuXHRcdFx0Zm9ybUVsZW1lbnRzLnB1c2goe1xuXHRcdFx0XHQvLyBrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZm9ybUFubm90YXRpb24pLFxuXHRcdFx0XHRrZXk6IGBEYXRhUG9pbnQ6OiR7Zm9ybUFubm90YXRpb24ucXVhbGlmaWVyID8gZm9ybUFubm90YXRpb24ucXVhbGlmaWVyIDogXCJcIn1gLFxuXHRcdFx0XHR0eXBlOiBGb3JtRWxlbWVudFR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGAke2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChmb3JtQW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUpfS9gXG5cdFx0XHR9KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuSW5wdXRNYXNrOlxuXHRcdFx0Zm9ybUVsZW1lbnRzLnB1c2goe1xuXHRcdFx0XHRrZXk6IGBNYXNrZWRJbnB1dDo6JHtmb3JtQW5ub3RhdGlvbi5xdWFsaWZpZXIgPyBmb3JtQW5ub3RhdGlvbi5xdWFsaWZpZXIgOiBcIlwifWAsXG5cdFx0XHRcdHR5cGU6IEZvcm1FbGVtZW50VHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogYCR7Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGZvcm1Bbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSl9L2Bcblx0XHRcdH0pO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBDb21tb25Bbm5vdGF0aW9uVGVybXMuTWFza2VkOlxuXHRcdFx0Zm9ybUVsZW1lbnRzLnB1c2goe1xuXHRcdFx0XHRrZXk6IGBNYXNrZWQ6OiR7Zm9ybUFubm90YXRpb24ucXVhbGlmaWVyID8gZm9ybUFubm90YXRpb24ucXVhbGlmaWVyIDogXCJcIn1gLFxuXHRcdFx0XHR0eXBlOiBGb3JtRWxlbWVudFR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGAke2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChmb3JtQW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUpfS9gXG5cdFx0XHR9KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgQ29tbXVuaWNhdGlvbkFubm90YXRpb25UZXJtcy5Db250YWN0OlxuXHRcdFx0Zm9ybUVsZW1lbnRzLnB1c2goe1xuXHRcdFx0XHQvLyBrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZm9ybUFubm90YXRpb24pLFxuXHRcdFx0XHRrZXk6IGBDb250YWN0Ojoke2Zvcm1Bbm5vdGF0aW9uLnF1YWxpZmllciA/IGZvcm1Bbm5vdGF0aW9uLnF1YWxpZmllciA6IFwiXCJ9YCxcblx0XHRcdFx0dHlwZTogRm9ybUVsZW1lbnRUeXBlLkFubm90YXRpb24sXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBgJHtjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZm9ybUFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lKX0vYFxuXHRcdFx0fSk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIGZvcm1FbGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1FbGVtZW50c0Zyb21NYW5pZmVzdChcblx0ZmFjZXREZWZpbml0aW9uOiBSZWZlcmVuY2VGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUZvcm1FbGVtZW50PiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IG1hbmlmZXN0Rm9ybUNvbnRhaW5lcjogRm9ybU1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IG1hbmlmZXN0V3JhcHBlci5nZXRGb3JtQ29udGFpbmVyKGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQudmFsdWUpO1xuXHRjb25zdCBmb3JtRWxlbWVudHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUZvcm1FbGVtZW50PiA9IHt9O1xuXHRpZiAobWFuaWZlc3RGb3JtQ29udGFpbmVyPy5maWVsZHMpIHtcblx0XHRPYmplY3Qua2V5cyhtYW5pZmVzdEZvcm1Db250YWluZXI/LmZpZWxkcykuZm9yRWFjaCgoZmllbGRJZCkgPT4ge1xuXHRcdFx0Zm9ybUVsZW1lbnRzW2ZpZWxkSWRdID0ge1xuXHRcdFx0XHRrZXk6IGZpZWxkSWQsXG5cdFx0XHRcdGlkOiBgQ3VzdG9tRm9ybUVsZW1lbnQ6OiR7ZmllbGRJZH1gLFxuXHRcdFx0XHR0eXBlOiBtYW5pZmVzdEZvcm1Db250YWluZXIuZmllbGRzW2ZpZWxkSWRdLnR5cGUgfHwgRm9ybUVsZW1lbnRUeXBlLkRlZmF1bHQsXG5cdFx0XHRcdHRlbXBsYXRlOiBtYW5pZmVzdEZvcm1Db250YWluZXIuZmllbGRzW2ZpZWxkSWRdLnRlbXBsYXRlLFxuXHRcdFx0XHRwcm9wZXJ0eVBhdGg6IG1hbmlmZXN0Rm9ybUNvbnRhaW5lci5maWVsZHNbZmllbGRJZF0/LnByb3BlcnR5LFxuXHRcdFx0XHRsYWJlbDogY29udmVydGVyQ29udGV4dC5mZXRjaFRleHRGcm9tTWV0YU1vZGVsKG1hbmlmZXN0Rm9ybUNvbnRhaW5lci5maWVsZHNbZmllbGRJZF0ubGFiZWwpLFxuXHRcdFx0XHRwb3NpdGlvbjogbWFuaWZlc3RGb3JtQ29udGFpbmVyLmZpZWxkc1tmaWVsZElkXS5wb3NpdGlvbiB8fCB7XG5cdFx0XHRcdFx0cGxhY2VtZW50OiBQbGFjZW1lbnQuQWZ0ZXJcblx0XHRcdFx0fSxcblx0XHRcdFx0Zm9ybWF0T3B0aW9uczoge1xuXHRcdFx0XHRcdC4uLmdldEZvcm1hdE9wdGlvbnNGb3JGb3JtRWxlbWVudChmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHRcdC4uLm1hbmlmZXN0Rm9ybUNvbnRhaW5lci5maWVsZHNbZmllbGRJZF0uZm9ybWF0T3B0aW9uc1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQuLi4obWFuaWZlc3RGb3JtQ29udGFpbmVyLmZpZWxkc1tmaWVsZElkXS5yZWFkT25seSAhPT0gdW5kZWZpbmVkICYmIHtcblx0XHRcdFx0XHRyZWFkT25seTogbWFuaWZlc3RGb3JtQ29udGFpbmVyLmZpZWxkc1tmaWVsZElkXS5yZWFkT25seVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0Li4uKG1hbmlmZXN0Rm9ybUNvbnRhaW5lci5maWVsZHNbZmllbGRJZF0uc2VtYW50aWNPYmplY3QgIT09IHVuZGVmaW5lZCAmJiB7XG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG1hbmlmZXN0Rm9ybUNvbnRhaW5lci5maWVsZHNbZmllbGRJZF0uc2VtYW50aWNPYmplY3Rcblx0XHRcdFx0fSksXG5cdFx0XHRcdC4uLihtYW5pZmVzdEZvcm1Db250YWluZXIuZmllbGRzW2ZpZWxkSWRdLnZpc2libGUgIT09IHVuZGVmaW5lZCAmJiB7XG5cdFx0XHRcdFx0dmlzaWJsZTpcblx0XHRcdFx0XHRcdHR5cGVvZiBtYW5pZmVzdEZvcm1Db250YWluZXIuZmllbGRzW2ZpZWxkSWRdLnZpc2libGUgPT09IFwiYm9vbGVhblwiXG5cdFx0XHRcdFx0XHRcdD8gY29tcGlsZUV4cHJlc3Npb24obWFuaWZlc3RGb3JtQ29udGFpbmVyLmZpZWxkc1tmaWVsZElkXS52aXNpYmxlIGFzIGJvb2xlYW4pXG5cdFx0XHRcdFx0XHRcdDogKG1hbmlmZXN0Rm9ybUNvbnRhaW5lci5maWVsZHNbZmllbGRJZF0udmlzaWJsZSBhcyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbilcblx0XHRcdFx0fSlcblx0XHRcdH07XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGZvcm1FbGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1Db250YWluZXIoXG5cdGZhY2V0RGVmaW5pdGlvbjogUmVmZXJlbmNlRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRhY3Rpb25zPzogQmFzZUFjdGlvbltdLFxuXHRhZGRpdGlvbmFsU2V0dGluZ3M/OiBBZGRpdGlvbmFsRm9ybVNldHRpbmdzXG4pOiBGb3JtQ29udGFpbmVyIHtcblx0Y29uc3Qgc0Zvcm1Db250YWluZXJJZCA9IGNyZWF0ZUlkRm9yQW5ub3RhdGlvbihmYWNldERlZmluaXRpb24pIGFzIHN0cmluZztcblx0Y29uc3Qgc0Fubm90YXRpb25QYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGZhY2V0RGVmaW5pdGlvbi5mdWxseVF1YWxpZmllZE5hbWUpO1xuXHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZSk7XG5cdGNvbnN0IGlzVmlzaWJsZSA9IGNvbXBpbGVFeHByZXNzaW9uKG5vdChlcXVhbCh0cnVlLCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZmFjZXREZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSkpKTtcblx0bGV0IHNFbnRpdHlTZXRQYXRoITogc3RyaW5nO1xuXHQvLyByZXNvbHZlZFRhcmdldCBkb2Vzbid0IGhhdmUgYSBlbnRpdHlTZXQgaW4gY2FzZSBDb250YWlubWVudHMgYW5kIFBhcmFtdGVyaXplZCBzZXJ2aWNlcy5cblx0Y29uc3QgZW50aXR5U2V0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aFRhcmdldCA9IHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdDtcblx0aWYgKGVudGl0eVNldCAmJiBlbnRpdHlTZXQgIT09IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpIHtcblx0XHRzRW50aXR5U2V0UGF0aCA9IGdldFRhcmdldEVudGl0eVNldFBhdGgocmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHR9IGVsc2UgaWYgKGlzTmF2aWdhdGlvblByb3BlcnR5KGRhdGFNb2RlbE9iamVjdFBhdGhUYXJnZXQpICYmIGRhdGFNb2RlbE9iamVjdFBhdGhUYXJnZXQ/LmNvbnRhaW5zVGFyZ2V0ID09PSB0cnVlKSB7XG5cdFx0c0VudGl0eVNldFBhdGggPSBnZXRUYXJnZXRPYmplY3RQYXRoKHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCBmYWxzZSk7XG5cdH0gZWxzZSBpZiAoZW50aXR5U2V0ICYmICFzRW50aXR5U2V0UGF0aCAmJiBpc1NpbmdsZXRvbihlbnRpdHlTZXQpKSB7XG5cdFx0c0VudGl0eVNldFBhdGggPSBlbnRpdHlTZXQuZnVsbHlRdWFsaWZpZWROYW1lO1xuXHR9IGVsc2UgaWYgKCFlbnRpdHlTZXQgJiYgaXNOYXZpZ2F0aW9uUHJvcGVydHkoZGF0YU1vZGVsT2JqZWN0UGF0aFRhcmdldCkgJiYgZGF0YU1vZGVsT2JqZWN0UGF0aFRhcmdldD8uY29udGFpbnNUYXJnZXQgPT09IGZhbHNlKSB7XG5cdFx0c0VudGl0eVNldFBhdGggPSBnZXRUYXJnZXRPYmplY3RQYXRoKHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCBmYWxzZSk7XG5cdH1cblx0Y29uc3QgYUZvcm1FbGVtZW50cyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKFxuXHRcdGdldEZvcm1FbGVtZW50c0Zyb21Bbm5vdGF0aW9ucyhmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGdldEZvcm1FbGVtZW50c0Zyb21NYW5pZmVzdChmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdHtcblx0XHRcdGZvcm1hdE9wdGlvbnM6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHRyZWFkT25seTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdHNlbWFudGljT2JqZWN0OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdFx0dmlzaWJsZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZVxuXHRcdH1cblx0KTtcblxuXHRhY3Rpb25zID0gYWN0aW9ucyAhPT0gdW5kZWZpbmVkID8gYWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uLmZhY2V0TmFtZSA9PSBmYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lKSA6IFtdO1xuXHRpZiAoYWN0aW9ucy5sZW5ndGggPT09IDApIHtcblx0XHRhY3Rpb25zID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0Y29uc3Qgb0FjdGlvblNob3dEZXRhaWxzOiBCYXNlQWN0aW9uID0ge1xuXHRcdGlkOiBnZXRGb3JtU3RhbmRhcmRBY3Rpb25CdXR0b25JRChzRm9ybUNvbnRhaW5lcklkLCBcIlNob3dIaWRlRGV0YWlsc1wiKSxcblx0XHRrZXk6IFwiU3RhbmRhcmRBY3Rpb246OlNob3dIaWRlRGV0YWlsc1wiLFxuXHRcdHRleHQ6IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRlcXVhbChwYXRoSW5Nb2RlbChcInNob3dEZXRhaWxzXCIsIFwiaW50ZXJuYWxcIiksIHRydWUpLFxuXHRcdFx0XHRwYXRoSW5Nb2RlbChcIlRfQ09NTU9OX09CSkVDVF9QQUdFX0hJREVfRk9STV9DT05UQUlORVJfREVUQUlMU1wiLCBcInNhcC5mZS5pMThuXCIpLFxuXHRcdFx0XHRwYXRoSW5Nb2RlbChcIlRfQ09NTU9OX09CSkVDVF9QQUdFX1NIT1dfRk9STV9DT05UQUlORVJfREVUQUlMU1wiLCBcInNhcC5mZS5pMThuXCIpXG5cdFx0XHQpXG5cdFx0KSxcblx0XHR0eXBlOiBBY3Rpb25UeXBlLlNob3dGb3JtRGV0YWlscyxcblx0XHRwcmVzczogXCJGb3JtQ29udGFpbmVyUnVudGltZS50b2dnbGVEZXRhaWxzXCJcblx0fTtcblxuXHRpZiAoXG5cdFx0ZmFjZXREZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uUGFydE9mUHJldmlldz8udmFsdWVPZigpICE9PSBmYWxzZSAmJlxuXHRcdGFGb3JtRWxlbWVudHMuc29tZSgob0Zvcm1FbGVtZW50KSA9PiBvRm9ybUVsZW1lbnQuaXNQYXJ0T2ZQcmV2aWV3ID09PSBmYWxzZSlcblx0KSB7XG5cdFx0aWYgKGFjdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0YWN0aW9ucy5wdXNoKG9BY3Rpb25TaG93RGV0YWlscyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFjdGlvbnMgPSBbb0FjdGlvblNob3dEZXRhaWxzXTtcblx0XHR9XG5cdH1cblxuXHQvLyBBZGQgc2VwYXJhdG9ycyBiYXNlZCBvbiBvdmVyZmxvd0dyb3VwcyBjb25maWd1cmF0aW9uIGZyb20gbWFuaWZlc3Rcblx0aWYgKGFjdGlvbnMpIHtcblx0XHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRcdGNvbnN0IGZvcm1NYW5pZmVzdENvbmZpZyA9IG1hbmlmZXN0V3JhcHBlci5nZXRGb3JtQ29udGFpbmVyKGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQudmFsdWUpO1xuXHRcdGNvbnN0IG92ZXJmbG93R3JvdXBzQ29uZmlnID0gZm9ybU1hbmlmZXN0Q29uZmlnPy5vdmVyZmxvd0dyb3Vwcztcblx0XHRpZiAob3ZlcmZsb3dHcm91cHNDb25maWcpIHtcblx0XHRcdGFjdGlvbnMgPSBhZGRTZXBhcmF0b3JzKGFjdGlvbnMsIG92ZXJmbG93R3JvdXBzQ29uZmlnKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGlkOiBzRm9ybUNvbnRhaW5lcklkLFxuXHRcdGZvcm1FbGVtZW50czogYUZvcm1FbGVtZW50cyxcblx0XHRhbm5vdGF0aW9uUGF0aDogc0Fubm90YXRpb25QYXRoLFxuXHRcdGlzVmlzaWJsZTogaXNWaXNpYmxlLFxuXHRcdGVudGl0eVNldDogc0VudGl0eVNldFBhdGgsXG5cdFx0YWN0aW9uczogYWN0aW9ucyxcblx0XHR1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3RlczogYWRkaXRpb25hbFNldHRpbmdzPy51c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3Rlcyxcblx0XHRhbm5vdGF0aW9uSGlkZGVuOiBmYWNldERlZmluaXRpb24uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gPyB0cnVlIDogZmFsc2Vcblx0fTtcbn1cblxuZnVuY3Rpb24gZ2V0Rm9ybUNvbnRhaW5lcnNGb3JDb2xsZWN0aW9uKFxuXHRmYWNldERlZmluaXRpb246IENvbGxlY3Rpb25GYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGFjdGlvbnM/OiBCYXNlQWN0aW9uW10sXG5cdGFkZGl0aW9uYWxTZXR0aW5ncz86IEFkZGl0aW9uYWxGb3JtU2V0dGluZ3Ncbik6IEZvcm1Db250YWluZXJbXSB7XG5cdGNvbnN0IGZvcm1Db250YWluZXJzOiBGb3JtQ29udGFpbmVyW10gPSBbXTtcblx0Y29uc3QgZm9ybUNvbnRhaW5lclNldHRpbmdzID0ge1xuXHRcdHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzOiBhZGRpdGlvbmFsU2V0dGluZ3M/LnVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzXG5cdH07XG5cdGZhY2V0RGVmaW5pdGlvbi5GYWNldHM/LmZvckVhY2goKGZhY2V0KSA9PiB7XG5cdFx0Ly8gSWdub3JlIGxldmVsIDMgY29sbGVjdGlvbiBmYWNldFxuXHRcdGlmIChmYWNldC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRmb3JtQ29udGFpbmVycy5wdXNoKGdldEZvcm1Db250YWluZXIoZmFjZXQgYXMgUmVmZXJlbmNlRmFjZXRUeXBlcywgY29udmVydGVyQ29udGV4dCwgYWN0aW9ucywgZm9ybUNvbnRhaW5lclNldHRpbmdzKSk7XG5cdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihgU2tpcHBpbmcgZmFjZXQgJHtmYWNldC5mdWxseVF1YWxpZmllZE5hbWV9IGR1ZSB0byBlcnJvcjpgLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBmb3JtQ29udGFpbmVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVmZXJlbmNlRmFjZXQoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzKTogZmFjZXREZWZpbml0aW9uIGlzIFJlZmVyZW5jZUZhY2V0VHlwZXMge1xuXHRyZXR1cm4gZmFjZXREZWZpbml0aW9uLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZvcm1EZWZpbml0aW9uKFxuXHRmYWNldERlZmluaXRpb246IEZpZWxkR3JvdXBUeXBlIHwgQ29sbGVjdGlvbkZhY2V0IHwgUmVmZXJlbmNlRmFjZXQgfCB1bmRlZmluZWQsXG5cdGlzVmlzaWJsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0YWN0aW9ucz86IEJhc2VBY3Rpb25bXSxcblx0YWRkaXRpb25hbFNldHRpbmdzPzogQWRkaXRpb25hbEZvcm1TZXR0aW5nc1xuKTogRm9ybURlZmluaXRpb24ge1xuXHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbj8uJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldDpcblx0XHRcdC8vIEtlZXAgb25seSB2YWxpZCBjaGlsZHJlblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0aWQ6IGdldEZvcm1JRChmYWNldERlZmluaXRpb24pLFxuXHRcdFx0XHR1c2VGb3JtQ29udGFpbmVyTGFiZWxzOiB0cnVlLFxuXHRcdFx0XHRoYXNGYWNldHNOb3RQYXJ0T2ZQcmV2aWV3OiBmYWNldERlZmluaXRpb24uRmFjZXRzLnNvbWUoXG5cdFx0XHRcdFx0KGNoaWxkRmFjZXQpID0+IGNoaWxkRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5QYXJ0T2ZQcmV2aWV3Py52YWx1ZU9mKCkgPT09IGZhbHNlXG5cdFx0XHRcdCksXG5cdFx0XHRcdGZvcm1Db250YWluZXJzOiBnZXRGb3JtQ29udGFpbmVyc0ZvckNvbGxlY3Rpb24oZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LCBhY3Rpb25zLCBhZGRpdGlvbmFsU2V0dGluZ3MpLFxuXHRcdFx0XHRpc1Zpc2libGU6IGlzVmlzaWJsZVxuXHRcdFx0fTtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0OlxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0aWQ6IGdldEZvcm1JRChmYWNldERlZmluaXRpb24pLFxuXHRcdFx0XHR1c2VGb3JtQ29udGFpbmVyTGFiZWxzOiBmYWxzZSxcblx0XHRcdFx0aGFzRmFjZXRzTm90UGFydE9mUHJldmlldzogZmFjZXREZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uUGFydE9mUHJldmlldz8udmFsdWVPZigpID09PSBmYWxzZSxcblx0XHRcdFx0Zm9ybUNvbnRhaW5lcnM6IFtnZXRGb3JtQ29udGFpbmVyKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCwgYWN0aW9ucywgYWRkaXRpb25hbFNldHRpbmdzKV0sXG5cdFx0XHRcdGlzVmlzaWJsZTogaXNWaXNpYmxlXG5cdFx0XHR9O1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY3JlYXRlIGZvcm0gYmFzZWQgb24gUmVmZXJlbmNlVVJMRmFjZXRcIik7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
@@ -24,6 +24,7 @@ import { compileExpression, equal, getExpressionFromAnnotation, ifElse, not, pat
24
24
  import type { PageContextPathTarget } from "sap/fe/core/converters/TemplateConverter";
25
25
  import { getSemanticObjectPath } from "sap/fe/core/converters/annotations/DataField";
26
26
  import type { BaseAction } from "sap/fe/core/converters/controls/Common/Action";
27
+ import { addSeparators } from "sap/fe/core/converters/controls/Common/Action";
27
28
  import { isNavigationProperty, isSingleton } from "sap/fe/core/helpers/TypeGuards";
28
29
  import { getTargetEntitySetPath, getTargetObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
29
30
  import { createIdForAnnotation } from "../../../helpers/StableIdHelper";
@@ -288,6 +289,12 @@ export function getFormElementsFromManifest(
288
289
  }),
289
290
  ...(manifestFormContainer.fields[fieldId].semanticObject !== undefined && {
290
291
  semanticObject: manifestFormContainer.fields[fieldId].semanticObject
292
+ }),
293
+ ...(manifestFormContainer.fields[fieldId].visible !== undefined && {
294
+ visible:
295
+ typeof manifestFormContainer.fields[fieldId].visible === "boolean"
296
+ ? compileExpression(manifestFormContainer.fields[fieldId].visible as boolean)
297
+ : (manifestFormContainer.fields[fieldId].visible as CompiledBindingToolkitExpression)
291
298
  })
292
299
  };
293
300
  });
@@ -321,7 +328,12 @@ export function getFormContainer(
321
328
  const aFormElements = insertCustomElements(
322
329
  getFormElementsFromAnnotations(facetDefinition, converterContext),
323
330
  getFormElementsFromManifest(facetDefinition, converterContext),
324
- { formatOptions: OverrideType.overwrite, readOnly: OverrideType.overwrite, semanticObject: OverrideType.overwrite }
331
+ {
332
+ formatOptions: OverrideType.overwrite,
333
+ readOnly: OverrideType.overwrite,
334
+ semanticObject: OverrideType.overwrite,
335
+ visible: OverrideType.overwrite
336
+ }
325
337
  );
326
338
 
327
339
  actions = actions !== undefined ? actions.filter((action) => action.facetName == facetDefinition.fullyQualifiedName) : [];
@@ -354,6 +366,16 @@ export function getFormContainer(
354
366
  }
355
367
  }
356
368
 
369
+ // Add separators based on overflowGroups configuration from manifest
370
+ if (actions) {
371
+ const manifestWrapper = converterContext.getManifestWrapper();
372
+ const formManifestConfig = manifestWrapper.getFormContainer(facetDefinition.Target.value);
373
+ const overflowGroupsConfig = formManifestConfig?.overflowGroups;
374
+ if (overflowGroupsConfig) {
375
+ actions = addSeparators(actions, overflowGroupsConfig);
376
+ }
377
+ }
378
+
357
379
  return {
358
380
  id: sFormContainerId,
359
381
  formElements: aFormElements,