@sapui5/sap.fe.core 1.98.0 → 1.99.2

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 (231) hide show
  1. package/package.json +3 -2
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +377 -405
  4. package/src/sap/fe/core/AnnotationHelper.ts +385 -0
  5. package/src/sap/fe/core/AppComponent.js +3 -2
  6. package/src/sap/fe/core/AppStateHandler.js +229 -181
  7. package/src/sap/fe/core/AppStateHandler.ts +171 -0
  8. package/src/sap/fe/core/BaseController.js +3 -2
  9. package/src/sap/fe/core/BusyLocker.js +105 -121
  10. package/src/sap/fe/core/BusyLocker.ts +98 -0
  11. package/src/sap/fe/core/CommonUtils.js +2073 -2399
  12. package/src/sap/fe/core/CommonUtils.ts +2078 -0
  13. package/src/sap/fe/core/ExtensionAPI.js +3 -2
  14. package/src/sap/fe/core/PageController.js +84 -125
  15. package/src/sap/fe/core/PageController.ts +101 -0
  16. package/src/sap/fe/core/RouterProxy.js +986 -823
  17. package/src/sap/fe/core/RouterProxy.ts +838 -0
  18. package/src/sap/fe/core/Synchronization.js +51 -35
  19. package/src/sap/fe/core/Synchronization.ts +29 -0
  20. package/src/sap/fe/core/TemplateComponent.js +173 -164
  21. package/src/sap/fe/core/TemplateComponent.ts +166 -0
  22. package/src/sap/fe/core/TemplateModel.js +97 -54
  23. package/src/sap/fe/core/TemplateModel.ts +64 -0
  24. package/src/sap/fe/core/TransactionHelper.js +1576 -1664
  25. package/src/sap/fe/core/TransactionHelper.ts +1706 -0
  26. package/src/sap/fe/core/actions/draft.js +561 -608
  27. package/src/sap/fe/core/actions/draft.ts +595 -0
  28. package/src/sap/fe/core/actions/messageHandling.js +545 -514
  29. package/src/sap/fe/core/actions/messageHandling.ts +532 -0
  30. package/src/sap/fe/core/actions/nonDraft.js +17 -19
  31. package/src/sap/fe/core/actions/nonDraft.ts +12 -0
  32. package/src/sap/fe/core/actions/operations.js +1074 -1215
  33. package/src/sap/fe/core/actions/operations.ts +1162 -0
  34. package/src/sap/fe/core/actions/sticky.js +102 -105
  35. package/src/sap/fe/core/actions/sticky.ts +102 -0
  36. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +3 -2
  37. package/src/sap/fe/core/controllerextensions/EditFlow.js +170 -392
  38. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +3 -2
  39. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +279 -11
  40. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +8 -6
  41. package/src/sap/fe/core/controllerextensions/InternalRouting.js +52 -47
  42. package/src/sap/fe/core/controllerextensions/KPIManagement.js +2 -3
  43. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +29 -26
  44. package/src/sap/fe/core/controllerextensions/MassEdit.js +101 -8
  45. package/src/sap/fe/core/controllerextensions/MessageHandler.js +17 -8
  46. package/src/sap/fe/core/controllerextensions/PageReady.js +2 -2
  47. package/src/sap/fe/core/controllerextensions/PageReady.ts +12 -8
  48. package/src/sap/fe/core/controllerextensions/Paginator.js +3 -2
  49. package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -2
  50. package/src/sap/fe/core/controllerextensions/Routing.js +9 -4
  51. package/src/sap/fe/core/controllerextensions/RoutingListener.js +3 -2
  52. package/src/sap/fe/core/controllerextensions/Share.js +3 -2
  53. package/src/sap/fe/core/controllerextensions/SideEffects.js +3 -3
  54. package/src/sap/fe/core/controllerextensions/SideEffects.ts +18 -18
  55. package/src/sap/fe/core/controllerextensions/ViewState.js +3 -2
  56. package/src/sap/fe/core/controls/CommandExecution.js +3 -2
  57. package/src/sap/fe/core/controls/ConditionalWrapper.js +3 -2
  58. package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -2
  59. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -2
  60. package/src/sap/fe/core/controls/FieldWrapper.js +11 -22
  61. package/src/sap/fe/core/controls/FilterBar.js +3 -2
  62. package/src/sap/fe/core/controls/FormElementWrapper.js +3 -2
  63. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +3 -2
  64. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +1 -0
  65. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +3 -2
  66. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +5 -4
  67. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -2
  68. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +3 -2
  69. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +3 -2
  70. package/src/sap/fe/core/converters/ConverterContext.js +2 -2
  71. package/src/sap/fe/core/converters/ConverterContext.ts +4 -3
  72. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  73. package/src/sap/fe/core/converters/ManifestSettings.ts +1 -0
  74. package/src/sap/fe/core/converters/ManifestWrapper.js +39 -26
  75. package/src/sap/fe/core/converters/ManifestWrapper.ts +9 -0
  76. package/src/sap/fe/core/converters/MetaModelConverter.js +11 -8
  77. package/src/sap/fe/core/converters/MetaModelConverter.ts +16 -16
  78. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  79. package/src/sap/fe/core/converters/TemplateConverter.ts +2 -2
  80. package/src/sap/fe/core/converters/common/AnnotationConverter.js +17 -13
  81. package/src/sap/fe/core/converters/controls/Common/Action.js +2 -2
  82. package/src/sap/fe/core/converters/controls/Common/Action.ts +2 -2
  83. package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -3
  84. package/src/sap/fe/core/converters/controls/Common/Chart.ts +11 -3
  85. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -3
  86. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +2 -2
  87. package/src/sap/fe/core/converters/controls/Common/Form.js +4 -2
  88. package/src/sap/fe/core/converters/controls/Common/Form.ts +16 -2
  89. package/src/sap/fe/core/converters/controls/Common/Table.js +250 -146
  90. package/src/sap/fe/core/converters/controls/Common/Table.ts +300 -167
  91. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +115 -56
  92. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +120 -74
  93. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +467 -32
  94. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +483 -54
  95. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +6 -6
  96. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +9 -15
  97. package/src/sap/fe/core/converters/helpers/Aggregation.js +13 -5
  98. package/src/sap/fe/core/converters/helpers/Aggregation.ts +20 -5
  99. package/src/sap/fe/core/converters/helpers/IssueManager.js +4 -1
  100. package/src/sap/fe/core/converters/helpers/IssueManager.ts +3 -0
  101. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +4 -4
  102. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +3 -3
  103. package/src/sap/fe/core/converters/templates/ListReportConverter.js +13 -6
  104. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +26 -15
  105. package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -2
  106. package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
  107. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +1 -1
  108. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
  109. package/src/sap/fe/core/formatters/FPMFormatter.ts +4 -10
  110. package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
  111. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -1
  112. package/src/sap/fe/core/formatters/TableFormatter.js +39 -28
  113. package/src/sap/fe/core/formatters/TableFormatter.ts +43 -28
  114. package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
  115. package/src/sap/fe/core/formatters/ValueFormatter.ts +7 -6
  116. package/src/sap/fe/core/fpm/Component.js +3 -2
  117. package/src/sap/fe/core/helpers/AppStartupHelper.js +2 -2
  118. package/src/sap/fe/core/helpers/AppStartupHelper.ts +7 -4
  119. package/src/sap/fe/core/helpers/BindingExpression.js +314 -355
  120. package/src/sap/fe/core/helpers/BindingExpression.ts +317 -391
  121. package/src/sap/fe/core/helpers/ClassSupport.js +27 -15
  122. package/src/sap/fe/core/helpers/ClassSupport.ts +31 -20
  123. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +63 -59
  124. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +56 -0
  125. package/src/sap/fe/core/helpers/EditState.js +81 -84
  126. package/src/sap/fe/core/helpers/EditState.ts +81 -0
  127. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +62 -48
  128. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +49 -0
  129. package/src/sap/fe/core/helpers/FPMHelper.js +52 -56
  130. package/src/sap/fe/core/helpers/FPMHelper.ts +62 -0
  131. package/src/sap/fe/core/helpers/KeepAliveHelper.js +3 -4
  132. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +9 -9
  133. package/src/sap/fe/core/helpers/MassEditHelper.js +27 -18
  134. package/src/sap/fe/core/helpers/ModelHelper.js +229 -225
  135. package/src/sap/fe/core/helpers/ModelHelper.ts +227 -0
  136. package/src/sap/fe/core/helpers/PasteHelper.js +210 -132
  137. package/src/sap/fe/core/helpers/PasteHelper.ts +196 -0
  138. package/src/sap/fe/core/helpers/SemanticDateOperators.js +332 -313
  139. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +330 -0
  140. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +66 -67
  141. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +73 -0
  142. package/src/sap/fe/core/helpers/StableIdHelper.js +4 -7
  143. package/src/sap/fe/core/helpers/StableIdHelper.ts +2 -6
  144. package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
  145. package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -1
  146. package/src/sap/fe/core/library.js +4 -3
  147. package/src/sap/fe/core/library.support.js +3 -2
  148. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  149. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +1 -1
  150. package/src/sap/fe/core/messagebundle.properties +23 -10
  151. package/src/sap/fe/core/messagebundle_ar.properties +9 -0
  152. package/src/sap/fe/core/messagebundle_bg.properties +9 -0
  153. package/src/sap/fe/core/messagebundle_ca.properties +9 -0
  154. package/src/sap/fe/core/messagebundle_cs.properties +10 -1
  155. package/src/sap/fe/core/messagebundle_cy.properties +9 -0
  156. package/src/sap/fe/core/messagebundle_da.properties +9 -0
  157. package/src/sap/fe/core/messagebundle_de.properties +9 -0
  158. package/src/sap/fe/core/messagebundle_el.properties +9 -0
  159. package/src/sap/fe/core/messagebundle_en.properties +9 -0
  160. package/src/sap/fe/core/messagebundle_en_GB.properties +9 -0
  161. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +9 -0
  162. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +9 -0
  163. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +9 -0
  164. package/src/sap/fe/core/messagebundle_es.properties +9 -0
  165. package/src/sap/fe/core/messagebundle_es_MX.properties +9 -0
  166. package/src/sap/fe/core/messagebundle_et.properties +9 -0
  167. package/src/sap/fe/core/messagebundle_fi.properties +9 -0
  168. package/src/sap/fe/core/messagebundle_fr.properties +13 -4
  169. package/src/sap/fe/core/messagebundle_fr_CA.properties +15 -6
  170. package/src/sap/fe/core/messagebundle_hi.properties +15 -6
  171. package/src/sap/fe/core/messagebundle_hr.properties +15 -6
  172. package/src/sap/fe/core/messagebundle_hu.properties +9 -0
  173. package/src/sap/fe/core/messagebundle_id.properties +10 -1
  174. package/src/sap/fe/core/messagebundle_it.properties +9 -0
  175. package/src/sap/fe/core/messagebundle_iw.properties +9 -0
  176. package/src/sap/fe/core/messagebundle_ja.properties +9 -0
  177. package/src/sap/fe/core/messagebundle_kk.properties +15 -6
  178. package/src/sap/fe/core/messagebundle_ko.properties +9 -0
  179. package/src/sap/fe/core/messagebundle_lt.properties +9 -0
  180. package/src/sap/fe/core/messagebundle_lv.properties +15 -6
  181. package/src/sap/fe/core/messagebundle_ms.properties +14 -5
  182. package/src/sap/fe/core/messagebundle_nl.properties +9 -0
  183. package/src/sap/fe/core/messagebundle_no.properties +9 -0
  184. package/src/sap/fe/core/messagebundle_pl.properties +9 -0
  185. package/src/sap/fe/core/messagebundle_pt.properties +9 -0
  186. package/src/sap/fe/core/messagebundle_pt_PT.properties +9 -0
  187. package/src/sap/fe/core/messagebundle_ro.properties +9 -0
  188. package/src/sap/fe/core/messagebundle_ru.properties +9 -0
  189. package/src/sap/fe/core/messagebundle_sh.properties +11 -2
  190. package/src/sap/fe/core/messagebundle_sk.properties +9 -0
  191. package/src/sap/fe/core/messagebundle_sl.properties +15 -6
  192. package/src/sap/fe/core/messagebundle_sv.properties +9 -0
  193. package/src/sap/fe/core/messagebundle_th.properties +9 -0
  194. package/src/sap/fe/core/messagebundle_tr.properties +9 -0
  195. package/src/sap/fe/core/messagebundle_uk.properties +9 -0
  196. package/src/sap/fe/core/messagebundle_vi.properties +9 -0
  197. package/src/sap/fe/core/messagebundle_zh_CN.properties +9 -0
  198. package/src/sap/fe/core/messagebundle_zh_TW.properties +15 -6
  199. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -1
  200. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
  201. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +269 -202
  202. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +212 -0
  203. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
  204. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +7 -6
  205. package/src/sap/fe/core/services/NavigationServiceFactory.js +406 -300
  206. package/src/sap/fe/core/services/NavigationServiceFactory.ts +316 -0
  207. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +149 -81
  208. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +80 -0
  209. package/src/sap/fe/core/services/RoutingServiceFactory.js +987 -899
  210. package/src/sap/fe/core/services/RoutingServiceFactory.ts +898 -0
  211. package/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
  212. package/src/sap/fe/core/services/ShellServicesFactory.ts +15 -10
  213. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +35 -81
  214. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +46 -94
  215. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +461 -487
  216. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +453 -0
  217. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +10 -8
  218. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +8 -0
  219. package/src/sap/fe/core/support/AnnotationIssue.support.js +15 -3
  220. package/src/sap/fe/core/support/AnnotationIssue.support.ts +16 -2
  221. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -2
  222. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +1 -1
  223. package/src/sap/fe/core/templating/FieldControlHelper.js +8 -8
  224. package/src/sap/fe/core/templating/FieldControlHelper.ts +25 -7
  225. package/src/sap/fe/core/templating/FilterHelper.js +138 -72
  226. package/src/sap/fe/core/templating/FilterHelper.ts +139 -71
  227. package/src/sap/fe/core/templating/UIFormatters.js +31 -1
  228. package/src/sap/fe/core/templating/UIFormatters.ts +33 -2
  229. package/src/sap/fe/core/type/Email.js +1 -1
  230. package/src/sap/fe/core/type/Email.ts +4 -6
  231. package/ui5.yaml +0 -3
@@ -86,9 +86,9 @@ T_MESSAGE_BUTTON_SAPFE_MESSAGE_GROUP_GENERAL=\u4E00\u822C
86
86
 
87
87
  T_MESSAGE_GROUP_TITLE_TABLE_DENOMINATOR=\u8868\u683C
88
88
 
89
- T_MESSAGE_GROUP_DESCRIPTION_TABLE_ROW=Row
89
+ T_MESSAGE_GROUP_DESCRIPTION_TABLE_ROW=\u5217
90
90
 
91
- T_MESSAGE_GROUP_DESCRIPTION_TABLE_COLUMN=Column
91
+ T_MESSAGE_GROUP_DESCRIPTION_TABLE_COLUMN=\u6B04
92
92
 
93
93
  T_MESSAGE_BUTTON_SAPFE_MESSAGE_GROUP_LAST_ACTION=\u6700\u5F8C\u52D5\u4F5C
94
94
 
@@ -98,13 +98,13 @@ T_MESSAGE_ITEM_SUBTITLE_INDICATOR_UNKNOWN=\u672A\u77E5
98
98
 
99
99
  T_COLUMN_INDICATOR_IN_TABLE_DEFINITION=\u5DF2\u96B1\u85CF
100
100
 
101
- T_COLUMN_AVAILABLE_DIAGNOSIS_MSGDESC_ERROR=The field causing the error is on the linked page
101
+ T_COLUMN_AVAILABLE_DIAGNOSIS_MSGDESC_ERROR=\u6B04\u4F4D\u6240\u7522\u751F\u7684\u932F\u8AA4\u4F4D\u65BC\u9023\u7D50\u9801\u9762
102
102
 
103
- T_FIELDS_AFFECTED_TITLE=Field Affected
103
+ T_FIELDS_AFFECTED_TITLE=\u5DF2\u5F71\u97FF\u6B04\u4F4D
104
104
 
105
- T_DIAGNOSIS_TITLE=Diagnosis
105
+ T_DIAGNOSIS_TITLE=\u8A3A\u65B7
106
106
 
107
- T_COLUMN_AVAILABLE_DIAGNOSIS_MSGDESC=The underlying field is on the linked page
107
+ T_COLUMN_AVAILABLE_DIAGNOSIS_MSGDESC=\u57FA\u790E\u6B04\u4F4D\u4F4D\u65BC\u9023\u7D50\u9801\u9762
108
108
 
109
109
  T_MESSAGE_ITEM_SUBTITLE=\u5217\uFF1A{0}\u3001\u6B04\uFF1A{1}
110
110
 
@@ -317,3 +317,12 @@ C_KPICARD_ITEMSLIST={0} \u548C {1}
317
317
 
318
318
  XMSG=KPI \u5361\u7247\u4E2D\u7684\u5716\u8868\u6A19\u984C\uFF1A<\u8A08\u91CF> (\u6309 <\u7DAD\u5EA6>)
319
319
  C_KPICARD_CHARTTITLE={0} (\u6309 {1})
320
+
321
+
322
+ C_MASS_EDIT_DIALOG_TITLE=\u5927\u91CF\u7DE8\u8F2F ({0})
323
+
324
+ C_MASS_EDIT_SAVE_BUTTON_TEXT=\u5132\u5B58
325
+
326
+ C_MASS_EDIT_APPLY_BUTTON_TEXT=\u5957\u7528
327
+
328
+ C_MASS_EDIT_CANCEL_BUTTON_TEXT=\u53D6\u6D88
@@ -103,4 +103,4 @@ sap.ui.define(["sap/ui/core/service/ServiceFactory", "sap/ui/core/service/Servic
103
103
 
104
104
  return AsyncComponentServiceFactory;
105
105
  }, false);
106
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkFzeW5jQ29tcG9uZW50U2VydmljZUZhY3RvcnkudHMiXSwibmFtZXMiOlsiQXN5bmNDb21wb25lbnRTZXJ2aWNlIiwiaW5pdFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlc29sdmVGbiIsInJlamVjdEZuIiwib0NvbnRleHQiLCJnZXRDb250ZXh0Iiwib0NvbXBvbmVudCIsInNjb3BlT2JqZWN0Iiwib1NlcnZpY2VzIiwiX2dldE1hbmlmZXN0RW50cnkiLCJhbGwiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwic1NlcnZpY2VLZXkiLCJzdGFydHVwIiwiZmFjdG9yeU5hbWUiLCJtYXAiLCJnZXRTZXJ2aWNlIiwidGhlbiIsIm9TZXJ2aWNlSW5zdGFuY2UiLCJzTWV0aG9kTmFtZSIsInRvVXBwZXJDYXNlIiwic3Vic3RyIiwiaGFzT3duUHJvcGVydHkiLCJwUm9vdENvbnRyb2xMb2FkZWQiLCJvblNlcnZpY2VzU3RhcnRlZCIsImNhdGNoIiwiU2VydmljZSIsIkFzeW5jQ29tcG9uZW50U2VydmljZUZhY3RvcnkiLCJvU2VydmljZUNvbnRleHQiLCJhc3luY0NvbXBvbmVudFNlcnZpY2UiLCJTZXJ2aWNlRmFjdG9yeSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BRU1BLHFCOzs7Ozs7Ozs7Ozs7O2FBSUw7QUFFQSxzQkFBTztBQUFBOztBQUNOLGFBQUtDLFdBQUwsR0FBbUIsSUFBSUMsT0FBSixDQUFZLFVBQUNDLE9BQUQsRUFBVUMsTUFBVixFQUFxQjtBQUNuRCxVQUFBLEtBQUksQ0FBQ0MsU0FBTCxHQUFpQkYsT0FBakI7QUFDQSxVQUFBLEtBQUksQ0FBQ0csUUFBTCxHQUFnQkYsTUFBaEI7QUFDQSxTQUhrQixDQUFuQjtBQUlBLFlBQU1HLFFBQVEsR0FBRyxLQUFLQyxVQUFMLEVBQWpCO0FBQ0EsWUFBTUMsVUFBVSxHQUFHRixRQUFRLENBQUNHLFdBQTVCOztBQUNBLFlBQU1DLFNBQVMsR0FBR0YsVUFBVSxDQUFDRyxpQkFBWCxDQUE2QixtQkFBN0IsRUFBa0QsSUFBbEQsQ0FBbEI7O0FBQ0FWLFFBQUFBLE9BQU8sQ0FBQ1csR0FBUixDQUNDQyxNQUFNLENBQUNDLElBQVAsQ0FBWUosU0FBWixFQUNFSyxNQURGLENBRUUsVUFBQUMsV0FBVztBQUFBLGlCQUNWTixTQUFTLENBQUNNLFdBQUQsQ0FBVCxDQUF1QkMsT0FBdkIsS0FBbUMsU0FBbkMsSUFDQVAsU0FBUyxDQUFDTSxXQUFELENBQVQsQ0FBdUJFLFdBQXZCLEtBQXVDLDRDQUY3QjtBQUFBLFNBRmIsRUFNRUMsR0FORixDQU1NLFVBQUFILFdBQVcsRUFBSTtBQUNuQixpQkFBT1IsVUFBVSxDQUFDWSxVQUFYLENBQXNCSixXQUF0QixFQUFtQ0ssSUFBbkMsQ0FBd0MsVUFBQ0MsZ0JBQUQsRUFBb0M7QUFDbEYsZ0JBQU1DLFdBQVcsZ0JBQVNQLFdBQVcsQ0FBQyxDQUFELENBQVgsQ0FBZVEsV0FBZixFQUFULFNBQXdDUixXQUFXLENBQUNTLE1BQVosQ0FBbUIsQ0FBbkIsQ0FBeEMsQ0FBakI7O0FBQ0EsZ0JBQUksQ0FBQ2pCLFVBQVUsQ0FBQ2tCLGNBQVgsQ0FBMEJILFdBQTFCLENBQUwsRUFBNkM7QUFDNUNmLGNBQUFBLFVBQVUsQ0FBQ2UsV0FBRCxDQUFWLEdBQTBCLFlBQVc7QUFDcEMsdUJBQU9ELGdCQUFQO0FBQ0EsZUFGRDtBQUdBO0FBQ0QsV0FQTSxDQUFQO0FBUUEsU0FmRixDQURELEVBa0JFRCxJQWxCRixDQWtCTyxZQUFNO0FBQ1gsaUJBQU9iLFVBQVUsQ0FBQ21CLGtCQUFYLElBQWlDMUIsT0FBTyxDQUFDQyxPQUFSLEVBQXhDO0FBQ0EsU0FwQkYsRUFxQkVtQixJQXJCRixDQXFCTyxZQUFNO0FBQ1g7QUFDQSxjQUFJYixVQUFVLENBQUNvQixpQkFBZixFQUFrQztBQUNqQ3BCLFlBQUFBLFVBQVUsQ0FBQ29CLGlCQUFYO0FBQ0E7O0FBQ0QsVUFBQSxLQUFJLENBQUN4QixTQUFMLENBQWUsS0FBZjtBQUNBLFNBM0JGLEVBNEJFeUIsS0E1QkYsQ0E0QlEsS0FBS3hCLFFBNUJiO0FBNkJBOzs7O0lBM0NrQ3lCLE87O01BOEM5QkMsNEI7Ozs7Ozs7Ozs7Ozs7YUFDTCx3QkFBZUMsZUFBZixFQUF3RTtBQUN2RSxZQUFNQyxxQkFBcUIsR0FBRyxJQUFJbEMscUJBQUosQ0FBMEJpQyxlQUExQixDQUE5QjtBQUNBLGVBQU9DLHFCQUFxQixDQUFDakMsV0FBN0I7QUFDQTs7OztJQUp5Q2tDLGM7O1NBTzVCSCw0QiIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VydmljZUZhY3RvcnksIFNlcnZpY2UsIFNlcnZpY2VDb250ZXh0IH0gZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2VcIjtcblxudHlwZSBBc3luY0NvbXBvbmVudFNldHRpbmdzID0ge307XG5cbmNsYXNzIEFzeW5jQ29tcG9uZW50U2VydmljZSBleHRlbmRzIFNlcnZpY2U8QXN5bmNDb21wb25lbnRTZXR0aW5ncz4ge1xuXHRyZXNvbHZlRm46IGFueTtcblx0cmVqZWN0Rm46IGFueTtcblx0aW5pdFByb21pc2UhOiBQcm9taXNlPGFueT47XG5cdC8vICE6IG1lYW5zIHRoYXQgd2Uga25vdyBpdCB3aWxsIGJlIGFzc2lnbmVkIGJlZm9yZSB1c2FnZVxuXG5cdGluaXQoKSB7XG5cdFx0dGhpcy5pbml0UHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMucmVzb2x2ZUZuID0gcmVzb2x2ZTtcblx0XHRcdHRoaXMucmVqZWN0Rm4gPSByZWplY3Q7XG5cdFx0fSk7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblx0XHRjb25zdCBvQ29tcG9uZW50ID0gb0NvbnRleHQuc2NvcGVPYmplY3QgYXMgYW55O1xuXHRcdGNvbnN0IG9TZXJ2aWNlcyA9IG9Db21wb25lbnQuX2dldE1hbmlmZXN0RW50cnkoXCIvc2FwLnVpNS9zZXJ2aWNlc1wiLCB0cnVlKTtcblx0XHRQcm9taXNlLmFsbChcblx0XHRcdE9iamVjdC5rZXlzKG9TZXJ2aWNlcylcblx0XHRcdFx0LmZpbHRlcihcblx0XHRcdFx0XHRzU2VydmljZUtleSA9PlxuXHRcdFx0XHRcdFx0b1NlcnZpY2VzW3NTZXJ2aWNlS2V5XS5zdGFydHVwID09PSBcIndhaXRGb3JcIiAmJlxuXHRcdFx0XHRcdFx0b1NlcnZpY2VzW3NTZXJ2aWNlS2V5XS5mYWN0b3J5TmFtZSAhPT0gXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Bc3luY0NvbXBvbmVudFNlcnZpY2VcIlxuXHRcdFx0XHQpXG5cdFx0XHRcdC5tYXAoc1NlcnZpY2VLZXkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBvQ29tcG9uZW50LmdldFNlcnZpY2Uoc1NlcnZpY2VLZXkpLnRoZW4oKG9TZXJ2aWNlSW5zdGFuY2U6IFNlcnZpY2U8YW55PikgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01ldGhvZE5hbWUgPSBgZ2V0JHtzU2VydmljZUtleVswXS50b1VwcGVyQ2FzZSgpfSR7c1NlcnZpY2VLZXkuc3Vic3RyKDEpfWA7XG5cdFx0XHRcdFx0XHRpZiAoIW9Db21wb25lbnQuaGFzT3duUHJvcGVydHkoc01ldGhvZE5hbWUpKSB7XG5cdFx0XHRcdFx0XHRcdG9Db21wb25lbnRbc01ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9TZXJ2aWNlSW5zdGFuY2U7XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pXG5cdFx0KVxuXHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gb0NvbXBvbmVudC5wUm9vdENvbnRyb2xMb2FkZWQgfHwgUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHQvLyBub3RpZml5IHRoZSBjb21wb25lbnRcblx0XHRcdFx0aWYgKG9Db21wb25lbnQub25TZXJ2aWNlc1N0YXJ0ZWQpIHtcblx0XHRcdFx0XHRvQ29tcG9uZW50Lm9uU2VydmljZXNTdGFydGVkKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5yZXNvbHZlRm4odGhpcyk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKHRoaXMucmVqZWN0Rm4pO1xuXHR9XG59XG5cbmNsYXNzIEFzeW5jQ29tcG9uZW50U2VydmljZUZhY3RvcnkgZXh0ZW5kcyBTZXJ2aWNlRmFjdG9yeTxBc3luY0NvbXBvbmVudFNldHRpbmdzPiB7XG5cdGNyZWF0ZUluc3RhbmNlKG9TZXJ2aWNlQ29udGV4dDogU2VydmljZUNvbnRleHQ8QXN5bmNDb21wb25lbnRTZXR0aW5ncz4pIHtcblx0XHRjb25zdCBhc3luY0NvbXBvbmVudFNlcnZpY2UgPSBuZXcgQXN5bmNDb21wb25lbnRTZXJ2aWNlKG9TZXJ2aWNlQ29udGV4dCk7XG5cdFx0cmV0dXJuIGFzeW5jQ29tcG9uZW50U2VydmljZS5pbml0UHJvbWlzZTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBBc3luY0NvbXBvbmVudFNlcnZpY2VGYWN0b3J5O1xuIl19
106
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkFzeW5jQ29tcG9uZW50U2VydmljZUZhY3RvcnkudHMiXSwibmFtZXMiOlsiQXN5bmNDb21wb25lbnRTZXJ2aWNlIiwiaW5pdFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlc29sdmVGbiIsInJlamVjdEZuIiwib0NvbnRleHQiLCJnZXRDb250ZXh0Iiwib0NvbXBvbmVudCIsInNjb3BlT2JqZWN0Iiwib1NlcnZpY2VzIiwiX2dldE1hbmlmZXN0RW50cnkiLCJhbGwiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwic1NlcnZpY2VLZXkiLCJzdGFydHVwIiwiZmFjdG9yeU5hbWUiLCJtYXAiLCJnZXRTZXJ2aWNlIiwidGhlbiIsIm9TZXJ2aWNlSW5zdGFuY2UiLCJzTWV0aG9kTmFtZSIsInRvVXBwZXJDYXNlIiwic3Vic3RyIiwiaGFzT3duUHJvcGVydHkiLCJwUm9vdENvbnRyb2xMb2FkZWQiLCJvblNlcnZpY2VzU3RhcnRlZCIsImNhdGNoIiwiU2VydmljZSIsIkFzeW5jQ29tcG9uZW50U2VydmljZUZhY3RvcnkiLCJvU2VydmljZUNvbnRleHQiLCJhc3luY0NvbXBvbmVudFNlcnZpY2UiLCJTZXJ2aWNlRmFjdG9yeSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BSU1BLHFCOzs7Ozs7Ozs7Ozs7O2FBSUw7QUFFQSxzQkFBTztBQUFBOztBQUNOLGFBQUtDLFdBQUwsR0FBbUIsSUFBSUMsT0FBSixDQUFZLFVBQUNDLE9BQUQsRUFBVUMsTUFBVixFQUFxQjtBQUNuRCxVQUFBLEtBQUksQ0FBQ0MsU0FBTCxHQUFpQkYsT0FBakI7QUFDQSxVQUFBLEtBQUksQ0FBQ0csUUFBTCxHQUFnQkYsTUFBaEI7QUFDQSxTQUhrQixDQUFuQjtBQUlBLFlBQU1HLFFBQVEsR0FBRyxLQUFLQyxVQUFMLEVBQWpCO0FBQ0EsWUFBTUMsVUFBVSxHQUFHRixRQUFRLENBQUNHLFdBQTVCOztBQUNBLFlBQU1DLFNBQVMsR0FBR0YsVUFBVSxDQUFDRyxpQkFBWCxDQUE2QixtQkFBN0IsRUFBa0QsSUFBbEQsQ0FBbEI7O0FBQ0FWLFFBQUFBLE9BQU8sQ0FBQ1csR0FBUixDQUNDQyxNQUFNLENBQUNDLElBQVAsQ0FBWUosU0FBWixFQUNFSyxNQURGLENBRUUsVUFBQUMsV0FBVztBQUFBLGlCQUNWTixTQUFTLENBQUNNLFdBQUQsQ0FBVCxDQUF1QkMsT0FBdkIsS0FBbUMsU0FBbkMsSUFDQVAsU0FBUyxDQUFDTSxXQUFELENBQVQsQ0FBdUJFLFdBQXZCLEtBQXVDLDRDQUY3QjtBQUFBLFNBRmIsRUFNRUMsR0FORixDQU1NLFVBQUFILFdBQVcsRUFBSTtBQUNuQixpQkFBT1IsVUFBVSxDQUFDWSxVQUFYLENBQXNCSixXQUF0QixFQUFtQ0ssSUFBbkMsQ0FBd0MsVUFBQ0MsZ0JBQUQsRUFBb0M7QUFDbEYsZ0JBQU1DLFdBQVcsZ0JBQVNQLFdBQVcsQ0FBQyxDQUFELENBQVgsQ0FBZVEsV0FBZixFQUFULFNBQXdDUixXQUFXLENBQUNTLE1BQVosQ0FBbUIsQ0FBbkIsQ0FBeEMsQ0FBakI7O0FBQ0EsZ0JBQUksQ0FBQ2pCLFVBQVUsQ0FBQ2tCLGNBQVgsQ0FBMEJILFdBQTFCLENBQUwsRUFBNkM7QUFDNUNmLGNBQUFBLFVBQVUsQ0FBQ2UsV0FBRCxDQUFWLEdBQTBCLFlBQVc7QUFDcEMsdUJBQU9ELGdCQUFQO0FBQ0EsZUFGRDtBQUdBO0FBQ0QsV0FQTSxDQUFQO0FBUUEsU0FmRixDQURELEVBa0JFRCxJQWxCRixDQWtCTyxZQUFNO0FBQ1gsaUJBQU9iLFVBQVUsQ0FBQ21CLGtCQUFYLElBQWlDMUIsT0FBTyxDQUFDQyxPQUFSLEVBQXhDO0FBQ0EsU0FwQkYsRUFxQkVtQixJQXJCRixDQXFCTyxZQUFNO0FBQ1g7QUFDQSxjQUFJYixVQUFVLENBQUNvQixpQkFBZixFQUFrQztBQUNqQ3BCLFlBQUFBLFVBQVUsQ0FBQ29CLGlCQUFYO0FBQ0E7O0FBQ0QsVUFBQSxLQUFJLENBQUN4QixTQUFMLENBQWUsS0FBZjtBQUNBLFNBM0JGLEVBNEJFeUIsS0E1QkYsQ0E0QlEsS0FBS3hCLFFBNUJiO0FBNkJBOzs7O0lBM0NrQ3lCLE87O01BOEM5QkMsNEI7Ozs7Ozs7Ozs7Ozs7YUFDTCx3QkFBZUMsZUFBZixFQUF3RTtBQUN2RSxZQUFNQyxxQkFBcUIsR0FBRyxJQUFJbEMscUJBQUosQ0FBMEJpQyxlQUExQixDQUE5QjtBQUNBLGVBQU9DLHFCQUFxQixDQUFDakMsV0FBN0I7QUFDQTs7OztJQUp5Q2tDLGM7O1NBTzVCSCw0QiIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFNlcnZpY2VGYWN0b3J5IGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgU2VydmljZSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlXCI7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlXCI7XG5cbnR5cGUgQXN5bmNDb21wb25lbnRTZXR0aW5ncyA9IHt9O1xuXG5jbGFzcyBBc3luY0NvbXBvbmVudFNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlPEFzeW5jQ29tcG9uZW50U2V0dGluZ3M+IHtcblx0cmVzb2x2ZUZuOiBhbnk7XG5cdHJlamVjdEZuOiBhbnk7XG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxhbnk+O1xuXHQvLyAhOiBtZWFucyB0aGF0IHdlIGtub3cgaXQgd2lsbCBiZSBhc3NpZ25lZCBiZWZvcmUgdXNhZ2VcblxuXHRpbml0KCkge1xuXHRcdHRoaXMuaW5pdFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLnJlc29sdmVGbiA9IHJlc29sdmU7XG5cdFx0XHR0aGlzLnJlamVjdEZuID0gcmVqZWN0O1xuXHRcdH0pO1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cdFx0Y29uc3Qgb0NvbXBvbmVudCA9IG9Db250ZXh0LnNjb3BlT2JqZWN0IGFzIGFueTtcblx0XHRjb25zdCBvU2VydmljZXMgPSBvQ29tcG9uZW50Ll9nZXRNYW5pZmVzdEVudHJ5KFwiL3NhcC51aTUvc2VydmljZXNcIiwgdHJ1ZSk7XG5cdFx0UHJvbWlzZS5hbGwoXG5cdFx0XHRPYmplY3Qua2V5cyhvU2VydmljZXMpXG5cdFx0XHRcdC5maWx0ZXIoXG5cdFx0XHRcdFx0c1NlcnZpY2VLZXkgPT5cblx0XHRcdFx0XHRcdG9TZXJ2aWNlc1tzU2VydmljZUtleV0uc3RhcnR1cCA9PT0gXCJ3YWl0Rm9yXCIgJiZcblx0XHRcdFx0XHRcdG9TZXJ2aWNlc1tzU2VydmljZUtleV0uZmFjdG9yeU5hbWUgIT09IFwic2FwLmZlLmNvcmUuc2VydmljZXMuQXN5bmNDb21wb25lbnRTZXJ2aWNlXCJcblx0XHRcdFx0KVxuXHRcdFx0XHQubWFwKHNTZXJ2aWNlS2V5ID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gb0NvbXBvbmVudC5nZXRTZXJ2aWNlKHNTZXJ2aWNlS2V5KS50aGVuKChvU2VydmljZUluc3RhbmNlOiBTZXJ2aWNlPGFueT4pID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHNNZXRob2ROYW1lID0gYGdldCR7c1NlcnZpY2VLZXlbMF0udG9VcHBlckNhc2UoKX0ke3NTZXJ2aWNlS2V5LnN1YnN0cigxKX1gO1xuXHRcdFx0XHRcdFx0aWYgKCFvQ29tcG9uZW50Lmhhc093blByb3BlcnR5KHNNZXRob2ROYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRvQ29tcG9uZW50W3NNZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBvU2VydmljZUluc3RhbmNlO1xuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KVxuXHRcdClcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIG9Db21wb25lbnQucFJvb3RDb250cm9sTG9hZGVkIHx8IFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0Ly8gbm90aWZpeSB0aGUgY29tcG9uZW50XG5cdFx0XHRcdGlmIChvQ29tcG9uZW50Lm9uU2VydmljZXNTdGFydGVkKSB7XG5cdFx0XHRcdFx0b0NvbXBvbmVudC5vblNlcnZpY2VzU3RhcnRlZCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMucmVzb2x2ZUZuKHRoaXMpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCh0aGlzLnJlamVjdEZuKTtcblx0fVxufVxuXG5jbGFzcyBBc3luY0NvbXBvbmVudFNlcnZpY2VGYWN0b3J5IGV4dGVuZHMgU2VydmljZUZhY3Rvcnk8QXN5bmNDb21wb25lbnRTZXR0aW5ncz4ge1xuXHRjcmVhdGVJbnN0YW5jZShvU2VydmljZUNvbnRleHQ6IFNlcnZpY2VDb250ZXh0PEFzeW5jQ29tcG9uZW50U2V0dGluZ3M+KSB7XG5cdFx0Y29uc3QgYXN5bmNDb21wb25lbnRTZXJ2aWNlID0gbmV3IEFzeW5jQ29tcG9uZW50U2VydmljZShvU2VydmljZUNvbnRleHQpO1xuXHRcdHJldHVybiBhc3luY0NvbXBvbmVudFNlcnZpY2UuaW5pdFByb21pc2U7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXN5bmNDb21wb25lbnRTZXJ2aWNlRmFjdG9yeTtcbiJdfQ==
@@ -1,4 +1,6 @@
1
- import { ServiceFactory, Service, ServiceContext } from "sap/ui/core/service";
1
+ import ServiceFactory from "sap/ui/core/service/ServiceFactory";
2
+ import Service from "sap/ui/core/service/Service";
3
+ import { ServiceContext } from "sap/ui/core/service";
2
4
 
3
5
  type AsyncComponentSettings = {};
4
6
 
@@ -1,204 +1,271 @@
1
1
  /*!
2
- * SAPUI5
3
- * (c) Copyright 2009-2022 SAP SE. All rights reserved.
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(
6
- [
7
- "sap/ui/core/service/Service",
8
- "sap/ui/core/service/ServiceFactory",
9
- "sap/ui/model/resource/ResourceModel",
10
- "sap/ui/core/cache/CacheManager",
11
- "sap/base/strings/hash"
12
- ],
13
- function(Service, ServiceFactory, ResourceModel, CacheManager, hash) {
14
- "use strict";
15
-
16
- function getMetadataETag(sUrl, sETag, mUpdatedMetaModelETags) {
17
- return new Promise(function(resolve, reject) {
18
- // There is an Url in the FE cache, that's not in the MetaModel yet -> we need to check the ETag
19
- jQuery
20
- .ajax(sUrl, { method: "GET" })
21
- .done(function(oResponse, sTextStatus, jqXHR) {
22
- // ETag is not the same -> invalid
23
- // ETag is the same -> valid
24
- // If ETag is available use it, otherwise use Last-Modified
25
- mUpdatedMetaModelETags[sUrl] = jqXHR.getResponseHeader("ETag") || jqXHR.getResponseHeader("Last-Modified");
26
- resolve(sETag === mUpdatedMetaModelETags[sUrl]);
27
- })
28
- .fail(function() {
29
- // Case 2z - Make sure we update the map so that we invalidate the cache
30
- mUpdatedMetaModelETags[sUrl] = "";
31
- resolve(false);
32
- });
33
- });
34
- }
35
-
36
- var CacheHandlerService = Service.extend("sap.fe.core.services.CacheHandlerService", {
37
- initPromise: null,
38
- init: function() {
39
- var that = this;
40
- var oContext = this.getContext();
41
- this.oFactory = oContext.factory;
42
- var mSettings = oContext.settings;
43
- if (!mSettings.metaModel) {
44
- throw new Error("a `metaModel` property is expected when instantiating the CacheHandlerService");
45
- }
46
- this.oMetaModel = mSettings.metaModel;
47
- this.oAppComponent = mSettings.appComponent;
48
- this.oComponent = mSettings.component;
49
- this.initPromise = this.oMetaModel.fetchEntityContainer().then(function() {
50
- return that;
51
- });
52
- this.mCacheNeedsInvalidate = {};
53
- },
54
- exit: function() {
55
- // Deregister global instance
56
- this.oFactory.removeGlobalInstance(this.oMetaModel);
57
- },
58
- validateCacheKey: function(sCacheIdentifier) {
59
- var that = this;
60
- // Keep track if the cache will anyway need to be updated
61
- var bCacheNeedUpdate = true;
62
- return CacheManager.get(sCacheIdentifier)
63
- .then(function(mCacheOutput) {
64
- // We provide a default key so that an xml view cache is written
65
- var mMetaModelETags = that.getETags();
66
- var sUpdatedCacheKey = JSON.stringify(mMetaModelETags);
67
- // Case #1a - No cache, so mCacheOuput is empty, cacheKey = current metamodel ETags
68
- if (mCacheOutput) {
69
- // Case #2 - Cache entry found, check if it's still valid
70
- var mUpdatedMetaModelETags = {};
71
- var mCachedETags = JSON.parse(mCacheOutput.cachedETags);
72
- return Promise.all(
73
- Object.keys(mCachedETags).map(function(sUrl) {
74
- // Check validity of every single Url that's in the FE Cache object
75
- if (mCachedETags[sUrl]) {
76
- if (mMetaModelETags[sUrl]) {
77
- // Case #2a - Same number of ETags in the cache and in the metadata
78
- mUpdatedMetaModelETags[sUrl] = mMetaModelETags[sUrl];
79
- return mCachedETags[sUrl] === mMetaModelETags[sUrl];
80
- } else {
81
- // Case #2b - No ETag in the cache for that URL, cachedETags was enhanced
82
- return getMetadataETag(sUrl, mCachedETags[sUrl], mUpdatedMetaModelETags);
83
- }
84
- } else {
85
- // Case #2z - Last Templating added an URL without ETag
86
- mUpdatedMetaModelETags[sUrl] = mMetaModelETags[sUrl];
87
- return mCachedETags[sUrl] === mMetaModelETags[sUrl];
88
- }
89
- })
90
- ).then(function(aValidETags) {
91
- bCacheNeedUpdate = aValidETags.indexOf(false) >= 0;
92
- // Case #2a - Same number of ETags and all valid -> we return the viewCacheKey
93
- // Case #2b - Different number of ETags and still all valid -> we return the viewCacheKey
94
- // Case #2c - Same number of ETags but different values, main service Etag has changed, use that as cache key
95
- // Case #2d - Different number of ETags but different value, main service Etag or linked service Etag has changed, new ETags should be used as cacheKey
96
- // Case #2z - Cache has an invalid Etag - if there is an Etag provided from MetaModel use it as cacheKey
97
- if (
98
- Object.keys(mUpdatedMetaModelETags).some(function(sUrl) {
99
- return !mUpdatedMetaModelETags[sUrl];
100
- })
101
- ) {
102
- // At least one of the MetaModel URLs doesn't provide an ETag, so no caching
103
- return null;
104
- } else {
105
- return bCacheNeedUpdate ? JSON.stringify(mUpdatedMetaModelETags) : mCacheOutput.viewCacheKey;
106
- }
107
- });
108
- } else if (
109
- Object.keys(mMetaModelETags).some(function(sUrl) {
110
- return !mMetaModelETags[sUrl];
111
- })
112
- ) {
113
- // Check if cache can be used (all the metadata and annotations have to provide at least a ETag or a Last-Modified header)
114
- // Case #1-b - No Cache, mCacheOuput is empty, but metamodel etags cannot be used, so no caching
115
- bCacheNeedUpdate = true;
116
- sUpdatedCacheKey = null;
117
- }
118
- return sUpdatedCacheKey;
119
- })
120
- .catch(function(e) {
121
- // Don't use view cache in case of issues with the LRU cache
122
- bCacheNeedUpdate = true;
123
- return null;
124
- })
125
- .then(function(sCacheKey) {
126
- that.mCacheNeedsInvalidate[sCacheIdentifier] = bCacheNeedUpdate;
127
- return sCacheKey;
128
- });
129
- },
130
- invalidateIfNeeded: function(sCacheKeys, sCacheIdentifier) {
131
- // Check FE cache after XML view is processed completely
132
- var sDataSourceETags = JSON.stringify(this.getETags());
133
- if (this.mCacheNeedsInvalidate[sCacheIdentifier] || (sCacheKeys && sCacheKeys !== sDataSourceETags)) {
134
- // Something in the sources and/or its ETags changed -> update the FE cache
135
- var mCacheKeys = {};
136
- // New ETags that need to be verified, may differ from the one used to generate the view
137
- mCacheKeys.cachedETags = sDataSourceETags;
138
- // Old ETags that are used for the xml view cache as key
139
- mCacheKeys.viewCacheKey = sCacheKeys;
140
- return CacheManager.set(sCacheIdentifier, mCacheKeys);
141
- } else {
142
- return Promise.resolve();
143
- }
144
- },
145
- getETags: function() {
146
- var mMetaModelETags = this.oMetaModel.getETags();
147
- // ETags from UI5 are either a Date or a string, let's rationalize that
148
- Object.keys(mMetaModelETags).forEach(function(sMetaModelKey) {
149
- if (mMetaModelETags[sMetaModelKey] instanceof Date) {
150
- // MetaModel contains a Last-Modified timestamp for the URL
151
- mMetaModelETags[sMetaModelKey] = mMetaModelETags[sMetaModelKey].toISOString();
152
- }
153
- });
154
-
155
- // add also the manifest hash as UI5 only considers the root component hash
156
- var oManifestContent = this.oAppComponent.getManifest();
157
- var sManifestHash = hash(
158
- JSON.stringify({
159
- sapApp: oManifestContent["sap.app"],
160
- viewData: this.oComponent.getViewData()
161
- })
162
- );
163
- mMetaModelETags["manifest"] = sManifestHash;
164
- return mMetaModelETags;
165
- }
166
- });
167
-
168
- return ServiceFactory.extend("sap.fe.core.services.CacheHandlerServiceFactory", {
169
- _oInstanceRegistry: {},
170
- createInstance: function(oServiceContext) {
171
- var sMetaModelId = oServiceContext.settings.metaModel.getId();
172
- if (!this._oInstanceRegistry[sMetaModelId]) {
173
- this._oInstanceRegistry[sMetaModelId] = new CacheHandlerService(
174
- Object.assign(
175
- {
176
- factory: this,
177
- scopeObject: null,
178
- scopeType: "service"
179
- },
180
- oServiceContext
181
- )
182
- );
183
- }
184
- var that = this;
185
- return this._oInstanceRegistry[sMetaModelId].initPromise
186
- .then(function() {
187
- return that._oInstanceRegistry[sMetaModelId];
188
- })
189
- .catch(function(e) {
190
- // In case of error delete the global instance;
191
- that._oInstanceRegistry[sMetaModelId] = null;
192
- throw e;
193
- });
194
- },
195
- getInstance: function(oMetaModel) {
196
- return this._oInstanceRegistry[oMetaModel.getId()];
197
- },
198
- removeGlobalInstance: function(oMetaModel) {
199
- this._oInstanceRegistry[oMetaModel.getId()] = null;
200
- }
201
- });
202
- },
203
- true
204
- );
5
+ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactory", "sap/ui/core/cache/CacheManager", "sap/base/strings/hash", "sap/ui/thirdparty/jquery"], function (Service, ServiceFactory, CacheManager, hash, jQuery) {
6
+ "use strict";
7
+
8
+ var _exports = {};
9
+
10
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
11
+
12
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
13
+
14
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
15
+
16
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
17
+
18
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
19
+
20
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
21
+
22
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
23
+
24
+ function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
25
+
26
+ function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
27
+
28
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
29
+
30
+ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
31
+
32
+ function getMetadataETag(sUrl, sETag, mUpdatedMetaModelETags) {
33
+ return new Promise(function (resolve) {
34
+ // There is an Url in the FE cache, that's not in the MetaModel yet -> we need to check the ETag
35
+ jQuery.ajax(sUrl, {
36
+ method: "GET"
37
+ }).done(function (oResponse, sTextStatus, jqXHR) {
38
+ // ETag is not the same -> invalid
39
+ // ETag is the same -> valid
40
+ // If ETag is available use it, otherwise use Last-Modified
41
+ mUpdatedMetaModelETags[sUrl] = jqXHR.getResponseHeader("ETag") || jqXHR.getResponseHeader("Last-Modified");
42
+ resolve(sETag === mUpdatedMetaModelETags[sUrl]);
43
+ }).fail(function () {
44
+ // Case 2z - Make sure we update the map so that we invalidate the cache
45
+ mUpdatedMetaModelETags[sUrl] = "";
46
+ resolve(false);
47
+ });
48
+ });
49
+ }
50
+
51
+ var CacheHandlerService = /*#__PURE__*/function (_Service) {
52
+ _inherits(CacheHandlerService, _Service);
53
+
54
+ var _super = _createSuper(CacheHandlerService);
55
+
56
+ function CacheHandlerService() {
57
+ _classCallCheck(this, CacheHandlerService);
58
+
59
+ return _super.apply(this, arguments);
60
+ }
61
+
62
+ _exports.CacheHandlerService = CacheHandlerService;
63
+
64
+ _createClass(CacheHandlerService, [{
65
+ key: "init",
66
+ value: function init() {
67
+ var _this = this;
68
+
69
+ var oContext = this.getContext();
70
+ this.oFactory = oContext.factory;
71
+ var mSettings = oContext.settings;
72
+
73
+ if (!mSettings.metaModel) {
74
+ throw new Error("a `metaModel` property is expected when instantiating the CacheHandlerService");
75
+ }
76
+
77
+ this.oMetaModel = mSettings.metaModel;
78
+ this.oAppComponent = mSettings.appComponent;
79
+ this.oComponent = mSettings.component;
80
+ this.initPromise = this.oMetaModel.fetchEntityContainer().then(function () {
81
+ return _this;
82
+ });
83
+ this.mCacheNeedsInvalidate = {};
84
+ }
85
+ }, {
86
+ key: "exit",
87
+ value: function exit() {
88
+ // Deregister global instance
89
+ this.oFactory.removeGlobalInstance(this.oMetaModel);
90
+ }
91
+ }, {
92
+ key: "validateCacheKey",
93
+ value: function validateCacheKey(sCacheIdentifier) {
94
+ var _this2 = this;
95
+
96
+ // Keep track if the cache will anyway need to be updated
97
+ var bCacheNeedUpdate = true;
98
+ return CacheManager.get(sCacheIdentifier).then(function (mCacheOutput) {
99
+ // We provide a default key so that an xml view cache is written
100
+ var mMetaModelETags = _this2.getETags();
101
+
102
+ var sUpdatedCacheKey = JSON.stringify(mMetaModelETags); // Case #1a - No cache, so mCacheOuput is empty, cacheKey = current metamodel ETags
103
+
104
+ if (mCacheOutput) {
105
+ // Case #2 - Cache entry found, check if it's still valid
106
+ var mUpdatedMetaModelETags = {};
107
+ var mCachedETags = JSON.parse(mCacheOutput.cachedETags);
108
+ return Promise.all(Object.keys(mCachedETags).map(function (sUrl) {
109
+ // Check validity of every single Url that's in the FE Cache object
110
+ if (mCachedETags[sUrl]) {
111
+ if (mMetaModelETags[sUrl]) {
112
+ // Case #2a - Same number of ETags in the cache and in the metadata
113
+ mUpdatedMetaModelETags[sUrl] = mMetaModelETags[sUrl];
114
+ return mCachedETags[sUrl] === mMetaModelETags[sUrl];
115
+ } else {
116
+ // Case #2b - No ETag in the cache for that URL, cachedETags was enhanced
117
+ return getMetadataETag(sUrl, mCachedETags[sUrl], mUpdatedMetaModelETags);
118
+ }
119
+ } else {
120
+ // Case #2z - Last Templating added an URL without ETag
121
+ mUpdatedMetaModelETags[sUrl] = mMetaModelETags[sUrl];
122
+ return mCachedETags[sUrl] === mMetaModelETags[sUrl];
123
+ }
124
+ })).then(function (aValidETags) {
125
+ bCacheNeedUpdate = aValidETags.indexOf(false) >= 0; // Case #2a - Same number of ETags and all valid -> we return the viewCacheKey
126
+ // Case #2b - Different number of ETags and still all valid -> we return the viewCacheKey
127
+ // Case #2c - Same number of ETags but different values, main service Etag has changed, use that as cache key
128
+ // Case #2d - Different number of ETags but different value, main service Etag or linked service Etag has changed, new ETags should be used as cacheKey
129
+ // Case #2z - Cache has an invalid Etag - if there is an Etag provided from MetaModel use it as cacheKey
130
+
131
+ if (Object.keys(mUpdatedMetaModelETags).some(function (sUrl) {
132
+ return !mUpdatedMetaModelETags[sUrl];
133
+ })) {
134
+ // At least one of the MetaModel URLs doesn't provide an ETag, so no caching
135
+ return null;
136
+ } else {
137
+ return bCacheNeedUpdate ? JSON.stringify(mUpdatedMetaModelETags) : mCacheOutput.viewCacheKey;
138
+ }
139
+ });
140
+ } else if (Object.keys(mMetaModelETags).some(function (sUrl) {
141
+ return !mMetaModelETags[sUrl];
142
+ })) {
143
+ // Check if cache can be used (all the metadata and annotations have to provide at least a ETag or a Last-Modified header)
144
+ // Case #1-b - No Cache, mCacheOuput is empty, but metamodel etags cannot be used, so no caching
145
+ bCacheNeedUpdate = true;
146
+ sUpdatedCacheKey = null;
147
+ }
148
+
149
+ return sUpdatedCacheKey;
150
+ }).catch(function () {
151
+ // Don't use view cache in case of issues with the LRU cache
152
+ bCacheNeedUpdate = true;
153
+ return null;
154
+ }).then(function (sCacheKey) {
155
+ _this2.mCacheNeedsInvalidate[sCacheIdentifier] = bCacheNeedUpdate;
156
+ return sCacheKey;
157
+ });
158
+ }
159
+ }, {
160
+ key: "invalidateIfNeeded",
161
+ value: function invalidateIfNeeded(sCacheKeys, sCacheIdentifier) {
162
+ // Check FE cache after XML view is processed completely
163
+ var sDataSourceETags = JSON.stringify(this.getETags());
164
+
165
+ if (this.mCacheNeedsInvalidate[sCacheIdentifier] || sCacheKeys && sCacheKeys !== sDataSourceETags) {
166
+ // Something in the sources and/or its ETags changed -> update the FE cache
167
+ var mCacheKeys = {}; // New ETags that need to be verified, may differ from the one used to generate the view
168
+
169
+ mCacheKeys.cachedETags = sDataSourceETags; // Old ETags that are used for the xml view cache as key
170
+
171
+ mCacheKeys.viewCacheKey = sCacheKeys;
172
+ return CacheManager.set(sCacheIdentifier, mCacheKeys);
173
+ } else {
174
+ return Promise.resolve();
175
+ }
176
+ }
177
+ }, {
178
+ key: "getETags",
179
+ value: function getETags() {
180
+ var mMetaModelETags = this.oMetaModel.getETags(); // ETags from UI5 are either a Date or a string, let's rationalize that
181
+
182
+ Object.keys(mMetaModelETags).forEach(function (sMetaModelKey) {
183
+ if (mMetaModelETags[sMetaModelKey] instanceof Date) {
184
+ // MetaModel contains a Last-Modified timestamp for the URL
185
+ mMetaModelETags[sMetaModelKey] = mMetaModelETags[sMetaModelKey].toISOString();
186
+ }
187
+ }); // add also the manifest hash as UI5 only considers the root component hash
188
+
189
+ var oManifestContent = this.oAppComponent.getManifest();
190
+ var sManifestHash = hash(JSON.stringify({
191
+ sapApp: oManifestContent["sap.app"],
192
+ viewData: this.oComponent.getViewData()
193
+ }));
194
+ mMetaModelETags["manifest"] = sManifestHash;
195
+ return mMetaModelETags;
196
+ }
197
+ }, {
198
+ key: "getInterface",
199
+ value: function getInterface() {
200
+ return this;
201
+ }
202
+ }]);
203
+
204
+ return CacheHandlerService;
205
+ }(Service);
206
+
207
+ _exports.CacheHandlerService = CacheHandlerService;
208
+
209
+ var CacheHandlerServiceFactory = /*#__PURE__*/function (_ServiceFactory) {
210
+ _inherits(CacheHandlerServiceFactory, _ServiceFactory);
211
+
212
+ var _super2 = _createSuper(CacheHandlerServiceFactory);
213
+
214
+ function CacheHandlerServiceFactory() {
215
+ var _this3;
216
+
217
+ _classCallCheck(this, CacheHandlerServiceFactory);
218
+
219
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
220
+ args[_key] = arguments[_key];
221
+ }
222
+
223
+ _this3 = _super2.call.apply(_super2, [this].concat(args));
224
+
225
+ _defineProperty(_assertThisInitialized(_this3), "_oInstanceRegistry", {});
226
+
227
+ return _this3;
228
+ }
229
+
230
+ _createClass(CacheHandlerServiceFactory, [{
231
+ key: "createInstance",
232
+ value: function createInstance(oServiceContext) {
233
+ var _this4 = this;
234
+
235
+ var sMetaModelId = oServiceContext.settings.metaModel.getId();
236
+ var cacheHandlerInstance = this._oInstanceRegistry[sMetaModelId];
237
+
238
+ if (!cacheHandlerInstance) {
239
+ this._oInstanceRegistry[sMetaModelId] = cacheHandlerInstance = new CacheHandlerService(Object.assign({
240
+ factory: this,
241
+ scopeObject: null,
242
+ scopeType: "service"
243
+ }, oServiceContext));
244
+ }
245
+
246
+ return cacheHandlerInstance.initPromise.then(function () {
247
+ return _this4._oInstanceRegistry[sMetaModelId];
248
+ }).catch(function (e) {
249
+ // In case of error delete the global instance;
250
+ _this4._oInstanceRegistry[sMetaModelId] = null;
251
+ throw e;
252
+ });
253
+ }
254
+ }, {
255
+ key: "getInstance",
256
+ value: function getInstance(oMetaModel) {
257
+ return this._oInstanceRegistry[oMetaModel.getId()];
258
+ }
259
+ }, {
260
+ key: "removeGlobalInstance",
261
+ value: function removeGlobalInstance(oMetaModel) {
262
+ this._oInstanceRegistry[oMetaModel.getId()] = null;
263
+ }
264
+ }]);
265
+
266
+ return CacheHandlerServiceFactory;
267
+ }(ServiceFactory);
268
+
269
+ return CacheHandlerServiceFactory;
270
+ }, false);
271
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNhY2hlSGFuZGxlclNlcnZpY2VGYWN0b3J5LnRzIl0sIm5hbWVzIjpbImdldE1ldGFkYXRhRVRhZyIsInNVcmwiLCJzRVRhZyIsIm1VcGRhdGVkTWV0YU1vZGVsRVRhZ3MiLCJQcm9taXNlIiwicmVzb2x2ZSIsImpRdWVyeSIsImFqYXgiLCJtZXRob2QiLCJkb25lIiwib1Jlc3BvbnNlIiwic1RleHRTdGF0dXMiLCJqcVhIUiIsImdldFJlc3BvbnNlSGVhZGVyIiwiZmFpbCIsIkNhY2hlSGFuZGxlclNlcnZpY2UiLCJvQ29udGV4dCIsImdldENvbnRleHQiLCJvRmFjdG9yeSIsImZhY3RvcnkiLCJtU2V0dGluZ3MiLCJzZXR0aW5ncyIsIm1ldGFNb2RlbCIsIkVycm9yIiwib01ldGFNb2RlbCIsIm9BcHBDb21wb25lbnQiLCJhcHBDb21wb25lbnQiLCJvQ29tcG9uZW50IiwiY29tcG9uZW50IiwiaW5pdFByb21pc2UiLCJmZXRjaEVudGl0eUNvbnRhaW5lciIsInRoZW4iLCJtQ2FjaGVOZWVkc0ludmFsaWRhdGUiLCJyZW1vdmVHbG9iYWxJbnN0YW5jZSIsInNDYWNoZUlkZW50aWZpZXIiLCJiQ2FjaGVOZWVkVXBkYXRlIiwiQ2FjaGVNYW5hZ2VyIiwiZ2V0IiwibUNhY2hlT3V0cHV0IiwibU1ldGFNb2RlbEVUYWdzIiwiZ2V0RVRhZ3MiLCJzVXBkYXRlZENhY2hlS2V5IiwiSlNPTiIsInN0cmluZ2lmeSIsIm1DYWNoZWRFVGFncyIsInBhcnNlIiwiY2FjaGVkRVRhZ3MiLCJhbGwiLCJPYmplY3QiLCJrZXlzIiwibWFwIiwiYVZhbGlkRVRhZ3MiLCJpbmRleE9mIiwic29tZSIsInZpZXdDYWNoZUtleSIsImNhdGNoIiwic0NhY2hlS2V5Iiwic0NhY2hlS2V5cyIsInNEYXRhU291cmNlRVRhZ3MiLCJtQ2FjaGVLZXlzIiwic2V0IiwiZm9yRWFjaCIsInNNZXRhTW9kZWxLZXkiLCJEYXRlIiwidG9JU09TdHJpbmciLCJvTWFuaWZlc3RDb250ZW50IiwiZ2V0TWFuaWZlc3QiLCJzTWFuaWZlc3RIYXNoIiwiaGFzaCIsInNhcEFwcCIsInZpZXdEYXRhIiwiZ2V0Vmlld0RhdGEiLCJTZXJ2aWNlIiwiQ2FjaGVIYW5kbGVyU2VydmljZUZhY3RvcnkiLCJvU2VydmljZUNvbnRleHQiLCJzTWV0YU1vZGVsSWQiLCJnZXRJZCIsImNhY2hlSGFuZGxlckluc3RhbmNlIiwiX29JbnN0YW5jZVJlZ2lzdHJ5IiwiYXNzaWduIiwic2NvcGVPYmplY3QiLCJzY29wZVR5cGUiLCJlIiwiU2VydmljZUZhY3RvcnkiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRQSxXQUFTQSxlQUFULENBQXlCQyxJQUF6QixFQUFvQ0MsS0FBcEMsRUFBZ0RDLHNCQUFoRCxFQUE2RTtBQUM1RSxXQUFPLElBQUlDLE9BQUosQ0FBWSxVQUFTQyxPQUFULEVBQWtCO0FBQ3BDO0FBQ0NDLE1BQUFBLE1BQUQsQ0FDRUMsSUFERixDQUNPTixJQURQLEVBQ2E7QUFBRU8sUUFBQUEsTUFBTSxFQUFFO0FBQVYsT0FEYixFQUVFQyxJQUZGLENBRU8sVUFBU0MsU0FBVCxFQUF5QkMsV0FBekIsRUFBMkNDLEtBQTNDLEVBQXVEO0FBQzVEO0FBQ0E7QUFDQTtBQUNBVCxRQUFBQSxzQkFBc0IsQ0FBQ0YsSUFBRCxDQUF0QixHQUErQlcsS0FBSyxDQUFDQyxpQkFBTixDQUF3QixNQUF4QixLQUFtQ0QsS0FBSyxDQUFDQyxpQkFBTixDQUF3QixlQUF4QixDQUFsRTtBQUNBUixRQUFBQSxPQUFPLENBQUNILEtBQUssS0FBS0Msc0JBQXNCLENBQUNGLElBQUQsQ0FBakMsQ0FBUDtBQUNBLE9BUkYsRUFTRWEsSUFURixDQVNPLFlBQVc7QUFDaEI7QUFDQVgsUUFBQUEsc0JBQXNCLENBQUNGLElBQUQsQ0FBdEIsR0FBK0IsRUFBL0I7QUFDQUksUUFBQUEsT0FBTyxDQUFDLEtBQUQsQ0FBUDtBQUNBLE9BYkY7QUFjQSxLQWhCTSxDQUFQO0FBaUJBOztNQUtZVSxt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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU2VydmljZSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlXCI7XG5pbXBvcnQgU2VydmljZUZhY3RvcnkgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBDYWNoZU1hbmFnZXIgZnJvbSBcInNhcC91aS9jb3JlL2NhY2hlL0NhY2hlTWFuYWdlclwiO1xuaW1wb3J0IGhhc2ggZnJvbSBcInNhcC9iYXNlL3N0cmluZ3MvaGFzaFwiO1xuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZVwiO1xuaW1wb3J0IGpRdWVyeSBmcm9tIFwic2FwL3VpL3RoaXJkcGFydHkvanF1ZXJ5XCI7XG5pbXBvcnQgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHsgQXBwQ29tcG9uZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlXCI7XG5pbXBvcnQgVUlDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL1VJQ29tcG9uZW50XCI7XG5cbmZ1bmN0aW9uIGdldE1ldGFkYXRhRVRhZyhzVXJsOiBhbnksIHNFVGFnOiBhbnksIG1VcGRhdGVkTWV0YU1vZGVsRVRhZ3M6IGFueSkge1xuXHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuXHRcdC8vIFRoZXJlIGlzIGFuIFVybCBpbiB0aGUgRkUgY2FjaGUsIHRoYXQncyBub3QgaW4gdGhlIE1ldGFNb2RlbCB5ZXQgLT4gd2UgbmVlZCB0byBjaGVjayB0aGUgRVRhZ1xuXHRcdChqUXVlcnkgYXMgYW55KVxuXHRcdFx0LmFqYXgoc1VybCwgeyBtZXRob2Q6IFwiR0VUXCIgfSlcblx0XHRcdC5kb25lKGZ1bmN0aW9uKG9SZXNwb25zZTogYW55LCBzVGV4dFN0YXR1czogYW55LCBqcVhIUjogYW55KSB7XG5cdFx0XHRcdC8vIEVUYWcgaXMgbm90IHRoZSBzYW1lIC0+IGludmFsaWRcblx0XHRcdFx0Ly8gRVRhZyBpcyB0aGUgc2FtZSAtPiB2YWxpZFxuXHRcdFx0XHQvLyBJZiBFVGFnIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSB1c2UgTGFzdC1Nb2RpZmllZFxuXHRcdFx0XHRtVXBkYXRlZE1ldGFNb2RlbEVUYWdzW3NVcmxdID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoXCJFVGFnXCIpIHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKFwiTGFzdC1Nb2RpZmllZFwiKTtcblx0XHRcdFx0cmVzb2x2ZShzRVRhZyA9PT0gbVVwZGF0ZWRNZXRhTW9kZWxFVGFnc1tzVXJsXSk7XG5cdFx0XHR9KVxuXHRcdFx0LmZhaWwoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdC8vIENhc2UgMnogLSBNYWtlIHN1cmUgd2UgdXBkYXRlIHRoZSBtYXAgc28gdGhhdCB3ZSBpbnZhbGlkYXRlIHRoZSBjYWNoZVxuXHRcdFx0XHRtVXBkYXRlZE1ldGFNb2RlbEVUYWdzW3NVcmxdID0gXCJcIjtcblx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHR9KTtcblx0fSk7XG59XG50eXBlIENhY2hlSGFuZGxlclNlcnZpY2VTZXR0aW5ncyA9IHtcblx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbDtcbn07XG5cbmV4cG9ydCBjbGFzcyBDYWNoZUhhbmRsZXJTZXJ2aWNlIGV4dGVuZHMgU2VydmljZTxDYWNoZUhhbmRsZXJTZXJ2aWNlU2V0dGluZ3M+IHtcblx0cmVzb2x2ZUZuOiBhbnk7XG5cdHJlamVjdEZuOiBhbnk7XG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxhbnk+O1xuXG5cdG9GYWN0b3J5ITogQ2FjaGVIYW5kbGVyU2VydmljZUZhY3Rvcnk7XG5cdG9NZXRhTW9kZWwhOiBPRGF0YU1ldGFNb2RlbDtcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50O1xuXHRvQ29tcG9uZW50ITogVUlDb21wb25lbnQ7XG5cdG1DYWNoZU5lZWRzSW52YWxpZGF0ZTogYW55O1xuXG5cdGluaXQoKSB7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblx0XHR0aGlzLm9GYWN0b3J5ID0gb0NvbnRleHQuZmFjdG9yeTtcblx0XHRjb25zdCBtU2V0dGluZ3MgPSBvQ29udGV4dC5zZXR0aW5ncztcblx0XHRpZiAoIW1TZXR0aW5ncy5tZXRhTW9kZWwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImEgYG1ldGFNb2RlbGAgcHJvcGVydHkgaXMgZXhwZWN0ZWQgd2hlbiBpbnN0YW50aWF0aW5nIHRoZSBDYWNoZUhhbmRsZXJTZXJ2aWNlXCIpO1xuXHRcdH1cblx0XHR0aGlzLm9NZXRhTW9kZWwgPSBtU2V0dGluZ3MubWV0YU1vZGVsO1xuXHRcdHRoaXMub0FwcENvbXBvbmVudCA9IG1TZXR0aW5ncy5hcHBDb21wb25lbnQ7XG5cdFx0dGhpcy5vQ29tcG9uZW50ID0gbVNldHRpbmdzLmNvbXBvbmVudDtcblx0XHR0aGlzLmluaXRQcm9taXNlID0gdGhpcy5vTWV0YU1vZGVsLmZldGNoRW50aXR5Q29udGFpbmVyKCkudGhlbigoKSA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9KTtcblx0XHR0aGlzLm1DYWNoZU5lZWRzSW52YWxpZGF0ZSA9IHt9O1xuXHR9XG5cdGV4aXQoKSB7XG5cdFx0Ly8gRGVyZWdpc3RlciBnbG9iYWwgaW5zdGFuY2Vcblx0XHR0aGlzLm9GYWN0b3J5LnJlbW92ZUdsb2JhbEluc3RhbmNlKHRoaXMub01ldGFNb2RlbCk7XG5cdH1cblx0dmFsaWRhdGVDYWNoZUtleShzQ2FjaGVJZGVudGlmaWVyOiBhbnkpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdC8vIEtlZXAgdHJhY2sgaWYgdGhlIGNhY2hlIHdpbGwgYW55d2F5IG5lZWQgdG8gYmUgdXBkYXRlZFxuXHRcdGxldCBiQ2FjaGVOZWVkVXBkYXRlID0gdHJ1ZTtcblx0XHRyZXR1cm4gQ2FjaGVNYW5hZ2VyLmdldChzQ2FjaGVJZGVudGlmaWVyKVxuXHRcdFx0LnRoZW4oKG1DYWNoZU91dHB1dDogYW55KSA9PiB7XG5cdFx0XHRcdC8vIFdlIHByb3ZpZGUgYSBkZWZhdWx0IGtleSBzbyB0aGF0IGFuIHhtbCB2aWV3IGNhY2hlIGlzIHdyaXR0ZW5cblx0XHRcdFx0Y29uc3QgbU1ldGFNb2RlbEVUYWdzID0gdGhpcy5nZXRFVGFncygpO1xuXHRcdFx0XHRsZXQgc1VwZGF0ZWRDYWNoZUtleTogc3RyaW5nIHwgbnVsbCA9IEpTT04uc3RyaW5naWZ5KG1NZXRhTW9kZWxFVGFncyk7XG5cdFx0XHRcdC8vIENhc2UgIzFhIC0gTm8gY2FjaGUsIHNvIG1DYWNoZU91cHV0IGlzIGVtcHR5LCBjYWNoZUtleSA9IGN1cnJlbnQgbWV0YW1vZGVsIEVUYWdzXG5cdFx0XHRcdGlmIChtQ2FjaGVPdXRwdXQpIHtcblx0XHRcdFx0XHQvLyBDYXNlICMyIC0gQ2FjaGUgZW50cnkgZm91bmQsIGNoZWNrIGlmIGl0J3Mgc3RpbGwgdmFsaWRcblx0XHRcdFx0XHRjb25zdCBtVXBkYXRlZE1ldGFNb2RlbEVUYWdzOiBhbnkgPSB7fTtcblx0XHRcdFx0XHRjb25zdCBtQ2FjaGVkRVRhZ3MgPSBKU09OLnBhcnNlKG1DYWNoZU91dHB1dC5jYWNoZWRFVGFncyk7XG5cdFx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFxuXHRcdFx0XHRcdFx0T2JqZWN0LmtleXMobUNhY2hlZEVUYWdzKS5tYXAoZnVuY3Rpb24oc1VybDogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRcdC8vIENoZWNrIHZhbGlkaXR5IG9mIGV2ZXJ5IHNpbmdsZSBVcmwgdGhhdCdzIGluIHRoZSBGRSBDYWNoZSBvYmplY3Rcblx0XHRcdFx0XHRcdFx0aWYgKG1DYWNoZWRFVGFnc1tzVXJsXSkge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChtTWV0YU1vZGVsRVRhZ3Nbc1VybF0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIENhc2UgIzJhIC0gU2FtZSBudW1iZXIgb2YgRVRhZ3MgaW4gdGhlIGNhY2hlIGFuZCBpbiB0aGUgbWV0YWRhdGFcblx0XHRcdFx0XHRcdFx0XHRcdG1VcGRhdGVkTWV0YU1vZGVsRVRhZ3Nbc1VybF0gPSBtTWV0YU1vZGVsRVRhZ3Nbc1VybF07XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gbUNhY2hlZEVUYWdzW3NVcmxdID09PSBtTWV0YU1vZGVsRVRhZ3Nbc1VybF07XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIENhc2UgIzJiIC0gTm8gRVRhZyBpbiB0aGUgY2FjaGUgZm9yIHRoYXQgVVJMLCBjYWNoZWRFVGFncyB3YXMgZW5oYW5jZWRcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBnZXRNZXRhZGF0YUVUYWcoc1VybCwgbUNhY2hlZEVUYWdzW3NVcmxdLCBtVXBkYXRlZE1ldGFNb2RlbEVUYWdzKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ2FzZSAjMnogLSBMYXN0IFRlbXBsYXRpbmcgYWRkZWQgYW4gVVJMIHdpdGhvdXQgRVRhZ1xuXHRcdFx0XHRcdFx0XHRcdG1VcGRhdGVkTWV0YU1vZGVsRVRhZ3Nbc1VybF0gPSBtTWV0YU1vZGVsRVRhZ3Nbc1VybF07XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG1DYWNoZWRFVGFnc1tzVXJsXSA9PT0gbU1ldGFNb2RlbEVUYWdzW3NVcmxdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdCkudGhlbihmdW5jdGlvbihhVmFsaWRFVGFnczogYW55W10pIHtcblx0XHRcdFx0XHRcdGJDYWNoZU5lZWRVcGRhdGUgPSBhVmFsaWRFVGFncy5pbmRleE9mKGZhbHNlKSA+PSAwO1xuXHRcdFx0XHRcdFx0Ly8gQ2FzZSAjMmEgLSBTYW1lIG51bWJlciBvZiBFVGFncyBhbmQgYWxsIHZhbGlkIC0+IHdlIHJldHVybiB0aGUgdmlld0NhY2hlS2V5XG5cdFx0XHRcdFx0XHQvLyBDYXNlICMyYiAtIERpZmZlcmVudCBudW1iZXIgb2YgRVRhZ3MgYW5kIHN0aWxsIGFsbCB2YWxpZCAtPiB3ZSByZXR1cm4gdGhlIHZpZXdDYWNoZUtleVxuXHRcdFx0XHRcdFx0Ly8gQ2FzZSAjMmMgLSBTYW1lIG51bWJlciBvZiBFVGFncyBidXQgZGlmZmVyZW50IHZhbHVlcywgbWFpbiBzZXJ2aWNlIEV0YWcgaGFzIGNoYW5nZWQsIHVzZSB0aGF0IGFzIGNhY2hlIGtleVxuXHRcdFx0XHRcdFx0Ly8gQ2FzZSAjMmQgLSBEaWZmZXJlbnQgbnVtYmVyIG9mIEVUYWdzIGJ1dCBkaWZmZXJlbnQgdmFsdWUsIG1haW4gc2VydmljZSBFdGFnIG9yIGxpbmtlZCBzZXJ2aWNlIEV0YWcgaGFzIGNoYW5nZWQsIG5ldyBFVGFncyBzaG91bGQgYmUgdXNlZCBhcyBjYWNoZUtleVxuXHRcdFx0XHRcdFx0Ly8gQ2FzZSAjMnogLSBDYWNoZSBoYXMgYW4gaW52YWxpZCBFdGFnIC0gaWYgdGhlcmUgaXMgYW4gRXRhZyBwcm92aWRlZCBmcm9tIE1ldGFNb2RlbCB1c2UgaXQgYXMgY2FjaGVLZXlcblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0T2JqZWN0LmtleXMobVVwZGF0ZWRNZXRhTW9kZWxFVGFncykuc29tZShmdW5jdGlvbihzVXJsOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gIW1VcGRhdGVkTWV0YU1vZGVsRVRhZ3Nbc1VybF07XG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0Ly8gQXQgbGVhc3Qgb25lIG9mIHRoZSBNZXRhTW9kZWwgVVJMcyBkb2Vzbid0IHByb3ZpZGUgYW4gRVRhZywgc28gbm8gY2FjaGluZ1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBiQ2FjaGVOZWVkVXBkYXRlID8gSlNPTi5zdHJpbmdpZnkobVVwZGF0ZWRNZXRhTW9kZWxFVGFncykgOiBtQ2FjaGVPdXRwdXQudmlld0NhY2hlS2V5O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdE9iamVjdC5rZXlzKG1NZXRhTW9kZWxFVGFncykuc29tZShmdW5jdGlvbihzVXJsOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdHJldHVybiAhbU1ldGFNb2RlbEVUYWdzW3NVcmxdO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vIENoZWNrIGlmIGNhY2hlIGNhbiBiZSB1c2VkIChhbGwgdGhlIG1ldGFkYXRhIGFuZCBhbm5vdGF0aW9ucyBoYXZlIHRvIHByb3ZpZGUgYXQgbGVhc3QgYSBFVGFnIG9yIGEgTGFzdC1Nb2RpZmllZCBoZWFkZXIpXG5cdFx0XHRcdFx0Ly8gQ2FzZSAjMS1iIC0gTm8gQ2FjaGUsIG1DYWNoZU91cHV0IGlzIGVtcHR5LCBidXQgbWV0YW1vZGVsIGV0YWdzIGNhbm5vdCBiZSB1c2VkLCBzbyBubyBjYWNoaW5nXG5cdFx0XHRcdFx0YkNhY2hlTmVlZFVwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdFx0c1VwZGF0ZWRDYWNoZUtleSA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHNVcGRhdGVkQ2FjaGVLZXk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKCgpID0+IHtcblx0XHRcdFx0Ly8gRG9uJ3QgdXNlIHZpZXcgY2FjaGUgaW4gY2FzZSBvZiBpc3N1ZXMgd2l0aCB0aGUgTFJVIGNhY2hlXG5cdFx0XHRcdGJDYWNoZU5lZWRVcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoc0NhY2hlS2V5OiBhbnkpID0+IHtcblx0XHRcdFx0dGhpcy5tQ2FjaGVOZWVkc0ludmFsaWRhdGVbc0NhY2hlSWRlbnRpZmllcl0gPSBiQ2FjaGVOZWVkVXBkYXRlO1xuXHRcdFx0XHRyZXR1cm4gc0NhY2hlS2V5O1xuXHRcdFx0fSk7XG5cdH1cblx0aW52YWxpZGF0ZUlmTmVlZGVkKHNDYWNoZUtleXM6IHN0cmluZywgc0NhY2hlSWRlbnRpZmllcjogc3RyaW5nKSB7XG5cdFx0Ly8gQ2hlY2sgRkUgY2FjaGUgYWZ0ZXIgWE1MIHZpZXcgaXMgcHJvY2Vzc2VkIGNvbXBsZXRlbHlcblx0XHRjb25zdCBzRGF0YVNvdXJjZUVUYWdzID0gSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRFVGFncygpKTtcblx0XHRpZiAodGhpcy5tQ2FjaGVOZWVkc0ludmFsaWRhdGVbc0NhY2hlSWRlbnRpZmllcl0gfHwgKHNDYWNoZUtleXMgJiYgc0NhY2hlS2V5cyAhPT0gc0RhdGFTb3VyY2VFVGFncykpIHtcblx0XHRcdC8vIFNvbWV0aGluZyBpbiB0aGUgc291cmNlcyBhbmQvb3IgaXRzIEVUYWdzIGNoYW5nZWQgLT4gdXBkYXRlIHRoZSBGRSBjYWNoZVxuXHRcdFx0Y29uc3QgbUNhY2hlS2V5czogYW55ID0ge307XG5cdFx0XHQvLyBOZXcgRVRhZ3MgdGhhdCBuZWVkIHRvIGJlIHZlcmlmaWVkLCBtYXkgZGlmZmVyIGZyb20gdGhlIG9uZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSB2aWV3XG5cdFx0XHRtQ2FjaGVLZXlzLmNhY2hlZEVUYWdzID0gc0RhdGFTb3VyY2VFVGFncztcblx0XHRcdC8vIE9sZCBFVGFncyB0aGF0IGFyZSB1c2VkIGZvciB0aGUgeG1sIHZpZXcgY2FjaGUgYXMga2V5XG5cdFx0XHRtQ2FjaGVLZXlzLnZpZXdDYWNoZUtleSA9IHNDYWNoZUtleXM7XG5cdFx0XHRyZXR1cm4gQ2FjaGVNYW5hZ2VyLnNldChzQ2FjaGVJZGVudGlmaWVyLCBtQ2FjaGVLZXlzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH1cblx0fVxuXHRnZXRFVGFncygpIHtcblx0XHRjb25zdCBtTWV0YU1vZGVsRVRhZ3MgPSAodGhpcy5vTWV0YU1vZGVsIGFzIGFueSkuZ2V0RVRhZ3MoKTtcblx0XHQvLyBFVGFncyBmcm9tIFVJNSBhcmUgZWl0aGVyIGEgRGF0ZSBvciBhIHN0cmluZywgbGV0J3MgcmF0aW9uYWxpemUgdGhhdFxuXHRcdE9iamVjdC5rZXlzKG1NZXRhTW9kZWxFVGFncykuZm9yRWFjaChmdW5jdGlvbihzTWV0YU1vZGVsS2V5OiBzdHJpbmcpIHtcblx0XHRcdGlmIChtTWV0YU1vZGVsRVRhZ3Nbc01ldGFNb2RlbEtleV0gaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0XHRcdC8vIE1ldGFNb2RlbCBjb250YWlucyBhIExhc3QtTW9kaWZpZWQgdGltZXN0YW1wIGZvciB0aGUgVVJMXG5cdFx0XHRcdG1NZXRhTW9kZWxFVGFnc1tzTWV0YU1vZGVsS2V5XSA9IG1NZXRhTW9kZWxFVGFnc1tzTWV0YU1vZGVsS2V5XS50b0lTT1N0cmluZygpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gYWRkIGFsc28gdGhlIG1hbmlmZXN0IGhhc2ggYXMgVUk1IG9ubHkgY29uc2lkZXJzIHRoZSByb290IGNvbXBvbmVudCBoYXNoXG5cdFx0Y29uc3Qgb01hbmlmZXN0Q29udGVudCA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdCgpO1xuXHRcdGNvbnN0IHNNYW5pZmVzdEhhc2ggPSBoYXNoKFxuXHRcdFx0SlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRzYXBBcHA6IG9NYW5pZmVzdENvbnRlbnRbXCJzYXAuYXBwXCJdLFxuXHRcdFx0XHR2aWV3RGF0YTogKHRoaXMub0NvbXBvbmVudCBhcyBhbnkpLmdldFZpZXdEYXRhKClcblx0XHRcdH0pXG5cdFx0KTtcblx0XHRtTWV0YU1vZGVsRVRhZ3NbXCJtYW5pZmVzdFwiXSA9IHNNYW5pZmVzdEhhc2g7XG5cdFx0cmV0dXJuIG1NZXRhTW9kZWxFVGFncztcblx0fVxuXHRnZXRJbnRlcmZhY2UoKTogYW55IHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG5jbGFzcyBDYWNoZUhhbmRsZXJTZXJ2aWNlRmFjdG9yeSBleHRlbmRzIFNlcnZpY2VGYWN0b3J5PENhY2hlSGFuZGxlclNlcnZpY2VTZXR0aW5ncz4ge1xuXHRfb0luc3RhbmNlUmVnaXN0cnk6IFJlY29yZDxzdHJpbmcsIENhY2hlSGFuZGxlclNlcnZpY2UgfCBudWxsPiA9IHt9O1xuXHRjcmVhdGVJbnN0YW5jZShvU2VydmljZUNvbnRleHQ6IFNlcnZpY2VDb250ZXh0PENhY2hlSGFuZGxlclNlcnZpY2VTZXR0aW5ncz4pIHtcblx0XHRjb25zdCBzTWV0YU1vZGVsSWQgPSBvU2VydmljZUNvbnRleHQuc2V0dGluZ3MubWV0YU1vZGVsLmdldElkKCk7XG5cdFx0bGV0IGNhY2hlSGFuZGxlckluc3RhbmNlID0gdGhpcy5fb0luc3RhbmNlUmVnaXN0cnlbc01ldGFNb2RlbElkXTtcblx0XHRpZiAoIWNhY2hlSGFuZGxlckluc3RhbmNlKSB7XG5cdFx0XHR0aGlzLl9vSW5zdGFuY2VSZWdpc3RyeVtzTWV0YU1vZGVsSWRdID0gY2FjaGVIYW5kbGVySW5zdGFuY2UgPSBuZXcgQ2FjaGVIYW5kbGVyU2VydmljZShcblx0XHRcdFx0T2JqZWN0LmFzc2lnbihcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRmYWN0b3J5OiB0aGlzLFxuXHRcdFx0XHRcdFx0c2NvcGVPYmplY3Q6IG51bGwsXG5cdFx0XHRcdFx0XHRzY29wZVR5cGU6IFwic2VydmljZVwiXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRvU2VydmljZUNvbnRleHRcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY2FjaGVIYW5kbGVySW5zdGFuY2UuaW5pdFByb21pc2Vcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX29JbnN0YW5jZVJlZ2lzdHJ5W3NNZXRhTW9kZWxJZF0gYXMgQ2FjaGVIYW5kbGVyU2VydmljZTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goKGU6IGFueSkgPT4ge1xuXHRcdFx0XHQvLyBJbiBjYXNlIG9mIGVycm9yIGRlbGV0ZSB0aGUgZ2xvYmFsIGluc3RhbmNlO1xuXHRcdFx0XHR0aGlzLl9vSW5zdGFuY2VSZWdpc3RyeVtzTWV0YU1vZGVsSWRdID0gbnVsbDtcblx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdH0pO1xuXHR9XG5cdGdldEluc3RhbmNlKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKSB7XG5cdFx0cmV0dXJuIHRoaXMuX29JbnN0YW5jZVJlZ2lzdHJ5W29NZXRhTW9kZWwuZ2V0SWQoKV07XG5cdH1cblx0cmVtb3ZlR2xvYmFsSW5zdGFuY2Uob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpIHtcblx0XHR0aGlzLl9vSW5zdGFuY2VSZWdpc3RyeVtvTWV0YU1vZGVsLmdldElkKCldID0gbnVsbDtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYWNoZUhhbmRsZXJTZXJ2aWNlRmFjdG9yeTtcbiJdfQ==