@kidemy/lib 1.0.6 → 1.0.7

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.
@@ -1,170 +0,0 @@
1
- import { z } from 'zod';
2
- import { ActivationStatus, UserRole } from '../model/model';
3
- import { createZodEnum } from '../model/utility';
4
- describe('createZodEnum', () => {
5
- describe('with UserRole enum', () => {
6
- it('should create a valid Zod enum schema for UserRole', () => {
7
- const zodEnum = createZodEnum(UserRole);
8
- expect(zodEnum).toBeInstanceOf(z.ZodEnum);
9
- expect(zodEnum.parse(UserRole.OWNER)).toBe(UserRole.OWNER);
10
- expect(zodEnum.parse(UserRole.PARENT)).toBe(UserRole.PARENT);
11
- expect(zodEnum.parse(UserRole.CHILD)).toBe(UserRole.CHILD);
12
- });
13
- it('should reject invalid values for UserRole', () => {
14
- const zodEnum = createZodEnum(UserRole);
15
- expect(() => zodEnum.parse('invalid-role')).toThrow();
16
- expect(() => zodEnum.parse('admin')).toThrow();
17
- expect(() => zodEnum.parse('')).toThrow();
18
- expect(() => zodEnum.parse(null)).toThrow();
19
- expect(() => zodEnum.parse(undefined)).toThrow();
20
- });
21
- it('should handle all UserRole values', () => {
22
- const zodEnum = createZodEnum(UserRole);
23
- const allUserRoles = Object.values(UserRole);
24
- allUserRoles.forEach((role) => {
25
- expect(zodEnum.parse(role)).toBe(role);
26
- });
27
- });
28
- });
29
- describe('with ActivationStatus enum', () => {
30
- it('should create a valid Zod enum schema for ActivationStatus', () => {
31
- const zodEnum = createZodEnum(ActivationStatus);
32
- expect(zodEnum).toBeInstanceOf(z.ZodEnum);
33
- expect(zodEnum.parse(ActivationStatus.ACTIVE)).toBe(ActivationStatus.ACTIVE);
34
- expect(zodEnum.parse(ActivationStatus.DISABLED)).toBe(ActivationStatus.DISABLED);
35
- });
36
- it('should reject invalid values for ActivationStatus', () => {
37
- const zodEnum = createZodEnum(ActivationStatus);
38
- expect(() => zodEnum.parse('invalid-status')).toThrow();
39
- expect(() => zodEnum.parse('enabled')).toThrow();
40
- expect(() => zodEnum.parse('')).toThrow();
41
- expect(() => zodEnum.parse(null)).toThrow();
42
- expect(() => zodEnum.parse(undefined)).toThrow();
43
- });
44
- it('should handle all ActivationStatus values', () => {
45
- const zodEnum = createZodEnum(ActivationStatus);
46
- const allActivationStatuses = Object.values(ActivationStatus);
47
- allActivationStatuses.forEach((status) => {
48
- expect(zodEnum.parse(status)).toBe(status);
49
- });
50
- });
51
- });
52
- describe('with custom enum', () => {
53
- const CustomEnum = {
54
- VALUE_A: 'value-a',
55
- VALUE_B: 'value-b',
56
- VALUE_C: 'value-c',
57
- };
58
- it('should create a valid Zod enum schema for custom enum', () => {
59
- const zodEnum = createZodEnum(CustomEnum);
60
- expect(zodEnum).toBeInstanceOf(z.ZodEnum);
61
- expect(zodEnum.parse(CustomEnum.VALUE_A)).toBe(CustomEnum.VALUE_A);
62
- expect(zodEnum.parse(CustomEnum.VALUE_B)).toBe(CustomEnum.VALUE_B);
63
- expect(zodEnum.parse(CustomEnum.VALUE_C)).toBe(CustomEnum.VALUE_C);
64
- });
65
- it('should reject invalid values for custom enum', () => {
66
- const zodEnum = createZodEnum(CustomEnum);
67
- expect(() => zodEnum.parse('invalid-value')).toThrow();
68
- expect(() => zodEnum.parse('value-d')).toThrow();
69
- expect(() => zodEnum.parse('')).toThrow();
70
- expect(() => zodEnum.parse(null)).toThrow();
71
- expect(() => zodEnum.parse(undefined)).toThrow();
72
- });
73
- });
74
- describe('edge cases', () => {
75
- it('should handle empty enum', () => {
76
- const EmptyEnum = {};
77
- const zodEnum = createZodEnum(EmptyEnum);
78
- expect(zodEnum).toBeInstanceOf(z.ZodEnum);
79
- expect(() => zodEnum.parse('any-value')).toThrow();
80
- });
81
- it('should handle enum with single value', () => {
82
- const SingleValueEnum = {
83
- ONLY_VALUE: 'only-value',
84
- };
85
- const zodEnum = createZodEnum(SingleValueEnum);
86
- expect(zodEnum).toBeInstanceOf(z.ZodEnum);
87
- expect(zodEnum.parse(SingleValueEnum.ONLY_VALUE)).toBe(SingleValueEnum.ONLY_VALUE);
88
- expect(() => zodEnum.parse('other-value')).toThrow();
89
- });
90
- it('should handle enum with numeric string values', () => {
91
- const NumericEnum = {
92
- ONE: '1',
93
- TWO: '2',
94
- THREE: '3',
95
- };
96
- const zodEnum = createZodEnum(NumericEnum);
97
- expect(zodEnum).toBeInstanceOf(z.ZodEnum);
98
- expect(zodEnum.parse(NumericEnum.ONE)).toBe(NumericEnum.ONE);
99
- expect(zodEnum.parse(NumericEnum.TWO)).toBe(NumericEnum.TWO);
100
- expect(zodEnum.parse(NumericEnum.THREE)).toBe(NumericEnum.THREE);
101
- expect(() => zodEnum.parse('4')).toThrow();
102
- });
103
- it('should handle enum with special characters', () => {
104
- const SpecialCharEnum = {
105
- VALUE_WITH_DASH: 'value-with-dash',
106
- VALUE_WITH_UNDERSCORE: 'value_with_underscore',
107
- VALUE_WITH_DOTS: 'value.with.dots',
108
- };
109
- const zodEnum = createZodEnum(SpecialCharEnum);
110
- expect(zodEnum).toBeInstanceOf(z.ZodEnum);
111
- expect(zodEnum.parse(SpecialCharEnum.VALUE_WITH_DASH)).toBe(SpecialCharEnum.VALUE_WITH_DASH);
112
- expect(zodEnum.parse(SpecialCharEnum.VALUE_WITH_UNDERSCORE)).toBe(SpecialCharEnum.VALUE_WITH_UNDERSCORE);
113
- expect(zodEnum.parse(SpecialCharEnum.VALUE_WITH_DOTS)).toBe(SpecialCharEnum.VALUE_WITH_DOTS);
114
- });
115
- it('should handle enum with unicode characters', () => {
116
- const UnicodeEnum = {
117
- EMOJI: '😀',
118
- ACCENTED: 'café',
119
- CHINESE: '中文',
120
- };
121
- const zodEnum = createZodEnum(UnicodeEnum);
122
- expect(zodEnum).toBeInstanceOf(z.ZodEnum);
123
- expect(zodEnum.parse(UnicodeEnum.EMOJI)).toBe(UnicodeEnum.EMOJI);
124
- expect(zodEnum.parse(UnicodeEnum.ACCENTED)).toBe(UnicodeEnum.ACCENTED);
125
- expect(zodEnum.parse(UnicodeEnum.CHINESE)).toBe(UnicodeEnum.CHINESE);
126
- });
127
- });
128
- describe('type safety', () => {
129
- it('should maintain type safety with UserRole', () => {
130
- const zodEnum = createZodEnum(UserRole);
131
- const result = zodEnum.parse(UserRole.OWNER);
132
- expect(typeof result).toBe('string');
133
- expect(result).toBe(UserRole.OWNER);
134
- });
135
- it('should maintain type safety with ActivationStatus', () => {
136
- const zodEnum = createZodEnum(ActivationStatus);
137
- const result = zodEnum.parse(ActivationStatus.ACTIVE);
138
- expect(typeof result).toBe('string');
139
- expect(result).toBe(ActivationStatus.ACTIVE);
140
- });
141
- });
142
- describe('integration with Zod schemas', () => {
143
- it('should work correctly in object schemas', () => {
144
- const TestSchema = z.object({
145
- role: createZodEnum(UserRole),
146
- status: createZodEnum(ActivationStatus),
147
- });
148
- const validData = {
149
- role: UserRole.OWNER,
150
- status: ActivationStatus.ACTIVE,
151
- };
152
- const result = TestSchema.parse(validData);
153
- expect(result).toEqual(validData);
154
- expect(result.role).toBe(UserRole.OWNER);
155
- expect(result.status).toBe(ActivationStatus.ACTIVE);
156
- });
157
- it('should reject invalid data in object schemas', () => {
158
- const TestSchema = z.object({
159
- role: createZodEnum(UserRole),
160
- status: createZodEnum(ActivationStatus),
161
- });
162
- const invalidData = {
163
- role: 'invalid-role',
164
- status: ActivationStatus.ACTIVE,
165
- };
166
- expect(() => TestSchema.parse(invalidData)).toThrow();
167
- });
168
- });
169
- });
170
- //# sourceMappingURL=utility.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utility.spec.js","sourceRoot":"","sources":["../../src/tests/utility.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAE5D,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;YAGxC,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAG1C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC3D,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC7D,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YAEnD,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;YAGxC,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACtD,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YAC/C,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YAC5C,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAE3C,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;YACxC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAG7C,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC5B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;QAC1C,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;YAEpE,MAAM,OAAO,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC;YAGhD,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAG1C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CACjD,gBAAgB,CAAC,MAAM,CACxB,CAAC;YACF,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CACnD,gBAAgB,CAAC,QAAQ,CAC1B,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAE3D,MAAM,OAAO,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC;YAGhD,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACxD,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACjD,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YAC5C,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YAEnD,MAAM,OAAO,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC;YAChD,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YAG9D,qBAAqB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBACvC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,MAAM,UAAU,GAAG;YACjB,OAAO,EAAE,SAAS;YAClB,OAAO,EAAE,SAAS;YAClB,OAAO,EAAE,SAAS;SACV,CAAC;QAEX,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAE/D,MAAM,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;YAG1C,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAG1C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACnE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACnE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YAEtD,MAAM,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;YAG1C,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACvD,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACjD,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YAC5C,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;YAElC,MAAM,SAAS,GAAG,EAAW,CAAC;YAG9B,MAAM,OAAO,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;YAGzC,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAE9C,MAAM,eAAe,GAAG;gBACtB,UAAU,EAAE,YAAY;aAChB,CAAC;YAGX,MAAM,OAAO,GAAG,aAAa,CAAC,eAAe,CAAC,CAAC;YAG/C,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CACpD,eAAe,CAAC,UAAU,CAC3B,CAAC;YACF,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YAEvD,MAAM,WAAW,GAAG;gBAClB,GAAG,EAAE,GAAG;gBACR,GAAG,EAAE,GAAG;gBACR,KAAK,EAAE,GAAG;aACF,CAAC;YAGX,MAAM,OAAO,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;YAG3C,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAC7D,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAC7D,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACjE,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YAEpD,MAAM,eAAe,GAAG;gBACtB,eAAe,EAAE,iBAAiB;gBAClC,qBAAqB,EAAE,uBAAuB;gBAC9C,eAAe,EAAE,iBAAiB;aAC1B,CAAC;YAGX,MAAM,OAAO,GAAG,aAAa,CAAC,eAAe,CAAC,CAAC;YAG/C,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CACzD,eAAe,CAAC,eAAe,CAChC,CAAC;YACF,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAC/D,eAAe,CAAC,qBAAqB,CACtC,CAAC;YACF,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CACzD,eAAe,CAAC,eAAe,CAChC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YAEpD,MAAM,WAAW,GAAG;gBAClB,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,IAAI;aACL,CAAC;YAGX,MAAM,OAAO,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;YAG3C,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACjE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YACvE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YAEnD,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;YAGxC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAG7C,MAAM,CAAC,OAAO,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAE3D,MAAM,OAAO,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC;YAGhD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAGtD,MAAM,CAAC,OAAO,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;QAC5C,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YAEjD,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;gBAC1B,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC;gBAC7B,MAAM,EAAE,aAAa,CAAC,gBAAgB,CAAC;aACxC,CAAC,CAAC;YAEH,MAAM,SAAS,GAAG;gBAChB,IAAI,EAAE,QAAQ,CAAC,KAAK;gBACpB,MAAM,EAAE,gBAAgB,CAAC,MAAM;aAChC,CAAC;YAGF,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAG3C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YAEtD,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;gBAC1B,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC;gBAC7B,MAAM,EAAE,aAAa,CAAC,gBAAgB,CAAC;aACxC,CAAC,CAAC;YAEH,MAAM,WAAW,GAAG;gBAClB,IAAI,EAAE,cAAc;gBACpB,MAAM,EAAE,gBAAgB,CAAC,MAAM;aAChC,CAAC;YAGF,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACxD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}