@sapui5/sap.fe.core 1.102.3 → 1.105.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 (359) hide show
  1. package/package.json +6 -6
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +120 -0
  4. package/src/sap/fe/core/ActionRuntime.ts +108 -0
  5. package/src/sap/fe/core/AppComponent.js +81 -35
  6. package/src/sap/fe/core/AppComponent.ts +68 -44
  7. package/src/sap/fe/core/AppStateHandler.js +82 -70
  8. package/src/sap/fe/core/AppStateHandler.ts +32 -37
  9. package/src/sap/fe/core/BaseController.js +12 -10
  10. package/src/sap/fe/core/BaseController.ts +15 -13
  11. package/src/sap/fe/core/CommonUtils.js +291 -218
  12. package/src/sap/fe/core/CommonUtils.ts +315 -251
  13. package/src/sap/fe/core/ExtensionAPI.js +25 -28
  14. package/src/sap/fe/core/ExtensionAPI.ts +36 -38
  15. package/src/sap/fe/core/PageController.js +5 -5
  16. package/src/sap/fe/core/PageController.ts +4 -5
  17. package/src/sap/fe/core/TemplateComponent.js +21 -10
  18. package/src/sap/fe/core/TemplateComponent.ts +9 -6
  19. package/src/sap/fe/core/TemplateModel.js +2 -2
  20. package/src/sap/fe/core/TemplateModel.ts +1 -1
  21. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +11 -3
  22. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +8 -2
  23. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +197 -43
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +164 -24
  25. package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.js +14 -0
  26. package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.ts +5 -0
  27. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +609 -230
  28. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +275 -128
  29. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +30 -30
  30. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +32 -29
  31. package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
  32. package/src/sap/fe/core/controllerextensions/EditFlow.js +761 -700
  33. package/src/sap/fe/core/controllerextensions/EditFlow.ts +478 -514
  34. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +10 -10
  35. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
  36. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +104 -75
  37. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +71 -79
  38. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +68 -68
  39. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +76 -76
  40. package/src/sap/fe/core/controllerextensions/InternalRouting.js +162 -102
  41. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +177 -121
  42. package/src/sap/fe/core/controllerextensions/KPIManagement.js +67 -69
  43. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
  44. package/src/sap/fe/core/controllerextensions/MassEdit.js +10 -10
  45. package/src/sap/fe/core/controllerextensions/MassEdit.ts +20 -27
  46. package/src/sap/fe/core/controllerextensions/MessageHandler.js +21 -13
  47. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -14
  48. package/src/sap/fe/core/controllerextensions/PageReady.js +98 -26
  49. package/src/sap/fe/core/controllerextensions/PageReady.ts +98 -34
  50. package/src/sap/fe/core/controllerextensions/Paginator.js +31 -32
  51. package/src/sap/fe/core/controllerextensions/Paginator.ts +33 -34
  52. package/src/sap/fe/core/controllerextensions/Placeholder.js +5 -7
  53. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  54. package/src/sap/fe/core/controllerextensions/Routing.js +11 -12
  55. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  56. package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
  57. package/src/sap/fe/core/controllerextensions/Share.js +171 -140
  58. package/src/sap/fe/core/controllerextensions/Share.ts +117 -118
  59. package/src/sap/fe/core/controllerextensions/SideEffects.js +47 -51
  60. package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
  61. package/src/sap/fe/core/controllerextensions/ViewState.js +201 -132
  62. package/src/sap/fe/core/controllerextensions/ViewState.ts +141 -148
  63. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
  64. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
  65. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +13 -12
  66. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +17 -20
  67. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +13 -12
  68. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +15 -15
  69. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +57 -18
  70. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +60 -28
  71. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +29 -21
  72. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1424 -940
  73. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +799 -836
  74. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +410 -377
  75. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +275 -358
  76. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +309 -0
  77. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +320 -0
  78. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +752 -579
  79. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +631 -599
  80. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +92 -74
  81. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +49 -52
  82. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +78 -41
  83. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +110 -84
  84. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +69 -81
  85. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +64 -73
  86. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +18 -2
  87. package/src/sap/fe/core/controls/ActionParameterDialogFieldValueHelp.fragment.xml +35 -0
  88. package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +25 -24
  89. package/src/sap/fe/core/controls/Any.js +9 -5
  90. package/src/sap/fe/core/controls/Any.ts +10 -4
  91. package/src/sap/fe/core/controls/CommandExecution.js +12 -26
  92. package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
  93. package/src/sap/fe/core/controls/ConditionalWrapper.js +3 -3
  94. package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
  95. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +26 -26
  96. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
  97. package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -3
  98. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
  99. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
  100. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
  101. package/src/sap/fe/core/controls/FieldWrapper.js +3 -3
  102. package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
  103. package/src/sap/fe/core/controls/FileWrapper.js +9 -4
  104. package/src/sap/fe/core/controls/FileWrapper.ts +16 -12
  105. package/src/sap/fe/core/controls/FilterBar.js +7 -3
  106. package/src/sap/fe/core/controls/FilterBar.ts +13 -9
  107. package/src/sap/fe/core/controls/FormElementWrapper.js +2 -2
  108. package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
  109. package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
  110. package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
  111. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -1
  112. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +44 -19
  113. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +2 -2
  114. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +17 -13
  115. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
  116. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +4 -4
  117. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
  118. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +49 -49
  119. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +54 -54
  120. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
  121. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
  122. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
  123. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
  124. package/src/sap/fe/core/converters/ConverterContext.js +48 -34
  125. package/src/sap/fe/core/converters/ConverterContext.ts +81 -67
  126. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  127. package/src/sap/fe/core/converters/ManifestSettings.ts +18 -15
  128. package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
  129. package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
  130. package/src/sap/fe/core/converters/MetaModelConverter.js +74 -40
  131. package/src/sap/fe/core/converters/MetaModelConverter.ts +176 -140
  132. package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
  133. package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
  134. package/src/sap/fe/core/converters/annotations/DataField.js +58 -35
  135. package/src/sap/fe/core/converters/annotations/DataField.ts +102 -76
  136. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1956 -1494
  137. package/src/sap/fe/core/converters/controls/Common/Action.js +78 -51
  138. package/src/sap/fe/core/converters/controls/Common/Action.ts +87 -52
  139. package/src/sap/fe/core/converters/controls/Common/Chart.js +22 -16
  140. package/src/sap/fe/core/converters/controls/Common/Chart.ts +42 -43
  141. package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
  142. package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
  143. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +65 -29
  144. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +93 -62
  145. package/src/sap/fe/core/converters/controls/Common/Form.js +31 -31
  146. package/src/sap/fe/core/converters/controls/Common/Form.ts +46 -57
  147. package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
  148. package/src/sap/fe/core/converters/controls/Common/KPI.ts +49 -52
  149. package/src/sap/fe/core/converters/controls/Common/Table.js +251 -264
  150. package/src/sap/fe/core/converters/controls/Common/Table.ts +344 -370
  151. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
  152. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +147 -144
  153. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +89 -59
  154. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +118 -71
  155. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
  156. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
  157. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
  158. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
  159. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +131 -95
  160. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +123 -87
  161. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +98 -87
  162. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +121 -117
  163. package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
  164. package/src/sap/fe/core/converters/helpers/Aggregation.ts +12 -15
  165. package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
  166. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
  167. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +8 -6
  168. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +18 -10
  169. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +136 -0
  170. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +139 -0
  171. package/src/sap/fe/core/converters/helpers/ID.js +48 -46
  172. package/src/sap/fe/core/converters/helpers/ID.ts +26 -25
  173. package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
  174. package/src/sap/fe/core/converters/helpers/Key.js +7 -7
  175. package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
  176. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  177. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -5
  178. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
  179. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
  180. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +53 -75
  181. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +59 -90
  182. package/src/sap/fe/core/converters/templates/ListReportConverter.js +58 -57
  183. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +93 -86
  184. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +58 -44
  185. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +87 -80
  186. package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
  187. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
  188. package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
  189. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
  190. package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
  191. package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
  192. package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
  193. package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
  194. package/src/sap/fe/core/formatters/StandardFormatter.js +96 -0
  195. package/src/sap/fe/core/formatters/StandardFormatter.ts +70 -0
  196. package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
  197. package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
  198. package/src/sap/fe/core/formatters/TableFormatterTypes.js +1 -1
  199. package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
  200. package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
  201. package/src/sap/fe/core/fpm/Component.js +33 -7
  202. package/src/sap/fe/core/fpm/Component.ts +14 -0
  203. package/src/sap/fe/core/helpers/AnnotationEnum.js +1 -1
  204. package/src/sap/fe/core/helpers/AppStartupHelper.js +19 -18
  205. package/src/sap/fe/core/helpers/AppStartupHelper.ts +41 -43
  206. package/src/sap/fe/core/helpers/BindingToolkit.js +1836 -0
  207. package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +397 -270
  208. package/src/sap/fe/core/helpers/ClassSupport.js +49 -12
  209. package/src/sap/fe/core/helpers/ClassSupport.ts +37 -10
  210. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
  211. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
  212. package/src/sap/fe/core/helpers/EditState.js +1 -6
  213. package/src/sap/fe/core/helpers/EditState.ts +5 -10
  214. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
  215. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
  216. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  217. package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
  218. package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
  219. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
  220. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +1 -1
  221. package/src/sap/fe/core/helpers/MassEditHelper.js +306 -280
  222. package/src/sap/fe/core/helpers/MassEditHelper.ts +380 -360
  223. package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
  224. package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
  225. package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
  226. package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
  227. package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
  228. package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
  229. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  230. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
  231. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
  232. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
  233. package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
  234. package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
  235. package/src/sap/fe/core/helpers/Synchronization.js +1 -1
  236. package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
  237. package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
  238. package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
  239. package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
  240. package/src/sap/fe/core/jsx-runtime/ViewLoader.js +109 -0
  241. package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +47 -0
  242. package/src/sap/fe/core/jsx-runtime/jsx-control.js +110 -0
  243. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +92 -0
  244. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
  245. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
  246. package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
  247. package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
  248. package/src/sap/fe/core/jsx-runtime/jsxs.js +1 -1
  249. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +179 -0
  250. package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +150 -0
  251. package/src/sap/fe/core/library.js +42 -3
  252. package/src/sap/fe/core/library.support.js +1 -1
  253. package/src/sap/fe/core/library.ts +38 -0
  254. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
  255. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
  256. package/src/sap/fe/core/messagebundle.properties +39 -67
  257. package/src/sap/fe/core/messagebundle_ar.properties +27 -44
  258. package/src/sap/fe/core/messagebundle_bg.properties +27 -44
  259. package/src/sap/fe/core/messagebundle_ca.properties +27 -44
  260. package/src/sap/fe/core/messagebundle_cs.properties +27 -44
  261. package/src/sap/fe/core/messagebundle_cy.properties +26 -43
  262. package/src/sap/fe/core/messagebundle_da.properties +27 -44
  263. package/src/sap/fe/core/messagebundle_de.properties +25 -42
  264. package/src/sap/fe/core/messagebundle_el.properties +28 -45
  265. package/src/sap/fe/core/messagebundle_en.properties +27 -44
  266. package/src/sap/fe/core/messagebundle_en_GB.properties +27 -44
  267. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +25 -42
  268. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +26 -40
  269. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +25 -42
  270. package/src/sap/fe/core/messagebundle_es.properties +27 -44
  271. package/src/sap/fe/core/messagebundle_es_MX.properties +27 -44
  272. package/src/sap/fe/core/messagebundle_et.properties +27 -44
  273. package/src/sap/fe/core/messagebundle_fi.properties +27 -44
  274. package/src/sap/fe/core/messagebundle_fr.properties +26 -43
  275. package/src/sap/fe/core/messagebundle_fr_CA.properties +25 -42
  276. package/src/sap/fe/core/messagebundle_hi.properties +27 -44
  277. package/src/sap/fe/core/messagebundle_hr.properties +27 -44
  278. package/src/sap/fe/core/messagebundle_hu.properties +27 -44
  279. package/src/sap/fe/core/messagebundle_id.properties +27 -44
  280. package/src/sap/fe/core/messagebundle_it.properties +43 -60
  281. package/src/sap/fe/core/messagebundle_iw.properties +27 -44
  282. package/src/sap/fe/core/messagebundle_ja.properties +27 -44
  283. package/src/sap/fe/core/messagebundle_kk.properties +27 -44
  284. package/src/sap/fe/core/messagebundle_ko.properties +30 -47
  285. package/src/sap/fe/core/messagebundle_lt.properties +27 -44
  286. package/src/sap/fe/core/messagebundle_lv.properties +27 -44
  287. package/src/sap/fe/core/messagebundle_ms.properties +27 -44
  288. package/src/sap/fe/core/messagebundle_nl.properties +29 -46
  289. package/src/sap/fe/core/messagebundle_no.properties +27 -44
  290. package/src/sap/fe/core/messagebundle_pl.properties +28 -45
  291. package/src/sap/fe/core/messagebundle_pt.properties +28 -45
  292. package/src/sap/fe/core/messagebundle_pt_PT.properties +27 -44
  293. package/src/sap/fe/core/messagebundle_ro.properties +27 -44
  294. package/src/sap/fe/core/messagebundle_ru.properties +27 -44
  295. package/src/sap/fe/core/messagebundle_sh.properties +27 -44
  296. package/src/sap/fe/core/messagebundle_sk.properties +27 -44
  297. package/src/sap/fe/core/messagebundle_sl.properties +27 -44
  298. package/src/sap/fe/core/messagebundle_sv.properties +27 -44
  299. package/src/sap/fe/core/messagebundle_th.properties +25 -42
  300. package/src/sap/fe/core/messagebundle_tr.properties +27 -44
  301. package/src/sap/fe/core/messagebundle_uk.properties +27 -44
  302. package/src/sap/fe/core/messagebundle_vi.properties +27 -44
  303. package/src/sap/fe/core/messagebundle_zh_CN.properties +27 -44
  304. package/src/sap/fe/core/messagebundle_zh_TW.properties +27 -44
  305. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -3
  306. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
  307. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +103 -75
  308. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +72 -73
  309. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +2 -2
  310. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
  311. package/src/sap/fe/core/services/NavigationServiceFactory.js +62 -50
  312. package/src/sap/fe/core/services/NavigationServiceFactory.ts +63 -52
  313. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +3 -3
  314. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
  315. package/src/sap/fe/core/services/RoutingServiceFactory.js +56 -56
  316. package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
  317. package/src/sap/fe/core/services/ShellServicesFactory.js +93 -77
  318. package/src/sap/fe/core/services/ShellServicesFactory.ts +95 -82
  319. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +64 -64
  320. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
  321. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +232 -200
  322. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +145 -142
  323. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +2 -2
  324. package/src/sap/fe/core/support/AnnotationIssue.support.js +1 -1
  325. package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +1 -1
  326. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +1 -1
  327. package/src/sap/fe/core/support/CommonHelper.js +3 -2
  328. package/src/sap/fe/core/support/CommonHelper.ts +9 -13
  329. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  330. package/src/sap/fe/core/support/Diagnostics.ts +5 -5
  331. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +1 -1
  332. package/src/sap/fe/core/templating/CommonFormatters.js +85 -0
  333. package/src/sap/fe/core/templating/CommonFormatters.ts +90 -0
  334. package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
  335. package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
  336. package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
  337. package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
  338. package/src/sap/fe/core/templating/DataModelPathHelper.js +23 -15
  339. package/src/sap/fe/core/templating/DataModelPathHelper.ts +47 -34
  340. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  341. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
  342. package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
  343. package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
  344. package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
  345. package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
  346. package/src/sap/fe/core/templating/FilterHelper.js +18 -17
  347. package/src/sap/fe/core/templating/FilterHelper.ts +18 -18
  348. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  349. package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
  350. package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
  351. package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
  352. package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
  353. package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
  354. package/src/sap/fe/core/templating/UIFormatters.js +152 -95
  355. package/src/sap/fe/core/templating/UIFormatters.ts +202 -128
  356. package/src/sap/fe/core/type/DateTimeWithTimezone.js +2 -2
  357. package/src/sap/fe/core/type/Email.js +3 -3
  358. package/src/sap/fe/core/type/Email.ts +2 -2
  359. package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
@@ -2,7 +2,7 @@
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/formatters/TableFormatter", "sap/fe/core/helpers/BindingExpression", "sap/fe/core/templating/DataModelPathHelper", "../../../helpers/BindingHelper", "../../../ManifestSettings"], function (tableFormatters, BindingExpression, DataModelPathHelper, BindingHelper, ManifestSettings) {
5
+ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/BindingToolkit", "sap/fe/core/templating/DataModelPathHelper", "../../../helpers/BindingHelper", "../../../ManifestSettings"], function (tableFormatters, BindingToolkit, DataModelPathHelper, BindingHelper, ManifestSettings) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
@@ -14,22 +14,22 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
14
14
  var isPathInsertable = DataModelPathHelper.isPathInsertable;
15
15
  var isPathDeletable = DataModelPathHelper.isPathDeletable;
16
16
  var getTargetObjectPath = DataModelPathHelper.getTargetObjectPath;
17
- var or = BindingExpression.or;
18
- var notEqual = BindingExpression.notEqual;
19
- var not = BindingExpression.not;
20
- var length = BindingExpression.length;
21
- var isConstant = BindingExpression.isConstant;
22
- var isBinding = BindingExpression.isBinding;
23
- var ifElse = BindingExpression.ifElse;
24
- var greaterThan = BindingExpression.greaterThan;
25
- var greaterOrEqual = BindingExpression.greaterOrEqual;
26
- var formatResult = BindingExpression.formatResult;
27
- var equal = BindingExpression.equal;
28
- var constant = BindingExpression.constant;
29
- var compileBinding = BindingExpression.compileBinding;
30
- var bindingExpression = BindingExpression.bindingExpression;
31
- var annotationExpression = BindingExpression.annotationExpression;
32
- var and = BindingExpression.and;
17
+ var pathInModel = BindingToolkit.pathInModel;
18
+ var or = BindingToolkit.or;
19
+ var notEqual = BindingToolkit.notEqual;
20
+ var not = BindingToolkit.not;
21
+ var length = BindingToolkit.length;
22
+ var isPathInModelExpression = BindingToolkit.isPathInModelExpression;
23
+ var isConstant = BindingToolkit.isConstant;
24
+ var ifElse = BindingToolkit.ifElse;
25
+ var greaterThan = BindingToolkit.greaterThan;
26
+ var greaterOrEqual = BindingToolkit.greaterOrEqual;
27
+ var getExpressionFromAnnotation = BindingToolkit.getExpressionFromAnnotation;
28
+ var formatResult = BindingToolkit.formatResult;
29
+ var equal = BindingToolkit.equal;
30
+ var constant = BindingToolkit.constant;
31
+ var compileExpression = BindingToolkit.compileExpression;
32
+ var and = BindingToolkit.and;
33
33
 
34
34
  var AnnotationHiddenProperty;
35
35
 
@@ -42,10 +42,10 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
42
42
  /**
43
43
  * Generates the context for the standard actions.
44
44
  *
45
- * @param {ConverterContext} converterContext
46
- * @param {NavigationSettingsConfiguration} creationMode
47
- * @param {TableControlConfiguration} tableManifestConfiguration
48
- * @param {ViewPathConfiguration} viewConfiguration
45
+ * @param converterContext
46
+ * @param creationMode
47
+ * @param tableManifestConfiguration
48
+ * @param viewConfiguration
49
49
  * @returns The context for table actions
50
50
  */
51
51
  function generateStandardActionsContext(converterContext, creationMode, tableManifestConfiguration, viewConfiguration) {
@@ -67,8 +67,8 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
67
67
  /**
68
68
  * Checks if draft is supported.
69
69
  *
70
- * @param {ConverterContext} converterContext
71
- * @returns {boolean}
70
+ * @param converterContext
71
+ * @returns `true` if it is supported
72
72
  */
73
73
 
74
74
 
@@ -86,8 +86,8 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
86
86
  /**
87
87
  * Checks if sticky or draft is supported.
88
88
  *
89
- * @param {ConverterContext} converterContext
90
- * @returns {boolean}
89
+ * @param converterContext
90
+ * @returns `true` if it is supported
91
91
  */
92
92
 
93
93
 
@@ -103,8 +103,8 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
103
103
  /**
104
104
  * Gets the configured newAction into annotation.
105
105
  *
106
- * @param {ConverterContext} converterContext
107
- * @returns {any}
106
+ * @param converterContext
107
+ * @returns The new action info
108
108
  */
109
109
 
110
110
 
@@ -123,7 +123,7 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
123
123
  availableProperty = availableProperty !== undefined ? availableProperty : true;
124
124
  return {
125
125
  name: newActionName,
126
- available: annotationExpression(availableProperty)
126
+ available: getExpressionFromAnnotation(availableProperty)
127
127
  };
128
128
  }
129
129
 
@@ -132,10 +132,10 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
132
132
  /**
133
133
  * Gets the binding expression for the action visibility configured into annotation.
134
134
  *
135
- * @param {ConverterContext} converterContext
136
- * @param {string} sAnnotationTerm
137
- * @param {boolean} bWithNavigationPath
138
- * @returns {Expression<boolean>}
135
+ * @param converterContext
136
+ * @param sAnnotationTerm
137
+ * @param bWithNavigationPath
138
+ * @returns The binding expression for the action visibility
139
139
  */
140
140
 
141
141
 
@@ -150,15 +150,15 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
150
150
 
151
151
  var visitedNavigationPaths = dataModelObjectPath.navigationProperties.length > 0 && bWithNavigationPath ? [dataModelObjectPath.navigationProperties[dataModelObjectPath.navigationProperties.length - 1].name] : [];
152
152
  var actionAnnotationValue = (currentEntitySet === null || currentEntitySet === void 0 ? void 0 : (_currentEntitySet$ann11 = currentEntitySet.annotations.UI) === null || _currentEntitySet$ann11 === void 0 ? void 0 : _currentEntitySet$ann11[sAnnotationTerm]) || false;
153
- return currentEntitySet ? annotationExpression(actionAnnotationValue, visitedNavigationPaths, undefined, function (path) {
153
+ return currentEntitySet ? getExpressionFromAnnotation(actionAnnotationValue, visitedNavigationPaths, undefined, function (path) {
154
154
  return singletonPathVisitor(path, converterContext.getConvertedTypes(), visitedNavigationPaths);
155
155
  }) : constant(false);
156
156
  }
157
157
  /**
158
158
  * Gets the annotated restrictions for the actions.
159
159
  *
160
- * @param {ConverterContext} converterContext
161
- * @returns {StandardActionsRestrictionsType}
160
+ * @param converterContext
161
+ * @returns The restriction information
162
162
  */
163
163
 
164
164
 
@@ -199,10 +199,10 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
199
199
  /**
200
200
  * Checks if templating for insert/update actions is mandatory.
201
201
  *
202
- * @param {StandardActionsContext} standardActionsContext
203
- * @param {boolean} isDraftOrSticky
204
- * @param {boolean} isCreateAlwaysHidden
205
- * @returns {boolean}
202
+ * @param standardActionsContext
203
+ * @param isDraftOrSticky
204
+ * @param isCreateAlwaysHidden
205
+ * @returns The
206
206
  */
207
207
 
208
208
 
@@ -214,9 +214,9 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
214
214
  /**
215
215
  * Gets the binding expressions for the properties of the action Create.
216
216
  *
217
- * @param {ConverterContext} converterContext
218
- * @param {StandardActionsContext} standardActionsContext
219
- * @returns {StandardActionConfigType}
217
+ * @param converterContext
218
+ * @param standardActionsContext
219
+ * @returns The standard action info
220
220
  */
221
221
 
222
222
 
@@ -225,17 +225,17 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
225
225
  function getStandardActionCreate(converterContext, standardActionsContext) {
226
226
  var createVisibility = getCreateVisibility(converterContext, standardActionsContext);
227
227
  return {
228
- isTemplated: compileBinding(getCreateTemplating(standardActionsContext, createVisibility)),
229
- visible: compileBinding(createVisibility),
230
- enabled: compileBinding(getCreateEnablement(converterContext, standardActionsContext, createVisibility))
228
+ isTemplated: compileExpression(getCreateTemplating(standardActionsContext, createVisibility)),
229
+ visible: compileExpression(createVisibility),
230
+ enabled: compileExpression(getCreateEnablement(converterContext, standardActionsContext, createVisibility))
231
231
  };
232
232
  }
233
233
  /**
234
234
  * Gets the binding expressions for the properties of the action Delete.
235
235
  *
236
- * @param {ConverterContext} converterContext
237
- * @param {StandardActionsContext} standardActionsContext
238
- * @returns {StandardActionConfigType}
236
+ * @param converterContext
237
+ * @param standardActionsContext
238
+ * @returns The binding expressions for the properties of the action Delete.
239
239
  */
240
240
 
241
241
 
@@ -244,9 +244,9 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
244
244
  function getStandardActionDelete(converterContext, standardActionsContext) {
245
245
  var deleteVisibility = getDeleteVisibility(converterContext, standardActionsContext);
246
246
  return {
247
- isTemplated: compileBinding(getDefaultTemplating(deleteVisibility)),
248
- visible: compileBinding(deleteVisibility),
249
- enabled: compileBinding(getDeleteEnablement(converterContext, standardActionsContext, deleteVisibility))
247
+ isTemplated: compileExpression(getDefaultTemplating(deleteVisibility)),
248
+ visible: compileExpression(deleteVisibility),
249
+ enabled: compileExpression(getDeleteEnablement(converterContext, standardActionsContext, deleteVisibility))
250
250
  };
251
251
  }
252
252
  /**
@@ -261,18 +261,18 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
261
261
  function getCreationRow(converterContext, standardActionsContext) {
262
262
  var creationRowVisibility = getCreateVisibility(converterContext, standardActionsContext, true);
263
263
  return {
264
- isTemplated: compileBinding(getCreateTemplating(standardActionsContext, creationRowVisibility, true)),
265
- visible: compileBinding(creationRowVisibility),
266
- enabled: compileBinding(getCreationRowEnablement(converterContext, standardActionsContext, creationRowVisibility))
264
+ isTemplated: compileExpression(getCreateTemplating(standardActionsContext, creationRowVisibility, true)),
265
+ visible: compileExpression(creationRowVisibility),
266
+ enabled: compileExpression(getCreationRowEnablement(converterContext, standardActionsContext, creationRowVisibility))
267
267
  };
268
268
  }
269
269
  /**
270
270
  * Gets the binding expressions for the properties of the action Paste.
271
271
  *
272
- * @param {ConverterContext} converterContext
273
- * @param {StandardActionsContext} standardActionsContext
274
- * @param {boolean} isInsertUpdateActionsTemplated
275
- * @returns {StandardActionConfigType}
272
+ * @param converterContext
273
+ * @param standardActionsContext
274
+ * @param isInsertUpdateActionsTemplated
275
+ * @returns The binding expressions for the properties of the action Paste.
276
276
  */
277
277
 
278
278
 
@@ -283,16 +283,16 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
283
283
  var createEnablement = getCreateEnablement(converterContext, standardActionsContext, createVisibility);
284
284
  var pasteVisibility = getPasteVisibility(converterContext, standardActionsContext, createVisibility, isInsertUpdateActionsTemplated);
285
285
  return {
286
- visible: compileBinding(pasteVisibility),
287
- enabled: compileBinding(getPasteEnablement(pasteVisibility, createEnablement))
286
+ visible: compileExpression(pasteVisibility),
287
+ enabled: compileExpression(getPasteEnablement(pasteVisibility, createEnablement))
288
288
  };
289
289
  }
290
290
  /**
291
291
  * Gets the binding expressions for the properties of the action MassEdit.
292
292
  *
293
- * @param {ConverterContext} converterContext
294
- * @param {StandardActionsContext} standardActionsContext
295
- * @returns {StandardActionConfigType}
293
+ * @param converterContext
294
+ * @param standardActionsContext
295
+ * @returns The binding expressions for the properties of the action MassEdit.
296
296
  */
297
297
 
298
298
 
@@ -301,18 +301,18 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
301
301
  function getStandardActionMassEdit(converterContext, standardActionsContext) {
302
302
  var massEditVisibility = getMassEditVisibility(converterContext, standardActionsContext);
303
303
  return {
304
- isTemplated: compileBinding(getDefaultTemplating(massEditVisibility)),
305
- visible: compileBinding(massEditVisibility),
306
- enabled: compileBinding(getMassEditEnablement(converterContext, standardActionsContext, massEditVisibility))
304
+ isTemplated: compileExpression(getDefaultTemplating(massEditVisibility)),
305
+ visible: compileExpression(massEditVisibility),
306
+ enabled: compileExpression(getMassEditEnablement(converterContext, standardActionsContext, massEditVisibility))
307
307
  };
308
308
  }
309
309
  /**
310
310
  * Gets the binding expression for the templating of the action Create.
311
311
  *
312
- * @param {StandardActionsContext} standardActionsContext
313
- * @param {Expression<boolean>} createVisibility
314
- * @param {boolean} isForCreationRow
315
- * @returns {Expression<boolean> }
312
+ * @param standardActionsContext
313
+ * @param createVisibility
314
+ * @param isForCreationRow
315
+ * @returns The create binding expression
316
316
  */
317
317
 
318
318
 
@@ -330,8 +330,8 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
330
330
  /**
331
331
  * Gets the binding expression for the templating of the non-Create actions.
332
332
  *
333
- * @param {Expression<boolean>} actionVisibility
334
- * @returns {Expression<boolean> }
333
+ * @param actionVisibility
334
+ * @returns The binding expression for the templating of the non-Create actions.
335
335
  */
336
336
 
337
337
 
@@ -343,10 +343,10 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
343
343
  /**
344
344
  * Gets the binding expression for the property visible of the action Create.
345
345
  *
346
- * @param {ConverterContext} converterContext
347
- * @param {StandardActionsContext} standardActionsContext
348
- * @param {boolean} isForCreationRow
349
- * @returns {Expression<boolean> }
346
+ * @param converterContext
347
+ * @param standardActionsContext
348
+ * @param isForCreationRow
349
+ * @returns The binding expression for the property visible of the action Create.
350
350
  */
351
351
 
352
352
 
@@ -377,14 +377,14 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
377
377
  // - Otherwise
378
378
  // - This depends on the value of the the UI.IsEditable
379
379
 
380
- return ifElse(standardActionsContext.creationMode === CreationMode.External, and(not(isCreateHidden), or(converterContext.getTemplateType() === TemplateType.ListReport, UI.IsEditable)), ifElse(or(and(isConstant(newAction === null || newAction === void 0 ? void 0 : newAction.available), equal(newAction === null || newAction === void 0 ? void 0 : newAction.available, false)), and(isConstant(isInsertable), equal(isInsertable, false), !newAction), and(isConstant(isCreateHidden), equal(isCreateHidden, true)), standardActionsContext.isViewWithMultipleVisualizations, converterContext.getTemplateType() === TemplateType.AnalyticalListPage, and(standardActionsContext.creationMode === CreationMode.InlineCreationRows, ((_standardActionsConte = standardActionsContext.tableManifestConfiguration) === null || _standardActionsConte === void 0 ? void 0 : _standardActionsConte.type) === "ResponsiveTable")), false, ifElse(converterContext.getTemplateType() === TemplateType.ListReport, or(not(isBinding(isCreateHidden)), not(isCreateHidden)), and(not(isCreateHidden), UI.IsEditable))));
380
+ return ifElse(standardActionsContext.creationMode === CreationMode.External, and(not(isCreateHidden), or(converterContext.getTemplateType() === TemplateType.ListReport, UI.IsEditable)), ifElse(or(and(isConstant(newAction === null || newAction === void 0 ? void 0 : newAction.available), equal(newAction === null || newAction === void 0 ? void 0 : newAction.available, false)), and(isConstant(isInsertable), equal(isInsertable, false), !newAction), and(isConstant(isCreateHidden), equal(isCreateHidden, true)), standardActionsContext.isViewWithMultipleVisualizations, converterContext.getTemplateType() === TemplateType.AnalyticalListPage, and(standardActionsContext.creationMode === CreationMode.InlineCreationRows, ((_standardActionsConte = standardActionsContext.tableManifestConfiguration) === null || _standardActionsConte === void 0 ? void 0 : _standardActionsConte.type) === "ResponsiveTable")), false, ifElse(converterContext.getTemplateType() === TemplateType.ListReport, or(not(isPathInModelExpression(isCreateHidden)), not(isCreateHidden)), and(not(isCreateHidden), UI.IsEditable))));
381
381
  }
382
382
  /**
383
383
  * Gets the binding expression for the property visible of the action Delete.
384
384
  *
385
- * @param {ConverterContext} converterContext
386
- * @param {StandardActionsContext} standardActionsContext
387
- * @returns {Expression<boolean> }
385
+ * @param converterContext
386
+ * @param standardActionsContext
387
+ * @returns The binding expression for the property visible of the action Delete.
388
388
  */
389
389
 
390
390
 
@@ -405,16 +405,16 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
405
405
  // - If UI.DeleteHidden points to a property path -> provide a negated binding to this path
406
406
  // - Otherwise, delete is visible
407
407
 
408
- return ifElse(or(standardActionsContext.isViewWithMultipleVisualizations, converterContext.getTemplateType() === TemplateType.AnalyticalListPage), false, ifElse(and(isConstant(pathDeletableExpression), equal(pathDeletableExpression, false)), false, ifElse(and(isConstant(isDeleteHidden), equal(isDeleteHidden, constant(true))), false, ifElse(converterContext.getTemplateType() !== TemplateType.ListReport, and(not(isDeleteHidden), UI.IsEditable), not(and(isBinding(isDeleteHidden), isDeleteHidden))))));
408
+ return ifElse(or(standardActionsContext.isViewWithMultipleVisualizations, converterContext.getTemplateType() === TemplateType.AnalyticalListPage), false, ifElse(and(isConstant(pathDeletableExpression), equal(pathDeletableExpression, false)), false, ifElse(and(isConstant(isDeleteHidden), equal(isDeleteHidden, constant(true))), false, ifElse(converterContext.getTemplateType() !== TemplateType.ListReport, and(not(isDeleteHidden), UI.IsEditable), not(and(isPathInModelExpression(isDeleteHidden), isDeleteHidden))))));
409
409
  }
410
410
  /**
411
411
  * Gets the binding expression for the property visible of the action Paste.
412
412
  *
413
- * @param {ConverterContext} converterContext
414
- * @param {StandardActionsContext} standardActionsContext
415
- * @param {Expression<boolean>} createVisibility
416
- * @param {boolean} isInsertUpdateActionsTemplated
417
- * @returns {Expression<boolean> }
413
+ * @param converterContext
414
+ * @param standardActionsContext
415
+ * @param createVisibility
416
+ * @param isInsertUpdateActionsTemplated
417
+ * @returns The binding expression for the property visible of the action Paste.
418
418
  */
419
419
 
420
420
 
@@ -429,9 +429,9 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
429
429
  /**
430
430
  * Gets the binding expression for the property visible of the action MassEdit.
431
431
  *
432
- * @param {ConverterContext} converterContext
433
- * @param {StandardActionsContext} standardActionsContext
434
- * @returns {Expression<boolean> }
432
+ * @param converterContext
433
+ * @param standardActionsContext
434
+ * @returns The binding expression for the property visible of the action MassEdit
435
435
  */
436
436
 
437
437
 
@@ -456,10 +456,10 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
456
456
  /**
457
457
  * Gets the binding expression for the property enabled of the creationRow.
458
458
  *
459
- * @param {ConverterContext} converterContext
460
- * @param {StandardActionsContext} standardActionsContext
461
- * @param {Expression<boolean>} creationRowVisibility
462
- * @returns {Expression<boolean> }
459
+ * @param converterContext
460
+ * @param standardActionsContext
461
+ * @param creationRowVisibility
462
+ * @returns The binding expression for the property enabled of the creationRow.
463
463
  */
464
464
 
465
465
 
@@ -493,15 +493,15 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
493
493
  return singletonPathVisitor(path, converterContext.getConvertedTypes(), []);
494
494
  }
495
495
  }) : restrictionsInsertable;
496
- return and(creationRowVisibility, isInsertable, or(!standardActionsContext.tableManifestConfiguration.disableAddRowButtonForEmptyData, formatResult([bindingExpression("creationRowFieldValidity", "internal")], tableFormatters.validateCreationRowFields)));
496
+ return and(creationRowVisibility, isInsertable, or(!standardActionsContext.tableManifestConfiguration.disableAddRowButtonForEmptyData, formatResult([pathInModel("creationRowFieldValidity", "internal")], tableFormatters.validateCreationRowFields)));
497
497
  }
498
498
  /**
499
499
  * Gets the binding expression for the property enabled of the action Create.
500
500
  *
501
- * @param {ConverterContext} converterContext
502
- * @param {StandardActionsContext} standardActionsContext
503
- * @param {Expression<boolean>} createVisibility
504
- * @returns {Expression<boolean> }
501
+ * @param converterContext
502
+ * @param standardActionsContext
503
+ * @param createVisibility
504
+ * @returns The binding expression for the property enabled of the action Create.
505
505
  */
506
506
 
507
507
 
@@ -517,10 +517,10 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
517
517
  /**
518
518
  * Gets the binding expression for the property enabled of the action Delete.
519
519
  *
520
- * @param {ConverterContext} converterContext
521
- * @param {StandardActionsContext} standardActionsContext
522
- * @param {Expression<boolean>} deleteVisibility
523
- * @returns {Expression<boolean> }
520
+ * @param converterContext
521
+ * @param standardActionsContext
522
+ * @param deleteVisibility
523
+ * @returns The binding expression for the property enabled of the action Delete.
524
524
  */
525
525
 
526
526
 
@@ -529,17 +529,17 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
529
529
  function getDeleteEnablement(converterContext, standardActionsContext, deleteVisibility) {
530
530
  var isDeletable = standardActionsContext.restrictions.isDeletable.expression;
531
531
  var isOnlyDynamicOnCurrentEntity = !isConstant(isDeletable) && standardActionsContext.restrictions.isDeletable.navigationExpression._type === "Unresolvable";
532
- var numberOfSelectedContexts = bindingExpression("numberOfSelectedContexts", "internal");
533
- var numberOfDeletableContexts = bindingExpression("deletableContexts", "internal");
534
- var numberOfUnSavedContexts = bindingExpression("unSavedContexts", "internal");
535
- return and(deleteVisibility, ifElse(or(converterContext.getTemplateType() !== TemplateType.ObjectPage, isOnlyDynamicOnCurrentEntity), and(or(and(notEqual(numberOfDeletableContexts, undefined), greaterThan(length(numberOfDeletableContexts), 0)), and(notEqual(numberOfUnSavedContexts, undefined), greaterThan(length(numberOfUnSavedContexts), 0))), bindingExpression("deleteEnabled", "internal")), and(notEqual(numberOfSelectedContexts, 0), isDeletable)));
532
+ var numberOfSelectedContexts = pathInModel("numberOfSelectedContexts", "internal");
533
+ var numberOfDeletableContexts = pathInModel("deletableContexts", "internal");
534
+ var numberOfUnSavedContexts = pathInModel("unSavedContexts", "internal");
535
+ return and(deleteVisibility, ifElse(or(converterContext.getTemplateType() !== TemplateType.ObjectPage, isOnlyDynamicOnCurrentEntity), and(or(and(notEqual(numberOfDeletableContexts, undefined), greaterThan(length(numberOfDeletableContexts), 0)), and(notEqual(numberOfUnSavedContexts, undefined), greaterThan(length(numberOfUnSavedContexts), 0))), pathInModel("deleteEnabled", "internal")), and(notEqual(numberOfSelectedContexts, 0), isDeletable)));
536
536
  }
537
537
  /**
538
538
  * Gets the binding expression for the property enabled of the action Paste.
539
539
  *
540
- * @param {Expression<boolean>} pasteVisibility
541
- * @param {Expression<boolean>} createEnablement
542
- * @returns {Expression<boolean> }
540
+ * @param pasteVisibility
541
+ * @param createEnablement
542
+ * @returns The binding expression for the property enabled of the action Paste.
543
543
  */
544
544
 
545
545
 
@@ -551,10 +551,10 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
551
551
  /**
552
552
  * Gets the binding expression for the property enabled of the action MassEdit.
553
553
  *
554
- * @param {ConverterContext} converterContext
555
- * @param {StandardActionsContext} standardActionsContext
556
- * @param {Expression<boolean>} massEditVisibility
557
- * @returns {Expression<boolean> }
554
+ * @param converterContext
555
+ * @param standardActionsContext
556
+ * @param massEditVisibility
557
+ * @returns The binding expression for the property enabled of the action MassEdit.
558
558
  */
559
559
 
560
560
 
@@ -563,8 +563,8 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
563
563
  function getMassEditEnablement(converterContext, standardActionsContext, massEditVisibility) {
564
564
  var pathUpdatableExpression = standardActionsContext.restrictions.isUpdatable.expression;
565
565
  var isOnlyDynamicOnCurrentEntity = !isConstant(pathUpdatableExpression) && standardActionsContext.restrictions.isUpdatable.navigationExpression._type === "Unresolvable";
566
- var numberOfSelectedContexts = greaterOrEqual(bindingExpression("numberOfSelectedContexts", "internal"), 1);
567
- var numberOfUpdatableContexts = greaterOrEqual(length(bindingExpression("updatableContexts", "internal")), 1);
566
+ var numberOfSelectedContexts = greaterOrEqual(pathInModel("numberOfSelectedContexts", "internal"), 1);
567
+ var numberOfUpdatableContexts = greaterOrEqual(length(pathInModel("updatableContexts", "internal")), 1);
568
568
  var bIsDraftSupported = isDraftSupported(converterContext);
569
569
  var bDisplayMode = isInDisplayMode(converterContext); // numberOfUpdatableContexts needs to be added to the binding in case
570
570
  // 1. Update is dependent on current entity property (isOnlyDynamicOnCurrentEntity is true).
@@ -577,9 +577,9 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
577
577
  /**
578
578
  * Tells if the table in template is in display mode.
579
579
  *
580
- * @param {ConverterContext} converterContext
581
- * @param {ViewPathConfiguration} viewConfiguration
582
- * @returns {boolean}
580
+ * @param converterContext
581
+ * @param viewConfiguration
582
+ * @returns `true` if the table is in display mode
583
583
  */
584
584
 
585
585
 
@@ -599,4 +599,4 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
599
599
  _exports.isInDisplayMode = isInDisplayMode;
600
600
  return _exports;
601
601
  }, false);
602
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlN0YW5kYXJkQWN0aW9ucy50cyJdLCJuYW1lcyI6WyJBbm5vdGF0aW9uSGlkZGVuUHJvcGVydHkiLCJnZW5lcmF0ZVN0YW5kYXJkQWN0aW9uc0NvbnRleHQiLCJjb252ZXJ0ZXJDb250ZXh0IiwiY3JlYXRpb25Nb2RlIiwidGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJ2aWV3Q29uZmlndXJhdGlvbiIsImNvbGxlY3Rpb25QYXRoIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJoaWRkZW5Bbm5vdGF0aW9uIiwiY3JlYXRlIiwiaXNBY3Rpb25Bbm5vdGF0ZWRIaWRkZW4iLCJDcmVhdGVIaWRkZW4iLCJEZWxldGVIaWRkZW4iLCJ1cGRhdGUiLCJVcGRhdGVIaWRkZW4iLCJpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQiLCJpc1ZpZXdXaXRoTXVsdGlwbGVWaXN1YWxpemF0aW9ucyIsImdldE1hbmlmZXN0V3JhcHBlciIsImhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMiLCJuZXdBY3Rpb24iLCJnZXROZXdBY3Rpb24iLCJyZXN0cmljdGlvbnMiLCJnZXRSZXN0cmljdGlvbnMiLCJpc0RyYWZ0U3VwcG9ydGVkIiwiY3VycmVudEVudGl0eVNldCIsImdldEVudGl0eVNldCIsImJJc0RyYWZ0Um9vdCIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiRHJhZnRSb290IiwiYklzRHJhZnROb2RlIiwiRHJhZnROb2RlIiwiYklzRHJhZnRQYXJlbnRFbnRpdHlGb3JDb250YWlubWVudCIsInRhcmdldE9iamVjdCIsImNvbnRhaW5zVGFyZ2V0Iiwic3RhcnRpbmdFbnRpdHlTZXQiLCJiSXNEcmFmdFN1cHBvcnRlZCIsImJJc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJTZXNzaW9uIiwiU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsIm5ld0FjdGlvbk5hbWUiLCJOZXdBY3Rpb24iLCJ0b1N0cmluZyIsImF2YWlsYWJsZVByb3BlcnR5IiwiZ2V0RW50aXR5VHlwZSIsImFjdGlvbnMiLCJDb3JlIiwiT3BlcmF0aW9uQXZhaWxhYmxlIiwidW5kZWZpbmVkIiwibmFtZSIsImF2YWlsYWJsZSIsImFubm90YXRpb25FeHByZXNzaW9uIiwic0Fubm90YXRpb25UZXJtIiwiYldpdGhOYXZpZ2F0aW9uUGF0aCIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJ2aXNpdGVkTmF2aWdhdGlvblBhdGhzIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJsZW5ndGgiLCJhY3Rpb25Bbm5vdGF0aW9uVmFsdWUiLCJVSSIsInBhdGgiLCJzaW5nbGV0b25QYXRoVmlzaXRvciIsImdldENvbnZlcnRlZFR5cGVzIiwiY29uc3RhbnQiLCJyZXN0cmljdGlvbnNEZWYiLCJrZXkiLCJpc1BhdGhJbnNlcnRhYmxlIiwiaXNQYXRoVXBkYXRhYmxlIiwiaXNQYXRoRGVsZXRhYmxlIiwicmVzdWx0IiwiZm9yRWFjaCIsImRlZiIsImRlZkZ1bmN0aW9uIiwiZXhwcmVzc2lvbiIsImFwcGx5IiwicGF0aFZpc2l0b3IiLCJuYXZpZ2F0aW9uUGF0aHMiLCJuYXZpZ2F0aW9uRXhwcmVzc2lvbiIsImlnbm9yZVRhcmdldENvbGxlY3Rpb24iLCJhdXRob3JpemVVbnJlc29sdmFibGUiLCJnZXRJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGluZyIsInN0YW5kYXJkQWN0aW9uc0NvbnRleHQiLCJpc0RyYWZ0T3JTdGlja3kiLCJpc0NyZWF0ZUFsd2F5c0hpZGRlbiIsIkNyZWF0aW9uTW9kZSIsIkV4dGVybmFsIiwiZ2V0U3RhbmRhcmRBY3Rpb25DcmVhdGUiLCJjcmVhdGVWaXNpYmlsaXR5IiwiZ2V0Q3JlYXRlVmlzaWJpbGl0eSIsImlzVGVtcGxhdGVkIiwiY29tcGlsZUJpbmRpbmciLCJnZXRDcmVhdGVUZW1wbGF0aW5nIiwidmlzaWJsZSIsImVuYWJsZWQiLCJnZXRDcmVhdGVFbmFibGVtZW50IiwiZ2V0U3RhbmRhcmRBY3Rpb25EZWxldGUiLCJkZWxldGVWaXNpYmlsaXR5IiwiZ2V0RGVsZXRlVmlzaWJpbGl0eSIsImdldERlZmF1bHRUZW1wbGF0aW5nIiwiZ2V0RGVsZXRlRW5hYmxlbWVudCIsImdldENyZWF0aW9uUm93IiwiY3JlYXRpb25Sb3dWaXNpYmlsaXR5IiwiZ2V0Q3JlYXRpb25Sb3dFbmFibGVtZW50IiwiZ2V0U3RhbmRhcmRBY3Rpb25QYXN0ZSIsImlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZCIsImNyZWF0ZUVuYWJsZW1lbnQiLCJwYXN0ZVZpc2liaWxpdHkiLCJnZXRQYXN0ZVZpc2liaWxpdHkiLCJnZXRQYXN0ZUVuYWJsZW1lbnQiLCJnZXRTdGFuZGFyZEFjdGlvbk1hc3NFZGl0IiwibWFzc0VkaXRWaXNpYmlsaXR5IiwiZ2V0TWFzc0VkaXRWaXNpYmlsaXR5IiwiZ2V0TWFzc0VkaXRFbmFibGVtZW50IiwiaXNGb3JDcmVhdGlvblJvdyIsImFuZCIsIm9yIiwiQ3JlYXRpb25Sb3ciLCJub3QiLCJpc0NvbnN0YW50IiwiYWN0aW9uVmlzaWJpbGl0eSIsImlzSW5zZXJ0YWJsZSIsImlzQ3JlYXRlSGlkZGVuIiwiaWZFbHNlIiwiZ2V0VGVtcGxhdGVUeXBlIiwiVGVtcGxhdGVUeXBlIiwiTGlzdFJlcG9ydCIsIklzRWRpdGFibGUiLCJlcXVhbCIsIkFuYWx5dGljYWxMaXN0UGFnZSIsIklubGluZUNyZWF0aW9uUm93cyIsInR5cGUiLCJpc0JpbmRpbmciLCJpc0RlbGV0ZUhpZGRlbiIsImRlbGV0ZSIsInBhdGhEZWxldGFibGVFeHByZXNzaW9uIiwiaXNEZWxldGFibGUiLCJub3RFcXVhbCIsImVuYWJsZVBhc3RlIiwiaW5kZXhPZiIsImlzVXBkYXRlSGlkZGVuIiwicGF0aFVwZGF0YWJsZUV4cHJlc3Npb24iLCJpc1VwZGF0YWJsZSIsImJNYXNzRWRpdEVuYWJsZWRJbk1hbmlmZXN0IiwiZW5hYmxlTWFzc0VkaXQiLCJ0ZW1wbGF0ZUJpbmRpbmdFeHByZXNzaW9uIiwiT2JqZWN0UGFnZSIsInJlc3RyaWN0aW9uc0luc2VydGFibGUiLCJwYXJ0bmVyIiwiX3R5cGUiLCJkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIiwiZm9ybWF0UmVzdWx0IiwiYmluZGluZ0V4cHJlc3Npb24iLCJ0YWJsZUZvcm1hdHRlcnMiLCJ2YWxpZGF0ZUNyZWF0aW9uUm93RmllbGRzIiwiQ29sbGVjdGlvblR5cGUiLCJyZXNvbHZlQWJzb2x1dGVQYXRoIiwidGFyZ2V0IiwiaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSIsIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyIsIm51bWJlck9mRGVsZXRhYmxlQ29udGV4dHMiLCJudW1iZXJPZlVuU2F2ZWRDb250ZXh0cyIsImdyZWF0ZXJUaGFuIiwiZ3JlYXRlck9yRXF1YWwiLCJudW1iZXJPZlVwZGF0YWJsZUNvbnRleHRzIiwiYkRpc3BsYXlNb2RlIiwiaXNJbkRpc3BsYXlNb2RlIiwicnVudGltZUJpbmRpbmciLCJ0ZW1wbGF0ZVR5cGUiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQTBCS0Esd0I7O2FBQUFBLHdCO0FBQUFBLElBQUFBLHdCO0FBQUFBLElBQUFBLHdCO0FBQUFBLElBQUFBLHdCO0tBQUFBLHdCLEtBQUFBLHdCOztBQW9DTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxXQUFTQyw4QkFBVCxDQUNOQyxnQkFETSxFQUVOQyxZQUZNLEVBR05DLDBCQUhNLEVBSU5DLGlCQUpNLEVBS21CO0FBQ3pCLFdBQU87QUFDTkMsTUFBQUEsY0FBYyxFQUFFQyxtQkFBbUIsQ0FBQ0wsZ0JBQWdCLENBQUNNLHNCQUFqQixFQUFELENBRDdCO0FBRU5DLE1BQUFBLGdCQUFnQixFQUFFO0FBQ2pCQyxRQUFBQSxNQUFNLEVBQUVDLHVCQUF1QixDQUFDVCxnQkFBRCxFQUFtQkYsd0JBQXdCLENBQUNZLFlBQTVDLENBRGQ7QUFFakIsa0JBQVVELHVCQUF1QixDQUFDVCxnQkFBRCxFQUFtQkYsd0JBQXdCLENBQUNhLFlBQTVDLENBRmhC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Q3ZILFFBQU1tSyxZQUFZLEdBQUd0SyxnQkFBZ0IsQ0FBQzBILGVBQWpCLEVBQXJCOztBQUNBLFFBQ0M0QyxZQUFZLEtBQUszQyxZQUFZLENBQUNDLFVBQTlCLElBQ0EwQyxZQUFZLEtBQUszQyxZQUFZLENBQUNJLGtCQUQ5QixJQUVDNUgsaUJBQWlCLElBQUlILGdCQUFnQixDQUFDZ0Isa0JBQWpCLEdBQXNDQyx5QkFBdEMsQ0FBZ0VkLGlCQUFoRSxDQUh2QixFQUlFO0FBQ0QsYUFBTyxJQUFQO0FBQ0EsS0FSc0gsQ0FTdkg7OztBQUNBLFdBQU8sS0FBUDtBQUNBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHRhYmxlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9UYWJsZUZvcm1hdHRlclwiO1xuaW1wb3J0IHtcblx0YW5kLFxuXHRhbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0YmluZGluZ0V4cHJlc3Npb24sXG5cdEJpbmRpbmdFeHByZXNzaW9uLFxuXHRjb21waWxlQmluZGluZyxcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRFeHByZXNzaW9uLFxuXHRmb3JtYXRSZXN1bHQsXG5cdGdyZWF0ZXJPckVxdWFsLFxuXHRncmVhdGVyVGhhbixcblx0aWZFbHNlLFxuXHRpc0JpbmRpbmcsXG5cdGlzQ29uc3RhbnQsXG5cdGxlbmd0aCxcblx0bm90LFxuXHRub3RFcXVhbCxcblx0b3Jcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0V4cHJlc3Npb25cIjtcbmltcG9ydCB7IGdldFRhcmdldE9iamVjdFBhdGgsIGlzUGF0aERlbGV0YWJsZSwgaXNQYXRoSW5zZXJ0YWJsZSwgaXNQYXRoVXBkYXRhYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7IHNpbmdsZXRvblBhdGhWaXNpdG9yLCBVSSB9IGZyb20gXCIuLi8uLi8uLi9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB7IENyZWF0aW9uTW9kZSwgVGVtcGxhdGVUeXBlLCBWaWV3UGF0aENvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgVGFibGVDb250cm9sQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi9UYWJsZVwiO1xuXG5lbnVtIEFubm90YXRpb25IaWRkZW5Qcm9wZXJ0eSB7XG5cdENyZWF0ZUhpZGRlbiA9IFwiQ3JlYXRlSGlkZGVuXCIsXG5cdERlbGV0ZUhpZGRlbiA9IFwiRGVsZXRlSGlkZGVuXCIsXG5cdFVwZGF0ZUhpZGRlbiA9IFwiVXBkYXRlSGlkZGVuXCJcbn1cblxuZXhwb3J0IHR5cGUgU3RhbmRhcmRBY3Rpb25Db25maWdUeXBlID0ge1xuXHRpc1RlbXBsYXRlZD86IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHR2aXNpYmxlOiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPjtcblx0ZW5hYmxlZDogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj47XG59O1xuXG50eXBlIEV4cHJlc3Npb25SZXN0cmljdGlvbnNUeXBlID0ge1xuXHRleHByZXNzaW9uOiBFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRuYXZpZ2F0aW9uRXhwcmVzc2lvbjogRXhwcmVzc2lvbjxib29sZWFuPjtcbn07XG50eXBlIFN0YW5kYXJkQWN0aW9uc1Jlc3RyaWN0aW9uc1R5cGUgPSBSZWNvcmQ8c3RyaW5nLCBFeHByZXNzaW9uUmVzdHJpY3Rpb25zVHlwZT47XG5cbmV4cG9ydCB0eXBlIFN0YW5kYXJkQWN0aW9uc0NvbnRleHQgPSB7XG5cdGNvbGxlY3Rpb25QYXRoOiBzdHJpbmc7XG5cdGhpZGRlbkFubm90YXRpb246IHtcblx0XHRjcmVhdGU6IEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdFx0XCJkZWxldGVcIjogRXhwcmVzc2lvbjxib29sZWFuPjtcblx0XHR1cGRhdGU6IEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdH07XG5cdGNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlO1xuXHRpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQ6IGJvb2xlYW47XG5cdGlzVmlld1dpdGhNdWx0aXBsZVZpc3VhbGl6YXRpb25zOiBib29sZWFuO1xuXHRuZXdBY3Rpb24/OiB7XG5cdFx0bmFtZT86IHN0cmluZztcblx0XHRhdmFpbGFibGU/OiBFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHR9O1xuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbjtcblx0cmVzdHJpY3Rpb25zOiBTdGFuZGFyZEFjdGlvbnNSZXN0cmljdGlvbnNUeXBlO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNvbnRleHQgZm9yIHRoZSBzdGFuZGFyZCBhY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHtOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9ufSBjcmVhdGlvbk1vZGVcbiAqIEBwYXJhbSB7VGFibGVDb250cm9sQ29uZmlndXJhdGlvbn0gdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSB7Vmlld1BhdGhDb25maWd1cmF0aW9ufSB2aWV3Q29uZmlndXJhdGlvblxuICogQHJldHVybnMgIFRoZSBjb250ZXh0IGZvciB0YWJsZSBhY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVN0YW5kYXJkQWN0aW9uc0NvbnRleHQoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlLFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbixcblx0dmlld0NvbmZpZ3VyYXRpb24/OiBWaWV3UGF0aENvbmZpZ3VyYXRpb25cbik6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQge1xuXHRyZXR1cm4ge1xuXHRcdGNvbGxlY3Rpb25QYXRoOiBnZXRUYXJnZXRPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKSxcblx0XHRoaWRkZW5Bbm5vdGF0aW9uOiB7XG5cdFx0XHRjcmVhdGU6IGlzQWN0aW9uQW5ub3RhdGVkSGlkZGVuKGNvbnZlcnRlckNvbnRleHQsIEFubm90YXRpb25IaWRkZW5Qcm9wZXJ0eS5DcmVhdGVIaWRkZW4pLFxuXHRcdFx0XCJkZWxldGVcIjogaXNBY3Rpb25Bbm5vdGF0ZWRIaWRkZW4oY29udmVydGVyQ29udGV4dCwgQW5ub3RhdGlvbkhpZGRlblByb3BlcnR5LkRlbGV0ZUhpZGRlbiksXG5cdFx0XHR1cGRhdGU6IGlzQWN0aW9uQW5ub3RhdGVkSGlkZGVuKGNvbnZlcnRlckNvbnRleHQsIEFubm90YXRpb25IaWRkZW5Qcm9wZXJ0eS5VcGRhdGVIaWRkZW4pXG5cdFx0fSxcblx0XHRjcmVhdGlvbk1vZGU6IGNyZWF0aW9uTW9kZSxcblx0XHRpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQ6IGlzRHJhZnRPclN0aWNreVN1cHBvcnRlZChjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRpc1ZpZXdXaXRoTXVsdGlwbGVWaXN1YWxpemF0aW9uczogdmlld0NvbmZpZ3VyYXRpb25cblx0XHRcdD8gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKHZpZXdDb25maWd1cmF0aW9uKVxuXHRcdFx0OiBmYWxzZSxcblx0XHRuZXdBY3Rpb246IGdldE5ld0FjdGlvbihjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdFx0cmVzdHJpY3Rpb25zOiBnZXRSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dClcblx0fTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgZHJhZnQgaXMgc3VwcG9ydGVkLlxuICpcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RyYWZ0U3VwcG9ydGVkKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBib29sZWFuIHtcblx0Y29uc3QgY3VycmVudEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IGJJc0RyYWZ0Um9vdCA9IGN1cnJlbnRFbnRpdHlTZXQgJiYgY3VycmVudEVudGl0eVNldC5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdFJvb3QgPyB0cnVlIDogZmFsc2U7XG5cdGNvbnN0IGJJc0RyYWZ0Tm9kZSA9IGN1cnJlbnRFbnRpdHlTZXQgJiYgY3VycmVudEVudGl0eVNldC5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdE5vZGUgPyB0cnVlIDogZmFsc2U7XG5cdGNvbnN0IGJJc0RyYWZ0UGFyZW50RW50aXR5Rm9yQ29udGFpbm1lbnQgPVxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdD8uY29udGFpbnNUYXJnZXQgJiZcblx0XHQoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkuc3RhcnRpbmdFbnRpdHlTZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Um9vdCB8fFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkuc3RhcnRpbmdFbnRpdHlTZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Tm9kZSlcblx0XHRcdD8gdHJ1ZVxuXHRcdFx0OiBmYWxzZTtcblxuXHRyZXR1cm4gYklzRHJhZnRSb290IHx8IGJJc0RyYWZ0Tm9kZSB8fCAoIWNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkgJiYgYklzRHJhZnRQYXJlbnRFbnRpdHlGb3JDb250YWlubWVudCk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHN0aWNreSBvciBkcmFmdCBpcyBzdXBwb3J0ZWQuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRHJhZnRPclN0aWNreVN1cHBvcnRlZChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdGNvbnN0IGJJc0RyYWZ0U3VwcG9ydGVkID0gaXNEcmFmdFN1cHBvcnRlZChjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgYklzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnN0YXJ0aW5nRW50aXR5U2V0Py5hbm5vdGF0aW9ucz8uU2Vzc2lvblxuXHRcdD8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZFxuXHRcdD8gdHJ1ZVxuXHRcdDogZmFsc2U7XG5cblx0cmV0dXJuIGJJc0RyYWZ0U3VwcG9ydGVkIHx8IGJJc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQ7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgY29uZmlndXJlZCBuZXdBY3Rpb24gaW50byBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMge2FueX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5ld0FjdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYW55IHtcblx0Y29uc3QgY3VycmVudEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IG5ld0FjdGlvbk5hbWU6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4gPSAoXG5cdFx0Y3VycmVudEVudGl0eVNldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uRHJhZnRSb290Py5OZXdBY3Rpb24gfHxcblx0XHRjdXJyZW50RW50aXR5U2V0Py5hbm5vdGF0aW9ucz8uU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8uTmV3QWN0aW9uXG5cdCk/LnRvU3RyaW5nKCk7XG5cdGlmIChuZXdBY3Rpb25OYW1lKSB7XG5cdFx0bGV0IGF2YWlsYWJsZVByb3BlcnR5OiBhbnkgPSBjb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlUeXBlKCkuYWN0aW9uc1tuZXdBY3Rpb25OYW1lXT8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZTtcblx0XHRhdmFpbGFibGVQcm9wZXJ0eSA9IGF2YWlsYWJsZVByb3BlcnR5ICE9PSB1bmRlZmluZWQgPyBhdmFpbGFibGVQcm9wZXJ0eSA6IHRydWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG5hbWU6IG5ld0FjdGlvbk5hbWUsXG5cdFx0XHRhdmFpbGFibGU6IGFubm90YXRpb25FeHByZXNzaW9uKGF2YWlsYWJsZVByb3BlcnR5KVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBhY3Rpb24gdmlzaWJpbGl0eSBjb25maWd1cmVkIGludG8gYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzQW5ub3RhdGlvblRlcm1cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYldpdGhOYXZpZ2F0aW9uUGF0aFxuICogQHJldHVybnMge0V4cHJlc3Npb248Ym9vbGVhbj59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FjdGlvbkFubm90YXRlZEhpZGRlbihcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c0Fubm90YXRpb25UZXJtOiBzdHJpbmcsXG5cdGJXaXRoTmF2aWdhdGlvblBhdGggPSB0cnVlXG4pOiBFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgY3VycmVudEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Ly8gQ29uc2lkZXIgb25seSB0aGUgbGFzdCBsZXZlbCBvZiBuYXZpZ2F0aW9uLiBUaGUgb3RoZXJzIGFyZSBhbHJlYWR5IGNvbnNpZGVyZWQgaW4gdGhlIGVsZW1lbnQgYmluZGluZyBvZiB0aGUgcGFnZS5cblx0Y29uc3QgdmlzaXRlZE5hdmlnYXRpb25QYXRocyA9XG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGggPiAwICYmIGJXaXRoTmF2aWdhdGlvblBhdGhcblx0XHRcdD8gW2RhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXNbZGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGggLSAxXS5uYW1lXVxuXHRcdFx0OiBbXTtcblx0Y29uc3QgYWN0aW9uQW5ub3RhdGlvblZhbHVlID1cblx0XHQoKGN1cnJlbnRFbnRpdHlTZXQ/LmFubm90YXRpb25zLlVJIGFzIGFueSk/LltzQW5ub3RhdGlvblRlcm1dIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPGJvb2xlYW4+KSB8fCBmYWxzZTtcblxuXHRyZXR1cm4gY3VycmVudEVudGl0eVNldFxuXHRcdD8gYW5ub3RhdGlvbkV4cHJlc3Npb24oYWN0aW9uQW5ub3RhdGlvblZhbHVlLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCB1bmRlZmluZWQsIChwYXRoOiBzdHJpbmcpID0+XG5cdFx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocylcblx0XHQgIClcblx0XHQ6IGNvbnN0YW50KGZhbHNlKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBhbm5vdGF0ZWQgcmVzdHJpY3Rpb25zIGZvciB0aGUgYWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIHtTdGFuZGFyZEFjdGlvbnNSZXN0cmljdGlvbnNUeXBlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBTdGFuZGFyZEFjdGlvbnNSZXN0cmljdGlvbnNUeXBlIHtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCByZXN0cmljdGlvbnNEZWYgPSBbXG5cdFx0e1xuXHRcdFx0a2V5OiBcImlzSW5zZXJ0YWJsZVwiLFxuXHRcdFx0XCJmdW5jdGlvblwiOiBpc1BhdGhJbnNlcnRhYmxlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRrZXk6IFwiaXNVcGRhdGFibGVcIixcblx0XHRcdFwiZnVuY3Rpb25cIjogaXNQYXRoVXBkYXRhYmxlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRrZXk6IFwiaXNEZWxldGFibGVcIixcblx0XHRcdFwiZnVuY3Rpb25cIjogaXNQYXRoRGVsZXRhYmxlXG5cdFx0fVxuXHRdO1xuXHRjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIEV4cHJlc3Npb25SZXN0cmljdGlvbnNUeXBlPiA9IHt9O1xuXHRyZXN0cmljdGlvbnNEZWYuZm9yRWFjaChmdW5jdGlvbiAoZGVmKSB7XG5cdFx0Y29uc3QgZGVmRnVuY3Rpb24gPSBkZWZbXCJmdW5jdGlvblwiXTtcblx0XHRyZXN1bHRbZGVmLmtleV0gPSB7XG5cdFx0XHRleHByZXNzaW9uOiBkZWZGdW5jdGlvbi5hcHBseShudWxsLCBbXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdFx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgbmF2aWdhdGlvblBhdGhzKVxuXHRcdFx0XHR9XG5cdFx0XHRdKSxcblx0XHRcdG5hdmlnYXRpb25FeHByZXNzaW9uOiBkZWZGdW5jdGlvbi5hcHBseShudWxsLCBbXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRpZ25vcmVUYXJnZXRDb2xsZWN0aW9uOiB0cnVlLFxuXHRcdFx0XHRcdGF1dGhvcml6ZVVucmVzb2x2YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdFx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgbmF2aWdhdGlvblBhdGhzKVxuXHRcdFx0XHR9XG5cdFx0XHRdKVxuXHRcdH07XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0ZW1wbGF0aW5nIGZvciBpbnNlcnQvdXBkYXRlIGFjdGlvbnMgaXMgbWFuZGF0b3J5LlxuICpcbiAqIEBwYXJhbSB7U3RhbmRhcmRBY3Rpb25zQ29udGV4dH0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIHtib29sZWFufSBpc0RyYWZ0T3JTdGlja3lcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNDcmVhdGVBbHdheXNIaWRkZW5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRpbmcoXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGlzRHJhZnRPclN0aWNreTogYm9vbGVhbixcblx0aXNDcmVhdGVBbHdheXNIaWRkZW46IGJvb2xlYW5cbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gKGlzRHJhZnRPclN0aWNreSB8fCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkV4dGVybmFsKSAmJiAhaXNDcmVhdGVBbHdheXNIaWRkZW47XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGFjdGlvbiBDcmVhdGUuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0ge1N0YW5kYXJkQWN0aW9uc0NvbnRleHR9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIHtTdGFuZGFyZEFjdGlvbkNvbmZpZ1R5cGV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvbkNyZWF0ZShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogU3RhbmRhcmRBY3Rpb25Db25maWdUeXBlIHtcblx0Y29uc3QgY3JlYXRlVmlzaWJpbGl0eSA9IGdldENyZWF0ZVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdHJldHVybiB7XG5cdFx0aXNUZW1wbGF0ZWQ6IGNvbXBpbGVCaW5kaW5nKGdldENyZWF0ZVRlbXBsYXRpbmcoc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgY3JlYXRlVmlzaWJpbGl0eSkpLFxuXHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKGNyZWF0ZVZpc2liaWxpdHkpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVCaW5kaW5nKGdldENyZWF0ZUVuYWJsZW1lbnQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgY3JlYXRlVmlzaWJpbGl0eSkpXG5cdH07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGFjdGlvbiBEZWxldGUuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0ge1N0YW5kYXJkQWN0aW9uc0NvbnRleHR9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIHtTdGFuZGFyZEFjdGlvbkNvbmZpZ1R5cGV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvbkRlbGV0ZShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogU3RhbmRhcmRBY3Rpb25Db25maWdUeXBlIHtcblx0Y29uc3QgZGVsZXRlVmlzaWJpbGl0eSA9IGdldERlbGV0ZVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cblx0cmV0dXJuIHtcblx0XHRpc1RlbXBsYXRlZDogY29tcGlsZUJpbmRpbmcoZ2V0RGVmYXVsdFRlbXBsYXRpbmcoZGVsZXRlVmlzaWJpbGl0eSkpLFxuXHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKGRlbGV0ZVZpc2liaWxpdHkpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVCaW5kaW5nKGdldERlbGV0ZUVuYWJsZW1lbnQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgZGVsZXRlVmlzaWJpbGl0eSkpXG5cdH07XG59XG5cbi8qKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBTdGFuZGFyZEFjdGlvbkNvbmZpZ1R5cGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0aW9uUm93KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBTdGFuZGFyZEFjdGlvbkNvbmZpZ1R5cGUge1xuXHRjb25zdCBjcmVhdGlvblJvd1Zpc2liaWxpdHkgPSBnZXRDcmVhdGVWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIHRydWUpO1xuXG5cdHJldHVybiB7XG5cdFx0aXNUZW1wbGF0ZWQ6IGNvbXBpbGVCaW5kaW5nKGdldENyZWF0ZVRlbXBsYXRpbmcoc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgY3JlYXRpb25Sb3dWaXNpYmlsaXR5LCB0cnVlKSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUJpbmRpbmcoY3JlYXRpb25Sb3dWaXNpYmlsaXR5KSxcblx0XHRlbmFibGVkOiBjb21waWxlQmluZGluZyhnZXRDcmVhdGlvblJvd0VuYWJsZW1lbnQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgY3JlYXRpb25Sb3dWaXNpYmlsaXR5KSlcblx0fTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgYWN0aW9uIFBhc3RlLlxuICpcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHtTdGFuZGFyZEFjdGlvbnNDb250ZXh0fSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZFxuICogQHJldHVybnMge1N0YW5kYXJkQWN0aW9uQ29uZmlnVHlwZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uUGFzdGUoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZDogYm9vbGVhblxuKTogU3RhbmRhcmRBY3Rpb25Db25maWdUeXBlIHtcblx0Y29uc3QgY3JlYXRlVmlzaWJpbGl0eSA9IGdldENyZWF0ZVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdGNvbnN0IGNyZWF0ZUVuYWJsZW1lbnQgPSBnZXRDcmVhdGVFbmFibGVtZW50KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGNyZWF0ZVZpc2liaWxpdHkpO1xuXHRjb25zdCBwYXN0ZVZpc2liaWxpdHkgPSBnZXRQYXN0ZVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgY3JlYXRlVmlzaWJpbGl0eSwgaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkKTtcblx0cmV0dXJuIHtcblx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhwYXN0ZVZpc2liaWxpdHkpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVCaW5kaW5nKGdldFBhc3RlRW5hYmxlbWVudChwYXN0ZVZpc2liaWxpdHksIGNyZWF0ZUVuYWJsZW1lbnQpKVxuXHR9O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBhY3Rpb24gTWFzc0VkaXQuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0ge1N0YW5kYXJkQWN0aW9uc0NvbnRleHR9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIHtTdGFuZGFyZEFjdGlvbkNvbmZpZ1R5cGV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvbk1hc3NFZGl0KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBTdGFuZGFyZEFjdGlvbkNvbmZpZ1R5cGUge1xuXHRjb25zdCBtYXNzRWRpdFZpc2liaWxpdHkgPSBnZXRNYXNzRWRpdFZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cblx0cmV0dXJuIHtcblx0XHRpc1RlbXBsYXRlZDogY29tcGlsZUJpbmRpbmcoZ2V0RGVmYXVsdFRlbXBsYXRpbmcobWFzc0VkaXRWaXNpYmlsaXR5KSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUJpbmRpbmcobWFzc0VkaXRWaXNpYmlsaXR5KSxcblx0XHRlbmFibGVkOiBjb21waWxlQmluZGluZyhnZXRNYXNzRWRpdEVuYWJsZW1lbnQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgbWFzc0VkaXRWaXNpYmlsaXR5KSlcblx0fTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSB0ZW1wbGF0aW5nIG9mIHRoZSBhY3Rpb24gQ3JlYXRlLlxuICpcbiAqIEBwYXJhbSB7U3RhbmRhcmRBY3Rpb25zQ29udGV4dH0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBjcmVhdGVWaXNpYmlsaXR5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzRm9yQ3JlYXRpb25Sb3dcbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+IH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0ZVRlbXBsYXRpbmcoXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGNyZWF0ZVZpc2liaWxpdHk6IEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdGlzRm9yQ3JlYXRpb25Sb3cgPSBmYWxzZVxuKTogRXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdC8vVGVtcGxhdGluZyBvZiBDcmVhdGUgQnV0dG9uIGlzIG5vdCBkb25lOlxuXHQvLyBcdCAtIElmIEJ1dHRvbiBpcyBuZXZlciB2aXNpYmxlKGNvdmVyZWQgdGhlIEV4dGVybmFsIGNyZWF0ZSBidXR0b24sIG5ldyBBY3Rpb24pXG5cdC8vXHQgLSBvciBDcmVhdGlvbk1vZGUgaXMgb24gQ3JlYXRpb25Sb3cgZm9yIENyZWF0ZSBCdXR0b25cblx0Ly9cdCAtIG9yIENyZWF0aW9uTW9kZSBpcyBub3Qgb24gQ3JlYXRpb25Sb3cgZm9yIENyZWF0aW9uUm93IEJ1dHRvblxuXG5cdHJldHVybiBhbmQoXG5cdFx0Ly9YTk9SIGdhdGVcblx0XHRvcihcblx0XHRcdGFuZChpc0ZvckNyZWF0aW9uUm93LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93KSxcblx0XHRcdGFuZCghaXNGb3JDcmVhdGlvblJvdywgc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5jcmVhdGlvbk1vZGUgIT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdylcblx0XHQpLFxuXHRcdG9yKG5vdChpc0NvbnN0YW50KGNyZWF0ZVZpc2liaWxpdHkpKSwgY3JlYXRlVmlzaWJpbGl0eSlcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSB0ZW1wbGF0aW5nIG9mIHRoZSBub24tQ3JlYXRlIGFjdGlvbnMuXG4gKlxuICogQHBhcmFtIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBhY3Rpb25WaXNpYmlsaXR5XG4gKiBAcmV0dXJucyB7RXhwcmVzc2lvbjxib29sZWFuPiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0VGVtcGxhdGluZyhhY3Rpb25WaXNpYmlsaXR5OiBFeHByZXNzaW9uPGJvb2xlYW4+KTogRXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBvcihub3QoaXNDb25zdGFudChhY3Rpb25WaXNpYmlsaXR5KSksIGFjdGlvblZpc2liaWxpdHkpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHByb3BlcnR5IHZpc2libGUgb2YgdGhlIGFjdGlvbiBDcmVhdGUuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0ge1N0YW5kYXJkQWN0aW9uc0NvbnRleHR9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNGb3JDcmVhdGlvblJvd1xuICogQHJldHVybnMge0V4cHJlc3Npb248Ym9vbGVhbj4gfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRlVmlzaWJpbGl0eShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0aXNGb3JDcmVhdGlvblJvdyA9IGZhbHNlXG4pOiBFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgaXNJbnNlcnRhYmxlID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNJbnNlcnRhYmxlLmV4cHJlc3Npb247XG5cdGNvbnN0IGlzQ3JlYXRlSGlkZGVuID0gaXNGb3JDcmVhdGlvblJvd1xuXHRcdD8gaXNBY3Rpb25Bbm5vdGF0ZWRIaWRkZW4oY29udmVydGVyQ29udGV4dCwgQW5ub3RhdGlvbkhpZGRlblByb3BlcnR5LkNyZWF0ZUhpZGRlbiwgZmFsc2UpXG5cdFx0OiBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmhpZGRlbkFubm90YXRpb24uY3JlYXRlO1xuXHRjb25zdCBuZXdBY3Rpb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0Lm5ld0FjdGlvbjtcblx0Ly9DcmVhdGUgQnV0dG9uIGlzIHZpc2libGU6XG5cdC8vIFx0IC0gSWYgdGhlIGNyZWF0aW9uIG1vZGUgaXMgZXh0ZXJuYWxcblx0Ly8gICAgICAtIElmIHdlJ3JlIG9uIHRoZSBsaXN0IHJlcG9ydCBhbmQgY3JlYXRlIGlzIG5vdCBoaWRkZW5cblx0Ly9cdFx0LSBPdGhlcndpc2UgdGhpcyBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiB0aGUgdGhlIFVJLklzRWRpdGFibGVcblx0Ly9cdCAtIE90aGVyd2lzZVxuXHQvL1x0XHQtIElmIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaXMgdmFsaWQgdGhlbiBjcmVhdGUgYnV0dG9uIGlzbid0IHZpc2libGVcblx0Ly9cdFx0XHQtIG5vIG5ld0FjdGlvbiBhdmFpbGFibGVzXG5cdC8vXHRcdFx0LSBJdCdzIG5vdCBpbnNlcnRhYmxlIGFuZCB0aGVyZSBpcyBub3QgYSBuZXcgYWN0aW9uXG5cdC8vXHRcdFx0LSBjcmVhdGUgaXMgaGlkZGVuXG5cdC8vXHRcdFx0LSBUaGVyZSBhcmUgbXVsdGlwbGUgdmlzaWFsaXphdGlvbnNcblx0Ly9cdFx0XHQtIEl0J3MgYW4gQW5hbHl0aWNhbCBMaXN0IFBhZ2Vcblx0Ly9cdFx0XHQtIFVzZXMgSW5saW5lQ3JlYXRpb25Sb3dzIG1vZGUgYW5kIGEgUmVzcG9zaXZlIHRhYmxlIHR5cGVcblx0Ly8gICAtIE90aGVyd2lzZVxuXHQvLyBcdCBcdC0gSWYgd2UncmUgb24gdGhlIGxpc3QgcmVwb3J0IC0+XG5cdC8vIFx0IFx0XHQtIElmIFVJLkNyZWF0ZUhpZGRlbiBwb2ludHMgdG8gYSBwcm9wZXJ0eSBwYXRoIC0+IHByb3ZpZGUgYSBuZWdhdGVkIGJpbmRpbmcgdG8gdGhpcyBwYXRoXG5cdC8vIFx0IFx0XHQtIE90aGVyd2lzZSwgY3JlYXRlIGlzIHZpc2libGVcblx0Ly8gXHQgXHQtIE90aGVyd2lzZVxuXHQvLyBcdCAgXHQgLSBUaGlzIGRlcGVuZHMgb24gdGhlIHZhbHVlIG9mIHRoZSB0aGUgVUkuSXNFZGl0YWJsZVxuXHRyZXR1cm4gaWZFbHNlKFxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuRXh0ZXJuYWwsXG5cdFx0YW5kKG5vdChpc0NyZWF0ZUhpZGRlbiksIG9yKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0LCBVSS5Jc0VkaXRhYmxlKSksXG5cdFx0aWZFbHNlKFxuXHRcdFx0b3IoXG5cdFx0XHRcdGFuZChpc0NvbnN0YW50KG5ld0FjdGlvbj8uYXZhaWxhYmxlKSwgZXF1YWwobmV3QWN0aW9uPy5hdmFpbGFibGUsIGZhbHNlKSksXG5cdFx0XHRcdGFuZChpc0NvbnN0YW50KGlzSW5zZXJ0YWJsZSksIGVxdWFsKGlzSW5zZXJ0YWJsZSwgZmFsc2UpLCAhbmV3QWN0aW9uKSxcblx0XHRcdFx0YW5kKGlzQ29uc3RhbnQoaXNDcmVhdGVIaWRkZW4pLCBlcXVhbChpc0NyZWF0ZUhpZGRlbiwgdHJ1ZSkpLFxuXHRcdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmlzVmlld1dpdGhNdWx0aXBsZVZpc3VhbGl6YXRpb25zLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlLFxuXHRcdFx0XHRhbmQoXG5cdFx0XHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5JbmxpbmVDcmVhdGlvblJvd3MsXG5cdFx0XHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbj8udHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIlxuXHRcdFx0XHQpXG5cdFx0XHQpLFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0LFxuXHRcdFx0XHRvcihub3QoaXNCaW5kaW5nKGlzQ3JlYXRlSGlkZGVuKSksIG5vdChpc0NyZWF0ZUhpZGRlbikpLFxuXHRcdFx0XHRhbmQobm90KGlzQ3JlYXRlSGlkZGVuKSwgVUkuSXNFZGl0YWJsZSlcblx0XHRcdClcblx0XHQpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHkgdmlzaWJsZSBvZiB0aGUgYWN0aW9uIERlbGV0ZS5cbiAqXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSB7U3RhbmRhcmRBY3Rpb25zQ29udGV4dH0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMge0V4cHJlc3Npb248Ym9vbGVhbj4gfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZXRlVmlzaWJpbGl0eShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogRXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGlzRGVsZXRlSGlkZGVuID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5oaWRkZW5Bbm5vdGF0aW9uLmRlbGV0ZTtcblx0Y29uc3QgcGF0aERlbGV0YWJsZUV4cHJlc3Npb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc0RlbGV0YWJsZS5leHByZXNzaW9uO1xuXG5cdC8vRGVsZXRlIEJ1dHRvbiBpcyB2aXNpYmxlOlxuXHQvLyBcdCBQcmVyZXF1aXNpdGVzOlxuXHQvL1x0IC0gSWYgd2UncmUgbm90IG9uIG11bHRpcGxlIHZpc3VhbGl6YXRpb25zIGNvbmZpZ3VyYXRpb24gb3IgQUxQXG5cdC8vXG5cdC8vICAgLSBJZiByZXN0cmljdGlvbnMgb24gZGVsZXRhYmxlIHNldCB0byBmYWxzZSAtPiBub3QgdmlzaWJsZVxuXHQvLyAgIC0gT3RoZXJ3aXNlXG5cdC8vXHRcdFx0LSBJZiBVSS5EZWxldGVIaWRkZW4gaXMgdHJ1ZSAtPiBub3QgdmlzaWJsZVxuXHQvL1x0XHRcdC0gT3RoZXJ3aXNlXG5cdC8vIFx0IFx0XHRcdC0gSWYgd2UncmUgb24gT1AgLT4gZGVwZW5kaW5nIGlmIFVJIGlzIGVkaXRhYmxlIGFuZCByZXN0cmljdGlvbnMgb24gZGVsZXRhYmxlXG5cdC8vXHRcdFx0XHQtIE90aGVyd2lzZVxuXHQvL1x0XHRcdFx0IFx0LSBJZiBVSS5EZWxldGVIaWRkZW4gcG9pbnRzIHRvIGEgcHJvcGVydHkgcGF0aCAtPiBwcm92aWRlIGEgbmVnYXRlZCBiaW5kaW5nIHRvIHRoaXMgcGF0aFxuXHQvL1x0IFx0IFx0XHQgXHQtIE90aGVyd2lzZSwgZGVsZXRlIGlzIHZpc2libGVcblxuXHRyZXR1cm4gaWZFbHNlKFxuXHRcdG9yKHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuaXNWaWV3V2l0aE11bHRpcGxlVmlzdWFsaXphdGlvbnMsIGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2UpLFxuXHRcdGZhbHNlLFxuXHRcdGlmRWxzZShcblx0XHRcdGFuZChpc0NvbnN0YW50KHBhdGhEZWxldGFibGVFeHByZXNzaW9uKSwgZXF1YWwocGF0aERlbGV0YWJsZUV4cHJlc3Npb24sIGZhbHNlKSksXG5cdFx0XHRmYWxzZSxcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0YW5kKGlzQ29uc3RhbnQoaXNEZWxldGVIaWRkZW4pLCBlcXVhbChpc0RlbGV0ZUhpZGRlbiwgY29uc3RhbnQodHJ1ZSkpKSxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCxcblx0XHRcdFx0XHRhbmQobm90KGlzRGVsZXRlSGlkZGVuKSwgVUkuSXNFZGl0YWJsZSksXG5cdFx0XHRcdFx0bm90KGFuZChpc0JpbmRpbmcoaXNEZWxldGVIaWRkZW4pLCBpc0RlbGV0ZUhpZGRlbikpXG5cdFx0XHRcdClcblx0XHRcdClcblx0XHQpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHkgdmlzaWJsZSBvZiB0aGUgYWN0aW9uIFBhc3RlLlxuICpcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHtTdGFuZGFyZEFjdGlvbnNDb250ZXh0fSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0ge0V4cHJlc3Npb248Ym9vbGVhbj59IGNyZWF0ZVZpc2liaWxpdHlcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkXG4gKiBAcmV0dXJucyB7RXhwcmVzc2lvbjxib29sZWFuPiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXN0ZVZpc2liaWxpdHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGNyZWF0ZVZpc2liaWxpdHk6IEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZDogYm9vbGVhblxuKTogRXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdC8vIElmIENyZWF0ZSBpcyB2aXNpYmxlLCBlbmFibGVQYXN0ZSBpcyBub3QgZGlzYWJsZWQgaW50byBtYW5pZmVzdCBhbmQgd2UgYXJlIG9uIE9QL2Jsb2NrcyBvdXRzaWRlIEZpb3JpIGVsZW1lbnRzIHRlbXBsYXRlc1xuXHQvLyBUaGVuIGJ1dHRvbiB3aWxsIGJlIHZpc2libGUgYWNjb3JkaW5nIHRvIGluc2VydGFibGUgcmVzdHJpY3Rpb25zIGFuZCBjcmVhdGUgdmlzaWJpbGl0eVxuXHQvLyBPdGhlcndpc2UgaXQncyBub3QgdmlzaWJsZVxuXHRyZXR1cm4gYW5kKFxuXHRcdG5vdEVxdWFsKHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uZW5hYmxlUGFzdGUsIGZhbHNlKSxcblx0XHRjcmVhdGVWaXNpYmlsaXR5LFxuXHRcdGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZCxcblx0XHRbVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQsIFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2VdLmluZGV4T2YoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSkgPT09IC0xLFxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzSW5zZXJ0YWJsZS5leHByZXNzaW9uXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHkgdmlzaWJsZSBvZiB0aGUgYWN0aW9uIE1hc3NFZGl0LlxuICpcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHtTdGFuZGFyZEFjdGlvbnNDb250ZXh0fSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyB7RXhwcmVzc2lvbjxib29sZWFuPiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXNzRWRpdFZpc2liaWxpdHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBpc1VwZGF0ZUhpZGRlbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuaGlkZGVuQW5ub3RhdGlvbi51cGRhdGUsXG5cdFx0cGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5leHByZXNzaW9uLFxuXHRcdGJNYXNzRWRpdEVuYWJsZWRJbk1hbmlmZXN0OiBib29sZWFuID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbj8uZW5hYmxlTWFzc0VkaXQgfHwgZmFsc2U7XG5cdGNvbnN0IHRlbXBsYXRlQmluZGluZ0V4cHJlc3Npb24gPVxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlXG5cdFx0XHQ/IFVJLklzRWRpdGFibGVcblx0XHRcdDogY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQ7XG5cdC8vTWFzc0VkaXQgaXMgdmlzaWJsZVxuXHQvLyBJZlxuXHQvL1x0XHQtIHRoZXJlIGlzIG5vIHN0YXRpYyByZXN0cmljdGlvbnMgc2V0IHRvIGZhbHNlXG5cdC8vXHRcdC0gYW5kIGVuYWJsZU1hc3NFZGl0IGlzIG5vdCBzZXQgdG8gZmFsc2UgaW50byB0aGUgbWFuaWZlc3Rcblx0Ly9cdFx0LSBhbmQgdGhlIHNlbGVjdGlvbk1vZGUgaXMgcmVsZXZhbnRcblx0Ly9cdFRoZW4gTWFzc0VkaXQgaXMgYWx3YXlzIHZpc2libGUgaW4gTFIgb3IgZHluYW1pY2FsbHkgdmlzaWJsZSBpbiBPUCBhY2NvcmRpbmcgdG8gdWk+RWRpdGFibGUgYW5kIGhpZGRlbkFubm90YXRpb25cblx0Ly8gIEJ1dHRvbiBpcyBoaWRkZW4gZm9yIGFsbCBvdGhlciBjYXNlc1xuXHRyZXR1cm4gYW5kKFxuXHRcdG5vdChhbmQoaXNDb25zdGFudChwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiksIGVxdWFsKHBhdGhVcGRhdGFibGVFeHByZXNzaW9uLCBmYWxzZSkpKSxcblx0XHRiTWFzc0VkaXRFbmFibGVkSW5NYW5pZmVzdCxcblx0XHR0ZW1wbGF0ZUJpbmRpbmdFeHByZXNzaW9uLFxuXHRcdG5vdChpc1VwZGF0ZUhpZGRlbilcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBwcm9wZXJ0eSBlbmFibGVkIG9mIHRoZSBjcmVhdGlvblJvdy5cbiAqXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSB7U3RhbmRhcmRBY3Rpb25zQ29udGV4dH0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBjcmVhdGlvblJvd1Zpc2liaWxpdHlcbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+IH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0aW9uUm93RW5hYmxlbWVudChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0Y3JlYXRpb25Sb3dWaXNpYmlsaXR5OiBFeHByZXNzaW9uPGJvb2xlYW4+XG4pOiBFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgcmVzdHJpY3Rpb25zSW5zZXJ0YWJsZSA9IGlzUGF0aEluc2VydGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIHtcblx0XHRpZ25vcmVUYXJnZXRDb2xsZWN0aW9uOiB0cnVlLFxuXHRcdGF1dGhvcml6ZVVucmVzb2x2YWJsZTogdHJ1ZSxcblx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT4ge1xuXHRcdFx0aWYgKHBhdGguaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRcdFx0cGF0aCA9IHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgbmF2aWdhdGlvblBhdGhzKTtcblx0XHRcdFx0cmV0dXJuIHBhdGg7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBuYXZpZ2F0aW9uUHJvcGVydGllcyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLm5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXHRcdFx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0aWVzKSB7XG5cdFx0XHRcdGNvbnN0IHBhcnRuZXIgPSBuYXZpZ2F0aW9uUHJvcGVydGllc1tuYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGggLSAxXS5wYXJ0bmVyO1xuXHRcdFx0XHRpZiAocGFydG5lcikge1xuXHRcdFx0XHRcdHBhdGggPSBgJHtwYXJ0bmVyfS8ke3BhdGh9YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHBhdGg7XG5cdFx0fVxuXHR9KTtcblx0Y29uc3QgaXNJbnNlcnRhYmxlID1cblx0XHRyZXN0cmljdGlvbnNJbnNlcnRhYmxlLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiXG5cdFx0XHQ/IGlzUGF0aEluc2VydGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIHtcblx0XHRcdFx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZykgPT4gc2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLCBbXSlcblx0XHRcdCAgfSlcblx0XHRcdDogcmVzdHJpY3Rpb25zSW5zZXJ0YWJsZTtcblxuXHRyZXR1cm4gYW5kKFxuXHRcdGNyZWF0aW9uUm93VmlzaWJpbGl0eSxcblx0XHRpc0luc2VydGFibGUsXG5cdFx0b3IoXG5cdFx0XHQhc3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5kaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhLFxuXHRcdFx0Zm9ybWF0UmVzdWx0KFtiaW5kaW5nRXhwcmVzc2lvbihcImNyZWF0aW9uUm93RmllbGRWYWxpZGl0eVwiLCBcImludGVybmFsXCIpXSwgdGFibGVGb3JtYXR0ZXJzLnZhbGlkYXRlQ3JlYXRpb25Sb3dGaWVsZHMpXG5cdFx0KVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHByb3BlcnR5IGVuYWJsZWQgb2YgdGhlIGFjdGlvbiBDcmVhdGUuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0ge1N0YW5kYXJkQWN0aW9uc0NvbnRleHR9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSB7RXhwcmVzc2lvbjxib29sZWFuPn0gY3JlYXRlVmlzaWJpbGl0eVxuICogQHJldHVybnMge0V4cHJlc3Npb248Ym9vbGVhbj4gfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRlRW5hYmxlbWVudChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0Y3JlYXRlVmlzaWJpbGl0eTogRXhwcmVzc2lvbjxib29sZWFuPlxuKTogRXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGlzSW5zZXJ0YWJsZSA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzSW5zZXJ0YWJsZS5leHByZXNzaW9uO1xuXHRjb25zdCBDb2xsZWN0aW9uVHlwZSA9IGNvbnZlcnRlckNvbnRleHQucmVzb2x2ZUFic29sdXRlUGF0aDxhbnk+KHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuY29sbGVjdGlvblBhdGgpLnRhcmdldD8uX3R5cGU7XG5cdHJldHVybiBhbmQoXG5cdFx0Y3JlYXRlVmlzaWJpbGl0eSxcblx0XHRvcihcblx0XHRcdENvbGxlY3Rpb25UeXBlID09PSBcIkVudGl0eVNldFwiLFxuXHRcdFx0YW5kKGlzSW5zZXJ0YWJsZSwgb3IoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UsIFVJLklzRWRpdGFibGUpKVxuXHRcdClcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBwcm9wZXJ0eSBlbmFibGVkIG9mIHRoZSBhY3Rpb24gRGVsZXRlLlxuICpcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHtTdGFuZGFyZEFjdGlvbnNDb250ZXh0fSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0ge0V4cHJlc3Npb248Ym9vbGVhbj59IGRlbGV0ZVZpc2liaWxpdHlcbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+IH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlbGV0ZUVuYWJsZW1lbnQoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGRlbGV0ZVZpc2liaWxpdHk6IEV4cHJlc3Npb248Ym9vbGVhbj5cbik6IEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBpc0RlbGV0YWJsZSA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzRGVsZXRhYmxlLmV4cHJlc3Npb247XG5cdGNvbnN0IGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkgPVxuXHRcdCFpc0NvbnN0YW50KGlzRGVsZXRhYmxlKSAmJiBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc0RlbGV0YWJsZS5uYXZpZ2F0aW9uRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIjtcblx0Y29uc3QgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzID0gYmluZGluZ0V4cHJlc3Npb24oXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKTtcblx0Y29uc3QgbnVtYmVyT2ZEZWxldGFibGVDb250ZXh0cyA9IGJpbmRpbmdFeHByZXNzaW9uKFwiZGVsZXRhYmxlQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKTtcblx0Y29uc3QgbnVtYmVyT2ZVblNhdmVkQ29udGV4dHMgPSBiaW5kaW5nRXhwcmVzc2lvbihcInVuU2F2ZWRDb250ZXh0c1wiLCBcImludGVybmFsXCIpO1xuXG5cdHJldHVybiBhbmQoXG5cdFx0ZGVsZXRlVmlzaWJpbGl0eSxcblx0XHRpZkVsc2UoXG5cdFx0XHRvcihjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZSwgaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSksXG5cdFx0XHRhbmQoXG5cdFx0XHRcdG9yKFxuXHRcdFx0XHRcdGFuZChub3RFcXVhbChudW1iZXJPZkRlbGV0YWJsZUNvbnRleHRzLCB1bmRlZmluZWQpLCBncmVhdGVyVGhhbihsZW5ndGgobnVtYmVyT2ZEZWxldGFibGVDb250ZXh0cyksIDApKSxcblx0XHRcdFx0XHRhbmQobm90RXF1YWwobnVtYmVyT2ZVblNhdmVkQ29udGV4dHMsIHVuZGVmaW5lZCksIGdyZWF0ZXJUaGFuKGxlbmd0aChudW1iZXJPZlVuU2F2ZWRDb250ZXh0cyksIDApKVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRiaW5kaW5nRXhwcmVzc2lvbihcImRlbGV0ZUVuYWJsZWRcIiwgXCJpbnRlcm5hbFwiKVxuXHRcdFx0KSxcblx0XHRcdGFuZChub3RFcXVhbChudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMsIDApLCBpc0RlbGV0YWJsZSlcblx0XHQpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHkgZW5hYmxlZCBvZiB0aGUgYWN0aW9uIFBhc3RlLlxuICpcbiAqIEBwYXJhbSB7RXhwcmVzc2lvbjxib29sZWFuPn0gcGFzdGVWaXNpYmlsaXR5XG4gKiBAcGFyYW0ge0V4cHJlc3Npb248Ym9vbGVhbj59IGNyZWF0ZUVuYWJsZW1lbnRcbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+IH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhc3RlRW5hYmxlbWVudChwYXN0ZVZpc2liaWxpdHk6IEV4cHJlc3Npb248Ym9vbGVhbj4sIGNyZWF0ZUVuYWJsZW1lbnQ6IEV4cHJlc3Npb248Ym9vbGVhbj4pOiBFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGFuZChwYXN0ZVZpc2liaWxpdHksIGNyZWF0ZUVuYWJsZW1lbnQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHByb3BlcnR5IGVuYWJsZWQgb2YgdGhlIGFjdGlvbiBNYXNzRWRpdC5cbiAqXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSB7U3RhbmRhcmRBY3Rpb25zQ29udGV4dH0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBtYXNzRWRpdFZpc2liaWxpdHlcbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+IH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hc3NFZGl0RW5hYmxlbWVudChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0bWFzc0VkaXRWaXNpYmlsaXR5OiBFeHByZXNzaW9uPGJvb2xlYW4+XG4pOiBFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgcGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5leHByZXNzaW9uO1xuXHRjb25zdCBpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5OiBhbnkgPVxuXHRcdCFpc0NvbnN0YW50KHBhdGhVcGRhdGFibGVFeHByZXNzaW9uKSAmJlxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlLm5hdmlnYXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiO1xuXHRjb25zdCBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPSBncmVhdGVyT3JFcXVhbChiaW5kaW5nRXhwcmVzc2lvbihcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBcImludGVybmFsXCIpLCAxKTtcblx0Y29uc3QgbnVtYmVyT2ZVcGRhdGFibGVDb250ZXh0cyA9IGdyZWF0ZXJPckVxdWFsKGxlbmd0aChiaW5kaW5nRXhwcmVzc2lvbihcInVwZGF0YWJsZUNvbnRleHRzXCIsIFwiaW50ZXJuYWxcIikpLCAxKTtcblx0Y29uc3QgYklzRHJhZnRTdXBwb3J0ZWQgPSBpc0RyYWZ0U3VwcG9ydGVkKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBiRGlzcGxheU1vZGUgPSBpc0luRGlzcGxheU1vZGUoY29udmVydGVyQ29udGV4dCk7XG5cblx0Ly8gbnVtYmVyT2ZVcGRhdGFibGVDb250ZXh0cyBuZWVkcyB0byBiZSBhZGRlZCB0byB0aGUgYmluZGluZyBpbiBjYXNlXG5cdC8vIDEuIFVwZGF0ZSBpcyBkZXBlbmRlbnQgb24gY3VycmVudCBlbnRpdHkgcHJvcGVydHkgKGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkgaXMgdHJ1ZSkuXG5cdC8vIDIuIFRoZSB0YWJsZSBpcyByZWFkIG9ubHkgYW5kIGRyYWZ0IGVuYWJsZWQobGlrZSBMUiksIGluIHRoaXMgY2FzZSBvbmx5IGFjdGl2ZSBjb250ZXh0cyBjYW4gYmUgbWFzcyBlZGl0ZWQuXG5cdC8vICAgIFNvLCB1cGRhdGUgZGVwZW5kcyBvbiAnSXNBY3RpdmVFbnRpdHknIHZhbHVlIHdoaWNoIG5lZWRzIHRvIGJlIGNoZWNrZWQgcnVudGltZS5cblx0Y29uc3QgcnVudGltZUJpbmRpbmcgPSBpZkVsc2UoXG5cdFx0b3IoYW5kKGJEaXNwbGF5TW9kZSwgYklzRHJhZnRTdXBwb3J0ZWQpLCBpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5KSxcblx0XHRhbmQobnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzLCBudW1iZXJPZlVwZGF0YWJsZUNvbnRleHRzKSxcblx0XHRhbmQobnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzKVxuXHQpO1xuXG5cdHJldHVybiBhbmQobWFzc0VkaXRWaXNpYmlsaXR5LCBpZkVsc2UoaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSwgcnVudGltZUJpbmRpbmcsIGFuZChydW50aW1lQmluZGluZywgcGF0aFVwZGF0YWJsZUV4cHJlc3Npb24pKSk7XG59XG5cbi8qKlxuICogVGVsbHMgaWYgdGhlIHRhYmxlIGluIHRlbXBsYXRlIGlzIGluIGRpc3BsYXkgbW9kZS5cbiAqXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSB7Vmlld1BhdGhDb25maWd1cmF0aW9ufSB2aWV3Q29uZmlndXJhdGlvblxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0luRGlzcGxheU1vZGUoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgdmlld0NvbmZpZ3VyYXRpb24/OiBWaWV3UGF0aENvbmZpZ3VyYXRpb24pOiBib29sZWFuIHtcblx0Y29uc3QgdGVtcGxhdGVUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKTtcblx0aWYgKFxuXHRcdHRlbXBsYXRlVHlwZSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgfHxcblx0XHR0ZW1wbGF0ZVR5cGUgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2UgfHxcblx0XHQodmlld0NvbmZpZ3VyYXRpb24gJiYgY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKHZpZXdDb25maWd1cmF0aW9uKSlcblx0KSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0Ly8gdXBkYXRhYmxlIHdpbGwgYmUgaGFuZGxlZCBhdCB0aGUgcHJvcGVydHkgbGV2ZWxcblx0cmV0dXJuIGZhbHNlO1xufVxuIl19
602
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBbm5vdGF0aW9uSGlkZGVuUHJvcGVydHkiLCJnZW5lcmF0ZVN0YW5kYXJkQWN0aW9uc0NvbnRleHQiLCJjb252ZXJ0ZXJDb250ZXh0IiwiY3JlYXRpb25Nb2RlIiwidGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJ2aWV3Q29uZmlndXJhdGlvbiIsImNvbGxlY3Rpb25QYXRoIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJoaWRkZW5Bbm5vdGF0aW9uIiwiY3JlYXRlIiwiaXNBY3Rpb25Bbm5vdGF0ZWRIaWRkZW4iLCJDcmVhdGVIaWRkZW4iLCJEZWxldGVIaWRkZW4iLCJ1cGRhdGUiLCJVcGRhdGVIaWRkZW4iLCJpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQiLCJpc1ZpZXdXaXRoTXVsdGlwbGVWaXN1YWxpemF0aW9ucyIsImdldE1hbmlmZXN0V3JhcHBlciIsImhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMiLCJuZXdBY3Rpb24iLCJnZXROZXdBY3Rpb24iLCJyZXN0cmljdGlvbnMiLCJnZXRSZXN0cmljdGlvbnMiLCJpc0RyYWZ0U3VwcG9ydGVkIiwiY3VycmVudEVudGl0eVNldCIsImdldEVudGl0eVNldCIsImJJc0RyYWZ0Um9vdCIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiRHJhZnRSb290IiwiYklzRHJhZnROb2RlIiwiRHJhZnROb2RlIiwiYklzRHJhZnRQYXJlbnRFbnRpdHlGb3JDb250YWlubWVudCIsInRhcmdldE9iamVjdCIsImNvbnRhaW5zVGFyZ2V0Iiwic3RhcnRpbmdFbnRpdHlTZXQiLCJiSXNEcmFmdFN1cHBvcnRlZCIsImJJc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJTZXNzaW9uIiwiU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsIm5ld0FjdGlvbk5hbWUiLCJOZXdBY3Rpb24iLCJ0b1N0cmluZyIsImF2YWlsYWJsZVByb3BlcnR5IiwiZ2V0RW50aXR5VHlwZSIsImFjdGlvbnMiLCJDb3JlIiwiT3BlcmF0aW9uQXZhaWxhYmxlIiwidW5kZWZpbmVkIiwibmFtZSIsImF2YWlsYWJsZSIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsInNBbm5vdGF0aW9uVGVybSIsImJXaXRoTmF2aWdhdGlvblBhdGgiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwidmlzaXRlZE5hdmlnYXRpb25QYXRocyIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibGVuZ3RoIiwiYWN0aW9uQW5ub3RhdGlvblZhbHVlIiwiVUkiLCJwYXRoIiwic2luZ2xldG9uUGF0aFZpc2l0b3IiLCJnZXRDb252ZXJ0ZWRUeXBlcyIsImNvbnN0YW50IiwicmVzdHJpY3Rpb25zRGVmIiwia2V5IiwiaXNQYXRoSW5zZXJ0YWJsZSIsImlzUGF0aFVwZGF0YWJsZSIsImlzUGF0aERlbGV0YWJsZSIsInJlc3VsdCIsImZvckVhY2giLCJkZWYiLCJkZWZGdW5jdGlvbiIsImV4cHJlc3Npb24iLCJhcHBseSIsInBhdGhWaXNpdG9yIiwibmF2aWdhdGlvblBhdGhzIiwibmF2aWdhdGlvbkV4cHJlc3Npb24iLCJpZ25vcmVUYXJnZXRDb2xsZWN0aW9uIiwiYXV0aG9yaXplVW5yZXNvbHZhYmxlIiwiZ2V0SW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRpbmciLCJzdGFuZGFyZEFjdGlvbnNDb250ZXh0IiwiaXNEcmFmdE9yU3RpY2t5IiwiaXNDcmVhdGVBbHdheXNIaWRkZW4iLCJDcmVhdGlvbk1vZGUiLCJFeHRlcm5hbCIsImdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlIiwiY3JlYXRlVmlzaWJpbGl0eSIsImdldENyZWF0ZVZpc2liaWxpdHkiLCJpc1RlbXBsYXRlZCIsImNvbXBpbGVFeHByZXNzaW9uIiwiZ2V0Q3JlYXRlVGVtcGxhdGluZyIsInZpc2libGUiLCJlbmFibGVkIiwiZ2V0Q3JlYXRlRW5hYmxlbWVudCIsImdldFN0YW5kYXJkQWN0aW9uRGVsZXRlIiwiZGVsZXRlVmlzaWJpbGl0eSIsImdldERlbGV0ZVZpc2liaWxpdHkiLCJnZXREZWZhdWx0VGVtcGxhdGluZyIsImdldERlbGV0ZUVuYWJsZW1lbnQiLCJnZXRDcmVhdGlvblJvdyIsImNyZWF0aW9uUm93VmlzaWJpbGl0eSIsImdldENyZWF0aW9uUm93RW5hYmxlbWVudCIsImdldFN0YW5kYXJkQWN0aW9uUGFzdGUiLCJpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQiLCJjcmVhdGVFbmFibGVtZW50IiwicGFzdGVWaXNpYmlsaXR5IiwiZ2V0UGFzdGVWaXNpYmlsaXR5IiwiZ2V0UGFzdGVFbmFibGVtZW50IiwiZ2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdCIsIm1hc3NFZGl0VmlzaWJpbGl0eSIsImdldE1hc3NFZGl0VmlzaWJpbGl0eSIsImdldE1hc3NFZGl0RW5hYmxlbWVudCIsImlzRm9yQ3JlYXRpb25Sb3ciLCJhbmQiLCJvciIsIkNyZWF0aW9uUm93Iiwibm90IiwiaXNDb25zdGFudCIsImFjdGlvblZpc2liaWxpdHkiLCJpc0luc2VydGFibGUiLCJpc0NyZWF0ZUhpZGRlbiIsImlmRWxzZSIsImdldFRlbXBsYXRlVHlwZSIsIlRlbXBsYXRlVHlwZSIsIkxpc3RSZXBvcnQiLCJJc0VkaXRhYmxlIiwiZXF1YWwiLCJBbmFseXRpY2FsTGlzdFBhZ2UiLCJJbmxpbmVDcmVhdGlvblJvd3MiLCJ0eXBlIiwiaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24iLCJpc0RlbGV0ZUhpZGRlbiIsImRlbGV0ZSIsInBhdGhEZWxldGFibGVFeHByZXNzaW9uIiwiaXNEZWxldGFibGUiLCJub3RFcXVhbCIsImVuYWJsZVBhc3RlIiwiaW5kZXhPZiIsImlzVXBkYXRlSGlkZGVuIiwicGF0aFVwZGF0YWJsZUV4cHJlc3Npb24iLCJpc1VwZGF0YWJsZSIsImJNYXNzRWRpdEVuYWJsZWRJbk1hbmlmZXN0IiwiZW5hYmxlTWFzc0VkaXQiLCJ0ZW1wbGF0ZUJpbmRpbmdFeHByZXNzaW9uIiwiT2JqZWN0UGFnZSIsInJlc3RyaWN0aW9uc0luc2VydGFibGUiLCJwYXJ0bmVyIiwiX3R5cGUiLCJkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIiwiZm9ybWF0UmVzdWx0IiwicGF0aEluTW9kZWwiLCJ0YWJsZUZvcm1hdHRlcnMiLCJ2YWxpZGF0ZUNyZWF0aW9uUm93RmllbGRzIiwiQ29sbGVjdGlvblR5cGUiLCJyZXNvbHZlQWJzb2x1dGVQYXRoIiwidGFyZ2V0IiwiaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSIsIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyIsIm51bWJlck9mRGVsZXRhYmxlQ29udGV4dHMiLCJudW1iZXJPZlVuU2F2ZWRDb250ZXh0cyIsImdyZWF0ZXJUaGFuIiwiZ3JlYXRlck9yRXF1YWwiLCJudW1iZXJPZlVwZGF0YWJsZUNvbnRleHRzIiwiYkRpc3BsYXlNb2RlIiwiaXNJbkRpc3BsYXlNb2RlIiwicnVudGltZUJpbmRpbmciLCJ0ZW1wbGF0ZVR5cGUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlN0YW5kYXJkQWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0YWJsZUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVGFibGVGb3JtYXR0ZXJcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRhbmQsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0ZXF1YWwsXG5cdGZvcm1hdFJlc3VsdCxcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRncmVhdGVyT3JFcXVhbCxcblx0Z3JlYXRlclRoYW4sXG5cdGlmRWxzZSxcblx0aXNDb25zdGFudCxcblx0aXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24sXG5cdGxlbmd0aCxcblx0bm90LFxuXHRub3RFcXVhbCxcblx0b3IsXG5cdHBhdGhJbk1vZGVsXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBnZXRUYXJnZXRPYmplY3RQYXRoLCBpc1BhdGhEZWxldGFibGUsIGlzUGF0aEluc2VydGFibGUsIGlzUGF0aFVwZGF0YWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7IHNpbmdsZXRvblBhdGhWaXNpdG9yLCBVSSB9IGZyb20gXCIuLi8uLi8uLi9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgVmlld1BhdGhDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IENyZWF0aW9uTW9kZSwgVGVtcGxhdGVUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgVGFibGVDb250cm9sQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi9UYWJsZVwiO1xuXG5lbnVtIEFubm90YXRpb25IaWRkZW5Qcm9wZXJ0eSB7XG5cdENyZWF0ZUhpZGRlbiA9IFwiQ3JlYXRlSGlkZGVuXCIsXG5cdERlbGV0ZUhpZGRlbiA9IFwiRGVsZXRlSGlkZGVuXCIsXG5cdFVwZGF0ZUhpZGRlbiA9IFwiVXBkYXRlSGlkZGVuXCJcbn1cblxuZXhwb3J0IHR5cGUgU3RhbmRhcmRBY3Rpb25Db25maWdUeXBlID0ge1xuXHRpc1RlbXBsYXRlZD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHR2aXNpYmxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0ZW5hYmxlZDogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG59O1xuXG50eXBlIEV4cHJlc3Npb25SZXN0cmljdGlvbnNUeXBlID0ge1xuXHRleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdG5hdmlnYXRpb25FeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG59O1xudHlwZSBTdGFuZGFyZEFjdGlvbnNSZXN0cmljdGlvbnNUeXBlID0gUmVjb3JkPHN0cmluZywgRXhwcmVzc2lvblJlc3RyaWN0aW9uc1R5cGU+O1xuXG5leHBvcnQgdHlwZSBTdGFuZGFyZEFjdGlvbnNDb250ZXh0ID0ge1xuXHRjb2xsZWN0aW9uUGF0aDogc3RyaW5nO1xuXHRoaWRkZW5Bbm5vdGF0aW9uOiB7XG5cdFx0Y3JlYXRlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdFx0XCJkZWxldGVcIjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRcdHVwZGF0ZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHR9O1xuXHRjcmVhdGlvbk1vZGU6IENyZWF0aW9uTW9kZTtcblx0aXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkOiBib29sZWFuO1xuXHRpc1ZpZXdXaXRoTXVsdGlwbGVWaXN1YWxpemF0aW9uczogYm9vbGVhbjtcblx0bmV3QWN0aW9uPzoge1xuXHRcdG5hbWU/OiBzdHJpbmc7XG5cdFx0YXZhaWxhYmxlPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHR9O1xuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbjtcblx0cmVzdHJpY3Rpb25zOiBTdGFuZGFyZEFjdGlvbnNSZXN0cmljdGlvbnNUeXBlO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNvbnRleHQgZm9yIHRoZSBzdGFuZGFyZCBhY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gY3JlYXRpb25Nb2RlXG4gKiBAcGFyYW0gdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSB2aWV3Q29uZmlndXJhdGlvblxuICogQHJldHVybnMgIFRoZSBjb250ZXh0IGZvciB0YWJsZSBhY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVN0YW5kYXJkQWN0aW9uc0NvbnRleHQoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlLFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbixcblx0dmlld0NvbmZpZ3VyYXRpb24/OiBWaWV3UGF0aENvbmZpZ3VyYXRpb25cbik6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQge1xuXHRyZXR1cm4ge1xuXHRcdGNvbGxlY3Rpb25QYXRoOiBnZXRUYXJnZXRPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKSxcblx0XHRoaWRkZW5Bbm5vdGF0aW9uOiB7XG5cdFx0XHRjcmVhdGU6IGlzQWN0aW9uQW5ub3RhdGVkSGlkZGVuKGNvbnZlcnRlckNvbnRleHQsIEFubm90YXRpb25IaWRkZW5Qcm9wZXJ0eS5DcmVhdGVIaWRkZW4pLFxuXHRcdFx0XCJkZWxldGVcIjogaXNBY3Rpb25Bbm5vdGF0ZWRIaWRkZW4oY29udmVydGVyQ29udGV4dCwgQW5ub3RhdGlvbkhpZGRlblByb3BlcnR5LkRlbGV0ZUhpZGRlbiksXG5cdFx0XHR1cGRhdGU6IGlzQWN0aW9uQW5ub3RhdGVkSGlkZGVuKGNvbnZlcnRlckNvbnRleHQsIEFubm90YXRpb25IaWRkZW5Qcm9wZXJ0eS5VcGRhdGVIaWRkZW4pXG5cdFx0fSxcblx0XHRjcmVhdGlvbk1vZGU6IGNyZWF0aW9uTW9kZSxcblx0XHRpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQ6IGlzRHJhZnRPclN0aWNreVN1cHBvcnRlZChjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRpc1ZpZXdXaXRoTXVsdGlwbGVWaXN1YWxpemF0aW9uczogdmlld0NvbmZpZ3VyYXRpb25cblx0XHRcdD8gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKHZpZXdDb25maWd1cmF0aW9uKVxuXHRcdFx0OiBmYWxzZSxcblx0XHRuZXdBY3Rpb246IGdldE5ld0FjdGlvbihjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdFx0cmVzdHJpY3Rpb25zOiBnZXRSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dClcblx0fTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgZHJhZnQgaXMgc3VwcG9ydGVkLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaXMgc3VwcG9ydGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RyYWZ0U3VwcG9ydGVkKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBib29sZWFuIHtcblx0Y29uc3QgY3VycmVudEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IGJJc0RyYWZ0Um9vdCA9IGN1cnJlbnRFbnRpdHlTZXQgJiYgY3VycmVudEVudGl0eVNldC5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdFJvb3QgPyB0cnVlIDogZmFsc2U7XG5cdGNvbnN0IGJJc0RyYWZ0Tm9kZSA9IGN1cnJlbnRFbnRpdHlTZXQgJiYgY3VycmVudEVudGl0eVNldC5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdE5vZGUgPyB0cnVlIDogZmFsc2U7XG5cdGNvbnN0IGJJc0RyYWZ0UGFyZW50RW50aXR5Rm9yQ29udGFpbm1lbnQgPVxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdD8uY29udGFpbnNUYXJnZXQgJiZcblx0XHQoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnN0YXJ0aW5nRW50aXR5U2V0IGFzIEVudGl0eVNldCk/LmFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Um9vdCB8fFxuXHRcdFx0KGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnN0YXJ0aW5nRW50aXR5U2V0IGFzIEVudGl0eVNldCk/LmFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Tm9kZSlcblx0XHRcdD8gdHJ1ZVxuXHRcdFx0OiBmYWxzZTtcblxuXHRyZXR1cm4gYklzRHJhZnRSb290IHx8IGJJc0RyYWZ0Tm9kZSB8fCAoIWNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkgJiYgYklzRHJhZnRQYXJlbnRFbnRpdHlGb3JDb250YWlubWVudCk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHN0aWNreSBvciBkcmFmdCBpcyBzdXBwb3J0ZWQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBzdXBwb3J0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRHJhZnRPclN0aWNreVN1cHBvcnRlZChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdGNvbnN0IGJJc0RyYWZ0U3VwcG9ydGVkID0gaXNEcmFmdFN1cHBvcnRlZChjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgYklzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCA9IChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS5zdGFydGluZ0VudGl0eVNldCBhcyBFbnRpdHlTZXQpPy5hbm5vdGF0aW9ucz8uU2Vzc2lvblxuXHRcdD8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZFxuXHRcdD8gdHJ1ZVxuXHRcdDogZmFsc2U7XG5cblx0cmV0dXJuIGJJc0RyYWZ0U3VwcG9ydGVkIHx8IGJJc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQ7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgY29uZmlndXJlZCBuZXdBY3Rpb24gaW50byBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgbmV3IGFjdGlvbiBpbmZvXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXdBY3Rpb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IGFueSB7XG5cdGNvbnN0IGN1cnJlbnRFbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRjb25zdCBuZXdBY3Rpb25OYW1lOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9IChcblx0XHRjdXJyZW50RW50aXR5U2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdFJvb3Q/Lk5ld0FjdGlvbiB8fFxuXHRcdGN1cnJlbnRFbnRpdHlTZXQ/LmFubm90YXRpb25zPy5TZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkPy5OZXdBY3Rpb25cblx0KT8udG9TdHJpbmcoKTtcblx0aWYgKG5ld0FjdGlvbk5hbWUpIHtcblx0XHRsZXQgYXZhaWxhYmxlUHJvcGVydHk6IGFueSA9IGNvbnZlcnRlckNvbnRleHQ/LmdldEVudGl0eVR5cGUoKS5hY3Rpb25zW25ld0FjdGlvbk5hbWVdPy5hbm5vdGF0aW9ucz8uQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlO1xuXHRcdGF2YWlsYWJsZVByb3BlcnR5ID0gYXZhaWxhYmxlUHJvcGVydHkgIT09IHVuZGVmaW5lZCA/IGF2YWlsYWJsZVByb3BlcnR5IDogdHJ1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bmFtZTogbmV3QWN0aW9uTmFtZSxcblx0XHRcdGF2YWlsYWJsZTogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGF2YWlsYWJsZVByb3BlcnR5KVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBhY3Rpb24gdmlzaWJpbGl0eSBjb25maWd1cmVkIGludG8gYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHNBbm5vdGF0aW9uVGVybVxuICogQHBhcmFtIGJXaXRoTmF2aWdhdGlvblBhdGhcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBhY3Rpb24gdmlzaWJpbGl0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBY3Rpb25Bbm5vdGF0ZWRIaWRkZW4oXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHNBbm5vdGF0aW9uVGVybTogc3RyaW5nLFxuXHRiV2l0aE5hdmlnYXRpb25QYXRoID0gdHJ1ZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgY3VycmVudEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Ly8gQ29uc2lkZXIgb25seSB0aGUgbGFzdCBsZXZlbCBvZiBuYXZpZ2F0aW9uLiBUaGUgb3RoZXJzIGFyZSBhbHJlYWR5IGNvbnNpZGVyZWQgaW4gdGhlIGVsZW1lbnQgYmluZGluZyBvZiB0aGUgcGFnZS5cblx0Y29uc3QgdmlzaXRlZE5hdmlnYXRpb25QYXRocyA9XG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGggPiAwICYmIGJXaXRoTmF2aWdhdGlvblBhdGhcblx0XHRcdD8gW2RhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXNbZGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGggLSAxXS5uYW1lXVxuXHRcdFx0OiBbXTtcblx0Y29uc3QgYWN0aW9uQW5ub3RhdGlvblZhbHVlID1cblx0XHQoKGN1cnJlbnRFbnRpdHlTZXQ/LmFubm90YXRpb25zLlVJIGFzIGFueSk/LltzQW5ub3RhdGlvblRlcm1dIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPGJvb2xlYW4+KSB8fCBmYWxzZTtcblxuXHRyZXR1cm4gY3VycmVudEVudGl0eVNldFxuXHRcdD8gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGFjdGlvbkFubm90YXRpb25WYWx1ZSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgdW5kZWZpbmVkLCAocGF0aDogc3RyaW5nKSA9PlxuXHRcdFx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlZFR5cGVzKCksIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMpXG5cdFx0ICApXG5cdFx0OiBjb25zdGFudChmYWxzZSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYW5ub3RhdGVkIHJlc3RyaWN0aW9ucyBmb3IgdGhlIGFjdGlvbnMuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSByZXN0cmljdGlvbiBpbmZvcm1hdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBTdGFuZGFyZEFjdGlvbnNSZXN0cmljdGlvbnNUeXBlIHtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCByZXN0cmljdGlvbnNEZWYgPSBbXG5cdFx0e1xuXHRcdFx0a2V5OiBcImlzSW5zZXJ0YWJsZVwiLFxuXHRcdFx0XCJmdW5jdGlvblwiOiBpc1BhdGhJbnNlcnRhYmxlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRrZXk6IFwiaXNVcGRhdGFibGVcIixcblx0XHRcdFwiZnVuY3Rpb25cIjogaXNQYXRoVXBkYXRhYmxlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRrZXk6IFwiaXNEZWxldGFibGVcIixcblx0XHRcdFwiZnVuY3Rpb25cIjogaXNQYXRoRGVsZXRhYmxlXG5cdFx0fVxuXHRdO1xuXHRjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIEV4cHJlc3Npb25SZXN0cmljdGlvbnNUeXBlPiA9IHt9O1xuXHRyZXN0cmljdGlvbnNEZWYuZm9yRWFjaChmdW5jdGlvbiAoZGVmKSB7XG5cdFx0Y29uc3QgZGVmRnVuY3Rpb24gPSBkZWZbXCJmdW5jdGlvblwiXTtcblx0XHRyZXN1bHRbZGVmLmtleV0gPSB7XG5cdFx0XHRleHByZXNzaW9uOiBkZWZGdW5jdGlvbi5hcHBseShudWxsLCBbXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdFx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgbmF2aWdhdGlvblBhdGhzKVxuXHRcdFx0XHR9XG5cdFx0XHRdKSxcblx0XHRcdG5hdmlnYXRpb25FeHByZXNzaW9uOiBkZWZGdW5jdGlvbi5hcHBseShudWxsLCBbXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRpZ25vcmVUYXJnZXRDb2xsZWN0aW9uOiB0cnVlLFxuXHRcdFx0XHRcdGF1dGhvcml6ZVVucmVzb2x2YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdFx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgbmF2aWdhdGlvblBhdGhzKVxuXHRcdFx0XHR9XG5cdFx0XHRdKVxuXHRcdH07XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0ZW1wbGF0aW5nIGZvciBpbnNlcnQvdXBkYXRlIGFjdGlvbnMgaXMgbWFuZGF0b3J5LlxuICpcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gaXNEcmFmdE9yU3RpY2t5XG4gKiBAcGFyYW0gaXNDcmVhdGVBbHdheXNIaWRkZW5cbiAqIEByZXR1cm5zIFRoZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRpbmcoXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGlzRHJhZnRPclN0aWNreTogYm9vbGVhbixcblx0aXNDcmVhdGVBbHdheXNIaWRkZW46IGJvb2xlYW5cbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gKGlzRHJhZnRPclN0aWNreSB8fCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkV4dGVybmFsKSAmJiAhaXNDcmVhdGVBbHdheXNIaWRkZW47XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGFjdGlvbiBDcmVhdGUuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgc3RhbmRhcmQgYWN0aW9uIGluZm9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBTdGFuZGFyZEFjdGlvbkNvbmZpZ1R5cGUge1xuXHRjb25zdCBjcmVhdGVWaXNpYmlsaXR5ID0gZ2V0Q3JlYXRlVmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0cmV0dXJuIHtcblx0XHRpc1RlbXBsYXRlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q3JlYXRlVGVtcGxhdGluZyhzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBjcmVhdGVWaXNpYmlsaXR5KSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oY3JlYXRlVmlzaWJpbGl0eSksXG5cdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q3JlYXRlRW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBjcmVhdGVWaXNpYmlsaXR5KSlcblx0fTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgYWN0aW9uIERlbGV0ZS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgYWN0aW9uIERlbGV0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uRGVsZXRlKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBTdGFuZGFyZEFjdGlvbkNvbmZpZ1R5cGUge1xuXHRjb25zdCBkZWxldGVWaXNpYmlsaXR5ID0gZ2V0RGVsZXRlVmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblxuXHRyZXR1cm4ge1xuXHRcdGlzVGVtcGxhdGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXREZWZhdWx0VGVtcGxhdGluZyhkZWxldGVWaXNpYmlsaXR5KSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oZGVsZXRlVmlzaWJpbGl0eSksXG5cdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0RGVsZXRlRW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBkZWxldGVWaXNpYmlsaXR5KSlcblx0fTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFN0YW5kYXJkQWN0aW9uQ29uZmlnVHlwZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRpb25Sb3coXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IFN0YW5kYXJkQWN0aW9uQ29uZmlnVHlwZSB7XG5cdGNvbnN0IGNyZWF0aW9uUm93VmlzaWJpbGl0eSA9IGdldENyZWF0ZVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgdHJ1ZSk7XG5cblx0cmV0dXJuIHtcblx0XHRpc1RlbXBsYXRlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q3JlYXRlVGVtcGxhdGluZyhzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBjcmVhdGlvblJvd1Zpc2liaWxpdHksIHRydWUpKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihjcmVhdGlvblJvd1Zpc2liaWxpdHkpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldENyZWF0aW9uUm93RW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBjcmVhdGlvblJvd1Zpc2liaWxpdHkpKVxuXHR9O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBhY3Rpb24gUGFzdGUuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGFjdGlvbiBQYXN0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uUGFzdGUoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZDogYm9vbGVhblxuKTogU3RhbmRhcmRBY3Rpb25Db25maWdUeXBlIHtcblx0Y29uc3QgY3JlYXRlVmlzaWJpbGl0eSA9IGdldENyZWF0ZVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdGNvbnN0IGNyZWF0ZUVuYWJsZW1lbnQgPSBnZXRDcmVhdGVFbmFibGVtZW50KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGNyZWF0ZVZpc2liaWxpdHkpO1xuXHRjb25zdCBwYXN0ZVZpc2liaWxpdHkgPSBnZXRQYXN0ZVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgY3JlYXRlVmlzaWJpbGl0eSwgaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkKTtcblx0cmV0dXJuIHtcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihwYXN0ZVZpc2liaWxpdHkpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldFBhc3RlRW5hYmxlbWVudChwYXN0ZVZpc2liaWxpdHksIGNyZWF0ZUVuYWJsZW1lbnQpKVxuXHR9O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBhY3Rpb24gTWFzc0VkaXQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGFjdGlvbiBNYXNzRWRpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uTWFzc0VkaXQoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IFN0YW5kYXJkQWN0aW9uQ29uZmlnVHlwZSB7XG5cdGNvbnN0IG1hc3NFZGl0VmlzaWJpbGl0eSA9IGdldE1hc3NFZGl0VmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblxuXHRyZXR1cm4ge1xuXHRcdGlzVGVtcGxhdGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXREZWZhdWx0VGVtcGxhdGluZyhtYXNzRWRpdFZpc2liaWxpdHkpKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihtYXNzRWRpdFZpc2liaWxpdHkpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldE1hc3NFZGl0RW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBtYXNzRWRpdFZpc2liaWxpdHkpKVxuXHR9O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHRlbXBsYXRpbmcgb2YgdGhlIGFjdGlvbiBDcmVhdGUuXG4gKlxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBjcmVhdGVWaXNpYmlsaXR5XG4gKiBAcGFyYW0gaXNGb3JDcmVhdGlvblJvd1xuICogQHJldHVybnMgVGhlIGNyZWF0ZSBiaW5kaW5nIGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0ZVRlbXBsYXRpbmcoXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGNyZWF0ZVZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0aXNGb3JDcmVhdGlvblJvdyA9IGZhbHNlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHQvL1RlbXBsYXRpbmcgb2YgQ3JlYXRlIEJ1dHRvbiBpcyBub3QgZG9uZTpcblx0Ly8gXHQgLSBJZiBCdXR0b24gaXMgbmV2ZXIgdmlzaWJsZShjb3ZlcmVkIHRoZSBFeHRlcm5hbCBjcmVhdGUgYnV0dG9uLCBuZXcgQWN0aW9uKVxuXHQvL1x0IC0gb3IgQ3JlYXRpb25Nb2RlIGlzIG9uIENyZWF0aW9uUm93IGZvciBDcmVhdGUgQnV0dG9uXG5cdC8vXHQgLSBvciBDcmVhdGlvbk1vZGUgaXMgbm90IG9uIENyZWF0aW9uUm93IGZvciBDcmVhdGlvblJvdyBCdXR0b25cblxuXHRyZXR1cm4gYW5kKFxuXHRcdC8vWE5PUiBnYXRlXG5cdFx0b3IoXG5cdFx0XHRhbmQoaXNGb3JDcmVhdGlvblJvdywgc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdyksXG5cdFx0XHRhbmQoIWlzRm9yQ3JlYXRpb25Sb3csIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuY3JlYXRpb25Nb2RlICE9PSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3cpXG5cdFx0KSxcblx0XHRvcihub3QoaXNDb25zdGFudChjcmVhdGVWaXNpYmlsaXR5KSksIGNyZWF0ZVZpc2liaWxpdHkpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgdGVtcGxhdGluZyBvZiB0aGUgbm9uLUNyZWF0ZSBhY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBhY3Rpb25WaXNpYmlsaXR5XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgdGVtcGxhdGluZyBvZiB0aGUgbm9uLUNyZWF0ZSBhY3Rpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFRlbXBsYXRpbmcoYWN0aW9uVmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIG9yKG5vdChpc0NvbnN0YW50KGFjdGlvblZpc2liaWxpdHkpKSwgYWN0aW9uVmlzaWJpbGl0eSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHkgdmlzaWJsZSBvZiB0aGUgYWN0aW9uIENyZWF0ZS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBpc0ZvckNyZWF0aW9uUm93XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHkgdmlzaWJsZSBvZiB0aGUgYWN0aW9uIENyZWF0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0ZVZpc2liaWxpdHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGlzRm9yQ3JlYXRpb25Sb3cgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgaXNJbnNlcnRhYmxlID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNJbnNlcnRhYmxlLmV4cHJlc3Npb247XG5cdGNvbnN0IGlzQ3JlYXRlSGlkZGVuID0gaXNGb3JDcmVhdGlvblJvd1xuXHRcdD8gaXNBY3Rpb25Bbm5vdGF0ZWRIaWRkZW4oY29udmVydGVyQ29udGV4dCwgQW5ub3RhdGlvbkhpZGRlblByb3BlcnR5LkNyZWF0ZUhpZGRlbiwgZmFsc2UpXG5cdFx0OiBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmhpZGRlbkFubm90YXRpb24uY3JlYXRlO1xuXHRjb25zdCBuZXdBY3Rpb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0Lm5ld0FjdGlvbjtcblx0Ly9DcmVhdGUgQnV0dG9uIGlzIHZpc2libGU6XG5cdC8vIFx0IC0gSWYgdGhlIGNyZWF0aW9uIG1vZGUgaXMgZXh0ZXJuYWxcblx0Ly8gICAgICAtIElmIHdlJ3JlIG9uIHRoZSBsaXN0IHJlcG9ydCBhbmQgY3JlYXRlIGlzIG5vdCBoaWRkZW5cblx0Ly9cdFx0LSBPdGhlcndpc2UgdGhpcyBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiB0aGUgdGhlIFVJLklzRWRpdGFibGVcblx0Ly9cdCAtIE90aGVyd2lzZVxuXHQvL1x0XHQtIElmIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaXMgdmFsaWQgdGhlbiBjcmVhdGUgYnV0dG9uIGlzbid0IHZpc2libGVcblx0Ly9cdFx0XHQtIG5vIG5ld0FjdGlvbiBhdmFpbGFibGVzXG5cdC8vXHRcdFx0LSBJdCdzIG5vdCBpbnNlcnRhYmxlIGFuZCB0aGVyZSBpcyBub3QgYSBuZXcgYWN0aW9uXG5cdC8vXHRcdFx0LSBjcmVhdGUgaXMgaGlkZGVuXG5cdC8vXHRcdFx0LSBUaGVyZSBhcmUgbXVsdGlwbGUgdmlzaWFsaXphdGlvbnNcblx0Ly9cdFx0XHQtIEl0J3MgYW4gQW5hbHl0aWNhbCBMaXN0IFBhZ2Vcblx0Ly9cdFx0XHQtIFVzZXMgSW5saW5lQ3JlYXRpb25Sb3dzIG1vZGUgYW5kIGEgUmVzcG9zaXZlIHRhYmxlIHR5cGVcblx0Ly8gICAtIE90aGVyd2lzZVxuXHQvLyBcdCBcdC0gSWYgd2UncmUgb24gdGhlIGxpc3QgcmVwb3J0IC0+XG5cdC8vIFx0IFx0XHQtIElmIFVJLkNyZWF0ZUhpZGRlbiBwb2ludHMgdG8gYSBwcm9wZXJ0eSBwYXRoIC0+IHByb3ZpZGUgYSBuZWdhdGVkIGJpbmRpbmcgdG8gdGhpcyBwYXRoXG5cdC8vIFx0IFx0XHQtIE90aGVyd2lzZSwgY3JlYXRlIGlzIHZpc2libGVcblx0Ly8gXHQgXHQtIE90aGVyd2lzZVxuXHQvLyBcdCAgXHQgLSBUaGlzIGRlcGVuZHMgb24gdGhlIHZhbHVlIG9mIHRoZSB0aGUgVUkuSXNFZGl0YWJsZVxuXHRyZXR1cm4gaWZFbHNlKFxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuRXh0ZXJuYWwsXG5cdFx0YW5kKG5vdChpc0NyZWF0ZUhpZGRlbiksIG9yKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0LCBVSS5Jc0VkaXRhYmxlKSksXG5cdFx0aWZFbHNlKFxuXHRcdFx0b3IoXG5cdFx0XHRcdGFuZChpc0NvbnN0YW50KG5ld0FjdGlvbj8uYXZhaWxhYmxlKSwgZXF1YWwobmV3QWN0aW9uPy5hdmFpbGFibGUsIGZhbHNlKSksXG5cdFx0XHRcdGFuZChpc0NvbnN0YW50KGlzSW5zZXJ0YWJsZSksIGVxdWFsKGlzSW5zZXJ0YWJsZSwgZmFsc2UpLCAhbmV3QWN0aW9uKSxcblx0XHRcdFx0YW5kKGlzQ29uc3RhbnQoaXNDcmVhdGVIaWRkZW4pLCBlcXVhbChpc0NyZWF0ZUhpZGRlbiwgdHJ1ZSkpLFxuXHRcdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmlzVmlld1dpdGhNdWx0aXBsZVZpc3VhbGl6YXRpb25zLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlLFxuXHRcdFx0XHRhbmQoXG5cdFx0XHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5JbmxpbmVDcmVhdGlvblJvd3MsXG5cdFx0XHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbj8udHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIlxuXHRcdFx0XHQpXG5cdFx0XHQpLFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0LFxuXHRcdFx0XHRvcihub3QoaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24oaXNDcmVhdGVIaWRkZW4pKSwgbm90KGlzQ3JlYXRlSGlkZGVuKSksXG5cdFx0XHRcdGFuZChub3QoaXNDcmVhdGVIaWRkZW4pLCBVSS5Jc0VkaXRhYmxlKVxuXHRcdFx0KVxuXHRcdClcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBwcm9wZXJ0eSB2aXNpYmxlIG9mIHRoZSBhY3Rpb24gRGVsZXRlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHByb3BlcnR5IHZpc2libGUgb2YgdGhlIGFjdGlvbiBEZWxldGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxldGVWaXNpYmlsaXR5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBpc0RlbGV0ZUhpZGRlbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuaGlkZGVuQW5ub3RhdGlvbi5kZWxldGU7XG5cdGNvbnN0IHBhdGhEZWxldGFibGVFeHByZXNzaW9uID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNEZWxldGFibGUuZXhwcmVzc2lvbjtcblxuXHQvL0RlbGV0ZSBCdXR0b24gaXMgdmlzaWJsZTpcblx0Ly8gXHQgUHJlcmVxdWlzaXRlczpcblx0Ly9cdCAtIElmIHdlJ3JlIG5vdCBvbiBtdWx0aXBsZSB2aXN1YWxpemF0aW9ucyBjb25maWd1cmF0aW9uIG9yIEFMUFxuXHQvL1xuXHQvLyAgIC0gSWYgcmVzdHJpY3Rpb25zIG9uIGRlbGV0YWJsZSBzZXQgdG8gZmFsc2UgLT4gbm90IHZpc2libGVcblx0Ly8gICAtIE90aGVyd2lzZVxuXHQvL1x0XHRcdC0gSWYgVUkuRGVsZXRlSGlkZGVuIGlzIHRydWUgLT4gbm90IHZpc2libGVcblx0Ly9cdFx0XHQtIE90aGVyd2lzZVxuXHQvLyBcdCBcdFx0XHQtIElmIHdlJ3JlIG9uIE9QIC0+IGRlcGVuZGluZyBpZiBVSSBpcyBlZGl0YWJsZSBhbmQgcmVzdHJpY3Rpb25zIG9uIGRlbGV0YWJsZVxuXHQvL1x0XHRcdFx0LSBPdGhlcndpc2Vcblx0Ly9cdFx0XHRcdCBcdC0gSWYgVUkuRGVsZXRlSGlkZGVuIHBvaW50cyB0byBhIHByb3BlcnR5IHBhdGggLT4gcHJvdmlkZSBhIG5lZ2F0ZWQgYmluZGluZyB0byB0aGlzIHBhdGhcblx0Ly9cdCBcdCBcdFx0IFx0LSBPdGhlcndpc2UsIGRlbGV0ZSBpcyB2aXNpYmxlXG5cblx0cmV0dXJuIGlmRWxzZShcblx0XHRvcihzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmlzVmlld1dpdGhNdWx0aXBsZVZpc3VhbGl6YXRpb25zLCBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlKSxcblx0XHRmYWxzZSxcblx0XHRpZkVsc2UoXG5cdFx0XHRhbmQoaXNDb25zdGFudChwYXRoRGVsZXRhYmxlRXhwcmVzc2lvbiksIGVxdWFsKHBhdGhEZWxldGFibGVFeHByZXNzaW9uLCBmYWxzZSkpLFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGFuZChpc0NvbnN0YW50KGlzRGVsZXRlSGlkZGVuKSwgZXF1YWwoaXNEZWxldGVIaWRkZW4sIGNvbnN0YW50KHRydWUpKSksXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQsXG5cdFx0XHRcdFx0YW5kKG5vdChpc0RlbGV0ZUhpZGRlbiksIFVJLklzRWRpdGFibGUpLFxuXHRcdFx0XHRcdG5vdChhbmQoaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24oaXNEZWxldGVIaWRkZW4pLCBpc0RlbGV0ZUhpZGRlbikpXG5cdFx0XHRcdClcblx0XHRcdClcblx0XHQpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHkgdmlzaWJsZSBvZiB0aGUgYWN0aW9uIFBhc3RlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGNyZWF0ZVZpc2liaWxpdHlcbiAqIEBwYXJhbSBpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBwcm9wZXJ0eSB2aXNpYmxlIG9mIHRoZSBhY3Rpb24gUGFzdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXN0ZVZpc2liaWxpdHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGNyZWF0ZVZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0aXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkOiBib29sZWFuXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHQvLyBJZiBDcmVhdGUgaXMgdmlzaWJsZSwgZW5hYmxlUGFzdGUgaXMgbm90IGRpc2FibGVkIGludG8gbWFuaWZlc3QgYW5kIHdlIGFyZSBvbiBPUC9ibG9ja3Mgb3V0c2lkZSBGaW9yaSBlbGVtZW50cyB0ZW1wbGF0ZXNcblx0Ly8gVGhlbiBidXR0b24gd2lsbCBiZSB2aXNpYmxlIGFjY29yZGluZyB0byBpbnNlcnRhYmxlIHJlc3RyaWN0aW9ucyBhbmQgY3JlYXRlIHZpc2liaWxpdHlcblx0Ly8gT3RoZXJ3aXNlIGl0J3Mgbm90IHZpc2libGVcblx0cmV0dXJuIGFuZChcblx0XHRub3RFcXVhbChzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmVuYWJsZVBhc3RlLCBmYWxzZSksXG5cdFx0Y3JlYXRlVmlzaWJpbGl0eSxcblx0XHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQsXG5cdFx0W1RlbXBsYXRlVHlwZS5MaXN0UmVwb3J0LCBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXS5pbmRleE9mKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkpID09PSAtMSxcblx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc0luc2VydGFibGUuZXhwcmVzc2lvblxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHByb3BlcnR5IHZpc2libGUgb2YgdGhlIGFjdGlvbiBNYXNzRWRpdC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBwcm9wZXJ0eSB2aXNpYmxlIG9mIHRoZSBhY3Rpb24gTWFzc0VkaXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hc3NFZGl0VmlzaWJpbGl0eShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgaXNVcGRhdGVIaWRkZW4gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmhpZGRlbkFubm90YXRpb24udXBkYXRlLFxuXHRcdHBhdGhVcGRhdGFibGVFeHByZXNzaW9uID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNVcGRhdGFibGUuZXhwcmVzc2lvbixcblx0XHRiTWFzc0VkaXRFbmFibGVkSW5NYW5pZmVzdDogYm9vbGVhbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24/LmVuYWJsZU1hc3NFZGl0IHx8IGZhbHNlO1xuXHRjb25zdCB0ZW1wbGF0ZUJpbmRpbmdFeHByZXNzaW9uID1cblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZVxuXHRcdFx0PyBVSS5Jc0VkaXRhYmxlXG5cdFx0XHQ6IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0O1xuXHQvL01hc3NFZGl0IGlzIHZpc2libGVcblx0Ly8gSWZcblx0Ly9cdFx0LSB0aGVyZSBpcyBubyBzdGF0aWMgcmVzdHJpY3Rpb25zIHNldCB0byBmYWxzZVxuXHQvL1x0XHQtIGFuZCBlbmFibGVNYXNzRWRpdCBpcyBub3Qgc2V0IHRvIGZhbHNlIGludG8gdGhlIG1hbmlmZXN0XG5cdC8vXHRcdC0gYW5kIHRoZSBzZWxlY3Rpb25Nb2RlIGlzIHJlbGV2YW50XG5cdC8vXHRUaGVuIE1hc3NFZGl0IGlzIGFsd2F5cyB2aXNpYmxlIGluIExSIG9yIGR5bmFtaWNhbGx5IHZpc2libGUgaW4gT1AgYWNjb3JkaW5nIHRvIHVpPkVkaXRhYmxlIGFuZCBoaWRkZW5Bbm5vdGF0aW9uXG5cdC8vICBCdXR0b24gaXMgaGlkZGVuIGZvciBhbGwgb3RoZXIgY2FzZXNcblx0cmV0dXJuIGFuZChcblx0XHRub3QoYW5kKGlzQ29uc3RhbnQocGF0aFVwZGF0YWJsZUV4cHJlc3Npb24pLCBlcXVhbChwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiwgZmFsc2UpKSksXG5cdFx0Yk1hc3NFZGl0RW5hYmxlZEluTWFuaWZlc3QsXG5cdFx0dGVtcGxhdGVCaW5kaW5nRXhwcmVzc2lvbixcblx0XHRub3QoaXNVcGRhdGVIaWRkZW4pXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHkgZW5hYmxlZCBvZiB0aGUgY3JlYXRpb25Sb3cuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gY3JlYXRpb25Sb3dWaXNpYmlsaXR5XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHkgZW5hYmxlZCBvZiB0aGUgY3JlYXRpb25Sb3cuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDcmVhdGlvblJvd0VuYWJsZW1lbnQoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGNyZWF0aW9uUm93VmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCByZXN0cmljdGlvbnNJbnNlcnRhYmxlID0gaXNQYXRoSW5zZXJ0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSwge1xuXHRcdGlnbm9yZVRhcmdldENvbGxlY3Rpb246IHRydWUsXG5cdFx0YXV0aG9yaXplVW5yZXNvbHZhYmxlOiB0cnVlLFxuXHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nLCBuYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKSA9PiB7XG5cdFx0XHRpZiAocGF0aC5pbmRleE9mKFwiL1wiKSA9PT0gMCkge1xuXHRcdFx0XHRwYXRoID0gc2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLCBuYXZpZ2F0aW9uUGF0aHMpO1xuXHRcdFx0XHRyZXR1cm4gcGF0aDtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkubmF2aWdhdGlvblByb3BlcnRpZXM7XG5cdFx0XHRpZiAobmF2aWdhdGlvblByb3BlcnRpZXMpIHtcblx0XHRcdFx0Y29uc3QgcGFydG5lciA9IG5hdmlnYXRpb25Qcm9wZXJ0aWVzW25hdmlnYXRpb25Qcm9wZXJ0aWVzLmxlbmd0aCAtIDFdLnBhcnRuZXI7XG5cdFx0XHRcdGlmIChwYXJ0bmVyKSB7XG5cdFx0XHRcdFx0cGF0aCA9IGAke3BhcnRuZXJ9LyR7cGF0aH1gO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcGF0aDtcblx0XHR9XG5cdH0pO1xuXHRjb25zdCBpc0luc2VydGFibGUgPVxuXHRcdHJlc3RyaWN0aW9uc0luc2VydGFibGUuX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCJcblx0XHRcdD8gaXNQYXRoSW5zZXJ0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSwge1xuXHRcdFx0XHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nKSA9PiBzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlZFR5cGVzKCksIFtdKVxuXHRcdFx0ICB9KVxuXHRcdFx0OiByZXN0cmljdGlvbnNJbnNlcnRhYmxlO1xuXG5cdHJldHVybiBhbmQoXG5cdFx0Y3JlYXRpb25Sb3dWaXNpYmlsaXR5LFxuXHRcdGlzSW5zZXJ0YWJsZSxcblx0XHRvcihcblx0XHRcdCFzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEsXG5cdFx0XHRmb3JtYXRSZXN1bHQoW3BhdGhJbk1vZGVsKFwiY3JlYXRpb25Sb3dGaWVsZFZhbGlkaXR5XCIsIFwiaW50ZXJuYWxcIildLCB0YWJsZUZvcm1hdHRlcnMudmFsaWRhdGVDcmVhdGlvblJvd0ZpZWxkcylcblx0XHQpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHkgZW5hYmxlZCBvZiB0aGUgYWN0aW9uIENyZWF0ZS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBjcmVhdGVWaXNpYmlsaXR5XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHkgZW5hYmxlZCBvZiB0aGUgYWN0aW9uIENyZWF0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0ZUVuYWJsZW1lbnQoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGNyZWF0ZVZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgaXNJbnNlcnRhYmxlID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNJbnNlcnRhYmxlLmV4cHJlc3Npb247XG5cdGNvbnN0IENvbGxlY3Rpb25UeXBlID0gY29udmVydGVyQ29udGV4dC5yZXNvbHZlQWJzb2x1dGVQYXRoPGFueT4oc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5jb2xsZWN0aW9uUGF0aCkudGFyZ2V0Py5fdHlwZTtcblx0cmV0dXJuIGFuZChcblx0XHRjcmVhdGVWaXNpYmlsaXR5LFxuXHRcdG9yKFxuXHRcdFx0Q29sbGVjdGlvblR5cGUgPT09IFwiRW50aXR5U2V0XCIsXG5cdFx0XHRhbmQoaXNJbnNlcnRhYmxlLCBvcihjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZSwgVUkuSXNFZGl0YWJsZSkpXG5cdFx0KVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHByb3BlcnR5IGVuYWJsZWQgb2YgdGhlIGFjdGlvbiBEZWxldGUuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gZGVsZXRlVmlzaWJpbGl0eVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHByb3BlcnR5IGVuYWJsZWQgb2YgdGhlIGFjdGlvbiBEZWxldGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxldGVFbmFibGVtZW50KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRkZWxldGVWaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGlzRGVsZXRhYmxlID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNEZWxldGFibGUuZXhwcmVzc2lvbjtcblx0Y29uc3QgaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSA9XG5cdFx0IWlzQ29uc3RhbnQoaXNEZWxldGFibGUpICYmIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzRGVsZXRhYmxlLm5hdmlnYXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiO1xuXHRjb25zdCBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPSBwYXRoSW5Nb2RlbChcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBcImludGVybmFsXCIpO1xuXHRjb25zdCBudW1iZXJPZkRlbGV0YWJsZUNvbnRleHRzID0gcGF0aEluTW9kZWwoXCJkZWxldGFibGVDb250ZXh0c1wiLCBcImludGVybmFsXCIpO1xuXHRjb25zdCBudW1iZXJPZlVuU2F2ZWRDb250ZXh0cyA9IHBhdGhJbk1vZGVsKFwidW5TYXZlZENvbnRleHRzXCIsIFwiaW50ZXJuYWxcIik7XG5cblx0cmV0dXJuIGFuZChcblx0XHRkZWxldGVWaXNpYmlsaXR5LFxuXHRcdGlmRWxzZShcblx0XHRcdG9yKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlLCBpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5KSxcblx0XHRcdGFuZChcblx0XHRcdFx0b3IoXG5cdFx0XHRcdFx0YW5kKG5vdEVxdWFsKG51bWJlck9mRGVsZXRhYmxlQ29udGV4dHMsIHVuZGVmaW5lZCksIGdyZWF0ZXJUaGFuKGxlbmd0aChudW1iZXJPZkRlbGV0YWJsZUNvbnRleHRzKSwgMCkpLFxuXHRcdFx0XHRcdGFuZChub3RFcXVhbChudW1iZXJPZlVuU2F2ZWRDb250ZXh0cywgdW5kZWZpbmVkKSwgZ3JlYXRlclRoYW4obGVuZ3RoKG51bWJlck9mVW5TYXZlZENvbnRleHRzKSwgMCkpXG5cdFx0XHRcdCksXG5cdFx0XHRcdHBhdGhJbk1vZGVsKFwiZGVsZXRlRW5hYmxlZFwiLCBcImludGVybmFsXCIpXG5cdFx0XHQpLFxuXHRcdFx0YW5kKG5vdEVxdWFsKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cywgMCksIGlzRGVsZXRhYmxlKVxuXHRcdClcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBwcm9wZXJ0eSBlbmFibGVkIG9mIHRoZSBhY3Rpb24gUGFzdGUuXG4gKlxuICogQHBhcmFtIHBhc3RlVmlzaWJpbGl0eVxuICogQHBhcmFtIGNyZWF0ZUVuYWJsZW1lbnRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBwcm9wZXJ0eSBlbmFibGVkIG9mIHRoZSBhY3Rpb24gUGFzdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXN0ZUVuYWJsZW1lbnQoXG5cdHBhc3RlVmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRjcmVhdGVFbmFibGVtZW50OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBhbmQocGFzdGVWaXNpYmlsaXR5LCBjcmVhdGVFbmFibGVtZW50KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBwcm9wZXJ0eSBlbmFibGVkIG9mIHRoZSBhY3Rpb24gTWFzc0VkaXQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gbWFzc0VkaXRWaXNpYmlsaXR5XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHkgZW5hYmxlZCBvZiB0aGUgYWN0aW9uIE1hc3NFZGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFzc0VkaXRFbmFibGVtZW50KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRtYXNzRWRpdFZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgcGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5leHByZXNzaW9uO1xuXHRjb25zdCBpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5OiBhbnkgPVxuXHRcdCFpc0NvbnN0YW50KHBhdGhVcGRhdGFibGVFeHByZXNzaW9uKSAmJlxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlLm5hdmlnYXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiO1xuXHRjb25zdCBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPSBncmVhdGVyT3JFcXVhbChwYXRoSW5Nb2RlbChcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBcImludGVybmFsXCIpLCAxKTtcblx0Y29uc3QgbnVtYmVyT2ZVcGRhdGFibGVDb250ZXh0cyA9IGdyZWF0ZXJPckVxdWFsKGxlbmd0aChwYXRoSW5Nb2RlbChcInVwZGF0YWJsZUNvbnRleHRzXCIsIFwiaW50ZXJuYWxcIikpLCAxKTtcblx0Y29uc3QgYklzRHJhZnRTdXBwb3J0ZWQgPSBpc0RyYWZ0U3VwcG9ydGVkKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBiRGlzcGxheU1vZGUgPSBpc0luRGlzcGxheU1vZGUoY29udmVydGVyQ29udGV4dCk7XG5cblx0Ly8gbnVtYmVyT2ZVcGRhdGFibGVDb250ZXh0cyBuZWVkcyB0byBiZSBhZGRlZCB0byB0aGUgYmluZGluZyBpbiBjYXNlXG5cdC8vIDEuIFVwZGF0ZSBpcyBkZXBlbmRlbnQgb24gY3VycmVudCBlbnRpdHkgcHJvcGVydHkgKGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkgaXMgdHJ1ZSkuXG5cdC8vIDIuIFRoZSB0YWJsZSBpcyByZWFkIG9ubHkgYW5kIGRyYWZ0IGVuYWJsZWQobGlrZSBMUiksIGluIHRoaXMgY2FzZSBvbmx5IGFjdGl2ZSBjb250ZXh0cyBjYW4gYmUgbWFzcyBlZGl0ZWQuXG5cdC8vICAgIFNvLCB1cGRhdGUgZGVwZW5kcyBvbiAnSXNBY3RpdmVFbnRpdHknIHZhbHVlIHdoaWNoIG5lZWRzIHRvIGJlIGNoZWNrZWQgcnVudGltZS5cblx0Y29uc3QgcnVudGltZUJpbmRpbmcgPSBpZkVsc2UoXG5cdFx0b3IoYW5kKGJEaXNwbGF5TW9kZSwgYklzRHJhZnRTdXBwb3J0ZWQpLCBpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5KSxcblx0XHRhbmQobnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzLCBudW1iZXJPZlVwZGF0YWJsZUNvbnRleHRzKSxcblx0XHRhbmQobnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzKVxuXHQpO1xuXG5cdHJldHVybiBhbmQobWFzc0VkaXRWaXNpYmlsaXR5LCBpZkVsc2UoaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSwgcnVudGltZUJpbmRpbmcsIGFuZChydW50aW1lQmluZGluZywgcGF0aFVwZGF0YWJsZUV4cHJlc3Npb24pKSk7XG59XG5cbi8qKlxuICogVGVsbHMgaWYgdGhlIHRhYmxlIGluIHRlbXBsYXRlIGlzIGluIGRpc3BsYXkgbW9kZS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHZpZXdDb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHRhYmxlIGlzIGluIGRpc3BsYXkgbW9kZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJbkRpc3BsYXlNb2RlKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIHZpZXdDb25maWd1cmF0aW9uPzogVmlld1BhdGhDb25maWd1cmF0aW9uKTogYm9vbGVhbiB7XG5cdGNvbnN0IHRlbXBsYXRlVHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCk7XG5cdGlmIChcblx0XHR0ZW1wbGF0ZVR5cGUgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0IHx8XG5cdFx0dGVtcGxhdGVUeXBlID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlIHx8XG5cdFx0KHZpZXdDb25maWd1cmF0aW9uICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyh2aWV3Q29uZmlndXJhdGlvbikpXG5cdCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdC8vIHVwZGF0YWJsZSB3aWxsIGJlIGhhbmRsZWQgYXQgdGhlIHByb3BlcnR5IGxldmVsXG5cdHJldHVybiBmYWxzZTtcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BNEJLQSx3Qjs7YUFBQUEsd0I7SUFBQUEsd0I7SUFBQUEsd0I7SUFBQUEsd0I7S0FBQUEsd0Is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