@sapui5/sap.fe.core 1.131.0 → 1.133.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 (317) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +17 -23
  4. package/src/sap/fe/core/AppComponent.js +74 -36
  5. package/src/sap/fe/core/AppComponent.ts +70 -3
  6. package/src/sap/fe/core/AppStateHandler.js +44 -13
  7. package/src/sap/fe/core/AppStateHandler.ts +38 -0
  8. package/src/sap/fe/core/BaseController.js +3 -3
  9. package/src/sap/fe/core/CommonUtils.js +30 -37
  10. package/src/sap/fe/core/CommonUtils.ts +15 -13
  11. package/src/sap/fe/core/ExtensionAPI.js +29 -34
  12. package/src/sap/fe/core/ExtensionAPI.ts +3 -0
  13. package/src/sap/fe/core/InsightsFormattersExtension.js +2 -2
  14. package/src/sap/fe/core/PageController.js +40 -31
  15. package/src/sap/fe/core/PageController.ts +14 -1
  16. package/src/sap/fe/core/ResourceModel.js +4 -4
  17. package/src/sap/fe/core/ReuseComponent.js +27 -13
  18. package/src/sap/fe/core/ReuseComponent.ts +18 -0
  19. package/src/sap/fe/core/TemplateComponent.js +102 -89
  20. package/src/sap/fe/core/TemplateComponent.ts +20 -1
  21. package/src/sap/fe/core/TemplateModel.js +6 -7
  22. package/src/sap/fe/core/UIProvider.js +1 -1
  23. package/src/sap/fe/core/UIProvider.ts +2 -9
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +63 -48
  25. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +56 -27
  26. package/src/sap/fe/core/buildingBlocks/IBuildingBlockOwnerComponent.js +9 -0
  27. package/src/sap/fe/core/buildingBlocks/IBuildingBlockOwnerComponent.ts +48 -0
  28. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +4 -6
  29. package/src/sap/fe/core/buildingBlocks/templating/AttributeModel.js +2 -2
  30. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +2 -3
  31. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +32 -18
  32. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +30 -3
  33. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +9 -13
  34. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +2 -1
  35. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlock.js +2 -2
  36. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +19 -25
  37. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +1 -1
  38. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +3 -4
  39. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +20 -24
  40. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +10 -15
  41. package/src/sap/fe/core/controllerextensions/ContextSharing.js +3 -3
  42. package/src/sap/fe/core/controllerextensions/EditFlow.js +296 -246
  43. package/src/sap/fe/core/controllerextensions/EditFlow.ts +253 -175
  44. package/src/sap/fe/core/controllerextensions/Feedback.js +10 -11
  45. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +6 -6
  46. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +1 -0
  47. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +27 -36
  48. package/src/sap/fe/core/controllerextensions/InternalRouting.js +57 -78
  49. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +42 -50
  50. package/src/sap/fe/core/controllerextensions/KPIManagement.js +12 -19
  51. package/src/sap/fe/core/controllerextensions/MessageHandler.js +23 -17
  52. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -7
  53. package/src/sap/fe/core/controllerextensions/PageReady.js +15 -21
  54. package/src/sap/fe/core/controllerextensions/Paginator.js +3 -3
  55. package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -3
  56. package/src/sap/fe/core/controllerextensions/Recommendations.js +23 -36
  57. package/src/sap/fe/core/controllerextensions/Recommendations.ts +1 -1
  58. package/src/sap/fe/core/controllerextensions/Routing.js +3 -3
  59. package/src/sap/fe/core/controllerextensions/Share.js +19 -28
  60. package/src/sap/fe/core/controllerextensions/SideEffects.js +68 -32
  61. package/src/sap/fe/core/controllerextensions/SideEffects.ts +58 -6
  62. package/src/sap/fe/core/controllerextensions/Telemetry.js +4 -5
  63. package/src/sap/fe/core/controllerextensions/ViewState.js +23 -24
  64. package/src/sap/fe/core/controllerextensions/ViewState.ts +6 -1
  65. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +13 -10
  66. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +13 -8
  67. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
  68. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +15 -16
  69. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +3 -4
  70. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.js +288 -0
  71. package/src/sap/fe/core/controllerextensions/dialog/{OperationsDialog.block.tsx → OperationsDialog.tsx} +27 -29
  72. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +41 -5
  73. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +61 -8
  74. package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.js +404 -0
  75. package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.ts +502 -0
  76. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +35 -43
  77. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +34 -14
  78. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -27
  79. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +27 -15
  80. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +51 -39
  81. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +75 -34
  82. package/src/sap/fe/core/controllerextensions/editFlow/editFlowConstants.js +4 -4
  83. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +88 -427
  84. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +82 -620
  85. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +9 -5
  86. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +6 -5
  87. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +116 -79
  88. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +87 -13
  89. package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +4 -6
  90. package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +5 -7
  91. package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +6 -7
  92. package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js +4 -4
  93. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +58 -20
  94. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +55 -4
  95. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +1 -1
  96. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +1 -1
  97. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +9 -12
  98. package/src/sap/fe/core/controls/CommandExecution.js +2 -2
  99. package/src/sap/fe/core/controls/ComponentLoader.js +20 -21
  100. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +250 -0
  101. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/{DraftDataLossDialog.block.tsx → DraftDataLossDialog.tsx} +31 -19
  102. package/src/sap/fe/core/controls/FormElementWrapper.js +19 -21
  103. package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +114 -0
  104. package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +115 -0
  105. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +454 -0
  106. package/src/sap/fe/core/controls/Recommendations/{ConfirmRecommendationDialog.block.tsx → ConfirmRecommendationDialog.tsx} +5 -9
  107. package/src/sap/fe/core/converters/ConverterContext.js +17 -18
  108. package/src/sap/fe/core/converters/ConverterContext.ts +10 -15
  109. package/src/sap/fe/core/converters/ManifestSettings.js +29 -28
  110. package/src/sap/fe/core/converters/ManifestSettings.ts +22 -1
  111. package/src/sap/fe/core/converters/ManifestWrapper.js +26 -48
  112. package/src/sap/fe/core/converters/MetaModelConverter.js +21 -28
  113. package/src/sap/fe/core/converters/MetaModelConverter.ts +2 -0
  114. package/src/sap/fe/core/converters/TemplateConverter.js +17 -21
  115. package/src/sap/fe/core/converters/TemplateConverter.ts +5 -3
  116. package/src/sap/fe/core/converters/annotations/DataField.js +69 -66
  117. package/src/sap/fe/core/converters/annotations/DataField.ts +30 -0
  118. package/src/sap/fe/core/converters/common/AnnotationConverter.js +20 -23
  119. package/src/sap/fe/core/converters/controls/Common/Action.js +178 -43
  120. package/src/sap/fe/core/converters/controls/Common/Action.ts +202 -19
  121. package/src/sap/fe/core/converters/controls/Common/Chart.js +47 -22
  122. package/src/sap/fe/core/converters/controls/Common/Chart.ts +50 -5
  123. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +16 -23
  124. package/src/sap/fe/core/converters/controls/Common/Form.js +25 -38
  125. package/src/sap/fe/core/converters/controls/Common/Form.ts +3 -0
  126. package/src/sap/fe/core/converters/controls/Common/KPI.js +32 -47
  127. package/src/sap/fe/core/converters/controls/Common/Table.js +464 -506
  128. package/src/sap/fe/core/converters/controls/Common/Table.ts +335 -219
  129. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +17 -28
  130. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +1 -2
  131. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +66 -90
  132. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +10 -1
  133. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +49 -73
  134. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +6 -10
  135. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +35 -50
  136. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +110 -60
  137. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +137 -41
  138. package/src/sap/fe/core/converters/helpers/Aggregation.js +19 -30
  139. package/src/sap/fe/core/converters/helpers/Aggregation.ts +5 -5
  140. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +11 -14
  141. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +14 -21
  142. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +4 -6
  143. package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -7
  144. package/src/sap/fe/core/converters/helpers/Key.js +1 -1
  145. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +2 -3
  146. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +18 -52
  147. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +0 -34
  148. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +103 -74
  149. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +111 -39
  150. package/src/sap/fe/core/converters/templates/ListReportConverter.js +28 -31
  151. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +17 -9
  152. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +61 -52
  153. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +60 -21
  154. package/src/sap/fe/core/definition/FEDefinition.js +104 -44
  155. package/src/sap/fe/core/designtime/AppComponent.designtime.js +37 -7
  156. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +42 -2
  157. package/src/sap/fe/core/formatters/CollaborationFormatter.js +4 -5
  158. package/src/sap/fe/core/formatters/FiscalFormat.js +24 -24
  159. package/src/sap/fe/core/formatters/ValueFormatter.js +4 -23
  160. package/src/sap/fe/core/formatters/ValueFormatter.ts +0 -18
  161. package/src/sap/fe/core/fpm/Component.js +12 -14
  162. package/src/sap/fe/core/fpm/manifest.json +1 -1
  163. package/src/sap/fe/core/helpers/AppStartupHelper.js +20 -15
  164. package/src/sap/fe/core/helpers/AppStartupHelper.ts +22 -13
  165. package/src/sap/fe/core/helpers/BindingHelper.js +3 -3
  166. package/src/sap/fe/core/helpers/BindingHelper.ts +1 -1
  167. package/src/sap/fe/core/helpers/DeleteHelper.js +55 -62
  168. package/src/sap/fe/core/helpers/DeleteHelper.ts +48 -51
  169. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +4 -7
  170. package/src/sap/fe/core/helpers/FPMHelper.js +4 -7
  171. package/src/sap/fe/core/helpers/HTTP503Handler.js +2 -1
  172. package/src/sap/fe/core/helpers/HTTP503Handler.ts +4 -3
  173. package/src/sap/fe/core/helpers/KeepAliveHelper.js +5 -5
  174. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +6 -6
  175. package/src/sap/fe/core/helpers/LoaderUtils.js +8 -3
  176. package/src/sap/fe/core/helpers/LoaderUtils.ts +15 -4
  177. package/src/sap/fe/core/helpers/MessageStrip.js +3 -4
  178. package/src/sap/fe/core/helpers/MetaModelFunction.js +26 -40
  179. package/src/sap/fe/core/helpers/MetaPath.js +9 -7
  180. package/src/sap/fe/core/helpers/MetaPath.ts +9 -3
  181. package/src/sap/fe/core/helpers/ModelHelper.js +33 -57
  182. package/src/sap/fe/core/helpers/ModelHelper.ts +3 -3
  183. package/src/sap/fe/core/helpers/PasteHelper.js +11 -19
  184. package/src/sap/fe/core/helpers/PromiseKeeper.js +1 -1
  185. package/src/sap/fe/core/helpers/RecommendationHelper.js +3 -4
  186. package/src/sap/fe/core/helpers/ResourceModelHelper.js +3 -5
  187. package/src/sap/fe/core/helpers/SizeHelper.js +3 -5
  188. package/src/sap/fe/core/helpers/StableIdHelper.js +13 -11
  189. package/src/sap/fe/core/helpers/StableIdHelper.ts +5 -1
  190. package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +28 -38
  191. package/src/sap/fe/core/helpers/Synchronization.js +1 -1
  192. package/src/sap/fe/core/helpers/TitleHelper.js +19 -40
  193. package/src/sap/fe/core/helpers/TitleHelper.ts +5 -25
  194. package/src/sap/fe/core/helpers/TypeGuards.js +25 -18
  195. package/src/sap/fe/core/helpers/TypeGuards.ts +7 -0
  196. package/src/sap/fe/core/helpers/WebSocket.js +4 -4
  197. package/src/sap/fe/core/library.js +8 -7
  198. package/src/sap/fe/core/library.ts +2 -0
  199. package/src/sap/fe/core/manifestMerger/AddNewPage.js +9 -11
  200. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +14 -25
  201. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +15 -17
  202. package/src/sap/fe/core/messagebundle.properties +21 -0
  203. package/src/sap/fe/core/messagebundle_ar.properties +5 -1
  204. package/src/sap/fe/core/messagebundle_bg.properties +4 -0
  205. package/src/sap/fe/core/messagebundle_ca.properties +4 -0
  206. package/src/sap/fe/core/messagebundle_cnr.properties +4 -0
  207. package/src/sap/fe/core/messagebundle_cs.properties +8 -4
  208. package/src/sap/fe/core/messagebundle_cy.properties +4 -0
  209. package/src/sap/fe/core/messagebundle_da.properties +4 -0
  210. package/src/sap/fe/core/messagebundle_de.properties +4 -0
  211. package/src/sap/fe/core/messagebundle_el.properties +4 -0
  212. package/src/sap/fe/core/messagebundle_en.properties +4 -0
  213. package/src/sap/fe/core/messagebundle_en_GB.properties +4 -0
  214. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +4 -0
  215. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +249 -231
  216. package/src/sap/fe/core/messagebundle_es.properties +5 -1
  217. package/src/sap/fe/core/messagebundle_es_MX.properties +4 -0
  218. package/src/sap/fe/core/messagebundle_et.properties +4 -0
  219. package/src/sap/fe/core/messagebundle_fi.properties +4 -0
  220. package/src/sap/fe/core/messagebundle_fr.properties +6 -2
  221. package/src/sap/fe/core/messagebundle_fr_CA.properties +4 -0
  222. package/src/sap/fe/core/messagebundle_hi.properties +4 -0
  223. package/src/sap/fe/core/messagebundle_hr.properties +4 -0
  224. package/src/sap/fe/core/messagebundle_hu.properties +4 -0
  225. package/src/sap/fe/core/messagebundle_id.properties +4 -0
  226. package/src/sap/fe/core/messagebundle_it.properties +4 -0
  227. package/src/sap/fe/core/messagebundle_iw.properties +4 -0
  228. package/src/sap/fe/core/messagebundle_ja.properties +4 -0
  229. package/src/sap/fe/core/messagebundle_kk.properties +4 -0
  230. package/src/sap/fe/core/messagebundle_ko.properties +4 -0
  231. package/src/sap/fe/core/messagebundle_lt.properties +4 -0
  232. package/src/sap/fe/core/messagebundle_lv.properties +4 -0
  233. package/src/sap/fe/core/messagebundle_mk.properties +4 -0
  234. package/src/sap/fe/core/messagebundle_ms.properties +4 -0
  235. package/src/sap/fe/core/messagebundle_nl.properties +4 -0
  236. package/src/sap/fe/core/messagebundle_no.properties +4 -0
  237. package/src/sap/fe/core/messagebundle_pl.properties +4 -0
  238. package/src/sap/fe/core/messagebundle_pt.properties +4 -0
  239. package/src/sap/fe/core/messagebundle_pt_PT.properties +4 -0
  240. package/src/sap/fe/core/messagebundle_ro.properties +4 -0
  241. package/src/sap/fe/core/messagebundle_ru.properties +4 -0
  242. package/src/sap/fe/core/messagebundle_sh.properties +4 -0
  243. package/src/sap/fe/core/messagebundle_sk.properties +4 -0
  244. package/src/sap/fe/core/messagebundle_sl.properties +4 -0
  245. package/src/sap/fe/core/messagebundle_sr.properties +4 -0
  246. package/src/sap/fe/core/messagebundle_sv.properties +4 -0
  247. package/src/sap/fe/core/messagebundle_th.properties +4 -0
  248. package/src/sap/fe/core/messagebundle_tr.properties +5 -1
  249. package/src/sap/fe/core/messagebundle_uk.properties +4 -0
  250. package/src/sap/fe/core/messagebundle_vi.properties +4 -0
  251. package/src/sap/fe/core/messagebundle_zh_CN.properties +4 -0
  252. package/src/sap/fe/core/messagebundle_zh_TW.properties +4 -0
  253. package/src/sap/fe/core/operationsHelper.js +23 -27
  254. package/src/sap/fe/core/operationsHelper.ts +6 -7
  255. package/src/sap/fe/core/rootView/Fcl.controller.js +53 -40
  256. package/src/sap/fe/core/rootView/Fcl.controller.ts +42 -7
  257. package/src/sap/fe/core/rootView/NavContainer.controller.js +7 -10
  258. package/src/sap/fe/core/rootView/RootViewBaseController.js +22 -21
  259. package/src/sap/fe/core/rootView/RootViewBaseController.ts +10 -2
  260. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -3
  261. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +4 -3
  262. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +1 -0
  263. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +12 -10
  264. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +6 -2
  265. package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +8 -13
  266. package/src/sap/fe/core/services/ContextSharingServiceFactory.js +5 -7
  267. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +31 -8
  268. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +31 -5
  269. package/src/sap/fe/core/services/InlineEditServiceFactory.js +190 -0
  270. package/src/sap/fe/core/services/InlineEditServiceFactory.ts +226 -0
  271. package/src/sap/fe/core/services/NavigationServiceFactory.js +10 -15
  272. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +3 -3
  273. package/src/sap/fe/core/services/RoutingServiceFactory.js +76 -56
  274. package/src/sap/fe/core/services/RoutingServiceFactory.ts +47 -14
  275. package/src/sap/fe/core/services/ShellServicesFactory.js +32 -34
  276. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +75 -60
  277. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +58 -12
  278. package/src/sap/fe/core/services/TelemetryServiceFactory.js +8 -9
  279. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +13 -18
  280. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +3 -0
  281. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +7 -9
  282. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +12 -16
  283. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +1 -1
  284. package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.js +4 -7
  285. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +5 -6
  286. package/src/sap/fe/core/support/CommonHelper.js +2 -3
  287. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  288. package/src/sap/fe/core/templating/ActionHelper.js +3 -4
  289. package/src/sap/fe/core/templating/CommonFormatters.js +6 -8
  290. package/src/sap/fe/core/templating/CommonFormatters.ts +2 -2
  291. package/src/sap/fe/core/templating/CriticalityFormatters.js +53 -5
  292. package/src/sap/fe/core/templating/CriticalityFormatters.ts +129 -7
  293. package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -11
  294. package/src/sap/fe/core/templating/DataFieldFormatters.ts +1 -1
  295. package/src/sap/fe/core/templating/DataModelPathHelper.js +33 -56
  296. package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
  297. package/src/sap/fe/core/templating/EntitySetHelper.js +11 -19
  298. package/src/sap/fe/core/templating/EntityTypeHelper.js +4 -5
  299. package/src/sap/fe/core/templating/FieldControlHelper.js +13 -20
  300. package/src/sap/fe/core/templating/FilterTemplating.js +6 -9
  301. package/src/sap/fe/core/templating/PropertyHelper.js +33 -63
  302. package/src/sap/fe/core/templating/PropertyHelper.ts +0 -1
  303. package/src/sap/fe/core/templating/SemanticObjectHelper.js +13 -21
  304. package/src/sap/fe/core/templating/UIFormatters.js +57 -78
  305. package/src/sap/fe/core/templating/UIFormatters.ts +2 -1
  306. package/src/sap/fe/core/type/Date.js +2 -2
  307. package/src/sap/fe/core/type/DateTimeWithTimezone.js +3 -3
  308. package/src/sap/fe/core/type/EDM.js +3 -5
  309. package/src/sap/fe/core/type/Email.js +17 -6
  310. package/src/sap/fe/core/type/Email.ts +23 -4
  311. package/src/sap/fe/core/type/FiscalDate.js +8 -9
  312. package/src/sap/fe/core/type/InputMask.js +3 -4
  313. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +0 -299
  314. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +0 -87
  315. package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +0 -43
  316. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +0 -251
  317. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +0 -471
@@ -1,6 +1,6 @@
1
1
  import type ResourceBundle from "sap/base/i18n/ResourceBundle";
2
2
  import type ResourceModel from "sap/fe/core/ResourceModel";
3
- import type { CustomMessage } from "sap/fe/core/controllerextensions/MessageHandler";
3
+ import type { CustomMessage, ShowMessageDialogParameter } from "sap/fe/core/controllerextensions/MessageHandler";
4
4
  import { getResourceModel } from "sap/fe/core/helpers/ResourceModelHelper";
5
5
  import type FieldAPI from "sap/fe/macros/field/FieldAPI";
6
6
  import type TableAPI from "sap/fe/macros/table/TableAPI";
@@ -17,7 +17,7 @@ import MessageView from "sap/m/MessageView";
17
17
  import type Table from "sap/m/Table";
18
18
  import Text from "sap/m/Text";
19
19
  import MLib from "sap/m/library";
20
- import type ManagedObject from "sap/ui/base/ManagedObject";
20
+ import ManagedObject from "sap/ui/base/ManagedObject";
21
21
  import type Control from "sap/ui/core/Control";
22
22
  import UI5Element from "sap/ui/core/Element";
23
23
  import IconPool from "sap/ui/core/IconPool";
@@ -106,7 +106,8 @@ export type messageHandlingType = {
106
106
  actionName?: string | undefined,
107
107
  onBeforeShowMessage?: (messages: Message[], showMessageParameters: ShowMessageParameters) => ShowMessageParameters,
108
108
  viewType?: string,
109
- showStateMessages?: boolean
109
+ showStateMessages?: boolean,
110
+ messageDialogParameter?: ShowMessageDialogParameter
110
111
  ) => MessageUIDecisions;
111
112
  showMessagesInUI: (uiDecision: MessageUIDecisions) => Promise<void>;
112
113
  removeUnboundTransitionMessages: () => void;
@@ -136,7 +137,8 @@ export type messageHandlingType = {
136
137
  subSection: ObjectPageSubSection,
137
138
  bMultipleSubSections: boolean,
138
139
  oTargetTableInfo: TargetTableInfoType,
139
- resourceModel: ResourceModel
140
+ resourceModel: ResourceModel,
141
+ includeTableGroupName?: boolean
140
142
  ) => string;
141
143
  bIsOrphanElement: (oElement: UI5Element, aElements: UI5Element[]) => boolean;
142
144
  getLastActionTextAndActionName: (sActionName: string | undefined) => string;
@@ -208,6 +210,11 @@ export type messageHandlingType = {
208
210
  ): void;
209
211
  closeMessageBox(messageShown: MessageWithHeader, callBack: (value: void) => void, singleGenericMessageId: string): void;
210
212
  removeTransistionMessageForContext: (oContext: Context) => void;
213
+ checkIfAllAreSameSuccessMessages: (messagesToShow: MessageWithHeader[]) => boolean;
214
+ addGenericSuccessMessage: (
215
+ resourceModel: ResourceModel,
216
+ showMessageDialogParameter?: ShowMessageDialogParameter
217
+ ) => MessageWithHeader | undefined;
211
218
  };
212
219
 
213
220
  function fnFormatTechnicalDetails(): string {
@@ -570,7 +577,8 @@ function getUIDecisions(
570
577
  actionName?: string | undefined,
571
578
  onBeforeShowMessage?: (messages: Message[], showMessageParameters: ShowMessageParameters) => ShowMessageParameters,
572
579
  viewType?: string,
573
- showStateMessages = false
580
+ showStateMessages = false,
581
+ messageDialogParameter?: ShowMessageDialogParameter
574
582
  ): MessageUIDecisions {
575
583
  // Add Custom messages
576
584
  // TODO: Will these messages be part of transitionMessages?
@@ -595,6 +603,10 @@ function getUIDecisions(
595
603
  const hasEtagMessage = this.modifyETagMessagesOnly(Library.getResourceBundleFor("sap.fe.core")!, concurrentEditFlag);
596
604
 
597
605
  if (messagesToShow.length > 0 && uiElementToUse !== "None") {
606
+ if (messagesToShow.length > 1 && checkIfAllAreSameSuccessMessages(messagesToShow)) {
607
+ const genericSuccessMessage = addGenericSuccessMessage(getResourceModel(control as Control), messageDialogParameter);
608
+ messagesToShow = genericSuccessMessage ? [genericSuccessMessage] : [messagesToShow[0]];
609
+ }
598
610
  if (messagesToShow.length === 1) {
599
611
  const messageToShow = messagesToShow[0];
600
612
  if (messageToShow.getType() === MessageType.Success) {
@@ -625,6 +637,62 @@ function getUIDecisions(
625
637
  };
626
638
  }
627
639
 
640
+ /**
641
+ * Adding a generic success message to message model for readability.
642
+ * @param resourceModel Resource model for message text
643
+ * @param showMessageDialogParameter Selected contexts for which the message is shown.
644
+ * @returns Message with generic success message.
645
+ */
646
+ function addGenericSuccessMessage(
647
+ resourceModel: ResourceModel,
648
+ showMessageDialogParameter?: ShowMessageDialogParameter
649
+ ): MessageWithHeader | undefined {
650
+ const selectionContexts = showMessageDialogParameter?.aSelectedContexts;
651
+ if (selectionContexts && Array.isArray(selectionContexts) && selectionContexts?.length > 1 && resourceModel) {
652
+ let actionName = showMessageDialogParameter?.boundActionName;
653
+ const entitySetName = showMessageDialogParameter?.entitySet;
654
+ actionName = actionName?.includes(".") ? actionName?.split(".")[actionName?.split(".").length - 1] : actionName;
655
+ const suffixResourceKey = actionName && entitySetName ? `${entitySetName}|${actionName}` : "";
656
+ return new Message({
657
+ message: resourceModel.getText("C_COMMON_SUCCESS_MESSAGE", [selectionContexts?.length], suffixResourceKey),
658
+ type: MessageType.Success,
659
+ target: "",
660
+ persistent: true,
661
+ code: "C_COMMON_SUCCESS_MESSAGE"
662
+ });
663
+ }
664
+ }
665
+ /**
666
+ * Check is all are same success messages.
667
+ * @param messagesToShow Initial messages to show.
668
+ * @returns If all are same success messages.
669
+ */
670
+ function checkIfAllAreSameSuccessMessages(messagesToShow: MessageWithHeader[]): boolean {
671
+ let referenceMsg: MessageWithHeader;
672
+ const checkFailed = messagesToShow.some((msg, idx) => {
673
+ if (msg.getType() !== MessageType.Success) {
674
+ // Non success message
675
+ return true;
676
+ }
677
+ if (idx === 0) {
678
+ // 1st Message
679
+ referenceMsg = msg;
680
+ return false;
681
+ } else if (
682
+ referenceMsg.getCode() === msg.getCode() &&
683
+ referenceMsg.getMessage() === msg.getMessage() &&
684
+ referenceMsg.getDescription() === msg.getDescription() &&
685
+ referenceMsg.getDescriptionUrl() === msg.getDescriptionUrl() &&
686
+ referenceMsg.getAdditionalText() === msg.getAdditionalText()
687
+ ) {
688
+ return false;
689
+ }
690
+ return true;
691
+ });
692
+
693
+ return !checkFailed;
694
+ }
695
+
628
696
  /**
629
697
  * Show messages in the decided UI Element.
630
698
  * @param uiDecisions UI Decision to be used to show the messages.
@@ -896,11 +964,13 @@ async function showMessageBoxControl(uiDecision: MessageUIDecisions): Promise<vo
896
964
  // If it is a retry message, then it needs to have technical details to show it.
897
965
  const showMessageBox = retryAfterMessage ? messageTechnicalDetails : true;
898
966
  if (showMessageBox) {
899
- let formattedTextString = "<html><body>";
967
+ const startTag = "<html><body><span style='white-space:pre-wrap'>",
968
+ closeTag = "</span></body></html>";
969
+ let formattedTextString = startTag;
900
970
 
901
971
  // Adding pre-text for the messages
902
972
  if (retryAfterMessage) {
903
- formattedTextString = `${formattedTextString}<h6>${retryAfterMessage}</h6><br/>`;
973
+ formattedTextString = `${formattedTextString}<h6>${retryAfterMessage}</h6><br></br>`;
904
974
  } else {
905
975
  if (singleErrorPreText) {
906
976
  const messageHeader = (messageToShow as MessageWithHeader)?.["headerName"]
@@ -914,12 +984,12 @@ async function showMessageBoxControl(uiDecision: MessageUIDecisions): Promise<vo
914
984
  if (messageToShow.getCode() !== "503" && messageToShow.getAdditionalText() !== undefined) {
915
985
  formattedTextString = `${
916
986
  formattedTextString + messageToShow.getAdditionalText()
917
- }: ${messageToShow.getMessage()}</body></html>`;
987
+ }: ${messageToShow.getMessage()}${closeTag}`;
918
988
  } else {
919
- formattedTextString = `${formattedTextString + messageToShow.getMessage()}</body></html>`;
989
+ formattedTextString = `${formattedTextString + messageToShow.getMessage()}${closeTag}`;
920
990
  }
921
991
  const formattedText = new FormattedText({
922
- htmlText: formattedTextString
992
+ htmlText: ManagedObject.escapeSettingsValue(formattedTextString)
923
993
  });
924
994
 
925
995
  showMessageBoxPerType(
@@ -1718,6 +1788,7 @@ function fnFilterUponIds(aControlIds: string[], oItem: UI5Element): boolean {
1718
1788
  * @param bMultipleSubSections
1719
1789
  * @param oTargetTableInfo
1720
1790
  * @param resourceModel
1791
+ * @param includeTableGroupName
1721
1792
  * @returns Group name.
1722
1793
  */
1723
1794
  function createSectionGroupName(
@@ -1725,12 +1796,13 @@ function createSectionGroupName(
1725
1796
  subSection: ObjectPageSubSection,
1726
1797
  bMultipleSubSections: boolean,
1727
1798
  oTargetTableInfo: TargetTableInfoType,
1728
- resourceModel: ResourceModel
1799
+ resourceModel: ResourceModel,
1800
+ includeTableGroupName = true
1729
1801
  ): string {
1730
1802
  return (
1731
1803
  section.getTitle() +
1732
1804
  (subSection.getTitle() && bMultipleSubSections ? `, ${subSection.getTitle()}` : "") +
1733
- (oTargetTableInfo && oTargetTableInfo.tableHeader
1805
+ (oTargetTableInfo && oTargetTableInfo.tableHeader && includeTableGroupName
1734
1806
  ? `, ${resourceModel.getText("T_MESSAGE_GROUP_TITLE_TABLE_DENOMINATOR")}: ${oTargetTableInfo.tableHeader}`
1735
1807
  : "")
1736
1808
  );
@@ -1908,7 +1980,9 @@ const messageHandling: messageHandlingType = {
1908
1980
  updateAddtionalTextForMessageInOPTable: updateAddtionalTextForMessageInOPTable,
1909
1981
  updateHeaderNameForMessageInOPTable: updateHeaderNameForMessageInOPTable,
1910
1982
  closeMessageBox: closeMessageBox,
1911
- removeTransistionMessageForContext: removeTransistionMessageForContext
1983
+ removeTransistionMessageForContext: removeTransistionMessageForContext,
1984
+ checkIfAllAreSameSuccessMessages: checkIfAllAreSameSuccessMessages,
1985
+ addGenericSuccessMessage: addGenericSuccessMessage
1912
1986
  };
1913
1987
 
1914
1988
  export default messageHandling;
@@ -126,8 +126,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/macros/table/Utils"], function (Log, Util
126
126
  ;
127
127
  _proto.onSearch = function onSearch(oEvent) {
128
128
  const aMDCTableLinkedToFilterBar = this._aMDCTables.filter(oTable => {
129
- var _oTable$getParent;
130
- return oEvent.getSource().getId() === oTable.getFilter() && oTable.getVisible() && !((_oTable$getParent = oTable.getParent()) !== null && _oTable$getParent !== void 0 && _oTable$getParent.getProperty("bindingSuspended"));
129
+ return oEvent.getSource().getId() === oTable.getFilter() && oTable.getVisible() && !oTable.getParent()?.getProperty("bindingSuspended");
131
130
  });
132
131
  const aMDCChartsLinkedToFilterBar = this._aMDCCharts.filter(oChart => {
133
132
  return oEvent.getSource().getId() === oChart.getFilter() && oChart.getVisible();
@@ -155,8 +154,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/macros/table/Utils"], function (Log, Util
155
154
  // and attach callbacks on dateRequested/dataReceived events
156
155
  ;
157
156
  _proto.register = function register(_event, data) {
158
- var _data$table, _data$chart;
159
- const binding = data.binding || ((_data$table = data.table) === null || _data$table === void 0 ? void 0 : _data$table.getRowBinding()) || ((_data$chart = data.chart) === null || _data$chart === void 0 ? void 0 : _data$chart.getControlDelegate()).getInnerChart(data.chart).getBinding("data");
157
+ const binding = data.binding || data.table?.getRowBinding() || (data.chart?.getControlDelegate()).getInnerChart(data.chart).getBinding("data");
160
158
  const boundControl = data.table || data.chart;
161
159
  if (!binding) {
162
160
  return;
@@ -255,7 +253,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/macros/table/Utils"], function (Log, Util
255
253
  this._aMDCCharts.push(chart);
256
254
  }
257
255
  const oInnerChart = chart.getControlDelegate().getInnerChart(chart);
258
- const binding = oInnerChart === null || oInnerChart === void 0 ? void 0 : oInnerChart.getBinding("data");
256
+ const binding = oInnerChart?.getBinding("data");
259
257
  if (binding) {
260
258
  this.register(null, {
261
259
  chart,
@@ -308,4 +306,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/macros/table/Utils"], function (Log, Util
308
306
  }();
309
307
  return DataQueryWatcher;
310
308
  }, false);
311
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEYXRhUXVlcnlXYXRjaGVyIiwiX29FdmVudFByb3ZpZGVyIiwiX2ZuT25GaW5pc2hlZCIsIl9hQmluZGluZ1JlZ2lzdHJhdGlvbnMiLCJfYU90aGVyRXZlbnRTb3VyY2VzIiwiX2lzU2VhcmNoUGVuZGluZyIsIl9hTURDVGFibGVzIiwiX2FNRENDaGFydHMiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJpc1NlYXJjaFBlbmRpbmciLCJpc0RhdGFSZWNlaXZlZCIsIl9pc0RhdGFSZWNlaXZlZCIsInJlc2V0RGF0YVJlY2VpdmVkIiwidW5kZWZpbmVkIiwicmVzZXQiLCJmb3JFYWNoIiwicmVnIiwiYmluZGluZyIsImRldGFjaEV2ZW50Iiwib25EYXRhUmVxdWVzdGVkIiwib25EYXRhUmVjZWl2ZWQiLCJvRWxlbWVudCIsIm9uU2VhcmNoIiwicmVnaXN0ZXIiLCJvRXZlbnQiLCJwYXJhbXMiLCJnZXRTb3VyY2UiLCJiaW5kaW5nUmVnaXN0cmF0aW9uIiwiZmluZCIsIkxvZyIsImVycm9yIiwiZ2V0R3JvdXBJZCIsImZpcmVFdmVudCIsInJlY2VpdmVkQ291bnQiLCJyZXF1ZXN0ZWRDb3VudCIsImF0dGFjaEV2ZW50T25jZSIsInRyaWdnZXJlZEJ5U2VhcmNoIiwiYkFsbERvbmUiLCJzb21lIiwiZXZlcnkiLCJhTURDVGFibGVMaW5rZWRUb0ZpbHRlckJhciIsImZpbHRlciIsIm9UYWJsZSIsIl9vVGFibGUkZ2V0UGFyZW50IiwiZ2V0SWQiLCJnZXRGaWx0ZXIiLCJnZXRWaXNpYmxlIiwiZ2V0UGFyZW50IiwiZ2V0UHJvcGVydHkiLCJhTURDQ2hhcnRzTGlua2VkVG9GaWx0ZXJCYXIiLCJvQ2hhcnQiLCJsZW5ndGgiLCJyZWdpc3RlclRhYmxlIiwiaW5uZXJDaGFydEJvdW5kUHJvbWlzZSIsInJlZ2lzdGVyQ2hhcnQiLCJvRXJyb3IiLCJfZXZlbnQiLCJkYXRhIiwiX2RhdGEkdGFibGUiLCJfZGF0YSRjaGFydCIsInRhYmxlIiwiZ2V0Um93QmluZGluZyIsImNoYXJ0IiwiZ2V0Q29udHJvbERlbGVnYXRlIiwiZ2V0SW5uZXJDaGFydCIsImdldEJpbmRpbmciLCJib3VuZENvbnRyb2wiLCJwdXNoIiwicmVnaXN0ZXJCaW5kaW5nIiwiYXJndW1lbnRzIiwiaW5jbHVkZXMiLCJvUm93QmluZGluZyIsImF0dGFjaEV2ZW50Iiwib0lubmVyQ2hhcnQiLCJyZWdpc3RlclRhYmxlT3JDaGFydCIsImVsZW1lbnQiLCJpc0EiLCJpbml0aWFsaXplZCIsImdldEF1dG9CaW5kT25Jbml0IiwiZ2V0RG9tUmVmIiwiVXRpbHMiLCJ3aGVuQm91bmQiLCJyZWdpc3RlckZpbHRlckJhciIsImZpbHRlckJhciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRGF0YVF1ZXJ5V2F0Y2hlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIENoYXJ0RGVsZWdhdGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQ2hhcnREZWxlZ2F0ZVwiO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXN0cmljdGVkLWltcG9ydHNcbmltcG9ydCBVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9VdGlsc1wiO1xuaW1wb3J0IHR5cGUgRXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBFdmVudFByb3ZpZGVyIGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFByb3ZpZGVyXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBDaGFydCBmcm9tIFwic2FwL3VpL21kYy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvdWkvbWRjL0ZpbHRlckJhclwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyQmFyQmFzZSRTZWFyY2hFdmVudCB9IGZyb20gXCJzYXAvdWkvbWRjL2ZpbHRlcmJhci9GaWx0ZXJCYXJCYXNlXCI7XG5pbXBvcnQgdHlwZSBCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcblxuY2xhc3MgRGF0YVF1ZXJ5V2F0Y2hlciB7XG5cdHByb3RlY3RlZCBfYUJpbmRpbmdSZWdpc3RyYXRpb25zOiB7IGJpbmRpbmc6IEJpbmRpbmc7IGJvdW5kQ29udHJvbD86IENvbnRyb2w7IHJlcXVlc3RlZENvdW50OiBudW1iZXI7IHJlY2VpdmVkQ291bnQ6IG51bWJlciB9W10gPSBbXTtcblxuXHRwcm90ZWN0ZWQgX2FPdGhlckV2ZW50U291cmNlczogRXZlbnRQcm92aWRlcltdID0gW107XG5cblx0cHJvdGVjdGVkIF9pc1NlYXJjaFBlbmRpbmcgPSBmYWxzZTtcblxuXHRwcm90ZWN0ZWQgX2lzRGF0YVJlY2VpdmVkPzogYm9vbGVhbjtcblxuXHRwcm90ZWN0ZWQgX2FNRENUYWJsZXM6IFRhYmxlW10gPSBbXTtcblxuXHRwcm90ZWN0ZWQgX2FNRENDaGFydHM6IENoYXJ0W10gPSBbXTtcblxuXHRwdWJsaWMgY29uc3RydWN0b3IoXG5cdFx0cHJvdGVjdGVkIF9vRXZlbnRQcm92aWRlcjogRXZlbnRQcm92aWRlcixcblx0XHRwcm90ZWN0ZWQgX2ZuT25GaW5pc2hlZDogKCkgPT4gdm9pZFxuXHQpIHt9XG5cblx0Ly8gQWNjZXNzb3JzXG5cdHB1YmxpYyBpc1NlYXJjaFBlbmRpbmcoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX2lzU2VhcmNoUGVuZGluZztcblx0fVxuXG5cdHB1YmxpYyBpc0RhdGFSZWNlaXZlZCgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5faXNEYXRhUmVjZWl2ZWQ7XG5cdH1cblxuXHRwdWJsaWMgcmVzZXREYXRhUmVjZWl2ZWQoKTogdm9pZCB7XG5cdFx0dGhpcy5faXNEYXRhUmVjZWl2ZWQgPSB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogUmVzZXQgdGhlIHN0YXRlOiB1bnN1YnNjcmliZSB0byBhbGwgZGF0YSBldmVudHMgYW5kIHJlbW92ZSBhbGwgcmVnaXN0ZXJlZCBvYmplY3RzLlxuXHQgKi9cblx0cHVibGljIHJlc2V0KCk6IHZvaWQge1xuXHRcdC8vIFJlbW92ZSBhbGwgcmVtYWluaW5nIGNhbGxiYWNrc1xuXHRcdHRoaXMuX2FCaW5kaW5nUmVnaXN0cmF0aW9ucy5mb3JFYWNoKChyZWcpID0+IHtcblx0XHRcdHJlZy5iaW5kaW5nLmRldGFjaEV2ZW50KFwiZGF0YVJlcXVlc3RlZFwiLCB0aGlzLm9uRGF0YVJlcXVlc3RlZCwgdGhpcyk7XG5cdFx0XHRyZWcuYmluZGluZy5kZXRhY2hFdmVudChcImRhdGFSZWNlaXZlZFwiLCB0aGlzLm9uRGF0YVJlY2VpdmVkLCB0aGlzKTtcblx0XHR9KTtcblx0XHR0aGlzLl9hT3RoZXJFdmVudFNvdXJjZXMuZm9yRWFjaCgob0VsZW1lbnQ6IEV2ZW50UHJvdmlkZXIpOiB2b2lkID0+IHtcblx0XHRcdG9FbGVtZW50LmRldGFjaEV2ZW50KFwic2VhcmNoXCIsIHRoaXMub25TZWFyY2gsIHRoaXMpO1xuXHRcdFx0b0VsZW1lbnQuZGV0YWNoRXZlbnQoXCJiaW5kaW5nVXBkYXRlZFwiLCB0aGlzLnJlZ2lzdGVyLCB0aGlzKTtcblx0XHR9KTtcblx0XHR0aGlzLl9hQmluZGluZ1JlZ2lzdHJhdGlvbnMgPSBbXTtcblx0XHR0aGlzLl9hT3RoZXJFdmVudFNvdXJjZXMgPSBbXTtcblx0XHR0aGlzLl9hTURDVGFibGVzID0gW107XG5cdFx0dGhpcy5fYU1EQ0NoYXJ0cyA9IFtdO1xuXHRcdHRoaXMuX2lzU2VhcmNoUGVuZGluZyA9IGZhbHNlO1xuXHRcdHRoaXMuX2lzRGF0YVJlY2VpdmVkID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0Ly8gQ2FsbGJhY2sgd2hlbiBkYXRhIGlzIHJlY2VpdmVkIG9uIGEgYmluZGluZy5cblx0cHJvdGVjdGVkIG9uRGF0YVJlY2VpdmVkKG9FdmVudDogRXZlbnQ8e30sIEJpbmRpbmc+LCBwYXJhbXM6IHsgdHJpZ2dlcmVkQnlTZWFyY2g6IGJvb2xlYW4gfSk6IHZvaWQge1xuXHRcdC8vIExvb2sgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGJpbmRpbmcgcmVnaXN0cmF0aW9uXG5cdFx0Y29uc3QgYmluZGluZyA9IG9FdmVudC5nZXRTb3VyY2UoKTtcblx0XHRjb25zdCBiaW5kaW5nUmVnaXN0cmF0aW9uID0gdGhpcy5fYUJpbmRpbmdSZWdpc3RyYXRpb25zLmZpbmQoKHJlZykgPT4ge1xuXHRcdFx0cmV0dXJuIHJlZy5iaW5kaW5nID09PSBiaW5kaW5nO1xuXHRcdH0pO1xuXHRcdGlmICghYmluZGluZ1JlZ2lzdHJhdGlvbikge1xuXHRcdFx0TG9nLmVycm9yKFwiUGFnZVJlYWR5IC0gZGF0YSByZWNlaXZlZCBvbiBhbiB1bnJlZ2lzdGVyZWQgYmluZGluZ1wiKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0c3dpdGNoICgoYmluZGluZyBhcyBPRGF0YUxpc3RCaW5kaW5nKS5nZXRHcm91cElkKCkpIHtcblx0XHRcdGNhc2UgXCIkYXV0by5Xb3JrZXJzXCI6XG5cdFx0XHRcdHRoaXMuX29FdmVudFByb3ZpZGVyLmZpcmVFdmVudChcIndvcmtlcnNCYXRjaFJlY2VpdmVkXCIpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCIkYXV0by5IZXJvZXNcIjpcblx0XHRcdFx0dGhpcy5fb0V2ZW50UHJvdmlkZXIuZmlyZUV2ZW50KFwiaGVyb2VzQmF0Y2hSZWNlaXZlZFwiKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdH1cblx0XHRiaW5kaW5nUmVnaXN0cmF0aW9uLnJlY2VpdmVkQ291bnQrKztcblx0XHRpZiAoYmluZGluZ1JlZ2lzdHJhdGlvbi5yZWNlaXZlZENvdW50IDwgYmluZGluZ1JlZ2lzdHJhdGlvbi5yZXF1ZXN0ZWRDb3VudCkge1xuXHRcdFx0Ly8gVGhlcmUgYXJlIG90aGVyIHJlcXVlc3QgcGVuZGluZyAtLT4gcmVzdWJzY3JpYmUgdG8gd2FpdCB1bnRpbCB0aGV5IHJldHVyblxuXHRcdFx0YmluZGluZy5hdHRhY2hFdmVudE9uY2UoXCJkYXRhUmVjZWl2ZWRcIiwgeyB0cmlnZ2VyZWRCeVNlYXJjaDogcGFyYW1zLnRyaWdnZXJlZEJ5U2VhcmNoIH0sIHRoaXMub25EYXRhUmVjZWl2ZWQsIHRoaXMpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQvLyBDaGVjayBpZiBhdCBsZWFzdCBvbmUgYmluZGluZyBoYXMgcmVxdWVzdGVkIGRhdGEsIGFuZCBhbGwgYmluZGluZ3MgdGhhdCBoYXZlIHJlcXVlc3RlZCBkYXRhIGhhdmUgcmVjZWl2ZWQgaXRcblx0XHRjb25zdCBiQWxsRG9uZSA9XG5cdFx0XHR0aGlzLl9hQmluZGluZ1JlZ2lzdHJhdGlvbnMuc29tZSgocmVnKSA9PiB7XG5cdFx0XHRcdHJldHVybiByZWcucmVxdWVzdGVkQ291bnQgIT09IDA7XG5cdFx0XHR9KSAmJlxuXHRcdFx0dGhpcy5fYUJpbmRpbmdSZWdpc3RyYXRpb25zLmV2ZXJ5KChyZWcpID0+IHtcblx0XHRcdFx0cmV0dXJuIHJlZy5yZXF1ZXN0ZWRDb3VudCA9PT0gMCB8fCByZWcucmVjZWl2ZWRDb3VudCA+PSByZWcucmVxdWVzdGVkQ291bnQ7XG5cdFx0XHR9KTtcblx0XHRpZiAocGFyYW1zLnRyaWdnZXJlZEJ5U2VhcmNoIHx8IGJpbmRpbmdSZWdpc3RyYXRpb24ucmVjZWl2ZWRDb3VudCA+PSBiaW5kaW5nUmVnaXN0cmF0aW9uLnJlcXVlc3RlZENvdW50KSB7XG5cdFx0XHR0aGlzLl9pc1NlYXJjaFBlbmRpbmcgPSBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKGJBbGxEb25lKSB7XG5cdFx0XHR0aGlzLl9pc0RhdGFSZWNlaXZlZCA9IHRydWU7XG5cdFx0XHR0aGlzLl9mbk9uRmluaXNoZWQoKTtcblx0XHR9XG5cdH1cblxuXHQvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQvLyBDYWxsYmFjayB3aGVuIGRhdGEgaXMgcmVxdWVzdGVkIG9uIGEgYmluZGluZy5cblx0cHJvdGVjdGVkIG9uRGF0YVJlcXVlc3RlZChvRXZlbnQ6IEV2ZW50PHt9LCBCaW5kaW5nPiwgcGFyYW1zOiB7IHRyaWdnZXJlZEJ5U2VhcmNoOiBib29sZWFuIH0pOiB2b2lkIHtcblx0XHQvLyBMb29rIGZvciB0aGUgY29ycmVzcG9uZGluZyBiaW5kaW5nIHJlZ2lzdHJhdGlvblxuXHRcdGNvbnN0IGJpbmRpbmcgPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0Y29uc3QgYmluZGluZ1JlZ2lzdHJhdGlvbiA9IHRoaXMuX2FCaW5kaW5nUmVnaXN0cmF0aW9ucy5maW5kKChyZWcpID0+IHtcblx0XHRcdHJldHVybiByZWcuYmluZGluZyA9PT0gYmluZGluZztcblx0XHR9KTtcblx0XHRpZiAoIWJpbmRpbmdSZWdpc3RyYXRpb24pIHtcblx0XHRcdExvZy5lcnJvcihcIlBhZ2VSZWFkeSAtIGRhdGEgcmVxdWVzdGVkIG9uIGFuIHVucmVnaXN0ZXJlZCBiaW5kaW5nXCIpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRiaW5kaW5nUmVnaXN0cmF0aW9uLnJlcXVlc3RlZENvdW50Kys7XG5cdFx0dGhpcy5faXNEYXRhUmVjZWl2ZWQgPSBmYWxzZTtcblx0XHRpZiAoYmluZGluZ1JlZ2lzdHJhdGlvbi5yZXF1ZXN0ZWRDb3VudCAtIGJpbmRpbmdSZWdpc3RyYXRpb24ucmVjZWl2ZWRDb3VudCA9PT0gMSkge1xuXHRcdFx0Ly8gTGlzdGVuIHRvIGRhdGFSZWNlaXZlZCBvbmx5IGlmIHRoZXJlJ3Mgbm8gb3RoZXIgcmVxdWVzdCBwZW5kaW5nXG5cdFx0XHQvLyBPdGhlcndpc2UgdGhlICdkYXRhUmVjZWl2ZWQnIGhhbmRsZXIgd291bGQgYmUgY2FsbGVkIHNldmVyYWwgdGltZXMgd2hlbiB0aGUgZmlyc3QgcXVlcnkgcmV0dXJuc1xuXHRcdFx0Ly8gYW5kIHdlIHdvdWxkbid0IHdhaXQgZm9yIGFsbCBxdWVyaWVzIHRvIGJlIGZpbmlzaGVkXG5cdFx0XHQvLyAod2Ugd2lsbCByZXN1YnNjcmliZSB0byB0aGUgZGF0YVJlY2VpdmVkIGV2ZW50IGluIG9uRGF0YVJlY2VpdmVkIGlmIG5lY2Vzc2FyeSlcblx0XHRcdGJpbmRpbmcuYXR0YWNoRXZlbnRPbmNlKFwiZGF0YVJlY2VpdmVkXCIsIHsgdHJpZ2dlcmVkQnlTZWFyY2g6IHBhcmFtcy50cmlnZ2VyZWRCeVNlYXJjaCB9LCB0aGlzLm9uRGF0YVJlY2VpdmVkLCB0aGlzKTtcblx0XHR9XG5cdH1cblxuXHQvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQvLyBDYWxsYmFjayB3aGVuIGEgc2VhcmNoIGlzIHRyaWdnZXJlZCBmcm9tIGEgZmlsdGVyYmFyXG5cdHByb3RlY3RlZCBvblNlYXJjaChvRXZlbnQ6IEZpbHRlckJhckJhc2UkU2VhcmNoRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBhTURDVGFibGVMaW5rZWRUb0ZpbHRlckJhciA9IHRoaXMuX2FNRENUYWJsZXMuZmlsdGVyKChvVGFibGUpID0+IHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdG9FdmVudC5nZXRTb3VyY2UoKS5nZXRJZCgpID09PSBvVGFibGUuZ2V0RmlsdGVyKCkgJiZcblx0XHRcdFx0b1RhYmxlLmdldFZpc2libGUoKSAmJlxuXHRcdFx0XHQhb1RhYmxlLmdldFBhcmVudCgpPy5nZXRQcm9wZXJ0eShcImJpbmRpbmdTdXNwZW5kZWRcIilcblx0XHRcdCk7XG5cdFx0fSk7XG5cdFx0Y29uc3QgYU1EQ0NoYXJ0c0xpbmtlZFRvRmlsdGVyQmFyID0gdGhpcy5fYU1EQ0NoYXJ0cy5maWx0ZXIoKG9DaGFydCkgPT4ge1xuXHRcdFx0cmV0dXJuIG9FdmVudC5nZXRTb3VyY2UoKS5nZXRJZCgpID09PSBvQ2hhcnQuZ2V0RmlsdGVyKCkgJiYgb0NoYXJ0LmdldFZpc2libGUoKTtcblx0XHR9KTtcblx0XHRpZiAoYU1EQ1RhYmxlTGlua2VkVG9GaWx0ZXJCYXIubGVuZ3RoID4gMCB8fCBhTURDQ2hhcnRzTGlua2VkVG9GaWx0ZXJCYXIubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy5faXNTZWFyY2hQZW5kaW5nID0gdHJ1ZTtcblx0XHR9XG5cdFx0YU1EQ1RhYmxlTGlua2VkVG9GaWx0ZXJCYXIuZm9yRWFjaCgob1RhYmxlKSA9PiB7XG5cdFx0XHR0aGlzLnJlZ2lzdGVyVGFibGUob1RhYmxlLCB0cnVlKTtcblx0XHR9KTtcblx0XHRhTURDQ2hhcnRzTGlua2VkVG9GaWx0ZXJCYXIuZm9yRWFjaChhc3luYyAob0NoYXJ0OiBDaGFydCAmIHsgaW5uZXJDaGFydEJvdW5kUHJvbWlzZT86IFByb21pc2U8dm9pZD4gfSkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKG9DaGFydC5pbm5lckNoYXJ0Qm91bmRQcm9taXNlKSB7XG5cdFx0XHRcdFx0YXdhaXQgb0NoYXJ0LmlubmVyQ2hhcnRCb3VuZFByb21pc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5yZWdpc3RlckNoYXJ0KG9DaGFydCwgdHJ1ZSk7XG5cdFx0XHR9IGNhdGNoIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IGZpbmQgYSBpbm5lciBib3VuZCBjaGFydFwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdC8vIFJlZ2lzdGVyIGEgYmluZGluZyAod2l0aCBhbiBvcHRpb25hbCB0YWJsZS9jaGFydClcblx0Ly8gYW5kIGF0dGFjaCBjYWxsYmFja3Mgb24gZGF0ZVJlcXVlc3RlZC9kYXRhUmVjZWl2ZWQgZXZlbnRzXG5cdHB1YmxpYyByZWdpc3RlcihfZXZlbnQ6IEV2ZW50IHwgbnVsbCwgZGF0YTogeyBiaW5kaW5nPzogQmluZGluZzsgdGFibGU/OiBUYWJsZTsgY2hhcnQ/OiBDaGFydDsgdHJpZ2dlcmVkQnlTZWFyY2g6IGJvb2xlYW4gfSk6IHZvaWQge1xuXHRcdGNvbnN0IGJpbmRpbmc6IEJpbmRpbmcgfCB1bmRlZmluZWQgPVxuXHRcdFx0ZGF0YS5iaW5kaW5nIHx8XG5cdFx0XHRkYXRhLnRhYmxlPy5nZXRSb3dCaW5kaW5nKCkgfHxcblx0XHRcdChkYXRhLmNoYXJ0Py5nZXRDb250cm9sRGVsZWdhdGUoKSBhcyB0eXBlb2YgQ2hhcnREZWxlZ2F0ZSkuZ2V0SW5uZXJDaGFydChkYXRhLmNoYXJ0KS5nZXRCaW5kaW5nKFwiZGF0YVwiKTtcblx0XHRjb25zdCBib3VuZENvbnRyb2wgPSAoZGF0YS50YWJsZSB8fCBkYXRhLmNoYXJ0KSBhcyBDb250cm9sIHwgdW5kZWZpbmVkO1xuXHRcdGlmICghYmluZGluZykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQvLyBDaGVjayBpZiB0aGUgYmluZGluZyBpcyBhbHJlYWR5IHJlZ2lzdGVyZWRcblx0XHRsZXQgYmluZGluZ1JlZ2lzdHJhdGlvbiA9IHRoaXMuX2FCaW5kaW5nUmVnaXN0cmF0aW9ucy5maW5kKChyZWcpID0+IHtcblx0XHRcdHJldHVybiByZWcuYmluZGluZyA9PT0gYmluZGluZztcblx0XHR9KTtcblx0XHRpZiAoYmluZGluZ1JlZ2lzdHJhdGlvbikge1xuXHRcdFx0aWYgKGJvdW5kQ29udHJvbCkge1xuXHRcdFx0XHQvLyBUaGUgYmluZGluZyB3YXMgYWxyZWFkeSByZWdpc3RlcmQgd2l0aG91dCBib3VuZENvbnRyb2wgaW5mb3JtYXRpb24gLS0+IHVwZGF0ZSBib3VuZENvbnRyb2xcblx0XHRcdFx0YmluZGluZ1JlZ2lzdHJhdGlvbi5ib3VuZENvbnRyb2wgPSBib3VuZENvbnRyb2w7XG5cdFx0XHR9XG5cdFx0XHQvLyBUaGlzIGJpbmRpbmcgaGFzIGFscmVhZHkgcmVxdWVzdGVkIGRhdGEsIGJ1dCB3ZSdyZSByZWdpc3RlcmluZyBpdCBhZ2FpbiAob24gc2VhcmNoKSAtLT4gYXR0YWNoIHRvIGRhdGFSZXF1ZXN0ZWQgYWdhaW5cblx0XHRcdGlmIChiaW5kaW5nUmVnaXN0cmF0aW9uLnJlcXVlc3RlZENvdW50ID4gMCkge1xuXHRcdFx0XHRiaW5kaW5nLmRldGFjaEV2ZW50KFwiZGF0YVJlcXVlc3RlZFwiLCB0aGlzLm9uRGF0YVJlcXVlc3RlZCwgdGhpcyk7XG5cdFx0XHRcdGJpbmRpbmcuYXR0YWNoRXZlbnRPbmNlKFwiZGF0YVJlcXVlc3RlZFwiLCB7IHRyaWdnZXJlZEJ5U2VhcmNoOiBkYXRhLnRyaWdnZXJlZEJ5U2VhcmNoIH0sIHRoaXMub25EYXRhUmVxdWVzdGVkLCB0aGlzKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGJvdW5kQ29udHJvbCkge1xuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlcmUncyBhIGRpZmZlcmVudCBiaW5kaW5nIHJlZ2lzdGVyZWQgZm9yIHRoZSBib3VuZCBjb250cm9sXG5cdFx0XHRiaW5kaW5nUmVnaXN0cmF0aW9uID0gdGhpcy5fYUJpbmRpbmdSZWdpc3RyYXRpb25zLmZpbmQoKHJlZykgPT4ge1xuXHRcdFx0XHRyZXR1cm4gcmVnLmJvdW5kQ29udHJvbCA9PT0gYm91bmRDb250cm9sO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAoYmluZGluZ1JlZ2lzdHJhdGlvbiAmJiBiaW5kaW5nUmVnaXN0cmF0aW9uLmJpbmRpbmcgIT09IGJpbmRpbmcpIHtcblx0XHRcdFx0Ly8gVGhlIGNvbnRyb2wgaGFkIGEgZGlmZmVyZW50IGJpbmRpbmcuIFRoaXMgY2FuIGhhcHBlbiBpbiBjYXNlIG9mIE1EQyBjaGFydHMgd2hvIHJlY3JlYXRlZCB0aGVpciBiaW5kaW5nIGFmdGVyIHNlYXJjaFxuXHRcdFx0XHQvLyBUaGUgcHJldmlvdXMgYmluZGluZyBpcyBkZXN0cm95ZWQsIHdlIGNhbiByZXBsYWNlIGl0IHdpdGggdGhlIG5ldyBhbmQgcmVzZXQgY291bnRlcnNcblx0XHRcdFx0YmluZGluZ1JlZ2lzdHJhdGlvbi5iaW5kaW5nID0gYmluZGluZztcblx0XHRcdFx0YmluZGluZ1JlZ2lzdHJhdGlvbi5yZXF1ZXN0ZWRDb3VudCA9IDA7XG5cdFx0XHRcdGJpbmRpbmdSZWdpc3RyYXRpb24ucmVjZWl2ZWRDb3VudCA9IDA7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghYmluZGluZ1JlZ2lzdHJhdGlvbikge1xuXHRcdFx0YmluZGluZ1JlZ2lzdHJhdGlvbiA9IHtcblx0XHRcdFx0YmluZGluZzogYmluZGluZyxcblx0XHRcdFx0Ym91bmRDb250cm9sOiBib3VuZENvbnRyb2wsXG5cdFx0XHRcdHJlcXVlc3RlZENvdW50OiAwLFxuXHRcdFx0XHRyZWNlaXZlZENvdW50OiAwXG5cdFx0XHR9O1xuXHRcdFx0dGhpcy5fYUJpbmRpbmdSZWdpc3RyYXRpb25zLnB1c2goYmluZGluZ1JlZ2lzdHJhdGlvbik7XG5cdFx0fVxuXHRcdGJpbmRpbmcuZGV0YWNoRXZlbnQoXCJkYXRhUmVxdWVzdGVkXCIsIHRoaXMub25EYXRhUmVxdWVzdGVkLCB0aGlzKTtcblx0XHRiaW5kaW5nLmF0dGFjaEV2ZW50T25jZShcImRhdGFSZXF1ZXN0ZWRcIiwgeyB0cmlnZ2VyZWRCeVNlYXJjaDogZGF0YS50cmlnZ2VyZWRCeVNlYXJjaCB9LCB0aGlzLm9uRGF0YVJlcXVlc3RlZCwgdGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogUmVnaXN0ZXJzIGEgYmluZGluZyBmb3Igd2F0Y2hpbmcgaXRzIGRhdGEgZXZlbnRzIChkYXRhUmVxdWVzdGVkIGFuZCBkYXRhUmVjZWl2ZWQpLlxuXHQgKiBAcGFyYW0gYmluZGluZyBUaGUgYmluZGluZ1xuXHQgKi9cblx0cHVibGljIHJlZ2lzdGVyQmluZGluZyhiaW5kaW5nOiBCaW5kaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5yZWdpc3RlcihudWxsLCB7IGJpbmRpbmcsIHRyaWdnZXJlZEJ5U2VhcmNoOiBmYWxzZSB9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlcnMgYW4gTURDVGFibGUgZm9yIHdhdGNoaW5nIHRoZSBkYXRhIGV2ZW50cyBvbiBpdHMgcm93IGJpbmRpbmcgKGRhdGFSZXF1ZXN0ZWQgYW5kIGRhdGFSZWNlaXZlZCkuXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgdGFibGVcblx0ICogQHBhcmFtIHRyaWdnZXJlZEJ5U2VhcmNoIFRydWUgaWYgdGhpcyByZWdpc3RyYXRpb24gaXMgdHJpZ2dlcmVkIGJ5IGEgZmlsdGVyQmFyIHNlYXJjaFxuXHQgKi9cblx0cHJvdGVjdGVkIHJlZ2lzdGVyVGFibGUodGFibGU6IFRhYmxlLCB0cmlnZ2VyZWRCeVNlYXJjaCA9IGZhbHNlKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLl9hTURDVGFibGVzLmluY2x1ZGVzKHRhYmxlKSkge1xuXHRcdFx0dGhpcy5fYU1EQ1RhYmxlcy5wdXNoKHRhYmxlKTtcblx0XHR9XG5cdFx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSB0YWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0aWYgKG9Sb3dCaW5kaW5nKSB7XG5cdFx0XHR0aGlzLnJlZ2lzdGVyKG51bGwsIHsgdGFibGUsIHRyaWdnZXJlZEJ5U2VhcmNoIH0pO1xuXHRcdH1cblx0XHRpZiAoIXRoaXMuX2FPdGhlckV2ZW50U291cmNlcy5pbmNsdWRlcyh0YWJsZSkpIHtcblx0XHRcdHRhYmxlLmF0dGFjaEV2ZW50KFwiYmluZGluZ1VwZGF0ZWRcIiwgeyB0YWJsZSwgdHJpZ2dlcmVkQnlTZWFyY2ggfSwgdGhpcy5yZWdpc3RlciwgdGhpcyk7XG5cdFx0XHR0aGlzLl9hT3RoZXJFdmVudFNvdXJjZXMucHVzaCh0YWJsZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVycyBhbiBNRENDaGFydCBmb3Igd2F0Y2hpbmcgdGhlIGRhdGEgZXZlbnRzIG9uIGl0cyBpbm5lciBkYXRhIGJpbmRpbmcgKGRhdGFSZXF1ZXN0ZWQgYW5kIGRhdGFSZWNlaXZlZCkuXG5cdCAqIEBwYXJhbSBjaGFydCBUaGUgY2hhcnRcblx0ICogQHBhcmFtIHRyaWdnZXJlZEJ5U2VhcmNoIFRydWUgaWYgdGhpcyByZWdpc3RyYXRpb24gaXMgdHJpZ2dlcmVkIGJ5IGEgZmlsdGVyQmFyIHNlYXJjaFxuXHQgKi9cblx0cHJvdGVjdGVkIHJlZ2lzdGVyQ2hhcnQoY2hhcnQ6IENoYXJ0LCB0cmlnZ2VyZWRCeVNlYXJjaCA9IGZhbHNlKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLl9hTURDQ2hhcnRzLmluY2x1ZGVzKGNoYXJ0KSkge1xuXHRcdFx0dGhpcy5fYU1EQ0NoYXJ0cy5wdXNoKGNoYXJ0KTtcblx0XHR9XG5cdFx0Y29uc3Qgb0lubmVyQ2hhcnQgPSAoY2hhcnQuZ2V0Q29udHJvbERlbGVnYXRlKCkgYXMgdHlwZW9mIENoYXJ0RGVsZWdhdGUpLmdldElubmVyQ2hhcnQoY2hhcnQpO1xuXHRcdGNvbnN0IGJpbmRpbmcgPSBvSW5uZXJDaGFydD8uZ2V0QmluZGluZyhcImRhdGFcIik7XG5cdFx0aWYgKGJpbmRpbmcpIHtcblx0XHRcdHRoaXMucmVnaXN0ZXIobnVsbCwgeyBjaGFydCwgdHJpZ2dlcmVkQnlTZWFyY2ggfSk7XG5cdFx0fVxuXHRcdGlmICghdGhpcy5fYU90aGVyRXZlbnRTb3VyY2VzLmluY2x1ZGVzKGNoYXJ0KSkge1xuXHRcdFx0Y2hhcnQuYXR0YWNoRXZlbnQoXCJiaW5kaW5nVXBkYXRlZFwiLCB7IGNoYXJ0LCB0cmlnZ2VyZWRCeVNlYXJjaCB9LCB0aGlzLnJlZ2lzdGVyLCB0aGlzKTtcblx0XHRcdHRoaXMuX2FPdGhlckV2ZW50U291cmNlcy5wdXNoKGNoYXJ0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmVnaXN0ZXJzIGFuIE1EQ1RhYmxlIG9yIE1EQ0NoYXJ0IGZvciB3YXRjaGluZyB0aGUgZGF0YSBldmVudHMgb24gaXRzIGlubmVyIGRhdGEgYmluZGluZyAoZGF0YVJlcXVlc3RlZCBhbmQgZGF0YVJlY2VpdmVkKS5cblx0ICogQHBhcmFtIGVsZW1lbnQgIFRoZSB0YWJsZSBvciBjaGFydFxuXHQgKi9cblx0cHVibGljIGFzeW5jIHJlZ2lzdGVyVGFibGVPckNoYXJ0KGVsZW1lbnQ6IFRhYmxlIHwgQ2hhcnQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAoIWVsZW1lbnQuaXNBPFRhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikgJiYgIWVsZW1lbnQuaXNBPENoYXJ0PihcInNhcC51aS5tZGMuQ2hhcnRcIikpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IGVsZW1lbnQuaW5pdGlhbGl6ZWQoKTsgLy8gYWNjZXNzIGJpbmRpbmcgb25seSBhZnRlciB0YWJsZS9jaGFydCBpcyBib3VuZFxuXHRcdFx0aWYgKGVsZW1lbnQuaXNBPFRhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0dGhpcy5yZWdpc3RlclRhYmxlKGVsZW1lbnQpO1xuXHRcdFx0XHQvL0lmIHRoZSBhdXRvQmluZE9uSW5pdCBpcyBlbmFibGVkLCB0aGUgdGFibGUgd2lsbCBiZSByZWJvdW5kXG5cdFx0XHRcdC8vVGhlbiB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoaXMgcmViaW5kIHRvIG9jY3VyIHRvIGVuc3VyZSB0aGUgcGFnZVJlYWR5IHdpbGwgYWxzbyB3YWl0IGZvciB0aGUgZGF0YSB0byBiZSByZWNlaXZlZFxuXHRcdFx0XHRpZiAoZWxlbWVudC5nZXRBdXRvQmluZE9uSW5pdCgpICYmIGVsZW1lbnQuZ2V0RG9tUmVmKCkpIHtcblx0XHRcdFx0XHRhd2FpdCBVdGlscy53aGVuQm91bmQoZWxlbWVudCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMucmVnaXN0ZXJDaGFydChlbGVtZW50KTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihcIlBhZ2VSZWFkeSAtIENhbm5vdCByZWdpc3RlciBhIHRhYmxlIG9yIGEgY2hhcnRcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVycyBhbiBNRENGaWx0ZXJCYXIgZm9yIHdhdGNoaW5nIGl0cyBzZWFyY2ggZXZlbnQuXG5cdCAqIEBwYXJhbSBmaWx0ZXJCYXIgVGhlIGZpbHRlciBiYXJcblx0ICovXG5cdHB1YmxpYyByZWdpc3RlckZpbHRlckJhcihmaWx0ZXJCYXI6IEZpbHRlckJhcik6IHZvaWQge1xuXHRcdGZpbHRlckJhci5hdHRhY2hFdmVudChcInNlYXJjaFwiLCB0aGlzLm9uU2VhcmNoLCB0aGlzKTtcblx0XHR0aGlzLl9hT3RoZXJFdmVudFNvdXJjZXMucHVzaChmaWx0ZXJCYXIpO1xuXHR9XG59XG5leHBvcnQgZGVmYXVsdCBEYXRhUXVlcnlXYXRjaGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0VBRUE7RUFBQSxJQVlNQSxnQkFBZ0I7SUFhckIsU0FBQUEsaUJBQ1dDLGVBQThCLEVBQzlCQyxhQUF5QixFQUNsQztNQUFBLEtBZlFDLHNCQUFzQixHQUFrRyxFQUFFO01BQUEsS0FFMUhDLG1CQUFtQixHQUFvQixFQUFFO01BQUEsS0FFekNDLGdCQUFnQixHQUFHLEtBQUs7TUFBQSxLQUl4QkMsV0FBVyxHQUFZLEVBQUU7TUFBQSxLQUV6QkMsV0FBVyxHQUFZLEVBQUU7TUFBQSxLQUd4Qk4sZUFBOEIsR0FBOUJBLGVBQThCO01BQUEsS0FDOUJDLGFBQXlCLEdBQXpCQSxhQUF5QjtJQUNqQzs7SUFFSDtJQUFBLElBQUFNLE1BQUEsR0FBQVIsZ0JBQUEsQ0FBQVMsU0FBQTtJQUFBRCxNQUFBLENBQ09FLGVBQWUsR0FBdEIsU0FBQUEsZ0JBQUEsRUFBa0M7TUFDakMsT0FBTyxJQUFJLENBQUNMLGdCQUFnQjtJQUM3QixDQUFDO0lBQUFHLE1BQUEsQ0FFTUcsY0FBYyxHQUFyQixTQUFBQSxlQUFBLEVBQTZDO01BQzVDLE9BQU8s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
309
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEYXRhUXVlcnlXYXRjaGVyIiwiX29FdmVudFByb3ZpZGVyIiwiX2ZuT25GaW5pc2hlZCIsIl9hQmluZGluZ1JlZ2lzdHJhdGlvbnMiLCJfYU90aGVyRXZlbnRTb3VyY2VzIiwiX2lzU2VhcmNoUGVuZGluZyIsIl9hTURDVGFibGVzIiwiX2FNRENDaGFydHMiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJpc1NlYXJjaFBlbmRpbmciLCJpc0RhdGFSZWNlaXZlZCIsIl9pc0RhdGFSZWNlaXZlZCIsInJlc2V0RGF0YVJlY2VpdmVkIiwidW5kZWZpbmVkIiwicmVzZXQiLCJmb3JFYWNoIiwicmVnIiwiYmluZGluZyIsImRldGFjaEV2ZW50Iiwib25EYXRhUmVxdWVzdGVkIiwib25EYXRhUmVjZWl2ZWQiLCJvRWxlbWVudCIsIm9uU2VhcmNoIiwicmVnaXN0ZXIiLCJvRXZlbnQiLCJwYXJhbXMiLCJnZXRTb3VyY2UiLCJiaW5kaW5nUmVnaXN0cmF0aW9uIiwiZmluZCIsIkxvZyIsImVycm9yIiwiZ2V0R3JvdXBJZCIsImZpcmVFdmVudCIsInJlY2VpdmVkQ291bnQiLCJyZXF1ZXN0ZWRDb3VudCIsImF0dGFjaEV2ZW50T25jZSIsInRyaWdnZXJlZEJ5U2VhcmNoIiwiYkFsbERvbmUiLCJzb21lIiwiZXZlcnkiLCJhTURDVGFibGVMaW5rZWRUb0ZpbHRlckJhciIsImZpbHRlciIsIm9UYWJsZSIsImdldElkIiwiZ2V0RmlsdGVyIiwiZ2V0VmlzaWJsZSIsImdldFBhcmVudCIsImdldFByb3BlcnR5IiwiYU1EQ0NoYXJ0c0xpbmtlZFRvRmlsdGVyQmFyIiwib0NoYXJ0IiwibGVuZ3RoIiwicmVnaXN0ZXJUYWJsZSIsImlubmVyQ2hhcnRCb3VuZFByb21pc2UiLCJyZWdpc3RlckNoYXJ0Iiwib0Vycm9yIiwiX2V2ZW50IiwiZGF0YSIsInRhYmxlIiwiZ2V0Um93QmluZGluZyIsImNoYXJ0IiwiZ2V0Q29udHJvbERlbGVnYXRlIiwiZ2V0SW5uZXJDaGFydCIsImdldEJpbmRpbmciLCJib3VuZENvbnRyb2wiLCJwdXNoIiwicmVnaXN0ZXJCaW5kaW5nIiwiYXJndW1lbnRzIiwiaW5jbHVkZXMiLCJvUm93QmluZGluZyIsImF0dGFjaEV2ZW50Iiwib0lubmVyQ2hhcnQiLCJyZWdpc3RlclRhYmxlT3JDaGFydCIsImVsZW1lbnQiLCJpc0EiLCJpbml0aWFsaXplZCIsImdldEF1dG9CaW5kT25Jbml0IiwiZ2V0RG9tUmVmIiwiVXRpbHMiLCJ3aGVuQm91bmQiLCJyZWdpc3RlckZpbHRlckJhciIsImZpbHRlckJhciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRGF0YVF1ZXJ5V2F0Y2hlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIENoYXJ0RGVsZWdhdGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQ2hhcnREZWxlZ2F0ZVwiO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXN0cmljdGVkLWltcG9ydHNcbmltcG9ydCBVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9VdGlsc1wiO1xuaW1wb3J0IHR5cGUgRXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBFdmVudFByb3ZpZGVyIGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFByb3ZpZGVyXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBDaGFydCBmcm9tIFwic2FwL3VpL21kYy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvdWkvbWRjL0ZpbHRlckJhclwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyQmFyQmFzZSRTZWFyY2hFdmVudCB9IGZyb20gXCJzYXAvdWkvbWRjL2ZpbHRlcmJhci9GaWx0ZXJCYXJCYXNlXCI7XG5pbXBvcnQgdHlwZSBCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcblxuY2xhc3MgRGF0YVF1ZXJ5V2F0Y2hlciB7XG5cdHByb3RlY3RlZCBfYUJpbmRpbmdSZWdpc3RyYXRpb25zOiB7IGJpbmRpbmc6IEJpbmRpbmc7IGJvdW5kQ29udHJvbD86IENvbnRyb2w7IHJlcXVlc3RlZENvdW50OiBudW1iZXI7IHJlY2VpdmVkQ291bnQ6IG51bWJlciB9W10gPSBbXTtcblxuXHRwcm90ZWN0ZWQgX2FPdGhlckV2ZW50U291cmNlczogRXZlbnRQcm92aWRlcltdID0gW107XG5cblx0cHJvdGVjdGVkIF9pc1NlYXJjaFBlbmRpbmcgPSBmYWxzZTtcblxuXHRwcm90ZWN0ZWQgX2lzRGF0YVJlY2VpdmVkPzogYm9vbGVhbjtcblxuXHRwcm90ZWN0ZWQgX2FNRENUYWJsZXM6IFRhYmxlW10gPSBbXTtcblxuXHRwcm90ZWN0ZWQgX2FNRENDaGFydHM6IENoYXJ0W10gPSBbXTtcblxuXHRwdWJsaWMgY29uc3RydWN0b3IoXG5cdFx0cHJvdGVjdGVkIF9vRXZlbnRQcm92aWRlcjogRXZlbnRQcm92aWRlcixcblx0XHRwcm90ZWN0ZWQgX2ZuT25GaW5pc2hlZDogKCkgPT4gdm9pZFxuXHQpIHt9XG5cblx0Ly8gQWNjZXNzb3JzXG5cdHB1YmxpYyBpc1NlYXJjaFBlbmRpbmcoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX2lzU2VhcmNoUGVuZGluZztcblx0fVxuXG5cdHB1YmxpYyBpc0RhdGFSZWNlaXZlZCgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5faXNEYXRhUmVjZWl2ZWQ7XG5cdH1cblxuXHRwdWJsaWMgcmVzZXREYXRhUmVjZWl2ZWQoKTogdm9pZCB7XG5cdFx0dGhpcy5faXNEYXRhUmVjZWl2ZWQgPSB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogUmVzZXQgdGhlIHN0YXRlOiB1bnN1YnNjcmliZSB0byBhbGwgZGF0YSBldmVudHMgYW5kIHJlbW92ZSBhbGwgcmVnaXN0ZXJlZCBvYmplY3RzLlxuXHQgKi9cblx0cHVibGljIHJlc2V0KCk6IHZvaWQge1xuXHRcdC8vIFJlbW92ZSBhbGwgcmVtYWluaW5nIGNhbGxiYWNrc1xuXHRcdHRoaXMuX2FCaW5kaW5nUmVnaXN0cmF0aW9ucy5mb3JFYWNoKChyZWcpID0+IHtcblx0XHRcdHJlZy5iaW5kaW5nLmRldGFjaEV2ZW50KFwiZGF0YVJlcXVlc3RlZFwiLCB0aGlzLm9uRGF0YVJlcXVlc3RlZCwgdGhpcyk7XG5cdFx0XHRyZWcuYmluZGluZy5kZXRhY2hFdmVudChcImRhdGFSZWNlaXZlZFwiLCB0aGlzLm9uRGF0YVJlY2VpdmVkLCB0aGlzKTtcblx0XHR9KTtcblx0XHR0aGlzLl9hT3RoZXJFdmVudFNvdXJjZXMuZm9yRWFjaCgob0VsZW1lbnQ6IEV2ZW50UHJvdmlkZXIpOiB2b2lkID0+IHtcblx0XHRcdG9FbGVtZW50LmRldGFjaEV2ZW50KFwic2VhcmNoXCIsIHRoaXMub25TZWFyY2gsIHRoaXMpO1xuXHRcdFx0b0VsZW1lbnQuZGV0YWNoRXZlbnQoXCJiaW5kaW5nVXBkYXRlZFwiLCB0aGlzLnJlZ2lzdGVyLCB0aGlzKTtcblx0XHR9KTtcblx0XHR0aGlzLl9hQmluZGluZ1JlZ2lzdHJhdGlvbnMgPSBbXTtcblx0XHR0aGlzLl9hT3RoZXJFdmVudFNvdXJjZXMgPSBbXTtcblx0XHR0aGlzLl9hTURDVGFibGVzID0gW107XG5cdFx0dGhpcy5fYU1EQ0NoYXJ0cyA9IFtdO1xuXHRcdHRoaXMuX2lzU2VhcmNoUGVuZGluZyA9IGZhbHNlO1xuXHRcdHRoaXMuX2lzRGF0YVJlY2VpdmVkID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0Ly8gQ2FsbGJhY2sgd2hlbiBkYXRhIGlzIHJlY2VpdmVkIG9uIGEgYmluZGluZy5cblx0cHJvdGVjdGVkIG9uRGF0YVJlY2VpdmVkKG9FdmVudDogRXZlbnQ8e30sIEJpbmRpbmc+LCBwYXJhbXM6IHsgdHJpZ2dlcmVkQnlTZWFyY2g6IGJvb2xlYW4gfSk6IHZvaWQge1xuXHRcdC8vIExvb2sgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGJpbmRpbmcgcmVnaXN0cmF0aW9uXG5cdFx0Y29uc3QgYmluZGluZyA9IG9FdmVudC5nZXRTb3VyY2UoKTtcblx0XHRjb25zdCBiaW5kaW5nUmVnaXN0cmF0aW9uID0gdGhpcy5fYUJpbmRpbmdSZWdpc3RyYXRpb25zLmZpbmQoKHJlZykgPT4ge1xuXHRcdFx0cmV0dXJuIHJlZy5iaW5kaW5nID09PSBiaW5kaW5nO1xuXHRcdH0pO1xuXHRcdGlmICghYmluZGluZ1JlZ2lzdHJhdGlvbikge1xuXHRcdFx0TG9nLmVycm9yKFwiUGFnZVJlYWR5IC0gZGF0YSByZWNlaXZlZCBvbiBhbiB1bnJlZ2lzdGVyZWQgYmluZGluZ1wiKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0c3dpdGNoICgoYmluZGluZyBhcyBPRGF0YUxpc3RCaW5kaW5nKS5nZXRHcm91cElkKCkpIHtcblx0XHRcdGNhc2UgXCIkYXV0by5Xb3JrZXJzXCI6XG5cdFx0XHRcdHRoaXMuX29FdmVudFByb3ZpZGVyLmZpcmVFdmVudChcIndvcmtlcnNCYXRjaFJlY2VpdmVkXCIpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCIkYXV0by5IZXJvZXNcIjpcblx0XHRcdFx0dGhpcy5fb0V2ZW50UHJvdmlkZXIuZmlyZUV2ZW50KFwiaGVyb2VzQmF0Y2hSZWNlaXZlZFwiKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdH1cblx0XHRiaW5kaW5nUmVnaXN0cmF0aW9uLnJlY2VpdmVkQ291bnQrKztcblx0XHRpZiAoYmluZGluZ1JlZ2lzdHJhdGlvbi5yZWNlaXZlZENvdW50IDwgYmluZGluZ1JlZ2lzdHJhdGlvbi5yZXF1ZXN0ZWRDb3VudCkge1xuXHRcdFx0Ly8gVGhlcmUgYXJlIG90aGVyIHJlcXVlc3QgcGVuZGluZyAtLT4gcmVzdWJzY3JpYmUgdG8gd2FpdCB1bnRpbCB0aGV5IHJldHVyblxuXHRcdFx0YmluZGluZy5hdHRhY2hFdmVudE9uY2UoXCJkYXRhUmVjZWl2ZWRcIiwgeyB0cmlnZ2VyZWRCeVNlYXJjaDogcGFyYW1zLnRyaWdnZXJlZEJ5U2VhcmNoIH0sIHRoaXMub25EYXRhUmVjZWl2ZWQsIHRoaXMpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQvLyBDaGVjayBpZiBhdCBsZWFzdCBvbmUgYmluZGluZyBoYXMgcmVxdWVzdGVkIGRhdGEsIGFuZCBhbGwgYmluZGluZ3MgdGhhdCBoYXZlIHJlcXVlc3RlZCBkYXRhIGhhdmUgcmVjZWl2ZWQgaXRcblx0XHRjb25zdCBiQWxsRG9uZSA9XG5cdFx0XHR0aGlzLl9hQmluZGluZ1JlZ2lzdHJhdGlvbnMuc29tZSgocmVnKSA9PiB7XG5cdFx0XHRcdHJldHVybiByZWcucmVxdWVzdGVkQ291bnQgIT09IDA7XG5cdFx0XHR9KSAmJlxuXHRcdFx0dGhpcy5fYUJpbmRpbmdSZWdpc3RyYXRpb25zLmV2ZXJ5KChyZWcpID0+IHtcblx0XHRcdFx0cmV0dXJuIHJlZy5yZXF1ZXN0ZWRDb3VudCA9PT0gMCB8fCByZWcucmVjZWl2ZWRDb3VudCA+PSByZWcucmVxdWVzdGVkQ291bnQ7XG5cdFx0XHR9KTtcblx0XHRpZiAocGFyYW1zLnRyaWdnZXJlZEJ5U2VhcmNoIHx8IGJpbmRpbmdSZWdpc3RyYXRpb24ucmVjZWl2ZWRDb3VudCA+PSBiaW5kaW5nUmVnaXN0cmF0aW9uLnJlcXVlc3RlZENvdW50KSB7XG5cdFx0XHR0aGlzLl9pc1NlYXJjaFBlbmRpbmcgPSBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKGJBbGxEb25lKSB7XG5cdFx0XHR0aGlzLl9pc0RhdGFSZWNlaXZlZCA9IHRydWU7XG5cdFx0XHR0aGlzLl9mbk9uRmluaXNoZWQoKTtcblx0XHR9XG5cdH1cblxuXHQvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQvLyBDYWxsYmFjayB3aGVuIGRhdGEgaXMgcmVxdWVzdGVkIG9uIGEgYmluZGluZy5cblx0cHJvdGVjdGVkIG9uRGF0YVJlcXVlc3RlZChvRXZlbnQ6IEV2ZW50PHt9LCBCaW5kaW5nPiwgcGFyYW1zOiB7IHRyaWdnZXJlZEJ5U2VhcmNoOiBib29sZWFuIH0pOiB2b2lkIHtcblx0XHQvLyBMb29rIGZvciB0aGUgY29ycmVzcG9uZGluZyBiaW5kaW5nIHJlZ2lzdHJhdGlvblxuXHRcdGNvbnN0IGJpbmRpbmcgPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0Y29uc3QgYmluZGluZ1JlZ2lzdHJhdGlvbiA9IHRoaXMuX2FCaW5kaW5nUmVnaXN0cmF0aW9ucy5maW5kKChyZWcpID0+IHtcblx0XHRcdHJldHVybiByZWcuYmluZGluZyA9PT0gYmluZGluZztcblx0XHR9KTtcblx0XHRpZiAoIWJpbmRpbmdSZWdpc3RyYXRpb24pIHtcblx0XHRcdExvZy5lcnJvcihcIlBhZ2VSZWFkeSAtIGRhdGEgcmVxdWVzdGVkIG9uIGFuIHVucmVnaXN0ZXJlZCBiaW5kaW5nXCIpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRiaW5kaW5nUmVnaXN0cmF0aW9uLnJlcXVlc3RlZENvdW50Kys7XG5cdFx0dGhpcy5faXNEYXRhUmVjZWl2ZWQgPSBmYWxzZTtcblx0XHRpZiAoYmluZGluZ1JlZ2lzdHJhdGlvbi5yZXF1ZXN0ZWRDb3VudCAtIGJpbmRpbmdSZWdpc3RyYXRpb24ucmVjZWl2ZWRDb3VudCA9PT0gMSkge1xuXHRcdFx0Ly8gTGlzdGVuIHRvIGRhdGFSZWNlaXZlZCBvbmx5IGlmIHRoZXJlJ3Mgbm8gb3RoZXIgcmVxdWVzdCBwZW5kaW5nXG5cdFx0XHQvLyBPdGhlcndpc2UgdGhlICdkYXRhUmVjZWl2ZWQnIGhhbmRsZXIgd291bGQgYmUgY2FsbGVkIHNldmVyYWwgdGltZXMgd2hlbiB0aGUgZmlyc3QgcXVlcnkgcmV0dXJuc1xuXHRcdFx0Ly8gYW5kIHdlIHdvdWxkbid0IHdhaXQgZm9yIGFsbCBxdWVyaWVzIHRvIGJlIGZpbmlzaGVkXG5cdFx0XHQvLyAod2Ugd2lsbCByZXN1YnNjcmliZSB0byB0aGUgZGF0YVJlY2VpdmVkIGV2ZW50IGluIG9uRGF0YVJlY2VpdmVkIGlmIG5lY2Vzc2FyeSlcblx0XHRcdGJpbmRpbmcuYXR0YWNoRXZlbnRPbmNlKFwiZGF0YVJlY2VpdmVkXCIsIHsgdHJpZ2dlcmVkQnlTZWFyY2g6IHBhcmFtcy50cmlnZ2VyZWRCeVNlYXJjaCB9LCB0aGlzLm9uRGF0YVJlY2VpdmVkLCB0aGlzKTtcblx0XHR9XG5cdH1cblxuXHQvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQvLyBDYWxsYmFjayB3aGVuIGEgc2VhcmNoIGlzIHRyaWdnZXJlZCBmcm9tIGEgZmlsdGVyYmFyXG5cdHByb3RlY3RlZCBvblNlYXJjaChvRXZlbnQ6IEZpbHRlckJhckJhc2UkU2VhcmNoRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBhTURDVGFibGVMaW5rZWRUb0ZpbHRlckJhciA9IHRoaXMuX2FNRENUYWJsZXMuZmlsdGVyKChvVGFibGUpID0+IHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdG9FdmVudC5nZXRTb3VyY2UoKS5nZXRJZCgpID09PSBvVGFibGUuZ2V0RmlsdGVyKCkgJiZcblx0XHRcdFx0b1RhYmxlLmdldFZpc2libGUoKSAmJlxuXHRcdFx0XHQhb1RhYmxlLmdldFBhcmVudCgpPy5nZXRQcm9wZXJ0eShcImJpbmRpbmdTdXNwZW5kZWRcIilcblx0XHRcdCk7XG5cdFx0fSk7XG5cdFx0Y29uc3QgYU1EQ0NoYXJ0c0xpbmtlZFRvRmlsdGVyQmFyID0gdGhpcy5fYU1EQ0NoYXJ0cy5maWx0ZXIoKG9DaGFydCkgPT4ge1xuXHRcdFx0cmV0dXJuIG9FdmVudC5nZXRTb3VyY2UoKS5nZXRJZCgpID09PSBvQ2hhcnQuZ2V0RmlsdGVyKCkgJiYgb0NoYXJ0LmdldFZpc2libGUoKTtcblx0XHR9KTtcblx0XHRpZiAoYU1EQ1RhYmxlTGlua2VkVG9GaWx0ZXJCYXIubGVuZ3RoID4gMCB8fCBhTURDQ2hhcnRzTGlua2VkVG9GaWx0ZXJCYXIubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy5faXNTZWFyY2hQZW5kaW5nID0gdHJ1ZTtcblx0XHR9XG5cdFx0YU1EQ1RhYmxlTGlua2VkVG9GaWx0ZXJCYXIuZm9yRWFjaCgob1RhYmxlKSA9PiB7XG5cdFx0XHR0aGlzLnJlZ2lzdGVyVGFibGUob1RhYmxlLCB0cnVlKTtcblx0XHR9KTtcblx0XHRhTURDQ2hhcnRzTGlua2VkVG9GaWx0ZXJCYXIuZm9yRWFjaChhc3luYyAob0NoYXJ0OiBDaGFydCAmIHsgaW5uZXJDaGFydEJvdW5kUHJvbWlzZT86IFByb21pc2U8dm9pZD4gfSkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKG9DaGFydC5pbm5lckNoYXJ0Qm91bmRQcm9taXNlKSB7XG5cdFx0XHRcdFx0YXdhaXQgb0NoYXJ0LmlubmVyQ2hhcnRCb3VuZFByb21pc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5yZWdpc3RlckNoYXJ0KG9DaGFydCwgdHJ1ZSk7XG5cdFx0XHR9IGNhdGNoIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IGZpbmQgYSBpbm5lciBib3VuZCBjaGFydFwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdC8vIFJlZ2lzdGVyIGEgYmluZGluZyAod2l0aCBhbiBvcHRpb25hbCB0YWJsZS9jaGFydClcblx0Ly8gYW5kIGF0dGFjaCBjYWxsYmFja3Mgb24gZGF0ZVJlcXVlc3RlZC9kYXRhUmVjZWl2ZWQgZXZlbnRzXG5cdHB1YmxpYyByZWdpc3RlcihfZXZlbnQ6IEV2ZW50IHwgbnVsbCwgZGF0YTogeyBiaW5kaW5nPzogQmluZGluZzsgdGFibGU/OiBUYWJsZTsgY2hhcnQ/OiBDaGFydDsgdHJpZ2dlcmVkQnlTZWFyY2g6IGJvb2xlYW4gfSk6IHZvaWQge1xuXHRcdGNvbnN0IGJpbmRpbmc6IEJpbmRpbmcgfCB1bmRlZmluZWQgPVxuXHRcdFx0ZGF0YS5iaW5kaW5nIHx8XG5cdFx0XHRkYXRhLnRhYmxlPy5nZXRSb3dCaW5kaW5nKCkgfHxcblx0XHRcdChkYXRhLmNoYXJ0Py5nZXRDb250cm9sRGVsZWdhdGUoKSBhcyB0eXBlb2YgQ2hhcnREZWxlZ2F0ZSkuZ2V0SW5uZXJDaGFydChkYXRhLmNoYXJ0KS5nZXRCaW5kaW5nKFwiZGF0YVwiKTtcblx0XHRjb25zdCBib3VuZENvbnRyb2wgPSAoZGF0YS50YWJsZSB8fCBkYXRhLmNoYXJ0KSBhcyBDb250cm9sIHwgdW5kZWZpbmVkO1xuXHRcdGlmICghYmluZGluZykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQvLyBDaGVjayBpZiB0aGUgYmluZGluZyBpcyBhbHJlYWR5IHJlZ2lzdGVyZWRcblx0XHRsZXQgYmluZGluZ1JlZ2lzdHJhdGlvbiA9IHRoaXMuX2FCaW5kaW5nUmVnaXN0cmF0aW9ucy5maW5kKChyZWcpID0+IHtcblx0XHRcdHJldHVybiByZWcuYmluZGluZyA9PT0gYmluZGluZztcblx0XHR9KTtcblx0XHRpZiAoYmluZGluZ1JlZ2lzdHJhdGlvbikge1xuXHRcdFx0aWYgKGJvdW5kQ29udHJvbCkge1xuXHRcdFx0XHQvLyBUaGUgYmluZGluZyB3YXMgYWxyZWFkeSByZWdpc3RlcmQgd2l0aG91dCBib3VuZENvbnRyb2wgaW5mb3JtYXRpb24gLS0+IHVwZGF0ZSBib3VuZENvbnRyb2xcblx0XHRcdFx0YmluZGluZ1JlZ2lzdHJhdGlvbi5ib3VuZENvbnRyb2wgPSBib3VuZENvbnRyb2w7XG5cdFx0XHR9XG5cdFx0XHQvLyBUaGlzIGJpbmRpbmcgaGFzIGFscmVhZHkgcmVxdWVzdGVkIGRhdGEsIGJ1dCB3ZSdyZSByZWdpc3RlcmluZyBpdCBhZ2FpbiAob24gc2VhcmNoKSAtLT4gYXR0YWNoIHRvIGRhdGFSZXF1ZXN0ZWQgYWdhaW5cblx0XHRcdGlmIChiaW5kaW5nUmVnaXN0cmF0aW9uLnJlcXVlc3RlZENvdW50ID4gMCkge1xuXHRcdFx0XHRiaW5kaW5nLmRldGFjaEV2ZW50KFwiZGF0YVJlcXVlc3RlZFwiLCB0aGlzLm9uRGF0YVJlcXVlc3RlZCwgdGhpcyk7XG5cdFx0XHRcdGJpbmRpbmcuYXR0YWNoRXZlbnRPbmNlKFwiZGF0YVJlcXVlc3RlZFwiLCB7IHRyaWdnZXJlZEJ5U2VhcmNoOiBkYXRhLnRyaWdnZXJlZEJ5U2VhcmNoIH0sIHRoaXMub25EYXRhUmVxdWVzdGVkLCB0aGlzKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGJvdW5kQ29udHJvbCkge1xuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlcmUncyBhIGRpZmZlcmVudCBiaW5kaW5nIHJlZ2lzdGVyZWQgZm9yIHRoZSBib3VuZCBjb250cm9sXG5cdFx0XHRiaW5kaW5nUmVnaXN0cmF0aW9uID0gdGhpcy5fYUJpbmRpbmdSZWdpc3RyYXRpb25zLmZpbmQoKHJlZykgPT4ge1xuXHRcdFx0XHRyZXR1cm4gcmVnLmJvdW5kQ29udHJvbCA9PT0gYm91bmRDb250cm9sO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAoYmluZGluZ1JlZ2lzdHJhdGlvbiAmJiBiaW5kaW5nUmVnaXN0cmF0aW9uLmJpbmRpbmcgIT09IGJpbmRpbmcpIHtcblx0XHRcdFx0Ly8gVGhlIGNvbnRyb2wgaGFkIGEgZGlmZmVyZW50IGJpbmRpbmcuIFRoaXMgY2FuIGhhcHBlbiBpbiBjYXNlIG9mIE1EQyBjaGFydHMgd2hvIHJlY3JlYXRlZCB0aGVpciBiaW5kaW5nIGFmdGVyIHNlYXJjaFxuXHRcdFx0XHQvLyBUaGUgcHJldmlvdXMgYmluZGluZyBpcyBkZXN0cm95ZWQsIHdlIGNhbiByZXBsYWNlIGl0IHdpdGggdGhlIG5ldyBhbmQgcmVzZXQgY291bnRlcnNcblx0XHRcdFx0YmluZGluZ1JlZ2lzdHJhdGlvbi5iaW5kaW5nID0gYmluZGluZztcblx0XHRcdFx0YmluZGluZ1JlZ2lzdHJhdGlvbi5yZXF1ZXN0ZWRDb3VudCA9IDA7XG5cdFx0XHRcdGJpbmRpbmdSZWdpc3RyYXRpb24ucmVjZWl2ZWRDb3VudCA9IDA7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghYmluZGluZ1JlZ2lzdHJhdGlvbikge1xuXHRcdFx0YmluZGluZ1JlZ2lzdHJhdGlvbiA9IHtcblx0XHRcdFx0YmluZGluZzogYmluZGluZyxcblx0XHRcdFx0Ym91bmRDb250cm9sOiBib3VuZENvbnRyb2wsXG5cdFx0XHRcdHJlcXVlc3RlZENvdW50OiAwLFxuXHRcdFx0XHRyZWNlaXZlZENvdW50OiAwXG5cdFx0XHR9O1xuXHRcdFx0dGhpcy5fYUJpbmRpbmdSZWdpc3RyYXRpb25zLnB1c2goYmluZGluZ1JlZ2lzdHJhdGlvbik7XG5cdFx0fVxuXHRcdGJpbmRpbmcuZGV0YWNoRXZlbnQoXCJkYXRhUmVxdWVzdGVkXCIsIHRoaXMub25EYXRhUmVxdWVzdGVkLCB0aGlzKTtcblx0XHRiaW5kaW5nLmF0dGFjaEV2ZW50T25jZShcImRhdGFSZXF1ZXN0ZWRcIiwgeyB0cmlnZ2VyZWRCeVNlYXJjaDogZGF0YS50cmlnZ2VyZWRCeVNlYXJjaCB9LCB0aGlzLm9uRGF0YVJlcXVlc3RlZCwgdGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogUmVnaXN0ZXJzIGEgYmluZGluZyBmb3Igd2F0Y2hpbmcgaXRzIGRhdGEgZXZlbnRzIChkYXRhUmVxdWVzdGVkIGFuZCBkYXRhUmVjZWl2ZWQpLlxuXHQgKiBAcGFyYW0gYmluZGluZyBUaGUgYmluZGluZ1xuXHQgKi9cblx0cHVibGljIHJlZ2lzdGVyQmluZGluZyhiaW5kaW5nOiBCaW5kaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5yZWdpc3RlcihudWxsLCB7IGJpbmRpbmcsIHRyaWdnZXJlZEJ5U2VhcmNoOiBmYWxzZSB9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlcnMgYW4gTURDVGFibGUgZm9yIHdhdGNoaW5nIHRoZSBkYXRhIGV2ZW50cyBvbiBpdHMgcm93IGJpbmRpbmcgKGRhdGFSZXF1ZXN0ZWQgYW5kIGRhdGFSZWNlaXZlZCkuXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgdGFibGVcblx0ICogQHBhcmFtIHRyaWdnZXJlZEJ5U2VhcmNoIFRydWUgaWYgdGhpcyByZWdpc3RyYXRpb24gaXMgdHJpZ2dlcmVkIGJ5IGEgZmlsdGVyQmFyIHNlYXJjaFxuXHQgKi9cblx0cHJvdGVjdGVkIHJlZ2lzdGVyVGFibGUodGFibGU6IFRhYmxlLCB0cmlnZ2VyZWRCeVNlYXJjaCA9IGZhbHNlKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLl9hTURDVGFibGVzLmluY2x1ZGVzKHRhYmxlKSkge1xuXHRcdFx0dGhpcy5fYU1EQ1RhYmxlcy5wdXNoKHRhYmxlKTtcblx0XHR9XG5cdFx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSB0YWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0aWYgKG9Sb3dCaW5kaW5nKSB7XG5cdFx0XHR0aGlzLnJlZ2lzdGVyKG51bGwsIHsgdGFibGUsIHRyaWdnZXJlZEJ5U2VhcmNoIH0pO1xuXHRcdH1cblx0XHRpZiAoIXRoaXMuX2FPdGhlckV2ZW50U291cmNlcy5pbmNsdWRlcyh0YWJsZSkpIHtcblx0XHRcdHRhYmxlLmF0dGFjaEV2ZW50KFwiYmluZGluZ1VwZGF0ZWRcIiwgeyB0YWJsZSwgdHJpZ2dlcmVkQnlTZWFyY2ggfSwgdGhpcy5yZWdpc3RlciwgdGhpcyk7XG5cdFx0XHR0aGlzLl9hT3RoZXJFdmVudFNvdXJjZXMucHVzaCh0YWJsZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVycyBhbiBNRENDaGFydCBmb3Igd2F0Y2hpbmcgdGhlIGRhdGEgZXZlbnRzIG9uIGl0cyBpbm5lciBkYXRhIGJpbmRpbmcgKGRhdGFSZXF1ZXN0ZWQgYW5kIGRhdGFSZWNlaXZlZCkuXG5cdCAqIEBwYXJhbSBjaGFydCBUaGUgY2hhcnRcblx0ICogQHBhcmFtIHRyaWdnZXJlZEJ5U2VhcmNoIFRydWUgaWYgdGhpcyByZWdpc3RyYXRpb24gaXMgdHJpZ2dlcmVkIGJ5IGEgZmlsdGVyQmFyIHNlYXJjaFxuXHQgKi9cblx0cHJvdGVjdGVkIHJlZ2lzdGVyQ2hhcnQoY2hhcnQ6IENoYXJ0LCB0cmlnZ2VyZWRCeVNlYXJjaCA9IGZhbHNlKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLl9hTURDQ2hhcnRzLmluY2x1ZGVzKGNoYXJ0KSkge1xuXHRcdFx0dGhpcy5fYU1EQ0NoYXJ0cy5wdXNoKGNoYXJ0KTtcblx0XHR9XG5cdFx0Y29uc3Qgb0lubmVyQ2hhcnQgPSAoY2hhcnQuZ2V0Q29udHJvbERlbGVnYXRlKCkgYXMgdHlwZW9mIENoYXJ0RGVsZWdhdGUpLmdldElubmVyQ2hhcnQoY2hhcnQpO1xuXHRcdGNvbnN0IGJpbmRpbmcgPSBvSW5uZXJDaGFydD8uZ2V0QmluZGluZyhcImRhdGFcIik7XG5cdFx0aWYgKGJpbmRpbmcpIHtcblx0XHRcdHRoaXMucmVnaXN0ZXIobnVsbCwgeyBjaGFydCwgdHJpZ2dlcmVkQnlTZWFyY2ggfSk7XG5cdFx0fVxuXHRcdGlmICghdGhpcy5fYU90aGVyRXZlbnRTb3VyY2VzLmluY2x1ZGVzKGNoYXJ0KSkge1xuXHRcdFx0Y2hhcnQuYXR0YWNoRXZlbnQoXCJiaW5kaW5nVXBkYXRlZFwiLCB7IGNoYXJ0LCB0cmlnZ2VyZWRCeVNlYXJjaCB9LCB0aGlzLnJlZ2lzdGVyLCB0aGlzKTtcblx0XHRcdHRoaXMuX2FPdGhlckV2ZW50U291cmNlcy5wdXNoKGNoYXJ0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmVnaXN0ZXJzIGFuIE1EQ1RhYmxlIG9yIE1EQ0NoYXJ0IGZvciB3YXRjaGluZyB0aGUgZGF0YSBldmVudHMgb24gaXRzIGlubmVyIGRhdGEgYmluZGluZyAoZGF0YVJlcXVlc3RlZCBhbmQgZGF0YVJlY2VpdmVkKS5cblx0ICogQHBhcmFtIGVsZW1lbnQgIFRoZSB0YWJsZSBvciBjaGFydFxuXHQgKi9cblx0cHVibGljIGFzeW5jIHJlZ2lzdGVyVGFibGVPckNoYXJ0KGVsZW1lbnQ6IFRhYmxlIHwgQ2hhcnQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAoIWVsZW1lbnQuaXNBPFRhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikgJiYgIWVsZW1lbnQuaXNBPENoYXJ0PihcInNhcC51aS5tZGMuQ2hhcnRcIikpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IGVsZW1lbnQuaW5pdGlhbGl6ZWQoKTsgLy8gYWNjZXNzIGJpbmRpbmcgb25seSBhZnRlciB0YWJsZS9jaGFydCBpcyBib3VuZFxuXHRcdFx0aWYgKGVsZW1lbnQuaXNBPFRhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0dGhpcy5yZWdpc3RlclRhYmxlKGVsZW1lbnQpO1xuXHRcdFx0XHQvL0lmIHRoZSBhdXRvQmluZE9uSW5pdCBpcyBlbmFibGVkLCB0aGUgdGFibGUgd2lsbCBiZSByZWJvdW5kXG5cdFx0XHRcdC8vVGhlbiB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoaXMgcmViaW5kIHRvIG9jY3VyIHRvIGVuc3VyZSB0aGUgcGFnZVJlYWR5IHdpbGwgYWxzbyB3YWl0IGZvciB0aGUgZGF0YSB0byBiZSByZWNlaXZlZFxuXHRcdFx0XHRpZiAoZWxlbWVudC5nZXRBdXRvQmluZE9uSW5pdCgpICYmIGVsZW1lbnQuZ2V0RG9tUmVmKCkpIHtcblx0XHRcdFx0XHRhd2FpdCBVdGlscy53aGVuQm91bmQoZWxlbWVudCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMucmVnaXN0ZXJDaGFydChlbGVtZW50KTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihcIlBhZ2VSZWFkeSAtIENhbm5vdCByZWdpc3RlciBhIHRhYmxlIG9yIGEgY2hhcnRcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVycyBhbiBNRENGaWx0ZXJCYXIgZm9yIHdhdGNoaW5nIGl0cyBzZWFyY2ggZXZlbnQuXG5cdCAqIEBwYXJhbSBmaWx0ZXJCYXIgVGhlIGZpbHRlciBiYXJcblx0ICovXG5cdHB1YmxpYyByZWdpc3RlckZpbHRlckJhcihmaWx0ZXJCYXI6IEZpbHRlckJhcik6IHZvaWQge1xuXHRcdGZpbHRlckJhci5hdHRhY2hFdmVudChcInNlYXJjaFwiLCB0aGlzLm9uU2VhcmNoLCB0aGlzKTtcblx0XHR0aGlzLl9hT3RoZXJFdmVudFNvdXJjZXMucHVzaChmaWx0ZXJCYXIpO1xuXHR9XG59XG5leHBvcnQgZGVmYXVsdCBEYXRhUXVlcnlXYXRjaGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0VBRUE7RUFBQSxJQVlNQSxnQkFBZ0I7SUFhckIsU0FBQUEsaUJBQ1dDLGVBQThCLEVBQzlCQyxhQUF5QixFQUNsQztNQUFBLEtBZlFDLHNCQUFzQixHQUFrRyxFQUFFO01BQUEsS0FFMUhDLG1CQUFtQixHQUFvQixFQUFFO01BQUEsS0FFekNDLGdCQUFnQixHQUFHLEtBQUs7TUFBQSxLQUl4QkMsV0FBVyxHQUFZLEVBQUU7TUFBQSxLQUV6QkMsV0FBVyxHQUFZLEVBQUU7TUFBQSxLQUd4Qk4sZUFBOEIsR0FBOUJBLGVBQThCO01BQUEsS0FDOUJDLGFBQXlCLEdBQXpCQSxhQUF5QjtJQUNqQzs7SUFFSDtJQUFBLElBQUFNLE1BQUEsR0FBQVIsZ0JBQUEsQ0FBQVMsU0FBQTtJQUFBRCxNQUFBLENBQ09FLGVBQWUsR0FBdEIsU0FBT0EsZUFBZUEsQ0FBQSxFQUFZO01BQ2pDLE9BQU8sSUFBSSxDQUFDTCxnQkFBZ0I7SUFDN0IsQ0FBQztJQUFBRyxNQUFBLENBRU1HLGNBQWMsR0FBckIsU0FBT0EsY0FBY0EsQ0FBQSxFQUF3QjtNQUM1QyxPQUFPLElBQUksQ0FBQ0MsZUFBZTtJQUM1QixDQUFDO0lBQUFKLE1BQUEs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
@@ -83,8 +83,7 @@ sap.ui.define([], function () {
83
83
  this.increaseCount("numberOfTimesNoPlaceholderIsShownOnUI");
84
84
  }
85
85
  if (target) {
86
- var _recommendation$_AIAl;
87
- if ((_recommendation$_AIAl = recommendation._AIAltvRecmddFldVals) !== null && _recommendation$_AIAl !== void 0 && _recommendation$_AIAl.length) {
86
+ if (recommendation._AIAltvRecmddFldVals?.length) {
88
87
  this.increaseCount("totalNumberOfRecommendationsReceived");
89
88
  }
90
89
  }
@@ -98,11 +97,10 @@ sap.ui.define([], function () {
98
97
  * @param selectedValue
99
98
  */;
100
99
  _proto.updateTelemetryDataBasedOnUserSelection = function updateTelemetryDataBasedOnUserSelection(view, fieldPath, selectedValue) {
101
- const recommendationsData = (view === null || view === void 0 ? void 0 : view.getModel("internal")).getProperty("/recommendationsData");
102
- if (recommendationsData !== null && recommendationsData !== void 0 && recommendationsData[fieldPath]) {
103
- var _fieldRecommData$addi;
100
+ const recommendationsData = (view?.getModel("internal")).getProperty("/recommendationsData");
101
+ if (recommendationsData?.[fieldPath]) {
104
102
  const fieldRecommData = recommendationsData[fieldPath];
105
- const valueIndexInRecommendations = (_fieldRecommData$addi = fieldRecommData.additionalValues) === null || _fieldRecommData$addi === void 0 ? void 0 : _fieldRecommData$addi.findIndex(additionalValue => additionalValue.value === selectedValue);
103
+ const valueIndexInRecommendations = fieldRecommData.additionalValues?.findIndex(additionalValue => additionalValue.value === selectedValue);
106
104
  if (selectedValue == fieldRecommData.value) {
107
105
  // top recommendation was selected then store the data in telemetry
108
106
  this.increaseCount("numberOfTimesTopRecommendationsSelected");
@@ -119,4 +117,4 @@ sap.ui.define([], function () {
119
117
  }();
120
118
  return Telemetry;
121
119
  }, false);
122
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUZWxlbWV0cnkiLCJyZXNldERhdGEiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJ1cGRhdGVEYXRhIiwia2V5IiwidmFsdWUiLCJ0ZWxlbWV0cnlEYXRhIiwiaW5jcmVhc2VDb3VudCIsInVwZGF0ZVJlc3BvbnNlVGltZUluZm8iLCJ0aW1lVGFrZW4iLCJ0b3RhbFJlY29tbWVuZGF0aW9uQ2FsbHMiLCJtYXhUaW1lVGFrZW5Ub1JlY2VpdmVSZWNvbW1lbmRhdGlvbnMiLCJtaW5UaW1lVGFrZW5Ub1JlY2VpdmVSZWNvbW1lbmRhdGlvbnMiLCJ0b3RhbFRpbWVUYWtlbiIsImF2Z1RpbWVUYWtlbiIsIm51bWJlck9mVGltZXNSZWNvbW1lbmRhdGlvbnNGZXRjaGVkIiwiYXZlcmFnZVRpbWVUYWtlblRvUmVjZWl2ZVJlY29tbWVuZGF0aW9ucyIsIm51bWJlck9mVGltZXNOb1BsYWNlaG9sZGVySXNTaG93bk9uVUkiLCJudW1iZXJPZlJlY29tbWVuZGVkRmllbGRzIiwibnVtYmVyT2ZUaW1lc1RvcFJlY29tbWVuZGF0aW9uc1NlbGVjdGVkIiwibnVtYmVyT2ZUaW1lc05vblRvcFJlY29tbWVuZGF0aW9uc1NlbGVjdGVkIiwibnVtYmVyT2ZUaW1lc05vblJlY29tbWVuZGVkVmFsdWVXYXNTZWxlY3RlZCIsIm51bWJlck9mRmllbGRzQWNjZXB0ZWRUaHJvdWdoQWNjZXB0QnV0dG9uIiwibnVtYmVyT2ZGaWVsZHNJZ25vcmVkVGhyb3VnaElnbm9yZUJ1dHRvbiIsIm51bWJlck9mVGltZXNFbXB0eVJlY29tbWVuZGF0aW9ucyIsIm51bWJlcm9mVGltZXNGb3JtYXR0ZXJDYWxsZWQiLCJ0b3RhbE51bWJlck9mUmVjb21tZW5kYXRpb25zUmVjZWl2ZWQiLCJudW1iZXJPZlRpbWVzRm9ybWF0dGVyTm90Q2FsbGVkIiwic3RvcmVEYXRhIiwidmlldyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJnZXRDb250cm9sbGVyIiwidGVsZW1ldHJ5Iiwic3RvcmVBY3Rpb24iLCJ0eXBlIiwicGFyYW1ldGVycyIsImdldERhdGEiLCJ1cGRhdGVEYXRhRnJvbVJlY29tbWVuZGF0aW9uUmVzcG9uc2UiLCJyZWNvbW1lbmRhdGlvbnMiLCJpIiwicmVjb21tZW5kYXRpb24iLCJ0YXJnZXQiLCJBSVJlY29tbWVuZGVkRmllbGRQYXRoIiwiQUlSZWNvbW1lbmRlZEZpZWxkVmFsdWUiLCJBSVJlY29tbWVuZGVkRmllbGREZXNjcmlwdGlvbiIsIl9yZWNvbW1lbmRhdGlvbiRfQUlBbCIsIl9BSUFsdHZSZWNtZGRGbGRWYWxzIiwidXBkYXRlVGVsZW1ldHJ5RGF0YUJhc2VkT25Vc2VyU2VsZWN0aW9uIiwiZmllbGRQYXRoIiwic2VsZWN0ZWRWYWx1ZSIsInJlY29tbWVuZGF0aW9uc0RhdGEiLCJnZXRNb2RlbCIsImdldFByb3BlcnR5IiwiX2ZpZWxkUmVjb21tRGF0YSRhZGRpIiwiZmllbGRSZWNvbW1EYXRhIiwidmFsdWVJbmRleEluUmVjb21tZW5kYXRpb25zIiwiYWRkaXRpb25hbFZhbHVlcyIsImZpbmRJbmRleCIsImFkZGl0aW9uYWxWYWx1ZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGVsZW1ldHJ5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgUmVjb21tZW5kYXRpb25JbmZvLCBTdGFuZGFyZFJlY29tbWVuZGF0aW9uUmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9TdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IFJlY29tbWVuZGF0aW9uVGVsZW1ldHJ5IH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL1RlbGVtZXRyeVNlcnZpY2VGYWN0b3J5XCI7XG5cbmNsYXNzIFRlbGVtZXRyeSB7XG5cdHByaXZhdGUgdGVsZW1ldHJ5RGF0YSE6IFJlY29tbWVuZGF0aW9uVGVsZW1ldHJ5O1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnJlc2V0RGF0YSgpO1xuXHR9XG5cblx0cHVibGljIHVwZGF0ZURhdGEoa2V5OiBrZXlvZiBSZWNvbW1lbmRhdGlvblRlbGVtZXRyeSwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuXHRcdHRoaXMudGVsZW1ldHJ5RGF0YVtrZXldID0gdmFsdWU7XG5cdH1cblxuXHRwdWJsaWMgaW5jcmVhc2VDb3VudChrZXk6IGtleW9mIFJlY29tbWVuZGF0aW9uVGVsZW1ldHJ5KTogbnVtYmVyIHtcblx0XHRyZXR1cm4gKyt0aGlzLnRlbGVtZXRyeURhdGFba2V5XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgdXBkYXRlIGRldGFpbHMgYWJvdXQgdGhlIHJlY29tbWVuZGF0aW9uIGNhbGxzIGxpa2UgbWluLCBtYXggb3IgYXZhcmFnZSB0aW1lIHRha2VuIGZvciBhIHBhcnRpY3VsYXIgcmVjb21tZW5kYXRpb24gY2FsbC5cblx0ICogQHBhcmFtIHRpbWVUYWtlblxuXHQgKi9cblx0cHVibGljIHVwZGF0ZVJlc3BvbnNlVGltZUluZm8odGltZVRha2VuOiBudW1iZXIpOiB2b2lkIHtcblx0XHRjb25zdCB0b3RhbFJlY29tbWVuZGF0aW9uQ2FsbHMgPSB0aGlzLmluY3JlYXNlQ291bnQoXCJudW1iZXJPZlRpbWVzUmVjb21tZW5kYXRpb25zRmV0Y2hlZFwiKTtcblxuXHRcdC8vIHVwZGF0ZSBtYXggdGltZSB0YWtlblxuXHRcdGlmICh0aW1lVGFrZW4gPiB0aGlzLnRlbGVtZXRyeURhdGEubWF4VGltZVRha2VuVG9SZWNlaXZlUmVjb21tZW5kYXRpb25zKSB7XG5cdFx0XHR0aGlzLnVwZGF0ZURhdGEoXCJtYXhUaW1lVGFrZW5Ub1JlY2VpdmVSZWNvbW1lbmRhdGlvbnNcIiwgdGltZVRha2VuKTtcblx0XHR9XG5cdFx0Ly8gdXBkYXRlIG1pbiB0aW1lIHRha2VuXG5cdFx0aWYgKFxuXHRcdFx0dGhpcy50ZWxlbWV0cnlEYXRhLm1pblRpbWVUYWtlblRvUmVjZWl2ZVJlY29tbWVuZGF0aW9ucyA9PT0gMCB8fFxuXHRcdFx0dGltZVRha2VuIDwgdGhpcy50ZWxlbWV0cnlEYXRhLm1pblRpbWVUYWtlblRvUmVjZWl2ZVJlY29tbWVuZGF0aW9uc1xuXHRcdCkge1xuXHRcdFx0dGhpcy51cGRhdGVEYXRhKFwibWluVGltZVRha2VuVG9SZWNlaXZlUmVjb21tZW5kYXRpb25zXCIsIHRpbWVUYWtlbik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdG90YWxUaW1lVGFrZW4gPSB0aGlzLnRlbGVtZXRyeURhdGEudG90YWxUaW1lVGFrZW4gKyB0aW1lVGFrZW47XG5cdFx0Y29uc3QgYXZnVGltZVRha2VuID0gdG90YWxUaW1lVGFrZW4gLyB0b3RhbFJlY29tbWVuZGF0aW9uQ2FsbHM7XG5cdFx0dGhpcy51cGRhdGVEYXRhKFwiYXZlcmFnZVRpbWVUYWtlblRvUmVjZWl2ZVJlY29tbWVuZGF0aW9uc1wiLCBhdmdUaW1lVGFrZW4pO1xuXHRcdHRoaXMudXBkYXRlRGF0YShcInRvdGFsVGltZVRha2VuXCIsIHRvdGFsVGltZVRha2VuKTtcblx0fVxuXG5cdHB1YmxpYyByZXNldERhdGEoKTogdm9pZCB7XG5cdFx0dGhpcy50ZWxlbWV0cnlEYXRhID0ge1xuXHRcdFx0bnVtYmVyT2ZUaW1lc1JlY29tbWVuZGF0aW9uc0ZldGNoZWQ6IDAsXG5cdFx0XHRtYXhUaW1lVGFrZW5Ub1JlY2VpdmVSZWNvbW1lbmRhdGlvbnM6IDAsXG5cdFx0XHRtaW5UaW1lVGFrZW5Ub1JlY2VpdmVSZWNvbW1lbmRhdGlvbnM6IDAsXG5cdFx0XHRhdmVyYWdlVGltZVRha2VuVG9SZWNlaXZlUmVjb21tZW5kYXRpb25zOiAwLFxuXHRcdFx0bnVtYmVyT2ZUaW1lc05vUGxhY2Vob2xkZXJJc1Nob3duT25VSTogMCxcblx0XHRcdG51bWJlck9mUmVjb21tZW5kZWRGaWVsZHM6IDAsXG5cdFx0XHRudW1iZXJPZlRpbWVzVG9wUmVjb21tZW5kYXRpb25zU2VsZWN0ZWQ6IDAsXG5cdFx0XHRudW1iZXJPZlRpbWVzTm9uVG9wUmVjb21tZW5kYXRpb25zU2VsZWN0ZWQ6IDAsXG5cdFx0XHRudW1iZXJPZlRpbWVzTm9uUmVjb21tZW5kZWRWYWx1ZVdhc1NlbGVjdGVkOiAwLFxuXHRcdFx0bnVtYmVyT2ZGaWVsZHNBY2NlcHRlZFRocm91Z2hBY2NlcHRCdXR0b246IDAsXG5cdFx0XHRudW1iZXJPZkZpZWxkc0lnbm9yZWRUaHJvdWdoSWdub3JlQnV0dG9uOiAwLFxuXHRcdFx0bnVtYmVyT2ZUaW1lc0VtcHR5UmVjb21tZW5kYXRpb25zOiAwLFxuXHRcdFx0bnVtYmVyb2ZUaW1lc0Zvcm1hdHRlckNhbGxlZDogMCxcblx0XHRcdHRvdGFsTnVtYmVyT2ZSZWNvbW1lbmRhdGlvbnNSZWNlaXZlZDogMCxcblx0XHRcdG51bWJlck9mVGltZXNGb3JtYXR0ZXJOb3RDYWxsZWQ6IDAsXG5cdFx0XHR0b3RhbFRpbWVUYWtlbjogMFxuXHRcdH07XG5cdH1cblxuXHRwdWJsaWMgc3RvcmVEYXRhKHZpZXc6IEZFVmlldyk6IHZvaWQge1xuXHRcdGlmIChPYmplY3Qua2V5cyh0aGlzLnRlbGVtZXRyeURhdGEpLmxlbmd0aCkge1xuXHRcdFx0Ly8gdXBkYXRlIHRlbGVtZXRyeSBpbmZvcm1hdGlvbiwgYXMgcGVyIGRhdGEgY29sbGVjdGVkIGVhcmxpZXIsIGJlZm9yZSBzZW5kaW5nIHRvIGJhY2tlbmRcblx0XHRcdHRoaXMudGVsZW1ldHJ5RGF0YVtcIm51bWJlck9mVGltZXNGb3JtYXR0ZXJOb3RDYWxsZWRcIl0gPVxuXHRcdFx0XHR0aGlzLnRlbGVtZXRyeURhdGFbXCJ0b3RhbE51bWJlck9mUmVjb21tZW5kYXRpb25zUmVjZWl2ZWRcIl0gLSB0aGlzLnRlbGVtZXRyeURhdGFbXCJudW1iZXJvZlRpbWVzRm9ybWF0dGVyQ2FsbGVkXCJdO1xuXHRcdH1cblx0XHR2aWV3LmdldENvbnRyb2xsZXIoKS50ZWxlbWV0cnkuc3RvcmVBY3Rpb24oe1xuXHRcdFx0dHlwZTogXCJGRS5SZWNvbW1lbmRhdGlvbnNcIixcblx0XHRcdHBhcmFtZXRlcnM6IHRoaXMudGVsZW1ldHJ5RGF0YVxuXHRcdH0pO1xuXHR9XG5cblx0cHVibGljIGdldERhdGEoKTogUmVjb21tZW5kYXRpb25UZWxlbWV0cnkge1xuXHRcdHJldHVybiB0aGlzLnRlbGVtZXRyeURhdGE7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiB3aWxsIHVwZGF0ZSB0ZWxlbWV0cnkgZGF0YSBiYXNlZCBvbiByZXNwb25zZSB3ZSBnb3QuXG5cdCAqIEBwYXJhbSByZWNvbW1lbmRhdGlvbnMgUmVjb21tZW5kYXRpb25zIG9idGFpbmVkIGZyb20gcmVzcG9uc2UuXG5cdCAqL1xuXHRwdWJsaWMgdXBkYXRlRGF0YUZyb21SZWNvbW1lbmRhdGlvblJlc3BvbnNlKHJlY29tbWVuZGF0aW9uczogU3RhbmRhcmRSZWNvbW1lbmRhdGlvblJlc3BvbnNlW10pOiB2b2lkIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJlY29tbWVuZGF0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgcmVjb21tZW5kYXRpb24gPSByZWNvbW1lbmRhdGlvbnNbaV07XG5cdFx0XHRjb25zdCB0YXJnZXQgPSByZWNvbW1lbmRhdGlvbi5BSVJlY29tbWVuZGVkRmllbGRQYXRoO1xuXHRcdFx0aWYgKCEocmVjb21tZW5kYXRpb24uQUlSZWNvbW1lbmRlZEZpZWxkVmFsdWUgJiYgcmVjb21tZW5kYXRpb24uQUlSZWNvbW1lbmRlZEZpZWxkRGVzY3JpcHRpb24pKSB7XG5cdFx0XHRcdHRoaXMuaW5jcmVhc2VDb3VudChcIm51bWJlck9mVGltZXNOb1BsYWNlaG9sZGVySXNTaG93bk9uVUlcIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAodGFyZ2V0KSB7XG5cdFx0XHRcdGlmIChyZWNvbW1lbmRhdGlvbi5fQUlBbHR2UmVjbWRkRmxkVmFscz8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0dGhpcy5pbmNyZWFzZUNvdW50KFwidG90YWxOdW1iZXJPZlJlY29tbWVuZGF0aW9uc1JlY2VpdmVkXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gd2lsbCB1cGRhdGUgZGF0YSBpbiB0ZWxlbWV0cnkgYXMgcGVyIHRvcC9ub24tdG9wIHJlY29tbWVuZGF0aW9uIHZhbHVlIHdhcyBjaG9zZW4gb3IgaWYgbm9uIHJlY29tbWVuZGVkIHZhbHVlIHdhcyBjaG9zZW4uXG5cdCAqIEBwYXJhbSB2aWV3XG5cdCAqIEBwYXJhbSBmaWVsZFBhdGhcblx0ICogQHBhcmFtIHNlbGVjdGVkVmFsdWVcblx0ICovXG5cdHB1YmxpYyB1cGRhdGVUZWxlbWV0cnlEYXRhQmFzZWRPblVzZXJTZWxlY3Rpb24odmlldzogVmlldywgZmllbGRQYXRoOiBzdHJpbmcsIHNlbGVjdGVkVmFsdWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uc0RhdGEgPSAodmlldz8uZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWwpLmdldFByb3BlcnR5KFwiL3JlY29tbWVuZGF0aW9uc0RhdGFcIikgYXNcblx0XHRcdHwgUmVjb21tZW5kYXRpb25JbmZvXG5cdFx0XHR8IHVuZGVmaW5lZDtcblx0XHRpZiAocmVjb21tZW5kYXRpb25zRGF0YT8uW2ZpZWxkUGF0aF0pIHtcblx0XHRcdGNvbnN0IGZpZWxkUmVjb21tRGF0YSA9IHJlY29tbWVuZGF0aW9uc0RhdGFbZmllbGRQYXRoXTtcblx0XHRcdGNvbnN0IHZhbHVlSW5kZXhJblJlY29tbWVuZGF0aW9ucyA9IGZpZWxkUmVjb21tRGF0YS5hZGRpdGlvbmFsVmFsdWVzPy5maW5kSW5kZXgoXG5cdFx0XHRcdChhZGRpdGlvbmFsVmFsdWUpID0+IGFkZGl0aW9uYWxWYWx1ZS52YWx1ZSA9PT0gc2VsZWN0ZWRWYWx1ZVxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKHNlbGVjdGVkVmFsdWUgPT0gZmllbGRSZWNvbW1EYXRhLnZhbHVlKSB7XG5cdFx0XHRcdC8vIHRvcCByZWNvbW1lbmRhdGlvbiB3YXMgc2VsZWN0ZWQgdGhlbiBzdG9yZSB0aGUgZGF0YSBpbiB0ZWxlbWV0cnlcblx0XHRcdFx0dGhpcy5pbmNyZWFzZUNvdW50KFwibnVtYmVyT2ZUaW1lc1RvcFJlY29tbWVuZGF0aW9uc1NlbGVjdGVkXCIpO1xuXHRcdFx0fSBlbHNlIGlmICh2YWx1ZUluZGV4SW5SZWNvbW1lbmRhdGlvbnMgIT09IC0xKSB7XG5cdFx0XHRcdC8vIHNvbWUgb3RoZXIgcmVjb21tZW5kYXRpb24gd2FzIHNlbGVjdGVkXG5cdFx0XHRcdHRoaXMuaW5jcmVhc2VDb3VudChcIm51bWJlck9mVGltZXNOb25Ub3BSZWNvbW1lbmRhdGlvbnNTZWxlY3RlZFwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHNlbGVjdGVkIHZhbHVlIGlzIG5vdCBmcm9tIHJlY29tbWVuZGF0aW9uc1xuXHRcdFx0XHR0aGlzLmluY3JlYXNlQ291bnQoXCJudW1iZXJPZlRpbWVzTm9uUmVjb21tZW5kZWRWYWx1ZVdhc1NlbGVjdGVkXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuZXhwb3J0IGRlZmF1bHQgVGVsZW1ldHJ5O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O01BTU1BLFNBQVM7SUFHZCxTQUFBQSxVQUFBLEVBQXFCO01BQ3BCLElBQUksQ0FBQ0MsU0FBUyxDQUFDLENBQUM7SUFDakI7SUFBQyxJQUFBQyxNQUFBLEdBQUFGLFNBQUEsQ0FBQUcsU0FBQTtJQUFBRCxNQUFBLENBRU1FLFVBQVUsR0FBakIsU0FBQUEsV0FBa0JDLEdBQWtDLEVBQUVDLEtBQWEsRUFBUTtNQUMxRSxJQUFJLENBQUNDLGFBQWEsQ0FBQ0YsR0FBRyxDQUFDLEdBQUdDLEtBQUs7SUFDaEMsQ0FBQztJQUFBSixNQUFBLENBRU1NLGFBQWEsR0FBcEIsU0FBQUEs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
120
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUZWxlbWV0cnkiLCJyZXNldERhdGEiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJ1cGRhdGVEYXRhIiwia2V5IiwidmFsdWUiLCJ0ZWxlbWV0cnlEYXRhIiwiaW5jcmVhc2VDb3VudCIsInVwZGF0ZVJlc3BvbnNlVGltZUluZm8iLCJ0aW1lVGFrZW4iLCJ0b3RhbFJlY29tbWVuZGF0aW9uQ2FsbHMiLCJtYXhUaW1lVGFrZW5Ub1JlY2VpdmVSZWNvbW1lbmRhdGlvbnMiLCJtaW5UaW1lVGFrZW5Ub1JlY2VpdmVSZWNvbW1lbmRhdGlvbnMiLCJ0b3RhbFRpbWVUYWtlbiIsImF2Z1RpbWVUYWtlbiIsIm51bWJlck9mVGltZXNSZWNvbW1lbmRhdGlvbnNGZXRjaGVkIiwiYXZlcmFnZVRpbWVUYWtlblRvUmVjZWl2ZVJlY29tbWVuZGF0aW9ucyIsIm51bWJlck9mVGltZXNOb1BsYWNlaG9sZGVySXNTaG93bk9uVUkiLCJudW1iZXJPZlJlY29tbWVuZGVkRmllbGRzIiwibnVtYmVyT2ZUaW1lc1RvcFJlY29tbWVuZGF0aW9uc1NlbGVjdGVkIiwibnVtYmVyT2ZUaW1lc05vblRvcFJlY29tbWVuZGF0aW9uc1NlbGVjdGVkIiwibnVtYmVyT2ZUaW1lc05vblJlY29tbWVuZGVkVmFsdWVXYXNTZWxlY3RlZCIsIm51bWJlck9mRmllbGRzQWNjZXB0ZWRUaHJvdWdoQWNjZXB0QnV0dG9uIiwibnVtYmVyT2ZGaWVsZHNJZ25vcmVkVGhyb3VnaElnbm9yZUJ1dHRvbiIsIm51bWJlck9mVGltZXNFbXB0eVJlY29tbWVuZGF0aW9ucyIsIm51bWJlcm9mVGltZXNGb3JtYXR0ZXJDYWxsZWQiLCJ0b3RhbE51bWJlck9mUmVjb21tZW5kYXRpb25zUmVjZWl2ZWQiLCJudW1iZXJPZlRpbWVzRm9ybWF0dGVyTm90Q2FsbGVkIiwic3RvcmVEYXRhIiwidmlldyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJnZXRDb250cm9sbGVyIiwidGVsZW1ldHJ5Iiwic3RvcmVBY3Rpb24iLCJ0eXBlIiwicGFyYW1ldGVycyIsImdldERhdGEiLCJ1cGRhdGVEYXRhRnJvbVJlY29tbWVuZGF0aW9uUmVzcG9uc2UiLCJyZWNvbW1lbmRhdGlvbnMiLCJpIiwicmVjb21tZW5kYXRpb24iLCJ0YXJnZXQiLCJBSVJlY29tbWVuZGVkRmllbGRQYXRoIiwiQUlSZWNvbW1lbmRlZEZpZWxkVmFsdWUiLCJBSVJlY29tbWVuZGVkRmllbGREZXNjcmlwdGlvbiIsIl9BSUFsdHZSZWNtZGRGbGRWYWxzIiwidXBkYXRlVGVsZW1ldHJ5RGF0YUJhc2VkT25Vc2VyU2VsZWN0aW9uIiwiZmllbGRQYXRoIiwic2VsZWN0ZWRWYWx1ZSIsInJlY29tbWVuZGF0aW9uc0RhdGEiLCJnZXRNb2RlbCIsImdldFByb3BlcnR5IiwiZmllbGRSZWNvbW1EYXRhIiwidmFsdWVJbmRleEluUmVjb21tZW5kYXRpb25zIiwiYWRkaXRpb25hbFZhbHVlcyIsImZpbmRJbmRleCIsImFkZGl0aW9uYWxWYWx1ZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGVsZW1ldHJ5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgUmVjb21tZW5kYXRpb25JbmZvLCBTdGFuZGFyZFJlY29tbWVuZGF0aW9uUmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9TdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IFJlY29tbWVuZGF0aW9uVGVsZW1ldHJ5IH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL1RlbGVtZXRyeVNlcnZpY2VGYWN0b3J5XCI7XG5cbmNsYXNzIFRlbGVtZXRyeSB7XG5cdHByaXZhdGUgdGVsZW1ldHJ5RGF0YSE6IFJlY29tbWVuZGF0aW9uVGVsZW1ldHJ5O1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnJlc2V0RGF0YSgpO1xuXHR9XG5cblx0cHVibGljIHVwZGF0ZURhdGEoa2V5OiBrZXlvZiBSZWNvbW1lbmRhdGlvblRlbGVtZXRyeSwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuXHRcdHRoaXMudGVsZW1ldHJ5RGF0YVtrZXldID0gdmFsdWU7XG5cdH1cblxuXHRwdWJsaWMgaW5jcmVhc2VDb3VudChrZXk6IGtleW9mIFJlY29tbWVuZGF0aW9uVGVsZW1ldHJ5KTogbnVtYmVyIHtcblx0XHRyZXR1cm4gKyt0aGlzLnRlbGVtZXRyeURhdGFba2V5XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgdXBkYXRlIGRldGFpbHMgYWJvdXQgdGhlIHJlY29tbWVuZGF0aW9uIGNhbGxzIGxpa2UgbWluLCBtYXggb3IgYXZhcmFnZSB0aW1lIHRha2VuIGZvciBhIHBhcnRpY3VsYXIgcmVjb21tZW5kYXRpb24gY2FsbC5cblx0ICogQHBhcmFtIHRpbWVUYWtlblxuXHQgKi9cblx0cHVibGljIHVwZGF0ZVJlc3BvbnNlVGltZUluZm8odGltZVRha2VuOiBudW1iZXIpOiB2b2lkIHtcblx0XHRjb25zdCB0b3RhbFJlY29tbWVuZGF0aW9uQ2FsbHMgPSB0aGlzLmluY3JlYXNlQ291bnQoXCJudW1iZXJPZlRpbWVzUmVjb21tZW5kYXRpb25zRmV0Y2hlZFwiKTtcblxuXHRcdC8vIHVwZGF0ZSBtYXggdGltZSB0YWtlblxuXHRcdGlmICh0aW1lVGFrZW4gPiB0aGlzLnRlbGVtZXRyeURhdGEubWF4VGltZVRha2VuVG9SZWNlaXZlUmVjb21tZW5kYXRpb25zKSB7XG5cdFx0XHR0aGlzLnVwZGF0ZURhdGEoXCJtYXhUaW1lVGFrZW5Ub1JlY2VpdmVSZWNvbW1lbmRhdGlvbnNcIiwgdGltZVRha2VuKTtcblx0XHR9XG5cdFx0Ly8gdXBkYXRlIG1pbiB0aW1lIHRha2VuXG5cdFx0aWYgKFxuXHRcdFx0dGhpcy50ZWxlbWV0cnlEYXRhLm1pblRpbWVUYWtlblRvUmVjZWl2ZVJlY29tbWVuZGF0aW9ucyA9PT0gMCB8fFxuXHRcdFx0dGltZVRha2VuIDwgdGhpcy50ZWxlbWV0cnlEYXRhLm1pblRpbWVUYWtlblRvUmVjZWl2ZVJlY29tbWVuZGF0aW9uc1xuXHRcdCkge1xuXHRcdFx0dGhpcy51cGRhdGVEYXRhKFwibWluVGltZVRha2VuVG9SZWNlaXZlUmVjb21tZW5kYXRpb25zXCIsIHRpbWVUYWtlbik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdG90YWxUaW1lVGFrZW4gPSB0aGlzLnRlbGVtZXRyeURhdGEudG90YWxUaW1lVGFrZW4gKyB0aW1lVGFrZW47XG5cdFx0Y29uc3QgYXZnVGltZVRha2VuID0gdG90YWxUaW1lVGFrZW4gLyB0b3RhbFJlY29tbWVuZGF0aW9uQ2FsbHM7XG5cdFx0dGhpcy51cGRhdGVEYXRhKFwiYXZlcmFnZVRpbWVUYWtlblRvUmVjZWl2ZVJlY29tbWVuZGF0aW9uc1wiLCBhdmdUaW1lVGFrZW4pO1xuXHRcdHRoaXMudXBkYXRlRGF0YShcInRvdGFsVGltZVRha2VuXCIsIHRvdGFsVGltZVRha2VuKTtcblx0fVxuXG5cdHB1YmxpYyByZXNldERhdGEoKTogdm9pZCB7XG5cdFx0dGhpcy50ZWxlbWV0cnlEYXRhID0ge1xuXHRcdFx0bnVtYmVyT2ZUaW1lc1JlY29tbWVuZGF0aW9uc0ZldGNoZWQ6IDAsXG5cdFx0XHRtYXhUaW1lVGFrZW5Ub1JlY2VpdmVSZWNvbW1lbmRhdGlvbnM6IDAsXG5cdFx0XHRtaW5UaW1lVGFrZW5Ub1JlY2VpdmVSZWNvbW1lbmRhdGlvbnM6IDAsXG5cdFx0XHRhdmVyYWdlVGltZVRha2VuVG9SZWNlaXZlUmVjb21tZW5kYXRpb25zOiAwLFxuXHRcdFx0bnVtYmVyT2ZUaW1lc05vUGxhY2Vob2xkZXJJc1Nob3duT25VSTogMCxcblx0XHRcdG51bWJlck9mUmVjb21tZW5kZWRGaWVsZHM6IDAsXG5cdFx0XHRudW1iZXJPZlRpbWVzVG9wUmVjb21tZW5kYXRpb25zU2VsZWN0ZWQ6IDAsXG5cdFx0XHRudW1iZXJPZlRpbWVzTm9uVG9wUmVjb21tZW5kYXRpb25zU2VsZWN0ZWQ6IDAsXG5cdFx0XHRudW1iZXJPZlRpbWVzTm9uUmVjb21tZW5kZWRWYWx1ZVdhc1NlbGVjdGVkOiAwLFxuXHRcdFx0bnVtYmVyT2ZGaWVsZHNBY2NlcHRlZFRocm91Z2hBY2NlcHRCdXR0b246IDAsXG5cdFx0XHRudW1iZXJPZkZpZWxkc0lnbm9yZWRUaHJvdWdoSWdub3JlQnV0dG9uOiAwLFxuXHRcdFx0bnVtYmVyT2ZUaW1lc0VtcHR5UmVjb21tZW5kYXRpb25zOiAwLFxuXHRcdFx0bnVtYmVyb2ZUaW1lc0Zvcm1hdHRlckNhbGxlZDogMCxcblx0XHRcdHRvdGFsTnVtYmVyT2ZSZWNvbW1lbmRhdGlvbnNSZWNlaXZlZDogMCxcblx0XHRcdG51bWJlck9mVGltZXNGb3JtYXR0ZXJOb3RDYWxsZWQ6IDAsXG5cdFx0XHR0b3RhbFRpbWVUYWtlbjogMFxuXHRcdH07XG5cdH1cblxuXHRwdWJsaWMgc3RvcmVEYXRhKHZpZXc6IEZFVmlldyk6IHZvaWQge1xuXHRcdGlmIChPYmplY3Qua2V5cyh0aGlzLnRlbGVtZXRyeURhdGEpLmxlbmd0aCkge1xuXHRcdFx0Ly8gdXBkYXRlIHRlbGVtZXRyeSBpbmZvcm1hdGlvbiwgYXMgcGVyIGRhdGEgY29sbGVjdGVkIGVhcmxpZXIsIGJlZm9yZSBzZW5kaW5nIHRvIGJhY2tlbmRcblx0XHRcdHRoaXMudGVsZW1ldHJ5RGF0YVtcIm51bWJlck9mVGltZXNGb3JtYXR0ZXJOb3RDYWxsZWRcIl0gPVxuXHRcdFx0XHR0aGlzLnRlbGVtZXRyeURhdGFbXCJ0b3RhbE51bWJlck9mUmVjb21tZW5kYXRpb25zUmVjZWl2ZWRcIl0gLSB0aGlzLnRlbGVtZXRyeURhdGFbXCJudW1iZXJvZlRpbWVzRm9ybWF0dGVyQ2FsbGVkXCJdO1xuXHRcdH1cblx0XHR2aWV3LmdldENvbnRyb2xsZXIoKS50ZWxlbWV0cnkuc3RvcmVBY3Rpb24oe1xuXHRcdFx0dHlwZTogXCJGRS5SZWNvbW1lbmRhdGlvbnNcIixcblx0XHRcdHBhcmFtZXRlcnM6IHRoaXMudGVsZW1ldHJ5RGF0YVxuXHRcdH0pO1xuXHR9XG5cblx0cHVibGljIGdldERhdGEoKTogUmVjb21tZW5kYXRpb25UZWxlbWV0cnkge1xuXHRcdHJldHVybiB0aGlzLnRlbGVtZXRyeURhdGE7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiB3aWxsIHVwZGF0ZSB0ZWxlbWV0cnkgZGF0YSBiYXNlZCBvbiByZXNwb25zZSB3ZSBnb3QuXG5cdCAqIEBwYXJhbSByZWNvbW1lbmRhdGlvbnMgUmVjb21tZW5kYXRpb25zIG9idGFpbmVkIGZyb20gcmVzcG9uc2UuXG5cdCAqL1xuXHRwdWJsaWMgdXBkYXRlRGF0YUZyb21SZWNvbW1lbmRhdGlvblJlc3BvbnNlKHJlY29tbWVuZGF0aW9uczogU3RhbmRhcmRSZWNvbW1lbmRhdGlvblJlc3BvbnNlW10pOiB2b2lkIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJlY29tbWVuZGF0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgcmVjb21tZW5kYXRpb24gPSByZWNvbW1lbmRhdGlvbnNbaV07XG5cdFx0XHRjb25zdCB0YXJnZXQgPSByZWNvbW1lbmRhdGlvbi5BSVJlY29tbWVuZGVkRmllbGRQYXRoO1xuXHRcdFx0aWYgKCEocmVjb21tZW5kYXRpb24uQUlSZWNvbW1lbmRlZEZpZWxkVmFsdWUgJiYgcmVjb21tZW5kYXRpb24uQUlSZWNvbW1lbmRlZEZpZWxkRGVzY3JpcHRpb24pKSB7XG5cdFx0XHRcdHRoaXMuaW5jcmVhc2VDb3VudChcIm51bWJlck9mVGltZXNOb1BsYWNlaG9sZGVySXNTaG93bk9uVUlcIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAodGFyZ2V0KSB7XG5cdFx0XHRcdGlmIChyZWNvbW1lbmRhdGlvbi5fQUlBbHR2UmVjbWRkRmxkVmFscz8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0dGhpcy5pbmNyZWFzZUNvdW50KFwidG90YWxOdW1iZXJPZlJlY29tbWVuZGF0aW9uc1JlY2VpdmVkXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gd2lsbCB1cGRhdGUgZGF0YSBpbiB0ZWxlbWV0cnkgYXMgcGVyIHRvcC9ub24tdG9wIHJlY29tbWVuZGF0aW9uIHZhbHVlIHdhcyBjaG9zZW4gb3IgaWYgbm9uIHJlY29tbWVuZGVkIHZhbHVlIHdhcyBjaG9zZW4uXG5cdCAqIEBwYXJhbSB2aWV3XG5cdCAqIEBwYXJhbSBmaWVsZFBhdGhcblx0ICogQHBhcmFtIHNlbGVjdGVkVmFsdWVcblx0ICovXG5cdHB1YmxpYyB1cGRhdGVUZWxlbWV0cnlEYXRhQmFzZWRPblVzZXJTZWxlY3Rpb24odmlldzogVmlldywgZmllbGRQYXRoOiBzdHJpbmcsIHNlbGVjdGVkVmFsdWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uc0RhdGEgPSAodmlldz8uZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWwpLmdldFByb3BlcnR5KFwiL3JlY29tbWVuZGF0aW9uc0RhdGFcIikgYXNcblx0XHRcdHwgUmVjb21tZW5kYXRpb25JbmZvXG5cdFx0XHR8IHVuZGVmaW5lZDtcblx0XHRpZiAocmVjb21tZW5kYXRpb25zRGF0YT8uW2ZpZWxkUGF0aF0pIHtcblx0XHRcdGNvbnN0IGZpZWxkUmVjb21tRGF0YSA9IHJlY29tbWVuZGF0aW9uc0RhdGFbZmllbGRQYXRoXTtcblx0XHRcdGNvbnN0IHZhbHVlSW5kZXhJblJlY29tbWVuZGF0aW9ucyA9IGZpZWxkUmVjb21tRGF0YS5hZGRpdGlvbmFsVmFsdWVzPy5maW5kSW5kZXgoXG5cdFx0XHRcdChhZGRpdGlvbmFsVmFsdWUpID0+IGFkZGl0aW9uYWxWYWx1ZS52YWx1ZSA9PT0gc2VsZWN0ZWRWYWx1ZVxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKHNlbGVjdGVkVmFsdWUgPT0gZmllbGRSZWNvbW1EYXRhLnZhbHVlKSB7XG5cdFx0XHRcdC8vIHRvcCByZWNvbW1lbmRhdGlvbiB3YXMgc2VsZWN0ZWQgdGhlbiBzdG9yZSB0aGUgZGF0YSBpbiB0ZWxlbWV0cnlcblx0XHRcdFx0dGhpcy5pbmNyZWFzZUNvdW50KFwibnVtYmVyT2ZUaW1lc1RvcFJlY29tbWVuZGF0aW9uc1NlbGVjdGVkXCIpO1xuXHRcdFx0fSBlbHNlIGlmICh2YWx1ZUluZGV4SW5SZWNvbW1lbmRhdGlvbnMgIT09IC0xKSB7XG5cdFx0XHRcdC8vIHNvbWUgb3RoZXIgcmVjb21tZW5kYXRpb24gd2FzIHNlbGVjdGVkXG5cdFx0XHRcdHRoaXMuaW5jcmVhc2VDb3VudChcIm51bWJlck9mVGltZXNOb25Ub3BSZWNvbW1lbmRhdGlvbnNTZWxlY3RlZFwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHNlbGVjdGVkIHZhbHVlIGlzIG5vdCBmcm9tIHJlY29tbWVuZGF0aW9uc1xuXHRcdFx0XHR0aGlzLmluY3JlYXNlQ291bnQoXCJudW1iZXJPZlRpbWVzTm9uUmVjb21tZW5kZWRWYWx1ZVdhc1NlbGVjdGVkXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuZXhwb3J0IGRlZmF1bHQgVGVsZW1ldHJ5O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O01BTU1BLFNBQVM7SUFHZCxTQUFBQSxVQUFBLEVBQXFCO01BQ3BCLElBQUksQ0FBQ0MsU0FBUyxDQUFDLENBQUM7SUFDakI7SUFBQyxJQUFBQyxNQUFBLEdBQUFGLFNBQUEsQ0FBQUcsU0FBQTtJQUFBRCxNQUFBLENBRU1FLFVBQVUsR0FBakIsU0FBT0EsVUFBVUEsQ0FBQ0MsR0FBa0MsRUFBRUMsS0FBYSxFQUFRO01BQzFFLElBQUksQ0FBQ0MsYUFBYSxDQUFDRixHQUFHLENBQUMsR0FBR0MsS0FBSztJQUNoQyxDQUFDO0lBQUFKLE1BQUEsQ0FFTU0sYUFBYSxHQUFwQixTQUFPQSxhQUFhQSxDQUFDSCxHQUFrQyxFQUFVO01BQ2hFLE9BQU8sRUFBRSxJQUFJ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
@@ -174,10 +174,9 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers
174
174
  */
175
175
  _exports.getDraftOrActiveContext = getDraftOrActiveContext;
176
176
  async function resolvePath(pathToResolve, model, routingService, router) {
177
- var _currentHashNoParams, _currentHashNoParams2, _currentHashNoParams3, _SemanticKeyHelper$ge;
178
177
  const metaModel = model.getMetaModel();
179
178
  let currentHashNoParams = router.getHashChanger().getHash().split("?")[0];
180
- if (((_currentHashNoParams = currentHashNoParams) === null || _currentHashNoParams === void 0 ? void 0 : _currentHashNoParams.lastIndexOf("/")) === ((_currentHashNoParams2 = currentHashNoParams) === null || _currentHashNoParams2 === void 0 ? void 0 : _currentHashNoParams2.length) - 1) {
179
+ if (currentHashNoParams?.lastIndexOf("/") === currentHashNoParams?.length - 1) {
181
180
  // Remove trailing '/'
182
181
  currentHashNoParams = currentHashNoParams.substring(0, currentHashNoParams.length - 1);
183
182
  }
@@ -186,24 +185,24 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers
186
185
  if (!isPathOnDraftRoot(currentHashNoParams, metaModel)) {
187
186
  return pathToResolve;
188
187
  }
189
- let rootEntityName = (_currentHashNoParams3 = currentHashNoParams) === null || _currentHashNoParams3 === void 0 ? void 0 : _currentHashNoParams3.substring(0, currentHashNoParams.indexOf("("));
188
+ let rootEntityName = currentHashNoParams?.substring(0, currentHashNoParams.indexOf("("));
190
189
  if (rootEntityName[0] === "/") {
191
190
  rootEntityName = rootEntityName.substring(1);
192
191
  }
193
- const semanticKeys = (_SemanticKeyHelper$ge = SemanticKeyHelper.getSemanticKeys(metaModel, rootEntityName)) === null || _SemanticKeyHelper$ge === void 0 ? void 0 : _SemanticKeyHelper$ge.map(key => key.$PropertyPath);
192
+ const semanticKeys = SemanticKeyHelper.getSemanticKeys(metaModel, rootEntityName)?.map(key => key.$PropertyPath);
194
193
  if (semanticKeys === undefined) {
195
194
  // If we don't have semantic keys, the path we have is technical and can be used as is.
196
195
  return pathToResolve;
197
196
  }
198
197
  const lastSemanticMapping = routingService.getLastSemanticMapping();
199
- if ((lastSemanticMapping === null || lastSemanticMapping === void 0 ? void 0 : lastSemanticMapping.semanticPath) === pathToResolve) {
198
+ if (lastSemanticMapping?.semanticPath === pathToResolve) {
200
199
  // This semantic path has been resolved previously
201
200
  return lastSemanticMapping.technicalPath;
202
201
  }
203
202
 
204
203
  // We need resolve the semantic path to get the technical keys
205
204
  const context = await getContextFromKeys(semanticKeys, currentHashNoParams, model);
206
- const technicalPath = context === null || context === void 0 ? void 0 : context.getPath();
205
+ const technicalPath = context?.getPath();
207
206
  if (technicalPath && technicalPath !== pathToResolve) {
208
207
  // The semantic path was resolved (otherwise keep the original value for target)
209
208
  routingService.setLastSemanticMapping({
@@ -217,4 +216,4 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers
217
216
  _exports.resolvePath = resolvePath;
218
217
  return _exports;
219
218
  }, false);
220
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc1BhdGhPbkRyYWZ0Um9vdCIsInBhdGgiLCJtZXRhTW9kZWwiLCJtYXRjaGVzIiwiZXhlYyIsImVudGl0eVNldFBhdGgiLCJnZXRPYmplY3QiLCJfZXhwb3J0cyIsImNyZWF0ZUZpbHRlckZyb21QYXRoIiwia2V5cyIsInVucXVvdGVBbmREZWNvZGUiLCJ2YWx1ZSIsImluZGV4T2YiLCJsYXN0SW5kZXhPZiIsImxlbmd0aCIsImRlY29kZVVSSUNvbXBvbmVudCIsInN1YnN0cmluZyIsImtleVZhbHVlcyIsInNwbGl0IiwiZmluYWxLZXlzIiwiZmluYWxLZXlWYWx1ZXMiLCJpbmNsdWRlcyIsImZpbHRlciIsInNpbmdsZUtleSIsImVsZW1lbnQiLCJzdGFydHNXaXRoIiwiZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSIsIk1vZGVsSGVscGVyIiwiaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIiwiZmlsdGVycyIsImtleVBhcnQiLCJrZXlWYWx1ZSIsIkZpbHRlciIsIm9wZXJhdG9yIiwiRmlsdGVyT3BlcmF0b3IiLCJFUSIsInZhbHVlMSIsImNhc2VTZW5zaXRpdmUiLCJtS2V5VmFsdWVzIiwiZm9yRWFjaCIsInNLZXlBc3NpZ25tZW50IiwiYVBhcnRzIiwiZmFpbGVkIiwibWFwIiwic2VtYW50aWNLZXkiLCJrZXkiLCJ1bmRlZmluZWQiLCJkcmFmdEZpbHRlciIsImFuZCIsInB1c2giLCJnZXRDb250ZXh0RnJvbUtleXMiLCJtb2RlbCIsImdldE1ldGFNb2RlbCIsImFic29sdXRlUGF0aCIsIm1ldGFDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJvYmplY3RQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwidGVjaG5pY2FsS2V5cyIsInRhcmdldEVudGl0eVR5cGUiLCJwcm9wZXJ0eSIsIm5hbWUiLCJsaXN0QmluZGluZyIsImJpbmRMaXN0IiwiZ2V0UGF0aCIsIiRzZWxlY3QiLCJqb2luIiwiJCRncm91cElkIiwiY29udGV4dHMiLCJyZXF1ZXN0Q29udGV4dHMiLCJnZXREcmFmdE9yQWN0aXZlQ29udGV4dCIsImNvbnRleHQiLCJnZXRNb2RlbCIsInJlc29sdmVQYXRoIiwicGF0aFRvUmVzb2x2ZSIsInJvdXRpbmdTZXJ2aWNlIiwicm91dGVyIiwiX2N1cnJlbnRIYXNoTm9QYXJhbXMiLCJfY3VycmVudEhhc2hOb1BhcmFtczIiLCJfY3VycmVudEhhc2hOb1BhcmFtczMiLCJfU2VtYW50aWNLZXlIZWxwZXIkZ2UiLCJjdXJyZW50SGFzaE5vUGFyYW1zIiwiZ2V0SGFzaENoYW5nZXIiLCJnZXRIYXNoIiwicm9vdEVudGl0eU5hbWUiLCJzZW1hbnRpY0tleXMiLCJTZW1hbnRpY0tleUhlbHBlciIsImdldFNlbWFudGljS2V5cyIsIiRQcm9wZXJ0eVBhdGgiLCJsYXN0U2VtYW50aWNNYXBwaW5nIiwiZ2V0TGFzdFNlbWFudGljTWFwcGluZyIsInNlbWFudGljUGF0aCIsInRlY2huaWNhbFBhdGgiLCJzZXRMYXN0U2VtYW50aWNNYXBwaW5nIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJDb250ZXh0UGF0aEhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IFNlbWFudGljS2V5SGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1NlbWFudGljS2V5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IFJvdXRpbmdTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1JvdXRpbmdTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgUm91dGVyIGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL1JvdXRlclwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHBhdGggcmVmZXJzIHRvIGEgZHJhZnQgcm9vdCBwYXRoLlxuICogQHBhcmFtIHBhdGggVGhlIHBhdGggdG8gdGVzdFxuICogQHBhcmFtIG1ldGFNb2RlbCBUaGUgYXNzb2NpYXRlZCBtZXRhZGF0YSBtb2RlbFxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBwYXRoIGlzIGEgZHJhZnQgcm9vdCBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdGhPbkRyYWZ0Um9vdChwYXRoOiBzdHJpbmcsIG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiBib29sZWFuIHtcblx0Ly8gQ2hlY2sgaWYgdGhlIHBhdGggZm9sbG93cyB0aGUgcGF0dGVybiAnL2FhYShiYmIpJ1xuXHRjb25zdCBtYXRjaGVzID0gL15bL10/KFxcdyspXFwoW14vXStcXCkkLy5leGVjKHBhdGgpO1xuXHRpZiAoIW1hdGNoZXMpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBDaGVjayBpZiB0aGUgZW50aXR5IHNldCBzdXBwb3J0cyBkcmFmdFxuXHRjb25zdCBlbnRpdHlTZXRQYXRoID0gYC8ke21hdGNoZXNbMV19YDtcblx0cmV0dXJuIG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7ZW50aXR5U2V0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdGApID8gdHJ1ZSA6IGZhbHNlO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGZpbHRlciB0byByZXRyaWV2ZSB0aGUgZHJhZnQgb3IgYWN0aXZlIGluc3RhbmNlIGZyb20gYSBwYXRoLlxuICogQHBhcmFtIHBhdGggVGhlIHNlbWFudGljIG9yIHRlY2huaWNhbCBwYXRoXG4gKiBAcGFyYW0ga2V5cyBUaGUgc2VtYW50aWMgb3IgdGVjaG5pY2FsIGtleXMgZm9yIHRoZSBwYXRoXG4gKiBAcGFyYW0gbWV0YU1vZGVsIFRoZSBpbnN0YW5jZSBvZiB0aGUgbWV0YW1vZGVsXG4gKiBAcmV0dXJucyBUaGUgZmlsdGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGaWx0ZXJGcm9tUGF0aChwYXRoOiBzdHJpbmcsIGtleXM6IHN0cmluZ1tdLCBtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKTogRmlsdGVyIHwgbnVsbCB7XG5cdGNvbnN0IHVucXVvdGVBbmREZWNvZGUgPSBmdW5jdGlvbiAodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0aWYgKHZhbHVlLmluZGV4T2YoXCInXCIpID09PSAwICYmIHZhbHVlLmxhc3RJbmRleE9mKFwiJ1wiKSA9PT0gdmFsdWUubGVuZ3RoIC0gMSkge1xuXHRcdFx0Ly8gUmVtb3ZlIHRoZSBxdW90ZXMgZnJvbSB0aGUgdmFsdWUgYW5kIGRlY29kZSBzcGVjaWFsIGNoYXJzXG5cdFx0XHR2YWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZS5zdWJzdHJpbmcoMSwgdmFsdWUubGVuZ3RoIC0gMSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH07XG5cdGNvbnN0IGtleVZhbHVlcyA9IHBhdGguc3Vic3RyaW5nKHBhdGguaW5kZXhPZihcIihcIikgKyAxLCBwYXRoLmxlbmd0aCAtIDEpLnNwbGl0KFwiLFwiKTtcblxuXHRsZXQgZmluYWxLZXlzID0ga2V5cztcblx0bGV0IGZpbmFsS2V5VmFsdWVzID0ga2V5VmFsdWVzO1xuXHQvLyBJZiB3ZSBoYXZlIHRlY2huaWNhbCBrZXlzLCBJc0FjdGl2ZUVudGl0eSB3aWxsIGJlIHByZXNlbnQuIFdlIG5lZWQgdG8gcmVtb3ZlIGl0IGFzIHdlJ3JlIGFscmVhZHkgYWRkaW5nIHRoZW0gYXQgdGhlIGVuZC5cblx0aWYgKGtleXMuaW5jbHVkZXMoXCJJc0FjdGl2ZUVudGl0eVwiKSkge1xuXHRcdGZpbmFsS2V5cyA9IGtleXMuZmlsdGVyKChzaW5nbGVLZXkpID0+ICFzaW5nbGVLZXkuaW5jbHVkZXMoXCJJc0FjdGl2ZUVudGl0eVwiKSk7XG5cdFx0ZmluYWxLZXlWYWx1ZXMgPSBrZXlWYWx1ZXMuZmlsdGVyKChlbGVtZW50KSA9PiAhZWxlbWVudC5zdGFydHNXaXRoKFwiSXNBY3RpdmVFbnRpdHlcIikpO1xuXHR9XG5cblx0aWYgKGZpbmFsS2V5cy5sZW5ndGggIT0gZmluYWxLZXlWYWx1ZXMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRjb25zdCBmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlID0gTW9kZWxIZWxwZXIuaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKG1ldGFNb2RlbCk7XG5cdGxldCBmaWx0ZXJzOiBGaWx0ZXJbXTtcblx0aWYgKGZpbmFsS2V5cy5sZW5ndGggPT09IDEpIHtcblx0XHQvLyBJZiB0aGlzIGlzIGEgdGVjaG5pY2FsIGtleSwgdGhlIGVxdWFsIGlzIHByZXNlbnQgYmVjYXVzZSB0aGVyZSdzIGF0IGxlYXN0IDIgcGFyYW1ldGVycywgYSB0ZWNobmljYWwga2V5IGFuZCBJc0FjdGl2ZUVudGl0eVxuXHRcdGlmIChmaW5hbEtleVZhbHVlc1swXS5pbmRleE9mKFwiPVwiKSA+IDApIHtcblx0XHRcdGNvbnN0IGtleVBhcnQgPSBmaW5hbEtleVZhbHVlc1swXS5zcGxpdChcIj1cIik7XG5cdFx0XHRmaW5hbEtleVZhbHVlc1swXSA9IGtleVBhcnRbMV07XG5cdFx0fVxuXHRcdC8vIFRha2UgdGhlIGZpcnN0IGtleSB2YWx1ZVxuXHRcdGNvbnN0IGtleVZhbHVlID0gdW5xdW90ZUFuZERlY29kZShmaW5hbEtleVZhbHVlc1swXSk7XG5cdFx0ZmlsdGVycyA9IFtcblx0XHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRwYXRoOiBmaW5hbEtleXNbMF0sXG5cdFx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5FUSxcblx0XHRcdFx0dmFsdWUxOiBrZXlWYWx1ZSxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZVxuXHRcdFx0fSlcblx0XHRdO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IG1LZXlWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0Ly8gQ3JlYXRlIGEgbWFwIG9mIGFsbCBrZXkgdmFsdWVzXG5cdFx0ZmluYWxLZXlWYWx1ZXMuZm9yRWFjaChmdW5jdGlvbiAoc0tleUFzc2lnbm1lbnQ6IHN0cmluZykge1xuXHRcdFx0Y29uc3QgYVBhcnRzID0gc0tleUFzc2lnbm1lbnQuc3BsaXQoXCI9XCIpLFxuXHRcdFx0XHRrZXlWYWx1ZSA9IHVucXVvdGVBbmREZWNvZGUoYVBhcnRzWzFdKTtcblxuXHRcdFx0bUtleVZhbHVlc1thUGFydHNbMF1dID0ga2V5VmFsdWU7XG5cdFx0fSk7XG5cblx0XHRsZXQgZmFpbGVkID0gZmFsc2U7XG5cdFx0ZmlsdGVycyA9IGZpbmFsS2V5cy5tYXAoZnVuY3Rpb24gKHNlbWFudGljS2V5KSB7XG5cdFx0XHRjb25zdCBrZXkgPSBzZW1hbnRpY0tleSxcblx0XHRcdFx0dmFsdWUgPSBtS2V5VmFsdWVzW2tleV07XG5cblx0XHRcdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiBuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRwYXRoOiBrZXksXG5cdFx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLFxuXHRcdFx0XHRcdHZhbHVlMTogdmFsdWUsXG5cdFx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZhaWxlZCA9IHRydWU7XG5cdFx0XHRcdHJldHVybiBuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRwYXRoOiBcIlhYXCJcblx0XHRcdFx0fSk7IC8vIHdpbGwgYmUgaWdub3JlZCBhbnl3YXkgc2luY2Ugd2UgcmV0dXJuIGFmdGVyXG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRpZiAoZmFpbGVkKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdH1cblxuXHQvLyBBZGQgYSBkcmFmdCBmaWx0ZXIgdG8gbWFrZSBzdXJlIHdlIHRha2UgdGhlIGRyYWZ0IGVudGl0eSBpZiB0aGVyZSBpcyBvbmVcblx0Ly8gT3IgdGhlIGFjdGl2ZSBlbnRpdHkgb3RoZXJ3aXNlXG5cdGNvbnN0IGRyYWZ0RmlsdGVyID0gbmV3IEZpbHRlcih7XG5cdFx0ZmlsdGVyczogW25ldyBGaWx0ZXIoXCJJc0FjdGl2ZUVudGl0eVwiLCBcIkVRXCIsIGZhbHNlKSwgbmV3IEZpbHRlcihcIlNpYmxpbmdFbnRpdHkvSXNBY3RpdmVFbnRpdHlcIiwgXCJFUVwiLCBudWxsKV0sXG5cdFx0YW5kOiBmYWxzZVxuXHR9KTtcblx0ZmlsdGVycy5wdXNoKGRyYWZ0RmlsdGVyKTtcblxuXHRyZXR1cm4gbmV3IEZpbHRlcihmaWx0ZXJzLCB0cnVlKTtcbn1cblxuLyoqXG4gKiBMb2FkcyBhIGNvbnRleHQgZnJvbSBhIGxpc3Qgb2Yga2V5cyAoc2VtYW50aWMgb3IgdGVjaG5pY2FsKS5cbiAqIEBwYXJhbSBrZXlzIFRoZSBrZXlzXG4gKiBAcGFyYW0ga2V5VmFsdWVzIFRoZSBrZXkgdmFsdWVzIGluIGEgc3RyaW5nLCBlLmcuIC9lbnRpdHkoYWE9eHgsYmI9eHgsLi4uKVxuICogQHBhcmFtIG1vZGVsXG4gKiBAcmV0dXJucyBUaGUgY29udGV4dCAob3IgbnVsbCBpZiBub25lIGNvdWxkIGJlIGZvdW5kKVxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRDb250ZXh0RnJvbUtleXMoa2V5czogc3RyaW5nW10sIGtleVZhbHVlczogc3RyaW5nLCBtb2RlbDogT0RhdGFNb2RlbCk6IFByb21pc2U8Q29udGV4dCB8IG51bGw+IHtcblx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdGlmICgha2V5cyB8fCBrZXlzLmxlbmd0aCA9PT0gMCkge1xuXHRcdC8vIE5vIHNlbWFudGljL3RlY2huaWNhbCBrZXlzXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBDcmVhdGUgYSBzZXQgb2YgZmlsdGVycyBjb3JyZXNwb25kaW5nIHRvIGFsbCBrZXlzXG5cdGNvbnN0IGZpbHRlciA9IGNyZWF0ZUZpbHRlckZyb21QYXRoKGtleVZhbHVlcywga2V5cywgbWV0YU1vZGVsKTtcblx0aWYgKGZpbHRlciA9PT0gbnVsbCkge1xuXHRcdC8vIENvdWxkbid0IGludGVycHJldCB0aGUgcGF0aCBhcyBhIHNlbWFudGljIG9uZVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gUmV0cmlldmUgdGhlIGVudGl0eSBrZXlzIHRvIGFkZCB0aGVtIGluIHRoZSAkc2VsZWN0IHF1ZXJ5IHBhcmFtZXRlclxuXHRjb25zdCBhYnNvbHV0ZVBhdGggPSBrZXlWYWx1ZXMuc3RhcnRzV2l0aChcIi9cIikgPyBrZXlWYWx1ZXMgOiBgLyR7a2V5VmFsdWVzfWA7XG5cdGNvbnN0IG1ldGFDb250ZXh0ID0gbWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KGFic29sdXRlUGF0aCk7XG5cdGNvbnN0IG9iamVjdFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YUNvbnRleHQpO1xuXHRjb25zdCB0ZWNobmljYWxLZXlzID0gb2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlLmtleXMubWFwKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkubmFtZSk7XG5cblx0Ly8gTG9hZCB0aGUgY29ycmVzcG9uZGluZyBvYmplY3Rcblx0Y29uc3QgbGlzdEJpbmRpbmcgPSBtb2RlbC5iaW5kTGlzdChtZXRhQ29udGV4dC5nZXRQYXRoKCksIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmaWx0ZXIsIHtcblx0XHQkc2VsZWN0OiB0ZWNobmljYWxLZXlzLmpvaW4oXCIsXCIpLFxuXHRcdCQkZ3JvdXBJZDogXCIkYXV0by5IZXJvZXNcIlxuXHR9KTtcblxuXHRjb25zdCBjb250ZXh0cyA9IGF3YWl0IGxpc3RCaW5kaW5nLnJlcXVlc3RDb250ZXh0cygwLCAyKTtcblx0aWYgKGNvbnRleHRzLmxlbmd0aCkge1xuXHRcdHJldHVybiBjb250ZXh0c1swXTtcblx0fSBlbHNlIHtcblx0XHQvLyBObyBkYXRhIGNvdWxkIGJlIGxvYWRlZFxuXHRcdHJldHVybiBudWxsO1xuXHR9XG59XG5cbi8qKlxuICogR2V0IHRoZSBkcmFmdCAoaWYgaXQgZXhpc3RzKSBvciB0aGUgYWN0aXZlIGNvbnRleHQgZm9yIGEgZ2l2ZW4gZHJhZnQtcm9vdCBjb250ZXh0LlxuICogQHBhcmFtIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBkcmFmdCBjb250ZXh0IGlmIHRoZXJlJ3Mgb25lLCB0aGUgYWN0aXZlIGNvbnRleHQgb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXREcmFmdE9yQWN0aXZlQ29udGV4dChjb250ZXh0OiBDb250ZXh0KTogUHJvbWlzZTxDb250ZXh0IHwgbnVsbD4ge1xuXHRjb25zdCBtb2RlbCA9IGNvbnRleHQuZ2V0TW9kZWwoKTtcblx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdGNvbnN0IG9iamVjdFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KGNvbnRleHQuZ2V0UGF0aCgpKSk7XG5cdGNvbnN0IGtleXMgPSBvYmplY3RQYXRoLnRhcmdldEVudGl0eVR5cGUua2V5cy5tYXAoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS5uYW1lKTtcblxuXHRyZXR1cm4gZ2V0Q29udGV4dEZyb21LZXlzKGtleXMsIGNvbnRleHQuZ2V0UGF0aCgpLCBtb2RlbCk7XG59XG5cbi8qKlxuICogVHJhbnNmb3JtcyBhIHBhdGNoIChzZW1hbnRpYyBvciBub3QpIGludG8gYSB0ZWNobmljYWwgcGF0aC5cbiAqIEBwYXJhbSBwYXRoVG9SZXNvbHZlIFRoZSBwYXRoIChzZW1hbnRpYyBvciBub3QpXG4gKiBAcGFyYW0gbW9kZWxcbiAqIEBwYXJhbSByb3V0aW5nU2VydmljZVxuICogQHBhcmFtIHJvdXRlclxuICogQHJldHVybnMgVGhlIHRlY2huaWNhbCBwYXRoIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBhdGhUb1Jlc29sdmVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVQYXRoKFxuXHRwYXRoVG9SZXNvbHZlOiBzdHJpbmcsXG5cdG1vZGVsOiBPRGF0YU1vZGVsLFxuXHRyb3V0aW5nU2VydmljZTogUm91dGluZ1NlcnZpY2UsXG5cdHJvdXRlcjogUm91dGVyXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuXHRjb25zdCBtZXRhTW9kZWwgPSBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0bGV0IGN1cnJlbnRIYXNoTm9QYXJhbXMgPSByb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5nZXRIYXNoKCkuc3BsaXQoXCI/XCIpWzBdO1xuXHRpZiAoY3VycmVudEhhc2hOb1BhcmFtcz8ubGFzdEluZGV4T2YoXCIvXCIpID09PSBjdXJyZW50SGFzaE5vUGFyYW1zPy5sZW5ndGggLSAxKSB7XG5cdFx0Ly8gUmVtb3ZlIHRyYWlsaW5nICcvJ1xuXHRcdGN1cnJlbnRIYXNoTm9QYXJhbXMgPSBjdXJyZW50SGFzaE5vUGFyYW1zLnN1YnN0cmluZygwLCBjdXJyZW50SGFzaE5vUGFyYW1zLmxlbmd0aCAtIDEpO1xuXHR9XG5cblx0Ly8gSWYgdGhlIGFwcCBpcyBkaXNwbGF5aW5nIGEgc3ViLU9QIChvciBiZWxvdyksIHRoZW4gd2UganVzdCByZXR1cm4gdGhlIG9yaWdpbmFsIHBhdGhcblx0aWYgKCFpc1BhdGhPbkRyYWZ0Um9vdChjdXJyZW50SGFzaE5vUGFyYW1zLCBtZXRhTW9kZWwpKSB7XG5cdFx0cmV0dXJuIHBhdGhUb1Jlc29sdmU7XG5cdH1cblxuXHRsZXQgcm9vdEVudGl0eU5hbWUgPSBjdXJyZW50SGFzaE5vUGFyYW1zPy5zdWJzdHJpbmcoMCwgY3VycmVudEhhc2hOb1BhcmFtcy5pbmRleE9mKFwiKFwiKSk7XG5cdGlmIChyb290RW50aXR5TmFtZVswXSA9PT0gXCIvXCIpIHtcblx0XHRyb290RW50aXR5TmFtZSA9IHJvb3RFbnRpdHlOYW1lLnN1YnN0cmluZygxKTtcblx0fVxuXG5cdGNvbnN0IHNlbWFudGljS2V5cyA9IFNlbWFudGljS2V5SGVscGVyLmdldFNlbWFudGljS2V5cyhtZXRhTW9kZWwsIHJvb3RFbnRpdHlOYW1lKT8ubWFwKChrZXkpID0+IGtleS4kUHJvcGVydHlQYXRoKTtcblx0aWYgKHNlbWFudGljS2V5cyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly8gSWYgd2UgZG9uJ3QgaGF2ZSBzZW1hbnRpYyBrZXlzLCB0aGUgcGF0aCB3ZSBoYXZlIGlzIHRlY2huaWNhbCBhbmQgY2FuIGJlIHVzZWQgYXMgaXMuXG5cdFx0cmV0dXJuIHBhdGhUb1Jlc29sdmU7XG5cdH1cblxuXHRjb25zdCBsYXN0U2VtYW50aWNNYXBwaW5nID0gcm91dGluZ1NlcnZpY2UuZ2V0TGFzdFNlbWFudGljTWFwcGluZygpO1xuXG5cdGlmIChsYXN0U2VtYW50aWNNYXBwaW5nPy5zZW1hbnRpY1BhdGggPT09IHBhdGhUb1Jlc29sdmUpIHtcblx0XHQvLyBUaGlzIHNlbWFudGljIHBhdGggaGFzIGJlZW4gcmVzb2x2ZWQgcHJldmlvdXNseVxuXHRcdHJldHVybiBsYXN0U2VtYW50aWNNYXBwaW5nLnRlY2huaWNhbFBhdGg7XG5cdH1cblxuXHQvLyBXZSBuZWVkIHJlc29sdmUgdGhlIHNlbWFudGljIHBhdGggdG8gZ2V0IHRoZSB0ZWNobmljYWwga2V5c1xuXHRjb25zdCBjb250ZXh0ID0gYXdhaXQgZ2V0Q29udGV4dEZyb21LZXlzKHNlbWFudGljS2V5cywgY3VycmVudEhhc2hOb1BhcmFtcywgbW9kZWwpO1xuXHRjb25zdCB0ZWNobmljYWxQYXRoID0gY29udGV4dD8uZ2V0UGF0aCgpO1xuXG5cdGlmICh0ZWNobmljYWxQYXRoICYmIHRlY2huaWNhbFBhdGggIT09IHBhdGhUb1Jlc29sdmUpIHtcblx0XHQvLyBUaGUgc2VtYW50aWMgcGF0aCB3YXMgcmVzb2x2ZWQgKG90aGVyd2lzZSBrZWVwIHRoZSBvcmlnaW5hbCB2YWx1ZSBmb3IgdGFyZ2V0KVxuXHRcdHJvdXRpbmdTZXJ2aWNlLnNldExhc3RTZW1hbnRpY01hcHBpbmcoe1xuXHRcdFx0dGVjaG5pY2FsUGF0aDogdGVjaG5pY2FsUGF0aCxcblx0XHRcdHNlbWFudGljUGF0aDogcGF0aFRvUmVzb2x2ZVxuXHRcdH0pO1xuXHRcdHJldHVybiB0ZWNobmljYWxQYXRoO1xuXHR9XG5cblx0cmV0dXJuIHBhdGhUb1Jlc29sdmU7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztFQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNBLGlCQUFpQkEsQ0FBQ0MsSUFBWSxFQUFFQyxTQUF5QixFQUFXO0lBQ25GO0lBQ0EsTUFBTUMsT0FBTyxHQUFHLHNCQUFzQixDQUFDQyxJQUFJLENBQUNILElBQUksQ0FBQztJQUNqRCxJQUFJLENBQUNFLE9BQU8sRUFBRTtNQUNiLE9BQU8sS0FBSztJQUNiOztJQUVBO0lBQ0EsTUFBTUUsYUFBYSxHQUFHLElBQUlGLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUN0QyxPQUFPRCxTQUFTLENBQUNJLFNBQVMsQ0FBQyxHQUFHRCxhQUFhLDJDQUEyQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUs7RUFDdkc7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFOQUUsUUFBQSxDQUFBUCxpQkFBQSxHQUFBQSxpQkFBQTtFQU9PLFNBQVNRLG9CQUFvQkEsQ0FBQ1AsSUFBWSxFQUFFUSxJQUFj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
219
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc1BhdGhPbkRyYWZ0Um9vdCIsInBhdGgiLCJtZXRhTW9kZWwiLCJtYXRjaGVzIiwiZXhlYyIsImVudGl0eVNldFBhdGgiLCJnZXRPYmplY3QiLCJfZXhwb3J0cyIsImNyZWF0ZUZpbHRlckZyb21QYXRoIiwia2V5cyIsInVucXVvdGVBbmREZWNvZGUiLCJ2YWx1ZSIsImluZGV4T2YiLCJsYXN0SW5kZXhPZiIsImxlbmd0aCIsImRlY29kZVVSSUNvbXBvbmVudCIsInN1YnN0cmluZyIsImtleVZhbHVlcyIsInNwbGl0IiwiZmluYWxLZXlzIiwiZmluYWxLZXlWYWx1ZXMiLCJpbmNsdWRlcyIsImZpbHRlciIsInNpbmdsZUtleSIsImVsZW1lbnQiLCJzdGFydHNXaXRoIiwiZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSIsIk1vZGVsSGVscGVyIiwiaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIiwiZmlsdGVycyIsImtleVBhcnQiLCJrZXlWYWx1ZSIsIkZpbHRlciIsIm9wZXJhdG9yIiwiRmlsdGVyT3BlcmF0b3IiLCJFUSIsInZhbHVlMSIsImNhc2VTZW5zaXRpdmUiLCJtS2V5VmFsdWVzIiwiZm9yRWFjaCIsInNLZXlBc3NpZ25tZW50IiwiYVBhcnRzIiwiZmFpbGVkIiwibWFwIiwic2VtYW50aWNLZXkiLCJrZXkiLCJ1bmRlZmluZWQiLCJkcmFmdEZpbHRlciIsImFuZCIsInB1c2giLCJnZXRDb250ZXh0RnJvbUtleXMiLCJtb2RlbCIsImdldE1ldGFNb2RlbCIsImFic29sdXRlUGF0aCIsIm1ldGFDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJvYmplY3RQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwidGVjaG5pY2FsS2V5cyIsInRhcmdldEVudGl0eVR5cGUiLCJwcm9wZXJ0eSIsIm5hbWUiLCJsaXN0QmluZGluZyIsImJpbmRMaXN0IiwiZ2V0UGF0aCIsIiRzZWxlY3QiLCJqb2luIiwiJCRncm91cElkIiwiY29udGV4dHMiLCJyZXF1ZXN0Q29udGV4dHMiLCJnZXREcmFmdE9yQWN0aXZlQ29udGV4dCIsImNvbnRleHQiLCJnZXRNb2RlbCIsInJlc29sdmVQYXRoIiwicGF0aFRvUmVzb2x2ZSIsInJvdXRpbmdTZXJ2aWNlIiwicm91dGVyIiwiY3VycmVudEhhc2hOb1BhcmFtcyIsImdldEhhc2hDaGFuZ2VyIiwiZ2V0SGFzaCIsInJvb3RFbnRpdHlOYW1lIiwic2VtYW50aWNLZXlzIiwiU2VtYW50aWNLZXlIZWxwZXIiLCJnZXRTZW1hbnRpY0tleXMiLCIkUHJvcGVydHlQYXRoIiwibGFzdFNlbWFudGljTWFwcGluZyIsImdldExhc3RTZW1hbnRpY01hcHBpbmciLCJzZW1hbnRpY1BhdGgiLCJ0ZWNobmljYWxQYXRoIiwic2V0TGFzdFNlbWFudGljTWFwcGluZyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ29udGV4dFBhdGhIZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBTZW1hbnRpY0tleUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TZW1hbnRpY0tleUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBSb3V0aW5nU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Sb3V0aW5nU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIFJvdXRlciBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9Sb3V0ZXJcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCBGaWx0ZXJPcGVyYXRvciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBwYXRoIHJlZmVycyB0byBhIGRyYWZ0IHJvb3QgcGF0aC5cbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIHRlc3RcbiAqIEBwYXJhbSBtZXRhTW9kZWwgVGhlIGFzc29jaWF0ZWQgbWV0YWRhdGEgbW9kZWxcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgcGF0aCBpcyBhIGRyYWZ0IHJvb3QgcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoT25EcmFmdFJvb3QocGF0aDogc3RyaW5nLCBtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKTogYm9vbGVhbiB7XG5cdC8vIENoZWNrIGlmIHRoZSBwYXRoIGZvbGxvd3MgdGhlIHBhdHRlcm4gJy9hYWEoYmJiKSdcblx0Y29uc3QgbWF0Y2hlcyA9IC9eWy9dPyhcXHcrKVxcKFteL10rXFwpJC8uZXhlYyhwYXRoKTtcblx0aWYgKCFtYXRjaGVzKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gQ2hlY2sgaWYgdGhlIGVudGl0eSBzZXQgc3VwcG9ydHMgZHJhZnRcblx0Y29uc3QgZW50aXR5U2V0UGF0aCA9IGAvJHttYXRjaGVzWzFdfWA7XG5cdHJldHVybiBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke2VudGl0eVNldFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RgKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBmaWx0ZXIgdG8gcmV0cmlldmUgdGhlIGRyYWZ0IG9yIGFjdGl2ZSBpbnN0YW5jZSBmcm9tIGEgcGF0aC5cbiAqIEBwYXJhbSBwYXRoIFRoZSBzZW1hbnRpYyBvciB0ZWNobmljYWwgcGF0aFxuICogQHBhcmFtIGtleXMgVGhlIHNlbWFudGljIG9yIHRlY2huaWNhbCBrZXlzIGZvciB0aGUgcGF0aFxuICogQHBhcmFtIG1ldGFNb2RlbCBUaGUgaW5zdGFuY2Ugb2YgdGhlIG1ldGFtb2RlbFxuICogQHJldHVybnMgVGhlIGZpbHRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRmlsdGVyRnJvbVBhdGgocGF0aDogc3RyaW5nLCBrZXlzOiBzdHJpbmdbXSwgbWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IEZpbHRlciB8IG51bGwge1xuXHRjb25zdCB1bnF1b3RlQW5kRGVjb2RlID0gZnVuY3Rpb24gKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGlmICh2YWx1ZS5pbmRleE9mKFwiJ1wiKSA9PT0gMCAmJiB2YWx1ZS5sYXN0SW5kZXhPZihcIidcIikgPT09IHZhbHVlLmxlbmd0aCAtIDEpIHtcblx0XHRcdC8vIFJlbW92ZSB0aGUgcXVvdGVzIGZyb20gdGhlIHZhbHVlIGFuZCBkZWNvZGUgc3BlY2lhbCBjaGFyc1xuXHRcdFx0dmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQodmFsdWUuc3Vic3RyaW5nKDEsIHZhbHVlLmxlbmd0aCAtIDEpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9O1xuXHRjb25zdCBrZXlWYWx1ZXMgPSBwYXRoLnN1YnN0cmluZyhwYXRoLmluZGV4T2YoXCIoXCIpICsgMSwgcGF0aC5sZW5ndGggLSAxKS5zcGxpdChcIixcIik7XG5cblx0bGV0IGZpbmFsS2V5cyA9IGtleXM7XG5cdGxldCBmaW5hbEtleVZhbHVlcyA9IGtleVZhbHVlcztcblx0Ly8gSWYgd2UgaGF2ZSB0ZWNobmljYWwga2V5cywgSXNBY3RpdmVFbnRpdHkgd2lsbCBiZSBwcmVzZW50LiBXZSBuZWVkIHRvIHJlbW92ZSBpdCBhcyB3ZSdyZSBhbHJlYWR5IGFkZGluZyB0aGVtIGF0IHRoZSBlbmQuXG5cdGlmIChrZXlzLmluY2x1ZGVzKFwiSXNBY3RpdmVFbnRpdHlcIikpIHtcblx0XHRmaW5hbEtleXMgPSBrZXlzLmZpbHRlcigoc2luZ2xlS2V5KSA9PiAhc2luZ2xlS2V5LmluY2x1ZGVzKFwiSXNBY3RpdmVFbnRpdHlcIikpO1xuXHRcdGZpbmFsS2V5VmFsdWVzID0ga2V5VmFsdWVzLmZpbHRlcigoZWxlbWVudCkgPT4gIWVsZW1lbnQuc3RhcnRzV2l0aChcIklzQWN0aXZlRW50aXR5XCIpKTtcblx0fVxuXG5cdGlmIChmaW5hbEtleXMubGVuZ3RoICE9IGZpbmFsS2V5VmFsdWVzLmxlbmd0aCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Y29uc3QgZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSA9IE1vZGVsSGVscGVyLmlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShtZXRhTW9kZWwpO1xuXHRsZXQgZmlsdGVyczogRmlsdGVyW107XG5cdGlmIChmaW5hbEtleXMubGVuZ3RoID09PSAxKSB7XG5cdFx0Ly8gSWYgdGhpcyBpcyBhIHRlY2huaWNhbCBrZXksIHRoZSBlcXVhbCBpcyBwcmVzZW50IGJlY2F1c2UgdGhlcmUncyBhdCBsZWFzdCAyIHBhcmFtZXRlcnMsIGEgdGVjaG5pY2FsIGtleSBhbmQgSXNBY3RpdmVFbnRpdHlcblx0XHRpZiAoZmluYWxLZXlWYWx1ZXNbMF0uaW5kZXhPZihcIj1cIikgPiAwKSB7XG5cdFx0XHRjb25zdCBrZXlQYXJ0ID0gZmluYWxLZXlWYWx1ZXNbMF0uc3BsaXQoXCI9XCIpO1xuXHRcdFx0ZmluYWxLZXlWYWx1ZXNbMF0gPSBrZXlQYXJ0WzFdO1xuXHRcdH1cblx0XHQvLyBUYWtlIHRoZSBmaXJzdCBrZXkgdmFsdWVcblx0XHRjb25zdCBrZXlWYWx1ZSA9IHVucXVvdGVBbmREZWNvZGUoZmluYWxLZXlWYWx1ZXNbMF0pO1xuXHRcdGZpbHRlcnMgPSBbXG5cdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0cGF0aDogZmluYWxLZXlzWzBdLFxuXHRcdFx0XHRvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsXG5cdFx0XHRcdHZhbHVlMToga2V5VmFsdWUsXG5cdFx0XHRcdGNhc2VTZW5zaXRpdmU6IGZpbHRlcmluZ0Nhc2VTZW5zaXRpdmVcblx0XHRcdH0pXG5cdFx0XTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBtS2V5VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRcdC8vIENyZWF0ZSBhIG1hcCBvZiBhbGwga2V5IHZhbHVlc1xuXHRcdGZpbmFsS2V5VmFsdWVzLmZvckVhY2goZnVuY3Rpb24gKHNLZXlBc3NpZ25tZW50OiBzdHJpbmcpIHtcblx0XHRcdGNvbnN0IGFQYXJ0cyA9IHNLZXlBc3NpZ25tZW50LnNwbGl0KFwiPVwiKSxcblx0XHRcdFx0a2V5VmFsdWUgPSB1bnF1b3RlQW5kRGVjb2RlKGFQYXJ0c1sxXSk7XG5cblx0XHRcdG1LZXlWYWx1ZXNbYVBhcnRzWzBdXSA9IGtleVZhbHVlO1xuXHRcdH0pO1xuXG5cdFx0bGV0IGZhaWxlZCA9IGZhbHNlO1xuXHRcdGZpbHRlcnMgPSBmaW5hbEtleXMubWFwKGZ1bmN0aW9uIChzZW1hbnRpY0tleSkge1xuXHRcdFx0Y29uc3Qga2V5ID0gc2VtYW50aWNLZXksXG5cdFx0XHRcdHZhbHVlID0gbUtleVZhbHVlc1trZXldO1xuXG5cdFx0XHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gbmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0cGF0aDoga2V5LFxuXHRcdFx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5FUSxcblx0XHRcdFx0XHR2YWx1ZTE6IHZhbHVlLFxuXHRcdFx0XHRcdGNhc2VTZW5zaXRpdmU6IGZpbHRlcmluZ0Nhc2VTZW5zaXRpdmVcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmYWlsZWQgPSB0cnVlO1xuXHRcdFx0XHRyZXR1cm4gbmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0cGF0aDogXCJYWFwiXG5cdFx0XHRcdH0pOyAvLyB3aWxsIGJlIGlnbm9yZWQgYW55d2F5IHNpbmNlIHdlIHJldHVybiBhZnRlclxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0aWYgKGZhaWxlZCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQWRkIGEgZHJhZnQgZmlsdGVyIHRvIG1ha2Ugc3VyZSB3ZSB0YWtlIHRoZSBkcmFmdCBlbnRpdHkgaWYgdGhlcmUgaXMgb25lXG5cdC8vIE9yIHRoZSBhY3RpdmUgZW50aXR5IG90aGVyd2lzZVxuXHRjb25zdCBkcmFmdEZpbHRlciA9IG5ldyBGaWx0ZXIoe1xuXHRcdGZpbHRlcnM6IFtuZXcgRmlsdGVyKFwiSXNBY3RpdmVFbnRpdHlcIiwgXCJFUVwiLCBmYWxzZSksIG5ldyBGaWx0ZXIoXCJTaWJsaW5nRW50aXR5L0lzQWN0aXZlRW50aXR5XCIsIFwiRVFcIiwgbnVsbCldLFxuXHRcdGFuZDogZmFsc2Vcblx0fSk7XG5cdGZpbHRlcnMucHVzaChkcmFmdEZpbHRlcik7XG5cblx0cmV0dXJuIG5ldyBGaWx0ZXIoZmlsdGVycywgdHJ1ZSk7XG59XG5cbi8qKlxuICogTG9hZHMgYSBjb250ZXh0IGZyb20gYSBsaXN0IG9mIGtleXMgKHNlbWFudGljIG9yIHRlY2huaWNhbCkuXG4gKiBAcGFyYW0ga2V5cyBUaGUga2V5c1xuICogQHBhcmFtIGtleVZhbHVlcyBUaGUga2V5IHZhbHVlcyBpbiBhIHN0cmluZywgZS5nLiAvZW50aXR5KGFhPXh4LGJiPXh4LC4uLilcbiAqIEBwYXJhbSBtb2RlbFxuICogQHJldHVybnMgVGhlIGNvbnRleHQgKG9yIG51bGwgaWYgbm9uZSBjb3VsZCBiZSBmb3VuZClcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0Q29udGV4dEZyb21LZXlzKGtleXM6IHN0cmluZ1tdLCBrZXlWYWx1ZXM6IHN0cmluZywgbW9kZWw6IE9EYXRhTW9kZWwpOiBQcm9taXNlPENvbnRleHQgfCBudWxsPiB7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRpZiAoIWtleXMgfHwga2V5cy5sZW5ndGggPT09IDApIHtcblx0XHQvLyBObyBzZW1hbnRpYy90ZWNobmljYWwga2V5c1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gQ3JlYXRlIGEgc2V0IG9mIGZpbHRlcnMgY29ycmVzcG9uZGluZyB0byBhbGwga2V5c1xuXHRjb25zdCBmaWx0ZXIgPSBjcmVhdGVGaWx0ZXJGcm9tUGF0aChrZXlWYWx1ZXMsIGtleXMsIG1ldGFNb2RlbCk7XG5cdGlmIChmaWx0ZXIgPT09IG51bGwpIHtcblx0XHQvLyBDb3VsZG4ndCBpbnRlcnByZXQgdGhlIHBhdGggYXMgYSBzZW1hbnRpYyBvbmVcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIFJldHJpZXZlIHRoZSBlbnRpdHkga2V5cyB0byBhZGQgdGhlbSBpbiB0aGUgJHNlbGVjdCBxdWVyeSBwYXJhbWV0ZXJcblx0Y29uc3QgYWJzb2x1dGVQYXRoID0ga2V5VmFsdWVzLnN0YXJ0c1dpdGgoXCIvXCIpID8ga2V5VmFsdWVzIDogYC8ke2tleVZhbHVlc31gO1xuXHRjb25zdCBtZXRhQ29udGV4dCA9IG1ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChhYnNvbHV0ZVBhdGgpO1xuXHRjb25zdCBvYmplY3RQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFDb250ZXh0KTtcblx0Y29uc3QgdGVjaG5pY2FsS2V5cyA9IG9iamVjdFBhdGgudGFyZ2V0RW50aXR5VHlwZS5rZXlzLm1hcCgocHJvcGVydHkpID0+IHByb3BlcnR5Lm5hbWUpO1xuXG5cdC8vIExvYWQgdGhlIGNvcnJlc3BvbmRpbmcgb2JqZWN0XG5cdGNvbnN0IGxpc3RCaW5kaW5nID0gbW9kZWwuYmluZExpc3QobWV0YUNvbnRleHQuZ2V0UGF0aCgpLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmlsdGVyLCB7XG5cdFx0JHNlbGVjdDogdGVjaG5pY2FsS2V5cy5qb2luKFwiLFwiKSxcblx0XHQkJGdyb3VwSWQ6IFwiJGF1dG8uSGVyb2VzXCJcblx0fSk7XG5cblx0Y29uc3QgY29udGV4dHMgPSBhd2FpdCBsaXN0QmluZGluZy5yZXF1ZXN0Q29udGV4dHMoMCwgMik7XG5cdGlmIChjb250ZXh0cy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gY29udGV4dHNbMF07XG5cdH0gZWxzZSB7XG5cdFx0Ly8gTm8gZGF0YSBjb3VsZCBiZSBsb2FkZWRcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxufVxuXG4vKipcbiAqIEdldCB0aGUgZHJhZnQgKGlmIGl0IGV4aXN0cykgb3IgdGhlIGFjdGl2ZSBjb250ZXh0IGZvciBhIGdpdmVuIGRyYWZ0LXJvb3QgY29udGV4dC5cbiAqIEBwYXJhbSBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgZHJhZnQgY29udGV4dCBpZiB0aGVyZSdzIG9uZSwgdGhlIGFjdGl2ZSBjb250ZXh0IG90aGVyd2lzZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RHJhZnRPckFjdGl2ZUNvbnRleHQoY29udGV4dDogQ29udGV4dCk6IFByb21pc2U8Q29udGV4dCB8IG51bGw+IHtcblx0Y29uc3QgbW9kZWwgPSBjb250ZXh0LmdldE1vZGVsKCk7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRjb25zdCBvYmplY3RQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChjb250ZXh0LmdldFBhdGgoKSkpO1xuXHRjb25zdCBrZXlzID0gb2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlLmtleXMubWFwKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkubmFtZSk7XG5cblx0cmV0dXJuIGdldENvbnRleHRGcm9tS2V5cyhrZXlzLCBjb250ZXh0LmdldFBhdGgoKSwgbW9kZWwpO1xufVxuXG4vKipcbiAqIFRyYW5zZm9ybXMgYSBwYXRjaCAoc2VtYW50aWMgb3Igbm90KSBpbnRvIGEgdGVjaG5pY2FsIHBhdGguXG4gKiBAcGFyYW0gcGF0aFRvUmVzb2x2ZSBUaGUgcGF0aCAoc2VtYW50aWMgb3Igbm90KVxuICogQHBhcmFtIG1vZGVsXG4gKiBAcGFyYW0gcm91dGluZ1NlcnZpY2VcbiAqIEBwYXJhbSByb3V0ZXJcbiAqIEByZXR1cm5zIFRoZSB0ZWNobmljYWwgcGF0aCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXRoVG9SZXNvbHZlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlUGF0aChcblx0cGF0aFRvUmVzb2x2ZTogc3RyaW5nLFxuXHRtb2RlbDogT0RhdGFNb2RlbCxcblx0cm91dGluZ1NlcnZpY2U6IFJvdXRpbmdTZXJ2aWNlLFxuXHRyb3V0ZXI6IFJvdXRlclxuKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdGxldCBjdXJyZW50SGFzaE5vUGFyYW1zID0gcm91dGVyLmdldEhhc2hDaGFuZ2VyKCkuZ2V0SGFzaCgpLnNwbGl0KFwiP1wiKVswXTtcblx0aWYgKGN1cnJlbnRIYXNoTm9QYXJhbXM/Lmxhc3RJbmRleE9mKFwiL1wiKSA9PT0gY3VycmVudEhhc2hOb1BhcmFtcz8ubGVuZ3RoIC0gMSkge1xuXHRcdC8vIFJlbW92ZSB0cmFpbGluZyAnLydcblx0XHRjdXJyZW50SGFzaE5vUGFyYW1zID0gY3VycmVudEhhc2hOb1BhcmFtcy5zdWJzdHJpbmcoMCwgY3VycmVudEhhc2hOb1BhcmFtcy5sZW5ndGggLSAxKTtcblx0fVxuXG5cdC8vIElmIHRoZSBhcHAgaXMgZGlzcGxheWluZyBhIHN1Yi1PUCAob3IgYmVsb3cpLCB0aGVuIHdlIGp1c3QgcmV0dXJuIHRoZSBvcmlnaW5hbCBwYXRoXG5cdGlmICghaXNQYXRoT25EcmFmdFJvb3QoY3VycmVudEhhc2hOb1BhcmFtcywgbWV0YU1vZGVsKSkge1xuXHRcdHJldHVybiBwYXRoVG9SZXNvbHZlO1xuXHR9XG5cblx0bGV0IHJvb3RFbnRpdHlOYW1lID0gY3VycmVudEhhc2hOb1BhcmFtcz8uc3Vic3RyaW5nKDAsIGN1cnJlbnRIYXNoTm9QYXJhbXMuaW5kZXhPZihcIihcIikpO1xuXHRpZiAocm9vdEVudGl0eU5hbWVbMF0gPT09IFwiL1wiKSB7XG5cdFx0cm9vdEVudGl0eU5hbWUgPSByb290RW50aXR5TmFtZS5zdWJzdHJpbmcoMSk7XG5cdH1cblxuXHRjb25zdCBzZW1hbnRpY0tleXMgPSBTZW1hbnRpY0tleUhlbHBlci5nZXRTZW1hbnRpY0tleXMobWV0YU1vZGVsLCByb290RW50aXR5TmFtZSk/Lm1hcCgoa2V5KSA9PiBrZXkuJFByb3BlcnR5UGF0aCk7XG5cdGlmIChzZW1hbnRpY0tleXMgPT09IHVuZGVmaW5lZCkge1xuXHRcdC8vIElmIHdlIGRvbid0IGhhdmUgc2VtYW50aWMga2V5cywgdGhlIHBhdGggd2UgaGF2ZSBpcyB0ZWNobmljYWwgYW5kIGNhbiBiZSB1c2VkIGFzIGlzLlxuXHRcdHJldHVybiBwYXRoVG9SZXNvbHZlO1xuXHR9XG5cblx0Y29uc3QgbGFzdFNlbWFudGljTWFwcGluZyA9IHJvdXRpbmdTZXJ2aWNlLmdldExhc3RTZW1hbnRpY01hcHBpbmcoKTtcblxuXHRpZiAobGFzdFNlbWFudGljTWFwcGluZz8uc2VtYW50aWNQYXRoID09PSBwYXRoVG9SZXNvbHZlKSB7XG5cdFx0Ly8gVGhpcyBzZW1hbnRpYyBwYXRoIGhhcyBiZWVuIHJlc29sdmVkIHByZXZpb3VzbHlcblx0XHRyZXR1cm4gbGFzdFNlbWFudGljTWFwcGluZy50ZWNobmljYWxQYXRoO1xuXHR9XG5cblx0Ly8gV2UgbmVlZCByZXNvbHZlIHRoZSBzZW1hbnRpYyBwYXRoIHRvIGdldCB0aGUgdGVjaG5pY2FsIGtleXNcblx0Y29uc3QgY29udGV4dCA9IGF3YWl0IGdldENvbnRleHRGcm9tS2V5cyhzZW1hbnRpY0tleXMsIGN1cnJlbnRIYXNoTm9QYXJhbXMsIG1vZGVsKTtcblx0Y29uc3QgdGVjaG5pY2FsUGF0aCA9IGNvbnRleHQ/LmdldFBhdGgoKTtcblxuXHRpZiAodGVjaG5pY2FsUGF0aCAmJiB0ZWNobmljYWxQYXRoICE9PSBwYXRoVG9SZXNvbHZlKSB7XG5cdFx0Ly8gVGhlIHNlbWFudGljIHBhdGggd2FzIHJlc29sdmVkIChvdGhlcndpc2Uga2VlcCB0aGUgb3JpZ2luYWwgdmFsdWUgZm9yIHRhcmdldClcblx0XHRyb3V0aW5nU2VydmljZS5zZXRMYXN0U2VtYW50aWNNYXBwaW5nKHtcblx0XHRcdHRlY2huaWNhbFBhdGg6IHRlY2huaWNhbFBhdGgsXG5cdFx0XHRzZW1hbnRpY1BhdGg6IHBhdGhUb1Jlc29sdmVcblx0XHR9KTtcblx0XHRyZXR1cm4gdGVjaG5pY2FsUGF0aDtcblx0fVxuXG5cdHJldHVybiBwYXRoVG9SZXNvbHZlO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7RUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTQSxpQkFBaUJBLENBQUNDLElBQVksRUFBRUMsU0FBeUIsRUFBVztJQUNuRjtJQUNBLE1BQU1DLE9BQU8sR0FBRyxzQkFBc0IsQ0FBQ0MsSUFBSSxDQUFDSCxJQUFJLENBQUM7SUFDakQsSUFBSSxDQUFDRSxPQUFPLEVBQUU7TUFDYixPQUFPLEtBQUs7SUFDYjs7SUFFQTtJQUNBLE1BQU1FLGFBQWEsR0FBRyxJQUFJRixPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDdEMsT0FBT0QsU0FBUyxDQUFDSSxTQUFTLENBQUMsR0FBR0QsYUFBYSwyQ0FBMkMsQ0FBQyxHQUFHLElBQUksR0FBRyxLQUFLO0VBQ3ZHOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTkFFLFFBQUEsQ0FBQVAsaUJBQUEsR0FBQUEsaUJBQUE7RUFPTyxTQUFTUSxvQkFBb0JBLENBQUNQLElBQVksRUFBRVEsSUFBYyxFQUFFUCxTQUF5QixFQUFpQjtJQUM1RyxNQUFNUSxnQkFBZ0IsR0FBRyxTQUFBQSxDQUFVQyxLQUFhLEVBQVU7TUFDekQsSUFBSUEsS0FBSyxDQUFDQyxPQUFPLENB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