scorecard-ai-mcp 1.0.0-alpha.6 → 1.0.0-alpha.8

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 (195) hide show
  1. package/README.md +63 -35
  2. package/compat.d.mts +2 -0
  3. package/compat.d.mts.map +1 -1
  4. package/compat.d.ts +2 -0
  5. package/compat.d.ts.map +1 -1
  6. package/compat.js +7 -4
  7. package/compat.js.map +1 -1
  8. package/compat.mjs +8 -4
  9. package/compat.mjs.map +1 -1
  10. package/dynamic-tools.d.mts +12 -0
  11. package/dynamic-tools.d.mts.map +1 -0
  12. package/dynamic-tools.d.ts +12 -0
  13. package/dynamic-tools.d.ts.map +1 -0
  14. package/dynamic-tools.js +134 -0
  15. package/dynamic-tools.js.map +1 -0
  16. package/dynamic-tools.mjs +131 -0
  17. package/dynamic-tools.mjs.map +1 -0
  18. package/index.js +15 -18
  19. package/index.js.map +1 -1
  20. package/index.mjs +17 -20
  21. package/index.mjs.map +1 -1
  22. package/options.d.mts +2 -0
  23. package/options.d.mts.map +1 -1
  24. package/options.d.ts +2 -0
  25. package/options.d.ts.map +1 -1
  26. package/options.js +17 -0
  27. package/options.js.map +1 -1
  28. package/options.mjs +17 -0
  29. package/options.mjs.map +1 -1
  30. package/package.json +13 -20
  31. package/server.d.mts +6 -1
  32. package/server.d.mts.map +1 -1
  33. package/server.d.ts +6 -1
  34. package/server.d.ts.map +1 -1
  35. package/server.js +21 -2
  36. package/server.js.map +1 -1
  37. package/server.mjs +22 -4
  38. package/server.mjs.map +1 -1
  39. package/src/compat.ts +13 -4
  40. package/src/dynamic-tools.ts +153 -0
  41. package/src/index.ts +19 -23
  42. package/src/options.ts +22 -0
  43. package/src/server.ts +35 -4
  44. package/src/tools/index.ts +5 -7
  45. package/src/tools/{runs/update-runs.ts → projects/create-projects.ts} +9 -17
  46. package/src/tools/records/create-records.ts +4 -4
  47. package/src/tools/scores/upsert-scores.ts +40 -0
  48. package/src/tools/testcases/create-testcases.ts +0 -2
  49. package/src/tools/testsets/create-testsets.ts +7 -7
  50. package/src/tools/testsets/update-testsets.ts +7 -7
  51. package/tools/index.d.mts.map +1 -1
  52. package/tools/index.d.ts.map +1 -1
  53. package/tools/index.js +5 -6
  54. package/tools/index.js.map +1 -1
  55. package/tools/index.mjs +5 -6
  56. package/tools/index.mjs.map +1 -1
  57. package/tools/projects/create-projects.d.mts +32 -0
  58. package/tools/projects/create-projects.d.mts.map +1 -0
  59. package/tools/projects/create-projects.d.ts +32 -0
  60. package/tools/projects/create-projects.d.ts.map +1 -0
  61. package/tools/{runs/update-runs.js → projects/create-projects.js} +10 -18
  62. package/tools/projects/create-projects.js.map +1 -0
  63. package/tools/projects/create-projects.mjs +29 -0
  64. package/tools/projects/create-projects.mjs.map +1 -0
  65. package/tools/projects/list-projects.d.mts +10 -2
  66. package/tools/projects/list-projects.d.mts.map +1 -1
  67. package/tools/projects/list-projects.d.ts +10 -2
  68. package/tools/projects/list-projects.d.ts.map +1 -1
  69. package/tools/records/create-records.d.mts +8 -0
  70. package/tools/records/create-records.d.mts.map +1 -1
  71. package/tools/records/create-records.d.ts +8 -0
  72. package/tools/records/create-records.d.ts.map +1 -1
  73. package/tools/records/create-records.js +4 -4
  74. package/tools/records/create-records.js.map +1 -1
  75. package/tools/records/create-records.mjs +4 -4
  76. package/tools/records/create-records.mjs.map +1 -1
  77. package/tools/runs/create-runs.d.mts +8 -0
  78. package/tools/runs/create-runs.d.mts.map +1 -1
  79. package/tools/runs/create-runs.d.ts +8 -0
  80. package/tools/runs/create-runs.d.ts.map +1 -1
  81. package/tools/{runs/update-runs.d.mts → scores/upsert-scores.d.mts} +11 -3
  82. package/tools/scores/upsert-scores.d.mts.map +1 -0
  83. package/tools/{runs/update-runs.d.ts → scores/upsert-scores.d.ts} +11 -3
  84. package/tools/scores/upsert-scores.d.ts.map +1 -0
  85. package/tools/scores/upsert-scores.js +35 -0
  86. package/tools/scores/upsert-scores.js.map +1 -0
  87. package/tools/scores/upsert-scores.mjs +31 -0
  88. package/tools/scores/upsert-scores.mjs.map +1 -0
  89. package/tools/system-configs/create-system-configs.d.mts +8 -0
  90. package/tools/system-configs/create-system-configs.d.mts.map +1 -1
  91. package/tools/system-configs/create-system-configs.d.ts +8 -0
  92. package/tools/system-configs/create-system-configs.d.ts.map +1 -1
  93. package/tools/system-configs/get-system-configs.d.mts +8 -0
  94. package/tools/system-configs/get-system-configs.d.mts.map +1 -1
  95. package/tools/system-configs/get-system-configs.d.ts +8 -0
  96. package/tools/system-configs/get-system-configs.d.ts.map +1 -1
  97. package/tools/system-configs/list-system-configs.d.mts +8 -0
  98. package/tools/system-configs/list-system-configs.d.mts.map +1 -1
  99. package/tools/system-configs/list-system-configs.d.ts +8 -0
  100. package/tools/system-configs/list-system-configs.d.ts.map +1 -1
  101. package/tools/systems/create-systems.d.mts +8 -0
  102. package/tools/systems/create-systems.d.mts.map +1 -1
  103. package/tools/systems/create-systems.d.ts +8 -0
  104. package/tools/systems/create-systems.d.ts.map +1 -1
  105. package/tools/systems/delete-systems.d.mts +8 -0
  106. package/tools/systems/delete-systems.d.mts.map +1 -1
  107. package/tools/systems/delete-systems.d.ts +8 -0
  108. package/tools/systems/delete-systems.d.ts.map +1 -1
  109. package/tools/systems/get-systems.d.mts +8 -0
  110. package/tools/systems/get-systems.d.mts.map +1 -1
  111. package/tools/systems/get-systems.d.ts +8 -0
  112. package/tools/systems/get-systems.d.ts.map +1 -1
  113. package/tools/systems/list-systems.d.mts +8 -0
  114. package/tools/systems/list-systems.d.mts.map +1 -1
  115. package/tools/systems/list-systems.d.ts +8 -0
  116. package/tools/systems/list-systems.d.ts.map +1 -1
  117. package/tools/systems/update-systems.d.mts +8 -0
  118. package/tools/systems/update-systems.d.mts.map +1 -1
  119. package/tools/systems/update-systems.d.ts +8 -0
  120. package/tools/systems/update-systems.d.ts.map +1 -1
  121. package/tools/testcases/create-testcases.d.mts +8 -0
  122. package/tools/testcases/create-testcases.d.mts.map +1 -1
  123. package/tools/testcases/create-testcases.d.ts +8 -0
  124. package/tools/testcases/create-testcases.d.ts.map +1 -1
  125. package/tools/testcases/create-testcases.js +0 -1
  126. package/tools/testcases/create-testcases.js.map +1 -1
  127. package/tools/testcases/create-testcases.mjs +0 -1
  128. package/tools/testcases/create-testcases.mjs.map +1 -1
  129. package/tools/testcases/delete-testcases.d.mts +8 -0
  130. package/tools/testcases/delete-testcases.d.mts.map +1 -1
  131. package/tools/testcases/delete-testcases.d.ts +8 -0
  132. package/tools/testcases/delete-testcases.d.ts.map +1 -1
  133. package/tools/testcases/get-testcases.d.mts +8 -0
  134. package/tools/testcases/get-testcases.d.mts.map +1 -1
  135. package/tools/testcases/get-testcases.d.ts +8 -0
  136. package/tools/testcases/get-testcases.d.ts.map +1 -1
  137. package/tools/testcases/list-testcases.d.mts +8 -0
  138. package/tools/testcases/list-testcases.d.mts.map +1 -1
  139. package/tools/testcases/list-testcases.d.ts +8 -0
  140. package/tools/testcases/list-testcases.d.ts.map +1 -1
  141. package/tools/testcases/update-testcases.d.mts +8 -0
  142. package/tools/testcases/update-testcases.d.mts.map +1 -1
  143. package/tools/testcases/update-testcases.d.ts +8 -0
  144. package/tools/testcases/update-testcases.d.ts.map +1 -1
  145. package/tools/testsets/create-testsets.d.mts +8 -0
  146. package/tools/testsets/create-testsets.d.mts.map +1 -1
  147. package/tools/testsets/create-testsets.d.ts +8 -0
  148. package/tools/testsets/create-testsets.d.ts.map +1 -1
  149. package/tools/testsets/create-testsets.js +7 -7
  150. package/tools/testsets/create-testsets.js.map +1 -1
  151. package/tools/testsets/create-testsets.mjs +7 -7
  152. package/tools/testsets/create-testsets.mjs.map +1 -1
  153. package/tools/testsets/delete-testsets.d.mts +8 -0
  154. package/tools/testsets/delete-testsets.d.mts.map +1 -1
  155. package/tools/testsets/delete-testsets.d.ts +8 -0
  156. package/tools/testsets/delete-testsets.d.ts.map +1 -1
  157. package/tools/testsets/get-testsets.d.mts +8 -0
  158. package/tools/testsets/get-testsets.d.mts.map +1 -1
  159. package/tools/testsets/get-testsets.d.ts +8 -0
  160. package/tools/testsets/get-testsets.d.ts.map +1 -1
  161. package/tools/testsets/list-testsets.d.mts +8 -0
  162. package/tools/testsets/list-testsets.d.mts.map +1 -1
  163. package/tools/testsets/list-testsets.d.ts +8 -0
  164. package/tools/testsets/list-testsets.d.ts.map +1 -1
  165. package/tools/testsets/update-testsets.d.mts +8 -0
  166. package/tools/testsets/update-testsets.d.mts.map +1 -1
  167. package/tools/testsets/update-testsets.d.ts +8 -0
  168. package/tools/testsets/update-testsets.d.ts.map +1 -1
  169. package/tools/testsets/update-testsets.js +7 -7
  170. package/tools/testsets/update-testsets.js.map +1 -1
  171. package/tools/testsets/update-testsets.mjs +7 -7
  172. package/tools/testsets/update-testsets.mjs.map +1 -1
  173. package/compat.test.d.mts +0 -2
  174. package/compat.test.d.mts.map +0 -1
  175. package/compat.test.d.ts +0 -2
  176. package/compat.test.d.ts.map +0 -1
  177. package/compat.test.js +0 -950
  178. package/compat.test.js.map +0 -1
  179. package/compat.test.mjs +0 -948
  180. package/compat.test.mjs.map +0 -1
  181. package/options.test.d.mts +0 -2
  182. package/options.test.d.mts.map +0 -1
  183. package/options.test.d.ts +0 -2
  184. package/options.test.d.ts.map +0 -1
  185. package/options.test.js +0 -154
  186. package/options.test.js.map +0 -1
  187. package/options.test.mjs +0 -152
  188. package/options.test.mjs.map +0 -1
  189. package/src/compat.test.ts +0 -1068
  190. package/src/options.test.ts +0 -193
  191. package/tools/runs/update-runs.d.mts.map +0 -1
  192. package/tools/runs/update-runs.d.ts.map +0 -1
  193. package/tools/runs/update-runs.js.map +0 -1
  194. package/tools/runs/update-runs.mjs +0 -37
  195. package/tools/runs/update-runs.mjs.map +0 -1
@@ -1,193 +0,0 @@
1
- import { parseOptions } from './options';
2
- import { Filter } from './tools';
3
-
4
- // Mock process.argv
5
- const mockArgv = (args: string[]) => {
6
- const originalArgv = process.argv;
7
- process.argv = ['node', 'test.js', ...args];
8
- return () => {
9
- process.argv = originalArgv;
10
- };
11
- };
12
-
13
- describe('parseOptions', () => {
14
- it('should parse basic filter options', () => {
15
- const cleanup = mockArgv([
16
- '--tool=test-tool',
17
- '--resource=test-resource',
18
- '--operation=read',
19
- '--tag=test-tag',
20
- ]);
21
-
22
- const result = parseOptions();
23
-
24
- expect(result.filters).toEqual([
25
- { type: 'tag', op: 'include', value: 'test-tag' },
26
- { type: 'resource', op: 'include', value: 'test-resource' },
27
- { type: 'tool', op: 'include', value: 'test-tool' },
28
- { type: 'operation', op: 'include', value: 'read' },
29
- ] as Filter[]);
30
-
31
- // Default client capabilities
32
- expect(result.capabilities).toEqual({
33
- topLevelUnions: true,
34
- validJson: true,
35
- refs: true,
36
- unions: true,
37
- formats: true,
38
- toolNameLength: undefined,
39
- });
40
-
41
- expect(result.list).toBe(false);
42
-
43
- cleanup();
44
- });
45
-
46
- it('should parse exclusion filters', () => {
47
- const cleanup = mockArgv([
48
- '--no-tool=exclude-tool',
49
- '--no-resource=exclude-resource',
50
- '--no-operation=write',
51
- '--no-tag=exclude-tag',
52
- ]);
53
-
54
- const result = parseOptions();
55
-
56
- expect(result.filters).toEqual([
57
- { type: 'tag', op: 'exclude', value: 'exclude-tag' },
58
- { type: 'resource', op: 'exclude', value: 'exclude-resource' },
59
- { type: 'tool', op: 'exclude', value: 'exclude-tool' },
60
- { type: 'operation', op: 'exclude', value: 'write' },
61
- ] as Filter[]);
62
-
63
- expect(result.capabilities).toEqual({
64
- topLevelUnions: true,
65
- validJson: true,
66
- refs: true,
67
- unions: true,
68
- formats: true,
69
- toolNameLength: undefined,
70
- });
71
-
72
- cleanup();
73
- });
74
-
75
- it('should parse client presets', () => {
76
- const cleanup = mockArgv(['--client=openai-agents']);
77
-
78
- const result = parseOptions();
79
-
80
- expect(result.capabilities).toEqual({
81
- topLevelUnions: false,
82
- validJson: true,
83
- refs: true,
84
- unions: true,
85
- formats: true,
86
- toolNameLength: undefined,
87
- });
88
-
89
- cleanup();
90
- });
91
-
92
- it('should parse individual capabilities', () => {
93
- const cleanup = mockArgv([
94
- '--capability=top-level-unions',
95
- '--capability=valid-json',
96
- '--capability=refs',
97
- '--capability=unions',
98
- '--capability=tool-name-length=40',
99
- ]);
100
-
101
- const result = parseOptions();
102
-
103
- expect(result.capabilities).toEqual({
104
- topLevelUnions: true,
105
- validJson: true,
106
- refs: true,
107
- unions: true,
108
- formats: true,
109
- toolNameLength: 40,
110
- });
111
-
112
- cleanup();
113
- });
114
-
115
- it('should handle list option', () => {
116
- const cleanup = mockArgv(['--list']);
117
-
118
- const result = parseOptions();
119
-
120
- expect(result.list).toBe(true);
121
-
122
- cleanup();
123
- });
124
-
125
- it('should handle multiple filters of the same type', () => {
126
- const cleanup = mockArgv(['--tool=tool1', '--tool=tool2', '--resource=res1', '--resource=res2']);
127
-
128
- const result = parseOptions();
129
-
130
- expect(result.filters).toEqual([
131
- { type: 'resource', op: 'include', value: 'res1' },
132
- { type: 'resource', op: 'include', value: 'res2' },
133
- { type: 'tool', op: 'include', value: 'tool1' },
134
- { type: 'tool', op: 'include', value: 'tool2' },
135
- ] as Filter[]);
136
-
137
- cleanup();
138
- });
139
-
140
- it('should handle comma-separated values in array options', () => {
141
- const cleanup = mockArgv([
142
- '--tool=tool1,tool2',
143
- '--resource=res1,res2',
144
- '--capability=top-level-unions,valid-json,unions',
145
- ]);
146
-
147
- const result = parseOptions();
148
-
149
- expect(result.filters).toEqual([
150
- { type: 'resource', op: 'include', value: 'res1' },
151
- { type: 'resource', op: 'include', value: 'res2' },
152
- { type: 'tool', op: 'include', value: 'tool1' },
153
- { type: 'tool', op: 'include', value: 'tool2' },
154
- ] as Filter[]);
155
-
156
- expect(result.capabilities).toEqual({
157
- topLevelUnions: true,
158
- validJson: true,
159
- refs: true,
160
- unions: true,
161
- formats: true,
162
- toolNameLength: undefined,
163
- });
164
-
165
- cleanup();
166
- });
167
-
168
- it('should handle invalid tool-name-length format', () => {
169
- const cleanup = mockArgv(['--capability=tool-name-length=invalid']);
170
-
171
- // Mock console.error to prevent output during test
172
- const originalError = console.error;
173
- console.error = jest.fn();
174
-
175
- expect(() => parseOptions()).toThrow();
176
-
177
- console.error = originalError;
178
- cleanup();
179
- });
180
-
181
- it('should handle unknown capability', () => {
182
- const cleanup = mockArgv(['--capability=unknown-capability']);
183
-
184
- // Mock console.error to prevent output during test
185
- const originalError = console.error;
186
- console.error = jest.fn();
187
-
188
- expect(() => parseOptions()).toThrow();
189
-
190
- console.error = originalError;
191
- cleanup();
192
- });
193
- });
@@ -1 +0,0 @@
1
- {"version":3,"file":"update-runs.d.mts","sourceRoot":"","sources":["../../src/tools/runs/update-runs.ts"],"names":[],"mappings":"OAEO,EAAE,IAAI,EAAE,MAAM,oCAAoC;OAClD,KAAK,EAAE,QAAQ,EAAE;OACjB,SAAS,MAAM,cAAc;AAEpC,eAAO,MAAM,QAAQ,EAAE,QAItB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,IAwBlB,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,QAAQ,SAAS,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,wEAGnF,CAAC;;;;;;;;;;;;;;;sBAH8B,SAAS,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;;AAKpF,wBAA2C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"update-runs.d.ts","sourceRoot":"","sources":["../../src/tools/runs/update-runs.ts"],"names":[],"mappings":"OAEO,EAAE,IAAI,EAAE,MAAM,oCAAoC;OAClD,KAAK,EAAE,QAAQ,EAAE;OACjB,SAAS,MAAM,cAAc;AAEpC,eAAO,MAAM,QAAQ,EAAE,QAItB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,IAwBlB,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,QAAQ,SAAS,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,wEAGnF,CAAC;;;;;;;;;;;;;;;sBAH8B,SAAS,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;;AAKpF,wBAA2C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"update-runs.js","sourceRoot":"","sources":["../../src/tools/runs/update-runs.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;AAMzE,QAAA,QAAQ,GAAa;IAChC,QAAQ,EAAE,MAAM;IAChB,SAAS,EAAE,OAAO;IAClB,IAAI,EAAE,EAAE;CACT,CAAC;AAEW,QAAA,IAAI,GAAS;IACxB,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,6BAA6B;IAC1C,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;aACf;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wBAAwB;gBACrC,IAAI,EAAE;oBACJ,SAAS;oBACT,oBAAoB;oBACpB,mBAAmB;oBACnB,kBAAkB;oBAClB,iBAAiB;oBACjB,wBAAwB;oBACxB,WAAW;iBACZ;aACF;SACF;KACF;CACF,CAAC;AAEK,MAAM,OAAO,GAAG,CAAC,MAAiB,EAAE,IAAyC,EAAE,EAAE;IACtF,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,IAAW,CAAC;IACvC,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACzC,CAAC,CAAC;AAHW,QAAA,OAAO,WAGlB;AAEF,kBAAe,EAAE,QAAQ,EAAR,gBAAQ,EAAE,IAAI,EAAJ,YAAI,EAAE,OAAO,EAAP,eAAO,EAAE,CAAC"}
@@ -1,37 +0,0 @@
1
- // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
- export const metadata = {
3
- resource: 'runs',
4
- operation: 'write',
5
- tags: [],
6
- };
7
- export const tool = {
8
- name: 'update_runs',
9
- description: 'Update the status of a Run.',
10
- inputSchema: {
11
- type: 'object',
12
- properties: {
13
- runId: {
14
- type: 'string',
15
- },
16
- status: {
17
- type: 'string',
18
- description: 'The status of the Run.',
19
- enum: [
20
- 'pending',
21
- 'awaiting_execution',
22
- 'running_execution',
23
- 'awaiting_scoring',
24
- 'running_scoring',
25
- 'awaiting_human_scoring',
26
- 'completed',
27
- ],
28
- },
29
- },
30
- },
31
- };
32
- export const handler = (client, args) => {
33
- const { runId, ...body } = args;
34
- return client.runs.update(runId, body);
35
- };
36
- export default { metadata, tool, handler };
37
- //# sourceMappingURL=update-runs.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"update-runs.mjs","sourceRoot":"","sources":["../../src/tools/runs/update-runs.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAMtF,MAAM,CAAC,MAAM,QAAQ,GAAa;IAChC,QAAQ,EAAE,MAAM;IAChB,SAAS,EAAE,OAAO;IAClB,IAAI,EAAE,EAAE;CACT,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAS;IACxB,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,6BAA6B;IAC1C,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;aACf;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wBAAwB;gBACrC,IAAI,EAAE;oBACJ,SAAS;oBACT,oBAAoB;oBACpB,mBAAmB;oBACnB,kBAAkB;oBAClB,iBAAiB;oBACjB,wBAAwB;oBACxB,WAAW;iBACZ;aACF;SACF;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,MAAiB,EAAE,IAAyC,EAAE,EAAE;IACtF,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,IAAW,CAAC;IACvC,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC"}