@sapui5/sap.fe.core 1.102.2 → 1.104.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (324) hide show
  1. package/package.json +6 -6
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AppComponent.js +73 -30
  4. package/src/sap/fe/core/AppComponent.ts +65 -43
  5. package/src/sap/fe/core/AppStateHandler.js +82 -70
  6. package/src/sap/fe/core/AppStateHandler.ts +32 -37
  7. package/src/sap/fe/core/BaseController.js +11 -9
  8. package/src/sap/fe/core/BaseController.ts +15 -13
  9. package/src/sap/fe/core/CommonUtils.js +227 -126
  10. package/src/sap/fe/core/CommonUtils.ts +240 -163
  11. package/src/sap/fe/core/ExtensionAPI.js +24 -27
  12. package/src/sap/fe/core/ExtensionAPI.ts +36 -38
  13. package/src/sap/fe/core/PageController.js +4 -4
  14. package/src/sap/fe/core/PageController.ts +4 -5
  15. package/src/sap/fe/core/TemplateComponent.js +1 -1
  16. package/src/sap/fe/core/TemplateComponent.ts +6 -6
  17. package/src/sap/fe/core/TemplateModel.js +1 -1
  18. package/src/sap/fe/core/TemplateModel.ts +1 -1
  19. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
  20. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
  21. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +181 -43
  22. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +150 -24
  23. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +585 -210
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +246 -96
  25. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +30 -30
  26. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +32 -29
  27. package/src/sap/fe/core/controllerextensions/EditFlow.js +379 -330
  28. package/src/sap/fe/core/controllerextensions/EditFlow.ts +253 -245
  29. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
  30. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
  31. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +101 -74
  32. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +69 -79
  33. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +67 -67
  34. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +76 -76
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +85 -77
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +103 -99
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
  39. package/src/sap/fe/core/controllerextensions/MassEdit.js +9 -9
  40. package/src/sap/fe/core/controllerextensions/MassEdit.ts +20 -27
  41. package/src/sap/fe/core/controllerextensions/MessageHandler.js +20 -12
  42. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -14
  43. package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
  44. package/src/sap/fe/core/controllerextensions/PageReady.ts +98 -34
  45. package/src/sap/fe/core/controllerextensions/Paginator.js +21 -22
  46. package/src/sap/fe/core/controllerextensions/Paginator.ts +24 -25
  47. package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
  48. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  49. package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
  50. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  51. package/src/sap/fe/core/controllerextensions/Share.js +170 -139
  52. package/src/sap/fe/core/controllerextensions/Share.ts +117 -118
  53. package/src/sap/fe/core/controllerextensions/SideEffects.js +46 -50
  54. package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
  55. package/src/sap/fe/core/controllerextensions/ViewState.js +200 -131
  56. package/src/sap/fe/core/controllerextensions/ViewState.ts +141 -148
  57. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
  58. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
  59. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +11 -10
  60. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +17 -20
  61. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
  62. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +4 -4
  63. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +7 -9
  64. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +18 -19
  65. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +190 -141
  66. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +258 -210
  67. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +183 -125
  68. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +213 -156
  69. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +164 -140
  70. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +180 -150
  71. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +24 -26
  72. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +35 -33
  73. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +71 -41
  74. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +102 -82
  75. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +61 -71
  76. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +56 -64
  77. package/src/sap/fe/core/controls/Any.js +9 -5
  78. package/src/sap/fe/core/controls/Any.ts +10 -4
  79. package/src/sap/fe/core/controls/CommandExecution.js +11 -25
  80. package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
  81. package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
  82. package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
  83. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +22 -22
  84. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
  85. package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -2
  86. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
  87. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
  88. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
  89. package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
  90. package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
  91. package/src/sap/fe/core/controls/FileWrapper.js +7 -2
  92. package/src/sap/fe/core/controls/FileWrapper.ts +15 -11
  93. package/src/sap/fe/core/controls/FilterBar.js +6 -2
  94. package/src/sap/fe/core/controls/FilterBar.ts +13 -9
  95. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
  96. package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
  97. package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
  98. package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
  99. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
  100. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
  101. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
  102. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
  103. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
  104. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +49 -49
  105. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +54 -54
  106. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
  107. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
  108. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
  109. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
  110. package/src/sap/fe/core/converters/ConverterContext.js +26 -33
  111. package/src/sap/fe/core/converters/ConverterContext.ts +52 -61
  112. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  113. package/src/sap/fe/core/converters/ManifestSettings.ts +17 -15
  114. package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
  115. package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
  116. package/src/sap/fe/core/converters/MetaModelConverter.js +64 -35
  117. package/src/sap/fe/core/converters/MetaModelConverter.ts +154 -129
  118. package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
  119. package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
  120. package/src/sap/fe/core/converters/annotations/DataField.js +58 -35
  121. package/src/sap/fe/core/converters/annotations/DataField.ts +102 -76
  122. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
  123. package/src/sap/fe/core/converters/controls/Common/Action.js +50 -41
  124. package/src/sap/fe/core/converters/controls/Common/Action.ts +56 -46
  125. package/src/sap/fe/core/converters/controls/Common/Chart.js +14 -14
  126. package/src/sap/fe/core/converters/controls/Common/Chart.ts +26 -33
  127. package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
  128. package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
  129. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +30 -28
  130. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +60 -61
  131. package/src/sap/fe/core/converters/controls/Common/Form.js +27 -28
  132. package/src/sap/fe/core/converters/controls/Common/Form.ts +44 -57
  133. package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
  134. package/src/sap/fe/core/converters/controls/Common/KPI.ts +49 -52
  135. package/src/sap/fe/core/converters/controls/Common/Table.js +181 -197
  136. package/src/sap/fe/core/converters/controls/Common/Table.ts +251 -280
  137. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
  138. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +144 -141
  139. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +45 -41
  140. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +65 -59
  141. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
  142. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
  143. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
  144. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
  145. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
  146. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
  147. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +77 -73
  148. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +101 -97
  149. package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
  150. package/src/sap/fe/core/converters/helpers/Aggregation.ts +12 -15
  151. package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
  152. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
  153. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
  154. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
  155. package/src/sap/fe/core/converters/helpers/ID.js +48 -46
  156. package/src/sap/fe/core/converters/helpers/ID.ts +26 -25
  157. package/src/sap/fe/core/converters/helpers/Key.js +7 -7
  158. package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
  159. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  160. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -5
  161. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
  162. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
  163. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
  164. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
  165. package/src/sap/fe/core/converters/templates/ListReportConverter.js +55 -42
  166. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +81 -66
  167. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +39 -38
  168. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +52 -61
  169. package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
  170. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
  171. package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
  172. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
  173. package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
  174. package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
  175. package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
  176. package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
  177. package/src/sap/fe/core/formatters/StandardFormatter.js +96 -0
  178. package/src/sap/fe/core/formatters/StandardFormatter.ts +70 -0
  179. package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
  180. package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
  181. package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
  182. package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
  183. package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
  184. package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
  185. package/src/sap/fe/core/helpers/BindingToolkit.js +1832 -0
  186. package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +396 -269
  187. package/src/sap/fe/core/helpers/ClassSupport.js +49 -12
  188. package/src/sap/fe/core/helpers/ClassSupport.ts +37 -10
  189. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
  190. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
  191. package/src/sap/fe/core/helpers/EditState.js +1 -6
  192. package/src/sap/fe/core/helpers/EditState.ts +5 -10
  193. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
  194. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
  195. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  196. package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
  197. package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
  198. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
  199. package/src/sap/fe/core/helpers/MassEditHelper.js +306 -280
  200. package/src/sap/fe/core/helpers/MassEditHelper.ts +380 -360
  201. package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
  202. package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
  203. package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
  204. package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
  205. package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
  206. package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
  207. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  208. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
  209. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
  210. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
  211. package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
  212. package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
  213. package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
  214. package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
  215. package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
  216. package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
  217. package/src/sap/fe/core/jsx-runtime/jsx-control.js +99 -0
  218. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +82 -0
  219. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
  220. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
  221. package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
  222. package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
  223. package/src/sap/fe/core/library.js +42 -3
  224. package/src/sap/fe/core/library.ts +38 -0
  225. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
  226. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
  227. package/src/sap/fe/core/messagebundle.properties +39 -63
  228. package/src/sap/fe/core/messagebundle_ar.properties +25 -39
  229. package/src/sap/fe/core/messagebundle_bg.properties +25 -39
  230. package/src/sap/fe/core/messagebundle_ca.properties +25 -39
  231. package/src/sap/fe/core/messagebundle_cs.properties +25 -39
  232. package/src/sap/fe/core/messagebundle_cy.properties +25 -39
  233. package/src/sap/fe/core/messagebundle_da.properties +25 -39
  234. package/src/sap/fe/core/messagebundle_de.properties +25 -39
  235. package/src/sap/fe/core/messagebundle_el.properties +26 -40
  236. package/src/sap/fe/core/messagebundle_en.properties +25 -39
  237. package/src/sap/fe/core/messagebundle_en_GB.properties +25 -39
  238. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +25 -39
  239. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +25 -39
  240. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +26 -18
  241. package/src/sap/fe/core/messagebundle_es.properties +27 -41
  242. package/src/sap/fe/core/messagebundle_es_MX.properties +25 -39
  243. package/src/sap/fe/core/messagebundle_et.properties +25 -39
  244. package/src/sap/fe/core/messagebundle_fi.properties +25 -39
  245. package/src/sap/fe/core/messagebundle_fr.properties +26 -40
  246. package/src/sap/fe/core/messagebundle_fr_CA.properties +25 -39
  247. package/src/sap/fe/core/messagebundle_hi.properties +25 -39
  248. package/src/sap/fe/core/messagebundle_hr.properties +25 -39
  249. package/src/sap/fe/core/messagebundle_hu.properties +25 -39
  250. package/src/sap/fe/core/messagebundle_id.properties +25 -39
  251. package/src/sap/fe/core/messagebundle_it.properties +41 -55
  252. package/src/sap/fe/core/messagebundle_iw.properties +25 -39
  253. package/src/sap/fe/core/messagebundle_ja.properties +25 -39
  254. package/src/sap/fe/core/messagebundle_kk.properties +25 -39
  255. package/src/sap/fe/core/messagebundle_ko.properties +30 -44
  256. package/src/sap/fe/core/messagebundle_lt.properties +25 -39
  257. package/src/sap/fe/core/messagebundle_lv.properties +25 -39
  258. package/src/sap/fe/core/messagebundle_ms.properties +25 -39
  259. package/src/sap/fe/core/messagebundle_nl.properties +27 -41
  260. package/src/sap/fe/core/messagebundle_no.properties +25 -39
  261. package/src/sap/fe/core/messagebundle_pl.properties +26 -40
  262. package/src/sap/fe/core/messagebundle_pt.properties +26 -40
  263. package/src/sap/fe/core/messagebundle_pt_PT.properties +25 -39
  264. package/src/sap/fe/core/messagebundle_ro.properties +25 -39
  265. package/src/sap/fe/core/messagebundle_ru.properties +25 -39
  266. package/src/sap/fe/core/messagebundle_sh.properties +25 -39
  267. package/src/sap/fe/core/messagebundle_sk.properties +25 -39
  268. package/src/sap/fe/core/messagebundle_sl.properties +25 -39
  269. package/src/sap/fe/core/messagebundle_sv.properties +25 -39
  270. package/src/sap/fe/core/messagebundle_th.properties +25 -39
  271. package/src/sap/fe/core/messagebundle_tr.properties +25 -39
  272. package/src/sap/fe/core/messagebundle_uk.properties +25 -39
  273. package/src/sap/fe/core/messagebundle_vi.properties +25 -39
  274. package/src/sap/fe/core/messagebundle_zh_CN.properties +25 -39
  275. package/src/sap/fe/core/messagebundle_zh_TW.properties +25 -39
  276. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
  277. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
  278. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +97 -69
  279. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +68 -69
  280. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
  281. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
  282. package/src/sap/fe/core/services/NavigationServiceFactory.js +61 -49
  283. package/src/sap/fe/core/services/NavigationServiceFactory.ts +63 -52
  284. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
  285. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
  286. package/src/sap/fe/core/services/RoutingServiceFactory.js +55 -55
  287. package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
  288. package/src/sap/fe/core/services/ShellServicesFactory.js +92 -76
  289. package/src/sap/fe/core/services/ShellServicesFactory.ts +95 -82
  290. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
  291. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
  292. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +224 -198
  293. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +138 -139
  294. package/src/sap/fe/core/support/CommonHelper.js +3 -2
  295. package/src/sap/fe/core/support/CommonHelper.ts +9 -13
  296. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  297. package/src/sap/fe/core/support/Diagnostics.ts +5 -5
  298. package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
  299. package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
  300. package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
  301. package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
  302. package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
  303. package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
  304. package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
  305. package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
  306. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  307. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
  308. package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
  309. package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
  310. package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
  311. package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
  312. package/src/sap/fe/core/templating/FilterHelper.js +16 -15
  313. package/src/sap/fe/core/templating/FilterHelper.ts +18 -18
  314. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  315. package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
  316. package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
  317. package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
  318. package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
  319. package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
  320. package/src/sap/fe/core/templating/UIFormatters.js +152 -95
  321. package/src/sap/fe/core/templating/UIFormatters.ts +202 -128
  322. package/src/sap/fe/core/type/Email.js +2 -2
  323. package/src/sap/fe/core/type/Email.ts +2 -2
  324. package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
@@ -102,42 +102,42 @@ sap.ui.define(["sap/ui/base/ManagedObject", "sap/ui/core/util/XMLPreprocessor"],
102
102
  return oContext.path || oContext.parts;
103
103
  }).forEach(function (oContext) {
104
104
  var aParts = oContext.parts || [oContext];
105
- aParts.filter(function (oContext) {
106
- return oContext.path;
107
- }).forEach(function (oContext) {
108
- var oModel = oContexts[oContext.model] = oContexts[oContext.model] || {};
109
- var sSimplePath = oContext.path.indexOf(">") < 0 ? (oContext.model && oContext.model + ">") + oContext.path : oContext.path;
105
+ aParts.filter(function (oPartContext) {
106
+ return oPartContext.path;
107
+ }).forEach(function (oPartContext) {
108
+ var oModel = oContexts[oPartContext.model] = oContexts[oPartContext.model] || {};
109
+ var sSimplePath = oPartContext.path.indexOf(">") < 0 ? (oPartContext.model && "".concat(oPartContext.model, ">")) + oPartContext.path : oPartContext.path;
110
110
  var oRealContext;
111
- var aParts;
111
+ var aInnerParts;
112
112
 
113
- if (typeof oContext.model === "undefined" && sSimplePath.indexOf(">") > -1) {
114
- aParts = sSimplePath.split(">");
115
- oContext.model = aParts[0];
116
- oContext.path = aParts[1];
113
+ if (typeof oPartContext.model === "undefined" && sSimplePath.indexOf(">") > -1) {
114
+ aInnerParts = sSimplePath.split(">");
115
+ oPartContext.model = aInnerParts[0];
116
+ oPartContext.path = aInnerParts[1];
117
117
  }
118
118
 
119
119
  try {
120
120
  oRealContext = oVisitor.getContext(sSimplePath);
121
- aPromises.push(oVisitor.getResult("{" + sSimplePath + "}", oNode).then(function (oResult) {
121
+ aPromises.push(oVisitor.getResult("{".concat(sSimplePath, "}"), oNode).then(function (oResult) {
122
122
  if (oRealContext.getModel().getMetadata().getName() === "sap.ui.model.json.JSONModel") {
123
123
  if (!oResult.oModel) {
124
- oModel[oContext.path] = oResult; //oRealContext.getObject(oContext.path);
124
+ oModel[oPartContext.path] = oResult; //oRealContext.getObject(oContext.path);
125
125
  } else {
126
- oModel[oContext.path] = "Context from " + oResult.getPath();
126
+ oModel[oPartContext.path] = "Context from ".concat(oResult.getPath());
127
127
  }
128
128
  } else {
129
- oModel[oContext.path] = {
129
+ oModel[oPartContext.path] = {
130
130
  path: oRealContext.getPath(),
131
131
  data: typeof oResult === "object" ? "[ctrl/cmd-click] on path to see data" : oResult
132
132
  };
133
133
  }
134
134
  }).catch(function () {
135
- oModel[oContext.path] = {
135
+ oModel[oPartContext.path] = {
136
136
  bindingFor: "Runtime"
137
137
  };
138
138
  }));
139
139
  } catch (exc) {
140
- oModel[oContext.path] = {
140
+ oModel[oPartContext.path] = {
141
141
  bindingFor: "Runtime"
142
142
  };
143
143
  }
@@ -194,7 +194,7 @@ sap.ui.define(["sap/ui/base/ManagedObject", "sap/ui/core/util/XMLPreprocessor"],
194
194
  var sControlName = oNode.nodeName.split(":")[1] || oNode.nodeName,
195
195
  bIsControl = /^[A-Z]/.test(sControlName),
196
196
  oTraceMetadataContext = {
197
- control: oNode.namespaceURI + "." + (oNode.nodeName.split(":")[1] || oNode.nodeName)
197
+ control: "".concat(oNode.namespaceURI, ".").concat(oNode.nodeName.split(":")[1] || oNode.nodeName)
198
198
  };
199
199
 
200
200
  if (bIsControl) {
@@ -215,9 +215,9 @@ sap.ui.define(["sap/ui/base/ManagedObject", "sap/ui/core/util/XMLPreprocessor"],
215
215
  aTraceInfo.push(oTraceMetadataContext);
216
216
  }
217
217
 
218
- return oVisitor.visitAttributes(oNode).then(function () {
219
- return oVisitor.visitChildNodes(oNode);
220
- });
218
+ return oVisitor.visitAttributes(oNode);
219
+ }).then(function () {
220
+ return oVisitor.visitChildNodes(oNode);
221
221
  }).catch(function (exc) {
222
222
  oTraceMetadataContext.error = {
223
223
  exception: exc,
@@ -245,12 +245,12 @@ sap.ui.define(["sap/ui/base/ManagedObject", "sap/ui/core/util/XMLPreprocessor"],
245
245
  * Adds information about the processing of one macro to the collection.
246
246
  *
247
247
  * @name sap.fe.macros.TraceInfo.traceMacroCalls
248
- * @param {string} sName Macro class name
249
- * @param {object} oMetadata Definition from (macro).metadata.js
250
- * @param {object} mContexts Available named contexts
251
- * @param {XMLNode} oNode
252
- * @param {object} oVisitor
253
- * @returns {object}
248
+ * @param sName Macro class name
249
+ * @param oMetadata Definition from (macro).metadata.js
250
+ * @param mContexts Available named contexts
251
+ * @param oNode
252
+ * @param oVisitor
253
+ * @returns The traced metadata context
254
254
  * @private
255
255
  * @ui5-restricted
256
256
  * @static
@@ -381,8 +381,8 @@ sap.ui.define(["sap/ui/base/ManagedObject", "sap/ui/core/util/XMLPreprocessor"],
381
381
  *
382
382
  * @function
383
383
  * @name sap.fe.macros.TraceInfo.getTraceInfo
384
- * @param {number} id TraceInfo id
385
- * @returns {object|Array} Object / Array for TraceInfo
384
+ * @param id TraceInfo id
385
+ * @returns Object / Array for TraceInfo
386
386
  * @private
387
387
  * @static
388
388
  */
@@ -403,7 +403,7 @@ sap.ui.define(["sap/ui/base/ManagedObject", "sap/ui/core/util/XMLPreprocessor"],
403
403
  *
404
404
  * @function
405
405
  * @name sap.fe.macros.TraceInfo.isTraceInfoActive
406
- * @returns {boolean} `true` when active
406
+ * @returns `true` when active
407
407
  * @private
408
408
  * @static
409
409
  */
@@ -433,4 +433,4 @@ sap.ui.define(["sap/ui/base/ManagedObject", "sap/ui/core/util/XMLPreprocessor"],
433
433
  getTraceInfo: getTraceInfo
434
434
  };
435
435
  }, true);
436
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyYWNlSW5mby50cyJdLCJuYW1lcyI6WyJhVHJhY2VJbmZvIiwidHJhY2VOYW1lc3BhY2UiLCJ4bWxucyIsInRyYWNlSXNPbiIsImxvY2F0aW9uIiwic2VhcmNoIiwiaW5kZXhPZiIsImFOYW1lc3BhY2VzIiwib0NhbGxiYWNrcyIsImZuQ2xvbmUiLCJvT2JqZWN0IiwiSlNPTiIsInBhcnNlIiwic3RyaW5naWZ5IiwiY29sbGVjdENvbnRleHRJbmZvIiwic1ZhbHVlIiwib0NvbnRleHRzIiwib1Zpc2l0b3IiLCJvTm9kZSIsImFDb250ZXh0cyIsImFQcm9taXNlcyIsIk1hbmFnZWRPYmplY3QiLCJiaW5kaW5nUGFyc2VyIiwidW5kZWZpbmVkIiwiZSIsIkFycmF5IiwiaXNBcnJheSIsImZpbHRlciIsIm9Db250ZXh0IiwicGF0aCIsInBhcnRzIiwiZm9yRWFjaCIsImFQYXJ0cyIsIm9Nb2RlbCIsIm1vZGVsIiwic1NpbXBsZVBhdGgiLCJvUmVhbENvbnRleHQiLCJzcGxpdCIsImdldENvbnRleHQiLCJwdXNoIiwiZ2V0UmVzdWx0IiwidGhlbiIsIm9SZXN1bHQiLCJnZXRNb2RlbCIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsImdldFBhdGgiLCJkYXRhIiwiY2F0Y2giLCJiaW5kaW5nRm9yIiwiZXhjIiwiUHJvbWlzZSIsImFsbCIsImZpbGxBdHRyaWJ1dGVzIiwib1Jlc3VsdHMiLCJvQXR0cmlidXRlcyIsInNOYW1lIiwicmVzdWx0Iiwib3JpZ2luYWxWYWx1ZSIsInJlc29sdmVkVmFsdWUiLCJlcnJvciIsInN0YWNrIiwidG9TdHJpbmciLCJjb2xsZWN0SW5mbyIsImkiLCJhdHRyaWJ1dGVzIiwibGVuZ3RoIiwib0F0dHJpYnV0ZSIsIm5vZGVOYW1lIiwiZ2V0QXR0cmlidXRlIiwiaW5jbHVkZXMiLCJwcm9wZXJ0aWVzIiwiY29udGV4dHMiLCJyZXNvbHZlIiwic0NvbnRyb2xOYW1lIiwiYklzQ29udHJvbCIsInRlc3QiLCJvVHJhY2VNZXRhZGF0YUNvbnRleHQiLCJjb250cm9sIiwibmFtZXNwYWNlVVJJIiwib3duZXJEb2N1bWVudCIsImZpcnN0Q2hpbGQiLCJzZXRBdHRyaWJ1dGVOUyIsImJSZWxldmFudCIsIk9iamVjdCIsImtleXMiLCJhc3NpZ24iLCJ2aWV3SW5mbyIsImdldFZpZXdJbmZvIiwibWFjcm9JbmZvIiwiZ2V0U2V0dGluZ3MiLCJ0cmFjZUlEIiwidmlzaXRBdHRyaWJ1dGVzIiwidmlzaXRDaGlsZE5vZGVzIiwiZXhjZXB0aW9uIiwibm9kZSIsIlhNTFNlcmlhbGl6ZXIiLCJzZXJpYWxpemVUb1N0cmluZyIsIm5hbWVzcGFjZSIsIlhNTFByZXByb2Nlc3NvciIsInBsdWdJbiIsImJpbmQiLCJ0cmFjZU1hY3JvQ2FsbHMiLCJvTWV0YWRhdGEiLCJtQ29udGV4dHMiLCJhTWV0YWRhdGFDb250ZXh0S2V5cyIsIm1ldGFkYXRhQ29udGV4dHMiLCJhUHJvcGVydGllcyIsIm1hY3JvIiwibWV0YURhdGFDb250ZXh0cyIsIm5hbWUiLCJzS2V5Iiwib01ldGFEYXRhQ29udGV4dCIsIm9Qcm9wZXJ0eSIsInRoaXMiLCJnZXRPYmplY3QiLCJwYXJlbnRNYWNyb0lEIiwibWFjcm9JRCIsImdldFRyYWNlSW5mbyIsImlkIiwiYUVycm9ycyIsInRyYWNlSW5mbyIsImlzVHJhY2VJbmZvQWN0aXZlIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7O0FBQUE7QUFDQSxNQUFNQSxVQUFpQixHQUFHO0FBQ3pCO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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O0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxXQUFTMEgsaUJBQVQsR0FBNkI7QUFDNUIsV0FBT3ZILFNBQVA7QUFDQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7U0FDZTtBQUNkdUgsSUFBQUEsaUJBQWlCLEVBQUVBLGlCQURMO0FBRWRwQixJQUFBQSxlQUFlLEVBQUVBLGVBRkg7QUFHZGdCLElBQUFBLFlBQVksRUFBRUE7QUFIQSxHIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbi8vVHJhY2UgaW5mb3JtYXRpb25cbmNvbnN0IGFUcmFjZUluZm86IGFueVtdID0gW1xuXHQvKiBTdHJ1Y3R1cmUgZm9yIGEgbWFjcm9cblx0XHRcdHtcblx0XHRcdFx0bWFjcm86ICcnLCAvL25hbWUgb2YgbWFjcm9cblx0XHRcdFx0bWV0YURhdGFDb250ZXh0czogWyAvL1Byb3BlcnRpZXMgb2YgdHlwZSBzYXAudWkubW9kZWwuQ29udGV4dFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdG5hbWU6ICcnLCAvL2NvbnRleHQgcHJvcGVydHkgbmFtZSAvIGtleVxuXHRcdFx0XHRcdFx0cGF0aDogJycsIC8vZnJvbSBvQ29udGV4dC5nZXRQYXRoKClcblx0XHRcdFx0XHR9XG5cdFx0XHRcdF0sXG5cdFx0XHRcdHByb3BlcnRpZXM6IHsgLy8gT3RoZXIgcHJvcGVydGllcyB3aGljaCBiZWNvbWUgcGFydCBvZiB7dGhpcz59XG5cdFx0XHRcdFx0cHJvcGVydHkxOiB2YWx1ZSxcblx0XHRcdFx0XHRwcm9wZXJ0eTI6IHZhbHVlXG5cdFx0XHRcdH1cblx0XHRcdFx0dmlld0luZm86IHtcblx0XHRcdFx0XHR2aWV3SW5mbzoge30gLy8gQXMgc3BlY2lmaWVkIGluIHZpZXcgb3IgZnJhZ2VtZW50IGNyZWF0aW9uXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRyYWNlSUQ6IHRoaXMuaW5kZXgsIC8vSUQgZm9yIHRoaXMgdHJhY2UgaW5mb3JtYXRpb24sXG5cdFx0XHRcdG1hY3JvSW5mbzoge1xuXHRcdFx0XHRcdG1hY3JvSUQ6IGluZGV4LCAvLyB0cmFjZUlEIG9mIHRoaXMgbWFjcm8gKHJlZHVuZGFudCBmb3IgbWFjcm9zKVxuXHRcdFx0XHRcdHBhcmVudE1hY3JvSUQsIGluZGV4IC8vIHRyYWNlSUQgb2YgdGhlIHBhcmVudCBtYWNybyAoaWYgaXQgaGFzIGEgcGFyZW50KVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBTdHJ1Y3R1cmUgZm9yIGEgY29udHJvbFxuXHRcdFx0e1xuXHRcdFx0XHRjb250cm9sOiAnJywgLy9jb250cm9sIGNsYXNzXG5cdFx0XHRcdHByb3BlcnRpZXM6IHsgLy8gT3RoZXIgcHJvcGVydGllcyB3aGljaCBiZWNvbWUgcGFydCBvZiB7dGhpcz59XG5cdFx0XHRcdFx0cHJvcGVydHkxOiB7XG5cdFx0XHRcdFx0XHRvcmlnaW5hbFZhbHVlOiAnJywgLy9WYWx1ZSBiZWZvcmUgdGVtcGxhdGluZ1xuXHRcdFx0XHRcdFx0cmVzb2x2ZWRWYWx1ZTogJycgLy9WYWx1ZSBhZnRlciB0ZW1wbGF0aW5nXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRleHRzOiB7IC8vTW9kZWxzIGFuZCBDb250ZXh0cyB1c2VkIGR1cmluZyB0ZW1wbGF0aW5nXG5cdFx0XHRcdFx0Ly8gTW9kZWwgb3IgY29udGV4dCBuYW1lIHVzZWQgZm9yIHRoaXMgY29udHJvbFxuXHRcdFx0XHRcdG1vZGVsTmFtZTE6IHsgLy8gRm9yIE9EYXRhTWV0YU1vZGVsXG5cdFx0XHRcdFx0XHRwYXRoMToge1xuXHRcdFx0XHRcdFx0XHRwYXRoOiAnJywgLy9hYnNvbHV0IHBhdGggd2l0aGluIG1ldGFtb2RlbFxuXHRcdFx0XHRcdFx0XHRkYXRhOiAnJywgLy9kYXRhIG9mIHBhdGggdW5sZXNzIHR5cGUgT2JqZWN0XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bW9kZWxOYW1lMjoge1xuXHRcdFx0XHRcdFx0Ly8gZm9yIG90aGVyIG1vZGVsIHR5cGVzXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5MTogdmFsdWUsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5MjogdmFsdWVcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8vIEluIGNhc2UgYmluZGluZyBjYW5ub3QgYmUgcmVzb2x2ZWQgLT4gbWFyayBhcyBydW50aW1lIGJpbmRpbmdcblx0XHRcdFx0XHRcdC8vIFRoaXMgaXMgbm90IGFsd2F5cyB0cnVlLCBlLmcuIGluIGNhc2UgdGhlIHBhdGggaXMgbWV0YW1vZGVscGF0aFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcImJpbmRpbmdGb3JcIjogXCJSdW50aW1lXCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHZpZXdJbmZvOiB7XG5cdFx0XHRcdFx0dmlld0luZm86IHt9IC8vIEFzIHNwZWNpZmllZCBpbiB2aWV3IG9yIGZyYWdlbWVudCBjcmVhdGlvblxuXHRcdFx0XHR9LFxuXHRcdFx0XHRtYWNyb0luZm86IHtcblx0XHRcdFx0XHRtYWNyb0lEOiBpbmRleCwgLy8gdHJhY2VJRCBvZiB0aGUgbWFjcm8gdGhhdCBjcmVhdGVkIHRoaXMgY29udHJvbFxuXHRcdFx0XHRcdHBhcmVudE1hY3JvSUQsIGluZGV4IC8vIHRyYWNlSUQgb2YgdGhlIG1hY3JvJ3MgcGFyZW50IG1hY3JvXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRyYWNlSUQ6IHRoaXMuaW5kZXggLy9JRCBmb3IgdGhpcyB0cmFjZSBpbmZvcm1hdGlvblxuXHRcdFx0fVxuXHRcdFx0Ki9cbl07XG5jb25zdCB0cmFjZU5hbWVzcGFjZSA9IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC5mZS5pbmZvLzFcIixcblx0eG1sbnMgPSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvXCIsXG5cdC8qKlxuXHQgKiBTd2l0Y2ggaXMgY3VycmVudGx5IGJhc2VkIG9uIHVybCBwYXJhbWV0ZXJcblx0ICovXG5cdHRyYWNlSXNPbiA9IGxvY2F0aW9uLnNlYXJjaC5pbmRleE9mKFwic2FwLXVpLXh4LWZlVHJhY2VJbmZvPXRydWVcIikgPiAtMSxcblx0LyoqXG5cdCAqIFNwZWNpZnkgYWxsIG5hbWVzcGFjZXMgdGhhdCBzaGFsbCBiZSB0cmFjZWQgZHVyaW5nIHRlbXBsYXRpbmdcblx0ICovXG5cdGFOYW1lc3BhY2VzID0gW1xuXHRcdFwic2FwLm1cIixcblx0XHRcInNhcC51eGFwXCIsXG5cdFx0XCJzYXAudWkudW5pZmllZFwiLFxuXHRcdFwic2FwLmZcIixcblx0XHRcInNhcC51aS50YWJsZVwiLFxuXHRcdFwic2FwLnN1aXRlLnVpLm1pY3JvY2hhcnRcIixcblx0XHRcInNhcC51aS5sYXlvdXQuZm9ybVwiLFxuXHRcdFwic2FwLnVpLm1kY1wiLFxuXHRcdFwic2FwLnVpLm1kYy5saW5rXCIsXG5cdFx0XCJzYXAudWkubWRjLmZpZWxkXCIsXG5cdFx0XCJzYXAuZmUuZnBtXCJcblx0XSxcblx0b0NhbGxiYWNrczogYW55ID0ge307XG5cbmZ1bmN0aW9uIGZuQ2xvbmUob09iamVjdDogYW55KSB7XG5cdHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9PYmplY3QpKTtcbn1cbmZ1bmN0aW9uIGNvbGxlY3RDb250ZXh0SW5mbyhzVmFsdWU6IGFueSwgb0NvbnRleHRzOiBhbnksIG9WaXNpdG9yOiBhbnksIG9Ob2RlOiBhbnkpIHtcblx0bGV0IGFDb250ZXh0cztcblx0Y29uc3QgYVByb21pc2VzOiBhbnlbXSA9IFtdO1xuXHR0cnkge1xuXHRcdGFDb250ZXh0cyA9IChNYW5hZ2VkT2JqZWN0IGFzIGFueSkuYmluZGluZ1BhcnNlcihzVmFsdWUsIHVuZGVmaW5lZCwgZmFsc2UsIHRydWUpIHx8IFtdO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0YUNvbnRleHRzID0gW107XG5cdH1cblx0YUNvbnRleHRzID0gQXJyYXkuaXNBcnJheShhQ29udGV4dHMpID8gYUNvbnRleHRzIDogW2FDb250ZXh0c107XG5cdGFDb250ZXh0c1xuXHRcdC5maWx0ZXIoZnVuY3Rpb24gKG9Db250ZXh0OiBhbnkpIHtcblx0XHRcdHJldHVybiBvQ29udGV4dC5wYXRoIHx8IG9Db250ZXh0LnBhcnRzO1xuXHRcdH0pXG5cdFx0LmZvckVhY2goZnVuY3Rpb24gKG9Db250ZXh0OiBhbnkpIHtcblx0XHRcdGNvbnN0IGFQYXJ0cyA9IG9Db250ZXh0LnBhcnRzIHx8IFtvQ29udGV4dF07XG5cdFx0XHRhUGFydHNcblx0XHRcdFx0LmZpbHRlcihmdW5jdGlvbiAob0NvbnRleHQ6IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBvQ29udGV4dC5wYXRoO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuZm9yRWFjaChmdW5jdGlvbiAob0NvbnRleHQ6IGFueSkge1xuXHRcdFx0XHRcdGNvbnN0IG9Nb2RlbCA9IChvQ29udGV4dHNbb0NvbnRleHQubW9kZWxdID0gb0NvbnRleHRzW29Db250ZXh0Lm1vZGVsXSB8fCB7fSk7XG5cdFx0XHRcdFx0Y29uc3Qgc1NpbXBsZVBhdGggPVxuXHRcdFx0XHRcdFx0b0NvbnRleHQucGF0aC5pbmRleE9mKFwiPlwiKSA8IDAgPyAob0NvbnRleHQubW9kZWwgJiYgb0NvbnRleHQubW9kZWwgKyBcIj5cIikgKyBvQ29udGV4dC5wYXRoIDogb0NvbnRleHQucGF0aDtcblx0XHRcdFx0XHRsZXQgb1JlYWxDb250ZXh0OiBhbnk7XG5cdFx0XHRcdFx0bGV0IGFQYXJ0cztcblxuXHRcdFx0XHRcdGlmICh0eXBlb2Ygb0NvbnRleHQubW9kZWwgPT09IFwidW5kZWZpbmVkXCIgJiYgc1NpbXBsZVBhdGguaW5kZXhPZihcIj5cIikgPiAtMSkge1xuXHRcdFx0XHRcdFx0YVBhcnRzID0gc1NpbXBsZVBhdGguc3BsaXQoXCI+XCIpO1xuXHRcdFx0XHRcdFx0b0NvbnRleHQubW9kZWwgPSBhUGFydHNbMF07XG5cdFx0XHRcdFx0XHRvQ29udGV4dC5wYXRoID0gYVBhcnRzWzFdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0b1JlYWxDb250ZXh0ID0gb1Zpc2l0b3IuZ2V0Q29udGV4dChzU2ltcGxlUGF0aCk7XG5cdFx0XHRcdFx0XHRhUHJvbWlzZXMucHVzaChcblx0XHRcdFx0XHRcdFx0b1Zpc2l0b3Jcblx0XHRcdFx0XHRcdFx0XHQuZ2V0UmVzdWx0KFwie1wiICsgc1NpbXBsZVBhdGggKyBcIn1cIiwgb05vZGUpXG5cdFx0XHRcdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9SZXN1bHQ6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9SZWFsQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpID09PSBcInNhcC51aS5tb2RlbC5qc29uLkpTT05Nb2RlbFwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICghb1Jlc3VsdC5vTW9kZWwpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvTW9kZWxbb0NvbnRleHQucGF0aF0gPSBvUmVzdWx0OyAvL29SZWFsQ29udGV4dC5nZXRPYmplY3Qob0NvbnRleHQucGF0aCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b01vZGVsW29Db250ZXh0LnBhdGhdID0gXCJDb250ZXh0IGZyb20gXCIgKyBvUmVzdWx0LmdldFBhdGgoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0b01vZGVsW29Db250ZXh0LnBhdGhdID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhdGg6IG9SZWFsQ29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YTogdHlwZW9mIG9SZXN1bHQgPT09IFwib2JqZWN0XCIgPyBcIltjdHJsL2NtZC1jbGlja10gb24gcGF0aCB0byBzZWUgZGF0YVwiIDogb1Jlc3VsdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9Nb2RlbFtvQ29udGV4dC5wYXRoXSA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YmluZGluZ0ZvcjogXCJSdW50aW1lXCJcblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXhjKSB7XG5cdFx0XHRcdFx0XHRvTW9kZWxbb0NvbnRleHQucGF0aF0gPSB7XG5cdFx0XHRcdFx0XHRcdGJpbmRpbmdGb3I6IFwiUnVudGltZVwiXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0fSk7XG5cdHJldHVybiBQcm9taXNlLmFsbChhUHJvbWlzZXMpO1xufVxuZnVuY3Rpb24gZmlsbEF0dHJpYnV0ZXMob1Jlc3VsdHM6IGFueSwgb0F0dHJpYnV0ZXM6IGFueSwgc05hbWU6IGFueSwgc1ZhbHVlOiBhbnkpIHtcblx0cmV0dXJuIG9SZXN1bHRzXG5cdFx0LnRoZW4oZnVuY3Rpb24gKHJlc3VsdDogYW55KSB7XG5cdFx0XHRvQXR0cmlidXRlc1tzTmFtZV0gPVxuXHRcdFx0XHRzVmFsdWUgIT09IHJlc3VsdFxuXHRcdFx0XHRcdD8ge1xuXHRcdFx0XHRcdFx0XHRvcmlnaW5hbFZhbHVlOiBzVmFsdWUsXG5cdFx0XHRcdFx0XHRcdHJlc29sdmVkVmFsdWU6IHJlc3VsdFxuXHRcdFx0XHRcdCAgfVxuXHRcdFx0XHRcdDogc1ZhbHVlO1xuXHRcdH0pXG5cdFx0LmNhdGNoKGZ1bmN0aW9uIChlOiBhbnkpIHtcblx0XHRcdG9BdHRyaWJ1dGVzW3NOYW1lXSA9IHtcblx0XHRcdFx0b3JpZ2luYWxWYWx1ZTogc1ZhbHVlLFxuXHRcdFx0XHRlcnJvcjogKGUuc3RhY2sgJiYgZS5zdGFjay50b1N0cmluZygpKSB8fCBlXG5cdFx0XHR9O1xuXHRcdH0pO1xufVxuZnVuY3Rpb24gY29sbGVjdEluZm8ob05vZGU6IGFueSwgb1Zpc2l0b3I6IGFueSkge1xuXHRjb25zdCBvQXR0cmlidXRlcyA9IHt9O1xuXHRjb25zdCBhUHJvbWlzZXMgPSBbXTtcblx0Y29uc3Qgb0NvbnRleHRzID0ge307XG5cdGxldCBvUmVzdWx0cztcblx0Zm9yIChsZXQgaSA9IG9Ob2RlLmF0dHJpYnV0ZXMubGVuZ3RoID4+PiAwOyBpLS07ICkge1xuXHRcdGNvbnN0IG9BdHRyaWJ1dGUgPSBvTm9kZS5hdHRyaWJ1dGVzW2ldLFxuXHRcdFx0c05hbWUgPSBvQXR0cmlidXRlLm5vZGVOYW1lLFxuXHRcdFx0c1ZhbHVlID0gb05vZGUuZ2V0QXR0cmlidXRlKHNOYW1lKTtcblx0XHRpZiAoIVtcImNvcmU6cmVxdWlyZVwiXS5pbmNsdWRlcyhzTmFtZSkpIHtcblx0XHRcdGFQcm9taXNlcy5wdXNoKGNvbGxlY3RDb250ZXh0SW5mbyhzVmFsdWUsIG9Db250ZXh0cywgb1Zpc2l0b3IsIG9Ob2RlKSk7XG5cdFx0XHRvUmVzdWx0cyA9IG9WaXNpdG9yLmdldFJlc3VsdChzVmFsdWUsIG9Ob2RlKTtcblx0XHRcdGlmIChvUmVzdWx0cykge1xuXHRcdFx0XHRhUHJvbWlzZXMucHVzaChmaWxsQXR0cmlidXRlcyhvUmVzdWx0cywgb0F0dHJpYnV0ZXMsIHNOYW1lLCBzVmFsdWUpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vV2hhdFxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gUHJvbWlzZS5hbGwoYVByb21pc2VzKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4geyBwcm9wZXJ0aWVzOiBvQXR0cmlidXRlcywgY29udGV4dHM6IG9Db250ZXh0cyB9O1xuXHR9KTtcbn1cbmZ1bmN0aW9uIHJlc29sdmUob05vZGU6IGFueSwgb1Zpc2l0b3I6IGFueSkge1xuXHRjb25zdCBzQ29udHJvbE5hbWUgPSBvTm9kZS5ub2RlTmFtZS5zcGxpdChcIjpcIilbMV0gfHwgb05vZGUubm9kZU5hbWUsXG5cdFx0YklzQ29udHJvbCA9IC9eW0EtWl0vLnRlc3Qoc0NvbnRyb2xOYW1lKSxcblx0XHRvVHJhY2VNZXRhZGF0YUNvbnRleHQ6IGFueSA9IHtcblx0XHRcdGNvbnRyb2w6IG9Ob2RlLm5hbWVzcGFjZVVSSSArIFwiLlwiICsgKG9Ob2RlLm5vZGVOYW1lLnNwbGl0KFwiOlwiKVsxXSB8fCBvTm9kZS5ub2RlTmFtZSlcblx0XHR9O1xuXG5cdGlmIChiSXNDb250cm9sKSB7XG5cdFx0aWYgKCFvTm9kZS5vd25lckRvY3VtZW50LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKFwieG1sbnM6dHJhY2VcIikpIHtcblx0XHRcdG9Ob2RlLm93bmVyRG9jdW1lbnQuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGVOUyh4bWxucywgXCJ4bWxuczp0cmFjZVwiLCB0cmFjZU5hbWVzcGFjZSk7XG5cdFx0XHRvTm9kZS5vd25lckRvY3VtZW50LmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlTlModHJhY2VOYW1lc3BhY2UsIFwidHJhY2U6aXNcIiwgXCJvblwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbGxlY3RJbmZvKG9Ob2RlLCBvVmlzaXRvcilcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChyZXN1bHQ6IHsgcHJvcGVydGllczoge307IGNvbnRleHRzOiB7fSB9KSB7XG5cdFx0XHRcdGNvbnN0IGJSZWxldmFudCA9IE9iamVjdC5rZXlzKHJlc3VsdC5jb250ZXh0cykubGVuZ3RoID4gMDsgLy9JZiBubyBjb250ZXh0IHdhcyB1c2VkIGl0IGlzIG5vdCByZWxldmFudCBzbyB3ZSBpZ25vcmUgT2JqZWN0LmtleXMocmVzdWx0LnByb3BlcnRpZXMpLmxlbmd0aFxuXHRcdFx0XHRpZiAoYlJlbGV2YW50KSB7XG5cdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihvVHJhY2VNZXRhZGF0YUNvbnRleHQsIHJlc3VsdCk7XG5cdFx0XHRcdFx0b1RyYWNlTWV0YWRhdGFDb250ZXh0LnZpZXdJbmZvID0gb1Zpc2l0b3IuZ2V0Vmlld0luZm8oKTtcblx0XHRcdFx0XHRvVHJhY2VNZXRhZGF0YUNvbnRleHQubWFjcm9JbmZvID0gb1Zpc2l0b3IuZ2V0U2V0dGluZ3MoKVtcIl9tYWNyb0luZm9cIl07XG5cdFx0XHRcdFx0b1RyYWNlTWV0YWRhdGFDb250ZXh0LnRyYWNlSUQgPSBhVHJhY2VJbmZvLmxlbmd0aDtcblx0XHRcdFx0XHRvTm9kZS5zZXRBdHRyaWJ1dGVOUyh0cmFjZU5hbWVzcGFjZSwgXCJ0cmFjZTp0cmFjZUlEXCIsIG9UcmFjZU1ldGFkYXRhQ29udGV4dC50cmFjZUlEKTtcblx0XHRcdFx0XHRhVHJhY2VJbmZvLnB1c2gob1RyYWNlTWV0YWRhdGFDb250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb1Zpc2l0b3IudmlzaXRBdHRyaWJ1dGVzKG9Ob2RlKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZXR1cm4gb1Zpc2l0b3IudmlzaXRDaGlsZE5vZGVzKG9Ob2RlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChleGM6IGFueSkge1xuXHRcdFx0XHRvVHJhY2VNZXRhZGF0YUNvbnRleHQuZXJyb3IgPSB7XG5cdFx0XHRcdFx0ZXhjZXB0aW9uOiBleGMsXG5cdFx0XHRcdFx0bm9kZTogbmV3IFhNTFNlcmlhbGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyhvTm9kZSlcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBvVmlzaXRvci52aXNpdEF0dHJpYnV0ZXMob05vZGUpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIG9WaXNpdG9yLnZpc2l0Q2hpbGROb2RlcyhvTm9kZSk7XG5cdFx0fSk7XG5cdH1cbn1cbi8qKlxuICogUmVnaXN0ZXIgcGF0aC10aHJvdWdoIFhNTFByZXByb2Nlc3NvciBwbHVnaW4gZm9yIGFsbCBuYW1lc3BhY2VzXG4gKiBnaXZlbiBhYm92ZSBpbiBhTmFtZXNwYWNlc1xuICovXG5pZiAodHJhY2VJc09uKSB7XG5cdGFOYW1lc3BhY2VzLmZvckVhY2goZnVuY3Rpb24gKG5hbWVzcGFjZTogc3RyaW5nKSB7XG5cdFx0b0NhbGxiYWNrc1tuYW1lc3BhY2VdID0gWE1MUHJlcHJvY2Vzc29yLnBsdWdJbihyZXNvbHZlLmJpbmQobmFtZXNwYWNlKSwgbmFtZXNwYWNlKTtcblx0fSk7XG59XG4vKipcbiAqIEFkZHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb2Nlc3Npbmcgb2Ygb25lIG1hY3JvIHRvIHRoZSBjb2xsZWN0aW9uLlxuICpcbiAqIEBuYW1lIHNhcC5mZS5tYWNyb3MuVHJhY2VJbmZvLnRyYWNlTWFjcm9DYWxsc1xuICogQHBhcmFtIHtzdHJpbmd9IHNOYW1lIE1hY3JvIGNsYXNzIG5hbWVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvTWV0YWRhdGEgRGVmaW5pdGlvbiBmcm9tIChtYWNybykubWV0YWRhdGEuanNcbiAqIEBwYXJhbSB7b2JqZWN0fSBtQ29udGV4dHMgQXZhaWxhYmxlIG5hbWVkIGNvbnRleHRzXG4gKiBAcGFyYW0ge1hNTE5vZGV9IG9Ob2RlXG4gKiBAcGFyYW0ge29iamVjdH0gb1Zpc2l0b3JcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKiBAc3RhdGljXG4gKi9cbmZ1bmN0aW9uIHRyYWNlTWFjcm9DYWxscyhzTmFtZTogc3RyaW5nLCBvTWV0YWRhdGE6IGFueSwgbUNvbnRleHRzOiBhbnksIG9Ob2RlOiBhbnksIG9WaXNpdG9yOiBhbnkpIHtcblx0bGV0IGFNZXRhZGF0YUNvbnRleHRLZXlzID0gKG9NZXRhZGF0YS5tZXRhZGF0YUNvbnRleHRzICYmIE9iamVjdC5rZXlzKG9NZXRhZGF0YS5tZXRhZGF0YUNvbnRleHRzKSkgfHwgW107XG5cdGNvbnN0IGFQcm9wZXJ0aWVzID0gKG9NZXRhZGF0YS5wcm9wZXJ0aWVzICYmIE9iamVjdC5rZXlzKG9NZXRhZGF0YS5wcm9wZXJ0aWVzKSkgfHwgW107XG5cdGNvbnN0IG1hY3JvSW5mbyA9IGZuQ2xvbmUob1Zpc2l0b3IuZ2V0U2V0dGluZ3MoKVtcIl9tYWNyb0luZm9cIl0gfHwge30pO1xuXHRjb25zdCBvVHJhY2VNZXRhZGF0YUNvbnRleHQ6IGFueSA9IHtcblx0XHRtYWNybzogc05hbWUsXG5cdFx0bWV0YURhdGFDb250ZXh0czogW10gYXMgYW55W10sXG5cdFx0cHJvcGVydGllczoge31cblx0fTtcblxuXHRpZiAoYU1ldGFkYXRhQ29udGV4dEtleXMubGVuZ3RoID09PSAwKSB7XG5cdFx0Ly9JbiBjYXNlIHRoZSBtYWNybyBoYXMgbm90IG1ldGFkYXRhLmpzIHdlIHRha2UgYWxsIG1ldGFkYXRhQ29udGV4dHMgZXhjZXB0IHRoaXNcblx0XHRhTWV0YWRhdGFDb250ZXh0S2V5cyA9IE9iamVjdC5rZXlzKG1Db250ZXh0cykuZmlsdGVyKGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcpIHtcblx0XHRcdHJldHVybiBuYW1lICE9PSBcInRoaXNcIjtcblx0XHR9KTtcblx0fVxuXG5cdGlmICghb05vZGUuZ2V0QXR0cmlidXRlKFwieG1sbnM6dHJhY2VcIikpIHtcblx0XHRvTm9kZS5zZXRBdHRyaWJ1dGVOUyh4bWxucywgXCJ4bWxuczp0cmFjZVwiLCB0cmFjZU5hbWVzcGFjZSk7XG5cdH1cblxuXHRpZiAoYU1ldGFkYXRhQ29udGV4dEtleXMubGVuZ3RoID4gMCkge1xuXHRcdGFNZXRhZGF0YUNvbnRleHRLZXlzLmZvckVhY2goZnVuY3Rpb24gKHNLZXk6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRleHQgPSBtQ29udGV4dHNbc0tleV0sXG5cdFx0XHRcdG9NZXRhRGF0YUNvbnRleHQ6IGFueSA9IG9Db250ZXh0ICYmIHtcblx0XHRcdFx0XHRuYW1lOiBzS2V5LFxuXHRcdFx0XHRcdHBhdGg6IG9Db250ZXh0LmdldFBhdGgoKVxuXHRcdFx0XHRcdC8vZGF0YTogSlNPTi5zdHJpbmdpZnkob0NvbnRleHQuZ2V0T2JqZWN0KCksbnVsbCwyKVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRpZiAob01ldGFEYXRhQ29udGV4dCkge1xuXHRcdFx0XHRvVHJhY2VNZXRhZGF0YUNvbnRleHQubWV0YURhdGFDb250ZXh0cy5wdXNoKG9NZXRhRGF0YUNvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0YVByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAoc0tleTogYW55KSB7XG5cdFx0XHRjb25zdCAvL29Qcm9wZXJ0eVNldHRpbmdzID0gb01ldGFkYXRhLnByb3BlcnRpZXNbc0tleV0sXG5cdFx0XHRcdG9Qcm9wZXJ0eSA9IG1Db250ZXh0cy50aGlzLmdldE9iamVjdChzS2V5KTtcblx0XHRcdC8vIChvTm9kZS5oYXNBdHRyaWJ1dGUoc0tleSkgJiYgb05vZGUuZ2V0QXR0cmlidXRlKHNLZXkpKSB8fFxuXHRcdFx0Ly8gKG9Qcm9wZXJ0eVNldHRpbmdzLmhhc093blByb3BlcnR5KFwiZGVmYXVsdFZhbHVlXCIpICYmIG9Qcm9wZXJ0eVNldHRpbmdzLmRlZmluZSkgfHxcblx0XHRcdC8vIGZhbHNlO1xuXG5cdFx0XHRpZiAob1Byb3BlcnR5KSB7XG5cdFx0XHRcdG9UcmFjZU1ldGFkYXRhQ29udGV4dC5wcm9wZXJ0aWVzW3NLZXldID0gb1Byb3BlcnR5O1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdG9UcmFjZU1ldGFkYXRhQ29udGV4dC52aWV3SW5mbyA9IG9WaXNpdG9yLmdldFZpZXdJbmZvKCk7XG5cdFx0b1RyYWNlTWV0YWRhdGFDb250ZXh0LnRyYWNlSUQgPSBhVHJhY2VJbmZvLmxlbmd0aDtcblx0XHRtYWNyb0luZm8ucGFyZW50TWFjcm9JRCA9IG1hY3JvSW5mby5tYWNyb0lEO1xuXHRcdG1hY3JvSW5mby5tYWNyb0lEID0gb1RyYWNlTWV0YWRhdGFDb250ZXh0LnRyYWNlSUQ7XG5cdFx0b1RyYWNlTWV0YWRhdGFDb250ZXh0Lm1hY3JvSW5mbyA9IG1hY3JvSW5mbztcblx0XHRvTm9kZS5zZXRBdHRyaWJ1dGVOUyh0cmFjZU5hbWVzcGFjZSwgXCJ0cmFjZTptYWNyb0lEXCIsIG9UcmFjZU1ldGFkYXRhQ29udGV4dC50cmFjZUlEKTtcblx0XHRhVHJhY2VJbmZvLnB1c2gob1RyYWNlTWV0YWRhdGFDb250ZXh0KTtcblx0XHRyZXR1cm4gb1RyYWNlTWV0YWRhdGFDb250ZXh0O1xuXHR9XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGdsb2JhbGx5IHN0b3JlZCB0cmFjZSBpbmZvcm1hdGlvbiBmb3IgdGhlIG1hY3JvIG9yXG4gKiBjb250cm9sIG1hcmtlZCB3aXRoIHRoZSBnaXZlbiBpZC5cbiAqXG4gKiBSZXR1cm5zIGFsbCB0cmFjZSBpbmZvcm1hdGlvbiBpZiBubyBpZCBpcyBzcGVjaWZpZWRcbiAqXG4gKlxuPHByZT5TdHJ1Y3R1cmUgZm9yIGEgbWFjcm9cbntcblx0bWFjcm86ICcnLCAvL25hbWUgb2YgbWFjcm9cblx0bWV0YURhdGFDb250ZXh0czogWyAvL1Byb3BlcnRpZXMgb2YgdHlwZSBzYXAudWkubW9kZWwuQ29udGV4dFxuXHRcdHtcblx0XHRcdG5hbWU6ICcnLCAvL2NvbnRleHQgcHJvcGVydHkgbmFtZSAvIGtleVxuXHRcdFx0cGF0aDogJycsIC8vZnJvbSBvQ29udGV4dC5nZXRQYXRoKClcblx0XHR9XG5cdF0sXG5cdHByb3BlcnRpZXM6IHsgLy8gT3RoZXIgcHJvcGVydGllcyB3aGljaCBiZWNvbWUgcGFydCBvZiB7dGhpcz59XG5cdFx0cHJvcGVydHkxOiB2YWx1ZSxcblx0XHRwcm9wZXJ0eTI6IHZhbHVlXG5cdH1cblx0dmlld0luZm86IHtcblx0XHR2aWV3SW5mbzoge30gLy8gQXMgc3BlY2lmaWVkIGluIHZpZXcgb3IgZnJhZ2VtZW50IGNyZWF0aW9uXG5cdH0sXG5cdHRyYWNlSUQ6IHRoaXMuaW5kZXgsIC8vSUQgZm9yIHRoaXMgdHJhY2UgaW5mb3JtYXRpb24sXG5cdG1hY3JvSW5mbzoge1xuXHRcdG1hY3JvSUQ6IGluZGV4LCAvLyB0cmFjZUlEIG9mIHRoaXMgbWFjcm8gKHJlZHVuZGFudCBmb3IgbWFjcm9zKVxuXHRcdHBhcmVudE1hY3JvSUQsIGluZGV4IC8vIHRyYWNlSUQgb2YgdGhlIHBhcmVudCBtYWNybyAoaWYgaXQgaGFzIGEgcGFyZW50KVxuXHR9XG59XG5TdHJ1Y3R1cmUgZm9yIGEgY29udHJvbFxue1xuXHRjb250cm9sOiAnJywgLy9jb250cm9sIGNsYXNzXG5cdHByb3BlcnRpZXM6IHsgLy8gT3RoZXIgcHJvcGVydGllcyB3aGljaCBiZWNvbWUgcGFydCBvZiB7dGhpcz59XG5cdFx0cHJvcGVydHkxOiB7XG5cdFx0XHRvcmlnaW5hbFZhbHVlOiAnJywgLy9WYWx1ZSBiZWZvcmUgdGVtcGxhdGluZ1xuXHRcdFx0cmVzb2x2ZWRWYWx1ZTogJycgLy9WYWx1ZSBhZnRlciB0ZW1wbGF0aW5nXG5cdFx0fVxuXHR9XG5cdGNvbnRleHRzOiB7IC8vTW9kZWxzIGFuZCBDb250ZXh0cyB1c2VkIGR1cmluZyB0ZW1wbGF0aW5nXG5cdFx0Ly8gTW9kZWwgb3IgY29udGV4dCBuYW1lIHVzZWQgZm9yIHRoaXMgY29udHJvbFxuXHRcdG1vZGVsTmFtZTE6IHsgLy8gRm9yIE9EYXRhTWV0YU1vZGVsXG5cdFx0XHRwYXRoMToge1xuXHRcdFx0XHRwYXRoOiAnJywgLy9hYnNvbHV0IHBhdGggd2l0aGluIG1ldGFtb2RlbFxuXHRcdFx0XHRkYXRhOiAnJywgLy9kYXRhIG9mIHBhdGggdW5sZXNzIHR5cGUgT2JqZWN0XG5cdFx0XHR9XG5cdFx0bW9kZWxOYW1lMjoge1xuXHRcdFx0Ly8gZm9yIG90aGVyIG1vZGVsIHR5cGVzXG5cdFx0XHR7XG5cdFx0XHRcdHByb3BlcnR5MTogdmFsdWUsXG5cdFx0XHRcdHByb3BlcnR5MjogdmFsdWVcblx0XHRcdH1cblx0XHRcdC8vIEluIGNhc2UgYmluZGluZyBjYW5ub3QgYmUgcmVzb2x2ZWQgLT4gbWFyayBhcyBydW50aW1lIGJpbmRpbmdcblx0XHRcdC8vIFRoaXMgaXMgbm90IGFsd2F5cyB0cnVlLCBlLmcuIGluIGNhc2UgdGhlIHBhdGggaXMgbWV0YW1vZGVscGF0aFxuXHRcdFx0e1xuXHRcdFx0XHRcImJpbmRpbmdGb3JcIjogXCJSdW50aW1lXCJcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdHZpZXdJbmZvOiB7XG5cdFx0dmlld0luZm86IHt9IC8vIEFzIHNwZWNpZmllZCBpbiB2aWV3IG9yIGZyYWdlbWVudCBjcmVhdGlvblxuXHR9LFxuXHRtYWNyb0luZm86IHtcblx0XHRtYWNyb0lEOiBpbmRleCwgLy8gdHJhY2VJRCBvZiB0aGUgbWFjcm8gdGhhdCBjcmVhdGVkIHRoaXMgY29udHJvbFxuXHRcdHBhcmVudE1hY3JvSUQsIGluZGV4IC8vIHRyYWNlSUQgb2YgdGhlIG1hY3JvJ3MgcGFyZW50IG1hY3JvXG5cdH0sXG5cdHRyYWNlSUQ6IHRoaXMuaW5kZXggLy9JRCBmb3IgdGhpcyB0cmFjZSBpbmZvcm1hdGlvblxufTwvcHJlPi5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBuYW1lIHNhcC5mZS5tYWNyb3MuVHJhY2VJbmZvLmdldFRyYWNlSW5mb1xuICogQHBhcmFtIHtudW1iZXJ9IGlkIFRyYWNlSW5mbyBpZFxuICogQHJldHVybnMge29iamVjdHxBcnJheX0gT2JqZWN0IC8gQXJyYXkgZm9yIFRyYWNlSW5mb1xuICogQHByaXZhdGVcbiAqIEBzdGF0aWNcbiAqL1xuZnVuY3Rpb24gZ2V0VHJhY2VJbmZvKGlkOiBudW1iZXIpIHtcblx0aWYgKGlkKSB7XG5cdFx0cmV0dXJuIGFUcmFjZUluZm9baWRdO1xuXHR9XG5cdGNvbnN0IGFFcnJvcnMgPSBhVHJhY2VJbmZvLmZpbHRlcihmdW5jdGlvbiAodHJhY2VJbmZvOiBhbnkpIHtcblx0XHRyZXR1cm4gdHJhY2VJbmZvLmVycm9yO1xuXHR9KTtcblx0cmV0dXJuIChhRXJyb3JzLmxlbmd0aCA+IDAgJiYgYUVycm9ycykgfHwgYVRyYWNlSW5mbztcbn1cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIFRyYWNlSW5mbyBpcyBhY3RpdmUuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbmFtZSBzYXAuZmUubWFjcm9zLlRyYWNlSW5mby5pc1RyYWNlSW5mb0FjdGl2ZVxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCB3aGVuIGFjdGl2ZVxuICogQHByaXZhdGVcbiAqIEBzdGF0aWNcbiAqL1xuZnVuY3Rpb24gaXNUcmFjZUluZm9BY3RpdmUoKSB7XG5cdHJldHVybiB0cmFjZUlzT247XG59XG4vKipcbiAqIEB0eXBlZGVmIHNhcC5mZS5tYWNyb3MuVHJhY2VJbmZvXG4gKiBUcmFjZUluZm8gZm9yIFNBUCBGaW9yaSBlbGVtZW50c1xuICpcbiAqIE9uY2UgdHJhY2VzIGlzIHN3aXRjaGVkLCBpbmZvcm1hdGlvbiBhYm91dCBtYWNyb3MgYW5kIGNvbnRyb2xzXG4gKiB0aGF0IGFyZSBwcm9jZXNzZWQgZHVyaW5nIHhtbCBwcmVwcm9jZXNzaW5nICggQHNlZSB7QGxpbmsgc2FwLnVpLmNvcmUudXRpbC5YTUxQcmVwcm9jZXNzb3J9KVxuICogd2lsbCBiZSBjb2xsZWN0ZWQgd2l0aGluIHRoaXMgc2luZ2xldG9uXG4gKiBAbmFtZXNwYWNlXG4gKiBAcHJpdmF0ZVxuICogQGdsb2JhbFxuICogQGV4cGVyaW1lbnRhbCBUaGlzIG1vZHVsZSBpcyBvbmx5IGZvciBleHBlcmltZW50YWwgdXNlISA8YnIvPjxiPlRoaXMgaXMgb25seSBhIFBPQyBhbmQgbWF5YmUgZGVsZXRlZDwvYj5cbiAqIEBzaW5jZSAxLjc0LjBcbiAqL1xuZXhwb3J0IGRlZmF1bHQge1xuXHRpc1RyYWNlSW5mb0FjdGl2ZTogaXNUcmFjZUluZm9BY3RpdmUsXG5cdHRyYWNlTWFjcm9DYWxsczogdHJhY2VNYWNyb0NhbGxzLFxuXHRnZXRUcmFjZUluZm86IGdldFRyYWNlSW5mb1xufTtcbiJdfQ==
436
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyYWNlSW5mby50cyJdLCJuYW1lcyI6WyJhVHJhY2VJbmZvIiwidHJhY2VOYW1lc3BhY2UiLCJ4bWxucyIsInRyYWNlSXNPbiIsImxvY2F0aW9uIiwic2VhcmNoIiwiaW5kZXhPZiIsImFOYW1lc3BhY2VzIiwib0NhbGxiYWNrcyIsImZuQ2xvbmUiLCJvT2JqZWN0IiwiSlNPTiIsInBhcnNlIiwic3RyaW5naWZ5IiwiY29sbGVjdENvbnRleHRJbmZvIiwic1ZhbHVlIiwib0NvbnRleHRzIiwib1Zpc2l0b3IiLCJvTm9kZSIsImFDb250ZXh0cyIsImFQcm9taXNlcyIsIk1hbmFnZWRPYmplY3QiLCJiaW5kaW5nUGFyc2VyIiwidW5kZWZpbmVkIiwiZSIsIkFycmF5IiwiaXNBcnJheSIsImZpbHRlciIsIm9Db250ZXh0IiwicGF0aCIsInBhcnRzIiwiZm9yRWFjaCIsImFQYXJ0cyIsIm9QYXJ0Q29udGV4dCIsIm9Nb2RlbCIsIm1vZGVsIiwic1NpbXBsZVBhdGgiLCJvUmVhbENvbnRleHQiLCJhSW5uZXJQYXJ0cyIsInNwbGl0IiwiZ2V0Q29udGV4dCIsInB1c2giLCJnZXRSZXN1bHQiLCJ0aGVuIiwib1Jlc3VsdCIsImdldE1vZGVsIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwiZ2V0UGF0aCIsImRhdGEiLCJjYXRjaCIsImJpbmRpbmdGb3IiLCJleGMiLCJQcm9taXNlIiwiYWxsIiwiZmlsbEF0dHJpYnV0ZXMiLCJvUmVzdWx0cyIsIm9BdHRyaWJ1dGVzIiwic05hbWUiLCJyZXN1bHQiLCJvcmlnaW5hbFZhbHVlIiwicmVzb2x2ZWRWYWx1ZSIsImVycm9yIiwic3RhY2siLCJ0b1N0cmluZyIsImNvbGxlY3RJbmZvIiwiaSIsImF0dHJpYnV0ZXMiLCJsZW5ndGgiLCJvQXR0cmlidXRlIiwibm9kZU5hbWUiLCJnZXRBdHRyaWJ1dGUiLCJpbmNsdWRlcyIsInByb3BlcnRpZXMiLCJjb250ZXh0cyIsInJlc29sdmUiLCJzQ29udHJvbE5hbWUiLCJiSXNDb250cm9sIiwidGVzdCIsIm9UcmFjZU1ldGFkYXRhQ29udGV4dCIsImNvbnRyb2wiLCJuYW1lc3BhY2VVUkkiLCJvd25lckRvY3VtZW50IiwiZmlyc3RDaGlsZCIsInNldEF0dHJpYnV0ZU5TIiwiYlJlbGV2YW50IiwiT2JqZWN0Iiwia2V5cyIsImFzc2lnbiIsInZpZXdJbmZvIiwiZ2V0Vmlld0luZm8iLCJtYWNyb0luZm8iLCJnZXRTZXR0aW5ncyIsInRyYWNlSUQiLCJ2aXNpdEF0dHJpYnV0ZXMiLCJ2aXNpdENoaWxkTm9kZXMiLCJleGNlcHRpb24iLCJub2RlIiwiWE1MU2VyaWFsaXplciIsInNlcmlhbGl6ZVRvU3RyaW5nIiwibmFtZXNwYWNlIiwiWE1MUHJlcHJvY2Vzc29yIiwicGx1Z0luIiwiYmluZCIsInRyYWNlTWFjcm9DYWxscyIsIm9NZXRhZGF0YSIsIm1Db250ZXh0cyIsImFNZXRhZGF0YUNvbnRleHRLZXlzIiwibWV0YWRhdGFDb250ZXh0cyIsImFQcm9wZXJ0aWVzIiwibWFjcm8iLCJtZXRhRGF0YUNvbnRleHRzIiwibmFtZSIsInNLZXkiLCJvTWV0YURhdGFDb250ZXh0Iiwib1Byb3BlcnR5IiwidGhpcyIsImdldE9iamVjdCIsInBhcmVudE1hY3JvSUQiLCJtYWNyb0lEIiwiZ2V0VHJhY2VJbmZvIiwiaWQiLCJhRXJyb3JzIiwidHJhY2VJbmZvIiwiaXNUcmFjZUluZm9BY3RpdmUiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7QUFBQTtBQUNBLE1BQU1BLFVBQWlCLEdBQUc7QUFDekI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUFDQTtBQUNBOzs7QUFDQSxXQUFTNEgsaUJBQVQsR0FBNkI7QUFDNUIsV0FBT3pILFNBQVA7QUFDQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7U0FDZTtBQUNkeUgsSUFBQUEsaUJBQWlCLEVBQUVBLGlCQURMO0FBRWRwQixJQUFBQSxlQUFlLEVBQUVBLGVBRkg7QUFHZGdCLElBQUFBLFlBQVksRUFBRUE7QUFIQSxHIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbi8vVHJhY2UgaW5mb3JtYXRpb25cbmNvbnN0IGFUcmFjZUluZm86IGFueVtdID0gW1xuXHQvKiBTdHJ1Y3R1cmUgZm9yIGEgbWFjcm9cblx0XHRcdHtcblx0XHRcdFx0bWFjcm86ICcnLCAvL25hbWUgb2YgbWFjcm9cblx0XHRcdFx0bWV0YURhdGFDb250ZXh0czogWyAvL1Byb3BlcnRpZXMgb2YgdHlwZSBzYXAudWkubW9kZWwuQ29udGV4dFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdG5hbWU6ICcnLCAvL2NvbnRleHQgcHJvcGVydHkgbmFtZSAvIGtleVxuXHRcdFx0XHRcdFx0cGF0aDogJycsIC8vZnJvbSBvQ29udGV4dC5nZXRQYXRoKClcblx0XHRcdFx0XHR9XG5cdFx0XHRcdF0sXG5cdFx0XHRcdHByb3BlcnRpZXM6IHsgLy8gT3RoZXIgcHJvcGVydGllcyB3aGljaCBiZWNvbWUgcGFydCBvZiB7dGhpcz59XG5cdFx0XHRcdFx0cHJvcGVydHkxOiB2YWx1ZSxcblx0XHRcdFx0XHRwcm9wZXJ0eTI6IHZhbHVlXG5cdFx0XHRcdH1cblx0XHRcdFx0dmlld0luZm86IHtcblx0XHRcdFx0XHR2aWV3SW5mbzoge30gLy8gQXMgc3BlY2lmaWVkIGluIHZpZXcgb3IgZnJhZ2VtZW50IGNyZWF0aW9uXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRyYWNlSUQ6IHRoaXMuaW5kZXgsIC8vSUQgZm9yIHRoaXMgdHJhY2UgaW5mb3JtYXRpb24sXG5cdFx0XHRcdG1hY3JvSW5mbzoge1xuXHRcdFx0XHRcdG1hY3JvSUQ6IGluZGV4LCAvLyB0cmFjZUlEIG9mIHRoaXMgbWFjcm8gKHJlZHVuZGFudCBmb3IgbWFjcm9zKVxuXHRcdFx0XHRcdHBhcmVudE1hY3JvSUQsIGluZGV4IC8vIHRyYWNlSUQgb2YgdGhlIHBhcmVudCBtYWNybyAoaWYgaXQgaGFzIGEgcGFyZW50KVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBTdHJ1Y3R1cmUgZm9yIGEgY29udHJvbFxuXHRcdFx0e1xuXHRcdFx0XHRjb250cm9sOiAnJywgLy9jb250cm9sIGNsYXNzXG5cdFx0XHRcdHByb3BlcnRpZXM6IHsgLy8gT3RoZXIgcHJvcGVydGllcyB3aGljaCBiZWNvbWUgcGFydCBvZiB7dGhpcz59XG5cdFx0XHRcdFx0cHJvcGVydHkxOiB7XG5cdFx0XHRcdFx0XHRvcmlnaW5hbFZhbHVlOiAnJywgLy9WYWx1ZSBiZWZvcmUgdGVtcGxhdGluZ1xuXHRcdFx0XHRcdFx0cmVzb2x2ZWRWYWx1ZTogJycgLy9WYWx1ZSBhZnRlciB0ZW1wbGF0aW5nXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRleHRzOiB7IC8vTW9kZWxzIGFuZCBDb250ZXh0cyB1c2VkIGR1cmluZyB0ZW1wbGF0aW5nXG5cdFx0XHRcdFx0Ly8gTW9kZWwgb3IgY29udGV4dCBuYW1lIHVzZWQgZm9yIHRoaXMgY29udHJvbFxuXHRcdFx0XHRcdG1vZGVsTmFtZTE6IHsgLy8gRm9yIE9EYXRhTWV0YU1vZGVsXG5cdFx0XHRcdFx0XHRwYXRoMToge1xuXHRcdFx0XHRcdFx0XHRwYXRoOiAnJywgLy9hYnNvbHV0IHBhdGggd2l0aGluIG1ldGFtb2RlbFxuXHRcdFx0XHRcdFx0XHRkYXRhOiAnJywgLy9kYXRhIG9mIHBhdGggdW5sZXNzIHR5cGUgT2JqZWN0XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bW9kZWxOYW1lMjoge1xuXHRcdFx0XHRcdFx0Ly8gZm9yIG90aGVyIG1vZGVsIHR5cGVzXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5MTogdmFsdWUsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5MjogdmFsdWVcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8vIEluIGNhc2UgYmluZGluZyBjYW5ub3QgYmUgcmVzb2x2ZWQgLT4gbWFyayBhcyBydW50aW1lIGJpbmRpbmdcblx0XHRcdFx0XHRcdC8vIFRoaXMgaXMgbm90IGFsd2F5cyB0cnVlLCBlLmcuIGluIGNhc2UgdGhlIHBhdGggaXMgbWV0YW1vZGVscGF0aFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcImJpbmRpbmdGb3JcIjogXCJSdW50aW1lXCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHZpZXdJbmZvOiB7XG5cdFx0XHRcdFx0dmlld0luZm86IHt9IC8vIEFzIHNwZWNpZmllZCBpbiB2aWV3IG9yIGZyYWdlbWVudCBjcmVhdGlvblxuXHRcdFx0XHR9LFxuXHRcdFx0XHRtYWNyb0luZm86IHtcblx0XHRcdFx0XHRtYWNyb0lEOiBpbmRleCwgLy8gdHJhY2VJRCBvZiB0aGUgbWFjcm8gdGhhdCBjcmVhdGVkIHRoaXMgY29udHJvbFxuXHRcdFx0XHRcdHBhcmVudE1hY3JvSUQsIGluZGV4IC8vIHRyYWNlSUQgb2YgdGhlIG1hY3JvJ3MgcGFyZW50IG1hY3JvXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRyYWNlSUQ6IHRoaXMuaW5kZXggLy9JRCBmb3IgdGhpcyB0cmFjZSBpbmZvcm1hdGlvblxuXHRcdFx0fVxuXHRcdFx0Ki9cbl07XG5jb25zdCB0cmFjZU5hbWVzcGFjZSA9IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC5mZS5pbmZvLzFcIixcblx0eG1sbnMgPSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvXCIsXG5cdC8qKlxuXHQgKiBTd2l0Y2ggaXMgY3VycmVudGx5IGJhc2VkIG9uIHVybCBwYXJhbWV0ZXJcblx0ICovXG5cdHRyYWNlSXNPbiA9IGxvY2F0aW9uLnNlYXJjaC5pbmRleE9mKFwic2FwLXVpLXh4LWZlVHJhY2VJbmZvPXRydWVcIikgPiAtMSxcblx0LyoqXG5cdCAqIFNwZWNpZnkgYWxsIG5hbWVzcGFjZXMgdGhhdCBzaGFsbCBiZSB0cmFjZWQgZHVyaW5nIHRlbXBsYXRpbmdcblx0ICovXG5cdGFOYW1lc3BhY2VzID0gW1xuXHRcdFwic2FwLm1cIixcblx0XHRcInNhcC51eGFwXCIsXG5cdFx0XCJzYXAudWkudW5pZmllZFwiLFxuXHRcdFwic2FwLmZcIixcblx0XHRcInNhcC51aS50YWJsZVwiLFxuXHRcdFwic2FwLnN1aXRlLnVpLm1pY3JvY2hhcnRcIixcblx0XHRcInNhcC51aS5sYXlvdXQuZm9ybVwiLFxuXHRcdFwic2FwLnVpLm1kY1wiLFxuXHRcdFwic2FwLnVpLm1kYy5saW5rXCIsXG5cdFx0XCJzYXAudWkubWRjLmZpZWxkXCIsXG5cdFx0XCJzYXAuZmUuZnBtXCJcblx0XSxcblx0b0NhbGxiYWNrczogYW55ID0ge307XG5cbmZ1bmN0aW9uIGZuQ2xvbmUob09iamVjdDogYW55KSB7XG5cdHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9PYmplY3QpKTtcbn1cbmZ1bmN0aW9uIGNvbGxlY3RDb250ZXh0SW5mbyhzVmFsdWU6IGFueSwgb0NvbnRleHRzOiBhbnksIG9WaXNpdG9yOiBhbnksIG9Ob2RlOiBhbnkpIHtcblx0bGV0IGFDb250ZXh0cztcblx0Y29uc3QgYVByb21pc2VzOiBhbnlbXSA9IFtdO1xuXHR0cnkge1xuXHRcdGFDb250ZXh0cyA9IChNYW5hZ2VkT2JqZWN0IGFzIGFueSkuYmluZGluZ1BhcnNlcihzVmFsdWUsIHVuZGVmaW5lZCwgZmFsc2UsIHRydWUpIHx8IFtdO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0YUNvbnRleHRzID0gW107XG5cdH1cblx0YUNvbnRleHRzID0gQXJyYXkuaXNBcnJheShhQ29udGV4dHMpID8gYUNvbnRleHRzIDogW2FDb250ZXh0c107XG5cdGFDb250ZXh0c1xuXHRcdC5maWx0ZXIoZnVuY3Rpb24gKG9Db250ZXh0OiBhbnkpIHtcblx0XHRcdHJldHVybiBvQ29udGV4dC5wYXRoIHx8IG9Db250ZXh0LnBhcnRzO1xuXHRcdH0pXG5cdFx0LmZvckVhY2goZnVuY3Rpb24gKG9Db250ZXh0OiBhbnkpIHtcblx0XHRcdGNvbnN0IGFQYXJ0cyA9IG9Db250ZXh0LnBhcnRzIHx8IFtvQ29udGV4dF07XG5cdFx0XHRhUGFydHNcblx0XHRcdFx0LmZpbHRlcihmdW5jdGlvbiAob1BhcnRDb250ZXh0OiBhbnkpIHtcblx0XHRcdFx0XHRyZXR1cm4gb1BhcnRDb250ZXh0LnBhdGg7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5mb3JFYWNoKGZ1bmN0aW9uIChvUGFydENvbnRleHQ6IGFueSkge1xuXHRcdFx0XHRcdGNvbnN0IG9Nb2RlbCA9IChvQ29udGV4dHNbb1BhcnRDb250ZXh0Lm1vZGVsXSA9IG9Db250ZXh0c1tvUGFydENvbnRleHQubW9kZWxdIHx8IHt9KTtcblx0XHRcdFx0XHRjb25zdCBzU2ltcGxlUGF0aCA9XG5cdFx0XHRcdFx0XHRvUGFydENvbnRleHQucGF0aC5pbmRleE9mKFwiPlwiKSA8IDBcblx0XHRcdFx0XHRcdFx0PyAob1BhcnRDb250ZXh0Lm1vZGVsICYmIGAke29QYXJ0Q29udGV4dC5tb2RlbH0+YCkgKyBvUGFydENvbnRleHQucGF0aFxuXHRcdFx0XHRcdFx0XHQ6IG9QYXJ0Q29udGV4dC5wYXRoO1xuXHRcdFx0XHRcdGxldCBvUmVhbENvbnRleHQ6IGFueTtcblx0XHRcdFx0XHRsZXQgYUlubmVyUGFydHM7XG5cblx0XHRcdFx0XHRpZiAodHlwZW9mIG9QYXJ0Q29udGV4dC5tb2RlbCA9PT0gXCJ1bmRlZmluZWRcIiAmJiBzU2ltcGxlUGF0aC5pbmRleE9mKFwiPlwiKSA+IC0xKSB7XG5cdFx0XHRcdFx0XHRhSW5uZXJQYXJ0cyA9IHNTaW1wbGVQYXRoLnNwbGl0KFwiPlwiKTtcblx0XHRcdFx0XHRcdG9QYXJ0Q29udGV4dC5tb2RlbCA9IGFJbm5lclBhcnRzWzBdO1xuXHRcdFx0XHRcdFx0b1BhcnRDb250ZXh0LnBhdGggPSBhSW5uZXJQYXJ0c1sxXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdG9SZWFsQ29udGV4dCA9IG9WaXNpdG9yLmdldENvbnRleHQoc1NpbXBsZVBhdGgpO1xuXHRcdFx0XHRcdFx0YVByb21pc2VzLnB1c2goXG5cdFx0XHRcdFx0XHRcdG9WaXNpdG9yXG5cdFx0XHRcdFx0XHRcdFx0LmdldFJlc3VsdChgeyR7c1NpbXBsZVBhdGh9fWAsIG9Ob2RlKVxuXHRcdFx0XHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvUmVzdWx0OiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChvUmVhbENvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSA9PT0gXCJzYXAudWkubW9kZWwuanNvbi5KU09OTW9kZWxcIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIW9SZXN1bHQub01vZGVsKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b01vZGVsW29QYXJ0Q29udGV4dC5wYXRoXSA9IG9SZXN1bHQ7IC8vb1JlYWxDb250ZXh0LmdldE9iamVjdChvQ29udGV4dC5wYXRoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvTW9kZWxbb1BhcnRDb250ZXh0LnBhdGhdID0gYENvbnRleHQgZnJvbSAke29SZXN1bHQuZ2V0UGF0aCgpfWA7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9Nb2RlbFtvUGFydENvbnRleHQucGF0aF0gPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGF0aDogb1JlYWxDb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhOiB0eXBlb2Ygb1Jlc3VsdCA9PT0gXCJvYmplY3RcIiA/IFwiW2N0cmwvY21kLWNsaWNrXSBvbiBwYXRoIHRvIHNlZSBkYXRhXCIgOiBvUmVzdWx0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b01vZGVsW29QYXJ0Q29udGV4dC5wYXRoXSA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YmluZGluZ0ZvcjogXCJSdW50aW1lXCJcblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXhjKSB7XG5cdFx0XHRcdFx0XHRvTW9kZWxbb1BhcnRDb250ZXh0LnBhdGhdID0ge1xuXHRcdFx0XHRcdFx0XHRiaW5kaW5nRm9yOiBcIlJ1bnRpbWVcIlxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdH0pO1xuXHRyZXR1cm4gUHJvbWlzZS5hbGwoYVByb21pc2VzKTtcbn1cbmZ1bmN0aW9uIGZpbGxBdHRyaWJ1dGVzKG9SZXN1bHRzOiBhbnksIG9BdHRyaWJ1dGVzOiBhbnksIHNOYW1lOiBhbnksIHNWYWx1ZTogYW55KSB7XG5cdHJldHVybiBvUmVzdWx0c1xuXHRcdC50aGVuKGZ1bmN0aW9uIChyZXN1bHQ6IGFueSkge1xuXHRcdFx0b0F0dHJpYnV0ZXNbc05hbWVdID1cblx0XHRcdFx0c1ZhbHVlICE9PSByZXN1bHRcblx0XHRcdFx0XHQ/IHtcblx0XHRcdFx0XHRcdFx0b3JpZ2luYWxWYWx1ZTogc1ZhbHVlLFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlZFZhbHVlOiByZXN1bHRcblx0XHRcdFx0XHQgIH1cblx0XHRcdFx0XHQ6IHNWYWx1ZTtcblx0XHR9KVxuXHRcdC5jYXRjaChmdW5jdGlvbiAoZTogYW55KSB7XG5cdFx0XHRvQXR0cmlidXRlc1tzTmFtZV0gPSB7XG5cdFx0XHRcdG9yaWdpbmFsVmFsdWU6IHNWYWx1ZSxcblx0XHRcdFx0ZXJyb3I6IChlLnN0YWNrICYmIGUuc3RhY2sudG9TdHJpbmcoKSkgfHwgZVxuXHRcdFx0fTtcblx0XHR9KTtcbn1cbmZ1bmN0aW9uIGNvbGxlY3RJbmZvKG9Ob2RlOiBhbnksIG9WaXNpdG9yOiBhbnkpIHtcblx0Y29uc3Qgb0F0dHJpYnV0ZXMgPSB7fTtcblx0Y29uc3QgYVByb21pc2VzID0gW107XG5cdGNvbnN0IG9Db250ZXh0cyA9IHt9O1xuXHRsZXQgb1Jlc3VsdHM7XG5cdGZvciAobGV0IGkgPSBvTm9kZS5hdHRyaWJ1dGVzLmxlbmd0aCA+Pj4gMDsgaS0tOyApIHtcblx0XHRjb25zdCBvQXR0cmlidXRlID0gb05vZGUuYXR0cmlidXRlc1tpXSxcblx0XHRcdHNOYW1lID0gb0F0dHJpYnV0ZS5ub2RlTmFtZSxcblx0XHRcdHNWYWx1ZSA9IG9Ob2RlLmdldEF0dHJpYnV0ZShzTmFtZSk7XG5cdFx0aWYgKCFbXCJjb3JlOnJlcXVpcmVcIl0uaW5jbHVkZXMoc05hbWUpKSB7XG5cdFx0XHRhUHJvbWlzZXMucHVzaChjb2xsZWN0Q29udGV4dEluZm8oc1ZhbHVlLCBvQ29udGV4dHMsIG9WaXNpdG9yLCBvTm9kZSkpO1xuXHRcdFx0b1Jlc3VsdHMgPSBvVmlzaXRvci5nZXRSZXN1bHQoc1ZhbHVlLCBvTm9kZSk7XG5cdFx0XHRpZiAob1Jlc3VsdHMpIHtcblx0XHRcdFx0YVByb21pc2VzLnB1c2goZmlsbEF0dHJpYnV0ZXMob1Jlc3VsdHMsIG9BdHRyaWJ1dGVzLCBzTmFtZSwgc1ZhbHVlKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvL1doYXRcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIFByb21pc2UuYWxsKGFQcm9taXNlcykudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIHsgcHJvcGVydGllczogb0F0dHJpYnV0ZXMsIGNvbnRleHRzOiBvQ29udGV4dHMgfTtcblx0fSk7XG59XG5mdW5jdGlvbiByZXNvbHZlKG9Ob2RlOiBhbnksIG9WaXNpdG9yOiBhbnkpIHtcblx0Y29uc3Qgc0NvbnRyb2xOYW1lID0gb05vZGUubm9kZU5hbWUuc3BsaXQoXCI6XCIpWzFdIHx8IG9Ob2RlLm5vZGVOYW1lLFxuXHRcdGJJc0NvbnRyb2wgPSAvXltBLVpdLy50ZXN0KHNDb250cm9sTmFtZSksXG5cdFx0b1RyYWNlTWV0YWRhdGFDb250ZXh0OiBhbnkgPSB7XG5cdFx0XHRjb250cm9sOiBgJHtvTm9kZS5uYW1lc3BhY2VVUkl9LiR7b05vZGUubm9kZU5hbWUuc3BsaXQoXCI6XCIpWzFdIHx8IG9Ob2RlLm5vZGVOYW1lfWBcblx0XHR9O1xuXG5cdGlmIChiSXNDb250cm9sKSB7XG5cdFx0aWYgKCFvTm9kZS5vd25lckRvY3VtZW50LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKFwieG1sbnM6dHJhY2VcIikpIHtcblx0XHRcdG9Ob2RlLm93bmVyRG9jdW1lbnQuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGVOUyh4bWxucywgXCJ4bWxuczp0cmFjZVwiLCB0cmFjZU5hbWVzcGFjZSk7XG5cdFx0XHRvTm9kZS5vd25lckRvY3VtZW50LmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlTlModHJhY2VOYW1lc3BhY2UsIFwidHJhY2U6aXNcIiwgXCJvblwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbGxlY3RJbmZvKG9Ob2RlLCBvVmlzaXRvcilcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChyZXN1bHQ6IHsgcHJvcGVydGllczoge307IGNvbnRleHRzOiB7fSB9KSB7XG5cdFx0XHRcdGNvbnN0IGJSZWxldmFudCA9IE9iamVjdC5rZXlzKHJlc3VsdC5jb250ZXh0cykubGVuZ3RoID4gMDsgLy9JZiBubyBjb250ZXh0IHdhcyB1c2VkIGl0IGlzIG5vdCByZWxldmFudCBzbyB3ZSBpZ25vcmUgT2JqZWN0LmtleXMocmVzdWx0LnByb3BlcnRpZXMpLmxlbmd0aFxuXHRcdFx0XHRpZiAoYlJlbGV2YW50KSB7XG5cdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihvVHJhY2VNZXRhZGF0YUNvbnRleHQsIHJlc3VsdCk7XG5cdFx0XHRcdFx0b1RyYWNlTWV0YWRhdGFDb250ZXh0LnZpZXdJbmZvID0gb1Zpc2l0b3IuZ2V0Vmlld0luZm8oKTtcblx0XHRcdFx0XHRvVHJhY2VNZXRhZGF0YUNvbnRleHQubWFjcm9JbmZvID0gb1Zpc2l0b3IuZ2V0U2V0dGluZ3MoKVtcIl9tYWNyb0luZm9cIl07XG5cdFx0XHRcdFx0b1RyYWNlTWV0YWRhdGFDb250ZXh0LnRyYWNlSUQgPSBhVHJhY2VJbmZvLmxlbmd0aDtcblx0XHRcdFx0XHRvTm9kZS5zZXRBdHRyaWJ1dGVOUyh0cmFjZU5hbWVzcGFjZSwgXCJ0cmFjZTp0cmFjZUlEXCIsIG9UcmFjZU1ldGFkYXRhQ29udGV4dC50cmFjZUlEKTtcblx0XHRcdFx0XHRhVHJhY2VJbmZvLnB1c2gob1RyYWNlTWV0YWRhdGFDb250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb1Zpc2l0b3IudmlzaXRBdHRyaWJ1dGVzKG9Ob2RlKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBvVmlzaXRvci52aXNpdENoaWxkTm9kZXMob05vZGUpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXhjOiBhbnkpIHtcblx0XHRcdFx0b1RyYWNlTWV0YWRhdGFDb250ZXh0LmVycm9yID0ge1xuXHRcdFx0XHRcdGV4Y2VwdGlvbjogZXhjLFxuXHRcdFx0XHRcdG5vZGU6IG5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcob05vZGUpXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gb1Zpc2l0b3IudmlzaXRBdHRyaWJ1dGVzKG9Ob2RlKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBvVmlzaXRvci52aXNpdENoaWxkTm9kZXMob05vZGUpO1xuXHRcdH0pO1xuXHR9XG59XG4vKipcbiAqIFJlZ2lzdGVyIHBhdGgtdGhyb3VnaCBYTUxQcmVwcm9jZXNzb3IgcGx1Z2luIGZvciBhbGwgbmFtZXNwYWNlc1xuICogZ2l2ZW4gYWJvdmUgaW4gYU5hbWVzcGFjZXNcbiAqL1xuaWYgKHRyYWNlSXNPbikge1xuXHRhTmFtZXNwYWNlcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lc3BhY2U6IHN0cmluZykge1xuXHRcdG9DYWxsYmFja3NbbmFtZXNwYWNlXSA9IFhNTFByZXByb2Nlc3Nvci5wbHVnSW4ocmVzb2x2ZS5iaW5kKG5hbWVzcGFjZSksIG5hbWVzcGFjZSk7XG5cdH0pO1xufVxuLyoqXG4gKiBBZGRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm9jZXNzaW5nIG9mIG9uZSBtYWNybyB0byB0aGUgY29sbGVjdGlvbi5cbiAqXG4gKiBAbmFtZSBzYXAuZmUubWFjcm9zLlRyYWNlSW5mby50cmFjZU1hY3JvQ2FsbHNcbiAqIEBwYXJhbSBzTmFtZSBNYWNybyBjbGFzcyBuYW1lXG4gKiBAcGFyYW0gb01ldGFkYXRhIERlZmluaXRpb24gZnJvbSAobWFjcm8pLm1ldGFkYXRhLmpzXG4gKiBAcGFyYW0gbUNvbnRleHRzIEF2YWlsYWJsZSBuYW1lZCBjb250ZXh0c1xuICogQHBhcmFtIG9Ob2RlXG4gKiBAcGFyYW0gb1Zpc2l0b3JcbiAqIEByZXR1cm5zIFRoZSB0cmFjZWQgbWV0YWRhdGEgY29udGV4dFxuICogQHByaXZhdGVcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICogQHN0YXRpY1xuICovXG5mdW5jdGlvbiB0cmFjZU1hY3JvQ2FsbHMoc05hbWU6IHN0cmluZywgb01ldGFkYXRhOiBhbnksIG1Db250ZXh0czogYW55LCBvTm9kZTogYW55LCBvVmlzaXRvcjogYW55KSB7XG5cdGxldCBhTWV0YWRhdGFDb250ZXh0S2V5cyA9IChvTWV0YWRhdGEubWV0YWRhdGFDb250ZXh0cyAmJiBPYmplY3Qua2V5cyhvTWV0YWRhdGEubWV0YWRhdGFDb250ZXh0cykpIHx8IFtdO1xuXHRjb25zdCBhUHJvcGVydGllcyA9IChvTWV0YWRhdGEucHJvcGVydGllcyAmJiBPYmplY3Qua2V5cyhvTWV0YWRhdGEucHJvcGVydGllcykpIHx8IFtdO1xuXHRjb25zdCBtYWNyb0luZm8gPSBmbkNsb25lKG9WaXNpdG9yLmdldFNldHRpbmdzKClbXCJfbWFjcm9JbmZvXCJdIHx8IHt9KTtcblx0Y29uc3Qgb1RyYWNlTWV0YWRhdGFDb250ZXh0OiBhbnkgPSB7XG5cdFx0bWFjcm86IHNOYW1lLFxuXHRcdG1ldGFEYXRhQ29udGV4dHM6IFtdIGFzIGFueVtdLFxuXHRcdHByb3BlcnRpZXM6IHt9XG5cdH07XG5cblx0aWYgKGFNZXRhZGF0YUNvbnRleHRLZXlzLmxlbmd0aCA9PT0gMCkge1xuXHRcdC8vSW4gY2FzZSB0aGUgbWFjcm8gaGFzIG5vdCBtZXRhZGF0YS5qcyB3ZSB0YWtlIGFsbCBtZXRhZGF0YUNvbnRleHRzIGV4Y2VwdCB0aGlzXG5cdFx0YU1ldGFkYXRhQ29udGV4dEtleXMgPSBPYmplY3Qua2V5cyhtQ29udGV4dHMpLmZpbHRlcihmdW5jdGlvbiAobmFtZTogc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gbmFtZSAhPT0gXCJ0aGlzXCI7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoIW9Ob2RlLmdldEF0dHJpYnV0ZShcInhtbG5zOnRyYWNlXCIpKSB7XG5cdFx0b05vZGUuc2V0QXR0cmlidXRlTlMoeG1sbnMsIFwieG1sbnM6dHJhY2VcIiwgdHJhY2VOYW1lc3BhY2UpO1xuXHR9XG5cblx0aWYgKGFNZXRhZGF0YUNvbnRleHRLZXlzLmxlbmd0aCA+IDApIHtcblx0XHRhTWV0YWRhdGFDb250ZXh0S2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5OiBhbnkpIHtcblx0XHRcdGNvbnN0IG9Db250ZXh0ID0gbUNvbnRleHRzW3NLZXldLFxuXHRcdFx0XHRvTWV0YURhdGFDb250ZXh0OiBhbnkgPSBvQ29udGV4dCAmJiB7XG5cdFx0XHRcdFx0bmFtZTogc0tleSxcblx0XHRcdFx0XHRwYXRoOiBvQ29udGV4dC5nZXRQYXRoKClcblx0XHRcdFx0XHQvL2RhdGE6IEpTT04uc3RyaW5naWZ5KG9Db250ZXh0LmdldE9iamVjdCgpLG51bGwsMilcblx0XHRcdFx0fTtcblxuXHRcdFx0aWYgKG9NZXRhRGF0YUNvbnRleHQpIHtcblx0XHRcdFx0b1RyYWNlTWV0YWRhdGFDb250ZXh0Lm1ldGFEYXRhQ29udGV4dHMucHVzaChvTWV0YURhdGFDb250ZXh0KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGFQcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24gKHNLZXk6IGFueSkge1xuXHRcdFx0Y29uc3QgLy9vUHJvcGVydHlTZXR0aW5ncyA9IG9NZXRhZGF0YS5wcm9wZXJ0aWVzW3NLZXldLFxuXHRcdFx0XHRvUHJvcGVydHkgPSBtQ29udGV4dHMudGhpcy5nZXRPYmplY3Qoc0tleSk7XG5cdFx0XHQvLyAob05vZGUuaGFzQXR0cmlidXRlKHNLZXkpICYmIG9Ob2RlLmdldEF0dHJpYnV0ZShzS2V5KSkgfHxcblx0XHRcdC8vIChvUHJvcGVydHlTZXR0aW5ncy5oYXNPd25Qcm9wZXJ0eShcImRlZmF1bHRWYWx1ZVwiKSAmJiBvUHJvcGVydHlTZXR0aW5ncy5kZWZpbmUpIHx8XG5cdFx0XHQvLyBmYWxzZTtcblxuXHRcdFx0aWYgKG9Qcm9wZXJ0eSkge1xuXHRcdFx0XHRvVHJhY2VNZXRhZGF0YUNvbnRleHQucHJvcGVydGllc1tzS2V5XSA9IG9Qcm9wZXJ0eTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRvVHJhY2VNZXRhZGF0YUNvbnRleHQudmlld0luZm8gPSBvVmlzaXRvci5nZXRWaWV3SW5mbygpO1xuXHRcdG9UcmFjZU1ldGFkYXRhQ29udGV4dC50cmFjZUlEID0gYVRyYWNlSW5mby5sZW5ndGg7XG5cdFx0bWFjcm9JbmZvLnBhcmVudE1hY3JvSUQgPSBtYWNyb0luZm8ubWFjcm9JRDtcblx0XHRtYWNyb0luZm8ubWFjcm9JRCA9IG9UcmFjZU1ldGFkYXRhQ29udGV4dC50cmFjZUlEO1xuXHRcdG9UcmFjZU1ldGFkYXRhQ29udGV4dC5tYWNyb0luZm8gPSBtYWNyb0luZm87XG5cdFx0b05vZGUuc2V0QXR0cmlidXRlTlModHJhY2VOYW1lc3BhY2UsIFwidHJhY2U6bWFjcm9JRFwiLCBvVHJhY2VNZXRhZGF0YUNvbnRleHQudHJhY2VJRCk7XG5cdFx0YVRyYWNlSW5mby5wdXNoKG9UcmFjZU1ldGFkYXRhQ29udGV4dCk7XG5cdFx0cmV0dXJuIG9UcmFjZU1ldGFkYXRhQ29udGV4dDtcblx0fVxufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnbG9iYWxseSBzdG9yZWQgdHJhY2UgaW5mb3JtYXRpb24gZm9yIHRoZSBtYWNybyBvclxuICogY29udHJvbCBtYXJrZWQgd2l0aCB0aGUgZ2l2ZW4gaWQuXG4gKlxuICogUmV0dXJucyBhbGwgdHJhY2UgaW5mb3JtYXRpb24gaWYgbm8gaWQgaXMgc3BlY2lmaWVkXG4gKlxuICpcbjxwcmU+U3RydWN0dXJlIGZvciBhIG1hY3JvXG57XG5cdG1hY3JvOiAnJywgLy9uYW1lIG9mIG1hY3JvXG5cdG1ldGFEYXRhQ29udGV4dHM6IFsgLy9Qcm9wZXJ0aWVzIG9mIHR5cGUgc2FwLnVpLm1vZGVsLkNvbnRleHRcblx0XHR7XG5cdFx0XHRuYW1lOiAnJywgLy9jb250ZXh0IHByb3BlcnR5IG5hbWUgLyBrZXlcblx0XHRcdHBhdGg6ICcnLCAvL2Zyb20gb0NvbnRleHQuZ2V0UGF0aCgpXG5cdFx0fVxuXHRdLFxuXHRwcm9wZXJ0aWVzOiB7IC8vIE90aGVyIHByb3BlcnRpZXMgd2hpY2ggYmVjb21lIHBhcnQgb2Yge3RoaXM+fVxuXHRcdHByb3BlcnR5MTogdmFsdWUsXG5cdFx0cHJvcGVydHkyOiB2YWx1ZVxuXHR9XG5cdHZpZXdJbmZvOiB7XG5cdFx0dmlld0luZm86IHt9IC8vIEFzIHNwZWNpZmllZCBpbiB2aWV3IG9yIGZyYWdlbWVudCBjcmVhdGlvblxuXHR9LFxuXHR0cmFjZUlEOiB0aGlzLmluZGV4LCAvL0lEIGZvciB0aGlzIHRyYWNlIGluZm9ybWF0aW9uLFxuXHRtYWNyb0luZm86IHtcblx0XHRtYWNyb0lEOiBpbmRleCwgLy8gdHJhY2VJRCBvZiB0aGlzIG1hY3JvIChyZWR1bmRhbnQgZm9yIG1hY3Jvcylcblx0XHRwYXJlbnRNYWNyb0lELCBpbmRleCAvLyB0cmFjZUlEIG9mIHRoZSBwYXJlbnQgbWFjcm8gKGlmIGl0IGhhcyBhIHBhcmVudClcblx0fVxufVxuU3RydWN0dXJlIGZvciBhIGNvbnRyb2xcbntcblx0Y29udHJvbDogJycsIC8vY29udHJvbCBjbGFzc1xuXHRwcm9wZXJ0aWVzOiB7IC8vIE90aGVyIHByb3BlcnRpZXMgd2hpY2ggYmVjb21lIHBhcnQgb2Yge3RoaXM+fVxuXHRcdHByb3BlcnR5MToge1xuXHRcdFx0b3JpZ2luYWxWYWx1ZTogJycsIC8vVmFsdWUgYmVmb3JlIHRlbXBsYXRpbmdcblx0XHRcdHJlc29sdmVkVmFsdWU6ICcnIC8vVmFsdWUgYWZ0ZXIgdGVtcGxhdGluZ1xuXHRcdH1cblx0fVxuXHRjb250ZXh0czogeyAvL01vZGVscyBhbmQgQ29udGV4dHMgdXNlZCBkdXJpbmcgdGVtcGxhdGluZ1xuXHRcdC8vIE1vZGVsIG9yIGNvbnRleHQgbmFtZSB1c2VkIGZvciB0aGlzIGNvbnRyb2xcblx0XHRtb2RlbE5hbWUxOiB7IC8vIEZvciBPRGF0YU1ldGFNb2RlbFxuXHRcdFx0cGF0aDE6IHtcblx0XHRcdFx0cGF0aDogJycsIC8vYWJzb2x1dCBwYXRoIHdpdGhpbiBtZXRhbW9kZWxcblx0XHRcdFx0ZGF0YTogJycsIC8vZGF0YSBvZiBwYXRoIHVubGVzcyB0eXBlIE9iamVjdFxuXHRcdFx0fVxuXHRcdG1vZGVsTmFtZTI6IHtcblx0XHRcdC8vIGZvciBvdGhlciBtb2RlbCB0eXBlc1xuXHRcdFx0e1xuXHRcdFx0XHRwcm9wZXJ0eTE6IHZhbHVlLFxuXHRcdFx0XHRwcm9wZXJ0eTI6IHZhbHVlXG5cdFx0XHR9XG5cdFx0XHQvLyBJbiBjYXNlIGJpbmRpbmcgY2Fubm90IGJlIHJlc29sdmVkIC0+IG1hcmsgYXMgcnVudGltZSBiaW5kaW5nXG5cdFx0XHQvLyBUaGlzIGlzIG5vdCBhbHdheXMgdHJ1ZSwgZS5nLiBpbiBjYXNlIHRoZSBwYXRoIGlzIG1ldGFtb2RlbHBhdGhcblx0XHRcdHtcblx0XHRcdFx0XCJiaW5kaW5nRm9yXCI6IFwiUnVudGltZVwiXG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHR2aWV3SW5mbzoge1xuXHRcdHZpZXdJbmZvOiB7fSAvLyBBcyBzcGVjaWZpZWQgaW4gdmlldyBvciBmcmFnZW1lbnQgY3JlYXRpb25cblx0fSxcblx0bWFjcm9JbmZvOiB7XG5cdFx0bWFjcm9JRDogaW5kZXgsIC8vIHRyYWNlSUQgb2YgdGhlIG1hY3JvIHRoYXQgY3JlYXRlZCB0aGlzIGNvbnRyb2xcblx0XHRwYXJlbnRNYWNyb0lELCBpbmRleCAvLyB0cmFjZUlEIG9mIHRoZSBtYWNybydzIHBhcmVudCBtYWNyb1xuXHR9LFxuXHR0cmFjZUlEOiB0aGlzLmluZGV4IC8vSUQgZm9yIHRoaXMgdHJhY2UgaW5mb3JtYXRpb25cbn08L3ByZT4uXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbmFtZSBzYXAuZmUubWFjcm9zLlRyYWNlSW5mby5nZXRUcmFjZUluZm9cbiAqIEBwYXJhbSBpZCBUcmFjZUluZm8gaWRcbiAqIEByZXR1cm5zIE9iamVjdCAvIEFycmF5IGZvciBUcmFjZUluZm9cbiAqIEBwcml2YXRlXG4gKiBAc3RhdGljXG4gKi9cbmZ1bmN0aW9uIGdldFRyYWNlSW5mbyhpZDogbnVtYmVyKSB7XG5cdGlmIChpZCkge1xuXHRcdHJldHVybiBhVHJhY2VJbmZvW2lkXTtcblx0fVxuXHRjb25zdCBhRXJyb3JzID0gYVRyYWNlSW5mby5maWx0ZXIoZnVuY3Rpb24gKHRyYWNlSW5mbzogYW55KSB7XG5cdFx0cmV0dXJuIHRyYWNlSW5mby5lcnJvcjtcblx0fSk7XG5cdHJldHVybiAoYUVycm9ycy5sZW5ndGggPiAwICYmIGFFcnJvcnMpIHx8IGFUcmFjZUluZm87XG59XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBUcmFjZUluZm8gaXMgYWN0aXZlLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG5hbWUgc2FwLmZlLm1hY3Jvcy5UcmFjZUluZm8uaXNUcmFjZUluZm9BY3RpdmVcbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIGFjdGl2ZVxuICogQHByaXZhdGVcbiAqIEBzdGF0aWNcbiAqL1xuZnVuY3Rpb24gaXNUcmFjZUluZm9BY3RpdmUoKSB7XG5cdHJldHVybiB0cmFjZUlzT247XG59XG4vKipcbiAqIEB0eXBlZGVmIHNhcC5mZS5tYWNyb3MuVHJhY2VJbmZvXG4gKiBUcmFjZUluZm8gZm9yIFNBUCBGaW9yaSBlbGVtZW50c1xuICpcbiAqIE9uY2UgdHJhY2VzIGlzIHN3aXRjaGVkLCBpbmZvcm1hdGlvbiBhYm91dCBtYWNyb3MgYW5kIGNvbnRyb2xzXG4gKiB0aGF0IGFyZSBwcm9jZXNzZWQgZHVyaW5nIHhtbCBwcmVwcm9jZXNzaW5nICggQHNlZSB7QGxpbmsgc2FwLnVpLmNvcmUudXRpbC5YTUxQcmVwcm9jZXNzb3J9KVxuICogd2lsbCBiZSBjb2xsZWN0ZWQgd2l0aGluIHRoaXMgc2luZ2xldG9uXG4gKiBAbmFtZXNwYWNlXG4gKiBAcHJpdmF0ZVxuICogQGdsb2JhbFxuICogQGV4cGVyaW1lbnRhbCBUaGlzIG1vZHVsZSBpcyBvbmx5IGZvciBleHBlcmltZW50YWwgdXNlISA8YnIvPjxiPlRoaXMgaXMgb25seSBhIFBPQyBhbmQgbWF5YmUgZGVsZXRlZDwvYj5cbiAqIEBzaW5jZSAxLjc0LjBcbiAqL1xuZXhwb3J0IGRlZmF1bHQge1xuXHRpc1RyYWNlSW5mb0FjdGl2ZTogaXNUcmFjZUluZm9BY3RpdmUsXG5cdHRyYWNlTWFjcm9DYWxsczogdHJhY2VNYWNyb0NhbGxzLFxuXHRnZXRUcmFjZUluZm86IGdldFRyYWNlSW5mb1xufTtcbiJdfQ==
@@ -107,48 +107,50 @@ function collectContextInfo(sValue: any, oContexts: any, oVisitor: any, oNode: a
107
107
  .forEach(function (oContext: any) {
108
108
  const aParts = oContext.parts || [oContext];
109
109
  aParts
110
- .filter(function (oContext: any) {
111
- return oContext.path;
110
+ .filter(function (oPartContext: any) {
111
+ return oPartContext.path;
112
112
  })
113
- .forEach(function (oContext: any) {
114
- const oModel = (oContexts[oContext.model] = oContexts[oContext.model] || {});
113
+ .forEach(function (oPartContext: any) {
114
+ const oModel = (oContexts[oPartContext.model] = oContexts[oPartContext.model] || {});
115
115
  const sSimplePath =
116
- oContext.path.indexOf(">") < 0 ? (oContext.model && oContext.model + ">") + oContext.path : oContext.path;
116
+ oPartContext.path.indexOf(">") < 0
117
+ ? (oPartContext.model && `${oPartContext.model}>`) + oPartContext.path
118
+ : oPartContext.path;
117
119
  let oRealContext: any;
118
- let aParts;
120
+ let aInnerParts;
119
121
 
120
- if (typeof oContext.model === "undefined" && sSimplePath.indexOf(">") > -1) {
121
- aParts = sSimplePath.split(">");
122
- oContext.model = aParts[0];
123
- oContext.path = aParts[1];
122
+ if (typeof oPartContext.model === "undefined" && sSimplePath.indexOf(">") > -1) {
123
+ aInnerParts = sSimplePath.split(">");
124
+ oPartContext.model = aInnerParts[0];
125
+ oPartContext.path = aInnerParts[1];
124
126
  }
125
127
  try {
126
128
  oRealContext = oVisitor.getContext(sSimplePath);
127
129
  aPromises.push(
128
130
  oVisitor
129
- .getResult("{" + sSimplePath + "}", oNode)
131
+ .getResult(`{${sSimplePath}}`, oNode)
130
132
  .then(function (oResult: any) {
131
133
  if (oRealContext.getModel().getMetadata().getName() === "sap.ui.model.json.JSONModel") {
132
134
  if (!oResult.oModel) {
133
- oModel[oContext.path] = oResult; //oRealContext.getObject(oContext.path);
135
+ oModel[oPartContext.path] = oResult; //oRealContext.getObject(oContext.path);
134
136
  } else {
135
- oModel[oContext.path] = "Context from " + oResult.getPath();
137
+ oModel[oPartContext.path] = `Context from ${oResult.getPath()}`;
136
138
  }
137
139
  } else {
138
- oModel[oContext.path] = {
140
+ oModel[oPartContext.path] = {
139
141
  path: oRealContext.getPath(),
140
142
  data: typeof oResult === "object" ? "[ctrl/cmd-click] on path to see data" : oResult
141
143
  };
142
144
  }
143
145
  })
144
146
  .catch(function () {
145
- oModel[oContext.path] = {
147
+ oModel[oPartContext.path] = {
146
148
  bindingFor: "Runtime"
147
149
  };
148
150
  })
149
151
  );
150
152
  } catch (exc) {
151
- oModel[oContext.path] = {
153
+ oModel[oPartContext.path] = {
152
154
  bindingFor: "Runtime"
153
155
  };
154
156
  }
@@ -201,7 +203,7 @@ function resolve(oNode: any, oVisitor: any) {
201
203
  const sControlName = oNode.nodeName.split(":")[1] || oNode.nodeName,
202
204
  bIsControl = /^[A-Z]/.test(sControlName),
203
205
  oTraceMetadataContext: any = {
204
- control: oNode.namespaceURI + "." + (oNode.nodeName.split(":")[1] || oNode.nodeName)
206
+ control: `${oNode.namespaceURI}.${oNode.nodeName.split(":")[1] || oNode.nodeName}`
205
207
  };
206
208
 
207
209
  if (bIsControl) {
@@ -220,9 +222,10 @@ function resolve(oNode: any, oVisitor: any) {
220
222
  oNode.setAttributeNS(traceNamespace, "trace:traceID", oTraceMetadataContext.traceID);
221
223
  aTraceInfo.push(oTraceMetadataContext);
222
224
  }
223
- return oVisitor.visitAttributes(oNode).then(function () {
224
- return oVisitor.visitChildNodes(oNode);
225
- });
225
+ return oVisitor.visitAttributes(oNode);
226
+ })
227
+ .then(function () {
228
+ return oVisitor.visitChildNodes(oNode);
226
229
  })
227
230
  .catch(function (exc: any) {
228
231
  oTraceMetadataContext.error = {
@@ -249,12 +252,12 @@ if (traceIsOn) {
249
252
  * Adds information about the processing of one macro to the collection.
250
253
  *
251
254
  * @name sap.fe.macros.TraceInfo.traceMacroCalls
252
- * @param {string} sName Macro class name
253
- * @param {object} oMetadata Definition from (macro).metadata.js
254
- * @param {object} mContexts Available named contexts
255
- * @param {XMLNode} oNode
256
- * @param {object} oVisitor
257
- * @returns {object}
255
+ * @param sName Macro class name
256
+ * @param oMetadata Definition from (macro).metadata.js
257
+ * @param mContexts Available named contexts
258
+ * @param oNode
259
+ * @param oVisitor
260
+ * @returns The traced metadata context
258
261
  * @private
259
262
  * @ui5-restricted
260
263
  * @static
@@ -385,8 +388,8 @@ Structure for a control
385
388
  *
386
389
  * @function
387
390
  * @name sap.fe.macros.TraceInfo.getTraceInfo
388
- * @param {number} id TraceInfo id
389
- * @returns {object|Array} Object / Array for TraceInfo
391
+ * @param id TraceInfo id
392
+ * @returns Object / Array for TraceInfo
390
393
  * @private
391
394
  * @static
392
395
  */
@@ -404,7 +407,7 @@ function getTraceInfo(id: number) {
404
407
  *
405
408
  * @function
406
409
  * @name sap.fe.macros.TraceInfo.isTraceInfoActive
407
- * @returns {boolean} `true` when active
410
+ * @returns `true` when active
408
411
  * @private
409
412
  * @static
410
413
  */