obsidian-dev-utils 94.2.0 → 94.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/lib/cjs/generated-during-build.cjs +1 -1
- package/dist/lib/cjs/script-utils/demo-vault-buttons.cjs +358 -0
- package/dist/lib/cjs/script-utils/demo-vault-buttons.d.cts +112 -0
- package/dist/lib/cjs/script-utils/demo-vault-coverage.cjs +13 -8
- package/dist/lib/cjs/script-utils/demo-vault-coverage.d.cts +15 -6
- package/dist/lib/cjs/script-utils/index.cjs +4 -1
- package/dist/lib/cjs/script-utils/index.d.cts +1 -0
- package/dist/lib/cjs/script-utils/test-runners/vitest-config.cjs +8 -2
- package/dist/lib/cjs/script-utils/test-runners/vitest-config.d.cts +5 -0
- package/dist/lib/esm/generated-during-build.mjs +1 -1
- package/dist/lib/esm/script-utils/demo-vault-buttons.d.mts +112 -0
- package/dist/lib/esm/script-utils/demo-vault-buttons.mjs +249 -0
- package/dist/lib/esm/script-utils/demo-vault-coverage.d.mts +15 -6
- package/dist/lib/esm/script-utils/demo-vault-coverage.mjs +13 -8
- package/dist/lib/esm/script-utils/index.d.mts +1 -0
- package/dist/lib/esm/script-utils/index.mjs +3 -1
- package/dist/lib/esm/script-utils/test-runners/vitest-config.d.mts +5 -0
- package/dist/lib/esm/script-utils/test-runners/vitest-config.mjs +8 -2
- package/package.json +4 -3
- package/script-utils/demo-vault-buttons/package.json +6 -0
|
@@ -287,7 +287,7 @@ function registerDemoVaultCoverageSuite(params) {
|
|
|
287
287
|
}));
|
|
288
288
|
const startNote = params.authoring?.startNote ?? DEFAULT_START_NOTE;
|
|
289
289
|
describe("demo-vault coverage", () => {
|
|
290
|
-
for (const spec of params.interfaces) {
|
|
290
|
+
for (const spec of params.interfaces ?? []) {
|
|
291
291
|
it(`demonstrates every ${spec.interfaceName} ${spec.kind}`, () => {
|
|
292
292
|
const members = checker.getInterfaceMembers(spec);
|
|
293
293
|
const demonstrated = members[spec.kind];
|
|
@@ -299,7 +299,7 @@ function registerDemoVaultCoverageSuite(params) {
|
|
|
299
299
|
expect(checker.findStaleReferences({ receiver: spec.receiver, validMembers: members.all })).toEqual([]);
|
|
300
300
|
});
|
|
301
301
|
}
|
|
302
|
-
for (const spec of params.configInterfaces) {
|
|
302
|
+
for (const spec of params.configInterfaces ?? []) {
|
|
303
303
|
it(`demonstrates every ${spec.interfaceName} option`, () => {
|
|
304
304
|
const members = checker.getInterfaceMembers(spec);
|
|
305
305
|
expect(members.properties.length).toBeGreaterThan(0);
|
|
@@ -340,12 +340,17 @@ function registerDemoVaultCoverageSuite(params) {
|
|
|
340
340
|
it("commits none of the app.json settings obsidian-dev-utils injects at release time", () => {
|
|
341
341
|
expect(checker.findCommittedAppJsonSettings()).toEqual([]);
|
|
342
342
|
});
|
|
343
|
-
it("
|
|
344
|
-
|
|
345
|
-
const members = checker.getInterfaceMembers(guard);
|
|
346
|
-
expect(members.all).toContain(guard.expectMember);
|
|
347
|
-
expect(checker.collectDemoNoteRelativePaths()).toContain(guard.expectDemoNote);
|
|
343
|
+
it("reads a non-empty demo vault", () => {
|
|
344
|
+
expect(checker.collectDemoNoteRelativePaths().length).toBeGreaterThan(0);
|
|
348
345
|
});
|
|
346
|
+
const guard = params.nonTrivialGuard;
|
|
347
|
+
if (guard) {
|
|
348
|
+
it("keeps the reflected surface non-trivial", () => {
|
|
349
|
+
const members = checker.getInterfaceMembers(guard);
|
|
350
|
+
expect(members.all).toContain(guard.expectMember);
|
|
351
|
+
expect(checker.collectDemoNoteRelativePaths()).toContain(guard.expectDemoNote);
|
|
352
|
+
});
|
|
353
|
+
}
|
|
349
354
|
});
|
|
350
355
|
}
|
|
351
356
|
const CLASS_MEMBER_MODIFIERS = String.raw`(?:(?:public|private|protected|readonly|static|abstract|override)\s+)*`;
|
|
@@ -568,4 +573,4 @@ export {
|
|
|
568
573
|
DemoVaultCoverageChecker,
|
|
569
574
|
registerDemoVaultCoverageSuite
|
|
570
575
|
};
|
|
571
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9kZW1vLXZhdWx0LWNvdmVyYWdlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogU3RhdGljIGNvdmVyYWdlL2ZyZXNobmVzcyBjaGVja3MgdGhhdCBrZWVwIGEgcGx1Z2luJ3MgaW4tcmVwbyBgZGVtby12YXVsdC9gIGluIHN5bmMgd2l0aCBpdHMgcHVibGljIHN1cmZhY2UuXG4gKlxuICogQSBwbHVnaW4gY2FuIHNoaXAgYSBjdXJhdGVkIGRlbW8gdmF1bHQgYXQgYGRlbW8tdmF1bHQvYCBpbiBpdHMgcmVwbyByb290LiBUaGVzZSBoZWxwZXJzIHJlZmxlY3QgdGhlIHJlYWxcbiAqIHB1YmxpYyBBUEkvY29uZmlnL2RvY3Mgc3RyYWlnaHQgZnJvbSBzb3VyY2UgYW5kIGFzc2VydCBcdTIwMTQgV0lUSE9VVCBsYXVuY2hpbmcgT2JzaWRpYW4gXHUyMDE0IHRoYXQgZXZlcnkgZmVhdHVyZSBpc1xuICogZGVtb25zdHJhdGVkIGluIHRoZSBub3RlcyBhbmQgdGhhdCB0aGUgbm90ZXMgcmVmZXJlbmNlIG5vIEFQSSBtZW1iZXIgdGhhdCBubyBsb25nZXIgZXhpc3RzIChyZW5hbWUgZHJpZnQpLlxuICogVGhlIHJ1bnRpbWUgYmVoYXZpb3Igb2YgdGhlIHBsdWdpbiBpcyBjb3ZlcmVkIGJ5IGl0cyBvdGhlciBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IGJ5IHRoZSBkZW1vIHZhdWx0OyB0aGVcbiAqIHZhdWx0IGlzIGEgbGVhcm5pbmcgcmVzb3VyY2UsIGFuZCB0aGVzZSBjaGVja3Mgb25seSBndWFyZCB0aGF0IGl0IHN0YXlzIHRydXRoZnVsLlxuICpcbiAqIFRoZXkgYWxzbyBndWFyZCB0aGUgdmF1bHQncyBvd24gYC5vYnNpZGlhbi9hcHAuanNvbmA6IHRoZSBzZXR0aW5ncyBsaXN0ZWQgaW5cbiAqIHtAbGluayBERU1PX1ZBVUxUX0FQUF9KU09OX1NFVFRJTkdTfSBiZWxvbmcgdG8gYG9ic2lkaWFuLWRldi11dGlsc2AsIHdoaWNoIHdyaXRlcyB0aGVtIGludG8gdGhlIGFyY2hpdmVkXG4gKiB2YXVsdCBhdCByZWxlYXNlIHRpbWUsIHNvIGEgdmF1bHQgdGhhdCBjb21taXRzIGFueSBvZiB0aGVtIGlzIGtlZXBpbmcgYSBzZWNvbmQgY29weSBub3RoaW5nIHJlY29uY2lsZXMuXG4gKlxuICogVGhleSBhbHNvIGVuZm9yY2UgdGhlIGRlbW8tdmF1bHQgQVVUSE9SSU5HIGNvbnZlbnRpb24gXHUyMDE0IGV2ZXJ5IG5vdGUgb3BlbnMgd2l0aCBhbiBgIyBIMWAgYW5kIGEgcGxhaW5cbiAqIHByb3NlIHBhcmFncmFwaCwgZXZlcnkgbm90ZSBpcyByZWFjaGFibGUgZnJvbSB0aGUgc3RhcnQgbm90ZSwgYW5kIG5vIG5vdGUgdXNlcyBhIGBbW3dpa2lsaW5rXV1gIG9yIGFcbiAqIGBbRG9jc10oXHUyMDI2KWAgbGluZS4gVGhlc2UgY2hlY2tzIGFyZSB1bmNvbmRpdGlvbmFsOiB0aGUgZGVtbyB2YXVsdCBpcyB0aGUgcHVibGlzaGVkIGRvY3VtZW50YXRpb24sIHJlYWRcbiAqIGluIE9ic2lkaWFuIEFORCBvbiBHaXRIdWIgKHdoZXJlIGEgd2lraWxpbmsgZG9lcyBub3QgcmVuZGVyKSwgc28gYSBub3RlIHRoYXQgYnJlYWtzIHRoZSBjb252ZW50aW9uIGlzXG4gKiBicm9rZW4gZm9yIHJlYWwgcmVhZGVycy4gYGF1dGhvcmluZ2Agb25seSB0dW5lcyB0aGVtICh3aGljaCBub3RlIGlzIHRoZSBzdGFydCwgd2hpY2ggbm90ZXMgc2l0IG91dHNpZGVcbiAqIHRoZSBsZWFybmluZyBwYXRoKTsgaXQgY2Fubm90IHN3aXRjaCB0aGVtIG9mZi5cbiAqXG4gKiBUaGUgb25lIGV4Y2VwdGlvbiBpcyBhIG5vdGUgd2hvc2UgU1VCSkVDVCBpcyB0aGUgd2lraWxpbmsgXHUyMDE0IGFuIGVtYmVkIHNwZWxsaW5nIHRoZSByZWFkZXIgaXMgYmVpbmcgdGF1Z2h0XG4gKiB0byB0eXBlLCBhIGZyb250bWF0dGVyIHByb3BlcnR5IHZhbHVlIHRoYXQgZXhpc3RzIHRvIGNvbnRyYXN0IHdpdGggYSBNYXJrZG93biBsaW5rLCBhIGZpeHR1cmUgdGhhdCBtdXN0XG4gKiBrZWVwIHRoZSB3aWtpbGluayBhIGNvbW1hbmQgaXMgc3VwcG9zZWQgdG8gbGVhdmUgYWxvbmUsIGEgbGluayB0aGUgcmVhZGVyIGNsaWNrcyB3aGlsZSBpdCBzdGlsbCByZXNvbHZlc1xuICogdG8gbm90aGluZy4gU3VjaCBhIG5vdGUgc2F5cyBzbyBpdHNlbGYsIHN0YXRpbmcgd2h5LCBpbiBvbmUgb2YgdHdvIGZvcm1zIG1vZGVsbGVkIG9uIEVTTGludCdzLlxuICpcbiAqIFBlciBsaW5lIG9yIHBlciByZWdpb24sIHdyaXR0ZW4gYXMgYW4gSFRNTCBjb21tZW50IHNvIGl0IGlzIGludmlzaWJsZSBpbiBPYnNpZGlhbiBBTkQgb24gR2l0SHViIFx1MjAxNCB0aGVcbiAqIHNwZWxsaW5nIHRoZXNlIHZhdWx0cyBhbHJlYWR5IHVzZSBmb3IgYG1hcmtkb3dubGludC1kaXNhYmxlLW5leHQtbGluZWA6XG4gKlxuICogYGBgbWFya2Rvd25cbiAqIDwhLS0gb2JzaWRpYW4tZGV2LXV0aWxzLWRpc2FibGUtbmV4dC1saW5lIGRlbW8tdmF1bHQtdmFsaWRhdGlvbi9uby13aWtpbGlua3MgLS0gQ2xpY2tpbmcgYSBsaW5rIHRvIGEgbm90ZSB0aGF0IGRvZXMgbm90IGV4aXN0IHlldCBJUyB0aGUgZmVhdHVyZS4gLS0+XG4gKiAyLiBDbGljayB0aGlzIGxpbms6IFtbUHJvamVjdHMvRnJlc2ggaWRlYV1dLlxuICpcbiAqIDwhLS0gb2JzaWRpYW4tZGV2LXV0aWxzLWRpc2FibGUgZGVtby12YXVsdC12YWxpZGF0aW9uL25vLXdpa2lsaW5rcyAtLSBUaGUgd2lraWxpbmsgZW1iZWQgaXMgdGhlIHN5bnRheCB0aGlzIG5vdGUgdGVhY2hlcy4gLS0+XG4gKiAhW1tiYXNpYy5odG1sfDQwMF1dXG4gKiA8IS0tIG9ic2lkaWFuLWRldi11dGlscy1lbmFibGUgZGVtby12YXVsdC12YWxpZGF0aW9uL25vLXdpa2lsaW5rcyAtLT5cbiAqIGBgYFxuICpcbiAqIFBlciBub3RlLCBpbiB0aGUgbm90ZSdzIG93biBmcm9udG1hdHRlciBcdTIwMTQgdGhlIG9ubHkgZm9ybSB0aGF0IGNhbiByZWFjaCBhIHdpa2lsaW5rIElOU0lERSBmcm9udG1hdHRlcixcbiAqIHdoZXJlIGEgY29tbWVudCBjYW5ub3QgZ286XG4gKlxuICogYGBgeWFtbFxuICogLS0tXG4gKiBvYnNpZGlhbi1kZXYtdXRpbHM6XG4gKiAgIGRlbW8tdmF1bHQtdmFsaWRhdGlvbjpcbiAqICAgICBhbGxvdy13aWtpbGlua3M6IFRoZSBgd2lraWxpbmtgIHByb3BlcnR5IHZhbHVlIGlzIHRoZSBjb250cmFzdCB0aGlzIG5vdGUgaXMgYnVpbHQgYXJvdW5kLlxuICogLS0tXG4gKiBgYGBcbiAqXG4gKiBFaXRoZXIgd2F5IHRoZSBkZWNsYXJhdGlvbiB0cmF2ZWxzIHdpdGggdGhlIG5vdGUgcmF0aGVyIHRoYW4gc2l0dGluZyBpbiBhIGxpc3Qgc29tZXdoZXJlIGVsc2UsIGl0IGNhcnJpZXNcbiAqIGl0cyBqdXN0aWZpY2F0aW9uLCBhbmQgaXQgZXhlbXB0cyBvbmx5IHRoZSBXSUtJTElOSyBjaGVjayBcdTIwMTQgdGhlIEgxLCBwcm9zZSwgcmVhY2hhYmlsaXR5IGFuZCBgW0RvY3NdYFxuICogY2hlY2tzIHN0aWxsIGFwcGx5LiBBIGRlY2xhcmF0aW9uIHdpdGggbm8gcmVhc29uLCBvbmUgY292ZXJpbmcgbm8gd2lraWxpbmssIGEgcmVnaW9uIG5ldmVyIGVuYWJsZWQgYWdhaW4sXG4gKiBvciBhIG1pc3NwZWxsZWQgZGlyZWN0aXZlIGFsbCBmYWlsOiBhbiBleGVtcHRpb24gbm9ib2R5IGNhbiBqdXN0aWZ5LCB0aGF0IG5vdGhpbmcgbmVlZHMgYW55IG1vcmUsIG9yIHRoYXRcbiAqIHNpbGVudGx5IGRvZXMgbm90aGluZyBpcyB3b3JzZSB0aGFuIG5vIGV4ZW1wdGlvbiBhdCBhbGwuXG4gKlxuICogVHdvIGxheWVycyBhcmUgZXhwb3NlZDpcbiAqIC0ge0BsaW5rIERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlcn0gXHUyMDE0IGEgZnJhbWV3b3JrLWFnbm9zdGljIGNvcmUgdGhhdCByZWFkcyB0aGUgY29ycHVzLCBwYXJzZXMgaW50ZXJmYWNlIC9cbiAqICAgY2xhc3MgLyBlbnVtIG1lbWJlcnMgYW5kIGV4cG9ydGVkIGZ1bmN0aW9ucywgYW5kIHJldHVybnMgZGlhZ25vc3RpYyBhcnJheXMgKHdoYXQgaXMgdW5kZW1vbnN0cmF0ZWQgLyBzdGFsZVxuICogICAvIHVubGlua2VkIC8gb2ZmLWNvbnZlbnRpb24pLlxuICogLSB7QGxpbmsgcmVnaXN0ZXJEZW1vVmF1bHRDb3ZlcmFnZVN1aXRlfSBcdTIwMTQgYSB0aGluIHdyYXBwZXIgdGhhdCByZWdpc3RlcnMgYSBgdml0ZXN0YCBzdWl0ZSBvdmVyIHRoZSBjb3JlLCBzb1xuICogICBhIHBsdWdpbidzIGBkZW1vLXZhdWx0Lm5vLWFwcC5pbnRlZ3JhdGlvbi50ZXN0LnRzYCBpcyBhIHNpbmdsZSBkZWNsYXJhdGl2ZSBjYWxsLlxuICovXG5cbmltcG9ydCB7XG4gIGV4aXN0c1N5bmMsXG4gIHJlYWRkaXJTeW5jLFxuICByZWFkRmlsZVN5bmNcbn0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQge1xuICBkZXNjcmliZSxcbiAgZXhwZWN0LFxuICBpdFxufSBmcm9tICd2aXRlc3QnO1xuXG5pbXBvcnQgeyBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXMgfSBmcm9tICcuLi9vYmplY3QtdXRpbHMudHMnO1xuaW1wb3J0IHsgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMgfSBmcm9tICcuLi9vYnNpZGlhbi9wbHVnaW4vb2JzaWRpYW4tcGx1Z2luLXJlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgam9pbixcbiAgcmVsYXRpdmVcbn0gZnJvbSAnLi4vcGF0aC50cyc7XG5pbXBvcnQgeyBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwIH0gZnJvbSAnLi4vcmVnLWV4cC50cyc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB7XG4gIGZpbmRPd25lZERlbW9WYXVsdEFwcEpzb25TZXR0aW5ncyxcbiAgcGFyc2VEZW1vVmF1bHRBcHBKc29uXG59IGZyb20gJy4vZGVtby12YXVsdC1hcHAtanNvbi50cyc7XG5cbi8qKlxuICogVHVuZXMgdGhlIGFsd2F5cy1vbiBhdXRob3JpbmcgY2hlY2tzLiBJdCBjYW5ub3QgZGlzYWJsZSB0aGVtIFx1MjAxNCBzZWUgdGhlIGZpbGUgb3ZlcnZpZXcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVtb1ZhdWx0QXV0aG9yaW5nU3BlYyB7XG4gIC8qKlxuICAgKiBUaGUgbm90ZXMgKHBhdGhzIHJlbGF0aXZlIHRvIHRoZSBkZW1vIHZhdWx0KSB0aGF0IHNpdCBvdXRzaWRlIHRoZSBsZWFybmluZyBwYXRoIGFuZCBhcmUgdGhlcmVmb3JlXG4gICAqIGV4ZW1wdCBmcm9tIGV2ZXJ5IGF1dGhvcmluZyBjaGVjay4gRGVmYXVsdHMgdG8gdGhlIHZhdWx0J3Mgb3duIGBSRUFETUUubWRgLCB3aGljaCBhZGRyZXNzZXMgc29tZW9uZVxuICAgKiBicm93c2luZyB0aGUgcmVwbyBvbiBHaXRIdWIgcmF0aGVyIHRoYW4gYSByZWFkZXIgd29ya2luZyB0aHJvdWdoIHRoZSB2YXVsdC5cbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVkTm90ZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIG5vdGUgKHBhdGggcmVsYXRpdmUgdG8gdGhlIGRlbW8gdmF1bHQpIGV2ZXJ5IG90aGVyIG5vdGUgbXVzdCBiZSByZWFjaGFibGUgZnJvbS4gRGVmYXVsdHMgdG9cbiAgICogYDAwIFN0YXJ0Lm1kYC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0Tm90ZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZWZsZWN0cyBhIGNvbmZpZyBpbnRlcmZhY2Ugd2hvc2Ugb3B0aW9ucyBhcmUgZGVtb25zdHJhdGVkIGJ5IHRoZWlyIGJhcmUgbmFtZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZW1vVmF1bHRDb25maWdJbnRlcmZhY2VDb3ZlcmFnZVNwZWMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGBleHBvcnQgaW50ZXJmYWNlYCwgYGV4cG9ydCBjbGFzc2AsIG9yIGBleHBvcnQgZW51bWAgd2hvc2UgcHJvcGVydGllcyBhcmUgdGhlIGNvbmZpZ1xuICAgKiBvcHRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJmYWNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIGZpbGUgcGF0aCAocmVsYXRpdmUgdG8gdGhlIHJlcG8gcm9vdCkgdGhhdCBkZWNsYXJlcyB0aGUgaW50ZXJmYWNlLCBjbGFzcywgb3IgZW51bS5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZVBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJ9IGNvbnN0cnVjdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlckNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBub3RlcyAocGF0aHMgcmVsYXRpdmUgdG8gdGhlIGRlbW8gdmF1bHQpIGV4ZW1wdCBmcm9tIHRoZSBhdXRob3JpbmcgY2hlY2tzLiBEZWZhdWx0cyB0byB0aGVcbiAgICogdmF1bHQncyBvd24gYFJFQURNRS5tZGAuXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlZE5vdGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBwbHVnaW4gcmVwbyByb290IFx1MjAxNCB0aGUgZm9sZGVyIGNvbnRhaW5pbmcgYGRlbW8tdmF1bHQvYCBhbmQgdGhlIHNvdXJjZSBiZWluZ1xuICAgKiByZWZsZWN0ZWQuIENhbGxlcnMgdHlwaWNhbGx5IHBhc3MgYGdldFJvb3RGb2xkZXIoKSA/PyBwcm9jZXNzLmN3ZCgpYC5cbiAgICovXG4gIHJlYWRvbmx5IHJvb3RGb2xkZXI6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3Ige0BsaW5rIERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlci5maW5kU3RhbGVSZWZlcmVuY2VzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJGaW5kU3RhbGVSZWZlcmVuY2VzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSByZWNlaXZlciB3aG9zZSBgYCBgJHtyZWNlaXZlcn0uPG1lbWJlcj5gIGBgIHJlZmVyZW5jZXMgYXJlIHNjYW5uZWQgZm9yIGluIHRoZSBkZW1vIGNvcnB1cy5cbiAgICovXG4gIHJlYWRvbmx5IHJlY2VpdmVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBtZW1iZXJzIHRoYXQgY3VycmVudGx5IGV4aXN0IG9uIHRoZSByZWNlaXZlcjsgYW55IHJlZmVyZW5jZWQgbWVtYmVyIG5vdCBpbiB0aGlzIHNldCBpcyBzdGFsZS5cbiAgICovXG4gIHJlYWRvbmx5IHZhbGlkTWVtYmVyczogc3RyaW5nW107XG59XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIHtAbGluayBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXIuZmluZFVuZGVtb25zdHJhdGVkTWVtYmVyc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyRmluZFVuZGVtb25zdHJhdGVkTWVtYmVyc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgbWVtYmVyIG5hbWVzIHRoYXQgbXVzdCBlYWNoIGFwcGVhciBpbiB0aGUgZGVtbyBjb3JwdXMuXG4gICAqL1xuICByZWFkb25seSBtZW1iZXJzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogV2hlbiBzZXQsIGEgbWVtYmVyIGlzIGRlbW9uc3RyYXRlZCBvbmx5IGlmIGBgIGAke3JlY2VpdmVyfS4ke21lbWJlcn1gIGBgIGFwcGVhcnMgKGUuZy4gYSBjb250ZXh0IG9iamVjdCdzXG4gICAqIG1ldGhvZHMpOyB3aGVuIGFic2VudCwgdGhlIGJhcmUgbWVtYmVyIG5hbWUgaXMgbG9va2VkIHVwIChlLmcuIGEgY29uZmlnIG9wdGlvbikuXG4gICAqL1xuICByZWFkb25seSByZWNlaXZlcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3Ige0BsaW5rIERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlci5maW5kVW5saW5rZWRGZWF0dXJlRG9jc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyRmluZFVubGlua2VkRmVhdHVyZURvY3NQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGRvY3MgZm9sZGVyIChyZWxhdGl2ZSB0byB0aGUgcmVwbyByb290KSB3aG9zZSB0b3AtbGV2ZWwgYCoubWRgIGZpbGVzIGFyZSB0aGUgZmVhdHVyZSBkb2NzLlxuICAgKi9cbiAgcmVhZG9ubHkgZG9jc0ZvbGRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZG9jIGJhc2VuYW1lcyAod2l0aG91dCBgLm1kYCkgdGhhdCBhcmUgTk9UIHBlci1mZWF0dXJlIHBhZ2VzIGFuZCBzbyBuZWVkIG5vIGxpbmtpbmcgZGVtbyBub3RlLlxuICAgKi9cbiAgcmVhZG9ubHkgbm9uRmVhdHVyZURvY3M6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBwYXJhbWV0ZXJzIGZvciB7QGxpbmsgRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyLmZpbmRVbnJlYWNoYWJsZU5vdGVzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJGaW5kVW5yZWFjaGFibGVOb3Rlc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgbm90ZSAocGF0aCByZWxhdGl2ZSB0byB0aGUgZGVtbyB2YXVsdCkgdGhlIHdhbGsgc3RhcnRzIGZyb20sIGUuZy4gYDAwIFN0YXJ0Lm1kYC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0Tm90ZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBwYXJhbWV0ZXJzIGZvciB7QGxpbmsgRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyLmdldEV4cG9ydGVkRnVuY3Rpb25OYW1lc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyR2V0RXhwb3J0ZWRGdW5jdGlvbk5hbWVzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgZmlsZSBwYXRoIChyZWxhdGl2ZSB0byB0aGUgcmVwbyByb290KSB3aG9zZSBgZXhwb3J0IGZ1bmN0aW9uYHMgYXJlIHBhcnNlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZVBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3Ige0BsaW5rIERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlci5nZXRJbnRlcmZhY2VNZW1iZXJzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJHZXRJbnRlcmZhY2VNZW1iZXJzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBgZXhwb3J0IGludGVyZmFjZWAsIGBleHBvcnQgY2xhc3NgLCBvciBgZXhwb3J0IGVudW1gIHRvIHBhcnNlLlxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJmYWNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIGZpbGUgcGF0aCAocmVsYXRpdmUgdG8gdGhlIHJlcG8gcm9vdCkgdGhhdCBkZWNsYXJlcyB0aGUgaW50ZXJmYWNlLCBjbGFzcywgb3IgZW51bS5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZVBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb25maWd1cmVzIHRoZSBmZWF0dXJlLWRvYyBsaW5raW5nIGNoZWNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlbW9WYXVsdERvY3NDb3ZlcmFnZVNwZWMge1xuICAvKipcbiAgICogVGhlIGRvY3MgZm9sZGVyIChyZWxhdGl2ZSB0byB0aGUgcmVwbyByb290KSB3aG9zZSB0b3AtbGV2ZWwgYCoubWRgIGZpbGVzIGFyZSB0aGUgZmVhdHVyZSBkb2NzLlxuICAgKi9cbiAgcmVhZG9ubHkgZm9sZGVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkb2MgYmFzZW5hbWVzICh3aXRob3V0IGAubWRgKSB0aGF0IGFyZSBOT1QgcGVyLWZlYXR1cmUgcGFnZXMgYW5kIHNvIG5lZWQgbm8gbGlua2luZyBkZW1vIG5vdGUuXG4gICAqL1xuICByZWFkb25seSBub25GZWF0dXJlRG9jczogc3RyaW5nW107XG59XG5cbi8qKlxuICogUmVmbGVjdHMgYSBtb2R1bGUncyBleHBvcnRlZCBmdW5jdGlvbnMsIGVhY2ggZGVtb25zdHJhdGVkIGJ5IGl0cyBiYXJlIG5hbWUgaW4gdGhlIGRlbW8gY29ycHVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlbW9WYXVsdEZ1bmN0aW9uc0NvdmVyYWdlU3BlYyB7XG4gIC8qKlxuICAgKiBUaGUgc291cmNlIGZpbGUgcGF0aCAocmVsYXRpdmUgdG8gdGhlIHJlcG8gcm9vdCkgd2hvc2UgYGV4cG9ydCBmdW5jdGlvbmBzIG11c3QgZWFjaCBiZSBkZW1vbnN0cmF0ZWQuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVmbGVjdHMgYSBzaW5nbGUgaW50ZXJmYWNlJ3MgbWVtYmVycyBhbmQgZGVtb25zdHJhdGVzIHRoZW0gdmlhIGBgIGAke3JlY2VpdmVyfS48bWVtYmVyPmAgYGAgcmVmZXJlbmNlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZW1vVmF1bHRJbnRlcmZhY2VDb3ZlcmFnZVNwZWMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGBleHBvcnQgaW50ZXJmYWNlYCwgYGV4cG9ydCBjbGFzc2AsIG9yIGBleHBvcnQgZW51bWAgdG8gcmVmbGVjdC5cbiAgICovXG4gIHJlYWRvbmx5IGludGVyZmFjZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZGVtb25zdHJhdGVkIG1lbWJlcnMgYXJlIHRoZSByZWZsZWN0ZWQgdHlwZSdzIG1ldGhvZHMgb3IgaXRzIHByb3BlcnRpZXMgKGVudW0gbWVtYmVycyBjb3VudCBhc1xuICAgKiBwcm9wZXJ0aWVzKS5cbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IERlbW9WYXVsdEludGVyZmFjZU1lbWJlcktpbmQ7XG5cbiAgLyoqXG4gICAqIFRoZSBpZGVudGlmaWVyIHRoZSBub3RlcyBjYWxsIHRoZSBtZW1iZXJzIG9uIChlLmcuIGBjb2RlQnV0dG9uQ29udGV4dGApLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVjZWl2ZXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNvdXJjZSBmaWxlIHBhdGggKHJlbGF0aXZlIHRvIHRoZSByZXBvIHJvb3QpIHRoYXQgZGVjbGFyZXMgdGhlIGludGVyZmFjZSwgY2xhc3MsIG9yIGVudW0uXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogV2hldGhlciBhbiBpbnRlcmZhY2UncyBkZW1vbnN0cmF0ZWQgbWVtYmVycyBhcmUgaXRzIG1ldGhvZHMgb3IgaXRzIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCB0eXBlIERlbW9WYXVsdEludGVyZmFjZU1lbWJlcktpbmQgPSAnbWV0aG9kcycgfCAncHJvcGVydGllcyc7XG5cbi8qKlxuICogQ29uZmlndXJlcyB0aGUgZ3VhcmQgdGhhdCB0aGUgcmVmbGVjdGVkIHN1cmZhY2UgaXMgbm9uLXRyaXZpYWwgKHByb3RlY3RzIGFnYWluc3QgYSBwYXJzaW5nIHJlZ3Jlc3Npb25cbiAqIHNpbGVudGx5IGVtcHR5aW5nIGV2ZXJ5IG90aGVyIGNoZWNrKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZW1vVmF1bHROb25Ucml2aWFsR3VhcmRTcGVjIHtcbiAgLyoqXG4gICAqIEEgZGVtbyBub3RlIChwYXRoIHJlbGF0aXZlIHRvIHRoZSBkZW1vIHZhdWx0KSB0aGF0IG11c3QgYmUgcHJlc2VudC5cbiAgICovXG4gIHJlYWRvbmx5IGV4cGVjdERlbW9Ob3RlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgbWVtYmVyIHRoYXQgbXVzdCBiZSByZWZsZWN0ZWQgZnJvbSB7QGxpbmsgRGVtb1ZhdWx0Tm9uVHJpdmlhbEd1YXJkU3BlYy5pbnRlcmZhY2VOYW1lfS5cbiAgICovXG4gIHJlYWRvbmx5IGV4cGVjdE1lbWJlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYGV4cG9ydCBpbnRlcmZhY2VgLCBgZXhwb3J0IGNsYXNzYCwgb3IgYGV4cG9ydCBlbnVtYCB3aG9zZSBtZW1iZXJzIGFyZSByZS1wYXJzZWQgZm9yIHRoZVxuICAgKiBndWFyZC5cbiAgICovXG4gIHJlYWRvbmx5IGludGVyZmFjZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNvdXJjZSBmaWxlIHBhdGggKHJlbGF0aXZlIHRvIHRoZSByZXBvIHJvb3QpIHRoYXQgZGVjbGFyZXMgdGhlIGludGVyZmFjZSwgY2xhc3MsIG9yIGVudW0uXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzaW5nbGUgZGVtbyBub3RlLCBhcyByZWFkIGZyb20gdGhlIGRlbW8gdmF1bHQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVtb1ZhdWx0Tm90ZSB7XG4gIC8qKlxuICAgKiBUaGUgbm90ZSdzIHJhdyBNYXJrZG93biBjb250ZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbm90ZSdzIHBhdGggcmVsYXRpdmUgdG8gdGhlIGRlbW8gdmF1bHQgZm9sZGVyLCBlLmcuIGAwMCBTdGFydC5tZGAuXG4gICAqL1xuICByZWFkb25seSByZWxhdGl2ZVBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcGFyc2VkIG1lbWJlcnMgb2YgYSBzb3VyY2UgaW50ZXJmYWNlLCBjbGFzcywgb3IgZW51bS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlcmZhY2VNZW1iZXJzIHtcbiAgLyoqXG4gICAqIEV2ZXJ5IG1lbWJlciBcdTIwMTQge0BsaW5rIEludGVyZmFjZU1lbWJlcnMubWV0aG9kc30gZm9sbG93ZWQgYnkge0BsaW5rIEludGVyZmFjZU1lbWJlcnMucHJvcGVydGllc30uXG4gICAqL1xuICByZWFkb25seSBhbGw6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgbWV0aG9kIG1lbWJlcnMgKGRlY2xhcmVkIGFzIGBuYW1lKC4uLilgKS5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGhvZHM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvcGVydHkgbWVtYmVycyAoZGVjbGFyZWQgYXMgYG5hbWU/OiAuLi5gKS5cbiAgICovXG4gIHJlYWRvbmx5IHByb3BlcnRpZXM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEEgbm90ZSBsaW5lIHBhaXJlZCB3aXRoIHRoZSBsaW5lIG51bWJlciBpdCBjYW1lIGZyb20sIHNvIGEgY2hlY2sgdGhhdCBza2lwcyBmZW5jZWQgYmxvY2tzIGNhbiBzdGlsbFxuICogcmVwb3J0IFx1MjAxNCBhbmQgYW4gaW5saW5lIGRpcmVjdGl2ZSBjYW4gc3RpbGwgbmFtZSBcdTIwMTQgdGhlIGxpbmUgYXMgdGhlIHJlYWRlciBzZWVzIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vdGVMaW5lIHtcbiAgLyoqXG4gICAqIFRoZSB6ZXJvLWJhc2VkIGxpbmUgbnVtYmVyIHdpdGhpbiB0aGUgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IGluZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBsaW5lJ3MgcmF3IHRleHQuXG4gICAqL1xuICByZWFkb25seSBsaW5lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBgZGlzYWJsZWAgcmVnaW9uIHRoYXQgaGFzIGJlZW4gb3BlbmVkIGFuZCBub3QgeWV0IGVuYWJsZWQgYWdhaW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3Blbldpa2lsaW5rRGlyZWN0aXZlUmVnaW9uIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHJlZ2lvbiBoYXMgY292ZXJlZCBhIHdpa2lsaW5rLCB3aGljaCBpcyB3aGF0IHN0b3BzIGl0IGJlaW5nIHJlcG9ydGVkIGFzIHBvaW50bGVzcy5cbiAgICovXG4gIGlzVXNlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGxpbmUgdGhlIHJlZ2lvbiB3YXMgb3BlbmVkIG9uLlxuICAgKi9cbiAgcmVhZG9ubHkgbGluZUluZGV4OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIHtAbGluayByZWdpc3RlckRlbW9WYXVsdENvdmVyYWdlU3VpdGV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdGVyRGVtb1ZhdWx0Q292ZXJhZ2VTdWl0ZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUdW5lcyB0aGUgYWx3YXlzLW9uIGF1dGhvcmluZyBjaGVja3MsIG9yIGB1bmRlZmluZWRgIHRvIHRha2UgdGhlaXIgZGVmYXVsdHMuIEl0IGNhbm5vdCBkaXNhYmxlIHRoZW0uXG4gICAqL1xuICByZWFkb25seSBhdXRob3Jpbmc/OiBEZW1vVmF1bHRBdXRob3JpbmdTcGVjO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlnIGludGVyZmFjZXMgd2hvc2Ugb3B0aW9ucyBtdXN0IGVhY2ggYmUgZGVtb25zdHJhdGVkIGJ5IHRoZWlyIGJhcmUgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IGNvbmZpZ0ludGVyZmFjZXM6IERlbW9WYXVsdENvbmZpZ0ludGVyZmFjZUNvdmVyYWdlU3BlY1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgZmVhdHVyZS1kb2MgbGlua2luZyBjaGVjaywgb3IgYHVuZGVmaW5lZGAgd2hlbiB0aGUgcGx1Z2luIHNoaXBzIG5vIGBkb2NzL2AgZm9sZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgZG9jcz86IERlbW9WYXVsdERvY3NDb3ZlcmFnZVNwZWM7XG5cbiAgLyoqXG4gICAqIFRoZSBtb2R1bGVzIHdob3NlIGBleHBvcnQgZnVuY3Rpb25gcyBtdXN0IGVhY2ggYmUgZGVtb25zdHJhdGVkIGJ5IHRoZWlyIGJhcmUgbmFtZSwgb3IgYHVuZGVmaW5lZGAgd2hlbiB0aGVcbiAgICogcGx1Z2luIGV4cG9zZXMgbm8gc3VjaCBtb2R1bGUgdG8gY2hlY2suXG4gICAqL1xuICByZWFkb25seSBmdW5jdGlvbk1vZHVsZXM/OiBEZW1vVmF1bHRGdW5jdGlvbnNDb3ZlcmFnZVNwZWNbXTtcblxuICAvKipcbiAgICogVGhlIGludGVyZmFjZXMgd2hvc2UgbWVtYmVycyBtdXN0IGVhY2ggYmUgZGVtb25zdHJhdGVkIChhbmQgcmVmZXJlbmNlZCB3aXRob3V0IGRyaWZ0KS5cbiAgICovXG4gIHJlYWRvbmx5IGludGVyZmFjZXM6IERlbW9WYXVsdEludGVyZmFjZUNvdmVyYWdlU3BlY1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgZ3VhcmQgdGhhdCBrZWVwcyB0aGUgcmVmbGVjdGVkIHN1cmZhY2Ugbm9uLXRyaXZpYWwuXG4gICAqL1xuICByZWFkb25seSBub25Ucml2aWFsR3VhcmQ6IERlbW9WYXVsdE5vblRyaXZpYWxHdWFyZFNwZWM7XG5cbiAgLyoqXG4gICAqIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBwbHVnaW4gcmVwbyByb290LiBDYWxsZXJzIHR5cGljYWxseSBwYXNzIGBnZXRSb290Rm9sZGVyKCkgPz8gcHJvY2Vzcy5jd2QoKWAuXG4gICAqL1xuICByZWFkb25seSByb290Rm9sZGVyOiBzdHJpbmc7XG59XG5cbi8qKlxuICogV2hhdCBhIG5vdGUncyBpbmxpbmUgYG9ic2lkaWFuLWRldi11dGlscy1kaXNhYmxlXHUyMDI2YCBkaXJlY3RpdmVzIGFsbG93LCBhbmQgd2hhdCBpcyB3cm9uZyB3aXRoIHRoZW0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2lraWxpbmtEaXJlY3RpdmVTY2FuIHtcbiAgLyoqXG4gICAqIFRoZSB6ZXJvLWJhc2VkIGxpbmUgbnVtYmVycyBhIGRpcmVjdGl2ZSBhbGxvd3MgYSB3aWtpbGluayBvbi5cbiAgICovXG4gIHJlYWRvbmx5IGFsbG93ZWRMaW5lSW5kZXhlczogUmVhZG9ubHlTZXQ8bnVtYmVyPjtcblxuICAvKipcbiAgICogVGhlIGRpcmVjdGl2ZSBtaXN0YWtlcyBmb3VuZCwgZWFjaCBwaHJhc2VkIGZvciBhIGZhaWxpbmcgYXNzZXJ0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvYmxlbXM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBydW5uaW5nIHN0YXRlIG9mIGEgZGlyZWN0aXZlIHNjYW4sIHRocmVhZGVkIHRocm91Z2ggdGhlIHBlci1saW5lIGhlbHBlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2lraWxpbmtEaXJlY3RpdmVTY2FuU3RhdGUge1xuICAvKipcbiAgICogVGhlIGxpbmVzIGEgZGlyZWN0aXZlIGhhcyBhbGxvd2VkIGEgd2lraWxpbmsgb24gc28gZmFyLlxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dlZExpbmVJbmRleGVzOiBTZXQ8bnVtYmVyPjtcblxuICAvKipcbiAgICogVGhlIHJlZ2lvbiBjdXJyZW50bHkgb3BlbiwgYW5kIHdoZXRoZXIgaXQgaGFzIGNvdmVyZWQgYSB3aWtpbGluayB5ZXQuXG4gICAqL1xuICBvcGVuUmVnaW9uOiBudWxsIHwgT3Blbldpa2lsaW5rRGlyZWN0aXZlUmVnaW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbGluZSBhIGBkaXNhYmxlLW5leHQtbGluZWAgd2FzIHJlYWQgb24sIHdoaWxlIGl0IHN0aWxsIHdhaXRzIGZvciB0aGUgbGluZSBpdCBjb3ZlcnMuXG4gICAqL1xuICBwZW5kaW5nTmV4dExpbmVJbmRleDogbnVsbCB8IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGRpcmVjdGl2ZSBtaXN0YWtlcyBmb3VuZCBzbyBmYXIuXG4gICAqL1xuICByZWFkb25seSBwcm9ibGVtczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBsaW5lcyBvZiB0aGUgbm90ZSB0aGF0IGNhcnJ5IGEgd2lraWxpbmsuXG4gICAqL1xuICByZWFkb25seSB3aWtpbGlua0xpbmVJbmRleGVzOiBSZWFkb25seVNldDxudW1iZXI+O1xufVxuXG4vKipcbiAqIFJlZmxlY3RzIGEgcGx1Z2luJ3MgcHVibGljIHN1cmZhY2UgZnJvbSBzb3VyY2UgYW5kIGNoZWNrcyBpdHMgaW4tcmVwbyBgZGVtby12YXVsdC9gIHN0YXlzIGluIHN5bmMgd2l0aCBpdC5cbiAqXG4gKiBFdmVyeSBtZXRob2QgaXMgYSBwdXJlIHF1ZXJ5IG92ZXIgZmlsZXMgdW5kZXIgdGhlIHJlcG8gcm9vdCAodGhlIGRlbW8gY29ycHVzIGlzIHJlYWQgb25jZSBhbmQgY2FjaGVkKSwgc29cbiAqIHRoZSBjaGVja2VyIGlzIHRyaXZpYWxseSB1bml0LXRlc3RhYmxlIGFnYWluc3QgYSBmaXh0dXJlIHJlcG8gYW5kIGNhcnJpZXMgbm8gdGVzdC1mcmFtZXdvcmsgZGVwZW5kZW5jeS5cbiAqL1xuZXhwb3J0IGNsYXNzIERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlciB7XG4gIHByaXZhdGUgY2FjaGVkQ29ycHVzOiBudWxsIHwgc3RyaW5nID0gbnVsbDtcbiAgcHJpdmF0ZSBjYWNoZWROb3RlczogRGVtb1ZhdWx0Tm90ZVtdIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVtb1ZhdWx0Rm9sZGVyOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhjbHVkZWROb3RlczogU2V0PHN0cmluZz47XG4gIHByaXZhdGUgcmVhZG9ubHkgcm9vdEZvbGRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY2hlY2tlciByb290ZWQgYXQgYSBwbHVnaW4gcmVwby5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY29uc3RydWN0b3IuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHRoaXMucm9vdEZvbGRlciA9IHBhcmFtcy5yb290Rm9sZGVyO1xuICAgIHRoaXMuZGVtb1ZhdWx0Rm9sZGVyID0gam9pbih0aGlzLnJvb3RGb2xkZXIsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRlbW9WYXVsdCk7XG4gICAgdGhpcy5leGNsdWRlZE5vdGVzID0gbmV3IFNldChwYXJhbXMuZXhjbHVkZWROb3RlcyA/PyBERUZBVUxUX0VYQ0xVREVEX05PVEVTKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0cyB0aGUgZGVtbyBub3RlcyBhcyBwYXRocyByZWxhdGl2ZSB0byB0aGUgZGVtbyB2YXVsdCBmb2xkZXIgKGZvciBhIG5vbi10cml2aWFsLXN1cmZhY2UgZ3VhcmQpLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgcmVsYXRpdmUgcGF0aHMgb2YgZXZlcnkgYCoubWRgIG5vdGUgaW4gdGhlIGRlbW8gdmF1bHQuXG4gICAqL1xuICBwdWJsaWMgY29sbGVjdERlbW9Ob3RlUmVsYXRpdmVQYXRocygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdE5vdGVzKCkubWFwKChub3RlKSA9PiBub3RlLnJlbGF0aXZlUGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogUmVhZHMgYW5kIGNhY2hlcyBldmVyeSBkZW1vIG5vdGUgaW5kaXZpZHVhbGx5IFx1MjAxNCB0aGUgcGVyLW5vdGUgdmlldyB0aGUgYXV0aG9yaW5nIGNoZWNrcyB3b3JrIG9uLCBhc1xuICAgKiBvcHBvc2VkIHRvIHRoZSBjb25jYXRlbmF0ZWQge0BsaW5rIERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlci5yZWFkQ29ycHVzfS5cbiAgICpcbiAgICogQHJldHVybnMgRXZlcnkgYCoubWRgIG5vdGUgaW4gdGhlIGRlbW8gdmF1bHQsIGV4Y2x1ZGVkIG9uZXMgaW5jbHVkZWQuXG4gICAqL1xuICBwdWJsaWMgY29sbGVjdE5vdGVzKCk6IERlbW9WYXVsdE5vdGVbXSB7XG4gICAgdGhpcy5jYWNoZWROb3RlcyA/Pz0gdGhpcy5jb2xsZWN0TWFya2Rvd25GaWxlcyh0aGlzLmRlbW9WYXVsdEZvbGRlcikubWFwKChmaWxlKSA9PiAoe1xuICAgICAgY29udGVudDogcmVhZEZpbGVTeW5jKGZpbGUsICd1dGYtOCcpLFxuICAgICAgcmVsYXRpdmVQYXRoOiByZWxhdGl2ZSh0aGlzLmRlbW9WYXVsdEZvbGRlciwgZmlsZSlcbiAgICB9KSk7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVkTm90ZXM7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgdGhlIGAub2JzaWRpYW4vYXBwLmpzb25gIHNldHRpbmdzIHRoZSB2YXVsdCBjb21taXRzIHRoYXQgYG9ic2lkaWFuLWRldi11dGlsc2Agb3ducyBhbmQgd3JpdGVzXG4gICAqIGludG8gdGhlIGFyY2hpdmVkIHZhdWx0IGl0c2VsZi4gQSBjb21taXR0ZWQgb25lIGlzIGEgc2Vjb25kIGNvcHkgb2YgYSBzZXR0aW5nIG5vdGhpbmcgcmVjb25jaWxlcywgYW5kXG4gICAqIGl0IGlzIHRoZSBjb3B5IHRoYXQgZ29lcyBzdGFsZSBcdTIwMTQgc28gdGhlIGNvbnZlbnRpb24gaXMgdGhhdCB0aGUgdmF1bHQgY29tbWl0cyBub25lIG9mIHRoZW0uXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBuYW1lcyBvZiB0aGUgb3duZWQgc2V0dGluZ3MgdGhlIGNvbW1pdHRlZCBgYXBwLmpzb25gIHNldHMuIEEgdmF1bHQgdGhhdCBjb21taXRzIG5vXG4gICAqIGBhcHAuanNvbmAgYXQgYWxsIGlzIGZpbmUsIGFuZCB5aWVsZHMgbm9uZS5cbiAgICovXG4gIHB1YmxpYyBmaW5kQ29tbWl0dGVkQXBwSnNvblNldHRpbmdzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBhcHBKc29uUGF0aCA9IGpvaW4odGhpcy5kZW1vVmF1bHRGb2xkZXIsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRvdE9ic2lkaWFuLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BcHBKc29uKTtcbiAgICBjb25zdCBjb250ZW50ID0gZXhpc3RzU3luYyhhcHBKc29uUGF0aCkgPyByZWFkRmlsZVN5bmMoYXBwSnNvblBhdGgsICd1dGYtOCcpIDogbnVsbDtcbiAgICByZXR1cm4gZmluZE93bmVkRGVtb1ZhdWx0QXBwSnNvblNldHRpbmdzKHsgYXBwSnNvbjogcGFyc2VEZW1vVmF1bHRBcHBKc29uKHsgY29udGVudCwgcGF0aDogYXBwSnNvblBhdGggfSkgfSk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgbm90ZXMgY2FycnlpbmcgYSBgW0RvY3NdKFx1MjAyNilgIGxpbmsgbGluZS4gVGhlIG5vdGUgSVMgdGhlIGRvY3VtZW50YXRpb24sIHNvIGEgbGluZSBwb2ludGluZ1xuICAgKiBlbHNld2hlcmUgZm9yIHRoZSByZWFsIGV4cGxhbmF0aW9uIGlzIHRoZSBzaGFwZSB0aGlzIGNvbnZlbnRpb24gZXhpc3RzIHRvIHJlbW92ZS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHJlbGF0aXZlIHBhdGhzIG9mIHRoZSBvZmZlbmRpbmcgbm90ZXMuXG4gICAqL1xuICBwdWJsaWMgZmluZE5vdGVzV2l0aERvY3NMaW5rcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdENoZWNrYWJsZU5vdGVzKClcbiAgICAgIC5maWx0ZXIoKG5vdGUpID0+IGdldExpbmVzT3V0c2lkZUZlbmNlcyhub3RlLmNvbnRlbnQpLnNvbWUoKGxpbmUpID0+IERPQ1NfTElOS19SRUdfRVhQLnRlc3QobGluZSkpKVxuICAgICAgLm1hcCgobm90ZSkgPT4gbm90ZS5yZWxhdGl2ZVBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIG5vdGVzIHRoYXQgZG8gbm90IG9wZW4gd2l0aCBhbiBgIyBIMWAgKGZyb250bWF0dGVyIGFzaWRlKS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHJlbGF0aXZlIHBhdGhzIG9mIHRoZSBvZmZlbmRpbmcgbm90ZXMuXG4gICAqL1xuICBwdWJsaWMgZmluZE5vdGVzV2l0aG91dEgxKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0Q2hlY2thYmxlTm90ZXMoKVxuICAgICAgLmZpbHRlcigobm90ZSkgPT4gIWhhc0gxKG5vdGUuY29udGVudCkpXG4gICAgICAubWFwKChub3RlKSA9PiBub3RlLnJlbGF0aXZlUGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgbm90ZXMgd2l0aCBubyBwcm9zZSBwYXJhZ3JhcGggYmVmb3JlIHRoZWlyIGZpcnN0IGNvZGUgZmVuY2UgXHUyMDE0IHRoZSAxLTMgc2VudGVuY2VzIHNheWluZyB3aGF0IHRoZVxuICAgKiBmZWF0dXJlIGRvZXMgYW5kIHdoeSBhIHJlYWRlciB3b3VsZCB3YW50IGl0LCB3aXRob3V0IHdoaWNoIHRoZSBub3RlIGlzIGEgYnV0dG9uIHdpdGggbm8gbGVzc29uLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgcmVsYXRpdmUgcGF0aHMgb2YgdGhlIG9mZmVuZGluZyBub3Rlcy5cbiAgICovXG4gIHB1YmxpYyBmaW5kTm90ZXNXaXRob3V0SW50cm9Qcm9zZSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdENoZWNrYWJsZU5vdGVzKClcbiAgICAgIC5maWx0ZXIoKG5vdGUpID0+ICFoYXNJbnRyb1Byb3NlKG5vdGUuY29udGVudCkpXG4gICAgICAubWFwKChub3RlKSA9PiBub3RlLnJlbGF0aXZlUGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgbm90ZXMgd2hvc2Ugd2lraWxpbmsgYWxsb3dhbmNlIGlzIG5vdCBkb2luZyBhbnkgd29yayBcdTIwMTQgZGVjbGFyZWQgd2l0aG91dCBhIHJlYXNvbiwgb3Igb24gYSBub3RlXG4gICAqIHRoYXQgY2FycmllcyBubyB3aWtpbGluayBhdCBhbGwuIEJvdGggYXJlIGRyaWZ0OiBhbiBleGVtcHRpb24gbm9ib2R5IGNhbiBqdXN0aWZ5LCBhbmQgb25lIG5vdGhpbmcgbmVlZHNcbiAgICogYW55IG1vcmUsIHdoaWNoIHdvdWxkIGdvIG9uIGhpZGluZyB0aGUgbmV4dCB3aWtpbGluayBzb21lYm9keSBhZGRzIGJ5IGFjY2lkZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgcmVsYXRpdmUgcGF0aHMgb2YgdGhlIG9mZmVuZGluZyBub3Rlcy5cbiAgICovXG4gIHB1YmxpYyBmaW5kTm90ZXNXaXRoVW5qdXN0aWZpZWRXaWtpbGlua0FsbG93YW5jZSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdENoZWNrYWJsZU5vdGVzKCkuZmxhdE1hcCgobm90ZSkgPT4ge1xuICAgICAgY29uc3Qgc2NhbiA9IHNjYW5XaWtpbGlua0RpcmVjdGl2ZXMobm90ZS5jb250ZW50KTtcbiAgICAgIGNvbnN0IHByb2JsZW1zID0gWy4uLnNjYW4ucHJvYmxlbXNdO1xuICAgICAgY29uc3QgcmVhc29uID0gcmVhZFdpa2lsaW5rQWxsb3dhbmNlUmVhc29uKG5vdGUuY29udGVudCk7XG4gICAgICBpZiAocmVhc29uICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChyZWFzb24udHJpbSgpID09PSAnJykge1xuICAgICAgICAgIHByb2JsZW1zLnB1c2goJ2Egbm90ZS1sZXZlbCBhbGxvd2FuY2Ugd2l0aCBubyByZWFzb24nKTtcbiAgICAgICAgfSBlbHNlIGlmICghaGFzV2lraWxpbmsobm90ZS5jb250ZW50KSkge1xuICAgICAgICAgIHByb2JsZW1zLnB1c2goJ2Egbm90ZS1sZXZlbCBhbGxvd2FuY2UgY292ZXJpbmcgbm8gd2lraWxpbmsnKTtcbiAgICAgICAgfSBlbHNlIGlmIChzY2FuLmFsbG93ZWRMaW5lSW5kZXhlcy5zaXplID4gMCkge1xuICAgICAgICAgIHByb2JsZW1zLnB1c2goJ2lubGluZSBkaXJlY3RpdmVzIHRoZSBub3RlLWxldmVsIGFsbG93YW5jZSBhbHJlYWR5IGNvdmVycycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvYmxlbXMubWFwKChwcm9ibGVtKSA9PiBgJHtub3RlLnJlbGF0aXZlUGF0aH06ICR7cHJvYmxlbX1gKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBub3RlcyB1c2luZyBhbiBPYnNpZGlhbiBgW1t3aWtpbGlua11dYCBvdXRzaWRlIGEgY29kZSBmZW5jZS4gVGhlIGRlbW8gdmF1bHQgaXMgYWxzbyByZWFkIG9uXG4gICAqIEdpdEh1Yiwgd2hlcmUgYSB3aWtpbGluayByZW5kZXJzIGFzIGxpdGVyYWwgYnJhY2tldHMgYW5kIGxlYWRzIG5vd2hlcmUuIEEgd2lraWxpbmsgc2hvd24gSU5TSURFIGFcbiAgICogZmVuY2UgaXMgc2FtcGxlIHRleHQsIG5vdCBuYXZpZ2F0aW9uLCBzbyBmZW5jZWQgYmxvY2tzIGFyZSBza2lwcGVkLCBhcyBpcyBhIG5vdGUgdGhhdCBkZWNsYXJlcyBpbiBpdHNcbiAgICogZnJvbnRtYXR0ZXIgd2h5IGl0cyB3aWtpbGlua3MgYXJlIHRoZSBwb2ludCBcdTIwMTQgc2VlIHRoZSBmaWxlIG92ZXJ2aWV3LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgcmVsYXRpdmUgcGF0aHMgb2YgdGhlIG9mZmVuZGluZyBub3Rlcy5cbiAgICovXG4gIHB1YmxpYyBmaW5kTm90ZXNXaXRoV2lraWxpbmtzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0Q2hlY2thYmxlTm90ZXMoKVxuICAgICAgLmZpbHRlcigobm90ZSkgPT4ge1xuICAgICAgICBpZiAocmVhZFdpa2lsaW5rQWxsb3dhbmNlUmVhc29uKG5vdGUuY29udGVudCkgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBhbGxvd2VkTGluZUluZGV4ZXMgfSA9IHNjYW5XaWtpbGlua0RpcmVjdGl2ZXMobm90ZS5jb250ZW50KTtcbiAgICAgICAgcmV0dXJuIGZpbmRXaWtpbGlua0xpbmVJbmRleGVzKG5vdGUuY29udGVudCkuc29tZSgobGluZUluZGV4KSA9PiAhYWxsb3dlZExpbmVJbmRleGVzLmhhcyhsaW5lSW5kZXgpKTtcbiAgICAgIH0pXG4gICAgICAubWFwKChub3RlKSA9PiBub3RlLnJlbGF0aXZlUGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgbWVtYmVycyB0aGF0IHRoZSBkZW1vIG5vdGVzIHJlZmVyZW5jZSBvbiBhIHJlY2VpdmVyIGJ1dCB0aGF0IG5vIGxvbmdlciBleGlzdCBvbiBpdCAocmVuYW1lIGRyaWZ0KS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgbG9va3VwLlxuICAgKiBAcmV0dXJucyBUaGUgZGlzdGluY3Qgc3RhbGUgbWVtYmVyIG5hbWVzIHJlZmVyZW5jZWQgaW4gdGhlIGRlbW8gY29ycHVzLlxuICAgKi9cbiAgcHVibGljIGZpbmRTdGFsZVJlZmVyZW5jZXMocGFyYW1zOiBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJGaW5kU3RhbGVSZWZlcmVuY2VzUGFyYW1zKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHZhbGlkTWVtYmVycyA9IG5ldyBTZXQocGFyYW1zLnZhbGlkTWVtYmVycyk7XG4gICAgY29uc3QgcmVmZXJlbmNlZCA9IFsuLi50aGlzLnJlYWRDb3JwdXMoKS5tYXRjaEFsbChuZXcgUmVnRXhwKFN0cmluZy5yYXdgJHtwYXJhbXMucmVjZWl2ZXJ9XFwuKD88bWVtYmVyPlxcdyspYCwgJ2cnKSldXG4gICAgICAubWFwKChtYXRjaCkgPT4gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ21lbWJlcicpKTtcbiAgICByZXR1cm4gWy4uLm5ldyBTZXQocmVmZXJlbmNlZCldLmZpbHRlcigobWVtYmVyKSA9PiAhdmFsaWRNZW1iZXJzLmhhcyhtZW1iZXIpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBtZW1iZXJzIHRoYXQgYXJlIG5vdCBkZW1vbnN0cmF0ZWQgYW55d2hlcmUgaW4gdGhlIGRlbW8gY29ycHVzLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBsb29rdXAuXG4gICAqIEByZXR1cm5zIFRoZSBtZW1iZXIgbmFtZXMgd2l0aCBubyBkZW1vbnN0cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGZpbmRVbmRlbW9uc3RyYXRlZE1lbWJlcnMocGFyYW1zOiBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJGaW5kVW5kZW1vbnN0cmF0ZWRNZW1iZXJzUGFyYW1zKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGNvcnB1cyA9IHRoaXMucmVhZENvcnB1cygpO1xuICAgIHJldHVybiBwYXJhbXMubWVtYmVycy5maWx0ZXIoKG1lbWJlcikgPT4ge1xuICAgICAgY29uc3QgbmVlZGxlID0gcGFyYW1zLnJlY2VpdmVyID09PSB1bmRlZmluZWQgPyBtZW1iZXIgOiBgJHtwYXJhbXMucmVjZWl2ZXJ9LiR7bWVtYmVyfWA7XG4gICAgICByZXR1cm4gIWNvcnB1cy5pbmNsdWRlcyhuZWVkbGUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIGZlYXR1cmUgZG9jcyB0aGF0IG5vIGRlbW8gbm90ZSBsaW5rcyB0by5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgbG9va3VwLlxuICAgKiBAcmV0dXJucyBUaGUgZmVhdHVyZS1kb2MgYmFzZW5hbWVzICh3aXRob3V0IGAubWRgKSBub3QgbGlua2VkIGZyb20gYW55IGRlbW8gbm90ZS5cbiAgICovXG4gIHB1YmxpYyBmaW5kVW5saW5rZWRGZWF0dXJlRG9jcyhwYXJhbXM6IERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlckZpbmRVbmxpbmtlZEZlYXR1cmVEb2NzUGFyYW1zKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IG5vbkZlYXR1cmVEb2NzID0gbmV3IFNldChwYXJhbXMubm9uRmVhdHVyZURvY3MpO1xuICAgIGNvbnN0IGZlYXR1cmVEb2NzID0gcmVhZGRpclN5bmMoam9pbih0aGlzLnJvb3RGb2xkZXIsIHBhcmFtcy5kb2NzRm9sZGVyKSlcbiAgICAgIC5maWx0ZXIoKGZpbGUpID0+IGZpbGUuZW5kc1dpdGgoJy5tZCcpKVxuICAgICAgLm1hcCgoZmlsZSkgPT4gZmlsZS5yZXBsYWNlKC9cXC5tZCQvLCAnJykpXG4gICAgICAuZmlsdGVyKChuYW1lKSA9PiAhbm9uRmVhdHVyZURvY3MuaGFzKG5hbWUpKTtcbiAgICBjb25zdCBsaW5rZWREb2NzID0gbmV3IFNldChcbiAgICAgIFsuLi50aGlzLnJlYWRDb3JwdXMoKS5tYXRjaEFsbCgvZG9jc1xcLyg/PGRvYz5bXFx3LV0rKVxcLm1kL2cpXS5tYXAoKG1hdGNoKSA9PiBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnZG9jJykpXG4gICAgKTtcbiAgICByZXR1cm4gZmVhdHVyZURvY3MuZmlsdGVyKChkb2MpID0+ICFsaW5rZWREb2NzLmhhcyhkb2MpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBub3RlcyB0aGF0IGNhbm5vdCBiZSByZWFjaGVkIGZyb20gdGhlIHN0YXJ0IG5vdGUgYnkgZm9sbG93aW5nIE1hcmtkb3duIGxpbmtzIGJldHdlZW4gbm90ZXMuXG4gICAqXG4gICAqIFRoZSB3YWxrIHN0YXJ0cyBhdCB7QGxpbmsgRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyRmluZFVucmVhY2hhYmxlTm90ZXNQYXJhbXMuc3RhcnROb3RlfSBhbmQgZm9sbG93c1xuICAgKiBldmVyeSBgW1RleHRdKDwuL05OIE5hbWUubWQ+KWAgbGluayBvdXRzaWRlIGEgY29kZSBmZW5jZSwgdHJhbnNpdGl2ZWx5LiBBIG5vdGUgbm90aGluZyBsaW5rcyB0byBpc1xuICAgKiBvbmUgYSByZWFkZXIgY2FuIG9ubHkgZmluZCBieSBicm93c2luZyB0aGUgZmlsZSBsaXN0IFx1MjAxNCB3aGljaCBpcyBleGFjdGx5IHdoYXQgdGhlIGdyb3VwZWQgaW5kZXggaW4gdGhlXG4gICAqIHN0YXJ0IG5vdGUgaXMgbWVhbnQgdG8gcmVwbGFjZS4gV2hlbiB0aGUgc3RhcnQgbm90ZSBpdHNlbGYgaXMgbWlzc2luZywgRVZFUlkgbm90ZSBpcyB1bnJlYWNoYWJsZSxcbiAgICogYmVjYXVzZSB0aGVyZSBpcyBub3doZXJlIHRvIHN0YXJ0IGZyb20uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHdhbGsuXG4gICAqIEByZXR1cm5zIFRoZSByZWxhdGl2ZSBwYXRocyBvZiB0aGUgdW5yZWFjaGFibGUgbm90ZXMuXG4gICAqL1xuICBwdWJsaWMgZmluZFVucmVhY2hhYmxlTm90ZXMocGFyYW1zOiBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJGaW5kVW5yZWFjaGFibGVOb3Rlc1BhcmFtcyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBub3Rlc0J5UmVsYXRpdmVQYXRoID0gbmV3IE1hcCh0aGlzLmNvbGxlY3ROb3RlcygpLm1hcCgobm90ZSkgPT4gW25vdGUucmVsYXRpdmVQYXRoLCBub3RlXSkpO1xuICAgIGNvbnN0IHJlYWNoZWROb3RlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IHBlbmRpbmdOb3RlcyA9IFtwYXJhbXMuc3RhcnROb3RlXTtcblxuICAgIHdoaWxlIChwZW5kaW5nTm90ZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgbm90ZVBhdGggPSBlbnN1cmVOb25OdWxsYWJsZShwZW5kaW5nTm90ZXMucG9wKCkpO1xuICAgICAgY29uc3Qgbm90ZSA9IG5vdGVzQnlSZWxhdGl2ZVBhdGguZ2V0KG5vdGVQYXRoKTtcbiAgICAgIGlmICghbm90ZSB8fCByZWFjaGVkTm90ZXMuaGFzKG5vdGVQYXRoKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJlYWNoZWROb3Rlcy5hZGQobm90ZVBhdGgpO1xuICAgICAgcGVuZGluZ05vdGVzLnB1c2goLi4uY29sbGVjdE5vdGVMaW5rVGFyZ2V0cyhub3RlKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdENoZWNrYWJsZU5vdGVzKClcbiAgICAgIC5tYXAoKG5vdGUpID0+IG5vdGUucmVsYXRpdmVQYXRoKVxuICAgICAgLmZpbHRlcigobm90ZVBhdGgpID0+ICFyZWFjaGVkTm90ZXMuaGFzKG5vdGVQYXRoKSk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIHRoZSBuYW1lcyBvZiB0aGUgYGV4cG9ydCBmdW5jdGlvbmBzIChpbmNsdWRpbmcgYGFzeW5jYCBhbmQgZ2VuZXJhdG9yIGRlY2xhcmF0aW9ucykgaW4gYSBzb3VyY2UgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgbG9va3VwLlxuICAgKiBAcmV0dXJucyBUaGUgZXhwb3J0ZWQgZnVuY3Rpb24gbmFtZXMgaW4gc291cmNlIG9yZGVyLlxuICAgKi9cbiAgcHVibGljIGdldEV4cG9ydGVkRnVuY3Rpb25OYW1lcyhwYXJhbXM6IERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlckdldEV4cG9ydGVkRnVuY3Rpb25OYW1lc1BhcmFtcyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzb3VyY2UgPSByZWFkRmlsZVN5bmMoam9pbih0aGlzLnJvb3RGb2xkZXIsIHBhcmFtcy5zb3VyY2VQYXRoKSwgJ3V0Zi04Jyk7XG4gICAgcmV0dXJuIFsuLi5zb3VyY2UubWF0Y2hBbGwoL15leHBvcnQgKD86YXN5bmMgKT9mdW5jdGlvblxcKj8gKD88bmFtZT5cXHcrKS9nbSldXG4gICAgICAubWFwKChtYXRjaCkgPT4gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ25hbWUnKSk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIHRoZSBtZW1iZXJzIG9mIGFuIGBleHBvcnQgaW50ZXJmYWNlYCwgYGV4cG9ydCBjbGFzc2AsIG9yIGBleHBvcnQgZW51bWAgZGVjbGFyZWQgaW4gYSBzb3VyY2UgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgbG9va3VwLlxuICAgKiBAcmV0dXJucyBUaGUgcGFyc2VkIHtAbGluayBJbnRlcmZhY2VNZW1iZXJzfS5cbiAgICogQHRocm93cyBXaGVuIHRoZSBpbnRlcmZhY2UsIGNsYXNzLCBvciBlbnVtIGNhbm5vdCBiZSBmb3VuZCBpbiB0aGUgc291cmNlIGZpbGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0SW50ZXJmYWNlTWVtYmVycyhwYXJhbXM6IERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlckdldEludGVyZmFjZU1lbWJlcnNQYXJhbXMpOiBJbnRlcmZhY2VNZW1iZXJzIHtcbiAgICBjb25zdCBzb3VyY2UgPSByZWFkRmlsZVN5bmMoam9pbih0aGlzLnJvb3RGb2xkZXIsIHBhcmFtcy5zb3VyY2VQYXRoKSwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgbWF0Y2ggPSBuZXcgUmVnRXhwKFN0cmluZy5yYXdgZXhwb3J0ICg/PGtleXdvcmQ+aW50ZXJmYWNlfGNsYXNzfGVudW0pICR7cGFyYW1zLmludGVyZmFjZU5hbWV9XFxiW157XSpcXHsoPzxib2R5PltcXHNcXFNdKj8pXFxuXFx9YCkuZXhlYyhzb3VyY2UpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgaW50ZXJmYWNlICR7cGFyYW1zLmludGVyZmFjZU5hbWV9YCk7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZU1lbWJlcnMoZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ2tleXdvcmQnKSwgZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ2JvZHknKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVhZHMgYW5kIGNhY2hlcyB0aGUgZGVtbyBjb3JwdXMgXHUyMDE0IGV2ZXJ5IGAqLm1kYCBub3RlIGluIHRoZSBkZW1vIHZhdWx0IGpvaW5lZCBpbnRvIG9uZSBzdHJpbmcuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBjb25jYXRlbmF0ZWQgZGVtby1ub3RlIGNvbnRlbnRzLlxuICAgKi9cbiAgcHVibGljIHJlYWRDb3JwdXMoKTogc3RyaW5nIHtcbiAgICB0aGlzLmNhY2hlZENvcnB1cyA/Pz0gdGhpcy5jb2xsZWN0Tm90ZXMoKVxuICAgICAgLm1hcCgobm90ZSkgPT4gbm90ZS5jb250ZW50KVxuICAgICAgLmpvaW4oJ1xcbicpO1xuICAgIHJldHVybiB0aGlzLmNhY2hlZENvcnB1cztcbiAgfVxuXG4gIC8vIFRoZSBub3RlcyB0aGUgYXV0aG9yaW5nIGNoZWNrcyBhcHBseSB0bzogZXZlcnkgbm90ZSBleGNlcHQgdGhlIG9uZXMgZGVjbGFyZWQgb3V0c2lkZSB0aGUgbGVhcm5pbmdcbiAgLy8gUGF0aCAodGhlIHZhdWx0J3Mgb3duIGBSRUFETUUubWRgIGJ5IGRlZmF1bHQpLlxuICBwcml2YXRlIGNvbGxlY3RDaGVja2FibGVOb3RlcygpOiBEZW1vVmF1bHROb3RlW10ge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3ROb3RlcygpLmZpbHRlcigobm90ZSkgPT4gIXRoaXMuZXhjbHVkZWROb3Rlcy5oYXMobm90ZS5yZWxhdGl2ZVBhdGgpKTtcbiAgfVxuXG4gIHByaXZhdGUgY29sbGVjdE1hcmtkb3duRmlsZXMoZm9sZGVyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgcmVhZGRpclN5bmMoZm9sZGVyLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSkpIHtcbiAgICAgIGlmIChlbnRyeS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIGlmIChlbnRyeS5uYW1lID09PSBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5Ob2RlTW9kdWxlcyBhcyBzdHJpbmcpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQucHVzaCguLi50aGlzLmNvbGxlY3RNYXJrZG93bkZpbGVzKGpvaW4oZm9sZGVyLCBlbnRyeS5uYW1lKSkpO1xuICAgICAgfSBlbHNlIGlmIChlbnRyeS5uYW1lLmVuZHNXaXRoKCcubWQnKSkge1xuICAgICAgICByZXN1bHQucHVzaChqb2luKGZvbGRlciwgZW50cnkubmFtZSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgYHZpdGVzdGAgc3VpdGUgdGhhdCBrZWVwcyBhIHBsdWdpbidzIGluLXJlcG8gYGRlbW8tdmF1bHQvYCBpbiBzeW5jIHdpdGggaXRzIHB1YmxpYyBzdXJmYWNlLlxuICpcbiAqIENhbGwgaXQgb25jZSBmcm9tIGEgcGx1Z2luJ3MgYGRlbW8tdmF1bHQubm8tYXBwLmludGVncmF0aW9uLnRlc3QudHNgOyBpdCByZWdpc3RlcnMgb25lIHRlc3QgcGVyIGNoZWNrLFxuICogZGVsZWdhdGluZyB0byB7QGxpbmsgRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyfS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGRlY2xhcmF0aXZlIGNvdmVyYWdlIHNwZWNpZmljYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckRlbW9WYXVsdENvdmVyYWdlU3VpdGUocGFyYW1zOiBSZWdpc3RlckRlbW9WYXVsdENvdmVyYWdlU3VpdGVQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgY2hlY2tlciA9IG5ldyBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXIobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlckNvbnN0cnVjdG9yUGFyYW1zPih7XG4gICAgZXhjbHVkZWROb3RlczogcGFyYW1zLmF1dGhvcmluZz8uZXhjbHVkZWROb3RlcyxcbiAgICByb290Rm9sZGVyOiBwYXJhbXMucm9vdEZvbGRlclxuICB9KSk7XG4gIGNvbnN0IHN0YXJ0Tm90ZSA9IHBhcmFtcy5hdXRob3Jpbmc/LnN0YXJ0Tm90ZSA/PyBERUZBVUxUX1NUQVJUX05PVEU7XG5cbiAgZGVzY3JpYmUoJ2RlbW8tdmF1bHQgY292ZXJhZ2UnLCAoKSA9PiB7XG4gICAgZm9yIChjb25zdCBzcGVjIG9mIHBhcmFtcy5pbnRlcmZhY2VzKSB7XG4gICAgICBpdChgZGVtb25zdHJhdGVzIGV2ZXJ5ICR7c3BlYy5pbnRlcmZhY2VOYW1lfSAke3NwZWMua2luZH1gLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lbWJlcnMgPSBjaGVja2VyLmdldEludGVyZmFjZU1lbWJlcnMoc3BlYyk7XG4gICAgICAgIGNvbnN0IGRlbW9uc3RyYXRlZCA9IG1lbWJlcnNbc3BlYy5raW5kXTtcbiAgICAgICAgZXhwZWN0KGRlbW9uc3RyYXRlZC5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigwKTtcbiAgICAgICAgZXhwZWN0KGNoZWNrZXIuZmluZFVuZGVtb25zdHJhdGVkTWVtYmVycyh7IG1lbWJlcnM6IGRlbW9uc3RyYXRlZCwgcmVjZWl2ZXI6IHNwZWMucmVjZWl2ZXIgfSkpLnRvRXF1YWwoW10pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KGByZWZlcmVuY2VzIG5vICR7c3BlYy5pbnRlcmZhY2VOYW1lfSBtZW1iZXIgdGhhdCBubyBsb25nZXIgZXhpc3RzYCwgKCkgPT4ge1xuICAgICAgICBjb25zdCBtZW1iZXJzID0gY2hlY2tlci5nZXRJbnRlcmZhY2VNZW1iZXJzKHNwZWMpO1xuICAgICAgICBleHBlY3QoY2hlY2tlci5maW5kU3RhbGVSZWZlcmVuY2VzKHsgcmVjZWl2ZXI6IHNwZWMucmVjZWl2ZXIsIHZhbGlkTWVtYmVyczogbWVtYmVycy5hbGwgfSkpLnRvRXF1YWwoW10pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzcGVjIG9mIHBhcmFtcy5jb25maWdJbnRlcmZhY2VzKSB7XG4gICAgICBpdChgZGVtb25zdHJhdGVzIGV2ZXJ5ICR7c3BlYy5pbnRlcmZhY2VOYW1lfSBvcHRpb25gLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lbWJlcnMgPSBjaGVja2VyLmdldEludGVyZmFjZU1lbWJlcnMoc3BlYyk7XG4gICAgICAgIGV4cGVjdChtZW1iZXJzLnByb3BlcnRpZXMubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oMCk7XG4gICAgICAgIGV4cGVjdChjaGVja2VyLmZpbmRVbmRlbW9uc3RyYXRlZE1lbWJlcnMoeyBtZW1iZXJzOiBtZW1iZXJzLnByb3BlcnRpZXMgfSkpLnRvRXF1YWwoW10pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzcGVjIG9mIHBhcmFtcy5mdW5jdGlvbk1vZHVsZXMgPz8gW10pIHtcbiAgICAgIGl0KGBkZW1vbnN0cmF0ZXMgZXZlcnkgZXhwb3J0ZWQgZnVuY3Rpb24gaW4gJHtzcGVjLnNvdXJjZVBhdGh9YCwgKCkgPT4ge1xuICAgICAgICBjb25zdCBmdW5jdGlvbk5hbWVzID0gY2hlY2tlci5nZXRFeHBvcnRlZEZ1bmN0aW9uTmFtZXMoc3BlYyk7XG4gICAgICAgIGV4cGVjdChmdW5jdGlvbk5hbWVzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApO1xuICAgICAgICBleHBlY3QoY2hlY2tlci5maW5kVW5kZW1vbnN0cmF0ZWRNZW1iZXJzKHsgbWVtYmVyczogZnVuY3Rpb25OYW1lcyB9KSkudG9FcXVhbChbXSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBkb2NzID0gcGFyYW1zLmRvY3M7XG4gICAgaWYgKGRvY3MpIHtcbiAgICAgIGl0KCdsaW5rcyBhIGRlbW8gbm90ZSBmb3IgZXZlcnkgZmVhdHVyZSBkb2MnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChjaGVja2VyLmZpbmRVbmxpbmtlZEZlYXR1cmVEb2NzKHsgZG9jc0ZvbGRlcjogZG9jcy5mb2xkZXIsIG5vbkZlYXR1cmVEb2NzOiBkb2NzLm5vbkZlYXR1cmVEb2NzIH0pKVxuICAgICAgICAgIC50b0VxdWFsKFtdKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGl0KCdvcGVucyBldmVyeSBub3RlIHdpdGggYW4gSDEnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoY2hlY2tlci5maW5kTm90ZXNXaXRob3V0SDEoKSkudG9FcXVhbChbXSk7XG4gICAgfSk7XG5cbiAgICBpdCgnb3BlbnMgZXZlcnkgbm90ZSB3aXRoIGEgcHJvc2UgcGFyYWdyYXBoIGJlZm9yZSBpdHMgZmlyc3QgY29kZSBibG9jaycsICgpID0+IHtcbiAgICAgIGV4cGVjdChjaGVja2VyLmZpbmROb3Rlc1dpdGhvdXRJbnRyb1Byb3NlKCkpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgaXQoYHJlYWNoZXMgZXZlcnkgbm90ZSBmcm9tICR7c3RhcnROb3RlfWAsICgpID0+IHtcbiAgICAgIGV4cGVjdChjaGVja2VyLmZpbmRVbnJlYWNoYWJsZU5vdGVzKHsgc3RhcnROb3RlIH0pKS50b0VxdWFsKFtdKTtcbiAgICB9KTtcblxuICAgIGl0KCd1c2VzIG5vIHdpa2lsaW5rcywgd2hpY2ggZG8gbm90IHJlbmRlciBvbiBHaXRIdWInLCAoKSA9PiB7XG4gICAgICBleHBlY3QoY2hlY2tlci5maW5kTm90ZXNXaXRoV2lraWxpbmtzKCkpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2p1c3RpZmllcyBldmVyeSB3aWtpbGluayBhbGxvd2FuY2UsIGFuZCBkZWNsYXJlcyBub25lIGl0IG5vIGxvbmdlciBuZWVkcycsICgpID0+IHtcbiAgICAgIGV4cGVjdChjaGVja2VyLmZpbmROb3Rlc1dpdGhVbmp1c3RpZmllZFdpa2lsaW5rQWxsb3dhbmNlKCkpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NhcnJpZXMgbm8gRG9jcyBsaW5rIGxpbmUsIGJlY2F1c2UgdGhlIG5vdGUgaXMgdGhlIGRvY3MnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoY2hlY2tlci5maW5kTm90ZXNXaXRoRG9jc0xpbmtzKCkpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NvbW1pdHMgbm9uZSBvZiB0aGUgYXBwLmpzb24gc2V0dGluZ3Mgb2JzaWRpYW4tZGV2LXV0aWxzIGluamVjdHMgYXQgcmVsZWFzZSB0aW1lJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGNoZWNrZXIuZmluZENvbW1pdHRlZEFwcEpzb25TZXR0aW5ncygpKS50b0VxdWFsKFtdKTtcbiAgICB9KTtcblxuICAgIGl0KCdrZWVwcyB0aGUgcmVmbGVjdGVkIHN1cmZhY2Ugbm9uLXRyaXZpYWwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBndWFyZCA9IHBhcmFtcy5ub25Ucml2aWFsR3VhcmQ7XG4gICAgICBjb25zdCBtZW1iZXJzID0gY2hlY2tlci5nZXRJbnRlcmZhY2VNZW1iZXJzKGd1YXJkKTtcbiAgICAgIGV4cGVjdChtZW1iZXJzLmFsbCkudG9Db250YWluKGd1YXJkLmV4cGVjdE1lbWJlcik7XG4gICAgICBleHBlY3QoY2hlY2tlci5jb2xsZWN0RGVtb05vdGVSZWxhdGl2ZVBhdGhzKCkpLnRvQ29udGFpbihndWFyZC5leHBlY3REZW1vTm90ZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5jb25zdCBDTEFTU19NRU1CRVJfTU9ESUZJRVJTID0gU3RyaW5nLnJhd2AoPzooPzpwdWJsaWN8cHJpdmF0ZXxwcm90ZWN0ZWR8cmVhZG9ubHl8c3RhdGljfGFic3RyYWN0fG92ZXJyaWRlKVxccyspKmA7XG5jb25zdCBBQlNPTFVURV9VUkxfUkVHX0VYUCA9IC9eW2Etel1bXFx3Ky4tXSo6L2k7XG5jb25zdCBBTkdMRV9CUkFDS0VUU19SRUdfRVhQID0gL148fD4kL2c7XG5jb25zdCBDT0RFX0ZFTkNFX1JFR19FWFAgPSAvXlxccyooPzpgYGB8fn5+KS87XG5jb25zdCBERUZBVUxUX0VYQ0xVREVEX05PVEVTID0gWydSRUFETUUubWQnXTtcbmNvbnN0IERFRkFVTFRfU1RBUlRfTk9URSA9ICcwMCBTdGFydC5tZCc7XG5jb25zdCBET0NTX0xJTktfUkVHX0VYUCA9IC9eXFxzKlxcW0RvY3NdXFwoLztcbmNvbnN0IEZST05UTUFUVEVSX1JFR19FWFAgPSAvXi0tLVxccj9cXG5bXFxzXFxTXSo/XFxyP1xcbi0tLVteXFxTXFxuXSpcXHI/XFxuPy87XG5jb25zdCBIMV9SRUdfRVhQID0gL14jIFxcUy87XG5jb25zdCBIRUFESU5HX1JFR19FWFAgPSAvXiN7MSw2fSAvO1xuY29uc3QgSU5MSU5FX0NPREVfUkVHX0VYUCA9IC9gW15gXFxuXSpgL2c7XG5jb25zdCBNQVJLRE9XTl9MSU5LX1JFR19FWFAgPSAvXFxbW15cXF1dKl1cXCgoPzx0YXJnZXQ+W14pXSspXFwpL2c7XG4vLyBBbiBpbmxpbmUgZGlyZWN0aXZlLCBzaGFwZWQgYWZ0ZXIgRVNMaW50J3MgYW5kIHdyaXR0ZW4gYXMgYW4gSFRNTCBjb21tZW50IHNvIGl0IGlzIGludmlzaWJsZSBCT1RIIGluXG4vLyBPYnNpZGlhbiBhbmQgb24gR2l0SHViIFx1MjAxNCB0aGUgc2FtZSBzcGVsbGluZyB0aGUgdmF1bHRzIGFscmVhZHkgdXNlIGZvciBgbWFya2Rvd25saW50LWRpc2FibGUtbmV4dC1saW5lYC5cbi8vIEFuIE9ic2lkaWFuIGAlJSBcdTIwMjYgJSVgIGNvbW1lbnQgd291bGQgc2hvdyB1cCBhcyBsaXRlcmFsIHRleHQgb24gR2l0SHViLCB3aGljaCBpcyBoYWxmIHRoZSByZWFkZXJzaGlwLlxuY29uc3QgRElSRUNUSVZFX1JFR19FWFAgPSAvXlxccyo8IS0tXFxzKm9ic2lkaWFuLWRldi11dGlscy0oPzxhY3Rpb24+ZGlzYWJsZS1uZXh0LWxpbmV8ZGlzYWJsZXxlbmFibGUpXFxzKyg/PHJ1bGU+W1xcdy1dK1xcL1tcXHctXSspKD86XFxzKy0tXFxzKyg/PHJlYXNvbj4uKj8pKT9cXHMqLS0+XFxzKiQvO1xuLy8gQ2F0Y2hlcyBhIGRpcmVjdGl2ZSB0aGF0IHdhcyBNRUFOVCB0byBiZSBvbmUgYnV0IGlzIG1pc3NwZWxsZWQ6IGl0IHdvdWxkIG90aGVyd2lzZSByZWFkIGFzIGFuIG9yZGluYXJ5XG4vLyBDb21tZW50IGFuZCBzaWxlbnRseSBkbyBub3RoaW5nLCB3aGljaCBpcyB0aGUgZmFpbHVyZSBtb2RlIGEgc3VwcHJlc3Npb24gc3ludGF4IG11c3QgbmV2ZXIgaGF2ZS5cbmNvbnN0IERJUkVDVElWRV9QUk9CRV9SRUdfRVhQID0gLzwhLS1cXHMqb2JzaWRpYW4tZGV2LXV0aWxzLS87XG5jb25zdCBXSUtJTElOS19SVUxFID0gJ2RlbW8tdmF1bHQtdmFsaWRhdGlvbi9uby13aWtpbGlua3MnO1xuLy8gVGhlIGBvYnNpZGlhbi1kZXYtdXRpbHMgPiBkZW1vLXZhdWx0LXZhbGlkYXRpb24gPiBhbGxvdy13aWtpbGlua3NgIGZyb250bWF0dGVyIHBhdGgsIGF0IGFueSBpbmRlbnRhdGlvbjpcbi8vIFRoZSBrZXlzIG11c3QgbmVzdCBpbiB0aGF0IG9yZGVyLCBhbmQgYW55IGxpbmUgYmV0d2VlbiB0aGVtIGhhcyB0byBzdGF5IGluZGVudGVkLCBzbyBhIGRlZGVudCB0byB0aGVcbi8vIERvY3VtZW50J3Mgb3duIHRvcCBsZXZlbCBlbmRzIHRoZSBtYXRjaCByYXRoZXIgdGhhbiByZWFjaGluZyBhIHNhbWUtbmFtZWQga2V5IHVuZGVyIGFub3RoZXIgcGFyZW50LlxuY29uc3QgV0lLSUxJTktfQUxMT1dBTkNFX1JFR19FWFAgPSAvXm9ic2lkaWFuLWRldi11dGlsczpbXlxcU1xcbl0qXFxuKD86W15cXFNcXG5dKy4qXFxuKSo/W15cXFNcXG5dK2RlbW8tdmF1bHQtdmFsaWRhdGlvbjpbXlxcU1xcbl0qXFxuKD86W15cXFNcXG5dKy4qXFxuKSo/W15cXFNcXG5dK2FsbG93LXdpa2lsaW5rczooPzxyZWFzb24+LiopJC9tO1xuY29uc3QgV0lLSUxJTktfUkVHX0VYUCA9IC9cXFtcXFtbXlxcXV0rXV0vO1xuXG4vLyBBcHBsaWVzIG9uZSBwYXJzZWQgZGlyZWN0aXZlIHRvIHRoZSBzY2FuLlxuZnVuY3Rpb24gYXBwbHlXaWtpbGlua0RpcmVjdGl2ZShzdGF0ZTogV2lraWxpbmtEaXJlY3RpdmVTY2FuU3RhdGUsIGxpbmVJbmRleDogbnVtYmVyLCBtYXRjaDogUmVnRXhwRXhlY0FycmF5KTogdm9pZCB7XG4gIGNvbnN0IGFjdGlvbiA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdhY3Rpb24nKTtcbiAgY29uc3QgcnVsZSA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdydWxlJyk7XG4gIGNvbnN0IHJlYXNvbiA9IG1hdGNoLmdyb3Vwcz8uWydyZWFzb24nXT8udHJpbSgpID8/ICcnO1xuICBpZiAocnVsZSAhPT0gV0lLSUxJTktfUlVMRSkge1xuICAgIHN0YXRlLnByb2JsZW1zLnB1c2goYGFuIHVua25vd24gcnVsZSBcIiR7cnVsZX1cIiBvbiAke2Zvcm1hdExpbmVOdW1iZXIobGluZUluZGV4KX1gKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGFjdGlvbiAhPT0gJ2VuYWJsZScgJiYgcmVhc29uID09PSAnJykge1xuICAgIHN0YXRlLnByb2JsZW1zLnB1c2goYGEgZGlyZWN0aXZlIHdpdGggbm8gcmVhc29uIG9uICR7Zm9ybWF0TGluZU51bWJlcihsaW5lSW5kZXgpfWApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChhY3Rpb24gPT09ICdkaXNhYmxlLW5leHQtbGluZScpIHtcbiAgICBzdGF0ZS5wZW5kaW5nTmV4dExpbmVJbmRleCA9IGxpbmVJbmRleDtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYWN0aW9uID09PSAnZGlzYWJsZScpIHtcbiAgICBpZiAoc3RhdGUub3BlblJlZ2lvbikge1xuICAgICAgc3RhdGUucHJvYmxlbXMucHVzaChgYSBkaXNhYmxlIG9uICR7Zm9ybWF0TGluZU51bWJlcihsaW5lSW5kZXgpfSBpbnNpZGUgdGhlIHJlZ2lvbiBvcGVuZWQgb24gJHtmb3JtYXRMaW5lTnVtYmVyKHN0YXRlLm9wZW5SZWdpb24ubGluZUluZGV4KX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3RhdGUub3BlblJlZ2lvbiA9IHsgaXNVc2VkOiBmYWxzZSwgbGluZUluZGV4IH07XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFzdGF0ZS5vcGVuUmVnaW9uKSB7XG4gICAgc3RhdGUucHJvYmxlbXMucHVzaChgYW4gZW5hYmxlIG9uICR7Zm9ybWF0TGluZU51bWJlcihsaW5lSW5kZXgpfSB3aXRoIG5vIHJlZ2lvbiBvcGVuYCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghc3RhdGUub3BlblJlZ2lvbi5pc1VzZWQpIHtcbiAgICBzdGF0ZS5wcm9ibGVtcy5wdXNoKGBhIHJlZ2lvbiBvcGVuZWQgb24gJHtmb3JtYXRMaW5lTnVtYmVyKHN0YXRlLm9wZW5SZWdpb24ubGluZUluZGV4KX0gY292ZXJpbmcgbm8gd2lraWxpbmtgKTtcbiAgfVxuICBzdGF0ZS5vcGVuUmVnaW9uID0gbnVsbDtcbn1cblxuLy8gQXBwbGllcyBvbmUgb3JkaW5hcnkgbGluZSB0byB0aGUgc2NhbjogYW4gb3BlbiByZWdpb24gY292ZXJzIGl0LCBhbmQgYSBwZW5kaW5nIGBkaXNhYmxlLW5leHQtbGluZWBcbi8vIENsYWltcyB0aGUgZmlyc3QgbGluZSB3aXRoIGNvbnRlbnQgb24gaXQgXHUyMDE0IHRoZSBkaXJlY3RpdmUgYW5kIGl0cyB0YXJnZXQgYXJlIHVzdWFsbHkgYSBibGFuayBsaW5lIGFwYXJ0LlxuZnVuY3Rpb24gYXBwbHlXaWtpbGlua1NjYW5MaW5lKHN0YXRlOiBXaWtpbGlua0RpcmVjdGl2ZVNjYW5TdGF0ZSwgbGluZUluZGV4OiBudW1iZXIsIGxpbmU6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoc3RhdGUub3BlblJlZ2lvbikge1xuICAgIHN0YXRlLmFsbG93ZWRMaW5lSW5kZXhlcy5hZGQobGluZUluZGV4KTtcbiAgICBzdGF0ZS5vcGVuUmVnaW9uLmlzVXNlZCB8fD0gc3RhdGUud2lraWxpbmtMaW5lSW5kZXhlcy5oYXMobGluZUluZGV4KTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHN0YXRlLnBlbmRpbmdOZXh0TGluZUluZGV4ID09PSBudWxsIHx8IGxpbmUudHJpbSgpID09PSAnJykge1xuICAgIHJldHVybjtcbiAgfVxuICBzdGF0ZS5hbGxvd2VkTGluZUluZGV4ZXMuYWRkKGxpbmVJbmRleCk7XG4gIGlmICghc3RhdGUud2lraWxpbmtMaW5lSW5kZXhlcy5oYXMobGluZUluZGV4KSkge1xuICAgIHN0YXRlLnByb2JsZW1zLnB1c2goYGEgZGlzYWJsZS1uZXh0LWxpbmUgb24gJHtmb3JtYXRMaW5lTnVtYmVyKHN0YXRlLnBlbmRpbmdOZXh0TGluZUluZGV4KX0gY292ZXJpbmcgbm8gd2lraWxpbmtgKTtcbiAgfVxuICBzdGF0ZS5wZW5kaW5nTmV4dExpbmVJbmRleCA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkTWVtYmVycyhtZXRob2RzOiBzdHJpbmdbXSwgcHJvcGVydGllczogc3RyaW5nW10pOiBJbnRlcmZhY2VNZW1iZXJzIHtcbiAgcmV0dXJuIHtcbiAgICBhbGw6IFsuLi5tZXRob2RzLCAuLi5wcm9wZXJ0aWVzXSxcbiAgICBtZXRob2RzLFxuICAgIHByb3BlcnRpZXNcbiAgfTtcbn1cblxuLy8gUmVzb2x2ZXMgdGhlIG5vdGVzIGEgbm90ZSBsaW5rcyB0bzogZXZlcnkgTWFya2Rvd24gbGluayBvdXRzaWRlIGEgY29kZSBmZW5jZSB3aG9zZSB0YXJnZXQgaXMgYSBgLm1kYFxuLy8gRmlsZSwgbWFkZSByZWxhdGl2ZSB0byB0aGUgZGVtbyB2YXVsdCBzbyBpdCBjYW4gYmUgbG9va2VkIHVwIGluIHRoZSBub3RlIG1hcC4gRXh0ZXJuYWwgVVJMcyBhbmRcbi8vIE5vbi1ub3RlIHRhcmdldHMgKGltYWdlcywgc2NyaXB0cykgYXJlIG5vdCBwYXJ0IG9mIHRoZSBsZWFybmluZyBwYXRoIGFuZCBhcmUgc2tpcHBlZDsgYSBgI2FuY2hvcmAgaXNcbi8vIERyb3BwZWQsIHNpbmNlIGl0IGFkZHJlc3NlcyBhIHBsYWNlIGluc2lkZSBhbiBhbHJlYWR5LXJlc29sdmVkIG5vdGUuXG4vLyBSZXR1cm5zIHRoZSBub3RlJ3MgbGluZXMgd2l0aCBmZW5jZWQgY29kZSBibG9ja3MgcmVtb3ZlZCAodGhlIGZlbmNlIGxpbmVzIGluY2x1ZGVkKSwgcGFpcmVkIHdpdGggdGhlXG4vLyBMaW5lIG51bWJlciBlYWNoIGNhbWUgZnJvbSwgc28gYSBjaGVjayBuZXZlciBtaXN0YWtlcyBzYW1wbGUgY29kZSBmb3IgcHJvc2UgXHUyMDE0IGEgYFtbd2lraWxpbmtdXWBcbi8vIERlbW9uc3RyYXRlZCBpbnNpZGUgYSBmZW5jZSBpcyB0ZXh0LCBub3QgbmF2aWdhdGlvbiBcdTIwMTQgYW5kIGFuIGlubGluZSBkaXJlY3RpdmUgY2FuIHN0aWxsIG5hbWUgYSBsaW5lLlxuZnVuY3Rpb24gY29sbGVjdExpbmVzT3V0c2lkZUZlbmNlcyhjb250ZW50OiBzdHJpbmcpOiBOb3RlTGluZVtdIHtcbiAgY29uc3Qgbm90ZUxpbmVzOiBOb3RlTGluZVtdID0gW107XG4gIGxldCBpc0luc2lkZUZlbmNlID0gZmFsc2U7XG4gIGZvciAoY29uc3QgW2luZGV4LCBsaW5lXSBvZiBjb250ZW50LnNwbGl0KCdcXG4nKS5lbnRyaWVzKCkpIHtcbiAgICBpZiAoQ09ERV9GRU5DRV9SRUdfRVhQLnRlc3QobGluZSkpIHtcbiAgICAgIGlzSW5zaWRlRmVuY2UgPSAhaXNJbnNpZGVGZW5jZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoIWlzSW5zaWRlRmVuY2UpIHtcbiAgICAgIG5vdGVMaW5lcy5wdXNoKHsgaW5kZXgsIGxpbmUgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBub3RlTGluZXM7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3ROb3RlTGlua1RhcmdldHMobm90ZTogRGVtb1ZhdWx0Tm90ZSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgdGFyZ2V0czogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBsaW5lIG9mIGdldExpbmVzT3V0c2lkZUZlbmNlcyhub3RlLmNvbnRlbnQpKSB7XG4gICAgZm9yIChjb25zdCBtYXRjaCBvZiBzdHJpcElubGluZUNvZGUobGluZSkubWF0Y2hBbGwoTUFSS0RPV05fTElOS19SRUdfRVhQKSkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3RhcmdldCcpLnJlcGxhY2VBbGwoQU5HTEVfQlJBQ0tFVFNfUkVHX0VYUCwgJycpO1xuICAgICAgY29uc3QgW25vdGVQYXRoID0gJyddID0gdGFyZ2V0LnNwbGl0KCcjJywgMSk7XG4gICAgICBpZiAoQUJTT0xVVEVfVVJMX1JFR19FWFAudGVzdChub3RlUGF0aCkgfHwgIW5vdGVQYXRoLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJy5tZCcpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdGFyZ2V0cy5wdXNoKGpvaW4oZGlybmFtZShub3RlLnJlbGF0aXZlUGF0aCksIHRyeURlY29kZVVyaUNvbXBvbmVudChub3RlUGF0aCkpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhcmdldHM7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RDbGFzc01ldGhvZE5hbWVzKGNsYXNzQm9keTogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gWy4uLmNsYXNzQm9keS5tYXRjaEFsbChuZXcgUmVnRXhwKFN0cmluZy5yYXdgXiB7Mn0oPzxtb2RpZmllcnM+JHtDTEFTU19NRU1CRVJfTU9ESUZJRVJTfSkoPzxuYW1lPlxcdyspKD86PFtePl0qPik/XFwoYCwgJ2dtJykpXVxuICAgIC5maWx0ZXIoKG1hdGNoKSA9PiAhaXNOb25QdWJsaWNNZW1iZXIoZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ21vZGlmaWVycycpKSlcbiAgICAubWFwKChtYXRjaCkgPT4gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ25hbWUnKSk7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RDbGFzc1Byb3BlcnR5TmFtZXMoY2xhc3NCb2R5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbLi4uY2xhc3NCb2R5Lm1hdGNoQWxsKG5ldyBSZWdFeHAoU3RyaW5nLnJhd2BeIHsyfSg/PG1vZGlmaWVycz4ke0NMQVNTX01FTUJFUl9NT0RJRklFUlN9KSg/PG5hbWU+XFx3KylcXHMqXFw/P1xccypbOj1dYCwgJ2dtJykpXVxuICAgIC5maWx0ZXIoKG1hdGNoKSA9PiAhaXNOb25QdWJsaWNNZW1iZXIoZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ21vZGlmaWVycycpKSlcbiAgICAubWFwKChtYXRjaCkgPT4gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ25hbWUnKSk7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RFbnVtTWVtYmVyTmFtZXMoZW51bUJvZHk6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFsuLi5lbnVtQm9keS5tYXRjaEFsbCgvXiB7Mn0oPzxuYW1lPlxcdyspL2dtKV0ubWFwKChtYXRjaCkgPT4gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ25hbWUnKSk7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RNZXRob2ROYW1lcyhpbnRlcmZhY2VCb2R5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbLi4uaW50ZXJmYWNlQm9keS5tYXRjaEFsbCgvXiB7Mn0oPzxuYW1lPlxcdyspKD86PFtePl0qPik/XFwoL2dtKV0ubWFwKChtYXRjaCkgPT4gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ25hbWUnKSk7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RQcm9wZXJ0eU5hbWVzKGludGVyZmFjZUJvZHk6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFsuLi5pbnRlcmZhY2VCb2R5Lm1hdGNoQWxsKC9eIHsyfSg/PG5hbWU+XFx3KylcXD8/Oi9nbSldLm1hcCgobWF0Y2gpID0+IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICduYW1lJykpO1xufVxuXG4vLyBUaGUgbGluZSBudW1iZXJzIGNhcnJ5aW5nIGEgd2lraWxpbmsgdGhhdCBpcyBuYXZpZ2F0aW9uIHJhdGhlciB0aGFuIHNhbXBsZSB0ZXh0LlxuZnVuY3Rpb24gZmluZFdpa2lsaW5rTGluZUluZGV4ZXMoY29udGVudDogc3RyaW5nKTogbnVtYmVyW10ge1xuICByZXR1cm4gY29sbGVjdExpbmVzT3V0c2lkZUZlbmNlcyhjb250ZW50KVxuICAgIC5maWx0ZXIoKG5vdGVMaW5lKSA9PiBXSUtJTElOS19SRUdfRVhQLnRlc3Qoc3RyaXBJbmxpbmVDb2RlKG5vdGVMaW5lLmxpbmUpKSlcbiAgICAubWFwKChub3RlTGluZSkgPT4gbm90ZUxpbmUuaW5kZXgpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRMaW5lTnVtYmVyKGxpbmVJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBsaW5lICR7U3RyaW5nKGxpbmVJbmRleCArIDEpfWA7XG59XG5cbmZ1bmN0aW9uIGdldExpbmVzT3V0c2lkZUZlbmNlcyhjb250ZW50OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBjb2xsZWN0TGluZXNPdXRzaWRlRmVuY2VzKGNvbnRlbnQpLm1hcCgobm90ZUxpbmUpID0+IG5vdGVMaW5lLmxpbmUpO1xufVxuXG4vLyBXaGV0aGVyIHRoZSBub3RlJ3MgZmlyc3QgY29udGVudCBsaW5lIChmcm9udG1hdHRlciBhbmQgYmxhbmsgbGluZXMgYXNpZGUpIGlzIGFuIGAjIEgxYC5cbmZ1bmN0aW9uIGhhc0gxKGNvbnRlbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBmb3IgKGNvbnN0IGxpbmUgb2Ygc3RyaXBGcm9udG1hdHRlcihjb250ZW50KS5zcGxpdCgnXFxuJykpIHtcbiAgICBjb25zdCB0cmltbWVkTGluZSA9IGxpbmUudHJpbSgpO1xuICAgIGlmICh0cmltbWVkTGluZSA9PT0gJycpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICByZXR1cm4gSDFfUkVHX0VYUC50ZXN0KHRyaW1tZWRMaW5lKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIFdoZXRoZXIgYSBwbGFpbiBwcm9zZSBsaW5lIGFwcGVhcnMgYmVmb3JlIHRoZSBub3RlJ3MgZmlyc3QgY29kZSBmZW5jZS4gSGVhZGluZ3MgYXJlIG5vdCBwcm9zZSBcdTIwMTQgYSBub3RlXG4vLyBUaGF0IGdvZXMgc3RyYWlnaHQgZnJvbSBpdHMgdGl0bGUgdG8gYSBidXR0b24gaXMgZXhhY3RseSB0aGUgc2hhcGUgdGhpcyBjaGVjayByZWplY3RzLlxuZnVuY3Rpb24gaGFzSW50cm9Qcm9zZShjb250ZW50OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgZm9yIChjb25zdCBsaW5lIG9mIHN0cmlwRnJvbnRtYXR0ZXIoY29udGVudCkuc3BsaXQoJ1xcbicpKSB7XG4gICAgaWYgKENPREVfRkVOQ0VfUkVHX0VYUC50ZXN0KGxpbmUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHRyaW1tZWRMaW5lID0gbGluZS50cmltKCk7XG4gICAgaWYgKHRyaW1tZWRMaW5lID09PSAnJyB8fCBIRUFESU5HX1JFR19FWFAudGVzdCh0cmltbWVkTGluZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIFdoZXRoZXIgdGhlIG5vdGUgbmF2aWdhdGVzIHdpdGggYW4gT2JzaWRpYW4gYFtbd2lraWxpbmtdXWAuIEZlbmNlZCBibG9ja3MgYW5kIGlubGluZSBjb2RlIGFyZSBzYW1wbGVcbi8vIFRleHQgcmF0aGVyIHRoYW4gbmF2aWdhdGlvbiwgc28gdGhleSBhcmUgcmVtb3ZlZCBiZWZvcmUgbG9va2luZy5cbmZ1bmN0aW9uIGhhc1dpa2lsaW5rKGNvbnRlbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZmluZFdpa2lsaW5rTGluZUluZGV4ZXMoY29udGVudCkubGVuZ3RoID4gMDtcbn1cblxuZnVuY3Rpb24gaXNOb25QdWJsaWNNZW1iZXIobW9kaWZpZXJzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIC9cXGIoPzpwcml2YXRlfHByb3RlY3RlZClcXGIvLnRlc3QobW9kaWZpZXJzKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNZW1iZXJzKGtleXdvcmQ6IHN0cmluZywgYm9keTogc3RyaW5nKTogSW50ZXJmYWNlTWVtYmVycyB7XG4gIHN3aXRjaCAoa2V5d29yZCkge1xuICAgIGNhc2UgJ2NsYXNzJzoge1xuICAgICAgcmV0dXJuIGJ1aWxkTWVtYmVycyhleHRyYWN0Q2xhc3NNZXRob2ROYW1lcyhib2R5KSwgZXh0cmFjdENsYXNzUHJvcGVydHlOYW1lcyhib2R5KSk7XG4gICAgfVxuICAgIGNhc2UgJ2VudW0nOiB7XG4gICAgICByZXR1cm4gYnVpbGRNZW1iZXJzKFtdLCBleHRyYWN0RW51bU1lbWJlck5hbWVzKGJvZHkpKTtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIGJ1aWxkTWVtYmVycyhleHRyYWN0TWV0aG9kTmFtZXMoYm9keSksIGV4dHJhY3RQcm9wZXJ0eU5hbWVzKGJvZHkpKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gUmVhZHMgdGhlIG5vdGUncyBgb2JzaWRpYW4tZGV2LXV0aWxzID4gZGVtby12YXVsdC12YWxpZGF0aW9uID4gYWxsb3ctd2lraWxpbmtzYCBkZWNsYXJhdGlvbjogdGhlIHN0YXRlZFxuLy8gUmVhc29uLCBgJydgIHdoZW4gdGhlIGtleSBpcyBwcmVzZW50IHdpdGggbm90aGluZyBhZnRlciBpdCwgb3IgYG51bGxgIHdoZW4gdGhlIG5vdGUgZGVjbGFyZXMgbm90aGluZy5cbi8vIFJlYWQgd2l0aCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiByYXRoZXIgdGhhbiBhIFlBTUwgcGFyc2VyOiBpdCBpcyBvbmUga25vd24ga2V5IHBhdGgsIGFuZCBldmVyeSBwbHVnaW4gdGhhdFxuLy8gSW5zdGFsbHMgdGhpcyBwYWNrYWdlIHdvdWxkIG90aGVyd2lzZSBjYXJyeSBhIFlBTUwgZGVwZW5kZW5jeSBmb3IgaXQuXG5mdW5jdGlvbiByZWFkV2lraWxpbmtBbGxvd2FuY2VSZWFzb24oY29udGVudDogc3RyaW5nKTogbnVsbCB8IHN0cmluZyB7XG4gIGNvbnN0IGZyb250bWF0dGVyID0gRlJPTlRNQVRURVJfUkVHX0VYUC5leGVjKGNvbnRlbnQpPy5bMF07XG4gIGlmIChmcm9udG1hdHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgcmVhc29uID0gV0lLSUxJTktfQUxMT1dBTkNFX1JFR19FWFAuZXhlYyhmcm9udG1hdHRlcik/Lmdyb3Vwcz8uWydyZWFzb24nXTtcbiAgaWYgKHJlYXNvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIHJlYXNvbi50cmltKCkucmVwbGFjZSgvXig/PHF1b3RlPltcIiddKSg/PHZhbHVlPltcXHNcXFNdKilcXGs8cXVvdGU+JC8sICckPHZhbHVlPicpO1xufVxuXG4vLyBSZWFkcyB0aGUgbm90ZSdzIGlubGluZSBgb2JzaWRpYW4tZGV2LXV0aWxzLWRpc2FibGVcdTIwMjZgIGRpcmVjdGl2ZXMsIHJldHVybmluZyB3aGljaCBsaW5lcyB0aGV5IGFsbG93IGFcbi8vIFdpa2lsaW5rIG9uIGFuZCBldmVyeXRoaW5nIHdyb25nIHdpdGggdGhlbS4gQSBzdXBwcmVzc2lvbiB0aGF0IHF1aWV0bHkgZG9lcyBub3RoaW5nIGlzIHdvcnNlIHRoYW4gbm9uZSxcbi8vIFNvIGEgbWlzc3BlbGxlZCBkaXJlY3RpdmUsIG9uZSB3aXRoIG5vIHJlYXNvbiwgYW4gdW5jbG9zZWQgcmVnaW9uIGFuZCBvbmUgY292ZXJpbmcgbm8gd2lraWxpbmsgYXQgYWxsXG4vLyBBcmUgZWFjaCByZXBvcnRlZCByYXRoZXIgdGhhbiBpZ25vcmVkLlxuZnVuY3Rpb24gc2Nhbldpa2lsaW5rRGlyZWN0aXZlcyhjb250ZW50OiBzdHJpbmcpOiBXaWtpbGlua0RpcmVjdGl2ZVNjYW4ge1xuICBjb25zdCBzdGF0ZTogV2lraWxpbmtEaXJlY3RpdmVTY2FuU3RhdGUgPSB7XG4gICAgYWxsb3dlZExpbmVJbmRleGVzOiBuZXcgU2V0PG51bWJlcj4oKSxcbiAgICBvcGVuUmVnaW9uOiBudWxsLFxuICAgIHBlbmRpbmdOZXh0TGluZUluZGV4OiBudWxsLFxuICAgIHByb2JsZW1zOiBbXSxcbiAgICB3aWtpbGlua0xpbmVJbmRleGVzOiBuZXcgU2V0KGZpbmRXaWtpbGlua0xpbmVJbmRleGVzKGNvbnRlbnQpKVxuICB9O1xuXG4gIGZvciAoY29uc3QgeyBpbmRleCwgbGluZSB9IG9mIGNvbGxlY3RMaW5lc091dHNpZGVGZW5jZXMoY29udGVudCkpIHtcbiAgICBjb25zdCBtYXRjaCA9IERJUkVDVElWRV9SRUdfRVhQLmV4ZWMobGluZSk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICBhcHBseVdpa2lsaW5rRGlyZWN0aXZlKHN0YXRlLCBpbmRleCwgbWF0Y2gpO1xuICAgIH0gZWxzZSBpZiAoRElSRUNUSVZFX1BST0JFX1JFR19FWFAudGVzdChsaW5lKSkge1xuICAgICAgc3RhdGUucHJvYmxlbXMucHVzaChgYSBtYWxmb3JtZWQgZGlyZWN0aXZlIG9uICR7Zm9ybWF0TGluZU51bWJlcihpbmRleCl9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcGx5V2lraWxpbmtTY2FuTGluZShzdGF0ZSwgaW5kZXgsIGxpbmUpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdGF0ZS5vcGVuUmVnaW9uKSB7XG4gICAgc3RhdGUucHJvYmxlbXMucHVzaChgYSByZWdpb24gb3BlbmVkIG9uICR7Zm9ybWF0TGluZU51bWJlcihzdGF0ZS5vcGVuUmVnaW9uLmxpbmVJbmRleCl9IHRoYXQgaXMgbmV2ZXIgZW5hYmxlZCBhZ2FpbmApO1xuICB9XG4gIGlmIChzdGF0ZS5wZW5kaW5nTmV4dExpbmVJbmRleCAhPT0gbnVsbCkge1xuICAgIHN0YXRlLnByb2JsZW1zLnB1c2goYGEgZGlzYWJsZS1uZXh0LWxpbmUgb24gJHtmb3JtYXRMaW5lTnVtYmVyKHN0YXRlLnBlbmRpbmdOZXh0TGluZUluZGV4KX0gY292ZXJpbmcgbm8gd2lraWxpbmtgKTtcbiAgfVxuICByZXR1cm4geyBhbGxvd2VkTGluZUluZGV4ZXM6IHN0YXRlLmFsbG93ZWRMaW5lSW5kZXhlcywgcHJvYmxlbXM6IHN0YXRlLnByb2JsZW1zIH07XG59XG5cbmZ1bmN0aW9uIHN0cmlwRnJvbnRtYXR0ZXIoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNvbnRlbnQucmVwbGFjZShGUk9OVE1BVFRFUl9SRUdfRVhQLCAnJyk7XG59XG5cbmZ1bmN0aW9uIHN0cmlwSW5saW5lQ29kZShsaW5lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbGluZS5yZXBsYWNlQWxsKElOTElORV9DT0RFX1JFR19FWFAsICcnKTtcbn1cblxuLy8gQSBoYW5kLXdyaXR0ZW4gbGluayBtYXkgY29udGFpbiBhIGJhcmUgYCVgIChvciBhbnkgb3RoZXIgaW52YWxpZCBwZXJjZW50LWVzY2FwZSksIHdoaWNoIG1ha2VzXG4vLyBgZGVjb2RlVVJJQ29tcG9uZW50YCB0aHJvdy4gU3VjaCBhIHRhcmdldCBpcyBtZWFudCBsaXRlcmFsbHksIHNvIGl0IGlzIHVzZWQgYXMgd3JpdHRlbi5cbmZ1bmN0aW9uIHRyeURlY29kZVVyaUNvbXBvbmVudCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWdFQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFTLG1DQUFtQztBQUM1QyxTQUFTLCtCQUErQjtBQUN4QztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLDhCQUE4QjtBQUN2QyxTQUFTLHlCQUF5QjtBQUNsQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQXVYQSxNQUFNLHlCQUF5QjtBQUFBLEVBQzVCLGVBQThCO0FBQUEsRUFDOUIsY0FBc0M7QUFBQSxFQUM3QjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUE7QUFB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
|
|
576
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9kZW1vLXZhdWx0LWNvdmVyYWdlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogU3RhdGljIGNvdmVyYWdlL2ZyZXNobmVzcyBjaGVja3MgdGhhdCBrZWVwIGEgcGx1Z2luJ3MgaW4tcmVwbyBgZGVtby12YXVsdC9gIGluIHN5bmMgd2l0aCBpdHMgcHVibGljIHN1cmZhY2UuXG4gKlxuICogQSBwbHVnaW4gY2FuIHNoaXAgYSBjdXJhdGVkIGRlbW8gdmF1bHQgYXQgYGRlbW8tdmF1bHQvYCBpbiBpdHMgcmVwbyByb290LiBUaGVzZSBoZWxwZXJzIHJlZmxlY3QgdGhlIHJlYWxcbiAqIHB1YmxpYyBBUEkvY29uZmlnL2RvY3Mgc3RyYWlnaHQgZnJvbSBzb3VyY2UgYW5kIGFzc2VydCBcdTIwMTQgV0lUSE9VVCBsYXVuY2hpbmcgT2JzaWRpYW4gXHUyMDE0IHRoYXQgZXZlcnkgZmVhdHVyZSBpc1xuICogZGVtb25zdHJhdGVkIGluIHRoZSBub3RlcyBhbmQgdGhhdCB0aGUgbm90ZXMgcmVmZXJlbmNlIG5vIEFQSSBtZW1iZXIgdGhhdCBubyBsb25nZXIgZXhpc3RzIChyZW5hbWUgZHJpZnQpLlxuICogVGhlIHJ1bnRpbWUgYmVoYXZpb3Igb2YgdGhlIHBsdWdpbiBpcyBjb3ZlcmVkIGJ5IGl0cyBvdGhlciBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IGJ5IHRoZSBkZW1vIHZhdWx0OyB0aGVcbiAqIHZhdWx0IGlzIGEgbGVhcm5pbmcgcmVzb3VyY2UsIGFuZCB0aGVzZSBjaGVja3Mgb25seSBndWFyZCB0aGF0IGl0IHN0YXlzIHRydXRoZnVsLlxuICpcbiAqIFRoZXkgYWxzbyBndWFyZCB0aGUgdmF1bHQncyBvd24gYC5vYnNpZGlhbi9hcHAuanNvbmA6IHRoZSBzZXR0aW5ncyBsaXN0ZWQgaW5cbiAqIHtAbGluayBERU1PX1ZBVUxUX0FQUF9KU09OX1NFVFRJTkdTfSBiZWxvbmcgdG8gYG9ic2lkaWFuLWRldi11dGlsc2AsIHdoaWNoIHdyaXRlcyB0aGVtIGludG8gdGhlIGFyY2hpdmVkXG4gKiB2YXVsdCBhdCByZWxlYXNlIHRpbWUsIHNvIGEgdmF1bHQgdGhhdCBjb21taXRzIGFueSBvZiB0aGVtIGlzIGtlZXBpbmcgYSBzZWNvbmQgY29weSBub3RoaW5nIHJlY29uY2lsZXMuXG4gKlxuICogVGhleSBhbHNvIGVuZm9yY2UgdGhlIGRlbW8tdmF1bHQgQVVUSE9SSU5HIGNvbnZlbnRpb24gXHUyMDE0IGV2ZXJ5IG5vdGUgb3BlbnMgd2l0aCBhbiBgIyBIMWAgYW5kIGEgcGxhaW5cbiAqIHByb3NlIHBhcmFncmFwaCwgZXZlcnkgbm90ZSBpcyByZWFjaGFibGUgZnJvbSB0aGUgc3RhcnQgbm90ZSwgYW5kIG5vIG5vdGUgdXNlcyBhIGBbW3dpa2lsaW5rXV1gIG9yIGFcbiAqIGBbRG9jc10oXHUyMDI2KWAgbGluZS4gVGhlc2UgY2hlY2tzIGFyZSB1bmNvbmRpdGlvbmFsOiB0aGUgZGVtbyB2YXVsdCBpcyB0aGUgcHVibGlzaGVkIGRvY3VtZW50YXRpb24sIHJlYWRcbiAqIGluIE9ic2lkaWFuIEFORCBvbiBHaXRIdWIgKHdoZXJlIGEgd2lraWxpbmsgZG9lcyBub3QgcmVuZGVyKSwgc28gYSBub3RlIHRoYXQgYnJlYWtzIHRoZSBjb252ZW50aW9uIGlzXG4gKiBicm9rZW4gZm9yIHJlYWwgcmVhZGVycy4gYGF1dGhvcmluZ2Agb25seSB0dW5lcyB0aGVtICh3aGljaCBub3RlIGlzIHRoZSBzdGFydCwgd2hpY2ggbm90ZXMgc2l0IG91dHNpZGVcbiAqIHRoZSBsZWFybmluZyBwYXRoKTsgaXQgY2Fubm90IHN3aXRjaCB0aGVtIG9mZi5cbiAqXG4gKiBPbmx5IGByb290Rm9sZGVyYCBpcyByZXF1aXJlZCwgc28gYSBwbHVnaW4gd2l0aCBubyBzZXR0aW5ncyBhbmQgbm8gcHVibGljIEFQSSB0byByZWZsZWN0IHJlZ2lzdGVycyB0aGVcbiAqIHN1aXRlIHdpdGggdGhhdCBhbG9uZSBhbmQgc3RpbGwgZ2V0cyBldmVyeSBhdXRob3JpbmcgY2hlY2sgXHUyMDE0IHRoZSBjaGVja3MgaGF2ZSBub3RoaW5nIHRvIGRvIHdpdGggd2hhdCB0aGVcbiAqIHBsdWdpbiBleHBvc2VzLiBFYWNoIHJlZmxlY3Rpb24gc3BlYyAoYGNvbmZpZ0ludGVyZmFjZXNgLCBgaW50ZXJmYWNlc2AsIGBub25Ucml2aWFsR3VhcmRgKSBhZGRzIHRoZSBjaGVja3NcbiAqIGl0IGRlc2NyaWJlcyB3aGVuIHN1cHBsaWVkLiBUaGUgdmF1bHQgaXMgZ3VhcmRlZCBhZ2FpbnN0IGJlaW5nIGVtcHR5IGVpdGhlciB3YXk6IHdpdGggbm8gbm90ZXMgdG8gcmVhZCxcbiAqIGV2ZXJ5IGF1dGhvcmluZyBjaGVjayB3b3VsZCBwYXNzIGJ5IGhhdmluZyBub3RoaW5nIHRvIGxvb2sgYXQuXG4gKlxuICogVGhlIG9uZSBleGNlcHRpb24gaXMgYSBub3RlIHdob3NlIFNVQkpFQ1QgaXMgdGhlIHdpa2lsaW5rIFx1MjAxNCBhbiBlbWJlZCBzcGVsbGluZyB0aGUgcmVhZGVyIGlzIGJlaW5nIHRhdWdodFxuICogdG8gdHlwZSwgYSBmcm9udG1hdHRlciBwcm9wZXJ0eSB2YWx1ZSB0aGF0IGV4aXN0cyB0byBjb250cmFzdCB3aXRoIGEgTWFya2Rvd24gbGluaywgYSBmaXh0dXJlIHRoYXQgbXVzdFxuICoga2VlcCB0aGUgd2lraWxpbmsgYSBjb21tYW5kIGlzIHN1cHBvc2VkIHRvIGxlYXZlIGFsb25lLCBhIGxpbmsgdGhlIHJlYWRlciBjbGlja3Mgd2hpbGUgaXQgc3RpbGwgcmVzb2x2ZXNcbiAqIHRvIG5vdGhpbmcuIFN1Y2ggYSBub3RlIHNheXMgc28gaXRzZWxmLCBzdGF0aW5nIHdoeSwgaW4gb25lIG9mIHR3byBmb3JtcyBtb2RlbGxlZCBvbiBFU0xpbnQncy5cbiAqXG4gKiBQZXIgbGluZSBvciBwZXIgcmVnaW9uLCB3cml0dGVuIGFzIGFuIEhUTUwgY29tbWVudCBzbyBpdCBpcyBpbnZpc2libGUgaW4gT2JzaWRpYW4gQU5EIG9uIEdpdEh1YiBcdTIwMTQgdGhlXG4gKiBzcGVsbGluZyB0aGVzZSB2YXVsdHMgYWxyZWFkeSB1c2UgZm9yIGBtYXJrZG93bmxpbnQtZGlzYWJsZS1uZXh0LWxpbmVgOlxuICpcbiAqIGBgYG1hcmtkb3duXG4gKiA8IS0tIG9ic2lkaWFuLWRldi11dGlscy1kaXNhYmxlLW5leHQtbGluZSBkZW1vLXZhdWx0LXZhbGlkYXRpb24vbm8td2lraWxpbmtzIC0tIENsaWNraW5nIGEgbGluayB0byBhIG5vdGUgdGhhdCBkb2VzIG5vdCBleGlzdCB5ZXQgSVMgdGhlIGZlYXR1cmUuIC0tPlxuICogMi4gQ2xpY2sgdGhpcyBsaW5rOiBbW1Byb2plY3RzL0ZyZXNoIGlkZWFdXS5cbiAqXG4gKiA8IS0tIG9ic2lkaWFuLWRldi11dGlscy1kaXNhYmxlIGRlbW8tdmF1bHQtdmFsaWRhdGlvbi9uby13aWtpbGlua3MgLS0gVGhlIHdpa2lsaW5rIGVtYmVkIGlzIHRoZSBzeW50YXggdGhpcyBub3RlIHRlYWNoZXMuIC0tPlxuICogIVtbYmFzaWMuaHRtbHw0MDBdXVxuICogPCEtLSBvYnNpZGlhbi1kZXYtdXRpbHMtZW5hYmxlIGRlbW8tdmF1bHQtdmFsaWRhdGlvbi9uby13aWtpbGlua3MgLS0+XG4gKiBgYGBcbiAqXG4gKiBQZXIgbm90ZSwgaW4gdGhlIG5vdGUncyBvd24gZnJvbnRtYXR0ZXIgXHUyMDE0IHRoZSBvbmx5IGZvcm0gdGhhdCBjYW4gcmVhY2ggYSB3aWtpbGluayBJTlNJREUgZnJvbnRtYXR0ZXIsXG4gKiB3aGVyZSBhIGNvbW1lbnQgY2Fubm90IGdvOlxuICpcbiAqIGBgYHlhbWxcbiAqIC0tLVxuICogb2JzaWRpYW4tZGV2LXV0aWxzOlxuICogICBkZW1vLXZhdWx0LXZhbGlkYXRpb246XG4gKiAgICAgYWxsb3ctd2lraWxpbmtzOiBUaGUgYHdpa2lsaW5rYCBwcm9wZXJ0eSB2YWx1ZSBpcyB0aGUgY29udHJhc3QgdGhpcyBub3RlIGlzIGJ1aWx0IGFyb3VuZC5cbiAqIC0tLVxuICogYGBgXG4gKlxuICogRWl0aGVyIHdheSB0aGUgZGVjbGFyYXRpb24gdHJhdmVscyB3aXRoIHRoZSBub3RlIHJhdGhlciB0aGFuIHNpdHRpbmcgaW4gYSBsaXN0IHNvbWV3aGVyZSBlbHNlLCBpdCBjYXJyaWVzXG4gKiBpdHMganVzdGlmaWNhdGlvbiwgYW5kIGl0IGV4ZW1wdHMgb25seSB0aGUgV0lLSUxJTksgY2hlY2sgXHUyMDE0IHRoZSBIMSwgcHJvc2UsIHJlYWNoYWJpbGl0eSBhbmQgYFtEb2NzXWBcbiAqIGNoZWNrcyBzdGlsbCBhcHBseS4gQSBkZWNsYXJhdGlvbiB3aXRoIG5vIHJlYXNvbiwgb25lIGNvdmVyaW5nIG5vIHdpa2lsaW5rLCBhIHJlZ2lvbiBuZXZlciBlbmFibGVkIGFnYWluLFxuICogb3IgYSBtaXNzcGVsbGVkIGRpcmVjdGl2ZSBhbGwgZmFpbDogYW4gZXhlbXB0aW9uIG5vYm9keSBjYW4ganVzdGlmeSwgdGhhdCBub3RoaW5nIG5lZWRzIGFueSBtb3JlLCBvciB0aGF0XG4gKiBzaWxlbnRseSBkb2VzIG5vdGhpbmcgaXMgd29yc2UgdGhhbiBubyBleGVtcHRpb24gYXQgYWxsLlxuICpcbiAqIFR3byBsYXllcnMgYXJlIGV4cG9zZWQ6XG4gKiAtIHtAbGluayBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJ9IFx1MjAxNCBhIGZyYW1ld29yay1hZ25vc3RpYyBjb3JlIHRoYXQgcmVhZHMgdGhlIGNvcnB1cywgcGFyc2VzIGludGVyZmFjZSAvXG4gKiAgIGNsYXNzIC8gZW51bSBtZW1iZXJzIGFuZCBleHBvcnRlZCBmdW5jdGlvbnMsIGFuZCByZXR1cm5zIGRpYWdub3N0aWMgYXJyYXlzICh3aGF0IGlzIHVuZGVtb25zdHJhdGVkIC8gc3RhbGVcbiAqICAgLyB1bmxpbmtlZCAvIG9mZi1jb252ZW50aW9uKS5cbiAqIC0ge0BsaW5rIHJlZ2lzdGVyRGVtb1ZhdWx0Q292ZXJhZ2VTdWl0ZX0gXHUyMDE0IGEgdGhpbiB3cmFwcGVyIHRoYXQgcmVnaXN0ZXJzIGEgYHZpdGVzdGAgc3VpdGUgb3ZlciB0aGUgY29yZSwgc29cbiAqICAgYSBwbHVnaW4ncyBgZGVtby12YXVsdC5uby1hcHAuaW50ZWdyYXRpb24udGVzdC50c2AgaXMgYSBzaW5nbGUgZGVjbGFyYXRpdmUgY2FsbC5cbiAqL1xuXG5pbXBvcnQge1xuICBleGlzdHNTeW5jLFxuICByZWFkZGlyU3luYyxcbiAgcmVhZEZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgZGVzY3JpYmUsXG4gIGV4cGVjdCxcbiAgaXRcbn0gZnJvbSAndml0ZXN0JztcblxuaW1wb3J0IHsgbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzIH0gZnJvbSAnLi4vb2JqZWN0LXV0aWxzLnRzJztcbmltcG9ydCB7IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzIH0gZnJvbSAnLi4vb2JzaWRpYW4vcGx1Z2luL29ic2lkaWFuLXBsdWdpbi1yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7XG4gIGRpcm5hbWUsXG4gIGpvaW4sXG4gIHJlbGF0aXZlXG59IGZyb20gJy4uL3BhdGgudHMnO1xuaW1wb3J0IHsgZ2V0TWFuZGF0b3J5TmFtZWRHcm91cCB9IGZyb20gJy4uL3JlZy1leHAudHMnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICcuLi90eXBlLWd1YXJkcy50cyc7XG5pbXBvcnQge1xuICBmaW5kT3duZWREZW1vVmF1bHRBcHBKc29uU2V0dGluZ3MsXG4gIHBhcnNlRGVtb1ZhdWx0QXBwSnNvblxufSBmcm9tICcuL2RlbW8tdmF1bHQtYXBwLWpzb24udHMnO1xuXG4vKipcbiAqIFR1bmVzIHRoZSBhbHdheXMtb24gYXV0aG9yaW5nIGNoZWNrcy4gSXQgY2Fubm90IGRpc2FibGUgdGhlbSBcdTIwMTQgc2VlIHRoZSBmaWxlIG92ZXJ2aWV3LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlbW9WYXVsdEF1dGhvcmluZ1NwZWMge1xuICAvKipcbiAgICogVGhlIG5vdGVzIChwYXRocyByZWxhdGl2ZSB0byB0aGUgZGVtbyB2YXVsdCkgdGhhdCBzaXQgb3V0c2lkZSB0aGUgbGVhcm5pbmcgcGF0aCBhbmQgYXJlIHRoZXJlZm9yZVxuICAgKiBleGVtcHQgZnJvbSBldmVyeSBhdXRob3JpbmcgY2hlY2suIERlZmF1bHRzIHRvIHRoZSB2YXVsdCdzIG93biBgUkVBRE1FLm1kYCwgd2hpY2ggYWRkcmVzc2VzIHNvbWVvbmVcbiAgICogYnJvd3NpbmcgdGhlIHJlcG8gb24gR2l0SHViIHJhdGhlciB0aGFuIGEgcmVhZGVyIHdvcmtpbmcgdGhyb3VnaCB0aGUgdmF1bHQuXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlZE5vdGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBub3RlIChwYXRoIHJlbGF0aXZlIHRvIHRoZSBkZW1vIHZhdWx0KSBldmVyeSBvdGhlciBub3RlIG11c3QgYmUgcmVhY2hhYmxlIGZyb20uIERlZmF1bHRzIHRvXG4gICAqIGAwMCBTdGFydC5tZGAuXG4gICAqL1xuICByZWFkb25seSBzdGFydE5vdGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVmbGVjdHMgYSBjb25maWcgaW50ZXJmYWNlIHdob3NlIG9wdGlvbnMgYXJlIGRlbW9uc3RyYXRlZCBieSB0aGVpciBiYXJlIG5hbWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVtb1ZhdWx0Q29uZmlnSW50ZXJmYWNlQ292ZXJhZ2VTcGVjIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBgZXhwb3J0IGludGVyZmFjZWAsIGBleHBvcnQgY2xhc3NgLCBvciBgZXhwb3J0IGVudW1gIHdob3NlIHByb3BlcnRpZXMgYXJlIHRoZSBjb25maWdcbiAgICogb3B0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IGludGVyZmFjZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNvdXJjZSBmaWxlIHBhdGggKHJlbGF0aXZlIHRvIHRoZSByZXBvIHJvb3QpIHRoYXQgZGVjbGFyZXMgdGhlIGludGVyZmFjZSwgY2xhc3MsIG9yIGVudW0uXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSB7QGxpbmsgRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyfSBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgbm90ZXMgKHBhdGhzIHJlbGF0aXZlIHRvIHRoZSBkZW1vIHZhdWx0KSBleGVtcHQgZnJvbSB0aGUgYXV0aG9yaW5nIGNoZWNrcy4gRGVmYXVsdHMgdG8gdGhlXG4gICAqIHZhdWx0J3Mgb3duIGBSRUFETUUubWRgLlxuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVkZWROb3Rlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgcGx1Z2luIHJlcG8gcm9vdCBcdTIwMTQgdGhlIGZvbGRlciBjb250YWluaW5nIGBkZW1vLXZhdWx0L2AgYW5kIHRoZSBzb3VyY2UgYmVpbmdcbiAgICogcmVmbGVjdGVkLiBDYWxsZXJzIHR5cGljYWxseSBwYXNzIGBnZXRSb290Rm9sZGVyKCkgPz8gcHJvY2Vzcy5jd2QoKWAuXG4gICAqL1xuICByZWFkb25seSByb290Rm9sZGVyOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIHtAbGluayBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXIuZmluZFN0YWxlUmVmZXJlbmNlc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyRmluZFN0YWxlUmVmZXJlbmNlc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgcmVjZWl2ZXIgd2hvc2UgYGAgYCR7cmVjZWl2ZXJ9LjxtZW1iZXI+YCBgYCByZWZlcmVuY2VzIGFyZSBzY2FubmVkIGZvciBpbiB0aGUgZGVtbyBjb3JwdXMuXG4gICAqL1xuICByZWFkb25seSByZWNlaXZlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbWVtYmVycyB0aGF0IGN1cnJlbnRseSBleGlzdCBvbiB0aGUgcmVjZWl2ZXI7IGFueSByZWZlcmVuY2VkIG1lbWJlciBub3QgaW4gdGhpcyBzZXQgaXMgc3RhbGUuXG4gICAqL1xuICByZWFkb25seSB2YWxpZE1lbWJlcnM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBwYXJhbWV0ZXJzIGZvciB7QGxpbmsgRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyLmZpbmRVbmRlbW9uc3RyYXRlZE1lbWJlcnN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlckZpbmRVbmRlbW9uc3RyYXRlZE1lbWJlcnNQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG1lbWJlciBuYW1lcyB0aGF0IG11c3QgZWFjaCBhcHBlYXIgaW4gdGhlIGRlbW8gY29ycHVzLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVtYmVyczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZW4gc2V0LCBhIG1lbWJlciBpcyBkZW1vbnN0cmF0ZWQgb25seSBpZiBgYCBgJHtyZWNlaXZlcn0uJHttZW1iZXJ9YCBgYCBhcHBlYXJzIChlLmcuIGEgY29udGV4dCBvYmplY3Qnc1xuICAgKiBtZXRob2RzKTsgd2hlbiBhYnNlbnQsIHRoZSBiYXJlIG1lbWJlciBuYW1lIGlzIGxvb2tlZCB1cCAoZS5nLiBhIGNvbmZpZyBvcHRpb24pLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVjZWl2ZXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIHtAbGluayBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXIuZmluZFVubGlua2VkRmVhdHVyZURvY3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlckZpbmRVbmxpbmtlZEZlYXR1cmVEb2NzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBkb2NzIGZvbGRlciAocmVsYXRpdmUgdG8gdGhlIHJlcG8gcm9vdCkgd2hvc2UgdG9wLWxldmVsIGAqLm1kYCBmaWxlcyBhcmUgdGhlIGZlYXR1cmUgZG9jcy5cbiAgICovXG4gIHJlYWRvbmx5IGRvY3NGb2xkZXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRvYyBiYXNlbmFtZXMgKHdpdGhvdXQgYC5tZGApIHRoYXQgYXJlIE5PVCBwZXItZmVhdHVyZSBwYWdlcyBhbmQgc28gbmVlZCBubyBsaW5raW5nIGRlbW8gbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IG5vbkZlYXR1cmVEb2NzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3Ige0BsaW5rIERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlci5maW5kVW5yZWFjaGFibGVOb3Rlc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyRmluZFVucmVhY2hhYmxlTm90ZXNQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG5vdGUgKHBhdGggcmVsYXRpdmUgdG8gdGhlIGRlbW8gdmF1bHQpIHRoZSB3YWxrIHN0YXJ0cyBmcm9tLCBlLmcuIGAwMCBTdGFydC5tZGAuXG4gICAqL1xuICByZWFkb25seSBzdGFydE5vdGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3Ige0BsaW5rIERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlci5nZXRFeHBvcnRlZEZ1bmN0aW9uTmFtZXN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlckdldEV4cG9ydGVkRnVuY3Rpb25OYW1lc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgc291cmNlIGZpbGUgcGF0aCAocmVsYXRpdmUgdG8gdGhlIHJlcG8gcm9vdCkgd2hvc2UgYGV4cG9ydCBmdW5jdGlvbmBzIGFyZSBwYXJzZWQuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIHtAbGluayBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXIuZ2V0SW50ZXJmYWNlTWVtYmVyc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyR2V0SW50ZXJmYWNlTWVtYmVyc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYGV4cG9ydCBpbnRlcmZhY2VgLCBgZXhwb3J0IGNsYXNzYCwgb3IgYGV4cG9ydCBlbnVtYCB0byBwYXJzZS5cbiAgICovXG4gIHJlYWRvbmx5IGludGVyZmFjZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNvdXJjZSBmaWxlIHBhdGggKHJlbGF0aXZlIHRvIHRoZSByZXBvIHJvb3QpIHRoYXQgZGVjbGFyZXMgdGhlIGludGVyZmFjZSwgY2xhc3MsIG9yIGVudW0uXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJlcyB0aGUgZmVhdHVyZS1kb2MgbGlua2luZyBjaGVjay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZW1vVmF1bHREb2NzQ292ZXJhZ2VTcGVjIHtcbiAgLyoqXG4gICAqIFRoZSBkb2NzIGZvbGRlciAocmVsYXRpdmUgdG8gdGhlIHJlcG8gcm9vdCkgd2hvc2UgdG9wLWxldmVsIGAqLm1kYCBmaWxlcyBhcmUgdGhlIGZlYXR1cmUgZG9jcy5cbiAgICovXG4gIHJlYWRvbmx5IGZvbGRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZG9jIGJhc2VuYW1lcyAod2l0aG91dCBgLm1kYCkgdGhhdCBhcmUgTk9UIHBlci1mZWF0dXJlIHBhZ2VzIGFuZCBzbyBuZWVkIG5vIGxpbmtpbmcgZGVtbyBub3RlLlxuICAgKi9cbiAgcmVhZG9ubHkgbm9uRmVhdHVyZURvY3M6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFJlZmxlY3RzIGEgbW9kdWxlJ3MgZXhwb3J0ZWQgZnVuY3Rpb25zLCBlYWNoIGRlbW9uc3RyYXRlZCBieSBpdHMgYmFyZSBuYW1lIGluIHRoZSBkZW1vIGNvcnB1cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZW1vVmF1bHRGdW5jdGlvbnNDb3ZlcmFnZVNwZWMge1xuICAvKipcbiAgICogVGhlIHNvdXJjZSBmaWxlIHBhdGggKHJlbGF0aXZlIHRvIHRoZSByZXBvIHJvb3QpIHdob3NlIGBleHBvcnQgZnVuY3Rpb25gcyBtdXN0IGVhY2ggYmUgZGVtb25zdHJhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlUGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlZmxlY3RzIGEgc2luZ2xlIGludGVyZmFjZSdzIG1lbWJlcnMgYW5kIGRlbW9uc3RyYXRlcyB0aGVtIHZpYSBgYCBgJHtyZWNlaXZlcn0uPG1lbWJlcj5gIGBgIHJlZmVyZW5jZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVtb1ZhdWx0SW50ZXJmYWNlQ292ZXJhZ2VTcGVjIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBgZXhwb3J0IGludGVyZmFjZWAsIGBleHBvcnQgY2xhc3NgLCBvciBgZXhwb3J0IGVudW1gIHRvIHJlZmxlY3QuXG4gICAqL1xuICByZWFkb25seSBpbnRlcmZhY2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGRlbW9uc3RyYXRlZCBtZW1iZXJzIGFyZSB0aGUgcmVmbGVjdGVkIHR5cGUncyBtZXRob2RzIG9yIGl0cyBwcm9wZXJ0aWVzIChlbnVtIG1lbWJlcnMgY291bnQgYXNcbiAgICogcHJvcGVydGllcykuXG4gICAqL1xuICByZWFkb25seSBraW5kOiBEZW1vVmF1bHRJbnRlcmZhY2VNZW1iZXJLaW5kO1xuXG4gIC8qKlxuICAgKiBUaGUgaWRlbnRpZmllciB0aGUgbm90ZXMgY2FsbCB0aGUgbWVtYmVycyBvbiAoZS5nLiBgY29kZUJ1dHRvbkNvbnRleHRgKS5cbiAgICovXG4gIHJlYWRvbmx5IHJlY2VpdmVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgZmlsZSBwYXRoIChyZWxhdGl2ZSB0byB0aGUgcmVwbyByb290KSB0aGF0IGRlY2xhcmVzIHRoZSBpbnRlcmZhY2UsIGNsYXNzLCBvciBlbnVtLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlUGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgYW4gaW50ZXJmYWNlJ3MgZGVtb25zdHJhdGVkIG1lbWJlcnMgYXJlIGl0cyBtZXRob2RzIG9yIGl0cyBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgdHlwZSBEZW1vVmF1bHRJbnRlcmZhY2VNZW1iZXJLaW5kID0gJ21ldGhvZHMnIHwgJ3Byb3BlcnRpZXMnO1xuXG4vKipcbiAqIENvbmZpZ3VyZXMgdGhlIGd1YXJkIHRoYXQgdGhlIHJlZmxlY3RlZCBzdXJmYWNlIGlzIG5vbi10cml2aWFsIChwcm90ZWN0cyBhZ2FpbnN0IGEgcGFyc2luZyByZWdyZXNzaW9uXG4gKiBzaWxlbnRseSBlbXB0eWluZyBldmVyeSBvdGhlciBjaGVjaykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVtb1ZhdWx0Tm9uVHJpdmlhbEd1YXJkU3BlYyB7XG4gIC8qKlxuICAgKiBBIGRlbW8gbm90ZSAocGF0aCByZWxhdGl2ZSB0byB0aGUgZGVtbyB2YXVsdCkgdGhhdCBtdXN0IGJlIHByZXNlbnQuXG4gICAqL1xuICByZWFkb25seSBleHBlY3REZW1vTm90ZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIG1lbWJlciB0aGF0IG11c3QgYmUgcmVmbGVjdGVkIGZyb20ge0BsaW5rIERlbW9WYXVsdE5vblRyaXZpYWxHdWFyZFNwZWMuaW50ZXJmYWNlTmFtZX0uXG4gICAqL1xuICByZWFkb25seSBleHBlY3RNZW1iZXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGBleHBvcnQgaW50ZXJmYWNlYCwgYGV4cG9ydCBjbGFzc2AsIG9yIGBleHBvcnQgZW51bWAgd2hvc2UgbWVtYmVycyBhcmUgcmUtcGFyc2VkIGZvciB0aGVcbiAgICogZ3VhcmQuXG4gICAqL1xuICByZWFkb25seSBpbnRlcmZhY2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgZmlsZSBwYXRoIChyZWxhdGl2ZSB0byB0aGUgcmVwbyByb290KSB0aGF0IGRlY2xhcmVzIHRoZSBpbnRlcmZhY2UsIGNsYXNzLCBvciBlbnVtLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlUGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc2luZ2xlIGRlbW8gbm90ZSwgYXMgcmVhZCBmcm9tIHRoZSBkZW1vIHZhdWx0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlbW9WYXVsdE5vdGUge1xuICAvKipcbiAgICogVGhlIG5vdGUncyByYXcgTWFya2Rvd24gY29udGVudC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5vdGUncyBwYXRoIHJlbGF0aXZlIHRvIHRoZSBkZW1vIHZhdWx0IGZvbGRlciwgZS5nLiBgMDAgU3RhcnQubWRgLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVsYXRpdmVQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHBhcnNlZCBtZW1iZXJzIG9mIGEgc291cmNlIGludGVyZmFjZSwgY2xhc3MsIG9yIGVudW0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJmYWNlTWVtYmVycyB7XG4gIC8qKlxuICAgKiBFdmVyeSBtZW1iZXIgXHUyMDE0IHtAbGluayBJbnRlcmZhY2VNZW1iZXJzLm1ldGhvZHN9IGZvbGxvd2VkIGJ5IHtAbGluayBJbnRlcmZhY2VNZW1iZXJzLnByb3BlcnRpZXN9LlxuICAgKi9cbiAgcmVhZG9ubHkgYWxsOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIG1ldGhvZCBtZW1iZXJzIChkZWNsYXJlZCBhcyBgbmFtZSguLi4pYCkuXG4gICAqL1xuICByZWFkb25seSBtZXRob2RzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHByb3BlcnR5IG1lbWJlcnMgKGRlY2xhcmVkIGFzIGBuYW1lPzogLi4uYCkuXG4gICAqL1xuICByZWFkb25seSBwcm9wZXJ0aWVzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBBIG5vdGUgbGluZSBwYWlyZWQgd2l0aCB0aGUgbGluZSBudW1iZXIgaXQgY2FtZSBmcm9tLCBzbyBhIGNoZWNrIHRoYXQgc2tpcHMgZmVuY2VkIGJsb2NrcyBjYW4gc3RpbGxcbiAqIHJlcG9ydCBcdTIwMTQgYW5kIGFuIGlubGluZSBkaXJlY3RpdmUgY2FuIHN0aWxsIG5hbWUgXHUyMDE0IHRoZSBsaW5lIGFzIHRoZSByZWFkZXIgc2VlcyBpdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb3RlTGluZSB7XG4gIC8qKlxuICAgKiBUaGUgemVyby1iYXNlZCBsaW5lIG51bWJlciB3aXRoaW4gdGhlIG5vdGUuXG4gICAqL1xuICByZWFkb25seSBpbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbGluZSdzIHJhdyB0ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgbGluZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgYGRpc2FibGVgIHJlZ2lvbiB0aGF0IGhhcyBiZWVuIG9wZW5lZCBhbmQgbm90IHlldCBlbmFibGVkIGFnYWluLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5XaWtpbGlua0RpcmVjdGl2ZVJlZ2lvbiB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSByZWdpb24gaGFzIGNvdmVyZWQgYSB3aWtpbGluaywgd2hpY2ggaXMgd2hhdCBzdG9wcyBpdCBiZWluZyByZXBvcnRlZCBhcyBwb2ludGxlc3MuXG4gICAqL1xuICBpc1VzZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBsaW5lIHRoZSByZWdpb24gd2FzIG9wZW5lZCBvbi5cbiAgICovXG4gIHJlYWRvbmx5IGxpbmVJbmRleDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSBwYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVnaXN0ZXJEZW1vVmF1bHRDb3ZlcmFnZVN1aXRlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlckRlbW9WYXVsdENvdmVyYWdlU3VpdGVQYXJhbXMge1xuICAvKipcbiAgICogVHVuZXMgdGhlIGFsd2F5cy1vbiBhdXRob3JpbmcgY2hlY2tzLCBvciBgdW5kZWZpbmVkYCB0byB0YWtlIHRoZWlyIGRlZmF1bHRzLiBJdCBjYW5ub3QgZGlzYWJsZSB0aGVtLlxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yaW5nPzogRGVtb1ZhdWx0QXV0aG9yaW5nU3BlYztcblxuICAvKipcbiAgICogVGhlIGNvbmZpZyBpbnRlcmZhY2VzIHdob3NlIG9wdGlvbnMgbXVzdCBlYWNoIGJlIGRlbW9uc3RyYXRlZCBieSB0aGVpciBiYXJlIG5hbWUsIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhlXG4gICAqIHBsdWdpbiBoYXMgbm8gc2V0dGluZ3MuXG4gICAqL1xuICByZWFkb25seSBjb25maWdJbnRlcmZhY2VzPzogRGVtb1ZhdWx0Q29uZmlnSW50ZXJmYWNlQ292ZXJhZ2VTcGVjW107XG5cbiAgLyoqXG4gICAqIFRoZSBmZWF0dXJlLWRvYyBsaW5raW5nIGNoZWNrLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZSBwbHVnaW4gc2hpcHMgbm8gYGRvY3MvYCBmb2xkZXIuXG4gICAqL1xuICByZWFkb25seSBkb2NzPzogRGVtb1ZhdWx0RG9jc0NvdmVyYWdlU3BlYztcblxuICAvKipcbiAgICogVGhlIG1vZHVsZXMgd2hvc2UgYGV4cG9ydCBmdW5jdGlvbmBzIG11c3QgZWFjaCBiZSBkZW1vbnN0cmF0ZWQgYnkgdGhlaXIgYmFyZSBuYW1lLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZVxuICAgKiBwbHVnaW4gZXhwb3NlcyBubyBzdWNoIG1vZHVsZSB0byBjaGVjay5cbiAgICovXG4gIHJlYWRvbmx5IGZ1bmN0aW9uTW9kdWxlcz86IERlbW9WYXVsdEZ1bmN0aW9uc0NvdmVyYWdlU3BlY1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgaW50ZXJmYWNlcyB3aG9zZSBtZW1iZXJzIG11c3QgZWFjaCBiZSBkZW1vbnN0cmF0ZWQgKGFuZCByZWZlcmVuY2VkIHdpdGhvdXQgZHJpZnQpLCBvciBgdW5kZWZpbmVkYCB3aGVuXG4gICAqIHRoZSBwbHVnaW4gZXhwb3NlcyBubyBwdWJsaWMgQVBJIHN1cmZhY2UgdG8gcmVmbGVjdC5cbiAgICovXG4gIHJlYWRvbmx5IGludGVyZmFjZXM/OiBEZW1vVmF1bHRJbnRlcmZhY2VDb3ZlcmFnZVNwZWNbXTtcblxuICAvKipcbiAgICogVGhlIGd1YXJkIHRoYXQga2VlcHMgdGhlIHJlZmxlY3RlZCBzdXJmYWNlIG5vbi10cml2aWFsLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZXJlIGlzIG5vIHJlZmxlY3RlZCBzdXJmYWNlXG4gICAqIHRvIGd1YXJkLiBUaGUgdmF1bHQgaXMgY2hlY2tlZCBmb3IgYmVpbmcgbm9uLWVtcHR5IGVpdGhlciB3YXkuXG4gICAqL1xuICByZWFkb25seSBub25Ucml2aWFsR3VhcmQ/OiBEZW1vVmF1bHROb25Ucml2aWFsR3VhcmRTcGVjO1xuXG4gIC8qKlxuICAgKiBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgcGx1Z2luIHJlcG8gcm9vdC4gQ2FsbGVycyB0eXBpY2FsbHkgcGFzcyBgZ2V0Um9vdEZvbGRlcigpID8/IHByb2Nlc3MuY3dkKClgLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9vdEZvbGRlcjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdoYXQgYSBub3RlJ3MgaW5saW5lIGBvYnNpZGlhbi1kZXYtdXRpbHMtZGlzYWJsZVx1MjAyNmAgZGlyZWN0aXZlcyBhbGxvdywgYW5kIHdoYXQgaXMgd3Jvbmcgd2l0aCB0aGVtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdpa2lsaW5rRGlyZWN0aXZlU2NhbiB7XG4gIC8qKlxuICAgKiBUaGUgemVyby1iYXNlZCBsaW5lIG51bWJlcnMgYSBkaXJlY3RpdmUgYWxsb3dzIGEgd2lraWxpbmsgb24uXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkTGluZUluZGV4ZXM6IFJlYWRvbmx5U2V0PG51bWJlcj47XG5cbiAgLyoqXG4gICAqIFRoZSBkaXJlY3RpdmUgbWlzdGFrZXMgZm91bmQsIGVhY2ggcGhyYXNlZCBmb3IgYSBmYWlsaW5nIGFzc2VydGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHByb2JsZW1zOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBUaGUgcnVubmluZyBzdGF0ZSBvZiBhIGRpcmVjdGl2ZSBzY2FuLCB0aHJlYWRlZCB0aHJvdWdoIHRoZSBwZXItbGluZSBoZWxwZXJzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdpa2lsaW5rRGlyZWN0aXZlU2NhblN0YXRlIHtcbiAgLyoqXG4gICAqIFRoZSBsaW5lcyBhIGRpcmVjdGl2ZSBoYXMgYWxsb3dlZCBhIHdpa2lsaW5rIG9uIHNvIGZhci5cbiAgICovXG4gIHJlYWRvbmx5IGFsbG93ZWRMaW5lSW5kZXhlczogU2V0PG51bWJlcj47XG5cbiAgLyoqXG4gICAqIFRoZSByZWdpb24gY3VycmVudGx5IG9wZW4sIGFuZCB3aGV0aGVyIGl0IGhhcyBjb3ZlcmVkIGEgd2lraWxpbmsgeWV0LlxuICAgKi9cbiAgb3BlblJlZ2lvbjogbnVsbCB8IE9wZW5XaWtpbGlua0RpcmVjdGl2ZVJlZ2lvbjtcblxuICAvKipcbiAgICogVGhlIGxpbmUgYSBgZGlzYWJsZS1uZXh0LWxpbmVgIHdhcyByZWFkIG9uLCB3aGlsZSBpdCBzdGlsbCB3YWl0cyBmb3IgdGhlIGxpbmUgaXQgY292ZXJzLlxuICAgKi9cbiAgcGVuZGluZ05leHRMaW5lSW5kZXg6IG51bGwgfCBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBkaXJlY3RpdmUgbWlzdGFrZXMgZm91bmQgc28gZmFyLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvYmxlbXM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgbGluZXMgb2YgdGhlIG5vdGUgdGhhdCBjYXJyeSBhIHdpa2lsaW5rLlxuICAgKi9cbiAgcmVhZG9ubHkgd2lraWxpbmtMaW5lSW5kZXhlczogUmVhZG9ubHlTZXQ8bnVtYmVyPjtcbn1cblxuLyoqXG4gKiBSZWZsZWN0cyBhIHBsdWdpbidzIHB1YmxpYyBzdXJmYWNlIGZyb20gc291cmNlIGFuZCBjaGVja3MgaXRzIGluLXJlcG8gYGRlbW8tdmF1bHQvYCBzdGF5cyBpbiBzeW5jIHdpdGggaXQuXG4gKlxuICogRXZlcnkgbWV0aG9kIGlzIGEgcHVyZSBxdWVyeSBvdmVyIGZpbGVzIHVuZGVyIHRoZSByZXBvIHJvb3QgKHRoZSBkZW1vIGNvcnB1cyBpcyByZWFkIG9uY2UgYW5kIGNhY2hlZCksIHNvXG4gKiB0aGUgY2hlY2tlciBpcyB0cml2aWFsbHkgdW5pdC10ZXN0YWJsZSBhZ2FpbnN0IGEgZml4dHVyZSByZXBvIGFuZCBjYXJyaWVzIG5vIHRlc3QtZnJhbWV3b3JrIGRlcGVuZGVuY3kuXG4gKi9cbmV4cG9ydCBjbGFzcyBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXIge1xuICBwcml2YXRlIGNhY2hlZENvcnB1czogbnVsbCB8IHN0cmluZyA9IG51bGw7XG4gIHByaXZhdGUgY2FjaGVkTm90ZXM6IERlbW9WYXVsdE5vdGVbXSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlbW9WYXVsdEZvbGRlcjogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGV4Y2x1ZGVkTm90ZXM6IFNldDxzdHJpbmc+O1xuICBwcml2YXRlIHJlYWRvbmx5IHJvb3RGb2xkZXI6IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNoZWNrZXIgcm9vdGVkIGF0IGEgcGx1Z2luIHJlcG8uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNvbnN0cnVjdG9yLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICB0aGlzLnJvb3RGb2xkZXIgPSBwYXJhbXMucm9vdEZvbGRlcjtcbiAgICB0aGlzLmRlbW9WYXVsdEZvbGRlciA9IGpvaW4odGhpcy5yb290Rm9sZGVyLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5EZW1vVmF1bHQpO1xuICAgIHRoaXMuZXhjbHVkZWROb3RlcyA9IG5ldyBTZXQocGFyYW1zLmV4Y2x1ZGVkTm90ZXMgPz8gREVGQVVMVF9FWENMVURFRF9OT1RFUyk7XG4gIH1cblxuICAvKipcbiAgICogQ29sbGVjdHMgdGhlIGRlbW8gbm90ZXMgYXMgcGF0aHMgcmVsYXRpdmUgdG8gdGhlIGRlbW8gdmF1bHQgZm9sZGVyIChmb3IgYSBub24tdHJpdmlhbC1zdXJmYWNlIGd1YXJkKS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHJlbGF0aXZlIHBhdGhzIG9mIGV2ZXJ5IGAqLm1kYCBub3RlIGluIHRoZSBkZW1vIHZhdWx0LlxuICAgKi9cbiAgcHVibGljIGNvbGxlY3REZW1vTm90ZVJlbGF0aXZlUGF0aHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3ROb3RlcygpLm1hcCgobm90ZSkgPT4gbm90ZS5yZWxhdGl2ZVBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIGFuZCBjYWNoZXMgZXZlcnkgZGVtbyBub3RlIGluZGl2aWR1YWxseSBcdTIwMTQgdGhlIHBlci1ub3RlIHZpZXcgdGhlIGF1dGhvcmluZyBjaGVja3Mgd29yayBvbiwgYXNcbiAgICogb3Bwb3NlZCB0byB0aGUgY29uY2F0ZW5hdGVkIHtAbGluayBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXIucmVhZENvcnB1c30uXG4gICAqXG4gICAqIEByZXR1cm5zIEV2ZXJ5IGAqLm1kYCBub3RlIGluIHRoZSBkZW1vIHZhdWx0LCBleGNsdWRlZCBvbmVzIGluY2x1ZGVkLlxuICAgKi9cbiAgcHVibGljIGNvbGxlY3ROb3RlcygpOiBEZW1vVmF1bHROb3RlW10ge1xuICAgIHRoaXMuY2FjaGVkTm90ZXMgPz89IHRoaXMuY29sbGVjdE1hcmtkb3duRmlsZXModGhpcy5kZW1vVmF1bHRGb2xkZXIpLm1hcCgoZmlsZSkgPT4gKHtcbiAgICAgIGNvbnRlbnQ6IHJlYWRGaWxlU3luYyhmaWxlLCAndXRmLTgnKSxcbiAgICAgIHJlbGF0aXZlUGF0aDogcmVsYXRpdmUodGhpcy5kZW1vVmF1bHRGb2xkZXIsIGZpbGUpXG4gICAgfSkpO1xuICAgIHJldHVybiB0aGlzLmNhY2hlZE5vdGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBgLm9ic2lkaWFuL2FwcC5qc29uYCBzZXR0aW5ncyB0aGUgdmF1bHQgY29tbWl0cyB0aGF0IGBvYnNpZGlhbi1kZXYtdXRpbHNgIG93bnMgYW5kIHdyaXRlc1xuICAgKiBpbnRvIHRoZSBhcmNoaXZlZCB2YXVsdCBpdHNlbGYuIEEgY29tbWl0dGVkIG9uZSBpcyBhIHNlY29uZCBjb3B5IG9mIGEgc2V0dGluZyBub3RoaW5nIHJlY29uY2lsZXMsIGFuZFxuICAgKiBpdCBpcyB0aGUgY29weSB0aGF0IGdvZXMgc3RhbGUgXHUyMDE0IHNvIHRoZSBjb252ZW50aW9uIGlzIHRoYXQgdGhlIHZhdWx0IGNvbW1pdHMgbm9uZSBvZiB0aGVtLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgbmFtZXMgb2YgdGhlIG93bmVkIHNldHRpbmdzIHRoZSBjb21taXR0ZWQgYGFwcC5qc29uYCBzZXRzLiBBIHZhdWx0IHRoYXQgY29tbWl0cyBub1xuICAgKiBgYXBwLmpzb25gIGF0IGFsbCBpcyBmaW5lLCBhbmQgeWllbGRzIG5vbmUuXG4gICAqL1xuICBwdWJsaWMgZmluZENvbW1pdHRlZEFwcEpzb25TZXR0aW5ncygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgYXBwSnNvblBhdGggPSBqb2luKHRoaXMuZGVtb1ZhdWx0Rm9sZGVyLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5Eb3RPYnNpZGlhbiwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQXBwSnNvbik7XG4gICAgY29uc3QgY29udGVudCA9IGV4aXN0c1N5bmMoYXBwSnNvblBhdGgpID8gcmVhZEZpbGVTeW5jKGFwcEpzb25QYXRoLCAndXRmLTgnKSA6IG51bGw7XG4gICAgcmV0dXJuIGZpbmRPd25lZERlbW9WYXVsdEFwcEpzb25TZXR0aW5ncyh7IGFwcEpzb246IHBhcnNlRGVtb1ZhdWx0QXBwSnNvbih7IGNvbnRlbnQsIHBhdGg6IGFwcEpzb25QYXRoIH0pIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIG5vdGVzIGNhcnJ5aW5nIGEgYFtEb2NzXShcdTIwMjYpYCBsaW5rIGxpbmUuIFRoZSBub3RlIElTIHRoZSBkb2N1bWVudGF0aW9uLCBzbyBhIGxpbmUgcG9pbnRpbmdcbiAgICogZWxzZXdoZXJlIGZvciB0aGUgcmVhbCBleHBsYW5hdGlvbiBpcyB0aGUgc2hhcGUgdGhpcyBjb252ZW50aW9uIGV4aXN0cyB0byByZW1vdmUuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSByZWxhdGl2ZSBwYXRocyBvZiB0aGUgb2ZmZW5kaW5nIG5vdGVzLlxuICAgKi9cbiAgcHVibGljIGZpbmROb3Rlc1dpdGhEb2NzTGlua3MoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3RDaGVja2FibGVOb3RlcygpXG4gICAgICAuZmlsdGVyKChub3RlKSA9PiBnZXRMaW5lc091dHNpZGVGZW5jZXMobm90ZS5jb250ZW50KS5zb21lKChsaW5lKSA9PiBET0NTX0xJTktfUkVHX0VYUC50ZXN0KGxpbmUpKSlcbiAgICAgIC5tYXAoKG5vdGUpID0+IG5vdGUucmVsYXRpdmVQYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBub3RlcyB0aGF0IGRvIG5vdCBvcGVuIHdpdGggYW4gYCMgSDFgIChmcm9udG1hdHRlciBhc2lkZSkuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSByZWxhdGl2ZSBwYXRocyBvZiB0aGUgb2ZmZW5kaW5nIG5vdGVzLlxuICAgKi9cbiAgcHVibGljIGZpbmROb3Rlc1dpdGhvdXRIMSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdENoZWNrYWJsZU5vdGVzKClcbiAgICAgIC5maWx0ZXIoKG5vdGUpID0+ICFoYXNIMShub3RlLmNvbnRlbnQpKVxuICAgICAgLm1hcCgobm90ZSkgPT4gbm90ZS5yZWxhdGl2ZVBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIG5vdGVzIHdpdGggbm8gcHJvc2UgcGFyYWdyYXBoIGJlZm9yZSB0aGVpciBmaXJzdCBjb2RlIGZlbmNlIFx1MjAxNCB0aGUgMS0zIHNlbnRlbmNlcyBzYXlpbmcgd2hhdCB0aGVcbiAgICogZmVhdHVyZSBkb2VzIGFuZCB3aHkgYSByZWFkZXIgd291bGQgd2FudCBpdCwgd2l0aG91dCB3aGljaCB0aGUgbm90ZSBpcyBhIGJ1dHRvbiB3aXRoIG5vIGxlc3Nvbi5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHJlbGF0aXZlIHBhdGhzIG9mIHRoZSBvZmZlbmRpbmcgbm90ZXMuXG4gICAqL1xuICBwdWJsaWMgZmluZE5vdGVzV2l0aG91dEludHJvUHJvc2UoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3RDaGVja2FibGVOb3RlcygpXG4gICAgICAuZmlsdGVyKChub3RlKSA9PiAhaGFzSW50cm9Qcm9zZShub3RlLmNvbnRlbnQpKVxuICAgICAgLm1hcCgobm90ZSkgPT4gbm90ZS5yZWxhdGl2ZVBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIG5vdGVzIHdob3NlIHdpa2lsaW5rIGFsbG93YW5jZSBpcyBub3QgZG9pbmcgYW55IHdvcmsgXHUyMDE0IGRlY2xhcmVkIHdpdGhvdXQgYSByZWFzb24sIG9yIG9uIGEgbm90ZVxuICAgKiB0aGF0IGNhcnJpZXMgbm8gd2lraWxpbmsgYXQgYWxsLiBCb3RoIGFyZSBkcmlmdDogYW4gZXhlbXB0aW9uIG5vYm9keSBjYW4ganVzdGlmeSwgYW5kIG9uZSBub3RoaW5nIG5lZWRzXG4gICAqIGFueSBtb3JlLCB3aGljaCB3b3VsZCBnbyBvbiBoaWRpbmcgdGhlIG5leHQgd2lraWxpbmsgc29tZWJvZHkgYWRkcyBieSBhY2NpZGVudC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHJlbGF0aXZlIHBhdGhzIG9mIHRoZSBvZmZlbmRpbmcgbm90ZXMuXG4gICAqL1xuICBwdWJsaWMgZmluZE5vdGVzV2l0aFVuanVzdGlmaWVkV2lraWxpbmtBbGxvd2FuY2UoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3RDaGVja2FibGVOb3RlcygpLmZsYXRNYXAoKG5vdGUpID0+IHtcbiAgICAgIGNvbnN0IHNjYW4gPSBzY2FuV2lraWxpbmtEaXJlY3RpdmVzKG5vdGUuY29udGVudCk7XG4gICAgICBjb25zdCBwcm9ibGVtcyA9IFsuLi5zY2FuLnByb2JsZW1zXTtcbiAgICAgIGNvbnN0IHJlYXNvbiA9IHJlYWRXaWtpbGlua0FsbG93YW5jZVJlYXNvbihub3RlLmNvbnRlbnQpO1xuICAgICAgaWYgKHJlYXNvbiAhPT0gbnVsbCkge1xuICAgICAgICBpZiAocmVhc29uLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgICAgICBwcm9ibGVtcy5wdXNoKCdhIG5vdGUtbGV2ZWwgYWxsb3dhbmNlIHdpdGggbm8gcmVhc29uJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWhhc1dpa2lsaW5rKG5vdGUuY29udGVudCkpIHtcbiAgICAgICAgICBwcm9ibGVtcy5wdXNoKCdhIG5vdGUtbGV2ZWwgYWxsb3dhbmNlIGNvdmVyaW5nIG5vIHdpa2lsaW5rJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nhbi5hbGxvd2VkTGluZUluZGV4ZXMuc2l6ZSA+IDApIHtcbiAgICAgICAgICBwcm9ibGVtcy5wdXNoKCdpbmxpbmUgZGlyZWN0aXZlcyB0aGUgbm90ZS1sZXZlbCBhbGxvd2FuY2UgYWxyZWFkeSBjb3ZlcnMnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHByb2JsZW1zLm1hcCgocHJvYmxlbSkgPT4gYCR7bm90ZS5yZWxhdGl2ZVBhdGh9OiAke3Byb2JsZW19YCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgbm90ZXMgdXNpbmcgYW4gT2JzaWRpYW4gYFtbd2lraWxpbmtdXWAgb3V0c2lkZSBhIGNvZGUgZmVuY2UuIFRoZSBkZW1vIHZhdWx0IGlzIGFsc28gcmVhZCBvblxuICAgKiBHaXRIdWIsIHdoZXJlIGEgd2lraWxpbmsgcmVuZGVycyBhcyBsaXRlcmFsIGJyYWNrZXRzIGFuZCBsZWFkcyBub3doZXJlLiBBIHdpa2lsaW5rIHNob3duIElOU0lERSBhXG4gICAqIGZlbmNlIGlzIHNhbXBsZSB0ZXh0LCBub3QgbmF2aWdhdGlvbiwgc28gZmVuY2VkIGJsb2NrcyBhcmUgc2tpcHBlZCwgYXMgaXMgYSBub3RlIHRoYXQgZGVjbGFyZXMgaW4gaXRzXG4gICAqIGZyb250bWF0dGVyIHdoeSBpdHMgd2lraWxpbmtzIGFyZSB0aGUgcG9pbnQgXHUyMDE0IHNlZSB0aGUgZmlsZSBvdmVydmlldy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHJlbGF0aXZlIHBhdGhzIG9mIHRoZSBvZmZlbmRpbmcgbm90ZXMuXG4gICAqL1xuICBwdWJsaWMgZmluZE5vdGVzV2l0aFdpa2lsaW5rcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdENoZWNrYWJsZU5vdGVzKClcbiAgICAgIC5maWx0ZXIoKG5vdGUpID0+IHtcbiAgICAgICAgaWYgKHJlYWRXaWtpbGlua0FsbG93YW5jZVJlYXNvbihub3RlLmNvbnRlbnQpICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgYWxsb3dlZExpbmVJbmRleGVzIH0gPSBzY2FuV2lraWxpbmtEaXJlY3RpdmVzKG5vdGUuY29udGVudCk7XG4gICAgICAgIHJldHVybiBmaW5kV2lraWxpbmtMaW5lSW5kZXhlcyhub3RlLmNvbnRlbnQpLnNvbWUoKGxpbmVJbmRleCkgPT4gIWFsbG93ZWRMaW5lSW5kZXhlcy5oYXMobGluZUluZGV4KSk7XG4gICAgICB9KVxuICAgICAgLm1hcCgobm90ZSkgPT4gbm90ZS5yZWxhdGl2ZVBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIG1lbWJlcnMgdGhhdCB0aGUgZGVtbyBub3RlcyByZWZlcmVuY2Ugb24gYSByZWNlaXZlciBidXQgdGhhdCBubyBsb25nZXIgZXhpc3Qgb24gaXQgKHJlbmFtZSBkcmlmdCkuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGxvb2t1cC5cbiAgICogQHJldHVybnMgVGhlIGRpc3RpbmN0IHN0YWxlIG1lbWJlciBuYW1lcyByZWZlcmVuY2VkIGluIHRoZSBkZW1vIGNvcnB1cy5cbiAgICovXG4gIHB1YmxpYyBmaW5kU3RhbGVSZWZlcmVuY2VzKHBhcmFtczogRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyRmluZFN0YWxlUmVmZXJlbmNlc1BhcmFtcyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB2YWxpZE1lbWJlcnMgPSBuZXcgU2V0KHBhcmFtcy52YWxpZE1lbWJlcnMpO1xuICAgIGNvbnN0IHJlZmVyZW5jZWQgPSBbLi4udGhpcy5yZWFkQ29ycHVzKCkubWF0Y2hBbGwobmV3IFJlZ0V4cChTdHJpbmcucmF3YCR7cGFyYW1zLnJlY2VpdmVyfVxcLig/PG1lbWJlcj5cXHcrKWAsICdnJykpXVxuICAgICAgLm1hcCgobWF0Y2gpID0+IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdtZW1iZXInKSk7XG4gICAgcmV0dXJuIFsuLi5uZXcgU2V0KHJlZmVyZW5jZWQpXS5maWx0ZXIoKG1lbWJlcikgPT4gIXZhbGlkTWVtYmVycy5oYXMobWVtYmVyKSk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgbWVtYmVycyB0aGF0IGFyZSBub3QgZGVtb25zdHJhdGVkIGFueXdoZXJlIGluIHRoZSBkZW1vIGNvcnB1cy5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgbG9va3VwLlxuICAgKiBAcmV0dXJucyBUaGUgbWVtYmVyIG5hbWVzIHdpdGggbm8gZGVtb25zdHJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBmaW5kVW5kZW1vbnN0cmF0ZWRNZW1iZXJzKHBhcmFtczogRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyRmluZFVuZGVtb25zdHJhdGVkTWVtYmVyc1BhcmFtcyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjb3JwdXMgPSB0aGlzLnJlYWRDb3JwdXMoKTtcbiAgICByZXR1cm4gcGFyYW1zLm1lbWJlcnMuZmlsdGVyKChtZW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IG5lZWRsZSA9IHBhcmFtcy5yZWNlaXZlciA9PT0gdW5kZWZpbmVkID8gbWVtYmVyIDogYCR7cGFyYW1zLnJlY2VpdmVyfS4ke21lbWJlcn1gO1xuICAgICAgcmV0dXJuICFjb3JwdXMuaW5jbHVkZXMobmVlZGxlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBmZWF0dXJlIGRvY3MgdGhhdCBubyBkZW1vIG5vdGUgbGlua3MgdG8uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGxvb2t1cC5cbiAgICogQHJldHVybnMgVGhlIGZlYXR1cmUtZG9jIGJhc2VuYW1lcyAod2l0aG91dCBgLm1kYCkgbm90IGxpbmtlZCBmcm9tIGFueSBkZW1vIG5vdGUuXG4gICAqL1xuICBwdWJsaWMgZmluZFVubGlua2VkRmVhdHVyZURvY3MocGFyYW1zOiBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJGaW5kVW5saW5rZWRGZWF0dXJlRG9jc1BhcmFtcyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBub25GZWF0dXJlRG9jcyA9IG5ldyBTZXQocGFyYW1zLm5vbkZlYXR1cmVEb2NzKTtcbiAgICBjb25zdCBmZWF0dXJlRG9jcyA9IHJlYWRkaXJTeW5jKGpvaW4odGhpcy5yb290Rm9sZGVyLCBwYXJhbXMuZG9jc0ZvbGRlcikpXG4gICAgICAuZmlsdGVyKChmaWxlKSA9PiBmaWxlLmVuZHNXaXRoKCcubWQnKSlcbiAgICAgIC5tYXAoKGZpbGUpID0+IGZpbGUucmVwbGFjZSgvXFwubWQkLywgJycpKVxuICAgICAgLmZpbHRlcigobmFtZSkgPT4gIW5vbkZlYXR1cmVEb2NzLmhhcyhuYW1lKSk7XG4gICAgY29uc3QgbGlua2VkRG9jcyA9IG5ldyBTZXQoXG4gICAgICBbLi4udGhpcy5yZWFkQ29ycHVzKCkubWF0Y2hBbGwoL2RvY3NcXC8oPzxkb2M+W1xcdy1dKylcXC5tZC9nKV0ubWFwKChtYXRjaCkgPT4gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ2RvYycpKVxuICAgICk7XG4gICAgcmV0dXJuIGZlYXR1cmVEb2NzLmZpbHRlcigoZG9jKSA9PiAhbGlua2VkRG9jcy5oYXMoZG9jKSk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgbm90ZXMgdGhhdCBjYW5ub3QgYmUgcmVhY2hlZCBmcm9tIHRoZSBzdGFydCBub3RlIGJ5IGZvbGxvd2luZyBNYXJrZG93biBsaW5rcyBiZXR3ZWVuIG5vdGVzLlxuICAgKlxuICAgKiBUaGUgd2FsayBzdGFydHMgYXQge0BsaW5rIERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlckZpbmRVbnJlYWNoYWJsZU5vdGVzUGFyYW1zLnN0YXJ0Tm90ZX0gYW5kIGZvbGxvd3NcbiAgICogZXZlcnkgYFtUZXh0XSg8Li9OTiBOYW1lLm1kPilgIGxpbmsgb3V0c2lkZSBhIGNvZGUgZmVuY2UsIHRyYW5zaXRpdmVseS4gQSBub3RlIG5vdGhpbmcgbGlua3MgdG8gaXNcbiAgICogb25lIGEgcmVhZGVyIGNhbiBvbmx5IGZpbmQgYnkgYnJvd3NpbmcgdGhlIGZpbGUgbGlzdCBcdTIwMTQgd2hpY2ggaXMgZXhhY3RseSB3aGF0IHRoZSBncm91cGVkIGluZGV4IGluIHRoZVxuICAgKiBzdGFydCBub3RlIGlzIG1lYW50IHRvIHJlcGxhY2UuIFdoZW4gdGhlIHN0YXJ0IG5vdGUgaXRzZWxmIGlzIG1pc3NpbmcsIEVWRVJZIG5vdGUgaXMgdW5yZWFjaGFibGUsXG4gICAqIGJlY2F1c2UgdGhlcmUgaXMgbm93aGVyZSB0byBzdGFydCBmcm9tLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSB3YWxrLlxuICAgKiBAcmV0dXJucyBUaGUgcmVsYXRpdmUgcGF0aHMgb2YgdGhlIHVucmVhY2hhYmxlIG5vdGVzLlxuICAgKi9cbiAgcHVibGljIGZpbmRVbnJlYWNoYWJsZU5vdGVzKHBhcmFtczogRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyRmluZFVucmVhY2hhYmxlTm90ZXNQYXJhbXMpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgbm90ZXNCeVJlbGF0aXZlUGF0aCA9IG5ldyBNYXAodGhpcy5jb2xsZWN0Tm90ZXMoKS5tYXAoKG5vdGUpID0+IFtub3RlLnJlbGF0aXZlUGF0aCwgbm90ZV0pKTtcbiAgICBjb25zdCByZWFjaGVkTm90ZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBwZW5kaW5nTm90ZXMgPSBbcGFyYW1zLnN0YXJ0Tm90ZV07XG5cbiAgICB3aGlsZSAocGVuZGluZ05vdGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG5vdGVQYXRoID0gZW5zdXJlTm9uTnVsbGFibGUocGVuZGluZ05vdGVzLnBvcCgpKTtcbiAgICAgIGNvbnN0IG5vdGUgPSBub3Rlc0J5UmVsYXRpdmVQYXRoLmdldChub3RlUGF0aCk7XG4gICAgICBpZiAoIW5vdGUgfHwgcmVhY2hlZE5vdGVzLmhhcyhub3RlUGF0aCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZWFjaGVkTm90ZXMuYWRkKG5vdGVQYXRoKTtcbiAgICAgIHBlbmRpbmdOb3Rlcy5wdXNoKC4uLmNvbGxlY3ROb3RlTGlua1RhcmdldHMobm90ZSkpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbGxlY3RDaGVja2FibGVOb3RlcygpXG4gICAgICAubWFwKChub3RlKSA9PiBub3RlLnJlbGF0aXZlUGF0aClcbiAgICAgIC5maWx0ZXIoKG5vdGVQYXRoKSA9PiAhcmVhY2hlZE5vdGVzLmhhcyhub3RlUGF0aCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyB0aGUgbmFtZXMgb2YgdGhlIGBleHBvcnQgZnVuY3Rpb25gcyAoaW5jbHVkaW5nIGBhc3luY2AgYW5kIGdlbmVyYXRvciBkZWNsYXJhdGlvbnMpIGluIGEgc291cmNlIGZpbGUuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGxvb2t1cC5cbiAgICogQHJldHVybnMgVGhlIGV4cG9ydGVkIGZ1bmN0aW9uIG5hbWVzIGluIHNvdXJjZSBvcmRlci5cbiAgICovXG4gIHB1YmxpYyBnZXRFeHBvcnRlZEZ1bmN0aW9uTmFtZXMocGFyYW1zOiBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJHZXRFeHBvcnRlZEZ1bmN0aW9uTmFtZXNQYXJhbXMpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc291cmNlID0gcmVhZEZpbGVTeW5jKGpvaW4odGhpcy5yb290Rm9sZGVyLCBwYXJhbXMuc291cmNlUGF0aCksICd1dGYtOCcpO1xuICAgIHJldHVybiBbLi4uc291cmNlLm1hdGNoQWxsKC9eZXhwb3J0ICg/OmFzeW5jICk/ZnVuY3Rpb25cXCo/ICg/PG5hbWU+XFx3KykvZ20pXVxuICAgICAgLm1hcCgobWF0Y2gpID0+IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICduYW1lJykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyB0aGUgbWVtYmVycyBvZiBhbiBgZXhwb3J0IGludGVyZmFjZWAsIGBleHBvcnQgY2xhc3NgLCBvciBgZXhwb3J0IGVudW1gIGRlY2xhcmVkIGluIGEgc291cmNlIGZpbGUuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGxvb2t1cC5cbiAgICogQHJldHVybnMgVGhlIHBhcnNlZCB7QGxpbmsgSW50ZXJmYWNlTWVtYmVyc30uXG4gICAqIEB0aHJvd3MgV2hlbiB0aGUgaW50ZXJmYWNlLCBjbGFzcywgb3IgZW51bSBjYW5ub3QgYmUgZm91bmQgaW4gdGhlIHNvdXJjZSBmaWxlLlxuICAgKi9cbiAgcHVibGljIGdldEludGVyZmFjZU1lbWJlcnMocGFyYW1zOiBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJHZXRJbnRlcmZhY2VNZW1iZXJzUGFyYW1zKTogSW50ZXJmYWNlTWVtYmVycyB7XG4gICAgY29uc3Qgc291cmNlID0gcmVhZEZpbGVTeW5jKGpvaW4odGhpcy5yb290Rm9sZGVyLCBwYXJhbXMuc291cmNlUGF0aCksICd1dGYtOCcpO1xuICAgIGNvbnN0IG1hdGNoID0gbmV3IFJlZ0V4cChTdHJpbmcucmF3YGV4cG9ydCAoPzxrZXl3b3JkPmludGVyZmFjZXxjbGFzc3xlbnVtKSAke3BhcmFtcy5pbnRlcmZhY2VOYW1lfVxcYltee10qXFx7KD88Ym9keT5bXFxzXFxTXSo/KVxcblxcfWApLmV4ZWMoc291cmNlKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGludGVyZmFjZSAke3BhcmFtcy5pbnRlcmZhY2VOYW1lfWApO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VNZW1iZXJzKGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdrZXl3b3JkJyksIGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdib2R5JykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIGFuZCBjYWNoZXMgdGhlIGRlbW8gY29ycHVzIFx1MjAxNCBldmVyeSBgKi5tZGAgbm90ZSBpbiB0aGUgZGVtbyB2YXVsdCBqb2luZWQgaW50byBvbmUgc3RyaW5nLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgY29uY2F0ZW5hdGVkIGRlbW8tbm90ZSBjb250ZW50cy5cbiAgICovXG4gIHB1YmxpYyByZWFkQ29ycHVzKCk6IHN0cmluZyB7XG4gICAgdGhpcy5jYWNoZWRDb3JwdXMgPz89IHRoaXMuY29sbGVjdE5vdGVzKClcbiAgICAgIC5tYXAoKG5vdGUpID0+IG5vdGUuY29udGVudClcbiAgICAgIC5qb2luKCdcXG4nKTtcbiAgICByZXR1cm4gdGhpcy5jYWNoZWRDb3JwdXM7XG4gIH1cblxuICAvLyBUaGUgbm90ZXMgdGhlIGF1dGhvcmluZyBjaGVja3MgYXBwbHkgdG86IGV2ZXJ5IG5vdGUgZXhjZXB0IHRoZSBvbmVzIGRlY2xhcmVkIG91dHNpZGUgdGhlIGxlYXJuaW5nXG4gIC8vIFBhdGggKHRoZSB2YXVsdCdzIG93biBgUkVBRE1FLm1kYCBieSBkZWZhdWx0KS5cbiAgcHJpdmF0ZSBjb2xsZWN0Q2hlY2thYmxlTm90ZXMoKTogRGVtb1ZhdWx0Tm90ZVtdIHtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0Tm90ZXMoKS5maWx0ZXIoKG5vdGUpID0+ICF0aGlzLmV4Y2x1ZGVkTm90ZXMuaGFzKG5vdGUucmVsYXRpdmVQYXRoKSk7XG4gIH1cblxuICBwcml2YXRlIGNvbGxlY3RNYXJrZG93bkZpbGVzKGZvbGRlcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHJlYWRkaXJTeW5jKGZvbGRlciwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pKSB7XG4gICAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICBpZiAoZW50cnkubmFtZSA9PT0gT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTm9kZU1vZHVsZXMgYXMgc3RyaW5nKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5jb2xsZWN0TWFya2Rvd25GaWxlcyhqb2luKGZvbGRlciwgZW50cnkubmFtZSkpKTtcbiAgICAgIH0gZWxzZSBpZiAoZW50cnkubmFtZS5lbmRzV2l0aCgnLm1kJykpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goam9pbihmb2xkZXIsIGVudHJ5Lm5hbWUpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBhIGB2aXRlc3RgIHN1aXRlIHRoYXQga2VlcHMgYSBwbHVnaW4ncyBpbi1yZXBvIGBkZW1vLXZhdWx0L2AgaW4gc3luYyB3aXRoIGl0cyBwdWJsaWMgc3VyZmFjZS5cbiAqXG4gKiBDYWxsIGl0IG9uY2UgZnJvbSBhIHBsdWdpbidzIGBkZW1vLXZhdWx0Lm5vLWFwcC5pbnRlZ3JhdGlvbi50ZXN0LnRzYDsgaXQgcmVnaXN0ZXJzIG9uZSB0ZXN0IHBlciBjaGVjayxcbiAqIGRlbGVnYXRpbmcgdG8ge0BsaW5rIERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlcn0uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBkZWNsYXJhdGl2ZSBjb3ZlcmFnZSBzcGVjaWZpY2F0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZW1vVmF1bHRDb3ZlcmFnZVN1aXRlKHBhcmFtczogUmVnaXN0ZXJEZW1vVmF1bHRDb3ZlcmFnZVN1aXRlUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IGNoZWNrZXIgPSBuZXcgRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJDb25zdHJ1Y3RvclBhcmFtcz4oe1xuICAgIGV4Y2x1ZGVkTm90ZXM6IHBhcmFtcy5hdXRob3Jpbmc/LmV4Y2x1ZGVkTm90ZXMsXG4gICAgcm9vdEZvbGRlcjogcGFyYW1zLnJvb3RGb2xkZXJcbiAgfSkpO1xuICBjb25zdCBzdGFydE5vdGUgPSBwYXJhbXMuYXV0aG9yaW5nPy5zdGFydE5vdGUgPz8gREVGQVVMVF9TVEFSVF9OT1RFO1xuXG4gIGRlc2NyaWJlKCdkZW1vLXZhdWx0IGNvdmVyYWdlJywgKCkgPT4ge1xuICAgIGZvciAoY29uc3Qgc3BlYyBvZiBwYXJhbXMuaW50ZXJmYWNlcyA/PyBbXSkge1xuICAgICAgaXQoYGRlbW9uc3RyYXRlcyBldmVyeSAke3NwZWMuaW50ZXJmYWNlTmFtZX0gJHtzcGVjLmtpbmR9YCwgKCkgPT4ge1xuICAgICAgICBjb25zdCBtZW1iZXJzID0gY2hlY2tlci5nZXRJbnRlcmZhY2VNZW1iZXJzKHNwZWMpO1xuICAgICAgICBjb25zdCBkZW1vbnN0cmF0ZWQgPSBtZW1iZXJzW3NwZWMua2luZF07XG4gICAgICAgIGV4cGVjdChkZW1vbnN0cmF0ZWQubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oMCk7XG4gICAgICAgIGV4cGVjdChjaGVja2VyLmZpbmRVbmRlbW9uc3RyYXRlZE1lbWJlcnMoeyBtZW1iZXJzOiBkZW1vbnN0cmF0ZWQsIHJlY2VpdmVyOiBzcGVjLnJlY2VpdmVyIH0pKS50b0VxdWFsKFtdKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdChgcmVmZXJlbmNlcyBubyAke3NwZWMuaW50ZXJmYWNlTmFtZX0gbWVtYmVyIHRoYXQgbm8gbG9uZ2VyIGV4aXN0c2AsICgpID0+IHtcbiAgICAgICAgY29uc3QgbWVtYmVycyA9IGNoZWNrZXIuZ2V0SW50ZXJmYWNlTWVtYmVycyhzcGVjKTtcbiAgICAgICAgZXhwZWN0KGNoZWNrZXIuZmluZFN0YWxlUmVmZXJlbmNlcyh7IHJlY2VpdmVyOiBzcGVjLnJlY2VpdmVyLCB2YWxpZE1lbWJlcnM6IG1lbWJlcnMuYWxsIH0pKS50b0VxdWFsKFtdKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc3BlYyBvZiBwYXJhbXMuY29uZmlnSW50ZXJmYWNlcyA/PyBbXSkge1xuICAgICAgaXQoYGRlbW9uc3RyYXRlcyBldmVyeSAke3NwZWMuaW50ZXJmYWNlTmFtZX0gb3B0aW9uYCwgKCkgPT4ge1xuICAgICAgICBjb25zdCBtZW1iZXJzID0gY2hlY2tlci5nZXRJbnRlcmZhY2VNZW1iZXJzKHNwZWMpO1xuICAgICAgICBleHBlY3QobWVtYmVycy5wcm9wZXJ0aWVzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApO1xuICAgICAgICBleHBlY3QoY2hlY2tlci5maW5kVW5kZW1vbnN0cmF0ZWRNZW1iZXJzKHsgbWVtYmVyczogbWVtYmVycy5wcm9wZXJ0aWVzIH0pKS50b0VxdWFsKFtdKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc3BlYyBvZiBwYXJhbXMuZnVuY3Rpb25Nb2R1bGVzID8/IFtdKSB7XG4gICAgICBpdChgZGVtb25zdHJhdGVzIGV2ZXJ5IGV4cG9ydGVkIGZ1bmN0aW9uIGluICR7c3BlYy5zb3VyY2VQYXRofWAsICgpID0+IHtcbiAgICAgICAgY29uc3QgZnVuY3Rpb25OYW1lcyA9IGNoZWNrZXIuZ2V0RXhwb3J0ZWRGdW5jdGlvbk5hbWVzKHNwZWMpO1xuICAgICAgICBleHBlY3QoZnVuY3Rpb25OYW1lcy5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigwKTtcbiAgICAgICAgZXhwZWN0KGNoZWNrZXIuZmluZFVuZGVtb25zdHJhdGVkTWVtYmVycyh7IG1lbWJlcnM6IGZ1bmN0aW9uTmFtZXMgfSkpLnRvRXF1YWwoW10pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgZG9jcyA9IHBhcmFtcy5kb2NzO1xuICAgIGlmIChkb2NzKSB7XG4gICAgICBpdCgnbGlua3MgYSBkZW1vIG5vdGUgZm9yIGV2ZXJ5IGZlYXR1cmUgZG9jJywgKCkgPT4ge1xuICAgICAgICBleHBlY3QoY2hlY2tlci5maW5kVW5saW5rZWRGZWF0dXJlRG9jcyh7IGRvY3NGb2xkZXI6IGRvY3MuZm9sZGVyLCBub25GZWF0dXJlRG9jczogZG9jcy5ub25GZWF0dXJlRG9jcyB9KSlcbiAgICAgICAgICAudG9FcXVhbChbXSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpdCgnb3BlbnMgZXZlcnkgbm90ZSB3aXRoIGFuIEgxJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGNoZWNrZXIuZmluZE5vdGVzV2l0aG91dEgxKCkpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgaXQoJ29wZW5zIGV2ZXJ5IG5vdGUgd2l0aCBhIHByb3NlIHBhcmFncmFwaCBiZWZvcmUgaXRzIGZpcnN0IGNvZGUgYmxvY2snLCAoKSA9PiB7XG4gICAgICBleHBlY3QoY2hlY2tlci5maW5kTm90ZXNXaXRob3V0SW50cm9Qcm9zZSgpKS50b0VxdWFsKFtdKTtcbiAgICB9KTtcblxuICAgIGl0KGByZWFjaGVzIGV2ZXJ5IG5vdGUgZnJvbSAke3N0YXJ0Tm90ZX1gLCAoKSA9PiB7XG4gICAgICBleHBlY3QoY2hlY2tlci5maW5kVW5yZWFjaGFibGVOb3Rlcyh7IHN0YXJ0Tm90ZSB9KSkudG9FcXVhbChbXSk7XG4gICAgfSk7XG5cbiAgICBpdCgndXNlcyBubyB3aWtpbGlua3MsIHdoaWNoIGRvIG5vdCByZW5kZXIgb24gR2l0SHViJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGNoZWNrZXIuZmluZE5vdGVzV2l0aFdpa2lsaW5rcygpKS50b0VxdWFsKFtdKTtcbiAgICB9KTtcblxuICAgIGl0KCdqdXN0aWZpZXMgZXZlcnkgd2lraWxpbmsgYWxsb3dhbmNlLCBhbmQgZGVjbGFyZXMgbm9uZSBpdCBubyBsb25nZXIgbmVlZHMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoY2hlY2tlci5maW5kTm90ZXNXaXRoVW5qdXN0aWZpZWRXaWtpbGlua0FsbG93YW5jZSgpKS50b0VxdWFsKFtdKTtcbiAgICB9KTtcblxuICAgIGl0KCdjYXJyaWVzIG5vIERvY3MgbGluayBsaW5lLCBiZWNhdXNlIHRoZSBub3RlIGlzIHRoZSBkb2NzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGNoZWNrZXIuZmluZE5vdGVzV2l0aERvY3NMaW5rcygpKS50b0VxdWFsKFtdKTtcbiAgICB9KTtcblxuICAgIGl0KCdjb21taXRzIG5vbmUgb2YgdGhlIGFwcC5qc29uIHNldHRpbmdzIG9ic2lkaWFuLWRldi11dGlscyBpbmplY3RzIGF0IHJlbGVhc2UgdGltZScsICgpID0+IHtcbiAgICAgIGV4cGVjdChjaGVja2VyLmZpbmRDb21taXR0ZWRBcHBKc29uU2V0dGluZ3MoKSkudG9FcXVhbChbXSk7XG4gICAgfSk7XG5cbiAgICAvLyBXaXRoIG5vIG5vdGVzIHRvIHJlYWQsIGV2ZXJ5IGF1dGhvcmluZyBjaGVjayBhYm92ZSBwYXNzZXMgYnkgaGF2aW5nIG5vdGhpbmcgdG8gbG9vayBhdCwgc28gYSB2YXVsdFxuICAgIC8vIFRoYXQgc3RvcHBlZCBiZWluZyBmb3VuZCB3b3VsZCBnbyBvbiByZXBvcnRpbmcgaXRzZWxmIGNsZWFuLiBUaGlzIGlzIHRoZSBoYWxmIG9mIHRoZSBub24tdHJpdmlhbFxuICAgIC8vIEd1YXJkIHRoYXQgc3RpbGwgYXBwbGllcyB3aGVuIHRoZSBwbHVnaW4gZXhwb3NlcyBub3RoaW5nIHRvIHJlZmxlY3QuXG4gICAgaXQoJ3JlYWRzIGEgbm9uLWVtcHR5IGRlbW8gdmF1bHQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoY2hlY2tlci5jb2xsZWN0RGVtb05vdGVSZWxhdGl2ZVBhdGhzKCkubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oMCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBndWFyZCA9IHBhcmFtcy5ub25Ucml2aWFsR3VhcmQ7XG4gICAgaWYgKGd1YXJkKSB7XG4gICAgICBpdCgna2VlcHMgdGhlIHJlZmxlY3RlZCBzdXJmYWNlIG5vbi10cml2aWFsJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBtZW1iZXJzID0gY2hlY2tlci5nZXRJbnRlcmZhY2VNZW1iZXJzKGd1YXJkKTtcbiAgICAgICAgZXhwZWN0KG1lbWJlcnMuYWxsKS50b0NvbnRhaW4oZ3VhcmQuZXhwZWN0TWVtYmVyKTtcbiAgICAgICAgZXhwZWN0KGNoZWNrZXIuY29sbGVjdERlbW9Ob3RlUmVsYXRpdmVQYXRocygpKS50b0NvbnRhaW4oZ3VhcmQuZXhwZWN0RGVtb05vdGUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuY29uc3QgQ0xBU1NfTUVNQkVSX01PRElGSUVSUyA9IFN0cmluZy5yYXdgKD86KD86cHVibGljfHByaXZhdGV8cHJvdGVjdGVkfHJlYWRvbmx5fHN0YXRpY3xhYnN0cmFjdHxvdmVycmlkZSlcXHMrKSpgO1xuY29uc3QgQUJTT0xVVEVfVVJMX1JFR19FWFAgPSAvXlthLXpdW1xcdysuLV0qOi9pO1xuY29uc3QgQU5HTEVfQlJBQ0tFVFNfUkVHX0VYUCA9IC9ePHw+JC9nO1xuY29uc3QgQ09ERV9GRU5DRV9SRUdfRVhQID0gL15cXHMqKD86YGBgfH5+fikvO1xuY29uc3QgREVGQVVMVF9FWENMVURFRF9OT1RFUyA9IFsnUkVBRE1FLm1kJ107XG5jb25zdCBERUZBVUxUX1NUQVJUX05PVEUgPSAnMDAgU3RhcnQubWQnO1xuY29uc3QgRE9DU19MSU5LX1JFR19FWFAgPSAvXlxccypcXFtEb2NzXVxcKC87XG5jb25zdCBGUk9OVE1BVFRFUl9SRUdfRVhQID0gL14tLS1cXHI/XFxuW1xcc1xcU10qP1xccj9cXG4tLS1bXlxcU1xcbl0qXFxyP1xcbj8vO1xuY29uc3QgSDFfUkVHX0VYUCA9IC9eIyBcXFMvO1xuY29uc3QgSEVBRElOR19SRUdfRVhQID0gL14jezEsNn0gLztcbmNvbnN0IElOTElORV9DT0RFX1JFR19FWFAgPSAvYFteYFxcbl0qYC9nO1xuY29uc3QgTUFSS0RPV05fTElOS19SRUdfRVhQID0gL1xcW1teXFxdXSpdXFwoKD88dGFyZ2V0PlteKV0rKVxcKS9nO1xuLy8gQW4gaW5saW5lIGRpcmVjdGl2ZSwgc2hhcGVkIGFmdGVyIEVTTGludCdzIGFuZCB3cml0dGVuIGFzIGFuIEhUTUwgY29tbWVudCBzbyBpdCBpcyBpbnZpc2libGUgQk9USCBpblxuLy8gT2JzaWRpYW4gYW5kIG9uIEdpdEh1YiBcdTIwMTQgdGhlIHNhbWUgc3BlbGxpbmcgdGhlIHZhdWx0cyBhbHJlYWR5IHVzZSBmb3IgYG1hcmtkb3dubGludC1kaXNhYmxlLW5leHQtbGluZWAuXG4vLyBBbiBPYnNpZGlhbiBgJSUgXHUyMDI2ICUlYCBjb21tZW50IHdvdWxkIHNob3cgdXAgYXMgbGl0ZXJhbCB0ZXh0IG9uIEdpdEh1Yiwgd2hpY2ggaXMgaGFsZiB0aGUgcmVhZGVyc2hpcC5cbmNvbnN0IERJUkVDVElWRV9SRUdfRVhQID0gL15cXHMqPCEtLVxccypvYnNpZGlhbi1kZXYtdXRpbHMtKD88YWN0aW9uPmRpc2FibGUtbmV4dC1saW5lfGRpc2FibGV8ZW5hYmxlKVxccysoPzxydWxlPltcXHctXStcXC9bXFx3LV0rKSg/OlxccystLVxccysoPzxyZWFzb24+Lio/KSk/XFxzKi0tPlxccyokLztcbi8vIENhdGNoZXMgYSBkaXJlY3RpdmUgdGhhdCB3YXMgTUVBTlQgdG8gYmUgb25lIGJ1dCBpcyBtaXNzcGVsbGVkOiBpdCB3b3VsZCBvdGhlcndpc2UgcmVhZCBhcyBhbiBvcmRpbmFyeVxuLy8gQ29tbWVudCBhbmQgc2lsZW50bHkgZG8gbm90aGluZywgd2hpY2ggaXMgdGhlIGZhaWx1cmUgbW9kZSBhIHN1cHByZXNzaW9uIHN5bnRheCBtdXN0IG5ldmVyIGhhdmUuXG5jb25zdCBESVJFQ1RJVkVfUFJPQkVfUkVHX0VYUCA9IC88IS0tXFxzKm9ic2lkaWFuLWRldi11dGlscy0vO1xuY29uc3QgV0lLSUxJTktfUlVMRSA9ICdkZW1vLXZhdWx0LXZhbGlkYXRpb24vbm8td2lraWxpbmtzJztcbi8vIFRoZSBgb2JzaWRpYW4tZGV2LXV0aWxzID4gZGVtby12YXVsdC12YWxpZGF0aW9uID4gYWxsb3ctd2lraWxpbmtzYCBmcm9udG1hdHRlciBwYXRoLCBhdCBhbnkgaW5kZW50YXRpb246XG4vLyBUaGUga2V5cyBtdXN0IG5lc3QgaW4gdGhhdCBvcmRlciwgYW5kIGFueSBsaW5lIGJldHdlZW4gdGhlbSBoYXMgdG8gc3RheSBpbmRlbnRlZCwgc28gYSBkZWRlbnQgdG8gdGhlXG4vLyBEb2N1bWVudCdzIG93biB0b3AgbGV2ZWwgZW5kcyB0aGUgbWF0Y2ggcmF0aGVyIHRoYW4gcmVhY2hpbmcgYSBzYW1lLW5hbWVkIGtleSB1bmRlciBhbm90aGVyIHBhcmVudC5cbmNvbnN0IFdJS0lMSU5LX0FMTE9XQU5DRV9SRUdfRVhQID0gL15vYnNpZGlhbi1kZXYtdXRpbHM6W15cXFNcXG5dKlxcbig/OlteXFxTXFxuXSsuKlxcbikqP1teXFxTXFxuXStkZW1vLXZhdWx0LXZhbGlkYXRpb246W15cXFNcXG5dKlxcbig/OlteXFxTXFxuXSsuKlxcbikqP1teXFxTXFxuXSthbGxvdy13aWtpbGlua3M6KD88cmVhc29uPi4qKSQvbTtcbmNvbnN0IFdJS0lMSU5LX1JFR19FWFAgPSAvXFxbXFxbW15cXF1dK11dLztcblxuLy8gQXBwbGllcyBvbmUgcGFyc2VkIGRpcmVjdGl2ZSB0byB0aGUgc2Nhbi5cbmZ1bmN0aW9uIGFwcGx5V2lraWxpbmtEaXJlY3RpdmUoc3RhdGU6IFdpa2lsaW5rRGlyZWN0aXZlU2NhblN0YXRlLCBsaW5lSW5kZXg6IG51bWJlciwgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSk6IHZvaWQge1xuICBjb25zdCBhY3Rpb24gPSBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnYWN0aW9uJyk7XG4gIGNvbnN0IHJ1bGUgPSBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAncnVsZScpO1xuICBjb25zdCByZWFzb24gPSBtYXRjaC5ncm91cHM/LlsncmVhc29uJ10/LnRyaW0oKSA/PyAnJztcbiAgaWYgKHJ1bGUgIT09IFdJS0lMSU5LX1JVTEUpIHtcbiAgICBzdGF0ZS5wcm9ibGVtcy5wdXNoKGBhbiB1bmtub3duIHJ1bGUgXCIke3J1bGV9XCIgb24gJHtmb3JtYXRMaW5lTnVtYmVyKGxpbmVJbmRleCl9YCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChhY3Rpb24gIT09ICdlbmFibGUnICYmIHJlYXNvbiA9PT0gJycpIHtcbiAgICBzdGF0ZS5wcm9ibGVtcy5wdXNoKGBhIGRpcmVjdGl2ZSB3aXRoIG5vIHJlYXNvbiBvbiAke2Zvcm1hdExpbmVOdW1iZXIobGluZUluZGV4KX1gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYWN0aW9uID09PSAnZGlzYWJsZS1uZXh0LWxpbmUnKSB7XG4gICAgc3RhdGUucGVuZGluZ05leHRMaW5lSW5kZXggPSBsaW5lSW5kZXg7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGFjdGlvbiA9PT0gJ2Rpc2FibGUnKSB7XG4gICAgaWYgKHN0YXRlLm9wZW5SZWdpb24pIHtcbiAgICAgIHN0YXRlLnByb2JsZW1zLnB1c2goYGEgZGlzYWJsZSBvbiAke2Zvcm1hdExpbmVOdW1iZXIobGluZUluZGV4KX0gaW5zaWRlIHRoZSByZWdpb24gb3BlbmVkIG9uICR7Zm9ybWF0TGluZU51bWJlcihzdGF0ZS5vcGVuUmVnaW9uLmxpbmVJbmRleCl9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN0YXRlLm9wZW5SZWdpb24gPSB7IGlzVXNlZDogZmFsc2UsIGxpbmVJbmRleCB9O1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghc3RhdGUub3BlblJlZ2lvbikge1xuICAgIHN0YXRlLnByb2JsZW1zLnB1c2goYGFuIGVuYWJsZSBvbiAke2Zvcm1hdExpbmVOdW1iZXIobGluZUluZGV4KX0gd2l0aCBubyByZWdpb24gb3BlbmApO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIXN0YXRlLm9wZW5SZWdpb24uaXNVc2VkKSB7XG4gICAgc3RhdGUucHJvYmxlbXMucHVzaChgYSByZWdpb24gb3BlbmVkIG9uICR7Zm9ybWF0TGluZU51bWJlcihzdGF0ZS5vcGVuUmVnaW9uLmxpbmVJbmRleCl9IGNvdmVyaW5nIG5vIHdpa2lsaW5rYCk7XG4gIH1cbiAgc3RhdGUub3BlblJlZ2lvbiA9IG51bGw7XG59XG5cbi8vIEFwcGxpZXMgb25lIG9yZGluYXJ5IGxpbmUgdG8gdGhlIHNjYW46IGFuIG9wZW4gcmVnaW9uIGNvdmVycyBpdCwgYW5kIGEgcGVuZGluZyBgZGlzYWJsZS1uZXh0LWxpbmVgXG4vLyBDbGFpbXMgdGhlIGZpcnN0IGxpbmUgd2l0aCBjb250ZW50IG9uIGl0IFx1MjAxNCB0aGUgZGlyZWN0aXZlIGFuZCBpdHMgdGFyZ2V0IGFyZSB1c3VhbGx5IGEgYmxhbmsgbGluZSBhcGFydC5cbmZ1bmN0aW9uIGFwcGx5V2lraWxpbmtTY2FuTGluZShzdGF0ZTogV2lraWxpbmtEaXJlY3RpdmVTY2FuU3RhdGUsIGxpbmVJbmRleDogbnVtYmVyLCBsaW5lOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKHN0YXRlLm9wZW5SZWdpb24pIHtcbiAgICBzdGF0ZS5hbGxvd2VkTGluZUluZGV4ZXMuYWRkKGxpbmVJbmRleCk7XG4gICAgc3RhdGUub3BlblJlZ2lvbi5pc1VzZWQgfHw9IHN0YXRlLndpa2lsaW5rTGluZUluZGV4ZXMuaGFzKGxpbmVJbmRleCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChzdGF0ZS5wZW5kaW5nTmV4dExpbmVJbmRleCA9PT0gbnVsbCB8fCBsaW5lLnRyaW0oKSA9PT0gJycpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgc3RhdGUuYWxsb3dlZExpbmVJbmRleGVzLmFkZChsaW5lSW5kZXgpO1xuICBpZiAoIXN0YXRlLndpa2lsaW5rTGluZUluZGV4ZXMuaGFzKGxpbmVJbmRleCkpIHtcbiAgICBzdGF0ZS5wcm9ibGVtcy5wdXNoKGBhIGRpc2FibGUtbmV4dC1saW5lIG9uICR7Zm9ybWF0TGluZU51bWJlcihzdGF0ZS5wZW5kaW5nTmV4dExpbmVJbmRleCl9IGNvdmVyaW5nIG5vIHdpa2lsaW5rYCk7XG4gIH1cbiAgc3RhdGUucGVuZGluZ05leHRMaW5lSW5kZXggPSBudWxsO1xufVxuXG5mdW5jdGlvbiBidWlsZE1lbWJlcnMobWV0aG9kczogc3RyaW5nW10sIHByb3BlcnRpZXM6IHN0cmluZ1tdKTogSW50ZXJmYWNlTWVtYmVycyB7XG4gIHJldHVybiB7XG4gICAgYWxsOiBbLi4ubWV0aG9kcywgLi4ucHJvcGVydGllc10sXG4gICAgbWV0aG9kcyxcbiAgICBwcm9wZXJ0aWVzXG4gIH07XG59XG5cbi8vIFJlc29sdmVzIHRoZSBub3RlcyBhIG5vdGUgbGlua3MgdG86IGV2ZXJ5IE1hcmtkb3duIGxpbmsgb3V0c2lkZSBhIGNvZGUgZmVuY2Ugd2hvc2UgdGFyZ2V0IGlzIGEgYC5tZGBcbi8vIEZpbGUsIG1hZGUgcmVsYXRpdmUgdG8gdGhlIGRlbW8gdmF1bHQgc28gaXQgY2FuIGJlIGxvb2tlZCB1cCBpbiB0aGUgbm90ZSBtYXAuIEV4dGVybmFsIFVSTHMgYW5kXG4vLyBOb24tbm90ZSB0YXJnZXRzIChpbWFnZXMsIHNjcmlwdHMpIGFyZSBub3QgcGFydCBvZiB0aGUgbGVhcm5pbmcgcGF0aCBhbmQgYXJlIHNraXBwZWQ7IGEgYCNhbmNob3JgIGlzXG4vLyBEcm9wcGVkLCBzaW5jZSBpdCBhZGRyZXNzZXMgYSBwbGFjZSBpbnNpZGUgYW4gYWxyZWFkeS1yZXNvbHZlZCBub3RlLlxuLy8gUmV0dXJucyB0aGUgbm90ZSdzIGxpbmVzIHdpdGggZmVuY2VkIGNvZGUgYmxvY2tzIHJlbW92ZWQgKHRoZSBmZW5jZSBsaW5lcyBpbmNsdWRlZCksIHBhaXJlZCB3aXRoIHRoZVxuLy8gTGluZSBudW1iZXIgZWFjaCBjYW1lIGZyb20sIHNvIGEgY2hlY2sgbmV2ZXIgbWlzdGFrZXMgc2FtcGxlIGNvZGUgZm9yIHByb3NlIFx1MjAxNCBhIGBbW3dpa2lsaW5rXV1gXG4vLyBEZW1vbnN0cmF0ZWQgaW5zaWRlIGEgZmVuY2UgaXMgdGV4dCwgbm90IG5hdmlnYXRpb24gXHUyMDE0IGFuZCBhbiBpbmxpbmUgZGlyZWN0aXZlIGNhbiBzdGlsbCBuYW1lIGEgbGluZS5cbmZ1bmN0aW9uIGNvbGxlY3RMaW5lc091dHNpZGVGZW5jZXMoY29udGVudDogc3RyaW5nKTogTm90ZUxpbmVbXSB7XG4gIGNvbnN0IG5vdGVMaW5lczogTm90ZUxpbmVbXSA9IFtdO1xuICBsZXQgaXNJbnNpZGVGZW5jZSA9IGZhbHNlO1xuICBmb3IgKGNvbnN0IFtpbmRleCwgbGluZV0gb2YgY29udGVudC5zcGxpdCgnXFxuJykuZW50cmllcygpKSB7XG4gICAgaWYgKENPREVfRkVOQ0VfUkVHX0VYUC50ZXN0KGxpbmUpKSB7XG4gICAgICBpc0luc2lkZUZlbmNlID0gIWlzSW5zaWRlRmVuY2U7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKCFpc0luc2lkZUZlbmNlKSB7XG4gICAgICBub3RlTGluZXMucHVzaCh7IGluZGV4LCBsaW5lIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbm90ZUxpbmVzO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0Tm90ZUxpbmtUYXJnZXRzKG5vdGU6IERlbW9WYXVsdE5vdGUpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHRhcmdldHM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgbGluZSBvZiBnZXRMaW5lc091dHNpZGVGZW5jZXMobm90ZS5jb250ZW50KSkge1xuICAgIGZvciAoY29uc3QgbWF0Y2ggb2Ygc3RyaXBJbmxpbmVDb2RlKGxpbmUpLm1hdGNoQWxsKE1BUktET1dOX0xJTktfUkVHX0VYUCkpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICd0YXJnZXQnKS5yZXBsYWNlQWxsKEFOR0xFX0JSQUNLRVRTX1JFR19FWFAsICcnKTtcbiAgICAgIGNvbnN0IFtub3RlUGF0aCA9ICcnXSA9IHRhcmdldC5zcGxpdCgnIycsIDEpO1xuICAgICAgaWYgKEFCU09MVVRFX1VSTF9SRUdfRVhQLnRlc3Qobm90ZVBhdGgpIHx8ICFub3RlUGF0aC50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCcubWQnKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHRhcmdldHMucHVzaChqb2luKGRpcm5hbWUobm90ZS5yZWxhdGl2ZVBhdGgpLCB0cnlEZWNvZGVVcmlDb21wb25lbnQobm90ZVBhdGgpKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0YXJnZXRzO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0Q2xhc3NNZXRob2ROYW1lcyhjbGFzc0JvZHk6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFsuLi5jbGFzc0JvZHkubWF0Y2hBbGwobmV3IFJlZ0V4cChTdHJpbmcucmF3YF4gezJ9KD88bW9kaWZpZXJzPiR7Q0xBU1NfTUVNQkVSX01PRElGSUVSU30pKD88bmFtZT5cXHcrKSg/OjxbXj5dKj4pP1xcKGAsICdnbScpKV1cbiAgICAuZmlsdGVyKChtYXRjaCkgPT4gIWlzTm9uUHVibGljTWVtYmVyKGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdtb2RpZmllcnMnKSkpXG4gICAgLm1hcCgobWF0Y2gpID0+IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICduYW1lJykpO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0Q2xhc3NQcm9wZXJ0eU5hbWVzKGNsYXNzQm9keTogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gWy4uLmNsYXNzQm9keS5tYXRjaEFsbChuZXcgUmVnRXhwKFN0cmluZy5yYXdgXiB7Mn0oPzxtb2RpZmllcnM+JHtDTEFTU19NRU1CRVJfTU9ESUZJRVJTfSkoPzxuYW1lPlxcdyspXFxzKlxcPz9cXHMqWzo9XWAsICdnbScpKV1cbiAgICAuZmlsdGVyKChtYXRjaCkgPT4gIWlzTm9uUHVibGljTWVtYmVyKGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdtb2RpZmllcnMnKSkpXG4gICAgLm1hcCgobWF0Y2gpID0+IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICduYW1lJykpO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0RW51bU1lbWJlck5hbWVzKGVudW1Cb2R5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbLi4uZW51bUJvZHkubWF0Y2hBbGwoL14gezJ9KD88bmFtZT5cXHcrKS9nbSldLm1hcCgobWF0Y2gpID0+IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICduYW1lJykpO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0TWV0aG9kTmFtZXMoaW50ZXJmYWNlQm9keTogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gWy4uLmludGVyZmFjZUJvZHkubWF0Y2hBbGwoL14gezJ9KD88bmFtZT5cXHcrKSg/OjxbXj5dKj4pP1xcKC9nbSldLm1hcCgobWF0Y2gpID0+IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICduYW1lJykpO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0UHJvcGVydHlOYW1lcyhpbnRlcmZhY2VCb2R5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbLi4uaW50ZXJmYWNlQm9keS5tYXRjaEFsbCgvXiB7Mn0oPzxuYW1lPlxcdyspXFw/PzovZ20pXS5tYXAoKG1hdGNoKSA9PiBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnbmFtZScpKTtcbn1cblxuLy8gVGhlIGxpbmUgbnVtYmVycyBjYXJyeWluZyBhIHdpa2lsaW5rIHRoYXQgaXMgbmF2aWdhdGlvbiByYXRoZXIgdGhhbiBzYW1wbGUgdGV4dC5cbmZ1bmN0aW9uIGZpbmRXaWtpbGlua0xpbmVJbmRleGVzKGNvbnRlbnQ6IHN0cmluZyk6IG51bWJlcltdIHtcbiAgcmV0dXJuIGNvbGxlY3RMaW5lc091dHNpZGVGZW5jZXMoY29udGVudClcbiAgICAuZmlsdGVyKChub3RlTGluZSkgPT4gV0lLSUxJTktfUkVHX0VYUC50ZXN0KHN0cmlwSW5saW5lQ29kZShub3RlTGluZS5saW5lKSkpXG4gICAgLm1hcCgobm90ZUxpbmUpID0+IG5vdGVMaW5lLmluZGV4KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TGluZU51bWJlcihsaW5lSW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBgbGluZSAke1N0cmluZyhsaW5lSW5kZXggKyAxKX1gO1xufVxuXG5mdW5jdGlvbiBnZXRMaW5lc091dHNpZGVGZW5jZXMoY29udGVudDogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gY29sbGVjdExpbmVzT3V0c2lkZUZlbmNlcyhjb250ZW50KS5tYXAoKG5vdGVMaW5lKSA9PiBub3RlTGluZS5saW5lKTtcbn1cblxuLy8gV2hldGhlciB0aGUgbm90ZSdzIGZpcnN0IGNvbnRlbnQgbGluZSAoZnJvbnRtYXR0ZXIgYW5kIGJsYW5rIGxpbmVzIGFzaWRlKSBpcyBhbiBgIyBIMWAuXG5mdW5jdGlvbiBoYXNIMShjb250ZW50OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgZm9yIChjb25zdCBsaW5lIG9mIHN0cmlwRnJvbnRtYXR0ZXIoY29udGVudCkuc3BsaXQoJ1xcbicpKSB7XG4gICAgY29uc3QgdHJpbW1lZExpbmUgPSBsaW5lLnRyaW0oKTtcbiAgICBpZiAodHJpbW1lZExpbmUgPT09ICcnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcmV0dXJuIEgxX1JFR19FWFAudGVzdCh0cmltbWVkTGluZSk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBXaGV0aGVyIGEgcGxhaW4gcHJvc2UgbGluZSBhcHBlYXJzIGJlZm9yZSB0aGUgbm90ZSdzIGZpcnN0IGNvZGUgZmVuY2UuIEhlYWRpbmdzIGFyZSBub3QgcHJvc2UgXHUyMDE0IGEgbm90ZVxuLy8gVGhhdCBnb2VzIHN0cmFpZ2h0IGZyb20gaXRzIHRpdGxlIHRvIGEgYnV0dG9uIGlzIGV4YWN0bHkgdGhlIHNoYXBlIHRoaXMgY2hlY2sgcmVqZWN0cy5cbmZ1bmN0aW9uIGhhc0ludHJvUHJvc2UoY29udGVudDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGZvciAoY29uc3QgbGluZSBvZiBzdHJpcEZyb250bWF0dGVyKGNvbnRlbnQpLnNwbGl0KCdcXG4nKSkge1xuICAgIGlmIChDT0RFX0ZFTkNFX1JFR19FWFAudGVzdChsaW5lKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCB0cmltbWVkTGluZSA9IGxpbmUudHJpbSgpO1xuICAgIGlmICh0cmltbWVkTGluZSA9PT0gJycgfHwgSEVBRElOR19SRUdfRVhQLnRlc3QodHJpbW1lZExpbmUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBXaGV0aGVyIHRoZSBub3RlIG5hdmlnYXRlcyB3aXRoIGFuIE9ic2lkaWFuIGBbW3dpa2lsaW5rXV1gLiBGZW5jZWQgYmxvY2tzIGFuZCBpbmxpbmUgY29kZSBhcmUgc2FtcGxlXG4vLyBUZXh0IHJhdGhlciB0aGFuIG5hdmlnYXRpb24sIHNvIHRoZXkgYXJlIHJlbW92ZWQgYmVmb3JlIGxvb2tpbmcuXG5mdW5jdGlvbiBoYXNXaWtpbGluayhjb250ZW50OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGZpbmRXaWtpbGlua0xpbmVJbmRleGVzKGNvbnRlbnQpLmxlbmd0aCA+IDA7XG59XG5cbmZ1bmN0aW9uIGlzTm9uUHVibGljTWVtYmVyKG1vZGlmaWVyczogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAvXFxiKD86cHJpdmF0ZXxwcm90ZWN0ZWQpXFxiLy50ZXN0KG1vZGlmaWVycyk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTWVtYmVycyhrZXl3b3JkOiBzdHJpbmcsIGJvZHk6IHN0cmluZyk6IEludGVyZmFjZU1lbWJlcnMge1xuICBzd2l0Y2ggKGtleXdvcmQpIHtcbiAgICBjYXNlICdjbGFzcyc6IHtcbiAgICAgIHJldHVybiBidWlsZE1lbWJlcnMoZXh0cmFjdENsYXNzTWV0aG9kTmFtZXMoYm9keSksIGV4dHJhY3RDbGFzc1Byb3BlcnR5TmFtZXMoYm9keSkpO1xuICAgIH1cbiAgICBjYXNlICdlbnVtJzoge1xuICAgICAgcmV0dXJuIGJ1aWxkTWVtYmVycyhbXSwgZXh0cmFjdEVudW1NZW1iZXJOYW1lcyhib2R5KSk7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBidWlsZE1lbWJlcnMoZXh0cmFjdE1ldGhvZE5hbWVzKGJvZHkpLCBleHRyYWN0UHJvcGVydHlOYW1lcyhib2R5KSk7XG4gICAgfVxuICB9XG59XG5cbi8vIFJlYWRzIHRoZSBub3RlJ3MgYG9ic2lkaWFuLWRldi11dGlscyA+IGRlbW8tdmF1bHQtdmFsaWRhdGlvbiA+IGFsbG93LXdpa2lsaW5rc2AgZGVjbGFyYXRpb246IHRoZSBzdGF0ZWRcbi8vIFJlYXNvbiwgYCcnYCB3aGVuIHRoZSBrZXkgaXMgcHJlc2VudCB3aXRoIG5vdGhpbmcgYWZ0ZXIgaXQsIG9yIGBudWxsYCB3aGVuIHRoZSBub3RlIGRlY2xhcmVzIG5vdGhpbmcuXG4vLyBSZWFkIHdpdGggYSByZWd1bGFyIGV4cHJlc3Npb24gcmF0aGVyIHRoYW4gYSBZQU1MIHBhcnNlcjogaXQgaXMgb25lIGtub3duIGtleSBwYXRoLCBhbmQgZXZlcnkgcGx1Z2luIHRoYXRcbi8vIEluc3RhbGxzIHRoaXMgcGFja2FnZSB3b3VsZCBvdGhlcndpc2UgY2FycnkgYSBZQU1MIGRlcGVuZGVuY3kgZm9yIGl0LlxuZnVuY3Rpb24gcmVhZFdpa2lsaW5rQWxsb3dhbmNlUmVhc29uKGNvbnRlbnQ6IHN0cmluZyk6IG51bGwgfCBzdHJpbmcge1xuICBjb25zdCBmcm9udG1hdHRlciA9IEZST05UTUFUVEVSX1JFR19FWFAuZXhlYyhjb250ZW50KT8uWzBdO1xuICBpZiAoZnJvbnRtYXR0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJlYXNvbiA9IFdJS0lMSU5LX0FMTE9XQU5DRV9SRUdfRVhQLmV4ZWMoZnJvbnRtYXR0ZXIpPy5ncm91cHM/LlsncmVhc29uJ107XG4gIGlmIChyZWFzb24gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiByZWFzb24udHJpbSgpLnJlcGxhY2UoL14oPzxxdW90ZT5bXCInXSkoPzx2YWx1ZT5bXFxzXFxTXSopXFxrPHF1b3RlPiQvLCAnJDx2YWx1ZT4nKTtcbn1cblxuLy8gUmVhZHMgdGhlIG5vdGUncyBpbmxpbmUgYG9ic2lkaWFuLWRldi11dGlscy1kaXNhYmxlXHUyMDI2YCBkaXJlY3RpdmVzLCByZXR1cm5pbmcgd2hpY2ggbGluZXMgdGhleSBhbGxvdyBhXG4vLyBXaWtpbGluayBvbiBhbmQgZXZlcnl0aGluZyB3cm9uZyB3aXRoIHRoZW0uIEEgc3VwcHJlc3Npb24gdGhhdCBxdWlldGx5IGRvZXMgbm90aGluZyBpcyB3b3JzZSB0aGFuIG5vbmUsXG4vLyBTbyBhIG1pc3NwZWxsZWQgZGlyZWN0aXZlLCBvbmUgd2l0aCBubyByZWFzb24sIGFuIHVuY2xvc2VkIHJlZ2lvbiBhbmQgb25lIGNvdmVyaW5nIG5vIHdpa2lsaW5rIGF0IGFsbFxuLy8gQXJlIGVhY2ggcmVwb3J0ZWQgcmF0aGVyIHRoYW4gaWdub3JlZC5cbmZ1bmN0aW9uIHNjYW5XaWtpbGlua0RpcmVjdGl2ZXMoY29udGVudDogc3RyaW5nKTogV2lraWxpbmtEaXJlY3RpdmVTY2FuIHtcbiAgY29uc3Qgc3RhdGU6IFdpa2lsaW5rRGlyZWN0aXZlU2NhblN0YXRlID0ge1xuICAgIGFsbG93ZWRMaW5lSW5kZXhlczogbmV3IFNldDxudW1iZXI+KCksXG4gICAgb3BlblJlZ2lvbjogbnVsbCxcbiAgICBwZW5kaW5nTmV4dExpbmVJbmRleDogbnVsbCxcbiAgICBwcm9ibGVtczogW10sXG4gICAgd2lraWxpbmtMaW5lSW5kZXhlczogbmV3IFNldChmaW5kV2lraWxpbmtMaW5lSW5kZXhlcyhjb250ZW50KSlcbiAgfTtcblxuICBmb3IgKGNvbnN0IHsgaW5kZXgsIGxpbmUgfSBvZiBjb2xsZWN0TGluZXNPdXRzaWRlRmVuY2VzKGNvbnRlbnQpKSB7XG4gICAgY29uc3QgbWF0Y2ggPSBESVJFQ1RJVkVfUkVHX0VYUC5leGVjKGxpbmUpO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgYXBwbHlXaWtpbGlua0RpcmVjdGl2ZShzdGF0ZSwgaW5kZXgsIG1hdGNoKTtcbiAgICB9IGVsc2UgaWYgKERJUkVDVElWRV9QUk9CRV9SRUdfRVhQLnRlc3QobGluZSkpIHtcbiAgICAgIHN0YXRlLnByb2JsZW1zLnB1c2goYGEgbWFsZm9ybWVkIGRpcmVjdGl2ZSBvbiAke2Zvcm1hdExpbmVOdW1iZXIoaW5kZXgpfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBseVdpa2lsaW5rU2NhbkxpbmUoc3RhdGUsIGluZGV4LCBsaW5lKTtcbiAgICB9XG4gIH1cblxuICBpZiAoc3RhdGUub3BlblJlZ2lvbikge1xuICAgIHN0YXRlLnByb2JsZW1zLnB1c2goYGEgcmVnaW9uIG9wZW5lZCBvbiAke2Zvcm1hdExpbmVOdW1iZXIoc3RhdGUub3BlblJlZ2lvbi5saW5lSW5kZXgpfSB0aGF0IGlzIG5ldmVyIGVuYWJsZWQgYWdhaW5gKTtcbiAgfVxuICBpZiAoc3RhdGUucGVuZGluZ05leHRMaW5lSW5kZXggIT09IG51bGwpIHtcbiAgICBzdGF0ZS5wcm9ibGVtcy5wdXNoKGBhIGRpc2FibGUtbmV4dC1saW5lIG9uICR7Zm9ybWF0TGluZU51bWJlcihzdGF0ZS5wZW5kaW5nTmV4dExpbmVJbmRleCl9IGNvdmVyaW5nIG5vIHdpa2lsaW5rYCk7XG4gIH1cbiAgcmV0dXJuIHsgYWxsb3dlZExpbmVJbmRleGVzOiBzdGF0ZS5hbGxvd2VkTGluZUluZGV4ZXMsIHByb2JsZW1zOiBzdGF0ZS5wcm9ibGVtcyB9O1xufVxuXG5mdW5jdGlvbiBzdHJpcEZyb250bWF0dGVyKGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBjb250ZW50LnJlcGxhY2UoRlJPTlRNQVRURVJfUkVHX0VYUCwgJycpO1xufVxuXG5mdW5jdGlvbiBzdHJpcElubGluZUNvZGUobGluZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGxpbmUucmVwbGFjZUFsbChJTkxJTkVfQ09ERV9SRUdfRVhQLCAnJyk7XG59XG5cbi8vIEEgaGFuZC13cml0dGVuIGxpbmsgbWF5IGNvbnRhaW4gYSBiYXJlIGAlYCAob3IgYW55IG90aGVyIGludmFsaWQgcGVyY2VudC1lc2NhcGUpLCB3aGljaCBtYWtlc1xuLy8gYGRlY29kZVVSSUNvbXBvbmVudGAgdGhyb3cuIFN1Y2ggYSB0YXJnZXQgaXMgbWVhbnQgbGl0ZXJhbGx5LCBzbyBpdCBpcyB1c2VkIGFzIHdyaXR0ZW4uXG5mdW5jdGlvbiB0cnlEZWNvZGVVcmlDb21wb25lbnQodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7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TUFBSSxnQkFBZ0IsUUFBVztBQUM3QixXQUFPO0FBQUEsRUFDVDtBQUNBLFFBQU0sU0FBUywyQkFBMkIsS0FBSyxXQUFXLEdBQUcsU0FBUyxRQUFRO0FBQzlFLE1BQUksV0FBVyxRQUFXO0FBQ3hCLFdBQU87QUFBQSxFQUNUO0FBQ0EsU0FBTyxPQUFPLEtBQUssRUFBRSxRQUFRLDhDQUE4QyxVQUFVO0FBQ3ZGO0FBTUEsU0FBUyx1QkFBdUIsU0FBd0M7QUFDdEUsUUFBTSxRQUFvQztBQUFBLElBQ3hDLG9CQUFvQixvQkFBSSxJQUFZO0FBQUEsSUFDcEMsWUFBWTtBQUFBLElBQ1osc0JBQXNCO0FBQUEsSUFDdEIsVUFBVSxDQUFDO0FBQUEsSUFDWCxxQkFBcUIsSUFBSSxJQUFJLHdCQUF3QixPQUFPLENBQUM7QUFBQSxFQUMvRDtBQUVBLGFBQVcsRUFBRSxPQUFPLEtBQUssS0FBSywwQkFBMEIsT0FBTyxHQUFHO0FBQ2hFLFVBQU0sUUFBUSxrQkFBa0IsS0FBSyxJQUFJO0FBQ3pDLFFBQUksT0FBTztBQUNULDZCQUF1QixPQUFPLE9BQU8sS0FBSztBQUFBLElBQzVDLFdBQVcsd0JBQXdCLEtBQUssSUFBSSxHQUFHO0FBQzdDLFlBQU0sU0FBUyxLQUFLLDRCQUE0QixpQkFBaUIsS0FBSyxDQUFDLEVBQUU7QUFBQSxJQUMzRSxPQUFPO0FBQ0wsNEJBQXNCLE9BQU8sT0FBTyxJQUFJO0FBQUEsSUFDMUM7QUFBQSxFQUNGO0FBRUEsTUFBSSxNQUFNLFlBQVk7QUFDcEIsVUFBTSxTQUFTLEtBQUssc0JBQXNCLGlCQUFpQixNQUFNLFdBQVcsU0FBUyxDQUFDLDhCQUE4QjtBQUFBLEVBQ3RIO0FBQ0EsTUFBSSxNQUFNLHlCQUF5QixNQUFNO0FBQ3ZDLFVBQU0sU0FBUyxLQUFLLDBCQUEwQixpQkFBaUIsTUFBTSxvQkFBb0IsQ0FBQyx1QkFBdUI7QUFBQSxFQUNuSDtBQUNBLFNBQU8sRUFBRSxvQkFBb0IsTUFBTSxvQkFBb0IsVUFBVSxNQUFNLFNBQVM7QUFDbEY7QUFFQSxTQUFTLGlCQUFpQixTQUF5QjtBQUNqRCxTQUFPLFFBQVEsUUFBUSxxQkFBcUIsRUFBRTtBQUNoRDtBQUVBLFNBQVMsZ0JBQWdCLE1BQXNCO0FBQzdDLFNBQU8sS0FBSyxXQUFXLHFCQUFxQixFQUFFO0FBQ2hEO0FBSUEsU0FBUyxzQkFBc0IsT0FBdUI7QUFDcEQsTUFBSTtBQUNGLFdBQU8sbUJBQW1CLEtBQUs7QUFBQSxFQUNqQyxRQUFRO0FBQ04sV0FBTztBQUFBLEVBQ1Q7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -6,6 +6,7 @@ export * as 'cli-utils' from './cli-utils.mjs';
|
|
|
6
6
|
export * as 'code-generator' from './code-generator.mjs';
|
|
7
7
|
export * as 'commitlint-config' from './commitlint-config.mjs';
|
|
8
8
|
export * as 'demo-vault-app-json' from './demo-vault-app-json.mjs';
|
|
9
|
+
export * as 'demo-vault-buttons' from './demo-vault-buttons.mjs';
|
|
9
10
|
export * as 'demo-vault-coverage' from './demo-vault-coverage.mjs';
|
|
10
11
|
export * as 'demo-vault' from './demo-vault.mjs';
|
|
11
12
|
export * as 'env-toggle' from './env-toggle.mjs';
|
|
@@ -28,6 +28,7 @@ import * as cli_utils from "./cli-utils.mjs";
|
|
|
28
28
|
import * as code_generator from "./code-generator.mjs";
|
|
29
29
|
import * as commitlint_config from "./commitlint-config.mjs";
|
|
30
30
|
import * as demo_vault_app_json from "./demo-vault-app-json.mjs";
|
|
31
|
+
import * as demo_vault_buttons from "./demo-vault-buttons.mjs";
|
|
31
32
|
import * as demo_vault_coverage from "./demo-vault-coverage.mjs";
|
|
32
33
|
import * as demo_vault from "./demo-vault.mjs";
|
|
33
34
|
import * as env_toggle from "./env-toggle.mjs";
|
|
@@ -56,6 +57,7 @@ export {
|
|
|
56
57
|
commitlint_config as "commitlint-config",
|
|
57
58
|
demo_vault as "demo-vault",
|
|
58
59
|
demo_vault_app_json as "demo-vault-app-json",
|
|
60
|
+
demo_vault_buttons as "demo-vault-buttons",
|
|
59
61
|
demo_vault_coverage as "demo-vault-coverage",
|
|
60
62
|
env_toggle as "env-toggle",
|
|
61
63
|
exec,
|
|
@@ -75,4 +77,4 @@ export {
|
|
|
75
77
|
version,
|
|
76
78
|
warnings_as_errors as "warnings-as-errors"
|
|
77
79
|
};
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdidWlsZCcgZnJvbSAnLi9idWlsZC50cyc7XG5leHBvcnQgKiBhcyAnYnVuZGxlcnMnIGZyb20gJy4vYnVuZGxlcnMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ2NoZWNrLXByb2plY3QtdHlwZXMnIGZyb20gJy4vY2hlY2stcHJvamVjdC10eXBlcy50cyc7XG5leHBvcnQgKiBhcyAnY2xpLXV0aWxzJyBmcm9tICcuL2NsaS11dGlscy50cyc7XG5leHBvcnQgKiBhcyAnY29kZS1nZW5lcmF0b3InIGZyb20gJy4vY29kZS1nZW5lcmF0b3IudHMnO1xuZXhwb3J0ICogYXMgJ2NvbW1pdGxpbnQtY29uZmlnJyBmcm9tICcuL2NvbW1pdGxpbnQtY29uZmlnLnRzJztcbmV4cG9ydCAqIGFzICdkZW1vLXZhdWx0LWFwcC1qc29uJyBmcm9tICcuL2RlbW8tdmF1bHQtYXBwLWpzb24udHMnO1xuZXhwb3J0ICogYXMgJ2RlbW8tdmF1bHQtYnV0dG9ucycgZnJvbSAnLi9kZW1vLXZhdWx0LWJ1dHRvbnMudHMnO1xuZXhwb3J0ICogYXMgJ2RlbW8tdmF1bHQtY292ZXJhZ2UnIGZyb20gJy4vZGVtby12YXVsdC1jb3ZlcmFnZS50cyc7XG5leHBvcnQgKiBhcyAnZGVtby12YXVsdCcgZnJvbSAnLi9kZW1vLXZhdWx0LnRzJztcbmV4cG9ydCAqIGFzICdlbnYtdG9nZ2xlJyBmcm9tICcuL2Vudi10b2dnbGUudHMnO1xuZXhwb3J0ICogYXMgJ2V4ZWMnIGZyb20gJy4vZXhlYy50cyc7XG5leHBvcnQgKiBhcyAnZm9ybWF0dGVycycgZnJvbSAnLi9mb3JtYXR0ZXJzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICdmcycgZnJvbSAnLi9mcy50cyc7XG5leHBvcnQgKiBhcyAnZ2l0JyBmcm9tICcuL2dpdC50cyc7XG5leHBvcnQgKiBhcyAnanNvbicgZnJvbSAnLi9qc29uLnRzJztcbmV4cG9ydCAqIGFzICdsaW50ZXJzJyBmcm9tICcuL2xpbnRlcnMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ25hbm8tc3RhZ2VkLWNvbmZpZycgZnJvbSAnLi9uYW5vLXN0YWdlZC1jb25maWcudHMnO1xuZXhwb3J0ICogYXMgJ25wbS1wdWJsaXNoJyBmcm9tICcuL25wbS1wdWJsaXNoLnRzJztcbmV4cG9ydCAqIGFzICducG0tcnVuJyBmcm9tICcuL25wbS1ydW4udHMnO1xuZXhwb3J0ICogYXMgJ25wbScgZnJvbSAnLi9ucG0udHMnO1xuZXhwb3J0ICogYXMgJ29ic2lkaWFuLWRldi11dGlscy1yZXBvLXBhdGhzJyBmcm9tICcuL29ic2lkaWFuLWRldi11dGlscy1yZXBvLXBhdGhzLnRzJztcbmV4cG9ydCAqIGFzICdyb290JyBmcm9tICcuL3Jvb3QudHMnO1xuZXhwb3J0ICogYXMgJ3Rlc3QtcnVubmVycycgZnJvbSAnLi90ZXN0LXJ1bm5lcnMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ3ZhbGlkYXRlLWRlY2xhcmF0aW9ucycgZnJvbSAnLi92YWxpZGF0ZS1kZWNsYXJhdGlvbnMudHMnO1xuZXhwb3J0ICogYXMgJ3ZlcnNpb24nIGZyb20gJy4vdmVyc2lvbi50cyc7XG5leHBvcnQgKiBhcyAnd2FybmluZ3MtYXMtZXJyb3JzJyBmcm9tICcuL3dhcm5pbmdzLWFzLWVycm9ycy50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLFlBQVksV0FBYTtBQUN6QixZQUFZLGNBQWdCO0FBQzVCLFlBQVlBLHlCQUEyQjtBQUN2QyxZQUFZQyxlQUFpQjtBQUM3QixZQUFZQyxvQkFBc0I7QUFDbEMsWUFBWUMsdUJBQXlCO0FBQ3JDLFlBQVlDLHlCQUEyQjtBQUN2QyxZQUFZQyx3QkFBMEI7QUFDdEMsWUFBWUMseUJBQTJCO0FBQ3ZDLFlBQVlDLGdCQUFrQjtBQUM5QixZQUFZQyxnQkFBa0I7QUFDOUIsWUFBWSxVQUFZO0FBQ3hCLFlBQVksZ0JBQWtCO0FBQzlCLFlBQVksUUFBVTtBQUN0QixZQUFZLFNBQVc7QUFDdkIsWUFBWSxVQUFZO0FBQ3hCLFlBQVksYUFBZTtBQUMzQixZQUFZQyx3QkFBMEI7QUFDdEMsWUFBWUMsaUJBQW1CO0FBQy9CLFlBQVlDLGFBQWU7QUFDM0IsWUFBWSxTQUFXO0FBQ3ZCLFlBQVlDLG1DQUFxQztBQUNqRCxZQUFZLFVBQVk7QUFDeEIsWUFBWUMsa0JBQW9CO0FBQ2hDLFlBQVlDLDJCQUE2QjtBQUN6QyxZQUFZLGFBQWU7QUFDM0IsWUFBWUMsd0JBQTBCOyIsCiAgIm5hbWVzIjogWyJjaGVjay1wcm9qZWN0LXR5cGVzIiwgImNsaS11dGlscyIsICJjb2RlLWdlbmVyYXRvciIsICJjb21taXRsaW50LWNvbmZpZyIsICJkZW1vLXZhdWx0LWFwcC1qc29uIiwgImRlbW8tdmF1bHQtYnV0dG9ucyIsICJkZW1vLXZhdWx0LWNvdmVyYWdlIiwgImRlbW8tdmF1bHQiLCAiZW52LXRvZ2dsZSIsICJuYW5vLXN0YWdlZC1jb25maWciLCAibnBtLXB1Ymxpc2giLCAibnBtLXJ1biIsICJvYnNpZGlhbi1kZXYtdXRpbHMtcmVwby1wYXRocyIsICJ0ZXN0LXJ1bm5lcnMiLCAidmFsaWRhdGUtZGVjbGFyYXRpb25zIiwgIndhcm5pbmdzLWFzLWVycm9ycyJdCn0K
|
|
@@ -68,6 +68,11 @@ export declare class ObsidianPluginVitestConfigContext {
|
|
|
68
68
|
readonly bigTimeoutInMilliseconds = 30000;
|
|
69
69
|
/**
|
|
70
70
|
* The coverage `exclude` globs. Push onto it to drop more files from the coverage report.
|
|
71
|
+
*
|
|
72
|
+
* Declaration files are excluded by default because the coverage `include` below is `src/**\/*.ts`,
|
|
73
|
+
* which a `.d.ts` matches. A declaration file emits no runtime code, so it reports 0% and no test can
|
|
74
|
+
* ever raise it — a plugin that grows one under `src/` silently loses its 100% gate, and the usual
|
|
75
|
+
* remedy of an inline `v8 ignore` comment does not apply to a type-only file.
|
|
71
76
|
*/
|
|
72
77
|
readonly coverageExclude: string[];
|
|
73
78
|
/**
|
|
@@ -29,6 +29,7 @@ const HOOK_TIMEOUT_MULTIPLIER = 4;
|
|
|
29
29
|
const PERFORMANCE_TIMEOUT_IN_MILLISECONDS = 6e5;
|
|
30
30
|
const ANDROID_TEST_FILES = "src/**/*.android.integration.test.ts";
|
|
31
31
|
const CROSS_PLATFORM_TEST_FILES = "src/**/*.cross-platform.integration.test.ts";
|
|
32
|
+
const DECLARATION_FILES = "src/**/*.d.ts";
|
|
32
33
|
const DESKTOP_PERFORMANCE_TEST_FILES = "src/**/*.desktop-performance.integration.test.ts";
|
|
33
34
|
const DESKTOP_TEST_FILES = "src/**/*.desktop.integration.test.ts";
|
|
34
35
|
const INTEGRATION_TEST_FILES = "src/**/*.integration.test.ts";
|
|
@@ -73,8 +74,13 @@ class ObsidianPluginVitestConfigContext {
|
|
|
73
74
|
bigTimeoutInMilliseconds = BIG_TIMEOUT_IN_MILLISECONDS;
|
|
74
75
|
/**
|
|
75
76
|
* The coverage `exclude` globs. Push onto it to drop more files from the coverage report.
|
|
77
|
+
*
|
|
78
|
+
* Declaration files are excluded by default because the coverage `include` below is `src/**\/*.ts`,
|
|
79
|
+
* which a `.d.ts` matches. A declaration file emits no runtime code, so it reports 0% and no test can
|
|
80
|
+
* ever raise it — a plugin that grows one under `src/` silently loses its 100% gate, and the usual
|
|
81
|
+
* remedy of an inline `v8 ignore` comment does not apply to a type-only file.
|
|
76
82
|
*/
|
|
77
|
-
coverageExclude = [UNIT_TEST_FILES];
|
|
83
|
+
coverageExclude = [UNIT_TEST_FILES, DECLARATION_FILES];
|
|
78
84
|
/**
|
|
79
85
|
* The `integration-tests:desktop` project, running the desktop-only and cross-platform suites against a
|
|
80
86
|
* real desktop Obsidian over CDP.
|
|
@@ -207,4 +213,4 @@ export {
|
|
|
207
213
|
ObsidianPluginVitestConfigContext,
|
|
208
214
|
defineObsidianPluginVitestConfig
|
|
209
215
|
};
|
|
210
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy90ZXN0LXJ1bm5lcnMvdml0ZXN0LWNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFNoYXJlZCB2aXRlc3QgY29uZmlndXJhdGlvbiBmb3IgT2JzaWRpYW4gcGx1Z2lucy5cbiAqXG4gKiBFdmVyeSBwbHVnaW4gaW4gdGhlIHdvcmtzcGFjZSBkZWNsYXJlcyB0aGUgc2FtZSBmaXZlIHZpdGVzdCBwcm9qZWN0cyBcdTIwMTQgYHVuaXQtdGVzdHNgIHBsdXMgdGhlXG4gKiBgaW50ZWdyYXRpb24tdGVzdHM6e25vLWFwcCxkZXNrdG9wLGRlc2t0b3AtcGVyZm9ybWFuY2UsYW5kcm9pZH1gIGZhbWlseSBcdTIwMTQgd2l0aCB0aGUgc2FtZSB0aW1lb3V0cyxcbiAqIGBzZXR1cEZpbGVzYCwgYW5kIGBnbG9iYWxTZXR1cGAgd2lyaW5nLiBNYWludGFpbmluZyB0aGF0IHBlciByZXBvIG1lYW5zIGEgY29udmVudGlvbiBjaGFuZ2UgY29zdHMgb25lXG4gKiBuZWFyLWlkZW50aWNhbCBlZGl0IHBlciBwbHVnaW4sIGFuZCBhbnkgcmVwbyB0aGF0IGlzIG1pc3NlZCBkcmlmdHMgc2lsZW50bHkuIFRoaXMgbW9kdWxlIG93bnMgdGhhdFxuICogY29uZmlndXJhdGlvbiBvbmNlLCBzbyBhIHBsdWdpbidzIGBzY3JpcHRzL3ZpdGVzdC1jb25maWcudHNgIGNvbGxhcHNlcyB0byBhIHNpbmdsZSBjYWxsLlxuICpcbiAqIFRoZSBzZWFtIG1pcnJvcnMge0BsaW5rIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL29ic2lkaWFuLWRldi11dGlscyB8IHRoZSBFU0xpbnQgb25lfVxuICogKGBkZWZpbmVFc2xpbnRDb25maWdzYCk6IHRoZSBmYWN0b3J5IGJ1aWxkcyBhIGNvbnRleHQgaG9sZGluZyB0aGUgc3RhbmRhcmQgcHJvamVjdHMsIHRoZSBjYWxsZXIgZWRpdHNcbiAqIGl0IGluIHBsYWNlIHRocm91Z2gge0BsaW5rIERlZmluZU9ic2lkaWFuUGx1Z2luVml0ZXN0Q29uZmlnT3B0aW9ucy5lZGl0Q29udGV4dH0sIGFuZCBhcHBlbmRzIGFueVxuICogcHJvamVjdCB0aGUgYmFzZSBkb2VzIG5vdCBrbm93IGFib3V0IHRocm91Z2hcbiAqIHtAbGluayBEZWZpbmVPYnNpZGlhblBsdWdpblZpdGVzdENvbmZpZ09wdGlvbnMuY3VzdG9tUHJvamVjdHN9LlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgVGVzdFByb2plY3RDb25maWd1cmF0aW9uLFxuICBUZXN0UHJvamVjdElubGluZUNvbmZpZ3VyYXRpb24sXG4gIFZpdGVVc2VyQ29uZmlnXG59IGZyb20gJ3ZpdGVzdC9jb25maWcnO1xuXG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSAndml0ZXN0L2NvbmZpZyc7XG5cbi8qKlxuICogVGhlIGB0ZXN0YCBzZWN0aW9uIG9mIGEgc2luZ2xlIHZpdGVzdCBwcm9qZWN0IGVudHJ5LlxuICovXG5leHBvcnQgdHlwZSBPYnNpZGlhblBsdWdpblZpdGVzdFByb2plY3RDb25maWcgPSBOb25OdWxsYWJsZTxUZXN0UHJvamVjdElubGluZUNvbmZpZ3VyYXRpb25bJ3Rlc3QnXT47XG5cbmNvbnN0IEFORFJPSURfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSA2MF8wMDA7XG5jb25zdCBCSUdfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMF8wMDA7XG5jb25zdCBIT09LX1RJTUVPVVRfTVVMVElQTElFUiA9IDQ7XG5jb25zdCBQRVJGT1JNQU5DRV9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDYwMF8wMDA7XG5cbmNvbnN0IEFORFJPSURfVEVTVF9GSUxFUyA9ICdzcmMvKiovKi5hbmRyb2lkLmludGVncmF0aW9uLnRlc3QudHMnO1xuY29uc3QgQ1JPU1NfUExBVEZPUk1fVEVTVF9GSUxFUyA9ICdzcmMvKiovKi5jcm9zcy1wbGF0Zm9ybS5pbnRlZ3JhdGlvbi50ZXN0LnRzJztcbmNvbnN0IERFU0tUT1BfUEVSRk9STUFOQ0VfVEVTVF9GSUxFUyA9ICdzcmMvKiovKi5kZXNrdG9wLXBlcmZvcm1hbmNlLmludGVncmF0aW9uLnRlc3QudHMnO1xuY29uc3QgREVTS1RPUF9URVNUX0ZJTEVTID0gJ3NyYy8qKi8qLmRlc2t0b3AuaW50ZWdyYXRpb24udGVzdC50cyc7XG5jb25zdCBJTlRFR1JBVElPTl9URVNUX0ZJTEVTID0gJ3NyYy8qKi8qLmludGVncmF0aW9uLnRlc3QudHMnO1xuY29uc3QgTk9fQVBQX1RFU1RfRklMRVMgPSAnc3JjLyoqLyoubm8tYXBwLmludGVncmF0aW9uLnRlc3QudHMnO1xuY29uc3QgVU5JVF9URVNUX0ZJTEVTID0gJ3NyYy8qKi8qLnRlc3QudHMnO1xuXG5jb25zdCBPQlNJRElBTl9WRVJTSU9OX0VOVl9WQVJJQUJMRV9OQU1FID0gJ09CU0lESUFOX1ZFUlNJT04nO1xuY29uc3QgU0hBUkVEX0VYQ0xVREUgPSBbJ25vZGVfbW9kdWxlcycsICdkaXN0J107XG5cbi8qKlxuICogVGhlIG9wdGlvbnMgZm9yIGRlZmluaW5nIGEgcGx1Z2luJ3Mgdml0ZXN0IGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVmaW5lT2JzaWRpYW5QbHVnaW5WaXRlc3RDb25maWdPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCBidWlsZHMgcHJvamVjdHMgdGhlIGJhc2UgY29uZmlndXJhdGlvbiBkb2VzIG5vdCBrbm93IGFib3V0LCBzdWNoIGFzIGEgcGx1Z2luJ3Mgb3duXG4gICAqIGBpbnRlZ3JhdGlvbi10ZXN0czpkZW1vLXZhdWx0YCBwcm9qZWN0LiBUaGUgcmV0dXJuZWQgcHJvamVjdHMgYXJlIGFwcGVuZGVkIGFmdGVyIHRoZSBzdGFuZGFyZCBmaXZlLlxuICAgKlxuICAgKiBAcGFyYW0gY29udGV4dCAtIFRoZSB2aXRlc3QgY29uZmlndXJhdGlvbiBjb250ZXh0LlxuICAgKiBAcmV0dXJucyBUaGUgZXh0cmEgcHJvamVjdHMuXG4gICAqL1xuICBjdXN0b21Qcm9qZWN0cz8oY29udGV4dDogT2JzaWRpYW5QbHVnaW5WaXRlc3RDb25maWdDb250ZXh0KTogVGVzdFByb2plY3RDb25maWd1cmF0aW9uW107XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCBlZGl0cyB0aGUgdml0ZXN0IGNvbmZpZ3VyYXRpb24gY29udGV4dCBiZWZvcmUgaXQgaXMgYXNzZW1ibGVkIGludG8gYSBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gY29udGV4dCAtIFRoZSB2aXRlc3QgY29uZmlndXJhdGlvbiBjb250ZXh0LlxuICAgKi9cbiAgZWRpdENvbnRleHQ/KGNvbnRleHQ6IE9ic2lkaWFuUGx1Z2luVml0ZXN0Q29uZmlnQ29udGV4dCk6IHZvaWQ7XG59XG5cbi8qKlxuICogVGhlIGNvbnRleHQgZm9yIGRlZmluaW5nIGEgcGx1Z2luJ3Mgdml0ZXN0IGNvbmZpZ3VyYXRpb24uXG4gKlxuICogRXZlcnkgbWVtYmVyIGlzIGxpdmU6IHRoZSBhcnJheXMgYW5kIG9iamVjdHMgaXQgZXhwb3NlcyBhcmUgdGhlIHZlcnkgb25lcyB0aGUgYXNzZW1ibGVkIGNvbmZpZ3VyYXRpb25cbiAqIGlzIGJ1aWx0IGZyb20sIHNvIGVkaXRpbmcgdGhlbSBpbiBwbGFjZSB0aHJvdWdoXG4gKiB7QGxpbmsgRGVmaW5lT2JzaWRpYW5QbHVnaW5WaXRlc3RDb25maWdPcHRpb25zLmVkaXRDb250ZXh0fSBpcyB3aGF0IGN1c3RvbWl6ZXMgdGhlIHJlc3VsdC5cbiAqL1xuZXhwb3J0IGNsYXNzIE9ic2lkaWFuUGx1Z2luVml0ZXN0Q29uZmlnQ29udGV4dCB7XG4gIC8qKlxuICAgKiBUaGUgYGludGVncmF0aW9uLXRlc3RzOmFuZHJvaWRgIHByb2plY3QsIHJ1bm5pbmcgdGhlIG1vYmlsZS1vbmx5IGFuZCBjcm9zcy1wbGF0Zm9ybSBzdWl0ZXMgYWdhaW5zdCBhblxuICAgKiBBbmRyb2lkIGVtdWxhdG9yIHRocm91Z2ggQXBwaXVtLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFuZHJvaWQ6IE9ic2lkaWFuUGx1Z2luVml0ZXN0UHJvamVjdENvbmZpZyA9IHtcbiAgICBlbnZpcm9ubWVudDogJ25vZGUnLFxuICAgIGVudmlyb25tZW50T3B0aW9uczoge1xuICAgICAgb2JzaWRpYW5UcmFuc3BvcnQ6IHtcbiAgICAgICAgYXBwaXVtVXJsOiAnaHR0cDovL2xvY2FsaG9zdDo0NzIzJyxcbiAgICAgICAgYXZkTmFtZTogJ29ic2lkaWFuX3Rlc3QnLFxuICAgICAgICB0eXBlOiAnb2JzaWRpYW4tYW5kcm9pZC1hcHBpdW0nXG4gICAgICB9XG4gICAgfSxcbiAgICBmaWxlUGFyYWxsZWxpc206IGZhbHNlLFxuICAgIGdsb2JhbFNldHVwOiBbJ29ic2lkaWFuLWludGVncmF0aW9uLXRlc3Rpbmcvdml0ZXN0LWdsb2JhbC1zZXR1cC1wbHVnaW4nXSxcbiAgICBob29rVGltZW91dDogQU5EUk9JRF9USU1FT1VUX0lOX01JTExJU0VDT05EUyAqIEhPT0tfVElNRU9VVF9NVUxUSVBMSUVSLFxuICAgIGluY2x1ZGU6IFtBTkRST0lEX1RFU1RfRklMRVMsIENST1NTX1BMQVRGT1JNX1RFU1RfRklMRVNdLFxuICAgIG5hbWU6ICdpbnRlZ3JhdGlvbi10ZXN0czphbmRyb2lkJyxcbiAgICBzZXR1cEZpbGVzOiBbJ29ic2lkaWFuLWludGVncmF0aW9uLXRlc3Rpbmcvdml0ZXN0LXNldHVwJ10sXG4gICAgdGVzdFRpbWVvdXQ6IEFORFJPSURfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFNcbiAgfTtcblxuICAvKipcbiAgICogVGhlIHBlci10ZXN0IGJ1ZGdldCBvZiB0aGUgQW5kcm9pZCBpbnRlZ3JhdGlvbiBwcm9qZWN0LCBpbiBtaWxsaXNlY29uZHMuIEJvb3RpbmcgYW4gZW11bGF0b3IgYW5kXG4gICAqIGRyaXZpbmcgaXQgb3ZlciBBcHBpdW0gaXMgc2xvd2VyIHRoYW4gdGhlIGRlc2t0b3AgcGF0aCwgaGVuY2UgaXRzIG93biBjb25zdGFudC5cbiAgICpcbiAgICogQGRlZmF1bHQgYDYwMDAwYFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFuZHJvaWRUaW1lb3V0SW5NaWxsaXNlY29uZHMgPSBBTkRST0lEX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuXG4gIC8qKlxuICAgKiBUaGUgcGVyLXRlc3QgYnVkZ2V0IG9mIHRoZSByZWd1bGFyIGludGVncmF0aW9uIHByb2plY3RzLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAzMDAwMGBcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBiaWdUaW1lb3V0SW5NaWxsaXNlY29uZHMgPSBCSUdfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG5cbiAgLyoqXG4gICAqIFRoZSBjb3ZlcmFnZSBgZXhjbHVkZWAgZ2xvYnMuIFB1c2ggb250byBpdCB0byBkcm9wIG1vcmUgZmlsZXMgZnJvbSB0aGUgY292ZXJhZ2UgcmVwb3J0LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvdmVyYWdlRXhjbHVkZTogc3RyaW5nW10gPSBbVU5JVF9URVNUX0ZJTEVTXTtcblxuICAvKipcbiAgICogVGhlIGBpbnRlZ3JhdGlvbi10ZXN0czpkZXNrdG9wYCBwcm9qZWN0LCBydW5uaW5nIHRoZSBkZXNrdG9wLW9ubHkgYW5kIGNyb3NzLXBsYXRmb3JtIHN1aXRlcyBhZ2FpbnN0IGFcbiAgICogcmVhbCBkZXNrdG9wIE9ic2lkaWFuIG92ZXIgQ0RQLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRlc2t0b3A6IE9ic2lkaWFuUGx1Z2luVml0ZXN0UHJvamVjdENvbmZpZyA9IHtcbiAgICBlbnZpcm9ubWVudDogJ25vZGUnLFxuICAgIGZpbGVQYXJhbGxlbGlzbTogZmFsc2UsXG4gICAgZ2xvYmFsU2V0dXA6IFsnb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZy92aXRlc3QtZ2xvYmFsLXNldHVwLXBsdWdpbiddLFxuICAgIGhvb2tUaW1lb3V0OiBCSUdfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgKiBIT09LX1RJTUVPVVRfTVVMVElQTElFUixcbiAgICBpbmNsdWRlOiBbREVTS1RPUF9URVNUX0ZJTEVTLCBDUk9TU19QTEFURk9STV9URVNUX0ZJTEVTXSxcbiAgICBuYW1lOiAnaW50ZWdyYXRpb24tdGVzdHM6ZGVza3RvcCcsXG4gICAgc2V0dXBGaWxlczogWydvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nL3ZpdGVzdC1zZXR1cCddLFxuICAgIHRlc3RUaW1lb3V0OiBCSUdfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFNcbiAgfTtcblxuICAvKipcbiAgICogVGhlIGBpbnRlZ3JhdGlvbi10ZXN0czpkZXNrdG9wLXBlcmZvcm1hbmNlYCBwcm9qZWN0LCBydW5uaW5nIHRoZSBhdC1zY2FsZSBzdWl0ZXMuIEl0IGlzIGRlY2xhcmVkIGZvclxuICAgKiBldmVyeSBwbHVnaW4gZXZlbiB3aGVuIHRoZXJlIGlzIG5vIHN1Y2ggc3VpdGUgeWV0IFx1MjAxNCBgcGFzc1dpdGhOb1Rlc3RzYCBtYWtlcyBhbiBlbXB0eSBwcm9qZWN0IGZyZWUsXG4gICAqIGFuZCB0aGUgbWF0Y2hpbmcgYHRlc3Q6aW50ZWdyYXRpb246ZGVza3RvcDpwZXJmb3JtYW5jZWAgc2NyaXB0IGV4aXN0cyBmbGVldC13aWRlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRlc2t0b3BQZXJmb3JtYW5jZTogT2JzaWRpYW5QbHVnaW5WaXRlc3RQcm9qZWN0Q29uZmlnID0ge1xuICAgIGVudmlyb25tZW50OiAnbm9kZScsXG4gICAgZmlsZVBhcmFsbGVsaXNtOiBmYWxzZSxcbiAgICBnbG9iYWxTZXR1cDogWydvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nL3ZpdGVzdC1nbG9iYWwtc2V0dXAtcGx1Z2luJ10sXG4gICAgaG9va1RpbWVvdXQ6IFBFUkZPUk1BTkNFX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTLFxuICAgIGluY2x1ZGU6IFtERVNLVE9QX1BFUkZPUk1BTkNFX1RFU1RfRklMRVNdLFxuICAgIG5hbWU6ICdpbnRlZ3JhdGlvbi10ZXN0czpkZXNrdG9wLXBlcmZvcm1hbmNlJyxcbiAgICBzZXR1cEZpbGVzOiBbJ29ic2lkaWFuLWludGVncmF0aW9uLXRlc3Rpbmcvdml0ZXN0LXNldHVwJ10sXG4gICAgdGVzdFRpbWVvdXQ6IFBFUkZPUk1BTkNFX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTXG4gIH07XG5cbiAgLyoqXG4gICAqIFRoZSBtdWx0aXBsaWVyIGFwcGxpZWQgdG8gYSBwcm9qZWN0J3MgdGVzdCBidWRnZXQgdG8gZ2V0IGl0cyBob29rIGJ1ZGdldC4gQSBob29rIHR5cGljYWxseSBwb3B1bGF0ZXNcbiAgICogYW5kIG9wZW5zIGEgdmF1bHQsIHNvIGl0IG5lZWRzIHNldmVyYWwgdGltZXMgd2hhdCBhIHNpbmdsZSB0ZXN0IGRvZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGA0YFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGhvb2tUaW1lb3V0TXVsdGlwbGllciA9IEhPT0tfVElNRU9VVF9NVUxUSVBMSUVSO1xuXG4gIC8qKlxuICAgKiBUaGUgYGludGVncmF0aW9uLXRlc3RzOm5vLWFwcGAgcHJvamVjdCwgcnVubmluZyB0aGUgc3VpdGVzIHRoYXQgbmVlZCBubyBPYnNpZGlhbiBpbnN0YW5jZSBhdCBhbGwuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbm9BcHA6IE9ic2lkaWFuUGx1Z2luVml0ZXN0UHJvamVjdENvbmZpZyA9IHtcbiAgICBlbnZpcm9ubWVudDogJ25vZGUnLFxuICAgIGZpbGVQYXJhbGxlbGlzbTogZmFsc2UsXG4gICAgaG9va1RpbWVvdXQ6IEJJR19USU1FT1VUX0lOX01JTExJU0VDT05EUyAqIEhPT0tfVElNRU9VVF9NVUxUSVBMSUVSLFxuICAgIGluY2x1ZGU6IFtOT19BUFBfVEVTVF9GSUxFU10sXG4gICAgbmFtZTogJ2ludGVncmF0aW9uLXRlc3RzOm5vLWFwcCcsXG4gICAgdGVzdFRpbWVvdXQ6IEJJR19USU1FT1VUX0lOX01JTExJU0VDT05EU1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaGUgcGVyLXRlc3QgYnVkZ2V0IG9mIHRoZSBwZXJmb3JtYW5jZSBpbnRlZ3JhdGlvbiBwcm9qZWN0LCBpbiBtaWxsaXNlY29uZHMuIEEgcGVyZm9ybWFuY2UgdmF1bHQgaXNcbiAgICogcHJlLXBvcHVsYXRlZCB3aXRoIHRlbnMgb2YgdGhvdXNhbmRzIG9mIG5vdGVzIGJlZm9yZSBPYnNpZGlhbiBvcGVucywgc28gYm90aCBpdHMgc2V0dXAgYW5kIGl0cyB0ZXN0c1xuICAgKiBuZWVkIGZhciBtb3JlIHRpbWUgdGhhbiB0aGUgcmVndWxhciBpbnRlZ3JhdGlvbiBwcm9qZWN0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgYDYwMDAwMGBcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwZXJmb3JtYW5jZVRpbWVvdXRJbk1pbGxpc2Vjb25kcyA9IFBFUkZPUk1BTkNFX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuXG4gIC8qKlxuICAgKiBUaGUgYHVuaXQtdGVzdHNgIHByb2plY3QsIHJ1bm5pbmcgdGhlIG1vY2tlZC1PYnNpZGlhbiBzdWl0ZXMgaW4gYGpzZG9tYC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1bml0VGVzdHM6IE9ic2lkaWFuUGx1Z2luVml0ZXN0UHJvamVjdENvbmZpZyA9IHtcbiAgICBlbnZpcm9ubWVudDogJ2pzZG9tJyxcbiAgICBleGNsdWRlOiBbLi4uU0hBUkVEX0VYQ0xVREUsIElOVEVHUkFUSU9OX1RFU1RfRklMRVNdLFxuICAgIGV4ZWNBcmd2OiBbJy0tbm8td2Vic3RvcmFnZSddLFxuICAgIGluY2x1ZGU6IFtVTklUX1RFU1RfRklMRVNdLFxuICAgIG5hbWU6ICd1bml0LXRlc3RzJyxcbiAgICBzZXJ2ZXI6IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25hbWUtcmVwbGFjZW1lbnRzIC0tIGBkZXBzYCBpcyBkZWNsYXJlZCBieSBgdml0ZXN0YDsgcmVuYW1pbmcgaXQgaGVyZSB3b3VsZCBub3QgbWF0Y2ggdGhlIEFQSS5cbiAgICAgIGRlcHM6IHtcbiAgICAgICAgaW5saW5lOiBbJ0BvYnNpZGlhbi10eXBpbmdzJywgJ29ic2lkaWFuLWRldi11dGlscyddXG4gICAgICB9XG4gICAgfSxcbiAgICBzZXR1cEZpbGVzOiBbXG4gICAgICAnb2JzaWRpYW4tdGVzdC1tb2Nrcy92aXRlc3Qtc2V0dXAnLFxuICAgICAgJ29ic2lkaWFuLXRlc3QtbW9ja3Mvb2JzaWRpYW4tdHlwaW5ncy92aXRlc3Qtc2V0dXAnLFxuICAgICAgJ29ic2lkaWFuLWRldi11dGlscy92aXRlc3Qtc2V0dXAnXG4gICAgXVxuICB9O1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGNvbnRleHQgc2VlZGVkIHdpdGggdGhlIHN0YW5kYXJkIHByb2plY3RzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG9ic2lkaWFuVmVyc2lvbiA9IHByb2Nlc3MuZW52W09CU0lESUFOX1ZFUlNJT05fRU5WX1ZBUklBQkxFX05BTUVdO1xuXG4gICAgLypcbiAgICAgKiBTdXBwb3J0IGlzIHRoZSByYW5nZSBbbGF0ZXN0IHB1YmxpYywgbGF0ZXN0IGNhdGFseXN0XSBhbmQgQk9USCBlbmRzIG11c3Qgd29yayAoRzk5KSwgc28gdGhlIHZlcnNpb25cbiAgICAgKiBpcyBhIGtub2IgcmF0aGVyIHRoYW4gYSBjb25zdGFudC4gVGhlIGtleSBpcyBhZGRlZCBPTkxZIHdoZW4gdGhlIHZhcmlhYmxlIGlzIHNldDogYW4gZXhwbGljaXRcbiAgICAgKiBgb2JzaWRpYW5WZXJzaW9uYCBtYWtlcyB0aGUgaGFybmVzcyByZXNvbHZlIGEgY29uY3JldGUgdmVyc2lvbiBhbmQgc3dhcCB0aGUgYXNhciwgd2hpY2ggaXMgbm90IHdoYXRcbiAgICAgKiBhbiB1bnBpbm5lZCBydW4gZG9lcywgc28gc2VlZGluZyBhIGRlZmF1bHQgaGVyZSB3b3VsZCBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIGV2ZXJ5IHBsdWdpbi5cbiAgICAgKi9cbiAgICBpZiAob2JzaWRpYW5WZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZGVza3RvcC5lbnZpcm9ubWVudE9wdGlvbnMgPSB7XG4gICAgICAgIG9ic2lkaWFuVHJhbnNwb3J0OiB7XG4gICAgICAgICAgb2JzaWRpYW5WZXJzaW9uLFxuICAgICAgICAgIHR5cGU6ICdvYnNpZGlhbi1jZHAnXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGUgdml0ZXN0IGNvbmZpZ3VyYXRpb24gZm9yIGFuIE9ic2lkaWFuIHBsdWdpbi5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciBkZWZpbmluZyB0aGUgY29uZmlndXJhdGlvbi5cbiAqIEByZXR1cm5zIFRoZSB2aXRlc3QgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZU9ic2lkaWFuUGx1Z2luVml0ZXN0Q29uZmlnKG9wdGlvbnM6IERlZmluZU9ic2lkaWFuUGx1Z2luVml0ZXN0Q29uZmlnT3B0aW9ucyA9IHt9KTogVml0ZVVzZXJDb25maWcge1xuICBjb25zdCBjb250ZXh0ID0gbmV3IE9ic2lkaWFuUGx1Z2luVml0ZXN0Q29uZmlnQ29udGV4dCgpO1xuXG4gIGlmIChvcHRpb25zLmVkaXRDb250ZXh0KSB7XG4gICAgb3B0aW9ucy5lZGl0Q29udGV4dChjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IGN1c3RvbVByb2plY3RzID0gb3B0aW9ucy5jdXN0b21Qcm9qZWN0cz8uKGNvbnRleHQpID8/IFtdO1xuXG4gIHJldHVybiBkZWZpbmVDb25maWcoe1xuICAgIHRlc3Q6IHtcbiAgICAgIGNvdmVyYWdlOiB7XG4gICAgICAgIGV4Y2x1ZGU6IGNvbnRleHQuY292ZXJhZ2VFeGNsdWRlLFxuICAgICAgICBpbmNsdWRlOiBbJ3NyYy8qKi8qLnRzJ10sXG4gICAgICAgIHByb3ZpZGVyOiAndjgnLFxuICAgICAgICByZXBvcnRlcjogWyd0ZXh0JywgJ2xjb3YnLCAnaHRtbCddLFxuICAgICAgICByZXBvcnRzRGlyZWN0b3J5OiAnLi9jb3ZlcmFnZSdcbiAgICAgIH0sXG4gICAgICBleGNsdWRlOiBbLi4uU0hBUkVEX0VYQ0xVREVdLFxuICAgICAgZ2xvYmFsczogZmFsc2UsXG4gICAgICBpbmNsdWRlOiBbVU5JVF9URVNUX0ZJTEVTXSxcbiAgICAgIHBhc3NXaXRoTm9UZXN0czogdHJ1ZSxcbiAgICAgIHByb2plY3RzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICByZXNvbHZlOiB7XG4gICAgICAgICAgICBhbGlhczoge1xuICAgICAgICAgICAgICBvYnNpZGlhbjogJ29ic2lkaWFuLXRlc3QtbW9ja3Mvb2JzaWRpYW4nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0ZXN0OiBjb250ZXh0LnVuaXRUZXN0c1xuICAgICAgICB9LFxuICAgICAgICB7IHRlc3Q6IGNvbnRleHQubm9BcHAgfSxcbiAgICAgICAgeyB0ZXN0OiBjb250ZXh0LmRlc2t0b3AgfSxcbiAgICAgICAgeyB0ZXN0OiBjb250ZXh0LmRlc2t0b3BQZXJmb3JtYW5jZSB9LFxuICAgICAgICB7IHRlc3Q6IGNvbnRleHQuYW5kcm9pZCB9LFxuICAgICAgICAuLi5jdXN0b21Qcm9qZWN0c1xuICAgICAgXVxuICAgIH1cbiAgfSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdCQSxPQUFPLGFBQWE7QUFDcEIsU0FBUyxvQkFBb0I7QUFPN0IsTUFBTSxrQ0FBa0M7QUFDeEMsTUFBTSw4QkFBOEI7QUFDcEMsTUFBTSwwQkFBMEI7QUFDaEMsTUFBTSxzQ0FBc0M7QUFFNUMsTUFBTSxxQkFBcUI7QUFDM0IsTUFBTSw0QkFBNEI7QUFDbEMsTUFBTSxpQ0FBaUM7QUFDdkMsTUFBTSxxQkFBcUI7QUFDM0IsTUFBTSx5QkFBeUI7QUFDL0IsTUFBTSxvQkFBb0I7QUFD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
|
|
216
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy90ZXN0LXJ1bm5lcnMvdml0ZXN0LWNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFNoYXJlZCB2aXRlc3QgY29uZmlndXJhdGlvbiBmb3IgT2JzaWRpYW4gcGx1Z2lucy5cbiAqXG4gKiBFdmVyeSBwbHVnaW4gaW4gdGhlIHdvcmtzcGFjZSBkZWNsYXJlcyB0aGUgc2FtZSBmaXZlIHZpdGVzdCBwcm9qZWN0cyBcdTIwMTQgYHVuaXQtdGVzdHNgIHBsdXMgdGhlXG4gKiBgaW50ZWdyYXRpb24tdGVzdHM6e25vLWFwcCxkZXNrdG9wLGRlc2t0b3AtcGVyZm9ybWFuY2UsYW5kcm9pZH1gIGZhbWlseSBcdTIwMTQgd2l0aCB0aGUgc2FtZSB0aW1lb3V0cyxcbiAqIGBzZXR1cEZpbGVzYCwgYW5kIGBnbG9iYWxTZXR1cGAgd2lyaW5nLiBNYWludGFpbmluZyB0aGF0IHBlciByZXBvIG1lYW5zIGEgY29udmVudGlvbiBjaGFuZ2UgY29zdHMgb25lXG4gKiBuZWFyLWlkZW50aWNhbCBlZGl0IHBlciBwbHVnaW4sIGFuZCBhbnkgcmVwbyB0aGF0IGlzIG1pc3NlZCBkcmlmdHMgc2lsZW50bHkuIFRoaXMgbW9kdWxlIG93bnMgdGhhdFxuICogY29uZmlndXJhdGlvbiBvbmNlLCBzbyBhIHBsdWdpbidzIGBzY3JpcHRzL3ZpdGVzdC1jb25maWcudHNgIGNvbGxhcHNlcyB0byBhIHNpbmdsZSBjYWxsLlxuICpcbiAqIFRoZSBzZWFtIG1pcnJvcnMge0BsaW5rIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL29ic2lkaWFuLWRldi11dGlscyB8IHRoZSBFU0xpbnQgb25lfVxuICogKGBkZWZpbmVFc2xpbnRDb25maWdzYCk6IHRoZSBmYWN0b3J5IGJ1aWxkcyBhIGNvbnRleHQgaG9sZGluZyB0aGUgc3RhbmRhcmQgcHJvamVjdHMsIHRoZSBjYWxsZXIgZWRpdHNcbiAqIGl0IGluIHBsYWNlIHRocm91Z2gge0BsaW5rIERlZmluZU9ic2lkaWFuUGx1Z2luVml0ZXN0Q29uZmlnT3B0aW9ucy5lZGl0Q29udGV4dH0sIGFuZCBhcHBlbmRzIGFueVxuICogcHJvamVjdCB0aGUgYmFzZSBkb2VzIG5vdCBrbm93IGFib3V0IHRocm91Z2hcbiAqIHtAbGluayBEZWZpbmVPYnNpZGlhblBsdWdpblZpdGVzdENvbmZpZ09wdGlvbnMuY3VzdG9tUHJvamVjdHN9LlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgVGVzdFByb2plY3RDb25maWd1cmF0aW9uLFxuICBUZXN0UHJvamVjdElubGluZUNvbmZpZ3VyYXRpb24sXG4gIFZpdGVVc2VyQ29uZmlnXG59IGZyb20gJ3ZpdGVzdC9jb25maWcnO1xuXG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSAndml0ZXN0L2NvbmZpZyc7XG5cbi8qKlxuICogVGhlIGB0ZXN0YCBzZWN0aW9uIG9mIGEgc2luZ2xlIHZpdGVzdCBwcm9qZWN0IGVudHJ5LlxuICovXG5leHBvcnQgdHlwZSBPYnNpZGlhblBsdWdpblZpdGVzdFByb2plY3RDb25maWcgPSBOb25OdWxsYWJsZTxUZXN0UHJvamVjdElubGluZUNvbmZpZ3VyYXRpb25bJ3Rlc3QnXT47XG5cbmNvbnN0IEFORFJPSURfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSA2MF8wMDA7XG5jb25zdCBCSUdfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMF8wMDA7XG5jb25zdCBIT09LX1RJTUVPVVRfTVVMVElQTElFUiA9IDQ7XG5jb25zdCBQRVJGT1JNQU5DRV9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDYwMF8wMDA7XG5cbmNvbnN0IEFORFJPSURfVEVTVF9GSUxFUyA9ICdzcmMvKiovKi5hbmRyb2lkLmludGVncmF0aW9uLnRlc3QudHMnO1xuY29uc3QgQ1JPU1NfUExBVEZPUk1fVEVTVF9GSUxFUyA9ICdzcmMvKiovKi5jcm9zcy1wbGF0Zm9ybS5pbnRlZ3JhdGlvbi50ZXN0LnRzJztcbmNvbnN0IERFQ0xBUkFUSU9OX0ZJTEVTID0gJ3NyYy8qKi8qLmQudHMnO1xuY29uc3QgREVTS1RPUF9QRVJGT1JNQU5DRV9URVNUX0ZJTEVTID0gJ3NyYy8qKi8qLmRlc2t0b3AtcGVyZm9ybWFuY2UuaW50ZWdyYXRpb24udGVzdC50cyc7XG5jb25zdCBERVNLVE9QX1RFU1RfRklMRVMgPSAnc3JjLyoqLyouZGVza3RvcC5pbnRlZ3JhdGlvbi50ZXN0LnRzJztcbmNvbnN0IElOVEVHUkFUSU9OX1RFU1RfRklMRVMgPSAnc3JjLyoqLyouaW50ZWdyYXRpb24udGVzdC50cyc7XG5jb25zdCBOT19BUFBfVEVTVF9GSUxFUyA9ICdzcmMvKiovKi5uby1hcHAuaW50ZWdyYXRpb24udGVzdC50cyc7XG5jb25zdCBVTklUX1RFU1RfRklMRVMgPSAnc3JjLyoqLyoudGVzdC50cyc7XG5cbmNvbnN0IE9CU0lESUFOX1ZFUlNJT05fRU5WX1ZBUklBQkxFX05BTUUgPSAnT0JTSURJQU5fVkVSU0lPTic7XG5jb25zdCBTSEFSRURfRVhDTFVERSA9IFsnbm9kZV9tb2R1bGVzJywgJ2Rpc3QnXTtcblxuLyoqXG4gKiBUaGUgb3B0aW9ucyBmb3IgZGVmaW5pbmcgYSBwbHVnaW4ncyB2aXRlc3QgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWZpbmVPYnNpZGlhblBsdWdpblZpdGVzdENvbmZpZ09wdGlvbnMge1xuICAvKipcbiAgICogQSBmdW5jdGlvbiB0aGF0IGJ1aWxkcyBwcm9qZWN0cyB0aGUgYmFzZSBjb25maWd1cmF0aW9uIGRvZXMgbm90IGtub3cgYWJvdXQsIHN1Y2ggYXMgYSBwbHVnaW4ncyBvd25cbiAgICogYGludGVncmF0aW9uLXRlc3RzOmRlbW8tdmF1bHRgIHByb2plY3QuIFRoZSByZXR1cm5lZCBwcm9qZWN0cyBhcmUgYXBwZW5kZWQgYWZ0ZXIgdGhlIHN0YW5kYXJkIGZpdmUuXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIHZpdGVzdCBjb25maWd1cmF0aW9uIGNvbnRleHQuXG4gICAqIEByZXR1cm5zIFRoZSBleHRyYSBwcm9qZWN0cy5cbiAgICovXG4gIGN1c3RvbVByb2plY3RzPyhjb250ZXh0OiBPYnNpZGlhblBsdWdpblZpdGVzdENvbmZpZ0NvbnRleHQpOiBUZXN0UHJvamVjdENvbmZpZ3VyYXRpb25bXTtcblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0aGF0IGVkaXRzIHRoZSB2aXRlc3QgY29uZmlndXJhdGlvbiBjb250ZXh0IGJlZm9yZSBpdCBpcyBhc3NlbWJsZWQgaW50byBhIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIHZpdGVzdCBjb25maWd1cmF0aW9uIGNvbnRleHQuXG4gICAqL1xuICBlZGl0Q29udGV4dD8oY29udGV4dDogT2JzaWRpYW5QbHVnaW5WaXRlc3RDb25maWdDb250ZXh0KTogdm9pZDtcbn1cblxuLyoqXG4gKiBUaGUgY29udGV4dCBmb3IgZGVmaW5pbmcgYSBwbHVnaW4ncyB2aXRlc3QgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBFdmVyeSBtZW1iZXIgaXMgbGl2ZTogdGhlIGFycmF5cyBhbmQgb2JqZWN0cyBpdCBleHBvc2VzIGFyZSB0aGUgdmVyeSBvbmVzIHRoZSBhc3NlbWJsZWQgY29uZmlndXJhdGlvblxuICogaXMgYnVpbHQgZnJvbSwgc28gZWRpdGluZyB0aGVtIGluIHBsYWNlIHRocm91Z2hcbiAqIHtAbGluayBEZWZpbmVPYnNpZGlhblBsdWdpblZpdGVzdENvbmZpZ09wdGlvbnMuZWRpdENvbnRleHR9IGlzIHdoYXQgY3VzdG9taXplcyB0aGUgcmVzdWx0LlxuICovXG5leHBvcnQgY2xhc3MgT2JzaWRpYW5QbHVnaW5WaXRlc3RDb25maWdDb250ZXh0IHtcbiAgLyoqXG4gICAqIFRoZSBgaW50ZWdyYXRpb24tdGVzdHM6YW5kcm9pZGAgcHJvamVjdCwgcnVubmluZyB0aGUgbW9iaWxlLW9ubHkgYW5kIGNyb3NzLXBsYXRmb3JtIHN1aXRlcyBhZ2FpbnN0IGFuXG4gICAqIEFuZHJvaWQgZW11bGF0b3IgdGhyb3VnaCBBcHBpdW0uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYW5kcm9pZDogT2JzaWRpYW5QbHVnaW5WaXRlc3RQcm9qZWN0Q29uZmlnID0ge1xuICAgIGVudmlyb25tZW50OiAnbm9kZScsXG4gICAgZW52aXJvbm1lbnRPcHRpb25zOiB7XG4gICAgICBvYnNpZGlhblRyYW5zcG9ydDoge1xuICAgICAgICBhcHBpdW1Vcmw6ICdodHRwOi8vbG9jYWxob3N0OjQ3MjMnLFxuICAgICAgICBhdmROYW1lOiAnb2JzaWRpYW5fdGVzdCcsXG4gICAgICAgIHR5cGU6ICdvYnNpZGlhbi1hbmRyb2lkLWFwcGl1bSdcbiAgICAgIH1cbiAgICB9LFxuICAgIGZpbGVQYXJhbGxlbGlzbTogZmFsc2UsXG4gICAgZ2xvYmFsU2V0dXA6IFsnb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZy92aXRlc3QtZ2xvYmFsLXNldHVwLXBsdWdpbiddLFxuICAgIGhvb2tUaW1lb3V0OiBBTkRST0lEX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTICogSE9PS19USU1FT1VUX01VTFRJUExJRVIsXG4gICAgaW5jbHVkZTogW0FORFJPSURfVEVTVF9GSUxFUywgQ1JPU1NfUExBVEZPUk1fVEVTVF9GSUxFU10sXG4gICAgbmFtZTogJ2ludGVncmF0aW9uLXRlc3RzOmFuZHJvaWQnLFxuICAgIHNldHVwRmlsZXM6IFsnb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZy92aXRlc3Qtc2V0dXAnXSxcbiAgICB0ZXN0VGltZW91dDogQU5EUk9JRF9USU1FT1VUX0lOX01JTExJU0VDT05EU1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaGUgcGVyLXRlc3QgYnVkZ2V0IG9mIHRoZSBBbmRyb2lkIGludGVncmF0aW9uIHByb2plY3QsIGluIG1pbGxpc2Vjb25kcy4gQm9vdGluZyBhbiBlbXVsYXRvciBhbmRcbiAgICogZHJpdmluZyBpdCBvdmVyIEFwcGl1bSBpcyBzbG93ZXIgdGhhbiB0aGUgZGVza3RvcCBwYXRoLCBoZW5jZSBpdHMgb3duIGNvbnN0YW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgNjAwMDBgXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYW5kcm9pZFRpbWVvdXRJbk1pbGxpc2Vjb25kcyA9IEFORFJPSURfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG5cbiAgLyoqXG4gICAqIFRoZSBwZXItdGVzdCBidWRnZXQgb2YgdGhlIHJlZ3VsYXIgaW50ZWdyYXRpb24gcHJvamVjdHMsIGluIG1pbGxpc2Vjb25kcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYDMwMDAwYFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGJpZ1RpbWVvdXRJbk1pbGxpc2Vjb25kcyA9IEJJR19USU1FT1VUX0lOX01JTExJU0VDT05EUztcblxuICAvKipcbiAgICogVGhlIGNvdmVyYWdlIGBleGNsdWRlYCBnbG9icy4gUHVzaCBvbnRvIGl0IHRvIGRyb3AgbW9yZSBmaWxlcyBmcm9tIHRoZSBjb3ZlcmFnZSByZXBvcnQuXG4gICAqXG4gICAqIERlY2xhcmF0aW9uIGZpbGVzIGFyZSBleGNsdWRlZCBieSBkZWZhdWx0IGJlY2F1c2UgdGhlIGNvdmVyYWdlIGBpbmNsdWRlYCBiZWxvdyBpcyBgc3JjLyoqXFwvKi50c2AsXG4gICAqIHdoaWNoIGEgYC5kLnRzYCBtYXRjaGVzLiBBIGRlY2xhcmF0aW9uIGZpbGUgZW1pdHMgbm8gcnVudGltZSBjb2RlLCBzbyBpdCByZXBvcnRzIDAlIGFuZCBubyB0ZXN0IGNhblxuICAgKiBldmVyIHJhaXNlIGl0IFx1MjAxNCBhIHBsdWdpbiB0aGF0IGdyb3dzIG9uZSB1bmRlciBgc3JjL2Agc2lsZW50bHkgbG9zZXMgaXRzIDEwMCUgZ2F0ZSwgYW5kIHRoZSB1c3VhbFxuICAgKiByZW1lZHkgb2YgYW4gaW5saW5lIGB2OCBpZ25vcmVgIGNvbW1lbnQgZG9lcyBub3QgYXBwbHkgdG8gYSB0eXBlLW9ubHkgZmlsZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb3ZlcmFnZUV4Y2x1ZGU6IHN0cmluZ1tdID0gW1VOSVRfVEVTVF9GSUxFUywgREVDTEFSQVRJT05fRklMRVNdO1xuXG4gIC8qKlxuICAgKiBUaGUgYGludGVncmF0aW9uLXRlc3RzOmRlc2t0b3BgIHByb2plY3QsIHJ1bm5pbmcgdGhlIGRlc2t0b3Atb25seSBhbmQgY3Jvc3MtcGxhdGZvcm0gc3VpdGVzIGFnYWluc3QgYVxuICAgKiByZWFsIGRlc2t0b3AgT2JzaWRpYW4gb3ZlciBDRFAuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVza3RvcDogT2JzaWRpYW5QbHVnaW5WaXRlc3RQcm9qZWN0Q29uZmlnID0ge1xuICAgIGVudmlyb25tZW50OiAnbm9kZScsXG4gICAgZmlsZVBhcmFsbGVsaXNtOiBmYWxzZSxcbiAgICBnbG9iYWxTZXR1cDogWydvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nL3ZpdGVzdC1nbG9iYWwtc2V0dXAtcGx1Z2luJ10sXG4gICAgaG9va1RpbWVvdXQ6IEJJR19USU1FT1VUX0lOX01JTExJU0VDT05EUyAqIEhPT0tfVElNRU9VVF9NVUxUSVBMSUVSLFxuICAgIGluY2x1ZGU6IFtERVNLVE9QX1RFU1RfRklMRVMsIENST1NTX1BMQVRGT1JNX1RFU1RfRklMRVNdLFxuICAgIG5hbWU6ICdpbnRlZ3JhdGlvbi10ZXN0czpkZXNrdG9wJyxcbiAgICBzZXR1cEZpbGVzOiBbJ29ic2lkaWFuLWludGVncmF0aW9uLXRlc3Rpbmcvdml0ZXN0LXNldHVwJ10sXG4gICAgdGVzdFRpbWVvdXQ6IEJJR19USU1FT1VUX0lOX01JTExJU0VDT05EU1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaGUgYGludGVncmF0aW9uLXRlc3RzOmRlc2t0b3AtcGVyZm9ybWFuY2VgIHByb2plY3QsIHJ1bm5pbmcgdGhlIGF0LXNjYWxlIHN1aXRlcy4gSXQgaXMgZGVjbGFyZWQgZm9yXG4gICAqIGV2ZXJ5IHBsdWdpbiBldmVuIHdoZW4gdGhlcmUgaXMgbm8gc3VjaCBzdWl0ZSB5ZXQgXHUyMDE0IGBwYXNzV2l0aE5vVGVzdHNgIG1ha2VzIGFuIGVtcHR5IHByb2plY3QgZnJlZSxcbiAgICogYW5kIHRoZSBtYXRjaGluZyBgdGVzdDppbnRlZ3JhdGlvbjpkZXNrdG9wOnBlcmZvcm1hbmNlYCBzY3JpcHQgZXhpc3RzIGZsZWV0LXdpZGUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVza3RvcFBlcmZvcm1hbmNlOiBPYnNpZGlhblBsdWdpblZpdGVzdFByb2plY3RDb25maWcgPSB7XG4gICAgZW52aXJvbm1lbnQ6ICdub2RlJyxcbiAgICBmaWxlUGFyYWxsZWxpc206IGZhbHNlLFxuICAgIGdsb2JhbFNldHVwOiBbJ29ic2lkaWFuLWludGVncmF0aW9uLXRlc3Rpbmcvdml0ZXN0LWdsb2JhbC1zZXR1cC1wbHVnaW4nXSxcbiAgICBob29rVGltZW91dDogUEVSRk9STUFOQ0VfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMsXG4gICAgaW5jbHVkZTogW0RFU0tUT1BfUEVSRk9STUFOQ0VfVEVTVF9GSUxFU10sXG4gICAgbmFtZTogJ2ludGVncmF0aW9uLXRlc3RzOmRlc2t0b3AtcGVyZm9ybWFuY2UnLFxuICAgIHNldHVwRmlsZXM6IFsnb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZy92aXRlc3Qtc2V0dXAnXSxcbiAgICB0ZXN0VGltZW91dDogUEVSRk9STUFOQ0VfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFNcbiAgfTtcblxuICAvKipcbiAgICogVGhlIG11bHRpcGxpZXIgYXBwbGllZCB0byBhIHByb2plY3QncyB0ZXN0IGJ1ZGdldCB0byBnZXQgaXRzIGhvb2sgYnVkZ2V0LiBBIGhvb2sgdHlwaWNhbGx5IHBvcHVsYXRlc1xuICAgKiBhbmQgb3BlbnMgYSB2YXVsdCwgc28gaXQgbmVlZHMgc2V2ZXJhbCB0aW1lcyB3aGF0IGEgc2luZ2xlIHRlc3QgZG9lcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYDRgXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaG9va1RpbWVvdXRNdWx0aXBsaWVyID0gSE9PS19USU1FT1VUX01VTFRJUExJRVI7XG5cbiAgLyoqXG4gICAqIFRoZSBgaW50ZWdyYXRpb24tdGVzdHM6bm8tYXBwYCBwcm9qZWN0LCBydW5uaW5nIHRoZSBzdWl0ZXMgdGhhdCBuZWVkIG5vIE9ic2lkaWFuIGluc3RhbmNlIGF0IGFsbC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBub0FwcDogT2JzaWRpYW5QbHVnaW5WaXRlc3RQcm9qZWN0Q29uZmlnID0ge1xuICAgIGVudmlyb25tZW50OiAnbm9kZScsXG4gICAgZmlsZVBhcmFsbGVsaXNtOiBmYWxzZSxcbiAgICBob29rVGltZW91dDogQklHX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTICogSE9PS19USU1FT1VUX01VTFRJUExJRVIsXG4gICAgaW5jbHVkZTogW05PX0FQUF9URVNUX0ZJTEVTXSxcbiAgICBuYW1lOiAnaW50ZWdyYXRpb24tdGVzdHM6bm8tYXBwJyxcbiAgICB0ZXN0VGltZW91dDogQklHX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTXG4gIH07XG5cbiAgLyoqXG4gICAqIFRoZSBwZXItdGVzdCBidWRnZXQgb2YgdGhlIHBlcmZvcm1hbmNlIGludGVncmF0aW9uIHByb2plY3QsIGluIG1pbGxpc2Vjb25kcy4gQSBwZXJmb3JtYW5jZSB2YXVsdCBpc1xuICAgKiBwcmUtcG9wdWxhdGVkIHdpdGggdGVucyBvZiB0aG91c2FuZHMgb2Ygbm90ZXMgYmVmb3JlIE9ic2lkaWFuIG9wZW5zLCBzbyBib3RoIGl0cyBzZXR1cCBhbmQgaXRzIHRlc3RzXG4gICAqIG5lZWQgZmFyIG1vcmUgdGltZSB0aGFuIHRoZSByZWd1bGFyIGludGVncmF0aW9uIHByb2plY3RzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgNjAwMDAwYFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBlcmZvcm1hbmNlVGltZW91dEluTWlsbGlzZWNvbmRzID0gUEVSRk9STUFOQ0VfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG5cbiAgLyoqXG4gICAqIFRoZSBgdW5pdC10ZXN0c2AgcHJvamVjdCwgcnVubmluZyB0aGUgbW9ja2VkLU9ic2lkaWFuIHN1aXRlcyBpbiBganNkb21gLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVuaXRUZXN0czogT2JzaWRpYW5QbHVnaW5WaXRlc3RQcm9qZWN0Q29uZmlnID0ge1xuICAgIGVudmlyb25tZW50OiAnanNkb20nLFxuICAgIGV4Y2x1ZGU6IFsuLi5TSEFSRURfRVhDTFVERSwgSU5URUdSQVRJT05fVEVTVF9GSUxFU10sXG4gICAgZXhlY0FyZ3Y6IFsnLS1uby13ZWJzdG9yYWdlJ10sXG4gICAgaW5jbHVkZTogW1VOSVRfVEVTVF9GSUxFU10sXG4gICAgbmFtZTogJ3VuaXQtdGVzdHMnLFxuICAgIHNlcnZlcjoge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYGRlcHNgIGlzIGRlY2xhcmVkIGJ5IGB2aXRlc3RgOyByZW5hbWluZyBpdCBoZXJlIHdvdWxkIG5vdCBtYXRjaCB0aGUgQVBJLlxuICAgICAgZGVwczoge1xuICAgICAgICBpbmxpbmU6IFsnQG9ic2lkaWFuLXR5cGluZ3MnLCAnb2JzaWRpYW4tZGV2LXV0aWxzJ11cbiAgICAgIH1cbiAgICB9LFxuICAgIHNldHVwRmlsZXM6IFtcbiAgICAgICdvYnNpZGlhbi10ZXN0LW1vY2tzL3ZpdGVzdC1zZXR1cCcsXG4gICAgICAnb2JzaWRpYW4tdGVzdC1tb2Nrcy9vYnNpZGlhbi10eXBpbmdzL3ZpdGVzdC1zZXR1cCcsXG4gICAgICAnb2JzaWRpYW4tZGV2LXV0aWxzL3ZpdGVzdC1zZXR1cCdcbiAgICBdXG4gIH07XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgY29udGV4dCBzZWVkZWQgd2l0aCB0aGUgc3RhbmRhcmQgcHJvamVjdHMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgb2JzaWRpYW5WZXJzaW9uID0gcHJvY2Vzcy5lbnZbT0JTSURJQU5fVkVSU0lPTl9FTlZfVkFSSUFCTEVfTkFNRV07XG5cbiAgICAvKlxuICAgICAqIFN1cHBvcnQgaXMgdGhlIHJhbmdlIFtsYXRlc3QgcHVibGljLCBsYXRlc3QgY2F0YWx5c3RdIGFuZCBCT1RIIGVuZHMgbXVzdCB3b3JrIChHOTkpLCBzbyB0aGUgdmVyc2lvblxuICAgICAqIGlzIGEga25vYiByYXRoZXIgdGhhbiBhIGNvbnN0YW50LiBUaGUga2V5IGlzIGFkZGVkIE9OTFkgd2hlbiB0aGUgdmFyaWFibGUgaXMgc2V0OiBhbiBleHBsaWNpdFxuICAgICAqIGBvYnNpZGlhblZlcnNpb25gIG1ha2VzIHRoZSBoYXJuZXNzIHJlc29sdmUgYSBjb25jcmV0ZSB2ZXJzaW9uIGFuZCBzd2FwIHRoZSBhc2FyLCB3aGljaCBpcyBub3Qgd2hhdFxuICAgICAqIGFuIHVucGlubmVkIHJ1biBkb2VzLCBzbyBzZWVkaW5nIGEgZGVmYXVsdCBoZXJlIHdvdWxkIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgZXZlcnkgcGx1Z2luLlxuICAgICAqL1xuICAgIGlmIChvYnNpZGlhblZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5kZXNrdG9wLmVudmlyb25tZW50T3B0aW9ucyA9IHtcbiAgICAgICAgb2JzaWRpYW5UcmFuc3BvcnQ6IHtcbiAgICAgICAgICBvYnNpZGlhblZlcnNpb24sXG4gICAgICAgICAgdHlwZTogJ29ic2lkaWFuLWNkcCdcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBEZWZpbmVzIHRoZSB2aXRlc3QgY29uZmlndXJhdGlvbiBmb3IgYW4gT2JzaWRpYW4gcGx1Z2luLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIGRlZmluaW5nIHRoZSBjb25maWd1cmF0aW9uLlxuICogQHJldHVybnMgVGhlIHZpdGVzdCBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lT2JzaWRpYW5QbHVnaW5WaXRlc3RDb25maWcob3B0aW9uczogRGVmaW5lT2JzaWRpYW5QbHVnaW5WaXRlc3RDb25maWdPcHRpb25zID0ge30pOiBWaXRlVXNlckNvbmZpZyB7XG4gIGNvbnN0IGNvbnRleHQgPSBuZXcgT2JzaWRpYW5QbHVnaW5WaXRlc3RDb25maWdDb250ZXh0KCk7XG5cbiAgaWYgKG9wdGlvbnMuZWRpdENvbnRleHQpIHtcbiAgICBvcHRpb25zLmVkaXRDb250ZXh0KGNvbnRleHQpO1xuICB9XG5cbiAgY29uc3QgY3VzdG9tUHJvamVjdHMgPSBvcHRpb25zLmN1c3RvbVByb2plY3RzPy4oY29udGV4dCkgPz8gW107XG5cbiAgcmV0dXJuIGRlZmluZUNvbmZpZyh7XG4gICAgdGVzdDoge1xuICAgICAgY292ZXJhZ2U6IHtcbiAgICAgICAgZXhjbHVkZTogY29udGV4dC5jb3ZlcmFnZUV4Y2x1ZGUsXG4gICAgICAgIGluY2x1ZGU6IFsnc3JjLyoqLyoudHMnXSxcbiAgICAgICAgcHJvdmlkZXI6ICd2OCcsXG4gICAgICAgIHJlcG9ydGVyOiBbJ3RleHQnLCAnbGNvdicsICdodG1sJ10sXG4gICAgICAgIHJlcG9ydHNEaXJlY3Rvcnk6ICcuL2NvdmVyYWdlJ1xuICAgICAgfSxcbiAgICAgIGV4Y2x1ZGU6IFsuLi5TSEFSRURfRVhDTFVERV0sXG4gICAgICBnbG9iYWxzOiBmYWxzZSxcbiAgICAgIGluY2x1ZGU6IFtVTklUX1RFU1RfRklMRVNdLFxuICAgICAgcGFzc1dpdGhOb1Rlc3RzOiB0cnVlLFxuICAgICAgcHJvamVjdHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHJlc29sdmU6IHtcbiAgICAgICAgICAgIGFsaWFzOiB7XG4gICAgICAgICAgICAgIG9ic2lkaWFuOiAnb2JzaWRpYW4tdGVzdC1tb2Nrcy9vYnNpZGlhbidcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRlc3Q6IGNvbnRleHQudW5pdFRlc3RzXG4gICAgICAgIH0sXG4gICAgICAgIHsgdGVzdDogY29udGV4dC5ub0FwcCB9LFxuICAgICAgICB7IHRlc3Q6IGNvbnRleHQuZGVza3RvcCB9LFxuICAgICAgICB7IHRlc3Q6IGNvbnRleHQuZGVza3RvcFBlcmZvcm1hbmNlIH0sXG4gICAgICAgIHsgdGVzdDogY29udGV4dC5hbmRyb2lkIH0sXG4gICAgICAgIC4uLmN1c3RvbVByb2plY3RzXG4gICAgICBdXG4gICAgfVxuICB9KTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0JBLE9BQU8sYUFBYTtBQUNwQixTQUFTLG9CQUFvQjtBQU83QixNQUFNLGtDQUFrQztBQUN4QyxNQUFNLDhCQUE4QjtBQUNwQyxNQUFNLDBCQUEwQjtBQUNoQyxNQUFNLHNDQUFzQztBQUU1QyxNQUFNLHFCQUFxQjtBQUMzQixNQUFNLDRCQUE0QjtBQUNsQyxNQUFNLG9CQUFvQjtBQUMxQixNQUFNLGlDQUFpQztBQUN2QyxNQUFNLHFCQUFxQjtBQUMzQixNQUFNLHlCQUF5QjtBQUMvQixNQUFNLG9CQUFvQjtBQUMxQixNQUFNLGtCQUFrQjtBQUV4QixNQUFNLHFDQUFxQztBQUMzQyxNQUFNLGlCQUFpQixDQUFDLGdCQUFnQixNQUFNO0FBOEJ2QyxNQUFNLGtDQUFrQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLN0IsVUFBNkM7QUFBQSxJQUMzRCxhQUFhO0FBQUEsSUFDYixvQkFBb0I7QUFBQSxNQUNsQixtQkFBbUI7QUFBQSxRQUNqQixXQUFXO0FBQUEsUUFDWCxTQUFTO0FBQUEsUUFDVCxNQUFNO0FBQUEsTUFDUjtBQUFBLElBQ0Y7QUFBQSxJQUNBLGlCQUFpQjtBQUFBLElBQ2pCLGFBQWEsQ0FBQyx5REFBeUQ7QUFBQSxJQUN2RSxhQUFhLGtDQUFrQztBQUFBLElBQy9DLFNBQVMsQ0FBQyxvQkFBb0IseUJBQXlCO0FBQUEsSUFDdkQsTUFBTTtBQUFBLElBQ04sWUFBWSxDQUFDLDJDQUEyQztBQUFBLElBQ3hELGFBQWE7QUFBQSxFQUNm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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "obsidian-dev-utils",
|
|
3
|
-
"version": "94.
|
|
3
|
+
"version": "94.4.0",
|
|
4
4
|
"description": "This is the collection of useful functions that you can use for your Obsidian plugin development.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"obsidian"
|
|
@@ -666,6 +666,7 @@
|
|
|
666
666
|
"version": "jiti scripts/version.ts"
|
|
667
667
|
},
|
|
668
668
|
"overrides": {
|
|
669
|
+
"@puppeteer/browsers": "^3.2.0",
|
|
669
670
|
"@typescript-eslint/eslint-plugin": "$@typescript-eslint/eslint-plugin",
|
|
670
671
|
"@typescript-eslint/parser": "$@typescript-eslint/parser",
|
|
671
672
|
"@vitest/coverage-v8": "$@vitest/coverage-v8",
|
|
@@ -713,7 +714,7 @@
|
|
|
713
714
|
"eslint": "^10.8.1",
|
|
714
715
|
"eslint-import-resolver-typescript": "^4.4.5",
|
|
715
716
|
"eslint-plugin-import-x": "^4.17.1",
|
|
716
|
-
"eslint-plugin-jsdoc": "^64.
|
|
717
|
+
"eslint-plugin-jsdoc": "^64.2.0",
|
|
717
718
|
"eslint-plugin-obsidianmd": "^0.4.1",
|
|
718
719
|
"eslint-plugin-perfectionist": "^5.10.1",
|
|
719
720
|
"eslint-plugin-tsdoc": "^0.5.2",
|
|
@@ -765,7 +766,7 @@
|
|
|
765
766
|
"jsdom": "^30.0.1",
|
|
766
767
|
"moment": "^2.30.1",
|
|
767
768
|
"nano-staged": "^1.0.2",
|
|
768
|
-
"obsidian-integration-testing": "^10.
|
|
769
|
+
"obsidian-integration-testing": "^10.3.2",
|
|
769
770
|
"obsidian-test-mocks": "^4.1.0",
|
|
770
771
|
"satori": "^0.29.0",
|
|
771
772
|
"starlight-github-alerts": "^0.4.0",
|