@sapui5/sap.fe.core 1.97.0 → 1.100.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (306) hide show
  1. package/package.json +7 -4
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +309 -405
  4. package/src/sap/fe/core/AnnotationHelper.ts +315 -0
  5. package/src/sap/fe/core/AppComponent.js +389 -397
  6. package/src/sap/fe/core/AppComponent.ts +403 -0
  7. package/src/sap/fe/core/AppStateHandler.js +198 -181
  8. package/src/sap/fe/core/AppStateHandler.ts +171 -0
  9. package/src/sap/fe/core/BaseController.js +83 -58
  10. package/src/sap/fe/core/BaseController.ts +68 -0
  11. package/src/sap/fe/core/BusyLocker.js +105 -121
  12. package/src/sap/fe/core/BusyLocker.ts +98 -0
  13. package/src/sap/fe/core/CommonUtils.js +2164 -2379
  14. package/src/sap/fe/core/CommonUtils.ts +2177 -0
  15. package/src/sap/fe/core/ExtensionAPI.js +279 -266
  16. package/src/sap/fe/core/ExtensionAPI.ts +250 -0
  17. package/src/sap/fe/core/PageController.js +218 -125
  18. package/src/sap/fe/core/PageController.ts +129 -0
  19. package/src/sap/fe/core/RouterProxy.js +924 -807
  20. package/src/sap/fe/core/RouterProxy.ts +840 -0
  21. package/src/sap/fe/core/Synchronization.js +41 -35
  22. package/src/sap/fe/core/Synchronization.ts +29 -0
  23. package/src/sap/fe/core/TemplateComponent.js +173 -155
  24. package/src/sap/fe/core/TemplateComponent.ts +173 -0
  25. package/src/sap/fe/core/TemplateModel.js +79 -54
  26. package/src/sap/fe/core/TemplateModel.ts +63 -0
  27. package/src/sap/fe/core/TransactionHelper.js +1560 -1579
  28. package/src/sap/fe/core/TransactionHelper.ts +1717 -0
  29. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +392 -0
  30. package/src/sap/fe/core/actions/collaboration/ActivitySync.ts +355 -0
  31. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +136 -0
  32. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +119 -0
  33. package/src/sap/fe/core/actions/collaboration/Manage.js +262 -0
  34. package/src/sap/fe/core/actions/collaboration/Manage.ts +244 -0
  35. package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +103 -0
  36. package/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
  37. package/src/sap/fe/core/actions/draft.js +521 -581
  38. package/src/sap/fe/core/actions/draft.ts +566 -0
  39. package/src/sap/fe/core/actions/messageHandling.js +564 -511
  40. package/src/sap/fe/core/actions/messageHandling.ts +552 -0
  41. package/src/sap/fe/core/actions/nonDraft.js +17 -19
  42. package/src/sap/fe/core/actions/nonDraft.ts +12 -0
  43. package/src/sap/fe/core/actions/operations.js +1093 -1211
  44. package/src/sap/fe/core/actions/operations.ts +1192 -0
  45. package/src/sap/fe/core/actions/sticky.js +114 -104
  46. package/src/sap/fe/core/actions/sticky.ts +119 -0
  47. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +70 -66
  48. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +65 -0
  49. package/src/sap/fe/core/controllerextensions/EditFlow.js +1594 -1701
  50. package/src/sap/fe/core/controllerextensions/EditFlow.ts +1672 -0
  51. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +80 -54
  52. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +61 -0
  53. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +719 -505
  54. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +783 -0
  55. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +797 -813
  56. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +803 -0
  57. package/src/sap/fe/core/controllerextensions/InternalRouting.js +1005 -973
  58. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +978 -0
  59. package/src/sap/fe/core/controllerextensions/KPIManagement.js +530 -476
  60. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +137 -46
  61. package/src/sap/fe/core/controllerextensions/MassEdit.js +144 -0
  62. package/src/sap/fe/core/controllerextensions/MassEdit.ts +156 -0
  63. package/src/sap/fe/core/controllerextensions/MessageHandler.js +234 -232
  64. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +225 -0
  65. package/src/sap/fe/core/controllerextensions/PageReady.js +302 -337
  66. package/src/sap/fe/core/controllerextensions/PageReady.ts +23 -17
  67. package/src/sap/fe/core/controllerextensions/Paginator.js +189 -148
  68. package/src/sap/fe/core/controllerextensions/Paginator.ts +163 -0
  69. package/src/sap/fe/core/controllerextensions/Placeholder.js +158 -146
  70. package/src/sap/fe/core/controllerextensions/Placeholder.ts +151 -0
  71. package/src/sap/fe/core/controllerextensions/Routing.js +145 -106
  72. package/src/sap/fe/core/controllerextensions/Routing.ts +132 -0
  73. package/src/sap/fe/core/controllerextensions/RoutingListener.js +8 -6
  74. package/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
  75. package/src/sap/fe/core/controllerextensions/Share.js +220 -244
  76. package/src/sap/fe/core/controllerextensions/Share.ts +231 -0
  77. package/src/sap/fe/core/controllerextensions/SideEffects.js +593 -634
  78. package/src/sap/fe/core/controllerextensions/SideEffects.ts +29 -27
  79. package/src/sap/fe/core/controllerextensions/ViewState.js +789 -806
  80. package/src/sap/fe/core/controllerextensions/ViewState.ts +805 -0
  81. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +4 -3
  82. package/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
  83. package/src/sap/fe/core/controls/CommandExecution.js +68 -66
  84. package/src/sap/fe/core/controls/CommandExecution.ts +72 -0
  85. package/src/sap/fe/core/controls/ConditionalWrapper.js +91 -75
  86. package/src/sap/fe/core/controls/ConditionalWrapper.ts +83 -0
  87. package/src/sap/fe/core/controls/CustomQuickViewPage.js +131 -125
  88. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +126 -0
  89. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +105 -110
  90. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +101 -0
  91. package/src/sap/fe/core/controls/FieldWrapper.js +122 -140
  92. package/src/sap/fe/core/controls/FieldWrapper.ts +115 -0
  93. package/src/sap/fe/core/controls/FilterBar.js +163 -159
  94. package/src/sap/fe/core/controls/FilterBar.ts +143 -0
  95. package/src/sap/fe/core/controls/FormElementWrapper.js +46 -44
  96. package/src/sap/fe/core/controls/FormElementWrapper.ts +40 -0
  97. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +38 -42
  98. package/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
  99. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +2 -1
  100. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +127 -116
  101. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +98 -0
  102. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +242 -255
  103. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +245 -0
  104. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +151 -141
  105. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
  106. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +336 -322
  107. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
  108. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +106 -0
  109. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +79 -0
  110. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +70 -0
  111. package/src/sap/fe/core/converters/ConverterContext.js +348 -367
  112. package/src/sap/fe/core/converters/ConverterContext.ts +33 -19
  113. package/src/sap/fe/core/converters/ManifestSettings.js +12 -1
  114. package/src/sap/fe/core/converters/ManifestSettings.ts +16 -1
  115. package/src/sap/fe/core/converters/ManifestWrapper.js +354 -354
  116. package/src/sap/fe/core/converters/ManifestWrapper.ts +34 -6
  117. package/src/sap/fe/core/converters/MetaModelConverter.js +72 -9
  118. package/src/sap/fe/core/converters/MetaModelConverter.ts +75 -16
  119. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  120. package/src/sap/fe/core/converters/TemplateConverter.ts +4 -3
  121. package/src/sap/fe/core/converters/annotations/DataField.js +28 -14
  122. package/src/sap/fe/core/converters/annotations/DataField.ts +38 -14
  123. package/src/sap/fe/core/converters/common/AnnotationConverter.js +33 -21
  124. package/src/sap/fe/core/converters/controls/Common/Action.js +11 -2
  125. package/src/sap/fe/core/converters/controls/Common/Action.ts +8 -2
  126. package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -3
  127. package/src/sap/fe/core/converters/controls/Common/Chart.ts +11 -3
  128. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -3
  129. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +2 -2
  130. package/src/sap/fe/core/converters/controls/Common/Form.js +21 -11
  131. package/src/sap/fe/core/converters/controls/Common/Form.ts +28 -6
  132. package/src/sap/fe/core/converters/controls/Common/KPI.js +69 -4
  133. package/src/sap/fe/core/converters/controls/Common/KPI.ts +75 -2
  134. package/src/sap/fe/core/converters/controls/Common/Table.js +507 -408
  135. package/src/sap/fe/core/converters/controls/Common/Table.ts +618 -500
  136. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +592 -0
  137. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +718 -0
  138. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +465 -59
  139. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +462 -72
  140. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +2 -2
  141. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +1 -1
  142. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +17 -9
  143. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +24 -9
  144. package/src/sap/fe/core/converters/helpers/Aggregation.js +118 -121
  145. package/src/sap/fe/core/converters/helpers/Aggregation.ts +28 -5
  146. package/src/sap/fe/core/converters/helpers/BindingHelper.js +20 -6
  147. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
  148. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +12 -1
  149. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
  150. package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -1
  151. package/src/sap/fe/core/converters/helpers/IssueManager.ts +6 -0
  152. package/src/sap/fe/core/converters/helpers/Key.js +42 -57
  153. package/src/sap/fe/core/converters/helpers/Key.ts +1 -1
  154. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +28 -7
  155. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +23 -6
  156. package/src/sap/fe/core/converters/templates/ListReportConverter.js +20 -7
  157. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +36 -14
  158. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +7 -5
  159. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +5 -1
  160. package/src/sap/fe/core/designtime/AppComponent.designtime.js +93 -90
  161. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
  162. package/src/sap/fe/core/formatters/CollaborationFormatter.js +104 -0
  163. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
  164. package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
  165. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +1 -1
  166. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
  167. package/src/sap/fe/core/formatters/FPMFormatter.ts +4 -10
  168. package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
  169. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -1
  170. package/src/sap/fe/core/formatters/TableFormatter.js +91 -29
  171. package/src/sap/fe/core/formatters/TableFormatter.ts +94 -28
  172. package/src/sap/fe/core/formatters/ValueFormatter.js +30 -5
  173. package/src/sap/fe/core/formatters/ValueFormatter.ts +30 -7
  174. package/src/sap/fe/core/fpm/Component.js +51 -54
  175. package/src/sap/fe/core/fpm/Component.ts +48 -0
  176. package/src/sap/fe/core/helpers/AppStartupHelper.js +373 -0
  177. package/src/sap/fe/core/helpers/AppStartupHelper.ts +417 -0
  178. package/src/sap/fe/core/helpers/BindingExpression.js +489 -442
  179. package/src/sap/fe/core/helpers/BindingExpression.ts +486 -469
  180. package/src/sap/fe/core/helpers/ClassSupport.js +212 -76
  181. package/src/sap/fe/core/helpers/ClassSupport.ts +198 -71
  182. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +64 -59
  183. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +52 -0
  184. package/src/sap/fe/core/helpers/EditState.js +81 -84
  185. package/src/sap/fe/core/helpers/EditState.ts +81 -0
  186. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +62 -48
  187. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +49 -0
  188. package/src/sap/fe/core/helpers/FPMHelper.js +52 -56
  189. package/src/sap/fe/core/helpers/FPMHelper.ts +62 -0
  190. package/src/sap/fe/core/helpers/KeepAliveHelper.js +4 -5
  191. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +10 -10
  192. package/src/sap/fe/core/helpers/MassEditHelper.js +604 -0
  193. package/src/sap/fe/core/helpers/MassEditHelper.ts +699 -0
  194. package/src/sap/fe/core/helpers/ModelHelper.js +253 -225
  195. package/src/sap/fe/core/helpers/ModelHelper.ts +250 -0
  196. package/src/sap/fe/core/helpers/PasteHelper.js +210 -132
  197. package/src/sap/fe/core/helpers/PasteHelper.ts +196 -0
  198. package/src/sap/fe/core/helpers/SemanticDateOperators.js +336 -313
  199. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +334 -0
  200. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +66 -67
  201. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +73 -0
  202. package/src/sap/fe/core/helpers/StableIdHelper.js +4 -7
  203. package/src/sap/fe/core/helpers/StableIdHelper.ts +2 -6
  204. package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
  205. package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -1
  206. package/src/sap/fe/core/library.js +427 -425
  207. package/src/sap/fe/core/library.support.js +23 -27
  208. package/src/sap/fe/core/library.support.ts +23 -0
  209. package/src/sap/fe/core/library.ts +420 -0
  210. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +64 -0
  211. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +69 -0
  212. package/src/sap/fe/core/messagebundle.properties +78 -13
  213. package/src/sap/fe/core/messagebundle_ar.properties +58 -7
  214. package/src/sap/fe/core/messagebundle_bg.properties +58 -7
  215. package/src/sap/fe/core/messagebundle_ca.properties +58 -7
  216. package/src/sap/fe/core/messagebundle_cs.properties +59 -8
  217. package/src/sap/fe/core/messagebundle_cy.properties +58 -7
  218. package/src/sap/fe/core/messagebundle_da.properties +58 -7
  219. package/src/sap/fe/core/messagebundle_de.properties +58 -7
  220. package/src/sap/fe/core/messagebundle_el.properties +58 -7
  221. package/src/sap/fe/core/messagebundle_en.properties +57 -6
  222. package/src/sap/fe/core/messagebundle_en_GB.properties +57 -6
  223. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +61 -6
  224. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +58 -7
  225. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +58 -7
  226. package/src/sap/fe/core/messagebundle_es.properties +58 -7
  227. package/src/sap/fe/core/messagebundle_es_MX.properties +58 -7
  228. package/src/sap/fe/core/messagebundle_et.properties +58 -7
  229. package/src/sap/fe/core/messagebundle_fi.properties +60 -9
  230. package/src/sap/fe/core/messagebundle_fr.properties +64 -13
  231. package/src/sap/fe/core/messagebundle_fr_CA.properties +59 -8
  232. package/src/sap/fe/core/messagebundle_hi.properties +58 -7
  233. package/src/sap/fe/core/messagebundle_hr.properties +58 -7
  234. package/src/sap/fe/core/messagebundle_hu.properties +59 -8
  235. package/src/sap/fe/core/messagebundle_id.properties +61 -10
  236. package/src/sap/fe/core/messagebundle_it.properties +58 -7
  237. package/src/sap/fe/core/messagebundle_iw.properties +58 -7
  238. package/src/sap/fe/core/messagebundle_ja.properties +58 -7
  239. package/src/sap/fe/core/messagebundle_kk.properties +58 -7
  240. package/src/sap/fe/core/messagebundle_ko.properties +58 -7
  241. package/src/sap/fe/core/messagebundle_lt.properties +58 -7
  242. package/src/sap/fe/core/messagebundle_lv.properties +59 -8
  243. package/src/sap/fe/core/messagebundle_ms.properties +58 -7
  244. package/src/sap/fe/core/messagebundle_nl.properties +58 -7
  245. package/src/sap/fe/core/messagebundle_no.properties +58 -7
  246. package/src/sap/fe/core/messagebundle_pl.properties +58 -7
  247. package/src/sap/fe/core/messagebundle_pt.properties +59 -8
  248. package/src/sap/fe/core/messagebundle_pt_PT.properties +58 -7
  249. package/src/sap/fe/core/messagebundle_ro.properties +58 -7
  250. package/src/sap/fe/core/messagebundle_ru.properties +58 -7
  251. package/src/sap/fe/core/messagebundle_sh.properties +58 -7
  252. package/src/sap/fe/core/messagebundle_sk.properties +58 -7
  253. package/src/sap/fe/core/messagebundle_sl.properties +58 -7
  254. package/src/sap/fe/core/messagebundle_sv.properties +59 -8
  255. package/src/sap/fe/core/messagebundle_th.properties +58 -7
  256. package/src/sap/fe/core/messagebundle_tr.properties +60 -9
  257. package/src/sap/fe/core/messagebundle_uk.properties +58 -7
  258. package/src/sap/fe/core/messagebundle_vi.properties +58 -7
  259. package/src/sap/fe/core/messagebundle_zh_CN.properties +58 -7
  260. package/src/sap/fe/core/messagebundle_zh_TW.properties +58 -7
  261. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +45 -71
  262. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
  263. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +231 -202
  264. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +212 -0
  265. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +67 -92
  266. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +10 -6
  267. package/src/sap/fe/core/services/NavigationServiceFactory.js +351 -300
  268. package/src/sap/fe/core/services/NavigationServiceFactory.ts +313 -0
  269. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +114 -81
  270. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +83 -0
  271. package/src/sap/fe/core/services/RoutingServiceFactory.js +927 -1152
  272. package/src/sap/fe/core/services/RoutingServiceFactory.ts +898 -0
  273. package/src/sap/fe/core/services/ShellServicesFactory.js +649 -707
  274. package/src/sap/fe/core/services/ShellServicesFactory.ts +52 -15
  275. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +569 -637
  276. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +78 -102
  277. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +429 -478
  278. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +460 -0
  279. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +10 -8
  280. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +8 -0
  281. package/src/sap/fe/core/support/AnnotationIssue.support.js +15 -3
  282. package/src/sap/fe/core/support/AnnotationIssue.support.ts +16 -2
  283. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -2
  284. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +1 -1
  285. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  286. package/src/sap/fe/core/support/CommonHelper.ts +1 -1
  287. package/src/sap/fe/core/support/Diagnostics.js +36 -48
  288. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +38 -0
  289. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.ts +18 -0
  290. package/src/sap/fe/core/templating/DataModelPathHelper.js +97 -127
  291. package/src/sap/fe/core/templating/DataModelPathHelper.ts +112 -135
  292. package/src/sap/fe/core/templating/DisplayModeFormatter.js +114 -0
  293. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +86 -0
  294. package/src/sap/fe/core/templating/FieldControlHelper.js +8 -8
  295. package/src/sap/fe/core/templating/FieldControlHelper.ts +25 -7
  296. package/src/sap/fe/core/templating/FilterHelper.js +140 -78
  297. package/src/sap/fe/core/templating/FilterHelper.ts +149 -78
  298. package/src/sap/fe/core/templating/PropertyHelper.js +3 -3
  299. package/src/sap/fe/core/templating/PropertyHelper.ts +2 -2
  300. package/src/sap/fe/core/templating/UIFormatters.js +76 -135
  301. package/src/sap/fe/core/templating/UIFormatters.ts +76 -99
  302. package/src/sap/fe/core/type/Email.js +1 -1
  303. package/src/sap/fe/core/type/Email.ts +4 -6
  304. package/ui5.yaml +0 -3
  305. package/src/sap/fe/core/controls/filterbar.d.js +0 -8
  306. package/src/sap/fe/core/controls/filterbar.d.ts +0 -0
@@ -2,23 +2,21 @@
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/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/core/ElementMetadata"], function (ObjectPath, deepClone, ElementMetadata) {
5
+ sap.ui.define(["sap/base/util/ObjectPath", "sap/ui/core/ElementMetadata", "sap/ui/base/Metadata", "sap/fe/core/controllerextensions/ControllerExtensionMetadata", "sap/ui/core/mvc/ControllerMetadata", "sap/base/util/uid", "sap/base/util/merge"], function (ObjectPath, ElementMetadata, Metadata, ControllerExtensionMetadata, ControllerMetadata, uid, merge) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
9
9
 
10
10
  var ensureMetadata = function (target) {
11
- if (!target.hasOwnProperty("metadata")) {
12
- target.metadata = deepClone(target.metadata || {
13
- properties: {},
14
- macroContexts: {},
15
- aggregations: {},
16
- associations: {},
17
- methods: {},
18
- events: {}
19
- });
20
- }
21
-
11
+ target.metadata = merge({
12
+ controllerExtensions: {},
13
+ properties: {},
14
+ macroContexts: {},
15
+ aggregations: {},
16
+ associations: {},
17
+ methods: {},
18
+ events: {}
19
+ }, target.metadata || {});
22
20
  return target.metadata;
23
21
  };
24
22
 
@@ -62,8 +60,9 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
62
60
 
63
61
  _exports.Extensible = Extensible;
64
62
 
65
- function Public(target, propertyKey) {
63
+ function Public(target, propertyKey, descriptor) {
66
64
  var metadata = ensureMetadata(target);
65
+ descriptor.enumerable = true;
67
66
 
68
67
  if (!metadata.methods[propertyKey]) {
69
68
  metadata.methods[propertyKey] = {};
@@ -74,8 +73,9 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
74
73
 
75
74
  _exports.Public = Public;
76
75
 
77
- function Private(target, propertyKey) {
76
+ function Private(target, propertyKey, descriptor) {
78
77
  var metadata = ensureMetadata(target);
78
+ descriptor.enumerable = true;
79
79
 
80
80
  if (!metadata.methods[propertyKey]) {
81
81
  metadata.methods[propertyKey] = {};
@@ -86,8 +86,9 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
86
86
 
87
87
  _exports.Private = Private;
88
88
 
89
- function Final(target, propertyKey) {
89
+ function Final(target, propertyKey, descriptor) {
90
90
  var metadata = ensureMetadata(target);
91
+ descriptor.enumerable = true;
91
92
 
92
93
  if (!metadata.methods[propertyKey]) {
93
94
  metadata.methods[propertyKey] = {};
@@ -128,6 +129,17 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
128
129
 
129
130
  _exports.MacroContext = MacroContext;
130
131
 
132
+ function UsingExtension(extensionClass) {
133
+ return function (target, propertyKey, propertyDescriptor) {
134
+ var metadata = ensureMetadata(target);
135
+ delete propertyDescriptor.initializer;
136
+ metadata.controllerExtensions[propertyKey] = extensionClass;
137
+ return propertyDescriptor;
138
+ };
139
+ }
140
+
141
+ _exports.UsingExtension = UsingExtension;
142
+
131
143
  function Property(oPropertyParams) {
132
144
  return function (target, propertyKey, propertyDescriptor) {
133
145
  var metadata = ensureMetadata(target);
@@ -143,15 +155,12 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
143
155
  }
144
156
 
145
157
  delete propertyDescriptor.writable;
146
- delete propertyDescriptor.initializer;
147
-
148
- propertyDescriptor.set = function (v) {
149
- return this.setProperty(propertyKey, v);
150
- };
151
-
152
- propertyDescriptor.get = function () {
153
- return this.getProperty(propertyKey);
154
- };
158
+ delete propertyDescriptor.initializer; // (propertyDescriptor as any).set = function(v: any) {
159
+ // return this.setProperty(propertyKey, v);
160
+ // };
161
+ // (propertyDescriptor as any).get = function() {
162
+ // return this.getProperty(propertyKey);
163
+ // };
155
164
 
156
165
  return propertyDescriptor;
157
166
  };
@@ -172,15 +181,12 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
172
181
  }
173
182
 
174
183
  delete propertyDescriptor.writable;
175
- delete propertyDescriptor.initializer;
176
-
177
- propertyDescriptor.set = function (v) {
178
- return this.setAggregation(propertyKey, v);
179
- };
180
-
181
- propertyDescriptor.get = function () {
182
- return this.getAggregation(propertyKey);
183
- };
184
+ delete propertyDescriptor.initializer; // (propertyDescriptor as any).set = function(v: any) {
185
+ // return this.setAggregation(propertyKey, v);
186
+ // };
187
+ // (propertyDescriptor as any).get = function() {
188
+ // return this.getAggregation(propertyKey);
189
+ // };
184
190
 
185
191
  return propertyDescriptor;
186
192
  };
@@ -197,15 +203,12 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
197
203
  }
198
204
 
199
205
  delete propertyDescriptor.writable;
200
- delete propertyDescriptor.initializer;
201
-
202
- propertyDescriptor.set = function (v) {
203
- return this.setAggregation(propertyKey, v);
204
- };
205
-
206
- propertyDescriptor.get = function () {
207
- return this.getAggregation(propertyKey);
208
- };
206
+ delete propertyDescriptor.initializer; // (propertyDescriptor as any).set = function(v: any) {
207
+ // return this.setAggregation(propertyKey, v);
208
+ // };
209
+ // (propertyDescriptor as any).get = function() {
210
+ // return this.getAggregation(propertyKey);
211
+ // };
209
212
 
210
213
  return propertyDescriptor;
211
214
  };
@@ -213,7 +216,15 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
213
216
 
214
217
  _exports.Association = Association;
215
218
 
219
+ /**
220
+ * Decorator to provide a new API class to be used in the macros.
221
+ *
222
+ * @param sTarget The fully qualified name of the macro API
223
+ * @param isDependentBound Whether this API will be used as a dependent or not
224
+ * @class
225
+ */
216
226
  function APIClass(sTarget) {
227
+ var isDependentBound = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
217
228
  return function (constructor) {
218
229
  if (!constructor.prototype.metadata) {
219
230
  constructor.prototype.metadata = {};
@@ -224,6 +235,7 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
224
235
  }
225
236
 
226
237
  constructor.prototype.metadata.interfaces.push("sap.ui.core.IFormContent");
238
+ constructor.isDependentBound = isDependentBound;
227
239
 
228
240
  if (!constructor.prototype.renderer) {
229
241
  constructor.prototype.renderer = {
@@ -241,74 +253,198 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
241
253
  _exports.APIClass = APIClass;
242
254
 
243
255
  function UI5Class(sTarget, metadataClass, metadataDefinition) {
256
+ var useExtend = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
244
257
  return function (constructor) {
245
258
  if (!constructor.prototype.metadata) {
246
259
  constructor.prototype.metadata = {};
247
260
  }
248
261
 
249
- if (metadataDefinition !== null && metadataDefinition !== void 0 && metadataDefinition.properties) {
250
- constructor.prototype.metadata.properties = metadataDefinition.properties;
251
- }
252
-
253
- if (metadataDefinition !== null && metadataDefinition !== void 0 && metadataDefinition.events) {
254
- constructor.prototype.metadata.events = metadataDefinition.events;
262
+ if (metadataDefinition) {
263
+ Object.keys(metadataDefinition).forEach(function (key) {
264
+ constructor.prototype.metadata[key] = metadataDefinition[key];
265
+ });
255
266
  }
256
267
 
257
- describe(constructor, sTarget, constructor.prototype, metadataClass);
268
+ return describe(constructor, sTarget, constructor.prototype, metadataClass, useExtend);
258
269
  };
259
270
  }
260
271
 
261
272
  _exports.UI5Class = UI5Class;
262
273
 
263
274
  function describe(clazz, name, inObj, metadataClass) {
264
- var _inObj$metadata, _clazz$metadata;
275
+ var _inObj$metadata, _clazz$metadata, _obj$metadata;
276
+
277
+ var useExtend = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;
278
+
279
+ if (metadataClass === ControllerExtensionMetadata) {
280
+ Object.getOwnPropertyNames(inObj).forEach(function (objName) {
281
+ var descriptor = Object.getOwnPropertyDescriptor(inObj, objName);
282
+
283
+ if (descriptor && !descriptor.enumerable) {
284
+ descriptor.enumerable = true; // Log.error(`Property ${objName} from ${name} should be decorated as public`);
285
+ }
286
+ });
287
+ }
265
288
 
266
289
  var obj = {};
267
290
  obj.metadata = inObj.metadata || {};
268
291
  obj.override = inObj.override;
269
292
  obj.constructor = clazz;
270
293
  obj.metadata.baseType = Object.getPrototypeOf(clazz.prototype).getMetadata().getName();
271
- obj.renderer = inObj.renderer || clazz.renderer;
294
+ var rendererDefinition = inObj.renderer || clazz.renderer;
295
+ obj.renderer = {
296
+ apiVersion: 2
297
+ };
298
+
299
+ if (typeof rendererDefinition === "function") {
300
+ obj.renderer.render = rendererDefinition;
301
+ } else if (rendererDefinition != undefined) {
302
+ obj.renderer = rendererDefinition;
303
+ }
304
+
272
305
  obj.metadata.interfaces = ((_inObj$metadata = inObj.metadata) === null || _inObj$metadata === void 0 ? void 0 : _inObj$metadata.interfaces) || ((_clazz$metadata = clazz.metadata) === null || _clazz$metadata === void 0 ? void 0 : _clazz$metadata.interfaces);
273
- var metadata;
274
306
 
275
- if (metadataClass) {
276
- metadata = new metadataClass(name, obj);
307
+ if (useExtend) {
308
+ Object.keys(clazz.prototype).forEach(function (key) {
309
+ if (key !== "metadata") {
310
+ try {
311
+ obj[key] = clazz.prototype[key];
312
+ } catch (e) {//console.log(e);
313
+ }
314
+ }
315
+ });
316
+ }
317
+
318
+ if ((_obj$metadata = obj.metadata) !== null && _obj$metadata !== void 0 && _obj$metadata.controllerExtensions && Object.keys(obj.metadata.controllerExtensions).length > 0) {
319
+ for (var cExtName in obj.metadata.controllerExtensions) {
320
+ obj[cExtName] = obj.metadata.controllerExtensions[cExtName];
321
+ }
322
+ }
323
+
324
+ var output = clazz;
325
+
326
+ if (useExtend) {
327
+ output = clazz.extend(name, obj, metadataClass);
328
+ var _fnInit = output.prototype.init;
329
+
330
+ output.prototype.init = function () {
331
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
332
+ args[_key] = arguments[_key];
333
+ }
334
+
335
+ _fnInit && _fnInit.apply(this, args);
336
+ this.metadata = obj.metadata;
337
+
338
+ if (obj.metadata.properties) {
339
+ var aPropertyKeys = Object.keys(obj.metadata.properties); // eslint-disable-next-line @typescript-eslint/no-this-alias
340
+
341
+ var that = this;
342
+ aPropertyKeys.forEach(function (propertyKey) {
343
+ Object.defineProperty(that, propertyKey, {
344
+ configurable: true,
345
+ set: function (v) {
346
+ return that.setProperty(propertyKey, v);
347
+ },
348
+ get: function () {
349
+ return that.getProperty(propertyKey);
350
+ }
351
+ });
352
+ });
353
+ var aAggregationKeys = Object.keys(obj.metadata.aggregations);
354
+ aAggregationKeys.forEach(function (aggregationKey) {
355
+ Object.defineProperty(that, aggregationKey, {
356
+ configurable: true,
357
+ set: function (v) {
358
+ return that.setAggregation(aggregationKey, v);
359
+ },
360
+ get: function () {
361
+ return that.getAggregation(aggregationKey);
362
+ }
363
+ });
364
+ });
365
+ }
366
+ };
277
367
  } else {
278
- metadata = new ElementMetadata(name, obj);
368
+ var metadata;
369
+
370
+ if (metadataClass) {
371
+ metadata = new metadataClass(name, obj);
372
+ } else {
373
+ metadata = new ElementMetadata(name, obj);
374
+ }
375
+
376
+ clazz.getMetadata = clazz.prototype.getMetadata = function () {
377
+ return metadata;
378
+ };
379
+
380
+ if (!clazz.getMetadata().isFinal()) {
381
+ clazz.extend = function (sSCName, oSCClassInfo, fnSCMetaImpl) {
382
+ // the default constructor created by ui5 does not return the value which is problematic with TS
383
+ oSCClassInfo.constructor = function () {
384
+ for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
385
+ args[_key2] = arguments[_key2];
386
+ }
387
+
388
+ return clazz.apply(this, args);
389
+ };
390
+
391
+ var fnClass = Metadata.createClass(clazz, sSCName, oSCClassInfo, fnSCMetaImpl || metadataClass || ElementMetadata); // fnClass.prototype.constructor = function(...args: any[]) {
392
+ // return clazz.apply(this, ...args);
393
+ // };
394
+
395
+ return fnClass;
396
+ };
397
+ }
279
398
  }
280
399
 
281
- clazz.getMetadata = clazz.prototype.getMetadata = function () {
282
- return metadata;
400
+ clazz.override = function (oExtension) {
401
+ var pol = {};
402
+
403
+ pol.constructor = function () {
404
+ for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
405
+ args[_key3] = arguments[_key3];
406
+ }
407
+
408
+ return clazz.apply(this, args);
409
+ };
410
+
411
+ var oClass = Metadata.createClass(clazz, "anonymousExtension~" + uid(), pol, ControllerMetadata);
412
+ oClass.getMetadata()._staticOverride = oExtension;
413
+ oClass.getMetadata()._override = clazz.getMetadata()._override;
414
+ return oClass;
283
415
  };
284
416
 
285
417
  var fnInit = clazz.prototype.init;
286
418
 
287
- clazz.prototype.init = function () {
288
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
289
- args[_key] = arguments[_key];
419
+ output.prototype.init = function () {
420
+ for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
421
+ args[_key4] = arguments[_key4];
290
422
  }
291
423
 
292
- fnInit.apply(this, args);
293
- var aPropertyKeys = Object.keys(obj.metadata.properties); // eslint-disable-next-line @typescript-eslint/no-this-alias
294
-
295
- var that = this;
296
- aPropertyKeys.forEach(function (propertyKey) {
297
- Object.defineProperty(that, propertyKey, {
298
- configurable: true,
299
- set: function (v) {
300
- return that.setProperty(propertyKey, v);
301
- },
302
- get: function () {
303
- return that.getProperty(propertyKey);
304
- }
424
+ fnInit && fnInit.apply(this, args);
425
+
426
+ if (obj.metadata.properties) {
427
+ var aPropertyKeys = Object.keys(obj.metadata.properties); // eslint-disable-next-line @typescript-eslint/no-this-alias
428
+
429
+ var that = this;
430
+ aPropertyKeys.forEach(function (propertyKey) {
431
+ Object.defineProperty(that, propertyKey, {
432
+ configurable: true,
433
+ set: function (v) {
434
+ return that.setProperty(propertyKey, v);
435
+ },
436
+ get: function () {
437
+ return that.getProperty(propertyKey);
438
+ }
439
+ });
305
440
  });
306
- });
441
+ }
307
442
  };
308
443
 
309
- ObjectPath.set(name, clazz);
444
+ ObjectPath.set(name, output);
445
+ return output;
310
446
  }
311
447
 
312
448
  return _exports;
313
449
  }, false);
314
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNsYXNzU3VwcG9ydC50cyJdLCJuYW1lcyI6WyJlbnN1cmVNZXRhZGF0YSIsInRhcmdldCIsImhhc093blByb3BlcnR5IiwibWV0YWRhdGEiLCJkZWVwQ2xvbmUiLCJwcm9wZXJ0aWVzIiwibWFjcm9Db250ZXh0cyIsImFnZ3JlZ2F0aW9ucyIsImFzc29jaWF0aW9ucyIsIm1ldGhvZHMiLCJldmVudHMiLCJPdmVycmlkZSIsInNUYXJnZXQiLCJwcm9wZXJ0eUtleSIsIm92ZXJyaWRlIiwiY3VycmVudFRhcmdldCIsImV4dGVuc2lvbiIsIkV4dGVuc2libGUiLCJvT3ZlcnJpZGVFeGVjdXRpb24iLCJvdmVycmlkZUV4ZWN1dGlvbiIsIlB1YmxpYyIsInB1YmxpYyIsIlByaXZhdGUiLCJGaW5hbCIsImZpbmFsIiwiRXZlbnQiLCJldmVudEtleSIsIkV2ZW50SGFuZGxlciIsInByb3BlcnR5a2V5IiwiY29uc3RydWN0b3IiLCJnZXRBUEkiLCJNYWNyb0NvbnRleHQiLCJiTWV0YU1vZGVsT2JqZWN0IiwiUHJvcGVydHkiLCJ0eXBlIiwibWFjcm9Db250ZXh0IiwibWV0YU1vZGVsT2JqZWN0Iiwib1Byb3BlcnR5UGFyYW1zIiwicHJvcGVydHlEZXNjcmlwdG9yIiwid3JpdGFibGUiLCJpbml0aWFsaXplciIsInNldCIsInYiLCJzZXRQcm9wZXJ0eSIsImdldCIsImdldFByb3BlcnR5IiwiQWdncmVnYXRpb24iLCJvQWdncmVnYXRpb25EZXNjcmlwdG9yIiwiaXNEZWZhdWx0IiwiZGVmYXVsdEFnZ3JlZ2F0aW9uIiwic2V0QWdncmVnYXRpb24iLCJnZXRBZ2dyZWdhdGlvbiIsIkFzc29jaWF0aW9uIiwib0Fzc29jaWF0aW9uRGVzY3JpcHRpb24iLCJBUElDbGFzcyIsInByb3RvdHlwZSIsImludGVyZmFjZXMiLCJwdXNoIiwicmVuZGVyZXIiLCJhcGlWZXJzaW9uIiwicmVuZGVyIiwib1JtIiwib0NvbnRyb2wiLCJyZW5kZXJDb250cm9sIiwiZ2V0Q29udGVudCIsImRlc2NyaWJlIiwiRWxlbWVudE1ldGFkYXRhIiwiVUk1Q2xhc3MiLCJtZXRhZGF0YUNsYXNzIiwibWV0YWRhdGFEZWZpbml0aW9uIiwiY2xhenoiLCJuYW1lIiwiaW5PYmoiLCJvYmoiLCJiYXNlVHlwZSIsIk9iamVjdCIsImdldFByb3RvdHlwZU9mIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwiZm5Jbml0IiwiaW5pdCIsImFyZ3MiLCJhcHBseSIsImFQcm9wZXJ0eUtleXMiLCJrZXlzIiwidGhhdCIsImZvckVhY2giLCJkZWZpbmVQcm9wZXJ0eSIsImNvbmZpZ3VyYWJsZSIsIk9iamVjdFBhdGgiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7OztBQUVBLE1BQU1BLGNBQWMsR0FBRyxVQUFTQyxNQUFULEVBQXNCO0FBQzVDLFFBQUksQ0FBQ0EsTUFBTSxDQUFDQyxjQUFQLENBQXNCLFVBQXRCLENBQUwsRUFBd0M7QUFDdkNELE1BQUFBLE1BQU0sQ0FBQ0UsUUFBUCxHQUFrQkMsU0FBUyxDQUMxQkgsTUFBTSxDQUFDRSxRQUFQLElBQW1CO0FBQ2xCRSxRQUFBQSxVQUFVLEVBQUUsRUFETTtBQUVsQkMsUUFBQUEsYUFBYSxFQUFFLEVBRkc7QUFHbEJDLFFBQUFBLFlBQVksRUFBRSxFQUhJO0FBSWxCQyxRQUFBQSxZQUFZLEVBQUUsRUFKSTtBQUtsQkMsUUFBQUEsT0FBTyxFQUFFLEVBTFM7QUFNbEJDLFFBQUFBLE1BQU0sRUFBRTtBQU5VLE9BRE8sQ0FBM0I7QUFVQTs7QUFDRCxXQUFPVCxNQUFNLENBQUNFLFFBQWQ7QUFDQSxHQWREOztBQWVPLFdBQVNRLFFBQVQsQ0FBa0JDLE9BQWxCLEVBQW9DO0FBQzFDLFdBQU8sVUFBU1gsTUFBVCxFQUFzQlksV0FBdEIsRUFBMkM7QUFDakQsVUFBSSxDQUFDWixNQUFNLENBQUNhLFFBQVosRUFBc0I7QUFDckJiLFFBQUFBLE1BQU0sQ0FBQ2EsUUFBUCxHQUFrQixFQUFsQjtBQUNBOztBQUNELFVBQUlDLGFBQWEsR0FBR2QsTUFBTSxDQUFDYSxR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Q0FBQ2hELEdBQVgsQ0FBZThCLElBQWYsRUFBcUJELEtBQXJCO0FBQ0EiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE92ZXJyaWRlRXhlY3V0aW9uIH0gZnJvbSBcInNhcC91aS9jb3JlL212Y1wiO1xuaW1wb3J0IHsgT2JqZWN0UGF0aCwgZGVlcENsb25lIH0gZnJvbSBcInNhcC9iYXNlL3V0aWxcIjtcbmltcG9ydCB7ICRDb250cm9sU2V0dGluZ3MsIEVsZW1lbnRNZXRhZGF0YSwgUmVuZGVyTWFuYWdlciB9IGZyb20gXCJzYXAvdWkvY29yZVwiO1xuXG5jb25zdCBlbnN1cmVNZXRhZGF0YSA9IGZ1bmN0aW9uKHRhcmdldDogYW55KSB7XG5cdGlmICghdGFyZ2V0Lmhhc093blByb3BlcnR5KFwibWV0YWRhdGFcIikpIHtcblx0XHR0YXJnZXQubWV0YWRhdGEgPSBkZWVwQ2xvbmUoXG5cdFx0XHR0YXJnZXQubWV0YWRhdGEgfHwge1xuXHRcdFx0XHRwcm9wZXJ0aWVzOiB7fSxcblx0XHRcdFx0bWFjcm9Db250ZXh0czoge30sXG5cdFx0XHRcdGFnZ3JlZ2F0aW9uczoge30sXG5cdFx0XHRcdGFzc29jaWF0aW9uczoge30sXG5cdFx0XHRcdG1ldGhvZHM6IHt9LFxuXHRcdFx0XHRldmVudHM6IHt9XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdGFyZ2V0Lm1ldGFkYXRhO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBPdmVycmlkZShzVGFyZ2V0Pzogc3RyaW5nKSB7XG5cdHJldHVybiBmdW5jdGlvbih0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZykge1xuXHRcdGlmICghdGFyZ2V0Lm92ZXJyaWRlKSB7XG5cdFx0XHR0YXJnZXQub3ZlcnJpZGUgPSB7fTtcblx0XHR9XG5cdFx0bGV0IGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQub3ZlcnJpZGU7XG5cdFx0aWYgKHNUYXJnZXQpIHtcblx0XHRcdGlmICghY3VycmVudFRhcmdldC5leHRlbnNpb24pIHtcblx0XHRcdFx0Y3VycmVudFRhcmdldC5leHRlbnNpb24gPSB7fTtcblx0XHRcdH1cblx0XHRcdGlmICghY3VycmVudFRhcmdldC5leHRlbnNpb25bc1RhcmdldF0pIHtcblx0XHRcdFx0Y3VycmVudFRhcmdldC5leHRlbnNpb25bc1RhcmdldF0gPSB7fTtcblx0XHRcdH1cblx0XHRcdGN1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0LmV4dGVuc2lvbltzVGFyZ2V0XTtcblx0XHR9XG5cdFx0Y3VycmVudFRhcmdldFtwcm9wZXJ0eUtleV0gPSB0YXJnZXRbcHJvcGVydHlLZXldO1xuXHR9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIEV4dGVuc2libGUob092ZXJyaWRlRXhlY3V0aW9uPzogT3ZlcnJpZGVFeGVjdXRpb24pIHtcblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldID0ge307XG5cdFx0fVxuXHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldLm92ZXJyaWRlRXhlY3V0aW9uID0gb092ZXJyaWRlRXhlY3V0aW9uO1xuXHR9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIFB1YmxpYyh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZykge1xuXHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0pIHtcblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XSA9IHt9O1xuXHR9XG5cdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldLnB1YmxpYyA9IHRydWU7XG59XG5leHBvcnQgZnVuY3Rpb24gUHJpdmF0ZSh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZykge1xuXHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0pIHtcblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XSA9IHt9O1xuXHR9XG5cdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldLnB1YmxpYyA9IGZhbHNlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIEZpbmFsKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSB7XG5cdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0aWYgKCFtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XSkge1xuXHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldID0ge307XG5cdH1cblx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0uZmluYWwgPSB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRXZlbnQodGFyZ2V0OiBhbnksIGV2ZW50S2V5OiBzdHJpbmcpIHtcblx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRpZiAoIW1ldGFkYXRhLmV2ZW50c1tldmVudEtleV0pIHtcblx0XHRtZXRhZGF0YS5ldmVudHNbZXZlbnRLZXldID0ge307XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEV2ZW50SGFuZGxlcih0YXJnZXQ6IGFueSwgcHJvcGVydHlrZXk6IGFueSkge1xuXHR0YXJnZXQuY29uc3RydWN0b3JbcHJvcGVydHlrZXldID0gZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcblx0XHRjb25zdCBjdXJyZW50VGFyZ2V0ID0gdGFyZ2V0LmNvbnN0cnVjdG9yLmdldEFQSShhcmdzWzBdIGFzIFVJNUV2ZW50KTtcblx0XHRjdXJyZW50VGFyZ2V0W3Byb3BlcnR5a2V5XSguLi5hcmdzKTtcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1hY3JvQ29udGV4dChiTWV0YU1vZGVsT2JqZWN0OiBib29sZWFuID0gZmFsc2UpOiBhbnkge1xuXHRyZXR1cm4gUHJvcGVydHkoeyB0eXBlOiBcInNhcC51aS5tb2RlbC5Db250ZXh0XCIsIG1hY3JvQ29udGV4dDogdHJ1ZSwgbWV0YU1vZGVsT2JqZWN0OiBiTWV0YU1vZGVsT2JqZWN0IH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUHJvcGVydHkob1Byb3BlcnR5UGFyYW1zOiBhbnkpOiBhbnkge1xuXHRyZXR1cm4gZnVuY3Rpb24odGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKTogYW55IHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKG9Qcm9wZXJ0eVBhcmFtcz8ubWFjcm9Db250ZXh0KSB7XG5cdFx0XHRpZiAoIW1ldGFkYXRhLm1hY3JvQ29udGV4dHNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRcdG1ldGFkYXRhLm1hY3JvQ29udGV4dHNbcHJvcGVydHlLZXldID0gb1Byb3BlcnR5UGFyYW1zO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoIW1ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRtZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XSA9IG9Qcm9wZXJ0eVBhcmFtcztcblx0XHR9XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmluaXRpYWxpemVyO1xuXHRcdChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgYW55KS5zZXQgPSBmdW5jdGlvbih2OiBhbnkpIHtcblx0XHRcdHJldHVybiB0aGlzLnNldFByb3BlcnR5KHByb3BlcnR5S2V5LCB2KTtcblx0XHR9O1xuXHRcdChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgYW55KS5nZXQgPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldFByb3BlcnR5KHByb3BlcnR5S2V5KTtcblx0XHR9O1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFnZ3JlZ2F0aW9uKG9BZ2dyZWdhdGlvbkRlc2NyaXB0b3I/OiBhbnkpOiBhbnkge1xuXHRyZXR1cm4gZnVuY3Rpb24odGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKTogYW55IHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKCFtZXRhZGF0YS5hZ2dyZWdhdGlvbnNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRtZXRhZGF0YS5hZ2dyZWdhdGlvbnNbcHJvcGVydHlLZXldID0gb0FnZ3JlZ2F0aW9uRGVzY3JpcHRvcjtcblx0XHR9XG5cdFx0aWYgKG9BZ2dyZWdhdGlvbkRlc2NyaXB0b3IuaXNEZWZhdWx0KSB7XG5cdFx0XHRtZXRhZGF0YS5kZWZhdWx0QWdncmVnYXRpb24gPSBwcm9wZXJ0eUtleTtcblx0XHR9XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmluaXRpYWxpemVyO1xuXHRcdChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgYW55KS5zZXQgPSBmdW5jdGlvbih2OiBhbnkpIHtcblx0XHRcdHJldHVybiB0aGlzLnNldEFnZ3JlZ2F0aW9uKHByb3BlcnR5S2V5LCB2KTtcblx0XHR9O1xuXHRcdChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgYW55KS5nZXQgPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldEFnZ3JlZ2F0aW9uKHByb3BlcnR5S2V5KTtcblx0XHR9O1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFzc29jaWF0aW9uKG9Bc3NvY2lhdGlvbkRlc2NyaXB0aW9uPzogYW55KTogYW55IHtcblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcik6IGFueSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmICghbWV0YWRhdGEuYXNzb2NpYXRpb25zW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEuYXNzb2NpYXRpb25zW3Byb3BlcnR5S2V5XSA9IG9Bc3NvY2lhdGlvbkRlc2NyaXB0aW9uO1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cdFx0KHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLnNldCA9IGZ1bmN0aW9uKHY6IGFueSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuc2V0QWdncmVnYXRpb24ocHJvcGVydHlLZXksIHYpO1xuXHRcdH07XG5cdFx0KHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmdldCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0QWdncmVnYXRpb24ocHJvcGVydHlLZXkpO1xuXHRcdH07XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9O1xufVxudHlwZSBDb250cm9sUHJvcGVydHlOYW1lczxUPiA9IHtcblx0W0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBGdW5jdGlvbiA/IG5ldmVyIDogSztcbn1ba2V5b2YgVF07XG5leHBvcnQgdHlwZSBQcm9wZXJ0aWVzT2Y8VD4gPSBQYXJ0aWFsPFBpY2s8VCwgQ29udHJvbFByb3BlcnR5TmFtZXM8VD4+PiAmICRDb250cm9sU2V0dGluZ3M7XG5cbmV4cG9ydCBmdW5jdGlvbiBBUElDbGFzcyhzVGFyZ2V0OiBzdHJpbmcpIHtcblx0cmV0dXJuIGZ1bmN0aW9uKGNvbnN0cnVjdG9yOiBGdW5jdGlvbikge1xuXHRcdGlmICghY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhKSB7XG5cdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEgPSB7fTtcblx0XHR9XG5cblx0XHRpZiAoIWNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YS5pbnRlcmZhY2VzKSB7XG5cdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEuaW50ZXJmYWNlcyA9IFtdO1xuXHRcdH1cblx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEuaW50ZXJmYWNlcy5wdXNoKFwic2FwLnVpLmNvcmUuSUZvcm1Db250ZW50XCIpO1xuXG5cdFx0aWYgKCFjb25zdHJ1Y3Rvci5wcm90b3R5cGUucmVuZGVyZXIpIHtcblx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5yZW5kZXJlciA9IHtcblx0XHRcdFx0YXBpVmVyc2lvbjogMixcblx0XHRcdFx0cmVuZGVyOiBmdW5jdGlvbihvUm06IFJlbmRlck1hbmFnZXIsIG9Db250cm9sOiBhbnkpIHtcblx0XHRcdFx0XHRvUm0ucmVuZGVyQ29udHJvbChvQ29udHJvbC5nZXRDb250ZW50KCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGRlc2NyaWJlKGNvbnN0cnVjdG9yLCBzVGFyZ2V0LCBjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIEVsZW1lbnRNZXRhZGF0YSk7XG5cdH07XG59XG5leHBvcnQgZnVuY3Rpb24gVUk1Q2xhc3Moc1RhcmdldDogc3RyaW5nLCBtZXRhZGF0YUNsYXNzPzogYW55LCBtZXRhZGF0YURlZmluaXRpb24/OiBhbnkpIHtcblx0cmV0dXJuIGZ1bmN0aW9uKGNvbnN0cnVjdG9yOiBGdW5jdGlvbikge1xuXHRcdGlmICghY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhKSB7XG5cdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEgPSB7fTtcblx0XHR9XG5cdFx0aWYgKG1ldGFkYXRhRGVmaW5pdGlvbj8ucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhLnByb3BlcnRpZXMgPSBtZXRhZGF0YURlZmluaXRpb24ucHJvcGVydGllcztcblx0XHR9XG5cdFx0aWYgKG1ldGFkYXRhRGVmaW5pdGlvbj8uZXZlbnRzKSB7XG5cdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEuZXZlbnRzID0gbWV0YWRhdGFEZWZpbml0aW9uLmV2ZW50cztcblx0XHR9XG5cdFx0ZGVzY3JpYmUoY29uc3RydWN0b3IsIHNUYXJnZXQsIGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgbWV0YWRhdGFDbGFzcyk7XG5cdH07XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlKGNsYXp6OiBhbnksIG5hbWU6IHN0cmluZywgaW5PYmo6IGFueSwgbWV0YWRhdGFDbGFzcz86IGFueSkge1xuXHRjb25zdCBvYmo6IGFueSA9IHt9O1xuXHRvYmoubWV0YWRhdGEgPSBpbk9iai5tZXRhZGF0YSB8fCB7fTtcblx0b2JqLm92ZXJyaWRlID0gaW5PYmoub3ZlcnJpZGU7XG5cdG9iai5jb25zdHJ1Y3RvciA9IGNsYXp6O1xuXHRvYmoubWV0YWRhdGEuYmFzZVR5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY2xhenoucHJvdG90eXBlKVxuXHRcdC5nZXRNZXRhZGF0YSgpXG5cdFx0LmdldE5hbWUoKTtcblx0b2JqLnJlbmRlcmVyID0gaW5PYmoucmVuZGVyZXIgfHwgY2xhenoucmVuZGVyZXI7XG5cdG9iai5tZXRhZGF0YS5pbnRlcmZhY2VzID0gaW5PYmoubWV0YWRhdGE/LmludGVyZmFjZXMgfHwgY2xhenoubWV0YWRhdGE/LmludGVyZmFjZXM7XG5cdGxldCBtZXRhZGF0YTogYW55O1xuXHRpZiAobWV0YWRhdGFDbGFzcykge1xuXHRcdG1ldGFkYXRhID0gbmV3IG1ldGFkYXRhQ2xhc3MobmFtZSwgb2JqKTtcblx0fSBlbHNlIHtcblx0XHRtZXRhZGF0YSA9IG5ldyBFbGVtZW50TWV0YWRhdGEobmFtZSwgb2JqKTtcblx0fVxuXHRjbGF6ei5nZXRNZXRhZGF0YSA9IGNsYXp6LnByb3RvdHlwZS5nZXRNZXRhZGF0YSA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBtZXRhZGF0YTtcblx0fTtcblx0Y29uc3QgZm5Jbml0ID0gY2xhenoucHJvdG90eXBlLmluaXQ7XG5cdGNsYXp6LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcblx0XHRmbkluaXQuYXBwbHkodGhpcywgYXJncyk7XG5cdFx0Y29uc3QgYVByb3BlcnR5S2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcblx0XHRjb25zdCB0aGF0ID0gdGhpcztcblx0XHRhUHJvcGVydHlLZXlzLmZvckVhY2gocHJvcGVydHlLZXkgPT4ge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoYXQsIHByb3BlcnR5S2V5LCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0c2V0OiAodjogYW55KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoYXQuc2V0UHJvcGVydHkocHJvcGVydHlLZXksIHYpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhhdC5nZXRQcm9wZXJ0eShwcm9wZXJ0eUtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9O1xuXHRPYmplY3RQYXRoLnNldChuYW1lLCBjbGF6eik7XG59XG4iXX0=
450
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNsYXNzU3VwcG9ydC50cyJdLCJuYW1lcyI6WyJlbnN1cmVNZXRhZGF0YSIsInRhcmdldCIsIm1ldGFkYXRhIiwibWVyZ2UiLCJjb250cm9sbGVyRXh0ZW5zaW9ucyIsInByb3BlcnRpZXMiLCJtYWNyb0NvbnRleHRzIiwiYWdncmVnYXRpb25zIiwiYXNzb2NpYXRpb25zIiwibWV0aG9kcyIsImV2ZW50cyIsIk92ZXJyaWRlIiwic1RhcmdldCIsInByb3BlcnR5S2V5Iiwib3ZlcnJpZGUiLCJjdXJyZW50VGFyZ2V0IiwiZXh0ZW5zaW9uIiwiRXh0ZW5zaWJsZSIsIm9PdmVycmlkZUV4ZWN1dGlvbiIsIm92ZXJyaWRlRXhlY3V0aW9uIiwiUHVibGljIiwiZGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdWJsaWMiLCJQcml2YXRlIiwiRmluYWwiLCJmaW5hbCIsIkV2ZW50IiwiZXZlbnRLZXkiLCJFdmVudEhhbmRsZXIiLCJwcm9wZXJ0eWtleSIsImNvbnN0cnVjdG9yIiwiZ2V0QVBJIiwiTWFjcm9Db250ZXh0IiwiYk1ldGFNb2RlbE9iamVjdCIsIlByb3BlcnR5IiwidHlwZSIsIm1hY3JvQ29udGV4dCIsIm1ldGFNb2RlbE9iamVjdCIsIlVzaW5nRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uQ2xhc3MiLCJwcm9wZXJ0eURlc2NyaXB0b3IiLCJpbml0aWFsaXplciIsIm9Qcm9wZXJ0eVBhcmFtcyIsIndyaXRhYmxlIiwiQWdncmVnYXRpb24iLCJvQWdncmVnYXRpb25EZXNjcmlwdG9yIiwiaXNEZWZhdWx0IiwiZGVmYXVsdEFnZ3JlZ2F0aW9uIiwiQXNzb2NpYXRpb24iLCJvQXNzb2NpYXRpb25EZXNjcmlwdGlvbiIsIkFQSUNsYXNzIiwiaXNEZXBlbmRlbnRCb3VuZCIsInByb3RvdHlwZSIsImludGVyZmFjZXMiLCJwdXNoIiwicmVuZGVyZXIiLCJhcGlWZXJzaW9uIiwicmVuZGVyIiwib1JtIiwib0NvbnRyb2wiLCJyZW5kZXJDb250cm9sIiwiZ2V0Q29udGVudCIsImRlc2NyaWJlIiwiRWxlbWVudE1ldGFkYXRhIiwiVUk1Q2xhc3MiLCJtZXRhZGF0YUNsYXNzIiwibWV0YWRhdGFEZWZpbml0aW9uIiwidXNlRXh0ZW5kIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJjbGF6eiIsIm5hbWUiLCJpbk9iaiIsIkNvbnRyb2xsZXJFeHRlbnNpb25NZXRhZGF0YSIsImdldE93blByb3BlcnR5TmFtZXMiLCJvYmpOYW1lIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwib2JqIiwiYmFzZVR5cGUiLCJnZXRQcm90b3R5cGVPZiIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsInJlbmRlcmVyRGVmaW5pdGlvbiIsInVuZGVmaW5lZCIsImUiLCJsZW5ndGgiLCJjRXh0TmFtZSIsIm91dHB1dCIsImV4dGVuZCIsImZuSW5pdCIsImluaXQiLCJhcmdzIiwiYXBwbHkiLCJhUHJvcGVydHlLZXlzIiwidGhhdCIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwic2V0IiwidiIsInNldFByb3BlcnR5IiwiZ2V0IiwiZ2V0UHJvcGVydHkiLCJhQWdncmVnYXRpb25LZXlzIiwiYWdncmVnYXRpb25LZXkiLCJzZXRBZ2dyZWdhdGlvbiIsImdldEFnZ3JlZ2F0aW9uIiwiaXNGaW5hbCIsInNTQ05hbWUiLCJvU0NDbGFzc0luZm8iLCJmblNDTWV0YUltcGwiLCJmbkNsYXNzIiwiTWV0YWRhdGEiLCJjcmVhdGVDbGFzcyIsIm9FeHRlbnNpb24iLCJwb2wiLCJvQ2xhc3MiLCJ1aWQiLCJDb250cm9sbGVyTWV0YWRhdGEiLCJfc3RhdGljT3ZlcnJpZGUiLCJfb3ZlcnJpZGUiLCJPYmplY3RQYXRoIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7QUFTQSxNQUFNQSxjQUFjLEdBQUcsVUFBU0MsTUFBVCxFQUFzQjtBQUM1Q0EsSUFBQUEsTUFBTSxDQUFDQyxRQUFQLEdBQWtCQyxLQUFLLENBQ3RCO0FBQ0NDLE1BQUFBLG9CQUFvQixFQUFFLEVBRHZC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Q0FBYUcsVUFBekIsQ0FBdEIsQ0FENEIsQ0FFNUI7O0FBQ0EsWUFBTTRGLElBQUksR0FBRyxJQUFiO0FBQ0FELFFBQUFBLGFBQWEsQ0FBQ3pCLE9BQWQsQ0FBc0IsVUFBQTFELFdBQVcsRUFBSTtBQUNwQ3dELFVBQUFBLE1BQU0sQ0FBQzZCLGNBQVAsQ0FBc0JELElBQXRCLEVBQTRCcEYsV0FBNUIsRUFBeUM7QUFDeENzRixZQUFBQSxZQUFZLEVBQUUsSUFEMEI7QUFFeENDLFlBQUFBLEdBQUcsRUFBRSxVQUFDQyxDQUFELEVBQVk7QUFDaEIscUJBQU9KLElBQUksQ0FBQ0ssV0FBTCxDQUFpQnpGLFdBQWpCLEVBQThCd0YsQ0FBOUIsQ0FBUDtBQUNBLGFBSnVDO0FBS3hDRSxZQUFBQSxHQUFHLEVBQUUsWUFBTTtBQUNWLHFCQUFPTixJQUFJLENBQUNPLFdBQUwsQ0FBaUIzRixXQUFqQixDQUFQO0FBQ0E7QUFQdUMsV0FBekM7QUFTQSxTQVZEO0FBV0E7QUFDRCxLQWxCRDs7QUFtQkE4RyxJQUFBQSxVQUFVLENBQUN2QixHQUFYLENBQWUxQixJQUFmLEVBQXFCZ0IsTUFBckI7QUFDQSxXQUFPQSxNQUFQO0FBQ0EiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgRWxlbWVudE1ldGFkYXRhIGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50TWV0YWRhdGFcIjtcbmltcG9ydCBSZW5kZXJNYW5hZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9SZW5kZXJNYW5hZ2VyXCI7XG5pbXBvcnQgTWV0YWRhdGEgZnJvbSBcInNhcC91aS9iYXNlL01ldGFkYXRhXCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbk1ldGFkYXRhIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9Db250cm9sbGVyRXh0ZW5zaW9uTWV0YWRhdGFcIjtcbmltcG9ydCBDb250cm9sbGVyTWV0YWRhdGEgZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyTWV0YWRhdGFcIjtcbmltcG9ydCB1aWQgZnJvbSBcInNhcC9iYXNlL3V0aWwvdWlkXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcblxuY29uc3QgZW5zdXJlTWV0YWRhdGEgPSBmdW5jdGlvbih0YXJnZXQ6IGFueSkge1xuXHR0YXJnZXQubWV0YWRhdGEgPSBtZXJnZShcblx0XHR7XG5cdFx0XHRjb250cm9sbGVyRXh0ZW5zaW9uczoge30sXG5cdFx0XHRwcm9wZXJ0aWVzOiB7fSxcblx0XHRcdG1hY3JvQ29udGV4dHM6IHt9LFxuXHRcdFx0YWdncmVnYXRpb25zOiB7fSxcblx0XHRcdGFzc29jaWF0aW9uczoge30sXG5cdFx0XHRtZXRob2RzOiB7fSxcblx0XHRcdGV2ZW50czoge31cblx0XHR9LFxuXHRcdHRhcmdldC5tZXRhZGF0YSB8fCB7fVxuXHQpO1xuXHRyZXR1cm4gdGFyZ2V0Lm1ldGFkYXRhO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBPdmVycmlkZShzVGFyZ2V0Pzogc3RyaW5nKSB7XG5cdHJldHVybiBmdW5jdGlvbih0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZykge1xuXHRcdGlmICghdGFyZ2V0Lm92ZXJyaWRlKSB7XG5cdFx0XHR0YXJnZXQub3ZlcnJpZGUgPSB7fTtcblx0XHR9XG5cdFx0bGV0IGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQub3ZlcnJpZGU7XG5cdFx0aWYgKHNUYXJnZXQpIHtcblx0XHRcdGlmICghY3VycmVudFRhcmdldC5leHRlbnNpb24pIHtcblx0XHRcdFx0Y3VycmVudFRhcmdldC5leHRlbnNpb24gPSB7fTtcblx0XHRcdH1cblx0XHRcdGlmICghY3VycmVudFRhcmdldC5leHRlbnNpb25bc1RhcmdldF0pIHtcblx0XHRcdFx0Y3VycmVudFRhcmdldC5leHRlbnNpb25bc1RhcmdldF0gPSB7fTtcblx0XHRcdH1cblx0XHRcdGN1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0LmV4dGVuc2lvbltzVGFyZ2V0XTtcblx0XHR9XG5cdFx0Y3VycmVudFRhcmdldFtwcm9wZXJ0eUtleV0gPSB0YXJnZXRbcHJvcGVydHlLZXldO1xuXHR9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIEV4dGVuc2libGUob092ZXJyaWRlRXhlY3V0aW9uPzogT3ZlcnJpZGVFeGVjdXRpb24pIHtcblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldID0ge307XG5cdFx0fVxuXHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldLm92ZXJyaWRlRXhlY3V0aW9uID0gb092ZXJyaWRlRXhlY3V0aW9uO1xuXHR9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIFB1YmxpYyh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZywgZGVzY3JpcHRvcjogYW55KTogYW55IHtcblx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuXHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldKSB7XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0gPSB7fTtcblx0fVxuXHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XS5wdWJsaWMgPSB0cnVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIFByaXZhdGUodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IGFueSkge1xuXHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0pIHtcblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XSA9IHt9O1xuXHR9XG5cdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldLnB1YmxpYyA9IGZhbHNlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIEZpbmFsKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBkZXNjcmlwdG9yOiBhbnkpIHtcblx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuXHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldKSB7XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0gPSB7fTtcblx0fVxuXHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XS5maW5hbCA9IHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFdmVudCh0YXJnZXQ6IGFueSwgZXZlbnRLZXk6IHN0cmluZykge1xuXHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdGlmICghbWV0YWRhdGEuZXZlbnRzW2V2ZW50S2V5XSkge1xuXHRcdG1ldGFkYXRhLmV2ZW50c1tldmVudEtleV0gPSB7fTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRIYW5kbGVyKHRhcmdldDogYW55LCBwcm9wZXJ0eWtleTogYW55KSB7XG5cdHRhcmdldC5jb25zdHJ1Y3Rvcltwcm9wZXJ0eWtleV0gPSBmdW5jdGlvbiguLi5hcmdzOiBhbnlbXSkge1xuXHRcdGNvbnN0IGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQuY29uc3RydWN0b3IuZ2V0QVBJKGFyZ3NbMF0gYXMgVUk1RXZlbnQpO1xuXHRcdGN1cnJlbnRUYXJnZXRbcHJvcGVydHlrZXldKC4uLmFyZ3MpO1xuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTWFjcm9Db250ZXh0KGJNZXRhTW9kZWxPYmplY3Q6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XG5cdHJldHVybiBQcm9wZXJ0eSh7IHR5cGU6IFwic2FwLnVpLm1vZGVsLkNvbnRleHRcIiwgbWFjcm9Db250ZXh0OiB0cnVlLCBtZXRhTW9kZWxPYmplY3Q6IGJNZXRhTW9kZWxPYmplY3QgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBVc2luZ0V4dGVuc2lvbihleHRlbnNpb25DbGFzczogYW55KTogYW55IHtcblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcik6IGFueSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cdFx0bWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnNbcHJvcGVydHlLZXldID0gZXh0ZW5zaW9uQ2xhc3M7XG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBQcm9wZXJ0eShvUHJvcGVydHlQYXJhbXM6IGFueSk6IGFueSB7XG5cdHJldHVybiBmdW5jdGlvbih0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpOiBhbnkge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAob1Byb3BlcnR5UGFyYW1zPy5tYWNyb0NvbnRleHQpIHtcblx0XHRcdGlmICghbWV0YWRhdGEubWFjcm9Db250ZXh0c1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdFx0bWV0YWRhdGEubWFjcm9Db250ZXh0c1twcm9wZXJ0eUtleV0gPSBvUHJvcGVydHlQYXJhbXM7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghbWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlLZXldID0gb1Byb3BlcnR5UGFyYW1zO1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cdFx0Ly8gKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLnNldCA9IGZ1bmN0aW9uKHY6IGFueSkge1xuXHRcdC8vIFx0cmV0dXJuIHRoaXMuc2V0UHJvcGVydHkocHJvcGVydHlLZXksIHYpO1xuXHRcdC8vIH07XG5cdFx0Ly8gKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmdldCA9IGZ1bmN0aW9uKCkge1xuXHRcdC8vIFx0cmV0dXJuIHRoaXMuZ2V0UHJvcGVydHkocHJvcGVydHlLZXkpO1xuXHRcdC8vIH07XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQWdncmVnYXRpb24ob0FnZ3JlZ2F0aW9uRGVzY3JpcHRvcj86IGFueSk6IGFueSB7XG5cdHJldHVybiBmdW5jdGlvbih0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpOiBhbnkge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLmFnZ3JlZ2F0aW9uc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLmFnZ3JlZ2F0aW9uc1twcm9wZXJ0eUtleV0gPSBvQWdncmVnYXRpb25EZXNjcmlwdG9yO1xuXHRcdH1cblx0XHRpZiAob0FnZ3JlZ2F0aW9uRGVzY3JpcHRvci5pc0RlZmF1bHQpIHtcblx0XHRcdG1ldGFkYXRhLmRlZmF1bHRBZ2dyZWdhdGlvbiA9IHByb3BlcnR5S2V5O1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cdFx0Ly8gKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLnNldCA9IGZ1bmN0aW9uKHY6IGFueSkge1xuXHRcdC8vIFx0cmV0dXJuIHRoaXMuc2V0QWdncmVnYXRpb24ocHJvcGVydHlLZXksIHYpO1xuXHRcdC8vIH07XG5cdFx0Ly8gKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmdldCA9IGZ1bmN0aW9uKCkge1xuXHRcdC8vIFx0cmV0dXJuIHRoaXMuZ2V0QWdncmVnYXRpb24ocHJvcGVydHlLZXkpO1xuXHRcdC8vIH07XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQXNzb2NpYXRpb24ob0Fzc29jaWF0aW9uRGVzY3JpcHRpb24/OiBhbnkpOiBhbnkge1xuXHRyZXR1cm4gZnVuY3Rpb24odGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKTogYW55IHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKCFtZXRhZGF0YS5hc3NvY2lhdGlvbnNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRtZXRhZGF0YS5hc3NvY2lhdGlvbnNbcHJvcGVydHlLZXldID0gb0Fzc29jaWF0aW9uRGVzY3JpcHRpb247XG5cdFx0fVxuXHRcdGRlbGV0ZSBwcm9wZXJ0eURlc2NyaXB0b3Iud3JpdGFibGU7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgYW55KS5pbml0aWFsaXplcjtcblx0XHQvLyAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuc2V0ID0gZnVuY3Rpb24odjogYW55KSB7XG5cdFx0Ly8gXHRyZXR1cm4gdGhpcy5zZXRBZ2dyZWdhdGlvbihwcm9wZXJ0eUtleSwgdik7XG5cdFx0Ly8gfTtcblx0XHQvLyAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuZ2V0ID0gZnVuY3Rpb24oKSB7XG5cdFx0Ly8gXHRyZXR1cm4gdGhpcy5nZXRBZ2dyZWdhdGlvbihwcm9wZXJ0eUtleSk7XG5cdFx0Ly8gfTtcblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH07XG59XG50eXBlIENvbnRyb2xQcm9wZXJ0eU5hbWVzPFQ+ID0ge1xuXHRbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIEZ1bmN0aW9uID8gbmV2ZXIgOiBLO1xufVtrZXlvZiBUXTtcbmV4cG9ydCB0eXBlIFByb3BlcnRpZXNPZjxUPiA9IFBhcnRpYWw8UGljazxULCBDb250cm9sUHJvcGVydHlOYW1lczxUPj4+O1xuXG4vKipcbiAqIERlY29yYXRvciB0byBwcm92aWRlIGEgbmV3IEFQSSBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBtYWNyb3MuXG4gKlxuICogQHBhcmFtIHNUYXJnZXQgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBtYWNybyBBUElcbiAqIEBwYXJhbSBpc0RlcGVuZGVudEJvdW5kIFdoZXRoZXIgdGhpcyBBUEkgd2lsbCBiZSB1c2VkIGFzIGEgZGVwZW5kZW50IG9yIG5vdFxuICogQGNsYXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBBUElDbGFzcyhzVGFyZ2V0OiBzdHJpbmcsIGlzRGVwZW5kZW50Qm91bmQgPSBmYWxzZSkge1xuXHRyZXR1cm4gZnVuY3Rpb24oY29uc3RydWN0b3I6IEZ1bmN0aW9uKSB7XG5cdFx0aWYgKCFjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEpIHtcblx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YSA9IHt9O1xuXHRcdH1cblxuXHRcdGlmICghY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhLmludGVyZmFjZXMpIHtcblx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YS5pbnRlcmZhY2VzID0gW107XG5cdFx0fVxuXHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YS5pbnRlcmZhY2VzLnB1c2goXCJzYXAudWkuY29yZS5JRm9ybUNvbnRlbnRcIik7XG5cdFx0KGNvbnN0cnVjdG9yIGFzIGFueSkuaXNEZXBlbmRlbnRCb3VuZCA9IGlzRGVwZW5kZW50Qm91bmQ7XG5cdFx0aWYgKCFjb25zdHJ1Y3Rvci5wcm90b3R5cGUucmVuZGVyZXIpIHtcblx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5yZW5kZXJlciA9IHtcblx0XHRcdFx0YXBpVmVyc2lvbjogMixcblx0XHRcdFx0cmVuZGVyOiBmdW5jdGlvbihvUm06IFJlbmRlck1hbmFnZXIsIG9Db250cm9sOiBhbnkpIHtcblx0XHRcdFx0XHRvUm0ucmVuZGVyQ29udHJvbChvQ29udHJvbC5nZXRDb250ZW50KCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGRlc2NyaWJlKGNvbnN0cnVjdG9yLCBzVGFyZ2V0LCBjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIEVsZW1lbnRNZXRhZGF0YSk7XG5cdH07XG59XG5leHBvcnQgZnVuY3Rpb24gVUk1Q2xhc3Moc1RhcmdldDogc3RyaW5nLCBtZXRhZGF0YUNsYXNzPzogYW55LCBtZXRhZGF0YURlZmluaXRpb24/OiBhbnksIHVzZUV4dGVuZDogYm9vbGVhbiA9IHRydWUpIHtcblx0cmV0dXJuIGZ1bmN0aW9uKGNvbnN0cnVjdG9yOiBGdW5jdGlvbikge1xuXHRcdGlmICghY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhKSB7XG5cdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEgPSB7fTtcblx0XHR9XG5cdFx0aWYgKG1ldGFkYXRhRGVmaW5pdGlvbikge1xuXHRcdFx0T2JqZWN0LmtleXMobWV0YWRhdGFEZWZpbml0aW9uKS5mb3JFYWNoKGtleSA9PiB7XG5cdFx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldID0gbWV0YWRhdGFEZWZpbml0aW9uW2tleV07XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGRlc2NyaWJlKGNvbnN0cnVjdG9yLCBzVGFyZ2V0LCBjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIG1ldGFkYXRhQ2xhc3MsIHVzZUV4dGVuZCk7XG5cdH07XG59XG5mdW5jdGlvbiBkZXNjcmliZShjbGF6ejogYW55LCBuYW1lOiBzdHJpbmcsIGluT2JqOiBhbnksIG1ldGFkYXRhQ2xhc3M/OiBhbnksIHVzZUV4dGVuZDogYm9vbGVhbiA9IHRydWUpIHtcblx0aWYgKG1ldGFkYXRhQ2xhc3MgPT09IENvbnRyb2xsZXJFeHRlbnNpb25NZXRhZGF0YSkge1xuXHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluT2JqKS5mb3JFYWNoKG9iak5hbWUgPT4ge1xuXHRcdFx0Y29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaW5PYmosIG9iak5hbWUpO1xuXHRcdFx0aWYgKGRlc2NyaXB0b3IgJiYgIWRlc2NyaXB0b3IuZW51bWVyYWJsZSkge1xuXHRcdFx0XHRkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuXHRcdFx0XHQvL1x0XHRMb2cuZXJyb3IoYFByb3BlcnR5ICR7b2JqTmFtZX0gZnJvbSAke25hbWV9IHNob3VsZCBiZSBkZWNvcmF0ZWQgYXMgcHVibGljYCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0Y29uc3Qgb2JqOiBhbnkgPSB7fTtcblx0b2JqLm1ldGFkYXRhID0gaW5PYmoubWV0YWRhdGEgfHwge307XG5cdG9iai5vdmVycmlkZSA9IGluT2JqLm92ZXJyaWRlO1xuXHRvYmouY29uc3RydWN0b3IgPSBjbGF6ejtcblx0b2JqLm1ldGFkYXRhLmJhc2VUeXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGNsYXp6LnByb3RvdHlwZSlcblx0XHQuZ2V0TWV0YWRhdGEoKVxuXHRcdC5nZXROYW1lKCk7XG5cblx0Y29uc3QgcmVuZGVyZXJEZWZpbml0aW9uID0gaW5PYmoucmVuZGVyZXIgfHwgY2xhenoucmVuZGVyZXI7XG5cdG9iai5yZW5kZXJlciA9IHsgYXBpVmVyc2lvbjogMiB9O1xuXHRpZiAodHlwZW9mIHJlbmRlcmVyRGVmaW5pdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0b2JqLnJlbmRlcmVyLnJlbmRlciA9IHJlbmRlcmVyRGVmaW5pdGlvbjtcblx0fSBlbHNlIGlmIChyZW5kZXJlckRlZmluaXRpb24gIT0gdW5kZWZpbmVkKSB7XG5cdFx0b2JqLnJlbmRlcmVyID0gcmVuZGVyZXJEZWZpbml0aW9uO1xuXHR9XG5cdG9iai5tZXRhZGF0YS5pbnRlcmZhY2VzID0gaW5PYmoubWV0YWRhdGE/LmludGVyZmFjZXMgfHwgY2xhenoubWV0YWRhdGE/LmludGVyZmFjZXM7XG5cdGlmICh1c2VFeHRlbmQpIHtcblx0XHRPYmplY3Qua2V5cyhjbGF6ei5wcm90b3R5cGUpLmZvckVhY2goa2V5ID0+IHtcblx0XHRcdGlmIChrZXkgIT09IFwibWV0YWRhdGFcIikge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdG9ialtrZXldID0gY2xhenoucHJvdG90eXBlW2tleV07XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHQvL2NvbnNvbGUubG9nKGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0aWYgKG9iai5tZXRhZGF0YT8uY29udHJvbGxlckV4dGVuc2lvbnMgJiYgT2JqZWN0LmtleXMob2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zKS5sZW5ndGggPiAwKSB7XG5cdFx0Zm9yIChjb25zdCBjRXh0TmFtZSBpbiBvYmoubWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnMpIHtcblx0XHRcdG9ialtjRXh0TmFtZV0gPSBvYmoubWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnNbY0V4dE5hbWVdO1xuXHRcdH1cblx0fVxuXHRsZXQgb3V0cHV0ID0gY2xheno7XG5cdGlmICh1c2VFeHRlbmQpIHtcblx0XHRvdXRwdXQgPSBjbGF6ei5leHRlbmQobmFtZSwgb2JqLCBtZXRhZGF0YUNsYXNzKTtcblx0XHRjb25zdCBmbkluaXQgPSBvdXRwdXQucHJvdG90eXBlLmluaXQ7XG5cdFx0b3V0cHV0LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcblx0XHRcdGZuSW5pdCAmJiBmbkluaXQuYXBwbHkodGhpcywgYXJncyk7XG5cdFx0XHR0aGlzLm1ldGFkYXRhID0gb2JqLm1ldGFkYXRhO1xuXG5cdFx0XHRpZiAob2JqLm1ldGFkYXRhLnByb3BlcnRpZXMpIHtcblx0XHRcdFx0Y29uc3QgYVByb3BlcnR5S2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKTtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG5cdFx0XHRcdGNvbnN0IHRoYXQgPSB0aGlzO1xuXHRcdFx0XHRhUHJvcGVydHlLZXlzLmZvckVhY2gocHJvcGVydHlLZXkgPT4ge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGF0LCBwcm9wZXJ0eUtleSwge1xuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2V0OiAodjogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGF0LnNldFByb3BlcnR5KHByb3BlcnR5S2V5LCB2KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoYXQuZ2V0UHJvcGVydHkocHJvcGVydHlLZXkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0Y29uc3QgYUFnZ3JlZ2F0aW9uS2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5hZ2dyZWdhdGlvbnMpO1xuXHRcdFx0XHRhQWdncmVnYXRpb25LZXlzLmZvckVhY2goYWdncmVnYXRpb25LZXkgPT4ge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGF0LCBhZ2dyZWdhdGlvbktleSwge1xuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2V0OiAodjogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGF0LnNldEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uS2V5LCB2KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoYXQuZ2V0QWdncmVnYXRpb24oYWdncmVnYXRpb25LZXkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGxldCBtZXRhZGF0YTogYW55O1xuXHRcdGlmIChtZXRhZGF0YUNsYXNzKSB7XG5cdFx0XHRtZXRhZGF0YSA9IG5ldyBtZXRhZGF0YUNsYXNzKG5hbWUsIG9iaik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1ldGFkYXRhID0gbmV3IEVsZW1lbnRNZXRhZGF0YShuYW1lLCBvYmopO1xuXHRcdH1cblx0XHRjbGF6ei5nZXRNZXRhZGF0YSA9IGNsYXp6LnByb3RvdHlwZS5nZXRNZXRhZGF0YSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIG1ldGFkYXRhO1xuXHRcdH07XG5cdFx0aWYgKCFjbGF6ei5nZXRNZXRhZGF0YSgpLmlzRmluYWwoKSkge1xuXHRcdFx0Y2xhenouZXh0ZW5kID0gZnVuY3Rpb24oc1NDTmFtZTogc3RyaW5nLCBvU0NDbGFzc0luZm86IGFueSwgZm5TQ01ldGFJbXBsOiBGdW5jdGlvbikge1xuXHRcdFx0XHQvLyB0aGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBjcmVhdGVkIGJ5IHVpNSBkb2VzIG5vdCByZXR1cm4gdGhlIHZhbHVlIHdoaWNoIGlzIHByb2JsZW1hdGljIHdpdGggVFNcblx0XHRcdFx0b1NDQ2xhc3NJbmZvLmNvbnN0cnVjdG9yID0gZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcblx0XHRcdFx0XHRyZXR1cm4gY2xhenouYXBwbHkodGhpcywgYXJncyk7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Y29uc3QgZm5DbGFzcyA9IChNZXRhZGF0YSBhcyBhbnkpLmNyZWF0ZUNsYXNzKFxuXHRcdFx0XHRcdGNsYXp6LFxuXHRcdFx0XHRcdHNTQ05hbWUsXG5cdFx0XHRcdFx0b1NDQ2xhc3NJbmZvLFxuXHRcdFx0XHRcdGZuU0NNZXRhSW1wbCB8fCBtZXRhZGF0YUNsYXNzIHx8IEVsZW1lbnRNZXRhZGF0YVxuXHRcdFx0XHQpO1xuXHRcdFx0XHQvLyBmbkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGZ1bmN0aW9uKC4uLmFyZ3M6IGFueVtdKSB7XG5cdFx0XHRcdC8vIFx0cmV0dXJuIGNsYXp6LmFwcGx5KHRoaXMsIC4uLmFyZ3MpO1xuXHRcdFx0XHQvLyB9O1xuXHRcdFx0XHRyZXR1cm4gZm5DbGFzcztcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cdGNsYXp6Lm92ZXJyaWRlID0gZnVuY3Rpb24ob0V4dGVuc2lvbjogYW55KSB7XG5cdFx0Y29uc3QgcG9sID0ge307XG5cdFx0KHBvbCBhcyBhbnkpLmNvbnN0cnVjdG9yID0gZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcblx0XHRcdHJldHVybiBjbGF6ei5hcHBseSh0aGlzLCBhcmdzIGFzIGFueSk7XG5cdFx0fTtcblx0XHRjb25zdCBvQ2xhc3MgPSAoTWV0YWRhdGEgYXMgYW55KS5jcmVhdGVDbGFzcyhjbGF6eiwgXCJhbm9ueW1vdXNFeHRlbnNpb25+XCIgKyB1aWQoKSwgcG9sLCBDb250cm9sbGVyTWV0YWRhdGEpO1xuXHRcdG9DbGFzcy5nZXRNZXRhZGF0YSgpLl9zdGF0aWNPdmVycmlkZSA9IG9FeHRlbnNpb247XG5cdFx0b0NsYXNzLmdldE1ldGFkYXRhKCkuX292ZXJyaWRlID0gKGNsYXp6LmdldE1ldGFkYXRhKCkgYXMgYW55KS5fb3ZlcnJpZGU7XG5cdFx0cmV0dXJuIG9DbGFzcztcblx0fTtcblxuXHRjb25zdCBmbkluaXQgPSBjbGF6ei5wcm90b3R5cGUuaW5pdDtcblx0b3V0cHV0LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcblx0XHRmbkluaXQgJiYgZm5Jbml0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdGlmIChvYmoubWV0YWRhdGEucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgYVByb3BlcnR5S2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKTtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuXHRcdFx0Y29uc3QgdGhhdCA9IHRoaXM7XG5cdFx0XHRhUHJvcGVydHlLZXlzLmZvckVhY2gocHJvcGVydHlLZXkgPT4ge1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhhdCwgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0c2V0OiAodjogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhhdC5zZXRQcm9wZXJ0eShwcm9wZXJ0eUtleSwgdik7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGF0LmdldFByb3BlcnR5KHByb3BlcnR5S2V5KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXHRPYmplY3RQYXRoLnNldChuYW1lLCBvdXRwdXQpO1xuXHRyZXR1cm4gb3V0cHV0O1xufVxuIl19