@grafana/scenes 6.7.0 → 6.8.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 (331) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/esm/components/layout/CSSGrid/SceneCSSGridItem.js +33 -0
  3. package/dist/esm/dist/esm/behaviors/CursorSync.js +76 -0
  4. package/dist/esm/dist/esm/behaviors/LiveNowTimer.js +44 -0
  5. package/dist/esm/dist/esm/behaviors/SceneQueryController.js +14 -0
  6. package/dist/esm/dist/esm/components/EmbeddedScene.js +59 -0
  7. package/dist/esm/dist/esm/components/NestedScene.js +95 -0
  8. package/dist/esm/dist/esm/components/SceneApp/SceneApp.js +27 -0
  9. package/dist/esm/dist/esm/components/SceneApp/SceneAppPage.js +176 -0
  10. package/dist/esm/dist/esm/components/SceneApp/SceneAppPageView.js +104 -0
  11. package/dist/esm/dist/esm/components/SceneApp/utils.js +42 -0
  12. package/dist/esm/dist/esm/components/SceneByFrameRepeater.js +41 -0
  13. package/dist/esm/dist/esm/components/SceneByVariableRepeater.js +55 -0
  14. package/dist/esm/dist/esm/components/SceneCanvasText.js +32 -0
  15. package/dist/esm/dist/esm/components/SceneControlsSpacer.js +17 -0
  16. package/dist/esm/dist/esm/components/SceneDebugger/DebugDetails.js +82 -0
  17. package/dist/esm/dist/esm/components/SceneDebugger/DebugTreeNode.js +72 -0
  18. package/dist/esm/dist/esm/components/SceneDebugger/SceneDebugger.js +77 -0
  19. package/dist/esm/dist/esm/components/SceneReactObject.js +34 -0
  20. package/dist/esm/dist/esm/components/SceneRefreshPicker.js +205 -0
  21. package/dist/esm/dist/esm/components/SceneTimePicker.js +139 -0
  22. package/dist/esm/dist/esm/components/SceneTimeRangeCompare.js +240 -0
  23. package/dist/esm/dist/esm/components/SceneToolbarButton.js +33 -0
  24. package/dist/esm/dist/esm/components/VizPanel/VizPanel.js +406 -0
  25. package/dist/esm/dist/esm/components/VizPanel/VizPanelExploreButton.js +44 -0
  26. package/dist/esm/dist/esm/components/VizPanel/VizPanelMenu.js +59 -0
  27. package/dist/esm/dist/esm/components/VizPanel/VizPanelRenderer.js +285 -0
  28. package/dist/esm/dist/esm/components/VizPanel/VizPanelSeriesLimit.js +45 -0
  29. package/dist/esm/dist/esm/components/VizPanel/colorSeriesConfigFactory.js +72 -0
  30. package/dist/esm/dist/esm/components/VizPanel/registerRuntimePanelPlugin.js +11 -0
  31. package/dist/esm/dist/esm/components/VizPanel/seriesVisibilityConfigFactory.js +164 -0
  32. package/dist/esm/dist/esm/components/layout/CSSGrid/SceneCSSGridLayout.js +124 -0
  33. package/dist/esm/dist/esm/components/layout/LazyLoader.js +103 -0
  34. package/dist/esm/dist/esm/components/layout/SceneFlexLayout.js +135 -0
  35. package/dist/esm/dist/esm/components/layout/grid/SceneGridItem.js +30 -0
  36. package/dist/esm/dist/esm/components/layout/grid/SceneGridLayout.js +283 -0
  37. package/dist/esm/dist/esm/components/layout/grid/SceneGridLayoutRenderer.js +178 -0
  38. package/dist/esm/dist/esm/components/layout/grid/SceneGridRow.js +190 -0
  39. package/dist/esm/dist/esm/components/layout/grid/constants.js +7 -0
  40. package/dist/esm/dist/esm/components/layout/grid/utils.js +36 -0
  41. package/dist/esm/dist/esm/components/layout/split/SplitLayout.js +17 -0
  42. package/dist/esm/dist/esm/components/layout/split/SplitLayoutRenderer.js +29 -0
  43. package/dist/esm/dist/esm/components/layout/split/Splitter.js +386 -0
  44. package/dist/esm/dist/esm/core/SceneComponentWrapper.js +57 -0
  45. package/dist/esm/dist/esm/core/SceneDataNode.js +43 -0
  46. package/dist/esm/dist/esm/core/SceneObjectBase.js +286 -0
  47. package/dist/esm/dist/esm/core/SceneObjectRef.js +32 -0
  48. package/dist/esm/dist/esm/core/SceneTimeRange.js +231 -0
  49. package/dist/esm/dist/esm/core/events.js +11 -0
  50. package/dist/esm/dist/esm/core/sceneGraph/getTimeRange.js +10 -0
  51. package/dist/esm/dist/esm/core/sceneGraph/index.js +25 -0
  52. package/dist/esm/dist/esm/core/sceneGraph/sceneGraph.js +178 -0
  53. package/dist/esm/dist/esm/core/sceneGraph/utils.js +64 -0
  54. package/dist/esm/dist/esm/core/types.js +15 -0
  55. package/dist/esm/dist/esm/querying/DataLayersMerger.js +46 -0
  56. package/dist/esm/dist/esm/querying/ExtraQueryProvider.js +6 -0
  57. package/dist/esm/dist/esm/querying/RuntimeDataSource.js +6 -0
  58. package/dist/esm/dist/esm/querying/SceneDataLayerSet.js +100 -0
  59. package/dist/esm/dist/esm/querying/SceneQueryRunner.js +468 -0
  60. package/dist/esm/dist/esm/querying/extraQueryProcessingOperator.js +46 -0
  61. package/dist/esm/dist/esm/querying/getEnrichedDataRequest.js +12 -0
  62. package/dist/esm/dist/esm/querying/layers/SceneDataLayerBase.js +112 -0
  63. package/dist/esm/dist/esm/querying/layers/SceneDataLayerControls.js +51 -0
  64. package/dist/esm/dist/esm/querying/layers/annotations/AnnotationsDataLayer.js +130 -0
  65. package/dist/esm/dist/esm/querying/layers/annotations/filterAnnotations.js +85 -0
  66. package/dist/esm/dist/esm/querying/layers/annotations/standardAnnotationQuery.js +121 -0
  67. package/dist/esm/dist/esm/querying/layers/annotations/standardAnnotationsSupport.js +211 -0
  68. package/dist/esm/dist/esm/querying/layers/annotations/utils.js +77 -0
  69. package/dist/esm/dist/esm/querying/registerQueryWithController.js +41 -0
  70. package/dist/esm/dist/esm/services/SceneObjectUrlSyncConfig.js +30 -0
  71. package/dist/esm/dist/esm/services/UniqueUrlKeyMapper.js +45 -0
  72. package/dist/esm/dist/esm/services/UrlSyncManager.js +167 -0
  73. package/dist/esm/dist/esm/services/useUrlSync.js +29 -0
  74. package/dist/esm/dist/esm/services/utils.js +71 -0
  75. package/dist/esm/dist/esm/utils/ControlsLabel.js +107 -0
  76. package/dist/esm/dist/esm/utils/LoadingIndicator.js +19 -0
  77. package/dist/esm/dist/esm/utils/SafeSerializableSceneObject.js +39 -0
  78. package/dist/esm/dist/esm/utils/compatibility/setWindowGrafanaSceneContext.js +16 -0
  79. package/dist/esm/dist/esm/utils/date.js +15 -0
  80. package/dist/esm/dist/esm/utils/evaluateTimeRange.js +16 -0
  81. package/dist/esm/dist/esm/utils/explore.js +47 -0
  82. package/dist/esm/dist/esm/utils/getCompareSeriesRefId.js +4 -0
  83. package/dist/esm/dist/esm/utils/getDataSource.js +18 -0
  84. package/dist/esm/dist/esm/utils/getMessageFromError.js +24 -0
  85. package/dist/esm/dist/esm/utils/metricTree.js +53 -0
  86. package/dist/esm/dist/esm/utils/parseUrlParam.js +41 -0
  87. package/dist/esm/dist/esm/utils/utils.js +11 -0
  88. package/dist/esm/dist/esm/utils/wrapInSafeSerializableSceneObject.js +30 -0
  89. package/dist/esm/dist/esm/utils/writeSceneLog.js +12 -0
  90. package/dist/esm/dist/esm/variables/VariableDependencyConfig.js +150 -0
  91. package/dist/esm/dist/esm/variables/VariableValueRecorder.js +71 -0
  92. package/dist/esm/dist/esm/variables/adhoc/AdHocFilterBuilder.js +24 -0
  93. package/dist/esm/dist/esm/variables/adhoc/AdHocFilterRenderer.js +303 -0
  94. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +162 -0
  95. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js +20 -0
  96. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +640 -0
  97. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +65 -0
  98. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js +146 -0
  99. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js +114 -0
  100. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/useFloatingInteractions.js +68 -0
  101. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/utils.js +146 -0
  102. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersVariable.js +289 -0
  103. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js +76 -0
  104. package/dist/esm/dist/esm/variables/adhoc/getAdhocOptionSearcher.js +13 -0
  105. package/dist/esm/dist/esm/variables/adhoc/patchGetAdhocFilters.js +47 -0
  106. package/dist/esm/dist/esm/variables/components/VariableValueControl.js +23 -0
  107. package/dist/esm/dist/esm/variables/components/VariableValueInput.js +33 -0
  108. package/dist/esm/dist/esm/variables/components/VariableValueSelect.js +228 -0
  109. package/dist/esm/dist/esm/variables/components/VariableValueSelectors.js +72 -0
  110. package/dist/esm/dist/esm/variables/components/getOptionSearcher.js +15 -0
  111. package/dist/esm/dist/esm/variables/constants.js +9 -0
  112. package/dist/esm/dist/esm/variables/getEnrichedFiltersRequest.js +12 -0
  113. package/dist/esm/dist/esm/variables/groupby/GroupByVariable.js +259 -0
  114. package/dist/esm/dist/esm/variables/groupby/GroupByVariableUrlSyncHandler.js +63 -0
  115. package/dist/esm/dist/esm/variables/groupby/findActiveGroupByVariablesByUid.js +13 -0
  116. package/dist/esm/dist/esm/variables/interpolation/ScopedVarsVariable.js +40 -0
  117. package/dist/esm/dist/esm/variables/interpolation/defaults.js +21 -0
  118. package/dist/esm/dist/esm/variables/interpolation/fieldAccessorCache.js +13 -0
  119. package/dist/esm/dist/esm/variables/interpolation/formatRegistry.js +296 -0
  120. package/dist/esm/dist/esm/variables/interpolation/sceneInterpolator.js +87 -0
  121. package/dist/esm/dist/esm/variables/lookupVariable.js +20 -0
  122. package/dist/esm/dist/esm/variables/macros/AllVariablesMacro.js +57 -0
  123. package/dist/esm/dist/esm/variables/macros/contextMacros.js +43 -0
  124. package/dist/esm/dist/esm/variables/macros/dataMacros.js +134 -0
  125. package/dist/esm/dist/esm/variables/macros/index.js +26 -0
  126. package/dist/esm/dist/esm/variables/macros/templateProxies.js +51 -0
  127. package/dist/esm/dist/esm/variables/macros/timeMacros.js +86 -0
  128. package/dist/esm/dist/esm/variables/macros/types.js +11 -0
  129. package/dist/esm/dist/esm/variables/macros/urlMacros.js +56 -0
  130. package/dist/esm/dist/esm/variables/sets/SceneVariableSet.js +254 -0
  131. package/dist/esm/dist/esm/variables/types.js +11 -0
  132. package/dist/esm/dist/esm/variables/utils.js +172 -0
  133. package/dist/esm/dist/esm/variables/variants/ConstantVariable.js +38 -0
  134. package/dist/esm/dist/esm/variables/variants/CustomVariable.js +60 -0
  135. package/dist/esm/dist/esm/variables/variants/DataSourceVariable.js +88 -0
  136. package/dist/esm/dist/esm/variables/variants/IntervalVariable.js +117 -0
  137. package/dist/esm/dist/esm/variables/variants/MultiValueVariable.js +295 -0
  138. package/dist/esm/dist/esm/variables/variants/TestVariable.js +117 -0
  139. package/dist/esm/dist/esm/variables/variants/TextBoxVariable.js +61 -0
  140. package/dist/esm/dist/esm/variables/variants/query/QueryVariable.js +139 -0
  141. package/dist/esm/dist/esm/variables/variants/query/createQueryVariableRunner.js +129 -0
  142. package/dist/esm/dist/esm/variables/variants/query/guards.js +28 -0
  143. package/dist/esm/dist/esm/variables/variants/query/toMetricFindValues.js +96 -0
  144. package/dist/esm/dist/esm/variables/variants/query/utils.js +124 -0
  145. package/dist/esm/index.js +1 -1
  146. package/dist/esm/index.js.map +1 -1
  147. package/dist/esm/querying/DataProviderSharer.js +39 -0
  148. package/dist/esm/src/behaviors/ActWhenVariableChanged.js +27 -0
  149. package/dist/esm/src/behaviors/CursorSync.js +76 -0
  150. package/dist/esm/src/behaviors/LiveNowTimer.js +44 -0
  151. package/dist/esm/src/behaviors/SceneQueryController.js +60 -0
  152. package/dist/esm/src/behaviors/index.js +5 -0
  153. package/dist/esm/src/components/EmbeddedScene.js +59 -0
  154. package/dist/esm/src/components/NestedScene.js +95 -0
  155. package/dist/esm/src/components/SceneApp/SceneApp.js +37 -0
  156. package/dist/esm/src/components/SceneApp/SceneAppPage.js +176 -0
  157. package/dist/esm/src/components/SceneApp/SceneAppPageView.js +104 -0
  158. package/dist/esm/src/components/SceneApp/utils.js +42 -0
  159. package/dist/esm/src/components/SceneByFrameRepeater.js +41 -0
  160. package/dist/esm/src/components/SceneByVariableRepeater.js +55 -0
  161. package/dist/esm/src/components/SceneCanvasText.js +32 -0
  162. package/dist/esm/src/components/SceneControlsSpacer.js +17 -0
  163. package/dist/esm/src/components/SceneDebugger/DebugDetails.js +82 -0
  164. package/dist/esm/src/components/SceneDebugger/DebugTreeNode.js +72 -0
  165. package/dist/esm/src/components/SceneDebugger/SceneDebugger.js +77 -0
  166. package/dist/esm/src/components/SceneReactObject.js +34 -0
  167. package/dist/esm/src/components/SceneRefreshPicker.js +205 -0
  168. package/dist/esm/src/components/SceneTimePicker.js +139 -0
  169. package/dist/esm/src/components/SceneTimeRangeCompare.js +240 -0
  170. package/dist/esm/src/components/SceneToolbarButton.js +33 -0
  171. package/dist/esm/src/components/VizPanel/VizPanel.js +406 -0
  172. package/dist/esm/src/components/VizPanel/VizPanelExploreButton.js +44 -0
  173. package/dist/esm/src/components/VizPanel/VizPanelMenu.js +59 -0
  174. package/dist/esm/src/components/VizPanel/VizPanelRenderer.js +285 -0
  175. package/dist/esm/src/components/VizPanel/VizPanelSeriesLimit.js +45 -0
  176. package/dist/esm/src/components/VizPanel/colorSeriesConfigFactory.js +72 -0
  177. package/dist/esm/src/components/VizPanel/registerRuntimePanelPlugin.js +56 -0
  178. package/dist/esm/src/components/VizPanel/seriesVisibilityConfigFactory.js +164 -0
  179. package/dist/esm/src/components/layout/CSSGrid/SceneCSSGridLayout.js +124 -0
  180. package/dist/esm/src/components/layout/LazyLoader.js +103 -0
  181. package/dist/esm/src/components/layout/SceneFlexLayout.js +135 -0
  182. package/dist/esm/src/components/layout/grid/SceneGridItem.js +30 -0
  183. package/dist/esm/src/components/layout/grid/SceneGridLayout.js +283 -0
  184. package/dist/esm/src/components/layout/grid/SceneGridLayoutRenderer.js +178 -0
  185. package/dist/esm/src/components/layout/grid/SceneGridRow.js +190 -0
  186. package/dist/esm/src/components/layout/grid/constants.js +7 -0
  187. package/dist/esm/src/components/layout/grid/utils.js +36 -0
  188. package/dist/esm/src/components/layout/split/SplitLayout.js +17 -0
  189. package/dist/esm/src/components/layout/split/SplitLayoutRenderer.js +29 -0
  190. package/dist/esm/src/components/layout/split/Splitter.js +386 -0
  191. package/dist/esm/src/core/PanelBuilders/FieldConfigBuilder.js +100 -0
  192. package/dist/esm/src/core/PanelBuilders/FieldConfigBuilders.js +75 -0
  193. package/dist/esm/src/core/PanelBuilders/FieldConfigOverridesBuilder.js +75 -0
  194. package/dist/esm/src/core/PanelBuilders/PanelOptionsBuilder.js +22 -0
  195. package/dist/esm/src/core/PanelBuilders/PanelOptionsBuilders.js +85 -0
  196. package/dist/esm/src/core/PanelBuilders/StandardFieldConfigBuilders.js +52 -0
  197. package/dist/esm/src/core/PanelBuilders/VizConfigBuilder.js +78 -0
  198. package/dist/esm/src/core/PanelBuilders/VizConfigBuilders.js +114 -0
  199. package/dist/esm/src/core/PanelBuilders/VizPanelBuilder.js +162 -0
  200. package/dist/esm/src/core/PanelBuilders/index.js +116 -0
  201. package/dist/esm/src/core/SceneComponentWrapper.js +57 -0
  202. package/dist/esm/src/core/SceneDataNode.js +43 -0
  203. package/dist/esm/src/core/SceneObjectBase.js +286 -0
  204. package/dist/esm/src/core/SceneObjectRef.js +32 -0
  205. package/dist/esm/src/core/SceneTimeRange.js +231 -0
  206. package/dist/esm/src/core/SceneTimeRangeTransformerBase.js +35 -0
  207. package/dist/esm/src/core/SceneTimeZoneOverride.js +63 -0
  208. package/dist/esm/src/core/events.js +11 -0
  209. package/dist/esm/src/core/sceneGraph/getTimeRange.js +10 -0
  210. package/dist/esm/src/core/sceneGraph/index.js +25 -0
  211. package/dist/esm/src/core/sceneGraph/sceneGraph.js +178 -0
  212. package/dist/esm/src/core/sceneGraph/utils.js +64 -0
  213. package/dist/esm/src/core/types.js +15 -0
  214. package/dist/esm/src/index.js +108 -0
  215. package/dist/esm/src/querying/DataLayersMerger.js +46 -0
  216. package/dist/esm/src/querying/DataProviderProxy.js +37 -0
  217. package/dist/esm/src/querying/DataProviderSharer.js +108 -0
  218. package/dist/esm/src/querying/ExtraQueryProvider.js +6 -0
  219. package/dist/esm/src/querying/RuntimeDataSource.js +49 -0
  220. package/dist/esm/src/querying/SceneDataLayerSet.js +100 -0
  221. package/dist/esm/src/querying/SceneDataTransformer.js +178 -0
  222. package/dist/esm/src/querying/SceneQueryRunner.js +468 -0
  223. package/dist/esm/src/querying/extraQueryProcessingOperator.js +46 -0
  224. package/dist/esm/src/querying/getEnrichedDataRequest.js +12 -0
  225. package/dist/esm/src/querying/layers/SceneDataLayerBase.js +112 -0
  226. package/dist/esm/src/querying/layers/SceneDataLayerControls.js +51 -0
  227. package/dist/esm/src/querying/layers/annotations/AnnotationsDataLayer.js +130 -0
  228. package/dist/esm/src/querying/layers/annotations/filterAnnotations.js +85 -0
  229. package/dist/esm/src/querying/layers/annotations/standardAnnotationQuery.js +121 -0
  230. package/dist/esm/src/querying/layers/annotations/standardAnnotationsSupport.js +211 -0
  231. package/dist/esm/src/querying/layers/annotations/utils.js +77 -0
  232. package/dist/esm/src/querying/layers/index.js +2 -0
  233. package/dist/esm/src/querying/registerQueryWithController.js +41 -0
  234. package/dist/esm/src/services/SceneObjectUrlSyncConfig.js +30 -0
  235. package/dist/esm/src/services/UniqueUrlKeyMapper.js +45 -0
  236. package/dist/esm/src/services/UrlSyncContextProvider.js +17 -0
  237. package/dist/esm/src/services/UrlSyncManager.js +167 -0
  238. package/dist/esm/src/services/useUrlSync.js +29 -0
  239. package/dist/esm/src/services/utils.js +75 -0
  240. package/dist/esm/src/utils/ControlsLabel.js +107 -0
  241. package/dist/esm/src/utils/LoadingIndicator.js +19 -0
  242. package/dist/esm/src/utils/SafeSerializableSceneObject.js +39 -0
  243. package/dist/esm/src/utils/compatibility/setWindowGrafanaSceneContext.js +16 -0
  244. package/dist/esm/src/utils/date.js +15 -0
  245. package/dist/esm/src/utils/evaluateTimeRange.js +16 -0
  246. package/dist/esm/src/utils/explore.js +47 -0
  247. package/dist/esm/src/utils/getCompareSeriesRefId.js +4 -0
  248. package/dist/esm/src/utils/getDataSource.js +18 -0
  249. package/dist/esm/src/utils/getMessageFromError.js +24 -0
  250. package/dist/esm/src/utils/metricTree.js +53 -0
  251. package/dist/esm/src/utils/parseUrlParam.js +41 -0
  252. package/dist/esm/src/utils/utils.js +11 -0
  253. package/dist/esm/src/utils/wrapInSafeSerializableSceneObject.js +30 -0
  254. package/dist/esm/src/utils/writeSceneLog.js +12 -0
  255. package/dist/esm/src/variables/VariableDependencyConfig.js +150 -0
  256. package/dist/esm/src/variables/VariableValueRecorder.js +71 -0
  257. package/dist/esm/src/variables/adhoc/AdHocFilterBuilder.js +24 -0
  258. package/dist/esm/src/variables/adhoc/AdHocFilterRenderer.js +303 -0
  259. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +162 -0
  260. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js +20 -0
  261. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +640 -0
  262. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +65 -0
  263. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js +146 -0
  264. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js +114 -0
  265. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/useFloatingInteractions.js +68 -0
  266. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/utils.js +146 -0
  267. package/dist/esm/src/variables/adhoc/AdHocFiltersVariable.js +289 -0
  268. package/dist/esm/src/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js +76 -0
  269. package/dist/esm/src/variables/adhoc/getAdhocOptionSearcher.js +13 -0
  270. package/dist/esm/src/variables/adhoc/patchGetAdhocFilters.js +47 -0
  271. package/dist/esm/src/variables/components/VariableValueControl.js +23 -0
  272. package/dist/esm/src/variables/components/VariableValueInput.js +33 -0
  273. package/dist/esm/src/variables/components/VariableValueSelect.js +228 -0
  274. package/dist/esm/src/variables/components/VariableValueSelectors.js +72 -0
  275. package/dist/esm/src/variables/components/getOptionSearcher.js +15 -0
  276. package/dist/esm/src/variables/constants.js +9 -0
  277. package/dist/esm/src/variables/getEnrichedFiltersRequest.js +12 -0
  278. package/dist/esm/src/variables/groupby/GroupByVariable.js +259 -0
  279. package/dist/esm/src/variables/groupby/GroupByVariableUrlSyncHandler.js +63 -0
  280. package/dist/esm/src/variables/groupby/findActiveGroupByVariablesByUid.js +13 -0
  281. package/dist/esm/src/variables/interpolation/ScopedVarsVariable.js +40 -0
  282. package/dist/esm/src/variables/interpolation/defaults.js +21 -0
  283. package/dist/esm/src/variables/interpolation/fieldAccessorCache.js +13 -0
  284. package/dist/esm/src/variables/interpolation/formatRegistry.js +296 -0
  285. package/dist/esm/src/variables/interpolation/sceneInterpolator.js +87 -0
  286. package/dist/esm/src/variables/lookupVariable.js +20 -0
  287. package/dist/esm/src/variables/macros/AllVariablesMacro.js +57 -0
  288. package/dist/esm/src/variables/macros/contextMacros.js +43 -0
  289. package/dist/esm/src/variables/macros/dataMacros.js +134 -0
  290. package/dist/esm/src/variables/macros/index.js +35 -0
  291. package/dist/esm/src/variables/macros/templateProxies.js +51 -0
  292. package/dist/esm/src/variables/macros/timeMacros.js +86 -0
  293. package/dist/esm/src/variables/macros/types.js +11 -0
  294. package/dist/esm/src/variables/macros/urlMacros.js +56 -0
  295. package/dist/esm/src/variables/sets/SceneVariableSet.js +254 -0
  296. package/dist/esm/src/variables/types.js +11 -0
  297. package/dist/esm/src/variables/utils.js +172 -0
  298. package/dist/esm/src/variables/variants/ConstantVariable.js +38 -0
  299. package/dist/esm/src/variables/variants/CustomVariable.js +60 -0
  300. package/dist/esm/src/variables/variants/DataSourceVariable.js +88 -0
  301. package/dist/esm/src/variables/variants/IntervalVariable.js +117 -0
  302. package/dist/esm/src/variables/variants/JsonVariable.js +193 -0
  303. package/dist/esm/src/variables/variants/LocalValueVariable.js +56 -0
  304. package/dist/esm/src/variables/variants/MultiValueVariable.js +295 -0
  305. package/dist/esm/src/variables/variants/TestVariable.js +117 -0
  306. package/dist/esm/src/variables/variants/TextBoxVariable.js +61 -0
  307. package/dist/esm/src/variables/variants/guards.js +27 -0
  308. package/dist/esm/src/variables/variants/query/QueryVariable.js +139 -0
  309. package/dist/esm/src/variables/variants/query/createQueryVariableRunner.js +129 -0
  310. package/dist/esm/src/variables/variants/query/guards.js +28 -0
  311. package/dist/esm/src/variables/variants/query/toMetricFindValues.js +96 -0
  312. package/dist/esm/src/variables/variants/query/utils.js +124 -0
  313. package/dist/esm/variables/components/VariableValueSelect.js +13 -9
  314. package/dist/esm/variables/components/VariableValueSelect.js.map +1 -1
  315. package/dist/esm/variables/variants/ConstantVariable.js +22 -0
  316. package/dist/esm/variables/variants/ConstantVariable.js.map +1 -1
  317. package/dist/esm/variables/variants/CustomVariable.js +3 -2
  318. package/dist/esm/variables/variants/CustomVariable.js.map +1 -1
  319. package/dist/esm/variables/variants/DataSourceVariable.js +3 -2
  320. package/dist/esm/variables/variants/DataSourceVariable.js.map +1 -1
  321. package/dist/esm/variables/variants/JsonVariable.js +96 -0
  322. package/dist/esm/variables/variants/TestVariable.js +3 -2
  323. package/dist/esm/variables/variants/TestVariable.js.map +1 -1
  324. package/dist/esm/variables/variants/json/JsonVariable.js +95 -0
  325. package/dist/esm/variables/variants/json/JsonVariableOptionProviders.js +70 -0
  326. package/dist/esm/variables/variants/query/QueryVariable.js +3 -2
  327. package/dist/esm/variables/variants/query/QueryVariable.js.map +1 -1
  328. package/dist/index.d.ts +14 -6
  329. package/dist/index.js +35 -13
  330. package/dist/index.js.map +1 -1
  331. package/package.json +2 -2
@@ -0,0 +1,146 @@
1
+ import { isMultiValueOperator } from '../AdHocFiltersVariable.js';
2
+ import { getFuzzySearcher } from '../../utils.js';
3
+
4
+ const VIRTUAL_LIST_WIDTH_ESTIMATE_MULTIPLIER = 8;
5
+ const VIRTUAL_LIST_DESCRIPTION_WIDTH_ESTIMATE_MULTIPLIER = 6;
6
+ const VIRTUAL_LIST_PADDING = 8;
7
+ const VIRTUAL_LIST_OVERSCAN = 5;
8
+ const VIRTUAL_LIST_ITEM_HEIGHT = 38;
9
+ const VIRTUAL_LIST_ITEM_HEIGHT_WITH_DESCRIPTION = 60;
10
+ const ERROR_STATE_DROPDOWN_WIDTH = 366;
11
+ function fuzzySearchOptions(options) {
12
+ const haystack = options.map((o) => {
13
+ var _a;
14
+ return (_a = o.label) != null ? _a : o.value;
15
+ });
16
+ const fuzzySearch = getFuzzySearcher(haystack);
17
+ return (search, filterInputType) => {
18
+ if (filterInputType === "operator" && search !== "") {
19
+ search = `"${search}"`;
20
+ }
21
+ return fuzzySearch(search).map((i) => options[i]);
22
+ };
23
+ }
24
+ const flattenOptionGroups = (options) => options.flatMap((option) => option.options ? [option, ...option.options] : [option]);
25
+ const setupDropdownAccessibility = (options, listRef, disabledIndicesRef) => {
26
+ var _a, _b, _c, _d;
27
+ let maxOptionWidth = 182;
28
+ const listRefArr = [];
29
+ const disabledIndices = [];
30
+ for (let i = 0; i < options.length; i++) {
31
+ listRefArr.push(null);
32
+ if ((_a = options[i]) == null ? void 0 : _a.options) {
33
+ disabledIndices.push(i);
34
+ }
35
+ let label = (_c = (_b = options[i].label) != null ? _b : options[i].value) != null ? _c : "";
36
+ let multiplierToUse = VIRTUAL_LIST_WIDTH_ESTIMATE_MULTIPLIER;
37
+ if (label.length * VIRTUAL_LIST_WIDTH_ESTIMATE_MULTIPLIER < (((_d = options[i].description) == null ? void 0 : _d.length) || 0) * VIRTUAL_LIST_DESCRIPTION_WIDTH_ESTIMATE_MULTIPLIER) {
38
+ label = options[i].description;
39
+ multiplierToUse = VIRTUAL_LIST_DESCRIPTION_WIDTH_ESTIMATE_MULTIPLIER;
40
+ }
41
+ const widthEstimate = (options[i].isCustom ? label.length + 18 : label.length) * multiplierToUse + VIRTUAL_LIST_PADDING * 2;
42
+ if (widthEstimate > maxOptionWidth) {
43
+ maxOptionWidth = widthEstimate;
44
+ }
45
+ }
46
+ listRef.current = [...listRefArr];
47
+ disabledIndicesRef.current = [...disabledIndices];
48
+ return maxOptionWidth;
49
+ };
50
+ const nextInputTypeMap = {
51
+ key: "operator",
52
+ operator: "value",
53
+ value: "key"
54
+ };
55
+ const switchToNextInputType = (filterInputType, setInputType, handleChangeViewMode, element, shouldFocusOnPillWrapperOverride) => switchInputType(
56
+ nextInputTypeMap[filterInputType],
57
+ setInputType,
58
+ filterInputType === "value" ? handleChangeViewMode : void 0,
59
+ element,
60
+ shouldFocusOnPillWrapperOverride
61
+ );
62
+ const switchInputType = (filterInputType, setInputType, handleChangeViewMode, element, shouldFocusOnPillWrapperOverride) => {
63
+ setInputType(filterInputType);
64
+ handleChangeViewMode == null ? void 0 : handleChangeViewMode(void 0, shouldFocusOnPillWrapperOverride);
65
+ setTimeout(() => element == null ? void 0 : element.focus());
66
+ };
67
+ const generateFilterUpdatePayload = ({
68
+ filterInputType,
69
+ item,
70
+ filter,
71
+ setFilterMultiValues
72
+ }) => {
73
+ var _a, _b, _c, _d, _e;
74
+ if (filterInputType === "key") {
75
+ return {
76
+ key: item.value,
77
+ keyLabel: item.label ? item.label : item.value
78
+ };
79
+ }
80
+ if (filterInputType === "value") {
81
+ return {
82
+ value: item.value,
83
+ valueLabels: [item.label ? item.label : item.value]
84
+ };
85
+ }
86
+ if (filterInputType === "operator") {
87
+ if (isMultiValueOperator(filter.operator) && !isMultiValueOperator(item.value)) {
88
+ setFilterMultiValues([]);
89
+ return {
90
+ operator: item.value,
91
+ valueLabels: [((_a = filter.valueLabels) == null ? void 0 : _a[0]) || ((_b = filter.values) == null ? void 0 : _b[0]) || filter.value],
92
+ values: void 0
93
+ };
94
+ }
95
+ if (isMultiValueOperator(item.value) && !isMultiValueOperator(filter.operator)) {
96
+ const valueLabels = [((_c = filter.valueLabels) == null ? void 0 : _c[0]) || ((_d = filter.values) == null ? void 0 : _d[0]) || filter.value];
97
+ const values = [filter.value];
98
+ if (values[0]) {
99
+ setFilterMultiValues([
100
+ {
101
+ value: values[0],
102
+ label: (_e = valueLabels == null ? void 0 : valueLabels[0]) != null ? _e : values[0]
103
+ }
104
+ ]);
105
+ }
106
+ return {
107
+ operator: item.value,
108
+ valueLabels,
109
+ values
110
+ };
111
+ }
112
+ }
113
+ return {
114
+ [filterInputType]: item.value
115
+ };
116
+ };
117
+ const INPUT_PLACEHOLDER = "Filter by label values";
118
+ const generatePlaceholder = (filter, filterInputType, isMultiValueEdit, isAlwaysWip) => {
119
+ var _a;
120
+ if (filterInputType === "key") {
121
+ return INPUT_PLACEHOLDER;
122
+ }
123
+ if (filterInputType === "value") {
124
+ if (isMultiValueEdit) {
125
+ return "Edit values";
126
+ }
127
+ return ((_a = filter.valueLabels) == null ? void 0 : _a[0]) || "";
128
+ }
129
+ return filter[filterInputType] && !isAlwaysWip ? `${filter[filterInputType]}` : INPUT_PLACEHOLDER;
130
+ };
131
+ const populateInputValueOnInputTypeSwitch = ({
132
+ populateInputOnEdit,
133
+ item,
134
+ filterInputType,
135
+ setInputValue,
136
+ filter
137
+ }) => {
138
+ if (populateInputOnEdit && !isMultiValueOperator(item.value || "") && nextInputTypeMap[filterInputType] === "value") {
139
+ setInputValue((filter == null ? void 0 : filter.value) || "");
140
+ } else {
141
+ setInputValue("");
142
+ }
143
+ };
144
+
145
+ export { ERROR_STATE_DROPDOWN_WIDTH, VIRTUAL_LIST_ITEM_HEIGHT, VIRTUAL_LIST_ITEM_HEIGHT_WITH_DESCRIPTION, VIRTUAL_LIST_OVERSCAN, flattenOptionGroups, fuzzySearchOptions, generateFilterUpdatePayload, generatePlaceholder, populateInputValueOnInputTypeSwitch, setupDropdownAccessibility, switchInputType, switchToNextInputType };
146
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3ZhcmlhYmxlcy9hZGhvYy9BZEhvY0ZpbHRlcnNDb21ib2JveC91dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc011bHRpVmFsdWVPcGVyYXRvciB9IGZyb20gJy4uL0FkSG9jRmlsdGVyc1ZhcmlhYmxlLmpzJztcbmltcG9ydCB7IGdldEZ1enp5U2VhcmNoZXIgfSBmcm9tICcuLi8uLi91dGlscy5qcyc7XG5cbmNvbnN0IFZJUlRVQUxfTElTVF9XSURUSF9FU1RJTUFURV9NVUxUSVBMSUVSID0gODtcbmNvbnN0IFZJUlRVQUxfTElTVF9ERVNDUklQVElPTl9XSURUSF9FU1RJTUFURV9NVUxUSVBMSUVSID0gNjtcbmNvbnN0IFZJUlRVQUxfTElTVF9QQURESU5HID0gODtcbmNvbnN0IFZJUlRVQUxfTElTVF9PVkVSU0NBTiA9IDU7XG5jb25zdCBWSVJUVUFMX0xJU1RfSVRFTV9IRUlHSFQgPSAzODtcbmNvbnN0IFZJUlRVQUxfTElTVF9JVEVNX0hFSUdIVF9XSVRIX0RFU0NSSVBUSU9OID0gNjA7XG5jb25zdCBFUlJPUl9TVEFURV9EUk9QRE9XTl9XSURUSCA9IDM2NjtcbmZ1bmN0aW9uIGZ1enp5U2VhcmNoT3B0aW9ucyhvcHRpb25zKSB7XG4gIGNvbnN0IGhheXN0YWNrID0gb3B0aW9ucy5tYXAoKG8pID0+IHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChfYSA9IG8ubGFiZWwpICE9IG51bGwgPyBfYSA6IG8udmFsdWU7XG4gIH0pO1xuICBjb25zdCBmdXp6eVNlYXJjaCA9IGdldEZ1enp5U2VhcmNoZXIoaGF5c3RhY2spO1xuICByZXR1cm4gKHNlYXJjaCwgZmlsdGVySW5wdXRUeXBlKSA9PiB7XG4gICAgaWYgKGZpbHRlcklucHV0VHlwZSA9PT0gXCJvcGVyYXRvclwiICYmIHNlYXJjaCAhPT0gXCJcIikge1xuICAgICAgc2VhcmNoID0gYFwiJHtzZWFyY2h9XCJgO1xuICAgIH1cbiAgICByZXR1cm4gZnV6enlTZWFyY2goc2VhcmNoKS5tYXAoKGkpID0+IG9wdGlvbnNbaV0pO1xuICB9O1xufVxuY29uc3QgZmxhdHRlbk9wdGlvbkdyb3VwcyA9IChvcHRpb25zKSA9PiBvcHRpb25zLmZsYXRNYXAoKG9wdGlvbikgPT4gb3B0aW9uLm9wdGlvbnMgPyBbb3B0aW9uLCAuLi5vcHRpb24ub3B0aW9uc10gOiBbb3B0aW9uXSk7XG5jb25zdCBzZXR1cERyb3Bkb3duQWNjZXNzaWJpbGl0eSA9IChvcHRpb25zLCBsaXN0UmVmLCBkaXNhYmxlZEluZGljZXNSZWYpID0+IHtcbiAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICBsZXQgbWF4T3B0aW9uV2lkdGggPSAxODI7XG4gIGNvbnN0IGxpc3RSZWZBcnIgPSBbXTtcbiAgY29uc3QgZGlzYWJsZWRJbmRpY2VzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgIGxpc3RSZWZBcnIucHVzaChudWxsKTtcbiAgICBpZiAoKF9hID0gb3B0aW9uc1tpXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLm9wdGlvbnMpIHtcbiAgICAgIGRpc2FibGVkSW5kaWNlcy5wdXNoKGkpO1xuICAgIH1cbiAgICBsZXQgbGFiZWwgPSAoX2MgPSAoX2IgPSBvcHRpb25zW2ldLmxhYmVsKSAhPSBudWxsID8gX2IgOiBvcHRpb25zW2ldLnZhbHVlKSAhPSBudWxsID8gX2MgOiBcIlwiO1xuICAgIGxldCBtdWx0aXBsaWVyVG9Vc2UgPSBWSVJUVUFMX0xJU1RfV0lEVEhfRVNUSU1BVEVfTVVMVElQTElFUjtcbiAgICBpZiAobGFiZWwubGVuZ3RoICogVklSVFVBTF9MSVNUX1dJRFRIX0VTVElNQVRFX01VTFRJUExJRVIgPCAoKChfZCA9IG9wdGlvbnNbaV0uZGVzY3JpcHRpb24pID09IG51bGwgPyB2b2lkIDAgOiBfZC5sZW5ndGgpIHx8IDApICogVklSVFVBTF9MSVNUX0RFU0NSSVBUSU9OX1dJRFRIX0VTVElNQVRFX01VTFRJUExJRVIpIHtcbiAgICAgIGxhYmVsID0gb3B0aW9uc1tpXS5kZXNjcmlwdGlvbjtcbiAgICAgIG11bHRpcGxpZXJUb1VzZSA9IFZJUlRVQUxfTElTVF9ERVNDUklQVElPTl9XSURUSF9FU1RJTUFURV9NVUxUSVBMSUVSO1xuICAgIH1cbiAgICBjb25zdCB3aWR0aEVzdGltYXRlID0gKG9wdGlvbnNbaV0uaXNDdXN0b20gPyBsYWJlbC5sZW5ndGggKyAxOCA6IGxhYmVsLmxlbmd0aCkgKiBtdWx0aXBsaWVyVG9Vc2UgKyBWSVJUVUFMX0xJU1RfUEFERElORyAqIDI7XG4gICAgaWYgKHdpZHRoRXN0aW1hdGUgPiBtYXhPcHRpb25XaWR0aCkge1xuICAgICAgbWF4T3B0aW9uV2lkdGggPSB3aWR0aEVzdGltYXRlO1xuICAgIH1cbiAgfVxuICBsaXN0UmVmLmN1cnJlbnQgPSBbLi4ubGlzdFJlZkFycl07XG4gIGRpc2FibGVkSW5kaWNlc1JlZi5jdXJyZW50ID0gWy4uLmRpc2FibGVkSW5kaWNlc107XG4gIHJldHVybiBtYXhPcHRpb25XaWR0aDtcbn07XG5jb25zdCBuZXh0SW5wdXRUeXBlTWFwID0ge1xuICBrZXk6IFwib3BlcmF0b3JcIixcbiAgb3BlcmF0b3I6IFwidmFsdWVcIixcbiAgdmFsdWU6IFwia2V5XCJcbn07XG5jb25zdCBzd2l0Y2hUb05leHRJbnB1dFR5cGUgPSAoZmlsdGVySW5wdXRUeXBlLCBzZXRJbnB1dFR5cGUsIGhhbmRsZUNoYW5nZVZpZXdNb2RlLCBlbGVtZW50LCBzaG91bGRGb2N1c09uUGlsbFdyYXBwZXJPdmVycmlkZSkgPT4gc3dpdGNoSW5wdXRUeXBlKFxuICBuZXh0SW5wdXRUeXBlTWFwW2ZpbHRlcklucHV0VHlwZV0sXG4gIHNldElucHV0VHlwZSxcbiAgZmlsdGVySW5wdXRUeXBlID09PSBcInZhbHVlXCIgPyBoYW5kbGVDaGFuZ2VWaWV3TW9kZSA6IHZvaWQgMCxcbiAgZWxlbWVudCxcbiAgc2hvdWxkRm9jdXNPblBpbGxXcmFwcGVyT3ZlcnJpZGVcbik7XG5jb25zdCBzd2l0Y2hJbnB1dFR5cGUgPSAoZmlsdGVySW5wdXRUeXBlLCBzZXRJbnB1dFR5cGUsIGhhbmRsZUNoYW5nZVZpZXdNb2RlLCBlbGVtZW50LCBzaG91bGRGb2N1c09uUGlsbFdyYXBwZXJPdmVycmlkZSkgPT4ge1xuICBzZXRJbnB1dFR5cGUoZmlsdGVySW5wdXRUeXBlKTtcbiAgaGFuZGxlQ2hhbmdlVmlld01vZGUgPT0gbnVsbCA/IHZvaWQgMCA6IGhhbmRsZUNoYW5nZVZpZXdNb2RlKHZvaWQgMCwgc2hvdWxkRm9jdXNPblBpbGxXcmFwcGVyT3ZlcnJpZGUpO1xuICBzZXRUaW1lb3V0KCgpID0+IGVsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGVsZW1lbnQuZm9jdXMoKSk7XG59O1xuY29uc3QgZ2VuZXJhdGVGaWx0ZXJVcGRhdGVQYXlsb2FkID0gKHtcbiAgZmlsdGVySW5wdXRUeXBlLFxuICBpdGVtLFxuICBmaWx0ZXIsXG4gIHNldEZpbHRlck11bHRpVmFsdWVzXG59KSA9PiB7XG4gIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gIGlmIChmaWx0ZXJJbnB1dFR5cGUgPT09IFwia2V5XCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiBpdGVtLnZhbHVlLFxuICAgICAga2V5TGFiZWw6IGl0ZW0ubGFiZWwgPyBpdGVtLmxhYmVsIDogaXRlbS52YWx1ZVxuICAgIH07XG4gIH1cbiAgaWYgKGZpbHRlcklucHV0VHlwZSA9PT0gXCJ2YWx1ZVwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiBpdGVtLnZhbHVlLFxuICAgICAgdmFsdWVMYWJlbHM6IFtpdGVtLmxhYmVsID8gaXRlbS5sYWJlbCA6IGl0ZW0udmFsdWVdXG4gICAgfTtcbiAgfVxuICBpZiAoZmlsdGVySW5wdXRUeXBlID09PSBcIm9wZXJhdG9yXCIpIHtcbiAgICBpZiAoaXNNdWx0aVZhbHVlT3BlcmF0b3IoZmlsdGVyLm9wZXJhdG9yKSAmJiAhaXNNdWx0aVZhbHVlT3BlcmF0b3IoaXRlbS52YWx1ZSkpIHtcbiAgICAgIHNldEZpbHRlck11bHRpVmFsdWVzKFtdKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wZXJhdG9yOiBpdGVtLnZhbHVlLFxuICAgICAgICB2YWx1ZUxhYmVsczogWygoX2EgPSBmaWx0ZXIudmFsdWVMYWJlbHMpID09IG51bGwgPyB2b2lkIDAgOiBfYVswXSkgfHwgKChfYiA9IGZpbHRlci52YWx1ZXMpID09IG51bGwgPyB2b2lkIDAgOiBfYlswXSkgfHwgZmlsdGVyLnZhbHVlXSxcbiAgICAgICAgdmFsdWVzOiB2b2lkIDBcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChpc011bHRpVmFsdWVPcGVyYXRvcihpdGVtLnZhbHVlKSAmJiAhaXNNdWx0aVZhbHVlT3BlcmF0b3IoZmlsdGVyLm9wZXJhdG9yKSkge1xuICAgICAgY29uc3QgdmFsdWVMYWJlbHMgPSBbKChfYyA9IGZpbHRlci52YWx1ZUxhYmVscykgPT0gbnVsbCA/IHZvaWQgMCA6IF9jWzBdKSB8fCAoKF9kID0gZmlsdGVyLnZhbHVlcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9kWzBdKSB8fCBmaWx0ZXIudmFsdWVdO1xuICAgICAgY29uc3QgdmFsdWVzID0gW2ZpbHRlci52YWx1ZV07XG4gICAgICBpZiAodmFsdWVzWzBdKSB7XG4gICAgICAgIHNldEZpbHRlck11bHRpVmFsdWVzKFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVzWzBdLFxuICAgICAgICAgICAgbGFiZWw6IChfZSA9IHZhbHVlTGFiZWxzID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZUxhYmVsc1swXSkgIT0gbnVsbCA/IF9lIDogdmFsdWVzWzBdXG4gICAgICAgICAgfVxuICAgICAgICBdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wZXJhdG9yOiBpdGVtLnZhbHVlLFxuICAgICAgICB2YWx1ZUxhYmVscyxcbiAgICAgICAgdmFsdWVzXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIFtmaWx0ZXJJbnB1dFR5cGVdOiBpdGVtLnZhbHVlXG4gIH07XG59O1xuY29uc3QgSU5QVVRfUExBQ0VIT0xERVIgPSBcIkZpbHRlciBieSBsYWJlbCB2YWx1ZXNcIjtcbmNvbnN0IGdlbmVyYXRlUGxhY2Vob2xkZXIgPSAoZmlsdGVyLCBmaWx0ZXJJbnB1dFR5cGUsIGlzTXVsdGlWYWx1ZUVkaXQsIGlzQWx3YXlzV2lwKSA9PiB7XG4gIHZhciBfYTtcbiAgaWYgKGZpbHRlcklucHV0VHlwZSA9PT0gXCJrZXlcIikge1xuICAgIHJldHVybiBJTlBVVF9QTEFDRUhPTERFUjtcbiAgfVxuICBpZiAoZmlsdGVySW5wdXRUeXBlID09PSBcInZhbHVlXCIpIHtcbiAgICBpZiAoaXNNdWx0aVZhbHVlRWRpdCkge1xuICAgICAgcmV0dXJuIFwiRWRpdCB2YWx1ZXNcIjtcbiAgICB9XG4gICAgcmV0dXJuICgoX2EgPSBmaWx0ZXIudmFsdWVMYWJlbHMpID09IG51bGwgPyB2b2lkIDAgOiBfYVswXSkgfHwgXCJcIjtcbiAgfVxuICByZXR1cm4gZmlsdGVyW2ZpbHRlcklucHV0VHlwZV0gJiYgIWlzQWx3YXlzV2lwID8gYCR7ZmlsdGVyW2ZpbHRlcklucHV0VHlwZV19YCA6IElOUFVUX1BMQUNFSE9MREVSO1xufTtcbmNvbnN0IHBvcHVsYXRlSW5wdXRWYWx1ZU9uSW5wdXRUeXBlU3dpdGNoID0gKHtcbiAgcG9wdWxhdGVJbnB1dE9uRWRpdCxcbiAgaXRlbSxcbiAgZmlsdGVySW5wdXRUeXBlLFxuICBzZXRJbnB1dFZhbHVlLFxuICBmaWx0ZXJcbn0pID0+IHtcbiAgaWYgKHBvcHVsYXRlSW5wdXRPbkVkaXQgJiYgIWlzTXVsdGlWYWx1ZU9wZXJhdG9yKGl0ZW0udmFsdWUgfHwgXCJcIikgJiYgbmV4dElucHV0VHlwZU1hcFtmaWx0ZXJJbnB1dFR5cGVdID09PSBcInZhbHVlXCIpIHtcbiAgICBzZXRJbnB1dFZhbHVlKChmaWx0ZXIgPT0gbnVsbCA/IHZvaWQgMCA6IGZpbHRlci52YWx1ZSkgfHwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgc2V0SW5wdXRWYWx1ZShcIlwiKTtcbiAgfVxufTtcblxuZXhwb3J0IHsgRVJST1JfU1RBVEVfRFJPUERPV05fV0lEVEgsIFZJUlRVQUxfTElTVF9JVEVNX0hFSUdIVCwgVklSVFVBTF9MSVNUX0lURU1fSEVJR0hUX1dJVEhfREVTQ1JJUFRJT04sIFZJUlRVQUxfTElTVF9PVkVSU0NBTiwgZmxhdHRlbk9wdGlvbkdyb3VwcywgZnV6enlTZWFyY2hPcHRpb25zLCBnZW5lcmF0ZUZpbHRlclVwZGF0ZVBheWxvYWQsIGdlbmVyYXRlUGxhY2Vob2xkZXIsIHBvcHVsYXRlSW5wdXRWYWx1ZU9uSW5wdXRUeXBlU3dpdGNoLCBzZXR1cERyb3Bkb3duQWNjZXNzaWJpbGl0eSwgc3dpdGNoSW5wdXRUeXBlLCBzd2l0Y2hUb05leHRJbnB1dFR5cGUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZFhScGJITXVhbk1pTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUx5NHVMeTR1TDNOeVl5OTJZWEpwWVdKc1pYTXZZV1JvYjJNdlFXUkliMk5HYVd4MFpYSnpRMjl0WW05aWIzZ3ZkWFJwYkhNdWRITWlYU3dpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSHNnVTJWc1pXTjBZV0pzWlZaaGJIVmxJSDBnWm5KdmJTQW5RR2R5WVdaaGJtRXZaR0YwWVNjN1hHNXBiWEJ2Y25RZ2V5QkJaRWh2WTBsdWNIVjBWSGx3WlNCOUlHWnliMjBnSnk0dlFXUkliMk5HYVd4MFpYSnpRMjl0WW05aWIzZ25PMXh1YVcxd2IzSjBJSHNnUVdSSWIyTkdhV3gwWlhKWGFYUm9UR0ZpWld4ekxDQnBjMDExYkhScFZtRnNkV1ZQY0dWeVlYUnZjaUI5SUdaeWIyMGdKeTR1TDBGa1NHOWpSbWxzZEdWeWMxWmhjbWxoWW14bEp6dGNibWx0Y0c5eWRDQjdJR2RsZEVaMWVucDVVMlZoY21Ob1pYSWdmU0JtY205dElDY3VMaTh1TGk5MWRHbHNjeWM3WEc1Y2JtTnZibk4wSUZaSlVsUlZRVXhmVEVsVFZGOVhTVVJVU0Y5RlUxUkpUVUZVUlY5TlZVeFVTVkJNU1VWU0lEMGdPRHRjYm1OdmJuTjBJRlpKVWxSVlFVeGZURWxUVkY5RVJWTkRVa2xRVkVsUFRsOVhTVVJVU0Y5RlUxUkpUVUZVUlY5TlZVeFVTVkJNU1VWU0lEMGdOanRjYm1OdmJuTjBJRlpKVWxSVlFVeGZURWxUVkY5UVFVUkVTVTVISUQwZ09EdGNibVY0Y0c5eWRDQmpiMjV6ZENCV1NWSlVWVUZNWDB4SlUxUmZUMVpGVWxORFFVNGdQU0ExTzF4dVpYaHdiM0owSUdOdmJuTjBJRlpKVWxSVlFVeGZURWxUVkY5SlZFVk5YMGhGU1VkSVZDQTlJRE00TzF4dVpYaHdiM0owSUdOdmJuTjBJRlpKVWxSVlFVeGZURWxUVkY5SlZFVk5YMGhGU1VkSVZGOVhTVlJJWDBSRlUwTlNTVkJVU1U5T0lEMGdOakE3WEc1bGVIQnZjblFnWTI5dWMzUWdSVkpTVDFKZlUxUkJWRVZmUkZKUFVFUlBWMDVmVjBsRVZFZ2dQU0F6TmpZN1hHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQm1kWHA2ZVZObFlYSmphRTl3ZEdsdmJuTW9iM0IwYVc5dWN6b2dRWEp5WVhrOFUyVnNaV04wWVdKc1pWWmhiSFZsUEhOMGNtbHVaejQrS1NCN1hHNGdJR052Ym5OMElHaGhlWE4wWVdOcklEMGdiM0IwYVc5dWN5NXRZWEFvS0c4cElEMCtJRzh1YkdGaVpXd2dQejhnYnk1MllXeDFaU0VwTzF4dUlDQmpiMjV6ZENCbWRYcDZlVk5sWVhKamFDQTlJR2RsZEVaMWVucDVVMlZoY21Ob1pYSW9hR0Y1YzNSaFkyc3BPMXh1WEc0Z0lISmxkSFZ5YmlBb2MyVmhjbU5vT2lCemRISnBibWNzSUdacGJIUmxja2x1Y0hWMFZIbHdaVG9nUVdSSWIyTkpibkIxZEZSNWNHVXBJRDArSUh0Y2JpQWdJQ0JwWmlBb1ptbHNkR1Z5U1c1d2RYUlVlWEJsSUQwOVBTQW5iM0JsY21GMGIzSW5JQ1ltSUhObFlYSmphQ0FoUFQwZ0p5Y3BJSHRjYmlBZ0lDQWdJQzh2SUhWR2RYcDZlU0JqWVc0Z2IyNXNlU0J0WVhSamFDQnViMjR0WVd4d2FHRnVkVzBnWTJoaGNuTWdhV1lnY1hWdmRHVmtYRzRnSUNBZ0lDQnpaV0Z5WTJnZ1BTQmdYQ0lrZTNObFlYSmphSDFjSW1BN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnY21WMGRYSnVJR1oxZW5wNVUyVmhjbU5vS0hObFlYSmphQ2t1YldGd0tDaHBLU0E5UGlCdmNIUnBiMjV6VzJsZEtUdGNiaUFnZlR0Y2JuMWNibVY0Y0c5eWRDQmpiMjV6ZENCbWJHRjBkR1Z1VDNCMGFXOXVSM0p2ZFhCeklEMGdLRzl3ZEdsdmJuTTZJRUZ5Y21GNVBGTmxiR1ZqZEdGaWJHVldZV3gxWlR4emRISnBibWMrUGlrZ1BUNWNiaUFnYjNCMGFXOXVjeTVtYkdGMFRXRndQRk5sYkdWamRHRmliR1ZXWVd4MVpUeHpkSEpwYm1jK1BpZ29iM0IwYVc5dUtTQTlQaUFvYjNCMGFXOXVMbTl3ZEdsdmJuTWdQeUJiYjNCMGFXOXVMQ0F1TGk1dmNIUnBiMjR1YjNCMGFXOXVjMTBnT2lCYmIzQjBhVzl1WFNrcE8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ2MyVjBkWEJFY205d1pHOTNia0ZqWTJWemMybGlhV3hwZEhrZ1BTQW9YRzRnSUc5d2RHbHZibk02SUVGeWNtRjVQRk5sYkdWamRHRmliR1ZXWVd4MVpUeHpkSEpwYm1jK1BpeGNiaUFnYkdsemRGSmxaam9nVW1WaFkzUXVUWFYwWVdKc1pWSmxaazlpYW1WamREeEJjbkpoZVR4SVZFMU1SV3hsYldWdWRDQjhJRzUxYkd3K1BpeGNiaUFnWkdsellXSnNaV1JKYm1ScFkyVnpVbVZtT2lCU1pXRmpkQzVOZFhSaFlteGxVbVZtVDJKcVpXTjBQRzUxYldKbGNsdGRQbHh1S1NBOVBpQjdYRzRnSUd4bGRDQnRZWGhQY0hScGIyNVhhV1IwYUNBOUlERTRNanRjYmlBZ1kyOXVjM1FnYkdsemRGSmxaa0Z5Y2lBOUlGdGRPMXh1SUNCamIyNXpkQ0JrYVhOaFlteGxaRWx1WkdsalpYTWdQU0JiWFR0Y2JseHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUc5d2RHbHZibk11YkdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNBdkx5QnNhWE4wVW1WbVFYSnlJSE5vYjNWc1pDQmlaU0JtYVd4c1pXUWdkMmwwYUNCdWRXeHNjeUJtYjNJZ1lXMXZkVzUwSUc5bUlHUnliM0JrYjNkdUlHbDBaVzF6SUhOdklIUm9ZWFJjYmlBZ0lDQXZMeUFnSUNCMWMyVk9ZWFpwWjJGMGFXOXVUR2x6ZENCelpYUnpJR0ZqZEdsMlpVbHVaR1Y0SUdOdmNuSmxZM1JzZVNCM2FHVnVJRzVoZG1sbllYUnBibWNnZDJsMGFDQmhjbkp2ZHlCclpYbHpYRzRnSUNBZ2JHbHpkRkpsWmtGeWNpNXdkWE5vS0c1MWJHd3BPMXh1WEc0Z0lDQWdMeThnWkdsellXSnNaV1JKYm1ScFkyVnpJR0Z5WlNCMWMyVmtJSFJ2SUhOcmFYQWdkVzV6Wld4bFkzUmhZbXhsSUdkeWIzVndJR2wwWlcxeklHbHVJR1J5YjNCa2IzZHVJSGRvWlc1Y2JpQWdJQ0F2THlBZ0lDQnVZWFpwWjJGMGFXNW5JSGRwZEdnZ1lYSnliM2NnYTJWNWMxeHVJQ0FnSUdsbUlDaHZjSFJwYjI1elcybGRQeTV2Y0hScGIyNXpLU0I3WEc0Z0lDQWdJQ0JrYVhOaFlteGxaRWx1WkdsalpYTXVjSFZ6YUNocEtUdGNiaUFnSUNCOVhHNGdJQ0FnYkdWMElHeGhZbVZzSUQwZ2IzQjBhVzl1YzF0cFhTNXNZV0psYkNBL1B5QnZjSFJwYjI1elcybGRMblpoYkhWbElEOC9JQ2NuTzF4dUlDQWdJR3hsZENCdGRXeDBhWEJzYVdWeVZHOVZjMlVnUFNCV1NWSlVWVUZNWDB4SlUxUmZWMGxFVkVoZlJWTlVTVTFCVkVWZlRWVk1WRWxRVEVsRlVqdGNiaUFnSUNCcFppQW9YRzRnSUNBZ0lDQnNZV0psYkM1c1pXNW5kR2dnS2lCV1NWSlVWVUZNWDB4SlUxUmZWMGxFVkVoZlJWTlVTVTFCVkVWZlRWVk1WRWxRVEVsRlVpQThYRzRnSUNBZ0lDQW9iM0IwYVc5dWMxdHBYUzVrWlhOamNtbHdkR2x2Ymo4dWJHVnVaM1JvSUh4OElEQXBJQ29nVmtsU1ZGVkJURjlNU1ZOVVgwUkZVME5TU1ZCVVNVOU9YMWRKUkZSSVgwVlRWRWxOUVZSRlgwMVZURlJKVUV4SlJWSmNiaUFnSUNBcElIdGNiaUFnSUNBZ0lHeGhZbVZzSUQwZ2IzQjBhVzl1YzF0cFhTNWtaWE5qY21sd2RHbHZiaUU3WEc0Z0lDQWdJQ0J0ZFd4MGFYQnNhV1Z5Vkc5VmMyVWdQU0JXU1ZKVVZVRk1YMHhKVTFSZlJFVlRRMUpKVUZSSlQwNWZWMGxFVkVoZlJWTlVTVTFCVkVWZlRWVk1WRWxRVEVsRlVqdGNiaUFnSUNCOVhHNWNiaUFnSUNBdkx5QnliM1ZuYUNCM2FXUjBhRVZ6ZEdsdFlYUmxYRzRnSUNBZ1kyOXVjM1FnZDJsa2RHaEZjM1JwYldGMFpTQTlYRzRnSUNBZ0lDQW9iM0IwYVc5dWMxdHBYUzVwYzBOMWMzUnZiU0EvSUd4aFltVnNMbXhsYm1kMGFDQXJJREU0SURvZ2JHRmlaV3d1YkdWdVozUm9LU0FxSUcxMWJIUnBjR3hwWlhKVWIxVnpaU0FySUZaSlVsUlZRVXhmVEVsVFZGOVFRVVJFU1U1SElDb2dNanRjYmlBZ0lDQnBaaUFvZDJsa2RHaEZjM1JwYldGMFpTQStJRzFoZUU5d2RHbHZibGRwWkhSb0tTQjdYRzRnSUNBZ0lDQnRZWGhQY0hScGIyNVhhV1IwYUNBOUlIZHBaSFJvUlhOMGFXMWhkR1U3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnYkdsemRGSmxaaTVqZFhKeVpXNTBJRDBnV3k0dUxteHBjM1JTWldaQmNuSmRPMXh1SUNCa2FYTmhZbXhsWkVsdVpHbGpaWE5TWldZdVkzVnljbVZ1ZENBOUlGc3VMaTVrYVhOaFlteGxaRWx1WkdsalpYTmRPMXh1SUNCeVpYUjFjbTRnYldGNFQzQjBhVzl1VjJsa2RHZzdYRzU5TzF4dVhHNWpiMjV6ZENCdVpYaDBTVzV3ZFhSVWVYQmxUV0Z3SUQwZ2UxeHVJQ0JyWlhrNklDZHZjR1Z5WVhSdmNpY3NYRzRnSUc5d1pYSmhkRzl5T2lBbmRtRnNkV1VuTEZ4dUlDQjJZV3gxWlRvZ0oydGxlU2NzWEc1OUlHRnpJR052Ym5OME8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ2MzZHBkR05vVkc5T1pYaDBTVzV3ZFhSVWVYQmxJRDBnS0Z4dUlDQm1hV3gwWlhKSmJuQjFkRlI1Y0dVNklFRmtTRzlqU1c1d2RYUlVlWEJsTEZ4dUlDQnpaWFJKYm5CMWRGUjVjR1U2SUZKbFlXTjBMa1JwYzNCaGRHTm9QRkpsWVdOMExsTmxkRk4wWVhSbFFXTjBhVzl1UEVGa1NHOWpTVzV3ZFhSVWVYQmxQajRzWEc0Z0lHaGhibVJzWlVOb1lXNW5aVlpwWlhkTmIyUmxPaUFvS0dWMlpXNTBQem9nVW1WaFkzUXVUVzkxYzJWRmRtVnVkQ3dnYzJodmRXeGtSbTlqZFhOUGJrWnBiSFJsY2xCcGJHdy9PaUJpYjI5c1pXRnVLU0E5UGlCMmIybGtLU0I4SUhWdVpHVm1hVzVsWkN4Y2JpQWdaV3hsYldWdWREb2dTRlJOVEVsdWNIVjBSV3hsYldWdWRDQjhJRzUxYkd3c1hHNGdJSE5vYjNWc1pFWnZZM1Z6VDI1UWFXeHNWM0poY0hCbGNrOTJaWEp5YVdSbFB6b2dZbTl2YkdWaGJseHVLU0E5UGx4dUlDQnpkMmwwWTJoSmJuQjFkRlI1Y0dVb1hHNGdJQ0FnYm1WNGRFbHVjSFYwVkhsd1pVMWhjRnRtYVd4MFpYSkpibkIxZEZSNWNHVmRMRnh1SUNBZ0lITmxkRWx1Y0hWMFZIbHdaU3hjYmlBZ0lDQm1hV3gwWlhKSmJuQjFkRlI1Y0dVZ1BUMDlJQ2QyWVd4MVpTY2dQeUJvWVc1a2JHVkRhR0Z1WjJWV2FXVjNUVzlrWlNBNklIVnVaR1ZtYVc1bFpDeGNiaUFnSUNCbGJHVnRaVzUwTEZ4dUlDQWdJSE5vYjNWc1pFWnZZM1Z6VDI1UWFXeHNWM0poY0hCbGNrOTJaWEp5YVdSbFhHNGdJQ2s3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0J6ZDJsMFkyaEpibkIxZEZSNWNHVWdQU0FvWEc0Z0lHWnBiSFJsY2tsdWNIVjBWSGx3WlRvZ1FXUkliMk5KYm5CMWRGUjVjR1VzWEc0Z0lITmxkRWx1Y0hWMFZIbHdaVG9nVW1WaFkzUXVSR2x6Y0dGMFkyZzhVbVZoWTNRdVUyVjBVM1JoZEdWQlkzUnBiMjQ4UVdSSWIyTkpibkIxZEZSNWNHVStQaXhjYmlBZ2FHRnVaR3hsUTJoaGJtZGxWbWxsZDAxdlpHVS9PaUFvWlhabGJuUS9PaUJTWldGamRDNU5iM1Z6WlVWMlpXNTBMQ0J6YUc5MWJHUkdiMk4xYzA5dVJtbHNkR1Z5VUdsc2JEODZJR0p2YjJ4bFlXNHBJRDArSUhadmFXUXNYRzRnSUdWc1pXMWxiblEvT2lCSVZFMU1TVzV3ZFhSRmJHVnRaVzUwSUh3Z2JuVnNiQ3hjYmlBZ2MyaHZkV3hrUm05amRYTlBibEJwYkd4WGNtRndjR1Z5VDNabGNuSnBaR1UvT2lCaWIyOXNaV0Z1WEc0cElEMCtJSHRjYmlBZ2MyVjBTVzV3ZFhSVWVYQmxLR1pwYkhSbGNrbHVjSFYwVkhsd1pTazdYRzVjYmlBZ2FHRnVaR3hsUTJoaGJtZGxWbWxsZDAxdlpHVS9MaWgxYm1SbFptbHVaV1FzSUhOb2IzVnNaRVp2WTNWelQyNVFhV3hzVjNKaGNIQmxjazkyWlhKeWFXUmxLVHRjYmx4dUlDQnpaWFJVYVcxbGIzVjBLQ2dwSUQwK0lHVnNaVzFsYm5RL0xtWnZZM1Z6S0NrcE8xeHVmVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJR2RsYm1WeVlYUmxSbWxzZEdWeVZYQmtZWFJsVUdGNWJHOWhaQ0E5SUNoN1hHNGdJR1pwYkhSbGNrbHVjSFYwVkhsd1pTeGNiaUFnYVhSbGJTeGNiaUFnWm1sc2RHVnlMRnh1SUNCelpYUkdhV3gwWlhKTmRXeDBhVlpoYkhWbGN5eGNibjA2SUh0Y2JpQWdabWxzZEdWeVNXNXdkWFJVZVhCbE9pQkJaRWh2WTBsdWNIVjBWSGx3WlR0Y2JpQWdhWFJsYlRvZ1UyVnNaV04wWVdKc1pWWmhiSFZsUEhOMGNtbHVaejQ3WEc0Z0lHWnBiSFJsY2pvZ1FXUkliMk5HYVd4MFpYSlhhWFJvVEdGaVpXeHpPMXh1SUNCelpYUkdhV3gwWlhKTmRXeDBhVlpoYkhWbGN6b2dLSFpoYkhWbE9pQlNaV0ZqZEM1VFpYUlRkR0YwWlVGamRHbHZianhCY25KaGVUeFRaV3hsWTNSaFlteGxWbUZzZFdVOGMzUnlhVzVuUGo0K0tTQTlQaUIyYjJsa08xeHVmU2s2SUZCaGNuUnBZV3c4UVdSSWIyTkdhV3gwWlhKWGFYUm9UR0ZpWld4elBpQTlQaUI3WEc0Z0lHbG1JQ2htYVd4MFpYSkpibkIxZEZSNWNHVWdQVDA5SUNkclpYa25LU0I3WEc0Z0lDQWdjbVYwZFhKdUlIdGNiaUFnSUNBZ0lHdGxlVG9nYVhSbGJTNTJZV3gxWlN4Y2JpQWdJQ0FnSUd0bGVVeGhZbVZzT2lCcGRHVnRMbXhoWW1Wc0lEOGdhWFJsYlM1c1lXSmxiQ0E2SUdsMFpXMHVkbUZzZFdVc1hHNGdJQ0FnZlR0Y2JpQWdmVnh1SUNCcFppQW9abWxzZEdWeVNXNXdkWFJVZVhCbElEMDlQU0FuZG1Gc2RXVW5LU0I3WEc0Z0lDQWdjbVYwZFhKdUlIdGNiaUFnSUNBZ0lIWmhiSFZsT2lCcGRHVnRMblpoYkhWbExGeHVJQ0FnSUNBZ2RtRnNkV1ZNWVdKbGJITTZJRnRwZEdWdExteGhZbVZzSUQ4Z2FYUmxiUzVzWVdKbGJDQTZJR2wwWlcwdWRtRnNkV1VoWFN4Y2JpQWdJQ0I5TzF4dUlDQjlYRzVjYmlBZ2FXWWdLR1pwYkhSbGNrbHVjSFYwVkhsd1pTQTlQVDBnSjI5d1pYSmhkRzl5SnlrZ2UxeHVJQ0FnSUM4dklHaGhibVJzWlNCMllXeDFaWE12ZG1Gc2RXVk1ZV0psYkhNZ2QyaGxiaUJ6ZDJsMFkyaHBibWNnWm5KdmJTQnRkV3gwYVNCMGJ5QnphVzVuYkdVZ2RtRnNkV1VnYjNCbGNtRjBiM0pjYmlBZ0lDQnBaaUFvYVhOTmRXeDBhVlpoYkhWbFQzQmxjbUYwYjNJb1ptbHNkR1Z5TG05d1pYSmhkRzl5S1NBbUppQWhhWE5OZFd4MGFWWmhiSFZsVDNCbGNtRjBiM0lvYVhSbGJTNTJZV3gxWlNFcEtTQjdYRzRnSUNBZ0lDQXZMeUJ5WlhObGRDQnNiMk5oYkNCdGRXeDBhU0IyWVd4MVpYTWdjM1JoZEdWY2JpQWdJQ0FnSUhObGRFWnBiSFJsY2sxMWJIUnBWbUZzZFdWektGdGRLVHRjYmlBZ0lDQWdJQzh2SUhWd1pHRjBaU0J2Y0dWeVlYUnZjaUJoYm1RZ2NtVnpaWFFnZG1Gc2RXVnpJR0Z1WkNCMllXeDFaVXhoWW1Wc2MxeHVJQ0FnSUNBZ2NtVjBkWEp1SUh0Y2JpQWdJQ0FnSUNBZ2IzQmxjbUYwYjNJNklHbDBaVzB1ZG1Gc2RXVXNYRzRnSUNBZ0lDQWdJSFpoYkhWbFRHRmlaV3h6T2lCYlptbHNkR1Z5TG5aaGJIVmxUR0ZpWld4elB5NWJNRjBnZkh3Z1ptbHNkR1Z5TG5aaGJIVmxjejh1V3pCZElIeDhJR1pwYkhSbGNpNTJZV3gxWlYwc1hHNGdJQ0FnSUNBZ0lIWmhiSFZsY3pvZ2RXNWtaV1pwYm1Wa0xGeHVJQ0FnSUNBZ2ZUdGNiaUFnSUNCOVhHNWNiaUFnSUNBdkx5Qm9ZVzVrYkdVZ2RtRnNkV1Z6TDNaaGJIVmxUR0ZpWld4eklIZG9aVzRnYzNkcGRHTm9hVzVuSUdaeWIyMGdjMmx1WjJ4bElIUnZJRzExYkhScElIWmhiSFZsSUc5d1pYSmhkRzl5WEc0Z0lDQWdhV1lnS0dselRYVnNkR2xXWVd4MVpVOXdaWEpoZEc5eUtHbDBaVzB1ZG1Gc2RXVWhLU0FtSmlBaGFYTk5kV3gwYVZaaGJIVmxUM0JsY21GMGIzSW9abWxzZEdWeUxtOXdaWEpoZEc5eUtTa2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ2RtRnNkV1ZNWVdKbGJITWdQU0JiWm1sc2RHVnlMblpoYkhWbFRHRmlaV3h6UHk1Yk1GMGdmSHdnWm1sc2RHVnlMblpoYkhWbGN6OHVXekJkSUh4OElHWnBiSFJsY2k1MllXeDFaVjA3WEc0Z0lDQWdJQ0JqYjI1emRDQjJZV3gxWlhNZ1BTQmJabWxzZEdWeUxuWmhiSFZsWFR0Y2JseHVJQ0FnSUNBZ0x5OGdjRzl3ZFd4aGRHVWdiRzlqWVd3Z2JYVnNkR2tnZG1Gc2RXVnpJSE4wWVhSbFhHNGdJQ0FnSUNCcFppQW9kbUZzZFdWeld6QmRLU0I3WEc0Z0lDQWdJQ0FnSUhObGRFWnBiSFJsY2sxMWJIUnBWbUZzZFdWektGdGNiaUFnSUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjJZV3gxWlRvZ2RtRnNkV1Z6V3pCZExGeHVJQ0FnSUNBZ0lDQWdJQ0FnYkdGaVpXdzZJSFpoYkhWbFRHRmlaV3h6UHk1Yk1GMGdQejhnZG1Gc2RXVnpXekJkTEZ4dUlDQWdJQ0FnSUNBZ0lIMHNYRzRnSUNBZ0lDQWdJRjBwTzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBdkx5QjFjR1JoZEdVZ2IzQmxjbUYwYjNJZ1lXNWtJR1JsWm1GMWJIUWdkbUZzZFdWeklHRnVaQ0IyWVd4MVpVeGhZbVZzYzF4dUlDQWdJQ0FnY21WMGRYSnVJSHRjYmlBZ0lDQWdJQ0FnYjNCbGNtRjBiM0k2SUdsMFpXMHVkbUZzZFdVc1hHNGdJQ0FnSUNBZ0lIWmhiSFZsVEdGaVpXeHpPaUIyWVd4MVpVeGhZbVZzY3l4Y2JpQWdJQ0FnSUNBZ2RtRnNkV1Z6T2lCMllXeDFaWE1zWEc0Z0lDQWdJQ0I5TzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUM4dklHUmxabUYxYkhRZ2IzQmxjbUYwYjNJZ2RYQmtZWFJsSUc5bUlITmhiV1VnYlhWc2RHa3ZjMmx1WjJ4bElIUjVjR1ZjYmlBZ2NtVjBkWEp1SUh0Y2JpQWdJQ0JiWm1sc2RHVnlTVzV3ZFhSVWVYQmxYVG9nYVhSbGJTNTJZV3gxWlN4Y2JpQWdmVHRjYm4wN1hHNWNibU52Ym5OMElFbE9VRlZVWDFCTVFVTkZTRTlNUkVWU0lEMGdKMFpwYkhSbGNpQmllU0JzWVdKbGJDQjJZV3gxWlhNbk8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ1oyVnVaWEpoZEdWUWJHRmpaV2h2YkdSbGNpQTlJQ2hjYmlBZ1ptbHNkR1Z5T2lCQlpFaHZZMFpwYkhSbGNsZHBkR2hNWVdKbGJITXNYRzRnSUdacGJIUmxja2x1Y0hWMFZIbHdaVG9nUVdSSWIyTkpibkIxZEZSNWNHVXNYRzRnSUdselRYVnNkR2xXWVd4MVpVVmthWFE2SUdKdmIyeGxZVzRzWEc0Z0lHbHpRV3gzWVhselYybHdQem9nWW05dmJHVmhibHh1S1NBOVBpQjdYRzRnSUdsbUlDaG1hV3gwWlhKSmJuQjFkRlI1Y0dVZ1BUMDlJQ2RyWlhrbktTQjdYRzRnSUNBZ2NtVjBkWEp1SUVsT1VGVlVYMUJNUVVORlNFOU1SRVZTTzF4dUlDQjlYRzRnSUdsbUlDaG1hV3gwWlhKSmJuQjFkRlI1Y0dVZ1BUMDlJQ2QyWVd4MVpTY3BJSHRjYmlBZ0lDQnBaaUFvYVhOTmRXeDBhVlpoYkhWbFJXUnBkQ2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVJQ2RGWkdsMElIWmhiSFZsY3ljN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQm1hV3gwWlhJdWRtRnNkV1ZNWVdKbGJITS9MbHN3WFNCOGZDQW5KenRjYmlBZ2ZWeHVYRzRnSUhKbGRIVnliaUJtYVd4MFpYSmJabWxzZEdWeVNXNXdkWFJVZVhCbFhTQW1KaUFoYVhOQmJIZGhlWE5YYVhBZ1B5QmdKSHRtYVd4MFpYSmJabWxzZEdWeVNXNXdkWFJVZVhCbFhYMWdJRG9nU1U1UVZWUmZVRXhCUTBWSVQweEVSVkk3WEc1OU8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ2NHOXdkV3hoZEdWSmJuQjFkRlpoYkhWbFQyNUpibkIxZEZSNWNHVlRkMmwwWTJnZ1BTQW9lMXh1SUNCd2IzQjFiR0YwWlVsdWNIVjBUMjVGWkdsMExGeHVJQ0JwZEdWdExGeHVJQ0JtYVd4MFpYSkpibkIxZEZSNWNHVXNYRzRnSUhObGRFbHVjSFYwVm1Gc2RXVXNYRzRnSUdacGJIUmxjaXhjYm4wNklIdGNiaUFnY0c5d2RXeGhkR1ZKYm5CMWRFOXVSV1JwZERvZ1ltOXZiR1ZoYmlCOElIVnVaR1ZtYVc1bFpEdGNiaUFnYVhSbGJUb2dVMlZzWldOMFlXSnNaVlpoYkhWbFBITjBjbWx1Wno0N1hHNGdJR1pwYkhSbGNrbHVjSFYwVkhsd1pUb2dRV1JJYjJOSmJuQjFkRlI1Y0dVN1hHNGdJSE5sZEVsdWNIVjBWbUZzZFdVNklDaDJZV3gxWlRvZ1VtVmhZM1F1VTJWMFUzUmhkR1ZCWTNScGIyNDhjM1J5YVc1blBpa2dQVDRnZG05cFpEdGNiaUFnWm1sc2RHVnlPaUJCWkVodlkwWnBiSFJsY2xkcGRHaE1ZV0psYkhNZ2ZDQjFibVJsWm1sdVpXUTdYRzU5S1NBOVBpQjdYRzRnSUdsbUlDaHdiM0IxYkdGMFpVbHVjSFYwVDI1RlpHbDBJQ1ltSUNGcGMwMTFiSFJwVm1Gc2RXVlBjR1Z5WVhSdmNpaHBkR1Z0TG5aaGJIVmxJSHg4SUNjbktTQW1KaUJ1WlhoMFNXNXdkWFJVZVhCbFRXRndXMlpwYkhSbGNrbHVjSFYwVkhsd1pWMGdQVDA5SUNkMllXeDFaU2NwSUh0Y2JpQWdJQ0J6WlhSSmJuQjFkRlpoYkhWbEtHWnBiSFJsY2o4dWRtRnNkV1VnZkh3Z0p5Y3BPMXh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJSE5sZEVsdWNIVjBWbUZzZFdVb0p5Y3BPMXh1SUNCOVhHNTlPMXh1SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3T3p0QlFVdEJMRTFCUVUwc2MwTkJRWGxETEVkQlFVRXNRMEZCUVN4RFFVRkJPMEZCUXk5RExFMUJRVTBzYTBSQlFYRkVMRWRCUVVFc1EwRkJRU3hEUVVGQk8wRkJRek5FTEUxQlFVMHNiMEpCUVhWQ0xFZEJRVUVzUTBGQlFTeERRVUZCTzBGQlEzUkNMRTFCUVUwc2NVSkJRWGRDTEVkQlFVRXNSVUZCUVR0QlFVTTVRaXhOUVVGTkxIZENRVUV5UWl4SFFVRkJMRWRCUVVFN1FVRkRha01zVFVGQlRTeDVRMEZCTkVNc1IwRkJRU3hIUVVGQk8wRkJRMnhFTEUxQlFVMHNNRUpCUVRaQ0xFZEJRVUVzU1VGQlFUdEJRVVZ1UXl4VFFVRlRMRzFDUVVGdFFpeFBRVUY1UXl4RlFVRkJPMEZCUXpGRkxFVkJRVUVzVFVGQlRTeFJRVUZYTEVkQlFVRXNUMEZCUVN4RFFVRlJMRWRCUVVrc1EwRkJRU3hEUVVGRExFTkJRVWNzUzBGQlFUdEJRV1J1UXl4SlFVRkJMRWxCUVVFc1JVRkJRU3hEUVVGQk8wRkJZM05ETEVsQlFVVXNUMEZCUVN4RFFVRkJMRVZCUVVFc1IwRkJRU3hEUVVGQkxFTkJRVUVzUzBGQlFTeExRVUZHTEZsQlFWY3NRMEZCUlN4RFFVRkJMRXRCUVVFc1EwRkJRVHRCUVVGQkxFZEJRVTBzUTBGQlFTeERRVUZCTzBGQlEzWkVMRVZCUVUwc1RVRkJRU3hYUVVGQkxFZEJRV01zYVVKQlFXbENMRkZCUVZFc1EwRkJRU3hEUVVGQk8wRkJSVGRETEVWQlFVOHNUMEZCUVN4RFFVRkRMRkZCUVdkQ0xHVkJRVzlETEV0QlFVRTdRVUZETVVRc1NVRkJTU3hKUVVGQkxHVkJRVUVzUzBGQmIwSXNWVUZCWXl4SlFVRkJMRTFCUVVFc1MwRkJWeXhGUVVGSkxFVkJRVUU3UVVGRmJrUXNUVUZCUVN4TlFVRkJMRWRCUVZNc1EwRkJTU3hEUVVGQkxFVkJRVUVzVFVGQlFTeERRVUZCTEVOQlFVRXNRMEZCUVN4RFFVRkJPMEZCUVVFc1MwRkRaanRCUVVWQkxFbEJRVUVzVDBGQlR5eFpRVUZaTEUxQlFVMHNRMEZCUVN4RFFVRkZMRWxCUVVrc1EwRkJReXhEUVVGQkxFdEJRVTBzVVVGQlVTeERRVUZGTEVOQlFVRXNRMEZCUVN4RFFVRkJPMEZCUVVFc1IwRkRiRVFzUTBGQlFUdEJRVU5HTEVOQlFVRTdRVUZEVHl4TlFVRk5MSE5DUVVGelFpeERRVUZETEU5QlFVRXNTMEZEYkVNc1QwRkJVU3hEUVVGQkxFOUJRVUVzUTBGQmFVTXNRMEZCUXl4TlFVRlpMRXRCUVVFc1RVRkJRU3hEUVVGUExFOUJRVlVzUjBGQlFTeERRVUZETEZGQlFWRXNSMEZCUnl4TlFVRkJMRU5CUVU4c1QwRkJUeXhEUVVGSkxFZEJRVUVzUTBGQlF5eE5RVUZOTEVOQlFVVXNSVUZCUVR0QlFVVjZSeXhOUVVGTkxEQkNRVUUyUWl4SFFVRkJMRU5CUTNoRExFOUJRMEVzUlVGQlFTeFBRVUZCTEVWQlEwRXNhMEpCUTBjc1MwRkJRVHRCUVdwRFRDeEZRVUZCTEVsQlFVRXNSVUZCUVN4RlFVRkJMRVZCUVVFc1JVRkJRU3hGUVVGQkxFVkJRVUVzUlVGQlFTeERRVUZCTzBGQmEwTkZMRVZCUVVFc1NVRkJTU3hqUVVGcFFpeEhRVUZCTEVkQlFVRXNRMEZCUVR0QlFVTnlRaXhGUVVGQkxFMUJRVTBzWVVGQllTeEZRVUZETEVOQlFVRTdRVUZEY0VJc1JVRkJRU3hOUVVGTkxHdENRVUZyUWl4RlFVRkRMRU5CUVVFN1FVRkZla0lzUlVGQlFTeExRVUZCTEVsQlFWTXNRMEZCU1N4SFFVRkJMRU5CUVVFc1JVRkJSeXhEUVVGSkxFZEJRVUVzVDBGQlFTeERRVUZSTEZGQlFWRXNRMEZCU3l4RlFVRkJMRVZCUVVFN1FVRkhka01zU1VGQlFTeFZRVUZCTEVOQlFWY3NTMEZCU3l4SlFVRkpMRU5CUVVFc1EwRkJRVHRCUVVsd1FpeEpRVUZKTEVsQlFVRXNRMEZCUVN4RlFVRkJMRWRCUVVFc1QwRkJRU3hEUVVGUkxFTkJRVklzUTBGQlFTeExRVUZCTEVsQlFVRXNSMEZCUVN4TFFVRkJMRU5CUVVFc1IwRkJRU3hGUVVGQkxFTkJRVmtzVDBGQlV5eEZRVUZCTzBGQlEzWkNMRTFCUVVFc1pVRkJRU3hEUVVGblFpeExRVUZMTEVOQlFVTXNRMEZCUVN4RFFVRkJPMEZCUVVFc1MwRkRlRUk3UVVGRFFTeEpRVUZKTEVsQlFVRXNTMEZCUVN4SFFVRkJMRU5CUVZFc2JVSkJRVkVzUTBGQlJ5eERRVUZCTEVOQlFVRXNTMEZCUVN4TFFVRllMRmxCUVc5Q0xFOUJRVkVzUTBGQlFTeERRVUZCTEVOQlFVRXNRMEZCUnl4VlFVRXZRaXhKUVVGM1F5eEhRVUZCTEVWQlFVRXNSMEZCUVN4RlFVRkJMRU5CUVVFN1FVRkRjRVFzU1VGQlFTeEpRVUZKTEdWQlFXdENMRWRCUVVFc2MwTkJRVUVzUTBGQlFUdEJRVU4wUWl4SlFVTkZMRWxCUVVFc1MwRkJRU3hEUVVGTkxGTkJRVk1zYzBOQlEyUXNSMEZCUVN4RFFVRkJMRU5CUVVFc1EwRkJRU3hGUVVGQkxFZEJRVUVzVDBGQlFTeERRVUZSTEVkQlFVY3NWMEZCV0N4TFFVRkJMRWxCUVVFc1IwRkJRU3hMUVVGQkxFTkJRVUVzUjBGQlFTeEZRVUZCTEVOQlFYZENMRTFCUVZVc1MwRkJRU3hEUVVGQkxFbEJRVXNzYTBSQlEzaERMRVZCUVVFN1FVRkRRU3hOUVVGQkxFdEJRVUVzUjBGQlVTeFJRVUZSTEVOQlFVY3NRMEZCUVN4RFFVRkJMRmRCUVVFc1EwRkJRVHRCUVVOdVFpeE5RVUZyUWl4bFFVRkJMRWRCUVVFc2EwUkJRVUVzUTBGQlFUdEJRVUZCTEV0QlEzQkNPMEZCUjBFc1NVRkJUU3hOUVVGQkxHRkJRVUVzUjBGQlFTeERRVU5JTEU5QlFWRXNRMEZCUVN4RFFVRkJMRU5CUVVFc1EwRkJSeXhSUVVGWExFZEJRVUVzUzBGQlFTeERRVUZOTEZOQlFWTXNSVUZCU3l4SFFVRkJMRXRCUVVFc1EwRkJUU3hOUVVGVkxFbEJRVUVzWlVGQlFTeEhRVUZyUWl4dlFrRkJkVUlzUjBGQlFTeERRVUZCTEVOQlFVRTdRVUZEZEVjc1NVRkJRU3hKUVVGSkxHZENRVUZuUWl4alFVRm5RaXhGUVVGQk8wRkJRMnhETEUxQlFXbENMR05CUVVFc1IwRkJRU3hoUVVGQkxFTkJRVUU3UVVGQlFTeExRVU51UWp0QlFVRkJMRWRCUTBZN1FVRkZRU3hGUVVGUkxFOUJRVUVzUTBGQlFTeFBRVUZCTEVkQlFWVXNRMEZCUXl4SFFVRkhMRlZCUVZVc1EwRkJRU3hEUVVGQk8wRkJRMmhETEVWQlFXMUNMR3RDUVVGQkxFTkJRVUVzVDBGQlFTeEhRVUZWTEVOQlFVTXNSMEZCUnl4bFFVRmxMRU5CUVVFc1EwRkJRVHRCUVVOb1JDeEZRVUZQTEU5QlFVRXNZMEZCUVN4RFFVRkJPMEZCUTFRc1JVRkJRVHRCUVVWQkxFMUJRVTBzWjBKQlFXMUNMRWRCUVVFN1FVRkJRU3hGUVVOMlFpeEhRVUZMTEVWQlFVRXNWVUZCUVR0QlFVRkJMRVZCUTB3c1VVRkJWU3hGUVVGQkxFOUJRVUU3UVVGQlFTeEZRVU5XTEV0QlFVOHNSVUZCUVN4TFFVRkJPMEZCUTFRc1EwRkJRU3hEUVVGQk8wRkJSVThzVFVGQlRTeDNRa0ZCZDBJc1EwRkRia01zWlVGQlFTeEZRVU5CTEZsQlEwRXNSVUZCUVN4dlFrRkJRU3hGUVVOQkxGTkJRMEVzWjBOQlJVRXNTMEZCUVN4bFFVRkJPMEZCUVVFc1JVRkRSU3huUWtGQmFVSXNRMEZCUVN4bFFVRkJMRU5CUVVFN1FVRkJRU3hGUVVOcVFpeFpRVUZCTzBGQlFVRXNSVUZEUVN4bFFVRkJMRXRCUVc5Q0xGVkJRVlVzYjBKQlFYVkNMRWRCUVVFc1MwRkJRU3hEUVVGQk8wRkJRVUVzUlVGRGNrUXNUMEZCUVR0QlFVRkJMRVZCUTBFc1owTkJRVUU3UVVGRFJpeEZRVUZCTzBGQlJVc3NUVUZCVFN4clFrRkJhMElzUTBGRE4wSXNaVUZCUVN4RlFVTkJMRmxCUTBFc1JVRkJRU3h2UWtGQlFTeEZRVU5CTEZOQlEwRXNaME5CUTBjc1MwRkJRVHRCUVVOSUxFVkJRVUVzV1VGQlFTeERRVUZoTEdWQlFXVXNRMEZCUVN4RFFVRkJPMEZCUlRWQ0xFVkJRVUVzYjBKQlFVRXNTVUZCUVN4SlFVRkJMRWRCUVVFc1MwRkJRU3hEUVVGQkxFZEJRVUVzYjBKQlFVRXNRMEZCZFVJc1MwRkJWeXhEUVVGQkxFVkJRVUVzWjBOQlFVRXNRMEZCUVN4RFFVRkJPMEZCUld4RExFVkJRVmNzVlVGQlFTeERRVUZCTEUxQlFVMHNiVU5CUVZNc1MwRkJUeXhGUVVGQkxFTkJRVUVzUTBGQlFUdEJRVU51UXl4RlFVRkJPMEZCUlU4c1RVRkJUU3c0UWtGQk9FSXNRMEZCUXp0QlFVRkJMRVZCUXpGRExHVkJRVUU3UVVGQlFTeEZRVU5CTEVsQlFVRTdRVUZCUVN4RlFVTkJMRTFCUVVFN1FVRkJRU3hGUVVOQkxHOUNRVUZCTzBGQlEwWXNRMEZMYzBNc1MwRkJRVHRCUVhCSWRFTXNSVUZCUVN4SlFVRkJMRVZCUVVFc1JVRkJRU3hGUVVGQkxFVkJRVUVzUlVGQlFTeEZRVUZCTEVWQlFVRXNSVUZCUVN4RlFVRkJMRU5CUVVFN1FVRnhTRVVzUlVGQlFTeEpRVUZKTEc5Q1FVRnZRaXhMUVVGUExFVkJRVUU3UVVGRE4wSXNTVUZCVHl4UFFVRkJPMEZCUVVFc1RVRkRUQ3hMUVVGTExFbEJRVXNzUTBGQlFTeExRVUZCTzBGQlFVRXNUVUZEVml4UlFVRlZMRVZCUVVFc1NVRkJRU3hEUVVGTExFdEJRVkVzUjBGQlFTeEpRVUZCTEVOQlFVc3NVVUZCVVN4SlFVRkxMRU5CUVVFc1MwRkJRVHRCUVVGQkxFdEJRek5ETEVOQlFVRTdRVUZCUVN4SFFVTkdPMEZCUTBFc1JVRkJRU3hKUVVGSkxHOUNRVUZ2UWl4UFFVRlRMRVZCUVVFN1FVRkRMMElzU1VGQlR5eFBRVUZCTzBGQlFVRXNUVUZEVEN4UFFVRlBMRWxCUVVzc1EwRkJRU3hMUVVGQk8wRkJRVUVzVFVGRFdpeGhRVUZoTEVOQlFVTXNTVUZCUVN4RFFVRkxMRkZCUVZFc1NVRkJTeXhEUVVGQkxFdEJRVUVzUjBGQlVTeExRVUZMTEV0QlFVMHNRMEZCUVR0QlFVRkJMRXRCUTNKRUxFTkJRVUU3UVVGQlFTeEhRVU5HTzBGQlJVRXNSVUZCUVN4SlFVRkpMRzlDUVVGdlFpeFZRVUZaTEVWQlFVRTdRVUZGYkVNc1NVRkJTU3hKUVVGQkxHOUNRVUZCTEVOQlFYRkNMRTlCUVU4c1VVRkJVU3hEUVVGQkxFbEJRVXNzUTBGQlF5eHZRa0ZCY1VJc1EwRkJRU3hKUVVGQkxFTkJRVXNzUzBGQlRTeERRVUZITEVWQlFVRTdRVUZGTDBVc1RVRkJRU3h2UWtGQlFTeERRVUZ4UWl4RlFVRkZMRU5CUVVFc1EwRkJRVHRCUVVWMlFpeE5RVUZQTEU5QlFVRTdRVUZCUVN4UlFVTk1MRlZCUVZVc1NVRkJTeXhEUVVGQkxFdEJRVUU3UVVGQlFTeFJRVU5tTEZkQlFVRXNSVUZCWVN4RFFVRkRMRU5CUVVFc1EwRkJRU3hGUVVGQkxFZEJRVUVzVFVGQlFTeERRVUZQTEZkQlFWQXNTMEZCUVN4SlFVRkJMRWRCUVVFc1MwRkJRU3hEUVVGQkxFZEJRVUVzUlVGQlFTeERRVUZ4UWl4RFFVRk5MRU5CUVVFc1RVRkJRU3hEUVVGQkxFVkJRVUVzUjBGQlFTeE5RVUZCTEVOQlFVOHNUVUZCVUN4TFFVRkJMRWxCUVVFc1IwRkJRU3hMUVVGQkxFTkJRVUVzUjBGQlFTeEZRVUZCTEVOQlFXZENMRU5CUVUwc1EwRkJRU3hEUVVGQkxFbEJRVUVzVFVGQlFTeERRVUZQTEV0QlFVc3NRMEZCUVR0QlFVRkJMRkZCUXpORkxFMUJRVkVzUlVGQlFTeExRVUZCTEVOQlFVRTdRVUZCUVN4UFFVTldMRU5CUVVFN1FVRkJRU3hMUVVOR08wRkJSMEVzU1VGQlNTeEpRVUZCTEc5Q1FVRkJMRU5CUVhGQ0xFdEJRVXNzUzBGQlRTeERRVUZCTEVsQlFVc3NRMEZCUXl4dlFrRkJjVUlzUTBGQlFTeE5RVUZCTEVOQlFVOHNVVUZCVVN4RFFVRkhMRVZCUVVFN1FVRkRMMFVzVFVGQlRTeE5RVUZCTEZkQlFVRXNSMEZCWXl4RFFVRkRMRU5CUVVFc1EwRkJRU3hGUVVGQkxFZEJRVUVzVFVGQlFTeERRVUZQTEZkQlFWQXNTMEZCUVN4SlFVRkJMRWRCUVVFc1MwRkJRU3hEUVVGQkxFZEJRVUVzUlVGQlFTeERRVUZ4UWl4RFFVRk5MRU5CUVVFc1RVRkJRU3hEUVVGQkxFVkJRVUVzUjBGQlFTeE5RVUZCTEVOQlFVOHNUVUZCVUN4TFFVRkJMRWxCUVVFc1IwRkJRU3hMUVVGQkxFTkJRVUVzUjBGQlFTeEZRVUZCTEVOQlFXZENMRU5CUVUwc1EwRkJRU3hEUVVGQkxFbEJRVUVzVFVGQlFTeERRVUZQTEV0QlFVc3NRMEZCUVN4RFFVRkJPMEZCUTJ4R0xFMUJRVTBzVFVGQlFTeE5RVUZCTEVkQlFWTXNRMEZCUXl4TlFVRkJMRU5CUVU4c1MwRkJTeXhEUVVGQkxFTkJRVUU3UVVGSE5VSXNUVUZCUVN4SlFVRkpMRTlCUVU4c1EwRkJTU3hEUVVGQkxFVkJRVUU3UVVGRFlpeFJRVUZ4UWl4dlFrRkJRU3hEUVVGQk8wRkJRVUVzVlVGRGJrSTdRVUZCUVN4WlFVTkZMRTlCUVU4c1RVRkJUeXhEUVVGQkxFTkJRVUVzUTBGQlFUdEJRVUZCTEZsQlEyUXNTMEZCVHl4RlFVRkJMRU5CUVVFc1JVRkJRU3hIUVVGQkxGZEJRVUVzU1VGQlFTeEpRVUZCTEVkQlFVRXNTMEZCUVN4RFFVRkJMRWRCUVVFc1YwRkJRU3hEUVVGakxFTkJRV1FzUTBGQlFTeExRVUZCTEVsQlFVRXNSMEZCUVN4RlFVRkJMRWRCUVc5Q0xFMUJRVThzUTBGQlFTeERRVUZCTEVOQlFVRTdRVUZCUVN4WFFVTndRenRCUVVGQkxGTkJRMFFzUTBGQlFTeERRVUZCTzBGQlFVRXNUMEZEU0R0QlFVZEJMRTFCUVU4c1QwRkJRVHRCUVVGQkxGRkJRMHdzVlVGQlZTeEpRVUZMTEVOQlFVRXNTMEZCUVR0QlFVRkJMRkZCUTJZc1YwRkJRVHRCUVVGQkxGRkJRMEVzVFVGQlFUdEJRVUZCTEU5QlEwWXNRMEZCUVR0QlFVRkJMRXRCUTBZN1FVRkJRU3hIUVVOR08wRkJSMEVzUlVGQlR5eFBRVUZCTzBGQlFVRXNTVUZEVEN4RFFVRkRMR3RDUVVGclFpeEpRVUZMTEVOQlFVRXNTMEZCUVR0QlFVRkJMRWRCUXpGQ0xFTkJRVUU3UVVGRFJpeEZRVUZCTzBGQlJVRXNUVUZCVFN4cFFrRkJiMElzUjBGQlFTeDNRa0ZCUVN4RFFVRkJPMEZCUlc1Q0xFMUJRVTBzYlVKQlFYTkNMRWRCUVVFc1EwRkRha01zVFVGRFFTeEZRVUZCTEdWQlFVRXNSVUZEUVN4clFrRkRRU3hYUVVOSExFdEJRVUU3UVVGd1RFd3NSVUZCUVN4SlFVRkJMRVZCUVVFc1EwRkJRVHRCUVhGTVJTeEZRVUZCTEVsQlFVa3NiMEpCUVc5Q0xFdEJRVThzUlVGQlFUdEJRVU0zUWl4SlFVRlBMRTlCUVVFc2FVSkJRVUVzUTBGQlFUdEJRVUZCTEVkQlExUTdRVUZEUVN4RlFVRkJMRWxCUVVrc2IwSkJRVzlDTEU5QlFWTXNSVUZCUVR0QlFVTXZRaXhKUVVGQkxFbEJRVWtzWjBKQlFXdENMRVZCUVVFN1FVRkRjRUlzVFVGQlR5eFBRVUZCTEdGQlFVRXNRMEZCUVR0QlFVRkJMRXRCUTFRN1FVRkRRU3hKUVVGUExFOUJRVUVzUTBGQlFTeERRVUZCTEVWQlFVRXNSMEZCUVN4TlFVRkJMRU5CUVU4c1YwRkJVQ3hMUVVGQkxFbEJRVUVzUjBGQlFTeExRVUZCTEVOQlFVRXNSMEZCUVN4RlFVRkJMRU5CUVhGQ0xFTkJRVTBzUTBGQlFTeExRVUZCTEVWQlFVRXNRMEZCUVR0QlFVRkJMRWRCUTNCRE8wRkJSVUVzUlVGQlFTeFBRVUZQTEU5QlFVOHNaVUZCYjBJc1EwRkJRU3hKUVVGQkxFTkJRVU1zVjBGQll5eEhRVUZCTEVOQlFVRXNSVUZCUnl4UFFVRlBMR1ZCUVhGQ0xFTkJRVUVzUTBGQlFTeERRVUZCTEVkQlFVRXNhVUpCUVVFc1EwRkJRVHRCUVVOc1JpeEZRVUZCTzBGQlJVOHNUVUZCVFN4elEwRkJjME1zUTBGQlF6dEJRVUZCTEVWQlEyeEVMRzFDUVVGQk8wRkJRVUVzUlVGRFFTeEpRVUZCTzBGQlFVRXNSVUZEUVN4bFFVRkJPMEZCUVVFc1JVRkRRU3hoUVVGQk8wRkJRVUVzUlVGRFFTeE5RVUZCTzBGQlEwWXNRMEZOVFN4TFFVRkJPMEZCUTBvc1JVRkJTU3hKUVVGQkxHMUNRVUZCTEVsQlFYVkNMRU5CUVVNc2IwSkJRWEZDTEVOQlFVRXNTVUZCUVN4RFFVRkxMRk5CUVZNc1JVRkJSU3hEUVVGQkxFbEJRVXNzWjBKQlFXbENMRU5CUVVFc1pVRkJRU3hEUVVGQkxFdEJRWEZDTEU5QlFWTXNSVUZCUVR0QlFVTnVTQ3hKUVVGakxHRkJRVUVzUTBGQlFTeERRVUZCTEUxQlFVRXNTVUZCUVN4SlFVRkJMRWRCUVVFc1MwRkJRU3hEUVVGQkxFZEJRVUVzVFVGQlFTeERRVUZSTEZWQlFWTXNSVUZCUlN4RFFVRkJMRU5CUVVFN1FVRkJRU3hIUVVNMVFpeE5RVUZCTzBGQlEwd3NTVUZCUVN4aFFVRkJMRU5CUVdNc1JVRkJSU3hEUVVGQkxFTkJRVUU3UVVGQlFTeEhRVU5zUWp0QlFVTkdPenM3T3lKOVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUtBLE1BQU0sc0NBQXlDLEdBQUEsQ0FBQSxDQUFBO0FBQy9DLE1BQU0sa0RBQXFELEdBQUEsQ0FBQSxDQUFBO0FBQzNELE1BQU0sb0JBQXVCLEdBQUEsQ0FBQSxDQUFBO0FBQ3RCLE1BQU0scUJBQXdCLEdBQUEsRUFBQTtBQUM5QixNQUFNLHdCQUEyQixHQUFBLEdBQUE7QUFDakMsTUFBTSx5Q0FBNEMsR0FBQSxHQUFBO0FBQ2xELE1BQU0sMEJBQTZCLEdBQUEsSUFBQTtBQUVuQyxTQUFTLG1CQUFtQixPQUF5QyxFQUFBO0FBQzFFLEVBQUEsTUFBTSxRQUFXLEdBQUEsT0FBQSxDQUFRLEdBQUksQ0FBQSxDQUFDLENBQUcsS0FBQTtBQWRuQyxJQUFBLElBQUEsRUFBQSxDQUFBO0FBY3dDLElBQUEsT0FBQSxDQUFBLEVBQUEsR0FBQSxDQUFBLENBQUEsS0FBRixLQUFBLElB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