@sapui5/sap.fe.core 1.108.2 → 1.110.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 (359) hide show
  1. package/README.md +5 -1
  2. package/package.json +11 -9
  3. package/src/.eslintrc +7 -0
  4. package/src/sap/fe/core/.library +39 -37
  5. package/src/sap/fe/core/.supportrc +3 -3
  6. package/src/sap/fe/core/ActionRuntime.js +72 -27
  7. package/src/sap/fe/core/ActionRuntime.ts +104 -21
  8. package/src/sap/fe/core/AppComponent.js +102 -120
  9. package/src/sap/fe/core/AppComponent.ts +148 -45
  10. package/src/sap/fe/core/AppStateHandler.js +105 -91
  11. package/src/sap/fe/core/AppStateHandler.ts +85 -23
  12. package/src/sap/fe/core/BaseController.js +5 -20
  13. package/src/sap/fe/core/BaseController.ts +11 -2
  14. package/src/sap/fe/core/CommonUtils.js +770 -1079
  15. package/src/sap/fe/core/CommonUtils.ts +750 -491
  16. package/src/sap/fe/core/ExtensionAPI.js +69 -96
  17. package/src/sap/fe/core/ExtensionAPI.ts +15 -17
  18. package/src/sap/fe/core/PageController.js +21 -46
  19. package/src/sap/fe/core/PageController.ts +11 -2
  20. package/src/sap/fe/core/TemplateComponent.js +6 -51
  21. package/src/sap/fe/core/TemplateComponent.ts +27 -16
  22. package/src/sap/fe/core/TemplateModel.js +18 -24
  23. package/src/sap/fe/core/TemplateModel.ts +25 -6
  24. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +8 -23
  25. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +5 -4
  26. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +146 -180
  27. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +144 -57
  28. package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.js +1 -1
  29. package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.js +43 -0
  30. package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.ts +11 -0
  31. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +436 -556
  32. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +288 -157
  33. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +215 -202
  34. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +93 -51
  35. package/src/sap/fe/core/controllerextensions/BusyLocker.js +11 -26
  36. package/src/sap/fe/core/controllerextensions/EditFlow.js +407 -596
  37. package/src/sap/fe/core/controllerextensions/EditFlow.ts +163 -56
  38. package/src/sap/fe/core/controllerextensions/Feedback.js +70 -0
  39. package/src/sap/fe/core/controllerextensions/Feedback.ts +64 -0
  40. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +12 -23
  41. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +1 -1
  42. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +127 -182
  43. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +65 -32
  44. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +96 -198
  45. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +4 -5
  46. package/src/sap/fe/core/controllerextensions/InternalRouting.js +134 -291
  47. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +21 -12
  48. package/src/sap/fe/core/controllerextensions/KPIManagement.js +111 -214
  49. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +44 -44
  50. package/src/sap/fe/core/controllerextensions/MassEdit.js +24 -44
  51. package/src/sap/fe/core/controllerextensions/MassEdit.ts +3 -2
  52. package/src/sap/fe/core/controllerextensions/MessageHandler.js +39 -52
  53. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +26 -7
  54. package/src/sap/fe/core/controllerextensions/PageReady.js +81 -119
  55. package/src/sap/fe/core/controllerextensions/PageReady.ts +36 -15
  56. package/src/sap/fe/core/controllerextensions/Paginator.js +16 -51
  57. package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -3
  58. package/src/sap/fe/core/controllerextensions/Placeholder.js +7 -33
  59. package/src/sap/fe/core/controllerextensions/Routing.js +24 -32
  60. package/src/sap/fe/core/controllerextensions/Routing.ts +6 -1
  61. package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
  62. package/src/sap/fe/core/controllerextensions/Share.js +53 -98
  63. package/src/sap/fe/core/controllerextensions/Share.ts +6 -3
  64. package/src/sap/fe/core/controllerextensions/SideEffects.js +103 -174
  65. package/src/sap/fe/core/controllerextensions/SideEffects.ts +37 -22
  66. package/src/sap/fe/core/controllerextensions/ViewState.js +341 -276
  67. package/src/sap/fe/core/controllerextensions/ViewState.ts +236 -84
  68. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +6 -22
  69. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -2
  70. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +66 -88
  71. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +64 -17
  72. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +28 -34
  73. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +22 -1
  74. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +69 -65
  75. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +31 -12
  76. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +15 -13
  77. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +273 -906
  78. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +142 -420
  79. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +49 -115
  80. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +12 -7
  81. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +70 -89
  82. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +313 -320
  83. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +582 -683
  84. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +507 -386
  85. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +111 -102
  86. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +102 -79
  87. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +689 -154
  88. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +866 -31
  89. package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +24 -101
  90. package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.ts +5 -5
  91. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +91 -217
  92. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +3 -20
  93. package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +1 -0
  94. package/src/sap/fe/core/controls/ActionPartial.fragment.xml +46 -46
  95. package/src/sap/fe/core/controls/Any.js +1 -1
  96. package/src/sap/fe/core/controls/AnyElement.js +1 -1
  97. package/src/sap/fe/core/controls/CommandExecution.js +4 -26
  98. package/src/sap/fe/core/controls/ConditionalWrapper.js +16 -33
  99. package/src/sap/fe/core/controls/ConditionalWrapper.ts +16 -2
  100. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +41 -94
  101. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +1 -1
  102. package/src/sap/fe/core/controls/CustomQuickViewPage.js +5 -34
  103. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +5 -7
  104. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +7 -7
  105. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +56 -58
  106. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +53 -33
  107. package/src/sap/fe/core/controls/FieldWrapper.js +6 -49
  108. package/src/sap/fe/core/controls/FileWrapper.js +51 -136
  109. package/src/sap/fe/core/controls/FileWrapper.ts +25 -29
  110. package/src/sap/fe/core/controls/FilterBar.js +19 -54
  111. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -22
  112. package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
  113. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -5
  114. package/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +2 -2
  115. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +24 -46
  116. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +14 -41
  117. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +4 -4
  118. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +26 -67
  119. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -20
  120. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +12 -48
  121. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +17 -46
  122. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +3 -3
  123. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +1 -0
  124. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +6 -78
  125. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +4 -4
  126. package/src/sap/fe/core/converters/ConverterContext.js +44 -98
  127. package/src/sap/fe/core/converters/ConverterContext.ts +1 -1
  128. package/src/sap/fe/core/converters/ManifestSettings.js +1 -20
  129. package/src/sap/fe/core/converters/ManifestSettings.ts +16 -9
  130. package/src/sap/fe/core/converters/ManifestWrapper.js +97 -158
  131. package/src/sap/fe/core/converters/ManifestWrapper.ts +4 -0
  132. package/src/sap/fe/core/converters/MetaModelConverter.js +28 -167
  133. package/src/sap/fe/core/converters/MetaModelConverter.ts +9 -3
  134. package/src/sap/fe/core/converters/TemplateConverter.js +10 -22
  135. package/src/sap/fe/core/converters/TemplateConverter.ts +10 -7
  136. package/src/sap/fe/core/converters/annotations/DataField.js +88 -132
  137. package/src/sap/fe/core/converters/annotations/DataField.ts +90 -38
  138. package/src/sap/fe/core/converters/common/AnnotationConverter.js +57 -379
  139. package/src/sap/fe/core/converters/controls/Common/Action.js +45 -115
  140. package/src/sap/fe/core/converters/controls/Common/Action.ts +17 -5
  141. package/src/sap/fe/core/converters/controls/Common/Chart.js +20 -73
  142. package/src/sap/fe/core/converters/controls/Common/Chart.ts +21 -14
  143. package/src/sap/fe/core/converters/controls/Common/Criticality.js +1 -9
  144. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +40 -94
  145. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +44 -31
  146. package/src/sap/fe/core/converters/controls/Common/Form.js +26 -63
  147. package/src/sap/fe/core/converters/controls/Common/Form.ts +24 -10
  148. package/src/sap/fe/core/converters/controls/Common/KPI.js +13 -63
  149. package/src/sap/fe/core/converters/controls/Common/Table.js +368 -707
  150. package/src/sap/fe/core/converters/controls/Common/Table.ts +308 -197
  151. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +54 -109
  152. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +15 -9
  153. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +69 -210
  154. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +23 -16
  155. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +12 -80
  156. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +3 -1
  157. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -19
  158. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +45 -136
  159. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +10 -10
  160. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +82 -173
  161. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +48 -22
  162. package/src/sap/fe/core/converters/helpers/Aggregation.js +24 -66
  163. package/src/sap/fe/core/converters/helpers/Aggregation.ts +3 -7
  164. package/src/sap/fe/core/converters/helpers/BindingHelper.js +9 -19
  165. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +0 -1
  166. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +20 -48
  167. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +5 -1
  168. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +12 -51
  169. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +13 -11
  170. package/src/sap/fe/core/converters/helpers/ID.js +3 -17
  171. package/src/sap/fe/core/converters/helpers/ID.ts +2 -3
  172. package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -6
  173. package/src/sap/fe/core/converters/helpers/Key.js +10 -19
  174. package/src/sap/fe/core/converters/helpers/Key.ts +3 -3
  175. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +2 -20
  176. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +2 -37
  177. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +126 -131
  178. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +112 -31
  179. package/src/sap/fe/core/converters/templates/ListReportConverter.js +67 -131
  180. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +58 -27
  181. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +106 -183
  182. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +73 -104
  183. package/src/sap/fe/core/designtime/AppComponent.designtime.js +74 -67
  184. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +77 -69
  185. package/src/sap/fe/core/formatters/CollaborationFormatter.js +20 -29
  186. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +21 -0
  187. package/src/sap/fe/core/formatters/FPMFormatter.js +3 -7
  188. package/src/sap/fe/core/formatters/KPIFormatter.js +5 -13
  189. package/src/sap/fe/core/formatters/StandardFormatter.js +3 -18
  190. package/src/sap/fe/core/formatters/StandardFormatter.ts +3 -2
  191. package/src/sap/fe/core/formatters/TableFormatter.js +87 -53
  192. package/src/sap/fe/core/formatters/TableFormatter.ts +96 -9
  193. package/src/sap/fe/core/formatters/TableFormatterTypes.js +1 -4
  194. package/src/sap/fe/core/formatters/ValueFormatter.js +1 -37
  195. package/src/sap/fe/core/fpm/Component.js +2 -17
  196. package/src/sap/fe/core/helpers/AnnotationEnum.js +10 -20
  197. package/src/sap/fe/core/helpers/AnnotationEnum.ts +6 -6
  198. package/src/sap/fe/core/helpers/AppStartupHelper.js +16 -52
  199. package/src/sap/fe/core/helpers/AppStartupHelper.ts +1 -1
  200. package/src/sap/fe/core/helpers/BindingToolkit.js +106 -364
  201. package/src/sap/fe/core/helpers/BindingToolkit.ts +30 -7
  202. package/src/sap/fe/core/helpers/ClassSupport.js +16 -97
  203. package/src/sap/fe/core/helpers/ClassSupport.ts +7 -4
  204. package/src/sap/fe/core/helpers/DeleteHelper.js +621 -0
  205. package/src/sap/fe/core/helpers/DeleteHelper.ts +796 -0
  206. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -12
  207. package/src/sap/fe/core/helpers/EditState.js +2 -5
  208. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -10
  209. package/src/sap/fe/core/helpers/FPMHelper.js +3 -8
  210. package/src/sap/fe/core/helpers/FPMHelper.ts +2 -1
  211. package/src/sap/fe/core/helpers/KeepAliveHelper.js +8 -38
  212. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +1 -5
  213. package/src/sap/fe/core/helpers/LoaderUtils.js +1 -7
  214. package/src/sap/fe/core/helpers/MassEditHelper.js +177 -289
  215. package/src/sap/fe/core/helpers/MassEditHelper.ts +124 -91
  216. package/src/sap/fe/core/helpers/MessageStrip.js +12 -28
  217. package/src/sap/fe/core/helpers/MessageStrip.ts +7 -7
  218. package/src/sap/fe/core/helpers/ModelHelper.js +62 -103
  219. package/src/sap/fe/core/helpers/ModelHelper.ts +58 -20
  220. package/src/sap/fe/core/helpers/PasteHelper.js +28 -51
  221. package/src/sap/fe/core/helpers/PasteHelper.ts +10 -9
  222. package/src/sap/fe/core/helpers/SemanticDateOperators.js +112 -136
  223. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +111 -111
  224. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +5 -11
  225. package/src/sap/fe/core/helpers/SideEffectsHelper.js +26 -32
  226. package/src/sap/fe/core/helpers/StableIdHelper.js +166 -218
  227. package/src/sap/fe/core/helpers/StableIdHelper.ts +175 -191
  228. package/src/sap/fe/core/helpers/Synchronization.js +1 -8
  229. package/src/sap/fe/core/helpers/ToES6Promise.js +1 -4
  230. package/src/sap/fe/core/helpers/TypeGuards.js +22 -0
  231. package/src/sap/fe/core/helpers/TypeGuards.ts +9 -0
  232. package/src/sap/fe/core/jsx-runtime/Fragment.js +1 -3
  233. package/src/sap/fe/core/jsx-runtime/ViewLoader.js +3 -23
  234. package/src/sap/fe/core/jsx-runtime/jsx-control.js +3 -23
  235. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +2 -1
  236. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +4 -16
  237. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +1 -1
  238. package/src/sap/fe/core/jsx-runtime/jsx.js +2 -5
  239. package/src/sap/fe/core/jsx-runtime/jsxs.js +1 -1
  240. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +4 -27
  241. package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +1 -1
  242. package/src/sap/fe/core/library.js +9 -48
  243. package/src/sap/fe/core/library.support.js +3 -2
  244. package/src/sap/fe/core/library.support.ts +3 -1
  245. package/src/sap/fe/core/library.ts +3 -8
  246. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +74 -39
  247. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +71 -26
  248. package/src/sap/fe/core/messagebundle.properties +113 -67
  249. package/src/sap/fe/core/messagebundle_ar.properties +20 -3
  250. package/src/sap/fe/core/messagebundle_bg.properties +22 -5
  251. package/src/sap/fe/core/messagebundle_ca.properties +21 -4
  252. package/src/sap/fe/core/messagebundle_cs.properties +21 -4
  253. package/src/sap/fe/core/messagebundle_cy.properties +22 -5
  254. package/src/sap/fe/core/messagebundle_da.properties +20 -3
  255. package/src/sap/fe/core/messagebundle_de.properties +38 -21
  256. package/src/sap/fe/core/messagebundle_el.properties +20 -3
  257. package/src/sap/fe/core/messagebundle_en.properties +38 -21
  258. package/src/sap/fe/core/messagebundle_en_GB.properties +20 -3
  259. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +41 -28
  260. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +41 -24
  261. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +42 -29
  262. package/src/sap/fe/core/messagebundle_es.properties +40 -23
  263. package/src/sap/fe/core/messagebundle_es_MX.properties +20 -3
  264. package/src/sap/fe/core/messagebundle_et.properties +20 -3
  265. package/src/sap/fe/core/messagebundle_fi.properties +20 -3
  266. package/src/sap/fe/core/messagebundle_fr.properties +21 -4
  267. package/src/sap/fe/core/messagebundle_fr_CA.properties +22 -5
  268. package/src/sap/fe/core/messagebundle_hi.properties +20 -3
  269. package/src/sap/fe/core/messagebundle_hr.properties +22 -5
  270. package/src/sap/fe/core/messagebundle_hu.properties +20 -3
  271. package/src/sap/fe/core/messagebundle_id.properties +20 -3
  272. package/src/sap/fe/core/messagebundle_it.properties +23 -6
  273. package/src/sap/fe/core/messagebundle_iw.properties +20 -3
  274. package/src/sap/fe/core/messagebundle_ja.properties +22 -5
  275. package/src/sap/fe/core/messagebundle_kk.properties +21 -4
  276. package/src/sap/fe/core/messagebundle_ko.properties +20 -3
  277. package/src/sap/fe/core/messagebundle_lt.properties +20 -3
  278. package/src/sap/fe/core/messagebundle_lv.properties +20 -3
  279. package/src/sap/fe/core/messagebundle_ms.properties +20 -3
  280. package/src/sap/fe/core/messagebundle_nl.properties +20 -3
  281. package/src/sap/fe/core/messagebundle_no.properties +20 -3
  282. package/src/sap/fe/core/messagebundle_pl.properties +21 -4
  283. package/src/sap/fe/core/messagebundle_pt.properties +20 -3
  284. package/src/sap/fe/core/messagebundle_pt_PT.properties +20 -3
  285. package/src/sap/fe/core/messagebundle_ro.properties +20 -3
  286. package/src/sap/fe/core/messagebundle_ru.properties +20 -3
  287. package/src/sap/fe/core/messagebundle_sh.properties +20 -3
  288. package/src/sap/fe/core/messagebundle_sk.properties +20 -3
  289. package/src/sap/fe/core/messagebundle_sl.properties +26 -9
  290. package/src/sap/fe/core/messagebundle_sv.properties +20 -3
  291. package/src/sap/fe/core/messagebundle_th.properties +21 -4
  292. package/src/sap/fe/core/messagebundle_tr.properties +20 -3
  293. package/src/sap/fe/core/messagebundle_uk.properties +23 -6
  294. package/src/sap/fe/core/messagebundle_vi.properties +20 -3
  295. package/src/sap/fe/core/messagebundle_zh_CN.properties +20 -3
  296. package/src/sap/fe/core/messagebundle_zh_TW.properties +20 -3
  297. package/src/sap/fe/core/operationsHelper.js +74 -101
  298. package/src/sap/fe/core/operationsHelper.ts +113 -44
  299. package/src/sap/fe/core/rootView/Fcl.controller.js +151 -228
  300. package/src/sap/fe/core/rootView/Fcl.controller.ts +90 -15
  301. package/src/sap/fe/core/rootView/Fcl.view.xml +1 -8
  302. package/src/sap/fe/core/rootView/NavContainer.controller.js +41 -78
  303. package/src/sap/fe/core/rootView/NavContainer.controller.ts +32 -38
  304. package/src/sap/fe/core/rootView/RootViewBaseController.js +110 -181
  305. package/src/sap/fe/core/rootView/RootViewBaseController.ts +37 -17
  306. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -18
  307. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +13 -52
  308. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -22
  309. package/src/sap/fe/core/services/NavigationServiceFactory.js +45 -87
  310. package/src/sap/fe/core/services/NavigationServiceFactory.ts +17 -10
  311. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +4 -28
  312. package/src/sap/fe/core/services/RoutingServiceFactory.js +92 -250
  313. package/src/sap/fe/core/services/RoutingServiceFactory.ts +8 -12
  314. package/src/sap/fe/core/services/ShellServicesFactory.js +122 -251
  315. package/src/sap/fe/core/services/ShellServicesFactory.ts +19 -4
  316. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +188 -273
  317. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +143 -154
  318. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +37 -135
  319. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +59 -94
  320. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +2 -16
  321. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +1 -1
  322. package/src/sap/fe/core/support/AnnotationIssue.support.js +6 -9
  323. package/src/sap/fe/core/support/AnnotationIssue.support.ts +4 -4
  324. package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +6 -9
  325. package/src/sap/fe/core/support/CollectionFacetMissingID.support.ts +3 -3
  326. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +6 -9
  327. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +3 -3
  328. package/src/sap/fe/core/support/CommonHelper.js +7 -16
  329. package/src/sap/fe/core/support/Diagnostics.js +1 -10
  330. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +6 -9
  331. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.ts +3 -3
  332. package/src/sap/fe/core/templating/CommonFormatters.js +1 -15
  333. package/src/sap/fe/core/templating/CriticalityFormatters.js +4 -20
  334. package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -20
  335. package/src/sap/fe/core/templating/DataModelPathHelper.js +49 -121
  336. package/src/sap/fe/core/templating/DataModelPathHelper.ts +41 -31
  337. package/src/sap/fe/core/templating/DisplayModeFormatter.js +8 -15
  338. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +7 -7
  339. package/src/sap/fe/core/templating/EntitySetHelper.js +6 -31
  340. package/src/sap/fe/core/templating/FieldControlHelper.js +4 -21
  341. package/src/sap/fe/core/templating/FieldControlHelper.ts +1 -1
  342. package/src/sap/fe/core/templating/FilterHelper.js +40 -111
  343. package/src/sap/fe/core/templating/FilterHelper.ts +20 -16
  344. package/src/sap/fe/core/templating/FilterTemplating.js +1 -19
  345. package/src/sap/fe/core/templating/FilterTemplating.ts +1 -1
  346. package/src/sap/fe/core/templating/PropertyFormatters.js +1 -34
  347. package/src/sap/fe/core/templating/PropertyHelper.js +120 -163
  348. package/src/sap/fe/core/templating/PropertyHelper.ts +69 -33
  349. package/src/sap/fe/core/templating/SemanticObjectHelper.js +46 -0
  350. package/src/sap/fe/core/templating/SemanticObjectHelper.ts +34 -0
  351. package/src/sap/fe/core/templating/UIFormatters.js +40 -180
  352. package/src/sap/fe/core/templating/UIFormatters.ts +37 -43
  353. package/src/sap/fe/core/type/DateTimeWithTimezone.js +3 -14
  354. package/src/sap/fe/core/type/Email.js +1 -10
  355. package/src/sap/fe/core/type/TypeUtil.js +1 -11
  356. package/ui5.yaml +0 -1
  357. package/src/sap/fe/core/controls/ActionParameterDialogFieldValueHelp.fragment.xml +0 -35
  358. package/src/sap/fe/core/helpers/LRMessageStrip.js +0 -234
  359. package/src/sap/fe/core/helpers/LRMessageStrip.ts +0 -216
@@ -11,14 +11,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/macros/table/Utils"], function (Log, Util
11
11
  } catch (e) {
12
12
  return recover(e);
13
13
  }
14
-
15
14
  if (result && result.then) {
16
15
  return result.then(void 0, recover);
17
16
  }
18
-
19
17
  return result;
20
18
  }
21
-
22
19
  var DataQueryWatcher = /*#__PURE__*/function () {
23
20
  function DataQueryWatcher(_oEventProvider, _fnOnFinished) {
24
21
  this._aBindingRegistrations = [];
@@ -28,124 +25,98 @@ sap.ui.define(["sap/base/Log", "sap/fe/macros/table/Utils"], function (Log, Util
28
25
  this._aMDCCharts = [];
29
26
  this._oEventProvider = _oEventProvider;
30
27
  this._fnOnFinished = _fnOnFinished;
31
- } // Accessors
32
-
33
-
28
+ }
29
+ // Accessors
34
30
  var _proto = DataQueryWatcher.prototype;
35
-
36
31
  _proto.isSearchPending = function isSearchPending() {
37
32
  return this._isSearchPending;
38
33
  };
39
-
40
34
  _proto.isDataReceived = function isDataReceived() {
41
35
  return this._isDataReceived;
42
36
  };
43
-
44
37
  _proto.resetDataReceived = function resetDataReceived() {
45
38
  this._isDataReceived = undefined;
46
39
  }
47
40
  /**
48
41
  * Reset the state: unsubscribe to all data events and remove all registered objects.
49
- */
50
- ;
51
-
42
+ */;
52
43
  _proto.reset = function reset() {
53
44
  var _this = this;
54
-
55
45
  // Remove all remaining callbacks
56
46
  this._aBindingRegistrations.forEach(function (reg) {
57
47
  reg.binding.detachEvent("dataRequested", _this.onDataRequested, _this);
58
48
  reg.binding.detachEvent("dataReceived", _this.onDataReceived, _this);
59
49
  });
60
-
61
50
  this._aOtherEventSources.forEach(function (oElement) {
62
51
  oElement.detachEvent("search", _this.onSearch, _this);
63
52
  oElement.detachEvent("bindingUpdated", _this.register, _this);
64
53
  });
65
-
66
54
  this._aBindingRegistrations = [];
67
55
  this._aOtherEventSources = [];
68
56
  this._aMDCTables = [];
69
57
  this._aMDCCharts = [];
70
58
  this._isSearchPending = false;
71
59
  this._isDataReceived = undefined;
72
- } // //////////////////////////////////////////////////
60
+ }
61
+ // //////////////////////////////////////////////////
73
62
  // Callback when data is received on a binding.
74
63
  ;
75
-
76
64
  _proto.onDataReceived = function onDataReceived(oEvent, params) {
77
65
  // Look for the corresponding binding registration
78
66
  var binding = oEvent.getSource();
79
-
80
67
  var bindingRegistration = this._aBindingRegistrations.find(function (reg) {
81
68
  return reg.binding === binding;
82
69
  });
83
-
84
70
  if (!bindingRegistration) {
85
71
  Log.error("PageReady - data received on an unregistered binding");
86
72
  return;
87
73
  }
88
-
89
74
  switch (binding.getGroupId()) {
90
75
  case "$auto.Workers":
91
76
  this._oEventProvider.fireEvent("workersBatchReceived");
92
-
93
77
  break;
94
-
95
78
  case "$auto.Heroes":
96
79
  this._oEventProvider.fireEvent("heroesBatchReceived");
97
-
98
80
  break;
99
-
100
81
  default:
101
82
  }
102
-
103
83
  bindingRegistration.receivedCount++;
104
-
105
84
  if (bindingRegistration.receivedCount < bindingRegistration.requestedCount) {
106
85
  // There are other request pending --> resubscribe to wait until they return
107
86
  binding.attachEventOnce("dataReceived", {
108
87
  triggeredBySearch: params.triggeredBySearch
109
88
  }, this.onDataReceived, this);
110
89
  return;
111
- } // Check if at least one binding has requested data, and all bindings that have requested data have received it
112
-
113
-
90
+ }
91
+ // Check if at least one binding has requested data, and all bindings that have requested data have received it
114
92
  var bAllDone = this._aBindingRegistrations.some(function (reg) {
115
93
  return reg.requestedCount !== 0;
116
94
  }) && this._aBindingRegistrations.every(function (reg) {
117
95
  return reg.requestedCount === 0 || reg.receivedCount >= reg.requestedCount;
118
96
  });
119
-
120
97
  if (params.triggeredBySearch || bindingRegistration.receivedCount >= bindingRegistration.requestedCount) {
121
98
  this._isSearchPending = false;
122
99
  }
123
-
124
100
  if (bAllDone) {
125
101
  this._isDataReceived = true;
126
-
127
102
  this._fnOnFinished();
128
103
  }
129
- } // //////////////////////////////////////////////////
104
+ }
105
+ // //////////////////////////////////////////////////
130
106
  // Callback when data is requested on a binding.
131
107
  ;
132
-
133
108
  _proto.onDataRequested = function onDataRequested(oEvent, params) {
134
109
  // Look for the corresponding binding registration
135
110
  var binding = oEvent.getSource();
136
-
137
111
  var bindingRegistration = this._aBindingRegistrations.find(function (reg) {
138
112
  return reg.binding === binding;
139
113
  });
140
-
141
114
  if (!bindingRegistration) {
142
115
  Log.error("PageReady - data requested on an unregistered binding");
143
116
  return;
144
117
  }
145
-
146
118
  bindingRegistration.requestedCount++;
147
119
  this._isDataReceived = false;
148
-
149
120
  if (bindingRegistration.requestedCount - bindingRegistration.receivedCount === 1) {
150
121
  // Listen to dataReceived only if there's no other request pending
151
122
  // Otherwise the 'dataReceived' handler would be called several times when the first query returns
@@ -155,29 +126,23 @@ sap.ui.define(["sap/base/Log", "sap/fe/macros/table/Utils"], function (Log, Util
155
126
  triggeredBySearch: params.triggeredBySearch
156
127
  }, this.onDataReceived, this);
157
128
  }
158
- } // //////////////////////////////////////////////////
129
+ }
130
+ // //////////////////////////////////////////////////
159
131
  // Callback when a search is triggered from a filterbar
160
132
  ;
161
-
162
133
  _proto.onSearch = function onSearch(oEvent) {
163
134
  var _this3 = this;
164
-
165
135
  var _this2 = this;
166
-
167
136
  var aMDCTableLinkedToFilterBar = this._aMDCTables.filter(function (oTable) {
168
137
  var _oTable$getParent;
169
-
170
138
  return oEvent.getSource().sId === oTable.getFilter() && oTable.getVisible() && !((_oTable$getParent = oTable.getParent()) !== null && _oTable$getParent !== void 0 && _oTable$getParent.getProperty("bindingSuspended"));
171
139
  });
172
-
173
140
  var aMDCChartsLinkedToFilterBar = this._aMDCCharts.filter(function (oChart) {
174
141
  return oEvent.getSource().sId === oChart.getFilter() && oChart.getVisible();
175
142
  });
176
-
177
143
  if (aMDCTableLinkedToFilterBar.length > 0 || aMDCChartsLinkedToFilterBar.length > 0) {
178
144
  this._isSearchPending = true;
179
145
  }
180
-
181
146
  aMDCTableLinkedToFilterBar.forEach(function (oTable) {
182
147
  _this2.registerTable(oTable, true);
183
148
  });
@@ -187,66 +152,55 @@ sap.ui.define(["sap/base/Log", "sap/fe/macros/table/Utils"], function (Log, Util
187
152
  function _temp2() {
188
153
  _this3.registerChart(oChart, true);
189
154
  }
190
-
191
155
  var _temp = function () {
192
156
  if (oChart.innerChartBoundPromise) {
193
157
  return Promise.resolve(oChart.innerChartBoundPromise).then(function () {});
194
158
  }
195
159
  }();
196
-
197
160
  return _temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp);
198
161
  }, function (oError) {
199
162
  Log.error("Cannot find a inner bound chart", oError);
200
163
  });
201
-
202
164
  return Promise.resolve(_temp4 && _temp4.then ? _temp4.then(function () {}) : void 0);
203
165
  } catch (e) {
204
166
  return Promise.reject(e);
205
167
  }
206
168
  });
207
- } // //////////////////////////////////////////////////
169
+ }
170
+ // //////////////////////////////////////////////////
208
171
  // Register a binding (with an optional table/chart)
209
172
  // and attach callbacks on dateRequested/dataReceived events
210
173
  ;
211
-
212
174
  _proto.register = function register(_event, data) {
213
175
  var _data$table, _data$chart;
214
-
215
176
  var binding = data.binding || ((_data$table = data.table) === null || _data$table === void 0 ? void 0 : _data$table.getRowBinding()) || ((_data$chart = data.chart) === null || _data$chart === void 0 ? void 0 : _data$chart.getControlDelegate().getInnerChart(data.chart).getBinding("data"));
216
177
  var boundControl = data.table || data.chart;
217
-
218
178
  if (!binding) {
219
179
  return;
220
- } // Check if the binding is already registered
221
-
222
-
180
+ }
181
+ // Check if the binding is already registered
223
182
  var bindingRegistration = this._aBindingRegistrations.find(function (reg) {
224
183
  return reg.binding === binding;
225
184
  });
226
-
227
185
  if (bindingRegistration) {
228
186
  if (boundControl) {
229
187
  // The binding was already registerd without boundControl information --> update boundControl
230
188
  bindingRegistration.boundControl = boundControl;
231
- } // This binding has already requested data, but we're registering it again (on search) --> attach to dataRequested again
232
-
233
-
189
+ }
190
+ // This binding has already requested data, but we're registering it again (on search) --> attach to dataRequested again
234
191
  if (bindingRegistration.requestedCount > 0) {
235
192
  binding.detachEvent("dataRequested", this.onDataRequested, this);
236
193
  binding.attachEventOnce("dataRequested", {
237
194
  triggeredBySearch: data.triggeredBySearch
238
195
  }, this.onDataRequested, this);
239
196
  }
240
-
241
197
  return;
242
198
  }
243
-
244
199
  if (boundControl) {
245
200
  // Check if there's a different binding registered for the bound control
246
201
  bindingRegistration = this._aBindingRegistrations.find(function (reg) {
247
202
  return reg.boundControl === boundControl;
248
203
  });
249
-
250
204
  if (bindingRegistration && bindingRegistration.binding !== binding) {
251
205
  // The control had a different binding. This can happen in case of MDC charts who recreated their binding after search
252
206
  // The previous binding is destroyed, we can replace it with the new and reset counters
@@ -255,7 +209,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/macros/table/Utils"], function (Log, Util
255
209
  bindingRegistration.receivedCount = 0;
256
210
  }
257
211
  }
258
-
259
212
  if (!bindingRegistration) {
260
213
  bindingRegistration = {
261
214
  binding: binding,
@@ -263,10 +216,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/macros/table/Utils"], function (Log, Util
263
216
  requestedCount: 0,
264
217
  receivedCount: 0
265
218
  };
266
-
267
219
  this._aBindingRegistrations.push(bindingRegistration);
268
220
  }
269
-
270
221
  binding.detachEvent("dataRequested", this.onDataRequested, this);
271
222
  binding.attachEventOnce("dataRequested", {
272
223
  triggeredBySearch: data.triggeredBySearch
@@ -276,9 +227,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/macros/table/Utils"], function (Log, Util
276
227
  * Registers a binding for watching its data events (dataRequested and dataReceived).
277
228
  *
278
229
  * @param binding The binding
279
- */
280
- ;
281
-
230
+ */;
282
231
  _proto.registerBinding = function registerBinding(binding) {
283
232
  this.register(null, {
284
233
  binding: binding,
@@ -290,31 +239,24 @@ sap.ui.define(["sap/base/Log", "sap/fe/macros/table/Utils"], function (Log, Util
290
239
  *
291
240
  * @param table The table
292
241
  * @param triggeredBySearch True if this registration is triggered by a filterBar search
293
- */
294
- ;
295
-
242
+ */;
296
243
  _proto.registerTable = function registerTable(table) {
297
244
  var triggeredBySearch = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
298
-
299
245
  if (this._aMDCTables.indexOf(table) < 0) {
300
246
  this._aMDCTables.push(table);
301
247
  }
302
-
303
248
  var oRowBinding = table.getRowBinding();
304
-
305
249
  if (oRowBinding) {
306
250
  this.register(null, {
307
251
  table: table,
308
252
  triggeredBySearch: triggeredBySearch
309
253
  });
310
254
  }
311
-
312
255
  if (this._aOtherEventSources.indexOf(table) === -1) {
313
256
  table.attachEvent("bindingUpdated", {
314
257
  table: table,
315
258
  triggeredBySearch: triggeredBySearch
316
259
  }, this.register, this);
317
-
318
260
  this._aOtherEventSources.push(table);
319
261
  }
320
262
  }
@@ -323,32 +265,25 @@ sap.ui.define(["sap/base/Log", "sap/fe/macros/table/Utils"], function (Log, Util
323
265
  *
324
266
  * @param chart The chart
325
267
  * @param triggeredBySearch True if this registration is triggered by a filterBar search
326
- */
327
- ;
328
-
268
+ */;
329
269
  _proto.registerChart = function registerChart(chart) {
330
270
  var triggeredBySearch = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
331
-
332
271
  if (this._aMDCCharts.indexOf(chart) < 0) {
333
272
  this._aMDCCharts.push(chart);
334
273
  }
335
-
336
274
  var oInnerChart = chart.getControlDelegate().getInnerChart(chart);
337
275
  var binding = oInnerChart === null || oInnerChart === void 0 ? void 0 : oInnerChart.getBinding("data");
338
-
339
276
  if (binding) {
340
277
  this.register(null, {
341
278
  chart: chart,
342
279
  triggeredBySearch: triggeredBySearch
343
280
  });
344
281
  }
345
-
346
282
  if (this._aOtherEventSources.indexOf(chart) === -1) {
347
283
  chart.attachEvent("bindingUpdated", {
348
284
  chart: chart,
349
285
  triggeredBySearch: triggeredBySearch
350
286
  }, this.register, this);
351
-
352
287
  this._aOtherEventSources.push(chart);
353
288
  }
354
289
  }
@@ -356,43 +291,35 @@ sap.ui.define(["sap/base/Log", "sap/fe/macros/table/Utils"], function (Log, Util
356
291
  * Registers an MDCTable or MDCChart for watching the data events on its inner data binding (dataRequested and dataReceived).
357
292
  *
358
293
  * @param element The table or chart
359
- */
360
- ;
361
-
294
+ */;
362
295
  _proto.registerTableOrChart = function registerTableOrChart(element) {
363
296
  try {
364
297
  var _this5 = this;
365
-
366
298
  if (!element.isA("sap.ui.mdc.Table") && !element.isA("sap.ui.mdc.Chart")) {
367
299
  return Promise.resolve();
368
300
  }
369
-
370
301
  var _temp8 = _catch(function () {
371
302
  return Promise.resolve(element.initialized()).then(function () {
372
303
  var _temp6 = function () {
373
304
  if (element.isA("sap.ui.mdc.Table")) {
374
- _this5.registerTable(element); //If the autoBindOnInit is enabled, the table will be rebound
305
+ _this5.registerTable(element);
306
+ //If the autoBindOnInit is enabled, the table will be rebound
375
307
  //Then we need to wait for this rebind to occur to ensure the pageReady will also wait for the data to be received
376
-
377
-
378
308
  var _temp9 = function () {
379
309
  if (element.getAutoBindOnInit() && element.getDomRef()) {
380
310
  return Promise.resolve(Utils.whenBound(element)).then(function () {});
381
311
  }
382
312
  }();
383
-
384
313
  if (_temp9 && _temp9.then) return _temp9.then(function () {});
385
314
  } else {
386
315
  _this5.registerChart(element);
387
316
  }
388
317
  }();
389
-
390
318
  if (_temp6 && _temp6.then) return _temp6.then(function () {});
391
319
  }); // access binding only after table/chart is bound
392
320
  }, function (oError) {
393
321
  Log.error("PageReady - Cannot register a table or a chart", oError);
394
322
  });
395
-
396
323
  return Promise.resolve(_temp8 && _temp8.then ? _temp8.then(function () {}) : void 0);
397
324
  } catch (e) {
398
325
  return Promise.reject(e);
@@ -404,16 +331,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/macros/table/Utils"], function (Log, Util
404
331
  * @param filterBar The filter bar
405
332
  */
406
333
  ;
407
-
408
334
  _proto.registerFilterBar = function registerFilterBar(filterBar) {
409
335
  filterBar.attachEvent("search", this.onSearch, this);
410
-
411
336
  this._aOtherEventSources.push(filterBar);
412
337
  };
413
-
414
338
  return DataQueryWatcher;
415
339
  }();
416
-
417
340
  return DataQueryWatcher;
418
341
  }, false);
419
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiRGF0YVF1ZXJ5V2F0Y2hlciIsIl9vRXZlbnRQcm92aWRlciIsIl9mbk9uRmluaXNoZWQiLCJfYUJpbmRpbmdSZWdpc3RyYXRpb25zIiwiX2FPdGhlckV2ZW50U291cmNlcyIsIl9pc1NlYXJjaFBlbmRpbmciLCJfYU1EQ1RhYmxlcyIsIl9hTURDQ2hhcnRzIiwiaXNTZWFyY2hQZW5kaW5nIiwiaXNEYXRhUmVjZWl2ZWQiLCJfaXNEYXRhUmVjZWl2ZWQiLCJyZXNldERhdGFSZWNlaXZlZCIsInVuZGVmaW5lZCIsInJlc2V0IiwiZm9yRWFjaCIsInJlZyIsImJpbmRpbmciLCJkZXRhY2hFdmVudCIsIm9uRGF0YVJlcXVlc3RlZCIsIm9uRGF0YVJlY2VpdmVkIiwib0VsZW1lbnQiLCJvblNlYXJjaCIsInJlZ2lzdGVyIiwib0V2ZW50IiwicGFyYW1zIiwiZ2V0U291cmNlIiwiYmluZGluZ1JlZ2lzdHJhdGlvbiIsImZpbmQiLCJMb2ciLCJlcnJvciIsImdldEdyb3VwSWQiLCJmaXJlRXZlbnQiLCJyZWNlaXZlZENvdW50IiwicmVxdWVzdGVkQ291bnQiLCJhdHRhY2hFdmVudE9uY2UiLCJ0cmlnZ2VyZWRCeVNlYXJjaCIsImJBbGxEb25lIiwic29tZSIsImV2ZXJ5IiwiYU1EQ1RhYmxlTGlua2VkVG9GaWx0ZXJCYXIiLCJmaWx0ZXIiLCJvVGFibGUiLCJzSWQiLCJnZXRGaWx0ZXIiLCJnZXRWaXNpYmxlIiwiZ2V0UGFyZW50IiwiZ2V0UHJvcGVydHkiLCJhTURDQ2hhcnRzTGlua2VkVG9GaWx0ZXJCYXIiLCJvQ2hhcnQiLCJsZW5ndGgiLCJyZWdpc3RlclRhYmxlIiwicmVnaXN0ZXJDaGFydCIsImlubmVyQ2hhcnRCb3VuZFByb21pc2UiLCJvRXJyb3IiLCJfZXZlbnQiLCJkYXRhIiwidGFibGUiLCJnZXRSb3dCaW5kaW5nIiwiY2hhcnQiLCJnZXRDb250cm9sRGVsZWdhdGUiLCJnZXRJbm5lckNoYXJ0IiwiZ2V0QmluZGluZyIsImJvdW5kQ29udHJvbCIsInB1c2giLCJyZWdpc3RlckJpbmRpbmciLCJpbmRleE9mIiwib1Jvd0JpbmRpbmciLCJhdHRhY2hFdmVudCIsIm9Jbm5lckNoYXJ0IiwicmVnaXN0ZXJUYWJsZU9yQ2hhcnQiLCJlbGVtZW50IiwiaXNBIiwiaW5pdGlhbGl6ZWQiLCJnZXRBdXRvQmluZE9uSW5pdCIsImdldERvbVJlZiIsIlV0aWxzIiwid2hlbkJvdW5kIiwicmVnaXN0ZXJGaWx0ZXJCYXIiLCJmaWx0ZXJCYXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkRhdGFRdWVyeVdhdGNoZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgRXZlbnRQcm92aWRlciBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRQcm92aWRlclwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgQ2hhcnQgZnJvbSBcInNhcC91aS9tZGMvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL3VpL21kYy9GaWx0ZXJCYXJcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQmluZGluZ1wiO1xuXG5jbGFzcyBEYXRhUXVlcnlXYXRjaGVyIHtcblx0cHJvdGVjdGVkIF9hQmluZGluZ1JlZ2lzdHJhdGlvbnM6IHsgYmluZGluZzogQmluZGluZzsgYm91bmRDb250cm9sPzogQ29udHJvbDsgcmVxdWVzdGVkQ291bnQ6IG51bWJlcjsgcmVjZWl2ZWRDb3VudDogbnVtYmVyIH1bXSA9IFtdO1xuXHRwcm90ZWN0ZWQgX2FPdGhlckV2ZW50U291cmNlczogRXZlbnRQcm92aWRlcltdID0gW107XG5cdHByb3RlY3RlZCBfaXNTZWFyY2hQZW5kaW5nID0gZmFsc2U7XG5cdHByb3RlY3RlZCBfaXNEYXRhUmVjZWl2ZWQ/OiBib29sZWFuO1xuXHRwcm90ZWN0ZWQgX2FNRENUYWJsZXM6IFRhYmxlW10gPSBbXTtcblx0cHJvdGVjdGVkIF9hTURDQ2hhcnRzOiBDaGFydFtdID0gW107XG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX29FdmVudFByb3ZpZGVyOiBFdmVudFByb3ZpZGVyLCBwcm90ZWN0ZWQgX2ZuT25GaW5pc2hlZDogKCkgPT4gdm9pZCkge31cblx0Ly8gQWNjZXNzb3JzXG5cdHB1YmxpYyBpc1NlYXJjaFBlbmRpbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2lzU2VhcmNoUGVuZGluZztcblx0fVxuXHRwdWJsaWMgaXNEYXRhUmVjZWl2ZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2lzRGF0YVJlY2VpdmVkO1xuXHR9XG5cdHB1YmxpYyByZXNldERhdGFSZWNlaXZlZCgpIHtcblx0XHR0aGlzLl9pc0RhdGFSZWNlaXZlZCA9IHVuZGVmaW5lZDtcblx0fVxuXHQvKipcblx0ICogUmVzZXQgdGhlIHN0YXRlOiB1bnN1YnNjcmliZSB0byBhbGwgZGF0YSBldmVudHMgYW5kIHJlbW92ZSBhbGwgcmVnaXN0ZXJlZCBvYmplY3RzLlxuXHQgKi9cblx0cHVibGljIHJlc2V0KCk6IHZvaWQge1xuXHRcdC8vIFJlbW92ZSBhbGwgcmVtYWluaW5nIGNhbGxiYWNrc1xuXHRcdHRoaXMuX2FCaW5kaW5nUmVnaXN0cmF0aW9ucy5mb3JFYWNoKChyZWcpID0+IHtcblx0XHRcdHJlZy5iaW5kaW5nLmRldGFjaEV2ZW50KFwiZGF0YVJlcXVlc3RlZFwiLCB0aGlzLm9uRGF0YVJlcXVlc3RlZCwgdGhpcyk7XG5cdFx0XHRyZWcuYmluZGluZy5kZXRhY2hFdmVudChcImRhdGFSZWNlaXZlZFwiLCB0aGlzLm9uRGF0YVJlY2VpdmVkLCB0aGlzKTtcblx0XHR9KTtcblx0XHR0aGlzLl9hT3RoZXJFdmVudFNvdXJjZXMuZm9yRWFjaCgob0VsZW1lbnQ6IGFueSkgPT4ge1xuXHRcdFx0b0VsZW1lbnQuZGV0YWNoRXZlbnQoXCJzZWFyY2hcIiwgdGhpcy5vblNlYXJjaCwgdGhpcyk7XG5cdFx0XHRvRWxlbWVudC5kZXRhY2hFdmVudChcImJpbmRpbmdVcGRhdGVkXCIsIHRoaXMucmVnaXN0ZXIsIHRoaXMpO1xuXHRcdH0pO1xuXHRcdHRoaXMuX2FCaW5kaW5nUmVnaXN0cmF0aW9ucyA9IFtdO1xuXHRcdHRoaXMuX2FPdGhlckV2ZW50U291cmNlcyA9IFtdO1xuXHRcdHRoaXMuX2FNRENUYWJsZXMgPSBbXTtcblx0XHR0aGlzLl9hTURDQ2hhcnRzID0gW107XG5cdFx0dGhpcy5faXNTZWFyY2hQZW5kaW5nID0gZmFsc2U7XG5cdFx0dGhpcy5faXNEYXRhUmVjZWl2ZWQgPSB1bmRlZmluZWQ7XG5cdH1cblx0Ly8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0Ly8gQ2FsbGJhY2sgd2hlbiBkYXRhIGlzIHJlY2VpdmVkIG9uIGEgYmluZGluZy5cblx0cHJvdGVjdGVkIG9uRGF0YVJlY2VpdmVkKG9FdmVudDogRXZlbnQsIHBhcmFtczogeyB0cmlnZ2VyZWRCeVNlYXJjaDogYm9vbGVhbiB9KTogdm9pZCB7XG5cdFx0Ly8gTG9vayBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgYmluZGluZyByZWdpc3RyYXRpb25cblx0XHRjb25zdCBiaW5kaW5nID0gb0V2ZW50LmdldFNvdXJjZSgpIGFzIEJpbmRpbmc7XG5cdFx0Y29uc3QgYmluZGluZ1JlZ2lzdHJhdGlvbiA9IHRoaXMuX2FCaW5kaW5nUmVnaXN0cmF0aW9ucy5maW5kKChyZWcpID0+IHtcblx0XHRcdHJldHVybiByZWcuYmluZGluZyA9PT0gYmluZGluZztcblx0XHR9KTtcblx0XHRpZiAoIWJpbmRpbmdSZWdpc3RyYXRpb24pIHtcblx0XHRcdExvZy5lcnJvcihcIlBhZ2VSZWFkeSAtIGRhdGEgcmVjZWl2ZWQgb24gYW4gdW5yZWdpc3RlcmVkIGJpbmRpbmdcIik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHN3aXRjaCAoKGJpbmRpbmcgYXMgYW55KS5nZXRHcm91cElkKCkpIHtcblx0XHRcdGNhc2UgXCIkYXV0by5Xb3JrZXJzXCI6XG5cdFx0XHRcdHRoaXMuX29FdmVudFByb3ZpZGVyLmZpcmVFdmVudChcIndvcmtlcnNCYXRjaFJlY2VpdmVkXCIpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCIkYXV0by5IZXJvZXNcIjpcblx0XHRcdFx0dGhpcy5fb0V2ZW50UHJvdmlkZXIuZmlyZUV2ZW50KFwiaGVyb2VzQmF0Y2hSZWNlaXZlZFwiKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdH1cblx0XHRiaW5kaW5nUmVnaXN0cmF0aW9uLnJlY2VpdmVkQ291bnQrKztcblx0XHRpZiAoYmluZGluZ1JlZ2lzdHJhdGlvbi5yZWNlaXZlZENvdW50IDwgYmluZGluZ1JlZ2lzdHJhdGlvbi5yZXF1ZXN0ZWRDb3VudCkge1xuXHRcdFx0Ly8gVGhlcmUgYXJlIG90aGVyIHJlcXVlc3QgcGVuZGluZyAtLT4gcmVzdWJzY3JpYmUgdG8gd2FpdCB1bnRpbCB0aGV5IHJldHVyblxuXHRcdFx0YmluZGluZy5hdHRhY2hFdmVudE9uY2UoXCJkYXRhUmVjZWl2ZWRcIiwgeyB0cmlnZ2VyZWRCeVNlYXJjaDogcGFyYW1zLnRyaWdnZXJlZEJ5U2VhcmNoIH0sIHRoaXMub25EYXRhUmVjZWl2ZWQsIHRoaXMpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQvLyBDaGVjayBpZiBhdCBsZWFzdCBvbmUgYmluZGluZyBoYXMgcmVxdWVzdGVkIGRhdGEsIGFuZCBhbGwgYmluZGluZ3MgdGhhdCBoYXZlIHJlcXVlc3RlZCBkYXRhIGhhdmUgcmVjZWl2ZWQgaXRcblx0XHRjb25zdCBiQWxsRG9uZSA9XG5cdFx0XHR0aGlzLl9hQmluZGluZ1JlZ2lzdHJhdGlvbnMuc29tZSgocmVnKSA9PiB7XG5cdFx0XHRcdHJldHVybiByZWcucmVxdWVzdGVkQ291bnQgIT09IDA7XG5cdFx0XHR9KSAmJlxuXHRcdFx0dGhpcy5fYUJpbmRpbmdSZWdpc3RyYXRpb25zLmV2ZXJ5KChyZWcpID0+IHtcblx0XHRcdFx0cmV0dXJuIHJlZy5yZXF1ZXN0ZWRDb3VudCA9PT0gMCB8fCByZWcucmVjZWl2ZWRDb3VudCA+PSByZWcucmVxdWVzdGVkQ291bnQ7XG5cdFx0XHR9KTtcblx0XHRpZiAocGFyYW1zLnRyaWdnZXJlZEJ5U2VhcmNoIHx8IGJpbmRpbmdSZWdpc3RyYXRpb24ucmVjZWl2ZWRDb3VudCA+PSBiaW5kaW5nUmVnaXN0cmF0aW9uLnJlcXVlc3RlZENvdW50KSB7XG5cdFx0XHR0aGlzLl9pc1NlYXJjaFBlbmRpbmcgPSBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKGJBbGxEb25lKSB7XG5cdFx0XHR0aGlzLl9pc0RhdGFSZWNlaXZlZCA9IHRydWU7XG5cdFx0XHR0aGlzLl9mbk9uRmluaXNoZWQoKTtcblx0XHR9XG5cdH1cblx0Ly8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0Ly8gQ2FsbGJhY2sgd2hlbiBkYXRhIGlzIHJlcXVlc3RlZCBvbiBhIGJpbmRpbmcuXG5cdHByb3RlY3RlZCBvbkRhdGFSZXF1ZXN0ZWQob0V2ZW50OiBFdmVudCwgcGFyYW1zOiB7IHRyaWdnZXJlZEJ5U2VhcmNoOiBib29sZWFuIH0pOiB2b2lkIHtcblx0XHQvLyBMb29rIGZvciB0aGUgY29ycmVzcG9uZGluZyBiaW5kaW5nIHJlZ2lzdHJhdGlvblxuXHRcdGNvbnN0IGJpbmRpbmcgPSBvRXZlbnQuZ2V0U291cmNlKCkgYXMgQmluZGluZztcblx0XHRjb25zdCBiaW5kaW5nUmVnaXN0cmF0aW9uID0gdGhpcy5fYUJpbmRpbmdSZWdpc3RyYXRpb25zLmZpbmQoKHJlZykgPT4ge1xuXHRcdFx0cmV0dXJuIHJlZy5iaW5kaW5nID09PSBiaW5kaW5nO1xuXHRcdH0pO1xuXHRcdGlmICghYmluZGluZ1JlZ2lzdHJhdGlvbikge1xuXHRcdFx0TG9nLmVycm9yKFwiUGFnZVJlYWR5IC0gZGF0YSByZXF1ZXN0ZWQgb24gYW4gdW5yZWdpc3RlcmVkIGJpbmRpbmdcIik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGJpbmRpbmdSZWdpc3RyYXRpb24ucmVxdWVzdGVkQ291bnQrKztcblx0XHR0aGlzLl9pc0RhdGFSZWNlaXZlZCA9IGZhbHNlO1xuXHRcdGlmIChiaW5kaW5nUmVnaXN0cmF0aW9uLnJlcXVlc3RlZENvdW50IC0gYmluZGluZ1JlZ2lzdHJhdGlvbi5yZWNlaXZlZENvdW50ID09PSAxKSB7XG5cdFx0XHQvLyBMaXN0ZW4gdG8gZGF0YVJlY2VpdmVkIG9ubHkgaWYgdGhlcmUncyBubyBvdGhlciByZXF1ZXN0IHBlbmRpbmdcblx0XHRcdC8vIE90aGVyd2lzZSB0aGUgJ2RhdGFSZWNlaXZlZCcgaGFuZGxlciB3b3VsZCBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcyB3aGVuIHRoZSBmaXJzdCBxdWVyeSByZXR1cm5zXG5cdFx0XHQvLyBhbmQgd2Ugd291bGRuJ3Qgd2FpdCBmb3IgYWxsIHF1ZXJpZXMgdG8gYmUgZmluaXNoZWRcblx0XHRcdC8vICh3ZSB3aWxsIHJlc3Vic2NyaWJlIHRvIHRoZSBkYXRhUmVjZWl2ZWQgZXZlbnQgaW4gb25EYXRhUmVjZWl2ZWQgaWYgbmVjZXNzYXJ5KVxuXHRcdFx0YmluZGluZy5hdHRhY2hFdmVudE9uY2UoXCJkYXRhUmVjZWl2ZWRcIiwgeyB0cmlnZ2VyZWRCeVNlYXJjaDogcGFyYW1zLnRyaWdnZXJlZEJ5U2VhcmNoIH0sIHRoaXMub25EYXRhUmVjZWl2ZWQsIHRoaXMpO1xuXHRcdH1cblx0fVxuXHQvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQvLyBDYWxsYmFjayB3aGVuIGEgc2VhcmNoIGlzIHRyaWdnZXJlZCBmcm9tIGEgZmlsdGVyYmFyXG5cdHByb3RlY3RlZCBvblNlYXJjaChvRXZlbnQ6IEV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3QgYU1EQ1RhYmxlTGlua2VkVG9GaWx0ZXJCYXIgPSB0aGlzLl9hTURDVGFibGVzLmZpbHRlcigob1RhYmxlKSA9PiB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQob0V2ZW50LmdldFNvdXJjZSgpIGFzIGFueSkuc0lkID09PSBvVGFibGUuZ2V0RmlsdGVyKCkgJiZcblx0XHRcdFx0b1RhYmxlLmdldFZpc2libGUoKSAmJlxuXHRcdFx0XHQhb1RhYmxlLmdldFBhcmVudCgpPy5nZXRQcm9wZXJ0eShcImJpbmRpbmdTdXNwZW5kZWRcIilcblx0XHRcdCk7XG5cdFx0fSk7XG5cdFx0Y29uc3QgYU1EQ0NoYXJ0c0xpbmtlZFRvRmlsdGVyQmFyID0gdGhpcy5fYU1EQ0NoYXJ0cy5maWx0ZXIoKG9DaGFydCkgPT4ge1xuXHRcdFx0cmV0dXJuIChvRXZlbnQuZ2V0U291cmNlKCkgYXMgYW55KS5zSWQgPT09IG9DaGFydC5nZXRGaWx0ZXIoKSAmJiBvQ2hhcnQuZ2V0VmlzaWJsZSgpO1xuXHRcdH0pO1xuXHRcdGlmIChhTURDVGFibGVMaW5rZWRUb0ZpbHRlckJhci5sZW5ndGggPiAwIHx8IGFNRENDaGFydHNMaW5rZWRUb0ZpbHRlckJhci5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLl9pc1NlYXJjaFBlbmRpbmcgPSB0cnVlO1xuXHRcdH1cblx0XHRhTURDVGFibGVMaW5rZWRUb0ZpbHRlckJhci5mb3JFYWNoKChvVGFibGUpID0+IHtcblx0XHRcdHRoaXMucmVnaXN0ZXJUYWJsZShvVGFibGUsIHRydWUpO1xuXHRcdH0pO1xuXHRcdGFNRENDaGFydHNMaW5rZWRUb0ZpbHRlckJhci5mb3JFYWNoKGFzeW5jIChvQ2hhcnQ6IGFueSkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKG9DaGFydC5pbm5lckNoYXJ0Qm91bmRQcm9taXNlKSB7XG5cdFx0XHRcdFx0YXdhaXQgb0NoYXJ0LmlubmVyQ2hhcnRCb3VuZFByb21pc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5yZWdpc3RlckNoYXJ0KG9DaGFydCwgdHJ1ZSk7XG5cdFx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgZmluZCBhIGlubmVyIGJvdW5kIGNoYXJ0XCIsIG9FcnJvcik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0Ly8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0Ly8gUmVnaXN0ZXIgYSBiaW5kaW5nICh3aXRoIGFuIG9wdGlvbmFsIHRhYmxlL2NoYXJ0KVxuXHQvLyBhbmQgYXR0YWNoIGNhbGxiYWNrcyBvbiBkYXRlUmVxdWVzdGVkL2RhdGFSZWNlaXZlZCBldmVudHNcblx0cHVibGljIHJlZ2lzdGVyKF9ldmVudDogRXZlbnQgfCBudWxsLCBkYXRhOiB7IGJpbmRpbmc/OiBCaW5kaW5nOyB0YWJsZT86IFRhYmxlOyBjaGFydD86IENoYXJ0OyB0cmlnZ2VyZWRCeVNlYXJjaDogYm9vbGVhbiB9KTogdm9pZCB7XG5cdFx0Y29uc3QgYmluZGluZzogQmluZGluZyB8IHVuZGVmaW5lZCA9XG5cdFx0XHRkYXRhLmJpbmRpbmcgfHxcblx0XHRcdGRhdGEudGFibGU/LmdldFJvd0JpbmRpbmcoKSB8fFxuXHRcdFx0KGRhdGEuY2hhcnQgYXMgYW55KT8uZ2V0Q29udHJvbERlbGVnYXRlKCkuZ2V0SW5uZXJDaGFydChkYXRhLmNoYXJ0KS5nZXRCaW5kaW5nKFwiZGF0YVwiKTtcblx0XHRjb25zdCBib3VuZENvbnRyb2wgPSAoZGF0YS50YWJsZSB8fCBkYXRhLmNoYXJ0KSBhcyBDb250cm9sIHwgdW5kZWZpbmVkO1xuXHRcdGlmICghYmluZGluZykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQvLyBDaGVjayBpZiB0aGUgYmluZGluZyBpcyBhbHJlYWR5IHJlZ2lzdGVyZWRcblx0XHRsZXQgYmluZGluZ1JlZ2lzdHJhdGlvbiA9IHRoaXMuX2FCaW5kaW5nUmVnaXN0cmF0aW9ucy5maW5kKChyZWcpID0+IHtcblx0XHRcdHJldHVybiByZWcuYmluZGluZyA9PT0gYmluZGluZztcblx0XHR9KTtcblx0XHRpZiAoYmluZGluZ1JlZ2lzdHJhdGlvbikge1xuXHRcdFx0aWYgKGJvdW5kQ29udHJvbCkge1xuXHRcdFx0XHQvLyBUaGUgYmluZGluZyB3YXMgYWxyZWFkeSByZWdpc3RlcmQgd2l0aG91dCBib3VuZENvbnRyb2wgaW5mb3JtYXRpb24gLS0+IHVwZGF0ZSBib3VuZENvbnRyb2xcblx0XHRcdFx0YmluZGluZ1JlZ2lzdHJhdGlvbi5ib3VuZENvbnRyb2wgPSBib3VuZENvbnRyb2w7XG5cdFx0XHR9XG5cdFx0XHQvLyBUaGlzIGJpbmRpbmcgaGFzIGFscmVhZHkgcmVxdWVzdGVkIGRhdGEsIGJ1dCB3ZSdyZSByZWdpc3RlcmluZyBpdCBhZ2FpbiAob24gc2VhcmNoKSAtLT4gYXR0YWNoIHRvIGRhdGFSZXF1ZXN0ZWQgYWdhaW5cblx0XHRcdGlmIChiaW5kaW5nUmVnaXN0cmF0aW9uLnJlcXVlc3RlZENvdW50ID4gMCkge1xuXHRcdFx0XHRiaW5kaW5nLmRldGFjaEV2ZW50KFwiZGF0YVJlcXVlc3RlZFwiLCB0aGlzLm9uRGF0YVJlcXVlc3RlZCwgdGhpcyk7XG5cdFx0XHRcdGJpbmRpbmcuYXR0YWNoRXZlbnRPbmNlKFwiZGF0YVJlcXVlc3RlZFwiLCB7IHRyaWdnZXJlZEJ5U2VhcmNoOiBkYXRhLnRyaWdnZXJlZEJ5U2VhcmNoIH0sIHRoaXMub25EYXRhUmVxdWVzdGVkLCB0aGlzKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGJvdW5kQ29udHJvbCkge1xuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlcmUncyBhIGRpZmZlcmVudCBiaW5kaW5nIHJlZ2lzdGVyZWQgZm9yIHRoZSBib3VuZCBjb250cm9sXG5cdFx0XHRiaW5kaW5nUmVnaXN0cmF0aW9uID0gdGhpcy5fYUJpbmRpbmdSZWdpc3RyYXRpb25zLmZpbmQoKHJlZykgPT4ge1xuXHRcdFx0XHRyZXR1cm4gcmVnLmJvdW5kQ29udHJvbCA9PT0gYm91bmRDb250cm9sO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAoYmluZGluZ1JlZ2lzdHJhdGlvbiAmJiBiaW5kaW5nUmVnaXN0cmF0aW9uLmJpbmRpbmcgIT09IGJpbmRpbmcpIHtcblx0XHRcdFx0Ly8gVGhlIGNvbnRyb2wgaGFkIGEgZGlmZmVyZW50IGJpbmRpbmcuIFRoaXMgY2FuIGhhcHBlbiBpbiBjYXNlIG9mIE1EQyBjaGFydHMgd2hvIHJlY3JlYXRlZCB0aGVpciBiaW5kaW5nIGFmdGVyIHNlYXJjaFxuXHRcdFx0XHQvLyBUaGUgcHJldmlvdXMgYmluZGluZyBpcyBkZXN0cm95ZWQsIHdlIGNhbiByZXBsYWNlIGl0IHdpdGggdGhlIG5ldyBhbmQgcmVzZXQgY291bnRlcnNcblx0XHRcdFx0YmluZGluZ1JlZ2lzdHJhdGlvbi5iaW5kaW5nID0gYmluZGluZztcblx0XHRcdFx0YmluZGluZ1JlZ2lzdHJhdGlvbi5yZXF1ZXN0ZWRDb3VudCA9IDA7XG5cdFx0XHRcdGJpbmRpbmdSZWdpc3RyYXRpb24ucmVjZWl2ZWRDb3VudCA9IDA7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghYmluZGluZ1JlZ2lzdHJhdGlvbikge1xuXHRcdFx0YmluZGluZ1JlZ2lzdHJhdGlvbiA9IHtcblx0XHRcdFx0YmluZGluZzogYmluZGluZyxcblx0XHRcdFx0Ym91bmRDb250cm9sOiBib3VuZENvbnRyb2wsXG5cdFx0XHRcdHJlcXVlc3RlZENvdW50OiAwLFxuXHRcdFx0XHRyZWNlaXZlZENvdW50OiAwXG5cdFx0XHR9O1xuXHRcdFx0dGhpcy5fYUJpbmRpbmdSZWdpc3RyYXRpb25zLnB1c2goYmluZGluZ1JlZ2lzdHJhdGlvbik7XG5cdFx0fVxuXHRcdGJpbmRpbmcuZGV0YWNoRXZlbnQoXCJkYXRhUmVxdWVzdGVkXCIsIHRoaXMub25EYXRhUmVxdWVzdGVkLCB0aGlzKTtcblx0XHRiaW5kaW5nLmF0dGFjaEV2ZW50T25jZShcImRhdGFSZXF1ZXN0ZWRcIiwgeyB0cmlnZ2VyZWRCeVNlYXJjaDogZGF0YS50cmlnZ2VyZWRCeVNlYXJjaCB9LCB0aGlzLm9uRGF0YVJlcXVlc3RlZCwgdGhpcyk7XG5cdH1cblx0LyoqXG5cdCAqIFJlZ2lzdGVycyBhIGJpbmRpbmcgZm9yIHdhdGNoaW5nIGl0cyBkYXRhIGV2ZW50cyAoZGF0YVJlcXVlc3RlZCBhbmQgZGF0YVJlY2VpdmVkKS5cblx0ICpcblx0ICogQHBhcmFtIGJpbmRpbmcgVGhlIGJpbmRpbmdcblx0ICovXG5cdHB1YmxpYyByZWdpc3RlckJpbmRpbmcoYmluZGluZzogQmluZGluZykge1xuXHRcdHRoaXMucmVnaXN0ZXIobnVsbCwgeyBiaW5kaW5nLCB0cmlnZ2VyZWRCeVNlYXJjaDogZmFsc2UgfSk7XG5cdH1cblx0LyoqXG5cdCAqIFJlZ2lzdGVycyBhbiBNRENUYWJsZSBmb3Igd2F0Y2hpbmcgdGhlIGRhdGEgZXZlbnRzIG9uIGl0cyByb3cgYmluZGluZyAoZGF0YVJlcXVlc3RlZCBhbmQgZGF0YVJlY2VpdmVkKS5cblx0ICpcblx0ICogQHBhcmFtIHRhYmxlIFRoZSB0YWJsZVxuXHQgKiBAcGFyYW0gdHJpZ2dlcmVkQnlTZWFyY2ggVHJ1ZSBpZiB0aGlzIHJlZ2lzdHJhdGlvbiBpcyB0cmlnZ2VyZWQgYnkgYSBmaWx0ZXJCYXIgc2VhcmNoXG5cdCAqL1xuXHRwcm90ZWN0ZWQgcmVnaXN0ZXJUYWJsZSh0YWJsZTogVGFibGUsIHRyaWdnZXJlZEJ5U2VhcmNoID0gZmFsc2UpIHtcblx0XHRpZiAodGhpcy5fYU1EQ1RhYmxlcy5pbmRleE9mKHRhYmxlKSA8IDApIHtcblx0XHRcdHRoaXMuX2FNRENUYWJsZXMucHVzaCh0YWJsZSk7XG5cdFx0fVxuXHRcdGNvbnN0IG9Sb3dCaW5kaW5nID0gdGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdGlmIChvUm93QmluZGluZykge1xuXHRcdFx0dGhpcy5yZWdpc3RlcihudWxsLCB7IHRhYmxlLCB0cmlnZ2VyZWRCeVNlYXJjaCB9KTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuX2FPdGhlckV2ZW50U291cmNlcy5pbmRleE9mKHRhYmxlKSA9PT0gLTEpIHtcblx0XHRcdHRhYmxlLmF0dGFjaEV2ZW50KFwiYmluZGluZ1VwZGF0ZWRcIiwgeyB0YWJsZSwgdHJpZ2dlcmVkQnlTZWFyY2ggfSwgdGhpcy5yZWdpc3RlciwgdGhpcyk7XG5cdFx0XHR0aGlzLl9hT3RoZXJFdmVudFNvdXJjZXMucHVzaCh0YWJsZSk7XG5cdFx0fVxuXHR9XG5cdC8qKlxuXHQgKiBSZWdpc3RlcnMgYW4gTURDQ2hhcnQgZm9yIHdhdGNoaW5nIHRoZSBkYXRhIGV2ZW50cyBvbiBpdHMgaW5uZXIgZGF0YSBiaW5kaW5nIChkYXRhUmVxdWVzdGVkIGFuZCBkYXRhUmVjZWl2ZWQpLlxuXHQgKlxuXHQgKiBAcGFyYW0gY2hhcnQgVGhlIGNoYXJ0XG5cdCAqIEBwYXJhbSB0cmlnZ2VyZWRCeVNlYXJjaCBUcnVlIGlmIHRoaXMgcmVnaXN0cmF0aW9uIGlzIHRyaWdnZXJlZCBieSBhIGZpbHRlckJhciBzZWFyY2hcblx0ICovXG5cdHByb3RlY3RlZCByZWdpc3RlckNoYXJ0KGNoYXJ0OiBDaGFydCwgdHJpZ2dlcmVkQnlTZWFyY2ggPSBmYWxzZSkge1xuXHRcdGlmICh0aGlzLl9hTURDQ2hhcnRzLmluZGV4T2YoY2hhcnQpIDwgMCkge1xuXHRcdFx0dGhpcy5fYU1EQ0NoYXJ0cy5wdXNoKGNoYXJ0KTtcblx0XHR9XG5cdFx0Y29uc3Qgb0lubmVyQ2hhcnQgPSAoY2hhcnQgYXMgYW55KS5nZXRDb250cm9sRGVsZWdhdGUoKS5nZXRJbm5lckNoYXJ0KGNoYXJ0KTtcblx0XHRjb25zdCBiaW5kaW5nID0gb0lubmVyQ2hhcnQ/LmdldEJpbmRpbmcoXCJkYXRhXCIpO1xuXHRcdGlmIChiaW5kaW5nKSB7XG5cdFx0XHR0aGlzLnJlZ2lzdGVyKG51bGwsIHsgY2hhcnQsIHRyaWdnZXJlZEJ5U2VhcmNoIH0pO1xuXHRcdH1cblx0XHRpZiAodGhpcy5fYU90aGVyRXZlbnRTb3VyY2VzLmluZGV4T2YoY2hhcnQpID09PSAtMSkge1xuXHRcdFx0Y2hhcnQuYXR0YWNoRXZlbnQoXCJiaW5kaW5nVXBkYXRlZFwiLCB7IGNoYXJ0LCB0cmlnZ2VyZWRCeVNlYXJjaCB9LCB0aGlzLnJlZ2lzdGVyLCB0aGlzKTtcblx0XHRcdHRoaXMuX2FPdGhlckV2ZW50U291cmNlcy5wdXNoKGNoYXJ0KTtcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqIFJlZ2lzdGVycyBhbiBNRENUYWJsZSBvciBNRENDaGFydCBmb3Igd2F0Y2hpbmcgdGhlIGRhdGEgZXZlbnRzIG9uIGl0cyBpbm5lciBkYXRhIGJpbmRpbmcgKGRhdGFSZXF1ZXN0ZWQgYW5kIGRhdGFSZWNlaXZlZCkuXG5cdCAqXG5cdCAqIEBwYXJhbSBlbGVtZW50ICBUaGUgdGFibGUgb3IgY2hhcnRcblx0ICovXG5cdHB1YmxpYyBhc3luYyByZWdpc3RlclRhYmxlT3JDaGFydChlbGVtZW50OiBUYWJsZSB8IENoYXJ0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKCFlbGVtZW50LmlzQShcInNhcC51aS5tZGMuVGFibGVcIikgJiYgIWVsZW1lbnQuaXNBKFwic2FwLnVpLm1kYy5DaGFydFwiKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgZWxlbWVudC5pbml0aWFsaXplZCgpOyAvLyBhY2Nlc3MgYmluZGluZyBvbmx5IGFmdGVyIHRhYmxlL2NoYXJ0IGlzIGJvdW5kXG5cdFx0XHRpZiAoZWxlbWVudC5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdHRoaXMucmVnaXN0ZXJUYWJsZShlbGVtZW50IGFzIFRhYmxlKTtcblx0XHRcdFx0Ly9JZiB0aGUgYXV0b0JpbmRPbkluaXQgaXMgZW5hYmxlZCwgdGhlIHRhYmxlIHdpbGwgYmUgcmVib3VuZFxuXHRcdFx0XHQvL1RoZW4gd2UgbmVlZCB0byB3YWl0IGZvciB0aGlzIHJlYmluZCB0byBvY2N1ciB0byBlbnN1cmUgdGhlIHBhZ2VSZWFkeSB3aWxsIGFsc28gd2FpdCBmb3IgdGhlIGRhdGEgdG8gYmUgcmVjZWl2ZWRcblx0XHRcdFx0aWYgKGVsZW1lbnQuZ2V0QXV0b0JpbmRPbkluaXQoKSAmJiBlbGVtZW50LmdldERvbVJlZigpKSB7XG5cdFx0XHRcdFx0YXdhaXQgVXRpbHMud2hlbkJvdW5kKGVsZW1lbnQgYXMgVGFibGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnJlZ2lzdGVyQ2hhcnQoZWxlbWVudCBhcyBDaGFydCk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAob0Vycm9yOiBhbnkpIHtcblx0XHRcdExvZy5lcnJvcihcIlBhZ2VSZWFkeSAtIENhbm5vdCByZWdpc3RlciBhIHRhYmxlIG9yIGEgY2hhcnRcIiwgb0Vycm9yKTtcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqIFJlZ2lzdGVycyBhbiBNRENGaWx0ZXJCYXIgZm9yIHdhdGNoaW5nIGl0cyBzZWFyY2ggZXZlbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSBmaWx0ZXJCYXIgVGhlIGZpbHRlciBiYXJcblx0ICovXG5cdHB1YmxpYyByZWdpc3RlckZpbHRlckJhcihmaWx0ZXJCYXI6IEZpbHRlckJhcikge1xuXHRcdGZpbHRlckJhci5hdHRhY2hFdmVudChcInNlYXJjaFwiLCB0aGlzLm9uU2VhcmNoLCB0aGlzKTtcblx0XHR0aGlzLl9hT3RoZXJFdmVudFNvdXJjZXMucHVzaChmaWx0ZXJCYXIpO1xuXHR9XG59XG5leHBvcnQgZGVmYXVsdCBEYXRhUXVlcnlXYXRjaGVyO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7O0VBa2pCTyxnQkFBZ0JBLElBQWhCLEVBQXNCQyxPQUF0QixFQUErQjtJQUNyQyxJQUFJO01BQ0gsSUFBSUMsTUFBTSxHQUFHRixJQUFJLEVBQWpCO0lBQ0EsQ0FGRCxDQUVFLE9BQU1HLENBQU4sRUFBUztNQUNWLE9B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
342
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiRGF0YVF1ZXJ5V2F0Y2hlciIsIl9vRXZlbnRQcm92aWRlciIsIl9mbk9uRmluaXNoZWQiLCJfYUJpbmRpbmdSZWdpc3RyYXRpb25zIiwiX2FPdGhlckV2ZW50U291cmNlcyIsIl9pc1NlYXJjaFBlbmRpbmciLCJfYU1EQ1RhYmxlcyIsIl9hTURDQ2hhcnRzIiwiaXNTZWFyY2hQZW5kaW5nIiwiaXNEYXRhUmVjZWl2ZWQiLCJfaXNEYXRhUmVjZWl2ZWQiLCJyZXNldERhdGFSZWNlaXZlZCIsInVuZGVmaW5lZCIsInJlc2V0IiwiZm9yRWFjaCIsInJlZyIsImJpbmRpbmciLCJkZXRhY2hFdmVudCIsIm9uRGF0YVJlcXVlc3RlZCIsIm9uRGF0YVJlY2VpdmVkIiwib0VsZW1lbnQiLCJvblNlYXJjaCIsInJlZ2lzdGVyIiwib0V2ZW50IiwicGFyYW1zIiwiZ2V0U291cmNlIiwiYmluZGluZ1JlZ2lzdHJhdGlvbiIsImZpbmQiLCJMb2ciLCJlcnJvciIsImdldEdyb3VwSWQiLCJmaXJlRXZlbnQiLCJyZWNlaXZlZENvdW50IiwicmVxdWVzdGVkQ291bnQiLCJhdHRhY2hFdmVudE9uY2UiLCJ0cmlnZ2VyZWRCeVNlYXJjaCIsImJBbGxEb25lIiwic29tZSIsImV2ZXJ5IiwiYU1EQ1RhYmxlTGlua2VkVG9GaWx0ZXJCYXIiLCJmaWx0ZXIiLCJvVGFibGUiLCJzSWQiLCJnZXRGaWx0ZXIiLCJnZXRWaXNpYmxlIiwiZ2V0UGFyZW50IiwiZ2V0UHJvcGVydHkiLCJhTURDQ2hhcnRzTGlua2VkVG9GaWx0ZXJCYXIiLCJvQ2hhcnQiLCJsZW5ndGgiLCJyZWdpc3RlclRhYmxlIiwicmVnaXN0ZXJDaGFydCIsImlubmVyQ2hhcnRCb3VuZFByb21pc2UiLCJvRXJyb3IiLCJfZXZlbnQiLCJkYXRhIiwidGFibGUiLCJnZXRSb3dCaW5kaW5nIiwiY2hhcnQiLCJnZXRDb250cm9sRGVsZWdhdGUiLCJnZXRJbm5lckNoYXJ0IiwiZ2V0QmluZGluZyIsImJvdW5kQ29udHJvbCIsInB1c2giLCJyZWdpc3RlckJpbmRpbmciLCJpbmRleE9mIiwib1Jvd0JpbmRpbmciLCJhdHRhY2hFdmVudCIsIm9Jbm5lckNoYXJ0IiwicmVnaXN0ZXJUYWJsZU9yQ2hhcnQiLCJlbGVtZW50IiwiaXNBIiwiaW5pdGlhbGl6ZWQiLCJnZXRBdXRvQmluZE9uSW5pdCIsImdldERvbVJlZiIsIlV0aWxzIiwid2hlbkJvdW5kIiwicmVnaXN0ZXJGaWx0ZXJCYXIiLCJmaWx0ZXJCYXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkRhdGFRdWVyeVdhdGNoZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgRXZlbnRQcm92aWRlciBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRQcm92aWRlclwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgQ2hhcnQgZnJvbSBcInNhcC91aS9tZGMvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL3VpL21kYy9GaWx0ZXJCYXJcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQmluZGluZ1wiO1xuXG5jbGFzcyBEYXRhUXVlcnlXYXRjaGVyIHtcblx0cHJvdGVjdGVkIF9hQmluZGluZ1JlZ2lzdHJhdGlvbnM6IHsgYmluZGluZzogQmluZGluZzsgYm91bmRDb250cm9sPzogQ29udHJvbDsgcmVxdWVzdGVkQ291bnQ6IG51bWJlcjsgcmVjZWl2ZWRDb3VudDogbnVtYmVyIH1bXSA9IFtdO1xuXHRwcm90ZWN0ZWQgX2FPdGhlckV2ZW50U291cmNlczogRXZlbnRQcm92aWRlcltdID0gW107XG5cdHByb3RlY3RlZCBfaXNTZWFyY2hQZW5kaW5nID0gZmFsc2U7XG5cdHByb3RlY3RlZCBfaXNEYXRhUmVjZWl2ZWQ/OiBib29sZWFuO1xuXHRwcm90ZWN0ZWQgX2FNRENUYWJsZXM6IFRhYmxlW10gPSBbXTtcblx0cHJvdGVjdGVkIF9hTURDQ2hhcnRzOiBDaGFydFtdID0gW107XG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX29FdmVudFByb3ZpZGVyOiBFdmVudFByb3ZpZGVyLCBwcm90ZWN0ZWQgX2ZuT25GaW5pc2hlZDogKCkgPT4gdm9pZCkge31cblx0Ly8gQWNjZXNzb3JzXG5cdHB1YmxpYyBpc1NlYXJjaFBlbmRpbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2lzU2VhcmNoUGVuZGluZztcblx0fVxuXHRwdWJsaWMgaXNEYXRhUmVjZWl2ZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2lzRGF0YVJlY2VpdmVkO1xuXHR9XG5cdHB1YmxpYyByZXNldERhdGFSZWNlaXZlZCgpIHtcblx0XHR0aGlzLl9pc0RhdGFSZWNlaXZlZCA9IHVuZGVmaW5lZDtcblx0fVxuXHQvKipcblx0ICogUmVzZXQgdGhlIHN0YXRlOiB1bnN1YnNjcmliZSB0byBhbGwgZGF0YSBldmVudHMgYW5kIHJlbW92ZSBhbGwgcmVnaXN0ZXJlZCBvYmplY3RzLlxuXHQgKi9cblx0cHVibGljIHJlc2V0KCk6IHZvaWQge1xuXHRcdC8vIFJlbW92ZSBhbGwgcmVtYWluaW5nIGNhbGxiYWNrc1xuXHRcdHRoaXMuX2FCaW5kaW5nUmVnaXN0cmF0aW9ucy5mb3JFYWNoKChyZWcpID0+IHtcblx0XHRcdHJlZy5iaW5kaW5nLmRldGFjaEV2ZW50KFwiZGF0YVJlcXVlc3RlZFwiLCB0aGlzLm9uRGF0YVJlcXVlc3RlZCwgdGhpcyk7XG5cdFx0XHRyZWcuYmluZGluZy5kZXRhY2hFdmVudChcImRhdGFSZWNlaXZlZFwiLCB0aGlzLm9uRGF0YVJlY2VpdmVkLCB0aGlzKTtcblx0XHR9KTtcblx0XHR0aGlzLl9hT3RoZXJFdmVudFNvdXJjZXMuZm9yRWFjaCgob0VsZW1lbnQ6IGFueSkgPT4ge1xuXHRcdFx0b0VsZW1lbnQuZGV0YWNoRXZlbnQoXCJzZWFyY2hcIiwgdGhpcy5vblNlYXJjaCwgdGhpcyk7XG5cdFx0XHRvRWxlbWVudC5kZXRhY2hFdmVudChcImJpbmRpbmdVcGRhdGVkXCIsIHRoaXMucmVnaXN0ZXIsIHRoaXMpO1xuXHRcdH0pO1xuXHRcdHRoaXMuX2FCaW5kaW5nUmVnaXN0cmF0aW9ucyA9IFtdO1xuXHRcdHRoaXMuX2FPdGhlckV2ZW50U291cmNlcyA9IFtdO1xuXHRcdHRoaXMuX2FNRENUYWJsZXMgPSBbXTtcblx0XHR0aGlzLl9hTURDQ2hhcnRzID0gW107XG5cdFx0dGhpcy5faXNTZWFyY2hQZW5kaW5nID0gZmFsc2U7XG5cdFx0dGhpcy5faXNEYXRhUmVjZWl2ZWQgPSB1bmRlZmluZWQ7XG5cdH1cblx0Ly8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0Ly8gQ2FsbGJhY2sgd2hlbiBkYXRhIGlzIHJlY2VpdmVkIG9uIGEgYmluZGluZy5cblx0cHJvdGVjdGVkIG9uRGF0YVJlY2VpdmVkKG9FdmVudDogRXZlbnQsIHBhcmFtczogeyB0cmlnZ2VyZWRCeVNlYXJjaDogYm9vbGVhbiB9KTogdm9pZCB7XG5cdFx0Ly8gTG9vayBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgYmluZGluZyByZWdpc3RyYXRpb25cblx0XHRjb25zdCBiaW5kaW5nID0gb0V2ZW50LmdldFNvdXJjZSgpIGFzIEJpbmRpbmc7XG5cdFx0Y29uc3QgYmluZGluZ1JlZ2lzdHJhdGlvbiA9IHRoaXMuX2FCaW5kaW5nUmVnaXN0cmF0aW9ucy5maW5kKChyZWcpID0+IHtcblx0XHRcdHJldHVybiByZWcuYmluZGluZyA9PT0gYmluZGluZztcblx0XHR9KTtcblx0XHRpZiAoIWJpbmRpbmdSZWdpc3RyYXRpb24pIHtcblx0XHRcdExvZy5lcnJvcihcIlBhZ2VSZWFkeSAtIGRhdGEgcmVjZWl2ZWQgb24gYW4gdW5yZWdpc3RlcmVkIGJpbmRpbmdcIik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHN3aXRjaCAoKGJpbmRpbmcgYXMgYW55KS5nZXRHcm91cElkKCkpIHtcblx0XHRcdGNhc2UgXCIkYXV0by5Xb3JrZXJzXCI6XG5cdFx0XHRcdHRoaXMuX29FdmVudFByb3ZpZGVyLmZpcmVFdmVudChcIndvcmtlcnNCYXRjaFJlY2VpdmVkXCIpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCIkYXV0by5IZXJvZXNcIjpcblx0XHRcdFx0dGhpcy5fb0V2ZW50UHJvdmlkZXIuZmlyZUV2ZW50KFwiaGVyb2VzQmF0Y2hSZWNlaXZlZFwiKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdH1cblx0XHRiaW5kaW5nUmVnaXN0cmF0aW9uLnJlY2VpdmVkQ291bnQrKztcblx0XHRpZiAoYmluZGluZ1JlZ2lzdHJhdGlvbi5yZWNlaXZlZENvdW50IDwgYmluZGluZ1JlZ2lzdHJhdGlvbi5yZXF1ZXN0ZWRDb3VudCkge1xuXHRcdFx0Ly8gVGhlcmUgYXJlIG90aGVyIHJlcXVlc3QgcGVuZGluZyAtLT4gcmVzdWJzY3JpYmUgdG8gd2FpdCB1bnRpbCB0aGV5IHJldHVyblxuXHRcdFx0YmluZGluZy5hdHRhY2hFdmVudE9uY2UoXCJkYXRhUmVjZWl2ZWRcIiwgeyB0cmlnZ2VyZWRCeVNlYXJjaDogcGFyYW1zLnRyaWdnZXJlZEJ5U2VhcmNoIH0sIHRoaXMub25EYXRhUmVjZWl2ZWQsIHRoaXMpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQvLyBDaGVjayBpZiBhdCBsZWFzdCBvbmUgYmluZGluZyBoYXMgcmVxdWVzdGVkIGRhdGEsIGFuZCBhbGwgYmluZGluZ3MgdGhhdCBoYXZlIHJlcXVlc3RlZCBkYXRhIGhhdmUgcmVjZWl2ZWQgaXRcblx0XHRjb25zdCBiQWxsRG9uZSA9XG5cdFx0XHR0aGlzLl9hQmluZGluZ1JlZ2lzdHJhdGlvbnMuc29tZSgocmVnKSA9PiB7XG5cdFx0XHRcdHJldHVybiByZWcucmVxdWVzdGVkQ291bnQgIT09IDA7XG5cdFx0XHR9KSAmJlxuXHRcdFx0dGhpcy5fYUJpbmRpbmdSZWdpc3RyYXRpb25zLmV2ZXJ5KChyZWcpID0+IHtcblx0XHRcdFx0cmV0dXJuIHJlZy5yZXF1ZXN0ZWRDb3VudCA9PT0gMCB8fCByZWcucmVjZWl2ZWRDb3VudCA+PSByZWcucmVxdWVzdGVkQ291bnQ7XG5cdFx0XHR9KTtcblx0XHRpZiAocGFyYW1zLnRyaWdnZXJlZEJ5U2VhcmNoIHx8IGJpbmRpbmdSZWdpc3RyYXRpb24ucmVjZWl2ZWRDb3VudCA+PSBiaW5kaW5nUmVnaXN0cmF0aW9uLnJlcXVlc3RlZENvdW50KSB7XG5cdFx0XHR0aGlzLl9pc1NlYXJjaFBlbmRpbmcgPSBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKGJBbGxEb25lKSB7XG5cdFx0XHR0aGlzLl9pc0RhdGFSZWNlaXZlZCA9IHRydWU7XG5cdFx0XHR0aGlzLl9mbk9uRmluaXNoZWQoKTtcblx0XHR9XG5cdH1cblx0Ly8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0Ly8gQ2FsbGJhY2sgd2hlbiBkYXRhIGlzIHJlcXVlc3RlZCBvbiBhIGJpbmRpbmcuXG5cdHByb3RlY3RlZCBvbkRhdGFSZXF1ZXN0ZWQob0V2ZW50OiBFdmVudCwgcGFyYW1zOiB7IHRyaWdnZXJlZEJ5U2VhcmNoOiBib29sZWFuIH0pOiB2b2lkIHtcblx0XHQvLyBMb29rIGZvciB0aGUgY29ycmVzcG9uZGluZyBiaW5kaW5nIHJlZ2lzdHJhdGlvblxuXHRcdGNvbnN0IGJpbmRpbmcgPSBvRXZlbnQuZ2V0U291cmNlKCkgYXMgQmluZGluZztcblx0XHRjb25zdCBiaW5kaW5nUmVnaXN0cmF0aW9uID0gdGhpcy5fYUJpbmRpbmdSZWdpc3RyYXRpb25zLmZpbmQoKHJlZykgPT4ge1xuXHRcdFx0cmV0dXJuIHJlZy5iaW5kaW5nID09PSBiaW5kaW5nO1xuXHRcdH0pO1xuXHRcdGlmICghYmluZGluZ1JlZ2lzdHJhdGlvbikge1xuXHRcdFx0TG9nLmVycm9yKFwiUGFnZVJlYWR5IC0gZGF0YSByZXF1ZXN0ZWQgb24gYW4gdW5yZWdpc3RlcmVkIGJpbmRpbmdcIik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGJpbmRpbmdSZWdpc3RyYXRpb24ucmVxdWVzdGVkQ291bnQrKztcblx0XHR0aGlzLl9pc0RhdGFSZWNlaXZlZCA9IGZhbHNlO1xuXHRcdGlmIChiaW5kaW5nUmVnaXN0cmF0aW9uLnJlcXVlc3RlZENvdW50IC0gYmluZGluZ1JlZ2lzdHJhdGlvbi5yZWNlaXZlZENvdW50ID09PSAxKSB7XG5cdFx0XHQvLyBMaXN0ZW4gdG8gZGF0YVJlY2VpdmVkIG9ubHkgaWYgdGhlcmUncyBubyBvdGhlciByZXF1ZXN0IHBlbmRpbmdcblx0XHRcdC8vIE90aGVyd2lzZSB0aGUgJ2RhdGFSZWNlaXZlZCcgaGFuZGxlciB3b3VsZCBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcyB3aGVuIHRoZSBmaXJzdCBxdWVyeSByZXR1cm5zXG5cdFx0XHQvLyBhbmQgd2Ugd291bGRuJ3Qgd2FpdCBmb3IgYWxsIHF1ZXJpZXMgdG8gYmUgZmluaXNoZWRcblx0XHRcdC8vICh3ZSB3aWxsIHJlc3Vic2NyaWJlIHRvIHRoZSBkYXRhUmVjZWl2ZWQgZXZlbnQgaW4gb25EYXRhUmVjZWl2ZWQgaWYgbmVjZXNzYXJ5KVxuXHRcdFx0YmluZGluZy5hdHRhY2hFdmVudE9uY2UoXCJkYXRhUmVjZWl2ZWRcIiwgeyB0cmlnZ2VyZWRCeVNlYXJjaDogcGFyYW1zLnRyaWdnZXJlZEJ5U2VhcmNoIH0sIHRoaXMub25EYXRhUmVjZWl2ZWQsIHRoaXMpO1xuXHRcdH1cblx0fVxuXHQvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQvLyBDYWxsYmFjayB3aGVuIGEgc2VhcmNoIGlzIHRyaWdnZXJlZCBmcm9tIGEgZmlsdGVyYmFyXG5cdHByb3RlY3RlZCBvblNlYXJjaChvRXZlbnQ6IEV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3QgYU1EQ1RhYmxlTGlua2VkVG9GaWx0ZXJCYXIgPSB0aGlzLl9hTURDVGFibGVzLmZpbHRlcigob1RhYmxlKSA9PiB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQob0V2ZW50LmdldFNvdXJjZSgpIGFzIGFueSkuc0lkID09PSBvVGFibGUuZ2V0RmlsdGVyKCkgJiZcblx0XHRcdFx0b1RhYmxlLmdldFZpc2libGUoKSAmJlxuXHRcdFx0XHQhb1RhYmxlLmdldFBhcmVudCgpPy5nZXRQcm9wZXJ0eShcImJpbmRpbmdTdXNwZW5kZWRcIilcblx0XHRcdCk7XG5cdFx0fSk7XG5cdFx0Y29uc3QgYU1EQ0NoYXJ0c0xpbmtlZFRvRmlsdGVyQmFyID0gdGhpcy5fYU1EQ0NoYXJ0cy5maWx0ZXIoKG9DaGFydCkgPT4ge1xuXHRcdFx0cmV0dXJuIChvRXZlbnQuZ2V0U291cmNlKCkgYXMgYW55KS5zSWQgPT09IG9DaGFydC5nZXRGaWx0ZXIoKSAmJiBvQ2hhcnQuZ2V0VmlzaWJsZSgpO1xuXHRcdH0pO1xuXHRcdGlmIChhTURDVGFibGVMaW5rZWRUb0ZpbHRlckJhci5sZW5ndGggPiAwIHx8IGFNRENDaGFydHNMaW5rZWRUb0ZpbHRlckJhci5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLl9pc1NlYXJjaFBlbmRpbmcgPSB0cnVlO1xuXHRcdH1cblx0XHRhTURDVGFibGVMaW5rZWRUb0ZpbHRlckJhci5mb3JFYWNoKChvVGFibGUpID0+IHtcblx0XHRcdHRoaXMucmVnaXN0ZXJUYWJsZShvVGFibGUsIHRydWUpO1xuXHRcdH0pO1xuXHRcdGFNRENDaGFydHNMaW5rZWRUb0ZpbHRlckJhci5mb3JFYWNoKGFzeW5jIChvQ2hhcnQ6IGFueSkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKG9DaGFydC5pbm5lckNoYXJ0Qm91bmRQcm9taXNlKSB7XG5cdFx0XHRcdFx0YXdhaXQgb0NoYXJ0LmlubmVyQ2hhcnRCb3VuZFByb21pc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5yZWdpc3RlckNoYXJ0KG9DaGFydCwgdHJ1ZSk7XG5cdFx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgZmluZCBhIGlubmVyIGJvdW5kIGNoYXJ0XCIsIG9FcnJvcik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0Ly8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0Ly8gUmVnaXN0ZXIgYSBiaW5kaW5nICh3aXRoIGFuIG9wdGlvbmFsIHRhYmxlL2NoYXJ0KVxuXHQvLyBhbmQgYXR0YWNoIGNhbGxiYWNrcyBvbiBkYXRlUmVxdWVzdGVkL2RhdGFSZWNlaXZlZCBldmVudHNcblx0cHVibGljIHJlZ2lzdGVyKF9ldmVudDogRXZlbnQgfCBudWxsLCBkYXRhOiB7IGJpbmRpbmc/OiBCaW5kaW5nOyB0YWJsZT86IFRhYmxlOyBjaGFydD86IENoYXJ0OyB0cmlnZ2VyZWRCeVNlYXJjaDogYm9vbGVhbiB9KTogdm9pZCB7XG5cdFx0Y29uc3QgYmluZGluZzogQmluZGluZyB8IHVuZGVmaW5lZCA9XG5cdFx0XHRkYXRhLmJpbmRpbmcgfHxcblx0XHRcdGRhdGEudGFibGU/LmdldFJvd0JpbmRpbmcoKSB8fFxuXHRcdFx0KGRhdGEuY2hhcnQgYXMgYW55KT8uZ2V0Q29udHJvbERlbGVnYXRlKCkuZ2V0SW5uZXJDaGFydChkYXRhLmNoYXJ0KS5nZXRCaW5kaW5nKFwiZGF0YVwiKTtcblx0XHRjb25zdCBib3VuZENvbnRyb2wgPSAoZGF0YS50YWJsZSB8fCBkYXRhLmNoYXJ0KSBhcyBDb250cm9sIHwgdW5kZWZpbmVkO1xuXHRcdGlmICghYmluZGluZykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQvLyBDaGVjayBpZiB0aGUgYmluZGluZyBpcyBhbHJlYWR5IHJlZ2lzdGVyZWRcblx0XHRsZXQgYmluZGluZ1JlZ2lzdHJhdGlvbiA9IHRoaXMuX2FCaW5kaW5nUmVnaXN0cmF0aW9ucy5maW5kKChyZWcpID0+IHtcblx0XHRcdHJldHVybiByZWcuYmluZGluZyA9PT0gYmluZGluZztcblx0XHR9KTtcblx0XHRpZiAoYmluZGluZ1JlZ2lzdHJhdGlvbikge1xuXHRcdFx0aWYgKGJvdW5kQ29udHJvbCkge1xuXHRcdFx0XHQvLyBUaGUgYmluZGluZyB3YXMgYWxyZWFkeSByZWdpc3RlcmQgd2l0aG91dCBib3VuZENvbnRyb2wgaW5mb3JtYXRpb24gLS0+IHVwZGF0ZSBib3VuZENvbnRyb2xcblx0XHRcdFx0YmluZGluZ1JlZ2lzdHJhdGlvbi5ib3VuZENvbnRyb2wgPSBib3VuZENvbnRyb2w7XG5cdFx0XHR9XG5cdFx0XHQvLyBUaGlzIGJpbmRpbmcgaGFzIGFscmVhZHkgcmVxdWVzdGVkIGRhdGEsIGJ1dCB3ZSdyZSByZWdpc3RlcmluZyBpdCBhZ2FpbiAob24gc2VhcmNoKSAtLT4gYXR0YWNoIHRvIGRhdGFSZXF1ZXN0ZWQgYWdhaW5cblx0XHRcdGlmIChiaW5kaW5nUmVnaXN0cmF0aW9uLnJlcXVlc3RlZENvdW50ID4gMCkge1xuXHRcdFx0XHRiaW5kaW5nLmRldGFjaEV2ZW50KFwiZGF0YVJlcXVlc3RlZFwiLCB0aGlzLm9uRGF0YVJlcXVlc3RlZCwgdGhpcyk7XG5cdFx0XHRcdGJpbmRpbmcuYXR0YWNoRXZlbnRPbmNlKFwiZGF0YVJlcXVlc3RlZFwiLCB7IHRyaWdnZXJlZEJ5U2VhcmNoOiBkYXRhLnRyaWdnZXJlZEJ5U2VhcmNoIH0sIHRoaXMub25EYXRhUmVxdWVzdGVkLCB0aGlzKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGJvdW5kQ29udHJvbCkge1xuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlcmUncyBhIGRpZmZlcmVudCBiaW5kaW5nIHJlZ2lzdGVyZWQgZm9yIHRoZSBib3VuZCBjb250cm9sXG5cdFx0XHRiaW5kaW5nUmVnaXN0cmF0aW9uID0gdGhpcy5fYUJpbmRpbmdSZWdpc3RyYXRpb25zLmZpbmQoKHJlZykgPT4ge1xuXHRcdFx0XHRyZXR1cm4gcmVnLmJvdW5kQ29udHJvbCA9PT0gYm91bmRDb250cm9sO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAoYmluZGluZ1JlZ2lzdHJhdGlvbiAmJiBiaW5kaW5nUmVnaXN0cmF0aW9uLmJpbmRpbmcgIT09IGJpbmRpbmcpIHtcblx0XHRcdFx0Ly8gVGhlIGNvbnRyb2wgaGFkIGEgZGlmZmVyZW50IGJpbmRpbmcuIFRoaXMgY2FuIGhhcHBlbiBpbiBjYXNlIG9mIE1EQyBjaGFydHMgd2hvIHJlY3JlYXRlZCB0aGVpciBiaW5kaW5nIGFmdGVyIHNlYXJjaFxuXHRcdFx0XHQvLyBUaGUgcHJldmlvdXMgYmluZGluZyBpcyBkZXN0cm95ZWQsIHdlIGNhbiByZXBsYWNlIGl0IHdpdGggdGhlIG5ldyBhbmQgcmVzZXQgY291bnRlcnNcblx0XHRcdFx0YmluZGluZ1JlZ2lzdHJhdGlvbi5iaW5kaW5nID0gYmluZGluZztcblx0XHRcdFx0YmluZGluZ1JlZ2lzdHJhdGlvbi5yZXF1ZXN0ZWRDb3VudCA9IDA7XG5cdFx0XHRcdGJpbmRpbmdSZWdpc3RyYXRpb24ucmVjZWl2ZWRDb3VudCA9IDA7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghYmluZGluZ1JlZ2lzdHJhdGlvbikge1xuXHRcdFx0YmluZGluZ1JlZ2lzdHJhdGlvbiA9IHtcblx0XHRcdFx0YmluZGluZzogYmluZGluZyxcblx0XHRcdFx0Ym91bmRDb250cm9sOiBib3VuZENvbnRyb2wsXG5cdFx0XHRcdHJlcXVlc3RlZENvdW50OiAwLFxuXHRcdFx0XHRyZWNlaXZlZENvdW50OiAwXG5cdFx0XHR9O1xuXHRcdFx0dGhpcy5fYUJpbmRpbmdSZWdpc3RyYXRpb25zLnB1c2goYmluZGluZ1JlZ2lzdHJhdGlvbik7XG5cdFx0fVxuXHRcdGJpbmRpbmcuZGV0YWNoRXZlbnQoXCJkYXRhUmVxdWVzdGVkXCIsIHRoaXMub25EYXRhUmVxdWVzdGVkLCB0aGlzKTtcblx0XHRiaW5kaW5nLmF0dGFjaEV2ZW50T25jZShcImRhdGFSZXF1ZXN0ZWRcIiwgeyB0cmlnZ2VyZWRCeVNlYXJjaDogZGF0YS50cmlnZ2VyZWRCeVNlYXJjaCB9LCB0aGlzLm9uRGF0YVJlcXVlc3RlZCwgdGhpcyk7XG5cdH1cblx0LyoqXG5cdCAqIFJlZ2lzdGVycyBhIGJpbmRpbmcgZm9yIHdhdGNoaW5nIGl0cyBkYXRhIGV2ZW50cyAoZGF0YVJlcXVlc3RlZCBhbmQgZGF0YVJlY2VpdmVkKS5cblx0ICpcblx0ICogQHBhcmFtIGJpbmRpbmcgVGhlIGJpbmRpbmdcblx0ICovXG5cdHB1YmxpYyByZWdpc3RlckJpbmRpbmcoYmluZGluZzogQmluZGluZykge1xuXHRcdHRoaXMucmVnaXN0ZXIobnVsbCwgeyBiaW5kaW5nLCB0cmlnZ2VyZWRCeVNlYXJjaDogZmFsc2UgfSk7XG5cdH1cblx0LyoqXG5cdCAqIFJlZ2lzdGVycyBhbiBNRENUYWJsZSBmb3Igd2F0Y2hpbmcgdGhlIGRhdGEgZXZlbnRzIG9uIGl0cyByb3cgYmluZGluZyAoZGF0YVJlcXVlc3RlZCBhbmQgZGF0YVJlY2VpdmVkKS5cblx0ICpcblx0ICogQHBhcmFtIHRhYmxlIFRoZSB0YWJsZVxuXHQgKiBAcGFyYW0gdHJpZ2dlcmVkQnlTZWFyY2ggVHJ1ZSBpZiB0aGlzIHJlZ2lzdHJhdGlvbiBpcyB0cmlnZ2VyZWQgYnkgYSBmaWx0ZXJCYXIgc2VhcmNoXG5cdCAqL1xuXHRwcm90ZWN0ZWQgcmVnaXN0ZXJUYWJsZSh0YWJsZTogVGFibGUsIHRyaWdnZXJlZEJ5U2VhcmNoID0gZmFsc2UpIHtcblx0XHRpZiAodGhpcy5fYU1EQ1RhYmxlcy5pbmRleE9mKHRhYmxlKSA8IDApIHtcblx0XHRcdHRoaXMuX2FNRENUYWJsZXMucHVzaCh0YWJsZSk7XG5cdFx0fVxuXHRcdGNvbnN0IG9Sb3dCaW5kaW5nID0gdGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdGlmIChvUm93QmluZGluZykge1xuXHRcdFx0dGhpcy5yZWdpc3RlcihudWxsLCB7IHRhYmxlLCB0cmlnZ2VyZWRCeVNlYXJjaCB9KTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuX2FPdGhlckV2ZW50U291cmNlcy5pbmRleE9mKHRhYmxlKSA9PT0gLTEpIHtcblx0XHRcdHRhYmxlLmF0dGFjaEV2ZW50KFwiYmluZGluZ1VwZGF0ZWRcIiwgeyB0YWJsZSwgdHJpZ2dlcmVkQnlTZWFyY2ggfSwgdGhpcy5yZWdpc3RlciwgdGhpcyk7XG5cdFx0XHR0aGlzLl9hT3RoZXJFdmVudFNvdXJjZXMucHVzaCh0YWJsZSk7XG5cdFx0fVxuXHR9XG5cdC8qKlxuXHQgKiBSZWdpc3RlcnMgYW4gTURDQ2hhcnQgZm9yIHdhdGNoaW5nIHRoZSBkYXRhIGV2ZW50cyBvbiBpdHMgaW5uZXIgZGF0YSBiaW5kaW5nIChkYXRhUmVxdWVzdGVkIGFuZCBkYXRhUmVjZWl2ZWQpLlxuXHQgKlxuXHQgKiBAcGFyYW0gY2hhcnQgVGhlIGNoYXJ0XG5cdCAqIEBwYXJhbSB0cmlnZ2VyZWRCeVNlYXJjaCBUcnVlIGlmIHRoaXMgcmVnaXN0cmF0aW9uIGlzIHRyaWdnZXJlZCBieSBhIGZpbHRlckJhciBzZWFyY2hcblx0ICovXG5cdHByb3RlY3RlZCByZWdpc3RlckNoYXJ0KGNoYXJ0OiBDaGFydCwgdHJpZ2dlcmVkQnlTZWFyY2ggPSBmYWxzZSkge1xuXHRcdGlmICh0aGlzLl9hTURDQ2hhcnRzLmluZGV4T2YoY2hhcnQpIDwgMCkge1xuXHRcdFx0dGhpcy5fYU1EQ0NoYXJ0cy5wdXNoKGNoYXJ0KTtcblx0XHR9XG5cdFx0Y29uc3Qgb0lubmVyQ2hhcnQgPSAoY2hhcnQgYXMgYW55KS5nZXRDb250cm9sRGVsZWdhdGUoKS5nZXRJbm5lckNoYXJ0KGNoYXJ0KTtcblx0XHRjb25zdCBiaW5kaW5nID0gb0lubmVyQ2hhcnQ/LmdldEJpbmRpbmcoXCJkYXRhXCIpO1xuXHRcdGlmIChiaW5kaW5nKSB7XG5cdFx0XHR0aGlzLnJlZ2lzdGVyKG51bGwsIHsgY2hhcnQsIHRyaWdnZXJlZEJ5U2VhcmNoIH0pO1xuXHRcdH1cblx0XHRpZiAodGhpcy5fYU90aGVyRXZlbnRTb3VyY2VzLmluZGV4T2YoY2hhcnQpID09PSAtMSkge1xuXHRcdFx0Y2hhcnQuYXR0YWNoRXZlbnQoXCJiaW5kaW5nVXBkYXRlZFwiLCB7IGNoYXJ0LCB0cmlnZ2VyZWRCeVNlYXJjaCB9LCB0aGlzLnJlZ2lzdGVyLCB0aGlzKTtcblx0XHRcdHRoaXMuX2FPdGhlckV2ZW50U291cmNlcy5wdXNoKGNoYXJ0KTtcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqIFJlZ2lzdGVycyBhbiBNRENUYWJsZSBvciBNRENDaGFydCBmb3Igd2F0Y2hpbmcgdGhlIGRhdGEgZXZlbnRzIG9uIGl0cyBpbm5lciBkYXRhIGJpbmRpbmcgKGRhdGFSZXF1ZXN0ZWQgYW5kIGRhdGFSZWNlaXZlZCkuXG5cdCAqXG5cdCAqIEBwYXJhbSBlbGVtZW50ICBUaGUgdGFibGUgb3IgY2hhcnRcblx0ICovXG5cdHB1YmxpYyBhc3luYyByZWdpc3RlclRhYmxlT3JDaGFydChlbGVtZW50OiBUYWJsZSB8IENoYXJ0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKCFlbGVtZW50LmlzQTxUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpICYmICFlbGVtZW50LmlzQTxDaGFydD4oXCJzYXAudWkubWRjLkNoYXJ0XCIpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCBlbGVtZW50LmluaXRpYWxpemVkKCk7IC8vIGFjY2VzcyBiaW5kaW5nIG9ubHkgYWZ0ZXIgdGFibGUvY2hhcnQgaXMgYm91bmRcblx0XHRcdGlmIChlbGVtZW50LmlzQTxUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdHRoaXMucmVnaXN0ZXJUYWJsZShlbGVtZW50KTtcblx0XHRcdFx0Ly9JZiB0aGUgYXV0b0JpbmRPbkluaXQgaXMgZW5hYmxlZCwgdGhlIHRhYmxlIHdpbGwgYmUgcmVib3VuZFxuXHRcdFx0XHQvL1RoZW4gd2UgbmVlZCB0byB3YWl0IGZvciB0aGlzIHJlYmluZCB0byBvY2N1ciB0byBlbnN1cmUgdGhlIHBhZ2VSZWFkeSB3aWxsIGFsc28gd2FpdCBmb3IgdGhlIGRhdGEgdG8gYmUgcmVjZWl2ZWRcblx0XHRcdFx0aWYgKGVsZW1lbnQuZ2V0QXV0b0JpbmRPbkluaXQoKSAmJiBlbGVtZW50LmdldERvbVJlZigpKSB7XG5cdFx0XHRcdFx0YXdhaXQgVXRpbHMud2hlbkJvdW5kKGVsZW1lbnQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnJlZ2lzdGVyQ2hhcnQoZWxlbWVudCk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAob0Vycm9yOiBhbnkpIHtcblx0XHRcdExvZy5lcnJvcihcIlBhZ2VSZWFkeSAtIENhbm5vdCByZWdpc3RlciBhIHRhYmxlIG9yIGEgY2hhcnRcIiwgb0Vycm9yKTtcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqIFJlZ2lzdGVycyBhbiBNRENGaWx0ZXJCYXIgZm9yIHdhdGNoaW5nIGl0cyBzZWFyY2ggZXZlbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSBmaWx0ZXJCYXIgVGhlIGZpbHRlciBiYXJcblx0ICovXG5cdHB1YmxpYyByZWdpc3RlckZpbHRlckJhcihmaWx0ZXJCYXI6IEZpbHRlckJhcikge1xuXHRcdGZpbHRlckJhci5hdHRhY2hFdmVudChcInNlYXJjaFwiLCB0aGlzLm9uU2VhcmNoLCB0aGlzKTtcblx0XHR0aGlzLl9hT3RoZXJFdmVudFNvdXJjZXMucHVzaChmaWx0ZXJCYXIpO1xuXHR9XG59XG5leHBvcnQgZGVmYXVsdCBEYXRhUXVlcnlXYXRjaGVyO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7O0VBa2pCTyxnQkFBZ0JBLElBQUksRUFBRUMsT0FBTyxFQUFFO0lBQ3JDLElBQUk7TUFDSCxJQUFJQyxNQUFNLEdBQUdGLElBQUksRUFBRTtJQUNwQixDQUFDLENBQUMsT0FBTUcsQ0FBQyxFQUFFO01BQ1YsT0FBT0YsT0FBTyxD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
@@ -247,20 +247,20 @@ class DataQueryWatcher {
247
247
  * @param element The table or chart
248
248
  */
249
249
  public async registerTableOrChart(element: Table | Chart): Promise<void> {
250
- if (!element.isA("sap.ui.mdc.Table") && !element.isA("sap.ui.mdc.Chart")) {
250
+ if (!element.isA<Table>("sap.ui.mdc.Table") && !element.isA<Chart>("sap.ui.mdc.Chart")) {
251
251
  return;
252
252
  }
253
253
  try {
254
254
  await element.initialized(); // access binding only after table/chart is bound
255
- if (element.isA("sap.ui.mdc.Table")) {
256
- this.registerTable(element as Table);
255
+ if (element.isA<Table>("sap.ui.mdc.Table")) {
256
+ this.registerTable(element);
257
257
  //If the autoBindOnInit is enabled, the table will be rebound
258
258
  //Then we need to wait for this rebind to occur to ensure the pageReady will also wait for the data to be received
259
259
  if (element.getAutoBindOnInit() && element.getDomRef()) {
260
- await Utils.whenBound(element as Table);
260
+ await Utils.whenBound(element);
261
261
  }
262
262
  } else {
263
- this.registerChart(element as Chart);
263
+ this.registerChart(element);
264
264
  }
265
265
  } catch (oError: any) {
266
266
  Log.error("PageReady - Cannot register a table or a chart", oError);