@sapui5/sap.fe.core 1.108.2 → 1.110.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/README.md +5 -1
  2. package/package.json +11 -9
  3. package/src/.eslintrc +7 -0
  4. package/src/sap/fe/core/.library +39 -37
  5. package/src/sap/fe/core/.supportrc +3 -3
  6. package/src/sap/fe/core/ActionRuntime.js +72 -27
  7. package/src/sap/fe/core/ActionRuntime.ts +104 -21
  8. package/src/sap/fe/core/AppComponent.js +102 -120
  9. package/src/sap/fe/core/AppComponent.ts +148 -45
  10. package/src/sap/fe/core/AppStateHandler.js +105 -91
  11. package/src/sap/fe/core/AppStateHandler.ts +85 -23
  12. package/src/sap/fe/core/BaseController.js +5 -20
  13. package/src/sap/fe/core/BaseController.ts +11 -2
  14. package/src/sap/fe/core/CommonUtils.js +770 -1079
  15. package/src/sap/fe/core/CommonUtils.ts +750 -491
  16. package/src/sap/fe/core/ExtensionAPI.js +69 -96
  17. package/src/sap/fe/core/ExtensionAPI.ts +15 -17
  18. package/src/sap/fe/core/PageController.js +21 -46
  19. package/src/sap/fe/core/PageController.ts +11 -2
  20. package/src/sap/fe/core/TemplateComponent.js +6 -51
  21. package/src/sap/fe/core/TemplateComponent.ts +27 -16
  22. package/src/sap/fe/core/TemplateModel.js +18 -24
  23. package/src/sap/fe/core/TemplateModel.ts +25 -6
  24. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +8 -23
  25. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +5 -4
  26. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +146 -180
  27. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +144 -57
  28. package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.js +1 -1
  29. package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.js +43 -0
  30. package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.ts +11 -0
  31. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +436 -556
  32. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +288 -157
  33. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +215 -202
  34. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +93 -51
  35. package/src/sap/fe/core/controllerextensions/BusyLocker.js +11 -26
  36. package/src/sap/fe/core/controllerextensions/EditFlow.js +407 -596
  37. package/src/sap/fe/core/controllerextensions/EditFlow.ts +163 -56
  38. package/src/sap/fe/core/controllerextensions/Feedback.js +70 -0
  39. package/src/sap/fe/core/controllerextensions/Feedback.ts +64 -0
  40. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +12 -23
  41. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +1 -1
  42. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +127 -182
  43. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +65 -32
  44. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +96 -198
  45. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +4 -5
  46. package/src/sap/fe/core/controllerextensions/InternalRouting.js +134 -291
  47. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +21 -12
  48. package/src/sap/fe/core/controllerextensions/KPIManagement.js +111 -214
  49. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +44 -44
  50. package/src/sap/fe/core/controllerextensions/MassEdit.js +24 -44
  51. package/src/sap/fe/core/controllerextensions/MassEdit.ts +3 -2
  52. package/src/sap/fe/core/controllerextensions/MessageHandler.js +39 -52
  53. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +26 -7
  54. package/src/sap/fe/core/controllerextensions/PageReady.js +81 -119
  55. package/src/sap/fe/core/controllerextensions/PageReady.ts +36 -15
  56. package/src/sap/fe/core/controllerextensions/Paginator.js +16 -51
  57. package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -3
  58. package/src/sap/fe/core/controllerextensions/Placeholder.js +7 -33
  59. package/src/sap/fe/core/controllerextensions/Routing.js +24 -32
  60. package/src/sap/fe/core/controllerextensions/Routing.ts +6 -1
  61. package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
  62. package/src/sap/fe/core/controllerextensions/Share.js +53 -98
  63. package/src/sap/fe/core/controllerextensions/Share.ts +6 -3
  64. package/src/sap/fe/core/controllerextensions/SideEffects.js +103 -174
  65. package/src/sap/fe/core/controllerextensions/SideEffects.ts +37 -22
  66. package/src/sap/fe/core/controllerextensions/ViewState.js +341 -276
  67. package/src/sap/fe/core/controllerextensions/ViewState.ts +236 -84
  68. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +6 -22
  69. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -2
  70. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +66 -88
  71. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +64 -17
  72. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +28 -34
  73. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +22 -1
  74. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +69 -65
  75. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +31 -12
  76. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +15 -13
  77. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +273 -906
  78. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +142 -420
  79. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +49 -115
  80. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +12 -7
  81. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +70 -89
  82. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +313 -320
  83. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +582 -683
  84. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +507 -386
  85. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +111 -102
  86. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +102 -79
  87. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +689 -154
  88. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +866 -31
  89. package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +24 -101
  90. package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.ts +5 -5
  91. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +91 -217
  92. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +3 -20
  93. package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +1 -0
  94. package/src/sap/fe/core/controls/ActionPartial.fragment.xml +46 -46
  95. package/src/sap/fe/core/controls/Any.js +1 -1
  96. package/src/sap/fe/core/controls/AnyElement.js +1 -1
  97. package/src/sap/fe/core/controls/CommandExecution.js +4 -26
  98. package/src/sap/fe/core/controls/ConditionalWrapper.js +16 -33
  99. package/src/sap/fe/core/controls/ConditionalWrapper.ts +16 -2
  100. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +41 -94
  101. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +1 -1
  102. package/src/sap/fe/core/controls/CustomQuickViewPage.js +5 -34
  103. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +5 -7
  104. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +7 -7
  105. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +56 -58
  106. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +53 -33
  107. package/src/sap/fe/core/controls/FieldWrapper.js +6 -49
  108. package/src/sap/fe/core/controls/FileWrapper.js +51 -136
  109. package/src/sap/fe/core/controls/FileWrapper.ts +25 -29
  110. package/src/sap/fe/core/controls/FilterBar.js +19 -54
  111. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -22
  112. package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
  113. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -5
  114. package/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +2 -2
  115. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +24 -46
  116. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +14 -41
  117. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +4 -4
  118. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +26 -67
  119. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -20
  120. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +12 -48
  121. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +17 -46
  122. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +3 -3
  123. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +1 -0
  124. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +6 -78
  125. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +4 -4
  126. package/src/sap/fe/core/converters/ConverterContext.js +44 -98
  127. package/src/sap/fe/core/converters/ConverterContext.ts +1 -1
  128. package/src/sap/fe/core/converters/ManifestSettings.js +1 -20
  129. package/src/sap/fe/core/converters/ManifestSettings.ts +16 -9
  130. package/src/sap/fe/core/converters/ManifestWrapper.js +97 -158
  131. package/src/sap/fe/core/converters/ManifestWrapper.ts +4 -0
  132. package/src/sap/fe/core/converters/MetaModelConverter.js +28 -167
  133. package/src/sap/fe/core/converters/MetaModelConverter.ts +9 -3
  134. package/src/sap/fe/core/converters/TemplateConverter.js +10 -22
  135. package/src/sap/fe/core/converters/TemplateConverter.ts +10 -7
  136. package/src/sap/fe/core/converters/annotations/DataField.js +88 -132
  137. package/src/sap/fe/core/converters/annotations/DataField.ts +90 -38
  138. package/src/sap/fe/core/converters/common/AnnotationConverter.js +57 -379
  139. package/src/sap/fe/core/converters/controls/Common/Action.js +45 -115
  140. package/src/sap/fe/core/converters/controls/Common/Action.ts +17 -5
  141. package/src/sap/fe/core/converters/controls/Common/Chart.js +20 -73
  142. package/src/sap/fe/core/converters/controls/Common/Chart.ts +21 -14
  143. package/src/sap/fe/core/converters/controls/Common/Criticality.js +1 -9
  144. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +40 -94
  145. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +44 -31
  146. package/src/sap/fe/core/converters/controls/Common/Form.js +26 -63
  147. package/src/sap/fe/core/converters/controls/Common/Form.ts +24 -10
  148. package/src/sap/fe/core/converters/controls/Common/KPI.js +13 -63
  149. package/src/sap/fe/core/converters/controls/Common/Table.js +368 -707
  150. package/src/sap/fe/core/converters/controls/Common/Table.ts +308 -197
  151. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +54 -109
  152. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +15 -9
  153. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +69 -210
  154. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +23 -16
  155. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +12 -80
  156. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +3 -1
  157. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -19
  158. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +45 -136
  159. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +10 -10
  160. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +82 -173
  161. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +48 -22
  162. package/src/sap/fe/core/converters/helpers/Aggregation.js +24 -66
  163. package/src/sap/fe/core/converters/helpers/Aggregation.ts +3 -7
  164. package/src/sap/fe/core/converters/helpers/BindingHelper.js +9 -19
  165. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +0 -1
  166. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +20 -48
  167. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +5 -1
  168. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +12 -51
  169. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +13 -11
  170. package/src/sap/fe/core/converters/helpers/ID.js +3 -17
  171. package/src/sap/fe/core/converters/helpers/ID.ts +2 -3
  172. package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -6
  173. package/src/sap/fe/core/converters/helpers/Key.js +10 -19
  174. package/src/sap/fe/core/converters/helpers/Key.ts +3 -3
  175. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +2 -20
  176. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +2 -37
  177. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +126 -131
  178. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +112 -31
  179. package/src/sap/fe/core/converters/templates/ListReportConverter.js +67 -131
  180. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +58 -27
  181. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +106 -183
  182. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +73 -104
  183. package/src/sap/fe/core/designtime/AppComponent.designtime.js +74 -67
  184. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +77 -69
  185. package/src/sap/fe/core/formatters/CollaborationFormatter.js +20 -29
  186. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +21 -0
  187. package/src/sap/fe/core/formatters/FPMFormatter.js +3 -7
  188. package/src/sap/fe/core/formatters/KPIFormatter.js +5 -13
  189. package/src/sap/fe/core/formatters/StandardFormatter.js +3 -18
  190. package/src/sap/fe/core/formatters/StandardFormatter.ts +3 -2
  191. package/src/sap/fe/core/formatters/TableFormatter.js +87 -53
  192. package/src/sap/fe/core/formatters/TableFormatter.ts +96 -9
  193. package/src/sap/fe/core/formatters/TableFormatterTypes.js +1 -4
  194. package/src/sap/fe/core/formatters/ValueFormatter.js +1 -37
  195. package/src/sap/fe/core/fpm/Component.js +2 -17
  196. package/src/sap/fe/core/helpers/AnnotationEnum.js +10 -20
  197. package/src/sap/fe/core/helpers/AnnotationEnum.ts +6 -6
  198. package/src/sap/fe/core/helpers/AppStartupHelper.js +16 -52
  199. package/src/sap/fe/core/helpers/AppStartupHelper.ts +1 -1
  200. package/src/sap/fe/core/helpers/BindingToolkit.js +106 -364
  201. package/src/sap/fe/core/helpers/BindingToolkit.ts +30 -7
  202. package/src/sap/fe/core/helpers/ClassSupport.js +16 -97
  203. package/src/sap/fe/core/helpers/ClassSupport.ts +7 -4
  204. package/src/sap/fe/core/helpers/DeleteHelper.js +621 -0
  205. package/src/sap/fe/core/helpers/DeleteHelper.ts +796 -0
  206. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -12
  207. package/src/sap/fe/core/helpers/EditState.js +2 -5
  208. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -10
  209. package/src/sap/fe/core/helpers/FPMHelper.js +3 -8
  210. package/src/sap/fe/core/helpers/FPMHelper.ts +2 -1
  211. package/src/sap/fe/core/helpers/KeepAliveHelper.js +8 -38
  212. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +1 -5
  213. package/src/sap/fe/core/helpers/LoaderUtils.js +1 -7
  214. package/src/sap/fe/core/helpers/MassEditHelper.js +177 -289
  215. package/src/sap/fe/core/helpers/MassEditHelper.ts +124 -91
  216. package/src/sap/fe/core/helpers/MessageStrip.js +12 -28
  217. package/src/sap/fe/core/helpers/MessageStrip.ts +7 -7
  218. package/src/sap/fe/core/helpers/ModelHelper.js +62 -103
  219. package/src/sap/fe/core/helpers/ModelHelper.ts +58 -20
  220. package/src/sap/fe/core/helpers/PasteHelper.js +28 -51
  221. package/src/sap/fe/core/helpers/PasteHelper.ts +10 -9
  222. package/src/sap/fe/core/helpers/SemanticDateOperators.js +112 -136
  223. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +111 -111
  224. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +5 -11
  225. package/src/sap/fe/core/helpers/SideEffectsHelper.js +26 -32
  226. package/src/sap/fe/core/helpers/StableIdHelper.js +166 -218
  227. package/src/sap/fe/core/helpers/StableIdHelper.ts +175 -191
  228. package/src/sap/fe/core/helpers/Synchronization.js +1 -8
  229. package/src/sap/fe/core/helpers/ToES6Promise.js +1 -4
  230. package/src/sap/fe/core/helpers/TypeGuards.js +22 -0
  231. package/src/sap/fe/core/helpers/TypeGuards.ts +9 -0
  232. package/src/sap/fe/core/jsx-runtime/Fragment.js +1 -3
  233. package/src/sap/fe/core/jsx-runtime/ViewLoader.js +3 -23
  234. package/src/sap/fe/core/jsx-runtime/jsx-control.js +3 -23
  235. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +2 -1
  236. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +4 -16
  237. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +1 -1
  238. package/src/sap/fe/core/jsx-runtime/jsx.js +2 -5
  239. package/src/sap/fe/core/jsx-runtime/jsxs.js +1 -1
  240. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +4 -27
  241. package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +1 -1
  242. package/src/sap/fe/core/library.js +9 -48
  243. package/src/sap/fe/core/library.support.js +3 -2
  244. package/src/sap/fe/core/library.support.ts +3 -1
  245. package/src/sap/fe/core/library.ts +3 -8
  246. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +74 -39
  247. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +71 -26
  248. package/src/sap/fe/core/messagebundle.properties +113 -67
  249. package/src/sap/fe/core/messagebundle_ar.properties +20 -3
  250. package/src/sap/fe/core/messagebundle_bg.properties +22 -5
  251. package/src/sap/fe/core/messagebundle_ca.properties +21 -4
  252. package/src/sap/fe/core/messagebundle_cs.properties +21 -4
  253. package/src/sap/fe/core/messagebundle_cy.properties +22 -5
  254. package/src/sap/fe/core/messagebundle_da.properties +20 -3
  255. package/src/sap/fe/core/messagebundle_de.properties +38 -21
  256. package/src/sap/fe/core/messagebundle_el.properties +20 -3
  257. package/src/sap/fe/core/messagebundle_en.properties +38 -21
  258. package/src/sap/fe/core/messagebundle_en_GB.properties +20 -3
  259. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +41 -28
  260. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +41 -24
  261. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +42 -29
  262. package/src/sap/fe/core/messagebundle_es.properties +40 -23
  263. package/src/sap/fe/core/messagebundle_es_MX.properties +20 -3
  264. package/src/sap/fe/core/messagebundle_et.properties +20 -3
  265. package/src/sap/fe/core/messagebundle_fi.properties +20 -3
  266. package/src/sap/fe/core/messagebundle_fr.properties +21 -4
  267. package/src/sap/fe/core/messagebundle_fr_CA.properties +22 -5
  268. package/src/sap/fe/core/messagebundle_hi.properties +20 -3
  269. package/src/sap/fe/core/messagebundle_hr.properties +22 -5
  270. package/src/sap/fe/core/messagebundle_hu.properties +20 -3
  271. package/src/sap/fe/core/messagebundle_id.properties +20 -3
  272. package/src/sap/fe/core/messagebundle_it.properties +23 -6
  273. package/src/sap/fe/core/messagebundle_iw.properties +20 -3
  274. package/src/sap/fe/core/messagebundle_ja.properties +22 -5
  275. package/src/sap/fe/core/messagebundle_kk.properties +21 -4
  276. package/src/sap/fe/core/messagebundle_ko.properties +20 -3
  277. package/src/sap/fe/core/messagebundle_lt.properties +20 -3
  278. package/src/sap/fe/core/messagebundle_lv.properties +20 -3
  279. package/src/sap/fe/core/messagebundle_ms.properties +20 -3
  280. package/src/sap/fe/core/messagebundle_nl.properties +20 -3
  281. package/src/sap/fe/core/messagebundle_no.properties +20 -3
  282. package/src/sap/fe/core/messagebundle_pl.properties +21 -4
  283. package/src/sap/fe/core/messagebundle_pt.properties +20 -3
  284. package/src/sap/fe/core/messagebundle_pt_PT.properties +20 -3
  285. package/src/sap/fe/core/messagebundle_ro.properties +20 -3
  286. package/src/sap/fe/core/messagebundle_ru.properties +20 -3
  287. package/src/sap/fe/core/messagebundle_sh.properties +20 -3
  288. package/src/sap/fe/core/messagebundle_sk.properties +20 -3
  289. package/src/sap/fe/core/messagebundle_sl.properties +26 -9
  290. package/src/sap/fe/core/messagebundle_sv.properties +20 -3
  291. package/src/sap/fe/core/messagebundle_th.properties +21 -4
  292. package/src/sap/fe/core/messagebundle_tr.properties +20 -3
  293. package/src/sap/fe/core/messagebundle_uk.properties +23 -6
  294. package/src/sap/fe/core/messagebundle_vi.properties +20 -3
  295. package/src/sap/fe/core/messagebundle_zh_CN.properties +20 -3
  296. package/src/sap/fe/core/messagebundle_zh_TW.properties +20 -3
  297. package/src/sap/fe/core/operationsHelper.js +74 -101
  298. package/src/sap/fe/core/operationsHelper.ts +113 -44
  299. package/src/sap/fe/core/rootView/Fcl.controller.js +151 -228
  300. package/src/sap/fe/core/rootView/Fcl.controller.ts +90 -15
  301. package/src/sap/fe/core/rootView/Fcl.view.xml +1 -8
  302. package/src/sap/fe/core/rootView/NavContainer.controller.js +41 -78
  303. package/src/sap/fe/core/rootView/NavContainer.controller.ts +32 -38
  304. package/src/sap/fe/core/rootView/RootViewBaseController.js +110 -181
  305. package/src/sap/fe/core/rootView/RootViewBaseController.ts +37 -17
  306. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -18
  307. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +13 -52
  308. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -22
  309. package/src/sap/fe/core/services/NavigationServiceFactory.js +45 -87
  310. package/src/sap/fe/core/services/NavigationServiceFactory.ts +17 -10
  311. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +4 -28
  312. package/src/sap/fe/core/services/RoutingServiceFactory.js +92 -250
  313. package/src/sap/fe/core/services/RoutingServiceFactory.ts +8 -12
  314. package/src/sap/fe/core/services/ShellServicesFactory.js +122 -251
  315. package/src/sap/fe/core/services/ShellServicesFactory.ts +19 -4
  316. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +188 -273
  317. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +143 -154
  318. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +37 -135
  319. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +59 -94
  320. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +2 -16
  321. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +1 -1
  322. package/src/sap/fe/core/support/AnnotationIssue.support.js +6 -9
  323. package/src/sap/fe/core/support/AnnotationIssue.support.ts +4 -4
  324. package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +6 -9
  325. package/src/sap/fe/core/support/CollectionFacetMissingID.support.ts +3 -3
  326. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +6 -9
  327. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +3 -3
  328. package/src/sap/fe/core/support/CommonHelper.js +7 -16
  329. package/src/sap/fe/core/support/Diagnostics.js +1 -10
  330. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +6 -9
  331. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.ts +3 -3
  332. package/src/sap/fe/core/templating/CommonFormatters.js +1 -15
  333. package/src/sap/fe/core/templating/CriticalityFormatters.js +4 -20
  334. package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -20
  335. package/src/sap/fe/core/templating/DataModelPathHelper.js +49 -121
  336. package/src/sap/fe/core/templating/DataModelPathHelper.ts +41 -31
  337. package/src/sap/fe/core/templating/DisplayModeFormatter.js +8 -15
  338. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +7 -7
  339. package/src/sap/fe/core/templating/EntitySetHelper.js +6 -31
  340. package/src/sap/fe/core/templating/FieldControlHelper.js +4 -21
  341. package/src/sap/fe/core/templating/FieldControlHelper.ts +1 -1
  342. package/src/sap/fe/core/templating/FilterHelper.js +40 -111
  343. package/src/sap/fe/core/templating/FilterHelper.ts +20 -16
  344. package/src/sap/fe/core/templating/FilterTemplating.js +1 -19
  345. package/src/sap/fe/core/templating/FilterTemplating.ts +1 -1
  346. package/src/sap/fe/core/templating/PropertyFormatters.js +1 -34
  347. package/src/sap/fe/core/templating/PropertyHelper.js +120 -163
  348. package/src/sap/fe/core/templating/PropertyHelper.ts +69 -33
  349. package/src/sap/fe/core/templating/SemanticObjectHelper.js +46 -0
  350. package/src/sap/fe/core/templating/SemanticObjectHelper.ts +34 -0
  351. package/src/sap/fe/core/templating/UIFormatters.js +40 -180
  352. package/src/sap/fe/core/templating/UIFormatters.ts +37 -43
  353. package/src/sap/fe/core/type/DateTimeWithTimezone.js +3 -14
  354. package/src/sap/fe/core/type/Email.js +1 -10
  355. package/src/sap/fe/core/type/TypeUtil.js +1 -11
  356. package/ui5.yaml +0 -1
  357. package/src/sap/fe/core/controls/ActionParameterDialogFieldValueHelp.fragment.xml +0 -35
  358. package/src/sap/fe/core/helpers/LRMessageStrip.js +0 -234
  359. package/src/sap/fe/core/helpers/LRMessageStrip.ts +0 -216
@@ -6,24 +6,17 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
9
- var generate = StableIdHelper.generate;
10
-
9
+ var prepareId = StableIdHelper.prepareId;
11
10
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function () {}; return { s: F, n: function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function (e) { throw e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function () { it = it.call(o); }, n: function () { var step = it.next(); normalCompletion = step.done; return step; }, e: function (e) { didErr = true; err = e; }, f: function () { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
12
-
13
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
14
-
11
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
12
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
13
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
15
14
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
16
-
17
15
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
18
-
19
16
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
20
-
21
17
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
22
-
23
- function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
24
-
18
+ function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) { ; } } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
25
19
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
26
-
27
20
  var VOCABULARY_ALIAS = {
28
21
  "Org.OData.Capabilities.V1": "Capabilities",
29
22
  "Org.OData.Core.V1": "Core",
@@ -43,12 +36,10 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
43
36
  AppState: true
44
37
  };
45
38
  _exports.DefaultEnvironmentCapabilities = DefaultEnvironmentCapabilities;
46
-
47
39
  function parsePropertyValue(annotationObject, propertyKey, currentTarget, annotationsLists, oCapabilities) {
48
40
  var value;
49
41
  var currentPropertyTarget = "".concat(currentTarget, "/").concat(propertyKey);
50
42
  var typeOfAnnotation = typeof annotationObject;
51
-
52
43
  if (annotationObject === null) {
53
44
  value = {
54
45
  type: "Null",
@@ -76,7 +67,6 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
76
67
  return parseAnnotationObject(subAnnotationObject, "".concat(currentPropertyTarget, "/").concat(subAnnotationObjectIndex), annotationsLists, oCapabilities);
77
68
  })
78
69
  };
79
-
80
70
  if (annotationObject.length > 0) {
81
71
  if (annotationObject[0].hasOwnProperty("$PropertyPath")) {
82
72
  value.Collection.type = "PropertyPath";
@@ -214,34 +204,28 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
214
204
  Record: parseAnnotationObject(annotationObject, currentTarget, annotationsLists, oCapabilities)
215
205
  };
216
206
  }
217
-
218
207
  return {
219
208
  name: propertyKey,
220
209
  value: value
221
210
  };
222
211
  }
223
-
224
212
  function mapNameToAlias(annotationName) {
225
213
  var _annotationName$split = annotationName.split("@"),
226
- _annotationName$split2 = _slicedToArray(_annotationName$split, 2),
227
- pathPart = _annotationName$split2[0],
228
- annoPart = _annotationName$split2[1];
229
-
214
+ _annotationName$split2 = _slicedToArray(_annotationName$split, 2),
215
+ pathPart = _annotationName$split2[0],
216
+ annoPart = _annotationName$split2[1];
230
217
  if (!annoPart) {
231
218
  annoPart = pathPart;
232
219
  pathPart = "";
233
220
  } else {
234
221
  pathPart += "@";
235
222
  }
236
-
237
223
  var lastDot = annoPart.lastIndexOf(".");
238
224
  return "".concat(pathPart + VOCABULARY_ALIAS[annoPart.substr(0, lastDot)], ".").concat(annoPart.substr(lastDot + 1));
239
225
  }
240
-
241
226
  function parseAnnotationObject(annotationObject, currentObjectTarget, annotationsLists, oCapabilities) {
242
227
  var parsedAnnotationObject = {};
243
228
  var typeOfObject = typeof annotationObject;
244
-
245
229
  if (annotationObject === null) {
246
230
  parsedAnnotationObject = {
247
231
  type: "Null",
@@ -353,7 +337,6 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
353
337
  parsedAnnotationCollection.collection = annotationObject.map(function (subAnnotationObject, subAnnotationIndex) {
354
338
  return parseAnnotationObject(subAnnotationObject, "".concat(currentObjectTarget, "/").concat(subAnnotationIndex), annotationsLists, oCapabilities);
355
339
  });
356
-
357
340
  if (annotationObject.length > 0) {
358
341
  if (annotationObject[0].hasOwnProperty("$PropertyPath")) {
359
342
  parsedAnnotationCollection.collection.type = "PropertyPath";
@@ -410,10 +393,8 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
410
393
  });
411
394
  parsedAnnotationObject.propertyValues = propertyValues;
412
395
  }
413
-
414
396
  return parsedAnnotationObject;
415
397
  }
416
-
417
398
  function getOrCreateAnnotationList(target, annotationsLists) {
418
399
  if (!annotationsLists.hasOwnProperty(target)) {
419
400
  annotationsLists[target] = {
@@ -421,10 +402,13 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
421
402
  annotations: []
422
403
  };
423
404
  }
424
-
425
405
  return annotationsLists[target];
426
406
  }
427
-
407
+ function createReferenceFacetId(referenceFacet) {
408
+ var _referenceFacet$ID;
409
+ var id = (_referenceFacet$ID = referenceFacet.ID) !== null && _referenceFacet$ID !== void 0 ? _referenceFacet$ID : referenceFacet.Target.$AnnotationPath;
410
+ return id ? prepareId(id) : id;
411
+ }
428
412
  function removeChartAnnotations(annotationObject) {
429
413
  return annotationObject.filter(function (oRecord) {
430
414
  if (oRecord.Target && oRecord.Target.$AnnotationPath) {
@@ -434,101 +418,79 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
434
418
  }
435
419
  });
436
420
  }
437
-
438
421
  function removeIBNAnnotations(annotationObject) {
439
422
  return annotationObject.filter(function (oRecord) {
440
423
  return oRecord.$Type !== "com.sap.vocabularies.UI.v1.DataFieldForIntentBasedNavigation";
441
424
  });
442
425
  }
443
-
444
426
  function handlePresentationVariant(annotationObject) {
445
427
  return annotationObject.filter(function (oRecord) {
446
428
  return oRecord.$AnnotationPath !== "@com.sap.vocabularies.UI.v1.Chart";
447
429
  });
448
430
  }
449
-
450
431
  function createAnnotationLists(annotationObjects, annotationTarget, annotationLists, oCapabilities) {
451
432
  if (Object.keys(annotationObjects).length === 0) {
452
433
  return;
453
434
  }
454
-
455
435
  var outAnnotationObject = getOrCreateAnnotationList(annotationTarget, annotationLists);
456
-
457
436
  if (!oCapabilities.MicroChart) {
458
437
  delete annotationObjects["@com.sap.vocabularies.UI.v1.Chart"];
459
438
  }
460
-
461
439
  var _loop = function (_annotationKey) {
462
440
  var annotationObject = annotationObjects[_annotationKey];
463
-
464
441
  switch (_annotationKey) {
465
442
  case "@com.sap.vocabularies.UI.v1.HeaderFacets":
466
443
  if (!oCapabilities.MicroChart) {
467
444
  annotationObject = removeChartAnnotations(annotationObject);
468
445
  annotationObjects[_annotationKey] = annotationObject;
469
446
  }
470
-
471
447
  break;
472
-
473
448
  case "@com.sap.vocabularies.UI.v1.Identification":
474
449
  if (!oCapabilities.IntentBasedNavigation) {
475
450
  annotationObject = removeIBNAnnotations(annotationObject);
476
451
  annotationObjects[_annotationKey] = annotationObject;
477
452
  }
478
-
479
453
  break;
480
-
481
454
  case "@com.sap.vocabularies.UI.v1.LineItem":
482
455
  if (!oCapabilities.IntentBasedNavigation) {
483
456
  annotationObject = removeIBNAnnotations(annotationObject);
484
457
  annotationObjects[_annotationKey] = annotationObject;
485
458
  }
486
-
487
459
  if (!oCapabilities.MicroChart) {
488
460
  annotationObject = removeChartAnnotations(annotationObject);
489
461
  annotationObjects[_annotationKey] = annotationObject;
490
462
  }
491
-
492
463
  break;
493
-
494
464
  case "@com.sap.vocabularies.UI.v1.FieldGroup":
495
465
  if (!oCapabilities.IntentBasedNavigation) {
496
466
  annotationObject.Data = removeIBNAnnotations(annotationObject.Data);
497
467
  annotationObjects[_annotationKey] = annotationObject;
498
468
  }
499
-
500
469
  if (!oCapabilities.MicroChart) {
501
470
  annotationObject.Data = removeChartAnnotations(annotationObject.Data);
502
471
  annotationObjects[_annotationKey] = annotationObject;
503
472
  }
504
-
505
473
  break;
506
-
507
474
  case "@com.sap.vocabularies.UI.v1.PresentationVariant":
508
475
  if (!oCapabilities.Chart && annotationObject.Visualizations) {
509
476
  annotationObject.Visualizations = handlePresentationVariant(annotationObject.Visualizations);
510
477
  annotationObjects[_annotationKey] = annotationObject;
511
478
  }
512
-
513
479
  break;
514
-
515
480
  default:
516
481
  break;
517
482
  }
483
+ var currentOutAnnotationObject = outAnnotationObject;
518
484
 
519
- var currentOutAnnotationObject = outAnnotationObject; // Check for annotation of annotation
520
-
485
+ // Check for annotation of annotation
521
486
  var annotationOfAnnotationSplit = _annotationKey.split("@");
522
-
523
487
  if (annotationOfAnnotationSplit.length > 2) {
524
488
  currentOutAnnotationObject = getOrCreateAnnotationList("".concat(annotationTarget, "@").concat(annotationOfAnnotationSplit[1]), annotationLists);
525
489
  _annotationKey = annotationOfAnnotationSplit[2];
526
490
  } else {
527
491
  _annotationKey = annotationOfAnnotationSplit[1];
528
492
  }
529
-
530
493
  var annotationQualifierSplit = _annotationKey.split("#");
531
-
532
494
  var qualifier = annotationQualifierSplit[1];
533
495
  _annotationKey = annotationQualifierSplit[0];
534
496
  var parsedAnnotationObject = {
@@ -536,14 +498,11 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
536
498
  qualifier: qualifier
537
499
  };
538
500
  var currentAnnotationTarget = "".concat(annotationTarget, "@").concat(parsedAnnotationObject.term);
539
-
540
501
  if (qualifier) {
541
502
  currentAnnotationTarget += "#".concat(qualifier);
542
503
  }
543
-
544
504
  var isCollection = false;
545
505
  var typeofAnnotation = typeof annotationObject;
546
-
547
506
  if (annotationObject === null) {
548
507
  parsedAnnotationObject.value = {
549
508
  type: "Bool",
@@ -645,7 +604,6 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
645
604
  parsedAnnotationObject.collection = annotationObject.map(function (subAnnotationObject, subAnnotationIndex) {
646
605
  return parseAnnotationObject(subAnnotationObject, "".concat(currentAnnotationTarget, "/").concat(subAnnotationIndex), annotationLists, oCapabilities);
647
606
  });
648
-
649
607
  if (annotationObject.length > 0) {
650
608
  if (annotationObject[0].hasOwnProperty("$PropertyPath")) {
651
609
  parsedAnnotationObject.collection.type = "PropertyPath";
@@ -689,14 +647,11 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
689
647
  var record = {
690
648
  propertyValues: []
691
649
  };
692
-
693
650
  if (annotationObject.$Type) {
694
651
  var typeValue = annotationObject.$Type;
695
652
  record.type = "".concat(typeValue);
696
653
  }
697
-
698
654
  var propertyValues = [];
699
-
700
655
  for (var propertyKey in annotationObject) {
701
656
  if (propertyKey !== "$Type" && !propertyKey.startsWith("@")) {
702
657
  propertyValues.push(parsePropertyValue(annotationObject[propertyKey], propertyKey, currentAnnotationTarget, annotationLists, oCapabilities));
@@ -705,21 +660,17 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
705
660
  createAnnotationLists(_defineProperty({}, propertyKey, annotationObject[propertyKey]), currentAnnotationTarget, annotationLists, oCapabilities);
706
661
  }
707
662
  }
708
-
709
663
  record.propertyValues = propertyValues;
710
664
  parsedAnnotationObject.record = record;
711
665
  }
712
-
713
666
  parsedAnnotationObject.isCollection = isCollection;
714
667
  currentOutAnnotationObject.annotations.push(parsedAnnotationObject);
715
668
  annotationKey = _annotationKey;
716
669
  };
717
-
718
670
  for (var annotationKey in annotationObjects) {
719
671
  _loop(annotationKey);
720
672
  }
721
673
  }
722
-
723
674
  function prepareProperty(propertyDefinition, entityTypeObject, propertyName) {
724
675
  var propertyObject = {
725
676
  _type: "Property",
@@ -733,10 +684,8 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
733
684
  };
734
685
  return propertyObject;
735
686
  }
736
-
737
687
  function prepareNavigationProperty(navPropertyDefinition, entityTypeObject, navPropertyName) {
738
688
  var referentialConstraint = [];
739
-
740
689
  if (navPropertyDefinition.$ReferentialConstraint) {
741
690
  referentialConstraint = Object.keys(navPropertyDefinition.$ReferentialConstraint).map(function (sourcePropertyName) {
742
691
  return {
@@ -747,7 +696,6 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
747
696
  };
748
697
  });
749
698
  }
750
-
751
699
  var navigationProperty = {
752
700
  _type: "NavigationProperty",
753
701
  name: navPropertyName,
@@ -760,7 +708,6 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
760
708
  };
761
709
  return navigationProperty;
762
710
  }
763
-
764
711
  function prepareEntitySet(entitySetDefinition, entitySetName, entityContainerName) {
765
712
  var entitySetObject = {
766
713
  _type: "EntitySet",
@@ -771,7 +718,6 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
771
718
  };
772
719
  return entitySetObject;
773
720
  }
774
-
775
721
  function prepareSingleton(singletonDefinition, singletonName, entityContainerName) {
776
722
  return {
777
723
  _type: "Singleton",
@@ -782,7 +728,6 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
782
728
  nullable: true
783
729
  };
784
730
  }
785
-
786
731
  function prepareTypeDefinition(typeDefinition, typeName, namespace) {
787
732
  var typeObject = {
788
733
  _type: "TypeDefinition",
@@ -792,7 +737,6 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
792
737
  };
793
738
  return typeObject;
794
739
  }
795
-
796
740
  function prepareComplexType(complexTypeDefinition, complexTypeName, namespace) {
797
741
  var complexTypeObject = {
798
742
  _type: "ComplexType",
@@ -823,12 +767,10 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
823
767
  complexTypeObject.navigationProperties = complexTypeNavigationProperties;
824
768
  return complexTypeObject;
825
769
  }
826
-
827
770
  function prepareEntityKeys(entityTypeDefinition, oMetaModelData) {
828
771
  if (!entityTypeDefinition.$Key && entityTypeDefinition.$BaseType) {
829
772
  return prepareEntityKeys(oMetaModelData["".concat(entityTypeDefinition.$BaseType)], oMetaModelData);
830
773
  }
831
-
832
774
  return entityTypeDefinition.$Key || []; //handling of entity types without key as well as basetype
833
775
  }
834
776
 
@@ -868,16 +810,13 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
868
810
  entityTypeObject.navigationProperties = navigationProperties;
869
811
  return entityTypeObject;
870
812
  }
871
-
872
813
  function prepareAction(actionName, actionRawData, namespace, entityContainerName) {
873
814
  var actionEntityType = "";
874
815
  var actionFQN = "".concat(actionName);
875
816
  var actionShortName = actionName.substr(namespace.length + 1);
876
-
877
817
  if (actionRawData.$IsBound) {
878
818
  var bindingParameter = actionRawData.$Parameter[0];
879
819
  actionEntityType = bindingParameter.$Type;
880
-
881
820
  if (bindingParameter.$isCollection === true) {
882
821
  actionFQN = "".concat(actionName, "(Collection(").concat(actionEntityType, "))");
883
822
  } else {
@@ -886,7 +825,6 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
886
825
  } else {
887
826
  actionFQN = "".concat(entityContainerName, "/").concat(actionShortName);
888
827
  }
889
-
890
828
  var parameters = actionRawData.$Parameter || [];
891
829
  return {
892
830
  _type: "Action",
@@ -898,7 +836,6 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
898
836
  returnType: actionRawData.$ReturnType ? actionRawData.$ReturnType.$Type : "",
899
837
  parameters: parameters.map(function (param) {
900
838
  var _param$$isCollection;
901
-
902
839
  return {
903
840
  _type: "ActionParameter",
904
841
  fullyQualifiedName: "".concat(actionFQN, "/").concat(param.$Name),
@@ -909,7 +846,6 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
909
846
  })
910
847
  };
911
848
  }
912
-
913
849
  function prepareEntityTypes(oMetaModel) {
914
850
  var oCapabilities = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DefaultEnvironmentCapabilities;
915
851
  var oMetaModelData = oMetaModel.getObject("/$");
@@ -924,35 +860,29 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
924
860
  var schemaKeys = Object.keys(oMetaModelData).filter(function (metamodelKey) {
925
861
  return oMetaModelData[metamodelKey].$kind === "Schema";
926
862
  });
927
-
928
863
  if (schemaKeys && schemaKeys.length > 0) {
929
864
  namespace = schemaKeys[0].substr(0, schemaKeys[0].length - 1);
930
865
  } else if (entityTypes && entityTypes.length) {
931
866
  namespace = entityTypes[0].fullyQualifiedName.replace(entityTypes[0].name, "");
932
867
  namespace = namespace.substr(0, namespace.length - 1);
933
868
  }
934
-
935
869
  Object.keys(oMetaModelData).forEach(function (sObjectName) {
936
870
  if (sObjectName !== "$kind") {
937
871
  switch (oMetaModelData[sObjectName].$kind) {
938
872
  case "EntityType":
939
- var entityType = prepareEntityType(oMetaModelData[sObjectName], sObjectName, namespace, oMetaModelData); // Check if there are filter facets defined for the entityType and if yes, check if all of them have an ID
873
+ var entityType = prepareEntityType(oMetaModelData[sObjectName], sObjectName, namespace, oMetaModelData);
874
+ // Check if there are filter facets defined for the entityType and if yes, check if all of them have an ID
940
875
  // The ID is optional, but it is internally taken for grouping filter fields and if it's not present
941
876
  // a fallback ID needs to be generated here.
942
-
943
877
  if (oMetaModelData.$Annotations[entityType.fullyQualifiedName] && oMetaModelData.$Annotations[entityType.fullyQualifiedName]["@com.sap.vocabularies.UI.v1.FilterFacets"]) {
944
878
  oMetaModelData.$Annotations[entityType.fullyQualifiedName]["@com.sap.vocabularies.UI.v1.FilterFacets"].forEach(function (filterFacetAnnotation) {
945
- filterFacetAnnotation.ID = filterFacetAnnotation.ID || generate([{
946
- Facet: filterFacetAnnotation
947
- }]);
879
+ filterFacetAnnotation.ID = createReferenceFacetId(filterFacetAnnotation);
948
880
  });
949
881
  }
950
-
951
882
  entityType.entityProperties.forEach(function (entityProperty) {
952
883
  if (!oMetaModelData.$Annotations[entityProperty.fullyQualifiedName]) {
953
884
  oMetaModelData.$Annotations[entityProperty.fullyQualifiedName] = {};
954
885
  }
955
-
956
886
  if (!oMetaModelData.$Annotations[entityProperty.fullyQualifiedName]["@com.sap.vocabularies.UI.v1.DataFieldDefault"]) {
957
887
  oMetaModelData.$Annotations[entityProperty.fullyQualifiedName]["@com.sap.vocabularies.UI.v1.DataFieldDefault"] = {
958
888
  $Type: "com.sap.vocabularies.UI.v1.DataField",
@@ -964,12 +894,10 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
964
894
  });
965
895
  entityTypes.push(entityType);
966
896
  break;
967
-
968
897
  case "ComplexType":
969
898
  var complexType = prepareComplexType(oMetaModelData[sObjectName], sObjectName, namespace);
970
899
  complexTypes.push(complexType);
971
900
  break;
972
-
973
901
  case "TypeDefinition":
974
902
  var typeDefinition = prepareTypeDefinition(oMetaModelData[sObjectName], sObjectName, namespace);
975
903
  typeDefinitions.push(typeDefinition);
@@ -985,7 +913,6 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
985
913
  var entitySet = prepareEntitySet(oEntityContainer[sObjectName], sObjectName, entityContainerName);
986
914
  entitySets.push(entitySet);
987
915
  break;
988
-
989
916
  case "Singleton":
990
917
  var singleton = prepareSingleton(oEntityContainer[sObjectName], sObjectName, entityContainerName);
991
918
  singletons.push(singleton);
@@ -998,7 +925,6 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
998
925
  name: "",
999
926
  fullyQualifiedName: ""
1000
927
  };
1001
-
1002
928
  if (entityContainerName) {
1003
929
  entityContainer = {
1004
930
  _type: "EntityContainer",
@@ -1006,16 +932,13 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
1006
932
  fullyQualifiedName: entityContainerName
1007
933
  };
1008
934
  }
1009
-
1010
935
  entitySets.forEach(function (entitySet) {
1011
936
  var navPropertyBindings = oEntityContainer[entitySet.name].$NavigationPropertyBinding;
1012
-
1013
937
  if (navPropertyBindings) {
1014
938
  Object.keys(navPropertyBindings).forEach(function (navPropName) {
1015
939
  var targetEntitySet = entitySets.find(function (entitySetName) {
1016
940
  return entitySetName.name === navPropertyBindings[navPropName];
1017
941
  });
1018
-
1019
942
  if (targetEntitySet) {
1020
943
  entitySet.navigationPropertyBinding[navPropName] = targetEntitySet;
1021
944
  }
@@ -1031,12 +954,11 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
1031
954
  });
1032
955
  return outActions;
1033
956
  }, []);
1034
-
1035
957
  for (var target in oMetaModelData.$Annotations) {
1036
958
  createAnnotationLists(oMetaModelData.$Annotations[target], target, annotationLists, oCapabilities);
1037
- } // Sort by target length
1038
-
959
+ }
1039
960
 
961
+ // Sort by target length
1040
962
  var outAnnotationLists = Object.keys(annotationLists).sort(function (a, b) {
1041
963
  return a.length >= b.length ? 1 : -1;
1042
964
  }).map(function (sAnnotationName) {
@@ -1056,17 +978,18 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
1056
978
  associations: [],
1057
979
  associationSets: [],
1058
980
  actions: actions,
981
+ actionImports: [],
1059
982
  namespace: namespace,
1060
983
  annotations: {
1061
- "metamodelResult": outAnnotationLists
984
+ metamodelResult: outAnnotationLists
1062
985
  }
1063
986
  },
1064
987
  references: references
1065
988
  };
1066
989
  }
1067
-
1068
990
  _exports.prepareEntityTypes = prepareEntityTypes;
1069
991
  var mMetaModelMap = {};
992
+
1070
993
  /**
1071
994
  * Convert the ODataMetaModel into another format that allow for easy manipulation of the annotations.
1072
995
  *
@@ -1074,43 +997,31 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
1074
997
  * @param oCapabilities The current capabilities
1075
998
  * @returns An object containing object-like annotations
1076
999
  */
1077
-
1078
1000
  function convertTypes(oMetaModel, oCapabilities) {
1079
1001
  var sMetaModelId = oMetaModel.id;
1080
-
1081
1002
  if (!mMetaModelMap.hasOwnProperty(sMetaModelId)) {
1082
1003
  var parsedOutput = prepareEntityTypes(oMetaModel, oCapabilities);
1083
-
1084
1004
  try {
1085
1005
  mMetaModelMap[sMetaModelId] = AnnotationConverter.convert(parsedOutput);
1086
1006
  } catch (oError) {
1087
1007
  throw new Error(oError);
1088
1008
  }
1089
1009
  }
1090
-
1091
1010
  return mMetaModelMap[sMetaModelId];
1092
1011
  }
1093
-
1094
1012
  _exports.convertTypes = convertTypes;
1095
-
1096
1013
  function getConvertedTypes(oContext) {
1097
1014
  var oMetaModel = oContext.getModel();
1098
-
1099
1015
  if (!oMetaModel.isA("sap.ui.model.odata.v4.ODataMetaModel")) {
1100
1016
  throw new Error("This should only be called on a ODataMetaModel");
1101
1017
  }
1102
-
1103
1018
  return convertTypes(oMetaModel);
1104
1019
  }
1105
-
1106
1020
  _exports.getConvertedTypes = getConvertedTypes;
1107
-
1108
1021
  function deleteModelCacheData(oMetaModel) {
1109
1022
  delete mMetaModelMap[oMetaModel.id];
1110
1023
  }
1111
-
1112
1024
  _exports.deleteModelCacheData = deleteModelCacheData;
1113
-
1114
1025
  function convertMetaModelContext(oMetaModelContext) {
1115
1026
  var bIncludeVisitedObjects = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1116
1027
  var oConvertedMetadata = convertTypes(oMetaModelContext.getModel());
@@ -1118,55 +1029,43 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
1118
1029
  var aPathSplit = sPath.split("/");
1119
1030
  var firstPart = aPathSplit[1];
1120
1031
  var beginIndex = 2;
1121
-
1122
1032
  if (oConvertedMetadata.entityContainer.fullyQualifiedName === firstPart) {
1123
1033
  firstPart = aPathSplit[2];
1124
1034
  beginIndex++;
1125
1035
  }
1126
-
1127
1036
  var targetEntitySet = oConvertedMetadata.entitySets.find(function (entitySet) {
1128
1037
  return entitySet.name === firstPart;
1129
1038
  });
1130
-
1131
1039
  if (!targetEntitySet) {
1132
1040
  targetEntitySet = oConvertedMetadata.singletons.find(function (singleton) {
1133
1041
  return singleton.name === firstPart;
1134
1042
  });
1135
1043
  }
1136
-
1137
1044
  var relativePath = aPathSplit.slice(beginIndex).join("/");
1138
1045
  var localObjects = [targetEntitySet];
1139
-
1140
1046
  while (relativePath && relativePath.length > 0 && relativePath.startsWith("$NavigationPropertyBinding")) {
1141
1047
  var _sNavPropToCheck;
1142
-
1143
1048
  var relativeSplit = relativePath.split("/");
1144
1049
  var idx = 0;
1145
1050
  var currentEntitySet = void 0,
1146
- sNavPropToCheck = void 0;
1051
+ sNavPropToCheck = void 0;
1147
1052
  relativeSplit = relativeSplit.slice(1); // Removing "$NavigationPropertyBinding"
1148
-
1149
1053
  while (!currentEntitySet && relativeSplit.length > idx) {
1150
1054
  if (relativeSplit[idx] !== "$NavigationPropertyBinding") {
1151
1055
  // Finding the correct entitySet for the navigaiton property binding example: "Set/_SalesOrder"
1152
1056
  sNavPropToCheck = relativeSplit.slice(0, idx + 1).join("/").replace("/$NavigationPropertyBinding", "");
1153
1057
  currentEntitySet = targetEntitySet && targetEntitySet.navigationPropertyBinding[sNavPropToCheck];
1154
1058
  }
1155
-
1156
1059
  idx++;
1157
1060
  }
1158
-
1159
1061
  if (!currentEntitySet) {
1160
1062
  // Fall back to Single nav prop if entitySet is not found.
1161
1063
  sNavPropToCheck = relativeSplit[0];
1162
1064
  }
1163
-
1164
1065
  var aNavProps = ((_sNavPropToCheck = sNavPropToCheck) === null || _sNavPropToCheck === void 0 ? void 0 : _sNavPropToCheck.split("/")) || [];
1165
1066
  var targetEntityType = targetEntitySet && targetEntitySet.entityType;
1166
-
1167
1067
  var _iterator = _createForOfIteratorHelper(aNavProps),
1168
- _step;
1169
-
1068
+ _step;
1170
1069
  try {
1171
1070
  var _loop2 = function () {
1172
1071
  var sNavProp = _step.value;
@@ -1174,7 +1073,6 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
1174
1073
  var targetNavProp = targetEntityType && targetEntityType.navigationProperties.find(function (navProp) {
1175
1074
  return navProp.name === sNavProp;
1176
1075
  });
1177
-
1178
1076
  if (targetNavProp) {
1179
1077
  localObjects.push(targetNavProp);
1180
1078
  targetEntityType = targetNavProp.targetType;
@@ -1182,10 +1080,8 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
1182
1080
  return "break";
1183
1081
  }
1184
1082
  };
1185
-
1186
1083
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
1187
1084
  var _ret = _loop2();
1188
-
1189
1085
  if (_ret === "break") break;
1190
1086
  }
1191
1087
  } catch (err) {
@@ -1193,26 +1089,20 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
1193
1089
  } finally {
1194
1090
  _iterator.f();
1195
1091
  }
1196
-
1197
1092
  targetEntitySet = targetEntitySet && currentEntitySet || targetEntitySet && targetEntitySet.navigationPropertyBinding[relativeSplit[0]];
1198
-
1199
1093
  if (targetEntitySet) {
1200
1094
  // Pushing the target entitySet to visited objects
1201
1095
  localObjects.push(targetEntitySet);
1202
- } // Re-calculating the relative path
1096
+ }
1097
+ // Re-calculating the relative path
1203
1098
  // As each navigation name is enclosed between '$NavigationPropertyBinding' and '$' (to be able to access the entityset easily in the metamodel)
1204
1099
  // we need to remove the closing '$' to be able to switch to the next navigation
1205
-
1206
-
1207
1100
  relativeSplit = relativeSplit.slice(aNavProps.length || 1);
1208
-
1209
1101
  if (relativeSplit.length && relativeSplit[0] === "$") {
1210
1102
  relativeSplit.shift();
1211
1103
  }
1212
-
1213
1104
  relativePath = relativeSplit.join("/");
1214
1105
  }
1215
-
1216
1106
  if (relativePath.startsWith("$Type")) {
1217
1107
  // As $Type@ is allowed as well
1218
1108
  if (relativePath.startsWith("$Type@")) {
@@ -1222,10 +1112,8 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
1222
1112
  relativePath = aPathSplit.slice(3).join("/");
1223
1113
  }
1224
1114
  }
1225
-
1226
1115
  if (targetEntitySet && relativePath.length) {
1227
1116
  var oTarget = targetEntitySet.entityType.resolvePath(relativePath, bIncludeVisitedObjects);
1228
-
1229
1117
  if (oTarget) {
1230
1118
  if (bIncludeVisitedObjects) {
1231
1119
  oTarget.visitedObjects = localObjects.concat(oTarget.visitedObjects);
@@ -1233,12 +1121,9 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
1233
1121
  } else if (targetEntitySet.entityType && targetEntitySet.entityType.actions) {
1234
1122
  // if target is an action or an action parameter
1235
1123
  var actions = targetEntitySet.entityType && targetEntitySet.entityType.actions;
1236
-
1237
1124
  var _relativeSplit = relativePath.split("/");
1238
-
1239
1125
  if (actions[_relativeSplit[0]]) {
1240
1126
  var action = actions[_relativeSplit[0]];
1241
-
1242
1127
  if (_relativeSplit[1] && action.parameters) {
1243
1128
  var parameterName = _relativeSplit[1];
1244
1129
  return action.parameters.find(function (parameter) {
@@ -1249,7 +1134,6 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
1249
1134
  }
1250
1135
  }
1251
1136
  }
1252
-
1253
1137
  return oTarget;
1254
1138
  } else {
1255
1139
  if (bIncludeVisitedObjects) {
@@ -1258,78 +1142,60 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
1258
1142
  visitedObjects: localObjects
1259
1143
  };
1260
1144
  }
1261
-
1262
1145
  return targetEntitySet;
1263
1146
  }
1264
1147
  }
1265
-
1266
1148
  _exports.convertMetaModelContext = convertMetaModelContext;
1267
-
1268
1149
  function getInvolvedDataModelObjects(oMetaModelContext, oEntitySetMetaModelContext) {
1269
1150
  var oConvertedMetadata = convertTypes(oMetaModelContext.getModel());
1270
1151
  var metaModelContext = convertMetaModelContext(oMetaModelContext, true);
1271
1152
  var targetEntitySetLocation;
1272
-
1273
1153
  if (oEntitySetMetaModelContext && oEntitySetMetaModelContext.getPath() !== "/") {
1274
1154
  targetEntitySetLocation = getInvolvedDataModelObjects(oEntitySetMetaModelContext);
1275
1155
  }
1276
-
1277
1156
  return getInvolvedDataModelObjectFromPath(metaModelContext, oConvertedMetadata, targetEntitySetLocation);
1278
1157
  }
1279
-
1280
1158
  _exports.getInvolvedDataModelObjects = getInvolvedDataModelObjects;
1281
-
1282
1159
  function getInvolvedDataModelObjectFromPath(metaModelContext, convertedTypes, targetEntitySetLocation, onlyServiceObjects) {
1283
1160
  var _outDataModelPath$tar;
1284
-
1285
1161
  var dataModelObjects = metaModelContext.visitedObjects.filter(function (visitedObject) {
1286
1162
  return visitedObject && visitedObject.hasOwnProperty("_type") && visitedObject._type !== "EntityType" && visitedObject._type !== "EntityContainer";
1287
1163
  });
1288
-
1289
1164
  if (metaModelContext.target && metaModelContext.target.hasOwnProperty("_type") && metaModelContext.target._type !== "EntityType" && dataModelObjects[dataModelObjects.length - 1] !== metaModelContext.target && !onlyServiceObjects) {
1290
1165
  dataModelObjects.push(metaModelContext.target);
1291
1166
  }
1292
-
1293
1167
  var navigationProperties = [];
1294
1168
  var rootEntitySet = dataModelObjects[0];
1295
1169
  var currentEntitySet = rootEntitySet;
1296
1170
  var currentEntityType = rootEntitySet.entityType;
1297
1171
  var currentObject;
1298
1172
  var navigatedPath = [];
1299
-
1300
1173
  for (var i = 1; i < dataModelObjects.length; i++) {
1301
1174
  currentObject = dataModelObjects[i];
1302
-
1303
1175
  if (currentObject._type === "NavigationProperty") {
1304
1176
  var _currentEntitySet;
1305
-
1306
1177
  navigatedPath.push(currentObject.name);
1307
1178
  navigationProperties.push(currentObject);
1308
1179
  currentEntityType = currentObject.targetType;
1309
1180
  var boundEntitySet = (_currentEntitySet = currentEntitySet) === null || _currentEntitySet === void 0 ? void 0 : _currentEntitySet.navigationPropertyBinding[navigatedPath.join("/")];
1310
-
1311
1181
  if (boundEntitySet) {
1312
1182
  currentEntitySet = boundEntitySet;
1313
1183
  navigatedPath = [];
1314
1184
  }
1315
1185
  }
1316
-
1317
1186
  if (currentObject._type === "EntitySet" || currentObject._type === "Singleton") {
1318
1187
  currentEntitySet = currentObject;
1319
1188
  currentEntityType = currentEntitySet.entityType;
1320
1189
  }
1321
1190
  }
1322
-
1323
1191
  if (navigatedPath.length > 0) {
1324
1192
  // Path without NavigationPropertyBinding --> no target entity set
1325
1193
  currentEntitySet = undefined;
1326
1194
  }
1327
-
1328
1195
  if (targetEntitySetLocation && targetEntitySetLocation.startingEntitySet !== rootEntitySet) {
1329
1196
  // In case the entityset is not starting from the same location it may mean that we are doing too much work earlier for some reason
1330
1197
  // As such we need to redefine the context source for the targetEntitySetLocation
1331
1198
  var startingIndex = dataModelObjects.indexOf(targetEntitySetLocation.startingEntitySet);
1332
-
1333
1199
  if (startingIndex !== -1) {
1334
1200
  // If it's not found I don't know what we can do (probably nothing)
1335
1201
  var requiredDataModelObjects = dataModelObjects.slice(0, startingIndex);
@@ -1339,7 +1205,6 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
1339
1205
  }).concat(targetEntitySetLocation.navigationProperties);
1340
1206
  }
1341
1207
  }
1342
-
1343
1208
  var outDataModelPath = {
1344
1209
  startingEntitySet: rootEntitySet,
1345
1210
  targetEntitySet: currentEntitySet,
@@ -1349,19 +1214,15 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
1349
1214
  contextLocation: targetEntitySetLocation,
1350
1215
  convertedTypes: convertedTypes
1351
1216
  };
1352
-
1353
1217
  if (!((_outDataModelPath$tar = outDataModelPath.targetObject) !== null && _outDataModelPath$tar !== void 0 && _outDataModelPath$tar.hasOwnProperty("_type")) && onlyServiceObjects) {
1354
1218
  outDataModelPath.targetObject = currentObject;
1355
1219
  }
1356
-
1357
1220
  if (!outDataModelPath.contextLocation) {
1358
1221
  outDataModelPath.contextLocation = outDataModelPath;
1359
1222
  }
1360
-
1361
1223
  return outDataModelPath;
1362
1224
  }
1363
-
1364
1225
  _exports.getInvolvedDataModelObjectFromPath = getInvolvedDataModelObjectFromPath;
1365
1226
  return _exports;
1366
1227
  }, false);
1367
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJWT0NBQlVMQVJZX0FMSUFTIiwiRGVmYXVsdEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiQ2hhcnQiLCJNaWNyb0NoYXJ0IiwiVVNoZWxsIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiQXBwU3RhdGUiLCJwYXJzZVByb3BlcnR5VmFsdWUiLCJhbm5vdGF0aW9uT2JqZWN0IiwicHJvcGVydHlLZXkiLCJjdXJyZW50VGFyZ2V0IiwiYW5ub3RhdGlvbnNMaXN0cyIsIm9DYXBhYmlsaXRpZXMiLCJ2YWx1ZSIsImN1cnJlbnRQcm9wZXJ0eVRhcmdldCIsInR5cGVPZkFubm90YXRpb24iLCJ0eXBlIiwiTnVsbCIsIlN0cmluZyIsIkJvb2wiLCJJbnQiLCJBcnJheSIsImlzQXJyYXkiLCJDb2xsZWN0aW9uIiwibWFwIiwic3ViQW5ub3RhdGlvbk9iamVjdCIsInN1YkFubm90YXRpb25PYmplY3RJbmRleCIsInBhcnNlQW5ub3RhdGlvbk9iamVjdCIsImxlbmd0aCIsImhhc093blByb3BlcnR5IiwiJFBhdGgiLCJ1bmRlZmluZWQiLCJQYXRoIiwiJERlY2ltYWwiLCJEZWNpbWFsIiwicGFyc2VGbG9hdCIsIiRQcm9wZXJ0eVBhdGgiLCJQcm9wZXJ0eVBhdGgiLCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aCIsIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCIkSWYiLCJJZiIsIiRBbmQiLCJBbmQiLCIkT3IiLCJPciIsIiROb3QiLCJOb3QiLCIkRXEiLCJFcSIsIiROZSIsIk5lIiwiJEd0IiwiR3QiLCIkR2UiLCJHZSIsIiRMdCIsIkx0IiwiJExlIiwiTGUiLCIkQXBwbHkiLCJBcHBseSIsIkZ1bmN0aW9uIiwiJEZ1bmN0aW9uIiwiJEFubm90YXRpb25QYXRoIiwiQW5ub3RhdGlvblBhdGgiLCIkRW51bU1lbWJlciIsIkVudW1NZW1iZXIiLCJtYXBOYW1lVG9BbGlhcyIsInNwbGl0IiwiJFR5cGUiLCJSZWNvcmQiLCJuYW1lIiwiYW5ub3RhdGlvbk5hbWUiLCJwYXRoUGFydCIsImFubm9QYXJ0IiwibGFzdERvdCIsImxhc3RJbmRleE9mIiwic3Vic3RyIiwiY3VycmVudE9iamVjdFRhcmdldCIsInBhcnNlZEFubm90YXRpb25PYmplY3QiLCJ0eXBlT2ZPYmplY3QiLCJwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbiIsImNvbGxlY3Rpb24iLCJzdWJBbm5vdGF0aW9uSW5kZXgiLCJ0eXBlVmFsdWUiLCJwcm9wZXJ0eVZhbHVlcyIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwic3RhcnRzV2l0aCIsInB1c2giLCJjcmVhdGVBbm5vdGF0aW9uTGlzdHMiLCJnZXRPckNyZWF0ZUFubm90YXRpb25MaXN0IiwidGFyZ2V0IiwiYW5ub3RhdGlvbnMiLCJyZW1vdmVDaGFydEFubm90YXRpb25zIiwiZmlsdGVyIiwib1JlY29yZCIsIlRhcmdldCIsImluZGV4T2YiLCJyZW1vdmVJQk5Bbm5vdGF0aW9ucyIsImhhbmRsZVByZXNlbnRhdGlvblZhcmlhbnQiLCJhbm5vdGF0aW9uT2JqZWN0cyIsImFubm90YXRpb25UYXJnZXQiLCJhbm5vdGF0aW9uTGlzdHMiLCJvdXRBbm5vdGF0aW9uT2JqZWN0IiwiYW5ub3RhdGlvbktleSIsIkRhdGEiLCJWaXN1YWxpemF0aW9ucyIsImN1cnJlbnRPdXRBbm5vdGF0aW9uT2JqZWN0IiwiYW5ub3RhdGlvbk9mQW5ub3RhdGlvblNwbGl0IiwiYW5ub3RhdGlvblF1YWxpZmllclNwbGl0IiwicXVhbGlmaWVyIiwidGVybSIsImN1cnJlbnRBbm5vdGF0aW9uVGFyZ2V0IiwiaXNDb2xsZWN0aW9uIiwidHlwZW9mQW5ub3RhdGlvbiIsInJlY29yZCIsInByZXBhcmVQcm9wZXJ0eSIsInByb3BlcnR5RGVmaW5pdGlvbiIsImVudGl0eVR5cGVPYmplY3QiLCJwcm9wZXJ0eU5hbWUiLCJwcm9wZXJ0eU9iamVjdCIsIl90eXBlIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwibWF4TGVuZ3RoIiwiJE1heExlbmd0aCIsInByZWNpc2lvbiIsIiRQcmVjaXNpb24iLCJzY2FsZSIsIiRTY2FsZSIsIm51bGxhYmxlIiwiJE51bGxhYmxlIiwicHJlcGFyZU5hdmlnYXRpb25Qcm9wZXJ0eSIsIm5hdlByb3BlcnR5RGVmaW5pdGlvbiIsIm5hdlByb3BlcnR5TmFtZSIsInJlZmVyZW50aWFsQ29uc3RyYWludCIsIiRSZWZlcmVudGlhbENvbnN0cmFpbnQiLCJzb3VyY2VQcm9wZXJ0eU5hbWUiLCJzb3VyY2VUeXBlTmFtZSIsInNvdXJjZVByb3BlcnR5IiwidGFyZ2V0VHlwZU5hbWUiLCJ0YXJnZXRQcm9wZXJ0eSIsIm5hdmlnYXRpb25Qcm9wZXJ0eSIsInBhcnRuZXIiLCIkUGFydG5lciIsIiRpc0NvbGxlY3Rpb24iLCJjb250YWluc1RhcmdldCIsIiRDb250YWluc1RhcmdldCIsInByZXBhcmVFbnRpdHlTZXQiLCJlbnRpdHlTZXREZWZpbml0aW9uIiwiZW50aXR5U2V0TmFtZSIsImVudGl0eUNvbnRhaW5lck5hbWUiLCJlbnRpdHlTZXRPYmplY3QiLCJuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nIiwiZW50aXR5VHlwZU5hbWUiLCJwcmVwYXJlU2luZ2xldG9uIiwic2luZ2xldG9uRGVmaW5pdGlvbiIsInNpbmdsZXRvbk5hbWUiLCJwcmVwYXJlVHlwZURlZmluaXRpb24iLCJ0eXBlRGVmaW5pdGlvbiIsInR5cGVOYW1lIiwibmFtZXNwYWNlIiwidHlwZU9iamVjdCIsInJlcGxhY2UiLCJ1bmRlcmx5aW5nVHlwZSIsIiRVbmRlcmx5aW5nVHlwZSIsInByZXBhcmVDb21wbGV4VHlwZSIsImNvbXBsZXhUeXBlRGVmaW5pdGlvbiIsImNvbXBsZXhUeXBlTmFtZSIsImNvbXBsZXhUeXBlT2JqZWN0IiwicHJvcGVydGllcyIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiY29tcGxleFR5cGVQcm9wZXJ0aWVzIiwicHJvcGVydHlOYW1lT3JOb3QiLCIka2luZCIsInNvcnQiLCJhIiwiYiIsImNvbXBsZXhUeXBlTmF2aWdhdGlvblByb3BlcnRpZXMiLCJwcmVwYXJlRW50aXR5S2V5cyIsImVudGl0eVR5cGVEZWZpbml0aW9uIiwib01ldGFNb2RlbERhdGEiLCIkS2V5IiwiJEJhc2VUeXBlIiwicHJlcGFyZUVudGl0eVR5cGUiLCJtZXRhTW9kZWxEYXRhIiwiZW50aXR5S2V5cyIsImVudGl0eVByb3BlcnRpZXMiLCJhY3Rpb25zIiwiZW50aXR5S2V5IiwiZmluZCIsInByb3BlcnR5IiwicHJlcGFyZUFjdGlvbiIsImFjdGlvbk5hbWUiLCJhY3Rpb25SYXdEYXRhIiwiYWN0aW9uRW50aXR5VHlwZSIsImFjdGlvbkZRTiIsImFjdGlvblNob3J0TmFtZSIsIiRJc0JvdW5kIiwiYmluZGluZ1BhcmFtZXRlciIsIiRQYXJhbWV0ZXIiLCJwYXJhbWV0ZXJzIiwiaXNCb3VuZCIsImlzRnVuY3Rpb24iLCJzb3VyY2VUeXBlIiwicmV0dXJuVHlwZSIsIiRSZXR1cm5UeXBlIiwicGFyYW0iLCIkTmFtZSIsInByZXBhcmVFbnRpdHlUeXBlcyIsIm9NZXRhTW9kZWwiLCJnZXRPYmplY3QiLCJlbnRpdHlUeXBlcyIsImVudGl0eVNldHMiLCJzaW5nbGV0b25zIiwiY29tcGxleFR5cGVzIiwidHlwZURlZmluaXRpb25zIiwiJEVudGl0eUNvbnRhaW5lciIsInNjaGVtYUtleXMiLCJtZXRhbW9kZWxLZXkiLCJzT2JqZWN0TmFtZSIsImVudGl0eVR5cGUiLCIkQW5ub3RhdGlvbnMiLCJmaWx0ZXJGYWNldEFubm90YXRpb24iLCJJRCIsImdlbmVyYXRlIiwiRmFjZXQiLCJlbnRpdHlQcm9wZXJ0eSIsIlZhbHVlIiwiY29tcGxleFR5cGUiLCJvRW50aXR5Q29udGFpbmVyIiwiZW50aXR5U2V0Iiwic2luZ2xldG9uIiwiZW50aXR5Q29udGFpbmVyIiwibmF2UHJvcGVydHlCaW5kaW5ncyIsIiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nIiwibmF2UHJvcE5hbWUiLCJ0YXJnZXRFbnRpdHlTZXQiLCJrZXkiLCJyZWR1Y2UiLCJvdXRBY3Rpb25zIiwiaW5uZXJBY3Rpb25zIiwiYWN0aW9uIiwib3V0QW5ub3RhdGlvbkxpc3RzIiwic0Fubm90YXRpb25OYW1lIiwicmVmZXJlbmNlcyIsImlkZW50aWZpY2F0aW9uIiwidmVyc2lvbiIsInNjaGVtYSIsImFzc29jaWF0aW9ucyIsImFzc29jaWF0aW9uU2V0cyIsIm1NZXRhTW9kZWxNYXAiLCJjb252ZXJ0VHlwZXMiLCJzTWV0YU1vZGVsSWQiLCJpZCIsInBhcnNlZE91dHB1dCIsIkFubm90YXRpb25Db252ZXJ0ZXIiLCJjb252ZXJ0Iiwib0Vycm9yIiwiRXJyb3IiLCJnZXRDb252ZXJ0ZWRUeXBlcyIsIm9Db250ZXh0IiwiZ2V0TW9kZWwiLCJpc0EiLCJkZWxldGVNb2RlbENhY2hlRGF0YSIsImNvbnZlcnRNZXRhTW9kZWxDb250ZXh0Iiwib01ldGFNb2RlbENvbnRleHQiLCJiSW5jbHVkZVZpc2l0ZWRPYmplY3RzIiwib0NvbnZlcnRlZE1ldGFkYXRhIiwic1BhdGgiLCJnZXRQYXRoIiwiYVBhdGhTcGxpdCIsImZpcnN0UGFydCIsImJlZ2luSW5kZXgiLCJyZWxhdGl2ZVBhdGgiLCJzbGljZSIsImpvaW4iLCJsb2NhbE9iamVjdHMiLCJyZWxhdGl2ZVNwbGl0IiwiaWR4IiwiY3VycmVudEVudGl0eVNldCIsInNOYXZQcm9wVG9DaGVjayIsImFOYXZQcm9wcyIsInRhcmdldEVudGl0eVR5cGUiLCJzTmF2UHJvcCIsInRhcmdldE5hdlByb3AiLCJuYXZQcm9wIiwidGFyZ2V0VHlwZSIsInNoaWZ0Iiwib1RhcmdldCIsInJlc29sdmVQYXRoIiwidmlzaXRlZE9iamVjdHMiLCJjb25jYXQiLCJwYXJhbWV0ZXJOYW1lIiwicGFyYW1ldGVyIiwiZW5kc1dpdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJvRW50aXR5U2V0TWV0YU1vZGVsQ29udGV4dCIsIm1ldGFNb2RlbENvbnRleHQiLCJ0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbiIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0RnJvbVBhdGgiLCJjb252ZXJ0ZWRUeXBlcyIsIm9ubHlTZXJ2aWNlT2JqZWN0cyIsImRhdGFNb2RlbE9iamVjdHMiLCJ2aXNpdGVkT2JqZWN0Iiwicm9vdEVudGl0eVNldCIsImN1cnJlbnRFbnRpdHlUeXBlIiwiY3VycmVudE9iamVjdCIsIm5hdmlnYXRlZFBhdGgiLCJpIiwiYm91bmRFbnRpdHlTZXQiLCJzdGFydGluZ0VudGl0eVNldCIsInN0YXJ0aW5nSW5kZXgiLCJyZXF1aXJlZERhdGFNb2RlbE9iamVjdHMiLCJvYmplY3QiLCJvdXREYXRhTW9kZWxQYXRoIiwidGFyZ2V0T2JqZWN0IiwiY29udGV4dExvY2F0aW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNZXRhTW9kZWxDb252ZXJ0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBmaWxlIGlzIHJldHJpZXZlZCBmcm9tIEBzYXAtdXgvYW5ub3RhdGlvbi1jb252ZXJ0ZXIsIHNoYXJlZCBjb2RlIHdpdGggdG9vbCBzdWl0ZVxuXG5pbXBvcnQgdHlwZSB7XG5cdEFubm90YXRpb24sXG5cdEFubm90YXRpb25MaXN0LFxuXHRBbm5vdGF0aW9uUmVjb3JkLFxuXHRDb252ZXJ0ZWRNZXRhZGF0YSxcblx0RW50aXR5U2V0LFxuXHRFbnRpdHlUeXBlLFxuXHRFeHByZXNzaW9uLFxuXHROYXZpZ2F0aW9uUHJvcGVydHksXG5cdFByb3BlcnR5LFxuXHRSYXdBY3Rpb24sXG5cdFJhd0NvbXBsZXhUeXBlLFxuXHRSYXdFbnRpdHlDb250YWluZXIsXG5cdFJhd0VudGl0eVNldCxcblx0UmF3RW50aXR5VHlwZSxcblx0UmF3TWV0YWRhdGEsXG5cdFJhd1Byb3BlcnR5LFxuXHRSYXdTaW5nbGV0b24sXG5cdFJhd1R5cGVEZWZpbml0aW9uLFxuXHRSYXdWNE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0UmVmZXJlbmNlLFxuXHRSZWZlcmVudGlhbENvbnN0cmFpbnQsXG5cdFNlcnZpY2VPYmplY3QsXG5cdFNpbmdsZXRvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IEFubm90YXRpb25Db252ZXJ0ZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb21tb25cIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCIuLi9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5cbmNvbnN0IFZPQ0FCVUxBUllfQUxJQVM6IGFueSA9IHtcblx0XCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxXCI6IFwiQ2FwYWJpbGl0aWVzXCIsXG5cdFwiT3JnLk9EYXRhLkNvcmUuVjFcIjogXCJDb3JlXCIsXG5cdFwiT3JnLk9EYXRhLk1lYXN1cmVzLlYxXCI6IFwiTWVhc3VyZXNcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjFcIjogXCJDb21tb25cIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MVwiOiBcIlVJXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuU2Vzc2lvbi52MVwiOiBcIlNlc3Npb25cIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjFcIjogXCJBbmFseXRpY3NcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5QZXJzb25hbERhdGEudjFcIjogXCJQZXJzb25hbERhdGFcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxXCI6IFwiQ29tbXVuaWNhdGlvblwiXG59O1xuXG5leHBvcnQgdHlwZSBFbnZpcm9ubWVudENhcGFiaWxpdGllcyA9IHtcblx0Q2hhcnQ6IGJvb2xlYW47XG5cdE1pY3JvQ2hhcnQ6IGJvb2xlYW47XG5cdFVTaGVsbDogYm9vbGVhbjtcblx0SW50ZW50QmFzZWROYXZpZ2F0aW9uOiBib29sZWFuO1xuXHRBcHBTdGF0ZTogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBEZWZhdWx0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgPSB7XG5cdENoYXJ0OiB0cnVlLFxuXHRNaWNyb0NoYXJ0OiB0cnVlLFxuXHRVU2hlbGw6IHRydWUsXG5cdEludGVudEJhc2VkTmF2aWdhdGlvbjogdHJ1ZSxcblx0QXBwU3RhdGU6IHRydWVcbn07XG5cbnR5cGUgTWV0YU1vZGVsQWN0aW9uID0ge1xuXHQka2luZDogXCJBY3Rpb25cIjtcblx0JElzQm91bmQ6IGJvb2xlYW47XG5cdCRFbnRpdHlTZXRQYXRoOiBzdHJpbmc7XG5cdCRQYXJhbWV0ZXI6IHtcblx0XHQkVHlwZTogc3RyaW5nO1xuXHRcdCROYW1lOiBzdHJpbmc7XG5cdFx0JE51bGxhYmxlPzogYm9vbGVhbjtcblx0XHQkTWF4TGVuZ3RoPzogbnVtYmVyO1xuXHRcdCRQcmVjaXNpb24/OiBudW1iZXI7XG5cdFx0JFNjYWxlPzogbnVtYmVyO1xuXHRcdCRpc0NvbGxlY3Rpb24/OiBib29sZWFuO1xuXHR9W107XG5cdCRSZXR1cm5UeXBlOiB7XG5cdFx0JFR5cGU6IHN0cmluZztcblx0fTtcbn07XG5cbmZ1bmN0aW9uIHBhcnNlUHJvcGVydHlWYWx1ZShcblx0YW5ub3RhdGlvbk9iamVjdDogYW55LFxuXHRwcm9wZXJ0eUtleTogc3RyaW5nLFxuXHRjdXJyZW50VGFyZ2V0OiBzdHJpbmcsXG5cdGFubm90YXRpb25zTGlzdHM6IFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25MaXN0Pixcblx0b0NhcGFiaWxpdGllczogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcbik6IGFueSB7XG5cdGxldCB2YWx1ZTtcblx0Y29uc3QgY3VycmVudFByb3BlcnR5VGFyZ2V0OiBzdHJpbmcgPSBgJHtjdXJyZW50VGFyZ2V0fS8ke3Byb3BlcnR5S2V5fWA7XG5cdGNvbnN0IHR5cGVPZkFubm90YXRpb24gPSB0eXBlb2YgYW5ub3RhdGlvbk9iamVjdDtcblx0aWYgKGFubm90YXRpb25PYmplY3QgPT09IG51bGwpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJOdWxsXCIsIE51bGw6IG51bGwgfTtcblx0fSBlbHNlIGlmICh0eXBlT2ZBbm5vdGF0aW9uID09PSBcInN0cmluZ1wiKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiU3RyaW5nXCIsIFN0cmluZzogYW5ub3RhdGlvbk9iamVjdCB9O1xuXHR9IGVsc2UgaWYgKHR5cGVPZkFubm90YXRpb24gPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiQm9vbFwiLCBCb29sOiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAodHlwZU9mQW5ub3RhdGlvbiA9PT0gXCJudW1iZXJcIikge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIkludFwiLCBJbnQ6IGFubm90YXRpb25PYmplY3QgfTtcblx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFubm90YXRpb25PYmplY3QpKSB7XG5cdFx0dmFsdWUgPSB7XG5cdFx0XHR0eXBlOiBcIkNvbGxlY3Rpb25cIixcblx0XHRcdENvbGxlY3Rpb246IGFubm90YXRpb25PYmplY3QubWFwKChzdWJBbm5vdGF0aW9uT2JqZWN0LCBzdWJBbm5vdGF0aW9uT2JqZWN0SW5kZXgpID0+XG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbk9iamVjdChcblx0XHRcdFx0XHRzdWJBbm5vdGF0aW9uT2JqZWN0LFxuXHRcdFx0XHRcdGAke2N1cnJlbnRQcm9wZXJ0eVRhcmdldH0vJHtzdWJBbm5vdGF0aW9uT2JqZWN0SW5kZXh9YCxcblx0XHRcdFx0XHRhbm5vdGF0aW9uc0xpc3RzLFxuXHRcdFx0XHRcdG9DYXBhYmlsaXRpZXNcblx0XHRcdFx0KVxuXHRcdFx0KVxuXHRcdH07XG5cdFx0aWYgKGFubm90YXRpb25PYmplY3QubGVuZ3RoID4gMCkge1xuXHRcdFx0aWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkUHJvcGVydHlQYXRoXCIpKSB7XG5cdFx0XHRcdCh2YWx1ZS5Db2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiUHJvcGVydHlQYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkUGF0aFwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIlBhdGhcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCIpKSB7XG5cdFx0XHRcdCh2YWx1ZS5Db2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEFubm90YXRpb25QYXRoXCIpKSB7XG5cdFx0XHRcdCh2YWx1ZS5Db2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiQW5ub3RhdGlvblBhdGhcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRUeXBlXCIpKSB7XG5cdFx0XHRcdCh2YWx1ZS5Db2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiUmVjb3JkXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkSWZcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJJZlwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE9yXCIpKSB7XG5cdFx0XHRcdCh2YWx1ZS5Db2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiT3JcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBbmRcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJBbmRcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRFcVwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIkVxXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTmVcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJOZVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE5vdFwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIk5vdFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEd0XCIpKSB7XG5cdFx0XHRcdCh2YWx1ZS5Db2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiR3RcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRHZVwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIkdlXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTHRcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJMdFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJExlXCIpKSB7XG5cdFx0XHRcdCh2YWx1ZS5Db2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiTGVcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBcHBseVwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIkFwcGx5XCI7XG5cdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBhbm5vdGF0aW9uT2JqZWN0WzBdID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdC8vICRUeXBlIGlzIG9wdGlvbmFsLi4uXG5cdFx0XHRcdCh2YWx1ZS5Db2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiUmVjb3JkXCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIlN0cmluZ1wiO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRQYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJQYXRoXCIsIFBhdGg6IGFubm90YXRpb25PYmplY3QuJFBhdGggfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiREZWNpbWFsICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJEZWNpbWFsXCIsIERlY2ltYWw6IHBhcnNlRmxvYXQoYW5ub3RhdGlvbk9iamVjdC4kRGVjaW1hbCkgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRQcm9wZXJ0eVBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIlByb3BlcnR5UGF0aFwiLCBQcm9wZXJ0eVBhdGg6IGFubm90YXRpb25PYmplY3QuJFByb3BlcnR5UGF0aCB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0ge1xuXHRcdFx0dHlwZTogXCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCIsXG5cdFx0XHROYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoXG5cdFx0fTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRJZiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiSWZcIiwgSWY6IGFubm90YXRpb25PYmplY3QuJElmIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQW5kICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJBbmRcIiwgQW5kOiBhbm5vdGF0aW9uT2JqZWN0LiRBbmQgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRPciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiT3JcIiwgT3I6IGFubm90YXRpb25PYmplY3QuJE9yIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTm90ICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJOb3RcIiwgTm90OiBhbm5vdGF0aW9uT2JqZWN0LiROb3QgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRFcSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiRXFcIiwgRXE6IGFubm90YXRpb25PYmplY3QuJEVxIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTmUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIk5lXCIsIE5lOiBhbm5vdGF0aW9uT2JqZWN0LiROZSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEd0ICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJHdFwiLCBHdDogYW5ub3RhdGlvbk9iamVjdC4kR3QgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRHZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiR2VcIiwgR2U6IGFubm90YXRpb25PYmplY3QuJEdlIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTHQgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIkx0XCIsIEx0OiBhbm5vdGF0aW9uT2JqZWN0LiRMdCB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJExlICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJMZVwiLCBMZTogYW5ub3RhdGlvbk9iamVjdC4kTGUgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRBcHBseSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiQXBwbHlcIiwgQXBwbHk6IGFubm90YXRpb25PYmplY3QuJEFwcGx5LCBGdW5jdGlvbjogYW5ub3RhdGlvbk9iamVjdC4kRnVuY3Rpb24gfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRBbm5vdGF0aW9uUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiQW5ub3RhdGlvblBhdGhcIiwgQW5ub3RhdGlvblBhdGg6IGFubm90YXRpb25PYmplY3QuJEFubm90YXRpb25QYXRoIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRW51bU1lbWJlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7XG5cdFx0XHR0eXBlOiBcIkVudW1NZW1iZXJcIixcblx0XHRcdEVudW1NZW1iZXI6IGAke21hcE5hbWVUb0FsaWFzKGFubm90YXRpb25PYmplY3QuJEVudW1NZW1iZXIuc3BsaXQoXCIvXCIpWzBdKX0vJHthbm5vdGF0aW9uT2JqZWN0LiRFbnVtTWVtYmVyLnNwbGl0KFwiL1wiKVsxXX1gXG5cdFx0fTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRUeXBlKSB7XG5cdFx0dmFsdWUgPSB7XG5cdFx0XHR0eXBlOiBcIlJlY29yZFwiLFxuXHRcdFx0UmVjb3JkOiBwYXJzZUFubm90YXRpb25PYmplY3QoYW5ub3RhdGlvbk9iamVjdCwgY3VycmVudFRhcmdldCwgYW5ub3RhdGlvbnNMaXN0cywgb0NhcGFiaWxpdGllcylcblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdHZhbHVlID0ge1xuXHRcdFx0dHlwZTogXCJSZWNvcmRcIixcblx0XHRcdFJlY29yZDogcGFyc2VBbm5vdGF0aW9uT2JqZWN0KGFubm90YXRpb25PYmplY3QsIGN1cnJlbnRUYXJnZXQsIGFubm90YXRpb25zTGlzdHMsIG9DYXBhYmlsaXRpZXMpXG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bmFtZTogcHJvcGVydHlLZXksXG5cdFx0dmFsdWVcblx0fTtcbn1cbmZ1bmN0aW9uIG1hcE5hbWVUb0FsaWFzKGFubm90YXRpb25OYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRsZXQgW3BhdGhQYXJ0LCBhbm5vUGFydF0gPSBhbm5vdGF0aW9uTmFtZS5zcGxpdChcIkBcIik7XG5cdGlmICghYW5ub1BhcnQpIHtcblx0XHRhbm5vUGFydCA9IHBhdGhQYXJ0O1xuXHRcdHBhdGhQYXJ0ID0gXCJcIjtcblx0fSBlbHNlIHtcblx0XHRwYXRoUGFydCArPSBcIkBcIjtcblx0fVxuXHRjb25zdCBsYXN0RG90ID0gYW5ub1BhcnQubGFzdEluZGV4T2YoXCIuXCIpO1xuXHRyZXR1cm4gYCR7cGF0aFBhcnQgKyBWT0NBQlVMQVJZX0FMSUFTW2Fubm9QYXJ0LnN1YnN0cigwLCBsYXN0RG90KV19LiR7YW5ub1BhcnQuc3Vic3RyKGxhc3REb3QgKyAxKX1gO1xufVxuZnVuY3Rpb24gcGFyc2VBbm5vdGF0aW9uT2JqZWN0KFxuXHRhbm5vdGF0aW9uT2JqZWN0OiBhbnksXG5cdGN1cnJlbnRPYmplY3RUYXJnZXQ6IHN0cmluZyxcblx0YW5ub3RhdGlvbnNMaXN0czogUmVjb3JkPHN0cmluZywgQW5ub3RhdGlvbkxpc3Q+LFxuXHRvQ2FwYWJpbGl0aWVzOiBFbnZpcm9ubWVudENhcGFiaWxpdGllc1xuKTogRXhwcmVzc2lvbiB8IEFubm90YXRpb25SZWNvcmQgfCBBbm5vdGF0aW9uIHtcblx0bGV0IHBhcnNlZEFubm90YXRpb25PYmplY3Q6IGFueSA9IHt9O1xuXHRjb25zdCB0eXBlT2ZPYmplY3QgPSB0eXBlb2YgYW5ub3RhdGlvbk9iamVjdDtcblx0aWYgKGFubm90YXRpb25PYmplY3QgPT09IG51bGwpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIk51bGxcIiwgTnVsbDogbnVsbCB9O1xuXHR9IGVsc2UgaWYgKHR5cGVPZk9iamVjdCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiU3RyaW5nXCIsIFN0cmluZzogYW5ub3RhdGlvbk9iamVjdCB9O1xuXHR9IGVsc2UgaWYgKHR5cGVPZk9iamVjdCA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkJvb2xcIiwgQm9vbDogYW5ub3RhdGlvbk9iamVjdCB9O1xuXHR9IGVsc2UgaWYgKHR5cGVPZk9iamVjdCA9PT0gXCJudW1iZXJcIikge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiSW50XCIsIEludDogYW5ub3RhdGlvbk9iamVjdCB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEFubm90YXRpb25QYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkFubm90YXRpb25QYXRoXCIsIEFubm90YXRpb25QYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiRBbm5vdGF0aW9uUGF0aCB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJFBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiUGF0aFwiLCBQYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiRQYXRoIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRGVjaW1hbCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJEZWNpbWFsXCIsIERlY2ltYWw6IHBhcnNlRmxvYXQoYW5ub3RhdGlvbk9iamVjdC4kRGVjaW1hbCkgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRQcm9wZXJ0eVBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiUHJvcGVydHlQYXRoXCIsIFByb3BlcnR5UGF0aDogYW5ub3RhdGlvbk9iamVjdC4kUHJvcGVydHlQYXRoIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kSWYgIT09IHVuZGVmaW5lZCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiSWZcIiwgSWY6IGFubm90YXRpb25PYmplY3QuJElmIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQW5kICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkFuZFwiLCBBbmQ6IGFubm90YXRpb25PYmplY3QuJEFuZCB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE9yICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIk9yXCIsIE9yOiBhbm5vdGF0aW9uT2JqZWN0LiRPciB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5vdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJOb3RcIiwgTm90OiBhbm5vdGF0aW9uT2JqZWN0LiROb3QgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRFcSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJFcVwiLCBFcTogYW5ub3RhdGlvbk9iamVjdC4kRXEgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiROZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJOZVwiLCBOZTogYW5ub3RhdGlvbk9iamVjdC4kTmUgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRHdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJHdFwiLCBHdDogYW5ub3RhdGlvbk9iamVjdC4kR3QgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRHZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJHZVwiLCBHZTogYW5ub3RhdGlvbk9iamVjdC4kR2UgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRMdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJMdFwiLCBMdDogYW5ub3RhdGlvbk9iamVjdC4kTHQgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRMZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJMZVwiLCBMZTogYW5ub3RhdGlvbk9iamVjdC4kTGUgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRBcHBseSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJBcHBseVwiLCBBcHBseTogYW5ub3RhdGlvbk9iamVjdC4kQXBwbHksIEZ1bmN0aW9uOiBhbm5vdGF0aW9uT2JqZWN0LiRGdW5jdGlvbiB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7XG5cdFx0XHR0eXBlOiBcIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIixcblx0XHRcdE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IGFubm90YXRpb25PYmplY3QuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcblx0XHR9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEVudW1NZW1iZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7XG5cdFx0XHR0eXBlOiBcIkVudW1NZW1iZXJcIixcblx0XHRcdEVudW1NZW1iZXI6IGAke21hcE5hbWVUb0FsaWFzKGFubm90YXRpb25PYmplY3QuJEVudW1NZW1iZXIuc3BsaXQoXCIvXCIpWzBdKX0vJHthbm5vdGF0aW9uT2JqZWN0LiRFbnVtTWVtYmVyLnNwbGl0KFwiL1wiKVsxXX1gXG5cdFx0fTtcblx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFubm90YXRpb25PYmplY3QpKSB7XG5cdFx0Y29uc3QgcGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24gPSBwYXJzZWRBbm5vdGF0aW9uT2JqZWN0O1xuXHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24gPSBhbm5vdGF0aW9uT2JqZWN0Lm1hcCgoc3ViQW5ub3RhdGlvbk9iamVjdCwgc3ViQW5ub3RhdGlvbkluZGV4KSA9PlxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uT2JqZWN0KHN1YkFubm90YXRpb25PYmplY3QsIGAke2N1cnJlbnRPYmplY3RUYXJnZXR9LyR7c3ViQW5ub3RhdGlvbkluZGV4fWAsIGFubm90YXRpb25zTGlzdHMsIG9DYXBhYmlsaXRpZXMpXG5cdFx0KTtcblx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRQcm9wZXJ0eVBhdGhcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJQcm9wZXJ0eVBhdGhcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRQYXRoXCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiUGF0aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkQW5ub3RhdGlvblBhdGhcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJBbm5vdGF0aW9uUGF0aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFR5cGVcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJSZWNvcmRcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRJZlwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIklmXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkQW5kXCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiQW5kXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkT3JcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJPclwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEVxXCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiRXFcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiROZVwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIk5lXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTm90XCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiTm90XCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkR3RcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJHdFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEdlXCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiR2VcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRMdFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIkx0XCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTGVcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJMZVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEFwcGx5XCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiQXBwbHlcIjtcblx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3RbMF0gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJSZWNvcmRcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiU3RyaW5nXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0LiRUeXBlKSB7XG5cdFx0XHRjb25zdCB0eXBlVmFsdWUgPSBhbm5vdGF0aW9uT2JqZWN0LiRUeXBlO1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC50eXBlID0gdHlwZVZhbHVlOyAvL2Ake3R5cGVBbGlhc30uJHt0eXBlVGVybX1gO1xuXHRcdH1cblx0XHRjb25zdCBwcm9wZXJ0eVZhbHVlczogYW55ID0gW107XG5cdFx0T2JqZWN0LmtleXMoYW5ub3RhdGlvbk9iamVjdCkuZm9yRWFjaCgocHJvcGVydHlLZXkpID0+IHtcblx0XHRcdGlmIChcblx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJFR5cGVcIiAmJlxuXHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkSWZcIiAmJlxuXHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkQXBwbHlcIiAmJlxuXHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkQW5kXCIgJiZcblx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJE9yXCIgJiZcblx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJE5lXCIgJiZcblx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJEd0XCIgJiZcblx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJEdlXCIgJiZcblx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJEx0XCIgJiZcblx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJExlXCIgJiZcblx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJE5vdFwiICYmXG5cdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRFcVwiICYmXG5cdFx0XHRcdCFwcm9wZXJ0eUtleS5zdGFydHNXaXRoKFwiQFwiKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHByb3BlcnR5VmFsdWVzLnB1c2goXG5cdFx0XHRcdFx0cGFyc2VQcm9wZXJ0eVZhbHVlKGFubm90YXRpb25PYmplY3RbcHJvcGVydHlLZXldLCBwcm9wZXJ0eUtleSwgY3VycmVudE9iamVjdFRhcmdldCwgYW5ub3RhdGlvbnNMaXN0cywgb0NhcGFiaWxpdGllcylcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSBpZiAocHJvcGVydHlLZXkuc3RhcnRzV2l0aChcIkBcIikpIHtcblx0XHRcdFx0Ly8gQW5ub3RhdGlvbiBvZiBhbm5vdGF0aW9uXG5cdFx0XHRcdGNyZWF0ZUFubm90YXRpb25MaXN0cyhcblx0XHRcdFx0XHR7IFtwcm9wZXJ0eUtleV06IGFubm90YXRpb25PYmplY3RbcHJvcGVydHlLZXldIH0sXG5cdFx0XHRcdFx0Y3VycmVudE9iamVjdFRhcmdldCxcblx0XHRcdFx0XHRhbm5vdGF0aW9uc0xpc3RzLFxuXHRcdFx0XHRcdG9DYXBhYmlsaXRpZXNcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnByb3BlcnR5VmFsdWVzID0gcHJvcGVydHlWYWx1ZXM7XG5cdH1cblx0cmV0dXJuIHBhcnNlZEFubm90YXRpb25PYmplY3Q7XG59XG5mdW5jdGlvbiBnZXRPckNyZWF0ZUFubm90YXRpb25MaXN0KHRhcmdldDogc3RyaW5nLCBhbm5vdGF0aW9uc0xpc3RzOiBSZWNvcmQ8c3RyaW5nLCBBbm5vdGF0aW9uTGlzdD4pOiBBbm5vdGF0aW9uTGlzdCB7XG5cdGlmICghYW5ub3RhdGlvbnNMaXN0cy5oYXNPd25Qcm9wZXJ0eSh0YXJnZXQpKSB7XG5cdFx0YW5ub3RhdGlvbnNMaXN0c1t0YXJnZXRdID0ge1xuXHRcdFx0dGFyZ2V0OiB0YXJnZXQsXG5cdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHR9O1xuXHR9XG5cdHJldHVybiBhbm5vdGF0aW9uc0xpc3RzW3RhcmdldF07XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNoYXJ0QW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdDogYW55KSB7XG5cdHJldHVybiBhbm5vdGF0aW9uT2JqZWN0LmZpbHRlcigob1JlY29yZDogYW55KSA9PiB7XG5cdFx0aWYgKG9SZWNvcmQuVGFyZ2V0ICYmIG9SZWNvcmQuVGFyZ2V0LiRBbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0cmV0dXJuIG9SZWNvcmQuVGFyZ2V0LiRBbm5vdGF0aW9uUGF0aC5pbmRleE9mKFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCIpID09PSAtMTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlSUJOQW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdDogYW55KSB7XG5cdHJldHVybiBhbm5vdGF0aW9uT2JqZWN0LmZpbHRlcigob1JlY29yZDogYW55KSA9PiB7XG5cdFx0cmV0dXJuIG9SZWNvcmQuJFR5cGUgIT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVQcmVzZW50YXRpb25WYXJpYW50KGFubm90YXRpb25PYmplY3Q6IGFueSkge1xuXHRyZXR1cm4gYW5ub3RhdGlvbk9iamVjdC5maWx0ZXIoKG9SZWNvcmQ6IGFueSkgPT4ge1xuXHRcdHJldHVybiBvUmVjb3JkLiRBbm5vdGF0aW9uUGF0aCAhPT0gXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnRcIjtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFubm90YXRpb25MaXN0cyhcblx0YW5ub3RhdGlvbk9iamVjdHM6IGFueSxcblx0YW5ub3RhdGlvblRhcmdldDogc3RyaW5nLFxuXHRhbm5vdGF0aW9uTGlzdHM6IFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25MaXN0Pixcblx0b0NhcGFiaWxpdGllczogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcbikge1xuXHRpZiAoT2JqZWN0LmtleXMoYW5ub3RhdGlvbk9iamVjdHMpLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybjtcblx0fVxuXHRjb25zdCBvdXRBbm5vdGF0aW9uT2JqZWN0ID0gZ2V0T3JDcmVhdGVBbm5vdGF0aW9uTGlzdChhbm5vdGF0aW9uVGFyZ2V0LCBhbm5vdGF0aW9uTGlzdHMpO1xuXHRpZiAoIW9DYXBhYmlsaXRpZXMuTWljcm9DaGFydCkge1xuXHRcdGRlbGV0ZSBhbm5vdGF0aW9uT2JqZWN0c1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydFwiXTtcblx0fVxuXG5cdGZvciAobGV0IGFubm90YXRpb25LZXkgaW4gYW5ub3RhdGlvbk9iamVjdHMpIHtcblx0XHRsZXQgYW5ub3RhdGlvbk9iamVjdCA9IGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldO1xuXHRcdHN3aXRjaCAoYW5ub3RhdGlvbktleSkge1xuXHRcdFx0Y2FzZSBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJGYWNldHNcIjpcblx0XHRcdFx0aWYgKCFvQ2FwYWJpbGl0aWVzLk1pY3JvQ2hhcnQpIHtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0ID0gcmVtb3ZlQ2hhcnRBbm5vdGF0aW9ucyhhbm5vdGF0aW9uT2JqZWN0KTtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0c1thbm5vdGF0aW9uS2V5XSA9IGFubm90YXRpb25PYmplY3Q7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLklkZW50aWZpY2F0aW9uXCI6XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5JbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0ID0gcmVtb3ZlSUJOQW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdCk7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdHNbYW5ub3RhdGlvbktleV0gPSBhbm5vdGF0aW9uT2JqZWN0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5MaW5lSXRlbVwiOlxuXHRcdFx0XHRpZiAoIW9DYXBhYmlsaXRpZXMuSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdCA9IHJlbW92ZUlCTkFubm90YXRpb25zKGFubm90YXRpb25PYmplY3QpO1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldID0gYW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIW9DYXBhYmlsaXRpZXMuTWljcm9DaGFydCkge1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3QgPSByZW1vdmVDaGFydEFubm90YXRpb25zKGFubm90YXRpb25PYmplY3QpO1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldID0gYW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmllbGRHcm91cFwiOlxuXHRcdFx0XHRpZiAoIW9DYXBhYmlsaXRpZXMuSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdC5EYXRhID0gcmVtb3ZlSUJOQW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdC5EYXRhKTtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0c1thbm5vdGF0aW9uS2V5XSA9IGFubm90YXRpb25PYmplY3Q7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFvQ2FwYWJpbGl0aWVzLk1pY3JvQ2hhcnQpIHtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0LkRhdGEgPSByZW1vdmVDaGFydEFubm90YXRpb25zKGFubm90YXRpb25PYmplY3QuRGF0YSk7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdHNbYW5ub3RhdGlvbktleV0gPSBhbm5vdGF0aW9uT2JqZWN0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5QcmVzZW50YXRpb25WYXJpYW50XCI6XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5DaGFydCAmJiBhbm5vdGF0aW9uT2JqZWN0LlZpc3VhbGl6YXRpb25zKSB7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdC5WaXN1YWxpemF0aW9ucyA9IGhhbmRsZVByZXNlbnRhdGlvblZhcmlhbnQoYW5ub3RhdGlvbk9iamVjdC5WaXN1YWxpemF0aW9ucyk7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdHNbYW5ub3RhdGlvbktleV0gPSBhbm5vdGF0aW9uT2JqZWN0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0bGV0IGN1cnJlbnRPdXRBbm5vdGF0aW9uT2JqZWN0ID0gb3V0QW5ub3RhdGlvbk9iamVjdDtcblxuXHRcdC8vIENoZWNrIGZvciBhbm5vdGF0aW9uIG9mIGFubm90YXRpb25cblx0XHRjb25zdCBhbm5vdGF0aW9uT2ZBbm5vdGF0aW9uU3BsaXQgPSBhbm5vdGF0aW9uS2V5LnNwbGl0KFwiQFwiKTtcblx0XHRpZiAoYW5ub3RhdGlvbk9mQW5ub3RhdGlvblNwbGl0Lmxlbmd0aCA+IDIpIHtcblx0XHRcdGN1cnJlbnRPdXRBbm5vdGF0aW9uT2JqZWN0ID0gZ2V0T3JDcmVhdGVBbm5vdGF0aW9uTGlzdChcblx0XHRcdFx0YCR7YW5ub3RhdGlvblRhcmdldH1AJHthbm5vdGF0aW9uT2ZBbm5vdGF0aW9uU3BsaXRbMV19YCxcblx0XHRcdFx0YW5ub3RhdGlvbkxpc3RzXG5cdFx0XHQpO1xuXHRcdFx0YW5ub3RhdGlvbktleSA9IGFubm90YXRpb25PZkFubm90YXRpb25TcGxpdFsyXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YW5ub3RhdGlvbktleSA9IGFubm90YXRpb25PZkFubm90YXRpb25TcGxpdFsxXTtcblx0XHR9XG5cblx0XHRjb25zdCBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXQgPSBhbm5vdGF0aW9uS2V5LnNwbGl0KFwiI1wiKTtcblx0XHRjb25zdCBxdWFsaWZpZXIgPSBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXRbMV07XG5cdFx0YW5ub3RhdGlvbktleSA9IGFubm90YXRpb25RdWFsaWZpZXJTcGxpdFswXTtcblxuXHRcdGNvbnN0IHBhcnNlZEFubm90YXRpb25PYmplY3Q6IGFueSA9IHtcblx0XHRcdHRlcm06IGAke2Fubm90YXRpb25LZXl9YCxcblx0XHRcdHF1YWxpZmllcjogcXVhbGlmaWVyXG5cdFx0fTtcblx0XHRsZXQgY3VycmVudEFubm90YXRpb25UYXJnZXQgPSBgJHthbm5vdGF0aW9uVGFyZ2V0fUAke3BhcnNlZEFubm90YXRpb25PYmplY3QudGVybX1gO1xuXHRcdGlmIChxdWFsaWZpZXIpIHtcblx0XHRcdGN1cnJlbnRBbm5vdGF0aW9uVGFyZ2V0ICs9IGAjJHtxdWFsaWZpZXJ9YDtcblx0XHR9XG5cdFx0bGV0IGlzQ29sbGVjdGlvbiA9IGZhbHNlO1xuXHRcdGNvbnN0IHR5cGVvZkFubm90YXRpb24gPSB0eXBlb2YgYW5ub3RhdGlvbk9iamVjdDtcblx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdCA9PT0gbnVsbCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJCb29sXCIsIEJvb2w6IGFubm90YXRpb25PYmplY3QgfTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZkFubm90YXRpb24gPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiU3RyaW5nXCIsIFN0cmluZzogYW5ub3RhdGlvbk9iamVjdCB9O1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mQW5ub3RhdGlvbiA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiQm9vbFwiLCBCb29sOiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdFx0fSBlbHNlIGlmICh0eXBlb2ZBbm5vdGF0aW9uID09PSBcIm51bWJlclwiKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIkludFwiLCBJbnQ6IGFubm90YXRpb25PYmplY3QgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJElmICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiSWZcIiwgSWY6IGFubm90YXRpb25PYmplY3QuJElmIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRBbmQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJBbmRcIiwgQW5kOiBhbm5vdGF0aW9uT2JqZWN0LiRBbmQgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE9yICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiT3JcIiwgT3I6IGFubm90YXRpb25PYmplY3QuJE9yIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiROb3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJOb3RcIiwgTm90OiBhbm5vdGF0aW9uT2JqZWN0LiROb3QgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEVxICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiRXFcIiwgRXE6IGFubm90YXRpb25PYmplY3QuJEVxIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiROZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIk5lXCIsIE5lOiBhbm5vdGF0aW9uT2JqZWN0LiROZSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kR3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJHdFwiLCBHdDogYW5ub3RhdGlvbk9iamVjdC4kR3QgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEdlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiR2VcIiwgR2U6IGFubm90YXRpb25PYmplY3QuJEdlIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRMdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIkx0XCIsIEx0OiBhbm5vdGF0aW9uT2JqZWN0LiRMdCB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJMZVwiLCBMZTogYW5ub3RhdGlvbk9iamVjdC4kTGUgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEFwcGx5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiQXBwbHlcIiwgQXBwbHk6IGFubm90YXRpb25PYmplY3QuJEFwcGx5LCBGdW5jdGlvbjogYW5ub3RhdGlvbk9iamVjdC4kRnVuY3Rpb24gfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJFBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJQYXRoXCIsIFBhdGg6IGFubm90YXRpb25PYmplY3QuJFBhdGggfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEFubm90YXRpb25QYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7XG5cdFx0XHRcdHR5cGU6IFwiQW5ub3RhdGlvblBhdGhcIixcblx0XHRcdFx0QW5ub3RhdGlvblBhdGg6IGFubm90YXRpb25PYmplY3QuJEFubm90YXRpb25QYXRoXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRGVjaW1hbCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIkRlY2ltYWxcIiwgRGVjaW1hbDogcGFyc2VGbG9hdChhbm5vdGF0aW9uT2JqZWN0LiREZWNpbWFsKSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRW51bU1lbWJlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0ge1xuXHRcdFx0XHR0eXBlOiBcIkVudW1NZW1iZXJcIixcblx0XHRcdFx0RW51bU1lbWJlcjogYCR7bWFwTmFtZVRvQWxpYXMoYW5ub3RhdGlvbk9iamVjdC4kRW51bU1lbWJlci5zcGxpdChcIi9cIilbMF0pfS8ke2Fubm90YXRpb25PYmplY3QuJEVudW1NZW1iZXIuc3BsaXQoXCIvXCIpWzFdfWBcblx0XHRcdH07XG5cdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFubm90YXRpb25PYmplY3QpKSB7XG5cdFx0XHRpc0NvbGxlY3Rpb24gPSB0cnVlO1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uID0gYW5ub3RhdGlvbk9iamVjdC5tYXAoKHN1YkFubm90YXRpb25PYmplY3QsIHN1YkFubm90YXRpb25JbmRleCkgPT5cblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uT2JqZWN0KFxuXHRcdFx0XHRcdHN1YkFubm90YXRpb25PYmplY3QsXG5cdFx0XHRcdFx0YCR7Y3VycmVudEFubm90YXRpb25UYXJnZXR9LyR7c3ViQW5ub3RhdGlvbkluZGV4fWAsXG5cdFx0XHRcdFx0YW5ub3RhdGlvbkxpc3RzLFxuXHRcdFx0XHRcdG9DYXBhYmlsaXRpZXNcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0aWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkUHJvcGVydHlQYXRoXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIlByb3BlcnR5UGF0aFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkUGF0aFwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJQYXRoXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEFubm90YXRpb25QYXRoXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkFubm90YXRpb25QYXRoXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRUeXBlXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkSWZcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiSWZcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE9yXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIk9yXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRFcVwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJFcVwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTmVcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiTmVcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE5vdFwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJOb3RcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEd0XCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkd0XCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRHZVwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJHZVwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTHRcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiTHRcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJExlXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkxlXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBbmRcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiQW5kXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBcHBseVwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJBcHBseVwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBhbm5vdGF0aW9uT2JqZWN0WzBdID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJTdHJpbmdcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCByZWNvcmQ6IEFubm90YXRpb25SZWNvcmQgPSB7XG5cdFx0XHRcdHByb3BlcnR5VmFsdWVzOiBbXVxuXHRcdFx0fTtcblx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0LiRUeXBlKSB7XG5cdFx0XHRcdGNvbnN0IHR5cGVWYWx1ZSA9IGFubm90YXRpb25PYmplY3QuJFR5cGU7XG5cdFx0XHRcdHJlY29yZC50eXBlID0gYCR7dHlwZVZhbHVlfWA7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVZhbHVlczogYW55W10gPSBbXTtcblx0XHRcdGZvciAoY29uc3QgcHJvcGVydHlLZXkgaW4gYW5ub3RhdGlvbk9iamVjdCkge1xuXHRcdFx0XHRpZiAocHJvcGVydHlLZXkgIT09IFwiJFR5cGVcIiAmJiAhcHJvcGVydHlLZXkuc3RhcnRzV2l0aChcIkBcIikpIHtcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlcy5wdXNoKFxuXHRcdFx0XHRcdFx0cGFyc2VQcm9wZXJ0eVZhbHVlKFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0W3Byb3BlcnR5S2V5XSxcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlLZXksXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRBbm5vdGF0aW9uVGFyZ2V0LFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uTGlzdHMsXG5cdFx0XHRcdFx0XHRcdG9DYXBhYmlsaXRpZXNcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHByb3BlcnR5S2V5LnN0YXJ0c1dpdGgoXCJAXCIpKSB7XG5cdFx0XHRcdFx0Ly8gQW5ub3RhdGlvbiBvZiByZWNvcmRcblx0XHRcdFx0XHRjcmVhdGVBbm5vdGF0aW9uTGlzdHMoXG5cdFx0XHRcdFx0XHR7IFtwcm9wZXJ0eUtleV06IGFubm90YXRpb25PYmplY3RbcHJvcGVydHlLZXldIH0sXG5cdFx0XHRcdFx0XHRjdXJyZW50QW5ub3RhdGlvblRhcmdldCxcblx0XHRcdFx0XHRcdGFubm90YXRpb25MaXN0cyxcblx0XHRcdFx0XHRcdG9DYXBhYmlsaXRpZXNcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZWNvcmQucHJvcGVydHlWYWx1ZXMgPSBwcm9wZXJ0eVZhbHVlcztcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QucmVjb3JkID0gcmVjb3JkO1xuXHRcdH1cblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmlzQ29sbGVjdGlvbiA9IGlzQ29sbGVjdGlvbjtcblx0XHRjdXJyZW50T3V0QW5ub3RhdGlvbk9iamVjdC5hbm5vdGF0aW9ucy5wdXNoKHBhcnNlZEFubm90YXRpb25PYmplY3QpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVQcm9wZXJ0eShwcm9wZXJ0eURlZmluaXRpb246IGFueSwgZW50aXR5VHlwZU9iamVjdDogUmF3RW50aXR5VHlwZSB8IFJhd0NvbXBsZXhUeXBlLCBwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IFJhd1Byb3BlcnR5IHtcblx0Y29uc3QgcHJvcGVydHlPYmplY3Q6IFJhd1Byb3BlcnR5ID0ge1xuXHRcdF90eXBlOiBcIlByb3BlcnR5XCIsXG5cdFx0bmFtZTogcHJvcGVydHlOYW1lLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogYCR7ZW50aXR5VHlwZU9iamVjdC5mdWxseVF1YWxpZmllZE5hbWV9LyR7cHJvcGVydHlOYW1lfWAsXG5cdFx0dHlwZTogcHJvcGVydHlEZWZpbml0aW9uLiRUeXBlLFxuXHRcdG1heExlbmd0aDogcHJvcGVydHlEZWZpbml0aW9uLiRNYXhMZW5ndGgsXG5cdFx0cHJlY2lzaW9uOiBwcm9wZXJ0eURlZmluaXRpb24uJFByZWNpc2lvbixcblx0XHRzY2FsZTogcHJvcGVydHlEZWZpbml0aW9uLiRTY2FsZSxcblx0XHRudWxsYWJsZTogcHJvcGVydHlEZWZpbml0aW9uLiROdWxsYWJsZVxuXHR9O1xuXHRyZXR1cm4gcHJvcGVydHlPYmplY3Q7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVOYXZpZ2F0aW9uUHJvcGVydHkoXG5cdG5hdlByb3BlcnR5RGVmaW5pdGlvbjogYW55LFxuXHRlbnRpdHlUeXBlT2JqZWN0OiBSYXdFbnRpdHlUeXBlIHwgUmF3Q29tcGxleFR5cGUsXG5cdG5hdlByb3BlcnR5TmFtZTogc3RyaW5nXG4pOiBSYXdWNE5hdmlnYXRpb25Qcm9wZXJ0eSB7XG5cdGxldCByZWZlcmVudGlhbENvbnN0cmFpbnQ6IFJlZmVyZW50aWFsQ29uc3RyYWludFtdID0gW107XG5cdGlmIChuYXZQcm9wZXJ0eURlZmluaXRpb24uJFJlZmVyZW50aWFsQ29uc3RyYWludCkge1xuXHRcdHJlZmVyZW50aWFsQ29uc3RyYWludCA9IE9iamVjdC5rZXlzKG5hdlByb3BlcnR5RGVmaW5pdGlvbi4kUmVmZXJlbnRpYWxDb25zdHJhaW50KS5tYXAoKHNvdXJjZVByb3BlcnR5TmFtZSkgPT4ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c291cmNlVHlwZU5hbWU6IGVudGl0eVR5cGVPYmplY3QubmFtZSxcblx0XHRcdFx0c291cmNlUHJvcGVydHk6IHNvdXJjZVByb3BlcnR5TmFtZSxcblx0XHRcdFx0dGFyZ2V0VHlwZU5hbWU6IG5hdlByb3BlcnR5RGVmaW5pdGlvbi4kVHlwZSxcblx0XHRcdFx0dGFyZ2V0UHJvcGVydHk6IG5hdlByb3BlcnR5RGVmaW5pdGlvbi4kUmVmZXJlbnRpYWxDb25zdHJhaW50W3NvdXJjZVByb3BlcnR5TmFtZV1cblx0XHRcdH07XG5cdFx0fSk7XG5cdH1cblx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnR5OiBSYXdWNE5hdmlnYXRpb25Qcm9wZXJ0eSA9IHtcblx0XHRfdHlwZTogXCJOYXZpZ2F0aW9uUHJvcGVydHlcIixcblx0XHRuYW1lOiBuYXZQcm9wZXJ0eU5hbWUsXG5cdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBgJHtlbnRpdHlUeXBlT2JqZWN0LmZ1bGx5UXVhbGlmaWVkTmFtZX0vJHtuYXZQcm9wZXJ0eU5hbWV9YCxcblx0XHRwYXJ0bmVyOiBuYXZQcm9wZXJ0eURlZmluaXRpb24uJFBhcnRuZXIsXG5cdFx0aXNDb2xsZWN0aW9uOiBuYXZQcm9wZXJ0eURlZmluaXRpb24uJGlzQ29sbGVjdGlvbiA/IG5hdlByb3BlcnR5RGVmaW5pdGlvbi4kaXNDb2xsZWN0aW9uIDogZmFsc2UsXG5cdFx0Y29udGFpbnNUYXJnZXQ6IG5hdlByb3BlcnR5RGVmaW5pdGlvbi4kQ29udGFpbnNUYXJnZXQsXG5cdFx0dGFyZ2V0VHlwZU5hbWU6IG5hdlByb3BlcnR5RGVmaW5pdGlvbi4kVHlwZSxcblx0XHRyZWZlcmVudGlhbENvbnN0cmFpbnRcblx0fTtcblxuXHRyZXR1cm4gbmF2aWdhdGlvblByb3BlcnR5O1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlRW50aXR5U2V0KGVudGl0eVNldERlZmluaXRpb246IGFueSwgZW50aXR5U2V0TmFtZTogc3RyaW5nLCBlbnRpdHlDb250YWluZXJOYW1lOiBzdHJpbmcpOiBSYXdFbnRpdHlTZXQge1xuXHRjb25zdCBlbnRpdHlTZXRPYmplY3Q6IFJhd0VudGl0eVNldCA9IHtcblx0XHRfdHlwZTogXCJFbnRpdHlTZXRcIixcblx0XHRuYW1lOiBlbnRpdHlTZXROYW1lLFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmc6IHt9LFxuXHRcdGVudGl0eVR5cGVOYW1lOiBlbnRpdHlTZXREZWZpbml0aW9uLiRUeXBlLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogYCR7ZW50aXR5Q29udGFpbmVyTmFtZX0vJHtlbnRpdHlTZXROYW1lfWBcblx0fTtcblx0cmV0dXJuIGVudGl0eVNldE9iamVjdDtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZVNpbmdsZXRvbihzaW5nbGV0b25EZWZpbml0aW9uOiBhbnksIHNpbmdsZXRvbk5hbWU6IHN0cmluZywgZW50aXR5Q29udGFpbmVyTmFtZTogc3RyaW5nKTogUmF3U2luZ2xldG9uIHtcblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJTaW5nbGV0b25cIixcblx0XHRuYW1lOiBzaW5nbGV0b25OYW1lLFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmc6IHt9LFxuXHRcdGVudGl0eVR5cGVOYW1lOiBzaW5nbGV0b25EZWZpbml0aW9uLiRUeXBlLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogYCR7ZW50aXR5Q29udGFpbmVyTmFtZX0vJHtzaW5nbGV0b25OYW1lfWAsXG5cdFx0bnVsbGFibGU6IHRydWVcblx0fTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZVR5cGVEZWZpbml0aW9uKHR5cGVEZWZpbml0aW9uOiBhbnksIHR5cGVOYW1lOiBzdHJpbmcsIG5hbWVzcGFjZTogc3RyaW5nKTogUmF3VHlwZURlZmluaXRpb24ge1xuXHRjb25zdCB0eXBlT2JqZWN0OiBSYXdUeXBlRGVmaW5pdGlvbiA9IHtcblx0XHRfdHlwZTogXCJUeXBlRGVmaW5pdGlvblwiLFxuXHRcdG5hbWU6IHR5cGVOYW1lLnJlcGxhY2UoYCR7bmFtZXNwYWNlfS5gLCBcIlwiKSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IHR5cGVOYW1lLFxuXHRcdHVuZGVybHlpbmdUeXBlOiB0eXBlRGVmaW5pdGlvbi4kVW5kZXJseWluZ1R5cGVcblx0fTtcblx0cmV0dXJuIHR5cGVPYmplY3Q7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVDb21wbGV4VHlwZShjb21wbGV4VHlwZURlZmluaXRpb246IGFueSwgY29tcGxleFR5cGVOYW1lOiBzdHJpbmcsIG5hbWVzcGFjZTogc3RyaW5nKTogUmF3Q29tcGxleFR5cGUge1xuXHRjb25zdCBjb21wbGV4VHlwZU9iamVjdDogUmF3Q29tcGxleFR5cGUgPSB7XG5cdFx0X3R5cGU6IFwiQ29tcGxleFR5cGVcIixcblx0XHRuYW1lOiBjb21wbGV4VHlwZU5hbWUucmVwbGFjZShgJHtuYW1lc3BhY2V9LmAsIFwiXCIpLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogY29tcGxleFR5cGVOYW1lLFxuXHRcdHByb3BlcnRpZXM6IFtdLFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBbXVxuXHR9O1xuXG5cdGNvbnN0IGNvbXBsZXhUeXBlUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKGNvbXBsZXhUeXBlRGVmaW5pdGlvbilcblx0XHQuZmlsdGVyKChwcm9wZXJ0eU5hbWVPck5vdCkgPT4ge1xuXHRcdFx0aWYgKHByb3BlcnR5TmFtZU9yTm90ICE9IFwiJEtleVwiICYmIHByb3BlcnR5TmFtZU9yTm90ICE9IFwiJGtpbmRcIikge1xuXHRcdFx0XHRyZXR1cm4gY29tcGxleFR5cGVEZWZpbml0aW9uW3Byb3BlcnR5TmFtZU9yTm90XS4ka2luZCA9PT0gXCJQcm9wZXJ0eVwiO1xuXHRcdFx0fVxuXHRcdH0pXG5cdFx0LnNvcnQoKGEsIGIpID0+IChhID4gYiA/IDEgOiAtMSkpXG5cdFx0Lm1hcCgocHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRyZXR1cm4gcHJlcGFyZVByb3BlcnR5KGNvbXBsZXhUeXBlRGVmaW5pdGlvbltwcm9wZXJ0eU5hbWVdLCBjb21wbGV4VHlwZU9iamVjdCwgcHJvcGVydHlOYW1lKTtcblx0XHR9KTtcblxuXHRjb21wbGV4VHlwZU9iamVjdC5wcm9wZXJ0aWVzID0gY29tcGxleFR5cGVQcm9wZXJ0aWVzO1xuXHRjb25zdCBjb21wbGV4VHlwZU5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoY29tcGxleFR5cGVEZWZpbml0aW9uKVxuXHRcdC5maWx0ZXIoKHByb3BlcnR5TmFtZU9yTm90KSA9PiB7XG5cdFx0XHRpZiAocHJvcGVydHlOYW1lT3JOb3QgIT0gXCIkS2V5XCIgJiYgcHJvcGVydHlOYW1lT3JOb3QgIT0gXCIka2luZFwiKSB7XG5cdFx0XHRcdHJldHVybiBjb21wbGV4VHlwZURlZmluaXRpb25bcHJvcGVydHlOYW1lT3JOb3RdLiRraW5kID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiO1xuXHRcdFx0fVxuXHRcdH0pXG5cdFx0LnNvcnQoKGEsIGIpID0+IChhID4gYiA/IDEgOiAtMSkpXG5cdFx0Lm1hcCgobmF2UHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRyZXR1cm4gcHJlcGFyZU5hdmlnYXRpb25Qcm9wZXJ0eShjb21wbGV4VHlwZURlZmluaXRpb25bbmF2UHJvcGVydHlOYW1lXSwgY29tcGxleFR5cGVPYmplY3QsIG5hdlByb3BlcnR5TmFtZSk7XG5cdFx0fSk7XG5cdGNvbXBsZXhUeXBlT2JqZWN0Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gY29tcGxleFR5cGVOYXZpZ2F0aW9uUHJvcGVydGllcztcblx0cmV0dXJuIGNvbXBsZXhUeXBlT2JqZWN0O1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlRW50aXR5S2V5cyhlbnRpdHlUeXBlRGVmaW5pdGlvbjogYW55LCBvTWV0YU1vZGVsRGF0YTogYW55KTogYW55IHtcblx0aWYgKCFlbnRpdHlUeXBlRGVmaW5pdGlvbi4kS2V5ICYmIGVudGl0eVR5cGVEZWZpbml0aW9uLiRCYXNlVHlwZSkge1xuXHRcdHJldHVybiBwcmVwYXJlRW50aXR5S2V5cyhvTWV0YU1vZGVsRGF0YVtgJHtlbnRpdHlUeXBlRGVmaW5pdGlvbi4kQmFzZVR5cGV9YF0sIG9NZXRhTW9kZWxEYXRhKTtcblx0fVxuXHRyZXR1cm4gZW50aXR5VHlwZURlZmluaXRpb24uJEtleSB8fCBbXTsgLy9oYW5kbGluZyBvZiBlbnRpdHkgdHlwZXMgd2l0aG91dCBrZXkgYXMgd2VsbCBhcyBiYXNldHlwZVxufVxuXG5mdW5jdGlvbiBwcmVwYXJlRW50aXR5VHlwZShlbnRpdHlUeXBlRGVmaW5pdGlvbjogYW55LCBlbnRpdHlUeXBlTmFtZTogc3RyaW5nLCBuYW1lc3BhY2U6IHN0cmluZywgbWV0YU1vZGVsRGF0YTogYW55KTogUmF3RW50aXR5VHlwZSB7XG5cdGNvbnN0IGVudGl0eUtleXM6IGFueSA9IHByZXBhcmVFbnRpdHlLZXlzKGVudGl0eVR5cGVEZWZpbml0aW9uLCBtZXRhTW9kZWxEYXRhKTtcblxuXHRjb25zdCBlbnRpdHlUeXBlT2JqZWN0OiBSYXdFbnRpdHlUeXBlID0ge1xuXHRcdF90eXBlOiBcIkVudGl0eVR5cGVcIixcblx0XHRuYW1lOiBlbnRpdHlUeXBlTmFtZS5yZXBsYWNlKGAke25hbWVzcGFjZX0uYCwgXCJcIiksXG5cdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBlbnRpdHlUeXBlTmFtZSxcblx0XHRrZXlzOiBbXSxcblx0XHRlbnRpdHlQcm9wZXJ0aWVzOiBbXSxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllczogW10sXG5cdFx0YWN0aW9uczoge31cblx0fTtcblxuXHRjb25zdCBlbnRpdHlQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoZW50aXR5VHlwZURlZmluaXRpb24pXG5cdFx0LmZpbHRlcigocHJvcGVydHlOYW1lT3JOb3QpID0+IHtcblx0XHRcdGlmIChwcm9wZXJ0eU5hbWVPck5vdCAhPSBcIiRLZXlcIiAmJiBwcm9wZXJ0eU5hbWVPck5vdCAhPSBcIiRraW5kXCIpIHtcblx0XHRcdFx0cmV0dXJuIGVudGl0eVR5cGVEZWZpbml0aW9uW3Byb3BlcnR5TmFtZU9yTm90XS4ka2luZCA9PT0gXCJQcm9wZXJ0eVwiO1xuXHRcdFx0fVxuXHRcdH0pXG5cdFx0Lm1hcCgocHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRyZXR1cm4gcHJlcGFyZVByb3BlcnR5KGVudGl0eVR5cGVEZWZpbml0aW9uW3Byb3BlcnR5TmFtZV0sIGVudGl0eVR5cGVPYmplY3QsIHByb3BlcnR5TmFtZSk7XG5cdFx0fSk7XG5cblx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhlbnRpdHlUeXBlRGVmaW5pdGlvbilcblx0XHQuZmlsdGVyKChwcm9wZXJ0eU5hbWVPck5vdCkgPT4ge1xuXHRcdFx0aWYgKHByb3BlcnR5TmFtZU9yTm90ICE9IFwiJEtleVwiICYmIHByb3BlcnR5TmFtZU9yTm90ICE9IFwiJGtpbmRcIikge1xuXHRcdFx0XHRyZXR1cm4gZW50aXR5VHlwZURlZmluaXRpb25bcHJvcGVydHlOYW1lT3JOb3RdLiRraW5kID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiO1xuXHRcdFx0fVxuXHRcdH0pXG5cdFx0Lm1hcCgobmF2UHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRyZXR1cm4gcHJlcGFyZU5hdmlnYXRpb25Qcm9wZXJ0eShlbnRpdHlUeXBlRGVmaW5pdGlvbltuYXZQcm9wZXJ0eU5hbWVdLCBlbnRpdHlUeXBlT2JqZWN0LCBuYXZQcm9wZXJ0eU5hbWUpO1xuXHRcdH0pO1xuXG5cdGVudGl0eVR5cGVPYmplY3Qua2V5cyA9IGVudGl0eUtleXNcblx0XHQubWFwKChlbnRpdHlLZXk6IHN0cmluZykgPT4gZW50aXR5UHJvcGVydGllcy5maW5kKChwcm9wZXJ0eTogUmF3UHJvcGVydHkpID0+IHByb3BlcnR5Lm5hbWUgPT09IGVudGl0eUtleSkpXG5cdFx0LmZpbHRlcigocHJvcGVydHk6IFByb3BlcnR5KSA9PiBwcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKTtcblx0ZW50aXR5VHlwZU9iamVjdC5lbnRpdHlQcm9wZXJ0aWVzID0gZW50aXR5UHJvcGVydGllcztcblx0ZW50aXR5VHlwZU9iamVjdC5uYXZpZ2F0aW9uUHJvcGVydGllcyA9IG5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXG5cdHJldHVybiBlbnRpdHlUeXBlT2JqZWN0O1xufVxuZnVuY3Rpb24gcHJlcGFyZUFjdGlvbihhY3Rpb25OYW1lOiBzdHJpbmcsIGFjdGlvblJhd0RhdGE6IE1ldGFNb2RlbEFjdGlvbiwgbmFtZXNwYWNlOiBzdHJpbmcsIGVudGl0eUNvbnRhaW5lck5hbWU6IHN0cmluZyk6IFJhd0FjdGlvbiB7XG5cdGxldCBhY3Rpb25FbnRpdHlUeXBlOiBzdHJpbmcgPSBcIlwiO1xuXHRsZXQgYWN0aW9uRlFOID0gYCR7YWN0aW9uTmFtZX1gO1xuXHRjb25zdCBhY3Rpb25TaG9ydE5hbWUgPSBhY3Rpb25OYW1lLnN1YnN0cihuYW1lc3BhY2UubGVuZ3RoICsgMSk7XG5cdGlmIChhY3Rpb25SYXdEYXRhLiRJc0JvdW5kKSB7XG5cdFx0Y29uc3QgYmluZGluZ1BhcmFtZXRlciA9IGFjdGlvblJhd0RhdGEuJFBhcmFtZXRlclswXTtcblx0XHRhY3Rpb25FbnRpdHlUeXBlID0gYmluZGluZ1BhcmFtZXRlci4kVHlwZTtcblx0XHRpZiAoYmluZGluZ1BhcmFtZXRlci4kaXNDb2xsZWN0aW9uID09PSB0cnVlKSB7XG5cdFx0XHRhY3Rpb25GUU4gPSBgJHthY3Rpb25OYW1lfShDb2xsZWN0aW9uKCR7YWN0aW9uRW50aXR5VHlwZX0pKWA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFjdGlvbkZRTiA9IGAke2FjdGlvbk5hbWV9KCR7YWN0aW9uRW50aXR5VHlwZX0pYDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0YWN0aW9uRlFOID0gYCR7ZW50aXR5Q29udGFpbmVyTmFtZX0vJHthY3Rpb25TaG9ydE5hbWV9YDtcblx0fVxuXHRjb25zdCBwYXJhbWV0ZXJzID0gYWN0aW9uUmF3RGF0YS4kUGFyYW1ldGVyIHx8IFtdO1xuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIkFjdGlvblwiLFxuXHRcdG5hbWU6IGFjdGlvblNob3J0TmFtZSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGFjdGlvbkZRTixcblx0XHRpc0JvdW5kOiBhY3Rpb25SYXdEYXRhLiRJc0JvdW5kLFxuXHRcdGlzRnVuY3Rpb246IGZhbHNlLFxuXHRcdHNvdXJjZVR5cGU6IGFjdGlvbkVudGl0eVR5cGUsXG5cdFx0cmV0dXJuVHlwZTogYWN0aW9uUmF3RGF0YS4kUmV0dXJuVHlwZSA/IGFjdGlvblJhd0RhdGEuJFJldHVyblR5cGUuJFR5cGUgOiBcIlwiLFxuXHRcdHBhcmFtZXRlcnM6IHBhcmFtZXRlcnMubWFwKChwYXJhbSkgPT4ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0X3R5cGU6IFwiQWN0aW9uUGFyYW1ldGVyXCIsXG5cdFx0XHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogYCR7YWN0aW9uRlFOfS8ke3BhcmFtLiROYW1lfWAsXG5cdFx0XHRcdGlzQ29sbGVjdGlvbjogcGFyYW0uJGlzQ29sbGVjdGlvbiA/PyBmYWxzZSxcblx0XHRcdFx0bmFtZTogcGFyYW0uJE5hbWUsXG5cdFx0XHRcdHR5cGU6IHBhcmFtLiRUeXBlXG5cdFx0XHR9O1xuXHRcdH0pXG5cdH07XG59XG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZUVudGl0eVR5cGVzKFxuXHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0b0NhcGFiaWxpdGllczogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgPSBEZWZhdWx0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcbik6IFJhd01ldGFkYXRhIHtcblx0Y29uc3Qgb01ldGFNb2RlbERhdGEgPSBvTWV0YU1vZGVsLmdldE9iamVjdChcIi8kXCIpO1xuXHRjb25zdCBhbm5vdGF0aW9uTGlzdHM6IFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25MaXN0PiA9IHt9O1xuXHRjb25zdCBlbnRpdHlUeXBlczogUmF3RW50aXR5VHlwZVtdID0gW107XG5cdGNvbnN0IGVudGl0eVNldHM6IFJhd0VudGl0eVNldFtdID0gW107XG5cdGNvbnN0IHNpbmdsZXRvbnM6IFJhd1NpbmdsZXRvbltdID0gW107XG5cdGNvbnN0IGNvbXBsZXhUeXBlczogUmF3Q29tcGxleFR5cGVbXSA9IFtdO1xuXHRjb25zdCB0eXBlRGVmaW5pdGlvbnM6IFJhd1R5cGVEZWZpbml0aW9uW10gPSBbXTtcblx0Y29uc3QgZW50aXR5Q29udGFpbmVyTmFtZSA9IG9NZXRhTW9kZWxEYXRhLiRFbnRpdHlDb250YWluZXI7XG5cdGxldCBuYW1lc3BhY2UgPSBcIlwiO1xuXHRjb25zdCBzY2hlbWFLZXlzID0gT2JqZWN0LmtleXMob01ldGFNb2RlbERhdGEpLmZpbHRlcigobWV0YW1vZGVsS2V5KSA9PiBvTWV0YU1vZGVsRGF0YVttZXRhbW9kZWxLZXldLiRraW5kID09PSBcIlNjaGVtYVwiKTtcblx0aWYgKHNjaGVtYUtleXMgJiYgc2NoZW1hS2V5cy5sZW5ndGggPiAwKSB7XG5cdFx0bmFtZXNwYWNlID0gc2NoZW1hS2V5c1swXS5zdWJzdHIoMCwgc2NoZW1hS2V5c1swXS5sZW5ndGggLSAxKTtcblx0fSBlbHNlIGlmIChlbnRpdHlUeXBlcyAmJiBlbnRpdHlUeXBlcy5sZW5ndGgpIHtcblx0XHRuYW1lc3BhY2UgPSBlbnRpdHlUeXBlc1swXS5mdWxseVF1YWxpZmllZE5hbWUucmVwbGFjZShlbnRpdHlUeXBlc1swXS5uYW1lLCBcIlwiKTtcblx0XHRuYW1lc3BhY2UgPSBuYW1lc3BhY2Uuc3Vic3RyKDAsIG5hbWVzcGFjZS5sZW5ndGggLSAxKTtcblx0fVxuXHRPYmplY3Qua2V5cyhvTWV0YU1vZGVsRGF0YSkuZm9yRWFjaCgoc09iamVjdE5hbWUpID0+IHtcblx0XHRpZiAoc09iamVjdE5hbWUgIT09IFwiJGtpbmRcIikge1xuXHRcdFx0c3dpdGNoIChvTWV0YU1vZGVsRGF0YVtzT2JqZWN0TmFtZV0uJGtpbmQpIHtcblx0XHRcdFx0Y2FzZSBcIkVudGl0eVR5cGVcIjpcblx0XHRcdFx0XHRjb25zdCBlbnRpdHlUeXBlID0gcHJlcGFyZUVudGl0eVR5cGUob01ldGFNb2RlbERhdGFbc09iamVjdE5hbWVdLCBzT2JqZWN0TmFtZSwgbmFtZXNwYWNlLCBvTWV0YU1vZGVsRGF0YSk7XG5cdFx0XHRcdFx0Ly8gQ2hlY2sgaWYgdGhlcmUgYXJlIGZpbHRlciBmYWNldHMgZGVmaW5lZCBmb3IgdGhlIGVudGl0eVR5cGUgYW5kIGlmIHllcywgY2hlY2sgaWYgYWxsIG9mIHRoZW0gaGF2ZSBhbiBJRFxuXHRcdFx0XHRcdC8vIFRoZSBJRCBpcyBvcHRpb25hbCwgYnV0IGl0IGlzIGludGVybmFsbHkgdGFrZW4gZm9yIGdyb3VwaW5nIGZpbHRlciBmaWVsZHMgYW5kIGlmIGl0J3Mgbm90IHByZXNlbnRcblx0XHRcdFx0XHQvLyBhIGZhbGxiYWNrIElEIG5lZWRzIHRvIGJlIGdlbmVyYXRlZCBoZXJlLlxuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdG9NZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZV0gJiZcblx0XHRcdFx0XHRcdG9NZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZV1bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmlsdGVyRmFjZXRzXCJdXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRvTWV0YU1vZGVsRGF0YS4kQW5ub3RhdGlvbnNbZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWVdW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZpbHRlckZhY2V0c1wiXS5mb3JFYWNoKFxuXHRcdFx0XHRcdFx0XHQoZmlsdGVyRmFjZXRBbm5vdGF0aW9uOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRmaWx0ZXJGYWNldEFubm90YXRpb24uSUQgPSBmaWx0ZXJGYWNldEFubm90YXRpb24uSUQgfHwgZ2VuZXJhdGUoW3sgRmFjZXQ6IGZpbHRlckZhY2V0QW5ub3RhdGlvbiB9XSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5mb3JFYWNoKChlbnRpdHlQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKCFvTWV0YU1vZGVsRGF0YS4kQW5ub3RhdGlvbnNbZW50aXR5UHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lXSkge1xuXHRcdFx0XHRcdFx0XHRvTWV0YU1vZGVsRGF0YS4kQW5ub3RhdGlvbnNbZW50aXR5UHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lXSA9IHt9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHQhb01ldGFNb2RlbERhdGEuJEFubm90YXRpb25zW2VudGl0eVByb3BlcnR5LmZ1bGx5UXVhbGlmaWVkTmFtZV1bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRGVmYXVsdFwiXVxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdG9NZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlQcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWVdW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZERlZmF1bHRcIl0gPVxuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdCRUeXBlOiBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0VmFsdWU6IHsgJFBhdGg6IGVudGl0eVByb3BlcnR5Lm5hbWUgfVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0ZW50aXR5VHlwZXMucHVzaChlbnRpdHlUeXBlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIkNvbXBsZXhUeXBlXCI6XG5cdFx0XHRcdFx0Y29uc3QgY29tcGxleFR5cGUgPSBwcmVwYXJlQ29tcGxleFR5cGUob01ldGFNb2RlbERhdGFbc09iamVjdE5hbWVdLCBzT2JqZWN0TmFtZSwgbmFtZXNwYWNlKTtcblx0XHRcdFx0XHRjb21wbGV4VHlwZXMucHVzaChjb21wbGV4VHlwZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJUeXBlRGVmaW5pdGlvblwiOlxuXHRcdFx0XHRcdGNvbnN0IHR5cGVEZWZpbml0aW9uID0gcHJlcGFyZVR5cGVEZWZpbml0aW9uKG9NZXRhTW9kZWxEYXRhW3NPYmplY3ROYW1lXSwgc09iamVjdE5hbWUsIG5hbWVzcGFjZSk7XG5cdFx0XHRcdFx0dHlwZURlZmluaXRpb25zLnB1c2godHlwZURlZmluaXRpb24pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0Y29uc3Qgb0VudGl0eUNvbnRhaW5lciA9IG9NZXRhTW9kZWxEYXRhW2VudGl0eUNvbnRhaW5lck5hbWVdO1xuXHRPYmplY3Qua2V5cyhvRW50aXR5Q29udGFpbmVyKS5mb3JFYWNoKChzT2JqZWN0TmFtZSkgPT4ge1xuXHRcdGlmIChzT2JqZWN0TmFtZSAhPT0gXCIka2luZFwiKSB7XG5cdFx0XHRzd2l0Y2ggKG9FbnRpdHlDb250YWluZXJbc09iamVjdE5hbWVdLiRraW5kKSB7XG5cdFx0XHRcdGNhc2UgXCJFbnRpdHlTZXRcIjpcblx0XHRcdFx0XHRjb25zdCBlbnRpdHlTZXQgPSBwcmVwYXJlRW50aXR5U2V0KG9FbnRpdHlDb250YWluZXJbc09iamVjdE5hbWVdLCBzT2JqZWN0TmFtZSwgZW50aXR5Q29udGFpbmVyTmFtZSk7XG5cdFx0XHRcdFx0ZW50aXR5U2V0cy5wdXNoKGVudGl0eVNldCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJTaW5nbGV0b25cIjpcblx0XHRcdFx0XHRjb25zdCBzaW5nbGV0b24gPSBwcmVwYXJlU2luZ2xldG9uKG9FbnRpdHlDb250YWluZXJbc09iamVjdE5hbWVdLCBzT2JqZWN0TmFtZSwgZW50aXR5Q29udGFpbmVyTmFtZSk7XG5cdFx0XHRcdFx0c2luZ2xldG9ucy5wdXNoKHNpbmdsZXRvbik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRsZXQgZW50aXR5Q29udGFpbmVyOiBSYXdFbnRpdHlDb250YWluZXIgPSB7XG5cdFx0X3R5cGU6IFwiRW50aXR5Q29udGFpbmVyXCIsXG5cdFx0bmFtZTogXCJcIixcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IFwiXCJcblx0fTtcblx0aWYgKGVudGl0eUNvbnRhaW5lck5hbWUpIHtcblx0XHRlbnRpdHlDb250YWluZXIgPSB7XG5cdFx0XHRfdHlwZTogXCJFbnRpdHlDb250YWluZXJcIixcblx0XHRcdG5hbWU6IGVudGl0eUNvbnRhaW5lck5hbWUucmVwbGFjZShgJHtuYW1lc3BhY2V9LmAsIFwiXCIpLFxuXHRcdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBlbnRpdHlDb250YWluZXJOYW1lXG5cdFx0fTtcblx0fVxuXHRlbnRpdHlTZXRzLmZvckVhY2goKGVudGl0eVNldCkgPT4ge1xuXHRcdGNvbnN0IG5hdlByb3BlcnR5QmluZGluZ3MgPSBvRW50aXR5Q29udGFpbmVyW2VudGl0eVNldC5uYW1lXS4kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZztcblx0XHRpZiAobmF2UHJvcGVydHlCaW5kaW5ncykge1xuXHRcdFx0T2JqZWN0LmtleXMobmF2UHJvcGVydHlCaW5kaW5ncykuZm9yRWFjaCgobmF2UHJvcE5hbWUpID0+IHtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0RW50aXR5U2V0ID0gZW50aXR5U2V0cy5maW5kKChlbnRpdHlTZXROYW1lKSA9PiBlbnRpdHlTZXROYW1lLm5hbWUgPT09IG5hdlByb3BlcnR5QmluZGluZ3NbbmF2UHJvcE5hbWVdKTtcblx0XHRcdFx0aWYgKHRhcmdldEVudGl0eVNldCkge1xuXHRcdFx0XHRcdGVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW25hdlByb3BOYW1lXSA9IHRhcmdldEVudGl0eVNldDtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCBhY3Rpb25zOiBSYXdBY3Rpb25bXSA9IE9iamVjdC5rZXlzKG9NZXRhTW9kZWxEYXRhKVxuXHRcdC5maWx0ZXIoKGtleSkgPT4ge1xuXHRcdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkob01ldGFNb2RlbERhdGFba2V5XSkgJiYgb01ldGFNb2RlbERhdGFba2V5XS5sZW5ndGggPiAwICYmIG9NZXRhTW9kZWxEYXRhW2tleV1bMF0uJGtpbmQgPT09IFwiQWN0aW9uXCI7XG5cdFx0fSlcblx0XHQucmVkdWNlKChvdXRBY3Rpb25zOiBSYXdBY3Rpb25bXSwgYWN0aW9uTmFtZSkgPT4ge1xuXHRcdFx0Y29uc3QgaW5uZXJBY3Rpb25zID0gb01ldGFNb2RlbERhdGFbYWN0aW9uTmFtZV07XG5cdFx0XHRpbm5lckFjdGlvbnMuZm9yRWFjaCgoYWN0aW9uOiBNZXRhTW9kZWxBY3Rpb24pID0+IHtcblx0XHRcdFx0b3V0QWN0aW9ucy5wdXNoKHByZXBhcmVBY3Rpb24oYWN0aW9uTmFtZSwgYWN0aW9uLCBuYW1lc3BhY2UsIGVudGl0eUNvbnRhaW5lck5hbWUpKTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIG91dEFjdGlvbnM7XG5cdFx0fSwgW10pO1xuXG5cdGZvciAoY29uc3QgdGFyZ2V0IGluIG9NZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9ucykge1xuXHRcdGNyZWF0ZUFubm90YXRpb25MaXN0cyhvTWV0YU1vZGVsRGF0YS4kQW5ub3RhdGlvbnNbdGFyZ2V0XSwgdGFyZ2V0LCBhbm5vdGF0aW9uTGlzdHMsIG9DYXBhYmlsaXRpZXMpO1xuXHR9XG5cblx0Ly8gU29ydCBieSB0YXJnZXQgbGVuZ3RoXG5cdGNvbnN0IG91dEFubm90YXRpb25MaXN0cyA9IE9iamVjdC5rZXlzKGFubm90YXRpb25MaXN0cylcblx0XHQuc29ydCgoYSwgYikgPT4gKGEubGVuZ3RoID49IGIubGVuZ3RoID8gMSA6IC0xKSlcblx0XHQubWFwKChzQW5ub3RhdGlvbk5hbWUpID0+IGFubm90YXRpb25MaXN0c1tzQW5ub3RhdGlvbk5hbWVdKTtcblx0Y29uc3QgcmVmZXJlbmNlczogUmVmZXJlbmNlW10gPSBbXTtcblx0cmV0dXJuIHtcblx0XHRpZGVudGlmaWNhdGlvbjogXCJtZXRhbW9kZWxSZXN1bHRcIixcblx0XHR2ZXJzaW9uOiBcIjQuMFwiLFxuXHRcdHNjaGVtYToge1xuXHRcdFx0ZW50aXR5Q29udGFpbmVyLFxuXHRcdFx0ZW50aXR5U2V0cyxcblx0XHRcdGVudGl0eVR5cGVzLFxuXHRcdFx0Y29tcGxleFR5cGVzLFxuXHRcdFx0dHlwZURlZmluaXRpb25zLFxuXHRcdFx0c2luZ2xldG9ucyxcblx0XHRcdGFzc29jaWF0aW9uczogW10sXG5cdFx0XHRhc3NvY2lhdGlvblNldHM6IFtdLFxuXHRcdFx0YWN0aW9ucyxcblx0XHRcdG5hbWVzcGFjZSxcblx0XHRcdGFubm90YXRpb25zOiB7XG5cdFx0XHRcdFwibWV0YW1vZGVsUmVzdWx0XCI6IG91dEFubm90YXRpb25MaXN0c1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cmVmZXJlbmNlczogcmVmZXJlbmNlc1xuXHR9O1xufVxuXG5jb25zdCBtTWV0YU1vZGVsTWFwOiBSZWNvcmQ8c3RyaW5nLCBDb252ZXJ0ZWRNZXRhZGF0YT4gPSB7fTtcblxuLyoqXG4gKiBDb252ZXJ0IHRoZSBPRGF0YU1ldGFNb2RlbCBpbnRvIGFub3RoZXIgZm9ybWF0IHRoYXQgYWxsb3cgZm9yIGVhc3kgbWFuaXB1bGF0aW9uIG9mIHRoZSBhbm5vdGF0aW9ucy5cbiAqXG4gKiBAcGFyYW0gb01ldGFNb2RlbCBUaGUgT0RhdGFNZXRhTW9kZWxcbiAqIEBwYXJhbSBvQ2FwYWJpbGl0aWVzIFRoZSBjdXJyZW50IGNhcGFiaWxpdGllc1xuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgb2JqZWN0LWxpa2UgYW5ub3RhdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUeXBlcyhvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgb0NhcGFiaWxpdGllcz86IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKTogQ29udmVydGVkTWV0YWRhdGEge1xuXHRjb25zdCBzTWV0YU1vZGVsSWQgPSAob01ldGFNb2RlbCBhcyBhbnkpLmlkO1xuXHRpZiAoIW1NZXRhTW9kZWxNYXAuaGFzT3duUHJvcGVydHkoc01ldGFNb2RlbElkKSkge1xuXHRcdGNvbnN0IHBhcnNlZE91dHB1dCA9IHByZXBhcmVFbnRpdHlUeXBlcyhvTWV0YU1vZGVsLCBvQ2FwYWJpbGl0aWVzKTtcblx0XHR0cnkge1xuXHRcdFx0bU1ldGFNb2RlbE1hcFtzTWV0YU1vZGVsSWRdID0gQW5ub3RhdGlvbkNvbnZlcnRlci5jb252ZXJ0KHBhcnNlZE91dHB1dCk7XG5cdFx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3Iob0Vycm9yIGFzIGFueSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBtTWV0YU1vZGVsTWFwW3NNZXRhTW9kZWxJZF0gYXMgYW55IGFzIENvbnZlcnRlZE1ldGFkYXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udmVydGVkVHlwZXMob0NvbnRleHQ6IENvbnRleHQpIHtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkgYXMgdW5rbm93biBhcyBPRGF0YU1ldGFNb2RlbDtcblx0aWYgKCFvTWV0YU1vZGVsLmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1ldGFNb2RlbFwiKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIGEgT0RhdGFNZXRhTW9kZWxcIik7XG5cdH1cblx0cmV0dXJuIGNvbnZlcnRUeXBlcyhvTWV0YU1vZGVsKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZU1vZGVsQ2FjaGVEYXRhKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKSB7XG5cdGRlbGV0ZSBtTWV0YU1vZGVsTWFwWyhvTWV0YU1vZGVsIGFzIGFueSkuaWRdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydE1ldGFNb2RlbENvbnRleHQob01ldGFNb2RlbENvbnRleHQ6IENvbnRleHQsIGJJbmNsdWRlVmlzaXRlZE9iamVjdHM6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XG5cdGNvbnN0IG9Db252ZXJ0ZWRNZXRhZGF0YSA9IGNvbnZlcnRUeXBlcyhvTWV0YU1vZGVsQ29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsKTtcblx0Y29uc3Qgc1BhdGggPSBvTWV0YU1vZGVsQ29udGV4dC5nZXRQYXRoKCk7XG5cblx0Y29uc3QgYVBhdGhTcGxpdCA9IHNQYXRoLnNwbGl0KFwiL1wiKTtcblx0bGV0IGZpcnN0UGFydCA9IGFQYXRoU3BsaXRbMV07XG5cdGxldCBiZWdpbkluZGV4ID0gMjtcblx0aWYgKG9Db252ZXJ0ZWRNZXRhZGF0YS5lbnRpdHlDb250YWluZXIuZnVsbHlRdWFsaWZpZWROYW1lID09PSBmaXJzdFBhcnQpIHtcblx0XHRmaXJzdFBhcnQgPSBhUGF0aFNwbGl0WzJdO1xuXHRcdGJlZ2luSW5kZXgrKztcblx0fVxuXHRsZXQgdGFyZ2V0RW50aXR5U2V0OiBFbnRpdHlTZXQgfCBTaW5nbGV0b24gPSBvQ29udmVydGVkTWV0YWRhdGEuZW50aXR5U2V0cy5maW5kKFxuXHRcdChlbnRpdHlTZXQpID0+IGVudGl0eVNldC5uYW1lID09PSBmaXJzdFBhcnRcblx0KSBhcyBFbnRpdHlTZXQ7XG5cdGlmICghdGFyZ2V0RW50aXR5U2V0KSB7XG5cdFx0dGFyZ2V0RW50aXR5U2V0ID0gb0NvbnZlcnRlZE1ldGFkYXRhLnNpbmdsZXRvbnMuZmluZCgoc2luZ2xldG9uKSA9PiBzaW5nbGV0b24ubmFtZSA9PT0gZmlyc3RQYXJ0KSBhcyBTaW5nbGV0b247XG5cdH1cblx0bGV0IHJlbGF0aXZlUGF0aCA9IGFQYXRoU3BsaXQuc2xpY2UoYmVnaW5JbmRleCkuam9pbihcIi9cIik7XG5cblx0Y29uc3QgbG9jYWxPYmplY3RzOiBhbnlbXSA9IFt0YXJnZXRFbnRpdHlTZXRdO1xuXHR3aGlsZSAocmVsYXRpdmVQYXRoICYmIHJlbGF0aXZlUGF0aC5sZW5ndGggPiAwICYmIHJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKFwiJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIikpIHtcblx0XHRsZXQgcmVsYXRpdmVTcGxpdCA9IHJlbGF0aXZlUGF0aC5zcGxpdChcIi9cIik7XG5cdFx0bGV0IGlkeCA9IDA7XG5cdFx0bGV0IGN1cnJlbnRFbnRpdHlTZXQsIHNOYXZQcm9wVG9DaGVjaztcblxuXHRcdHJlbGF0aXZlU3BsaXQgPSByZWxhdGl2ZVNwbGl0LnNsaWNlKDEpOyAvLyBSZW1vdmluZyBcIiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nXCJcblx0XHR3aGlsZSAoIWN1cnJlbnRFbnRpdHlTZXQgJiYgcmVsYXRpdmVTcGxpdC5sZW5ndGggPiBpZHgpIHtcblx0XHRcdGlmIChyZWxhdGl2ZVNwbGl0W2lkeF0gIT09IFwiJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIikge1xuXHRcdFx0XHQvLyBGaW5kaW5nIHRoZSBjb3JyZWN0IGVudGl0eVNldCBmb3IgdGhlIG5hdmlnYWl0b24gcHJvcGVydHkgYmluZGluZyBleGFtcGxlOiBcIlNldC9fU2FsZXNPcmRlclwiXG5cdFx0XHRcdHNOYXZQcm9wVG9DaGVjayA9IHJlbGF0aXZlU3BsaXRcblx0XHRcdFx0XHQuc2xpY2UoMCwgaWR4ICsgMSlcblx0XHRcdFx0XHQuam9pbihcIi9cIilcblx0XHRcdFx0XHQucmVwbGFjZShcIi8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiLCBcIlwiKTtcblx0XHRcdFx0Y3VycmVudEVudGl0eVNldCA9IHRhcmdldEVudGl0eVNldCAmJiB0YXJnZXRFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tzTmF2UHJvcFRvQ2hlY2tdO1xuXHRcdFx0fVxuXHRcdFx0aWR4Kys7XG5cdFx0fVxuXHRcdGlmICghY3VycmVudEVudGl0eVNldCkge1xuXHRcdFx0Ly8gRmFsbCBiYWNrIHRvIFNpbmdsZSBuYXYgcHJvcCBpZiBlbnRpdHlTZXQgaXMgbm90IGZvdW5kLlxuXHRcdFx0c05hdlByb3BUb0NoZWNrID0gcmVsYXRpdmVTcGxpdFswXTtcblx0XHR9XG5cdFx0Y29uc3QgYU5hdlByb3BzID0gc05hdlByb3BUb0NoZWNrPy5zcGxpdChcIi9cIikgfHwgW107XG5cdFx0bGV0IHRhcmdldEVudGl0eVR5cGUgPSB0YXJnZXRFbnRpdHlTZXQgJiYgdGFyZ2V0RW50aXR5U2V0LmVudGl0eVR5cGU7XG5cdFx0Zm9yIChjb25zdCBzTmF2UHJvcCBvZiBhTmF2UHJvcHMpIHtcblx0XHRcdC8vIFB1c2hpbmcgYWxsIG5hdiBwcm9wcyB0byB0aGUgdmlzaXRlZCBvYmplY3RzLiBleGFtcGxlOiBcIlNldFwiLCBcIl9TYWxlc09yZGVyXCIgZm9yIFwiU2V0L19TYWxlc09yZGVyXCIoaW4gTmF2aWdhdGlvblByb3BlcnR5QmluZGluZylcblx0XHRcdGNvbnN0IHRhcmdldE5hdlByb3AgPSB0YXJnZXRFbnRpdHlUeXBlICYmIHRhcmdldEVudGl0eVR5cGUubmF2aWdhdGlvblByb3BlcnRpZXMuZmluZCgobmF2UHJvcCkgPT4gbmF2UHJvcC5uYW1lID09PSBzTmF2UHJvcCk7XG5cdFx0XHRpZiAodGFyZ2V0TmF2UHJvcCkge1xuXHRcdFx0XHRsb2NhbE9iamVjdHMucHVzaCh0YXJnZXROYXZQcm9wKTtcblx0XHRcdFx0dGFyZ2V0RW50aXR5VHlwZSA9IHRhcmdldE5hdlByb3AudGFyZ2V0VHlwZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0YXJnZXRFbnRpdHlTZXQgPVxuXHRcdFx0KHRhcmdldEVudGl0eVNldCAmJiBjdXJyZW50RW50aXR5U2V0KSB8fCAodGFyZ2V0RW50aXR5U2V0ICYmIHRhcmdldEVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW3JlbGF0aXZlU3BsaXRbMF1dKTtcblx0XHRpZiAodGFyZ2V0RW50aXR5U2V0KSB7XG5cdFx0XHQvLyBQdXNoaW5nIHRoZSB0YXJnZXQgZW50aXR5U2V0IHRvIHZpc2l0ZWQgb2JqZWN0c1xuXHRcdFx0bG9jYWxPYmplY3RzLnB1c2godGFyZ2V0RW50aXR5U2V0KTtcblx0XHR9XG5cdFx0Ly8gUmUtY2FsY3VsYXRpbmcgdGhlIHJlbGF0aXZlIHBhdGhcblx0XHQvLyBBcyBlYWNoIG5hdmlnYXRpb24gbmFtZSBpcyBlbmNsb3NlZCBiZXR3ZWVuICckTmF2aWdhdGlvblByb3BlcnR5QmluZGluZycgYW5kICckJyAodG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlIGVudGl0eXNldCBlYXNpbHkgaW4gdGhlIG1ldGFtb2RlbClcblx0XHQvLyB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgY2xvc2luZyAnJCcgdG8gYmUgYWJsZSB0byBzd2l0Y2ggdG8gdGhlIG5leHQgbmF2aWdhdGlvblxuXHRcdHJlbGF0aXZlU3BsaXQgPSByZWxhdGl2ZVNwbGl0LnNsaWNlKGFOYXZQcm9wcy5sZW5ndGggfHwgMSk7XG5cdFx0aWYgKHJlbGF0aXZlU3BsaXQubGVuZ3RoICYmIHJlbGF0aXZlU3BsaXRbMF0gPT09IFwiJFwiKSB7XG5cdFx0XHRyZWxhdGl2ZVNwbGl0LnNoaWZ0KCk7XG5cdFx0fVxuXHRcdHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlU3BsaXQuam9pbihcIi9cIik7XG5cdH1cblx0aWYgKHJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKFwiJFR5cGVcIikpIHtcblx0XHQvLyBBcyAkVHlwZUAgaXMgYWxsb3dlZCBhcyB3ZWxsXG5cdFx0aWYgKHJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKFwiJFR5cGVAXCIpKSB7XG5cdFx0XHRyZWxhdGl2ZVBhdGggPSByZWxhdGl2ZVBhdGgucmVwbGFjZShcIiRUeXBlXCIsIFwiXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBXZSdyZSBhbnl3YXkgZ29pbmcgdG8gbG9vayBvbiB0aGUgZW50aXR5VHlwZS4uLlxuXHRcdFx0cmVsYXRpdmVQYXRoID0gYVBhdGhTcGxpdC5zbGljZSgzKS5qb2luKFwiL1wiKTtcblx0XHR9XG5cdH1cblx0aWYgKHRhcmdldEVudGl0eVNldCAmJiByZWxhdGl2ZVBhdGgubGVuZ3RoKSB7XG5cdFx0Y29uc3Qgb1RhcmdldCA9IHRhcmdldEVudGl0eVNldC5lbnRpdHlUeXBlLnJlc29sdmVQYXRoKHJlbGF0aXZlUGF0aCwgYkluY2x1ZGVWaXNpdGVkT2JqZWN0cyk7XG5cdFx0aWYgKG9UYXJnZXQpIHtcblx0XHRcdGlmIChiSW5jbHVkZVZpc2l0ZWRPYmplY3RzKSB7XG5cdFx0XHRcdG9UYXJnZXQudmlzaXRlZE9iamVjdHMgPSBsb2NhbE9iamVjdHMuY29uY2F0KG9UYXJnZXQudmlzaXRlZE9iamVjdHMpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodGFyZ2V0RW50aXR5U2V0LmVudGl0eVR5cGUgJiYgdGFyZ2V0RW50aXR5U2V0LmVudGl0eVR5cGUuYWN0aW9ucykge1xuXHRcdFx0Ly8gaWYgdGFyZ2V0IGlzIGFuIGFjdGlvbiBvciBhbiBhY3Rpb24gcGFyYW1ldGVyXG5cdFx0XHRjb25zdCBhY3Rpb25zID0gdGFyZ2V0RW50aXR5U2V0LmVudGl0eVR5cGUgJiYgdGFyZ2V0RW50aXR5U2V0LmVudGl0eVR5cGUuYWN0aW9ucztcblx0XHRcdGNvbnN0IHJlbGF0aXZlU3BsaXQgPSByZWxhdGl2ZVBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0aWYgKGFjdGlvbnNbcmVsYXRpdmVTcGxpdFswXV0pIHtcblx0XHRcdFx0Y29uc3QgYWN0aW9uID0gYWN0aW9uc1tyZWxhdGl2ZVNwbGl0WzBdXTtcblx0XHRcdFx0aWYgKHJlbGF0aXZlU3BsaXRbMV0gJiYgYWN0aW9uLnBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJOYW1lID0gcmVsYXRpdmVTcGxpdFsxXTtcblx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uLnBhcmFtZXRlcnMuZmluZCgocGFyYW1ldGVyKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcGFyYW1ldGVyLmZ1bGx5UXVhbGlmaWVkTmFtZS5lbmRzV2l0aChgLyR7cGFyYW1ldGVyTmFtZX1gKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIGlmIChyZWxhdGl2ZVBhdGgubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGFjdGlvbjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb1RhcmdldDtcblx0fSBlbHNlIHtcblx0XHRpZiAoYkluY2x1ZGVWaXNpdGVkT2JqZWN0cykge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dGFyZ2V0OiB0YXJnZXRFbnRpdHlTZXQsXG5cdFx0XHRcdHZpc2l0ZWRPYmplY3RzOiBsb2NhbE9iamVjdHNcblx0XHRcdH07XG5cdFx0fVxuXHRcdHJldHVybiB0YXJnZXRFbnRpdHlTZXQ7XG5cdH1cbn1cblxuZXhwb3J0IHR5cGUgUmVzb2x2ZWRUYXJnZXQgPSB7XG5cdHRhcmdldD86IFNlcnZpY2VPYmplY3Q7XG5cdHZpc2l0ZWRPYmplY3RzOiAoU2VydmljZU9iamVjdCB8IFNpbmdsZXRvbilbXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMob01ldGFNb2RlbENvbnRleHQ6IENvbnRleHQsIG9FbnRpdHlTZXRNZXRhTW9kZWxDb250ZXh0PzogQ29udGV4dCk6IERhdGFNb2RlbE9iamVjdFBhdGgge1xuXHRjb25zdCBvQ29udmVydGVkTWV0YWRhdGEgPSBjb252ZXJ0VHlwZXMob01ldGFNb2RlbENvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCk7XG5cdGNvbnN0IG1ldGFNb2RlbENvbnRleHQgPSBjb252ZXJ0TWV0YU1vZGVsQ29udGV4dChvTWV0YU1vZGVsQ29udGV4dCwgdHJ1ZSk7XG5cdGxldCB0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbjtcblx0aWYgKG9FbnRpdHlTZXRNZXRhTW9kZWxDb250ZXh0ICYmIG9FbnRpdHlTZXRNZXRhTW9kZWxDb250ZXh0LmdldFBhdGgoKSAhPT0gXCIvXCIpIHtcblx0XHR0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbiA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvRW50aXR5U2V0TWV0YU1vZGVsQ29udGV4dCk7XG5cdH1cblx0cmV0dXJuIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0RnJvbVBhdGgobWV0YU1vZGVsQ29udGV4dCwgb0NvbnZlcnRlZE1ldGFkYXRhLCB0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdEZyb21QYXRoKFxuXHRtZXRhTW9kZWxDb250ZXh0OiBSZXNvbHZlZFRhcmdldCxcblx0Y29udmVydGVkVHlwZXM6IENvbnZlcnRlZE1ldGFkYXRhLFxuXHR0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbj86IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdG9ubHlTZXJ2aWNlT2JqZWN0cz86IGJvb2xlYW5cbik6IERhdGFNb2RlbE9iamVjdFBhdGgge1xuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RzID0gbWV0YU1vZGVsQ29udGV4dC52aXNpdGVkT2JqZWN0cy5maWx0ZXIoXG5cdFx0KHZpc2l0ZWRPYmplY3Q6IGFueSkgPT5cblx0XHRcdHZpc2l0ZWRPYmplY3QgJiZcblx0XHRcdHZpc2l0ZWRPYmplY3QuaGFzT3duUHJvcGVydHkoXCJfdHlwZVwiKSAmJlxuXHRcdFx0dmlzaXRlZE9iamVjdC5fdHlwZSAhPT0gXCJFbnRpdHlUeXBlXCIgJiZcblx0XHRcdHZpc2l0ZWRPYmplY3QuX3R5cGUgIT09IFwiRW50aXR5Q29udGFpbmVyXCJcblx0KTtcblx0aWYgKFxuXHRcdG1ldGFNb2RlbENvbnRleHQudGFyZ2V0ICYmXG5cdFx0bWV0YU1vZGVsQ29udGV4dC50YXJnZXQuaGFzT3duUHJvcGVydHkoXCJfdHlwZVwiKSAmJlxuXHRcdG1ldGFNb2RlbENvbnRleHQudGFyZ2V0Ll90eXBlICE9PSBcIkVudGl0eVR5cGVcIiAmJlxuXHRcdGRhdGFNb2RlbE9iamVjdHNbZGF0YU1vZGVsT2JqZWN0cy5sZW5ndGggLSAxXSAhPT0gbWV0YU1vZGVsQ29udGV4dC50YXJnZXQgJiZcblx0XHQhb25seVNlcnZpY2VPYmplY3RzXG5cdCkge1xuXHRcdGRhdGFNb2RlbE9iamVjdHMucHVzaChtZXRhTW9kZWxDb250ZXh0LnRhcmdldCk7XG5cdH1cblxuXHRjb25zdCBuYXZpZ2F0aW9uUHJvcGVydGllczogTmF2aWdhdGlvblByb3BlcnR5W10gPSBbXTtcblx0Y29uc3Qgcm9vdEVudGl0eVNldDogRW50aXR5U2V0ID0gZGF0YU1vZGVsT2JqZWN0c1swXSBhcyBFbnRpdHlTZXQ7XG5cblx0bGV0IGN1cnJlbnRFbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZCA9IHJvb3RFbnRpdHlTZXQ7XG5cdGxldCBjdXJyZW50RW50aXR5VHlwZTogRW50aXR5VHlwZSA9IHJvb3RFbnRpdHlTZXQuZW50aXR5VHlwZTtcblx0bGV0IGN1cnJlbnRPYmplY3Q6IFNlcnZpY2VPYmplY3QgfCB1bmRlZmluZWQ7XG5cdGxldCBuYXZpZ2F0ZWRQYXRoID0gW107XG5cblx0Zm9yIChsZXQgaSA9IDE7IGkgPCBkYXRhTW9kZWxPYmplY3RzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y3VycmVudE9iamVjdCA9IGRhdGFNb2RlbE9iamVjdHNbaV07XG5cblx0XHRpZiAoY3VycmVudE9iamVjdC5fdHlwZSA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIikge1xuXHRcdFx0bmF2aWdhdGVkUGF0aC5wdXNoKGN1cnJlbnRPYmplY3QubmFtZSk7XG5cdFx0XHRuYXZpZ2F0aW9uUHJvcGVydGllcy5wdXNoKGN1cnJlbnRPYmplY3QpO1xuXHRcdFx0Y3VycmVudEVudGl0eVR5cGUgPSBjdXJyZW50T2JqZWN0LnRhcmdldFR5cGU7XG5cdFx0XHRjb25zdCBib3VuZEVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkID0gY3VycmVudEVudGl0eVNldD8ubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tuYXZpZ2F0ZWRQYXRoLmpvaW4oXCIvXCIpXTtcblx0XHRcdGlmIChib3VuZEVudGl0eVNldCkge1xuXHRcdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gYm91bmRFbnRpdHlTZXQ7XG5cdFx0XHRcdG5hdmlnYXRlZFBhdGggPSBbXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGN1cnJlbnRPYmplY3QuX3R5cGUgPT09IFwiRW50aXR5U2V0XCIgfHwgY3VycmVudE9iamVjdC5fdHlwZSA9PT0gXCJTaW5nbGV0b25cIikge1xuXHRcdFx0Y3VycmVudEVudGl0eVNldCA9IGN1cnJlbnRPYmplY3Q7XG5cdFx0XHRjdXJyZW50RW50aXR5VHlwZSA9IGN1cnJlbnRFbnRpdHlTZXQuZW50aXR5VHlwZTtcblx0XHR9XG5cdH1cblxuXHRpZiAobmF2aWdhdGVkUGF0aC5sZW5ndGggPiAwKSB7XG5cdFx0Ly8gUGF0aCB3aXRob3V0IE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcgLS0+IG5vIHRhcmdldCBlbnRpdHkgc2V0XG5cdFx0Y3VycmVudEVudGl0eVNldCA9IHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmICh0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbiAmJiB0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbi5zdGFydGluZ0VudGl0eVNldCAhPT0gcm9vdEVudGl0eVNldCkge1xuXHRcdC8vIEluIGNhc2UgdGhlIGVudGl0eXNldCBpcyBub3Qgc3RhcnRpbmcgZnJvbSB0aGUgc2FtZSBsb2NhdGlvbiBpdCBtYXkgbWVhbiB0aGF0IHdlIGFyZSBkb2luZyB0b28gbXVjaCB3b3JrIGVhcmxpZXIgZm9yIHNvbWUgcmVhc29uXG5cdFx0Ly8gQXMgc3VjaCB3ZSBuZWVkIHRvIHJlZGVmaW5lIHRoZSBjb250ZXh0IHNvdXJjZSBmb3IgdGhlIHRhcmdldEVudGl0eVNldExvY2F0aW9uXG5cdFx0Y29uc3Qgc3RhcnRpbmdJbmRleCA9IGRhdGFNb2RlbE9iamVjdHMuaW5kZXhPZih0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbi5zdGFydGluZ0VudGl0eVNldCk7XG5cdFx0aWYgKHN0YXJ0aW5nSW5kZXggIT09IC0xKSB7XG5cdFx0XHQvLyBJZiBpdCdzIG5vdCBmb3VuZCBJIGRvbid0IGtub3cgd2hhdCB3ZSBjYW4gZG8gKHByb2JhYmx5IG5vdGhpbmcpXG5cdFx0XHRjb25zdCByZXF1aXJlZERhdGFNb2RlbE9iamVjdHMgPSBkYXRhTW9kZWxPYmplY3RzLnNsaWNlKDAsIHN0YXJ0aW5nSW5kZXgpO1xuXHRcdFx0dGFyZ2V0RW50aXR5U2V0TG9jYXRpb24uc3RhcnRpbmdFbnRpdHlTZXQgPSByb290RW50aXR5U2V0O1xuXHRcdFx0dGFyZ2V0RW50aXR5U2V0TG9jYXRpb24ubmF2aWdhdGlvblByb3BlcnRpZXMgPSByZXF1aXJlZERhdGFNb2RlbE9iamVjdHNcblx0XHRcdFx0LmZpbHRlcigob2JqZWN0OiBhbnkpID0+IG9iamVjdC5fdHlwZSA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIilcblx0XHRcdFx0LmNvbmNhdCh0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbi5uYXZpZ2F0aW9uUHJvcGVydGllcykgYXMgTmF2aWdhdGlvblByb3BlcnR5W107XG5cdFx0fVxuXHR9XG5cdGNvbnN0IG91dERhdGFNb2RlbFBhdGggPSB7XG5cdFx0c3RhcnRpbmdFbnRpdHlTZXQ6IHJvb3RFbnRpdHlTZXQsXG5cdFx0dGFyZ2V0RW50aXR5U2V0OiBjdXJyZW50RW50aXR5U2V0LFxuXHRcdHRhcmdldEVudGl0eVR5cGU6IGN1cnJlbnRFbnRpdHlUeXBlLFxuXHRcdHRhcmdldE9iamVjdDogbWV0YU1vZGVsQ29udGV4dC50YXJnZXQsXG5cdFx0bmF2aWdhdGlvblByb3BlcnRpZXMsXG5cdFx0Y29udGV4dExvY2F0aW9uOiB0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbixcblx0XHRjb252ZXJ0ZWRUeXBlczogY29udmVydGVkVHlwZXNcblx0fTtcblx0aWYgKCFvdXREYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdD8uaGFzT3duUHJvcGVydHkoXCJfdHlwZVwiKSAmJiBvbmx5U2VydmljZU9iamVjdHMpIHtcblx0XHRvdXREYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCA9IGN1cnJlbnRPYmplY3Q7XG5cdH1cblx0aWYgKCFvdXREYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbikge1xuXHRcdG91dERhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uID0gb3V0RGF0YU1vZGVsUGF0aDtcblx0fVxuXHRyZXR1cm4gb3V0RGF0YU1vZGVsUGF0aDtcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpQ0EsSUFBTUEsZ0JBQXFCLEdBQUc7SUFDN0IsNkJBQTZCLGNBREE7SUFFN0IscUJBQXFCLE1BRlE7SUFHN0IseUJBQXlCLFVBSEk7SUFJN0Isa0NBQWtDLFFBSkw7SUFLN0IsOEJBQThCLElBTEQ7SUFNN0IsbUNBQW1DLFNBTk47SUFPN0IscUNBQXFDLFdBUFI7SUFRN0Isd0NBQXdDLGNBUlg7SUFTN0IseUNBQXlDO0VBVFosQ0FBOUI7RUFvQk8sSUFBTUMsOEJBQThCLEdBQUc7SUFDN0NDLEtBQUssRUFBRSxJQURzQztJQUU3Q0MsVUFBVSxFQUFFLElBRmlDO0lBRzdDQyxNQUFNLEVBQUUsSUFIcUM7SUFJN0NDLHFCQUFxQixFQUFFLElBSnNCO0lBSzdDQyxRQUFRLEVBQUU7RUFMbUMsQ0FBdkM7OztFQTBCUCxTQUFTQyxrQkFBVCxDQUNDQyxnQkFERCxFQUVDQyxXQUZELEVBR0NDLGFBSEQsRUFJQ0MsZ0JBSkQsRUFLQ0MsYUFMRCxFQU1PO0lBQ04sSUFBSUMsS0FBSjtJQUNBLElBQU1DLHFCQUE2QixhQUFNSixhQUFOLGNBQXVCRCxXQUF2QixDQUFuQztJQUNBLElBQU1NLGdCQUFnQixHQUFHLE9BQU9QLGdCQUFoQzs7SUFDQSxJQUFJQSxnQkFBZ0IsS0FBSyxJQUF6QixFQUErQjtNQUM5QkssS0FBSyxHQUFHO1FBQUVHLElBQUksRUFBRSxNQUFSO1FBQWdCQyxJQUFJLEVBQUU7TUFBdEIs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
1228
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJWT0NBQlVMQVJZX0FMSUFTIiwiRGVmYXVsdEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiQ2hhcnQiLCJNaWNyb0NoYXJ0IiwiVVNoZWxsIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiQXBwU3RhdGUiLCJwYXJzZVByb3BlcnR5VmFsdWUiLCJhbm5vdGF0aW9uT2JqZWN0IiwicHJvcGVydHlLZXkiLCJjdXJyZW50VGFyZ2V0IiwiYW5ub3RhdGlvbnNMaXN0cyIsIm9DYXBhYmlsaXRpZXMiLCJ2YWx1ZSIsImN1cnJlbnRQcm9wZXJ0eVRhcmdldCIsInR5cGVPZkFubm90YXRpb24iLCJ0eXBlIiwiTnVsbCIsIlN0cmluZyIsIkJvb2wiLCJJbnQiLCJBcnJheSIsImlzQXJyYXkiLCJDb2xsZWN0aW9uIiwibWFwIiwic3ViQW5ub3RhdGlvbk9iamVjdCIsInN1YkFubm90YXRpb25PYmplY3RJbmRleCIsInBhcnNlQW5ub3RhdGlvbk9iamVjdCIsImxlbmd0aCIsImhhc093blByb3BlcnR5IiwiJFBhdGgiLCJ1bmRlZmluZWQiLCJQYXRoIiwiJERlY2ltYWwiLCJEZWNpbWFsIiwicGFyc2VGbG9hdCIsIiRQcm9wZXJ0eVBhdGgiLCJQcm9wZXJ0eVBhdGgiLCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aCIsIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCIkSWYiLCJJZiIsIiRBbmQiLCJBbmQiLCIkT3IiLCJPciIsIiROb3QiLCJOb3QiLCIkRXEiLCJFcSIsIiROZSIsIk5lIiwiJEd0IiwiR3QiLCIkR2UiLCJHZSIsIiRMdCIsIkx0IiwiJExlIiwiTGUiLCIkQXBwbHkiLCJBcHBseSIsIkZ1bmN0aW9uIiwiJEZ1bmN0aW9uIiwiJEFubm90YXRpb25QYXRoIiwiQW5ub3RhdGlvblBhdGgiLCIkRW51bU1lbWJlciIsIkVudW1NZW1iZXIiLCJtYXBOYW1lVG9BbGlhcyIsInNwbGl0IiwiJFR5cGUiLCJSZWNvcmQiLCJuYW1lIiwiYW5ub3RhdGlvbk5hbWUiLCJwYXRoUGFydCIsImFubm9QYXJ0IiwibGFzdERvdCIsImxhc3RJbmRleE9mIiwic3Vic3RyIiwiY3VycmVudE9iamVjdFRhcmdldCIsInBhcnNlZEFubm90YXRpb25PYmplY3QiLCJ0eXBlT2ZPYmplY3QiLCJwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbiIsImNvbGxlY3Rpb24iLCJzdWJBbm5vdGF0aW9uSW5kZXgiLCJ0eXBlVmFsdWUiLCJwcm9wZXJ0eVZhbHVlcyIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwic3RhcnRzV2l0aCIsInB1c2giLCJjcmVhdGVBbm5vdGF0aW9uTGlzdHMiLCJnZXRPckNyZWF0ZUFubm90YXRpb25MaXN0IiwidGFyZ2V0IiwiYW5ub3RhdGlvbnMiLCJjcmVhdGVSZWZlcmVuY2VGYWNldElkIiwicmVmZXJlbmNlRmFjZXQiLCJpZCIsIklEIiwiVGFyZ2V0IiwicHJlcGFyZUlkIiwicmVtb3ZlQ2hhcnRBbm5vdGF0aW9ucyIsImZpbHRlciIsIm9SZWNvcmQiLCJpbmRleE9mIiwicmVtb3ZlSUJOQW5ub3RhdGlvbnMiLCJoYW5kbGVQcmVzZW50YXRpb25WYXJpYW50IiwiYW5ub3RhdGlvbk9iamVjdHMiLCJhbm5vdGF0aW9uVGFyZ2V0IiwiYW5ub3RhdGlvbkxpc3RzIiwib3V0QW5ub3RhdGlvbk9iamVjdCIsImFubm90YXRpb25LZXkiLCJEYXRhIiwiVmlzdWFsaXphdGlvbnMiLCJjdXJyZW50T3V0QW5ub3RhdGlvbk9iamVjdCIsImFubm90YXRpb25PZkFubm90YXRpb25TcGxpdCIsImFubm90YXRpb25RdWFsaWZpZXJTcGxpdCIsInF1YWxpZmllciIsInRlcm0iLCJjdXJyZW50QW5ub3RhdGlvblRhcmdldCIsImlzQ29sbGVjdGlvbiIsInR5cGVvZkFubm90YXRpb24iLCJyZWNvcmQiLCJwcmVwYXJlUHJvcGVydHkiLCJwcm9wZXJ0eURlZmluaXRpb24iLCJlbnRpdHlUeXBlT2JqZWN0IiwicHJvcGVydHlOYW1lIiwicHJvcGVydHlPYmplY3QiLCJfdHlwZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsIm1heExlbmd0aCIsIiRNYXhMZW5ndGgiLCJwcmVjaXNpb24iLCIkUHJlY2lzaW9uIiwic2NhbGUiLCIkU2NhbGUiLCJudWxsYWJsZSIsIiROdWxsYWJsZSIsInByZXBhcmVOYXZpZ2F0aW9uUHJvcGVydHkiLCJuYXZQcm9wZXJ0eURlZmluaXRpb24iLCJuYXZQcm9wZXJ0eU5hbWUiLCJyZWZlcmVudGlhbENvbnN0cmFpbnQiLCIkUmVmZXJlbnRpYWxDb25zdHJhaW50Iiwic291cmNlUHJvcGVydHlOYW1lIiwic291cmNlVHlwZU5hbWUiLCJzb3VyY2VQcm9wZXJ0eSIsInRhcmdldFR5cGVOYW1lIiwidGFyZ2V0UHJvcGVydHkiLCJuYXZpZ2F0aW9uUHJvcGVydHkiLCJwYXJ0bmVyIiwiJFBhcnRuZXIiLCIkaXNDb2xsZWN0aW9uIiwiY29udGFpbnNUYXJnZXQiLCIkQ29udGFpbnNUYXJnZXQiLCJwcmVwYXJlRW50aXR5U2V0IiwiZW50aXR5U2V0RGVmaW5pdGlvbiIsImVudGl0eVNldE5hbWUiLCJlbnRpdHlDb250YWluZXJOYW1lIiwiZW50aXR5U2V0T2JqZWN0IiwibmF2aWdhdGlvblByb3BlcnR5QmluZGluZyIsImVudGl0eVR5cGVOYW1lIiwicHJlcGFyZVNpbmdsZXRvbiIsInNpbmdsZXRvbkRlZmluaXRpb24iLCJzaW5nbGV0b25OYW1lIiwicHJlcGFyZVR5cGVEZWZpbml0aW9uIiwidHlwZURlZmluaXRpb24iLCJ0eXBlTmFtZSIsIm5hbWVzcGFjZSIsInR5cGVPYmplY3QiLCJyZXBsYWNlIiwidW5kZXJseWluZ1R5cGUiLCIkVW5kZXJseWluZ1R5cGUiLCJwcmVwYXJlQ29tcGxleFR5cGUiLCJjb21wbGV4VHlwZURlZmluaXRpb24iLCJjb21wbGV4VHlwZU5hbWUiLCJjb21wbGV4VHlwZU9iamVjdCIsInByb3BlcnRpZXMiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsImNvbXBsZXhUeXBlUHJvcGVydGllcyIsInByb3BlcnR5TmFtZU9yTm90IiwiJGtpbmQiLCJzb3J0IiwiYSIsImIiLCJjb21wbGV4VHlwZU5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwicHJlcGFyZUVudGl0eUtleXMiLCJlbnRpdHlUeXBlRGVmaW5pdGlvbiIsIm9NZXRhTW9kZWxEYXRhIiwiJEtleSIsIiRCYXNlVHlwZSIsInByZXBhcmVFbnRpdHlUeXBlIiwibWV0YU1vZGVsRGF0YSIsImVudGl0eUtleXMiLCJlbnRpdHlQcm9wZXJ0aWVzIiwiYWN0aW9ucyIsImVudGl0eUtleSIsImZpbmQiLCJwcm9wZXJ0eSIsInByZXBhcmVBY3Rpb24iLCJhY3Rpb25OYW1lIiwiYWN0aW9uUmF3RGF0YSIsImFjdGlvbkVudGl0eVR5cGUiLCJhY3Rpb25GUU4iLCJhY3Rpb25TaG9ydE5hbWUiLCIkSXNCb3VuZCIsImJpbmRpbmdQYXJhbWV0ZXIiLCIkUGFyYW1ldGVyIiwicGFyYW1ldGVycyIsImlzQm91bmQiLCJpc0Z1bmN0aW9uIiwic291cmNlVHlwZSIsInJldHVyblR5cGUiLCIkUmV0dXJuVHlwZSIsInBhcmFtIiwiJE5hbWUiLCJwcmVwYXJlRW50aXR5VHlwZXMiLCJvTWV0YU1vZGVsIiwiZ2V0T2JqZWN0IiwiZW50aXR5VHlwZXMiLCJlbnRpdHlTZXRzIiwic2luZ2xldG9ucyIsImNvbXBsZXhUeXBlcyIsInR5cGVEZWZpbml0aW9ucyIsIiRFbnRpdHlDb250YWluZXIiLCJzY2hlbWFLZXlzIiwibWV0YW1vZGVsS2V5Iiwic09iamVjdE5hbWUiLCJlbnRpdHlUeXBlIiwiJEFubm90YXRpb25zIiwiZmlsdGVyRmFjZXRBbm5vdGF0aW9uIiwiZW50aXR5UHJvcGVydHkiLCJWYWx1ZSIsImNvbXBsZXhUeXBlIiwib0VudGl0eUNvbnRhaW5lciIsImVudGl0eVNldCIsInNpbmdsZXRvbiIsImVudGl0eUNvbnRhaW5lciIsIm5hdlByb3BlcnR5QmluZGluZ3MiLCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZyIsIm5hdlByb3BOYW1lIiwidGFyZ2V0RW50aXR5U2V0Iiwia2V5IiwicmVkdWNlIiwib3V0QWN0aW9ucyIsImlubmVyQWN0aW9ucyIsImFjdGlvbiIsIm91dEFubm90YXRpb25MaXN0cyIsInNBbm5vdGF0aW9uTmFtZSIsInJlZmVyZW5jZXMiLCJpZGVudGlmaWNhdGlvbiIsInZlcnNpb24iLCJzY2hlbWEiLCJhc3NvY2lhdGlvbnMiLCJhc3NvY2lhdGlvblNldHMiLCJhY3Rpb25JbXBvcnRzIiwibWV0YW1vZGVsUmVzdWx0IiwibU1ldGFNb2RlbE1hcCIsImNvbnZlcnRUeXBlcyIsInNNZXRhTW9kZWxJZCIsInBhcnNlZE91dHB1dCIsIkFubm90YXRpb25Db252ZXJ0ZXIiLCJjb252ZXJ0Iiwib0Vycm9yIiwiRXJyb3IiLCJnZXRDb252ZXJ0ZWRUeXBlcyIsIm9Db250ZXh0IiwiZ2V0TW9kZWwiLCJpc0EiLCJkZWxldGVNb2RlbENhY2hlRGF0YSIsImNvbnZlcnRNZXRhTW9kZWxDb250ZXh0Iiwib01ldGFNb2RlbENvbnRleHQiLCJiSW5jbHVkZVZpc2l0ZWRPYmplY3RzIiwib0NvbnZlcnRlZE1ldGFkYXRhIiwic1BhdGgiLCJnZXRQYXRoIiwiYVBhdGhTcGxpdCIsImZpcnN0UGFydCIsImJlZ2luSW5kZXgiLCJyZWxhdGl2ZVBhdGgiLCJzbGljZSIsImpvaW4iLCJsb2NhbE9iamVjdHMiLCJyZWxhdGl2ZVNwbGl0IiwiaWR4IiwiY3VycmVudEVudGl0eVNldCIsInNOYXZQcm9wVG9DaGVjayIsImFOYXZQcm9wcyIsInRhcmdldEVudGl0eVR5cGUiLCJzTmF2UHJvcCIsInRhcmdldE5hdlByb3AiLCJuYXZQcm9wIiwidGFyZ2V0VHlwZSIsInNoaWZ0Iiwib1RhcmdldCIsInJlc29sdmVQYXRoIiwidmlzaXRlZE9iamVjdHMiLCJjb25jYXQiLCJwYXJhbWV0ZXJOYW1lIiwicGFyYW1ldGVyIiwiZW5kc1dpdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJvRW50aXR5U2V0TWV0YU1vZGVsQ29udGV4dCIsIm1ldGFNb2RlbENvbnRleHQiLCJ0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbiIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0RnJvbVBhdGgiLCJjb252ZXJ0ZWRUeXBlcyIsIm9ubHlTZXJ2aWNlT2JqZWN0cyIsImRhdGFNb2RlbE9iamVjdHMiLCJ2aXNpdGVkT2JqZWN0Iiwicm9vdEVudGl0eVNldCIsImN1cnJlbnRFbnRpdHlUeXBlIiwiY3VycmVudE9iamVjdCIsIm5hdmlnYXRlZFBhdGgiLCJpIiwiYm91bmRFbnRpdHlTZXQiLCJzdGFydGluZ0VudGl0eVNldCIsInN0YXJ0aW5nSW5kZXgiLCJyZXF1aXJlZERhdGFNb2RlbE9iamVjdHMiLCJvYmplY3QiLCJvdXREYXRhTW9kZWxQYXRoIiwidGFyZ2V0T2JqZWN0IiwiY29udGV4dExvY2F0aW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNZXRhTW9kZWxDb252ZXJ0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBmaWxlIGlzIHJldHJpZXZlZCBmcm9tIEBzYXAtdXgvYW5ub3RhdGlvbi1jb252ZXJ0ZXIsIHNoYXJlZCBjb2RlIHdpdGggdG9vbCBzdWl0ZVxuXG5pbXBvcnQgdHlwZSB7XG5cdEFubm90YXRpb24sXG5cdEFubm90YXRpb25MaXN0LFxuXHRBbm5vdGF0aW9uUmVjb3JkLFxuXHRDb252ZXJ0ZWRNZXRhZGF0YSxcblx0RW50aXR5U2V0LFxuXHRFbnRpdHlUeXBlLFxuXHRFeHByZXNzaW9uLFxuXHROYXZpZ2F0aW9uUHJvcGVydHksXG5cdFByb3BlcnR5LFxuXHRSYXdBY3Rpb24sXG5cdFJhd0NvbXBsZXhUeXBlLFxuXHRSYXdFbnRpdHlDb250YWluZXIsXG5cdFJhd0VudGl0eVNldCxcblx0UmF3RW50aXR5VHlwZSxcblx0UmF3TWV0YWRhdGEsXG5cdFJhd1Byb3BlcnR5LFxuXHRSYXdTaW5nbGV0b24sXG5cdFJhd1R5cGVEZWZpbml0aW9uLFxuXHRSYXdWNE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0UmVmZXJlbmNlLFxuXHRSZWZlcmVudGlhbENvbnN0cmFpbnQsXG5cdFNlcnZpY2VPYmplY3QsXG5cdFNpbmdsZXRvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IEFubm90YXRpb25Db252ZXJ0ZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb21tb25cIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgeyBwcmVwYXJlSWQgfSBmcm9tIFwiLi4vaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuXG5jb25zdCBWT0NBQlVMQVJZX0FMSUFTOiBhbnkgPSB7XG5cdFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMVwiOiBcIkNhcGFiaWxpdGllc1wiLFxuXHRcIk9yZy5PRGF0YS5Db3JlLlYxXCI6IFwiQ29yZVwiLFxuXHRcIk9yZy5PRGF0YS5NZWFzdXJlcy5WMVwiOiBcIk1lYXN1cmVzXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxXCI6IFwiQ29tbW9uXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjFcIjogXCJVSVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlNlc3Npb24udjFcIjogXCJTZXNzaW9uXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxXCI6IFwiQW5hbHl0aWNzXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxXCI6IFwiUGVyc29uYWxEYXRhXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MVwiOiBcIkNvbW11bmljYXRpb25cIlxufTtcblxuZXhwb3J0IHR5cGUgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgPSB7XG5cdENoYXJ0OiBib29sZWFuO1xuXHRNaWNyb0NoYXJ0OiBib29sZWFuO1xuXHRVU2hlbGw6IGJvb2xlYW47XG5cdEludGVudEJhc2VkTmF2aWdhdGlvbjogYm9vbGVhbjtcblx0QXBwU3RhdGU6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgY29uc3QgRGVmYXVsdEVudmlyb25tZW50Q2FwYWJpbGl0aWVzID0ge1xuXHRDaGFydDogdHJ1ZSxcblx0TWljcm9DaGFydDogdHJ1ZSxcblx0VVNoZWxsOiB0cnVlLFxuXHRJbnRlbnRCYXNlZE5hdmlnYXRpb246IHRydWUsXG5cdEFwcFN0YXRlOiB0cnVlXG59O1xuXG50eXBlIE1ldGFNb2RlbEFjdGlvbiA9IHtcblx0JGtpbmQ6IFwiQWN0aW9uXCI7XG5cdCRJc0JvdW5kOiBib29sZWFuO1xuXHQkRW50aXR5U2V0UGF0aDogc3RyaW5nO1xuXHQkUGFyYW1ldGVyOiB7XG5cdFx0JFR5cGU6IHN0cmluZztcblx0XHQkTmFtZTogc3RyaW5nO1xuXHRcdCROdWxsYWJsZT86IGJvb2xlYW47XG5cdFx0JE1heExlbmd0aD86IG51bWJlcjtcblx0XHQkUHJlY2lzaW9uPzogbnVtYmVyO1xuXHRcdCRTY2FsZT86IG51bWJlcjtcblx0XHQkaXNDb2xsZWN0aW9uPzogYm9vbGVhbjtcblx0fVtdO1xuXHQkUmV0dXJuVHlwZToge1xuXHRcdCRUeXBlOiBzdHJpbmc7XG5cdH07XG59O1xuXG5mdW5jdGlvbiBwYXJzZVByb3BlcnR5VmFsdWUoXG5cdGFubm90YXRpb25PYmplY3Q6IGFueSxcblx0cHJvcGVydHlLZXk6IHN0cmluZyxcblx0Y3VycmVudFRhcmdldDogc3RyaW5nLFxuXHRhbm5vdGF0aW9uc0xpc3RzOiBSZWNvcmQ8c3RyaW5nLCBBbm5vdGF0aW9uTGlzdD4sXG5cdG9DYXBhYmlsaXRpZXM6IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzXG4pOiBhbnkge1xuXHRsZXQgdmFsdWU7XG5cdGNvbnN0IGN1cnJlbnRQcm9wZXJ0eVRhcmdldDogc3RyaW5nID0gYCR7Y3VycmVudFRhcmdldH0vJHtwcm9wZXJ0eUtleX1gO1xuXHRjb25zdCB0eXBlT2ZBbm5vdGF0aW9uID0gdHlwZW9mIGFubm90YXRpb25PYmplY3Q7XG5cdGlmIChhbm5vdGF0aW9uT2JqZWN0ID09PSBudWxsKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiTnVsbFwiLCBOdWxsOiBudWxsIH07XG5cdH0gZWxzZSBpZiAodHlwZU9mQW5ub3RhdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIlN0cmluZ1wiLCBTdHJpbmc6IGFubm90YXRpb25PYmplY3QgfTtcblx0fSBlbHNlIGlmICh0eXBlT2ZBbm5vdGF0aW9uID09PSBcImJvb2xlYW5cIikge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIkJvb2xcIiwgQm9vbDogYW5ub3RhdGlvbk9iamVjdCB9O1xuXHR9IGVsc2UgaWYgKHR5cGVPZkFubm90YXRpb24gPT09IFwibnVtYmVyXCIpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJJbnRcIiwgSW50OiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhbm5vdGF0aW9uT2JqZWN0KSkge1xuXHRcdHZhbHVlID0ge1xuXHRcdFx0dHlwZTogXCJDb2xsZWN0aW9uXCIsXG5cdFx0XHRDb2xsZWN0aW9uOiBhbm5vdGF0aW9uT2JqZWN0Lm1hcCgoc3ViQW5ub3RhdGlvbk9iamVjdCwgc3ViQW5ub3RhdGlvbk9iamVjdEluZGV4KSA9PlxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25PYmplY3QoXG5cdFx0XHRcdFx0c3ViQW5ub3RhdGlvbk9iamVjdCxcblx0XHRcdFx0XHRgJHtjdXJyZW50UHJvcGVydHlUYXJnZXR9LyR7c3ViQW5ub3RhdGlvbk9iamVjdEluZGV4fWAsXG5cdFx0XHRcdFx0YW5ub3RhdGlvbnNMaXN0cyxcblx0XHRcdFx0XHRvQ2FwYWJpbGl0aWVzXG5cdFx0XHRcdClcblx0XHRcdClcblx0XHR9O1xuXHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFByb3BlcnR5UGF0aFwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIlByb3BlcnR5UGF0aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFBhdGhcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJQYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBbm5vdGF0aW9uUGF0aFwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIkFubm90YXRpb25QYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkVHlwZVwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJElmXCIpKSB7XG5cdFx0XHRcdCh2YWx1ZS5Db2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiSWZcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRPclwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIk9yXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkQW5kXCIpKSB7XG5cdFx0XHRcdCh2YWx1ZS5Db2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiQW5kXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkRXFcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJFcVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE5lXCIpKSB7XG5cdFx0XHRcdCh2YWx1ZS5Db2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiTmVcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiROb3RcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJOb3RcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRHdFwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIkd0XCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkR2VcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJHZVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEx0XCIpKSB7XG5cdFx0XHRcdCh2YWx1ZS5Db2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiTHRcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRMZVwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIkxlXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkQXBwbHlcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJBcHBseVwiO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgYW5ub3RhdGlvbk9iamVjdFswXSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHQvLyAkVHlwZSBpcyBvcHRpb25hbC4uLlxuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJTdHJpbmdcIjtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiUGF0aFwiLCBQYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiRQYXRoIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRGVjaW1hbCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiRGVjaW1hbFwiLCBEZWNpbWFsOiBwYXJzZUZsb2F0KGFubm90YXRpb25PYmplY3QuJERlY2ltYWwpIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kUHJvcGVydHlQYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJQcm9wZXJ0eVBhdGhcIiwgUHJvcGVydHlQYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiRQcm9wZXJ0eVBhdGggfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YWx1ZSA9IHtcblx0XHRcdHR5cGU6IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiLFxuXHRcdFx0TmF2aWdhdGlvblByb3BlcnR5UGF0aDogYW5ub3RhdGlvbk9iamVjdC4kTmF2aWdhdGlvblByb3BlcnR5UGF0aFxuXHRcdH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kSWYgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIklmXCIsIElmOiBhbm5vdGF0aW9uT2JqZWN0LiRJZiB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEFuZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiQW5kXCIsIEFuZDogYW5ub3RhdGlvbk9iamVjdC4kQW5kIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kT3IgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIk9yXCIsIE9yOiBhbm5vdGF0aW9uT2JqZWN0LiRPciB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5vdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiTm90XCIsIE5vdDogYW5ub3RhdGlvbk9iamVjdC4kTm90IH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRXEgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIkVxXCIsIEVxOiBhbm5vdGF0aW9uT2JqZWN0LiRFcSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5lICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJOZVwiLCBOZTogYW5ub3RhdGlvbk9iamVjdC4kTmUgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRHdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiR3RcIiwgR3Q6IGFubm90YXRpb25PYmplY3QuJEd0IH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kR2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIkdlXCIsIEdlOiBhbm5vdGF0aW9uT2JqZWN0LiRHZSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEx0ICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJMdFwiLCBMdDogYW5ub3RhdGlvbk9iamVjdC4kTHQgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRMZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiTGVcIiwgTGU6IGFubm90YXRpb25PYmplY3QuJExlIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQXBwbHkgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIkFwcGx5XCIsIEFwcGx5OiBhbm5vdGF0aW9uT2JqZWN0LiRBcHBseSwgRnVuY3Rpb246IGFubm90YXRpb25PYmplY3QuJEZ1bmN0aW9uIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQW5ub3RhdGlvblBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIkFubm90YXRpb25QYXRoXCIsIEFubm90YXRpb25QYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiRBbm5vdGF0aW9uUGF0aCB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEVudW1NZW1iZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0ge1xuXHRcdFx0dHlwZTogXCJFbnVtTWVtYmVyXCIsXG5cdFx0XHRFbnVtTWVtYmVyOiBgJHttYXBOYW1lVG9BbGlhcyhhbm5vdGF0aW9uT2JqZWN0LiRFbnVtTWVtYmVyLnNwbGl0KFwiL1wiKVswXSl9LyR7YW5ub3RhdGlvbk9iamVjdC4kRW51bU1lbWJlci5zcGxpdChcIi9cIilbMV19YFxuXHRcdH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kVHlwZSkge1xuXHRcdHZhbHVlID0ge1xuXHRcdFx0dHlwZTogXCJSZWNvcmRcIixcblx0XHRcdFJlY29yZDogcGFyc2VBbm5vdGF0aW9uT2JqZWN0KGFubm90YXRpb25PYmplY3QsIGN1cnJlbnRUYXJnZXQsIGFubm90YXRpb25zTGlzdHMsIG9DYXBhYmlsaXRpZXMpXG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHR2YWx1ZSA9IHtcblx0XHRcdHR5cGU6IFwiUmVjb3JkXCIsXG5cdFx0XHRSZWNvcmQ6IHBhcnNlQW5ub3RhdGlvbk9iamVjdChhbm5vdGF0aW9uT2JqZWN0LCBjdXJyZW50VGFyZ2V0LCBhbm5vdGF0aW9uc0xpc3RzLCBvQ2FwYWJpbGl0aWVzKVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdG5hbWU6IHByb3BlcnR5S2V5LFxuXHRcdHZhbHVlXG5cdH07XG59XG5mdW5jdGlvbiBtYXBOYW1lVG9BbGlhcyhhbm5vdGF0aW9uTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblx0bGV0IFtwYXRoUGFydCwgYW5ub1BhcnRdID0gYW5ub3RhdGlvbk5hbWUuc3BsaXQoXCJAXCIpO1xuXHRpZiAoIWFubm9QYXJ0KSB7XG5cdFx0YW5ub1BhcnQgPSBwYXRoUGFydDtcblx0XHRwYXRoUGFydCA9IFwiXCI7XG5cdH0gZWxzZSB7XG5cdFx0cGF0aFBhcnQgKz0gXCJAXCI7XG5cdH1cblx0Y29uc3QgbGFzdERvdCA9IGFubm9QYXJ0Lmxhc3RJbmRleE9mKFwiLlwiKTtcblx0cmV0dXJuIGAke3BhdGhQYXJ0ICsgVk9DQUJVTEFSWV9BTElBU1thbm5vUGFydC5zdWJzdHIoMCwgbGFzdERvdCldfS4ke2Fubm9QYXJ0LnN1YnN0cihsYXN0RG90ICsgMSl9YDtcbn1cbmZ1bmN0aW9uIHBhcnNlQW5ub3RhdGlvbk9iamVjdChcblx0YW5ub3RhdGlvbk9iamVjdDogYW55LFxuXHRjdXJyZW50T2JqZWN0VGFyZ2V0OiBzdHJpbmcsXG5cdGFubm90YXRpb25zTGlzdHM6IFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25MaXN0Pixcblx0b0NhcGFiaWxpdGllczogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcbik6IEV4cHJlc3Npb24gfCBBbm5vdGF0aW9uUmVjb3JkIHwgQW5ub3RhdGlvbiB7XG5cdGxldCBwYXJzZWRBbm5vdGF0aW9uT2JqZWN0OiBhbnkgPSB7fTtcblx0Y29uc3QgdHlwZU9mT2JqZWN0ID0gdHlwZW9mIGFubm90YXRpb25PYmplY3Q7XG5cdGlmIChhbm5vdGF0aW9uT2JqZWN0ID09PSBudWxsKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJOdWxsXCIsIE51bGw6IG51bGwgfTtcblx0fSBlbHNlIGlmICh0eXBlT2ZPYmplY3QgPT09IFwic3RyaW5nXCIpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIlN0cmluZ1wiLCBTdHJpbmc6IGFubm90YXRpb25PYmplY3QgfTtcblx0fSBlbHNlIGlmICh0eXBlT2ZPYmplY3QgPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJCb29sXCIsIEJvb2w6IGFubm90YXRpb25PYmplY3QgfTtcblx0fSBlbHNlIGlmICh0eXBlT2ZPYmplY3QgPT09IFwibnVtYmVyXCIpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkludFwiLCBJbnQ6IGFubm90YXRpb25PYmplY3QgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRBbm5vdGF0aW9uUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJBbm5vdGF0aW9uUGF0aFwiLCBBbm5vdGF0aW9uUGF0aDogYW5ub3RhdGlvbk9iamVjdC4kQW5ub3RhdGlvblBhdGggfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRQYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIlBhdGhcIiwgUGF0aDogYW5ub3RhdGlvbk9iamVjdC4kUGF0aCB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJERlY2ltYWwgIT09IHVuZGVmaW5lZCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiRGVjaW1hbFwiLCBEZWNpbWFsOiBwYXJzZUZsb2F0KGFubm90YXRpb25PYmplY3QuJERlY2ltYWwpIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kUHJvcGVydHlQYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIlByb3BlcnR5UGF0aFwiLCBQcm9wZXJ0eVBhdGg6IGFubm90YXRpb25PYmplY3QuJFByb3BlcnR5UGF0aCB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJElmICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIklmXCIsIElmOiBhbm5vdGF0aW9uT2JqZWN0LiRJZiB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEFuZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJBbmRcIiwgQW5kOiBhbm5vdGF0aW9uT2JqZWN0LiRBbmQgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRPciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJPclwiLCBPcjogYW5ub3RhdGlvbk9iamVjdC4kT3IgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiROb3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiTm90XCIsIE5vdDogYW5ub3RhdGlvbk9iamVjdC4kTm90IH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRXEgIT09IHVuZGVmaW5lZCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiRXFcIiwgRXE6IGFubm90YXRpb25PYmplY3QuJEVxIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTmUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiTmVcIiwgTmU6IGFubm90YXRpb25PYmplY3QuJE5lIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kR3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiR3RcIiwgR3Q6IGFubm90YXRpb25PYmplY3QuJEd0IH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kR2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiR2VcIiwgR2U6IGFubm90YXRpb25PYmplY3QuJEdlIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTHQgIT09IHVuZGVmaW5lZCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiTHRcIiwgTHQ6IGFubm90YXRpb25PYmplY3QuJEx0IH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiTGVcIiwgTGU6IGFubm90YXRpb25PYmplY3QuJExlIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQXBwbHkgIT09IHVuZGVmaW5lZCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiQXBwbHlcIiwgQXBwbHk6IGFubm90YXRpb25PYmplY3QuJEFwcGx5LCBGdW5jdGlvbjogYW5ub3RhdGlvbk9iamVjdC4kRnVuY3Rpb24gfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0ge1xuXHRcdFx0dHlwZTogXCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCIsXG5cdFx0XHROYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoXG5cdFx0fTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRFbnVtTWVtYmVyICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0ge1xuXHRcdFx0dHlwZTogXCJFbnVtTWVtYmVyXCIsXG5cdFx0XHRFbnVtTWVtYmVyOiBgJHttYXBOYW1lVG9BbGlhcyhhbm5vdGF0aW9uT2JqZWN0LiRFbnVtTWVtYmVyLnNwbGl0KFwiL1wiKVswXSl9LyR7YW5ub3RhdGlvbk9iamVjdC4kRW51bU1lbWJlci5zcGxpdChcIi9cIilbMV19YFxuXHRcdH07XG5cdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhbm5vdGF0aW9uT2JqZWN0KSkge1xuXHRcdGNvbnN0IHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uID0gcGFyc2VkQW5ub3RhdGlvbk9iamVjdDtcblx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uID0gYW5ub3RhdGlvbk9iamVjdC5tYXAoKHN1YkFubm90YXRpb25PYmplY3QsIHN1YkFubm90YXRpb25JbmRleCkgPT5cblx0XHRcdHBhcnNlQW5ub3RhdGlvbk9iamVjdChzdWJBbm5vdGF0aW9uT2JqZWN0LCBgJHtjdXJyZW50T2JqZWN0VGFyZ2V0fS8ke3N1YkFubm90YXRpb25JbmRleH1gLCBhbm5vdGF0aW9uc0xpc3RzLCBvQ2FwYWJpbGl0aWVzKVxuXHRcdCk7XG5cdFx0aWYgKGFubm90YXRpb25PYmplY3QubGVuZ3RoID4gMCkge1xuXHRcdFx0aWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkUHJvcGVydHlQYXRoXCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiUHJvcGVydHlQYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkUGF0aFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIlBhdGhcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEFubm90YXRpb25QYXRoXCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiQW5ub3RhdGlvblBhdGhcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRUeXBlXCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiUmVjb3JkXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkSWZcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJJZlwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEFuZFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIkFuZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE9yXCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiT3JcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRFcVwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIkVxXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTmVcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJOZVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE5vdFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIk5vdFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEd0XCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiR3RcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRHZVwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIkdlXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTHRcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJMdFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJExlXCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiTGVcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBcHBseVwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIkFwcGx5XCI7XG5cdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBhbm5vdGF0aW9uT2JqZWN0WzBdID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiUmVjb3JkXCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIlN0cmluZ1wiO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdC4kVHlwZSkge1xuXHRcdFx0Y29uc3QgdHlwZVZhbHVlID0gYW5ub3RhdGlvbk9iamVjdC4kVHlwZTtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudHlwZSA9IHR5cGVWYWx1ZTsgLy9gJHt0eXBlQWxpYXN9LiR7dHlwZVRlcm19YDtcblx0XHR9XG5cdFx0Y29uc3QgcHJvcGVydHlWYWx1ZXM6IGFueSA9IFtdO1xuXHRcdE9iamVjdC5rZXlzKGFubm90YXRpb25PYmplY3QpLmZvckVhY2goKHByb3BlcnR5S2V5KSA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRUeXBlXCIgJiZcblx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJElmXCIgJiZcblx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJEFwcGx5XCIgJiZcblx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJEFuZFwiICYmXG5cdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRPclwiICYmXG5cdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiROZVwiICYmXG5cdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRHdFwiICYmXG5cdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRHZVwiICYmXG5cdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRMdFwiICYmXG5cdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRMZVwiICYmXG5cdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiROb3RcIiAmJlxuXHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkRXFcIiAmJlxuXHRcdFx0XHQhcHJvcGVydHlLZXkuc3RhcnRzV2l0aChcIkBcIilcblx0XHRcdCkge1xuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlcy5wdXNoKFxuXHRcdFx0XHRcdHBhcnNlUHJvcGVydHlWYWx1ZShhbm5vdGF0aW9uT2JqZWN0W3Byb3BlcnR5S2V5XSwgcHJvcGVydHlLZXksIGN1cnJlbnRPYmplY3RUYXJnZXQsIGFubm90YXRpb25zTGlzdHMsIG9DYXBhYmlsaXRpZXMpXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2UgaWYgKHByb3BlcnR5S2V5LnN0YXJ0c1dpdGgoXCJAXCIpKSB7XG5cdFx0XHRcdC8vIEFubm90YXRpb24gb2YgYW5ub3RhdGlvblxuXHRcdFx0XHRjcmVhdGVBbm5vdGF0aW9uTGlzdHMoXG5cdFx0XHRcdFx0eyBbcHJvcGVydHlLZXldOiBhbm5vdGF0aW9uT2JqZWN0W3Byb3BlcnR5S2V5XSB9LFxuXHRcdFx0XHRcdGN1cnJlbnRPYmplY3RUYXJnZXQsXG5cdFx0XHRcdFx0YW5ub3RhdGlvbnNMaXN0cyxcblx0XHRcdFx0XHRvQ2FwYWJpbGl0aWVzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5wcm9wZXJ0eVZhbHVlcyA9IHByb3BlcnR5VmFsdWVzO1xuXHR9XG5cdHJldHVybiBwYXJzZWRBbm5vdGF0aW9uT2JqZWN0O1xufVxuZnVuY3Rpb24gZ2V0T3JDcmVhdGVBbm5vdGF0aW9uTGlzdCh0YXJnZXQ6IHN0cmluZywgYW5ub3RhdGlvbnNMaXN0czogUmVjb3JkPHN0cmluZywgQW5ub3RhdGlvbkxpc3Q+KTogQW5ub3RhdGlvbkxpc3Qge1xuXHRpZiAoIWFubm90YXRpb25zTGlzdHMuaGFzT3duUHJvcGVydHkodGFyZ2V0KSkge1xuXHRcdGFubm90YXRpb25zTGlzdHNbdGFyZ2V0XSA9IHtcblx0XHRcdHRhcmdldDogdGFyZ2V0LFxuXHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gYW5ub3RhdGlvbnNMaXN0c1t0YXJnZXRdO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSZWZlcmVuY2VGYWNldElkKHJlZmVyZW5jZUZhY2V0OiBhbnkpIHtcblx0Y29uc3QgaWQgPSByZWZlcmVuY2VGYWNldC5JRCA/PyByZWZlcmVuY2VGYWNldC5UYXJnZXQuJEFubm90YXRpb25QYXRoO1xuXHRyZXR1cm4gaWQgPyBwcmVwYXJlSWQoaWQpIDogaWQ7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNoYXJ0QW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdDogYW55KSB7XG5cdHJldHVybiBhbm5vdGF0aW9uT2JqZWN0LmZpbHRlcigob1JlY29yZDogYW55KSA9PiB7XG5cdFx0aWYgKG9SZWNvcmQuVGFyZ2V0ICYmIG9SZWNvcmQuVGFyZ2V0LiRBbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0cmV0dXJuIG9SZWNvcmQuVGFyZ2V0LiRBbm5vdGF0aW9uUGF0aC5pbmRleE9mKFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCIpID09PSAtMTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlSUJOQW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdDogYW55KSB7XG5cdHJldHVybiBhbm5vdGF0aW9uT2JqZWN0LmZpbHRlcigob1JlY29yZDogYW55KSA9PiB7XG5cdFx0cmV0dXJuIG9SZWNvcmQuJFR5cGUgIT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVQcmVzZW50YXRpb25WYXJpYW50KGFubm90YXRpb25PYmplY3Q6IGFueSkge1xuXHRyZXR1cm4gYW5ub3RhdGlvbk9iamVjdC5maWx0ZXIoKG9SZWNvcmQ6IGFueSkgPT4ge1xuXHRcdHJldHVybiBvUmVjb3JkLiRBbm5vdGF0aW9uUGF0aCAhPT0gXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnRcIjtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFubm90YXRpb25MaXN0cyhcblx0YW5ub3RhdGlvbk9iamVjdHM6IGFueSxcblx0YW5ub3RhdGlvblRhcmdldDogc3RyaW5nLFxuXHRhbm5vdGF0aW9uTGlzdHM6IFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25MaXN0Pixcblx0b0NhcGFiaWxpdGllczogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcbikge1xuXHRpZiAoT2JqZWN0LmtleXMoYW5ub3RhdGlvbk9iamVjdHMpLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybjtcblx0fVxuXHRjb25zdCBvdXRBbm5vdGF0aW9uT2JqZWN0ID0gZ2V0T3JDcmVhdGVBbm5vdGF0aW9uTGlzdChhbm5vdGF0aW9uVGFyZ2V0LCBhbm5vdGF0aW9uTGlzdHMpO1xuXHRpZiAoIW9DYXBhYmlsaXRpZXMuTWljcm9DaGFydCkge1xuXHRcdGRlbGV0ZSBhbm5vdGF0aW9uT2JqZWN0c1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydFwiXTtcblx0fVxuXG5cdGZvciAobGV0IGFubm90YXRpb25LZXkgaW4gYW5ub3RhdGlvbk9iamVjdHMpIHtcblx0XHRsZXQgYW5ub3RhdGlvbk9iamVjdCA9IGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldO1xuXHRcdHN3aXRjaCAoYW5ub3RhdGlvbktleSkge1xuXHRcdFx0Y2FzZSBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJGYWNldHNcIjpcblx0XHRcdFx0aWYgKCFvQ2FwYWJpbGl0aWVzLk1pY3JvQ2hhcnQpIHtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0ID0gcmVtb3ZlQ2hhcnRBbm5vdGF0aW9ucyhhbm5vdGF0aW9uT2JqZWN0KTtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0c1thbm5vdGF0aW9uS2V5XSA9IGFubm90YXRpb25PYmplY3Q7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLklkZW50aWZpY2F0aW9uXCI6XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5JbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0ID0gcmVtb3ZlSUJOQW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdCk7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdHNbYW5ub3RhdGlvbktleV0gPSBhbm5vdGF0aW9uT2JqZWN0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5MaW5lSXRlbVwiOlxuXHRcdFx0XHRpZiAoIW9DYXBhYmlsaXRpZXMuSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdCA9IHJlbW92ZUlCTkFubm90YXRpb25zKGFubm90YXRpb25PYmplY3QpO1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldID0gYW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIW9DYXBhYmlsaXRpZXMuTWljcm9DaGFydCkge1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3QgPSByZW1vdmVDaGFydEFubm90YXRpb25zKGFubm90YXRpb25PYmplY3QpO1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldID0gYW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmllbGRHcm91cFwiOlxuXHRcdFx0XHRpZiAoIW9DYXBhYmlsaXRpZXMuSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdC5EYXRhID0gcmVtb3ZlSUJOQW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdC5EYXRhKTtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0c1thbm5vdGF0aW9uS2V5XSA9IGFubm90YXRpb25PYmplY3Q7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFvQ2FwYWJpbGl0aWVzLk1pY3JvQ2hhcnQpIHtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0LkRhdGEgPSByZW1vdmVDaGFydEFubm90YXRpb25zKGFubm90YXRpb25PYmplY3QuRGF0YSk7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdHNbYW5ub3RhdGlvbktleV0gPSBhbm5vdGF0aW9uT2JqZWN0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5QcmVzZW50YXRpb25WYXJpYW50XCI6XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5DaGFydCAmJiBhbm5vdGF0aW9uT2JqZWN0LlZpc3VhbGl6YXRpb25zKSB7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdC5WaXN1YWxpemF0aW9ucyA9IGhhbmRsZVByZXNlbnRhdGlvblZhcmlhbnQoYW5ub3RhdGlvbk9iamVjdC5WaXN1YWxpemF0aW9ucyk7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdHNbYW5ub3RhdGlvbktleV0gPSBhbm5vdGF0aW9uT2JqZWN0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0bGV0IGN1cnJlbnRPdXRBbm5vdGF0aW9uT2JqZWN0ID0gb3V0QW5ub3RhdGlvbk9iamVjdDtcblxuXHRcdC8vIENoZWNrIGZvciBhbm5vdGF0aW9uIG9mIGFubm90YXRpb25cblx0XHRjb25zdCBhbm5vdGF0aW9uT2ZBbm5vdGF0aW9uU3BsaXQgPSBhbm5vdGF0aW9uS2V5LnNwbGl0KFwiQFwiKTtcblx0XHRpZiAoYW5ub3RhdGlvbk9mQW5ub3RhdGlvblNwbGl0Lmxlbmd0aCA+IDIpIHtcblx0XHRcdGN1cnJlbnRPdXRBbm5vdGF0aW9uT2JqZWN0ID0gZ2V0T3JDcmVhdGVBbm5vdGF0aW9uTGlzdChcblx0XHRcdFx0YCR7YW5ub3RhdGlvblRhcmdldH1AJHthbm5vdGF0aW9uT2ZBbm5vdGF0aW9uU3BsaXRbMV19YCxcblx0XHRcdFx0YW5ub3RhdGlvbkxpc3RzXG5cdFx0XHQpO1xuXHRcdFx0YW5ub3RhdGlvbktleSA9IGFubm90YXRpb25PZkFubm90YXRpb25TcGxpdFsyXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YW5ub3RhdGlvbktleSA9IGFubm90YXRpb25PZkFubm90YXRpb25TcGxpdFsxXTtcblx0XHR9XG5cblx0XHRjb25zdCBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXQgPSBhbm5vdGF0aW9uS2V5LnNwbGl0KFwiI1wiKTtcblx0XHRjb25zdCBxdWFsaWZpZXIgPSBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXRbMV07XG5cdFx0YW5ub3RhdGlvbktleSA9IGFubm90YXRpb25RdWFsaWZpZXJTcGxpdFswXTtcblxuXHRcdGNvbnN0IHBhcnNlZEFubm90YXRpb25PYmplY3Q6IGFueSA9IHtcblx0XHRcdHRlcm06IGAke2Fubm90YXRpb25LZXl9YCxcblx0XHRcdHF1YWxpZmllcjogcXVhbGlmaWVyXG5cdFx0fTtcblx0XHRsZXQgY3VycmVudEFubm90YXRpb25UYXJnZXQgPSBgJHthbm5vdGF0aW9uVGFyZ2V0fUAke3BhcnNlZEFubm90YXRpb25PYmplY3QudGVybX1gO1xuXHRcdGlmIChxdWFsaWZpZXIpIHtcblx0XHRcdGN1cnJlbnRBbm5vdGF0aW9uVGFyZ2V0ICs9IGAjJHtxdWFsaWZpZXJ9YDtcblx0XHR9XG5cdFx0bGV0IGlzQ29sbGVjdGlvbiA9IGZhbHNlO1xuXHRcdGNvbnN0IHR5cGVvZkFubm90YXRpb24gPSB0eXBlb2YgYW5ub3RhdGlvbk9iamVjdDtcblx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdCA9PT0gbnVsbCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJCb29sXCIsIEJvb2w6IGFubm90YXRpb25PYmplY3QgfTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZkFubm90YXRpb24gPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiU3RyaW5nXCIsIFN0cmluZzogYW5ub3RhdGlvbk9iamVjdCB9O1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mQW5ub3RhdGlvbiA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiQm9vbFwiLCBCb29sOiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdFx0fSBlbHNlIGlmICh0eXBlb2ZBbm5vdGF0aW9uID09PSBcIm51bWJlclwiKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIkludFwiLCBJbnQ6IGFubm90YXRpb25PYmplY3QgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJElmICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiSWZcIiwgSWY6IGFubm90YXRpb25PYmplY3QuJElmIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRBbmQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJBbmRcIiwgQW5kOiBhbm5vdGF0aW9uT2JqZWN0LiRBbmQgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE9yICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiT3JcIiwgT3I6IGFubm90YXRpb25PYmplY3QuJE9yIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiROb3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJOb3RcIiwgTm90OiBhbm5vdGF0aW9uT2JqZWN0LiROb3QgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEVxICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiRXFcIiwgRXE6IGFubm90YXRpb25PYmplY3QuJEVxIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiROZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIk5lXCIsIE5lOiBhbm5vdGF0aW9uT2JqZWN0LiROZSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kR3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJHdFwiLCBHdDogYW5ub3RhdGlvbk9iamVjdC4kR3QgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEdlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiR2VcIiwgR2U6IGFubm90YXRpb25PYmplY3QuJEdlIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRMdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIkx0XCIsIEx0OiBhbm5vdGF0aW9uT2JqZWN0LiRMdCB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJMZVwiLCBMZTogYW5ub3RhdGlvbk9iamVjdC4kTGUgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEFwcGx5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiQXBwbHlcIiwgQXBwbHk6IGFubm90YXRpb25PYmplY3QuJEFwcGx5LCBGdW5jdGlvbjogYW5ub3RhdGlvbk9iamVjdC4kRnVuY3Rpb24gfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJFBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJQYXRoXCIsIFBhdGg6IGFubm90YXRpb25PYmplY3QuJFBhdGggfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEFubm90YXRpb25QYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7XG5cdFx0XHRcdHR5cGU6IFwiQW5ub3RhdGlvblBhdGhcIixcblx0XHRcdFx0QW5ub3RhdGlvblBhdGg6IGFubm90YXRpb25PYmplY3QuJEFubm90YXRpb25QYXRoXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRGVjaW1hbCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIkRlY2ltYWxcIiwgRGVjaW1hbDogcGFyc2VGbG9hdChhbm5vdGF0aW9uT2JqZWN0LiREZWNpbWFsKSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRW51bU1lbWJlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0ge1xuXHRcdFx0XHR0eXBlOiBcIkVudW1NZW1iZXJcIixcblx0XHRcdFx0RW51bU1lbWJlcjogYCR7bWFwTmFtZVRvQWxpYXMoYW5ub3RhdGlvbk9iamVjdC4kRW51bU1lbWJlci5zcGxpdChcIi9cIilbMF0pfS8ke2Fubm90YXRpb25PYmplY3QuJEVudW1NZW1iZXIuc3BsaXQoXCIvXCIpWzFdfWBcblx0XHRcdH07XG5cdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFubm90YXRpb25PYmplY3QpKSB7XG5cdFx0XHRpc0NvbGxlY3Rpb24gPSB0cnVlO1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uID0gYW5ub3RhdGlvbk9iamVjdC5tYXAoKHN1YkFubm90YXRpb25PYmplY3QsIHN1YkFubm90YXRpb25JbmRleCkgPT5cblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uT2JqZWN0KFxuXHRcdFx0XHRcdHN1YkFubm90YXRpb25PYmplY3QsXG5cdFx0XHRcdFx0YCR7Y3VycmVudEFubm90YXRpb25UYXJnZXR9LyR7c3ViQW5ub3RhdGlvbkluZGV4fWAsXG5cdFx0XHRcdFx0YW5ub3RhdGlvbkxpc3RzLFxuXHRcdFx0XHRcdG9DYXBhYmlsaXRpZXNcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0aWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkUHJvcGVydHlQYXRoXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIlByb3BlcnR5UGF0aFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkUGF0aFwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJQYXRoXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEFubm90YXRpb25QYXRoXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkFubm90YXRpb25QYXRoXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRUeXBlXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkSWZcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiSWZcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE9yXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIk9yXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRFcVwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJFcVwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTmVcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiTmVcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE5vdFwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJOb3RcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEd0XCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkd0XCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRHZVwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJHZVwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTHRcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiTHRcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJExlXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkxlXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBbmRcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiQW5kXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBcHBseVwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJBcHBseVwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBhbm5vdGF0aW9uT2JqZWN0WzBdID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJTdHJpbmdcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCByZWNvcmQ6IEFubm90YXRpb25SZWNvcmQgPSB7XG5cdFx0XHRcdHByb3BlcnR5VmFsdWVzOiBbXVxuXHRcdFx0fTtcblx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0LiRUeXBlKSB7XG5cdFx0XHRcdGNvbnN0IHR5cGVWYWx1ZSA9IGFubm90YXRpb25PYmplY3QuJFR5cGU7XG5cdFx0XHRcdHJlY29yZC50eXBlID0gYCR7dHlwZVZhbHVlfWA7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVZhbHVlczogYW55W10gPSBbXTtcblx0XHRcdGZvciAoY29uc3QgcHJvcGVydHlLZXkgaW4gYW5ub3RhdGlvbk9iamVjdCkge1xuXHRcdFx0XHRpZiAocHJvcGVydHlLZXkgIT09IFwiJFR5cGVcIiAmJiAhcHJvcGVydHlLZXkuc3RhcnRzV2l0aChcIkBcIikpIHtcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlcy5wdXNoKFxuXHRcdFx0XHRcdFx0cGFyc2VQcm9wZXJ0eVZhbHVlKFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0W3Byb3BlcnR5S2V5XSxcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlLZXksXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRBbm5vdGF0aW9uVGFyZ2V0LFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uTGlzdHMsXG5cdFx0XHRcdFx0XHRcdG9DYXBhYmlsaXRpZXNcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHByb3BlcnR5S2V5LnN0YXJ0c1dpdGgoXCJAXCIpKSB7XG5cdFx0XHRcdFx0Ly8gQW5ub3RhdGlvbiBvZiByZWNvcmRcblx0XHRcdFx0XHRjcmVhdGVBbm5vdGF0aW9uTGlzdHMoXG5cdFx0XHRcdFx0XHR7IFtwcm9wZXJ0eUtleV06IGFubm90YXRpb25PYmplY3RbcHJvcGVydHlLZXldIH0sXG5cdFx0XHRcdFx0XHRjdXJyZW50QW5ub3RhdGlvblRhcmdldCxcblx0XHRcdFx0XHRcdGFubm90YXRpb25MaXN0cyxcblx0XHRcdFx0XHRcdG9DYXBhYmlsaXRpZXNcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZWNvcmQucHJvcGVydHlWYWx1ZXMgPSBwcm9wZXJ0eVZhbHVlcztcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QucmVjb3JkID0gcmVjb3JkO1xuXHRcdH1cblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmlzQ29sbGVjdGlvbiA9IGlzQ29sbGVjdGlvbjtcblx0XHRjdXJyZW50T3V0QW5ub3RhdGlvbk9iamVjdC5hbm5vdGF0aW9ucy5wdXNoKHBhcnNlZEFubm90YXRpb25PYmplY3QpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVQcm9wZXJ0eShwcm9wZXJ0eURlZmluaXRpb246IGFueSwgZW50aXR5VHlwZU9iamVjdDogUmF3RW50aXR5VHlwZSB8IFJhd0NvbXBsZXhUeXBlLCBwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IFJhd1Byb3BlcnR5IHtcblx0Y29uc3QgcHJvcGVydHlPYmplY3Q6IFJhd1Byb3BlcnR5ID0ge1xuXHRcdF90eXBlOiBcIlByb3BlcnR5XCIsXG5cdFx0bmFtZTogcHJvcGVydHlOYW1lLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogYCR7ZW50aXR5VHlwZU9iamVjdC5mdWxseVF1YWxpZmllZE5hbWV9LyR7cHJvcGVydHlOYW1lfWAsXG5cdFx0dHlwZTogcHJvcGVydHlEZWZpbml0aW9uLiRUeXBlLFxuXHRcdG1heExlbmd0aDogcHJvcGVydHlEZWZpbml0aW9uLiRNYXhMZW5ndGgsXG5cdFx0cHJlY2lzaW9uOiBwcm9wZXJ0eURlZmluaXRpb24uJFByZWNpc2lvbixcblx0XHRzY2FsZTogcHJvcGVydHlEZWZpbml0aW9uLiRTY2FsZSxcblx0XHRudWxsYWJsZTogcHJvcGVydHlEZWZpbml0aW9uLiROdWxsYWJsZVxuXHR9O1xuXHRyZXR1cm4gcHJvcGVydHlPYmplY3Q7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVOYXZpZ2F0aW9uUHJvcGVydHkoXG5cdG5hdlByb3BlcnR5RGVmaW5pdGlvbjogYW55LFxuXHRlbnRpdHlUeXBlT2JqZWN0OiBSYXdFbnRpdHlUeXBlIHwgUmF3Q29tcGxleFR5cGUsXG5cdG5hdlByb3BlcnR5TmFtZTogc3RyaW5nXG4pOiBSYXdWNE5hdmlnYXRpb25Qcm9wZXJ0eSB7XG5cdGxldCByZWZlcmVudGlhbENvbnN0cmFpbnQ6IFJlZmVyZW50aWFsQ29uc3RyYWludFtdID0gW107XG5cdGlmIChuYXZQcm9wZXJ0eURlZmluaXRpb24uJFJlZmVyZW50aWFsQ29uc3RyYWludCkge1xuXHRcdHJlZmVyZW50aWFsQ29uc3RyYWludCA9IE9iamVjdC5rZXlzKG5hdlByb3BlcnR5RGVmaW5pdGlvbi4kUmVmZXJlbnRpYWxDb25zdHJhaW50KS5tYXAoKHNvdXJjZVByb3BlcnR5TmFtZSkgPT4ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c291cmNlVHlwZU5hbWU6IGVudGl0eVR5cGVPYmplY3QubmFtZSxcblx0XHRcdFx0c291cmNlUHJvcGVydHk6IHNvdXJjZVByb3BlcnR5TmFtZSxcblx0XHRcdFx0dGFyZ2V0VHlwZU5hbWU6IG5hdlByb3BlcnR5RGVmaW5pdGlvbi4kVHlwZSxcblx0XHRcdFx0dGFyZ2V0UHJvcGVydHk6IG5hdlByb3BlcnR5RGVmaW5pdGlvbi4kUmVmZXJlbnRpYWxDb25zdHJhaW50W3NvdXJjZVByb3BlcnR5TmFtZV1cblx0XHRcdH07XG5cdFx0fSk7XG5cdH1cblx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnR5OiBSYXdWNE5hdmlnYXRpb25Qcm9wZXJ0eSA9IHtcblx0XHRfdHlwZTogXCJOYXZpZ2F0aW9uUHJvcGVydHlcIixcblx0XHRuYW1lOiBuYXZQcm9wZXJ0eU5hbWUsXG5cdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBgJHtlbnRpdHlUeXBlT2JqZWN0LmZ1bGx5UXVhbGlmaWVkTmFtZX0vJHtuYXZQcm9wZXJ0eU5hbWV9YCxcblx0XHRwYXJ0bmVyOiBuYXZQcm9wZXJ0eURlZmluaXRpb24uJFBhcnRuZXIsXG5cdFx0aXNDb2xsZWN0aW9uOiBuYXZQcm9wZXJ0eURlZmluaXRpb24uJGlzQ29sbGVjdGlvbiA/IG5hdlByb3BlcnR5RGVmaW5pdGlvbi4kaXNDb2xsZWN0aW9uIDogZmFsc2UsXG5cdFx0Y29udGFpbnNUYXJnZXQ6IG5hdlByb3BlcnR5RGVmaW5pdGlvbi4kQ29udGFpbnNUYXJnZXQsXG5cdFx0dGFyZ2V0VHlwZU5hbWU6IG5hdlByb3BlcnR5RGVmaW5pdGlvbi4kVHlwZSxcblx0XHRyZWZlcmVudGlhbENvbnN0cmFpbnRcblx0fTtcblxuXHRyZXR1cm4gbmF2aWdhdGlvblByb3BlcnR5O1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlRW50aXR5U2V0KGVudGl0eVNldERlZmluaXRpb246IGFueSwgZW50aXR5U2V0TmFtZTogc3RyaW5nLCBlbnRpdHlDb250YWluZXJOYW1lOiBzdHJpbmcpOiBSYXdFbnRpdHlTZXQge1xuXHRjb25zdCBlbnRpdHlTZXRPYmplY3Q6IFJhd0VudGl0eVNldCA9IHtcblx0XHRfdHlwZTogXCJFbnRpdHlTZXRcIixcblx0XHRuYW1lOiBlbnRpdHlTZXROYW1lLFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmc6IHt9LFxuXHRcdGVudGl0eVR5cGVOYW1lOiBlbnRpdHlTZXREZWZpbml0aW9uLiRUeXBlLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogYCR7ZW50aXR5Q29udGFpbmVyTmFtZX0vJHtlbnRpdHlTZXROYW1lfWBcblx0fTtcblx0cmV0dXJuIGVudGl0eVNldE9iamVjdDtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZVNpbmdsZXRvbihzaW5nbGV0b25EZWZpbml0aW9uOiBhbnksIHNpbmdsZXRvbk5hbWU6IHN0cmluZywgZW50aXR5Q29udGFpbmVyTmFtZTogc3RyaW5nKTogUmF3U2luZ2xldG9uIHtcblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJTaW5nbGV0b25cIixcblx0XHRuYW1lOiBzaW5nbGV0b25OYW1lLFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmc6IHt9LFxuXHRcdGVudGl0eVR5cGVOYW1lOiBzaW5nbGV0b25EZWZpbml0aW9uLiRUeXBlLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogYCR7ZW50aXR5Q29udGFpbmVyTmFtZX0vJHtzaW5nbGV0b25OYW1lfWAsXG5cdFx0bnVsbGFibGU6IHRydWVcblx0fTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZVR5cGVEZWZpbml0aW9uKHR5cGVEZWZpbml0aW9uOiBhbnksIHR5cGVOYW1lOiBzdHJpbmcsIG5hbWVzcGFjZTogc3RyaW5nKTogUmF3VHlwZURlZmluaXRpb24ge1xuXHRjb25zdCB0eXBlT2JqZWN0OiBSYXdUeXBlRGVmaW5pdGlvbiA9IHtcblx0XHRfdHlwZTogXCJUeXBlRGVmaW5pdGlvblwiLFxuXHRcdG5hbWU6IHR5cGVOYW1lLnJlcGxhY2UoYCR7bmFtZXNwYWNlfS5gLCBcIlwiKSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IHR5cGVOYW1lLFxuXHRcdHVuZGVybHlpbmdUeXBlOiB0eXBlRGVmaW5pdGlvbi4kVW5kZXJseWluZ1R5cGVcblx0fTtcblx0cmV0dXJuIHR5cGVPYmplY3Q7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVDb21wbGV4VHlwZShjb21wbGV4VHlwZURlZmluaXRpb246IGFueSwgY29tcGxleFR5cGVOYW1lOiBzdHJpbmcsIG5hbWVzcGFjZTogc3RyaW5nKTogUmF3Q29tcGxleFR5cGUge1xuXHRjb25zdCBjb21wbGV4VHlwZU9iamVjdDogUmF3Q29tcGxleFR5cGUgPSB7XG5cdFx0X3R5cGU6IFwiQ29tcGxleFR5cGVcIixcblx0XHRuYW1lOiBjb21wbGV4VHlwZU5hbWUucmVwbGFjZShgJHtuYW1lc3BhY2V9LmAsIFwiXCIpLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogY29tcGxleFR5cGVOYW1lLFxuXHRcdHByb3BlcnRpZXM6IFtdLFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBbXVxuXHR9O1xuXG5cdGNvbnN0IGNvbXBsZXhUeXBlUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKGNvbXBsZXhUeXBlRGVmaW5pdGlvbilcblx0XHQuZmlsdGVyKChwcm9wZXJ0eU5hbWVPck5vdCkgPT4ge1xuXHRcdFx0aWYgKHByb3BlcnR5TmFtZU9yTm90ICE9IFwiJEtleVwiICYmIHByb3BlcnR5TmFtZU9yTm90ICE9IFwiJGtpbmRcIikge1xuXHRcdFx0XHRyZXR1cm4gY29tcGxleFR5cGVEZWZpbml0aW9uW3Byb3BlcnR5TmFtZU9yTm90XS4ka2luZCA9PT0gXCJQcm9wZXJ0eVwiO1xuXHRcdFx0fVxuXHRcdH0pXG5cdFx0LnNvcnQoKGEsIGIpID0+IChhID4gYiA/IDEgOiAtMSkpXG5cdFx0Lm1hcCgocHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRyZXR1cm4gcHJlcGFyZVByb3BlcnR5KGNvbXBsZXhUeXBlRGVmaW5pdGlvbltwcm9wZXJ0eU5hbWVdLCBjb21wbGV4VHlwZU9iamVjdCwgcHJvcGVydHlOYW1lKTtcblx0XHR9KTtcblxuXHRjb21wbGV4VHlwZU9iamVjdC5wcm9wZXJ0aWVzID0gY29tcGxleFR5cGVQcm9wZXJ0aWVzO1xuXHRjb25zdCBjb21wbGV4VHlwZU5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoY29tcGxleFR5cGVEZWZpbml0aW9uKVxuXHRcdC5maWx0ZXIoKHByb3BlcnR5TmFtZU9yTm90KSA9PiB7XG5cdFx0XHRpZiAocHJvcGVydHlOYW1lT3JOb3QgIT0gXCIkS2V5XCIgJiYgcHJvcGVydHlOYW1lT3JOb3QgIT0gXCIka2luZFwiKSB7XG5cdFx0XHRcdHJldHVybiBjb21wbGV4VHlwZURlZmluaXRpb25bcHJvcGVydHlOYW1lT3JOb3RdLiRraW5kID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiO1xuXHRcdFx0fVxuXHRcdH0pXG5cdFx0LnNvcnQoKGEsIGIpID0+IChhID4gYiA/IDEgOiAtMSkpXG5cdFx0Lm1hcCgobmF2UHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRyZXR1cm4gcHJlcGFyZU5hdmlnYXRpb25Qcm9wZXJ0eShjb21wbGV4VHlwZURlZmluaXRpb25bbmF2UHJvcGVydHlOYW1lXSwgY29tcGxleFR5cGVPYmplY3QsIG5hdlByb3BlcnR5TmFtZSk7XG5cdFx0fSk7XG5cdGNvbXBsZXhUeXBlT2JqZWN0Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gY29tcGxleFR5cGVOYXZpZ2F0aW9uUHJvcGVydGllcztcblx0cmV0dXJuIGNvbXBsZXhUeXBlT2JqZWN0O1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlRW50aXR5S2V5cyhlbnRpdHlUeXBlRGVmaW5pdGlvbjogYW55LCBvTWV0YU1vZGVsRGF0YTogYW55KTogYW55IHtcblx0aWYgKCFlbnRpdHlUeXBlRGVmaW5pdGlvbi4kS2V5ICYmIGVudGl0eVR5cGVEZWZpbml0aW9uLiRCYXNlVHlwZSkge1xuXHRcdHJldHVybiBwcmVwYXJlRW50aXR5S2V5cyhvTWV0YU1vZGVsRGF0YVtgJHtlbnRpdHlUeXBlRGVmaW5pdGlvbi4kQmFzZVR5cGV9YF0sIG9NZXRhTW9kZWxEYXRhKTtcblx0fVxuXHRyZXR1cm4gZW50aXR5VHlwZURlZmluaXRpb24uJEtleSB8fCBbXTsgLy9oYW5kbGluZyBvZiBlbnRpdHkgdHlwZXMgd2l0aG91dCBrZXkgYXMgd2VsbCBhcyBiYXNldHlwZVxufVxuXG5mdW5jdGlvbiBwcmVwYXJlRW50aXR5VHlwZShlbnRpdHlUeXBlRGVmaW5pdGlvbjogYW55LCBlbnRpdHlUeXBlTmFtZTogc3RyaW5nLCBuYW1lc3BhY2U6IHN0cmluZywgbWV0YU1vZGVsRGF0YTogYW55KTogUmF3RW50aXR5VHlwZSB7XG5cdGNvbnN0IGVudGl0eUtleXM6IGFueSA9IHByZXBhcmVFbnRpdHlLZXlzKGVudGl0eVR5cGVEZWZpbml0aW9uLCBtZXRhTW9kZWxEYXRhKTtcblxuXHRjb25zdCBlbnRpdHlUeXBlT2JqZWN0OiBSYXdFbnRpdHlUeXBlID0ge1xuXHRcdF90eXBlOiBcIkVudGl0eVR5cGVcIixcblx0XHRuYW1lOiBlbnRpdHlUeXBlTmFtZS5yZXBsYWNlKGAke25hbWVzcGFjZX0uYCwgXCJcIiksXG5cdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBlbnRpdHlUeXBlTmFtZSxcblx0XHRrZXlzOiBbXSxcblx0XHRlbnRpdHlQcm9wZXJ0aWVzOiBbXSxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllczogW10sXG5cdFx0YWN0aW9uczoge31cblx0fTtcblxuXHRjb25zdCBlbnRpdHlQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoZW50aXR5VHlwZURlZmluaXRpb24pXG5cdFx0LmZpbHRlcigocHJvcGVydHlOYW1lT3JOb3QpID0+IHtcblx0XHRcdGlmIChwcm9wZXJ0eU5hbWVPck5vdCAhPSBcIiRLZXlcIiAmJiBwcm9wZXJ0eU5hbWVPck5vdCAhPSBcIiRraW5kXCIpIHtcblx0XHRcdFx0cmV0dXJuIGVudGl0eVR5cGVEZWZpbml0aW9uW3Byb3BlcnR5TmFtZU9yTm90XS4ka2luZCA9PT0gXCJQcm9wZXJ0eVwiO1xuXHRcdFx0fVxuXHRcdH0pXG5cdFx0Lm1hcCgocHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRyZXR1cm4gcHJlcGFyZVByb3BlcnR5KGVudGl0eVR5cGVEZWZpbml0aW9uW3Byb3BlcnR5TmFtZV0sIGVudGl0eVR5cGVPYmplY3QsIHByb3BlcnR5TmFtZSk7XG5cdFx0fSk7XG5cblx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhlbnRpdHlUeXBlRGVmaW5pdGlvbilcblx0XHQuZmlsdGVyKChwcm9wZXJ0eU5hbWVPck5vdCkgPT4ge1xuXHRcdFx0aWYgKHByb3BlcnR5TmFtZU9yTm90ICE9IFwiJEtleVwiICYmIHByb3BlcnR5TmFtZU9yTm90ICE9IFwiJGtpbmRcIikge1xuXHRcdFx0XHRyZXR1cm4gZW50aXR5VHlwZURlZmluaXRpb25bcHJvcGVydHlOYW1lT3JOb3RdLiRraW5kID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiO1xuXHRcdFx0fVxuXHRcdH0pXG5cdFx0Lm1hcCgobmF2UHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRyZXR1cm4gcHJlcGFyZU5hdmlnYXRpb25Qcm9wZXJ0eShlbnRpdHlUeXBlRGVmaW5pdGlvbltuYXZQcm9wZXJ0eU5hbWVdLCBlbnRpdHlUeXBlT2JqZWN0LCBuYXZQcm9wZXJ0eU5hbWUpO1xuXHRcdH0pO1xuXG5cdGVudGl0eVR5cGVPYmplY3Qua2V5cyA9IGVudGl0eUtleXNcblx0XHQubWFwKChlbnRpdHlLZXk6IHN0cmluZykgPT4gZW50aXR5UHJvcGVydGllcy5maW5kKChwcm9wZXJ0eTogUmF3UHJvcGVydHkpID0+IHByb3BlcnR5Lm5hbWUgPT09IGVudGl0eUtleSkpXG5cdFx0LmZpbHRlcigocHJvcGVydHk6IFByb3BlcnR5KSA9PiBwcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKTtcblx0ZW50aXR5VHlwZU9iamVjdC5lbnRpdHlQcm9wZXJ0aWVzID0gZW50aXR5UHJvcGVydGllcztcblx0ZW50aXR5VHlwZU9iamVjdC5uYXZpZ2F0aW9uUHJvcGVydGllcyA9IG5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXG5cdHJldHVybiBlbnRpdHlUeXBlT2JqZWN0O1xufVxuZnVuY3Rpb24gcHJlcGFyZUFjdGlvbihhY3Rpb25OYW1lOiBzdHJpbmcsIGFjdGlvblJhd0RhdGE6IE1ldGFNb2RlbEFjdGlvbiwgbmFtZXNwYWNlOiBzdHJpbmcsIGVudGl0eUNvbnRhaW5lck5hbWU6IHN0cmluZyk6IFJhd0FjdGlvbiB7XG5cdGxldCBhY3Rpb25FbnRpdHlUeXBlOiBzdHJpbmcgPSBcIlwiO1xuXHRsZXQgYWN0aW9uRlFOID0gYCR7YWN0aW9uTmFtZX1gO1xuXHRjb25zdCBhY3Rpb25TaG9ydE5hbWUgPSBhY3Rpb25OYW1lLnN1YnN0cihuYW1lc3BhY2UubGVuZ3RoICsgMSk7XG5cdGlmIChhY3Rpb25SYXdEYXRhLiRJc0JvdW5kKSB7XG5cdFx0Y29uc3QgYmluZGluZ1BhcmFtZXRlciA9IGFjdGlvblJhd0RhdGEuJFBhcmFtZXRlclswXTtcblx0XHRhY3Rpb25FbnRpdHlUeXBlID0gYmluZGluZ1BhcmFtZXRlci4kVHlwZTtcblx0XHRpZiAoYmluZGluZ1BhcmFtZXRlci4kaXNDb2xsZWN0aW9uID09PSB0cnVlKSB7XG5cdFx0XHRhY3Rpb25GUU4gPSBgJHthY3Rpb25OYW1lfShDb2xsZWN0aW9uKCR7YWN0aW9uRW50aXR5VHlwZX0pKWA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFjdGlvbkZRTiA9IGAke2FjdGlvbk5hbWV9KCR7YWN0aW9uRW50aXR5VHlwZX0pYDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0YWN0aW9uRlFOID0gYCR7ZW50aXR5Q29udGFpbmVyTmFtZX0vJHthY3Rpb25TaG9ydE5hbWV9YDtcblx0fVxuXHRjb25zdCBwYXJhbWV0ZXJzID0gYWN0aW9uUmF3RGF0YS4kUGFyYW1ldGVyIHx8IFtdO1xuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIkFjdGlvblwiLFxuXHRcdG5hbWU6IGFjdGlvblNob3J0TmFtZSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGFjdGlvbkZRTixcblx0XHRpc0JvdW5kOiBhY3Rpb25SYXdEYXRhLiRJc0JvdW5kLFxuXHRcdGlzRnVuY3Rpb246IGZhbHNlLFxuXHRcdHNvdXJjZVR5cGU6IGFjdGlvbkVudGl0eVR5cGUsXG5cdFx0cmV0dXJuVHlwZTogYWN0aW9uUmF3RGF0YS4kUmV0dXJuVHlwZSA/IGFjdGlvblJhd0RhdGEuJFJldHVyblR5cGUuJFR5cGUgOiBcIlwiLFxuXHRcdHBhcmFtZXRlcnM6IHBhcmFtZXRlcnMubWFwKChwYXJhbSkgPT4ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0X3R5cGU6IFwiQWN0aW9uUGFyYW1ldGVyXCIsXG5cdFx0XHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogYCR7YWN0aW9uRlFOfS8ke3BhcmFtLiROYW1lfWAsXG5cdFx0XHRcdGlzQ29sbGVjdGlvbjogcGFyYW0uJGlzQ29sbGVjdGlvbiA/PyBmYWxzZSxcblx0XHRcdFx0bmFtZTogcGFyYW0uJE5hbWUsXG5cdFx0XHRcdHR5cGU6IHBhcmFtLiRUeXBlXG5cdFx0XHR9O1xuXHRcdH0pXG5cdH07XG59XG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZUVudGl0eVR5cGVzKFxuXHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0b0NhcGFiaWxpdGllczogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgPSBEZWZhdWx0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcbik6IFJhd01ldGFkYXRhIHtcblx0Y29uc3Qgb01ldGFNb2RlbERhdGEgPSBvTWV0YU1vZGVsLmdldE9iamVjdChcIi8kXCIpO1xuXHRjb25zdCBhbm5vdGF0aW9uTGlzdHM6IFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25MaXN0PiA9IHt9O1xuXHRjb25zdCBlbnRpdHlUeXBlczogUmF3RW50aXR5VHlwZVtdID0gW107XG5cdGNvbnN0IGVudGl0eVNldHM6IFJhd0VudGl0eVNldFtdID0gW107XG5cdGNvbnN0IHNpbmdsZXRvbnM6IFJhd1NpbmdsZXRvbltdID0gW107XG5cdGNvbnN0IGNvbXBsZXhUeXBlczogUmF3Q29tcGxleFR5cGVbXSA9IFtdO1xuXHRjb25zdCB0eXBlRGVmaW5pdGlvbnM6IFJhd1R5cGVEZWZpbml0aW9uW10gPSBbXTtcblx0Y29uc3QgZW50aXR5Q29udGFpbmVyTmFtZSA9IG9NZXRhTW9kZWxEYXRhLiRFbnRpdHlDb250YWluZXI7XG5cdGxldCBuYW1lc3BhY2UgPSBcIlwiO1xuXHRjb25zdCBzY2hlbWFLZXlzID0gT2JqZWN0LmtleXMob01ldGFNb2RlbERhdGEpLmZpbHRlcigobWV0YW1vZGVsS2V5KSA9PiBvTWV0YU1vZGVsRGF0YVttZXRhbW9kZWxLZXldLiRraW5kID09PSBcIlNjaGVtYVwiKTtcblx0aWYgKHNjaGVtYUtleXMgJiYgc2NoZW1hS2V5cy5sZW5ndGggPiAwKSB7XG5cdFx0bmFtZXNwYWNlID0gc2NoZW1hS2V5c1swXS5zdWJzdHIoMCwgc2NoZW1hS2V5c1swXS5sZW5ndGggLSAxKTtcblx0fSBlbHNlIGlmIChlbnRpdHlUeXBlcyAmJiBlbnRpdHlUeXBlcy5sZW5ndGgpIHtcblx0XHRuYW1lc3BhY2UgPSBlbnRpdHlUeXBlc1swXS5mdWxseVF1YWxpZmllZE5hbWUucmVwbGFjZShlbnRpdHlUeXBlc1swXS5uYW1lLCBcIlwiKTtcblx0XHRuYW1lc3BhY2UgPSBuYW1lc3BhY2Uuc3Vic3RyKDAsIG5hbWVzcGFjZS5sZW5ndGggLSAxKTtcblx0fVxuXHRPYmplY3Qua2V5cyhvTWV0YU1vZGVsRGF0YSkuZm9yRWFjaCgoc09iamVjdE5hbWUpID0+IHtcblx0XHRpZiAoc09iamVjdE5hbWUgIT09IFwiJGtpbmRcIikge1xuXHRcdFx0c3dpdGNoIChvTWV0YU1vZGVsRGF0YVtzT2JqZWN0TmFtZV0uJGtpbmQpIHtcblx0XHRcdFx0Y2FzZSBcIkVudGl0eVR5cGVcIjpcblx0XHRcdFx0XHRjb25zdCBlbnRpdHlUeXBlID0gcHJlcGFyZUVudGl0eVR5cGUob01ldGFNb2RlbERhdGFbc09iamVjdE5hbWVdLCBzT2JqZWN0TmFtZSwgbmFtZXNwYWNlLCBvTWV0YU1vZGVsRGF0YSk7XG5cdFx0XHRcdFx0Ly8gQ2hlY2sgaWYgdGhlcmUgYXJlIGZpbHRlciBmYWNldHMgZGVmaW5lZCBmb3IgdGhlIGVudGl0eVR5cGUgYW5kIGlmIHllcywgY2hlY2sgaWYgYWxsIG9mIHRoZW0gaGF2ZSBhbiBJRFxuXHRcdFx0XHRcdC8vIFRoZSBJRCBpcyBvcHRpb25hbCwgYnV0IGl0IGlzIGludGVybmFsbHkgdGFrZW4gZm9yIGdyb3VwaW5nIGZpbHRlciBmaWVsZHMgYW5kIGlmIGl0J3Mgbm90IHByZXNlbnRcblx0XHRcdFx0XHQvLyBhIGZhbGxiYWNrIElEIG5lZWRzIHRvIGJlIGdlbmVyYXRlZCBoZXJlLlxuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdG9NZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZV0gJiZcblx0XHRcdFx0XHRcdG9NZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZV1bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmlsdGVyRmFjZXRzXCJdXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRvTWV0YU1vZGVsRGF0YS4kQW5ub3RhdGlvbnNbZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWVdW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZpbHRlckZhY2V0c1wiXS5mb3JFYWNoKFxuXHRcdFx0XHRcdFx0XHQoZmlsdGVyRmFjZXRBbm5vdGF0aW9uOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRmaWx0ZXJGYWNldEFubm90YXRpb24uSUQgPSBjcmVhdGVSZWZlcmVuY2VGYWNldElkKGZpbHRlckZhY2V0QW5ub3RhdGlvbik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5mb3JFYWNoKChlbnRpdHlQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKCFvTWV0YU1vZGVsRGF0YS4kQW5ub3RhdGlvbnNbZW50aXR5UHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lXSkge1xuXHRcdFx0XHRcdFx0XHRvTWV0YU1vZGVsRGF0YS4kQW5ub3RhdGlvbnNbZW50aXR5UHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lXSA9IHt9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHQhb01ldGFNb2RlbERhdGEuJEFubm90YXRpb25zW2VudGl0eVByb3BlcnR5LmZ1bGx5UXVhbGlmaWVkTmFtZV1bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRGVmYXVsdFwiXVxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdG9NZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlQcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWVdW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZERlZmF1bHRcIl0gPVxuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdCRUeXBlOiBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0VmFsdWU6IHsgJFBhdGg6IGVudGl0eVByb3BlcnR5Lm5hbWUgfVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0ZW50aXR5VHlwZXMucHVzaChlbnRpdHlUeXBlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIkNvbXBsZXhUeXBlXCI6XG5cdFx0XHRcdFx0Y29uc3QgY29tcGxleFR5cGUgPSBwcmVwYXJlQ29tcGxleFR5cGUob01ldGFNb2RlbERhdGFbc09iamVjdE5hbWVdLCBzT2JqZWN0TmFtZSwgbmFtZXNwYWNlKTtcblx0XHRcdFx0XHRjb21wbGV4VHlwZXMucHVzaChjb21wbGV4VHlwZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJUeXBlRGVmaW5pdGlvblwiOlxuXHRcdFx0XHRcdGNvbnN0IHR5cGVEZWZpbml0aW9uID0gcHJlcGFyZVR5cGVEZWZpbml0aW9uKG9NZXRhTW9kZWxEYXRhW3NPYmplY3ROYW1lXSwgc09iamVjdE5hbWUsIG5hbWVzcGFjZSk7XG5cdFx0XHRcdFx0dHlwZURlZmluaXRpb25zLnB1c2godHlwZURlZmluaXRpb24pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0Y29uc3Qgb0VudGl0eUNvbnRhaW5lciA9IG9NZXRhTW9kZWxEYXRhW2VudGl0eUNvbnRhaW5lck5hbWVdO1xuXHRPYmplY3Qua2V5cyhvRW50aXR5Q29udGFpbmVyKS5mb3JFYWNoKChzT2JqZWN0TmFtZSkgPT4ge1xuXHRcdGlmIChzT2JqZWN0TmFtZSAhPT0gXCIka2luZFwiKSB7XG5cdFx0XHRzd2l0Y2ggKG9FbnRpdHlDb250YWluZXJbc09iamVjdE5hbWVdLiRraW5kKSB7XG5cdFx0XHRcdGNhc2UgXCJFbnRpdHlTZXRcIjpcblx0XHRcdFx0XHRjb25zdCBlbnRpdHlTZXQgPSBwcmVwYXJlRW50aXR5U2V0KG9FbnRpdHlDb250YWluZXJbc09iamVjdE5hbWVdLCBzT2JqZWN0TmFtZSwgZW50aXR5Q29udGFpbmVyTmFtZSk7XG5cdFx0XHRcdFx0ZW50aXR5U2V0cy5wdXNoKGVudGl0eVNldCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJTaW5nbGV0b25cIjpcblx0XHRcdFx0XHRjb25zdCBzaW5nbGV0b24gPSBwcmVwYXJlU2luZ2xldG9uKG9FbnRpdHlDb250YWluZXJbc09iamVjdE5hbWVdLCBzT2JqZWN0TmFtZSwgZW50aXR5Q29udGFpbmVyTmFtZSk7XG5cdFx0XHRcdFx0c2luZ2xldG9ucy5wdXNoKHNpbmdsZXRvbik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRsZXQgZW50aXR5Q29udGFpbmVyOiBSYXdFbnRpdHlDb250YWluZXIgPSB7XG5cdFx0X3R5cGU6IFwiRW50aXR5Q29udGFpbmVyXCIsXG5cdFx0bmFtZTogXCJcIixcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IFwiXCJcblx0fTtcblx0aWYgKGVudGl0eUNvbnRhaW5lck5hbWUpIHtcblx0XHRlbnRpdHlDb250YWluZXIgPSB7XG5cdFx0XHRfdHlwZTogXCJFbnRpdHlDb250YWluZXJcIixcblx0XHRcdG5hbWU6IGVudGl0eUNvbnRhaW5lck5hbWUucmVwbGFjZShgJHtuYW1lc3BhY2V9LmAsIFwiXCIpLFxuXHRcdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBlbnRpdHlDb250YWluZXJOYW1lXG5cdFx0fTtcblx0fVxuXHRlbnRpdHlTZXRzLmZvckVhY2goKGVudGl0eVNldCkgPT4ge1xuXHRcdGNvbnN0IG5hdlByb3BlcnR5QmluZGluZ3MgPSBvRW50aXR5Q29udGFpbmVyW2VudGl0eVNldC5uYW1lXS4kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZztcblx0XHRpZiAobmF2UHJvcGVydHlCaW5kaW5ncykge1xuXHRcdFx0T2JqZWN0LmtleXMobmF2UHJvcGVydHlCaW5kaW5ncykuZm9yRWFjaCgobmF2UHJvcE5hbWUpID0+IHtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0RW50aXR5U2V0ID0gZW50aXR5U2V0cy5maW5kKChlbnRpdHlTZXROYW1lKSA9PiBlbnRpdHlTZXROYW1lLm5hbWUgPT09IG5hdlByb3BlcnR5QmluZGluZ3NbbmF2UHJvcE5hbWVdKTtcblx0XHRcdFx0aWYgKHRhcmdldEVudGl0eVNldCkge1xuXHRcdFx0XHRcdGVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW25hdlByb3BOYW1lXSA9IHRhcmdldEVudGl0eVNldDtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCBhY3Rpb25zOiBSYXdBY3Rpb25bXSA9IE9iamVjdC5rZXlzKG9NZXRhTW9kZWxEYXRhKVxuXHRcdC5maWx0ZXIoKGtleSkgPT4ge1xuXHRcdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkob01ldGFNb2RlbERhdGFba2V5XSkgJiYgb01ldGFNb2RlbERhdGFba2V5XS5sZW5ndGggPiAwICYmIG9NZXRhTW9kZWxEYXRhW2tleV1bMF0uJGtpbmQgPT09IFwiQWN0aW9uXCI7XG5cdFx0fSlcblx0XHQucmVkdWNlKChvdXRBY3Rpb25zOiBSYXdBY3Rpb25bXSwgYWN0aW9uTmFtZSkgPT4ge1xuXHRcdFx0Y29uc3QgaW5uZXJBY3Rpb25zID0gb01ldGFNb2RlbERhdGFbYWN0aW9uTmFtZV07XG5cdFx0XHRpbm5lckFjdGlvbnMuZm9yRWFjaCgoYWN0aW9uOiBNZXRhTW9kZWxBY3Rpb24pID0+IHtcblx0XHRcdFx0b3V0QWN0aW9ucy5wdXNoKHByZXBhcmVBY3Rpb24oYWN0aW9uTmFtZSwgYWN0aW9uLCBuYW1lc3BhY2UsIGVudGl0eUNvbnRhaW5lck5hbWUpKTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIG91dEFjdGlvbnM7XG5cdFx0fSwgW10pO1xuXG5cdGZvciAoY29uc3QgdGFyZ2V0IGluIG9NZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9ucykge1xuXHRcdGNyZWF0ZUFubm90YXRpb25MaXN0cyhvTWV0YU1vZGVsRGF0YS4kQW5ub3RhdGlvbnNbdGFyZ2V0XSwgdGFyZ2V0LCBhbm5vdGF0aW9uTGlzdHMsIG9DYXBhYmlsaXRpZXMpO1xuXHR9XG5cblx0Ly8gU29ydCBieSB0YXJnZXQgbGVuZ3RoXG5cdGNvbnN0IG91dEFubm90YXRpb25MaXN0cyA9IE9iamVjdC5rZXlzKGFubm90YXRpb25MaXN0cylcblx0XHQuc29ydCgoYSwgYikgPT4gKGEubGVuZ3RoID49IGIubGVuZ3RoID8gMSA6IC0xKSlcblx0XHQubWFwKChzQW5ub3RhdGlvbk5hbWUpID0+IGFubm90YXRpb25MaXN0c1tzQW5ub3RhdGlvbk5hbWVdKTtcblx0Y29uc3QgcmVmZXJlbmNlczogUmVmZXJlbmNlW10gPSBbXTtcblx0cmV0dXJuIHtcblx0XHRpZGVudGlmaWNhdGlvbjogXCJtZXRhbW9kZWxSZXN1bHRcIixcblx0XHR2ZXJzaW9uOiBcIjQuMFwiLFxuXHRcdHNjaGVtYToge1xuXHRcdFx0ZW50aXR5Q29udGFpbmVyLFxuXHRcdFx0ZW50aXR5U2V0cyxcblx0XHRcdGVudGl0eVR5cGVzLFxuXHRcdFx0Y29tcGxleFR5cGVzLFxuXHRcdFx0dHlwZURlZmluaXRpb25zLFxuXHRcdFx0c2luZ2xldG9ucyxcblx0XHRcdGFzc29jaWF0aW9uczogW10sXG5cdFx0XHRhc3NvY2lhdGlvblNldHM6IFtdLFxuXHRcdFx0YWN0aW9ucyxcblx0XHRcdGFjdGlvbkltcG9ydHM6IFtdLFxuXHRcdFx0bmFtZXNwYWNlLFxuXHRcdFx0YW5ub3RhdGlvbnM6IHtcblx0XHRcdFx0bWV0YW1vZGVsUmVzdWx0OiBvdXRBbm5vdGF0aW9uTGlzdHNcblx0XHRcdH1cblx0XHR9LFxuXHRcdHJlZmVyZW5jZXM6IHJlZmVyZW5jZXNcblx0fTtcbn1cblxuY29uc3QgbU1ldGFNb2RlbE1hcDogUmVjb3JkPHN0cmluZywgQ29udmVydGVkTWV0YWRhdGE+ID0ge307XG5cbi8qKlxuICogQ29udmVydCB0aGUgT0RhdGFNZXRhTW9kZWwgaW50byBhbm90aGVyIGZvcm1hdCB0aGF0IGFsbG93IGZvciBlYXN5IG1hbmlwdWxhdGlvbiBvZiB0aGUgYW5ub3RhdGlvbnMuXG4gKlxuICogQHBhcmFtIG9NZXRhTW9kZWwgVGhlIE9EYXRhTWV0YU1vZGVsXG4gKiBAcGFyYW0gb0NhcGFiaWxpdGllcyBUaGUgY3VycmVudCBjYXBhYmlsaXRpZXNcbiAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIG9iamVjdC1saWtlIGFubm90YXRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VHlwZXMob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIG9DYXBhYmlsaXRpZXM/OiBFbnZpcm9ubWVudENhcGFiaWxpdGllcyk6IENvbnZlcnRlZE1ldGFkYXRhIHtcblx0Y29uc3Qgc01ldGFNb2RlbElkID0gKG9NZXRhTW9kZWwgYXMgYW55KS5pZDtcblx0aWYgKCFtTWV0YU1vZGVsTWFwLmhhc093blByb3BlcnR5KHNNZXRhTW9kZWxJZCkpIHtcblx0XHRjb25zdCBwYXJzZWRPdXRwdXQgPSBwcmVwYXJlRW50aXR5VHlwZXMob01ldGFNb2RlbCwgb0NhcGFiaWxpdGllcyk7XG5cdFx0dHJ5IHtcblx0XHRcdG1NZXRhTW9kZWxNYXBbc01ldGFNb2RlbElkXSA9IEFubm90YXRpb25Db252ZXJ0ZXIuY29udmVydChwYXJzZWRPdXRwdXQpO1xuXHRcdH0gY2F0Y2ggKG9FcnJvcikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKG9FcnJvciBhcyBhbnkpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbU1ldGFNb2RlbE1hcFtzTWV0YU1vZGVsSWRdIGFzIGFueSBhcyBDb252ZXJ0ZWRNZXRhZGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnZlcnRlZFR5cGVzKG9Db250ZXh0OiBDb250ZXh0KSB7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpIGFzIHVua25vd24gYXMgT0RhdGFNZXRhTW9kZWw7XG5cdGlmICghb01ldGFNb2RlbC5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNZXRhTW9kZWxcIikpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiBhIE9EYXRhTWV0YU1vZGVsXCIpO1xuXHR9XG5cdHJldHVybiBjb252ZXJ0VHlwZXMob01ldGFNb2RlbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVNb2RlbENhY2hlRGF0YShvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCkge1xuXHRkZWxldGUgbU1ldGFNb2RlbE1hcFsob01ldGFNb2RlbCBhcyBhbnkpLmlkXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0KG9NZXRhTW9kZWxDb250ZXh0OiBDb250ZXh0LCBiSW5jbHVkZVZpc2l0ZWRPYmplY3RzOiBib29sZWFuID0gZmFsc2UpOiBhbnkge1xuXHRjb25zdCBvQ29udmVydGVkTWV0YWRhdGEgPSBjb252ZXJ0VHlwZXMob01ldGFNb2RlbENvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCk7XG5cdGNvbnN0IHNQYXRoID0gb01ldGFNb2RlbENvbnRleHQuZ2V0UGF0aCgpO1xuXG5cdGNvbnN0IGFQYXRoU3BsaXQgPSBzUGF0aC5zcGxpdChcIi9cIik7XG5cdGxldCBmaXJzdFBhcnQgPSBhUGF0aFNwbGl0WzFdO1xuXHRsZXQgYmVnaW5JbmRleCA9IDI7XG5cdGlmIChvQ29udmVydGVkTWV0YWRhdGEuZW50aXR5Q29udGFpbmVyLmZ1bGx5UXVhbGlmaWVkTmFtZSA9PT0gZmlyc3RQYXJ0KSB7XG5cdFx0Zmlyc3RQYXJ0ID0gYVBhdGhTcGxpdFsyXTtcblx0XHRiZWdpbkluZGV4Kys7XG5cdH1cblx0bGV0IHRhcmdldEVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uID0gb0NvbnZlcnRlZE1ldGFkYXRhLmVudGl0eVNldHMuZmluZChcblx0XHQoZW50aXR5U2V0KSA9PiBlbnRpdHlTZXQubmFtZSA9PT0gZmlyc3RQYXJ0XG5cdCkgYXMgRW50aXR5U2V0O1xuXHRpZiAoIXRhcmdldEVudGl0eVNldCkge1xuXHRcdHRhcmdldEVudGl0eVNldCA9IG9Db252ZXJ0ZWRNZXRhZGF0YS5zaW5nbGV0b25zLmZpbmQoKHNpbmdsZXRvbikgPT4gc2luZ2xldG9uLm5hbWUgPT09IGZpcnN0UGFydCkgYXMgU2luZ2xldG9uO1xuXHR9XG5cdGxldCByZWxhdGl2ZVBhdGggPSBhUGF0aFNwbGl0LnNsaWNlKGJlZ2luSW5kZXgpLmpvaW4oXCIvXCIpO1xuXG5cdGNvbnN0IGxvY2FsT2JqZWN0czogYW55W10gPSBbdGFyZ2V0RW50aXR5U2V0XTtcblx0d2hpbGUgKHJlbGF0aXZlUGF0aCAmJiByZWxhdGl2ZVBhdGgubGVuZ3RoID4gMCAmJiByZWxhdGl2ZVBhdGguc3RhcnRzV2l0aChcIiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nXCIpKSB7XG5cdFx0bGV0IHJlbGF0aXZlU3BsaXQgPSByZWxhdGl2ZVBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdGxldCBpZHggPSAwO1xuXHRcdGxldCBjdXJyZW50RW50aXR5U2V0LCBzTmF2UHJvcFRvQ2hlY2s7XG5cblx0XHRyZWxhdGl2ZVNwbGl0ID0gcmVsYXRpdmVTcGxpdC5zbGljZSgxKTsgLy8gUmVtb3ZpbmcgXCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiXG5cdFx0d2hpbGUgKCFjdXJyZW50RW50aXR5U2V0ICYmIHJlbGF0aXZlU3BsaXQubGVuZ3RoID4gaWR4KSB7XG5cdFx0XHRpZiAocmVsYXRpdmVTcGxpdFtpZHhdICE9PSBcIiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nXCIpIHtcblx0XHRcdFx0Ly8gRmluZGluZyB0aGUgY29ycmVjdCBlbnRpdHlTZXQgZm9yIHRoZSBuYXZpZ2FpdG9uIHByb3BlcnR5IGJpbmRpbmcgZXhhbXBsZTogXCJTZXQvX1NhbGVzT3JkZXJcIlxuXHRcdFx0XHRzTmF2UHJvcFRvQ2hlY2sgPSByZWxhdGl2ZVNwbGl0XG5cdFx0XHRcdFx0LnNsaWNlKDAsIGlkeCArIDEpXG5cdFx0XHRcdFx0LmpvaW4oXCIvXCIpXG5cdFx0XHRcdFx0LnJlcGxhY2UoXCIvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIiwgXCJcIik7XG5cdFx0XHRcdGN1cnJlbnRFbnRpdHlTZXQgPSB0YXJnZXRFbnRpdHlTZXQgJiYgdGFyZ2V0RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbc05hdlByb3BUb0NoZWNrXTtcblx0XHRcdH1cblx0XHRcdGlkeCsrO1xuXHRcdH1cblx0XHRpZiAoIWN1cnJlbnRFbnRpdHlTZXQpIHtcblx0XHRcdC8vIEZhbGwgYmFjayB0byBTaW5nbGUgbmF2IHByb3AgaWYgZW50aXR5U2V0IGlzIG5vdCBmb3VuZC5cblx0XHRcdHNOYXZQcm9wVG9DaGVjayA9IHJlbGF0aXZlU3BsaXRbMF07XG5cdFx0fVxuXHRcdGNvbnN0IGFOYXZQcm9wcyA9IHNOYXZQcm9wVG9DaGVjaz8uc3BsaXQoXCIvXCIpIHx8IFtdO1xuXHRcdGxldCB0YXJnZXRFbnRpdHlUeXBlID0gdGFyZ2V0RW50aXR5U2V0ICYmIHRhcmdldEVudGl0eVNldC5lbnRpdHlUeXBlO1xuXHRcdGZvciAoY29uc3Qgc05hdlByb3Agb2YgYU5hdlByb3BzKSB7XG5cdFx0XHQvLyBQdXNoaW5nIGFsbCBuYXYgcHJvcHMgdG8gdGhlIHZpc2l0ZWQgb2JqZWN0cy4gZXhhbXBsZTogXCJTZXRcIiwgXCJfU2FsZXNPcmRlclwiIGZvciBcIlNldC9fU2FsZXNPcmRlclwiKGluIE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcpXG5cdFx0XHRjb25zdCB0YXJnZXROYXZQcm9wID0gdGFyZ2V0RW50aXR5VHlwZSAmJiB0YXJnZXRFbnRpdHlUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZpbmQoKG5hdlByb3ApID0+IG5hdlByb3AubmFtZSA9PT0gc05hdlByb3ApO1xuXHRcdFx0aWYgKHRhcmdldE5hdlByb3ApIHtcblx0XHRcdFx0bG9jYWxPYmplY3RzLnB1c2godGFyZ2V0TmF2UHJvcCk7XG5cdFx0XHRcdHRhcmdldEVudGl0eVR5cGUgPSB0YXJnZXROYXZQcm9wLnRhcmdldFR5cGU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0dGFyZ2V0RW50aXR5U2V0ID1cblx0XHRcdCh0YXJnZXRFbnRpdHlTZXQgJiYgY3VycmVudEVudGl0eVNldCkgfHwgKHRhcmdldEVudGl0eVNldCAmJiB0YXJnZXRFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tyZWxhdGl2ZVNwbGl0WzBdXSk7XG5cdFx0aWYgKHRhcmdldEVudGl0eVNldCkge1xuXHRcdFx0Ly8gUHVzaGluZyB0aGUgdGFyZ2V0IGVudGl0eVNldCB0byB2aXNpdGVkIG9iamVjdHNcblx0XHRcdGxvY2FsT2JqZWN0cy5wdXNoKHRhcmdldEVudGl0eVNldCk7XG5cdFx0fVxuXHRcdC8vIFJlLWNhbGN1bGF0aW5nIHRoZSByZWxhdGl2ZSBwYXRoXG5cdFx0Ly8gQXMgZWFjaCBuYXZpZ2F0aW9uIG5hbWUgaXMgZW5jbG9zZWQgYmV0d2VlbiAnJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcnIGFuZCAnJCcgKHRvIGJlIGFibGUgdG8gYWNjZXNzIHRoZSBlbnRpdHlzZXQgZWFzaWx5IGluIHRoZSBtZXRhbW9kZWwpXG5cdFx0Ly8gd2UgbmVlZCB0byByZW1vdmUgdGhlIGNsb3NpbmcgJyQnIHRvIGJlIGFibGUgdG8gc3dpdGNoIHRvIHRoZSBuZXh0IG5hdmlnYXRpb25cblx0XHRyZWxhdGl2ZVNwbGl0ID0gcmVsYXRpdmVTcGxpdC5zbGljZShhTmF2UHJvcHMubGVuZ3RoIHx8IDEpO1xuXHRcdGlmIChyZWxhdGl2ZVNwbGl0Lmxlbmd0aCAmJiByZWxhdGl2ZVNwbGl0WzBdID09PSBcIiRcIikge1xuXHRcdFx0cmVsYXRpdmVTcGxpdC5zaGlmdCgpO1xuXHRcdH1cblx0XHRyZWxhdGl2ZVBhdGggPSByZWxhdGl2ZVNwbGl0LmpvaW4oXCIvXCIpO1xuXHR9XG5cdGlmIChyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aChcIiRUeXBlXCIpKSB7XG5cdFx0Ly8gQXMgJFR5cGVAIGlzIGFsbG93ZWQgYXMgd2VsbFxuXHRcdGlmIChyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aChcIiRUeXBlQFwiKSkge1xuXHRcdFx0cmVsYXRpdmVQYXRoID0gcmVsYXRpdmVQYXRoLnJlcGxhY2UoXCIkVHlwZVwiLCBcIlwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gV2UncmUgYW55d2F5IGdvaW5nIHRvIGxvb2sgb24gdGhlIGVudGl0eVR5cGUuLi5cblx0XHRcdHJlbGF0aXZlUGF0aCA9IGFQYXRoU3BsaXQuc2xpY2UoMykuam9pbihcIi9cIik7XG5cdFx0fVxuXHR9XG5cdGlmICh0YXJnZXRFbnRpdHlTZXQgJiYgcmVsYXRpdmVQYXRoLmxlbmd0aCkge1xuXHRcdGNvbnN0IG9UYXJnZXQgPSB0YXJnZXRFbnRpdHlTZXQuZW50aXR5VHlwZS5yZXNvbHZlUGF0aChyZWxhdGl2ZVBhdGgsIGJJbmNsdWRlVmlzaXRlZE9iamVjdHMpO1xuXHRcdGlmIChvVGFyZ2V0KSB7XG5cdFx0XHRpZiAoYkluY2x1ZGVWaXNpdGVkT2JqZWN0cykge1xuXHRcdFx0XHRvVGFyZ2V0LnZpc2l0ZWRPYmplY3RzID0gbG9jYWxPYmplY3RzLmNvbmNhdChvVGFyZ2V0LnZpc2l0ZWRPYmplY3RzKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHRhcmdldEVudGl0eVNldC5lbnRpdHlUeXBlICYmIHRhcmdldEVudGl0eVNldC5lbnRpdHlUeXBlLmFjdGlvbnMpIHtcblx0XHRcdC8vIGlmIHRhcmdldCBpcyBhbiBhY3Rpb24gb3IgYW4gYWN0aW9uIHBhcmFtZXRlclxuXHRcdFx0Y29uc3QgYWN0aW9ucyA9IHRhcmdldEVudGl0eVNldC5lbnRpdHlUeXBlICYmIHRhcmdldEVudGl0eVNldC5lbnRpdHlUeXBlLmFjdGlvbnM7XG5cdFx0XHRjb25zdCByZWxhdGl2ZVNwbGl0ID0gcmVsYXRpdmVQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdGlmIChhY3Rpb25zW3JlbGF0aXZlU3BsaXRbMF1dKSB7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbiA9IGFjdGlvbnNbcmVsYXRpdmVTcGxpdFswXV07XG5cdFx0XHRcdGlmIChyZWxhdGl2ZVNwbGl0WzFdICYmIGFjdGlvbi5wYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0Y29uc3QgcGFyYW1ldGVyTmFtZSA9IHJlbGF0aXZlU3BsaXRbMV07XG5cdFx0XHRcdFx0cmV0dXJuIGFjdGlvbi5wYXJhbWV0ZXJzLmZpbmQoKHBhcmFtZXRlcikgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHBhcmFtZXRlci5mdWxseVF1YWxpZmllZE5hbWUuZW5kc1dpdGgoYC8ke3BhcmFtZXRlck5hbWV9YCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAocmVsYXRpdmVQYXRoLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRcdHJldHVybiBhY3Rpb247XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9UYXJnZXQ7XG5cdH0gZWxzZSB7XG5cdFx0aWYgKGJJbmNsdWRlVmlzaXRlZE9iamVjdHMpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHRhcmdldDogdGFyZ2V0RW50aXR5U2V0LFxuXHRcdFx0XHR2aXNpdGVkT2JqZWN0czogbG9jYWxPYmplY3RzXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRyZXR1cm4gdGFyZ2V0RW50aXR5U2V0O1xuXHR9XG59XG5cbmV4cG9ydCB0eXBlIFJlc29sdmVkVGFyZ2V0ID0ge1xuXHR0YXJnZXQ/OiBTZXJ2aWNlT2JqZWN0O1xuXHR2aXNpdGVkT2JqZWN0czogKFNlcnZpY2VPYmplY3QgfCBTaW5nbGV0b24pW107XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG9NZXRhTW9kZWxDb250ZXh0OiBDb250ZXh0LCBvRW50aXR5U2V0TWV0YU1vZGVsQ29udGV4dD86IENvbnRleHQpOiBEYXRhTW9kZWxPYmplY3RQYXRoIHtcblx0Y29uc3Qgb0NvbnZlcnRlZE1ldGFkYXRhID0gY29udmVydFR5cGVzKG9NZXRhTW9kZWxDb250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwpO1xuXHRjb25zdCBtZXRhTW9kZWxDb250ZXh0ID0gY29udmVydE1ldGFNb2RlbENvbnRleHQob01ldGFNb2RlbENvbnRleHQsIHRydWUpO1xuXHRsZXQgdGFyZ2V0RW50aXR5U2V0TG9jYXRpb247XG5cdGlmIChvRW50aXR5U2V0TWV0YU1vZGVsQ29udGV4dCAmJiBvRW50aXR5U2V0TWV0YU1vZGVsQ29udGV4dC5nZXRQYXRoKCkgIT09IFwiL1wiKSB7XG5cdFx0dGFyZ2V0RW50aXR5U2V0TG9jYXRpb24gPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMob0VudGl0eVNldE1ldGFNb2RlbENvbnRleHQpO1xuXHR9XG5cdHJldHVybiBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdEZyb21QYXRoKG1ldGFNb2RlbENvbnRleHQsIG9Db252ZXJ0ZWRNZXRhZGF0YSwgdGFyZ2V0RW50aXR5U2V0TG9jYXRpb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RGcm9tUGF0aChcblx0bWV0YU1vZGVsQ29udGV4dDogUmVzb2x2ZWRUYXJnZXQsXG5cdGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZWRNZXRhZGF0YSxcblx0dGFyZ2V0RW50aXR5U2V0TG9jYXRpb24/OiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRvbmx5U2VydmljZU9iamVjdHM/OiBib29sZWFuXG4pOiBEYXRhTW9kZWxPYmplY3RQYXRoIHtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0cyA9IG1ldGFNb2RlbENvbnRleHQudmlzaXRlZE9iamVjdHMuZmlsdGVyKFxuXHRcdCh2aXNpdGVkT2JqZWN0OiBhbnkpID0+XG5cdFx0XHR2aXNpdGVkT2JqZWN0ICYmXG5cdFx0XHR2aXNpdGVkT2JqZWN0Lmhhc093blByb3BlcnR5KFwiX3R5cGVcIikgJiZcblx0XHRcdHZpc2l0ZWRPYmplY3QuX3R5cGUgIT09IFwiRW50aXR5VHlwZVwiICYmXG5cdFx0XHR2aXNpdGVkT2JqZWN0Ll90eXBlICE9PSBcIkVudGl0eUNvbnRhaW5lclwiXG5cdCk7XG5cdGlmIChcblx0XHRtZXRhTW9kZWxDb250ZXh0LnRhcmdldCAmJlxuXHRcdG1ldGFNb2RlbENvbnRleHQudGFyZ2V0Lmhhc093blByb3BlcnR5KFwiX3R5cGVcIikgJiZcblx0XHRtZXRhTW9kZWxDb250ZXh0LnRhcmdldC5fdHlwZSAhPT0gXCJFbnRpdHlUeXBlXCIgJiZcblx0XHRkYXRhTW9kZWxPYmplY3RzW2RhdGFNb2RlbE9iamVjdHMubGVuZ3RoIC0gMV0gIT09IG1ldGFNb2RlbENvbnRleHQudGFyZ2V0ICYmXG5cdFx0IW9ubHlTZXJ2aWNlT2JqZWN0c1xuXHQpIHtcblx0XHRkYXRhTW9kZWxPYmplY3RzLnB1c2gobWV0YU1vZGVsQ29udGV4dC50YXJnZXQpO1xuXHR9XG5cblx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnRpZXM6IE5hdmlnYXRpb25Qcm9wZXJ0eVtdID0gW107XG5cdGNvbnN0IHJvb3RFbnRpdHlTZXQ6IEVudGl0eVNldCA9IGRhdGFNb2RlbE9iamVjdHNbMF0gYXMgRW50aXR5U2V0O1xuXG5cdGxldCBjdXJyZW50RW50aXR5U2V0OiBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWQgPSByb290RW50aXR5U2V0O1xuXHRsZXQgY3VycmVudEVudGl0eVR5cGU6IEVudGl0eVR5cGUgPSByb290RW50aXR5U2V0LmVudGl0eVR5cGU7XG5cdGxldCBjdXJyZW50T2JqZWN0OiBTZXJ2aWNlT2JqZWN0IHwgdW5kZWZpbmVkO1xuXHRsZXQgbmF2aWdhdGVkUGF0aCA9IFtdO1xuXG5cdGZvciAobGV0IGkgPSAxOyBpIDwgZGF0YU1vZGVsT2JqZWN0cy5sZW5ndGg7IGkrKykge1xuXHRcdGN1cnJlbnRPYmplY3QgPSBkYXRhTW9kZWxPYmplY3RzW2ldO1xuXG5cdFx0aWYgKGN1cnJlbnRPYmplY3QuX3R5cGUgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCIpIHtcblx0XHRcdG5hdmlnYXRlZFBhdGgucHVzaChjdXJyZW50T2JqZWN0Lm5hbWUpO1xuXHRcdFx0bmF2aWdhdGlvblByb3BlcnRpZXMucHVzaChjdXJyZW50T2JqZWN0KTtcblx0XHRcdGN1cnJlbnRFbnRpdHlUeXBlID0gY3VycmVudE9iamVjdC50YXJnZXRUeXBlO1xuXHRcdFx0Y29uc3QgYm91bmRFbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZCA9IGN1cnJlbnRFbnRpdHlTZXQ/Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbbmF2aWdhdGVkUGF0aC5qb2luKFwiL1wiKV07XG5cdFx0XHRpZiAoYm91bmRFbnRpdHlTZXQpIHtcblx0XHRcdFx0Y3VycmVudEVudGl0eVNldCA9IGJvdW5kRW50aXR5U2V0O1xuXHRcdFx0XHRuYXZpZ2F0ZWRQYXRoID0gW107XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChjdXJyZW50T2JqZWN0Ll90eXBlID09PSBcIkVudGl0eVNldFwiIHx8IGN1cnJlbnRPYmplY3QuX3R5cGUgPT09IFwiU2luZ2xldG9uXCIpIHtcblx0XHRcdGN1cnJlbnRFbnRpdHlTZXQgPSBjdXJyZW50T2JqZWN0O1xuXHRcdFx0Y3VycmVudEVudGl0eVR5cGUgPSBjdXJyZW50RW50aXR5U2V0LmVudGl0eVR5cGU7XG5cdFx0fVxuXHR9XG5cblx0aWYgKG5hdmlnYXRlZFBhdGgubGVuZ3RoID4gMCkge1xuXHRcdC8vIFBhdGggd2l0aG91dCBOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nIC0tPiBubyB0YXJnZXQgZW50aXR5IHNldFxuXHRcdGN1cnJlbnRFbnRpdHlTZXQgPSB1bmRlZmluZWQ7XG5cdH1cblxuXHRpZiAodGFyZ2V0RW50aXR5U2V0TG9jYXRpb24gJiYgdGFyZ2V0RW50aXR5U2V0TG9jYXRpb24uc3RhcnRpbmdFbnRpdHlTZXQgIT09IHJvb3RFbnRpdHlTZXQpIHtcblx0XHQvLyBJbiBjYXNlIHRoZSBlbnRpdHlzZXQgaXMgbm90IHN0YXJ0aW5nIGZyb20gdGhlIHNhbWUgbG9jYXRpb24gaXQgbWF5IG1lYW4gdGhhdCB3ZSBhcmUgZG9pbmcgdG9vIG11Y2ggd29yayBlYXJsaWVyIGZvciBzb21lIHJlYXNvblxuXHRcdC8vIEFzIHN1Y2ggd2UgbmVlZCB0byByZWRlZmluZSB0aGUgY29udGV4dCBzb3VyY2UgZm9yIHRoZSB0YXJnZXRFbnRpdHlTZXRMb2NhdGlvblxuXHRcdGNvbnN0IHN0YXJ0aW5nSW5kZXggPSBkYXRhTW9kZWxPYmplY3RzLmluZGV4T2YodGFyZ2V0RW50aXR5U2V0TG9jYXRpb24uc3RhcnRpbmdFbnRpdHlTZXQpO1xuXHRcdGlmIChzdGFydGluZ0luZGV4ICE9PSAtMSkge1xuXHRcdFx0Ly8gSWYgaXQncyBub3QgZm91bmQgSSBkb24ndCBrbm93IHdoYXQgd2UgY2FuIGRvIChwcm9iYWJseSBub3RoaW5nKVxuXHRcdFx0Y29uc3QgcmVxdWlyZWREYXRhTW9kZWxPYmplY3RzID0gZGF0YU1vZGVsT2JqZWN0cy5zbGljZSgwLCBzdGFydGluZ0luZGV4KTtcblx0XHRcdHRhcmdldEVudGl0eVNldExvY2F0aW9uLnN0YXJ0aW5nRW50aXR5U2V0ID0gcm9vdEVudGl0eVNldDtcblx0XHRcdHRhcmdldEVudGl0eVNldExvY2F0aW9uLm5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gcmVxdWlyZWREYXRhTW9kZWxPYmplY3RzXG5cdFx0XHRcdC5maWx0ZXIoKG9iamVjdDogYW55KSA9PiBvYmplY3QuX3R5cGUgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCIpXG5cdFx0XHRcdC5jb25jYXQodGFyZ2V0RW50aXR5U2V0TG9jYXRpb24ubmF2aWdhdGlvblByb3BlcnRpZXMpIGFzIE5hdmlnYXRpb25Qcm9wZXJ0eVtdO1xuXHRcdH1cblx0fVxuXHRjb25zdCBvdXREYXRhTW9kZWxQYXRoID0ge1xuXHRcdHN0YXJ0aW5nRW50aXR5U2V0OiByb290RW50aXR5U2V0LFxuXHRcdHRhcmdldEVudGl0eVNldDogY3VycmVudEVudGl0eVNldCxcblx0XHR0YXJnZXRFbnRpdHlUeXBlOiBjdXJyZW50RW50aXR5VHlwZSxcblx0XHR0YXJnZXRPYmplY3Q6IG1ldGFNb2RlbENvbnRleHQudGFyZ2V0LFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzLFxuXHRcdGNvbnRleHRMb2NhdGlvbjogdGFyZ2V0RW50aXR5U2V0TG9jYXRpb24sXG5cdFx0Y29udmVydGVkVHlwZXM6IGNvbnZlcnRlZFR5cGVzXG5cdH07XG5cdGlmICghb3V0RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Q/Lmhhc093blByb3BlcnR5KFwiX3R5cGVcIikgJiYgb25seVNlcnZpY2VPYmplY3RzKSB7XG5cdFx0b3V0RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgPSBjdXJyZW50T2JqZWN0O1xuXHR9XG5cdGlmICghb3V0RGF0YU1vZGVsUGF0aC5jb250ZXh0TG9jYXRpb24pIHtcblx0XHRvdXREYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbiA9IG91dERhdGFNb2RlbFBhdGg7XG5cdH1cblx0cmV0dXJuIG91dERhdGFNb2RlbFBhdGg7XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpQ0EsSUFBTUEsZ0JBQXFCLEdBQUc7SUFDN0IsMkJBQTJCLEVBQUUsY0FBYztJQUMzQyxtQkFBbUIsRUFBRSxNQUFNO0lBQzNCLHVCQUF1QixFQUFFLFVBQVU7SUFDbkMsZ0NBQWdDLEVBQUUsUUFBUTtJQUMxQyw0QkFBNEIsRUFBRSxJQUFJO0lBQ2xDLGlDQUFpQyxFQUFFLFNBQVM7SUFDNUMsbUNBQW1DLEVBQUUsV0FBVztJQUNoRCxzQ0FBc0MsRUFBRSxjQUFjO0lBQ3RELHVDQUF1QyxFQUFFO0VBQzFDLENBQUM7RUFVTSxJQUFNQyw4QkFBOEIsR0FBRztJQUM3Q0MsS0FBSyxFQUFFLElBQUk7SUFDWEMsVUFBVSxFQUFFLElBQUk7SUFDaEJDLE1BQU0sRUFBRSxJQUFJO0lBQ1pDLHFCQUFxQixFQUFFLElBQUk7SUFDM0JDLFFBQVEsRUFBRTtFQUNYLENBQUM7RUFBQztFQW9CRixTQUFT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