@sapui5/sap.fe.core 1.102.2 → 1.104.1

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 (324) hide show
  1. package/package.json +6 -6
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AppComponent.js +73 -30
  4. package/src/sap/fe/core/AppComponent.ts +65 -43
  5. package/src/sap/fe/core/AppStateHandler.js +82 -70
  6. package/src/sap/fe/core/AppStateHandler.ts +32 -37
  7. package/src/sap/fe/core/BaseController.js +11 -9
  8. package/src/sap/fe/core/BaseController.ts +15 -13
  9. package/src/sap/fe/core/CommonUtils.js +227 -126
  10. package/src/sap/fe/core/CommonUtils.ts +240 -163
  11. package/src/sap/fe/core/ExtensionAPI.js +24 -27
  12. package/src/sap/fe/core/ExtensionAPI.ts +36 -38
  13. package/src/sap/fe/core/PageController.js +4 -4
  14. package/src/sap/fe/core/PageController.ts +4 -5
  15. package/src/sap/fe/core/TemplateComponent.js +1 -1
  16. package/src/sap/fe/core/TemplateComponent.ts +6 -6
  17. package/src/sap/fe/core/TemplateModel.js +1 -1
  18. package/src/sap/fe/core/TemplateModel.ts +1 -1
  19. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
  20. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
  21. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +181 -43
  22. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +150 -24
  23. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +585 -210
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +246 -96
  25. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +30 -30
  26. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +32 -29
  27. package/src/sap/fe/core/controllerextensions/EditFlow.js +379 -330
  28. package/src/sap/fe/core/controllerextensions/EditFlow.ts +253 -245
  29. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
  30. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
  31. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +101 -74
  32. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +69 -79
  33. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +67 -67
  34. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +76 -76
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +85 -77
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +103 -99
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
  39. package/src/sap/fe/core/controllerextensions/MassEdit.js +9 -9
  40. package/src/sap/fe/core/controllerextensions/MassEdit.ts +20 -27
  41. package/src/sap/fe/core/controllerextensions/MessageHandler.js +20 -12
  42. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -14
  43. package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
  44. package/src/sap/fe/core/controllerextensions/PageReady.ts +98 -34
  45. package/src/sap/fe/core/controllerextensions/Paginator.js +21 -22
  46. package/src/sap/fe/core/controllerextensions/Paginator.ts +24 -25
  47. package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
  48. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  49. package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
  50. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  51. package/src/sap/fe/core/controllerextensions/Share.js +170 -139
  52. package/src/sap/fe/core/controllerextensions/Share.ts +117 -118
  53. package/src/sap/fe/core/controllerextensions/SideEffects.js +46 -50
  54. package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
  55. package/src/sap/fe/core/controllerextensions/ViewState.js +200 -131
  56. package/src/sap/fe/core/controllerextensions/ViewState.ts +141 -148
  57. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
  58. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
  59. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +11 -10
  60. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +17 -20
  61. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
  62. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +4 -4
  63. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +7 -9
  64. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +18 -19
  65. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +190 -141
  66. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +258 -210
  67. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +183 -125
  68. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +213 -156
  69. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +164 -140
  70. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +180 -150
  71. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +24 -26
  72. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +35 -33
  73. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +71 -41
  74. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +102 -82
  75. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +61 -71
  76. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +56 -64
  77. package/src/sap/fe/core/controls/Any.js +9 -5
  78. package/src/sap/fe/core/controls/Any.ts +10 -4
  79. package/src/sap/fe/core/controls/CommandExecution.js +11 -25
  80. package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
  81. package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
  82. package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
  83. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +22 -22
  84. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
  85. package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -2
  86. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
  87. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
  88. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
  89. package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
  90. package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
  91. package/src/sap/fe/core/controls/FileWrapper.js +7 -2
  92. package/src/sap/fe/core/controls/FileWrapper.ts +15 -11
  93. package/src/sap/fe/core/controls/FilterBar.js +6 -2
  94. package/src/sap/fe/core/controls/FilterBar.ts +13 -9
  95. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
  96. package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
  97. package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
  98. package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
  99. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
  100. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
  101. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
  102. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
  103. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
  104. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +49 -49
  105. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +54 -54
  106. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
  107. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
  108. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
  109. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
  110. package/src/sap/fe/core/converters/ConverterContext.js +26 -33
  111. package/src/sap/fe/core/converters/ConverterContext.ts +52 -61
  112. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  113. package/src/sap/fe/core/converters/ManifestSettings.ts +17 -15
  114. package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
  115. package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
  116. package/src/sap/fe/core/converters/MetaModelConverter.js +64 -35
  117. package/src/sap/fe/core/converters/MetaModelConverter.ts +154 -129
  118. package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
  119. package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
  120. package/src/sap/fe/core/converters/annotations/DataField.js +58 -35
  121. package/src/sap/fe/core/converters/annotations/DataField.ts +102 -76
  122. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
  123. package/src/sap/fe/core/converters/controls/Common/Action.js +50 -41
  124. package/src/sap/fe/core/converters/controls/Common/Action.ts +56 -46
  125. package/src/sap/fe/core/converters/controls/Common/Chart.js +14 -14
  126. package/src/sap/fe/core/converters/controls/Common/Chart.ts +26 -33
  127. package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
  128. package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
  129. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +30 -28
  130. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +60 -61
  131. package/src/sap/fe/core/converters/controls/Common/Form.js +27 -28
  132. package/src/sap/fe/core/converters/controls/Common/Form.ts +44 -57
  133. package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
  134. package/src/sap/fe/core/converters/controls/Common/KPI.ts +49 -52
  135. package/src/sap/fe/core/converters/controls/Common/Table.js +181 -197
  136. package/src/sap/fe/core/converters/controls/Common/Table.ts +251 -280
  137. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
  138. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +144 -141
  139. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +45 -41
  140. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +65 -59
  141. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
  142. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
  143. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
  144. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
  145. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
  146. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
  147. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +77 -73
  148. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +101 -97
  149. package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
  150. package/src/sap/fe/core/converters/helpers/Aggregation.ts +12 -15
  151. package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
  152. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
  153. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
  154. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
  155. package/src/sap/fe/core/converters/helpers/ID.js +48 -46
  156. package/src/sap/fe/core/converters/helpers/ID.ts +26 -25
  157. package/src/sap/fe/core/converters/helpers/Key.js +7 -7
  158. package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
  159. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  160. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -5
  161. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
  162. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
  163. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
  164. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
  165. package/src/sap/fe/core/converters/templates/ListReportConverter.js +55 -42
  166. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +81 -66
  167. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +39 -38
  168. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +52 -61
  169. package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
  170. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
  171. package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
  172. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
  173. package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
  174. package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
  175. package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
  176. package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
  177. package/src/sap/fe/core/formatters/StandardFormatter.js +96 -0
  178. package/src/sap/fe/core/formatters/StandardFormatter.ts +70 -0
  179. package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
  180. package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
  181. package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
  182. package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
  183. package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
  184. package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
  185. package/src/sap/fe/core/helpers/BindingToolkit.js +1832 -0
  186. package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +396 -269
  187. package/src/sap/fe/core/helpers/ClassSupport.js +49 -12
  188. package/src/sap/fe/core/helpers/ClassSupport.ts +37 -10
  189. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
  190. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
  191. package/src/sap/fe/core/helpers/EditState.js +1 -6
  192. package/src/sap/fe/core/helpers/EditState.ts +5 -10
  193. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
  194. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
  195. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  196. package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
  197. package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
  198. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
  199. package/src/sap/fe/core/helpers/MassEditHelper.js +306 -280
  200. package/src/sap/fe/core/helpers/MassEditHelper.ts +380 -360
  201. package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
  202. package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
  203. package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
  204. package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
  205. package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
  206. package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
  207. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  208. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
  209. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
  210. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
  211. package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
  212. package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
  213. package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
  214. package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
  215. package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
  216. package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
  217. package/src/sap/fe/core/jsx-runtime/jsx-control.js +99 -0
  218. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +82 -0
  219. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
  220. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
  221. package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
  222. package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
  223. package/src/sap/fe/core/library.js +42 -3
  224. package/src/sap/fe/core/library.ts +38 -0
  225. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
  226. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
  227. package/src/sap/fe/core/messagebundle.properties +39 -63
  228. package/src/sap/fe/core/messagebundle_ar.properties +25 -39
  229. package/src/sap/fe/core/messagebundle_bg.properties +25 -39
  230. package/src/sap/fe/core/messagebundle_ca.properties +25 -39
  231. package/src/sap/fe/core/messagebundle_cs.properties +25 -39
  232. package/src/sap/fe/core/messagebundle_cy.properties +25 -39
  233. package/src/sap/fe/core/messagebundle_da.properties +25 -39
  234. package/src/sap/fe/core/messagebundle_de.properties +25 -39
  235. package/src/sap/fe/core/messagebundle_el.properties +26 -40
  236. package/src/sap/fe/core/messagebundle_en.properties +25 -39
  237. package/src/sap/fe/core/messagebundle_en_GB.properties +25 -39
  238. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +25 -39
  239. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +25 -39
  240. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +26 -18
  241. package/src/sap/fe/core/messagebundle_es.properties +27 -41
  242. package/src/sap/fe/core/messagebundle_es_MX.properties +25 -39
  243. package/src/sap/fe/core/messagebundle_et.properties +25 -39
  244. package/src/sap/fe/core/messagebundle_fi.properties +25 -39
  245. package/src/sap/fe/core/messagebundle_fr.properties +26 -40
  246. package/src/sap/fe/core/messagebundle_fr_CA.properties +25 -39
  247. package/src/sap/fe/core/messagebundle_hi.properties +25 -39
  248. package/src/sap/fe/core/messagebundle_hr.properties +25 -39
  249. package/src/sap/fe/core/messagebundle_hu.properties +25 -39
  250. package/src/sap/fe/core/messagebundle_id.properties +25 -39
  251. package/src/sap/fe/core/messagebundle_it.properties +41 -55
  252. package/src/sap/fe/core/messagebundle_iw.properties +25 -39
  253. package/src/sap/fe/core/messagebundle_ja.properties +25 -39
  254. package/src/sap/fe/core/messagebundle_kk.properties +25 -39
  255. package/src/sap/fe/core/messagebundle_ko.properties +30 -44
  256. package/src/sap/fe/core/messagebundle_lt.properties +25 -39
  257. package/src/sap/fe/core/messagebundle_lv.properties +25 -39
  258. package/src/sap/fe/core/messagebundle_ms.properties +25 -39
  259. package/src/sap/fe/core/messagebundle_nl.properties +27 -41
  260. package/src/sap/fe/core/messagebundle_no.properties +25 -39
  261. package/src/sap/fe/core/messagebundle_pl.properties +26 -40
  262. package/src/sap/fe/core/messagebundle_pt.properties +26 -40
  263. package/src/sap/fe/core/messagebundle_pt_PT.properties +25 -39
  264. package/src/sap/fe/core/messagebundle_ro.properties +25 -39
  265. package/src/sap/fe/core/messagebundle_ru.properties +25 -39
  266. package/src/sap/fe/core/messagebundle_sh.properties +25 -39
  267. package/src/sap/fe/core/messagebundle_sk.properties +25 -39
  268. package/src/sap/fe/core/messagebundle_sl.properties +25 -39
  269. package/src/sap/fe/core/messagebundle_sv.properties +25 -39
  270. package/src/sap/fe/core/messagebundle_th.properties +25 -39
  271. package/src/sap/fe/core/messagebundle_tr.properties +25 -39
  272. package/src/sap/fe/core/messagebundle_uk.properties +25 -39
  273. package/src/sap/fe/core/messagebundle_vi.properties +25 -39
  274. package/src/sap/fe/core/messagebundle_zh_CN.properties +25 -39
  275. package/src/sap/fe/core/messagebundle_zh_TW.properties +25 -39
  276. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
  277. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
  278. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +97 -69
  279. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +68 -69
  280. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
  281. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
  282. package/src/sap/fe/core/services/NavigationServiceFactory.js +61 -49
  283. package/src/sap/fe/core/services/NavigationServiceFactory.ts +63 -52
  284. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
  285. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
  286. package/src/sap/fe/core/services/RoutingServiceFactory.js +55 -55
  287. package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
  288. package/src/sap/fe/core/services/ShellServicesFactory.js +92 -76
  289. package/src/sap/fe/core/services/ShellServicesFactory.ts +95 -82
  290. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
  291. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
  292. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +224 -198
  293. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +138 -139
  294. package/src/sap/fe/core/support/CommonHelper.js +3 -2
  295. package/src/sap/fe/core/support/CommonHelper.ts +9 -13
  296. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  297. package/src/sap/fe/core/support/Diagnostics.ts +5 -5
  298. package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
  299. package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
  300. package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
  301. package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
  302. package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
  303. package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
  304. package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
  305. package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
  306. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  307. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
  308. package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
  309. package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
  310. package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
  311. package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
  312. package/src/sap/fe/core/templating/FilterHelper.js +16 -15
  313. package/src/sap/fe/core/templating/FilterHelper.ts +18 -18
  314. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  315. package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
  316. package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
  317. package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
  318. package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
  319. package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
  320. package/src/sap/fe/core/templating/UIFormatters.js +152 -95
  321. package/src/sap/fe/core/templating/UIFormatters.ts +202 -128
  322. package/src/sap/fe/core/type/Email.js +2 -2
  323. package/src/sap/fe/core/type/Email.ts +2 -2
  324. package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
@@ -1,22 +1,25 @@
1
- import { EntityType, NavigationProperty, Property } from "@sap-ux/annotation-converter";
2
- import { AnnotationTerm, DataFieldAbstractTypes, DataFieldTypes, ReferenceFacetTypes, UIAnnotationTerms } from "@sap-ux/vocabularies-types";
3
- import { PropertyPath } from "@sap-ux/vocabularies-types/dist/Edm";
4
- import { FieldGroup, FieldGroupType, SelectOptionType } from "@sap-ux/vocabularies-types/dist/generated/UI";
5
- import { ChartVisualization } from "sap/fe/core/converters/controls/Common/Chart";
6
- import {
7
- getSelectionVariantConfiguration,
8
- getTypeConfig,
9
- isFilteringCaseSensitive,
10
- SelectionVariantConfiguration,
11
- TableVisualization
12
- } from "sap/fe/core/converters/controls/Common/Table";
13
- import { getVisualFilters, VisualFilters } from "sap/fe/core/converters/controls/ListReport/VisualFilters";
14
- import ConverterContext from "sap/fe/core/converters/ConverterContext";
15
- import { ConfigurableObject, CustomElement, insertCustomElements, Placement } from "sap/fe/core/converters/helpers/ConfigurableObject";
1
+ import type { EntityType, NavigationProperty, Property, PropertyPath } from "@sap-ux/vocabularies-types";
2
+ import type {
3
+ DataFieldAbstractTypes,
4
+ DataFieldTypes,
5
+ FieldGroup,
6
+ ReferenceFacetTypes,
7
+ SelectOptionType
8
+ } from "@sap-ux/vocabularies-types/vocabularies/UI";
9
+ import { UIAnnotationTerms } from "@sap-ux/vocabularies-types/vocabularies/UI";
10
+ import type { ChartVisualization } from "sap/fe/core/converters/controls/Common/Chart";
11
+ import type { SelectionVariantConfiguration, TableVisualization } from "sap/fe/core/converters/controls/Common/Table";
12
+ import { getSelectionVariantConfiguration, getTypeConfig, isFilteringCaseSensitive } from "sap/fe/core/converters/controls/Common/Table";
13
+ import type { VisualFilters } from "sap/fe/core/converters/controls/ListReport/VisualFilters";
14
+ import { getVisualFilters } from "sap/fe/core/converters/controls/ListReport/VisualFilters";
15
+ import type ConverterContext from "sap/fe/core/converters/ConverterContext";
16
+ import type { ConfigurableObject, CustomElement } from "sap/fe/core/converters/helpers/ConfigurableObject";
17
+ import { insertCustomElements, Placement } from "sap/fe/core/converters/helpers/ConfigurableObject";
16
18
  import { IssueCategory, IssueSeverity, IssueType } from "sap/fe/core/converters/helpers/IssueManager";
17
19
  import { KeyHelper } from "sap/fe/core/converters/helpers/Key";
18
- import { annotationExpression, compileBinding } from "sap/fe/core/helpers/BindingExpression";
19
- import { AvailabilityType, FilterFieldManifestConfiguration, FilterManifestConfiguration, FilterSettings } from "../../ManifestSettings";
20
+ import { compileExpression, getExpressionFromAnnotation } from "sap/fe/core/helpers/BindingToolkit";
21
+ import type { FilterFieldManifestConfiguration, FilterManifestConfiguration, FilterSettings } from "../../ManifestSettings";
22
+ import { AvailabilityType } from "../../ManifestSettings";
20
23
  import { getSelectionVariant } from "../Common/DataVisualization";
21
24
  //import { hasValueHelp } from "sap/fe/core/templating/PropertyHelper";
22
25
 
@@ -53,18 +56,18 @@ export type CustomElementFilterField = CustomElement<FilterField>;
53
56
  /**
54
57
  * Enter all DataFields of a given FieldGroup into the filterFacetMap.
55
58
  *
56
- * @param {AnnotationTerm<FieldGroupType>} fieldGroup
57
- * @returns {Record<string, FilterGroup>} The map of facets for the given FieldGroup
59
+ * @param fieldGroup
60
+ * @returns The map of facets for the given FieldGroup
58
61
  */
59
- function getFieldGroupFilterGroups(fieldGroup: AnnotationTerm<FieldGroupType>): Record<string, FilterGroup> {
62
+ function getFieldGroupFilterGroups(fieldGroup: FieldGroup): Record<string, FilterGroup> {
60
63
  const filterFacetMap: Record<string, FilterGroup> = {};
61
64
  fieldGroup.Data.forEach((dataField: DataFieldAbstractTypes) => {
62
65
  if (dataField.$Type === "com.sap.vocabularies.UI.v1.DataField") {
63
66
  filterFacetMap[dataField.Value.path] = {
64
67
  group: fieldGroup.fullyQualifiedName,
65
68
  groupLabel:
66
- compileBinding(
67
- annotationExpression(fieldGroup.Label || fieldGroup.annotations?.Common?.Label || fieldGroup.qualifier)
69
+ compileExpression(
70
+ getExpressionFromAnnotation(fieldGroup.Label || fieldGroup.annotations?.Common?.Label || fieldGroup.qualifier)
68
71
  ) || fieldGroup.qualifier
69
72
  };
70
73
  }
@@ -83,9 +86,10 @@ function getExcludedFilterProperties(selectionVariants: SelectionVariantConfigur
83
86
 
84
87
  /**
85
88
  * Check that all the tables for a dedicated entity set are configured as analytical table.
86
- * @param {TableVisualization[]} listReportTables List report tables
87
- * @param {string} contextPath
88
- * @returns {boolean} Is FilterBar search field hidden or not
89
+ *
90
+ * @param listReportTables List report tables
91
+ * @param contextPath
92
+ * @returns Is FilterBar search field hidden or not
89
93
  */
90
94
  function checkAllTableForEntitySetAreAnalytical(listReportTables: TableVisualization[], contextPath: string | undefined) {
91
95
  if (contextPath && listReportTables.length > 0) {
@@ -130,7 +134,7 @@ function getSelectionVariants(
130
134
  *
131
135
  * @param entityType The root EntityType
132
136
  * @param propertyPath The full path to the target property
133
- * @returns {string} The formatted condition path
137
+ * @returns The formatted condition path
134
138
  */
135
139
  const _getConditionPath = function (entityType: EntityType, propertyPath: string): string {
136
140
  const parts = propertyPath.split("/");
@@ -138,12 +142,12 @@ const _getConditionPath = function (entityType: EntityType, propertyPath: string
138
142
  let key = "";
139
143
  while (parts.length) {
140
144
  let part = parts.shift() as string;
141
- partialPath = partialPath ? partialPath + "/" + part : part;
145
+ partialPath = partialPath ? `${partialPath}/${part}` : part;
142
146
  const property: Property | NavigationProperty = entityType.resolvePath(partialPath);
143
147
  if (property._type === "NavigationProperty" && property.isCollection) {
144
148
  part += "*";
145
149
  }
146
- key = key ? key + "/" + part : part;
150
+ key = key ? `${key}/${part}` : part;
147
151
  }
148
152
  return key;
149
153
  };
@@ -168,10 +172,10 @@ const _createFilterSelectionField = function (
168
172
  conditionPath: _getConditionPath(entityType, fullPropertyPath),
169
173
  availability:
170
174
  property.annotations?.UI?.HiddenFilter?.valueOf() === true ? AvailabilityType.Hidden : AvailabilityType.Adaptation,
171
- label: compileBinding(annotationExpression(property.annotations.Common?.Label?.valueOf() || property.name)),
175
+ label: compileExpression(getExpressionFromAnnotation(property.annotations.Common?.Label?.valueOf() || property.name)),
172
176
  group: targetEntityType.name,
173
- groupLabel: compileBinding(
174
- annotationExpression(targetEntityType?.annotations?.Common?.Label?.valueOf() || targetEntityType.name)
177
+ groupLabel: compileExpression(
178
+ getExpressionFromAnnotation(targetEntityType?.annotations?.Common?.Label?.valueOf() || targetEntityType.name)
175
179
  )
176
180
  };
177
181
  }
@@ -253,7 +257,7 @@ const _getSelectionFields = function (
253
257
  if (properties) {
254
258
  properties.forEach((property: Property) => {
255
259
  const propertyPath: string = property.name;
256
- const fullPath: string = (navigationPath ? navigationPath + "/" : "") + propertyPath;
260
+ const fullPath: string = (navigationPath ? `${navigationPath}/` : "") + propertyPath;
257
261
  const selectionField = _createFilterSelectionField(entityType, property, fullPath, includeHidden, converterContext);
258
262
  if (selectionField) {
259
263
  selectionFieldMap[fullPath] = selectionField;
@@ -352,12 +356,12 @@ const _getDefaultFilterFields = function (
352
356
  aSelectOptions?.forEach((selectOption: SelectOptionType) => {
353
357
  const propertyName: any = selectOption.PropertyName;
354
358
  const sPropertyPath: string = propertyName.value;
355
- const UISelectionFields: any = {};
359
+ const currentSelectionFields: any = {};
356
360
  annotatedSelectionFields?.forEach((SelectionField) => {
357
- UISelectionFields[SelectionField.value] = true;
361
+ currentSelectionFields[SelectionField.value] = true;
358
362
  });
359
363
  if (!(sPropertyPath in excludedFilterProperties)) {
360
- if (!(sPropertyPath in UISelectionFields)) {
364
+ if (!(sPropertyPath in currentSelectionFields)) {
361
365
  const FilterField: FilterField | undefined = getFilterField(sPropertyPath, converterContext, entityType);
362
366
  if (FilterField) {
363
367
  selectionFields.push(FilterField);
@@ -368,10 +372,10 @@ const _getDefaultFilterFields = function (
368
372
  } else if (properties) {
369
373
  properties.forEach((property: Property) => {
370
374
  const defaultFilterValue = property.annotations?.Common?.FilterDefaultValue;
371
- const PropertyPath = property.name;
372
- if (!(PropertyPath in excludedFilterProperties)) {
373
- if (defaultFilterValue && !(PropertyPath in UISelectionFields)) {
374
- const FilterField: FilterField | undefined = getFilterField(PropertyPath, converterContext, entityType);
375
+ const propertyPath = property.name;
376
+ if (!(propertyPath in excludedFilterProperties)) {
377
+ if (defaultFilterValue && !(propertyPath in UISelectionFields)) {
378
+ const FilterField: FilterField | undefined = getFilterField(propertyPath, converterContext, entityType);
375
379
  if (FilterField) {
376
380
  selectionFields.push(FilterField);
377
381
  }
@@ -384,17 +388,18 @@ const _getDefaultFilterFields = function (
384
388
 
385
389
  /**
386
390
  * Get all parameter filter fields in case of a parameterized service.
387
- * @param {ConverterContext} converterContext
388
- * @returns {FilterField[]} An array of parameter filterfields
391
+ *
392
+ * @param converterContext
393
+ * @returns An array of parameter filterfields
389
394
  */
390
395
  function _getParameterFields(converterContext: ConverterContext): FilterField[] {
391
396
  const dataModelObjectPath = converterContext.getDataModelObjectPath();
392
397
  const parameterEntityType = dataModelObjectPath.startingEntitySet.entityType;
393
398
  const isParameterized = !!parameterEntityType.annotations?.Common?.ResultContext && !dataModelObjectPath.targetEntitySet;
394
399
  const parameterConverterContext =
395
- isParameterized && converterContext.getConverterContextFor("/" + dataModelObjectPath.startingEntitySet.name);
400
+ isParameterized && converterContext.getConverterContextFor(`/${dataModelObjectPath.startingEntitySet.name}`);
396
401
 
397
- const parameterFields = (
402
+ return (
398
403
  parameterConverterContext
399
404
  ? parameterEntityType.entityProperties.map(function (property) {
400
405
  return _getFilterField(
@@ -406,17 +411,15 @@ function _getParameterFields(converterContext: ConverterContext): FilterField[]
406
411
  })
407
412
  : []
408
413
  ) as FilterField[];
409
-
410
- return parameterFields;
411
414
  }
412
415
 
413
416
  /**
414
417
  * Determines if the FilterBar search field is hidden or not.
415
418
  *
416
- * @param {TableVisualization[]} listReportTables The list report tables
417
- * @param {ChartVisualization[]} charts The ALP charts
418
- * @param {ConverterContext} converterContext The converter context
419
- * @returns {boolean} The information if the FilterBar search field is hidden or not
419
+ * @param listReportTables The list report tables
420
+ * @param charts The ALP charts
421
+ * @param converterContext The converter context
422
+ * @returns The information if the FilterBar search field is hidden or not
420
423
  */
421
424
  export const getFilterBarhideBasicSearch = function (
422
425
  listReportTables: TableVisualization[],
@@ -443,7 +446,7 @@ export const getFilterBarhideBasicSearch = function (
443
446
  *
444
447
  * @param entityType The current entityType
445
448
  * @param converterContext The converter context
446
- * @returns {Record<string, CustomElementFilterField>} The filter fields defined in the manifest
449
+ * @returns The filter fields defined in the manifest
447
450
  */
448
451
  export const getManifestFilterFields = function (
449
452
  entityType: EntityType,
@@ -833,10 +836,12 @@ export const insertCustomManifestElements = function (
833
836
  /**
834
837
  * Retrieve the configuration for the selection fields that will be used within the filter bar
835
838
  * This configuration takes into account annotation and the selection variants.
836
- * @param {ConverterContext} converterContext
837
- * @param {TableVisualization[]} lrTables
838
- * @param {string} annotationPath
839
- * @returns {FilterSelectionField[]} An array of selection fields
839
+ *
840
+ * @param converterContext
841
+ * @param lrTables
842
+ * @param annotationPath
843
+ * @param [includeHidden]
844
+ * @returns An array of selection fields
840
845
  */
841
846
  export const getSelectionFields = function (
842
847
  converterContext: ConverterContext,
@@ -888,7 +893,7 @@ export const getSelectionFields = function (
888
893
  for (const i in aFieldGroups) {
889
894
  filterFacetMap = {
890
895
  ...filterFacetMap,
891
- ...getFieldGroupFilterGroups(aFieldGroups[i] as AnnotationTerm<FieldGroupType>)
896
+ ...getFieldGroupFilterGroups(aFieldGroups[i])
892
897
  };
893
898
  }
894
899
  } else {
@@ -949,10 +954,11 @@ export const getSelectionFields = function (
949
954
  * (1) a filter property is mandatory,
950
955
  * (2) no search field exists (entity isn't search enabled),
951
956
  * (3) when the data isn't loaded by default (annotation FetchValues = 2).
952
- * @param {ConverterContext} converterContext The converter context
953
- * @param {any} filterRestrictionsAnnotation The FilterRestriction annotation
954
- * @param {any} valueListAnnotation The ValueList annotation
955
- * @returns {boolean} The value for expandFilterFields
957
+ *
958
+ * @param converterContext The converter context
959
+ * @param filterRestrictionsAnnotation The FilterRestriction annotation
960
+ * @param valueListAnnotation The ValueList annotation
961
+ * @returns The value for expandFilterFields
956
962
  */
957
963
  export const getExpandFilterFields = function (
958
964
  converterContext: ConverterContext,
@@ -2,18 +2,18 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/fe/core/templating/FilterTemplating", "sap/fe/core/helpers/BindingExpression", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/converters/helpers/Aggregation", "sap/fe/core/converters/helpers/IssueManager"], function (FilterTemplating, BindingExpression, DataModelPathHelper, Aggregation, IssueManager) {
5
+ sap.ui.define(["sap/fe/core/converters/helpers/Aggregation", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/helpers/BindingToolkit", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/FilterTemplating"], function (Aggregation, IssueManager, BindingToolkit, DataModelPathHelper, FilterTemplating) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
9
- var IssueCategory = IssueManager.IssueCategory;
10
- var IssueSeverity = IssueManager.IssueSeverity;
9
+ var isPropertyFilterable = FilterTemplating.isPropertyFilterable;
10
+ var getIsRequired = FilterTemplating.getIsRequired;
11
+ var checkFilterExpressionRestrictions = DataModelPathHelper.checkFilterExpressionRestrictions;
12
+ var compileExpression = BindingToolkit.compileExpression;
11
13
  var IssueType = IssueManager.IssueType;
14
+ var IssueSeverity = IssueManager.IssueSeverity;
15
+ var IssueCategory = IssueManager.IssueCategory;
12
16
  var AggregationHelper = Aggregation.AggregationHelper;
13
- var checkFilterExpressionRestrictions = DataModelPathHelper.checkFilterExpressionRestrictions;
14
- var compileBinding = BindingExpression.compileBinding;
15
- var getIsRequired = FilterTemplating.getIsRequired;
16
- var isPropertyFilterable = FilterTemplating.isPropertyFilterable;
17
17
 
18
18
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function () {}; return { s: F, n: function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function (e) { throw e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function () { it = it.call(o); }, n: function () { var step = it.next(); normalCompletion = step.done; return step; }, e: function (e) { didErr = true; err = e; }, f: function () { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
19
19
 
@@ -23,10 +23,11 @@ sap.ui.define(["sap/fe/core/templating/FilterTemplating", "sap/fe/core/helpers/B
23
23
 
24
24
  /**
25
25
  * Checks that measures and dimensions of the visual filter chart can be aggregated and grouped.
26
+ *
26
27
  * @param converterContext The converter context
27
28
  * @param chartAnnotation The chart annotation
28
29
  * @param aggregationHelper The aggregation helper
29
- * @returns {boolean | undefined }
30
+ * @returns `true` if the measure can be grouped and aggregated
30
31
  */
31
32
  var _checkVFAggregation = function (converterContext, chartAnnotation, aggregationHelper) {
32
33
  var _chartAnnotation$$tar, _chartAnnotation$$tar2, _chartAnnotation$$tar3, _chartAnnotation$$tar4;
@@ -97,11 +98,12 @@ sap.ui.define(["sap/fe/core/templating/FilterTemplating", "sap/fe/core/helpers/B
97
98
  };
98
99
  /**
99
100
  * Method to get the visual filters object for a property.
101
+ *
100
102
  * @param entityType The converter context
101
103
  * @param converterContext The chart annotation
102
104
  * @param sPropertyPath The aggregation helper
103
105
  * @param FilterFields The aggregation helper
104
- * @returns {VisualFilters | undefined }
106
+ * @returns The visual filters
105
107
  */
106
108
 
107
109
 
@@ -116,7 +118,7 @@ sap.ui.define(["sap/fe/core/templating/FilterTemplating", "sap/fe/core/helpers/B
116
118
 
117
119
  var oVFPath = oVisualFilter === null || oVisualFilter === void 0 ? void 0 : (_oVisualFilter$visual2 = oVisualFilter.visualFilter) === null || _oVisualFilter$visual2 === void 0 ? void 0 : _oVisualFilter$visual2.valueList;
118
120
  var annotationQualifierSplit = oVFPath.split("#");
119
- var qualifierVL = annotationQualifierSplit.length > 1 ? "ValueList#" + annotationQualifierSplit[1] : annotationQualifierSplit[0];
121
+ var qualifierVL = annotationQualifierSplit.length > 1 ? "ValueList#".concat(annotationQualifierSplit[1]) : annotationQualifierSplit[0];
120
122
  var property = entityType.resolvePath(sPropertyPath);
121
123
  var valueList = property === null || property === void 0 ? void 0 : (_property$annotations = property.annotations) === null || _property$annotations === void 0 ? void 0 : _property$annotations.Common[qualifierVL];
122
124
 
@@ -124,7 +126,7 @@ sap.ui.define(["sap/fe/core/templating/FilterTemplating", "sap/fe/core/helpers/B
124
126
  var _converterContext$get, _collectionPathConver, _collectionPathConver2;
125
127
 
126
128
  var collectionPath = valueList === null || valueList === void 0 ? void 0 : valueList.CollectionPath;
127
- var collectionPathConverterContext = converterContext.getConverterContextFor("/" + (collectionPath || ((_converterContext$get = converterContext.getEntitySet()) === null || _converterContext$get === void 0 ? void 0 : _converterContext$get.name)));
129
+ var collectionPathConverterContext = converterContext.getConverterContextFor("/".concat(collectionPath || ((_converterContext$get = converterContext.getEntitySet()) === null || _converterContext$get === void 0 ? void 0 : _converterContext$get.name)));
128
130
  var valueListParams = valueList === null || valueList === void 0 ? void 0 : valueList.Parameters;
129
131
  var outParameter;
130
132
  var inParameters = [];
@@ -155,10 +157,10 @@ sap.ui.define(["sap/fe/core/templating/FilterTemplating", "sap/fe/core/helpers/B
155
157
 
156
158
  try {
157
159
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
158
- var _LocalDataProperty;
160
+ var _valueListParam$Local;
159
161
 
160
162
  var valueListParam = _step3.value;
161
- var localDataProperty = (_LocalDataProperty = valueListParam.LocalDataProperty) === null || _LocalDataProperty === void 0 ? void 0 : _LocalDataProperty.value;
163
+ var localDataProperty = (_valueListParam$Local = valueListParam.LocalDataProperty) === null || _valueListParam$Local === void 0 ? void 0 : _valueListParam$Local.value;
162
164
  var valueListProperty = valueListParam.ValueListProperty;
163
165
 
164
166
  if (((valueListParam === null || valueListParam === void 0 ? void 0 : valueListParam.$Type) === "com.sap.vocabularies.Common.v1.ValueListParameterInOut" || (valueListParam === null || valueListParam === void 0 ? void 0 : valueListParam.$Type) === "com.sap.vocabularies.Common.v1.ValueListParameterOut") && sPropertyPath === localDataProperty) {
@@ -185,18 +187,18 @@ sap.ui.define(["sap/fe/core/templating/FilterTemplating", "sap/fe/core/helpers/B
185
187
 
186
188
  if (inParameters && inParameters.length) {
187
189
  inParameters.forEach(function (oInParameter) {
188
- var mainEntitySetInMappingAllowedExpression = compileBinding(checkFilterExpressionRestrictions(converterContext.getConverterContextFor(converterContext.getAbsoluteAnnotationPath(oInParameter === null || oInParameter === void 0 ? void 0 : oInParameter.localDataProperty)).getDataModelObjectPath(), ["SingleValue"]));
189
- var valueListEntitySetInMappingAllowedExpression = compileBinding(checkFilterExpressionRestrictions(collectionPathConverterContext.getConverterContextFor(collectionPathConverterContext.getAbsoluteAnnotationPath(oInParameter === null || oInParameter === void 0 ? void 0 : oInParameter.valueListProperty)).getDataModelObjectPath(), ["SingleValue"]));
190
+ var mainEntitySetInMappingAllowedExpression = compileExpression(checkFilterExpressionRestrictions(converterContext.getConverterContextFor(converterContext.getAbsoluteAnnotationPath(oInParameter === null || oInParameter === void 0 ? void 0 : oInParameter.localDataProperty)).getDataModelObjectPath(), ["SingleValue"]));
191
+ var valueListEntitySetInMappingAllowedExpression = compileExpression(checkFilterExpressionRestrictions(collectionPathConverterContext.getConverterContextFor(collectionPathConverterContext.getAbsoluteAnnotationPath(oInParameter === null || oInParameter === void 0 ? void 0 : oInParameter.valueListProperty)).getDataModelObjectPath(), ["SingleValue"]));
190
192
 
191
193
  if (valueListEntitySetInMappingAllowedExpression === "true" && mainEntitySetInMappingAllowedExpression === "false") {
192
- throw new Error("FilterRestrictions of " + sPropertyPath + " in MainEntitySet and ValueListEntitySet are different");
194
+ throw new Error("FilterRestrictions of ".concat(sPropertyPath, " in MainEntitySet and ValueListEntitySet are different"));
193
195
  }
194
196
  });
195
197
  }
196
198
 
197
199
  var pvQualifier = valueList === null || valueList === void 0 ? void 0 : valueList.PresentationVariantQualifier;
198
200
  var svQualifier = valueList === null || valueList === void 0 ? void 0 : valueList.SelectionVariantQualifier;
199
- var pvAnnotation = (_collectionPathConver = collectionPathConverterContext) === null || _collectionPathConver === void 0 ? void 0 : (_collectionPathConver2 = _collectionPathConver.getEntityTypeAnnotation("@UI.PresentationVariant#" + pvQualifier)) === null || _collectionPathConver2 === void 0 ? void 0 : _collectionPathConver2.annotation;
201
+ var pvAnnotation = (_collectionPathConver = collectionPathConverterContext) === null || _collectionPathConver === void 0 ? void 0 : (_collectionPathConver2 = _collectionPathConver.getEntityTypeAnnotation("@UI.PresentationVariant#".concat(pvQualifier))) === null || _collectionPathConver2 === void 0 ? void 0 : _collectionPathConver2.annotation;
200
202
  var aggregationHelper = new AggregationHelper(collectionPathConverterContext.getEntityType(), collectionPathConverterContext);
201
203
 
202
204
  if (!aggregationHelper.isAnalyticsSupported()) {
@@ -207,7 +209,7 @@ sap.ui.define(["sap/fe/core/templating/FilterTemplating", "sap/fe/core/helpers/B
207
209
  var _collectionPathConver3, _collectionPathConver4;
208
210
 
209
211
  var aVisualizations = pvAnnotation === null || pvAnnotation === void 0 ? void 0 : pvAnnotation.Visualizations;
210
- var contextPath = "/" + (valueList === null || valueList === void 0 ? void 0 : valueList.CollectionPath) || "/" + ((_collectionPathConver3 = collectionPathConverterContext) === null || _collectionPathConver3 === void 0 ? void 0 : (_collectionPathConver4 = _collectionPathConver3.getEntitySet()) === null || _collectionPathConver4 === void 0 ? void 0 : _collectionPathConver4.name);
212
+ var contextPath = "/".concat(valueList === null || valueList === void 0 ? void 0 : valueList.CollectionPath) || "/".concat((_collectionPathConver3 = collectionPathConverterContext) === null || _collectionPathConver3 === void 0 ? void 0 : (_collectionPathConver4 = _collectionPathConver3.getEntitySet()) === null || _collectionPathConver4 === void 0 ? void 0 : _collectionPathConver4.name);
211
213
  visualFilter.contextPath = contextPath;
212
214
  var chartAnnotation;
213
215
 
@@ -248,26 +250,26 @@ sap.ui.define(["sap/fe/core/templating/FilterTemplating", "sap/fe/core/helpers/B
248
250
  } else if (aVisualizations && aVisualizations.length) {
249
251
  var _collectionPathConver5, _collectionPathConver6, _outParameter, _outParameter$LocalDa, _requiredProperties, _visualFilter$require, _chartAnnotation3, _chartAnnotation3$$ta, _chartAnnotation3$$ta2, _chartAnnotation3$$ta3;
250
252
 
251
- visualFilter.chartAnnotation = chartAnnotation ? (_collectionPathConver5 = collectionPathConverterContext) === null || _collectionPathConver5 === void 0 ? void 0 : _collectionPathConver5.getAbsoluteAnnotationPath(chartAnnotation.fullyQualifiedName + "/$AnnotationPath/") : undefined;
252
- visualFilter.presentationAnnotation = pvAnnotation ? (_collectionPathConver6 = collectionPathConverterContext) === null || _collectionPathConver6 === void 0 ? void 0 : _collectionPathConver6.getAbsoluteAnnotationPath(pvAnnotation.fullyQualifiedName + "/") : undefined;
253
+ visualFilter.chartAnnotation = chartAnnotation ? (_collectionPathConver5 = collectionPathConverterContext) === null || _collectionPathConver5 === void 0 ? void 0 : _collectionPathConver5.getAbsoluteAnnotationPath("".concat(chartAnnotation.fullyQualifiedName, "/$AnnotationPath/")) : undefined;
254
+ visualFilter.presentationAnnotation = pvAnnotation ? (_collectionPathConver6 = collectionPathConverterContext) === null || _collectionPathConver6 === void 0 ? void 0 : _collectionPathConver6.getAbsoluteAnnotationPath("".concat(pvAnnotation.fullyQualifiedName, "/")) : undefined;
253
255
  visualFilter.outParameter = (_outParameter = outParameter) === null || _outParameter === void 0 ? void 0 : (_outParameter$LocalDa = _outParameter.LocalDataProperty) === null || _outParameter$LocalDa === void 0 ? void 0 : _outParameter$LocalDa.value;
254
256
  visualFilter.inParameters = inParameters;
255
257
  var bIsRange = checkFilterExpressionRestrictions(converterContext.getConverterContextFor(converterContext.getAbsoluteAnnotationPath(sPropertyPath)).getDataModelObjectPath(), ["SingleRange", "MultiRange"]);
256
258
 
257
- if (compileBinding(bIsRange) === "true") {
259
+ if (compileExpression(bIsRange) === "true") {
258
260
  throw new Error("Range AllowedExpression is not supported for visual filters");
259
261
  }
260
262
 
261
263
  var bIsMainEntitySetSingleSelection = checkFilterExpressionRestrictions(converterContext.getConverterContextFor(converterContext.getAbsoluteAnnotationPath(sPropertyPath)).getDataModelObjectPath(), ["SingleValue"]);
262
- visualFilter.multipleSelectionAllowed = compileBinding(!bIsMainEntitySetSingleSelection.value);
264
+ visualFilter.multipleSelectionAllowed = compileExpression(!bIsMainEntitySetSingleSelection.value);
263
265
  visualFilter.required = getIsRequired(converterContext, sPropertyPath);
264
266
  var svAnnotation;
265
267
 
266
268
  if (svQualifier) {
267
269
  var _collectionPathConver7, _collectionPathConver8, _collectionPathConver9;
268
270
 
269
- svAnnotation = (_collectionPathConver7 = collectionPathConverterContext) === null || _collectionPathConver7 === void 0 ? void 0 : (_collectionPathConver8 = _collectionPathConver7.getEntityTypeAnnotation("@UI.SelectionVariant#" + svQualifier)) === null || _collectionPathConver8 === void 0 ? void 0 : _collectionPathConver8.annotation;
270
- visualFilter.selectionVariantAnnotation = svAnnotation ? (_collectionPathConver9 = collectionPathConverterContext) === null || _collectionPathConver9 === void 0 ? void 0 : _collectionPathConver9.getAbsoluteAnnotationPath(svAnnotation.fullyQualifiedName + "/") : undefined;
271
+ svAnnotation = (_collectionPathConver7 = collectionPathConverterContext) === null || _collectionPathConver7 === void 0 ? void 0 : (_collectionPathConver8 = _collectionPathConver7.getEntityTypeAnnotation("@UI.SelectionVariant#".concat(svQualifier))) === null || _collectionPathConver8 === void 0 ? void 0 : _collectionPathConver8.annotation;
272
+ visualFilter.selectionVariantAnnotation = svAnnotation ? (_collectionPathConver9 = collectionPathConverterContext) === null || _collectionPathConver9 === void 0 ? void 0 : _collectionPathConver9.getAbsoluteAnnotationPath("".concat(svAnnotation.fullyQualifiedName, "/")) : undefined;
271
273
  }
272
274
 
273
275
  var requiredProperties = [];
@@ -277,7 +279,7 @@ sap.ui.define(["sap/fe/core/templating/FilterTemplating", "sap/fe/core/helpers/B
277
279
 
278
280
  var sEntitySet = collectionPath.split("/")[0];
279
281
  var sNavigationProperty = collectionPath.split("/")[1];
280
- var oEntitySetConverterContext = converterContext.getConverterContextFor("/" + sEntitySet);
282
+ var oEntitySetConverterContext = converterContext.getConverterContextFor("/".concat(sEntitySet));
281
283
  var aRestrictedProperties = oEntitySetConverterContext === null || oEntitySetConverterContext === void 0 ? void 0 : (_oEntitySetConverterC = oEntitySetConverterContext.getDataModelObjectPath().startingEntitySet) === null || _oEntitySetConverterC === void 0 ? void 0 : (_oEntitySetConverterC2 = _oEntitySetConverterC.annotations) === null || _oEntitySetConverterC2 === void 0 ? void 0 : (_oEntitySetConverterC3 = _oEntitySetConverterC2.Capabilities) === null || _oEntitySetConverterC3 === void 0 ? void 0 : (_oEntitySetConverterC4 = _oEntitySetConverterC3.NavigationRestrictions) === null || _oEntitySetConverterC4 === void 0 ? void 0 : _oEntitySetConverterC4.RestrictedProperties;
282
284
  var oRestrictedProperty = aRestrictedProperties === null || aRestrictedProperties === void 0 ? void 0 : aRestrictedProperties.find(function (restrictedNavProp) {
283
285
  var _restrictedNavProp$Na;
@@ -361,4 +363,4 @@ sap.ui.define(["sap/fe/core/templating/FilterTemplating", "sap/fe/core/helpers/B
361
363
  _exports.getVisualFilters = getVisualFilters;
362
364
  return _exports;
363
365
  }, false);
364
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlZpc3VhbEZpbHRlcnMudHMiXSwibmFtZXMiOlsiX2NoZWNrVkZBZ2dyZWdhdGlvbiIsImNvbnZlcnRlckNvbnRleHQiLCJjaGFydEFubm90YXRpb24iLCJhZ2dyZWdhdGlvbkhlbHBlciIsInNNZWFzdXJlUGF0aCIsImJHcm91cGFibGUiLCJiQWdncmVnYXRhYmxlIiwic01lYXN1cmUiLCIkdGFyZ2V0IiwiTWVhc3VyZXMiLCJ2YWx1ZSIsInNEaW1lbnNpb24iLCJEaW1lbnNpb25zIiwiY3VzdG9tQWdncmVnYXRlcyIsImdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zIiwiYVRyYW5zQWdncmVnYXRpb25zIiwiZ2V0VHJhbnNBZ2dyZWdhdGlvbnMiLCJzb21lIiwiY3VzdEFnZyIsInF1YWxpZmllciIsImFBZ2dyZWdhdGlvbnMiLCJvQWdncmVnYXRlIiwiTmFtZSIsIkFnZ3JlZ2F0YWJsZVByb3BlcnR5IiwiYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lciIsImdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJhR3JvdXBhYmxlUHJvcHNGcm9tQ29udGFpbmVyIiwiZ2V0R3JvdXBhYmxlUHJvcGVydGllcyIsImxlbmd0aCIsImFnZ3JlZ2F0YWJsZVByb3AiLCJQcm9wZXJ0eSIsImdyb3VwYWJsZVByb3AiLCJnZXRWaXN1YWxGaWx0ZXJzIiwiZW50aXR5VHlwZSIsInNQcm9wZXJ0eVBhdGgiLCJGaWx0ZXJGaWVsZHMiLCJ2aXN1YWxGaWx0ZXIiLCJvVmlzdWFsRmlsdGVyIiwidmFsdWVMaXN0Iiwib1ZGUGF0aCIsImFubm90YXRpb25RdWFsaWZpZXJTcGxpdCIsInNwbGl0IiwicXVhbGlmaWVyVkwiLCJwcm9wZXJ0eSIsInJlc29sdmVQYXRoIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJjb2xsZWN0aW9uUGF0aCIsIkNvbGxlY3Rpb25QYXRoIiwiY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsImdldEVudGl0eVNldCIsIm5hbWUiLCJ2YWx1ZUxpc3RQYXJhbXMiLCJQYXJhbWV0ZXJzIiwib3V0UGFyYW1ldGVyIiwiaW5QYXJhbWV0ZXJzIiwiYVBhcmFtZXRlcnMiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidGFyZ2V0RW50aXR5U2V0IiwicmVzb2x2ZWRUYXJnZXQiLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsInBhcmFtZXRlckVudGl0eVR5cGUiLCJnZXRQYXJhbWV0ZXJFbnRpdHlUeXBlIiwia2V5cyIsIm1hcCIsImtleSIsImdldENvbnRleHRQYXRoIiwiZm9yRWFjaCIsInBhcmFtZXRlciIsInB1c2giLCJsb2NhbERhdGFQcm9wZXJ0eSIsInZhbHVlTGlzdFByb3BlcnR5IiwidmFsdWVMaXN0UGFyYW0iLCJMb2NhbERhdGFQcm9wZXJ0eSIsIlZhbHVlTGlzdFByb3BlcnR5IiwiJFR5cGUiLCJiTm90RmlsdGVyYWJsZSIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwib0luUGFyYW1ldGVyIiwibWFpbkVudGl0eVNldEluTWFwcGluZ0FsbG93ZWRFeHByZXNzaW9uIiwiY29tcGlsZUJpbmRpbmciLCJjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJnZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoIiwidmFsdWVMaXN0RW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24iLCJFcnJvciIsInB2UXVhbGlmaWVyIiwiUHJlc2VudGF0aW9uVmFyaWFudFF1YWxpZmllciIsInN2UXVhbGlmaWVyIiwiU2VsZWN0aW9uVmFyaWFudFF1YWxpZmllciIsInB2QW5ub3RhdGlvbiIsImFubm90YXRpb24iLCJBZ2dyZWdhdGlvbkhlbHBlciIsImdldEVudGl0eVR5cGUiLCJpc0FuYWx5dGljc1N1cHBvcnRlZCIsImFWaXN1YWxpemF0aW9ucyIsIlZpc3VhbGl6YXRpb25zIiwiY29udGV4dFBhdGgiLCJ2aXN1YWxpemF0aW9uIiwidGVybSIsIl9iZ2V0VkZBZ2dyZWdhdGlvbiIsImJEaW1lbnNpb25IaWRkZW4iLCJVSSIsIkhpZGRlbiIsInZhbHVlT2YiLCJiRGltZW5zaW9uSGlkZGVuRmlsdGVyIiwiSGlkZGVuRmlsdGVyIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwidW5kZWZpbmVkIiwicHJlc2VudGF0aW9uQW5ub3RhdGlvbiIsImJJc1JhbmdlIiwiYklzTWFpbkVudGl0eVNldFNpbmdsZVNlbGVjdGlvbiIsIm11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZCIsInJlcXVpcmVkIiwiZ2V0SXNSZXF1aXJlZCIsInN2QW5ub3RhdGlvbiIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwicmVxdWlyZWRQcm9wZXJ0aWVzIiwic0VudGl0eVNldCIsInNOYXZpZ2F0aW9uUHJvcGVydHkiLCJvRW50aXR5U2V0Q29udmVydGVyQ29udGV4dCIsImFSZXN0cmljdGVkUHJvcGVydGllcyIsInN0YXJ0aW5nRW50aXR5U2V0IiwiQ2FwYWJpbGl0aWVzIiwiTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsIlJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwib1Jlc3RyaWN0ZWRQcm9wZXJ0eSIsImZpbmQiLCJyZXN0cmljdGVkTmF2UHJvcCIsIk5hdmlnYXRpb25Qcm9wZXJ0eSIsInR5cGUiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJSZXF1aXJlZFByb3BlcnRpZXMiLCJlbnRpdHlTZXRBbm5vdGF0aW9ucyIsInJlcXVpcmVkUHJvcGVydHlQYXRocyIsIm9SZXF1aXJlUHJvcGVydHkiLCJjb25jYXQiLCJzaG93T3ZlcmxheUluaXRpYWxseSIsInNlbGVjdE9wdGlvbnMiLCJTZWxlY3RPcHRpb25zIiwib1NlbGVjdE9wdGlvbiIsIlByb3BlcnR5TmFtZSIsInBhcmFtZXRlck9wdGlvbnMiLCJvUGFyYW1ldGVyT3B0aW9uIiwic29ydCIsInNQYXRoIiwiaW5kZXhPZiIsInNEaW1lbnNpb25UeXBlIiwiQ2hhcnRUeXBlIiwicmVuZGVyTGluZUNoYXJ0IiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIkhpZ2giLCJJc3N1ZVR5cGUiLCJNQUxGT1JNRURfVklTVUFMRklMVEVSUyIsIkNIQVJUIiwiUFJFU0VOVEFUSU9OVkFSSUFOVCIsIlZBTFVFTElTVCIsIk1hbmlmZXN0IiwiT2JqZWN0Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU1BLG1CQUFtQixHQUFHLFVBQzNCQyxnQkFEMkIsRUFFM0JDLGVBRjJCLEVBRzNCQyxpQkFIMkIsRUFJTDtBQUFBOztBQUN0QixRQUFJQyxZQUFKLEVBQWtCQyxVQUFsQixFQUE4QkMsYUFBOUI7QUFDQSxRQUFNQyxRQUFnQixHQUFHTCxlQUFILGFBQUdBLGVBQUgsZ0RBQUdBLGVBQWUsQ0FBRU0sT0FBcEIsb0ZBQUcsc0JBQTBCQyxRQUExQixDQUFtQyxDQUFuQyxDQUFILDJEQUFHLHVCQUF1Q0MsS0FBaEU7QUFDQSxRQUFNQyxVQUFrQixHQUFHVCxlQUFILGFBQUdBLGVBQUgsaURBQUdBLGVBQWUsQ0FBRU0sT0FBcEIscUZBQUcsdUJBQTBCSSxVQUExQixDQUFxQyxDQUFyQyxDQUFILDJEQUFHLHVCQUF5Q0YsS0FBcEU7QUFDQSxRQUFNRyxnQkFBZ0IsR0FBR1YsaUJBQWlCLENBQUNXLDZCQUFsQixFQUF6QjtBQUNBLFFBQU1DLGtCQUFrQixHQUFHWixpQkFBaUIsQ0FBQ2Esb0JBQWxCLEVBQTNCOztBQUVBLFFBQ0NILGdCQUFnQixDQUFDSSxJQUFqQixDQUFzQixVQUFTQyxPQUFULEVBQW1EO0FBQ3hFLGFBQU9BLE9BQU8sQ0FBQ0MsU0FBUixLQUFzQlosUUFBN0I7QUFDQSxLQUZELENBREQsRUFJRTtBQUNESCxNQUFBQSxZQUFZLEdBQUdHLFFBQWY7QUFDQSxLQU5ELE1BTU8sSUFBSVEsa0JBQWtCLElBQUlBLGtCQUFrQixDQUFDLENBQUQsQ0FBNUMsRUFBaUQ7QUFD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SixVQUFBQSxnQkFBZ0IsQ0FDZHFKLGNBREYsR0FFRUMsUUFGRixDQUVXQyxhQUFhLENBQUNDLFVBRnpCLEVBRXFDQyxhQUFhLENBQUNDLElBRm5ELEVBRXlEQyxTQUFTLENBQUNDLHVCQUFWLENBQWtDRSxtQkFGM0Y7QUFHQTtBQUNELE9BL05ELE1BK05PO0FBQ045SixRQUFBQSxnQkFBZ0IsQ0FDZHFKLGNBREYsR0FFRUMsUUFGRixDQUVXQyxhQUFhLENBQUNDLFVBRnpCLEVBRXFDQyxhQUFhLENBQUNDLElBRm5ELEVBRXlEQyxTQUFTLENBQUNDLHVCQUFWLENBQWtDRyxTQUYzRjtBQUdBO0FBQ0QsS0ExT0QsTUEwT087QUFDTi9KLE1BQUFBLGdCQUFnQixDQUFDcUosY0FBakIsR0FBa0NDLFFBQWxDLENBQTJDQyxhQUFhLENBQUNTLFFBQXpELEVBQW1FUCxhQUFhLENBQUNDLElBQWpGLEVBQXVGQyxTQUFTLENBQUNDLHVCQUFWLENBQWtDRyxTQUF6SDtBQUNBOztBQUNELFFBQUlFLE1BQU0sQ0FBQ2xHLElBQVAsQ0FBWTVCLFlBQVosRUFBMEJSLE1BQTFCLEdBQW1DLENBQXZDLEVBQTBDO0FBQ3pDLGFBQU9RLFlBQVA7QUFDQTtBQUNEIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnRpdHlUeXBlIH0gZnJvbSBcIkBzYXAtdXgvYW5ub3RhdGlvbi1jb252ZXJ0ZXJcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7IEZpbHRlckZpZWxkTWFuaWZlc3RDb25maWd1cmF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgaXNQcm9wZXJ0eUZpbHRlcmFibGUsIGdldElzUmVxdWlyZWQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9GaWx0ZXJUZW1wbGF0aW5nXCI7XG5pbXBvcnQgeyBjb21waWxlQmluZGluZyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQWdncmVnYXRpb25cIjtcbmltcG9ydCB7IElzc3VlVHlwZSwgSXNzdWVTZXZlcml0eSwgSXNzdWVDYXRlZ29yeSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL2Rpc3QvZ2VuZXJhdGVkL0NhcGFiaWxpdGllc1wiO1xuaW1wb3J0IHsgQW5ub3RhdGlvblRlcm0gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IEN1c3RvbUFnZ3JlZ2F0ZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9kaXN0L2dlbmVyYXRlZC9BZ2dyZWdhdGlvblwiO1xuXG5leHBvcnQgdHlwZSBWaXN1YWxGaWx0ZXJzID0ge1xuXHRkaW1lbnNpb25QYXRoPzogc3RyaW5nO1xuXHRtZWFzdXJlUGF0aD86IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdGNoYXJ0QW5ub3RhdGlvbj86IHN0cmluZztcblx0cHJlc2VudGF0aW9uQW5ub3RhdGlvbj86IHN0cmluZztcblx0dmlzaWJsZT86IGJvb2xlYW47XG5cdG91dFBhcmFtZXRlcj86IHN0cmluZztcblx0aW5QYXJhbWV0ZXJzPzogb2JqZWN0W107XG5cdGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXHRzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbj86IHN0cmluZztcblx0bXVsdGlwbGVTZWxlY3Rpb25BbGxvd2VkPzogYm9vbGVhbjtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHRzaG93T3ZlcmxheUluaXRpYWxseT86IGJvb2xlYW47XG5cdHJlbmRlckxpbmVDaGFydD86IGJvb2xlYW47XG5cdHJlcXVpcmVkUHJvcGVydGllcz86IG9iamVjdFtdO1xufTtcblxuLyoqXG4gKiBDaGVja3MgdGhhdCBtZWFzdXJlcyBhbmQgZGltZW5zaW9ucyBvZiB0aGUgdmlzdWFsIGZpbHRlciBjaGFydCBjYW4gYmUgYWdncmVnYXRlZCBhbmQgZ3JvdXBlZC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGNoYXJ0QW5ub3RhdGlvbiBUaGUgY2hhcnQgYW5ub3RhdGlvblxuICogQHBhcmFtIGFnZ3JlZ2F0aW9uSGVscGVyIFRoZSBhZ2dyZWdhdGlvbiBoZWxwZXJcbiAqIEByZXR1cm5zIHtib29sZWFuIHwgdW5kZWZpbmVkIH1cbiAqL1xuY29uc3QgX2NoZWNrVkZBZ2dyZWdhdGlvbiA9IGZ1bmN0aW9uKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRjaGFydEFubm90YXRpb246IGFueSxcblx0YWdncmVnYXRpb25IZWxwZXI6IGFueVxuKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG5cdGxldCBzTWVhc3VyZVBhdGgsIGJHcm91cGFibGUsIGJBZ2dyZWdhdGFibGU7XG5cdGNvbnN0IHNNZWFzdXJlOiBzdHJpbmcgPSBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/Lk1lYXN1cmVzWzBdPy52YWx1ZTtcblx0Y29uc3Qgc0RpbWVuc2lvbjogc3RyaW5nID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy52YWx1ZTtcblx0Y29uc3QgY3VzdG9tQWdncmVnYXRlcyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zKCk7XG5cdGNvbnN0IGFUcmFuc0FnZ3JlZ2F0aW9ucyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldFRyYW5zQWdncmVnYXRpb25zKCk7XG5cblx0aWYgKFxuXHRcdGN1c3RvbUFnZ3JlZ2F0ZXMuc29tZShmdW5jdGlvbihjdXN0QWdnOiBBbm5vdGF0aW9uVGVybTxDdXN0b21BZ2dyZWdhdGU+KSB7XG5cdFx0XHRyZXR1cm4gY3VzdEFnZy5xdWFsaWZpZXIgPT09IHNNZWFzdXJlO1xuXHRcdH0pXG5cdCkge1xuXHRcdHNNZWFzdXJlUGF0aCA9IHNNZWFzdXJlO1xuXHR9IGVsc2UgaWYgKGFUcmFuc0FnZ3JlZ2F0aW9ucyAmJiBhVHJhbnNBZ2dyZWdhdGlvbnNbMF0pIHtcblx0XHRjb25zdCBhQWdncmVnYXRpb25zID0gYVRyYW5zQWdncmVnYXRpb25zWzBdO1xuXHRcdGFBZ2dyZWdhdGlvbnMuc29tZShmdW5jdGlvbihvQWdncmVnYXRlOiBhbnkpIHtcblx0XHRcdGlmIChvQWdncmVnYXRlLk5hbWUgPT09IHNNZWFzdXJlKSB7XG5cdFx0XHRcdHNNZWFzdXJlUGF0aCA9IG9BZ2dyZWdhdGU/LkFnZ3JlZ2F0YWJsZVByb3BlcnR5LnZhbHVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdGNvbnN0IGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzKCk7XG5cdGNvbnN0IGFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXIgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRHcm91cGFibGVQcm9wZXJ0aWVzKCk7XG5cdGlmIChhQWdncmVnYXRhYmxlUHJvcHNGcm9tQ29udGFpbmVyICYmIGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIubGVuZ3RoKSB7XG5cdFx0Zm9yIChjb25zdCBhZ2dyZWdhdGFibGVQcm9wIG9mIGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIpIHtcblx0XHRcdGlmIChhZ2dyZWdhdGFibGVQcm9wPy5Qcm9wZXJ0eT8udmFsdWUgPT09IHNNZWFzdXJlUGF0aCkge1xuXHRcdFx0XHRiQWdncmVnYXRhYmxlID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYgKGFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXIgJiYgYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lci5sZW5ndGgpIHtcblx0XHRmb3IgKGNvbnN0IGdyb3VwYWJsZVByb3Agb2YgYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lcikge1xuXHRcdFx0aWYgKGdyb3VwYWJsZVByb3A/LnZhbHVlID09PSBzRGltZW5zaW9uKSB7XG5cdFx0XHRcdGJHcm91cGFibGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gYkFnZ3JlZ2F0YWJsZSAmJiBiR3JvdXBhYmxlO1xufTtcblxuLyoqXG4gKiBNZXRob2QgdG8gZ2V0IHRoZSB2aXN1YWwgZmlsdGVycyBvYmplY3QgZm9yIGEgcHJvcGVydHkuXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjaGFydCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gc1Byb3BlcnR5UGF0aCBUaGUgYWdncmVnYXRpb24gaGVscGVyXG4gKiBAcGFyYW0gRmlsdGVyRmllbGRzIFRoZSBhZ2dyZWdhdGlvbiBoZWxwZXJcbiAqIEByZXR1cm5zIHtWaXN1YWxGaWx0ZXJzIHwgdW5kZWZpbmVkIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZpc3VhbEZpbHRlcnMoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHNQcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0RmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbj5cbik6IFZpc3VhbEZpbHRlcnMgfCB1bmRlZmluZWQge1xuXHRjb25zdCB2aXN1YWxGaWx0ZXI6IFZpc3VhbEZpbHRlcnMgPSB7fTtcblx0Y29uc3Qgb1Zpc3VhbEZpbHRlcjogRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBGaWx0ZXJGaWVsZHNbc1Byb3BlcnR5UGF0aF07XG5cdGlmIChvVmlzdWFsRmlsdGVyPy52aXN1YWxGaWx0ZXI/LnZhbHVlTGlzdCkge1xuXHRcdGNvbnN0IG9WRlBhdGggPSBvVmlzdWFsRmlsdGVyPy52aXN1YWxGaWx0ZXI/LnZhbHVlTGlzdDtcblx0XHRjb25zdCBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXQgPSBvVkZQYXRoLnNwbGl0KFwiI1wiKTtcblx0XHRjb25zdCBxdWFsaWZpZXJWTCA9IGFubm90YXRpb25RdWFsaWZpZXJTcGxpdC5sZW5ndGggPiAxID8gXCJWYWx1ZUxpc3QjXCIgKyBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXRbMV0gOiBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXRbMF07XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBlbnRpdHlUeXBlLnJlc29sdmVQYXRoKHNQcm9wZXJ0eVBhdGgpO1xuXHRcdGNvbnN0IHZhbHVlTGlzdDogYW55ID0gcHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb25bcXVhbGlmaWVyVkxdO1xuXHRcdGlmICh2YWx1ZUxpc3QpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25QYXRoID0gdmFsdWVMaXN0Py5Db2xsZWN0aW9uUGF0aDtcblx0XHRcdGxldCBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3IoXG5cdFx0XHRcdFwiL1wiICsgKGNvbGxlY3Rpb25QYXRoIHx8IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk/Lm5hbWUpXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgdmFsdWVMaXN0UGFyYW1zID0gdmFsdWVMaXN0Py5QYXJhbWV0ZXJzO1xuXHRcdFx0bGV0IG91dFBhcmFtZXRlcjogYW55O1xuXHRcdFx0Y29uc3QgaW5QYXJhbWV0ZXJzOiBBcnJheTxvYmplY3Q+ID0gW107XG5cdFx0XHRsZXQgYVBhcmFtZXRlcnM6IEFycmF5PHN0cmluZz4gPSBbXTtcblx0XHRcdGlmICghY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRFbnRpdHlTZXQpIHtcblx0XHRcdFx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oXCJcIik7XG5cdFx0XHRcdGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCA9IHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQ7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJFbnRpdHlUeXBlID0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldFBhcmFtZXRlckVudGl0eVR5cGUoKTtcblx0XHRcdGFQYXJhbWV0ZXJzID0gcGFyYW1ldGVyRW50aXR5VHlwZVxuXHRcdFx0XHQ/IHBhcmFtZXRlckVudGl0eVR5cGUua2V5cy5tYXAoZnVuY3Rpb24oa2V5KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4ga2V5Lm5hbWU7XG5cdFx0XHRcdCAgfSlcblx0XHRcdFx0OiBbXTtcblx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCkgPT09IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpKSB7XG5cdFx0XHRcdGFQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24ocGFyYW1ldGVyOiBhbnkpIHtcblx0XHRcdFx0XHRpblBhcmFtZXRlcnMucHVzaCh7XG5cdFx0XHRcdFx0XHRsb2NhbERhdGFQcm9wZXJ0eTogcGFyYW1ldGVyLFxuXHRcdFx0XHRcdFx0dmFsdWVMaXN0UHJvcGVydHk6IHBhcmFtZXRlclxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGlmICh2YWx1ZUxpc3RQYXJhbXMpIHtcblx0XHRcdFx0Zm9yIChjb25zdCB2YWx1ZUxpc3RQYXJhbSBvZiB2YWx1ZUxpc3RQYXJhbXMpIHtcblx0XHRcdFx0XHRjb25zdCBsb2NhbERhdGFQcm9wZXJ0eSA9ICh2YWx1ZUxpc3RQYXJhbSBhcyBhbnkpLkxvY2FsRGF0YVByb3BlcnR5Py52YWx1ZTtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUxpc3RQcm9wZXJ0eSA9ICh2YWx1ZUxpc3RQYXJhbSBhcyBhbnkpLlZhbHVlTGlzdFByb3BlcnR5O1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdCh2YWx1ZUxpc3RQYXJhbT8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XCIgfHxcblx0XHRcdFx0XHRcdFx0dmFsdWVMaXN0UGFyYW0/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJPdXRcIikgJiZcblx0XHRcdFx0XHRcdHNQcm9wZXJ0eVBhdGggPT09IGxvY2FsRGF0YVByb3BlcnR5XG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRvdXRQYXJhbWV0ZXIgPSB2YWx1ZUxpc3RQYXJhbTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0KHZhbHVlTGlzdFBhcmFtPy4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcIiB8fFxuXHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3RQYXJhbT8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluXCIpICYmXG5cdFx0XHRcdFx0XHRzUHJvcGVydHlQYXRoICE9PSBsb2NhbERhdGFQcm9wZXJ0eVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgYk5vdEZpbHRlcmFibGUgPSBpc1Byb3BlcnR5RmlsdGVyYWJsZShjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQsIHZhbHVlTGlzdFByb3BlcnR5KTtcblx0XHRcdFx0XHRcdGlmICghYk5vdEZpbHRlcmFibGUpIHtcblx0XHRcdFx0XHRcdFx0aW5QYXJhbWV0ZXJzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdGxvY2FsRGF0YVByb3BlcnR5OiBsb2NhbERhdGFQcm9wZXJ0eSxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3RQcm9wZXJ0eTogdmFsdWVMaXN0UHJvcGVydHlcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoaW5QYXJhbWV0ZXJzICYmIGluUGFyYW1ldGVycy5sZW5ndGgpIHtcblx0XHRcdFx0aW5QYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24ob0luUGFyYW1ldGVyOiBhbnkpIHtcblx0XHRcdFx0XHRjb25zdCBtYWluRW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPSBjb21waWxlQmluZGluZyhcblx0XHRcdFx0XHRcdGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChvSW5QYXJhbWV0ZXI/LmxvY2FsRGF0YVByb3BlcnR5KSlcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVWYWx1ZVwiXVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWVMaXN0RW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPSBjb21waWxlQmluZGluZyhcblx0XHRcdFx0XHRcdGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChvSW5QYXJhbWV0ZXI/LnZhbHVlTGlzdFByb3BlcnR5KVxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVWYWx1ZVwiXVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKHZhbHVlTGlzdEVudGl0eVNldEluTWFwcGluZ0FsbG93ZWRFeHByZXNzaW9uID09PSBcInRydWVcIiAmJiBtYWluRW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPT09IFwiZmFsc2VcIikge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcdFx0XHRcIkZpbHRlclJlc3RyaWN0aW9ucyBvZiBcIiArIHNQcm9wZXJ0eVBhdGggKyBcIiBpbiBNYWluRW50aXR5U2V0IGFuZCBWYWx1ZUxpc3RFbnRpdHlTZXQgYXJlIGRpZmZlcmVudFwiXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBwdlF1YWxpZmllciA9IHZhbHVlTGlzdD8uUHJlc2VudGF0aW9uVmFyaWFudFF1YWxpZmllcjtcblx0XHRcdGNvbnN0IHN2UXVhbGlmaWVyID0gdmFsdWVMaXN0Py5TZWxlY3Rpb25WYXJpYW50UXVhbGlmaWVyO1xuXHRcdFx0Y29uc3QgcHZBbm5vdGF0aW9uOiBhbnkgPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKFwiQFVJLlByZXNlbnRhdGlvblZhcmlhbnQjXCIgKyBwdlF1YWxpZmllcilcblx0XHRcdFx0Py5hbm5vdGF0aW9uO1xuXHRcdFx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGlmICghYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAocHZBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IGFWaXN1YWxpemF0aW9ucyA9IHB2QW5ub3RhdGlvbj8uVmlzdWFsaXphdGlvbnM7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gXCIvXCIgKyB2YWx1ZUxpc3Q/LkNvbGxlY3Rpb25QYXRoIHx8IFwiL1wiICsgY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlTZXQoKT8ubmFtZTtcblx0XHRcdFx0dmlzdWFsRmlsdGVyLmNvbnRleHRQYXRoID0gY29udGV4dFBhdGg7XG5cdFx0XHRcdGxldCBjaGFydEFubm90YXRpb247XG5cdFx0XHRcdGZvciAoY29uc3QgdmlzdWFsaXphdGlvbiBvZiBhVmlzdWFsaXphdGlvbnMpIHtcblx0XHRcdFx0XHRpZiAodmlzdWFsaXphdGlvbi4kdGFyZ2V0Py50ZXJtID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCIpIHtcblx0XHRcdFx0XHRcdGNoYXJ0QW5ub3RhdGlvbiA9IHZpc3VhbGl6YXRpb247XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGNoYXJ0QW5ub3RhdGlvbikge1xuXHRcdFx0XHRcdGNvbnN0IF9iZ2V0VkZBZ2dyZWdhdGlvbjogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IF9jaGVja1ZGQWdncmVnYXRpb24oXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRjaGFydEFubm90YXRpb24sXG5cdFx0XHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlclxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKCFfYmdldFZGQWdncmVnYXRpb24pIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgYkRpbWVuc2lvbkhpZGRlbjogYm9vbGVhbiA9IGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uRGltZW5zaW9uc1swXT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKTtcblx0XHRcdFx0XHRjb25zdCBiRGltZW5zaW9uSGlkZGVuRmlsdGVyOiBib29sZWFuID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbkZpbHRlcj8udmFsdWVPZigpO1xuXHRcdFx0XHRcdGlmIChiRGltZW5zaW9uSGlkZGVuID09PSB0cnVlIHx8IGJEaW1lbnNpb25IaWRkZW5GaWx0ZXIgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGFWaXN1YWxpemF0aW9ucyAmJiBhVmlzdWFsaXphdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuY2hhcnRBbm5vdGF0aW9uID0gY2hhcnRBbm5vdGF0aW9uXG5cdFx0XHRcdFx0XHRcdD8gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKFxuXHRcdFx0XHRcdFx0XHRcdFx0Y2hhcnRBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSArIFwiLyRBbm5vdGF0aW9uUGF0aC9cIlxuXHRcdFx0XHRcdFx0XHQgIClcblx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIucHJlc2VudGF0aW9uQW5ub3RhdGlvbiA9IHB2QW5ub3RhdGlvblxuXHRcdFx0XHRcdFx0XHQ/IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChwdkFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lICsgXCIvXCIpXG5cdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLm91dFBhcmFtZXRlciA9IG91dFBhcmFtZXRlcj8uTG9jYWxEYXRhUHJvcGVydHk/LnZhbHVlO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLmluUGFyYW1ldGVycyA9IGluUGFyYW1ldGVycztcblx0XHRcdFx0XHRcdGNvbnN0IGJJc1JhbmdlID0gY2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHNQcm9wZXJ0eVBhdGgpKVxuXHRcdFx0XHRcdFx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdFx0XHRcdFtcIlNpbmdsZVJhbmdlXCIsIFwiTXVsdGlSYW5nZVwiXVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0aWYgKGNvbXBpbGVCaW5kaW5nKGJJc1JhbmdlKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiUmFuZ2UgQWxsb3dlZEV4cHJlc3Npb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgdmlzdWFsIGZpbHRlcnNcIik7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGJJc01haW5FbnRpdHlTZXRTaW5nbGVTZWxlY3Rpb246IGFueSA9IGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChzUHJvcGVydHlQYXRoKSlcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVWYWx1ZVwiXVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5tdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWQgPSBjb21waWxlQmluZGluZyghYklzTWFpbkVudGl0eVNldFNpbmdsZVNlbGVjdGlvbi52YWx1ZSkgYXMgYW55O1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnJlcXVpcmVkID0gZ2V0SXNSZXF1aXJlZChjb252ZXJ0ZXJDb250ZXh0LCBzUHJvcGVydHlQYXRoKTtcblx0XHRcdFx0XHRcdGxldCBzdkFubm90YXRpb246IGFueTtcblx0XHRcdFx0XHRcdGlmIChzdlF1YWxpZmllcikge1xuXHRcdFx0XHRcdFx0XHRzdkFubm90YXRpb24gPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKFwiQFVJLlNlbGVjdGlvblZhcmlhbnQjXCIgKyBzdlF1YWxpZmllcilcblx0XHRcdFx0XHRcdFx0XHQ/LmFubm90YXRpb247XG5cdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5zZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbiA9IHN2QW5ub3RhdGlvblxuXHRcdFx0XHRcdFx0XHRcdD8gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHN2QW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUgKyBcIi9cIilcblx0XHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGxldCByZXF1aXJlZFByb3BlcnRpZXMgPSBbXTtcblx0XHRcdFx0XHRcdGlmIChwYXJhbWV0ZXJFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNFbnRpdHlTZXQgPSBjb2xsZWN0aW9uUGF0aC5zcGxpdChcIi9cIilbMF07XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNOYXZpZ2F0aW9uUHJvcGVydHkgPSBjb2xsZWN0aW9uUGF0aC5zcGxpdChcIi9cIilbMV07XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9FbnRpdHlTZXRDb252ZXJ0ZXJDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKFwiL1wiICsgc0VudGl0eVNldCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFSZXN0cmljdGVkUHJvcGVydGllcyA9IG9FbnRpdHlTZXRDb252ZXJ0ZXJDb250ZXh0Py5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkuc3RhcnRpbmdFbnRpdHlTZXRcblx0XHRcdFx0XHRcdFx0XHQ/LmFubm90YXRpb25zPy5DYXBhYmlsaXRpZXM/Lk5hdmlnYXRpb25SZXN0cmljdGlvbnM/LlJlc3RyaWN0ZWRQcm9wZXJ0aWVzO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvUmVzdHJpY3RlZFByb3BlcnR5ID0gYVJlc3RyaWN0ZWRQcm9wZXJ0aWVzPy5maW5kKFxuXHRcdFx0XHRcdFx0XHRcdChyZXN0cmljdGVkTmF2UHJvcDogTmF2aWdhdGlvblByb3BlcnR5UmVzdHJpY3Rpb25UeXBlcykgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJlc3RyaWN0ZWROYXZQcm9wLk5hdmlnYXRpb25Qcm9wZXJ0eT8udHlwZSA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3RyaWN0ZWROYXZQcm9wLk5hdmlnYXRpb25Qcm9wZXJ0eS52YWx1ZSA9PT0gc05hdmlnYXRpb25Qcm9wZXJ0eTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydGllcyA9IG9SZXN0cmljdGVkUHJvcGVydHk/LkZpbHRlclJlc3RyaWN0aW9ucz8uUmVxdWlyZWRQcm9wZXJ0aWVzIGFzIGFueVtdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZW50aXR5U2V0QW5ub3RhdGlvbnMgPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk/LmFubm90YXRpb25zO1xuXHRcdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnRpZXMgPSBlbnRpdHlTZXRBbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5GaWx0ZXJSZXN0cmljdGlvbnM/LlJlcXVpcmVkUHJvcGVydGllcyBhcyBhbnlbXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGxldCByZXF1aXJlZFByb3BlcnR5UGF0aHM6IEFycmF5PG9iamVjdD4gPSBbXTtcblx0XHRcdFx0XHRcdGlmIChyZXF1aXJlZFByb3BlcnRpZXM/Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihvUmVxdWlyZVByb3BlcnR5OiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnR5UGF0aHMucHVzaChvUmVxdWlyZVByb3BlcnR5LnZhbHVlKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnR5UGF0aHMgPSByZXF1aXJlZFByb3BlcnR5UGF0aHMuY29uY2F0KGFQYXJhbWV0ZXJzKTtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5yZXF1aXJlZFByb3BlcnRpZXMgPSByZXF1aXJlZFByb3BlcnR5UGF0aHM7XG5cdFx0XHRcdFx0XHRpZiAodmlzdWFsRmlsdGVyLnJlcXVpcmVkUHJvcGVydGllcz8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdGlmICghdmlzdWFsRmlsdGVyLmluUGFyYW1ldGVycyB8fCAhdmlzdWFsRmlsdGVyLmluUGFyYW1ldGVycy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIXZpc3VhbEZpbHRlci5zZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnNob3dPdmVybGF5SW5pdGlhbGx5ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IHNlbGVjdE9wdGlvbnMgPVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdkFubm90YXRpb24/LlNlbGVjdE9wdGlvbnM/Lm1hcCgob1NlbGVjdE9wdGlvbjogYW55KSA9PiBvU2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZS52YWx1ZSkgfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJPcHRpb25zID1cblx0XHRcdFx0XHRcdFx0XHRcdFx0c3ZBbm5vdGF0aW9uPy5QYXJhbWV0ZXJzPy5tYXAoKG9QYXJhbWV0ZXJPcHRpb246IGFueSkgPT4gb1BhcmFtZXRlck9wdGlvbi5Qcm9wZXJ0eU5hbWUudmFsdWUpIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0T3B0aW9ucyA9IHNlbGVjdE9wdGlvbnMuY29uY2F0KHBhcmFtZXRlck9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0eVBhdGhzID0gcmVxdWlyZWRQcm9wZXJ0eVBhdGhzLnNvcnQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdHNlbGVjdE9wdGlvbnMgPSBzZWxlY3RPcHRpb25zLnNvcnQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5zaG93T3ZlcmxheUluaXRpYWxseSA9IHJlcXVpcmVkUHJvcGVydHlQYXRocy5zb21lKGZ1bmN0aW9uKHNQYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzZWxlY3RPcHRpb25zLmluZGV4T2Yoc1BhdGgpID09PSAtMTtcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuc2hvd092ZXJsYXlJbml0aWFsbHkgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnNob3dPdmVybGF5SW5pdGlhbGx5ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb25zdCBzRGltZW5zaW9uVHlwZSA9IGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uRGltZW5zaW9uc1swXT8uJHRhcmdldD8udHlwZTtcblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0IShcblx0XHRcdFx0XHRcdFx0XHRzRGltZW5zaW9uVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIiB8fFxuXHRcdFx0XHRcdFx0XHRcdHNEaW1lbnNpb25UeXBlID09PSBcIkVkbS5EYXRlXCIgfHxcblx0XHRcdFx0XHRcdFx0XHRzRGltZW5zaW9uVHlwZSA9PT0gXCJFZG0uVGltZU9mRGF5XCJcblx0XHRcdFx0XHRcdFx0KSAmJlxuXHRcdFx0XHRcdFx0XHRjaGFydEFubm90YXRpb24uJHRhcmdldC5DaGFydFR5cGUgPT09IFwiVUkuQ2hhcnRUeXBlL0xpbmVcIlxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5yZW5kZXJMaW5lQ2hhcnQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5yZW5kZXJMaW5lQ2hhcnQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUFMRk9STUVEX1ZJU1VBTEZJTFRFUlMuQ0hBUlQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkhpZ2gsIElzc3VlVHlwZS5NQUxGT1JNRURfVklTVUFMRklMVEVSUy5QUkVTRU5UQVRJT05WQVJJQU5UKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkhpZ2gsIElzc3VlVHlwZS5NQUxGT1JNRURfVklTVUFMRklMVEVSUy5WQUxVRUxJU1QpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERpYWdub3N0aWNzKCkuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5NYW5pZmVzdCwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUFMRk9STUVEX1ZJU1VBTEZJTFRFUlMuVkFMVUVMSVNUKTtcblx0fVxuXHRpZiAoT2JqZWN0LmtleXModmlzdWFsRmlsdGVyKS5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIHZpc3VhbEZpbHRlcjtcblx0fVxufVxuIl19
366
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlZpc3VhbEZpbHRlcnMudHMiXSwibmFtZXMiOlsiX2NoZWNrVkZBZ2dyZWdhdGlvbiIsImNvbnZlcnRlckNvbnRleHQiLCJjaGFydEFubm90YXRpb24iLCJhZ2dyZWdhdGlvbkhlbHBlciIsInNNZWFzdXJlUGF0aCIsImJHcm91cGFibGUiLCJiQWdncmVnYXRhYmxlIiwic01lYXN1cmUiLCIkdGFyZ2V0IiwiTWVhc3VyZXMiLCJ2YWx1ZSIsInNEaW1lbnNpb24iLCJEaW1lbnNpb25zIiwiY3VzdG9tQWdncmVnYXRlcyIsImdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zIiwiYVRyYW5zQWdncmVnYXRpb25zIiwiZ2V0VHJhbnNBZ2dyZWdhdGlvbnMiLCJzb21lIiwiY3VzdEFnZyIsInF1YWxpZmllciIsImFBZ2dyZWdhdGlvbnMiLCJvQWdncmVnYXRlIiwiTmFtZSIsIkFnZ3JlZ2F0YWJsZVByb3BlcnR5IiwiYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lciIsImdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJhR3JvdXBhYmxlUHJvcHNGcm9tQ29udGFpbmVyIiwiZ2V0R3JvdXBhYmxlUHJvcGVydGllcyIsImxlbmd0aCIsImFnZ3JlZ2F0YWJsZVByb3AiLCJQcm9wZXJ0eSIsImdyb3VwYWJsZVByb3AiLCJnZXRWaXN1YWxGaWx0ZXJzIiwiZW50aXR5VHlwZSIsInNQcm9wZXJ0eVBhdGgiLCJGaWx0ZXJGaWVsZHMiLCJ2aXN1YWxGaWx0ZXIiLCJvVmlzdWFsRmlsdGVyIiwidmFsdWVMaXN0Iiwib1ZGUGF0aCIsImFubm90YXRpb25RdWFsaWZpZXJTcGxpdCIsInNwbGl0IiwicXVhbGlmaWVyVkwiLCJwcm9wZXJ0eSIsInJlc29sdmVQYXRoIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJjb2xsZWN0aW9uUGF0aCIsIkNvbGxlY3Rpb25QYXRoIiwiY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsImdldEVudGl0eVNldCIsIm5hbWUiLCJ2YWx1ZUxpc3RQYXJhbXMiLCJQYXJhbWV0ZXJzIiwib3V0UGFyYW1ldGVyIiwiaW5QYXJhbWV0ZXJzIiwiYVBhcmFtZXRlcnMiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidGFyZ2V0RW50aXR5U2V0IiwicmVzb2x2ZWRUYXJnZXQiLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsInBhcmFtZXRlckVudGl0eVR5cGUiLCJnZXRQYXJhbWV0ZXJFbnRpdHlUeXBlIiwia2V5cyIsIm1hcCIsImtleSIsImdldENvbnRleHRQYXRoIiwiZm9yRWFjaCIsInBhcmFtZXRlciIsInB1c2giLCJsb2NhbERhdGFQcm9wZXJ0eSIsInZhbHVlTGlzdFByb3BlcnR5IiwidmFsdWVMaXN0UGFyYW0iLCJMb2NhbERhdGFQcm9wZXJ0eSIsIlZhbHVlTGlzdFByb3BlcnR5IiwiJFR5cGUiLCJiTm90RmlsdGVyYWJsZSIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwib0luUGFyYW1ldGVyIiwibWFpbkVudGl0eVNldEluTWFwcGluZ0FsbG93ZWRFeHByZXNzaW9uIiwiY29tcGlsZUV4cHJlc3Npb24iLCJjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJnZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoIiwidmFsdWVMaXN0RW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24iLCJFcnJvciIsInB2UXVhbGlmaWVyIiwiUHJlc2VudGF0aW9uVmFyaWFudFF1YWxpZmllciIsInN2UXVhbGlmaWVyIiwiU2VsZWN0aW9uVmFyaWFudFF1YWxpZmllciIsInB2QW5ub3RhdGlvbiIsImFubm90YXRpb24iLCJBZ2dyZWdhdGlvbkhlbHBlciIsImdldEVudGl0eVR5cGUiLCJpc0FuYWx5dGljc1N1cHBvcnRlZCIsImFWaXN1YWxpemF0aW9ucyIsIlZpc3VhbGl6YXRpb25zIiwiY29udGV4dFBhdGgiLCJ2aXN1YWxpemF0aW9uIiwidGVybSIsIl9iZ2V0VkZBZ2dyZWdhdGlvbiIsImJEaW1lbnNpb25IaWRkZW4iLCJVSSIsIkhpZGRlbiIsInZhbHVlT2YiLCJiRGltZW5zaW9uSGlkZGVuRmlsdGVyIiwiSGlkZGVuRmlsdGVyIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwidW5kZWZpbmVkIiwicHJlc2VudGF0aW9uQW5ub3RhdGlvbiIsImJJc1JhbmdlIiwiYklzTWFpbkVudGl0eVNldFNpbmdsZVNlbGVjdGlvbiIsIm11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZCIsInJlcXVpcmVkIiwiZ2V0SXNSZXF1aXJlZCIsInN2QW5ub3RhdGlvbiIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwicmVxdWlyZWRQcm9wZXJ0aWVzIiwic0VudGl0eVNldCIsInNOYXZpZ2F0aW9uUHJvcGVydHkiLCJvRW50aXR5U2V0Q29udmVydGVyQ29udGV4dCIsImFSZXN0cmljdGVkUHJvcGVydGllcyIsInN0YXJ0aW5nRW50aXR5U2V0IiwiQ2FwYWJpbGl0aWVzIiwiTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsIlJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwib1Jlc3RyaWN0ZWRQcm9wZXJ0eSIsImZpbmQiLCJyZXN0cmljdGVkTmF2UHJvcCIsIk5hdmlnYXRpb25Qcm9wZXJ0eSIsInR5cGUiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJSZXF1aXJlZFByb3BlcnRpZXMiLCJlbnRpdHlTZXRBbm5vdGF0aW9ucyIsInJlcXVpcmVkUHJvcGVydHlQYXRocyIsIm9SZXF1aXJlUHJvcGVydHkiLCJjb25jYXQiLCJzaG93T3ZlcmxheUluaXRpYWxseSIsInNlbGVjdE9wdGlvbnMiLCJTZWxlY3RPcHRpb25zIiwib1NlbGVjdE9wdGlvbiIsIlByb3BlcnR5TmFtZSIsInBhcmFtZXRlck9wdGlvbnMiLCJvUGFyYW1ldGVyT3B0aW9uIiwic29ydCIsInNQYXRoIiwiaW5kZXhPZiIsInNEaW1lbnNpb25UeXBlIiwiQ2hhcnRUeXBlIiwicmVuZGVyTGluZUNoYXJ0IiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIkhpZ2giLCJJc3N1ZVR5cGUiLCJNQUxGT1JNRURfVklTVUFMRklMVEVSUyIsIkNIQVJUIiwiUFJFU0VOVEFUSU9OVkFSSUFOVCIsIlZBTFVFTElTVCIsIk1hbmlmZXN0IiwiT2JqZWN0Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTUEsbUJBQW1CLEdBQUcsVUFDM0JDLGdCQUQyQixFQUUzQkMsZUFGMkIsRUFHM0JDLGlCQUgyQixFQUlMO0FBQUE7O0FBQ3RCLFFBQUlDLFlBQUosRUFBa0JDLFVBQWxCLEVBQThCQyxhQUE5QjtBQUNBLFFBQU1DLFFBQWdCLEdBQUdMLGVBQUgsYUFBR0EsZUFBSCxnREFBR0EsZUFBZSxDQUFFTSxPQUFwQixvRkFBRyxzQkFBMEJDLFFBQTFCLENBQW1DLENBQW5DLENBQUgsMkRBQUcsdUJBQXVDQyxLQUFoRTtBQUNBLFFBQU1DLFVBQWtCLEdBQUdULGVBQUgsYUFBR0EsZUFBSCxpREFBR0EsZUFBZSxDQUFFTSxPQUFwQixxRkFBRyx1QkFBMEJJLFVBQTFCLENBQXFDLENBQXJDLENBQUgsMkRBQUcsdUJBQXlDRixLQUFwRTtBQUNBLFFBQU1HLGdCQUFnQixHQUFHVixpQkFBaUIsQ0FBQ1csNkJBQWxCLEVBQXpCO0FBQ0EsUUFBTUMsa0JBQWtCLEdBQUdaLGlCQUFpQixDQUFDYSxvQkFBbEIsRUFBM0I7O0FBRUEsUUFDQ0gsZ0JBQWdCLENBQUNJLElBQWpCLENBQXNCLFVBQVVDLE9BQVYsRUFBb0M7QUFDekQsYUFBT0EsT0FBTyxDQUFDQyxTQUFSLEtBQXNCWixRQUE3QjtBQUNBLEtBRkQsQ0FERCxFQUlFO0FBQ0RILE1BQUFBLFlBQVksR0FBR0csUUFBZjtBQUNBLEtBTkQsTUFNTyxJQUFJUSxrQkFBa0IsSUFBSUEsa0JBQWtCLENBQUMsQ0FBRCxDQUE1QyxF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QUFDQyxVQUZ6QixFQUVxQ0MsYUFBYSxDQUFDQyxJQUZuRCxFQUV5REMsU0FBUyxDQUFDQyx1QkFBVixDQUFrQ0UsbUJBRjNGO0FBR0E7QUFDRCxPQWpPRCxNQWlPTztBQUNOOUosUUFBQUEsZ0JBQWdCLENBQ2RxSixjQURGLEdBRUVDLFFBRkYsQ0FFV0MsYUFBYSxDQUFDQyxVQUZ6QixFQUVxQ0MsYUFBYSxDQUFDQyxJQUZuRCxFQUV5REMsU0FBUyxDQUFDQyx1QkFBVixDQUFrQ0csU0FGM0Y7QUFHQTtBQUNELEtBNU9ELE1BNE9PO0FBQ04vSixNQUFBQSxnQkFBZ0IsQ0FBQ3FKLGNBQWpCLEdBQWtDQyxRQUFsQyxDQUEyQ0MsYUFBYSxDQUFDUyxRQUF6RCxFQUFtRVAsYUFBYSxDQUFDQyxJQUFqRixFQUF1RkMsU0FBUyxDQUFDQyx1QkFBVixDQUFrQ0csU0FBekg7QUFDQTs7QUFDRCxRQUFJRSxNQUFNLENBQUNsRyxJQUFQLENBQVk1QixZQUFaLEVBQTBCUixNQUExQixHQUFtQyxDQUF2QyxFQUEwQztBQUN6QyxhQUFPUSxZQUFQO0FBQ0E7QUFDRCIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbUFnZ3JlZ2F0ZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQWdncmVnYXRpb25cIjtcbmltcG9ydCB0eXBlIHsgTmF2aWdhdGlvblByb3BlcnR5UmVzdHJpY3Rpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ2FwYWJpbGl0aWVzXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uSGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVTZXZlcml0eSwgSXNzdWVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRJc1JlcXVpcmVkLCBpc1Byb3BlcnR5RmlsdGVyYWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0ZpbHRlclRlbXBsYXRpbmdcIjtcblxuZXhwb3J0IHR5cGUgVmlzdWFsRmlsdGVycyA9IHtcblx0ZGltZW5zaW9uUGF0aD86IHN0cmluZztcblx0bWVhc3VyZVBhdGg/OiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHRjaGFydEFubm90YXRpb24/OiBzdHJpbmc7XG5cdHByZXNlbnRhdGlvbkFubm90YXRpb24/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBib29sZWFuO1xuXHRvdXRQYXJhbWV0ZXI/OiBzdHJpbmc7XG5cdGluUGFyYW1ldGVycz86IG9iamVjdFtdO1xuXHRjb250ZXh0UGF0aD86IHN0cmluZztcblx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24/OiBzdHJpbmc7XG5cdG11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZD86IGJvb2xlYW47XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcblx0c2hvd092ZXJsYXlJbml0aWFsbHk/OiBib29sZWFuO1xuXHRyZW5kZXJMaW5lQ2hhcnQ/OiBib29sZWFuO1xuXHRyZXF1aXJlZFByb3BlcnRpZXM/OiBvYmplY3RbXTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHRoYXQgbWVhc3VyZXMgYW5kIGRpbWVuc2lvbnMgb2YgdGhlIHZpc3VhbCBmaWx0ZXIgY2hhcnQgY2FuIGJlIGFnZ3JlZ2F0ZWQgYW5kIGdyb3VwZWQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gY2hhcnRBbm5vdGF0aW9uIFRoZSBjaGFydCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gYWdncmVnYXRpb25IZWxwZXIgVGhlIGFnZ3JlZ2F0aW9uIGhlbHBlclxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBtZWFzdXJlIGNhbiBiZSBncm91cGVkIGFuZCBhZ2dyZWdhdGVkXG4gKi9cbmNvbnN0IF9jaGVja1ZGQWdncmVnYXRpb24gPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGNoYXJ0QW5ub3RhdGlvbjogYW55LFxuXHRhZ2dyZWdhdGlvbkhlbHBlcjogYW55XG4pOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0bGV0IHNNZWFzdXJlUGF0aCwgYkdyb3VwYWJsZSwgYkFnZ3JlZ2F0YWJsZTtcblx0Y29uc3Qgc01lYXN1cmU6IHN0cmluZyA9IGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uTWVhc3VyZXNbMF0/LnZhbHVlO1xuXHRjb25zdCBzRGltZW5zaW9uOiBzdHJpbmcgPSBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/LkRpbWVuc2lvbnNbMF0/LnZhbHVlO1xuXHRjb25zdCBjdXN0b21BZ2dyZWdhdGVzID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMoKTtcblx0Y29uc3QgYVRyYW5zQWdncmVnYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0VHJhbnNBZ2dyZWdhdGlvbnMoKTtcblxuXHRpZiAoXG5cdFx0Y3VzdG9tQWdncmVnYXRlcy5zb21lKGZ1bmN0aW9uIChjdXN0QWdnOiBDdXN0b21BZ2dyZWdhdGUpIHtcblx0XHRcdHJldHVybiBjdXN0QWdnLnF1YWxpZmllciA9PT0gc01lYXN1cmU7XG5cdFx0fSlcblx0KSB7XG5cdFx0c01lYXN1cmVQYXRoID0gc01lYXN1cmU7XG5cdH0gZWxzZSBpZiAoYVRyYW5zQWdncmVnYXRpb25zICYmIGFUcmFuc0FnZ3JlZ2F0aW9uc1swXSkge1xuXHRcdGNvbnN0IGFBZ2dyZWdhdGlvbnMgPSBhVHJhbnNBZ2dyZWdhdGlvbnNbMF07XG5cdFx0YUFnZ3JlZ2F0aW9ucy5zb21lKGZ1bmN0aW9uIChvQWdncmVnYXRlOiBhbnkpIHtcblx0XHRcdGlmIChvQWdncmVnYXRlLk5hbWUgPT09IHNNZWFzdXJlKSB7XG5cdFx0XHRcdHNNZWFzdXJlUGF0aCA9IG9BZ2dyZWdhdGU/LkFnZ3JlZ2F0YWJsZVByb3BlcnR5LnZhbHVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdGNvbnN0IGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzKCk7XG5cdGNvbnN0IGFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXIgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRHcm91cGFibGVQcm9wZXJ0aWVzKCk7XG5cdGlmIChhQWdncmVnYXRhYmxlUHJvcHNGcm9tQ29udGFpbmVyICYmIGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIubGVuZ3RoKSB7XG5cdFx0Zm9yIChjb25zdCBhZ2dyZWdhdGFibGVQcm9wIG9mIGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIpIHtcblx0XHRcdGlmIChhZ2dyZWdhdGFibGVQcm9wPy5Qcm9wZXJ0eT8udmFsdWUgPT09IHNNZWFzdXJlUGF0aCkge1xuXHRcdFx0XHRiQWdncmVnYXRhYmxlID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYgKGFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXIgJiYgYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lci5sZW5ndGgpIHtcblx0XHRmb3IgKGNvbnN0IGdyb3VwYWJsZVByb3Agb2YgYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lcikge1xuXHRcdFx0aWYgKGdyb3VwYWJsZVByb3A/LnZhbHVlID09PSBzRGltZW5zaW9uKSB7XG5cdFx0XHRcdGJHcm91cGFibGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gYkFnZ3JlZ2F0YWJsZSAmJiBiR3JvdXBhYmxlO1xufTtcblxuLyoqXG4gKiBNZXRob2QgdG8gZ2V0IHRoZSB2aXN1YWwgZmlsdGVycyBvYmplY3QgZm9yIGEgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY2hhcnQgYW5ub3RhdGlvblxuICogQHBhcmFtIHNQcm9wZXJ0eVBhdGggVGhlIGFnZ3JlZ2F0aW9uIGhlbHBlclxuICogQHBhcmFtIEZpbHRlckZpZWxkcyBUaGUgYWdncmVnYXRpb24gaGVscGVyXG4gKiBAcmV0dXJucyBUaGUgdmlzdWFsIGZpbHRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZpc3VhbEZpbHRlcnMoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHNQcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0RmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbj5cbik6IFZpc3VhbEZpbHRlcnMgfCB1bmRlZmluZWQge1xuXHRjb25zdCB2aXN1YWxGaWx0ZXI6IFZpc3VhbEZpbHRlcnMgPSB7fTtcblx0Y29uc3Qgb1Zpc3VhbEZpbHRlcjogRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBGaWx0ZXJGaWVsZHNbc1Byb3BlcnR5UGF0aF07XG5cdGlmIChvVmlzdWFsRmlsdGVyPy52aXN1YWxGaWx0ZXI/LnZhbHVlTGlzdCkge1xuXHRcdGNvbnN0IG9WRlBhdGggPSBvVmlzdWFsRmlsdGVyPy52aXN1YWxGaWx0ZXI/LnZhbHVlTGlzdDtcblx0XHRjb25zdCBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXQgPSBvVkZQYXRoLnNwbGl0KFwiI1wiKTtcblx0XHRjb25zdCBxdWFsaWZpZXJWTCA9IGFubm90YXRpb25RdWFsaWZpZXJTcGxpdC5sZW5ndGggPiAxID8gYFZhbHVlTGlzdCMke2Fubm90YXRpb25RdWFsaWZpZXJTcGxpdFsxXX1gIDogYW5ub3RhdGlvblF1YWxpZmllclNwbGl0WzBdO1xuXHRcdGNvbnN0IHByb3BlcnR5ID0gZW50aXR5VHlwZS5yZXNvbHZlUGF0aChzUHJvcGVydHlQYXRoKTtcblx0XHRjb25zdCB2YWx1ZUxpc3Q6IGFueSA9IHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uW3F1YWxpZmllclZMXTtcblx0XHRpZiAodmFsdWVMaXN0KSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uUGF0aCA9IHZhbHVlTGlzdD8uQ29sbGVjdGlvblBhdGg7XG5cdFx0XHRsZXQgY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKFxuXHRcdFx0XHRgLyR7Y29sbGVjdGlvblBhdGggfHwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8ubmFtZX1gXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgdmFsdWVMaXN0UGFyYW1zID0gdmFsdWVMaXN0Py5QYXJhbWV0ZXJzO1xuXHRcdFx0bGV0IG91dFBhcmFtZXRlcjogYW55O1xuXHRcdFx0Y29uc3QgaW5QYXJhbWV0ZXJzOiBBcnJheTxvYmplY3Q+ID0gW107XG5cdFx0XHRsZXQgYVBhcmFtZXRlcnM6IEFycmF5PHN0cmluZz4gPSBbXTtcblx0XHRcdGlmICghY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRFbnRpdHlTZXQpIHtcblx0XHRcdFx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oXCJcIik7XG5cdFx0XHRcdGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCA9IHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQ7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJFbnRpdHlUeXBlID0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldFBhcmFtZXRlckVudGl0eVR5cGUoKTtcblx0XHRcdGFQYXJhbWV0ZXJzID0gcGFyYW1ldGVyRW50aXR5VHlwZVxuXHRcdFx0XHQ/IHBhcmFtZXRlckVudGl0eVR5cGUua2V5cy5tYXAoZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGtleS5uYW1lO1xuXHRcdFx0XHQgIH0pXG5cdFx0XHRcdDogW107XG5cdFx0XHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpID09PSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSkge1xuXHRcdFx0XHRhUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbWV0ZXI6IGFueSkge1xuXHRcdFx0XHRcdGluUGFyYW1ldGVycy5wdXNoKHtcblx0XHRcdFx0XHRcdGxvY2FsRGF0YVByb3BlcnR5OiBwYXJhbWV0ZXIsXG5cdFx0XHRcdFx0XHR2YWx1ZUxpc3RQcm9wZXJ0eTogcGFyYW1ldGVyXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHZhbHVlTGlzdFBhcmFtcykge1xuXHRcdFx0XHRmb3IgKGNvbnN0IHZhbHVlTGlzdFBhcmFtIG9mIHZhbHVlTGlzdFBhcmFtcykge1xuXHRcdFx0XHRcdGNvbnN0IGxvY2FsRGF0YVByb3BlcnR5ID0gdmFsdWVMaXN0UGFyYW0uTG9jYWxEYXRhUHJvcGVydHk/LnZhbHVlO1xuXHRcdFx0XHRcdGNvbnN0IHZhbHVlTGlzdFByb3BlcnR5ID0gdmFsdWVMaXN0UGFyYW0uVmFsdWVMaXN0UHJvcGVydHk7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0KHZhbHVlTGlzdFBhcmFtPy4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcIiB8fFxuXHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3RQYXJhbT8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlck91dFwiKSAmJlxuXHRcdFx0XHRcdFx0c1Byb3BlcnR5UGF0aCA9PT0gbG9jYWxEYXRhUHJvcGVydHlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG91dFBhcmFtZXRlciA9IHZhbHVlTGlzdFBhcmFtO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHQodmFsdWVMaXN0UGFyYW0/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dFwiIHx8XG5cdFx0XHRcdFx0XHRcdHZhbHVlTGlzdFBhcmFtPy4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVySW5cIikgJiZcblx0XHRcdFx0XHRcdHNQcm9wZXJ0eVBhdGggIT09IGxvY2FsRGF0YVByb3BlcnR5XG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBiTm90RmlsdGVyYWJsZSA9IGlzUHJvcGVydHlGaWx0ZXJhYmxlKGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCwgdmFsdWVMaXN0UHJvcGVydHkpO1xuXHRcdFx0XHRcdFx0aWYgKCFiTm90RmlsdGVyYWJsZSkge1xuXHRcdFx0XHRcdFx0XHRpblBhcmFtZXRlcnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0bG9jYWxEYXRhUHJvcGVydHk6IGxvY2FsRGF0YVByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlTGlzdFByb3BlcnR5OiB2YWx1ZUxpc3RQcm9wZXJ0eVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChpblBhcmFtZXRlcnMgJiYgaW5QYXJhbWV0ZXJzLmxlbmd0aCkge1xuXHRcdFx0XHRpblBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAob0luUGFyYW1ldGVyOiBhbnkpIHtcblx0XHRcdFx0XHRjb25zdCBtYWluRW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChvSW5QYXJhbWV0ZXI/LmxvY2FsRGF0YVByb3BlcnR5KSlcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVWYWx1ZVwiXVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWVMaXN0RW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChvSW5QYXJhbWV0ZXI/LnZhbHVlTGlzdFByb3BlcnR5KVxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVWYWx1ZVwiXVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKHZhbHVlTGlzdEVudGl0eVNldEluTWFwcGluZ0FsbG93ZWRFeHByZXNzaW9uID09PSBcInRydWVcIiAmJiBtYWluRW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPT09IFwiZmFsc2VcIikge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBGaWx0ZXJSZXN0cmljdGlvbnMgb2YgJHtzUHJvcGVydHlQYXRofSBpbiBNYWluRW50aXR5U2V0IGFuZCBWYWx1ZUxpc3RFbnRpdHlTZXQgYXJlIGRpZmZlcmVudGApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBwdlF1YWxpZmllciA9IHZhbHVlTGlzdD8uUHJlc2VudGF0aW9uVmFyaWFudFF1YWxpZmllcjtcblx0XHRcdGNvbnN0IHN2UXVhbGlmaWVyID0gdmFsdWVMaXN0Py5TZWxlY3Rpb25WYXJpYW50UXVhbGlmaWVyO1xuXHRcdFx0Y29uc3QgcHZBbm5vdGF0aW9uOiBhbnkgPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKFxuXHRcdFx0XHRgQFVJLlByZXNlbnRhdGlvblZhcmlhbnQjJHtwdlF1YWxpZmllcn1gXG5cdFx0XHQpPy5hbm5vdGF0aW9uO1xuXHRcdFx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGlmICghYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAocHZBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IGFWaXN1YWxpemF0aW9ucyA9IHB2QW5ub3RhdGlvbj8uVmlzdWFsaXphdGlvbnM7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gYC8ke3ZhbHVlTGlzdD8uQ29sbGVjdGlvblBhdGh9YCB8fCBgLyR7Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlTZXQoKT8ubmFtZX1gO1xuXHRcdFx0XHR2aXN1YWxGaWx0ZXIuY29udGV4dFBhdGggPSBjb250ZXh0UGF0aDtcblx0XHRcdFx0bGV0IGNoYXJ0QW5ub3RhdGlvbjtcblx0XHRcdFx0Zm9yIChjb25zdCB2aXN1YWxpemF0aW9uIG9mIGFWaXN1YWxpemF0aW9ucykge1xuXHRcdFx0XHRcdGlmICh2aXN1YWxpemF0aW9uLiR0YXJnZXQ/LnRlcm0gPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnRcIikge1xuXHRcdFx0XHRcdFx0Y2hhcnRBbm5vdGF0aW9uID0gdmlzdWFsaXphdGlvbjtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoY2hhcnRBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0Y29uc3QgX2JnZXRWRkFnZ3JlZ2F0aW9uOiBib29sZWFuIHwgdW5kZWZpbmVkID0gX2NoZWNrVkZBZ2dyZWdhdGlvbihcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdGNoYXJ0QW5ub3RhdGlvbixcblx0XHRcdFx0XHRcdGFnZ3JlZ2F0aW9uSGVscGVyXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpZiAoIV9iZ2V0VkZBZ2dyZWdhdGlvbikge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBiRGltZW5zaW9uSGlkZGVuOiBib29sZWFuID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpO1xuXHRcdFx0XHRcdGNvbnN0IGJEaW1lbnNpb25IaWRkZW5GaWx0ZXI6IGJvb2xlYW4gPVxuXHRcdFx0XHRcdFx0Y2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbkZpbHRlcj8udmFsdWVPZigpO1xuXHRcdFx0XHRcdGlmIChiRGltZW5zaW9uSGlkZGVuID09PSB0cnVlIHx8IGJEaW1lbnNpb25IaWRkZW5GaWx0ZXIgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGFWaXN1YWxpemF0aW9ucyAmJiBhVmlzdWFsaXphdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuY2hhcnRBbm5vdGF0aW9uID0gY2hhcnRBbm5vdGF0aW9uXG5cdFx0XHRcdFx0XHRcdD8gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKFxuXHRcdFx0XHRcdFx0XHRcdFx0YCR7Y2hhcnRBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZX0vJEFubm90YXRpb25QYXRoL2Bcblx0XHRcdFx0XHRcdFx0ICApXG5cdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnByZXNlbnRhdGlvbkFubm90YXRpb24gPSBwdkFubm90YXRpb25cblx0XHRcdFx0XHRcdFx0PyBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoYCR7cHZBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZX0vYClcblx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIub3V0UGFyYW1ldGVyID0gb3V0UGFyYW1ldGVyPy5Mb2NhbERhdGFQcm9wZXJ0eT8udmFsdWU7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzID0gaW5QYXJhbWV0ZXJzO1xuXHRcdFx0XHRcdFx0Y29uc3QgYklzUmFuZ2UgPSBjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMoXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoc1Byb3BlcnR5UGF0aCkpXG5cdFx0XHRcdFx0XHRcdFx0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHRcdFx0XHRcdFx0W1wiU2luZ2xlUmFuZ2VcIiwgXCJNdWx0aVJhbmdlXCJdXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRpZiAoY29tcGlsZUV4cHJlc3Npb24oYklzUmFuZ2UpID09PSBcInRydWVcIikge1xuXHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJSYW5nZSBBbGxvd2VkRXhwcmVzc2lvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB2aXN1YWwgZmlsdGVyc1wiKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3QgYklzTWFpbkVudGl0eVNldFNpbmdsZVNlbGVjdGlvbjogYW55ID0gY2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHNQcm9wZXJ0eVBhdGgpKVxuXHRcdFx0XHRcdFx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdFx0XHRcdFtcIlNpbmdsZVZhbHVlXCJdXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLm11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZCA9IGNvbXBpbGVFeHByZXNzaW9uKCFiSXNNYWluRW50aXR5U2V0U2luZ2xlU2VsZWN0aW9uLnZhbHVlKSBhcyBhbnk7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIucmVxdWlyZWQgPSBnZXRJc1JlcXVpcmVkKGNvbnZlcnRlckNvbnRleHQsIHNQcm9wZXJ0eVBhdGgpO1xuXHRcdFx0XHRcdFx0bGV0IHN2QW5ub3RhdGlvbjogYW55O1xuXHRcdFx0XHRcdFx0aWYgKHN2UXVhbGlmaWVyKSB7XG5cdFx0XHRcdFx0XHRcdHN2QW5ub3RhdGlvbiA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5VHlwZUFubm90YXRpb24oXG5cdFx0XHRcdFx0XHRcdFx0YEBVSS5TZWxlY3Rpb25WYXJpYW50IyR7c3ZRdWFsaWZpZXJ9YFxuXHRcdFx0XHRcdFx0XHQpPy5hbm5vdGF0aW9uO1xuXHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24gPSBzdkFubm90YXRpb25cblx0XHRcdFx0XHRcdFx0XHQ/IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChgJHtzdkFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lfS9gKVxuXHRcdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bGV0IHJlcXVpcmVkUHJvcGVydGllcyA9IFtdO1xuXHRcdFx0XHRcdFx0aWYgKHBhcmFtZXRlckVudGl0eVR5cGUpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc0VudGl0eVNldCA9IGNvbGxlY3Rpb25QYXRoLnNwbGl0KFwiL1wiKVswXTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc05hdmlnYXRpb25Qcm9wZXJ0eSA9IGNvbGxlY3Rpb25QYXRoLnNwbGl0KFwiL1wiKVsxXTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0VudGl0eVNldENvbnZlcnRlckNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3IoYC8ke3NFbnRpdHlTZXR9YCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFSZXN0cmljdGVkUHJvcGVydGllcyA9XG5cdFx0XHRcdFx0XHRcdFx0b0VudGl0eVNldENvbnZlcnRlckNvbnRleHQ/LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS5zdGFydGluZ0VudGl0eVNldD8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllc1xuXHRcdFx0XHRcdFx0XHRcdFx0Py5OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zPy5SZXN0cmljdGVkUHJvcGVydGllcztcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb1Jlc3RyaWN0ZWRQcm9wZXJ0eSA9IGFSZXN0cmljdGVkUHJvcGVydGllcz8uZmluZChcblx0XHRcdFx0XHRcdFx0XHQocmVzdHJpY3RlZE5hdlByb3A6IE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uVHlwZXMpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChyZXN0cmljdGVkTmF2UHJvcC5OYXZpZ2F0aW9uUHJvcGVydHk/LnR5cGUgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN0cmljdGVkTmF2UHJvcC5OYXZpZ2F0aW9uUHJvcGVydHkudmFsdWUgPT09IHNOYXZpZ2F0aW9uUHJvcGVydHk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnRpZXMgPSBvUmVzdHJpY3RlZFByb3BlcnR5Py5GaWx0ZXJSZXN0cmljdGlvbnM/LlJlcXVpcmVkUHJvcGVydGllcyBhcyBhbnlbXTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGVudGl0eVNldEFubm90YXRpb25zID0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5hbm5vdGF0aW9ucztcblx0XHRcdFx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0aWVzID0gZW50aXR5U2V0QW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcz8uRmlsdGVyUmVzdHJpY3Rpb25zPy5SZXF1aXJlZFByb3BlcnRpZXMgYXMgYW55W107XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRsZXQgcmVxdWlyZWRQcm9wZXJ0eVBhdGhzOiBBcnJheTxvYmplY3Q+ID0gW107XG5cdFx0XHRcdFx0XHRpZiAocmVxdWlyZWRQcm9wZXJ0aWVzPy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24gKG9SZXF1aXJlUHJvcGVydHk6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydHlQYXRocy5wdXNoKG9SZXF1aXJlUHJvcGVydHkudmFsdWUpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydHlQYXRocyA9IHJlcXVpcmVkUHJvcGVydHlQYXRocy5jb25jYXQoYVBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnJlcXVpcmVkUHJvcGVydGllcyA9IHJlcXVpcmVkUHJvcGVydHlQYXRocztcblx0XHRcdFx0XHRcdGlmICh2aXN1YWxGaWx0ZXIucmVxdWlyZWRQcm9wZXJ0aWVzPy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0aWYgKCF2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzIHx8ICF2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICghdmlzdWFsRmlsdGVyLnNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuc2hvd092ZXJsYXlJbml0aWFsbHkgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgc2VsZWN0T3B0aW9ucyA9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN2QW5ub3RhdGlvbj8uU2VsZWN0T3B0aW9ucz8ubWFwKChvU2VsZWN0T3B0aW9uOiBhbnkpID0+IG9TZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lLnZhbHVlKSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHBhcmFtZXRlck9wdGlvbnMgPVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdkFubm90YXRpb24/LlBhcmFtZXRlcnM/Lm1hcCgob1BhcmFtZXRlck9wdGlvbjogYW55KSA9PiBvUGFyYW1ldGVyT3B0aW9uLlByb3BlcnR5TmFtZS52YWx1ZSkgfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0XHRzZWxlY3RPcHRpb25zID0gc2VsZWN0T3B0aW9ucy5jb25jYXQocGFyYW1ldGVyT3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnR5UGF0aHMgPSByZXF1aXJlZFByb3BlcnR5UGF0aHMuc29ydCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0T3B0aW9ucyA9IHNlbGVjdE9wdGlvbnMuc29ydCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnNob3dPdmVybGF5SW5pdGlhbGx5ID0gcmVxdWlyZWRQcm9wZXJ0eVBhdGhzLnNvbWUoZnVuY3Rpb24gKHNQYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzZWxlY3RPcHRpb25zLmluZGV4T2Yoc1BhdGgpID09PSAtMTtcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuc2hvd092ZXJsYXlJbml0aWFsbHkgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnNob3dPdmVybGF5SW5pdGlhbGx5ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb25zdCBzRGltZW5zaW9uVHlwZSA9IGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uRGltZW5zaW9uc1swXT8uJHRhcmdldD8udHlwZTtcblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0IShcblx0XHRcdFx0XHRcdFx0XHRzRGltZW5zaW9uVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIiB8fFxuXHRcdFx0XHRcdFx0XHRcdHNEaW1lbnNpb25UeXBlID09PSBcIkVkbS5EYXRlXCIgfHxcblx0XHRcdFx0XHRcdFx0XHRzRGltZW5zaW9uVHlwZSA9PT0gXCJFZG0uVGltZU9mRGF5XCJcblx0XHRcdFx0XHRcdFx0KSAmJlxuXHRcdFx0XHRcdFx0XHRjaGFydEFubm90YXRpb24uJHRhcmdldC5DaGFydFR5cGUgPT09IFwiVUkuQ2hhcnRUeXBlL0xpbmVcIlxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5yZW5kZXJMaW5lQ2hhcnQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5yZW5kZXJMaW5lQ2hhcnQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUFMRk9STUVEX1ZJU1VBTEZJTFRFUlMuQ0hBUlQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkhpZ2gsIElzc3VlVHlwZS5NQUxGT1JNRURfVklTVUFMRklMVEVSUy5QUkVTRU5UQVRJT05WQVJJQU5UKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkhpZ2gsIElzc3VlVHlwZS5NQUxGT1JNRURfVklTVUFMRklMVEVSUy5WQUxVRUxJU1QpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERpYWdub3N0aWNzKCkuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5NYW5pZmVzdCwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUFMRk9STUVEX1ZJU1VBTEZJTFRFUlMuVkFMVUVMSVNUKTtcblx0fVxuXHRpZiAoT2JqZWN0LmtleXModmlzdWFsRmlsdGVyKS5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIHZpc3VhbEZpbHRlcjtcblx0fVxufVxuIl19