@sapui5/sap.fe.core 1.106.0 → 1.108.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 (232) hide show
  1. package/package.json +2 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +19 -1
  4. package/src/sap/fe/core/ActionRuntime.ts +20 -0
  5. package/src/sap/fe/core/AppComponent.js +43 -17
  6. package/src/sap/fe/core/AppComponent.ts +55 -31
  7. package/src/sap/fe/core/AppStateHandler.js +5 -1
  8. package/src/sap/fe/core/AppStateHandler.ts +3 -1
  9. package/src/sap/fe/core/CommonUtils.js +638 -317
  10. package/src/sap/fe/core/CommonUtils.ts +592 -302
  11. package/src/sap/fe/core/ExtensionAPI.js +34 -1
  12. package/src/sap/fe/core/ExtensionAPI.ts +30 -0
  13. package/src/sap/fe/core/PageController.js +9 -7
  14. package/src/sap/fe/core/PageController.ts +10 -1
  15. package/src/sap/fe/core/TemplateComponent.js +5 -2
  16. package/src/sap/fe/core/TemplateComponent.ts +3 -1
  17. package/src/sap/fe/core/TemplateModel.js +4 -2
  18. package/src/sap/fe/core/TemplateModel.ts +1 -1
  19. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +10 -6
  20. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +12 -7
  21. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +100 -35
  22. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +93 -49
  23. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +419 -322
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +201 -95
  25. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +1 -1
  26. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +1 -1
  27. package/src/sap/fe/core/controllerextensions/EditFlow.js +102 -125
  28. package/src/sap/fe/core/controllerextensions/EditFlow.ts +103 -122
  29. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +15 -22
  30. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +11 -21
  31. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +1 -1
  32. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +1 -2
  33. package/src/sap/fe/core/controllerextensions/InternalRouting.js +60 -81
  34. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +31 -47
  35. package/src/sap/fe/core/controllerextensions/KPIManagement.js +1 -1
  36. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +4 -6
  37. package/src/sap/fe/core/controllerextensions/MassEdit.js +21 -10
  38. package/src/sap/fe/core/controllerextensions/MassEdit.ts +32 -12
  39. package/src/sap/fe/core/controllerextensions/MessageHandler.js +38 -31
  40. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +6 -8
  41. package/src/sap/fe/core/controllerextensions/PageReady.js +110 -246
  42. package/src/sap/fe/core/controllerextensions/PageReady.ts +93 -233
  43. package/src/sap/fe/core/controllerextensions/Placeholder.js +1 -1
  44. package/src/sap/fe/core/controllerextensions/Placeholder.ts +1 -2
  45. package/src/sap/fe/core/controllerextensions/Share.js +130 -9
  46. package/src/sap/fe/core/controllerextensions/Share.ts +111 -9
  47. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +20 -10
  48. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +18 -7
  49. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +4 -3
  50. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +7 -6
  51. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +10 -1
  52. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +8 -3
  53. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +80 -58
  54. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +34 -22
  55. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +18 -12
  56. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +60 -38
  57. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +84 -44
  58. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +78 -42
  59. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +78 -27
  60. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +908 -554
  61. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +708 -254
  62. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +6 -6
  63. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +25 -6
  64. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +80 -37
  65. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +107 -74
  66. package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +419 -0
  67. package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.ts +279 -0
  68. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +1 -1
  69. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +1 -2
  70. package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +0 -1
  71. package/src/sap/fe/core/controls/AnyElement.js +29 -0
  72. package/src/sap/fe/core/controls/AnyElement.ts +31 -0
  73. package/src/sap/fe/core/controls/FieldWrapper.js +23 -1
  74. package/src/sap/fe/core/controls/FieldWrapper.ts +17 -0
  75. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +1 -1
  76. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +1 -1
  77. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +2 -3
  78. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +5 -13
  79. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +53 -58
  80. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +15 -31
  81. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +18 -23
  82. package/src/sap/fe/core/converters/ConverterContext.js +24 -70
  83. package/src/sap/fe/core/converters/ConverterContext.ts +34 -74
  84. package/src/sap/fe/core/converters/ManifestSettings.js +2 -1
  85. package/src/sap/fe/core/converters/ManifestSettings.ts +4 -1
  86. package/src/sap/fe/core/converters/ManifestWrapper.js +53 -1
  87. package/src/sap/fe/core/converters/ManifestWrapper.ts +45 -1
  88. package/src/sap/fe/core/converters/MetaModelConverter.js +17 -14
  89. package/src/sap/fe/core/converters/MetaModelConverter.ts +18 -13
  90. package/src/sap/fe/core/converters/annotations/DataField.js +9 -11
  91. package/src/sap/fe/core/converters/annotations/DataField.ts +10 -11
  92. package/src/sap/fe/core/converters/controls/Common/Action.js +247 -143
  93. package/src/sap/fe/core/converters/controls/Common/Action.ts +252 -156
  94. package/src/sap/fe/core/converters/controls/Common/Chart.js +56 -31
  95. package/src/sap/fe/core/converters/controls/Common/Chart.ts +13 -6
  96. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +46 -58
  97. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +54 -64
  98. package/src/sap/fe/core/converters/controls/Common/Form.js +6 -2
  99. package/src/sap/fe/core/converters/controls/Common/Form.ts +7 -0
  100. package/src/sap/fe/core/converters/controls/Common/Table.js +162 -88
  101. package/src/sap/fe/core/converters/controls/Common/Table.ts +172 -76
  102. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +16 -33
  103. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +10 -30
  104. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +75 -50
  105. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +53 -33
  106. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +20 -21
  107. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +7 -6
  108. package/src/sap/fe/core/converters/helpers/Aggregation.js +8 -4
  109. package/src/sap/fe/core/converters/helpers/Aggregation.ts +7 -1
  110. package/src/sap/fe/core/converters/helpers/ID.js +7 -1
  111. package/src/sap/fe/core/converters/helpers/ID.ts +3 -0
  112. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +37 -36
  113. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +29 -28
  114. package/src/sap/fe/core/converters/templates/ListReportConverter.js +5 -2
  115. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +14 -3
  116. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +144 -5
  117. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +155 -2
  118. package/src/sap/fe/core/formatters/FPMFormatter.js +4 -4
  119. package/src/sap/fe/core/formatters/FPMFormatter.ts +8 -3
  120. package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
  121. package/src/sap/fe/core/formatters/KPIFormatter.ts +1 -2
  122. package/src/sap/fe/core/formatters/StandardFormatter.js +2 -2
  123. package/src/sap/fe/core/formatters/StandardFormatter.ts +2 -1
  124. package/src/sap/fe/core/formatters/TableFormatter.js +8 -10
  125. package/src/sap/fe/core/formatters/TableFormatter.ts +9 -7
  126. package/src/sap/fe/core/formatters/ValueFormatter.js +14 -1
  127. package/src/sap/fe/core/formatters/ValueFormatter.ts +17 -3
  128. package/src/sap/fe/core/helpers/BindingToolkit.js +43 -12
  129. package/src/sap/fe/core/helpers/BindingToolkit.ts +39 -10
  130. package/src/sap/fe/core/helpers/ClassSupport.js +1 -1
  131. package/src/sap/fe/core/helpers/ClassSupport.ts +2 -0
  132. package/src/sap/fe/core/helpers/LRMessageStrip.js +234 -0
  133. package/src/sap/fe/core/helpers/LRMessageStrip.ts +216 -0
  134. package/src/sap/fe/core/helpers/MassEditHelper.js +100 -58
  135. package/src/sap/fe/core/helpers/MassEditHelper.ts +84 -52
  136. package/src/sap/fe/core/helpers/ModelHelper.js +271 -7
  137. package/src/sap/fe/core/helpers/ModelHelper.ts +234 -4
  138. package/src/sap/fe/core/helpers/PasteHelper.js +1 -1
  139. package/src/sap/fe/core/helpers/PasteHelper.ts +2 -3
  140. package/src/sap/fe/core/jsx-runtime/jsx.js +8 -1
  141. package/src/sap/fe/core/jsx-runtime/jsx.ts +9 -2
  142. package/src/sap/fe/core/library.js +33 -7
  143. package/src/sap/fe/core/library.ts +28 -5
  144. package/src/sap/fe/core/messagebundle.properties +89 -8
  145. package/src/sap/fe/core/messagebundle_ar.properties +66 -6
  146. package/src/sap/fe/core/messagebundle_bg.properties +66 -6
  147. package/src/sap/fe/core/messagebundle_ca.properties +66 -6
  148. package/src/sap/fe/core/messagebundle_cs.properties +66 -6
  149. package/src/sap/fe/core/messagebundle_cy.properties +66 -6
  150. package/src/sap/fe/core/messagebundle_da.properties +66 -6
  151. package/src/sap/fe/core/messagebundle_de.properties +60 -0
  152. package/src/sap/fe/core/messagebundle_el.properties +66 -6
  153. package/src/sap/fe/core/messagebundle_en.properties +66 -6
  154. package/src/sap/fe/core/messagebundle_en_GB.properties +66 -6
  155. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +66 -6
  156. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +59 -6
  157. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +66 -6
  158. package/src/sap/fe/core/messagebundle_es.properties +66 -6
  159. package/src/sap/fe/core/messagebundle_es_MX.properties +66 -6
  160. package/src/sap/fe/core/messagebundle_et.properties +66 -6
  161. package/src/sap/fe/core/messagebundle_fi.properties +66 -6
  162. package/src/sap/fe/core/messagebundle_fr.properties +66 -6
  163. package/src/sap/fe/core/messagebundle_fr_CA.properties +66 -6
  164. package/src/sap/fe/core/messagebundle_hi.properties +66 -6
  165. package/src/sap/fe/core/messagebundle_hr.properties +66 -6
  166. package/src/sap/fe/core/messagebundle_hu.properties +66 -6
  167. package/src/sap/fe/core/messagebundle_id.properties +66 -6
  168. package/src/sap/fe/core/messagebundle_it.properties +68 -8
  169. package/src/sap/fe/core/messagebundle_iw.properties +66 -6
  170. package/src/sap/fe/core/messagebundle_ja.properties +66 -6
  171. package/src/sap/fe/core/messagebundle_kk.properties +66 -6
  172. package/src/sap/fe/core/messagebundle_ko.properties +67 -7
  173. package/src/sap/fe/core/messagebundle_lt.properties +66 -6
  174. package/src/sap/fe/core/messagebundle_lv.properties +66 -6
  175. package/src/sap/fe/core/messagebundle_ms.properties +66 -6
  176. package/src/sap/fe/core/messagebundle_nl.properties +66 -6
  177. package/src/sap/fe/core/messagebundle_no.properties +66 -6
  178. package/src/sap/fe/core/messagebundle_pl.properties +66 -6
  179. package/src/sap/fe/core/messagebundle_pt.properties +70 -10
  180. package/src/sap/fe/core/messagebundle_pt_PT.properties +66 -6
  181. package/src/sap/fe/core/messagebundle_ro.properties +66 -6
  182. package/src/sap/fe/core/messagebundle_ru.properties +66 -6
  183. package/src/sap/fe/core/messagebundle_sh.properties +66 -6
  184. package/src/sap/fe/core/messagebundle_sk.properties +66 -6
  185. package/src/sap/fe/core/messagebundle_sl.properties +66 -6
  186. package/src/sap/fe/core/messagebundle_sv.properties +66 -6
  187. package/src/sap/fe/core/messagebundle_th.properties +66 -6
  188. package/src/sap/fe/core/messagebundle_tr.properties +66 -6
  189. package/src/sap/fe/core/messagebundle_uk.properties +66 -6
  190. package/src/sap/fe/core/messagebundle_vi.properties +66 -6
  191. package/src/sap/fe/core/messagebundle_zh_CN.properties +66 -6
  192. package/src/sap/fe/core/messagebundle_zh_TW.properties +66 -6
  193. package/src/sap/fe/core/operationsHelper.js +235 -0
  194. package/src/sap/fe/core/operationsHelper.ts +227 -0
  195. package/src/sap/fe/core/rootView/Fcl.controller.js +935 -0
  196. package/src/sap/fe/core/rootView/Fcl.controller.ts +840 -0
  197. package/src/sap/fe/core/rootView/Fcl.view.xml +10 -0
  198. package/src/sap/fe/core/rootView/NavContainer.controller.js +230 -0
  199. package/src/sap/fe/core/rootView/NavContainer.controller.ts +201 -0
  200. package/src/sap/fe/core/rootView/NavContainer.view.xml +3 -0
  201. package/src/sap/fe/core/rootView/RootViewBaseController.js +611 -0
  202. package/src/sap/fe/core/rootView/RootViewBaseController.ts +511 -0
  203. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
  204. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +2 -3
  205. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
  206. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +2 -2
  207. package/src/sap/fe/core/services/RoutingServiceFactory.js +11 -6
  208. package/src/sap/fe/core/services/RoutingServiceFactory.ts +15 -6
  209. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +25 -1
  210. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +20 -0
  211. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
  212. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +3 -3
  213. package/src/sap/fe/core/templating/CommonFormatters.js +3 -5
  214. package/src/sap/fe/core/templating/CommonFormatters.ts +2 -9
  215. package/src/sap/fe/core/templating/CriticalityFormatters.js +4 -8
  216. package/src/sap/fe/core/templating/CriticalityFormatters.ts +3 -7
  217. package/src/sap/fe/core/templating/DataModelPathHelper.js +28 -5
  218. package/src/sap/fe/core/templating/DataModelPathHelper.ts +25 -0
  219. package/src/sap/fe/core/templating/EntitySetHelper.js +9 -7
  220. package/src/sap/fe/core/templating/EntitySetHelper.ts +10 -5
  221. package/src/sap/fe/core/templating/FieldControlHelper.js +15 -11
  222. package/src/sap/fe/core/templating/FieldControlHelper.ts +24 -10
  223. package/src/sap/fe/core/templating/FilterTemplating.js +22 -8
  224. package/src/sap/fe/core/templating/FilterTemplating.ts +17 -4
  225. package/src/sap/fe/core/templating/PropertyHelper.js +76 -33
  226. package/src/sap/fe/core/templating/PropertyHelper.ts +37 -1
  227. package/src/sap/fe/core/templating/UIFormatters.js +38 -24
  228. package/src/sap/fe/core/templating/UIFormatters.ts +33 -28
  229. package/src/sap/fe/core/type/Email.js +1 -1
  230. package/src/sap/fe/core/type/Email.ts +1 -2
  231. package/src/sap/fe/core/type/TypeUtil.js +68 -0
  232. package/src/sap/fe/core/type/TypeUtil.ts +55 -0
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "@sapui5/sap.fe.core",
3
- "version": "1.106.0",
3
+ "version": "1.108.0",
4
4
  "description": "SAPUI5 Library sap.fe.core",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "author": "SAP SE (https://www.sap.com)",
7
7
  "homepage": "https://sap.github.io/ui5-tooling/pages/SAPUI5/",
8
8
  "scripts": {
9
9
  "build": "echo 'nothing to do'",
10
+ "build-dts": "tsc --project tsconfig-dts.json",
10
11
  "build-local": "tsc --project tsconfig-local.json && copyfiles -u 5 \"../../lib/annotation-converter-ui5/ui5-dist/**/*.js\" dist-local/src && copyfiles ui5.yaml dist-local",
11
12
  "copy-dependency": "copyfiles -u 5 \"../../lib/annotation-converter-ui5/ui5-dist/**/*.js\" target/classes/META-INF/resources",
12
13
  "prepare-npm-sources": "copyfiles -u 5 \"../../lib/annotation-converter-ui5/ui5-dist/**/*.js\" target/npm-sources/src && babel target/npm-sources/src --out-dir target/npm-sources/src --extensions \".ts,.tsx\" --config-file ../../.babelrc && babel target/npm-sources/src --out-dir target/npm-sources/src --extensions \".mdx\" --config-file ../../.babelrc-next",
@@ -6,7 +6,7 @@
6
6
  <copyright>SAP UI development toolkit for HTML5 (SAPUI5)
7
7
  (c) Copyright 2009-2021 SAP SE. All rights reserved
8
8
  </copyright>
9
- <version>1.106.0</version>
9
+ <version>1.108.0</version>
10
10
 
11
11
  <documentation>UI5 library: sap.fe.core</documentation>
12
12
 
@@ -69,6 +69,24 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/helpers/BindingToolkit"],
69
69
  return Promise.all(aPromises);
70
70
  }
71
71
  },
72
+ setActionEnablementAfterPatch: function (oView, oListBinding, oInternalModelContext) {
73
+ var oInternalModelContextData = oInternalModelContext === null || oInternalModelContext === void 0 ? void 0 : oInternalModelContext.getObject();
74
+ var oControls = (oInternalModelContextData === null || oInternalModelContextData === void 0 ? void 0 : oInternalModelContextData.controls) || {};
75
+
76
+ for (var sKey in oControls) {
77
+ if (oControls[sKey] && oControls[sKey].controlId) {
78
+ var oTable = oView.byId(sKey);
79
+
80
+ if (oTable.isA("sap.ui.mdc.Table")) {
81
+ var oRowBinding = oTable.getRowBinding();
82
+
83
+ if (oRowBinding == oListBinding) {
84
+ ActionRuntime.setActionEnablement(oInternalModelContext, JSON.parse(oTable.data("operationAvailableMap").customData), oTable.getSelectedContexts(), "table");
85
+ }
86
+ }
87
+ }
88
+ }
89
+ },
72
90
  _setActionEnablementForTable: function (oSelectedContext, oInternalModelContext, sAction, sProperty, aRequestPromises) {
73
91
  // Reset all properties before computation
74
92
  oInternalModelContext.setProperty("dynamicActions/".concat(sAction), {
@@ -118,4 +136,4 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/helpers/BindingToolkit"],
118
136
  };
119
137
  return ActionRuntime;
120
138
  }, false);
121
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBY3Rpb25SdW50aW1lIiwic2V0QWN0aW9uRW5hYmxlbWVudCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsIm9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAiLCJhU2VsZWN0ZWRDb250ZXh0cyIsInNDb250cm9sIiwiYVByb21pc2VzIiwic0FjdGlvbiIsImFSZXF1ZXN0UHJvbWlzZXMiLCJzZXRQcm9wZXJ0eSIsInNQcm9wZXJ0eSIsImkiLCJsZW5ndGgiLCJvU2VsZWN0ZWRDb250ZXh0Iiwib0NvbnRleHREYXRhIiwiZ2V0T2JqZWN0IiwiX3NldEFjdGlvbkVuYWJsZW1lbnRGb3JUYWJsZSIsImJFbmFibGVkIiwiYUFwcGxpY2FibGUiLCJhTm90QXBwbGljYWJsZSIsInB1c2giLCJDb21tb25VdGlscyIsInNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZSIsIlByb21pc2UiLCJhbGwiLCJzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoIiwiZ2V0UGF0aCIsInVuZGVmaW5lZCIsIm9UcmFuc2Zvcm1lZEJpbmRpbmciLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsIm9CaW5kaW5nRXhwcmVzc2lvbiIsImNvbnN0YW50IiwicGF0aCIsInNSZXN1bHQiLCJjb21waWxlRXhwcmVzc2lvbiIsImdldE1vZGVsIiwic2V0RHluYW1pY0FjdGlvbkNvbnRleHRzIiwicmVxdWVzdFByb3BlcnR5Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBY3Rpb25SdW50aW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBjb25zdGFudCwgdHJhbnNmb3JtUmVjdXJzaXZlbHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5jb25zdCBBY3Rpb25SdW50aW1lID0ge1xuXHQvKipcblx0ICogU2V0cyB0aGUgYWN0aW9uIGVuYWJsZW1lbnQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBzZXRBY3Rpb25FbmFibGVtZW50XG5cdCAqIEBwYXJhbSBvSW50ZXJuYWxNb2RlbENvbnRleHQgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNvbnRleHQgbW9kZWxcblx0ICogQHBhcmFtIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgTWFwIGNvbnRhaW5pbmcgdGhlIG9wZXJhdGlvbiBhdmFpbGFiaWxpdHkgb2YgYWN0aW9uc1xuXHQgKiBAcGFyYW0gYVNlbGVjdGVkQ29udGV4dHMgQXJyYXkgY29udGFpbmluZyBzZWxlY3RlZCBjb250ZXh0cyBvZiB0aGUgY2hhcnRcblx0ICogQHBhcmFtIHNDb250cm9sIENvbnRyb2wgbmFtZVxuXHQgKiBAcmV0dXJucyBQcm9taXNlLmFsbChhUHJvbWlzZXMpXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKi9cblx0c2V0QWN0aW9uRW5hYmxlbWVudDogZnVuY3Rpb24gKFxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0b0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcDogYW55LFxuXHRcdGFTZWxlY3RlZENvbnRleHRzOiBhbnlbXSxcblx0XHRzQ29udHJvbDogc3RyaW5nXG5cdCkge1xuXHRcdGNvbnN0IGFQcm9taXNlcyA9IFtdO1xuXHRcdGZvciAoY29uc3Qgc0FjdGlvbiBpbiBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwKSB7XG5cdFx0XHRsZXQgYVJlcXVlc3RQcm9taXNlcyA9IFtdO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KHNBY3Rpb24sIGZhbHNlKTtcblx0XHRcdGNvbnN0IHNQcm9wZXJ0eSA9IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXBbc0FjdGlvbl07XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFTZWxlY3RlZENvbnRleHRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IG9TZWxlY3RlZENvbnRleHQgPSBhU2VsZWN0ZWRDb250ZXh0c1tpXTtcblx0XHRcdFx0aWYgKG9TZWxlY3RlZENvbnRleHQpIHtcblx0XHRcdFx0XHRjb25zdCBvQ29udGV4dERhdGEgPSBvU2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdGlmIChzQ29udHJvbCA9PT0gXCJjaGFydFwiKSB7XG5cdFx0XHRcdFx0XHRpZiAoKHNQcm9wZXJ0eSA9PT0gbnVsbCAmJiAhIW9Db250ZXh0RGF0YVtgIyR7c0FjdGlvbn1gXSkgfHwgb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3Qoc1Byb3BlcnR5KSkge1xuXHRcdFx0XHRcdFx0XHQvL2xvb2sgZm9yIGFjdGlvbiBhZHZlcnRpc2VtZW50IGlmIHByZXNlbnQgYW5kIGl0cyB2YWx1ZSBpcyBub3QgbnVsbFxuXHRcdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoc0FjdGlvbiwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoc0NvbnRyb2wgPT09IFwidGFibGVcIikge1xuXHRcdFx0XHRcdFx0YVJlcXVlc3RQcm9taXNlcyA9IHRoaXMuX3NldEFjdGlvbkVuYWJsZW1lbnRGb3JUYWJsZShcblx0XHRcdFx0XHRcdFx0b1NlbGVjdGVkQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRzQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRzUHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdGFSZXF1ZXN0UHJvbWlzZXNcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoc0NvbnRyb2wgPT09IFwidGFibGVcIikge1xuXHRcdFx0XHRpZiAoIWFTZWxlY3RlZENvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufWAsIHtcblx0XHRcdFx0XHRcdGJFbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0XHRcdGFBcHBsaWNhYmxlOiBbXSxcblx0XHRcdFx0XHRcdGFOb3RBcHBsaWNhYmxlOiBbXVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGFQcm9taXNlcy5wdXNoKENvbW1vblV0aWxzLnNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZShvSW50ZXJuYWxNb2RlbENvbnRleHQsIFtdKSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoICYmIHR5cGVvZiBzUHJvcGVydHkgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHQvLyBXaGVuIGFsbCBwcm9wZXJ0eSB2YWx1ZXMgaGF2ZSBiZWVuIHJldHJpZXZlZCwgc2V0XG5cdFx0XHRcdFx0Ly8gVGhlIGFwcGxpY2FibGUgYW5kIG5vdC1hcHBsaWNhYmxlIHNlbGVjdGVkIGNvbnRleHRzIGZvciBlYWNoIGFjdGlvbiBhbmRcblx0XHRcdFx0XHQvLyBUaGUgZW5hYmxlZCBwcm9wZXJ0eSBvZiB0aGUgZHluYW1pYyBhY3Rpb24gaW4gaW50ZXJuYWwgbW9kZWwgY29udGV4dC5cblx0XHRcdFx0XHRhUHJvbWlzZXMucHVzaChDb21tb25VdGlscy5zZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUob0ludGVybmFsTW9kZWxDb250ZXh0LCBhUmVxdWVzdFByb21pc2VzKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHNDb250cm9sID09PSBcInRhYmxlXCIpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLmFsbChhUHJvbWlzZXMpO1xuXHRcdH1cblx0fSxcblx0X3NldEFjdGlvbkVuYWJsZW1lbnRGb3JUYWJsZTogZnVuY3Rpb24gKFxuXHRcdG9TZWxlY3RlZENvbnRleHQ6IGFueSxcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ6IGFueSxcblx0XHRzQWN0aW9uOiBzdHJpbmcsXG5cdFx0c1Byb3BlcnR5OiBhbnksXG5cdFx0YVJlcXVlc3RQcm9taXNlczogYW55XG5cdCkge1xuXHRcdC8vIFJlc2V0IGFsbCBwcm9wZXJ0aWVzIGJlZm9yZSBjb21wdXRhdGlvblxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufWAsIHtcblx0XHRcdGJFbmFibGVkOiBmYWxzZSxcblx0XHRcdGFBcHBsaWNhYmxlOiBbXSxcblx0XHRcdGFOb3RBcHBsaWNhYmxlOiBbXVxuXHRcdH0pO1xuXHRcdC8vIE5vdGUgdGhhdCBub24gZHluYW1pYyBhY3Rpb25zIGFyZSBub3QgcHJvY2Vzc2VkIGhlcmUuIFRoZXkgYXJlIGVuYWJsZWQgYmVjYXVzZVxuXHRcdC8vIG9uZSBvciBtb3JlIGFyZSBzZWxlY3RlZCBhbmQgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBjb25kaXRpb24gaW4gdGhlIHRlbXBsYXRpbmdcblx0XHQvLyBpcyB0aGVuIHVuZGVmaW5lZCBhbmQgdGh1cyB0aGUgYnV0dG9uIHRha2VzIHRoZSBkZWZhdWx0IGVuYWJsaW5nLCB3aGljaCBpcyB0cnVlIVxuXHRcdGNvbnN0IGFBcHBsaWNhYmxlID0gW10sXG5cdFx0XHRhTm90QXBwbGljYWJsZSA9IFtdLFxuXHRcdFx0c0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCA9IGAke29JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2R5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYkVuYWJsZWRgO1xuXHRcdGlmICh0eXBlb2Ygc1Byb3BlcnR5ID09PSBcIm9iamVjdFwiICYmIHNQcm9wZXJ0eSAhPT0gbnVsbCAmJiBzUHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKG9TZWxlY3RlZENvbnRleHQpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0Y29uc3Qgb1RyYW5zZm9ybWVkQmluZGluZyA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdHNQcm9wZXJ0eSxcblx0XHRcdFx0XHRcIlBhdGhJbk1vZGVsXCIsXG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuXHRcdFx0XHRcdGZ1bmN0aW9uIChvQmluZGluZ0V4cHJlc3Npb246IGFueSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KG9Db250ZXh0RGF0YVtvQmluZGluZ0V4cHJlc3Npb24ucGF0aF0pO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBzUmVzdWx0ID0gY29tcGlsZUV4cHJlc3Npb24ob1RyYW5zZm9ybWVkQmluZGluZyk7XG5cdFx0XHRcdGlmIChzUmVzdWx0ID09PSBcInRydWVcIikge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRNb2RlbCgpLnNldFByb3BlcnR5KHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgsIHRydWUpO1xuXHRcdFx0XHRcdGFBcHBsaWNhYmxlLnB1c2gob1NlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YU5vdEFwcGxpY2FibGUucHVzaChvU2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Q29tbW9uVXRpbHMuc2V0RHluYW1pY0FjdGlvbkNvbnRleHRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgc0FjdGlvbiwgYUFwcGxpY2FibGUsIGFOb3RBcHBsaWNhYmxlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdGlmIChzUHJvcGVydHkgPT09IG51bGwgJiYgISFvQ29udGV4dERhdGFbYCMke3NBY3Rpb259YF0pIHtcblx0XHRcdFx0Ly9sb29rIGZvciBhY3Rpb24gYWR2ZXJ0aXNlbWVudCBpZiBwcmVzZW50IGFuZCBpdHMgdmFsdWUgaXMgbm90IG51bGxcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCkuc2V0UHJvcGVydHkoc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCwgdHJ1ZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBDb2xsZWN0IHByb21pc2VzIHRvIHJldHJpZXZlIHNpbmdsZXRvbiBvciBub3JtYWwgcHJvcGVydHkgdmFsdWUgYXN5bmNocm9ub3VzbHlcblx0XHRcdFx0YVJlcXVlc3RQcm9taXNlcy5wdXNoKENvbW1vblV0aWxzLnJlcXVlc3RQcm9wZXJ0eShvU2VsZWN0ZWRDb250ZXh0LCBzQWN0aW9uLCBzUHJvcGVydHksIHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGFSZXF1ZXN0UHJvbWlzZXM7XG5cdH1cbn07XG5leHBvcnQgZGVmYXVsdCBBY3Rpb25SdW50aW1lO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7OztFQUdBLElBQU1BLGFBQWEsR0FBRztJQUNyQjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ0MsbUJBQW1CLEVBQUUsVUFDcEJDLHFCQURvQixFQUVwQkMsNEJBRm9CLEVBR3BCQyxpQkFIb0IsRUFJcEJDLFFBSm9CLEVBS25CO01BQ0QsSUFBTUMsU0FBUyxHQUFHLEVBQWxCOztNQUNBLEtBQUssSUFBTUMsT0FBWCxJQUFzQkosNEJBQXRCLEVBQW9EO1FBQ25ELElBQUlLLGdCQUFnQixHQUFHLEVBQXZCO1FB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
139
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBY3Rpb25SdW50aW1lIiwic2V0QWN0aW9uRW5hYmxlbWVudCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsIm9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAiLCJhU2VsZWN0ZWRDb250ZXh0cyIsInNDb250cm9sIiwiYVByb21pc2VzIiwic0FjdGlvbiIsImFSZXF1ZXN0UHJvbWlzZXMiLCJzZXRQcm9wZXJ0eSIsInNQcm9wZXJ0eSIsImkiLCJsZW5ndGgiLCJvU2VsZWN0ZWRDb250ZXh0Iiwib0NvbnRleHREYXRhIiwiZ2V0T2JqZWN0IiwiX3NldEFjdGlvbkVuYWJsZW1lbnRGb3JUYWJsZSIsImJFbmFibGVkIiwiYUFwcGxpY2FibGUiLCJhTm90QXBwbGljYWJsZSIsInB1c2giLCJDb21tb25VdGlscyIsInNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZSIsIlByb21pc2UiLCJhbGwiLCJzZXRBY3Rpb25FbmFibGVtZW50QWZ0ZXJQYXRjaCIsIm9WaWV3Iiwib0xpc3RCaW5kaW5nIiwib0ludGVybmFsTW9kZWxDb250ZXh0RGF0YSIsIm9Db250cm9scyIsImNvbnRyb2xzIiwic0tleSIsImNvbnRyb2xJZCIsIm9UYWJsZSIsImJ5SWQiLCJpc0EiLCJvUm93QmluZGluZyIsImdldFJvd0JpbmRpbmciLCJKU09OIiwicGFyc2UiLCJkYXRhIiwiY3VzdG9tRGF0YSIsImdldFNlbGVjdGVkQ29udGV4dHMiLCJzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoIiwiZ2V0UGF0aCIsInVuZGVmaW5lZCIsIm9UcmFuc2Zvcm1lZEJpbmRpbmciLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsIm9CaW5kaW5nRXhwcmVzc2lvbiIsImNvbnN0YW50IiwicGF0aCIsInNSZXN1bHQiLCJjb21waWxlRXhwcmVzc2lvbiIsImdldE1vZGVsIiwic2V0RHluYW1pY0FjdGlvbkNvbnRleHRzIiwicmVxdWVzdFByb3BlcnR5Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBY3Rpb25SdW50aW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBjb25zdGFudCwgdHJhbnNmb3JtUmVjdXJzaXZlbHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5jb25zdCBBY3Rpb25SdW50aW1lID0ge1xuXHQvKipcblx0ICogU2V0cyB0aGUgYWN0aW9uIGVuYWJsZW1lbnQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBzZXRBY3Rpb25FbmFibGVtZW50XG5cdCAqIEBwYXJhbSBvSW50ZXJuYWxNb2RlbENvbnRleHQgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNvbnRleHQgbW9kZWxcblx0ICogQHBhcmFtIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgTWFwIGNvbnRhaW5pbmcgdGhlIG9wZXJhdGlvbiBhdmFpbGFiaWxpdHkgb2YgYWN0aW9uc1xuXHQgKiBAcGFyYW0gYVNlbGVjdGVkQ29udGV4dHMgQXJyYXkgY29udGFpbmluZyBzZWxlY3RlZCBjb250ZXh0cyBvZiB0aGUgY2hhcnRcblx0ICogQHBhcmFtIHNDb250cm9sIENvbnRyb2wgbmFtZVxuXHQgKiBAcmV0dXJucyBQcm9taXNlLmFsbChhUHJvbWlzZXMpXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKi9cblx0c2V0QWN0aW9uRW5hYmxlbWVudDogZnVuY3Rpb24gKFxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0b0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcDogYW55LFxuXHRcdGFTZWxlY3RlZENvbnRleHRzOiBhbnlbXSxcblx0XHRzQ29udHJvbDogc3RyaW5nXG5cdCkge1xuXHRcdGNvbnN0IGFQcm9taXNlcyA9IFtdO1xuXHRcdGZvciAoY29uc3Qgc0FjdGlvbiBpbiBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwKSB7XG5cdFx0XHRsZXQgYVJlcXVlc3RQcm9taXNlcyA9IFtdO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KHNBY3Rpb24sIGZhbHNlKTtcblx0XHRcdGNvbnN0IHNQcm9wZXJ0eSA9IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXBbc0FjdGlvbl07XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFTZWxlY3RlZENvbnRleHRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IG9TZWxlY3RlZENvbnRleHQgPSBhU2VsZWN0ZWRDb250ZXh0c1tpXTtcblx0XHRcdFx0aWYgKG9TZWxlY3RlZENvbnRleHQpIHtcblx0XHRcdFx0XHRjb25zdCBvQ29udGV4dERhdGEgPSBvU2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdGlmIChzQ29udHJvbCA9PT0gXCJjaGFydFwiKSB7XG5cdFx0XHRcdFx0XHRpZiAoKHNQcm9wZXJ0eSA9PT0gbnVsbCAmJiAhIW9Db250ZXh0RGF0YVtgIyR7c0FjdGlvbn1gXSkgfHwgb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3Qoc1Byb3BlcnR5KSkge1xuXHRcdFx0XHRcdFx0XHQvL2xvb2sgZm9yIGFjdGlvbiBhZHZlcnRpc2VtZW50IGlmIHByZXNlbnQgYW5kIGl0cyB2YWx1ZSBpcyBub3QgbnVsbFxuXHRcdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoc0FjdGlvbiwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoc0NvbnRyb2wgPT09IFwidGFibGVcIikge1xuXHRcdFx0XHRcdFx0YVJlcXVlc3RQcm9taXNlcyA9IHRoaXMuX3NldEFjdGlvbkVuYWJsZW1lbnRGb3JUYWJsZShcblx0XHRcdFx0XHRcdFx0b1NlbGVjdGVkQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRzQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRzUHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdGFSZXF1ZXN0UHJvbWlzZXNcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoc0NvbnRyb2wgPT09IFwidGFibGVcIikge1xuXHRcdFx0XHRpZiAoIWFTZWxlY3RlZENvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufWAsIHtcblx0XHRcdFx0XHRcdGJFbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0XHRcdGFBcHBsaWNhYmxlOiBbXSxcblx0XHRcdFx0XHRcdGFOb3RBcHBsaWNhYmxlOiBbXVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGFQcm9taXNlcy5wdXNoKENvbW1vblV0aWxzLnNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZShvSW50ZXJuYWxNb2RlbENvbnRleHQsIFtdKSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoICYmIHR5cGVvZiBzUHJvcGVydHkgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHQvLyBXaGVuIGFsbCBwcm9wZXJ0eSB2YWx1ZXMgaGF2ZSBiZWVuIHJldHJpZXZlZCwgc2V0XG5cdFx0XHRcdFx0Ly8gVGhlIGFwcGxpY2FibGUgYW5kIG5vdC1hcHBsaWNhYmxlIHNlbGVjdGVkIGNvbnRleHRzIGZvciBlYWNoIGFjdGlvbiBhbmRcblx0XHRcdFx0XHQvLyBUaGUgZW5hYmxlZCBwcm9wZXJ0eSBvZiB0aGUgZHluYW1pYyBhY3Rpb24gaW4gaW50ZXJuYWwgbW9kZWwgY29udGV4dC5cblx0XHRcdFx0XHRhUHJvbWlzZXMucHVzaChDb21tb25VdGlscy5zZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUob0ludGVybmFsTW9kZWxDb250ZXh0LCBhUmVxdWVzdFByb21pc2VzKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHNDb250cm9sID09PSBcInRhYmxlXCIpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLmFsbChhUHJvbWlzZXMpO1xuXHRcdH1cblx0fSxcblx0c2V0QWN0aW9uRW5hYmxlbWVudEFmdGVyUGF0Y2g6IGZ1bmN0aW9uIChvVmlldzogYW55LCBvTGlzdEJpbmRpbmc6IGFueSwgb0ludGVybmFsTW9kZWxDb250ZXh0OiBhbnkpIHtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHREYXRhOiBhbnkgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQ/LmdldE9iamVjdCgpO1xuXHRcdGNvbnN0IG9Db250cm9scyA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dERhdGE/LmNvbnRyb2xzIHx8IHt9O1xuXHRcdGZvciAoY29uc3Qgc0tleSBpbiBvQ29udHJvbHMpIHtcblx0XHRcdGlmIChvQ29udHJvbHNbc0tleV0gJiYgb0NvbnRyb2xzW3NLZXldLmNvbnRyb2xJZCkge1xuXHRcdFx0XHRjb25zdCBvVGFibGU6IGFueSA9IG9WaWV3LmJ5SWQoc0tleSk7XG5cdFx0XHRcdGlmIChvVGFibGUuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRcdGNvbnN0IG9Sb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdFx0XHRpZiAob1Jvd0JpbmRpbmcgPT0gb0xpc3RCaW5kaW5nKSB7XG5cdFx0XHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQoXG5cdFx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0SlNPTi5wYXJzZShvVGFibGUuZGF0YShcIm9wZXJhdGlvbkF2YWlsYWJsZU1hcFwiKS5jdXN0b21EYXRhKSxcblx0XHRcdFx0XHRcdFx0b1RhYmxlLmdldFNlbGVjdGVkQ29udGV4dHMoKSxcblx0XHRcdFx0XHRcdFx0XCJ0YWJsZVwiXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0X3NldEFjdGlvbkVuYWJsZW1lbnRGb3JUYWJsZTogZnVuY3Rpb24gKFxuXHRcdG9TZWxlY3RlZENvbnRleHQ6IGFueSxcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ6IGFueSxcblx0XHRzQWN0aW9uOiBzdHJpbmcsXG5cdFx0c1Byb3BlcnR5OiBhbnksXG5cdFx0YVJlcXVlc3RQcm9taXNlczogYW55XG5cdCkge1xuXHRcdC8vIFJlc2V0IGFsbCBwcm9wZXJ0aWVzIGJlZm9yZSBjb21wdXRhdGlvblxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufWAsIHtcblx0XHRcdGJFbmFibGVkOiBmYWxzZSxcblx0XHRcdGFBcHBsaWNhYmxlOiBbXSxcblx0XHRcdGFOb3RBcHBsaWNhYmxlOiBbXVxuXHRcdH0pO1xuXHRcdC8vIE5vdGUgdGhhdCBub24gZHluYW1pYyBhY3Rpb25zIGFyZSBub3QgcHJvY2Vzc2VkIGhlcmUuIFRoZXkgYXJlIGVuYWJsZWQgYmVjYXVzZVxuXHRcdC8vIG9uZSBvciBtb3JlIGFyZSBzZWxlY3RlZCBhbmQgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBjb25kaXRpb24gaW4gdGhlIHRlbXBsYXRpbmdcblx0XHQvLyBpcyB0aGVuIHVuZGVmaW5lZCBhbmQgdGh1cyB0aGUgYnV0dG9uIHRha2VzIHRoZSBkZWZhdWx0IGVuYWJsaW5nLCB3aGljaCBpcyB0cnVlIVxuXHRcdGNvbnN0IGFBcHBsaWNhYmxlID0gW10sXG5cdFx0XHRhTm90QXBwbGljYWJsZSA9IFtdLFxuXHRcdFx0c0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCA9IGAke29JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2R5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYkVuYWJsZWRgO1xuXHRcdGlmICh0eXBlb2Ygc1Byb3BlcnR5ID09PSBcIm9iamVjdFwiICYmIHNQcm9wZXJ0eSAhPT0gbnVsbCAmJiBzUHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKG9TZWxlY3RlZENvbnRleHQpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0Y29uc3Qgb1RyYW5zZm9ybWVkQmluZGluZyA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdHNQcm9wZXJ0eSxcblx0XHRcdFx0XHRcIlBhdGhJbk1vZGVsXCIsXG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuXHRcdFx0XHRcdGZ1bmN0aW9uIChvQmluZGluZ0V4cHJlc3Npb246IGFueSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KG9Db250ZXh0RGF0YVtvQmluZGluZ0V4cHJlc3Npb24ucGF0aF0pO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBzUmVzdWx0ID0gY29tcGlsZUV4cHJlc3Npb24ob1RyYW5zZm9ybWVkQmluZGluZyk7XG5cdFx0XHRcdGlmIChzUmVzdWx0ID09PSBcInRydWVcIikge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRNb2RlbCgpLnNldFByb3BlcnR5KHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgsIHRydWUpO1xuXHRcdFx0XHRcdGFBcHBsaWNhYmxlLnB1c2gob1NlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YU5vdEFwcGxpY2FibGUucHVzaChvU2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Q29tbW9uVXRpbHMuc2V0RHluYW1pY0FjdGlvbkNvbnRleHRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgc0FjdGlvbiwgYUFwcGxpY2FibGUsIGFOb3RBcHBsaWNhYmxlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdGlmIChzUHJvcGVydHkgPT09IG51bGwgJiYgISFvQ29udGV4dERhdGFbYCMke3NBY3Rpb259YF0pIHtcblx0XHRcdFx0Ly9sb29rIGZvciBhY3Rpb24gYWR2ZXJ0aXNlbWVudCBpZiBwcmVzZW50IGFuZCBpdHMgdmFsdWUgaXMgbm90IG51bGxcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCkuc2V0UHJvcGVydHkoc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCwgdHJ1ZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBDb2xsZWN0IHByb21pc2VzIHRvIHJldHJpZXZlIHNpbmdsZXRvbiBvciBub3JtYWwgcHJvcGVydHkgdmFsdWUgYXN5bmNocm9ub3VzbHlcblx0XHRcdFx0YVJlcXVlc3RQcm9taXNlcy5wdXNoKENvbW1vblV0aWxzLnJlcXVlc3RQcm9wZXJ0eShvU2VsZWN0ZWRDb250ZXh0LCBzQWN0aW9uLCBzUHJvcGVydHksIHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGFSZXF1ZXN0UHJvbWlzZXM7XG5cdH1cbn07XG5leHBvcnQgZGVmYXVsdCBBY3Rpb25SdW50aW1lO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7OztFQUdBLElBQU1BLGFBQWEsR0FBRztJQUNyQjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ0Ms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
@@ -66,6 +66,26 @@ const ActionRuntime = {
66
66
  return Promise.all(aPromises);
67
67
  }
68
68
  },
69
+ setActionEnablementAfterPatch: function (oView: any, oListBinding: any, oInternalModelContext: any) {
70
+ const oInternalModelContextData: any = oInternalModelContext?.getObject();
71
+ const oControls = oInternalModelContextData?.controls || {};
72
+ for (const sKey in oControls) {
73
+ if (oControls[sKey] && oControls[sKey].controlId) {
74
+ const oTable: any = oView.byId(sKey);
75
+ if (oTable.isA("sap.ui.mdc.Table")) {
76
+ const oRowBinding = oTable.getRowBinding();
77
+ if (oRowBinding == oListBinding) {
78
+ ActionRuntime.setActionEnablement(
79
+ oInternalModelContext,
80
+ JSON.parse(oTable.data("operationAvailableMap").customData),
81
+ oTable.getSelectedContexts(),
82
+ "table"
83
+ );
84
+ }
85
+ }
86
+ }
87
+ }
88
+ },
69
89
  _setActionEnablementForTable: function (
70
90
  oSelectedContext: any,
71
91
  oInternalModelContext: any,
@@ -17,11 +17,13 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/AppStateHandler", "sap/fe/core/contr
17
17
  var StartupMode = library.StartupMode;
18
18
  var NAVCONF = {
19
19
  FCL: {
20
- VIEWNAME: "sap.fe.templates.RootContainer.view.Fcl",
20
+ VIEWNAME: "sap.fe.core.rootView.Fcl",
21
+ VIEWNAME_COMPATIBILITY: "sap.fe.templates.RootContainer.view.Fcl",
21
22
  ROUTERCLASS: "sap.f.routing.Router"
22
23
  },
23
24
  NAVCONTAINER: {
24
- VIEWNAME: "sap.fe.templates.RootContainer.view.NavContainer",
25
+ VIEWNAME: "sap.fe.core.rootView.NavContainer",
26
+ VIEWNAME_COMPATIBILITY: "sap.fe.templates.RootContainer.view.NavContainer",
25
27
  ROUTERCLASS: "sap.m.routing.Router"
26
28
  }
27
29
  };
@@ -32,8 +34,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/AppStateHandler", "sap/fe/core/contr
32
34
  * This ensures that all the necessary services that you need for the building blocks and templates to work properly are started.
33
35
  *
34
36
  * When you use sap.fe.core.AppComponent as the base component, you also need to use a rootView. SAP Fiori elements provides two options: <br/>
35
- * - sap.fe.templates.RootContainer.view.NavContainer when using sap.m.routing.Router <br/>
36
- * - sap.fe.templates.RootContainer.view.Fcl when using sap.f.routing.Router (FCL use case) <br/>
37
+ * - sap.fe.core.rootView.NavContainer when using sap.m.routing.Router <br/>
38
+ * - sap.fe.core.rootView.Fcl when using sap.f.routing.Router (FCL use case) <br/>
37
39
  *
38
40
  * @hideconstructor
39
41
  * @public
@@ -129,8 +131,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/AppStateHandler", "sap/fe/core/contr
129
131
  * @function
130
132
  */
131
133
  _proto._isFclEnabled = function _isFclEnabled() {
132
- var oManifestUI5 = this.getMetadata().getManifestEntry("/sap.ui5", true);
133
- return NAVCONF.FCL.VIEWNAME === oManifestUI5.rootView.viewName;
134
+ var _oManifestUI5$rootVie, _oManifestUI5$rootVie2;
135
+
136
+ var oManifestUI5 = this.getManifestEntry("/sap.ui5");
137
+ return (oManifestUI5 === null || oManifestUI5 === void 0 ? void 0 : (_oManifestUI5$rootVie = oManifestUI5.rootView) === null || _oManifestUI5$rootVie === void 0 ? void 0 : _oManifestUI5$rootVie.viewName) === NAVCONF.FCL.VIEWNAME || (oManifestUI5 === null || oManifestUI5 === void 0 ? void 0 : (_oManifestUI5$rootVie2 = oManifestUI5.rootView) === null || _oManifestUI5$rootVie2 === void 0 ? void 0 : _oManifestUI5$rootVie2.viewName) === NAVCONF.FCL.VIEWNAME_COMPATIBILITY;
134
138
  }
135
139
  /**
136
140
  * Get a reference to the RouterProxy.
@@ -213,6 +217,16 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/AppStateHandler", "sap/fe/core/contr
213
217
  _proto.setStartupModeCreate = function setStartupModeCreate() {
214
218
  this.startupMode = StartupMode.Create;
215
219
  }
220
+ /**
221
+ * Set the startup mode for the app to 'AutoCreate'.
222
+ *
223
+ * @private
224
+ */
225
+ ;
226
+
227
+ _proto.setStartupModeAutoCreate = function setStartupModeAutoCreate() {
228
+ this.startupMode = StartupMode.AutoCreate;
229
+ }
216
230
  /**
217
231
  * Set the startup mode for the app to 'Deeplink'.
218
232
  *
@@ -225,6 +239,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/AppStateHandler", "sap/fe/core/contr
225
239
  };
226
240
 
227
241
  _proto.init = function init() {
242
+ var _oModel$isA, _oManifestUI5$rootVie3;
243
+
228
244
  var uiModel = new JSONModel({
229
245
  editMode: library.EditMode.Display,
230
246
  isEditable: false,
@@ -249,23 +265,33 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/AppStateHandler", "sap/fe/core/contr
249
265
  this._oDiagnostics = new Diagnostics();
250
266
  var oModel = this.getModel();
251
267
 
252
- if (oModel && oModel.isA("sap.ui.model.odata.v4.ODataModel")) {
268
+ if (oModel !== null && oModel !== void 0 && (_oModel$isA = oModel.isA) !== null && _oModel$isA !== void 0 && _oModel$isA.call(oModel, "sap.ui.model.odata.v4.ODataModel")) {
253
269
  this.entityContainer = oModel.getMetaModel().requestObject("/$EntityContainer/");
254
270
  } else {
255
271
  // not an OData v4 service
256
272
  this.entityContainer = Promise.resolve();
257
273
  }
258
274
 
259
- var oManifestUI5 = this.getMetadata().getManifestEntry("/sap.ui5", true);
275
+ var oManifestUI5 = this.getManifest()["sap.ui5"];
260
276
 
261
- if (oManifestUI5.rootView.viewName === NAVCONF.FCL.VIEWNAME && oManifestUI5.routing.config.routerClass === NAVCONF.FCL.ROUTERCLASS) {
262
- Log.info("Rootcontainer: \"".concat(NAVCONF.FCL.VIEWNAME, "\" - Routerclass: \"").concat(NAVCONF.FCL.ROUTERCLASS, "\""));
263
- } else if (oManifestUI5.rootView.viewName === NAVCONF.NAVCONTAINER.VIEWNAME && oManifestUI5.routing.config.routerClass === NAVCONF.NAVCONTAINER.ROUTERCLASS) {
264
- Log.info("Rootcontainer: \"".concat(NAVCONF.NAVCONTAINER.VIEWNAME, "\" - Routerclass: \"").concat(NAVCONF.NAVCONTAINER.ROUTERCLASS, "\""));
265
- } else if (oManifestUI5.rootView.viewName.indexOf("sap.fe") !== -1) {
266
- throw Error("\nWrong configuration for the couple (rootView/routerClass) in manifest file.\n" + "Current values are :(".concat(oManifestUI5.rootView.viewName, "/").concat(oManifestUI5.routing.config.routerClass, ")\n") + "Expected values are \n" + "\t - (".concat(NAVCONF.NAVCONTAINER.VIEWNAME, "/").concat(NAVCONF.NAVCONTAINER.ROUTERCLASS, ")\n") + "\t - (".concat(NAVCONF.FCL.VIEWNAME, "/").concat(NAVCONF.FCL.ROUTERCLASS, ")"));
267
- } else {
268
- Log.info("Rootcontainer: \"".concat(oManifestUI5.rootView.viewName, "\" - Routerclass: \"").concat(NAVCONF.NAVCONTAINER.ROUTERCLASS, "\""));
277
+ if (oManifestUI5 !== null && oManifestUI5 !== void 0 && (_oManifestUI5$rootVie3 = oManifestUI5.rootView) !== null && _oManifestUI5$rootVie3 !== void 0 && _oManifestUI5$rootVie3.viewName) {
278
+ // The application specified an own root view in the manifest
279
+ // Root View was moved from sap.fe.templates to sap.fe.core - keep it compatible
280
+ if (oManifestUI5.rootView.viewName === NAVCONF.FCL.VIEWNAME_COMPATIBILITY) {
281
+ oManifestUI5.rootView.viewName = NAVCONF.FCL.VIEWNAME;
282
+ } else if ((oManifestUI5 === null || oManifestUI5 === void 0 ? void 0 : oManifestUI5.rootView.viewName) === NAVCONF.NAVCONTAINER.VIEWNAME_COMPATIBILITY) {
283
+ oManifestUI5.rootView.viewName = NAVCONF.NAVCONTAINER.VIEWNAME;
284
+ }
285
+
286
+ if (oManifestUI5.rootView.viewName === NAVCONF.FCL.VIEWNAME && oManifestUI5.routing.config.routerClass === NAVCONF.FCL.ROUTERCLASS) {
287
+ Log.info("Rootcontainer: \"".concat(NAVCONF.FCL.VIEWNAME, "\" - Routerclass: \"").concat(NAVCONF.FCL.ROUTERCLASS, "\""));
288
+ } else if (oManifestUI5.rootView.viewName === NAVCONF.NAVCONTAINER.VIEWNAME && oManifestUI5.routing.config.routerClass === NAVCONF.NAVCONTAINER.ROUTERCLASS) {
289
+ Log.info("Rootcontainer: \"".concat(NAVCONF.NAVCONTAINER.VIEWNAME, "\" - Routerclass: \"").concat(NAVCONF.NAVCONTAINER.ROUTERCLASS, "\""));
290
+ } else if (oManifestUI5.rootView.viewName.indexOf("sap.fe.core.rootView") !== -1) {
291
+ throw Error("\nWrong configuration for the couple (rootView/routerClass) in manifest file.\n" + "Current values are :(".concat(oManifestUI5.rootView.viewName, "/").concat(oManifestUI5.routing.config.routerClass, ")\n") + "Expected values are \n" + "\t - (".concat(NAVCONF.NAVCONTAINER.VIEWNAME, "/").concat(NAVCONF.NAVCONTAINER.ROUTERCLASS, ")\n") + "\t - (".concat(NAVCONF.FCL.VIEWNAME, "/").concat(NAVCONF.FCL.ROUTERCLASS, ")"));
292
+ } else {
293
+ Log.info("Rootcontainer: \"".concat(oManifestUI5.rootView.viewName, "\" - Routerclass: \"").concat(NAVCONF.NAVCONTAINER.ROUTERCLASS, "\""));
294
+ }
269
295
  } // Adding Semantic Date Operators
270
296
  // Commenting since it is not needed for SingleRange
271
297
 
@@ -431,4 +457,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/AppStateHandler", "sap/fe/core/contr
431
457
  }(UIComponent), _class2.instanceMap = {}, _class2)) || _class);
432
458
  return AppComponent;
433
459
  }, false);
434
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdGFydHVwTW9kZSIsImxpYnJhcnkiLCJOQVZDT05GIiwiRkNMIiwiVklFV05BTUUiLCJST1VURVJDTEFTUyIsIk5BVkNPTlRBSU5FUiIsIkFwcENvbXBvbmVudCIsImRlZmluZVVJNUNsYXNzIiwiaW50ZXJmYWNlcyIsImNvbmZpZyIsImZ1bGxXaWR0aCIsIm1hbmlmZXN0Iiwic2VydmljZXMiLCJyZXNvdXJjZU1vZGVsIiwiZmFjdG9yeU5hbWUiLCJyb3V0aW5nU2VydmljZSIsInN0YXJ0dXAiLCJzaGVsbFNlcnZpY2VzIiwiU2hlbGxVSVNlcnZpY2UiLCJuYXZpZ2F0aW9uU2VydmljZSIsImVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwic2lkZUVmZmVjdHNTZXJ2aWNlIiwiYXN5bmNDb21wb25lbnRTZXJ2aWNlIiwicm9vdFZpZXciLCJ2aWV3TmFtZSIsInR5cGUiLCJhc3luYyIsImlkIiwicm91dGluZyIsImNvbnRyb2xJZCIsInJvdXRlckNsYXNzIiwidmlld1R5cGUiLCJjb250cm9sQWdncmVnYXRpb24iLCJjb250YWluZXJPcHRpb25zIiwicHJvcGFnYXRlTW9kZWwiLCJkZXNpZ250aW1lIiwic3RhcnR1cE1vZGUiLCJOb3JtYWwiLCJfaXNGY2xFbmFibGVkIiwib01hbmlmZXN0VUk1IiwiZ2V0TWV0YWRhdGEiLCJnZXRNYW5pZmVzdEVudHJ5IiwiZ2V0Um91dGVyUHJveHkiLCJfb1JvdXRlclByb3h5IiwiZ2V0QXBwU3RhdGVIYW5kbGVyIiwiX29BcHBTdGF0ZUhhbmRsZXIiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJnZXRSb290Q29udHJvbCIsImdldENvbnRyb2xsZXIiLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q29udGVudCIsImdldFN0YXJ0dXBNb2RlIiwic2V0U3RhcnR1cE1vZGVDcmVhdGUiLCJDcmVhdGUiLCJzZXRTdGFydHVwTW9kZURlZXBsaW5rIiwiRGVlcGxpbmsiLCJpbml0IiwidWlNb2RlbCIsIkpTT05Nb2RlbCIsImVkaXRNb2RlIiwiRWRpdE1vZGUiLCJEaXNwbGF5IiwiaXNFZGl0YWJsZSIsImRyYWZ0U3RhdHVzIiwiRHJhZnRTdGF0dXMiLCJDbGVhciIsImJ1c3kiLCJidXN5TG9jYWwiLCJwYWdlcyIsIm9JbnRlcm5hbE1vZGVsIiwic2V0RGVmYXVsdEJpbmRpbmdNb2RlIiwiTW9kZWxIZWxwZXIiLCJlbmhhbmNlVWlKU09OTW9kZWwiLCJlbmhhbmNlSW50ZXJuYWxKU09OTW9kZWwiLCJzZXRNb2RlbCIsImJJbml0aWFsaXplUm91dGluZyIsInVuZGVmaW5lZCIsIlJvdXRlclByb3h5IiwiQXBwU3RhdGVIYW5kbGVyIiwiX29EaWFnbm9zdGljcyIsIkRpYWdub3N0aWNzIiwib01vZGVsIiwiZ2V0TW9kZWwiLCJpc0EiLCJlbnRpdHlDb250YWluZXIiLCJnZXRNZXRhTW9kZWwiLCJyZXF1ZXN0T2JqZWN0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJMb2ciLCJpbmZvIiwiaW5kZXhPZiIsIkVycm9yIiwiU2VtYW50aWNEYXRlT3BlcmF0b3JzIiwiYWRkU2VtYW50aWNEYXRlT3BlcmF0b3JzIiwiaW5zdGFuY2VNYXAiLCJnZXRJZCIsIm9uU2VydmljZXNTdGFydGVkIiwiZmluYWxpemVkUm91dGluZ0luaXRpYWxpemF0aW9uIiwidGhlbiIsImF0dGFjaFJvdXRlTWF0Y2hlcnMiLCJnZXRSb3V0ZXIiLCJpbml0aWFsaXplIiwiY2F0Y2giLCJlcnJvciIsIm9SZXNvdXJjZUJ1bmRsZSIsIkNvcmUiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJkaXNwbGF5TWVzc2FnZVBhZ2UiLCJnZXRUZXh0IiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsIm1lc3NhZ2UiLCJGQ0xMZXZlbCIsImdldFJvdXRpbmdTZXJ2aWNlIiwiaW5pdGlhbGl6ZVJvdXRpbmciLCJhdHRhY2hBZnRlckluaXQiLCJlcnIiLCJleGl0IiwiZGVzdHJveSIsImRlbGV0ZU1vZGVsQ2FjaGVEYXRhIiwiZ2V0RGlhZ25vc3RpY3MiLCJWYWx1ZUxpc3RIZWxwZXIiLCJpbml0aWFsaXplQ2FjaGVkVmFsdWVIZWxwIiwid2luZG93IiwiX3JvdXRpbmciLCJlIiwib01haW5Nb2RlbCIsIm9Nb2RlbHMiLCJvSGVhZGVycyIsIm9SZXF1ZXN0b3IiLCJqUXVlcnkiLCJleHRlbmQiLCJtSGVhZGVycyIsImJlZm9yZUV4aXQiLCJhcmdzIiwiZ2V0Q29tcG9uZW50RGF0YSIsImdldFNoZWxsU2VydmljZXMiLCJnZXROYXZpZ2F0aW9uU2VydmljZSIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0U3RhcnR1cFBhcmFtZXRlcnMiLCJvQ29tcG9uZW50RGF0YSIsIm9TdGFydFVwUGFyYW1ldGVycyIsInN0YXJ0dXBQYXJhbWV0ZXJzIiwicmVzdG9yZSIsInZpZXdTdGF0ZSIsIm9uUmVzdG9yZSIsInN1c3BlbmQiLCJvblN1c3BlbmQiLCJVSUNvbXBvbmVudCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQXBwQ29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IEFwcFN0YXRlSGFuZGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwU3RhdGVIYW5kbGVyXCI7XG5pbXBvcnQgUm91dGVyUHJveHkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL3JvdXRpbmcvUm91dGVyUHJveHlcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBsaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9FbnZpcm9ubWVudFNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL05hdmlnYXRpb25TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBSb3V0aW5nU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Sb3V0aW5nU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgSVNoZWxsU2VydmljZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2hlbGxTZXJ2aWNlc0ZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgU2lkZUVmZmVjdHNTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBEaWFnbm9zdGljcyBmcm9tIFwic2FwL2ZlL2NvcmUvc3VwcG9ydC9EaWFnbm9zdGljc1wiO1xuaW1wb3J0IFZhbHVlTGlzdEhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVmFsdWVMaXN0SGVscGVyXCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBVSUNvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvVUlDb21wb25lbnRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgQ29yZUV4IH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0IHR5cGUgQmFzZUNvbnRyb2xsZXIgZnJvbSBcIi4vQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IGRlbGV0ZU1vZGVsQ2FjaGVEYXRhIH0gZnJvbSBcIi4vY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCBTZW1hbnRpY0RhdGVPcGVyYXRvcnMgZnJvbSBcIi4vaGVscGVycy9TZW1hbnRpY0RhdGVPcGVyYXRvcnNcIjtcblxuY29uc3QgU3RhcnR1cE1vZGUgPSBsaWJyYXJ5LlN0YXJ0dXBNb2RlO1xuXG5jb25zdCBOQVZDT05GID0ge1xuXHRGQ0w6IHtcblx0XHRWSUVXTkFNRTogXCJzYXAuZmUudGVtcGxhdGVzLlJvb3RDb250YWluZXIudmlldy5GY2xcIixcblx0XHRST1VURVJDTEFTUzogXCJzYXAuZi5yb3V0aW5nLlJvdXRlclwiXG5cdH0sXG5cdE5BVkNPTlRBSU5FUjoge1xuXHRcdFZJRVdOQU1FOiBcInNhcC5mZS50ZW1wbGF0ZXMuUm9vdENvbnRhaW5lci52aWV3Lk5hdkNvbnRhaW5lclwiLFxuXHRcdFJPVVRFUkNMQVNTOiBcInNhcC5tLnJvdXRpbmcuUm91dGVyXCJcblx0fVxufTtcblxuLyoqXG4gKiBNYWluIGNsYXNzIGZvciBjb21wb25lbnRzIHVzZWQgZm9yIGFuIGFwcGxpY2F0aW9uIGluIFNBUCBGaW9yaSBlbGVtZW50cy5cbiAqXG4gKiBBcHBsaWNhdGlvbiBkZXZlbG9wZXJzIHVzaW5nIHRoZSB0ZW1wbGF0ZXMgYW5kIGJ1aWxkaW5nIGJsb2NrcyBwcm92aWRlZCBieSBTQVAgRmlvcmkgZWxlbWVudHMgc2hvdWxkIGNyZWF0ZSB0aGVpciBhcHBzIGJ5IGV4dGVuZGluZyB0aGlzIGNvbXBvbmVudC5cbiAqIFRoaXMgZW5zdXJlcyB0aGF0IGFsbCB0aGUgbmVjZXNzYXJ5IHNlcnZpY2VzIHRoYXQgeW91IG5lZWQgZm9yIHRoZSBidWlsZGluZyBibG9ja3MgYW5kIHRlbXBsYXRlcyB0byB3b3JrIHByb3Blcmx5IGFyZSBzdGFydGVkLlxuICpcbiAqIFdoZW4geW91IHVzZSBzYXAuZmUuY29yZS5BcHBDb21wb25lbnQgYXMgdGhlIGJhc2UgY29tcG9uZW50LCB5b3UgYWxzbyBuZWVkIHRvIHVzZSBhIHJvb3RWaWV3LiBTQVAgRmlvcmkgZWxlbWVudHMgcHJvdmlkZXMgdHdvIG9wdGlvbnM6IDxici8+XG4gKiAgLSBzYXAuZmUudGVtcGxhdGVzLlJvb3RDb250YWluZXIudmlldy5OYXZDb250YWluZXIgd2hlbiB1c2luZyBzYXAubS5yb3V0aW5nLlJvdXRlciA8YnIvPlxuICogIC0gc2FwLmZlLnRlbXBsYXRlcy5Sb290Q29udGFpbmVyLnZpZXcuRmNsIHdoZW4gdXNpbmcgc2FwLmYucm91dGluZy5Sb3V0ZXIgKEZDTCB1c2UgY2FzZSkgPGJyLz5cbiAqXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAcHVibGljXG4gKiBAbmFtZSBzYXAuZmUuY29yZS5BcHBDb21wb25lbnRcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XCIsIHtcblx0aW50ZXJmYWNlczogW1wic2FwLnVpLmNvcmUuSUFzeW5jQ29udGVudENyZWF0aW9uXCJdLFxuXHRjb25maWc6IHtcblx0XHRmdWxsV2lkdGg6IHRydWVcblx0fSxcblx0bWFuaWZlc3Q6IHtcblx0XHRcInNhcC51aTVcIjoge1xuXHRcdFx0c2VydmljZXM6IHtcblx0XHRcdFx0cmVzb3VyY2VNb2RlbDoge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlJlc291cmNlTW9kZWxTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0XCJzdGFydHVwXCI6IFwid2FpdEZvclwiLFxuXHRcdFx0XHRcdFwic2V0dGluZ3NcIjoge1xuXHRcdFx0XHRcdFx0XCJidW5kbGVzXCI6IFtcInNhcC5mZS5jb3JlLm1lc3NhZ2VidW5kbGVcIl0sXG5cdFx0XHRcdFx0XHRcIm1vZGVsTmFtZVwiOiBcInNhcC5mZS5pMThuXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJvdXRpbmdTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuUm91dGluZ1NlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzaGVsbFNlcnZpY2VzOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuU2hlbGxTZXJ2aWNlc1wiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdFNoZWxsVUlTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLnVzaGVsbC51aTVzZXJ2aWNlLlNoZWxsVUlTZXJ2aWNlXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0bmF2aWdhdGlvblNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5OYXZpZ2F0aW9uU2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGVudmlyb25tZW50Q2FwYWJpbGl0aWVzOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuRW52aXJvbm1lbnRTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0c2lkZUVmZmVjdHNTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuU2lkZUVmZmVjdHNTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXN5bmNDb21wb25lbnRTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuQXN5bmNDb21wb25lbnRTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHJvb3RWaWV3OiB7XG5cdFx0XHRcdHZpZXdOYW1lOiBOQVZDT05GLk5BVkNPTlRBSU5FUi5WSUVXTkFNRSxcblx0XHRcdFx0dHlwZTogXCJYTUxcIixcblx0XHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRcdGlkOiBcImFwcFJvb3RWaWV3XCJcblx0XHRcdH0sXG5cdFx0XHRyb3V0aW5nOiB7XG5cdFx0XHRcdGNvbmZpZzoge1xuXHRcdFx0XHRcdGNvbnRyb2xJZDogXCJhcHBDb250ZW50XCIsXG5cdFx0XHRcdFx0cm91dGVyQ2xhc3M6IE5BVkNPTkYuTkFWQ09OVEFJTkVSLlJPVVRFUkNMQVNTLFxuXHRcdFx0XHRcdHZpZXdUeXBlOiBcIlhNTFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xBZ2dyZWdhdGlvbjogXCJwYWdlc1wiLFxuXHRcdFx0XHRcdGFzeW5jOiB0cnVlLFxuXHRcdFx0XHRcdGNvbnRhaW5lck9wdGlvbnM6IHtcblx0XHRcdFx0XHRcdHByb3BhZ2F0ZU1vZGVsOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRkZXNpZ250aW1lOiBcInNhcC9mZS9jb3JlL2Rlc2lnbnRpbWUvQXBwQ29tcG9uZW50LmRlc2lnbnRpbWVcIixcblxuXHRsaWJyYXJ5OiBcInNhcC5mZS5jb3JlXCJcbn0pXG5jbGFzcyBBcHBDb21wb25lbnQgZXh0ZW5kcyBVSUNvbXBvbmVudCB7XG5cdHN0YXRpYyBpbnN0YW5jZU1hcDogUmVjb3JkPHN0cmluZywgQXBwQ29tcG9uZW50PiA9IHt9O1xuXHRwcml2YXRlIF9vUm91dGVyUHJveHkhOiBSb3V0ZXJQcm94eTtcblx0cHJpdmF0ZSBfb0FwcFN0YXRlSGFuZGxlciE6IEFwcFN0YXRlSGFuZGxlcjtcblx0cHJpdmF0ZSBiSW5pdGlhbGl6ZVJvdXRpbmc/OiBib29sZWFuO1xuXHRwcml2YXRlIF9vRGlhZ25vc3RpY3MhOiBEaWFnbm9zdGljcztcblx0cHJpdmF0ZSBlbnRpdHlDb250YWluZXI6IGFueTtcblx0cHJpdmF0ZSBzdGFydHVwTW9kZTogc3RyaW5nID0gU3RhcnR1cE1vZGUuTm9ybWFsO1xuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5BcHBDb21wb25lbnQuZ2V0TWV0YWRhdGFcblx0ICogQGZ1bmN0aW9uXG5cdCAqL1xuXG5cdF9pc0ZjbEVuYWJsZWQoKSB7XG5cdFx0Y29uc3Qgb01hbmlmZXN0VUk1ID0gdGhpcy5nZXRNZXRhZGF0YSgpLmdldE1hbmlmZXN0RW50cnkoXCIvc2FwLnVpNVwiLCB0cnVlKTtcblx0XHRyZXR1cm4gTkFWQ09ORi5GQ0wuVklFV05BTUUgPT09IG9NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIFJvdXRlclByb3h5LlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50I2dldFJvdXRlclByb3h5XG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5BcHBDb21wb25lbnRcblx0ICogQHJldHVybnMgQSBSZWZlcmVuY2UgdG8gdGhlIFJvdXRlclByb3h5XG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdGdldFJvdXRlclByb3h5KCk6IFJvdXRlclByb3h5IHtcblx0XHRyZXR1cm4gdGhpcy5fb1JvdXRlclByb3h5O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgQXBwU3RhdGVIYW5kbGVyLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50I2dldEFwcFN0YXRlSGFuZGxlclxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XG5cdCAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBBcHBTdGF0ZUhhbmRsZXJcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0Z2V0QXBwU3RhdGVIYW5kbGVyKCkge1xuXHRcdHJldHVybiB0aGlzLl9vQXBwU3RhdGVIYW5kbGVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgbmF2L0ZDTCBDb250cm9sbGVyLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50I2dldFJvb3RWaWV3Q29udHJvbGxlclxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XG5cdCAqIEByZXR1cm5zICBBIHJlZmVyZW5jZSB0byB0aGUgRkNMIENvbnRyb2xsZXJcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0Z2V0Um9vdFZpZXdDb250cm9sbGVyKCk6IEJhc2VDb250cm9sbGVyIHtcblx0XHRyZXR1cm4gKHRoaXMuZ2V0Um9vdENvbnRyb2woKSBhcyBWaWV3KS5nZXRDb250cm9sbGVyKCkgYXMgQmFzZUNvbnRyb2xsZXI7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBOYXZDb250YWluZXIgY29udHJvbCBvciB0aGUgRkNMIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5BcHBDb21wb25lbnQjZ2V0Um9vdENvbnRhaW5lclxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XG5cdCAqIEByZXR1cm5zICBBIHJlZmVyZW5jZSB0byBOYXZDb250YWluZXIgY29udHJvbCBvciB0aGUgRkNMIGNvbnRyb2xcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0Z2V0Um9vdENvbnRhaW5lcigpIHtcblx0XHRyZXR1cm4gKHRoaXMuZ2V0Um9vdENvbnRyb2woKSBhcyBWaWV3KS5nZXRDb250ZW50KClbMF07XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzdGFydHVwIG1vZGUgb2YgdGhlIGFwcC5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIHN0YXJ0dXAgbW9kZVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Z2V0U3RhcnR1cE1vZGUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5zdGFydHVwTW9kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHN0YXJ0dXAgbW9kZSBmb3IgdGhlIGFwcCB0byAnQ3JlYXRlJy5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHNldFN0YXJ0dXBNb2RlQ3JlYXRlKCkge1xuXHRcdHRoaXMuc3RhcnR1cE1vZGUgPSBTdGFydHVwTW9kZS5DcmVhdGU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBzdGFydHVwIG1vZGUgZm9yIHRoZSBhcHAgdG8gJ0RlZXBsaW5rJy5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHNldFN0YXJ0dXBNb2RlRGVlcGxpbmsoKSB7XG5cdFx0dGhpcy5zdGFydHVwTW9kZSA9IFN0YXJ0dXBNb2RlLkRlZXBsaW5rO1xuXHR9XG5cblx0aW5pdCgpIHtcblx0XHRjb25zdCB1aU1vZGVsID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRlZGl0TW9kZTogbGlicmFyeS5FZGl0TW9kZS5EaXNwbGF5LFxuXHRcdFx0aXNFZGl0YWJsZTogZmFsc2UsXG5cdFx0XHRkcmFmdFN0YXR1czogbGlicmFyeS5EcmFmdFN0YXR1cy5DbGVhcixcblx0XHRcdGJ1c3k6IGZhbHNlLFxuXHRcdFx0YnVzeUxvY2FsOiB7fSxcblx0XHRcdHBhZ2VzOiB7fVxuXHRcdH0pO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRwYWdlczoge31cblx0XHR9KTtcblx0XHQvLyBzZXQgdGhlIGJpbmRpbmcgT25lV2F5IGZvciB1aU1vZGVsIHRvIHByZXZlbnQgY2hhbmdlcyBpZiBjb250cm9sbGVyIGV4dGVuc2lvbnMgbW9kaWZ5IGEgYm91bmQgcHJvcGVydHkgb2YgYSBjb250cm9sXG5cdFx0dWlNb2RlbC5zZXREZWZhdWx0QmluZGluZ01vZGUoXCJPbmVXYXlcIik7XG5cdFx0Ly8gZm9yIGludGVybmFsIG1vZGVsIGJpbmRpbmcgbmVlZHMgdG8gYmUgdHdvIHdheVxuXHRcdE1vZGVsSGVscGVyLmVuaGFuY2VVaUpTT05Nb2RlbCh1aU1vZGVsLCBsaWJyYXJ5KTtcblx0XHRNb2RlbEhlbHBlci5lbmhhbmNlSW50ZXJuYWxKU09OTW9kZWwob0ludGVybmFsTW9kZWwpO1xuXG5cdFx0dGhpcy5zZXRNb2RlbCh1aU1vZGVsLCBcInVpXCIpO1xuXHRcdHRoaXMuc2V0TW9kZWwob0ludGVybmFsTW9kZWwsIFwiaW50ZXJuYWxcIik7XG5cblx0XHR0aGlzLmJJbml0aWFsaXplUm91dGluZyA9IHRoaXMuYkluaXRpYWxpemVSb3V0aW5nICE9PSB1bmRlZmluZWQgPyB0aGlzLmJJbml0aWFsaXplUm91dGluZyA6IHRydWU7XG5cdFx0dGhpcy5fb1JvdXRlclByb3h5ID0gbmV3IFJvdXRlclByb3h5KCk7XG5cdFx0dGhpcy5fb0FwcFN0YXRlSGFuZGxlciA9IG5ldyBBcHBTdGF0ZUhhbmRsZXIodGhpcyk7XG5cdFx0dGhpcy5fb0RpYWdub3N0aWNzID0gbmV3IERpYWdub3N0aWNzKCk7XG5cblx0XHRjb25zdCBvTW9kZWwgPSB0aGlzLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbDtcblx0XHRpZiAob01vZGVsICYmIG9Nb2RlbC5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNb2RlbFwiKSkge1xuXHRcdFx0dGhpcy5lbnRpdHlDb250YWluZXIgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkucmVxdWVzdE9iamVjdChcIi8kRW50aXR5Q29udGFpbmVyL1wiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gbm90IGFuIE9EYXRhIHY0IHNlcnZpY2Vcblx0XHRcdHRoaXMuZW50aXR5Q29udGFpbmVyID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb01hbmlmZXN0VUk1ID0gdGhpcy5nZXRNZXRhZGF0YSgpLmdldE1hbmlmZXN0RW50cnkoXCIvc2FwLnVpNVwiLCB0cnVlKTtcblx0XHRpZiAoXG5cdFx0XHRvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWUgPT09IE5BVkNPTkYuRkNMLlZJRVdOQU1FICYmXG5cdFx0XHRvTWFuaWZlc3RVSTUucm91dGluZy5jb25maWcucm91dGVyQ2xhc3MgPT09IE5BVkNPTkYuRkNMLlJPVVRFUkNMQVNTXG5cdFx0KSB7XG5cdFx0XHRMb2cuaW5mbyhgUm9vdGNvbnRhaW5lcjogXCIke05BVkNPTkYuRkNMLlZJRVdOQU1FfVwiIC0gUm91dGVyY2xhc3M6IFwiJHtOQVZDT05GLkZDTC5ST1VURVJDTEFTU31cImApO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWUgPT09IE5BVkNPTkYuTkFWQ09OVEFJTkVSLlZJRVdOQU1FICYmXG5cdFx0XHRvTWFuaWZlc3RVSTUucm91dGluZy5jb25maWcucm91dGVyQ2xhc3MgPT09IE5BVkNPTkYuTkFWQ09OVEFJTkVSLlJPVVRFUkNMQVNTXG5cdFx0KSB7XG5cdFx0XHRMb2cuaW5mbyhgUm9vdGNvbnRhaW5lcjogXCIke05BVkNPTkYuTkFWQ09OVEFJTkVSLlZJRVdOQU1FfVwiIC0gUm91dGVyY2xhc3M6IFwiJHtOQVZDT05GLk5BVkNPTlRBSU5FUi5ST1VURVJDTEFTU31cImApO1xuXHRcdH0gZWxzZSBpZiAob01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lLmluZGV4T2YoXCJzYXAuZmVcIikgIT09IC0xKSB7XG5cdFx0XHR0aHJvdyBFcnJvcihcblx0XHRcdFx0YFxcbldyb25nIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjb3VwbGUgKHJvb3RWaWV3L3JvdXRlckNsYXNzKSBpbiBtYW5pZmVzdCBmaWxlLlxcbmAgK1xuXHRcdFx0XHRcdGBDdXJyZW50IHZhbHVlcyBhcmUgOigke29NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZX0vJHtvTWFuaWZlc3RVSTUucm91dGluZy5jb25maWcucm91dGVyQ2xhc3N9KVxcbmAgK1xuXHRcdFx0XHRcdGBFeHBlY3RlZCB2YWx1ZXMgYXJlIFxcbmAgK1xuXHRcdFx0XHRcdGBcXHQgLSAoJHtOQVZDT05GLk5BVkNPTlRBSU5FUi5WSUVXTkFNRX0vJHtOQVZDT05GLk5BVkNPTlRBSU5FUi5ST1VURVJDTEFTU30pXFxuYCArXG5cdFx0XHRcdFx0YFxcdCAtICgke05BVkNPTkYuRkNMLlZJRVdOQU1FfS8ke05BVkNPTkYuRkNMLlJPVVRFUkNMQVNTfSlgXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cuaW5mbyhgUm9vdGNvbnRhaW5lcjogXCIke29NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZX1cIiAtIFJvdXRlcmNsYXNzOiBcIiR7TkFWQ09ORi5OQVZDT05UQUlORVIuUk9VVEVSQ0xBU1N9XCJgKTtcblx0XHR9XG5cblx0XHQvLyBBZGRpbmcgU2VtYW50aWMgRGF0ZSBPcGVyYXRvcnNcblx0XHQvLyBDb21tZW50aW5nIHNpbmNlIGl0IGlzIG5vdCBuZWVkZWQgZm9yIFNpbmdsZVJhbmdlXG5cdFx0U2VtYW50aWNEYXRlT3BlcmF0b3JzLmFkZFNlbWFudGljRGF0ZU9wZXJhdG9ycygpO1xuXG5cdFx0Ly8gdGhlIGluaXQgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgcm91dGluZyBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzIGFib3ZlXG5cdFx0Ly8gaXQgd2lsbCBjYWxsIHRoZSBjcmVhdGVDb250ZW50IGZ1bmN0aW9uIHRvIGluc3RhbnRpYXRlIHRoZSBSb290VmlldyBhbmQgYWRkIGl0IHRvIHRoZSBVSUNvbXBvbmVudCBhZ2dyZWdhdGlvbnNcblxuXHRcdHN1cGVyLmluaXQoKTtcblx0XHRBcHBDb21wb25lbnQuaW5zdGFuY2VNYXBbdGhpcy5nZXRJZCgpXSA9IHRoaXM7XG5cdH1cblx0b25TZXJ2aWNlc1N0YXJ0ZWQoKSB7XG5cdFx0Ly9yb3V0ZXIgbXVzdCBiZSBzdGFydGVkIG9uY2UgdGhlIHJvb3Rjb250YWluZXIgaXMgaW5pdGlhbGl6ZWRcblx0XHQvL3N0YXJ0aW5nIG9mIHRoZSByb3V0ZXJcblx0XHRjb25zdCBmaW5hbGl6ZWRSb3V0aW5nSW5pdGlhbGl6YXRpb24gPSAoKSA9PiB7XG5cdFx0XHR0aGlzLmVudGl0eUNvbnRhaW5lclxuXHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKCh0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIGFueSkuYXR0YWNoUm91dGVNYXRjaGVycykge1xuXHRcdFx0XHRcdFx0KHRoaXMuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgYW55KS5hdHRhY2hSb3V0ZU1hdGNoZXJzKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMuZ2V0Um91dGVyKCkuaW5pdGlhbGl6ZSgpO1xuXHRcdFx0XHRcdHRoaXMuZ2V0Um91dGVyUHJveHkoKS5pbml0KHRoaXMsIHRoaXMuX2lzRmNsRW5hYmxlZCgpKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKChlcnJvcjogYW55KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gKENvcmUgYXMgQ29yZUV4KS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKTtcblxuXHRcdFx0XHRcdCh0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIGFueSkuZGlzcGxheU1lc3NhZ2VQYWdlKFxuXHRcdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0FQUF9DT01QT05FTlRfU0FQRkVfQVBQU1RBUlRfVEVDSE5JQ0FMX0lTU1VFU1wiKSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGl0bGU6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfRVJST1JcIiksXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBlcnJvci5tZXNzYWdlLFxuXHRcdFx0XHRcdFx0XHRGQ0xMZXZlbDogMFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHRpZiAodGhpcy5iSW5pdGlhbGl6ZVJvdXRpbmcpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldFJvdXRpbmdTZXJ2aWNlKClcblx0XHRcdFx0LmluaXRpYWxpemVSb3V0aW5nKClcblx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdGlmICh0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmluYWxpemVkUm91dGluZ0luaXRpYWxpemF0aW9uKCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdCh0aGlzLmdldFJvb3RDb250cm9sKCkgYXMgYW55KS5hdHRhY2hBZnRlckluaXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRmaW5hbGl6ZWRSb3V0aW5nSW5pdGlhbGl6YXRpb24oKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnI6IGFueSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihgY2Fubm90IGNhbm5vdCBpbml0aWFsaXplIHJvdXRpbmc6ICR7ZXJyfWApO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0ZXhpdCgpIHtcblx0XHR0aGlzLl9vQXBwU3RhdGVIYW5kbGVyLmRlc3Ryb3koKTtcblx0XHR0aGlzLl9vUm91dGVyUHJveHkuZGVzdHJveSgpO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0ZGVsZXRlIHRoaXMuX29BcHBTdGF0ZUhhbmRsZXI7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRkZWxldGUgdGhpcy5fb1JvdXRlclByb3h5O1xuXHRcdGRlbGV0ZU1vZGVsQ2FjaGVEYXRhKHRoaXMuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdHRoaXMuZ2V0TW9kZWwoXCJ1aVwiKS5kZXN0cm95KCk7XG5cdH1cblx0Z2V0TWV0YU1vZGVsKCk6IE9EYXRhTWV0YU1vZGVsIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsO1xuXHR9XG5cdGdldERpYWdub3N0aWNzKCkge1xuXHRcdHJldHVybiB0aGlzLl9vRGlhZ25vc3RpY3M7XG5cdH1cblx0ZGVzdHJveSguLi5hcmdzOiBhbnlbXSkge1xuXHRcdC8vIExFQUtTLCB3aXRoIHdvcmthcm91bmQgZm9yIHNvbWUgRmxleCAvIE1EQyBpc3N1ZVxuXHRcdHRyeSB7XG5cdFx0XHQvLyBcdC8vIFRoaXMgb25lIGlzIG9ubHkgYSBsZWFrIGlmIHlvdSBkb24ndCBnbyBiYWNrIHRvIHRoZSBzYW1lIGNvbXBvbmVudCBpbiB0aGUgbG9uZyBydW5cblx0XHRcdC8vZGVsZXRlIHNhcC51aS5mbC5GbGV4Q29udHJvbGxlckZhY3RvcnkuX2NvbXBvbmVudEluc3RhbnRpYXRpb25Qcm9taXNlc1t0aGlzLmdldElkKCldO1xuXG5cdFx0XHRWYWx1ZUxpc3RIZWxwZXIuaW5pdGlhbGl6ZUNhY2hlZFZhbHVlSGVscCgpO1xuXG5cdFx0XHRkZWxldGUgQXBwQ29tcG9uZW50Lmluc3RhbmNlTWFwW3RoaXMuZ2V0SWQoKV07XG5cblx0XHRcdC8vIFx0dmFyIG9SZWdpc3RyeSA9IHNhcC51aS5tZGMucDEzbi5FbmdpbmUuZ2V0SW5zdGFuY2UoKS5fZ2V0UmVnaXN0cnkoKTtcblx0XHRcdC8vIFx0T2JqZWN0LmtleXMob1JlZ2lzdHJ5KS5mb3JFYWNoKGZ1bmN0aW9uKHNLZXkpIHtcblx0XHRcdC8vIFx0XHRPYmplY3Qua2V5cyhvUmVnaXN0cnlbc0tleV0uY29udHJvbGxlcikuZm9yRWFjaChmdW5jdGlvbihzQ29udHJvbGxlcktleSkge1xuXHRcdFx0Ly8gXHRcdFx0b1JlZ2lzdHJ5W3NLZXldLmNvbnRyb2xsZXJbc0NvbnRyb2xsZXJLZXldLmRlc3Ryb3koKTtcblx0XHRcdC8vIFx0XHR9KTtcblx0XHRcdC8vIFx0fSk7XG5cdFx0XHQvLyBcdHNhcC51aS5tZGMucDEzbi5FbmdpbmUuZ2V0SW5zdGFuY2UoKS5kZXN0cm95KCk7XG5cdFx0XHRkZWxldGUgKHdpbmRvdyBhcyBhbnkpLl9yb3V0aW5nO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy5pbmZvKGUgYXMgYW55KTtcblx0XHR9XG5cblx0XHQvL1dPUktBUk9VTkQgZm9yIHN0aWNreSBkaXNjYXJkIHJlcXVlc3QgOiBkdWUgdG8gYXN5bmMgY2FsbGJhY2ssIHJlcXVlc3QgdHJpZ2dlcmVkIGJ5IHRoZSBleGl0QXBwbGljYXRpb24gd2lsbCBiZSBzZW5kIGFmdGVyIHRoZSBVSUNvbXBvbmVudC5wcm90b3R5cGUuZGVzdHJveVxuXHRcdC8vc28gd2UgbmVlZCB0byBjb3B5IHRoZSBSZXF1ZXN0b3IgaGVhZGVycyBhcyBpdCB3aWxsIGJlIGRlc3Ryb3lcblxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0Y29uc3Qgb01haW5Nb2RlbCA9ICh0aGlzIGFzIGFueSkub01vZGVsc1t1bmRlZmluZWRdO1xuXHRcdGxldCBvSGVhZGVycztcblx0XHRpZiAob01haW5Nb2RlbC5vUmVxdWVzdG9yKSB7XG5cdFx0XHRvSGVhZGVycyA9IGpRdWVyeS5leHRlbmQoe30sIG9NYWluTW9kZWwub1JlcXVlc3Rvci5tSGVhZGVycyk7XG5cdFx0fVxuXG5cdFx0Ly8gQXMgd2UgbmVlZCB0byBjbGVhbnVwIHRoZSBhcHBsaWNhdGlvbiAvIGhhbmRsZSB0aGUgZGlydHkgb2JqZWN0IHdlIG5lZWQgdG8gY2FsbCBvdXIgY2xlYW51cCBiZWZvcmUgdGhlIG1vZGVscyBhcmUgZGVzdHJveWVkXG5cdFx0dGhpcy5nZXRSb3V0aW5nU2VydmljZSgpPy5iZWZvcmVFeGl0KCk7XG5cdFx0c3VwZXIuZGVzdHJveSguLi5hcmdzKTtcblx0XHRpZiAob0hlYWRlcnMgJiYgb01haW5Nb2RlbC5vUmVxdWVzdG9yKSB7XG5cdFx0XHRvTWFpbk1vZGVsLm9SZXF1ZXN0b3IubUhlYWRlcnMgPSBvSGVhZGVycztcblx0XHR9XG5cdH1cblx0Z2V0Q29tcG9uZW50RGF0YSgpOiBhbnkge1xuXHRcdHJldHVybiBzdXBlci5nZXRDb21wb25lbnREYXRhKCk7XG5cdH1cblx0Z2V0Um91dGluZ1NlcnZpY2UoKTogUm91dGluZ1NlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBSb3V0aW5nU2VydmljZTsgLy8gb3ZlcnJpZGVuIGF0IHJ1bnRpbWVcblx0fVxuXHRnZXRTaGVsbFNlcnZpY2VzKCk6IElTaGVsbFNlcnZpY2VzIHtcblx0XHRyZXR1cm4ge30gYXMgSVNoZWxsU2VydmljZXM7IC8vIG92ZXJyaWRlbiBhdCBydW50aW1lXG5cdH1cblx0Z2V0TmF2aWdhdGlvblNlcnZpY2UoKTogTmF2aWdhdGlvblNlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBOYXZpZ2F0aW9uU2VydmljZTsgLy8gb3ZlcnJpZGVuIGF0IHJ1bnRpbWVcblx0fVxuXHRnZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTogU2lkZUVmZmVjdHNTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgU2lkZUVmZmVjdHNTZXJ2aWNlO1xuXHR9XG5cdGdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk6IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzU2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIEVudmlyb25tZW50Q2FwYWJpbGl0aWVzU2VydmljZTtcblx0fVxuXG5cdGdldFN0YXJ0dXBQYXJhbWV0ZXJzKCkge1xuXHRcdGNvbnN0IG9Db21wb25lbnREYXRhID0gdGhpcy5nZXRDb21wb25lbnREYXRhKCk7XG5cdFx0Y29uc3Qgb1N0YXJ0VXBQYXJhbWV0ZXJzID0gKG9Db21wb25lbnREYXRhICYmIG9Db21wb25lbnREYXRhLnN0YXJ0dXBQYXJhbWV0ZXJzKSB8fCB7fTtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG9TdGFydFVwUGFyYW1ldGVycyk7XG5cdH1cblx0cmVzdG9yZSgpIHtcblx0XHQvLyBjYWxsZWQgYnkgRkxQIHdoZW4gYXBwIHNhcC1rZWVwLWFsaXZlIGlzIGVuYWJsZWQgYW5kIGFwcCBpcyByZXN0b3JlZFxuXHRcdCh0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIGFueSkudmlld1N0YXRlLm9uUmVzdG9yZSgpO1xuXHR9XG5cdHN1c3BlbmQoKSB7XG5cdFx0Ly8gY2FsbGVkIGJ5IEZMUCB3aGVuIGFwcCBzYXAta2VlcC1hbGl2ZSBpcyBlbmFibGVkIGFuZCBhcHAgaXMgc3VzcGVuZGVkXG5cdFx0KHRoaXMuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgYW55KS52aWV3U3RhdGUub25TdXNwZW5kKCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXBwQ29tcG9uZW50O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7O0VBd0JBLElBQU1BLFdBQVcsR0FBR0MsT0FBTyxDQUFDRCxXQUE1QjtFQUVBLElBQU1FLE9BQU8sR0FBRztJQUNmQyxHQUFHLEVBQUU7TUFDSkMsUUFBUSxFQUFFLHlDQUROO01BRUpDLFdBQVcsRUFBRTtJQUZULENBRFU7SUFLZkMsWUFBWSxFQUFFO01BQ2JGLFFBQVEsRUFBRSxrREFERztNQUViQyxXQUFXLEVBQUU7SUFGQTtFQUxDLENBQWhCO0VBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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
460
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdGFydHVwTW9kZSIsImxpYnJhcnkiLCJOQVZDT05GIiwiRkNMIiwiVklFV05BTUUiLCJWSUVXTkFNRV9DT01QQVRJQklMSVRZIiwiUk9VVEVSQ0xBU1MiLCJOQVZDT05UQUlORVIiLCJBcHBDb21wb25lbnQiLCJkZWZpbmVVSTVDbGFzcyIsImludGVyZmFjZXMiLCJjb25maWciLCJmdWxsV2lkdGgiLCJtYW5pZmVzdCIsInNlcnZpY2VzIiwicmVzb3VyY2VNb2RlbCIsImZhY3RvcnlOYW1lIiwicm91dGluZ1NlcnZpY2UiLCJzdGFydHVwIiwic2hlbGxTZXJ2aWNlcyIsIlNoZWxsVUlTZXJ2aWNlIiwibmF2aWdhdGlvblNlcnZpY2UiLCJlbnZpcm9ubWVudENhcGFiaWxpdGllcyIsInNpZGVFZmZlY3RzU2VydmljZSIsImFzeW5jQ29tcG9uZW50U2VydmljZSIsInJvb3RWaWV3Iiwidmlld05hbWUiLCJ0eXBlIiwiYXN5bmMiLCJpZCIsInJvdXRpbmciLCJjb250cm9sSWQiLCJyb3V0ZXJDbGFzcyIsInZpZXdUeXBlIiwiY29udHJvbEFnZ3JlZ2F0aW9uIiwiY29udGFpbmVyT3B0aW9ucyIsInByb3BhZ2F0ZU1vZGVsIiwiZGVzaWdudGltZSIsInN0YXJ0dXBNb2RlIiwiTm9ybWFsIiwiX2lzRmNsRW5hYmxlZCIsIm9NYW5pZmVzdFVJNSIsImdldE1hbmlmZXN0RW50cnkiLCJnZXRSb3V0ZXJQcm94eSIsIl9vUm91dGVyUHJveHkiLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJfb0FwcFN0YXRlSGFuZGxlciIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImdldFJvb3RDb250cm9sIiwiZ2V0Q29udHJvbGxlciIsImdldFJvb3RDb250YWluZXIiLCJnZXRDb250ZW50IiwiZ2V0U3RhcnR1cE1vZGUiLCJzZXRTdGFydHVwTW9kZUNyZWF0ZSIsIkNyZWF0ZSIsInNldFN0YXJ0dXBNb2RlQXV0b0NyZWF0ZSIsIkF1dG9DcmVhdGUiLCJzZXRTdGFydHVwTW9kZURlZXBsaW5rIiwiRGVlcGxpbmsiLCJpbml0IiwidWlNb2RlbCIsIkpTT05Nb2RlbCIsImVkaXRNb2RlIiwiRWRpdE1vZGUiLCJEaXNwbGF5IiwiaXNFZGl0YWJsZSIsImRyYWZ0U3RhdHVzIiwiRHJhZnRTdGF0dXMiLCJDbGVhciIsImJ1c3kiLCJidXN5TG9jYWwiLCJwYWdlcyIsIm9JbnRlcm5hbE1vZGVsIiwic2V0RGVmYXVsdEJpbmRpbmdNb2RlIiwiTW9kZWxIZWxwZXIiLCJlbmhhbmNlVWlKU09OTW9kZWwiLCJlbmhhbmNlSW50ZXJuYWxKU09OTW9kZWwiLCJzZXRNb2RlbCIsImJJbml0aWFsaXplUm91dGluZyIsInVuZGVmaW5lZCIsIlJvdXRlclByb3h5IiwiQXBwU3RhdGVIYW5kbGVyIiwiX29EaWFnbm9zdGljcyIsIkRpYWdub3N0aWNzIiwib01vZGVsIiwiZ2V0TW9kZWwiLCJpc0EiLCJlbnRpdHlDb250YWluZXIiLCJnZXRNZXRhTW9kZWwiLCJyZXF1ZXN0T2JqZWN0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJnZXRNYW5pZmVzdCIsIkxvZyIsImluZm8iLCJpbmRleE9mIiwiRXJyb3IiLCJTZW1hbnRpY0RhdGVPcGVyYXRvcnMiLCJhZGRTZW1hbnRpY0RhdGVPcGVyYXRvcnMiLCJpbnN0YW5jZU1hcCIsImdldElkIiwib25TZXJ2aWNlc1N0YXJ0ZWQiLCJmaW5hbGl6ZWRSb3V0aW5nSW5pdGlhbGl6YXRpb24iLCJ0aGVuIiwiYXR0YWNoUm91dGVNYXRjaGVycyIsImdldFJvdXRlciIsImluaXRpYWxpemUiLCJjYXRjaCIsImVycm9yIiwib1Jlc291cmNlQnVuZGxlIiwiQ29yZSIsImdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZSIsImRpc3BsYXlNZXNzYWdlUGFnZSIsImdldFRleHQiLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibWVzc2FnZSIsIkZDTExldmVsIiwiZ2V0Um91dGluZ1NlcnZpY2UiLCJpbml0aWFsaXplUm91dGluZyIsImF0dGFjaEFmdGVySW5pdCIsImVyciIsImV4aXQiLCJkZXN0cm95IiwiZGVsZXRlTW9kZWxDYWNoZURhdGEiLCJnZXREaWFnbm9zdGljcyIsIlZhbHVlTGlzdEhlbHBlciIsImluaXRpYWxpemVDYWNoZWRWYWx1ZUhlbHAiLCJ3aW5kb3ciLCJfcm91dGluZyIsImUiLCJvTWFpbk1vZGVsIiwib01vZGVscyIsIm9IZWFkZXJzIiwib1JlcXVlc3RvciIsImpRdWVyeSIsImV4dGVuZCIsIm1IZWFkZXJzIiwiYmVmb3JlRXhpdCIsImFyZ3MiLCJnZXRDb21wb25lbnREYXRhIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImdldE5hdmlnYXRpb25TZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRTdGFydHVwUGFyYW1ldGVycyIsIm9Db21wb25lbnREYXRhIiwib1N0YXJ0VXBQYXJhbWV0ZXJzIiwic3RhcnR1cFBhcmFtZXRlcnMiLCJyZXN0b3JlIiwidmlld1N0YXRlIiwib25SZXN0b3JlIiwic3VzcGVuZCIsIm9uU3VzcGVuZCIsIlVJQ29tcG9uZW50Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBcHBDb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgQXBwU3RhdGVIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9BcHBTdGF0ZUhhbmRsZXJcIjtcbmltcG9ydCBSb3V0ZXJQcm94eSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvcm91dGluZy9Sb3V0ZXJQcm94eVwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IGxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0Vudmlyb25tZW50U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvTmF2aWdhdGlvblNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IFJvdXRpbmdTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1JvdXRpbmdTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBJU2hlbGxTZXJ2aWNlcyB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaGVsbFNlcnZpY2VzRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBTaWRlRWZmZWN0c1NlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IERpYWdub3N0aWNzIGZyb20gXCJzYXAvZmUvY29yZS9zdXBwb3J0L0RpYWdub3N0aWNzXCI7XG5pbXBvcnQgVmFsdWVMaXN0SGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9WYWx1ZUxpc3RIZWxwZXJcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IFVJQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9VSUNvbXBvbmVudFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgQmFzZUNvbnRyb2xsZXIgZnJvbSBcIi4vQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IGRlbGV0ZU1vZGVsQ2FjaGVEYXRhIH0gZnJvbSBcIi4vY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCBTZW1hbnRpY0RhdGVPcGVyYXRvcnMgZnJvbSBcIi4vaGVscGVycy9TZW1hbnRpY0RhdGVPcGVyYXRvcnNcIjtcblxuY29uc3QgU3RhcnR1cE1vZGUgPSBsaWJyYXJ5LlN0YXJ0dXBNb2RlO1xuXG5jb25zdCBOQVZDT05GID0ge1xuXHRGQ0w6IHtcblx0XHRWSUVXTkFNRTogXCJzYXAuZmUuY29yZS5yb290Vmlldy5GY2xcIixcblx0XHRWSUVXTkFNRV9DT01QQVRJQklMSVRZOiBcInNhcC5mZS50ZW1wbGF0ZXMuUm9vdENvbnRhaW5lci52aWV3LkZjbFwiLFxuXHRcdFJPVVRFUkNMQVNTOiBcInNhcC5mLnJvdXRpbmcuUm91dGVyXCJcblx0fSxcblx0TkFWQ09OVEFJTkVSOiB7XG5cdFx0VklFV05BTUU6IFwic2FwLmZlLmNvcmUucm9vdFZpZXcuTmF2Q29udGFpbmVyXCIsXG5cdFx0VklFV05BTUVfQ09NUEFUSUJJTElUWTogXCJzYXAuZmUudGVtcGxhdGVzLlJvb3RDb250YWluZXIudmlldy5OYXZDb250YWluZXJcIixcblx0XHRST1VURVJDTEFTUzogXCJzYXAubS5yb3V0aW5nLlJvdXRlclwiXG5cdH1cbn07XG5cbi8qKlxuICogTWFpbiBjbGFzcyBmb3IgY29tcG9uZW50cyB1c2VkIGZvciBhbiBhcHBsaWNhdGlvbiBpbiBTQVAgRmlvcmkgZWxlbWVudHMuXG4gKlxuICogQXBwbGljYXRpb24gZGV2ZWxvcGVycyB1c2luZyB0aGUgdGVtcGxhdGVzIGFuZCBidWlsZGluZyBibG9ja3MgcHJvdmlkZWQgYnkgU0FQIEZpb3JpIGVsZW1lbnRzIHNob3VsZCBjcmVhdGUgdGhlaXIgYXBwcyBieSBleHRlbmRpbmcgdGhpcyBjb21wb25lbnQuXG4gKiBUaGlzIGVuc3VyZXMgdGhhdCBhbGwgdGhlIG5lY2Vzc2FyeSBzZXJ2aWNlcyB0aGF0IHlvdSBuZWVkIGZvciB0aGUgYnVpbGRpbmcgYmxvY2tzIGFuZCB0ZW1wbGF0ZXMgdG8gd29yayBwcm9wZXJseSBhcmUgc3RhcnRlZC5cbiAqXG4gKiBXaGVuIHlvdSB1c2Ugc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50IGFzIHRoZSBiYXNlIGNvbXBvbmVudCwgeW91IGFsc28gbmVlZCB0byB1c2UgYSByb290Vmlldy4gU0FQIEZpb3JpIGVsZW1lbnRzIHByb3ZpZGVzIHR3byBvcHRpb25zOiA8YnIvPlxuICogIC0gc2FwLmZlLmNvcmUucm9vdFZpZXcuTmF2Q29udGFpbmVyIHdoZW4gdXNpbmcgc2FwLm0ucm91dGluZy5Sb3V0ZXIgPGJyLz5cbiAqICAtIHNhcC5mZS5jb3JlLnJvb3RWaWV3LkZjbCB3aGVuIHVzaW5nIHNhcC5mLnJvdXRpbmcuUm91dGVyIChGQ0wgdXNlIGNhc2UpIDxici8+XG4gKlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICogQG5hbWUgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLkFwcENvbXBvbmVudFwiLCB7XG5cdGludGVyZmFjZXM6IFtcInNhcC51aS5jb3JlLklBc3luY0NvbnRlbnRDcmVhdGlvblwiXSxcblx0Y29uZmlnOiB7XG5cdFx0ZnVsbFdpZHRoOiB0cnVlXG5cdH0sXG5cdG1hbmlmZXN0OiB7XG5cdFx0XCJzYXAudWk1XCI6IHtcblx0XHRcdHNlcnZpY2VzOiB7XG5cdFx0XHRcdHJlc291cmNlTW9kZWw6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5SZXNvdXJjZU1vZGVsU2VydmljZVwiLFxuXHRcdFx0XHRcdFwic3RhcnR1cFwiOiBcIndhaXRGb3JcIixcblx0XHRcdFx0XHRcInNldHRpbmdzXCI6IHtcblx0XHRcdFx0XHRcdFwiYnVuZGxlc1wiOiBbXCJzYXAuZmUuY29yZS5tZXNzYWdlYnVuZGxlXCJdLFxuXHRcdFx0XHRcdFx0XCJtb2RlbE5hbWVcIjogXCJzYXAuZmUuaTE4blwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRyb3V0aW5nU2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlJvdXRpbmdTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0c2hlbGxTZXJ2aWNlczoge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlNoZWxsU2VydmljZXNcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRTaGVsbFVJU2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC51c2hlbGwudWk1c2VydmljZS5TaGVsbFVJU2VydmljZVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG5hdmlnYXRpb25TZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuTmF2aWdhdGlvblNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRlbnZpcm9ubWVudENhcGFiaWxpdGllczoge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLkVudmlyb25tZW50U2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNpZGVFZmZlY3RzU2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlNpZGVFZmZlY3RzU2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFzeW5jQ29tcG9uZW50U2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLkFzeW5jQ29tcG9uZW50U2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRyb290Vmlldzoge1xuXHRcdFx0XHR2aWV3TmFtZTogTkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUUsXG5cdFx0XHRcdHR5cGU6IFwiWE1MXCIsXG5cdFx0XHRcdGFzeW5jOiB0cnVlLFxuXHRcdFx0XHRpZDogXCJhcHBSb290Vmlld1wiXG5cdFx0XHR9LFxuXHRcdFx0cm91dGluZzoge1xuXHRcdFx0XHRjb25maWc6IHtcblx0XHRcdFx0XHRjb250cm9sSWQ6IFwiYXBwQ29udGVudFwiLFxuXHRcdFx0XHRcdHJvdXRlckNsYXNzOiBOQVZDT05GLk5BVkNPTlRBSU5FUi5ST1VURVJDTEFTUyxcblx0XHRcdFx0XHR2aWV3VHlwZTogXCJYTUxcIixcblx0XHRcdFx0XHRjb250cm9sQWdncmVnYXRpb246IFwicGFnZXNcIixcblx0XHRcdFx0XHRhc3luYzogdHJ1ZSxcblx0XHRcdFx0XHRjb250YWluZXJPcHRpb25zOiB7XG5cdFx0XHRcdFx0XHRwcm9wYWdhdGVNb2RlbDogdHJ1ZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0ZGVzaWdudGltZTogXCJzYXAvZmUvY29yZS9kZXNpZ250aW1lL0FwcENvbXBvbmVudC5kZXNpZ250aW1lXCIsXG5cblx0bGlicmFyeTogXCJzYXAuZmUuY29yZVwiXG59KVxuY2xhc3MgQXBwQ29tcG9uZW50IGV4dGVuZHMgVUlDb21wb25lbnQge1xuXHRzdGF0aWMgaW5zdGFuY2VNYXA6IFJlY29yZDxzdHJpbmcsIEFwcENvbXBvbmVudD4gPSB7fTtcblx0cHJpdmF0ZSBfb1JvdXRlclByb3h5ITogUm91dGVyUHJveHk7XG5cdHByaXZhdGUgX29BcHBTdGF0ZUhhbmRsZXIhOiBBcHBTdGF0ZUhhbmRsZXI7XG5cdHByaXZhdGUgYkluaXRpYWxpemVSb3V0aW5nPzogYm9vbGVhbjtcblx0cHJpdmF0ZSBfb0RpYWdub3N0aWNzITogRGlhZ25vc3RpY3M7XG5cdHByaXZhdGUgZW50aXR5Q29udGFpbmVyOiBhbnk7XG5cdHByaXZhdGUgc3RhcnR1cE1vZGU6IHN0cmluZyA9IFN0YXJ0dXBNb2RlLk5vcm1hbDtcblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50LmdldE1ldGFkYXRhXG5cdCAqIEBmdW5jdGlvblxuXHQgKi9cblxuXHRfaXNGY2xFbmFibGVkKCkge1xuXHRcdGNvbnN0IG9NYW5pZmVzdFVJNSA9IHRoaXMuZ2V0TWFuaWZlc3RFbnRyeShcIi9zYXAudWk1XCIpO1xuXHRcdHJldHVybiAoXG5cdFx0XHRvTWFuaWZlc3RVSTU/LnJvb3RWaWV3Py52aWV3TmFtZSA9PT0gTkFWQ09ORi5GQ0wuVklFV05BTUUgfHxcblx0XHRcdG9NYW5pZmVzdFVJNT8ucm9vdFZpZXc/LnZpZXdOYW1lID09PSBOQVZDT05GLkZDTC5WSUVXTkFNRV9DT01QQVRJQklMSVRZXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIFJvdXRlclByb3h5LlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50I2dldFJvdXRlclByb3h5XG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5BcHBDb21wb25lbnRcblx0ICogQHJldHVybnMgQSBSZWZlcmVuY2UgdG8gdGhlIFJvdXRlclByb3h5XG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdGdldFJvdXRlclByb3h5KCk6IFJvdXRlclByb3h5IHtcblx0XHRyZXR1cm4gdGhpcy5fb1JvdXRlclByb3h5O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgQXBwU3RhdGVIYW5kbGVyLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50I2dldEFwcFN0YXRlSGFuZGxlclxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XG5cdCAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBBcHBTdGF0ZUhhbmRsZXJcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0Z2V0QXBwU3RhdGVIYW5kbGVyKCkge1xuXHRcdHJldHVybiB0aGlzLl9vQXBwU3RhdGVIYW5kbGVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgbmF2L0ZDTCBDb250cm9sbGVyLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50I2dldFJvb3RWaWV3Q29udHJvbGxlclxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XG5cdCAqIEByZXR1cm5zICBBIHJlZmVyZW5jZSB0byB0aGUgRkNMIENvbnRyb2xsZXJcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0Z2V0Um9vdFZpZXdDb250cm9sbGVyKCk6IEJhc2VDb250cm9sbGVyIHtcblx0XHRyZXR1cm4gKHRoaXMuZ2V0Um9vdENvbnRyb2woKSBhcyBWaWV3KS5nZXRDb250cm9sbGVyKCkgYXMgQmFzZUNvbnRyb2xsZXI7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBOYXZDb250YWluZXIgY29udHJvbCBvciB0aGUgRkNMIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5BcHBDb21wb25lbnQjZ2V0Um9vdENvbnRhaW5lclxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XG5cdCAqIEByZXR1cm5zICBBIHJlZmVyZW5jZSB0byBOYXZDb250YWluZXIgY29udHJvbCBvciB0aGUgRkNMIGNvbnRyb2xcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0Z2V0Um9vdENvbnRhaW5lcigpIHtcblx0XHRyZXR1cm4gKHRoaXMuZ2V0Um9vdENvbnRyb2woKSBhcyBWaWV3KS5nZXRDb250ZW50KClbMF07XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzdGFydHVwIG1vZGUgb2YgdGhlIGFwcC5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIHN0YXJ0dXAgbW9kZVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Z2V0U3RhcnR1cE1vZGUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5zdGFydHVwTW9kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHN0YXJ0dXAgbW9kZSBmb3IgdGhlIGFwcCB0byAnQ3JlYXRlJy5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHNldFN0YXJ0dXBNb2RlQ3JlYXRlKCkge1xuXHRcdHRoaXMuc3RhcnR1cE1vZGUgPSBTdGFydHVwTW9kZS5DcmVhdGU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBzdGFydHVwIG1vZGUgZm9yIHRoZSBhcHAgdG8gJ0F1dG9DcmVhdGUnLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0c2V0U3RhcnR1cE1vZGVBdXRvQ3JlYXRlKCkge1xuXHRcdHRoaXMuc3RhcnR1cE1vZGUgPSBTdGFydHVwTW9kZS5BdXRvQ3JlYXRlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgc3RhcnR1cCBtb2RlIGZvciB0aGUgYXBwIHRvICdEZWVwbGluaycuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRzZXRTdGFydHVwTW9kZURlZXBsaW5rKCkge1xuXHRcdHRoaXMuc3RhcnR1cE1vZGUgPSBTdGFydHVwTW9kZS5EZWVwbGluaztcblx0fVxuXG5cdGluaXQoKSB7XG5cdFx0Y29uc3QgdWlNb2RlbCA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0ZWRpdE1vZGU6IGxpYnJhcnkuRWRpdE1vZGUuRGlzcGxheSxcblx0XHRcdGlzRWRpdGFibGU6IGZhbHNlLFxuXHRcdFx0ZHJhZnRTdGF0dXM6IGxpYnJhcnkuRHJhZnRTdGF0dXMuQ2xlYXIsXG5cdFx0XHRidXN5OiBmYWxzZSxcblx0XHRcdGJ1c3lMb2NhbDoge30sXG5cdFx0XHRwYWdlczoge31cblx0XHR9KTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbCA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0cGFnZXM6IHt9XG5cdFx0fSk7XG5cdFx0Ly8gc2V0IHRoZSBiaW5kaW5nIE9uZVdheSBmb3IgdWlNb2RlbCB0byBwcmV2ZW50IGNoYW5nZXMgaWYgY29udHJvbGxlciBleHRlbnNpb25zIG1vZGlmeSBhIGJvdW5kIHByb3BlcnR5IG9mIGEgY29udHJvbFxuXHRcdHVpTW9kZWwuc2V0RGVmYXVsdEJpbmRpbmdNb2RlKFwiT25lV2F5XCIpO1xuXHRcdC8vIGZvciBpbnRlcm5hbCBtb2RlbCBiaW5kaW5nIG5lZWRzIHRvIGJlIHR3byB3YXlcblx0XHRNb2RlbEhlbHBlci5lbmhhbmNlVWlKU09OTW9kZWwodWlNb2RlbCwgbGlicmFyeSk7XG5cdFx0TW9kZWxIZWxwZXIuZW5oYW5jZUludGVybmFsSlNPTk1vZGVsKG9JbnRlcm5hbE1vZGVsKTtcblxuXHRcdHRoaXMuc2V0TW9kZWwodWlNb2RlbCwgXCJ1aVwiKTtcblx0XHR0aGlzLnNldE1vZGVsKG9JbnRlcm5hbE1vZGVsLCBcImludGVybmFsXCIpO1xuXG5cdFx0dGhpcy5iSW5pdGlhbGl6ZVJvdXRpbmcgPSB0aGlzLmJJbml0aWFsaXplUm91dGluZyAhPT0gdW5kZWZpbmVkID8gdGhpcy5iSW5pdGlhbGl6ZVJvdXRpbmcgOiB0cnVlO1xuXHRcdHRoaXMuX29Sb3V0ZXJQcm94eSA9IG5ldyBSb3V0ZXJQcm94eSgpO1xuXHRcdHRoaXMuX29BcHBTdGF0ZUhhbmRsZXIgPSBuZXcgQXBwU3RhdGVIYW5kbGVyKHRoaXMpO1xuXHRcdHRoaXMuX29EaWFnbm9zdGljcyA9IG5ldyBEaWFnbm9zdGljcygpO1xuXG5cdFx0Y29uc3Qgb01vZGVsID0gdGhpcy5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWw7XG5cdFx0aWYgKG9Nb2RlbD8uaXNBPy4oXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNb2RlbFwiKSkge1xuXHRcdFx0dGhpcy5lbnRpdHlDb250YWluZXIgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkucmVxdWVzdE9iamVjdChcIi8kRW50aXR5Q29udGFpbmVyL1wiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gbm90IGFuIE9EYXRhIHY0IHNlcnZpY2Vcblx0XHRcdHRoaXMuZW50aXR5Q29udGFpbmVyID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb01hbmlmZXN0VUk1ID0gKHRoaXMuZ2V0TWFuaWZlc3QoKSBhcyBhbnkpW1wic2FwLnVpNVwiXTtcblx0XHRpZiAob01hbmlmZXN0VUk1Py5yb290Vmlldz8udmlld05hbWUpIHtcblx0XHRcdC8vIFRoZSBhcHBsaWNhdGlvbiBzcGVjaWZpZWQgYW4gb3duIHJvb3QgdmlldyBpbiB0aGUgbWFuaWZlc3RcblxuXHRcdFx0Ly8gUm9vdCBWaWV3IHdhcyBtb3ZlZCBmcm9tIHNhcC5mZS50ZW1wbGF0ZXMgdG8gc2FwLmZlLmNvcmUgLSBrZWVwIGl0IGNvbXBhdGlibGVcblx0XHRcdGlmIChvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWUgPT09IE5BVkNPTkYuRkNMLlZJRVdOQU1FX0NPTVBBVElCSUxJVFkpIHtcblx0XHRcdFx0b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lID0gTkFWQ09ORi5GQ0wuVklFV05BTUU7XG5cdFx0XHR9IGVsc2UgaWYgKG9NYW5pZmVzdFVJNT8ucm9vdFZpZXcudmlld05hbWUgPT09IE5BVkNPTkYuTkFWQ09OVEFJTkVSLlZJRVdOQU1FX0NPTVBBVElCSUxJVFkpIHtcblx0XHRcdFx0b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lID0gTkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChcblx0XHRcdFx0b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lID09PSBOQVZDT05GLkZDTC5WSUVXTkFNRSAmJlxuXHRcdFx0XHRvTWFuaWZlc3RVSTUucm91dGluZy5jb25maWcucm91dGVyQ2xhc3MgPT09IE5BVkNPTkYuRkNMLlJPVVRFUkNMQVNTXG5cdFx0XHQpIHtcblx0XHRcdFx0TG9nLmluZm8oYFJvb3Rjb250YWluZXI6IFwiJHtOQVZDT05GLkZDTC5WSUVXTkFNRX1cIiAtIFJvdXRlcmNsYXNzOiBcIiR7TkFWQ09ORi5GQ0wuUk9VVEVSQ0xBU1N9XCJgKTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdG9NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZSA9PT0gTkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUUgJiZcblx0XHRcdFx0b01hbmlmZXN0VUk1LnJvdXRpbmcuY29uZmlnLnJvdXRlckNsYXNzID09PSBOQVZDT05GLk5BVkNPTlRBSU5FUi5ST1VURVJDTEFTU1xuXHRcdFx0KSB7XG5cdFx0XHRcdExvZy5pbmZvKGBSb290Y29udGFpbmVyOiBcIiR7TkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUV9XCIgLSBSb3V0ZXJjbGFzczogXCIke05BVkNPTkYuTkFWQ09OVEFJTkVSLlJPVVRFUkNMQVNTfVwiYCk7XG5cdFx0XHR9IGVsc2UgaWYgKG9NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZS5pbmRleE9mKFwic2FwLmZlLmNvcmUucm9vdFZpZXdcIikgIT09IC0xKSB7XG5cdFx0XHRcdHRocm93IEVycm9yKFxuXHRcdFx0XHRcdGBcXG5Xcm9uZyBjb25maWd1cmF0aW9uIGZvciB0aGUgY291cGxlIChyb290Vmlldy9yb3V0ZXJDbGFzcykgaW4gbWFuaWZlc3QgZmlsZS5cXG5gICtcblx0XHRcdFx0XHRcdGBDdXJyZW50IHZhbHVlcyBhcmUgOigke29NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZX0vJHtvTWFuaWZlc3RVSTUucm91dGluZy5jb25maWcucm91dGVyQ2xhc3N9KVxcbmAgK1xuXHRcdFx0XHRcdFx0YEV4cGVjdGVkIHZhbHVlcyBhcmUgXFxuYCArXG5cdFx0XHRcdFx0XHRgXFx0IC0gKCR7TkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUV9LyR7TkFWQ09ORi5OQVZDT05UQUlORVIuUk9VVEVSQ0xBU1N9KVxcbmAgK1xuXHRcdFx0XHRcdFx0YFxcdCAtICgke05BVkNPTkYuRkNMLlZJRVdOQU1FfS8ke05BVkNPTkYuRkNMLlJPVVRFUkNMQVNTfSlgXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRMb2cuaW5mbyhgUm9vdGNvbnRhaW5lcjogXCIke29NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZX1cIiAtIFJvdXRlcmNsYXNzOiBcIiR7TkFWQ09ORi5OQVZDT05UQUlORVIuUk9VVEVSQ0xBU1N9XCJgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBZGRpbmcgU2VtYW50aWMgRGF0ZSBPcGVyYXRvcnNcblx0XHQvLyBDb21tZW50aW5nIHNpbmNlIGl0IGlzIG5vdCBuZWVkZWQgZm9yIFNpbmdsZVJhbmdlXG5cdFx0U2VtYW50aWNEYXRlT3BlcmF0b3JzLmFkZFNlbWFudGljRGF0ZU9wZXJhdG9ycygpO1xuXG5cdFx0Ly8gdGhlIGluaXQgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgcm91dGluZyBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzIGFib3ZlXG5cdFx0Ly8gaXQgd2lsbCBjYWxsIHRoZSBjcmVhdGVDb250ZW50IGZ1bmN0aW9uIHRvIGluc3RhbnRpYXRlIHRoZSBSb290VmlldyBhbmQgYWRkIGl0IHRvIHRoZSBVSUNvbXBvbmVudCBhZ2dyZWdhdGlvbnNcblxuXHRcdHN1cGVyLmluaXQoKTtcblx0XHRBcHBDb21wb25lbnQuaW5zdGFuY2VNYXBbdGhpcy5nZXRJZCgpXSA9IHRoaXM7XG5cdH1cblx0b25TZXJ2aWNlc1N0YXJ0ZWQoKSB7XG5cdFx0Ly9yb3V0ZXIgbXVzdCBiZSBzdGFydGVkIG9uY2UgdGhlIHJvb3Rjb250YWluZXIgaXMgaW5pdGlhbGl6ZWRcblx0XHQvL3N0YXJ0aW5nIG9mIHRoZSByb3V0ZXJcblx0XHRjb25zdCBmaW5hbGl6ZWRSb3V0aW5nSW5pdGlhbGl6YXRpb24gPSAoKSA9PiB7XG5cdFx0XHR0aGlzLmVudGl0eUNvbnRhaW5lclxuXHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKCh0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIGFueSkuYXR0YWNoUm91dGVNYXRjaGVycykge1xuXHRcdFx0XHRcdFx0KHRoaXMuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgYW55KS5hdHRhY2hSb3V0ZU1hdGNoZXJzKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMuZ2V0Um91dGVyKCkuaW5pdGlhbGl6ZSgpO1xuXHRcdFx0XHRcdHRoaXMuZ2V0Um91dGVyUHJveHkoKS5pbml0KHRoaXMsIHRoaXMuX2lzRmNsRW5hYmxlZCgpKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKChlcnJvcjogYW55KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gQ29yZS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKTtcblxuXHRcdFx0XHRcdCh0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIGFueSkuZGlzcGxheU1lc3NhZ2VQYWdlKFxuXHRcdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0FQUF9DT01QT05FTlRfU0FQRkVfQVBQU1RBUlRfVEVDSE5JQ0FMX0lTU1VFU1wiKSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGl0bGU6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfRVJST1JcIiksXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBlcnJvci5tZXNzYWdlLFxuXHRcdFx0XHRcdFx0XHRGQ0xMZXZlbDogMFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHRpZiAodGhpcy5iSW5pdGlhbGl6ZVJvdXRpbmcpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldFJvdXRpbmdTZXJ2aWNlKClcblx0XHRcdFx0LmluaXRpYWxpemVSb3V0aW5nKClcblx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdGlmICh0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmluYWxpemVkUm91dGluZ0luaXRpYWxpemF0aW9uKCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdCh0aGlzLmdldFJvb3RDb250cm9sKCkgYXMgYW55KS5hdHRhY2hBZnRlckluaXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRmaW5hbGl6ZWRSb3V0aW5nSW5pdGlhbGl6YXRpb24oKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnI6IGFueSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihgY2Fubm90IGNhbm5vdCBpbml0aWFsaXplIHJvdXRpbmc6ICR7ZXJyfWApO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0ZXhpdCgpIHtcblx0XHR0aGlzLl9vQXBwU3RhdGVIYW5kbGVyLmRlc3Ryb3koKTtcblx0XHR0aGlzLl9vUm91dGVyUHJveHkuZGVzdHJveSgpO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0ZGVsZXRlIHRoaXMuX29BcHBTdGF0ZUhhbmRsZXI7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRkZWxldGUgdGhpcy5fb1JvdXRlclByb3h5O1xuXHRcdGRlbGV0ZU1vZGVsQ2FjaGVEYXRhKHRoaXMuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdHRoaXMuZ2V0TW9kZWwoXCJ1aVwiKS5kZXN0cm95KCk7XG5cdH1cblx0Z2V0TWV0YU1vZGVsKCk6IE9EYXRhTWV0YU1vZGVsIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsO1xuXHR9XG5cdGdldERpYWdub3N0aWNzKCkge1xuXHRcdHJldHVybiB0aGlzLl9vRGlhZ25vc3RpY3M7XG5cdH1cblx0ZGVzdHJveSguLi5hcmdzOiBhbnlbXSkge1xuXHRcdC8vIExFQUtTLCB3aXRoIHdvcmthcm91bmQgZm9yIHNvbWUgRmxleCAvIE1EQyBpc3N1ZVxuXHRcdHRyeSB7XG5cdFx0XHQvLyBcdC8vIFRoaXMgb25lIGlzIG9ubHkgYSBsZWFrIGlmIHlvdSBkb24ndCBnbyBiYWNrIHRvIHRoZSBzYW1lIGNvbXBvbmVudCBpbiB0aGUgbG9uZyBydW5cblx0XHRcdC8vZGVsZXRlIHNhcC51aS5mbC5GbGV4Q29udHJvbGxlckZhY3RvcnkuX2NvbXBvbmVudEluc3RhbnRpYXRpb25Qcm9taXNlc1t0aGlzLmdldElkKCldO1xuXG5cdFx0XHRWYWx1ZUxpc3RIZWxwZXIuaW5pdGlhbGl6ZUNhY2hlZFZhbHVlSGVscCgpO1xuXG5cdFx0XHRkZWxldGUgQXBwQ29tcG9uZW50Lmluc3RhbmNlTWFwW3RoaXMuZ2V0SWQoKV07XG5cblx0XHRcdC8vIFx0dmFyIG9SZWdpc3RyeSA9IHNhcC51aS5tZGMucDEzbi5FbmdpbmUuZ2V0SW5zdGFuY2UoKS5fZ2V0UmVnaXN0cnkoKTtcblx0XHRcdC8vIFx0T2JqZWN0LmtleXMob1JlZ2lzdHJ5KS5mb3JFYWNoKGZ1bmN0aW9uKHNLZXkpIHtcblx0XHRcdC8vIFx0XHRPYmplY3Qua2V5cyhvUmVnaXN0cnlbc0tleV0uY29udHJvbGxlcikuZm9yRWFjaChmdW5jdGlvbihzQ29udHJvbGxlcktleSkge1xuXHRcdFx0Ly8gXHRcdFx0b1JlZ2lzdHJ5W3NLZXldLmNvbnRyb2xsZXJbc0NvbnRyb2xsZXJLZXldLmRlc3Ryb3koKTtcblx0XHRcdC8vIFx0XHR9KTtcblx0XHRcdC8vIFx0fSk7XG5cdFx0XHQvLyBcdHNhcC51aS5tZGMucDEzbi5FbmdpbmUuZ2V0SW5zdGFuY2UoKS5kZXN0cm95KCk7XG5cdFx0XHRkZWxldGUgKHdpbmRvdyBhcyBhbnkpLl9yb3V0aW5nO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy5pbmZvKGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cblx0XHQvL1dPUktBUk9VTkQgZm9yIHN0aWNreSBkaXNjYXJkIHJlcXVlc3QgOiBkdWUgdG8gYXN5bmMgY2FsbGJhY2ssIHJlcXVlc3QgdHJpZ2dlcmVkIGJ5IHRoZSBleGl0QXBwbGljYXRpb24gd2lsbCBiZSBzZW5kIGFmdGVyIHRoZSBVSUNvbXBvbmVudC5wcm90b3R5cGUuZGVzdHJveVxuXHRcdC8vc28gd2UgbmVlZCB0byBjb3B5IHRoZSBSZXF1ZXN0b3IgaGVhZGVycyBhcyBpdCB3aWxsIGJlIGRlc3Ryb3lcblxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0Y29uc3Qgb01haW5Nb2RlbCA9ICh0aGlzIGFzIGFueSkub01vZGVsc1t1bmRlZmluZWRdO1xuXHRcdGxldCBvSGVhZGVycztcblx0XHRpZiAob01haW5Nb2RlbC5vUmVxdWVzdG9yKSB7XG5cdFx0XHRvSGVhZGVycyA9IGpRdWVyeS5leHRlbmQoe30sIG9NYWluTW9kZWwub1JlcXVlc3Rvci5tSGVhZGVycyk7XG5cdFx0fVxuXG5cdFx0Ly8gQXMgd2UgbmVlZCB0byBjbGVhbnVwIHRoZSBhcHBsaWNhdGlvbiAvIGhhbmRsZSB0aGUgZGlydHkgb2JqZWN0IHdlIG5lZWQgdG8gY2FsbCBvdXIgY2xlYW51cCBiZWZvcmUgdGhlIG1vZGVscyBhcmUgZGVzdHJveWVkXG5cdFx0dGhpcy5nZXRSb3V0aW5nU2VydmljZSgpPy5iZWZvcmVFeGl0KCk7XG5cdFx0c3VwZXIuZGVzdHJveSguLi5hcmdzKTtcblx0XHRpZiAob0hlYWRlcnMgJiYgb01haW5Nb2RlbC5vUmVxdWVzdG9yKSB7XG5cdFx0XHRvTWFpbk1vZGVsLm9SZXF1ZXN0b3IubUhlYWRlcnMgPSBvSGVhZGVycztcblx0XHR9XG5cdH1cblx0Z2V0Q29tcG9uZW50RGF0YSgpOiBhbnkge1xuXHRcdHJldHVybiBzdXBlci5nZXRDb21wb25lbnREYXRhKCk7XG5cdH1cblx0Z2V0Um91dGluZ1NlcnZpY2UoKTogUm91dGluZ1NlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBSb3V0aW5nU2VydmljZTsgLy8gb3ZlcnJpZGVuIGF0IHJ1bnRpbWVcblx0fVxuXHRnZXRTaGVsbFNlcnZpY2VzKCk6IElTaGVsbFNlcnZpY2VzIHtcblx0XHRyZXR1cm4ge30gYXMgSVNoZWxsU2VydmljZXM7IC8vIG92ZXJyaWRlbiBhdCBydW50aW1lXG5cdH1cblx0Z2V0TmF2aWdhdGlvblNlcnZpY2UoKTogTmF2aWdhdGlvblNlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBOYXZpZ2F0aW9uU2VydmljZTsgLy8gb3ZlcnJpZGVuIGF0IHJ1bnRpbWVcblx0fVxuXHRnZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTogU2lkZUVmZmVjdHNTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgU2lkZUVmZmVjdHNTZXJ2aWNlO1xuXHR9XG5cdGdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk6IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzU2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIEVudmlyb25tZW50Q2FwYWJpbGl0aWVzU2VydmljZTtcblx0fVxuXG5cdGdldFN0YXJ0dXBQYXJhbWV0ZXJzKCkge1xuXHRcdGNvbnN0IG9Db21wb25lbnREYXRhID0gdGhpcy5nZXRDb21wb25lbnREYXRhKCk7XG5cdFx0Y29uc3Qgb1N0YXJ0VXBQYXJhbWV0ZXJzID0gKG9Db21wb25lbnREYXRhICYmIG9Db21wb25lbnREYXRhLnN0YXJ0dXBQYXJhbWV0ZXJzKSB8fCB7fTtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG9TdGFydFVwUGFyYW1ldGVycyk7XG5cdH1cblx0cmVzdG9yZSgpIHtcblx0XHQvLyBjYWxsZWQgYnkgRkxQIHdoZW4gYXBwIHNhcC1rZWVwLWFsaXZlIGlzIGVuYWJsZWQgYW5kIGFwcCBpcyByZXN0b3JlZFxuXHRcdCh0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIGFueSkudmlld1N0YXRlLm9uUmVzdG9yZSgpO1xuXHR9XG5cdHN1c3BlbmQoKSB7XG5cdFx0Ly8gY2FsbGVkIGJ5IEZMUCB3aGVuIGFwcCBzYXAta2VlcC1hbGl2ZSBpcyBlbmFibGVkIGFuZCBhcHAgaXMgc3VzcGVuZGVkXG5cdFx0KHRoaXMuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgYW55KS52aWV3U3RhdGUub25TdXNwZW5kKCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXBwQ29tcG9uZW50O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7O0VBdUJBLElBQU1BLFdBQVcsR0FBR0MsT0FBTyxDQUFDRCxXQUE1QjtFQUVBLElBQU1FLE9BQU8sR0FBRztJQUNmQyxHQUFHLEVBQUU7TUFDSkMsUUFBUSxFQUFFLDBCQUROO01BRUpDLHNCQUFzQixFQUFFLHlDQUZwQjtNQUdKQyxXQUFXLEVBQUU7SUFIVCxDQURVO0lBTWZDLFlBQVksRUFBRTtNQUNiSCxRQUFRLEVBQUUsbUNBREc7TUFFYkMsc0JBQXNCLEVBQUUsa0RB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
@@ -17,7 +17,6 @@ import UIComponent from "sap/ui/core/UIComponent";
17
17
  import JSONModel from "sap/ui/model/json/JSONModel";
18
18
  import type ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
19
19
  import type ODataModel from "sap/ui/model/odata/v4/ODataModel";
20
- import type { CoreEx } from "types/extension_types";
21
20
  import type BaseController from "./BaseController";
22
21
  import { deleteModelCacheData } from "./converters/MetaModelConverter";
23
22
  import SemanticDateOperators from "./helpers/SemanticDateOperators";
@@ -26,11 +25,13 @@ const StartupMode = library.StartupMode;
26
25
 
27
26
  const NAVCONF = {
28
27
  FCL: {
29
- VIEWNAME: "sap.fe.templates.RootContainer.view.Fcl",
28
+ VIEWNAME: "sap.fe.core.rootView.Fcl",
29
+ VIEWNAME_COMPATIBILITY: "sap.fe.templates.RootContainer.view.Fcl",
30
30
  ROUTERCLASS: "sap.f.routing.Router"
31
31
  },
32
32
  NAVCONTAINER: {
33
- VIEWNAME: "sap.fe.templates.RootContainer.view.NavContainer",
33
+ VIEWNAME: "sap.fe.core.rootView.NavContainer",
34
+ VIEWNAME_COMPATIBILITY: "sap.fe.templates.RootContainer.view.NavContainer",
34
35
  ROUTERCLASS: "sap.m.routing.Router"
35
36
  }
36
37
  };
@@ -42,8 +43,8 @@ const NAVCONF = {
42
43
  * This ensures that all the necessary services that you need for the building blocks and templates to work properly are started.
43
44
  *
44
45
  * When you use sap.fe.core.AppComponent as the base component, you also need to use a rootView. SAP Fiori elements provides two options: <br/>
45
- * - sap.fe.templates.RootContainer.view.NavContainer when using sap.m.routing.Router <br/>
46
- * - sap.fe.templates.RootContainer.view.Fcl when using sap.f.routing.Router (FCL use case) <br/>
46
+ * - sap.fe.core.rootView.NavContainer when using sap.m.routing.Router <br/>
47
+ * - sap.fe.core.rootView.Fcl when using sap.f.routing.Router (FCL use case) <br/>
47
48
  *
48
49
  * @hideconstructor
49
50
  * @public
@@ -133,8 +134,11 @@ class AppComponent extends UIComponent {
133
134
  */
134
135
 
135
136
  _isFclEnabled() {
136
- const oManifestUI5 = this.getMetadata().getManifestEntry("/sap.ui5", true);
137
- return NAVCONF.FCL.VIEWNAME === oManifestUI5.rootView.viewName;
137
+ const oManifestUI5 = this.getManifestEntry("/sap.ui5");
138
+ return (
139
+ oManifestUI5?.rootView?.viewName === NAVCONF.FCL.VIEWNAME ||
140
+ oManifestUI5?.rootView?.viewName === NAVCONF.FCL.VIEWNAME_COMPATIBILITY
141
+ );
138
142
  }
139
143
 
140
144
  /**
@@ -212,6 +216,15 @@ class AppComponent extends UIComponent {
212
216
  this.startupMode = StartupMode.Create;
213
217
  }
214
218
 
219
+ /**
220
+ * Set the startup mode for the app to 'AutoCreate'.
221
+ *
222
+ * @private
223
+ */
224
+ setStartupModeAutoCreate() {
225
+ this.startupMode = StartupMode.AutoCreate;
226
+ }
227
+
215
228
  /**
216
229
  * Set the startup mode for the app to 'Deeplink'.
217
230
  *
@@ -248,34 +261,45 @@ class AppComponent extends UIComponent {
248
261
  this._oDiagnostics = new Diagnostics();
249
262
 
250
263
  const oModel = this.getModel() as ODataModel;
251
- if (oModel && oModel.isA("sap.ui.model.odata.v4.ODataModel")) {
264
+ if (oModel?.isA?.("sap.ui.model.odata.v4.ODataModel")) {
252
265
  this.entityContainer = oModel.getMetaModel().requestObject("/$EntityContainer/");
253
266
  } else {
254
267
  // not an OData v4 service
255
268
  this.entityContainer = Promise.resolve();
256
269
  }
257
270
 
258
- const oManifestUI5 = this.getMetadata().getManifestEntry("/sap.ui5", true);
259
- if (
260
- oManifestUI5.rootView.viewName === NAVCONF.FCL.VIEWNAME &&
261
- oManifestUI5.routing.config.routerClass === NAVCONF.FCL.ROUTERCLASS
262
- ) {
263
- Log.info(`Rootcontainer: "${NAVCONF.FCL.VIEWNAME}" - Routerclass: "${NAVCONF.FCL.ROUTERCLASS}"`);
264
- } else if (
265
- oManifestUI5.rootView.viewName === NAVCONF.NAVCONTAINER.VIEWNAME &&
266
- oManifestUI5.routing.config.routerClass === NAVCONF.NAVCONTAINER.ROUTERCLASS
267
- ) {
268
- Log.info(`Rootcontainer: "${NAVCONF.NAVCONTAINER.VIEWNAME}" - Routerclass: "${NAVCONF.NAVCONTAINER.ROUTERCLASS}"`);
269
- } else if (oManifestUI5.rootView.viewName.indexOf("sap.fe") !== -1) {
270
- throw Error(
271
- `\nWrong configuration for the couple (rootView/routerClass) in manifest file.\n` +
272
- `Current values are :(${oManifestUI5.rootView.viewName}/${oManifestUI5.routing.config.routerClass})\n` +
273
- `Expected values are \n` +
274
- `\t - (${NAVCONF.NAVCONTAINER.VIEWNAME}/${NAVCONF.NAVCONTAINER.ROUTERCLASS})\n` +
275
- `\t - (${NAVCONF.FCL.VIEWNAME}/${NAVCONF.FCL.ROUTERCLASS})`
276
- );
277
- } else {
278
- Log.info(`Rootcontainer: "${oManifestUI5.rootView.viewName}" - Routerclass: "${NAVCONF.NAVCONTAINER.ROUTERCLASS}"`);
271
+ const oManifestUI5 = (this.getManifest() as any)["sap.ui5"];
272
+ if (oManifestUI5?.rootView?.viewName) {
273
+ // The application specified an own root view in the manifest
274
+
275
+ // Root View was moved from sap.fe.templates to sap.fe.core - keep it compatible
276
+ if (oManifestUI5.rootView.viewName === NAVCONF.FCL.VIEWNAME_COMPATIBILITY) {
277
+ oManifestUI5.rootView.viewName = NAVCONF.FCL.VIEWNAME;
278
+ } else if (oManifestUI5?.rootView.viewName === NAVCONF.NAVCONTAINER.VIEWNAME_COMPATIBILITY) {
279
+ oManifestUI5.rootView.viewName = NAVCONF.NAVCONTAINER.VIEWNAME;
280
+ }
281
+
282
+ if (
283
+ oManifestUI5.rootView.viewName === NAVCONF.FCL.VIEWNAME &&
284
+ oManifestUI5.routing.config.routerClass === NAVCONF.FCL.ROUTERCLASS
285
+ ) {
286
+ Log.info(`Rootcontainer: "${NAVCONF.FCL.VIEWNAME}" - Routerclass: "${NAVCONF.FCL.ROUTERCLASS}"`);
287
+ } else if (
288
+ oManifestUI5.rootView.viewName === NAVCONF.NAVCONTAINER.VIEWNAME &&
289
+ oManifestUI5.routing.config.routerClass === NAVCONF.NAVCONTAINER.ROUTERCLASS
290
+ ) {
291
+ Log.info(`Rootcontainer: "${NAVCONF.NAVCONTAINER.VIEWNAME}" - Routerclass: "${NAVCONF.NAVCONTAINER.ROUTERCLASS}"`);
292
+ } else if (oManifestUI5.rootView.viewName.indexOf("sap.fe.core.rootView") !== -1) {
293
+ throw Error(
294
+ `\nWrong configuration for the couple (rootView/routerClass) in manifest file.\n` +
295
+ `Current values are :(${oManifestUI5.rootView.viewName}/${oManifestUI5.routing.config.routerClass})\n` +
296
+ `Expected values are \n` +
297
+ `\t - (${NAVCONF.NAVCONTAINER.VIEWNAME}/${NAVCONF.NAVCONTAINER.ROUTERCLASS})\n` +
298
+ `\t - (${NAVCONF.FCL.VIEWNAME}/${NAVCONF.FCL.ROUTERCLASS})`
299
+ );
300
+ } else {
301
+ Log.info(`Rootcontainer: "${oManifestUI5.rootView.viewName}" - Routerclass: "${NAVCONF.NAVCONTAINER.ROUTERCLASS}"`);
302
+ }
279
303
  }
280
304
 
281
305
  // Adding Semantic Date Operators
@@ -301,7 +325,7 @@ class AppComponent extends UIComponent {
301
325
  this.getRouterProxy().init(this, this._isFclEnabled());
302
326
  })
303
327
  .catch((error: any) => {
304
- const oResourceBundle = (Core as CoreEx).getLibraryResourceBundle("sap.fe.core");
328
+ const oResourceBundle = Core.getLibraryResourceBundle("sap.fe.core");
305
329
 
306
330
  (this.getRootViewController() as any).displayMessagePage(
307
331
  oResourceBundle.getText("C_APP_COMPONENT_SAPFE_APPSTART_TECHNICAL_ISSUES"),
@@ -368,7 +392,7 @@ class AppComponent extends UIComponent {
368
392
  // sap.ui.mdc.p13n.Engine.getInstance().destroy();
369
393
  delete (window as any)._routing;
370
394
  } catch (e) {
371
- Log.info(e as any);
395
+ Log.info(e as string);
372
396
  }
373
397
 
374
398
  //WORKAROUND for sticky discard request : due to async callback, request triggered by the exitApplication will be send after the UIComponent.prototype.destroy