@sapui5/sap.fe.core 1.99.0 → 1.100.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 (246) hide show
  1. package/package.json +4 -2
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +1 -69
  4. package/src/sap/fe/core/AnnotationHelper.ts +0 -70
  5. package/src/sap/fe/core/AppComponent.js +388 -399
  6. package/src/sap/fe/core/AppComponent.ts +403 -0
  7. package/src/sap/fe/core/AppStateHandler.js +127 -158
  8. package/src/sap/fe/core/BaseController.js +82 -58
  9. package/src/sap/fe/core/BaseController.ts +68 -0
  10. package/src/sap/fe/core/CommonUtils.js +111 -20
  11. package/src/sap/fe/core/CommonUtils.ts +131 -32
  12. package/src/sap/fe/core/ExtensionAPI.js +278 -274
  13. package/src/sap/fe/core/ExtensionAPI.ts +250 -0
  14. package/src/sap/fe/core/PageController.js +157 -29
  15. package/src/sap/fe/core/PageController.ts +60 -32
  16. package/src/sap/fe/core/RouterProxy.js +694 -756
  17. package/src/sap/fe/core/RouterProxy.ts +11 -9
  18. package/src/sap/fe/core/Synchronization.js +21 -31
  19. package/src/sap/fe/core/TemplateComponent.js +1 -1
  20. package/src/sap/fe/core/TemplateComponent.ts +10 -3
  21. package/src/sap/fe/core/TemplateModel.js +20 -38
  22. package/src/sap/fe/core/TemplateModel.ts +1 -1
  23. package/src/sap/fe/core/TransactionHelper.js +1354 -1370
  24. package/src/sap/fe/core/TransactionHelper.ts +33 -22
  25. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +392 -0
  26. package/src/sap/fe/core/actions/collaboration/ActivitySync.ts +355 -0
  27. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +136 -0
  28. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +119 -0
  29. package/src/sap/fe/core/actions/collaboration/Manage.js +262 -0
  30. package/src/sap/fe/core/actions/collaboration/Manage.ts +244 -0
  31. package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +103 -0
  32. package/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
  33. package/src/sap/fe/core/actions/draft.js +30 -68
  34. package/src/sap/fe/core/actions/draft.ts +44 -71
  35. package/src/sap/fe/core/actions/messageHandling.js +55 -36
  36. package/src/sap/fe/core/actions/messageHandling.ts +66 -46
  37. package/src/sap/fe/core/actions/operations.js +34 -15
  38. package/src/sap/fe/core/actions/operations.ts +48 -18
  39. package/src/sap/fe/core/actions/sticky.js +17 -4
  40. package/src/sap/fe/core/actions/sticky.ts +21 -4
  41. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +69 -66
  42. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +65 -0
  43. package/src/sap/fe/core/controllerextensions/EditFlow.js +1593 -1669
  44. package/src/sap/fe/core/controllerextensions/EditFlow.ts +1672 -0
  45. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +79 -54
  46. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +61 -0
  47. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +718 -779
  48. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +783 -0
  49. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +796 -816
  50. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +803 -0
  51. package/src/sap/fe/core/controllerextensions/InternalRouting.js +1004 -1005
  52. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +978 -0
  53. package/src/sap/fe/core/controllerextensions/KPIManagement.js +487 -521
  54. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +2 -2
  55. package/src/sap/fe/core/controllerextensions/MassEdit.js +141 -169
  56. package/src/sap/fe/core/controllerextensions/MassEdit.ts +156 -0
  57. package/src/sap/fe/core/controllerextensions/MessageHandler.js +233 -244
  58. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +225 -0
  59. package/src/sap/fe/core/controllerextensions/PageReady.js +301 -336
  60. package/src/sap/fe/core/controllerextensions/PageReady.ts +12 -10
  61. package/src/sap/fe/core/controllerextensions/Paginator.js +188 -175
  62. package/src/sap/fe/core/controllerextensions/Paginator.ts +163 -0
  63. package/src/sap/fe/core/controllerextensions/Placeholder.js +157 -149
  64. package/src/sap/fe/core/controllerextensions/Placeholder.ts +151 -0
  65. package/src/sap/fe/core/controllerextensions/Routing.js +144 -125
  66. package/src/sap/fe/core/controllerextensions/Routing.ts +132 -0
  67. package/src/sap/fe/core/controllerextensions/RoutingListener.js +7 -6
  68. package/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
  69. package/src/sap/fe/core/controllerextensions/Share.js +230 -268
  70. package/src/sap/fe/core/controllerextensions/Share.ts +231 -0
  71. package/src/sap/fe/core/controllerextensions/SideEffects.js +592 -633
  72. package/src/sap/fe/core/controllerextensions/SideEffects.ts +8 -7
  73. package/src/sap/fe/core/controllerextensions/ViewState.js +788 -806
  74. package/src/sap/fe/core/controllerextensions/ViewState.ts +805 -0
  75. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -2
  76. package/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
  77. package/src/sap/fe/core/controls/CommandExecution.js +67 -66
  78. package/src/sap/fe/core/controls/CommandExecution.ts +72 -0
  79. package/src/sap/fe/core/controls/ConditionalWrapper.js +90 -75
  80. package/src/sap/fe/core/controls/ConditionalWrapper.ts +83 -0
  81. package/src/sap/fe/core/controls/CustomQuickViewPage.js +130 -125
  82. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +126 -0
  83. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +103 -112
  84. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +101 -0
  85. package/src/sap/fe/core/controls/FieldWrapper.js +122 -135
  86. package/src/sap/fe/core/controls/FieldWrapper.ts +115 -0
  87. package/src/sap/fe/core/controls/FilterBar.js +162 -159
  88. package/src/sap/fe/core/controls/FilterBar.ts +143 -0
  89. package/src/sap/fe/core/controls/FormElementWrapper.js +45 -39
  90. package/src/sap/fe/core/controls/FormElementWrapper.ts +40 -0
  91. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +37 -42
  92. package/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
  93. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +126 -116
  94. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +98 -0
  95. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +241 -255
  96. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +245 -0
  97. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +150 -141
  98. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
  99. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +335 -322
  100. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
  101. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +74 -74
  102. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +70 -0
  103. package/src/sap/fe/core/converters/ConverterContext.js +348 -379
  104. package/src/sap/fe/core/converters/ConverterContext.ts +19 -16
  105. package/src/sap/fe/core/converters/ManifestSettings.js +12 -1
  106. package/src/sap/fe/core/converters/ManifestSettings.ts +12 -1
  107. package/src/sap/fe/core/converters/ManifestWrapper.js +354 -378
  108. package/src/sap/fe/core/converters/ManifestWrapper.ts +10 -0
  109. package/src/sap/fe/core/converters/MetaModelConverter.js +6 -4
  110. package/src/sap/fe/core/converters/MetaModelConverter.ts +5 -2
  111. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  112. package/src/sap/fe/core/converters/TemplateConverter.ts +2 -1
  113. package/src/sap/fe/core/converters/annotations/DataField.js +26 -12
  114. package/src/sap/fe/core/converters/annotations/DataField.ts +37 -13
  115. package/src/sap/fe/core/converters/controls/Common/Form.js +2 -2
  116. package/src/sap/fe/core/converters/controls/Common/Form.ts +4 -2
  117. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  118. package/src/sap/fe/core/converters/controls/Common/KPI.ts +3 -2
  119. package/src/sap/fe/core/converters/controls/Common/Table.js +130 -23
  120. package/src/sap/fe/core/converters/controls/Common/Table.ts +134 -29
  121. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +118 -53
  122. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +156 -93
  123. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +161 -207
  124. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +148 -206
  125. package/src/sap/fe/core/converters/helpers/Aggregation.js +115 -133
  126. package/src/sap/fe/core/converters/helpers/BindingHelper.js +20 -6
  127. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
  128. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +12 -1
  129. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
  130. package/src/sap/fe/core/converters/helpers/Key.js +42 -57
  131. package/src/sap/fe/core/converters/helpers/Key.ts +1 -1
  132. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +25 -4
  133. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +20 -3
  134. package/src/sap/fe/core/converters/templates/ListReportConverter.js +10 -4
  135. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +15 -4
  136. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +7 -5
  137. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +5 -1
  138. package/src/sap/fe/core/designtime/AppComponent.designtime.js +92 -98
  139. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
  140. package/src/sap/fe/core/formatters/CollaborationFormatter.js +104 -0
  141. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
  142. package/src/sap/fe/core/formatters/TableFormatter.js +53 -2
  143. package/src/sap/fe/core/formatters/TableFormatter.ts +51 -0
  144. package/src/sap/fe/core/fpm/Component.js +50 -54
  145. package/src/sap/fe/core/fpm/Component.ts +48 -0
  146. package/src/sap/fe/core/helpers/AppStartupHelper.js +323 -309
  147. package/src/sap/fe/core/helpers/AppStartupHelper.ts +363 -337
  148. package/src/sap/fe/core/helpers/BindingExpression.js +7 -7
  149. package/src/sap/fe/core/helpers/BindingExpression.ts +7 -7
  150. package/src/sap/fe/core/helpers/ClassSupport.js +186 -62
  151. package/src/sap/fe/core/helpers/ClassSupport.ts +168 -52
  152. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +5 -4
  153. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -5
  154. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  155. package/src/sap/fe/core/helpers/FPMHelper.ts +1 -1
  156. package/src/sap/fe/core/helpers/MassEditHelper.js +601 -684
  157. package/src/sap/fe/core/helpers/MassEditHelper.ts +699 -0
  158. package/src/sap/fe/core/helpers/ModelHelper.js +25 -1
  159. package/src/sap/fe/core/helpers/ModelHelper.ts +23 -0
  160. package/src/sap/fe/core/helpers/SemanticDateOperators.js +5 -1
  161. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +4 -0
  162. package/src/sap/fe/core/library.js +426 -451
  163. package/src/sap/fe/core/library.support.js +22 -33
  164. package/src/sap/fe/core/library.support.ts +23 -0
  165. package/src/sap/fe/core/library.ts +420 -0
  166. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +5 -3
  167. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +4 -1
  168. package/src/sap/fe/core/messagebundle.properties +22 -5
  169. package/src/sap/fe/core/messagebundle_ar.properties +27 -7
  170. package/src/sap/fe/core/messagebundle_bg.properties +27 -7
  171. package/src/sap/fe/core/messagebundle_ca.properties +27 -7
  172. package/src/sap/fe/core/messagebundle_cs.properties +27 -7
  173. package/src/sap/fe/core/messagebundle_cy.properties +27 -7
  174. package/src/sap/fe/core/messagebundle_da.properties +27 -7
  175. package/src/sap/fe/core/messagebundle_de.properties +27 -7
  176. package/src/sap/fe/core/messagebundle_el.properties +27 -7
  177. package/src/sap/fe/core/messagebundle_en.properties +27 -7
  178. package/src/sap/fe/core/messagebundle_en_GB.properties +27 -7
  179. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +27 -7
  180. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +27 -7
  181. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +27 -7
  182. package/src/sap/fe/core/messagebundle_es.properties +27 -7
  183. package/src/sap/fe/core/messagebundle_es_MX.properties +27 -7
  184. package/src/sap/fe/core/messagebundle_et.properties +27 -7
  185. package/src/sap/fe/core/messagebundle_fi.properties +28 -8
  186. package/src/sap/fe/core/messagebundle_fr.properties +28 -8
  187. package/src/sap/fe/core/messagebundle_fr_CA.properties +29 -9
  188. package/src/sap/fe/core/messagebundle_hi.properties +27 -7
  189. package/src/sap/fe/core/messagebundle_hr.properties +27 -7
  190. package/src/sap/fe/core/messagebundle_hu.properties +27 -7
  191. package/src/sap/fe/core/messagebundle_id.properties +27 -7
  192. package/src/sap/fe/core/messagebundle_it.properties +27 -7
  193. package/src/sap/fe/core/messagebundle_iw.properties +27 -7
  194. package/src/sap/fe/core/messagebundle_ja.properties +26 -6
  195. package/src/sap/fe/core/messagebundle_kk.properties +27 -7
  196. package/src/sap/fe/core/messagebundle_ko.properties +27 -7
  197. package/src/sap/fe/core/messagebundle_lt.properties +27 -7
  198. package/src/sap/fe/core/messagebundle_lv.properties +28 -8
  199. package/src/sap/fe/core/messagebundle_ms.properties +27 -7
  200. package/src/sap/fe/core/messagebundle_nl.properties +27 -7
  201. package/src/sap/fe/core/messagebundle_no.properties +27 -7
  202. package/src/sap/fe/core/messagebundle_pl.properties +27 -7
  203. package/src/sap/fe/core/messagebundle_pt.properties +28 -8
  204. package/src/sap/fe/core/messagebundle_pt_PT.properties +27 -7
  205. package/src/sap/fe/core/messagebundle_ro.properties +27 -7
  206. package/src/sap/fe/core/messagebundle_ru.properties +27 -7
  207. package/src/sap/fe/core/messagebundle_sh.properties +27 -7
  208. package/src/sap/fe/core/messagebundle_sk.properties +27 -7
  209. package/src/sap/fe/core/messagebundle_sl.properties +27 -7
  210. package/src/sap/fe/core/messagebundle_sv.properties +27 -7
  211. package/src/sap/fe/core/messagebundle_th.properties +26 -6
  212. package/src/sap/fe/core/messagebundle_tr.properties +30 -10
  213. package/src/sap/fe/core/messagebundle_uk.properties +27 -7
  214. package/src/sap/fe/core/messagebundle_vi.properties +27 -7
  215. package/src/sap/fe/core/messagebundle_zh_CN.properties +27 -7
  216. package/src/sap/fe/core/messagebundle_zh_TW.properties +27 -7
  217. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +45 -71
  218. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +154 -192
  219. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +4 -4
  220. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +66 -92
  221. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +1 -1
  222. package/src/sap/fe/core/services/NavigationServiceFactory.js +284 -339
  223. package/src/sap/fe/core/services/NavigationServiceFactory.ts +10 -13
  224. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +67 -102
  225. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +5 -2
  226. package/src/sap/fe/core/services/RoutingServiceFactory.js +754 -814
  227. package/src/sap/fe/core/services/RoutingServiceFactory.ts +13 -13
  228. package/src/sap/fe/core/services/ShellServicesFactory.js +649 -736
  229. package/src/sap/fe/core/services/ShellServicesFactory.ts +7 -4
  230. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +567 -592
  231. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +22 -3
  232. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +354 -386
  233. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +21 -14
  234. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +1 -1
  235. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +1 -1
  236. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  237. package/src/sap/fe/core/support/CommonHelper.ts +1 -1
  238. package/src/sap/fe/core/support/Diagnostics.js +36 -48
  239. package/src/sap/fe/core/templating/DataModelPathHelper.js +93 -85
  240. package/src/sap/fe/core/templating/DataModelPathHelper.ts +104 -95
  241. package/src/sap/fe/core/templating/FilterHelper.js +25 -32
  242. package/src/sap/fe/core/templating/FilterHelper.ts +36 -35
  243. package/src/sap/fe/core/templating/PropertyHelper.js +2 -2
  244. package/src/sap/fe/core/templating/PropertyHelper.ts +1 -1
  245. package/src/sap/fe/core/templating/UIFormatters.js +32 -26
  246. package/src/sap/fe/core/templating/UIFormatters.ts +37 -24
@@ -7,12 +7,6 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
7
7
 
8
8
  var VariantManagementType = ManifestSettings.VariantManagementType;
9
9
 
10
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
11
-
12
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
13
-
14
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
15
-
16
10
  /**
17
11
  *
18
12
  */
@@ -25,8 +19,6 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
25
19
  * @returns {ManifestWrapper} The manifest wrapper object
26
20
  */
27
21
  function ManifestWrapper(oManifestSettings, mergeFn) {
28
- _classCallCheck(this, ManifestWrapper);
29
-
30
22
  this.oManifestSettings = oManifestSettings;
31
23
  this.mergeFn = mergeFn;
32
24
  }
@@ -37,392 +29,376 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
37
29
  */
38
30
 
39
31
 
40
- _createClass(ManifestWrapper, [{
41
- key: "getTemplateType",
42
- value: function getTemplateType() {
43
- return this.oManifestSettings.converterType;
44
- }
45
- /**
46
- * Checks whether the current template should display the filter bar.
47
- *
48
- * @returns {boolean} `true` if the filter bar should be hidden
49
- */
50
-
51
- }, {
52
- key: "isFilterBarHidden",
53
- value: function isFilterBarHidden() {
54
- var _this$oManifestSettin;
55
-
56
- return !!((_this$oManifestSettin = this.oManifestSettings) !== null && _this$oManifestSettin !== void 0 && _this$oManifestSettin.hideFilterBar);
57
- }
58
- /**
59
- * Checks whether the current environment is a desktop or not.
60
- *
61
- * @returns {boolean} `true` if we are on a desktop
62
- */
63
-
64
- }, {
65
- key: "isDesktop",
66
- value: function isDesktop() {
67
- return !!this.oManifestSettings.isDesktop;
68
- }
69
- /**
70
- * Checks whether the current environment is a mobile phone or not.
71
- *
72
- * @returns {boolean} `true` if we are on a mobile phone
73
- */
74
-
75
- }, {
76
- key: "isPhone",
77
- value: function isPhone() {
78
- return !!this.oManifestSettings.isPhone;
79
- }
80
- /**
81
- * Retrieves the form containers (field groups or identification) defined in the manifest.
82
- *
83
- * @param {string} facetTarget The target annotation path for this form
84
- * @returns {FormManifestConfiguration} A set of form containers defined in the manifest indexed by an iterable key
85
- */
86
-
87
- }, {
88
- key: "getFormContainer",
89
- value: function getFormContainer(facetTarget) {
90
- var _this$oManifestSettin2;
91
-
92
- return (_this$oManifestSettin2 = this.oManifestSettings.controlConfiguration) === null || _this$oManifestSettin2 === void 0 ? void 0 : _this$oManifestSettin2[facetTarget];
93
- }
94
- /**
95
- * Retrieves the header facets defined in the manifest.
96
- *
97
- * @returns {ConfigurableRecord<ManifestHeaderFacet>} A set of header facets defined in the manifest indexed by an iterable key
98
- */
99
-
100
- }, {
101
- key: "getHeaderFacets",
102
- value: function getHeaderFacets() {
103
- var _this$oManifestSettin3, _this$oManifestSettin4, _content, _content$header;
104
-
105
- return this.mergeFn({}, (_this$oManifestSettin3 = this.oManifestSettings.controlConfiguration) === null || _this$oManifestSettin3 === void 0 ? void 0 : (_this$oManifestSettin4 = _this$oManifestSettin3["@com.sap.vocabularies.UI.v1.HeaderFacets"]) === null || _this$oManifestSettin4 === void 0 ? void 0 : _this$oManifestSettin4.facets, (_content = this.oManifestSettings.content) === null || _content === void 0 ? void 0 : (_content$header = _content.header) === null || _content$header === void 0 ? void 0 : _content$header.facets);
106
- }
107
- /**
108
- * Retrieves the header actions defined in the manifest.
109
- *
110
- * @returns {ConfigurableRecord<ManifestAction>} A set of actions defined in the manifest indexed by an iterable key
111
- */
112
-
113
- }, {
114
- key: "getHeaderActions",
115
- value: function getHeaderActions() {
116
- var _this$oManifestSettin5, _this$oManifestSettin6;
117
-
118
- return ((_this$oManifestSettin5 = this.oManifestSettings.content) === null || _this$oManifestSettin5 === void 0 ? void 0 : (_this$oManifestSettin6 = _this$oManifestSettin5.header) === null || _this$oManifestSettin6 === void 0 ? void 0 : _this$oManifestSettin6.actions) || {};
119
- }
120
- /**
121
- * Retrieves the footer actions defined in the manifest.
122
- *
123
- * @returns {ConfigurableRecord<ManifestAction>} A set of actions defined in the manifest indexed by an iterable key
124
- */
125
-
126
- }, {
127
- key: "getFooterActions",
128
- value: function getFooterActions() {
129
- var _this$oManifestSettin7, _this$oManifestSettin8;
130
-
131
- return ((_this$oManifestSettin7 = this.oManifestSettings.content) === null || _this$oManifestSettin7 === void 0 ? void 0 : (_this$oManifestSettin8 = _this$oManifestSettin7.footer) === null || _this$oManifestSettin8 === void 0 ? void 0 : _this$oManifestSettin8.actions) || {};
132
- }
133
- /**
134
- * Retrieves the variant management as defined in the manifest.
135
- *
136
- * @returns {VariantManagementType} A type of variant management
137
- */
138
-
139
- }, {
140
- key: "getVariantManagement",
141
- value: function getVariantManagement() {
142
- return this.oManifestSettings.variantManagement || VariantManagementType.None;
143
- }
144
- /**
145
- * Retrieves the annotation Path for the SPV in the manifest.
146
- *
147
- * @returns {string|undefined} The annotation path for the default SPV or undefined.
148
- */
149
-
150
- }, {
151
- key: "getDefaultTemplateAnnotationPath",
152
- value: function getDefaultTemplateAnnotationPath() {
153
- return this.oManifestSettings.defaultTemplateAnnotationPath;
154
- }
155
- /**
156
- * Retrieves the control configuration as defined in the manifest for a specific annotation path.
157
- *
158
- * @param {string} sAnnotationPath The relative annotation path
159
- * @private
160
- * @returns {object} The control configuration
161
- */
162
-
163
- }, {
164
- key: "getControlConfiguration",
165
- value: function getControlConfiguration(sAnnotationPath) {
166
- var _this$oManifestSettin9, _this$oManifestSettin10;
167
-
168
- return ((_this$oManifestSettin9 = this.oManifestSettings) === null || _this$oManifestSettin9 === void 0 ? void 0 : (_this$oManifestSettin10 = _this$oManifestSettin9.controlConfiguration) === null || _this$oManifestSettin10 === void 0 ? void 0 : _this$oManifestSettin10[sAnnotationPath]) || {};
169
- }
170
- /**
171
- * Retrieves the configured settings for a given navigation target.
172
- *
173
- * @param {string} navigationOrCollectionName The name of the navigation to check
174
- * @returns {NavigationSettingsConfiguration} The navigation settings configuration
175
- */
176
-
177
- }, {
178
- key: "getNavigationConfiguration",
179
- value: function getNavigationConfiguration(navigationOrCollectionName) {
180
- var _this$oManifestSettin11, _this$oManifestSettin12;
181
-
182
- return ((_this$oManifestSettin11 = this.oManifestSettings) === null || _this$oManifestSettin11 === void 0 ? void 0 : (_this$oManifestSettin12 = _this$oManifestSettin11.navigation) === null || _this$oManifestSettin12 === void 0 ? void 0 : _this$oManifestSettin12[navigationOrCollectionName]) || {};
183
- }
184
- /**
185
- * Retrieves the view level.
186
- *
187
- * @returns {number} The current view level
188
- */
189
-
190
- }, {
191
- key: "getViewLevel",
192
- value: function getViewLevel() {
193
- var _this$oManifestSettin13;
194
-
195
- return ((_this$oManifestSettin13 = this.oManifestSettings) === null || _this$oManifestSettin13 === void 0 ? void 0 : _this$oManifestSettin13.viewLevel) || -1;
196
- }
197
- /**
198
- * Retrieves the contentDensities setting of the application.
199
- *
200
- * @returns {ContentDensitiesType} The current content density
201
- */
202
-
203
- }, {
204
- key: "getContentDensities",
205
- value: function getContentDensities() {
206
- var _this$oManifestSettin14;
207
-
208
- return ((_this$oManifestSettin14 = this.oManifestSettings) === null || _this$oManifestSettin14 === void 0 ? void 0 : _this$oManifestSettin14.contentDensities) || {
209
- cozy: false,
210
- compact: false
211
- };
212
- }
213
- /**
214
- * Checks whether we are in FCL mode or not.
215
- *
216
- * @returns {boolean} `true` if we are in FCL
217
- */
218
-
219
- }, {
220
- key: "isFclEnabled",
221
- value: function isFclEnabled() {
222
- var _this$oManifestSettin15;
223
-
224
- return !!((_this$oManifestSettin15 = this.oManifestSettings) !== null && _this$oManifestSettin15 !== void 0 && _this$oManifestSettin15.fclEnabled);
225
- }
226
- /**
227
- * Checks whether the current settings (application / shell) allows us to use condensed layout.
228
- *
229
- * @returns {boolean} `true` if we can use the condensed layout, false otherwise
230
- */
231
-
232
- }, {
233
- key: "isCondensedLayoutCompliant",
234
- value: function isCondensedLayoutCompliant() {
235
- var _this$oManifestSettin16, _this$oManifestSettin17;
236
-
237
- var manifestContentDensity = ((_this$oManifestSettin16 = this.oManifestSettings) === null || _this$oManifestSettin16 === void 0 ? void 0 : _this$oManifestSettin16.contentDensities) || {
238
- cozy: false,
239
- compact: false
240
- };
241
- var shellContentDensity = ((_this$oManifestSettin17 = this.oManifestSettings) === null || _this$oManifestSettin17 === void 0 ? void 0 : _this$oManifestSettin17.shellContentDensity) || "compact";
242
- var isCondensedLayoutCompliant = true;
32
+ var _proto = ManifestWrapper.prototype;
243
33
 
244
- if ((manifestContentDensity === null || manifestContentDensity === void 0 ? void 0 : manifestContentDensity.cozy) === true && (manifestContentDensity === null || manifestContentDensity === void 0 ? void 0 : manifestContentDensity.compact) !== true || shellContentDensity === "cozy") {
245
- isCondensedLayoutCompliant = false;
246
- }
34
+ _proto.getTemplateType = function getTemplateType() {
35
+ return this.oManifestSettings.converterType;
36
+ }
37
+ /**
38
+ * Checks whether the current template should display the filter bar.
39
+ *
40
+ * @returns {boolean} `true` if the filter bar should be hidden
41
+ */
42
+ ;
247
43
 
248
- return isCondensedLayoutCompliant;
249
- } //region OP Specific
44
+ _proto.isFilterBarHidden = function isFilterBarHidden() {
45
+ var _this$oManifestSettin;
250
46
 
251
- /**
252
- * Retrieves the sections defined in the manifest.
253
- *
254
- * @returns {ConfigurableRecord<ManifestSection>} A set of manifest sections indexed by an iterable key
255
- */
47
+ return !!((_this$oManifestSettin = this.oManifestSettings) !== null && _this$oManifestSettin !== void 0 && _this$oManifestSettin.hideFilterBar);
48
+ }
49
+ /**
50
+ * Checks whether the current environment is a desktop or not.
51
+ *
52
+ * @returns {boolean} `true` if we are on a desktop
53
+ */
54
+ ;
256
55
 
257
- }, {
258
- key: "getSections",
259
- value: function getSections() {
260
- var _this$oManifestSettin18, _this$oManifestSettin19, _content2, _content2$body;
56
+ _proto.isDesktop = function isDesktop() {
57
+ return !!this.oManifestSettings.isDesktop;
58
+ }
59
+ /**
60
+ * Checks whether the current environment is a mobile phone or not.
61
+ *
62
+ * @returns {boolean} `true` if we are on a mobile phone
63
+ */
64
+ ;
261
65
 
262
- return this.mergeFn({}, (_this$oManifestSettin18 = this.oManifestSettings.controlConfiguration) === null || _this$oManifestSettin18 === void 0 ? void 0 : (_this$oManifestSettin19 = _this$oManifestSettin18["@com.sap.vocabularies.UI.v1.Facets"]) === null || _this$oManifestSettin19 === void 0 ? void 0 : _this$oManifestSettin19.sections, (_content2 = this.oManifestSettings.content) === null || _content2 === void 0 ? void 0 : (_content2$body = _content2.body) === null || _content2$body === void 0 ? void 0 : _content2$body.sections);
263
- }
264
- /**
265
- * Returns true of the header of the application is editable and should appear in the facets.
266
- *
267
- * @returns {boolean} `true` if the header if editable
268
- */
269
-
270
- }, {
271
- key: "isHeaderEditable",
272
- value: function isHeaderEditable() {
273
- return this.getShowObjectPageHeader() && this.oManifestSettings.editableHeaderContent;
274
- }
275
- /**
276
- * Returns true if we should show the object page header.
277
- *
278
- * @returns {boolean} `true` if the header should be displayed
279
- */
280
-
281
- }, {
282
- key: "getShowAnchorBar",
283
- value: function getShowAnchorBar() {
284
- var _content3, _content3$header, _content4, _content4$header;
285
-
286
- return ((_content3 = this.oManifestSettings.content) === null || _content3 === void 0 ? void 0 : (_content3$header = _content3.header) === null || _content3$header === void 0 ? void 0 : _content3$header.anchorBarVisible) !== undefined ? !!((_content4 = this.oManifestSettings.content) !== null && _content4 !== void 0 && (_content4$header = _content4.header) !== null && _content4$header !== void 0 && _content4$header.anchorBarVisible) : true;
287
- }
288
- /**
289
- * Defines whether or not the section will be displayed in different tabs.
290
- *
291
- * @returns {boolean} `true` if the icon tab bar should be used instead of scrolling
292
- */
293
-
294
- }, {
295
- key: "useIconTabBar",
296
- value: function useIconTabBar() {
297
- return this.getShowAnchorBar() && this.oManifestSettings.sectionLayout === "Tabs";
298
- }
299
- /**
300
- * Returns true if the object page header is to be shown.
301
- *
302
- * @returns {boolean} `true` if the object page header is to be displayed
303
- */
304
-
305
- }, {
306
- key: "getShowObjectPageHeader",
307
- value: function getShowObjectPageHeader() {
308
- var _content5, _content5$header, _content6, _content6$header;
309
-
310
- return ((_content5 = this.oManifestSettings.content) === null || _content5 === void 0 ? void 0 : (_content5$header = _content5.header) === null || _content5$header === void 0 ? void 0 : _content5$header.visible) !== undefined ? !!((_content6 = this.oManifestSettings.content) !== null && _content6 !== void 0 && (_content6$header = _content6.header) !== null && _content6$header !== void 0 && _content6$header.visible) : true;
311
- } //endregion OP Specific
312
- //region LR Specific
313
-
314
- /**
315
- * Retrieves the multiple view configuration from the manifest.
316
- *
317
- * @returns {MultipleViewsConfiguration} The views that represent the manifest object
318
- */
319
-
320
- }, {
321
- key: "getViewConfiguration",
322
- value: function getViewConfiguration() {
323
- return this.oManifestSettings.views;
324
- }
325
- /**
326
- * Retrieves the KPI configuration from the manifest.
327
- *
328
- * @returns {object} Returns a map between KPI names and their respective configuration
329
- */
330
-
331
- }, {
332
- key: "getKPIConfiguration",
333
- value: function getKPIConfiguration() {
334
- return this.oManifestSettings.keyPerformanceIndicators || {};
335
- }
336
- /**
337
- * Retrieves the filter configuration from the manifest.
338
- *
339
- * @returns {FilterManifestConfiguration} The filter configuration from the manifest
340
- */
341
-
342
- }, {
343
- key: "getFilterConfiguration",
344
- value: function getFilterConfiguration() {
345
- return this.getControlConfiguration("@com.sap.vocabularies.UI.v1.SelectionFields");
66
+ _proto.isPhone = function isPhone() {
67
+ return !!this.oManifestSettings.isPhone;
68
+ }
69
+ /**
70
+ * Retrieves the form containers (field groups or identification) defined in the manifest.
71
+ *
72
+ * @param {string} facetTarget The target annotation path for this form
73
+ * @returns {FormManifestConfiguration} A set of form containers defined in the manifest indexed by an iterable key
74
+ */
75
+ ;
76
+
77
+ _proto.getFormContainer = function getFormContainer(facetTarget) {
78
+ var _this$oManifestSettin2;
79
+
80
+ return (_this$oManifestSettin2 = this.oManifestSettings.controlConfiguration) === null || _this$oManifestSettin2 === void 0 ? void 0 : _this$oManifestSettin2[facetTarget];
81
+ }
82
+ /**
83
+ * Retrieves the header facets defined in the manifest.
84
+ *
85
+ * @returns {ConfigurableRecord<ManifestHeaderFacet>} A set of header facets defined in the manifest indexed by an iterable key
86
+ */
87
+ ;
88
+
89
+ _proto.getHeaderFacets = function getHeaderFacets() {
90
+ var _this$oManifestSettin3, _this$oManifestSettin4, _content, _content$header;
91
+
92
+ return this.mergeFn({}, (_this$oManifestSettin3 = this.oManifestSettings.controlConfiguration) === null || _this$oManifestSettin3 === void 0 ? void 0 : (_this$oManifestSettin4 = _this$oManifestSettin3["@com.sap.vocabularies.UI.v1.HeaderFacets"]) === null || _this$oManifestSettin4 === void 0 ? void 0 : _this$oManifestSettin4.facets, (_content = this.oManifestSettings.content) === null || _content === void 0 ? void 0 : (_content$header = _content.header) === null || _content$header === void 0 ? void 0 : _content$header.facets);
93
+ }
94
+ /**
95
+ * Retrieves the header actions defined in the manifest.
96
+ *
97
+ * @returns {ConfigurableRecord<ManifestAction>} A set of actions defined in the manifest indexed by an iterable key
98
+ */
99
+ ;
100
+
101
+ _proto.getHeaderActions = function getHeaderActions() {
102
+ var _this$oManifestSettin5, _this$oManifestSettin6;
103
+
104
+ return ((_this$oManifestSettin5 = this.oManifestSettings.content) === null || _this$oManifestSettin5 === void 0 ? void 0 : (_this$oManifestSettin6 = _this$oManifestSettin5.header) === null || _this$oManifestSettin6 === void 0 ? void 0 : _this$oManifestSettin6.actions) || {};
105
+ }
106
+ /**
107
+ * Retrieves the footer actions defined in the manifest.
108
+ *
109
+ * @returns {ConfigurableRecord<ManifestAction>} A set of actions defined in the manifest indexed by an iterable key
110
+ */
111
+ ;
112
+
113
+ _proto.getFooterActions = function getFooterActions() {
114
+ var _this$oManifestSettin7, _this$oManifestSettin8;
115
+
116
+ return ((_this$oManifestSettin7 = this.oManifestSettings.content) === null || _this$oManifestSettin7 === void 0 ? void 0 : (_this$oManifestSettin8 = _this$oManifestSettin7.footer) === null || _this$oManifestSettin8 === void 0 ? void 0 : _this$oManifestSettin8.actions) || {};
117
+ }
118
+ /**
119
+ * Retrieves the variant management as defined in the manifest.
120
+ *
121
+ * @returns {VariantManagementType} A type of variant management
122
+ */
123
+ ;
124
+
125
+ _proto.getVariantManagement = function getVariantManagement() {
126
+ return this.oManifestSettings.variantManagement || VariantManagementType.None;
127
+ }
128
+ /**
129
+ * Retrieves the annotation Path for the SPV in the manifest.
130
+ *
131
+ * @returns {string|undefined} The annotation path for the default SPV or undefined.
132
+ */
133
+ ;
134
+
135
+ _proto.getDefaultTemplateAnnotationPath = function getDefaultTemplateAnnotationPath() {
136
+ return this.oManifestSettings.defaultTemplateAnnotationPath;
137
+ }
138
+ /**
139
+ * Retrieves the control configuration as defined in the manifest for a specific annotation path.
140
+ *
141
+ * @param {string} sAnnotationPath The relative annotation path
142
+ * @private
143
+ * @returns {object} The control configuration
144
+ */
145
+ ;
146
+
147
+ _proto.getControlConfiguration = function getControlConfiguration(sAnnotationPath) {
148
+ var _this$oManifestSettin9, _this$oManifestSettin10;
149
+
150
+ return ((_this$oManifestSettin9 = this.oManifestSettings) === null || _this$oManifestSettin9 === void 0 ? void 0 : (_this$oManifestSettin10 = _this$oManifestSettin9.controlConfiguration) === null || _this$oManifestSettin10 === void 0 ? void 0 : _this$oManifestSettin10[sAnnotationPath]) || {};
151
+ }
152
+ /**
153
+ * Retrieves the configured settings for a given navigation target.
154
+ *
155
+ * @param {string} navigationOrCollectionName The name of the navigation to check
156
+ * @returns {NavigationSettingsConfiguration} The navigation settings configuration
157
+ */
158
+ ;
159
+
160
+ _proto.getNavigationConfiguration = function getNavigationConfiguration(navigationOrCollectionName) {
161
+ var _this$oManifestSettin11, _this$oManifestSettin12;
162
+
163
+ return ((_this$oManifestSettin11 = this.oManifestSettings) === null || _this$oManifestSettin11 === void 0 ? void 0 : (_this$oManifestSettin12 = _this$oManifestSettin11.navigation) === null || _this$oManifestSettin12 === void 0 ? void 0 : _this$oManifestSettin12[navigationOrCollectionName]) || {};
164
+ }
165
+ /**
166
+ * Retrieves the view level.
167
+ *
168
+ * @returns {number} The current view level
169
+ */
170
+ ;
171
+
172
+ _proto.getViewLevel = function getViewLevel() {
173
+ var _this$oManifestSettin13;
174
+
175
+ return ((_this$oManifestSettin13 = this.oManifestSettings) === null || _this$oManifestSettin13 === void 0 ? void 0 : _this$oManifestSettin13.viewLevel) || -1;
176
+ }
177
+ /**
178
+ * Retrieves the contentDensities setting of the application.
179
+ *
180
+ * @returns {ContentDensitiesType} The current content density
181
+ */
182
+ ;
183
+
184
+ _proto.getContentDensities = function getContentDensities() {
185
+ var _this$oManifestSettin14;
186
+
187
+ return ((_this$oManifestSettin14 = this.oManifestSettings) === null || _this$oManifestSettin14 === void 0 ? void 0 : _this$oManifestSettin14.contentDensities) || {
188
+ cozy: false,
189
+ compact: false
190
+ };
191
+ }
192
+ /**
193
+ * Checks whether we are in FCL mode or not.
194
+ *
195
+ * @returns {boolean} `true` if we are in FCL
196
+ */
197
+ ;
198
+
199
+ _proto.isFclEnabled = function isFclEnabled() {
200
+ var _this$oManifestSettin15;
201
+
202
+ return !!((_this$oManifestSettin15 = this.oManifestSettings) !== null && _this$oManifestSettin15 !== void 0 && _this$oManifestSettin15.fclEnabled);
203
+ }
204
+ /**
205
+ * Checks whether the current settings (application / shell) allows us to use condensed layout.
206
+ *
207
+ * @returns {boolean} `true` if we can use the condensed layout, false otherwise
208
+ */
209
+ ;
210
+
211
+ _proto.isCondensedLayoutCompliant = function isCondensedLayoutCompliant() {
212
+ var _this$oManifestSettin16, _this$oManifestSettin17;
213
+
214
+ var manifestContentDensity = ((_this$oManifestSettin16 = this.oManifestSettings) === null || _this$oManifestSettin16 === void 0 ? void 0 : _this$oManifestSettin16.contentDensities) || {
215
+ cozy: false,
216
+ compact: false
217
+ };
218
+ var shellContentDensity = ((_this$oManifestSettin17 = this.oManifestSettings) === null || _this$oManifestSettin17 === void 0 ? void 0 : _this$oManifestSettin17.shellContentDensity) || "compact";
219
+ var isCondensedLayoutCompliant = true;
220
+
221
+ if ((manifestContentDensity === null || manifestContentDensity === void 0 ? void 0 : manifestContentDensity.cozy) === true && (manifestContentDensity === null || manifestContentDensity === void 0 ? void 0 : manifestContentDensity.compact) !== true || shellContentDensity === "cozy") {
222
+ isCondensedLayoutCompliant = false;
346
223
  }
347
- /**
348
- * Returns true if there are multiple entity sets to be displayed.
349
- *
350
- * @returns {boolean} `true` if there are multiple entity sets
351
- */
352
224
 
353
- }, {
354
- key: "hasMultipleEntitySets",
355
- value: function hasMultipleEntitySets() {
356
- var _this = this;
225
+ return isCondensedLayoutCompliant;
226
+ } //region OP Specific
357
227
 
358
- var viewConfig = this.getViewConfiguration() || {
359
- paths: []
360
- };
361
- var manifestEntitySet = this.oManifestSettings.entitySet;
362
- return viewConfig.paths.find(function (path) {
363
- var _path;
364
-
365
- if ((_path = path) !== null && _path !== void 0 && _path.template) {
366
- return undefined;
367
- } else if (_this.hasMultipleVisualizations(path)) {
368
- var _ref = path,
369
- primary = _ref.primary,
370
- secondary = _ref.secondary;
371
- return primary.some(function (path) {
372
- return path.entitySet && path.entitySet !== manifestEntitySet;
373
- }) || secondary.some(function (path) {
374
- return path.entitySet && path.entitySet !== manifestEntitySet;
375
- });
376
- } else {
377
- path = path;
228
+ /**
229
+ * Retrieves the sections defined in the manifest.
230
+ *
231
+ * @returns {ConfigurableRecord<ManifestSection>} A set of manifest sections indexed by an iterable key
232
+ */
233
+ ;
234
+
235
+ _proto.getSections = function getSections() {
236
+ var _this$oManifestSettin18, _this$oManifestSettin19, _content2, _content2$body;
237
+
238
+ return this.mergeFn({}, (_this$oManifestSettin18 = this.oManifestSettings.controlConfiguration) === null || _this$oManifestSettin18 === void 0 ? void 0 : (_this$oManifestSettin19 = _this$oManifestSettin18["@com.sap.vocabularies.UI.v1.Facets"]) === null || _this$oManifestSettin19 === void 0 ? void 0 : _this$oManifestSettin19.sections, (_content2 = this.oManifestSettings.content) === null || _content2 === void 0 ? void 0 : (_content2$body = _content2.body) === null || _content2$body === void 0 ? void 0 : _content2$body.sections);
239
+ }
240
+ /**
241
+ * Returns true of the header of the application is editable and should appear in the facets.
242
+ *
243
+ * @returns {boolean} `true` if the header if editable
244
+ */
245
+ ;
246
+
247
+ _proto.isHeaderEditable = function isHeaderEditable() {
248
+ return this.getShowObjectPageHeader() && this.oManifestSettings.editableHeaderContent;
249
+ }
250
+ /**
251
+ * Returns true if we should show the object page header.
252
+ *
253
+ * @returns {boolean} `true` if the header should be displayed
254
+ */
255
+ ;
256
+
257
+ _proto.getShowAnchorBar = function getShowAnchorBar() {
258
+ var _content3, _content3$header, _content4, _content4$header;
259
+
260
+ return ((_content3 = this.oManifestSettings.content) === null || _content3 === void 0 ? void 0 : (_content3$header = _content3.header) === null || _content3$header === void 0 ? void 0 : _content3$header.anchorBarVisible) !== undefined ? !!((_content4 = this.oManifestSettings.content) !== null && _content4 !== void 0 && (_content4$header = _content4.header) !== null && _content4$header !== void 0 && _content4$header.anchorBarVisible) : true;
261
+ }
262
+ /**
263
+ * Defines whether or not the section will be displayed in different tabs.
264
+ *
265
+ * @returns {boolean} `true` if the icon tab bar should be used instead of scrolling
266
+ */
267
+ ;
268
+
269
+ _proto.useIconTabBar = function useIconTabBar() {
270
+ return this.getShowAnchorBar() && this.oManifestSettings.sectionLayout === "Tabs";
271
+ }
272
+ /**
273
+ * Returns true if the object page header is to be shown.
274
+ *
275
+ * @returns {boolean} `true` if the object page header is to be displayed
276
+ */
277
+ ;
278
+
279
+ _proto.getShowObjectPageHeader = function getShowObjectPageHeader() {
280
+ var _content5, _content5$header, _content6, _content6$header;
281
+
282
+ return ((_content5 = this.oManifestSettings.content) === null || _content5 === void 0 ? void 0 : (_content5$header = _content5.header) === null || _content5$header === void 0 ? void 0 : _content5$header.visible) !== undefined ? !!((_content6 = this.oManifestSettings.content) !== null && _content6 !== void 0 && (_content6$header = _content6.header) !== null && _content6$header !== void 0 && _content6$header.visible) : true;
283
+ } //endregion OP Specific
284
+ //region LR Specific
285
+
286
+ /**
287
+ * Retrieves the multiple view configuration from the manifest.
288
+ *
289
+ * @returns {MultipleViewsConfiguration} The views that represent the manifest object
290
+ */
291
+ ;
292
+
293
+ _proto.getViewConfiguration = function getViewConfiguration() {
294
+ return this.oManifestSettings.views;
295
+ }
296
+ /**
297
+ * Retrieves the stickyMultiTabHeader configuration from the manifest.
298
+ *
299
+ * @returns {boolean} Returns True if stickyMultiTabHeader is enabled or undefined
300
+ */
301
+ ;
302
+
303
+ _proto.getStickyMultiTabHeaderConfiguration = function getStickyMultiTabHeaderConfiguration() {
304
+ var bStickyMultiTabHeader = this.oManifestSettings.stickyMultiTabHeader;
305
+ return bStickyMultiTabHeader !== undefined ? bStickyMultiTabHeader : true;
306
+ }
307
+ /**
308
+ * Retrieves the KPI configuration from the manifest.
309
+ *
310
+ * @returns {object} Returns a map between KPI names and their respective configuration
311
+ */
312
+ ;
313
+
314
+ _proto.getKPIConfiguration = function getKPIConfiguration() {
315
+ return this.oManifestSettings.keyPerformanceIndicators || {};
316
+ }
317
+ /**
318
+ * Retrieves the filter configuration from the manifest.
319
+ *
320
+ * @returns {FilterManifestConfiguration} The filter configuration from the manifest
321
+ */
322
+ ;
323
+
324
+ _proto.getFilterConfiguration = function getFilterConfiguration() {
325
+ return this.getControlConfiguration("@com.sap.vocabularies.UI.v1.SelectionFields");
326
+ }
327
+ /**
328
+ * Returns true if there are multiple entity sets to be displayed.
329
+ *
330
+ * @returns {boolean} `true` if there are multiple entity sets
331
+ */
332
+ ;
333
+
334
+ _proto.hasMultipleEntitySets = function hasMultipleEntitySets() {
335
+ var _this = this;
336
+
337
+ var viewConfig = this.getViewConfiguration() || {
338
+ paths: []
339
+ };
340
+ var manifestEntitySet = this.oManifestSettings.entitySet;
341
+ return viewConfig.paths.find(function (path) {
342
+ var _path;
343
+
344
+ if ((_path = path) !== null && _path !== void 0 && _path.template) {
345
+ return undefined;
346
+ } else if (_this.hasMultipleVisualizations(path)) {
347
+ var _ref = path,
348
+ primary = _ref.primary,
349
+ secondary = _ref.secondary;
350
+ return primary.some(function (path) {
351
+ return path.entitySet && path.entitySet !== manifestEntitySet;
352
+ }) || secondary.some(function (path) {
378
353
  return path.entitySet && path.entitySet !== manifestEntitySet;
379
- }
380
- }) !== undefined;
381
- }
382
- /**
383
- * Returns the context path for the template if it is specified in the manifest.
384
- *
385
- * @returns {string} The context path for the template
386
- */
387
-
388
- }, {
389
- key: "getContextPath",
390
- value: function getContextPath() {
391
- var _this$oManifestSettin20;
392
-
393
- return (_this$oManifestSettin20 = this.oManifestSettings) === null || _this$oManifestSettin20 === void 0 ? void 0 : _this$oManifestSettin20.contextPath;
394
- }
395
- /**
396
- * Returns true if there are multiple visualizations.
397
- *
398
- * @param {ViewPathConfiguration} path The path from the view
399
- * @returns {boolean} `true` if there are multiple visualizations
400
- */
401
-
402
- }, {
403
- key: "hasMultipleVisualizations",
404
- value: function hasMultipleVisualizations(path) {
405
- var _primary2, _secondary2;
406
-
407
- if (!path) {
408
- var viewConfig = this.getViewConfiguration() || {
409
- paths: []
410
- };
411
- return viewConfig.paths.some(function (path) {
412
- var _primary, _secondary;
413
-
414
- return ((_primary = path.primary) === null || _primary === void 0 ? void 0 : _primary.length) > 0 && ((_secondary = path.secondary) === null || _secondary === void 0 ? void 0 : _secondary.length) > 0;
415
354
  });
355
+ } else {
356
+ path = path;
357
+ return path.entitySet && path.entitySet !== manifestEntitySet;
416
358
  }
359
+ }) !== undefined;
360
+ }
361
+ /**
362
+ * Returns the context path for the template if it is specified in the manifest.
363
+ *
364
+ * @returns {string} The context path for the template
365
+ */
366
+ ;
367
+
368
+ _proto.getContextPath = function getContextPath() {
369
+ var _this$oManifestSettin20;
417
370
 
418
- return ((_primary2 = path.primary) === null || _primary2 === void 0 ? void 0 : _primary2.length) > 0 && ((_secondary2 = path.secondary) === null || _secondary2 === void 0 ? void 0 : _secondary2.length) > 0;
419
- } //end region LR Specific
371
+ return (_this$oManifestSettin20 = this.oManifestSettings) === null || _this$oManifestSettin20 === void 0 ? void 0 : _this$oManifestSettin20.contextPath;
372
+ }
373
+ /**
374
+ * Returns true if there are multiple visualizations.
375
+ *
376
+ * @param {ViewPathConfiguration} path The path from the view
377
+ * @returns {boolean} `true` if there are multiple visualizations
378
+ */
379
+ ;
380
+
381
+ _proto.hasMultipleVisualizations = function hasMultipleVisualizations(path) {
382
+ var _primary2, _secondary2;
383
+
384
+ if (!path) {
385
+ var viewConfig = this.getViewConfiguration() || {
386
+ paths: []
387
+ };
388
+ return viewConfig.paths.some(function (path) {
389
+ var _primary, _secondary;
390
+
391
+ return ((_primary = path.primary) === null || _primary === void 0 ? void 0 : _primary.length) > 0 && ((_secondary = path.secondary) === null || _secondary === void 0 ? void 0 : _secondary.length) > 0;
392
+ });
393
+ }
420
394
 
421
- }]);
395
+ return ((_primary2 = path.primary) === null || _primary2 === void 0 ? void 0 : _primary2.length) > 0 && ((_secondary2 = path.secondary) === null || _secondary2 === void 0 ? void 0 : _secondary2.length) > 0;
396
+ } //end region LR Specific
397
+ ;
422
398
 
423
399
  return ManifestWrapper;
424
400
  }();
425
401
 
426
402
  return ManifestWrapper;
427
403
  }, false);
428
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk1hbmlmZXN0V3JhcHBlci50cyJdLCJuYW1lcyI6WyJNYW5pZmVzdFdyYXBwZXIiLCJvTWFuaWZlc3RTZXR0aW5ncyIsIm1lcmdlRm4iLCJjb252ZXJ0ZXJUeXBlIiwiaGlkZUZpbHRlckJhciIsImlzRGVza3RvcCIsImlzUGhvbmUiLCJmYWNldFRhcmdldCIsImNvbnRyb2xDb25maWd1cmF0aW9uIiwiZmFjZXRzIiwiY29udGVudCIsImhlYWRlciIsImFjdGlvbnMiLCJmb290ZXIiLCJ2YXJpYW50TWFuYWdlbWVudCIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIk5vbmUiLCJkZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCIsInNBbm5vdGF0aW9uUGF0aCIsIm5hdmlnYXRpb25PckNvbGxlY3Rpb25OYW1lIiwibmF2aWdhdGlvbiIsInZpZXdMZXZlbCIsImNvbnRlbnREZW5zaXRpZXMiLCJjb3p5IiwiY29tcGFjdCIsImZjbEVuYWJsZWQiLCJtYW5pZmVzdENvbnRlbnREZW5zaXR5Iiwic2hlbGxDb250ZW50RGVuc2l0eSIsImlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50Iiwic2VjdGlvbnMiLCJib2R5IiwiZ2V0U2hvd09iamVjdFBhZ2VIZWFkZXIiLCJlZGl0YWJsZUhlYWRlckNvbnRlbnQiLCJhbmNob3JCYXJWaXNpYmxlIiwidW5kZWZpbmVkIiwiZ2V0U2hvd0FuY2hvckJhciIsInNlY3Rpb25MYXlvdXQiLCJ2aXNpYmxlIiwidmlld3MiLCJrZXlQZXJmb3JtYW5jZUluZGljYXRvcnMiLCJnZXRDb250cm9sQ29uZmlndXJhdGlvbiIsInZpZXdDb25maWciLCJnZXRWaWV3Q29uZmlndXJhdGlvbiIsInBhdGhzIiwibWFuaWZlc3RFbnRpdHlTZXQiLCJlbnRpdHlTZXQiLCJmaW5kIiwicGF0aCIsInRlbXBsYXRlIiwiaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyIsInByaW1hcnkiLCJzZWNvbmRhcnkiLCJzb21lIiwiY29udGV4dFBhdGgiLCJs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LEdBQUdBLElBQVA7QUFDQSxtQkFBT0EsSUFBSSxDQUFDRixTQUFMLElBQWtCRSxJQUFJLENBQUNGLFNBQUwsS0FBbUJELGlCQUE1QztBQUNBO0FBQ0QsU0FiRCxNQWFPVixTQWRSO0FBZ0JBO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7OzthQUNDLDBCQUFxQztBQUFBOztBQUNwQywwQ0FBTyxLQUFLakMsaUJBQVosNERBQU8sd0JBQXdCb0QsV0FBL0I7QUFDQTtBQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OzthQUNDLG1DQUEwQk4sSUFBMUIsRUFBaUU7QUFBQTs7QUFDaEUsWUFBSSxDQUFDQSxJQUFMLEVBQVc7QUFDVixjQUFNTixVQUFVLEdBQUcsS0FBS0Msb0JBQUwsTUFBK0I7QUFBRUMsWUFBQUEsS0FBSyxFQUFFO0FBQVQsV0FBbEQ7QUFDQSxpQkFBT0YsVUFBVSxDQUFDRSxLQUFYLENBQWlCUyxJQUFqQixDQUFzQixVQUFBTCxJQUFJLEVBQUk7QUFBQTs7QUFDcEMsbUJBQ0MsYUFBQ0EsSUFBRCxDQUF3Q0csT0FBeEMsc0RBQWlESSxNQUFqRCxJQUEwRCxDQUExRCxJQUNBLGVBQUNQLElBQUQsQ0FBd0NJLFNBQXhDLDBEQUFtREcsTUFBbkQsSUFBNEQsQ0FGN0Q7QUFJQSxXQUxNLENBQVA7QUFNQTs7QUFDRCxlQUFPLGNBQUNQLElBQUQsQ0FBd0NHLE9BQXhDLHdEQUFpREksTUFBakQsSUFBMEQsQ0FBMUQsSUFBK0QsZ0JBQUNQLElBQUQsQ0FBd0NJLFNBQXhDLDREQUFtREcsTUFBbkQsSUFBNEQsQ0FBbEk7QUFDQSxPLENBRUQ7Ozs7Ozs7U0FHY3RELGUiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbmZpZ3VyYWJsZVJlY29yZCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQge1xuXHRCYXNlTWFuaWZlc3RTZXR0aW5ncyxcblx0Q29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24sXG5cdENvbnRlbnREZW5zaXRpZXNUeXBlLFxuXHRGaWx0ZXJNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdEZvcm1NYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzLFxuXHRNYW5pZmVzdEFjdGlvbixcblx0TWFuaWZlc3RIZWFkZXJGYWNldCxcblx0TWFuaWZlc3RTZWN0aW9uLFxuXHRNdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbixcblx0TmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0T2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MsXG5cdFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbixcblx0Vmlld1BhdGhDb25maWd1cmF0aW9uLFxuXHRUZW1wbGF0ZVR5cGUsXG5cdFZhcmlhbnRNYW5hZ2VtZW50VHlwZSxcblx0Q3VzdG9tVmlld1RlbXBsYXRlQ29uZmlndXJhdGlvbixcblx0Vmlld0NvbmZpZ3VyYXRpb24sXG5cdEtQSUNvbmZpZ3VyYXRpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuXG4vKipcbiAqXG4gKi9cbmNsYXNzIE1hbmlmZXN0V3JhcHBlciB7XG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgd3JhcHBlciBvYmplY3QgdG8gZW5zdXJlIHRoZSBkYXRhIHJldHVybmVkIGZyb20gdGhlIG1hbmlmZXN0IGlzIGNvbnNpc3RlbnQgYW5kIGV2ZXJ5dGhpbmcgaXMgbWVyZ2VkIGNvcnJlY3RseS5cblx0ICpcblx0ICogQHBhcmFtIHtCYXNlTWFuaWZlc3RTZXR0aW5nc30gb01hbmlmZXN0U2V0dGluZ3MgVGhlIG1hbmlmZXN0IHNldHRpbmdzIGZvciB0aGUgY3VycmVudCBwYWdlXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IG1lcmdlRm4gQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB0byBwZXJmb3JtIHRoZSBtZXJnZVxuXHQgKiBAcmV0dXJucyB7TWFuaWZlc3RXcmFwcGVyfSBUaGUgbWFuaWZlc3Qgd3JhcHBlciBvYmplY3Rcblx0ICovXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgb01hbmlmZXN0U2V0dGluZ3M6IEJhc2VNYW5pZmVzdFNldHRpbmdzLCBwcml2YXRlIG1lcmdlRm46IEZ1bmN0aW9uKSB7fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHRlbXBsYXRlIHR5cGUuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSB0eXBlIG9mIHRoZSBjdXJyZW50IHRlbXBsYXRlXG5cdCAqL1xuXHRnZXRUZW1wbGF0ZVR5cGUoKTogVGVtcGxhdGVUeXBlIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5jb252ZXJ0ZXJUeXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IHRlbXBsYXRlIHNob3VsZCBkaXNwbGF5IHRoZSBmaWx0ZXIgYmFyLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBmaWx0ZXIgYmFyIHNob3VsZCBiZSBoaWRkZW5cblx0ICovXG5cdGlzRmlsdGVyQmFySGlkZGVuKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhISh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzKT8uaGlkZUZpbHRlckJhcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3Mgd2hldGhlciB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBpcyBhIGRlc2t0b3Agb3Igbm90LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHdlIGFyZSBvbiBhIGRlc2t0b3Bcblx0ICovXG5cdGlzRGVza3RvcCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISF0aGlzLm9NYW5pZmVzdFNldHRpbmdzLmlzRGVza3RvcDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3Mgd2hldGhlciB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBpcyBhIG1vYmlsZSBwaG9uZSBvciBub3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgd2UgYXJlIG9uIGEgbW9iaWxlIHBob25lXG5cdCAqL1xuXHRpc1Bob25lKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIXRoaXMub01hbmlmZXN0U2V0dGluZ3MuaXNQaG9uZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGZvcm0gY29udGFpbmVycyAoZmllbGQgZ3JvdXBzIG9yIGlkZW50aWZpY2F0aW9uKSBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGZhY2V0VGFyZ2V0IFRoZSB0YXJnZXQgYW5ub3RhdGlvbiBwYXRoIGZvciB0aGlzIGZvcm1cblx0ICogQHJldHVybnMge0Zvcm1NYW5pZmVzdENvbmZpZ3VyYXRpb259IEEgc2V0IG9mIGZvcm0gY29udGFpbmVycyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBpbmRleGVkIGJ5IGFuIGl0ZXJhYmxlIGtleVxuXHQgKi9cblx0Z2V0Rm9ybUNvbnRhaW5lcihmYWNldFRhcmdldDogc3RyaW5nKTogRm9ybU1hbmlmZXN0Q29uZmlndXJhdGlvbiB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3MuY29udHJvbENvbmZpZ3VyYXRpb24/LltmYWNldFRhcmdldF0gYXMgRm9ybU1hbmlmZXN0Q29uZmlndXJhdGlvbjtcblx0fVxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBoZWFkZXIgZmFjZXRzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Q29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0SGVhZGVyRmFjZXQ+fSBBIHNldCBvZiBoZWFkZXIgZmFjZXRzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IGluZGV4ZWQgYnkgYW4gaXRlcmFibGUga2V5XG5cdCAqL1xuXHRnZXRIZWFkZXJGYWNldHMoKTogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0SGVhZGVyRmFjZXQ+IHtcblx0XHRyZXR1cm4gdGhpcy5tZXJnZUZuKFxuXHRcdFx0e30sXG5cdFx0XHR0aGlzLm9NYW5pZmVzdFNldHRpbmdzLmNvbnRyb2xDb25maWd1cmF0aW9uPy5bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGVhZGVyRmFjZXRzXCJdPy5mYWNldHMsXG5cdFx0XHQodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuY29udGVudD8uaGVhZGVyPy5mYWNldHNcblx0XHQpO1xuXHR9XG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGhlYWRlciBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Q29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0QWN0aW9uPn0gQSBzZXQgb2YgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBpbmRleGVkIGJ5IGFuIGl0ZXJhYmxlIGtleVxuXHQgKi9cblx0Z2V0SGVhZGVyQWN0aW9ucygpOiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RBY3Rpb24+IHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5jb250ZW50Py5oZWFkZXI/LmFjdGlvbnMgfHwge307XG5cdH1cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgZm9vdGVyIGFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RBY3Rpb24+fSBBIHNldCBvZiBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IGluZGV4ZWQgYnkgYW4gaXRlcmFibGUga2V5XG5cdCAqL1xuXHRnZXRGb290ZXJBY3Rpb25zKCk6IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEFjdGlvbj4ge1xuXHRcdHJldHVybiB0aGlzLm9NYW5pZmVzdFNldHRpbmdzLmNvbnRlbnQ/LmZvb3Rlcj8uYWN0aW9ucyB8fCB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHZhcmlhbnQgbWFuYWdlbWVudCBhcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQHJldHVybnMge1ZhcmlhbnRNYW5hZ2VtZW50VHlwZX0gQSB0eXBlIG9mIHZhcmlhbnQgbWFuYWdlbWVudFxuXHQgKi9cblx0Z2V0VmFyaWFudE1hbmFnZW1lbnQoKTogVmFyaWFudE1hbmFnZW1lbnRUeXBlIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy52YXJpYW50TWFuYWdlbWVudCB8fCBWYXJpYW50TWFuYWdlbWVudFR5cGUuTm9uZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGFubm90YXRpb24gUGF0aCBmb3IgdGhlIFNQViBpbiB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBUaGUgYW5ub3RhdGlvbiBwYXRoIGZvciB0aGUgZGVmYXVsdCBTUFYgb3IgdW5kZWZpbmVkLlxuXHQgKi9cblx0Z2V0RGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGgoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5kZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGNvbnRyb2wgY29uZmlndXJhdGlvbiBhcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBmb3IgYSBzcGVjaWZpYyBhbm5vdGF0aW9uIHBhdGguXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzQW5ub3RhdGlvblBhdGggVGhlIHJlbGF0aXZlIGFubm90YXRpb24gcGF0aFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgY29udHJvbCBjb25maWd1cmF0aW9uXG5cdCAqL1xuXHRnZXRDb250cm9sQ29uZmlndXJhdGlvbihzQW5ub3RhdGlvblBhdGg6IHN0cmluZyk6IGFueSB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3M/LmNvbnRyb2xDb25maWd1cmF0aW9uPy5bc0Fubm90YXRpb25QYXRoXSB8fCB7fTtcblx0fVxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBjb25maWd1cmVkIHNldHRpbmdzIGZvciBhIGdpdmVuIG5hdmlnYXRpb24gdGFyZ2V0LlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmF2aWdhdGlvbk9yQ29sbGVjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIG5hdmlnYXRpb24gdG8gY2hlY2tcblx0ICogQHJldHVybnMge05hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb259IFRoZSBuYXZpZ2F0aW9uIHNldHRpbmdzIGNvbmZpZ3VyYXRpb25cblx0ICovXG5cdGdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uKG5hdmlnYXRpb25PckNvbGxlY3Rpb25OYW1lOiBzdHJpbmcpOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8ubmF2aWdhdGlvbj8uW25hdmlnYXRpb25PckNvbGxlY3Rpb25OYW1lXSB8fCB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHZpZXcgbGV2ZWwuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBjdXJyZW50IHZpZXcgbGV2ZWxcblx0ICovXG5cdGdldFZpZXdMZXZlbCgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy52aWV3TGV2ZWwgfHwgLTE7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBjb250ZW50RGVuc2l0aWVzIHNldHRpbmcgb2YgdGhlIGFwcGxpY2F0aW9uLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Q29udGVudERlbnNpdGllc1R5cGV9IFRoZSBjdXJyZW50IGNvbnRlbnQgZGVuc2l0eVxuXHQgKi9cblx0Z2V0Q29udGVudERlbnNpdGllcygpOiBDb250ZW50RGVuc2l0aWVzVHlwZSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdHRoaXMub01hbmlmZXN0U2V0dGluZ3M/LmNvbnRlbnREZW5zaXRpZXMgfHwge1xuXHRcdFx0XHRjb3p5OiBmYWxzZSxcblx0XHRcdFx0Y29tcGFjdDogZmFsc2Vcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIHdlIGFyZSBpbiBGQ0wgbW9kZSBvciBub3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgd2UgYXJlIGluIEZDTFxuXHQgKi9cblx0aXNGY2xFbmFibGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIXRoaXMub01hbmlmZXN0U2V0dGluZ3M/LmZjbEVuYWJsZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgc2V0dGluZ3MgKGFwcGxpY2F0aW9uIC8gc2hlbGwpIGFsbG93cyB1cyB0byB1c2UgY29uZGVuc2VkIGxheW91dC5cblx0ICpcblx0ICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB3ZSBjYW4gdXNlIHRoZSBjb25kZW5zZWQgbGF5b3V0LCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdGlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50KCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IG1hbmlmZXN0Q29udGVudERlbnNpdHkgPSB0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5jb250ZW50RGVuc2l0aWVzIHx8IHtcblx0XHRcdGNvenk6IGZhbHNlLFxuXHRcdFx0Y29tcGFjdDogZmFsc2Vcblx0XHR9O1xuXHRcdGNvbnN0IHNoZWxsQ29udGVudERlbnNpdHkgPSB0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5zaGVsbENvbnRlbnREZW5zaXR5IHx8IFwiY29tcGFjdFwiO1xuXHRcdGxldCBpc0NvbmRlbnNlZExheW91dENvbXBsaWFudCA9IHRydWU7XG5cdFx0aWYgKChtYW5pZmVzdENvbnRlbnREZW5zaXR5Py5jb3p5ID09PSB0cnVlICYmIG1hbmlmZXN0Q29udGVudERlbnNpdHk/LmNvbXBhY3QgIT09IHRydWUpIHx8IHNoZWxsQ29udGVudERlbnNpdHkgPT09IFwiY296eVwiKSB7XG5cdFx0XHRpc0NvbmRlbnNlZExheW91dENvbXBsaWFudCA9IGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gaXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQ7XG5cdH1cblxuXHQvL3JlZ2lvbiBPUCBTcGVjaWZpY1xuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHNlY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Q29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0U2VjdGlvbj59IEEgc2V0IG9mIG1hbmlmZXN0IHNlY3Rpb25zIGluZGV4ZWQgYnkgYW4gaXRlcmFibGUga2V5XG5cdCAqL1xuXHRnZXRTZWN0aW9ucygpOiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RTZWN0aW9uPiB7XG5cdFx0cmV0dXJuIHRoaXMubWVyZ2VGbihcblx0XHRcdHt9LFxuXHRcdFx0dGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5jb250cm9sQ29uZmlndXJhdGlvbj8uW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZhY2V0c1wiXT8uc2VjdGlvbnMsXG5cdFx0XHQodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuY29udGVudD8uYm9keT8uc2VjdGlvbnNcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdHJ1ZSBvZiB0aGUgaGVhZGVyIG9mIHRoZSBhcHBsaWNhdGlvbiBpcyBlZGl0YWJsZSBhbmQgc2hvdWxkIGFwcGVhciBpbiB0aGUgZmFjZXRzLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBoZWFkZXIgaWYgZWRpdGFibGVcblx0ICovXG5cdGlzSGVhZGVyRWRpdGFibGUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2hvd09iamVjdFBhZ2VIZWFkZXIoKSAmJiAodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuZWRpdGFibGVIZWFkZXJDb250ZW50O1xuXHR9XG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRydWUgaWYgd2Ugc2hvdWxkIHNob3cgdGhlIG9iamVjdCBwYWdlIGhlYWRlci5cblx0ICpcblx0ICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaGVhZGVyIHNob3VsZCBiZSBkaXNwbGF5ZWRcblx0ICovXG5cdGdldFNob3dBbmNob3JCYXIoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzKS5jb250ZW50Py5oZWFkZXI/LmFuY2hvckJhclZpc2libGUgIT09IHVuZGVmaW5lZFxuXHRcdFx0PyAhISh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzKS5jb250ZW50Py5oZWFkZXI/LmFuY2hvckJhclZpc2libGVcblx0XHRcdDogdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIHdoZXRoZXIgb3Igbm90IHRoZSBzZWN0aW9uIHdpbGwgYmUgZGlzcGxheWVkIGluIGRpZmZlcmVudCB0YWJzLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBpY29uIHRhYiBiYXIgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBzY3JvbGxpbmdcblx0ICovXG5cdHVzZUljb25UYWJCYXIoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2hvd0FuY2hvckJhcigpICYmICh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzKS5zZWN0aW9uTGF5b3V0ID09PSBcIlRhYnNcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCBwYWdlIGhlYWRlciBpcyB0byBiZSBzaG93bi5cblx0ICpcblx0ICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgb2JqZWN0IHBhZ2UgaGVhZGVyIGlzIHRvIGJlIGRpc3BsYXllZFxuXHQgKi9cblx0Z2V0U2hvd09iamVjdFBhZ2VIZWFkZXIoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzKS5jb250ZW50Py5oZWFkZXI/LnZpc2libGUgIT09IHVuZGVmaW5lZFxuXHRcdFx0PyAhISh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzKS5jb250ZW50Py5oZWFkZXI/LnZpc2libGVcblx0XHRcdDogdHJ1ZTtcblx0fVxuXG5cdC8vZW5kcmVnaW9uIE9QIFNwZWNpZmljXG5cblx0Ly9yZWdpb24gTFIgU3BlY2lmaWNcblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBtdWx0aXBsZSB2aWV3IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtNdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbn0gVGhlIHZpZXdzIHRoYXQgcmVwcmVzZW50IHRoZSBtYW5pZmVzdCBvYmplY3Rcblx0ICovXG5cdGdldFZpZXdDb25maWd1cmF0aW9uKCk6IE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gKHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MpLnZpZXdzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgS1BJIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IFJldHVybnMgYSBtYXAgYmV0d2VlbiBLUEkgbmFtZXMgYW5kIHRoZWlyIHJlc3BlY3RpdmUgY29uZmlndXJhdGlvblxuXHQgKi9cblx0Z2V0S1BJQ29uZmlndXJhdGlvbigpOiB7IFtrcGlOYW1lOiBzdHJpbmddOiBLUElDb25maWd1cmF0aW9uIH0ge1xuXHRcdHJldHVybiAodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncykua2V5UGVyZm9ybWFuY2VJbmRpY2F0b3JzIHx8IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgZmlsdGVyIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtGaWx0ZXJNYW5pZmVzdENvbmZpZ3VyYXRpb259IFRoZSBmaWx0ZXIgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBtYW5pZmVzdFxuXHQgKi9cblx0Z2V0RmlsdGVyQ29uZmlndXJhdGlvbigpOiBGaWx0ZXJNYW5pZmVzdENvbmZpZ3VyYXRpb24ge1xuXHRcdHJldHVybiB0aGlzLmdldENvbnRyb2xDb25maWd1cmF0aW9uKFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvbkZpZWxkc1wiKTtcblx0fVxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBlbnRpdHkgc2V0cyB0byBiZSBkaXNwbGF5ZWQuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGVudGl0eSBzZXRzXG5cdCAqL1xuXHRoYXNNdWx0aXBsZUVudGl0eVNldHMoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgdmlld0NvbmZpZyA9IHRoaXMuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKSB8fCB7IHBhdGhzOiBbXSB9O1xuXHRcdGNvbnN0IG1hbmlmZXN0RW50aXR5U2V0ID0gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5lbnRpdHlTZXQ7XG5cdFx0cmV0dXJuIChcblx0XHRcdHZpZXdDb25maWcucGF0aHMuZmluZCgocGF0aDogVmlld0NvbmZpZ3VyYXRpb24pID0+IHtcblx0XHRcdFx0aWYgKChwYXRoIGFzIEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb24pPy50ZW1wbGF0ZSkge1xuXHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKHBhdGggYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24pKSB7XG5cdFx0XHRcdFx0Y29uc3QgeyBwcmltYXJ5LCBzZWNvbmRhcnkgfSA9IHBhdGggYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb247XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdHByaW1hcnkuc29tZShwYXRoID0+IHBhdGguZW50aXR5U2V0ICYmIHBhdGguZW50aXR5U2V0ICE9PSBtYW5pZmVzdEVudGl0eVNldCkgfHxcblx0XHRcdFx0XHRcdHNlY29uZGFyeS5zb21lKHBhdGggPT4gcGF0aC5lbnRpdHlTZXQgJiYgcGF0aC5lbnRpdHlTZXQgIT09IG1hbmlmZXN0RW50aXR5U2V0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cGF0aCA9IHBhdGggYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdFx0XHRcdHJldHVybiBwYXRoLmVudGl0eVNldCAmJiBwYXRoLmVudGl0eVNldCAhPT0gbWFuaWZlc3RFbnRpdHlTZXQ7XG5cdFx0XHRcdH1cblx0XHRcdH0pICE9PSB1bmRlZmluZWRcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGNvbnRleHQgcGF0aCBmb3IgdGhlIHRlbXBsYXRlIGlmIGl0IGlzIHNwZWNpZmllZCBpbiB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb250ZXh0IHBhdGggZm9yIHRoZSB0ZW1wbGF0ZVxuXHQgKi9cblx0Z2V0Q29udGV4dFBhdGgoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8uY29udGV4dFBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSB2aXN1YWxpemF0aW9ucy5cblx0ICpcblx0ICogQHBhcmFtIHtWaWV3UGF0aENvbmZpZ3VyYXRpb259IHBhdGggVGhlIHBhdGggZnJvbSB0aGUgdmlld1xuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSB2aXN1YWxpemF0aW9uc1xuXHQgKi9cblx0aGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyhwYXRoPzogVmlld1BhdGhDb25maWd1cmF0aW9uKTogYm9vbGVhbiB7XG5cdFx0aWYgKCFwYXRoKSB7XG5cdFx0XHRjb25zdCB2aWV3Q29uZmlnID0gdGhpcy5nZXRWaWV3Q29uZmlndXJhdGlvbigpIHx8IHsgcGF0aHM6IFtdIH07XG5cdFx0XHRyZXR1cm4gdmlld0NvbmZpZy5wYXRocy5zb21lKHBhdGggPT4ge1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdChwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uKS5wcmltYXJ5Py5sZW5ndGggPiAwICYmXG5cdFx0XHRcdFx0KHBhdGggYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24pLnNlY29uZGFyeT8ubGVuZ3RoID4gMFxuXHRcdFx0XHQpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiAocGF0aCBhcyBDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbikucHJpbWFyeT8ubGVuZ3RoID4gMCAmJiAocGF0aCBhcyBDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbikuc2Vjb25kYXJ5Py5sZW5ndGggPiAwO1xuXHR9XG5cblx0Ly9lbmQgcmVnaW9uIExSIFNwZWNpZmljXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1hbmlmZXN0V3JhcHBlcjtcbiJdfQ==
404
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk1hbmlmZXN0V3JhcHBlci50cyJdLCJuYW1lcyI6WyJNYW5pZmVzdFdyYXBwZXIiLCJvTWFuaWZlc3RTZXR0aW5ncyIsIm1lcmdlRm4iLCJnZXRUZW1wbGF0ZVR5cGUiLCJjb252ZXJ0ZXJUeXBlIiwiaXNGaWx0ZXJCYXJIaWRkZW4iLCJoaWRlRmlsdGVyQmFyIiwiaXNEZXNrdG9wIiwiaXNQaG9uZSIsImdldEZvcm1Db250YWluZXIiLCJmYWNldFRhcmdldCIsImNvbnRyb2xDb25maWd1cmF0aW9uIiwiZ2V0SGVhZGVyRmFjZXRzIiwiZmFjZXRzIiwiY29udGVudCIsImhlYWRlciIsImdldEhlYWRlckFjdGlvbnMiLCJhY3Rpb25zIiwiZ2V0Rm9vdGVyQWN0aW9ucyIsImZvb3RlciIsImdldFZhcmlhbnRNYW5hZ2VtZW50IiwidmFyaWFudE1hbmFnZW1lbnQiLCJWYXJpYW50TWFuYWdlbWVudFR5cGUiLCJOb25lIiwiZ2V0RGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGgiLCJkZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCIsImdldENvbnRyb2xDb25maWd1cmF0aW9uIiwic0Fubm90YXRpb25QYXRoIiwiZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24iLCJuYXZpZ2F0aW9uT3JDb2xsZWN0aW9uTmFtZSIsIm5hdmlnYXRpb24iLCJnZXRWaWV3TGV2ZWwiLCJ2aWV3TGV2ZWwiLCJnZXRDb250ZW50RGVuc2l0aWVzIiwiY29udGVudERlbnNpdGllcyIsImNvenkiLCJjb21wYWN0IiwiaXNGY2xFbmFibGVkIiwiZmNsRW5hYmxlZCIsImlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50IiwibWFuaWZlc3RDb250ZW50RGVuc2l0eSIsInNoZWxsQ29udGVudERlbnNpdHkiLCJnZXRTZWN0aW9ucyIsInNlY3Rpb25zIiwiYm9keSIsImlzSGVhZGVyRWRpdGFibGUiLCJnZXRTaG93T2JqZWN0UGFnZUhlYWRlciIsImVkaXRhYmxlSGVhZGVyQ29udGVudCIsImdldFNob3dBbmNob3JCYXIiLCJhbmNob3JCYXJWaXNpYmxlIiwidW5kZWZpbmVkIiwidXNlSWNvblRhYkJhciIsInNlY3Rpb25MYXlvdXQiLCJ2aXNpYmxlIiwiZ2V0Vmlld0NvbmZpZ3VyYXRpb24iLCJ2aWV3cyIsImdldFN0aWNreU11bHRpVGFiSGVhZGVyQ29uZmlndXJhdGlvbiIsImJTdGlja3lNdWx0aVRhYkhlYWRlciIsInN0aWNreU11bHRpVGFiSGVhZGVyIiwiZ2V0S1BJQ29uZmlndXJhdGlvbiIsImtleVBlcmZvcm1hbmNlSW5kaWNhdG9ycyIsImdldEZpbHRlckNvbmZpZ3VyYXRpb24iLCJoYXNNdWx0aXBsZUVudGl0eVNldHMiLCJ2aWV3Q29uZmlnIiwicGF0aHMiLCJtYW5pZmVzdEVudGl0eVNldCIsImVudGl0eVNldCIsImZpbmQiLCJwYXRoIiwidGVtcGxhdGUiLCJoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zIiwicHJpbWFyeSIsInNlY29uZGFyeSIsInNvbWUiLCJnZXRDb250ZXh0UGF0aCIsImNvbnRleHRQYXRoIiwibGVuZ3RoIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7QUFxQkE7QUFDQTtBQUNBO01BQ01BLGU7QUFDTDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNDLDZCQUFvQkMsaUJBQXBCLEVBQXFFQyxPQUFyRSxFQUF3RjtBQUFBLFdBQXBFRCxpQkFBb0UsR0FBcEVBLGlCQUFvRTtBQUFBLFdBQW5CQyxPQUFtQixHQUFuQkEsT0FBbUI7QUFBRTtBQUUxRjtBQUNEO0FBQ0E7QUFDQTtBQUNBOzs7OztXQUNDQyxlLEdBQUEsMkJBQWdDO0FBQy9CLGFBQU8sS0FBS0YsaUJBQUwsQ0FBdUJHLGFBQTlCO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBOzs7V0FDQ0MsaUIsR0FBQSw2QkFBNkI7QUFBQTs7QUFDNUIsYUFBTyxDQUFDLDJCQUFFLEtBQUtKLGlCQUFQLGtEQUFDLHNCQUF3REssYUFBekQsQ0FBUjtBQUNBO0FBRUQ7QUFD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O0FBQ0E7QUFDRCxPQWJELE1BYU9mLFNBZFI7QUFnQkE7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBOzs7V0FDQ3dCLGMsR0FBQSwwQkFBcUM7QUFBQTs7QUFDcEMsd0NBQU8sS0FBS3pFLGlCQUFaLDREQUFPLHdCQUF3QjBFLFdBQS9CO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztXQUNDTCx5QixHQUFBLG1DQUEwQkYsSUFBMUIsRUFBaUU7QUFBQTs7QUFDaEUsVUFBSSxDQUFDQSxJQUFMLEVBQVc7QUFDVixZQUFNTCxVQUFVLEdBQUcsS0FBS1Qsb0JBQUwsTUFBK0I7QUFBRVUsVUFBQUEsS0FBSyxFQUFFO0FBQVQsU0FBbEQ7QUFDQSxlQUFPRCxVQUFVLENBQUNDLEtBQVgsQ0FBaUJTLElBQWpCLENBQXNCLFVBQUFMLElBQUksRUFBSTtBQUFBOztBQUNwQyxpQkFDQyxhQUFDQSxJQUFELENBQXdDRyxPQUF4QyxzREFBaURLLE1BQWpELElBQTBELENBQTFELElBQ0EsZUFBQ1IsSUFBRCxDQUF3Q0ksU0FBeEMsMERBQW1ESSxNQUFuRCxJQUE0RCxDQUY3RDtBQUlBLFNBTE0sQ0FBUDtBQU1BOztBQUNELGFBQU8sY0FBQ1IsSUFBRCxDQUF3Q0csT0FBeEMsd0RBQWlESyxNQUFqRCxJQUEwRCxDQUExRCxJQUErRCxnQkFBQ1IsSUFBRCxDQUF3Q0ksU0FBeEMsNERBQW1ESSxNQUFuRCxJQUE0RCxDQUFsSTtBQUNBLEssQ0FFRDs7Ozs7O1NBR2M1RSxlIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25maWd1cmFibGVSZWNvcmQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHtcblx0QmFzZU1hbmlmZXN0U2V0dGluZ3MsXG5cdENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uLFxuXHRDb250ZW50RGVuc2l0aWVzVHlwZSxcblx0RmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncyxcblx0TWFuaWZlc3RBY3Rpb24sXG5cdE1hbmlmZXN0SGVhZGVyRmFjZXQsXG5cdE1hbmlmZXN0U2VjdGlvbixcblx0TXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb24sXG5cdE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzLFxuXHRTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24sXG5cdFZpZXdQYXRoQ29uZmlndXJhdGlvbixcblx0VGVtcGxhdGVUeXBlLFxuXHRWYXJpYW50TWFuYWdlbWVudFR5cGUsXG5cdEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb24sXG5cdFZpZXdDb25maWd1cmF0aW9uLFxuXHRLUElDb25maWd1cmF0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcblxuLyoqXG4gKlxuICovXG5jbGFzcyBNYW5pZmVzdFdyYXBwZXIge1xuXHQvKipcblx0ICogQ3JlYXRlcyBhIHdyYXBwZXIgb2JqZWN0IHRvIGVuc3VyZSB0aGUgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBtYW5pZmVzdCBpcyBjb25zaXN0ZW50IGFuZCBldmVyeXRoaW5nIGlzIG1lcmdlZCBjb3JyZWN0bHkuXG5cdCAqXG5cdCAqIEBwYXJhbSB7QmFzZU1hbmlmZXN0U2V0dGluZ3N9IG9NYW5pZmVzdFNldHRpbmdzIFRoZSBtYW5pZmVzdCBzZXR0aW5ncyBmb3IgdGhlIGN1cnJlbnQgcGFnZVxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXJnZUZuIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHVzZWQgdG8gcGVyZm9ybSB0aGUgbWVyZ2Vcblx0ICogQHJldHVybnMge01hbmlmZXN0V3JhcHBlcn0gVGhlIG1hbmlmZXN0IHdyYXBwZXIgb2JqZWN0XG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIG9NYW5pZmVzdFNldHRpbmdzOiBCYXNlTWFuaWZlc3RTZXR0aW5ncywgcHJpdmF0ZSBtZXJnZUZuOiBGdW5jdGlvbikge31cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY3VycmVudCB0ZW1wbGF0ZSB0eXBlLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgdHlwZSBvZiB0aGUgY3VycmVudCB0ZW1wbGF0ZVxuXHQgKi9cblx0Z2V0VGVtcGxhdGVUeXBlKCk6IFRlbXBsYXRlVHlwZSB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3MuY29udmVydGVyVHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3Mgd2hldGhlciB0aGUgY3VycmVudCB0ZW1wbGF0ZSBzaG91bGQgZGlzcGxheSB0aGUgZmlsdGVyIGJhci5cblx0ICpcblx0ICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZmlsdGVyIGJhciBzaG91bGQgYmUgaGlkZGVuXG5cdCAqL1xuXHRpc0ZpbHRlckJhckhpZGRlbigpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISEodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncyk/LmhpZGVGaWx0ZXJCYXI7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMgYSBkZXNrdG9wIG9yIG5vdC5cblx0ICpcblx0ICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB3ZSBhcmUgb24gYSBkZXNrdG9wXG5cdCAqL1xuXHRpc0Rlc2t0b3AoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICEhdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5pc0Rlc2t0b3A7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMgYSBtb2JpbGUgcGhvbmUgb3Igbm90LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHdlIGFyZSBvbiBhIG1vYmlsZSBwaG9uZVxuXHQgKi9cblx0aXNQaG9uZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISF0aGlzLm9NYW5pZmVzdFNldHRpbmdzLmlzUGhvbmU7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBmb3JtIGNvbnRhaW5lcnMgKGZpZWxkIGdyb3VwcyBvciBpZGVudGlmaWNhdGlvbikgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBmYWNldFRhcmdldCBUaGUgdGFyZ2V0IGFubm90YXRpb24gcGF0aCBmb3IgdGhpcyBmb3JtXG5cdCAqIEByZXR1cm5zIHtGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9ufSBBIHNldCBvZiBmb3JtIGNvbnRhaW5lcnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgaW5kZXhlZCBieSBhbiBpdGVyYWJsZSBrZXlcblx0ICovXG5cdGdldEZvcm1Db250YWluZXIoZmFjZXRUYXJnZXQ6IHN0cmluZyk6IEZvcm1NYW5pZmVzdENvbmZpZ3VyYXRpb24ge1xuXHRcdHJldHVybiB0aGlzLm9NYW5pZmVzdFNldHRpbmdzLmNvbnRyb2xDb25maWd1cmF0aW9uPy5bZmFjZXRUYXJnZXRdIGFzIEZvcm1NYW5pZmVzdENvbmZpZ3VyYXRpb247XG5cdH1cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgaGVhZGVyIGZhY2V0cyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQHJldHVybnMge0NvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEhlYWRlckZhY2V0Pn0gQSBzZXQgb2YgaGVhZGVyIGZhY2V0cyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBpbmRleGVkIGJ5IGFuIGl0ZXJhYmxlIGtleVxuXHQgKi9cblx0Z2V0SGVhZGVyRmFjZXRzKCk6IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEhlYWRlckZhY2V0PiB7XG5cdFx0cmV0dXJuIHRoaXMubWVyZ2VGbihcblx0XHRcdHt9LFxuXHRcdFx0dGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5jb250cm9sQ29uZmlndXJhdGlvbj8uW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckZhY2V0c1wiXT8uZmFjZXRzLFxuXHRcdFx0KHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MpLmNvbnRlbnQ/LmhlYWRlcj8uZmFjZXRzXG5cdFx0KTtcblx0fVxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBoZWFkZXIgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQHJldHVybnMge0NvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEFjdGlvbj59IEEgc2V0IG9mIGFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgaW5kZXhlZCBieSBhbiBpdGVyYWJsZSBrZXlcblx0ICovXG5cdGdldEhlYWRlckFjdGlvbnMoKTogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0QWN0aW9uPiB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3MuY29udGVudD8uaGVhZGVyPy5hY3Rpb25zIHx8IHt9O1xuXHR9XG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGZvb3RlciBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Q29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0QWN0aW9uPn0gQSBzZXQgb2YgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBpbmRleGVkIGJ5IGFuIGl0ZXJhYmxlIGtleVxuXHQgKi9cblx0Z2V0Rm9vdGVyQWN0aW9ucygpOiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RBY3Rpb24+IHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5jb250ZW50Py5mb290ZXI/LmFjdGlvbnMgfHwge307XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB2YXJpYW50IG1hbmFnZW1lbnQgYXMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtWYXJpYW50TWFuYWdlbWVudFR5cGV9IEEgdHlwZSBvZiB2YXJpYW50IG1hbmFnZW1lbnRcblx0ICovXG5cdGdldFZhcmlhbnRNYW5hZ2VtZW50KCk6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3MudmFyaWFudE1hbmFnZW1lbnQgfHwgVmFyaWFudE1hbmFnZW1lbnRUeXBlLk5vbmU7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBhbm5vdGF0aW9uIFBhdGggZm9yIHRoZSBTUFYgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH0gVGhlIGFubm90YXRpb24gcGF0aCBmb3IgdGhlIGRlZmF1bHQgU1BWIG9yIHVuZGVmaW5lZC5cblx0ICovXG5cdGdldERlZmF1bHRUZW1wbGF0ZUFubm90YXRpb25QYXRoKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3MuZGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBjb250cm9sIGNvbmZpZ3VyYXRpb24gYXMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgZm9yIGEgc3BlY2lmaWMgYW5ub3RhdGlvbiBwYXRoLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0Fubm90YXRpb25QYXRoIFRoZSByZWxhdGl2ZSBhbm5vdGF0aW9uIHBhdGhcblx0ICogQHByaXZhdGVcblx0ICogQHJldHVybnMge29iamVjdH0gVGhlIGNvbnRyb2wgY29uZmlndXJhdGlvblxuXHQgKi9cblx0Z2V0Q29udHJvbENvbmZpZ3VyYXRpb24oc0Fubm90YXRpb25QYXRoOiBzdHJpbmcpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5jb250cm9sQ29uZmlndXJhdGlvbj8uW3NBbm5vdGF0aW9uUGF0aF0gfHwge307XG5cdH1cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY29uZmlndXJlZCBzZXR0aW5ncyBmb3IgYSBnaXZlbiBuYXZpZ2F0aW9uIHRhcmdldC5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hdmlnYXRpb25PckNvbGxlY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBuYXZpZ2F0aW9uIHRvIGNoZWNrXG5cdCAqIEByZXR1cm5zIHtOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9ufSBUaGUgbmF2aWdhdGlvbiBzZXR0aW5ncyBjb25maWd1cmF0aW9uXG5cdCAqL1xuXHRnZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uT3JDb2xsZWN0aW9uTmFtZTogc3RyaW5nKTogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbiB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3M/Lm5hdmlnYXRpb24/LltuYXZpZ2F0aW9uT3JDb2xsZWN0aW9uTmFtZV0gfHwge307XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB2aWV3IGxldmVsLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgY3VycmVudCB2aWV3IGxldmVsXG5cdCAqL1xuXHRnZXRWaWV3TGV2ZWwoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8udmlld0xldmVsIHx8IC0xO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY29udGVudERlbnNpdGllcyBzZXR0aW5nIG9mIHRoZSBhcHBsaWNhdGlvbi5cblx0ICpcblx0ICogQHJldHVybnMge0NvbnRlbnREZW5zaXRpZXNUeXBlfSBUaGUgY3VycmVudCBjb250ZW50IGRlbnNpdHlcblx0ICovXG5cdGdldENvbnRlbnREZW5zaXRpZXMoKTogQ29udGVudERlbnNpdGllc1R5cGUge1xuXHRcdHJldHVybiAoXG5cdFx0XHR0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5jb250ZW50RGVuc2l0aWVzIHx8IHtcblx0XHRcdFx0Y296eTogZmFsc2UsXG5cdFx0XHRcdGNvbXBhY3Q6IGZhbHNlXG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3Mgd2hldGhlciB3ZSBhcmUgaW4gRkNMIG1vZGUgb3Igbm90LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHdlIGFyZSBpbiBGQ0xcblx0ICovXG5cdGlzRmNsRW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISF0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5mY2xFbmFibGVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IHNldHRpbmdzIChhcHBsaWNhdGlvbiAvIHNoZWxsKSBhbGxvd3MgdXMgdG8gdXNlIGNvbmRlbnNlZCBsYXlvdXQuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgd2UgY2FuIHVzZSB0aGUgY29uZGVuc2VkIGxheW91dCwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRpc0NvbmRlbnNlZExheW91dENvbXBsaWFudCgpOiBib29sZWFuIHtcblx0XHRjb25zdCBtYW5pZmVzdENvbnRlbnREZW5zaXR5ID0gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8uY29udGVudERlbnNpdGllcyB8fCB7XG5cdFx0XHRjb3p5OiBmYWxzZSxcblx0XHRcdGNvbXBhY3Q6IGZhbHNlXG5cdFx0fTtcblx0XHRjb25zdCBzaGVsbENvbnRlbnREZW5zaXR5ID0gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8uc2hlbGxDb250ZW50RGVuc2l0eSB8fCBcImNvbXBhY3RcIjtcblx0XHRsZXQgaXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQgPSB0cnVlO1xuXHRcdGlmICgobWFuaWZlc3RDb250ZW50RGVuc2l0eT8uY296eSA9PT0gdHJ1ZSAmJiBtYW5pZmVzdENvbnRlbnREZW5zaXR5Py5jb21wYWN0ICE9PSB0cnVlKSB8fCBzaGVsbENvbnRlbnREZW5zaXR5ID09PSBcImNvenlcIikge1xuXHRcdFx0aXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQgPSBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIGlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50O1xuXHR9XG5cblx0Ly9yZWdpb24gT1AgU3BlY2lmaWNcblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBzZWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQHJldHVybnMge0NvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdFNlY3Rpb24+fSBBIHNldCBvZiBtYW5pZmVzdCBzZWN0aW9ucyBpbmRleGVkIGJ5IGFuIGl0ZXJhYmxlIGtleVxuXHQgKi9cblx0Z2V0U2VjdGlvbnMoKTogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0U2VjdGlvbj4ge1xuXHRcdHJldHVybiB0aGlzLm1lcmdlRm4oXG5cdFx0XHR7fSxcblx0XHRcdHRoaXMub01hbmlmZXN0U2V0dGluZ3MuY29udHJvbENvbmZpZ3VyYXRpb24/LltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GYWNldHNcIl0/LnNlY3Rpb25zLFxuXHRcdFx0KHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MpLmNvbnRlbnQ/LmJvZHk/LnNlY3Rpb25zXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRydWUgb2YgdGhlIGhlYWRlciBvZiB0aGUgYXBwbGljYXRpb24gaXMgZWRpdGFibGUgYW5kIHNob3VsZCBhcHBlYXIgaW4gdGhlIGZhY2V0cy5cblx0ICpcblx0ICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaGVhZGVyIGlmIGVkaXRhYmxlXG5cdCAqL1xuXHRpc0hlYWRlckVkaXRhYmxlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldFNob3dPYmplY3RQYWdlSGVhZGVyKCkgJiYgKHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MpLmVkaXRhYmxlSGVhZGVyQ29udGVudDtcblx0fVxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlIGlmIHdlIHNob3VsZCBzaG93IHRoZSBvYmplY3QgcGFnZSBoZWFkZXIuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGhlYWRlciBzaG91bGQgYmUgZGlzcGxheWVkXG5cdCAqL1xuXHRnZXRTaG93QW5jaG9yQmFyKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuY29udGVudD8uaGVhZGVyPy5hbmNob3JCYXJWaXNpYmxlICE9PSB1bmRlZmluZWRcblx0XHRcdD8gISEodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuY29udGVudD8uaGVhZGVyPy5hbmNob3JCYXJWaXNpYmxlXG5cdFx0XHQ6IHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogRGVmaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGUgc2VjdGlvbiB3aWxsIGJlIGRpc3BsYXllZCBpbiBkaWZmZXJlbnQgdGFicy5cblx0ICpcblx0ICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaWNvbiB0YWIgYmFyIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2Ygc2Nyb2xsaW5nXG5cdCAqL1xuXHR1c2VJY29uVGFiQmFyKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldFNob3dBbmNob3JCYXIoKSAmJiAodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuc2VjdGlvbkxheW91dCA9PT0gXCJUYWJzXCI7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3QgcGFnZSBoZWFkZXIgaXMgdG8gYmUgc2hvd24uXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIG9iamVjdCBwYWdlIGhlYWRlciBpcyB0byBiZSBkaXNwbGF5ZWRcblx0ICovXG5cdGdldFNob3dPYmplY3RQYWdlSGVhZGVyKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuY29udGVudD8uaGVhZGVyPy52aXNpYmxlICE9PSB1bmRlZmluZWRcblx0XHRcdD8gISEodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuY29udGVudD8uaGVhZGVyPy52aXNpYmxlXG5cdFx0XHQ6IHRydWU7XG5cdH1cblxuXHQvL2VuZHJlZ2lvbiBPUCBTcGVjaWZpY1xuXG5cdC8vcmVnaW9uIExSIFNwZWNpZmljXG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgbXVsdGlwbGUgdmlldyBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7TXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb259IFRoZSB2aWV3cyB0aGF0IHJlcHJlc2VudCB0aGUgbWFuaWZlc3Qgb2JqZWN0XG5cdCAqL1xuXHRnZXRWaWV3Q29uZmlndXJhdGlvbigpOiBNdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuICh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzKS52aWV3cztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHN0aWNreU11bHRpVGFiSGVhZGVyIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIFRydWUgaWYgc3RpY2t5TXVsdGlUYWJIZWFkZXIgaXMgZW5hYmxlZCBvciB1bmRlZmluZWRcblx0ICovXG5cdGdldFN0aWNreU11bHRpVGFiSGVhZGVyQ29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcblx0XHRjb25zdCBiU3RpY2t5TXVsdGlUYWJIZWFkZXIgPSAodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncykuc3RpY2t5TXVsdGlUYWJIZWFkZXI7XG5cdFx0cmV0dXJuIGJTdGlja3lNdWx0aVRhYkhlYWRlciAhPT0gdW5kZWZpbmVkID8gYlN0aWNreU11bHRpVGFiSGVhZGVyIDogdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIEtQSSBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBSZXR1cm5zIGEgbWFwIGJldHdlZW4gS1BJIG5hbWVzIGFuZCB0aGVpciByZXNwZWN0aXZlIGNvbmZpZ3VyYXRpb25cblx0ICovXG5cdGdldEtQSUNvbmZpZ3VyYXRpb24oKTogeyBba3BpTmFtZTogc3RyaW5nXTogS1BJQ29uZmlndXJhdGlvbiB9IHtcblx0XHRyZXR1cm4gKHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MpLmtleVBlcmZvcm1hbmNlSW5kaWNhdG9ycyB8fCB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGZpbHRlciBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7RmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9ufSBUaGUgZmlsdGVyIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbWFuaWZlc3Rcblx0ICovXG5cdGdldEZpbHRlckNvbmZpZ3VyYXRpb24oKTogRmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9uIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRDb250cm9sQ29uZmlndXJhdGlvbihcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIik7XG5cdH1cblx0LyoqXG5cdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgZW50aXR5IHNldHMgdG8gYmUgZGlzcGxheWVkLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBlbnRpdHkgc2V0c1xuXHQgKi9cblx0aGFzTXVsdGlwbGVFbnRpdHlTZXRzKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHZpZXdDb25maWcgPSB0aGlzLmdldFZpZXdDb25maWd1cmF0aW9uKCkgfHwgeyBwYXRoczogW10gfTtcblx0XHRjb25zdCBtYW5pZmVzdEVudGl0eVNldCA9IHRoaXMub01hbmlmZXN0U2V0dGluZ3MuZW50aXR5U2V0O1xuXHRcdHJldHVybiAoXG5cdFx0XHR2aWV3Q29uZmlnLnBhdGhzLmZpbmQoKHBhdGg6IFZpZXdDb25maWd1cmF0aW9uKSA9PiB7XG5cdFx0XHRcdGlmICgocGF0aCBhcyBDdXN0b21WaWV3VGVtcGxhdGVDb25maWd1cmF0aW9uKT8udGVtcGxhdGUpIHtcblx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyhwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uKSkge1xuXHRcdFx0XHRcdGNvbnN0IHsgcHJpbWFyeSwgc2Vjb25kYXJ5IH0gPSBwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRwcmltYXJ5LnNvbWUocGF0aCA9PiBwYXRoLmVudGl0eVNldCAmJiBwYXRoLmVudGl0eVNldCAhPT0gbWFuaWZlc3RFbnRpdHlTZXQpIHx8XG5cdFx0XHRcdFx0XHRzZWNvbmRhcnkuc29tZShwYXRoID0+IHBhdGguZW50aXR5U2V0ICYmIHBhdGguZW50aXR5U2V0ICE9PSBtYW5pZmVzdEVudGl0eVNldClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhdGggPSBwYXRoIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbjtcblx0XHRcdFx0XHRyZXR1cm4gcGF0aC5lbnRpdHlTZXQgJiYgcGF0aC5lbnRpdHlTZXQgIT09IG1hbmlmZXN0RW50aXR5U2V0O1xuXHRcdFx0XHR9XG5cdFx0XHR9KSAhPT0gdW5kZWZpbmVkXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjb250ZXh0IHBhdGggZm9yIHRoZSB0ZW1wbGF0ZSBpZiBpdCBpcyBzcGVjaWZpZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29udGV4dCBwYXRoIGZvciB0aGUgdGVtcGxhdGVcblx0ICovXG5cdGdldENvbnRleHRQYXRoKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3M/LmNvbnRleHRQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgdmlzdWFsaXphdGlvbnMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Vmlld1BhdGhDb25maWd1cmF0aW9ufSBwYXRoIFRoZSBwYXRoIGZyb20gdGhlIHZpZXdcblx0ICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgdmlzdWFsaXphdGlvbnNcblx0ICovXG5cdGhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMocGF0aD86IFZpZXdQYXRoQ29uZmlndXJhdGlvbik6IGJvb2xlYW4ge1xuXHRcdGlmICghcGF0aCkge1xuXHRcdFx0Y29uc3Qgdmlld0NvbmZpZyA9IHRoaXMuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKSB8fCB7IHBhdGhzOiBbXSB9O1xuXHRcdFx0cmV0dXJuIHZpZXdDb25maWcucGF0aHMuc29tZShwYXRoID0+IHtcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQocGF0aCBhcyBDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbikucHJpbWFyeT8ubGVuZ3RoID4gMCAmJlxuXHRcdFx0XHRcdChwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uKS5zZWNvbmRhcnk/Lmxlbmd0aCA+IDBcblx0XHRcdFx0KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gKHBhdGggYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24pLnByaW1hcnk/Lmxlbmd0aCA+IDAgJiYgKHBhdGggYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24pLnNlY29uZGFyeT8ubGVuZ3RoID4gMDtcblx0fVxuXG5cdC8vZW5kIHJlZ2lvbiBMUiBTcGVjaWZpY1xufVxuXG5leHBvcnQgZGVmYXVsdCBNYW5pZmVzdFdyYXBwZXI7XG4iXX0=