@jablum/weather-mcp 1.7.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 (235) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1319 -0
  3. package/dist/analytics/anonymizer.d.ts +37 -0
  4. package/dist/analytics/anonymizer.d.ts.map +1 -0
  5. package/dist/analytics/anonymizer.js +112 -0
  6. package/dist/analytics/anonymizer.js.map +1 -0
  7. package/dist/analytics/collector.d.ts +72 -0
  8. package/dist/analytics/collector.d.ts.map +1 -0
  9. package/dist/analytics/collector.js +282 -0
  10. package/dist/analytics/collector.js.map +1 -0
  11. package/dist/analytics/config.d.ts +15 -0
  12. package/dist/analytics/config.d.ts.map +1 -0
  13. package/dist/analytics/config.js +172 -0
  14. package/dist/analytics/config.js.map +1 -0
  15. package/dist/analytics/index.d.ts +8 -0
  16. package/dist/analytics/index.d.ts.map +1 -0
  17. package/dist/analytics/index.js +7 -0
  18. package/dist/analytics/index.js.map +1 -0
  19. package/dist/analytics/middleware.d.ts +33 -0
  20. package/dist/analytics/middleware.d.ts.map +1 -0
  21. package/dist/analytics/middleware.js +99 -0
  22. package/dist/analytics/middleware.js.map +1 -0
  23. package/dist/analytics/transport.d.ts +11 -0
  24. package/dist/analytics/transport.d.ts.map +1 -0
  25. package/dist/analytics/transport.js +92 -0
  26. package/dist/analytics/transport.js.map +1 -0
  27. package/dist/analytics/types.d.ts +74 -0
  28. package/dist/analytics/types.d.ts.map +1 -0
  29. package/dist/analytics/types.js +6 -0
  30. package/dist/analytics/types.js.map +1 -0
  31. package/dist/config/api.d.ts +30 -0
  32. package/dist/config/api.d.ts.map +1 -0
  33. package/dist/config/api.js +32 -0
  34. package/dist/config/api.js.map +1 -0
  35. package/dist/config/cache.d.ts +31 -0
  36. package/dist/config/cache.d.ts.map +1 -0
  37. package/dist/config/cache.js +108 -0
  38. package/dist/config/cache.js.map +1 -0
  39. package/dist/config/displayThresholds.d.ts +83 -0
  40. package/dist/config/displayThresholds.d.ts.map +1 -0
  41. package/dist/config/displayThresholds.js +83 -0
  42. package/dist/config/displayThresholds.js.map +1 -0
  43. package/dist/config/tools.d.ts +44 -0
  44. package/dist/config/tools.d.ts.map +1 -0
  45. package/dist/config/tools.js +269 -0
  46. package/dist/config/tools.js.map +1 -0
  47. package/dist/errors/ApiError.d.ts +62 -0
  48. package/dist/errors/ApiError.d.ts.map +1 -0
  49. package/dist/errors/ApiError.js +171 -0
  50. package/dist/errors/ApiError.js.map +1 -0
  51. package/dist/handlers/airQualityHandler.d.ts +11 -0
  52. package/dist/handlers/airQualityHandler.d.ts.map +1 -0
  53. package/dist/handlers/airQualityHandler.js +154 -0
  54. package/dist/handlers/airQualityHandler.js.map +1 -0
  55. package/dist/handlers/alertsHandler.d.ts +11 -0
  56. package/dist/handlers/alertsHandler.d.ts.map +1 -0
  57. package/dist/handlers/alertsHandler.js +98 -0
  58. package/dist/handlers/alertsHandler.js.map +1 -0
  59. package/dist/handlers/currentConditionsHandler.d.ts +13 -0
  60. package/dist/handlers/currentConditionsHandler.d.ts.map +1 -0
  61. package/dist/handlers/currentConditionsHandler.js +296 -0
  62. package/dist/handlers/currentConditionsHandler.js.map +1 -0
  63. package/dist/handlers/forecastHandler.d.ts +16 -0
  64. package/dist/handlers/forecastHandler.d.ts.map +1 -0
  65. package/dist/handlers/forecastHandler.js +454 -0
  66. package/dist/handlers/forecastHandler.js.map +1 -0
  67. package/dist/handlers/historicalWeatherHandler.d.ts +12 -0
  68. package/dist/handlers/historicalWeatherHandler.d.ts.map +1 -0
  69. package/dist/handlers/historicalWeatherHandler.js +188 -0
  70. package/dist/handlers/historicalWeatherHandler.js.map +1 -0
  71. package/dist/handlers/lightningHandler.d.ts +14 -0
  72. package/dist/handlers/lightningHandler.d.ts.map +1 -0
  73. package/dist/handlers/lightningHandler.js +258 -0
  74. package/dist/handlers/lightningHandler.js.map +1 -0
  75. package/dist/handlers/locationHandler.d.ts +12 -0
  76. package/dist/handlers/locationHandler.d.ts.map +1 -0
  77. package/dist/handlers/locationHandler.js +149 -0
  78. package/dist/handlers/locationHandler.js.map +1 -0
  79. package/dist/handlers/marineConditionsHandler.d.ts +13 -0
  80. package/dist/handlers/marineConditionsHandler.d.ts.map +1 -0
  81. package/dist/handlers/marineConditionsHandler.js +270 -0
  82. package/dist/handlers/marineConditionsHandler.js.map +1 -0
  83. package/dist/handlers/riverConditionsHandler.d.ts +11 -0
  84. package/dist/handlers/riverConditionsHandler.d.ts.map +1 -0
  85. package/dist/handlers/riverConditionsHandler.js +176 -0
  86. package/dist/handlers/riverConditionsHandler.js.map +1 -0
  87. package/dist/handlers/savedLocationsHandler.d.ts +50 -0
  88. package/dist/handlers/savedLocationsHandler.d.ts.map +1 -0
  89. package/dist/handlers/savedLocationsHandler.js +397 -0
  90. package/dist/handlers/savedLocationsHandler.js.map +1 -0
  91. package/dist/handlers/statusHandler.d.ts +12 -0
  92. package/dist/handlers/statusHandler.d.ts.map +1 -0
  93. package/dist/handlers/statusHandler.js +115 -0
  94. package/dist/handlers/statusHandler.js.map +1 -0
  95. package/dist/handlers/weatherImageryHandler.d.ts +14 -0
  96. package/dist/handlers/weatherImageryHandler.d.ts.map +1 -0
  97. package/dist/handlers/weatherImageryHandler.js +143 -0
  98. package/dist/handlers/weatherImageryHandler.js.map +1 -0
  99. package/dist/handlers/wildfireHandler.d.ts +11 -0
  100. package/dist/handlers/wildfireHandler.d.ts.map +1 -0
  101. package/dist/handlers/wildfireHandler.js +186 -0
  102. package/dist/handlers/wildfireHandler.js.map +1 -0
  103. package/dist/index.d.ts +7 -0
  104. package/dist/index.d.ts.map +1 -0
  105. package/dist/index.js +735 -0
  106. package/dist/index.js.map +1 -0
  107. package/dist/services/blitzortung.d.ts +67 -0
  108. package/dist/services/blitzortung.d.ts.map +1 -0
  109. package/dist/services/blitzortung.js +475 -0
  110. package/dist/services/blitzortung.js.map +1 -0
  111. package/dist/services/geocoding.d.ts +57 -0
  112. package/dist/services/geocoding.d.ts.map +1 -0
  113. package/dist/services/geocoding.js +393 -0
  114. package/dist/services/geocoding.js.map +1 -0
  115. package/dist/services/locationStore.d.ts +62 -0
  116. package/dist/services/locationStore.d.ts.map +1 -0
  117. package/dist/services/locationStore.js +201 -0
  118. package/dist/services/locationStore.js.map +1 -0
  119. package/dist/services/ncei.d.ts +61 -0
  120. package/dist/services/ncei.d.ts.map +1 -0
  121. package/dist/services/ncei.js +126 -0
  122. package/dist/services/ncei.js.map +1 -0
  123. package/dist/services/nifc.d.ts +44 -0
  124. package/dist/services/nifc.d.ts.map +1 -0
  125. package/dist/services/nifc.js +159 -0
  126. package/dist/services/nifc.js.map +1 -0
  127. package/dist/services/noaa.d.ts +161 -0
  128. package/dist/services/noaa.d.ts.map +1 -0
  129. package/dist/services/noaa.js +681 -0
  130. package/dist/services/noaa.js.map +1 -0
  131. package/dist/services/nominatim.d.ts +62 -0
  132. package/dist/services/nominatim.d.ts.map +1 -0
  133. package/dist/services/nominatim.js +254 -0
  134. package/dist/services/nominatim.js.map +1 -0
  135. package/dist/services/openmeteo.d.ts +189 -0
  136. package/dist/services/openmeteo.d.ts.map +1 -0
  137. package/dist/services/openmeteo.js +936 -0
  138. package/dist/services/openmeteo.js.map +1 -0
  139. package/dist/services/rainviewer.d.ts +37 -0
  140. package/dist/services/rainviewer.d.ts.map +1 -0
  141. package/dist/services/rainviewer.js +115 -0
  142. package/dist/services/rainviewer.js.map +1 -0
  143. package/dist/types/imagery.d.ts +82 -0
  144. package/dist/types/imagery.d.ts.map +1 -0
  145. package/dist/types/imagery.js +6 -0
  146. package/dist/types/imagery.js.map +1 -0
  147. package/dist/types/lightning.d.ts +89 -0
  148. package/dist/types/lightning.d.ts.map +1 -0
  149. package/dist/types/lightning.js +6 -0
  150. package/dist/types/lightning.js.map +1 -0
  151. package/dist/types/noaa.d.ts +535 -0
  152. package/dist/types/noaa.d.ts.map +1 -0
  153. package/dist/types/noaa.js +5 -0
  154. package/dist/types/noaa.js.map +1 -0
  155. package/dist/types/nominatim.d.ts +72 -0
  156. package/dist/types/nominatim.d.ts.map +1 -0
  157. package/dist/types/nominatim.js +6 -0
  158. package/dist/types/nominatim.js.map +1 -0
  159. package/dist/types/openmeteo.d.ts +583 -0
  160. package/dist/types/openmeteo.d.ts.map +1 -0
  161. package/dist/types/openmeteo.js +6 -0
  162. package/dist/types/openmeteo.js.map +1 -0
  163. package/dist/types/savedLocations.d.ts +58 -0
  164. package/dist/types/savedLocations.d.ts.map +1 -0
  165. package/dist/types/savedLocations.js +5 -0
  166. package/dist/types/savedLocations.js.map +1 -0
  167. package/dist/types/wildfire.d.ts +83 -0
  168. package/dist/types/wildfire.d.ts.map +1 -0
  169. package/dist/types/wildfire.js +5 -0
  170. package/dist/types/wildfire.js.map +1 -0
  171. package/dist/utils/airQuality.d.ts +54 -0
  172. package/dist/utils/airQuality.d.ts.map +1 -0
  173. package/dist/utils/airQuality.js +251 -0
  174. package/dist/utils/airQuality.js.map +1 -0
  175. package/dist/utils/cache.d.ts +69 -0
  176. package/dist/utils/cache.d.ts.map +1 -0
  177. package/dist/utils/cache.js +164 -0
  178. package/dist/utils/cache.js.map +1 -0
  179. package/dist/utils/distance.d.ts +25 -0
  180. package/dist/utils/distance.d.ts.map +1 -0
  181. package/dist/utils/distance.js +40 -0
  182. package/dist/utils/distance.js.map +1 -0
  183. package/dist/utils/fireWeather.d.ts +76 -0
  184. package/dist/utils/fireWeather.d.ts.map +1 -0
  185. package/dist/utils/fireWeather.js +243 -0
  186. package/dist/utils/fireWeather.js.map +1 -0
  187. package/dist/utils/geography.d.ts +79 -0
  188. package/dist/utils/geography.d.ts.map +1 -0
  189. package/dist/utils/geography.js +266 -0
  190. package/dist/utils/geography.js.map +1 -0
  191. package/dist/utils/geohash.d.ts +62 -0
  192. package/dist/utils/geohash.d.ts.map +1 -0
  193. package/dist/utils/geohash.js +146 -0
  194. package/dist/utils/geohash.js.map +1 -0
  195. package/dist/utils/locationResolver.d.ts +34 -0
  196. package/dist/utils/locationResolver.d.ts.map +1 -0
  197. package/dist/utils/locationResolver.js +120 -0
  198. package/dist/utils/locationResolver.js.map +1 -0
  199. package/dist/utils/logger.d.ts +75 -0
  200. package/dist/utils/logger.d.ts.map +1 -0
  201. package/dist/utils/logger.js +153 -0
  202. package/dist/utils/logger.js.map +1 -0
  203. package/dist/utils/marine.d.ts +59 -0
  204. package/dist/utils/marine.d.ts.map +1 -0
  205. package/dist/utils/marine.js +215 -0
  206. package/dist/utils/marine.js.map +1 -0
  207. package/dist/utils/normals.d.ts +86 -0
  208. package/dist/utils/normals.d.ts.map +1 -0
  209. package/dist/utils/normals.js +223 -0
  210. package/dist/utils/normals.js.map +1 -0
  211. package/dist/utils/snow.d.ts +45 -0
  212. package/dist/utils/snow.d.ts.map +1 -0
  213. package/dist/utils/snow.js +144 -0
  214. package/dist/utils/snow.js.map +1 -0
  215. package/dist/utils/temperatureConversion.d.ts +12 -0
  216. package/dist/utils/temperatureConversion.d.ts.map +1 -0
  217. package/dist/utils/temperatureConversion.js +17 -0
  218. package/dist/utils/temperatureConversion.js.map +1 -0
  219. package/dist/utils/timezone.d.ts +56 -0
  220. package/dist/utils/timezone.d.ts.map +1 -0
  221. package/dist/utils/timezone.js +167 -0
  222. package/dist/utils/timezone.js.map +1 -0
  223. package/dist/utils/units.d.ts +69 -0
  224. package/dist/utils/units.d.ts.map +1 -0
  225. package/dist/utils/units.js +158 -0
  226. package/dist/utils/units.js.map +1 -0
  227. package/dist/utils/validation.d.ts +89 -0
  228. package/dist/utils/validation.d.ts.map +1 -0
  229. package/dist/utils/validation.js +177 -0
  230. package/dist/utils/validation.js.map +1 -0
  231. package/dist/utils/version.d.ts +15 -0
  232. package/dist/utils/version.d.ts.map +1 -0
  233. package/dist/utils/version.js +24 -0
  234. package/dist/utils/version.js.map +1 -0
  235. package/package.json +74 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Blitzortung.org MQTT client for real-time lightning detection
3
+ * Community-operated global lightning detection network (free, no API key required)
4
+ *
5
+ * Data access via public MQTT broker maintained for homeassistant-blitzortung integration
6
+ * @see https://github.com/mrk-its/homeassistant-blitzortung
7
+ * @see https://www.blitzortung.org/
8
+ */
9
+ import { LightningStrike } from '../types/lightning.js';
10
+ export declare class BlitzortungService {
11
+ private client;
12
+ private readonly brokerUrl;
13
+ private readonly topicPrefix;
14
+ private readonly reconnectPeriod;
15
+ private readonly connectTimeout;
16
+ private strikeBuffer;
17
+ private readonly bufferDuration;
18
+ private readonly maxBufferSize;
19
+ private subscribedGeohashes;
20
+ private readonly maxSubscriptions;
21
+ private isConnecting;
22
+ private isConnected;
23
+ constructor();
24
+ /**
25
+ * Connect to MQTT broker if not already connected
26
+ */
27
+ private ensureConnected;
28
+ /**
29
+ * Handle incoming MQTT message
30
+ */
31
+ private handleMessage;
32
+ /**
33
+ * Subscribe to geohash topics for a location
34
+ */
35
+ private subscribeToLocation;
36
+ /**
37
+ * Evict oldest subscriptions to make room for new ones (LRU eviction)
38
+ */
39
+ private evictOldestSubscriptions;
40
+ /**
41
+ * Periodically prune stale subscriptions (not accessed in last hour)
42
+ */
43
+ private startSubscriptionPruning;
44
+ /**
45
+ * Get recent lightning strikes from buffer
46
+ */
47
+ getLightningStrikes(latitude: number, longitude: number, radiusKm?: number, timeWindowMinutes?: number): Promise<LightningStrike[]>;
48
+ /**
49
+ * Filter strikes from buffer based on location and time window
50
+ */
51
+ private filterStrikes;
52
+ /**
53
+ * Clean up old strikes from buffer
54
+ */
55
+ private cleanupBuffer;
56
+ /**
57
+ * Start periodic buffer cleanup
58
+ */
59
+ private startCleanupInterval;
60
+ /**
61
+ * Disconnect from MQTT broker
62
+ * This method is available for graceful shutdown scenarios
63
+ */
64
+ disconnect(): Promise<void>;
65
+ }
66
+ export declare const blitzortungService: BlitzortungService;
67
+ //# sourceMappingURL=blitzortung.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blitzortung.d.ts","sourceRoot":"","sources":["../../src/services/blitzortung.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAuCxD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAA2B;IAazC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2E;IACrG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IAGxC,OAAO,CAAC,YAAY,CAA2C;IAC/D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmB;IAClD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IAGvC,OAAO,CAAC,mBAAmB,CAAkC;IAC7D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAM;IACvC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,WAAW,CAAS;;IAS5B;;OAEG;YACW,eAAe;IA4E7B;;OAEG;IACH,OAAO,CAAC,aAAa;IAwFrB;;OAEG;YACW,mBAAmB;IAsEjC;;OAEG;YACW,wBAAwB;IA+CtC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAoDhC;;OAEG;IACG,mBAAmB,CACvB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,MAAY,EACtB,iBAAiB,GAAE,MAAW,GAC7B,OAAO,CAAC,eAAe,EAAE,CAAC;IAwC7B;;OAEG;IACH,OAAO,CAAC,aAAa;IAuCrB;;OAEG;IACH,OAAO,CAAC,aAAa;IAoBrB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAO5B;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAiBlC;AAGD,eAAO,MAAM,kBAAkB,oBAA2B,CAAC"}
@@ -0,0 +1,475 @@
1
+ /**
2
+ * Blitzortung.org MQTT client for real-time lightning detection
3
+ * Community-operated global lightning detection network (free, no API key required)
4
+ *
5
+ * Data access via public MQTT broker maintained for homeassistant-blitzortung integration
6
+ * @see https://github.com/mrk-its/homeassistant-blitzortung
7
+ * @see https://www.blitzortung.org/
8
+ */
9
+ import mqtt from 'mqtt';
10
+ import { logger, redactCoordinatesForLogging } from '../utils/logger.js';
11
+ import { calculateGeohashSubscriptions } from '../utils/geohash.js';
12
+ /**
13
+ * Calculate distance between two coordinates using Haversine formula
14
+ */
15
+ function calculateDistance(lat1, lon1, lat2, lon2) {
16
+ const R = 6371; // Earth's radius in km
17
+ const dLat = ((lat2 - lat1) * Math.PI) / 180;
18
+ const dLon = ((lon2 - lon1) * Math.PI) / 180;
19
+ const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
20
+ Math.cos((lat1 * Math.PI) / 180) *
21
+ Math.cos((lat2 * Math.PI) / 180) *
22
+ Math.sin(dLon / 2) *
23
+ Math.sin(dLon / 2);
24
+ const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
25
+ return R * c;
26
+ }
27
+ export class BlitzortungService {
28
+ client = null;
29
+ // SECURITY WARNING: Default broker uses PLAINTEXT MQTT (port 1883)
30
+ // The public Blitzortung community broker (blitzortung.ha.sed.pl) does not support TLS.
31
+ // While lightning strike data is public information, plaintext connections allow:
32
+ // - Network observers to see which regions you're monitoring (via MQTT subscriptions)
33
+ // - Potential message tampering (injecting false lightning data)
34
+ //
35
+ // RECOMMENDED MITIGATIONS:
36
+ // 1. Set BLITZORTUNG_MQTT_URL to a TLS-enabled broker (mqtts:// or wss://)
37
+ // 2. Run a local MQTT proxy with TLS termination
38
+ // 3. Deploy in a trusted network environment
39
+ //
40
+ // Location privacy: Geohash subscriptions have ~4-40km precision (limited tracking risk)
41
+ brokerUrl = process.env.BLITZORTUNG_MQTT_URL || 'mqtt://blitzortung.ha.sed.pl:1883';
42
+ topicPrefix = 'blitzortung/1.1';
43
+ reconnectPeriod = 5000; // 5 seconds
44
+ connectTimeout = 30000; // 30 seconds
45
+ // Rolling buffer of recent strikes (last 2 hours)
46
+ strikeBuffer = new Map();
47
+ bufferDuration = 120 * 60 * 1000; // 2 hours in milliseconds
48
+ maxBufferSize = 10000; // Maximum strikes to buffer (safety limit)
49
+ // Subscription management with LRU tracking
50
+ subscribedGeohashes = new Map(); // geohash -> last access timestamp
51
+ maxSubscriptions = 50; // Limit concurrent subscriptions to prevent unbounded growth
52
+ isConnecting = false;
53
+ isConnected = false;
54
+ constructor() {
55
+ // Start cleanup interval
56
+ this.startCleanupInterval();
57
+ // Start subscription pruning interval
58
+ this.startSubscriptionPruning();
59
+ }
60
+ /**
61
+ * Connect to MQTT broker if not already connected
62
+ */
63
+ async ensureConnected() {
64
+ if (this.isConnected && this.client) {
65
+ return;
66
+ }
67
+ if (this.isConnecting) {
68
+ // Wait for existing connection attempt
69
+ return new Promise((resolve) => {
70
+ const checkInterval = setInterval(() => {
71
+ if (this.isConnected || !this.isConnecting) {
72
+ clearInterval(checkInterval);
73
+ resolve();
74
+ }
75
+ }, 100);
76
+ });
77
+ }
78
+ this.isConnecting = true;
79
+ try {
80
+ // Security warning for plaintext connections
81
+ const isPlaintext = this.brokerUrl.startsWith('mqtt://') ||
82
+ (!this.brokerUrl.startsWith('mqtts://') && !this.brokerUrl.startsWith('wss://'));
83
+ if (isPlaintext) {
84
+ logger.warn('SECURITY: Using plaintext MQTT connection (unencrypted)', {
85
+ broker: this.brokerUrl,
86
+ securityEvent: true,
87
+ recommendation: 'Use BLITZORTUNG_MQTT_URL environment variable to configure TLS broker (mqtts:// or wss://)'
88
+ });
89
+ }
90
+ logger.info('Connecting to Blitzortung MQTT broker', {
91
+ broker: this.brokerUrl,
92
+ encrypted: !isPlaintext
93
+ });
94
+ this.client = mqtt.connect(this.brokerUrl, {
95
+ reconnectPeriod: this.reconnectPeriod,
96
+ connectTimeout: this.connectTimeout,
97
+ clientId: `weather-mcp-${Math.random().toString(16).slice(2, 10)}`
98
+ });
99
+ await new Promise((resolve, reject) => {
100
+ const timeoutId = setTimeout(() => {
101
+ reject(new Error('MQTT connection timeout'));
102
+ }, this.connectTimeout);
103
+ this.client.on('connect', () => {
104
+ clearTimeout(timeoutId);
105
+ this.isConnected = true;
106
+ this.isConnecting = false;
107
+ logger.info('Connected to Blitzortung MQTT broker');
108
+ resolve();
109
+ });
110
+ this.client.on('error', (error) => {
111
+ clearTimeout(timeoutId);
112
+ this.isConnecting = false;
113
+ logger.error('MQTT connection error', error);
114
+ reject(error);
115
+ });
116
+ this.client.on('close', () => {
117
+ this.isConnected = false;
118
+ logger.warn('MQTT connection closed');
119
+ });
120
+ this.client.on('message', this.handleMessage.bind(this));
121
+ });
122
+ }
123
+ catch (error) {
124
+ this.isConnecting = false;
125
+ throw error;
126
+ }
127
+ }
128
+ /**
129
+ * Handle incoming MQTT message
130
+ */
131
+ handleMessage(topic, payload) {
132
+ try {
133
+ const payloadStr = payload.toString();
134
+ const data = JSON.parse(payloadStr);
135
+ // Validate required fields
136
+ if (!data.lat || !data.lon || !data.time) {
137
+ logger.warn('Lightning strike missing required fields', {
138
+ topic,
139
+ hasLat: !!data.lat,
140
+ hasLon: !!data.lon,
141
+ hasTime: !!data.time
142
+ });
143
+ return;
144
+ }
145
+ // Convert timestamp - Blitzortung sends nanoseconds, convert to milliseconds
146
+ // Example: 1762715394083570200 nanoseconds -> 1731178800000 milliseconds
147
+ let timestampMs = data.time;
148
+ if (data.time > 10000000000000) {
149
+ // If timestamp is > year 2286 in milliseconds, it's probably in nanoseconds
150
+ timestampMs = Math.floor(data.time / 1000000);
151
+ }
152
+ // Convert to our LightningStrike format
153
+ const strike = {
154
+ timestamp: new Date(timestampMs),
155
+ latitude: data.lat,
156
+ longitude: data.lon,
157
+ polarity: data.pol || 0,
158
+ amplitude: data.mcs || 0,
159
+ stationCount: data.stat,
160
+ distance: 0 // Will be calculated when filtering
161
+ };
162
+ // Validate timestamp
163
+ if (isNaN(strike.timestamp.getTime())) {
164
+ logger.warn('Invalid timestamp in lightning strike', {
165
+ topic,
166
+ time: data.time,
167
+ converted: timestampMs
168
+ });
169
+ return;
170
+ }
171
+ // Check buffer size limit before adding (safety bounds checking)
172
+ if (this.strikeBuffer.size >= this.maxBufferSize) {
173
+ logger.warn('Lightning strike buffer at capacity, removing oldest entries', {
174
+ currentSize: this.strikeBuffer.size,
175
+ maxSize: this.maxBufferSize,
176
+ securityEvent: true
177
+ });
178
+ // Remove oldest 10% of entries to make room
179
+ const entriesToRemove = Math.floor(this.maxBufferSize * 0.1);
180
+ const iterator = this.strikeBuffer.keys();
181
+ for (let i = 0; i < entriesToRemove; i++) {
182
+ const result = iterator.next();
183
+ if (!result.done) {
184
+ this.strikeBuffer.delete(result.value);
185
+ }
186
+ }
187
+ }
188
+ // Add to buffer with unique key
189
+ const key = `${data.time}_${data.lat}_${data.lon}`;
190
+ this.strikeBuffer.set(key, strike);
191
+ // Log strikes at DEBUG level with coordinate redaction for privacy
192
+ // Strike coordinates are rounded to ~1km precision to prevent tracking individual locations
193
+ const redacted = redactCoordinatesForLogging(strike.latitude, strike.longitude);
194
+ logger.debug('Lightning strike added to buffer', {
195
+ bufferSize: this.strikeBuffer.size,
196
+ strike: {
197
+ lat: redacted.lat,
198
+ lon: redacted.lon,
199
+ time: strike.timestamp.toISOString(),
200
+ topic
201
+ }
202
+ });
203
+ }
204
+ catch (error) {
205
+ logger.warn('Failed to parse lightning strike message', {
206
+ error: error.message,
207
+ topic
208
+ });
209
+ }
210
+ }
211
+ /**
212
+ * Subscribe to geohash topics for a location
213
+ */
214
+ async subscribeToLocation(latitude, longitude, radiusKm) {
215
+ await this.ensureConnected();
216
+ if (!this.client) {
217
+ throw new Error('MQTT client not connected');
218
+ }
219
+ // Calculate required geohashes
220
+ const geohashes = calculateGeohashSubscriptions(latitude, longitude, radiusKm);
221
+ // Redact coordinates for logging to protect user privacy
222
+ const redacted = redactCoordinatesForLogging(latitude, longitude);
223
+ logger.info('Subscribing to geohash topics', {
224
+ latitude: redacted.lat,
225
+ longitude: redacted.lon,
226
+ radiusKm,
227
+ geohashCount: geohashes.size,
228
+ geohashes: Array.from(geohashes)
229
+ });
230
+ const now = Date.now();
231
+ // Check if we need to evict old subscriptions before adding new ones
232
+ const potentialNewSubs = Array.from(geohashes).filter(g => !this.subscribedGeohashes.has(g));
233
+ if (this.subscribedGeohashes.size + potentialNewSubs.length > this.maxSubscriptions) {
234
+ await this.evictOldestSubscriptions(potentialNewSubs.length);
235
+ }
236
+ // Subscribe to each geohash and track access time
237
+ const subscriptions = [];
238
+ for (const geohash of geohashes) {
239
+ if (!this.subscribedGeohashes.has(geohash)) {
240
+ // IMPORTANT: Geohash characters must be separated by slashes in the topic
241
+ // Example: "dhv" becomes "blitzortung/1.1/d/h/v/#"
242
+ const geohashPath = geohash.split('').join('/');
243
+ const topic = `${this.topicPrefix}/${geohashPath}/#`;
244
+ subscriptions.push(topic);
245
+ }
246
+ // Update access time for all geohashes in this request (LRU tracking)
247
+ this.subscribedGeohashes.set(geohash, now);
248
+ }
249
+ if (subscriptions.length > 0) {
250
+ await new Promise((resolve, reject) => {
251
+ this.client.subscribe(subscriptions, (error) => {
252
+ if (error) {
253
+ logger.error('Failed to subscribe to topics', error, {
254
+ topics: subscriptions
255
+ });
256
+ reject(error);
257
+ }
258
+ else {
259
+ logger.info('Subscribed to geohash topics', {
260
+ count: subscriptions.length,
261
+ totalSubscriptions: this.subscribedGeohashes.size
262
+ });
263
+ resolve();
264
+ }
265
+ });
266
+ });
267
+ }
268
+ else {
269
+ logger.debug('All required geohashes already subscribed', {
270
+ totalSubscriptions: this.subscribedGeohashes.size
271
+ });
272
+ }
273
+ }
274
+ /**
275
+ * Evict oldest subscriptions to make room for new ones (LRU eviction)
276
+ */
277
+ async evictOldestSubscriptions(slotsNeeded) {
278
+ if (!this.client || slotsNeeded <= 0) {
279
+ return;
280
+ }
281
+ // Sort by access time (oldest first)
282
+ const sorted = Array.from(this.subscribedGeohashes.entries())
283
+ .sort((a, b) => a[1] - b[1]);
284
+ // Evict oldest entries
285
+ const toEvict = sorted.slice(0, slotsNeeded);
286
+ const topics = toEvict.map(([geohash]) => {
287
+ const geohashPath = geohash.split('').join('/');
288
+ return `${this.topicPrefix}/${geohashPath}/#`;
289
+ });
290
+ logger.info('Evicting old geohash subscriptions (LRU)', {
291
+ count: toEvict.length,
292
+ slotsNeeded,
293
+ currentSize: this.subscribedGeohashes.size,
294
+ maxSubscriptions: this.maxSubscriptions,
295
+ securityEvent: true
296
+ });
297
+ // Unsubscribe from topics
298
+ await new Promise((resolve) => {
299
+ this.client.unsubscribe(topics, (error) => {
300
+ if (error) {
301
+ logger.warn('Failed to unsubscribe from topics', {
302
+ error: error.message,
303
+ topics: topics.slice(0, 3) // Log first 3 for debugging
304
+ });
305
+ }
306
+ resolve(); // Always resolve to avoid blocking
307
+ });
308
+ });
309
+ // Remove from tracking map
310
+ for (const [geohash] of toEvict) {
311
+ this.subscribedGeohashes.delete(geohash);
312
+ }
313
+ logger.debug('Eviction complete', {
314
+ remainingSubscriptions: this.subscribedGeohashes.size
315
+ });
316
+ }
317
+ /**
318
+ * Periodically prune stale subscriptions (not accessed in last hour)
319
+ */
320
+ startSubscriptionPruning() {
321
+ // Prune every 15 minutes
322
+ setInterval(async () => {
323
+ if (!this.client || this.subscribedGeohashes.size === 0) {
324
+ return;
325
+ }
326
+ const now = Date.now();
327
+ const staleThreshold = 60 * 60 * 1000; // 1 hour
328
+ const staleGeohashes = [];
329
+ for (const [geohash, lastAccess] of this.subscribedGeohashes.entries()) {
330
+ if (now - lastAccess > staleThreshold) {
331
+ staleGeohashes.push(geohash);
332
+ }
333
+ }
334
+ if (staleGeohashes.length > 0) {
335
+ logger.info('Pruning stale geohash subscriptions', {
336
+ count: staleGeohashes.length,
337
+ totalBefore: this.subscribedGeohashes.size
338
+ });
339
+ const topics = staleGeohashes.map(geohash => {
340
+ const geohashPath = geohash.split('').join('/');
341
+ return `${this.topicPrefix}/${geohashPath}/#`;
342
+ });
343
+ // Unsubscribe from stale topics
344
+ await new Promise((resolve) => {
345
+ this.client.unsubscribe(topics, (error) => {
346
+ if (error) {
347
+ logger.warn('Failed to unsubscribe from stale topics', {
348
+ error: error.message
349
+ });
350
+ }
351
+ resolve();
352
+ });
353
+ });
354
+ // Remove from tracking
355
+ for (const geohash of staleGeohashes) {
356
+ this.subscribedGeohashes.delete(geohash);
357
+ }
358
+ logger.debug('Pruning complete', {
359
+ remainingSubscriptions: this.subscribedGeohashes.size
360
+ });
361
+ }
362
+ }, 15 * 60 * 1000); // Every 15 minutes
363
+ }
364
+ /**
365
+ * Get recent lightning strikes from buffer
366
+ */
367
+ async getLightningStrikes(latitude, longitude, radiusKm = 100, timeWindowMinutes = 60) {
368
+ try {
369
+ // Redact coordinates for logging to protect user privacy
370
+ const redacted = redactCoordinatesForLogging(latitude, longitude);
371
+ logger.info('Fetching lightning data from Blitzortung MQTT', {
372
+ latitude: redacted.lat,
373
+ longitude: redacted.lon,
374
+ radiusKm,
375
+ timeWindowMinutes
376
+ });
377
+ // Subscribe to the location
378
+ await this.subscribeToLocation(latitude, longitude, radiusKm);
379
+ // Wait for strikes to accumulate in buffer after subscription
380
+ // This allows time for MQTT messages to arrive and be processed
381
+ // 10 seconds provides good coverage for active lightning areas
382
+ await new Promise(resolve => setTimeout(resolve, 10000));
383
+ // Filter strikes from buffer
384
+ const strikes = this.filterStrikes(latitude, longitude, radiusKm, timeWindowMinutes);
385
+ logger.info('Lightning data retrieved successfully', {
386
+ totalStrikes: strikes.length,
387
+ bufferSize: this.strikeBuffer.size
388
+ });
389
+ return strikes;
390
+ }
391
+ catch (error) {
392
+ logger.error('Failed to fetch lightning data', error);
393
+ // Return empty array on error to allow graceful degradation
394
+ return [];
395
+ }
396
+ }
397
+ /**
398
+ * Filter strikes from buffer based on location and time window
399
+ */
400
+ filterStrikes(centerLat, centerLon, radiusKm, timeWindowMinutes) {
401
+ const now = Date.now();
402
+ const cutoffTime = now - timeWindowMinutes * 60 * 1000;
403
+ const strikes = [];
404
+ for (const strike of this.strikeBuffer.values()) {
405
+ // Check time window
406
+ if (strike.timestamp.getTime() < cutoffTime) {
407
+ continue;
408
+ }
409
+ // Calculate distance
410
+ const distance = calculateDistance(centerLat, centerLon, strike.latitude, strike.longitude);
411
+ // Check if within radius
412
+ if (distance <= radiusKm) {
413
+ strikes.push({
414
+ ...strike,
415
+ distance
416
+ });
417
+ }
418
+ }
419
+ // Sort by distance (nearest first)
420
+ strikes.sort((a, b) => (a.distance || 0) - (b.distance || 0));
421
+ return strikes;
422
+ }
423
+ /**
424
+ * Clean up old strikes from buffer
425
+ */
426
+ cleanupBuffer() {
427
+ const now = Date.now();
428
+ const cutoffTime = now - this.bufferDuration;
429
+ let removedCount = 0;
430
+ for (const [key, strike] of this.strikeBuffer.entries()) {
431
+ if (strike.timestamp.getTime() < cutoffTime) {
432
+ this.strikeBuffer.delete(key);
433
+ removedCount++;
434
+ }
435
+ }
436
+ if (removedCount > 0) {
437
+ logger.debug('Cleaned up old lightning strikes from buffer', {
438
+ removed: removedCount,
439
+ remaining: this.strikeBuffer.size
440
+ });
441
+ }
442
+ }
443
+ /**
444
+ * Start periodic buffer cleanup
445
+ */
446
+ startCleanupInterval() {
447
+ // Clean up every 5 minutes
448
+ setInterval(() => {
449
+ this.cleanupBuffer();
450
+ }, 5 * 60 * 1000);
451
+ }
452
+ /**
453
+ * Disconnect from MQTT broker
454
+ * This method is available for graceful shutdown scenarios
455
+ */
456
+ async disconnect() {
457
+ if (this.client) {
458
+ logger.info('Disconnecting from Blitzortung MQTT broker', {
459
+ activeSubscriptions: this.subscribedGeohashes.size
460
+ });
461
+ await new Promise((resolve) => {
462
+ this.client.end(false, {}, () => {
463
+ this.isConnected = false;
464
+ this.subscribedGeohashes.clear();
465
+ logger.info('Disconnected from Blitzortung MQTT broker');
466
+ resolve();
467
+ });
468
+ });
469
+ this.client = null;
470
+ }
471
+ }
472
+ }
473
+ // Singleton instance
474
+ export const blitzortungService = new BlitzortungService();
475
+ //# sourceMappingURL=blitzortung.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blitzortung.js","sourceRoot":"","sources":["../../src/services/blitzortung.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,IAAoB,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAEzE,OAAO,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AAcpE;;GAEG;AACH,SAAS,iBAAiB,CACxB,IAAY,EACZ,IAAY,EACZ,IAAY,EACZ,IAAY;IAEZ,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,uBAAuB;IACvC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;IAC7C,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;IAE7C,MAAM,CAAC,GACL,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;YAC9B,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;YAChC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IAEvB,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,MAAM,OAAO,kBAAkB;IACrB,MAAM,GAAsB,IAAI,CAAC;IACzC,mEAAmE;IACnE,wFAAwF;IACxF,kFAAkF;IAClF,wFAAwF;IACxF,mEAAmE;IACnE,EAAE;IACF,2BAA2B;IAC3B,6EAA6E;IAC7E,mDAAmD;IACnD,+CAA+C;IAC/C,EAAE;IACF,yFAAyF;IACxE,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,mCAAmC,CAAC;IACpF,WAAW,GAAG,iBAAiB,CAAC;IAChC,eAAe,GAAG,IAAI,CAAC,CAAC,YAAY;IACpC,cAAc,GAAG,KAAK,CAAC,CAAC,aAAa;IAEtD,kDAAkD;IAC1C,YAAY,GAAiC,IAAI,GAAG,EAAE,CAAC;IAC9C,cAAc,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,0BAA0B;IAC5D,aAAa,GAAG,KAAK,CAAC,CAAC,2CAA2C;IAEnF,4CAA4C;IACpC,mBAAmB,GAAwB,IAAI,GAAG,EAAE,CAAC,CAAC,mCAAmC;IAChF,gBAAgB,GAAG,EAAE,CAAC,CAAC,6DAA6D;IAC7F,YAAY,GAAG,KAAK,CAAC;IACrB,WAAW,GAAG,KAAK,CAAC;IAE5B;QACE,yBAAyB;QACzB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,sCAAsC;QACtC,IAAI,CAAC,wBAAwB,EAAE,CAAC;IAClC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe;QAC3B,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACpC,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,uCAAuC;YACvC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC7B,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;oBACrC,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;wBAC3C,aAAa,CAAC,aAAa,CAAC,CAAC;wBAC7B,OAAO,EAAE,CAAC;oBACZ,CAAC;gBACH,CAAC,EAAE,GAAG,CAAC,CAAC;YACV,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,IAAI,CAAC;YACH,6CAA6C;YAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC;gBACrC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;YAEpG,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,CAAC,IAAI,CAAC,yDAAyD,EAAE;oBACrE,MAAM,EAAE,IAAI,CAAC,SAAS;oBACtB,aAAa,EAAE,IAAI;oBACnB,cAAc,EAAE,4FAA4F;iBAC7G,CAAC,CAAC;YACL,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,uCAAuC,EAAE;gBACnD,MAAM,EAAE,IAAI,CAAC,SAAS;gBACtB,SAAS,EAAE,CAAC,WAAW;aACxB,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE;gBACzC,eAAe,EAAE,IAAI,CAAC,eAAe;gBACrC,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,QAAQ,EAAE,eAAe,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;aACnE,CAAC,CAAC;YAEH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC1C,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;oBAChC,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;gBAC/C,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;gBAExB,IAAI,CAAC,MAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;oBAC9B,YAAY,CAAC,SAAS,CAAC,CAAC;oBACxB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;oBACxB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;oBAC1B,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;oBACpD,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;gBAEH,IAAI,CAAC,MAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;oBACjC,YAAY,CAAC,SAAS,CAAC,CAAC;oBACxB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;oBAC1B,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;oBAC7C,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC,CAAC,CAAC;gBAEH,IAAI,CAAC,MAAO,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;oBAC5B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;oBACzB,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;gBACxC,CAAC,CAAC,CAAC;gBAEH,IAAI,CAAC,MAAO,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5D,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,KAAa,EAAE,OAAe;QAClD,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,IAAI,GAAwB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAEzD,2BAA2B;YAC3B,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACzC,MAAM,CAAC,IAAI,CAAC,0CAA0C,EAAE;oBACtD,KAAK;oBACL,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG;oBAClB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG;oBAClB,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI;iBACrB,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,6EAA6E;YAC7E,yEAAyE;YACzE,IAAI,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;YAC5B,IAAI,IAAI,CAAC,IAAI,GAAG,cAAc,EAAE,CAAC;gBAC/B,4EAA4E;gBAC5E,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;YAChD,CAAC;YAED,wCAAwC;YACxC,MAAM,MAAM,GAAoB;gBAC9B,SAAS,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC;gBAChC,QAAQ,EAAE,IAAI,CAAC,GAAG;gBAClB,SAAS,EAAE,IAAI,CAAC,GAAG;gBACnB,QAAQ,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC;gBACvB,SAAS,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC;gBACxB,YAAY,EAAE,IAAI,CAAC,IAAI;gBACvB,QAAQ,EAAE,CAAC,CAAC,oCAAoC;aACjD,CAAC;YAEF,qBAAqB;YACrB,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;gBACtC,MAAM,CAAC,IAAI,CAAC,uCAAuC,EAAE;oBACnD,KAAK;oBACL,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,SAAS,EAAE,WAAW;iBACvB,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,iEAAiE;YACjE,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACjD,MAAM,CAAC,IAAI,CAAC,8DAA8D,EAAE;oBAC1E,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI;oBACnC,OAAO,EAAE,IAAI,CAAC,aAAa;oBAC3B,aAAa,EAAE,IAAI;iBACpB,CAAC,CAAC;gBAEH,4CAA4C;gBAC5C,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC;gBAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;gBAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC;oBACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;oBAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;wBACjB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACzC,CAAC;gBACH,CAAC;YACH,CAAC;YAED,gCAAgC;YAChC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACnD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAEnC,mEAAmE;YACnE,4FAA4F;YAC5F,MAAM,QAAQ,GAAG,2BAA2B,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YAChF,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE;gBAC/C,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI;gBAClC,MAAM,EAAE;oBACN,GAAG,EAAE,QAAQ,CAAC,GAAG;oBACjB,GAAG,EAAE,QAAQ,CAAC,GAAG;oBACjB,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE;oBACpC,KAAK;iBACN;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,0CAA0C,EAAE;gBACtD,KAAK,EAAG,KAAe,CAAC,OAAO;gBAC/B,KAAK;aACN,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAC/B,QAAgB,EAChB,SAAiB,EACjB,QAAgB;QAEhB,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAE7B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QAED,+BAA+B;QAC/B,MAAM,SAAS,GAAG,6BAA6B,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAE/E,yDAAyD;QACzD,MAAM,QAAQ,GAAG,2BAA2B,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAClE,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE;YAC3C,QAAQ,EAAE,QAAQ,CAAC,GAAG;YACtB,SAAS,EAAE,QAAQ,CAAC,GAAG;YACvB,QAAQ;YACR,YAAY,EAAE,SAAS,CAAC,IAAI;YAC5B,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;SACjC,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,qEAAqE;QACrE,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7F,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,GAAG,gBAAgB,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACpF,MAAM,IAAI,CAAC,wBAAwB,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC/D,CAAC;QAED,kDAAkD;QAClD,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3C,0EAA0E;gBAC1E,mDAAmD;gBACnD,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAChD,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,WAAW,IAAI,WAAW,IAAI,CAAC;gBACrD,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC;YACD,sEAAsE;YACtE,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC1C,IAAI,CAAC,MAAO,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE;oBAC9C,IAAI,KAAK,EAAE,CAAC;wBACV,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,EAAE;4BACnD,MAAM,EAAE,aAAa;yBACtB,CAAC,CAAC;wBACH,MAAM,CAAC,KAAK,CAAC,CAAC;oBAChB,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE;4BAC1C,KAAK,EAAE,aAAa,CAAC,MAAM;4BAC3B,kBAAkB,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI;yBAClD,CAAC,CAAC;wBACH,OAAO,EAAE,CAAC;oBACZ,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,2CAA2C,EAAE;gBACxD,kBAAkB,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI;aAClD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,wBAAwB,CAAC,WAAmB;QACxD,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;YACrC,OAAO;QACT,CAAC;QAED,qCAAqC;QACrC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;aAC1D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE/B,uBAAuB;QACvB,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE;YACvC,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChD,OAAO,GAAG,IAAI,CAAC,WAAW,IAAI,WAAW,IAAI,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,0CAA0C,EAAE;YACtD,KAAK,EAAE,OAAO,CAAC,MAAM;YACrB,WAAW;YACX,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI;YAC1C,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;QAEH,0BAA0B;QAC1B,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,IAAI,CAAC,MAAO,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBACzC,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,CAAC,IAAI,CAAC,mCAAmC,EAAE;wBAC/C,KAAK,EAAE,KAAK,CAAC,OAAO;wBACpB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,4BAA4B;qBACxD,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO,EAAE,CAAC,CAAC,mCAAmC;YAChD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,2BAA2B;QAC3B,KAAK,MAAM,CAAC,OAAO,CAAC,IAAI,OAAO,EAAE,CAAC;YAChC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE;YAChC,sBAAsB,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI;SACtD,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,wBAAwB;QAC9B,yBAAyB;QACzB,WAAW,CAAC,KAAK,IAAI,EAAE;YACrB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACxD,OAAO;YACT,CAAC;YAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;YAChD,MAAM,cAAc,GAAa,EAAE,CAAC;YAEpC,KAAK,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,EAAE,CAAC;gBACvE,IAAI,GAAG,GAAG,UAAU,GAAG,cAAc,EAAE,CAAC;oBACtC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;YAED,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,MAAM,CAAC,IAAI,CAAC,qCAAqC,EAAE;oBACjD,KAAK,EAAE,cAAc,CAAC,MAAM;oBAC5B,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI;iBAC3C,CAAC,CAAC;gBAEH,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;oBAC1C,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAChD,OAAO,GAAG,IAAI,CAAC,WAAW,IAAI,WAAW,IAAI,CAAC;gBAChD,CAAC,CAAC,CAAC;gBAEH,gCAAgC;gBAChC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;oBAClC,IAAI,CAAC,MAAO,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;wBACzC,IAAI,KAAK,EAAE,CAAC;4BACV,MAAM,CAAC,IAAI,CAAC,yCAAyC,EAAE;gCACrD,KAAK,EAAE,KAAK,CAAC,OAAO;6BACrB,CAAC,CAAC;wBACL,CAAC;wBACD,OAAO,EAAE,CAAC;oBACZ,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,uBAAuB;gBACvB,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;oBACrC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC3C,CAAC;gBAED,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE;oBAC/B,sBAAsB,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI;iBACtD,CAAC,CAAC;YACL,CAAC;QACH,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,mBAAmB;IACzC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB,CACvB,QAAgB,EAChB,SAAiB,EACjB,WAAmB,GAAG,EACtB,oBAA4B,EAAE;QAE9B,IAAI,CAAC;YACH,yDAAyD;YACzD,MAAM,QAAQ,GAAG,2BAA2B,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC,+CAA+C,EAAE;gBAC3D,QAAQ,EAAE,QAAQ,CAAC,GAAG;gBACtB,SAAS,EAAE,QAAQ,CAAC,GAAG;gBACvB,QAAQ;gBACR,iBAAiB;aAClB,CAAC,CAAC;YAEH,4BAA4B;YAC5B,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;YAE9D,8DAA8D;YAC9D,gEAAgE;YAChE,+DAA+D;YAC/D,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YAEzD,6BAA6B;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAChC,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,iBAAiB,CAClB,CAAC;YAEF,MAAM,CAAC,IAAI,CAAC,uCAAuC,EAAE;gBACnD,YAAY,EAAE,OAAO,CAAC,MAAM;gBAC5B,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI;aACnC,CAAC,CAAC;YAEH,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAc,CAAC,CAAC;YAC/D,4DAA4D;YAC5D,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,aAAa,CACnB,SAAiB,EACjB,SAAiB,EACjB,QAAgB,EAChB,iBAAyB;QAEzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,GAAG,GAAG,iBAAiB,GAAG,EAAE,GAAG,IAAI,CAAC;QACvD,MAAM,OAAO,GAAsB,EAAE,CAAC;QAEtC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC;YAChD,oBAAoB;YACpB,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,UAAU,EAAE,CAAC;gBAC5C,SAAS;YACX,CAAC;YAED,qBAAqB;YACrB,MAAM,QAAQ,GAAG,iBAAiB,CAChC,SAAS,EACT,SAAS,EACT,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,SAAS,CACjB,CAAC;YAEF,yBAAyB;YACzB,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC;oBACX,GAAG,MAAM;oBACT,QAAQ;iBACT,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,mCAAmC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC;QAE9D,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,aAAa;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC;QAC7C,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;YACxD,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,UAAU,EAAE,CAAC;gBAC5C,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC9B,YAAY,EAAE,CAAC;YACjB,CAAC;QACH,CAAC;QAED,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,CAAC,KAAK,CAAC,8CAA8C,EAAE;gBAC3D,OAAO,EAAE,YAAY;gBACrB,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI;aAClC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACK,oBAAoB;QAC1B,2BAA2B;QAC3B,WAAW,CAAC,GAAG,EAAE;YACf,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACpB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,4CAA4C,EAAE;gBACxD,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI;aACnD,CAAC,CAAC;YAEH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBAClC,IAAI,CAAC,MAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE;oBAC/B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;oBACzB,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;oBACjC,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;oBACzD,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;CACF;AAED,qBAAqB;AACrB,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC"}