@heyseo/mcp-server 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +284 -0
  2. package/dist/index.d.ts +10 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +258 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/prompts/index.d.ts +22 -0
  7. package/dist/prompts/index.d.ts.map +1 -0
  8. package/dist/prompts/index.js +267 -0
  9. package/dist/prompts/index.js.map +1 -0
  10. package/dist/resources/index.d.ts +38 -0
  11. package/dist/resources/index.d.ts.map +1 -0
  12. package/dist/resources/index.js +247 -0
  13. package/dist/resources/index.js.map +1 -0
  14. package/dist/tools/comparison.d.ts +159 -0
  15. package/dist/tools/comparison.d.ts.map +1 -0
  16. package/dist/tools/comparison.js +482 -0
  17. package/dist/tools/comparison.js.map +1 -0
  18. package/dist/tools/ga4.d.ts +182 -0
  19. package/dist/tools/ga4.d.ts.map +1 -0
  20. package/dist/tools/ga4.js +429 -0
  21. package/dist/tools/ga4.js.map +1 -0
  22. package/dist/tools/gsc.d.ts +194 -0
  23. package/dist/tools/gsc.d.ts.map +1 -0
  24. package/dist/tools/gsc.js +348 -0
  25. package/dist/tools/gsc.js.map +1 -0
  26. package/dist/tools/index.d.ts +392 -0
  27. package/dist/tools/index.d.ts.map +1 -0
  28. package/dist/tools/index.js +59 -0
  29. package/dist/tools/index.js.map +1 -0
  30. package/dist/tools/pagespeed.d.ts +88 -0
  31. package/dist/tools/pagespeed.d.ts.map +1 -0
  32. package/dist/tools/pagespeed.js +285 -0
  33. package/dist/tools/pagespeed.js.map +1 -0
  34. package/dist/tools/tasks.d.ts +71 -0
  35. package/dist/tools/tasks.d.ts.map +1 -0
  36. package/dist/tools/tasks.js +116 -0
  37. package/dist/tools/tasks.js.map +1 -0
  38. package/dist/types.d.ts +151 -0
  39. package/dist/types.d.ts.map +1 -0
  40. package/dist/types.js +5 -0
  41. package/dist/types.js.map +1 -0
  42. package/dist/utils/api-client.d.ts +69 -0
  43. package/dist/utils/api-client.d.ts.map +1 -0
  44. package/dist/utils/api-client.js +202 -0
  45. package/dist/utils/api-client.js.map +1 -0
  46. package/package.json +42 -0
@@ -0,0 +1,194 @@
1
+ /**
2
+ * Google Search Console Tools
3
+ * Tools for querying GSC analytics data
4
+ */
5
+ import { z } from 'zod';
6
+ import type { HeySeoApiClient } from '../utils/api-client.js';
7
+ export declare const queryGSCSchema: z.ZodObject<{
8
+ siteId: z.ZodString;
9
+ startDate: z.ZodString;
10
+ endDate: z.ZodString;
11
+ dimensions: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodEnum<["query", "page", "country", "device", "date"]>, "many">>>;
12
+ rowLimit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
13
+ filters: z.ZodOptional<z.ZodArray<z.ZodObject<{
14
+ dimension: z.ZodEnum<["query", "page", "country", "device"]>;
15
+ operator: z.ZodEnum<["equals", "contains", "notContains", "includingRegex", "excludingRegex"]>;
16
+ expression: z.ZodString;
17
+ }, "strip", z.ZodTypeAny, {
18
+ dimension: "query" | "page" | "country" | "device";
19
+ operator: "equals" | "contains" | "notContains" | "includingRegex" | "excludingRegex";
20
+ expression: string;
21
+ }, {
22
+ dimension: "query" | "page" | "country" | "device";
23
+ operator: "equals" | "contains" | "notContains" | "includingRegex" | "excludingRegex";
24
+ expression: string;
25
+ }>, "many">>;
26
+ }, "strip", z.ZodTypeAny, {
27
+ siteId: string;
28
+ startDate: string;
29
+ endDate: string;
30
+ dimensions: ("query" | "page" | "country" | "device" | "date")[];
31
+ rowLimit: number;
32
+ filters?: {
33
+ dimension: "query" | "page" | "country" | "device";
34
+ operator: "equals" | "contains" | "notContains" | "includingRegex" | "excludingRegex";
35
+ expression: string;
36
+ }[] | undefined;
37
+ }, {
38
+ siteId: string;
39
+ startDate: string;
40
+ endDate: string;
41
+ dimensions?: ("query" | "page" | "country" | "device" | "date")[] | undefined;
42
+ rowLimit?: number | undefined;
43
+ filters?: {
44
+ dimension: "query" | "page" | "country" | "device";
45
+ operator: "equals" | "contains" | "notContains" | "includingRegex" | "excludingRegex";
46
+ expression: string;
47
+ }[] | undefined;
48
+ }>;
49
+ export type QueryGSCInput = z.infer<typeof queryGSCSchema>;
50
+ export declare const topKeywordsSchema: z.ZodObject<{
51
+ siteId: z.ZodString;
52
+ limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
53
+ startDate: z.ZodOptional<z.ZodString>;
54
+ endDate: z.ZodOptional<z.ZodString>;
55
+ }, "strip", z.ZodTypeAny, {
56
+ siteId: string;
57
+ limit: number;
58
+ startDate?: string | undefined;
59
+ endDate?: string | undefined;
60
+ }, {
61
+ siteId: string;
62
+ limit?: number | undefined;
63
+ startDate?: string | undefined;
64
+ endDate?: string | undefined;
65
+ }>;
66
+ export type TopKeywordsInput = z.infer<typeof topKeywordsSchema>;
67
+ export declare const topPagesSchema: z.ZodObject<{
68
+ siteId: z.ZodString;
69
+ limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
70
+ startDate: z.ZodOptional<z.ZodString>;
71
+ endDate: z.ZodOptional<z.ZodString>;
72
+ }, "strip", z.ZodTypeAny, {
73
+ siteId: string;
74
+ limit: number;
75
+ startDate?: string | undefined;
76
+ endDate?: string | undefined;
77
+ }, {
78
+ siteId: string;
79
+ limit?: number | undefined;
80
+ startDate?: string | undefined;
81
+ endDate?: string | undefined;
82
+ }>;
83
+ export type TopPagesInput = z.infer<typeof topPagesSchema>;
84
+ /**
85
+ * Execute GSC query tool
86
+ */
87
+ export declare function executeQueryGSC(client: HeySeoApiClient, input: QueryGSCInput): Promise<string>;
88
+ /**
89
+ * Execute top keywords tool
90
+ */
91
+ export declare function executeTopKeywords(client: HeySeoApiClient, input: TopKeywordsInput): Promise<string>;
92
+ /**
93
+ * Execute top pages tool
94
+ */
95
+ export declare function executeTopPages(client: HeySeoApiClient, input: TopPagesInput): Promise<string>;
96
+ /**
97
+ * GSC tool definitions for MCP
98
+ */
99
+ export declare const gscTools: ({
100
+ name: string;
101
+ description: string;
102
+ inputSchema: {
103
+ type: string;
104
+ properties: {
105
+ siteId: {
106
+ type: string;
107
+ description: string;
108
+ };
109
+ startDate: {
110
+ type: string;
111
+ pattern: string;
112
+ description: string;
113
+ };
114
+ endDate: {
115
+ type: string;
116
+ pattern: string;
117
+ description: string;
118
+ };
119
+ dimensions: {
120
+ type: string;
121
+ items: {
122
+ type: string;
123
+ enum: string[];
124
+ };
125
+ default: string[];
126
+ description: string;
127
+ };
128
+ rowLimit: {
129
+ type: string;
130
+ minimum: number;
131
+ maximum: number;
132
+ default: number;
133
+ description: string;
134
+ };
135
+ filters: {
136
+ type: string;
137
+ items: {
138
+ type: string;
139
+ properties: {
140
+ dimension: {
141
+ type: string;
142
+ enum: string[];
143
+ };
144
+ operator: {
145
+ type: string;
146
+ enum: string[];
147
+ };
148
+ expression: {
149
+ type: string;
150
+ };
151
+ };
152
+ required: string[];
153
+ };
154
+ description: string;
155
+ };
156
+ limit?: undefined;
157
+ };
158
+ required: string[];
159
+ };
160
+ } | {
161
+ name: string;
162
+ description: string;
163
+ inputSchema: {
164
+ type: string;
165
+ properties: {
166
+ siteId: {
167
+ type: string;
168
+ description: string;
169
+ };
170
+ limit: {
171
+ type: string;
172
+ minimum: number;
173
+ maximum: number;
174
+ default: number;
175
+ description: string;
176
+ };
177
+ startDate: {
178
+ type: string;
179
+ pattern: string;
180
+ description: string;
181
+ };
182
+ endDate: {
183
+ type: string;
184
+ pattern: string;
185
+ description: string;
186
+ };
187
+ dimensions?: undefined;
188
+ rowLimit?: undefined;
189
+ filters?: undefined;
190
+ };
191
+ required: string[];
192
+ };
193
+ })[];
194
+ //# sourceMappingURL=gsc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gsc.d.ts","sourceRoot":"","sources":["../../src/tools/gsc.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG9D,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsCzB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAG3D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;EAmB5B,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAGjE,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;EAmBzB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAE3D;;GAEG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,MAAM,CAAC,CA2CjB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,MAAM,CAAC,CA8CjB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,MAAM,CAAC,CA8CjB;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAyIpB,CAAC"}
@@ -0,0 +1,348 @@
1
+ /**
2
+ * Google Search Console Tools
3
+ * Tools for querying GSC analytics data
4
+ */
5
+ import { z } from 'zod';
6
+ // Schema for GSC query tool
7
+ export const queryGSCSchema = z.object({
8
+ siteId: z.string().describe('The ID of the site to query'),
9
+ startDate: z
10
+ .string()
11
+ .regex(/^\d{4}-\d{2}-\d{2}$/)
12
+ .describe('Start date in YYYY-MM-DD format'),
13
+ endDate: z
14
+ .string()
15
+ .regex(/^\d{4}-\d{2}-\d{2}$/)
16
+ .describe('End date in YYYY-MM-DD format'),
17
+ dimensions: z
18
+ .array(z.enum(['query', 'page', 'country', 'device', 'date']))
19
+ .optional()
20
+ .default(['query'])
21
+ .describe('Dimensions to group by (query, page, country, device, date)'),
22
+ rowLimit: z
23
+ .number()
24
+ .min(1)
25
+ .max(25000)
26
+ .optional()
27
+ .default(1000)
28
+ .describe('Maximum number of rows to return (1-25000)'),
29
+ filters: z
30
+ .array(z.object({
31
+ dimension: z.enum(['query', 'page', 'country', 'device']),
32
+ operator: z.enum([
33
+ 'equals',
34
+ 'contains',
35
+ 'notContains',
36
+ 'includingRegex',
37
+ 'excludingRegex',
38
+ ]),
39
+ expression: z.string(),
40
+ }))
41
+ .optional()
42
+ .describe('Filters to apply to the query'),
43
+ });
44
+ // Schema for top keywords tool
45
+ export const topKeywordsSchema = z.object({
46
+ siteId: z.string().describe('The ID of the site to query'),
47
+ limit: z
48
+ .number()
49
+ .min(1)
50
+ .max(1000)
51
+ .optional()
52
+ .default(50)
53
+ .describe('Number of keywords to return'),
54
+ startDate: z
55
+ .string()
56
+ .regex(/^\d{4}-\d{2}-\d{2}$/)
57
+ .optional()
58
+ .describe('Start date (defaults to 28 days ago)'),
59
+ endDate: z
60
+ .string()
61
+ .regex(/^\d{4}-\d{2}-\d{2}$/)
62
+ .optional()
63
+ .describe('End date (defaults to today)'),
64
+ });
65
+ // Schema for top pages tool
66
+ export const topPagesSchema = z.object({
67
+ siteId: z.string().describe('The ID of the site to query'),
68
+ limit: z
69
+ .number()
70
+ .min(1)
71
+ .max(1000)
72
+ .optional()
73
+ .default(50)
74
+ .describe('Number of pages to return'),
75
+ startDate: z
76
+ .string()
77
+ .regex(/^\d{4}-\d{2}-\d{2}$/)
78
+ .optional()
79
+ .describe('Start date (defaults to 28 days ago)'),
80
+ endDate: z
81
+ .string()
82
+ .regex(/^\d{4}-\d{2}-\d{2}$/)
83
+ .optional()
84
+ .describe('End date (defaults to today)'),
85
+ });
86
+ /**
87
+ * Execute GSC query tool
88
+ */
89
+ export async function executeQueryGSC(client, input) {
90
+ try {
91
+ const result = await client.queryGSC({
92
+ siteId: input.siteId,
93
+ startDate: input.startDate,
94
+ endDate: input.endDate,
95
+ dimensions: input.dimensions,
96
+ rowLimit: input.rowLimit,
97
+ filters: input.filters,
98
+ });
99
+ // Format results for readability
100
+ const formattedRows = result.rows.map((row) => ({
101
+ ...row.keys.reduce((acc, key, idx) => ({
102
+ ...acc,
103
+ [input.dimensions?.[idx] || `dim${idx}`]: key,
104
+ }), {}),
105
+ clicks: row.clicks,
106
+ impressions: row.impressions,
107
+ ctr: `${(row.ctr * 100).toFixed(2)}%`,
108
+ position: row.position.toFixed(1),
109
+ }));
110
+ return JSON.stringify({
111
+ success: true,
112
+ period: { startDate: input.startDate, endDate: input.endDate },
113
+ dimensions: input.dimensions,
114
+ totalRows: result.rows.length,
115
+ data: formattedRows,
116
+ }, null, 2);
117
+ }
118
+ catch (error) {
119
+ return JSON.stringify({
120
+ success: false,
121
+ error: error instanceof Error ? error.message : 'Unknown error',
122
+ });
123
+ }
124
+ }
125
+ /**
126
+ * Execute top keywords tool
127
+ */
128
+ export async function executeTopKeywords(client, input) {
129
+ try {
130
+ const result = await client.getTopKeywords(input.siteId, {
131
+ startDate: input.startDate,
132
+ endDate: input.endDate,
133
+ limit: input.limit,
134
+ });
135
+ const keywords = result.rows.map((row, index) => ({
136
+ rank: index + 1,
137
+ keyword: row.keys[0],
138
+ clicks: row.clicks,
139
+ impressions: row.impressions,
140
+ ctr: `${(row.ctr * 100).toFixed(2)}%`,
141
+ position: row.position.toFixed(1),
142
+ }));
143
+ // Calculate totals
144
+ const totals = result.rows.reduce((acc, row) => ({
145
+ clicks: acc.clicks + row.clicks,
146
+ impressions: acc.impressions + row.impressions,
147
+ }), { clicks: 0, impressions: 0 });
148
+ return JSON.stringify({
149
+ success: true,
150
+ totalKeywords: keywords.length,
151
+ totals: {
152
+ clicks: totals.clicks,
153
+ impressions: totals.impressions,
154
+ avgCtr: `${((totals.clicks / totals.impressions) * 100).toFixed(2)}%`,
155
+ },
156
+ keywords,
157
+ }, null, 2);
158
+ }
159
+ catch (error) {
160
+ return JSON.stringify({
161
+ success: false,
162
+ error: error instanceof Error ? error.message : 'Unknown error',
163
+ });
164
+ }
165
+ }
166
+ /**
167
+ * Execute top pages tool
168
+ */
169
+ export async function executeTopPages(client, input) {
170
+ try {
171
+ const result = await client.getTopPages(input.siteId, {
172
+ startDate: input.startDate,
173
+ endDate: input.endDate,
174
+ limit: input.limit,
175
+ });
176
+ const pages = result.rows.map((row, index) => ({
177
+ rank: index + 1,
178
+ page: row.keys[0],
179
+ clicks: row.clicks,
180
+ impressions: row.impressions,
181
+ ctr: `${(row.ctr * 100).toFixed(2)}%`,
182
+ position: row.position.toFixed(1),
183
+ }));
184
+ // Calculate totals
185
+ const totals = result.rows.reduce((acc, row) => ({
186
+ clicks: acc.clicks + row.clicks,
187
+ impressions: acc.impressions + row.impressions,
188
+ }), { clicks: 0, impressions: 0 });
189
+ return JSON.stringify({
190
+ success: true,
191
+ totalPages: pages.length,
192
+ totals: {
193
+ clicks: totals.clicks,
194
+ impressions: totals.impressions,
195
+ avgCtr: `${((totals.clicks / totals.impressions) * 100).toFixed(2)}%`,
196
+ },
197
+ pages,
198
+ }, null, 2);
199
+ }
200
+ catch (error) {
201
+ return JSON.stringify({
202
+ success: false,
203
+ error: error instanceof Error ? error.message : 'Unknown error',
204
+ });
205
+ }
206
+ }
207
+ /**
208
+ * GSC tool definitions for MCP
209
+ */
210
+ export const gscTools = [
211
+ {
212
+ name: 'heyseo_query_gsc',
213
+ description: `Query Google Search Console data for a connected site.
214
+
215
+ Returns search performance data including:
216
+ - Clicks: Total clicks from search results
217
+ - Impressions: Times the site appeared in search
218
+ - CTR: Click-through rate percentage
219
+ - Position: Average search result position
220
+
221
+ You can group results by query (keywords), page, country, device, or date.
222
+ Use filters to narrow down results (e.g., only pages containing "/blog/").`,
223
+ inputSchema: {
224
+ type: 'object',
225
+ properties: {
226
+ siteId: {
227
+ type: 'string',
228
+ description: 'The ID of the site to query',
229
+ },
230
+ startDate: {
231
+ type: 'string',
232
+ pattern: '^\\d{4}-\\d{2}-\\d{2}$',
233
+ description: 'Start date in YYYY-MM-DD format',
234
+ },
235
+ endDate: {
236
+ type: 'string',
237
+ pattern: '^\\d{4}-\\d{2}-\\d{2}$',
238
+ description: 'End date in YYYY-MM-DD format',
239
+ },
240
+ dimensions: {
241
+ type: 'array',
242
+ items: {
243
+ type: 'string',
244
+ enum: ['query', 'page', 'country', 'device', 'date'],
245
+ },
246
+ default: ['query'],
247
+ description: 'Dimensions to group by',
248
+ },
249
+ rowLimit: {
250
+ type: 'number',
251
+ minimum: 1,
252
+ maximum: 25000,
253
+ default: 1000,
254
+ description: 'Maximum rows to return',
255
+ },
256
+ filters: {
257
+ type: 'array',
258
+ items: {
259
+ type: 'object',
260
+ properties: {
261
+ dimension: {
262
+ type: 'string',
263
+ enum: ['query', 'page', 'country', 'device'],
264
+ },
265
+ operator: {
266
+ type: 'string',
267
+ enum: ['equals', 'contains', 'notContains', 'includingRegex', 'excludingRegex'],
268
+ },
269
+ expression: { type: 'string' },
270
+ },
271
+ required: ['dimension', 'operator', 'expression'],
272
+ },
273
+ description: 'Filters to apply',
274
+ },
275
+ },
276
+ required: ['siteId', 'startDate', 'endDate'],
277
+ },
278
+ },
279
+ {
280
+ name: 'heyseo_top_keywords',
281
+ description: `Get top performing keywords for a site.
282
+
283
+ Returns keywords ranked by clicks, including impressions, CTR, and average position.
284
+ Useful for understanding which search terms drive the most traffic.`,
285
+ inputSchema: {
286
+ type: 'object',
287
+ properties: {
288
+ siteId: {
289
+ type: 'string',
290
+ description: 'The ID of the site to query',
291
+ },
292
+ limit: {
293
+ type: 'number',
294
+ minimum: 1,
295
+ maximum: 1000,
296
+ default: 50,
297
+ description: 'Number of keywords to return',
298
+ },
299
+ startDate: {
300
+ type: 'string',
301
+ pattern: '^\\d{4}-\\d{2}-\\d{2}$',
302
+ description: 'Start date (defaults to 28 days ago)',
303
+ },
304
+ endDate: {
305
+ type: 'string',
306
+ pattern: '^\\d{4}-\\d{2}-\\d{2}$',
307
+ description: 'End date (defaults to today)',
308
+ },
309
+ },
310
+ required: ['siteId'],
311
+ },
312
+ },
313
+ {
314
+ name: 'heyseo_top_pages',
315
+ description: `Get top performing pages for a site.
316
+
317
+ Returns pages ranked by clicks, including impressions, CTR, and average position.
318
+ Useful for understanding which pages drive the most organic traffic.`,
319
+ inputSchema: {
320
+ type: 'object',
321
+ properties: {
322
+ siteId: {
323
+ type: 'string',
324
+ description: 'The ID of the site to query',
325
+ },
326
+ limit: {
327
+ type: 'number',
328
+ minimum: 1,
329
+ maximum: 1000,
330
+ default: 50,
331
+ description: 'Number of pages to return',
332
+ },
333
+ startDate: {
334
+ type: 'string',
335
+ pattern: '^\\d{4}-\\d{2}-\\d{2}$',
336
+ description: 'Start date (defaults to 28 days ago)',
337
+ },
338
+ endDate: {
339
+ type: 'string',
340
+ pattern: '^\\d{4}-\\d{2}-\\d{2}$',
341
+ description: 'End date (defaults to today)',
342
+ },
343
+ },
344
+ required: ['siteId'],
345
+ },
346
+ },
347
+ ];
348
+ //# sourceMappingURL=gsc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gsc.js","sourceRoot":"","sources":["../../src/tools/gsc.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,4BAA4B;AAC5B,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC1D,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,KAAK,CAAC,qBAAqB,CAAC;SAC5B,QAAQ,CAAC,iCAAiC,CAAC;IAC9C,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,KAAK,CAAC,qBAAqB,CAAC;SAC5B,QAAQ,CAAC,+BAA+B,CAAC;IAC5C,UAAU,EAAE,CAAC;SACV,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;SAC7D,QAAQ,EAAE;SACV,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC;SAClB,QAAQ,CAAC,6DAA6D,CAAC;IAC1E,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,KAAK,CAAC;SACV,QAAQ,EAAE;SACV,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CAAC,4CAA4C,CAAC;IACzD,OAAO,EAAE,CAAC;SACP,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QACzD,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC;YACf,QAAQ;YACR,UAAU;YACV,aAAa;YACb,gBAAgB;YAChB,gBAAgB;SACjB,CAAC;QACF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;KACvB,CAAC,CACH;SACA,QAAQ,EAAE;SACV,QAAQ,CAAC,+BAA+B,CAAC;CAC7C,CAAC,CAAC;AAIH,+BAA+B;AAC/B,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC1D,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CAAC,8BAA8B,CAAC;IAC3C,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,KAAK,CAAC,qBAAqB,CAAC;SAC5B,QAAQ,EAAE;SACV,QAAQ,CAAC,sCAAsC,CAAC;IACnD,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,KAAK,CAAC,qBAAqB,CAAC;SAC5B,QAAQ,EAAE;SACV,QAAQ,CAAC,8BAA8B,CAAC;CAC5C,CAAC,CAAC;AAIH,4BAA4B;AAC5B,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC1D,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CAAC,2BAA2B,CAAC;IACxC,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,KAAK,CAAC,qBAAqB,CAAC;SAC5B,QAAQ,EAAE;SACV,QAAQ,CAAC,sCAAsC,CAAC;IACnD,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,KAAK,CAAC,qBAAqB,CAAC;SAC5B,QAAQ,EAAE;SACV,QAAQ,CAAC,8BAA8B,CAAC;CAC5C,CAAC,CAAC;AAIH;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAuB,EACvB,KAAoB;IAEpB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;YACnC,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;QAEH,iCAAiC;QACjC,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC9C,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAChB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;gBAClB,GAAG,GAAG;gBACN,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,EAAE,CAAC,EAAE,GAAG;aAC9C,CAAC,EACF,EAAE,CACH;YACD,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;YACrC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;SAClC,CAAC,CAAC,CAAC;QAEJ,OAAO,IAAI,CAAC,SAAS,CACnB;YACE,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;YAC9D,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;YAC7B,IAAI,EAAE,aAAa;SACpB,EACD,IAAI,EACJ,CAAC,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAuB,EACvB,KAAuB;IAEvB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE;YACvD,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAChD,IAAI,EAAE,KAAK,GAAG,CAAC;YACf,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YACpB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;YACrC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;SAClC,CAAC,CAAC,CAAC;QAEJ,mBAAmB;QACnB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAC/B,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YACb,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;YAC/B,WAAW,EAAE,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW;SAC/C,CAAC,EACF,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAC9B,CAAC;QAEF,OAAO,IAAI,CAAC,SAAS,CACnB;YACE,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,QAAQ,CAAC,MAAM;YAC9B,MAAM,EAAE;gBACN,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;aACtE;YACD,QAAQ;SACT,EACD,IAAI,EACJ,CAAC,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAuB,EACvB,KAAoB;IAEpB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE;YACpD,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAC7C,IAAI,EAAE,KAAK,GAAG,CAAC;YACf,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YACjB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;YACrC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;SAClC,CAAC,CAAC,CAAC;QAEJ,mBAAmB;QACnB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAC/B,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YACb,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;YAC/B,WAAW,EAAE,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW;SAC/C,CAAC,EACF,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAC9B,CAAC;QAEF,OAAO,IAAI,CAAC,SAAS,CACnB;YACE,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,KAAK,CAAC,MAAM;YACxB,MAAM,EAAE;gBACN,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;aACtE;YACD,KAAK;SACN,EACD,IAAI,EACJ,CAAC,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE;;;;;;;;;2EAS0D;QACvE,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,6BAA6B;iBAC3C;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,wBAAwB;oBACjC,WAAW,EAAE,iCAAiC;iBAC/C;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,wBAAwB;oBACjC,WAAW,EAAE,+BAA+B;iBAC7C;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC;qBACrD;oBACD,OAAO,EAAE,CAAC,OAAO,CAAC;oBAClB,WAAW,EAAE,wBAAwB;iBACtC;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,IAAI;oBACb,WAAW,EAAE,wBAAwB;iBACtC;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,SAAS,EAAE;gCACT,IAAI,EAAE,QAAQ;gCACd,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC;6BAC7C;4BACD,QAAQ,EAAE;gCACR,IAAI,EAAE,QAAQ;gCACd,IAAI,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;6BAChF;4BACD,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;yBAC/B;wBACD,QAAQ,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,YAAY,CAAC;qBAClD;oBACD,WAAW,EAAE,kBAAkB;iBAChC;aACF;YACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC;SAC7C;KACF;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE;;;oEAGmD;QAChE,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,6BAA6B;iBAC3C;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,EAAE;oBACX,WAAW,EAAE,8BAA8B;iBAC5C;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,wBAAwB;oBACjC,WAAW,EAAE,sCAAsC;iBACpD;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,wBAAwB;oBACjC,WAAW,EAAE,8BAA8B;iBAC5C;aACF;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;KACF;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE;;;qEAGoD;QACjE,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,6BAA6B;iBAC3C;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,EAAE;oBACX,WAAW,EAAE,2BAA2B;iBACzC;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,wBAAwB;oBACjC,WAAW,EAAE,sCAAsC;iBACpD;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,wBAAwB;oBACjC,WAAW,EAAE,8BAA8B;iBAC5C;aACF;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;KACF;CACF,CAAC"}