@packet-net/pdn-aprs 0.0.1

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 (120) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/LICENSE +661 -0
  3. package/README.md +192 -0
  4. package/THIRD-PARTY-NOTICES.md +5 -0
  5. package/dist/builder.d.ts +232 -0
  6. package/dist/builder.d.ts.map +1 -0
  7. package/dist/builder.js +508 -0
  8. package/dist/builder.js.map +1 -0
  9. package/dist/bytes.d.ts +19 -0
  10. package/dist/bytes.d.ts.map +1 -0
  11. package/dist/bytes.js +120 -0
  12. package/dist/bytes.js.map +1 -0
  13. package/dist/codes.d.ts +13 -0
  14. package/dist/codes.d.ts.map +1 -0
  15. package/dist/codes.js +112 -0
  16. package/dist/codes.js.map +1 -0
  17. package/dist/decode/context.d.ts +33 -0
  18. package/dist/decode/context.d.ts.map +1 -0
  19. package/dist/decode/context.js +65 -0
  20. package/dist/decode/context.js.map +1 -0
  21. package/dist/decode/index.d.ts +10 -0
  22. package/dist/decode/index.d.ts.map +1 -0
  23. package/dist/decode/index.js +121 -0
  24. package/dist/decode/index.js.map +1 -0
  25. package/dist/decode/message.d.ts +5 -0
  26. package/dist/decode/message.d.ts.map +1 -0
  27. package/dist/decode/message.js +190 -0
  28. package/dist/decode/message.js.map +1 -0
  29. package/dist/decode/other.d.ts +25 -0
  30. package/dist/decode/other.d.ts.map +1 -0
  31. package/dist/decode/other.js +326 -0
  32. package/dist/decode/other.js.map +1 -0
  33. package/dist/decode/positioned.d.ts +132 -0
  34. package/dist/decode/positioned.d.ts.map +1 -0
  35. package/dist/decode/positioned.js +1063 -0
  36. package/dist/decode/positioned.js.map +1 -0
  37. package/dist/decode/reports.d.ts +13 -0
  38. package/dist/decode/reports.d.ts.map +1 -0
  39. package/dist/decode/reports.js +375 -0
  40. package/dist/decode/reports.js.map +1 -0
  41. package/dist/decoder.d.ts +23 -0
  42. package/dist/decoder.d.ts.map +1 -0
  43. package/dist/decoder.js +75 -0
  44. package/dist/decoder.js.map +1 -0
  45. package/dist/deviceid-data.d.ts +33 -0
  46. package/dist/deviceid-data.d.ts.map +1 -0
  47. package/dist/deviceid-data.js +2941 -0
  48. package/dist/deviceid-data.js.map +1 -0
  49. package/dist/deviceid.d.ts +12 -0
  50. package/dist/deviceid.d.ts.map +1 -0
  51. package/dist/deviceid.js +86 -0
  52. package/dist/deviceid.js.map +1 -0
  53. package/dist/diagnostics.d.ts +48 -0
  54. package/dist/diagnostics.d.ts.map +1 -0
  55. package/dist/diagnostics.js +65 -0
  56. package/dist/diagnostics.js.map +1 -0
  57. package/dist/encode/common.d.ts +19 -0
  58. package/dist/encode/common.d.ts.map +1 -0
  59. package/dist/encode/common.js +84 -0
  60. package/dist/encode/common.js.map +1 -0
  61. package/dist/encode/index.d.ts +35 -0
  62. package/dist/encode/index.d.ts.map +1 -0
  63. package/dist/encode/index.js +248 -0
  64. package/dist/encode/index.js.map +1 -0
  65. package/dist/encode/other.d.ts +21 -0
  66. package/dist/encode/other.d.ts.map +1 -0
  67. package/dist/encode/other.js +253 -0
  68. package/dist/encode/other.js.map +1 -0
  69. package/dist/encode/position.d.ts +31 -0
  70. package/dist/encode/position.d.ts.map +1 -0
  71. package/dist/encode/position.js +729 -0
  72. package/dist/encode/position.js.map +1 -0
  73. package/dist/header.d.ts +42 -0
  74. package/dist/header.d.ts.map +1 -0
  75. package/dist/header.js +206 -0
  76. package/dist/header.js.map +1 -0
  77. package/dist/index.d.ts +13 -0
  78. package/dist/index.d.ts.map +1 -0
  79. package/dist/index.js +14 -0
  80. package/dist/index.js.map +1 -0
  81. package/dist/neutral.d.ts +22 -0
  82. package/dist/neutral.d.ts.map +1 -0
  83. package/dist/neutral.js +593 -0
  84. package/dist/neutral.js.map +1 -0
  85. package/dist/symbols-data.d.ts +832 -0
  86. package/dist/symbols-data.d.ts.map +1 -0
  87. package/dist/symbols-data.js +173 -0
  88. package/dist/symbols-data.js.map +1 -0
  89. package/dist/symbols.d.ts +35 -0
  90. package/dist/symbols.d.ts.map +1 -0
  91. package/dist/symbols.js +71 -0
  92. package/dist/symbols.js.map +1 -0
  93. package/dist/types.d.ts +458 -0
  94. package/dist/types.d.ts.map +1 -0
  95. package/dist/types.js +4 -0
  96. package/dist/types.js.map +1 -0
  97. package/package.json +68 -0
  98. package/src/builder.ts +617 -0
  99. package/src/bytes.ts +118 -0
  100. package/src/codes.ts +218 -0
  101. package/src/decode/context.ts +63 -0
  102. package/src/decode/index.ts +135 -0
  103. package/src/decode/message.ts +194 -0
  104. package/src/decode/other.ts +307 -0
  105. package/src/decode/positioned.ts +1161 -0
  106. package/src/decode/reports.ts +378 -0
  107. package/src/decoder.ts +76 -0
  108. package/src/deviceid-data.ts +2954 -0
  109. package/src/deviceid.ts +83 -0
  110. package/src/diagnostics.ts +86 -0
  111. package/src/encode/common.ts +87 -0
  112. package/src/encode/index.ts +280 -0
  113. package/src/encode/other.ts +247 -0
  114. package/src/encode/position.ts +656 -0
  115. package/src/header.ts +221 -0
  116. package/src/index.ts +57 -0
  117. package/src/neutral.ts +595 -0
  118. package/src/symbols-data.ts +181 -0
  119. package/src/symbols.ts +85 -0
  120. package/src/types.ts +571 -0
@@ -0,0 +1,593 @@
1
+ // The conformance vectors' language-neutral form (https://github.com/packet-net/aprs-vectors):
2
+ // snake_case names, empty values left out, booleans only when true, timestamps and symbols as
3
+ // sent. Used by the conformance tests and the differential dump, and handy for comparing this
4
+ // library with another implementation.
5
+ import { formatDiagnostic } from './diagnostics.js';
6
+ function put(o, key, value) {
7
+ if (value === undefined || value === null || value === false || value === '')
8
+ return;
9
+ if (Array.isArray(value) && value.length === 0)
10
+ return;
11
+ o[key] = value;
12
+ }
13
+ const pad2 = (n) => String(n).padStart(2, '0');
14
+ /** A timestamp as sent: `092345z`, `092345/`, `234517h` or `10090556`. */
15
+ export function formatTimestamp(t) {
16
+ switch (t.kind) {
17
+ case 'dhm-zulu':
18
+ return `${pad2(t.day)}${pad2(t.hour)}${pad2(t.minute)}z`;
19
+ case 'dhm-local':
20
+ return `${pad2(t.day)}${pad2(t.hour)}${pad2(t.minute)}/`;
21
+ case 'hms':
22
+ return `${pad2(t.hour)}${pad2(t.minute)}${pad2(t.second)}h`;
23
+ case 'mdhm':
24
+ return `${pad2(t.month)}${pad2(t.day)}${pad2(t.hour)}${pad2(t.minute)}`;
25
+ }
26
+ }
27
+ /** Parses a timestamp as sent; `undefined` if it is not one. */
28
+ export function parseTimestamp(text) {
29
+ let m = /^([0-9]{2})([0-9]{2})([0-9]{2})([z/h])$/.exec(text);
30
+ if (m) {
31
+ const [a, b, c] = [Number(m[1]), Number(m[2]), Number(m[3])];
32
+ if (m[4] === 'z')
33
+ return { kind: 'dhm-zulu', day: a, hour: b, minute: c };
34
+ if (m[4] === '/')
35
+ return { kind: 'dhm-local', day: a, hour: b, minute: c };
36
+ return { kind: 'hms', hour: a, minute: b, second: c };
37
+ }
38
+ m = /^([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})$/.exec(text);
39
+ if (m)
40
+ return { kind: 'mdhm', month: Number(m[1]), day: Number(m[2]), hour: Number(m[3]), minute: Number(m[4]) };
41
+ return undefined;
42
+ }
43
+ const sym = (s) => s.table + s.code;
44
+ function compressionN(c) {
45
+ return { fix: c.fix, source: c.source, origin: c.origin };
46
+ }
47
+ function phgN(p) {
48
+ const o = { power: p.power, height: p.height, gain: p.gain, directivity: p.directivity };
49
+ put(o, 'beacons_per_hour', p.beaconsPerHour);
50
+ return o;
51
+ }
52
+ function dfsN(d) {
53
+ return { strength: d.strength, height: d.height, gain: d.gain, directivity: d.directivity };
54
+ }
55
+ function areaN(a) {
56
+ const o = { shape: a.shape, color: a.color, lat_offset: a.latOffset, lon_offset: a.lonOffset };
57
+ put(o, 'corridor_width_miles', a.corridorWidthMiles);
58
+ return o;
59
+ }
60
+ function dfBearingN(d) {
61
+ return { bearing_degrees: d.bearingDegrees, number: d.number, range: d.range, quality: d.quality };
62
+ }
63
+ function stormN(s) {
64
+ const o = { type: s.type };
65
+ put(o, 'sustained_wind_knots', s.sustainedWindKnots);
66
+ put(o, 'gust_knots', s.gustKnots);
67
+ put(o, 'central_pressure_mbar', s.centralPressureMbar);
68
+ put(o, 'hurricane_radius_nm', s.hurricaneRadiusNm);
69
+ put(o, 'tropical_storm_radius_nm', s.tropicalStormRadiusNm);
70
+ put(o, 'whole_gale_radius_nm', s.wholeGaleRadiusNm);
71
+ return o;
72
+ }
73
+ function daoN(d) {
74
+ return { datum: d.datum, precision: d.precision };
75
+ }
76
+ function telemetryN(t) {
77
+ const o = { sequence: t.sequence, analog: [...t.analog] };
78
+ put(o, 'digital', t.digital);
79
+ return o;
80
+ }
81
+ function frequencyN(f) {
82
+ const o = { mhz: f.mhz };
83
+ put(o, 'tone', f.tone);
84
+ put(o, 'tone_value', f.toneValue);
85
+ put(o, 'offset_khz', f.offsetKhz);
86
+ put(o, 'range', f.range);
87
+ put(o, 'range_km', f.rangeKm);
88
+ put(o, 'narrow', f.narrow);
89
+ put(o, 'ten_khz_resolution', f.tenKhzResolution);
90
+ return o;
91
+ }
92
+ function weatherN(w) {
93
+ const o = {};
94
+ put(o, 'wind_direction_degrees', w.windDirectionDegrees);
95
+ put(o, 'wind_speed_mph', w.windSpeedMph);
96
+ put(o, 'wind_gust_mph', w.windGustMph);
97
+ put(o, 'temperature_f', w.temperatureF);
98
+ put(o, 'rain_1h_in', w.rain1hIn);
99
+ put(o, 'rain_24h_in', w.rain24hIn);
100
+ put(o, 'rain_midnight_in', w.rainMidnightIn);
101
+ put(o, 'rain_raw', w.rainRaw);
102
+ put(o, 'humidity_percent', w.humidityPercent);
103
+ put(o, 'pressure_mbar', w.pressureMbar);
104
+ put(o, 'luminosity_w_m2', w.luminosityWM2);
105
+ put(o, 'snow_24h_in', w.snow24hIn);
106
+ put(o, 'software', w.software);
107
+ put(o, 'unit', w.unit);
108
+ if (w.extra && w.extra.length > 0)
109
+ o.extra = w.extra.map((e) => ({ letter: e.letter, value: e.value }));
110
+ return o;
111
+ }
112
+ function positionedN(o, d) {
113
+ o.latitude = d.latitude;
114
+ o.longitude = d.longitude;
115
+ put(o, 'ambiguity', d.ambiguity);
116
+ o.symbol = sym(d.symbol);
117
+ put(o, 'compressed', d.compressed);
118
+ if (d.compression)
119
+ o.compression = compressionN(d.compression);
120
+ put(o, 'course_degrees', d.courseDegrees);
121
+ put(o, 'speed_knots', d.speedKnots);
122
+ put(o, 'altitude_feet', d.altitudeFeet);
123
+ if (d.phg)
124
+ o.phg = phgN(d.phg);
125
+ put(o, 'range_miles', d.rangeMiles);
126
+ if (d.dfs)
127
+ o.dfs = dfsN(d.dfs);
128
+ if (d.area)
129
+ o.area = areaN(d.area);
130
+ if (d.dfBearing)
131
+ o.df_bearing = dfBearingN(d.dfBearing);
132
+ if (d.storm)
133
+ o.storm = stormN(d.storm);
134
+ if (d.dao)
135
+ o.dao = daoN(d.dao);
136
+ if (d.telemetry)
137
+ o.telemetry = telemetryN(d.telemetry);
138
+ if (d.frequency)
139
+ o.frequency = frequencyN(d.frequency);
140
+ if (d.weather)
141
+ o.weather = weatherN(d.weather);
142
+ put(o, 'signpost', d.signpost);
143
+ put(o, 'comment', d.comment);
144
+ }
145
+ /** Formats a path entry as the neutral form writes it: `WIDE1-1`, or `N2GH*` when used. */
146
+ export function pathEntryN(e) {
147
+ return e.used ? `${e.address}*` : e.address;
148
+ }
149
+ /** A packet's data in the neutral form. */
150
+ export function toNeutralData(d) {
151
+ const o = { type: d.type };
152
+ switch (d.type) {
153
+ case 'position':
154
+ if (d.timestamp)
155
+ o.timestamp = formatTimestamp(d.timestamp);
156
+ put(o, 'messaging', d.messaging);
157
+ positionedN(o, d);
158
+ break;
159
+ case 'mic-e':
160
+ o.mic_e_message = d.micEMessage;
161
+ put(o, 'old_data', d.oldData);
162
+ put(o, 'type_code', d.typeCode);
163
+ put(o, 'device_suffix', d.deviceSuffix);
164
+ put(o, 'locator', d.locator);
165
+ if (d.legacyTelemetry && d.legacyTelemetry.length > 0)
166
+ o.legacy_telemetry = [...d.legacyTelemetry];
167
+ put(o, 'destination_ssid', d.destinationSsid);
168
+ positionedN(o, d);
169
+ break;
170
+ case 'object':
171
+ o.name = d.name;
172
+ put(o, 'killed', d.killed);
173
+ if (d.timestamp)
174
+ o.timestamp = formatTimestamp(d.timestamp);
175
+ positionedN(o, d);
176
+ break;
177
+ case 'item':
178
+ o.name = d.name;
179
+ put(o, 'killed', d.killed);
180
+ positionedN(o, d);
181
+ break;
182
+ case 'message':
183
+ put(o, 'addressee', d.addressee);
184
+ put(o, 'text', d.text);
185
+ put(o, 'message_id', d.messageId);
186
+ if (d.replyAck !== undefined)
187
+ o.reply_ack = d.replyAck;
188
+ break;
189
+ case 'ack':
190
+ put(o, 'addressee', d.addressee);
191
+ put(o, 'acked_id', d.ackedId);
192
+ if (d.replyAck !== undefined)
193
+ o.reply_ack = d.replyAck;
194
+ break;
195
+ case 'reject':
196
+ put(o, 'addressee', d.addressee);
197
+ put(o, 'rejected_id', d.rejectedId);
198
+ if (d.replyAck !== undefined)
199
+ o.reply_ack = d.replyAck;
200
+ break;
201
+ case 'bulletin':
202
+ case 'nws-bulletin':
203
+ put(o, 'addressee', d.addressee);
204
+ put(o, 'text', d.text);
205
+ put(o, 'message_id', d.messageId);
206
+ break;
207
+ case 'telemetry-names':
208
+ put(o, 'addressee', d.addressee);
209
+ put(o, 'names', [...d.names]);
210
+ put(o, 'message_id', d.messageId);
211
+ break;
212
+ case 'telemetry-units':
213
+ put(o, 'addressee', d.addressee);
214
+ put(o, 'units', [...d.units]);
215
+ put(o, 'message_id', d.messageId);
216
+ break;
217
+ case 'telemetry-coefficients':
218
+ put(o, 'addressee', d.addressee);
219
+ put(o, 'coefficients', [...d.coefficients]);
220
+ put(o, 'message_id', d.messageId);
221
+ break;
222
+ case 'telemetry-bits':
223
+ put(o, 'addressee', d.addressee);
224
+ put(o, 'bits', d.bits);
225
+ put(o, 'project', d.project);
226
+ put(o, 'message_id', d.messageId);
227
+ break;
228
+ case 'directed-query':
229
+ put(o, 'addressee', d.addressee);
230
+ put(o, 'query_type', d.queryType);
231
+ put(o, 'target', d.target);
232
+ break;
233
+ case 'status':
234
+ if (d.timestamp)
235
+ o.timestamp = formatTimestamp(d.timestamp);
236
+ put(o, 'locator', d.locator);
237
+ if (d.symbol)
238
+ o.symbol = sym(d.symbol);
239
+ if (d.beam)
240
+ o.beam = { heading_code: d.beam.headingCode, power_code: d.beam.powerCode };
241
+ put(o, 'text', d.text);
242
+ break;
243
+ case 'telemetry':
244
+ put(o, 'sequence', d.sequence);
245
+ if (d.analog.length > 0)
246
+ o.analog = [...d.analog];
247
+ put(o, 'bits', d.bits);
248
+ put(o, 'comment', d.comment);
249
+ break;
250
+ case 'weather':
251
+ if (d.timestamp)
252
+ o.timestamp = formatTimestamp(d.timestamp);
253
+ o.weather = weatherN(d.weather);
254
+ put(o, 'comment', d.comment);
255
+ break;
256
+ case 'raw-weather':
257
+ o.format = d.format;
258
+ put(o, 'data', d.data);
259
+ break;
260
+ case 'nmea':
261
+ put(o, 'sentence', d.sentence);
262
+ put(o, 'has_checksum', d.hasChecksum);
263
+ put(o, 'latitude', d.latitude);
264
+ put(o, 'longitude', d.longitude);
265
+ put(o, 'fix', d.fix);
266
+ put(o, 'course_degrees', d.courseDegrees);
267
+ put(o, 'speed_knots', d.speedKnots);
268
+ put(o, 'altitude_m', d.altitudeM);
269
+ put(o, 'time', d.time);
270
+ put(o, 'waypoint', d.waypoint);
271
+ break;
272
+ case 'maidenhead-beacon':
273
+ put(o, 'locator', d.locator);
274
+ put(o, 'comment', d.comment);
275
+ break;
276
+ case 'query':
277
+ put(o, 'query_type', d.queryType);
278
+ if (d.footprint)
279
+ o.footprint = {
280
+ latitude: d.footprint.latitude,
281
+ longitude: d.footprint.longitude,
282
+ radius_miles: d.footprint.radiusMiles,
283
+ };
284
+ break;
285
+ case 'capabilities':
286
+ if (d.capabilities.length > 0)
287
+ o.capabilities = d.capabilities.map((c) => [...c]);
288
+ break;
289
+ case 'third-party':
290
+ o.packet = toNeutralInner(d.packet);
291
+ break;
292
+ case 'user-defined':
293
+ o.user_id = d.userId;
294
+ o.packet_type = d.packetType;
295
+ put(o, 'data', d.data);
296
+ break;
297
+ case 'test':
298
+ put(o, 'data', d.data);
299
+ break;
300
+ case 'agrelo-df':
301
+ o.bearing_degrees = d.bearingDegrees;
302
+ o.quality = d.quality;
303
+ break;
304
+ case 'unrecognized':
305
+ o.reason = d.reason;
306
+ break;
307
+ }
308
+ return o;
309
+ }
310
+ function toNeutralInner(p) {
311
+ const o = { source: p.source, destination: p.destination };
312
+ put(o, 'path', p.path.map(pathEntryN));
313
+ o.data = toNeutralData(p.data);
314
+ put(o, 'diagnostics', p.diagnostics.map(formatDiagnostic));
315
+ return o;
316
+ }
317
+ /** A packet's header in the neutral form. */
318
+ export function toNeutralHeader(p) {
319
+ const o = { source: p.source, destination: p.destination };
320
+ put(o, 'path', p.path.map(pathEntryN));
321
+ if (p.qConstruct) {
322
+ const q = { construct: p.qConstruct.construct };
323
+ put(q, 'station', p.qConstruct.station);
324
+ o.q_construct = q;
325
+ }
326
+ return o;
327
+ }
328
+ /** A packet in the neutral form: `{header, data, diagnostics}`. */
329
+ export function toNeutralPacket(p) {
330
+ const o = { header: toNeutralHeader(p), data: toNeutralData(p.data) };
331
+ put(o, 'diagnostics', p.diagnostics.map(formatDiagnostic));
332
+ return o;
333
+ }
334
+ function symbolFrom(text) {
335
+ const t = String(text);
336
+ return { table: t.slice(0, 1), code: t.slice(1) };
337
+ }
338
+ function timestampFrom(text) {
339
+ const t = parseTimestamp(String(text));
340
+ if (!t)
341
+ throw new RangeError(`not a timestamp: ${String(text)}`);
342
+ return t;
343
+ }
344
+ function opt(o, key, value) {
345
+ if (value !== undefined)
346
+ o[key] = value;
347
+ }
348
+ function weatherFrom(w) {
349
+ const o = {};
350
+ opt(o, 'windDirectionDegrees', w.wind_direction_degrees);
351
+ opt(o, 'windSpeedMph', w.wind_speed_mph);
352
+ opt(o, 'windGustMph', w.wind_gust_mph);
353
+ opt(o, 'temperatureF', w.temperature_f);
354
+ opt(o, 'rain1hIn', w.rain_1h_in);
355
+ opt(o, 'rain24hIn', w.rain_24h_in);
356
+ opt(o, 'rainMidnightIn', w.rain_midnight_in);
357
+ opt(o, 'rainRaw', w.rain_raw);
358
+ opt(o, 'humidityPercent', w.humidity_percent);
359
+ opt(o, 'pressureMbar', w.pressure_mbar);
360
+ opt(o, 'luminosityWM2', w.luminosity_w_m2);
361
+ opt(o, 'snow24hIn', w.snow_24h_in);
362
+ opt(o, 'software', w.software);
363
+ opt(o, 'unit', w.unit);
364
+ if (Array.isArray(w.extra))
365
+ o.extra = w.extra.map((e) => ({ letter: e.letter, value: e.value }));
366
+ return o;
367
+ }
368
+ function positionedFrom(o, d) {
369
+ o.latitude = d.latitude;
370
+ o.longitude = d.longitude;
371
+ opt(o, 'ambiguity', d.ambiguity);
372
+ o.symbol = symbolFrom(d.symbol);
373
+ if (d.compressed)
374
+ o.compressed = true;
375
+ if (d.compression)
376
+ o.compression = { fix: d.compression.fix, source: d.compression.source, origin: d.compression.origin };
377
+ opt(o, 'courseDegrees', d.course_degrees);
378
+ opt(o, 'speedKnots', d.speed_knots);
379
+ opt(o, 'altitudeFeet', d.altitude_feet);
380
+ if (d.phg) {
381
+ const p = { power: d.phg.power, height: d.phg.height, gain: d.phg.gain, directivity: d.phg.directivity };
382
+ opt(p, 'beaconsPerHour', d.phg.beacons_per_hour);
383
+ o.phg = p;
384
+ }
385
+ opt(o, 'rangeMiles', d.range_miles);
386
+ if (d.dfs)
387
+ o.dfs = { strength: d.dfs.strength, height: d.dfs.height, gain: d.dfs.gain, directivity: d.dfs.directivity };
388
+ if (d.area) {
389
+ const a = { shape: d.area.shape, color: d.area.color, latOffset: d.area.lat_offset, lonOffset: d.area.lon_offset };
390
+ opt(a, 'corridorWidthMiles', d.area.corridor_width_miles);
391
+ o.area = a;
392
+ }
393
+ if (d.df_bearing)
394
+ o.dfBearing = {
395
+ bearingDegrees: d.df_bearing.bearing_degrees,
396
+ number: d.df_bearing.number,
397
+ range: d.df_bearing.range,
398
+ quality: d.df_bearing.quality,
399
+ };
400
+ if (d.storm) {
401
+ const s = { type: d.storm.type };
402
+ opt(s, 'sustainedWindKnots', d.storm.sustained_wind_knots);
403
+ opt(s, 'gustKnots', d.storm.gust_knots);
404
+ opt(s, 'centralPressureMbar', d.storm.central_pressure_mbar);
405
+ opt(s, 'hurricaneRadiusNm', d.storm.hurricane_radius_nm);
406
+ opt(s, 'tropicalStormRadiusNm', d.storm.tropical_storm_radius_nm);
407
+ opt(s, 'wholeGaleRadiusNm', d.storm.whole_gale_radius_nm);
408
+ o.storm = s;
409
+ }
410
+ if (d.dao)
411
+ o.dao = { datum: d.dao.datum, precision: d.dao.precision };
412
+ if (d.telemetry) {
413
+ const t = { sequence: d.telemetry.sequence, analog: [...d.telemetry.analog] };
414
+ opt(t, 'digital', d.telemetry.digital);
415
+ o.telemetry = t;
416
+ }
417
+ if (d.frequency) {
418
+ const f = { mhz: d.frequency.mhz };
419
+ opt(f, 'tone', d.frequency.tone);
420
+ opt(f, 'toneValue', d.frequency.tone_value);
421
+ opt(f, 'offsetKhz', d.frequency.offset_khz);
422
+ opt(f, 'range', d.frequency.range);
423
+ if (d.frequency.range_km)
424
+ f.rangeKm = true;
425
+ if (d.frequency.narrow)
426
+ f.narrow = true;
427
+ if (d.frequency.ten_khz_resolution)
428
+ f.tenKhzResolution = true;
429
+ o.frequency = f;
430
+ }
431
+ if (d.weather)
432
+ o.weather = weatherFrom(d.weather);
433
+ opt(o, 'signpost', d.signpost);
434
+ opt(o, 'comment', d.comment);
435
+ }
436
+ /** Data from the neutral form. */
437
+ export function fromNeutralData(d) {
438
+ const o = { type: d.type };
439
+ switch (d.type) {
440
+ case 'position':
441
+ if (d.timestamp !== undefined)
442
+ o.timestamp = timestampFrom(d.timestamp);
443
+ if (d.messaging)
444
+ o.messaging = true;
445
+ positionedFrom(o, d);
446
+ break;
447
+ case 'mic-e':
448
+ o.micEMessage = d.mic_e_message;
449
+ if (d.old_data)
450
+ o.oldData = true;
451
+ opt(o, 'typeCode', d.type_code);
452
+ opt(o, 'deviceSuffix', d.device_suffix);
453
+ opt(o, 'locator', d.locator);
454
+ opt(o, 'legacyTelemetry', d.legacy_telemetry);
455
+ opt(o, 'destinationSsid', d.destination_ssid);
456
+ positionedFrom(o, d);
457
+ break;
458
+ case 'object':
459
+ o.name = d.name;
460
+ if (d.killed)
461
+ o.killed = true;
462
+ if (d.timestamp !== undefined)
463
+ o.timestamp = timestampFrom(d.timestamp);
464
+ positionedFrom(o, d);
465
+ break;
466
+ case 'item':
467
+ o.name = d.name;
468
+ if (d.killed)
469
+ o.killed = true;
470
+ positionedFrom(o, d);
471
+ break;
472
+ case 'message':
473
+ o.addressee = d.addressee ?? '';
474
+ o.text = d.text ?? '';
475
+ opt(o, 'messageId', d.message_id);
476
+ opt(o, 'replyAck', d.reply_ack);
477
+ break;
478
+ case 'ack':
479
+ o.addressee = d.addressee ?? '';
480
+ o.ackedId = d.acked_id ?? '';
481
+ opt(o, 'replyAck', d.reply_ack);
482
+ opt(o, 'messageId', d.message_id);
483
+ break;
484
+ case 'reject':
485
+ o.addressee = d.addressee ?? '';
486
+ o.rejectedId = d.rejected_id ?? '';
487
+ opt(o, 'replyAck', d.reply_ack);
488
+ opt(o, 'messageId', d.message_id);
489
+ break;
490
+ case 'bulletin':
491
+ case 'nws-bulletin':
492
+ o.addressee = d.addressee ?? '';
493
+ o.text = d.text ?? '';
494
+ opt(o, 'messageId', d.message_id);
495
+ break;
496
+ case 'telemetry-names':
497
+ o.addressee = d.addressee ?? '';
498
+ o.names = d.names ?? [];
499
+ opt(o, 'messageId', d.message_id);
500
+ break;
501
+ case 'telemetry-units':
502
+ o.addressee = d.addressee ?? '';
503
+ o.units = d.units ?? [];
504
+ opt(o, 'messageId', d.message_id);
505
+ break;
506
+ case 'telemetry-coefficients':
507
+ o.addressee = d.addressee ?? '';
508
+ o.coefficients = d.coefficients ?? [];
509
+ opt(o, 'messageId', d.message_id);
510
+ break;
511
+ case 'telemetry-bits':
512
+ o.addressee = d.addressee ?? '';
513
+ o.bits = d.bits ?? '';
514
+ opt(o, 'project', d.project);
515
+ opt(o, 'messageId', d.message_id);
516
+ break;
517
+ case 'directed-query':
518
+ o.addressee = d.addressee ?? '';
519
+ o.queryType = d.query_type ?? '';
520
+ opt(o, 'target', d.target);
521
+ break;
522
+ case 'status':
523
+ if (d.timestamp !== undefined)
524
+ o.timestamp = timestampFrom(d.timestamp);
525
+ opt(o, 'locator', d.locator);
526
+ if (d.symbol !== undefined)
527
+ o.symbol = symbolFrom(d.symbol);
528
+ if (d.beam)
529
+ o.beam = { headingCode: d.beam.heading_code, powerCode: d.beam.power_code };
530
+ opt(o, 'text', d.text);
531
+ break;
532
+ case 'telemetry':
533
+ o.sequence = d.sequence ?? '';
534
+ o.analog = d.analog ?? [];
535
+ opt(o, 'bits', d.bits);
536
+ opt(o, 'comment', d.comment);
537
+ break;
538
+ case 'weather':
539
+ if (d.timestamp !== undefined)
540
+ o.timestamp = timestampFrom(d.timestamp);
541
+ o.weather = weatherFrom(d.weather ?? {});
542
+ opt(o, 'comment', d.comment);
543
+ break;
544
+ case 'raw-weather':
545
+ o.format = d.format;
546
+ opt(o, 'data', d.data);
547
+ break;
548
+ case 'nmea':
549
+ o.sentence = d.sentence ?? '';
550
+ if (d.has_checksum)
551
+ o.hasChecksum = true;
552
+ opt(o, 'latitude', d.latitude);
553
+ opt(o, 'longitude', d.longitude);
554
+ opt(o, 'fix', d.fix);
555
+ opt(o, 'courseDegrees', d.course_degrees);
556
+ opt(o, 'speedKnots', d.speed_knots);
557
+ opt(o, 'altitudeM', d.altitude_m);
558
+ opt(o, 'time', d.time);
559
+ opt(o, 'waypoint', d.waypoint);
560
+ break;
561
+ case 'maidenhead-beacon':
562
+ o.locator = d.locator ?? '';
563
+ opt(o, 'comment', d.comment);
564
+ break;
565
+ case 'query':
566
+ o.queryType = d.query_type ?? '';
567
+ if (d.footprint)
568
+ o.footprint = { latitude: d.footprint.latitude, longitude: d.footprint.longitude, radiusMiles: d.footprint.radius_miles };
569
+ break;
570
+ case 'capabilities':
571
+ o.capabilities = d.capabilities ?? [];
572
+ break;
573
+ case 'user-defined':
574
+ o.userId = d.user_id;
575
+ o.packetType = d.packet_type;
576
+ opt(o, 'data', d.data);
577
+ break;
578
+ case 'test':
579
+ opt(o, 'data', d.data);
580
+ break;
581
+ case 'agrelo-df':
582
+ o.bearingDegrees = d.bearing_degrees;
583
+ o.quality = d.quality;
584
+ break;
585
+ case 'unrecognized':
586
+ o.reason = d.reason;
587
+ break;
588
+ case 'third-party':
589
+ throw new RangeError('third-party data cannot be built from the neutral form');
590
+ }
591
+ return o;
592
+ }
593
+ //# sourceMappingURL=neutral.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"neutral.js","sourceRoot":"","sources":["../src/neutral.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,8FAA8F;AAC9F,8FAA8F;AAC9F,uCAAuC;AAEvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAuBpD,SAAS,GAAG,CAAC,CAAU,EAAE,GAAW,EAAE,KAAc;IAClD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO;IACrF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACvD,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAE/D,0EAA0E;AAC1E,MAAM,UAAU,eAAe,CAAC,CAAgB;IAC9C,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,UAAU;YACb,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QAC3D,KAAK,WAAW;YACd,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QAC3D,KAAK,KAAK;YACR,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QAC9D,KAAK,MAAM;YACT,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IAC5E,CAAC;AACH,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,CAAC,GAAG,yCAAyC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7D,IAAI,CAAC,EAAE,CAAC;QACN,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAC1E,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAC3E,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACxD,CAAC;IACD,CAAC,GAAG,4CAA4C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5D,IAAI,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjH,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,GAAG,GAAG,CAAC,CAAa,EAAU,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC;AAExD,SAAS,YAAY,CAAC,CAAkB;IACtC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAC5D,CAAC;AAED,SAAS,IAAI,CAAC,CAAM;IAClB,MAAM,CAAC,GAAY,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAClG,GAAG,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC;IAC7C,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,IAAI,CAAC,CAAM;IAClB,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AAC9F,CAAC;AAED,SAAS,KAAK,CAAC,CAAa;IAC1B,MAAM,CAAC,GAAY,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;IACxG,GAAG,CAAC,CAAC,EAAE,sBAAsB,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC;IACrD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,UAAU,CAAC,CAAY;IAC9B,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;AACrG,CAAC;AAED,SAAS,MAAM,CAAC,CAAQ;IACtB,MAAM,CAAC,GAAY,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACpC,GAAG,CAAC,CAAC,EAAE,sBAAsB,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC;IACrD,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IAClC,GAAG,CAAC,CAAC,EAAE,uBAAuB,EAAE,CAAC,CAAC,mBAAmB,CAAC,CAAC;IACvD,GAAG,CAAC,CAAC,EAAE,qBAAqB,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAC;IACnD,GAAG,CAAC,CAAC,EAAE,0BAA0B,EAAE,CAAC,CAAC,qBAAqB,CAAC,CAAC;IAC5D,GAAG,CAAC,CAAC,EAAE,sBAAsB,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAC;IACpD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,IAAI,CAAC,CAAM;IAClB,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;AACpD,CAAC;AAED,SAAS,UAAU,CAAC,CAAmB;IACrC,MAAM,CAAC,GAAY,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACnE,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IAC7B,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,UAAU,CAAC,CAAiB;IACnC,MAAM,CAAC,GAAY,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;IAClC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACvB,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IAClC,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IAClC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IACzB,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IAC9B,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAC3B,GAAG,CAAC,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC;IACjD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,QAAQ,CAAC,CAAU;IAC1B,MAAM,CAAC,GAAY,EAAE,CAAC;IACtB,GAAG,CAAC,CAAC,EAAE,wBAAwB,EAAE,CAAC,CAAC,oBAAoB,CAAC,CAAC;IACzD,GAAG,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;IACzC,GAAG,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;IACvC,GAAG,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;IACxC,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;IACjC,GAAG,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IACnC,GAAG,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC;IAC7C,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IAC9B,GAAG,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC;IAC9C,GAAG,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;IACxC,GAAG,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;IAC3C,GAAG,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IACnC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC/B,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACxG,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,WAAW,CAAC,CAAU,EAAE,CAAmB;IAClD,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;IACxB,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;IAC1B,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACzB,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;IACnC,IAAI,CAAC,CAAC,WAAW;QAAE,CAAC,CAAC,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC/D,GAAG,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;IAC1C,GAAG,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;IACpC,GAAG,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;IACxC,IAAI,CAAC,CAAC,GAAG;QAAE,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/B,GAAG,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;IACpC,IAAI,CAAC,CAAC,GAAG;QAAE,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,CAAC,CAAC,IAAI;QAAE,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,CAAC,SAAS;QAAE,CAAC,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACxD,IAAI,CAAC,CAAC,KAAK;QAAE,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,CAAC,CAAC,GAAG;QAAE,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,CAAC,CAAC,SAAS;QAAE,CAAC,CAAC,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACvD,IAAI,CAAC,CAAC,SAAS;QAAE,CAAC,CAAC,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACvD,IAAI,CAAC,CAAC,OAAO;QAAE,CAAC,CAAC,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC/C,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC/B,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,UAAU,CAAC,CAAY;IACrC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AAC9C,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,aAAa,CAAC,CAAW;IACvC,MAAM,CAAC,GAAY,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACpC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,UAAU;YACb,IAAI,CAAC,CAAC,SAAS;gBAAE,CAAC,CAAC,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC5D,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YACjC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAClB,MAAM;QACR,KAAK,OAAO;YACV,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,WAAW,CAAC;YAChC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAC9B,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;YAChC,GAAG,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;YACxC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAC7B,IAAI,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;gBAAE,CAAC,CAAC,gBAAgB,GAAG,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC;YACnG,GAAG,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC;YAC9C,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAClB,MAAM;QACR,KAAK,QAAQ;YACX,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;YAChB,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;YAC3B,IAAI,CAAC,CAAC,SAAS;gBAAE,CAAC,CAAC,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC5D,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAClB,MAAM;QACR,KAAK,MAAM;YACT,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;YAChB,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;YAC3B,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAClB,MAAM;QACR,KAAK,SAAS;YACZ,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YACjC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACvB,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YAClC,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS;gBAAE,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC;YACvD,MAAM;QACR,KAAK,KAAK;YACR,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YACjC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAC9B,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS;gBAAE,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC;YACvD,MAAM;QACR,KAAK,QAAQ;YACX,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YACjC,GAAG,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;YACpC,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS;gBAAE,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC;YACvD,MAAM;QACR,KAAK,UAAU,CAAC;QAChB,KAAK,cAAc;YACjB,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YACjC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACvB,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YAClC,MAAM;QACR,KAAK,iBAAiB;YACpB,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YACjC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9B,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YAClC,MAAM;QACR,KAAK,iBAAiB;YACpB,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YACjC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9B,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YAClC,MAAM;QACR,KAAK,wBAAwB;YAC3B,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YACjC,GAAG,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;YAC5C,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YAClC,MAAM;QACR,KAAK,gBAAgB;YACnB,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YACjC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACvB,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAC7B,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YAClC,MAAM;QACR,KAAK,gBAAgB;YACnB,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YACjC,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YAClC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;YAC3B,MAAM;QACR,KAAK,QAAQ;YACX,IAAI,CAAC,CAAC,SAAS;gBAAE,CAAC,CAAC,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC5D,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAC7B,IAAI,CAAC,CAAC,MAAM;gBAAE,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,CAAC,CAAC,IAAI;gBAAE,CAAC,CAAC,IAAI,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACxF,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACvB,MAAM;QACR,KAAK,WAAW;YACd,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC/B,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;gBAAE,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;YAClD,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACvB,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAC7B,MAAM;QACR,KAAK,SAAS;YACZ,IAAI,CAAC,CAAC,SAAS;gBAAE,CAAC,CAAC,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC5D,CAAC,CAAC,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAChC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAC7B,MAAM;QACR,KAAK,aAAa;YAChB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;YACpB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACvB,MAAM;QACR,KAAK,MAAM;YACT,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC/B,GAAG,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;YACtC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC/B,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YACjC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;YACrB,GAAG,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;YAC1C,GAAG,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;YACpC,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YAClC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACvB,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC/B,MAAM;QACR,KAAK,mBAAmB;YACtB,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAC7B,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAC7B,MAAM;QACR,KAAK,OAAO;YACV,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YAClC,IAAI,CAAC,CAAC,SAAS;gBACb,CAAC,CAAC,SAAS,GAAG;oBACZ,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ;oBAC9B,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,SAAS;oBAChC,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,WAAW;iBACtC,CAAC;YACJ,MAAM;QACR,KAAK,cAAc;YACjB,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;gBAAE,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAClF,MAAM;QACR,KAAK,aAAa;YAChB,CAAC,CAAC,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM;QACR,KAAK,cAAc;YACjB,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC;YACrB,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,UAAU,CAAC;YAC7B,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACvB,MAAM;QACR,KAAK,MAAM;YACT,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACvB,MAAM;QACR,KAAK,WAAW;YACd,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,cAAc,CAAC;YACrC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;YACtB,MAAM;QACR,KAAK,cAAc;YACjB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM;IACV,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,cAAc,CAAC,CAAa;IACnC,MAAM,CAAC,GAAY,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACpE,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/B,GAAG,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,CAAC;AACX,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,eAAe,CAAC,CAAa;IAC3C,MAAM,CAAC,GAAY,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACpE,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;IACvC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;QACjB,MAAM,CAAC,GAAY,EAAE,SAAS,EAAE,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;QACzD,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,eAAe,CAAC,CAAa;IAC3C,MAAM,CAAC,GAAY,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IAC/E,GAAG,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,CAAC;AACX,CAAC;AAMD,SAAS,UAAU,CAAC,IAAa;IAC/B,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AACpD,CAAC;AAED,SAAS,aAAa,CAAC,IAAa;IAClC,MAAM,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,oBAAoB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjE,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,GAAG,CAAI,CAA0B,EAAE,GAAW,EAAE,KAAoB;IAC3E,IAAI,KAAK,KAAK,SAAS;QAAE,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAC1C,CAAC;AAED,SAAS,WAAW,CAAC,CAAI;IACvB,MAAM,CAAC,GAA4B,EAAE,CAAC;IACtC,GAAG,CAAC,CAAC,EAAE,sBAAsB,EAAE,CAAC,CAAC,sBAAsB,CAAC,CAAC;IACzD,GAAG,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC;IACzC,GAAG,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;IACvC,GAAG,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;IACxC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;IACjC,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;IACnC,GAAG,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC7C,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC9B,GAAG,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC9C,GAAG,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;IACxC,GAAG,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC;IAC3C,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;IACnC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC/B,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAI,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACpG,OAAO,CAAY,CAAC;AACtB,CAAC;AAED,SAAS,cAAc,CAAC,CAA0B,EAAE,CAAI;IACtD,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;IACxB,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;IAC1B,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,CAAC,UAAU;QAAE,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC;IACtC,IAAI,CAAC,CAAC,WAAW;QAAE,CAAC,CAAC,WAAW,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;IAC1H,GAAG,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC;IAC1C,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;IACpC,GAAG,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;IACxC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;QACV,MAAM,CAAC,GAA4B,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QAClI,GAAG,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACjD,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IACZ,CAAC;IACD,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;IACpC,IAAI,CAAC,CAAC,GAAG;QAAE,CAAC,CAAC,GAAG,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;IACxH,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACX,MAAM,CAAC,GAA4B,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAC5I,GAAG,CAAC,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC1D,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;IACb,CAAC;IACD,IAAI,CAAC,CAAC,UAAU;QACd,CAAC,CAAC,SAAS,GAAG;YACZ,cAAc,EAAE,CAAC,CAAC,UAAU,CAAC,eAAe;YAC5C,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM;YAC3B,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC,KAAK;YACzB,OAAO,EAAE,CAAC,CAAC,UAAU,CAAC,OAAO;SAC9B,CAAC;IACJ,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,CAAC,GAA4B,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC1D,GAAG,CAAC,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC3D,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACxC,GAAG,CAAC,CAAC,EAAE,qBAAqB,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC7D,GAAG,CAAC,CAAC,EAAE,mBAAmB,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACzD,GAAG,CAAC,CAAC,EAAE,uBAAuB,EAAE,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAClE,GAAG,CAAC,CAAC,EAAE,mBAAmB,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC1D,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;IACd,CAAC;IACD,IAAI,CAAC,CAAC,GAAG;QAAE,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;IACtE,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;QAChB,MAAM,CAAC,GAA4B,EAAE,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QACvG,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;QAChB,MAAM,CAAC,GAA4B,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;QAC5D,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACjC,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC5C,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC5C,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ;YAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;QAC3C,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM;YAAE,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;QACxC,IAAI,CAAC,CAAC,SAAS,CAAC,kBAAkB;YAAE,CAAC,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC9D,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,CAAC,OAAO;QAAE,CAAC,CAAC,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAClD,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC/B,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,eAAe,CAAC,CAAI;IAClC,MAAM,CAAC,GAA4B,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,QAAQ,CAAC,CAAC,IAAwB,EAAE,CAAC;QACnC,KAAK,UAAU;YACb,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS;gBAAE,CAAC,CAAC,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACxE,IAAI,CAAC,CAAC,SAAS;gBAAE,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC;YACpC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrB,MAAM;QACR,KAAK,OAAO;YACV,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,aAAa,CAAC;YAChC,IAAI,CAAC,CAAC,QAAQ;gBAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;YACjC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YAChC,GAAG,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;YACxC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAC7B,GAAG,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC;YAC9C,GAAG,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC;YAC9C,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrB,MAAM;QACR,KAAK,QAAQ;YACX,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;YAChB,IAAI,CAAC,CAAC,MAAM;gBAAE,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;YAC9B,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS;gBAAE,CAAC,CAAC,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACxE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrB,MAAM;QACR,KAAK,MAAM;YACT,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;YAChB,IAAI,CAAC,CAAC,MAAM;gBAAE,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;YAC9B,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrB,MAAM;QACR,KAAK,SAAS;YACZ,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;YAChC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;YACtB,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;YAClC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YAChC,MAAM;QACR,KAAK,KAAK;YACR,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;YAChC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC;YAC7B,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YAChC,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;YAClC,MAAM;QACR,KAAK,QAAQ;YACX,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;YAChC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC;YACnC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YAChC,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;YAClC,MAAM;QACR,KAAK,UAAU,CAAC;QAChB,KAAK,cAAc;YACjB,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;YAChC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;YACtB,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;YAClC,MAAM;QACR,KAAK,iBAAiB;YACpB,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;YAChC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACxB,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;YAClC,MAAM;QACR,KAAK,iBAAiB;YACpB,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;YAChC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACxB,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;YAClC,MAAM;QACR,KAAK,wBAAwB;YAC3B,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;YAChC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC;YACtC,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;YAClC,MAAM;QACR,KAAK,gBAAgB;YACnB,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;YAChC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;YACtB,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAC7B,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;YAClC,MAAM;QACR,KAAK,gBAAgB;YACnB,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;YAChC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC;YACjC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;YAC3B,MAAM;QACR,KAAK,QAAQ;YACX,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS;gBAAE,CAAC,CAAC,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACxE,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAC7B,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;gBAAE,CAAC,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC5D,IAAI,CAAC,CAAC,IAAI;gBAAE,CAAC,CAAC,IAAI,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACxF,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACvB,MAAM;QACR,KAAK,WAAW;YACd,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC;YAC9B,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;YAC1B,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACvB,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAC7B,MAAM;QACR,KAAK,SAAS;YACZ,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS;gBAAE,CAAC,CAAC,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACxE,CAAC,CAAC,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YACzC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAC7B,MAAM;QACR,KAAK,aAAa;YAChB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;YACpB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACvB,MAAM;QACR,KAAK,MAAM;YACT,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC;YAC9B,IAAI,CAAC,CAAC,YAAY;gBAAE,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC;YACzC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC/B,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YACjC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;YACrB,GAAG,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC;YAC1C,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;YACpC,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;YAClC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACvB,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC/B,MAAM;QACR,KAAK,mBAAmB;YACtB,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;YAC5B,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAC7B,MAAM;QACR,KAAK,OAAO;YACV,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC;YACjC,IAAI,CAAC,CAAC,SAAS;gBACb,CAAC,CAAC,SAAS,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;YAC5H,MAAM;QACR,KAAK,cAAc;YACjB,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC;YACtC,MAAM;QACR,KAAK,cAAc;YACjB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC;YACrB,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,WAAW,CAAC;YAC7B,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACvB,MAAM;QACR,KAAK,MAAM;YACT,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACvB,MAAM;QACR,KAAK,WAAW;YACd,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,eAAe,CAAC;YACrC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;YACtB,MAAM;QACR,KAAK,cAAc;YACjB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM;QACR,KAAK,aAAa;YAChB,MAAM,IAAI,UAAU,CAAC,wDAAwD,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,CAAwB,CAAC;AAClC,CAAC"}