@sapui5/sap.fe.core 1.124.2 → 1.126.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 (300) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +5 -1
  3. package/src/sap/fe/core/ActionRuntime.js +2 -2
  4. package/src/sap/fe/core/ActionRuntime.ts +4 -4
  5. package/src/sap/fe/core/AppComponent.js +2 -2
  6. package/src/sap/fe/core/AppComponent.ts +1 -1
  7. package/src/sap/fe/core/AppStateHandler.js +2 -2
  8. package/src/sap/fe/core/AppStateHandler.ts +1 -1
  9. package/src/sap/fe/core/BaseController.js +2 -2
  10. package/src/sap/fe/core/BaseController.ts +1 -1
  11. package/src/sap/fe/core/CommonUtils.js +3 -3
  12. package/src/sap/fe/core/CommonUtils.ts +12 -15
  13. package/src/sap/fe/core/ExtensionAPI.js +2 -2
  14. package/src/sap/fe/core/ExtensionAPI.ts +4 -3
  15. package/src/sap/fe/core/PageController.js +2 -2
  16. package/src/sap/fe/core/PageController.ts +1 -1
  17. package/src/sap/fe/core/ResourceModel.js +2 -2
  18. package/src/sap/fe/core/ResourceModel.ts +1 -1
  19. package/src/sap/fe/core/ReuseComponent.js +172 -0
  20. package/src/sap/fe/core/ReuseComponent.ts +165 -0
  21. package/src/sap/fe/core/TemplateComponent.js +2 -2
  22. package/src/sap/fe/core/TemplateComponent.ts +5 -1
  23. package/src/sap/fe/core/TemplateModel.js +2 -2
  24. package/src/sap/fe/core/TemplateModel.ts +1 -1
  25. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +92 -6
  26. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +90 -10
  27. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
  28. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +1 -1
  29. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +30 -3
  30. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +28 -4
  31. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +10 -16
  32. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +19 -16
  33. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +3 -3
  34. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +5 -5
  35. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +2 -2
  36. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +1 -1
  37. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +17 -5
  38. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +14 -6
  39. package/src/sap/fe/core/controllerextensions/ContextSharing.js +2 -2
  40. package/src/sap/fe/core/controllerextensions/ContextSharing.ts +1 -1
  41. package/src/sap/fe/core/controllerextensions/EditFlow.js +57 -43
  42. package/src/sap/fe/core/controllerextensions/EditFlow.ts +61 -46
  43. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +2 -2
  44. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +1 -1
  45. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +8 -11
  46. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +8 -16
  47. package/src/sap/fe/core/controllerextensions/InternalRouting.js +10 -7
  48. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +5 -5
  49. package/src/sap/fe/core/controllerextensions/KPIManagement.js +22 -18
  50. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +28 -23
  51. package/src/sap/fe/core/controllerextensions/MessageHandler.js +4 -4
  52. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +4 -1
  53. package/src/sap/fe/core/controllerextensions/PageReady.js +21 -15
  54. package/src/sap/fe/core/controllerextensions/PageReady.ts +29 -20
  55. package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
  56. package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
  57. package/src/sap/fe/core/controllerextensions/Placeholder.js +12 -6
  58. package/src/sap/fe/core/controllerextensions/Placeholder.ts +15 -1
  59. package/src/sap/fe/core/controllerextensions/Recommendations.js +26 -8
  60. package/src/sap/fe/core/controllerextensions/Recommendations.ts +29 -3
  61. package/src/sap/fe/core/controllerextensions/Routing.js +5 -7
  62. package/src/sap/fe/core/controllerextensions/Routing.ts +4 -4
  63. package/src/sap/fe/core/controllerextensions/Share.js +4 -4
  64. package/src/sap/fe/core/controllerextensions/Share.ts +10 -6
  65. package/src/sap/fe/core/controllerextensions/SideEffects.js +20 -5
  66. package/src/sap/fe/core/controllerextensions/SideEffects.ts +22 -2
  67. package/src/sap/fe/core/controllerextensions/Telemetry.js +2 -2
  68. package/src/sap/fe/core/controllerextensions/Telemetry.ts +1 -1
  69. package/src/sap/fe/core/controllerextensions/ViewState.js +79 -81
  70. package/src/sap/fe/core/controllerextensions/ViewState.ts +117 -105
  71. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +3 -3
  72. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +1 -1
  73. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
  74. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +2 -2
  75. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +17 -8
  76. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +8 -2
  77. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
  78. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +10 -9
  79. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +15 -10
  80. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +2 -2
  81. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +1 -1
  82. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +130 -158
  83. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +240 -275
  84. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +2 -2
  85. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +1 -1
  86. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +46 -28
  87. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +60 -32
  88. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +2 -2
  89. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +1 -1
  90. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +2 -2
  91. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +27 -3
  92. package/src/sap/fe/core/controls/CommandExecution.js +2 -2
  93. package/src/sap/fe/core/controls/CommandExecution.ts +2 -2
  94. package/src/sap/fe/core/controls/ComponentLoader.js +3 -3
  95. package/src/sap/fe/core/controls/ComponentLoader.ts +2 -2
  96. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +3 -3
  97. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +2 -2
  98. package/src/sap/fe/core/controls/EventDelegateHook.js +2 -2
  99. package/src/sap/fe/core/controls/EventDelegateHook.ts +2 -2
  100. package/src/sap/fe/core/controls/FormElementWrapper.js +51 -6
  101. package/src/sap/fe/core/controls/FormElementWrapper.ts +43 -2
  102. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +3 -3
  103. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +3 -3
  104. package/src/sap/fe/core/converters/ConverterContext.js +4 -2
  105. package/src/sap/fe/core/converters/ConverterContext.ts +5 -2
  106. package/src/sap/fe/core/converters/ManifestSettings.js +8 -2
  107. package/src/sap/fe/core/converters/ManifestSettings.ts +25 -3
  108. package/src/sap/fe/core/converters/ManifestWrapper.js +12 -3
  109. package/src/sap/fe/core/converters/ManifestWrapper.ts +11 -1
  110. package/src/sap/fe/core/converters/MetaModelConverter.js +7 -6
  111. package/src/sap/fe/core/converters/MetaModelConverter.ts +6 -2
  112. package/src/sap/fe/core/converters/annotations/DataField.js +56 -16
  113. package/src/sap/fe/core/converters/annotations/DataField.ts +74 -25
  114. package/src/sap/fe/core/converters/common/AnnotationConverter.js +19 -18
  115. package/src/sap/fe/core/converters/controls/Common/Action.js +5 -5
  116. package/src/sap/fe/core/converters/controls/Common/Action.ts +14 -14
  117. package/src/sap/fe/core/converters/controls/Common/Chart.js +40 -7
  118. package/src/sap/fe/core/converters/controls/Common/Chart.ts +56 -20
  119. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +8 -11
  120. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +23 -27
  121. package/src/sap/fe/core/converters/controls/Common/Form.js +10 -3
  122. package/src/sap/fe/core/converters/controls/Common/Form.ts +13 -4
  123. package/src/sap/fe/core/converters/controls/Common/KPI.js +3 -2
  124. package/src/sap/fe/core/converters/controls/Common/KPI.ts +6 -2
  125. package/src/sap/fe/core/converters/controls/Common/Table.js +137 -48
  126. package/src/sap/fe/core/converters/controls/Common/Table.ts +174 -52
  127. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +73 -21
  128. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +91 -20
  129. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +4 -4
  130. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +2 -2
  131. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +2 -2
  132. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +2 -2
  133. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +3 -3
  134. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +1 -1
  135. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +17 -16
  136. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +18 -17
  137. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +2 -2
  138. package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +1 -1
  139. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +9 -9
  140. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +12 -12
  141. package/src/sap/fe/core/converters/templates/ListReportConverter.js +13 -7
  142. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -5
  143. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +9 -73
  144. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +4 -74
  145. package/src/sap/fe/core/designtime/AppComponent.designtime.js +5 -10
  146. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +3 -12
  147. package/src/sap/fe/core/formatters/CriticalityFormatter.js +4 -7
  148. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +3 -3
  149. package/src/sap/fe/core/formatters/FiscalFormat.js +5 -3
  150. package/src/sap/fe/core/formatters/FiscalFormat.ts +4 -2
  151. package/src/sap/fe/core/formatters/StandardFormatter.js +2 -2
  152. package/src/sap/fe/core/formatters/StandardFormatter.ts +3 -3
  153. package/src/sap/fe/core/fpm/Component.js +3 -3
  154. package/src/sap/fe/core/fpm/Component.ts +3 -3
  155. package/src/sap/fe/core/fpm/manifest.json +1 -1
  156. package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.js +2 -2
  157. package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.ts +1 -1
  158. package/src/sap/fe/core/helpers/BindingHelper.js +2 -2
  159. package/src/sap/fe/core/helpers/BindingHelper.ts +2 -2
  160. package/src/sap/fe/core/helpers/BindingToolkitEvaluator.js +2 -2
  161. package/src/sap/fe/core/helpers/BindingToolkitEvaluator.ts +2 -2
  162. package/src/sap/fe/core/helpers/DeleteHelper.js +7 -4
  163. package/src/sap/fe/core/helpers/DeleteHelper.ts +9 -3
  164. package/src/sap/fe/core/helpers/MetaModelFunction.js +5 -5
  165. package/src/sap/fe/core/helpers/MetaModelFunction.ts +2 -2
  166. package/src/sap/fe/core/helpers/MetaPath.js +9 -3
  167. package/src/sap/fe/core/helpers/MetaPath.ts +8 -2
  168. package/src/sap/fe/core/helpers/ModelHelper.js +149 -3
  169. package/src/sap/fe/core/helpers/ModelHelper.ts +202 -6
  170. package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +3 -3
  171. package/src/sap/fe/core/helpers/StandardRecommendationHelper.ts +2 -2
  172. package/src/sap/fe/core/helpers/TitleHelper.js +4 -4
  173. package/src/sap/fe/core/helpers/TitleHelper.ts +4 -4
  174. package/src/sap/fe/core/library.js +4 -4
  175. package/src/sap/fe/core/library.ts +2 -1
  176. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +11 -3
  177. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +10 -2
  178. package/src/sap/fe/core/messagebundle.properties +8 -57
  179. package/src/sap/fe/core/messagebundle_ar.properties +2 -0
  180. package/src/sap/fe/core/messagebundle_bg.properties +2 -0
  181. package/src/sap/fe/core/messagebundle_ca.properties +2 -0
  182. package/src/sap/fe/core/messagebundle_cnr.properties +2 -0
  183. package/src/sap/fe/core/messagebundle_cs.properties +2 -0
  184. package/src/sap/fe/core/messagebundle_cy.properties +4 -2
  185. package/src/sap/fe/core/messagebundle_da.properties +2 -0
  186. package/src/sap/fe/core/messagebundle_de.properties +2 -0
  187. package/src/sap/fe/core/messagebundle_el.properties +2 -0
  188. package/src/sap/fe/core/messagebundle_en.properties +6 -57
  189. package/src/sap/fe/core/messagebundle_en_GB.properties +2 -0
  190. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +3 -36
  191. package/src/sap/fe/core/messagebundle_es.properties +2 -0
  192. package/src/sap/fe/core/messagebundle_es_MX.properties +2 -0
  193. package/src/sap/fe/core/messagebundle_et.properties +2 -0
  194. package/src/sap/fe/core/messagebundle_fi.properties +2 -0
  195. package/src/sap/fe/core/messagebundle_fr.properties +2 -0
  196. package/src/sap/fe/core/messagebundle_fr_CA.properties +3 -1
  197. package/src/sap/fe/core/messagebundle_hi.properties +2 -0
  198. package/src/sap/fe/core/messagebundle_hr.properties +2 -0
  199. package/src/sap/fe/core/messagebundle_hu.properties +3 -1
  200. package/src/sap/fe/core/messagebundle_id.properties +2 -0
  201. package/src/sap/fe/core/messagebundle_it.properties +2 -0
  202. package/src/sap/fe/core/messagebundle_iw.properties +3 -1
  203. package/src/sap/fe/core/messagebundle_ja.properties +2 -0
  204. package/src/sap/fe/core/messagebundle_kk.properties +2 -0
  205. package/src/sap/fe/core/messagebundle_ko.properties +2 -0
  206. package/src/sap/fe/core/messagebundle_lt.properties +2 -0
  207. package/src/sap/fe/core/messagebundle_lv.properties +2 -0
  208. package/src/sap/fe/core/messagebundle_mk.properties +2 -0
  209. package/src/sap/fe/core/messagebundle_ms.properties +2 -0
  210. package/src/sap/fe/core/messagebundle_nl.properties +2 -0
  211. package/src/sap/fe/core/messagebundle_no.properties +2 -0
  212. package/src/sap/fe/core/messagebundle_pl.properties +2 -0
  213. package/src/sap/fe/core/messagebundle_pt.properties +2 -0
  214. package/src/sap/fe/core/messagebundle_pt_PT.properties +2 -0
  215. package/src/sap/fe/core/messagebundle_ro.properties +2 -0
  216. package/src/sap/fe/core/messagebundle_ru.properties +2 -0
  217. package/src/sap/fe/core/messagebundle_sh.properties +64 -62
  218. package/src/sap/fe/core/messagebundle_sk.properties +2 -0
  219. package/src/sap/fe/core/messagebundle_sl.properties +2 -0
  220. package/src/sap/fe/core/messagebundle_sr.properties +2 -0
  221. package/src/sap/fe/core/messagebundle_sv.properties +2 -0
  222. package/src/sap/fe/core/messagebundle_th.properties +2 -0
  223. package/src/sap/fe/core/messagebundle_tr.properties +2 -0
  224. package/src/sap/fe/core/messagebundle_uk.properties +3 -1
  225. package/src/sap/fe/core/messagebundle_vi.properties +2 -0
  226. package/src/sap/fe/core/messagebundle_zh_CN.properties +2 -0
  227. package/src/sap/fe/core/messagebundle_zh_TW.properties +2 -0
  228. package/src/sap/fe/core/operationsHelper.js +3 -3
  229. package/src/sap/fe/core/operationsHelper.ts +2 -2
  230. package/src/sap/fe/core/rootView/Fcl.controller.js +3 -3
  231. package/src/sap/fe/core/rootView/Fcl.controller.ts +2 -2
  232. package/src/sap/fe/core/rootView/NavContainer.controller.js +2 -2
  233. package/src/sap/fe/core/rootView/NavContainer.controller.ts +1 -1
  234. package/src/sap/fe/core/rootView/RootViewBaseController.js +114 -92
  235. package/src/sap/fe/core/rootView/RootViewBaseController.ts +120 -106
  236. package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +2 -2
  237. package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.ts +1 -1
  238. package/src/sap/fe/core/services/NavigationServiceFactory.js +6 -4
  239. package/src/sap/fe/core/services/NavigationServiceFactory.ts +4 -3
  240. package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -2
  241. package/src/sap/fe/core/services/RoutingServiceFactory.ts +1 -1
  242. package/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
  243. package/src/sap/fe/core/services/ShellServicesFactory.ts +12 -2
  244. package/src/sap/fe/core/services/TelemetryServiceFactory.js +8 -2
  245. package/src/sap/fe/core/services/TelemetryServiceFactory.ts +7 -1
  246. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +16 -9
  247. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +22 -11
  248. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +2 -2
  249. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.ts +1 -1
  250. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +2 -2
  251. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +1 -1
  252. package/src/sap/fe/core/templating/ActionHelper.js +2 -2
  253. package/src/sap/fe/core/templating/ActionHelper.ts +2 -2
  254. package/src/sap/fe/core/templating/CommonFormatters.js +2 -2
  255. package/src/sap/fe/core/templating/CommonFormatters.ts +3 -3
  256. package/src/sap/fe/core/templating/CriticalityFormatters.js +2 -2
  257. package/src/sap/fe/core/templating/CriticalityFormatters.ts +2 -2
  258. package/src/sap/fe/core/templating/DataFieldFormatters.js +4 -4
  259. package/src/sap/fe/core/templating/DataFieldFormatters.ts +2 -2
  260. package/src/sap/fe/core/templating/DataModelPathHelper.js +2 -2
  261. package/src/sap/fe/core/templating/DataModelPathHelper.ts +2 -2
  262. package/src/sap/fe/core/templating/EntityTypeHelper.js +2 -2
  263. package/src/sap/fe/core/templating/EntityTypeHelper.ts +2 -2
  264. package/src/sap/fe/core/templating/FieldControlHelper.js +2 -2
  265. package/src/sap/fe/core/templating/FieldControlHelper.ts +2 -2
  266. package/src/sap/fe/core/templating/SemanticObjectHelper.js +2 -2
  267. package/src/sap/fe/core/templating/SemanticObjectHelper.ts +2 -2
  268. package/src/sap/fe/core/templating/UIFormatters.js +7 -7
  269. package/src/sap/fe/core/templating/UIFormatters.ts +6 -6
  270. package/src/sap/fe/core/type/DateTimeWithTimezone.js +2 -2
  271. package/src/sap/fe/core/type/DateTimeWithTimezone.ts +1 -1
  272. package/src/sap/fe/core/type/Email.js +2 -2
  273. package/src/sap/fe/core/type/Email.ts +1 -1
  274. package/src/sap/fe/core/type/FiscalDate.js +2 -2
  275. package/src/sap/fe/core/type/FiscalDate.ts +1 -1
  276. package/src/sap/fe/core/type/InputMask.js +124 -0
  277. package/src/sap/fe/core/type/InputMask.ts +131 -0
  278. package/ui5.yaml +19 -0
  279. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js +0 -81
  280. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.ts +0 -117
  281. package/src/sap/fe/core/helpers/AnnotationEnum.js +0 -33
  282. package/src/sap/fe/core/helpers/AnnotationEnum.ts +0 -21
  283. package/src/sap/fe/core/helpers/BindingToolkit.js +0 -1813
  284. package/src/sap/fe/core/helpers/BindingToolkit.ts +0 -2450
  285. package/src/sap/fe/core/helpers/ClassSupport.js +0 -584
  286. package/src/sap/fe/core/helpers/ClassSupport.ts +0 -697
  287. package/src/sap/fe/core/jsx-runtime/Fragment.js +0 -14
  288. package/src/sap/fe/core/jsx-runtime/Fragment.ts +0 -3
  289. package/src/sap/fe/core/jsx-runtime/ViewLoader.js +0 -93
  290. package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +0 -86
  291. package/src/sap/fe/core/jsx-runtime/jsx-control.js +0 -177
  292. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +0 -197
  293. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +0 -237
  294. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +0 -246
  295. package/src/sap/fe/core/jsx-runtime/jsx.js +0 -47
  296. package/src/sap/fe/core/jsx-runtime/jsx.ts +0 -71
  297. package/src/sap/fe/core/jsx-runtime/jsxs.js +0 -10
  298. package/src/sap/fe/core/jsx-runtime/jsxs.ts +0 -3
  299. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +0 -172
  300. package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +0 -194
@@ -1,7 +1,5 @@
1
1
  import type { Boolean, EntitySet } from "@sap-ux/vocabularies-types";
2
- import type { PageContextPathTarget } from "sap/fe/core/converters/TemplateConverter";
3
- import type { BaseAction } from "sap/fe/core/converters/controls/Common/Action";
4
- import type { BindingToolkitExpression, CompiledBindingToolkitExpression } from "sap/fe/core/helpers/BindingToolkit";
2
+ import type { BindingToolkitExpression, CompiledBindingToolkitExpression } from "sap/fe/base/BindingToolkit";
5
3
  import {
6
4
  and,
7
5
  compileExpression,
@@ -20,7 +18,9 @@ import {
20
18
  notEqual,
21
19
  or,
22
20
  pathInModel
23
- } from "sap/fe/core/helpers/BindingToolkit";
21
+ } from "sap/fe/base/BindingToolkit";
22
+ import type { PageContextPathTarget } from "sap/fe/core/converters/TemplateConverter";
23
+ import type { BaseAction } from "sap/fe/core/converters/controls/Common/Action";
24
24
  import ModelHelper from "sap/fe/core/helpers/ModelHelper";
25
25
  import { isEntitySet, isNavigationProperty, isSingleton } from "sap/fe/core/helpers/TypeGuards";
26
26
  import { getTargetObjectPath, isPathDeletable, isPathInsertable, isPathUpdatable } from "sap/fe/core/templating/DataModelPathHelper";
@@ -71,7 +71,9 @@ export const StandardActionKeys = {
71
71
  CreationRow: "StandardAction::CreationRow",
72
72
  Paste: "StandardAction::Paste",
73
73
  MassEdit: "StandardAction::MassEdit",
74
- Insights: "StandardAction::Insights"
74
+ Insights: "StandardAction::Insights",
75
+ MoveUp: "StandardAction::MoveUp",
76
+ MoveDown: "StandardAction::MoveDown"
75
77
  };
76
78
 
77
79
  /**
@@ -277,12 +279,40 @@ export function getStandardActionCut(
277
279
  return {
278
280
  isTemplated: compileExpression(getDefaultTemplating(cutVisibility)),
279
281
  visible: compileExpression(cutVisibility),
280
- enabled: compileExpression(getCutEnablement(cutVisibility, standardActionsContext)),
282
+ enabled: compileExpression(getCutEnablement(cutVisibility, standardActionsContext, false)),
283
+ enabledForContextMenu: compileExpression(getCutEnablement(cutVisibility, standardActionsContext, true)),
281
284
  key: StandardActionKeys.Cut,
282
285
  type: ActionType.Standard
283
286
  };
284
287
  }
285
288
 
289
+ /**
290
+ * Gets the binding expressions for the properties of the 'Move up' and 'Move down' actions.
291
+ *
292
+ * @param converterContext
293
+ * @param standardActionsContext
294
+ * @param forUp
295
+ * @returns The standard action info
296
+ */
297
+ export function getStandardActionMoveUpDown(
298
+ converterContext: ConverterContext<PageContextPathTarget>,
299
+ standardActionsContext: StandardActionsContext,
300
+ forUp: boolean
301
+ ): StandardAction {
302
+ const canChangeSibling =
303
+ converterContext.getEntityType().annotations.Hierarchy?.[
304
+ `RecursiveHierarchyActions#${standardActionsContext.tableManifestConfiguration.hierarchyQualifier ?? ""}`
305
+ ]?.ChangeNextSiblingAction !== undefined;
306
+ const moveVisibility = and(getCutVisibility(converterContext, standardActionsContext), canChangeSibling);
307
+ return {
308
+ isTemplated: compileExpression(getDefaultTemplating(moveVisibility)),
309
+ visible: compileExpression(moveVisibility),
310
+ enabled: compileExpression(getMoveUpDownEnablement(moveVisibility, standardActionsContext, forUp)),
311
+ key: forUp ? StandardActionKeys.MoveUp : StandardActionKeys.MoveDown,
312
+ type: ActionType.Standard
313
+ };
314
+ }
315
+
286
316
  /**
287
317
  * Gets the binding expressions for the properties of the 'Delete' action.
288
318
  *
@@ -374,7 +404,6 @@ export function getStandardActionPaste(
374
404
  ): StandardAction {
375
405
  const cutVisibility = getCutVisibility(converterContext, standardActionsContext);
376
406
  const createVisibility = getCreateVisibility(converterContext, standardActionsContext, false, true);
377
- const createEnablement = getCreateEnablement(converterContext, standardActionsContext, createVisibility);
378
407
  const pasteVisibility = getPasteVisibility(
379
408
  converterContext,
380
409
  standardActionsContext,
@@ -382,9 +411,12 @@ export function getStandardActionPaste(
382
411
  cutVisibility,
383
412
  isInsertUpdateActionsTemplated
384
413
  );
414
+ const pasteEnablement = getPasteEnablement(pasteVisibility, standardActionsContext, false);
415
+ const pasteEnablementForContextMenu = getPasteEnablement(pasteVisibility, standardActionsContext, true);
385
416
  return {
386
417
  visible: compileExpression(pasteVisibility),
387
- enabled: compileExpression(getPasteEnablement(pasteVisibility, createEnablement, standardActionsContext)),
418
+ enabled: compileExpression(pasteEnablement),
419
+ enabledForContextMenu: compileExpression(pasteEnablementForContextMenu),
388
420
  key: StandardActionKeys.Paste,
389
421
  type: ActionType.Standard
390
422
  };
@@ -616,12 +648,18 @@ export function getPasteVisibility(
616
648
  //If it isn't deactivated within the manifest and we're operating in OP/blocks outside Fiori elements templates,
617
649
  //the treeTable's visibility relies on the cutvisibility,
618
650
  //while the visibility of the other table is determined by insertable restrictions and create visibility.
651
+ let updateOnNavigation = standardActionsContext.restrictions?.isUpdatable?.navigationExpression;
652
+ if (updateOnNavigation?._type === "Unresolvable") {
653
+ updateOnNavigation = constant(true);
654
+ }
619
655
  return and(
620
656
  standardActionsContext.tableManifestConfiguration.type === "TreeTable"
621
657
  ? cutVisibility
622
658
  : and(
623
- createVisibility,
624
- standardActionsContext.restrictions.isInsertable.expression,
659
+ or(
660
+ and(createVisibility, standardActionsContext.restrictions.isInsertable.expression),
661
+ and(UI.IsEditable, updateOnNavigation)
662
+ ),
625
663
  notEqual(standardActionsContext.tableManifestConfiguration.enablePaste, false),
626
664
  ![TemplateType.ListReport, TemplateType.AnalyticalListPage].includes(converterContext.getTemplateType())
627
665
  ),
@@ -642,7 +680,7 @@ export function getMassEditVisibility(
642
680
  ): BindingToolkitExpression<boolean> {
643
681
  const isUpdateHidden = standardActionsContext.hiddenAnnotation.update,
644
682
  pathUpdatableExpression = standardActionsContext.restrictions.isUpdatable.expression,
645
- bMassEditEnabledInManifest: boolean = standardActionsContext.tableManifestConfiguration?.enableMassEdit || false;
683
+ massEditEnabledInManifest: boolean = standardActionsContext.tableManifestConfiguration?.massEdit.enabled || false;
646
684
  const templateBindingExpression =
647
685
  converterContext.getTemplateType() === TemplateType.ObjectPage
648
686
  ? UI.IsEditable
@@ -656,7 +694,7 @@ export function getMassEditVisibility(
656
694
  // Button is hidden for all other cases
657
695
  return and(
658
696
  not(and(isConstant(pathUpdatableExpression), equal(pathUpdatableExpression, false))),
659
- bMassEditEnabledInManifest,
697
+ massEditEnabledInManifest,
660
698
  templateBindingExpression,
661
699
  not(isUpdateHidden)
662
700
  );
@@ -805,16 +843,16 @@ export function getDeleteEnablement(
805
843
  * Gets the binding expression for the 'enabled' property of the 'Paste' action.
806
844
  *
807
845
  * @param pasteVisibility
808
- * @param createEnablement
809
846
  * @param standardActionsContext
810
847
  * @returns The binding expression for the 'enabled' property of the 'Paste' action.
811
848
  */
812
849
  export function getPasteEnablement(
813
850
  pasteVisibility: BindingToolkitExpression<boolean>,
814
- createEnablement: BindingToolkitExpression<boolean>,
815
- standardActionsContext: StandardActionsContext
851
+ standardActionsContext: StandardActionsContext,
852
+ forContextMenu: boolean
816
853
  ): BindingToolkitExpression<boolean> {
817
854
  if (standardActionsContext.tableManifestConfiguration.type === "TreeTable") {
855
+ const numberOfSelectedContextsPath = !forContextMenu ? "numberOfSelectedContexts" : "contextmenu/numberOfSelectedContexts";
818
856
  return and(
819
857
  pasteVisibility,
820
858
  or(
@@ -824,13 +862,17 @@ export function getPasteEnablement(
824
862
  and(
825
863
  equal(length(pathInModel("pastableContexts", "internal"), true), 1),
826
864
  standardActionsContext.tableManifestConfiguration.type === "TreeTable"
827
- ? lessOrEqual(pathInModel("numberOfSelectedContexts", "internal"), 1)
865
+ ? lessOrEqual(pathInModel(numberOfSelectedContextsPath, "internal"), 1)
828
866
  : true,
829
867
  equal(pathInModel("pasteAuthorized", "internal"), true)
830
868
  )
831
869
  );
832
870
  }
833
- return and(pasteVisibility, createEnablement);
871
+ let updateOnNavigation = standardActionsContext.restrictions?.isUpdatable?.navigationExpression;
872
+ if (updateOnNavigation?._type === "Unresolvable") {
873
+ updateOnNavigation = constant(true);
874
+ }
875
+ return and(updateOnNavigation, pasteVisibility);
834
876
  }
835
877
 
836
878
  /**
@@ -881,11 +923,14 @@ export function getMassEditEnablement(
881
923
  */
882
924
  export function getCutEnablement(
883
925
  cutVisibility: BindingToolkitExpression<boolean>,
884
- standardActionsContext: StandardActionsContext
926
+ standardActionsContext: StandardActionsContext,
927
+ forContextMenu: boolean
885
928
  ): BindingToolkitExpression<boolean> {
886
- const numberOfSelectedContexts = equal(pathInModel("numberOfSelectedContexts", "internal"), 1);
929
+ const numberOfSelectedContextsPath = !forContextMenu ? "numberOfSelectedContexts" : "contextmenu/numberOfSelectedContexts";
930
+ const numberOfSelectedContexts = equal(pathInModel(numberOfSelectedContextsPath, "internal"), 1);
931
+ const cutableContextsPath = !forContextMenu ? "cutableContexts" : "contextmenu/cutableContexts";
887
932
 
888
- const runtimeBinding = and(numberOfSelectedContexts, equal(length(pathInModel("cutableContexts", "internal"), true), 1));
933
+ const runtimeBinding = and(numberOfSelectedContexts, equal(length(pathInModel(cutableContextsPath, "internal"), true), 1));
889
934
  return and(
890
935
  cutVisibility,
891
936
  or(
@@ -896,6 +941,32 @@ export function getCutEnablement(
896
941
  );
897
942
  }
898
943
 
944
+ /**
945
+ * Gets the binding expression for the 'enabled' property of the 'Move up' and 'Move down' actions.
946
+ *
947
+ * @param moveUpDownVisibility
948
+ * @param standardActionsContext
949
+ * @param forUp
950
+ * @returns The binding expression
951
+ */
952
+ function getMoveUpDownEnablement(
953
+ moveUpDownVisibility: BindingToolkitExpression<boolean>,
954
+ standardActionsContext: StandardActionsContext,
955
+ forUp: boolean
956
+ ): BindingToolkitExpression<boolean> {
957
+ const runtimeBinding = forUp
958
+ ? equal(pathInModel("singleContextMovableUp", "internal"), true)
959
+ : equal(pathInModel("singleContextMovableDown", "internal"), true);
960
+ return and(
961
+ moveUpDownVisibility,
962
+ or(
963
+ standardActionsContext.restrictions.isUpdatable.navigationExpression._type === "Unresolvable",
964
+ standardActionsContext.restrictions.isUpdatable.expression
965
+ ),
966
+ runtimeBinding
967
+ );
968
+ }
969
+
899
970
  /**
900
971
  * Tells if the table in template is in display mode.
901
972
  *
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2024 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/fe/core/converters/helpers/Aggregation", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/helpers/BindingToolkit", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/FilterTemplating"], function (Aggregation, IssueManager, BindingToolkit, TypeGuards, DataModelPathHelper, FilterTemplating) {
5
+ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/helpers/Aggregation", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/FilterTemplating"], function (BindingToolkit, Aggregation, IssueManager, TypeGuards, DataModelPathHelper, FilterTemplating) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
@@ -10,12 +10,12 @@ sap.ui.define(["sap/fe/core/converters/helpers/Aggregation", "sap/fe/core/conver
10
10
  var getIsRequired = FilterTemplating.getIsRequired;
11
11
  var checkFilterExpressionRestrictions = DataModelPathHelper.checkFilterExpressionRestrictions;
12
12
  var isEntitySet = TypeGuards.isEntitySet;
13
- var not = BindingToolkit.not;
14
- var compileExpression = BindingToolkit.compileExpression;
15
13
  var IssueType = IssueManager.IssueType;
16
14
  var IssueSeverity = IssueManager.IssueSeverity;
17
15
  var IssueCategory = IssueManager.IssueCategory;
18
16
  var AggregationHelper = Aggregation.AggregationHelper;
17
+ var not = BindingToolkit.not;
18
+ var compileExpression = BindingToolkit.compileExpression;
19
19
  /**
20
20
  * Checks that measures and dimensions of the visual filter chart can be aggregated and grouped.
21
21
  *
@@ -311,4 +311,4 @@ sap.ui.define(["sap/fe/core/converters/helpers/Aggregation", "sap/fe/core/conver
311
311
  _exports._addInParameters = _addInParameters;
312
312
  return _exports;
313
313
  }, false);
314
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2hlY2tWRkFnZ3JlZ2F0aW9uIiwiY29udmVydGVyQ29udGV4dCIsImNoYXJ0QW5ub3RhdGlvbiIsImFnZ3JlZ2F0aW9uSGVscGVyIiwic01lYXN1cmVQYXRoIiwiYkdyb3VwYWJsZSIsImJBZ2dyZWdhdGFibGUiLCJzTWVhc3VyZSIsImN1c3RvbUFnZ3JlZ2F0ZXMiLCJnZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucyIsImFUcmFuc0FnZ3JlZ2F0aW9ucyIsImdldFRyYW5zQWdncmVnYXRpb25zIiwiYUN1c3RBZ2dNZWFzdXJlIiwiJHRhcmdldCIsIk1lYXN1cmVzIiwiZmlsdGVyIiwiY3VzdEFnZyIsInF1YWxpZmllciIsInZhbHVlIiwibGVuZ3RoIiwiRHluYW1pY01lYXN1cmVzIiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidGFyZ2V0T2JqZWN0IiwiTmFtZSIsInRvU3RyaW5nIiwiZ2V0QWdncmVnYXRlZFByb3BlcnR5IiwiZ2V0QWdncmVnYXRlZFByb3BlcnRpZXMiLCJzRGltZW5zaW9uIiwiRGltZW5zaW9ucyIsInNvbWUiLCJvQWdncmVnYXRlIiwiQWdncmVnYXRhYmxlUHJvcGVydHkiLCJhQWdncmVnYXRhYmxlUHJvcHNGcm9tQ29udGFpbmVyIiwiZ2V0QWdncmVnYXRhYmxlUHJvcGVydGllcyIsImFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXIiLCJnZXRHcm91cGFibGVQcm9wZXJ0aWVzIiwiYWdncmVnYXRhYmxlUHJvcCIsIlByb3BlcnR5IiwiZ3JvdXBhYmxlUHJvcCIsImdldFZpc3VhbEZpbHRlcnMiLCJlbnRpdHlUeXBlIiwic1Byb3BlcnR5UGF0aCIsIkZpbHRlckZpZWxkcyIsInZpc3VhbEZpbHRlciIsIm9WaXN1YWxGaWx0ZXIiLCJ2YWx1ZUxpc3QiLCJvVkZQYXRoIiwiYW5ub3RhdGlvblF1YWxpZmllclNwbGl0Iiwic3BsaXQiLCJxdWFsaWZpZXJWTCIsInByb3BlcnR5IiwicmVzb2x2ZVBhdGgiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsImlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIiwiVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIiwidmFsdWVPZiIsImNvbGxlY3Rpb25QYXRoIiwiQ29sbGVjdGlvblBhdGgiLCJjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQiLCJnZXRFbnRpdHlTZXQiLCJuYW1lIiwidmFsdWVMaXN0UGFyYW1zIiwiUGFyYW1ldGVycyIsIm91dFBhcmFtZXRlciIsImluUGFyYW1ldGVycyIsImFQYXJhbWV0ZXJzIiwicGFyYW1ldGVyRW50aXR5VHlwZSIsImdldFBhcmFtZXRlckVudGl0eVR5cGUiLCJrZXlzIiwibWFwIiwia2V5IiwiZ2V0Q29udGV4dFBhdGgiLCJfYWRkSW5QYXJhbWV0ZXJzIiwidmFsdWVMaXN0UGFyYW0iLCJsb2NhbERhdGFQcm9wZXJ0eSIsIkxvY2FsRGF0YVByb3BlcnR5IiwidmFsdWVMaXN0UHJvcGVydHkiLCJWYWx1ZUxpc3RQcm9wZXJ0eSIsIiRUeXBlIiwiYk5vdEZpbHRlcmFibGUiLCJpc1Byb3BlcnR5RmlsdGVyYWJsZSIsInB1c2giLCJmb3JFYWNoIiwib0luUGFyYW1ldGVyIiwibWFpbkVudGl0eVNldEluTWFwcGluZ0FsbG93ZWRFeHByZXNzaW9uIiwiY29tcGlsZUV4cHJlc3Npb24iLCJjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJ2YWx1ZUxpc3RFbnRpdHlTZXRJbk1hcHBpbmdBbGxvd2VkRXhwcmVzc2lvbiIsIkVycm9yIiwicHZRdWFsaWZpZXIiLCJQcmVzZW50YXRpb25WYXJpYW50UXVhbGlmaWVyIiwic3ZRdWFsaWZpZXIiLCJTZWxlY3Rpb25WYXJpYW50UXVhbGlmaWVyIiwicHZBbm5vdGF0aW9uIiwiZ2V0RW50aXR5VHlwZSIsIlVJIiwiQWdncmVnYXRpb25IZWxwZXIiLCJpc0FuYWx5dGljc1N1cHBvcnRlZCIsInVuZGVmaW5lZCIsImFWaXN1YWxpemF0aW9ucyIsIlZpc3VhbGl6YXRpb25zIiwiY29udGV4dFBhdGgiLCJ2aXN1YWxpemF0aW9uIiwidGVybSIsIl9iZ2V0VkZBZ2dyZWdhdGlvbiIsImJEaW1lbnNpb25IaWRkZW4iLCJIaWRkZW4iLCJiRGltZW5zaW9uSGlkZGVuRmlsdGVyIiwiSGlkZGVuRmlsdGVyIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZW50aXR5U2V0TmFtZSIsInByZXNlbnRhdGlvbkFubm90YXRpb24iLCJyZWxhdGl2ZUFubm90YXRpb25QYXRoIiwiZ2V0UmVsYXRpdmVBbm5vdGF0aW9uUGF0aCIsInZhbHVlbGlzdFByb3BlcnR5IiwiYklzUmFuZ2UiLCJnZXREaWFnbm9zdGljcyIsImFkZElzc3VlIiwiSXNzdWVDYXRlZ29yeSIsIkFubm90YXRpb24iLCJJc3N1ZVNldmVyaXR5IiwiSGlnaCIsIklzc3VlVHlwZSIsIk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTIiwiVkFMVUVMSVNUIiwiYklzTWFpbkVudGl0eVNldFNpbmdsZVNlbGVjdGlvbiIsIm11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZCIsIm5vdCIsInJlcXVpcmVkIiwiZ2V0SXNSZXF1aXJlZCIsInN2QW5ub3RhdGlvbiIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiYW5ub3RhdGlvbiIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwicmVsYXRpdmVTZWxlY3Rpb25WYXJpYW50UGF0aCIsInJlcXVpcmVkUHJvcGVydGllcyIsInNFbnRpdHlTZXQiLCJzTmF2aWdhdGlvblByb3BlcnR5Iiwib0VudGl0eVNldENvbnZlcnRlckNvbnRleHQiLCJhUmVzdHJpY3RlZFByb3BlcnRpZXMiLCJzdGFydGluZ0VudGl0eVNldCIsIkNhcGFiaWxpdGllcyIsIk5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJSZXN0cmljdGVkUHJvcGVydGllcyIsIm9SZXN0cmljdGVkUHJvcGVydHkiLCJmaW5kIiwicmVzdHJpY3RlZE5hdlByb3AiLCJOYXZpZ2F0aW9uUHJvcGVydHkiLCJ0eXBlIiwiRmlsdGVyUmVzdHJpY3Rpb25zIiwiUmVxdWlyZWRQcm9wZXJ0aWVzIiwiZW50aXR5U2V0T3JTaW5nbGV0b24iLCJpc0VudGl0eVNldCIsInJlcXVpcmVkUHJvcGVydHlQYXRocyIsIm9SZXF1aXJlUHJvcGVydHkiLCJjb25jYXQiLCJzaG93T3ZlcmxheUluaXRpYWxseSIsInNlbGVjdE9wdGlvbnMiLCJTZWxlY3RPcHRpb25zIiwib1NlbGVjdE9wdGlvbiIsIlByb3BlcnR5TmFtZSIsInBhcmFtZXRlck9wdGlvbnMiLCJvUGFyYW1ldGVyT3B0aW9uIiwic29ydCIsInNQYXRoIiwiaW5jbHVkZXMiLCJzRGltZW5zaW9uVHlwZSIsInJlbmRlckxpbmVDaGFydCIsIkNoYXJ0VHlwZSIsIkNIQVJUIiwiUFJFU0VOVEFUSU9OVkFSSUFOVCIsIk1hbmlmZXN0IiwiaW5QYXJhbXMiLCJwcm9wZXJ0aWVzIiwiaXNQYXJhbSIsImVsZW1lbnQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlZpc3VhbEZpbHRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uUGF0aCwgRW50aXR5U2V0LCBFbnRpdHlUeXBlLCBQcm9wZXJ0eSwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEFnZ3JlZ2F0YWJsZVByb3BlcnR5VHlwZSwgQ3VzdG9tQWdncmVnYXRlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBBZ2dyZWdhdGVkUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0FuYWx5dGljc1wiO1xuaW1wb3J0IHR5cGUgeyBOYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9DYXBhYmlsaXRpZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0VmFsdWVMaXN0LFxuXHRWYWx1ZUxpc3RQYXJhbWV0ZXJJbixcblx0VmFsdWVMaXN0UGFyYW1ldGVySW5PdXQsXG5cdFZhbHVlTGlzdFBhcmFtZXRlck91dFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBDaGFydCwgUGFyYW1ldGVyVHlwZXMsIFNlbGVjdGlvblZhcmlhbnQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQWdncmVnYXRpb25cIjtcbmltcG9ydCB7IElzc3VlQ2F0ZWdvcnksIElzc3VlU2V2ZXJpdHksIElzc3VlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBub3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgaXNFbnRpdHlTZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgeyBjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRJc1JlcXVpcmVkLCBpc1Byb3BlcnR5RmlsdGVyYWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0ZpbHRlclRlbXBsYXRpbmdcIjtcblxuZXhwb3J0IHR5cGUgVmlzdWFsRmlsdGVycyA9IHtcblx0ZGltZW5zaW9uUGF0aD86IHN0cmluZztcblx0bWVhc3VyZVBhdGg/OiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHRjaGFydEFubm90YXRpb24/OiBzdHJpbmc7XG5cdHByZXNlbnRhdGlvbkFubm90YXRpb24/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBib29sZWFuO1xuXHRvdXRQYXJhbWV0ZXI/OiBzdHJpbmc7XG5cdGluUGFyYW1ldGVycz86IG9iamVjdFtdO1xuXHR2YWx1ZWxpc3RQcm9wZXJ0eT86IHN0cmluZztcblx0Y29udGV4dFBhdGg/OiBzdHJpbmc7XG5cdHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogc3RyaW5nO1xuXHRtdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWQ/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHRzaG93T3ZlcmxheUluaXRpYWxseT86IGJvb2xlYW47XG5cdHJlbmRlckxpbmVDaGFydD86IGJvb2xlYW47XG5cdHJlcXVpcmVkUHJvcGVydGllcz86IHN0cmluZ1tdO1xuXHRpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcz86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIENoZWNrcyB0aGF0IG1lYXN1cmVzIGFuZCBkaW1lbnNpb25zIG9mIHRoZSB2aXN1YWwgZmlsdGVyIGNoYXJ0IGNhbiBiZSBhZ2dyZWdhdGVkIGFuZCBncm91cGVkLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGNoYXJ0QW5ub3RhdGlvbiBUaGUgY2hhcnQgYW5ub3RhdGlvblxuICogQHBhcmFtIGFnZ3JlZ2F0aW9uSGVscGVyIFRoZSBhZ2dyZWdhdGlvbiBoZWxwZXJcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbWVhc3VyZSBjYW4gYmUgZ3JvdXBlZCBhbmQgYWdncmVnYXRlZFxuICovXG5jb25zdCBfY2hlY2tWRkFnZ3JlZ2F0aW9uID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGNoYXJ0QW5ub3RhdGlvbjogQW5ub3RhdGlvblBhdGg8Q2hhcnQ+LFxuXHRhZ2dyZWdhdGlvbkhlbHBlcjogQWdncmVnYXRpb25IZWxwZXJcbik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHRsZXQgc01lYXN1cmVQYXRoLCBiR3JvdXBhYmxlLCBiQWdncmVnYXRhYmxlO1xuXHRsZXQgc01lYXN1cmU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0Y29uc3QgY3VzdG9tQWdncmVnYXRlcyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zKCk7XG5cdGxldCBhVHJhbnNBZ2dyZWdhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRUcmFuc0FnZ3JlZ2F0aW9ucygpO1xuXHRsZXQgYUN1c3RBZ2dNZWFzdXJlID0gW10gYXMgQXJyYXk8Q3VzdG9tQWdncmVnYXRlPjtcblx0Ly8gaWYgdGhlIGNoYXJ0IGRlZmluaXRpb24gaGFzIGN1c3RvbSBhZ2dyZWdhdGVzLCB0aGVuIGNvbnNpZGVyIHRoZW0sIGVsc2UgZmFsbCBiYWNrIHRvIHRoZSBtZWFzdXJlcyB3aXRoIHRyYW5zZm9ybWF0aW9uIGFnZ3JlZ2F0ZXNcblx0aWYgKGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uTWVhc3VyZXMpIHtcblx0XHRhQ3VzdEFnZ01lYXN1cmUgPSBjdXN0b21BZ2dyZWdhdGVzLmZpbHRlcihmdW5jdGlvbiAoY3VzdEFnZzogQ3VzdG9tQWdncmVnYXRlKSB7XG5cdFx0XHRyZXR1cm4gY3VzdEFnZy5xdWFsaWZpZXIgPT09IGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uTWVhc3VyZXM/LlswXT8udmFsdWU7XG5cdFx0fSk7XG5cdFx0c01lYXN1cmUgPSBhQ3VzdEFnZ01lYXN1cmUubGVuZ3RoID4gMCA/IGFDdXN0QWdnTWVhc3VyZVswXS5xdWFsaWZpZXIgOiBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/Lk1lYXN1cmVzPy5bMF0/LnZhbHVlO1xuXHR9XG5cdC8vIGNvbnNpZGVyIGR5bmFtaWMgbWVhc3VyZXMgb25seSBpZiB0aGVyZSBhcmUgbm8gbWVhc3VyZXMgd2l0aCBjdXN0b20gYWdncmVnYXRlc1xuXHRpZiAoIWFDdXN0QWdnTWVhc3VyZVswXSAmJiBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/LkR5bmFtaWNNZWFzdXJlcykge1xuXHRcdHNNZWFzdXJlID0gY29udmVydGVyQ29udGV4dFxuXHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3I8QWdncmVnYXRlZFByb3BlcnR5Pihcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKGNoYXJ0QW5ub3RhdGlvbi4kdGFyZ2V0LkR5bmFtaWNNZWFzdXJlcz8uWzBdPy52YWx1ZSlcblx0XHRcdClcblx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKClcblx0XHRcdC50YXJnZXRPYmplY3Q/Lk5hbWUudG9TdHJpbmcoKTtcblx0XHRhVHJhbnNBZ2dyZWdhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBZ2dyZWdhdGVkUHJvcGVydHkoKTtcblx0fSBlbHNlIHtcblx0XHRhVHJhbnNBZ2dyZWdhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBZ2dyZWdhdGVkUHJvcGVydGllcygpWzBdIGFzIHVua25vd24gYXMgQWdncmVnYXRlZFByb3BlcnR5W107XG5cdH1cblxuXHRjb25zdCBzRGltZW5zaW9uID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy52YWx1ZTtcblxuXHRpZiAoXG5cdFx0Y3VzdG9tQWdncmVnYXRlcy5zb21lKGZ1bmN0aW9uIChjdXN0QWdnOiBDdXN0b21BZ2dyZWdhdGUpIHtcblx0XHRcdHJldHVybiBjdXN0QWdnLnF1YWxpZmllciA9PT0gc01lYXN1cmU7XG5cdFx0fSlcblx0KSB7XG5cdFx0c01lYXN1cmVQYXRoID0gc01lYXN1cmU7XG5cdH0gZWxzZSBpZiAoYVRyYW5zQWdncmVnYXRpb25zICYmIGFUcmFuc0FnZ3JlZ2F0aW9uc1swXSkge1xuXHRcdGFUcmFuc0FnZ3JlZ2F0aW9ucy5zb21lKGZ1bmN0aW9uIChvQWdncmVnYXRlKSB7XG5cdFx0XHRpZiAob0FnZ3JlZ2F0ZS5OYW1lID09PSBzTWVhc3VyZSkge1xuXHRcdFx0XHRzTWVhc3VyZVBhdGggPSBvQWdncmVnYXRlPy5BZ2dyZWdhdGFibGVQcm9wZXJ0eS52YWx1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRjb25zdCBhQWdncmVnYXRhYmxlUHJvcHNGcm9tQ29udGFpbmVyID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0QWdncmVnYXRhYmxlUHJvcGVydGllcygpO1xuXHRjb25zdCBhR3JvdXBhYmxlUHJvcHNGcm9tQ29udGFpbmVyID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0R3JvdXBhYmxlUHJvcGVydGllcygpO1xuXHRpZiAoYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lciAmJiBhQWdncmVnYXRhYmxlUHJvcHNGcm9tQ29udGFpbmVyLmxlbmd0aCkge1xuXHRcdGZvciAoY29uc3QgYWdncmVnYXRhYmxlUHJvcCBvZiBhQWdncmVnYXRhYmxlUHJvcHNGcm9tQ29udGFpbmVyKSB7XG5cdFx0XHRpZiAoKGFnZ3JlZ2F0YWJsZVByb3AgYXMgQWdncmVnYXRhYmxlUHJvcGVydHlUeXBlKT8uUHJvcGVydHk/LnZhbHVlID09PSBzTWVhc3VyZVBhdGgpIHtcblx0XHRcdFx0YkFnZ3JlZ2F0YWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGlmIChhR3JvdXBhYmxlUHJvcHNGcm9tQ29udGFpbmVyICYmIGFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXIubGVuZ3RoKSB7XG5cdFx0Zm9yIChjb25zdCBncm91cGFibGVQcm9wIG9mIGFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXIpIHtcblx0XHRcdGlmIChncm91cGFibGVQcm9wPy52YWx1ZSA9PT0gc0RpbWVuc2lvbikge1xuXHRcdFx0XHRiR3JvdXBhYmxlID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGJBZ2dyZWdhdGFibGUgJiYgYkdyb3VwYWJsZTtcbn07XG5cbmV4cG9ydCB0eXBlIFBhcmFtZXRlclR5cGUgPSB7XG5cdGxvY2FsRGF0YVByb3BlcnR5OiBzdHJpbmc7XG5cdHZhbHVlTGlzdFByb3BlcnR5OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIE1ldGhvZCB0byBnZXQgdGhlIHZpc3VhbCBmaWx0ZXJzIG9iamVjdCBmb3IgYSBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjaGFydCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gc1Byb3BlcnR5UGF0aCBUaGUgYWdncmVnYXRpb24gaGVscGVyXG4gKiBAcGFyYW0gRmlsdGVyRmllbGRzIFRoZSBhZ2dyZWdhdGlvbiBoZWxwZXJcbiAqIEByZXR1cm5zIFRoZSB2aXN1YWwgZmlsdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmlzdWFsRmlsdGVycyhcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzUHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdEZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24+XG4pOiBWaXN1YWxGaWx0ZXJzIHwgdW5kZWZpbmVkIHtcblx0bGV0IHZpc3VhbEZpbHRlcjogVmlzdWFsRmlsdGVycyB8IHVuZGVmaW5lZDtcblx0Y29uc3Qgb1Zpc3VhbEZpbHRlcjogRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBGaWx0ZXJGaWVsZHNbc1Byb3BlcnR5UGF0aF07XG5cdGlmIChvVmlzdWFsRmlsdGVyPy52aXN1YWxGaWx0ZXI/LnZhbHVlTGlzdCkge1xuXHRcdGNvbnN0IG9WRlBhdGggPSBvVmlzdWFsRmlsdGVyPy52aXN1YWxGaWx0ZXI/LnZhbHVlTGlzdDtcblx0XHRjb25zdCBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXQgPSBvVkZQYXRoLnNwbGl0KFwiI1wiKTtcblx0XHRjb25zdCBxdWFsaWZpZXJWTCA9IGFubm90YXRpb25RdWFsaWZpZXJTcGxpdC5sZW5ndGggPiAxID8gYFZhbHVlTGlzdCMke2Fubm90YXRpb25RdWFsaWZpZXJTcGxpdFsxXX1gIDogYW5ub3RhdGlvblF1YWxpZmllclNwbGl0WzBdO1xuXHRcdGNvbnN0IHByb3BlcnR5ID0gZW50aXR5VHlwZS5yZXNvbHZlUGF0aChzUHJvcGVydHlQYXRoKSBhcyBQcm9wZXJ0eTtcblx0XHRjb25zdCB2YWx1ZUxpc3QgPSBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uW3F1YWxpZmllclZMIGFzIGtleW9mIFByb3BlcnR5QW5ub3RhdGlvbnNfQ29tbW9uXSBhcyBWYWx1ZUxpc3QgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgaXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMgPSAocHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LlZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcz8udmFsdWVPZigpIGFzIGJvb2xlYW4pIHx8IGZhbHNlO1xuXHRcdGlmICh2YWx1ZUxpc3QpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25QYXRoID0gdmFsdWVMaXN0Py5Db2xsZWN0aW9uUGF0aC50b1N0cmluZygpO1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPEVudGl0eVNldD4oXG5cdFx0XHRcdGAvJHtjb2xsZWN0aW9uUGF0aCB8fCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5uYW1lfWBcblx0XHRcdCk7XG5cdFx0XHRjb25zdCB2YWx1ZUxpc3RQYXJhbXMgPSB2YWx1ZUxpc3Q/LlBhcmFtZXRlcnM7XG5cdFx0XHRsZXQgb3V0UGFyYW1ldGVyOiBWYWx1ZUxpc3RQYXJhbWV0ZXJPdXQgfCBWYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCB8IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IGluUGFyYW1ldGVyczogUGFyYW1ldGVyVHlwZVtdID0gW107XG5cdFx0XHRsZXQgYVBhcmFtZXRlcnM6IHN0cmluZ1tdID0gW107XG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJFbnRpdHlUeXBlID0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldFBhcmFtZXRlckVudGl0eVR5cGUoKTtcblx0XHRcdGFQYXJhbWV0ZXJzID0gcGFyYW1ldGVyRW50aXR5VHlwZVxuXHRcdFx0XHQ/IHBhcmFtZXRlckVudGl0eVR5cGUua2V5cy5tYXAoZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGtleS5uYW1lO1xuXHRcdFx0XHQgIH0pXG5cdFx0XHRcdDogW107XG5cdFx0XHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpID09PSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSkge1xuXHRcdFx0XHRfYWRkSW5QYXJhbWV0ZXJzKGluUGFyYW1ldGVycywgYVBhcmFtZXRlcnMsIHRydWUpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHZhbHVlTGlzdFBhcmFtcykge1xuXHRcdFx0XHRmb3IgKGNvbnN0IHZhbHVlTGlzdFBhcmFtIG9mIHZhbHVlTGlzdFBhcmFtcykge1xuXHRcdFx0XHRcdGNvbnN0IGxvY2FsRGF0YVByb3BlcnR5ID0gKHZhbHVlTGlzdFBhcmFtIGFzIFZhbHVlTGlzdFBhcmFtZXRlckluKS5Mb2NhbERhdGFQcm9wZXJ0eT8udmFsdWU7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWVMaXN0UHJvcGVydHkgPSB2YWx1ZUxpc3RQYXJhbS5WYWx1ZUxpc3RQcm9wZXJ0eSBhcyBzdHJpbmc7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0KHZhbHVlTGlzdFBhcmFtPy4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcIiB8fFxuXHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3RQYXJhbT8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlck91dFwiKSAmJlxuXHRcdFx0XHRcdFx0c1Byb3BlcnR5UGF0aCA9PT0gbG9jYWxEYXRhUHJvcGVydHlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG91dFBhcmFtZXRlciA9IHZhbHVlTGlzdFBhcmFtO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHQodmFsdWVMaXN0UGFyYW0/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dFwiIHx8XG5cdFx0XHRcdFx0XHRcdHZhbHVlTGlzdFBhcmFtPy4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVySW5cIikgJiZcblx0XHRcdFx0XHRcdHNQcm9wZXJ0eVBhdGggIT09IGxvY2FsRGF0YVByb3BlcnR5XG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBiTm90RmlsdGVyYWJsZSA9IGlzUHJvcGVydHlGaWx0ZXJhYmxlKGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCwgdmFsdWVMaXN0UHJvcGVydHkpO1xuXHRcdFx0XHRcdFx0aWYgKCFiTm90RmlsdGVyYWJsZSkge1xuXHRcdFx0XHRcdFx0XHRpblBhcmFtZXRlcnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0bG9jYWxEYXRhUHJvcGVydHk6IGxvY2FsRGF0YVByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlTGlzdFByb3BlcnR5OiB2YWx1ZUxpc3RQcm9wZXJ0eVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChpblBhcmFtZXRlcnMgJiYgaW5QYXJhbWV0ZXJzLmxlbmd0aCkge1xuXHRcdFx0XHRpblBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAob0luUGFyYW1ldGVyKSB7XG5cdFx0XHRcdFx0Y29uc3QgbWFpbkVudGl0eVNldEluTWFwcGluZ0FsbG93ZWRFeHByZXNzaW9uID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0XHRjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMoXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgob0luUGFyYW1ldGVyPy5sb2NhbERhdGFQcm9wZXJ0eSkpXG5cdFx0XHRcdFx0XHRcdFx0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHRcdFx0XHRcdFx0W1wiU2luZ2xlVmFsdWVcIl1cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGNvbnN0IHZhbHVlTGlzdEVudGl0eVNldEluTWFwcGluZ0FsbG93ZWRFeHByZXNzaW9uID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0XHRjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMoXG5cdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgob0luUGFyYW1ldGVyPy52YWx1ZUxpc3RQcm9wZXJ0eSlcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHRcdFx0XHRcdFx0W1wiU2luZ2xlVmFsdWVcIl1cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGlmICh2YWx1ZUxpc3RFbnRpdHlTZXRJbk1hcHBpbmdBbGxvd2VkRXhwcmVzc2lvbiA9PT0gXCJ0cnVlXCIgJiYgbWFpbkVudGl0eVNldEluTWFwcGluZ0FsbG93ZWRFeHByZXNzaW9uID09PSBcImZhbHNlXCIpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgRmlsdGVyUmVzdHJpY3Rpb25zIG9mICR7c1Byb3BlcnR5UGF0aH0gaW4gTWFpbkVudGl0eVNldCBhbmQgVmFsdWVMaXN0RW50aXR5U2V0IGFyZSBkaWZmZXJlbnRgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcHZRdWFsaWZpZXIgPSB2YWx1ZUxpc3Q/LlByZXNlbnRhdGlvblZhcmlhbnRRdWFsaWZpZXI7XG5cdFx0XHRjb25zdCBzdlF1YWxpZmllciA9IHZhbHVlTGlzdD8uU2VsZWN0aW9uVmFyaWFudFF1YWxpZmllcjtcblx0XHRcdGNvbnN0IHB2QW5ub3RhdGlvbiA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zLlVJPy5bYFByZXNlbnRhdGlvblZhcmlhbnQjJHtwdlF1YWxpZmllcn1gXTtcblx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRpZiAoIWFnZ3JlZ2F0aW9uSGVscGVyLmlzQW5hbHl0aWNzU3VwcG9ydGVkKCkpIHtcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmIChwdkFubm90YXRpb24pIHtcblx0XHRcdFx0Y29uc3QgYVZpc3VhbGl6YXRpb25zID0gcHZBbm5vdGF0aW9uPy5WaXN1YWxpemF0aW9ucztcblx0XHRcdFx0Y29uc3QgY29udGV4dFBhdGggPSBgLyR7dmFsdWVMaXN0Py5Db2xsZWN0aW9uUGF0aH1gIHx8IGAvJHtjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEVudGl0eVNldCgpPy5uYW1lfWA7XG5cdFx0XHRcdHZpc3VhbEZpbHRlciA9IHt9O1xuXHRcdFx0XHR2aXN1YWxGaWx0ZXIuY29udGV4dFBhdGggPSBjb250ZXh0UGF0aDtcblx0XHRcdFx0dmlzdWFsRmlsdGVyLmlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzID0gaXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXM7XG5cdFx0XHRcdGxldCBjaGFydEFubm90YXRpb246IEFubm90YXRpb25QYXRoPENoYXJ0PiB8IHVuZGVmaW5lZDtcblx0XHRcdFx0Zm9yIChjb25zdCB2aXN1YWxpemF0aW9uIG9mIGFWaXN1YWxpemF0aW9ucykge1xuXHRcdFx0XHRcdGlmICh2aXN1YWxpemF0aW9uLiR0YXJnZXQ/LnRlcm0gPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnRcIikge1xuXHRcdFx0XHRcdFx0Y2hhcnRBbm5vdGF0aW9uID0gdmlzdWFsaXphdGlvbiBhcyBBbm5vdGF0aW9uUGF0aDxDaGFydD47XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGNoYXJ0QW5ub3RhdGlvbikge1xuXHRcdFx0XHRcdGNvbnN0IF9iZ2V0VkZBZ2dyZWdhdGlvbjogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IF9jaGVja1ZGQWdncmVnYXRpb24oXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRjaGFydEFubm90YXRpb24sXG5cdFx0XHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlclxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKCFfYmdldFZGQWdncmVnYXRpb24pIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgYkRpbWVuc2lvbkhpZGRlbiA9IGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uRGltZW5zaW9uc1swXT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKTtcblx0XHRcdFx0XHRjb25zdCBiRGltZW5zaW9uSGlkZGVuRmlsdGVyID1cblx0XHRcdFx0XHRcdGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uRGltZW5zaW9uc1swXT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW5GaWx0ZXI/LnZhbHVlT2YoKTtcblx0XHRcdFx0XHRpZiAoYkRpbWVuc2lvbkhpZGRlbiA9PT0gdHJ1ZSB8fCBiRGltZW5zaW9uSGlkZGVuRmlsdGVyID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChhVmlzdWFsaXphdGlvbnMgJiYgYVZpc3VhbGl6YXRpb25zLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLmNoYXJ0QW5ub3RhdGlvbiA9IGNoYXJ0QW5ub3RhdGlvbi4kdGFyZ2V0XG5cdFx0XHRcdFx0XHRcdD8gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKFxuXHRcdFx0XHRcdFx0XHRcdFx0YCR7Y2hhcnRBbm5vdGF0aW9uLiR0YXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lfS8kQW5ub3RhdGlvblBhdGgvYFxuXHRcdFx0XHRcdFx0XHQgIClcblx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHQvLyBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgdG8gYXZvaWQgcmVwZXRpdGl2ZSBlbnRpdHkgdHlwZSBpbiBjYXNlIG9mIG5vbi1wYXJhbWV0ZXJpemVkIGVudGl0eSBzZXQgZS5nIC9TYWxlc09yZGVyTWFuYWdlL2NvbS5jX3NhbGVzb3JkZXJtYW5hZ2Vfc2RfYWdncmVnYXRlLlNhbGVzT3JkZXJNYW5hZ2Vcblx0XHRcdFx0XHRcdGNvbnN0IGVudGl0eVNldE5hbWUgPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk/Lm5hbWU7XG5cdFx0XHRcdFx0XHRsZXQgcHJlc2VudGF0aW9uQW5ub3RhdGlvbjtcblx0XHRcdFx0XHRcdGNvbnN0IHJlbGF0aXZlQW5ub3RhdGlvblBhdGggPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgoXG5cdFx0XHRcdFx0XHRcdGAke3B2QW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWV9L2AsXG5cdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRpZiAocGFyYW1ldGVyRW50aXR5VHlwZSkge1xuXHRcdFx0XHRcdFx0XHRwcmVzZW50YXRpb25Bbm5vdGF0aW9uID0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCkgKyBcIi9cIiArIHJlbGF0aXZlQW5ub3RhdGlvblBhdGg7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRwcmVzZW50YXRpb25Bbm5vdGF0aW9uID0gXCIvXCIgKyBlbnRpdHlTZXROYW1lICsgXCIvXCIgKyByZWxhdGl2ZUFubm90YXRpb25QYXRoO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnByZXNlbnRhdGlvbkFubm90YXRpb24gPSBwdkFubm90YXRpb24gPyBwcmVzZW50YXRpb25Bbm5vdGF0aW9uIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLm91dFBhcmFtZXRlciA9IG91dFBhcmFtZXRlcj8uTG9jYWxEYXRhUHJvcGVydHk/LnZhbHVlO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLmluUGFyYW1ldGVycyA9IGluUGFyYW1ldGVycztcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci52YWx1ZWxpc3RQcm9wZXJ0eSA9IG91dFBhcmFtZXRlcj8uVmFsdWVMaXN0UHJvcGVydHkgYXMgc3RyaW5nO1xuXHRcdFx0XHRcdFx0Y29uc3QgYklzUmFuZ2UgPSBjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMoXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoc1Byb3BlcnR5UGF0aCkpXG5cdFx0XHRcdFx0XHRcdFx0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHRcdFx0XHRcdFx0W1wiU2luZ2xlUmFuZ2VcIiwgXCJNdWx0aVJhbmdlXCJdXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRpZiAoY29tcGlsZUV4cHJlc3Npb24oYklzUmFuZ2UpID09PSBcInRydWVcIikge1xuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkhpZ2gsIElzc3VlVHlwZS5NQUxGT1JNRURfVklTVUFMRklMVEVSUy5WQUxVRUxJU1QpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjb25zdCBiSXNNYWluRW50aXR5U2V0U2luZ2xlU2VsZWN0aW9uID0gY2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHNQcm9wZXJ0eVBhdGgpKVxuXHRcdFx0XHRcdFx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdFx0XHRcdFtcIlNpbmdsZVZhbHVlXCJdXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLm11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZCA9IGNvbXBpbGVFeHByZXNzaW9uKG5vdChiSXNNYWluRW50aXR5U2V0U2luZ2xlU2VsZWN0aW9uKSk7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIucmVxdWlyZWQgPSBnZXRJc1JlcXVpcmVkKGNvbnZlcnRlckNvbnRleHQsIHNQcm9wZXJ0eVBhdGgpO1xuXHRcdFx0XHRcdFx0bGV0IHN2QW5ub3RhdGlvbjogU2VsZWN0aW9uVmFyaWFudCB8IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdGlmIChzdlF1YWxpZmllcikge1xuXHRcdFx0XHRcdFx0XHRzdkFubm90YXRpb24gPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uPFNlbGVjdGlvblZhcmlhbnQ+KFxuXHRcdFx0XHRcdFx0XHRcdGBAVUkuU2VsZWN0aW9uVmFyaWFudCMke3N2UXVhbGlmaWVyfWBcblx0XHRcdFx0XHRcdFx0KT8uYW5ub3RhdGlvbjtcblx0XHRcdFx0XHRcdFx0bGV0IHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uO1xuXHRcdFx0XHRcdFx0XHRjb25zdCByZWxhdGl2ZVNlbGVjdGlvblZhcmlhbnRQYXRoID0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoKFxuXHRcdFx0XHRcdFx0XHRcdGAke3N2QW5ub3RhdGlvbj8uZnVsbHlRdWFsaWZpZWROYW1lfS9gLFxuXHRcdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKClcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0aWYgKHBhcmFtZXRlckVudGl0eVR5cGUpIHtcblx0XHRcdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbiA9XG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSArIFwiL1wiICsgcmVsYXRpdmVTZWxlY3Rpb25WYXJpYW50UGF0aDtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbiA9IFwiL1wiICsgZW50aXR5U2V0TmFtZSArIFwiL1wiICsgcmVsYXRpdmVTZWxlY3Rpb25WYXJpYW50UGF0aDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24gPSBzdkFubm90YXRpb24gPyBzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbiA6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGxldCByZXF1aXJlZFByb3BlcnRpZXM6IFByb3BlcnR5UGF0aFtdID0gW107XG5cdFx0XHRcdFx0XHRpZiAocGFyYW1ldGVyRW50aXR5VHlwZSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzRW50aXR5U2V0ID0gY29sbGVjdGlvblBhdGguc3BsaXQoXCIvXCIpWzBdO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzTmF2aWdhdGlvblByb3BlcnR5ID0gY29sbGVjdGlvblBhdGguc3BsaXQoXCIvXCIpWzFdO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvRW50aXR5U2V0Q29udmVydGVyQ29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihgLyR7c0VudGl0eVNldH1gKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYVJlc3RyaWN0ZWRQcm9wZXJ0aWVzID1cblx0XHRcdFx0XHRcdFx0XHRvRW50aXR5U2V0Q29udmVydGVyQ29udGV4dD8uZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnN0YXJ0aW5nRW50aXR5U2V0Py5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzXG5cdFx0XHRcdFx0XHRcdFx0XHQ/Lk5hdmlnYXRpb25SZXN0cmljdGlvbnM/LlJlc3RyaWN0ZWRQcm9wZXJ0aWVzO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvUmVzdHJpY3RlZFByb3BlcnR5ID0gYVJlc3RyaWN0ZWRQcm9wZXJ0aWVzPy5maW5kKFxuXHRcdFx0XHRcdFx0XHRcdChyZXN0cmljdGVkTmF2UHJvcDogTmF2aWdhdGlvblByb3BlcnR5UmVzdHJpY3Rpb25UeXBlcykgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJlc3RyaWN0ZWROYXZQcm9wLk5hdmlnYXRpb25Qcm9wZXJ0eT8udHlwZSA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3RyaWN0ZWROYXZQcm9wLk5hdmlnYXRpb25Qcm9wZXJ0eS52YWx1ZSA9PT0gc05hdmlnYXRpb25Qcm9wZXJ0eTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydGllcyA9IG9SZXN0cmljdGVkUHJvcGVydHk/LkZpbHRlclJlc3RyaWN0aW9ucz8uUmVxdWlyZWRQcm9wZXJ0aWVzID8/IFtdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZW50aXR5U2V0T3JTaW5nbGV0b24gPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEVudGl0eVNldCgpO1xuXHRcdFx0XHRcdFx0XHRpZiAoaXNFbnRpdHlTZXQoZW50aXR5U2V0T3JTaW5nbGV0b24pKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0aWVzID1cblx0XHRcdFx0XHRcdFx0XHRcdGVudGl0eVNldE9yU2luZ2xldG9uLmFubm90YXRpb25zLkNhcGFiaWxpdGllcz8uRmlsdGVyUmVzdHJpY3Rpb25zPy5SZXF1aXJlZFByb3BlcnRpZXMgPz8gW107XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGxldCByZXF1aXJlZFByb3BlcnR5UGF0aHM6IHN0cmluZ1tdID0gW107XG5cdFx0XHRcdFx0XHRpZiAocmVxdWlyZWRQcm9wZXJ0aWVzPy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24gKG9SZXF1aXJlUHJvcGVydHkpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnR5UGF0aHMucHVzaChvUmVxdWlyZVByb3BlcnR5LnZhbHVlKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnR5UGF0aHMgPSByZXF1aXJlZFByb3BlcnR5UGF0aHMuY29uY2F0KGFQYXJhbWV0ZXJzKTtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5yZXF1aXJlZFByb3BlcnRpZXMgPSByZXF1aXJlZFByb3BlcnR5UGF0aHM7XG5cdFx0XHRcdFx0XHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpID09PSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSkge1xuXHRcdFx0XHRcdFx0XHQvLyBpZiBjb250ZXh0IFBhdGggZm9yIGJvdGggdmlzdWFsIGZpbHRlciBhbmQgZmlsdGVyIGJhciBhcmUgc2FtZSwgY29uc2lkZXIgcmVxdWlyZWQgUHJvcGVydGllcyBhcyB3ZWxsIGFsb25nIHdpdGggaW4gUGFyYW1ldGVyc1xuXHRcdFx0XHRcdFx0XHRfYWRkSW5QYXJhbWV0ZXJzKGluUGFyYW1ldGVycywgcmVxdWlyZWRQcm9wZXJ0aWVzLCBmYWxzZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAodmlzdWFsRmlsdGVyLnJlcXVpcmVkUHJvcGVydGllcz8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdGlmICghdmlzdWFsRmlsdGVyLmluUGFyYW1ldGVycyB8fCAhdmlzdWFsRmlsdGVyLmluUGFyYW1ldGVycy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIXZpc3VhbEZpbHRlci5zZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnNob3dPdmVybGF5SW5pdGlhbGx5ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IHNlbGVjdE9wdGlvbnMgPVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdkFubm90YXRpb24/LlNlbGVjdE9wdGlvbnM/Lm1hcCgob1NlbGVjdE9wdGlvbikgPT4gb1NlbGVjdE9wdGlvbi5Qcm9wZXJ0eU5hbWU/LnZhbHVlKSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHBhcmFtZXRlck9wdGlvbnMgPVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdkFubm90YXRpb24/LlBhcmFtZXRlcnM/Lm1hcChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQob1BhcmFtZXRlck9wdGlvbikgPT4gKG9QYXJhbWV0ZXJPcHRpb24gYXMgUGFyYW1ldGVyVHlwZXMpLlByb3BlcnR5TmFtZT8udmFsdWVcblx0XHRcdFx0XHRcdFx0XHRcdFx0KSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdHNlbGVjdE9wdGlvbnMgPSBzZWxlY3RPcHRpb25zLmNvbmNhdChwYXJhbWV0ZXJPcHRpb25zKTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydHlQYXRocyA9IHJlcXVpcmVkUHJvcGVydHlQYXRocy5zb3J0KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRzZWxlY3RPcHRpb25zID0gc2VsZWN0T3B0aW9ucy5zb3J0KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuc2hvd092ZXJsYXlJbml0aWFsbHkgPSByZXF1aXJlZFByb3BlcnR5UGF0aHMuc29tZShmdW5jdGlvbiAoc1BhdGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuICFzZWxlY3RPcHRpb25zLmluY2x1ZGVzKHNQYXRoKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuc2hvd092ZXJsYXlJbml0aWFsbHkgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnNob3dPdmVybGF5SW5pdGlhbGx5ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb25zdCBzRGltZW5zaW9uVHlwZSA9IGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uRGltZW5zaW9uc1swXT8uJHRhcmdldD8udHlwZTtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5yZW5kZXJMaW5lQ2hhcnQgPVxuXHRcdFx0XHRcdFx0XHRzRGltZW5zaW9uVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIiB8fFxuXHRcdFx0XHRcdFx0XHRzRGltZW5zaW9uVHlwZSA9PT0gXCJFZG0uRGF0ZVwiIHx8XG5cdFx0XHRcdFx0XHRcdHNEaW1lbnNpb25UeXBlID09PSBcIkVkbS5UaW1lT2ZEYXlcIiB8fFxuXHRcdFx0XHRcdFx0XHRjaGFydEFubm90YXRpb24uJHRhcmdldD8uQ2hhcnRUeXBlICE9PSBcIlVJLkNoYXJ0VHlwZS9MaW5lXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkhpZ2gsIElzc3VlVHlwZS5NQUxGT1JNRURfVklTVUFMRklMVEVSUy5DSEFSVCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkhpZ2gsIElzc3VlVHlwZS5NQUxGT1JNRURfVklTVUFMRklMVEVSUy5QUkVTRU5UQVRJT05WQVJJQU5UKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkhpZ2gsIElzc3VlVHlwZS5NQUxGT1JNRURfVklTVUFMRklMVEVSUy5WQUxVRUxJU1QpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERpYWdub3N0aWNzKCkuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5NYW5pZmVzdCwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUFMRk9STUVEX1ZJU1VBTEZJTFRFUlMuVkFMVUVMSVNUKTtcblx0fVxuXHRyZXR1cm4gdmlzdWFsRmlsdGVyO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byBhZGQgaW5wYXJhbWV0ZXJzIGZyb20gcmVxdWlyZWQgcHJvcGVydGllcyBhbmQgcGFyYW1ldGVycy5cbiAqXG4gKiBAcGFyYW0gaW5QYXJhbXMgQW4gYXJyYXkgY29udGFpbmluZyBleGlzdGluZyBpbnBhcmFtc1xuICogQHBhcmFtIHByb3BlcnRpZXMgQW4gYXJyYXkgY29udGFpbmluZyBlaXRoZXIgcmVxdWlyZWRwcm9wZXJ0aWVzIG9yIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBpc1BhcmFtIEEgYm9vbGVhbiBmbGFnIGluZGljYXRpbmcgd2hldGhlciBwYXNzZWQgcHJvcGVydGllcyBhcmUgcGFyYW1ldGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gX2FkZEluUGFyYW1ldGVycyhpblBhcmFtczogUGFyYW1ldGVyVHlwZVtdLCBwcm9wZXJ0aWVzOiBQcm9wZXJ0eVBhdGhbXSB8IHN0cmluZ1tdLCBpc1BhcmFtOiBib29sZWFuKTogdm9pZCB7XG5cdHByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlbWVudCkge1xuXHRcdGNvbnN0IHByb3BlcnR5ID0gaXNQYXJhbSA/IGVsZW1lbnQgOiAoZWxlbWVudCBhcyBQcm9wZXJ0eVBhdGgpLnZhbHVlO1xuXHRcdGluUGFyYW1zLnB1c2goe1xuXHRcdFx0bG9jYWxEYXRhUHJvcGVydHk6IHByb3BlcnR5IGFzIHN0cmluZyxcblx0XHRcdHZhbHVlTGlzdFByb3BlcnR5OiBwcm9wZXJ0eSBhcyBzdHJpbmdcblx0XHR9KTtcblx0fSk7XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7OztFQTJDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsTUFBTUEsbUJBQW1CLEdBQUcsVUFDM0JDLGdCQUF5RCxFQUN6REMsZUFBc0MsRUFDdENDLGlCQUFvQyxFQUNkO0lBQUE7SUFDdEIsSUFBSUMsWUFBWSxFQUFFQyxVQUFVLEVBQUVDLGFBQWE7SUFDM0MsSUFBSUMsUUFBNEI7SUFDaEMsTUFBTUMsZ0JBQWdCLEdBQUdMLGlCQUFpQixDQUFDTSw2QkFBNkIsRUFBRTtJQUMxRSxJQUFJQyxrQkFBa0IsR0FBR1AsaUJBQWlCLENBQUNRLG9CQUFvQixFQUFFO0lBQ2pFLElBQUlDLGVBQWUsR0FBRyxFQUE0QjtJQUNsRDtJQUNBLElBQUlWLGVBQWUsYUFBZkEsZUFBZSx3Q0FBZkEsZUFBZSxDQUFFVyxPQUFPLGtEQUF4QixzQkFBMEJDLFFBQVEsRUFBRTtNQUFBO01BQ3ZDRixlQUFlLEdBQUdKLGdCQUFnQixDQUFDTyxNQUFNLENBQUMsVUFBVUMsT0FBd0IsRUFBRTtRQUFBO1FBQzdFLE9BQU9BLE9BQU8sQ0FBQ0MsU0FBUyxNQUFLZixlQUFlLGFBQWZBLGVBQWUsaURBQWZBLGVBQWUsQ0FBRVcsT0FBTyxxRkFBeEIsdUJBQTBCQyxRQUFRLHFGQUFsQyx1QkFBcUMsQ0FBQyxDQUFDLDJEQUF2Qyx1QkFBeUNJLEtBQUs7TUFDNUUsQ0FBQyxDQUFDO01BQ0ZYLFFBQVEsR0FBR0ssZUFBZSxDQUFDTyxNQUFNLEdBQUcsQ0FBQyxHQUFHUCxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUNLLFNBQVMsR0FBR2YsZUFBZSxhQUFmQSxlQUFlLGlEQUFmQSxlQUFlLENBQUVXLE9BQU8scUZBQXhCLHVCQUEwQkMsUUFBUSxxRkFBbEMsdUJBQXFDLENBQUMsQ0FB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
314
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2hlY2tWRkFnZ3JlZ2F0aW9uIiwiY29udmVydGVyQ29udGV4dCIsImNoYXJ0QW5ub3RhdGlvbiIsImFnZ3JlZ2F0aW9uSGVscGVyIiwic01lYXN1cmVQYXRoIiwiYkdyb3VwYWJsZSIsImJBZ2dyZWdhdGFibGUiLCJzTWVhc3VyZSIsImN1c3RvbUFnZ3JlZ2F0ZXMiLCJnZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucyIsImFUcmFuc0FnZ3JlZ2F0aW9ucyIsImdldFRyYW5zQWdncmVnYXRpb25zIiwiYUN1c3RBZ2dNZWFzdXJlIiwiJHRhcmdldCIsIk1lYXN1cmVzIiwiZmlsdGVyIiwiY3VzdEFnZyIsInF1YWxpZmllciIsInZhbHVlIiwibGVuZ3RoIiwiRHluYW1pY01lYXN1cmVzIiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidGFyZ2V0T2JqZWN0IiwiTmFtZSIsInRvU3RyaW5nIiwiZ2V0QWdncmVnYXRlZFByb3BlcnR5IiwiZ2V0QWdncmVnYXRlZFByb3BlcnRpZXMiLCJzRGltZW5zaW9uIiwiRGltZW5zaW9ucyIsInNvbWUiLCJvQWdncmVnYXRlIiwiQWdncmVnYXRhYmxlUHJvcGVydHkiLCJhQWdncmVnYXRhYmxlUHJvcHNGcm9tQ29udGFpbmVyIiwiZ2V0QWdncmVnYXRhYmxlUHJvcGVydGllcyIsImFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXIiLCJnZXRHcm91cGFibGVQcm9wZXJ0aWVzIiwiYWdncmVnYXRhYmxlUHJvcCIsIlByb3BlcnR5IiwiZ3JvdXBhYmxlUHJvcCIsImdldFZpc3VhbEZpbHRlcnMiLCJlbnRpdHlUeXBlIiwic1Byb3BlcnR5UGF0aCIsIkZpbHRlckZpZWxkcyIsInZpc3VhbEZpbHRlciIsIm9WaXN1YWxGaWx0ZXIiLCJ2YWx1ZUxpc3QiLCJvVkZQYXRoIiwiYW5ub3RhdGlvblF1YWxpZmllclNwbGl0Iiwic3BsaXQiLCJxdWFsaWZpZXJWTCIsInByb3BlcnR5IiwicmVzb2x2ZVBhdGgiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsImlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIiwiVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIiwidmFsdWVPZiIsImNvbGxlY3Rpb25QYXRoIiwiQ29sbGVjdGlvblBhdGgiLCJjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQiLCJnZXRFbnRpdHlTZXQiLCJuYW1lIiwidmFsdWVMaXN0UGFyYW1zIiwiUGFyYW1ldGVycyIsIm91dFBhcmFtZXRlciIsImluUGFyYW1ldGVycyIsImFQYXJhbWV0ZXJzIiwicGFyYW1ldGVyRW50aXR5VHlwZSIsImdldFBhcmFtZXRlckVudGl0eVR5cGUiLCJrZXlzIiwibWFwIiwia2V5IiwiZ2V0Q29udGV4dFBhdGgiLCJfYWRkSW5QYXJhbWV0ZXJzIiwidmFsdWVMaXN0UGFyYW0iLCJsb2NhbERhdGFQcm9wZXJ0eSIsIkxvY2FsRGF0YVByb3BlcnR5IiwidmFsdWVMaXN0UHJvcGVydHkiLCJWYWx1ZUxpc3RQcm9wZXJ0eSIsIiRUeXBlIiwiYk5vdEZpbHRlcmFibGUiLCJpc1Byb3BlcnR5RmlsdGVyYWJsZSIsInB1c2giLCJmb3JFYWNoIiwib0luUGFyYW1ldGVyIiwibWFpbkVudGl0eVNldEluTWFwcGluZ0FsbG93ZWRFeHByZXNzaW9uIiwiY29tcGlsZUV4cHJlc3Npb24iLCJjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJ2YWx1ZUxpc3RFbnRpdHlTZXRJbk1hcHBpbmdBbGxvd2VkRXhwcmVzc2lvbiIsIkVycm9yIiwicHZRdWFsaWZpZXIiLCJQcmVzZW50YXRpb25WYXJpYW50UXVhbGlmaWVyIiwic3ZRdWFsaWZpZXIiLCJTZWxlY3Rpb25WYXJpYW50UXVhbGlmaWVyIiwicHZBbm5vdGF0aW9uIiwiZ2V0RW50aXR5VHlwZSIsIlVJIiwiQWdncmVnYXRpb25IZWxwZXIiLCJpc0FuYWx5dGljc1N1cHBvcnRlZCIsInVuZGVmaW5lZCIsImFWaXN1YWxpemF0aW9ucyIsIlZpc3VhbGl6YXRpb25zIiwiY29udGV4dFBhdGgiLCJ2aXN1YWxpemF0aW9uIiwidGVybSIsIl9iZ2V0VkZBZ2dyZWdhdGlvbiIsImJEaW1lbnNpb25IaWRkZW4iLCJIaWRkZW4iLCJiRGltZW5zaW9uSGlkZGVuRmlsdGVyIiwiSGlkZGVuRmlsdGVyIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZW50aXR5U2V0TmFtZSIsInByZXNlbnRhdGlvbkFubm90YXRpb24iLCJyZWxhdGl2ZUFubm90YXRpb25QYXRoIiwiZ2V0UmVsYXRpdmVBbm5vdGF0aW9uUGF0aCIsInZhbHVlbGlzdFByb3BlcnR5IiwiYklzUmFuZ2UiLCJnZXREaWFnbm9zdGljcyIsImFkZElzc3VlIiwiSXNzdWVDYXRlZ29yeSIsIkFubm90YXRpb24iLCJJc3N1ZVNldmVyaXR5IiwiSGlnaCIsIklzc3VlVHlwZSIsIk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTIiwiVkFMVUVMSVNUIiwiYklzTWFpbkVudGl0eVNldFNpbmdsZVNlbGVjdGlvbiIsIm11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZCIsIm5vdCIsInJlcXVpcmVkIiwiZ2V0SXNSZXF1aXJlZCIsInN2QW5ub3RhdGlvbiIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiYW5ub3RhdGlvbiIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwicmVsYXRpdmVTZWxlY3Rpb25WYXJpYW50UGF0aCIsInJlcXVpcmVkUHJvcGVydGllcyIsInNFbnRpdHlTZXQiLCJzTmF2aWdhdGlvblByb3BlcnR5Iiwib0VudGl0eVNldENvbnZlcnRlckNvbnRleHQiLCJhUmVzdHJpY3RlZFByb3BlcnRpZXMiLCJzdGFydGluZ0VudGl0eVNldCIsIkNhcGFiaWxpdGllcyIsIk5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJSZXN0cmljdGVkUHJvcGVydGllcyIsIm9SZXN0cmljdGVkUHJvcGVydHkiLCJmaW5kIiwicmVzdHJpY3RlZE5hdlByb3AiLCJOYXZpZ2F0aW9uUHJvcGVydHkiLCJ0eXBlIiwiRmlsdGVyUmVzdHJpY3Rpb25zIiwiUmVxdWlyZWRQcm9wZXJ0aWVzIiwiZW50aXR5U2V0T3JTaW5nbGV0b24iLCJpc0VudGl0eVNldCIsInJlcXVpcmVkUHJvcGVydHlQYXRocyIsIm9SZXF1aXJlUHJvcGVydHkiLCJjb25jYXQiLCJzaG93T3ZlcmxheUluaXRpYWxseSIsInNlbGVjdE9wdGlvbnMiLCJTZWxlY3RPcHRpb25zIiwib1NlbGVjdE9wdGlvbiIsIlByb3BlcnR5TmFtZSIsInBhcmFtZXRlck9wdGlvbnMiLCJvUGFyYW1ldGVyT3B0aW9uIiwic29ydCIsInNQYXRoIiwiaW5jbHVkZXMiLCJzRGltZW5zaW9uVHlwZSIsInJlbmRlckxpbmVDaGFydCIsIkNoYXJ0VHlwZSIsIkNIQVJUIiwiUFJFU0VOVEFUSU9OVkFSSUFOVCIsIk1hbmlmZXN0IiwiaW5QYXJhbXMiLCJwcm9wZXJ0aWVzIiwiaXNQYXJhbSIsImVsZW1lbnQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlZpc3VhbEZpbHRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uUGF0aCwgRW50aXR5U2V0LCBFbnRpdHlUeXBlLCBQcm9wZXJ0eSwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEFnZ3JlZ2F0YWJsZVByb3BlcnR5VHlwZSwgQ3VzdG9tQWdncmVnYXRlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBBZ2dyZWdhdGVkUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0FuYWx5dGljc1wiO1xuaW1wb3J0IHR5cGUgeyBOYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9DYXBhYmlsaXRpZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0VmFsdWVMaXN0LFxuXHRWYWx1ZUxpc3RQYXJhbWV0ZXJJbixcblx0VmFsdWVMaXN0UGFyYW1ldGVySW5PdXQsXG5cdFZhbHVlTGlzdFBhcmFtZXRlck91dFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBDaGFydCwgUGFyYW1ldGVyVHlwZXMsIFNlbGVjdGlvblZhcmlhbnQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgbm90IH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQWdncmVnYXRpb25cIjtcbmltcG9ydCB7IElzc3VlQ2F0ZWdvcnksIElzc3VlU2V2ZXJpdHksIElzc3VlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgeyBpc0VudGl0eVNldCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7IGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldElzUmVxdWlyZWQsIGlzUHJvcGVydHlGaWx0ZXJhYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRmlsdGVyVGVtcGxhdGluZ1wiO1xuXG5leHBvcnQgdHlwZSBWaXN1YWxGaWx0ZXJzID0ge1xuXHRkaW1lbnNpb25QYXRoPzogc3RyaW5nO1xuXHRtZWFzdXJlUGF0aD86IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdGNoYXJ0QW5ub3RhdGlvbj86IHN0cmluZztcblx0cHJlc2VudGF0aW9uQW5ub3RhdGlvbj86IHN0cmluZztcblx0dmlzaWJsZT86IGJvb2xlYW47XG5cdG91dFBhcmFtZXRlcj86IHN0cmluZztcblx0aW5QYXJhbWV0ZXJzPzogb2JqZWN0W107XG5cdHZhbHVlbGlzdFByb3BlcnR5Pzogc3RyaW5nO1xuXHRjb250ZXh0UGF0aD86IHN0cmluZztcblx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24/OiBzdHJpbmc7XG5cdG11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cdHNob3dPdmVybGF5SW5pdGlhbGx5PzogYm9vbGVhbjtcblx0cmVuZGVyTGluZUNoYXJ0PzogYm9vbGVhbjtcblx0cmVxdWlyZWRQcm9wZXJ0aWVzPzogc3RyaW5nW107XG5cdGlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzPzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHRoYXQgbWVhc3VyZXMgYW5kIGRpbWVuc2lvbnMgb2YgdGhlIHZpc3VhbCBmaWx0ZXIgY2hhcnQgY2FuIGJlIGFnZ3JlZ2F0ZWQgYW5kIGdyb3VwZWQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gY2hhcnRBbm5vdGF0aW9uIFRoZSBjaGFydCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gYWdncmVnYXRpb25IZWxwZXIgVGhlIGFnZ3JlZ2F0aW9uIGhlbHBlclxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBtZWFzdXJlIGNhbiBiZSBncm91cGVkIGFuZCBhZ2dyZWdhdGVkXG4gKi9cbmNvbnN0IF9jaGVja1ZGQWdncmVnYXRpb24gPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0Y2hhcnRBbm5vdGF0aW9uOiBBbm5vdGF0aW9uUGF0aDxDaGFydD4sXG5cdGFnZ3JlZ2F0aW9uSGVscGVyOiBBZ2dyZWdhdGlvbkhlbHBlclxuKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG5cdGxldCBzTWVhc3VyZVBhdGgsIGJHcm91cGFibGUsIGJBZ2dyZWdhdGFibGU7XG5cdGxldCBzTWVhc3VyZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBjdXN0b21BZ2dyZWdhdGVzID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMoKTtcblx0bGV0IGFUcmFuc0FnZ3JlZ2F0aW9ucyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldFRyYW5zQWdncmVnYXRpb25zKCk7XG5cdGxldCBhQ3VzdEFnZ01lYXN1cmUgPSBbXSBhcyBBcnJheTxDdXN0b21BZ2dyZWdhdGU+O1xuXHQvLyBpZiB0aGUgY2hhcnQgZGVmaW5pdGlvbiBoYXMgY3VzdG9tIGFnZ3JlZ2F0ZXMsIHRoZW4gY29uc2lkZXIgdGhlbSwgZWxzZSBmYWxsIGJhY2sgdG8gdGhlIG1lYXN1cmVzIHdpdGggdHJhbnNmb3JtYXRpb24gYWdncmVnYXRlc1xuXHRpZiAoY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5NZWFzdXJlcykge1xuXHRcdGFDdXN0QWdnTWVhc3VyZSA9IGN1c3RvbUFnZ3JlZ2F0ZXMuZmlsdGVyKGZ1bmN0aW9uIChjdXN0QWdnOiBDdXN0b21BZ2dyZWdhdGUpIHtcblx0XHRcdHJldHVybiBjdXN0QWdnLnF1YWxpZmllciA9PT0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5NZWFzdXJlcz8uWzBdPy52YWx1ZTtcblx0XHR9KTtcblx0XHRzTWVhc3VyZSA9IGFDdXN0QWdnTWVhc3VyZS5sZW5ndGggPiAwID8gYUN1c3RBZ2dNZWFzdXJlWzBdLnF1YWxpZmllciA6IGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uTWVhc3VyZXM/LlswXT8udmFsdWU7XG5cdH1cblx0Ly8gY29uc2lkZXIgZHluYW1pYyBtZWFzdXJlcyBvbmx5IGlmIHRoZXJlIGFyZSBubyBtZWFzdXJlcyB3aXRoIGN1c3RvbSBhZ2dyZWdhdGVzXG5cdGlmICghYUN1c3RBZ2dNZWFzdXJlWzBdICYmIGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uRHluYW1pY01lYXN1cmVzKSB7XG5cdFx0c01lYXN1cmUgPSBjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcjxBZ2dyZWdhdGVkUHJvcGVydHk+KFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoY2hhcnRBbm5vdGF0aW9uLiR0YXJnZXQuRHluYW1pY01lYXN1cmVzPy5bMF0/LnZhbHVlKVxuXHRcdFx0KVxuXHRcdFx0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKVxuXHRcdFx0LnRhcmdldE9iamVjdD8uTmFtZS50b1N0cmluZygpO1xuXHRcdGFUcmFuc0FnZ3JlZ2F0aW9ucyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEFnZ3JlZ2F0ZWRQcm9wZXJ0eSgpO1xuXHR9IGVsc2Uge1xuXHRcdGFUcmFuc0FnZ3JlZ2F0aW9ucyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzKClbMF0gYXMgdW5rbm93biBhcyBBZ2dyZWdhdGVkUHJvcGVydHlbXTtcblx0fVxuXG5cdGNvbnN0IHNEaW1lbnNpb24gPSBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/LkRpbWVuc2lvbnNbMF0/LnZhbHVlO1xuXG5cdGlmIChcblx0XHRjdXN0b21BZ2dyZWdhdGVzLnNvbWUoZnVuY3Rpb24gKGN1c3RBZ2c6IEN1c3RvbUFnZ3JlZ2F0ZSkge1xuXHRcdFx0cmV0dXJuIGN1c3RBZ2cucXVhbGlmaWVyID09PSBzTWVhc3VyZTtcblx0XHR9KVxuXHQpIHtcblx0XHRzTWVhc3VyZVBhdGggPSBzTWVhc3VyZTtcblx0fSBlbHNlIGlmIChhVHJhbnNBZ2dyZWdhdGlvbnMgJiYgYVRyYW5zQWdncmVnYXRpb25zWzBdKSB7XG5cdFx0YVRyYW5zQWdncmVnYXRpb25zLnNvbWUoZnVuY3Rpb24gKG9BZ2dyZWdhdGUpIHtcblx0XHRcdGlmIChvQWdncmVnYXRlLk5hbWUgPT09IHNNZWFzdXJlKSB7XG5cdFx0XHRcdHNNZWFzdXJlUGF0aCA9IG9BZ2dyZWdhdGU/LkFnZ3JlZ2F0YWJsZVByb3BlcnR5LnZhbHVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdGNvbnN0IGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzKCk7XG5cdGNvbnN0IGFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXIgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRHcm91cGFibGVQcm9wZXJ0aWVzKCk7XG5cdGlmIChhQWdncmVnYXRhYmxlUHJvcHNGcm9tQ29udGFpbmVyICYmIGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIubGVuZ3RoKSB7XG5cdFx0Zm9yIChjb25zdCBhZ2dyZWdhdGFibGVQcm9wIG9mIGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIpIHtcblx0XHRcdGlmICgoYWdncmVnYXRhYmxlUHJvcCBhcyBBZ2dyZWdhdGFibGVQcm9wZXJ0eVR5cGUpPy5Qcm9wZXJ0eT8udmFsdWUgPT09IHNNZWFzdXJlUGF0aCkge1xuXHRcdFx0XHRiQWdncmVnYXRhYmxlID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYgKGFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXIgJiYgYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lci5sZW5ndGgpIHtcblx0XHRmb3IgKGNvbnN0IGdyb3VwYWJsZVByb3Agb2YgYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lcikge1xuXHRcdFx0aWYgKGdyb3VwYWJsZVByb3A/LnZhbHVlID09PSBzRGltZW5zaW9uKSB7XG5cdFx0XHRcdGJHcm91cGFibGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gYkFnZ3JlZ2F0YWJsZSAmJiBiR3JvdXBhYmxlO1xufTtcblxuZXhwb3J0IHR5cGUgUGFyYW1ldGVyVHlwZSA9IHtcblx0bG9jYWxEYXRhUHJvcGVydHk6IHN0cmluZztcblx0dmFsdWVMaXN0UHJvcGVydHk6IHN0cmluZztcbn07XG5cbi8qKlxuICogTWV0aG9kIHRvIGdldCB0aGUgdmlzdWFsIGZpbHRlcnMgb2JqZWN0IGZvciBhIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNoYXJ0IGFubm90YXRpb25cbiAqIEBwYXJhbSBzUHJvcGVydHlQYXRoIFRoZSBhZ2dyZWdhdGlvbiBoZWxwZXJcbiAqIEBwYXJhbSBGaWx0ZXJGaWVsZHMgVGhlIGFnZ3JlZ2F0aW9uIGhlbHBlclxuICogQHJldHVybnMgVGhlIHZpc3VhbCBmaWx0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaXN1YWxGaWx0ZXJzKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHNQcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0RmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbj5cbik6IFZpc3VhbEZpbHRlcnMgfCB1bmRlZmluZWQge1xuXHRsZXQgdmlzdWFsRmlsdGVyOiBWaXN1YWxGaWx0ZXJzIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBvVmlzdWFsRmlsdGVyOiBGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IEZpbHRlckZpZWxkc1tzUHJvcGVydHlQYXRoXTtcblx0aWYgKG9WaXN1YWxGaWx0ZXI/LnZpc3VhbEZpbHRlcj8udmFsdWVMaXN0KSB7XG5cdFx0Y29uc3Qgb1ZGUGF0aCA9IG9WaXN1YWxGaWx0ZXI/LnZpc3VhbEZpbHRlcj8udmFsdWVMaXN0O1xuXHRcdGNvbnN0IGFubm90YXRpb25RdWFsaWZpZXJTcGxpdCA9IG9WRlBhdGguc3BsaXQoXCIjXCIpO1xuXHRcdGNvbnN0IHF1YWxpZmllclZMID0gYW5ub3RhdGlvblF1YWxpZmllclNwbGl0Lmxlbmd0aCA+IDEgPyBgVmFsdWVMaXN0IyR7YW5ub3RhdGlvblF1YWxpZmllclNwbGl0WzFdfWAgOiBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXRbMF07XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBlbnRpdHlUeXBlLnJlc29sdmVQYXRoKHNQcm9wZXJ0eVBhdGgpIGFzIFByb3BlcnR5O1xuXHRcdGNvbnN0IHZhbHVlTGlzdCA9IHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5bcXVhbGlmaWVyVkwgYXMga2V5b2YgUHJvcGVydHlBbm5vdGF0aW9uc19Db21tb25dIGFzIFZhbHVlTGlzdCB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyA9IChwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzPy52YWx1ZU9mKCkgYXMgYm9vbGVhbikgfHwgZmFsc2U7XG5cdFx0aWYgKHZhbHVlTGlzdCkge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvblBhdGggPSB2YWx1ZUxpc3Q/LkNvbGxlY3Rpb25QYXRoLnRvU3RyaW5nKCk7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3I8RW50aXR5U2V0Pihcblx0XHRcdFx0YC8ke2NvbGxlY3Rpb25QYXRoIHx8IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk/Lm5hbWV9YFxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHZhbHVlTGlzdFBhcmFtcyA9IHZhbHVlTGlzdD8uUGFyYW1ldGVycztcblx0XHRcdGxldCBvdXRQYXJhbWV0ZXI6IFZhbHVlTGlzdFBhcmFtZXRlck91dCB8IFZhbHVlTGlzdFBhcmFtZXRlckluT3V0IHwgdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgaW5QYXJhbWV0ZXJzOiBQYXJhbWV0ZXJUeXBlW10gPSBbXTtcblx0XHRcdGxldCBhUGFyYW1ldGVyczogc3RyaW5nW10gPSBbXTtcblx0XHRcdGNvbnN0IHBhcmFtZXRlckVudGl0eVR5cGUgPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0UGFyYW1ldGVyRW50aXR5VHlwZSgpO1xuXHRcdFx0YVBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJFbnRpdHlUeXBlXG5cdFx0XHRcdD8gcGFyYW1ldGVyRW50aXR5VHlwZS5rZXlzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4ga2V5Lm5hbWU7XG5cdFx0XHRcdCAgfSlcblx0XHRcdFx0OiBbXTtcblx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCkgPT09IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpKSB7XG5cdFx0XHRcdF9hZGRJblBhcmFtZXRlcnMoaW5QYXJhbWV0ZXJzLCBhUGFyYW1ldGVycywgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodmFsdWVMaXN0UGFyYW1zKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgdmFsdWVMaXN0UGFyYW0gb2YgdmFsdWVMaXN0UGFyYW1zKSB7XG5cdFx0XHRcdFx0Y29uc3QgbG9jYWxEYXRhUHJvcGVydHkgPSAodmFsdWVMaXN0UGFyYW0gYXMgVmFsdWVMaXN0UGFyYW1ldGVySW4pLkxvY2FsRGF0YVByb3BlcnR5Py52YWx1ZTtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUxpc3RQcm9wZXJ0eSA9IHZhbHVlTGlzdFBhcmFtLlZhbHVlTGlzdFByb3BlcnR5IGFzIHN0cmluZztcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHQodmFsdWVMaXN0UGFyYW0/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dFwiIHx8XG5cdFx0XHRcdFx0XHRcdHZhbHVlTGlzdFBhcmFtPy4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVyT3V0XCIpICYmXG5cdFx0XHRcdFx0XHRzUHJvcGVydHlQYXRoID09PSBsb2NhbERhdGFQcm9wZXJ0eVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0b3V0UGFyYW1ldGVyID0gdmFsdWVMaXN0UGFyYW07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdCh2YWx1ZUxpc3RQYXJhbT8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XCIgfHxcblx0XHRcdFx0XHRcdFx0dmFsdWVMaXN0UGFyYW0/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJJblwiKSAmJlxuXHRcdFx0XHRcdFx0c1Byb3BlcnR5UGF0aCAhPT0gbG9jYWxEYXRhUHJvcGVydHlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGJOb3RGaWx0ZXJhYmxlID0gaXNQcm9wZXJ0eUZpbHRlcmFibGUoY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LCB2YWx1ZUxpc3RQcm9wZXJ0eSk7XG5cdFx0XHRcdFx0XHRpZiAoIWJOb3RGaWx0ZXJhYmxlKSB7XG5cdFx0XHRcdFx0XHRcdGluUGFyYW1ldGVycy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRsb2NhbERhdGFQcm9wZXJ0eTogbG9jYWxEYXRhUHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWVMaXN0UHJvcGVydHk6IHZhbHVlTGlzdFByb3BlcnR5XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGluUGFyYW1ldGVycyAmJiBpblBhcmFtZXRlcnMubGVuZ3RoKSB7XG5cdFx0XHRcdGluUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChvSW5QYXJhbWV0ZXIpIHtcblx0XHRcdFx0XHRjb25zdCBtYWluRW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChvSW5QYXJhbWV0ZXI/LmxvY2FsRGF0YVByb3BlcnR5KSlcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVWYWx1ZVwiXVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWVMaXN0RW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChvSW5QYXJhbWV0ZXI/LnZhbHVlTGlzdFByb3BlcnR5KVxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVWYWx1ZVwiXVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKHZhbHVlTGlzdEVudGl0eVNldEluTWFwcGluZ0FsbG93ZWRFeHByZXNzaW9uID09PSBcInRydWVcIiAmJiBtYWluRW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPT09IFwiZmFsc2VcIikge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBGaWx0ZXJSZXN0cmljdGlvbnMgb2YgJHtzUHJvcGVydHlQYXRofSBpbiBNYWluRW50aXR5U2V0IGFuZCBWYWx1ZUxpc3RFbnRpdHlTZXQgYXJlIGRpZmZlcmVudGApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBwdlF1YWxpZmllciA9IHZhbHVlTGlzdD8uUHJlc2VudGF0aW9uVmFyaWFudFF1YWxpZmllcjtcblx0XHRcdGNvbnN0IHN2UXVhbGlmaWVyID0gdmFsdWVMaXN0Py5TZWxlY3Rpb25WYXJpYW50UXVhbGlmaWVyO1xuXHRcdFx0Y29uc3QgcHZBbm5vdGF0aW9uID0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnMuVUk/LltgUHJlc2VudGF0aW9uVmFyaWFudCMke3B2UXVhbGlmaWVyfWBdO1xuXHRcdFx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGlmICghYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHB2QW5ub3RhdGlvbikge1xuXHRcdFx0XHRjb25zdCBhVmlzdWFsaXphdGlvbnMgPSBwdkFubm90YXRpb24/LlZpc3VhbGl6YXRpb25zO1xuXHRcdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGAvJHt2YWx1ZUxpc3Q/LkNvbGxlY3Rpb25QYXRofWAgfHwgYC8ke2NvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5U2V0KCk/Lm5hbWV9YDtcblx0XHRcdFx0dmlzdWFsRmlsdGVyID0ge307XG5cdFx0XHRcdHZpc3VhbEZpbHRlci5jb250ZXh0UGF0aCA9IGNvbnRleHRQYXRoO1xuXHRcdFx0XHR2aXN1YWxGaWx0ZXIuaXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMgPSBpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcztcblx0XHRcdFx0bGV0IGNoYXJ0QW5ub3RhdGlvbjogQW5ub3RhdGlvblBhdGg8Q2hhcnQ+IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRmb3IgKGNvbnN0IHZpc3VhbGl6YXRpb24gb2YgYVZpc3VhbGl6YXRpb25zKSB7XG5cdFx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb24uJHRhcmdldD8udGVybSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydFwiKSB7XG5cdFx0XHRcdFx0XHRjaGFydEFubm90YXRpb24gPSB2aXN1YWxpemF0aW9uIGFzIEFubm90YXRpb25QYXRoPENoYXJ0Pjtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoY2hhcnRBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0Y29uc3QgX2JnZXRWRkFnZ3JlZ2F0aW9uOiBib29sZWFuIHwgdW5kZWZpbmVkID0gX2NoZWNrVkZBZ2dyZWdhdGlvbihcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdGNoYXJ0QW5ub3RhdGlvbixcblx0XHRcdFx0XHRcdGFnZ3JlZ2F0aW9uSGVscGVyXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpZiAoIV9iZ2V0VkZBZ2dyZWdhdGlvbikge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBiRGltZW5zaW9uSGlkZGVuID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpO1xuXHRcdFx0XHRcdGNvbnN0IGJEaW1lbnNpb25IaWRkZW5GaWx0ZXIgPVxuXHRcdFx0XHRcdFx0Y2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbkZpbHRlcj8udmFsdWVPZigpO1xuXHRcdFx0XHRcdGlmIChiRGltZW5zaW9uSGlkZGVuID09PSB0cnVlIHx8IGJEaW1lbnNpb25IaWRkZW5GaWx0ZXIgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGFWaXN1YWxpemF0aW9ucyAmJiBhVmlzdWFsaXphdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuY2hhcnRBbm5vdGF0aW9uID0gY2hhcnRBbm5vdGF0aW9uLiR0YXJnZXRcblx0XHRcdFx0XHRcdFx0PyBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoXG5cdFx0XHRcdFx0XHRcdFx0XHRgJHtjaGFydEFubm90YXRpb24uJHRhcmdldC5mdWxseVF1YWxpZmllZE5hbWV9LyRBbm5vdGF0aW9uUGF0aC9gXG5cdFx0XHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdC8vIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSB0byBhdm9pZCByZXBldGl0aXZlIGVudGl0eSB0eXBlIGluIGNhc2Ugb2Ygbm9uLXBhcmFtZXRlcml6ZWQgZW50aXR5IHNldCBlLmcgL1NhbGVzT3JkZXJNYW5hZ2UvY29tLmNfc2FsZXNvcmRlcm1hbmFnZV9zZF9hZ2dyZWdhdGUuU2FsZXNPcmRlck1hbmFnZVxuXHRcdFx0XHRcdFx0Y29uc3QgZW50aXR5U2V0TmFtZSA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8ubmFtZTtcblx0XHRcdFx0XHRcdGxldCBwcmVzZW50YXRpb25Bbm5vdGF0aW9uO1xuXHRcdFx0XHRcdFx0Y29uc3QgcmVsYXRpdmVBbm5vdGF0aW9uUGF0aCA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0UmVsYXRpdmVBbm5vdGF0aW9uUGF0aChcblx0XHRcdFx0XHRcdFx0YCR7cHZBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZX0vYCxcblx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGlmIChwYXJhbWV0ZXJFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0XHRcdHByZXNlbnRhdGlvbkFubm90YXRpb24gPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSArIFwiL1wiICsgcmVsYXRpdmVBbm5vdGF0aW9uUGF0aDtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHByZXNlbnRhdGlvbkFubm90YXRpb24gPSBcIi9cIiArIGVudGl0eVNldE5hbWUgKyBcIi9cIiArIHJlbGF0aXZlQW5ub3RhdGlvblBhdGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIucHJlc2VudGF0aW9uQW5ub3RhdGlvbiA9IHB2QW5ub3RhdGlvbiA/IHByZXNlbnRhdGlvbkFubm90YXRpb24gOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIub3V0UGFyYW1ldGVyID0gb3V0UGFyYW1ldGVyPy5Mb2NhbERhdGFQcm9wZXJ0eT8udmFsdWU7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzID0gaW5QYXJhbWV0ZXJzO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnZhbHVlbGlzdFByb3BlcnR5ID0gb3V0UGFyYW1ldGVyPy5WYWx1ZUxpc3RQcm9wZXJ0eSBhcyBzdHJpbmc7XG5cdFx0XHRcdFx0XHRjb25zdCBiSXNSYW5nZSA9IGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChzUHJvcGVydHlQYXRoKSlcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVSYW5nZVwiLCBcIk11bHRpUmFuZ2VcIl1cblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdGlmIChjb21waWxlRXhwcmVzc2lvbihiSXNSYW5nZSkgPT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLlZBTFVFTElTVCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGJJc01haW5FbnRpdHlTZXRTaW5nbGVTZWxlY3Rpb24gPSBjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMoXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoc1Byb3BlcnR5UGF0aCkpXG5cdFx0XHRcdFx0XHRcdFx0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHRcdFx0XHRcdFx0W1wiU2luZ2xlVmFsdWVcIl1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIubXVsdGlwbGVTZWxlY3Rpb25BbGxvd2VkID0gY29tcGlsZUV4cHJlc3Npb24obm90KGJJc01haW5FbnRpdHlTZXRTaW5nbGVTZWxlY3Rpb24pKTtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5yZXF1aXJlZCA9IGdldElzUmVxdWlyZWQoY29udmVydGVyQ29udGV4dCwgc1Byb3BlcnR5UGF0aCk7XG5cdFx0XHRcdFx0XHRsZXQgc3ZBbm5vdGF0aW9uOiBTZWxlY3Rpb25WYXJpYW50IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0aWYgKHN2UXVhbGlmaWVyKSB7XG5cdFx0XHRcdFx0XHRcdHN2QW5ub3RhdGlvbiA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5VHlwZUFubm90YXRpb248U2VsZWN0aW9uVmFyaWFudD4oXG5cdFx0XHRcdFx0XHRcdFx0YEBVSS5TZWxlY3Rpb25WYXJpYW50IyR7c3ZRdWFsaWZpZXJ9YFxuXHRcdFx0XHRcdFx0XHQpPy5hbm5vdGF0aW9uO1xuXHRcdFx0XHRcdFx0XHRsZXQgc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb247XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHJlbGF0aXZlU2VsZWN0aW9uVmFyaWFudFBhdGggPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgoXG5cdFx0XHRcdFx0XHRcdFx0YCR7c3ZBbm5vdGF0aW9uPy5mdWxseVF1YWxpZmllZE5hbWV9L2AsXG5cdFx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRpZiAocGFyYW1ldGVyRW50aXR5VHlwZSkge1xuXHRcdFx0XHRcdFx0XHRcdHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uID1cblx0XHRcdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpICsgXCIvXCIgKyByZWxhdGl2ZVNlbGVjdGlvblZhcmlhbnRQYXRoO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uID0gXCIvXCIgKyBlbnRpdHlTZXROYW1lICsgXCIvXCIgKyByZWxhdGl2ZVNlbGVjdGlvblZhcmlhbnRQYXRoO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5zZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbiA9IHN2QW5ub3RhdGlvbiA/IHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bGV0IHJlcXVpcmVkUHJvcGVydGllczogUHJvcGVydHlQYXRoW10gPSBbXTtcblx0XHRcdFx0XHRcdGlmIChwYXJhbWV0ZXJFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNFbnRpdHlTZXQgPSBjb2xsZWN0aW9uUGF0aC5zcGxpdChcIi9cIilbMF07XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNOYXZpZ2F0aW9uUHJvcGVydHkgPSBjb2xsZWN0aW9uUGF0aC5zcGxpdChcIi9cIilbMV07XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9FbnRpdHlTZXRDb252ZXJ0ZXJDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKGAvJHtzRW50aXR5U2V0fWApO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhUmVzdHJpY3RlZFByb3BlcnRpZXMgPVxuXHRcdFx0XHRcdFx0XHRcdG9FbnRpdHlTZXRDb252ZXJ0ZXJDb250ZXh0Py5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkuc3RhcnRpbmdFbnRpdHlTZXQ/LmFubm90YXRpb25zPy5DYXBhYmlsaXRpZXNcblx0XHRcdFx0XHRcdFx0XHRcdD8uTmF2aWdhdGlvblJlc3RyaWN0aW9ucz8uUmVzdHJpY3RlZFByb3BlcnRpZXM7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9SZXN0cmljdGVkUHJvcGVydHkgPSBhUmVzdHJpY3RlZFByb3BlcnRpZXM/LmZpbmQoXG5cdFx0XHRcdFx0XHRcdFx0KHJlc3RyaWN0ZWROYXZQcm9wOiBOYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvblR5cGVzKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzdHJpY3RlZE5hdlByb3AuTmF2aWdhdGlvblByb3BlcnR5Py50eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdHJpY3RlZE5hdlByb3AuTmF2aWdhdGlvblByb3BlcnR5LnZhbHVlID09PSBzTmF2aWdhdGlvblByb3BlcnR5O1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0aWVzID0gb1Jlc3RyaWN0ZWRQcm9wZXJ0eT8uRmlsdGVyUmVzdHJpY3Rpb25zPy5SZXF1aXJlZFByb3BlcnRpZXMgPz8gW107XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBlbnRpdHlTZXRPclNpbmdsZXRvbiA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5U2V0KCk7XG5cdFx0XHRcdFx0XHRcdGlmIChpc0VudGl0eVNldChlbnRpdHlTZXRPclNpbmdsZXRvbikpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnRpZXMgPVxuXHRcdFx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0T3JTaW5nbGV0b24uYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5GaWx0ZXJSZXN0cmljdGlvbnM/LlJlcXVpcmVkUHJvcGVydGllcyA/PyBbXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bGV0IHJlcXVpcmVkUHJvcGVydHlQYXRoczogc3RyaW5nW10gPSBbXTtcblx0XHRcdFx0XHRcdGlmIChyZXF1aXJlZFByb3BlcnRpZXM/Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAob1JlcXVpcmVQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydHlQYXRocy5wdXNoKG9SZXF1aXJlUHJvcGVydHkudmFsdWUpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydHlQYXRocyA9IHJlcXVpcmVkUHJvcGVydHlQYXRocy5jb25jYXQoYVBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnJlcXVpcmVkUHJvcGVydGllcyA9IHJlcXVpcmVkUHJvcGVydHlQYXRocztcblx0XHRcdFx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCkgPT09IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpKSB7XG5cdFx0XHRcdFx0XHRcdC8vIGlmIGNvbnRleHQgUGF0aCBmb3IgYm90aCB2aXN1YWwgZmlsdGVyIGFuZCBmaWx0ZXIgYmFyIGFyZSBzYW1lLCBjb25zaWRlciByZXF1aXJlZCBQcm9wZXJ0aWVzIGFzIHdlbGwgYWxvbmcgd2l0aCBpbiBQYXJhbWV0ZXJzXG5cdFx0XHRcdFx0XHRcdF9hZGRJblBhcmFtZXRlcnMoaW5QYXJhbWV0ZXJzLCByZXF1aXJlZFByb3BlcnRpZXMsIGZhbHNlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICh2aXN1YWxGaWx0ZXIucmVxdWlyZWRQcm9wZXJ0aWVzPy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0aWYgKCF2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzIHx8ICF2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICghdmlzdWFsRmlsdGVyLnNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuc2hvd092ZXJsYXlJbml0aWFsbHkgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgc2VsZWN0T3B0aW9ucyA9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN2QW5ub3RhdGlvbj8uU2VsZWN0T3B0aW9ucz8ubWFwKChvU2VsZWN0T3B0aW9uKSA9PiBvU2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZT8udmFsdWUpIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgcGFyYW1ldGVyT3B0aW9ucyA9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN2QW5ub3RhdGlvbj8uUGFyYW1ldGVycz8ubWFwKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdChvUGFyYW1ldGVyT3B0aW9uKSA9PiAob1BhcmFtZXRlck9wdGlvbiBhcyBQYXJhbWV0ZXJUeXBlcykuUHJvcGVydHlOYW1lPy52YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0T3B0aW9ucyA9IHNlbGVjdE9wdGlvbnMuY29uY2F0KHBhcmFtZXRlck9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0eVBhdGhzID0gcmVxdWlyZWRQcm9wZXJ0eVBhdGhzLnNvcnQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdHNlbGVjdE9wdGlvbnMgPSBzZWxlY3RPcHRpb25zLnNvcnQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5zaG93T3ZlcmxheUluaXRpYWxseSA9IHJlcXVpcmVkUHJvcGVydHlQYXRocy5zb21lKGZ1bmN0aW9uIChzUGF0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gIXNlbGVjdE9wdGlvbnMuaW5jbHVkZXMoc1BhdGgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5zaG93T3ZlcmxheUluaXRpYWxseSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuc2hvd092ZXJsYXlJbml0aWFsbHkgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IHNEaW1lbnNpb25UeXBlID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy4kdGFyZ2V0Py50eXBlO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnJlbmRlckxpbmVDaGFydCA9XG5cdFx0XHRcdFx0XHRcdHNEaW1lbnNpb25UeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiIHx8XG5cdFx0XHRcdFx0XHRcdHNEaW1lbnNpb25UeXBlID09PSBcIkVkbS5EYXRlXCIgfHxcblx0XHRcdFx0XHRcdFx0c0RpbWVuc2lvblR5cGUgPT09IFwiRWRtLlRpbWVPZkRheVwiIHx8XG5cdFx0XHRcdFx0XHRcdGNoYXJ0QW5ub3RhdGlvbi4kdGFyZ2V0Py5DaGFydFR5cGUgIT09IFwiVUkuQ2hhcnRUeXBlL0xpbmVcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLkNIQVJUKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLlBSRVNFTlRBVElPTlZBUklBTlQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLlZBTFVFTElTVCk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGlhZ25vc3RpY3MoKS5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5Lk1hbmlmZXN0LCBJc3N1ZVNldmVyaXR5LkhpZ2gsIElzc3VlVHlwZS5NQUxGT1JNRURfVklTVUFMRklMVEVSUy5WQUxVRUxJU1QpO1xuXHR9XG5cdHJldHVybiB2aXN1YWxGaWx0ZXI7XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGFkZCBpbnBhcmFtZXRlcnMgZnJvbSByZXF1aXJlZCBwcm9wZXJ0aWVzIGFuZCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBwYXJhbSBpblBhcmFtcyBBbiBhcnJheSBjb250YWluaW5nIGV4aXN0aW5nIGlucGFyYW1zXG4gKiBAcGFyYW0gcHJvcGVydGllcyBBbiBhcnJheSBjb250YWluaW5nIGVpdGhlciByZXF1aXJlZHByb3BlcnRpZXMgb3IgcGFyYW1ldGVyc1xuICogQHBhcmFtIGlzUGFyYW0gQSBib29sZWFuIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHBhc3NlZCBwcm9wZXJ0aWVzIGFyZSBwYXJhbWV0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBfYWRkSW5QYXJhbWV0ZXJzKGluUGFyYW1zOiBQYXJhbWV0ZXJUeXBlW10sIHByb3BlcnRpZXM6IFByb3BlcnR5UGF0aFtdIHwgc3RyaW5nW10sIGlzUGFyYW06IGJvb2xlYW4pOiB2b2lkIHtcblx0cHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50KSB7XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBpc1BhcmFtID8gZWxlbWVudCA6IChlbGVtZW50IGFzIFByb3BlcnR5UGF0aCkudmFsdWU7XG5cdFx0aW5QYXJhbXMucHVzaCh7XG5cdFx0XHRsb2NhbERhdGFQcm9wZXJ0eTogcHJvcGVydHkgYXMgc3RyaW5nLFxuXHRcdFx0dmFsdWVMaXN0UHJvcGVydHk6IHByb3BlcnR5IGFzIHN0cmluZ1xuXHRcdH0pO1xuXHR9KTtcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7O0VBMkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxNQUFNQSxtQkFBbUIsR0FBRyxVQUMzQkMsZ0JBQXlELEVBQ3pEQyxlQUFzQyxFQUN0Q0MsaUJBQW9DLEVBQ2Q7SUFBQTtJQUN0QixJQUFJQyxZQUFZLEVBQUVDLFVBQVUsRUFBRUMsYUFBYTtJQUMzQyxJQUFJQyxRQUE0QjtJQUNoQyxNQUFNQyxnQkFBZ0IsR0FBR0wsaUJBQWlCLENBQUNNLDZCQUE2QixFQUFFO0lBQzFFLElBQUlDLGtCQUFrQixHQUFHUCxpQkFBaUIsQ0FBQ1Esb0JBQW9CLEVBQUU7SUFDakUsSUFBSUMsZUFBZSxHQUFHLEVBQTRCO0lBQ2xEO0lBQ0EsSUFBSVYsZUFBZSxhQUFmQSxlQUFlLHdDQUFmQSxlQUFlLENBQUVXLE9BQU8sa0RBQXhCLHNCQUEwQkMsUUFBUSxFQUFFO01BQUE7TUFDdkNGLGVBQWUsR0FBR0osZ0JBQWdCLENBQUNPLE1BQU0sQ0FBQyxVQUFVQyxPQUF3QixFQUFFO1FBQUE7UUFDN0UsT0FBT0EsT0FBTyxDQUFDQyxTQUFTLE1BQUtmLGVBQWUsYUFBZkEsZUFBZSxpREFBZkEsZUFBZSxDQUFFVyxPQUFPLHFGQUF4Qix1QkFBMEJDLFFBQVEscUZBQWxDLHVCQUFxQyxDQUFDLENBQUMsMkRBQXZDLHVCQUF5Q0ksS0FBSztNQUM1RSxDQUFDLENBQUM7TUFDRlgsUUFBUSxHQUFHSyxlQUFlLENBQUNPLE1BQU0sR0FBRyxDQUFDLEdBQUdQLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQ0ssU0FBUyxHQUFHZixlQUFlLGFBQWZBLGVBQWUsaURBQWZBLGVBQWUsQ0FBRVcsT0FBTyxxRkFBeEIsdUJBQTBCQyxRQUFRLHFGQUFsQyx1QkFBcUMsQ0FBQyxDQUFDLDJEQUF2Qyx1QkFBeUNJ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
@@ -10,13 +10,13 @@ import type {
10
10
  } from "@sap-ux/vocabularies-types/vocabularies/Common";
11
11
  import type { PropertyAnnotations_Common } from "@sap-ux/vocabularies-types/vocabularies/Common_Edm";
12
12
  import type { Chart, ParameterTypes, SelectionVariant } from "@sap-ux/vocabularies-types/vocabularies/UI";
13
+ import type { CompiledBindingToolkitExpression } from "sap/fe/base/BindingToolkit";
14
+ import { compileExpression, not } from "sap/fe/base/BindingToolkit";
13
15
  import type ConverterContext from "sap/fe/core/converters/ConverterContext";
14
16
  import type { FilterFieldManifestConfiguration } from "sap/fe/core/converters/ManifestSettings";
15
17
  import type { PageContextPathTarget } from "sap/fe/core/converters/TemplateConverter";
16
18
  import { AggregationHelper } from "sap/fe/core/converters/helpers/Aggregation";
17
19
  import { IssueCategory, IssueSeverity, IssueType } from "sap/fe/core/converters/helpers/IssueManager";
18
- import type { CompiledBindingToolkitExpression } from "sap/fe/core/helpers/BindingToolkit";
19
- import { compileExpression, not } from "sap/fe/core/helpers/BindingToolkit";
20
20
  import { isEntitySet } from "sap/fe/core/helpers/TypeGuards";
21
21
  import { checkFilterExpressionRestrictions } from "sap/fe/core/templating/DataModelPathHelper";
22
22
  import { getIsRequired, isPropertyFilterable } from "sap/fe/core/templating/FilterTemplating";
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2024 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/fe/core/helpers/BindingToolkit", "sap/m/AvatarShape"], function (BindingToolkit, AvatarShape) {
5
+ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/m/AvatarShape"], function (BindingToolkit, AvatarShape) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
@@ -60,4 +60,4 @@ sap.ui.define(["sap/fe/core/helpers/BindingToolkit", "sap/m/AvatarShape"], funct
60
60
  _exports.getAvatar = getAvatar;
61
61
  return _exports;
62
62
  }, false);
63
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc05hdHVyYWxQZXJzb25FeHByZXNzaW9uIiwiY29udmVydGVyQ29udGV4dCIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsImdldEVudGl0eVR5cGUiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIklzTmF0dXJhbFBlcnNvbiIsImNvbXBpbGVBdmF0YXJTaGFwZSIsImV4cHJlc3Npb24iLCJjb21waWxlRXhwcmVzc2lvbiIsImlmRWxzZSIsIkF2YXRhclNoYXBlIiwiQ2lyY2xlIiwiU3F1YXJlIiwiY29tcGlsZUZhbGxCYWNrSWNvbiIsImdldEZhbGxCYWNrSWNvbiIsImhlYWRlckluZm8iLCJVSSIsIkhlYWRlckluZm8iLCJJbWFnZVVybCIsIlR5cGVJbWFnZVVybCIsInVuZGVmaW5lZCIsImdldFNvdXJjZSIsImdldEF2YXRhciIsIm9Tb3VyY2UiLCJJbml0aWFscyIsInNyYyIsImluaXRpYWxzIiwiZmFsbGJhY2tJY29uIiwiZGlzcGxheVNoYXBlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBdmF0YXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgRXhwcmVzc2lvbk9yUHJpbWl0aXZlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sIGlmRWxzZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgQXZhdGFyU2hhcGUgZnJvbSBcInNhcC9tL0F2YXRhclNoYXBlXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi8uLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5cbmV4cG9ydCB0eXBlIEF2YXRhciA9IHtcblx0c3JjPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGluaXRpYWxzOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0ZmFsbGJhY2tJY29uPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGRpc3BsYXlTaGFwZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG59O1xuXG5jb25zdCBpc05hdHVyYWxQZXJzb25FeHByZXNzaW9uID0gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPiA9PiB7XG5cdHJldHVybiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnMuQ29tbW9uPy5Jc05hdHVyYWxQZXJzb24pO1xufTtcblxuY29uc3QgY29tcGlsZUF2YXRhclNoYXBlID0gKGV4cHJlc3Npb246IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uID0+IHtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShleHByZXNzaW9uLCBBdmF0YXJTaGFwZS5DaXJjbGUsIEF2YXRhclNoYXBlLlNxdWFyZSkpO1xufTtcblxuLy8gVGhlIHNoYXBlIG9mIHRoZSBBdmF0YXIgZGVwZW5kcyB1cG9uIHdoZXRoZXIgdGhlIGVudGl0eSBpbnN0YW5jZSByZXByZXNlbnRzIGEgbmF0dXJhbCBwZXJzb24uXG4vLyBUaGlzIGNhbiBkZXBlbmQgdXBvbiBhIHByb3BlcnR5IGluIHRoZSBlbnRpdHkuIFVubGlrZSB0aGUgc2hhcGUgb2YgYW4gYXZhdGFyIGRlZmluZWQgaW4gYSBmaWVsZCwgaXRcbi8vIGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBtYWtlIHRoZSBpbWFnZSBhdCB0aGUgb2JqZWN0IHBhZ2UgaGVhZGVyIGRlcGVuZGVudCB1cG9uIHRoZSBwcm9wZXJ0eSBjb250YWluZ1xuLy8gdGhlIGltYWdlIG9yIGltYWdlVVJMLlxuY29uc3QgY29tcGlsZUZhbGxCYWNrSWNvbiA9IChleHByZXNzaW9uOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9PiB7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihpZkVsc2UoZXhwcmVzc2lvbiwgXCJzYXAtaWNvbjovL3BlcnNvbi1wbGFjZWhvbGRlclwiLCBcInNhcC1pY29uOi8vcHJvZHVjdFwiKSk7XG59O1xuXG5jb25zdCBnZXRGYWxsQmFja0ljb24gPSAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCB1bmRlZmluZWQgPT4ge1xuXHRjb25zdCBoZWFkZXJJbmZvID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJJbmZvO1xuXHRpZiAoIWhlYWRlckluZm8gfHwgKGhlYWRlckluZm8gJiYgIWhlYWRlckluZm8uSW1hZ2VVcmwgJiYgIWhlYWRlckluZm8uVHlwZUltYWdlVXJsKSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0aWYgKGhlYWRlckluZm8uSW1hZ2VVcmwgJiYgaGVhZGVySW5mby5UeXBlSW1hZ2VVcmwpIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGhlYWRlckluZm8uVHlwZUltYWdlVXJsKSk7XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVGYWxsQmFja0ljb24oaXNOYXR1cmFsUGVyc29uRXhwcmVzc2lvbihjb252ZXJ0ZXJDb250ZXh0KSk7XG59O1xuXG5jb25zdCBnZXRTb3VyY2UgPSAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCB1bmRlZmluZWQgPT4ge1xuXHRjb25zdCBoZWFkZXJJbmZvID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJJbmZvO1xuXHRpZiAoIWhlYWRlckluZm8gfHwgIShoZWFkZXJJbmZvLkltYWdlVXJsIHx8IGhlYWRlckluZm8uVHlwZUltYWdlVXJsKSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihoZWFkZXJJbmZvLkltYWdlVXJsIHx8IGhlYWRlckluZm8uVHlwZUltYWdlVXJsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXZhdGFyID0gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IEF2YXRhciB8IHVuZGVmaW5lZCA9PiB7XG5cdGNvbnN0IGhlYWRlckluZm8gPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKS5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm87XG5cdGNvbnN0IG9Tb3VyY2UgPSBoZWFkZXJJbmZvICYmIChoZWFkZXJJbmZvLkltYWdlVXJsIHx8IGhlYWRlckluZm8uVHlwZUltYWdlVXJsIHx8IGhlYWRlckluZm8uSW5pdGlhbHMpO1xuXHRpZiAoIW9Tb3VyY2UpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0c3JjOiBnZXRTb3VyY2UoY29udmVydGVyQ29udGV4dCksXG5cdFx0aW5pdGlhbHM6IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihoZWFkZXJJbmZvPy5Jbml0aWFscywgW10sIFwiXCIpKSxcblx0XHRmYWxsYmFja0ljb246IGdldEZhbGxCYWNrSWNvbihjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRkaXNwbGF5U2hhcGU6IGNvbXBpbGVBdmF0YXJTaGFwZShpc05hdHVyYWxQZXJzb25FeHByZXNzaW9uKGNvbnZlcnRlckNvbnRleHQpKVxuXHR9O1xufTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7RUFhQSxNQUFNQSx5QkFBeUIsR0FBSUMsZ0JBQXlELElBQXFDO0lBQUE7SUFDaEksT0FBT0MsMkJBQTJCLDBCQUFDRCxnQkFBZ0IsQ0FBQ0UsYUFBYSxFQUFFLENBQUNDLFdBQVcsQ0FBQ0MsTUFBTSwwREFBbkQsc0JBQXFEQyxlQUFlLENBQUM7RUFDekcsQ0FBQztFQUVELE1BQU1DLGtCQUFrQixHQUFJQyxVQUEwQyxJQUF1QztJQUM1RyxPQUFPQyxpQkFBaUIsQ0FBQ0MsTUFBTSxDQUFDRixVQUFVLEVBQUVHLFdBQVcsQ0FBQ0MsTUFBTSxFQUFFRCxXQUFXLENBQUNFLE1BQU0sQ0FBQyxDQUFDO0VBQ3JGLENBQUM7O0VBRUQ7RUFDQTtFQUNBO0VBQ0E7RUFDQSxNQUFNQyxtQkFBbUIsR0FBSU4sVUFBMEMsSUFBdUM7SUFDN0csT0FBT0MsaUJBQWlCLENBQUNDLE1BQU0sQ0FBQ0YsVUFBVSxFQUFFLCtCQUErQixFQUFFLG9CQUFvQixDQUFDLENBQUM7RUFDcEcsQ0FBQztFQUVELE1BQU1PLGVBQWUsR0FBSWQsZ0JBQXlELElBQW1EO0lBQUE7SUFDcEksTUFBTWUsVUFBVSw2QkFBR2YsZ0JBQWdCLENBQUNFLGFBQWEsRUFBRSxDQUFDQyxXQUFXLHFGQUE1Qyx1QkFBOENhLEVBQUUsMkRBQWhELHVCQUFrREMsVUFBVTtJQUMvRSxJQUFJLENBQUNGLFVBQVUsSUFBS0EsVUFBVSxJQUFJLENBQUNBLFVBQVUsQ0FBQ0csUUFBUSxJQUFJLENBQUNILFVBQVUsQ0FBQ0ksWUFBYSxFQUFFO01BQ3BGLE9BQU9DLFNBQVM7SUFDakI7SUFDQSxJQUFJTCxVQUFVLENBQUNHLFFBQVEsSUFBSUgsVUFBVSxDQUFDSSxZQUFZLEVBQUU7TUFDbkQsT0FBT1gsaUJBQWlCLENBQUNQLDJCQUEyQixDQUFDYyxVQUFVLENBQUNJLFlBQVksQ0FBQyxDQUFDO0lBQy9FO0lBQ0EsT0FBT04sbUJBQW1CLENBQUNkLHlCQUF5QixDQUFDQyxnQkFBZ0IsQ0FBQyxDQUFDO0VBQ3hFLENBQUM7RUFFRCxNQUFNcUIsU0FBUyxHQUFJckIsZ0JBQXlELElBQW1EO0lBQUE7SUFDOUgsTUFBTWUsVUFBVSw2QkFBR2YsZ0JBQWdCLENBQUNFLGFBQWEsRUFBRSxDQUFDQyxXQUFXLHFGQUE1Qyx1QkFBOENhLEVBQUUsMkRBQWhELHVCQUFrREMsVUFBVTtJQUMvRSxJQUFJLENBQUNGLFVBQVUsSUFBSSxFQUFFQSxVQUFVLENBQUNHLFFBQVEsSUFBSUgsVUFBVSxDQUFDSSxZQUFZLENBQUMsRUFBRTtNQUNyRSxPQUFPQyxTQUFTO0lBQ2pCO0lBQ0EsT0FBT1osaUJBQWlCLENBQUNQLDJCQUEyQixDQUFDYyxVQUFVLENBQUNHLFFBQVEsSUFBSUgsVUFBVSxDQUFDSSxZQUFZLENBQUMsQ0FBQztFQUN0RyxDQUFDO0VBRU0sTUFBTUcsU0FBUyxHQUFJdEIsZ0JBQXlELElBQXlCO0lBQUE7SUFDM0csTUFBTWUsVUFBVSw2QkFBR2YsZ0JBQWdCLENBQUNFLGFBQWEsRUFBRSxDQUFDQyxXQUFXLHFGQUE1Qyx1QkFBOENhLEVBQUUsMkRBQWhELHVCQUFrREMsVUFBVTtJQUMvRSxNQUFNTSxPQUFPLEdBQUdSLFVBQVUsS0FBS0EsVUFBVSxDQUFDRyxRQUFRLElBQUlILFVBQVUsQ0FBQ0ksWUFBWSxJQUFJSixVQUFVLENBQUNTLFFBQVEsQ0FBQztJQUNyRyxJQUFJLENBQUNELE9BQU8sRUFBRTtNQUNiLE9BQU9ILFNBQVM7SUFDakI7SUFDQSxPQUFPO01BQ05LLEdBQUcsRUFBRUosU0FBUyxDQUFDckIsZ0JBQWdCLENBQUM7TUFDaEMwQixRQUFRLEVBQUVsQixpQkFBaUIsQ0FBQ1AsMkJBQTJCLENBQUNjLFVBQVUsYUFBVkEsVUFBVSx1QkFBVkEsVUFBVSxDQUFFUyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO01BQ3RGRyxZQUFZLEVBQUViLGVBQWUsQ0FBQ2QsZ0JBQWdCLENBQUM7TUFDL0M0QixZQUFZLEVBQUV0QixrQkFBa0IsQ0FBQ1AseUJBQXlCLENBQUNDLGdCQUFnQixDQUFDO0lBQzdFLENBQUM7RUFDRixDQUFDO0VBQUM7RUFBQTtBQUFBIn0=
63
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc05hdHVyYWxQZXJzb25FeHByZXNzaW9uIiwiY29udmVydGVyQ29udGV4dCIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsImdldEVudGl0eVR5cGUiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIklzTmF0dXJhbFBlcnNvbiIsImNvbXBpbGVBdmF0YXJTaGFwZSIsImV4cHJlc3Npb24iLCJjb21waWxlRXhwcmVzc2lvbiIsImlmRWxzZSIsIkF2YXRhclNoYXBlIiwiQ2lyY2xlIiwiU3F1YXJlIiwiY29tcGlsZUZhbGxCYWNrSWNvbiIsImdldEZhbGxCYWNrSWNvbiIsImhlYWRlckluZm8iLCJVSSIsIkhlYWRlckluZm8iLCJJbWFnZVVybCIsIlR5cGVJbWFnZVVybCIsInVuZGVmaW5lZCIsImdldFNvdXJjZSIsImdldEF2YXRhciIsIm9Tb3VyY2UiLCJJbml0aWFscyIsInNyYyIsImluaXRpYWxzIiwiZmFsbGJhY2tJY29uIiwiZGlzcGxheVNoYXBlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBdmF0YXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgRXhwcmVzc2lvbk9yUHJpbWl0aXZlIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLCBpZkVsc2UgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCBBdmF0YXJTaGFwZSBmcm9tIFwic2FwL20vQXZhdGFyU2hhcGVcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcblxuZXhwb3J0IHR5cGUgQXZhdGFyID0ge1xuXHRzcmM/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0aW5pdGlhbHM6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRmYWxsYmFja0ljb24/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0ZGlzcGxheVNoYXBlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcbn07XG5cbmNvbnN0IGlzTmF0dXJhbFBlcnNvbkV4cHJlc3Npb24gPSAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+ID0+IHtcblx0cmV0dXJuIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKS5hbm5vdGF0aW9ucy5Db21tb24/LklzTmF0dXJhbFBlcnNvbik7XG59O1xuXG5jb25zdCBjb21waWxlQXZhdGFyU2hhcGUgPSAoZXhwcmVzc2lvbjogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+KTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gPT4ge1xuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGV4cHJlc3Npb24sIEF2YXRhclNoYXBlLkNpcmNsZSwgQXZhdGFyU2hhcGUuU3F1YXJlKSk7XG59O1xuXG4vLyBUaGUgc2hhcGUgb2YgdGhlIEF2YXRhciBkZXBlbmRzIHVwb24gd2hldGhlciB0aGUgZW50aXR5IGluc3RhbmNlIHJlcHJlc2VudHMgYSBuYXR1cmFsIHBlcnNvbi5cbi8vIFRoaXMgY2FuIGRlcGVuZCB1cG9uIGEgcHJvcGVydHkgaW4gdGhlIGVudGl0eS4gVW5saWtlIHRoZSBzaGFwZSBvZiBhbiBhdmF0YXIgZGVmaW5lZCBpbiBhIGZpZWxkLCBpdFxuLy8gZG9lc24ndCBtYWtlIHNlbnNlIHRvIG1ha2UgdGhlIGltYWdlIGF0IHRoZSBvYmplY3QgcGFnZSBoZWFkZXIgZGVwZW5kZW50IHVwb24gdGhlIHByb3BlcnR5IGNvbnRhaW5nXG4vLyB0aGUgaW1hZ2Ugb3IgaW1hZ2VVUkwuXG5jb25zdCBjb21waWxlRmFsbEJhY2tJY29uID0gKGV4cHJlc3Npb246IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uID0+IHtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShleHByZXNzaW9uLCBcInNhcC1pY29uOi8vcGVyc29uLXBsYWNlaG9sZGVyXCIsIFwic2FwLWljb246Ly9wcm9kdWN0XCIpKTtcbn07XG5cbmNvbnN0IGdldEZhbGxCYWNrSWNvbiA9IChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHVuZGVmaW5lZCA9PiB7XG5cdGNvbnN0IGhlYWRlckluZm8gPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKS5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm87XG5cdGlmICghaGVhZGVySW5mbyB8fCAoaGVhZGVySW5mbyAmJiAhaGVhZGVySW5mby5JbWFnZVVybCAmJiAhaGVhZGVySW5mby5UeXBlSW1hZ2VVcmwpKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRpZiAoaGVhZGVySW5mby5JbWFnZVVybCAmJiBoZWFkZXJJbmZvLlR5cGVJbWFnZVVybCkge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oaGVhZGVySW5mby5UeXBlSW1hZ2VVcmwpKTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUZhbGxCYWNrSWNvbihpc05hdHVyYWxQZXJzb25FeHByZXNzaW9uKGNvbnZlcnRlckNvbnRleHQpKTtcbn07XG5cbmNvbnN0IGdldFNvdXJjZSA9IChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHVuZGVmaW5lZCA9PiB7XG5cdGNvbnN0IGhlYWRlckluZm8gPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKS5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm87XG5cdGlmICghaGVhZGVySW5mbyB8fCAhKGhlYWRlckluZm8uSW1hZ2VVcmwgfHwgaGVhZGVySW5mby5UeXBlSW1hZ2VVcmwpKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGhlYWRlckluZm8uSW1hZ2VVcmwgfHwgaGVhZGVySW5mby5UeXBlSW1hZ2VVcmwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBdmF0YXIgPSAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogQXZhdGFyIHwgdW5kZWZpbmVkID0+IHtcblx0Y29uc3QgaGVhZGVySW5mbyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbztcblx0Y29uc3Qgb1NvdXJjZSA9IGhlYWRlckluZm8gJiYgKGhlYWRlckluZm8uSW1hZ2VVcmwgfHwgaGVhZGVySW5mby5UeXBlSW1hZ2VVcmwgfHwgaGVhZGVySW5mby5Jbml0aWFscyk7XG5cdGlmICghb1NvdXJjZSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRzcmM6IGdldFNvdXJjZShjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRpbml0aWFsczogY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGhlYWRlckluZm8/LkluaXRpYWxzLCBbXSwgXCJcIikpLFxuXHRcdGZhbGxiYWNrSWNvbjogZ2V0RmFsbEJhY2tJY29uKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGRpc3BsYXlTaGFwZTogY29tcGlsZUF2YXRhclNoYXBlKGlzTmF0dXJhbFBlcnNvbkV4cHJlc3Npb24oY29udmVydGVyQ29udGV4dCkpXG5cdH07XG59O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7OztFQWFBLE1BQU1BLHlCQUF5QixHQUFJQyxnQkFBeUQsSUFBcUM7SUFBQTtJQUNoSSxPQUFPQywyQkFBMkIsMEJBQUNELGdCQUFnQixDQUFDRSxhQUFhLEVBQUUsQ0FBQ0MsV0FBVyxDQUFDQyxNQUFNLDBEQUFuRCxzQkFBcURDLGVBQWUsQ0FBQztFQUN6RyxDQUFDO0VBRUQsTUFBTUMsa0JBQWtCLEdBQUlDLFVBQTBDLElBQXVDO0lBQzVHLE9BQU9DLGlCQUFpQixDQUFDQyxNQUFNLENBQUNGLFVBQVUsRUFBRUcsV0FBVyxDQUFDQyxNQUFNLEVBQUVELFdBQVcsQ0FBQ0UsTUFBTSxDQUFDLENBQUM7RUFDckYsQ0FBQzs7RUFFRDtFQUNBO0VBQ0E7RUFDQTtFQUNBLE1BQU1DLG1CQUFtQixHQUFJTixVQUEwQyxJQUF1QztJQUM3RyxPQUFPQyxpQkFBaUIsQ0FBQ0MsTUFBTSxDQUFDRixVQUFVLEVBQUUsK0JBQStCLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztFQUNwRyxDQUFDO0VBRUQsTUFBTU8sZUFBZSxHQUFJZCxnQkFBeUQsSUFBbUQ7SUFBQTtJQUNwSSxNQUFNZSxVQUFVLDZCQUFHZixnQkFBZ0IsQ0FBQ0UsYUFBYSxFQUFFLENBQUNDLFdBQVcscUZBQTVDLHVCQUE4Q2EsRUFBRSwyREFBaEQsdUJBQWtEQyxVQUFVO0lBQy9FLElBQUksQ0FBQ0YsVUFBVSxJQUFLQSxVQUFVLElBQUksQ0FBQ0EsVUFBVSxDQUFDRyxRQUFRLElBQUksQ0FBQ0gsVUFBVSxDQUFDSSxZQUFhLEVBQUU7TUFDcEYsT0FBT0MsU0FBUztJQUNqQjtJQUNBLElBQUlMLFVBQVUsQ0FBQ0csUUFBUSxJQUFJSCxVQUFVLENBQUNJLFlBQVksRUFBRTtNQUNuRCxPQUFPWCxpQkFBaUIsQ0FBQ1AsMkJBQTJCLENBQUNjLFVBQVUsQ0FBQ0ksWUFBWSxDQUFDLENBQUM7SUFDL0U7SUFDQSxPQUFPTixtQkFBbUIsQ0FBQ2QseUJBQXlCLENBQUNDLGdCQUFnQixDQUFDLENBQUM7RUFDeEUsQ0FBQztFQUVELE1BQU1xQixTQUFTLEdBQUlyQixnQkFBeUQsSUFBbUQ7SUFBQTtJQUM5SCxNQUFNZSxVQUFVLDZCQUFHZixnQkFBZ0IsQ0FBQ0UsYUFBYSxFQUFFLENBQUNDLFdBQVcscUZBQTVDLHVCQUE4Q2EsRUFBRSwyREFBaEQsdUJBQWtEQyxVQUFVO0lBQy9FLElBQUksQ0FBQ0YsVUFBVSxJQUFJLEVBQUVBLFVBQVUsQ0FBQ0csUUFBUSxJQUFJSCxVQUFVLENBQUNJLFlBQVksQ0FBQyxFQUFFO01BQ3JFLE9BQU9DLFNBQVM7SUFDakI7SUFDQSxPQUFPWixpQkFBaUIsQ0FBQ1AsMkJBQTJCLENBQUNjLFVBQVUsQ0FBQ0csUUFBUSxJQUFJSCxVQUFVLENBQUNJLFlBQVksQ0FBQyxDQUFDO0VBQ3RHLENBQUM7RUFFTSxNQUFNRyxTQUFTLEdBQUl0QixnQkFBeUQsSUFBeUI7SUFBQTtJQUMzRyxNQUFNZSxVQUFVLDZCQUFHZixnQkFBZ0IsQ0FBQ0UsYUFBYSxFQUFFLENBQUNDLFdBQVcscUZBQTVDLHVCQUE4Q2EsRUFBRSwyREFBaEQsdUJBQWtEQyxVQUFVO0lBQy9FLE1BQU1NLE9BQU8sR0FBR1IsVUFBVSxLQUFLQSxVQUFVLENBQUNHLFFBQVEsSUFBSUgsVUFBVSxDQUFDSSxZQUFZLElBQUlKLFVBQVUsQ0FBQ1MsUUFBUSxDQUFDO0lBQ3JHLElBQUksQ0FBQ0QsT0FBTyxFQUFFO01BQ2IsT0FBT0gsU0FBUztJQUNqQjtJQUNBLE9BQU87TUFDTkssR0FBRyxFQUFFSixTQUFTLENBQUNyQixnQkFBZ0IsQ0FBQztNQUNoQzBCLFFBQVEsRUFBRWxCLGlCQUFpQixDQUFDUCwyQkFBMkIsQ0FBQ2MsVUFBVSxhQUFWQSxVQUFVLHVCQUFWQSxVQUFVLENBQUVTLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDdEZHLFlBQVksRUFBRWIsZUFBZSxDQUFDZCxnQkFBZ0IsQ0FBQztNQUMvQzRCLFlBQVksRUFBRXRCLGtCQUFrQixDQUFDUCx5QkFBeUIsQ0FBQ0MsZ0JBQWdCLENBQUM7SUFDN0UsQ0FBQztFQUNGLENBQUM7RUFBQztFQUFBO0FBQUEifQ==
@@ -1,6 +1,6 @@
1
+ import type { CompiledBindingToolkitExpression, ExpressionOrPrimitive } from "sap/fe/base/BindingToolkit";
2
+ import { compileExpression, getExpressionFromAnnotation, ifElse } from "sap/fe/base/BindingToolkit";
1
3
  import type { PageContextPathTarget } from "sap/fe/core/converters/TemplateConverter";
2
- import type { CompiledBindingToolkitExpression, ExpressionOrPrimitive } from "sap/fe/core/helpers/BindingToolkit";
3
- import { compileExpression, getExpressionFromAnnotation, ifElse } from "sap/fe/core/helpers/BindingToolkit";
4
4
  import AvatarShape from "sap/m/AvatarShape";
5
5
  import type ConverterContext from "../../ConverterContext";
6
6