sonamu 0.8.19 → 0.8.21
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/dist/api/config.d.ts +1 -1
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +1 -1
- package/dist/api/decorators.js +2 -2
- package/dist/api/sonamu.d.ts +1 -1
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +19 -14
- package/dist/bin/cli.js +30 -1
- package/dist/database/base-model.js +2 -2
- package/dist/database/db.d.ts +1 -1
- package/dist/database/db.d.ts.map +1 -1
- package/dist/database/db.js +1 -1
- package/dist/stream/sse.d.ts +2 -0
- package/dist/stream/sse.d.ts.map +1 -1
- package/dist/stream/sse.js +29 -6
- package/dist/syncer/syncer.js +2 -2
- package/dist/testing/global-setup.d.ts.map +1 -1
- package/dist/testing/global-setup.js +4 -1
- package/dist/ui/api.d.ts.map +1 -1
- package/dist/ui/api.js +15 -12
- package/dist/ui/cdd-service.d.ts +4 -2
- package/dist/ui/cdd-service.d.ts.map +1 -1
- package/dist/ui/cdd-service.js +99 -1
- package/dist/ui/cdd-types.d.ts +25 -0
- package/dist/ui/cdd-types.d.ts.map +1 -1
- package/dist/ui/cdd-types.js +1 -1
- package/dist/ui-web/assets/index-B7gc0Ygb.css +1 -0
- package/dist/ui-web/assets/{index-D_19-Pi4.js → index-DP968oXY.js} +71 -71
- package/dist/ui-web/index.html +2 -2
- package/package.json +3 -3
- package/src/api/config.ts +1 -1
- package/src/api/decorators.ts +1 -1
- package/src/api/sonamu.ts +20 -15
- package/src/bin/cli.ts +34 -0
- package/src/database/base-model.ts +1 -1
- package/src/database/db.ts +1 -1
- package/src/shared/app.shared.ts.txt +10 -1
- package/src/shared/web.shared.ts.txt +1 -1
- package/src/skills/AGENTS.md +10 -0
- package/src/skills/sonamu/auth.md +40 -1
- package/src/skills/sonamu/cdd.md +42 -0
- package/src/skills/sonamu/model.md +1 -1
- package/src/skills/sonamu/scaffolding.md +6 -0
- package/src/skills/sonamu/workflow.md +1 -1
- package/src/stream/sse.ts +34 -5
- package/src/syncer/syncer.ts +1 -1
- package/src/testing/global-setup.ts +4 -0
- package/src/ui/api.ts +20 -6
- package/src/ui/cdd-service.ts +106 -0
- package/src/ui/cdd-types.ts +28 -0
- package/dist/ui-web/assets/index-D4XFBV-f.css +0 -1
package/dist/ui/cdd-service.js
CHANGED
|
@@ -284,6 +284,104 @@ import { Sonamu } from "../api/sonamu.js";
|
|
|
284
284
|
schemaKey
|
|
285
285
|
};
|
|
286
286
|
}
|
|
287
|
+
const VALID_SPEC_STATUSES = new Set([
|
|
288
|
+
"draft",
|
|
289
|
+
"specifying",
|
|
290
|
+
"implementing",
|
|
291
|
+
"validating",
|
|
292
|
+
"done"
|
|
293
|
+
]);
|
|
294
|
+
/** 모든 contract/spec 문서를 스캔하여 대시보드 통계를 반환 */ export function getDashboard() {
|
|
295
|
+
const contractDir = getContractDir();
|
|
296
|
+
if (!fs.existsSync(contractDir)) {
|
|
297
|
+
return {
|
|
298
|
+
exists: false,
|
|
299
|
+
stats: {
|
|
300
|
+
totalContracts: 0,
|
|
301
|
+
totalSpecs: 0,
|
|
302
|
+
statusDistribution: {
|
|
303
|
+
draft: 0,
|
|
304
|
+
specifying: 0,
|
|
305
|
+
implementing: 0,
|
|
306
|
+
validating: 0,
|
|
307
|
+
done: 0
|
|
308
|
+
}
|
|
309
|
+
},
|
|
310
|
+
documents: []
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
const documents = [];
|
|
314
|
+
const statusDistribution = {
|
|
315
|
+
draft: 0,
|
|
316
|
+
specifying: 0,
|
|
317
|
+
implementing: 0,
|
|
318
|
+
validating: 0,
|
|
319
|
+
done: 0
|
|
320
|
+
};
|
|
321
|
+
function scanForDashboard(dirPath) {
|
|
322
|
+
const entries = fs.readdirSync(dirPath, {
|
|
323
|
+
withFileTypes: true
|
|
324
|
+
});
|
|
325
|
+
for (const entry of entries){
|
|
326
|
+
const fullPath = path.join(dirPath, entry.name);
|
|
327
|
+
if (entry.isDirectory()) {
|
|
328
|
+
if (entry.name === "schemas") continue;
|
|
329
|
+
scanForDashboard(fullPath);
|
|
330
|
+
} else if (entry.isFile()) {
|
|
331
|
+
const fileType = detectFileType(entry.name);
|
|
332
|
+
if (!fileType) continue;
|
|
333
|
+
const relPath = path.relative(contractDir, fullPath);
|
|
334
|
+
try {
|
|
335
|
+
const raw = fs.readFileSync(fullPath, "utf-8");
|
|
336
|
+
const doc = JSON.parse(raw);
|
|
337
|
+
const summary = {
|
|
338
|
+
path: relPath,
|
|
339
|
+
name: entry.name,
|
|
340
|
+
fileType,
|
|
341
|
+
schemaId: typeof doc.schema === "string" ? doc.schema : undefined,
|
|
342
|
+
lastModified: typeof doc.lastModified === "string" ? doc.lastModified : undefined
|
|
343
|
+
};
|
|
344
|
+
if (fileType === "contract") {
|
|
345
|
+
const features = doc.features;
|
|
346
|
+
if (features && typeof features === "object" && !Array.isArray(features)) {
|
|
347
|
+
summary.featureCount = Object.keys(features).length;
|
|
348
|
+
}
|
|
349
|
+
} else {
|
|
350
|
+
const status = typeof doc.status === "string" ? doc.status : "draft";
|
|
351
|
+
summary.status = VALID_SPEC_STATUSES.has(status) ? status : "draft";
|
|
352
|
+
statusDistribution[summary.status]++;
|
|
353
|
+
if (Array.isArray(doc.acceptanceCriteria)) {
|
|
354
|
+
summary.acceptanceCriteriaCount = doc.acceptanceCriteria.length;
|
|
355
|
+
}
|
|
356
|
+
if (Array.isArray(doc.sources)) {
|
|
357
|
+
summary.sourceCount = doc.sources.length;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
documents.push(summary);
|
|
361
|
+
} catch (err) {
|
|
362
|
+
documents.push({
|
|
363
|
+
path: relPath,
|
|
364
|
+
name: entry.name,
|
|
365
|
+
fileType,
|
|
366
|
+
parseError: err instanceof Error ? err.message : String(err)
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
scanForDashboard(contractDir);
|
|
373
|
+
const totalContracts = documents.filter((d)=>d.fileType === "contract" && !d.parseError).length;
|
|
374
|
+
const totalSpecs = documents.filter((d)=>d.fileType === "spec" && !d.parseError).length;
|
|
375
|
+
return {
|
|
376
|
+
exists: true,
|
|
377
|
+
stats: {
|
|
378
|
+
totalContracts,
|
|
379
|
+
totalSpecs,
|
|
380
|
+
statusDistribution
|
|
381
|
+
},
|
|
382
|
+
documents
|
|
383
|
+
};
|
|
384
|
+
}
|
|
287
385
|
/** 소스 파일을 외부 에디터로 열기 (대기하지 않음) */ export function openSourceFile(filePath) {
|
|
288
386
|
const absPath = path.isAbsolute(filePath) ? filePath : path.resolve(Sonamu.apiRootPath, filePath);
|
|
289
387
|
if (!fs.existsSync(absPath)) {
|
|
@@ -302,4 +400,4 @@ import { Sonamu } from "../api/sonamu.js";
|
|
|
302
400
|
child.unref();
|
|
303
401
|
}
|
|
304
402
|
|
|
305
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91aS9jZGQtc2VydmljZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcGF3biB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB0eXBlIHtcbiAgQ2RkQ29udGVudEVudmVsb3BlLFxuICBDZGRGaWxlVHlwZSxcbiAgQ2RkU2NoZW1hLFxuICBDZGRTY2hlbWFEZXRhaWxFbnZlbG9wZSxcbiAgQ2RkU2NoZW1hUmVmZXJlbmNlLFxuICBDZGRTY2hlbWFTdW1tYXJ5LFxuICBDZGRUcmVlTm9kZSxcbn0gZnJvbSBcIi4vY2RkLXR5cGVzXCI7XG5cbmV4cG9ydCB0eXBlIHtcbiAgQ2RkQ29udGVudEVudmVsb3BlLFxuICBDZGRGaWxlVHlwZSxcbiAgQ2RkU2NoZW1hLFxuICBDZGRTY2hlbWFEZXRhaWxFbnZlbG9wZSxcbiAgQ2RkU2NoZW1hRmllbGQsXG4gIENkZFNjaGVtYUZpZWxkVHlwZSxcbiAgQ2RkU2NoZW1hUmVmZXJlbmNlLFxuICBDZGRTY2hlbWFTdW1tYXJ5LFxuICBDZGRUcmVlTm9kZSxcbn0gZnJvbSBcIi4vY2RkLXR5cGVzXCI7XG5cbi8qKiBjb250cmFjdC8g65SU66CJ7YSw66asIOygiOuMgCDqsr3roZwg67CY7ZmYIChhcGlSb290UGF0aCDquLDspIApICovXG5mdW5jdGlvbiBnZXRDb250cmFjdERpcigpOiBzdHJpbmcge1xuICByZXR1cm4gcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgXCIuLlwiLCBcIi4uXCIsIFwiY29udHJhY3RcIik7XG59XG5cbi8qKiDqsr3roZzqsIAgY29udHJhY3QvIOuUlOugie2EsOumrCDrgrTrtoDsnbjsp4Ag6rKA7KadICovXG5mdW5jdGlvbiBhc3NlcnRJbnNpZGVDb250cmFjdERpcihmaWxlUGF0aDogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IGNvbnRyYWN0RGlyID0gZ2V0Q29udHJhY3REaXIoKTtcbiAgY29uc3QgcmVzb2x2ZWQgPSBwYXRoLnJlc29sdmUoY29udHJhY3REaXIsIGZpbGVQYXRoKTtcbiAgaWYgKCFyZXNvbHZlZC5zdGFydHNXaXRoKGNvbnRyYWN0RGlyICsgcGF0aC5zZXApICYmIHJlc29sdmVkICE9PSBjb250cmFjdERpcikge1xuICAgIHRocm93IG5ldyBFcnJvcihg6rK966Gc6rCAIGNvbnRyYWN0LyDrlJTroInthLDrpqwg67CW7J2EIOywuOyhsO2VqeuLiOuLpDogJHtmaWxlUGF0aH1gKTtcbiAgfVxufVxuXG4vKiog7YyM7J2866qF7JeQ7IScIENkZEZpbGVUeXBlIO2MkOuzhCAqL1xuZnVuY3Rpb24gZGV0ZWN0RmlsZVR5cGUoZmlsZU5hbWU6IHN0cmluZyk6IENkZEZpbGVUeXBlIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGZpbGVOYW1lLmVuZHNXaXRoKFwiLmNvbnRyYWN0Lmpzb25cIikpIHJldHVybiBcImNvbnRyYWN0XCI7XG4gIGlmIChmaWxlTmFtZS5lbmRzV2l0aChcIi5zcGVjLmpzb25cIikpIHJldHVybiBcInNwZWNcIjtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqIOuUlOugie2EsOumrOulvCDsnqzqt4Ag7YOQ7IOJ7ZWY7JesIENkZFRyZWVOb2RlIO2KuOumrOulvCDsg53shLEgKi9cbmZ1bmN0aW9uIHNjYW5EaXJlY3RvcnkoZGlyUGF0aDogc3RyaW5nLCByZWxhdGl2ZVRvOiBzdHJpbmcpOiBDZGRUcmVlTm9kZVtdIHtcbiAgY29uc3QgZW50cmllcyA9IGZzLnJlYWRkaXJTeW5jKGRpclBhdGgsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgY29uc3Qgbm9kZXM6IENkZFRyZWVOb2RlW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihkaXJQYXRoLCBlbnRyeS5uYW1lKTtcbiAgICBjb25zdCByZWxQYXRoID0gcGF0aC5yZWxhdGl2ZShyZWxhdGl2ZVRvLCBmdWxsUGF0aCk7XG5cbiAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSBzY2FuRGlyZWN0b3J5KGZ1bGxQYXRoLCByZWxhdGl2ZVRvKTtcbiAgICAgIG5vZGVzLnB1c2goe1xuICAgICAgICBuYW1lOiBlbnRyeS5uYW1lLFxuICAgICAgICBwYXRoOiByZWxQYXRoLFxuICAgICAgICB0eXBlOiBcImRpcmVjdG9yeVwiLFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoZW50cnkuaXNGaWxlKCkpIHtcbiAgICAgIGNvbnN0IGZpbGVUeXBlID0gZGV0ZWN0RmlsZVR5cGUoZW50cnkubmFtZSk7XG4gICAgICBpZiAoZmlsZVR5cGUpIHtcbiAgICAgICAgbm9kZXMucHVzaCh7XG4gICAgICAgICAgbmFtZTogZW50cnkubmFtZSxcbiAgICAgICAgICBwYXRoOiByZWxQYXRoLFxuICAgICAgICAgIHR5cGU6IFwiZmlsZVwiLFxuICAgICAgICAgIGZpbGVUeXBlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9kZXM7XG59XG5cbi8qKiBjb250cmFjdC8g65SU66CJ7YSw66as7J2YIO2KuOumrCDqtazsobDrpbwg67CY7ZmYICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2RkVHJlZSgpOiB7IGV4aXN0czogYm9vbGVhbjsgdHJlZTogQ2RkVHJlZU5vZGVbXSB9IHtcbiAgY29uc3QgY29udHJhY3REaXIgPSBnZXRDb250cmFjdERpcigpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmMoY29udHJhY3REaXIpKSB7XG4gICAgcmV0dXJuIHsgZXhpc3RzOiBmYWxzZSwgdHJlZTogW10gfTtcbiAgfVxuICBjb25zdCB0cmVlID0gc2NhbkRpcmVjdG9yeShjb250cmFjdERpciwgY29udHJhY3REaXIpO1xuICByZXR1cm4geyBleGlzdHM6IHRydWUsIHRyZWUgfTtcbn1cblxuLyoqIHNjaGVtYSBJROuhnCBzY2hlbWEg7YyM7J287J2EIOywvuyVhCDrsJjtmZggKi9cbmZ1bmN0aW9uIHJlc29sdmVTY2hlbWEoc2NoZW1hSWQ6IHN0cmluZyk6IENkZFNjaGVtYSB8IG51bGwge1xuICBjb25zdCBjb250cmFjdERpciA9IGdldENvbnRyYWN0RGlyKCk7XG4gIGNvbnN0IHNjaGVtYVBhdGggPSBwYXRoLmpvaW4oY29udHJhY3REaXIsIFwic2NoZW1hc1wiLCBgJHtzY2hlbWFJZH0uc2NoZW1hLmpzb25gKTtcbiAgaWYgKCFmcy5leGlzdHNTeW5jKHNjaGVtYVBhdGgpKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgcmF3ID0gZnMucmVhZEZpbGVTeW5jKHNjaGVtYVBhdGgsIFwidXRmLThcIik7XG4gIHJldHVybiBKU09OLnBhcnNlKHJhdykgYXMgQ2RkU2NoZW1hO1xufVxuXG4vKiogSlNPTiDtjIzsnbzsnZgg7KCE7LK0IOuCtOyaqeydhCDsnb3slrQgc2NoZW1h7JmAIO2VqOq7mCBlbnZlbG9wZeuhnCDrsJjtmZggKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFkQ29udGVudChmaWxlUGF0aDogc3RyaW5nKTogQ2RkQ29udGVudEVudmVsb3BlIHtcbiAgYXNzZXJ0SW5zaWRlQ29udHJhY3REaXIoZmlsZVBhdGgpO1xuXG4gIGNvbnN0IGNvbnRyYWN0RGlyID0gZ2V0Q29udHJhY3REaXIoKTtcbiAgY29uc3QgYWJzUGF0aCA9IHBhdGgucmVzb2x2ZShjb250cmFjdERpciwgZmlsZVBhdGgpO1xuXG4gIGlmICghZnMuZXhpc3RzU3luYyhhYnNQYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihg7YyM7J287J2EIOywvuydhCDsiJgg7JeG7Iq164uI64ukOiAke2ZpbGVQYXRofWApO1xuICB9XG5cbiAgY29uc3QgcmF3ID0gZnMucmVhZEZpbGVTeW5jKGFic1BhdGgsIFwidXRmLThcIik7XG4gIGNvbnN0IGRvY3VtZW50ID0gSlNPTi5wYXJzZShyYXcpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBmaWxlVHlwZSA9IGRldGVjdEZpbGVUeXBlKHBhdGguYmFzZW5hbWUoZmlsZVBhdGgpKTtcbiAgY29uc3Qgc2NoZW1hSWQgPSB0eXBlb2YgZG9jdW1lbnQuc2NoZW1hID09PSBcInN0cmluZ1wiID8gZG9jdW1lbnQuc2NoZW1hIDogbnVsbDtcbiAgY29uc3Qgc2NoZW1hID0gc2NoZW1hSWQgPyByZXNvbHZlU2NoZW1hKHNjaGVtYUlkKSA6IG51bGw7XG5cbiAgcmV0dXJuIHtcbiAgICBkb2N1bWVudCxcbiAgICBzY2hlbWEsXG4gICAgZmlsZVR5cGU6IGZpbGVUeXBlID8/IFwiY29udHJhY3RcIixcbiAgfTtcbn1cblxuLyoqIEpTT04g7YyM7J287J2EIOyZuOu2gCDsl5DrlJTthLDroZwg7KeB7KCRIO2OuOynkSAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVkaXRDb250ZW50KFxuICBmaWxlUGF0aDogc3RyaW5nLFxuKTogUHJvbWlzZTx7IHN1Y2Nlc3M6IGJvb2xlYW47IGZpbGVQYXRoOiBzdHJpbmcgfT4ge1xuICBhc3NlcnRJbnNpZGVDb250cmFjdERpcihmaWxlUGF0aCk7XG5cbiAgY29uc3QgY29udHJhY3REaXIgPSBnZXRDb250cmFjdERpcigpO1xuICBjb25zdCBhYnNQYXRoID0gcGF0aC5yZXNvbHZlKGNvbnRyYWN0RGlyLCBmaWxlUGF0aCk7XG5cbiAgaWYgKCFmcy5leGlzdHNTeW5jKGFic1BhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGDtjIzsnbzsnYQg7LC+7J2EIOyImCDsl4bsirXri4jri6Q6ICR7ZmlsZVBhdGh9YCk7XG4gIH1cblxuICBjb25zdCBlZGl0b3IgPSByZXNvbHZlRWRpdG9yQ2xpKCk7XG4gIGF3YWl0IHJ1bkVkaXRvcihlZGl0b3IsIGFic1BhdGgpO1xuXG4gIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIGZpbGVQYXRoIH07XG59XG5cbi8qKiDsl5DrlJTthLDrs4Qg7JWxIOuyiOuTpCDrgrQgQ0xJIOqyveuhnCArIC0td2FpdCDtlIzrnpjqt7gg66ek7ZWRICovXG5jb25zdCBFRElUT1JfQ0xJX01BUDogUmVjb3JkPHN0cmluZywgeyBjbGk6IHN0cmluZzsgd2FpdEZsYWc6IHN0cmluZyB9PiA9IHtcbiAgXCJWaXN1YWwgU3R1ZGlvIENvZGVcIjogeyBjbGk6IFwiQ29udGVudHMvUmVzb3VyY2VzL2FwcC9iaW4vY29kZVwiLCB3YWl0RmxhZzogXCItLXdhaXRcIiB9LFxuICBaZWQ6IHsgY2xpOiBcIkNvbnRlbnRzL01hY09TL2NsaVwiLCB3YWl0RmxhZzogXCItLXdhaXRcIiB9LFxuICBDdXJzb3I6IHsgY2xpOiBcIkNvbnRlbnRzL1Jlc291cmNlcy9hcHAvYmluL2N1cnNvclwiLCB3YWl0RmxhZzogXCItLXdhaXRcIiB9LFxufTtcblxuLyoqIOyVsSDrsojrk6QgQ0xJIOqyveuhnOulvCByZXNvbHZlLiB3YWl0PWZhbHNl7J2066m0IC0td2FpdCDtlIzrnpjqt7jrpbwg7IOd6561ICovXG5mdW5jdGlvbiByZXNvbHZlRWRpdG9yQ2xpKG9wdGlvbnM/OiB7IHdhaXQ/OiBib29sZWFuIH0pOiB7IGJpbjogc3RyaW5nOyBhcmdzOiBzdHJpbmdbXSB9IHtcbiAgY29uc3Qgd2FpdCA9IG9wdGlvbnM/LndhaXQgPz8gdHJ1ZTtcbiAgY29uc3QgYXBwTmFtZSA9IFNvbmFtdS5jb25maWcuZXh0ZXJuYWxFZGl0b3IgPz8gXCJWaXN1YWwgU3R1ZGlvIENvZGVcIjtcbiAgY29uc3QgbWFwcGluZyA9IEVESVRPUl9DTElfTUFQW2FwcE5hbWVdO1xuICBpZiAoIW1hcHBpbmcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBg7KeA7JuQ65CY7KeAIOyViuuKlCDsl5DrlJTthLDsnoXri4jri6Q6ICR7YXBwTmFtZX0gKOyngOybkDogJHtPYmplY3Qua2V5cyhFRElUT1JfQ0xJX01BUCkuam9pbihcIiwgXCIpfSlgLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBzZWFyY2hQYXRocyA9IFtcbiAgICBgL0FwcGxpY2F0aW9ucy8ke2FwcE5hbWV9LmFwcGAsXG4gICAgYCR7b3MuaG9tZWRpcigpfS9BcHBsaWNhdGlvbnMvJHthcHBOYW1lfS5hcHBgLFxuICBdO1xuICBjb25zdCBidW5kbGVQYXRoID0gc2VhcmNoUGF0aHMuZmluZCgocCkgPT4gZnMuZXhpc3RzU3luYyhwKSk7XG4gIGlmICghYnVuZGxlUGF0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihg7JWxIOuyiOuTpOydhCDssL7snYQg7IiYIOyXhuyKteuLiOuLpDogJHthcHBOYW1lfSAoL0FwcGxpY2F0aW9ucyDtmZXsnbgpYCk7XG4gIH1cblxuICBjb25zdCBjbGlCaW4gPSBwYXRoLmpvaW4oYnVuZGxlUGF0aCwgbWFwcGluZy5jbGkpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmMoY2xpQmluKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihg7JeQ65SU7YSwIENMSeulvCDssL7snYQg7IiYIOyXhuyKteuLiOuLpDogJHtjbGlCaW59YCk7XG4gIH1cblxuICByZXR1cm4geyBiaW46IGNsaUJpbiwgYXJnczogd2FpdCA/IFttYXBwaW5nLndhaXRGbGFnXSA6IFtdIH07XG59XG5cbi8qKiDsl5DrlJTthLAgQ0xJ66W8IOyLpO2Wie2VmOqzoCDtg63snbQg64ur7Z6QIOuVjOq5jOyngCDrjIDquLAgKi9cbmZ1bmN0aW9uIHJ1bkVkaXRvcihlZGl0b3I6IHsgYmluOiBzdHJpbmc7IGFyZ3M6IHN0cmluZ1tdIH0sIGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBjaGlsZCA9IHNwYXduKGVkaXRvci5iaW4sIFsuLi5lZGl0b3IuYXJncywgZmlsZVBhdGhdLCB7XG4gICAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gICAgfSk7XG5cbiAgICBjaGlsZC5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoYOyXkOuUlO2EsCDsi6Ttlokg7Iuk7YyoICgke2VkaXRvci5iaW59KTogJHtlcnIubWVzc2FnZX1gKSk7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5vbihcImNsb3NlXCIsIChjb2RlKSA9PiB7XG4gICAgICBpZiAoY29kZSA9PT0gMCkge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGDsl5DrlJTthLDqsIAg67mE7KCV7IOBIOyiheujjOuQmOyXiOyKteuLiOuLpCAoZXhpdCBjb2RlOiAke2NvZGV9KWApKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogU2NoZW1hIOq0gOumrCBBUElcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiogY29udHJhY3Qvc2NoZW1hcy8g65SU66CJ7YSw66asIOuCtCAuc2NoZW1hLmpzb24g7YyM7J28IOqyveuhnCDrqqnroZ0g67CY7ZmYICovXG5mdW5jdGlvbiBzY2FuU2NoZW1hRmlsZXMoKTogeyBhYnNQYXRoOiBzdHJpbmc7IHJlbFBhdGg6IHN0cmluZzsgZmlsZU5hbWU6IHN0cmluZyB9W10ge1xuICBjb25zdCBzY2hlbWFzRGlyID0gcGF0aC5qb2luKGdldENvbnRyYWN0RGlyKCksIFwic2NoZW1hc1wiKTtcbiAgaWYgKCFmcy5leGlzdHNTeW5jKHNjaGVtYXNEaXIpKSByZXR1cm4gW107XG5cbiAgcmV0dXJuIGZzXG4gICAgLnJlYWRkaXJTeW5jKHNjaGVtYXNEaXIsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KVxuICAgIC5maWx0ZXIoKGUpID0+IGUuaXNGaWxlKCkgJiYgZS5uYW1lLmVuZHNXaXRoKFwiLnNjaGVtYS5qc29uXCIpKVxuICAgIC5tYXAoKGUpID0+ICh7XG4gICAgICBhYnNQYXRoOiBwYXRoLmpvaW4oc2NoZW1hc0RpciwgZS5uYW1lKSxcbiAgICAgIHJlbFBhdGg6IGBzY2hlbWFzLyR7ZS5uYW1lfWAsXG4gICAgICBmaWxlTmFtZTogZS5uYW1lLFxuICAgIH0pKTtcbn1cblxuLyoqIO2KueyglSBzY2hlbWFJZOulvCDssLjsobDtlZjripQgY29udHJhY3Qvc3BlYyDrrLjshJzrk6TsnYQg7J6s6reAIOyImOynkSAqL1xuZnVuY3Rpb24gY29sbGVjdFNjaGVtYVJlZmVyZW5jZXMoXG4gIHNjaGVtYUlkOiBzdHJpbmcsXG4gIGRpclBhdGg6IHN0cmluZyxcbiAgcmVsYXRpdmVUbzogc3RyaW5nLFxuKTogQ2RkU2NoZW1hUmVmZXJlbmNlW10ge1xuICBpZiAoIWZzLmV4aXN0c1N5bmMoZGlyUGF0aCkpIHJldHVybiBbXTtcbiAgY29uc3QgcmVmczogQ2RkU2NoZW1hUmVmZXJlbmNlW10gPSBbXTtcbiAgY29uc3QgZW50cmllcyA9IGZzLnJlYWRkaXJTeW5jKGRpclBhdGgsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcblxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihkaXJQYXRoLCBlbnRyeS5uYW1lKTtcbiAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgaWYgKGVudHJ5Lm5hbWUgPT09IFwic2NoZW1hc1wiKSBjb250aW51ZTtcbiAgICAgIHJlZnMucHVzaCguLi5jb2xsZWN0U2NoZW1hUmVmZXJlbmNlcyhzY2hlbWFJZCwgZnVsbFBhdGgsIHJlbGF0aXZlVG8pKTtcbiAgICB9IGVsc2UgaWYgKGVudHJ5LmlzRmlsZSgpKSB7XG4gICAgICBjb25zdCBmaWxlVHlwZSA9IGRldGVjdEZpbGVUeXBlKGVudHJ5Lm5hbWUpO1xuICAgICAgaWYgKCFmaWxlVHlwZSkgY29udGludWU7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByYXcgPSBmcy5yZWFkRmlsZVN5bmMoZnVsbFBhdGgsIFwidXRmLThcIik7XG4gICAgICAgIGNvbnN0IGRvYyA9IEpTT04ucGFyc2UocmF3KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgaWYgKGRvYy5zY2hlbWEgPT09IHNjaGVtYUlkKSB7XG4gICAgICAgICAgcmVmcy5wdXNoKHtcbiAgICAgICAgICAgIHBhdGg6IHBhdGgucmVsYXRpdmUocmVsYXRpdmVUbywgZnVsbFBhdGgpLFxuICAgICAgICAgICAgZmlsZVR5cGUsXG4gICAgICAgICAgICBuYW1lOiBlbnRyeS5uYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gSlNPTiDtjIzsi7Eg7Iuk7YyoIOyLnCDrrLTsi5xcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlZnM7XG59XG5cbi8qKiBzY2hlbWEg7YyM7J2866qF7JeQ7IScIOq4sOuMgOuQmOuKlCBpZCDstpTstpwgKi9cbmZ1bmN0aW9uIGV4cGVjdGVkU2NoZW1hSWQoZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBmaWxlTmFtZS5yZXBsYWNlKC9cXC5zY2hlbWFcXC5qc29uJC8sIFwiXCIpO1xufVxuXG4vKiogc2NoZW1hcy8g7ZWY7JyEIOqyveuhnOqwgCBjb250cmFjdC9zY2hlbWFzLyDrgrTrtoDsnbjsp4Ag6rKA7KadICovXG5mdW5jdGlvbiBhc3NlcnRJbnNpZGVTY2hlbWFEaXIoc2NoZW1hS2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3Qgc2NoZW1hc0RpciA9IHBhdGguam9pbihnZXRDb250cmFjdERpcigpLCBcInNjaGVtYXNcIik7XG4gIGNvbnN0IHJlc29sdmVkID0gcGF0aC5yZXNvbHZlKHNjaGVtYXNEaXIsIGAke3NjaGVtYUtleX0uc2NoZW1hLmpzb25gKTtcbiAgaWYgKCFyZXNvbHZlZC5zdGFydHNXaXRoKHNjaGVtYXNEaXIgKyBwYXRoLnNlcCkgJiYgcmVzb2x2ZWQgIT09IHNjaGVtYXNEaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYOycoO2aqO2VmOyngCDslYrsnYAg7Iqk7YKk66eIIO2CpOyeheuLiOuLpDogJHtzY2hlbWFLZXl9YCk7XG4gIH1cbn1cblxuLyoqIHNjaGVtYSDrqqnroZ0g67CY7ZmYICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdFNjaGVtYXMoKTogeyBzY2hlbWFzOiBDZGRTY2hlbWFTdW1tYXJ5W10gfSB7XG4gIGNvbnN0IGNvbnRyYWN0RGlyID0gZ2V0Q29udHJhY3REaXIoKTtcbiAgY29uc3QgZmlsZXMgPSBzY2FuU2NoZW1hRmlsZXMoKTtcbiAgY29uc3Qgc2NoZW1hczogQ2RkU2NoZW1hU3VtbWFyeVtdID0gW107XG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgY29uc3Qga2V5ID0gZXhwZWN0ZWRTY2hlbWFJZChmaWxlLmZpbGVOYW1lKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmF3ID0gZnMucmVhZEZpbGVTeW5jKGZpbGUuYWJzUGF0aCwgXCJ1dGYtOFwiKTtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IEpTT04ucGFyc2UocmF3KSBhcyBDZGRTY2hlbWE7XG4gICAgICBjb25zdCByZWZzID0gY29sbGVjdFNjaGVtYVJlZmVyZW5jZXMoc2NoZW1hLmlkLCBjb250cmFjdERpciwgY29udHJhY3REaXIpO1xuICAgICAgc2NoZW1hcy5wdXNoKHtcbiAgICAgICAga2V5LFxuICAgICAgICBpZDogc2NoZW1hLmlkLFxuICAgICAgICBwYXRoOiBmaWxlLnJlbFBhdGgsXG4gICAgICAgIHR5cGU6IHNjaGVtYS50eXBlLFxuICAgICAgICBmaWVsZENvdW50OiBzY2hlbWEuZmllbGRzLmxlbmd0aCxcbiAgICAgICAgcmVmZXJlbmNlQ291bnQ6IHJlZnMubGVuZ3RoLFxuICAgICAgICBoYXNJZE1pc21hdGNoOiBzY2hlbWEuaWQgIT09IGtleSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgc2NoZW1hcy5wdXNoKHtcbiAgICAgICAga2V5LFxuICAgICAgICBpZDoga2V5LFxuICAgICAgICBwYXRoOiBmaWxlLnJlbFBhdGgsXG4gICAgICAgIHR5cGU6IFwiY29udHJhY3RcIixcbiAgICAgICAgZmllbGRDb3VudDogMCxcbiAgICAgICAgcmVmZXJlbmNlQ291bnQ6IDAsXG4gICAgICAgIGhhc0lkTWlzbWF0Y2g6IGZhbHNlLFxuICAgICAgICBwYXJzZUVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVyciksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBzY2hlbWFzIH07XG59XG5cbi8qKiBzY2hlbWEg7IOB7IS4IOuwmO2ZmCAo7YyM7J2866qFIOq4sOuwmCBrZXnroZwg7KGw7ZqMKSAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRTY2hlbWEoc2NoZW1hS2V5OiBzdHJpbmcpOiBDZGRTY2hlbWFEZXRhaWxFbnZlbG9wZSB7XG4gIGFzc2VydEluc2lkZVNjaGVtYURpcihzY2hlbWFLZXkpO1xuXG4gIGNvbnN0IGNvbnRyYWN0RGlyID0gZ2V0Q29udHJhY3REaXIoKTtcbiAgY29uc3QgYWJzUGF0aCA9IHBhdGguam9pbihjb250cmFjdERpciwgXCJzY2hlbWFzXCIsIGAke3NjaGVtYUtleX0uc2NoZW1hLmpzb25gKTtcblxuICBpZiAoIWZzLmV4aXN0c1N5bmMoYWJzUGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYOyKpO2CpOuniOulvCDssL7snYQg7IiYIOyXhuyKteuLiOuLpDogJHtzY2hlbWFLZXl9YCk7XG4gIH1cblxuICBjb25zdCByYXcgPSBmcy5yZWFkRmlsZVN5bmMoYWJzUGF0aCwgXCJ1dGYtOFwiKTtcbiAgY29uc3Qgc2NoZW1hID0gSlNPTi5wYXJzZShyYXcpIGFzIENkZFNjaGVtYTtcbiAgY29uc3QgcmVsUGF0aCA9IHBhdGgucmVsYXRpdmUoY29udHJhY3REaXIsIGFic1BhdGgpO1xuICBjb25zdCByZWZlcmVuY2VzID0gY29sbGVjdFNjaGVtYVJlZmVyZW5jZXMoc2NoZW1hLmlkLCBjb250cmFjdERpciwgY29udHJhY3REaXIpO1xuXG4gIHJldHVybiB7XG4gICAga2V5OiBzY2hlbWFLZXksXG4gICAgcGF0aDogcmVsUGF0aCxcbiAgICBzY2hlbWEsXG4gICAgcmVmZXJlbmNlcyxcbiAgICBoYXNJZE1pc21hdGNoOiBzY2hlbWEuaWQgIT09IHNjaGVtYUtleSxcbiAgfTtcbn1cblxuLyoqIHNjaGVtYSDtjIzsnbzsnYQg7Jm467aAIOyXkOuUlO2EsOuhnCDtjrjsp5EgKO2MjOydvOuqhSDquLDrsJgga2V566GcIOyhsO2ajCkgKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlZGl0U2NoZW1hKFxuICBzY2hlbWFLZXk6IHN0cmluZyxcbik6IFByb21pc2U8eyBzdWNjZXNzOiBib29sZWFuOyBzY2hlbWFLZXk6IHN0cmluZyB9PiB7XG4gIGFzc2VydEluc2lkZVNjaGVtYURpcihzY2hlbWFLZXkpO1xuXG4gIGNvbnN0IGNvbnRyYWN0RGlyID0gZ2V0Q29udHJhY3REaXIoKTtcbiAgY29uc3QgYWJzUGF0aCA9IHBhdGguam9pbihjb250cmFjdERpciwgXCJzY2hlbWFzXCIsIGAke3NjaGVtYUtleX0uc2NoZW1hLmpzb25gKTtcblxuICBpZiAoIWZzLmV4aXN0c1N5bmMoYWJzUGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYOyKpO2CpOuniOulvCDssL7snYQg7IiYIOyXhuyKteuLiOuLpDogJHtzY2hlbWFLZXl9YCk7XG4gIH1cblxuICBjb25zdCBlZGl0b3IgPSByZXNvbHZlRWRpdG9yQ2xpKCk7XG4gIGF3YWl0IHJ1bkVkaXRvcihlZGl0b3IsIGFic1BhdGgpO1xuXG4gIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIHNjaGVtYUtleSB9O1xufVxuXG4vKiog7IaM7IqkIO2MjOydvOydhCDsmbjrtoAg7JeQ65SU7YSw66GcIOyXtOq4sCAo64yA6riw7ZWY7KeAIOyViuydjCkgKi9cbmV4cG9ydCBmdW5jdGlvbiBvcGVuU291cmNlRmlsZShmaWxlUGF0aDogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IGFic1BhdGggPSBwYXRoLmlzQWJzb2x1dGUoZmlsZVBhdGgpID8gZmlsZVBhdGggOiBwYXRoLnJlc29sdmUoU29uYW11LmFwaVJvb3RQYXRoLCBmaWxlUGF0aCk7XG5cbiAgaWYgKCFmcy5leGlzdHNTeW5jKGFic1BhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGDtjIzsnbzsnYQg7LC+7J2EIOyImCDsl4bsirXri4jri6Q6ICR7ZmlsZVBhdGh9YCk7XG4gIH1cblxuICBjb25zdCBlZGl0b3IgPSByZXNvbHZlRWRpdG9yQ2xpKHsgd2FpdDogZmFsc2UgfSk7XG4gIGNvbnN0IGNoaWxkID0gc3Bhd24oZWRpdG9yLmJpbiwgWy4uLmVkaXRvci5hcmdzLCBhYnNQYXRoXSwge1xuICAgIHN0ZGlvOiBcImlnbm9yZVwiLFxuICAgIGRldGFjaGVkOiB0cnVlLFxuICB9KTtcbiAgY2hpbGQudW5yZWYoKTtcbn1cbiJdLCJuYW1lcyI6WyJzcGF3biIsImZzIiwib3MiLCJwYXRoIiwiU29uYW11IiwiZ2V0Q29udHJhY3REaXIiLCJqb2luIiwiYXBpUm9vdFBhdGgiLCJhc3NlcnRJbnNpZGVDb250cmFjdERpciIsImZpbGVQYXRoIiwiY29udHJhY3REaXIiLCJyZXNvbHZlZCIsInJlc29sdmUiLCJzdGFydHNXaXRoIiwic2VwIiwiRXJyb3IiLCJkZXRlY3RGaWxlVHlwZSIsImZpbGVOYW1lIiwiZW5kc1dpdGgiLCJ1bmRlZmluZWQiLCJzY2FuRGlyZWN0b3J5IiwiZGlyUGF0aCIsInJlbGF0aXZlVG8iLCJlbnRyaWVzIiwicmVhZGRpclN5bmMiLCJ3aXRoRmlsZVR5cGVzIiwibm9kZXMiLCJlbnRyeSIsImZ1bGxQYXRoIiwibmFtZSIsInJlbFBhdGgiLCJyZWxhdGl2ZSIsImlzRGlyZWN0b3J5IiwiY2hpbGRyZW4iLCJwdXNoIiwidHlwZSIsImlzRmlsZSIsImZpbGVUeXBlIiwiZ2V0Q2RkVHJlZSIsImV4aXN0c1N5bmMiLCJleGlzdHMiLCJ0cmVlIiwicmVzb2x2ZVNjaGVtYSIsInNjaGVtYUlkIiwic2NoZW1hUGF0aCIsInJhdyIsInJlYWRGaWxlU3luYyIsIkpTT04iLCJwYXJzZSIsInJlYWRDb250ZW50IiwiYWJzUGF0aCIsImRvY3VtZW50IiwiYmFzZW5hbWUiLCJzY2hlbWEiLCJlZGl0Q29udGVudCIsImVkaXRvciIsInJlc29sdmVFZGl0b3JDbGkiLCJydW5FZGl0b3IiLCJzdWNjZXNzIiwiRURJVE9SX0NMSV9NQVAiLCJjbGkiLCJ3YWl0RmxhZyIsIlplZCIsIkN1cnNvciIsIm9wdGlvbnMiLCJ3YWl0IiwiYXBwTmFtZSIsImNvbmZpZyIsImV4dGVybmFsRWRpdG9yIiwibWFwcGluZyIsIk9iamVjdCIsImtleXMiLCJzZWFyY2hQYXRocyIsImhvbWVkaXIiLCJidW5kbGVQYXRoIiwiZmluZCIsInAiLCJjbGlCaW4iLCJiaW4iLCJhcmdzIiwiUHJvbWlzZSIsInJlamVjdCIsImNoaWxkIiwic3RkaW8iLCJvbiIsImVyciIsIm1lc3NhZ2UiLCJjb2RlIiwic2NhblNjaGVtYUZpbGVzIiwic2NoZW1hc0RpciIsImZpbHRlciIsImUiLCJtYXAiLCJjb2xsZWN0U2NoZW1hUmVmZXJlbmNlcyIsInJlZnMiLCJkb2MiLCJleHBlY3RlZFNjaGVtYUlkIiwicmVwbGFjZSIsImFzc2VydEluc2lkZVNjaGVtYURpciIsInNjaGVtYUtleSIsImxpc3RTY2hlbWFzIiwiZmlsZXMiLCJzY2hlbWFzIiwiZmlsZSIsImtleSIsImlkIiwiZmllbGRDb3VudCIsImZpZWxkcyIsImxlbmd0aCIsInJlZmVyZW5jZUNvdW50IiwiaGFzSWRNaXNtYXRjaCIsInBhcnNlRXJyb3IiLCJTdHJpbmciLCJyZWFkU2NoZW1hIiwicmVmZXJlbmNlcyIsImVkaXRTY2hlbWEiLCJvcGVuU291cmNlRmlsZSIsImlzQWJzb2x1dGUiLCJkZXRh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
|
|
403
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91aS9jZGQtc2VydmljZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcGF3biB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB0eXBlIHtcbiAgQ2RkQ29udGVudEVudmVsb3BlLFxuICBDZGREYXNoYm9hcmREYXRhLFxuICBDZGREb2N1bWVudFN1bW1hcnksXG4gIENkZEZpbGVUeXBlLFxuICBDZGRTY2hlbWEsXG4gIENkZFNjaGVtYURldGFpbEVudmVsb3BlLFxuICBDZGRTY2hlbWFSZWZlcmVuY2UsXG4gIENkZFNjaGVtYVN1bW1hcnksXG4gIENkZFNwZWNTdGF0dXMsXG4gIENkZFRyZWVOb2RlLFxufSBmcm9tIFwiLi9jZGQtdHlwZXNcIjtcblxuZXhwb3J0IHR5cGUge1xuICBDZGRDb250ZW50RW52ZWxvcGUsXG4gIENkZERhc2hib2FyZERhdGEsXG4gIENkZERvY3VtZW50U3VtbWFyeSxcbiAgQ2RkRmlsZVR5cGUsXG4gIENkZFNjaGVtYSxcbiAgQ2RkU2NoZW1hRGV0YWlsRW52ZWxvcGUsXG4gIENkZFNjaGVtYUZpZWxkLFxuICBDZGRTY2hlbWFGaWVsZFR5cGUsXG4gIENkZFNjaGVtYVJlZmVyZW5jZSxcbiAgQ2RkU2NoZW1hU3VtbWFyeSxcbiAgQ2RkU3BlY1N0YXR1cyxcbiAgQ2RkVHJlZU5vZGUsXG59IGZyb20gXCIuL2NkZC10eXBlc1wiO1xuXG4vKiogY29udHJhY3QvIOuUlOugie2EsOumrCDsoIjrjIAg6rK966GcIOuwmO2ZmCAoYXBpUm9vdFBhdGgg6riw7KSAKSAqL1xuZnVuY3Rpb24gZ2V0Q29udHJhY3REaXIoKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBhdGguam9pbihTb25hbXUuYXBpUm9vdFBhdGgsIFwiLi5cIiwgXCIuLlwiLCBcImNvbnRyYWN0XCIpO1xufVxuXG4vKiog6rK966Gc6rCAIGNvbnRyYWN0LyDrlJTroInthLDrpqwg64K067aA7J247KeAIOqygOymnSAqL1xuZnVuY3Rpb24gYXNzZXJ0SW5zaWRlQ29udHJhY3REaXIoZmlsZVBhdGg6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBjb250cmFjdERpciA9IGdldENvbnRyYWN0RGlyKCk7XG4gIGNvbnN0IHJlc29sdmVkID0gcGF0aC5yZXNvbHZlKGNvbnRyYWN0RGlyLCBmaWxlUGF0aCk7XG4gIGlmICghcmVzb2x2ZWQuc3RhcnRzV2l0aChjb250cmFjdERpciArIHBhdGguc2VwKSAmJiByZXNvbHZlZCAhPT0gY29udHJhY3REaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYOqyveuhnOqwgCBjb250cmFjdC8g65SU66CJ7YSw66asIOuwluydhCDssLjsobDtlanri4jri6Q6ICR7ZmlsZVBhdGh9YCk7XG4gIH1cbn1cblxuLyoqIO2MjOydvOuqheyXkOyEnCBDZGRGaWxlVHlwZSDtjJDrs4QgKi9cbmZ1bmN0aW9uIGRldGVjdEZpbGVUeXBlKGZpbGVOYW1lOiBzdHJpbmcpOiBDZGRGaWxlVHlwZSB8IHVuZGVmaW5lZCB7XG4gIGlmIChmaWxlTmFtZS5lbmRzV2l0aChcIi5jb250cmFjdC5qc29uXCIpKSByZXR1cm4gXCJjb250cmFjdFwiO1xuICBpZiAoZmlsZU5hbWUuZW5kc1dpdGgoXCIuc3BlYy5qc29uXCIpKSByZXR1cm4gXCJzcGVjXCI7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKiDrlJTroInthLDrpqzrpbwg7J6s6reAIO2DkOyDie2VmOyXrCBDZGRUcmVlTm9kZSDtirjrpqzrpbwg7IOd7ISxICovXG5mdW5jdGlvbiBzY2FuRGlyZWN0b3J5KGRpclBhdGg6IHN0cmluZywgcmVsYXRpdmVUbzogc3RyaW5nKTogQ2RkVHJlZU5vZGVbXSB7XG4gIGNvbnN0IGVudHJpZXMgPSBmcy5yZWFkZGlyU3luYyhkaXJQYXRoLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gIGNvbnN0IG5vZGVzOiBDZGRUcmVlTm9kZVtdID0gW107XG5cbiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4oZGlyUGF0aCwgZW50cnkubmFtZSk7XG4gICAgY29uc3QgcmVsUGF0aCA9IHBhdGgucmVsYXRpdmUocmVsYXRpdmVUbywgZnVsbFBhdGgpO1xuXG4gICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gc2NhbkRpcmVjdG9yeShmdWxsUGF0aCwgcmVsYXRpdmVUbyk7XG4gICAgICBub2Rlcy5wdXNoKHtcbiAgICAgICAgbmFtZTogZW50cnkubmFtZSxcbiAgICAgICAgcGF0aDogcmVsUGF0aCxcbiAgICAgICAgdHlwZTogXCJkaXJlY3RvcnlcIixcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGVudHJ5LmlzRmlsZSgpKSB7XG4gICAgICBjb25zdCBmaWxlVHlwZSA9IGRldGVjdEZpbGVUeXBlKGVudHJ5Lm5hbWUpO1xuICAgICAgaWYgKGZpbGVUeXBlKSB7XG4gICAgICAgIG5vZGVzLnB1c2goe1xuICAgICAgICAgIG5hbWU6IGVudHJ5Lm5hbWUsXG4gICAgICAgICAgcGF0aDogcmVsUGF0aCxcbiAgICAgICAgICB0eXBlOiBcImZpbGVcIixcbiAgICAgICAgICBmaWxlVHlwZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG4vKiogY29udHJhY3QvIOuUlOugie2EsOumrOydmCDtirjrpqwg6rWs7KGw66W8IOuwmO2ZmCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENkZFRyZWUoKTogeyBleGlzdHM6IGJvb2xlYW47IHRyZWU6IENkZFRyZWVOb2RlW10gfSB7XG4gIGNvbnN0IGNvbnRyYWN0RGlyID0gZ2V0Q29udHJhY3REaXIoKTtcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGNvbnRyYWN0RGlyKSkge1xuICAgIHJldHVybiB7IGV4aXN0czogZmFsc2UsIHRyZWU6IFtdIH07XG4gIH1cbiAgY29uc3QgdHJlZSA9IHNjYW5EaXJlY3RvcnkoY29udHJhY3REaXIsIGNvbnRyYWN0RGlyKTtcbiAgcmV0dXJuIHsgZXhpc3RzOiB0cnVlLCB0cmVlIH07XG59XG5cbi8qKiBzY2hlbWEgSUTroZwgc2NoZW1hIO2MjOydvOydhCDssL7slYQg67CY7ZmYICovXG5mdW5jdGlvbiByZXNvbHZlU2NoZW1hKHNjaGVtYUlkOiBzdHJpbmcpOiBDZGRTY2hlbWEgfCBudWxsIHtcbiAgY29uc3QgY29udHJhY3REaXIgPSBnZXRDb250cmFjdERpcigpO1xuICBjb25zdCBzY2hlbWFQYXRoID0gcGF0aC5qb2luKGNvbnRyYWN0RGlyLCBcInNjaGVtYXNcIiwgYCR7c2NoZW1hSWR9LnNjaGVtYS5qc29uYCk7XG4gIGlmICghZnMuZXhpc3RzU3luYyhzY2hlbWFQYXRoKSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHJhdyA9IGZzLnJlYWRGaWxlU3luYyhzY2hlbWFQYXRoLCBcInV0Zi04XCIpO1xuICByZXR1cm4gSlNPTi5wYXJzZShyYXcpIGFzIENkZFNjaGVtYTtcbn1cblxuLyoqIEpTT04g7YyM7J287J2YIOyghOyytCDrgrTsmqnsnYQg7J297Ja0IHNjaGVtYeyZgCDtlajqu5ggZW52ZWxvcGXroZwg67CY7ZmYICovXG5leHBvcnQgZnVuY3Rpb24gcmVhZENvbnRlbnQoZmlsZVBhdGg6IHN0cmluZyk6IENkZENvbnRlbnRFbnZlbG9wZSB7XG4gIGFzc2VydEluc2lkZUNvbnRyYWN0RGlyKGZpbGVQYXRoKTtcblxuICBjb25zdCBjb250cmFjdERpciA9IGdldENvbnRyYWN0RGlyKCk7XG4gIGNvbnN0IGFic1BhdGggPSBwYXRoLnJlc29sdmUoY29udHJhY3REaXIsIGZpbGVQYXRoKTtcblxuICBpZiAoIWZzLmV4aXN0c1N5bmMoYWJzUGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYO2MjOydvOydhCDssL7snYQg7IiYIOyXhuyKteuLiOuLpDogJHtmaWxlUGF0aH1gKTtcbiAgfVxuXG4gIGNvbnN0IHJhdyA9IGZzLnJlYWRGaWxlU3luYyhhYnNQYXRoLCBcInV0Zi04XCIpO1xuICBjb25zdCBkb2N1bWVudCA9IEpTT04ucGFyc2UocmF3KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgZmlsZVR5cGUgPSBkZXRlY3RGaWxlVHlwZShwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKSk7XG4gIGNvbnN0IHNjaGVtYUlkID0gdHlwZW9mIGRvY3VtZW50LnNjaGVtYSA9PT0gXCJzdHJpbmdcIiA/IGRvY3VtZW50LnNjaGVtYSA6IG51bGw7XG4gIGNvbnN0IHNjaGVtYSA9IHNjaGVtYUlkID8gcmVzb2x2ZVNjaGVtYShzY2hlbWFJZCkgOiBudWxsO1xuXG4gIHJldHVybiB7XG4gICAgZG9jdW1lbnQsXG4gICAgc2NoZW1hLFxuICAgIGZpbGVUeXBlOiBmaWxlVHlwZSA/PyBcImNvbnRyYWN0XCIsXG4gIH07XG59XG5cbi8qKiBKU09OIO2MjOydvOydhCDsmbjrtoAg7JeQ65SU7YSw66GcIOyngeygkSDtjrjsp5EgKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlZGl0Q29udGVudChcbiAgZmlsZVBhdGg6IHN0cmluZyxcbik6IFByb21pc2U8eyBzdWNjZXNzOiBib29sZWFuOyBmaWxlUGF0aDogc3RyaW5nIH0+IHtcbiAgYXNzZXJ0SW5zaWRlQ29udHJhY3REaXIoZmlsZVBhdGgpO1xuXG4gIGNvbnN0IGNvbnRyYWN0RGlyID0gZ2V0Q29udHJhY3REaXIoKTtcbiAgY29uc3QgYWJzUGF0aCA9IHBhdGgucmVzb2x2ZShjb250cmFjdERpciwgZmlsZVBhdGgpO1xuXG4gIGlmICghZnMuZXhpc3RzU3luYyhhYnNQYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihg7YyM7J287J2EIOywvuydhCDsiJgg7JeG7Iq164uI64ukOiAke2ZpbGVQYXRofWApO1xuICB9XG5cbiAgY29uc3QgZWRpdG9yID0gcmVzb2x2ZUVkaXRvckNsaSgpO1xuICBhd2FpdCBydW5FZGl0b3IoZWRpdG9yLCBhYnNQYXRoKTtcblxuICByZXR1cm4geyBzdWNjZXNzOiB0cnVlLCBmaWxlUGF0aCB9O1xufVxuXG4vKiog7JeQ65SU7YSw67OEIOyVsSDrsojrk6Qg64K0IENMSSDqsr3roZwgKyAtLXdhaXQg7ZSM656Y6re4IOunpO2VkSAqL1xuY29uc3QgRURJVE9SX0NMSV9NQVA6IFJlY29yZDxzdHJpbmcsIHsgY2xpOiBzdHJpbmc7IHdhaXRGbGFnOiBzdHJpbmcgfT4gPSB7XG4gIFwiVmlzdWFsIFN0dWRpbyBDb2RlXCI6IHsgY2xpOiBcIkNvbnRlbnRzL1Jlc291cmNlcy9hcHAvYmluL2NvZGVcIiwgd2FpdEZsYWc6IFwiLS13YWl0XCIgfSxcbiAgWmVkOiB7IGNsaTogXCJDb250ZW50cy9NYWNPUy9jbGlcIiwgd2FpdEZsYWc6IFwiLS13YWl0XCIgfSxcbiAgQ3Vyc29yOiB7IGNsaTogXCJDb250ZW50cy9SZXNvdXJjZXMvYXBwL2Jpbi9jdXJzb3JcIiwgd2FpdEZsYWc6IFwiLS13YWl0XCIgfSxcbn07XG5cbi8qKiDslbEg67KI65OkIENMSSDqsr3roZzrpbwgcmVzb2x2ZS4gd2FpdD1mYWxzZeydtOuptCAtLXdhaXQg7ZSM656Y6re466W8IOyDneuetSAqL1xuZnVuY3Rpb24gcmVzb2x2ZUVkaXRvckNsaShvcHRpb25zPzogeyB3YWl0PzogYm9vbGVhbiB9KTogeyBiaW46IHN0cmluZzsgYXJnczogc3RyaW5nW10gfSB7XG4gIGNvbnN0IHdhaXQgPSBvcHRpb25zPy53YWl0ID8/IHRydWU7XG4gIGNvbnN0IGFwcE5hbWUgPSBTb25hbXUuY29uZmlnLmV4dGVybmFsRWRpdG9yID8/IFwiVmlzdWFsIFN0dWRpbyBDb2RlXCI7XG4gIGNvbnN0IG1hcHBpbmcgPSBFRElUT1JfQ0xJX01BUFthcHBOYW1lXTtcbiAgaWYgKCFtYXBwaW5nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYOyngOybkOuQmOyngCDslYrripQg7JeQ65SU7YSw7J6F64uI64ukOiAke2FwcE5hbWV9ICjsp4Dsm5A6ICR7T2JqZWN0LmtleXMoRURJVE9SX0NMSV9NQVApLmpvaW4oXCIsIFwiKX0pYCxcbiAgICApO1xuICB9XG5cbiAgY29uc3Qgc2VhcmNoUGF0aHMgPSBbXG4gICAgYC9BcHBsaWNhdGlvbnMvJHthcHBOYW1lfS5hcHBgLFxuICAgIGAke29zLmhvbWVkaXIoKX0vQXBwbGljYXRpb25zLyR7YXBwTmFtZX0uYXBwYCxcbiAgXTtcbiAgY29uc3QgYnVuZGxlUGF0aCA9IHNlYXJjaFBhdGhzLmZpbmQoKHApID0+IGZzLmV4aXN0c1N5bmMocCkpO1xuICBpZiAoIWJ1bmRsZVBhdGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYOyVsSDrsojrk6TsnYQg7LC+7J2EIOyImCDsl4bsirXri4jri6Q6ICR7YXBwTmFtZX0gKC9BcHBsaWNhdGlvbnMg7ZmV7J24KWApO1xuICB9XG5cbiAgY29uc3QgY2xpQmluID0gcGF0aC5qb2luKGJ1bmRsZVBhdGgsIG1hcHBpbmcuY2xpKTtcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGNsaUJpbikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYOyXkOuUlO2EsCBDTEnrpbwg7LC+7J2EIOyImCDsl4bsirXri4jri6Q6ICR7Y2xpQmlufWApO1xuICB9XG5cbiAgcmV0dXJuIHsgYmluOiBjbGlCaW4sIGFyZ3M6IHdhaXQgPyBbbWFwcGluZy53YWl0RmxhZ10gOiBbXSB9O1xufVxuXG4vKiog7JeQ65SU7YSwIENMSeulvCDsi6TtlontlZjqs6Ag7YOt7J20IOuLq+2ekCDrlYzquYzsp4Ag64yA6riwICovXG5mdW5jdGlvbiBydW5FZGl0b3IoZWRpdG9yOiB7IGJpbjogc3RyaW5nOyBhcmdzOiBzdHJpbmdbXSB9LCBmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgY2hpbGQgPSBzcGF3bihlZGl0b3IuYmluLCBbLi4uZWRpdG9yLmFyZ3MsIGZpbGVQYXRoXSwge1xuICAgICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgIH0pO1xuXG4gICAgY2hpbGQub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICByZWplY3QobmV3IEVycm9yKGDsl5DrlJTthLAg7Iuk7ZaJIOyLpO2MqCAoJHtlZGl0b3IuYmlufSk6ICR7ZXJyLm1lc3NhZ2V9YCkpO1xuICAgIH0pO1xuXG4gICAgY2hpbGQub24oXCJjbG9zZVwiLCAoY29kZSkgPT4ge1xuICAgICAgaWYgKGNvZGUgPT09IDApIHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihg7JeQ65SU7YSw6rCAIOu5hOygleyDgSDsooXro4zrkJjsl4jsirXri4jri6QgKGV4aXQgY29kZTogJHtjb2RlfSlgKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFNjaGVtYSDqtIDrpqwgQVBJXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqIGNvbnRyYWN0L3NjaGVtYXMvIOuUlOugie2EsOumrCDrgrQgLnNjaGVtYS5qc29uIO2MjOydvCDqsr3roZwg66qp66GdIOuwmO2ZmCAqL1xuZnVuY3Rpb24gc2NhblNjaGVtYUZpbGVzKCk6IHsgYWJzUGF0aDogc3RyaW5nOyByZWxQYXRoOiBzdHJpbmc7IGZpbGVOYW1lOiBzdHJpbmcgfVtdIHtcbiAgY29uc3Qgc2NoZW1hc0RpciA9IHBhdGguam9pbihnZXRDb250cmFjdERpcigpLCBcInNjaGVtYXNcIik7XG4gIGlmICghZnMuZXhpc3RzU3luYyhzY2hlbWFzRGlyKSkgcmV0dXJuIFtdO1xuXG4gIHJldHVybiBmc1xuICAgIC5yZWFkZGlyU3luYyhzY2hlbWFzRGlyLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSlcbiAgICAuZmlsdGVyKChlKSA9PiBlLmlzRmlsZSgpICYmIGUubmFtZS5lbmRzV2l0aChcIi5zY2hlbWEuanNvblwiKSlcbiAgICAubWFwKChlKSA9PiAoe1xuICAgICAgYWJzUGF0aDogcGF0aC5qb2luKHNjaGVtYXNEaXIsIGUubmFtZSksXG4gICAgICByZWxQYXRoOiBgc2NoZW1hcy8ke2UubmFtZX1gLFxuICAgICAgZmlsZU5hbWU6IGUubmFtZSxcbiAgICB9KSk7XG59XG5cbi8qKiDtirnsoJUgc2NoZW1hSWTrpbwg7LC47KGw7ZWY64qUIGNvbnRyYWN0L3NwZWMg66y47ISc65Ok7J2EIOyerOq3gCDsiJjsp5EgKi9cbmZ1bmN0aW9uIGNvbGxlY3RTY2hlbWFSZWZlcmVuY2VzKFxuICBzY2hlbWFJZDogc3RyaW5nLFxuICBkaXJQYXRoOiBzdHJpbmcsXG4gIHJlbGF0aXZlVG86IHN0cmluZyxcbik6IENkZFNjaGVtYVJlZmVyZW5jZVtdIHtcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGRpclBhdGgpKSByZXR1cm4gW107XG4gIGNvbnN0IHJlZnM6IENkZFNjaGVtYVJlZmVyZW5jZVtdID0gW107XG4gIGNvbnN0IGVudHJpZXMgPSBmcy5yZWFkZGlyU3luYyhkaXJQYXRoLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG5cbiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4oZGlyUGF0aCwgZW50cnkubmFtZSk7XG4gICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIGlmIChlbnRyeS5uYW1lID09PSBcInNjaGVtYXNcIikgY29udGludWU7XG4gICAgICByZWZzLnB1c2goLi4uY29sbGVjdFNjaGVtYVJlZmVyZW5jZXMoc2NoZW1hSWQsIGZ1bGxQYXRoLCByZWxhdGl2ZVRvKSk7XG4gICAgfSBlbHNlIGlmIChlbnRyeS5pc0ZpbGUoKSkge1xuICAgICAgY29uc3QgZmlsZVR5cGUgPSBkZXRlY3RGaWxlVHlwZShlbnRyeS5uYW1lKTtcbiAgICAgIGlmICghZmlsZVR5cGUpIGNvbnRpbnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmF3ID0gZnMucmVhZEZpbGVTeW5jKGZ1bGxQYXRoLCBcInV0Zi04XCIpO1xuICAgICAgICBjb25zdCBkb2MgPSBKU09OLnBhcnNlKHJhdykgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIGlmIChkb2Muc2NoZW1hID09PSBzY2hlbWFJZCkge1xuICAgICAgICAgIHJlZnMucHVzaCh7XG4gICAgICAgICAgICBwYXRoOiBwYXRoLnJlbGF0aXZlKHJlbGF0aXZlVG8sIGZ1bGxQYXRoKSxcbiAgICAgICAgICAgIGZpbGVUeXBlLFxuICAgICAgICAgICAgbmFtZTogZW50cnkubmFtZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIEpTT04g7YyM7IuxIOyLpO2MqCDsi5wg66y07IucXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZWZzO1xufVxuXG4vKiogc2NoZW1hIO2MjOydvOuqheyXkOyEnCDquLDrjIDrkJjripQgaWQg7LaU7LacICovXG5mdW5jdGlvbiBleHBlY3RlZFNjaGVtYUlkKGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gZmlsZU5hbWUucmVwbGFjZSgvXFwuc2NoZW1hXFwuanNvbiQvLCBcIlwiKTtcbn1cblxuLyoqIHNjaGVtYXMvIO2VmOychCDqsr3roZzqsIAgY29udHJhY3Qvc2NoZW1hcy8g64K067aA7J247KeAIOqygOymnSAqL1xuZnVuY3Rpb24gYXNzZXJ0SW5zaWRlU2NoZW1hRGlyKHNjaGVtYUtleTogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IHNjaGVtYXNEaXIgPSBwYXRoLmpvaW4oZ2V0Q29udHJhY3REaXIoKSwgXCJzY2hlbWFzXCIpO1xuICBjb25zdCByZXNvbHZlZCA9IHBhdGgucmVzb2x2ZShzY2hlbWFzRGlyLCBgJHtzY2hlbWFLZXl9LnNjaGVtYS5qc29uYCk7XG4gIGlmICghcmVzb2x2ZWQuc3RhcnRzV2l0aChzY2hlbWFzRGlyICsgcGF0aC5zZXApICYmIHJlc29sdmVkICE9PSBzY2hlbWFzRGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGDsnKDtmqjtlZjsp4Ag7JWK7J2AIOyKpO2CpOuniCDtgqTsnoXri4jri6Q6ICR7c2NoZW1hS2V5fWApO1xuICB9XG59XG5cbi8qKiBzY2hlbWEg66qp66GdIOuwmO2ZmCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpc3RTY2hlbWFzKCk6IHsgc2NoZW1hczogQ2RkU2NoZW1hU3VtbWFyeVtdIH0ge1xuICBjb25zdCBjb250cmFjdERpciA9IGdldENvbnRyYWN0RGlyKCk7XG4gIGNvbnN0IGZpbGVzID0gc2NhblNjaGVtYUZpbGVzKCk7XG4gIGNvbnN0IHNjaGVtYXM6IENkZFNjaGVtYVN1bW1hcnlbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgIGNvbnN0IGtleSA9IGV4cGVjdGVkU2NoZW1hSWQoZmlsZS5maWxlTmFtZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJhdyA9IGZzLnJlYWRGaWxlU3luYyhmaWxlLmFic1BhdGgsIFwidXRmLThcIik7XG4gICAgICBjb25zdCBzY2hlbWEgPSBKU09OLnBhcnNlKHJhdykgYXMgQ2RkU2NoZW1hO1xuICAgICAgY29uc3QgcmVmcyA9IGNvbGxlY3RTY2hlbWFSZWZlcmVuY2VzKHNjaGVtYS5pZCwgY29udHJhY3REaXIsIGNvbnRyYWN0RGlyKTtcbiAgICAgIHNjaGVtYXMucHVzaCh7XG4gICAgICAgIGtleSxcbiAgICAgICAgaWQ6IHNjaGVtYS5pZCxcbiAgICAgICAgcGF0aDogZmlsZS5yZWxQYXRoLFxuICAgICAgICB0eXBlOiBzY2hlbWEudHlwZSxcbiAgICAgICAgZmllbGRDb3VudDogc2NoZW1hLmZpZWxkcy5sZW5ndGgsXG4gICAgICAgIHJlZmVyZW5jZUNvdW50OiByZWZzLmxlbmd0aCxcbiAgICAgICAgaGFzSWRNaXNtYXRjaDogc2NoZW1hLmlkICE9PSBrZXksXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHNjaGVtYXMucHVzaCh7XG4gICAgICAgIGtleSxcbiAgICAgICAgaWQ6IGtleSxcbiAgICAgICAgcGF0aDogZmlsZS5yZWxQYXRoLFxuICAgICAgICB0eXBlOiBcImNvbnRyYWN0XCIsXG4gICAgICAgIGZpZWxkQ291bnQ6IDAsXG4gICAgICAgIHJlZmVyZW5jZUNvdW50OiAwLFxuICAgICAgICBoYXNJZE1pc21hdGNoOiBmYWxzZSxcbiAgICAgICAgcGFyc2VFcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgc2NoZW1hcyB9O1xufVxuXG4vKiogc2NoZW1hIOyDgeyEuCDrsJjtmZggKO2MjOydvOuqhSDquLDrsJgga2V566GcIOyhsO2ajCkgKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFkU2NoZW1hKHNjaGVtYUtleTogc3RyaW5nKTogQ2RkU2NoZW1hRGV0YWlsRW52ZWxvcGUge1xuICBhc3NlcnRJbnNpZGVTY2hlbWFEaXIoc2NoZW1hS2V5KTtcblxuICBjb25zdCBjb250cmFjdERpciA9IGdldENvbnRyYWN0RGlyKCk7XG4gIGNvbnN0IGFic1BhdGggPSBwYXRoLmpvaW4oY29udHJhY3REaXIsIFwic2NoZW1hc1wiLCBgJHtzY2hlbWFLZXl9LnNjaGVtYS5qc29uYCk7XG5cbiAgaWYgKCFmcy5leGlzdHNTeW5jKGFic1BhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGDsiqTtgqTrp4jrpbwg7LC+7J2EIOyImCDsl4bsirXri4jri6Q6ICR7c2NoZW1hS2V5fWApO1xuICB9XG5cbiAgY29uc3QgcmF3ID0gZnMucmVhZEZpbGVTeW5jKGFic1BhdGgsIFwidXRmLThcIik7XG4gIGNvbnN0IHNjaGVtYSA9IEpTT04ucGFyc2UocmF3KSBhcyBDZGRTY2hlbWE7XG4gIGNvbnN0IHJlbFBhdGggPSBwYXRoLnJlbGF0aXZlKGNvbnRyYWN0RGlyLCBhYnNQYXRoKTtcbiAgY29uc3QgcmVmZXJlbmNlcyA9IGNvbGxlY3RTY2hlbWFSZWZlcmVuY2VzKHNjaGVtYS5pZCwgY29udHJhY3REaXIsIGNvbnRyYWN0RGlyKTtcblxuICByZXR1cm4ge1xuICAgIGtleTogc2NoZW1hS2V5LFxuICAgIHBhdGg6IHJlbFBhdGgsXG4gICAgc2NoZW1hLFxuICAgIHJlZmVyZW5jZXMsXG4gICAgaGFzSWRNaXNtYXRjaDogc2NoZW1hLmlkICE9PSBzY2hlbWFLZXksXG4gIH07XG59XG5cbi8qKiBzY2hlbWEg7YyM7J287J2EIOyZuOu2gCDsl5DrlJTthLDroZwg7Y647KeRICjtjIzsnbzrqoUg6riw67CYIGtleeuhnCDsobDtmowpICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZWRpdFNjaGVtYShcbiAgc2NoZW1hS2V5OiBzdHJpbmcsXG4pOiBQcm9taXNlPHsgc3VjY2VzczogYm9vbGVhbjsgc2NoZW1hS2V5OiBzdHJpbmcgfT4ge1xuICBhc3NlcnRJbnNpZGVTY2hlbWFEaXIoc2NoZW1hS2V5KTtcblxuICBjb25zdCBjb250cmFjdERpciA9IGdldENvbnRyYWN0RGlyKCk7XG4gIGNvbnN0IGFic1BhdGggPSBwYXRoLmpvaW4oY29udHJhY3REaXIsIFwic2NoZW1hc1wiLCBgJHtzY2hlbWFLZXl9LnNjaGVtYS5qc29uYCk7XG5cbiAgaWYgKCFmcy5leGlzdHNTeW5jKGFic1BhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGDsiqTtgqTrp4jrpbwg7LC+7J2EIOyImCDsl4bsirXri4jri6Q6ICR7c2NoZW1hS2V5fWApO1xuICB9XG5cbiAgY29uc3QgZWRpdG9yID0gcmVzb2x2ZUVkaXRvckNsaSgpO1xuICBhd2FpdCBydW5FZGl0b3IoZWRpdG9yLCBhYnNQYXRoKTtcblxuICByZXR1cm4geyBzdWNjZXNzOiB0cnVlLCBzY2hlbWFLZXkgfTtcbn1cblxuY29uc3QgVkFMSURfU1BFQ19TVEFUVVNFUyA9IG5ldyBTZXQ8Q2RkU3BlY1N0YXR1cz4oW1xuICBcImRyYWZ0XCIsXG4gIFwic3BlY2lmeWluZ1wiLFxuICBcImltcGxlbWVudGluZ1wiLFxuICBcInZhbGlkYXRpbmdcIixcbiAgXCJkb25lXCIsXG5dKTtcblxuLyoqIOuqqOuToCBjb250cmFjdC9zcGVjIOusuOyEnOulvCDsiqTsupTtlZjsl6wg64yA7Iuc67O065OcIO2GteqzhOulvCDrsJjtmZggKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXNoYm9hcmQoKTogQ2RkRGFzaGJvYXJkRGF0YSB7XG4gIGNvbnN0IGNvbnRyYWN0RGlyID0gZ2V0Q29udHJhY3REaXIoKTtcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGNvbnRyYWN0RGlyKSkge1xuICAgIHJldHVybiB7XG4gICAgICBleGlzdHM6IGZhbHNlLFxuICAgICAgc3RhdHM6IHtcbiAgICAgICAgdG90YWxDb250cmFjdHM6IDAsXG4gICAgICAgIHRvdGFsU3BlY3M6IDAsXG4gICAgICAgIHN0YXR1c0Rpc3RyaWJ1dGlvbjogeyBkcmFmdDogMCwgc3BlY2lmeWluZzogMCwgaW1wbGVtZW50aW5nOiAwLCB2YWxpZGF0aW5nOiAwLCBkb25lOiAwIH0sXG4gICAgICB9LFxuICAgICAgZG9jdW1lbnRzOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgZG9jdW1lbnRzOiBDZGREb2N1bWVudFN1bW1hcnlbXSA9IFtdO1xuICBjb25zdCBzdGF0dXNEaXN0cmlidXRpb246IFJlY29yZDxDZGRTcGVjU3RhdHVzLCBudW1iZXI+ID0ge1xuICAgIGRyYWZ0OiAwLFxuICAgIHNwZWNpZnlpbmc6IDAsXG4gICAgaW1wbGVtZW50aW5nOiAwLFxuICAgIHZhbGlkYXRpbmc6IDAsXG4gICAgZG9uZTogMCxcbiAgfTtcblxuICBmdW5jdGlvbiBzY2FuRm9yRGFzaGJvYXJkKGRpclBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGVudHJpZXMgPSBmcy5yZWFkZGlyU3luYyhkaXJQYXRoLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihkaXJQYXRoLCBlbnRyeS5uYW1lKTtcbiAgICAgIGlmIChlbnRyeS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIGlmIChlbnRyeS5uYW1lID09PSBcInNjaGVtYXNcIikgY29udGludWU7XG4gICAgICAgIHNjYW5Gb3JEYXNoYm9hcmQoZnVsbFBhdGgpO1xuICAgICAgfSBlbHNlIGlmIChlbnRyeS5pc0ZpbGUoKSkge1xuICAgICAgICBjb25zdCBmaWxlVHlwZSA9IGRldGVjdEZpbGVUeXBlKGVudHJ5Lm5hbWUpO1xuICAgICAgICBpZiAoIWZpbGVUeXBlKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgcmVsUGF0aCA9IHBhdGgucmVsYXRpdmUoY29udHJhY3REaXIsIGZ1bGxQYXRoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByYXcgPSBmcy5yZWFkRmlsZVN5bmMoZnVsbFBhdGgsIFwidXRmLThcIik7XG4gICAgICAgICAgY29uc3QgZG9jID0gSlNPTi5wYXJzZShyYXcpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gICAgICAgICAgY29uc3Qgc3VtbWFyeTogQ2RkRG9jdW1lbnRTdW1tYXJ5ID0ge1xuICAgICAgICAgICAgcGF0aDogcmVsUGF0aCxcbiAgICAgICAgICAgIG5hbWU6IGVudHJ5Lm5hbWUsXG4gICAgICAgICAgICBmaWxlVHlwZSxcbiAgICAgICAgICAgIHNjaGVtYUlkOiB0eXBlb2YgZG9jLnNjaGVtYSA9PT0gXCJzdHJpbmdcIiA/IGRvYy5zY2hlbWEgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHR5cGVvZiBkb2MubGFzdE1vZGlmaWVkID09PSBcInN0cmluZ1wiID8gZG9jLmxhc3RNb2RpZmllZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKGZpbGVUeXBlID09PSBcImNvbnRyYWN0XCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVzID0gZG9jLmZlYXR1cmVzO1xuICAgICAgICAgICAgaWYgKGZlYXR1cmVzICYmIHR5cGVvZiBmZWF0dXJlcyA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShmZWF0dXJlcykpIHtcbiAgICAgICAgICAgICAgc3VtbWFyeS5mZWF0dXJlQ291bnQgPSBPYmplY3Qua2V5cyhmZWF0dXJlcykubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0dXMgPSB0eXBlb2YgZG9jLnN0YXR1cyA9PT0gXCJzdHJpbmdcIiA/IGRvYy5zdGF0dXMgOiBcImRyYWZ0XCI7XG4gICAgICAgICAgICBzdW1tYXJ5LnN0YXR1cyA9IFZBTElEX1NQRUNfU1RBVFVTRVMuaGFzKHN0YXR1cyBhcyBDZGRTcGVjU3RhdHVzKVxuICAgICAgICAgICAgICA/IChzdGF0dXMgYXMgQ2RkU3BlY1N0YXR1cylcbiAgICAgICAgICAgICAgOiBcImRyYWZ0XCI7XG4gICAgICAgICAgICBzdGF0dXNEaXN0cmlidXRpb25bc3VtbWFyeS5zdGF0dXNdKys7XG5cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRvYy5hY2NlcHRhbmNlQ3JpdGVyaWEpKSB7XG4gICAgICAgICAgICAgIHN1bW1hcnkuYWNjZXB0YW5jZUNyaXRlcmlhQ291bnQgPSBkb2MuYWNjZXB0YW5jZUNyaXRlcmlhLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRvYy5zb3VyY2VzKSkge1xuICAgICAgICAgICAgICBzdW1tYXJ5LnNvdXJjZUNvdW50ID0gZG9jLnNvdXJjZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvY3VtZW50cy5wdXNoKHN1bW1hcnkpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBkb2N1bWVudHMucHVzaCh7XG4gICAgICAgICAgICBwYXRoOiByZWxQYXRoLFxuICAgICAgICAgICAgbmFtZTogZW50cnkubmFtZSxcbiAgICAgICAgICAgIGZpbGVUeXBlLFxuICAgICAgICAgICAgcGFyc2VFcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2NhbkZvckRhc2hib2FyZChjb250cmFjdERpcik7XG5cbiAgY29uc3QgdG90YWxDb250cmFjdHMgPSBkb2N1bWVudHMuZmlsdGVyKChkKSA9PiBkLmZpbGVUeXBlID09PSBcImNvbnRyYWN0XCIgJiYgIWQucGFyc2VFcnJvcikubGVuZ3RoO1xuICBjb25zdCB0b3RhbFNwZWNzID0gZG9jdW1lbnRzLmZpbHRlcigoZCkgPT4gZC5maWxlVHlwZSA9PT0gXCJzcGVjXCIgJiYgIWQucGFyc2VFcnJvcikubGVuZ3RoO1xuXG4gIHJldHVybiB7XG4gICAgZXhpc3RzOiB0cnVlLFxuICAgIHN0YXRzOiB7IHRvdGFsQ29udHJhY3RzLCB0b3RhbFNwZWNzLCBzdGF0dXNEaXN0cmlidXRpb24gfSxcbiAgICBkb2N1bWVudHMsXG4gIH07XG59XG5cbi8qKiDshozsiqQg7YyM7J287J2EIOyZuOu2gCDsl5DrlJTthLDroZwg7Je06riwICjrjIDquLDtlZjsp4Ag7JWK7J2MKSAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9wZW5Tb3VyY2VGaWxlKGZpbGVQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgYWJzUGF0aCA9IHBhdGguaXNBYnNvbHV0ZShmaWxlUGF0aCkgPyBmaWxlUGF0aCA6IHBhdGgucmVzb2x2ZShTb25hbXUuYXBpUm9vdFBhdGgsIGZpbGVQYXRoKTtcblxuICBpZiAoIWZzLmV4aXN0c1N5bmMoYWJzUGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYO2MjOydvOydhCDssL7snYQg7IiYIOyXhuyKteuLiOuLpDogJHtmaWxlUGF0aH1gKTtcbiAgfVxuXG4gIGNvbnN0IGVkaXRvciA9IHJlc29sdmVFZGl0b3JDbGkoeyB3YWl0OiBmYWxzZSB9KTtcbiAgY29uc3QgY2hpbGQgPSBzcGF3bihlZGl0b3IuYmluLCBbLi4uZWRpdG9yLmFyZ3MsIGFic1BhdGhdLCB7XG4gICAgc3RkaW86IFwiaWdub3JlXCIsXG4gICAgZGV0YWNoZWQ6IHRydWUsXG4gIH0pO1xuICBjaGlsZC51bnJlZigpO1xufVxuIl0sIm5hbWVzIjpbInNwYXduIiwiZnMiLCJvcyIsInBhdGgiLCJTb25hbXUiLCJnZXRDb250cmFjdERpciIsImpvaW4iLCJhcGlSb290UGF0aCIsImFzc2VydEluc2lkZUNvbnRyYWN0RGlyIiwiZmlsZVBhdGgiLCJjb250cmFjdERpciIsInJlc29sdmVkIiwicmVzb2x2ZSIsInN0YXJ0c1dpdGgiLCJzZXAiLCJFcnJvciIsImRldGVjdEZpbGVUeXBlIiwiZmlsZU5hbWUiLCJlbmRzV2l0aCIsInVuZGVmaW5lZCIsInNjYW5EaXJlY3RvcnkiLCJkaXJQYXRoIiwicmVsYXRpdmVUbyIsImVudHJpZXMiLCJyZWFkZGlyU3luYyIsIndpdGhGaWxlVHlwZXMiLCJub2RlcyIsImVudHJ5IiwiZnVsbFBhdGgiLCJuYW1lIiwicmVsUGF0aCIsInJlbGF0aXZlIiwiaXNEaXJlY3RvcnkiLCJjaGlsZHJlbiIsInB1c2giLCJ0eXBlIiwiaXNGaWxlIiwiZmlsZVR5cGUiLCJnZXRDZGRUcmVlIiwiZXhpc3RzU3luYyIsImV4aXN0cyIsInRyZWUiLCJyZXNvbHZlU2NoZW1hIiwic2NoZW1hSWQiLCJzY2hlbWFQYXRoIiwicmF3IiwicmVhZEZpbGVTeW5jIiwiSlNPTiIsInBhcnNlIiwicmVhZENvbnRlbnQiLCJhYnNQYXRoIiwiZG9jdW1lbnQiLCJiYXNlbmFtZSIsInNjaGVtYSIsImVkaXRDb250ZW50IiwiZWRpdG9yIiwicmVzb2x2ZUVkaXRvckNsaSIsInJ1bkVkaXRvciIsInN1Y2Nlc3MiLCJFRElUT1JfQ0xJX01BUCIsImNsaSIsIndhaXRGbGFnIiwiWmVkIiwiQ3Vyc29yIiwib3B0aW9ucyIsIndhaXQiLCJhcHBOYW1lIiwiY29uZmlnIiwiZXh0ZXJuYWxFZGl0b3IiLCJtYXBwaW5nIiwiT2JqZWN0Iiwia2V5cyIsInNlYXJjaFBhdGhzIiwiaG9tZWRpciIsImJ1bmRsZVBhdGgiLCJmaW5kIiwicCIsImNsaUJpbiIsImJpbiIsImFyZ3MiLCJQcm9taXNlIiwicmVqZWN0IiwiY2hpbGQiLCJzdGRpbyIsIm9uIiwiZXJyIiwibWVzc2FnZSIsImNvZGUiLCJzY2FuU2NoZW1hRmlsZXMiLCJzY2hlbWFzRGlyIiwiZmlsdGVyIiwiZSIsIm1hcCIsImNvbGxlY3RTY2hlbWFSZWZlcmVuY2VzIiwicmVmcyIsImRvYyIsImV4cGVjdGVkU2NoZW1hSWQiLCJyZXBsYWNlIiwiYXNzZXJ0SW5zaWRlU2NoZW1hRGlyIiwic2NoZW1hS2V5IiwibGlzdFNjaGVtYXMiLCJmaWxlcyIsInNjaGVtYXMiLCJmaWxlIiwia2V5IiwiaWQiLCJmaWVsZENvdW50IiwiZmllbGRzIiwibGVuZ3RoIiwicmVmZXJlbmNlQ291bnQiLCJoYXNJZE1pc21hdGNoIiwicGFyc2VFcnJvciIsIlN0cmluZyIsInJlYWRTY2hlbWEiLCJyZWZlcmVuY2VzIiwiZWRpdFNjaGVtYSIsIlZBTElEX1NQRUNfU1RBVFVTRVMiLCJTZXQiLCJnZXREYXNoYm9hcmQiLCJzdGF0cyIsInRvdGFsQ29udHJhY3RzIiwidG90YWxTcGVjcyIsInN0YXR1c0Rpc3RyaWJ1dGlvbiIsImRyYWZ0Iiwic3BlY2lmeWluZyIsImltcGxlbWVudGluZyIsInZhbGlkYXRpbmciLCJkb25lIiwiZG9jdW1lbnRzIiwic2NhbkZvckRhc2hib2FyZCIsInN1bW1hcnkiLCJsYXN0TW9kaWZpZWQiLCJmZWF0dXJlcyIsIkFycmF5IiwiaXNBcnJheSIsImZlYXR1cmVDb3VudCIsInN0YXR1cyIsImhhcyIsImFjY2VwdGFuY2VDcml0ZXJpYSIsImFjY2VwdGFuY2VDcml0ZXJpYUNvdW50Iiwic291cmNlcyIsInNvdXJjZUNvdW50IiwiZCIsIm9wZW5Tb3VyY2VGaWxlIiwiaXNBYnNvbHV0ZSIsImRldGFjaGVkIiwidW5yZWYiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLEtBQUssUUFBUSxnQkFBZ0I7QUFDdEMsT0FBT0MsUUFBUSxLQUFLO0FBQ3BCLE9BQU9DLFFBQVEsS0FBSztBQUNwQixPQUFPQyxVQUFVLE9BQU87QUFDeEIsU0FBU0MsTUFBTSxRQUFRLG1CQUFnQjtBQTZCdkMsNkNBQTZDLEdBQzdDLFNBQVNDO0lBQ1AsT0FBT0YsS0FBS0csSUFBSSxDQUFDRixPQUFPRyxXQUFXLEVBQUUsTUFBTSxNQUFNO0FBQ25EO0FBRUEsK0JBQStCLEdBQy9CLFNBQVNDLHdCQUF3QkMsUUFBZ0I7SUFDL0MsTUFBTUMsY0FBY0w7SUFDcEIsTUFBTU0sV0FBV1IsS0FBS1MsT0FBTyxDQUFDRixhQUFhRDtJQUMzQyxJQUFJLENBQUNFLFNBQVNFLFVBQVUsQ0FBQ0gsY0FBY1AsS0FBS1csR0FBRyxLQUFLSCxhQUFhRCxhQUFhO1FBQzVFLE1BQU0sSUFBSUssTUFBTSxDQUFDLDZCQUE2QixFQUFFTixVQUFVO0lBQzVEO0FBQ0Y7QUFFQSx5QkFBeUIsR0FDekIsU0FBU08sZUFBZUMsUUFBZ0I7SUFDdEMsSUFBSUEsU0FBU0MsUUFBUSxDQUFDLG1CQUFtQixPQUFPO0lBQ2hELElBQUlELFNBQVNDLFFBQVEsQ0FBQyxlQUFlLE9BQU87SUFDNUMsT0FBT0M7QUFDVDtBQUVBLHFDQUFxQyxHQUNyQyxTQUFTQyxjQUFjQyxPQUFlLEVBQUVDLFVBQWtCO0lBQ3hELE1BQU1DLFVBQVV0QixHQUFHdUIsV0FBVyxDQUFDSCxTQUFTO1FBQUVJLGVBQWU7SUFBSztJQUM5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
|
package/dist/ui/cdd-types.d.ts
CHANGED
|
@@ -46,6 +46,31 @@ export type CddSchemaDetailEnvelope = {
|
|
|
46
46
|
references: CddSchemaReference[];
|
|
47
47
|
hasIdMismatch: boolean;
|
|
48
48
|
};
|
|
49
|
+
/** Spec 문서 상태 */
|
|
50
|
+
export type CddSpecStatus = "draft" | "specifying" | "implementing" | "validating" | "done";
|
|
51
|
+
/** 대시보드 문서 요약 */
|
|
52
|
+
export type CddDocumentSummary = {
|
|
53
|
+
path: string;
|
|
54
|
+
name: string;
|
|
55
|
+
fileType: CddFileType;
|
|
56
|
+
status?: CddSpecStatus;
|
|
57
|
+
schemaId?: string;
|
|
58
|
+
featureCount?: number;
|
|
59
|
+
acceptanceCriteriaCount?: number;
|
|
60
|
+
sourceCount?: number;
|
|
61
|
+
lastModified?: string;
|
|
62
|
+
parseError?: string;
|
|
63
|
+
};
|
|
64
|
+
/** 대시보드 통계 */
|
|
65
|
+
export type CddDashboardData = {
|
|
66
|
+
exists: boolean;
|
|
67
|
+
stats: {
|
|
68
|
+
totalContracts: number;
|
|
69
|
+
totalSpecs: number;
|
|
70
|
+
statusDistribution: Record<CddSpecStatus, number>;
|
|
71
|
+
};
|
|
72
|
+
documents: CddDocumentSummary[];
|
|
73
|
+
};
|
|
49
74
|
/** Acceptance Criterion 테스트 참조 */
|
|
50
75
|
export type AcceptanceCriterionTestRef = {
|
|
51
76
|
target: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdd-types.d.ts","sourceRoot":"","sources":["../../src/ui/cdd-types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC;AAE9C,MAAM,MAAM,kBAAkB,GAC1B,QAAQ,GACR,UAAU,GACV,wBAAwB,GACxB,wBAAwB,CAAC;AAE7B,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC;IAC1B,MAAM,EAAE,cAAc,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,WAAW,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,WAAW,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,CAAC;IAClB,UAAU,EAAE,kBAAkB,EAAE,CAAC;IACjC,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,kCAAkC;AAClC,MAAM,MAAM,0BAA0B,GAAG;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,gCAAgC;AAChC,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,0BAA0B,CAAC;CACrC,CAAC"}
|
|
1
|
+
{"version":3,"file":"cdd-types.d.ts","sourceRoot":"","sources":["../../src/ui/cdd-types.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/cdd-types.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/** 구조화된 Acceptance Criterion */ export { };
|
|
2
2
|
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91aS9jZGQtdHlwZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgQ2RkRmlsZVR5cGUgPSBcImNvbnRyYWN0XCIgfCBcInNwZWNcIjtcblxuZXhwb3J0IHR5cGUgQ2RkU2NoZW1hRmllbGRUeXBlID1cbiAgfCBcInN0cmluZ1wiXG4gIHwgXCJzdHJpbmdbXVwiXG4gIHwgXCJSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XCJcbiAgfCBcIlJlY29yZDxzdHJpbmcsIG9iamVjdD5cIjtcblxuZXhwb3J0IHR5cGUgQ2RkU2NoZW1hRmllbGQgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHR5cGU6IENkZFNjaGVtYUZpZWxkVHlwZTtcbiAgcmVuZGVyZXI/OiBzdHJpbmc7XG4gIHJlcXVpcmVkOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQ2RkU2NoZW1hID0ge1xuICBpZDogc3RyaW5nO1xuICB0eXBlOiBcImNvbnRyYWN0XCIgfCBcInNwZWNcIjtcbiAgZmllbGRzOiBDZGRTY2hlbWFGaWVsZFtdO1xufTtcblxuZXhwb3J0IHR5cGUgQ2RkQ29udGVudEVudmVsb3BlID0ge1xuICBkb2N1bWVudDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHNjaGVtYTogQ2RkU2NoZW1hIHwgbnVsbDtcbiAgZmlsZVR5cGU6IENkZEZpbGVUeXBlO1xufTtcblxuZXhwb3J0IHR5cGUgQ2RkVHJlZU5vZGUgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICB0eXBlOiBcImZpbGVcIiB8IFwiZGlyZWN0b3J5XCI7XG4gIGZpbGVUeXBlPzogQ2RkRmlsZVR5cGU7XG4gIGNoaWxkcmVuPzogQ2RkVHJlZU5vZGVbXTtcbn07XG5cbmV4cG9ydCB0eXBlIENkZFNjaGVtYVN1bW1hcnkgPSB7XG4gIGtleTogc3RyaW5nO1xuICBpZDogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIHR5cGU6IFwiY29udHJhY3RcIiB8IFwic3BlY1wiO1xuICBmaWVsZENvdW50OiBudW1iZXI7XG4gIHJlZmVyZW5jZUNvdW50OiBudW1iZXI7XG4gIGhhc0lkTWlzbWF0Y2g6IGJvb2xlYW47XG4gIHBhcnNlRXJyb3I/
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91aS9jZGQtdHlwZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgQ2RkRmlsZVR5cGUgPSBcImNvbnRyYWN0XCIgfCBcInNwZWNcIjtcblxuZXhwb3J0IHR5cGUgQ2RkU2NoZW1hRmllbGRUeXBlID1cbiAgfCBcInN0cmluZ1wiXG4gIHwgXCJzdHJpbmdbXVwiXG4gIHwgXCJSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XCJcbiAgfCBcIlJlY29yZDxzdHJpbmcsIG9iamVjdD5cIjtcblxuZXhwb3J0IHR5cGUgQ2RkU2NoZW1hRmllbGQgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHR5cGU6IENkZFNjaGVtYUZpZWxkVHlwZTtcbiAgcmVuZGVyZXI/OiBzdHJpbmc7XG4gIHJlcXVpcmVkOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQ2RkU2NoZW1hID0ge1xuICBpZDogc3RyaW5nO1xuICB0eXBlOiBcImNvbnRyYWN0XCIgfCBcInNwZWNcIjtcbiAgZmllbGRzOiBDZGRTY2hlbWFGaWVsZFtdO1xufTtcblxuZXhwb3J0IHR5cGUgQ2RkQ29udGVudEVudmVsb3BlID0ge1xuICBkb2N1bWVudDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHNjaGVtYTogQ2RkU2NoZW1hIHwgbnVsbDtcbiAgZmlsZVR5cGU6IENkZEZpbGVUeXBlO1xufTtcblxuZXhwb3J0IHR5cGUgQ2RkVHJlZU5vZGUgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICB0eXBlOiBcImZpbGVcIiB8IFwiZGlyZWN0b3J5XCI7XG4gIGZpbGVUeXBlPzogQ2RkRmlsZVR5cGU7XG4gIGNoaWxkcmVuPzogQ2RkVHJlZU5vZGVbXTtcbn07XG5cbmV4cG9ydCB0eXBlIENkZFNjaGVtYVN1bW1hcnkgPSB7XG4gIGtleTogc3RyaW5nO1xuICBpZDogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIHR5cGU6IFwiY29udHJhY3RcIiB8IFwic3BlY1wiO1xuICBmaWVsZENvdW50OiBudW1iZXI7XG4gIHJlZmVyZW5jZUNvdW50OiBudW1iZXI7XG4gIGhhc0lkTWlzbWF0Y2g6IGJvb2xlYW47XG4gIHBhcnNlRXJyb3I/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBDZGRTY2hlbWFSZWZlcmVuY2UgPSB7XG4gIHBhdGg6IHN0cmluZztcbiAgZmlsZVR5cGU6IENkZEZpbGVUeXBlO1xuICBuYW1lOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBDZGRTY2hlbWFEZXRhaWxFbnZlbG9wZSA9IHtcbiAga2V5OiBzdHJpbmc7XG4gIHBhdGg6IHN0cmluZztcbiAgc2NoZW1hOiBDZGRTY2hlbWE7XG4gIHJlZmVyZW5jZXM6IENkZFNjaGVtYVJlZmVyZW5jZVtdO1xuICBoYXNJZE1pc21hdGNoOiBib29sZWFuO1xufTtcblxuLyoqIFNwZWMg66y47IScIOyDge2DnCAqL1xuZXhwb3J0IHR5cGUgQ2RkU3BlY1N0YXR1cyA9IFwiZHJhZnRcIiB8IFwic3BlY2lmeWluZ1wiIHwgXCJpbXBsZW1lbnRpbmdcIiB8IFwidmFsaWRhdGluZ1wiIHwgXCJkb25lXCI7XG5cbi8qKiDrjIDsi5zrs7Trk5wg66y47IScIOyalOyVvSAqL1xuZXhwb3J0IHR5cGUgQ2RkRG9jdW1lbnRTdW1tYXJ5ID0ge1xuICBwYXRoOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZmlsZVR5cGU6IENkZEZpbGVUeXBlO1xuICBzdGF0dXM/OiBDZGRTcGVjU3RhdHVzO1xuICBzY2hlbWFJZD86IHN0cmluZztcbiAgZmVhdHVyZUNvdW50PzogbnVtYmVyO1xuICBhY2NlcHRhbmNlQ3JpdGVyaWFDb3VudD86IG51bWJlcjtcbiAgc291cmNlQ291bnQ/OiBudW1iZXI7XG4gIGxhc3RNb2RpZmllZD86IHN0cmluZztcbiAgcGFyc2VFcnJvcj86IHN0cmluZztcbn07XG5cbi8qKiDrjIDsi5zrs7Trk5wg7Ya16rOEICovXG5leHBvcnQgdHlwZSBDZGREYXNoYm9hcmREYXRhID0ge1xuICBleGlzdHM6IGJvb2xlYW47XG4gIHN0YXRzOiB7XG4gICAgdG90YWxDb250cmFjdHM6IG51bWJlcjtcbiAgICB0b3RhbFNwZWNzOiBudW1iZXI7XG4gICAgc3RhdHVzRGlzdHJpYnV0aW9uOiBSZWNvcmQ8Q2RkU3BlY1N0YXR1cywgbnVtYmVyPjtcbiAgfTtcbiAgZG9jdW1lbnRzOiBDZGREb2N1bWVudFN1bW1hcnlbXTtcbn07XG5cbi8qKiBBY2NlcHRhbmNlIENyaXRlcmlvbiDthYzsiqTtirgg7LC47KGwICovXG5leHBvcnQgdHlwZSBBY2NlcHRhbmNlQ3JpdGVyaW9uVGVzdFJlZiA9IHtcbiAgdGFyZ2V0OiBzdHJpbmc7XG4gIHBhdHRlcm46IHN0cmluZztcbn07XG5cbi8qKiDqtazsobDtmZTrkJwgQWNjZXB0YW5jZSBDcml0ZXJpb24gKi9cbmV4cG9ydCB0eXBlIEFjY2VwdGFuY2VDcml0ZXJpb24gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGNvbmRpdGlvbjogc3RyaW5nO1xuICB0ZXN0UmVmOiBBY2NlcHRhbmNlQ3JpdGVyaW9uVGVzdFJlZjtcbn07XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0ZBLDhCQUE4QixHQUM5QixXQUlFIn0=
|