@atomic-ehr/codegen 0.0.1-canary.20250808231821.ab61009

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 (64) hide show
  1. package/README.md +446 -0
  2. package/dist/api/builder.d.ts +147 -0
  3. package/dist/api/builder.d.ts.map +1 -0
  4. package/dist/api/generators/typescript.d.ts +129 -0
  5. package/dist/api/generators/typescript.d.ts.map +1 -0
  6. package/dist/api/index.d.ts +51 -0
  7. package/dist/api/index.d.ts.map +1 -0
  8. package/dist/cli/commands/generate/typescript.d.ts +11 -0
  9. package/dist/cli/commands/generate/typescript.d.ts.map +1 -0
  10. package/dist/cli/commands/generate.d.ts +23 -0
  11. package/dist/cli/commands/generate.d.ts.map +1 -0
  12. package/dist/cli/commands/index.d.ts +40 -0
  13. package/dist/cli/commands/index.d.ts.map +1 -0
  14. package/dist/cli/commands/typeschema/generate.d.ts +18 -0
  15. package/dist/cli/commands/typeschema/generate.d.ts.map +1 -0
  16. package/dist/cli/commands/typeschema.d.ts +11 -0
  17. package/dist/cli/commands/typeschema.d.ts.map +1 -0
  18. package/dist/cli/index.d.ts +11 -0
  19. package/dist/cli/index.d.ts.map +1 -0
  20. package/dist/cli/utils/prompts.d.ts +57 -0
  21. package/dist/cli/utils/prompts.d.ts.map +1 -0
  22. package/dist/cli/utils/spinner.d.ts +111 -0
  23. package/dist/cli/utils/spinner.d.ts.map +1 -0
  24. package/dist/config.d.ts +171 -0
  25. package/dist/config.d.ts.map +1 -0
  26. package/dist/index.d.ts +83 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +4008 -0
  29. package/dist/logger.d.ts +158 -0
  30. package/dist/logger.d.ts.map +1 -0
  31. package/dist/types/base.d.ts +66 -0
  32. package/dist/types/base.d.ts.map +1 -0
  33. package/dist/typeschema/cache.d.ts +105 -0
  34. package/dist/typeschema/cache.d.ts.map +1 -0
  35. package/dist/typeschema/core/binding.d.ts +29 -0
  36. package/dist/typeschema/core/binding.d.ts.map +1 -0
  37. package/dist/typeschema/core/field-builder.d.ts +45 -0
  38. package/dist/typeschema/core/field-builder.d.ts.map +1 -0
  39. package/dist/typeschema/core/identifier.d.ts +28 -0
  40. package/dist/typeschema/core/identifier.d.ts.map +1 -0
  41. package/dist/typeschema/core/nested-types.d.ts +25 -0
  42. package/dist/typeschema/core/nested-types.d.ts.map +1 -0
  43. package/dist/typeschema/core/transformer.d.ts +18 -0
  44. package/dist/typeschema/core/transformer.d.ts.map +1 -0
  45. package/dist/typeschema/generator.d.ts +57 -0
  46. package/dist/typeschema/generator.d.ts.map +1 -0
  47. package/dist/typeschema/index.d.ts +66 -0
  48. package/dist/typeschema/index.d.ts.map +1 -0
  49. package/dist/typeschema/parser.d.ts +92 -0
  50. package/dist/typeschema/parser.d.ts.map +1 -0
  51. package/dist/typeschema/profile/processor.d.ts +14 -0
  52. package/dist/typeschema/profile/processor.d.ts.map +1 -0
  53. package/dist/typeschema/schema.d.ts +486 -0
  54. package/dist/typeschema/schema.d.ts.map +1 -0
  55. package/dist/typeschema/types.d.ts +326 -0
  56. package/dist/typeschema/types.d.ts.map +1 -0
  57. package/dist/typeschema/utils.d.ts +7 -0
  58. package/dist/typeschema/utils.d.ts.map +1 -0
  59. package/dist/typeschema/value-set/processor.d.ts +20 -0
  60. package/dist/typeschema/value-set/processor.d.ts.map +1 -0
  61. package/dist/utils.d.ts +23 -0
  62. package/dist/utils.d.ts.map +1 -0
  63. package/package.json +60 -0
  64. package/src/index.ts +86 -0
@@ -0,0 +1,92 @@
1
+ import type { TypeSchema, TypeSchemaIdentifier, TypeschemaParserOptions } from "./types";
2
+ /**
3
+ * TypeSchema Parser class
4
+ *
5
+ * Provides functionality to read, parse, and manipulate TypeSchema documents
6
+ * from files or strings in various formats.
7
+ */
8
+ export declare class TypeSchemaParser {
9
+ private options;
10
+ constructor(options?: TypeschemaParserOptions);
11
+ /**
12
+ * Parse TypeSchema from file
13
+ */
14
+ parseFromFile(filePath: string): Promise<TypeSchema[]>;
15
+ /**
16
+ * Parse TypeSchema from string content
17
+ */
18
+ parseFromString(content: string, format?: "ndjson" | "json"): Promise<TypeSchema[]>;
19
+ /**
20
+ * Parse multiple TypeSchema files
21
+ */
22
+ parseFromFiles(filePaths: string[]): Promise<TypeSchema[]>;
23
+ /**
24
+ * Parse a single TypeSchema object
25
+ */
26
+ parseSchema(schemaData: any): TypeSchema;
27
+ /**
28
+ * Find schemas by identifier
29
+ */
30
+ findByIdentifier(schemas: TypeSchema[], identifier: Partial<TypeSchemaIdentifier>): TypeSchema[];
31
+ /**
32
+ * Find schema by URL
33
+ */
34
+ findByUrl(schemas: TypeSchema[], url: string): TypeSchema | undefined;
35
+ /**
36
+ * Find schemas by kind
37
+ */
38
+ findByKind(schemas: TypeSchema[], kind: TypeSchemaIdentifier["kind"]): TypeSchema[];
39
+ /**
40
+ * Find schemas by package
41
+ */
42
+ findByPackage(schemas: TypeSchema[], packageName: string): TypeSchema[];
43
+ /**
44
+ * Get all dependencies from a schema
45
+ */
46
+ getDependencies(schema: TypeSchema): TypeSchemaIdentifier[];
47
+ /**
48
+ * Resolve schema dependencies
49
+ */
50
+ resolveDependencies(schemas: TypeSchema[], targetSchema: TypeSchema): TypeSchema[];
51
+ /**
52
+ * Detect format from content or filename
53
+ */
54
+ private detectFormat;
55
+ /**
56
+ * Parse NDJSON format
57
+ */
58
+ private parseNDJSON;
59
+ /**
60
+ * Parse JSON format
61
+ */
62
+ private parseJSON;
63
+ /**
64
+ * Validate schemas
65
+ */
66
+ private validateSchemas;
67
+ /**
68
+ * Validate identifier structure
69
+ */
70
+ private isValidIdentifier;
71
+ /**
72
+ * Check if identifier matches criteria
73
+ */
74
+ private matchesIdentifier;
75
+ /**
76
+ * Remove duplicate dependencies
77
+ */
78
+ private deduplicateDependencies;
79
+ }
80
+ /**
81
+ * Convenience function to parse TypeSchema from file
82
+ */
83
+ export declare function parseTypeSchemaFromFile(filePath: string, options?: TypeschemaParserOptions): Promise<TypeSchema[]>;
84
+ /**
85
+ * Convenience function to parse TypeSchema from string
86
+ */
87
+ export declare function parseTypeSchemaFromString(content: string, format?: "ndjson" | "json", options?: TypeschemaParserOptions): Promise<TypeSchema[]>;
88
+ /**
89
+ * Convenience function to parse TypeSchema from multiple files
90
+ */
91
+ export declare function parseTypeSchemaFromFiles(filePaths: string[], options?: TypeschemaParserOptions): Promise<TypeSchema[]>;
92
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/typeschema/parser.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACX,UAAU,EACV,oBAAoB,EACpB,uBAAuB,EACvB,MAAM,SAAS,CAAC;AAEjB;;;;;GAKG;AACH,qBAAa,gBAAgB;IAC5B,OAAO,CAAC,OAAO,CAAoC;gBAEvC,OAAO,GAAE,uBAA4B;IASjD;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAU5D;;OAEG;IACG,eAAe,CACpB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,GACxB,OAAO,CAAC,UAAU,EAAE,CAAC;IAkBxB;;OAEG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAWhE;;OAEG;IACH,WAAW,CAAC,UAAU,EAAE,GAAG,GAAG,UAAU;IAexC;;OAEG;IACH,gBAAgB,CACf,OAAO,EAAE,UAAU,EAAE,EACrB,UAAU,EAAE,OAAO,CAAC,oBAAoB,CAAC,GACvC,UAAU,EAAE;IAMf;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIrE;;OAEG;IACH,UAAU,CACT,OAAO,EAAE,UAAU,EAAE,EACrB,IAAI,EAAE,oBAAoB,CAAC,MAAM,CAAC,GAChC,UAAU,EAAE;IAIf;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,UAAU,EAAE;IAMvE;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,oBAAoB,EAAE;IA6D3D;;OAEG;IACH,mBAAmB,CAClB,OAAO,EAAE,UAAU,EAAE,EACrB,YAAY,EAAE,UAAU,GACtB,UAAU,EAAE;IAcf;;OAEG;IACH,OAAO,CAAC,YAAY;IA6BpB;;OAEG;IACH,OAAO,CAAC,WAAW;IAmBnB;;OAEG;IACH,OAAO,CAAC,SAAS;IAcjB;;OAEG;IACH,OAAO,CAAC,eAAe;IAcvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAczB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;IACH,OAAO,CAAC,uBAAuB;CAe/B;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC5C,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,uBAAuB,GAC/B,OAAO,CAAC,UAAU,EAAE,CAAC,CAGvB;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC9C,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,EAC1B,OAAO,CAAC,EAAE,uBAAuB,GAC/B,OAAO,CAAC,UAAU,EAAE,CAAC,CAGvB;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC7C,SAAS,EAAE,MAAM,EAAE,EACnB,OAAO,CAAC,EAAE,uBAAuB,GAC/B,OAAO,CAAC,UAAU,EAAE,CAAC,CAGvB"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Profile Processor
3
+ *
4
+ * Handles transformation of FHIR profiles to TypeSchema format
5
+ */
6
+ import type { CanonicalManager } from "@atomic-ehr/fhir-canonical-manager";
7
+ import type { FHIRSchema } from "@atomic-ehr/fhirschema";
8
+ import type { PackageInfo } from "../types";
9
+ /**
10
+ * Transform a FHIR profile to TypeSchema format
11
+ * Profiles are treated as specialized resources that extend base resources
12
+ */
13
+ export declare function transformProfile(fhirSchema: FHIRSchema, manager: ReturnType<typeof CanonicalManager>, packageInfo?: PackageInfo): Promise<any>;
14
+ //# sourceMappingURL=processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processor.d.ts","sourceRoot":"","sources":["../../../src/typeschema/profile/processor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,KAAK,EAAE,WAAW,EAAwB,MAAM,UAAU,CAAC;AAElE;;;GAGG;AACH,wBAAsB,gBAAgB,CACrC,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,EAC5C,WAAW,CAAC,EAAE,WAAW,GACvB,OAAO,CAAC,GAAG,CAAC,CA0Ed"}
@@ -0,0 +1,486 @@
1
+ export declare const validationSchema: {
2
+ $schema: string;
3
+ $id: string;
4
+ $comment: string;
5
+ title: string;
6
+ description: string;
7
+ type: string;
8
+ definitions: {
9
+ "type-schema-identifier": {
10
+ type: string;
11
+ oneOf: {
12
+ $ref: string;
13
+ }[];
14
+ properties: {
15
+ kind: {
16
+ type: string;
17
+ };
18
+ package: {
19
+ type: string;
20
+ description: string;
21
+ };
22
+ version: {
23
+ type: string;
24
+ description: string;
25
+ };
26
+ name: {
27
+ type: string;
28
+ description: string;
29
+ };
30
+ url: {
31
+ type: string;
32
+ pattern: string;
33
+ description: string;
34
+ };
35
+ };
36
+ required: string[];
37
+ additionalProperties: boolean;
38
+ };
39
+ "with-primitive-type-kind": {
40
+ type: string;
41
+ description: string;
42
+ properties: {
43
+ kind: {
44
+ const: string;
45
+ };
46
+ };
47
+ };
48
+ "with-valueset-kind": {
49
+ type: string;
50
+ description: string;
51
+ properties: {
52
+ kind: {
53
+ const: string;
54
+ };
55
+ };
56
+ };
57
+ "with-binding-kind": {
58
+ type: string;
59
+ description: string;
60
+ properties: {
61
+ kind: {
62
+ const: string;
63
+ };
64
+ };
65
+ };
66
+ "with-complex-type-kind": {
67
+ type: string;
68
+ description: string;
69
+ properties: {
70
+ kind: {
71
+ const: string;
72
+ };
73
+ };
74
+ };
75
+ "with-resource-kind": {
76
+ type: string;
77
+ description: string;
78
+ properties: {
79
+ kind: {
80
+ const: string;
81
+ };
82
+ };
83
+ };
84
+ "with-nested-kind": {
85
+ type: string;
86
+ description: string;
87
+ properties: {
88
+ kind: {
89
+ const: string;
90
+ };
91
+ };
92
+ };
93
+ "with-logical-kind": {
94
+ type: string;
95
+ description: string;
96
+ properties: {
97
+ kind: {
98
+ const: string;
99
+ };
100
+ };
101
+ };
102
+ "field.regular": {
103
+ title: string;
104
+ description: string;
105
+ type: string;
106
+ properties: {
107
+ type: {
108
+ $ref: string;
109
+ description: string;
110
+ };
111
+ reference: {
112
+ type: string;
113
+ description: string;
114
+ items: {
115
+ $ref: string;
116
+ };
117
+ };
118
+ required: {
119
+ type: string;
120
+ default: boolean;
121
+ description: string;
122
+ };
123
+ excluded: {
124
+ type: string;
125
+ default: boolean;
126
+ description: string;
127
+ };
128
+ array: {
129
+ type: string;
130
+ default: boolean;
131
+ description: string;
132
+ };
133
+ binding: {
134
+ allOf: {
135
+ $ref: string;
136
+ }[];
137
+ };
138
+ enum: {
139
+ type: string;
140
+ items: {
141
+ type: string;
142
+ };
143
+ description: string;
144
+ };
145
+ min: {
146
+ type: string;
147
+ description: string;
148
+ };
149
+ max: {
150
+ type: string;
151
+ description: string;
152
+ };
153
+ };
154
+ required: string[];
155
+ additionalProperties: boolean;
156
+ };
157
+ "field.polymorphic-declaration": {
158
+ title: string;
159
+ description: string;
160
+ type: string;
161
+ properties: {
162
+ choices: {
163
+ type: string;
164
+ items: {
165
+ type: string;
166
+ };
167
+ description: string;
168
+ };
169
+ required: {
170
+ type: string;
171
+ default: boolean;
172
+ description: string;
173
+ };
174
+ excluded: {
175
+ type: string;
176
+ default: boolean;
177
+ description: string;
178
+ };
179
+ array: {
180
+ type: string;
181
+ default: boolean;
182
+ description: string;
183
+ };
184
+ min: {
185
+ type: string;
186
+ description: string;
187
+ };
188
+ max: {
189
+ type: string;
190
+ description: string;
191
+ };
192
+ };
193
+ required: string[];
194
+ additionalProperties: boolean;
195
+ };
196
+ "field.polymorphic-instance": {
197
+ title: string;
198
+ description: string;
199
+ type: string;
200
+ properties: {
201
+ choiceOf: {
202
+ type: string;
203
+ description: string;
204
+ };
205
+ type: {
206
+ $ref: string;
207
+ description: string;
208
+ };
209
+ required: {
210
+ type: string;
211
+ default: boolean;
212
+ description: string;
213
+ };
214
+ excluded: {
215
+ type: string;
216
+ default: boolean;
217
+ description: string;
218
+ };
219
+ array: {
220
+ type: string;
221
+ default: boolean;
222
+ description: string;
223
+ };
224
+ reference: {
225
+ type: string;
226
+ description: string;
227
+ items: {
228
+ $ref: string;
229
+ };
230
+ };
231
+ binding: {
232
+ allOf: {
233
+ $ref: string;
234
+ }[];
235
+ description: string;
236
+ };
237
+ enum: {
238
+ type: string;
239
+ items: {
240
+ type: string;
241
+ };
242
+ description: string;
243
+ };
244
+ min: {
245
+ type: string;
246
+ description: string;
247
+ };
248
+ max: {
249
+ type: string;
250
+ description: string;
251
+ };
252
+ };
253
+ required: string[];
254
+ additionalProperties: boolean;
255
+ };
256
+ dependencies: {
257
+ type: string;
258
+ description: string;
259
+ items: {
260
+ $ref: string;
261
+ };
262
+ };
263
+ };
264
+ oneOf: ({
265
+ title: string;
266
+ description: string;
267
+ type: string;
268
+ properties: {
269
+ identifier: {
270
+ allOf: {
271
+ $ref: string;
272
+ }[];
273
+ description: string;
274
+ };
275
+ description: {
276
+ type: string;
277
+ description: string;
278
+ };
279
+ base: {
280
+ $ref: string;
281
+ description: string;
282
+ };
283
+ dependencies: {
284
+ $ref: string;
285
+ description: string;
286
+ type?: undefined;
287
+ items?: undefined;
288
+ };
289
+ fields?: undefined;
290
+ nested?: undefined;
291
+ concept?: undefined;
292
+ compose?: undefined;
293
+ type?: undefined;
294
+ strength?: undefined;
295
+ enum?: undefined;
296
+ valueset?: undefined;
297
+ };
298
+ required: string[];
299
+ additionalProperties: boolean;
300
+ } | {
301
+ title: string;
302
+ description: string;
303
+ type: string;
304
+ properties: {
305
+ identifier: {
306
+ allOf: ({
307
+ $ref: string;
308
+ oneOf?: undefined;
309
+ } | {
310
+ oneOf: {
311
+ $ref: string;
312
+ }[];
313
+ $ref?: undefined;
314
+ })[];
315
+ description: string;
316
+ };
317
+ base: {
318
+ $ref: string;
319
+ description: string;
320
+ };
321
+ description: {
322
+ type: string;
323
+ description: string;
324
+ };
325
+ fields: {
326
+ type: string;
327
+ description: string;
328
+ additionalProperties: {
329
+ anyOf: {
330
+ $ref: string;
331
+ }[];
332
+ };
333
+ };
334
+ nested: {
335
+ type: string;
336
+ description: string;
337
+ items: {
338
+ type: string;
339
+ properties: {
340
+ identifier: {
341
+ allOf: {
342
+ $ref: string;
343
+ }[];
344
+ description: string;
345
+ };
346
+ base: {
347
+ $ref: string;
348
+ description: string;
349
+ };
350
+ fields: {
351
+ type: string;
352
+ description: string;
353
+ additionalProperties: {
354
+ anyOf: {
355
+ $ref: string;
356
+ }[];
357
+ };
358
+ };
359
+ };
360
+ required: string[];
361
+ additionalProperties: boolean;
362
+ };
363
+ };
364
+ dependencies: {
365
+ type: string;
366
+ description: string;
367
+ items: {
368
+ $ref: string;
369
+ };
370
+ $ref?: undefined;
371
+ };
372
+ concept?: undefined;
373
+ compose?: undefined;
374
+ type?: undefined;
375
+ strength?: undefined;
376
+ enum?: undefined;
377
+ valueset?: undefined;
378
+ };
379
+ required: string[];
380
+ additionalProperties: boolean;
381
+ } | {
382
+ title: string;
383
+ description: string;
384
+ type: string;
385
+ properties: {
386
+ identifier: {
387
+ allOf: {
388
+ $ref: string;
389
+ }[];
390
+ description: string;
391
+ };
392
+ description: {
393
+ type: string;
394
+ description: string;
395
+ };
396
+ concept: {
397
+ type: string;
398
+ description: string;
399
+ items: {
400
+ type: string;
401
+ properties: {
402
+ code: {
403
+ type: string;
404
+ description: string;
405
+ };
406
+ display: {
407
+ type: string;
408
+ description: string;
409
+ };
410
+ system: {
411
+ type: string;
412
+ description: string;
413
+ };
414
+ };
415
+ required: string[];
416
+ additionalProperties: boolean;
417
+ };
418
+ };
419
+ compose: {
420
+ type: string;
421
+ description: string;
422
+ };
423
+ base?: undefined;
424
+ dependencies?: undefined;
425
+ fields?: undefined;
426
+ nested?: undefined;
427
+ type?: undefined;
428
+ strength?: undefined;
429
+ enum?: undefined;
430
+ valueset?: undefined;
431
+ };
432
+ required: string[];
433
+ additionalProperties: boolean;
434
+ } | {
435
+ title: string;
436
+ type: string;
437
+ properties: {
438
+ identifier: {
439
+ allOf: {
440
+ $ref: string;
441
+ }[];
442
+ description: string;
443
+ };
444
+ description: {
445
+ type: string;
446
+ description: string;
447
+ };
448
+ type: {
449
+ $ref: string;
450
+ };
451
+ strength: {
452
+ type: string;
453
+ description: string;
454
+ };
455
+ enum: {
456
+ type: string;
457
+ items: {
458
+ type: string;
459
+ };
460
+ description: string;
461
+ };
462
+ valueset: {
463
+ allOf: {
464
+ $ref: string;
465
+ }[];
466
+ };
467
+ dependencies: {
468
+ type: string;
469
+ description: string;
470
+ items: {
471
+ $ref: string;
472
+ };
473
+ $ref?: undefined;
474
+ };
475
+ base?: undefined;
476
+ fields?: undefined;
477
+ nested?: undefined;
478
+ concept?: undefined;
479
+ compose?: undefined;
480
+ };
481
+ required: string[];
482
+ additionalProperties: boolean;
483
+ description?: undefined;
484
+ })[];
485
+ };
486
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/typeschema/schema.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+d5B,CAAC"}