@grafana/scenes 6.7.0--canary.1091.14350229100.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 +25 -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,296 @@
1
+ import { map, isArray, replace } from 'lodash';
2
+ import { Registry, escapeRegex, textUtil, dateTime, urlUtil } from '@grafana/data';
3
+ import { VariableFormatID } from '@grafana/schema';
4
+
5
+ const formatRegistry = new Registry(() => {
6
+ const formats = [
7
+ {
8
+ id: VariableFormatID.Lucene,
9
+ name: "Lucene",
10
+ description: "Values are lucene escaped and multi-valued variables generate an OR expression",
11
+ formatter: (value) => {
12
+ if (typeof value === "string") {
13
+ return luceneEscape(value);
14
+ }
15
+ if (Array.isArray(value)) {
16
+ if (value.length === 0) {
17
+ return "__empty__";
18
+ }
19
+ const quotedValues = map(value, (val) => {
20
+ return '"' + luceneEscape(val) + '"';
21
+ });
22
+ return "(" + quotedValues.join(" OR ") + ")";
23
+ } else {
24
+ return luceneEscape(`${value}`);
25
+ }
26
+ }
27
+ },
28
+ {
29
+ id: VariableFormatID.Raw,
30
+ name: "raw",
31
+ description: "Keep value as is",
32
+ formatter: (value) => String(value)
33
+ },
34
+ {
35
+ id: VariableFormatID.Regex,
36
+ name: "Regex",
37
+ description: "Values are regex escaped and multi-valued variables generate a (<value>|<value>) expression",
38
+ formatter: (value) => {
39
+ if (typeof value === "string") {
40
+ return escapeRegex(value);
41
+ }
42
+ if (Array.isArray(value)) {
43
+ const escapedValues = value.map((item) => {
44
+ if (typeof item === "string") {
45
+ return escapeRegex(item);
46
+ } else {
47
+ return escapeRegex(String(item));
48
+ }
49
+ });
50
+ if (escapedValues.length === 1) {
51
+ return escapedValues[0];
52
+ }
53
+ return "(" + escapedValues.join("|") + ")";
54
+ }
55
+ return escapeRegex(`${value}`);
56
+ }
57
+ },
58
+ {
59
+ id: VariableFormatID.Pipe,
60
+ name: "Pipe",
61
+ description: "Values are separated by | character",
62
+ formatter: (value) => {
63
+ if (typeof value === "string") {
64
+ return value;
65
+ }
66
+ if (Array.isArray(value)) {
67
+ return value.join("|");
68
+ }
69
+ return `${value}`;
70
+ }
71
+ },
72
+ {
73
+ id: VariableFormatID.Distributed,
74
+ name: "Distributed",
75
+ description: "Multiple values are formatted like variable=value",
76
+ formatter: (value, args, variable) => {
77
+ if (typeof value === "string") {
78
+ return value;
79
+ }
80
+ if (Array.isArray(value)) {
81
+ value = map(value, (val, index) => {
82
+ if (index !== 0) {
83
+ return variable.state.name + "=" + val;
84
+ } else {
85
+ return val;
86
+ }
87
+ });
88
+ return value.join(",");
89
+ }
90
+ return `${value}`;
91
+ }
92
+ },
93
+ {
94
+ id: VariableFormatID.CSV,
95
+ name: "Csv",
96
+ description: "Comma-separated values",
97
+ formatter: (value) => {
98
+ if (typeof value === "string") {
99
+ return value;
100
+ }
101
+ if (isArray(value)) {
102
+ return value.join(",");
103
+ }
104
+ return String(value);
105
+ }
106
+ },
107
+ {
108
+ id: VariableFormatID.HTML,
109
+ name: "HTML",
110
+ description: "HTML escaping of values",
111
+ formatter: (value) => {
112
+ if (typeof value === "string") {
113
+ return textUtil.escapeHtml(value);
114
+ }
115
+ if (isArray(value)) {
116
+ return textUtil.escapeHtml(value.join(", "));
117
+ }
118
+ return textUtil.escapeHtml(String(value));
119
+ }
120
+ },
121
+ {
122
+ id: VariableFormatID.JSON,
123
+ name: "JSON",
124
+ description: "JSON stringify value",
125
+ formatter: (value) => {
126
+ if (typeof value === "string") {
127
+ return value;
128
+ }
129
+ return JSON.stringify(value);
130
+ }
131
+ },
132
+ {
133
+ id: VariableFormatID.PercentEncode,
134
+ name: "Percent encode",
135
+ description: "Useful for URL escaping values",
136
+ formatter: (value) => {
137
+ if (isArray(value)) {
138
+ return encodeURIComponentStrict("{" + value.join(",") + "}");
139
+ }
140
+ return encodeURIComponentStrict(value);
141
+ }
142
+ },
143
+ {
144
+ id: VariableFormatID.SingleQuote,
145
+ name: "Single quote",
146
+ description: "Single quoted values",
147
+ formatter: (value) => {
148
+ const regExp = new RegExp(`'`, "g");
149
+ if (isArray(value)) {
150
+ return map(value, (v) => `'${replace(v, regExp, `\\'`)}'`).join(",");
151
+ }
152
+ let strVal = typeof value === "string" ? value : String(value);
153
+ return `'${replace(strVal, regExp, `\\'`)}'`;
154
+ }
155
+ },
156
+ {
157
+ id: VariableFormatID.DoubleQuote,
158
+ name: "Double quote",
159
+ description: "Double quoted values",
160
+ formatter: (value) => {
161
+ const regExp = new RegExp('"', "g");
162
+ if (isArray(value)) {
163
+ return map(value, (v) => `"${replace(v, regExp, '\\"')}"`).join(",");
164
+ }
165
+ let strVal = typeof value === "string" ? value : String(value);
166
+ return `"${replace(strVal, regExp, '\\"')}"`;
167
+ }
168
+ },
169
+ {
170
+ id: VariableFormatID.SQLString,
171
+ name: "SQL string",
172
+ description: "SQL string quoting and commas for use in IN statements and other scenarios",
173
+ formatter: sqlStringFormatter
174
+ },
175
+ {
176
+ id: VariableFormatID.Date,
177
+ name: "Date",
178
+ description: "Format date in different ways",
179
+ formatter: (value, args) => {
180
+ var _a;
181
+ let nrValue = NaN;
182
+ if (typeof value === "number") {
183
+ nrValue = value;
184
+ } else if (typeof value === "string") {
185
+ nrValue = parseInt(value, 10);
186
+ }
187
+ if (isNaN(nrValue)) {
188
+ return "NaN";
189
+ }
190
+ const arg = (_a = args[0]) != null ? _a : "iso";
191
+ switch (arg) {
192
+ case "ms":
193
+ return String(value);
194
+ case "seconds":
195
+ return `${Math.round(nrValue / 1e3)}`;
196
+ case "iso":
197
+ return dateTime(nrValue).toISOString();
198
+ default:
199
+ if ((args || []).length > 1) {
200
+ return dateTime(nrValue).format(args.join(":"));
201
+ }
202
+ return dateTime(nrValue).format(arg);
203
+ }
204
+ }
205
+ },
206
+ {
207
+ id: VariableFormatID.Glob,
208
+ name: "Glob",
209
+ description: "Format multi-valued variables using glob syntax, example {value1,value2}",
210
+ formatter: (value) => {
211
+ if (isArray(value) && value.length > 1) {
212
+ return "{" + value.join(",") + "}";
213
+ }
214
+ return String(value);
215
+ }
216
+ },
217
+ {
218
+ id: VariableFormatID.Text,
219
+ name: "Text",
220
+ description: "Format variables in their text representation. Example in multi-variable scenario A + B + C.",
221
+ formatter: (value, _args, variable) => {
222
+ if (variable.getValueText) {
223
+ return variable.getValueText();
224
+ }
225
+ return String(value);
226
+ }
227
+ },
228
+ {
229
+ id: VariableFormatID.QueryParam,
230
+ name: "Query parameter",
231
+ description: "Format variables as URL parameters. Example in multi-variable scenario A + B + C => var-foo=A&var-foo=B&var-foo=C.",
232
+ formatter: (value, _args, variable) => {
233
+ if (variable.urlSync) {
234
+ const urlParam = variable.urlSync.getUrlState();
235
+ return urlUtil.toUrlParams(urlParam);
236
+ }
237
+ if (Array.isArray(value)) {
238
+ return value.map((v) => formatQueryParameter(variable.state.name, v)).join("&");
239
+ }
240
+ return formatQueryParameter(variable.state.name, value);
241
+ }
242
+ },
243
+ {
244
+ id: VariableFormatID.UriEncode,
245
+ name: "Percent encode as URI",
246
+ description: "Useful for URL escaping values, taking into URI syntax characters",
247
+ formatter: (value) => {
248
+ if (isArray(value)) {
249
+ return encodeURIStrict("{" + value.join(",") + "}");
250
+ }
251
+ return encodeURIStrict(value);
252
+ }
253
+ }
254
+ ];
255
+ return formats;
256
+ });
257
+ function luceneEscape(value) {
258
+ if (isNaN(+value) === false) {
259
+ return value;
260
+ }
261
+ return value.replace(/([\!\*\+\-\=<>\s\&\|\(\)\[\]\{\}\^\~\?\:\\/"])/g, "\\$1");
262
+ }
263
+ function encodeURIComponentStrict(str) {
264
+ if (typeof str === "object") {
265
+ str = String(str);
266
+ }
267
+ return replaceSpecialCharactersToASCII(encodeURIComponent(str));
268
+ }
269
+ const encodeURIStrict = (str) => replaceSpecialCharactersToASCII(encodeURI(String(str)));
270
+ const replaceSpecialCharactersToASCII = (value) => value.replace(/[!'()*]/g, (c) => {
271
+ return "%" + c.charCodeAt(0).toString(16).toUpperCase();
272
+ });
273
+ function formatQueryParameter(name, value) {
274
+ return `var-${name}=${encodeURIComponentStrict(value)}`;
275
+ }
276
+ const SQL_ESCAPE_MAP = {
277
+ "'": "''",
278
+ '"': '\\"'
279
+ };
280
+ function sqlStringFormatter(value) {
281
+ const regExp = new RegExp(`'|"`, "g");
282
+ if (isArray(value)) {
283
+ return map(value, (v) => `'${replace(v, regExp, (match) => {
284
+ var _a;
285
+ return (_a = SQL_ESCAPE_MAP[match]) != null ? _a : "";
286
+ })}'`).join(",");
287
+ }
288
+ let strVal = typeof value === "string" ? value : String(value);
289
+ return `'${replace(strVal, regExp, (match) => {
290
+ var _a;
291
+ return (_a = SQL_ESCAPE_MAP[match]) != null ? _a : "";
292
+ })}'`;
293
+ }
294
+
295
+ export { formatRegistry };
296
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0UmVnaXN0cnkuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3ZhcmlhYmxlcy9pbnRlcnBvbGF0aW9uL2Zvcm1hdFJlZ2lzdHJ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1hcCwgaXNBcnJheSwgcmVwbGFjZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBSZWdpc3RyeSwgZXNjYXBlUmVnZXgsIHRleHRVdGlsLCBkYXRlVGltZSwgdXJsVXRpbCB9IGZyb20gJ0BncmFmYW5hL2RhdGEnO1xuaW1wb3J0IHsgVmFyaWFibGVGb3JtYXRJRCB9IGZyb20gJ0BncmFmYW5hL3NjaGVtYSc7XG5cbmNvbnN0IGZvcm1hdFJlZ2lzdHJ5ID0gbmV3IFJlZ2lzdHJ5KCgpID0+IHtcbiAgY29uc3QgZm9ybWF0cyA9IFtcbiAgICB7XG4gICAgICBpZDogVmFyaWFibGVGb3JtYXRJRC5MdWNlbmUsXG4gICAgICBuYW1lOiBcIkx1Y2VuZVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiVmFsdWVzIGFyZSBsdWNlbmUgZXNjYXBlZCBhbmQgbXVsdGktdmFsdWVkIHZhcmlhYmxlcyBnZW5lcmF0ZSBhbiBPUiBleHByZXNzaW9uXCIsXG4gICAgICBmb3JtYXR0ZXI6ICh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgcmV0dXJuIGx1Y2VuZUVzY2FwZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiX19lbXB0eV9fXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHF1b3RlZFZhbHVlcyA9IG1hcCh2YWx1ZSwgKHZhbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICdcIicgKyBsdWNlbmVFc2NhcGUodmFsKSArICdcIic7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIFwiKFwiICsgcXVvdGVkVmFsdWVzLmpvaW4oXCIgT1IgXCIpICsgXCIpXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGx1Y2VuZUVzY2FwZShgJHt2YWx1ZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IFZhcmlhYmxlRm9ybWF0SUQuUmF3LFxuICAgICAgbmFtZTogXCJyYXdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIktlZXAgdmFsdWUgYXMgaXNcIixcbiAgICAgIGZvcm1hdHRlcjogKHZhbHVlKSA9PiBTdHJpbmcodmFsdWUpXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogVmFyaWFibGVGb3JtYXRJRC5SZWdleCxcbiAgICAgIG5hbWU6IFwiUmVnZXhcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlZhbHVlcyBhcmUgcmVnZXggZXNjYXBlZCBhbmQgbXVsdGktdmFsdWVkIHZhcmlhYmxlcyBnZW5lcmF0ZSBhICg8dmFsdWU+fDx2YWx1ZT4pIGV4cHJlc3Npb25cIixcbiAgICAgIGZvcm1hdHRlcjogKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gZXNjYXBlUmVnZXgodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IGVzY2FwZWRWYWx1ZXMgPSB2YWx1ZS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICByZXR1cm4gZXNjYXBlUmVnZXgoaXRlbSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gZXNjYXBlUmVnZXgoU3RyaW5nKGl0ZW0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoZXNjYXBlZFZhbHVlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBlc2NhcGVkVmFsdWVzWzBdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gXCIoXCIgKyBlc2NhcGVkVmFsdWVzLmpvaW4oXCJ8XCIpICsgXCIpXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVzY2FwZVJlZ2V4KGAke3ZhbHVlfWApO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IFZhcmlhYmxlRm9ybWF0SUQuUGlwZSxcbiAgICAgIG5hbWU6IFwiUGlwZVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiVmFsdWVzIGFyZSBzZXBhcmF0ZWQgYnkgfCBjaGFyYWN0ZXJcIixcbiAgICAgIGZvcm1hdHRlcjogKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLmpvaW4oXCJ8XCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHt2YWx1ZX1gO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IFZhcmlhYmxlRm9ybWF0SUQuRGlzdHJpYnV0ZWQsXG4gICAgICBuYW1lOiBcIkRpc3RyaWJ1dGVkXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJNdWx0aXBsZSB2YWx1ZXMgYXJlIGZvcm1hdHRlZCBsaWtlIHZhcmlhYmxlPXZhbHVlXCIsXG4gICAgICBmb3JtYXR0ZXI6ICh2YWx1ZSwgYXJncywgdmFyaWFibGUpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZSA9IG1hcCh2YWx1ZSwgKHZhbCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gMCkge1xuICAgICAgICAgICAgICByZXR1cm4gdmFyaWFibGUuc3RhdGUubmFtZSArIFwiPVwiICsgdmFsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gdmFsdWUuam9pbihcIixcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke3ZhbHVlfWA7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogVmFyaWFibGVGb3JtYXRJRC5DU1YsXG4gICAgICBuYW1lOiBcIkNzdlwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiQ29tbWEtc2VwYXJhdGVkIHZhbHVlc1wiLFxuICAgICAgZm9ybWF0dGVyOiAodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWUuam9pbihcIixcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogVmFyaWFibGVGb3JtYXRJRC5IVE1MLFxuICAgICAgbmFtZTogXCJIVE1MXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJIVE1MIGVzY2FwaW5nIG9mIHZhbHVlc1wiLFxuICAgICAgZm9ybWF0dGVyOiAodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHJldHVybiB0ZXh0VXRpbC5lc2NhcGVIdG1sKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdGV4dFV0aWwuZXNjYXBlSHRtbCh2YWx1ZS5qb2luKFwiLCBcIikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZXh0VXRpbC5lc2NhcGVIdG1sKFN0cmluZyh2YWx1ZSkpO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IFZhcmlhYmxlRm9ybWF0SUQuSlNPTixcbiAgICAgIG5hbWU6IFwiSlNPTlwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiSlNPTiBzdHJpbmdpZnkgdmFsdWVcIixcbiAgICAgIGZvcm1hdHRlcjogKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiBWYXJpYWJsZUZvcm1hdElELlBlcmNlbnRFbmNvZGUsXG4gICAgICBuYW1lOiBcIlBlcmNlbnQgZW5jb2RlXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJVc2VmdWwgZm9yIFVSTCBlc2NhcGluZyB2YWx1ZXNcIixcbiAgICAgIGZvcm1hdHRlcjogKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnRTdHJpY3QoXCJ7XCIgKyB2YWx1ZS5qb2luKFwiLFwiKSArIFwifVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50U3RyaWN0KHZhbHVlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiBWYXJpYWJsZUZvcm1hdElELlNpbmdsZVF1b3RlLFxuICAgICAgbmFtZTogXCJTaW5nbGUgcXVvdGVcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlNpbmdsZSBxdW90ZWQgdmFsdWVzXCIsXG4gICAgICBmb3JtYXR0ZXI6ICh2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKGAnYCwgXCJnXCIpO1xuICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gbWFwKHZhbHVlLCAodikgPT4gYCcke3JlcGxhY2UodiwgcmVnRXhwLCBgXFxcXCdgKX0nYCkuam9pbihcIixcIik7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0clZhbCA9IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGAnJHtyZXBsYWNlKHN0clZhbCwgcmVnRXhwLCBgXFxcXCdgKX0nYDtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiBWYXJpYWJsZUZvcm1hdElELkRvdWJsZVF1b3RlLFxuICAgICAgbmFtZTogXCJEb3VibGUgcXVvdGVcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkRvdWJsZSBxdW90ZWQgdmFsdWVzXCIsXG4gICAgICBmb3JtYXR0ZXI6ICh2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKCdcIicsIFwiZ1wiKTtcbiAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIG1hcCh2YWx1ZSwgKHYpID0+IGBcIiR7cmVwbGFjZSh2LCByZWdFeHAsICdcXFxcXCInKX1cImApLmpvaW4oXCIsXCIpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdHJWYWwgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZSA6IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIHJldHVybiBgXCIke3JlcGxhY2Uoc3RyVmFsLCByZWdFeHAsICdcXFxcXCInKX1cImA7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogVmFyaWFibGVGb3JtYXRJRC5TUUxTdHJpbmcsXG4gICAgICBuYW1lOiBcIlNRTCBzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlNRTCBzdHJpbmcgcXVvdGluZyBhbmQgY29tbWFzIGZvciB1c2UgaW4gSU4gc3RhdGVtZW50cyBhbmQgb3RoZXIgc2NlbmFyaW9zXCIsXG4gICAgICBmb3JtYXR0ZXI6IHNxbFN0cmluZ0Zvcm1hdHRlclxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IFZhcmlhYmxlRm9ybWF0SUQuRGF0ZSxcbiAgICAgIG5hbWU6IFwiRGF0ZVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiRm9ybWF0IGRhdGUgaW4gZGlmZmVyZW50IHdheXNcIixcbiAgICAgIGZvcm1hdHRlcjogKHZhbHVlLCBhcmdzKSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgbGV0IG5yVmFsdWUgPSBOYU47XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBuclZhbHVlID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgbnJWYWx1ZSA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTmFOKG5yVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIFwiTmFOXCI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXJnID0gKF9hID0gYXJnc1swXSkgIT0gbnVsbCA/IF9hIDogXCJpc29cIjtcbiAgICAgICAgc3dpdGNoIChhcmcpIHtcbiAgICAgICAgICBjYXNlIFwibXNcIjpcbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgICAgICAgIGNhc2UgXCJzZWNvbmRzXCI6XG4gICAgICAgICAgICByZXR1cm4gYCR7TWF0aC5yb3VuZChuclZhbHVlIC8gMWUzKX1gO1xuICAgICAgICAgIGNhc2UgXCJpc29cIjpcbiAgICAgICAgICAgIHJldHVybiBkYXRlVGltZShuclZhbHVlKS50b0lTT1N0cmluZygpO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAoKGFyZ3MgfHwgW10pLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGRhdGVUaW1lKG5yVmFsdWUpLmZvcm1hdChhcmdzLmpvaW4oXCI6XCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkYXRlVGltZShuclZhbHVlKS5mb3JtYXQoYXJnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IFZhcmlhYmxlRm9ybWF0SUQuR2xvYixcbiAgICAgIG5hbWU6IFwiR2xvYlwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiRm9ybWF0IG11bHRpLXZhbHVlZCB2YXJpYWJsZXMgdXNpbmcgZ2xvYiBzeW50YXgsIGV4YW1wbGUge3ZhbHVlMSx2YWx1ZTJ9XCIsXG4gICAgICBmb3JtYXR0ZXI6ICh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHJldHVybiBcIntcIiArIHZhbHVlLmpvaW4oXCIsXCIpICsgXCJ9XCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogVmFyaWFibGVGb3JtYXRJRC5UZXh0LFxuICAgICAgbmFtZTogXCJUZXh0XCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJGb3JtYXQgdmFyaWFibGVzIGluIHRoZWlyIHRleHQgcmVwcmVzZW50YXRpb24uIEV4YW1wbGUgaW4gbXVsdGktdmFyaWFibGUgc2NlbmFyaW8gQSArIEIgKyBDLlwiLFxuICAgICAgZm9ybWF0dGVyOiAodmFsdWUsIF9hcmdzLCB2YXJpYWJsZSkgPT4ge1xuICAgICAgICBpZiAodmFyaWFibGUuZ2V0VmFsdWVUZXh0KSB7XG4gICAgICAgICAgcmV0dXJuIHZhcmlhYmxlLmdldFZhbHVlVGV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IFZhcmlhYmxlRm9ybWF0SUQuUXVlcnlQYXJhbSxcbiAgICAgIG5hbWU6IFwiUXVlcnkgcGFyYW1ldGVyXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJGb3JtYXQgdmFyaWFibGVzIGFzIFVSTCBwYXJhbWV0ZXJzLiBFeGFtcGxlIGluIG11bHRpLXZhcmlhYmxlIHNjZW5hcmlvIEEgKyBCICsgQyA9PiB2YXItZm9vPUEmdmFyLWZvbz1CJnZhci1mb289Qy5cIixcbiAgICAgIGZvcm1hdHRlcjogKHZhbHVlLCBfYXJncywgdmFyaWFibGUpID0+IHtcbiAgICAgICAgaWYgKHZhcmlhYmxlLnVybFN5bmMpIHtcbiAgICAgICAgICBjb25zdCB1cmxQYXJhbSA9IHZhcmlhYmxlLnVybFN5bmMuZ2V0VXJsU3RhdGUoKTtcbiAgICAgICAgICByZXR1cm4gdXJsVXRpbC50b1VybFBhcmFtcyh1cmxQYXJhbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLm1hcCgodikgPT4gZm9ybWF0UXVlcnlQYXJhbWV0ZXIodmFyaWFibGUuc3RhdGUubmFtZSwgdikpLmpvaW4oXCImXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JtYXRRdWVyeVBhcmFtZXRlcih2YXJpYWJsZS5zdGF0ZS5uYW1lLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogVmFyaWFibGVGb3JtYXRJRC5VcmlFbmNvZGUsXG4gICAgICBuYW1lOiBcIlBlcmNlbnQgZW5jb2RlIGFzIFVSSVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiVXNlZnVsIGZvciBVUkwgZXNjYXBpbmcgdmFsdWVzLCB0YWtpbmcgaW50byBVUkkgc3ludGF4IGNoYXJhY3RlcnNcIixcbiAgICAgIGZvcm1hdHRlcjogKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBlbmNvZGVVUklTdHJpY3QoXCJ7XCIgKyB2YWx1ZS5qb2luKFwiLFwiKSArIFwifVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW5jb2RlVVJJU3RyaWN0KHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIF07XG4gIHJldHVybiBmb3JtYXRzO1xufSk7XG5mdW5jdGlvbiBsdWNlbmVFc2NhcGUodmFsdWUpIHtcbiAgaWYgKGlzTmFOKCt2YWx1ZSkgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiB2YWx1ZS5yZXBsYWNlKC8oW1xcIVxcKlxcK1xcLVxcPTw+XFxzXFwmXFx8XFwoXFwpXFxbXFxdXFx7XFx9XFxeXFx+XFw/XFw6XFxcXC9cIl0pL2csIFwiXFxcXCQxXCIpO1xufVxuZnVuY3Rpb24gZW5jb2RlVVJJQ29tcG9uZW50U3RyaWN0KHN0cikge1xuICBpZiAodHlwZW9mIHN0ciA9PT0gXCJvYmplY3RcIikge1xuICAgIHN0ciA9IFN0cmluZyhzdHIpO1xuICB9XG4gIHJldHVybiByZXBsYWNlU3BlY2lhbENoYXJhY3RlcnNUb0FTQ0lJKGVuY29kZVVSSUNvbXBvbmVudChzdHIpKTtcbn1cbmNvbnN0IGVuY29kZVVSSVN0cmljdCA9IChzdHIpID0+IHJlcGxhY2VTcGVjaWFsQ2hhcmFjdGVyc1RvQVNDSUkoZW5jb2RlVVJJKFN0cmluZyhzdHIpKSk7XG5jb25zdCByZXBsYWNlU3BlY2lhbENoYXJhY3RlcnNUb0FTQ0lJID0gKHZhbHVlKSA9PiB2YWx1ZS5yZXBsYWNlKC9bIScoKSpdL2csIChjKSA9PiB7XG4gIHJldHVybiBcIiVcIiArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcbn0pO1xuZnVuY3Rpb24gZm9ybWF0UXVlcnlQYXJhbWV0ZXIobmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGB2YXItJHtuYW1lfT0ke2VuY29kZVVSSUNvbXBvbmVudFN0cmljdCh2YWx1ZSl9YDtcbn1cbmNvbnN0IFNRTF9FU0NBUEVfTUFQID0ge1xuICBcIidcIjogXCInJ1wiLFxuICAnXCInOiAnXFxcXFwiJ1xufTtcbmZ1bmN0aW9uIHNxbFN0cmluZ0Zvcm1hdHRlcih2YWx1ZSkge1xuICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKGAnfFwiYCwgXCJnXCIpO1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gbWFwKHZhbHVlLCAodikgPT4gYCcke3JlcGxhY2UodiwgcmVnRXhwLCAobWF0Y2gpID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIHJldHVybiAoX2EgPSBTUUxfRVNDQVBFX01BUFttYXRjaF0pICE9IG51bGwgPyBfYSA6IFwiXCI7XG4gICAgfSl9J2ApLmpvaW4oXCIsXCIpO1xuICB9XG4gIGxldCBzdHJWYWwgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZSA6IFN0cmluZyh2YWx1ZSk7XG4gIHJldHVybiBgJyR7cmVwbGFjZShzdHJWYWwsIHJlZ0V4cCwgKG1hdGNoKSA9PiB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoX2EgPSBTUUxfRVNDQVBFX01BUFttYXRjaF0pICE9IG51bGwgPyBfYSA6IFwiXCI7XG4gIH0pfSdgO1xufVxuXG5leHBvcnQgeyBmb3JtYXRSZWdpc3RyeSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2labTl5YldGMFVtVm5hWE4wY25rdWFuTWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1THk0dUwzTnlZeTkyWVhKcFlXSnNaWE12YVc1MFpYSndiMnhoZEdsdmJpOW1iM0p0WVhSU1pXZHBjM1J5ZVM1MGN5SmRMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdleUJwYzBGeWNtRjVMQ0J0WVhBc0lISmxjR3hoWTJVZ2ZTQm1jbTl0SUNkc2IyUmhjMmduTzF4dVhHNXBiWEJ2Y25RZ2V5QmtZWFJsVkdsdFpTd2dVbVZuYVhOMGNua3NJRkpsWjJsemRISjVTWFJsYlN3Z2RHVjRkRlYwYVd3c0lHVnpZMkZ3WlZKbFoyVjRMQ0IxY214VmRHbHNJSDBnWm5KdmJTQW5RR2R5WVdaaGJtRXZaR0YwWVNjN1hHNXBiWEJ2Y25RZ2V5QldZWEpwWVdKc1pWUjVjR1VzSUZaaGNtbGhZbXhsUm05eWJXRjBTVVFnZlNCbWNtOXRJQ2RBWjNKaFptRnVZUzl6WTJobGJXRW5PMXh1WEc1cGJYQnZjblFnZXlCV1lYSnBZV0pzWlZaaGJIVmxMQ0JXWVhKcFlXSnNaVlpoYkhWbFUybHVaMnhsSUgwZ1puSnZiU0FuTGk0dmRIbHdaWE1uTzF4dWFXMXdiM0owSUhzZ1FVeE1YMVpCVWtsQlFreEZYMVpCVEZWRklIMGdabkp2YlNBbkxpNHZZMjl1YzNSaGJuUnpKenRjYm1sdGNHOXlkQ0I3SUZOalpXNWxUMkpxWldOMFZYSnNVM2x1WTBoaGJtUnNaWElnZlNCbWNtOXRJQ2N1TGk4dUxpOWpiM0psTDNSNWNHVnpKenRjYmx4dVpYaHdiM0owSUdsdWRHVnlabUZqWlNCR2IzSnRZWFJTWldkcGMzUnllVWwwWlcwZ1pYaDBaVzVrY3lCU1pXZHBjM1J5ZVVsMFpXMGdlMXh1SUNCbWIzSnRZWFIwWlhJb2RtRnNkV1U2SUZaaGNtbGhZbXhsVm1Gc2RXVXNJR0Z5WjNNNklITjBjbWx1WjF0ZExDQjJZWEpwWVdKc1pUb2dSbTl5YldGMFZtRnlhV0ZpYkdVcE9pQnpkSEpwYm1jN1hHNTlYRzVjYmk4cUtseHVJQ29nVTJ4cGJXMWxaQ0JrYjNkdUlIWmxjbk5wYjI0Z2IyWWdkR2hsSUZOalpXNWxWbUZ5YVdGaWJHVWdhVzUwWlhKbVlXTmxJSE52SUhSb1lYUWdhWFFnYjI1c2VTQmpiMjUwWVdsdWN5QjNhR0YwSUhSb1pTQm1iM0p0WVhSMFpYSnpJR0ZqZEhWaGJHeDVJSFZ6WlM1Y2JpQXFJRlJvYVhNZ2FYTWdkWE5sWm5Wc0lHRnpJSGRsSUdoaGRtVWdjMjl0WlNCcGJYQnNaVzFsYm5SaGRHbHZibk1nYjJZZ2RHaHBjeUJwYm5SbGNtWmhZMlVnZEdoaGRDQmtiMlZ6SUc1dmRDQnVaV1ZrSUhSdklHSmxJR1oxYkd3Z2MyTmxibVVnYjJKcVpXTjBjeTVjYmlBcUlFWnZjaUJsZUdGdGNHeGxJRk5qYjNCbFpGWmhjbk5XWVhKcFlXSnNaU0JoYm1RZ1RHVm5ZV041Vm1GeWFXRmliR1ZYY21Gd2NHVnlMbHh1SUNvdlhHNWxlSEJ2Y25RZ2FXNTBaWEptWVdObElFWnZjbTFoZEZaaGNtbGhZbXhsSUh0Y2JpQWdjM1JoZEdVNklIdGNiaUFnSUNCdVlXMWxPaUJ6ZEhKcGJtYzdYRzRnSUNBZ2RIbHdaVG9nVm1GeWFXRmliR1ZVZVhCbElId2djM1J5YVc1bk8xeHVJQ0FnSUdselRYVnNkR2svT2lCaWIyOXNaV0Z1TzF4dUlDQWdJR2x1WTJ4MVpHVkJiR3cvT2lCaWIyOXNaV0Z1TzF4dUlDQjlPMXh1WEc0Z0lHZGxkRlpoYkhWbEtHWnBaV3hrVUdGMGFEODZJSE4wY21sdVp5azZJRlpoY21saFlteGxWbUZzZFdVZ2ZDQjFibVJsWm1sdVpXUWdmQ0J1ZFd4c08xeHVJQ0JuWlhSV1lXeDFaVlJsZUhRL0tHWnBaV3hrVUdGMGFEODZJSE4wY21sdVp5azZJSE4wY21sdVp6dGNiaUFnZFhKc1UzbHVZejg2SUZOalpXNWxUMkpxWldOMFZYSnNVM2x1WTBoaGJtUnNaWEk3WEc1OVhHNWNibVY0Y0c5eWRDQmpiMjV6ZENCbWIzSnRZWFJTWldkcGMzUnllU0E5SUc1bGR5QlNaV2RwYzNSeWVUeEdiM0p0WVhSU1pXZHBjM1J5ZVVsMFpXMCtLQ2dwSUQwK0lIdGNiaUFnWTI5dWMzUWdabTl5YldGMGN6b2dSbTl5YldGMFVtVm5hWE4wY25sSmRHVnRXMTBnUFNCYlhHNGdJQ0FnZTF4dUlDQWdJQ0FnYVdRNklGWmhjbWxoWW14bFJtOXliV0YwU1VRdVRIVmpaVzVsTEZ4dUlDQWdJQ0FnYm1GdFpUb2dKMHgxWTJWdVpTY3NYRzRnSUNBZ0lDQmtaWE5qY21sd2RHbHZiam9nSjFaaGJIVmxjeUJoY21VZ2JIVmpaVzVsSUdWelkyRndaV1FnWVc1a0lHMTFiSFJwTFhaaGJIVmxaQ0IyWVhKcFlXSnNaWE1nWjJWdVpYSmhkR1VnWVc0Z1QxSWdaWGh3Y21WemMybHZiaWNzWEc0Z0lDQWdJQ0JtYjNKdFlYUjBaWEk2SUNoMllXeDFaU2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JSFpoYkhWbElEMDlQU0FuYzNSeWFXNW5KeWtnZTF4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCc2RXTmxibVZGYzJOaGNHVW9kbUZzZFdVcE8xeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnYVdZZ0tFRnljbUY1TG1selFYSnlZWGtvZG1Gc2RXVXBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLSFpoYkhWbExteGxibWQwYUNBOVBUMGdNQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlDZGZYMlZ0Y0hSNVgxOG5PMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCeGRXOTBaV1JXWVd4MVpYTWdQU0J0WVhBb2RtRnNkV1VzSUNoMllXdzZJSE4wY21sdVp5a2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlDZGNJaWNnS3lCc2RXTmxibVZGYzJOaGNHVW9kbUZzS1NBcklDZGNJaWM3WEc0Z0lDQWdJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJQ2NvSnlBcklIRjFiM1JsWkZaaGJIVmxjeTVxYjJsdUtDY2dUMUlnSnlrZ0t5QW5LU2M3WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUd4MVkyVnVaVVZ6WTJGd1pTaGdKSHQyWVd4MVpYMWdLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlN4Y2JpQWdJQ0I5TEZ4dUlDQWdJSHRjYmlBZ0lDQWdJR2xrT2lCV1lYSnBZV0pzWlVadmNtMWhkRWxFTGxKaGR5eGNiaUFnSUNBZ0lHNWhiV1U2SUNkeVlYY25MRnh1SUNBZ0lDQWdaR1Z6WTNKcGNIUnBiMjQ2SUNkTFpXVndJSFpoYkhWbElHRnpJR2x6Snl4Y2JpQWdJQ0FnSUdadmNtMWhkSFJsY2pvZ0tIWmhiSFZsS1NBOVBpQlRkSEpwYm1jb2RtRnNkV1VwTEZ4dUlDQWdJSDBzWEc0Z0lDQWdlMXh1SUNBZ0lDQWdhV1E2SUZaaGNtbGhZbXhsUm05eWJXRjBTVVF1VW1WblpYZ3NYRzRnSUNBZ0lDQnVZVzFsT2lBblVtVm5aWGduTEZ4dUlDQWdJQ0FnWkdWelkzSnBjSFJwYjI0NklDZFdZV3gxWlhNZ1lYSmxJSEpsWjJWNElHVnpZMkZ3WldRZ1lXNWtJRzExYkhScExYWmhiSFZsWkNCMllYSnBZV0pzWlhNZ1oyVnVaWEpoZEdVZ1lTQW9QSFpoYkhWbFBudzhkbUZzZFdVK0tTQmxlSEJ5WlhOemFXOXVKeXhjYmlBZ0lDQWdJR1p2Y20xaGRIUmxjam9nS0haaGJIVmxLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2gwZVhCbGIyWWdkbUZzZFdVZ1BUMDlJQ2R6ZEhKcGJtY25LU0I3WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdWelkyRndaVkpsWjJWNEtIWmhiSFZsS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJR2xtSUNoQmNuSmhlUzVwYzBGeWNtRjVLSFpoYkhWbEtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR1Z6WTJGd1pXUldZV3gxWlhNZ1BTQjJZV3gxWlM1dFlYQW9LR2wwWlcwcElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2gwZVhCbGIyWWdhWFJsYlNBOVBUMGdKM04wY21sdVp5Y3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHVnpZMkZ3WlZKbFoyVjRLR2wwWlcwcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHVnpZMkZ3WlZKbFoyVjRLRk4wY21sdVp5aHBkR1Z0S1NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ2ZTazdYRzVjYmlBZ0lDQWdJQ0FnSUNCcFppQW9aWE5qWVhCbFpGWmhiSFZsY3k1c1pXNW5kR2dnUFQwOUlERXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCbGMyTmhjR1ZrVm1Gc2RXVnpXekJkTzF4dUlDQWdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUFuS0NjZ0t5QmxjMk5oY0dWa1ZtRnNkV1Z6TG1wdmFXNG9KM3duS1NBcklDY3BKenRjYmlBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCbGMyTmhjR1ZTWldkbGVDaGdKSHQyWVd4MVpYMWdLVHRjYmlBZ0lDQWdJSDBzWEc0Z0lDQWdmU3hjYmlBZ0lDQjdYRzRnSUNBZ0lDQnBaRG9nVm1GeWFXRmliR1ZHYjNKdFlYUkpSQzVRYVhCbExGeHVJQ0FnSUNBZ2JtRnRaVG9nSjFCcGNHVW5MRnh1SUNBZ0lDQWdaR1Z6WTNKcGNIUnBiMjQ2SUNkV1lXeDFaWE1nWVhKbElITmxjR0Z5WVhSbFpDQmllU0I4SUdOb1lYSmhZM1JsY2ljc1hHNGdJQ0FnSUNCbWIzSnRZWFIwWlhJNklDaDJZV3gxWlNrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0JwWmlBb2RIbHdaVzltSUhaaGJIVmxJRDA5UFNBbmMzUnlhVzVuSnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQjJZV3gxWlR0Y2JpQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJR2xtSUNoQmNuSmhlUzVwYzBGeWNtRjVLSFpoYkhWbEtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIyWVd4MVpTNXFiMmx1S0NkOEp5azdYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnWUNSN2RtRnNkV1Y5WUR0Y2JpQWdJQ0FnSUgwc1hHNGdJQ0FnZlN4Y2JpQWdJQ0I3WEc0Z0lDQWdJQ0JwWkRvZ1ZtRnlhV0ZpYkdWR2IzSnRZWFJKUkM1RWFYTjBjbWxpZFhSbFpDeGNiaUFnSUNBZ0lHNWhiV1U2SUNkRWFYTjBjbWxpZFhSbFpDY3NYRzRnSUNBZ0lDQmtaWE5qY21sd2RHbHZiam9nSjAxMWJIUnBjR3hsSUhaaGJIVmxjeUJoY21VZ1ptOXliV0YwZEdWa0lHeHBhMlVnZG1GeWFXRmliR1U5ZG1Gc2RXVW5MRnh1SUNBZ0lDQWdabTl5YldGMGRHVnlPaUFvZG1Gc2RXVXNJR0Z5WjNNc0lIWmhjbWxoWW14bEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUdsbUlDaDBlWEJsYjJZZ2RtRnNkV1VnUFQwOUlDZHpkSEpwYm1jbktTQjdYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSFpoYkhWbE8xeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnYVdZZ0tFRnljbUY1TG1selFYSnlZWGtvZG1Gc2RXVXBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2RtRnNkV1VnUFNCdFlYQW9kbUZzZFdVc0lDaDJZV3c2SUhOMGNtbHVaeXdnYVc1a1pYZzZJRzUxYldKbGNpa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0dsdVpHVjRJQ0U5UFNBd0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCMllYSnBZV0pzWlM1emRHRjBaUzV1WVcxbElDc2dKejBuSUNzZ2RtRnNPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSFpoYkR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNCOUtUdGNibHh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIyWVd4MVpTNXFiMmx1S0Njc0p5azdYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnWUNSN2RtRnNkV1Y5WUR0Y2JpQWdJQ0FnSUgwc1hHNGdJQ0FnZlN4Y2JpQWdJQ0I3WEc0Z0lDQWdJQ0JwWkRvZ1ZtRnlhV0ZpYkdWR2IzSnRZWFJKUkM1RFUxWXNYRzRnSUNBZ0lDQnVZVzFsT2lBblEzTjJKeXhjYmlBZ0lDQWdJR1JsYzJOeWFYQjBhVzl1T2lBblEyOXRiV0V0YzJWd1lYSmhkR1ZrSUhaaGJIVmxjeWNzWEc0Z0lDQWdJQ0JtYjNKdFlYUjBaWEk2SUNoMllXeDFaU2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JSFpoYkhWbElEMDlQU0FuYzNSeWFXNW5KeWtnZTF4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCMllXeDFaVHRjYmlBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lHbG1JQ2hwYzBGeWNtRjVLSFpoYkhWbEtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIyWVd4MVpTNXFiMmx1S0Njc0p5azdYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnVTNSeWFXNW5LSFpoYkhWbEtUdGNiaUFnSUNBZ0lIMHNYRzRnSUNBZ2ZTeGNiaUFnSUNCN1hHNGdJQ0FnSUNCcFpEb2dWbUZ5YVdGaWJHVkdiM0p0WVhSSlJDNUlWRTFNTEZ4dUlDQWdJQ0FnYm1GdFpUb2dKMGhVVFV3bkxGeHVJQ0FnSUNBZ1pHVnpZM0pwY0hScGIyNDZJQ2RJVkUxTUlHVnpZMkZ3YVc1bklHOW1JSFpoYkhWbGN5Y3NYRzRnSUNBZ0lDQm1iM0p0WVhSMFpYSTZJQ2gyWVd4MVpTa2dQVDRnZTF4dUlDQWdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlIWmhiSFZsSUQwOVBTQW5jM1J5YVc1bkp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIwWlhoMFZYUnBiQzVsYzJOaGNHVklkRzFzS0haaGJIVmxLVHRjYmlBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lHbG1JQ2hwYzBGeWNtRjVLSFpoYkhWbEtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIwWlhoMFZYUnBiQzVsYzJOaGNHVklkRzFzS0haaGJIVmxMbXB2YVc0b0p5d2dKeWtwTzF4dUlDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIUmxlSFJWZEdsc0xtVnpZMkZ3WlVoMGJXd29VM1J5YVc1bktIWmhiSFZsS1NrN1hHNGdJQ0FnSUNCOUxGeHVJQ0FnSUgwc1hHNGdJQ0FnZTF4dUlDQWdJQ0FnYVdRNklGWmhjbWxoWW14bFJtOXliV0YwU1VRdVNsTlBUaXhjYmlBZ0lDQWdJRzVoYldVNklDZEtVMDlPSnl4Y2JpQWdJQ0FnSUdSbGMyTnlhWEIwYVc5dU9pQW5TbE5QVGlCemRISnBibWRwWm5rZ2RtRnNkV1VuTEZ4dUlDQWdJQ0FnWm05eWJXRjBkR1Z5T2lBb2RtRnNkV1VwSUQwK0lIdGNiaUFnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUIyWVd4MVpTQTlQVDBnSjNOMGNtbHVaeWNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2RtRnNkV1U3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUVwVFQwNHVjM1J5YVc1bmFXWjVLSFpoYkhWbEtUdGNiaUFnSUNBZ0lIMHNYRzRnSUNBZ2ZTeGNiaUFnSUNCN1hHNGdJQ0FnSUNCcFpEb2dWbUZ5YVdGaWJHVkdiM0p0WVhSSlJDNVFaWEpqWlc1MFJXNWpiMlJsTEZ4dUlDQWdJQ0FnYm1GdFpUb2dKMUJsY21ObGJuUWdaVzVqYjJSbEp5eGNiaUFnSUNBZ0lHUmxjMk55YVhCMGFXOXVPaUFuVlhObFpuVnNJR1p2Y2lCVlVrd2daWE5qWVhCcGJtY2dkbUZzZFdWekp5eGNiaUFnSUNBZ0lHWnZjbTFoZEhSbGNqb2dLSFpoYkhWbEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUM4dklHeHBhMlVnWjJ4dllpd2dZblYwSUhWeWJDQmxjMk5oY0dWa1hHNGdJQ0FnSUNBZ0lHbG1JQ2hwYzBGeWNtRjVLSFpoYkhWbEtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJsYm1OdlpHVlZVa2xEYjIxd2IyNWxiblJUZEhKcFkzUW9KM3NuSUNzZ2RtRnNkV1V1YW05cGJpZ25MQ2NwSUNzZ0ozMG5LVHRjYmlBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCbGJtTnZaR1ZWVWtsRGIyMXdiMjVsYm5SVGRISnBZM1FvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdmU3hjYmlBZ0lDQjlMRnh1SUNBZ0lIdGNiaUFnSUNBZ0lHbGtPaUJXWVhKcFlXSnNaVVp2Y20xaGRFbEVMbE5wYm1kc1pWRjFiM1JsTEZ4dUlDQWdJQ0FnYm1GdFpUb2dKMU5wYm1kc1pTQnhkVzkwWlNjc1hHNGdJQ0FnSUNCa1pYTmpjbWx3ZEdsdmJqb2dKMU5wYm1kc1pTQnhkVzkwWldRZ2RtRnNkV1Z6Snl4Y2JpQWdJQ0FnSUdadmNtMWhkSFJsY2pvZ0tIWmhiSFZsS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQzh2SUdWelkyRndaU0J6YVc1bmJHVWdjWFZ2ZEdWeklIZHBkR2dnWW1GamEzTnNZWE5vWEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSEpsWjBWNGNDQTlJRzVsZHlCU1pXZEZlSEFvWUNkZ0xDQW5aeWNwTzF4dVhHNGdJQ0FnSUNBZ0lHbG1JQ2hwYzBGeWNtRjVLSFpoYkhWbEtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ0WVhBb2RtRnNkV1VzSUNoMk9pQnpkSEpwYm1jcElEMCtJR0FuSkh0eVpYQnNZV05sS0hZc0lISmxaMFY0Y0N3Z1lGeGNYRnduWUNsOUoyQXBMbXB2YVc0b0p5d25LVHRjYmlBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lHeGxkQ0J6ZEhKV1lXd2dQU0IwZVhCbGIyWWdkbUZzZFdVZ1BUMDlJQ2R6ZEhKcGJtY25JRDhnZG1Gc2RXVWdPaUJUZEhKcGJtY29kbUZzZFdVcE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1lDY2tlM0psY0d4aFkyVW9jM1J5Vm1Gc0xDQnlaV2RGZUhBc0lHQmNYRnhjSjJBcGZTZGdPMXh1SUNBZ0lDQWdmU3hjYmlBZ0lDQjlMRnh1SUNBZ0lIdGNiaUFnSUNBZ0lHbGtPaUJXWVhKcFlXSnNaVVp2Y20xaGRFbEVMa1J2ZFdKc1pWRjFiM1JsTEZ4dUlDQWdJQ0FnYm1GdFpUb2dKMFJ2ZFdKc1pTQnhkVzkwWlNjc1hHNGdJQ0FnSUNCa1pYTmpjbWx3ZEdsdmJqb2dKMFJ2ZFdKc1pTQnhkVzkwWldRZ2RtRnNkV1Z6Snl4Y2JpQWdJQ0FnSUdadmNtMWhkSFJsY2pvZ0tIWmhiSFZsS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQzh2SUdWelkyRndaU0JrYjNWaWJHVWdjWFZ2ZEdWeklIZHBkR2dnWW1GamEzTnNZWE5vWEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSEpsWjBWNGNDQTlJRzVsZHlCU1pXZEZlSEFvSjF3aUp5d2dKMmNuS1R0Y2JpQWdJQ0FnSUNBZ2FXWWdLR2x6UVhKeVlYa29kbUZzZFdVcEtTQjdYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJRzFoY0NoMllXeDFaU3dnS0hZNklITjBjbWx1WnlrZ1BUNGdZRndpSkh0eVpYQnNZV05sS0hZc0lISmxaMFY0Y0N3Z0oxeGNYRnhjSWljcGZWd2lZQ2t1YW05cGJpZ25MQ2NwTzF4dUlDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdiR1YwSUhOMGNsWmhiQ0E5SUhSNWNHVnZaaUIyWVd4MVpTQTlQVDBnSjNOMGNtbHVaeWNnUHlCMllXeDFaU0E2SUZOMGNtbHVaeWgyWVd4MVpTazdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQmdYQ0lrZTNKbGNHeGhZMlVvYzNSeVZtRnNMQ0J5WldkRmVIQXNJQ2RjWEZ4Y1hDSW5LWDFjSW1BN1hHNGdJQ0FnSUNCOUxGeHVJQ0FnSUgwc1hHNGdJQ0FnZTF4dUlDQWdJQ0FnYVdRNklGWmhjbWxoWW14bFJtOXliV0YwU1VRdVUxRk1VM1J5YVc1bkxGeHVJQ0FnSUNBZ2JtRnRaVG9nSjFOUlRDQnpkSEpwYm1jbkxGeHVJQ0FnSUNBZ1pHVnpZM0pwY0hScGIyNDZJQ2RUVVV3Z2MzUnlhVzVuSUhGMWIzUnBibWNnWVc1a0lHTnZiVzFoY3lCbWIzSWdkWE5sSUdsdUlFbE9JSE4wWVhSbGJXVnVkSE1nWVc1a0lHOTBhR1Z5SUhOalpXNWhjbWx2Y3ljc1hHNGdJQ0FnSUNCbWIzSnRZWFIwWlhJNklITnhiRk4wY21sdVowWnZjbTFoZEhSbGNpeGNiaUFnSUNCOUxGeHVJQ0FnSUh0Y2JpQWdJQ0FnSUdsa09pQldZWEpwWVdKc1pVWnZjbTFoZEVsRUxrUmhkR1VzWEc0Z0lDQWdJQ0J1WVcxbE9pQW5SR0YwWlNjc1hHNGdJQ0FnSUNCa1pYTmpjbWx3ZEdsdmJqb2dKMFp2Y20xaGRDQmtZWFJsSUdsdUlHUnBabVpsY21WdWRDQjNZWGx6Snl4Y2JpQWdJQ0FnSUdadmNtMWhkSFJsY2pvZ0tIWmhiSFZsTENCaGNtZHpLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lHeGxkQ0J1Y2xaaGJIVmxJRDBnVG1GT08xeHVYRzRnSUNBZ0lDQWdJR2xtSUNoMGVYQmxiMllnZG1Gc2RXVWdQVDA5SUNkdWRXMWlaWEluS1NCN1hHNGdJQ0FnSUNBZ0lDQWdibkpXWVd4MVpTQTlJSFpoYkhWbE8xeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLSFI1Y0dWdlppQjJZV3gxWlNBOVBUMGdKM04wY21sdVp5Y3BJSHRjYmlBZ0lDQWdJQ0FnSUNCdWNsWmhiSFZsSUQwZ2NHRnljMlZKYm5Rb2RtRnNkV1VzSURFd0tUdGNiaUFnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUdsbUlDaHBjMDVoVGlodWNsWmhiSFZsS1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQW5UbUZPSnp0Y2JpQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJR052Ym5OMElHRnlaeUE5SUdGeVozTmJNRjBnUHo4Z0oybHpieWM3WEc0Z0lDQWdJQ0FnSUhOM2FYUmphQ0FvWVhKbktTQjdYRzRnSUNBZ0lDQWdJQ0FnWTJGelpTQW5iWE1uT2x4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlGTjBjbWx1WnloMllXeDFaU2s3WEc0Z0lDQWdJQ0FnSUNBZ1kyRnpaU0FuYzJWamIyNWtjeWM2WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1lDUjdUV0YwYUM1eWIzVnVaQ2h1Y2xaaGJIVmxJU0F2SURFd01EQXBmV0E3WEc0Z0lDQWdJQ0FnSUNBZ1kyRnpaU0FuYVhOdkp6cGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJrWVhSbFZHbHRaU2h1Y2xaaGJIVmxLUzUwYjBsVFQxTjBjbWx1WnlncE8xeHVJQ0FnSUNBZ0lDQWdJR1JsWm1GMWJIUTZYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9LR0Z5WjNNZ2ZId2dXMTBwTG14bGJtZDBhQ0ErSURFcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdSaGRHVlVhVzFsS0c1eVZtRnNkV1VwTG1admNtMWhkQ2hoY21kekxtcHZhVzRvSnpvbktTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdaR0YwWlZScGJXVW9ibkpXWVd4MVpTa3VabTl5YldGMEtHRnlaeWs3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgwc1hHNGdJQ0FnZlN4Y2JpQWdJQ0I3WEc0Z0lDQWdJQ0JwWkRvZ1ZtRnlhV0ZpYkdWR2IzSnRZWFJKUkM1SGJHOWlMRnh1SUNBZ0lDQWdibUZ0WlRvZ0owZHNiMkluTEZ4dUlDQWdJQ0FnWkdWelkzSnBjSFJwYjI0NklDZEdiM0p0WVhRZ2JYVnNkR2t0ZG1Gc2RXVmtJSFpoY21saFlteGxjeUIxYzJsdVp5Qm5iRzlpSUhONWJuUmhlQ3dnWlhoaGJYQnNaU0I3ZG1Gc2RXVXhMSFpoYkhWbE1uMG5MRnh1SUNBZ0lDQWdabTl5YldGMGRHVnlPaUFvZG1Gc2RXVXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLR2x6UVhKeVlYa29kbUZzZFdVcElDWW1JSFpoYkhWbExteGxibWQwYUNBK0lERXBJSHRjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnSjNzbklDc2dkbUZzZFdVdWFtOXBiaWduTENjcElDc2dKMzBuTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCVGRISnBibWNvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdmU3hjYmlBZ0lDQjlMRnh1SUNBZ0lIdGNiaUFnSUNBZ0lHbGtPaUJXWVhKcFlXSnNaVVp2Y20xaGRFbEVMbFJsZUhRc1hHNGdJQ0FnSUNCdVlXMWxPaUFuVkdWNGRDY3NYRzRnSUNBZ0lDQmtaWE5qY21sd2RHbHZiam9nSjBadmNtMWhkQ0IyWVhKcFlXSnNaWE1nYVc0Z2RHaGxhWElnZEdWNGRDQnlaWEJ5WlhObGJuUmhkR2x2Ymk0Z1JYaGhiWEJzWlNCcGJpQnRkV3gwYVMxMllYSnBZV0pzWlNCelkyVnVZWEpwYnlCQklDc2dRaUFySUVNdUp5eGNiaUFnSUNBZ0lHWnZjbTFoZEhSbGNqb2dLSFpoYkhWbExDQmZZWEpuY3l3Z2RtRnlhV0ZpYkdVcElEMCtJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIWmhjbWxoWW14bExtZGxkRlpoYkhWbFZHVjRkQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCMllYSnBZV0pzWlM1blpYUldZV3gxWlZSbGVIUW9LVHRjYmlBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCVGRISnBibWNvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdmU3hjYmlBZ0lDQjlMRnh1SUNBZ0lIdGNiaUFnSUNBZ0lHbGtPaUJXWVhKcFlXSnNaVVp2Y20xaGRFbEVMbEYxWlhKNVVHRnlZVzBzWEc0Z0lDQWdJQ0J1WVcxbE9pQW5VWFZsY25rZ2NHRnlZVzFsZEdWeUp5eGNiaUFnSUNBZ0lHUmxjMk55YVhCMGFXOXVPbHh1SUNBZ0lDQWdJQ0FuUm05eWJXRjBJSFpoY21saFlteGxjeUJoY3lCVlVrd2djR0Z5WVcxbGRHVnljeTRnUlhoaGJYQnNaU0JwYmlCdGRXeDBhUzEyWVhKcFlXSnNaU0J6WTJWdVlYSnBieUJCSUNzZ1FpQXJJRU1nUFQ0Z2RtRnlMV1p2YnoxQkpuWmhjaTFtYjI4OVFpWjJZWEl0Wm05dlBVTXVKeXhjYmlBZ0lDQWdJR1p2Y20xaGRIUmxjam9nS0haaGJIVmxMQ0JmWVhKbmN5d2dkbUZ5YVdGaWJHVXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLSFpoY21saFlteGxMblZ5YkZONWJtTXBJSHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0IxY214UVlYSmhiU0E5SUhaaGNtbGhZbXhsTG5WeWJGTjVibU11WjJWMFZYSnNVM1JoZEdVb0tUdGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdkWEpzVlhScGJDNTBiMVZ5YkZCaGNtRnRjeWgxY214UVlYSmhiU2s3WEc0Z0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQnBaaUFvUVhKeVlYa3VhWE5CY25KaGVTaDJZV3gxWlNrcElIdGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdkbUZzZFdVdWJXRndLQ2gyS1NBOVBpQm1iM0p0WVhSUmRXVnllVkJoY21GdFpYUmxjaWgyWVhKcFlXSnNaUzV6ZEdGMFpTNXVZVzFsTENCMktTa3VhbTlwYmlnbkppY3BPMXh1SUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdadmNtMWhkRkYxWlhKNVVHRnlZVzFsZEdWeUtIWmhjbWxoWW14bExuTjBZWFJsTG01aGJXVXNJSFpoYkhWbEtUdGNiaUFnSUNBZ0lIMHNYRzRnSUNBZ2ZTeGNiaUFnSUNCN1hHNGdJQ0FnSUNCcFpEb2dWbUZ5YVdGaWJHVkdiM0p0WVhSSlJDNVZjbWxGYm1OdlpHVXNYRzRnSUNBZ0lDQnVZVzFsT2lBblVHVnlZMlZ1ZENCbGJtTnZaR1VnWVhNZ1ZWSkpKeXhjYmlBZ0lDQWdJR1JsYzJOeWFYQjBhVzl1T2lBblZYTmxablZzSUdadmNpQlZVa3dnWlhOallYQnBibWNnZG1Gc2RXVnpMQ0IwWVd0cGJtY2dhVzUwYnlCVlVra2djM2x1ZEdGNElHTm9ZWEpoWTNSbGNuTW5MRnh1SUNBZ0lDQWdabTl5YldGMGRHVnlPaUFvZG1Gc2RXVTZJRlpoY21saFlteGxWbUZzZFdVcElEMCtJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHbHpRWEp5WVhrb2RtRnNkV1VwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHVnVZMjlrWlZWU1NWTjBjbWxqZENnbmV5Y2dLeUIyWVd4MVpTNXFiMmx1S0Njc0p5a2dLeUFuZlNjcE8xeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR1Z1WTI5a1pWVlNTVk4wY21samRDaDJZV3gxWlNrN1hHNGdJQ0FnSUNCOUxGeHVJQ0FnSUgwc1hHNGdJRjA3WEc1Y2JpQWdjbVYwZFhKdUlHWnZjbTFoZEhNN1hHNTlLVHRjYmx4dVpuVnVZM1JwYjI0Z2JIVmpaVzVsUlhOallYQmxLSFpoYkhWbE9pQnpkSEpwYm1jcElIdGNiaUFnYVdZZ0tHbHpUbUZPS0N0MllXeDFaU2tnUFQwOUlHWmhiSE5sS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFpoYkhWbE8xeHVJQ0I5WEc1Y2JpQWdjbVYwZFhKdUlIWmhiSFZsTG5KbGNHeGhZMlVvTHloYlhGd2hYRndxWEZ3clhGd3RYRnc5UEQ1Y1hITmNYQ1pjWEh4Y1hDaGNYQ2xjWEZ0Y1hGMWNYSHRjWEgxY1hGNWNYSDVjWEQ5Y1hEcGNYRnhjTDF3aVhTa3ZaeXdnSjF4Y1hGd2tNU2NwTzF4dWZWeHVYRzR2S2lwY2JpQXFJR1Z1WTI5a1pTQnpkSEpwYm1jZ1lXTmpiM0prYVc1bklIUnZJRkpHUXlBek9UZzJPeUJwYmlCamIyNTBjbUZ6ZENCMGJ5QmxibU52WkdWVlVrbERiMjF3YjI1bGJuUW9LVnh1SUNvZ1lXeHpieUIwYUdVZ2MzVmlMV1JsYkdsdGN5QmNJaUZjSWl3Z1hDSW5YQ0lzSUZ3aUtGd2lMQ0JjSWlsY0lpQmhibVFnWENJcVhDSWdZWEpsSUdWdVkyOWtaV1E3WEc0Z0tpQjFibWxqYjJSbElHaGhibVJzYVc1bklIVnpaWE1nVlZSR0xUZ2dZWE1nYVc0Z1JVTk5RUzB5TmpJdVhHNGdLaTljYm1aMWJtTjBhVzl1SUdWdVkyOWtaVlZTU1VOdmJYQnZibVZ1ZEZOMGNtbGpkQ2h6ZEhJNklGWmhjbWxoWW14bFZtRnNkV1ZUYVc1bmJHVXBJSHRjYmlBZ2FXWWdLSFI1Y0dWdlppQnpkSElnUFQwOUlDZHZZbXBsWTNRbktTQjdYRzRnSUNBZ2MzUnlJRDBnVTNSeWFXNW5LSE4wY2lrN1hHNGdJSDFjYmx4dUlDQnlaWFIxY200Z2NtVndiR0ZqWlZOd1pXTnBZV3hEYUdGeVlXTjBaWEp6Vkc5QlUwTkpTU2hsYm1OdlpHVlZVa2xEYjIxd2IyNWxiblFvYzNSeUtTazdYRzU5WEc1Y2JtTnZibk4wSUdWdVkyOWtaVlZTU1ZOMGNtbGpkQ0E5SUNoemRISTZJRlpoY21saFlteGxWbUZzZFdWVGFXNW5iR1VwT2lCemRISnBibWNnUFQ0Z2NtVndiR0ZqWlZOd1pXTnBZV3hEYUdGeVlXTjBaWEp6Vkc5QlUwTkpTU2hsYm1OdlpHVlZVa2tvVTNSeWFXNW5LSE4wY2lrcEtUdGNibHh1WTI5dWMzUWdjbVZ3YkdGalpWTndaV05wWVd4RGFHRnlZV04wWlhKelZHOUJVME5KU1NBOUlDaDJZV3gxWlRvZ2MzUnlhVzVuS1RvZ2MzUnlhVzVuSUQwK1hHNGdJSFpoYkhWbExuSmxjR3hoWTJVb0wxc2hKeWdwS2wwdlp5d2dLR01wSUQwK0lIdGNiaUFnSUNCeVpYUjFjbTRnSnlVbklDc2dZeTVqYUdGeVEyOWtaVUYwS0RBcExuUnZVM1J5YVc1bktERTJLUzUwYjFWd2NHVnlRMkZ6WlNncE8xeHVJQ0I5S1R0Y2JseHVablZ1WTNScGIyNGdabTl5YldGMFVYVmxjbmxRWVhKaGJXVjBaWElvYm1GdFpUb2djM1J5YVc1bkxDQjJZV3gxWlRvZ1ZtRnlhV0ZpYkdWV1lXeDFaVk5wYm1kc1pTazZJSE4wY21sdVp5QjdYRzRnSUhKbGRIVnliaUJnZG1GeUxTUjdibUZ0WlgwOUpIdGxibU52WkdWVlVrbERiMjF3YjI1bGJuUlRkSEpwWTNRb2RtRnNkV1VwZldBN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJwYzBGc2JGWmhiSFZsS0haaGJIVmxPaUJXWVhKcFlXSnNaVlpoYkhWbFUybHVaMnhsS1NCN1hHNGdJSEpsZEhWeWJpQjJZV3gxWlNBOVBUMGdRVXhNWDFaQlVrbEJRa3hGWDFaQlRGVkZJSHg4SUNoQmNuSmhlUzVwYzBGeWNtRjVLSFpoYkhWbEtTQW1KaUIyWVd4MVpWc3dYU0E5UFQwZ1FVeE1YMVpCVWtsQlFreEZYMVpCVEZWRktUdGNibjFjYmx4dVkyOXVjM1FnVTFGTVgwVlRRMEZRUlY5TlFWQTZJRkpsWTI5eVpEeHpkSEpwYm1jc0lITjBjbWx1Wno0Z1BTQjdYRzRnSUZ3aUoxd2lPaUJjSWljblhDSXNYRzRnSUNkY0lpYzZJQ2RjWEZ4Y1hDSW5MRnh1ZlR0Y2JseHVablZ1WTNScGIyNGdjM0ZzVTNSeWFXNW5SbTl5YldGMGRHVnlLSFpoYkhWbE9pQldZWEpwWVdKc1pWWmhiSFZsS1NCN1hHNGdJQzh2SUdWelkyRndaU0J6YVc1bmJHVWdjWFZ2ZEdWeklHSjVJSEJoYVhKcGJtY2dkR2hsYlZ4dUlDQmpiMjV6ZENCeVpXZEZlSEFnUFNCdVpYY2dVbVZuUlhod0tHQW5mRndpWUN3Z0oyY25LVHRjYmx4dUlDQnBaaUFvYVhOQmNuSmhlU2gyWVd4MVpTa3BJSHRjYmlBZ0lDQnlaWFIxY200Z2JXRndLSFpoYkhWbExDQW9kam9nYzNSeWFXNW5LU0E5UGlCZ0p5UjdjbVZ3YkdGalpTaDJMQ0J5WldkRmVIQXNJQ2h0WVhSamFDa2dQVDRnVTFGTVgwVlRRMEZRUlY5TlFWQmJiV0YwWTJoZElEOC9JQ2NuS1gwbllDa3VhbTlwYmlnbkxDY3BPMXh1SUNCOVhHNWNiaUFnYkdWMElITjBjbFpoYkNBOUlIUjVjR1Z2WmlCMllXeDFaU0E5UFQwZ0ozTjBjbWx1WnljZ1B5QjJZV3gxWlNBNklGTjBjbWx1WnloMllXeDFaU2s3WEc0Z0lISmxkSFZ5YmlCZ0p5UjdjbVZ3YkdGalpTaHpkSEpXWVd3c0lISmxaMFY0Y0N3Z0tHMWhkR05vS1NBOVBpQlRVVXhmUlZORFFWQkZYMDFCVUZ0dFlYUmphRjBnUHo4Z0p5Y3BmU2RnTzF4dWZWeHVJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3UVVFclFtRXNUVUZCUVN4alFVRkJMRWRCUVdsQ0xFbEJRVWtzVVVGQlFTeERRVUUyUWl4TlFVRk5PMEZCUTI1RkxFVkJRVUVzVFVGQlRTeFBRVUZuUXl4SFFVRkJPMEZCUVVFc1NVRkRjRU03UVVGQlFTeE5RVU5GTEVsQlFVa3NaMEpCUVdsQ0xFTkJRVUVzVFVGQlFUdEJRVUZCTEUxQlEzSkNMRWxCUVUwc1JVRkJRU3hSUVVGQk8wRkJRVUVzVFVGRFRpeFhRVUZoTEVWQlFVRXNaMFpCUVVFN1FVRkJRU3hOUVVOaUxGTkJRVUVzUlVGQlZ5eERRVUZETEV0QlFWVXNTMEZCUVR0QlFVTndRaXhSUVVGSkxFbEJRVUVzVDBGQlR5eFZRVUZWTEZGQlFWVXNSVUZCUVR0QlFVTTNRaXhWUVVGQkxFOUJRVThzWVVGQllTeExRVUZMTEVOQlFVRXNRMEZCUVR0QlFVRkJMRk5CUXpOQ08wRkJSVUVzVVVGQlNTeEpRVUZCTEV0QlFVRXNRMEZCVFN4UFFVRlJMRU5CUVVFc1MwRkJTeXhEUVVGSExFVkJRVUU3UVVGRGVFSXNWVUZCU1N4SlFVRkJMRXRCUVVFc1EwRkJUU3hYUVVGWExFTkJRVWNzUlVGQlFUdEJRVU4wUWl4WlFVRlBMRTlCUVVFc1YwRkJRU3hEUVVGQk8wRkJRVUVzVjBGRFZEdEJRVU5CTEZWQlFVRXNUVUZCVFN4WlFVRmxMRWRCUVVFc1IwRkJRU3hEUVVGSkxFdEJRVThzUlVGQlFTeERRVUZETEVkQlFXZENMRXRCUVVFN1FVRkRMME1zV1VGQlR5eFBRVUZCTEVkQlFVRXNSMEZCVFN4WlFVRmhMRU5CUVVFc1IwRkJSeXhEUVVGSkxFZEJRVUVzUjBGQlFTeERRVUZCTzBGQlFVRXNWMEZEYkVNc1EwRkJRU3hEUVVGQk8wRkJRMFFzVlVGQlFTeFBRVUZQTEVkQlFVMHNSMEZCUVN4WlFVRkJMRU5CUVdFc1NVRkJTeXhEUVVGQkxFMUJRVTBzUTBGQlNTeEhRVUZCTEVkQlFVRXNRMEZCUVR0QlFVRkJMRk5CUTNCRExFMUJRVUU3UVVGRFRDeFZRVUZQTEU5QlFVRXNXVUZCUVN4RFFVRmhMRWRCUVVjc1MwRkJUeXhEUVVGQkxFTkJRVUVzUTBGQlFTeERRVUZCTzBGQlFVRXNVMEZEYUVNN1FVRkJRU3hQUVVOR08wRkJRVUVzUzBGRFJqdEJRVUZCTEVsQlEwRTdRVUZCUVN4TlFVTkZMRWxCUVVrc1owSkJRV2xDTEVOQlFVRXNSMEZCUVR0QlFVRkJMRTFCUTNKQ0xFbEJRVTBzUlVGQlFTeExRVUZCTzBGQlFVRXNUVUZEVGl4WFFVRmhMRVZCUVVFc2EwSkJRVUU3UVVGQlFTeE5RVU5pTEZOQlFWY3NSVUZCUVN4RFFVRkRMRXRCUVZVc1MwRkJRU3hOUVVGQkxFTkJRVThzUzBGQlN5eERRVUZCTzBGQlFVRXNTMEZEY0VNN1FVRkJRU3hKUVVOQk8wRkJRVUVzVFVGRFJTeEpRVUZKTEdkQ1FVRnBRaXhEUVVGQkxFdEJRVUU3UVVGQlFTeE5RVU55UWl4SlFVRk5MRVZCUVVFc1QwRkJRVHRCUVVGQkxFMUJRMDRzVjBGQllTeEZRVUZCTERaR1FVRkJPMEZCUVVFc1RVRkRZaXhUUVVGQkxFVkJRVmNzUTBGQlF5eExRVUZWTEV0QlFVRTdRVUZEY0VJc1VVRkJTU3hKUVVGQkxFOUJRVThzVlVGQlZTeFJRVUZWTEVWQlFVRTdRVUZETjBJc1ZVRkJRU3hQUVVGUExGbEJRVmtzUzBGQlN5eERRVUZCTEVOQlFVRTdRVUZCUVN4VFFVTXhRanRCUVVWQkxGRkJRVWtzU1VGQlFTeExRVUZCTEVOQlFVMHNUMEZCVVN4RFFVRkJMRXRCUVVzc1EwRkJSeXhGUVVGQk8wRkJRM2hDTEZWQlFVRXNUVUZCVFN4aFFVRm5RaXhIUVVGQkxFdEJRVUVzUTBGQlRTeEhRVUZKTEVOQlFVRXNRMEZCUXl4SlFVRlRMRXRCUVVFN1FVRkRlRU1zV1VGQlNTeEpRVUZCTEU5QlFVOHNVMEZCVXl4UlFVRlZMRVZCUVVFN1FVRkROVUlzWTBGQlFTeFBRVUZQTEZsQlFWa3NTVUZCU1N4RFFVRkJMRU5CUVVFN1FVRkJRU3hoUVVOc1FpeE5RVUZCTzBGQlEwd3NZMEZCVHl4UFFVRkJMRmRCUVVFc1EwRkJXU3hOUVVGUExFTkJRVUVzU1VGQlNTeERRVUZETEVOQlFVRXNRMEZCUVR0QlFVRkJMR0ZCUTJwRE8wRkJRVUVzVjBGRFJDeERRVUZCTEVOQlFVRTdRVUZGUkN4VlFVRkpMRWxCUVVFc1lVRkJRU3hEUVVGakxGZEJRVmNzUTBGQlJ5eEZRVUZCTzBGQlF6bENMRmxCUVVFc1QwRkJUeXhoUVVGakxFTkJRVUVzUTBGQlFTeERRVUZCTEVOQlFVRTdRVUZCUVN4WFFVTjJRanRCUVVWQkxGVkJRVUVzVDBGQlR5eEhRVUZOTEVkQlFVRXNZVUZCUVN4RFFVRmpMRWxCUVVzc1EwRkJRU3hIUVVGSExFTkJRVWtzUjBGQlFTeEhRVUZCTEVOQlFVRTdRVUZCUVN4VFFVTjZRenRCUVVWQkxGRkJRVThzVDBGQlFTeFhRVUZCTEVOQlFWa3NSMEZCUnl4TFFVRlBMRU5CUVVFc1EwRkJRU3hEUVVGQkxFTkJRVUU3UVVGQlFTeFBRVU12UWp0QlFVRkJMRXRCUTBZN1FVRkJRU3hKUVVOQk8wRkJRVUVzVFVGRFJTeEpRVUZKTEdkQ1FVRnBRaXhEUVVGQkxFbEJRVUU3UVVGQlFTeE5RVU55UWl4SlFVRk5MRVZCUVVFc1RVRkJRVHRCUVVGQkxFMUJRMDRzVjBGQllTeEZRVUZCTEhGRFFVRkJPMEZCUVVFc1RVRkRZaXhUUVVGQkxFVkJRVmNzUTBGQlF5eExRVUZWTEV0QlFVRTdRVUZEY0VJc1VVRkJTU3hKUVVGQkxFOUJRVThzVlVGQlZTeFJRVUZWTEVWQlFVRTdRVUZETjBJc1ZVRkJUeXhQUVVGQkxFdEJRVUVzUTBGQlFUdEJRVUZCTEZOQlExUTdRVUZGUVN4UlFVRkpMRWxCUVVFc1MwRkJRU3hEUVVGTkxFOUJRVkVzUTBGQlFTeExRVUZMTEVOQlFVY3NSVUZCUVR0QlFVTjRRaXhWUVVGUExFOUJRVUVzUzBGQlFTeERRVUZOTEV0QlFVc3NSMEZCUnl4RFFVRkJMRU5CUVVFN1FVRkJRU3hUUVVOMlFqdEJRVVZCTEZGQlFVRXNUMEZCVHl4RFFVRkhMRVZCUVVFc1MwRkJRU3hEUVVGQkxFTkJRVUVzUTBGQlFUdEJRVUZCTEU5QlExbzdRVUZCUVN4TFFVTkdPMEZCUVVFc1NVRkRRVHRCUVVGQkxFMUJRMFVzU1VGQlNTeG5Ra0ZCYVVJc1EwRkJRU3hYUVVGQk8wRkJRVUVzVFVGRGNrSXNTVUZCVFN4RlFVRkJMR0ZCUVVFN1FVRkJRU3hOUVVOT0xGZEJRV0VzUlVGQlFTeHRSRUZCUVR0QlFVRkJMRTFCUTJJc1UwRkJWeXhGUVVGQkxFTkJRVU1zUzBGQlR5eEZRVUZCTEVsQlFVRXNSVUZCVFN4UlFVRmhMRXRCUVVFN1FVRkRjRU1zVVVGQlNTeEpRVUZCTEU5QlFVOHNWVUZCVlN4UlFVRlZMRVZCUVVFN1FVRkROMElzVlVGQlR5eFBRVUZCTEV0QlFVRXNRMEZCUVR0QlFVRkJMRk5CUTFRN1FVRkZRU3hSUVVGSkxFbEJRVUVzUzBGQlFTeERRVUZOTEU5QlFWRXNRMEZCUVN4TFFVRkxMRU5CUVVjc1JVRkJRVHRCUVVONFFpeFZRVUZCTEV0QlFVRXNSMEZCVVN4SFFVRkpMRU5CUVVFc1MwRkJRU3hGUVVGUExFTkJRVU1zUjBGQlFTeEZRVUZoTEV0QlFXdENMRXRCUVVFN1FVRkRha1FzV1VGQlFTeEpRVUZKTEZWQlFWVXNRMEZCUnl4RlFVRkJPMEZCUTJZc1kwRkJUeXhQUVVGQkxGRkJRVUVzUTBGQlV5eExRVUZOTEVOQlFVRXNTVUZCUVN4SFFVRlBMRWRCUVUwc1IwRkJRU3hIUVVGQkxFTkJRVUU3UVVGQlFTeGhRVU01UWl4TlFVRkJPMEZCUTB3c1kwRkJUeXhQUVVGQkxFZEJRVUVzUTBGQlFUdEJRVUZCTEdGQlExUTdRVUZCUVN4WFFVTkVMRU5CUVVFc1EwRkJRVHRCUVVWRUxGVkJRVThzVDBGQlFTeExRVUZCTEVOQlFVMHNTMEZCU3l4SFFVRkhMRU5CUVVFc1EwRkJRVHRCUVVGQkxGTkJRM1pDTzBGQlJVRXNVVUZCUVN4UFFVRlBMRU5CUVVjc1JVRkJRU3hMUVVGQkxFTkJRVUVzUTBGQlFTeERRVUZCTzBGQlFVRXNUMEZEV2p0QlFVRkJMRXRCUTBZN1FVRkJRU3hKUVVOQk8wRkJRVUVzVFVGRFJTeEpRVUZKTEdkQ1FVRnBRaXhEUVVGQkxFZEJRVUU3UVVGQlFTeE5RVU55UWl4SlFVRk5MRVZCUVVFc1MwRkJRVHRCUVVGQkxFMUJRMDRzVjBGQllTeEZRVUZCTEhkQ1FVRkJPMEZCUVVFc1RVRkRZaXhUUVVGQkxFVkJRVmNzUTBGQlF5eExRVUZWTEV0QlFVRTdRVUZEY0VJc1VVRkJTU3hKUVVGQkxFOUJRVThzVlVGQlZTeFJRVUZWTEVWQlFVRTdRVUZETjBJc1ZVRkJUeXhQUVVGQkxFdEJRVUVzUTBGQlFUdEJRVUZCTEZOQlExUTdRVUZGUVN4UlFVRkpMRWxCUVVFc1QwRkJRU3hEUVVGUkxFdEJRVXNzUTBGQlJ5eEZRVUZCTzBGQlEyeENMRlZCUVU4c1QwRkJRU3hMUVVGQkxFTkJRVTBzUzBGQlN5eEhRVUZITEVOQlFVRXNRMEZCUVR0QlFVRkJMRk5CUTNaQ08wRkJSVUVzVVVGQlFTeFBRVUZQTEU5QlFVOHNTMEZCU3l4RFFVRkJMRU5CUVVFN1FVRkJRU3hQUVVOeVFqdEJRVUZCTEV0QlEwWTdRVUZCUVN4SlFVTkJPMEZCUVVFc1RVRkRSU3hKUVVGSkxHZENRVUZwUWl4RFFVRkJMRWxCUVVFN1FVRkJRU3hOUVVOeVFpeEpRVUZOTEVWQlFVRXNUVUZCUVR0QlFVRkJMRTFCUTA0c1YwRkJZU3hGUVVGQkxIbENRVUZCTzBGQlFVRXNUVUZEWWl4VFFVRkJMRVZCUVZjc1EwRkJReXhMUVVGVkxFdEJRVUU3UVVGRGNFSXNVVUZCU1N4SlFVRkJMRTlCUVU4c1ZVRkJWU3hSUVVGVkxFVkJRVUU3UVVGRE4wSXNWVUZCVHl4UFFVRkJMRkZCUVVFc1EwRkJVeXhYUVVGWExFdEJRVXNzUTBGQlFTeERRVUZCTzBGQlFVRXNVMEZEYkVNN1FVRkZRU3hSUVVGSkxFbEJRVUVzVDBGQlFTeERRVUZSTEV0QlFVc3NRMEZCUnl4RlFVRkJPMEZCUTJ4Q0xGVkJRVUVzVDBGQlR5eFJRVUZUTEVOQlFVRXNWVUZCUVN4RFFVRlhMRXRCUVUwc1EwRkJRU3hKUVVGQkxFTkJRVXNzU1VGQlNTeERRVUZETEVOQlFVRXNRMEZCUVR0QlFVRkJMRk5CUXpkRE8wRkJSVUVzVVVGQlFTeFBRVUZQTEZGQlFWTXNRMEZCUVN4VlFVRkJMRU5CUVZjc1RVRkJUeXhEUVVGQkxFdEJRVXNzUTBGQlF5eERRVUZCTEVOQlFVRTdRVUZCUVN4UFFVTXhRenRCUVVGQkxFdEJRMFk3UVVGQlFTeEpRVU5CTzBGQlFVRXNUVUZEUlN4SlFVRkpMR2RDUVVGcFFpeERRVUZCTEVsQlFVRTdRVUZCUVN4TlFVTnlRaXhKUVVGTkxFVkJRVUVzVFVGQlFUdEJRVUZCTEUxQlEwNHNWMEZCWVN4RlFVRkJMSE5DUVVGQk8wRkJRVUVzVFVGRFlpeFRRVUZCTEVWQlFWY3NRMEZCUXl4TFFVRlZMRXRCUVVFN1FVRkRjRUlzVVVGQlNTeEpRVUZCTEU5QlFVOHNWVUZCVlN4UlFVRlZMRVZCUVVFN1FVRkROMElzVlVGQlR5eFBRVUZCTEV0QlFVRXNRMEZCUVR0QlFVRkJMRk5CUTFRN1FVRkRRU3hSUVVGUExFOUJRVUVzU1VGQlFTeERRVUZMTEZWQlFWVXNTMEZCU3l4RFFVRkJMRU5CUVVFN1FVRkJRU3hQUVVNM1FqdEJRVUZCTEV0QlEwWTdRVUZCUVN4SlFVTkJPMEZCUVVFc1RVRkRSU3hKUVVGSkxHZENRVUZwUWl4RFFVRkJMR0ZCUVVFN1FVRkJRU3hOUVVOeVFpeEpRVUZOTEVWQlFVRXNaMEpCUVVFN1FVRkJRU3hOUVVOT0xGZEJRV0VzUlVGQlFTeG5RMEZCUVR0QlFVRkJMRTFCUTJJc1UwRkJRU3hGUVVGWExFTkJRVU1zUzBGQlZTeExRVUZCTzBGQlJYQkNMRkZCUVVrc1NVRkJRU3hQUVVGQkxFTkJRVkVzUzBGQlN5eERRVUZITEVWQlFVRTdRVUZEYkVJc1ZVRkJRU3hQUVVGUExIbENRVUY1UWl4SFFVRk5MRWRCUVVFc1MwRkJRU3hEUVVGTkxFbEJRVXNzUTBGQlFTeEhRVUZITEVsQlFVa3NSMEZCUnl4RFFVRkJMRU5CUVVFN1FVRkJRU3hUUVVNM1JEdEJRVVZCTEZGQlFVRXNUMEZCVHl4NVFrRkJlVUlzUzBGQlN5eERRVUZCTEVOQlFVRTdRVUZCUVN4UFFVTjJRenRCUVVGQkxFdEJRMFk3UVVGQlFTeEpRVU5CTzBGQlFVRXNUVUZEUlN4SlFVRkpMR2RDUVVGcFFpeERRVUZCTEZkQlFVRTdRVUZCUVN4TlFVTnlRaXhKUVVGTkxFVkJRVUVzWTBGQlFUdEJRVUZCTEUxQlEwNHNWMEZCWVN4RlFVRkJMSE5DUVVGQk8wRkJRVUVzVFVGRFlpeFRRVUZCTEVWQlFWY3NRMEZCUXl4TFFVRlZMRXRCUVVFN1FVRkZjRUlzVVVGQlFTeE5RVUZOTEUxQlFWTXNSMEZCUVN4SlFVRkpMRTFCUVU4c1EwRkJRU3hEUVVGQkxFTkJRVUVzUTBGQlFTeEZRVUZMTEVkQlFVY3NRMEZCUVN4RFFVRkJPMEZCUld4RExGRkJRVWtzU1VGQlFTeFBRVUZCTEVOQlFWRXNTMEZCU3l4RFFVRkhMRVZCUVVFN1FVRkRiRUlzVlVGQlFTeFBRVUZQTEVkQlFVa3NRMEZCUVN4TFFVRkJMRVZCUVU4c1EwRkJReXhEUVVGQkxFdEJRV01zUTBGQlNTeERRVUZCTEVWQlFVRXNUMEZCUVN4RFFVRlJMRU5CUVVjc1JVRkJRU3hOUVVGQkxFVkJRVkVzUTBGQlN5eEhRVUZCTEVOQlFVRXNRMEZCUVN4RFFVRkJMRU5CUVVFc1EwRkJTU3hEUVVGRkxFTkJRVUVzU1VGQlFTeERRVUZMTEVkQlFVY3NRMEZCUVN4RFFVRkJPMEZCUVVFc1UwRkROMFU3UVVGRlFTeFJRVUZCTEVsQlFVa3NVMEZCVXl4UFFVRlBMRXRCUVVFc1MwRkJWU3hSUVVGWExFZEJRVUVzUzBGQlFTeEhRVUZSTEU5QlFVOHNTMEZCU3l4RFFVRkJMRU5CUVVFN1FVRkROMFFzVVVGQlFTeFBRVUZQTEVOQlFVa3NRMEZCUVN4RlFVRkJMRTlCUVVFc1EwRkJVU3hOUVVGUkxFVkJRVUVzVFVGQlFTeEZRVUZSTEVOQlFVc3NSMEZCUVN4RFFVRkJMRU5CUVVFc1EwRkJRU3hEUVVGQkxFTkJRVUVzUTBGQlFUdEJRVUZCTEU5QlF6RkRPMEZCUVVFc1MwRkRSanRCUVVGQkxFbEJRMEU3UVVGQlFTeE5RVU5GTEVsQlFVa3NaMEpCUVdsQ0xFTkJRVUVzVjBGQlFUdEJRVUZCTEUxQlEzSkNMRWxCUVUwc1JVRkJRU3hqUVVGQk8wRkJRVUVzVFVGRFRpeFhRVUZoTEVWQlFVRXNjMEpCUVVFN1FVRkJRU3hOUVVOaUxGTkJRVUVzUlVGQlZ5eERRVUZETEV0QlFWVXNTMEZCUVR0QlFVVndRaXhSUVVGQkxFMUJRVTBzVFVGQlV5eEhRVUZCTEVsQlFVa3NUVUZCVHl4RFFVRkJMRWRCUVVFc1JVRkJTeXhIUVVGSExFTkJRVUVzUTBGQlFUdEJRVU5zUXl4UlFVRkpMRWxCUVVFc1QwRkJRU3hEUVVGUkxFdEJRVXNzUTBGQlJ5eEZRVUZCTzBGQlEyeENMRlZCUVVFc1QwRkJUeXhIUVVGSkxFTkJRVUVzUzBGQlFTeEZRVUZQTEVOQlFVTXNRMEZCUVN4TFFVRmpMRU5CUVVrc1EwRkJRU3hGUVVGQkxFOUJRVUVzUTBGQlVTeERRVUZITEVWQlFVRXNUVUZCUVN4RlFVRlJMRXRCUVVzc1EwRkJRU3hEUVVGQkxFTkJRVUVzUTBGQlNTeERRVUZGTEVOQlFVRXNTVUZCUVN4RFFVRkxMRWRCUVVjc1EwRkJRU3hEUVVGQk8wRkJRVUVzVTBGRE4wVTdRVUZGUVN4UlFVRkJMRWxCUVVrc1UwRkJVeXhQUVVGUExFdEJRVUVzUzBGQlZTeFJRVUZYTEVkQlFVRXNTMEZCUVN4SFFVRlJMRTlCUVU4c1MwRkJTeXhEUVVGQkxFTkJRVUU3UVVGRE4wUXNVVUZCUVN4UFFVRlBMRU5CUVVrc1EwRkJRU3hGUVVGQkxFOUJRVUVzUTBGQlVTeE5RVUZSTEVWQlFVRXNUVUZCUVN4RlFVRlJMRXRCUVVzc1EwRkJRU3hEUVVGQkxFTkJRVUVzUTBGQlFTeERRVUZCTzBGQlFVRXNUMEZETVVNN1FVRkJRU3hMUVVOR08wRkJRVUVzU1VGRFFUdEJRVUZCTEUxQlEwVXNTVUZCU1N4blFrRkJhVUlzUTBGQlFTeFRRVUZCTzBGQlFVRXNUVUZEY2tJc1NVRkJUU3hGUVVGQkxGbEJRVUU3UVVGQlFTeE5RVU5PTEZkQlFXRXNSVUZCUVN3MFJVRkJRVHRCUVVGQkxFMUJRMklzVTBGQlZ5eEZRVUZCTEd0Q1FVRkJPMEZCUVVFc1MwRkRZanRCUVVGQkxFbEJRMEU3UVVGQlFTeE5RVU5GTEVsQlFVa3NaMEpCUVdsQ0xFTkJRVUVzU1VGQlFUdEJRVUZCTEUxQlEzSkNMRWxCUVUwc1JVRkJRU3hOUVVGQk8wRkJRVUVzVFVGRFRpeFhRVUZoTEVWQlFVRXNLMEpCUVVFN1FVRkJRU3hOUVVOaUxGTkJRVUVzUlVGQlZ5eERRVUZETEV0QlFVRXNSVUZCVHl4SlFVRlRMRXRCUVVFN1FVRnNUMnhETEZGQlFVRXNTVUZCUVN4RlFVRkJMRU5CUVVFN1FVRnRUMUVzVVVGQlFTeEpRVUZKTEU5QlFWVXNSMEZCUVN4SFFVRkJMRU5CUVVFN1FVRkZaQ3hSUVVGSkxFbEJRVUVzVDBGQlR5eFZRVUZWTEZGQlFWVXNSVUZCUVR0QlFVTTNRaXhWUVVGVkxFOUJRVUVzUjBGQlFTeExRVUZCTEVOQlFVRTdRVUZCUVN4VFFVTmFMRTFCUVVFc1NVRkJWeXhQUVVGUExFdEJRVUVzUzBGQlZTeFJRVUZWTEVWQlFVRTdRVUZEY0VNc1ZVRkJWU3hQUVVGQkxFZEJRVUVzVVVGQlFTeERRVUZUTEU5QlFVOHNSVUZCUlN4RFFVRkJMRU5CUVVFN1FVRkJRU3hUUVVNNVFqdEJRVVZCTEZGQlFVa3NTVUZCUVN4TFFVRkJMRU5CUVUwc1QwRkJUeXhEUVVGSExFVkJRVUU3UVVGRGJFSXNWVUZCVHl4UFFVRkJMRXRCUVVFc1EwRkJRVHRCUVVGQkxGTkJRMVE3UVVGRlFTeFJRVUZOTEUxQlFVRXNSMEZCUVN4SFFVRkJMRU5CUVUwc1JVRkJTeXhIUVVGQkxFbEJRVUVzUTBGQlFTeERRVUZCTEVOQlFVRXNTMEZCVEN4SlFVRlhMRWRCUVVFc1JVRkJRU3hIUVVGQkxFdEJRVUVzUTBGQlFUdEJRVU4yUWl4UlFVRlJMRkZCUVVFc1IwRkJRVHRCUVVGQkxGVkJRMFFzUzBGQlFTeEpRVUZCTzBGQlEwZ3NXVUZCUVN4UFFVRlBMRTlCUVU4c1MwRkJTeXhEUVVGQkxFTkJRVUU3UVVGQlFTeFZRVU5vUWl4TFFVRkJMRk5CUVVFN1FVRkRTQ3haUVVGQkxFOUJRVThzUTBGQlJ5eEZRVUZCTEVsQlFVRXNRMEZCU3l4TFFVRk5MRU5CUVVFc1QwRkJRU3hIUVVGWExFZEJRVWtzUTBGQlFTeERRVUZCTEVOQlFVRXNRMEZCUVR0QlFVRkJMRlZCUTJwRExFdEJRVUVzUzBGQlFUdEJRVU5JTEZsQlFVOHNUMEZCUVN4UlFVRkJMRU5CUVZNc1QwRkJUeXhEUVVGQkxFTkJRVVVzVjBGQldTeEZRVUZCTEVOQlFVRTdRVUZCUVN4VlFVRkJPMEZCUlhKRExGbEJRVUVzU1VGQlFTeERRVUZMTEVsQlFWRXNTVUZCUVN4RlFVRkpMRVZCUVVFc1RVRkJRU3hIUVVGVExFTkJRVWNzUlVGQlFUdEJRVU16UWl4alFVRkJMRTlCUVU4c1UwRkJVeXhQUVVGUExFTkJRVUVzUTBGQlJTeFBRVUZQTEVsQlFVc3NRMEZCUVN4SlFVRkJMRU5CUVVzc1IwRkJSeXhEUVVGRExFTkJRVUVzUTBGQlFUdEJRVUZCTEdGQlEyaEVPMEZCUTBFc1dVRkJRU3hQUVVGUExGRkJRVk1zUTBGQlFTeFBRVUZQTEVOQlFVVXNRMEZCUVN4TlFVRkJMRU5CUVU4c1IwRkJSeXhEUVVGQkxFTkJRVUU3UVVGQlFTeFRRVUZCTzBGQlFVRXNUMEZGZWtNN1FVRkJRU3hMUVVOR08wRkJRVUVzU1VGRFFUdEJRVUZCTEUxQlEwVXNTVUZCU1N4blFrRkJhVUlzUTBGQlFTeEpRVUZCTzBGQlFVRXNUVUZEY2tJc1NVRkJUU3hGUVVGQkxFMUJRVUU3UVVGQlFTeE5RVU5PTEZkQlFXRXNSVUZCUVN3d1JVRkJRVHRCUVVGQkxFMUJRMklzVTBGQlFTeEZRVUZYTEVOQlFVTXNTMEZCVlN4TFFVRkJPMEZCUTNCQ0xGRkJRVUVzU1VGQlNTeFBRVUZSTEVOQlFVRXNTMEZCU3l4RFFVRkxMRWxCUVVFc1MwRkJRU3hEUVVGTkxGTkJRVk1zUTBGQlJ5eEZRVUZCTzBGQlEzUkRMRlZCUVVFc1QwRkJUeXhIUVVGTkxFZEJRVUVzUzBGQlFTeERRVUZOTEVsQlFVc3NRMEZCUVN4SFFVRkhMRU5CUVVrc1IwRkJRU3hIUVVGQkxFTkJRVUU3UVVGQlFTeFRRVU5xUXp0QlFVTkJMRkZCUVVFc1QwRkJUeXhQUVVGUExFdEJRVXNzUTBGQlFTeERRVUZCTzBGQlFVRXNUMEZEY2tJN1FVRkJRU3hMUVVOR08wRkJRVUVzU1VGRFFUdEJRVUZCTEUxQlEwVXNTVUZCU1N4blFrRkJhVUlzUTBGQlFTeEpRVUZCTzBGQlFVRXNUVUZEY2tJc1NVRkJUU3hGUVVGQkxFMUJRVUU3UVVGQlFTeE5RVU5PTEZkQlFXRXNSVUZCUVN3NFJrRkJRVHRCUVVGQkxFMUJRMklzVTBGQlZ5eEZRVUZCTEVOQlFVTXNTMEZCVHl4RlFVRkJMRXRCUVVFc1JVRkJUeXhSUVVGaExFdEJRVUU3UVVGRGNrTXNVVUZCUVN4SlFVRkpMRk5CUVZNc1dVRkJZeXhGUVVGQk8wRkJRM3BDTEZWQlFVRXNUMEZCVHl4VFFVRlRMRmxCUVdFc1JVRkJRU3hEUVVGQk8wRkJRVUVzVTBGREwwSTdRVUZGUVN4UlFVRkJMRTlCUVU4c1QwRkJUeXhMUVVGTExFTkJRVUVzUTBGQlFUdEJRVUZCTEU5QlEzSkNPMEZCUVVFc1MwRkRSanRCUVVGQkxFbEJRMEU3UVVGQlFTeE5RVU5GTEVsQlFVa3NaMEpCUVdsQ0xFTkJRVUVzVlVGQlFUdEJRVUZCTEUxQlEzSkNMRWxCUVUwc1JVRkJRU3hwUWtGQlFUdEJRVUZCTEUxQlEwNHNWMEZEUlN4RlFVRkJMRzlJUVVGQk8wRkJRVUVzVFVGRFJpeFRRVUZYTEVWQlFVRXNRMEZCUXl4TFFVRlBMRVZCUVVFc1MwRkJRU3hGUVVGUExGRkJRV0VzUzBGQlFUdEJRVU55UXl4UlFVRkJMRWxCUVVrc1UwRkJVeXhQUVVGVExFVkJRVUU3UVVGRGNFSXNWVUZCVFN4TlFVRkJMRkZCUVVFc1IwRkJWeXhSUVVGVExFTkJRVUVzVDBGQlFTeERRVUZSTEZkQlFWa3NSVUZCUVN4RFFVRkJPMEZCUXpsRExGVkJRVThzVDBGQlFTeFBRVUZCTEVOQlFWRXNXVUZCV1N4UlFVRlJMRU5CUVVFc1EwRkJRVHRCUVVGQkxGTkJRM0pETzBGQlJVRXNVVUZCU1N4SlFVRkJMRXRCUVVFc1EwRkJUU3hQUVVGUkxFTkJRVUVzUzBGQlN5eERRVUZITEVWQlFVRTdRVUZEZUVJc1ZVRkJRU3hQUVVGUExFdEJRVTBzUTBGQlFTeEhRVUZCTEVOQlFVa3NRMEZCUXl4RFFVRkJMRXRCUVUwc2IwSkJRWEZDTEVOQlFVRXNVVUZCUVN4RFFVRlRMRXRCUVUwc1EwRkJRU3hKUVVGQkxFVkJRVTBzUTBGQlF5eERRVUZETEVOQlFVVXNRMEZCUVN4SlFVRkJMRU5CUVVzc1IwRkJSeXhEUVVGQkxFTkJRVUU3UVVGQlFTeFRRVU5vUmp0QlFVVkJMRkZCUVVFc1QwRkJUeXh2UWtGQmNVSXNRMEZCUVN4UlFVRkJMRU5CUVZNc1MwRkJUU3hEUVVGQkxFbEJRVUVzUlVGQlRTeExRVUZMTEVOQlFVRXNRMEZCUVR0QlFVRkJMRTlCUTNoRU8wRkJRVUVzUzBGRFJqdEJRVUZCTEVsQlEwRTdRVUZCUVN4TlFVTkZMRWxCUVVrc1owSkJRV2xDTEVOQlFVRXNVMEZCUVR0QlFVRkJMRTFCUTNKQ0xFbEJRVTBzUlVGQlFTeDFRa0ZCUVR0QlFVRkJMRTFCUTA0c1YwRkJZU3hGUVVGQkxHMUZRVUZCTzBGQlFVRXNUVUZEWWl4VFFVRkJMRVZCUVZjc1EwRkJReXhMUVVGNVFpeExRVUZCTzBGQlEyNURMRkZCUVVrc1NVRkJRU3hQUVVGQkxFTkJRVkVzUzBGQlN5eERRVUZITEVWQlFVRTdRVUZEYkVJc1ZVRkJRU3hQUVVGUExHZENRVUZuUWl4SFFVRk5MRWRCUVVFc1MwRkJRU3hEUVVGTkxFbEJRVXNzUTBGQlFTeEhRVUZITEVsQlFVa3NSMEZCUnl4RFFVRkJMRU5CUVVFN1FVRkJRU3hUUVVOd1JEdEJRVVZCTEZGQlFVRXNUMEZCVHl4blFrRkJaMElzUzBGQlN5eERRVUZCTEVOQlFVRTdRVUZCUVN4UFFVTTVRanRCUVVGQkxFdEJRMFk3UVVGQlFTeEhRVU5HTEVOQlFVRTdRVUZGUVN4RlFVRlBMRTlCUVVFc1QwRkJRU3hEUVVGQk8wRkJRMVFzUTBGQlF5eEZRVUZCTzBGQlJVUXNVMEZCVXl4aFFVRmhMRXRCUVdVc1JVRkJRVHRCUVVOdVF5eEZRVUZCTEVsQlFVa3NTMEZCVFN4RFFVRkJMRU5CUVVNc1MwRkJTeXhEUVVGQkxFdEJRVTBzUzBGQlR5eEZRVUZCTzBGQlF6TkNMRWxCUVU4c1QwRkJRU3hMUVVGQkxFTkJRVUU3UVVGQlFTeEhRVU5VTzBGQlJVRXNSVUZCVHl4UFFVRkJMRXRCUVVFc1EwRkJUU3hQUVVGUkxFTkJRVUVzYVVSQlFVRXNSVUZCYlVRc1RVRkJUU3hEUVVGQkxFTkJRVUU3UVVGRGFFWXNRMEZCUVR0QlFVOUJMRk5CUVZNc2VVSkJRWGxDTEVkQlFUQkNMRVZCUVVFN1FVRkRNVVFzUlVGQlNTeEpRVUZCTEU5QlFVOHNVVUZCVVN4UlFVRlZMRVZCUVVFN1FVRkRNMElzU1VGQlFTeEhRVUZCTEVkQlFVMHNUMEZCVHl4SFFVRkhMRU5CUVVFc1EwRkJRVHRCUVVGQkxFZEJRMnhDTzBGQlJVRXNSVUZCVHl4UFFVRkJMQ3RDUVVGQkxFTkJRV2RETEd0Q1FVRnRRaXhEUVVGQkxFZEJRVWNzUTBGQlF5eERRVUZCTEVOQlFVRTdRVUZEYUVVc1EwRkJRVHRCUVVWQkxFMUJRVTBzWlVGQlFTeEhRVUZyUWl4RFFVRkRMRWRCUVhGRExFdEJRVUVzSzBKQlFVRXNRMEZCWjBNc1ZVRkJWU3hOUVVGUExFTkJRVUVzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUVN4RFFVRkJPMEZCUlhCSUxFMUJRVTBzYTBOQlFXdERMRU5CUVVNc1MwRkJRU3hMUVVOMlF5eE5RVUZOTEU5QlFWRXNRMEZCUVN4VlFVRkJMRVZCUVZrc1EwRkJReXhEUVVGTkxFdEJRVUU3UVVGREwwSXNSVUZCVHl4UFFVRkJMRWRCUVVFc1IwRkJUU3hGUVVGRkxGVkJRVmNzUTBGQlFTeERRVUZETEVWQlFVVXNVVUZCVXl4RFFVRkJMRVZCUVVVc1JVRkJSU3hYUVVGWkxFVkJRVUVzUTBGQlFUdEJRVU40UkN4RFFVRkRMRU5CUVVFc1EwRkJRVHRCUVVWSUxGTkJRVk1zYjBKQlFVRXNRMEZCY1VJc1RVRkJZeXhMUVVGdlF5eEZRVUZCTzBGQlF6bEZMRVZCUVU4c1QwRkJRU3hEUVVGQkxFbEJRVUVzUlVGQlR5eEpRVUZSTEVOQlFVRXNRMEZCUVN4RlFVRkJMSGRDUVVGQkxFTkJRWGxDTEV0QlFVc3NRMEZCUVN4RFFVRkJMRU5CUVVFc1EwRkJRVHRCUVVOMFJDeERRVUZCTzBGQlRVRXNUVUZCVFN4alFVRjVReXhIUVVGQk8wRkJRVUVzUlVGRE4wTXNSMEZCU3l4RlFVRkJMRWxCUVVFN1FVRkJRU3hGUVVOTUxFZEJRVXNzUlVGQlFTeExRVUZCTzBGQlExQXNRMEZCUVN4RFFVRkJPMEZCUlVFc1UwRkJVeXh0UWtGQmJVSXNTMEZCYzBJc1JVRkJRVHRCUVVWb1JDeEZRVUZCTEUxQlFVMHNUVUZCVXl4SFFVRkJMRWxCUVVrc1RVRkJUeXhEUVVGQkxFTkJRVUVzUjBGQlFTeERRVUZCTEVWQlFVOHNSMEZCUnl4RFFVRkJMRU5CUVVFN1FVRkZjRU1zUlVGQlNTeEpRVUZCTEU5QlFVRXNRMEZCVVN4TFFVRkxMRU5CUVVjc1JVRkJRVHRCUVVOc1FpeEpRVUZQTEU5QlFVRXNSMEZCUVN4RFFVRkpMRTlCUVU4c1EwRkJReXhEUVVGQkxFdEJRV01zU1VGQlNTeFBRVUZSTEVOQlFVRXNRMEZCUVN4RlFVRkhMRTFCUVZFc1JVRkJRU3hEUVVGRExFdEJRVThzUzBGQlFUdEJRWFpYY0VVc1RVRkJRU3hKUVVGQkxFVkJRVUVzUTBGQlFUdEJRWFZYZFVVc1RVRkJRU3hQUVVGQkxFTkJRVUVzUlVGQlFTeEhRVUZCTEdOQlFVRXNRMEZCWlN4WFFVRm1MRWxCUVhsQ0xFZEJRVUVzUlVGQlFTeEhRVUZCTEVWQlFVRXNRMEZCUVR0QlFVRkJMRXRCUVVVc1EwRkJRU3hEUVVGQkxFTkJRVUVzUTBGQlNTeERRVUZGTEVOQlFVRXNTVUZCUVN4RFFVRkxMRWRCUVVjc1EwRkJRU3hEUVVGQk8wRkJRVUVzUjBGRE9VYzdRVUZGUVN4RlFVRkJMRWxCUVVrc1UwRkJVeXhQUVVGUExFdEJRVUVzUzBGQlZTeFJRVUZYTEVkQlFVRXNTMEZCUVN4SFFVRlJMRTlCUVU4c1MwRkJTeXhEUVVGQkxFTkJRVUU3UVVGRE4wUXNSVUZCUVN4UFFVRlBMRU5CUVVrc1EwRkJRU3hGUVVGQkxFOUJRVUVzUTBGQlVTeE5RVUZSTEVWQlFVRXNUVUZCUVN4RlFVRlJMRU5CUVVNc1MwRkJUeXhMUVVGQk8wRkJNMWMzUXl4SlFVRkJMRWxCUVVFc1JVRkJRU3hEUVVGQk8wRkJNbGRuUkN4SlFVRkJMRTlCUVVFc1EwRkJRU3hGUVVGQkxFZEJRVUVzWTBGQlFTeERRVUZsTEZkQlFXWXNTVUZCZVVJc1IwRkJRU3hGUVVGQkxFZEJRVUVzUlVGQlFTeERRVUZCTzBGQlFVRXNSMEZCUlN4RFFVRkJMRU5CUVVFc1EwRkJRU3hEUVVGQkxFTkJRVUU3UVVGRE0wVTdPenM3SW4wPVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUErQmEsTUFBQSxjQUFBLEdBQWlCLElBQUksUUFBQSxDQUE2QixNQUFNO0FBQ25FLEVBQUEsTUFBTSxPQUFnQyxHQUFBO0FBQ3BDLElBQUE7QUFDRSxNQUFBLEVBQUEsRUFBSSxnQkFBaUIsQ0FBQSxNQUFBO01BQ3JCLElBQU0sRUFBQSxRQUFBO01BQ04sV0FBYSxFQUFBLGdGQUFBO0FBQ2IsTUFBQSxTQUFBLEVBQVcsQ0FBQyxLQUFVLEtBQUE7QUFDaEIsUUFBQSxJQUFBLE9BQU8sVUFBVSxRQUFVLEVBQUE7QUFDN0IsVUFBQSxPQUFPLGFBQWEsS0FBSyxDQUFBLENBQUE7QUFBQSxTQUFBO0FBR3ZCLFFBQUEsSUFBQSxLQUFBLENBQU0sT0FBUSxDQUFBLEtBQUssQ0FBRyxFQUFBO0FBQ3BCLFVBQUEsSUFBQSxLQUFBLENBQU0sV0FBVyxDQUFHLEVBQUE7QUFDZixZQUFBLE9BQUEsV0FBQSxDQUFBO0FBQUEsV0FBQTtBQUVULFVBQUEsTUFBTSxZQUFlLEdBQUEsR0FBQSxDQUFJLEtBQU8sRUFBQSxDQUFDLEdBQWdCLEtBQUE7QUFDeEMsWUFBQSxPQUFBLEdBQUEsR0FBTSxZQUFhLENBQUEsR0FBRyxDQUFJLEdBQUEsR0FBQSxDQUFBO1dBQ2xDLENBQUEsQ0FBQTtBQUNELFVBQUEsT0FBTyxHQUFNLEdBQUEsWUFBQSxDQUFhLElBQUssQ0FBQSxNQUFNLENBQUksR0FBQSxHQUFBLENBQUE7U0FDcEMsTUFBQTtBQUNFLFVBQUEsT0FBQSxZQUFBLENBQWEsR0FBRyxLQUFPLENBQUEsQ0FBQSxDQUFBLENBQUE7QUFBQSxTQUFBO0FBQ2hDLE9BQUE7QUFDRixLQUFBO0FBRUYsSUFBQTtBQUNFLE1BQUEsRUFBQSxFQUFJLGdCQUFpQixDQUFBLEdBQUE7TUFDckIsSUFBTSxFQUFBLEtBQUE7TUFDTixXQUFhLEVBQUEsa0JBQUE7TUFDYixTQUFXLEVBQUEsQ0FBQyxLQUFVLEtBQUEsTUFBQSxDQUFPLEtBQUssQ0FBQTtBQUFBLEtBQUE7QUFFcEMsSUFBQTtBQUNFLE1BQUEsRUFBQSxFQUFJLGdCQUFpQixDQUFBLEtBQUE7TUFDckIsSUFBTSxFQUFBLE9BQUE7TUFDTixXQUFhLEVBQUEsNkZBQUE7QUFDYixNQUFBLFNBQUEsRUFBVyxDQUFDLEtBQVUsS0FBQTtBQUNoQixRQUFBLElBQUEsT0FBTyxVQUFVLFFBQVUsRUFBQTtBQUM3QixVQUFBLE9BQU8sWUFBWSxLQUFLLENBQUEsQ0FBQTtBQUFBLFNBQUE7QUFHdEIsUUFBQSxJQUFBLEtBQUEsQ0FBTSxPQUFRLENBQUEsS0FBSyxDQUFHLEVBQUE7QUFDeEIsVUFBQSxNQUFNLGFBQWdCLEdBQUEsS0FBQSxDQUFNLEdBQUksQ0FBQSxDQUFDLElBQVMsS0FBQTtBQUNwQyxZQUFBLElBQUEsT0FBTyxTQUFTLFFBQVUsRUFBQTtBQUM1QixjQUFBLE9BQU8sWUFBWSxJQUFJLENBQUEsQ0FBQTthQUNsQixNQUFBO0FBQ0UsY0FBQSxPQUFBLFdBQUEsQ0FBWSxNQUFPLENBQUEsSUFBSSxDQUFDLENBQUEsQ0FBQTtBQUFBLGFBQUE7V0FFbEMsQ0FBQSxDQUFBO0FBRUcsVUFBQSxJQUFBLGFBQUEsQ0FBYyxXQUFXLENBQUcsRUFBQTtBQUM5QixZQUFBLE9BQU8sYUFBYyxDQUFBLENBQUEsQ0FBQSxDQUFBO0FBQUEsV0FBQTtBQUd2QixVQUFBLE9BQU8sR0FBTSxHQUFBLGFBQUEsQ0FBYyxJQUFLLENBQUEsR0FBRyxDQUFJLEdBQUEsR0FBQSxDQUFBO0FBQUEsU0FBQTtBQUdsQyxRQUFBLE9BQUEsV0FBQSxDQUFZLEdBQUcsS0FBTyxDQUFBLENBQUEsQ0FBQSxDQUFBO0FBQUEsT0FBQTtBQUMvQixLQUFBO0FBRUYsSUFBQTtBQUNFLE1BQUEsRUFBQSxFQUFJLGdCQUFpQixDQUFBLElBQUE7TUFDckIsSUFBTSxFQUFBLE1BQUE7TUFDTixXQUFhLEVBQUEscUNBQUE7QUFDYixNQUFBLFNBQUEsRUFBVyxDQUFDLEtBQVUsS0FBQTtBQUNoQixRQUFBLElBQUEsT0FBTyxVQUFVLFFBQVUsRUFBQTtBQUN0QixVQUFBLE9BQUEsS0FBQSxDQUFBO0FBQUEsU0FBQTtBQUdMLFFBQUEsSUFBQSxLQUFBLENBQU0sT0FBUSxDQUFBLEtBQUssQ0FBRyxFQUFBO0FBQ2pCLFVBQUEsT0FBQSxLQUFBLENBQU0sS0FBSyxHQUFHLENBQUEsQ0FBQTtBQUFBLFNBQUE7QUFHdkIsUUFBQSxPQUFPLENBQUcsRUFBQSxLQUFBLENBQUEsQ0FBQSxDQUFBO0FBQUEsT0FBQTtBQUNaLEtBQUE7QUFFRixJQUFBO0FBQ0UsTUFBQSxFQUFBLEVBQUksZ0JBQWlCLENBQUEsV0FBQTtNQUNyQixJQUFNLEVBQUEsYUFBQTtNQUNOLFdBQWEsRUFBQSxtREFBQTtNQUNiLFNBQVcsRUFBQSxDQUFDLEtBQU8sRUFBQSxJQUFBLEVBQU0sUUFBYSxLQUFBO0FBQ2hDLFFBQUEsSUFBQSxPQUFPLFVBQVUsUUFBVSxFQUFBO0FBQ3RCLFVBQUEsT0FBQSxLQUFBLENBQUE7QUFBQSxTQUFBO0FBR0wsUUFBQSxJQUFBLEtBQUEsQ0FBTSxPQUFRLENBQUEsS0FBSyxDQUFHLEVBQUE7QUFDeEIsVUFBQSxLQUFBLEdBQVEsR0FBSSxDQUFBLEtBQUEsRUFBTyxDQUFDLEdBQUEsRUFBYSxLQUFrQixLQUFBO0FBQ2pELFlBQUEsSUFBSSxVQUFVLENBQUcsRUFBQTtBQUNSLGNBQUEsT0FBQSxRQUFBLENBQVMsS0FBTSxDQUFBLElBQUEsR0FBTyxHQUFNLEdBQUEsR0FBQSxDQUFBO2FBQzlCLE1BQUE7QUFDRSxjQUFBLE9BQUEsR0FBQSxDQUFBO0FBQUEsYUFBQTtXQUVWLENBQUEsQ0FBQTtBQUVNLFVBQUEsT0FBQSxLQUFBLENBQU0sS0FBSyxHQUFHLENBQUEsQ0FBQTtBQUFBLFNBQUE7QUFHdkIsUUFBQSxPQUFPLENBQUcsRUFBQSxLQUFBLENBQUEsQ0FBQSxDQUFBO0FBQUEsT0FBQTtBQUNaLEtBQUE7QUFFRixJQUFBO0FBQ0UsTUFBQSxFQUFBLEVBQUksZ0JBQWlCLENBQUEsR0FBQTtNQUNyQixJQUFNLEVBQUEsS0FBQTtNQUNOLFdBQWEsRUFBQSx3QkFBQTtBQUNiLE1BQUEsU0FBQSxFQUFXLENBQUMsS0FBVSxLQUFBO0FBQ2hCLFFBQUEsSUFBQSxPQUFPLFVBQVUsUUFBVSxFQUFBO0FBQ3RCLFVBQUEsT0FBQSxLQUFBLENBQUE7QUFBQSxTQUFBO0FBR0wsUUFBQSxJQUFBLE9BQUEsQ0FBUSxLQUFLLENBQUcsRUFBQTtBQUNYLFVBQUEsT0FBQSxLQUFBLENBQU0sS0FBSyxHQUFHLENBQUEsQ0FBQTtBQUFBLFNBQUE7QUFHdkIsUUFBQSxPQUFPLE9BQU8sS0FBSyxDQUFBLENBQUE7QUFBQSxPQUFBO0FBQ3JCLEtBQUE7QUFFRixJQUFBO0FBQ0UsTUFBQSxFQUFBLEVBQUksZ0JBQWlCLENBQUEsSUFBQTtNQUNyQixJQUFNLEVBQUEsTUFBQTtNQUNOLFdBQWEsRUFBQSx5QkFBQTtBQUNiLE1BQUEsU0FBQSxFQUFXLENBQUMsS0FBVSxLQUFBO0FBQ2hCLFFBQUEsSUFBQSxPQUFPLFVBQVUsUUFBVSxFQUFBO0FBQ3RCLFVBQUEsT0FBQSxRQUFBLENBQVMsV0FBVyxLQUFLLENBQUEsQ0FBQTtBQUFBLFNBQUE7QUFHOUIsUUFBQSxJQUFBLE9BQUEsQ0FBUSxLQUFLLENBQUcsRUFBQTtBQUNsQixVQUFBLE9BQU8sUUFBUyxDQUFBLFVBQUEsQ0FBVyxLQUFNLENBQUEsSUFBQSxDQUFLLElBQUksQ0FBQyxDQUFBLENBQUE7QUFBQSxTQUFBO0FBRzdDLFFBQUEsT0FBTyxRQUFTLENBQUEsVUFBQSxDQUFXLE1BQU8sQ0FBQSxLQUFLLENBQUMsQ0FBQSxDQUFBO0FBQUEsT0FBQTtBQUMxQyxLQUFBO0FBRUYsSUFBQTtBQUNFLE1BQUEsRUFBQSxFQUFJLGdCQUFpQixDQUFBLElBQUE7TUFDckIsSUFBTSxFQUFBLE1BQUE7TUFDTixXQUFhLEVBQUEsc0JBQUE7QUFDYixNQUFBLFNBQUEsRUFBVyxDQUFDLEtBQVUsS0FBQTtBQUNoQixRQUFBLElBQUEsT0FBTyxVQUFVLFFBQVUsRUFBQTtBQUN0QixVQUFBLE9BQUEsS0FBQSxDQUFBO0FBQUEsU0FBQTtBQUVGLFFBQUEsT0FBQSxJQUFBLENBQUssVUFBVSxLQUFLLENBQUEsQ0FBQTtBQUFBLE9BQUE7QUFDN0IsS0FBQTtBQUVGLElBQUE7QUFDRSxNQUFBLEVBQUEsRUFBSSxnQkFBaUIsQ0FBQSxhQUFBO01BQ3JCLElBQU0sRUFBQSxnQkFBQTtNQUNOLFdBQWEsRUFBQSxnQ0FBQTtBQUNiLE1BQUEsU0FBQSxFQUFXLENBQUMsS0FBVSxLQUFBO0FBRWhCLFFBQUEsSUFBQSxPQUFBLENBQVEsS0FBSyxDQUFHLEVBQUE7QUFDbEIsVUFBQSxPQUFPLHlCQUF5QixHQUFNLEdBQUEsS0FBQSxDQUFNLElBQUssQ0FBQSxHQUFHLElBQUksR0FBRyxDQUFBLENBQUE7QUFBQSxTQUFBO0FBRzdELFFBQUEsT0FBTyx5QkFBeUIsS0FBSyxDQUFBLENBQUE7QUFBQSxPQUFBO0FBQ3ZDLEtBQUE7QUFFRixJQUFBO0FBQ0UsTUFBQSxFQUFBLEVBQUksZ0JBQWlCLENBQUEsV0FBQTtNQUNyQixJQUFNLEVBQUEsY0FBQTtNQUNOLFdBQWEsRUFBQSxzQkFBQTtBQUNiLE1BQUEsU0FBQSxFQUFXLENBQUMsS0FBVSxLQUFBO0FBRXBCLFFBQUEsTUFBTSxNQUFTLEdBQUEsSUFBSSxNQUFPLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBSyxHQUFHLENBQUEsQ0FBQTtBQUU5QixRQUFBLElBQUEsT0FBQSxDQUFRLEtBQUssQ0FBRyxFQUFBO0FBQ2xCLFVBQUEsT0FBTyxHQUFJLENBQUEsS0FBQSxFQUFPLENBQUMsQ0FBQSxLQUFjLENBQUksQ0FBQSxFQUFBLE9BQUEsQ0FBUSxDQUFHLEVBQUEsTUFBQSxFQUFRLENBQUssR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUksQ0FBRSxDQUFBLElBQUEsQ0FBSyxHQUFHLENBQUEsQ0FBQTtBQUFBLFNBQUE7QUFHN0UsUUFBQSxJQUFJLFNBQVMsT0FBTyxLQUFBLEtBQVUsUUFBVyxHQUFBLEtBQUEsR0FBUSxPQUFPLEtBQUssQ0FBQSxDQUFBO0FBQzdELFFBQUEsT0FBTyxDQUFJLENBQUEsRUFBQSxPQUFBLENBQVEsTUFBUSxFQUFBLE1BQUEsRUFBUSxDQUFLLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUE7QUFBQSxPQUFBO0FBQzFDLEtBQUE7QUFFRixJQUFBO0FBQ0UsTUFBQSxFQUFBLEVBQUksZ0JBQWlCLENBQUEsV0FBQTtNQUNyQixJQUFNLEVBQUEsY0FBQTtNQUNOLFdBQWEsRUFBQSxzQkFBQTtBQUNiLE1BQUEsU0FBQSxFQUFXLENBQUMsS0FBVSxLQUFBO0FBRXBCLFFBQUEsTUFBTSxNQUFTLEdBQUEsSUFBSSxNQUFPLENBQUEsR0FBQSxFQUFLLEdBQUcsQ0FBQSxDQUFBO0FBQzlCLFFBQUEsSUFBQSxPQUFBLENBQVEsS0FBSyxDQUFHLEVBQUE7QUFDbEIsVUFBQSxPQUFPLEdBQUksQ0FBQSxLQUFBLEVBQU8sQ0FBQyxDQUFBLEtBQWMsQ0FBSSxDQUFBLEVBQUEsT0FBQSxDQUFRLENBQUcsRUFBQSxNQUFBLEVBQVEsS0FBSyxDQUFBLENBQUEsQ0FBQSxDQUFJLENBQUUsQ0FBQSxJQUFBLENBQUssR0FBRyxDQUFBLENBQUE7QUFBQSxTQUFBO0FBRzdFLFFBQUEsSUFBSSxTQUFTLE9BQU8sS0FBQSxLQUFVLFFBQVcsR0FBQSxLQUFBLEdBQVEsT0FBTyxLQUFLLENBQUEsQ0FBQTtBQUM3RCxRQUFBLE9BQU8sQ0FBSSxDQUFBLEVBQUEsT0FBQSxDQUFRLE1BQVEsRUFBQSxNQUFBLEVBQVEsS0FBSyxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUE7QUFBQSxPQUFBO0FBQzFDLEtBQUE7QUFFRixJQUFBO0FBQ0UsTUFBQSxFQUFBLEVBQUksZ0JBQWlCLENBQUEsU0FBQTtNQUNyQixJQUFNLEVBQUEsWUFBQTtNQUNOLFdBQWEsRUFBQSw0RUFBQTtNQUNiLFNBQVcsRUFBQSxrQkFBQTtBQUFBLEtBQUE7QUFFYixJQUFBO0FBQ0UsTUFBQSxFQUFBLEVBQUksZ0JBQWlCLENBQUEsSUFBQTtNQUNyQixJQUFNLEVBQUEsTUFBQTtNQUNOLFdBQWEsRUFBQSwrQkFBQTtNQUNiLFNBQVcsRUFBQSxDQUFDLE9BQU8sSUFBUyxLQUFBO0FBbE9sQyxRQUFBLElBQUEsRUFBQSxDQUFBO0FBbU9RLFFBQUEsSUFBSSxPQUFVLEdBQUEsR0FBQSxDQUFBO0FBRVYsUUFBQSxJQUFBLE9BQU8sVUFBVSxRQUFVLEVBQUE7QUFDbkIsVUFBQSxPQUFBLEdBQUEsS0FBQSxDQUFBO1NBQ0QsTUFBQSxJQUFBLE9BQU8sVUFBVSxRQUFVLEVBQUE7QUFDMUIsVUFBQSxPQUFBLEdBQUEsUUFBQSxDQUFTLE9BQU8sRUFBRSxDQUFBLENBQUE7QUFBQSxTQUFBO0FBRzFCLFFBQUEsSUFBQSxLQUFBLENBQU0sT0FBTyxDQUFHLEVBQUE7QUFDWCxVQUFBLE9BQUEsS0FBQSxDQUFBO0FBQUEsU0FBQTtBQUdILFFBQUEsTUFBQSxHQUFNLEdBQUEsQ0FBQSxFQUFBLEdBQUssSUFBQSxDQUFBLENBQUEsQ0FBQSxLQUFMLE9BQVcsRUFBQSxHQUFBLEtBQUEsQ0FBQTtBQUNmLFFBQUEsUUFBQSxHQUFBO0FBQ0QsVUFBQSxLQUFBLElBQUE7QUFDSCxZQUFBLE9BQU8sT0FBTyxLQUFLLENBQUEsQ0FBQTtBQUNoQixVQUFBLEtBQUEsU0FBQTtBQUNILFlBQUEsT0FBTyxDQUFHLEVBQUEsSUFBQSxDQUFLLEtBQU0sQ0FBQSxPQUFBLEdBQVcsR0FBSSxDQUFBLENBQUEsQ0FBQSxDQUFBO0FBQ2pDLFVBQUEsS0FBQSxLQUFBO0FBQ0ksWUFBQSxPQUFBLFFBQUEsQ0FBUyxPQUFPLENBQUEsQ0FBRSxXQUFZLEVBQUEsQ0FBQTs7QUFFckMsWUFBQSxJQUFBLENBQUssSUFBUSxJQUFBLEVBQUksRUFBQSxNQUFBLEdBQVMsQ0FBRyxFQUFBO0FBQzNCLGNBQUEsT0FBTyxTQUFTLE9BQU8sQ0FBQSxDQUFFLE9BQU8sSUFBSyxDQUFBLElBQUEsQ0FBSyxHQUFHLENBQUMsQ0FBQSxDQUFBO0FBQUEsYUFBQTtBQUVoRCxZQUFBLE9BQU8sUUFBUyxDQUFBLE9BQU8sQ0FBRSxDQUFBLE1BQUEsQ0FBTyxHQUFHLENBQUEsQ0FBQTs7QUFBQSxPQUFBO0FBRXpDLEtBQUE7QUFFRixJQUFBO0FBQ0UsTUFBQSxFQUFBLEVBQUksZ0JBQWlCLENBQUEsSUFBQTtNQUNyQixJQUFNLEVBQUEsTUFBQTtNQUNOLFdBQWEsRUFBQSwwRUFBQTtBQUNiLE1BQUEsU0FBQSxFQUFXLENBQUMsS0FBVSxLQUFBO0FBQ3BCLFFBQUEsSUFBSSxPQUFRLENBQUEsS0FBSyxDQUFLLElBQUEsS0FBQSxDQUFNLFNBQVMsQ0FBRyxFQUFBO0FBQ3RDLFVBQUEsT0FBTyxHQUFNLEdBQUEsS0FBQSxDQUFNLElBQUssQ0FBQSxHQUFHLENBQUksR0FBQSxHQUFBLENBQUE7QUFBQSxTQUFBO0FBRWpDLFFBQUEsT0FBTyxPQUFPLEtBQUssQ0FBQSxDQUFBO0FBQUEsT0FBQTtBQUNyQixLQUFBO0FBRUYsSUFBQTtBQUNFLE1BQUEsRUFBQSxFQUFJLGdCQUFpQixDQUFBLElBQUE7TUFDckIsSUFBTSxFQUFBLE1BQUE7TUFDTixXQUFhLEVBQUEsOEZBQUE7TUFDYixTQUFXLEVBQUEsQ0FBQyxLQUFPLEVBQUEsS0FBQSxFQUFPLFFBQWEsS0FBQTtBQUNyQyxRQUFBLElBQUksU0FBUyxZQUFjLEVBQUE7QUFDekIsVUFBQSxPQUFPLFNBQVMsWUFBYSxFQUFBLENBQUE7QUFBQSxTQUFBO0FBRy9CLFFBQUEsT0FBTyxPQUFPLEtBQUssQ0FBQSxDQUFBO0FBQUEsT0FBQTtBQUNyQixLQUFBO0FBRUYsSUFBQTtBQUNFLE1BQUEsRUFBQSxFQUFJLGdCQUFpQixDQUFBLFVBQUE7TUFDckIsSUFBTSxFQUFBLGlCQUFBO01BQ04sV0FDRSxFQUFBLG9IQUFBO01BQ0YsU0FBVyxFQUFBLENBQUMsS0FBTyxFQUFBLEtBQUEsRUFBTyxRQUFhLEtBQUE7QUFDckMsUUFBQSxJQUFJLFNBQVMsT0FBUyxFQUFBO0FBQ2QsVUFBQSxNQUFBLFFBQUEsR0FBVyxRQUFTLENBQUEsT0FBQSxDQUFRLFdBQVksRUFBQSxDQUFBO0FBQ3ZDLFVBQUEsT0FBQSxPQUFBLENBQVEsWUFBWSxRQUFRLENBQUEsQ0FBQTtBQUFBLFNBQUE7QUFHakMsUUFBQSxJQUFBLEtBQUEsQ0FBTSxPQUFRLENBQUEsS0FBSyxDQUFHLEVBQUE7QUFDeEIsVUFBQSxPQUFPLEtBQU0sQ0FBQSxHQUFBLENBQUksQ0FBQyxDQUFBLEtBQU0sb0JBQXFCLENBQUEsUUFBQSxDQUFTLEtBQU0sQ0FBQSxJQUFBLEVBQU0sQ0FBQyxDQUFDLENBQUUsQ0FBQSxJQUFBLENBQUssR0FBRyxDQUFBLENBQUE7QUFBQSxTQUFBO0FBR2hGLFFBQUEsT0FBTyxvQkFBcUIsQ0FBQSxRQUFBLENBQVMsS0FBTSxDQUFBLElBQUEsRUFBTSxLQUFLLENBQUEsQ0FBQTtBQUFBLE9BQUE7QUFDeEQsS0FBQTtBQUVGLElBQUE7QUFDRSxNQUFBLEVBQUEsRUFBSSxnQkFBaUIsQ0FBQSxTQUFBO01BQ3JCLElBQU0sRUFBQSx1QkFBQTtNQUNOLFdBQWEsRUFBQSxtRUFBQTtBQUNiLE1BQUEsU0FBQSxFQUFXLENBQUMsS0FBeUIsS0FBQTtBQUMvQixRQUFBLElBQUEsT0FBQSxDQUFRLEtBQUssQ0FBRyxFQUFBO0FBQ2xCLFVBQUEsT0FBTyxnQkFBZ0IsR0FBTSxHQUFBLEtBQUEsQ0FBTSxJQUFLLENBQUEsR0FBRyxJQUFJLEdBQUcsQ0FBQSxDQUFBO0FBQUEsU0FBQTtBQUdwRCxRQUFBLE9BQU8sZ0JBQWdCLEtBQUssQ0FBQSxDQUFBO0FBQUEsT0FBQTtBQUM5QixLQUFBO0FBQ0YsR0FBQSxDQUFBO0FBR0ssRUFBQSxPQUFBLE9BQUEsQ0FBQTtBQUNULENBQUMsRUFBQTtBQUVELFNBQVMsYUFBYSxLQUFlLEVBQUE7QUFDbkMsRUFBQSxJQUFJLEtBQU0sQ0FBQSxDQUFDLEtBQUssQ0FBQSxLQUFNLEtBQU8sRUFBQTtBQUNwQixJQUFBLE9BQUEsS0FBQSxDQUFBO0FBQUEsR0FBQTtBQUdGLEVBQUEsT0FBQSxLQUFBLENBQU0sT0FBUSxDQUFBLGlEQUFBLEVBQW1ELE1BQU0sQ0FBQSxDQUFBO0FBQ2hGLENBQUE7QUFPQSxTQUFTLHlCQUF5QixHQUEwQixFQUFBO0FBQ3RELEVBQUEsSUFBQSxPQUFPLFFBQVEsUUFBVSxFQUFBO0FBQzNCLElBQUEsR0FBQSxHQUFNLE9BQU8sR0FBRyxDQUFBLENBQUE7QUFBQSxHQUFBO0FBR1gsRUFBQSxPQUFBLCtCQUFBLENBQWdDLGtCQUFtQixDQUFBLEdBQUcsQ0FBQyxDQUFBLENBQUE7QUFDaEUsQ0FBQTtBQUVBLE1BQU0sZUFBQSxHQUFrQixDQUFDLEdBQXFDLEtBQUEsK0JBQUEsQ0FBZ0MsVUFBVSxNQUFPLENBQUEsR0FBRyxDQUFDLENBQUMsQ0FBQSxDQUFBO0FBRXBILE1BQU0sa0NBQWtDLENBQUMsS0FBQSxLQUN2QyxNQUFNLE9BQVEsQ0FBQSxVQUFBLEVBQVksQ0FBQyxDQUFNLEtBQUE7QUFDeEIsRUFBQSxPQUFBLEdBQUEsR0FBTSxFQUFFLFVBQVcsQ0FBQSxDQUFDLEVBQUUsUUFBUyxDQUFBLEVBQUUsRUFBRSxXQUFZLEVBQUEsQ0FBQTtBQUN4RCxDQUFDLENBQUEsQ0FBQTtBQUVILFNBQVMsb0JBQUEsQ0FBcUIsTUFBYyxLQUFvQyxFQUFBO0FBQ3ZFLEVBQUEsT0FBQSxDQUFBLElBQUEsRUFBTyxJQUFRLENBQUEsQ0FBQSxFQUFBLHdCQUFBLENBQXlCLEtBQUssQ0FBQSxDQUFBLENBQUEsQ0FBQTtBQUN0RCxDQUFBO0FBTUEsTUFBTSxjQUF5QyxHQUFBO0VBQzdDLEdBQUssRUFBQSxJQUFBO0VBQ0wsR0FBSyxFQUFBLEtBQUE7QUFDUCxDQUFBLENBQUE7QUFFQSxTQUFTLG1CQUFtQixLQUFzQixFQUFBO0FBRWhELEVBQUEsTUFBTSxNQUFTLEdBQUEsSUFBSSxNQUFPLENBQUEsQ0FBQSxHQUFBLENBQUEsRUFBTyxHQUFHLENBQUEsQ0FBQTtBQUVoQyxFQUFBLElBQUEsT0FBQSxDQUFRLEtBQUssQ0FBRyxFQUFBO0FBQ1gsSUFBQSxPQUFBLEdBQUEsQ0FBSSxPQUFPLENBQUMsQ0FBQSxLQUFjLElBQUksT0FBUSxDQUFBLENBQUEsRUFBRyxNQUFRLEVBQUEsQ0FBQyxLQUFPLEtBQUE7QUF2V3BFLE1BQUEsSUFBQSxFQUFBLENBQUE7QUF1V3VFLE1BQUEsT0FBQSxDQUFBLEVBQUEsR0FBQSxjQUFBLENBQWUsS0FBZixDQUFBLEtBQUEsSUFBQSxHQUF5QixFQUFBLEdBQUEsRUFBQSxDQUFBO0tBQUUsQ0FBQSxDQUFBLENBQUEsQ0FBSSxDQUFFLENBQUEsSUFBQSxDQUFLLEdBQUcsQ0FBQSxDQUFBO0FBQUEsR0FBQTtBQUc5RyxFQUFBLElBQUksU0FBUyxPQUFPLEtBQUEsS0FBVSxRQUFXLEdBQUEsS0FBQSxHQUFRLE9BQU8sS0FBSyxDQUFBLENBQUE7QUFDN0QsRUFBQSxPQUFPLENBQUksQ0FBQSxFQUFBLE9BQUEsQ0FBUSxNQUFRLEVBQUEsTUFBQSxFQUFRLENBQUMsS0FBTyxLQUFBO0FBM1c3QyxJQUFBLElBQUEsRUFBQSxDQUFBO0FBMldnRCxJQUFBLE9BQUEsQ0FBQSxFQUFBLEdBQUEsY0FBQSxDQUFlLEtBQWYsQ0FBQSxLQUFBLElBQUEsR0FBeUIsRUFBQSxHQUFBLEVBQUEsQ0FBQTtHQUFFLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQTtBQUMzRTs7OzsifQ==
@@ -0,0 +1,87 @@
1
+ import { VariableFormatID } from '@grafana/schema';
2
+ import { isCustomVariableValue } from '../types.js';
3
+ import { getSceneVariableForScopedVar } from './ScopedVarsVariable.js';
4
+ import { formatRegistry } from './formatRegistry.js';
5
+ import { VARIABLE_REGEX } from '../constants.js';
6
+ import { lookupVariable } from '../lookupVariable.js';
7
+ import { macrosIndex } from '../macros/index.js';
8
+
9
+ function sceneInterpolator(sceneObject, target, scopedVars, format, interpolations) {
10
+ if (!target || typeof target !== "string") {
11
+ return target != null ? target : "";
12
+ }
13
+ VARIABLE_REGEX.lastIndex = 0;
14
+ return target.replace(VARIABLE_REGEX, (match, var1, var2, fmt2, var3, fieldPath, fmt3) => {
15
+ const variableName = var1 || var2 || var3;
16
+ const fmt = fmt2 || fmt3 || format;
17
+ const variable = lookupFormatVariable(variableName, match, scopedVars, sceneObject);
18
+ if (!variable) {
19
+ if (interpolations) {
20
+ interpolations.push({ match, variableName, fieldPath, format: fmt, value: match, found: false });
21
+ }
22
+ return match;
23
+ }
24
+ const value = formatValue(sceneObject, variable, variable.getValue(fieldPath), fmt);
25
+ if (interpolations) {
26
+ interpolations.push({ match, variableName, fieldPath, format: fmt, value, found: value !== match });
27
+ }
28
+ return value;
29
+ });
30
+ }
31
+ function lookupFormatVariable(name, match, scopedVars, sceneObject) {
32
+ if (scopedVars && scopedVars.hasOwnProperty(name)) {
33
+ const scopedVar = scopedVars[name];
34
+ if (scopedVar) {
35
+ return getSceneVariableForScopedVar(name, scopedVar);
36
+ }
37
+ }
38
+ const variable = lookupVariable(name, sceneObject);
39
+ if (variable) {
40
+ return variable;
41
+ }
42
+ const Macro = macrosIndex.get(name);
43
+ if (Macro) {
44
+ return new Macro(name, sceneObject, match, scopedVars);
45
+ }
46
+ return null;
47
+ }
48
+ function formatValue(context, variable, value, formatNameOrFn) {
49
+ if (value === null || value === void 0) {
50
+ return "";
51
+ }
52
+ if (isCustomVariableValue(value)) {
53
+ return sceneInterpolator(context, value.formatter(formatNameOrFn));
54
+ }
55
+ if (!Array.isArray(value) && typeof value === "object") {
56
+ value = `${value}`;
57
+ }
58
+ if (typeof formatNameOrFn === "function") {
59
+ return formatNameOrFn(value, {
60
+ name: variable.state.name,
61
+ type: variable.state.type,
62
+ multi: variable.state.isMulti,
63
+ includeAll: variable.state.includeAll
64
+ });
65
+ }
66
+ let args = [];
67
+ if (!formatNameOrFn) {
68
+ formatNameOrFn = VariableFormatID.Glob;
69
+ } else {
70
+ args = formatNameOrFn.split(":");
71
+ if (args.length > 1) {
72
+ formatNameOrFn = args[0];
73
+ args = args.slice(1);
74
+ } else {
75
+ args = [];
76
+ }
77
+ }
78
+ let formatter = formatRegistry.getIfExists(formatNameOrFn);
79
+ if (!formatter) {
80
+ console.error(`Variable format ${formatNameOrFn} not found. Using glob format as fallback.`);
81
+ formatter = formatRegistry.get(VariableFormatID.Glob);
82
+ }
83
+ return formatter.formatter(value, args, variable);
84
+ }
85
+
86
+ export { sceneInterpolator };
87
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NlbmVJbnRlcnBvbGF0b3IuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3ZhcmlhYmxlcy9pbnRlcnBvbGF0aW9uL3NjZW5lSW50ZXJwb2xhdG9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZhcmlhYmxlRm9ybWF0SUQgfSBmcm9tICdAZ3JhZmFuYS9zY2hlbWEnO1xuaW1wb3J0IHsgaXNDdXN0b21WYXJpYWJsZVZhbHVlIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IHsgZ2V0U2NlbmVWYXJpYWJsZUZvclNjb3BlZFZhciB9IGZyb20gJy4vU2NvcGVkVmFyc1ZhcmlhYmxlLmpzJztcbmltcG9ydCB7IGZvcm1hdFJlZ2lzdHJ5IH0gZnJvbSAnLi9mb3JtYXRSZWdpc3RyeS5qcyc7XG5pbXBvcnQgeyBWQVJJQUJMRV9SRUdFWCB9IGZyb20gJy4uL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBsb29rdXBWYXJpYWJsZSB9IGZyb20gJy4uL2xvb2t1cFZhcmlhYmxlLmpzJztcbmltcG9ydCB7IG1hY3Jvc0luZGV4IH0gZnJvbSAnLi4vbWFjcm9zL2luZGV4LmpzJztcblxuZnVuY3Rpb24gc2NlbmVJbnRlcnBvbGF0b3Ioc2NlbmVPYmplY3QsIHRhcmdldCwgc2NvcGVkVmFycywgZm9ybWF0LCBpbnRlcnBvbGF0aW9ucykge1xuICBpZiAoIXRhcmdldCB8fCB0eXBlb2YgdGFyZ2V0ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHRhcmdldCAhPSBudWxsID8gdGFyZ2V0IDogXCJcIjtcbiAgfVxuICBWQVJJQUJMRV9SRUdFWC5sYXN0SW5kZXggPSAwO1xuICByZXR1cm4gdGFyZ2V0LnJlcGxhY2UoVkFSSUFCTEVfUkVHRVgsIChtYXRjaCwgdmFyMSwgdmFyMiwgZm10MiwgdmFyMywgZmllbGRQYXRoLCBmbXQzKSA9PiB7XG4gICAgY29uc3QgdmFyaWFibGVOYW1lID0gdmFyMSB8fCB2YXIyIHx8IHZhcjM7XG4gICAgY29uc3QgZm10ID0gZm10MiB8fCBmbXQzIHx8IGZvcm1hdDtcbiAgICBjb25zdCB2YXJpYWJsZSA9IGxvb2t1cEZvcm1hdFZhcmlhYmxlKHZhcmlhYmxlTmFtZSwgbWF0Y2gsIHNjb3BlZFZhcnMsIHNjZW5lT2JqZWN0KTtcbiAgICBpZiAoIXZhcmlhYmxlKSB7XG4gICAgICBpZiAoaW50ZXJwb2xhdGlvbnMpIHtcbiAgICAgICAgaW50ZXJwb2xhdGlvbnMucHVzaCh7IG1hdGNoLCB2YXJpYWJsZU5hbWUsIGZpZWxkUGF0aCwgZm9ybWF0OiBmbXQsIHZhbHVlOiBtYXRjaCwgZm91bmQ6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1hdGNoO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IGZvcm1hdFZhbHVlKHNjZW5lT2JqZWN0LCB2YXJpYWJsZSwgdmFyaWFibGUuZ2V0VmFsdWUoZmllbGRQYXRoKSwgZm10KTtcbiAgICBpZiAoaW50ZXJwb2xhdGlvbnMpIHtcbiAgICAgIGludGVycG9sYXRpb25zLnB1c2goeyBtYXRjaCwgdmFyaWFibGVOYW1lLCBmaWVsZFBhdGgsIGZvcm1hdDogZm10LCB2YWx1ZSwgZm91bmQ6IHZhbHVlICE9PSBtYXRjaCB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGxvb2t1cEZvcm1hdFZhcmlhYmxlKG5hbWUsIG1hdGNoLCBzY29wZWRWYXJzLCBzY2VuZU9iamVjdCkge1xuICBpZiAoc2NvcGVkVmFycyAmJiBzY29wZWRWYXJzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgY29uc3Qgc2NvcGVkVmFyID0gc2NvcGVkVmFyc1tuYW1lXTtcbiAgICBpZiAoc2NvcGVkVmFyKSB7XG4gICAgICByZXR1cm4gZ2V0U2NlbmVWYXJpYWJsZUZvclNjb3BlZFZhcihuYW1lLCBzY29wZWRWYXIpO1xuICAgIH1cbiAgfVxuICBjb25zdCB2YXJpYWJsZSA9IGxvb2t1cFZhcmlhYmxlKG5hbWUsIHNjZW5lT2JqZWN0KTtcbiAgaWYgKHZhcmlhYmxlKSB7XG4gICAgcmV0dXJuIHZhcmlhYmxlO1xuICB9XG4gIGNvbnN0IE1hY3JvID0gbWFjcm9zSW5kZXguZ2V0KG5hbWUpO1xuICBpZiAoTWFjcm8pIHtcbiAgICByZXR1cm4gbmV3IE1hY3JvKG5hbWUsIHNjZW5lT2JqZWN0LCBtYXRjaCwgc2NvcGVkVmFycyk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBmb3JtYXRWYWx1ZShjb250ZXh0LCB2YXJpYWJsZSwgdmFsdWUsIGZvcm1hdE5hbWVPckZuKSB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgaWYgKGlzQ3VzdG9tVmFyaWFibGVWYWx1ZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc2NlbmVJbnRlcnBvbGF0b3IoY29udGV4dCwgdmFsdWUuZm9ybWF0dGVyKGZvcm1hdE5hbWVPckZuKSk7XG4gIH1cbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICB2YWx1ZSA9IGAke3ZhbHVlfWA7XG4gIH1cbiAgaWYgKHR5cGVvZiBmb3JtYXROYW1lT3JGbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIGZvcm1hdE5hbWVPckZuKHZhbHVlLCB7XG4gICAgICBuYW1lOiB2YXJpYWJsZS5zdGF0ZS5uYW1lLFxuICAgICAgdHlwZTogdmFyaWFibGUuc3RhdGUudHlwZSxcbiAgICAgIG11bHRpOiB2YXJpYWJsZS5zdGF0ZS5pc011bHRpLFxuICAgICAgaW5jbHVkZUFsbDogdmFyaWFibGUuc3RhdGUuaW5jbHVkZUFsbFxuICAgIH0pO1xuICB9XG4gIGxldCBhcmdzID0gW107XG4gIGlmICghZm9ybWF0TmFtZU9yRm4pIHtcbiAgICBmb3JtYXROYW1lT3JGbiA9IFZhcmlhYmxlRm9ybWF0SUQuR2xvYjtcbiAgfSBlbHNlIHtcbiAgICBhcmdzID0gZm9ybWF0TmFtZU9yRm4uc3BsaXQoXCI6XCIpO1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGZvcm1hdE5hbWVPckZuID0gYXJnc1swXTtcbiAgICAgIGFyZ3MgPSBhcmdzLnNsaWNlKDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmdzID0gW107XG4gICAgfVxuICB9XG4gIGxldCBmb3JtYXR0ZXIgPSBmb3JtYXRSZWdpc3RyeS5nZXRJZkV4aXN0cyhmb3JtYXROYW1lT3JGbik7XG4gIGlmICghZm9ybWF0dGVyKSB7XG4gICAgY29uc29sZS5lcnJvcihgVmFyaWFibGUgZm9ybWF0ICR7Zm9ybWF0TmFtZU9yRm59IG5vdCBmb3VuZC4gVXNpbmcgZ2xvYiBmb3JtYXQgYXMgZmFsbGJhY2suYCk7XG4gICAgZm9ybWF0dGVyID0gZm9ybWF0UmVnaXN0cnkuZ2V0KFZhcmlhYmxlRm9ybWF0SUQuR2xvYik7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXR0ZXIodmFsdWUsIGFyZ3MsIHZhcmlhYmxlKTtcbn1cblxuZXhwb3J0IHsgc2NlbmVJbnRlcnBvbGF0b3IgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYzJObGJtVkpiblJsY25CdmJHRjBiM0l1YW5NaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMeTR1TDNOeVl5OTJZWEpwWVdKc1pYTXZhVzUwWlhKd2IyeGhkR2x2Ymk5elkyVnVaVWx1ZEdWeWNHOXNZWFJ2Y2k1MGN5SmRMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdleUJUWTI5d1pXUldZWEp6SUgwZ1puSnZiU0FuUUdkeVlXWmhibUV2WkdGMFlTYzdYRzVwYlhCdmNuUWdleUJXWVhKcFlXSnNaVWx1ZEdWeWNHOXNZWFJwYjI0Z2ZTQm1jbTl0SUNkQVozSmhabUZ1WVM5eWRXNTBhVzFsSnp0Y2JtbHRjRzl5ZENCN0lGWmhjbWxoWW14bFZIbHdaU3dnVm1GeWFXRmliR1ZHYjNKdFlYUkpSQ0I5SUdaeWIyMGdKMEJuY21GbVlXNWhMM05qYUdWdFlTYzdYRzVjYm1sdGNHOXlkQ0I3SUZOalpXNWxUMkpxWldOMElIMGdabkp2YlNBbkxpNHZMaTR2WTI5eVpTOTBlWEJsY3ljN1hHNXBiWEJ2Y25RZ2V5QkpiblJsY25CdmJHRjBhVzl1Um05eWJXRjBVR0Z5WVcxbGRHVnlMQ0JwYzBOMWMzUnZiVlpoY21saFlteGxWbUZzZFdVc0lGWmhjbWxoWW14bFZtRnNkV1VnZlNCbWNtOXRJQ2N1TGk5MGVYQmxjeWM3WEc1Y2JtbHRjRzl5ZENCN0lHZGxkRk5qWlc1bFZtRnlhV0ZpYkdWR2IzSlRZMjl3WldSV1lYSWdmU0JtY205dElDY3VMMU5qYjNCbFpGWmhjbk5XWVhKcFlXSnNaU2M3WEc1cGJYQnZjblFnZXlCbWIzSnRZWFJTWldkcGMzUnllU3dnUm05eWJXRjBWbUZ5YVdGaWJHVWdmU0JtY205dElDY3VMMlp2Y20xaGRGSmxaMmx6ZEhKNUp6dGNibWx0Y0c5eWRDQjdJRlpCVWtsQlFreEZYMUpGUjBWWUlIMGdabkp2YlNBbkxpNHZZMjl1YzNSaGJuUnpKenRjYm1sdGNHOXlkQ0I3SUd4dmIydDFjRlpoY21saFlteGxJSDBnWm5KdmJTQW5MaTR2Ykc5dmEzVndWbUZ5YVdGaWJHVW5PMXh1YVcxd2IzSjBJSHNnYldGamNtOXpTVzVrWlhnZ2ZTQm1jbTl0SUNjdUxpOXRZV055YjNNbk8xeHVYRzR2S2lwY2JpQXFJRlJvYVhNZ1puVnVZM1JwYjI0Z2QybHNiQ0IwY25rZ2RHOGdjR0Z5YzJVZ1lXNWtJSEpsY0d4aFkyVWdZVzU1SUhaaGNtbGhZbXhsSUdWNGNISmxjM05wYjI0Z1ptOTFibVFnYVc0Z2RHaGxJSFJoY21kbGRDQnpkSEpwYm1jdUlGUm9aU0J6WTJWdVpVOWlhbVZqZENCM2FXeHNJR0psSUhWelpXUWdZWE1nZEdobElITnZkWEpqWlNCdlppQjJZWEpwWVdKc1pYTXVJRWwwSUhkcGJHeGNiaUFxSUhWelpTQjBhR1VnYzJObGJtVWdaM0poY0dnZ1lXNWtJSGRoYkdzZ2RYQWdkR2hsSUhCaGNtVnVkQ0IwY21WbElIVnVkR2xzSUdsMElHWnBibVJ6SUhSb1pTQmpiRzl6WlhOMElIWmhjbWxoWW14bExseHVJQ3BjYmlBcUlGTmpiM0JsWkZaaGNuTWdjMmh2ZFd4a0lHNXZkQ0J5WldGc2JIa2dZbVVnYm1WbFpHVmtJRzExWTJnZ2FXNGdkR2hsSUc1bGR5QnpZMlZ1WlNCaGNtTm9hWFJsWTNSMWNtVWdZWE1nZEdobGVTQmpZVzRnWW1VZ1lXUmtaV1FnZEc4Z2RHaGxJR3h2WTJGc0lITmpaVzVsSUc1dlpHVWdhVzV6ZEdWaFpDQnZaaUJ3WVhOelpXUWdhVzRnYVc1MFpYSndiMnhoZEdVZ1puVnVZM1JwYjI0dVhHNGdLaUJKZENCcGN5QnpkWEJ3YjNKMFpXUWdhR1Z5WlNCbWIzSWdZbUZqYTNkaGNtUWdZMjl0Y0dGMGFXSnBiR2wwZVNCaGJtUWdjMjl0WlNCbFpHZGxJR05oYzJWeklIZG9aWEpsSUdGa1pHbHVaeUJ6WTI5d1pXUWdkbUZ5Y3lCMGJ5QnNiMk5oYkNCelkyVnVaU0J1YjJSbElHbHpJRzV2ZENCd2NtRmpkR2xqWVd3dVhHNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ6WTJWdVpVbHVkR1Z5Y0c5c1lYUnZjaWhjYmlBZ2MyTmxibVZQWW1wbFkzUTZJRk5qWlc1bFQySnFaV04wTEZ4dUlDQjBZWEpuWlhRNklITjBjbWx1WnlCOElIVnVaR1ZtYVc1bFpDQjhJRzUxYkd3c1hHNGdJSE5qYjNCbFpGWmhjbk0vT2lCVFkyOXdaV1JXWVhKekxGeHVJQ0JtYjNKdFlYUS9PaUJKYm5SbGNuQnZiR0YwYVc5dVJtOXliV0YwVUdGeVlXMWxkR1Z5TEZ4dUlDQnBiblJsY25CdmJHRjBhVzl1Y3o4NklGWmhjbWxoWW14bFNXNTBaWEp3YjJ4aGRHbHZibHRkWEc0cE9pQnpkSEpwYm1jZ2UxeHVJQ0JwWmlBb0lYUmhjbWRsZENCOGZDQjBlWEJsYjJZZ2RHRnlaMlYwSUNFOVBTQW5jM1J5YVc1bkp5a2dlMXh1SUNBZ0lISmxkSFZ5YmlCMFlYSm5aWFFnUHo4Z0p5YzdYRzRnSUgxY2JseHVJQ0JXUVZKSlFVSk1SVjlTUlVkRldDNXNZWE4wU1c1a1pYZ2dQU0F3TzF4dVhHNGdJSEpsZEhWeWJpQjBZWEpuWlhRdWNtVndiR0ZqWlNoV1FWSkpRVUpNUlY5U1JVZEZXQ3dnS0cxaGRHTm9MQ0IyWVhJeExDQjJZWEl5TENCbWJYUXlMQ0IyWVhJekxDQm1hV1ZzWkZCaGRHZ3NJR1p0ZERNcElEMCtJSHRjYmlBZ0lDQmpiMjV6ZENCMllYSnBZV0pzWlU1aGJXVWdQU0IyWVhJeElIeDhJSFpoY2pJZ2ZId2dkbUZ5TXp0Y2JpQWdJQ0JqYjI1emRDQm1iWFFnUFNCbWJYUXlJSHg4SUdadGRETWdmSHdnWm05eWJXRjBPMXh1SUNBZ0lHTnZibk4wSUhaaGNtbGhZbXhsSUQwZ2JHOXZhM1Z3Um05eWJXRjBWbUZ5YVdGaWJHVW9kbUZ5YVdGaWJHVk9ZVzFsTENCdFlYUmphQ3dnYzJOdmNHVmtWbUZ5Y3l3Z2MyTmxibVZQWW1wbFkzUXBPMXh1WEc0Z0lDQWdhV1lnS0NGMllYSnBZV0pzWlNrZ2UxeHVJQ0FnSUNBZ2FXWWdLR2x1ZEdWeWNHOXNZWFJwYjI1ektTQjdYRzRnSUNBZ0lDQWdJQzh2SUZObGRDQmdkbUZzZFdWZ0lHVnhkV0ZzSUhSdklHQnRZWFJqYUdBZ1lYTWdaRzlqZFcxbGJuUmxaQ0JwYmlCMGFHVWdZRlpoY21saFlteGxTVzUwWlhKd2IyeGhkR2x2Ym1BZ2FXNTBaWEptWVdObExseHVJQ0FnSUNBZ0lDQnBiblJsY25CdmJHRjBhVzl1Y3k1d2RYTm9LSHNnYldGMFkyZ3NJSFpoY21saFlteGxUbUZ0WlN3Z1ptbGxiR1JRWVhSb0xDQm1iM0p0WVhRNklHWnRkQ3dnZG1Gc2RXVTZJRzFoZEdOb0xDQm1iM1Z1WkRvZ1ptRnNjMlVnZlNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCeVpYUjFjbTRnYldGMFkyZzdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1kyOXVjM1FnZG1Gc2RXVWdQU0JtYjNKdFlYUldZV3gxWlNoelkyVnVaVTlpYW1WamRDd2dkbUZ5YVdGaWJHVXNJSFpoY21saFlteGxMbWRsZEZaaGJIVmxLR1pwWld4a1VHRjBhQ2tzSUdadGRDazdYRzVjYmlBZ0lDQnBaaUFvYVc1MFpYSndiMnhoZEdsdmJuTXBJSHRjYmlBZ0lDQWdJR2x1ZEdWeWNHOXNZWFJwYjI1ekxuQjFjMmdvZXlCdFlYUmphQ3dnZG1GeWFXRmliR1ZPWVcxbExDQm1hV1ZzWkZCaGRHZ3NJR1p2Y20xaGREb2dabTEwTENCMllXeDFaU3dnWm05MWJtUTZJSFpoYkhWbElDRTlQU0J0WVhSamFDQjlLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z2RtRnNkV1U3WEc0Z0lIMHBPMXh1ZlZ4dVhHNW1kVzVqZEdsdmJpQnNiMjlyZFhCR2IzSnRZWFJXWVhKcFlXSnNaU2hjYmlBZ2JtRnRaVG9nYzNSeWFXNW5MRnh1SUNCdFlYUmphRG9nYzNSeWFXNW5MRnh1SUNCelkyOXdaV1JXWVhKek9pQlRZMjl3WldSV1lYSnpJSHdnZFc1a1pXWnBibVZrTEZ4dUlDQnpZMlZ1WlU5aWFtVmpkRG9nVTJObGJtVlBZbXBsWTNSY2JpazZJRVp2Y20xaGRGWmhjbWxoWW14bElId2diblZzYkNCN1hHNGdJR2xtSUNoelkyOXdaV1JXWVhKeklDWW1JSE5qYjNCbFpGWmhjbk11YUdGelQzZHVVSEp2Y0dWeWRIa29ibUZ0WlNrcElIdGNiaUFnSUNCamIyNXpkQ0J6WTI5d1pXUldZWElnUFNCelkyOXdaV1JXWVhKelcyNWhiV1ZkTzF4dVhHNGdJQ0FnYVdZZ0tITmpiM0JsWkZaaGNpa2dlMXh1SUNBZ0lDQWdjbVYwZFhKdUlHZGxkRk5qWlc1bFZtRnlhV0ZpYkdWR2IzSlRZMjl3WldSV1lYSW9ibUZ0WlN3Z2MyTnZjR1ZrVm1GeUtUdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQmpiMjV6ZENCMllYSnBZV0pzWlNBOUlHeHZiMnQxY0ZaaGNtbGhZbXhsS0c1aGJXVXNJSE5qWlc1bFQySnFaV04wS1R0Y2JpQWdhV1lnS0haaGNtbGhZbXhsS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFpoY21saFlteGxPMXh1SUNCOVhHNWNiaUFnWTI5dWMzUWdUV0ZqY204Z1BTQnRZV055YjNOSmJtUmxlQzVuWlhRb2JtRnRaU2s3WEc0Z0lHbG1JQ2hOWVdOeWJ5a2dlMXh1SUNBZ0lISmxkSFZ5YmlCdVpYY2dUV0ZqY204b2JtRnRaU3dnYzJObGJtVlBZbXBsWTNRc0lHMWhkR05vTENCelkyOXdaV1JXWVhKektUdGNiaUFnZlZ4dVhHNGdJSEpsZEhWeWJpQnVkV3hzTzF4dWZWeHVYRzVtZFc1amRHbHZiaUJtYjNKdFlYUldZV3gxWlNoY2JpQWdZMjl1ZEdWNGREb2dVMk5sYm1WUFltcGxZM1FzWEc0Z0lIWmhjbWxoWW14bE9pQkdiM0p0WVhSV1lYSnBZV0pzWlN4Y2JpQWdkbUZzZFdVNklGWmhjbWxoWW14bFZtRnNkV1VnZkNCMWJtUmxabWx1WldRZ2ZDQnVkV3hzTEZ4dUlDQm1iM0p0WVhST1lXMWxUM0pHYmo4NklFbHVkR1Z5Y0c5c1lYUnBiMjVHYjNKdFlYUlFZWEpoYldWMFpYSmNiaWs2SUhOMGNtbHVaeUI3WEc0Z0lHbG1JQ2gyWVd4MVpTQTlQVDBnYm5Wc2JDQjhmQ0IyWVd4MVpTQTlQVDBnZFc1a1pXWnBibVZrS1NCN1hHNGdJQ0FnY21WMGRYSnVJQ2NuTzF4dUlDQjlYRzVjYmlBZ0x5OGdWbUZ5YVdGaWJHVWdZMkZ1SUhKbGRIVnliaUJoSUdOMWMzUnZiU0IyWVd4MVpTQjBhR0YwSUdoaGJtUnNaWE1nWm05eWJXRjBkR2x1WjF4dUlDQXZMeUJVYUdseklHbHpJSFZ6WldaMWJDQm1iM0lnWTNWemRHOXRRV3hzVm1Gc2RXVWdZVzVrSUcxaFkzSnZjeUIwYUdGMElISmxkSFZ5YmlCMllXeDFaWE1nZEdoaGRDQmhjbVVnWVd4eVpXRmtlU0JtYjNKdFlYUjBaV1FnYjNJZ2JtVmxaQ0J6Y0dWamFXRnNJR1p2Y20xaGRIUnBibWRjYmlBZ2FXWWdLR2x6UTNWemRHOXRWbUZ5YVdGaWJHVldZV3gxWlNoMllXeDFaU2twSUh0Y2JpQWdJQ0J5WlhSMWNtNGdjMk5sYm1WSmJuUmxjbkJ2YkdGMGIzSW9ZMjl1ZEdWNGRDd2dkbUZzZFdVdVptOXliV0YwZEdWeUtHWnZjbTFoZEU1aGJXVlBja1p1S1NrN1hHNGdJSDFjYmx4dUlDQXZMeUJwWmlCcGRDZHpJR0Z1SUc5aWFtVmpkQ0IwY21GdWMyWnZjbTBnZG1Gc2RXVWdkRzhnYzNSeWFXNW5YRzRnSUdsbUlDZ2hRWEp5WVhrdWFYTkJjbkpoZVNoMllXeDFaU2tnSmlZZ2RIbHdaVzltSUhaaGJIVmxJRDA5UFNBbmIySnFaV04wSnlrZ2UxeHVJQ0FnSUhaaGJIVmxJRDBnWUNSN2RtRnNkV1Y5WUR0Y2JpQWdmVnh1WEc0Z0lHbG1JQ2gwZVhCbGIyWWdabTl5YldGMFRtRnRaVTl5Um00Z1BUMDlJQ2RtZFc1amRHbHZiaWNwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdabTl5YldGMFRtRnRaVTl5Um00b2RtRnNkV1VzSUh0Y2JpQWdJQ0FnSUc1aGJXVTZJSFpoY21saFlteGxMbk4wWVhSbExtNWhiV1VzWEc0Z0lDQWdJQ0IwZVhCbE9pQjJZWEpwWVdKc1pTNXpkR0YwWlM1MGVYQmxJR0Z6SUZaaGNtbGhZbXhsVkhsd1pTeGNiaUFnSUNBZ0lHMTFiSFJwT2lCMllYSnBZV0pzWlM1emRHRjBaUzVwYzAxMWJIUnBMRnh1SUNBZ0lDQWdhVzVqYkhWa1pVRnNiRG9nZG1GeWFXRmliR1V1YzNSaGRHVXVhVzVqYkhWa1pVRnNiQ3hjYmlBZ0lDQjlLVHRjYmlBZ2ZWeHVYRzRnSUd4bGRDQmhjbWR6T2lCemRISnBibWRiWFNBOUlGdGRPMXh1WEc0Z0lHbG1JQ2doWm05eWJXRjBUbUZ0WlU5eVJtNHBJSHRjYmlBZ0lDQm1iM0p0WVhST1lXMWxUM0pHYmlBOUlGWmhjbWxoWW14bFJtOXliV0YwU1VRdVIyeHZZanRjYmlBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0F2THlCemIyMWxJR1p2Y20xaGRITWdhR0YyWlNCaGNtZDFiV1Z1ZEhNZ2RHaGhkQ0JqYjIxbElHRm1kR1Z5SUNjNkp5QmphR0Z5WVdOMFpYSmNiaUFnSUNCaGNtZHpJRDBnWm05eWJXRjBUbUZ0WlU5eVJtNHVjM0JzYVhRb0p6b25LVHRjYmlBZ0lDQnBaaUFvWVhKbmN5NXNaVzVuZEdnZ1BpQXhLU0I3WEc0Z0lDQWdJQ0JtYjNKdFlYUk9ZVzFsVDNKR2JpQTlJR0Z5WjNOYk1GMDdYRzRnSUNBZ0lDQmhjbWR6SUQwZ1lYSm5jeTV6YkdsalpTZ3hLVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ1lYSm5jeUE5SUZ0ZE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lHeGxkQ0JtYjNKdFlYUjBaWElnUFNCbWIzSnRZWFJTWldkcGMzUnllUzVuWlhSSlprVjRhWE4wY3lobWIzSnRZWFJPWVcxbFQzSkdiaWs3WEc1Y2JpQWdhV1lnS0NGbWIzSnRZWFIwWlhJcElIdGNiaUFnSUNCamIyNXpiMnhsTG1WeWNtOXlLR0JXWVhKcFlXSnNaU0JtYjNKdFlYUWdKSHRtYjNKdFlYUk9ZVzFsVDNKR2JuMGdibTkwSUdadmRXNWtMaUJWYzJsdVp5Qm5iRzlpSUdadmNtMWhkQ0JoY3lCbVlXeHNZbUZqYXk1Z0tUdGNiaUFnSUNCbWIzSnRZWFIwWlhJZ1BTQm1iM0p0WVhSU1pXZHBjM1J5ZVM1blpYUW9WbUZ5YVdGaWJHVkdiM0p0WVhSSlJDNUhiRzlpS1R0Y2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCbWIzSnRZWFIwWlhJdVptOXliV0YwZEdWeUtIWmhiSFZsTENCaGNtZHpMQ0IyWVhKcFlXSnNaU2s3WEc1OVhHNGlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPenM3T3pzN1FVRnZRazhzVTBGQlV5eHBRa0ZEWkN4RFFVRkJMRmRCUVVFc1JVRkRRU3hOUVVOQkxFVkJRVUVzVlVGQlFTeEZRVU5CTEZGQlEwRXNZMEZEVVN4RlFVRkJPMEZCUTFJc1JVRkJRU3hKUVVGSkxFTkJRVU1zVFVGQlFTeEpRVUZWTEU5QlFVOHNUVUZCUVN4TFFVRlhMRkZCUVZVc1JVRkJRVHRCUVVONlF5eEpRVUZCTEU5QlFVOHNUVUZCVlN4SlFVRkJMRWxCUVVFc1IwRkJRU3hOUVVGQkxFZEJRVUVzUlVGQlFTeERRVUZCTzBGQlFVRXNSMEZEYmtJN1FVRkZRU3hGUVVGQkxHTkJRVUVzUTBGQlpTeFRRVUZaTEVkQlFVRXNRMEZCUVN4RFFVRkJPMEZCUlROQ0xFVkJRVThzVDBGQlFTeE5RVUZCTEVOQlFVOHNUMEZCVVN4RFFVRkJMR05CUVVFc1JVRkJaMElzUTBGQlF5eExRVUZCTEVWQlFVOHNUVUZCVFN4SlFVRk5MRVZCUVVFc1NVRkJRU3hGUVVGTkxFbEJRVTBzUlVGQlFTeFRRVUZCTEVWQlFWY3NTVUZCVXl4TFFVRkJPMEZCUTNoR0xFbEJRVTBzVFVGQlFTeFpRVUZCTEVkQlFXVXNVVUZCVVN4SlFVRlJMRWxCUVVFc1NVRkJRU3hEUVVGQk8wRkJRM0pETEVsQlFVMHNUVUZCUVN4SFFVRkJMRWRCUVUwc1VVRkJVU3hKUVVGUkxFbEJRVUVzVFVGQlFTeERRVUZCTzBGQlF6VkNMRWxCUVVFc1RVRkJUU3hSUVVGWExFZEJRVUVzYjBKQlFVRXNRMEZCY1VJc1dVRkJZeXhGUVVGQkxFdEJRVUVzUlVGQlR5eFpRVUZaTEZkQlFWY3NRMEZCUVN4RFFVRkJPMEZCUld4R0xFbEJRVUVzU1VGQlNTeERRVUZETEZGQlFWVXNSVUZCUVR0QlFVTmlMRTFCUVVFc1NVRkJTU3hqUVVGblFpeEZRVUZCTzBGQlJXeENMRkZCUVdVc1kwRkJRU3hEUVVGQkxFbEJRVUVzUTBGQlN5eEZRVUZGTEV0QlFVRXNSVUZCVHl4WlFVRmpMRVZCUVVFc1UwRkJRU3hGUVVGWExFMUJRVkVzUlVGQlFTeEhRVUZCTEVWQlFVc3NTMEZCVHl4RlFVRkJMRXRCUVVFc1JVRkJUeXhMUVVGUExFVkJRVUVzUzBGQlFTeEZRVUZQTEVOQlFVRXNRMEZCUVR0QlFVRkJMRTlCUTJwSE8wRkJRMEVzVFVGQlR5eFBRVUZCTEV0QlFVRXNRMEZCUVR0QlFVRkJMRXRCUTFRN1FVRkZRU3hKUVVGTkxFMUJRVUVzUzBGQlFTeEhRVUZSTEZsQlFWa3NWMEZCWVN4RlFVRkJMRkZCUVVFc1JVRkJWU3hUUVVGVExGRkJRVk1zUTBGQlFTeFRRVUZUTEVkQlFVY3NSMEZCUnl4RFFVRkJMRU5CUVVFN1FVRkZiRVlzU1VGQlFTeEpRVUZKTEdOQlFXZENMRVZCUVVFN1FVRkRiRUlzVFVGQlpTeGpRVUZCTEVOQlFVRXNTVUZCUVN4RFFVRkxMRVZCUVVVc1MwRkJRU3hGUVVGUExGbEJRV01zUlVGQlFTeFRRVUZCTEVWQlFWY3NUVUZCVVN4RlFVRkJMRWRCUVVFc1JVRkJTeXhMUVVGUExFVkJRVUVzUzBGQlFTeEZRVUZQTEV0QlFWVXNTMEZCUVN4TFFVRkJMRVZCUVU4c1EwRkJRU3hEUVVGQk8wRkJRVUVzUzBGRGNFYzdRVUZGUVN4SlFVRlBMRTlCUVVFc1MwRkJRU3hEUVVGQk8wRkJRVUVzUjBGRFVpeERRVUZCTEVOQlFVRTdRVUZEU0N4RFFVRkJPMEZCUlVFc1UwRkJVeXh2UWtGRFVDeERRVUZCTEVsQlFVRXNSVUZEUVN4TFFVTkJMRVZCUVVFc1ZVRkJRU3hGUVVOQkxGZEJRM1ZDTEVWQlFVRTdRVUZEZGtJc1JVRkJRU3hKUVVGSkxGVkJRV01zU1VGQlFTeFZRVUZCTEVOQlFWY3NZMEZCWlN4RFFVRkJMRWxCUVVrc1EwRkJSeXhGUVVGQk8wRkJRMnBFTEVsQlFVRXNUVUZCVFN4WlFVRlpMRlZCUVZjc1EwRkJRU3hKUVVGQkxFTkJRVUVzUTBGQlFUdEJRVVUzUWl4SlFVRkJMRWxCUVVrc1UwRkJWeXhGUVVGQk8wRkJRMklzVFVGQlR5eFBRVUZCTERSQ1FVRkJMRU5CUVRaQ0xFMUJRVTBzVTBGQlV5eERRVUZCTEVOQlFVRTdRVUZCUVN4TFFVTnlSRHRCUVVGQkxFZEJRMFk3UVVGRlFTeEZRVUZOTEUxQlFVRXNVVUZCUVN4SFFVRlhMR05CUVdVc1EwRkJRU3hKUVVGQkxFVkJRVTBzVjBGQlZ5eERRVUZCTEVOQlFVRTdRVUZEYWtRc1JVRkJRU3hKUVVGSkxGRkJRVlVzUlVGQlFUdEJRVU5hTEVsQlFVOHNUMEZCUVN4UlFVRkJMRU5CUVVFN1FVRkJRU3hIUVVOVU8wRkJSVUVzUlVGQlRTeE5RVUZCTEV0QlFVRXNSMEZCVVN4WFFVRlpMRU5CUVVFc1IwRkJRU3hEUVVGSkxFbEJRVWtzUTBGQlFTeERRVUZCTzBGQlEyeERMRVZCUVVFc1NVRkJTU3hMUVVGUExFVkJRVUU3UVVGRFZDeEpRVUZCTEU5QlFVOHNTVUZCU1N4TFFVRkJMRU5CUVUwc1NVRkJUU3hGUVVGQkxGZEJRVUVzUlVGQllTeFBRVUZQTEZWQlFWVXNRMEZCUVN4RFFVRkJPMEZCUVVFc1IwRkRka1E3UVVGRlFTeEZRVUZQTEU5QlFVRXNTVUZCUVN4RFFVRkJPMEZCUTFRc1EwRkJRVHRCUVVWQkxGTkJRVk1zVjBGRFVDeERRVUZCTEU5QlFVRXNSVUZEUVN4UlFVTkJMRVZCUVVFc1MwRkJRU3hGUVVOQkxHTkJRMUVzUlVGQlFUdEJRVU5TTEVWQlFVa3NTVUZCUVN4TFFVRkJMRXRCUVZVc1NVRkJVU3hKUVVGQkxFdEJRVUVzUzBGQlZTeExRVUZYTEVOQlFVRXNSVUZCUVR0QlFVTjZReXhKUVVGUExFOUJRVUVzUlVGQlFTeERRVUZCTzBGQlFVRXNSMEZEVkR0QlFVbEJMRVZCUVVrc1NVRkJRU3h4UWtGQlFTeERRVUZ6UWl4TFFVRkxMRU5CUVVjc1JVRkJRVHRCUVVOb1F5eEpRVUZCTEU5QlFVOHNhVUpCUVd0Q0xFTkJRVUVzVDBGQlFTeEZRVUZUTEV0QlFVMHNRMEZCUVN4VFFVRkJMRU5CUVZVc1kwRkJZeXhEUVVGRExFTkJRVUVzUTBGQlFUdEJRVUZCTEVkQlEyNUZPMEZCUjBFc1JVRkJRU3hKUVVGSkxFTkJRVU1zUzBGQlRTeERRVUZCTEU5QlFVRXNRMEZCVVN4TFFVRkxMRU5CUVVzc1NVRkJRU3hQUVVGUExGVkJRVlVzVVVGQlZTeEZRVUZCTzBGQlEzUkVMRWxCUVVFc1MwRkJRU3hIUVVGUkxFTkJRVWNzUlVGQlFTeExRVUZCTEVOQlFVRXNRMEZCUVN4RFFVRkJPMEZCUVVFc1IwRkRZanRCUVVWQkxFVkJRVWtzU1VGQlFTeFBRVUZQTEcxQ1FVRnRRaXhWUVVGWkxFVkJRVUU3UVVGRGVFTXNTVUZCUVN4UFFVRlBMR1ZCUVdVc1MwRkJUeXhGUVVGQk8wRkJRVUVzVFVGRE0wSXNTVUZCUVN4RlFVRk5MRk5CUVZNc1MwRkJUU3hEUVVGQkxFbEJRVUU3UVVGQlFTeE5RVU55UWl4SlFVRkJMRVZCUVUwc1UwRkJVeXhMUVVGTkxFTkJRVUVzU1VGQlFUdEJRVUZCTEUxQlEzSkNMRXRCUVVFc1JVRkJUeXhUUVVGVExFdEJRVTBzUTBGQlFTeFBRVUZCTzBGQlFVRXNUVUZEZEVJc1ZVRkJRU3hGUVVGWkxGTkJRVk1zUzBGQlRTeERRVUZCTEZWQlFVRTdRVUZCUVN4TFFVTTFRaXhEUVVGQkxFTkJRVUU3UVVGQlFTeEhRVU5JTzBGQlJVRXNSVUZCUVN4SlFVRkpMRTlCUVdsQ0xFVkJRVU1zUTBGQlFUdEJRVVYwUWl4RlFVRkJMRWxCUVVrc1EwRkJReXhqUVVGblFpeEZRVUZCTzBGQlEyNUNMRWxCUVVFc1kwRkJRU3hIUVVGcFFpeG5Ra0ZCYVVJc1EwRkJRU3hKUVVGQkxFTkJRVUU3UVVGQlFTeEhRVU0zUWl4TlFVRkJPMEZCUlV3c1NVRkJUeXhKUVVGQkxFZEJRVUVzWTBGQlFTeERRVUZsTEUxQlFVMHNSMEZCUnl4RFFVRkJMRU5CUVVFN1FVRkRMMElzU1VGQlNTeEpRVUZCTEVsQlFVRXNRMEZCU3l4VFFVRlRMRU5CUVVjc1JVRkJRVHRCUVVOdVFpeE5RVUZCTEdOQlFVRXNSMEZCYVVJc1NVRkJTeXhEUVVGQkxFTkJRVUVzUTBGQlFTeERRVUZCTzBGQlEzUkNMRTFCUVU4c1NVRkJRU3hIUVVGQkxFbEJRVUVzUTBGQlN5eE5RVUZOTEVOQlFVTXNRMEZCUVN4RFFVRkJPMEZCUVVFc1MwRkRaQ3hOUVVGQk8wRkJRMHdzVFVGQlFTeEpRVUZCTEVkQlFVOHNSVUZCUXl4RFFVRkJPMEZCUVVFc1MwRkRWanRCUVVGQkxFZEJRMFk3UVVGRlFTeEZRVUZKTEVsQlFVRXNVMEZCUVN4SFFVRlpMR05CUVdVc1EwRkJRU3hYUVVGQkxFTkJRVmtzWTBGQll5eERRVUZCTEVOQlFVRTdRVUZGZWtRc1JVRkJRU3hKUVVGSkxFTkJRVU1zVTBGQlZ5eEZRVUZCTzBGQlEyUXNTVUZCVVN4UFFVRkJMRU5CUVVFc1MwRkJRU3hEUVVGTkxHMUNRVUZ0UWl4alFVRXdSQ3hEUVVGQkxEQkRRVUZCTEVOQlFVRXNRMEZCUVN4RFFVRkJPMEZCUXpOR0xFbEJRVmtzVTBGQlFTeEhRVUZCTEdOQlFVRXNRMEZCWlN4SFFVRkpMRU5CUVVFc1owSkJRVUVzUTBGQmFVSXNTVUZCU1N4RFFVRkJMRU5CUVVFN1FVRkJRU3hIUVVOMFJEdEJRVVZCTEVWQlFVRXNUMEZCVHl4VFFVRlZMRU5CUVVFc1UwRkJRU3hEUVVGVkxFdEJRVThzUlVGQlFTeEpRVUZCTEVWQlFVMHNVVUZCVVN4RFFVRkJMRU5CUVVFN1FVRkRiRVE3T3pzN0luMD1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQW9CTyxTQUFTLGlCQUNkLENBQUEsV0FBQSxFQUNBLE1BQ0EsRUFBQSxVQUFBLEVBQ0EsUUFDQSxjQUNRLEVBQUE7QUFDUixFQUFBLElBQUksQ0FBQyxNQUFBLElBQVUsT0FBTyxNQUFBLEtBQVcsUUFBVSxFQUFBO0FBQ3pDLElBQU8sT0FBQSxNQUFBLElBQVUsT0FBQSxNQUFBLEdBQUEsRUFBQSxDQUFBO0FBQUEsR0FBQTtBQUduQixFQUFBLGNBQUEsQ0FBZSxTQUFZLEdBQUEsQ0FBQSxDQUFBO0FBRXBCLEVBQUEsT0FBQSxNQUFBLENBQU8sT0FBUSxDQUFBLGNBQUEsRUFBZ0IsQ0FBQyxLQUFBLEVBQU8sTUFBTSxJQUFNLEVBQUEsSUFBQSxFQUFNLElBQU0sRUFBQSxTQUFBLEVBQVcsSUFBUyxLQUFBO0FBQ2xGLElBQUEsTUFBQSxZQUFBLEdBQWUsUUFBUSxJQUFRLElBQUEsSUFBQSxDQUFBO0FBQy9CLElBQUEsTUFBQSxHQUFBLEdBQU0sUUFBUSxJQUFRLElBQUEsTUFBQSxDQUFBO0FBQzVCLElBQUEsTUFBTSxRQUFXLEdBQUEsb0JBQUEsQ0FBcUIsWUFBYyxFQUFBLEtBQUEsRUFBTyxZQUFZLFdBQVcsQ0FBQSxDQUFBO0FBRWxGLElBQUEsSUFBSSxDQUFDLFFBQVUsRUFBQTtBQUNiLE1BQUEsSUFBSSxjQUFnQixFQUFBO0FBRUgsUUFBQSxjQUFBLENBQUEsSUFBQSxDQUFLLEVBQUUsS0FBQSxFQUFPLFlBQWMsRUFBQSxTQUFBLEVBQVcsTUFBUSxFQUFBLEdBQUEsRUFBSyxLQUFPLEVBQUEsS0FBQSxFQUFP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
@@ -0,0 +1,20 @@
1
+ function lookupVariable(name, sceneObject) {
2
+ const variables = sceneObject.state.$variables;
3
+ if (!variables) {
4
+ if (sceneObject.parent) {
5
+ return lookupVariable(name, sceneObject.parent);
6
+ } else {
7
+ return null;
8
+ }
9
+ }
10
+ const found = variables.getByName(name);
11
+ if (found) {
12
+ return found;
13
+ } else if (sceneObject.parent) {
14
+ return lookupVariable(name, sceneObject.parent);
15
+ }
16
+ return null;
17
+ }
18
+
19
+ export { lookupVariable };
20
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9va3VwVmFyaWFibGUuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3ZhcmlhYmxlcy9sb29rdXBWYXJpYWJsZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBsb29rdXBWYXJpYWJsZShuYW1lLCBzY2VuZU9iamVjdCkge1xuICBjb25zdCB2YXJpYWJsZXMgPSBzY2VuZU9iamVjdC5zdGF0ZS4kdmFyaWFibGVzO1xuICBpZiAoIXZhcmlhYmxlcykge1xuICAgIGlmIChzY2VuZU9iamVjdC5wYXJlbnQpIHtcbiAgICAgIHJldHVybiBsb29rdXBWYXJpYWJsZShuYW1lLCBzY2VuZU9iamVjdC5wYXJlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgY29uc3QgZm91bmQgPSB2YXJpYWJsZXMuZ2V0QnlOYW1lKG5hbWUpO1xuICBpZiAoZm91bmQpIHtcbiAgICByZXR1cm4gZm91bmQ7XG4gIH0gZWxzZSBpZiAoc2NlbmVPYmplY3QucGFyZW50KSB7XG4gICAgcmV0dXJuIGxvb2t1cFZhcmlhYmxlKG5hbWUsIHNjZW5lT2JqZWN0LnBhcmVudCk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCB7IGxvb2t1cFZhcmlhYmxlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWJHOXZhM1Z3Vm1GeWFXRmliR1V1YW5NaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMM055WXk5MllYSnBZV0pzWlhNdmJHOXZhM1Z3Vm1GeWFXRmliR1V1ZEhNaVhTd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIc2dVMk5sYm1WUFltcGxZM1FnZlNCbWNtOXRJQ2N1TGk5amIzSmxMM1I1Y0dWekp6dGNibWx0Y0c5eWRDQjdJRk5qWlc1bFZtRnlhV0ZpYkdVZ2ZTQm1jbTl0SUNjdUwzUjVjR1Z6Snp0Y2JseHVMeW9xWEc0Z0tpQlhhV3hzSUhkaGJHc2dkR2hsSUhOalpXNWxJRzlpYW1WamRDQm5jbUZ3YUNCMWNDQjBieUIwYUdVZ2NtOXZkQ0JzYjI5cmFXNW5JR1p2Y2lCMGFHVWdabWx5YzNRZ2RtRnlhV0ZpYkdVZ2QybDBhQ0IwYUdVZ2MzQmxZMmxtYVdWa0lHNWhiV1ZjYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHeHZiMnQxY0ZaaGNtbGhZbXhsS0c1aGJXVTZJSE4wY21sdVp5d2djMk5sYm1WUFltcGxZM1E2SUZOalpXNWxUMkpxWldOMEtUb2dVMk5sYm1WV1lYSnBZV0pzWlNCOElHNTFiR3dnZTF4dUlDQmpiMjV6ZENCMllYSnBZV0pzWlhNZ1BTQnpZMlZ1WlU5aWFtVmpkQzV6ZEdGMFpTNGtkbUZ5YVdGaWJHVnpPMXh1SUNCcFppQW9JWFpoY21saFlteGxjeWtnZTF4dUlDQWdJR2xtSUNoelkyVnVaVTlpYW1WamRDNXdZWEpsYm5RcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCc2IyOXJkWEJXWVhKcFlXSnNaU2h1WVcxbExDQnpZMlZ1WlU5aWFtVmpkQzV3WVhKbGJuUXBPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnYm5Wc2JEdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQmpiMjV6ZENCbWIzVnVaQ0E5SUhaaGNtbGhZbXhsY3k1blpYUkNlVTVoYldVb2JtRnRaU2s3WEc0Z0lHbG1JQ2htYjNWdVpDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCbWIzVnVaRHRjYmlBZ2ZTQmxiSE5sSUdsbUlDaHpZMlZ1WlU5aWFtVmpkQzV3WVhKbGJuUXBJSHRjYmlBZ0lDQnlaWFIxY200Z2JHOXZhM1Z3Vm1GeWFXRmliR1VvYm1GdFpTd2djMk5sYm1WUFltcGxZM1F1Y0dGeVpXNTBLVHRjYmlBZ2ZWeHVYRzRnSUhKbGRIVnliaUJ1ZFd4c08xeHVmVnh1SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVUxblFpeFRRVUZCTEdOQlFVRXNRMEZCWlN4TlFVRmpMRmRCUVdkRUxFVkJRVUU3UVVGRE0wWXNSVUZCVFN4TlFVRkJMRk5CUVVFc1IwRkJXU3haUVVGWkxFdEJRVTBzUTBGQlFTeFZRVUZCTEVOQlFVRTdRVUZEY0VNc1JVRkJRU3hKUVVGSkxFTkJRVU1zVTBGQlZ5eEZRVUZCTzBGQlEyUXNTVUZCUVN4SlFVRkpMRmxCUVZrc1RVRkJVU3hGUVVGQk8wRkJRM1JDTEUxQlFVOHNUMEZCUVN4alFVRkJMRU5CUVdVc1NVRkJUU3hGUVVGQkxGZEJRVUVzUTBGQldTeE5RVUZOTEVOQlFVRXNRMEZCUVR0QlFVRkJMRXRCUTNwRExFMUJRVUU3UVVGRFRDeE5RVUZQTEU5QlFVRXNTVUZCUVN4RFFVRkJPMEZCUVVFc1MwRkRWRHRCUVVGQkxFZEJRMFk3UVVGRlFTeEZRVUZOTEUxQlFVRXNTMEZCUVN4SFFVRlJMRk5CUVZVc1EwRkJRU3hUUVVGQkxFTkJRVlVzU1VGQlNTeERRVUZCTEVOQlFVRTdRVUZEZEVNc1JVRkJRU3hKUVVGSkxFdEJRVThzUlVGQlFUdEJRVU5VTEVsQlFVOHNUMEZCUVN4TFFVRkJMRU5CUVVFN1FVRkJRU3hIUVVOVUxFMUJRVUVzU1VGQlZ5eFpRVUZaTEUxQlFWRXNSVUZCUVR0QlFVTTNRaXhKUVVGUExFOUJRVUVzWTBGQlFTeERRVUZsTEVsQlFVMHNSVUZCUVN4WFFVRkJMRU5CUVZrc1RVRkJUU3hEUVVGQkxFTkJRVUU3UVVGQlFTeEhRVU5vUkR0QlFVVkJMRVZCUVU4c1QwRkJRU3hKUVVGQkxFTkJRVUU3UVVGRFZEczdPenNpZlE9PVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1nQixTQUFBLGNBQUEsQ0FBZSxNQUFjLFdBQWdELEVBQUE7QUFDckYsRUFBQSxNQUFBLFNBQUEsR0FBWSxZQUFZLEtBQU0sQ0FBQSxVQUFBLENBQUE7QUFDcEMsRUFBQSxJQUFJLENBQUMsU0FBVyxFQUFBO0FBQ2QsSUFBQSxJQUFJLFlBQVksTUFBUSxFQUFBO0FBQ2YsTUFBQSxPQUFBLGNBQUEsQ0FBZSxJQUFNLEVBQUEsV0FBQSxDQUFZLE1BQU0sQ0FBQSxDQUFBO0tBQ3pDLE1BQUE7QUFDRSxNQUFBLE9BQUEsSUFBQSxDQUFBO0FBQUEsS0FBQTtBQUNULEdBQUE7QUFHSSxFQUFBLE1BQUEsS0FBQSxHQUFRLFNBQVUsQ0FBQSxTQUFBLENBQVUsSUFBSSxDQUFBLENBQUE7QUFDdEMsRUFBQSxJQUFJLEtBQU8sRUFBQTtBQUNGLElBQUEsT0FBQSxLQUFBLENBQUE7QUFBQSxHQUFBLE1BQUEsSUFDRSxZQUFZLE1BQVEsRUFBQTtBQUN0QixJQUFBLE9BQUEsY0FBQSxDQUFlLElBQU0sRUFBQSxXQUFBLENBQVksTUFBTSxDQUFBLENBQUE7QUFBQSxHQUFBO0FBR3pDLEVBQUEsT0FBQSxJQUFBLENBQUE7QUFDVDs7OzsifQ==