@sapui5/sap.fe.core 1.134.0 → 1.136.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 (395) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +6 -62
  4. package/src/sap/fe/core/ActionRuntime.ts +14 -65
  5. package/src/sap/fe/core/AppComponent.js +10 -2
  6. package/src/sap/fe/core/AppComponent.ts +6 -0
  7. package/src/sap/fe/core/AppStateHandler.js +9 -7
  8. package/src/sap/fe/core/AppStateHandler.ts +7 -5
  9. package/src/sap/fe/core/BaseController.js +1 -1
  10. package/src/sap/fe/core/CommonUtils.js +8 -4
  11. package/src/sap/fe/core/CommonUtils.ts +19 -4
  12. package/src/sap/fe/core/ExtensionAPI.js +7 -5
  13. package/src/sap/fe/core/ExtensionAPI.ts +5 -3
  14. package/src/sap/fe/core/IRowBindingInterface.js +1 -1
  15. package/src/sap/fe/core/InsightsFormattersExtension.js +1 -1
  16. package/src/sap/fe/core/PageController.js +36 -6
  17. package/src/sap/fe/core/PageController.ts +30 -0
  18. package/src/sap/fe/core/ResourceModel.js +1 -1
  19. package/src/sap/fe/core/ReuseComponent.js +1 -1
  20. package/src/sap/fe/core/TemplateComponent.js +1 -1
  21. package/src/sap/fe/core/TemplateModel.js +1 -1
  22. package/src/sap/fe/core/UIProvider.js +2 -2
  23. package/src/sap/fe/core/UIProvider.ts +3 -32
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +34 -16
  25. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +39 -18
  26. package/src/sap/fe/core/buildingBlocks/IBuildingBlockOwnerComponent.js +1 -1
  27. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +1 -1
  28. package/src/sap/fe/core/buildingBlocks/templating/AttributeModel.js +1 -1
  29. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockFormatter.js +1 -1
  30. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +2 -2
  31. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +1 -0
  32. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +7 -7
  33. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +9 -9
  34. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +1 -1
  35. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +5 -3
  36. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +3 -1
  37. package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
  38. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +15 -15
  39. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +19 -19
  40. package/src/sap/fe/core/controllerextensions/ContextSharing.js +1 -1
  41. package/src/sap/fe/core/controllerextensions/EditFlow.js +74 -93
  42. package/src/sap/fe/core/controllerextensions/EditFlow.ts +89 -108
  43. package/src/sap/fe/core/controllerextensions/Feedback.js +1 -1
  44. package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +355 -0
  45. package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +387 -0
  46. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +1 -1
  47. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +1 -1
  48. package/src/sap/fe/core/controllerextensions/InternalRouting.js +36 -11
  49. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +36 -10
  50. package/src/sap/fe/core/controllerextensions/KPIManagement.js +1 -1
  51. package/src/sap/fe/core/controllerextensions/MessageHandler.js +36 -6
  52. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +41 -1
  53. package/src/sap/fe/core/controllerextensions/PageReady.js +5 -2
  54. package/src/sap/fe/core/controllerextensions/PageReady.ts +3 -0
  55. package/src/sap/fe/core/controllerextensions/Paginator.js +1 -1
  56. package/src/sap/fe/core/controllerextensions/Placeholder.js +1 -1
  57. package/src/sap/fe/core/controllerextensions/Recommendations.js +1 -1
  58. package/src/sap/fe/core/controllerextensions/Routing.js +9 -9
  59. package/src/sap/fe/core/controllerextensions/Routing.ts +4 -4
  60. package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
  61. package/src/sap/fe/core/controllerextensions/Share.js +1 -1
  62. package/src/sap/fe/core/controllerextensions/SideEffects.js +13 -6
  63. package/src/sap/fe/core/controllerextensions/SideEffects.ts +13 -6
  64. package/src/sap/fe/core/controllerextensions/Telemetry.js +1 -1
  65. package/src/sap/fe/core/controllerextensions/ViewState.js +1 -1
  66. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +14 -11
  67. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +20 -14
  68. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +4 -12
  69. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +2 -10
  70. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +12 -2
  71. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +12 -0
  72. package/src/sap/fe/core/controllerextensions/dialog/ODataStrictDialog.js +1 -1
  73. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
  74. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +111 -89
  75. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +140 -105
  76. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +137 -79
  77. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +133 -120
  78. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +3 -3
  79. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +4 -1
  80. package/src/sap/fe/core/controllerextensions/editFlow/editFlowConstants.js +1 -1
  81. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +26 -17
  82. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +32 -23
  83. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +3 -3
  84. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
  85. package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +103 -23
  86. package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +144 -53
  87. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.js +29 -11
  88. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.ts +39 -15
  89. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +24 -22
  90. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +28 -26
  91. package/src/sap/fe/core/controllerextensions/editFlow/operations/actionHelper.js +1 -1
  92. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +6 -572
  93. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +25 -873
  94. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1 -1
  95. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +98 -56
  96. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +102 -80
  97. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +5 -3
  98. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +7 -4
  99. package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +1 -1
  100. package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +1 -1
  101. package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +1 -1
  102. package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js +1 -1
  103. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +1 -1
  104. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +1 -1
  105. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +1 -1
  106. package/src/sap/fe/core/controls/Any.js +1 -1
  107. package/src/sap/fe/core/controls/AnyElement.js +1 -1
  108. package/src/sap/fe/core/controls/CommandExecution.js +1 -1
  109. package/src/sap/fe/core/controls/ComponentLoader.js +1 -1
  110. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +3 -3
  111. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +8 -1
  112. package/src/sap/fe/core/controls/DataWatcher.js +4 -3
  113. package/src/sap/fe/core/controls/DataWatcher.tsx +4 -1
  114. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
  115. package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +10 -4
  116. package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +13 -2
  117. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -1
  118. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +1 -1
  119. package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.js +68 -0
  120. package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.tsx +52 -0
  121. package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.js +144 -0
  122. package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.tsx +128 -0
  123. package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.js +53 -0
  124. package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.tsx +39 -0
  125. package/src/sap/fe/core/converters/ConverterContext.js +1 -1
  126. package/src/sap/fe/core/converters/ManifestSettings.js +3 -2
  127. package/src/sap/fe/core/converters/ManifestSettings.ts +42 -20
  128. package/src/sap/fe/core/converters/ManifestWrapper.js +8 -2
  129. package/src/sap/fe/core/converters/ManifestWrapper.ts +8 -0
  130. package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
  131. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  132. package/src/sap/fe/core/converters/annotations/DataField.js +2 -2
  133. package/src/sap/fe/core/converters/annotations/DataField.ts +2 -1
  134. package/src/sap/fe/core/converters/controls/Common/Action.js +55 -6
  135. package/src/sap/fe/core/converters/controls/Common/Action.ts +59 -3
  136. package/src/sap/fe/core/converters/controls/Common/Chart.js +45 -6
  137. package/src/sap/fe/core/converters/controls/Common/Chart.ts +60 -9
  138. package/src/sap/fe/core/converters/controls/Common/Criticality.js +1 -1
  139. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -1
  140. package/src/sap/fe/core/converters/controls/Common/Form.js +21 -5
  141. package/src/sap/fe/core/converters/controls/Common/Form.ts +25 -5
  142. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  143. package/src/sap/fe/core/converters/controls/Common/Table.js +89 -1686
  144. package/src/sap/fe/core/converters/controls/Common/Table.ts +254 -2513
  145. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +1701 -0
  146. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +2377 -0
  147. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +64 -15
  148. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +76 -14
  149. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -36
  150. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +8 -46
  151. package/src/sap/fe/core/converters/controls/ListReport/FilterField.js +106 -0
  152. package/src/sap/fe/core/converters/controls/ListReport/FilterField.ts +129 -0
  153. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +10 -5
  154. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +8 -3
  155. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
  156. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +5 -3
  157. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +11 -4
  158. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +7 -2
  159. package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
  160. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +1 -1
  161. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +1 -1
  162. package/src/sap/fe/core/converters/helpers/ID.js +1 -1
  163. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +1 -1
  164. package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
  165. package/src/sap/fe/core/converters/helpers/Key.js +1 -1
  166. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  167. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
  168. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +30 -8
  169. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +40 -16
  170. package/src/sap/fe/core/converters/templates/ListReportConverter.js +5 -3
  171. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +5 -1
  172. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
  173. package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +184 -0
  174. package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +240 -0
  175. package/src/sap/fe/core/designtime/AppComponent.designtime.js +1 -1
  176. package/src/sap/fe/core/designtime/messagebundle.properties +11 -0
  177. package/src/sap/fe/core/designtime/messagebundle_ar.properties +7 -0
  178. package/src/sap/fe/core/designtime/messagebundle_bg.properties +7 -0
  179. package/src/sap/fe/core/designtime/messagebundle_ca.properties +7 -0
  180. package/src/sap/fe/core/designtime/messagebundle_cnr.properties +7 -0
  181. package/src/sap/fe/core/designtime/messagebundle_cs.properties +7 -0
  182. package/src/sap/fe/core/designtime/messagebundle_cy.properties +7 -0
  183. package/src/sap/fe/core/designtime/messagebundle_da.properties +7 -0
  184. package/src/sap/fe/core/designtime/messagebundle_de.properties +7 -0
  185. package/src/sap/fe/core/designtime/messagebundle_el.properties +7 -0
  186. package/src/sap/fe/core/designtime/messagebundle_en.properties +7 -0
  187. package/src/sap/fe/core/designtime/messagebundle_en_GB.properties +7 -0
  188. package/src/sap/fe/core/designtime/messagebundle_es.properties +7 -0
  189. package/src/sap/fe/core/designtime/messagebundle_es_MX.properties +7 -0
  190. package/src/sap/fe/core/designtime/messagebundle_et.properties +7 -0
  191. package/src/sap/fe/core/designtime/messagebundle_fi.properties +7 -0
  192. package/src/sap/fe/core/designtime/messagebundle_fr.properties +7 -0
  193. package/src/sap/fe/core/designtime/messagebundle_fr_CA.properties +7 -0
  194. package/src/sap/fe/core/designtime/messagebundle_hi.properties +7 -0
  195. package/src/sap/fe/core/designtime/messagebundle_hr.properties +7 -0
  196. package/src/sap/fe/core/designtime/messagebundle_hu.properties +7 -0
  197. package/src/sap/fe/core/designtime/messagebundle_id.properties +7 -0
  198. package/src/sap/fe/core/designtime/messagebundle_it.properties +7 -0
  199. package/src/sap/fe/core/designtime/messagebundle_iw.properties +7 -0
  200. package/src/sap/fe/core/designtime/messagebundle_ja.properties +7 -0
  201. package/src/sap/fe/core/designtime/messagebundle_kk.properties +7 -0
  202. package/src/sap/fe/core/designtime/messagebundle_ko.properties +7 -0
  203. package/src/sap/fe/core/designtime/messagebundle_lt.properties +7 -0
  204. package/src/sap/fe/core/designtime/messagebundle_lv.properties +7 -0
  205. package/src/sap/fe/core/designtime/messagebundle_mk.properties +7 -0
  206. package/src/sap/fe/core/designtime/messagebundle_ms.properties +7 -0
  207. package/src/sap/fe/core/designtime/messagebundle_nl.properties +7 -0
  208. package/src/sap/fe/core/designtime/messagebundle_no.properties +7 -0
  209. package/src/sap/fe/core/designtime/messagebundle_pl.properties +7 -0
  210. package/src/sap/fe/core/designtime/messagebundle_pt.properties +7 -0
  211. package/src/sap/fe/core/designtime/messagebundle_pt_PT.properties +7 -0
  212. package/src/sap/fe/core/designtime/messagebundle_ro.properties +7 -0
  213. package/src/sap/fe/core/designtime/messagebundle_ru.properties +7 -0
  214. package/src/sap/fe/core/designtime/messagebundle_sh.properties +7 -0
  215. package/src/sap/fe/core/designtime/messagebundle_sk.properties +7 -0
  216. package/src/sap/fe/core/designtime/messagebundle_sl.properties +7 -0
  217. package/src/sap/fe/core/designtime/messagebundle_sr.properties +7 -0
  218. package/src/sap/fe/core/designtime/messagebundle_sv.properties +7 -0
  219. package/src/sap/fe/core/designtime/messagebundle_th.properties +7 -0
  220. package/src/sap/fe/core/designtime/messagebundle_tr.properties +7 -0
  221. package/src/sap/fe/core/designtime/messagebundle_uk.properties +7 -0
  222. package/src/sap/fe/core/designtime/messagebundle_vi.properties +7 -0
  223. package/src/sap/fe/core/designtime/messagebundle_zh_CN.properties +7 -0
  224. package/src/sap/fe/core/designtime/messagebundle_zh_TW.properties +7 -0
  225. package/src/sap/fe/core/formatters/CollaborationFormatter.js +1 -1
  226. package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
  227. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
  228. package/src/sap/fe/core/formatters/FiscalFormat.js +1 -1
  229. package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
  230. package/src/sap/fe/core/formatters/StandardFormatter.js +1 -1
  231. package/src/sap/fe/core/formatters/ValueFormatter.js +27 -12
  232. package/src/sap/fe/core/formatters/ValueFormatter.ts +25 -11
  233. package/src/sap/fe/core/fpm/Component.js +1 -1
  234. package/src/sap/fe/core/fpm/manifest.json +1 -1
  235. package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.js +1 -1
  236. package/src/sap/fe/core/helpers/AppStartupHelper.js +25 -4
  237. package/src/sap/fe/core/helpers/AppStartupHelper.ts +28 -2
  238. package/src/sap/fe/core/helpers/BindingHelper.js +4 -3
  239. package/src/sap/fe/core/helpers/BindingHelper.ts +2 -1
  240. package/src/sap/fe/core/helpers/BindingToolkitEvaluator.js +1 -1
  241. package/src/sap/fe/core/helpers/DeleteHelper.js +6 -12
  242. package/src/sap/fe/core/helpers/DeleteHelper.ts +4 -9
  243. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -1
  244. package/src/sap/fe/core/helpers/EditState.js +1 -1
  245. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -1
  246. package/src/sap/fe/core/helpers/FPMHelper.js +9 -3
  247. package/src/sap/fe/core/helpers/FPMHelper.ts +13 -1
  248. package/src/sap/fe/core/helpers/HTTP503Handler.js +1 -1
  249. package/src/sap/fe/core/helpers/KeepAliveHelper.js +1 -1
  250. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +1 -1
  251. package/src/sap/fe/core/helpers/LoaderUtils.js +1 -1
  252. package/src/sap/fe/core/helpers/ManifestHelper.js +1 -1
  253. package/src/sap/fe/core/helpers/MessageStrip.js +1 -1
  254. package/src/sap/fe/core/helpers/MetaModelFunction.js +1 -1
  255. package/src/sap/fe/core/helpers/MetaPath.js +1 -1
  256. package/src/sap/fe/core/helpers/ModelHelper.js +15 -5
  257. package/src/sap/fe/core/helpers/ModelHelper.ts +15 -4
  258. package/src/sap/fe/core/helpers/PasteHelper.js +39 -40
  259. package/src/sap/fe/core/helpers/PasteHelper.ts +49 -51
  260. package/src/sap/fe/core/helpers/PromiseKeeper.js +1 -1
  261. package/src/sap/fe/core/helpers/RecommendationHelper.js +1 -1
  262. package/src/sap/fe/core/helpers/ResourceModelHelper.js +1 -1
  263. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
  264. package/src/sap/fe/core/helpers/SizeHelper.js +1 -1
  265. package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
  266. package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +1 -1
  267. package/src/sap/fe/core/helpers/Synchronization.js +1 -1
  268. package/src/sap/fe/core/helpers/TitleHelper.js +1 -1
  269. package/src/sap/fe/core/helpers/ToES6Promise.js +1 -1
  270. package/src/sap/fe/core/helpers/TypeGuards.js +1 -1
  271. package/src/sap/fe/core/helpers/WebSocket.js +11 -2
  272. package/src/sap/fe/core/helpers/WebSocket.ts +8 -0
  273. package/src/sap/fe/core/library.js +16 -4
  274. package/src/sap/fe/core/library.support.js +1 -1
  275. package/src/sap/fe/core/library.ts +1 -0
  276. package/src/sap/fe/core/manifestMerger/AddNewPage.js +1 -1
  277. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  278. package/src/sap/fe/core/messagebundle.properties +41 -2
  279. package/src/sap/fe/core/messagebundle_ar.properties +25 -4
  280. package/src/sap/fe/core/messagebundle_bg.properties +25 -4
  281. package/src/sap/fe/core/messagebundle_ca.properties +24 -3
  282. package/src/sap/fe/core/messagebundle_cnr.properties +25 -4
  283. package/src/sap/fe/core/messagebundle_cs.properties +23 -2
  284. package/src/sap/fe/core/messagebundle_cy.properties +24 -3
  285. package/src/sap/fe/core/messagebundle_da.properties +25 -4
  286. package/src/sap/fe/core/messagebundle_de.properties +28 -7
  287. package/src/sap/fe/core/messagebundle_el.properties +23 -2
  288. package/src/sap/fe/core/messagebundle_en.properties +25 -4
  289. package/src/sap/fe/core/messagebundle_en_GB.properties +25 -4
  290. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +26 -5
  291. package/src/sap/fe/core/messagebundle_es.properties +23 -2
  292. package/src/sap/fe/core/messagebundle_es_MX.properties +23 -2
  293. package/src/sap/fe/core/messagebundle_et.properties +23 -2
  294. package/src/sap/fe/core/messagebundle_fi.properties +23 -2
  295. package/src/sap/fe/core/messagebundle_fr.properties +26 -5
  296. package/src/sap/fe/core/messagebundle_fr_CA.properties +23 -2
  297. package/src/sap/fe/core/messagebundle_hi.properties +24 -3
  298. package/src/sap/fe/core/messagebundle_hr.properties +27 -6
  299. package/src/sap/fe/core/messagebundle_hu.properties +23 -2
  300. package/src/sap/fe/core/messagebundle_id.properties +23 -2
  301. package/src/sap/fe/core/messagebundle_it.properties +25 -4
  302. package/src/sap/fe/core/messagebundle_iw.properties +24 -3
  303. package/src/sap/fe/core/messagebundle_ja.properties +24 -3
  304. package/src/sap/fe/core/messagebundle_kk.properties +23 -2
  305. package/src/sap/fe/core/messagebundle_ko.properties +25 -4
  306. package/src/sap/fe/core/messagebundle_lt.properties +23 -2
  307. package/src/sap/fe/core/messagebundle_lv.properties +25 -4
  308. package/src/sap/fe/core/messagebundle_mk.properties +23 -2
  309. package/src/sap/fe/core/messagebundle_ms.properties +24 -3
  310. package/src/sap/fe/core/messagebundle_nl.properties +23 -2
  311. package/src/sap/fe/core/messagebundle_no.properties +23 -2
  312. package/src/sap/fe/core/messagebundle_pl.properties +25 -4
  313. package/src/sap/fe/core/messagebundle_pt.properties +25 -4
  314. package/src/sap/fe/core/messagebundle_pt_PT.properties +24 -3
  315. package/src/sap/fe/core/messagebundle_ro.properties +25 -4
  316. package/src/sap/fe/core/messagebundle_ru.properties +24 -3
  317. package/src/sap/fe/core/messagebundle_sh.properties +25 -4
  318. package/src/sap/fe/core/messagebundle_sk.properties +24 -3
  319. package/src/sap/fe/core/messagebundle_sl.properties +28 -7
  320. package/src/sap/fe/core/messagebundle_sr.properties +25 -4
  321. package/src/sap/fe/core/messagebundle_sv.properties +23 -2
  322. package/src/sap/fe/core/messagebundle_th.properties +25 -4
  323. package/src/sap/fe/core/messagebundle_tr.properties +23 -2
  324. package/src/sap/fe/core/messagebundle_uk.properties +25 -4
  325. package/src/sap/fe/core/messagebundle_vi.properties +25 -4
  326. package/src/sap/fe/core/messagebundle_zh_CN.properties +26 -5
  327. package/src/sap/fe/core/messagebundle_zh_TW.properties +24 -3
  328. package/src/sap/fe/core/rootView/Fcl.controller.js +11 -7
  329. package/src/sap/fe/core/rootView/Fcl.controller.ts +16 -7
  330. package/src/sap/fe/core/rootView/NavContainer.controller.js +3 -3
  331. package/src/sap/fe/core/rootView/NavContainer.controller.ts +1 -1
  332. package/src/sap/fe/core/rootView/RootViewBaseController.js +87 -35
  333. package/src/sap/fe/core/rootView/RootViewBaseController.ts +113 -57
  334. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -1
  335. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +1 -1
  336. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +29 -13
  337. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +27 -13
  338. package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +1 -1
  339. package/src/sap/fe/core/services/ContextSharingServiceFactory.js +1 -1
  340. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +8 -2
  341. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +6 -0
  342. package/src/sap/fe/core/services/InlineEditServiceFactory.js +11 -5
  343. package/src/sap/fe/core/services/InlineEditServiceFactory.ts +9 -3
  344. package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
  345. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +1 -1
  346. package/src/sap/fe/core/services/RoutingServiceFactory.js +14 -7
  347. package/src/sap/fe/core/services/RoutingServiceFactory.ts +11 -5
  348. package/src/sap/fe/core/services/ShellServicesFactory.js +5 -4
  349. package/src/sap/fe/core/services/ShellServicesFactory.ts +5 -3
  350. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +28 -4
  351. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +32 -3
  352. package/src/sap/fe/core/services/TelemetryServiceFactory.js +1 -1
  353. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
  354. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +1 -1
  355. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +1 -1
  356. package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.js +1 -1
  357. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +1 -1
  358. package/src/sap/fe/core/services/view/TemplatingErrorPage.view.xml +1 -1
  359. package/src/sap/fe/core/support/AnnotationIssue.support.js +1 -1
  360. package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +1 -1
  361. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +1 -1
  362. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  363. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  364. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +1 -1
  365. package/src/sap/fe/core/templating/ActionHelper.js +1 -1
  366. package/src/sap/fe/core/templating/CommonFormatters.js +1 -1
  367. package/src/sap/fe/core/templating/CriticalityFormatters.js +1 -1
  368. package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -1
  369. package/src/sap/fe/core/templating/DataModelPathHelper.js +1 -1
  370. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  371. package/src/sap/fe/core/templating/EntitySetHelper.js +199 -59
  372. package/src/sap/fe/core/templating/EntitySetHelper.ts +221 -61
  373. package/src/sap/fe/core/templating/EntityTypeHelper.js +1 -1
  374. package/src/sap/fe/core/templating/FieldControlHelper.js +1 -1
  375. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  376. package/src/sap/fe/core/templating/PropertyFormatters.js +1 -1
  377. package/src/sap/fe/core/templating/PropertyHelper.js +1 -1
  378. package/src/sap/fe/core/templating/SemanticObjectHelper.js +8 -10
  379. package/src/sap/fe/core/templating/SemanticObjectHelper.ts +11 -10
  380. package/src/sap/fe/core/templating/UIFormatters.js +5 -2
  381. package/src/sap/fe/core/templating/UIFormatters.ts +3 -0
  382. package/src/sap/fe/core/type/Date.js +1 -1
  383. package/src/sap/fe/core/type/DateTimeWithTimezone.js +1 -1
  384. package/src/sap/fe/core/type/EDM.js +1 -1
  385. package/src/sap/fe/core/type/Email.js +1 -1
  386. package/src/sap/fe/core/type/FiscalDate.js +1 -1
  387. package/src/sap/fe/core/type/InputMask.js +1 -1
  388. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.js +0 -288
  389. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.tsx +0 -208
  390. package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.js +0 -404
  391. package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.ts +0 -502
  392. package/src/sap/fe/core/designtime/TextArrangementChangeAction.js +0 -100
  393. package/src/sap/fe/core/designtime/TextArrangementChangeAction.ts +0 -134
  394. package/src/sap/fe/core/operationsHelper.js +0 -192
  395. package/src/sap/fe/core/operationsHelper.ts +0 -277
@@ -3,8 +3,11 @@ import type { FormElementType } from "sap/fe/core/converters/controls/Common/For
3
3
  import type { AnalyticalConfiguration } from "sap/fe/core/converters/controls/Common/Table";
4
4
  import type { FlexSettings, HeaderFacetType } from "sap/fe/core/converters/controls/ObjectPage/HeaderFacet";
5
5
  import type { FieldEditStyle } from "sap/fe/macros/field/FieldFormatOptions";
6
+ import type Control from "sap/ui/core/Control";
6
7
  import type { ManifestContent } from "sap/ui/core/Manifest";
7
- import type { ColumnExportSettings, TableRowCountMode, TableType } from "./controls/Common/Table";
8
+ import type FormContainer from "sap/ui/layout/form/FormContainer";
9
+ import type { TableRowCountMode, TableType } from "./controls/Common/Table";
10
+ import type { ColumnExportSettings } from "./controls/Common/table/Columns";
8
11
  import type { ConfigurableRecord, Position, Positionable } from "./helpers/ConfigurableObject";
9
12
 
10
13
  // ENUMS
@@ -150,6 +153,10 @@ export type BaseManifestSettings = {
150
153
  header?: {
151
154
  facets?: ConfigurableRecord<ManifestHeaderFacet>;
152
155
  actions?: ConfigurableRecord<ManifestAction>;
156
+ customHeader?: {
157
+ expandedHeaderFragment: string;
158
+ collapsedHeaderFragment: string;
159
+ };
153
160
  };
154
161
  footer?: {
155
162
  actions?: ConfigurableRecord<ManifestAction>;
@@ -212,13 +219,14 @@ type FacetsControlConfiguration = {
212
219
  sections: ConfigurableRecord<ManifestSection>;
213
220
  };
214
221
 
215
- type ManifestFormElement = Positionable & {
216
- type: FormElementType;
217
- template: string;
218
- label?: string;
219
- property?: string;
220
- formatOptions?: FormatOptionsType;
221
- };
222
+ type ManifestFormElement = Positionable &
223
+ FieldManifestOverrides & {
224
+ type: FormElementType;
225
+ template: string;
226
+ label?: string;
227
+ property?: string;
228
+ formatOptions?: FormatOptionsType;
229
+ };
222
230
 
223
231
  export type FormManifestConfiguration = {
224
232
  fields: ConfigurableRecord<ManifestFormElement>;
@@ -422,7 +430,10 @@ export type ChartPersonalizationManifestSettings =
422
430
 
423
431
  export type ChartManifestConfiguration = {
424
432
  chartSettings?: {
425
- personalization: ChartPersonalizationManifestSettings;
433
+ personalization?: ChartPersonalizationManifestSettings;
434
+ header?: string;
435
+ headerVisible?: boolean;
436
+ selectionMode?: "Multiple" | "None" | "Single";
426
437
  };
427
438
  actions?: Record<string, ManifestAction>;
428
439
  enableAddCardToInsights?: boolean;
@@ -455,6 +466,7 @@ export type ManifestAction = {
455
466
  determining?: boolean;
456
467
  facetName?: string;
457
468
  command?: string | undefined;
469
+ isAIOperation?: boolean | undefined;
458
470
  };
459
471
 
460
472
  export type BaseCustomDefinedTableColumn = Positionable & {
@@ -472,7 +484,7 @@ export type BaseCustomDefinedTableColumn = Positionable & {
472
484
  export type CustomDefinedTableColumn = BaseCustomDefinedTableColumn & {
473
485
  type?: string;
474
486
  header: string;
475
- template: string;
487
+ template: string | Control;
476
488
  properties?: string[];
477
489
  };
478
490
 
@@ -489,6 +501,11 @@ export type TableColumnSettings = {
489
501
  showMicroChartLabel?: boolean;
490
502
  };
491
503
 
504
+ export type FieldManifestOverrides = {
505
+ readOnly?: boolean;
506
+ semanticObject?: string;
507
+ };
508
+
492
509
  /**
493
510
  * Collection of format options for multiline text fields on a form or in a table
494
511
  */
@@ -507,6 +524,12 @@ export type FormatOptionsType = {
507
524
  radioButtonsHorizontalLayout?: boolean;
508
525
  };
509
526
 
527
+ export type QuickVariantSelectionConfiguration = {
528
+ paths: { annotationPath: string }[];
529
+ hideTableTitle?: boolean;
530
+ showCounts?: boolean;
531
+ };
532
+
510
533
  export type TableManifestConfiguration = {
511
534
  tableSettings?: TableManifestSettingsConfiguration;
512
535
  actions?: Record<string, ManifestAction>;
@@ -525,10 +548,11 @@ export type TablePersonalizationConfiguration =
525
548
  export type MassEditConfiguration =
526
549
  | boolean
527
550
  | Partial<{
528
- customFragment: string;
551
+ customFragment: string | FormContainer;
529
552
  visibleFields: string;
530
553
  ignoredFields: string;
531
554
  operationGroupingMode: OperationGroupingMode;
555
+ fromInline: boolean;
532
556
  }>;
533
557
 
534
558
  export type TableManifestSettingsConfiguration = {
@@ -549,20 +573,14 @@ export type TableManifestSettingsConfiguration = {
549
573
  outbound?: string;
550
574
  };
551
575
  isNodeMovable?: string;
576
+ isNodeCopyable?: string;
552
577
  isMoveToPositionAllowed?: string;
578
+ isCopyToPositionAllowed?: string;
553
579
  enablePastingOfComputedProperties?: boolean;
554
580
  enableExport?: boolean;
555
581
  frozenColumnCount?: number;
556
582
  widthIncludingColumnHeader?: boolean;
557
- quickVariantSelection?: {
558
- paths: [
559
- {
560
- annotationPath: string;
561
- }
562
- ];
563
- hideTableTitle?: boolean;
564
- showCounts?: boolean;
565
- };
583
+ quickVariantSelection?: QuickVariantSelectionConfiguration;
566
584
  personalization?: TablePersonalizationConfiguration;
567
585
  /**
568
586
  * Defines how many items in a table can be selected. You have the following options:
@@ -579,7 +597,11 @@ export type TableManifestSettingsConfiguration = {
579
597
  condensedTableLayout?: boolean;
580
598
  selectAll?: boolean;
581
599
  selectionLimit?: number;
600
+ ignoredFields?: string;
601
+ isSearchable?: boolean;
582
602
  enablePaste?: boolean;
603
+ rowPress?: string;
604
+ readOnly?: boolean;
583
605
  disableCopyToClipboard?: boolean;
584
606
  enableFullScreen?: boolean;
585
607
  enableMassEdit?: MassEditConfiguration;
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
- * (c) Copyright 2009-2024 SAP SE. All rights reserved
3
+ * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
5
  sap.ui.define(["sap/base/util/merge", "sap/fe/core/converters/ManifestSettings", "sap/ui/Device"], function (merge, ManifestSettings, Device) {
6
6
  "use strict";
@@ -69,6 +69,12 @@ sap.ui.define(["sap/base/util/merge", "sap/fe/core/converters/ManifestSettings",
69
69
  };
70
70
  _proto.useHiddenFilterBar = function useHiddenFilterBar() {
71
71
  return !!this.oManifestSettings?.useHiddenFilterBar;
72
+ };
73
+ _proto.getCollapsedHeaderFragment = function getCollapsedHeaderFragment() {
74
+ return this.oManifestSettings?.content?.header?.customHeader?.collapsedHeaderFragment;
75
+ };
76
+ _proto.getExpandedHeaderFragment = function getExpandedHeaderFragment() {
77
+ return this.oManifestSettings?.content?.header?.customHeader?.expandedHeaderFragment;
72
78
  }
73
79
 
74
80
  /**
@@ -430,4 +436,4 @@ sap.ui.define(["sap/base/util/merge", "sap/fe/core/converters/ManifestSettings",
430
436
  }();
431
437
  return ManifestWrapper;
432
438
  }, false);
433
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbnN1cmVBbm5vdGF0aW9uUGF0aCIsIm9iaiIsInByb3BlcnR5IiwicHJvcGVydHlWYWx1ZSIsIkFycmF5IiwiaXNBcnJheSIsImZvckVhY2giLCJlbnRyeSIsImluY2x1ZGVzIiwiTWFuaWZlc3RXcmFwcGVyIiwib01hbmlmZXN0U2V0dGluZ3MiLCJhcHBDb21wb25lbnQiLCJ2aWV3cyIsInBhdGhzIiwicGF0aCIsImNvbnRyb2xDb25maWd1cmF0aW9uIiwiT2JqZWN0IiwidmFsdWVzIiwicXVpY2tWYXJpYW50U2VsZWN0aW9uIiwidGFibGVTZXR0aW5ncyIsIl9wcm90byIsInByb3RvdHlwZSIsImdldFNhcEZlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwic2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJnZXRUZW1wbGF0ZVR5cGUiLCJjb252ZXJ0ZXJUeXBlIiwiaXNGaWx0ZXJCYXJIaWRkZW4iLCJoaWRlRmlsdGVyQmFyIiwidXNlSGlkZGVuRmlsdGVyQmFyIiwiaXNEZXNrdG9wIiwiaXNQaG9uZSIsImdldEZvcm1Db250YWluZXIiLCJmYWNldFRhcmdldCIsImdldEhlYWRlckZhY2V0cyIsIm1lcmdlIiwiZmFjZXRzIiwiY29udGVudCIsImhlYWRlciIsImdldEhlYWRlckFjdGlvbnMiLCJhY3Rpb25zIiwiZ2V0Rm9vdGVyQWN0aW9ucyIsImZvb3RlciIsImdldFZhcmlhbnRNYW5hZ2VtZW50IiwidmFyaWFudE1hbmFnZW1lbnQiLCJWYXJpYW50TWFuYWdlbWVudFR5cGUiLCJOb25lIiwiZ2V0RGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGgiLCJkZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCIsImdldENvbnRyb2xDb25maWd1cmF0aW9uIiwic0Fubm90YXRpb25QYXRoIiwiZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24iLCJuYXZpZ2F0aW9uT3JDb2xsZWN0aW9uTmFtZSIsIm5hdmlnYXRpb24iLCJnZXRWaWV3TGV2ZWwiLCJ2aWV3TGV2ZWwiLCJnZXRDb250ZW50RGVuc2l0aWVzIiwiY29udGVudERlbnNpdGllcyIsImNvenkiLCJjb21wYWN0IiwiaXNGY2xFbmFibGVkIiwiZmNsRW5hYmxlZCIsImlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50IiwibWFuaWZlc3RDb250ZW50RGVuc2l0eSIsInNoZWxsQ29udGVudERlbnNpdHkiLCJpc1NtYWxsRGV2aWNlIiwiRGV2aWNlIiwic3lzdGVtIiwiZGVza3RvcCIsInJlc2l6ZSIsIndpZHRoIiwiaXNDb21wYWN0VHlwZSIsImdldE91dGJvdW5kTmF2aWdhdGlvbkVudHJpZXMiLCJnZXRNYW5pZmVzdEVudHJ5IiwiY3Jvc3NOYXZpZ2F0aW9uIiwib3V0Ym91bmRzIiwiZ2V0U2VjdGlvbkxheW91dCIsInNlY3Rpb25MYXlvdXQiLCJnZXRTZWN0aW9ucyIsInNlY3Rpb25zIiwiYm9keSIsImlzSGVhZGVyRWRpdGFibGUiLCJnZXRTaG93T2JqZWN0UGFnZUhlYWRlciIsImVkaXRhYmxlSGVhZGVyQ29udGVudCIsImdldFVzZVRleHRGb3JOb0RhdGFNZXNzYWdlcyIsInVzZVRleHRGb3JOb0RhdGFNZXNzYWdlcyIsImdldFNob3dBbmNob3JCYXIiLCJhbmNob3JCYXJWaXNpYmxlIiwidW5kZWZpbmVkIiwidXNlSWNvblRhYkJhciIsInZpc2libGUiLCJnZXRFbmFibGVMYXp5TG9hZGluZyIsImVuYWJsZUxhenlMb2FkaW5nIiwiZ2V0VHJhbnNwb3J0U2VsZWN0aW9uIiwidHJhbnNwb3J0U2VsZWN0aW9uIiwiZ2V0Vmlld0NvbmZpZ3VyYXRpb24iLCJnZXRTdGlja3lNdWx0aVRhYkhlYWRlckNvbmZpZ3VyYXRpb24iLCJiU3RpY2t5TXVsdGlUYWJIZWFkZXIiLCJzdGlja3lNdWx0aVRhYkhlYWRlciIsImdldEtQSUNvbmZpZ3VyYXRpb24iLCJrZXlQZXJmb3JtYW5jZUluZGljYXRvcnMiLCJnZXRGaWx0ZXJDb25maWd1cmF0aW9uIiwiY29uZmlnUGF0aCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImhhc011bHRpcGxlRW50aXR5U2V0cyIsInZpZXdDb25maWciLCJtYW5pZmVzdEVudGl0eVNldCIsImVudGl0eVNldCIsImZpbmQiLCJ0ZW1wbGF0ZSIsImhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMiLCJwcmltYXJ5Iiwic2Vjb25kYXJ5Iiwic29tZSIsInByaW1hcnlQYXRoIiwic2Vjb25kYXJ5UGF0aCIsImdldENvbnRleHRQYXRoIiwiY29udGV4dFBhdGgiLCJpc1ZpZXdQYXRoQ29uZmlndXJhdGlvbiIsImlzQ29tYmluZWRWaWV3Q29uZmlndXJhdGlvbiIsImlzQ3VzdG9tVmlld0NvbmZpZ3VyYXRpb24iLCJtdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbiIsImdldEVudGl0eVNldCIsImhhc0lubGluZUVkaXQiLCJpbmxpbmVFZGl0IiwiZGlzYWJsZWRGaWVsZHMiLCJlbmFibGVkRmllbGRzIiwiZ2V0SW5saW5lRWRpdEVuYWJsZWRGaWVsZHMiLCJnZXRJbmxpbmVFZGl0RGlzYWJsZWRGaWVsZHMiLCJnZXRJbmxpbmVDb25uZWN0ZWRGaWVsZHMiLCJjb25uZWN0ZWRGaWVsZHMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk1hbmlmZXN0V3JhcHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7XG5cdEJhc2VNYW5pZmVzdFNldHRpbmdzLFxuXHRDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbixcblx0Q29udGVudERlbnNpdGllc1R5cGUsXG5cdENvbnRyb2xNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb24sXG5cdEZpbHRlck1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0Rm9ybU1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0S1BJQ29uZmlndXJhdGlvbixcblx0TGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MsXG5cdE1hbmlmZXN0QWN0aW9uLFxuXHRNYW5pZmVzdEhlYWRlckZhY2V0LFxuXHRNYW5pZmVzdFNlY3Rpb24sXG5cdE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uLFxuXHROYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncyxcblx0U2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uLFxuXHRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0VGVtcGxhdGVUeXBlLFxuXHRUcmFuc3BvcnRTZWxlY3Rpb25EZWZpbml0aW9uLFxuXHRWaWV3Q29uZmlndXJhdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBWYXJpYW50TWFuYWdlbWVudFR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZVJlY29yZCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgRGV2aWNlIGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0Q29udGVudCwgTWFuaWZlc3RPdXRib3VuZEVudHJ5IH0gZnJvbSBcInNhcC91aS9jb3JlL01hbmlmZXN0XCI7XG5cbmZ1bmN0aW9uIGVuc3VyZUFubm90YXRpb25QYXRoPFQgZXh0ZW5kcyBvYmplY3Q+KG9iajogVCB8IHVuZGVmaW5lZCwgcHJvcGVydHk6IGtleW9mIFQpOiB2b2lkIHtcblx0Y29uc3QgcHJvcGVydHlWYWx1ZSA9IG9iaj8uW3Byb3BlcnR5XTtcblx0aWYgKEFycmF5LmlzQXJyYXkocHJvcGVydHlWYWx1ZSkpIHtcblx0XHRwcm9wZXJ0eVZhbHVlLmZvckVhY2goKGVudHJ5KSA9PiBlbnN1cmVBbm5vdGF0aW9uUGF0aChlbnRyeSwgXCJhbm5vdGF0aW9uUGF0aFwiKSk7XG5cdH0gZWxzZSBpZiAocHJvcGVydHlWYWx1ZSAmJiB0eXBlb2YgcHJvcGVydHlWYWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiAhcHJvcGVydHlWYWx1ZS5pbmNsdWRlcyhcIkBcIikpIHtcblx0XHRvYmpbcHJvcGVydHldID0gKFwiQFwiICsgcHJvcGVydHlWYWx1ZSkgYXMgVFtrZXlvZiBUXTtcblx0fVxufVxuXG4vKipcbiAqXG4gKi9cbmNsYXNzIE1hbmlmZXN0V3JhcHBlciB7XG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgd3JhcHBlciBvYmplY3QgdG8gZW5zdXJlIHRoZSBkYXRhIHJldHVybmVkIGZyb20gdGhlIG1hbmlmZXN0IGlzIGNvbnNpc3RlbnQgYW5kIGV2ZXJ5dGhpbmcgaXMgbWVyZ2VkIGNvcnJlY3RseS5cblx0ICogQHBhcmFtIG9NYW5pZmVzdFNldHRpbmdzIFRoZSBtYW5pZmVzdCBzZXR0aW5ncyBmb3IgdGhlIGN1cnJlbnQgcGFnZVxuXHQgKiBAcGFyYW0gYXBwQ29tcG9uZW50IFRoZSBhcHAgY29tcG9uZW50XG5cdCAqIEByZXR1cm5zIFRoZSBtYW5pZmVzdCB3cmFwcGVyIG9iamVjdFxuXHQgKi9cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSBvTWFuaWZlc3RTZXR0aW5nczogQmFzZU1hbmlmZXN0U2V0dGluZ3MsXG5cdFx0cHJpdmF0ZSBhcHBDb21wb25lbnQ/OiBBcHBDb21wb25lbnRcblx0KSB7XG5cdFx0Ly8gRW5zdXJlIHRoYXQgcHJvcGVydGllcyB3aGljaCBhcmUgbWVhbnQgdG8gY29udGFpbiBhbiAqYW5ub3RhdGlvbiogcGF0aCBjb250YWluIGEgJ0AnXG5cdFx0ZW5zdXJlQW5ub3RhdGlvblBhdGgodGhpcy5vTWFuaWZlc3RTZXR0aW5ncywgXCJkZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aFwiKTtcblxuXHRcdCh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzKS52aWV3cz8ucGF0aHMuZm9yRWFjaCgocGF0aCkgPT4ge1xuXHRcdFx0ZW5zdXJlQW5ub3RhdGlvblBhdGgocGF0aCBhcyBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24sIFwiYW5ub3RhdGlvblBhdGhcIik7XG5cdFx0XHRlbnN1cmVBbm5vdGF0aW9uUGF0aChwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uLCBcInByaW1hcnlcIik7XG5cdFx0XHRlbnN1cmVBbm5vdGF0aW9uUGF0aChwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uLCBcInNlY29uZGFyeVwiKTtcblx0XHR9KTtcblxuXHRcdGlmICh0aGlzLm9NYW5pZmVzdFNldHRpbmdzLmNvbnRyb2xDb25maWd1cmF0aW9uKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGNvbnRyb2xDb25maWd1cmF0aW9uIG9mIE9iamVjdC52YWx1ZXModGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5jb250cm9sQ29uZmlndXJhdGlvbikpIHtcblx0XHRcdFx0Y29uc3QgcXVpY2tWYXJpYW50U2VsZWN0aW9uID0gKGNvbnRyb2xDb25maWd1cmF0aW9uIGFzIFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKS50YWJsZVNldHRpbmdzPy5xdWlja1ZhcmlhbnRTZWxlY3Rpb247XG5cdFx0XHRcdGVuc3VyZUFubm90YXRpb25QYXRoKHF1aWNrVmFyaWFudFNlbGVjdGlvbiwgXCJwYXRoc1wiKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZ2xvYmFsIG1hbmlmZXN0IGNvbnRlbnQgc2FwLmZlLlxuXHQgKiBAcmV0dXJucyBUaGUgT2JqZWN0IG1hbmlmZXN0IHNhcC5mZVxuXHQgKi9cblx0Z2V0U2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24oKTogTWFuaWZlc3RDb250ZW50W1wic2FwLmZlXCJdIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5zYXBGZU1hbmlmZXN0Q29uZmlndXJhdGlvbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHRlbXBsYXRlIHR5cGUuXG5cdCAqIEByZXR1cm5zIFRoZSB0eXBlIG9mIHRoZSBjdXJyZW50IHRlbXBsYXRlXG5cdCAqL1xuXHRnZXRUZW1wbGF0ZVR5cGUoKTogVGVtcGxhdGVUeXBlIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5jb252ZXJ0ZXJUeXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IHRlbXBsYXRlIHNob3VsZCBkaXNwbGF5IHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGZpbHRlciBiYXIgc2hvdWxkIGJlIGhpZGRlblxuXHQgKi9cblx0aXNGaWx0ZXJCYXJIaWRkZW4oKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICEhKHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MpPy5oaWRlRmlsdGVyQmFyO1xuXHR9XG5cblx0dXNlSGlkZGVuRmlsdGVyQmFyKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhISh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzKT8udXNlSGlkZGVuRmlsdGVyQmFyO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IGVudmlyb25tZW50IGlzIGEgZGVza3RvcCBvciBub3QuXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB3ZSBhcmUgb24gYSBkZXNrdG9wXG5cdCAqL1xuXHRpc0Rlc2t0b3AoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICEhdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5pc0Rlc2t0b3A7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMgYSBtb2JpbGUgcGhvbmUgb3Igbm90LlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgd2UgYXJlIG9uIGEgbW9iaWxlIHBob25lXG5cdCAqL1xuXHRpc1Bob25lKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIXRoaXMub01hbmlmZXN0U2V0dGluZ3MuaXNQaG9uZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGZvcm0gY29udGFpbmVycyAoZmllbGQgZ3JvdXBzIG9yIGlkZW50aWZpY2F0aW9uKSBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICogQHBhcmFtIGZhY2V0VGFyZ2V0IFRoZSB0YXJnZXQgYW5ub3RhdGlvbiBwYXRoIGZvciB0aGlzIGZvcm1cblx0ICogQHJldHVybnMgQSBzZXQgb2YgZm9ybSBjb250YWluZXJzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IGluZGV4ZWQgYnkgYW4gaXRlcmFibGUga2V5XG5cdCAqL1xuXHRnZXRGb3JtQ29udGFpbmVyKGZhY2V0VGFyZ2V0OiBzdHJpbmcpOiBGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5jb250cm9sQ29uZmlndXJhdGlvbj8uW2ZhY2V0VGFyZ2V0XSBhcyBGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgaGVhZGVyIGZhY2V0cyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICogQHJldHVybnMgQSBzZXQgb2YgaGVhZGVyIGZhY2V0cyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBpbmRleGVkIGJ5IGFuIGl0ZXJhYmxlIGtleVxuXHQgKi9cblx0Z2V0SGVhZGVyRmFjZXRzKCk6IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEhlYWRlckZhY2V0PiB7XG5cdFx0cmV0dXJuIG1lcmdlKFxuXHRcdFx0e30sXG5cdFx0XHR0aGlzLm9NYW5pZmVzdFNldHRpbmdzLmNvbnRyb2xDb25maWd1cmF0aW9uPy5bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGVhZGVyRmFjZXRzXCJdPy5mYWNldHMgPz8ge30sXG5cdFx0XHQodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuY29udGVudD8uaGVhZGVyPy5mYWNldHMgPz8ge31cblx0XHQpIGFzIHVua25vd24gYXMgQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0SGVhZGVyRmFjZXQ+O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgaGVhZGVyIGFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QuXG5cdCAqIEByZXR1cm5zIEEgc2V0IG9mIGFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgaW5kZXhlZCBieSBhbiBpdGVyYWJsZSBrZXlcblx0ICovXG5cdGdldEhlYWRlckFjdGlvbnMoKTogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0QWN0aW9uPiB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3MuY29udGVudD8uaGVhZGVyPy5hY3Rpb25zIHx8IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgZm9vdGVyIGFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QuXG5cdCAqIEByZXR1cm5zIEEgc2V0IG9mIGFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgaW5kZXhlZCBieSBhbiBpdGVyYWJsZSBrZXlcblx0ICovXG5cdGdldEZvb3RlckFjdGlvbnMoKTogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0QWN0aW9uPiB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3MuY29udGVudD8uZm9vdGVyPy5hY3Rpb25zIHx8IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgdmFyaWFudCBtYW5hZ2VtZW50IGFzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKiBAcmV0dXJucyBBIHR5cGUgb2YgdmFyaWFudCBtYW5hZ2VtZW50XG5cdCAqL1xuXHRnZXRWYXJpYW50TWFuYWdlbWVudCgpOiBWYXJpYW50TWFuYWdlbWVudFR5cGUge1xuXHRcdHJldHVybiB0aGlzLm9NYW5pZmVzdFNldHRpbmdzLnZhcmlhbnRNYW5hZ2VtZW50IHx8IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Ob25lO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgYW5ub3RhdGlvbiBQYXRoIGZvciB0aGUgU1BWIGluIHRoZSBtYW5pZmVzdC5cblx0ICogQHJldHVybnMgVGhlIGFubm90YXRpb24gcGF0aCBmb3IgdGhlIGRlZmF1bHQgU1BWIG9yIHVuZGVmaW5lZC5cblx0ICovXG5cdGdldERlZmF1bHRUZW1wbGF0ZUFubm90YXRpb25QYXRoKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3MuZGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBjb250cm9sIGNvbmZpZ3VyYXRpb24gYXMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgZm9yIGEgc3BlY2lmaWMgYW5ub3RhdGlvbiBwYXRoLlxuXHQgKiBAcGFyYW0gc0Fubm90YXRpb25QYXRoIFRoZSByZWxhdGl2ZSBhbm5vdGF0aW9uIHBhdGhcblx0ICogQHJldHVybnMgVGhlIGNvbnRyb2wgY29uZmlndXJhdGlvblxuXHQgKi9cblx0Z2V0Q29udHJvbENvbmZpZ3VyYXRpb248VCA9IENvbnRyb2xNYW5pZmVzdENvbmZpZ3VyYXRpb24+KHNBbm5vdGF0aW9uUGF0aDogc3RyaW5nKTogVCB7XG5cdFx0cmV0dXJuICh0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5jb250cm9sQ29uZmlndXJhdGlvbj8uW3NBbm5vdGF0aW9uUGF0aF0gfHwge30pIGFzIFQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBjb25maWd1cmVkIHNldHRpbmdzIGZvciBhIGdpdmVuIG5hdmlnYXRpb24gdGFyZ2V0LlxuXHQgKiBAcGFyYW0gbmF2aWdhdGlvbk9yQ29sbGVjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIG5hdmlnYXRpb24gdG8gY2hlY2tcblx0ICogQHJldHVybnMgVGhlIG5hdmlnYXRpb24gc2V0dGluZ3MgY29uZmlndXJhdGlvblxuXHQgKi9cblx0Z2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvbk9yQ29sbGVjdGlvbk5hbWU6IHN0cmluZyk6IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24ge1xuXHRcdHJldHVybiB0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5uYXZpZ2F0aW9uPy5bbmF2aWdhdGlvbk9yQ29sbGVjdGlvbk5hbWVdIHx8IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgdmlldyBsZXZlbC5cblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgdmlldyBsZXZlbFxuXHQgKi9cblx0Z2V0Vmlld0xldmVsKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3M/LnZpZXdMZXZlbCB8fCAtMTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGNvbnRlbnREZW5zaXRpZXMgc2V0dGluZyBvZiB0aGUgYXBwbGljYXRpb24uXG5cdCAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGNvbnRlbnQgZGVuc2l0eVxuXHQgKi9cblx0Z2V0Q29udGVudERlbnNpdGllcygpOiBDb250ZW50RGVuc2l0aWVzVHlwZSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdHRoaXMub01hbmlmZXN0U2V0dGluZ3M/LmNvbnRlbnREZW5zaXRpZXMgfHwge1xuXHRcdFx0XHRjb3p5OiBmYWxzZSxcblx0XHRcdFx0Y29tcGFjdDogZmFsc2Vcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIHdlIGFyZSBpbiBGQ0wgbW9kZSBvciBub3QuXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB3ZSBhcmUgaW4gRkNMXG5cdCAqL1xuXHRpc0ZjbEVuYWJsZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICEhdGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8uZmNsRW5hYmxlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3Mgd2hldGhlciB0aGUgY3VycmVudCBzZXR0aW5ncyAoYXBwbGljYXRpb24gLyBzaGVsbCkgYWxsb3dzIHVzIHRvIHVzZSBjb25kZW5zZWQgbGF5b3V0LlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgd2UgY2FuIHVzZSB0aGUgY29uZGVuc2VkIGxheW91dCwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRpc0NvbmRlbnNlZExheW91dENvbXBsaWFudCgpOiBib29sZWFuIHtcblx0XHRjb25zdCBtYW5pZmVzdENvbnRlbnREZW5zaXR5ID0gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8uY29udGVudERlbnNpdGllcyB8fCB7XG5cdFx0XHRjb3p5OiBmYWxzZSxcblx0XHRcdGNvbXBhY3Q6IGZhbHNlXG5cdFx0fTtcblx0XHRjb25zdCBzaGVsbENvbnRlbnREZW5zaXR5ID0gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8uc2hlbGxDb250ZW50RGVuc2l0eSB8fCBcImNvbXBhY3RcIjtcblx0XHRsZXQgaXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQgPSB0cnVlO1xuXHRcdGNvbnN0IGlzU21hbGxEZXZpY2UgPSAhRGV2aWNlLnN5c3RlbS5kZXNrdG9wIHx8IERldmljZS5yZXNpemUud2lkdGggPD0gMzIwO1xuXHRcdGlmIChcblx0XHRcdChtYW5pZmVzdENvbnRlbnREZW5zaXR5Py5jb3p5ID09PSB0cnVlICYmIG1hbmlmZXN0Q29udGVudERlbnNpdHk/LmNvbXBhY3QgIT09IHRydWUpIHx8XG5cdFx0XHRzaGVsbENvbnRlbnREZW5zaXR5ID09PSBcImNvenlcIiB8fFxuXHRcdFx0aXNTbWFsbERldmljZVxuXHRcdCkge1xuXHRcdFx0aXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQgPSBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIGlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IHNldHRpbmdzIChhcHBsaWNhdGlvbiAvIHNoZWxsKSB1c2VzIGNvbXBhY3QgbW9kZSBhcyBjb250ZW50IGRlbnNpdHkuXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiBjb21wYWN0IG1vZGUgaXMgc2V0IGFzIGNvbnRlbnQgZGVuc2l0eSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRpc0NvbXBhY3RUeXBlKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IG1hbmlmZXN0Q29udGVudERlbnNpdHkgPSB0aGlzLmdldENvbnRlbnREZW5zaXRpZXMoKTtcblx0XHRjb25zdCBzaGVsbENvbnRlbnREZW5zaXR5ID0gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8uc2hlbGxDb250ZW50RGVuc2l0eSB8fCBcImNvbXBhY3RcIjtcblx0XHRyZXR1cm4gbWFuaWZlc3RDb250ZW50RGVuc2l0eS5jb21wYWN0ICE9PSBmYWxzZSB8fCBzaGVsbENvbnRlbnREZW5zaXR5ID09PSBcImNvbXBhY3RcIiA/IHRydWUgOiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIG91dGJvdW5kIG5hdmlnYXRpb24gZW50cmllcyBkZWZpbmVkIGluIHRoZSBjcm9zcy1uYXZpZ2F0aW9uIHNlY3Rpb24gb2YgdGhlIGFwcGxpY2F0aW9uIG1hbmlmZXN0LlxuXHQgKiBAcmV0dXJucyBUaGUgZW50cmllcyBpZiB0aGV5IGV4aXN0LCBvdGhlcndpc2UgdW5kZWZpbmVkXG5cdCAqL1xuXHRnZXRPdXRib3VuZE5hdmlnYXRpb25FbnRyaWVzKCk6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0T3V0Ym91bmRFbnRyeT4gfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLmFwcENvbXBvbmVudD8uZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5hcHBcIik/LmNyb3NzTmF2aWdhdGlvbj8ub3V0Ym91bmRzO1xuXHR9XG5cblx0Ly9yZWdpb24gT1AgU3BlY2lmaWNcblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBzZWN0aW9uIGxheW91dCBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICogQHJldHVybnMgVGhlIHR5cGUgb2Ygc2VjdGlvbiBsYXlvdXQgb2YgdGhlIG9iamVjdCBwYWdlXG5cdCAqL1xuXHRnZXRTZWN0aW9uTGF5b3V0KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuICh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzKS5zZWN0aW9uTGF5b3V0ID8/IFwiVGFic1wiO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgc2VjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QuXG5cdCAqIEByZXR1cm5zIEEgc2V0IG9mIG1hbmlmZXN0IHNlY3Rpb25zIGluZGV4ZWQgYnkgYW4gaXRlcmFibGUga2V5XG5cdCAqL1xuXHRnZXRTZWN0aW9ucygpOiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RTZWN0aW9uPiB7XG5cdFx0cmV0dXJuIG1lcmdlKFxuXHRcdFx0e30sXG5cdFx0XHR0aGlzLm9NYW5pZmVzdFNldHRpbmdzLmNvbnRyb2xDb25maWd1cmF0aW9uPy5bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmFjZXRzXCJdPy5zZWN0aW9ucyA/PyB7fSxcblx0XHRcdCh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzKS5jb250ZW50Py5ib2R5Py5zZWN0aW9ucyA/PyB7fVxuXHRcdCkgYXMgdW5rbm93biBhcyBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RTZWN0aW9uPjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRydWUgb2YgdGhlIGhlYWRlciBvZiB0aGUgYXBwbGljYXRpb24gaXMgZWRpdGFibGUgYW5kIHNob3VsZCBhcHBlYXIgaW4gdGhlIGZhY2V0cy5cblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBoZWFkZXIgaWYgZWRpdGFibGVcblx0ICovXG5cdGlzSGVhZGVyRWRpdGFibGUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2hvd09iamVjdFBhZ2VIZWFkZXIoKSAmJiAhISh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzKS5lZGl0YWJsZUhlYWRlckNvbnRlbnQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlIGlmIHdlIHNob3VsZCB1c2UgdGV4dCBpbnN0ZWFkIG9mIElsbHVzdHJhdGVkTWVzc2FnZSBmb3IgdGhlIG5vRGF0YSBhZ2dyZWdhdGlvbiBpbiB0aGUgd2hvbGUgcGFnZS5cblx0ICogQHJldHVybnMgYHRydWVgIGlmIHdlIHNob3VsZCB1c2UgdGV4dCBmb3Igbm9EYXRhIGFnZ3JlZ2F0aW9uXG5cdCAqL1xuXHRnZXRVc2VUZXh0Rm9yTm9EYXRhTWVzc2FnZXMoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzKS51c2VUZXh0Rm9yTm9EYXRhTWVzc2FnZXMgPz8gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlIGlmIHdlIHNob3VsZCBzaG93IHRoZSBvYmplY3QgcGFnZSBoZWFkZXIuXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgaGVhZGVyIHNob3VsZCBiZSBkaXNwbGF5ZWRcblx0ICovXG5cdGdldFNob3dBbmNob3JCYXIoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzKS5jb250ZW50Py5oZWFkZXI/LmFuY2hvckJhclZpc2libGUgIT09IHVuZGVmaW5lZFxuXHRcdFx0PyAhISh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzKS5jb250ZW50Py5oZWFkZXI/LmFuY2hvckJhclZpc2libGVcblx0XHRcdDogdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIHdoZXRoZXIgb3Igbm90IHRoZSBzZWN0aW9uIHdpbGwgYmUgZGlzcGxheWVkIGluIGRpZmZlcmVudCB0YWJzLlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGljb24gdGFiIGJhciBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIHNjcm9sbGluZ1xuXHQgKi9cblx0dXNlSWNvblRhYkJhcigpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRTaG93QW5jaG9yQmFyKCkgJiYgKHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MpLnNlY3Rpb25MYXlvdXQgPT09IFwiVGFic1wiO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgb2JqZWN0IHBhZ2UgaGVhZGVyIGlzIHRvIGJlIHNob3duLlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdCBwYWdlIGhlYWRlciBpcyB0byBiZSBkaXNwbGF5ZWRcblx0ICovXG5cdGdldFNob3dPYmplY3RQYWdlSGVhZGVyKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuY29udGVudD8uaGVhZGVyPy52aXNpYmxlICE9PSB1bmRlZmluZWRcblx0XHRcdD8gISEodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuY29udGVudD8uaGVhZGVyPy52aXNpYmxlXG5cdFx0XHQ6IHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB3aGV0aGVyIHRoZSBsYXp5IGxvYWRlciBzaG91bGQgYmUgZW5hYmxlZCBmb3IgdGhpcyBwYWdlIG9yIG5vdC5cblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBsYXp5IGxvYWRlciBzaG91bGQgYmUgZW5hYmxlZFxuXHQgKi9cblx0Z2V0RW5hYmxlTGF6eUxvYWRpbmcoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3MuZW5hYmxlTGF6eUxvYWRpbmcgPz8gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgdHJhbnNwb3J0IHNlbGVjdGlvbiBkZWZpbml0aW9uLlxuXHQgKiBAcmV0dXJucyBEZWZpbml0aW9uIHdpdGggdHJhbnNwb3J0IHByb3BlcnR5IGFuZCBzZWxlY3QgYWN0aW9uXG5cdCAqL1xuXHRnZXRUcmFuc3BvcnRTZWxlY3Rpb24oKTogVHJhbnNwb3J0U2VsZWN0aW9uRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuICh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzKS5jb250ZW50Py50cmFuc3BvcnRTZWxlY3Rpb247XG5cdH1cblxuXHQvL2VuZHJlZ2lvbiBPUCBTcGVjaWZpY1xuXG5cdC8vcmVnaW9uIExSIFNwZWNpZmljXG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgbXVsdGlwbGUgdmlldyBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1hbmlmZXN0LlxuXHQgKiBAcmV0dXJucyBUaGUgdmlld3MgdGhhdCByZXByZXNlbnQgdGhlIG1hbmlmZXN0IG9iamVjdFxuXHQgKi9cblx0Z2V0Vmlld0NvbmZpZ3VyYXRpb24oKTogTXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiAodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncykudmlld3M7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBzdGlja3lNdWx0aVRhYkhlYWRlciBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1hbmlmZXN0LlxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIFRydWUgaWYgc3RpY2t5TXVsdGlUYWJIZWFkZXIgaXMgZW5hYmxlZCBvciB1bmRlZmluZWRcblx0ICovXG5cdGdldFN0aWNreU11bHRpVGFiSGVhZGVyQ29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcblx0XHRjb25zdCBiU3RpY2t5TXVsdGlUYWJIZWFkZXIgPSAodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncykuc3RpY2t5TXVsdGlUYWJIZWFkZXI7XG5cdFx0cmV0dXJuIGJTdGlja3lNdWx0aVRhYkhlYWRlciAhPT0gdW5kZWZpbmVkID8gYlN0aWNreU11bHRpVGFiSGVhZGVyIDogdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIEtQSSBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1hbmlmZXN0LlxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIGEgbWFwIGJldHdlZW4gS1BJIG5hbWVzIGFuZCB0aGVpciByZXNwZWN0aXZlIGNvbmZpZ3VyYXRpb25cblx0ICovXG5cdGdldEtQSUNvbmZpZ3VyYXRpb24oKTogeyBba3BpTmFtZTogc3RyaW5nXTogS1BJQ29uZmlndXJhdGlvbiB9IHtcblx0XHRyZXR1cm4gKHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MpLmtleVBlcmZvcm1hbmNlSW5kaWNhdG9ycyB8fCB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGZpbHRlciBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1hbmlmZXN0LlxuXHQgKiBAcGFyYW0gY29uZmlnUGF0aFxuXHQgKiBAcmV0dXJucyBUaGUgZmlsdGVyIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbWFuaWZlc3Rcblx0ICovXG5cdGdldEZpbHRlckNvbmZpZ3VyYXRpb24oY29uZmlnUGF0aCA9IFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvbkZpZWxkc1wiKTogRmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9uIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRDb250cm9sQ29uZmlndXJhdGlvbjxGaWx0ZXJNYW5pZmVzdENvbmZpZ3VyYXRpb24+KGNvbmZpZ1BhdGgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgZW50aXR5IHNldHMgdG8gYmUgZGlzcGxheWVkLlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGVudGl0eSBzZXRzXG5cdCAqL1xuXHRoYXNNdWx0aXBsZUVudGl0eVNldHMoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgdmlld0NvbmZpZyA9IHRoaXMuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKSB8fCB7IHBhdGhzOiBbXSB9O1xuXHRcdGNvbnN0IG1hbmlmZXN0RW50aXR5U2V0ID0gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5lbnRpdHlTZXQ7XG5cdFx0cmV0dXJuIChcblx0XHRcdHZpZXdDb25maWcucGF0aHMuZmluZCgocGF0aDogVmlld0NvbmZpZ3VyYXRpb24pID0+IHtcblx0XHRcdFx0aWYgKChwYXRoIGFzIEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb24pPy50ZW1wbGF0ZSkge1xuXHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKHBhdGggYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24pKSB7XG5cdFx0XHRcdFx0Y29uc3QgeyBwcmltYXJ5LCBzZWNvbmRhcnkgfSA9IHBhdGggYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb247XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdHByaW1hcnkuc29tZSgocHJpbWFyeVBhdGgpID0+IHByaW1hcnlQYXRoLmVudGl0eVNldCAmJiBwcmltYXJ5UGF0aC5lbnRpdHlTZXQgIT09IG1hbmlmZXN0RW50aXR5U2V0KSB8fFxuXHRcdFx0XHRcdFx0c2Vjb25kYXJ5LnNvbWUoKHNlY29uZGFyeVBhdGgpID0+IHNlY29uZGFyeVBhdGguZW50aXR5U2V0ICYmIHNlY29uZGFyeVBhdGguZW50aXR5U2V0ICE9PSBtYW5pZmVzdEVudGl0eVNldClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhdGggPSBwYXRoIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbjtcblx0XHRcdFx0XHRyZXR1cm4gcGF0aC5lbnRpdHlTZXQgJiYgcGF0aC5lbnRpdHlTZXQgIT09IG1hbmlmZXN0RW50aXR5U2V0O1xuXHRcdFx0XHR9XG5cdFx0XHR9KSAhPT0gdW5kZWZpbmVkXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjb250ZXh0IHBhdGggZm9yIHRoZSB0ZW1wbGF0ZSBpZiBpdCBpcyBzcGVjaWZpZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKiBAcmV0dXJucyBUaGUgY29udGV4dCBwYXRoIGZvciB0aGUgdGVtcGxhdGVcblx0ICovXG5cdGdldENvbnRleHRQYXRoKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3M/LmNvbnRleHRQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29uZmlndXJhdGlvbiBpcyBhIHNpbmdsZSBwYXRoIGNvbmZpZ3VyYXRpb24uXG5cdCAqIEBwYXJhbSB2aWV3Q29uZmlnIFRoZSB2aWV3IGNvbmZpZ3VyYXRpb25cblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoaXMgaXMgYSBzaW5nbGUgcGF0aCBjb25maWd1cmF0aW9uXG5cdCAqL1xuXHRpc1ZpZXdQYXRoQ29uZmlndXJhdGlvbih2aWV3Q29uZmlnOiBWaWV3Q29uZmlndXJhdGlvbik6IHZpZXdDb25maWcgaXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uIHtcblx0XHRyZXR1cm4gXCJhbm5vdGF0aW9uUGF0aFwiIGluIHZpZXdDb25maWcgJiYgIShcInByaW1hcnlcIiBpbiB2aWV3Q29uZmlnKSAmJiAhKFwic2Vjb25kYXJ5XCIgaW4gdmlld0NvbmZpZyk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlIGlmIHRoZSBjb25maWd1cmF0aW9uIGlzIGEgY29tYmluZWQgY29uZmlndXJhdGlvbi5cblx0ICogQHBhcmFtIHZpZXdDb25maWcgVGhlIHZpZXcgY29uZmlndXJhdGlvblxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBpcyBhIGNvbWJpbmVkIGNvbmZpZ3VyYXRpb25cblx0ICovXG5cdGlzQ29tYmluZWRWaWV3Q29uZmlndXJhdGlvbih2aWV3Q29uZmlnOiBWaWV3Q29uZmlndXJhdGlvbik6IHZpZXdDb25maWcgaXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24ge1xuXHRcdHJldHVybiAhdGhpcy5pc0N1c3RvbVZpZXdDb25maWd1cmF0aW9uKHZpZXdDb25maWcpICYmICF0aGlzLmlzVmlld1BhdGhDb25maWd1cmF0aW9uKHZpZXdDb25maWcpXG5cdFx0XHQ/IHZpZXdDb25maWcucHJpbWFyeT8ubGVuZ3RoID4gMCAmJiB2aWV3Q29uZmlnLnNlY29uZGFyeT8ubGVuZ3RoID4gMFxuXHRcdFx0OiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbmZpZ3VyYXRpb24gaXMgYSBjdXN0b20gY29uZmlndXJhdGlvbi5cblx0ICogQHBhcmFtIHZpZXdDb25maWcgVGhlIHZpZXcgY29uZmlndXJhdGlvblxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBpcyBhIGN1c3RvbSBjb25maWd1cmF0aW9uXG5cdCAqL1xuXHRpc0N1c3RvbVZpZXdDb25maWd1cmF0aW9uKHZpZXdDb25maWc6IFZpZXdDb25maWd1cmF0aW9uKTogdmlld0NvbmZpZyBpcyBDdXN0b21WaWV3VGVtcGxhdGVDb25maWd1cmF0aW9uIHtcblx0XHRyZXR1cm4gXCJ0ZW1wbGF0ZVwiIGluIHZpZXdDb25maWc7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSB2aXN1YWxpemF0aW9ucy5cblx0ICogQHBhcmFtIHZpZXdDb25maWcgVGhlIHBhdGggZnJvbSB0aGUgdmlld1xuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlcmUgYXJlIG11bHRpcGxlIHZpc3VhbGl6YXRpb25zXG5cdCAqL1xuXHRoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKHZpZXdDb25maWc/OiBWaWV3Q29uZmlndXJhdGlvbik6IGJvb2xlYW4ge1xuXHRcdGlmICghdmlld0NvbmZpZykge1xuXHRcdFx0Y29uc3QgbXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb24gPSB0aGlzLmdldFZpZXdDb25maWd1cmF0aW9uKCkgfHwgeyBwYXRoczogW10gfTtcblx0XHRcdHJldHVybiBtdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbi5wYXRocy5zb21lKChwYXRoKSA9PiB0aGlzLmlzQ29tYmluZWRWaWV3Q29uZmlndXJhdGlvbihwYXRoKSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmlzQ29tYmluZWRWaWV3Q29uZmlndXJhdGlvbih2aWV3Q29uZmlnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGVudGl0eSBzZXQgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QuXG5cdCAqIEByZXR1cm5zIFRoZSBlbnRpdHkgc2V0IGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG5cdCAqL1xuXHRnZXRFbnRpdHlTZXQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5lbnRpdHlTZXQ7XG5cdH1cblxuXHRoYXNJbmxpbmVFZGl0KCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIXRoaXMub01hbmlmZXN0U2V0dGluZ3MuaW5saW5lRWRpdD8uZGlzYWJsZWRGaWVsZHMgfHwgKHRoaXMub01hbmlmZXN0U2V0dGluZ3M/LmlubGluZUVkaXQ/LmVuYWJsZWRGaWVsZHM/Lmxlbmd0aCA/PyAwKSA+IDA7XG5cdH1cblxuXHRnZXRJbmxpbmVFZGl0RW5hYmxlZEZpZWxkcygpOiBzdHJpbmdbXSB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3M/LmlubGluZUVkaXQ/LmVuYWJsZWRGaWVsZHMgPz8gW107XG5cdH1cblxuXHRnZXRJbmxpbmVFZGl0RGlzYWJsZWRGaWVsZHMoKTogc3RyaW5nW10ge1xuXHRcdHJldHVybiB0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5pbmxpbmVFZGl0Py5kaXNhYmxlZEZpZWxkcyA/PyBbXTtcblx0fVxuXG5cdGdldElubGluZUNvbm5lY3RlZEZpZWxkcygpOiAoc3RyaW5nIHwgc3RyaW5nW10pW10ge1xuXHRcdHJldHVybiB0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5pbmxpbmVFZGl0Py5jb25uZWN0ZWRGaWVsZHMgPz8gW107XG5cdH1cblx0Ly9lbmQgcmVnaW9uIExSIFNwZWNpZmljXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1hbmlmZXN0V3JhcHBlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7RUE2QkEsU0FBU0Esb0JBQW9CQSxDQUFtQkMsR0FBa0IsRUFBRUMsUUFBaUIsRUFBUTtJQUM1RixNQUFNQyxhQUFhLEdBQUdGLEdBQUcsR0FBR0MsUUFBUSxDQUFDO0lBQ3JDLElBQUlFLEtBQUssQ0FBQ0MsT0FBTyxDQUFDRixhQUFhLENBQUMsRUFBRTtNQUNqQ0EsYUFBYSxDQUFDRyxPQUFPLENBQUVDLEtBQUssSUFBS1Asb0JBQW9CLENBQUNPLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hGLENBQUMsTUFBTSxJQUFJSixhQUFhLElBQUksT0FBT0EsYUFBYSxLQUFLLFFBQVEsSUFB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
439
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbnN1cmVBbm5vdGF0aW9uUGF0aCIsIm9iaiIsInByb3BlcnR5IiwicHJvcGVydHlWYWx1ZSIsIkFycmF5IiwiaXNBcnJheSIsImZvckVhY2giLCJlbnRyeSIsImluY2x1ZGVzIiwiTWFuaWZlc3RXcmFwcGVyIiwib01hbmlmZXN0U2V0dGluZ3MiLCJhcHBDb21wb25lbnQiLCJ2aWV3cyIsInBhdGhzIiwicGF0aCIsImNvbnRyb2xDb25maWd1cmF0aW9uIiwiT2JqZWN0IiwidmFsdWVzIiwicXVpY2tWYXJpYW50U2VsZWN0aW9uIiwidGFibGVTZXR0aW5ncyIsIl9wcm90byIsInByb3RvdHlwZSIsImdldFNhcEZlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwic2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJnZXRUZW1wbGF0ZVR5cGUiLCJjb252ZXJ0ZXJUeXBlIiwiaXNGaWx0ZXJCYXJIaWRkZW4iLCJoaWRlRmlsdGVyQmFyIiwidXNlSGlkZGVuRmlsdGVyQmFyIiwiZ2V0Q29sbGFwc2VkSGVhZGVyRnJhZ21lbnQiLCJjb250ZW50IiwiaGVhZGVyIiwiY3VzdG9tSGVhZGVyIiwiY29sbGFwc2VkSGVhZGVyRnJhZ21lbnQiLCJnZXRFeHBhbmRlZEhlYWRlckZyYWdtZW50IiwiZXhwYW5kZWRIZWFkZXJGcmFnbWVudCIsImlzRGVza3RvcCIsImlzUGhvbmUiLCJnZXRGb3JtQ29udGFpbmVyIiwiZmFjZXRUYXJnZXQiLCJnZXRIZWFkZXJGYWNldHMiLCJtZXJnZSIsImZhY2V0cyIsImdldEhlYWRlckFjdGlvbnMiLCJhY3Rpb25zIiwiZ2V0Rm9vdGVyQWN0aW9ucyIsImZvb3RlciIsImdldFZhcmlhbnRNYW5hZ2VtZW50IiwidmFyaWFudE1hbmFnZW1lbnQiLCJWYXJpYW50TWFuYWdlbWVudFR5cGUiLCJOb25lIiwiZ2V0RGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGgiLCJkZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCIsImdldENvbnRyb2xDb25maWd1cmF0aW9uIiwic0Fubm90YXRpb25QYXRoIiwiZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24iLCJuYXZpZ2F0aW9uT3JDb2xsZWN0aW9uTmFtZSIsIm5hdmlnYXRpb24iLCJnZXRWaWV3TGV2ZWwiLCJ2aWV3TGV2ZWwiLCJnZXRDb250ZW50RGVuc2l0aWVzIiwiY29udGVudERlbnNpdGllcyIsImNvenkiLCJjb21wYWN0IiwiaXNGY2xFbmFibGVkIiwiZmNsRW5hYmxlZCIsImlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50IiwibWFuaWZlc3RDb250ZW50RGVuc2l0eSIsInNoZWxsQ29udGVudERlbnNpdHkiLCJpc1NtYWxsRGV2aWNlIiwiRGV2aWNlIiwic3lzdGVtIiwiZGVza3RvcCIsInJlc2l6ZSIsIndpZHRoIiwiaXNDb21wYWN0VHlwZSIsImdldE91dGJvdW5kTmF2aWdhdGlvbkVudHJpZXMiLCJnZXRNYW5pZmVzdEVudHJ5IiwiY3Jvc3NOYXZpZ2F0aW9uIiwib3V0Ym91bmRzIiwiZ2V0U2VjdGlvbkxheW91dCIsInNlY3Rpb25MYXlvdXQiLCJnZXRTZWN0aW9ucyIsInNlY3Rpb25zIiwiYm9keSIsImlzSGVhZGVyRWRpdGFibGUiLCJnZXRTaG93T2JqZWN0UGFnZUhlYWRlciIsImVkaXRhYmxlSGVhZGVyQ29udGVudCIsImdldFVzZVRleHRGb3JOb0RhdGFNZXNzYWdlcyIsInVzZVRleHRGb3JOb0RhdGFNZXNzYWdlcyIsImdldFNob3dBbmNob3JCYXIiLCJhbmNob3JCYXJWaXNpYmxlIiwidW5kZWZpbmVkIiwidXNlSWNvblRhYkJhciIsInZpc2libGUiLCJnZXRFbmFibGVMYXp5TG9hZGluZyIsImVuYWJsZUxhenlMb2FkaW5nIiwiZ2V0VHJhbnNwb3J0U2VsZWN0aW9uIiwidHJhbnNwb3J0U2VsZWN0aW9uIiwiZ2V0Vmlld0NvbmZpZ3VyYXRpb24iLCJnZXRTdGlja3lNdWx0aVRhYkhlYWRlckNvbmZpZ3VyYXRpb24iLCJiU3RpY2t5TXVsdGlUYWJIZWFkZXIiLCJzdGlja3lNdWx0aVRhYkhlYWRlciIsImdldEtQSUNvbmZpZ3VyYXRpb24iLCJrZXlQZXJmb3JtYW5jZUluZGljYXRvcnMiLCJnZXRGaWx0ZXJDb25maWd1cmF0aW9uIiwiY29uZmlnUGF0aCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImhhc011bHRpcGxlRW50aXR5U2V0cyIsInZpZXdDb25maWciLCJtYW5pZmVzdEVudGl0eVNldCIsImVudGl0eVNldCIsImZpbmQiLCJ0ZW1wbGF0ZSIsImhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMiLCJwcmltYXJ5Iiwic2Vjb25kYXJ5Iiwic29tZSIsInByaW1hcnlQYXRoIiwic2Vjb25kYXJ5UGF0aCIsImdldENvbnRleHRQYXRoIiwiY29udGV4dFBhdGgiLCJpc1ZpZXdQYXRoQ29uZmlndXJhdGlvbiIsImlzQ29tYmluZWRWaWV3Q29uZmlndXJhdGlvbiIsImlzQ3VzdG9tVmlld0NvbmZpZ3VyYXRpb24iLCJtdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbiIsImdldEVudGl0eVNldCIsImhhc0lubGluZUVkaXQiLCJpbmxpbmVFZGl0IiwiZGlzYWJsZWRGaWVsZHMiLCJlbmFibGVkRmllbGRzIiwiZ2V0SW5saW5lRWRpdEVuYWJsZWRGaWVsZHMiLCJnZXRJbmxpbmVFZGl0RGlzYWJsZWRGaWVsZHMiLCJnZXRJbmxpbmVDb25uZWN0ZWRGaWVsZHMiLCJjb25uZWN0ZWRGaWVsZHMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk1hbmlmZXN0V3JhcHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7XG5cdEJhc2VNYW5pZmVzdFNldHRpbmdzLFxuXHRDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbixcblx0Q29udGVudERlbnNpdGllc1R5cGUsXG5cdENvbnRyb2xNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb24sXG5cdEZpbHRlck1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0Rm9ybU1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0S1BJQ29uZmlndXJhdGlvbixcblx0TGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MsXG5cdE1hbmlmZXN0QWN0aW9uLFxuXHRNYW5pZmVzdEhlYWRlckZhY2V0LFxuXHRNYW5pZmVzdFNlY3Rpb24sXG5cdE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uLFxuXHROYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncyxcblx0U2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uLFxuXHRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0VGVtcGxhdGVUeXBlLFxuXHRUcmFuc3BvcnRTZWxlY3Rpb25EZWZpbml0aW9uLFxuXHRWaWV3Q29uZmlndXJhdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBWYXJpYW50TWFuYWdlbWVudFR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZVJlY29yZCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgRGV2aWNlIGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0Q29udGVudCwgTWFuaWZlc3RPdXRib3VuZEVudHJ5IH0gZnJvbSBcInNhcC91aS9jb3JlL01hbmlmZXN0XCI7XG5cbmZ1bmN0aW9uIGVuc3VyZUFubm90YXRpb25QYXRoPFQgZXh0ZW5kcyBvYmplY3Q+KG9iajogVCB8IHVuZGVmaW5lZCwgcHJvcGVydHk6IGtleW9mIFQpOiB2b2lkIHtcblx0Y29uc3QgcHJvcGVydHlWYWx1ZSA9IG9iaj8uW3Byb3BlcnR5XTtcblx0aWYgKEFycmF5LmlzQXJyYXkocHJvcGVydHlWYWx1ZSkpIHtcblx0XHRwcm9wZXJ0eVZhbHVlLmZvckVhY2goKGVudHJ5KSA9PiBlbnN1cmVBbm5vdGF0aW9uUGF0aChlbnRyeSwgXCJhbm5vdGF0aW9uUGF0aFwiKSk7XG5cdH0gZWxzZSBpZiAocHJvcGVydHlWYWx1ZSAmJiB0eXBlb2YgcHJvcGVydHlWYWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiAhcHJvcGVydHlWYWx1ZS5pbmNsdWRlcyhcIkBcIikpIHtcblx0XHRvYmpbcHJvcGVydHldID0gKFwiQFwiICsgcHJvcGVydHlWYWx1ZSkgYXMgVFtrZXlvZiBUXTtcblx0fVxufVxuXG4vKipcbiAqXG4gKi9cbmNsYXNzIE1hbmlmZXN0V3JhcHBlciB7XG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgd3JhcHBlciBvYmplY3QgdG8gZW5zdXJlIHRoZSBkYXRhIHJldHVybmVkIGZyb20gdGhlIG1hbmlmZXN0IGlzIGNvbnNpc3RlbnQgYW5kIGV2ZXJ5dGhpbmcgaXMgbWVyZ2VkIGNvcnJlY3RseS5cblx0ICogQHBhcmFtIG9NYW5pZmVzdFNldHRpbmdzIFRoZSBtYW5pZmVzdCBzZXR0aW5ncyBmb3IgdGhlIGN1cnJlbnQgcGFnZVxuXHQgKiBAcGFyYW0gYXBwQ29tcG9uZW50IFRoZSBhcHAgY29tcG9uZW50XG5cdCAqIEByZXR1cm5zIFRoZSBtYW5pZmVzdCB3cmFwcGVyIG9iamVjdFxuXHQgKi9cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSBvTWFuaWZlc3RTZXR0aW5nczogQmFzZU1hbmlmZXN0U2V0dGluZ3MsXG5cdFx0cHJpdmF0ZSBhcHBDb21wb25lbnQ/OiBBcHBDb21wb25lbnRcblx0KSB7XG5cdFx0Ly8gRW5zdXJlIHRoYXQgcHJvcGVydGllcyB3aGljaCBhcmUgbWVhbnQgdG8gY29udGFpbiBhbiAqYW5ub3RhdGlvbiogcGF0aCBjb250YWluIGEgJ0AnXG5cdFx0ZW5zdXJlQW5ub3RhdGlvblBhdGgodGhpcy5vTWFuaWZlc3RTZXR0aW5ncywgXCJkZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aFwiKTtcblxuXHRcdCh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzKS52aWV3cz8ucGF0aHMuZm9yRWFjaCgocGF0aCkgPT4ge1xuXHRcdFx0ZW5zdXJlQW5ub3RhdGlvblBhdGgocGF0aCBhcyBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24sIFwiYW5ub3RhdGlvblBhdGhcIik7XG5cdFx0XHRlbnN1cmVBbm5vdGF0aW9uUGF0aChwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uLCBcInByaW1hcnlcIik7XG5cdFx0XHRlbnN1cmVBbm5vdGF0aW9uUGF0aChwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uLCBcInNlY29uZGFyeVwiKTtcblx0XHR9KTtcblxuXHRcdGlmICh0aGlzLm9NYW5pZmVzdFNldHRpbmdzLmNvbnRyb2xDb25maWd1cmF0aW9uKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGNvbnRyb2xDb25maWd1cmF0aW9uIG9mIE9iamVjdC52YWx1ZXModGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5jb250cm9sQ29uZmlndXJhdGlvbikpIHtcblx0XHRcdFx0Y29uc3QgcXVpY2tWYXJpYW50U2VsZWN0aW9uID0gKGNvbnRyb2xDb25maWd1cmF0aW9uIGFzIFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKS50YWJsZVNldHRpbmdzPy5xdWlja1ZhcmlhbnRTZWxlY3Rpb247XG5cdFx0XHRcdGVuc3VyZUFubm90YXRpb25QYXRoKHF1aWNrVmFyaWFudFNlbGVjdGlvbiwgXCJwYXRoc1wiKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZ2xvYmFsIG1hbmlmZXN0IGNvbnRlbnQgc2FwLmZlLlxuXHQgKiBAcmV0dXJucyBUaGUgT2JqZWN0IG1hbmlmZXN0IHNhcC5mZVxuXHQgKi9cblx0Z2V0U2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24oKTogTWFuaWZlc3RDb250ZW50W1wic2FwLmZlXCJdIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5zYXBGZU1hbmlmZXN0Q29uZmlndXJhdGlvbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHRlbXBsYXRlIHR5cGUuXG5cdCAqIEByZXR1cm5zIFRoZSB0eXBlIG9mIHRoZSBjdXJyZW50IHRlbXBsYXRlXG5cdCAqL1xuXHRnZXRUZW1wbGF0ZVR5cGUoKTogVGVtcGxhdGVUeXBlIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5jb252ZXJ0ZXJUeXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IHRlbXBsYXRlIHNob3VsZCBkaXNwbGF5IHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGZpbHRlciBiYXIgc2hvdWxkIGJlIGhpZGRlblxuXHQgKi9cblx0aXNGaWx0ZXJCYXJIaWRkZW4oKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICEhKHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MpPy5oaWRlRmlsdGVyQmFyO1xuXHR9XG5cblx0dXNlSGlkZGVuRmlsdGVyQmFyKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhISh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzKT8udXNlSGlkZGVuRmlsdGVyQmFyO1xuXHR9XG5cblx0Z2V0Q29sbGFwc2VkSGVhZGVyRnJhZ21lbnQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gKHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MpPy5jb250ZW50Py5oZWFkZXI/LmN1c3RvbUhlYWRlcj8uY29sbGFwc2VkSGVhZGVyRnJhZ21lbnQ7XG5cdH1cblxuXHRnZXRFeHBhbmRlZEhlYWRlckZyYWdtZW50KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuICh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzKT8uY29udGVudD8uaGVhZGVyPy5jdXN0b21IZWFkZXI/LmV4cGFuZGVkSGVhZGVyRnJhZ21lbnQ7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMgYSBkZXNrdG9wIG9yIG5vdC5cblx0ICogQHJldHVybnMgYHRydWVgIGlmIHdlIGFyZSBvbiBhIGRlc2t0b3Bcblx0ICovXG5cdGlzRGVza3RvcCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISF0aGlzLm9NYW5pZmVzdFNldHRpbmdzLmlzRGVza3RvcDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3Mgd2hldGhlciB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBpcyBhIG1vYmlsZSBwaG9uZSBvciBub3QuXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB3ZSBhcmUgb24gYSBtb2JpbGUgcGhvbmVcblx0ICovXG5cdGlzUGhvbmUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICEhdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5pc1Bob25lO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgZm9ybSBjb250YWluZXJzIChmaWVsZCBncm91cHMgb3IgaWRlbnRpZmljYXRpb24pIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKiBAcGFyYW0gZmFjZXRUYXJnZXQgVGhlIHRhcmdldCBhbm5vdGF0aW9uIHBhdGggZm9yIHRoaXMgZm9ybVxuXHQgKiBAcmV0dXJucyBBIHNldCBvZiBmb3JtIGNvbnRhaW5lcnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgaW5kZXhlZCBieSBhbiBpdGVyYWJsZSBrZXlcblx0ICovXG5cdGdldEZvcm1Db250YWluZXIoZmFjZXRUYXJnZXQ6IHN0cmluZyk6IEZvcm1NYW5pZmVzdENvbmZpZ3VyYXRpb24ge1xuXHRcdHJldHVybiB0aGlzLm9NYW5pZmVzdFNldHRpbmdzLmNvbnRyb2xDb25maWd1cmF0aW9uPy5bZmFjZXRUYXJnZXRdIGFzIEZvcm1NYW5pZmVzdENvbmZpZ3VyYXRpb247XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBoZWFkZXIgZmFjZXRzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKiBAcmV0dXJucyBBIHNldCBvZiBoZWFkZXIgZmFjZXRzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IGluZGV4ZWQgYnkgYW4gaXRlcmFibGUga2V5XG5cdCAqL1xuXHRnZXRIZWFkZXJGYWNldHMoKTogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0SGVhZGVyRmFjZXQ+IHtcblx0XHRyZXR1cm4gbWVyZ2UoXG5cdFx0XHR7fSxcblx0XHRcdHRoaXMub01hbmlmZXN0U2V0dGluZ3MuY29udHJvbENvbmZpZ3VyYXRpb24/LltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJGYWNldHNcIl0/LmZhY2V0cyA/PyB7fSxcblx0XHRcdCh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzKS5jb250ZW50Py5oZWFkZXI/LmZhY2V0cyA/PyB7fVxuXHRcdCkgYXMgdW5rbm93biBhcyBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RIZWFkZXJGYWNldD47XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBoZWFkZXIgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICogQHJldHVybnMgQSBzZXQgb2YgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBpbmRleGVkIGJ5IGFuIGl0ZXJhYmxlIGtleVxuXHQgKi9cblx0Z2V0SGVhZGVyQWN0aW9ucygpOiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RBY3Rpb24+IHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5jb250ZW50Py5oZWFkZXI/LmFjdGlvbnMgfHwge307XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBmb290ZXIgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICogQHJldHVybnMgQSBzZXQgb2YgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBpbmRleGVkIGJ5IGFuIGl0ZXJhYmxlIGtleVxuXHQgKi9cblx0Z2V0Rm9vdGVyQWN0aW9ucygpOiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RBY3Rpb24+IHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5jb250ZW50Py5mb290ZXI/LmFjdGlvbnMgfHwge307XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB2YXJpYW50IG1hbmFnZW1lbnQgYXMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QuXG5cdCAqIEByZXR1cm5zIEEgdHlwZSBvZiB2YXJpYW50IG1hbmFnZW1lbnRcblx0ICovXG5cdGdldFZhcmlhbnRNYW5hZ2VtZW50KCk6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3MudmFyaWFudE1hbmFnZW1lbnQgfHwgVmFyaWFudE1hbmFnZW1lbnRUeXBlLk5vbmU7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBhbm5vdGF0aW9uIFBhdGggZm9yIHRoZSBTUFYgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKiBAcmV0dXJucyBUaGUgYW5ub3RhdGlvbiBwYXRoIGZvciB0aGUgZGVmYXVsdCBTUFYgb3IgdW5kZWZpbmVkLlxuXHQgKi9cblx0Z2V0RGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGgoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5kZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGNvbnRyb2wgY29uZmlndXJhdGlvbiBhcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBmb3IgYSBzcGVjaWZpYyBhbm5vdGF0aW9uIHBhdGguXG5cdCAqIEBwYXJhbSBzQW5ub3RhdGlvblBhdGggVGhlIHJlbGF0aXZlIGFubm90YXRpb24gcGF0aFxuXHQgKiBAcmV0dXJucyBUaGUgY29udHJvbCBjb25maWd1cmF0aW9uXG5cdCAqL1xuXHRnZXRDb250cm9sQ29uZmlndXJhdGlvbjxUID0gQ29udHJvbE1hbmlmZXN0Q29uZmlndXJhdGlvbj4oc0Fubm90YXRpb25QYXRoOiBzdHJpbmcpOiBUIHtcblx0XHRyZXR1cm4gKHRoaXMub01hbmlmZXN0U2V0dGluZ3M/LmNvbnRyb2xDb25maWd1cmF0aW9uPy5bc0Fubm90YXRpb25QYXRoXSB8fCB7fSkgYXMgVDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGNvbmZpZ3VyZWQgc2V0dGluZ3MgZm9yIGEgZ2l2ZW4gbmF2aWdhdGlvbiB0YXJnZXQuXG5cdCAqIEBwYXJhbSBuYXZpZ2F0aW9uT3JDb2xsZWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgbmF2aWdhdGlvbiB0byBjaGVja1xuXHQgKiBAcmV0dXJucyBUaGUgbmF2aWdhdGlvbiBzZXR0aW5ncyBjb25maWd1cmF0aW9uXG5cdCAqL1xuXHRnZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uT3JDb2xsZWN0aW9uTmFtZTogc3RyaW5nKTogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbiB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3M/Lm5hdmlnYXRpb24/LltuYXZpZ2F0aW9uT3JDb2xsZWN0aW9uTmFtZV0gfHwge307XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB2aWV3IGxldmVsLlxuXHQgKiBAcmV0dXJucyBUaGUgY3VycmVudCB2aWV3IGxldmVsXG5cdCAqL1xuXHRnZXRWaWV3TGV2ZWwoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8udmlld0xldmVsIHx8IC0xO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY29udGVudERlbnNpdGllcyBzZXR0aW5nIG9mIHRoZSBhcHBsaWNhdGlvbi5cblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgY29udGVudCBkZW5zaXR5XG5cdCAqL1xuXHRnZXRDb250ZW50RGVuc2l0aWVzKCk6IENvbnRlbnREZW5zaXRpZXNUeXBlIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0dGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8uY29udGVudERlbnNpdGllcyB8fCB7XG5cdFx0XHRcdGNvenk6IGZhbHNlLFxuXHRcdFx0XHRjb21wYWN0OiBmYWxzZVxuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIHdoZXRoZXIgd2UgYXJlIGluIEZDTCBtb2RlIG9yIG5vdC5cblx0ICogQHJldHVybnMgYHRydWVgIGlmIHdlIGFyZSBpbiBGQ0xcblx0ICovXG5cdGlzRmNsRW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISF0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5mY2xFbmFibGVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IHNldHRpbmdzIChhcHBsaWNhdGlvbiAvIHNoZWxsKSBhbGxvd3MgdXMgdG8gdXNlIGNvbmRlbnNlZCBsYXlvdXQuXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB3ZSBjYW4gdXNlIHRoZSBjb25kZW5zZWQgbGF5b3V0LCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdGlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50KCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IG1hbmlmZXN0Q29udGVudERlbnNpdHkgPSB0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5jb250ZW50RGVuc2l0aWVzIHx8IHtcblx0XHRcdGNvenk6IGZhbHNlLFxuXHRcdFx0Y29tcGFjdDogZmFsc2Vcblx0XHR9O1xuXHRcdGNvbnN0IHNoZWxsQ29udGVudERlbnNpdHkgPSB0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5zaGVsbENvbnRlbnREZW5zaXR5IHx8IFwiY29tcGFjdFwiO1xuXHRcdGxldCBpc0NvbmRlbnNlZExheW91dENvbXBsaWFudCA9IHRydWU7XG5cdFx0Y29uc3QgaXNTbWFsbERldmljZSA9ICFEZXZpY2Uuc3lzdGVtLmRlc2t0b3AgfHwgRGV2aWNlLnJlc2l6ZS53aWR0aCA8PSAzMjA7XG5cdFx0aWYgKFxuXHRcdFx0KG1hbmlmZXN0Q29udGVudERlbnNpdHk/LmNvenkgPT09IHRydWUgJiYgbWFuaWZlc3RDb250ZW50RGVuc2l0eT8uY29tcGFjdCAhPT0gdHJ1ZSkgfHxcblx0XHRcdHNoZWxsQ29udGVudERlbnNpdHkgPT09IFwiY296eVwiIHx8XG5cdFx0XHRpc1NtYWxsRGV2aWNlXG5cdFx0KSB7XG5cdFx0XHRpc0NvbmRlbnNlZExheW91dENvbXBsaWFudCA9IGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gaXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQ7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgc2V0dGluZ3MgKGFwcGxpY2F0aW9uIC8gc2hlbGwpIHVzZXMgY29tcGFjdCBtb2RlIGFzIGNvbnRlbnQgZGVuc2l0eS5cblx0ICogQHJldHVybnMgYHRydWVgIGlmIGNvbXBhY3QgbW9kZSBpcyBzZXQgYXMgY29udGVudCBkZW5zaXR5LCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdGlzQ29tcGFjdFR5cGUoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgbWFuaWZlc3RDb250ZW50RGVuc2l0eSA9IHRoaXMuZ2V0Q29udGVudERlbnNpdGllcygpO1xuXHRcdGNvbnN0IHNoZWxsQ29udGVudERlbnNpdHkgPSB0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5zaGVsbENvbnRlbnREZW5zaXR5IHx8IFwiY29tcGFjdFwiO1xuXHRcdHJldHVybiBtYW5pZmVzdENvbnRlbnREZW5zaXR5LmNvbXBhY3QgIT09IGZhbHNlIHx8IHNoZWxsQ29udGVudERlbnNpdHkgPT09IFwiY29tcGFjdFwiID8gdHJ1ZSA6IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgb3V0Ym91bmQgbmF2aWdhdGlvbiBlbnRyaWVzIGRlZmluZWQgaW4gdGhlIGNyb3NzLW5hdmlnYXRpb24gc2VjdGlvbiBvZiB0aGUgYXBwbGljYXRpb24gbWFuaWZlc3QuXG5cdCAqIEByZXR1cm5zIFRoZSBlbnRyaWVzIGlmIHRoZXkgZXhpc3QsIG90aGVyd2lzZSB1bmRlZmluZWRcblx0ICovXG5cdGdldE91dGJvdW5kTmF2aWdhdGlvbkVudHJpZXMoKTogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RPdXRib3VuZEVudHJ5PiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwQ29tcG9uZW50Py5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmFwcFwiKT8uY3Jvc3NOYXZpZ2F0aW9uPy5vdXRib3VuZHM7XG5cdH1cblxuXHQvL3JlZ2lvbiBPUCBTcGVjaWZpY1xuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHNlY3Rpb24gbGF5b3V0IGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKiBAcmV0dXJucyBUaGUgdHlwZSBvZiBzZWN0aW9uIGxheW91dCBvZiB0aGUgb2JqZWN0IHBhZ2Vcblx0ICovXG5cdGdldFNlY3Rpb25MYXlvdXQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gKHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MpLnNlY3Rpb25MYXlvdXQgPz8gXCJUYWJzXCI7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBzZWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICogQHJldHVybnMgQSBzZXQgb2YgbWFuaWZlc3Qgc2VjdGlvbnMgaW5kZXhlZCBieSBhbiBpdGVyYWJsZSBrZXlcblx0ICovXG5cdGdldFNlY3Rpb25zKCk6IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdFNlY3Rpb24+IHtcblx0XHRyZXR1cm4gbWVyZ2UoXG5cdFx0XHR7fSxcblx0XHRcdHRoaXMub01hbmlmZXN0U2V0dGluZ3MuY29udHJvbENvbmZpZ3VyYXRpb24/LltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GYWNldHNcIl0/LnNlY3Rpb25zID8/IHt9LFxuXHRcdFx0KHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MpLmNvbnRlbnQ/LmJvZHk/LnNlY3Rpb25zID8/IHt9XG5cdFx0KSBhcyB1bmtub3duIGFzIENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdFNlY3Rpb24+O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdHJ1ZSBvZiB0aGUgaGVhZGVyIG9mIHRoZSBhcHBsaWNhdGlvbiBpcyBlZGl0YWJsZSBhbmQgc2hvdWxkIGFwcGVhciBpbiB0aGUgZmFjZXRzLlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGhlYWRlciBpZiBlZGl0YWJsZVxuXHQgKi9cblx0aXNIZWFkZXJFZGl0YWJsZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRTaG93T2JqZWN0UGFnZUhlYWRlcigpICYmICEhKHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MpLmVkaXRhYmxlSGVhZGVyQ29udGVudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRydWUgaWYgd2Ugc2hvdWxkIHVzZSB0ZXh0IGluc3RlYWQgb2YgSWxsdXN0cmF0ZWRNZXNzYWdlIGZvciB0aGUgbm9EYXRhIGFnZ3JlZ2F0aW9uIGluIHRoZSB3aG9sZSBwYWdlLlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgd2Ugc2hvdWxkIHVzZSB0ZXh0IGZvciBub0RhdGEgYWdncmVnYXRpb25cblx0ICovXG5cdGdldFVzZVRleHRGb3JOb0RhdGFNZXNzYWdlcygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gKHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MpLnVzZVRleHRGb3JOb0RhdGFNZXNzYWdlcyA/PyBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRydWUgaWYgd2Ugc2hvdWxkIHNob3cgdGhlIG9iamVjdCBwYWdlIGhlYWRlci5cblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBoZWFkZXIgc2hvdWxkIGJlIGRpc3BsYXllZFxuXHQgKi9cblx0Z2V0U2hvd0FuY2hvckJhcigpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gKHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MpLmNvbnRlbnQ/LmhlYWRlcj8uYW5jaG9yQmFyVmlzaWJsZSAhPT0gdW5kZWZpbmVkXG5cdFx0XHQ/ICEhKHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MpLmNvbnRlbnQ/LmhlYWRlcj8uYW5jaG9yQmFyVmlzaWJsZVxuXHRcdFx0OiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlZmluZXMgd2hldGhlciBvciBub3QgdGhlIHNlY3Rpb24gd2lsbCBiZSBkaXNwbGF5ZWQgaW4gZGlmZmVyZW50IHRhYnMuXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgaWNvbiB0YWIgYmFyIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2Ygc2Nyb2xsaW5nXG5cdCAqL1xuXHR1c2VJY29uVGFiQmFyKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldFNob3dBbmNob3JCYXIoKSAmJiAodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuc2VjdGlvbkxheW91dCA9PT0gXCJUYWJzXCI7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3QgcGFnZSBoZWFkZXIgaXMgdG8gYmUgc2hvd24uXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0IHBhZ2UgaGVhZGVyIGlzIHRvIGJlIGRpc3BsYXllZFxuXHQgKi9cblx0Z2V0U2hvd09iamVjdFBhZ2VIZWFkZXIoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzKS5jb250ZW50Py5oZWFkZXI/LnZpc2libGUgIT09IHVuZGVmaW5lZFxuXHRcdFx0PyAhISh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzKS5jb250ZW50Py5oZWFkZXI/LnZpc2libGVcblx0XHRcdDogdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGxhenkgbG9hZGVyIHNob3VsZCBiZSBlbmFibGVkIGZvciB0aGlzIHBhZ2Ugb3Igbm90LlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGxhenkgbG9hZGVyIHNob3VsZCBiZSBlbmFibGVkXG5cdCAqL1xuXHRnZXRFbmFibGVMYXp5TG9hZGluZygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5lbmFibGVMYXp5TG9hZGluZyA/PyBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSB0cmFuc3BvcnQgc2VsZWN0aW9uIGRlZmluaXRpb24uXG5cdCAqIEByZXR1cm5zIERlZmluaXRpb24gd2l0aCB0cmFuc3BvcnQgcHJvcGVydHkgYW5kIHNlbGVjdCBhY3Rpb25cblx0ICovXG5cdGdldFRyYW5zcG9ydFNlbGVjdGlvbigpOiBUcmFuc3BvcnRTZWxlY3Rpb25EZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gKHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MpLmNvbnRlbnQ/LnRyYW5zcG9ydFNlbGVjdGlvbjtcblx0fVxuXG5cdC8vZW5kcmVnaW9uIE9QIFNwZWNpZmljXG5cblx0Ly9yZWdpb24gTFIgU3BlY2lmaWNcblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBtdWx0aXBsZSB2aWV3IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbWFuaWZlc3QuXG5cdCAqIEByZXR1cm5zIFRoZSB2aWV3cyB0aGF0IHJlcHJlc2VudCB0aGUgbWFuaWZlc3Qgb2JqZWN0XG5cdCAqL1xuXHRnZXRWaWV3Q29uZmlndXJhdGlvbigpOiBNdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuICh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzKS52aWV3cztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHN0aWNreU11bHRpVGFiSGVhZGVyIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbWFuaWZlc3QuXG5cdCAqIEByZXR1cm5zIFJldHVybnMgVHJ1ZSBpZiBzdGlja3lNdWx0aVRhYkhlYWRlciBpcyBlbmFibGVkIG9yIHVuZGVmaW5lZFxuXHQgKi9cblx0Z2V0U3RpY2t5TXVsdGlUYWJIZWFkZXJDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGJTdGlja3lNdWx0aVRhYkhlYWRlciA9ICh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzKS5zdGlja3lNdWx0aVRhYkhlYWRlcjtcblx0XHRyZXR1cm4gYlN0aWNreU11bHRpVGFiSGVhZGVyICE9PSB1bmRlZmluZWQgPyBiU3RpY2t5TXVsdGlUYWJIZWFkZXIgOiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgS1BJIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbWFuaWZlc3QuXG5cdCAqIEByZXR1cm5zIFJldHVybnMgYSBtYXAgYmV0d2VlbiBLUEkgbmFtZXMgYW5kIHRoZWlyIHJlc3BlY3RpdmUgY29uZmlndXJhdGlvblxuXHQgKi9cblx0Z2V0S1BJQ29uZmlndXJhdGlvbigpOiB7IFtrcGlOYW1lOiBzdHJpbmddOiBLUElDb25maWd1cmF0aW9uIH0ge1xuXHRcdHJldHVybiAodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncykua2V5UGVyZm9ybWFuY2VJbmRpY2F0b3JzIHx8IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgZmlsdGVyIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbWFuaWZlc3QuXG5cdCAqIEBwYXJhbSBjb25maWdQYXRoXG5cdCAqIEByZXR1cm5zIFRoZSBmaWx0ZXIgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBtYW5pZmVzdFxuXHQgKi9cblx0Z2V0RmlsdGVyQ29uZmlndXJhdGlvbihjb25maWdQYXRoID0gXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCIpOiBGaWx0ZXJNYW5pZmVzdENvbmZpZ3VyYXRpb24ge1xuXHRcdHJldHVybiB0aGlzLmdldENvbnRyb2xDb25maWd1cmF0aW9uPEZpbHRlck1hbmlmZXN0Q29uZmlndXJhdGlvbj4oY29uZmlnUGF0aCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBlbnRpdHkgc2V0cyB0byBiZSBkaXNwbGF5ZWQuXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgZW50aXR5IHNldHNcblx0ICovXG5cdGhhc011bHRpcGxlRW50aXR5U2V0cygpOiBib29sZWFuIHtcblx0XHRjb25zdCB2aWV3Q29uZmlnID0gdGhpcy5nZXRWaWV3Q29uZmlndXJhdGlvbigpIHx8IHsgcGF0aHM6IFtdIH07XG5cdFx0Y29uc3QgbWFuaWZlc3RFbnRpdHlTZXQgPSB0aGlzLm9NYW5pZmVzdFNldHRpbmdzLmVudGl0eVNldDtcblx0XHRyZXR1cm4gKFxuXHRcdFx0dmlld0NvbmZpZy5wYXRocy5maW5kKChwYXRoOiBWaWV3Q29uZmlndXJhdGlvbikgPT4ge1xuXHRcdFx0XHRpZiAoKHBhdGggYXMgQ3VzdG9tVmlld1RlbXBsYXRlQ29uZmlndXJhdGlvbik/LnRlbXBsYXRlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMocGF0aCBhcyBDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbikpIHtcblx0XHRcdFx0XHRjb25zdCB7IHByaW1hcnksIHNlY29uZGFyeSB9ID0gcGF0aCBhcyBDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbjtcblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0cHJpbWFyeS5zb21lKChwcmltYXJ5UGF0aCkgPT4gcHJpbWFyeVBhdGguZW50aXR5U2V0ICYmIHByaW1hcnlQYXRoLmVudGl0eVNldCAhPT0gbWFuaWZlc3RFbnRpdHlTZXQpIHx8XG5cdFx0XHRcdFx0XHRzZWNvbmRhcnkuc29tZSgoc2Vjb25kYXJ5UGF0aCkgPT4gc2Vjb25kYXJ5UGF0aC5lbnRpdHlTZXQgJiYgc2Vjb25kYXJ5UGF0aC5lbnRpdHlTZXQgIT09IG1hbmlmZXN0RW50aXR5U2V0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cGF0aCA9IHBhdGggYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdFx0XHRcdHJldHVybiBwYXRoLmVudGl0eVNldCAmJiBwYXRoLmVudGl0eVNldCAhPT0gbWFuaWZlc3RFbnRpdHlTZXQ7XG5cdFx0XHRcdH1cblx0XHRcdH0pICE9PSB1bmRlZmluZWRcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGNvbnRleHQgcGF0aCBmb3IgdGhlIHRlbXBsYXRlIGlmIGl0IGlzIHNwZWNpZmllZCBpbiB0aGUgbWFuaWZlc3QuXG5cdCAqIEByZXR1cm5zIFRoZSBjb250ZXh0IHBhdGggZm9yIHRoZSB0ZW1wbGF0ZVxuXHQgKi9cblx0Z2V0Q29udGV4dFBhdGgoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8uY29udGV4dFBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlIGlmIHRoZSBjb25maWd1cmF0aW9uIGlzIGEgc2luZ2xlIHBhdGggY29uZmlndXJhdGlvbi5cblx0ICogQHBhcmFtIHZpZXdDb25maWcgVGhlIHZpZXcgY29uZmlndXJhdGlvblxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBpcyBhIHNpbmdsZSBwYXRoIGNvbmZpZ3VyYXRpb25cblx0ICovXG5cdGlzVmlld1BhdGhDb25maWd1cmF0aW9uKHZpZXdDb25maWc6IFZpZXdDb25maWd1cmF0aW9uKTogdmlld0NvbmZpZyBpcyBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24ge1xuXHRcdHJldHVybiBcImFubm90YXRpb25QYXRoXCIgaW4gdmlld0NvbmZpZyAmJiAhKFwicHJpbWFyeVwiIGluIHZpZXdDb25maWcpICYmICEoXCJzZWNvbmRhcnlcIiBpbiB2aWV3Q29uZmlnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbmZpZ3VyYXRpb24gaXMgYSBjb21iaW5lZCBjb25maWd1cmF0aW9uLlxuXHQgKiBAcGFyYW0gdmlld0NvbmZpZyBUaGUgdmlldyBjb25maWd1cmF0aW9uXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGlzIGlzIGEgY29tYmluZWQgY29uZmlndXJhdGlvblxuXHQgKi9cblx0aXNDb21iaW5lZFZpZXdDb25maWd1cmF0aW9uKHZpZXdDb25maWc6IFZpZXdDb25maWd1cmF0aW9uKTogdmlld0NvbmZpZyBpcyBDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbiB7XG5cdFx0cmV0dXJuICF0aGlzLmlzQ3VzdG9tVmlld0NvbmZpZ3VyYXRpb24odmlld0NvbmZpZykgJiYgIXRoaXMuaXNWaWV3UGF0aENvbmZpZ3VyYXRpb24odmlld0NvbmZpZylcblx0XHRcdD8gdmlld0NvbmZpZy5wcmltYXJ5Py5sZW5ndGggPiAwICYmIHZpZXdDb25maWcuc2Vjb25kYXJ5Py5sZW5ndGggPiAwXG5cdFx0XHQ6IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29uZmlndXJhdGlvbiBpcyBhIGN1c3RvbSBjb25maWd1cmF0aW9uLlxuXHQgKiBAcGFyYW0gdmlld0NvbmZpZyBUaGUgdmlldyBjb25maWd1cmF0aW9uXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGlzIGlzIGEgY3VzdG9tIGNvbmZpZ3VyYXRpb25cblx0ICovXG5cdGlzQ3VzdG9tVmlld0NvbmZpZ3VyYXRpb24odmlld0NvbmZpZzogVmlld0NvbmZpZ3VyYXRpb24pOiB2aWV3Q29uZmlnIGlzIEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb24ge1xuXHRcdHJldHVybiBcInRlbXBsYXRlXCIgaW4gdmlld0NvbmZpZztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIG11bHRpcGxlIHZpc3VhbGl6YXRpb25zLlxuXHQgKiBAcGFyYW0gdmlld0NvbmZpZyBUaGUgcGF0aCBmcm9tIHRoZSB2aWV3XG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgdmlzdWFsaXphdGlvbnNcblx0ICovXG5cdGhhc011bHRpcGxlVmlzdWFsaXphdGlvbnModmlld0NvbmZpZz86IFZpZXdDb25maWd1cmF0aW9uKTogYm9vbGVhbiB7XG5cdFx0aWYgKCF2aWV3Q29uZmlnKSB7XG5cdFx0XHRjb25zdCBtdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbiA9IHRoaXMuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKSB8fCB7IHBhdGhzOiBbXSB9O1xuXHRcdFx0cmV0dXJuIG11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uLnBhdGhzLnNvbWUoKHBhdGgpID0+IHRoaXMuaXNDb21iaW5lZFZpZXdDb25maWd1cmF0aW9uKHBhdGgpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuaXNDb21iaW5lZFZpZXdDb25maWd1cmF0aW9uKHZpZXdDb25maWcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgZW50aXR5IHNldCBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICogQHJldHVybnMgVGhlIGVudGl0eSBzZXQgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3Rcblx0ICovXG5cdGdldEVudGl0eVNldCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLm9NYW5pZmVzdFNldHRpbmdzLmVudGl0eVNldDtcblx0fVxuXG5cdGhhc0lubGluZUVkaXQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICEhdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5pbmxpbmVFZGl0Py5kaXNhYmxlZEZpZWxkcyB8fCAodGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8uaW5saW5lRWRpdD8uZW5hYmxlZEZpZWxkcz8ubGVuZ3RoID8/IDApID4gMDtcblx0fVxuXG5cdGdldElubGluZUVkaXRFbmFibGVkRmllbGRzKCk6IHN0cmluZ1tdIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8uaW5saW5lRWRpdD8uZW5hYmxlZEZpZWxkcyA/PyBbXTtcblx0fVxuXG5cdGdldElubGluZUVkaXREaXNhYmxlZEZpZWxkcygpOiBzdHJpbmdbXSB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3M/LmlubGluZUVkaXQ/LmRpc2FibGVkRmllbGRzID8/IFtdO1xuXHR9XG5cblx0Z2V0SW5saW5lQ29ubmVjdGVkRmllbGRzKCk6IChzdHJpbmcgfCBzdHJpbmdbXSlbXSB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3M/LmlubGluZUVkaXQ/LmNvbm5lY3RlZEZpZWxkcyA/PyBbXTtcblx0fVxuXHQvL2VuZCByZWdpb24gTFIgU3BlY2lmaWNcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWFuaWZlc3RXcmFwcGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztFQTZCQSxTQUFTQSxvQkFBb0JBLENBQW1CQyxHQUFrQixFQUFFQyxRQUFpQixFQUFRO0lBQzVGLE1BQU1DLGFBQWEsR0FBR0YsR0FBRyxHQUFHQyxRQUFRLENBQUM7SUFDckMsSUFBSUUsS0FBSyxDQUFDQyxPQUFPLENBQUNGLGFBQWEsQ0FBQyxFQUFFO01BQ2pDQSxhQUFhLENBQUNHLE9BQU8sQ0FBRUMsS0FBSyxJQUFLUCxvQkFBb0IsQ0FBQ08sS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDaEYsQ0FBQyxNQUFNLElBQUlKLGFBQWEsSUFBSSxPQUFPQSxhQUFhLEtBQUssUUFBUSxJQUFJLENBQUNBLGFBQWEsQ0FBQ0ssUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO01BQzlGUCxHQUFHLENBQUNDLFFBQVEsQ0FBQyxHQUFJLEdBQUcsR0FBR0MsYUFBNEI7SUFDcEQ7RUFDRDs7RUFFQTtBQUNBO0FBQ0E7RUFGQSxJQUdNTSxlQUFlO0lBQ3BCO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDLFNBQUFBLGdCQUNTQyxpQkFBdUMsRUFDdkNDLFlBQTJCLEVBQ2xDO01BQUEsS0FGT0QsaUJBQXVDLEdBQXZDQSxpQkFBdUM7TUFBQSxLQUN2Q0MsWUFBMkIsR0FBM0JBLFlBQTJCO01BRW5DO01BQ0FYLG9CQUFvQixDQUFDLElBQUksQ0FBQ1UsaUJBQWlCLEVBQUUsK0JBQStCLENBQUM7TUFFNUUsSUFBSSxDQUFDQSxpQkFBaUIsQ0FBZ0NFLEtBQUssRUFBRUMsS0FBSyxDQUFDUCxPQUFPLENBQUVRLElBQUksSUFBSztR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
@@ -95,6 +95,14 @@ class ManifestWrapper {
95
95
  return !!(this.oManifestSettings as ListReportManifestSettings)?.useHiddenFilterBar;
96
96
  }
97
97
 
98
+ getCollapsedHeaderFragment(): string | undefined {
99
+ return (this.oManifestSettings as ListReportManifestSettings)?.content?.header?.customHeader?.collapsedHeaderFragment;
100
+ }
101
+
102
+ getExpandedHeaderFragment(): string | undefined {
103
+ return (this.oManifestSettings as ListReportManifestSettings)?.content?.header?.customHeader?.expandedHeaderFragment;
104
+ }
105
+
98
106
  /**
99
107
  * Checks whether the current environment is a desktop or not.
100
108
  * @returns `true` if we are on a desktop
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
- * (c) Copyright 2009-2024 SAP SE. All rights reserved
3
+ * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
5
  sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/common/AnnotationConverter", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/services/EnvironmentServiceFactory", "../helpers/StableIdHelper"], function (BindingToolkit, AnnotationConverter, TypeGuards, EnvironmentServiceFactory, StableIdHelper) {
6
6
  "use strict";
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
- * (c) Copyright 2009-2024 SAP SE. All rights reserved
3
+ * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
5
  sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "./ConverterContext", "./ManifestSettings", "./MetaModelConverter", "./templates/ListReportConverter", "./templates/ObjectPageConverter"], function (IssueManager, ConverterContext, ManifestSettings, MetaModelConverter, ListReportConverter, ObjectPageConverter) {
6
6
  "use strict";