@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
@@ -34,6 +34,7 @@ import type ODataPropertyBinding from "sap/ui/model/odata/v4/ODataPropertyBindin
34
34
  import type { HiddenDraft } from "../converters/ManifestSettings";
35
35
  import { getInvolvedDataModelObjects } from "../converters/MetaModelConverter";
36
36
  import type { SideEffectsTargetType } from "../services/SideEffectsServiceFactory";
37
+ import { addSelf } from "./collaboration/CollaborationCommon";
37
38
  import UiModelConstants from "./editFlow/editFlowConstants";
38
39
  import messageHandling from "./messageHandler/messageHandling";
39
40
 
@@ -61,13 +62,13 @@ class InternalRouting extends ControllerExtension {
61
62
 
62
63
  private _oRouterProxy!: RouterProxy;
63
64
 
64
- private _fnRouteMatchedBound!: Function;
65
+ private _fnRouteMatchedBound?: Function;
65
66
 
66
67
  protected _oTargetInformation!: RoutingTarget;
67
68
 
68
69
  @methodOverride()
69
70
  onExit(): void {
70
- if (this._oRoutingService) {
71
+ if (this._oRoutingService && this._fnRouteMatchedBound) {
71
72
  this._oRoutingService.detachRouteMatched(this._fnRouteMatchedBound);
72
73
  }
73
74
  }
@@ -96,8 +97,11 @@ class InternalRouting extends ControllerExtension {
96
97
  .getService("routingService")
97
98
  .then((oRoutingService: RoutingService) => {
98
99
  this._oRoutingService = oRoutingService;
99
- this._fnRouteMatchedBound = this._onRouteMatched.bind(this);
100
- this._oRoutingService.attachRouteMatched({}, this._fnRouteMatchedBound);
100
+ if (this._oPageComponent?.isA("sap.fe.core.ReuseComponent") !== true) {
101
+ // Reuse components can potentially embed a view with a page controller, we want to avoid attaching the route matched event in this case
102
+ this._fnRouteMatchedBound = this._onRouteMatched.bind(this);
103
+ this._oRoutingService.attachRouteMatched({}, this._fnRouteMatchedBound);
104
+ }
101
105
  this._oTargetInformation = oRoutingService.getTargetInformationFor(this._oPageComponent || this._oView)! ?? {};
102
106
  return;
103
107
  })
@@ -252,8 +256,18 @@ class InternalRouting extends ControllerExtension {
252
256
  const internalModel = this._oView.getModel("internal");
253
257
  internalModel.setProperty("/paginatorCurrentContext", null);
254
258
 
255
- // Storing the selected context to use it in internal route navigation if neccessary.
256
- const overrideNav = await this.base.getView().getController().routing.onBeforeNavigation({ bindingContext: context });
259
+ // Storing the selected context to use it in internal route navigation if necessary.
260
+ let contextToNavigate: Context | null = context;
261
+ let hiddenBinding: ODataContextBinding | undefined;
262
+ if (parameters.updateFCLLevel === -1) {
263
+ // If we're navigating back, we need to find the "parent" context
264
+ const backPath = this._oRoutingService.getPathToNavigateBack(context.getPath());
265
+ // As we don't call the extension when navigating back to the LR, backPath is never empty so we can safely create a context
266
+ hiddenBinding = context.getModel().bindContext(backPath);
267
+ contextToNavigate = hiddenBinding.getBoundContext();
268
+ }
269
+ const overrideNav = await this.base.getView().getController().routing.onBeforeNavigation({ bindingContext: contextToNavigate });
270
+ hiddenBinding?.destroy();
257
271
  if (overrideNav) {
258
272
  internalModel.setProperty("/paginatorCurrentContext", context);
259
273
  return Promise.resolve(true);
@@ -797,12 +811,13 @@ class InternalRouting extends ControllerExtension {
797
811
  sContextPath =
798
812
  (oPageComponent && oPageComponent.getContextPath && oPageComponent.getContextPath()) || (sEntitySet && `/${sEntitySet}`),
799
813
  oMetaModel = oModel.getMetaModel(),
814
+ isCollaborationDraftSupported = ModelHelper.isCollaborationDraftSupported(oMetaModel),
800
815
  mParameters: BindContextParameters = {
801
816
  $$groupId: "$auto.Heroes",
802
817
  $$updateGroupId: "$auto",
803
818
  $$patchWithoutSideEffects: true
804
819
  };
805
- if (this.base.editFlow.isInlineEditPossible()) {
820
+ if (this.base.inlineEditFlow.isInlineEditPossible()) {
806
821
  // if inline edit is enabled on the page and this is the active entity, we need to update the group id to inline
807
822
  mParameters.$$updateGroupId = sPath.includes("IsActiveEntity=true") ? CommonUtils.INLINEEDIT_UPDATEGROUPID : "$auto";
808
823
  }
@@ -855,6 +870,10 @@ class InternalRouting extends ControllerExtension {
855
870
  }
856
871
  propertiesToSelect.push(...alternateAndSecondaryKeys);
857
872
 
873
+ if (isCollaborationDraftSupported && oDraftRoot) {
874
+ propertiesToSelect.push("DraftAdministrativeData/DraftAdministrativeUser");
875
+ }
876
+
858
877
  if (propertiesToSelect.length) {
859
878
  mParameters.$select = propertiesToSelect.join(",");
860
879
  }
@@ -874,7 +893,11 @@ class InternalRouting extends ControllerExtension {
874
893
  this.base.messageHandler.holdMessagesForControl(this._oView);
875
894
  });
876
895
  oHiddenBinding.attachEventOnce("dataReceived", this.onDataReceived.bind(this));
877
- return oHiddenBinding.getBoundContext();
896
+ const boundContext = oHiddenBinding.getBoundContext();
897
+ if (isCollaborationDraftSupported && sPath.includes("IsActiveEntity=false")) {
898
+ addSelf(oMetaModel, sContextPath!, oModel, boundContext);
899
+ }
900
+ return boundContext;
878
901
  }
879
902
  }
880
903
 
@@ -1127,9 +1150,9 @@ class InternalRouting extends ControllerExtension {
1127
1150
  const oViewData = this._oView.getViewData();
1128
1151
  const oContext = this._oView.getBindingContext();
1129
1152
  const oMetaModel = oContext.getModel().getMetaModel();
1130
- const navigationParameters = {
1153
+ const navigationParameters: RoutingNavigationParameters = {
1131
1154
  noPreservationCache: true,
1132
- sLayout: this._oView.getModel("fclhelper").getProperty("/actionButtonsInfo/closeColumn")
1155
+ layout: this._oView.getModel("fclhelper").getProperty("/actionButtonsInfo/closeColumn")
1133
1156
  };
1134
1157
 
1135
1158
  const isDocumentModified =
@@ -1147,6 +1170,8 @@ class InternalRouting extends ControllerExtension {
1147
1170
  } else if (oViewData?.viewLevel === 1 && ModelHelper.isDraftSupported(oMetaModel, oContext.getPath())) {
1148
1171
  draft.processDataLossOrDraftDiscardConfirmation(
1149
1172
  () => {
1173
+ // We don't have callExtension=true in this case, as there's a user validation with the dataloss dialog
1174
+ // and it wouldn't make sense to cancel the navigation after this confirmation
1150
1175
  this.navigateBackFromContext(oContext, navigationParameters);
1151
1176
  },
1152
1177
  Function.prototype,
@@ -1156,6 +1181,7 @@ class InternalRouting extends ControllerExtension {
1156
1181
  draft.NavigationType.BackNavigation
1157
1182
  );
1158
1183
  } else {
1184
+ navigationParameters.callExtension = true;
1159
1185
  this.navigateBackFromContext(oContext, navigationParameters);
1160
1186
  }
1161
1187
  // Removes transition message for the specified context
@@ -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/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassSupport", "sap/fe/core/formatters/ValueFormatter", "sap/m/Popover", "sap/ui/core/Lib", "sap/ui/core/Locale", "sap/ui/core/format/DateFormat", "sap/ui/core/format/NumberFormat", "sap/ui/core/message/MessageType", "sap/ui/core/mvc/ControllerExtension", "sap/ui/model/Filter", "sap/ui/model/Sorter", "sap/ui/model/json/JSONModel"], function (Log, Localization, ClassSupport, valueFormatters, Popover, Library, Locale, DateFormat, NumberFormat, MessageType, ControllerExtension, Filter, Sorter, JSONModel) {
6
6
  "use strict";
@@ -1,11 +1,11 @@
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/Log", "sap/base/util/deepEqual", "sap/base/util/uid", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/messageHandler/messageHandling", "sap/ui/core/Lib", "sap/ui/core/Messaging", "sap/ui/core/message/MessageType", "sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideExecution"], function (Log, deepEqual, uid, ClassSupport, CommonUtils, messageHandling, Library, Messaging, MessageType, ControllerExtension, OverrideExecution) {
6
6
  "use strict";
7
7
 
8
- var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _class, _class2;
8
+ var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _class, _class2;
9
9
  var publicExtension = ClassSupport.publicExtension;
10
10
  var privateExtension = ClassSupport.privateExtension;
11
11
  var finalExtension = ClassSupport.finalExtension;
@@ -14,6 +14,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/uid", "
14
14
  function _inheritsLoose(t, o) { t.prototype = Object.create(o.prototype), t.prototype.constructor = t, _setPrototypeOf(t, o); }
15
15
  function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
16
16
  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }
17
+ /**
18
+ *
19
+ * Defines the message detail relevant for the MessageButton building block to display a popover.
20
+ * @public
21
+ */
17
22
  /**
18
23
  * A controller extension offering message handling.
19
24
  * @hideconstructor
@@ -21,7 +26,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/uid", "
21
26
  * @experimental As of version 1.90.0
22
27
  * @since 1.90.0
23
28
  */
24
- let MessageHandler = (_dec = defineUI5Class("sap.fe.core.controllerextensions.MessageHandler"), _dec2 = privateExtension(), _dec3 = extensible(OverrideExecution.Instead), _dec4 = publicExtension(), _dec5 = finalExtension(), _dec6 = publicExtension(), _dec7 = publicExtension(), _dec8 = finalExtension(), _dec(_class = (_class2 = /*#__PURE__*/function (_ControllerExtension) {
29
+ let MessageHandler = (_dec = defineUI5Class("sap.fe.core.controllerextensions.MessageHandler"), _dec2 = privateExtension(), _dec3 = extensible(OverrideExecution.Instead), _dec4 = publicExtension(), _dec5 = extensible("AfterAsync"), _dec6 = publicExtension(), _dec7 = finalExtension(), _dec8 = publicExtension(), _dec9 = publicExtension(), _dec10 = finalExtension(), _dec(_class = (_class2 = /*#__PURE__*/function (_ControllerExtension) {
25
30
  function MessageHandler() {
26
31
  var _this;
27
32
  _this = _ControllerExtension.call(this) || this;
@@ -78,6 +83,29 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/uid", "
78
83
  return true;
79
84
  }
80
85
 
86
+ /**
87
+ * Allows consumer of a message button BB to decide which bound messages should be shown and how.
88
+ *
89
+ * This hook is called when the message button BB detects a change in the message model.
90
+ * The hooks allows to define behaviour for messages in the message button BB.
91
+ *
92
+ * Consumers will be able to do the following with this hook.
93
+ *
94
+ * 1. Filter out messages so that they are not shown on the message button.
95
+ * 2. group the messages based on their UI.
96
+ * 3. provide a presser handler incase the message should show as a link.
97
+ * @param _messageDetails Object containing the details related to the message.
98
+ * @param _messageDetails.message The message from the message model.Ideally, it must not be modified directly.
99
+ * @param _messageDetails.groupName The group name associated with the current message.
100
+ * @param _messageDetails.activeTitleHandler Function to handle the click event on a message in the MessageButton building block.
101
+ * @returns A promise that must be returned by the overridden method.
102
+ * @public
103
+ * @experimental
104
+ */;
105
+ _proto.beforeShowMessageButton = async function beforeShowMessageButton(_messageDetails) {
106
+ return Promise.resolve();
107
+ }
108
+
81
109
  /**
82
110
  * Register to hold messages unitl a process is complete.
83
111
  *
@@ -368,8 +396,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/uid", "
368
396
  _proto.releaseHoldByControl = async function releaseHoldByControl(control) {
369
397
  const identifier = control?.getId();
370
398
  this.removeHoldKey(identifier);
399
+ this.uiElementIsAvailable = this.uiElementIsAvailable.then(async function () {
400
+ return this.showMessagesWithCondtions();
401
+ }.bind(this));
371
402
  await this.uiElementIsAvailable;
372
- await this.showMessagesWithCondtions();
373
403
  }
374
404
 
375
405
  /**
@@ -405,7 +435,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/uid", "
405
435
  }
406
436
  };
407
437
  return MessageHandler;
408
- }(ControllerExtension), _applyDecoratedDescriptor(_class2.prototype, "getShowBoundMessagesInMessageDialog", [_dec2, _dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "getShowBoundMessagesInMessageDialog"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "showMessageDialog", [_dec4, _dec5], Object.getOwnPropertyDescriptor(_class2.prototype, "showMessageDialog"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "removeTransitionMessages", [_dec6], Object.getOwnPropertyDescriptor(_class2.prototype, "removeTransitionMessages"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "showMessages", [_dec7, _dec8], Object.getOwnPropertyDescriptor(_class2.prototype, "showMessages"), _class2.prototype), _class2)) || _class);
438
+ }(ControllerExtension), _applyDecoratedDescriptor(_class2.prototype, "getShowBoundMessagesInMessageDialog", [_dec2, _dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "getShowBoundMessagesInMessageDialog"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "beforeShowMessageButton", [_dec4, _dec5], Object.getOwnPropertyDescriptor(_class2.prototype, "beforeShowMessageButton"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "showMessageDialog", [_dec6, _dec7], Object.getOwnPropertyDescriptor(_class2.prototype, "showMessageDialog"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "removeTransitionMessages", [_dec8], Object.getOwnPropertyDescriptor(_class2.prototype, "removeTransitionMessages"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "showMessages", [_dec9, _dec10], Object.getOwnPropertyDescriptor(_class2.prototype, "showMessages"), _class2.prototype), _class2)) || _class);
409
439
  return MessageHandler;
410
440
  }, false);
411
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlSGFuZGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwicHJpdmF0ZUV4dGVuc2lvbiIsIl9kZWMzIiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiSW5zdGVhZCIsIl9kZWM0IiwicHVibGljRXh0ZW5zaW9uIiwiX2RlYzUiLCJmaW5hbEV4dGVuc2lvbiIsIl9kZWM2IiwiX2RlYzciLCJfZGVjOCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQ29udHJvbGxlckV4dGVuc2lvbiIsIl90aGlzIiwiY2FsbCIsInN0cmljdFdhcm5pbmdNZXNzYWdlcyIsImhvbGRLZXlzIiwiaG9sZE1zZ3NUb1Nob3ciLCJ1aUVsZW1lbnRJc0F2YWlsYWJsZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJhZGRXYXJuaW5nTWVzc2FnZXNUb01lc3NhZ2VIYW5kbGVyIiwiYU1lc3NhZ2VzIiwiY29uY2F0IiwiaXNTdHJpY3RXYXJuaW5nTWVzc2FnZSIsIm9NZXNzYWdlIiwiZmluZCIsIm1lc3NhZ2UiLCJnZXRDb2RlIiwiZ2V0TWVzc2FnZSIsImdldFR5cGUiLCJnZXREZXNjcmlwdGlvblVybCIsImRlZXBFcXVhbCIsImdldFRhcmdldHMiLCJnZXRQZXJzaXN0ZW50IiwidW5kZWZpbmVkIiwiY2xlYXJTdHJpY3RXYXJuaW5nTWVzc2FnZXMiLCJmaWx0ZXJFcnJvck1lc3NhZ2VzIiwibWVzc2FnZXMiLCJmaWx0ZXIiLCJNZXNzYWdlVHlwZSIsIkVycm9yIiwiZ2V0U2hvd0JvdW5kTWVzc2FnZXNJbk1lc3NhZ2VEaWFsb2ciLCJyZWdpc3RlclRvSG9sZE1lc3NhZ2VzIiwia2V5IiwidW5pcXVlS2V5IiwidWlkIiwiaW5jbHVkZXMiLCJwdXNoIiwicmVzZXRIb2xkS2V5cyIsInNob3dNZXNzYWdlRGlhbG9nIiwibVBhcmFtZXRlcnMiLCJtZXNzYWdlc0luTW9kZWwiLCJNZXNzYWdpbmciLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwiZHVwbGljYXRlV2FybmluZ01lc3NhZ2UiLCJyZW1vdmVNZXNzYWdlcyIsImN1c3RvbU1lc3NhZ2VzIiwib09QSW50ZXJuYWxCaW5kaW5nQ29udGV4dCIsImJhc2UiLCJnZXRWaWV3IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJ2aWV3VHlwZSIsImdldFZpZXdEYXRhIiwiY29udmVydGVyVHlwZSIsImlzT3BlcmF0aW9uRGlhbG9nT3BlbiIsInNldFByb3BlcnR5IiwiYlNob3dCb3VuZE1lc3NhZ2VzIiwib0JpbmRpbmdDb250ZXh0IiwiY29udGV4dCIsInJlamVjdCIsInNldFRpbWVvdXQiLCJwcm9jZXNzQW5kU2hvd01lc3NhZ2VzIiwiYmluZCIsInBhcmFtZXRlcnMiLCJiaW5kaW5nQ29udGV4dCIsInNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsInN1Y2Nlc3MiLCJmYWlsdXJlIiwiY29uY3VycmVudEVkaXRGbGFnIiwiY29udHJvbCIsInNBY3Rpb25OYW1lIiwib25CZWZvcmVTaG93TWVzc2FnZSIsInVuSG9sZEtleSIsImZvcmNlU2hvd1VJRWxlbWVudCIsIm92ZXJyaWRlVUlEZWNpc2lvbiIsInNob3dCb3VuZFN0YXRlTWVzc2FnZXMiLCJuZXdVSURlY2lzaW9ucyIsIm1lc3NhZ2VIYW5kbGluZyIsImdldFVJRGVjaXNpb25zIiwidXBkYXRlVUlEZWNpc2lvbnMiLCJyZW1vdmVIb2xkS2V5IiwiZ2V0SWQiLCJzaG93TWVzc2FnZXNXaXRoQ29uZHRpb25zIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwic2hvd1VJRWxlbWVudCIsImNoZWNrVG9TaG93VUlFbGVtZW50IiwidWlEZWNpc2lvbnMiLCJzaG93TWVzc2FnZXNJblVJIiwicmV0IiwiZXJyIiwiTG9nIiwiZXJyb3IiLCJpbmZvIiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwia2VlcEJvdW5kTWVzc2FnZSIsImtlZXBVbmJvdW5kTWVzc2FnZSIsInNQYXRoVG9CZVJlbW92ZWQiLCJyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsInJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJfY2hlY2tOYXZpZ2F0aW9uVG9FcnJvclBhZ2UiLCJhVW5ib3VuZE1lc3NhZ2VzIiwiZ2V0TWVzc2FnZXMiLCJiU2hvd0JvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwiYUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwiYUN1c3RvbU1lc3NhZ2VzIiwiYklzU3RpY2t5RWRpdE1vZGUiLCJDb21tb25VdGlscyIsImlzU3RpY2t5RWRpdE1vZGUiLCJtTWVzc2FnZVBhZ2VQYXJhbWV0ZXJzIiwiaXNEYXRhUmVjZWl2ZWRFcnJvciIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJuYXZpZ2F0ZUJhY2tUb09yaWdpbiIsImVycm9yVHlwZSIsImlzSW5pdGlhbExvYWQ1MDNFcnJvciIsIm9UZWNobmljYWxEZXRhaWxzIiwiZ2V0VGVjaG5pY2FsRGV0YWlscyIsImh0dHBTdGF0dXMiLCJfZ2V0SFRUUDUwM01lc3NhZ2VQYXJhbWV0ZXJzIiwidGVjaG5pY2FsRGV0YWlscyIsIm1lc3NhZ2VQYWdlUGFyYW1ldGVycyIsInNlY29uZHNCZWZvcmVSZXRyeSIsInJldHJ5QWZ0ZXIiLCJfZ2V0U2Vjb25kc0JlZm9yZVJldHJ5QWZ0ZXIiLCJyZXRyeUFmdGVyTWVzc2FnZSIsImdldFJldHJ5QWZ0ZXJNZXNzYWdlIiwiZFJldHJ5QWZ0ZXIiLCJkQ3VycmVudERhdGVUaW1lIiwiRGF0ZSIsImlDdXJyZW50RGF0ZVRpbWVJbk1pbGxpU2Vjb25kcyIsImdldFRpbWUiLCJpUmV0cnlBZnRlckRhdGVUaW1lSW5NaWxsaVNlY29uZHMiLCJpU2Vjb25kc0JlZm9yZVJldHJ5Iiwib2xkVUlEZWNpc2lvbnMiLCJhbGxNZXNzYWdlc1RvU2hvdyIsIm1lcmdlZFVJRGVjaXNpb24iLCJtZXNzYWdlc1RvU2hvdyIsIkFycmF5IiwiZnJvbSIsIlNldCIsImVsZW1lbnRzIiwidWlFbGVtZW50VG9Vc2UiLCJjb250ZXh0TmVlZHNFdGFnUmVmcmVzaCIsImNvbnRhaW5zQm91bmRUcmFuc2l0aW9uIiwiaW5LZXkiLCJzcGxpY2UiLCJpbmRleE9mIiwiaG9sZE1lc3NhZ2VzRm9yQ29udHJvbCIsImlkZW50aWZpZXIiLCJyZWxlYXNlSG9sZEJ5Q29udHJvbCIsInNob3dNZXNzYWdlcyIsIm1lc3NhZ2VQYWdlTmF2aWdhdGlvbkNhbGxiYWNrIiwiaGFuZGxlU2hlbGxCYWNrIiwic2hlbGxCYWNrIiwib1Jlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiX3JvdXRpbmciLCJuYXZpZ2F0ZVRvTWVzc2FnZVBhZ2UiLCJnZXRUZXh0IiwidGhlbiIsImNhdGNoIiwiQ29udHJvbGxlckV4dGVuc2lvbiIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk1lc3NhZ2VIYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwRXF1YWxcIjtcbmltcG9ydCB1aWQgZnJvbSBcInNhcC9iYXNlL3V0aWwvdWlkXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIHByaXZhdGVFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUge1xuXHRNZXNzYWdlVGVjaG5pY2FsRGV0YWlscyxcblx0TWVzc2FnZVVJRGVjaXNpb25zLFxuXHRTaG93TWVzc2FnZVBhcmFtZXRlcnMsXG5cdFN1cHBvcnRlZFVJRWxlbWVudFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgbWVzc2FnZUhhbmRsaW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9tZXNzYWdlSGFuZGxlci9tZXNzYWdlSGFuZGxpbmdcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCBDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcblxudHlwZSBPYmplY3RXaXRoQ29udmVydGVyVHlwZSA9IG9iamVjdCAmIHtcblx0Y29udmVydGVyVHlwZTogc3RyaW5nO1xufTtcbnR5cGUgTmF2aWdhdGlvblRvRXJyb3JQYWdlUGFyYW1ldGVyID0ge1xuXHRjdXN0b21NZXNzYWdlcz86IEN1c3RvbU1lc3NhZ2VbXTtcblx0Y29uY3VycmVudEVkaXRGbGFnPzogYm9vbGVhbjtcblx0aXNEYXRhUmVjZWl2ZWRFcnJvcj86IGJvb2xlYW47XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbj86IHN0cmluZztcblx0aXNJbml0aWFsTG9hZDUwM0Vycm9yPzogYm9vbGVhbjtcbn07XG5leHBvcnQgdHlwZSBOYXZpZ2F0aW9uVG9FcnJvclBhZ2VSZXN1bHQgPSB7XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbj86IHN0cmluZztcblx0ZXJyb3JUeXBlPzogc3RyaW5nO1xuXHRuYXZpZ2F0ZUJhY2tUb09yaWdpbj86IGJvb2xlYW47XG5cdGhhbmRsZVNoZWxsQmFjaz86IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgQ3VzdG9tTWVzc2FnZSA9IHtcblx0Y29kZTogc3RyaW5nO1xuXHR0ZXh0OiBzdHJpbmc7XG5cdHBlcnNpc3RlbnQ6IGJvb2xlYW47XG5cdHR5cGU6IE1lc3NhZ2VUeXBlO1xufTtcbmV4cG9ydCB0eXBlIFNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyID0ge1xuXHRjdXN0b21NZXNzYWdlcz86IEN1c3RvbU1lc3NhZ2VbXTtcblx0aXNPcGVyYXRpb25EaWFsb2dPcGVuPzogYm9vbGVhbjtcblx0Y29udGV4dD86IENvbnRleHQ7XG5cdGNvbmN1cnJlbnRFZGl0RmxhZz86IGJvb2xlYW47XG5cdGNvbnRyb2w/OiBDb250cm9sO1xuXHRzQWN0aW9uTmFtZT86IHN0cmluZztcblx0YVNlbGVjdGVkQ29udGV4dHM/OiBDb250ZXh0IHwgQ29udGV4dFtdIHwgbnVsbDtcblx0b25CZWZvcmVTaG93TWVzc2FnZT86IChtZXNzYWdlczogTWVzc2FnZVtdLCBzaG93TWVzc2FnZVBhcmFtZXRlcnM6IFNob3dNZXNzYWdlUGFyYW1ldGVycykgPT4gU2hvd01lc3NhZ2VQYXJhbWV0ZXJzO1xuXHR1bkhvbGRLZXk/OiBzdHJpbmc7XG5cdG92ZXJyaWRlVUlEZWNpc2lvbj86IGJvb2xlYW47XG5cdHNob3dCb3VuZFN0YXRlTWVzc2FnZXM/OiBib29sZWFuO1xuXHRib3VuZEFjdGlvbk5hbWU/OiBzdHJpbmc7XG5cdGVudGl0eVNldD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFNob3dNZXNzYWdlc1BhcmFtZXRlcnMgPSBTaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlciAmIHtcblx0bWVzc2FnZVBhZ2VOYXZpZ2F0aW9uQ2FsbGJhY2s/OiBGdW5jdGlvbjtcblx0c2hlbGxCYWNrPzogRnVuY3Rpb24gfCBib29sZWFuO1xuXHRpc0RhdGFSZWNlaXZlZEVycm9yPzogYm9vbGVhbjtcblx0aXNJbml0aWFsTG9hZDUwM0Vycm9yPzogYm9vbGVhbjtcblx0dGl0bGU/OiBzdHJpbmc7XG5cdGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufTtcbi8qKlxuICogQSBjb250cm9sbGVyIGV4dGVuc2lvbiBvZmZlcmluZyBtZXNzYWdlIGhhbmRsaW5nLlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICogQGV4cGVyaW1lbnRhbCBBcyBvZiB2ZXJzaW9uIDEuOTAuMFxuICogQHNpbmNlIDEuOTAuMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5NZXNzYWdlSGFuZGxlclwiKVxuY2xhc3MgTWVzc2FnZUhhbmRsZXIgZXh0ZW5kcyBDb250cm9sbGVyRXh0ZW5zaW9uIHtcblx0cHJpdmF0ZSBzdHJpY3RXYXJuaW5nTWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuXG5cdHByb3RlY3RlZCBiYXNlITogUGFnZUNvbnRyb2xsZXI7XG5cblx0cHJvdGVjdGVkIGhvbGRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdHByb3RlY3RlZCB1aURlY2lzaW9uczogTWVzc2FnZVVJRGVjaXNpb25zIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgaG9sZE1zZ3NUb1Nob3cgPSBmYWxzZTtcblxuXHQvLyBXZSBhd2FpdCBzaG93TWVzc2FnZURpYWxvZyB1bnRpbCB0aGUgVUkgZWxlbWVudCBpcyBhdmFpbGFibGUuXG5cdHByaXZhdGUgdWlFbGVtZW50SXNBdmFpbGFibGUgPSBQcm9taXNlLnJlc29sdmUoKTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgd2FybmluZyBtZXNzYWdlcyB0byB0aGUgbWVzc2FnZSBoYW5kbGVyLlxuXHQgKiBAcGFyYW0gYU1lc3NhZ2VzIFRoZSBzdHJpY3Qgd2FybmluZyBtZXNzYWdlcyB0byBiZSBhZGRlZFxuXHQgKi9cblx0YWRkV2FybmluZ01lc3NhZ2VzVG9NZXNzYWdlSGFuZGxlcihhTWVzc2FnZXM6IE1lc3NhZ2VbXSk6IHZvaWQge1xuXHRcdHRoaXMuc3RyaWN0V2FybmluZ01lc3NhZ2VzID0gdGhpcy5zdHJpY3RXYXJuaW5nTWVzc2FnZXMuY29uY2F0KGFNZXNzYWdlcyk7XG5cdH1cblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCBhIG1lc3NhZ2UgaXMgYSBzdHJpY3Qgd2FybmluZyBtZXNzYWdlIHRoYXQgd2FzIHJlY2VpdmVkIHByZXZpb3VzbHkuXG5cdCAqIEBwYXJhbSBvTWVzc2FnZSBUaGUgbWVzc2FnZSB0byBiZSBjaGVja2VkXG5cdCAqIEByZXR1cm5zIFdoZXRoZXIgb3Igbm90IHRoZSBtZXNzYWdlIGlzIGEgc3RyaWN0IHdhcm5pbmcgbWVzc2FnZVxuXHQgKi9cblx0aXNTdHJpY3RXYXJuaW5nTWVzc2FnZShvTWVzc2FnZTogTWVzc2FnZSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAoXG5cdFx0XHR0aGlzLnN0cmljdFdhcm5pbmdNZXNzYWdlcy5maW5kKChtZXNzYWdlKSA9PiB7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0bWVzc2FnZS5nZXRDb2RlKCkgPT09IG9NZXNzYWdlLmdldENvZGUoKSAmJlxuXHRcdFx0XHRcdG1lc3NhZ2UuZ2V0TWVzc2FnZSgpID09PSBvTWVzc2FnZS5nZXRNZXNzYWdlKCkgJiZcblx0XHRcdFx0XHRtZXNzYWdlLmdldFR5cGUoKSA9PT0gb01lc3NhZ2UuZ2V0VHlwZSgpICYmXG5cdFx0XHRcdFx0bWVzc2FnZS5nZXREZXNjcmlwdGlvblVybCgpID09PSBvTWVzc2FnZS5nZXREZXNjcmlwdGlvblVybCgpICYmXG5cdFx0XHRcdFx0ZGVlcEVxdWFsKG1lc3NhZ2UuZ2V0VGFyZ2V0cygpLCBvTWVzc2FnZS5nZXRUYXJnZXRzKCkpICYmXG5cdFx0XHRcdFx0bWVzc2FnZS5nZXRQZXJzaXN0ZW50KCkgPT09IG9NZXNzYWdlLmdldFBlcnNpc3RlbnQoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSkgIT09IHVuZGVmaW5lZFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYXJzIGFsbCBzdHJpY3Qgd2FybmluZyBtZXNzYWdlcyBmcm9tIHRoZSBtZXNzYWdlIGhhbmRsZXIuXG5cdCAqL1xuXHRjbGVhclN0cmljdFdhcm5pbmdNZXNzYWdlcygpOiB2b2lkIHtcblx0XHR0aGlzLnN0cmljdFdhcm5pbmdNZXNzYWdlcyA9IFtdO1xuXHR9XG5cblx0ZmlsdGVyRXJyb3JNZXNzYWdlcyhtZXNzYWdlczogTWVzc2FnZVtdKTogTWVzc2FnZVtdIHtcblx0XHRyZXR1cm4gbWVzc2FnZXMuZmlsdGVyKChtZXNzYWdlKSA9PiBtZXNzYWdlLmdldFR5cGUoKSA9PT0gTWVzc2FnZVR5cGUuRXJyb3IpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgd2hldGhlciBvciBub3QgYm91bmQgbWVzc2FnZXMgYXJlIHNob3duIGluIHRoZSBtZXNzYWdlIGRpYWxvZy5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkluc3RlYWR9LlxuXHQgKlxuXHQgKiBJZiB0aGUgYm91bmQgbWVzc2FnZXMgYXJlIHNob3duIHRvIHRoZSB1c2VyIHdpdGggYSBkaWZmZXJlbnQgY29udHJvbCBsaWtlIHRoZSAoVE9ETzpMaW5rKSBNZXNzYWdlQnV0dG9uXG5cdCAqIHRoaXMgbWV0aG9kIGhhcyB0byBiZSBvdmVycmlkZGVuLlxuXHQgKiBAcmV0dXJucyBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IGJvdW5kIG1lc3NhZ2VzIGFyZSBzaG93biBpbiB0aGUgbWVzc2FnZSBkaWFsb2cuXG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkluc3RlYWQpXG5cdGdldFNob3dCb3VuZE1lc3NhZ2VzSW5NZXNzYWdlRGlhbG9nKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVyIHRvIGhvbGQgbWVzc2FnZXMgdW5pdGwgYSBwcm9jZXNzIGlzIGNvbXBsZXRlLlxuXHQgKlxuXHQgKiBUaGUgY2FsbGVyIGNhbiByZWdpc3RlciB0byBob2xkIHRoZSBtZXNzYWdlIGhhbmRsZXIgZnJvbSBzaG93aW5nIG1lc3NhZ2VzIHVudGlsIHRoZSBjYWxsZXIncyBwcm9jZXNzZXMgYXJlIGNvbXBsZXRlZC5cblx0ICogT24gcmVnaXN0ZXJpbmcgdGhlIGNhbGxlciBpcyByZXR1cm5lZCBhIHVuaXF1ZSBrZXkuXG5cdCAqIFRoZSBtZXNzYWdlcyB3aWxsIG5vdCBiZSBzaG93biBpbiB0aGUgVUkgd2l0aCBzdWJzZXF1ZW50ICdzaG93TWVzc2FnZURpYWxvZygpJyBjYWxscy5cblx0ICogVGhlIGNhbGxlciBuZWVkcyB0byB1c2UgJ3Nob3dNZXNzYWdlRGlhbG9nKDxrZXk+KScgYXQgdGhlIGVuZCBvZiBhbGwgaGlzIHByb2Nlc3NlcyB0byBzaG93IHRoZSBtZXNzYWdlcyBpbiB0aGUgVUkuXG5cdCAqXG5cdCAqIElmIG11bHRpcGxlIG93bmVycyByZWdpc3RlciBzaW11bHRhbmVvdXNseSwgdGhlbiBtZXNzYWdlcyBhcmUgc2hvd24gaW4gdGhlIFVJIG9ubHkgYWZ0ZXIgJ3Nob3dNZXNzYWdlRGlhbG9nKDxyZXNwZWN0aXZlX2tleT4pJyBpcyBjYWxsZWQgYnkgYWxsIHRoZSBwcm9jZXNzZXMnIG93bmVycy5cblx0ICogQHBhcmFtIGtleSBVbmlxdWUgaWRlbnRpZmllciB0byB1c2UsIElmIG5vdCBwcm92aWRlZCwgYSBVSUQgd291bGQgYmUgY3JlYXRlZCBhbmQgdXNlZCB0byByZWdpc3Rlci5cblx0ICogQHJldHVybnMgVW5pcXVlIEtleSB0byBiZSB1c2VkIGJ5IHRoZSBjYWxsZXIgdG8gc2hvdyBtZXNzYWdlcyBhdCBhIGxhdGVyIHBvaW50IG9mIHRpbWUuXG5cdCAqL1xuXHRyZWdpc3RlclRvSG9sZE1lc3NhZ2VzKGtleT86IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgdW5pcXVlS2V5ID0ga2V5ID8/IHVpZCgpO1xuXHRcdGlmICghdGhpcy5ob2xkS2V5cy5pbmNsdWRlcyh1bmlxdWVLZXkpKSB7XG5cdFx0XHR0aGlzLmhvbGRLZXlzLnB1c2godW5pcXVlS2V5KTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuaXF1ZUtleTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhciBhbGwgZXhpc3RpbmcgaGVsZCBrZXlzLlxuXHQgKi9cblx0cmVzZXRIb2xkS2V5cygpOiB2b2lkIHtcblx0XHR0aGlzLmhvbGRLZXlzID0gW107XG5cdH1cblxuXHQvKipcblx0ICogU2hvd3MgYSBtZXNzYWdlIGRpYWxvZyB3aXRoIHRyYW5zaXRpb24gbWVzc2FnZXMgaWYgdGhlcmUgYXJlIGFueS5cblx0ICogVGhlIG1lc3NhZ2UgZGlhbG9nIGlzIHNob3duIGFzIGEgbW9kYWwgZGlhbG9nLiBPbmNlIHRoZSB1c2VyIGNvbmZpcm1zIHRoZSBkaWFsb2csIGFsbCB0cmFuc2l0aW9uIG1lc3NhZ2VzXG5cdCAqIGFyZSByZW1vdmVkIGZyb20gdGhlIG1lc3NhZ2UgbW9kZWwuIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgbWVzc2FnZSwgYSBsaXN0IG9mIG1lc3NhZ2VzIGlzIHNob3duLiBUaGUgdXNlclxuXHQgKiBjYW4gZmlsdGVyIG9uIG1lc3NhZ2UgdHlwZXMgYW5kIGNhbiBkaXNwbGF5IGRldGFpbHMgYXMgd2VsbCBhcyB0aGUgbG9uZyB0ZXh0LiBJZiB0aGVyZSBpcyBvbmUgbWVzc2FnZSxcblx0ICogdGhlIGRpYWxvZyBpbW1lZGlhdGVseSBzaG93cyB0aGUgZGV0YWlscyBvZiB0aGUgbWVzc2FnZS4gSWYgdGhlcmUgaXMganVzdCBvbmUgc3VjY2VzcyBtZXNzYWdlLCBhIG1lc3NhZ2Vcblx0ICogdG9hc3QgaXMgc2hvd24gaW5zdGVhZC5cblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzIFBSSVZBVEVcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgb25jZSB0aGUgdXNlciBjbG9zZXMgdGhlIGRpYWxvZy4gSWYgdGhlcmUgYXJlIG5vIG1lc3NhZ2VzXG5cdCAqIHRvIGJlIHNob3duLCB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCBpbW1lZGlhdGVseVxuXHQgKiBAcHVibGljXG5cdCAqIEBleHBlcmltZW50YWwgQXMgb2YgdmVyc2lvbiAxLjkwLjBcblx0ICogQHNpbmNlIDEuOTAuMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIHNob3dNZXNzYWdlRGlhbG9nKG1QYXJhbWV0ZXJzPzogU2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyByZW1vdmUgc3RyaWN0IHdhcm5pbmcgbWVzc2FnZXMgZnJvbSB0aGUgbWVzc2FnZSBtb2RlbCBiZWZvcmUgc2hvd2luZyB0aGUgbWVzc2FnZSBkaWFsb2dcblx0XHRhd2FpdCB0aGlzLnVpRWxlbWVudElzQXZhaWxhYmxlO1xuXG5cdFx0Y29uc3QgbWVzc2FnZXNJbk1vZGVsID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRjb25zdCBkdXBsaWNhdGVXYXJuaW5nTWVzc2FnZSA9IG1lc3NhZ2VzSW5Nb2RlbC5maWx0ZXIoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcblx0XHRcdHJldHVybiB0aGlzLmlzU3RyaWN0V2FybmluZ01lc3NhZ2UobWVzc2FnZSk7XG5cdFx0fSk7XG5cdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKGR1cGxpY2F0ZVdhcm5pbmdNZXNzYWdlKTtcblxuXHRcdGNvbnN0IGN1c3RvbU1lc3NhZ2VzID0gbVBhcmFtZXRlcnMgJiYgbVBhcmFtZXRlcnMuY3VzdG9tTWVzc2FnZXMgPyBtUGFyYW1ldGVycy5jdXN0b21NZXNzYWdlcyA6IHVuZGVmaW5lZCxcblx0XHRcdG9PUEludGVybmFsQmluZGluZ0NvbnRleHQgPSB0aGlzLmJhc2UuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgdmlld1R5cGUgPSAodGhpcy5iYXNlLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIE9iamVjdFdpdGhDb252ZXJ0ZXJUeXBlKS5jb252ZXJ0ZXJUeXBlO1xuXHRcdC8vIHNldCBpc0FjdGlvblBhcmFtZXRlckRpYWxvZyBvcGVuIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgaW4gdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHRvIGRlY2lkZSB3aGV0aGVyIG1lc3NhZ2UgZGlhbG9nIHNob3VsZCBvcGVuIG9yIG5vdFxuXHRcdGlmIChtUGFyYW1ldGVycyAmJiBtUGFyYW1ldGVycy5pc09wZXJhdGlvbkRpYWxvZ09wZW4gJiYgb09QSW50ZXJuYWxCaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0b09QSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzT3BlcmF0aW9uRGlhbG9nT3BlblwiLCB0cnVlKTtcblx0XHR9XG5cdFx0Y29uc3QgYlNob3dCb3VuZE1lc3NhZ2VzID0gdGhpcy5nZXRTaG93Qm91bmRNZXNzYWdlc0luTWVzc2FnZURpYWxvZygpO1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IChcblx0XHRcdG1QYXJhbWV0ZXJzICYmIG1QYXJhbWV0ZXJzLmNvbnRleHQgPyBtUGFyYW1ldGVycy5jb250ZXh0IDogdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKVxuXHRcdCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0Ly9jb25zdCBiRXRhZ01lc3NhZ2UgPSBtUGFyYW1ldGVycyAmJiBtUGFyYW1ldGVycy5iSGFzRXRhZ01lc3NhZ2U7XG5cdFx0Ly8gcmVzZXQgIGlzT3BlcmF0aW9uRGlhbG9nT3BlblxuXHRcdC8vIGNhbm5vdCBkbyB0aGlzIG9wZXJhdGlvbnMuanMgc2luY2UgaXQgaXMgbm90IGF3YXJlIG9mIHRoZSB2aWV3XG5cdFx0aWYgKG9PUEludGVybmFsQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdG9PUEludGVybmFsQmluZGluZ0NvbnRleHQuc2V0UHJvcGVydHkoXCJpc09wZXJhdGlvbkRpYWxvZ09wZW5cIiwgZmFsc2UpO1xuXHRcdH1cblx0XHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oXG5cdFx0XHRmdW5jdGlvbiAodGhpczogTWVzc2FnZUhhbmRsZXIsIHJlc29sdmU6ICgpID0+IHZvaWQsIHJlamVjdDogKCkgPT4gdm9pZCk6IHZvaWQge1xuXHRcdFx0XHQvLyB3ZSBoYXZlIHRvIHNldCBhIHRpbWVvdXQgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlIG1vc3QgcmVjZW50IG1lc3NhZ2VzXG5cdFx0XHRcdHNldFRpbWVvdXQoXG5cdFx0XHRcdFx0ZnVuY3Rpb24gKHRoaXM6IE1lc3NhZ2VIYW5kbGVyKTogdm9pZCB7XG5cdFx0XHRcdFx0XHQvLyBUT0RPOiBncmVhdCBBUEkgLSB3aWxsIGJlIGNoYW5nZWQgbGF0ZXJcblx0XHRcdFx0XHRcdHRoaXMucHJvY2Vzc0FuZFNob3dNZXNzYWdlcyhcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMgPz8ge30sXG5cdFx0XHRcdFx0XHRcdG9CaW5kaW5nQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0YlNob3dCb3VuZE1lc3NhZ2VzLFxuXHRcdFx0XHRcdFx0XHRjdXN0b21NZXNzYWdlcyA/PyBbXSxcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZSxcblx0XHRcdFx0XHRcdFx0cmVqZWN0LFxuXHRcdFx0XHRcdFx0XHR2aWV3VHlwZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LmJpbmQodGhpcyksXG5cdFx0XHRcdFx0MFxuXHRcdFx0XHQpO1xuXHRcdFx0fS5iaW5kKHRoaXMpXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm9jZXNzIHRoZSBtZXNzYWdlcyBhbmQgc2hvdyB0aGVtIHdoZW4gZXhwZWN0ZWQuXG5cdCAqXG5cdCAqIFdlIGZpbHRlciB0aGUgbWVzc2FnZXMgdG8gc2hvdyBhbmQgaG9sZCB0aGVtIHVudGlsIGFsbCByZWdpc3RlcmVkIHByb2Nlc3NlcyBjYWxsIHNob3dNZXNzYWdlRGlhbG9nIHdpdGggdGhlaXIgcmVzcGVjdGl2ZSBoZWxkIGtleXMuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzIFBhcmFtZXRlcnMgdG8gc2hvdyBtZXNzYWdlIGRpYWxvZy5cblx0ICogQHBhcmFtIGJpbmRpbmdDb250ZXh0IEJpbmQgY29udGV4dCBvZiB0aGUgcGFnZS5cblx0ICogQHBhcmFtIHNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyBTaG91bGQgYm91bmQgbWVzc2FnZXMgYmUgc2hvd24uXG5cdCAqIEBwYXJhbSBjdXN0b21NZXNzYWdlcyBDdXN0b20gbWVzc2FnZXMgdG8gYWRkLlxuXHQgKiBAcGFyYW0gc3VjY2VzcyBTdWNjZXNzIGNhbGxiYWNrLlxuXHQgKiBAcGFyYW0gZmFpbHVyZSBGYWlsdXJlIGNhbGxiYWNrLlxuXHQgKiBAcGFyYW0gdmlld1R5cGUgVmlldyB0eXBlLCBsaXN0IHJlcG9ydCBvciBvYmplY3QgcGFnZS5cblx0ICovXG5cdHByb2Nlc3NBbmRTaG93TWVzc2FnZXMoXG5cdFx0cGFyYW1ldGVyczogU2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXIsXG5cdFx0YmluZGluZ0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdHNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlczogYm9vbGVhbixcblx0XHRjdXN0b21NZXNzYWdlczogQ3VzdG9tTWVzc2FnZVtdLFxuXHRcdHN1Y2Nlc3M6ICgpID0+IHZvaWQsXG5cdFx0ZmFpbHVyZTogKCkgPT4gdm9pZCxcblx0XHR2aWV3VHlwZT86IHN0cmluZ1xuXHQpOiB2b2lkIHtcblx0XHRjb25zdCB7XG5cdFx0XHRjb25jdXJyZW50RWRpdEZsYWcsXG5cdFx0XHRjb250cm9sLFxuXHRcdFx0c0FjdGlvbk5hbWUsXG5cdFx0XHRvbkJlZm9yZVNob3dNZXNzYWdlLFxuXHRcdFx0dW5Ib2xkS2V5LFxuXHRcdFx0aXNPcGVyYXRpb25EaWFsb2dPcGVuOiBmb3JjZVNob3dVSUVsZW1lbnQgPSBmYWxzZSxcblx0XHRcdG92ZXJyaWRlVUlEZWNpc2lvbixcblx0XHRcdHNob3dCb3VuZFN0YXRlTWVzc2FnZXNcblx0XHR9ID0gcGFyYW1ldGVycztcblx0XHR0aGlzLmhvbGRNc2dzVG9TaG93ID0gdHJ1ZTtcblxuXHRcdC8vIENyZWF0ZSBhIFVJIGRlY2lzaW9uLlxuXHRcdGNvbnN0IG5ld1VJRGVjaXNpb25zID0gbWVzc2FnZUhhbmRsaW5nLmdldFVJRGVjaXNpb25zKFxuXHRcdFx0Y3VzdG9tTWVzc2FnZXMsXG5cdFx0XHRiaW5kaW5nQ29udGV4dCxcblx0XHRcdHNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyxcblx0XHRcdGNvbmN1cnJlbnRFZGl0RmxhZyxcblx0XHRcdGNvbnRyb2wsXG5cdFx0XHRzQWN0aW9uTmFtZSxcblx0XHRcdG9uQmVmb3JlU2hvd01lc3NhZ2UsXG5cdFx0XHR2aWV3VHlwZSxcblx0XHRcdHNob3dCb3VuZFN0YXRlTWVzc2FnZXMsXG5cdFx0XHRwYXJhbWV0ZXJzXG5cdFx0KTtcblx0XHR0aGlzLnVwZGF0ZVVJRGVjaXNpb25zKG5ld1VJRGVjaXNpb25zLCBvdmVycmlkZVVJRGVjaXNpb24pO1xuXHRcdHRoaXMucmVtb3ZlSG9sZEtleSh1bkhvbGRLZXkgPz8gY29udHJvbD8uZ2V0SWQoKSk7XG5cdFx0dGhpcy5zaG93TWVzc2FnZXNXaXRoQ29uZHRpb25zKGZvcmNlU2hvd1VJRWxlbWVudCwgc3VjY2VzcywgZmFpbHVyZSk7XG5cdH1cblxuXHQvKipcblx0ICogU2hvdyBNZXNzYWdlcyBpbiB0aGUgVUkgYmFzZWQgb24gY29uZGl0aW9ucy5cblx0ICogQHBhcmFtIGZvcmNlU2hvd1VJRWxlbWVudFxuXHQgKiBAcGFyYW0gc3VjY2Vzc1xuXHQgKiBAcGFyYW0gZmFpbHVyZVxuXHQgKi9cblx0YXN5bmMgc2hvd01lc3NhZ2VzV2l0aENvbmR0aW9ucyhcblx0XHRmb3JjZVNob3dVSUVsZW1lbnQgPSBmYWxzZSxcblx0XHRzdWNjZXNzPzogKHJldD86IHVua25vd24pID0+IHZvaWQsXG5cdFx0ZmFpbHVyZT86IChlcnI/OiB1bmtub3duKSA9PiB2b2lkXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHNob3dVSUVsZW1lbnQgPSBmb3JjZVNob3dVSUVsZW1lbnQgfHwgdGhpcy5jaGVja1RvU2hvd1VJRWxlbWVudCgpO1xuXHRcdGlmIChzaG93VUlFbGVtZW50ICYmIHRoaXMudWlEZWNpc2lvbnMpIHtcblx0XHRcdC8vIFNob3cgVUkgZWxlbWVudCBmb3IgdGhlIHByZXNlbnQgZGVjaXNpb24gYW5kIGNsZWFyIHRoZSBkZWNpc2lvbi5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXMudWlFbGVtZW50SXNBdmFpbGFibGUgPSBtZXNzYWdlSGFuZGxpbmcuc2hvd01lc3NhZ2VzSW5VSSh0aGlzLnVpRGVjaXNpb25zKTtcblx0XHRcdFx0Y29uc3QgcmV0ID0gYXdhaXQgdGhpcy51aUVsZW1lbnRJc0F2YWlsYWJsZTtcblx0XHRcdFx0c3VjY2Vzcz8uKHJldCk7XG5cdFx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKGBGRSA6IFY0IDogTWVzc2FnZUhhbmRsZXIgOiBFcnJvciBvbiB0cnlpbmcgdG8gc2hvdyBVSSBlbGVtZW50OiAke2Vycn1gKTtcblx0XHRcdFx0dGhpcy51aUVsZW1lbnRJc0F2YWlsYWJsZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdFx0XHRmYWlsdXJlPy4oZXJyKTtcblx0XHRcdH1cblx0XHRcdHRoaXMudWlEZWNpc2lvbnMgPSB1bmRlZmluZWQ7XG5cdFx0XHR0aGlzLmNsZWFyU3RyaWN0V2FybmluZ01lc3NhZ2VzKCk7XG5cdFx0XHR0aGlzLmhvbGRNc2dzVG9TaG93ID0gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdExvZy5pbmZvKFwiRkUgOiBWNCA6IE1lc3NhZ2VIYW5kbGVyIDogSG9sZGluZyBtZXNzYWdlcyB1bnRpbCBhIHJlZ2lzdGVyZWQgcHJvY2VzcyBcIik7XG5cdFx0XHRzdWNjZXNzPy4oKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogWW91IGNhbiByZW1vdmUgdGhlIGV4aXN0aW5nIHRyYW5zaXRpb24gbWVzc2FnZSBmcm9tIHRoZSBtZXNzYWdlIG1vZGVsIHdpdGggdGhpcyBtZXRob2QuXG5cdCAqIFdpdGggZXZlcnkgdXNlciBpbnRlcmFjdGlvbiB0aGF0IGNhdXNlcyBzZXJ2ZXIgY29tbXVuaWNhdGlvbiAobGlrZSBjbGlja2luZyBvbiBhbiBhY3Rpb24sIGNoYW5naW5nIGRhdGEpLFxuXHQgKiB0aGlzIG1ldGhvZCByZW1vdmVzIHRoZSBleGlzdGluZyB0cmFuc2l0aW9uIG1lc3NhZ2VzIGZyb20gdGhlIG1lc3NhZ2UgbW9kZWwuXG5cdCAqIEBwYXJhbSBba2VlcEJvdW5kTWVzc2FnZV0gQ2hlY2tzIGlmIHRoZSBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIGFyZSBub3QgdG8gYmUgcmVtb3ZlZFxuXHQgKiBAcGFyYW0ga2VlcFVuYm91bmRNZXNzYWdlXG5cdCAqIEBwYXJhbSBzUGF0aFRvQmVSZW1vdmVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKGtlZXBCb3VuZE1lc3NhZ2U/OiBib29sZWFuLCBrZWVwVW5ib3VuZE1lc3NhZ2U/OiBib29sZWFuLCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKTogdm9pZCB7XG5cdFx0aWYgKCFrZWVwQm91bmRNZXNzYWdlKSB7XG5cdFx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoc1BhdGhUb0JlUmVtb3ZlZCk7XG5cdFx0fVxuXHRcdGlmICgha2VlcFVuYm91bmRNZXNzYWdlKSB7XG5cdFx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdGhhdCByZXR1cm5zIGFsbCB0aGUgcGFyYW1ldGVycyBuZWVkZWQgdG8gaGFuZGxlIHRoZSBuYXZpZ2F0aW9uIHRvIHRoZSBlcnJvciBwYWdlLlxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnNcblx0ICogQHJldHVybnMgVGhlIHBhcmFtZXRlcnMgbmVjZXNzYXJ5IGZvciB0aGUgbmF2aWdhdGlvbiB0byB0aGUgZXJyb3IgcGFnZVxuXHQgKi9cblx0X2NoZWNrTmF2aWdhdGlvblRvRXJyb3JQYWdlKG1QYXJhbWV0ZXJzPzogTmF2aWdhdGlvblRvRXJyb3JQYWdlUGFyYW1ldGVyKTogTmF2aWdhdGlvblRvRXJyb3JQYWdlUmVzdWx0IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBhVW5ib3VuZE1lc3NhZ2VzID0gbWVzc2FnZUhhbmRsaW5nLmdldE1lc3NhZ2VzKCk7XG5cdFx0Y29uc3QgYlNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyA9IHRoaXMuZ2V0U2hvd0JvdW5kTWVzc2FnZXNJbk1lc3NhZ2VEaWFsb2coKTtcblx0XHRjb25zdCBhQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMgPSBiU2hvd0JvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzID8gbWVzc2FnZUhhbmRsaW5nLmdldE1lc3NhZ2VzKHRydWUsIHRydWUpIDogW107XG5cdFx0Y29uc3QgYUN1c3RvbU1lc3NhZ2VzID0gbVBhcmFtZXRlcnMgJiYgbVBhcmFtZXRlcnMuY3VzdG9tTWVzc2FnZXMgPyBtUGFyYW1ldGVycy5jdXN0b21NZXNzYWdlcyA6IFtdO1xuXHRcdGNvbnN0IGJJc1N0aWNreUVkaXRNb2RlID0gQ29tbW9uVXRpbHMuaXNTdGlja3lFZGl0TW9kZSh0aGlzLmJhc2UuZ2V0VmlldygpKTtcblx0XHRsZXQgbU1lc3NhZ2VQYWdlUGFyYW1ldGVyczogTmF2aWdhdGlvblRvRXJyb3JQYWdlUmVzdWx0IHwgdW5kZWZpbmVkO1xuXG5cdFx0Ly8gVE9ETzogU3RpY2sgbW9kZSBjaGVjayBpcyBva2F5IGFzIGxvbmcgYXMgdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGlzIHVzZWQgd2l0aCBzYXAuZmUuY29yZSBhbmQgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50LlxuXHRcdC8vIEl0IG1pZ2h0IGJlIGJldHRlciB0byBwcm92aWRlIGFuIGV4dGVuc2lvbiB0byB0aGUgY29uc3VtZXIgb2YgdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHRvIHByb3ZpZGUgdGhpcyB2YWx1ZS5cblxuXHRcdC8vIFRoZSBtZXNzYWdlIHBhZ2UgY2FuIG9ubHkgc2hvdyAxIG1lc3NhZ2UgdG9kYXksIHNvIHdlIG5hdmlnYXRlIHRvIGl0IHdoZW4gOlxuXHRcdC8vIDEuIFRoZXJlIGFyZSBubyBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIHRvIHNob3csXG5cdFx0Ly8gMi4gVGhlcmUgYXJlIG5vIGN1c3RvbSBtZXNzYWdlcyB0byBzaG93LCAmXG5cdFx0Ly8gMy4gVGhlcmUgaXMgZXhhY3RseSAxIHVuYm91bmQgbWVzc2FnZSBpbiB0aGUgbWVzc2FnZSBtb2RlbCB3aXRoIHN0YXR1c0NvZGU9NTAzIGFuZCByZXRyeS1BZnRlciBhdmFpbGFibGVcblx0XHQvLyA0LiByZXRyeUFmdGVyIGlzIGdyZWF0ZXIgdGhhbiAxMjAgc2Vjb25kc1xuXHRcdC8vXG5cdFx0Ly8gSW4gQWRkaXRpb24sIG5hdmlnYXRpbmcgYXdheSBmcm9tIGEgc3RpY2t5IHNlc3Npb24gd2lsbCBkZXN0cm95IHRoZSBzZXNzaW9uIHNvIHdlIGRvIG5vdCBuYXZpZ2F0ZSB0byBtZXNzYWdlIHBhZ2UgZm9yIG5vdy5cblx0XHQvLyBUT0RPOiBjaGVjayBpZiBuYXZpZ2F0aW9uIHNob3VsZCBiZSBkb25lIGluIHN0aWNreSBlZGl0IG1vZGUuXG5cdFx0aWYgKG1QYXJhbWV0ZXJzPy5pc0RhdGFSZWNlaXZlZEVycm9yID09PSB0cnVlKSB7XG5cdFx0XHRtTWVzc2FnZVBhZ2VQYXJhbWV0ZXJzID0ge1xuXHRcdFx0XHR0aXRsZTogbVBhcmFtZXRlcnMudGl0bGUsXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiBtUGFyYW1ldGVycy5kZXNjcmlwdGlvbixcblx0XHRcdFx0bmF2aWdhdGVCYWNrVG9PcmlnaW46IHRydWUsXG5cdFx0XHRcdGVycm9yVHlwZTogXCJQYWdlTm90Rm91bmRcIlxuXHRcdFx0fTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0IWJJc1N0aWNreUVkaXRNb2RlICYmXG5cdFx0XHQhYUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzLmxlbmd0aCAmJlxuXHRcdFx0IWFDdXN0b21NZXNzYWdlcy5sZW5ndGggJiZcblx0XHRcdChhVW5ib3VuZE1lc3NhZ2VzLmxlbmd0aCA9PT0gMSB8fCBtUGFyYW1ldGVycz8uaXNJbml0aWFsTG9hZDUwM0Vycm9yID09PSB0cnVlKVxuXHRcdCkge1xuXHRcdFx0Y29uc3Qgb01lc3NhZ2UgPSBhVW5ib3VuZE1lc3NhZ2VzWzBdO1xuXHRcdFx0Y29uc3Qgb1RlY2huaWNhbERldGFpbHMgPSBvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzKCkgYXMgTWVzc2FnZVRlY2huaWNhbERldGFpbHMgfCB1bmRlZmluZWQ7XG5cdFx0XHRpZiAob1RlY2huaWNhbERldGFpbHM/Lmh0dHBTdGF0dXMgPT09IDUwMykge1xuXHRcdFx0XHRtTWVzc2FnZVBhZ2VQYXJhbWV0ZXJzID0gdGhpcy5fZ2V0SFRUUDUwM01lc3NhZ2VQYXJhbWV0ZXJzKG9NZXNzYWdlLCBvVGVjaG5pY2FsRGV0YWlscyk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBtTWVzc2FnZVBhZ2VQYXJhbWV0ZXJzO1xuXHR9XG5cblx0X2dldEhUVFA1MDNNZXNzYWdlUGFyYW1ldGVycyhtZXNzYWdlOiBNZXNzYWdlLCB0ZWNobmljYWxEZXRhaWxzOiBNZXNzYWdlVGVjaG5pY2FsRGV0YWlscyk6IE5hdmlnYXRpb25Ub0Vycm9yUGFnZVJlc3VsdCB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IG1lc3NhZ2VQYWdlUGFyYW1ldGVyczogTmF2aWdhdGlvblRvRXJyb3JQYWdlUmVzdWx0IHwgdW5kZWZpbmVkO1xuXG5cdFx0Y29uc3Qgc2Vjb25kc0JlZm9yZVJldHJ5ID1cblx0XHRcdHRlY2huaWNhbERldGFpbHMucmV0cnlBZnRlciAhPT0gdW5kZWZpbmVkID8gdGhpcy5fZ2V0U2Vjb25kc0JlZm9yZVJldHJ5QWZ0ZXIodGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyKSA6IHVuZGVmaW5lZDtcblxuXHRcdGlmIChzZWNvbmRzQmVmb3JlUmV0cnkgPT09IHVuZGVmaW5lZCB8fCBzZWNvbmRzQmVmb3JlUmV0cnkgPiAxMjApIHtcblx0XHRcdGNvbnN0IHJldHJ5QWZ0ZXJNZXNzYWdlID0gbWVzc2FnZUhhbmRsaW5nLmdldFJldHJ5QWZ0ZXJNZXNzYWdlKG1lc3NhZ2UpO1xuXHRcdFx0bWVzc2FnZVBhZ2VQYXJhbWV0ZXJzID0ge1xuXHRcdFx0XHRkZXNjcmlwdGlvbjogcmV0cnlBZnRlck1lc3NhZ2UgPyBgJHtyZXRyeUFmdGVyTWVzc2FnZX0gJHttZXNzYWdlLmdldE1lc3NhZ2UoKX1gIDogbWVzc2FnZS5nZXRNZXNzYWdlKCksXG5cdFx0XHRcdG5hdmlnYXRlQmFja1RvT3JpZ2luOiB0cnVlLFxuXHRcdFx0XHRlcnJvclR5cGU6IFwiVW5hYmxlVG9Mb2FkXCJcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1lc3NhZ2VQYWdlUGFyYW1ldGVycztcblx0fVxuXG5cdF9nZXRTZWNvbmRzQmVmb3JlUmV0cnlBZnRlcihkUmV0cnlBZnRlcjogRGF0ZSk6IG51bWJlciB7XG5cdFx0Y29uc3QgZEN1cnJlbnREYXRlVGltZSA9IG5ldyBEYXRlKCksXG5cdFx0XHRpQ3VycmVudERhdGVUaW1lSW5NaWxsaVNlY29uZHMgPSBkQ3VycmVudERhdGVUaW1lLmdldFRpbWUoKSxcblx0XHRcdGlSZXRyeUFmdGVyRGF0ZVRpbWVJbk1pbGxpU2Vjb25kcyA9IGRSZXRyeUFmdGVyLmdldFRpbWUoKSxcblx0XHRcdGlTZWNvbmRzQmVmb3JlUmV0cnkgPSAoaVJldHJ5QWZ0ZXJEYXRlVGltZUluTWlsbGlTZWNvbmRzIC0gaUN1cnJlbnREYXRlVGltZUluTWlsbGlTZWNvbmRzKSAvIDEwMDA7XG5cdFx0cmV0dXJuIGlTZWNvbmRzQmVmb3JlUmV0cnk7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlIHRoZSBleGlzdGluZyBVSSBkZWNpc2lvbnMgd2l0aCB0aGUgbmV3IG9uZXMuXG5cdCAqIEBwYXJhbSBuZXdVSURlY2lzaW9ucyBJbiBjb21taW5nIFVJIGRlY2lzaW9ucy5cblx0ICogQHBhcmFtIG92ZXJyaWRlVUlEZWNpc2lvbiBPdmVycmlkZSB0aGUgZXhpc3RpbmcgVUkgZGVjaXNpb24gdG8gc2hvdyBtZXNzYWdlcyB3aXRoIHRoZSBuZXcgb25lLlxuXHQgKlxuXHQgKiAnb3ZlcnJpZGVVSURlY2lzaW9uJywgVGhpcyB3b3VsZCBiZSBuZWVkZWQgd2hlbiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBwYWdlIGNvbnRleHQgYW5kIHRoZSBwYXJhbXRlcnMgdG8gY3JlYXRlIHRoZSBuZXcgVUkgZGVjaXNpb24gYXJlIGRpZmZlcmVudC5cblx0ICovXG5cdHVwZGF0ZVVJRGVjaXNpb25zKG5ld1VJRGVjaXNpb25zOiBNZXNzYWdlVUlEZWNpc2lvbnMsIG92ZXJyaWRlVUlEZWNpc2lvbiA9IGZhbHNlKTogdm9pZCB7XG5cdFx0Y29uc3Qgb2xkVUlEZWNpc2lvbnMgPSB0aGlzLnVpRGVjaXNpb25zO1xuXHRcdGxldCBhbGxNZXNzYWdlc1RvU2hvdzogTWVzc2FnZVtdID0gW107XG5cdFx0bGV0IG1lcmdlZFVJRGVjaXNpb247XG5cdFx0aWYgKG9sZFVJRGVjaXNpb25zICYmIG92ZXJyaWRlVUlEZWNpc2lvbiA9PT0gZmFsc2UpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0b2xkVUlEZWNpc2lvbnMubWVzc2FnZXNUb1Nob3cubGVuZ3RoID09PSAxICYmXG5cdFx0XHRcdG5ld1VJRGVjaXNpb25zLm1lc3NhZ2VzVG9TaG93Lmxlbmd0aCA9PT0gMSAmJlxuXHRcdFx0XHRvbGRVSURlY2lzaW9ucy5tZXNzYWdlc1RvU2hvd1swXS5nZXRDb2RlKCkgPT09IFwiQ19DT01NT05fU1VDQ0VTU19NRVNTQUdFXCIgJiZcblx0XHRcdFx0bmV3VUlEZWNpc2lvbnMubWVzc2FnZXNUb1Nob3dbMF0uZ2V0Q29kZSgpID09PSBcIkNfQ09NTU9OX1NVQ0NFU1NfTUVTU0FHRVwiXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gQ2hlY2sgaWYgYm90aCBhcmUgZ2VuZXJpYyBzdWNjZXNzIG1lc3NhZ2VzLCB0aGVuIHdlIHNob3cgb25seSBvbmUgbWVzc2FnZS5cblx0XHRcdFx0YWxsTWVzc2FnZXNUb1Nob3cgPSBvbGRVSURlY2lzaW9ucy5tZXNzYWdlc1RvU2hvdztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFsbE1lc3NhZ2VzVG9TaG93ID0gQXJyYXkuZnJvbShuZXcgU2V0KFsuLi5vbGRVSURlY2lzaW9ucy5tZXNzYWdlc1RvU2hvdywgLi4ubmV3VUlEZWNpc2lvbnMubWVzc2FnZXNUb1Nob3ddKSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBlbGVtZW50cyA9IFtvbGRVSURlY2lzaW9ucy51aUVsZW1lbnRUb1VzZSwgbmV3VUlEZWNpc2lvbnMudWlFbGVtZW50VG9Vc2VdO1xuXHRcdFx0Ly8gRGVmYXVsdCB3ZSBzaG93IGRpYWxvZ1xuXHRcdFx0bGV0IHVpRWxlbWVudFRvVXNlOiBTdXBwb3J0ZWRVSUVsZW1lbnQgPSBhbGxNZXNzYWdlc1RvU2hvdy5sZW5ndGggPiAwID8gXCJEaWFsb2dcIiA6IFwiTm9uZVwiO1xuXG5cdFx0XHRpZiAoYWxsTWVzc2FnZXNUb1Nob3cubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdC8vIFNpbmdsZSBtZXNzYWdlLCB3ZSBjaGVjayBmb3Igc3BlY2lmaWMgVUkgRWxlbWVudCB0byB1c2UuXG5cdFx0XHRcdGlmIChlbGVtZW50cy5pbmNsdWRlcyhcIlRvYXN0XCIpKSB7XG5cdFx0XHRcdFx0dWlFbGVtZW50VG9Vc2UgPSBcIlRvYXN0XCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoZWxlbWVudHMuaW5jbHVkZXMoXCJCb3hcIikpIHtcblx0XHRcdFx0XHR1aUVsZW1lbnRUb1VzZSA9IFwiQm94XCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0bWVyZ2VkVUlEZWNpc2lvbiA9IHtcblx0XHRcdFx0bWVzc2FnZXNUb1Nob3c6IGFsbE1lc3NhZ2VzVG9TaG93LFxuXHRcdFx0XHR1aUVsZW1lbnRUb1VzZSxcblx0XHRcdFx0Y29udGV4dE5lZWRzRXRhZ1JlZnJlc2g6IG9sZFVJRGVjaXNpb25zLmNvbnRleHROZWVkc0V0YWdSZWZyZXNoIHx8IG5ld1VJRGVjaXNpb25zLmNvbnRleHROZWVkc0V0YWdSZWZyZXNoLFxuXHRcdFx0XHRjb250YWluc0JvdW5kVHJhbnNpdGlvbjogb2xkVUlEZWNpc2lvbnMuY29udGFpbnNCb3VuZFRyYW5zaXRpb24gfHwgbmV3VUlEZWNpc2lvbnMuY29udGFpbnNCb3VuZFRyYW5zaXRpb25cblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1lcmdlZFVJRGVjaXNpb24gPSBuZXdVSURlY2lzaW9ucztcblx0XHR9XG5cblx0XHR0aGlzLnVpRGVjaXNpb25zID0gbWVyZ2VkVUlEZWNpc2lvbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgaGVsZCBrZXkuXG5cdCAqIEBwYXJhbSBpbktleSBLZXkgdG8gcmVtb3ZlLlxuXHQgKi9cblx0cmVtb3ZlSG9sZEtleShpbktleT86IHN0cmluZyk6IHZvaWQge1xuXHRcdGlmIChpbktleSAmJiB0aGlzLmhvbGRLZXlzLmluY2x1ZGVzKGluS2V5KSkge1xuXHRcdFx0dGhpcy5ob2xkS2V5cy5zcGxpY2UodGhpcy5ob2xkS2V5cy5pbmRleE9mKGluS2V5KSwgMSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIFVJIEVsZW1lbnQgd2l0aCBtZXNzYWdlcyBzaG91bGQgYmUgc2hvd24uXG5cdCAqIEByZXR1cm5zIEJvb2xlYW5cblx0ICovXG5cdGNoZWNrVG9TaG93VUlFbGVtZW50KCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmhvbGRNc2dzVG9TaG93ICYmICh0aGlzLmhvbGRLZXlzLmxlbmd0aCA+IDAgPyBmYWxzZSA6IHRydWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhvbGQgbWVzc2FnZXMgZm9yIHRoZSBjb250cm9sLlxuXHQgKiBAcGFyYW0gY29udHJvbFxuXHQgKi9cblx0aG9sZE1lc3NhZ2VzRm9yQ29udHJvbChjb250cm9sOiBDb250cm9sKTogdm9pZCB7XG5cdFx0Y29uc3QgaWRlbnRpZmllciA9IGNvbnRyb2wuZ2V0SWQoKTtcblx0XHR0aGlzLnJlZ2lzdGVyVG9Ib2xkTWVzc2FnZXMoaWRlbnRpZmllcik7XG5cdH1cblxuXHQvKipcblx0ICogUmVsZWFzZSBtZXNzYWdlIGhvbGQgYnkgYSBjb250cm9sLlxuXHQgKiBAcGFyYW0gY29udHJvbFxuXHQgKi9cblx0YXN5bmMgcmVsZWFzZUhvbGRCeUNvbnRyb2woY29udHJvbD86IENvbnRyb2wpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBpZGVudGlmaWVyID0gY29udHJvbD8uZ2V0SWQoKTtcblx0XHR0aGlzLnJlbW92ZUhvbGRLZXkoaWRlbnRpZmllcik7XG5cdFx0YXdhaXQgdGhpcy51aUVsZW1lbnRJc0F2YWlsYWJsZTtcblx0XHRhd2FpdCB0aGlzLnNob3dNZXNzYWdlc1dpdGhDb25kdGlvbnMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTaG93cyBhIG1lc3NhZ2UgcGFnZSBvciBhIG1lc3NhZ2UgZGlhbG9nIGJhc2VkIG9uIHRoZSBtZXNzYWdlcyBpbiB0aGUgbWVzc2FnZSBkaWFsb2cuXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVyc11cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgb25jZSB0aGUgdXNlciBjbG9zZXMgdGhlIG1lc3NhZ2UgZGlhbG9nIG9yIHdoZW4gbmF2aWdhdGlvbiB0byB0aGUgbWVzc2FnZSBwYWdlIGlzIGNvbXBsZXRlLiBJZiB0aGVyZSBhcmUgbm8gbWVzc2FnZXNcblx0ICogdG8gYmUgc2hvd24sIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkIGltbWVkaWF0ZWx5XG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgc2hvd01lc3NhZ2VzKHBhcmFtZXRlcnM/OiBTaG93TWVzc2FnZXNQYXJhbWV0ZXJzKTogUHJvbWlzZTx2b2lkIHwgYm9vbGVhbiB8IERpYWxvZz4ge1xuXHRcdGNvbnN0IG1lc3NhZ2VQYWdlUGFyYW1ldGVycyA9IHRoaXMuX2NoZWNrTmF2aWdhdGlvblRvRXJyb3JQYWdlKHBhcmFtZXRlcnMpO1xuXG5cdFx0aWYgKG1lc3NhZ2VQYWdlUGFyYW1ldGVycykge1xuXHRcdFx0Ly8gbmF2aWdhdGUgdG8gbWVzc2FnZSBwYWdlLlxuXHRcdFx0Ly8gaGFuZGxlciBiZWZvcmUgcGFnZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZCwgZm9yIGV4YW1wbGUgdG8gY2xvc2UgdGhlIGFjdGlvbiBwYXJhbWV0ZXIgZGlhbG9nXG5cdFx0XHRpZiAocGFyYW1ldGVycz8ubWVzc2FnZVBhZ2VOYXZpZ2F0aW9uQ2FsbGJhY2spIHtcblx0XHRcdFx0cGFyYW1ldGVycy5tZXNzYWdlUGFnZU5hdmlnYXRpb25DYWxsYmFjaygpO1xuXHRcdFx0fVxuXG5cdFx0XHRtZXNzYWdlUGFnZVBhcmFtZXRlcnMuaGFuZGxlU2hlbGxCYWNrID0gIXBhcmFtZXRlcnM/LnNoZWxsQmFjaztcblx0XHRcdHRoaXMucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHQvLyB3ZSBoYXZlIHRvIHNldCBhIHRpbWVvdXQgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlIG1vc3QgcmVjZW50IG1lc3NhZ2VzXG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdC8vIGNsZWFyIGFsbCBob2xkIGtleXMgYXMgd2UgbmF2aWdhdGUgdG8gbWVzc2FnZSBwYWdlLlxuXHRcdFx0XHRcdHRoaXMucmVzZXRIb2xkS2V5cygpO1xuXG5cdFx0XHRcdFx0Ly8gVE9ETzogZ3JlYXQgQVBJIC0gd2lsbCBiZSBjaGFuZ2VkIGxhdGVyXG5cdFx0XHRcdFx0dGhpcy5iYXNlLl9yb3V0aW5nXG5cdFx0XHRcdFx0XHQubmF2aWdhdGVUb01lc3NhZ2VQYWdlKFxuXHRcdFx0XHRcdFx0XHRwYXJhbWV0ZXJzPy5pc0RhdGFSZWNlaXZlZEVycm9yID09PSB0cnVlXG5cdFx0XHRcdFx0XHRcdFx0PyBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0RBVEFfUkVDRUlWRURfRVJST1JcIilcblx0XHRcdFx0XHRcdFx0XHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19USVRMRVwiKSxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZVBhZ2VQYXJhbWV0ZXJzXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQudGhlbihyZXNvbHZlKVxuXHRcdFx0XHRcdFx0LmNhdGNoKHJlamVjdCk7XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIG5hdmlnYXRlIHRvIG1lc3NhZ2UgZGlhbG9nXG5cdFx0XHRyZXR1cm4gdGhpcy5zaG93TWVzc2FnZURpYWxvZyhwYXJhbWV0ZXJzKTtcblx0XHR9XG5cdH1cbn1cbmV4cG9ydCBkZWZhdWx0IE1lc3NhZ2VIYW5kbGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0VBeUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTkEsSUFRTUEsY0FBYyxJQUFBQyxJQUFBLEdBRG5CQyxjQUFjLENBQUMsaURBQWlELENBQUMsRUFBQUMsS0FBQSxHQW9FaEVDLGdCQUFnQixDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUNsQkMsVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0MsT0FBTyxDQUFDLEVBQUFDLEtBQUEsR0E4Q3JDQyxlQUFlLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBQ2pCQyxjQUFjLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBNkloQkgsZUFBZSxDQUFDLENBQUMsRUFBQUksS0FBQSxHQStLakJKLGVBQWUsQ0FBQyxDQUFDLEVBQUFLLEtBQUEsR0FDakJILGNBQWMsQ0FBQyxDQUFDLEVBQUFYLElBQUEsQ0FBQWUsTUFBQSxJQUFBQyxPQUFBLDBCQUFBQyxvQkFBQTtJQWxhakIsU0FBQWxCLGVBQUEsRUFBYztNQUFBLElBQUFtQixLQUFBO01BQ2JBLEtBQUEsR0FBQUQsb0JBQUEsQ0FBQUUsSUFBQSxLQUFNLENBQUM7TUFBQ0QsS0FBQSxDQWRE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
441
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlSGFuZGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwicHJpdmF0ZUV4dGVuc2lvbiIsIl9kZWMzIiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiSW5zdGVhZCIsIl9kZWM0IiwicHVibGljRXh0ZW5zaW9uIiwiX2RlYzUiLCJfZGVjNiIsIl9kZWM3IiwiZmluYWxFeHRlbnNpb24iLCJfZGVjOCIsIl9kZWM5IiwiX2RlYzEwIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9Db250cm9sbGVyRXh0ZW5zaW9uIiwiX3RoaXMiLCJjYWxsIiwic3RyaWN0V2FybmluZ01lc3NhZ2VzIiwiaG9sZEtleXMiLCJob2xkTXNnc1RvU2hvdyIsInVpRWxlbWVudElzQXZhaWxhYmxlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImFkZFdhcm5pbmdNZXNzYWdlc1RvTWVzc2FnZUhhbmRsZXIiLCJhTWVzc2FnZXMiLCJjb25jYXQiLCJpc1N0cmljdFdhcm5pbmdNZXNzYWdlIiwib01lc3NhZ2UiLCJmaW5kIiwibWVzc2FnZSIsImdldENvZGUiLCJnZXRNZXNzYWdlIiwiZ2V0VHlwZSIsImdldERlc2NyaXB0aW9uVXJsIiwiZGVlcEVxdWFsIiwiZ2V0VGFyZ2V0cyIsImdldFBlcnNpc3RlbnQiLCJ1bmRlZmluZWQiLCJjbGVhclN0cmljdFdhcm5pbmdNZXNzYWdlcyIsImZpbHRlckVycm9yTWVzc2FnZXMiLCJtZXNzYWdlcyIsImZpbHRlciIsIk1lc3NhZ2VUeXBlIiwiRXJyb3IiLCJnZXRTaG93Qm91bmRNZXNzYWdlc0luTWVzc2FnZURpYWxvZyIsImJlZm9yZVNob3dNZXNzYWdlQnV0dG9uIiwiX21lc3NhZ2VEZXRhaWxzIiwicmVnaXN0ZXJUb0hvbGRNZXNzYWdlcyIsImtleSIsInVuaXF1ZUtleSIsInVpZCIsImluY2x1ZGVzIiwicHVzaCIsInJlc2V0SG9sZEtleXMiLCJzaG93TWVzc2FnZURpYWxvZyIsIm1QYXJhbWV0ZXJzIiwibWVzc2FnZXNJbk1vZGVsIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsImR1cGxpY2F0ZVdhcm5pbmdNZXNzYWdlIiwicmVtb3ZlTWVzc2FnZXMiLCJjdXN0b21NZXNzYWdlcyIsIm9PUEludGVybmFsQmluZGluZ0NvbnRleHQiLCJiYXNlIiwiZ2V0VmlldyIsImdldEJpbmRpbmdDb250ZXh0Iiwidmlld1R5cGUiLCJnZXRWaWV3RGF0YSIsImNvbnZlcnRlclR5cGUiLCJpc09wZXJhdGlvbkRpYWxvZ09wZW4iLCJzZXRQcm9wZXJ0eSIsImJTaG93Qm91bmRNZXNzYWdlcyIsIm9CaW5kaW5nQ29udGV4dCIsImNvbnRleHQiLCJyZWplY3QiLCJzZXRUaW1lb3V0IiwicHJvY2Vzc0FuZFNob3dNZXNzYWdlcyIsImJpbmQiLCJwYXJhbWV0ZXJzIiwiYmluZGluZ0NvbnRleHQiLCJzaG93Qm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJzdWNjZXNzIiwiZmFpbHVyZSIsImNvbmN1cnJlbnRFZGl0RmxhZyIsImNvbnRyb2wiLCJzQWN0aW9uTmFtZSIsIm9uQmVmb3JlU2hvd01lc3NhZ2UiLCJ1bkhvbGRLZXkiLCJmb3JjZVNob3dVSUVsZW1lbnQiLCJvdmVycmlkZVVJRGVjaXNpb24iLCJzaG93Qm91bmRTdGF0ZU1lc3NhZ2VzIiwibmV3VUlEZWNpc2lvbnMiLCJtZXNzYWdlSGFuZGxpbmciLCJnZXRVSURlY2lzaW9ucyIsInVwZGF0ZVVJRGVjaXNpb25zIiwicmVtb3ZlSG9sZEtleSIsImdldElkIiwic2hvd01lc3NhZ2VzV2l0aENvbmR0aW9ucyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInNob3dVSUVsZW1lbnQiLCJjaGVja1RvU2hvd1VJRWxlbWVudCIsInVpRGVjaXNpb25zIiwic2hvd01lc3NhZ2VzSW5VSSIsInJldCIsImVyciIsIkxvZyIsImVycm9yIiwiaW5mbyIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsImtlZXBCb3VuZE1lc3NhZ2UiLCJrZWVwVW5ib3VuZE1lc3NhZ2UiLCJzUGF0aFRvQmVSZW1vdmVkIiwicmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwiX2NoZWNrTmF2aWdhdGlvblRvRXJyb3JQYWdlIiwiYVVuYm91bmRNZXNzYWdlcyIsImdldE1lc3NhZ2VzIiwiYlNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImFCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImFDdXN0b21NZXNzYWdlcyIsImJJc1N0aWNreUVkaXRNb2RlIiwiQ29tbW9uVXRpbHMiLCJpc1N0aWNreUVkaXRNb2RlIiwibU1lc3NhZ2VQYWdlUGFyYW1ldGVycyIsImlzRGF0YVJlY2VpdmVkRXJyb3IiLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibmF2aWdhdGVCYWNrVG9PcmlnaW4iLCJlcnJvclR5cGUiLCJpc0luaXRpYWxMb2FkNTAzRXJyb3IiLCJvVGVjaG5pY2FsRGV0YWlscyIsImdldFRlY2huaWNhbERldGFpbHMiLCJodHRwU3RhdHVzIiwiX2dldEhUVFA1MDNNZXNzYWdlUGFyYW1ldGVycyIsInRlY2huaWNhbERldGFpbHMiLCJtZXNzYWdlUGFnZVBhcmFtZXRlcnMiLCJzZWNvbmRzQmVmb3JlUmV0cnkiLCJyZXRyeUFmdGVyIiwiX2dldFNlY29uZHNCZWZvcmVSZXRyeUFmdGVyIiwicmV0cnlBZnRlck1lc3NhZ2UiLCJnZXRSZXRyeUFmdGVyTWVzc2FnZSIsImRSZXRyeUFmdGVyIiwiZEN1cnJlbnREYXRlVGltZSIsIkRhdGUiLCJpQ3VycmVudERhdGVUaW1lSW5NaWxsaVNlY29uZHMiLCJnZXRUaW1lIiwiaVJldHJ5QWZ0ZXJEYXRlVGltZUluTWlsbGlTZWNvbmRzIiwiaVNlY29uZHNCZWZvcmVSZXRyeSIsIm9sZFVJRGVjaXNpb25zIiwiYWxsTWVzc2FnZXNUb1Nob3ciLCJtZXJnZWRVSURlY2lzaW9uIiwibWVzc2FnZXNUb1Nob3ciLCJBcnJheSIsImZyb20iLCJTZXQiLCJlbGVtZW50cyIsInVpRWxlbWVudFRvVXNlIiwiY29udGV4dE5lZWRzRXRhZ1JlZnJlc2giLCJjb250YWluc0JvdW5kVHJhbnNpdGlvbiIsImluS2V5Iiwic3BsaWNlIiwiaW5kZXhPZiIsImhvbGRNZXNzYWdlc0ZvckNvbnRyb2wiLCJpZGVudGlmaWVyIiwicmVsZWFzZUhvbGRCeUNvbnRyb2wiLCJ0aGVuIiwic2hvd01lc3NhZ2VzIiwibWVzc2FnZVBhZ2VOYXZpZ2F0aW9uQ2FsbGJhY2siLCJoYW5kbGVTaGVsbEJhY2siLCJzaGVsbEJhY2siLCJvUmVzb3VyY2VCdW5kbGUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJfcm91dGluZyIsIm5hdmlnYXRlVG9NZXNzYWdlUGFnZSIsImdldFRleHQiLCJjYXRjaCIsIkNvbnRyb2xsZXJFeHRlbnNpb24iLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNZXNzYWdlSGFuZGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBkZWVwRXF1YWwgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcEVxdWFsXCI7XG5pbXBvcnQgdWlkIGZyb20gXCJzYXAvYmFzZS91dGlsL3VpZFwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV4dGVuc2libGUsIGZpbmFsRXh0ZW5zaW9uLCBwcml2YXRlRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHtcblx0TWVzc2FnZVRlY2huaWNhbERldGFpbHMsXG5cdE1lc3NhZ2VVSURlY2lzaW9ucyxcblx0U2hvd01lc3NhZ2VQYXJhbWV0ZXJzLFxuXHRTdXBwb3J0ZWRVSUVsZW1lbnRcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL21lc3NhZ2VIYW5kbGVyL21lc3NhZ2VIYW5kbGluZ1wiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgTWVzc2FnaW5nIGZyb20gXCJzYXAvdWkvY29yZS9NZXNzYWdpbmdcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5cbnR5cGUgT2JqZWN0V2l0aENvbnZlcnRlclR5cGUgPSBvYmplY3QgJiB7XG5cdGNvbnZlcnRlclR5cGU6IHN0cmluZztcbn07XG50eXBlIE5hdmlnYXRpb25Ub0Vycm9yUGFnZVBhcmFtZXRlciA9IHtcblx0Y3VzdG9tTWVzc2FnZXM/OiBDdXN0b21NZXNzYWdlW107XG5cdGNvbmN1cnJlbnRFZGl0RmxhZz86IGJvb2xlYW47XG5cdGlzRGF0YVJlY2VpdmVkRXJyb3I/OiBib29sZWFuO1xuXHR0aXRsZT86IHN0cmluZztcblx0ZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cdGlzSW5pdGlhbExvYWQ1MDNFcnJvcj86IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgTmF2aWdhdGlvblRvRXJyb3JQYWdlUmVzdWx0ID0ge1xuXHR0aXRsZT86IHN0cmluZztcblx0ZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cdGVycm9yVHlwZT86IHN0cmluZztcblx0bmF2aWdhdGVCYWNrVG9PcmlnaW4/OiBib29sZWFuO1xuXHRoYW5kbGVTaGVsbEJhY2s/OiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIEN1c3RvbU1lc3NhZ2UgPSB7XG5cdGNvZGU6IHN0cmluZztcblx0dGV4dDogc3RyaW5nO1xuXHRwZXJzaXN0ZW50OiBib29sZWFuO1xuXHR0eXBlOiBNZXNzYWdlVHlwZTtcbn07XG5leHBvcnQgdHlwZSBTaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlciA9IHtcblx0Y3VzdG9tTWVzc2FnZXM/OiBDdXN0b21NZXNzYWdlW107XG5cdGlzT3BlcmF0aW9uRGlhbG9nT3Blbj86IGJvb2xlYW47XG5cdGNvbnRleHQ/OiBDb250ZXh0O1xuXHRjb25jdXJyZW50RWRpdEZsYWc/OiBib29sZWFuO1xuXHRjb250cm9sPzogQ29udHJvbDtcblx0c0FjdGlvbk5hbWU/OiBzdHJpbmc7XG5cdGFTZWxlY3RlZENvbnRleHRzPzogQ29udGV4dCB8IENvbnRleHRbXSB8IG51bGw7XG5cdG9uQmVmb3JlU2hvd01lc3NhZ2U/OiAobWVzc2FnZXM6IE1lc3NhZ2VbXSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzOiBTaG93TWVzc2FnZVBhcmFtZXRlcnMpID0+IFNob3dNZXNzYWdlUGFyYW1ldGVycztcblx0dW5Ib2xkS2V5Pzogc3RyaW5nO1xuXHRvdmVycmlkZVVJRGVjaXNpb24/OiBib29sZWFuO1xuXHRzaG93Qm91bmRTdGF0ZU1lc3NhZ2VzPzogYm9vbGVhbjtcblx0Ym91bmRBY3Rpb25OYW1lPzogc3RyaW5nO1xuXHRlbnRpdHlTZXQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTaG93TWVzc2FnZXNQYXJhbWV0ZXJzID0gU2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXIgJiB7XG5cdG1lc3NhZ2VQYWdlTmF2aWdhdGlvbkNhbGxiYWNrPzogRnVuY3Rpb247XG5cdHNoZWxsQmFjaz86IEZ1bmN0aW9uIHwgYm9vbGVhbjtcblx0aXNEYXRhUmVjZWl2ZWRFcnJvcj86IGJvb2xlYW47XG5cdGlzSW5pdGlhbExvYWQ1MDNFcnJvcj86IGJvb2xlYW47XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbj86IHN0cmluZztcbn07XG4vKipcbiAqXG4gKiBEZWZpbmVzIHRoZSBtZXNzYWdlIGRldGFpbCByZWxldmFudCBmb3IgdGhlIE1lc3NhZ2VCdXR0b24gYnVpbGRpbmcgYmxvY2sgdG8gZGlzcGxheSBhIHBvcG92ZXIuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIE1lc3NhZ2VEZXRhaWwgPSB7XG5cdG1lc3NhZ2U6IE1lc3NhZ2U7XG5cdGdyb3VwTmFtZT86IHN0cmluZztcblx0YWN0aXZlVGl0bGVIYW5kbGVyPzogRnVuY3Rpb247XG59O1xuXG4vKipcbiAqIEEgY29udHJvbGxlciBleHRlbnNpb24gb2ZmZXJpbmcgbWVzc2FnZSBoYW5kbGluZy5cbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqIEBleHBlcmltZW50YWwgQXMgb2YgdmVyc2lvbiAxLjkwLjBcbiAqIEBzaW5jZSAxLjkwLjBcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuTWVzc2FnZUhhbmRsZXJcIilcbmNsYXNzIE1lc3NhZ2VIYW5kbGVyIGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdHByaXZhdGUgc3RyaWN0V2FybmluZ01lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblxuXHRwcm90ZWN0ZWQgYmFzZSE6IFBhZ2VDb250cm9sbGVyO1xuXG5cdHByb3RlY3RlZCBob2xkS2V5czogc3RyaW5nW10gPSBbXTtcblxuXHRwcm90ZWN0ZWQgdWlEZWNpc2lvbnM6IE1lc3NhZ2VVSURlY2lzaW9ucyB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIGhvbGRNc2dzVG9TaG93ID0gZmFsc2U7XG5cblx0Ly8gV2UgYXdhaXQgc2hvd01lc3NhZ2VEaWFsb2cgdW50aWwgdGhlIFVJIGVsZW1lbnQgaXMgYXZhaWxhYmxlLlxuXHRwcml2YXRlIHVpRWxlbWVudElzQXZhaWxhYmxlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIHdhcm5pbmcgbWVzc2FnZXMgdG8gdGhlIG1lc3NhZ2UgaGFuZGxlci5cblx0ICogQHBhcmFtIGFNZXNzYWdlcyBUaGUgc3RyaWN0IHdhcm5pbmcgbWVzc2FnZXMgdG8gYmUgYWRkZWRcblx0ICovXG5cdGFkZFdhcm5pbmdNZXNzYWdlc1RvTWVzc2FnZUhhbmRsZXIoYU1lc3NhZ2VzOiBNZXNzYWdlW10pOiB2b2lkIHtcblx0XHR0aGlzLnN0cmljdFdhcm5pbmdNZXNzYWdlcyA9IHRoaXMuc3RyaWN0V2FybmluZ01lc3NhZ2VzLmNvbmNhdChhTWVzc2FnZXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgd2hldGhlciBvciBub3QgYSBtZXNzYWdlIGlzIGEgc3RyaWN0IHdhcm5pbmcgbWVzc2FnZSB0aGF0IHdhcyByZWNlaXZlZCBwcmV2aW91c2x5LlxuXHQgKiBAcGFyYW0gb01lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gYmUgY2hlY2tlZFxuXHQgKiBAcmV0dXJucyBXaGV0aGVyIG9yIG5vdCB0aGUgbWVzc2FnZSBpcyBhIHN0cmljdCB3YXJuaW5nIG1lc3NhZ2Vcblx0ICovXG5cdGlzU3RyaWN0V2FybmluZ01lc3NhZ2Uob01lc3NhZ2U6IE1lc3NhZ2UpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0dGhpcy5zdHJpY3RXYXJuaW5nTWVzc2FnZXMuZmluZCgobWVzc2FnZSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdG1lc3NhZ2UuZ2V0Q29kZSgpID09PSBvTWVzc2FnZS5nZXRDb2RlKCkgJiZcblx0XHRcdFx0XHRtZXNzYWdlLmdldE1lc3NhZ2UoKSA9PT0gb01lc3NhZ2UuZ2V0TWVzc2FnZSgpICYmXG5cdFx0XHRcdFx0bWVzc2FnZS5nZXRUeXBlKCkgPT09IG9NZXNzYWdlLmdldFR5cGUoKSAmJlxuXHRcdFx0XHRcdG1lc3NhZ2UuZ2V0RGVzY3JpcHRpb25VcmwoKSA9PT0gb01lc3NhZ2UuZ2V0RGVzY3JpcHRpb25VcmwoKSAmJlxuXHRcdFx0XHRcdGRlZXBFcXVhbChtZXNzYWdlLmdldFRhcmdldHMoKSwgb01lc3NhZ2UuZ2V0VGFyZ2V0cygpKSAmJlxuXHRcdFx0XHRcdG1lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpID09PSBvTWVzc2FnZS5nZXRQZXJzaXN0ZW50KClcblx0XHRcdFx0KTtcblx0XHRcdH0pICE9PSB1bmRlZmluZWRcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsZWFycyBhbGwgc3RyaWN0IHdhcm5pbmcgbWVzc2FnZXMgZnJvbSB0aGUgbWVzc2FnZSBoYW5kbGVyLlxuXHQgKi9cblx0Y2xlYXJTdHJpY3RXYXJuaW5nTWVzc2FnZXMoKTogdm9pZCB7XG5cdFx0dGhpcy5zdHJpY3RXYXJuaW5nTWVzc2FnZXMgPSBbXTtcblx0fVxuXG5cdGZpbHRlckVycm9yTWVzc2FnZXMobWVzc2FnZXM6IE1lc3NhZ2VbXSk6IE1lc3NhZ2VbXSB7XG5cdFx0cmV0dXJuIG1lc3NhZ2VzLmZpbHRlcigobWVzc2FnZSkgPT4gbWVzc2FnZS5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLkVycm9yKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IGJvdW5kIG1lc3NhZ2VzIGFyZSBzaG93biBpbiB0aGUgbWVzc2FnZSBkaWFsb2cuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkfS5cblx0ICpcblx0ICogSWYgdGhlIGJvdW5kIG1lc3NhZ2VzIGFyZSBzaG93biB0byB0aGUgdXNlciB3aXRoIGEgZGlmZmVyZW50IGNvbnRyb2wgbGlrZSB0aGUgKFRPRE86TGluaykgTWVzc2FnZUJ1dHRvblxuXHQgKiB0aGlzIG1ldGhvZCBoYXMgdG8gYmUgb3ZlcnJpZGRlbi5cblx0ICogQHJldHVybnMgRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCBib3VuZCBtZXNzYWdlcyBhcmUgc2hvd24gaW4gdGhlIG1lc3NhZ2UgZGlhbG9nLlxuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkKVxuXHRnZXRTaG93Qm91bmRNZXNzYWdlc0luTWVzc2FnZURpYWxvZygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBbGxvd3MgY29uc3VtZXIgb2YgYSBtZXNzYWdlIGJ1dHRvbiBCQiB0byBkZWNpZGUgd2hpY2ggYm91bmQgbWVzc2FnZXMgc2hvdWxkIGJlIHNob3duIGFuZCBob3cuXG5cdCAqXG5cdCAqIFRoaXMgaG9vayBpcyBjYWxsZWQgd2hlbiB0aGUgbWVzc2FnZSBidXR0b24gQkIgZGV0ZWN0cyBhIGNoYW5nZSBpbiB0aGUgbWVzc2FnZSBtb2RlbC5cblx0ICogVGhlIGhvb2tzIGFsbG93cyB0byBkZWZpbmUgYmVoYXZpb3VyIGZvciBtZXNzYWdlcyBpbiB0aGUgbWVzc2FnZSBidXR0b24gQkIuXG5cdCAqXG5cdCAqIENvbnN1bWVycyB3aWxsIGJlIGFibGUgdG8gZG8gdGhlIGZvbGxvd2luZyB3aXRoIHRoaXMgaG9vay5cblx0ICpcblx0ICogMS4gRmlsdGVyIG91dCBtZXNzYWdlcyBzbyB0aGF0IHRoZXkgYXJlIG5vdCBzaG93biBvbiB0aGUgbWVzc2FnZSBidXR0b24uXG5cdCAqIDIuIGdyb3VwIHRoZSBtZXNzYWdlcyBiYXNlZCBvbiB0aGVpciBVSS5cblx0ICogMy4gcHJvdmlkZSBhIHByZXNzZXIgaGFuZGxlciBpbmNhc2UgdGhlIG1lc3NhZ2Ugc2hvdWxkIHNob3cgYXMgYSBsaW5rLlxuXHQgKiBAcGFyYW0gX21lc3NhZ2VEZXRhaWxzIE9iamVjdCBjb250YWluaW5nIHRoZSBkZXRhaWxzIHJlbGF0ZWQgdG8gdGhlIG1lc3NhZ2UuXG5cdCAqIEBwYXJhbSBfbWVzc2FnZURldGFpbHMubWVzc2FnZSBUaGUgbWVzc2FnZSBmcm9tIHRoZSBtZXNzYWdlIG1vZGVsLklkZWFsbHksIGl0IG11c3Qgbm90IGJlIG1vZGlmaWVkIGRpcmVjdGx5LlxuXHQgKiBAcGFyYW0gX21lc3NhZ2VEZXRhaWxzLmdyb3VwTmFtZSBUaGUgZ3JvdXAgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgbWVzc2FnZS5cblx0ICogQHBhcmFtIF9tZXNzYWdlRGV0YWlscy5hY3RpdmVUaXRsZUhhbmRsZXIgRnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBjbGljayBldmVudCBvbiBhIG1lc3NhZ2UgaW4gdGhlIE1lc3NhZ2VCdXR0b24gYnVpbGRpbmcgYmxvY2suXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IG11c3QgYmUgcmV0dXJuZWQgYnkgdGhlIG92ZXJyaWRkZW4gbWV0aG9kLlxuXHQgKiBAcHVibGljXG5cdCAqIEBleHBlcmltZW50YWxcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShcIkFmdGVyQXN5bmNcIilcblx0YXN5bmMgYmVmb3JlU2hvd01lc3NhZ2VCdXR0b24oX21lc3NhZ2VEZXRhaWxzOiBNZXNzYWdlRGV0YWlsW10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVnaXN0ZXIgdG8gaG9sZCBtZXNzYWdlcyB1bml0bCBhIHByb2Nlc3MgaXMgY29tcGxldGUuXG5cdCAqXG5cdCAqIFRoZSBjYWxsZXIgY2FuIHJlZ2lzdGVyIHRvIGhvbGQgdGhlIG1lc3NhZ2UgaGFuZGxlciBmcm9tIHNob3dpbmcgbWVzc2FnZXMgdW50aWwgdGhlIGNhbGxlcidzIHByb2Nlc3NlcyBhcmUgY29tcGxldGVkLlxuXHQgKiBPbiByZWdpc3RlcmluZyB0aGUgY2FsbGVyIGlzIHJldHVybmVkIGEgdW5pcXVlIGtleS5cblx0ICogVGhlIG1lc3NhZ2VzIHdpbGwgbm90IGJlIHNob3duIGluIHRoZSBVSSB3aXRoIHN1YnNlcXVlbnQgJ3Nob3dNZXNzYWdlRGlhbG9nKCknIGNhbGxzLlxuXHQgKiBUaGUgY2FsbGVyIG5lZWRzIHRvIHVzZSAnc2hvd01lc3NhZ2VEaWFsb2coPGtleT4pJyBhdCB0aGUgZW5kIG9mIGFsbCBoaXMgcHJvY2Vzc2VzIHRvIHNob3cgdGhlIG1lc3NhZ2VzIGluIHRoZSBVSS5cblx0ICpcblx0ICogSWYgbXVsdGlwbGUgb3duZXJzIHJlZ2lzdGVyIHNpbXVsdGFuZW91c2x5LCB0aGVuIG1lc3NhZ2VzIGFyZSBzaG93biBpbiB0aGUgVUkgb25seSBhZnRlciAnc2hvd01lc3NhZ2VEaWFsb2coPHJlc3BlY3RpdmVfa2V5PiknIGlzIGNhbGxlZCBieSBhbGwgdGhlIHByb2Nlc3Nlcycgb3duZXJzLlxuXHQgKiBAcGFyYW0ga2V5IFVuaXF1ZSBpZGVudGlmaWVyIHRvIHVzZSwgSWYgbm90IHByb3ZpZGVkLCBhIFVJRCB3b3VsZCBiZSBjcmVhdGVkIGFuZCB1c2VkIHRvIHJlZ2lzdGVyLlxuXHQgKiBAcmV0dXJucyBVbmlxdWUgS2V5IHRvIGJlIHVzZWQgYnkgdGhlIGNhbGxlciB0byBzaG93IG1lc3NhZ2VzIGF0IGEgbGF0ZXIgcG9pbnQgb2YgdGltZS5cblx0ICovXG5cdHJlZ2lzdGVyVG9Ib2xkTWVzc2FnZXMoa2V5Pzogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRjb25zdCB1bmlxdWVLZXkgPSBrZXkgPz8gdWlkKCk7XG5cdFx0aWYgKCF0aGlzLmhvbGRLZXlzLmluY2x1ZGVzKHVuaXF1ZUtleSkpIHtcblx0XHRcdHRoaXMuaG9sZEtleXMucHVzaCh1bmlxdWVLZXkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5pcXVlS2V5O1xuXHR9XG5cblx0LyoqXG5cdCAqIENsZWFyIGFsbCBleGlzdGluZyBoZWxkIGtleXMuXG5cdCAqL1xuXHRyZXNldEhvbGRLZXlzKCk6IHZvaWQge1xuXHRcdHRoaXMuaG9sZEtleXMgPSBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTaG93cyBhIG1lc3NhZ2UgZGlhbG9nIHdpdGggdHJhbnNpdGlvbiBtZXNzYWdlcyBpZiB0aGVyZSBhcmUgYW55LlxuXHQgKiBUaGUgbWVzc2FnZSBkaWFsb2cgaXMgc2hvd24gYXMgYSBtb2RhbCBkaWFsb2cuIE9uY2UgdGhlIHVzZXIgY29uZmlybXMgdGhlIGRpYWxvZywgYWxsIHRyYW5zaXRpb24gbWVzc2FnZXNcblx0ICogYXJlIHJlbW92ZWQgZnJvbSB0aGUgbWVzc2FnZSBtb2RlbC4gSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBtZXNzYWdlLCBhIGxpc3Qgb2YgbWVzc2FnZXMgaXMgc2hvd24uIFRoZSB1c2VyXG5cdCAqIGNhbiBmaWx0ZXIgb24gbWVzc2FnZSB0eXBlcyBhbmQgY2FuIGRpc3BsYXkgZGV0YWlscyBhcyB3ZWxsIGFzIHRoZSBsb25nIHRleHQuIElmIHRoZXJlIGlzIG9uZSBtZXNzYWdlLFxuXHQgKiB0aGUgZGlhbG9nIGltbWVkaWF0ZWx5IHNob3dzIHRoZSBkZXRhaWxzIG9mIHRoZSBtZXNzYWdlLiBJZiB0aGVyZSBpcyBqdXN0IG9uZSBzdWNjZXNzIG1lc3NhZ2UsIGEgbWVzc2FnZVxuXHQgKiB0b2FzdCBpcyBzaG93biBpbnN0ZWFkLlxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMgUFJJVkFURVxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCBvbmNlIHRoZSB1c2VyIGNsb3NlcyB0aGUgZGlhbG9nLiBJZiB0aGVyZSBhcmUgbm8gbWVzc2FnZXNcblx0ICogdG8gYmUgc2hvd24sIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkIGltbWVkaWF0ZWx5XG5cdCAqIEBwdWJsaWNcblx0ICogQGV4cGVyaW1lbnRhbCBBcyBvZiB2ZXJzaW9uIDEuOTAuMFxuXHQgKiBAc2luY2UgMS45MC4wXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgc2hvd01lc3NhZ2VEaWFsb2cobVBhcmFtZXRlcnM/OiBTaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlcik6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIHJlbW92ZSBzdHJpY3Qgd2FybmluZyBtZXNzYWdlcyBmcm9tIHRoZSBtZXNzYWdlIG1vZGVsIGJlZm9yZSBzaG93aW5nIHRoZSBtZXNzYWdlIGRpYWxvZ1xuXHRcdGF3YWl0IHRoaXMudWlFbGVtZW50SXNBdmFpbGFibGU7XG5cblx0XHRjb25zdCBtZXNzYWdlc0luTW9kZWwgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdGNvbnN0IGR1cGxpY2F0ZVdhcm5pbmdNZXNzYWdlID0gbWVzc2FnZXNJbk1vZGVsLmZpbHRlcigobWVzc2FnZTogTWVzc2FnZSkgPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuaXNTdHJpY3RXYXJuaW5nTWVzc2FnZShtZXNzYWdlKTtcblx0XHR9KTtcblx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMoZHVwbGljYXRlV2FybmluZ01lc3NhZ2UpO1xuXG5cdFx0Y29uc3QgY3VzdG9tTWVzc2FnZXMgPSBtUGFyYW1ldGVycyAmJiBtUGFyYW1ldGVycy5jdXN0b21NZXNzYWdlcyA/IG1QYXJhbWV0ZXJzLmN1c3RvbU1lc3NhZ2VzIDogdW5kZWZpbmVkLFxuXHRcdFx0b09QSW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCB2aWV3VHlwZSA9ICh0aGlzLmJhc2UuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgT2JqZWN0V2l0aENvbnZlcnRlclR5cGUpLmNvbnZlcnRlclR5cGU7XG5cdFx0Ly8gc2V0IGlzQWN0aW9uUGFyYW1ldGVyRGlhbG9nIG9wZW4gc28gdGhhdCBpdCBjYW4gYmUgdXNlZCBpbiB0aGUgY29udHJvbGxlciBleHRlbnNpb24gdG8gZGVjaWRlIHdoZXRoZXIgbWVzc2FnZSBkaWFsb2cgc2hvdWxkIG9wZW4gb3Igbm90XG5cdFx0aWYgKG1QYXJhbWV0ZXJzICYmIG1QYXJhbWV0ZXJzLmlzT3BlcmF0aW9uRGlhbG9nT3BlbiAmJiBvT1BJbnRlcm5hbEJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRvT1BJbnRlcm5hbEJpbmRpbmdDb250ZXh0LnNldFByb3BlcnR5KFwiaXNPcGVyYXRpb25EaWFsb2dPcGVuXCIsIHRydWUpO1xuXHRcdH1cblx0XHRjb25zdCBiU2hvd0JvdW5kTWVzc2FnZXMgPSB0aGlzLmdldFNob3dCb3VuZE1lc3NhZ2VzSW5NZXNzYWdlRGlhbG9nKCk7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gKFxuXHRcdFx0bVBhcmFtZXRlcnMgJiYgbVBhcmFtZXRlcnMuY29udGV4dCA/IG1QYXJhbWV0ZXJzLmNvbnRleHQgOiB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpXG5cdFx0KSBhcyBPRGF0YVY0Q29udGV4dDtcblx0XHQvL2NvbnN0IGJFdGFnTWVzc2FnZSA9IG1QYXJhbWV0ZXJzICYmIG1QYXJhbWV0ZXJzLmJIYXNFdGFnTWVzc2FnZTtcblx0XHQvLyByZXNldCAgaXNPcGVyYXRpb25EaWFsb2dPcGVuXG5cdFx0Ly8gY2Fubm90IGRvIHRoaXMgb3BlcmF0aW9ucy5qcyBzaW5jZSBpdCBpcyBub3QgYXdhcmUgb2YgdGhlIHZpZXdcblx0XHRpZiAob09QSW50ZXJuYWxCaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0b09QSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzT3BlcmF0aW9uRGlhbG9nT3BlblwiLCBmYWxzZSk7XG5cdFx0fVxuXHRcdHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihcblx0XHRcdGZ1bmN0aW9uICh0aGlzOiBNZXNzYWdlSGFuZGxlciwgcmVzb2x2ZTogKCkgPT4gdm9pZCwgcmVqZWN0OiAoKSA9PiB2b2lkKTogdm9pZCB7XG5cdFx0XHRcdC8vIHdlIGhhdmUgdG8gc2V0IGEgdGltZW91dCB0byBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgbW9zdCByZWNlbnQgbWVzc2FnZXNcblx0XHRcdFx0c2V0VGltZW91dChcblx0XHRcdFx0XHRmdW5jdGlvbiAodGhpczogTWVzc2FnZUhhbmRsZXIpOiB2b2lkIHtcblx0XHRcdFx0XHRcdC8vIFRPRE86IGdyZWF0IEFQSSAtIHdpbGwgYmUgY2hhbmdlZCBsYXRlclxuXHRcdFx0XHRcdFx0dGhpcy5wcm9jZXNzQW5kU2hvd01lc3NhZ2VzKFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyA/PyB7fSxcblx0XHRcdFx0XHRcdFx0b0JpbmRpbmdDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRiU2hvd0JvdW5kTWVzc2FnZXMsXG5cdFx0XHRcdFx0XHRcdGN1c3RvbU1lc3NhZ2VzID8/IFtdLFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlLFxuXHRcdFx0XHRcdFx0XHRyZWplY3QsXG5cdFx0XHRcdFx0XHRcdHZpZXdUeXBlXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0uYmluZCh0aGlzKSxcblx0XHRcdFx0XHQwXG5cdFx0XHRcdCk7XG5cdFx0XHR9LmJpbmQodGhpcylcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb2Nlc3MgdGhlIG1lc3NhZ2VzIGFuZCBzaG93IHRoZW0gd2hlbiBleHBlY3RlZC5cblx0ICpcblx0ICogV2UgZmlsdGVyIHRoZSBtZXNzYWdlcyB0byBzaG93IGFuZCBob2xkIHRoZW0gdW50aWwgYWxsIHJlZ2lzdGVyZWQgcHJvY2Vzc2VzIGNhbGwgc2hvd01lc3NhZ2VEaWFsb2cgd2l0aCB0aGVpciByZXNwZWN0aXZlIGhlbGQga2V5cy5cblx0ICogQHBhcmFtIHBhcmFtZXRlcnMgUGFyYW1ldGVycyB0byBzaG93IG1lc3NhZ2UgZGlhbG9nLlxuXHQgKiBAcGFyYW0gYmluZGluZ0NvbnRleHQgQmluZCBjb250ZXh0IG9mIHRoZSBwYWdlLlxuXHQgKiBAcGFyYW0gc2hvd0JvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIFNob3VsZCBib3VuZCBtZXNzYWdlcyBiZSBzaG93bi5cblx0ICogQHBhcmFtIGN1c3RvbU1lc3NhZ2VzIEN1c3RvbSBtZXNzYWdlcyB0byBhZGQuXG5cdCAqIEBwYXJhbSBzdWNjZXNzIFN1Y2Nlc3MgY2FsbGJhY2suXG5cdCAqIEBwYXJhbSBmYWlsdXJlIEZhaWx1cmUgY2FsbGJhY2suXG5cdCAqIEBwYXJhbSB2aWV3VHlwZSBWaWV3IHR5cGUsIGxpc3QgcmVwb3J0IG9yIG9iamVjdCBwYWdlLlxuXHQgKi9cblx0cHJvY2Vzc0FuZFNob3dNZXNzYWdlcyhcblx0XHRwYXJhbWV0ZXJzOiBTaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlcixcblx0XHRiaW5kaW5nQ29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdFx0c2hvd0JvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiBib29sZWFuLFxuXHRcdGN1c3RvbU1lc3NhZ2VzOiBDdXN0b21NZXNzYWdlW10sXG5cdFx0c3VjY2VzczogKCkgPT4gdm9pZCxcblx0XHRmYWlsdXJlOiAoKSA9PiB2b2lkLFxuXHRcdHZpZXdUeXBlPzogc3RyaW5nXG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IHtcblx0XHRcdGNvbmN1cnJlbnRFZGl0RmxhZyxcblx0XHRcdGNvbnRyb2wsXG5cdFx0XHRzQWN0aW9uTmFtZSxcblx0XHRcdG9uQmVmb3JlU2hvd01lc3NhZ2UsXG5cdFx0XHR1bkhvbGRLZXksXG5cdFx0XHRpc09wZXJhdGlvbkRpYWxvZ09wZW46IGZvcmNlU2hvd1VJRWxlbWVudCA9IGZhbHNlLFxuXHRcdFx0b3ZlcnJpZGVVSURlY2lzaW9uLFxuXHRcdFx0c2hvd0JvdW5kU3RhdGVNZXNzYWdlc1xuXHRcdH0gPSBwYXJhbWV0ZXJzO1xuXHRcdHRoaXMuaG9sZE1zZ3NUb1Nob3cgPSB0cnVlO1xuXG5cdFx0Ly8gQ3JlYXRlIGEgVUkgZGVjaXNpb24uXG5cdFx0Y29uc3QgbmV3VUlEZWNpc2lvbnMgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VUlEZWNpc2lvbnMoXG5cdFx0XHRjdXN0b21NZXNzYWdlcyxcblx0XHRcdGJpbmRpbmdDb250ZXh0LFxuXHRcdFx0c2hvd0JvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzLFxuXHRcdFx0Y29uY3VycmVudEVkaXRGbGFnLFxuXHRcdFx0Y29udHJvbCxcblx0XHRcdHNBY3Rpb25OYW1lLFxuXHRcdFx0b25CZWZvcmVTaG93TWVzc2FnZSxcblx0XHRcdHZpZXdUeXBlLFxuXHRcdFx0c2hvd0JvdW5kU3RhdGVNZXNzYWdlcyxcblx0XHRcdHBhcmFtZXRlcnNcblx0XHQpO1xuXHRcdHRoaXMudXBkYXRlVUlEZWNpc2lvbnMobmV3VUlEZWNpc2lvbnMsIG92ZXJyaWRlVUlEZWNpc2lvbik7XG5cdFx0dGhpcy5yZW1vdmVIb2xkS2V5KHVuSG9sZEtleSA/PyBjb250cm9sPy5nZXRJZCgpKTtcblx0XHR0aGlzLnNob3dNZXNzYWdlc1dpdGhDb25kdGlvbnMoZm9yY2VTaG93VUlFbGVtZW50LCBzdWNjZXNzLCBmYWlsdXJlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTaG93IE1lc3NhZ2VzIGluIHRoZSBVSSBiYXNlZCBvbiBjb25kaXRpb25zLlxuXHQgKiBAcGFyYW0gZm9yY2VTaG93VUlFbGVtZW50XG5cdCAqIEBwYXJhbSBzdWNjZXNzXG5cdCAqIEBwYXJhbSBmYWlsdXJlXG5cdCAqL1xuXHRhc3luYyBzaG93TWVzc2FnZXNXaXRoQ29uZHRpb25zKFxuXHRcdGZvcmNlU2hvd1VJRWxlbWVudCA9IGZhbHNlLFxuXHRcdHN1Y2Nlc3M/OiAocmV0PzogdW5rbm93bikgPT4gdm9pZCxcblx0XHRmYWlsdXJlPzogKGVycj86IHVua25vd24pID0+IHZvaWRcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgc2hvd1VJRWxlbWVudCA9IGZvcmNlU2hvd1VJRWxlbWVudCB8fCB0aGlzLmNoZWNrVG9TaG93VUlFbGVtZW50KCk7XG5cdFx0aWYgKHNob3dVSUVsZW1lbnQgJiYgdGhpcy51aURlY2lzaW9ucykge1xuXHRcdFx0Ly8gU2hvdyBVSSBlbGVtZW50IGZvciB0aGUgcHJlc2VudCBkZWNpc2lvbiBhbmQgY2xlYXIgdGhlIGRlY2lzaW9uLlxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy51aUVsZW1lbnRJc0F2YWlsYWJsZSA9IG1lc3NhZ2VIYW5kbGluZy5zaG93TWVzc2FnZXNJblVJKHRoaXMudWlEZWNpc2lvbnMpO1xuXHRcdFx0XHRjb25zdCByZXQgPSBhd2FpdCB0aGlzLnVpRWxlbWVudElzQXZhaWxhYmxlO1xuXHRcdFx0XHRzdWNjZXNzPy4ocmV0KTtcblx0XHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoYEZFIDogVjQgOiBNZXNzYWdlSGFuZGxlciA6IEVycm9yIG9uIHRyeWluZyB0byBzaG93IFVJIGVsZW1lbnQ6ICR7ZXJyfWApO1xuXHRcdFx0XHR0aGlzLnVpRWxlbWVudElzQXZhaWxhYmxlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0XHRcdGZhaWx1cmU/LihlcnIpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy51aURlY2lzaW9ucyA9IHVuZGVmaW5lZDtcblx0XHRcdHRoaXMuY2xlYXJTdHJpY3RXYXJuaW5nTWVzc2FnZXMoKTtcblx0XHRcdHRoaXMuaG9sZE1zZ3NUb1Nob3cgPSBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0TG9nLmluZm8oXCJGRSA6IFY0IDogTWVzc2FnZUhhbmRsZXIgOiBIb2xkaW5nIG1lc3NhZ2VzIHVudGlsIGEgcmVnaXN0ZXJlZCBwcm9jZXNzIFwiKTtcblx0XHRcdHN1Y2Nlc3M/LigpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBZb3UgY2FuIHJlbW92ZSB0aGUgZXhpc3RpbmcgdHJhbnNpdGlvbiBtZXNzYWdlIGZyb20gdGhlIG1lc3NhZ2UgbW9kZWwgd2l0aCB0aGlzIG1ldGhvZC5cblx0ICogV2l0aCBldmVyeSB1c2VyIGludGVyYWN0aW9uIHRoYXQgY2F1c2VzIHNlcnZlciBjb21tdW5pY2F0aW9uIChsaWtlIGNsaWNraW5nIG9uIGFuIGFjdGlvbiwgY2hhbmdpbmcgZGF0YSksXG5cdCAqIHRoaXMgbWV0aG9kIHJlbW92ZXMgdGhlIGV4aXN0aW5nIHRyYW5zaXRpb24gbWVzc2FnZXMgZnJvbSB0aGUgbWVzc2FnZSBtb2RlbC5cblx0ICogQHBhcmFtIFtrZWVwQm91bmRNZXNzYWdlXSBDaGVja3MgaWYgdGhlIGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgYXJlIG5vdCB0byBiZSByZW1vdmVkXG5cdCAqIEBwYXJhbSBrZWVwVW5ib3VuZE1lc3NhZ2Vcblx0ICogQHBhcmFtIHNQYXRoVG9CZVJlbW92ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoa2VlcEJvdW5kTWVzc2FnZT86IGJvb2xlYW4sIGtlZXBVbmJvdW5kTWVzc2FnZT86IGJvb2xlYW4sIHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAoIWtlZXBCb3VuZE1lc3NhZ2UpIHtcblx0XHRcdG1lc3NhZ2VIYW5kbGluZy5yZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyhzUGF0aFRvQmVSZW1vdmVkKTtcblx0XHR9XG5cdFx0aWYgKCFrZWVwVW5ib3VuZE1lc3NhZ2UpIHtcblx0XHRcdG1lc3NhZ2VIYW5kbGluZy5yZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0aGF0IHJldHVybnMgYWxsIHRoZSBwYXJhbWV0ZXJzIG5lZWRlZCB0byBoYW5kbGUgdGhlIG5hdmlnYXRpb24gdG8gdGhlIGVycm9yIHBhZ2UuXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVyc1xuXHQgKiBAcmV0dXJucyBUaGUgcGFyYW1ldGVycyBuZWNlc3NhcnkgZm9yIHRoZSBuYXZpZ2F0aW9uIHRvIHRoZSBlcnJvciBwYWdlXG5cdCAqL1xuXHRfY2hlY2tOYXZpZ2F0aW9uVG9FcnJvclBhZ2UobVBhcmFtZXRlcnM/OiBOYXZpZ2F0aW9uVG9FcnJvclBhZ2VQYXJhbWV0ZXIpOiBOYXZpZ2F0aW9uVG9FcnJvclBhZ2VSZXN1bHQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGFVbmJvdW5kTWVzc2FnZXMgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TWVzc2FnZXMoKTtcblx0XHRjb25zdCBiU2hvd0JvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzID0gdGhpcy5nZXRTaG93Qm91bmRNZXNzYWdlc0luTWVzc2FnZURpYWxvZygpO1xuXHRcdGNvbnN0IGFCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyA9IGJTaG93Qm91bmRUcmFuc2l0aW9uTWVzc2FnZXMgPyBtZXNzYWdlSGFuZGxpbmcuZ2V0TWVzc2FnZXModHJ1ZSwgdHJ1ZSkgOiBbXTtcblx0XHRjb25zdCBhQ3VzdG9tTWVzc2FnZXMgPSBtUGFyYW1ldGVycyAmJiBtUGFyYW1ldGVycy5jdXN0b21NZXNzYWdlcyA/IG1QYXJhbWV0ZXJzLmN1c3RvbU1lc3NhZ2VzIDogW107XG5cdFx0Y29uc3QgYklzU3RpY2t5RWRpdE1vZGUgPSBDb21tb25VdGlscy5pc1N0aWNreUVkaXRNb2RlKHRoaXMuYmFzZS5nZXRWaWV3KCkpO1xuXHRcdGxldCBtTWVzc2FnZVBhZ2VQYXJhbWV0ZXJzOiBOYXZpZ2F0aW9uVG9FcnJvclBhZ2VSZXN1bHQgfCB1bmRlZmluZWQ7XG5cblx0XHQvLyBUT0RPOiBTdGljayBtb2RlIGNoZWNrIGlzIG9rYXkgYXMgbG9uZyBhcyB0aGUgY29udHJvbGxlciBleHRlbnNpb24gaXMgdXNlZCB3aXRoIHNhcC5mZS5jb3JlIGFuZCBzYXAuZmUuY29yZS5BcHBDb21wb25lbnQuXG5cdFx0Ly8gSXQgbWlnaHQgYmUgYmV0dGVyIHRvIHByb3ZpZGUgYW4gZXh0ZW5zaW9uIHRvIHRoZSBjb25zdW1lciBvZiB0aGUgY29udHJvbGxlciBleHRlbnNpb24gdG8gcHJvdmlkZSB0aGlzIHZhbHVlLlxuXG5cdFx0Ly8gVGhlIG1lc3NhZ2UgcGFnZSBjYW4gb25seSBzaG93IDEgbWVzc2FnZSB0b2RheSwgc28gd2UgbmF2aWdhdGUgdG8gaXQgd2hlbiA6XG5cdFx0Ly8gMS4gVGhlcmUgYXJlIG5vIGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgdG8gc2hvdyxcblx0XHQvLyAyLiBUaGVyZSBhcmUgbm8gY3VzdG9tIG1lc3NhZ2VzIHRvIHNob3csICZcblx0XHQvLyAzLiBUaGVyZSBpcyBleGFjdGx5IDEgdW5ib3VuZCBtZXNzYWdlIGluIHRoZSBtZXNzYWdlIG1vZGVsIHdpdGggc3RhdHVzQ29kZT01MDMgYW5kIHJldHJ5LUFmdGVyIGF2YWlsYWJsZVxuXHRcdC8vIDQuIHJldHJ5QWZ0ZXIgaXMgZ3JlYXRlciB0aGFuIDEyMCBzZWNvbmRzXG5cdFx0Ly9cblx0XHQvLyBJbiBBZGRpdGlvbiwgbmF2aWdhdGluZyBhd2F5IGZyb20gYSBzdGlja3kgc2Vzc2lvbiB3aWxsIGRlc3Ryb3kgdGhlIHNlc3Npb24gc28gd2UgZG8gbm90IG5hdmlnYXRlIHRvIG1lc3NhZ2UgcGFnZSBmb3Igbm93LlxuXHRcdC8vIFRPRE86IGNoZWNrIGlmIG5hdmlnYXRpb24gc2hvdWxkIGJlIGRvbmUgaW4gc3RpY2t5IGVkaXQgbW9kZS5cblx0XHRpZiAobVBhcmFtZXRlcnM/LmlzRGF0YVJlY2VpdmVkRXJyb3IgPT09IHRydWUpIHtcblx0XHRcdG1NZXNzYWdlUGFnZVBhcmFtZXRlcnMgPSB7XG5cdFx0XHRcdHRpdGxlOiBtUGFyYW1ldGVycy50aXRsZSxcblx0XHRcdFx0ZGVzY3JpcHRpb246IG1QYXJhbWV0ZXJzLmRlc2NyaXB0aW9uLFxuXHRcdFx0XHRuYXZpZ2F0ZUJhY2tUb09yaWdpbjogdHJ1ZSxcblx0XHRcdFx0ZXJyb3JUeXBlOiBcIlBhZ2VOb3RGb3VuZFwiXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHQhYklzU3RpY2t5RWRpdE1vZGUgJiZcblx0XHRcdCFhQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoICYmXG5cdFx0XHQhYUN1c3RvbU1lc3NhZ2VzLmxlbmd0aCAmJlxuXHRcdFx0KGFVbmJvdW5kTWVzc2FnZXMubGVuZ3RoID09PSAxIHx8IG1QYXJhbWV0ZXJzPy5pc0luaXRpYWxMb2FkNTAzRXJyb3IgPT09IHRydWUpXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBvTWVzc2FnZSA9IGFVbmJvdW5kTWVzc2FnZXNbMF07XG5cdFx0XHRjb25zdCBvVGVjaG5pY2FsRGV0YWlscyA9IG9NZXNzYWdlLmdldFRlY2huaWNhbERldGFpbHMoKSBhcyBNZXNzYWdlVGVjaG5pY2FsRGV0YWlscyB8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChvVGVjaG5pY2FsRGV0YWlscz8uaHR0cFN0YXR1cyA9PT0gNTAzKSB7XG5cdFx0XHRcdG1NZXNzYWdlUGFnZVBhcmFtZXRlcnMgPSB0aGlzLl9nZXRIVFRQNTAzTWVzc2FnZVBhcmFtZXRlcnMob01lc3NhZ2UsIG9UZWNobmljYWxEZXRhaWxzKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG1NZXNzYWdlUGFnZVBhcmFtZXRlcnM7XG5cdH1cblxuXHRfZ2V0SFRUUDUwM01lc3NhZ2VQYXJhbWV0ZXJzKG1lc3NhZ2U6IE1lc3NhZ2UsIHRlY2huaWNhbERldGFpbHM6IE1lc3NhZ2VUZWNobmljYWxEZXRhaWxzKTogTmF2aWdhdGlvblRvRXJyb3JQYWdlUmVzdWx0IHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgbWVzc2FnZVBhZ2VQYXJhbWV0ZXJzOiBOYXZpZ2F0aW9uVG9FcnJvclBhZ2VSZXN1bHQgfCB1bmRlZmluZWQ7XG5cblx0XHRjb25zdCBzZWNvbmRzQmVmb3JlUmV0cnkgPVxuXHRcdFx0dGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyICE9PSB1bmRlZmluZWQgPyB0aGlzLl9nZXRTZWNvbmRzQmVmb3JlUmV0cnlBZnRlcih0ZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXIpIDogdW5kZWZpbmVkO1xuXG5cdFx0aWYgKHNlY29uZHNCZWZvcmVSZXRyeSA9PT0gdW5kZWZpbmVkIHx8IHNlY29uZHNCZWZvcmVSZXRyeSA+IDEyMCkge1xuXHRcdFx0Y29uc3QgcmV0cnlBZnRlck1lc3NhZ2UgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0UmV0cnlBZnRlck1lc3NhZ2UobWVzc2FnZSk7XG5cdFx0XHRtZXNzYWdlUGFnZVBhcmFtZXRlcnMgPSB7XG5cdFx0XHRcdGRlc2NyaXB0aW9uOiByZXRyeUFmdGVyTWVzc2FnZSA/IGAke3JldHJ5QWZ0ZXJNZXNzYWdlfSAke21lc3NhZ2UuZ2V0TWVzc2FnZSgpfWAgOiBtZXNzYWdlLmdldE1lc3NhZ2UoKSxcblx0XHRcdFx0bmF2aWdhdGVCYWNrVG9PcmlnaW46IHRydWUsXG5cdFx0XHRcdGVycm9yVHlwZTogXCJVbmFibGVUb0xvYWRcIlxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWVzc2FnZVBhZ2VQYXJhbWV0ZXJzO1xuXHR9XG5cblx0X2dldFNlY29uZHNCZWZvcmVSZXRyeUFmdGVyKGRSZXRyeUFmdGVyOiBEYXRlKTogbnVtYmVyIHtcblx0XHRjb25zdCBkQ3VycmVudERhdGVUaW1lID0gbmV3IERhdGUoKSxcblx0XHRcdGlDdXJyZW50RGF0ZVRpbWVJbk1pbGxpU2Vjb25kcyA9IGRDdXJyZW50RGF0ZVRpbWUuZ2V0VGltZSgpLFxuXHRcdFx0aVJldHJ5QWZ0ZXJEYXRlVGltZUluTWlsbGlTZWNvbmRzID0gZFJldHJ5QWZ0ZXIuZ2V0VGltZSgpLFxuXHRcdFx0aVNlY29uZHNCZWZvcmVSZXRyeSA9IChpUmV0cnlBZnRlckRhdGVUaW1lSW5NaWxsaVNlY29uZHMgLSBpQ3VycmVudERhdGVUaW1lSW5NaWxsaVNlY29uZHMpIC8gMTAwMDtcblx0XHRyZXR1cm4gaVNlY29uZHNCZWZvcmVSZXRyeTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGUgdGhlIGV4aXN0aW5nIFVJIGRlY2lzaW9ucyB3aXRoIHRoZSBuZXcgb25lcy5cblx0ICogQHBhcmFtIG5ld1VJRGVjaXNpb25zIEluIGNvbW1pbmcgVUkgZGVjaXNpb25zLlxuXHQgKiBAcGFyYW0gb3ZlcnJpZGVVSURlY2lzaW9uIE92ZXJyaWRlIHRoZSBleGlzdGluZyBVSSBkZWNpc2lvbiB0byBzaG93IG1lc3NhZ2VzIHdpdGggdGhlIG5ldyBvbmUuXG5cdCAqXG5cdCAqICdvdmVycmlkZVVJRGVjaXNpb24nLCBUaGlzIHdvdWxkIGJlIG5lZWRlZCB3aGVuIHRoZXJlIGlzIGEgY2hhbmdlIGluIHBhZ2UgY29udGV4dCBhbmQgdGhlIHBhcmFtdGVycyB0byBjcmVhdGUgdGhlIG5ldyBVSSBkZWNpc2lvbiBhcmUgZGlmZmVyZW50LlxuXHQgKi9cblx0dXBkYXRlVUlEZWNpc2lvbnMobmV3VUlEZWNpc2lvbnM6IE1lc3NhZ2VVSURlY2lzaW9ucywgb3ZlcnJpZGVVSURlY2lzaW9uID0gZmFsc2UpOiB2b2lkIHtcblx0XHRjb25zdCBvbGRVSURlY2lzaW9ucyA9IHRoaXMudWlEZWNpc2lvbnM7XG5cdFx0bGV0IGFsbE1lc3NhZ2VzVG9TaG93OiBNZXNzYWdlW10gPSBbXTtcblx0XHRsZXQgbWVyZ2VkVUlEZWNpc2lvbjtcblx0XHRpZiAob2xkVUlEZWNpc2lvbnMgJiYgb3ZlcnJpZGVVSURlY2lzaW9uID09PSBmYWxzZSkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRvbGRVSURlY2lzaW9ucy5tZXNzYWdlc1RvU2hvdy5sZW5ndGggPT09IDEgJiZcblx0XHRcdFx0bmV3VUlEZWNpc2lvbnMubWVzc2FnZXNUb1Nob3cubGVuZ3RoID09PSAxICYmXG5cdFx0XHRcdG9sZFVJRGVjaXNpb25zLm1lc3NhZ2VzVG9TaG93WzBdLmdldENvZGUoKSA9PT0gXCJDX0NPTU1PTl9TVUNDRVNTX01FU1NBR0VcIiAmJlxuXHRcdFx0XHRuZXdVSURlY2lzaW9ucy5tZXNzYWdlc1RvU2hvd1swXS5nZXRDb2RlKCkgPT09IFwiQ19DT01NT05fU1VDQ0VTU19NRVNTQUdFXCJcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBDaGVjayBpZiBib3RoIGFyZSBnZW5lcmljIHN1Y2Nlc3MgbWVzc2FnZXMsIHRoZW4gd2Ugc2hvdyBvbmx5IG9uZSBtZXNzYWdlLlxuXHRcdFx0XHRhbGxNZXNzYWdlc1RvU2hvdyA9IG9sZFVJRGVjaXNpb25zLm1lc3NhZ2VzVG9TaG93O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YWxsTWVzc2FnZXNUb1Nob3cgPSBBcnJheS5mcm9tKG5ldyBTZXQoWy4uLm9sZFVJRGVjaXNpb25zLm1lc3NhZ2VzVG9TaG93LCAuLi5uZXdVSURlY2lzaW9ucy5tZXNzYWdlc1RvU2hvd10pKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGVsZW1lbnRzID0gW29sZFVJRGVjaXNpb25zLnVpRWxlbWVudFRvVXNlLCBuZXdVSURlY2lzaW9ucy51aUVsZW1lbnRUb1VzZV07XG5cdFx0XHQvLyBEZWZhdWx0IHdlIHNob3cgZGlhbG9nXG5cdFx0XHRsZXQgdWlFbGVtZW50VG9Vc2U6IFN1cHBvcnRlZFVJRWxlbWVudCA9IGFsbE1lc3NhZ2VzVG9TaG93Lmxlbmd0aCA+IDAgPyBcIkRpYWxvZ1wiIDogXCJOb25lXCI7XG5cblx0XHRcdGlmIChhbGxNZXNzYWdlc1RvU2hvdy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0Ly8gU2luZ2xlIG1lc3NhZ2UsIHdlIGNoZWNrIGZvciBzcGVjaWZpYyBVSSBFbGVtZW50IHRvIHVzZS5cblx0XHRcdFx0aWYgKGVsZW1lbnRzLmluY2x1ZGVzKFwiVG9hc3RcIikpIHtcblx0XHRcdFx0XHR1aUVsZW1lbnRUb1VzZSA9IFwiVG9hc3RcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChlbGVtZW50cy5pbmNsdWRlcyhcIkJveFwiKSkge1xuXHRcdFx0XHRcdHVpRWxlbWVudFRvVXNlID0gXCJCb3hcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRtZXJnZWRVSURlY2lzaW9uID0ge1xuXHRcdFx0XHRtZXNzYWdlc1RvU2hvdzogYWxsTWVzc2FnZXNUb1Nob3csXG5cdFx0XHRcdHVpRWxlbWVudFRvVXNlLFxuXHRcdFx0XHRjb250ZXh0TmVlZHNFdGFnUmVmcmVzaDogb2xkVUlEZWNpc2lvbnMuY29udGV4dE5lZWRzRXRhZ1JlZnJlc2ggfHwgbmV3VUlEZWNpc2lvbnMuY29udGV4dE5lZWRzRXRhZ1JlZnJlc2gsXG5cdFx0XHRcdGNvbnRhaW5zQm91bmRUcmFuc2l0aW9uOiBvbGRVSURlY2lzaW9ucy5jb250YWluc0JvdW5kVHJhbnNpdGlvbiB8fCBuZXdVSURlY2lzaW9ucy5jb250YWluc0JvdW5kVHJhbnNpdGlvblxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWVyZ2VkVUlEZWNpc2lvbiA9IG5ld1VJRGVjaXNpb25zO1xuXHRcdH1cblxuXHRcdHRoaXMudWlEZWNpc2lvbnMgPSBtZXJnZWRVSURlY2lzaW9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZSBoZWxkIGtleS5cblx0ICogQHBhcmFtIGluS2V5IEtleSB0byByZW1vdmUuXG5cdCAqL1xuXHRyZW1vdmVIb2xkS2V5KGluS2V5Pzogc3RyaW5nKTogdm9pZCB7XG5cdFx0aWYgKGluS2V5ICYmIHRoaXMuaG9sZEtleXMuaW5jbHVkZXMoaW5LZXkpKSB7XG5cdFx0XHR0aGlzLmhvbGRLZXlzLnNwbGljZSh0aGlzLmhvbGRLZXlzLmluZGV4T2YoaW5LZXkpLCAxKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgaWYgVUkgRWxlbWVudCB3aXRoIG1lc3NhZ2VzIHNob3VsZCBiZSBzaG93bi5cblx0ICogQHJldHVybnMgQm9vbGVhblxuXHQgKi9cblx0Y2hlY2tUb1Nob3dVSUVsZW1lbnQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuaG9sZE1zZ3NUb1Nob3cgJiYgKHRoaXMuaG9sZEtleXMubGVuZ3RoID4gMCA/IGZhbHNlIDogdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogSG9sZCBtZXNzYWdlcyBmb3IgdGhlIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBjb250cm9sXG5cdCAqL1xuXHRob2xkTWVzc2FnZXNGb3JDb250cm9sKGNvbnRyb2w6IENvbnRyb2wpOiB2b2lkIHtcblx0XHRjb25zdCBpZGVudGlmaWVyID0gY29udHJvbC5nZXRJZCgpO1xuXHRcdHRoaXMucmVnaXN0ZXJUb0hvbGRNZXNzYWdlcyhpZGVudGlmaWVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWxlYXNlIG1lc3NhZ2UgaG9sZCBieSBhIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBjb250cm9sXG5cdCAqL1xuXHRhc3luYyByZWxlYXNlSG9sZEJ5Q29udHJvbChjb250cm9sPzogQ29udHJvbCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGlkZW50aWZpZXIgPSBjb250cm9sPy5nZXRJZCgpO1xuXHRcdHRoaXMucmVtb3ZlSG9sZEtleShpZGVudGlmaWVyKTtcblx0XHR0aGlzLnVpRWxlbWVudElzQXZhaWxhYmxlID0gdGhpcy51aUVsZW1lbnRJc0F2YWlsYWJsZS50aGVuKFxuXHRcdFx0YXN5bmMgZnVuY3Rpb24gKHRoaXM6IE1lc3NhZ2VIYW5kbGVyKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnNob3dNZXNzYWdlc1dpdGhDb25kdGlvbnMoKTtcblx0XHRcdH0uYmluZCh0aGlzKVxuXHRcdCk7XG5cdFx0YXdhaXQgdGhpcy51aUVsZW1lbnRJc0F2YWlsYWJsZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTaG93cyBhIG1lc3NhZ2UgcGFnZSBvciBhIG1lc3NhZ2UgZGlhbG9nIGJhc2VkIG9uIHRoZSBtZXNzYWdlcyBpbiB0aGUgbWVzc2FnZSBkaWFsb2cuXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVyc11cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgb25jZSB0aGUgdXNlciBjbG9zZXMgdGhlIG1lc3NhZ2UgZGlhbG9nIG9yIHdoZW4gbmF2aWdhdGlvbiB0byB0aGUgbWVzc2FnZSBwYWdlIGlzIGNvbXBsZXRlLiBJZiB0aGVyZSBhcmUgbm8gbWVzc2FnZXNcblx0ICogdG8gYmUgc2hvd24sIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkIGltbWVkaWF0ZWx5XG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgc2hvd01lc3NhZ2VzKHBhcmFtZXRlcnM/OiBTaG93TWVzc2FnZXNQYXJhbWV0ZXJzKTogUHJvbWlzZTx2b2lkIHwgYm9vbGVhbiB8IERpYWxvZz4ge1xuXHRcdGNvbnN0IG1lc3NhZ2VQYWdlUGFyYW1ldGVycyA9IHRoaXMuX2NoZWNrTmF2aWdhdGlvblRvRXJyb3JQYWdlKHBhcmFtZXRlcnMpO1xuXG5cdFx0aWYgKG1lc3NhZ2VQYWdlUGFyYW1ldGVycykge1xuXHRcdFx0Ly8gbmF2aWdhdGUgdG8gbWVzc2FnZSBwYWdlLlxuXHRcdFx0Ly8gaGFuZGxlciBiZWZvcmUgcGFnZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZCwgZm9yIGV4YW1wbGUgdG8gY2xvc2UgdGhlIGFjdGlvbiBwYXJhbWV0ZXIgZGlhbG9nXG5cdFx0XHRpZiAocGFyYW1ldGVycz8ubWVzc2FnZVBhZ2VOYXZpZ2F0aW9uQ2FsbGJhY2spIHtcblx0XHRcdFx0cGFyYW1ldGVycy5tZXNzYWdlUGFnZU5hdmlnYXRpb25DYWxsYmFjaygpO1xuXHRcdFx0fVxuXG5cdFx0XHRtZXNzYWdlUGFnZVBhcmFtZXRlcnMuaGFuZGxlU2hlbGxCYWNrID0gIXBhcmFtZXRlcnM/LnNoZWxsQmFjaztcblx0XHRcdHRoaXMucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHQvLyB3ZSBoYXZlIHRvIHNldCBhIHRpbWVvdXQgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlIG1vc3QgcmVjZW50IG1lc3NhZ2VzXG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdC8vIGNsZWFyIGFsbCBob2xkIGtleXMgYXMgd2UgbmF2aWdhdGUgdG8gbWVzc2FnZSBwYWdlLlxuXHRcdFx0XHRcdHRoaXMucmVzZXRIb2xkS2V5cygpO1xuXG5cdFx0XHRcdFx0Ly8gVE9ETzogZ3JlYXQgQVBJIC0gd2lsbCBiZSBjaGFuZ2VkIGxhdGVyXG5cdFx0XHRcdFx0dGhpcy5iYXNlLl9yb3V0aW5nXG5cdFx0XHRcdFx0XHQubmF2aWdhdGVUb01lc3NhZ2VQYWdlKFxuXHRcdFx0XHRcdFx0XHRwYXJhbWV0ZXJzPy5pc0RhdGFSZWNlaXZlZEVycm9yID09PSB0cnVlXG5cdFx0XHRcdFx0XHRcdFx0PyBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0RBVEFfUkVDRUlWRURfRVJST1JcIilcblx0XHRcdFx0XHRcdFx0XHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19USVRMRVwiKSxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZVBhZ2VQYXJhbWV0ZXJzXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQudGhlbihyZXNvbHZlKVxuXHRcdFx0XHRcdFx0LmNhdGNoKHJlamVjdCk7XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIG5hdmlnYXRlIHRvIG1lc3NhZ2UgZGlhbG9nXG5cdFx0XHRyZXR1cm4gdGhpcy5zaG93TWVzc2FnZURpYWxvZyhwYXJhbWV0ZXJzKTtcblx0XHR9XG5cdH1cbn1cbmV4cG9ydCBkZWZhdWx0IE1lc3NhZ2VIYW5kbGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0VBeUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQU5BLElBUU1BLGNBQWMsSUFBQUMsSUFBQSxHQURuQkMsY0FBYyxDQUFDLGlEQUFpRCxDQUFDLEVBQUFDLEtBQUEsR0FvRWhFQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FDbEJDLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLE9BQU8sQ0FBQyxFQUFBQyxLQUFBLEdBd0JyQ0MsZUFBZSxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUNqQkwsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFBTSxLQUFBLEdBOEN4QkYsZUFBZSxDQUFDLENBQUMsRUFBQUcsS0FBQSxHQUNqQkMsY0FBYyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQTZJaEJMLGVBQWUsQ0FBQyxDQUFDLEVBQUFNLEtBQUEsR0FtTGpCTixlQUFlLENBQUMsQ0FBQyxFQUFBTyxNQUFBLEdBQ2pCSCxjQUFjLENBQUMsQ0FBQyxFQUFBYixJQUFBLENBQUFpQixNQUFBLElBQUFDLE9BQUEsMEJBQUFDLG9CQUFBO0lBL2JqQixTQUFBcEIsZUFBQSxFQUFjO01BQUEsSUFBQXFCLEtBQUE7TUFDYkEsS0FBQSxHQUFBRCxvQkFB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
@@ -71,6 +71,17 @@ export type ShowMessagesParameters = ShowMessageDialogParameter & {
71
71
  title?: string;
72
72
  description?: string;
73
73
  };
74
+ /**
75
+ *
76
+ * Defines the message detail relevant for the MessageButton building block to display a popover.
77
+ * @public
78
+ */
79
+ export type MessageDetail = {
80
+ message: Message;
81
+ groupName?: string;
82
+ activeTitleHandler?: Function;
83
+ };
84
+
74
85
  /**
75
86
  * A controller extension offering message handling.
76
87
  * @hideconstructor
@@ -152,6 +163,31 @@ class MessageHandler extends ControllerExtension {
152
163
  return true;
153
164
  }
154
165
 
166
+ /**
167
+ * Allows consumer of a message button BB to decide which bound messages should be shown and how.
168
+ *
169
+ * This hook is called when the message button BB detects a change in the message model.
170
+ * The hooks allows to define behaviour for messages in the message button BB.
171
+ *
172
+ * Consumers will be able to do the following with this hook.
173
+ *
174
+ * 1. Filter out messages so that they are not shown on the message button.
175
+ * 2. group the messages based on their UI.
176
+ * 3. provide a presser handler incase the message should show as a link.
177
+ * @param _messageDetails Object containing the details related to the message.
178
+ * @param _messageDetails.message The message from the message model.Ideally, it must not be modified directly.
179
+ * @param _messageDetails.groupName The group name associated with the current message.
180
+ * @param _messageDetails.activeTitleHandler Function to handle the click event on a message in the MessageButton building block.
181
+ * @returns A promise that must be returned by the overridden method.
182
+ * @public
183
+ * @experimental
184
+ */
185
+ @publicExtension()
186
+ @extensible("AfterAsync")
187
+ async beforeShowMessageButton(_messageDetails: MessageDetail[]): Promise<void> {
188
+ return Promise.resolve();
189
+ }
190
+
155
191
  /**
156
192
  * Register to hold messages unitl a process is complete.
157
193
  *
@@ -500,8 +536,12 @@ class MessageHandler extends ControllerExtension {
500
536
  async releaseHoldByControl(control?: Control): Promise<void> {
501
537
  const identifier = control?.getId();
502
538
  this.removeHoldKey(identifier);
539
+ this.uiElementIsAvailable = this.uiElementIsAvailable.then(
540
+ async function (this: MessageHandler): Promise<void> {
541
+ return this.showMessagesWithCondtions();
542
+ }.bind(this)
543
+ );
503
544
  await this.uiElementIsAvailable;
504
- await this.showMessagesWithCondtions();
505
545
  }
506
546
 
507
547
  /**