@grafana/scenes 6.8.0 → 6.9.0--canary.1093.14409340532.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 (321) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/esm/components/VizPanel/VizPanelRenderer.js +4 -3
  3. package/dist/esm/components/VizPanel/VizPanelRenderer.js.map +1 -1
  4. package/dist/esm/index.js +1 -1
  5. package/dist/esm/index.js.map +1 -1
  6. package/dist/index.d.ts +1 -1
  7. package/dist/index.js +5 -4
  8. package/dist/index.js.map +1 -1
  9. package/package.json +2 -2
  10. package/dist/esm/components/layout/CSSGrid/SceneCSSGridItem.js +0 -33
  11. package/dist/esm/dist/esm/behaviors/CursorSync.js +0 -76
  12. package/dist/esm/dist/esm/behaviors/LiveNowTimer.js +0 -44
  13. package/dist/esm/dist/esm/behaviors/SceneQueryController.js +0 -14
  14. package/dist/esm/dist/esm/components/EmbeddedScene.js +0 -59
  15. package/dist/esm/dist/esm/components/NestedScene.js +0 -95
  16. package/dist/esm/dist/esm/components/SceneApp/SceneApp.js +0 -27
  17. package/dist/esm/dist/esm/components/SceneApp/SceneAppPage.js +0 -176
  18. package/dist/esm/dist/esm/components/SceneApp/SceneAppPageView.js +0 -104
  19. package/dist/esm/dist/esm/components/SceneApp/utils.js +0 -42
  20. package/dist/esm/dist/esm/components/SceneByFrameRepeater.js +0 -41
  21. package/dist/esm/dist/esm/components/SceneByVariableRepeater.js +0 -55
  22. package/dist/esm/dist/esm/components/SceneCanvasText.js +0 -32
  23. package/dist/esm/dist/esm/components/SceneControlsSpacer.js +0 -17
  24. package/dist/esm/dist/esm/components/SceneDebugger/DebugDetails.js +0 -82
  25. package/dist/esm/dist/esm/components/SceneDebugger/DebugTreeNode.js +0 -72
  26. package/dist/esm/dist/esm/components/SceneDebugger/SceneDebugger.js +0 -77
  27. package/dist/esm/dist/esm/components/SceneReactObject.js +0 -34
  28. package/dist/esm/dist/esm/components/SceneRefreshPicker.js +0 -205
  29. package/dist/esm/dist/esm/components/SceneTimePicker.js +0 -139
  30. package/dist/esm/dist/esm/components/SceneTimeRangeCompare.js +0 -240
  31. package/dist/esm/dist/esm/components/SceneToolbarButton.js +0 -33
  32. package/dist/esm/dist/esm/components/VizPanel/VizPanel.js +0 -406
  33. package/dist/esm/dist/esm/components/VizPanel/VizPanelExploreButton.js +0 -44
  34. package/dist/esm/dist/esm/components/VizPanel/VizPanelMenu.js +0 -59
  35. package/dist/esm/dist/esm/components/VizPanel/VizPanelRenderer.js +0 -285
  36. package/dist/esm/dist/esm/components/VizPanel/VizPanelSeriesLimit.js +0 -45
  37. package/dist/esm/dist/esm/components/VizPanel/colorSeriesConfigFactory.js +0 -72
  38. package/dist/esm/dist/esm/components/VizPanel/registerRuntimePanelPlugin.js +0 -11
  39. package/dist/esm/dist/esm/components/VizPanel/seriesVisibilityConfigFactory.js +0 -164
  40. package/dist/esm/dist/esm/components/layout/CSSGrid/SceneCSSGridLayout.js +0 -124
  41. package/dist/esm/dist/esm/components/layout/LazyLoader.js +0 -103
  42. package/dist/esm/dist/esm/components/layout/SceneFlexLayout.js +0 -135
  43. package/dist/esm/dist/esm/components/layout/grid/SceneGridItem.js +0 -30
  44. package/dist/esm/dist/esm/components/layout/grid/SceneGridLayout.js +0 -283
  45. package/dist/esm/dist/esm/components/layout/grid/SceneGridLayoutRenderer.js +0 -178
  46. package/dist/esm/dist/esm/components/layout/grid/SceneGridRow.js +0 -190
  47. package/dist/esm/dist/esm/components/layout/grid/constants.js +0 -7
  48. package/dist/esm/dist/esm/components/layout/grid/utils.js +0 -36
  49. package/dist/esm/dist/esm/components/layout/split/SplitLayout.js +0 -17
  50. package/dist/esm/dist/esm/components/layout/split/SplitLayoutRenderer.js +0 -29
  51. package/dist/esm/dist/esm/components/layout/split/Splitter.js +0 -386
  52. package/dist/esm/dist/esm/core/SceneComponentWrapper.js +0 -57
  53. package/dist/esm/dist/esm/core/SceneDataNode.js +0 -43
  54. package/dist/esm/dist/esm/core/SceneObjectBase.js +0 -286
  55. package/dist/esm/dist/esm/core/SceneObjectRef.js +0 -32
  56. package/dist/esm/dist/esm/core/SceneTimeRange.js +0 -231
  57. package/dist/esm/dist/esm/core/events.js +0 -11
  58. package/dist/esm/dist/esm/core/sceneGraph/getTimeRange.js +0 -10
  59. package/dist/esm/dist/esm/core/sceneGraph/index.js +0 -25
  60. package/dist/esm/dist/esm/core/sceneGraph/sceneGraph.js +0 -178
  61. package/dist/esm/dist/esm/core/sceneGraph/utils.js +0 -64
  62. package/dist/esm/dist/esm/core/types.js +0 -15
  63. package/dist/esm/dist/esm/querying/DataLayersMerger.js +0 -46
  64. package/dist/esm/dist/esm/querying/ExtraQueryProvider.js +0 -6
  65. package/dist/esm/dist/esm/querying/RuntimeDataSource.js +0 -6
  66. package/dist/esm/dist/esm/querying/SceneDataLayerSet.js +0 -100
  67. package/dist/esm/dist/esm/querying/SceneQueryRunner.js +0 -468
  68. package/dist/esm/dist/esm/querying/extraQueryProcessingOperator.js +0 -46
  69. package/dist/esm/dist/esm/querying/getEnrichedDataRequest.js +0 -12
  70. package/dist/esm/dist/esm/querying/layers/SceneDataLayerBase.js +0 -112
  71. package/dist/esm/dist/esm/querying/layers/SceneDataLayerControls.js +0 -51
  72. package/dist/esm/dist/esm/querying/layers/annotations/AnnotationsDataLayer.js +0 -130
  73. package/dist/esm/dist/esm/querying/layers/annotations/filterAnnotations.js +0 -85
  74. package/dist/esm/dist/esm/querying/layers/annotations/standardAnnotationQuery.js +0 -121
  75. package/dist/esm/dist/esm/querying/layers/annotations/standardAnnotationsSupport.js +0 -211
  76. package/dist/esm/dist/esm/querying/layers/annotations/utils.js +0 -77
  77. package/dist/esm/dist/esm/querying/registerQueryWithController.js +0 -41
  78. package/dist/esm/dist/esm/services/SceneObjectUrlSyncConfig.js +0 -30
  79. package/dist/esm/dist/esm/services/UniqueUrlKeyMapper.js +0 -45
  80. package/dist/esm/dist/esm/services/UrlSyncManager.js +0 -167
  81. package/dist/esm/dist/esm/services/useUrlSync.js +0 -29
  82. package/dist/esm/dist/esm/services/utils.js +0 -71
  83. package/dist/esm/dist/esm/utils/ControlsLabel.js +0 -107
  84. package/dist/esm/dist/esm/utils/LoadingIndicator.js +0 -19
  85. package/dist/esm/dist/esm/utils/SafeSerializableSceneObject.js +0 -39
  86. package/dist/esm/dist/esm/utils/compatibility/setWindowGrafanaSceneContext.js +0 -16
  87. package/dist/esm/dist/esm/utils/date.js +0 -15
  88. package/dist/esm/dist/esm/utils/evaluateTimeRange.js +0 -16
  89. package/dist/esm/dist/esm/utils/explore.js +0 -47
  90. package/dist/esm/dist/esm/utils/getCompareSeriesRefId.js +0 -4
  91. package/dist/esm/dist/esm/utils/getDataSource.js +0 -18
  92. package/dist/esm/dist/esm/utils/getMessageFromError.js +0 -24
  93. package/dist/esm/dist/esm/utils/metricTree.js +0 -53
  94. package/dist/esm/dist/esm/utils/parseUrlParam.js +0 -41
  95. package/dist/esm/dist/esm/utils/utils.js +0 -11
  96. package/dist/esm/dist/esm/utils/wrapInSafeSerializableSceneObject.js +0 -30
  97. package/dist/esm/dist/esm/utils/writeSceneLog.js +0 -12
  98. package/dist/esm/dist/esm/variables/VariableDependencyConfig.js +0 -150
  99. package/dist/esm/dist/esm/variables/VariableValueRecorder.js +0 -71
  100. package/dist/esm/dist/esm/variables/adhoc/AdHocFilterBuilder.js +0 -24
  101. package/dist/esm/dist/esm/variables/adhoc/AdHocFilterRenderer.js +0 -303
  102. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +0 -162
  103. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js +0 -20
  104. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +0 -640
  105. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +0 -65
  106. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js +0 -146
  107. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js +0 -114
  108. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/useFloatingInteractions.js +0 -68
  109. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/utils.js +0 -146
  110. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersVariable.js +0 -289
  111. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js +0 -76
  112. package/dist/esm/dist/esm/variables/adhoc/getAdhocOptionSearcher.js +0 -13
  113. package/dist/esm/dist/esm/variables/adhoc/patchGetAdhocFilters.js +0 -47
  114. package/dist/esm/dist/esm/variables/components/VariableValueControl.js +0 -23
  115. package/dist/esm/dist/esm/variables/components/VariableValueInput.js +0 -33
  116. package/dist/esm/dist/esm/variables/components/VariableValueSelect.js +0 -228
  117. package/dist/esm/dist/esm/variables/components/VariableValueSelectors.js +0 -72
  118. package/dist/esm/dist/esm/variables/components/getOptionSearcher.js +0 -15
  119. package/dist/esm/dist/esm/variables/constants.js +0 -9
  120. package/dist/esm/dist/esm/variables/getEnrichedFiltersRequest.js +0 -12
  121. package/dist/esm/dist/esm/variables/groupby/GroupByVariable.js +0 -259
  122. package/dist/esm/dist/esm/variables/groupby/GroupByVariableUrlSyncHandler.js +0 -63
  123. package/dist/esm/dist/esm/variables/groupby/findActiveGroupByVariablesByUid.js +0 -13
  124. package/dist/esm/dist/esm/variables/interpolation/ScopedVarsVariable.js +0 -40
  125. package/dist/esm/dist/esm/variables/interpolation/defaults.js +0 -21
  126. package/dist/esm/dist/esm/variables/interpolation/fieldAccessorCache.js +0 -13
  127. package/dist/esm/dist/esm/variables/interpolation/formatRegistry.js +0 -296
  128. package/dist/esm/dist/esm/variables/interpolation/sceneInterpolator.js +0 -87
  129. package/dist/esm/dist/esm/variables/lookupVariable.js +0 -20
  130. package/dist/esm/dist/esm/variables/macros/AllVariablesMacro.js +0 -57
  131. package/dist/esm/dist/esm/variables/macros/contextMacros.js +0 -43
  132. package/dist/esm/dist/esm/variables/macros/dataMacros.js +0 -134
  133. package/dist/esm/dist/esm/variables/macros/index.js +0 -26
  134. package/dist/esm/dist/esm/variables/macros/templateProxies.js +0 -51
  135. package/dist/esm/dist/esm/variables/macros/timeMacros.js +0 -86
  136. package/dist/esm/dist/esm/variables/macros/types.js +0 -11
  137. package/dist/esm/dist/esm/variables/macros/urlMacros.js +0 -56
  138. package/dist/esm/dist/esm/variables/sets/SceneVariableSet.js +0 -254
  139. package/dist/esm/dist/esm/variables/types.js +0 -11
  140. package/dist/esm/dist/esm/variables/utils.js +0 -172
  141. package/dist/esm/dist/esm/variables/variants/ConstantVariable.js +0 -38
  142. package/dist/esm/dist/esm/variables/variants/CustomVariable.js +0 -60
  143. package/dist/esm/dist/esm/variables/variants/DataSourceVariable.js +0 -88
  144. package/dist/esm/dist/esm/variables/variants/IntervalVariable.js +0 -117
  145. package/dist/esm/dist/esm/variables/variants/MultiValueVariable.js +0 -295
  146. package/dist/esm/dist/esm/variables/variants/TestVariable.js +0 -117
  147. package/dist/esm/dist/esm/variables/variants/TextBoxVariable.js +0 -61
  148. package/dist/esm/dist/esm/variables/variants/query/QueryVariable.js +0 -139
  149. package/dist/esm/dist/esm/variables/variants/query/createQueryVariableRunner.js +0 -129
  150. package/dist/esm/dist/esm/variables/variants/query/guards.js +0 -28
  151. package/dist/esm/dist/esm/variables/variants/query/toMetricFindValues.js +0 -96
  152. package/dist/esm/dist/esm/variables/variants/query/utils.js +0 -124
  153. package/dist/esm/querying/DataProviderSharer.js +0 -39
  154. package/dist/esm/src/behaviors/ActWhenVariableChanged.js +0 -27
  155. package/dist/esm/src/behaviors/CursorSync.js +0 -76
  156. package/dist/esm/src/behaviors/LiveNowTimer.js +0 -44
  157. package/dist/esm/src/behaviors/SceneQueryController.js +0 -60
  158. package/dist/esm/src/behaviors/index.js +0 -5
  159. package/dist/esm/src/components/EmbeddedScene.js +0 -59
  160. package/dist/esm/src/components/NestedScene.js +0 -95
  161. package/dist/esm/src/components/SceneApp/SceneApp.js +0 -37
  162. package/dist/esm/src/components/SceneApp/SceneAppPage.js +0 -176
  163. package/dist/esm/src/components/SceneApp/SceneAppPageView.js +0 -104
  164. package/dist/esm/src/components/SceneApp/utils.js +0 -42
  165. package/dist/esm/src/components/SceneByFrameRepeater.js +0 -41
  166. package/dist/esm/src/components/SceneByVariableRepeater.js +0 -55
  167. package/dist/esm/src/components/SceneCanvasText.js +0 -32
  168. package/dist/esm/src/components/SceneControlsSpacer.js +0 -17
  169. package/dist/esm/src/components/SceneDebugger/DebugDetails.js +0 -82
  170. package/dist/esm/src/components/SceneDebugger/DebugTreeNode.js +0 -72
  171. package/dist/esm/src/components/SceneDebugger/SceneDebugger.js +0 -77
  172. package/dist/esm/src/components/SceneReactObject.js +0 -34
  173. package/dist/esm/src/components/SceneRefreshPicker.js +0 -205
  174. package/dist/esm/src/components/SceneTimePicker.js +0 -139
  175. package/dist/esm/src/components/SceneTimeRangeCompare.js +0 -240
  176. package/dist/esm/src/components/SceneToolbarButton.js +0 -33
  177. package/dist/esm/src/components/VizPanel/VizPanel.js +0 -406
  178. package/dist/esm/src/components/VizPanel/VizPanelExploreButton.js +0 -44
  179. package/dist/esm/src/components/VizPanel/VizPanelMenu.js +0 -59
  180. package/dist/esm/src/components/VizPanel/VizPanelRenderer.js +0 -285
  181. package/dist/esm/src/components/VizPanel/VizPanelSeriesLimit.js +0 -45
  182. package/dist/esm/src/components/VizPanel/colorSeriesConfigFactory.js +0 -72
  183. package/dist/esm/src/components/VizPanel/registerRuntimePanelPlugin.js +0 -56
  184. package/dist/esm/src/components/VizPanel/seriesVisibilityConfigFactory.js +0 -164
  185. package/dist/esm/src/components/layout/CSSGrid/SceneCSSGridLayout.js +0 -124
  186. package/dist/esm/src/components/layout/LazyLoader.js +0 -103
  187. package/dist/esm/src/components/layout/SceneFlexLayout.js +0 -135
  188. package/dist/esm/src/components/layout/grid/SceneGridItem.js +0 -30
  189. package/dist/esm/src/components/layout/grid/SceneGridLayout.js +0 -283
  190. package/dist/esm/src/components/layout/grid/SceneGridLayoutRenderer.js +0 -178
  191. package/dist/esm/src/components/layout/grid/SceneGridRow.js +0 -190
  192. package/dist/esm/src/components/layout/grid/constants.js +0 -7
  193. package/dist/esm/src/components/layout/grid/utils.js +0 -36
  194. package/dist/esm/src/components/layout/split/SplitLayout.js +0 -17
  195. package/dist/esm/src/components/layout/split/SplitLayoutRenderer.js +0 -29
  196. package/dist/esm/src/components/layout/split/Splitter.js +0 -386
  197. package/dist/esm/src/core/PanelBuilders/FieldConfigBuilder.js +0 -100
  198. package/dist/esm/src/core/PanelBuilders/FieldConfigBuilders.js +0 -75
  199. package/dist/esm/src/core/PanelBuilders/FieldConfigOverridesBuilder.js +0 -75
  200. package/dist/esm/src/core/PanelBuilders/PanelOptionsBuilder.js +0 -22
  201. package/dist/esm/src/core/PanelBuilders/PanelOptionsBuilders.js +0 -85
  202. package/dist/esm/src/core/PanelBuilders/StandardFieldConfigBuilders.js +0 -52
  203. package/dist/esm/src/core/PanelBuilders/VizConfigBuilder.js +0 -78
  204. package/dist/esm/src/core/PanelBuilders/VizConfigBuilders.js +0 -114
  205. package/dist/esm/src/core/PanelBuilders/VizPanelBuilder.js +0 -162
  206. package/dist/esm/src/core/PanelBuilders/index.js +0 -116
  207. package/dist/esm/src/core/SceneComponentWrapper.js +0 -57
  208. package/dist/esm/src/core/SceneDataNode.js +0 -43
  209. package/dist/esm/src/core/SceneObjectBase.js +0 -286
  210. package/dist/esm/src/core/SceneObjectRef.js +0 -32
  211. package/dist/esm/src/core/SceneTimeRange.js +0 -231
  212. package/dist/esm/src/core/SceneTimeRangeTransformerBase.js +0 -35
  213. package/dist/esm/src/core/SceneTimeZoneOverride.js +0 -63
  214. package/dist/esm/src/core/events.js +0 -11
  215. package/dist/esm/src/core/sceneGraph/getTimeRange.js +0 -10
  216. package/dist/esm/src/core/sceneGraph/index.js +0 -25
  217. package/dist/esm/src/core/sceneGraph/sceneGraph.js +0 -178
  218. package/dist/esm/src/core/sceneGraph/utils.js +0 -64
  219. package/dist/esm/src/core/types.js +0 -15
  220. package/dist/esm/src/index.js +0 -108
  221. package/dist/esm/src/querying/DataLayersMerger.js +0 -46
  222. package/dist/esm/src/querying/DataProviderProxy.js +0 -37
  223. package/dist/esm/src/querying/DataProviderSharer.js +0 -108
  224. package/dist/esm/src/querying/ExtraQueryProvider.js +0 -6
  225. package/dist/esm/src/querying/RuntimeDataSource.js +0 -49
  226. package/dist/esm/src/querying/SceneDataLayerSet.js +0 -100
  227. package/dist/esm/src/querying/SceneDataTransformer.js +0 -178
  228. package/dist/esm/src/querying/SceneQueryRunner.js +0 -468
  229. package/dist/esm/src/querying/extraQueryProcessingOperator.js +0 -46
  230. package/dist/esm/src/querying/getEnrichedDataRequest.js +0 -12
  231. package/dist/esm/src/querying/layers/SceneDataLayerBase.js +0 -112
  232. package/dist/esm/src/querying/layers/SceneDataLayerControls.js +0 -51
  233. package/dist/esm/src/querying/layers/annotations/AnnotationsDataLayer.js +0 -130
  234. package/dist/esm/src/querying/layers/annotations/filterAnnotations.js +0 -85
  235. package/dist/esm/src/querying/layers/annotations/standardAnnotationQuery.js +0 -121
  236. package/dist/esm/src/querying/layers/annotations/standardAnnotationsSupport.js +0 -211
  237. package/dist/esm/src/querying/layers/annotations/utils.js +0 -77
  238. package/dist/esm/src/querying/layers/index.js +0 -2
  239. package/dist/esm/src/querying/registerQueryWithController.js +0 -41
  240. package/dist/esm/src/services/SceneObjectUrlSyncConfig.js +0 -30
  241. package/dist/esm/src/services/UniqueUrlKeyMapper.js +0 -45
  242. package/dist/esm/src/services/UrlSyncContextProvider.js +0 -17
  243. package/dist/esm/src/services/UrlSyncManager.js +0 -167
  244. package/dist/esm/src/services/useUrlSync.js +0 -29
  245. package/dist/esm/src/services/utils.js +0 -75
  246. package/dist/esm/src/utils/ControlsLabel.js +0 -107
  247. package/dist/esm/src/utils/LoadingIndicator.js +0 -19
  248. package/dist/esm/src/utils/SafeSerializableSceneObject.js +0 -39
  249. package/dist/esm/src/utils/compatibility/setWindowGrafanaSceneContext.js +0 -16
  250. package/dist/esm/src/utils/date.js +0 -15
  251. package/dist/esm/src/utils/evaluateTimeRange.js +0 -16
  252. package/dist/esm/src/utils/explore.js +0 -47
  253. package/dist/esm/src/utils/getCompareSeriesRefId.js +0 -4
  254. package/dist/esm/src/utils/getDataSource.js +0 -18
  255. package/dist/esm/src/utils/getMessageFromError.js +0 -24
  256. package/dist/esm/src/utils/metricTree.js +0 -53
  257. package/dist/esm/src/utils/parseUrlParam.js +0 -41
  258. package/dist/esm/src/utils/utils.js +0 -11
  259. package/dist/esm/src/utils/wrapInSafeSerializableSceneObject.js +0 -30
  260. package/dist/esm/src/utils/writeSceneLog.js +0 -12
  261. package/dist/esm/src/variables/VariableDependencyConfig.js +0 -150
  262. package/dist/esm/src/variables/VariableValueRecorder.js +0 -71
  263. package/dist/esm/src/variables/adhoc/AdHocFilterBuilder.js +0 -24
  264. package/dist/esm/src/variables/adhoc/AdHocFilterRenderer.js +0 -303
  265. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +0 -162
  266. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js +0 -20
  267. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +0 -640
  268. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +0 -65
  269. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js +0 -146
  270. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js +0 -114
  271. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/useFloatingInteractions.js +0 -68
  272. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/utils.js +0 -146
  273. package/dist/esm/src/variables/adhoc/AdHocFiltersVariable.js +0 -289
  274. package/dist/esm/src/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js +0 -76
  275. package/dist/esm/src/variables/adhoc/getAdhocOptionSearcher.js +0 -13
  276. package/dist/esm/src/variables/adhoc/patchGetAdhocFilters.js +0 -47
  277. package/dist/esm/src/variables/components/VariableValueControl.js +0 -23
  278. package/dist/esm/src/variables/components/VariableValueInput.js +0 -33
  279. package/dist/esm/src/variables/components/VariableValueSelect.js +0 -228
  280. package/dist/esm/src/variables/components/VariableValueSelectors.js +0 -72
  281. package/dist/esm/src/variables/components/getOptionSearcher.js +0 -15
  282. package/dist/esm/src/variables/constants.js +0 -9
  283. package/dist/esm/src/variables/getEnrichedFiltersRequest.js +0 -12
  284. package/dist/esm/src/variables/groupby/GroupByVariable.js +0 -259
  285. package/dist/esm/src/variables/groupby/GroupByVariableUrlSyncHandler.js +0 -63
  286. package/dist/esm/src/variables/groupby/findActiveGroupByVariablesByUid.js +0 -13
  287. package/dist/esm/src/variables/interpolation/ScopedVarsVariable.js +0 -40
  288. package/dist/esm/src/variables/interpolation/defaults.js +0 -21
  289. package/dist/esm/src/variables/interpolation/fieldAccessorCache.js +0 -13
  290. package/dist/esm/src/variables/interpolation/formatRegistry.js +0 -296
  291. package/dist/esm/src/variables/interpolation/sceneInterpolator.js +0 -87
  292. package/dist/esm/src/variables/lookupVariable.js +0 -20
  293. package/dist/esm/src/variables/macros/AllVariablesMacro.js +0 -57
  294. package/dist/esm/src/variables/macros/contextMacros.js +0 -43
  295. package/dist/esm/src/variables/macros/dataMacros.js +0 -134
  296. package/dist/esm/src/variables/macros/index.js +0 -35
  297. package/dist/esm/src/variables/macros/templateProxies.js +0 -51
  298. package/dist/esm/src/variables/macros/timeMacros.js +0 -86
  299. package/dist/esm/src/variables/macros/types.js +0 -11
  300. package/dist/esm/src/variables/macros/urlMacros.js +0 -56
  301. package/dist/esm/src/variables/sets/SceneVariableSet.js +0 -254
  302. package/dist/esm/src/variables/types.js +0 -11
  303. package/dist/esm/src/variables/utils.js +0 -172
  304. package/dist/esm/src/variables/variants/ConstantVariable.js +0 -38
  305. package/dist/esm/src/variables/variants/CustomVariable.js +0 -60
  306. package/dist/esm/src/variables/variants/DataSourceVariable.js +0 -88
  307. package/dist/esm/src/variables/variants/IntervalVariable.js +0 -117
  308. package/dist/esm/src/variables/variants/JsonVariable.js +0 -193
  309. package/dist/esm/src/variables/variants/LocalValueVariable.js +0 -56
  310. package/dist/esm/src/variables/variants/MultiValueVariable.js +0 -295
  311. package/dist/esm/src/variables/variants/TestVariable.js +0 -117
  312. package/dist/esm/src/variables/variants/TextBoxVariable.js +0 -61
  313. package/dist/esm/src/variables/variants/guards.js +0 -27
  314. package/dist/esm/src/variables/variants/query/QueryVariable.js +0 -139
  315. package/dist/esm/src/variables/variants/query/createQueryVariableRunner.js +0 -129
  316. package/dist/esm/src/variables/variants/query/guards.js +0 -28
  317. package/dist/esm/src/variables/variants/query/toMetricFindValues.js +0 -96
  318. package/dist/esm/src/variables/variants/query/utils.js +0 -124
  319. package/dist/esm/variables/variants/JsonVariable.js +0 -96
  320. package/dist/esm/variables/variants/json/JsonVariable.js +0 -95
  321. package/dist/esm/variables/variants/json/JsonVariableOptionProviders.js +0 -70
@@ -1,406 +0,0 @@
1
- import { toUtc, getPanelOptionsWithDefaults, renderMarkdown, applyFieldOverrides, compareArrayValues, compareDataFrameStructures, CoreApp, DashboardCursorSync, PanelPlugin, PluginType } from '@grafana/data';
2
- import { getPluginImportUtils, config, getAppEvents } from '@grafana/runtime';
3
- import { SceneObjectBase } from '../../core/SceneObjectBase.js';
4
- import { sceneGraph } from '../../core/sceneGraph/index.js';
5
- import { VizPanelRenderer } from './VizPanelRenderer.js';
6
- import { VariableDependencyConfig } from '../../variables/VariableDependencyConfig.js';
7
- import { seriesVisibilityConfigFactory } from './seriesVisibilityConfigFactory.js';
8
- import { emptyPanelData } from '../../core/SceneDataNode.js';
9
- import { changeSeriesColorConfigFactory } from './colorSeriesConfigFactory.js';
10
- import { loadPanelPluginSync } from './registerRuntimePanelPlugin.js';
11
- import { getCursorSyncScope } from '../../behaviors/CursorSync.js';
12
- import { mergeWith, cloneDeep, isArray, merge, isEmpty } from 'lodash';
13
- import { UserActionEvent } from '../../core/events.js';
14
- import { evaluateTimeRange } from '../../utils/evaluateTimeRange.js';
15
- import { LiveNowTimer } from '../../behaviors/LiveNowTimer.js';
16
-
17
- var __defProp = Object.defineProperty;
18
- var __defProps = Object.defineProperties;
19
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
20
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
21
- var __hasOwnProp = Object.prototype.hasOwnProperty;
22
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
23
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
24
- var __spreadValues = (a, b) => {
25
- for (var prop in b || (b = {}))
26
- if (__hasOwnProp.call(b, prop))
27
- __defNormalProp(a, prop, b[prop]);
28
- if (__getOwnPropSymbols)
29
- for (var prop of __getOwnPropSymbols(b)) {
30
- if (__propIsEnum.call(b, prop))
31
- __defNormalProp(a, prop, b[prop]);
32
- }
33
- return a;
34
- };
35
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
36
- class VizPanel extends SceneObjectBase {
37
- constructor(state) {
38
- var _a;
39
- super(__spreadValues({
40
- options: {},
41
- fieldConfig: { defaults: {}, overrides: [] },
42
- title: "Title",
43
- pluginId: "timeseries",
44
- _renderCounter: 0
45
- }, state));
46
- this._variableDependency = new VariableDependencyConfig(this, {
47
- statePaths: ["title", "options", "fieldConfig"]
48
- });
49
- this._structureRev = 0;
50
- this.onTimeRangeChange = (timeRange) => {
51
- const sceneTimeRange = sceneGraph.getTimeRange(this);
52
- sceneTimeRange.onTimeRangeChange({
53
- raw: {
54
- from: toUtc(timeRange.from),
55
- to: toUtc(timeRange.to)
56
- },
57
- from: toUtc(timeRange.from),
58
- to: toUtc(timeRange.to)
59
- });
60
- };
61
- this.getTimeRange = (data) => {
62
- const liveNowTimer = sceneGraph.findObject(this, (o) => o instanceof LiveNowTimer);
63
- const sceneTimeRange = sceneGraph.getTimeRange(this);
64
- if (liveNowTimer instanceof LiveNowTimer && liveNowTimer.isEnabled) {
65
- return evaluateTimeRange(
66
- sceneTimeRange.state.from,
67
- sceneTimeRange.state.to,
68
- sceneTimeRange.getTimeZone(),
69
- sceneTimeRange.state.fiscalYearStartMonth,
70
- sceneTimeRange.state.UNSAFE_nowDelay
71
- );
72
- }
73
- const plugin = this.getPlugin();
74
- if (plugin && !plugin.meta.skipDataQuery && data && data.timeRange) {
75
- return data.timeRange;
76
- }
77
- return sceneTimeRange.state.value;
78
- };
79
- this.onTitleChange = (title) => {
80
- this.setState({ title });
81
- };
82
- this.onDescriptionChange = (description) => {
83
- this.setState({ description });
84
- };
85
- this.onDisplayModeChange = (displayMode) => {
86
- this.setState({ displayMode });
87
- };
88
- this.onToggleCollapse = (collapsed) => {
89
- this.setState({
90
- collapsed
91
- });
92
- };
93
- this.onOptionsChange = (optionsUpdate, replace = false, isAfterPluginChange = false) => {
94
- var _a;
95
- const { fieldConfig, options } = this.state;
96
- const nextOptions = replace ? optionsUpdate : mergeWith(cloneDeep(options), optionsUpdate, (objValue, srcValue, key, obj) => {
97
- if (isArray(srcValue)) {
98
- return srcValue;
99
- }
100
- if (objValue !== srcValue && typeof srcValue === "undefined") {
101
- obj[key] = srcValue;
102
- return;
103
- }
104
- return;
105
- });
106
- const withDefaults = getPanelOptionsWithDefaults({
107
- plugin: this._plugin,
108
- currentOptions: nextOptions,
109
- currentFieldConfig: fieldConfig,
110
- isAfterPluginChange
111
- });
112
- this.setState({
113
- options: withDefaults.options,
114
- _renderCounter: ((_a = this.state._renderCounter) != null ? _a : 0) + 1
115
- });
116
- };
117
- this.onFieldConfigChange = (fieldConfigUpdate, replace) => {
118
- const { fieldConfig, options } = this.state;
119
- const nextFieldConfig = replace ? fieldConfigUpdate : merge(cloneDeep(fieldConfig), fieldConfigUpdate);
120
- const withDefaults = getPanelOptionsWithDefaults({
121
- plugin: this._plugin,
122
- currentOptions: options,
123
- currentFieldConfig: nextFieldConfig,
124
- isAfterPluginChange: false
125
- });
126
- this._dataWithFieldConfig = void 0;
127
- this.setState({ fieldConfig: withDefaults.fieldConfig });
128
- };
129
- this.interpolate = (value, scoped, format) => {
130
- return sceneGraph.interpolate(this, value, scoped, format);
131
- };
132
- this.getDescription = () => {
133
- this.publishEvent(new UserActionEvent({ origin: this, interaction: "panel-description-shown" }), true);
134
- const { description } = this.state;
135
- if (description) {
136
- const markdown = this.interpolate(description);
137
- return renderMarkdown(markdown);
138
- }
139
- return "";
140
- };
141
- this.onCancelQuery = () => {
142
- var _a;
143
- this.publishEvent(new UserActionEvent({ origin: this, interaction: "panel-cancel-query-clicked" }), true);
144
- const data = sceneGraph.getData(this);
145
- (_a = data.cancelQuery) == null ? void 0 : _a.call(data);
146
- };
147
- this.onStatusMessageClick = () => {
148
- this.publishEvent(new UserActionEvent({ origin: this, interaction: "panel-status-message-clicked" }), true);
149
- };
150
- this._onSeriesColorChange = (label, color) => {
151
- this.onFieldConfigChange(changeSeriesColorConfigFactory(label, color, this.state.fieldConfig));
152
- };
153
- this._onSeriesVisibilityChange = (label, mode) => {
154
- if (!this._dataWithFieldConfig) {
155
- return;
156
- }
157
- this.onFieldConfigChange(
158
- seriesVisibilityConfigFactory(label, mode, this.state.fieldConfig, this._dataWithFieldConfig.series),
159
- true
160
- );
161
- };
162
- this._onInstanceStateChange = (state) => {
163
- if (this._panelContext) {
164
- this._panelContext = __spreadProps(__spreadValues({}, this._panelContext), {
165
- instanceState: state
166
- });
167
- }
168
- this.setState({ _pluginInstanceState: state });
169
- };
170
- this._onToggleLegendSort = (sortKey) => {
171
- const legendOptions = this.state.options.legend;
172
- if (!legendOptions) {
173
- return;
174
- }
175
- let sortDesc = legendOptions.sortDesc;
176
- let sortBy = legendOptions.sortBy;
177
- if (sortKey !== sortBy) {
178
- sortDesc = void 0;
179
- }
180
- if (sortDesc === false) {
181
- sortBy = void 0;
182
- sortDesc = void 0;
183
- } else {
184
- sortDesc = !sortDesc;
185
- sortBy = sortKey;
186
- }
187
- this.onOptionsChange(
188
- __spreadProps(__spreadValues({}, this.state.options), {
189
- legend: __spreadProps(__spreadValues({}, legendOptions), { sortBy, sortDesc })
190
- }),
191
- true
192
- );
193
- };
194
- this.addActivationHandler(() => {
195
- this._onActivate();
196
- });
197
- (_a = state.menu) == null ? void 0 : _a.addActivationHandler(() => {
198
- this.publishEvent(new UserActionEvent({ origin: this, interaction: "panel-menu-shown" }), true);
199
- });
200
- }
201
- _onActivate() {
202
- if (!this._plugin) {
203
- this._loadPlugin(this.state.pluginId);
204
- }
205
- }
206
- forceRender() {
207
- var _a;
208
- this.setState({ _renderCounter: ((_a = this.state._renderCounter) != null ? _a : 0) + 1 });
209
- }
210
- async _loadPlugin(pluginId, overwriteOptions, overwriteFieldConfig, isAfterPluginChange) {
211
- const plugin = loadPanelPluginSync(pluginId);
212
- if (plugin) {
213
- this._pluginLoaded(plugin, overwriteOptions, overwriteFieldConfig, isAfterPluginChange);
214
- } else {
215
- const { importPanelPlugin } = getPluginImportUtils();
216
- try {
217
- const result = await importPanelPlugin(pluginId);
218
- this._pluginLoaded(result, overwriteOptions, overwriteFieldConfig, isAfterPluginChange);
219
- } catch (err) {
220
- this._pluginLoaded(getPanelPluginNotFound(pluginId));
221
- if (err instanceof Error) {
222
- this.setState({ _pluginLoadError: err.message });
223
- }
224
- }
225
- }
226
- }
227
- getLegacyPanelId() {
228
- const panelId = parseInt(this.state.key.replace("panel-", ""), 10);
229
- if (isNaN(panelId)) {
230
- return 0;
231
- }
232
- return panelId;
233
- }
234
- async _pluginLoaded(plugin, overwriteOptions, overwriteFieldConfig, isAfterPluginChange) {
235
- const { options, fieldConfig, title, pluginVersion, _UNSAFE_customMigrationHandler } = this.state;
236
- const panel = {
237
- title,
238
- options,
239
- fieldConfig,
240
- id: this.getLegacyPanelId(),
241
- type: plugin.meta.id,
242
- pluginVersion
243
- };
244
- if (overwriteOptions) {
245
- panel.options = overwriteOptions;
246
- }
247
- if (overwriteFieldConfig) {
248
- panel.fieldConfig = overwriteFieldConfig;
249
- }
250
- const currentVersion = this._getPluginVersion(plugin);
251
- _UNSAFE_customMigrationHandler == null ? void 0 : _UNSAFE_customMigrationHandler(panel, plugin);
252
- if (plugin.onPanelMigration && currentVersion !== pluginVersion && !isAfterPluginChange) {
253
- panel.options = await plugin.onPanelMigration(panel);
254
- }
255
- const withDefaults = getPanelOptionsWithDefaults({
256
- plugin,
257
- currentOptions: panel.options,
258
- currentFieldConfig: panel.fieldConfig,
259
- isAfterPluginChange: isAfterPluginChange != null ? isAfterPluginChange : false
260
- });
261
- this._plugin = plugin;
262
- this.setState({
263
- options: withDefaults.options,
264
- fieldConfig: withDefaults.fieldConfig,
265
- pluginVersion: currentVersion,
266
- pluginId: plugin.meta.id
267
- });
268
- if (plugin.meta.skipDataQuery) {
269
- const sceneTimeRange = sceneGraph.getTimeRange(this);
270
- this._subs.add(sceneTimeRange.subscribeToState(() => this.forceRender()));
271
- }
272
- }
273
- _getPluginVersion(plugin) {
274
- return plugin && plugin.meta.info.version ? plugin.meta.info.version : config.buildInfo.version;
275
- }
276
- getPlugin() {
277
- return this._plugin;
278
- }
279
- getPanelContext() {
280
- var _a;
281
- (_a = this._panelContext) != null ? _a : this._panelContext = this.buildPanelContext();
282
- return this._panelContext;
283
- }
284
- async changePluginType(pluginId, newOptions, newFieldConfig) {
285
- var _a, _b;
286
- const { options: prevOptions, fieldConfig: prevFieldConfig, pluginId: prevPluginId } = this.state;
287
- this._dataWithFieldConfig = void 0;
288
- const isAfterPluginChange = this.state.pluginId !== pluginId;
289
- await this._loadPlugin(pluginId, newOptions != null ? newOptions : {}, newFieldConfig, isAfterPluginChange);
290
- const panel = {
291
- title: this.state.title,
292
- options: this.state.options,
293
- fieldConfig: this.state.fieldConfig,
294
- id: 1,
295
- type: pluginId
296
- };
297
- const updatedOptions = (_b = (_a = this._plugin) == null ? void 0 : _a.onPanelTypeChanged) == null ? void 0 : _b.call(_a, panel, prevPluginId, prevOptions, prevFieldConfig);
298
- if (updatedOptions && !isEmpty(updatedOptions)) {
299
- this.onOptionsChange(updatedOptions, true, true);
300
- }
301
- }
302
- clearFieldConfigCache() {
303
- this._dataWithFieldConfig = void 0;
304
- }
305
- applyFieldConfig(rawData) {
306
- var _a, _b, _c, _d;
307
- const plugin = this._plugin;
308
- if (!plugin || plugin.meta.skipDataQuery || !rawData) {
309
- return emptyPanelData;
310
- }
311
- if (this._prevData === rawData && this._dataWithFieldConfig) {
312
- return this._dataWithFieldConfig;
313
- }
314
- const pluginDataSupport = plugin.dataSupport || { alertStates: false, annotations: false };
315
- const fieldConfigRegistry = plugin.fieldConfigRegistry;
316
- const prevFrames = (_b = (_a = this._dataWithFieldConfig) == null ? void 0 : _a.series) != null ? _b : [];
317
- const newFrames = applyFieldOverrides({
318
- data: rawData.series,
319
- fieldConfig: this.state.fieldConfig,
320
- fieldConfigRegistry,
321
- replaceVariables: this.interpolate,
322
- theme: config.theme2,
323
- timeZone: (_c = rawData.request) == null ? void 0 : _c.timezone
324
- });
325
- if (!compareArrayValues(newFrames, prevFrames, compareDataFrameStructures)) {
326
- this._structureRev++;
327
- }
328
- this._dataWithFieldConfig = __spreadProps(__spreadValues({}, rawData), {
329
- structureRev: this._structureRev,
330
- series: newFrames
331
- });
332
- if (this._dataWithFieldConfig.annotations) {
333
- this._dataWithFieldConfig.annotations = applyFieldOverrides({
334
- data: this._dataWithFieldConfig.annotations,
335
- fieldConfig: {
336
- defaults: {},
337
- overrides: []
338
- },
339
- fieldConfigRegistry,
340
- replaceVariables: this.interpolate,
341
- theme: config.theme2,
342
- timeZone: (_d = rawData.request) == null ? void 0 : _d.timezone
343
- });
344
- }
345
- if (!pluginDataSupport.alertStates) {
346
- this._dataWithFieldConfig.alertState = void 0;
347
- }
348
- if (!pluginDataSupport.annotations) {
349
- this._dataWithFieldConfig.annotations = void 0;
350
- }
351
- this._prevData = rawData;
352
- return this._dataWithFieldConfig;
353
- }
354
- buildPanelContext() {
355
- const sync = getCursorSyncScope(this);
356
- const context = {
357
- eventsScope: sync ? sync.getEventsScope() : "__global_",
358
- eventBus: sync ? sync.getEventsBus(this) : getAppEvents(),
359
- app: CoreApp.Unknown,
360
- sync: () => {
361
- if (sync) {
362
- return sync.state.sync;
363
- }
364
- return DashboardCursorSync.Off;
365
- },
366
- onSeriesColorChange: this._onSeriesColorChange,
367
- onToggleSeriesVisibility: this._onSeriesVisibilityChange,
368
- onToggleLegendSort: this._onToggleLegendSort,
369
- onInstanceStateChange: this._onInstanceStateChange
370
- };
371
- if (this.state.extendPanelContext) {
372
- this.state.extendPanelContext(this, context);
373
- }
374
- return context;
375
- }
376
- }
377
- VizPanel.Component = VizPanelRenderer;
378
- function getPanelPluginNotFound(id) {
379
- const plugin = new PanelPlugin(() => null);
380
- plugin.meta = {
381
- id,
382
- name: id,
383
- sort: 100,
384
- type: PluginType.panel,
385
- module: "",
386
- baseUrl: "",
387
- info: {
388
- author: {
389
- name: ""
390
- },
391
- description: "",
392
- links: [],
393
- logos: {
394
- large: "",
395
- small: "public/img/grafana_icon.svg"
396
- },
397
- screenshots: [],
398
- updated: "",
399
- version: ""
400
- }
401
- };
402
- return plugin;
403
- }
404
-
405
- export { VizPanel };
406
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVml6UGFuZWwuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL1ZpelBhbmVsL1ZpelBhbmVsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBYnNvbHV0ZVRpbWVSYW5nZSxcbiAgRmllbGRDb25maWdTb3VyY2UsXG4gIFBhbmVsTW9kZWwsXG4gIFBhbmVsUGx1Z2luLFxuICB0b1V0YyxcbiAgZ2V0UGFuZWxPcHRpb25zV2l0aERlZmF1bHRzLFxuICBTY29wZWRWYXJzLFxuICBJbnRlcnBvbGF0ZUZ1bmN0aW9uLFxuICBDb3JlQXBwLFxuICBEYXNoYm9hcmRDdXJzb3JTeW5jLFxuICBQYW5lbERhdGEsXG4gIGNvbXBhcmVBcnJheVZhbHVlcyxcbiAgY29tcGFyZURhdGFGcmFtZVN0cnVjdHVyZXMsXG4gIGFwcGx5RmllbGRPdmVycmlkZXMsXG4gIFBsdWdpblR5cGUsXG4gIHJlbmRlck1hcmtkb3duLFxuICBQYW5lbFBsdWdpbkRhdGFTdXBwb3J0LFxufSBmcm9tICdAZ3JhZmFuYS9kYXRhJztcbmltcG9ydCB7IFBhbmVsQ29udGV4dCwgU2VyaWVzVmlzaWJpbGl0eUNoYW5nZU1vZGUsIFZpekxlZ2VuZE9wdGlvbnMgfSBmcm9tICdAZ3JhZmFuYS91aSc7XG5pbXBvcnQgeyBjb25maWcsIGdldEFwcEV2ZW50cywgZ2V0UGx1Z2luSW1wb3J0VXRpbHMgfSBmcm9tICdAZ3JhZmFuYS9ydW50aW1lJztcbmltcG9ydCB7IFNjZW5lT2JqZWN0QmFzZSB9IGZyb20gJy4uLy4uL2NvcmUvU2NlbmVPYmplY3RCYXNlJztcbmltcG9ydCB7IHNjZW5lR3JhcGggfSBmcm9tICcuLi8uLi9jb3JlL3NjZW5lR3JhcGgnO1xuaW1wb3J0IHsgRGVlcFBhcnRpYWwsIFNjZW5lT2JqZWN0LCBTY2VuZU9iamVjdFN0YXRlIH0gZnJvbSAnLi4vLi4vY29yZS90eXBlcyc7XG5cbmltcG9ydCB7IFZpelBhbmVsUmVuZGVyZXIgfSBmcm9tICcuL1ZpelBhbmVsUmVuZGVyZXInO1xuaW1wb3J0IHsgVml6UGFuZWxNZW51IH0gZnJvbSAnLi9WaXpQYW5lbE1lbnUnO1xuaW1wb3J0IHsgVmFyaWFibGVEZXBlbmRlbmN5Q29uZmlnIH0gZnJvbSAnLi4vLi4vdmFyaWFibGVzL1ZhcmlhYmxlRGVwZW5kZW5jeUNvbmZpZyc7XG5pbXBvcnQgeyBWYXJpYWJsZUN1c3RvbUZvcm1hdHRlckZuIH0gZnJvbSAnLi4vLi4vdmFyaWFibGVzL3R5cGVzJztcbmltcG9ydCB7IHNlcmllc1Zpc2liaWxpdHlDb25maWdGYWN0b3J5IH0gZnJvbSAnLi9zZXJpZXNWaXNpYmlsaXR5Q29uZmlnRmFjdG9yeSc7XG5pbXBvcnQgeyBlbXB0eVBhbmVsRGF0YSB9IGZyb20gJy4uLy4uL2NvcmUvU2NlbmVEYXRhTm9kZSc7XG5pbXBvcnQgeyBjaGFuZ2VTZXJpZXNDb2xvckNvbmZpZ0ZhY3RvcnkgfSBmcm9tICcuL2NvbG9yU2VyaWVzQ29uZmlnRmFjdG9yeSc7XG5pbXBvcnQgeyBsb2FkUGFuZWxQbHVnaW5TeW5jIH0gZnJvbSAnLi9yZWdpc3RlclJ1bnRpbWVQYW5lbFBsdWdpbic7XG5pbXBvcnQgeyBnZXRDdXJzb3JTeW5jU2NvcGUgfSBmcm9tICcuLi8uLi9iZWhhdmlvcnMvQ3Vyc29yU3luYyc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIGlzQXJyYXksIGlzRW1wdHksIG1lcmdlLCBtZXJnZVdpdGggfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgVXNlckFjdGlvbkV2ZW50IH0gZnJvbSAnLi4vLi4vY29yZS9ldmVudHMnO1xuaW1wb3J0IHsgZXZhbHVhdGVUaW1lUmFuZ2UgfSBmcm9tICcuLi8uLi91dGlscy9ldmFsdWF0ZVRpbWVSYW5nZSc7XG5pbXBvcnQgeyBMaXZlTm93VGltZXIgfSBmcm9tICcuLi8uLi9iZWhhdmlvcnMvTGl2ZU5vd1RpbWVyJztcblxuZXhwb3J0IGludGVyZmFjZSBWaXpQYW5lbFN0YXRlPFRPcHRpb25zID0ge30sIFRGaWVsZENvbmZpZyA9IHt9PiBleHRlbmRzIFNjZW5lT2JqZWN0U3RhdGUge1xuICAvKipcbiAgICogVGhpcyBpcyB1c3VhbGx5IGEgcGx1Z2luIGlkIHRoYXQgcmVmZXJlbmNlcyBhIGNvcmUgcGx1Z2luIG9yIGFuIGV4dGVybmFsIHBsdWdpbi4gQnV0IHRoaXMgY2FuIGFsc28gcmVmZXJlbmNlIGFcbiAgICogcnVudGltZSByZWdpc3RlcmVkIFBhbmVsUGx1Z2luIHJlZ2lzdGVyZWQgdmlhIGZ1bmN0aW9uIHJlZ2lzdGVyU2NlbmVQYW5lbFBsdWdpbi5cbiAgICovXG4gIHBsdWdpbklkOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBvcHRpb25zOiBEZWVwUGFydGlhbDxUT3B0aW9ucz47XG4gIGZpZWxkQ29uZmlnOiBGaWVsZENvbmZpZ1NvdXJjZTxEZWVwUGFydGlhbDxURmllbGRDb25maWc+PjtcbiAgcGx1Z2luVmVyc2lvbj86IHN0cmluZztcbiAgZGlzcGxheU1vZGU/OiAnZGVmYXVsdCcgfCAndHJhbnNwYXJlbnQnO1xuICAvKipcbiAgICogT25seSBzaG93cyBoZWFkZXIgb24gaG92ZXIsIGFic29sdXRseSBwb3NpdGlvbmVkIGFib3ZlIHRoZSBwYW5lbC5cbiAgICovXG4gIGhvdmVySGVhZGVyPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE9mZnNldCBob3ZlckhlYWRlciBwb3NpdGlvbiBvbiB0aGUgeSBheGlzXG4gICAqL1xuICBob3ZlckhlYWRlck9mZnNldD86IG51bWJlcjtcbiAgLyoqXG4gICAqIE9ubHkgc2hvd3Mgdml6UGFuZWxNZW51IG9uIGhvdmVyIGlmIGZhbHNlLCBvdGhlcndpc2UgdGhlIG1lbnUgaXMgYWx3YXlzIHZpc2libGUgaW4gdGhlIGhlYWRlclxuICAgKi9cbiAgc2hvd01lbnVBbHdheXM/OiBib29sZWFuO1xuICAvKipcbiAgICogRGVmaW5lcyBhIG1lbnUgaW4gdGhlIHRvcCByaWdodCBvZiB0aGUgcGFuZWwuIFRoZSBtZW51IG9iamVjdCBpcyBvbmx5IGFjdGl2YXRlZCB3aGVuIHRoZSBkcm9wZG93biBtZW51IGl0c2VsZiBpcyBzaG93bi5cbiAgICogU28gdGhlIGJlc3Qgd2F5IHRvIGFkZCBkeW5hbWljIG1lbnUgYWN0aW9ucyBhbmQgbGlua3MgaXMgYnkgYWRkaW5nIHRoZW0gaW4gYSBiZWhhdmlvciBhdHRhY2hlZCB0byB0aGUgbWVudS5cbiAgICovXG4gIG1lbnU/OiBWaXpQYW5lbE1lbnU7XG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgbWVudSB0aGF0IHJlbmRlcnMgcGFuZWwgbGluay5cbiAgICoqL1xuICB0aXRsZUl0ZW1zPzogUmVhY3QuUmVhY3ROb2RlIHwgU2NlbmVPYmplY3QgfCBTY2VuZU9iamVjdFtdO1xuICBzZXJpZXNMaW1pdD86IG51bWJlcjtcbiAgc2VyaWVzTGltaXRTaG93QWxsPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEFkZCBhY3Rpb24gdG8gdGhlIHRvcCByaWdodCBwYW5lbCBoZWFkZXJcbiAgICovXG4gIGhlYWRlckFjdGlvbnM/OiBSZWFjdC5SZWFjdE5vZGUgfCBTY2VuZU9iamVjdCB8IFNjZW5lT2JqZWN0W107XG4gIC8qKlxuICAgKiBNYWlubHkgZm9yIGFkdmFuY2VkIHVzZSBjYXNlcyB0aGF0IG5lZWQgY3VzdG9tIGhhbmRsaW5nIG9mIFBhbmVsQ29udGV4dCBjYWxsYmFja3MuXG4gICAqL1xuICBleHRlbmRQYW5lbENvbnRleHQ/OiAodml6UGFuZWw6IFZpelBhbmVsLCBjb250ZXh0OiBQYW5lbENvbnRleHQpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFNldHMgcGFuZWwgY2hyb21lIGNvbGxhcHNlZCBzdGF0ZVxuICAgKi9cbiAgY29sbGFwc2libGU/OiBib29sZWFuO1xuICBjb2xsYXBzZWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIE9ubHkgZm9yIHVzZSBmcm9tIGNvcmUgdG8gaGFuZGxlIG1pZ3JhdGlvbiBmcm9tIG9sZCBhbmd1bGFyIHBhbmVsc1xuICAgKiovXG4gIF9VTlNBRkVfY3VzdG9tTWlncmF0aW9uSGFuZGxlcj86IChwYW5lbDogUGFuZWxNb2RlbCwgcGx1Z2luOiBQYW5lbFBsdWdpbikgPT4gdm9pZDtcbiAgLyoqIEludGVybmFsICovXG4gIF9wbHVnaW5Mb2FkRXJyb3I/OiBzdHJpbmc7XG4gIC8qKiBJbnRlcm5hbCAqL1xuICBfcGx1Z2luSW5zdGFuY2VTdGF0ZT86IGFueTtcbiAgX3JlbmRlckNvdW50ZXI/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWaXpQYW5lbDxUT3B0aW9ucyA9IHt9LCBURmllbGRDb25maWcgZXh0ZW5kcyB7fSA9IHt9PiBleHRlbmRzIFNjZW5lT2JqZWN0QmFzZTxcbiAgVml6UGFuZWxTdGF0ZTxUT3B0aW9ucywgVEZpZWxkQ29uZmlnPlxuPiB7XG4gIHB1YmxpYyBzdGF0aWMgQ29tcG9uZW50ID0gVml6UGFuZWxSZW5kZXJlcjtcblxuICBwcm90ZWN0ZWQgX3ZhcmlhYmxlRGVwZW5kZW5jeSA9IG5ldyBWYXJpYWJsZURlcGVuZGVuY3lDb25maWcodGhpcywge1xuICAgIHN0YXRlUGF0aHM6IFsndGl0bGUnLCAnb3B0aW9ucycsICdmaWVsZENvbmZpZyddLFxuICB9KTtcblxuICAvLyBOb3QgcGFydCBvZiBzdGF0ZSBhcyB0aGlzIGlzIG5vdCBzZXJpYWxpemFibGVcbiAgcHJvdGVjdGVkIF9wYW5lbENvbnRleHQ/OiBQYW5lbENvbnRleHQ7XG4gIHByaXZhdGUgX3BsdWdpbj86IFBhbmVsUGx1Z2luO1xuICBwcml2YXRlIF9wcmV2RGF0YT86IFBhbmVsRGF0YTtcbiAgcHJpdmF0ZSBfZGF0YVdpdGhGaWVsZENvbmZpZz86IFBhbmVsRGF0YTtcbiAgcHJpdmF0ZSBfc3RydWN0dXJlUmV2OiBudW1iZXIgPSAwO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzdGF0ZTogUGFydGlhbDxWaXpQYW5lbFN0YXRlPFRPcHRpb25zLCBURmllbGRDb25maWc+Pikge1xuICAgIHN1cGVyKHtcbiAgICAgIG9wdGlvbnM6IHt9IGFzIFRPcHRpb25zLFxuICAgICAgZmllbGRDb25maWc6IHsgZGVmYXVsdHM6IHt9LCBvdmVycmlkZXM6IFtdIH0sXG4gICAgICB0aXRsZTogJ1RpdGxlJyxcbiAgICAgIHBsdWdpbklkOiAndGltZXNlcmllcycsXG4gICAgICBfcmVuZGVyQ291bnRlcjogMCxcbiAgICAgIC4uLnN0YXRlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRBY3RpdmF0aW9uSGFuZGxlcigoKSA9PiB7XG4gICAgICB0aGlzLl9vbkFjdGl2YXRlKCk7XG4gICAgfSk7XG5cbiAgICBzdGF0ZS5tZW51Py5hZGRBY3RpdmF0aW9uSGFuZGxlcigoKSA9PiB7XG4gICAgICB0aGlzLnB1Ymxpc2hFdmVudChuZXcgVXNlckFjdGlvbkV2ZW50KHsgb3JpZ2luOiB0aGlzLCBpbnRlcmFjdGlvbjogJ3BhbmVsLW1lbnUtc2hvd24nIH0pLCB0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX29uQWN0aXZhdGUoKSB7XG4gICAgaWYgKCF0aGlzLl9wbHVnaW4pIHtcbiAgICAgIHRoaXMuX2xvYWRQbHVnaW4odGhpcy5zdGF0ZS5wbHVnaW5JZCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZvcmNlUmVuZGVyKCk6IHZvaWQge1xuICAgIC8vIEluY3JlbWVudGluZyB0aGUgcmVuZGVyIGNvdW50ZXIgbWVhbnMgVml6UmVwZWF0ZXIgYW5kIGl0cyBjaGlsZHJlbiB3aWxsIGFsc28gcmUtcmVuZGVyXG4gICAgdGhpcy5zZXRTdGF0ZSh7IF9yZW5kZXJDb3VudGVyOiAodGhpcy5zdGF0ZS5fcmVuZGVyQ291bnRlciA/PyAwKSArIDEgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9sb2FkUGx1Z2luKFxuICAgIHBsdWdpbklkOiBzdHJpbmcsXG4gICAgb3ZlcndyaXRlT3B0aW9ucz86IERlZXBQYXJ0aWFsPHt9PixcbiAgICBvdmVyd3JpdGVGaWVsZENvbmZpZz86IEZpZWxkQ29uZmlnU291cmNlLFxuICAgIGlzQWZ0ZXJQbHVnaW5DaGFuZ2U/OiBib29sZWFuXG4gICkge1xuICAgIGNvbnN0IHBsdWdpbiA9IGxvYWRQYW5lbFBsdWdpblN5bmMocGx1Z2luSWQpO1xuXG4gICAgaWYgKHBsdWdpbikge1xuICAgICAgdGhpcy5fcGx1Z2luTG9hZGVkKHBsdWdpbiwgb3ZlcndyaXRlT3B0aW9ucywgb3ZlcndyaXRlRmllbGRDb25maWcsIGlzQWZ0ZXJQbHVnaW5DaGFuZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7IGltcG9ydFBhbmVsUGx1Z2luIH0gPSBnZXRQbHVnaW5JbXBvcnRVdGlscygpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbXBvcnRQYW5lbFBsdWdpbihwbHVnaW5JZCk7XG4gICAgICAgIHRoaXMuX3BsdWdpbkxvYWRlZChyZXN1bHQsIG92ZXJ3cml0ZU9wdGlvbnMsIG92ZXJ3cml0ZUZpZWxkQ29uZmlnLCBpc0FmdGVyUGx1Z2luQ2hhbmdlKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuICAgICAgICB0aGlzLl9wbHVnaW5Mb2FkZWQoZ2V0UGFuZWxQbHVnaW5Ob3RGb3VuZChwbHVnaW5JZCkpO1xuXG4gICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBfcGx1Z2luTG9hZEVycm9yOiBlcnIubWVzc2FnZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRMZWdhY3lQYW5lbElkKCkge1xuICAgIGNvbnN0IHBhbmVsSWQgPSBwYXJzZUludCh0aGlzLnN0YXRlLmtleSEucmVwbGFjZSgncGFuZWwtJywgJycpLCAxMCk7XG4gICAgaWYgKGlzTmFOKHBhbmVsSWQpKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFuZWxJZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3BsdWdpbkxvYWRlZChcbiAgICBwbHVnaW46IFBhbmVsUGx1Z2luLFxuICAgIG92ZXJ3cml0ZU9wdGlvbnM/OiBEZWVwUGFydGlhbDx7fT4sXG4gICAgb3ZlcndyaXRlRmllbGRDb25maWc/OiBGaWVsZENvbmZpZ1NvdXJjZSxcbiAgICBpc0FmdGVyUGx1Z2luQ2hhbmdlPzogYm9vbGVhblxuICApIHtcbiAgICBjb25zdCB7IG9wdGlvbnMsIGZpZWxkQ29uZmlnLCB0aXRsZSwgcGx1Z2luVmVyc2lvbiwgX1VOU0FGRV9jdXN0b21NaWdyYXRpb25IYW5kbGVyIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgY29uc3QgcGFuZWw6IFBhbmVsTW9kZWwgPSB7XG4gICAgICB0aXRsZSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBmaWVsZENvbmZpZyxcbiAgICAgIGlkOiB0aGlzLmdldExlZ2FjeVBhbmVsSWQoKSxcbiAgICAgIHR5cGU6IHBsdWdpbi5tZXRhLmlkLFxuICAgICAgcGx1Z2luVmVyc2lvbjogcGx1Z2luVmVyc2lvbixcbiAgICB9O1xuXG4gICAgaWYgKG92ZXJ3cml0ZU9wdGlvbnMpIHtcbiAgICAgIHBhbmVsLm9wdGlvbnMgPSBvdmVyd3JpdGVPcHRpb25zO1xuICAgIH1cblxuICAgIGlmIChvdmVyd3JpdGVGaWVsZENvbmZpZykge1xuICAgICAgcGFuZWwuZmllbGRDb25maWcgPSBvdmVyd3JpdGVGaWVsZENvbmZpZztcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VmVyc2lvbiA9IHRoaXMuX2dldFBsdWdpblZlcnNpb24ocGx1Z2luKTtcblxuICAgIF9VTlNBRkVfY3VzdG9tTWlncmF0aW9uSGFuZGxlcj8uKHBhbmVsLCBwbHVnaW4pO1xuXG4gICAgaWYgKHBsdWdpbi5vblBhbmVsTWlncmF0aW9uICYmIGN1cnJlbnRWZXJzaW9uICE9PSBwbHVnaW5WZXJzaW9uICYmICFpc0FmdGVyUGx1Z2luQ2hhbmdlKSB7XG4gICAgICAvLyBUaGVzZSBtaWdyYXRpb24gaGFuZGxlcnMgYWxzbyBtdXRhdGUgcGFuZWwuZmllbGRDb25maWcgdG8gbWlncmF0ZSBmaWVsZENvbmZpZ1xuICAgICAgcGFuZWwub3B0aW9ucyA9IGF3YWl0IHBsdWdpbi5vblBhbmVsTWlncmF0aW9uKHBhbmVsKTtcbiAgICB9XG5cbiAgICBjb25zdCB3aXRoRGVmYXVsdHMgPSBnZXRQYW5lbE9wdGlvbnNXaXRoRGVmYXVsdHMoe1xuICAgICAgcGx1Z2luLFxuICAgICAgY3VycmVudE9wdGlvbnM6IHBhbmVsLm9wdGlvbnMsXG4gICAgICBjdXJyZW50RmllbGRDb25maWc6IHBhbmVsLmZpZWxkQ29uZmlnLFxuICAgICAgaXNBZnRlclBsdWdpbkNoYW5nZTogaXNBZnRlclBsdWdpbkNoYW5nZSA/PyBmYWxzZSxcbiAgICB9KTtcblxuICAgIHRoaXMuX3BsdWdpbiA9IHBsdWdpbjtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgb3B0aW9uczogd2l0aERlZmF1bHRzLm9wdGlvbnMgYXMgRGVlcFBhcnRpYWw8VE9wdGlvbnM+LFxuICAgICAgZmllbGRDb25maWc6IHdpdGhEZWZhdWx0cy5maWVsZENvbmZpZyxcbiAgICAgIHBsdWdpblZlcnNpb246IGN1cnJlbnRWZXJzaW9uLFxuICAgICAgcGx1Z2luSWQ6IHBsdWdpbi5tZXRhLmlkLFxuICAgIH0pO1xuXG4gICAgLy8gTm9uIGRhdGEgcGFuZWxzIG5lZWRzIHRvIGJlIHJlLXJlbmRlcmVkIHdoZW4gdGltZSByYW5nZSBjaGFuZ2VcbiAgICBpZiAocGx1Z2luLm1ldGEuc2tpcERhdGFRdWVyeSkge1xuICAgICAgY29uc3Qgc2NlbmVUaW1lUmFuZ2UgPSBzY2VuZUdyYXBoLmdldFRpbWVSYW5nZSh0aGlzKTtcbiAgICAgIHRoaXMuX3N1YnMuYWRkKHNjZW5lVGltZVJhbmdlLnN1YnNjcmliZVRvU3RhdGUoKCkgPT4gdGhpcy5mb3JjZVJlbmRlcigpKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UGx1Z2luVmVyc2lvbihwbHVnaW46IFBhbmVsUGx1Z2luKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGx1Z2luICYmIHBsdWdpbi5tZXRhLmluZm8udmVyc2lvbiA/IHBsdWdpbi5tZXRhLmluZm8udmVyc2lvbiA6IGNvbmZpZy5idWlsZEluZm8udmVyc2lvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQbHVnaW4oKTogUGFuZWxQbHVnaW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9wbHVnaW47XG4gIH1cblxuICBwdWJsaWMgZ2V0UGFuZWxDb250ZXh0KCk6IFBhbmVsQ29udGV4dCB7XG4gICAgdGhpcy5fcGFuZWxDb250ZXh0ID8/PSB0aGlzLmJ1aWxkUGFuZWxDb250ZXh0KCk7XG5cbiAgICByZXR1cm4gdGhpcy5fcGFuZWxDb250ZXh0ITtcbiAgfVxuXG4gIHB1YmxpYyBvblRpbWVSYW5nZUNoYW5nZSA9ICh0aW1lUmFuZ2U6IEFic29sdXRlVGltZVJhbmdlKSA9PiB7XG4gICAgY29uc3Qgc2NlbmVUaW1lUmFuZ2UgPSBzY2VuZUdyYXBoLmdldFRpbWVSYW5nZSh0aGlzKTtcbiAgICBzY2VuZVRpbWVSYW5nZS5vblRpbWVSYW5nZUNoYW5nZSh7XG4gICAgICByYXc6IHtcbiAgICAgICAgZnJvbTogdG9VdGModGltZVJhbmdlLmZyb20pLFxuICAgICAgICB0bzogdG9VdGModGltZVJhbmdlLnRvKSxcbiAgICAgIH0sXG4gICAgICBmcm9tOiB0b1V0Yyh0aW1lUmFuZ2UuZnJvbSksXG4gICAgICB0bzogdG9VdGModGltZVJhbmdlLnRvKSxcbiAgICB9KTtcbiAgfTtcblxuICBwdWJsaWMgZ2V0VGltZVJhbmdlID0gKGRhdGE/OiBQYW5lbERhdGEpID0+IHtcbiAgICBjb25zdCBsaXZlTm93VGltZXIgPSBzY2VuZUdyYXBoLmZpbmRPYmplY3QodGhpcywgKG8pID0+IG8gaW5zdGFuY2VvZiBMaXZlTm93VGltZXIpO1xuICAgIGNvbnN0IHNjZW5lVGltZVJhbmdlID0gc2NlbmVHcmFwaC5nZXRUaW1lUmFuZ2UodGhpcyk7XG4gICAgaWYgKGxpdmVOb3dUaW1lciBpbnN0YW5jZW9mIExpdmVOb3dUaW1lciAmJiBsaXZlTm93VGltZXIuaXNFbmFibGVkKSB7XG4gICAgICByZXR1cm4gZXZhbHVhdGVUaW1lUmFuZ2UoXG4gICAgICAgIHNjZW5lVGltZVJhbmdlLnN0YXRlLmZyb20sXG4gICAgICAgIHNjZW5lVGltZVJhbmdlLnN0YXRlLnRvLFxuICAgICAgICBzY2VuZVRpbWVSYW5nZS5nZXRUaW1lWm9uZSgpLFxuICAgICAgICBzY2VuZVRpbWVSYW5nZS5zdGF0ZS5maXNjYWxZZWFyU3RhcnRNb250aCxcbiAgICAgICAgc2NlbmVUaW1lUmFuZ2Uuc3RhdGUuVU5TQUZFX25vd0RlbGF5XG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHBsdWdpbiA9IHRoaXMuZ2V0UGx1Z2luKCk7XG4gICAgaWYgKHBsdWdpbiAmJiAhcGx1Z2luLm1ldGEuc2tpcERhdGFRdWVyeSAmJiBkYXRhICYmIGRhdGEudGltZVJhbmdlKSB7XG4gICAgICByZXR1cm4gZGF0YS50aW1lUmFuZ2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjZW5lVGltZVJhbmdlLnN0YXRlLnZhbHVlO1xuICB9O1xuXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VQbHVnaW5UeXBlKHBsdWdpbklkOiBzdHJpbmcsIG5ld09wdGlvbnM/OiBEZWVwUGFydGlhbDx7fT4sIG5ld0ZpZWxkQ29uZmlnPzogRmllbGRDb25maWdTb3VyY2UpIHtcbiAgICBjb25zdCB7IG9wdGlvbnM6IHByZXZPcHRpb25zLCBmaWVsZENvbmZpZzogcHJldkZpZWxkQ29uZmlnLCBwbHVnaW5JZDogcHJldlBsdWdpbklkIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgLy9jbGVhciBmaWVsZCBjb25maWcgY2FjaGUgdG8gdXBkYXRlIGl0IGxhdGVyXG4gICAgdGhpcy5fZGF0YVdpdGhGaWVsZENvbmZpZyA9IHVuZGVmaW5lZDtcblxuICAgIC8vIElmIHN0YXRlLnBsdWdpbklkIGlzIGFscmVhZHkgdGhlIGNvcnJlY3QgcGx1Z2luIHdlIGRvbid0IHRyZWF0IHRoaXMgYXMgcGxhaW4gdXNlciBwYW5lbCB0eXBlIGNoYW5nZVxuICAgIGNvbnN0IGlzQWZ0ZXJQbHVnaW5DaGFuZ2UgPSB0aGlzLnN0YXRlLnBsdWdpbklkICE9PSBwbHVnaW5JZDtcbiAgICBhd2FpdCB0aGlzLl9sb2FkUGx1Z2luKHBsdWdpbklkLCBuZXdPcHRpb25zID8/IHt9LCBuZXdGaWVsZENvbmZpZywgaXNBZnRlclBsdWdpbkNoYW5nZSk7XG5cbiAgICBjb25zdCBwYW5lbDogUGFuZWxNb2RlbCA9IHtcbiAgICAgIHRpdGxlOiB0aGlzLnN0YXRlLnRpdGxlLFxuICAgICAgb3B0aW9uczogdGhpcy5zdGF0ZS5vcHRpb25zLFxuICAgICAgZmllbGRDb25maWc6IHRoaXMuc3RhdGUuZmllbGRDb25maWcsXG4gICAgICBpZDogMSxcbiAgICAgIHR5cGU6IHBsdWdpbklkLFxuICAgIH07XG5cbiAgICAvLyBvblBhbmVsVHlwZUNoYW5nZWQgaXMgbWFpbmx5IHVzZWQgYnkgcGx1Z2lucyB0byBtaWdyYXRlIGZyb20gQW5ndWxhciB0byBSZWFjdC5cbiAgICAvLyBGb3IgZXhhbXBsZSwgdGhpcyB3aWxsIG1pZ3JhdGUgb3B0aW9ucyBmcm9tICdncmFwaCcgdG8gJ3RpbWVzZXJpZXMnIGlmIHRoZSBwcmV2aW91cyBhbmQgbmV3IHBsdWdpbiBJRCBtYXRjaGVzLlxuICAgIGNvbnN0IHVwZGF0ZWRPcHRpb25zID0gdGhpcy5fcGx1Z2luPy5vblBhbmVsVHlwZUNoYW5nZWQ/LihwYW5lbCwgcHJldlBsdWdpbklkLCBwcmV2T3B0aW9ucywgcHJldkZpZWxkQ29uZmlnKTtcblxuICAgIGlmICh1cGRhdGVkT3B0aW9ucyAmJiAhaXNFbXB0eSh1cGRhdGVkT3B0aW9ucykpIHtcbiAgICAgIHRoaXMub25PcHRpb25zQ2hhbmdlKHVwZGF0ZWRPcHRpb25zLCB0cnVlLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25UaXRsZUNoYW5nZSA9ICh0aXRsZTogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHRpdGxlIH0pO1xuICB9O1xuXG4gIHB1YmxpYyBvbkRlc2NyaXB0aW9uQ2hhbmdlID0gKGRlc2NyaXB0aW9uOiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgZGVzY3JpcHRpb24gfSk7XG4gIH07XG5cbiAgcHVibGljIG9uRGlzcGxheU1vZGVDaGFuZ2UgPSAoZGlzcGxheU1vZGU6ICdkZWZhdWx0JyB8ICd0cmFuc3BhcmVudCcpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgZGlzcGxheU1vZGUgfSk7XG4gIH07XG5cbiAgcHVibGljIG9uVG9nZ2xlQ29sbGFwc2UgPSAoY29sbGFwc2VkOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBjb2xsYXBzZWQsXG4gICAgfSk7XG4gIH07XG5cbiAgcHVibGljIG9uT3B0aW9uc0NoYW5nZSA9IChvcHRpb25zVXBkYXRlOiBEZWVwUGFydGlhbDxUT3B0aW9ucz4sIHJlcGxhY2UgPSBmYWxzZSwgaXNBZnRlclBsdWdpbkNoYW5nZSA9IGZhbHNlKSA9PiB7XG4gICAgY29uc3QgeyBmaWVsZENvbmZpZywgb3B0aW9ucyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIC8vIFdoZW4gcmVwbGFjZSBpcyB0cnVlLCB3ZSB3YW50IHRvIHJlcGxhY2UgdGhlIGVudGlyZSBvcHRpb25zIG9iamVjdC4gRGVmYXVsdCB3aWxsIGJlIGFwcGxpZWQuXG4gICAgY29uc3QgbmV4dE9wdGlvbnMgPSByZXBsYWNlXG4gICAgICA/IG9wdGlvbnNVcGRhdGVcbiAgICAgIDogbWVyZ2VXaXRoKGNsb25lRGVlcChvcHRpb25zKSwgb3B0aW9uc1VwZGF0ZSwgKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmopID0+IHtcbiAgICAgICAgICBpZiAoaXNBcnJheShzcmNWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBzcmNWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSWYgY3VzdG9taXplciByZXR1cm5zIHVuZGVmaW5lZCwgbWVyZ2luZyBpcyBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZFxuICAgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gb3ZlcnJpZGUgdGhlIHZhbHVlIGluIHRoZSBvYmplY3QgaW5zdGVhZFxuICAgICAgICAgIGlmIChvYmpWYWx1ZSAhPT0gc3JjVmFsdWUgJiYgdHlwZW9mIHNyY1ZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgb2JqW2tleV0gPSBzcmNWYWx1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9KTtcblxuICAgIGNvbnN0IHdpdGhEZWZhdWx0cyA9IGdldFBhbmVsT3B0aW9uc1dpdGhEZWZhdWx0cyh7XG4gICAgICBwbHVnaW46IHRoaXMuX3BsdWdpbiEsXG4gICAgICBjdXJyZW50T3B0aW9uczogbmV4dE9wdGlvbnMsXG4gICAgICBjdXJyZW50RmllbGRDb25maWc6IGZpZWxkQ29uZmlnLFxuICAgICAgaXNBZnRlclBsdWdpbkNoYW5nZTogaXNBZnRlclBsdWdpbkNoYW5nZSxcbiAgICB9KTtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgb3B0aW9uczogd2l0aERlZmF1bHRzLm9wdGlvbnMgYXMgRGVlcFBhcnRpYWw8VE9wdGlvbnM+LFxuICAgICAgX3JlbmRlckNvdW50ZXI6ICh0aGlzLnN0YXRlLl9yZW5kZXJDb3VudGVyID8/IDApICsgMSxcbiAgICB9KTtcbiAgfTtcblxuICBwdWJsaWMgb25GaWVsZENvbmZpZ0NoYW5nZSA9IChmaWVsZENvbmZpZ1VwZGF0ZTogRmllbGRDb25maWdTb3VyY2U8RGVlcFBhcnRpYWw8VEZpZWxkQ29uZmlnPj4sIHJlcGxhY2U/OiBib29sZWFuKSA9PiB7XG4gICAgY29uc3QgeyBmaWVsZENvbmZpZywgb3B0aW9ucyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIC8vIFdoZW4gcmVwbGFjZSBpcyB0cnVlLCB3ZSB3YW50IHRvIHJlcGxhY2UgdGhlIGVudGlyZSBmaWVsZCBjb25maWcuIERlZmF1bHQgd2lsbCBiZSBhcHBsaWVkLlxuICAgIGNvbnN0IG5leHRGaWVsZENvbmZpZyA9IHJlcGxhY2UgPyBmaWVsZENvbmZpZ1VwZGF0ZSA6IG1lcmdlKGNsb25lRGVlcChmaWVsZENvbmZpZyksIGZpZWxkQ29uZmlnVXBkYXRlKTtcblxuICAgIGNvbnN0IHdpdGhEZWZhdWx0cyA9IGdldFBhbmVsT3B0aW9uc1dpdGhEZWZhdWx0cyh7XG4gICAgICBwbHVnaW46IHRoaXMuX3BsdWdpbiEsXG4gICAgICBjdXJyZW50T3B0aW9uczogb3B0aW9ucyxcbiAgICAgIGN1cnJlbnRGaWVsZENvbmZpZzogbmV4dEZpZWxkQ29uZmlnLFxuICAgICAgaXNBZnRlclBsdWdpbkNoYW5nZTogZmFsc2UsXG4gICAgfSk7XG5cbiAgICB0aGlzLl9kYXRhV2l0aEZpZWxkQ29uZmlnID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc2V0U3RhdGUoeyBmaWVsZENvbmZpZzogd2l0aERlZmF1bHRzLmZpZWxkQ29uZmlnIH0pO1xuICB9O1xuXG4gIHB1YmxpYyBpbnRlcnBvbGF0ZSA9ICgodmFsdWU6IHN0cmluZywgc2NvcGVkPzogU2NvcGVkVmFycywgZm9ybWF0Pzogc3RyaW5nIHwgVmFyaWFibGVDdXN0b21Gb3JtYXR0ZXJGbikgPT4ge1xuICAgIHJldHVybiBzY2VuZUdyYXBoLmludGVycG9sYXRlKHRoaXMsIHZhbHVlLCBzY29wZWQsIGZvcm1hdCk7XG4gIH0pIGFzIEludGVycG9sYXRlRnVuY3Rpb247XG5cbiAgcHVibGljIGdldERlc2NyaXB0aW9uID0gKCkgPT4ge1xuICAgIHRoaXMucHVibGlzaEV2ZW50KG5ldyBVc2VyQWN0aW9uRXZlbnQoeyBvcmlnaW46IHRoaXMsIGludGVyYWN0aW9uOiAncGFuZWwtZGVzY3JpcHRpb24tc2hvd24nIH0pLCB0cnVlKTtcblxuICAgIGNvbnN0IHsgZGVzY3JpcHRpb24gfSA9IHRoaXMuc3RhdGU7XG4gICAgaWYgKGRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCBtYXJrZG93biA9IHRoaXMuaW50ZXJwb2xhdGUoZGVzY3JpcHRpb24pO1xuICAgICAgcmV0dXJuIHJlbmRlck1hcmtkb3duKG1hcmtkb3duKTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9O1xuXG4gIHB1YmxpYyBjbGVhckZpZWxkQ29uZmlnQ2FjaGUoKSB7XG4gICAgdGhpcy5fZGF0YVdpdGhGaWVsZENvbmZpZyA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgZnJvbSB0aGUgcmVhY3QgcmVuZGVyIHBhdGggdG8gYXBwbHkgdGhlIGZpZWxkIGNvbmZpZyB0byB0aGUgZGF0YSBwcm92aWRlZCBieSB0aGUgZGF0YSBwcm92aWRlclxuICAgKi9cbiAgcHVibGljIGFwcGx5RmllbGRDb25maWcocmF3RGF0YT86IFBhbmVsRGF0YSk6IFBhbmVsRGF0YSB7XG4gICAgY29uc3QgcGx1Z2luID0gdGhpcy5fcGx1Z2luO1xuXG4gICAgaWYgKCFwbHVnaW4gfHwgcGx1Z2luLm1ldGEuc2tpcERhdGFRdWVyeSB8fCAhcmF3RGF0YSkge1xuICAgICAgLy8gVE9ETyBzZXR1cCB0aW1lIHJhbmdlIHN1YnNjcmlwdGlvbiBpbnN0ZWFkXG4gICAgICByZXR1cm4gZW1wdHlQYW5lbERhdGE7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGRhdGEgaXMgdGhlIHNhbWUgYXMgbGFzdCB0aW1lLCB3ZSBjYW4gc2tpcCB0aGUgZmllbGQgY29uZmlnIGFwcGx5IHN0ZXAgYW5kIGp1c3QgcmV0dXJuIHNhbWUgcmVzdWx0IGFzIGxhc3QgdGltZVxuICAgIGlmICh0aGlzLl9wcmV2RGF0YSA9PT0gcmF3RGF0YSAmJiB0aGlzLl9kYXRhV2l0aEZpZWxkQ29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGF0YVdpdGhGaWVsZENvbmZpZztcbiAgICB9XG5cbiAgICBjb25zdCBwbHVnaW5EYXRhU3VwcG9ydDogUGFuZWxQbHVnaW5EYXRhU3VwcG9ydCA9IHBsdWdpbi5kYXRhU3VwcG9ydCB8fCB7IGFsZXJ0U3RhdGVzOiBmYWxzZSwgYW5ub3RhdGlvbnM6IGZhbHNlIH07XG5cbiAgICBjb25zdCBmaWVsZENvbmZpZ1JlZ2lzdHJ5ID0gcGx1Z2luLmZpZWxkQ29uZmlnUmVnaXN0cnk7XG4gICAgY29uc3QgcHJldkZyYW1lcyA9IHRoaXMuX2RhdGFXaXRoRmllbGRDb25maWc/LnNlcmllcyA/PyBbXTtcbiAgICBjb25zdCBuZXdGcmFtZXMgPSBhcHBseUZpZWxkT3ZlcnJpZGVzKHtcbiAgICAgIGRhdGE6IHJhd0RhdGEuc2VyaWVzLFxuICAgICAgZmllbGRDb25maWc6IHRoaXMuc3RhdGUuZmllbGRDb25maWcsXG4gICAgICBmaWVsZENvbmZpZ1JlZ2lzdHJ5LFxuICAgICAgcmVwbGFjZVZhcmlhYmxlczogdGhpcy5pbnRlcnBvbGF0ZSxcbiAgICAgIHRoZW1lOiBjb25maWcudGhlbWUyLFxuICAgICAgdGltZVpvbmU6IHJhd0RhdGEucmVxdWVzdD8udGltZXpvbmUsXG4gICAgfSk7XG5cbiAgICBpZiAoIWNvbXBhcmVBcnJheVZhbHVlcyhuZXdGcmFtZXMsIHByZXZGcmFtZXMsIGNvbXBhcmVEYXRhRnJhbWVTdHJ1Y3R1cmVzKSkge1xuICAgICAgdGhpcy5fc3RydWN0dXJlUmV2Kys7XG4gICAgfVxuXG4gICAgdGhpcy5fZGF0YVdpdGhGaWVsZENvbmZpZyA9IHtcbiAgICAgIC4uLnJhd0RhdGEsXG4gICAgICBzdHJ1Y3R1cmVSZXY6IHRoaXMuX3N0cnVjdHVyZVJldixcbiAgICAgIHNlcmllczogbmV3RnJhbWVzLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5fZGF0YVdpdGhGaWVsZENvbmZpZy5hbm5vdGF0aW9ucykge1xuICAgICAgdGhpcy5fZGF0YVdpdGhGaWVsZENvbmZpZy5hbm5vdGF0aW9ucyA9IGFwcGx5RmllbGRPdmVycmlkZXMoe1xuICAgICAgICBkYXRhOiB0aGlzLl9kYXRhV2l0aEZpZWxkQ29uZmlnLmFubm90YXRpb25zLFxuICAgICAgICBmaWVsZENvbmZpZzoge1xuICAgICAgICAgIGRlZmF1bHRzOiB7fSxcbiAgICAgICAgICBvdmVycmlkZXM6IFtdLFxuICAgICAgICB9LFxuICAgICAgICBmaWVsZENvbmZpZ1JlZ2lzdHJ5LFxuICAgICAgICByZXBsYWNlVmFyaWFibGVzOiB0aGlzLmludGVycG9sYXRlLFxuICAgICAgICB0aGVtZTogY29uZmlnLnRoZW1lMixcbiAgICAgICAgdGltZVpvbmU6IHJhd0RhdGEucmVxdWVzdD8udGltZXpvbmUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIXBsdWdpbkRhdGFTdXBwb3J0LmFsZXJ0U3RhdGVzKSB7XG4gICAgICB0aGlzLl9kYXRhV2l0aEZpZWxkQ29uZmlnLmFsZXJ0U3RhdGUgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKCFwbHVnaW5EYXRhU3VwcG9ydC5hbm5vdGF0aW9ucykge1xuICAgICAgdGhpcy5fZGF0YVdpdGhGaWVsZENvbmZpZy5hbm5vdGF0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0aGlzLl9wcmV2RGF0YSA9IHJhd0RhdGE7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFXaXRoRmllbGRDb25maWc7XG4gIH1cblxuICBwdWJsaWMgb25DYW5jZWxRdWVyeSA9ICgpID0+IHtcbiAgICB0aGlzLnB1Ymxpc2hFdmVudChuZXcgVXNlckFjdGlvbkV2ZW50KHsgb3JpZ2luOiB0aGlzLCBpbnRlcmFjdGlvbjogJ3BhbmVsLWNhbmNlbC1xdWVyeS1jbGlja2VkJyB9KSwgdHJ1ZSk7XG4gICAgY29uc3QgZGF0YSA9IHNjZW5lR3JhcGguZ2V0RGF0YSh0aGlzKTtcbiAgICBkYXRhLmNhbmNlbFF1ZXJ5Py4oKTtcbiAgfTtcblxuICBwdWJsaWMgb25TdGF0dXNNZXNzYWdlQ2xpY2sgPSAoKSA9PiB7XG4gICAgdGhpcy5wdWJsaXNoRXZlbnQobmV3IFVzZXJBY3Rpb25FdmVudCh7IG9yaWdpbjogdGhpcywgaW50ZXJhY3Rpb246ICdwYW5lbC1zdGF0dXMtbWVzc2FnZS1jbGlja2VkJyB9KSwgdHJ1ZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFBhbmVsIGNvbnRleHQgZnVuY3Rpb25zXG4gICAqL1xuICBwcml2YXRlIF9vblNlcmllc0NvbG9yQ2hhbmdlID0gKGxhYmVsOiBzdHJpbmcsIGNvbG9yOiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLm9uRmllbGRDb25maWdDaGFuZ2UoY2hhbmdlU2VyaWVzQ29sb3JDb25maWdGYWN0b3J5KGxhYmVsLCBjb2xvciwgdGhpcy5zdGF0ZS5maWVsZENvbmZpZykpO1xuICB9O1xuXG4gIHByaXZhdGUgX29uU2VyaWVzVmlzaWJpbGl0eUNoYW5nZSA9IChsYWJlbDogc3RyaW5nLCBtb2RlOiBTZXJpZXNWaXNpYmlsaXR5Q2hhbmdlTW9kZSkgPT4ge1xuICAgIGlmICghdGhpcy5fZGF0YVdpdGhGaWVsZENvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub25GaWVsZENvbmZpZ0NoYW5nZShcbiAgICAgIHNlcmllc1Zpc2liaWxpdHlDb25maWdGYWN0b3J5KGxhYmVsLCBtb2RlLCB0aGlzLnN0YXRlLmZpZWxkQ29uZmlnLCB0aGlzLl9kYXRhV2l0aEZpZWxkQ29uZmlnLnNlcmllcyksXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfTtcblxuICBwcml2YXRlIF9vbkluc3RhbmNlU3RhdGVDaGFuZ2UgPSAoc3RhdGU6IGFueSkgPT4ge1xuICAgIGlmICh0aGlzLl9wYW5lbENvbnRleHQpIHtcbiAgICAgIHRoaXMuX3BhbmVsQ29udGV4dCA9IHtcbiAgICAgICAgLi4udGhpcy5fcGFuZWxDb250ZXh0LFxuICAgICAgICBpbnN0YW5jZVN0YXRlOiBzdGF0ZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7IF9wbHVnaW5JbnN0YW5jZVN0YXRlOiBzdGF0ZSB9KTtcbiAgfTtcblxuICBwcml2YXRlIF9vblRvZ2dsZUxlZ2VuZFNvcnQgPSAoc29ydEtleTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgbGVnZW5kT3B0aW9uczogVml6TGVnZW5kT3B0aW9ucyA9ICh0aGlzLnN0YXRlLm9wdGlvbnMgYXMgYW55KS5sZWdlbmQ7XG5cbiAgICAvLyBXZSBkb24ndCB3YW50IHRvIGRvIGFueXRoaW5nIHdoZW4gbGVnZW5kIG9wdGlvbnMgYXJlIG5vdCBhdmFpbGFibGVcbiAgICBpZiAoIWxlZ2VuZE9wdGlvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgc29ydERlc2MgPSBsZWdlbmRPcHRpb25zLnNvcnREZXNjO1xuICAgIGxldCBzb3J0QnkgPSBsZWdlbmRPcHRpb25zLnNvcnRCeTtcbiAgICBpZiAoc29ydEtleSAhPT0gc29ydEJ5KSB7XG4gICAgICBzb3J0RGVzYyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBpZiBhbHJlYWR5IHNvcnQgYXNjZW5kaW5nLCBkaXNhYmxlIHNvcnRpbmdcbiAgICBpZiAoc29ydERlc2MgPT09IGZhbHNlKSB7XG4gICAgICBzb3J0QnkgPSB1bmRlZmluZWQ7XG4gICAgICBzb3J0RGVzYyA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgc29ydERlc2MgPSAhc29ydERlc2M7XG4gICAgICBzb3J0QnkgPSBzb3J0S2V5O1xuICAgIH1cblxuICAgIHRoaXMub25PcHRpb25zQ2hhbmdlKFxuICAgICAge1xuICAgICAgICAuLi50aGlzLnN0YXRlLm9wdGlvbnMsXG4gICAgICAgIGxlZ2VuZDogeyAuLi5sZWdlbmRPcHRpb25zLCBzb3J0QnksIHNvcnREZXNjIH0sXG4gICAgICB9IGFzIFRPcHRpb25zLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH07XG5cbiAgcHJpdmF0ZSBidWlsZFBhbmVsQ29udGV4dCgpOiBQYW5lbENvbnRleHQge1xuICAgIGNvbnN0IHN5bmMgPSBnZXRDdXJzb3JTeW5jU2NvcGUodGhpcyk7XG5cbiAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgZXZlbnRzU2NvcGU6IHN5bmMgPyBzeW5jLmdldEV2ZW50c1Njb3BlKCkgOiAnX19nbG9iYWxfJyxcbiAgICAgIGV2ZW50QnVzOiBzeW5jID8gc3luYy5nZXRFdmVudHNCdXModGhpcykgOiBnZXRBcHBFdmVudHMoKSxcbiAgICAgIGFwcDogQ29yZUFwcC5Vbmtub3duLFxuICAgICAgc3luYzogKCkgPT4ge1xuICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgIHJldHVybiBzeW5jLnN0YXRlLnN5bmM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIERhc2hib2FyZEN1cnNvclN5bmMuT2ZmO1xuICAgICAgfSxcbiAgICAgIG9uU2VyaWVzQ29sb3JDaGFuZ2U6IHRoaXMuX29uU2VyaWVzQ29sb3JDaGFuZ2UsXG4gICAgICBvblRvZ2dsZVNlcmllc1Zpc2liaWxpdHk6IHRoaXMuX29uU2VyaWVzVmlzaWJpbGl0eUNoYW5nZSxcbiAgICAgIG9uVG9nZ2xlTGVnZW5kU29ydDogdGhpcy5fb25Ub2dnbGVMZWdlbmRTb3J0LFxuICAgICAgb25JbnN0YW5jZVN0YXRlQ2hhbmdlOiB0aGlzLl9vbkluc3RhbmNlU3RhdGVDaGFuZ2UsXG4gICAgfTtcblxuICAgIGlmICh0aGlzLnN0YXRlLmV4dGVuZFBhbmVsQ29udGV4dCkge1xuICAgICAgdGhpcy5zdGF0ZS5leHRlbmRQYW5lbENvbnRleHQodGhpcywgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UGFuZWxQbHVnaW5Ob3RGb3VuZChpZDogc3RyaW5nKTogUGFuZWxQbHVnaW4ge1xuICBjb25zdCBwbHVnaW4gPSBuZXcgUGFuZWxQbHVnaW4oKCkgPT4gbnVsbCk7XG5cbiAgcGx1Z2luLm1ldGEgPSB7XG4gICAgaWQ6IGlkLFxuICAgIG5hbWU6IGlkLFxuICAgIHNvcnQ6IDEwMCxcbiAgICB0eXBlOiBQbHVnaW5UeXBlLnBhbmVsLFxuICAgIG1vZHVsZTogJycsXG4gICAgYmFzZVVybDogJycsXG4gICAgaW5mbzoge1xuICAgICAgYXV0aG9yOiB7XG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgfSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIGxpbmtzOiBbXSxcbiAgICAgIGxvZ29zOiB7XG4gICAgICAgIGxhcmdlOiAnJyxcbiAgICAgICAgc21hbGw6ICdwdWJsaWMvaW1nL2dyYWZhbmFfaWNvbi5zdmcnLFxuICAgICAgfSxcbiAgICAgIHNjcmVlbnNob3RzOiBbXSxcbiAgICAgIHVwZGF0ZWQ6ICcnLFxuICAgICAgdmVyc2lvbjogJycsXG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gcGx1Z2luO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0dPLE1BQU0saUJBQThELGVBRXpFLENBQUE7QUFBQSxFQWNPLFlBQVksS0FBdUQsRUFBQTtBQXBINUUsSUFBQSxJQUFBLEVBQUEsQ0FBQTtBQXFISSxJQUFNLEtBQUEsQ0FBQSxjQUFBLENBQUE7QUFBQSxNQUNKLFNBQVMsRUFBQztBQUFBLE1BQ1YsYUFBYSxFQUFFLFFBQUEsRUFBVSxFQUFJLEVBQUEsU0FBQSxFQUFXLEVBQUcsRUFBQTtBQUFBLE1BQzNDLEtBQU8sRUFBQSxPQUFBO0FBQUEsTUFDUCxRQUFVLEVBQUEsWUFBQTtBQUFBLE1BQ1YsY0FBZ0IsRUFBQSxDQUFBO0FBQUEsS0FBQSxFQUNiLEtBQ0osQ0FBQSxDQUFBLENBQUE7QUFuQkgsSUFBVSxJQUFBLENBQUEsbUJBQUEsR0FBc0IsSUFBSSx3QkFBQSxDQUF5QixJQUFNLEVBQUE7QUFBQSxNQUNqRSxVQUFZLEVBQUEsQ0FBQyxPQUFTLEVBQUEsU0FBQSxFQUFXLGFBQWEsQ0FBQTtBQUFBLEtBQy9DLENBQUEsQ0FBQTtBQU9ELElBQUEsSUFBQSxDQUFRLGFBQXdCLEdBQUEsQ0FBQSxDQUFBO0FBMEloQyxJQUFPLElBQUEsQ0FBQSxpQkFBQSxHQUFvQixDQUFDLFNBQWlDLEtBQUE7QUFDM0QsTUFBTSxNQUFBLGNBQUEsR0FBaUIsVUFBVyxDQUFBLFlBQUEsQ0FBYSxJQUFJLENBQUEs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
@@ -1,44 +0,0 @@
1
- import React from 'react';
2
- import { LinkButton } from '@grafana/ui';
3
- import { useAsync } from 'react-use';
4
- import { SceneObjectBase } from '../../core/SceneObjectBase.js';
5
- import { sceneGraph } from '../../core/sceneGraph/index.js';
6
- import { getExploreURL } from '../../utils/explore.js';
7
- import { useReturnToPrevious } from '@grafana/runtime';
8
-
9
- class VizPanelExploreButton extends SceneObjectBase {
10
- constructor(options = {}) {
11
- super({ options });
12
- }
13
- }
14
- VizPanelExploreButton.Component = VizPanelExploreButtonComponent;
15
- function VizPanelExploreButtonComponent({ model }) {
16
- const { options } = model.useState();
17
- const { data } = sceneGraph.getData(model).useState();
18
- const { from, to } = sceneGraph.getTimeRange(model).useState();
19
- const { value: exploreLink } = useAsync(
20
- async () => data ? getExploreURL(data, model, { from, to }, options.transform) : "",
21
- [data, model, from, to]
22
- );
23
- const returnToPrevious = useReturnToPrevious();
24
- if (exploreLink) {
25
- return /* @__PURE__ */ React.createElement(LinkButton, {
26
- key: "explore",
27
- icon: "compass",
28
- size: "sm",
29
- variant: "secondary",
30
- href: exploreLink,
31
- onClick: () => {
32
- var _a;
33
- if (options.returnToPrevious) {
34
- returnToPrevious(options.returnToPrevious.title, options.returnToPrevious.href);
35
- }
36
- (_a = options.onClick) == null ? void 0 : _a.call(options);
37
- }
38
- }, "Explore");
39
- }
40
- return null;
41
- }
42
-
43
- export { VizPanelExploreButton };
44
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVml6UGFuZWxFeHBsb3JlQnV0dG9uLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9WaXpQYW5lbC9WaXpQYW5lbEV4cGxvcmVCdXR0b24udHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7IExpbmtCdXR0b24gfSBmcm9tICdAZ3JhZmFuYS91aSc7XG5pbXBvcnQgeyBEYXRhUXVlcnkgfSBmcm9tICdAZ3JhZmFuYS9zY2hlbWEnO1xuaW1wb3J0IHsgdXNlQXN5bmMgfSBmcm9tICdyZWFjdC11c2UnO1xuaW1wb3J0IHsgU2NlbmVDb21wb25lbnRQcm9wcywgU2NlbmVPYmplY3RTdGF0ZSB9IGZyb20gJy4uLy4uL2NvcmUvdHlwZXMnO1xuaW1wb3J0IHsgU2NlbmVPYmplY3RCYXNlIH0gZnJvbSAnLi4vLi4vY29yZS9TY2VuZU9iamVjdEJhc2UnO1xuaW1wb3J0IHsgc2NlbmVHcmFwaCB9IGZyb20gJy4uLy4uL2NvcmUvc2NlbmVHcmFwaCc7XG5pbXBvcnQgeyBnZXRFeHBsb3JlVVJMIH0gZnJvbSAnLi4vLi4vdXRpbHMvZXhwbG9yZSc7XG5pbXBvcnQgeyB1c2VSZXR1cm5Ub1ByZXZpb3VzIH0gZnJvbSAnQGdyYWZhbmEvcnVudGltZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwbG9yZUJ1dHRvbk9wdGlvbnMge1xuICAvLyBDYWxsYmFjayB0byBob29rIGluIHRyYWNraW5nIC8gYW5hbHl0aWNzXG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xuXG4gIC8vIENhbGxiYWNrIHRvIG1vZGlmeSBpbnRlcnBvbGF0ZWQgcXVlcnkgYmVmb3JlIHBhc3NpbmcgaXQgdG8gZXhwbG9yZVxuICB0cmFuc2Zvcm0/OiAocXVlcnk6IERhdGFRdWVyeSkgPT4gRGF0YVF1ZXJ5O1xuXG4gIC8vIFRpdGxlIGFuZCBocmVmIGZvciB0aGUgcmV0dXJuIHRvIHByZXZpb3VzIGJ1dHRvblxuICByZXR1cm5Ub1ByZXZpb3VzPzoge1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgaHJlZj86IHN0cmluZztcbiAgfTtcbn1cblxuaW50ZXJmYWNlIEV4cGxvcmVCdXR0b25TdGF0ZSBleHRlbmRzIFNjZW5lT2JqZWN0U3RhdGUge1xuICBvcHRpb25zOiBFeHBsb3JlQnV0dG9uT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIFZpelBhbmVsRXhwbG9yZUJ1dHRvbiBleHRlbmRzIFNjZW5lT2JqZWN0QmFzZTxFeHBsb3JlQnV0dG9uU3RhdGU+IHtcbiAgc3RhdGljIENvbXBvbmVudCA9IFZpelBhbmVsRXhwbG9yZUJ1dHRvbkNvbXBvbmVudDtcblxuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogRXhwbG9yZUJ1dHRvbk9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKHsgb3B0aW9ucyB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBWaXpQYW5lbEV4cGxvcmVCdXR0b25Db21wb25lbnQoeyBtb2RlbCB9OiBTY2VuZUNvbXBvbmVudFByb3BzPFZpelBhbmVsRXhwbG9yZUJ1dHRvbj4pIHtcbiAgY29uc3QgeyBvcHRpb25zIH0gPSBtb2RlbC51c2VTdGF0ZSgpO1xuXG4gIGNvbnN0IHsgZGF0YSB9ID0gc2NlbmVHcmFwaC5nZXREYXRhKG1vZGVsKS51c2VTdGF0ZSgpO1xuXG4gIGNvbnN0IHsgZnJvbSwgdG8gfSA9IHNjZW5lR3JhcGguZ2V0VGltZVJhbmdlKG1vZGVsKS51c2VTdGF0ZSgpO1xuXG4gIGNvbnN0IHsgdmFsdWU6IGV4cGxvcmVMaW5rIH0gPSB1c2VBc3luYyhcbiAgICBhc3luYyAoKSA9PiAoZGF0YSA/IGdldEV4cGxvcmVVUkwoZGF0YSwgbW9kZWwsIHsgZnJvbSwgdG8gfSwgb3B0aW9ucy50cmFuc2Zvcm0pIDogJycpLFxuICAgIFtkYXRhLCBtb2RlbCwgZnJvbSwgdG9dXG4gICk7XG5cbiAgY29uc3QgcmV0dXJuVG9QcmV2aW91cyA9IHVzZVJldHVyblRvUHJldmlvdXMoKTtcblxuICBpZiAoZXhwbG9yZUxpbmspIHtcbiAgICByZXR1cm4gKFxuICAgICAgPExpbmtCdXR0b25cbiAgICAgICAga2V5PVwiZXhwbG9yZVwiXG4gICAgICAgIGljb249XCJjb21wYXNzXCJcbiAgICAgICAgc2l6ZT1cInNtXCJcbiAgICAgICAgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgIGhyZWY9e2V4cGxvcmVMaW5rfVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMucmV0dXJuVG9QcmV2aW91cykge1xuICAgICAgICAgICAgcmV0dXJuVG9QcmV2aW91cyhvcHRpb25zLnJldHVyblRvUHJldmlvdXMudGl0bGUsIG9wdGlvbnMucmV0dXJuVG9QcmV2aW91cy5ocmVmKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3B0aW9ucy5vbkNsaWNrPy4oKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgRXhwbG9yZVxuICAgICAgPC9MaW5rQnV0dG9uPlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUE2Qk8sTUFBTSw4QkFBOEIsZUFBb0MsQ0FBQTtBQUFBLEVBR3RFLFdBQUEsQ0FBWSxPQUFnQyxHQUFBLEVBQUksRUFBQTtBQUNyRCxJQUFNLEtBQUEsQ0FBQSxFQUFFLFNBQVMsQ0FBQSxDQUFBO0FBQUEsR0FDbkI7QUFDRixDQUFBO0FBTmEscUJBQUEsQ0FDSixTQUFZLEdBQUEsOEJBQUEsQ0FBQTtBQU9yQixTQUFTLDhCQUFBLENBQStCLEVBQUUsS0FBQSxFQUFxRCxFQUFBO0FBQzdGLEVBQUEsTUFBTSxFQUFFLE9BQUEsRUFBWSxHQUFBLEtBQUEsQ0FBTSxRQUFTLEVBQUEsQ0FBQTtBQUVuQyxFQUFBLE1BQU0sRUFBRSxJQUFLLEVBQUEsR0FBSSxXQUFXLE9BQVEsQ0FBQSxLQUFLLEVBQUUsUUFBUyxFQUFBLENBQUE7QUFFcEQsRUFBTSxNQUFBLEVBQUUsTUFBTSxFQUFHLEVBQUEsR0FBSSxXQUFXLFlBQWEsQ0FBQSxLQUFLLEVBQUUsUUFBUyxFQUFBLENBQUE7QUFFN0QsRUFBTSxNQUFBLEVBQUUsS0FBTyxFQUFBLFdBQUEsRUFBZ0IsR0FBQSxRQUFBO0FBQUEsSUFDN0IsWUFBYSxJQUFPLEdBQUEsYUFBQSxDQUFjLElBQU0sRUFBQSxLQUFBLEVBQU8sRUFBRSxJQUFBLEVBQU0sRUFBRyxFQUFBLEVBQUcsT0FBUSxDQUFBLFNBQVMsQ0FBSSxHQUFBLEVBQUE7QUFBQSxJQUNsRixDQUFDLElBQUEsRUFBTSxLQUFPLEVBQUEsSUFBQSxFQUFNLEVBQUUsQ0FBQTtBQUFBLEdBQ3hCLENBQUE7QUFFQSxFQUFBLE1BQU0sbUJBQW1CLG1CQUFvQixFQUFBLENBQUE7QUFFN0MsRUFBQSxJQUFJLFdBQWEsRUFBQTtBQUNmLElBQUEsdUJBQ0csS0FBQSxDQUFBLGFBQUEsQ0FBQSxVQUFBLEVBQUE7QUFBQSxNQUNDLEdBQUksRUFBQSxTQUFBO0FBQUEsTUFDSixJQUFLLEVBQUEsU0FBQTtBQUFBLE1BQ0wsSUFBSyxFQUFBLElBQUE7QUFBQSxNQUNMLE9BQVEsRUFBQSxXQUFBO0FBQUEsTUFDUixJQUFNLEVBQUEsV0FBQTtBQUFBLE1BQ04sU0FBUyxNQUFNO0FBM0R2QixRQUFBLElBQUEsRUFBQSxDQUFBO0FBNERVLFFBQUEsSUFBSSxRQUFRLGdCQUFrQixFQUFBO0FBQzVCLFVBQUEsZ0JBQUEsQ0FBaUIsT0FBUSxDQUFBLGdCQUFBLENBQWlCLEtBQU8sRUFBQSxPQUFBLENBQVEsaUJBQWlCLElBQUksQ0FBQSxDQUFBO0FBQUEsU0FDaEY7QUFDQSxRQUFBLENBQUEsRUFBQSxHQUFBLE9BQUEsQ0FBUSxPQUFSLEtBQUEsSUFBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBLEVBQUEsQ0FBQSxJQUFBLENBQUEsT0FBQSxDQUFBLENBQUE7QUFBQSxPQUNGO0FBQUEsS0FBQSxFQUNELFNBRUQsQ0FBQSxDQUFBO0FBQUEsR0FFSjtBQUNBLEVBQU8sT0FBQSxJQUFBLENBQUE7QUFDVDs7OzsifQ==
@@ -1,59 +0,0 @@
1
- import React, { useEffect } from 'react';
2
- import { Menu } from '@grafana/ui';
3
- import { SceneObjectBase } from '../../core/SceneObjectBase.js';
4
- import { selectors } from '@grafana/e2e-selectors';
5
-
6
- class VizPanelMenu extends SceneObjectBase {
7
- addItem(item) {
8
- this.setState({
9
- items: this.state.items ? [...this.state.items, item] : [item]
10
- });
11
- }
12
- setItems(items) {
13
- this.setState({
14
- items
15
- });
16
- }
17
- }
18
- VizPanelMenu.Component = VizPanelMenuRenderer;
19
- function VizPanelMenuRenderer({ model }) {
20
- const { items = [] } = model.useState();
21
- const ref = React.useRef(null);
22
- useEffect(() => {
23
- if (ref.current) {
24
- ref.current.focus();
25
- }
26
- }, []);
27
- const renderItems = (items2) => {
28
- return items2.map((item) => {
29
- switch (item.type) {
30
- case "divider":
31
- return /* @__PURE__ */ React.createElement(Menu.Divider, {
32
- key: item.text
33
- });
34
- case "group":
35
- return /* @__PURE__ */ React.createElement(Menu.Group, {
36
- key: item.text,
37
- label: item.text
38
- }, item.subMenu ? renderItems(item.subMenu) : void 0);
39
- default:
40
- return /* @__PURE__ */ React.createElement(Menu.Item, {
41
- key: item.text,
42
- label: item.text,
43
- icon: item.iconClassName,
44
- childItems: item.subMenu ? renderItems(item.subMenu) : void 0,
45
- url: item.href,
46
- onClick: item.onClick,
47
- shortcut: item.shortcut,
48
- testId: selectors.components.Panels.Panel.menuItems(item.text)
49
- });
50
- }
51
- });
52
- };
53
- return /* @__PURE__ */ React.createElement(Menu, {
54
- ref
55
- }, renderItems(items));
56
- }
57
-
58
- export { VizPanelMenu };
59
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVml6UGFuZWxNZW51LmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9WaXpQYW5lbC9WaXpQYW5lbE1lbnUudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBQYW5lbE1lbnVJdGVtIH0gZnJvbSAnQGdyYWZhbmEvZGF0YSc7XG5pbXBvcnQgeyBNZW51IH0gZnJvbSAnQGdyYWZhbmEvdWknO1xuaW1wb3J0IHsgU2NlbmVPYmplY3RCYXNlIH0gZnJvbSAnLi4vLi4vY29yZS9TY2VuZU9iamVjdEJhc2UnO1xuaW1wb3J0IHsgU2NlbmVDb21wb25lbnRQcm9wcywgU2NlbmVPYmplY3RTdGF0ZSB9IGZyb20gJy4uLy4uL2NvcmUvdHlwZXMnO1xuaW1wb3J0IHsgc2VsZWN0b3JzIH0gZnJvbSAnQGdyYWZhbmEvZTJlLXNlbGVjdG9ycyc7XG5cbmludGVyZmFjZSBWaXpQYW5lbE1lbnVTdGF0ZSBleHRlbmRzIFNjZW5lT2JqZWN0U3RhdGUge1xuICBpdGVtcz86IFBhbmVsTWVudUl0ZW1bXTtcbn1cblxuZXhwb3J0IGNsYXNzIFZpelBhbmVsTWVudSBleHRlbmRzIFNjZW5lT2JqZWN0QmFzZTxWaXpQYW5lbE1lbnVTdGF0ZT4ge1xuICBzdGF0aWMgQ29tcG9uZW50ID0gVml6UGFuZWxNZW51UmVuZGVyZXI7XG5cbiAgLy8gQWxsb3dzIGFkZGluZyBtZW51IGl0ZW1zIGR5bmFtaWNhbGx5XG4gIHB1YmxpYyBhZGRJdGVtKGl0ZW06IFBhbmVsTWVudUl0ZW0pIHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zOiB0aGlzLnN0YXRlLml0ZW1zID8gWy4uLnRoaXMuc3RhdGUuaXRlbXMsIGl0ZW1dIDogW2l0ZW1dLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gQWxsb3dzIHJlcGxhY2luZyBhbGwgbWVudSBpdGVtc1xuICBwdWJsaWMgc2V0SXRlbXMoaXRlbXM6IFBhbmVsTWVudUl0ZW1bXSkge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXMsXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gVml6UGFuZWxNZW51UmVuZGVyZXIoeyBtb2RlbCB9OiBTY2VuZUNvbXBvbmVudFByb3BzPFZpelBhbmVsTWVudT4pIHtcbiAgY29uc3QgeyBpdGVtcyA9IFtdIH0gPSBtb2RlbC51c2VTdGF0ZSgpO1xuICBjb25zdCByZWYgPSBSZWFjdC51c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHJlZi5jdXJyZW50KSB7XG4gICAgICByZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgfSwgW10pO1xuXG4gIGNvbnN0IHJlbmRlckl0ZW1zID0gKGl0ZW1zOiBQYW5lbE1lbnVJdGVtW10pID0+IHtcbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtKSA9PiB7XG4gICAgICBzd2l0Y2ggKGl0ZW0udHlwZSkge1xuICAgICAgICBjYXNlICdkaXZpZGVyJzpcbiAgICAgICAgICByZXR1cm4gPE1lbnUuRGl2aWRlciBrZXk9e2l0ZW0udGV4dH0gLz47XG4gICAgICAgIGNhc2UgJ2dyb3VwJzpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPE1lbnUuR3JvdXAga2V5PXtpdGVtLnRleHR9IGxhYmVsPXtpdGVtLnRleHR9PlxuICAgICAgICAgICAgICB7aXRlbS5zdWJNZW51ID8gcmVuZGVySXRlbXMoaXRlbS5zdWJNZW51KSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIDwvTWVudS5Hcm91cD5cbiAgICAgICAgICApO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8TWVudS5JdGVtXG4gICAgICAgICAgICAgIGtleT17aXRlbS50ZXh0fVxuICAgICAgICAgICAgICBsYWJlbD17aXRlbS50ZXh0fVxuICAgICAgICAgICAgICBpY29uPXtpdGVtLmljb25DbGFzc05hbWV9XG4gICAgICAgICAgICAgIGNoaWxkSXRlbXM9e2l0ZW0uc3ViTWVudSA/IHJlbmRlckl0ZW1zKGl0ZW0uc3ViTWVudSkgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgIHVybD17aXRlbS5ocmVmfVxuICAgICAgICAgICAgICBvbkNsaWNrPXtpdGVtLm9uQ2xpY2t9XG4gICAgICAgICAgICAgIHNob3J0Y3V0PXtpdGVtLnNob3J0Y3V0fVxuICAgICAgICAgICAgICB0ZXN0SWQ9e3NlbGVjdG9ycy5jb21wb25lbnRzLlBhbmVscy5QYW5lbC5tZW51SXRlbXMoaXRlbS50ZXh0KX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gPE1lbnUgcmVmPXtyZWZ9PntyZW5kZXJJdGVtcyhpdGVtcyl9PC9NZW51Pjtcbn1cbiJdLCJuYW1lcyI6WyJpdGVtcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFXTyxNQUFNLHFCQUFxQixlQUFtQyxDQUFBO0FBQUEsRUFJNUQsUUFBUSxJQUFxQixFQUFBO0FBQ2xDLElBQUEsSUFBQSxDQUFLLFFBQVMsQ0FBQTtBQUFBLE1BQ1osS0FBTyxFQUFBLElBQUEsQ0FBSyxLQUFNLENBQUEsS0FBQSxHQUFRLENBQUMsR0FBRyxJQUFLLENBQUEsS0FBQSxDQUFNLEtBQU8sRUFBQSxJQUFJLENBQUksR0FBQSxDQUFDLElBQUksQ0FBQTtBQUFBLEtBQzlELENBQUEsQ0FBQTtBQUFBLEdBQ0g7QUFBQSxFQUdPLFNBQVMsS0FBd0IsRUFBQTtBQUN0QyxJQUFBLElBQUEsQ0FBSyxRQUFTLENBQUE7QUFBQSxNQUNaLEtBQUE7QUFBQSxLQUNELENBQUEsQ0FBQTtBQUFBLEdBQ0g7QUFDRixDQUFBO0FBaEJhLFlBQUEsQ0FDSixTQUFZLEdBQUEsb0JBQUEsQ0FBQTtBQWlCckIsU0FBUyxvQkFBQSxDQUFxQixFQUFFLEtBQUEsRUFBNEMsRUFBQTtBQUMxRSxFQUFBLE1BQU0sRUFBRSxLQUFRLEdBQUEsRUFBRyxFQUFBLEdBQUksTUFBTSxRQUFTLEVBQUEsQ0FBQTtBQUN0QyxFQUFNLE1BQUEsR0FBQSxHQUFNLEtBQU0sQ0FBQSxNQUFBLENBQXVCLElBQUksQ0FBQSxDQUFBO0FBRTdDLEVBQUEsU0FBQSxDQUFVLE1BQU07QUFDZCxJQUFBLElBQUksSUFBSSxPQUFTLEVBQUE7QUFDZixNQUFBLEdBQUEsQ0FBSSxRQUFRLEtBQU0sRUFBQSxDQUFBO0FBQUEsS0FDcEI7QUFBQSxHQUNGLEVBQUcsRUFBRSxDQUFBLENBQUE7QUFFTCxFQUFNLE1BQUEsV0FBQSxHQUFjLENBQUNBLE1BQTJCLEtBQUE7QUFDOUMsSUFBT0EsT0FBQUEsTUFBQUEsQ0FBTSxHQUFJLENBQUEsQ0FBQyxJQUFTLEtBQUE7QUFDekIsTUFBQSxRQUFRLElBQUssQ0FBQSxJQUFBO0FBQUEsUUFDTixLQUFBLFNBQUE7QUFDSCxVQUFPLHVCQUFBLEtBQUEsQ0FBQSxhQUFBLENBQUMsS0FBSyxPQUFMLEVBQUE7QUFBQSxZQUFhLEtBQUssSUFBSyxDQUFBLElBQUE7QUFBQSxXQUFNLENBQUEsQ0FBQTtBQUFBLFFBQ2xDLEtBQUEsT0FBQTtBQUNILFVBQ0UsdUJBQUEsS0FBQSxDQUFBLGFBQUEsQ0FBQyxLQUFLLEtBQUwsRUFBQTtBQUFBLFlBQVcsS0FBSyxJQUFLLENBQUEsSUFBQTtBQUFBLFlBQU0sT0FBTyxJQUFLLENBQUEsSUFBQTtBQUFBLFdBQUEsRUFDckMsS0FBSyxPQUFVLEdBQUEsV0FBQSxDQUFZLElBQUssQ0FBQSxPQUFPLElBQUksS0FDOUMsQ0FBQSxDQUFBLENBQUE7QUFBQSxRQUFBO0FBR0YsVUFDRSx1QkFBQSxLQUFBLENBQUEsYUFBQSxDQUFDLEtBQUssSUFBTCxFQUFBO0FBQUEsWUFDQyxLQUFLLElBQUssQ0FBQSxJQUFBO0FBQUEsWUFDVixPQUFPLElBQUssQ0FBQSxJQUFBO0FBQUEsWUFDWixNQUFNLElBQUssQ0FBQSxhQUFBO0FBQUEsWUFDWCxZQUFZLElBQUssQ0FBQSxPQUFBLEdBQVUsV0FBWSxDQUFBLElBQUEsQ0FBSyxPQUFPLENBQUksR0FBQSxLQUFBLENBQUE7QUFBQSxZQUN2RCxLQUFLLElBQUssQ0FBQSxJQUFBO0FBQUEsWUFDVixTQUFTLElBQUssQ0FBQSxPQUFBO0FBQUEsWUFDZCxVQUFVLElBQUssQ0FBQSxRQUFBO0FBQUEsWUFDZixRQUFRLFNBQVUsQ0FBQSxVQUFBLENBQVcsT0FBTyxLQUFNLENBQUEsU0FBQSxDQUFVLEtBQUssSUFBSSxDQUFBO0FBQUEsV0FDL0QsQ0FBQSxDQUFBO0FBQUEsT0FBQTtBQUFBLEtBR1AsQ0FBQSxDQUFBO0FBQUEsR0FDSCxDQUFBO0FBRUEsRUFBQSx1QkFBUSxLQUFBLENBQUEsYUFBQSxDQUFBLElBQUEsRUFBQTtBQUFBLElBQUssR0FBQTtBQUFBLEdBQVcsRUFBQSxXQUFBLENBQVksS0FBSyxDQUFFLENBQUEsQ0FBQTtBQUM3Qzs7OzsifQ==