@dollhousemcp/mcp-server 2.0.40 → 2.0.42
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 +13 -0
- package/dist/di/Container.d.ts.map +1 -1
- package/dist/di/Container.js +10 -7
- package/dist/elements/agents/AgentManager.d.ts +25 -6
- package/dist/elements/agents/AgentManager.d.ts.map +1 -1
- package/dist/elements/agents/AgentManager.js +127 -21
- package/dist/elements/base/BaseElementManager.d.ts +18 -2
- package/dist/elements/base/BaseElementManager.d.ts.map +1 -1
- package/dist/elements/base/BaseElementManager.js +36 -3
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/handlers/ElementCRUDHandler.d.ts +36 -8
- package/dist/handlers/ElementCRUDHandler.d.ts.map +1 -1
- package/dist/handlers/ElementCRUDHandler.js +227 -96
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/MCPAQLHandler.js +3 -3
- package/dist/handlers/strategies/AgentActivationStrategy.d.ts.map +1 -1
- package/dist/handlers/strategies/AgentActivationStrategy.js +5 -2
- package/dist/handlers/strategies/ElementActivationStrategy.d.ts +2 -0
- package/dist/handlers/strategies/ElementActivationStrategy.d.ts.map +1 -1
- package/dist/handlers/strategies/ElementActivationStrategy.js +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/security/audit/config/suppressions.js +5 -5
- package/dist/services/ActivationStore.d.ts +5 -4
- package/dist/services/ActivationStore.d.ts.map +1 -1
- package/dist/services/ActivationStore.js +35 -9
- package/dist/services/PolicyExportService.d.ts +8 -2
- package/dist/services/PolicyExportService.d.ts.map +1 -1
- package/dist/services/PolicyExportService.js +37 -6
- package/dist/storage/ElementStorageLayer.d.ts +3 -3
- package/dist/storage/ElementStorageLayer.d.ts.map +1 -1
- package/dist/storage/ElementStorageLayer.js +33 -7
- package/dist/storage/IStorageLayer.d.ts +8 -1
- package/dist/storage/IStorageLayer.d.ts.map +1 -1
- package/dist/storage/IStorageLayer.js +1 -1
- package/dist/storage/MemoryStorageLayer.d.ts +4 -3
- package/dist/storage/MemoryStorageLayer.d.ts.map +1 -1
- package/dist/storage/MemoryStorageLayer.js +43 -13
- package/dist/storage/types.d.ts +7 -0
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/types.js +17 -2
- package/oauth-helper.mjs +19 -26
- package/package.json +2 -2
- package/server.json +2 -2
|
@@ -185,11 +185,28 @@ export class ActivationStore {
|
|
|
185
185
|
if (!this.state.activations[type]) {
|
|
186
186
|
this.state.activations[type] = [];
|
|
187
187
|
}
|
|
188
|
-
// Deduplicate
|
|
188
|
+
// Deduplicate. Upgrade legacy name-only records when a stable filename is
|
|
189
|
+
// now available so future restarts survive external metadata renames.
|
|
189
190
|
const existing = this.state.activations[type];
|
|
190
|
-
|
|
191
|
-
|
|
191
|
+
let activeRecord = normalizedFilename
|
|
192
|
+
? existing.find(a => a.filename === normalizedFilename)
|
|
193
|
+
: undefined;
|
|
194
|
+
activeRecord ??= existing.find(a => a.name === normalizedName && (!normalizedFilename || !a.filename));
|
|
195
|
+
if (activeRecord) {
|
|
196
|
+
let changed = false;
|
|
197
|
+
if (activeRecord.name !== normalizedName) {
|
|
198
|
+
activeRecord.name = normalizedName;
|
|
199
|
+
changed = true;
|
|
200
|
+
}
|
|
201
|
+
if (normalizedFilename && activeRecord.filename !== normalizedFilename) {
|
|
202
|
+
activeRecord.filename = normalizedFilename;
|
|
203
|
+
changed = true;
|
|
204
|
+
}
|
|
205
|
+
if (changed) {
|
|
206
|
+
this.persistAsync();
|
|
207
|
+
}
|
|
192
208
|
return;
|
|
209
|
+
}
|
|
193
210
|
existing.push({
|
|
194
211
|
name: normalizedName,
|
|
195
212
|
...(normalizedFilename ? { filename: normalizedFilename } : {}),
|
|
@@ -200,7 +217,7 @@ export class ActivationStore {
|
|
|
200
217
|
/**
|
|
201
218
|
* Record an element deactivation. Fire-and-forget persist.
|
|
202
219
|
*/
|
|
203
|
-
recordDeactivation(elementType, name) {
|
|
220
|
+
recordDeactivation(elementType, name, filename) {
|
|
204
221
|
if (!this.enabled)
|
|
205
222
|
return;
|
|
206
223
|
const type = normalizeType(elementType);
|
|
@@ -209,21 +226,30 @@ export class ActivationStore {
|
|
|
209
226
|
const normalizedName = normalizeActivationIdentifier(name);
|
|
210
227
|
if (!normalizedName)
|
|
211
228
|
return;
|
|
229
|
+
const normalizedFilename = typeof filename === 'string'
|
|
230
|
+
? normalizeActivationIdentifier(filename)
|
|
231
|
+
: undefined;
|
|
212
232
|
const activations = this.state.activations[type];
|
|
213
233
|
if (!activations)
|
|
214
234
|
return;
|
|
215
235
|
const initialLength = activations.length;
|
|
216
|
-
this.state.activations[type] = activations.filter(a =>
|
|
236
|
+
this.state.activations[type] = activations.filter(a => {
|
|
237
|
+
const shouldRemove = normalizedFilename
|
|
238
|
+
? a.filename === normalizedFilename || (!a.filename && a.name === normalizedName)
|
|
239
|
+
: a.name === normalizedName || a.filename === normalizedName;
|
|
240
|
+
return !shouldRemove;
|
|
241
|
+
});
|
|
217
242
|
// Only persist if something actually changed
|
|
218
243
|
if (this.state.activations[type].length !== initialLength) {
|
|
219
244
|
this.persistAsync();
|
|
220
245
|
}
|
|
221
246
|
}
|
|
222
247
|
/**
|
|
223
|
-
* Remove a specific activation by
|
|
248
|
+
* Remove a specific activation by stable identity when available.
|
|
249
|
+
* Used during restore to prune stale entries.
|
|
224
250
|
*/
|
|
225
|
-
removeStaleActivation(elementType, name) {
|
|
226
|
-
this.recordDeactivation(elementType, name);
|
|
251
|
+
removeStaleActivation(elementType, name, filename) {
|
|
252
|
+
this.recordDeactivation(elementType, name, filename);
|
|
227
253
|
}
|
|
228
254
|
/**
|
|
229
255
|
* Get all persisted activations for a given element type.
|
|
@@ -438,4 +464,4 @@ export class ActivationStore {
|
|
|
438
464
|
}
|
|
439
465
|
}
|
|
440
466
|
}
|
|
441
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWN0aXZhdGlvblN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL0FjdGl2YXRpb25TdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BCLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUN4QixPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM5RSxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGtCQUFrQixHQUVuQixNQUFNLHNCQUFzQixDQUFDO0FBOEI5Qiw0RUFBNEU7QUFDNUUsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBRXZGOzs7O0dBSUc7QUFDSCxNQUFNLGtCQUFrQixHQUEyQjtJQUNqRCxRQUFRLEVBQUUsU0FBUztJQUNuQixNQUFNLEVBQUUsT0FBTztJQUNmLE1BQU0sRUFBRSxPQUFPO0lBQ2YsUUFBUSxFQUFFLFFBQVE7SUFDbEIsU0FBUyxFQUFFLFVBQVU7Q0FDdEIsQ0FBQztBQUVGLFNBQVMsYUFBYSxDQUFDLFdBQW1CO0lBQ3hDLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QyxPQUFPLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUM1QyxDQUFDO0FBRUQsU0FBUyw2QkFBNkIsQ0FBQyxLQUFhO0lBQ2xELE9BQU8sZ0JBQWdCLENBQUMsU0FBUyxDQUFD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QUMsTUFBTSxDQUFDO1lBQzVCLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLDBCQUEwQixDQUFDLFFBQXlCO1FBQzFELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDN0QsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzlCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQ1QsMkVBQTJFLFFBQVEsQ0FBQyxTQUFTLDhDQUE4QyxRQUFRLENBQUMsZ0JBQWdCLG9DQUFvQyxDQUN6TSxDQUFDO1lBQ0YsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDMUMsTUFBTSxDQUFDLElBQUksQ0FDVCxpQ0FBaUMsV0FBVywyR0FBMkcsUUFBUSxDQUFDLFNBQVMsWUFBWSxDQUN0TCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQWN0aXZhdGlvbiBTdG9yZVxuICpcbiAqIFBlcnNpc3RzIHBlci1zZXNzaW9uIGVsZW1lbnQgYWN0aXZhdGlvbiBzdGF0ZSB0byBkaXNrLlxuICogRWFjaCBNQ1Agc2Vzc2lvbiAoaWRlbnRpZmllZCBieSBET0xMSE9VU0VfU0VTU0lPTl9JRCkgZ2V0cyBpdHMgb3duXG4gKiBhY3RpdmF0aW9uIGZpbGUgc28gY29uY3VycmVudCBzZXNzaW9ucyBtYWludGFpbiBpbmRlcGVuZGVudCBwcm9maWxlcy5cbiAqXG4gKiBGb2xsb3dzIHRoZSBEYW5nZXJab25lRW5mb3JjZXIgcGF0dGVybjpcbiAqIC0gREktbWFuYWdlZCBzaW5nbGV0b24gd2l0aCBGaWxlT3BlcmF0aW9uc1NlcnZpY2VcbiAqIC0gaW5pdGlhbGl6ZSgpIGxvYWRzIGZyb20gZGlzayAodG9sZXJhdGVzIG1pc3NpbmcvY29ycnVwdCBmaWxlcylcbiAqIC0gSW4tbWVtb3J5IHN0YXRlIGlzIHRoZSBob3QgcGF0aDsgZGlzayB3cml0ZXMgYXJlIGZpcmUtYW5kLWZvcmdldFxuICogLSBhdG9taWNXcml0ZUZpbGUgKHdyaXRlLXRvLXRlbXAgKyByZW5hbWUpIHByZXZlbnRzIHBhcnRpYWwgcmVhZHNcbiAqXG4gKiBGb3J3YXJkIGNvbXBhdGliaWxpdHk6IFRoZSB2ZXJzaW9uZWQgZmlsZSBmb3JtYXQgKHYxKSBjYW4gZXZvbHZlIHRvXG4gKiBpbmNsdWRlIHVzZXJJZCwgb3JnSWQsIGFuZCBhdWRpdCBmaWVsZHMgZm9yIG11bHRpLXVzZXIgSFRUUFMgbW9kZVxuICogd2l0aG91dCBicmVha2luZyBleGlzdGluZyBpbnN0YWxsYXRpb25zLlxuICpcbiAqIEBzaW5jZSB2Mi4wLjAgLSBJc3N1ZSAjNTk4XG4gKi9cblxuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzL3Byb21pc2VzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHR5cGUgeyBGaWxlT3BlcmF0aW9uc1NlcnZpY2UgfSBmcm9tICcuL0ZpbGVPcGVyYXRpb25zU2VydmljZS5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7XG4gIHJlc29sdmVTZXNzaW9uSWRlbnRpdHksXG4gIFNFU1NJT05fSURfUEFUVEVSTixcbiAgdHlwZSBTZXNzaW9uSWRlbnRpdHksXG59IGZyb20gJy4vc2Vzc2lvbklkZW50aXR5LmpzJztcblxuLyoqXG4gKiBBIHBlcnNpc3RlZCBhY3RpdmF0aW9uIHJlY29yZCBmb3IgYSBzaW5nbGUgZWxlbWVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQZXJzaXN0ZWRBY3RpdmF0aW9uIHtcbiAgLyoqIEVsZW1lbnQgbmFtZSAoaHVtYW4tcmVhZGFibGUsIHVzZWQgZm9yIGFsbCB0eXBlcykgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogRm9yIHBlcnNvbmFzIG9ubHk6IHRoZSBmaWxlbmFtZSBrZXkgdXNlZCBieSBQZXJzb25hTWFuYWdlciAqL1xuICBmaWxlbmFtZT86IHN0cmluZztcbiAgLyoqIElTTy04NjAxIHRpbWVzdGFtcCBvZiB3aGVuIGFjdGl2YXRpb24gd2FzIHBlcnNpc3RlZCAqL1xuICBhY3RpdmF0ZWRBdDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBlcnNpc3RlZCBmaWxlIGZvcm1hdCAodmVyc2lvbmVkIGZvciBmb3J3YXJkIGNvbXBhdGliaWxpdHkpLlxuICovXG5pbnRlcmZhY2UgUGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlIHtcbiAgdmVyc2lvbjogbnVtYmVyO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgbGFzdFVwZGF0ZWQ6IHN0cmluZztcbiAgYWN0aXZhdGlvbnM6IFJlY29yZDxzdHJpbmcsIFBlcnNpc3RlZEFjdGl2YXRpb25bXT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlU25hcHNob3Qge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgbGFzdFVwZGF0ZWQ6IHN0cmluZztcbiAgYWN0aXZhdGlvbnM6IFJlY29yZDxzdHJpbmcsIFBlcnNpc3RlZEFjdGl2YXRpb25bXT47XG59XG5cbi8qKiBWYWxpZCBlbGVtZW50IHR5cGVzIHRoYXQgc3VwcG9ydCBhY3RpdmF0aW9uIChzdG9yZWQgaW4gc2luZ3VsYXIgZm9ybSkgKi9cbmNvbnN0IEFDVElWQVRBQkxFX1RZUEVTID0gbmV3IFNldChbJ3BlcnNvbmEnLCAnc2tpbGwnLCAnYWdlbnQnLCAnbWVtb3J5JywgJ2Vuc2VtYmxlJ10pO1xuXG4vKipcbiAqIE5vcm1hbGl6ZSBlbGVtZW50IHR5cGUgdG8gc2luZ3VsYXIgZm9ybSBmb3IgY29uc2lzdGVudCBzdG9yYWdlLlxuICogRWxlbWVudFR5cGUgZW51bSB1c2VzIHBsdXJhbCAoJ3BlcnNvbmFzJywgJ3NraWxscycsIGV0Yy4pIGJ1dCB3ZVxuICogc3RvcmUgaW4gc2luZ3VsYXIgZm9ybSBmb3IgcmVhZGFiaWxpdHkgYW5kIGZvcndhcmQgY29tcGF0aWJpbGl0eS5cbiAqL1xuY29uc3QgUExVUkFMX1RPX1NJTkdVTEFSOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBwZXJzb25hczogJ3BlcnNvbmEnLFxuICBza2lsbHM6ICdza2lsbCcsXG4gIGFnZW50czogJ2FnZW50JyxcbiAgbWVtb3JpZXM6ICdtZW1vcnknLFxuICBlbnNlbWJsZXM6ICdlbnNlbWJsZScsXG59O1xuXG5mdW5jdGlvbiBub3JtYWxpemVUeXBlKGVsZW1lbnRUeXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBsb3dlciA9IGVsZW1lbnRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBQTFVSQUxfVE9fU0lOR1VMQVJbbG93ZXJdID8/IGxvd2VyO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVBY3RpdmF0aW9uSWRlbnRpZmllcih2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHZhbHVlKS5ub3JtYWxpemVkQ29udGVudC50cmltKCk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYWN0aXZhdGlvbiBwZXJzaXN0ZW5jZSBpcyBlbmFibGVkLlxuICovXG5mdW5jdGlvbiBpc1BlcnNpc3RlbmNlRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgY29uc3QgZW52VmFsdWUgPSBwcm9jZXNzLmVudi5ET0xMSE9VU0VfQUNUSVZBVElPTl9QRVJTSVNURU5DRT8udHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChlbnZWYWx1ZSA9PT0gJ2ZhbHNlJyB8fCBlbnZWYWx1ZSA9PT0gJzAnIHx8IGVudlZhbHVlID09PSAnbm8nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogTWF4aW11bSBudW1iZXIgb2YgcmV0cnkgYXR0ZW1wdHMgZm9yIHRyYW5zaWVudCBkaXNrIGZhaWx1cmVzICovXG5jb25zdCBQRVJTSVNUX01BWF9SRVRSSUVTID0gMjtcblxuLyoqIERlbGF5IGJldHdlZW4gcmV0cnkgYXR0ZW1wdHMgaW4gbWlsbGlzZWNvbmRzICovXG5jb25zdCBQRVJTSVNUX1JFVFJZX0RFTEFZX01TID0gMTAwO1xuXG4vKipcbiAqIFBlci1zZXNzaW9uIGFjdGl2YXRpb24gc3RhdGUgcGVyc2lzdGVuY2UuXG4gKlxuICogUGVyc2lzdHMgZWxlbWVudCBhY3RpdmF0aW9uIHN0YXRlIHRvIGB+Ly5kb2xsaG91c2Uvc3RhdGUvYWN0aXZhdGlvbnMte3Nlc3Npb25JZH0uanNvbmAuXG4gKiBFYWNoIE1DUCBzZXNzaW9uIGlzIGlkZW50aWZpZWQgYnkgdGhlIGBET0xMSE9VU0VfU0VTU0lPTl9JRGAgZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gKlxuICogVGhyZWFkLXNhZmV0eSBub3RlOiBOb2RlLmpzIGlzIHNpbmdsZS10aHJlYWRlZCwgc28gTWFwIG9wZXJhdGlvbnMgYXJlIHNhZmUuXG4gKiBGb3IgbXVsdGktcHJvY2VzcyBkZXBsb3ltZW50cyAoZnV0dXJlIEhUVFBTKSwgY29uc2lkZXIgUmVkaXMgb3IgREIgYmFja2luZy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIFNlc3Npb24gSUQgc2V0IHZpYSBlbnZpcm9ubWVudDpcbiAqIC8vIERPTExIT1VTRV9TRVNTSU9OX0lEPWNsYXVkZS1jb2RlXG4gKlxuICogY29uc3Qgc3RvcmUgPSBuZXcgQWN0aXZhdGlvblN0b3JlKGZpbGVPcHMpO1xuICogYXdhaXQgc3RvcmUuaW5pdGlhbGl6ZSgpOyAgLy8gbG9hZHMgfi8uZG9sbGhvdXNlL3N0YXRlL2FjdGl2YXRpb25zLWNsYXVkZS1jb2RlLmpzb25cbiAqXG4gKiBzdG9yZS5yZWNvcmRBY3RpdmF0aW9uKCdza2lsbCcsICdjb2RlLXJldmlld2VyJyk7XG4gKiBzdG9yZS5yZWNvcmRBY3RpdmF0aW9uKCdwZXJzb25hJywgJ0NyZWF0aXZlIERldicsICdjcmVhdGl2ZS1kZXYubWQnKTtcbiAqXG4gKiAvLyBPbiBuZXh0IHNlcnZlciBzdGFydCwgaW5pdGlhbGl6ZSgpIHJlc3RvcmVzIHRoZXNlIGFjdGl2YXRpb25zXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIEFjdGl2YXRpb25TdG9yZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmlsZU9wczogRmlsZU9wZXJhdGlvbnNTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YXRlRGlyOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcnVudGltZVNlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHBlcnNpc3RQYXRoOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW5hYmxlZDogYm9vbGVhbjtcblxuICBwcml2YXRlIHN0YXRlOiBQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGU7XG5cbiAgY29uc3RydWN0b3IoZmlsZU9wczogRmlsZU9wZXJhdGlvbnNTZXJ2aWNlLCBzdGF0ZURpcj86IHN0cmluZykge1xuICAgIHRoaXMuZmlsZU9wcyA9IGZpbGVPcHM7XG4gICAgY29uc3QgaWRlbnRpdHkgPSByZXNvbHZlU2Vzc2lvbklkZW50aXR5KCk7XG4gICAgdGhpcy5zZXNzaW9uSWQgPSBpZGVudGl0eS5zZXNzaW9uSWQ7XG4gICAgdGhpcy5ydW50aW1lU2Vzc2lvbklkID0gaWRlbnRpdHkucnVudGltZVNlc3Npb25JZDtcbiAgICB0aGlzLmVuYWJsZWQgPSBpc1BlcnNpc3RlbmNlRW5hYmxlZCgpO1xuICAgIHRoaXMuc3RhdGVEaXIgPSBzdGF0ZURpciA/PyBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICdzdGF0ZScpO1xuICAgIHRoaXMucGVyc2lzdFBhdGggPSBwYXRoLmpvaW4odGhpcy5zdGF0ZURpciwgYGFjdGl2YXRpb25zLSR7dGhpcy5zZXNzaW9uSWR9Lmpzb25gKTtcblxuICAgIHRoaXMuc3RhdGUgPSB0aGlzLmNyZWF0ZUVtcHR5U3RhdGUoKTtcbiAgICB0aGlzLmxvZ1Jlc29sdmVkU2Vzc2lvbklkZW50aXR5KGlkZW50aXR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIHBlcnNpc3RlZCBhY3RpdmF0aW9ucyBmcm9tIGRpc2suXG4gICAqIENhbGwgb25jZSBhZnRlciBjb25zdHJ1Y3Rpb24gdG8gcmVzdG9yZSBzdGF0ZSBmcm9tIGEgcHJldmlvdXMgc2Vzc2lvbi5cbiAgICogSWYgdGhlIGZpbGUgaXMgbWlzc2luZyBvciBjb3JydXB0LCBzdGFydHMgd2l0aCBlbXB0eSBhY3RpdmF0aW9ucy5cbiAgICovXG4gIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZWQpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnW0FjdGl2YXRpb25TdG9yZV0gUGVyc2lzdGVuY2UgZGlzYWJsZWQgdmlhIERPTExIT1VTRV9BQ1RJVkFUSU9OX1BFUlNJU1RFTkNFJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCB0aGlzLmZpbGVPcHMucmVhZEZpbGUodGhpcy5wZXJzaXN0UGF0aCk7XG4gICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShjb250ZW50KSBhcyBQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGU7XG5cbiAgICAgIGlmIChkYXRhLnZlcnNpb24gPT09IDEgJiYgZGF0YS5hY3RpdmF0aW9ucyAmJiB0eXBlb2YgZGF0YS5hY3RpdmF0aW9ucyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gVmFsaWRhdGUgYW5kIGxvYWQgb25seSBrbm93biBlbGVtZW50IHR5cGVzXG4gICAgICAgIGZvciAoY29uc3QgW3R5cGUsIGFjdGl2YXRpb25zXSBvZiBPYmplY3QuZW50cmllcyhkYXRhLmFjdGl2YXRpb25zKSkge1xuICAgICAgICAgIGlmIChBQ1RJVkFUQUJMRV9UWVBFUy5oYXModHlwZSkgJiYgQXJyYXkuaXNBcnJheShhY3RpdmF0aW9ucykpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV0gPSBhY3RpdmF0aW9ucy5mbGF0TWFwKChhKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghYSB8fCB0eXBlb2YgYS5uYW1lICE9PSAnc3RyaW5nJykgcmV0dXJuIFtdO1xuXG4gICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIoYS5uYW1lKTtcbiAgICAgICAgICAgICAgaWYgKCFub3JtYWxpemVkTmFtZSkgcmV0dXJuIFtdO1xuXG4gICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWxlbmFtZSA9IHR5cGVvZiBhLmZpbGVuYW1lID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgID8gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIoYS5maWxlbmFtZSlcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICByZXR1cm4gW3tcbiAgICAgICAgICAgICAgICAuLi5hLFxuICAgICAgICAgICAgICAgIG5hbWU6IG5vcm1hbGl6ZWROYW1lLFxuICAgICAgICAgICAgICAgIC4uLihub3JtYWxpemVkRmlsZW5hbWUgPyB7IGZpbGVuYW1lOiBub3JtYWxpemVkRmlsZW5hbWUgfSA6IHt9KSxcbiAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b3RhbENvdW50ID0gdGhpcy5nZXRUb3RhbEFjdGl2YXRpb25Db3VudCgpO1xuICAgICAgICBpZiAodG90YWxDb3VudCA+IDApIHtcbiAgICAgICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgICAgIGBbQWN0aXZhdGlvblN0b3JlXSBSZXN0b3JlZCAke3RvdGFsQ291bnR9IGFjdGl2YXRpb24ocykgZm9yIHNlc3Npb24gJyR7dGhpcy5zZXNzaW9uSWR9J2BcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgICAgdHlwZTogJ0VMRU1FTlRfQUNUSVZBVEVEJyxcbiAgICAgICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgICAgIHNvdXJjZTogJ0FjdGl2YXRpb25TdG9yZS5pbml0aWFsaXplJyxcbiAgICAgICAgICAgIGRldGFpbHM6IGBSZXN0b3JlZCAke3RvdGFsQ291bnR9IGFjdGl2YXRpb24ocykgZnJvbSBkaXNrIGZvciBzZXNzaW9uICcke3RoaXMuc2Vzc2lvbklkfSdgLFxuICAgICAgICAgICAgYWRkaXRpb25hbERhdGE6IHtcbiAgICAgICAgICAgICAgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb25JZCxcbiAgICAgICAgICAgICAgY291bnRzOiB0aGlzLmdldEFjdGl2YXRpb25Db3VudHMoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKChlcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gTm8gYWN0aXZhdGlvbiBmaWxlIGZvdW5kIGZvciBzZXNzaW9uICcke3RoaXMuc2Vzc2lvbklkfScsIHN0YXJ0aW5nIGZyZXNoYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIud2FybihgW0FjdGl2YXRpb25TdG9yZV0gRmFpbGVkIHRvIGxvYWQgYWN0aXZhdGlvbiBmaWxlIGZvciBzZXNzaW9uICcke3RoaXMuc2Vzc2lvbklkfScsIHN0YXJ0aW5nIGZyZXNoYCwgeyBlcnJvciB9KTtcblxuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ0VMRU1FTlRfQUNUSVZBVEVEJyxcbiAgICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgICAgc291cmNlOiAnQWN0aXZhdGlvblN0b3JlLmluaXRpYWxpemUnLFxuICAgICAgICAgIGRldGFpbHM6IGBGYWlsZWQgdG8gbG9hZCBhY3RpdmF0aW9uIGZpbGUgZm9yIHNlc3Npb24gJyR7dGhpcy5zZXNzaW9uSWR9JyDigJQgc3RhcnRpbmcgZnJlc2ggKHBvc3NpYmxlIGRhdGEgY29ycnVwdGlvbilgLFxuICAgICAgICAgIGFkZGl0aW9uYWxEYXRhOiB7IGVycm9yOiBTdHJpbmcoZXJyb3IpLCBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmQgYW4gZWxlbWVudCBhY3RpdmF0aW9uLiBGaXJlLWFuZC1mb3JnZXQgcGVyc2lzdC5cbiAgICovXG4gIHJlY29yZEFjdGl2YXRpb24oZWxlbWVudFR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nLCBmaWxlbmFtZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lbmFibGVkKSByZXR1cm47XG5cbiAgICBjb25zdCB0eXBlID0gbm9ybWFsaXplVHlwZShlbGVtZW50VHlwZSk7XG4gICAgaWYgKCFBQ1RJVkFUQUJMRV9UWVBFUy5oYXModHlwZSkpIHJldHVybjtcbiAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZUFjdGl2YXRpb25JZGVudGlmaWVyKG5hbWUpO1xuICAgIGlmICghbm9ybWFsaXplZE5hbWUpIHJldHVybjtcbiAgICBjb25zdCBub3JtYWxpemVkRmlsZW5hbWUgPSB0eXBlb2YgZmlsZW5hbWUgPT09ICdzdHJpbmcnXG4gICAgICA/IG5vcm1hbGl6ZUFjdGl2YXRpb25JZGVudGlmaWVyKGZpbGVuYW1lKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIXRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV0pIHtcbiAgICAgIHRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV0gPSBbXTtcbiAgICB9XG5cbiAgICAvLyBEZWR1cGxpY2F0ZSDigJQgZG9uJ3QgYWRkIGlmIGFscmVhZHkgcHJlc2VudFxuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5zdGF0ZS5hY3RpdmF0aW9uc1t0eXBlXSE7XG4gICAgY29uc3QgYWxyZWFkeUFjdGl2ZSA9IGV4aXN0aW5nLnNvbWUoYSA9PiBhLm5hbWUgPT09IG5vcm1hbGl6ZWROYW1lKTtcbiAgICBpZiAoYWxyZWFkeUFjdGl2ZSkgcmV0dXJuO1xuXG4gICAgZXhpc3RpbmcucHVzaCh7XG4gICAgICBuYW1lOiBub3JtYWxpemVkTmFtZSxcbiAgICAgIC4uLihub3JtYWxpemVkRmlsZW5hbWUgPyB7IGZpbGVuYW1lOiBub3JtYWxpemVkRmlsZW5hbWUgfSA6IHt9KSxcbiAgICAgIGFjdGl2YXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgfSk7XG5cbiAgICB0aGlzLnBlcnNpc3RBc3luYygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZCBhbiBlbGVtZW50IGRlYWN0aXZhdGlvbi4gRmlyZS1hbmQtZm9yZ2V0IHBlcnNpc3QuXG4gICAqL1xuICByZWNvcmREZWFjdGl2YXRpb24oZWxlbWVudFR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZWQpIHJldHVybjtcblxuICAgIGNvbnN0IHR5cGUgPSBub3JtYWxpemVUeXBlKGVsZW1lbnRUeXBlKTtcbiAgICBpZiAoIUFDVElWQVRBQkxFX1RZUEVTLmhhcyh0eXBlKSkgcmV0dXJuO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIobmFtZSk7XG4gICAgaWYgKCFub3JtYWxpemVkTmFtZSkgcmV0dXJuO1xuXG4gICAgY29uc3QgYWN0aXZhdGlvbnMgPSB0aGlzLnN0YXRlLmFjdGl2YXRpb25zW3R5cGVdO1xuICAgIGlmICghYWN0aXZhdGlvbnMpIHJldHVybjtcblxuICAgIGNvbnN0IGluaXRpYWxMZW5ndGggPSBhY3RpdmF0aW9ucy5sZW5ndGg7XG4gICAgdGhpcy5zdGF0ZS5hY3RpdmF0aW9uc1t0eXBlXSA9IGFjdGl2YXRpb25zLmZpbHRlcihhID0+IGEubmFtZSAhPT0gbm9ybWFsaXplZE5hbWUpO1xuXG4gICAgLy8gT25seSBwZXJzaXN0IGlmIHNvbWV0aGluZyBhY3R1YWxseSBjaGFuZ2VkXG4gICAgaWYgKHRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV0hLmxlbmd0aCAhPT0gaW5pdGlhbExlbmd0aCkge1xuICAgICAgdGhpcy5wZXJzaXN0QXN5bmMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgc3BlY2lmaWMgYWN0aXZhdGlvbiBieSBuYW1lICh1c2VkIGR1cmluZyByZXN0b3JlIHRvIHBydW5lIHN0YWxlIGVudHJpZXMpLlxuICAgKi9cbiAgcmVtb3ZlU3RhbGVBY3RpdmF0aW9uKGVsZW1lbnRUeXBlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkRGVhY3RpdmF0aW9uKGVsZW1lbnRUeXBlLCBuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHBlcnNpc3RlZCBhY3RpdmF0aW9ucyBmb3IgYSBnaXZlbiBlbGVtZW50IHR5cGUuXG4gICAqL1xuICBnZXRBY3RpdmF0aW9ucyhlbGVtZW50VHlwZTogc3RyaW5nKTogUGVyc2lzdGVkQWN0aXZhdGlvbltdIHtcbiAgICBjb25zdCB0eXBlID0gbm9ybWFsaXplVHlwZShlbGVtZW50VHlwZSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV0gPyBbLi4udGhpcy5zdGF0ZS5hY3RpdmF0aW9uc1t0eXBlXSFdIDogW107XG4gIH1cblxuICAvKipcbiAgICogUmVhZCBwZXJzaXN0ZWQgYWN0aXZhdGlvbiBzbmFwc2hvdHMgZnJvbSBkaXNrIGZvciByZXBvcnRpbmcvZGlhZ25vc3RpY3MuXG4gICAqXG4gICAqIFRoaXMgaW50ZW50aW9uYWxseSBkb2VzIG5vdCBtdXRhdGUgdGhlIHN0b3JlJ3MgaW4tbWVtb3J5IHN0YXRlLCBhbmQgaXQgaXNcbiAgICogc2FmZSB0byBjYWxsIGZyb20gdGhlIHdlYiBjb25zb2xlIHRvIGluc3BlY3Qgb3RoZXIgc2Vzc2lvbnMnIHBlcnNpc3RlZFxuICAgKiBhY3RpdmF0aW9ucyB3aXRob3V0IGNoYW5naW5nIGxpdmUgcG9saWN5IGVuZm9yY2VtZW50IGZvciB0aGUgY3VycmVudFxuICAgKiBwcm9jZXNzLlxuICAgKi9cbiAgYXN5bmMgbGlzdFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZXMoc2Vzc2lvbklkPzogc3RyaW5nKTogUHJvbWlzZTxQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGVTbmFwc2hvdFtdPiB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBub3JtYWxpemVkU2Vzc2lvbklkID0gdHlwZW9mIHNlc3Npb25JZCA9PT0gJ3N0cmluZycgJiYgc2Vzc2lvbklkLnRyaW0oKVxuICAgICAgPyBub3JtYWxpemVBY3RpdmF0aW9uSWRlbnRpZmllcihzZXNzaW9uSWQpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlbmFtZXMgPSBhd2FpdCB0aGlzLmdldFBlcnNpc3RlZEFjdGl2YXRpb25GaWxlbmFtZXMobm9ybWFsaXplZFNlc3Npb25JZCk7XG4gICAgICBjb25zdCBzdGF0ZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgZmlsZW5hbWVzLm1hcChmaWxlbmFtZSA9PiB0aGlzLnJlYWRQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGUoZmlsZW5hbWUpKSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gc3RhdGVzXG4gICAgICAgIC5mbGF0TWFwKChzdGF0ZSkgPT4gKHN0YXRlID8gW3N0YXRlXSA6IFtdKSlcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuc2Vzc2lvbklkLmxvY2FsZUNvbXBhcmUoYi5zZXNzaW9uSWQpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKChlcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnW0FjdGl2YXRpb25TdG9yZV0gRmFpbGVkIHRvIGVudW1lcmF0ZSBhY3RpdmF0aW9uIHNuYXBzaG90cyBmb3IgcmVwb3J0aW5nJywge1xuICAgICAgICAgIHN0YXRlRGlyOiB0aGlzLnN0YXRlRGlyLFxuICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0UGVyc2lzdGVkQWN0aXZhdGlvbkZpbGVuYW1lcyhzZXNzaW9uSWQ/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgaWYgKHNlc3Npb25JZCkge1xuICAgICAgcmV0dXJuIFtgYWN0aXZhdGlvbnMtJHtzZXNzaW9uSWR9Lmpzb25gXTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlbmFtZXMgPSBhd2FpdCBmcy5yZWFkZGlyKHRoaXMuc3RhdGVEaXIpO1xuICAgIHJldHVybiBmaWxlbmFtZXMuZmlsdGVyKG5hbWUgPT4gL15hY3RpdmF0aW9ucy1bXi5dK1xcLmpzb24kL3UudGVzdChuYW1lKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlYWRQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGUoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8UGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlU25hcHNob3QgfCBudWxsPiB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5zdGF0ZURpciwgZmlsZW5hbWUpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCB0aGlzLmZpbGVPcHMucmVhZEZpbGUoZmlsZVBhdGgpO1xuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoY29udGVudCkgYXMgUGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlO1xuICAgICAgaWYgKCF0aGlzLmlzUGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlKGRhdGEpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXNzaW9uSWQ6IGRhdGEuc2Vzc2lvbklkLFxuICAgICAgICBsYXN0VXBkYXRlZDogZGF0YS5sYXN0VXBkYXRlZCxcbiAgICAgICAgYWN0aXZhdGlvbnM6IHRoaXMubm9ybWFsaXplUGVyc2lzdGVkQWN0aXZhdGlvbnMoZGF0YS5hY3RpdmF0aW9ucyksXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmxvZ1NuYXBzaG90UmVhZEVycm9yKGZpbGVQYXRoLCBlcnJvcik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzUGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlKGRhdGE6IFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBkYXRhLnZlcnNpb24gPT09IDFcbiAgICAgICYmIHR5cGVvZiBkYXRhLnNlc3Npb25JZCA9PT0gJ3N0cmluZydcbiAgICAgICYmIEJvb2xlYW4oZGF0YS5hY3RpdmF0aW9ucylcbiAgICAgICYmIHR5cGVvZiBkYXRhLmFjdGl2YXRpb25zID09PSAnb2JqZWN0JztcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplUGVyc2lzdGVkQWN0aXZhdGlvbnMoYWN0aXZhdGlvbnM6IFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZVsnYWN0aXZhdGlvbnMnXSk6IFJlY29yZDxzdHJpbmcsIFBlcnNpc3RlZEFjdGl2YXRpb25bXT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQ6IFJlY29yZDxzdHJpbmcsIFBlcnNpc3RlZEFjdGl2YXRpb25bXT4gPSB7fTtcblxuICAgIGZvciAoY29uc3QgW3R5cGUsIGVudHJpZXNdIG9mIE9iamVjdC5lbnRyaWVzKGFjdGl2YXRpb25zKSkge1xuICAgICAgaWYgKCFBQ1RJVkFUQUJMRV9UWVBFUy5oYXModHlwZSkgfHwgIUFycmF5LmlzQXJyYXkoZW50cmllcykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRFbnRyaWVzID0gZW50cmllcy5mbGF0TWFwKChlbnRyeSkgPT4gdGhpcy5ub3JtYWxpemVQZXJzaXN0ZWRBY3RpdmF0aW9uKGVudHJ5KSk7XG4gICAgICBpZiAobm9ybWFsaXplZEVudHJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBub3JtYWxpemVkW3R5cGVdID0gbm9ybWFsaXplZEVudHJpZXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZVBlcnNpc3RlZEFjdGl2YXRpb24oZW50cnk6IFBlcnNpc3RlZEFjdGl2YXRpb24gfCBudWxsIHwgdW5kZWZpbmVkKTogUGVyc2lzdGVkQWN0aXZhdGlvbltdIHtcbiAgICBpZiAoIWVudHJ5IHx8IHR5cGVvZiBlbnRyeS5uYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIoZW50cnkubmFtZSk7XG4gICAgaWYgKCFub3JtYWxpemVkTmFtZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWxlbmFtZSA9IHR5cGVvZiBlbnRyeS5maWxlbmFtZSA9PT0gJ3N0cmluZydcbiAgICAgID8gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIoZW50cnkuZmlsZW5hbWUpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBbe1xuICAgICAgLi4uZW50cnksXG4gICAgICBuYW1lOiBub3JtYWxpemVkTmFtZSxcbiAgICAgIC4uLihub3JtYWxpemVkRmlsZW5hbWUgPyB7IGZpbGVuYW1lOiBub3JtYWxpemVkRmlsZW5hbWUgfSA6IHt9KSxcbiAgICB9XTtcbiAgfVxuXG4gIHByaXZhdGUgbG9nU25hcHNob3RSZWFkRXJyb3IoZmlsZVBhdGg6IHN0cmluZywgZXJyb3I6IHVua25vd24pOiB2b2lkIHtcbiAgICBpZiAoKGVycm9yIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoJ1tBY3RpdmF0aW9uU3RvcmVdIFNraXBwaW5nIHVucmVhZGFibGUgYWN0aXZhdGlvbiBzbmFwc2hvdCBkdXJpbmcgcmVwb3J0aW5nJywge1xuICAgICAgZmlsZVBhdGgsXG4gICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc2Vzc2lvbiBJRCB0aGlzIHN0b3JlIGlzIHNjb3BlZCB0by5cbiAgICovXG4gIGdldFNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb25JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW50aW1lLXVuaXF1ZSBzZXNzaW9uIGlkZW50aWZpZXIgdXNlZCBmb3IgbGl2ZSBjb25zb2xlL3Nlc3Npb24gcmVnaXN0cnlcbiAgICogc3VyZmFjZXMgd2hlbiB0aGUgc3RhYmxlIHBlcnNpc3RlbmNlIGlkZW50aXR5IGlzIHNoYXJlZCBhY3Jvc3MgdW5uYW1lZFxuICAgKiBzZXNzaW9ucy5cbiAgICovXG4gIGdldFJ1bnRpbWVTZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5ydW50aW1lU2Vzc2lvbklkO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHBlcnNpc3RlbmNlIGlzIGVuYWJsZWQuXG4gICAqL1xuICBpc0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgcGVyc2lzdGVkIGFjdGl2YXRpb25zLiBVc2VkIGZvciB0ZXN0aW5nIG9yIGFkbWluIHJlc2V0LlxuICAgKi9cbiAgY2xlYXJBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuY3JlYXRlRW1wdHlTdGF0ZSgpO1xuICAgIGlmICh0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHRoaXMucGVyc2lzdEFzeW5jKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpcmUtYW5kLWZvcmdldCBwZXJzaXN0ZW5jZSB3aXRoIHJldHJ5IGZvciB0cmFuc2llbnQgZGlzayBmYWlsdXJlcy5cbiAgICogUmV0cmllcyB1cCB0byBQRVJTSVNUX01BWF9SRVRSSUVTIHRpbWVzIHdpdGggYSBzaG9ydCBkZWxheS5cbiAgICogRGlzayBmYWlsdXJlIGRvZXMgbm90IGJsb2NrIGFjdGl2YXRpb24gb3BlcmF0aW9ucy5cbiAgICovXG4gIHByaXZhdGUgcGVyc2lzdEFzeW5jKCk6IHZvaWQge1xuICAgIHRoaXMucGVyc2lzdFdpdGhSZXRyeSgwKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBsb2dnZXIud2FybignW0FjdGl2YXRpb25TdG9yZV0gRmFpbGVkIHRvIHBlcnNpc3QgYWN0aXZhdGlvbiBzdGF0ZSBhZnRlciByZXRyaWVzJywgeyBlcnJvciB9KTtcblxuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnRUxFTUVOVF9BQ1RJVkFURUQnLFxuICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgIHNvdXJjZTogJ0FjdGl2YXRpb25TdG9yZS5wZXJzaXN0QXN5bmMnLFxuICAgICAgICBkZXRhaWxzOiBgRmFpbGVkIHRvIHBlcnNpc3QgYWN0aXZhdGlvbiBzdGF0ZSBmb3Igc2Vzc2lvbiAnJHt0aGlzLnNlc3Npb25JZH0nIGFmdGVyICR7UEVSU0lTVF9NQVhfUkVUUklFUyArIDF9IGF0dGVtcHRzIOKAlCBzdGF0ZSBjb250aW51ZXMgaW4tbWVtb3J5IG9ubHlgLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YTogeyBlcnJvcjogU3RyaW5nKGVycm9yKSwgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb25JZCB9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXR0ZW1wdCB0byBwZXJzaXN0IHdpdGggcmV0cmllcyBmb3IgdHJhbnNpZW50IGZhaWx1cmVzIChlLmcuLCBFQlVTWSwgRUFHQUlOKS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcGVyc2lzdFdpdGhSZXRyeShhdHRlbXB0OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5wZXJzaXN0KCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChhdHRlbXB0IDwgUEVSU0lTVF9NQVhfUkVUUklFUykge1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgUEVSU0lTVF9SRVRSWV9ERUxBWV9NUykpO1xuICAgICAgICByZXR1cm4gdGhpcy5wZXJzaXN0V2l0aFJldHJ5KGF0dGVtcHQgKyAxKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZSBjdXJyZW50IGFjdGl2YXRpb24gc3RhdGUgdG8gZGlzay5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcGVyc2lzdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnN0YXRlLmxhc3RVcGRhdGVkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgIGF3YWl0IGZzLm1rZGlyKHRoaXMuc3RhdGVEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHRoaXMuZmlsZU9wcy53cml0ZUZpbGUodGhpcy5wZXJzaXN0UGF0aCwgSlNPTi5zdHJpbmdpZnkodGhpcy5zdGF0ZSwgbnVsbCwgMikpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVFbXB0eVN0YXRlKCk6IFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZlcnNpb246IDEsXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkLFxuICAgICAgbGFzdFVwZGF0ZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGFjdGl2YXRpb25zOiB7fSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUb3RhbEFjdGl2YXRpb25Db3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuc3RhdGUuYWN0aXZhdGlvbnMpLnJlZHVjZShcbiAgICAgIChzdW0sIGFycikgPT4gc3VtICsgKGFycj8ubGVuZ3RoID8/IDApLCAwXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWN0aXZhdGlvbkNvdW50cygpOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+IHtcbiAgICBjb25zdCBjb3VudHM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFt0eXBlLCBhcnJdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc3RhdGUuYWN0aXZhdGlvbnMpKSB7XG4gICAgICBpZiAoYXJyICYmIGFyci5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvdW50c1t0eXBlXSA9IGFyci5sZW5ndGg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb3VudHM7XG4gIH1cblxuICBwcml2YXRlIGxvZ1Jlc29sdmVkU2Vzc2lvbklkZW50aXR5KGlkZW50aXR5OiBTZXNzaW9uSWRlbnRpdHkpOiB2b2lkIHtcbiAgICBjb25zdCByYXdFbnZWYWx1ZSA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9TRVNTSU9OX0lEPy50cmltKCk7XG4gICAgaWYgKGlkZW50aXR5LnNvdXJjZSA9PT0gJ2VudicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXJhd0VudlZhbHVlKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgYFtBY3RpdmF0aW9uU3RvcmVdIE5vIERPTExIT1VTRV9TRVNTSU9OX0lEIHNldCDigJQgZGVyaXZlZCBzdGFibGUgc2Vzc2lvbiAnJHtpZGVudGl0eS5zZXNzaW9uSWR9JyBmcm9tIHdvcmtzcGFjZSBjb250ZXh0OyBydW50aW1lIHNlc3Npb24gJyR7aWRlbnRpdHkucnVudGltZVNlc3Npb25JZH0nIHJlbWFpbnMgdW5pcXVlIGZvciB0aGlzIHByb2Nlc3MuYFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIVNFU1NJT05fSURfUEFUVEVSTi50ZXN0KHJhd0VudlZhbHVlKSkge1xuICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgIGBJbnZhbGlkIERPTExIT1VTRV9TRVNTSU9OX0lEICcke3Jhd0VudlZhbHVlfScg4oCUIG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciwgdGhlbiBhbHBoYW51bWVyaWMvaHlwaGVucy91bmRlcnNjb3JlcywgMS02NCBjaGFycy4gVXNpbmcgZGVyaXZlZCBzZXNzaW9uICcke2lkZW50aXR5LnNlc3Npb25JZH0nIGluc3RlYWQuYFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
467
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWN0aXZhdGlvblN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL0FjdGl2YXRpb25TdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BCLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUN4QixPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM5RSxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGtCQUFrQixHQUVuQixNQUFNLHNCQUFzQixDQUFDO0FBOEI5Qiw0RUFBNEU7QUFDNUUsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBRXZGOzs7O0dBSUc7QUFDSCxNQUFNLGtCQUFrQixHQUEyQjtJQUNqRCxRQUFRLEVBQUUsU0FBUztJQUNuQixNQUFNLEVBQUUsT0FBTztJQUNmLE1BQU0sRUFBRSxPQUFPO0lBQ2YsUUFBUSxFQUFFLFFBQVE7SUFDbEIsU0FBUyxFQUFFLFVBQVU7Q0FDdEIsQ0FBQztBQUVGLFNBQVMsYUFBYSxDQUFDLFdBQW1CO0lBQ3hDLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QyxPQUFPLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUM1QyxDQUFDO0FBRUQsU0FBUyw2QkFBNkIsQ0FBQyxLQUFhO0lBQ2xELE9BQU8sZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BFLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsb0JBQW9CO0lBQzNCLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLEVBQUUsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDcEYsSUFBSSxRQUFRLEtBQUssT0FBTyxJQUFJLFFBQVEsS0FBSyxHQUFHLElBQUksUUFBUSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2xFLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELG1FQUFtRTtBQUNuRSxNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQztBQUU5QixtREFBbUQ7QUFDbkQsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUM7QUFFbkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQUNULE9BQU8sQ0FBd0I7SUFDL0IsUUFBUSxDQUFTO0lBQ2pCLFNBQVMsQ0FBUztJQUNsQixnQkFBZ0IsQ0FBUztJQUN6QixXQUFXLENBQVM7SUFDcEIsT0FBTyxDQUFVO0lBRTFCLEtBQUssQ0FBMkI7SUFFeEMsWUFBWSxPQUE4QixFQUFFLFFBQWlCO1FBQzNELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLHNCQUFzQixFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7UUFDbEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxlQUFlLElBQUksQ0FBQyxTQUFTLE9BQU8sQ0FBQyxDQUFDO1FBRWxGLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLFVBQVU7UUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkVBQTZFLENBQUMsQ0FBQztZQUM1RixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzlELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUE2QixDQUFDO1lBRTdELElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ25GLDZDQUE2QztnQkFDN0MsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7b0JBQ25FLElBQUksaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQzt3QkFDOUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFOzRCQUN2RCxJQUFJLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRO2dDQUFFLE9BQU8sRUFBRSxDQUFDOzRCQUVoRCxNQUFNLGNBQWMsR0FBRyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQzdELElBQUksQ0FBQyxjQUFjO2dDQUFFLE9BQU8sRUFBRSxDQUFDOzRCQUUvQixNQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRO2dDQUN2RCxDQUFDLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztnQ0FDM0MsQ0FBQyxDQUFDLFNBQVMsQ0FBQzs0QkFFZCxPQUFPLENBQUM7b0NBQ04sR0FBRyxDQUFDO29DQUNKLElBQUksRUFBRSxjQUFjO29DQUNwQixHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztpQ0FDaEUsQ0FBQyxDQUFDO3dCQUNMLENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUM7Z0JBQ0gsQ0FBQztnQkFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQ1QsOEJBQThCLFVBQVUsK0JBQStCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FDekYsQ0FBQztvQkFFRixlQUFlLENBQUMsZ0JBQWdCLENBQUM7d0JBQy9CLElBQUksRUFBRSxtQkFBbUI7d0JBQ3pCLFFBQVEsRUFBRSxLQUFLO3dCQUNmLE1BQU0sRUFBRSw0QkFBNEI7d0JBQ3BDLE9BQU8sRUFBRSxZQUFZLFVBQVUseUNBQXlDLElBQUksQ0FBQyxTQUFTLEdBQUc7d0JBQ3pGLGNBQWMsRUFBRTs0QkFDZCxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7NEJBQ3pCLE1BQU0sRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7eUJBQ25DO3FCQUNGLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSyxLQUErQixDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDdkQsTUFBTSxDQUFDLEtBQUssQ0FBQywyREFBMkQsSUFBSSxDQUFDLFNBQVMsbUJBQW1CLENBQUMsQ0FBQztZQUM3RyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxDQUFDLElBQUksQ0FBQyxpRUFBaUUsSUFBSSxDQUFDLFNBQVMsbUJBQW1CLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUUzSCxlQUFlLENBQUMsZ0JBQWdCLENBQUM7b0JBQy9CLElBQUksRUFBRSxtQkFBbUI7b0JBQ3pCLFFBQVEsRUFBRSxRQUFRO29CQUNsQixNQUFNLEVBQUUsNEJBQTRCO29CQUNwQyxPQUFPLEVBQUUsK0NBQStDLElBQUksQ0FBQyxTQUFTLCtDQUErQztvQkFDckgsY0FBYyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRTtpQkFDcEUsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0IsQ0FBQyxXQUFtQixFQUFFLElBQVksRUFBRSxRQUFpQjtRQUNuRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBRTFCLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztZQUFFLE9BQU87UUFDekMsTUFBTSxjQUFjLEdBQUcsNkJBQTZCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLGNBQWM7WUFBRSxPQUFPO1FBQzVCLE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxRQUFRLEtBQUssUUFBUTtZQUNyRCxDQUFDLENBQUMsNkJBQTZCLENBQUMsUUFBUSxDQUFDO1lBQ3pDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFZCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDcEMsQ0FBQztRQUVELDBFQUEwRTtRQUMxRSxzRUFBc0U7UUFDdEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFFLENBQUM7UUFDL0MsSUFBSSxZQUFZLEdBQUcsa0JBQWtCO1lBQ25DLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxrQkFBa0IsQ0FBQztZQUN2RCxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsWUFBWSxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDakMsQ0FBQyxDQUFDLElBQUksS0FBSyxjQUFjLElBQUksQ0FBQyxDQUFDLGtCQUFrQixJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUNsRSxDQUFDO1FBQ0YsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDcEIsSUFBSSxZQUFZLENBQUMsSUFBSSxLQUFLLGNBQWMsRUFBRSxDQUFDO2dCQUN6QyxZQUFZLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQztnQkFDbkMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNqQixDQUFDO1lBQ0QsSUFBSSxrQkFBa0IsSUFBSSxZQUFZLENBQUMsUUFBUSxLQUFLLGtCQUFrQixFQUFFLENBQUM7Z0JBQ3ZFLFlBQVksQ0FBQyxRQUFRLEdBQUcsa0JBQWtCLENBQUM7Z0JBQzNDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDakIsQ0FBQztZQUNELElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUVELFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDWixJQUFJLEVBQUUsY0FBYztZQUNwQixHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMvRCxXQUFXLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7U0FDdEMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNILGtCQUFrQixDQUFDLFdBQW1CLEVBQUUsSUFBWSxFQUFFLFFBQWlCO1FBQ3JFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFFMUIsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTztRQUN6QyxNQUFNLGNBQWMsR0FBRyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsY0FBYztZQUFFLE9BQU87UUFDNUIsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLFFBQVEsS0FBSyxRQUFRO1lBQ3JELENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxRQUFRLENBQUM7WUFDekMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUVkLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUV6QixNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDcEQsTUFBTSxZQUFZLEdBQUcsa0JBQWtCO2dCQUNyQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxrQkFBa0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQztnQkFDakYsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssY0FBYyxJQUFJLENBQUMsQ0FBQyxRQUFRLEtBQUssY0FBYyxDQUFDO1lBQy9ELE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFFSCw2Q0FBNkM7UUFDN0MsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUUsQ0FBQyxNQUFNLEtBQUssYUFBYSxFQUFFLENBQUM7WUFDM0QsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gscUJBQXFCLENBQUMsV0FBbUIsRUFBRSxJQUFZLEVBQUUsUUFBaUI7UUFDeEUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsY0FBYyxDQUFDLFdBQW1CO1FBQ2hDLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ2hGLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLDZCQUE2QixDQUFDLFNBQWtCO1FBQ3BELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsTUFBTSxtQkFBbUIsR0FBRyxPQUFPLFNBQVMsS0FBSyxRQUFRLElBQUksU0FBUyxDQUFDLElBQUksRUFBRTtZQUMzRSxDQUFDLENBQUMsNkJBQTZCLENBQUMsU0FBUyxDQUFDO1lBQzFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFZCxJQUFJLENBQUM7WUFDSCxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ2xGLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDOUIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUN2RSxDQUFDO1lBQ0YsT0FBTyxNQUFNO2lCQUNWLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUMxQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUssS0FBK0IsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3ZELE1BQU0sQ0FBQyxLQUFLLENBQUMsMEVBQTBFLEVBQUU7b0JBQ3ZGLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtvQkFDdkIsS0FBSyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7aUJBQzlELENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRU8sS0FBSyxDQUFDLCtCQUErQixDQUFDLFNBQWtCO1FBQzlELElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxPQUFPLENBQUMsZUFBZSxTQUFTLE9BQU8sQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFTyxLQUFLLENBQUMsNEJBQTRCLENBQUMsUUFBZ0I7UUFDekQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRXBELElBQUksQ0FBQztZQUNILE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQTZCLENBQUM7WUFDN0QsSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUMzQyxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFFRCxPQUFPO2dCQUNMLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztnQkFDekIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUM3QixXQUFXLEVBQUUsSUFBSSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7YUFDbEUsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMzQyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRU8sMEJBQTBCLENBQUMsSUFBOEI7UUFDL0QsT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLENBQUM7ZUFDcEIsT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFFBQVE7ZUFDbEMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7ZUFDekIsT0FBTyxJQUFJLENBQUMsV0FBVyxLQUFLLFFBQVEsQ0FBQztJQUM1QyxDQUFDO0lBRU8sNkJBQTZCLENBQUMsV0FBb0Q7UUFDeEYsTUFBTSxVQUFVLEdBQTBDLEVBQUUsQ0FBQztRQUU3RCxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQzFELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQzVELFNBQVM7WUFDWCxDQUFDO1lBRUQsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMvRixJQUFJLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDakMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLGlCQUFpQixDQUFDO1lBQ3ZDLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVPLDRCQUE0QixDQUFDLEtBQTZDO1FBQ2hGLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzdDLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELE1BQU0sY0FBYyxHQUFHLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDcEIsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLEtBQUssQ0FBQyxRQUFRLEtBQUssUUFBUTtZQUMzRCxDQUFDLENBQUMsNkJBQTZCLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUMvQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBRWQsT0FBTyxDQUFDO2dCQUNOLEdBQUcsS0FBSztnQkFDUixJQUFJLEVBQUUsY0FBYztnQkFDcEIsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDaEUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLG9CQUFvQixDQUFDLFFBQWdCLEVBQUUsS0FBYztRQUMzRCxJQUFLLEtBQStCLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3ZELE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyw0RUFBNEUsRUFBRTtZQUN6RixRQUFRO1lBQ1IsS0FBSyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDOUQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG1CQUFtQjtRQUNqQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNILFFBQVE7UUFDTixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3JDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxZQUFZO1FBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDckMsTUFBTSxDQUFDLElBQUksQ0FBQyxvRUFBb0UsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFFN0YsZUFBZSxDQUFDLGdCQUFnQixDQUFDO2dCQUMvQixJQUFJLEVBQUUsbUJBQW1CO2dCQUN6QixRQUFRLEVBQUUsUUFBUTtnQkFDbEIsTUFBTSxFQUFFLDhCQUE4QjtnQkFDdEMsT0FBTyxFQUFFLG1EQUFtRCxJQUFJLENBQUMsU0FBUyxXQUFXLG1CQUFtQixHQUFHLENBQUMsNENBQTRDO2dCQUN4SixjQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFO2FBQ3BFLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLGdCQUFnQixDQUFDLE9BQWU7UUFDNUMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdkIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLE9BQU8sR0FBRyxtQkFBbUIsRUFBRSxDQUFDO2dCQUNsQyxNQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7Z0JBQzFFLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM1QyxDQUFDO1lBQ0QsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLE9BQU87UUFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsRCxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixPQUFPO1lBQ0wsT0FBTyxFQUFFLENBQUM7WUFDVixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsV0FBVyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ3JDLFdBQVcsRUFBRSxFQUFFO1NBQ2hCLENBQUM7SUFDSixDQUFDO0lBRU8sdUJBQXVCO1FBQzdCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FDakQsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FDMUMsQ0FBQztJQUNKLENBQUM7SUFFTyxtQkFBbUI7UUFDekIsTUFBTSxNQUFNLEdBQTJCLEVBQUUsQ0FBQztRQUMxQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDakUsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU8sMEJBQTBCLENBQUMsUUFBeUI7UUFDMUQsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUM3RCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDOUIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxDQUFDLElBQUksQ0FDVCwyRUFBMkUsUUFBUSxDQUFDLFNBQVMsOENBQThDLFFBQVEsQ0FBQyxnQkFBZ0Isb0NBQW9DLENBQ3pNLENBQUM7WUFDRixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUMxQyxNQUFNLENBQUMsSUFBSSxDQUNULGlDQUFpQyxXQUFXLDJHQUEyRyxRQUFRLENBQUMsU0FBUyxZQUFZLENBQ3RMLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBY3RpdmF0aW9uIFN0b3JlXG4gKlxuICogUGVyc2lzdHMgcGVyLXNlc3Npb24gZWxlbWVudCBhY3RpdmF0aW9uIHN0YXRlIHRvIGRpc2suXG4gKiBFYWNoIE1DUCBzZXNzaW9uIChpZGVudGlmaWVkIGJ5IERPTExIT1VTRV9TRVNTSU9OX0lEKSBnZXRzIGl0cyBvd25cbiAqIGFjdGl2YXRpb24gZmlsZSBzbyBjb25jdXJyZW50IHNlc3Npb25zIG1haW50YWluIGluZGVwZW5kZW50IHByb2ZpbGVzLlxuICpcbiAqIEZvbGxvd3MgdGhlIERhbmdlclpvbmVFbmZvcmNlciBwYXR0ZXJuOlxuICogLSBESS1tYW5hZ2VkIHNpbmdsZXRvbiB3aXRoIEZpbGVPcGVyYXRpb25zU2VydmljZVxuICogLSBpbml0aWFsaXplKCkgbG9hZHMgZnJvbSBkaXNrICh0b2xlcmF0ZXMgbWlzc2luZy9jb3JydXB0IGZpbGVzKVxuICogLSBJbi1tZW1vcnkgc3RhdGUgaXMgdGhlIGhvdCBwYXRoOyBkaXNrIHdyaXRlcyBhcmUgZmlyZS1hbmQtZm9yZ2V0XG4gKiAtIGF0b21pY1dyaXRlRmlsZSAod3JpdGUtdG8tdGVtcCArIHJlbmFtZSkgcHJldmVudHMgcGFydGlhbCByZWFkc1xuICpcbiAqIEZvcndhcmQgY29tcGF0aWJpbGl0eTogVGhlIHZlcnNpb25lZCBmaWxlIGZvcm1hdCAodjEpIGNhbiBldm9sdmUgdG9cbiAqIGluY2x1ZGUgdXNlcklkLCBvcmdJZCwgYW5kIGF1ZGl0IGZpZWxkcyBmb3IgbXVsdGktdXNlciBIVFRQUyBtb2RlXG4gKiB3aXRob3V0IGJyZWFraW5nIGV4aXN0aW5nIGluc3RhbGxhdGlvbnMuXG4gKlxuICogQHNpbmNlIHYyLjAuMCAtIElzc3VlICM1OThcbiAqL1xuXG5pbXBvcnQgb3MgZnJvbSAnb3MnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5TW9uaXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3NlY3VyaXR5TW9uaXRvci5qcyc7XG5pbXBvcnQgdHlwZSB7IEZpbGVPcGVyYXRpb25zU2VydmljZSB9IGZyb20gJy4vRmlsZU9wZXJhdGlvbnNTZXJ2aWNlLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHtcbiAgcmVzb2x2ZVNlc3Npb25JZGVudGl0eSxcbiAgU0VTU0lPTl9JRF9QQVRURVJOLFxuICB0eXBlIFNlc3Npb25JZGVudGl0eSxcbn0gZnJvbSAnLi9zZXNzaW9uSWRlbnRpdHkuanMnO1xuXG4vKipcbiAqIEEgcGVyc2lzdGVkIGFjdGl2YXRpb24gcmVjb3JkIGZvciBhIHNpbmdsZSBlbGVtZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBlcnNpc3RlZEFjdGl2YXRpb24ge1xuICAvKiogRWxlbWVudCBuYW1lIChodW1hbi1yZWFkYWJsZSwgdXNlZCBmb3IgYWxsIHR5cGVzKSAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBTdGFibGUgZmlsZW5hbWUgZm9yIGVsZW1lbnQgdHlwZXMgd2hvc2UgZGlzcGxheSBuYW1lcyBtYXkgY2hhbmdlICovXG4gIGZpbGVuYW1lPzogc3RyaW5nO1xuICAvKiogSVNPLTg2MDEgdGltZXN0YW1wIG9mIHdoZW4gYWN0aXZhdGlvbiB3YXMgcGVyc2lzdGVkICovXG4gIGFjdGl2YXRlZEF0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGVyc2lzdGVkIGZpbGUgZm9ybWF0ICh2ZXJzaW9uZWQgZm9yIGZvcndhcmQgY29tcGF0aWJpbGl0eSkuXG4gKi9cbmludGVyZmFjZSBQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGUge1xuICB2ZXJzaW9uOiBudW1iZXI7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBsYXN0VXBkYXRlZDogc3RyaW5nO1xuICBhY3RpdmF0aW9uczogUmVjb3JkPHN0cmluZywgUGVyc2lzdGVkQWN0aXZhdGlvbltdPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGVTbmFwc2hvdCB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBsYXN0VXBkYXRlZDogc3RyaW5nO1xuICBhY3RpdmF0aW9uczogUmVjb3JkPHN0cmluZywgUGVyc2lzdGVkQWN0aXZhdGlvbltdPjtcbn1cblxuLyoqIFZhbGlkIGVsZW1lbnQgdHlwZXMgdGhhdCBzdXBwb3J0IGFjdGl2YXRpb24gKHN0b3JlZCBpbiBzaW5ndWxhciBmb3JtKSAqL1xuY29uc3QgQUNUSVZBVEFCTEVfVFlQRVMgPSBuZXcgU2V0KFsncGVyc29uYScsICdza2lsbCcsICdhZ2VudCcsICdtZW1vcnknLCAnZW5zZW1ibGUnXSk7XG5cbi8qKlxuICogTm9ybWFsaXplIGVsZW1lbnQgdHlwZSB0byBzaW5ndWxhciBmb3JtIGZvciBjb25zaXN0ZW50IHN0b3JhZ2UuXG4gKiBFbGVtZW50VHlwZSBlbnVtIHVzZXMgcGx1cmFsICgncGVyc29uYXMnLCAnc2tpbGxzJywgZXRjLikgYnV0IHdlXG4gKiBzdG9yZSBpbiBzaW5ndWxhciBmb3JtIGZvciByZWFkYWJpbGl0eSBhbmQgZm9yd2FyZCBjb21wYXRpYmlsaXR5LlxuICovXG5jb25zdCBQTFVSQUxfVE9fU0lOR1VMQVI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIHBlcnNvbmFzOiAncGVyc29uYScsXG4gIHNraWxsczogJ3NraWxsJyxcbiAgYWdlbnRzOiAnYWdlbnQnLFxuICBtZW1vcmllczogJ21lbW9yeScsXG4gIGVuc2VtYmxlczogJ2Vuc2VtYmxlJyxcbn07XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVR5cGUoZWxlbWVudFR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGxvd2VyID0gZWxlbWVudFR5cGUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIFBMVVJBTF9UT19TSU5HVUxBUltsb3dlcl0gPz8gbG93ZXI7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUFjdGl2YXRpb25JZGVudGlmaWVyKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUodmFsdWUpLm5vcm1hbGl6ZWRDb250ZW50LnRyaW0oKTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhY3RpdmF0aW9uIHBlcnNpc3RlbmNlIGlzIGVuYWJsZWQuXG4gKi9cbmZ1bmN0aW9uIGlzUGVyc2lzdGVuY2VFbmFibGVkKCk6IGJvb2xlYW4ge1xuICBjb25zdCBlbnZWYWx1ZSA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9BQ1RJVkFUSU9OX1BFUlNJU1RFTkNFPy50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGVudlZhbHVlID09PSAnZmFsc2UnIHx8IGVudlZhbHVlID09PSAnMCcgfHwgZW52VmFsdWUgPT09ICdubycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKiBNYXhpbXVtIG51bWJlciBvZiByZXRyeSBhdHRlbXB0cyBmb3IgdHJhbnNpZW50IGRpc2sgZmFpbHVyZXMgKi9cbmNvbnN0IFBFUlNJU1RfTUFYX1JFVFJJRVMgPSAyO1xuXG4vKiogRGVsYXkgYmV0d2VlbiByZXRyeSBhdHRlbXB0cyBpbiBtaWxsaXNlY29uZHMgKi9cbmNvbnN0IFBFUlNJU1RfUkVUUllfREVMQVlfTVMgPSAxMDA7XG5cbi8qKlxuICogUGVyLXNlc3Npb24gYWN0aXZhdGlvbiBzdGF0ZSBwZXJzaXN0ZW5jZS5cbiAqXG4gKiBQZXJzaXN0cyBlbGVtZW50IGFjdGl2YXRpb24gc3RhdGUgdG8gYH4vLmRvbGxob3VzZS9zdGF0ZS9hY3RpdmF0aW9ucy17c2Vzc2lvbklkfS5qc29uYC5cbiAqIEVhY2ggTUNQIHNlc3Npb24gaXMgaWRlbnRpZmllZCBieSB0aGUgYERPTExIT1VTRV9TRVNTSU9OX0lEYCBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqXG4gKiBUaHJlYWQtc2FmZXR5IG5vdGU6IE5vZGUuanMgaXMgc2luZ2xlLXRocmVhZGVkLCBzbyBNYXAgb3BlcmF0aW9ucyBhcmUgc2FmZS5cbiAqIEZvciBtdWx0aS1wcm9jZXNzIGRlcGxveW1lbnRzIChmdXR1cmUgSFRUUFMpLCBjb25zaWRlciBSZWRpcyBvciBEQiBiYWNraW5nLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gU2Vzc2lvbiBJRCBzZXQgdmlhIGVudmlyb25tZW50OlxuICogLy8gRE9MTEhPVVNFX1NFU1NJT05fSUQ9Y2xhdWRlLWNvZGVcbiAqXG4gKiBjb25zdCBzdG9yZSA9IG5ldyBBY3RpdmF0aW9uU3RvcmUoZmlsZU9wcyk7XG4gKiBhd2FpdCBzdG9yZS5pbml0aWFsaXplKCk7ICAvLyBsb2FkcyB+Ly5kb2xsaG91c2Uvc3RhdGUvYWN0aXZhdGlvbnMtY2xhdWRlLWNvZGUuanNvblxuICpcbiAqIHN0b3JlLnJlY29yZEFjdGl2YXRpb24oJ3NraWxsJywgJ2NvZGUtcmV2aWV3ZXInKTtcbiAqIHN0b3JlLnJlY29yZEFjdGl2YXRpb24oJ3BlcnNvbmEnLCAnQ3JlYXRpdmUgRGV2JywgJ2NyZWF0aXZlLWRldi5tZCcpO1xuICpcbiAqIC8vIE9uIG5leHQgc2VydmVyIHN0YXJ0LCBpbml0aWFsaXplKCkgcmVzdG9yZXMgdGhlc2UgYWN0aXZhdGlvbnNcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQWN0aXZhdGlvblN0b3JlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBmaWxlT3BzOiBGaWxlT3BlcmF0aW9uc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhdGVEaXI6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBydW50aW1lU2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGVyc2lzdFBhdGg6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBlbmFibGVkOiBib29sZWFuO1xuXG4gIHByaXZhdGUgc3RhdGU6IFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZTtcblxuICBjb25zdHJ1Y3RvcihmaWxlT3BzOiBGaWxlT3BlcmF0aW9uc1NlcnZpY2UsIHN0YXRlRGlyPzogc3RyaW5nKSB7XG4gICAgdGhpcy5maWxlT3BzID0gZmlsZU9wcztcbiAgICBjb25zdCBpZGVudGl0eSA9IHJlc29sdmVTZXNzaW9uSWRlbnRpdHkoKTtcbiAgICB0aGlzLnNlc3Npb25JZCA9IGlkZW50aXR5LnNlc3Npb25JZDtcbiAgICB0aGlzLnJ1bnRpbWVTZXNzaW9uSWQgPSBpZGVudGl0eS5ydW50aW1lU2Vzc2lvbklkO1xuICAgIHRoaXMuZW5hYmxlZCA9IGlzUGVyc2lzdGVuY2VFbmFibGVkKCk7XG4gICAgdGhpcy5zdGF0ZURpciA9IHN0YXRlRGlyID8/IHBhdGguam9pbihvcy5ob21lZGlyKCksICcuZG9sbGhvdXNlJywgJ3N0YXRlJyk7XG4gICAgdGhpcy5wZXJzaXN0UGF0aCA9IHBhdGguam9pbih0aGlzLnN0YXRlRGlyLCBgYWN0aXZhdGlvbnMtJHt0aGlzLnNlc3Npb25JZH0uanNvbmApO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuY3JlYXRlRW1wdHlTdGF0ZSgpO1xuICAgIHRoaXMubG9nUmVzb2x2ZWRTZXNzaW9uSWRlbnRpdHkoaWRlbnRpdHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgcGVyc2lzdGVkIGFjdGl2YXRpb25zIGZyb20gZGlzay5cbiAgICogQ2FsbCBvbmNlIGFmdGVyIGNvbnN0cnVjdGlvbiB0byByZXN0b3JlIHN0YXRlIGZyb20gYSBwcmV2aW91cyBzZXNzaW9uLlxuICAgKiBJZiB0aGUgZmlsZSBpcyBtaXNzaW5nIG9yIGNvcnJ1cHQsIHN0YXJ0cyB3aXRoIGVtcHR5IGFjdGl2YXRpb25zLlxuICAgKi9cbiAgYXN5bmMgaW5pdGlhbGl6ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlZCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdbQWN0aXZhdGlvblN0b3JlXSBQZXJzaXN0ZW5jZSBkaXNhYmxlZCB2aWEgRE9MTEhPVVNFX0FDVElWQVRJT05fUEVSU0lTVEVOQ0UnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHRoaXMuZmlsZU9wcy5yZWFkRmlsZSh0aGlzLnBlcnNpc3RQYXRoKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGNvbnRlbnQpIGFzIFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZTtcblxuICAgICAgaWYgKGRhdGEudmVyc2lvbiA9PT0gMSAmJiBkYXRhLmFjdGl2YXRpb25zICYmIHR5cGVvZiBkYXRhLmFjdGl2YXRpb25zID09PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyBWYWxpZGF0ZSBhbmQgbG9hZCBvbmx5IGtub3duIGVsZW1lbnQgdHlwZXNcbiAgICAgICAgZm9yIChjb25zdCBbdHlwZSwgYWN0aXZhdGlvbnNdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEuYWN0aXZhdGlvbnMpKSB7XG4gICAgICAgICAgaWYgKEFDVElWQVRBQkxFX1RZUEVTLmhhcyh0eXBlKSAmJiBBcnJheS5pc0FycmF5KGFjdGl2YXRpb25zKSkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZS5hY3RpdmF0aW9uc1t0eXBlXSA9IGFjdGl2YXRpb25zLmZsYXRNYXAoKGEpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFhIHx8IHR5cGVvZiBhLm5hbWUgIT09ICdzdHJpbmcnKSByZXR1cm4gW107XG5cbiAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemVBY3RpdmF0aW9uSWRlbnRpZmllcihhLm5hbWUpO1xuICAgICAgICAgICAgICBpZiAoIW5vcm1hbGl6ZWROYW1lKSByZXR1cm4gW107XG5cbiAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZEZpbGVuYW1lID0gdHlwZW9mIGEuZmlsZW5hbWUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgPyBub3JtYWxpemVBY3RpdmF0aW9uSWRlbnRpZmllcihhLmZpbGVuYW1lKVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgIHJldHVybiBbe1xuICAgICAgICAgICAgICAgIC4uLmEsXG4gICAgICAgICAgICAgICAgbmFtZTogbm9ybWFsaXplZE5hbWUsXG4gICAgICAgICAgICAgICAgLi4uKG5vcm1hbGl6ZWRGaWxlbmFtZSA/IHsgZmlsZW5hbWU6IG5vcm1hbGl6ZWRGaWxlbmFtZSB9IDoge30pLFxuICAgICAgICAgICAgICB9XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRvdGFsQ291bnQgPSB0aGlzLmdldFRvdGFsQWN0aXZhdGlvbkNvdW50KCk7XG4gICAgICAgIGlmICh0b3RhbENvdW50ID4gMCkge1xuICAgICAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgYFtBY3RpdmF0aW9uU3RvcmVdIFJlc3RvcmVkICR7dG90YWxDb3VudH0gYWN0aXZhdGlvbihzKSBmb3Igc2Vzc2lvbiAnJHt0aGlzLnNlc3Npb25JZH0nYFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgICB0eXBlOiAnRUxFTUVOVF9BQ1RJVkFURUQnLFxuICAgICAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICAgICAgc291cmNlOiAnQWN0aXZhdGlvblN0b3JlLmluaXRpYWxpemUnLFxuICAgICAgICAgICAgZGV0YWlsczogYFJlc3RvcmVkICR7dG90YWxDb3VudH0gYWN0aXZhdGlvbihzKSBmcm9tIGRpc2sgZm9yIHNlc3Npb24gJyR7dGhpcy5zZXNzaW9uSWR9J2AsXG4gICAgICAgICAgICBhZGRpdGlvbmFsRGF0YToge1xuICAgICAgICAgICAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkLFxuICAgICAgICAgICAgICBjb3VudHM6IHRoaXMuZ2V0QWN0aXZhdGlvbkNvdW50cygpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoKGVycm9yIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQWN0aXZhdGlvblN0b3JlXSBObyBhY3RpdmF0aW9uIGZpbGUgZm91bmQgZm9yIHNlc3Npb24gJyR7dGhpcy5zZXNzaW9uSWR9Jywgc3RhcnRpbmcgZnJlc2hgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBbQWN0aXZhdGlvblN0b3JlXSBGYWlsZWQgdG8gbG9hZCBhY3RpdmF0aW9uIGZpbGUgZm9yIHNlc3Npb24gJyR7dGhpcy5zZXNzaW9uSWR9Jywgc3RhcnRpbmcgZnJlc2hgLCB7IGVycm9yIH0pO1xuXG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnRUxFTUVOVF9BQ1RJVkFURUQnLFxuICAgICAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgICAgICBzb3VyY2U6ICdBY3RpdmF0aW9uU3RvcmUuaW5pdGlhbGl6ZScsXG4gICAgICAgICAgZGV0YWlsczogYEZhaWxlZCB0byBsb2FkIGFjdGl2YXRpb24gZmlsZSBmb3Igc2Vzc2lvbiAnJHt0aGlzLnNlc3Npb25JZH0nIOKAlCBzdGFydGluZyBmcmVzaCAocG9zc2libGUgZGF0YSBjb3JydXB0aW9uKWAsXG4gICAgICAgICAgYWRkaXRpb25hbERhdGE6IHsgZXJyb3I6IFN0cmluZyhlcnJvciksIHNlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZCBhbiBlbGVtZW50IGFjdGl2YXRpb24uIEZpcmUtYW5kLWZvcmdldCBwZXJzaXN0LlxuICAgKi9cbiAgcmVjb3JkQWN0aXZhdGlvbihlbGVtZW50VHlwZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGZpbGVuYW1lPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZWQpIHJldHVybjtcblxuICAgIGNvbnN0IHR5cGUgPSBub3JtYWxpemVUeXBlKGVsZW1lbnRUeXBlKTtcbiAgICBpZiAoIUFDVElWQVRBQkxFX1RZUEVTLmhhcyh0eXBlKSkgcmV0dXJuO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIobmFtZSk7XG4gICAgaWYgKCFub3JtYWxpemVkTmFtZSkgcmV0dXJuO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWxlbmFtZSA9IHR5cGVvZiBmaWxlbmFtZSA9PT0gJ3N0cmluZydcbiAgICAgID8gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIoZmlsZW5hbWUpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmICghdGhpcy5zdGF0ZS5hY3RpdmF0aW9uc1t0eXBlXSkge1xuICAgICAgdGhpcy5zdGF0ZS5hY3RpdmF0aW9uc1t0eXBlXSA9IFtdO1xuICAgIH1cblxuICAgIC8vIERlZHVwbGljYXRlLiBVcGdyYWRlIGxlZ2FjeSBuYW1lLW9ubHkgcmVjb3JkcyB3aGVuIGEgc3RhYmxlIGZpbGVuYW1lIGlzXG4gICAgLy8gbm93IGF2YWlsYWJsZSBzbyBmdXR1cmUgcmVzdGFydHMgc3Vydml2ZSBleHRlcm5hbCBtZXRhZGF0YSByZW5hbWVzLlxuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5zdGF0ZS5hY3RpdmF0aW9uc1t0eXBlXSE7XG4gICAgbGV0IGFjdGl2ZVJlY29yZCA9IG5vcm1hbGl6ZWRGaWxlbmFtZVxuICAgICAgPyBleGlzdGluZy5maW5kKGEgPT4gYS5maWxlbmFtZSA9PT0gbm9ybWFsaXplZEZpbGVuYW1lKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgYWN0aXZlUmVjb3JkID8/PSBleGlzdGluZy5maW5kKGEgPT5cbiAgICAgIGEubmFtZSA9PT0gbm9ybWFsaXplZE5hbWUgJiYgKCFub3JtYWxpemVkRmlsZW5hbWUgfHwgIWEuZmlsZW5hbWUpXG4gICAgKTtcbiAgICBpZiAoYWN0aXZlUmVjb3JkKSB7XG4gICAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgaWYgKGFjdGl2ZVJlY29yZC5uYW1lICE9PSBub3JtYWxpemVkTmFtZSkge1xuICAgICAgICBhY3RpdmVSZWNvcmQubmFtZSA9IG5vcm1hbGl6ZWROYW1lO1xuICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChub3JtYWxpemVkRmlsZW5hbWUgJiYgYWN0aXZlUmVjb3JkLmZpbGVuYW1lICE9PSBub3JtYWxpemVkRmlsZW5hbWUpIHtcbiAgICAgICAgYWN0aXZlUmVjb3JkLmZpbGVuYW1lID0gbm9ybWFsaXplZEZpbGVuYW1lO1xuICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMucGVyc2lzdEFzeW5jKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXhpc3RpbmcucHVzaCh7XG4gICAgICBuYW1lOiBub3JtYWxpemVkTmFtZSxcbiAgICAgIC4uLihub3JtYWxpemVkRmlsZW5hbWUgPyB7IGZpbGVuYW1lOiBub3JtYWxpemVkRmlsZW5hbWUgfSA6IHt9KSxcbiAgICAgIGFjdGl2YXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgfSk7XG5cbiAgICB0aGlzLnBlcnNpc3RBc3luYygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZCBhbiBlbGVtZW50IGRlYWN0aXZhdGlvbi4gRmlyZS1hbmQtZm9yZ2V0IHBlcnNpc3QuXG4gICAqL1xuICByZWNvcmREZWFjdGl2YXRpb24oZWxlbWVudFR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nLCBmaWxlbmFtZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lbmFibGVkKSByZXR1cm47XG5cbiAgICBjb25zdCB0eXBlID0gbm9ybWFsaXplVHlwZShlbGVtZW50VHlwZSk7XG4gICAgaWYgKCFBQ1RJVkFUQUJMRV9UWVBFUy5oYXModHlwZSkpIHJldHVybjtcbiAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZUFjdGl2YXRpb25JZGVudGlmaWVyKG5hbWUpO1xuICAgIGlmICghbm9ybWFsaXplZE5hbWUpIHJldHVybjtcbiAgICBjb25zdCBub3JtYWxpemVkRmlsZW5hbWUgPSB0eXBlb2YgZmlsZW5hbWUgPT09ICdzdHJpbmcnXG4gICAgICA/IG5vcm1hbGl6ZUFjdGl2YXRpb25JZGVudGlmaWVyKGZpbGVuYW1lKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBhY3RpdmF0aW9ucyA9IHRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV07XG4gICAgaWYgKCFhY3RpdmF0aW9ucykgcmV0dXJuO1xuXG4gICAgY29uc3QgaW5pdGlhbExlbmd0aCA9IGFjdGl2YXRpb25zLmxlbmd0aDtcbiAgICB0aGlzLnN0YXRlLmFjdGl2YXRpb25zW3R5cGVdID0gYWN0aXZhdGlvbnMuZmlsdGVyKGEgPT4ge1xuICAgICAgY29uc3Qgc2hvdWxkUmVtb3ZlID0gbm9ybWFsaXplZEZpbGVuYW1lXG4gICAgICAgID8gYS5maWxlbmFtZSA9PT0gbm9ybWFsaXplZEZpbGVuYW1lIHx8ICghYS5maWxlbmFtZSAmJiBhLm5hbWUgPT09IG5vcm1hbGl6ZWROYW1lKVxuICAgICAgICA6IGEubmFtZSA9PT0gbm9ybWFsaXplZE5hbWUgfHwgYS5maWxlbmFtZSA9PT0gbm9ybWFsaXplZE5hbWU7XG4gICAgICByZXR1cm4gIXNob3VsZFJlbW92ZTtcbiAgICB9KTtcblxuICAgIC8vIE9ubHkgcGVyc2lzdCBpZiBzb21ldGhpbmcgYWN0dWFsbHkgY2hhbmdlZFxuICAgIGlmICh0aGlzLnN0YXRlLmFjdGl2YXRpb25zW3R5cGVdIS5sZW5ndGggIT09IGluaXRpYWxMZW5ndGgpIHtcbiAgICAgIHRoaXMucGVyc2lzdEFzeW5jKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHNwZWNpZmljIGFjdGl2YXRpb24gYnkgc3RhYmxlIGlkZW50aXR5IHdoZW4gYXZhaWxhYmxlLlxuICAgKiBVc2VkIGR1cmluZyByZXN0b3JlIHRvIHBydW5lIHN0YWxlIGVudHJpZXMuXG4gICAqL1xuICByZW1vdmVTdGFsZUFjdGl2YXRpb24oZWxlbWVudFR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nLCBmaWxlbmFtZT86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkRGVhY3RpdmF0aW9uKGVsZW1lbnRUeXBlLCBuYW1lLCBmaWxlbmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBwZXJzaXN0ZWQgYWN0aXZhdGlvbnMgZm9yIGEgZ2l2ZW4gZWxlbWVudCB0eXBlLlxuICAgKi9cbiAgZ2V0QWN0aXZhdGlvbnMoZWxlbWVudFR5cGU6IHN0cmluZyk6IFBlcnNpc3RlZEFjdGl2YXRpb25bXSB7XG4gICAgY29uc3QgdHlwZSA9IG5vcm1hbGl6ZVR5cGUoZWxlbWVudFR5cGUpO1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmFjdGl2YXRpb25zW3R5cGVdID8gWy4uLnRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV0hXSA6IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWQgcGVyc2lzdGVkIGFjdGl2YXRpb24gc25hcHNob3RzIGZyb20gZGlzayBmb3IgcmVwb3J0aW5nL2RpYWdub3N0aWNzLlxuICAgKlxuICAgKiBUaGlzIGludGVudGlvbmFsbHkgZG9lcyBub3QgbXV0YXRlIHRoZSBzdG9yZSdzIGluLW1lbW9yeSBzdGF0ZSwgYW5kIGl0IGlzXG4gICAqIHNhZmUgdG8gY2FsbCBmcm9tIHRoZSB3ZWIgY29uc29sZSB0byBpbnNwZWN0IG90aGVyIHNlc3Npb25zJyBwZXJzaXN0ZWRcbiAgICogYWN0aXZhdGlvbnMgd2l0aG91dCBjaGFuZ2luZyBsaXZlIHBvbGljeSBlbmZvcmNlbWVudCBmb3IgdGhlIGN1cnJlbnRcbiAgICogcHJvY2Vzcy5cbiAgICovXG4gIGFzeW5jIGxpc3RQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGVzKHNlc3Npb25JZD86IHN0cmluZyk6IFByb21pc2U8UGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlU25hcHNob3RbXT4ge1xuICAgIGlmICghdGhpcy5lbmFibGVkKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybWFsaXplZFNlc3Npb25JZCA9IHR5cGVvZiBzZXNzaW9uSWQgPT09ICdzdHJpbmcnICYmIHNlc3Npb25JZC50cmltKClcbiAgICAgID8gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIoc2Vzc2lvbklkKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZmlsZW5hbWVzID0gYXdhaXQgdGhpcy5nZXRQZXJzaXN0ZWRBY3RpdmF0aW9uRmlsZW5hbWVzKG5vcm1hbGl6ZWRTZXNzaW9uSWQpO1xuICAgICAgY29uc3Qgc3RhdGVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIGZpbGVuYW1lcy5tYXAoZmlsZW5hbWUgPT4gdGhpcy5yZWFkUGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlKGZpbGVuYW1lKSksXG4gICAgICApO1xuICAgICAgcmV0dXJuIHN0YXRlc1xuICAgICAgICAuZmxhdE1hcCgoc3RhdGUpID0+IChzdGF0ZSA/IFtzdGF0ZV0gOiBbXSkpXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnNlc3Npb25JZC5sb2NhbGVDb21wYXJlKGIuc2Vzc2lvbklkKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICgoZXJyb3IgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlICE9PSAnRU5PRU5UJykge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ1tBY3RpdmF0aW9uU3RvcmVdIEZhaWxlZCB0byBlbnVtZXJhdGUgYWN0aXZhdGlvbiBzbmFwc2hvdHMgZm9yIHJlcG9ydGluZycsIHtcbiAgICAgICAgICBzdGF0ZURpcjogdGhpcy5zdGF0ZURpcixcbiAgICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFBlcnNpc3RlZEFjdGl2YXRpb25GaWxlbmFtZXMoc2Vzc2lvbklkPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGlmIChzZXNzaW9uSWQpIHtcbiAgICAgIHJldHVybiBbYGFjdGl2YXRpb25zLSR7c2Vzc2lvbklkfS5qc29uYF07XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZW5hbWVzID0gYXdhaXQgZnMucmVhZGRpcih0aGlzLnN0YXRlRGlyKTtcbiAgICByZXR1cm4gZmlsZW5hbWVzLmZpbHRlcihuYW1lID0+IC9eYWN0aXZhdGlvbnMtW14uXStcXC5qc29uJC91LnRlc3QobmFtZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWFkUGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZVNuYXBzaG90IHwgbnVsbD4ge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMuc3RhdGVEaXIsIGZpbGVuYW1lKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgdGhpcy5maWxlT3BzLnJlYWRGaWxlKGZpbGVQYXRoKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGNvbnRlbnQpIGFzIFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZTtcbiAgICAgIGlmICghdGhpcy5pc1BlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZShkYXRhKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2Vzc2lvbklkOiBkYXRhLnNlc3Npb25JZCxcbiAgICAgICAgbGFzdFVwZGF0ZWQ6IGRhdGEubGFzdFVwZGF0ZWQsXG4gICAgICAgIGFjdGl2YXRpb25zOiB0aGlzLm5vcm1hbGl6ZVBlcnNpc3RlZEFjdGl2YXRpb25zKGRhdGEuYWN0aXZhdGlvbnMpLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5sb2dTbmFwc2hvdFJlYWRFcnJvcihmaWxlUGF0aCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc1BlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZShkYXRhOiBQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZGF0YS52ZXJzaW9uID09PSAxXG4gICAgICAmJiB0eXBlb2YgZGF0YS5zZXNzaW9uSWQgPT09ICdzdHJpbmcnXG4gICAgICAmJiBCb29sZWFuKGRhdGEuYWN0aXZhdGlvbnMpXG4gICAgICAmJiB0eXBlb2YgZGF0YS5hY3RpdmF0aW9ucyA9PT0gJ29iamVjdCc7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZVBlcnNpc3RlZEFjdGl2YXRpb25zKGFjdGl2YXRpb25zOiBQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGVbJ2FjdGl2YXRpb25zJ10pOiBSZWNvcmQ8c3RyaW5nLCBQZXJzaXN0ZWRBY3RpdmF0aW9uW10+IHtcbiAgICBjb25zdCBub3JtYWxpemVkOiBSZWNvcmQ8c3RyaW5nLCBQZXJzaXN0ZWRBY3RpdmF0aW9uW10+ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IFt0eXBlLCBlbnRyaWVzXSBvZiBPYmplY3QuZW50cmllcyhhY3RpdmF0aW9ucykpIHtcbiAgICAgIGlmICghQUNUSVZBVEFCTEVfVFlQRVMuaGFzKHR5cGUpIHx8ICFBcnJheS5pc0FycmF5KGVudHJpZXMpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBub3JtYWxpemVkRW50cmllcyA9IGVudHJpZXMuZmxhdE1hcCgoZW50cnkpID0+IHRoaXMubm9ybWFsaXplUGVyc2lzdGVkQWN0aXZhdGlvbihlbnRyeSkpO1xuICAgICAgaWYgKG5vcm1hbGl6ZWRFbnRyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbm9ybWFsaXplZFt0eXBlXSA9IG5vcm1hbGl6ZWRFbnRyaWVzO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub3JtYWxpemVkO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVQZXJzaXN0ZWRBY3RpdmF0aW9uKGVudHJ5OiBQZXJzaXN0ZWRBY3RpdmF0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFBlcnNpc3RlZEFjdGl2YXRpb25bXSB7XG4gICAgaWYgKCFlbnRyeSB8fCB0eXBlb2YgZW50cnkubmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZUFjdGl2YXRpb25JZGVudGlmaWVyKGVudHJ5Lm5hbWUpO1xuICAgIGlmICghbm9ybWFsaXplZE5hbWUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBub3JtYWxpemVkRmlsZW5hbWUgPSB0eXBlb2YgZW50cnkuZmlsZW5hbWUgPT09ICdzdHJpbmcnXG4gICAgICA/IG5vcm1hbGl6ZUFjdGl2YXRpb25JZGVudGlmaWVyKGVudHJ5LmZpbGVuYW1lKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gW3tcbiAgICAgIC4uLmVudHJ5LFxuICAgICAgbmFtZTogbm9ybWFsaXplZE5hbWUsXG4gICAgICAuLi4obm9ybWFsaXplZEZpbGVuYW1lID8geyBmaWxlbmFtZTogbm9ybWFsaXplZEZpbGVuYW1lIH0gOiB7fSksXG4gICAgfV07XG4gIH1cblxuICBwcml2YXRlIGxvZ1NuYXBzaG90UmVhZEVycm9yKGZpbGVQYXRoOiBzdHJpbmcsIGVycm9yOiB1bmtub3duKTogdm9pZCB7XG4gICAgaWYgKChlcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9nZ2VyLmRlYnVnKCdbQWN0aXZhdGlvblN0b3JlXSBTa2lwcGluZyB1bnJlYWRhYmxlIGFjdGl2YXRpb24gc25hcHNob3QgZHVyaW5nIHJlcG9ydGluZycsIHtcbiAgICAgIGZpbGVQYXRoLFxuICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNlc3Npb24gSUQgdGhpcyBzdG9yZSBpcyBzY29wZWQgdG8uXG4gICAqL1xuICBnZXRTZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uSWQ7XG4gIH1cblxuICAvKipcbiAgICogUnVudGltZS11bmlxdWUgc2Vzc2lvbiBpZGVudGlmaWVyIHVzZWQgZm9yIGxpdmUgY29uc29sZS9zZXNzaW9uIHJlZ2lzdHJ5XG4gICAqIHN1cmZhY2VzIHdoZW4gdGhlIHN0YWJsZSBwZXJzaXN0ZW5jZSBpZGVudGl0eSBpcyBzaGFyZWQgYWNyb3NzIHVubmFtZWRcbiAgICogc2Vzc2lvbnMuXG4gICAqL1xuICBnZXRSdW50aW1lU2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucnVudGltZVNlc3Npb25JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBwZXJzaXN0ZW5jZSBpcyBlbmFibGVkLlxuICAgKi9cbiAgaXNFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVuYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIHBlcnNpc3RlZCBhY3RpdmF0aW9ucy4gVXNlZCBmb3IgdGVzdGluZyBvciBhZG1pbiByZXNldC5cbiAgICovXG4gIGNsZWFyQWxsKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUgPSB0aGlzLmNyZWF0ZUVtcHR5U3RhdGUoKTtcbiAgICBpZiAodGhpcy5lbmFibGVkKSB7XG4gICAgICB0aGlzLnBlcnNpc3RBc3luYygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlLWFuZC1mb3JnZXQgcGVyc2lzdGVuY2Ugd2l0aCByZXRyeSBmb3IgdHJhbnNpZW50IGRpc2sgZmFpbHVyZXMuXG4gICAqIFJldHJpZXMgdXAgdG8gUEVSU0lTVF9NQVhfUkVUUklFUyB0aW1lcyB3aXRoIGEgc2hvcnQgZGVsYXkuXG4gICAqIERpc2sgZmFpbHVyZSBkb2VzIG5vdCBibG9jayBhY3RpdmF0aW9uIG9wZXJhdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIHBlcnNpc3RBc3luYygpOiB2b2lkIHtcbiAgICB0aGlzLnBlcnNpc3RXaXRoUmV0cnkoMCkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgbG9nZ2VyLndhcm4oJ1tBY3RpdmF0aW9uU3RvcmVdIEZhaWxlZCB0byBwZXJzaXN0IGFjdGl2YXRpb24gc3RhdGUgYWZ0ZXIgcmV0cmllcycsIHsgZXJyb3IgfSk7XG5cbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ0VMRU1FTlRfQUNUSVZBVEVEJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgICBzb3VyY2U6ICdBY3RpdmF0aW9uU3RvcmUucGVyc2lzdEFzeW5jJyxcbiAgICAgICAgZGV0YWlsczogYEZhaWxlZCB0byBwZXJzaXN0IGFjdGl2YXRpb24gc3RhdGUgZm9yIHNlc3Npb24gJyR7dGhpcy5zZXNzaW9uSWR9JyBhZnRlciAke1BFUlNJU1RfTUFYX1JFVFJJRVMgKyAxfSBhdHRlbXB0cyDigJQgc3RhdGUgY29udGludWVzIGluLW1lbW9yeSBvbmx5YCxcbiAgICAgICAgYWRkaXRpb25hbERhdGE6IHsgZXJyb3I6IFN0cmluZyhlcnJvciksIHNlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGVtcHQgdG8gcGVyc2lzdCB3aXRoIHJldHJpZXMgZm9yIHRyYW5zaWVudCBmYWlsdXJlcyAoZS5nLiwgRUJVU1ksIEVBR0FJTikuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHBlcnNpc3RXaXRoUmV0cnkoYXR0ZW1wdDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucGVyc2lzdCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoYXR0ZW1wdCA8IFBFUlNJU1RfTUFYX1JFVFJJRVMpIHtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIFBFUlNJU1RfUkVUUllfREVMQVlfTVMpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyc2lzdFdpdGhSZXRyeShhdHRlbXB0ICsgMSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV3JpdGUgY3VycmVudCBhY3RpdmF0aW9uIHN0YXRlIHRvIGRpc2suXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHBlcnNpc3QoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zdGF0ZS5sYXN0VXBkYXRlZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICBhd2FpdCBmcy5ta2Rpcih0aGlzLnN0YXRlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBhd2FpdCB0aGlzLmZpbGVPcHMud3JpdGVGaWxlKHRoaXMucGVyc2lzdFBhdGgsIEpTT04uc3RyaW5naWZ5KHRoaXMuc3RhdGUsIG51bGwsIDIpKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRW1wdHlTdGF0ZSgpOiBQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGUge1xuICAgIHJldHVybiB7XG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb25JZCxcbiAgICAgIGxhc3RVcGRhdGVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBhY3RpdmF0aW9uczoge30sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VG90YWxBY3RpdmF0aW9uQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnN0YXRlLmFjdGl2YXRpb25zKS5yZWR1Y2UoXG4gICAgICAoc3VtLCBhcnIpID0+IHN1bSArIChhcnI/Lmxlbmd0aCA/PyAwKSwgMFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEFjdGl2YXRpb25Db3VudHMoKTogUmVjb3JkPHN0cmluZywgbnVtYmVyPiB7XG4gICAgY29uc3QgY291bnRzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG4gICAgZm9yIChjb25zdCBbdHlwZSwgYXJyXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnN0YXRlLmFjdGl2YXRpb25zKSkge1xuICAgICAgaWYgKGFyciAmJiBhcnIubGVuZ3RoID4gMCkge1xuICAgICAgICBjb3VudHNbdHlwZV0gPSBhcnIubGVuZ3RoO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY291bnRzO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2dSZXNvbHZlZFNlc3Npb25JZGVudGl0eShpZGVudGl0eTogU2Vzc2lvbklkZW50aXR5KTogdm9pZCB7XG4gICAgY29uc3QgcmF3RW52VmFsdWUgPSBwcm9jZXNzLmVudi5ET0xMSE9VU0VfU0VTU0lPTl9JRD8udHJpbSgpO1xuICAgIGlmIChpZGVudGl0eS5zb3VyY2UgPT09ICdlbnYnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFyYXdFbnZWYWx1ZSkge1xuICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgIGBbQWN0aXZhdGlvblN0b3JlXSBObyBET0xMSE9VU0VfU0VTU0lPTl9JRCBzZXQg4oCUIGRlcml2ZWQgc3RhYmxlIHNlc3Npb24gJyR7aWRlbnRpdHkuc2Vzc2lvbklkfScgZnJvbSB3b3Jrc3BhY2UgY29udGV4dDsgcnVudGltZSBzZXNzaW9uICcke2lkZW50aXR5LnJ1bnRpbWVTZXNzaW9uSWR9JyByZW1haW5zIHVuaXF1ZSBmb3IgdGhpcyBwcm9jZXNzLmBcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFTRVNTSU9OX0lEX1BBVFRFUk4udGVzdChyYXdFbnZWYWx1ZSkpIHtcbiAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICBgSW52YWxpZCBET0xMSE9VU0VfU0VTU0lPTl9JRCAnJHtyYXdFbnZWYWx1ZX0nIOKAlCBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIsIHRoZW4gYWxwaGFudW1lcmljL2h5cGhlbnMvdW5kZXJzY29yZXMsIDEtNjQgY2hhcnMuIFVzaW5nIGRlcml2ZWQgc2Vzc2lvbiAnJHtpZGVudGl0eS5zZXNzaW9uSWR9JyBpbnN0ZWFkLmBcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -18,8 +18,11 @@ export interface PolicyExportDeps {
|
|
|
18
18
|
getServerVersion: () => string;
|
|
19
19
|
}
|
|
20
20
|
export declare class PolicyExportService {
|
|
21
|
-
private deps;
|
|
22
|
-
|
|
21
|
+
private readonly deps;
|
|
22
|
+
private readonly policyDir;
|
|
23
|
+
private exportInFlight?;
|
|
24
|
+
private exportQueued;
|
|
25
|
+
constructor(deps: PolicyExportDeps, policyDir?: string);
|
|
23
26
|
/**
|
|
24
27
|
* Export current policy state to the bridge imports folder.
|
|
25
28
|
*
|
|
@@ -29,6 +32,9 @@ export declare class PolicyExportService {
|
|
|
29
32
|
* Skips silently if the bridge imports directory doesn't exist.
|
|
30
33
|
*/
|
|
31
34
|
exportPolicies(): Promise<void>;
|
|
35
|
+
private runExportLoop;
|
|
36
|
+
private drainExports;
|
|
37
|
+
private performExport;
|
|
32
38
|
private buildElementPolicies;
|
|
33
39
|
}
|
|
34
40
|
//# sourceMappingURL=PolicyExportService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PolicyExportService.d.ts","sourceRoot":"","sources":["../../src/services/PolicyExportService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAYH,MAAM,WAAW,gBAAgB;IAC/B,0BAA0B,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC,CAAC;IACpH,gBAAgB,EAAE,MAAM,MAAM,CAAC;CAChC;AAUD,qBAAa,mBAAmB;
|
|
1
|
+
{"version":3,"file":"PolicyExportService.d.ts","sourceRoot":"","sources":["../../src/services/PolicyExportService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAYH,MAAM,WAAW,gBAAgB;IAC/B,0BAA0B,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC,CAAC;IACpH,gBAAgB,EAAE,MAAM,MAAM,CAAC;CAChC;AAUD,qBAAa,mBAAmB;IAK5B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAL5B,OAAO,CAAC,cAAc,CAAC,CAAgB;IACvC,OAAO,CAAC,YAAY,CAAS;gBAGV,IAAI,EAAE,gBAAgB,EACtB,SAAS,GAAE,MAAmB;IAGjD;;;;;;;OAOG;IACH,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;YAWjB,aAAa;YAiBb,YAAY;YAOZ,aAAa;IA8C3B,OAAO,CAAC,oBAAoB;CA+C7B"}
|
|
@@ -19,8 +19,12 @@ const POLICY_DIR = join(homedir(), '.dollhouse', 'bridge', 'imports', 'policies'
|
|
|
19
19
|
const POLICY_FILENAME = 'dollhousemcp-crude-policies.json';
|
|
20
20
|
export class PolicyExportService {
|
|
21
21
|
deps;
|
|
22
|
-
|
|
22
|
+
policyDir;
|
|
23
|
+
exportInFlight;
|
|
24
|
+
exportQueued = false;
|
|
25
|
+
constructor(deps, policyDir = POLICY_DIR) {
|
|
23
26
|
this.deps = deps;
|
|
27
|
+
this.policyDir = policyDir;
|
|
24
28
|
}
|
|
25
29
|
/**
|
|
26
30
|
* Export current policy state to the bridge imports folder.
|
|
@@ -30,13 +34,40 @@ export class PolicyExportService {
|
|
|
30
34
|
*
|
|
31
35
|
* Skips silently if the bridge imports directory doesn't exist.
|
|
32
36
|
*/
|
|
33
|
-
|
|
37
|
+
exportPolicies() {
|
|
34
38
|
if (!env.DOLLHOUSE_POLICY_EXPORT_ENABLED) {
|
|
35
|
-
return;
|
|
39
|
+
return Promise.resolve();
|
|
36
40
|
}
|
|
41
|
+
this.exportQueued = true;
|
|
42
|
+
this.exportInFlight ??= this.runExportLoop();
|
|
43
|
+
return this.exportInFlight;
|
|
44
|
+
}
|
|
45
|
+
async runExportLoop() {
|
|
46
|
+
try {
|
|
47
|
+
await this.drainExports();
|
|
48
|
+
}
|
|
49
|
+
finally {
|
|
50
|
+
this.exportInFlight = undefined;
|
|
51
|
+
// A request can arrive after drainExports() settles but before this
|
|
52
|
+
// continuation runs. Chain that trailing drain into the current promise
|
|
53
|
+
// so the request that queued it cannot resolve before its write finishes.
|
|
54
|
+
if (this.exportQueued) {
|
|
55
|
+
const trailing = this.runExportLoop();
|
|
56
|
+
this.exportInFlight = trailing;
|
|
57
|
+
await trailing;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
async drainExports() {
|
|
62
|
+
while (this.exportQueued) {
|
|
63
|
+
this.exportQueued = false;
|
|
64
|
+
await this.performExport();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async performExport() {
|
|
37
68
|
try {
|
|
38
69
|
// Check if bridge imports directory exists — skip if not
|
|
39
|
-
await access(
|
|
70
|
+
await access(this.policyDir);
|
|
40
71
|
}
|
|
41
72
|
catch {
|
|
42
73
|
// Bridge not installed or imports dir not created — skip silently
|
|
@@ -67,7 +98,7 @@ export class PolicyExportService {
|
|
|
67
98
|
element_policies: elementPolicies,
|
|
68
99
|
risk_scores: staticRules.risk_scores,
|
|
69
100
|
};
|
|
70
|
-
const filePath = join(
|
|
101
|
+
const filePath = join(this.policyDir, POLICY_FILENAME);
|
|
71
102
|
await writeFile(filePath, JSON.stringify(policy, null, 2), 'utf-8');
|
|
72
103
|
logger.info('[PolicyExportService] Policies exported', { filePath, elementCount: elementPolicies.active_element_count });
|
|
73
104
|
}
|
|
@@ -118,4 +149,4 @@ export class PolicyExportService {
|
|
|
118
149
|
};
|
|
119
150
|
}
|
|
120
151
|
}
|
|
121
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9saWN5RXhwb3J0U2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9Qb2xpY3lFeHBvcnRTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNsQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXZDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNsRixNQUFNLGVBQWUsR0FBRyxrQ0FBa0MsQ0FBQztBQWUzRCxNQUFNLE9BQU8sbUJBQW1CO0lBQ3RCLElBQUksQ0FBbUI7SUFFL0IsWUFBWSxJQUFzQjtRQUNoQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILEtBQUssQ0FBQyxjQUFjO1FBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsK0JBQStCLEVBQUUsQ0FBQztZQUN6QyxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILHlEQUF5RDtZQUN6RCxNQUFNLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1Asa0VBQWtFO1lBQ2xFLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxX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QUFZLENBQUMsQ0FBQztTQUNuRCxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQb2xpY3lFeHBvcnRTZXJ2aWNlIC0gRXhwb3J0cyB0b29sIGNsYXNzaWZpY2F0aW9uIHBvbGljaWVzIGZvciBicmlkZ2UgY29uc3VtcHRpb25cbiAqXG4gKiBXcml0ZXMgYSBKU09OIHBvbGljeSBmaWxlIHRvIH4vLmRvbGxob3VzZS9icmlkZ2UvaW1wb3J0cy9wb2xpY2llcy8gc28gdGhlXG4gKiBEb2xsaG91c2VCcmlkZ2UgcGVybWlzc2lvbi1wcm9tcHQgc2VydmVyIGNhbiBldmFsdWF0ZSBwZXJtaXNzaW9ucyBsb2NhbGx5LlxuICpcbiAqIFdyaXRlLW9ubHk6IHB1Ymxpc2hlcyBhbmQgZm9yZ2V0cy4gU2tpcHMgc2lsZW50bHkgaWYgdGhlIGJyaWRnZSBmb2xkZXJcbiAqIGRvZXNuJ3QgZXhpc3QgKGJyaWRnZSBtYXkgbm90IGJlIGluc3RhbGxlZCkuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vRG9sbGhvdXNlTUNQL21jcC1zZXJ2ZXItdjItcmVmYWN0b3IvaXNzdWVzLzc2MlxuICovXG5cbmltcG9ydCB7IHdyaXRlRmlsZSwgYWNjZXNzIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IGdldFN0YXRpY1BvbGljeURhdGEgfSBmcm9tICcuLi9oYW5kbGVycy9tY3AtYXFsL3BvbGljaWVzL1Rvb2xDbGFzc2lmaWNhdGlvbi5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZW52IH0gZnJvbSAnLi4vY29uZmlnL2Vudi5qcyc7XG5cbmNvbnN0IFBPTElDWV9ESVIgPSBqb2luKGhvbWVkaXIoKSwgJy5kb2xsaG91c2UnLCAnYnJpZGdlJywgJ2ltcG9ydHMnLCAncG9saWNpZXMnKTtcbmNvbnN0IFBPTElDWV9GSUxFTkFNRSA9ICdkb2xsaG91c2VtY3AtY3J1ZGUtcG9saWNpZXMuanNvbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9saWN5RXhwb3J0RGVwcyB7XG4gIGdldEFjdGl2ZUVsZW1lbnRzRm9yUG9saWN5OiAoKSA9PiBQcm9taXNlPEFycmF5PHsgdHlwZTogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9Pj47XG4gIGdldFNlcnZlclZlcnNpb246ICgpID0+IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEVsZW1lbnRQb2xpY3lFbnRyeSB7XG4gIHR5cGU6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBhbGxvd19wYXR0ZXJuczogc3RyaW5nW107XG4gIGNvbmZpcm1fcGF0dGVybnM6IHN0cmluZ1tdO1xuICBkZW55X3BhdHRlcm5zOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNsYXNzIFBvbGljeUV4cG9ydFNlcnZpY2Uge1xuICBwcml2YXRlIGRlcHM6IFBvbGljeUV4cG9ydERlcHM7XG5cbiAgY29uc3RydWN0b3IoZGVwczogUG9saWN5RXhwb3J0RGVwcykge1xuICAgIHRoaXMuZGVwcyA9IGRlcHM7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IGN1cnJlbnQgcG9saWN5IHN0YXRlIHRvIHRoZSBicmlkZ2UgaW1wb3J0cyBmb2xkZXIuXG4gICAqXG4gICAqIEdhdGhlcnMgc3RhdGljIGNsYXNzaWZpY2F0aW9uIHJ1bGVzIGFuZCBhY3RpdmUgZWxlbWVudCBwb2xpY2llcyxcbiAgICogd3JpdGVzIGEgc2luZ2xlIEpTT04gZmlsZSBjb25mb3JtaW5nIHRvIGJyaWRnZSBwb2xpY3kgc2NoZW1hIHYxLjAuXG4gICAqXG4gICAqIFNraXBzIHNpbGVudGx5IGlmIHRoZSBicmlkZ2UgaW1wb3J0cyBkaXJlY3RvcnkgZG9lc24ndCBleGlzdC5cbiAgICovXG4gIGFzeW5jIGV4cG9ydFBvbGljaWVzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghZW52LkRPTExIT1VTRV9QT0xJQ1lfRVhQT1JUX0VOQUJMRUQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gQ2hlY2sgaWYgYnJpZGdlIGltcG9ydHMgZGlyZWN0b3J5IGV4aXN0cyDigJQgc2tpcCBpZiBub3RcbiAgICAgIGF3YWl0IGFjY2VzcyhQT0xJQ1lfRElSKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEJyaWRnZSBub3QgaW5zdGFsbGVkIG9yIGltcG9ydHMgZGlyIG5vdCBjcmVhdGVkIOKAlCBza2lwIHNpbGVudGx5XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXRpY1J1bGVzID0gZ2V0U3RhdGljUG9saWN5RGF0YSgpO1xuICAgICAgY29uc3QgYWN0aXZlRWxlbWVudHMgPSBhd2FpdCB0aGlzLmRlcHMuZ2V0QWN0aXZlRWxlbWVudHNGb3JQb2xpY3koKTtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmRlcHMuZ2V0U2VydmVyVmVyc2lvbigpO1xuXG4gICAgICBjb25zdCBlbGVtZW50UG9saWNpZXMgPSB0aGlzLmJ1aWxkRWxlbWVudFBvbGljaWVzKGFjdGl2ZUVsZW1lbnRzKTtcblxuICAgICAgY29uc3QgcG9saWN5ID0ge1xuICAgICAgICBzY2hlbWFfdmVyc2lvbjogJzEuMCcsXG4gICAgICAgIHNlcnZlcjoge1xuICAgICAgICAgIG5hbWU6ICdEb2xsaG91c2VNQ1AtVjItUmVmYWN0b3IgQ1JVREUnLFxuICAgICAgICAgIHZlcnNpb24sXG4gICAgICAgIH0sXG4gICAgICAgIGV4cG9ydGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIHN0YXRpY19ydWxlczoge1xuICAgICAgICAgIHNhZmVfdG9vbHM6IHN0YXRpY1J1bGVzLnNhZmVfdG9vbHMsXG4gICAgICAgICAgc2FmZV9iYXNoX3BhdHRlcm5zOiBzdGF0aWNSdWxlcy5zYWZlX2Jhc2hfcGF0dGVybnMsXG4gICAgICAgICAgZGFuZ2Vyb3VzX2Jhc2hfcGF0dGVybnM6IHN0YXRpY1J1bGVzLmRhbmdlcm91c19iYXNoX3BhdHRlcm5zLFxuICAgICAgICAgIGJsb2NrZWRfYmFzaF9wYXR0ZXJuczogc3RhdGljUnVsZXMuYmxvY2tlZF9iYXNoX3BhdHRlcm5zLFxuICAgICAgICAgIGlycmV2ZXJzaWJsZV9wYXR0ZXJuczogc3RhdGljUnVsZXMuaXJyZXZlcnNpYmxlX3BhdHRlcm5zLFxuICAgICAgICAgIHNlbnNpdGl2ZV9wYXRoX3ByZWZpeGVzOiBzdGF0aWNSdWxlcy5zZW5zaXRpdmVfcGF0aF9wcmVmaXhlcyxcbiAgICAgICAgICBnYXRla2VlcGVyX2Vzc2VudGlhbF9vcGVyYXRpb25zOiBzdGF0aWNSdWxlcy5nYXRla2VlcGVyX2Vzc2VudGlhbF9vcGVyYXRpb25zLFxuICAgICAgICAgIHNhZmVfbWNwX29wZXJhdGlvbnM6IHN0YXRpY1J1bGVzLnNhZmVfbWNwX29wZXJhdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICAgIGVsZW1lbnRfcG9saWNpZXM6IGVsZW1lbnRQb2xpY2llcyxcbiAgICAgICAgcmlza19zY29yZXM6IHN0YXRpY1J1bGVzLnJpc2tfc2NvcmVzLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgZmlsZVBhdGggPSBqb2luKFBPTElDWV9ESVIsIFBPTElDWV9GSUxFTkFNRSk7XG4gICAgICBhd2FpdCB3cml0ZUZpbGUoZmlsZVBhdGgsIEpTT04uc3RyaW5naWZ5KHBvbGljeSwgbnVsbCwgMiksICd1dGYtOCcpO1xuICAgICAgbG9nZ2VyLmluZm8oJ1tQb2xpY3lFeHBvcnRTZXJ2aWNlXSBQb2xpY2llcyBleHBvcnRlZCcsIHsgZmlsZVBhdGgsIGVsZW1lbnRDb3VudDogZWxlbWVudFBvbGljaWVzLmFjdGl2ZV9lbGVtZW50X2NvdW50IH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gTm9uLWZhdGFsOiBsb2cgYW5kIGNvbnRpbnVlXG4gICAgICBsb2dnZXIud2FybignW1BvbGljeUV4cG9ydFNlcnZpY2VdIEZhaWxlZCB0byBleHBvcnQgcG9saWNpZXMnLCB7IGVycm9yOiAoZXJyIGFzIEVycm9yKS5tZXNzYWdlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRFbGVtZW50UG9saWNpZXMoYWN0aXZlRWxlbWVudHM6IEFycmF5PHsgdHlwZTogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9Pikge1xuICAgIGNvbnN0IGVsZW1lbnRzOiBFbGVtZW50UG9saWN5RW50cnlbXSA9IFtdO1xuICAgIGNvbnN0IGNvbWJpbmVkQWxsb3c6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgY29tYmluZWRDb25maXJtOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGNvbWJpbmVkRGVueTogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgZW5zZW1ibGVOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYWN0aXZlRWxlbWVudHMpIHtcbiAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdlbnNlbWJsZScpIHtcbiAgICAgICAgZW5zZW1ibGVOYW1lID0gZWxlbWVudC5uYW1lO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBnYXRla2VlcGVyID0gZWxlbWVudC5tZXRhZGF0YT8uZ2F0ZWtlZXBlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGV4dGVybmFsID0gZ2F0ZWtlZXBlcj8uZXh0ZXJuYWxSZXN0cmljdGlvbnMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IGFsbG93UGF0dGVybnMgPSBBcnJheS5pc0FycmF5KGV4dGVybmFsPy5hbGxvd1BhdHRlcm5zKVxuICAgICAgICA/IChleHRlcm5hbC5hbGxvd1BhdHRlcm5zIGFzIHVua25vd25bXSkuZmlsdGVyKChwKTogcCBpcyBzdHJpbmcgPT4gdHlwZW9mIHAgPT09ICdzdHJpbmcnKVxuICAgICAgICA6IFtdO1xuICAgICAgY29uc3QgY29uZmlybVBhdHRlcm5zID0gQXJyYXkuaXNBcnJheShleHRlcm5hbD8uY29uZmlybVBhdHRlcm5zKVxuICAgICAgICA/IChleHRlcm5hbC5jb25maXJtUGF0dGVybnMgYXMgdW5rbm93bltdKS5maWx0ZXIoKHApOiBwIGlzIHN0cmluZyA9PiB0eXBlb2YgcCA9PT0gJ3N0cmluZycpXG4gICAgICAgIDogW107XG4gICAgICBjb25zdCBkZW55UGF0dGVybnMgPSBBcnJheS5pc0FycmF5KGV4dGVybmFsPy5kZW55UGF0dGVybnMpXG4gICAgICAgID8gKGV4dGVybmFsLmRlbnlQYXR0ZXJucyBhcyB1bmtub3duW10pLmZpbHRlcigocCk6IHAgaXMgc3RyaW5nID0+IHR5cGVvZiBwID09PSAnc3RyaW5nJylcbiAgICAgICAgOiBbXTtcblxuICAgICAgZWxlbWVudHMucHVzaCh7XG4gICAgICAgIHR5cGU6IGVsZW1lbnQudHlwZSxcbiAgICAgICAgbmFtZTogZWxlbWVudC5uYW1lLFxuICAgICAgICBhbGxvd19wYXR0ZXJuczogYWxsb3dQYXR0ZXJucyxcbiAgICAgICAgY29uZmlybV9wYXR0ZXJuczogY29uZmlybVBhdHRlcm5zLFxuICAgICAgICBkZW55X3BhdHRlcm5zOiBkZW55UGF0dGVybnMsXG4gICAgICB9KTtcblxuICAgICAgY29tYmluZWRBbGxvdy5wdXNoKC4uLmFsbG93UGF0dGVybnMpO1xuICAgICAgY29tYmluZWRDb25maXJtLnB1c2goLi4uY29uZmlybVBhdHRlcm5zKTtcbiAgICAgIGNvbWJpbmVkRGVueS5wdXNoKC4uLmRlbnlQYXR0ZXJucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFjdGl2ZV9lbGVtZW50X2NvdW50OiBlbGVtZW50cy5sZW5ndGgsXG4gICAgICAuLi4oZW5zZW1ibGVOYW1lID8geyBlbnNlbWJsZV9uYW1lOiBlbnNlbWJsZU5hbWUgfSA6IHt9KSxcbiAgICAgIGVsZW1lbnRzLFxuICAgICAgY29tYmluZWRfYWxsb3dfcGF0dGVybnM6IFsuLi5uZXcgU2V0KGNvbWJpbmVkQWxsb3cpXSxcbiAgICAgIGNvbWJpbmVkX2NvbmZpcm1fcGF0dGVybnM6IFsuLi5uZXcgU2V0KGNvbWJpbmVkQ29uZmlybSldLFxuICAgICAgY29tYmluZWRfZGVueV9wYXR0ZXJuczogWy4uLm5ldyBTZXQoY29tYmluZWREZW55KV0sXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
152
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9saWN5RXhwb3J0U2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9Qb2xpY3lFeHBvcnRTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNsQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXZDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNsRixNQUFNLGVBQWUsR0FBRyxrQ0FBa0MsQ0FBQztBQWUzRCxNQUFNLE9BQU8sbUJBQW1CO0lBS1g7SUFDQTtJQUxYLGNBQWMsQ0FBaUI7SUFDL0IsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUU3QixZQUNtQixJQUFzQixFQUN0QixZQUFvQixVQUFVO1FBRDlCLFNBQUksR0FBSixJQUFJLENBQWtCO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQXFCO0lBQzlDLENBQUM7SUFFSjs7Ozs7OztPQU9HO0lBQ0gsY0FBYztRQUNaLElBQUksQ0FBQyxHQUFHLENBQUMsK0JBQStCLEVBQUUsQ0FBQztZQUN6QyxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzQixDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLGNBQWMsS0FBSyxJ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O2dCQUN4RCxDQUFDLENBQUUsUUFBUSxDQUFDLFlBQTBCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFlLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUM7Z0JBQ3hGLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFFUCxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNaLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtnQkFDbEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO2dCQUNsQixjQUFjLEVBQUUsYUFBYTtnQkFDN0IsZ0JBQWdCLEVBQUUsZUFBZTtnQkFDakMsYUFBYSxFQUFFLFlBQVk7YUFDNUIsQ0FBQyxDQUFDO1lBRUgsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDO1lBQ3JDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQztZQUN6QyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUVELE9BQU87WUFDTCxvQkFBb0IsRUFBRSxRQUFRLENBQUMsTUFBTTtZQUNyQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3hELFFBQVE7WUFDUix1QkFBdUIsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDcEQseUJBQXlCLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3hELHNCQUFzQixFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNuRCxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQb2xpY3lFeHBvcnRTZXJ2aWNlIC0gRXhwb3J0cyB0b29sIGNsYXNzaWZpY2F0aW9uIHBvbGljaWVzIGZvciBicmlkZ2UgY29uc3VtcHRpb25cbiAqXG4gKiBXcml0ZXMgYSBKU09OIHBvbGljeSBmaWxlIHRvIH4vLmRvbGxob3VzZS9icmlkZ2UvaW1wb3J0cy9wb2xpY2llcy8gc28gdGhlXG4gKiBEb2xsaG91c2VCcmlkZ2UgcGVybWlzc2lvbi1wcm9tcHQgc2VydmVyIGNhbiBldmFsdWF0ZSBwZXJtaXNzaW9ucyBsb2NhbGx5LlxuICpcbiAqIFdyaXRlLW9ubHk6IHB1Ymxpc2hlcyBhbmQgZm9yZ2V0cy4gU2tpcHMgc2lsZW50bHkgaWYgdGhlIGJyaWRnZSBmb2xkZXJcbiAqIGRvZXNuJ3QgZXhpc3QgKGJyaWRnZSBtYXkgbm90IGJlIGluc3RhbGxlZCkuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vRG9sbGhvdXNlTUNQL21jcC1zZXJ2ZXItdjItcmVmYWN0b3IvaXNzdWVzLzc2MlxuICovXG5cbmltcG9ydCB7IHdyaXRlRmlsZSwgYWNjZXNzIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IGdldFN0YXRpY1BvbGljeURhdGEgfSBmcm9tICcuLi9oYW5kbGVycy9tY3AtYXFsL3BvbGljaWVzL1Rvb2xDbGFzc2lmaWNhdGlvbi5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZW52IH0gZnJvbSAnLi4vY29uZmlnL2Vudi5qcyc7XG5cbmNvbnN0IFBPTElDWV9ESVIgPSBqb2luKGhvbWVkaXIoKSwgJy5kb2xsaG91c2UnLCAnYnJpZGdlJywgJ2ltcG9ydHMnLCAncG9saWNpZXMnKTtcbmNvbnN0IFBPTElDWV9GSUxFTkFNRSA9ICdkb2xsaG91c2VtY3AtY3J1ZGUtcG9saWNpZXMuanNvbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9saWN5RXhwb3J0RGVwcyB7XG4gIGdldEFjdGl2ZUVsZW1lbnRzRm9yUG9saWN5OiAoKSA9PiBQcm9taXNlPEFycmF5PHsgdHlwZTogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9Pj47XG4gIGdldFNlcnZlclZlcnNpb246ICgpID0+IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEVsZW1lbnRQb2xpY3lFbnRyeSB7XG4gIHR5cGU6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBhbGxvd19wYXR0ZXJuczogc3RyaW5nW107XG4gIGNvbmZpcm1fcGF0dGVybnM6IHN0cmluZ1tdO1xuICBkZW55X3BhdHRlcm5zOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNsYXNzIFBvbGljeUV4cG9ydFNlcnZpY2Uge1xuICBwcml2YXRlIGV4cG9ydEluRmxpZ2h0PzogUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBleHBvcnRRdWV1ZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlcHM6IFBvbGljeUV4cG9ydERlcHMsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwb2xpY3lEaXI6IHN0cmluZyA9IFBPTElDWV9ESVIsXG4gICkge31cblxuICAvKipcbiAgICogRXhwb3J0IGN1cnJlbnQgcG9saWN5IHN0YXRlIHRvIHRoZSBicmlkZ2UgaW1wb3J0cyBmb2xkZXIuXG4gICAqXG4gICAqIEdhdGhlcnMgc3RhdGljIGNsYXNzaWZpY2F0aW9uIHJ1bGVzIGFuZCBhY3RpdmUgZWxlbWVudCBwb2xpY2llcyxcbiAgICogd3JpdGVzIGEgc2luZ2xlIEpTT04gZmlsZSBjb25mb3JtaW5nIHRvIGJyaWRnZSBwb2xpY3kgc2NoZW1hIHYxLjAuXG4gICAqXG4gICAqIFNraXBzIHNpbGVudGx5IGlmIHRoZSBicmlkZ2UgaW1wb3J0cyBkaXJlY3RvcnkgZG9lc24ndCBleGlzdC5cbiAgICovXG4gIGV4cG9ydFBvbGljaWVzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghZW52LkRPTExIT1VTRV9QT0xJQ1lfRVhQT1JUX0VOQUJMRUQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICB0aGlzLmV4cG9ydFF1ZXVlZCA9IHRydWU7XG4gICAgdGhpcy5leHBvcnRJbkZsaWdodCA/Pz0gdGhpcy5ydW5FeHBvcnRMb29wKCk7XG5cbiAgICByZXR1cm4gdGhpcy5leHBvcnRJbkZsaWdodDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcnVuRXhwb3J0TG9vcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5kcmFpbkV4cG9ydHMoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5leHBvcnRJbkZsaWdodCA9IHVuZGVmaW5lZDtcblxuICAgICAgLy8gQSByZXF1ZXN0IGNhbiBhcnJpdmUgYWZ0ZXIgZHJhaW5FeHBvcnRzKCkgc2V0dGxlcyBidXQgYmVmb3JlIHRoaXNcbiAgICAgIC8vIGNvbnRpbnVhdGlvbiBydW5zLiBDaGFpbiB0aGF0IHRyYWlsaW5nIGRyYWluIGludG8gdGhlIGN1cnJlbnQgcHJvbWlzZVxuICAgICAgLy8gc28gdGhlIHJlcXVlc3QgdGhhdCBxdWV1ZWQgaXQgY2Fubm90IHJlc29sdmUgYmVmb3JlIGl0cyB3cml0ZSBmaW5pc2hlcy5cbiAgICAgIGlmICh0aGlzLmV4cG9ydFF1ZXVlZCkge1xuICAgICAgICBjb25zdCB0cmFpbGluZyA9IHRoaXMucnVuRXhwb3J0TG9vcCgpO1xuICAgICAgICB0aGlzLmV4cG9ydEluRmxpZ2h0ID0gdHJhaWxpbmc7XG4gICAgICAgIGF3YWl0IHRyYWlsaW5nO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZHJhaW5FeHBvcnRzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHdoaWxlICh0aGlzLmV4cG9ydFF1ZXVlZCkge1xuICAgICAgdGhpcy5leHBvcnRRdWV1ZWQgPSBmYWxzZTtcbiAgICAgIGF3YWl0IHRoaXMucGVyZm9ybUV4cG9ydCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcGVyZm9ybUV4cG9ydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gQ2hlY2sgaWYgYnJpZGdlIGltcG9ydHMgZGlyZWN0b3J5IGV4aXN0cyDigJQgc2tpcCBpZiBub3RcbiAgICAgIGF3YWl0IGFjY2Vzcyh0aGlzLnBvbGljeURpcik7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBCcmlkZ2Ugbm90IGluc3RhbGxlZCBvciBpbXBvcnRzIGRpciBub3QgY3JlYXRlZCDigJQgc2tpcCBzaWxlbnRseVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0aWNSdWxlcyA9IGdldFN0YXRpY1BvbGljeURhdGEoKTtcbiAgICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnRzID0gYXdhaXQgdGhpcy5kZXBzLmdldEFjdGl2ZUVsZW1lbnRzRm9yUG9saWN5KCk7XG4gICAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5kZXBzLmdldFNlcnZlclZlcnNpb24oKTtcblxuICAgICAgY29uc3QgZWxlbWVudFBvbGljaWVzID0gdGhpcy5idWlsZEVsZW1lbnRQb2xpY2llcyhhY3RpdmVFbGVtZW50cyk7XG5cbiAgICAgIGNvbnN0IHBvbGljeSA9IHtcbiAgICAgICAgc2NoZW1hX3ZlcnNpb246ICcxLjAnLFxuICAgICAgICBzZXJ2ZXI6IHtcbiAgICAgICAgICBuYW1lOiAnRG9sbGhvdXNlTUNQLVYyLVJlZmFjdG9yIENSVURFJyxcbiAgICAgICAgICB2ZXJzaW9uLFxuICAgICAgICB9LFxuICAgICAgICBleHBvcnRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBzdGF0aWNfcnVsZXM6IHtcbiAgICAgICAgICBzYWZlX3Rvb2xzOiBzdGF0aWNSdWxlcy5zYWZlX3Rvb2xzLFxuICAgICAgICAgIHNhZmVfYmFzaF9wYXR0ZXJuczogc3RhdGljUnVsZXMuc2FmZV9iYXNoX3BhdHRlcm5zLFxuICAgICAgICAgIGRhbmdlcm91c19iYXNoX3BhdHRlcm5zOiBzdGF0aWNSdWxlcy5kYW5nZXJvdXNfYmFzaF9wYXR0ZXJucyxcbiAgICAgICAgICBibG9ja2VkX2Jhc2hfcGF0dGVybnM6IHN0YXRpY1J1bGVzLmJsb2NrZWRfYmFzaF9wYXR0ZXJucyxcbiAgICAgICAgICBpcnJldmVyc2libGVfcGF0dGVybnM6IHN0YXRpY1J1bGVzLmlycmV2ZXJzaWJsZV9wYXR0ZXJucyxcbiAgICAgICAgICBzZW5zaXRpdmVfcGF0aF9wcmVmaXhlczogc3RhdGljUnVsZXMuc2Vuc2l0aXZlX3BhdGhfcHJlZml4ZXMsXG4gICAgICAgICAgZ2F0ZWtlZXBlcl9lc3NlbnRpYWxfb3BlcmF0aW9uczogc3RhdGljUnVsZXMuZ2F0ZWtlZXBlcl9lc3NlbnRpYWxfb3BlcmF0aW9ucyxcbiAgICAgICAgICBzYWZlX21jcF9vcGVyYXRpb25zOiBzdGF0aWNSdWxlcy5zYWZlX21jcF9vcGVyYXRpb25zLFxuICAgICAgICB9LFxuICAgICAgICBlbGVtZW50X3BvbGljaWVzOiBlbGVtZW50UG9saWNpZXMsXG4gICAgICAgIHJpc2tfc2NvcmVzOiBzdGF0aWNSdWxlcy5yaXNrX3Njb3JlcyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGZpbGVQYXRoID0gam9pbih0aGlzLnBvbGljeURpciwgUE9MSUNZX0ZJTEVOQU1FKTtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZShmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkocG9saWN5LCBudWxsLCAyKSwgJ3V0Zi04Jyk7XG4gICAgICBsb2dnZXIuaW5mbygnW1BvbGljeUV4cG9ydFNlcnZpY2VdIFBvbGljaWVzIGV4cG9ydGVkJywgeyBmaWxlUGF0aCwgZWxlbWVudENvdW50OiBlbGVtZW50UG9saWNpZXMuYWN0aXZlX2VsZW1lbnRfY291bnQgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBOb24tZmF0YWw6IGxvZyBhbmQgY29udGludWVcbiAgICAgIGxvZ2dlci53YXJuKCdbUG9saWN5RXhwb3J0U2VydmljZV0gRmFpbGVkIHRvIGV4cG9ydCBwb2xpY2llcycsIHsgZXJyb3I6IChlcnIgYXMgRXJyb3IpLm1lc3NhZ2UgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEVsZW1lbnRQb2xpY2llcyhhY3RpdmVFbGVtZW50czogQXJyYXk8eyB0eXBlOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0+KSB7XG4gICAgY29uc3QgZWxlbWVudHM6IEVsZW1lbnRQb2xpY3lFbnRyeVtdID0gW107XG4gICAgY29uc3QgY29tYmluZWRBbGxvdzogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBjb21iaW5lZENvbmZpcm06IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgY29tYmluZWREZW55OiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBlbnNlbWJsZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBhY3RpdmVFbGVtZW50cykge1xuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ2Vuc2VtYmxlJykge1xuICAgICAgICBlbnNlbWJsZU5hbWUgPSBlbGVtZW50Lm5hbWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGdhdGVrZWVwZXIgPSBlbGVtZW50Lm1ldGFkYXRhPy5nYXRla2VlcGVyIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZXh0ZXJuYWwgPSBnYXRla2VlcGVyPy5leHRlcm5hbFJlc3RyaWN0aW9ucyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgYWxsb3dQYXR0ZXJucyA9IEFycmF5LmlzQXJyYXkoZXh0ZXJuYWw/LmFsbG93UGF0dGVybnMpXG4gICAgICAgID8gKGV4dGVybmFsLmFsbG93UGF0dGVybnMgYXMgdW5rbm93bltdKS5maWx0ZXIoKHApOiBwIGlzIHN0cmluZyA9PiB0eXBlb2YgcCA9PT0gJ3N0cmluZycpXG4gICAgICAgIDogW107XG4gICAgICBjb25zdCBjb25maXJtUGF0dGVybnMgPSBBcnJheS5pc0FycmF5KGV4dGVybmFsPy5jb25maXJtUGF0dGVybnMpXG4gICAgICAgID8gKGV4dGVybmFsLmNvbmZpcm1QYXR0ZXJucyBhcyB1bmtub3duW10pLmZpbHRlcigocCk6IHAgaXMgc3RyaW5nID0+IHR5cGVvZiBwID09PSAnc3RyaW5nJylcbiAgICAgICAgOiBbXTtcbiAgICAgIGNvbnN0IGRlbnlQYXR0ZXJucyA9IEFycmF5LmlzQXJyYXkoZXh0ZXJuYWw/LmRlbnlQYXR0ZXJucylcbiAgICAgICAgPyAoZXh0ZXJuYWwuZGVueVBhdHRlcm5zIGFzIHVua25vd25bXSkuZmlsdGVyKChwKTogcCBpcyBzdHJpbmcgPT4gdHlwZW9mIHAgPT09ICdzdHJpbmcnKVxuICAgICAgICA6IFtdO1xuXG4gICAgICBlbGVtZW50cy5wdXNoKHtcbiAgICAgICAgdHlwZTogZWxlbWVudC50eXBlLFxuICAgICAgICBuYW1lOiBlbGVtZW50Lm5hbWUsXG4gICAgICAgIGFsbG93X3BhdHRlcm5zOiBhbGxvd1BhdHRlcm5zLFxuICAgICAgICBjb25maXJtX3BhdHRlcm5zOiBjb25maXJtUGF0dGVybnMsXG4gICAgICAgIGRlbnlfcGF0dGVybnM6IGRlbnlQYXR0ZXJucyxcbiAgICAgIH0pO1xuXG4gICAgICBjb21iaW5lZEFsbG93LnB1c2goLi4uYWxsb3dQYXR0ZXJucyk7XG4gICAgICBjb21iaW5lZENvbmZpcm0ucHVzaCguLi5jb25maXJtUGF0dGVybnMpO1xuICAgICAgY29tYmluZWREZW55LnB1c2goLi4uZGVueVBhdHRlcm5zKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWN0aXZlX2VsZW1lbnRfY291bnQ6IGVsZW1lbnRzLmxlbmd0aCxcbiAgICAgIC4uLihlbnNlbWJsZU5hbWUgPyB7IGVuc2VtYmxlX25hbWU6IGVuc2VtYmxlTmFtZSB9IDoge30pLFxuICAgICAgZWxlbWVudHMsXG4gICAgICBjb21iaW5lZF9hbGxvd19wYXR0ZXJuczogWy4uLm5ldyBTZXQoY29tYmluZWRBbGxvdyldLFxuICAgICAgY29tYmluZWRfY29uZmlybV9wYXR0ZXJuczogWy4uLm5ldyBTZXQoY29tYmluZWRDb25maXJtKV0sXG4gICAgICBjb21iaW5lZF9kZW55X3BhdHRlcm5zOiBbLi4ubmV3IFNldChjb21iaW5lZERlbnkpXSxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* diff-based incremental index updates, and notifications from save/delete.
|
|
6
6
|
*/
|
|
7
7
|
import type { IStorageBackend } from './IStorageBackend.js';
|
|
8
|
-
import type { IStorageLayer } from './IStorageLayer.js';
|
|
9
|
-
import type
|
|
8
|
+
import type { IStorageLayer, StorageScanOptions } from './IStorageLayer.js';
|
|
9
|
+
import { type ElementIndexEntry, type ManifestDiffResult } from './types.js';
|
|
10
10
|
import type { FileOperationsService } from '../services/FileOperationsService.js';
|
|
11
11
|
export interface ElementStorageLayerOptions {
|
|
12
12
|
/** Absolute path to the element directory */
|
|
@@ -34,7 +34,7 @@ export declare class ElementStorageLayer implements IStorageLayer {
|
|
|
34
34
|
* - Deduplicates concurrent calls (returns same promise)
|
|
35
35
|
* - Updates index and manifest based on diff
|
|
36
36
|
*/
|
|
37
|
-
scan(): Promise<ManifestDiffResult>;
|
|
37
|
+
scan(options?: StorageScanOptions): Promise<ManifestDiffResult>;
|
|
38
38
|
/**
|
|
39
39
|
* Trigger scan and return all index entries.
|
|
40
40
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElementStorageLayer.d.ts","sourceRoot":"","sources":["../../src/storage/ElementStorageLayer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"ElementStorageLayer.d.ts","sourceRoot":"","sources":["../../src/storage/ElementStorageLayer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAA4B,KAAK,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAKvG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAGlF,MAAM,WAAW,0BAA0B;IACzC,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,cAAc,CAAC,EAAE,eAAe,CAAC;CAClC;AAID,qBAAa,mBAAoB,YAAW,aAAa;IACvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAClD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IAExC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,cAAc,CAA4C;gBAGhE,qBAAqB,EAAE,qBAAqB,EAC5C,OAAO,EAAE,0BAA0B;IAarC;;;;;OAKG;IACG,IAAI,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA8CzE;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAKnD;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAK1C;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAK/C;;OAEG;IACH,gBAAgB,IAAI,OAAO;IAI3B;;;OAGG;IACG,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B5E;;;OAGG;IACH,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAKzC;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,KAAK,IAAI,IAAI;YAQC,WAAW;CA0E1B"}
|