@ui5/mcp-server 0.2.7 → 0.2.9
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.
- package/CHANGELOG.md +26 -0
- package/lib/tools/run_manifest_validation/createValidationFunction.d.ts +2 -0
- package/lib/tools/run_manifest_validation/createValidationFunction.js +160 -0
- package/lib/tools/run_manifest_validation/createValidationFunction.js.map +1 -0
- package/lib/tools/run_manifest_validation/runValidation.js +2 -69
- package/lib/tools/run_manifest_validation/runValidation.js.map +1 -1
- package/lib/utils/ui5Manifest.js +1 -2
- package/lib/utils/ui5Manifest.js.map +1 -1
- package/npm-shrinkwrap.json +479 -527
- package/package.json +6 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,31 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.2.9](https://github.com/UI5/mcp-server/compare/v0.2.8...v0.2.9) (2026-03-17)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **run_manifest_validation:** Declare earlier manifest schema versions as now supported ([#250](https://github.com/UI5/mcp-server/issues/250)) ([dfe5c91](https://github.com/UI5/mcp-server/commit/dfe5c915e9c3fc1dce53817865fcdd5aca5651a6))
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Dependencies
|
|
12
|
+
|
|
13
|
+
* **lockfile:** In-range update of npm dependencies ([06b445e](https://github.com/UI5/mcp-server/commit/06b445e7a8ebc47799b690fdd050ff3903d61603))
|
|
14
|
+
|
|
15
|
+
## [0.2.8](https://github.com/UI5/mcp-server/compare/v0.2.7...v0.2.8) (2026-03-06)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Bug Fixes
|
|
19
|
+
|
|
20
|
+
* Remove invalid defaults for NO_STRUCTURED_CONTENT and NO_RESOURCES ([d7d4f5d](https://github.com/UI5/mcp-server/commit/d7d4f5d18383a7feed03ccbd3731fc1afac554a4))
|
|
21
|
+
* Remove invalid UI5_DATA_DIR default from server.json ([150b551](https://github.com/UI5/mcp-server/commit/150b551f2644212ed79f6f91e5de2dabe3cf764c))
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
### Dependencies
|
|
25
|
+
|
|
26
|
+
* Bump fast-xml-parser from 5.4.1 to 5.4.2 ([c02222a](https://github.com/UI5/mcp-server/commit/c02222a3275d5c9cb86a88666052b404a68235f8))
|
|
27
|
+
* Update dependencies ([#277](https://github.com/UI5/mcp-server/issues/277)) ([ee34d14](https://github.com/UI5/mcp-server/commit/ee34d146c88dfe1ff5033a7d82e4efdd160721bc))
|
|
28
|
+
|
|
3
29
|
## [0.2.7](https://github.com/UI5/mcp-server/compare/v0.2.6...v0.2.7) (2026-02-27)
|
|
4
30
|
|
|
5
31
|
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { fetchCdn } from "../../utils/cdnHelper.js";
|
|
2
|
+
import Ajv2020 from "ajv/dist/2020.js";
|
|
3
|
+
import Ajv from "ajv";
|
|
4
|
+
import addFormats from "ajv-formats";
|
|
5
|
+
import { readFile } from "fs/promises";
|
|
6
|
+
import { getLogger } from "@ui5/logger";
|
|
7
|
+
import { Mutex } from "async-mutex";
|
|
8
|
+
import { fileURLToPath } from "url";
|
|
9
|
+
const log = getLogger("tools:run_manifest_validation:createValidationFunction");
|
|
10
|
+
const schemaCache = new Map();
|
|
11
|
+
const fetchSchemaMutex = new Mutex();
|
|
12
|
+
const AJV_SCHEMA_PATHS = {
|
|
13
|
+
draft06: fileURLToPath(import.meta.resolve("ajv/dist/refs/json-schema-draft-06.json")),
|
|
14
|
+
draft07: fileURLToPath(import.meta.resolve("ajv/dist/refs/json-schema-draft-07.json")),
|
|
15
|
+
};
|
|
16
|
+
async function createUI5ManifestValidateFunction2020(ui5Schema) {
|
|
17
|
+
try {
|
|
18
|
+
const ajv = new Ajv2020.default({
|
|
19
|
+
// Collect all errors, not just the first one
|
|
20
|
+
allErrors: true,
|
|
21
|
+
// Allow additional properties that are not in schema such as "i18n",
|
|
22
|
+
// otherwise compilation fails
|
|
23
|
+
strict: false,
|
|
24
|
+
// Don't use Unicode-aware regular expressions,
|
|
25
|
+
// otherwise compilation fails with "Invalid escape" errors
|
|
26
|
+
unicodeRegExp: false,
|
|
27
|
+
loadSchema: async (uri) => {
|
|
28
|
+
const release = await fetchSchemaMutex.acquire();
|
|
29
|
+
try {
|
|
30
|
+
if (schemaCache.has(uri)) {
|
|
31
|
+
log.info(`Loading cached schema: ${uri}`);
|
|
32
|
+
return schemaCache.get(uri);
|
|
33
|
+
}
|
|
34
|
+
log.info(`Loading external schema: ${uri}`);
|
|
35
|
+
const schema = await fetchCdn(uri);
|
|
36
|
+
// Special handling for Adaptive Card schema to fix unsupported "id" property
|
|
37
|
+
// According to the JSON Schema spec Draft 06 (used by Adaptive Card schema),
|
|
38
|
+
// "$id" should be used instead of "id"
|
|
39
|
+
// See https://github.com/microsoft/AdaptiveCards/issues/9274
|
|
40
|
+
if (uri.includes("adaptive-card.json") && typeof schema.id === "string") {
|
|
41
|
+
schema.$id = schema.id;
|
|
42
|
+
delete schema.id;
|
|
43
|
+
}
|
|
44
|
+
schemaCache.set(uri, schema);
|
|
45
|
+
return schema;
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
log.warn(`Failed to load external schema ${uri}:` +
|
|
49
|
+
`${error instanceof Error ? error.message : String(error)}`);
|
|
50
|
+
throw error;
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
release();
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
addFormats.default(ajv);
|
|
58
|
+
const draft06MetaSchema = JSON.parse(await readFile(AJV_SCHEMA_PATHS.draft06, "utf-8"));
|
|
59
|
+
const draft07MetaSchema = JSON.parse(await readFile(AJV_SCHEMA_PATHS.draft07, "utf-8"));
|
|
60
|
+
// Add meta-schemas for draft-06 and draft-07.
|
|
61
|
+
// These are required to support schemas that reference these drafts,
|
|
62
|
+
// for example the Adaptive Card schema and some sap.bpa.task properties.
|
|
63
|
+
ajv.addMetaSchema(draft06MetaSchema, "http://json-schema.org/draft-06/schema#");
|
|
64
|
+
ajv.addMetaSchema(draft07MetaSchema, "http://json-schema.org/draft-07/schema#");
|
|
65
|
+
const schemaToCompile = ui5Schema;
|
|
66
|
+
if (schemaToCompile?.$defs) {
|
|
67
|
+
for (const defKey in schemaToCompile.$defs) {
|
|
68
|
+
const def = schemaToCompile.$defs[defKey];
|
|
69
|
+
if (def?.oneOf) {
|
|
70
|
+
for (const option of def.oneOf) {
|
|
71
|
+
if (Array.isArray(option?.items)) {
|
|
72
|
+
option.prefixItems = option.items;
|
|
73
|
+
delete option.items;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
const validate = await ajv.compileAsync(schemaToCompile);
|
|
80
|
+
return validate;
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
throw new Error(`Failed to create UI5 manifest validate function: ` +
|
|
84
|
+
`${error instanceof Error ? error.message : String(error)}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
async function createUI5ManifestValidateFunctionDraft07(ui5Schema) {
|
|
88
|
+
try {
|
|
89
|
+
const ajv = new Ajv.default({
|
|
90
|
+
// Collect all errors, not just the first one
|
|
91
|
+
allErrors: true,
|
|
92
|
+
// Allow additional properties that are not in schema such as "i18n",
|
|
93
|
+
// otherwise compilation fails
|
|
94
|
+
strict: false,
|
|
95
|
+
// Don't use Unicode-aware regular expressions,
|
|
96
|
+
// otherwise compilation fails with "Invalid escape" errors
|
|
97
|
+
unicodeRegExp: false,
|
|
98
|
+
loadSchema: async (uri) => {
|
|
99
|
+
const release = await fetchSchemaMutex.acquire();
|
|
100
|
+
try {
|
|
101
|
+
if (schemaCache.has(uri)) {
|
|
102
|
+
log.info(`Loading cached schema: ${uri}`);
|
|
103
|
+
return schemaCache.get(uri);
|
|
104
|
+
}
|
|
105
|
+
log.info(`Loading external schema: ${uri}`);
|
|
106
|
+
const schema = await fetchCdn(uri);
|
|
107
|
+
// Special handling for Adaptive Card schema to fix unsupported "id" property
|
|
108
|
+
// According to the JSON Schema spec Draft 06 (used by Adaptive Card schema),
|
|
109
|
+
// "$id" should be used instead of "id"
|
|
110
|
+
// See https://github.com/microsoft/AdaptiveCards/issues/9274
|
|
111
|
+
if (uri.includes("adaptive-card.json") && typeof schema.id === "string") {
|
|
112
|
+
schema.$id = schema.id;
|
|
113
|
+
delete schema.id;
|
|
114
|
+
}
|
|
115
|
+
schemaCache.set(uri, schema);
|
|
116
|
+
return schema;
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
log.warn(`Failed to load external schema ${uri}:` +
|
|
120
|
+
`${error instanceof Error ? error.message : String(error)}`);
|
|
121
|
+
throw error;
|
|
122
|
+
}
|
|
123
|
+
finally {
|
|
124
|
+
release();
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
addFormats.default(ajv);
|
|
129
|
+
const draft06MetaSchema = JSON.parse(await readFile(AJV_SCHEMA_PATHS.draft06, "utf-8"));
|
|
130
|
+
// Add meta-schema for draft-06.
|
|
131
|
+
// This is required to support schemas that reference this draft,
|
|
132
|
+
// for example the Adaptive Card schema.
|
|
133
|
+
ajv.addMetaSchema(draft06MetaSchema, "http://json-schema.org/draft-06/schema#");
|
|
134
|
+
const validate = await ajv.compileAsync(ui5Schema);
|
|
135
|
+
return validate;
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
throw new Error(`Failed to create UI5 manifest validate function: ` +
|
|
139
|
+
`${error instanceof Error ? error.message : String(error)}`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
export async function createValidateFunction(ui5ManifestSchema) {
|
|
143
|
+
// Determine which validator to use based on the $schema attribute
|
|
144
|
+
const schema = ui5ManifestSchema;
|
|
145
|
+
const metaSchema = schema?.$schema;
|
|
146
|
+
if (metaSchema === "https://json-schema.org/draft/2020-12/schema") {
|
|
147
|
+
log.info(`Using JSON Schema 2020-12 validation (detected from $schema: ${metaSchema})`);
|
|
148
|
+
return createUI5ManifestValidateFunction2020(ui5ManifestSchema);
|
|
149
|
+
}
|
|
150
|
+
else if (metaSchema === "http://json-schema.org/draft-07/schema#") {
|
|
151
|
+
log.info(`Using Draft-07 validation (detected from $schema: ${metaSchema})`);
|
|
152
|
+
return createUI5ManifestValidateFunctionDraft07(ui5ManifestSchema);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
throw new Error(`Failed to create UI5 manifest validate function:` +
|
|
156
|
+
` ${metaSchema ?? "undefined"} is not a supported meta-schema. ` +
|
|
157
|
+
`Supported meta-schemas: "https://json-schema.org/draft/2020-12/schema", "http://json-schema.org/draft-07/schema#"`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=createValidationFunction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createValidationFunction.js","sourceRoot":"","sources":["../../../src/tools/run_manifest_validation/createValidationFunction.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,77 +1,10 @@
|
|
|
1
|
-
import { fetchCdn } from "../../utils/cdnHelper.js";
|
|
2
|
-
import Ajv2020 from "ajv/dist/2020.js";
|
|
3
|
-
import addFormats from "ajv-formats";
|
|
4
1
|
import { readFile } from "fs/promises";
|
|
5
2
|
import { getLogger } from "@ui5/logger";
|
|
6
3
|
import { InvalidInputError } from "../../utils.js";
|
|
7
4
|
import { getManifestSchema, getManifestVersion } from "../../utils/ui5Manifest.js";
|
|
8
|
-
import { Mutex } from "async-mutex";
|
|
9
|
-
import { fileURLToPath } from "url";
|
|
10
5
|
import { isAbsolute } from "path";
|
|
6
|
+
import { createValidateFunction } from "./createValidationFunction.js";
|
|
11
7
|
const log = getLogger("tools:run_manifest_validation:runValidation");
|
|
12
|
-
const schemaCache = new Map();
|
|
13
|
-
const fetchSchemaMutex = new Mutex();
|
|
14
|
-
const AJV_SCHEMA_PATHS = {
|
|
15
|
-
draft06: fileURLToPath(import.meta.resolve("ajv/dist/refs/json-schema-draft-06.json")),
|
|
16
|
-
draft07: fileURLToPath(import.meta.resolve("ajv/dist/refs/json-schema-draft-07.json")),
|
|
17
|
-
};
|
|
18
|
-
async function createUI5ManifestValidateFunction(ui5Schema) {
|
|
19
|
-
try {
|
|
20
|
-
const ajv = new Ajv2020.default({
|
|
21
|
-
// Collect all errors, not just the first one
|
|
22
|
-
allErrors: true,
|
|
23
|
-
// Allow additional properties that are not in schema such as "i18n",
|
|
24
|
-
// otherwise compilation fails
|
|
25
|
-
strict: false,
|
|
26
|
-
// Don't use Unicode-aware regular expressions,
|
|
27
|
-
// otherwise compilation fails with "Invalid escape" errors
|
|
28
|
-
unicodeRegExp: false,
|
|
29
|
-
loadSchema: async (uri) => {
|
|
30
|
-
const release = await fetchSchemaMutex.acquire();
|
|
31
|
-
try {
|
|
32
|
-
if (schemaCache.has(uri)) {
|
|
33
|
-
log.info(`Loading cached schema: ${uri}`);
|
|
34
|
-
return schemaCache.get(uri);
|
|
35
|
-
}
|
|
36
|
-
log.info(`Loading external schema: ${uri}`);
|
|
37
|
-
const schema = await fetchCdn(uri);
|
|
38
|
-
// Special handling for Adaptive Card schema to fix unsupported "id" property
|
|
39
|
-
// According to the JSON Schema spec Draft 06 (used by Adaptive Card schema),
|
|
40
|
-
// "$id" should be used instead of "id"
|
|
41
|
-
// See https://github.com/microsoft/AdaptiveCards/issues/9274
|
|
42
|
-
if (uri.includes("adaptive-card.json") && typeof schema.id === "string") {
|
|
43
|
-
schema.$id = schema.id;
|
|
44
|
-
delete schema.id;
|
|
45
|
-
}
|
|
46
|
-
schemaCache.set(uri, schema);
|
|
47
|
-
return schema;
|
|
48
|
-
}
|
|
49
|
-
catch (error) {
|
|
50
|
-
log.warn(`Failed to load external schema ${uri}:` +
|
|
51
|
-
`${error instanceof Error ? error.message : String(error)}`);
|
|
52
|
-
throw error;
|
|
53
|
-
}
|
|
54
|
-
finally {
|
|
55
|
-
release();
|
|
56
|
-
}
|
|
57
|
-
},
|
|
58
|
-
});
|
|
59
|
-
addFormats.default(ajv);
|
|
60
|
-
const draft06MetaSchema = JSON.parse(await readFile(AJV_SCHEMA_PATHS.draft06, "utf-8"));
|
|
61
|
-
const draft07MetaSchema = JSON.parse(await readFile(AJV_SCHEMA_PATHS.draft07, "utf-8"));
|
|
62
|
-
// Add meta-schemas for draft-06 and draft-07.
|
|
63
|
-
// These are required to support schemas that reference these drafts,
|
|
64
|
-
// for example the Adaptive Card schema and some sap.bpa.task properties.
|
|
65
|
-
ajv.addMetaSchema(draft06MetaSchema, "http://json-schema.org/draft-06/schema#");
|
|
66
|
-
ajv.addMetaSchema(draft07MetaSchema, "http://json-schema.org/draft-07/schema#");
|
|
67
|
-
const validate = await ajv.compileAsync(ui5Schema);
|
|
68
|
-
return validate;
|
|
69
|
-
}
|
|
70
|
-
catch (error) {
|
|
71
|
-
throw new Error(`Failed to create UI5 manifest validate function: ` +
|
|
72
|
-
`${error instanceof Error ? error.message : String(error)}`);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
8
|
async function readManifest(path) {
|
|
76
9
|
let content;
|
|
77
10
|
let json;
|
|
@@ -100,7 +33,7 @@ export default async function runValidation(manifestPath) {
|
|
|
100
33
|
const manifestVersion = await getManifestVersion(manifest);
|
|
101
34
|
log.info(`Using manifest version: ${manifestVersion}`);
|
|
102
35
|
const ui5ManifestSchema = await getManifestSchema(manifestVersion);
|
|
103
|
-
const validate = await
|
|
36
|
+
const validate = await createValidateFunction(ui5ManifestSchema);
|
|
104
37
|
const isValid = validate(manifest);
|
|
105
38
|
if (isValid) {
|
|
106
39
|
log.info("Manifest validation successful");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runValidation.js","sourceRoot":"","sources":["../../../src/tools/run_manifest_validation/runValidation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runValidation.js","sourceRoot":"","sources":["../../../src/tools/run_manifest_validation/runValidation.ts"],"names":[],"mappings":"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"}
|
package/lib/utils/ui5Manifest.js
CHANGED
|
@@ -8,8 +8,7 @@ const fetchSchemaMutex = new Mutex();
|
|
|
8
8
|
let UI5ToManifestVersionMapping = null;
|
|
9
9
|
const MAPPING_URL = "https://raw.githubusercontent.com/UI5/manifest/main/mapping.json";
|
|
10
10
|
const ui5ToManifestVersionMappingMutex = new Mutex();
|
|
11
|
-
|
|
12
|
-
const LOWEST_SUPPORTED_MANIFEST_VERSION = "1.69.0";
|
|
11
|
+
const LOWEST_SUPPORTED_MANIFEST_VERSION = "1.48.1";
|
|
13
12
|
function getSchemaURL(manifestVersion) {
|
|
14
13
|
return `https://raw.githubusercontent.com/UI5/manifest/v${manifestVersion}/schema.json`;
|
|
15
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui5Manifest.js","sourceRoot":"","sources":["../../src/utils/ui5Manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AACtC,OAAO,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAC;AAClC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,GAAG,GAAG,SAAS,CAAC,mBAAmB,CAAC,CAAC;AAE3C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;AAC9C,MAAM,gBAAgB,GAAG,IAAI,KAAK,EAAE,CAAC;AAErC,IAAI,2BAA2B,GAAkC,IAAI,CAAC;AACtE,MAAM,WAAW,GAAG,kEAAkE,CAAC;AACvF,MAAM,gCAAgC,GAAG,IAAI,KAAK,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"ui5Manifest.js","sourceRoot":"","sources":["../../src/utils/ui5Manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AACtC,OAAO,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAC;AAClC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,GAAG,GAAG,SAAS,CAAC,mBAAmB,CAAC,CAAC;AAE3C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;AAC9C,MAAM,gBAAgB,GAAG,IAAI,KAAK,EAAE,CAAC;AAErC,IAAI,2BAA2B,GAAkC,IAAI,CAAC;AACtE,MAAM,WAAW,GAAG,kEAAkE,CAAC;AACvF,MAAM,gCAAgC,GAAG,IAAI,KAAK,EAAE,CAAC;AACrD,MAAM,iCAAiC,GAAG,QAAQ,CAAC;AAEnD,SAAS,YAAY,CAAC,eAAuB;IAC5C,OAAO,mDAAmD,eAAe,cAAc,CAAC;AACzF,CAAC;AAED,KAAK,UAAU,8BAA8B;IAC5C,MAAM,OAAO,GAAG,MAAM,gCAAgC,CAAC,OAAO,EAAE,CAAC;IAEjE,IAAI,CAAC;QACJ,IAAI,2BAA2B,EAAE,CAAC;YACjC,GAAG,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;YAC3D,OAAO,2BAA2B,CAAC;QACpC,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC5C,GAAG,CAAC,IAAI,CAAC,gDAAgD,WAAW,EAAE,CAAC,CAAC;QAExE,2BAA2B,GAAG,OAAiC,CAAC;QAEhE,OAAO,2BAA2B,CAAC;IACpC,CAAC;YAAS,CAAC;QACV,OAAO,EAAE,CAAC;IACX,CAAC;AACF,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,eAAuB;IACjD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,CAAC;IAEjD,IAAI,CAAC;QACJ,IAAI,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;YACtC,GAAG,CAAC,IAAI,CAAC,+CAA+C,eAAe,EAAE,CAAC,CAAC;YAC3E,OAAO,WAAW,CAAC,GAAG,CAAC,eAAe,CAAE,CAAC;QAC1C,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,yCAAyC,eAAe,EAAE,CAAC,CAAC;QACrE,MAAM,SAAS,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;QACzC,GAAG,CAAC,IAAI,CAAC,oCAAoC,SAAS,EAAE,CAAC,CAAC;QAE1D,WAAW,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAEzC,OAAO,MAAM,CAAC;IACf,CAAC;YAAS,CAAC;QACV,OAAO,EAAE,CAAC;IACX,CAAC;AACF,CAAC;AAED,KAAK,UAAU,6BAA6B,CAAC,YAAoB;IAChE,IAAI,iBAAiB,CAAC;IAEtB,IAAI,CAAC;QACJ,MAAM,UAAU,GAAG,MAAM,8BAA8B,EAAE,CAAC;QAC1D,iBAAiB,GAAG;YACnB,GAAG,IAAI,GAAG,CACT,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAC/B,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,iCAAiC,CAAC,CACnE,CACD;SACD,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,iBAAiB,GAAG,IAAI,CAAC;IAC1B,CAAC;IAAA,CAAC;IAEF,MAAM,IAAI,KAAK,CACd,YAAY;QACZ,CAAC,iBAAiB,CAAC,CAAC;YACnB,6BAA6B,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9D,EAAE,CAAC,CACJ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,eAAuB;IAC9D,IAAI,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,iCAAiC,CAAC,EAAE,CAAC;QACnE,OAAO,6BAA6B,CACnC,qBAAqB,eAAe,oDAAoD,CACxF,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACJ,OAAO,MAAM,WAAW,CAAC,eAAe,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,6BAA6B,CACnC,gDAAgD,eAAe,KAAK;YACpE,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC3D,CAAC;IACH,CAAC;AACF,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,QAAgB;IACxD,IAAI,CAAC,CAAC,UAAU,IAAI,QAAQ,CAAC,EAAE,CAAC;QAC/B,OAAO,6BAA6B,CAAC,kDAAkD,CAAC,CAAC;IAC1F,CAAC;IAED,IAAI,OAAO,QAAQ,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC3C,OAAO,6BAA6B,CAAC,+CAA+C,CAAC,CAAC;IACvF,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,OAAO,6BAA6B,CAAC,+DAA+D,CAAC,CAAC;IACvG,CAAC;IAED,OAAO,QAAQ,CAAC,QAAQ,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB;IAC7C,MAAM,UAAU,GAAG,MAAM,8BAA8B,EAAE,CAAC;IAE1D,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,UAAU,CAAC,MAAM,CAAC;AAC1B,CAAC"}
|