@true-and-useful/janee 0.12.0 → 0.13.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.
- package/README.md +2 -0
- package/dist/cli/commands/capability.d.ts +12 -10
- package/dist/cli/commands/capability.d.ts.map +1 -1
- package/dist/cli/commands/capability.js +77 -40
- package/dist/cli/commands/capability.js.map +1 -1
- package/dist/cli/commands/config.d.ts +7 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +135 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/diagnose.d.ts +7 -0
- package/dist/cli/commands/diagnose.d.ts.map +1 -0
- package/dist/cli/commands/diagnose.js +133 -0
- package/dist/cli/commands/diagnose.js.map +1 -0
- package/dist/cli/commands/doctor-bundle.d.ts +6 -0
- package/dist/cli/commands/doctor-bundle.d.ts.map +1 -0
- package/dist/cli/commands/doctor-bundle.js +108 -0
- package/dist/cli/commands/doctor-bundle.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +6 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +163 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/service-edit.d.ts +16 -0
- package/dist/cli/commands/service-edit.d.ts.map +1 -0
- package/dist/cli/commands/service-edit.js +187 -0
- package/dist/cli/commands/service-edit.js.map +1 -0
- package/dist/cli/commands/whoami.d.ts +5 -0
- package/dist/cli/commands/whoami.d.ts.map +1 -0
- package/dist/cli/commands/whoami.js +91 -0
- package/dist/cli/commands/whoami.js.map +1 -0
- package/dist/cli/config-yaml.d.ts +12 -14
- package/dist/cli/config-yaml.d.ts.map +1 -1
- package/dist/cli/config-yaml.js +209 -86
- package/dist/cli/config-yaml.js.map +1 -1
- package/dist/cli/index.js +81 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/authority.d.ts +5 -3
- package/dist/core/authority.d.ts.map +1 -1
- package/dist/core/authority.js +76 -43
- package/dist/core/authority.js.map +1 -1
- package/dist/core/health.d.ts +24 -1
- package/dist/core/health.d.ts.map +1 -1
- package/dist/core/health.js +138 -26
- package/dist/core/health.js.map +1 -1
- package/dist/core/mcp-server.d.ts +31 -11
- package/dist/core/mcp-server.d.ts.map +1 -1
- package/dist/core/mcp-server.js +580 -238
- package/dist/core/mcp-server.js.map +1 -1
- package/package.json +1 -1
package/dist/core/health.js
CHANGED
|
@@ -3,11 +3,45 @@
|
|
|
3
3
|
* Health check module for Janee services
|
|
4
4
|
* Provides connectivity and latency checks for configured API backends
|
|
5
5
|
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
6
39
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
40
|
exports.checkServiceHealth = checkServiceHealth;
|
|
8
41
|
exports.checkAllServicesHealth = checkAllServicesHealth;
|
|
9
42
|
exports.resolveTestPath = resolveTestPath;
|
|
10
43
|
exports.testServiceConnection = testServiceConnection;
|
|
44
|
+
exports.checkExecHealth = checkExecHealth;
|
|
11
45
|
const url_1 = require("url");
|
|
12
46
|
const auth_js_1 = require("./auth.js");
|
|
13
47
|
const directory_js_1 = require("./directory.js");
|
|
@@ -26,8 +60,8 @@ async function checkServiceHealth(serviceName, baseUrl, options = {}) {
|
|
|
26
60
|
service: serviceName,
|
|
27
61
|
healthy: false,
|
|
28
62
|
latencyMs: 0,
|
|
29
|
-
error:
|
|
30
|
-
checkedAt
|
|
63
|
+
error: "No base URL configured",
|
|
64
|
+
checkedAt,
|
|
31
65
|
};
|
|
32
66
|
}
|
|
33
67
|
const start = Date.now();
|
|
@@ -35,8 +69,8 @@ async function checkServiceHealth(serviceName, baseUrl, options = {}) {
|
|
|
35
69
|
const controller = new AbortController();
|
|
36
70
|
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
37
71
|
const response = await fetchFn(baseUrl, {
|
|
38
|
-
method:
|
|
39
|
-
signal: controller.signal
|
|
72
|
+
method: "HEAD",
|
|
73
|
+
signal: controller.signal,
|
|
40
74
|
});
|
|
41
75
|
clearTimeout(timeoutId);
|
|
42
76
|
const latencyMs = Date.now() - start;
|
|
@@ -48,7 +82,7 @@ async function checkServiceHealth(serviceName, baseUrl, options = {}) {
|
|
|
48
82
|
healthy: true,
|
|
49
83
|
statusCode: response.status,
|
|
50
84
|
latencyMs,
|
|
51
|
-
checkedAt
|
|
85
|
+
checkedAt,
|
|
52
86
|
};
|
|
53
87
|
}
|
|
54
88
|
return {
|
|
@@ -57,7 +91,7 @@ async function checkServiceHealth(serviceName, baseUrl, options = {}) {
|
|
|
57
91
|
statusCode: response.status,
|
|
58
92
|
latencyMs,
|
|
59
93
|
error: `HTTP ${response.status} ${response.statusText}`,
|
|
60
|
-
checkedAt
|
|
94
|
+
checkedAt,
|
|
61
95
|
};
|
|
62
96
|
}
|
|
63
97
|
catch (err) {
|
|
@@ -68,7 +102,7 @@ async function checkServiceHealth(serviceName, baseUrl, options = {}) {
|
|
|
68
102
|
healthy: false,
|
|
69
103
|
latencyMs,
|
|
70
104
|
error: message,
|
|
71
|
-
checkedAt
|
|
105
|
+
checkedAt,
|
|
72
106
|
};
|
|
73
107
|
}
|
|
74
108
|
}
|
|
@@ -88,7 +122,7 @@ function resolveTestPath(serviceName, baseUrl) {
|
|
|
88
122
|
if (byName?.testPath)
|
|
89
123
|
return byName.testPath;
|
|
90
124
|
// Fall back to matching by baseUrl
|
|
91
|
-
const byUrl = directory_js_1.serviceDirectory.find(t => t.testPath && baseUrl.startsWith(t.baseUrl));
|
|
125
|
+
const byUrl = directory_js_1.serviceDirectory.find((t) => t.testPath && baseUrl.startsWith(t.baseUrl));
|
|
92
126
|
return byUrl?.testPath;
|
|
93
127
|
}
|
|
94
128
|
/**
|
|
@@ -105,28 +139,30 @@ async function testServiceConnection(serviceName, serviceConfig, options = {}) {
|
|
|
105
139
|
if (!serviceConfig.baseUrl) {
|
|
106
140
|
return {
|
|
107
141
|
service: serviceName,
|
|
108
|
-
baseUrl:
|
|
109
|
-
testUrl:
|
|
142
|
+
baseUrl: "",
|
|
143
|
+
testUrl: "",
|
|
110
144
|
reachable: false,
|
|
111
145
|
authOk: false,
|
|
112
146
|
latencyMs: 0,
|
|
113
147
|
authType,
|
|
114
|
-
error:
|
|
115
|
-
checkedAt
|
|
148
|
+
error: "No base URL configured",
|
|
149
|
+
checkedAt,
|
|
116
150
|
};
|
|
117
151
|
}
|
|
118
|
-
const testPath = options.testPath ||
|
|
152
|
+
const testPath = options.testPath ||
|
|
153
|
+
serviceConfig.testPath ||
|
|
154
|
+
resolveTestPath(serviceName, serviceConfig.baseUrl);
|
|
119
155
|
const start = Date.now();
|
|
120
156
|
try {
|
|
121
157
|
let baseUrl = serviceConfig.baseUrl;
|
|
122
|
-
if (!baseUrl.endsWith(
|
|
123
|
-
baseUrl +=
|
|
124
|
-
let reqPath = testPath ||
|
|
125
|
-
if (reqPath.startsWith(
|
|
158
|
+
if (!baseUrl.endsWith("/"))
|
|
159
|
+
baseUrl += "/";
|
|
160
|
+
let reqPath = testPath || "";
|
|
161
|
+
if (reqPath.startsWith("/"))
|
|
126
162
|
reqPath = reqPath.slice(1);
|
|
127
163
|
const targetUrl = new url_1.URL(reqPath, baseUrl);
|
|
128
164
|
const authResult = await (0, auth_js_1.buildAuthHeaders)(serviceName, serviceConfig, {
|
|
129
|
-
method:
|
|
165
|
+
method: "GET",
|
|
130
166
|
targetUrl,
|
|
131
167
|
body: undefined,
|
|
132
168
|
});
|
|
@@ -138,7 +174,7 @@ async function testServiceConnection(serviceName, serviceConfig, options = {}) {
|
|
|
138
174
|
const controller = new AbortController();
|
|
139
175
|
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
140
176
|
const response = await fetchFn(targetUrl.toString(), {
|
|
141
|
-
method:
|
|
177
|
+
method: "GET",
|
|
142
178
|
headers: authResult.headers,
|
|
143
179
|
signal: controller.signal,
|
|
144
180
|
});
|
|
@@ -151,7 +187,7 @@ async function testServiceConnection(serviceName, serviceConfig, options = {}) {
|
|
|
151
187
|
if (!authOk) {
|
|
152
188
|
try {
|
|
153
189
|
const raw = await response.text();
|
|
154
|
-
responseBody = raw.length > 512 ? raw.slice(0, 512) +
|
|
190
|
+
responseBody = raw.length > 512 ? raw.slice(0, 512) + "…" : raw;
|
|
155
191
|
}
|
|
156
192
|
catch {
|
|
157
193
|
// best-effort
|
|
@@ -166,10 +202,14 @@ async function testServiceConnection(serviceName, serviceConfig, options = {}) {
|
|
|
166
202
|
statusCode: response.status,
|
|
167
203
|
latencyMs,
|
|
168
204
|
authType,
|
|
169
|
-
...(response.status === 401 && { error:
|
|
170
|
-
...(response.status === 403 && {
|
|
171
|
-
|
|
172
|
-
|
|
205
|
+
...(response.status === 401 && { error: "Authentication failed (401)" }),
|
|
206
|
+
...(response.status === 403 && {
|
|
207
|
+
error: "Forbidden (403) — credentials may lack required permissions",
|
|
208
|
+
}),
|
|
209
|
+
...(!response.ok &&
|
|
210
|
+
response.status !== 401 &&
|
|
211
|
+
response.status !== 403 && {
|
|
212
|
+
error: `HTTP ${response.status} ${response.statusText}`,
|
|
173
213
|
}),
|
|
174
214
|
responseBody,
|
|
175
215
|
checkedAt,
|
|
@@ -178,11 +218,11 @@ async function testServiceConnection(serviceName, serviceConfig, options = {}) {
|
|
|
178
218
|
catch (err) {
|
|
179
219
|
const latencyMs = Date.now() - start;
|
|
180
220
|
const message = err instanceof Error ? err.message : String(err);
|
|
181
|
-
const isTimeout = message.includes(
|
|
221
|
+
const isTimeout = message.includes("abort");
|
|
182
222
|
return {
|
|
183
223
|
service: serviceName,
|
|
184
224
|
baseUrl: serviceConfig.baseUrl,
|
|
185
|
-
testUrl: serviceConfig.baseUrl + (testPath ||
|
|
225
|
+
testUrl: serviceConfig.baseUrl + (testPath || ""),
|
|
186
226
|
reachable: false,
|
|
187
227
|
authOk: false,
|
|
188
228
|
latencyMs,
|
|
@@ -192,4 +232,76 @@ async function testServiceConnection(serviceName, serviceConfig, options = {}) {
|
|
|
192
232
|
};
|
|
193
233
|
}
|
|
194
234
|
}
|
|
235
|
+
/**
|
|
236
|
+
* Check if an exec-mode capability is functional:
|
|
237
|
+
* - Binary specified in allowCommands exists and is executable
|
|
238
|
+
* - Credential env vars can be resolved (without leaking values)
|
|
239
|
+
*/
|
|
240
|
+
async function checkExecHealth(serviceName, capabilityName, capability, credentialAvailable) {
|
|
241
|
+
const checkedAt = new Date().toISOString();
|
|
242
|
+
const start = Date.now();
|
|
243
|
+
const checks = {
|
|
244
|
+
binaryExists: false,
|
|
245
|
+
binaryPath: undefined,
|
|
246
|
+
envResolvable: false,
|
|
247
|
+
unresolvedVars: undefined,
|
|
248
|
+
};
|
|
249
|
+
// Check binary existence for first allowed command
|
|
250
|
+
if (capability.allowCommands && capability.allowCommands.length > 0) {
|
|
251
|
+
const binary = capability.allowCommands[0];
|
|
252
|
+
try {
|
|
253
|
+
const { execSync } = await Promise.resolve().then(() => __importStar(require("child_process")));
|
|
254
|
+
const whichResult = execSync(`command -v ${binary} 2>/dev/null`, {
|
|
255
|
+
encoding: "utf-8",
|
|
256
|
+
timeout: 5000,
|
|
257
|
+
}).trim();
|
|
258
|
+
checks.binaryExists = true;
|
|
259
|
+
checks.binaryPath = whichResult;
|
|
260
|
+
}
|
|
261
|
+
catch {
|
|
262
|
+
checks.binaryExists = false;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
// Check env var template resolution
|
|
266
|
+
if (capability.env) {
|
|
267
|
+
const templateVars = Object.values(capability.env)
|
|
268
|
+
.flatMap((v) => [...v.matchAll(/\{\{(\w+)\}\}/g)])
|
|
269
|
+
.map((m) => m[1]);
|
|
270
|
+
const unresolved = [];
|
|
271
|
+
for (const varName of templateVars) {
|
|
272
|
+
if (varName === "credential" && !credentialAvailable) {
|
|
273
|
+
unresolved.push("credential");
|
|
274
|
+
}
|
|
275
|
+
if (["apiKey", "apiSecret", "passphrase"].includes(varName) &&
|
|
276
|
+
!credentialAvailable) {
|
|
277
|
+
unresolved.push(varName);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
checks.envResolvable = unresolved.length === 0;
|
|
281
|
+
if (unresolved.length > 0)
|
|
282
|
+
checks.unresolvedVars = unresolved;
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
checks.envResolvable = true;
|
|
286
|
+
}
|
|
287
|
+
const latencyMs = Date.now() - start;
|
|
288
|
+
const healthy = checks.binaryExists && checks.envResolvable;
|
|
289
|
+
const errors = [];
|
|
290
|
+
if (!checks.binaryExists) {
|
|
291
|
+
const binary = capability.allowCommands?.[0] || "unknown";
|
|
292
|
+
errors.push(`Binary '${binary}' not found in PATH`);
|
|
293
|
+
}
|
|
294
|
+
if (!checks.envResolvable && checks.unresolvedVars?.length) {
|
|
295
|
+
errors.push(`Unresolved template vars: ${checks.unresolvedVars.join(", ")}`);
|
|
296
|
+
}
|
|
297
|
+
return {
|
|
298
|
+
service: serviceName,
|
|
299
|
+
capability: capabilityName,
|
|
300
|
+
healthy,
|
|
301
|
+
checks,
|
|
302
|
+
latencyMs,
|
|
303
|
+
error: errors.length > 0 ? errors.join("; ") : undefined,
|
|
304
|
+
checkedAt,
|
|
305
|
+
};
|
|
306
|
+
}
|
|
195
307
|
//# sourceMappingURL=health.js.map
|
package/dist/core/health.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/core/health.ts"],"names":[],"mappings":";AAAA;;;GAGG
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/core/health.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,13 +2,33 @@
|
|
|
2
2
|
* MCP Server for Janee
|
|
3
3
|
* Exposes capabilities to AI agents via Model Context Protocol
|
|
4
4
|
*/
|
|
5
|
-
import { URL } from
|
|
6
|
-
import { Server } from
|
|
7
|
-
import { CredentialOwnership } from
|
|
8
|
-
import { AuditLogger } from
|
|
9
|
-
import { ExecResult } from
|
|
10
|
-
import { Rules } from
|
|
11
|
-
import { SessionManager } from
|
|
5
|
+
import { URL } from "url";
|
|
6
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
7
|
+
import { CredentialOwnership } from "./agent-scope.js";
|
|
8
|
+
import { AuditLogger } from "./audit.js";
|
|
9
|
+
import { ExecResult } from "./exec.js";
|
|
10
|
+
import { Rules } from "./rules.js";
|
|
11
|
+
import { SessionManager } from "./sessions.js";
|
|
12
|
+
export type DenialReasonCode = 'CAPABILITY_NOT_FOUND' | 'AGENT_NOT_ALLOWED' | 'DEFAULT_ACCESS_RESTRICTED' | 'OWNERSHIP_DENIED' | 'RULE_DENY' | 'MODE_MISMATCH' | 'REASON_REQUIRED' | 'COMMAND_NOT_ALLOWED';
|
|
13
|
+
export interface DenialDetails {
|
|
14
|
+
reasonCode: DenialReasonCode;
|
|
15
|
+
capability?: string;
|
|
16
|
+
agentId?: string | null;
|
|
17
|
+
evaluatedPolicy?: string;
|
|
18
|
+
nextStep: string;
|
|
19
|
+
}
|
|
20
|
+
export declare class DenialError extends Error {
|
|
21
|
+
denial: DenialDetails;
|
|
22
|
+
constructor(message: string, denial: DenialDetails);
|
|
23
|
+
}
|
|
24
|
+
export type AccessDenialReason = 'AGENT_NOT_ALLOWED' | 'DEFAULT_ACCESS_RESTRICTED' | 'OWNERSHIP_DENIED';
|
|
25
|
+
/**
|
|
26
|
+
* Returns the specific reason access was denied, or null if access is allowed.
|
|
27
|
+
*/
|
|
28
|
+
export declare function explainAccessDenial(agentId: string | undefined, cap: Capability, service: ServiceConfig | undefined, defaultAccessPolicy: 'open' | 'restricted' | undefined): {
|
|
29
|
+
reason: AccessDenialReason;
|
|
30
|
+
detail: string;
|
|
31
|
+
} | null;
|
|
12
32
|
export interface Capability {
|
|
13
33
|
name: string;
|
|
14
34
|
service: string;
|
|
@@ -17,7 +37,7 @@ export interface Capability {
|
|
|
17
37
|
requiresReason?: boolean;
|
|
18
38
|
rules?: Rules;
|
|
19
39
|
allowedAgents?: string[];
|
|
20
|
-
mode?:
|
|
40
|
+
mode?: "proxy" | "exec";
|
|
21
41
|
allowCommands?: string[];
|
|
22
42
|
env?: Record<string, string>;
|
|
23
43
|
workDir?: string;
|
|
@@ -26,7 +46,7 @@ export interface Capability {
|
|
|
26
46
|
export interface ServiceConfig {
|
|
27
47
|
baseUrl: string;
|
|
28
48
|
auth: {
|
|
29
|
-
type:
|
|
49
|
+
type: "bearer" | "hmac-mexc" | "hmac-bybit" | "hmac-okx" | "headers" | "service-account" | "github-app";
|
|
30
50
|
key?: string;
|
|
31
51
|
apiKey?: string;
|
|
32
52
|
apiSecret?: string;
|
|
@@ -66,7 +86,7 @@ export interface MCPServerOptions {
|
|
|
66
86
|
sessionManager: SessionManager;
|
|
67
87
|
auditLogger: AuditLogger;
|
|
68
88
|
/** Default access policy for capabilities without allowedAgents: "open" (any agent) or "restricted" (no agent unless listed) */
|
|
69
|
-
defaultAccess?:
|
|
89
|
+
defaultAccess?: "open" | "restricted";
|
|
70
90
|
onExecute: (session: any, request: APIRequest) => Promise<APIResponse>;
|
|
71
91
|
onExecCommand?: (session: any, capability: Capability, command: string[], stdin?: string) => Promise<ExecResult>;
|
|
72
92
|
onReloadConfig?: () => ReloadResult;
|
|
@@ -133,6 +153,6 @@ export declare function startMCPServerHTTP(serverOptions: MCPServerOptions, http
|
|
|
133
153
|
port: number;
|
|
134
154
|
idleTimeoutMs?: number;
|
|
135
155
|
runnerKey?: string;
|
|
136
|
-
authorityHooks?: import(
|
|
156
|
+
authorityHooks?: import("./authority.js").AuthorityExecHooks;
|
|
137
157
|
}): Promise<HTTPServerHandle>;
|
|
138
158
|
//# sourceMappingURL=mcp-server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../src/core/mcp-server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../src/core/mcp-server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAUnE,OAAO,EAEL,mBAAmB,EAEpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,UAAU,EAAmB,MAAM,WAAW,CAAC;AAExD,OAAO,EAAc,KAAK,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAO/C,MAAM,MAAM,gBAAgB,GACxB,sBAAsB,GACtB,mBAAmB,GACnB,2BAA2B,GAC3B,kBAAkB,GAClB,WAAW,GACX,eAAe,GACf,iBAAiB,GACjB,qBAAqB,CAAC;AAE1B,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,gBAAgB,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,WAAY,SAAQ,KAAK;IACpC,MAAM,EAAE,aAAa,CAAC;gBACV,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa;CAKnD;AA4BD,MAAM,MAAM,kBAAkB,GAAG,mBAAmB,GAAG,2BAA2B,GAAG,kBAAkB,CAAC;AAExG;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,aAAa,GAAG,SAAS,EAClC,mBAAmB,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,GACrD;IAAE,MAAM,EAAE,kBAAkB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA4BvD;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAEzB,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE;QACJ,IAAI,EACA,QAAQ,GACR,WAAW,GACX,YAAY,GACZ,UAAU,GACV,SAAS,GACT,iBAAiB,GACjB,YAAY,CAAC;QACjB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,SAAS,CAAC,EAAE,mBAAmB,CAAC;CACjC;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC3C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACrC,gFAAgF;IAChF,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,gIAAgI;IAChI,aAAa,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IACtC,SAAS,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IACvE,aAAa,CAAC,EAAE,CACd,OAAO,EAAE,GAAG,EACZ,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,MAAM,EAAE,EACjB,KAAK,CAAC,EAAE,MAAM,KACX,OAAO,CAAC,UAAU,CAAC,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,YAAY,CAAC;IACpC,8EAA8E;IAC9E,kBAAkB,CAAC,EAAE,CACnB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,mBAAmB,KAC3B,IAAI,CAAC;IACV;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,CAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,CAAC,EAAE,MAAM,KACb,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB;oDACgD;IAChD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAsBD,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,YAAY,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,eAAe,CAu/B1E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,GAAG,EACd,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,WAAW,CAAC,CAyCtB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE;IAAE,SAAS,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAA;CAAE,EAClD,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAClC,IAAI,CASN;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,aAAa,EAAE,gBAAgB,GAC9B,OAAO,CAAC,eAAe,CAAC,CAS1B;AAED,sEAAsE;AACtE,MAAM,WAAW,gBAAgB;IAC/B,gEAAgE;IAChE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,qCAAqC;IACrC,YAAY,IAAI,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,CACtC,aAAa,EAAE,gBAAgB,EAC/B,WAAW,EAAE;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;CAC9D,GACA,OAAO,CAAC,gBAAgB,CAAC,CAyO3B"}
|