obsidian-dev-utils 93.3.0 → 94.0.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 +8 -0
- package/dist/integration-test-plugin/main.js +1 -0
- package/dist/lib/cjs/generated-during-build.cjs +1 -1
- package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.cjs +2 -1
- package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.d.cts +4 -0
- package/dist/lib/cjs/script-utils/demo-vault-app-json.cjs +164 -0
- package/dist/lib/cjs/script-utils/demo-vault-app-json.d.cts +93 -0
- package/dist/lib/cjs/script-utils/demo-vault-coverage.cjs +18 -1
- package/dist/lib/cjs/script-utils/demo-vault-coverage.d.cts +13 -0
- package/dist/lib/cjs/script-utils/demo-vault.cjs +27 -1
- package/dist/lib/cjs/script-utils/demo-vault.d.cts +5 -0
- 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/linters/markdownlint-cli2-config.cjs +6 -1
- package/dist/lib/esm/generated-during-build.mjs +1 -1
- package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.d.mts +4 -0
- package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.mjs +2 -1
- package/dist/lib/esm/script-utils/demo-vault-app-json.d.mts +93 -0
- package/dist/lib/esm/script-utils/demo-vault-app-json.mjs +57 -0
- package/dist/lib/esm/script-utils/demo-vault-coverage.d.mts +13 -0
- package/dist/lib/esm/script-utils/demo-vault-coverage.mjs +22 -1
- package/dist/lib/esm/script-utils/demo-vault.d.mts +5 -0
- package/dist/lib/esm/script-utils/demo-vault.mjs +31 -1
- 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/linters/markdownlint-cli2-config.mjs +6 -1
- package/package.json +1 -1
- package/script-utils/demo-vault-app-json/package.json +6 -0
|
@@ -22,6 +22,7 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
22
22
|
})();
|
|
23
23
|
|
|
24
24
|
import {
|
|
25
|
+
existsSync,
|
|
25
26
|
readdirSync,
|
|
26
27
|
readFileSync
|
|
27
28
|
} from "node:fs";
|
|
@@ -39,6 +40,10 @@ import {
|
|
|
39
40
|
} from "../path.mjs";
|
|
40
41
|
import { getMandatoryNamedGroup } from "../reg-exp.mjs";
|
|
41
42
|
import { ensureNonNullable } from "../type-guards.mjs";
|
|
43
|
+
import {
|
|
44
|
+
findOwnedDemoVaultAppJsonSettings,
|
|
45
|
+
parseDemoVaultAppJson
|
|
46
|
+
} from "./demo-vault-app-json.mjs";
|
|
42
47
|
class DemoVaultCoverageChecker {
|
|
43
48
|
cachedCorpus = null;
|
|
44
49
|
cachedNotes = null;
|
|
@@ -76,6 +81,19 @@ class DemoVaultCoverageChecker {
|
|
|
76
81
|
}));
|
|
77
82
|
return this.cachedNotes;
|
|
78
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* Finds the `.obsidian/app.json` settings the vault commits that `obsidian-dev-utils` owns and writes
|
|
86
|
+
* into the archived vault itself. A committed one is a second copy of a setting nothing reconciles, and
|
|
87
|
+
* it is the copy that goes stale — so the convention is that the vault commits none of them.
|
|
88
|
+
*
|
|
89
|
+
* @returns The names of the owned settings the committed `app.json` sets. A vault that commits no
|
|
90
|
+
* `app.json` at all is fine, and yields none.
|
|
91
|
+
*/
|
|
92
|
+
findCommittedAppJsonSettings() {
|
|
93
|
+
const appJsonPath = join(this.demoVaultFolder, ObsidianPluginRepoPaths.DotObsidian, ObsidianPluginRepoPaths.AppJson);
|
|
94
|
+
const content = existsSync(appJsonPath) ? readFileSync(appJsonPath, "utf-8") : null;
|
|
95
|
+
return findOwnedDemoVaultAppJsonSettings({ appJson: parseDemoVaultAppJson({ content, path: appJsonPath }) });
|
|
96
|
+
}
|
|
79
97
|
/**
|
|
80
98
|
* Finds notes carrying a `[Docs](…)` link line. The note IS the documentation, so a line pointing
|
|
81
99
|
* elsewhere for the real explanation is the shape this convention exists to remove.
|
|
@@ -319,6 +337,9 @@ function registerDemoVaultCoverageSuite(params) {
|
|
|
319
337
|
it("carries no Docs link line, because the note is the docs", () => {
|
|
320
338
|
expect(checker.findNotesWithDocsLinks()).toEqual([]);
|
|
321
339
|
});
|
|
340
|
+
it("commits none of the app.json settings obsidian-dev-utils injects at release time", () => {
|
|
341
|
+
expect(checker.findCommittedAppJsonSettings()).toEqual([]);
|
|
342
|
+
});
|
|
322
343
|
it("keeps the reflected surface non-trivial", () => {
|
|
323
344
|
const guard = params.nonTrivialGuard;
|
|
324
345
|
const members = checker.getInterfaceMembers(guard);
|
|
@@ -547,4 +568,4 @@ export {
|
|
|
547
568
|
DemoVaultCoverageChecker,
|
|
548
569
|
registerDemoVaultCoverageSuite
|
|
549
570
|
};
|
|
550
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9kZW1vLXZhdWx0LWNvdmVyYWdlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogU3RhdGljIGNvdmVyYWdlL2ZyZXNobmVzcyBjaGVja3MgdGhhdCBrZWVwIGEgcGx1Z2luJ3MgaW4tcmVwbyBgZGVtby12YXVsdC9gIGluIHN5bmMgd2l0aCBpdHMgcHVibGljIHN1cmZhY2UuXG4gKlxuICogQSBwbHVnaW4gY2FuIHNoaXAgYSBjdXJhdGVkIGRlbW8gdmF1bHQgYXQgYGRlbW8tdmF1bHQvYCBpbiBpdHMgcmVwbyByb290LiBUaGVzZSBoZWxwZXJzIHJlZmxlY3QgdGhlIHJlYWxcbiAqIHB1YmxpYyBBUEkvY29uZmlnL2RvY3Mgc3RyYWlnaHQgZnJvbSBzb3VyY2UgYW5kIGFzc2VydCBcdTIwMTQgV0lUSE9VVCBsYXVuY2hpbmcgT2JzaWRpYW4gXHUyMDE0IHRoYXQgZXZlcnkgZmVhdHVyZSBpc1xuICogZGVtb25zdHJhdGVkIGluIHRoZSBub3RlcyBhbmQgdGhhdCB0aGUgbm90ZXMgcmVmZXJlbmNlIG5vIEFQSSBtZW1iZXIgdGhhdCBubyBsb25nZXIgZXhpc3RzIChyZW5hbWUgZHJpZnQpLlxuICogVGhlIHJ1bnRpbWUgYmVoYXZpb3Igb2YgdGhlIHBsdWdpbiBpcyBjb3ZlcmVkIGJ5IGl0cyBvdGhlciBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IGJ5IHRoZSBkZW1vIHZhdWx0OyB0aGVcbiAqIHZhdWx0IGlzIGEgbGVhcm5pbmcgcmVzb3VyY2UsIGFuZCB0aGVzZSBjaGVja3Mgb25seSBndWFyZCB0aGF0IGl0IHN0YXlzIHRydXRoZnVsLlxuICpcbiAqIFRoZXkgYWxzbyBlbmZvcmNlIHRoZSBkZW1vLXZhdWx0IEFVVEhPUklORyBjb252ZW50aW9uIFx1MjAxNCBldmVyeSBub3RlIG9wZW5zIHdpdGggYW4gYCMgSDFgIGFuZCBhIHBsYWluXG4gKiBwcm9zZSBwYXJhZ3JhcGgsIGV2ZXJ5IG5vdGUgaXMgcmVhY2hhYmxlIGZyb20gdGhlIHN0YXJ0IG5vdGUsIGFuZCBubyBub3RlIHVzZXMgYSBgW1t3aWtpbGlua11dYCBvciBhXG4gKiBgW0RvY3NdKFx1MjAyNilgIGxpbmUuIFRoZXNlIGNoZWNrcyBhcmUgdW5jb25kaXRpb25hbDogdGhlIGRlbW8gdmF1bHQgaXMgdGhlIHB1Ymxpc2hlZCBkb2N1bWVudGF0aW9uLCByZWFkXG4gKiBpbiBPYnNpZGlhbiBBTkQgb24gR2l0SHViICh3aGVyZSBhIHdpa2lsaW5rIGRvZXMgbm90IHJlbmRlciksIHNvIGEgbm90ZSB0aGF0IGJyZWFrcyB0aGUgY29udmVudGlvbiBpc1xuICogYnJva2VuIGZvciByZWFsIHJlYWRlcnMuIGBhdXRob3JpbmdgIG9ubHkgdHVuZXMgdGhlbSAod2hpY2ggbm90ZSBpcyB0aGUgc3RhcnQsIHdoaWNoIG5vdGVzIHNpdCBvdXRzaWRlXG4gKiB0aGUgbGVhcm5pbmcgcGF0aCk7IGl0IGNhbm5vdCBzd2l0Y2ggdGhlbSBvZmYuXG4gKlxuICogVGhlIG9uZSBleGNlcHRpb24gaXMgYSBub3RlIHdob3NlIFNVQkpFQ1QgaXMgdGhlIHdpa2lsaW5rIFx1MjAxNCBhbiBlbWJlZCBzcGVsbGluZyB0aGUgcmVhZGVyIGlzIGJlaW5nIHRhdWdodFxuICogdG8gdHlwZSwgYSBmcm9udG1hdHRlciBwcm9wZXJ0eSB2YWx1ZSB0aGF0IGV4aXN0cyB0byBjb250cmFzdCB3aXRoIGEgTWFya2Rvd24gbGluaywgYSBmaXh0dXJlIHRoYXQgbXVzdFxuICoga2VlcCB0aGUgd2lraWxpbmsgYSBjb21tYW5kIGlzIHN1cHBvc2VkIHRvIGxlYXZlIGFsb25lLCBhIGxpbmsgdGhlIHJlYWRlciBjbGlja3Mgd2hpbGUgaXQgc3RpbGwgcmVzb2x2ZXNcbiAqIHRvIG5vdGhpbmcuIFN1Y2ggYSBub3RlIHNheXMgc28gaXRzZWxmLCBzdGF0aW5nIHdoeSwgaW4gb25lIG9mIHR3byBmb3JtcyBtb2RlbGxlZCBvbiBFU0xpbnQncy5cbiAqXG4gKiBQZXIgbGluZSBvciBwZXIgcmVnaW9uLCB3cml0dGVuIGFzIGFuIEhUTUwgY29tbWVudCBzbyBpdCBpcyBpbnZpc2libGUgaW4gT2JzaWRpYW4gQU5EIG9uIEdpdEh1YiBcdTIwMTQgdGhlXG4gKiBzcGVsbGluZyB0aGVzZSB2YXVsdHMgYWxyZWFkeSB1c2UgZm9yIGBtYXJrZG93bmxpbnQtZGlzYWJsZS1uZXh0LWxpbmVgOlxuICpcbiAqIGBgYG1hcmtkb3duXG4gKiA8IS0tIG9ic2lkaWFuLWRldi11dGlscy1kaXNhYmxlLW5leHQtbGluZSBkZW1vLXZhdWx0LXZhbGlkYXRpb24vbm8td2lraWxpbmtzIC0tIENsaWNraW5nIGEgbGluayB0byBhIG5vdGUgdGhhdCBkb2VzIG5vdCBleGlzdCB5ZXQgSVMgdGhlIGZlYXR1cmUuIC0tPlxuICogMi4gQ2xpY2sgdGhpcyBsaW5rOiBbW1Byb2plY3RzL0ZyZXNoIGlkZWFdXS5cbiAqXG4gKiA8IS0tIG9ic2lkaWFuLWRldi11dGlscy1kaXNhYmxlIGRlbW8tdmF1bHQtdmFsaWRhdGlvbi9uby13aWtpbGlua3MgLS0gVGhlIHdpa2lsaW5rIGVtYmVkIGlzIHRoZSBzeW50YXggdGhpcyBub3RlIHRlYWNoZXMuIC0tPlxuICogIVtbYmFzaWMuaHRtbHw0MDBdXVxuICogPCEtLSBvYnNpZGlhbi1kZXYtdXRpbHMtZW5hYmxlIGRlbW8tdmF1bHQtdmFsaWRhdGlvbi9uby13aWtpbGlua3MgLS0+XG4gKiBgYGBcbiAqXG4gKiBQZXIgbm90ZSwgaW4gdGhlIG5vdGUncyBvd24gZnJvbnRtYXR0ZXIgXHUyMDE0IHRoZSBvbmx5IGZvcm0gdGhhdCBjYW4gcmVhY2ggYSB3aWtpbGluayBJTlNJREUgZnJvbnRtYXR0ZXIsXG4gKiB3aGVyZSBhIGNvbW1lbnQgY2Fubm90IGdvOlxuICpcbiAqIGBgYHlhbWxcbiAqIC0tLVxuICogb2JzaWRpYW4tZGV2LXV0aWxzOlxuICogICBkZW1vLXZhdWx0LXZhbGlkYXRpb246XG4gKiAgICAgYWxsb3ctd2lraWxpbmtzOiBUaGUgYHdpa2lsaW5rYCBwcm9wZXJ0eSB2YWx1ZSBpcyB0aGUgY29udHJhc3QgdGhpcyBub3RlIGlzIGJ1aWx0IGFyb3VuZC5cbiAqIC0tLVxuICogYGBgXG4gKlxuICogRWl0aGVyIHdheSB0aGUgZGVjbGFyYXRpb24gdHJhdmVscyB3aXRoIHRoZSBub3RlIHJhdGhlciB0aGFuIHNpdHRpbmcgaW4gYSBsaXN0IHNvbWV3aGVyZSBlbHNlLCBpdCBjYXJyaWVzXG4gKiBpdHMganVzdGlmaWNhdGlvbiwgYW5kIGl0IGV4ZW1wdHMgb25seSB0aGUgV0lLSUxJTksgY2hlY2sgXHUyMDE0IHRoZSBIMSwgcHJvc2UsIHJlYWNoYWJpbGl0eSBhbmQgYFtEb2NzXWBcbiAqIGNoZWNrcyBzdGlsbCBhcHBseS4gQSBkZWNsYXJhdGlvbiB3aXRoIG5vIHJlYXNvbiwgb25lIGNvdmVyaW5nIG5vIHdpa2lsaW5rLCBhIHJlZ2lvbiBuZXZlciBlbmFibGVkIGFnYWluLFxuICogb3IgYSBtaXNzcGVsbGVkIGRpcmVjdGl2ZSBhbGwgZmFpbDogYW4gZXhlbXB0aW9uIG5vYm9keSBjYW4ganVzdGlmeSwgdGhhdCBub3RoaW5nIG5lZWRzIGFueSBtb3JlLCBvciB0aGF0XG4gKiBzaWxlbnRseSBkb2VzIG5vdGhpbmcgaXMgd29yc2UgdGhhbiBubyBleGVtcHRpb24gYXQgYWxsLlxuICpcbiAqIFR3byBsYXllcnMgYXJlIGV4cG9zZWQ6XG4gKiAtIHtAbGluayBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJ9IFx1MjAxNCBhIGZyYW1ld29yay1hZ25vc3RpYyBjb3JlIHRoYXQgcmVhZHMgdGhlIGNvcnB1cywgcGFyc2VzIGludGVyZmFjZSAvXG4gKiAgIGNsYXNzIC8gZW51bSBtZW1iZXJzIGFuZCBleHBvcnRlZCBmdW5jdGlvbnMsIGFuZCByZXR1cm5zIGRpYWdub3N0aWMgYXJyYXlzICh3aGF0IGlzIHVuZGVtb25zdHJhdGVkIC8gc3RhbGVcbiAqICAgLyB1bmxpbmtlZCAvIG9mZi1jb252ZW50aW9uKS5cbiAqIC0ge0BsaW5rIHJlZ2lzdGVyRGVtb1ZhdWx0Q292ZXJhZ2VTdWl0ZX0gXHUyMDE0IGEgdGhpbiB3cmFwcGVyIHRoYXQgcmVnaXN0ZXJzIGEgYHZpdGVzdGAgc3VpdGUgb3ZlciB0aGUgY29yZSwgc29cbiAqICAgYSBwbHVnaW4ncyBgZGVtby12YXVsdC5uby1hcHAuaW50ZWdyYXRpb24udGVzdC50c2AgaXMgYSBzaW5nbGUgZGVjbGFyYXRpdmUgY2FsbC5cbiAqL1xuXG5pbXBvcnQge1xuICByZWFkZGlyU3luYyxcbiAgcmVhZEZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgZGVzY3JpYmUsXG4gIGV4cGVjdCxcbiAgaXRcbn0gZnJvbSAndml0ZXN0JztcblxuaW1wb3J0IHsgbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzIH0gZnJvbSAnLi4vb2JqZWN0LXV0aWxzLnRzJztcbmltcG9ydCB7IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzIH0gZnJvbSAnLi4vb2JzaWRpYW4vcGx1Z2luL29ic2lkaWFuLXBsdWdpbi1yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7XG4gIGRpcm5hbWUsXG4gIGpvaW4sXG4gIHJlbGF0aXZlXG59IGZyb20gJy4uL3BhdGgudHMnO1xuaW1wb3J0IHsgZ2V0TWFuZGF0b3J5TmFtZWRHcm91cCB9IGZyb20gJy4uL3JlZy1leHAudHMnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICcuLi90eXBlLWd1YXJkcy50cyc7XG5cbi8qKlxuICogVHVuZXMgdGhlIGFsd2F5cy1vbiBhdXRob3JpbmcgY2hlY2tzLiBJdCBjYW5ub3QgZGlzYWJsZSB0aGVtIFx1MjAxNCBzZWUgdGhlIGZpbGUgb3ZlcnZpZXcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVtb1ZhdWx0QXV0aG9yaW5nU3BlYyB7XG4gIC8qKlxuICAgKiBUaGUgbm90ZXMgKHBhdGhzIHJlbGF0aXZlIHRvIHRoZSBkZW1vIHZhdWx0KSB0aGF0IHNpdCBvdXRzaWRlIHRoZSBsZWFybmluZyBwYXRoIGFuZCBhcmUgdGhlcmVmb3JlXG4gICAqIGV4ZW1wdCBmcm9tIGV2ZXJ5IGF1dGhvcmluZyBjaGVjay4gRGVmYXVsdHMgdG8gdGhlIHZhdWx0J3Mgb3duIGBSRUFETUUubWRgLCB3aGljaCBhZGRyZXNzZXMgc29tZW9uZVxuICAgKiBicm93c2luZyB0aGUgcmVwbyBvbiBHaXRIdWIgcmF0aGVyIHRoYW4gYSByZWFkZXIgd29ya2luZyB0aHJvdWdoIHRoZSB2YXVsdC5cbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVkTm90ZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIG5vdGUgKHBhdGggcmVsYXRpdmUgdG8gdGhlIGRlbW8gdmF1bHQpIGV2ZXJ5IG90aGVyIG5vdGUgbXVzdCBiZSByZWFjaGFibGUgZnJvbS4gRGVmYXVsdHMgdG9cbiAgICogYDAwIFN0YXJ0Lm1kYC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0Tm90ZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZWZsZWN0cyBhIGNvbmZpZyBpbnRlcmZhY2Ugd2hvc2Ugb3B0aW9ucyBhcmUgZGVtb25zdHJhdGVkIGJ5IHRoZWlyIGJhcmUgbmFtZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZW1vVmF1bHRDb25maWdJbnRlcmZhY2VDb3ZlcmFnZVNwZWMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGBleHBvcnQgaW50ZXJmYWNlYCwgYGV4cG9ydCBjbGFzc2AsIG9yIGBleHBvcnQgZW51bWAgd2hvc2UgcHJvcGVydGllcyBhcmUgdGhlIGNvbmZpZ1xuICAgKiBvcHRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJmYWNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIGZpbGUgcGF0aCAocmVsYXRpdmUgdG8gdGhlIHJlcG8gcm9vdCkgdGhhdCBkZWNsYXJlcyB0aGUgaW50ZXJmYWNlLCBjbGFzcywgb3IgZW51bS5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZVBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJ9IGNvbnN0cnVjdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlckNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBub3RlcyAocGF0aHMgcmVsYXRpdmUgdG8gdGhlIGRlbW8gdmF1bHQpIGV4ZW1wdCBmcm9tIHRoZSBhdXRob3JpbmcgY2hlY2tzLiBEZWZhdWx0cyB0byB0aGVcbiAgICogdmF1bHQncyBvd24gYFJFQURNRS5tZGAuXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlZE5vdGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBwbHVnaW4gcmVwbyByb290IFx1MjAxNCB0aGUgZm9sZGVyIGNvbnRhaW5pbmcgYGRlbW8tdmF1bHQvYCBhbmQgdGhlIHNvdXJjZSBiZWluZ1xuICAgKiByZWZsZWN0ZWQuIENhbGxlcnMgdHlwaWNhbGx5IHBhc3MgYGdldFJvb3RGb2xkZXIoKSA/PyBwcm9jZXNzLmN3ZCgpYC5cbiAgICovXG4gIHJlYWRvbmx5IHJvb3RGb2xkZXI6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3Ige0BsaW5rIERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlci5maW5kU3RhbGVSZWZlcmVuY2VzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJGaW5kU3RhbGVSZWZlcmVuY2VzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSByZWNlaXZlciB3aG9zZSBgYCBgJHtyZWNlaXZlcn0uPG1lbWJlcj5gIGBgIHJlZmVyZW5jZXMgYXJlIHNjYW5uZWQgZm9yIGluIHRoZSBkZW1vIGNvcnB1cy5cbiAgICovXG4gIHJlYWRvbmx5IHJlY2VpdmVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBtZW1iZXJzIHRoYXQgY3VycmVudGx5IGV4aXN0IG9uIHRoZSByZWNlaXZlcjsgYW55IHJlZmVyZW5jZWQgbWVtYmVyIG5vdCBpbiB0aGlzIHNldCBpcyBzdGFsZS5cbiAgICovXG4gIHJlYWRvbmx5IHZhbGlkTWVtYmVyczogc3RyaW5nW107XG59XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIHtAbGluayBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXIuZmluZFVuZGVtb25zdHJhdGVkTWVtYmVyc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyRmluZFVuZGVtb25zdHJhdGVkTWVtYmVyc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgbWVtYmVyIG5hbWVzIHRoYXQgbXVzdCBlYWNoIGFwcGVhciBpbiB0aGUgZGVtbyBjb3JwdXMuXG4gICAqL1xuICByZWFkb25seSBtZW1iZXJzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogV2hlbiBzZXQsIGEgbWVtYmVyIGlzIGRlbW9uc3RyYXRlZCBvbmx5IGlmIGBgIGAke3JlY2VpdmVyfS4ke21lbWJlcn1gIGBgIGFwcGVhcnMgKGUuZy4gYSBjb250ZXh0IG9iamVjdCdzXG4gICAqIG1ldGhvZHMpOyB3aGVuIGFic2VudCwgdGhlIGJhcmUgbWVtYmVyIG5hbWUgaXMgbG9va2VkIHVwIChlLmcuIGEgY29uZmlnIG9wdGlvbikuXG4gICAqL1xuICByZWFkb25seSByZWNlaXZlcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3Ige0BsaW5rIERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlci5maW5kVW5saW5rZWRGZWF0dXJlRG9jc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyRmluZFVubGlua2VkRmVhdHVyZURvY3NQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGRvY3MgZm9sZGVyIChyZWxhdGl2ZSB0byB0aGUgcmVwbyByb290KSB3aG9zZSB0b3AtbGV2ZWwgYCoubWRgIGZpbGVzIGFyZSB0aGUgZmVhdHVyZSBkb2NzLlxuICAgKi9cbiAgcmVhZG9ubHkgZG9jc0ZvbGRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZG9jIGJhc2VuYW1lcyAod2l0aG91dCBgLm1kYCkgdGhhdCBhcmUgTk9UIHBlci1mZWF0dXJlIHBhZ2VzIGFuZCBzbyBuZWVkIG5vIGxpbmtpbmcgZGVtbyBub3RlLlxuICAgKi9cbiAgcmVhZG9ubHkgbm9uRmVhdHVyZURvY3M6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBwYXJhbWV0ZXJzIGZvciB7QGxpbmsgRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyLmZpbmRVbnJlYWNoYWJsZU5vdGVzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJGaW5kVW5yZWFjaGFibGVOb3Rlc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgbm90ZSAocGF0aCByZWxhdGl2ZSB0byB0aGUgZGVtbyB2YXVsdCkgdGhlIHdhbGsgc3RhcnRzIGZyb20sIGUuZy4gYDAwIFN0YXJ0Lm1kYC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0Tm90ZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBwYXJhbWV0ZXJzIGZvciB7QGxpbmsgRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyLmdldEV4cG9ydGVkRnVuY3Rpb25OYW1lc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyR2V0RXhwb3J0ZWRGdW5jdGlvbk5hbWVzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgZmlsZSBwYXRoIChyZWxhdGl2ZSB0byB0aGUgcmVwbyByb290KSB3aG9zZSBgZXhwb3J0IGZ1bmN0aW9uYHMgYXJlIHBhcnNlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZVBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3Ige0BsaW5rIERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlci5nZXRJbnRlcmZhY2VNZW1iZXJzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJHZXRJbnRlcmZhY2VNZW1iZXJzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBgZXhwb3J0IGludGVyZmFjZWAsIGBleHBvcnQgY2xhc3NgLCBvciBgZXhwb3J0IGVudW1gIHRvIHBhcnNlLlxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJmYWNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIGZpbGUgcGF0aCAocmVsYXRpdmUgdG8gdGhlIHJlcG8gcm9vdCkgdGhhdCBkZWNsYXJlcyB0aGUgaW50ZXJmYWNlLCBjbGFzcywgb3IgZW51bS5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZVBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb25maWd1cmVzIHRoZSBmZWF0dXJlLWRvYyBsaW5raW5nIGNoZWNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlbW9WYXVsdERvY3NDb3ZlcmFnZVNwZWMge1xuICAvKipcbiAgICogVGhlIGRvY3MgZm9sZGVyIChyZWxhdGl2ZSB0byB0aGUgcmVwbyByb290KSB3aG9zZSB0b3AtbGV2ZWwgYCoubWRgIGZpbGVzIGFyZSB0aGUgZmVhdHVyZSBkb2NzLlxuICAgKi9cbiAgcmVhZG9ubHkgZm9sZGVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkb2MgYmFzZW5hbWVzICh3aXRob3V0IGAubWRgKSB0aGF0IGFyZSBOT1QgcGVyLWZlYXR1cmUgcGFnZXMgYW5kIHNvIG5lZWQgbm8gbGlua2luZyBkZW1vIG5vdGUuXG4gICAqL1xuICByZWFkb25seSBub25GZWF0dXJlRG9jczogc3RyaW5nW107XG59XG5cbi8qKlxuICogUmVmbGVjdHMgYSBtb2R1bGUncyBleHBvcnRlZCBmdW5jdGlvbnMsIGVhY2ggZGVtb25zdHJhdGVkIGJ5IGl0cyBiYXJlIG5hbWUgaW4gdGhlIGRlbW8gY29ycHVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlbW9WYXVsdEZ1bmN0aW9uc0NvdmVyYWdlU3BlYyB7XG4gIC8qKlxuICAgKiBUaGUgc291cmNlIGZpbGUgcGF0aCAocmVsYXRpdmUgdG8gdGhlIHJlcG8gcm9vdCkgd2hvc2UgYGV4cG9ydCBmdW5jdGlvbmBzIG11c3QgZWFjaCBiZSBkZW1vbnN0cmF0ZWQuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVmbGVjdHMgYSBzaW5nbGUgaW50ZXJmYWNlJ3MgbWVtYmVycyBhbmQgZGVtb25zdHJhdGVzIHRoZW0gdmlhIGBgIGAke3JlY2VpdmVyfS48bWVtYmVyPmAgYGAgcmVmZXJlbmNlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZW1vVmF1bHRJbnRlcmZhY2VDb3ZlcmFnZVNwZWMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGBleHBvcnQgaW50ZXJmYWNlYCwgYGV4cG9ydCBjbGFzc2AsIG9yIGBleHBvcnQgZW51bWAgdG8gcmVmbGVjdC5cbiAgICovXG4gIHJlYWRvbmx5IGludGVyZmFjZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZGVtb25zdHJhdGVkIG1lbWJlcnMgYXJlIHRoZSByZWZsZWN0ZWQgdHlwZSdzIG1ldGhvZHMgb3IgaXRzIHByb3BlcnRpZXMgKGVudW0gbWVtYmVycyBjb3VudCBhc1xuICAgKiBwcm9wZXJ0aWVzKS5cbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IERlbW9WYXVsdEludGVyZmFjZU1lbWJlcktpbmQ7XG5cbiAgLyoqXG4gICAqIFRoZSBpZGVudGlmaWVyIHRoZSBub3RlcyBjYWxsIHRoZSBtZW1iZXJzIG9uIChlLmcuIGBjb2RlQnV0dG9uQ29udGV4dGApLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVjZWl2ZXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNvdXJjZSBmaWxlIHBhdGggKHJlbGF0aXZlIHRvIHRoZSByZXBvIHJvb3QpIHRoYXQgZGVjbGFyZXMgdGhlIGludGVyZmFjZSwgY2xhc3MsIG9yIGVudW0uXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogV2hldGhlciBhbiBpbnRlcmZhY2UncyBkZW1vbnN0cmF0ZWQgbWVtYmVycyBhcmUgaXRzIG1ldGhvZHMgb3IgaXRzIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCB0eXBlIERlbW9WYXVsdEludGVyZmFjZU1lbWJlcktpbmQgPSAnbWV0aG9kcycgfCAncHJvcGVydGllcyc7XG5cbi8qKlxuICogQ29uZmlndXJlcyB0aGUgZ3VhcmQgdGhhdCB0aGUgcmVmbGVjdGVkIHN1cmZhY2UgaXMgbm9uLXRyaXZpYWwgKHByb3RlY3RzIGFnYWluc3QgYSBwYXJzaW5nIHJlZ3Jlc3Npb25cbiAqIHNpbGVudGx5IGVtcHR5aW5nIGV2ZXJ5IG90aGVyIGNoZWNrKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZW1vVmF1bHROb25Ucml2aWFsR3VhcmRTcGVjIHtcbiAgLyoqXG4gICAqIEEgZGVtbyBub3RlIChwYXRoIHJlbGF0aXZlIHRvIHRoZSBkZW1vIHZhdWx0KSB0aGF0IG11c3QgYmUgcHJlc2VudC5cbiAgICovXG4gIHJlYWRvbmx5IGV4cGVjdERlbW9Ob3RlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgbWVtYmVyIHRoYXQgbXVzdCBiZSByZWZsZWN0ZWQgZnJvbSB7QGxpbmsgRGVtb1ZhdWx0Tm9uVHJpdmlhbEd1YXJkU3BlYy5pbnRlcmZhY2VOYW1lfS5cbiAgICovXG4gIHJlYWRvbmx5IGV4cGVjdE1lbWJlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYGV4cG9ydCBpbnRlcmZhY2VgLCBgZXhwb3J0IGNsYXNzYCwgb3IgYGV4cG9ydCBlbnVtYCB3aG9zZSBtZW1iZXJzIGFyZSByZS1wYXJzZWQgZm9yIHRoZVxuICAgKiBndWFyZC5cbiAgICovXG4gIHJlYWRvbmx5IGludGVyZmFjZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNvdXJjZSBmaWxlIHBhdGggKHJlbGF0aXZlIHRvIHRoZSByZXBvIHJvb3QpIHRoYXQgZGVjbGFyZXMgdGhlIGludGVyZmFjZSwgY2xhc3MsIG9yIGVudW0uXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzaW5nbGUgZGVtbyBub3RlLCBhcyByZWFkIGZyb20gdGhlIGRlbW8gdmF1bHQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVtb1ZhdWx0Tm90ZSB7XG4gIC8qKlxuICAgKiBUaGUgbm90ZSdzIHJhdyBNYXJrZG93biBjb250ZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbm90ZSdzIHBhdGggcmVsYXRpdmUgdG8gdGhlIGRlbW8gdmF1bHQgZm9sZGVyLCBlLmcuIGAwMCBTdGFydC5tZGAuXG4gICAqL1xuICByZWFkb25seSByZWxhdGl2ZVBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcGFyc2VkIG1lbWJlcnMgb2YgYSBzb3VyY2UgaW50ZXJmYWNlLCBjbGFzcywgb3IgZW51bS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlcmZhY2VNZW1iZXJzIHtcbiAgLyoqXG4gICAqIEV2ZXJ5IG1lbWJlciBcdTIwMTQge0BsaW5rIEludGVyZmFjZU1lbWJlcnMubWV0aG9kc30gZm9sbG93ZWQgYnkge0BsaW5rIEludGVyZmFjZU1lbWJlcnMucHJvcGVydGllc30uXG4gICAqL1xuICByZWFkb25seSBhbGw6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgbWV0aG9kIG1lbWJlcnMgKGRlY2xhcmVkIGFzIGBuYW1lKC4uLilgKS5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGhvZHM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvcGVydHkgbWVtYmVycyAoZGVjbGFyZWQgYXMgYG5hbWU/OiAuLi5gKS5cbiAgICovXG4gIHJlYWRvbmx5IHByb3BlcnRpZXM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEEgbm90ZSBsaW5lIHBhaXJlZCB3aXRoIHRoZSBsaW5lIG51bWJlciBpdCBjYW1lIGZyb20sIHNvIGEgY2hlY2sgdGhhdCBza2lwcyBmZW5jZWQgYmxvY2tzIGNhbiBzdGlsbFxuICogcmVwb3J0IFx1MjAxNCBhbmQgYW4gaW5saW5lIGRpcmVjdGl2ZSBjYW4gc3RpbGwgbmFtZSBcdTIwMTQgdGhlIGxpbmUgYXMgdGhlIHJlYWRlciBzZWVzIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vdGVMaW5lIHtcbiAgLyoqXG4gICAqIFRoZSB6ZXJvLWJhc2VkIGxpbmUgbnVtYmVyIHdpdGhpbiB0aGUgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IGluZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBsaW5lJ3MgcmF3IHRleHQuXG4gICAqL1xuICByZWFkb25seSBsaW5lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBgZGlzYWJsZWAgcmVnaW9uIHRoYXQgaGFzIGJlZW4gb3BlbmVkIGFuZCBub3QgeWV0IGVuYWJsZWQgYWdhaW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3Blbldpa2lsaW5rRGlyZWN0aXZlUmVnaW9uIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHJlZ2lvbiBoYXMgY292ZXJlZCBhIHdpa2lsaW5rLCB3aGljaCBpcyB3aGF0IHN0b3BzIGl0IGJlaW5nIHJlcG9ydGVkIGFzIHBvaW50bGVzcy5cbiAgICovXG4gIGlzVXNlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGxpbmUgdGhlIHJlZ2lvbiB3YXMgb3BlbmVkIG9uLlxuICAgKi9cbiAgcmVhZG9ubHkgbGluZUluZGV4OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIHtAbGluayByZWdpc3RlckRlbW9WYXVsdENvdmVyYWdlU3VpdGV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdGVyRGVtb1ZhdWx0Q292ZXJhZ2VTdWl0ZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUdW5lcyB0aGUgYWx3YXlzLW9uIGF1dGhvcmluZyBjaGVja3MsIG9yIGB1bmRlZmluZWRgIHRvIHRha2UgdGhlaXIgZGVmYXVsdHMuIEl0IGNhbm5vdCBkaXNhYmxlIHRoZW0uXG4gICAqL1xuICByZWFkb25seSBhdXRob3Jpbmc/OiBEZW1vVmF1bHRBdXRob3JpbmdTcGVjO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlnIGludGVyZmFjZXMgd2hvc2Ugb3B0aW9ucyBtdXN0IGVhY2ggYmUgZGVtb25zdHJhdGVkIGJ5IHRoZWlyIGJhcmUgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IGNvbmZpZ0ludGVyZmFjZXM6IERlbW9WYXVsdENvbmZpZ0ludGVyZmFjZUNvdmVyYWdlU3BlY1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgZmVhdHVyZS1kb2MgbGlua2luZyBjaGVjaywgb3IgYHVuZGVmaW5lZGAgd2hlbiB0aGUgcGx1Z2luIHNoaXBzIG5vIGBkb2NzL2AgZm9sZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgZG9jcz86IERlbW9WYXVsdERvY3NDb3ZlcmFnZVNwZWM7XG5cbiAgLyoqXG4gICAqIFRoZSBtb2R1bGVzIHdob3NlIGBleHBvcnQgZnVuY3Rpb25gcyBtdXN0IGVhY2ggYmUgZGVtb25zdHJhdGVkIGJ5IHRoZWlyIGJhcmUgbmFtZSwgb3IgYHVuZGVmaW5lZGAgd2hlbiB0aGVcbiAgICogcGx1Z2luIGV4cG9zZXMgbm8gc3VjaCBtb2R1bGUgdG8gY2hlY2suXG4gICAqL1xuICByZWFkb25seSBmdW5jdGlvbk1vZHVsZXM/OiBEZW1vVmF1bHRGdW5jdGlvbnNDb3ZlcmFnZVNwZWNbXTtcblxuICAvKipcbiAgICogVGhlIGludGVyZmFjZXMgd2hvc2UgbWVtYmVycyBtdXN0IGVhY2ggYmUgZGVtb25zdHJhdGVkIChhbmQgcmVmZXJlbmNlZCB3aXRob3V0IGRyaWZ0KS5cbiAgICovXG4gIHJlYWRvbmx5IGludGVyZmFjZXM6IERlbW9WYXVsdEludGVyZmFjZUNvdmVyYWdlU3BlY1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgZ3VhcmQgdGhhdCBrZWVwcyB0aGUgcmVmbGVjdGVkIHN1cmZhY2Ugbm9uLXRyaXZpYWwuXG4gICAqL1xuICByZWFkb25seSBub25Ucml2aWFsR3VhcmQ6IERlbW9WYXVsdE5vblRyaXZpYWxHdWFyZFNwZWM7XG5cbiAgLyoqXG4gICAqIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBwbHVnaW4gcmVwbyByb290LiBDYWxsZXJzIHR5cGljYWxseSBwYXNzIGBnZXRSb290Rm9sZGVyKCkgPz8gcHJvY2Vzcy5jd2QoKWAuXG4gICAqL1xuICByZWFkb25seSByb290Rm9sZGVyOiBzdHJpbmc7XG59XG5cbi8qKlxuICogV2hhdCBhIG5vdGUncyBpbmxpbmUgYG9ic2lkaWFuLWRldi11dGlscy1kaXNhYmxlXHUyMDI2YCBkaXJlY3RpdmVzIGFsbG93LCBhbmQgd2hhdCBpcyB3cm9uZyB3aXRoIHRoZW0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2lraWxpbmtEaXJlY3RpdmVTY2FuIHtcbiAgLyoqXG4gICAqIFRoZSB6ZXJvLWJhc2VkIGxpbmUgbnVtYmVycyBhIGRpcmVjdGl2ZSBhbGxvd3MgYSB3aWtpbGluayBvbi5cbiAgICovXG4gIHJlYWRvbmx5IGFsbG93ZWRMaW5lSW5kZXhlczogUmVhZG9ubHlTZXQ8bnVtYmVyPjtcblxuICAvKipcbiAgICogVGhlIGRpcmVjdGl2ZSBtaXN0YWtlcyBmb3VuZCwgZWFjaCBwaHJhc2VkIGZvciBhIGZhaWxpbmcgYXNzZXJ0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvYmxlbXM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBydW5uaW5nIHN0YXRlIG9mIGEgZGlyZWN0aXZlIHNjYW4sIHRocmVhZGVkIHRocm91Z2ggdGhlIHBlci1saW5lIGhlbHBlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2lraWxpbmtEaXJlY3RpdmVTY2FuU3RhdGUge1xuICAvKipcbiAgICogVGhlIGxpbmVzIGEgZGlyZWN0aXZlIGhhcyBhbGxvd2VkIGEgd2lraWxpbmsgb24gc28gZmFyLlxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dlZExpbmVJbmRleGVzOiBTZXQ8bnVtYmVyPjtcblxuICAvKipcbiAgICogVGhlIHJlZ2lvbiBjdXJyZW50bHkgb3BlbiwgYW5kIHdoZXRoZXIgaXQgaGFzIGNvdmVyZWQgYSB3aWtpbGluayB5ZXQuXG4gICAqL1xuICBvcGVuUmVnaW9uOiBudWxsIHwgT3Blbldpa2lsaW5rRGlyZWN0aXZlUmVnaW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbGluZSBhIGBkaXNhYmxlLW5leHQtbGluZWAgd2FzIHJlYWQgb24sIHdoaWxlIGl0IHN0aWxsIHdhaXRzIGZvciB0aGUgbGluZSBpdCBjb3ZlcnMuXG4gICAqL1xuICBwZW5kaW5nTmV4dExpbmVJbmRleDogbnVsbCB8IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGRpcmVjdGl2ZSBtaXN0YWtlcyBmb3VuZCBzbyBmYXIuXG4gICAqL1xuICByZWFkb25seSBwcm9ibGVtczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBsaW5lcyBvZiB0aGUgbm90ZSB0aGF0IGNhcnJ5IGEgd2lraWxpbmsuXG4gICAqL1xuICByZWFkb25seSB3aWtpbGlua0xpbmVJbmRleGVzOiBSZWFkb25seVNldDxudW1iZXI+O1xufVxuXG4vKipcbiAqIFJlZmxlY3RzIGEgcGx1Z2luJ3MgcHVibGljIHN1cmZhY2UgZnJvbSBzb3VyY2UgYW5kIGNoZWNrcyBpdHMgaW4tcmVwbyBgZGVtby12YXVsdC9gIHN0YXlzIGluIHN5bmMgd2l0aCBpdC5cbiAqXG4gKiBFdmVyeSBtZXRob2QgaXMgYSBwdXJlIHF1ZXJ5IG92ZXIgZmlsZXMgdW5kZXIgdGhlIHJlcG8gcm9vdCAodGhlIGRlbW8gY29ycHVzIGlzIHJlYWQgb25jZSBhbmQgY2FjaGVkKSwgc29cbiAqIHRoZSBjaGVja2VyIGlzIHRyaXZpYWxseSB1bml0LXRlc3RhYmxlIGFnYWluc3QgYSBmaXh0dXJlIHJlcG8gYW5kIGNhcnJpZXMgbm8gdGVzdC1mcmFtZXdvcmsgZGVwZW5kZW5jeS5cbiAqL1xuZXhwb3J0IGNsYXNzIERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlciB7XG4gIHByaXZhdGUgY2FjaGVkQ29ycHVzOiBudWxsIHwgc3RyaW5nID0gbnVsbDtcbiAgcHJpdmF0ZSBjYWNoZWROb3RlczogRGVtb1ZhdWx0Tm90ZVtdIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVtb1ZhdWx0Rm9sZGVyOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhjbHVkZWROb3RlczogU2V0PHN0cmluZz47XG4gIHByaXZhdGUgcmVhZG9ubHkgcm9vdEZvbGRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY2hlY2tlciByb290ZWQgYXQgYSBwbHVnaW4gcmVwby5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY29uc3RydWN0b3IuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHRoaXMucm9vdEZvbGRlciA9IHBhcmFtcy5yb290Rm9sZGVyO1xuICAgIHRoaXMuZGVtb1ZhdWx0Rm9sZGVyID0gam9pbih0aGlzLnJvb3RGb2xkZXIsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRlbW9WYXVsdCk7XG4gICAgdGhpcy5leGNsdWRlZE5vdGVzID0gbmV3IFNldChwYXJhbXMuZXhjbHVkZWROb3RlcyA/PyBERUZBVUxUX0VYQ0xVREVEX05PVEVTKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0cyB0aGUgZGVtbyBub3RlcyBhcyBwYXRocyByZWxhdGl2ZSB0byB0aGUgZGVtbyB2YXVsdCBmb2xkZXIgKGZvciBhIG5vbi10cml2aWFsLXN1cmZhY2UgZ3VhcmQpLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgcmVsYXRpdmUgcGF0aHMgb2YgZXZlcnkgYCoubWRgIG5vdGUgaW4gdGhlIGRlbW8gdmF1bHQuXG4gICAqL1xuICBwdWJsaWMgY29sbGVjdERlbW9Ob3RlUmVsYXRpdmVQYXRocygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdE5vdGVzKCkubWFwKChub3RlKSA9PiBub3RlLnJlbGF0aXZlUGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogUmVhZHMgYW5kIGNhY2hlcyBldmVyeSBkZW1vIG5vdGUgaW5kaXZpZHVhbGx5IFx1MjAxNCB0aGUgcGVyLW5vdGUgdmlldyB0aGUgYXV0aG9yaW5nIGNoZWNrcyB3b3JrIG9uLCBhc1xuICAgKiBvcHBvc2VkIHRvIHRoZSBjb25jYXRlbmF0ZWQge0BsaW5rIERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlci5yZWFkQ29ycHVzfS5cbiAgICpcbiAgICogQHJldHVybnMgRXZlcnkgYCoubWRgIG5vdGUgaW4gdGhlIGRlbW8gdmF1bHQsIGV4Y2x1ZGVkIG9uZXMgaW5jbHVkZWQuXG4gICAqL1xuICBwdWJsaWMgY29sbGVjdE5vdGVzKCk6IERlbW9WYXVsdE5vdGVbXSB7XG4gICAgdGhpcy5jYWNoZWROb3RlcyA/Pz0gdGhpcy5jb2xsZWN0TWFya2Rvd25GaWxlcyh0aGlzLmRlbW9WYXVsdEZvbGRlcikubWFwKChmaWxlKSA9PiAoe1xuICAgICAgY29udGVudDogcmVhZEZpbGVTeW5jKGZpbGUsICd1dGYtOCcpLFxuICAgICAgcmVsYXRpdmVQYXRoOiByZWxhdGl2ZSh0aGlzLmRlbW9WYXVsdEZvbGRlciwgZmlsZSlcbiAgICB9KSk7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVkTm90ZXM7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgbm90ZXMgY2FycnlpbmcgYSBgW0RvY3NdKFx1MjAyNilgIGxpbmsgbGluZS4gVGhlIG5vdGUgSVMgdGhlIGRvY3VtZW50YXRpb24sIHNvIGEgbGluZSBwb2ludGluZ1xuICAgKiBlbHNld2hlcmUgZm9yIHRoZSByZWFsIGV4cGxhbmF0aW9uIGlzIHRoZSBzaGFwZSB0aGlzIGNvbnZlbnRpb24gZXhpc3RzIHRvIHJlbW92ZS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHJlbGF0aXZlIHBhdGhzIG9mIHRoZSBvZmZlbmRpbmcgbm90ZXMuXG4gICAqL1xuICBwdWJsaWMgZmluZE5vdGVzV2l0aERvY3NMaW5rcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdENoZWNrYWJsZU5vdGVzKClcbiAgICAgIC5maWx0ZXIoKG5vdGUpID0+IGdldExpbmVzT3V0c2lkZUZlbmNlcyhub3RlLmNvbnRlbnQpLnNvbWUoKGxpbmUpID0+IERPQ1NfTElOS19SRUdfRVhQLnRlc3QobGluZSkpKVxuICAgICAgLm1hcCgobm90ZSkgPT4gbm90ZS5yZWxhdGl2ZVBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIG5vdGVzIHRoYXQgZG8gbm90IG9wZW4gd2l0aCBhbiBgIyBIMWAgKGZyb250bWF0dGVyIGFzaWRlKS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHJlbGF0aXZlIHBhdGhzIG9mIHRoZSBvZmZlbmRpbmcgbm90ZXMuXG4gICAqL1xuICBwdWJsaWMgZmluZE5vdGVzV2l0aG91dEgxKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0Q2hlY2thYmxlTm90ZXMoKVxuICAgICAgLmZpbHRlcigobm90ZSkgPT4gIWhhc0gxKG5vdGUuY29udGVudCkpXG4gICAgICAubWFwKChub3RlKSA9PiBub3RlLnJlbGF0aXZlUGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgbm90ZXMgd2l0aCBubyBwcm9zZSBwYXJhZ3JhcGggYmVmb3JlIHRoZWlyIGZpcnN0IGNvZGUgZmVuY2UgXHUyMDE0IHRoZSAxLTMgc2VudGVuY2VzIHNheWluZyB3aGF0IHRoZVxuICAgKiBmZWF0dXJlIGRvZXMgYW5kIHdoeSBhIHJlYWRlciB3b3VsZCB3YW50IGl0LCB3aXRob3V0IHdoaWNoIHRoZSBub3RlIGlzIGEgYnV0dG9uIHdpdGggbm8gbGVzc29uLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgcmVsYXRpdmUgcGF0aHMgb2YgdGhlIG9mZmVuZGluZyBub3Rlcy5cbiAgICovXG4gIHB1YmxpYyBmaW5kTm90ZXNXaXRob3V0SW50cm9Qcm9zZSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdENoZWNrYWJsZU5vdGVzKClcbiAgICAgIC5maWx0ZXIoKG5vdGUpID0+ICFoYXNJbnRyb1Byb3NlKG5vdGUuY29udGVudCkpXG4gICAgICAubWFwKChub3RlKSA9PiBub3RlLnJlbGF0aXZlUGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgbm90ZXMgd2hvc2Ugd2lraWxpbmsgYWxsb3dhbmNlIGlzIG5vdCBkb2luZyBhbnkgd29yayBcdTIwMTQgZGVjbGFyZWQgd2l0aG91dCBhIHJlYXNvbiwgb3Igb24gYSBub3RlXG4gICAqIHRoYXQgY2FycmllcyBubyB3aWtpbGluayBhdCBhbGwuIEJvdGggYXJlIGRyaWZ0OiBhbiBleGVtcHRpb24gbm9ib2R5IGNhbiBqdXN0aWZ5LCBhbmQgb25lIG5vdGhpbmcgbmVlZHNcbiAgICogYW55IG1vcmUsIHdoaWNoIHdvdWxkIGdvIG9uIGhpZGluZyB0aGUgbmV4dCB3aWtpbGluayBzb21lYm9keSBhZGRzIGJ5IGFjY2lkZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgcmVsYXRpdmUgcGF0aHMgb2YgdGhlIG9mZmVuZGluZyBub3Rlcy5cbiAgICovXG4gIHB1YmxpYyBmaW5kTm90ZXNXaXRoVW5qdXN0aWZpZWRXaWtpbGlua0FsbG93YW5jZSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdENoZWNrYWJsZU5vdGVzKCkuZmxhdE1hcCgobm90ZSkgPT4ge1xuICAgICAgY29uc3Qgc2NhbiA9IHNjYW5XaWtpbGlua0RpcmVjdGl2ZXMobm90ZS5jb250ZW50KTtcbiAgICAgIGNvbnN0IHByb2JsZW1zID0gWy4uLnNjYW4ucHJvYmxlbXNdO1xuICAgICAgY29uc3QgcmVhc29uID0gcmVhZFdpa2lsaW5rQWxsb3dhbmNlUmVhc29uKG5vdGUuY29udGVudCk7XG4gICAgICBpZiAocmVhc29uICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChyZWFzb24udHJpbSgpID09PSAnJykge1xuICAgICAgICAgIHByb2JsZW1zLnB1c2goJ2Egbm90ZS1sZXZlbCBhbGxvd2FuY2Ugd2l0aCBubyByZWFzb24nKTtcbiAgICAgICAgfSBlbHNlIGlmICghaGFzV2lraWxpbmsobm90ZS5jb250ZW50KSkge1xuICAgICAgICAgIHByb2JsZW1zLnB1c2goJ2Egbm90ZS1sZXZlbCBhbGxvd2FuY2UgY292ZXJpbmcgbm8gd2lraWxpbmsnKTtcbiAgICAgICAgfSBlbHNlIGlmIChzY2FuLmFsbG93ZWRMaW5lSW5kZXhlcy5zaXplID4gMCkge1xuICAgICAgICAgIHByb2JsZW1zLnB1c2goJ2lubGluZSBkaXJlY3RpdmVzIHRoZSBub3RlLWxldmVsIGFsbG93YW5jZSBhbHJlYWR5IGNvdmVycycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvYmxlbXMubWFwKChwcm9ibGVtKSA9PiBgJHtub3RlLnJlbGF0aXZlUGF0aH06ICR7cHJvYmxlbX1gKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBub3RlcyB1c2luZyBhbiBPYnNpZGlhbiBgW1t3aWtpbGlua11dYCBvdXRzaWRlIGEgY29kZSBmZW5jZS4gVGhlIGRlbW8gdmF1bHQgaXMgYWxzbyByZWFkIG9uXG4gICAqIEdpdEh1Yiwgd2hlcmUgYSB3aWtpbGluayByZW5kZXJzIGFzIGxpdGVyYWwgYnJhY2tldHMgYW5kIGxlYWRzIG5vd2hlcmUuIEEgd2lraWxpbmsgc2hvd24gSU5TSURFIGFcbiAgICogZmVuY2UgaXMgc2FtcGxlIHRleHQsIG5vdCBuYXZpZ2F0aW9uLCBzbyBmZW5jZWQgYmxvY2tzIGFyZSBza2lwcGVkLCBhcyBpcyBhIG5vdGUgdGhhdCBkZWNsYXJlcyBpbiBpdHNcbiAgICogZnJvbnRtYXR0ZXIgd2h5IGl0cyB3aWtpbGlua3MgYXJlIHRoZSBwb2ludCBcdTIwMTQgc2VlIHRoZSBmaWxlIG92ZXJ2aWV3LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgcmVsYXRpdmUgcGF0aHMgb2YgdGhlIG9mZmVuZGluZyBub3Rlcy5cbiAgICovXG4gIHB1YmxpYyBmaW5kTm90ZXNXaXRoV2lraWxpbmtzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0Q2hlY2thYmxlTm90ZXMoKVxuICAgICAgLmZpbHRlcigobm90ZSkgPT4ge1xuICAgICAgICBpZiAocmVhZFdpa2lsaW5rQWxsb3dhbmNlUmVhc29uKG5vdGUuY29udGVudCkgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBhbGxvd2VkTGluZUluZGV4ZXMgfSA9IHNjYW5XaWtpbGlua0RpcmVjdGl2ZXMobm90ZS5jb250ZW50KTtcbiAgICAgICAgcmV0dXJuIGZpbmRXaWtpbGlua0xpbmVJbmRleGVzKG5vdGUuY29udGVudCkuc29tZSgobGluZUluZGV4KSA9PiAhYWxsb3dlZExpbmVJbmRleGVzLmhhcyhsaW5lSW5kZXgpKTtcbiAgICAgIH0pXG4gICAgICAubWFwKChub3RlKSA9PiBub3RlLnJlbGF0aXZlUGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgbWVtYmVycyB0aGF0IHRoZSBkZW1vIG5vdGVzIHJlZmVyZW5jZSBvbiBhIHJlY2VpdmVyIGJ1dCB0aGF0IG5vIGxvbmdlciBleGlzdCBvbiBpdCAocmVuYW1lIGRyaWZ0KS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgbG9va3VwLlxuICAgKiBAcmV0dXJucyBUaGUgZGlzdGluY3Qgc3RhbGUgbWVtYmVyIG5hbWVzIHJlZmVyZW5jZWQgaW4gdGhlIGRlbW8gY29ycHVzLlxuICAgKi9cbiAgcHVibGljIGZpbmRTdGFsZVJlZmVyZW5jZXMocGFyYW1zOiBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJGaW5kU3RhbGVSZWZlcmVuY2VzUGFyYW1zKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHZhbGlkTWVtYmVycyA9IG5ldyBTZXQocGFyYW1zLnZhbGlkTWVtYmVycyk7XG4gICAgY29uc3QgcmVmZXJlbmNlZCA9IFsuLi50aGlzLnJlYWRDb3JwdXMoKS5tYXRjaEFsbChuZXcgUmVnRXhwKFN0cmluZy5yYXdgJHtwYXJhbXMucmVjZWl2ZXJ9XFwuKD88bWVtYmVyPlxcdyspYCwgJ2cnKSldXG4gICAgICAubWFwKChtYXRjaCkgPT4gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ21lbWJlcicpKTtcbiAgICByZXR1cm4gWy4uLm5ldyBTZXQocmVmZXJlbmNlZCldLmZpbHRlcigobWVtYmVyKSA9PiAhdmFsaWRNZW1iZXJzLmhhcyhtZW1iZXIpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBtZW1iZXJzIHRoYXQgYXJlIG5vdCBkZW1vbnN0cmF0ZWQgYW55d2hlcmUgaW4gdGhlIGRlbW8gY29ycHVzLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBsb29rdXAuXG4gICAqIEByZXR1cm5zIFRoZSBtZW1iZXIgbmFtZXMgd2l0aCBubyBkZW1vbnN0cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGZpbmRVbmRlbW9uc3RyYXRlZE1lbWJlcnMocGFyYW1zOiBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJGaW5kVW5kZW1vbnN0cmF0ZWRNZW1iZXJzUGFyYW1zKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGNvcnB1cyA9IHRoaXMucmVhZENvcnB1cygpO1xuICAgIHJldHVybiBwYXJhbXMubWVtYmVycy5maWx0ZXIoKG1lbWJlcikgPT4ge1xuICAgICAgY29uc3QgbmVlZGxlID0gcGFyYW1zLnJlY2VpdmVyID09PSB1bmRlZmluZWQgPyBtZW1iZXIgOiBgJHtwYXJhbXMucmVjZWl2ZXJ9LiR7bWVtYmVyfWA7XG4gICAgICByZXR1cm4gIWNvcnB1cy5pbmNsdWRlcyhuZWVkbGUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIGZlYXR1cmUgZG9jcyB0aGF0IG5vIGRlbW8gbm90ZSBsaW5rcyB0by5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgbG9va3VwLlxuICAgKiBAcmV0dXJucyBUaGUgZmVhdHVyZS1kb2MgYmFzZW5hbWVzICh3aXRob3V0IGAubWRgKSBub3QgbGlua2VkIGZyb20gYW55IGRlbW8gbm90ZS5cbiAgICovXG4gIHB1YmxpYyBmaW5kVW5saW5rZWRGZWF0dXJlRG9jcyhwYXJhbXM6IERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlckZpbmRVbmxpbmtlZEZlYXR1cmVEb2NzUGFyYW1zKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IG5vbkZlYXR1cmVEb2NzID0gbmV3IFNldChwYXJhbXMubm9uRmVhdHVyZURvY3MpO1xuICAgIGNvbnN0IGZlYXR1cmVEb2NzID0gcmVhZGRpclN5bmMoam9pbih0aGlzLnJvb3RGb2xkZXIsIHBhcmFtcy5kb2NzRm9sZGVyKSlcbiAgICAgIC5maWx0ZXIoKGZpbGUpID0+IGZpbGUuZW5kc1dpdGgoJy5tZCcpKVxuICAgICAgLm1hcCgoZmlsZSkgPT4gZmlsZS5yZXBsYWNlKC9cXC5tZCQvLCAnJykpXG4gICAgICAuZmlsdGVyKChuYW1lKSA9PiAhbm9uRmVhdHVyZURvY3MuaGFzKG5hbWUpKTtcbiAgICBjb25zdCBsaW5rZWREb2NzID0gbmV3IFNldChcbiAgICAgIFsuLi50aGlzLnJlYWRDb3JwdXMoKS5tYXRjaEFsbCgvZG9jc1xcLyg/PGRvYz5bXFx3LV0rKVxcLm1kL2cpXS5tYXAoKG1hdGNoKSA9PiBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnZG9jJykpXG4gICAgKTtcbiAgICByZXR1cm4gZmVhdHVyZURvY3MuZmlsdGVyKChkb2MpID0+ICFsaW5rZWREb2NzLmhhcyhkb2MpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBub3RlcyB0aGF0IGNhbm5vdCBiZSByZWFjaGVkIGZyb20gdGhlIHN0YXJ0IG5vdGUgYnkgZm9sbG93aW5nIE1hcmtkb3duIGxpbmtzIGJldHdlZW4gbm90ZXMuXG4gICAqXG4gICAqIFRoZSB3YWxrIHN0YXJ0cyBhdCB7QGxpbmsgRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyRmluZFVucmVhY2hhYmxlTm90ZXNQYXJhbXMuc3RhcnROb3RlfSBhbmQgZm9sbG93c1xuICAgKiBldmVyeSBgW1RleHRdKDwuL05OIE5hbWUubWQ+KWAgbGluayBvdXRzaWRlIGEgY29kZSBmZW5jZSwgdHJhbnNpdGl2ZWx5LiBBIG5vdGUgbm90aGluZyBsaW5rcyB0byBpc1xuICAgKiBvbmUgYSByZWFkZXIgY2FuIG9ubHkgZmluZCBieSBicm93c2luZyB0aGUgZmlsZSBsaXN0IFx1MjAxNCB3aGljaCBpcyBleGFjdGx5IHdoYXQgdGhlIGdyb3VwZWQgaW5kZXggaW4gdGhlXG4gICAqIHN0YXJ0IG5vdGUgaXMgbWVhbnQgdG8gcmVwbGFjZS4gV2hlbiB0aGUgc3RhcnQgbm90ZSBpdHNlbGYgaXMgbWlzc2luZywgRVZFUlkgbm90ZSBpcyB1bnJlYWNoYWJsZSxcbiAgICogYmVjYXVzZSB0aGVyZSBpcyBub3doZXJlIHRvIHN0YXJ0IGZyb20uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHdhbGsuXG4gICAqIEByZXR1cm5zIFRoZSByZWxhdGl2ZSBwYXRocyBvZiB0aGUgdW5yZWFjaGFibGUgbm90ZXMuXG4gICAqL1xuICBwdWJsaWMgZmluZFVucmVhY2hhYmxlTm90ZXMocGFyYW1zOiBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJGaW5kVW5yZWFjaGFibGVOb3Rlc1BhcmFtcyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBub3Rlc0J5UmVsYXRpdmVQYXRoID0gbmV3IE1hcCh0aGlzLmNvbGxlY3ROb3RlcygpLm1hcCgobm90ZSkgPT4gW25vdGUucmVsYXRpdmVQYXRoLCBub3RlXSkpO1xuICAgIGNvbnN0IHJlYWNoZWROb3RlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IHBlbmRpbmdOb3RlcyA9IFtwYXJhbXMuc3RhcnROb3RlXTtcblxuICAgIHdoaWxlIChwZW5kaW5nTm90ZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgbm90ZVBhdGggPSBlbnN1cmVOb25OdWxsYWJsZShwZW5kaW5nTm90ZXMucG9wKCkpO1xuICAgICAgY29uc3Qgbm90ZSA9IG5vdGVzQnlSZWxhdGl2ZVBhdGguZ2V0KG5vdGVQYXRoKTtcbiAgICAgIGlmICghbm90ZSB8fCByZWFjaGVkTm90ZXMuaGFzKG5vdGVQYXRoKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJlYWNoZWROb3Rlcy5hZGQobm90ZVBhdGgpO1xuICAgICAgcGVuZGluZ05vdGVzLnB1c2goLi4uY29sbGVjdE5vdGVMaW5rVGFyZ2V0cyhub3RlKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdENoZWNrYWJsZU5vdGVzKClcbiAgICAgIC5tYXAoKG5vdGUpID0+IG5vdGUucmVsYXRpdmVQYXRoKVxuICAgICAgLmZpbHRlcigobm90ZVBhdGgpID0+ICFyZWFjaGVkTm90ZXMuaGFzKG5vdGVQYXRoKSk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIHRoZSBuYW1lcyBvZiB0aGUgYGV4cG9ydCBmdW5jdGlvbmBzIChpbmNsdWRpbmcgYGFzeW5jYCBhbmQgZ2VuZXJhdG9yIGRlY2xhcmF0aW9ucykgaW4gYSBzb3VyY2UgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgbG9va3VwLlxuICAgKiBAcmV0dXJucyBUaGUgZXhwb3J0ZWQgZnVuY3Rpb24gbmFtZXMgaW4gc291cmNlIG9yZGVyLlxuICAgKi9cbiAgcHVibGljIGdldEV4cG9ydGVkRnVuY3Rpb25OYW1lcyhwYXJhbXM6IERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlckdldEV4cG9ydGVkRnVuY3Rpb25OYW1lc1BhcmFtcyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzb3VyY2UgPSByZWFkRmlsZVN5bmMoam9pbih0aGlzLnJvb3RGb2xkZXIsIHBhcmFtcy5zb3VyY2VQYXRoKSwgJ3V0Zi04Jyk7XG4gICAgcmV0dXJuIFsuLi5zb3VyY2UubWF0Y2hBbGwoL15leHBvcnQgKD86YXN5bmMgKT9mdW5jdGlvblxcKj8gKD88bmFtZT5cXHcrKS9nbSldXG4gICAgICAubWFwKChtYXRjaCkgPT4gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ25hbWUnKSk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIHRoZSBtZW1iZXJzIG9mIGFuIGBleHBvcnQgaW50ZXJmYWNlYCwgYGV4cG9ydCBjbGFzc2AsIG9yIGBleHBvcnQgZW51bWAgZGVjbGFyZWQgaW4gYSBzb3VyY2UgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgbG9va3VwLlxuICAgKiBAcmV0dXJucyBUaGUgcGFyc2VkIHtAbGluayBJbnRlcmZhY2VNZW1iZXJzfS5cbiAgICogQHRocm93cyBXaGVuIHRoZSBpbnRlcmZhY2UsIGNsYXNzLCBvciBlbnVtIGNhbm5vdCBiZSBmb3VuZCBpbiB0aGUgc291cmNlIGZpbGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0SW50ZXJmYWNlTWVtYmVycyhwYXJhbXM6IERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlckdldEludGVyZmFjZU1lbWJlcnNQYXJhbXMpOiBJbnRlcmZhY2VNZW1iZXJzIHtcbiAgICBjb25zdCBzb3VyY2UgPSByZWFkRmlsZVN5bmMoam9pbih0aGlzLnJvb3RGb2xkZXIsIHBhcmFtcy5zb3VyY2VQYXRoKSwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgbWF0Y2ggPSBuZXcgUmVnRXhwKFN0cmluZy5yYXdgZXhwb3J0ICg/PGtleXdvcmQ+aW50ZXJmYWNlfGNsYXNzfGVudW0pICR7cGFyYW1zLmludGVyZmFjZU5hbWV9XFxiW157XSpcXHsoPzxib2R5PltcXHNcXFNdKj8pXFxuXFx9YCkuZXhlYyhzb3VyY2UpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgaW50ZXJmYWNlICR7cGFyYW1zLmludGVyZmFjZU5hbWV9YCk7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZU1lbWJlcnMoZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ2tleXdvcmQnKSwgZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ2JvZHknKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVhZHMgYW5kIGNhY2hlcyB0aGUgZGVtbyBjb3JwdXMgXHUyMDE0IGV2ZXJ5IGAqLm1kYCBub3RlIGluIHRoZSBkZW1vIHZhdWx0IGpvaW5lZCBpbnRvIG9uZSBzdHJpbmcuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBjb25jYXRlbmF0ZWQgZGVtby1ub3RlIGNvbnRlbnRzLlxuICAgKi9cbiAgcHVibGljIHJlYWRDb3JwdXMoKTogc3RyaW5nIHtcbiAgICB0aGlzLmNhY2hlZENvcnB1cyA/Pz0gdGhpcy5jb2xsZWN0Tm90ZXMoKVxuICAgICAgLm1hcCgobm90ZSkgPT4gbm90ZS5jb250ZW50KVxuICAgICAgLmpvaW4oJ1xcbicpO1xuICAgIHJldHVybiB0aGlzLmNhY2hlZENvcnB1cztcbiAgfVxuXG4gIC8vIFRoZSBub3RlcyB0aGUgYXV0aG9yaW5nIGNoZWNrcyBhcHBseSB0bzogZXZlcnkgbm90ZSBleGNlcHQgdGhlIG9uZXMgZGVjbGFyZWQgb3V0c2lkZSB0aGUgbGVhcm5pbmdcbiAgLy8gUGF0aCAodGhlIHZhdWx0J3Mgb3duIGBSRUFETUUubWRgIGJ5IGRlZmF1bHQpLlxuICBwcml2YXRlIGNvbGxlY3RDaGVja2FibGVOb3RlcygpOiBEZW1vVmF1bHROb3RlW10ge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3ROb3RlcygpLmZpbHRlcigobm90ZSkgPT4gIXRoaXMuZXhjbHVkZWROb3Rlcy5oYXMobm90ZS5yZWxhdGl2ZVBhdGgpKTtcbiAgfVxuXG4gIHByaXZhdGUgY29sbGVjdE1hcmtkb3duRmlsZXMoZm9sZGVyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgcmVhZGRpclN5bmMoZm9sZGVyLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSkpIHtcbiAgICAgIGlmIChlbnRyeS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIGlmIChlbnRyeS5uYW1lID09PSBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5Ob2RlTW9kdWxlcyBhcyBzdHJpbmcpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQucHVzaCguLi50aGlzLmNvbGxlY3RNYXJrZG93bkZpbGVzKGpvaW4oZm9sZGVyLCBlbnRyeS5uYW1lKSkpO1xuICAgICAgfSBlbHNlIGlmIChlbnRyeS5uYW1lLmVuZHNXaXRoKCcubWQnKSkge1xuICAgICAgICByZXN1bHQucHVzaChqb2luKGZvbGRlciwgZW50cnkubmFtZSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgYHZpdGVzdGAgc3VpdGUgdGhhdCBrZWVwcyBhIHBsdWdpbidzIGluLXJlcG8gYGRlbW8tdmF1bHQvYCBpbiBzeW5jIHdpdGggaXRzIHB1YmxpYyBzdXJmYWNlLlxuICpcbiAqIENhbGwgaXQgb25jZSBmcm9tIGEgcGx1Z2luJ3MgYGRlbW8tdmF1bHQubm8tYXBwLmludGVncmF0aW9uLnRlc3QudHNgOyBpdCByZWdpc3RlcnMgb25lIHRlc3QgcGVyIGNoZWNrLFxuICogZGVsZWdhdGluZyB0byB7QGxpbmsgRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyfS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGRlY2xhcmF0aXZlIGNvdmVyYWdlIHNwZWNpZmljYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckRlbW9WYXVsdENvdmVyYWdlU3VpdGUocGFyYW1zOiBSZWdpc3RlckRlbW9WYXVsdENvdmVyYWdlU3VpdGVQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgY2hlY2tlciA9IG5ldyBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXIobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlckNvbnN0cnVjdG9yUGFyYW1zPih7XG4gICAgZXhjbHVkZWROb3RlczogcGFyYW1zLmF1dGhvcmluZz8uZXhjbHVkZWROb3RlcyxcbiAgICByb290Rm9sZGVyOiBwYXJhbXMucm9vdEZvbGRlclxuICB9KSk7XG4gIGNvbnN0IHN0YXJ0Tm90ZSA9IHBhcmFtcy5hdXRob3Jpbmc/LnN0YXJ0Tm90ZSA/PyBERUZBVUxUX1NUQVJUX05PVEU7XG5cbiAgZGVzY3JpYmUoJ2RlbW8tdmF1bHQgY292ZXJhZ2UnLCAoKSA9PiB7XG4gICAgZm9yIChjb25zdCBzcGVjIG9mIHBhcmFtcy5pbnRlcmZhY2VzKSB7XG4gICAgICBpdChgZGVtb25zdHJhdGVzIGV2ZXJ5ICR7c3BlYy5pbnRlcmZhY2VOYW1lfSAke3NwZWMua2luZH1gLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lbWJlcnMgPSBjaGVja2VyLmdldEludGVyZmFjZU1lbWJlcnMoc3BlYyk7XG4gICAgICAgIGNvbnN0IGRlbW9uc3RyYXRlZCA9IG1lbWJlcnNbc3BlYy5raW5kXTtcbiAgICAgICAgZXhwZWN0KGRlbW9uc3RyYXRlZC5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigwKTtcbiAgICAgICAgZXhwZWN0KGNoZWNrZXIuZmluZFVuZGVtb25zdHJhdGVkTWVtYmVycyh7IG1lbWJlcnM6IGRlbW9uc3RyYXRlZCwgcmVjZWl2ZXI6IHNwZWMucmVjZWl2ZXIgfSkpLnRvRXF1YWwoW10pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KGByZWZlcmVuY2VzIG5vICR7c3BlYy5pbnRlcmZhY2VOYW1lfSBtZW1iZXIgdGhhdCBubyBsb25nZXIgZXhpc3RzYCwgKCkgPT4ge1xuICAgICAgICBjb25zdCBtZW1iZXJzID0gY2hlY2tlci5nZXRJbnRlcmZhY2VNZW1iZXJzKHNwZWMpO1xuICAgICAgICBleHBlY3QoY2hlY2tlci5maW5kU3RhbGVSZWZlcmVuY2VzKHsgcmVjZWl2ZXI6IHNwZWMucmVjZWl2ZXIsIHZhbGlkTWVtYmVyczogbWVtYmVycy5hbGwgfSkpLnRvRXF1YWwoW10pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzcGVjIG9mIHBhcmFtcy5jb25maWdJbnRlcmZhY2VzKSB7XG4gICAgICBpdChgZGVtb25zdHJhdGVzIGV2ZXJ5ICR7c3BlYy5pbnRlcmZhY2VOYW1lfSBvcHRpb25gLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lbWJlcnMgPSBjaGVja2VyLmdldEludGVyZmFjZU1lbWJlcnMoc3BlYyk7XG4gICAgICAgIGV4cGVjdChtZW1iZXJzLnByb3BlcnRpZXMubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oMCk7XG4gICAgICAgIGV4cGVjdChjaGVja2VyLmZpbmRVbmRlbW9uc3RyYXRlZE1lbWJlcnMoeyBtZW1iZXJzOiBtZW1iZXJzLnByb3BlcnRpZXMgfSkpLnRvRXF1YWwoW10pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzcGVjIG9mIHBhcmFtcy5mdW5jdGlvbk1vZHVsZXMgPz8gW10pIHtcbiAgICAgIGl0KGBkZW1vbnN0cmF0ZXMgZXZlcnkgZXhwb3J0ZWQgZnVuY3Rpb24gaW4gJHtzcGVjLnNvdXJjZVBhdGh9YCwgKCkgPT4ge1xuICAgICAgICBjb25zdCBmdW5jdGlvbk5hbWVzID0gY2hlY2tlci5nZXRFeHBvcnRlZEZ1bmN0aW9uTmFtZXMoc3BlYyk7XG4gICAgICAgIGV4cGVjdChmdW5jdGlvbk5hbWVzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApO1xuICAgICAgICBleHBlY3QoY2hlY2tlci5maW5kVW5kZW1vbnN0cmF0ZWRNZW1iZXJzKHsgbWVtYmVyczogZnVuY3Rpb25OYW1lcyB9KSkudG9FcXVhbChbXSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBkb2NzID0gcGFyYW1zLmRvY3M7XG4gICAgaWYgKGRvY3MpIHtcbiAgICAgIGl0KCdsaW5rcyBhIGRlbW8gbm90ZSBmb3IgZXZlcnkgZmVhdHVyZSBkb2MnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChjaGVja2VyLmZpbmRVbmxpbmtlZEZlYXR1cmVEb2NzKHsgZG9jc0ZvbGRlcjogZG9jcy5mb2xkZXIsIG5vbkZlYXR1cmVEb2NzOiBkb2NzLm5vbkZlYXR1cmVEb2NzIH0pKVxuICAgICAgICAgIC50b0VxdWFsKFtdKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGl0KCdvcGVucyBldmVyeSBub3RlIHdpdGggYW4gSDEnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoY2hlY2tlci5maW5kTm90ZXNXaXRob3V0SDEoKSkudG9FcXVhbChbXSk7XG4gICAgfSk7XG5cbiAgICBpdCgnb3BlbnMgZXZlcnkgbm90ZSB3aXRoIGEgcHJvc2UgcGFyYWdyYXBoIGJlZm9yZSBpdHMgZmlyc3QgY29kZSBibG9jaycsICgpID0+IHtcbiAgICAgIGV4cGVjdChjaGVja2VyLmZpbmROb3Rlc1dpdGhvdXRJbnRyb1Byb3NlKCkpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgaXQoYHJlYWNoZXMgZXZlcnkgbm90ZSBmcm9tICR7c3RhcnROb3RlfWAsICgpID0+IHtcbiAgICAgIGV4cGVjdChjaGVja2VyLmZpbmRVbnJlYWNoYWJsZU5vdGVzKHsgc3RhcnROb3RlIH0pKS50b0VxdWFsKFtdKTtcbiAgICB9KTtcblxuICAgIGl0KCd1c2VzIG5vIHdpa2lsaW5rcywgd2hpY2ggZG8gbm90IHJlbmRlciBvbiBHaXRIdWInLCAoKSA9PiB7XG4gICAgICBleHBlY3QoY2hlY2tlci5maW5kTm90ZXNXaXRoV2lraWxpbmtzKCkpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2p1c3RpZmllcyBldmVyeSB3aWtpbGluayBhbGxvd2FuY2UsIGFuZCBkZWNsYXJlcyBub25lIGl0IG5vIGxvbmdlciBuZWVkcycsICgpID0+IHtcbiAgICAgIGV4cGVjdChjaGVja2VyLmZpbmROb3Rlc1dpdGhVbmp1c3RpZmllZFdpa2lsaW5rQWxsb3dhbmNlKCkpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NhcnJpZXMgbm8gRG9jcyBsaW5rIGxpbmUsIGJlY2F1c2UgdGhlIG5vdGUgaXMgdGhlIGRvY3MnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoY2hlY2tlci5maW5kTm90ZXNXaXRoRG9jc0xpbmtzKCkpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2tlZXBzIHRoZSByZWZsZWN0ZWQgc3VyZmFjZSBub24tdHJpdmlhbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGd1YXJkID0gcGFyYW1zLm5vblRyaXZpYWxHdWFyZDtcbiAgICAgIGNvbnN0IG1lbWJlcnMgPSBjaGVja2VyLmdldEludGVyZmFjZU1lbWJlcnMoZ3VhcmQpO1xuICAgICAgZXhwZWN0KG1lbWJlcnMuYWxsKS50b0NvbnRhaW4oZ3VhcmQuZXhwZWN0TWVtYmVyKTtcbiAgICAgIGV4cGVjdChjaGVja2VyLmNvbGxlY3REZW1vTm90ZVJlbGF0aXZlUGF0aHMoKSkudG9Db250YWluKGd1YXJkLmV4cGVjdERlbW9Ob3RlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNvbnN0IENMQVNTX01FTUJFUl9NT0RJRklFUlMgPSBTdHJpbmcucmF3YCg/Oig/OnB1YmxpY3xwcml2YXRlfHByb3RlY3RlZHxyZWFkb25seXxzdGF0aWN8YWJzdHJhY3R8b3ZlcnJpZGUpXFxzKykqYDtcbmNvbnN0IEFCU09MVVRFX1VSTF9SRUdfRVhQID0gL15bYS16XVtcXHcrLi1dKjovaTtcbmNvbnN0IEFOR0xFX0JSQUNLRVRTX1JFR19FWFAgPSAvXjx8PiQvZztcbmNvbnN0IENPREVfRkVOQ0VfUkVHX0VYUCA9IC9eXFxzKig/OmBgYHx+fn4pLztcbmNvbnN0IERFRkFVTFRfRVhDTFVERURfTk9URVMgPSBbJ1JFQURNRS5tZCddO1xuY29uc3QgREVGQVVMVF9TVEFSVF9OT1RFID0gJzAwIFN0YXJ0Lm1kJztcbmNvbnN0IERPQ1NfTElOS19SRUdfRVhQID0gL15cXHMqXFxbRG9jc11cXCgvO1xuY29uc3QgRlJPTlRNQVRURVJfUkVHX0VYUCA9IC9eLS0tXFxyP1xcbltcXHNcXFNdKj9cXHI/XFxuLS0tW15cXFNcXG5dKlxccj9cXG4/LztcbmNvbnN0IEgxX1JFR19FWFAgPSAvXiMgXFxTLztcbmNvbnN0IEhFQURJTkdfUkVHX0VYUCA9IC9eI3sxLDZ9IC87XG5jb25zdCBJTkxJTkVfQ09ERV9SRUdfRVhQID0gL2BbXmBcXG5dKmAvZztcbmNvbnN0IE1BUktET1dOX0xJTktfUkVHX0VYUCA9IC9cXFtbXlxcXV0qXVxcKCg/PHRhcmdldD5bXildKylcXCkvZztcbi8vIEFuIGlubGluZSBkaXJlY3RpdmUsIHNoYXBlZCBhZnRlciBFU0xpbnQncyBhbmQgd3JpdHRlbiBhcyBhbiBIVE1MIGNvbW1lbnQgc28gaXQgaXMgaW52aXNpYmxlIEJPVEggaW5cbi8vIE9ic2lkaWFuIGFuZCBvbiBHaXRIdWIgXHUyMDE0IHRoZSBzYW1lIHNwZWxsaW5nIHRoZSB2YXVsdHMgYWxyZWFkeSB1c2UgZm9yIGBtYXJrZG93bmxpbnQtZGlzYWJsZS1uZXh0LWxpbmVgLlxuLy8gQW4gT2JzaWRpYW4gYCUlIFx1MjAyNiAlJWAgY29tbWVudCB3b3VsZCBzaG93IHVwIGFzIGxpdGVyYWwgdGV4dCBvbiBHaXRIdWIsIHdoaWNoIGlzIGhhbGYgdGhlIHJlYWRlcnNoaXAuXG5jb25zdCBESVJFQ1RJVkVfUkVHX0VYUCA9IC9eXFxzKjwhLS1cXHMqb2JzaWRpYW4tZGV2LXV0aWxzLSg/PGFjdGlvbj5kaXNhYmxlLW5leHQtbGluZXxkaXNhYmxlfGVuYWJsZSlcXHMrKD88cnVsZT5bXFx3LV0rXFwvW1xcdy1dKykoPzpcXHMrLS1cXHMrKD88cmVhc29uPi4qPykpP1xccyotLT5cXHMqJC87XG4vLyBDYXRjaGVzIGEgZGlyZWN0aXZlIHRoYXQgd2FzIE1FQU5UIHRvIGJlIG9uZSBidXQgaXMgbWlzc3BlbGxlZDogaXQgd291bGQgb3RoZXJ3aXNlIHJlYWQgYXMgYW4gb3JkaW5hcnlcbi8vIENvbW1lbnQgYW5kIHNpbGVudGx5IGRvIG5vdGhpbmcsIHdoaWNoIGlzIHRoZSBmYWlsdXJlIG1vZGUgYSBzdXBwcmVzc2lvbiBzeW50YXggbXVzdCBuZXZlciBoYXZlLlxuY29uc3QgRElSRUNUSVZFX1BST0JFX1JFR19FWFAgPSAvPCEtLVxccypvYnNpZGlhbi1kZXYtdXRpbHMtLztcbmNvbnN0IFdJS0lMSU5LX1JVTEUgPSAnZGVtby12YXVsdC12YWxpZGF0aW9uL25vLXdpa2lsaW5rcyc7XG4vLyBUaGUgYG9ic2lkaWFuLWRldi11dGlscyA+IGRlbW8tdmF1bHQtdmFsaWRhdGlvbiA+IGFsbG93LXdpa2lsaW5rc2AgZnJvbnRtYXR0ZXIgcGF0aCwgYXQgYW55IGluZGVudGF0aW9uOlxuLy8gVGhlIGtleXMgbXVzdCBuZXN0IGluIHRoYXQgb3JkZXIsIGFuZCBhbnkgbGluZSBiZXR3ZWVuIHRoZW0gaGFzIHRvIHN0YXkgaW5kZW50ZWQsIHNvIGEgZGVkZW50IHRvIHRoZVxuLy8gRG9jdW1lbnQncyBvd24gdG9wIGxldmVsIGVuZHMgdGhlIG1hdGNoIHJhdGhlciB0aGFuIHJlYWNoaW5nIGEgc2FtZS1uYW1lZCBrZXkgdW5kZXIgYW5vdGhlciBwYXJlbnQuXG5jb25zdCBXSUtJTElOS19BTExPV0FOQ0VfUkVHX0VYUCA9IC9eb2JzaWRpYW4tZGV2LXV0aWxzOlteXFxTXFxuXSpcXG4oPzpbXlxcU1xcbl0rLipcXG4pKj9bXlxcU1xcbl0rZGVtby12YXVsdC12YWxpZGF0aW9uOlteXFxTXFxuXSpcXG4oPzpbXlxcU1xcbl0rLipcXG4pKj9bXlxcU1xcbl0rYWxsb3ctd2lraWxpbmtzOig/PHJlYXNvbj4uKikkL207XG5jb25zdCBXSUtJTElOS19SRUdfRVhQID0gL1xcW1xcW1teXFxdXStdXS87XG5cbi8vIEFwcGxpZXMgb25lIHBhcnNlZCBkaXJlY3RpdmUgdG8gdGhlIHNjYW4uXG5mdW5jdGlvbiBhcHBseVdpa2lsaW5rRGlyZWN0aXZlKHN0YXRlOiBXaWtpbGlua0RpcmVjdGl2ZVNjYW5TdGF0ZSwgbGluZUluZGV4OiBudW1iZXIsIG1hdGNoOiBSZWdFeHBFeGVjQXJyYXkpOiB2b2lkIHtcbiAgY29uc3QgYWN0aW9uID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ2FjdGlvbicpO1xuICBjb25zdCBydWxlID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3J1bGUnKTtcbiAgY29uc3QgcmVhc29uID0gbWF0Y2guZ3JvdXBzPy5bJ3JlYXNvbiddPy50cmltKCkgPz8gJyc7XG4gIGlmIChydWxlICE9PSBXSUtJTElOS19SVUxFKSB7XG4gICAgc3RhdGUucHJvYmxlbXMucHVzaChgYW4gdW5rbm93biBydWxlIFwiJHtydWxlfVwiIG9uICR7Zm9ybWF0TGluZU51bWJlcihsaW5lSW5kZXgpfWApO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoYWN0aW9uICE9PSAnZW5hYmxlJyAmJiByZWFzb24gPT09ICcnKSB7XG4gICAgc3RhdGUucHJvYmxlbXMucHVzaChgYSBkaXJlY3RpdmUgd2l0aCBubyByZWFzb24gb24gJHtmb3JtYXRMaW5lTnVtYmVyKGxpbmVJbmRleCl9YCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGFjdGlvbiA9PT0gJ2Rpc2FibGUtbmV4dC1saW5lJykge1xuICAgIHN0YXRlLnBlbmRpbmdOZXh0TGluZUluZGV4ID0gbGluZUluZGV4O1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChhY3Rpb24gPT09ICdkaXNhYmxlJykge1xuICAgIGlmIChzdGF0ZS5vcGVuUmVnaW9uKSB7XG4gICAgICBzdGF0ZS5wcm9ibGVtcy5wdXNoKGBhIGRpc2FibGUgb24gJHtmb3JtYXRMaW5lTnVtYmVyKGxpbmVJbmRleCl9IGluc2lkZSB0aGUgcmVnaW9uIG9wZW5lZCBvbiAke2Zvcm1hdExpbmVOdW1iZXIoc3RhdGUub3BlblJlZ2lvbi5saW5lSW5kZXgpfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdGF0ZS5vcGVuUmVnaW9uID0geyBpc1VzZWQ6IGZhbHNlLCBsaW5lSW5kZXggfTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIXN0YXRlLm9wZW5SZWdpb24pIHtcbiAgICBzdGF0ZS5wcm9ibGVtcy5wdXNoKGBhbiBlbmFibGUgb24gJHtmb3JtYXRMaW5lTnVtYmVyKGxpbmVJbmRleCl9IHdpdGggbm8gcmVnaW9uIG9wZW5gKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFzdGF0ZS5vcGVuUmVnaW9uLmlzVXNlZCkge1xuICAgIHN0YXRlLnByb2JsZW1zLnB1c2goYGEgcmVnaW9uIG9wZW5lZCBvbiAke2Zvcm1hdExpbmVOdW1iZXIoc3RhdGUub3BlblJlZ2lvbi5saW5lSW5kZXgpfSBjb3ZlcmluZyBubyB3aWtpbGlua2ApO1xuICB9XG4gIHN0YXRlLm9wZW5SZWdpb24gPSBudWxsO1xufVxuXG4vLyBBcHBsaWVzIG9uZSBvcmRpbmFyeSBsaW5lIHRvIHRoZSBzY2FuOiBhbiBvcGVuIHJlZ2lvbiBjb3ZlcnMgaXQsIGFuZCBhIHBlbmRpbmcgYGRpc2FibGUtbmV4dC1saW5lYFxuLy8gQ2xhaW1zIHRoZSBmaXJzdCBsaW5lIHdpdGggY29udGVudCBvbiBpdCBcdTIwMTQgdGhlIGRpcmVjdGl2ZSBhbmQgaXRzIHRhcmdldCBhcmUgdXN1YWxseSBhIGJsYW5rIGxpbmUgYXBhcnQuXG5mdW5jdGlvbiBhcHBseVdpa2lsaW5rU2NhbkxpbmUoc3RhdGU6IFdpa2lsaW5rRGlyZWN0aXZlU2NhblN0YXRlLCBsaW5lSW5kZXg6IG51bWJlciwgbGluZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChzdGF0ZS5vcGVuUmVnaW9uKSB7XG4gICAgc3RhdGUuYWxsb3dlZExpbmVJbmRleGVzLmFkZChsaW5lSW5kZXgpO1xuICAgIHN0YXRlLm9wZW5SZWdpb24uaXNVc2VkIHx8PSBzdGF0ZS53aWtpbGlua0xpbmVJbmRleGVzLmhhcyhsaW5lSW5kZXgpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoc3RhdGUucGVuZGluZ05leHRMaW5lSW5kZXggPT09IG51bGwgfHwgbGluZS50cmltKCkgPT09ICcnKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHN0YXRlLmFsbG93ZWRMaW5lSW5kZXhlcy5hZGQobGluZUluZGV4KTtcbiAgaWYgKCFzdGF0ZS53aWtpbGlua0xpbmVJbmRleGVzLmhhcyhsaW5lSW5kZXgpKSB7XG4gICAgc3RhdGUucHJvYmxlbXMucHVzaChgYSBkaXNhYmxlLW5leHQtbGluZSBvbiAke2Zvcm1hdExpbmVOdW1iZXIoc3RhdGUucGVuZGluZ05leHRMaW5lSW5kZXgpfSBjb3ZlcmluZyBubyB3aWtpbGlua2ApO1xuICB9XG4gIHN0YXRlLnBlbmRpbmdOZXh0TGluZUluZGV4ID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gYnVpbGRNZW1iZXJzKG1ldGhvZHM6IHN0cmluZ1tdLCBwcm9wZXJ0aWVzOiBzdHJpbmdbXSk6IEludGVyZmFjZU1lbWJlcnMge1xuICByZXR1cm4ge1xuICAgIGFsbDogWy4uLm1ldGhvZHMsIC4uLnByb3BlcnRpZXNdLFxuICAgIG1ldGhvZHMsXG4gICAgcHJvcGVydGllc1xuICB9O1xufVxuXG4vLyBSZXNvbHZlcyB0aGUgbm90ZXMgYSBub3RlIGxpbmtzIHRvOiBldmVyeSBNYXJrZG93biBsaW5rIG91dHNpZGUgYSBjb2RlIGZlbmNlIHdob3NlIHRhcmdldCBpcyBhIGAubWRgXG4vLyBGaWxlLCBtYWRlIHJlbGF0aXZlIHRvIHRoZSBkZW1vIHZhdWx0IHNvIGl0IGNhbiBiZSBsb29rZWQgdXAgaW4gdGhlIG5vdGUgbWFwLiBFeHRlcm5hbCBVUkxzIGFuZFxuLy8gTm9uLW5vdGUgdGFyZ2V0cyAoaW1hZ2VzLCBzY3JpcHRzKSBhcmUgbm90IHBhcnQgb2YgdGhlIGxlYXJuaW5nIHBhdGggYW5kIGFyZSBza2lwcGVkOyBhIGAjYW5jaG9yYCBpc1xuLy8gRHJvcHBlZCwgc2luY2UgaXQgYWRkcmVzc2VzIGEgcGxhY2UgaW5zaWRlIGFuIGFscmVhZHktcmVzb2x2ZWQgbm90ZS5cbi8vIFJldHVybnMgdGhlIG5vdGUncyBsaW5lcyB3aXRoIGZlbmNlZCBjb2RlIGJsb2NrcyByZW1vdmVkICh0aGUgZmVuY2UgbGluZXMgaW5jbHVkZWQpLCBwYWlyZWQgd2l0aCB0aGVcbi8vIExpbmUgbnVtYmVyIGVhY2ggY2FtZSBmcm9tLCBzbyBhIGNoZWNrIG5ldmVyIG1pc3Rha2VzIHNhbXBsZSBjb2RlIGZvciBwcm9zZSBcdTIwMTQgYSBgW1t3aWtpbGlua11dYFxuLy8gRGVtb25zdHJhdGVkIGluc2lkZSBhIGZlbmNlIGlzIHRleHQsIG5vdCBuYXZpZ2F0aW9uIFx1MjAxNCBhbmQgYW4gaW5saW5lIGRpcmVjdGl2ZSBjYW4gc3RpbGwgbmFtZSBhIGxpbmUuXG5mdW5jdGlvbiBjb2xsZWN0TGluZXNPdXRzaWRlRmVuY2VzKGNvbnRlbnQ6IHN0cmluZyk6IE5vdGVMaW5lW10ge1xuICBjb25zdCBub3RlTGluZXM6IE5vdGVMaW5lW10gPSBbXTtcbiAgbGV0IGlzSW5zaWRlRmVuY2UgPSBmYWxzZTtcbiAgZm9yIChjb25zdCBbaW5kZXgsIGxpbmVdIG9mIGNvbnRlbnQuc3BsaXQoJ1xcbicpLmVudHJpZXMoKSkge1xuICAgIGlmIChDT0RFX0ZFTkNFX1JFR19FWFAudGVzdChsaW5lKSkge1xuICAgICAgaXNJbnNpZGVGZW5jZSA9ICFpc0luc2lkZUZlbmNlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmICghaXNJbnNpZGVGZW5jZSkge1xuICAgICAgbm90ZUxpbmVzLnB1c2goeyBpbmRleCwgbGluZSB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vdGVMaW5lcztcbn1cblxuZnVuY3Rpb24gY29sbGVjdE5vdGVMaW5rVGFyZ2V0cyhub3RlOiBEZW1vVmF1bHROb3RlKTogc3RyaW5nW10ge1xuICBjb25zdCB0YXJnZXRzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGxpbmUgb2YgZ2V0TGluZXNPdXRzaWRlRmVuY2VzKG5vdGUuY29udGVudCkpIHtcbiAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIHN0cmlwSW5saW5lQ29kZShsaW5lKS5tYXRjaEFsbChNQVJLRE9XTl9MSU5LX1JFR19FWFApKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAndGFyZ2V0JykucmVwbGFjZUFsbChBTkdMRV9CUkFDS0VUU19SRUdfRVhQLCAnJyk7XG4gICAgICBjb25zdCBbbm90ZVBhdGggPSAnJ10gPSB0YXJnZXQuc3BsaXQoJyMnLCAxKTtcbiAgICAgIGlmIChBQlNPTFVURV9VUkxfUkVHX0VYUC50ZXN0KG5vdGVQYXRoKSB8fCAhbm90ZVBhdGgudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnLm1kJykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB0YXJnZXRzLnB1c2goam9pbihkaXJuYW1lKG5vdGUucmVsYXRpdmVQYXRoKSwgdHJ5RGVjb2RlVXJpQ29tcG9uZW50KG5vdGVQYXRoKSkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGFyZ2V0cztcbn1cblxuZnVuY3Rpb24gZXh0cmFjdENsYXNzTWV0aG9kTmFtZXMoY2xhc3NCb2R5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbLi4uY2xhc3NCb2R5Lm1hdGNoQWxsKG5ldyBSZWdFeHAoU3RyaW5nLnJhd2BeIHsyfSg/PG1vZGlmaWVycz4ke0NMQVNTX01FTUJFUl9NT0RJRklFUlN9KSg/PG5hbWU+XFx3KykoPzo8W14+XSo+KT9cXChgLCAnZ20nKSldXG4gICAgLmZpbHRlcigobWF0Y2gpID0+ICFpc05vblB1YmxpY01lbWJlcihnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnbW9kaWZpZXJzJykpKVxuICAgIC5tYXAoKG1hdGNoKSA9PiBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnbmFtZScpKTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdENsYXNzUHJvcGVydHlOYW1lcyhjbGFzc0JvZHk6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFsuLi5jbGFzc0JvZHkubWF0Y2hBbGwobmV3IFJlZ0V4cChTdHJpbmcucmF3YF4gezJ9KD88bW9kaWZpZXJzPiR7Q0xBU1NfTUVNQkVSX01PRElGSUVSU30pKD88bmFtZT5cXHcrKVxccypcXD8/XFxzKls6PV1gLCAnZ20nKSldXG4gICAgLmZpbHRlcigobWF0Y2gpID0+ICFpc05vblB1YmxpY01lbWJlcihnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnbW9kaWZpZXJzJykpKVxuICAgIC5tYXAoKG1hdGNoKSA9PiBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnbmFtZScpKTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEVudW1NZW1iZXJOYW1lcyhlbnVtQm9keTogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gWy4uLmVudW1Cb2R5Lm1hdGNoQWxsKC9eIHsyfSg/PG5hbWU+XFx3KykvZ20pXS5tYXAoKG1hdGNoKSA9PiBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnbmFtZScpKTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdE1ldGhvZE5hbWVzKGludGVyZmFjZUJvZHk6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFsuLi5pbnRlcmZhY2VCb2R5Lm1hdGNoQWxsKC9eIHsyfSg/PG5hbWU+XFx3KykoPzo8W14+XSo+KT9cXCgvZ20pXS5tYXAoKG1hdGNoKSA9PiBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnbmFtZScpKTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFByb3BlcnR5TmFtZXMoaW50ZXJmYWNlQm9keTogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gWy4uLmludGVyZmFjZUJvZHkubWF0Y2hBbGwoL14gezJ9KD88bmFtZT5cXHcrKVxcPz86L2dtKV0ubWFwKChtYXRjaCkgPT4gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ25hbWUnKSk7XG59XG5cbi8vIFRoZSBsaW5lIG51bWJlcnMgY2FycnlpbmcgYSB3aWtpbGluayB0aGF0IGlzIG5hdmlnYXRpb24gcmF0aGVyIHRoYW4gc2FtcGxlIHRleHQuXG5mdW5jdGlvbiBmaW5kV2lraWxpbmtMaW5lSW5kZXhlcyhjb250ZW50OiBzdHJpbmcpOiBudW1iZXJbXSB7XG4gIHJldHVybiBjb2xsZWN0TGluZXNPdXRzaWRlRmVuY2VzKGNvbnRlbnQpXG4gICAgLmZpbHRlcigobm90ZUxpbmUpID0+IFdJS0lMSU5LX1JFR19FWFAudGVzdChzdHJpcElubGluZUNvZGUobm90ZUxpbmUubGluZSkpKVxuICAgIC5tYXAoKG5vdGVMaW5lKSA9PiBub3RlTGluZS5pbmRleCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdExpbmVOdW1iZXIobGluZUluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYGxpbmUgJHtTdHJpbmcobGluZUluZGV4ICsgMSl9YDtcbn1cblxuZnVuY3Rpb24gZ2V0TGluZXNPdXRzaWRlRmVuY2VzKGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIGNvbGxlY3RMaW5lc091dHNpZGVGZW5jZXMoY29udGVudCkubWFwKChub3RlTGluZSkgPT4gbm90ZUxpbmUubGluZSk7XG59XG5cbi8vIFdoZXRoZXIgdGhlIG5vdGUncyBmaXJzdCBjb250ZW50IGxpbmUgKGZyb250bWF0dGVyIGFuZCBibGFuayBsaW5lcyBhc2lkZSkgaXMgYW4gYCMgSDFgLlxuZnVuY3Rpb24gaGFzSDEoY29udGVudDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGZvciAoY29uc3QgbGluZSBvZiBzdHJpcEZyb250bWF0dGVyKGNvbnRlbnQpLnNwbGl0KCdcXG4nKSkge1xuICAgIGNvbnN0IHRyaW1tZWRMaW5lID0gbGluZS50cmltKCk7XG4gICAgaWYgKHRyaW1tZWRMaW5lID09PSAnJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHJldHVybiBIMV9SRUdfRVhQLnRlc3QodHJpbW1lZExpbmUpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLy8gV2hldGhlciBhIHBsYWluIHByb3NlIGxpbmUgYXBwZWFycyBiZWZvcmUgdGhlIG5vdGUncyBmaXJzdCBjb2RlIGZlbmNlLiBIZWFkaW5ncyBhcmUgbm90IHByb3NlIFx1MjAxNCBhIG5vdGVcbi8vIFRoYXQgZ29lcyBzdHJhaWdodCBmcm9tIGl0cyB0aXRsZSB0byBhIGJ1dHRvbiBpcyBleGFjdGx5IHRoZSBzaGFwZSB0aGlzIGNoZWNrIHJlamVjdHMuXG5mdW5jdGlvbiBoYXNJbnRyb1Byb3NlKGNvbnRlbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBmb3IgKGNvbnN0IGxpbmUgb2Ygc3RyaXBGcm9udG1hdHRlcihjb250ZW50KS5zcGxpdCgnXFxuJykpIHtcbiAgICBpZiAoQ09ERV9GRU5DRV9SRUdfRVhQLnRlc3QobGluZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgdHJpbW1lZExpbmUgPSBsaW5lLnRyaW0oKTtcbiAgICBpZiAodHJpbW1lZExpbmUgPT09ICcnIHx8IEhFQURJTkdfUkVHX0VYUC50ZXN0KHRyaW1tZWRMaW5lKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLy8gV2hldGhlciB0aGUgbm90ZSBuYXZpZ2F0ZXMgd2l0aCBhbiBPYnNpZGlhbiBgW1t3aWtpbGlua11dYC4gRmVuY2VkIGJsb2NrcyBhbmQgaW5saW5lIGNvZGUgYXJlIHNhbXBsZVxuLy8gVGV4dCByYXRoZXIgdGhhbiBuYXZpZ2F0aW9uLCBzbyB0aGV5IGFyZSByZW1vdmVkIGJlZm9yZSBsb29raW5nLlxuZnVuY3Rpb24gaGFzV2lraWxpbmsoY29udGVudDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBmaW5kV2lraWxpbmtMaW5lSW5kZXhlcyhjb250ZW50KS5sZW5ndGggPiAwO1xufVxuXG5mdW5jdGlvbiBpc05vblB1YmxpY01lbWJlcihtb2RpZmllcnM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gL1xcYig/OnByaXZhdGV8cHJvdGVjdGVkKVxcYi8udGVzdChtb2RpZmllcnMpO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1lbWJlcnMoa2V5d29yZDogc3RyaW5nLCBib2R5OiBzdHJpbmcpOiBJbnRlcmZhY2VNZW1iZXJzIHtcbiAgc3dpdGNoIChrZXl3b3JkKSB7XG4gICAgY2FzZSAnY2xhc3MnOiB7XG4gICAgICByZXR1cm4gYnVpbGRNZW1iZXJzKGV4dHJhY3RDbGFzc01ldGhvZE5hbWVzKGJvZHkpLCBleHRyYWN0Q2xhc3NQcm9wZXJ0eU5hbWVzKGJvZHkpKTtcbiAgICB9XG4gICAgY2FzZSAnZW51bSc6IHtcbiAgICAgIHJldHVybiBidWlsZE1lbWJlcnMoW10sIGV4dHJhY3RFbnVtTWVtYmVyTmFtZXMoYm9keSkpO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gYnVpbGRNZW1iZXJzKGV4dHJhY3RNZXRob2ROYW1lcyhib2R5KSwgZXh0cmFjdFByb3BlcnR5TmFtZXMoYm9keSkpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBSZWFkcyB0aGUgbm90ZSdzIGBvYnNpZGlhbi1kZXYtdXRpbHMgPiBkZW1vLXZhdWx0LXZhbGlkYXRpb24gPiBhbGxvdy13aWtpbGlua3NgIGRlY2xhcmF0aW9uOiB0aGUgc3RhdGVkXG4vLyBSZWFzb24sIGAnJ2Agd2hlbiB0aGUga2V5IGlzIHByZXNlbnQgd2l0aCBub3RoaW5nIGFmdGVyIGl0LCBvciBgbnVsbGAgd2hlbiB0aGUgbm90ZSBkZWNsYXJlcyBub3RoaW5nLlxuLy8gUmVhZCB3aXRoIGEgcmVndWxhciBleHByZXNzaW9uIHJhdGhlciB0aGFuIGEgWUFNTCBwYXJzZXI6IGl0IGlzIG9uZSBrbm93biBrZXkgcGF0aCwgYW5kIGV2ZXJ5IHBsdWdpbiB0aGF0XG4vLyBJbnN0YWxscyB0aGlzIHBhY2thZ2Ugd291bGQgb3RoZXJ3aXNlIGNhcnJ5IGEgWUFNTCBkZXBlbmRlbmN5IGZvciBpdC5cbmZ1bmN0aW9uIHJlYWRXaWtpbGlua0FsbG93YW5jZVJlYXNvbihjb250ZW50OiBzdHJpbmcpOiBudWxsIHwgc3RyaW5nIHtcbiAgY29uc3QgZnJvbnRtYXR0ZXIgPSBGUk9OVE1BVFRFUl9SRUdfRVhQLmV4ZWMoY29udGVudCk/LlswXTtcbiAgaWYgKGZyb250bWF0dGVyID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCByZWFzb24gPSBXSUtJTElOS19BTExPV0FOQ0VfUkVHX0VYUC5leGVjKGZyb250bWF0dGVyKT8uZ3JvdXBzPy5bJ3JlYXNvbiddO1xuICBpZiAocmVhc29uID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gcmVhc29uLnRyaW0oKS5yZXBsYWNlKC9eKD88cXVvdGU+W1wiJ10pKD88dmFsdWU+W1xcc1xcU10qKVxcazxxdW90ZT4kLywgJyQ8dmFsdWU+Jyk7XG59XG5cbi8vIFJlYWRzIHRoZSBub3RlJ3MgaW5saW5lIGBvYnNpZGlhbi1kZXYtdXRpbHMtZGlzYWJsZVx1MjAyNmAgZGlyZWN0aXZlcywgcmV0dXJuaW5nIHdoaWNoIGxpbmVzIHRoZXkgYWxsb3cgYVxuLy8gV2lraWxpbmsgb24gYW5kIGV2ZXJ5dGhpbmcgd3Jvbmcgd2l0aCB0aGVtLiBBIHN1cHByZXNzaW9uIHRoYXQgcXVpZXRseSBkb2VzIG5vdGhpbmcgaXMgd29yc2UgdGhhbiBub25lLFxuLy8gU28gYSBtaXNzcGVsbGVkIGRpcmVjdGl2ZSwgb25lIHdpdGggbm8gcmVhc29uLCBhbiB1bmNsb3NlZCByZWdpb24gYW5kIG9uZSBjb3ZlcmluZyBubyB3aWtpbGluayBhdCBhbGxcbi8vIEFyZSBlYWNoIHJlcG9ydGVkIHJhdGhlciB0aGFuIGlnbm9yZWQuXG5mdW5jdGlvbiBzY2FuV2lraWxpbmtEaXJlY3RpdmVzKGNvbnRlbnQ6IHN0cmluZyk6IFdpa2lsaW5rRGlyZWN0aXZlU2NhbiB7XG4gIGNvbnN0IHN0YXRlOiBXaWtpbGlua0RpcmVjdGl2ZVNjYW5TdGF0ZSA9IHtcbiAgICBhbGxvd2VkTGluZUluZGV4ZXM6IG5ldyBTZXQ8bnVtYmVyPigpLFxuICAgIG9wZW5SZWdpb246IG51bGwsXG4gICAgcGVuZGluZ05leHRMaW5lSW5kZXg6IG51bGwsXG4gICAgcHJvYmxlbXM6IFtdLFxuICAgIHdpa2lsaW5rTGluZUluZGV4ZXM6IG5ldyBTZXQoZmluZFdpa2lsaW5rTGluZUluZGV4ZXMoY29udGVudCkpXG4gIH07XG5cbiAgZm9yIChjb25zdCB7IGluZGV4LCBsaW5lIH0gb2YgY29sbGVjdExpbmVzT3V0c2lkZUZlbmNlcyhjb250ZW50KSkge1xuICAgIGNvbnN0IG1hdGNoID0gRElSRUNUSVZFX1JFR19FWFAuZXhlYyhsaW5lKTtcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIGFwcGx5V2lraWxpbmtEaXJlY3RpdmUoc3RhdGUsIGluZGV4LCBtYXRjaCk7XG4gICAgfSBlbHNlIGlmIChESVJFQ1RJVkVfUFJPQkVfUkVHX0VYUC50ZXN0KGxpbmUpKSB7XG4gICAgICBzdGF0ZS5wcm9ibGVtcy5wdXNoKGBhIG1hbGZvcm1lZCBkaXJlY3RpdmUgb24gJHtmb3JtYXRMaW5lTnVtYmVyKGluZGV4KX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwbHlXaWtpbGlua1NjYW5MaW5lKHN0YXRlLCBpbmRleCwgbGluZSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlLm9wZW5SZWdpb24pIHtcbiAgICBzdGF0ZS5wcm9ibGVtcy5wdXNoKGBhIHJlZ2lvbiBvcGVuZWQgb24gJHtmb3JtYXRMaW5lTnVtYmVyKHN0YXRlLm9wZW5SZWdpb24ubGluZUluZGV4KX0gdGhhdCBpcyBuZXZlciBlbmFibGVkIGFnYWluYCk7XG4gIH1cbiAgaWYgKHN0YXRlLnBlbmRpbmdOZXh0TGluZUluZGV4ICE9PSBudWxsKSB7XG4gICAgc3RhdGUucHJvYmxlbXMucHVzaChgYSBkaXNhYmxlLW5leHQtbGluZSBvbiAke2Zvcm1hdExpbmVOdW1iZXIoc3RhdGUucGVuZGluZ05leHRMaW5lSW5kZXgpfSBjb3ZlcmluZyBubyB3aWtpbGlua2ApO1xuICB9XG4gIHJldHVybiB7IGFsbG93ZWRMaW5lSW5kZXhlczogc3RhdGUuYWxsb3dlZExpbmVJbmRleGVzLCBwcm9ibGVtczogc3RhdGUucHJvYmxlbXMgfTtcbn1cblxuZnVuY3Rpb24gc3RyaXBGcm9udG1hdHRlcihjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY29udGVudC5yZXBsYWNlKEZST05UTUFUVEVSX1JFR19FWFAsICcnKTtcbn1cblxuZnVuY3Rpb24gc3RyaXBJbmxpbmVDb2RlKGxpbmU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBsaW5lLnJlcGxhY2VBbGwoSU5MSU5FX0NPREVfUkVHX0VYUCwgJycpO1xufVxuXG4vLyBBIGhhbmQtd3JpdHRlbiBsaW5rIG1heSBjb250YWluIGEgYmFyZSBgJWAgKG9yIGFueSBvdGhlciBpbnZhbGlkIHBlcmNlbnQtZXNjYXBlKSwgd2hpY2ggbWFrZXNcbi8vIGBkZWNvZGVVUklDb21wb25lbnRgIHRocm93LiBTdWNoIGEgdGFyZ2V0IGlzIG1lYW50IGxpdGVyYWxseSwgc28gaXQgaXMgdXNlZCBhcyB3cml0dGVuLlxuZnVuY3Rpb24gdHJ5RGVjb2RlVXJpQ29tcG9uZW50KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNERBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsU0FBUyxtQ0FBbUM7QUFDNUMsU0FBUywrQkFBK0I7QUFDeEM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyw4QkFBOEI7QUFDdkMsU0FBUyx5QkFBeUI7QUF1WDNCLE1BQU0seUJBQXlCO0FBQUEsRUFDNUIsZUFBOEI7QUFBQSxFQUM5QixjQUFzQztBQUFBLEVBQzdCO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPVixZQUFZLFFBQW1EO0FBQ3BFLFNBQUssYUFBYSxPQUFPO0FBQ3pCLFNBQUssa0JBQWtCLEtBQUssS0FBSyxZQUFZLHdCQUF3QixTQUFTO0FBQzlFLFNBQUssZ0JBQWdCLElBQUksSUFBSSxPQUFPLGlCQUFpQixzQkFBc0I7QUFBQSxFQUM3RTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9PLCtCQUF5QztBQUM5QyxXQUFPLEtBQUssYUFBYSxFQUFFLElBQUksQ0FBQyxTQUFTLEtBQUssWUFBWTtBQUFBLEVBQzVEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRTyxlQUFnQztBQUNyQyxTQUFLLGdCQUFnQixLQUFLLHFCQUFxQixLQUFLLGVBQWUsRUFBRSxJQUFJLENBQUMsVUFBVTtBQUFBLE1BQ2xGLFNBQVMsYUFBYSxNQUFNLE9BQU87QUFBQSxNQUNuQyxjQUFjLFNBQVMsS0FBSyxpQkFBaUIsSUFBSTtBQUFBLElBQ25ELEVBQUU7QUFDRixXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRTyx5QkFBbUM7QUFDeEMsV0FBTyxLQUFLLHNCQUFzQixFQUMvQixPQUFPLENBQUMsU0FBUyxzQkFBc0IsS0FBSyxPQUFPLEVBQUUsS0FBSyxDQUFDLFNBQVMsa0JBQWtCLEtBQUssSUFBSSxDQUFDLENBQUMsRUFDakcsSUFBSSxDQUFDLFNBQVMsS0FBSyxZQUFZO0FBQUEsRUFDcEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPTyxxQkFBK0I7QUFDcEMsV0FBTyxLQUFLLHNCQUFzQixFQUMvQixPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsRUFDckMsSUFBSSxDQUFDLFNBQVMsS0FBSyxZQUFZO0FBQUEsRUFDcEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFPLDZCQUF1QztBQUM1QyxXQUFPLEtBQUssc0JBQXNCLEVBQy9CLE9BQU8sQ0FBQyxTQUFTLENBQUMsY0FBYyxLQUFLLE9BQU8sQ0FBQyxFQUM3QyxJQUFJLENBQUMsU0FBUyxLQUFLLFlBQVk7QUFBQSxFQUNwQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFTTyw0Q0FBc0Q7QUFDM0QsV0FBTyxLQUFLLHNCQUFzQixFQUFFLFFBQVEsQ0FBQyxTQUFTO0FBQ3BELFlBQU0sT0FBTyx1QkFBdUIsS0FBSyxPQUFPO0FBQ2hELFlBQU0sV0FBVyxDQUFDLEdBQUcsS0FBSyxRQUFRO0FBQ2xDLFlBQU0sU0FBUyw0QkFBNEIsS0FBSyxPQUFPO0FBQ3ZELFVBQUksV0FBVyxNQUFNO0FBQ25CLFlBQUksT0FBTyxLQUFLLE1BQU0sSUFBSTtBQUN4QixtQkFBUyxLQUFLLHVDQUF1QztBQUFBLFFBQ3ZELFdBQVcsQ0FBQyxZQUFZLEtBQUssT0FBTyxHQUFHO0FBQ3JDLG1CQUFTLEtBQUssNkNBQTZDO0FBQUEsUUFDN0QsV0FBVyxLQUFLLG1CQUFtQixPQUFPLEdBQUc7QUFDM0MsbUJBQVMsS0FBSywyREFBMkQ7QUFBQSxRQUMzRTtBQUFBLE1BQ0Y7QUFDQSxhQUFPLFNBQVMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLFlBQVksS0FBSyxPQUFPLEVBQUU7QUFBQSxJQUNyRSxDQUFDO0FBQUEsRUFDSDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVVPLHlCQUFtQztBQUN4QyxXQUFPLEtBQUssc0JBQXNCLEVBQy9CLE9BQU8sQ0FBQyxTQUFTO0FBQ2hCLFVBQUksNEJBQTRCLEtBQUssT0FBTyxNQUFNLE1BQU07QUFDdEQsZUFBTztBQUFBLE1BQ1Q7QUFDQSxZQUFNLEVBQUUsbUJBQW1CLElBQUksdUJBQXVCLEtBQUssT0FBTztBQUNsRSxhQUFPLHdCQUF3QixLQUFLLE9BQU8sRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLG1CQUFtQixJQUFJLFNBQVMsQ0FBQztBQUFBLElBQ3JHLENBQUMsRUFDQSxJQUFJLENBQUMsU0FBUyxLQUFLLFlBQVk7QUFBQSxFQUNwQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUU8sb0JBQW9CLFFBQXFFO0FBQzlGLFVBQU0sZUFBZSxJQUFJLElBQUksT0FBTyxZQUFZO0FBQ2hELFVBQU0sYUFBYSxDQUFDLEdBQUcsS0FBSyxXQUFXLEVBQUUsU0FBUyxJQUFJLE9BQU8sT0FBTyxNQUFNLE9BQU8sUUFBUSxvQkFBb0IsR0FBRyxDQUFDLENBQUMsRUFDL0csSUFBSSxDQUFDLFVBQVUsdUJBQXVCLE9BQU8sUUFBUSxDQUFDO0FBQ3pELFdBQU8sQ0FBQyxHQUFHLElBQUksSUFBSSxVQUFVLENBQUMsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLGFBQWEsSUFBSSxNQUFNLENBQUM7QUFBQSxFQUM5RTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUU8sMEJBQTBCLFFBQTJFO0FBQzFHLFVBQU0sU0FBUyxLQUFLLFdBQVc7QUFDL0IsV0FBTyxPQUFPLFFBQVEsT0FBTyxDQUFDLFdBQVc7QUFDdkMsWUFBTSxTQUFTLE9BQU8sYUFBYSxTQUFZLFNBQVMsR0FBRyxPQUFPLFFBQVEsSUFBSSxNQUFNO0FBQ3BGLGFBQU8sQ0FBQyxPQUFPLFNBQVMsTUFBTTtBQUFBLElBQ2hDLENBQUM7QUFBQSxFQUNIO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRTyx3QkFBd0IsUUFBeUU7QUFDdEcsVUFBTSxpQkFBaUIsSUFBSSxJQUFJLE9BQU8sY0FBYztBQUNwRCxVQUFNLGNBQWMsWUFBWSxLQUFLLEtBQUssWUFBWSxPQUFPLFVBQVUsQ0FBQyxFQUNyRSxPQUFPLENBQUMsU0FBUyxLQUFLLFNBQVMsS0FBSyxDQUFDLEVBQ3JDLElBQUksQ0FBQyxTQUFTLEtBQUssUUFBUSxTQUFTLEVBQUUsQ0FBQyxFQUN2QyxPQUFPLENBQUMsU0FBUyxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUM7QUFDN0MsVUFBTSxhQUFhLElBQUk7QUFBQSxNQUNyQixDQUFDLEdBQUcsS0FBSyxXQUFXLEVBQUUsU0FBUywyQkFBMkIsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLHVCQUF1QixPQUFPLEtBQUssQ0FBQztBQUFBLElBQ2xIO0FBQ0EsV0FBTyxZQUFZLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQztBQUFBLEVBQ3pEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFjTyxxQkFBcUIsUUFBc0U7QUFDaEcsVUFBTSxzQkFBc0IsSUFBSSxJQUFJLEtBQUssYUFBYSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxjQUFjLElBQUksQ0FBQyxDQUFDO0FBQ2hHLFVBQU0sZUFBZSxvQkFBSSxJQUFZO0FBQ3JDLFVBQU0sZUFBZSxDQUFDLE9BQU8sU0FBUztBQUV0QyxXQUFPLGFBQWEsU0FBUyxHQUFHO0FBQzlCLFlBQU0sV0FBVyxrQkFBa0IsYUFBYSxJQUFJLENBQUM7QUFDckQsWUFBTSxPQUFPLG9CQUFvQixJQUFJLFFBQVE7QUFDN0MsVUFBSSxDQUFDLFFBQVEsYUFBYSxJQUFJLFFBQVEsR0FBRztBQUN2QztBQUFBLE1BQ0Y7QUFDQSxtQkFBYSxJQUFJLFFBQVE7QUFDekIsbUJBQWEsS0FBSyxHQUFHLHVCQUF1QixJQUFJLENBQUM7QUFBQSxJQUNuRDtBQUVBLFdBQU8sS0FBSyxzQkFBc0IsRUFDL0IsSUFBSSxDQUFDLFNBQVMsS0FBSyxZQUFZLEVBQy9CLE9BQU8sQ0FBQyxhQUFhLENBQUMsYUFBYSxJQUFJLFFBQVEsQ0FBQztBQUFBLEVBQ3JEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRTyx5QkFBeUIsUUFBMEU7QUFDeEcsVUFBTSxTQUFTLGFBQWEsS0FBSyxLQUFLLFlBQVksT0FBTyxVQUFVLEdBQUcsT0FBTztBQUM3RSxXQUFPLENBQUMsR0FBRyxPQUFPLFNBQVMsK0NBQStDLENBQUMsRUFDeEUsSUFBSSxDQUFDLFVBQVUsdUJBQXVCLE9BQU8sTUFBTSxDQUFDO0FBQUEsRUFDekQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU08sb0JBQW9CLFFBQTZFO0FBQ3RHLFVBQU0sU0FBUyxhQUFhLEtBQUssS0FBSyxZQUFZLE9BQU8sVUFBVSxHQUFHLE9BQU87QUFDN0UsVUFBTSxRQUFRLElBQUksT0FBTyxPQUFPLDhDQUE4QyxPQUFPLGFBQWEsZ0NBQWdDLEVBQUUsS0FBSyxNQUFNO0FBQy9JLFFBQUksQ0FBQyxPQUFPO0FBQ1YsWUFBTSxJQUFJLE1BQU0sNEJBQTRCLE9BQU8sYUFBYSxFQUFFO0FBQUEsSUFDcEU7QUFDQSxXQUFPLGFBQWEsdUJBQXVCLE9BQU8sU0FBUyxHQUFHLHVCQUF1QixPQUFPLE1BQU0sQ0FBQztBQUFBLEVBQ3JHO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT08sYUFBcUI7QUFDMUIsU0FBSyxpQkFBaUIsS0FBSyxhQUFhLEVBQ3JDLElBQUksQ0FBQyxTQUFTLEtBQUssT0FBTyxFQUMxQixLQUFLLElBQUk7QUFDWixXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUE7QUFBQTtBQUFBLEVBSVEsd0JBQXlDO0FBQy9DLFdBQU8sS0FBSyxhQUFhLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLGNBQWMsSUFBSSxLQUFLLFlBQVksQ0FBQztBQUFBLEVBQ3hGO0FBQUEsRUFFUSxxQkFBcUIsUUFBMEI7QUFDckQsVUFBTSxTQUFtQixDQUFDO0FBQzFCLGVBQVcsU0FBUyxZQUFZLFFBQVEsRUFBRSxlQUFlLEtBQUssQ0FBQyxHQUFHO0FBQ2hFLFVBQUksTUFBTSxZQUFZLEdBQUc7QUFDdkIsWUFBSSxNQUFNLFNBQVMsd0JBQXdCLGFBQXVCO0FBQ2hFO0FBQUEsUUFDRjtBQUNBLGVBQU8sS0FBSyxHQUFHLEtBQUsscUJBQXFCLEtBQUssUUFBUSxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQUEsTUFDcEUsV0FBVyxNQUFNLEtBQUssU0FBUyxLQUFLLEdBQUc7QUFDckMsZUFBTyxLQUFLLEtBQUssUUFBUSxNQUFNLElBQUksQ0FBQztBQUFBLE1BQ3RDO0FBQUEsSUFDRjtBQUNBLFdBQU87QUFBQSxFQUNUO0FBQ0Y7QUFVTyxTQUFTLCtCQUErQixRQUFvRDtBQUNqRyxRQUFNLFVBQVUsSUFBSSx5QkFBeUIsNEJBQXVFO0FBQUEsSUFDbEgsZUFBZSxPQUFPLFdBQVc7QUFBQSxJQUNqQyxZQUFZLE9BQU87QUFBQSxFQUNyQixDQUFDLENBQUM7QUFDRixRQUFNLFlBQVksT0FBTyxXQUFXLGFBQWE7QUFFakQsV0FBUyx1QkFBdUIsTUFBTTtBQUNwQyxlQUFXLFFBQVEsT0FBTyxZQUFZO0FBQ3BDLFNBQUcsc0JBQXNCLEtBQUssYUFBYSxJQUFJLEtBQUssSUFBSSxJQUFJLE1BQU07QUFDaEUsY0FBTSxVQUFVLFFBQVEsb0JBQW9CLElBQUk7QUFDaEQsY0FBTSxlQUFlLFFBQVEsS0FBSyxJQUFJO0FBQ3RDLGVBQU8sYUFBYSxNQUFNLEVBQUUsZ0JBQWdCLENBQUM7QUFDN0MsZUFBTyxRQUFRLDBCQUEwQixFQUFFLFNBQVMsY0FBYyxVQUFVLEtBQUssU0FBUyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUFBLE1BQzFHLENBQUM7QUFFRCxTQUFHLGlCQUFpQixLQUFLLGFBQWEsaUNBQWlDLE1BQU07QUFDM0UsY0FBTSxVQUFVLFFBQVEsb0JBQW9CLElBQUk7QUFDaEQsZUFBTyxRQUFRLG9CQUFvQixFQUFFLFVBQVUsS0FBSyxVQUFVLGNBQWMsUUFBUSxJQUFJLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQUEsTUFDeEcsQ0FBQztBQUFBLElBQ0g7QUFFQSxlQUFXLFFBQVEsT0FBTyxrQkFBa0I7QUFDMUMsU0FBRyxzQkFBc0IsS0FBSyxhQUFhLFdBQVcsTUFBTTtBQUMxRCxjQUFNLFVBQVUsUUFBUSxvQkFBb0IsSUFBSTtBQUNoRCxlQUFPLFFBQVEsV0FBVyxNQUFNLEVBQUUsZ0JBQWdCLENBQUM7QUFDbkQsZUFBTyxRQUFRLDBCQUEwQixFQUFFLFNBQVMsUUFBUSxXQUFXLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQUEsTUFDdkYsQ0FBQztBQUFBLElBQ0g7QUFFQSxlQUFXLFFBQVEsT0FBTyxtQkFBbUIsQ0FBQyxHQUFHO0FBQy9DLFNBQUcsMkNBQTJDLEtBQUssVUFBVSxJQUFJLE1BQU07QUFDckUsY0FBTSxnQkFBZ0IsUUFBUSx5QkFBeUIsSUFBSTtBQUMzRCxlQUFPLGNBQWMsTUFBTSxFQUFFLGdCQUFnQixDQUFDO0FBQzlDLGVBQU8sUUFBUSwwQkFBMEIsRUFBRSxTQUFTLGNBQWMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFBQSxNQUNsRixDQUFDO0FBQUEsSUFDSDtBQUVBLFVBQU0sT0FBTyxPQUFPO0FBQ3BCLFFBQUksTUFBTTtBQUNSLFNBQUcsMkNBQTJDLE1BQU07QUFDbEQsZUFBTyxRQUFRLHdCQUF3QixFQUFFLFlBQVksS0FBSyxRQUFRLGdCQUFnQixLQUFLLGVBQWUsQ0FBQyxDQUFDLEVBQ3JHLFFBQVEsQ0FBQyxDQUFDO0FBQUEsTUFDZixDQUFDO0FBQUEsSUFDSDtBQUVBLE9BQUcsK0JBQStCLE1BQU07QUFDdEMsYUFBTyxRQUFRLG1CQUFtQixDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFBQSxJQUNqRCxDQUFDO0FBRUQsT0FBRyx1RUFBdUUsTUFBTTtBQUM5RSxhQUFPLFFBQVEsMkJBQTJCLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUFBLElBQ3pELENBQUM7QUFFRCxPQUFHLDJCQUEyQixTQUFTLElBQUksTUFBTTtBQUMvQyxhQUFPLFFBQVEscUJBQXFCLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUFBLElBQ2hFLENBQUM7QUFFRCxPQUFHLG9EQUFvRCxNQUFNO0FBQzNELGFBQU8sUUFBUSx1QkFBdUIsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQUEsSUFDckQsQ0FBQztBQUVELE9BQUcsNEVBQTRFLE1BQU07QUFDbkYsYUFBTyxRQUFRLDBDQUEwQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFBQSxJQUN4RSxDQUFDO0FBRUQsT0FBRywyREFBMkQsTUFBTTtBQUNsRSxhQUFPLFFBQVEsdUJBQXVCLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUFBLElBQ3JELENBQUM7QUFFRCxPQUFHLDJDQUEyQyxNQUFNO0FBQ2xELFlBQU0sUUFBUSxPQUFPO0FBQ3JCLFlBQU0sVUFBVSxRQUFRLG9CQUFvQixLQUFLO0FBQ2pELGFBQU8sUUFBUSxHQUFHLEVBQUUsVUFBVSxNQUFNLFlBQVk7QUFDaEQsYUFBTyxRQUFRLDZCQUE2QixDQUFDLEVBQUUsVUFBVSxNQUFNLGNBQWM7QUFBQSxJQUMvRSxDQUFDO0FBQUEsRUFDSCxDQUFDO0FBQ0g7QUFFQSxNQUFNLHlCQUF5QixPQUFPO0FBQ3RDLE1BQU0sdUJBQXVCO0FBQzdCLE1BQU0seUJBQXlCO0FBQy9CLE1BQU0scUJBQXFCO0FBQzNCLE1BQU0seUJBQXlCLENBQUMsV0FBVztBQUMzQyxNQUFNLHFCQUFxQjtBQUMzQixNQUFNLG9CQUFvQjtBQUMxQixNQUFNLHNCQUFzQjtBQUM1QixNQUFNLGFBQWE7QUFDbkIsTUFBTSxrQkFBa0I7QUFDeEIsTUFBTSxzQkFBc0I7QUFDNUIsTUFBTSx3QkFBd0I7QUFJOUIsTUFBTSxvQkFBb0I7QUFHMUIsTUFBTSwwQkFBMEI7QUFDaEMsTUFBTSxnQkFBZ0I7QUFJdEIsTUFBTSw2QkFBNkI7QUFDbkMsTUFBTSxtQkFBbUI7QUFHekIsU0FBUyx1QkFBdUIsT0FBbUMsV0FBbUIsT0FBOEI7QUFDbEgsUUFBTSxTQUFTLHVCQUF1QixPQUFPLFFBQVE7QUFDckQsUUFBTSxPQUFPLHVCQUF1QixPQUFPLE1BQU07QUFDakQsUUFBTSxTQUFTLE1BQU0sU0FBUyxRQUFRLEdBQUcsS0FBSyxLQUFLO0FBQ25ELE1BQUksU0FBUyxlQUFlO0FBQzFCLFVBQU0sU0FBUyxLQUFLLG9CQUFvQixJQUFJLFFBQVEsaUJBQWlCLFNBQVMsQ0FBQyxFQUFFO0FBQ2pGO0FBQUEsRUFDRjtBQUNBLE1BQUksV0FBVyxZQUFZLFdBQVcsSUFBSTtBQUN4QyxVQUFNLFNBQVMsS0FBSyxpQ0FBaUMsaUJBQWlCLFNBQVMsQ0FBQyxFQUFFO0FBQ2xGO0FBQUEsRUFDRjtBQUVBLE1BQUksV0FBVyxxQkFBcUI7QUFDbEMsVUFBTSx1QkFBdUI7QUFDN0I7QUFBQSxFQUNGO0FBRUEsTUFBSSxXQUFXLFdBQVc7QUFDeEIsUUFBSSxNQUFNLFlBQVk7QUFDcEIsWUFBTSxTQUFTLEtBQUssZ0JBQWdCLGlCQUFpQixTQUFTLENBQUMsZ0NBQWdDLGlCQUFpQixNQUFNLFdBQVcsU0FBUyxDQUFDLEVBQUU7QUFDN0k7QUFBQSxJQUNGO0FBQ0EsVUFBTSxhQUFhLEVBQUUsUUFBUSxPQUFPLFVBQVU7QUFDOUM7QUFBQSxFQUNGO0FBRUEsTUFBSSxDQUFDLE1BQU0sWUFBWTtBQUNyQixVQUFNLFNBQVMsS0FBSyxnQkFBZ0IsaUJBQWlCLFNBQVMsQ0FBQyxzQkFBc0I7QUFDckY7QUFBQSxFQUNGO0FBQ0EsTUFBSSxDQUFDLE1BQU0sV0FBVyxRQUFRO0FBQzVCLFVBQU0sU0FBUyxLQUFLLHNCQUFzQixpQkFBaUIsTUFBTSxXQUFXLFNBQVMsQ0FBQyx1QkFBdUI7QUFBQSxFQUMvRztBQUNBLFFBQU0sYUFBYTtBQUNyQjtBQUlBLFNBQVMsc0JBQXNCLE9BQW1DLFdBQW1CLE1BQW9CO0FBQ3ZHLE1BQUksTUFBTSxZQUFZO0FBQ3BCLFVBQU0sbUJBQW1CLElBQUksU0FBUztBQUN0QyxVQUFNLFdBQVcsV0FBVyxNQUFNLG9CQUFvQixJQUFJLFNBQVM7QUFDbkU7QUFBQSxFQUNGO0FBQ0EsTUFBSSxNQUFNLHlCQUF5QixRQUFRLEtBQUssS0FBSyxNQUFNLElBQUk7QUFDN0Q7QUFBQSxFQUNGO0FBQ0EsUUFBTSxtQkFBbUIsSUFBSSxTQUFTO0FBQ3RDLE1BQUksQ0FBQyxNQUFNLG9CQUFvQixJQUFJLFNBQVMsR0FBRztBQUM3QyxVQUFNLFNBQVMsS0FBSywwQkFBMEIsaUJBQWlCLE1BQU0sb0JBQW9CLENBQUMsdUJBQXVCO0FBQUEsRUFDbkg7QUFDQSxRQUFNLHVCQUF1QjtBQUMvQjtBQUVBLFNBQVMsYUFBYSxTQUFtQixZQUF3QztBQUMvRSxTQUFPO0FBQUEsSUFDTCxLQUFLLENBQUMsR0FBRyxTQUFTLEdBQUcsVUFBVTtBQUFBLElBQy9CO0FBQUEsSUFDQTtBQUFBLEVBQ0Y7QUFDRjtBQVNBLFNBQVMsMEJBQTBCLFNBQTZCO0FBQzlELFFBQU0sWUFBd0IsQ0FBQztBQUMvQixNQUFJLGdCQUFnQjtBQUNwQixhQUFXLENBQUMsT0FBTyxJQUFJLEtBQUssUUFBUSxNQUFNLElBQUksRUFBRSxRQUFRLEdBQUc7QUFDekQsUUFBSSxtQkFBbUIsS0FBSyxJQUFJLEdBQUc7QUFDakMsc0JBQWdCLENBQUM7QUFDakI7QUFBQSxJQUNGO0FBQ0EsUUFBSSxDQUFDLGVBQWU7QUFDbEIsZ0JBQVUsS0FBSyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsSUFDaEM7QUFBQSxFQUNGO0FBQ0EsU0FBTztBQUNUO0FBRUEsU0FBUyx1QkFBdUIsTUFBK0I7QUFDN0QsUUFBTSxVQUFvQixDQUFDO0FBQzNCLGFBQVcsUUFBUSxzQkFBc0IsS0FBSyxPQUFPLEdBQUc7QUFDdEQsZUFBVyxTQUFTLGdCQUFnQixJQUFJLEVBQUUsU0FBUyxxQkFBcUIsR0FBRztBQUN6RSxZQUFNLFNBQVMsdUJBQXVCLE9BQU8sUUFBUSxFQUFFLFdBQVcsd0JBQXdCLEVBQUU7QUFDNUYsWUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLE9BQU8sTUFBTSxLQUFLLENBQUM7QUFDM0MsVUFBSSxxQkFBcUIsS0FBSyxRQUFRLEtBQUssQ0FBQyxTQUFTLFlBQVksRUFBRSxTQUFTLEtBQUssR0FBRztBQUNsRjtBQUFBLE1BQ0Y7QUFDQSxjQUFRLEtBQUssS0FBSyxRQUFRLEtBQUssWUFBWSxHQUFHLHNCQUFzQixRQUFRLENBQUMsQ0FBQztBQUFBLElBQ2hGO0FBQUEsRUFDRjtBQUNBLFNBQU87QUFDVDtBQUVBLFNBQVMsd0JBQXdCLFdBQTZCO0FBQzVELFNBQU8sQ0FBQyxHQUFHLFVBQVUsU0FBUyxJQUFJLE9BQU8sT0FBTyx3QkFBd0Isc0JBQXNCLCtCQUErQixJQUFJLENBQUMsQ0FBQyxFQUNoSSxPQUFPLENBQUMsVUFBVSxDQUFDLGtCQUFrQix1QkFBdUIsT0FBTyxXQUFXLENBQUMsQ0FBQyxFQUNoRixJQUFJLENBQUMsVUFBVSx1QkFBdUIsT0FBTyxNQUFNLENBQUM7QUFDekQ7QUFFQSxTQUFTLDBCQUEwQixXQUE2QjtBQUM5RCxTQUFPLENBQUMsR0FBRyxVQUFVLFNBQVMsSUFBSSxPQUFPLE9BQU8sd0JBQXdCLHNCQUFzQiw4QkFBOEIsSUFBSSxDQUFDLENBQUMsRUFDL0gsT0FBTyxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsdUJBQXVCLE9BQU8sV0FBVyxDQUFDLENBQUMsRUFDaEYsSUFBSSxDQUFDLFVBQVUsdUJBQXVCLE9BQU8sTUFBTSxDQUFDO0FBQ3pEO0FBRUEsU0FBUyx1QkFBdUIsVUFBNEI7QUFDMUQsU0FBTyxDQUFDLEdBQUcsU0FBUyxTQUFTLHFCQUFxQixDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsdUJBQXVCLE9BQU8sTUFBTSxDQUFDO0FBQzNHO0FBRUEsU0FBUyxtQkFBbUIsZUFBaUM7QUFDM0QsU0FBTyxDQUFDLEdBQUcsY0FBYyxTQUFTLG1DQUFtQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsdUJBQXVCLE9BQU8sTUFBTSxDQUFDO0FBQzlIO0FBRUEsU0FBUyxxQkFBcUIsZUFBaUM7QUFDN0QsU0FBTyxDQUFDLEdBQUcsY0FBYyxTQUFTLHlCQUF5QixDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsdUJBQXVCLE9BQU8sTUFBTSxDQUFDO0FBQ3BIO0FBR0EsU0FBUyx3QkFBd0IsU0FBMkI7QUFDMUQsU0FBTywwQkFBMEIsT0FBTyxFQUNyQyxPQUFPLENBQUMsYUFBYSxpQkFBaUIsS0FBSyxnQkFBZ0IsU0FBUyxJQUFJLENBQUMsQ0FBQyxFQUMxRSxJQUFJLENBQUMsYUFBYSxTQUFTLEtBQUs7QUFDckM7QUFFQSxTQUFTLGlCQUFpQixXQUEyQjtBQUNuRCxTQUFPLFFBQVEsT0FBTyxZQUFZLENBQUMsQ0FBQztBQUN0QztBQUVBLFNBQVMsc0JBQXNCLFNBQTJCO0FBQ3hELFNBQU8sMEJBQTBCLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxTQUFTLElBQUk7QUFDM0U7QUFHQSxTQUFTLE1BQU0sU0FBMEI7QUFDdkMsYUFBVyxRQUFRLGlCQUFpQixPQUFPLEVBQUUsTUFBTSxJQUFJLEdBQUc7QUFDeEQsVUFBTSxjQUFjLEtBQUssS0FBSztBQUM5QixRQUFJLGdCQUFnQixJQUFJO0FBQ3RCO0FBQUEsSUFDRjtBQUNBLFdBQU8sV0FBVyxLQUFLLFdBQVc7QUFBQSxFQUNwQztBQUNBLFNBQU87QUFDVDtBQUlBLFNBQVMsY0FBYyxTQUEwQjtBQUMvQyxhQUFXLFFBQVEsaUJBQWlCLE9BQU8sRUFBRSxNQUFNLElBQUksR0FBRztBQUN4RCxRQUFJLG1CQUFtQixLQUFLLElBQUksR0FBRztBQUNqQyxhQUFPO0FBQUEsSUFDVDtBQUNBLFVBQU0sY0FBYyxLQUFLLEtBQUs7QUFDOUIsUUFBSSxnQkFBZ0IsTUFBTSxnQkFBZ0IsS0FBSyxXQUFXLEdBQUc7QUFDM0Q7QUFBQSxJQUNGO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFDQSxTQUFPO0FBQ1Q7QUFJQSxTQUFTLFlBQVksU0FBMEI7QUFDN0MsU0FBTyx3QkFBd0IsT0FBTyxFQUFFLFNBQVM7QUFDbkQ7QUFFQSxTQUFTLGtCQUFrQixXQUE0QjtBQUNyRCxTQUFPLDRCQUE0QixLQUFLLFNBQVM7QUFDbkQ7QUFFQSxTQUFTLGFBQWEsU0FBaUIsTUFBZ0M7QUFDckUsVUFBUSxTQUFTO0FBQUEsSUFDZixLQUFLLFNBQVM7QUFDWixhQUFPLGFBQWEsd0JBQXdCLElBQUksR0FBRywwQkFBMEIsSUFBSSxDQUFDO0FBQUEsSUFDcEY7QUFBQSxJQUNBLEtBQUssUUFBUTtBQUNYLGFBQU8sYUFBYSxDQUFDLEdBQUcsdUJBQXVCLElBQUksQ0FBQztBQUFBLElBQ3REO0FBQUEsSUFDQSxTQUFTO0FBQ1AsYUFBTyxhQUFhLG1CQUFtQixJQUFJLEdBQUcscUJBQXFCLElBQUksQ0FBQztBQUFBLElBQzFFO0FBQUEsRUFDRjtBQUNGO0FBTUEsU0FBUyw0QkFBNEIsU0FBZ0M7QUFDbkUsUUFBTSxjQUFjLG9CQUFvQixLQUFLLE9BQU8sSUFBSSxDQUFDO0FBQ3pELE1BQUksZ0JBQWdCLFFBQVc7QUFDN0IsV0FBTztBQUFBLEVBQ1Q7QUFDQSxRQUFNLFNBQVMsMkJBQTJCLEtBQUssV0FBVyxHQUFHLFNBQVMsUUFBUTtBQUM5RSxNQUFJLFdBQVcsUUFBVztBQUN4QixXQUFPO0FBQUEsRUFDVDtBQUNBLFNBQU8sT0FBTyxLQUFLLEVBQUUsUUFBUSw4Q0FBOEMsVUFBVTtBQUN2RjtBQU1BLFNBQVMsdUJBQXVCLFNBQXdDO0FBQ3RFLFFBQU0sUUFBb0M7QUFBQSxJQUN4QyxvQkFBb0Isb0JBQUksSUFBWTtBQUFBLElBQ3BDLFlBQVk7QUFBQSxJQUNaLHNCQUFzQjtBQUFBLElBQ3RCLFVBQVUsQ0FBQztBQUFBLElBQ1gscUJBQXFCLElBQUksSUFBSSx3QkFBd0IsT0FBTyxDQUFDO0FBQUEsRUFDL0Q7QUFFQSxhQUFXLEVBQUUsT0FBTyxLQUFLLEtBQUssMEJBQTBCLE9BQU8sR0FBRztBQUNoRSxVQUFNLFFBQVEsa0JBQWtCLEtBQUssSUFBSTtBQUN6QyxRQUFJLE9BQU87QUFDVCw2QkFBdUIsT0FBTyxPQUFPLEtBQUs7QUFBQSxJQUM1QyxXQUFXLHdCQUF3QixLQUFLLElBQUksR0FBRztBQUM3QyxZQUFNLFNBQVMsS0FBSyw0QkFBNEIsaUJBQWlCLEtBQUssQ0FBQyxFQUFFO0FBQUEsSUFDM0UsT0FBTztBQUNMLDRCQUFzQixPQUFPLE9BQU8sSUFBSTtBQUFBLElBQzFDO0FBQUEsRUFDRjtBQUVBLE1BQUksTUFBTSxZQUFZO0FBQ3BCLFVBQU0sU0FBUyxLQUFLLHNCQUFzQixpQkFBaUIsTUFBTSxXQUFXLFNBQVMsQ0FBQyw4QkFBOEI7QUFBQSxFQUN0SDtBQUNBLE1BQUksTUFBTSx5QkFBeUIsTUFBTTtBQUN2QyxVQUFNLFNBQVMsS0FBSywwQkFBMEIsaUJBQWlCLE1BQU0sb0JBQW9CLENBQUMsdUJBQXVCO0FBQUEsRUFDbkg7QUFDQSxTQUFPLEVBQUUsb0JBQW9CLE1BQU0sb0JBQW9CLFVBQVUsTUFBTSxTQUFTO0FBQ2xGO0FBRUEsU0FBUyxpQkFBaUIsU0FBeUI7QUFDakQsU0FBTyxRQUFRLFFBQVEscUJBQXFCLEVBQUU7QUFDaEQ7QUFFQSxTQUFTLGdCQUFnQixNQUFzQjtBQUM3QyxTQUFPLEtBQUssV0FBVyxxQkFBcUIsRUFBRTtBQUNoRDtBQUlBLFNBQVMsc0JBQXNCLE9BQXVCO0FBQ3BELE1BQUk7QUFDRixXQUFPLG1CQUFtQixLQUFLO0FBQUEsRUFDakMsUUFBUTtBQUNOLFdBQU87QUFBQSxFQUNUO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
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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
|
|
@@ -10,6 +10,11 @@
|
|
|
10
10
|
* GitHub-release step (which uploads every file in `dist/build/`) attaches it automatically. The
|
|
11
11
|
* archive name carries the plugin id (so several plugins' demo vaults never collide) and the version
|
|
12
12
|
* (so each release ships its own distinctly named artifact).
|
|
13
|
+
*
|
|
14
|
+
* The archived copy also carries the `.obsidian/app.json` settings this package owns (see
|
|
15
|
+
* `demo-vault-app-json.ts`). They are written into the ZIP ENTRY and never into the repo folder: the
|
|
16
|
+
* committed `app.json` is a tracked file, and `updateVersion` archives after it has already pushed, so
|
|
17
|
+
* an in-place write would leave an uncommitted change behind a published release.
|
|
13
18
|
*/
|
|
14
19
|
/**
|
|
15
20
|
* Archives the plugin's demo vault (`demo-vault/` in the repo root) as a release artifact.
|
|
@@ -34,6 +34,11 @@ import {
|
|
|
34
34
|
getFolderName,
|
|
35
35
|
join
|
|
36
36
|
} from "../path.mjs";
|
|
37
|
+
import {
|
|
38
|
+
buildArchivedDemoVaultAppJsonContent,
|
|
39
|
+
findOwnedDemoVaultAppJsonSettings,
|
|
40
|
+
parseDemoVaultAppJson
|
|
41
|
+
} from "./demo-vault-app-json.mjs";
|
|
37
42
|
import { ObsidianDevUtilsRepoPaths } from "./obsidian-dev-utils-repo-paths.mjs";
|
|
38
43
|
import {
|
|
39
44
|
getRootFolder,
|
|
@@ -66,9 +71,20 @@ async function archivePluginDemoVault() {
|
|
|
66
71
|
});
|
|
67
72
|
const zip = new AdmZip();
|
|
68
73
|
zip.addLocalFolder(demoVaultPath);
|
|
74
|
+
injectAppJson(zip, await readCommittedAppJson());
|
|
69
75
|
await zip.writeZipPromise(zipPath);
|
|
70
76
|
return zipPath;
|
|
71
77
|
}
|
|
78
|
+
function injectAppJson(zip, appJson) {
|
|
79
|
+
const entryName = join(ObsidianPluginRepoPaths.DotObsidian, ObsidianPluginRepoPaths.AppJson);
|
|
80
|
+
const content = Buffer.from(buildArchivedDemoVaultAppJsonContent({ appJson }), "utf-8");
|
|
81
|
+
const entry = zip.getEntry(entryName);
|
|
82
|
+
if (entry) {
|
|
83
|
+
zip.updateFile(entry, content);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
zip.addFile(entryName, content);
|
|
87
|
+
}
|
|
72
88
|
async function injectDemoVaultHelper(demoedPluginId) {
|
|
73
89
|
const packageFolder = getRootFolder(getFolderName(import.meta.url));
|
|
74
90
|
if (!packageFolder) {
|
|
@@ -89,7 +105,21 @@ async function injectDemoVaultHelper(demoedPluginId) {
|
|
|
89
105
|
await writeFile(join(helperFolder, DATA_JSON_FILE_NAME), `${JSON.stringify(settings, null, DATA_JSON_INDENT)}
|
|
90
106
|
`, "utf-8");
|
|
91
107
|
}
|
|
108
|
+
async function readCommittedAppJson() {
|
|
109
|
+
const appJsonPath = resolvePathFromRootSafe({
|
|
110
|
+
path: join(ObsidianPluginRepoPaths.DemoVault, ObsidianPluginRepoPaths.DotObsidian, ObsidianPluginRepoPaths.AppJson)
|
|
111
|
+
});
|
|
112
|
+
const content = existsSync(appJsonPath) ? await readFile(appJsonPath, "utf-8") : null;
|
|
113
|
+
const appJson = parseDemoVaultAppJson({ content, path: appJsonPath });
|
|
114
|
+
const ownedSettings = findOwnedDemoVaultAppJsonSettings({ appJson });
|
|
115
|
+
if (ownedSettings.length > 0) {
|
|
116
|
+
throw new Error(
|
|
117
|
+
`${appJsonPath} sets ${ownedSettings.join(", ")}, which obsidian-dev-utils owns and writes into the archived demo vault. Settings it owns must not be committed.`
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
return appJson;
|
|
121
|
+
}
|
|
92
122
|
export {
|
|
93
123
|
archivePluginDemoVault
|
|
94
124
|
};
|
|
95
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9kZW1vLXZhdWx0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQXJjaGl2ZXMgYSBwbHVnaW4ncyBkZW1vIHZhdWx0IGFzIGEgcmVsZWFzZSBhcnRpZmFjdC5cbiAqXG4gKiBBIHBsdWdpbiBjYW4gc2hpcCBhIGN1cmF0ZWQgZGVtbyB2YXVsdCBhdCBgZGVtby12YXVsdC9gIGluIGl0cyByZXBvIHJvb3QuIEF0IHJlbGVhc2UgdGltZSB0aGlzXG4gKiBtb2R1bGUgaW5zdGFsbHMgdGhlIGZyZXNobHkgYnVpbHQgcGx1Z2luIGludG8gdGhhdCB2YXVsdCdzIGAub2JzaWRpYW4vcGx1Z2lucy88aWQ+L2AgZm9sZGVyIGFuZFxuICogemlwcyB0aGUgd2hvbGUgdmF1bHQgaW50byBgZGlzdC9idWlsZC88cGx1Z2luLWlkPi1kZW1vLXZhdWx0LTx2ZXJzaW9uPi56aXBgLCBzbyB0aGUgZXhpc3RpbmdcbiAqIEdpdEh1Yi1yZWxlYXNlIHN0ZXAgKHdoaWNoIHVwbG9hZHMgZXZlcnkgZmlsZSBpbiBgZGlzdC9idWlsZC9gKSBhdHRhY2hlcyBpdCBhdXRvbWF0aWNhbGx5LiBUaGVcbiAqIGFyY2hpdmUgbmFtZSBjYXJyaWVzIHRoZSBwbHVnaW4gaWQgKHNvIHNldmVyYWwgcGx1Z2lucycgZGVtbyB2YXVsdHMgbmV2ZXIgY29sbGlkZSkgYW5kIHRoZSB2ZXJzaW9uXG4gKiAoc28gZWFjaCByZWxlYXNlIHNoaXBzIGl0cyBvd24gZGlzdGluY3RseSBuYW1lZCBhcnRpZmFjdCkuXG4gKi9cblxuaW1wb3J0IEFkbVppcCBmcm9tICdhZG0temlwJztcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7XG4gIGNwLFxuICBta2RpcixcbiAgcmVhZEZpbGUsXG4gIHdyaXRlRmlsZVxufSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcblxuaW1wb3J0IHR5cGUgeyBEZW1vVmF1bHRIZWxwZXJTZXR0aW5ncyB9IGZyb20gJy4uL29ic2lkaWFuL2RlbW8tdmF1bHQtaGVscGVyLXNldHRpbmdzLnRzJztcblxuaW1wb3J0IHsgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMgfSBmcm9tICcuLi9vYnNpZGlhbi9wbHVnaW4vb2JzaWRpYW4tcGx1Z2luLXJlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgZ2V0Rm9sZGVyTmFtZSxcbiAgam9pblxufSBmcm9tICcuLi9wYXRoLnRzJztcbmltcG9ydCB7IE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMgfSBmcm9tICcuL29ic2lkaWFuLWRldi11dGlscy1yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7XG4gIGdldFJvb3RGb2xkZXIsXG4gIHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlXG59IGZyb20gJy4vcm9vdC50cyc7XG5cbmNvbnN0IERFTU9fVkFVTFRfSEVMUEVSX1BMVUdJTl9JRCA9ICdkZW1vLXZhdWx0LWhlbHBlcic7XG5jb25zdCBEQVRBX0pTT05fRklMRV9OQU1FID0gJ2RhdGEuanNvbic7XG5jb25zdCBEQVRBX0pTT05fSU5ERU5UID0gMjtcblxuLyoqXG4gKiBUaGUgbWluaW1hbCBzaGFwZSBvZiBhIHBsdWdpbiBgbWFuaWZlc3QuanNvbmAgcmVhZCBieSB7QGxpbmsgYXJjaGl2ZVBsdWdpbkRlbW9WYXVsdH0uXG4gKi9cbmludGVyZmFjZSBQbHVnaW5NYW5pZmVzdCB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGlkLCB1c2VkIGFzIHRoZSBmb2xkZXIgbmFtZSB1bmRlciBgZGVtby12YXVsdC8ub2JzaWRpYW4vcGx1Z2lucy9gLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiB2ZXJzaW9uLCBlbWJlZGRlZCBpbiB0aGUgYXJjaGl2ZSBmaWxlIG5hbWUuXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQXJjaGl2ZXMgdGhlIHBsdWdpbidzIGRlbW8gdmF1bHQgKGBkZW1vLXZhdWx0L2AgaW4gdGhlIHJlcG8gcm9vdCkgYXMgYSByZWxlYXNlIGFydGlmYWN0LlxuICpcbiAqIEluc3RhbGxzIHRoZSBmcmVzaGx5IGJ1aWx0IHBsdWdpbiBmcm9tIGBkaXN0L2J1aWxkL2AgaW50byB0aGUgdmF1bHQnc1xuICogYC5vYnNpZGlhbi9wbHVnaW5zLzxpZD4vYCBmb2xkZXIsIHRoZW4gemlwcyB0aGUgd2hvbGUgdmF1bHQgdG9cbiAqIGBkaXN0L2J1aWxkLzxwbHVnaW4taWQ+LWRlbW8tdmF1bHQtPHZlcnNpb24+LnppcGAuXG4gKlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgY3JlYXRlZCB6aXAgYXJjaGl2ZSwgb3JcbiAqIGBudWxsYCBpZiB0aGUgcmVwbyBoYXMgbm8gYGRlbW8tdmF1bHQvYCBmb2xkZXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcmNoaXZlUGx1Z2luRGVtb1ZhdWx0KCk6IFByb21pc2U8bnVsbCB8IHN0cmluZz4ge1xuICBjb25zdCBkZW1vVmF1bHRQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5EZW1vVmF1bHQgfSk7XG4gIGlmICghZXhpc3RzU3luYyhkZW1vVmF1bHRQYXRoKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbWFuaWZlc3RQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYW5pZmVzdEpzb24gfSk7XG4gIGNvbnN0IG1hbmlmZXN0ID0gSlNPTi5wYXJzZShhd2FpdCByZWFkRmlsZShtYW5pZmVzdFBhdGgsICd1dGYtOCcpKSBhcyBQbHVnaW5NYW5pZmVzdDtcblxuICBjb25zdCBwbHVnaW5Gb2xkZXIgPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7XG4gICAgcGF0aDogam9pbihcbiAgICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRlbW9WYXVsdCxcbiAgICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRvdE9ic2lkaWFuLFxuICAgICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuUGx1Z2lucyxcbiAgICAgIG1hbmlmZXN0LmlkXG4gICAgKVxuICB9KTtcbiAgYXdhaXQgbWtkaXIocGx1Z2luRm9sZGVyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBjb25zdCBkaXN0QnVpbGRQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5EaXN0QnVpbGQgfSk7XG4gIGF3YWl0IGNwKGRpc3RCdWlsZFBhdGgsIHBsdWdpbkZvbGRlciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgYXdhaXQgaW5qZWN0RGVtb1ZhdWx0SGVscGVyKG1hbmlmZXN0LmlkKTtcblxuICAvLyBBcmNoaXZlIG5hbWUgaXMgaGFuZC1zeW5jZWQgd2l0aCB0aGUgcnVudGltZSBgb3BlbkRlbW9WYXVsdGAgb3BlbmVyLCB3aGljaCBkb3dubG9hZHMgdGhpcyBleGFjdCBhc3NldCBuYW1lLlxuICBjb25zdCB6aXBQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoe1xuICAgIHBhdGg6IGpvaW4oT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRGlzdEJ1aWxkLCBgJHttYW5pZmVzdC5pZH0tZGVtby12YXVsdC0ke21hbmlmZXN0LnZlcnNpb259LnppcGApXG4gIH0pO1xuICBjb25zdCB6aXAgPSBuZXcgQWRtWmlwKCk7XG4gIHppcC5hZGRMb2NhbEZvbGRlcihkZW1vVmF1bHRQYXRoKTtcbiAgYXdhaXQgemlwLndyaXRlWmlwUHJvbWlzZSh6aXBQYXRoKTtcbiAgcmV0dXJuIHppcFBhdGg7XG59XG5cbi8vIEluamVjdHMgdGhlIGJ1aWx0LCBgb2JzaWRpYW4tZGV2LXV0aWxzYC1vd25lZCBgZGVtby12YXVsdC1oZWxwZXJgIGJvb3RzdHJhcCBwbHVnaW4gKHNoaXBwZWQgaW4gdGhpcyBwYWNrYWdlKSBpbnRvIHRoZSBkZW1vIHZhdWx0LCBzbyBubyBwZXItdmF1bHQgY29weSBpcyBjb21taXR0ZWQgYW5kIGFuIGBvYnNpZGlhbi1kZXYtdXRpbHNgIGJ1bXAgcHJvcGFnYXRlcyBmaXhlcy5cbi8vXG4vLyBBbG9uZ3NpZGUgdGhlIGJpbmFyaWVzIGl0IHdyaXRlcyB0aGUgaGVscGVyJ3Mgb3duIGBkYXRhLmpzb25gIG5hbWluZyB0aGUgZGVtb25zdHJhdGVkIHBsdWdpbi4gVGhhdCBpc1xuLy8gVGhlIG9uZSBtb21lbnQgdGhlIGlkIGlzIGtub3duIGZvciBjZXJ0YWluIFx1MjAxNCBpdCBjb21lcyBmcm9tIHRoZSBwbHVnaW4ncyBvd24gbWFuaWZlc3QgXHUyMDE0IHdoZXJlYXMgdGhlXG4vLyBPcGVuZWQgdmF1bHQgb25seSBvZmZlcnMgcGx1Z2luIGZvbGRlcnMgdG8gY291bnQsIHdoaWNoIHRoZSBib290c3RyYXAgaXRzZWxmIGFkZHMgdG8gKHNlZVxuLy8gYERlbW9WYXVsdEhlbHBlclNldHRpbmdzYCkuXG5hc3luYyBmdW5jdGlvbiBpbmplY3REZW1vVmF1bHRIZWxwZXIoZGVtb2VkUGx1Z2luSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwYWNrYWdlRm9sZGVyID0gZ2V0Um9vdEZvbGRlcihnZXRGb2xkZXJOYW1lKGltcG9ydC5tZXRhLnVybCkpO1xuICBpZiAoIXBhY2thZ2VGb2xkZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCByZXNvbHZlIHRoZSBvYnNpZGlhbi1kZXYtdXRpbHMgcGFja2FnZSBmb2xkZXIgdG8gaW5qZWN0IHRoZSBkZW1vLXZhdWx0LWhlbHBlciBwbHVnaW4uJyk7XG4gIH1cblxuICBjb25zdCBoZWxwZXJTb3VyY2VQYXRoID0gam9pbihwYWNrYWdlRm9sZGVyLCBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkRpc3REZW1vVmF1bHRIZWxwZXIpO1xuICBjb25zdCBoZWxwZXJGb2xkZXIgPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7XG4gICAgcGF0aDogam9pbihcbiAgICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRlbW9WYXVsdCxcbiAgICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRvdE9ic2lkaWFuLFxuICAgICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuUGx1Z2lucyxcbiAgICAgIERFTU9fVkFVTFRfSEVMUEVSX1BMVUdJTl9JRFxuICAgIClcbiAgfSk7XG4gIGF3YWl0IG1rZGlyKGhlbHBlckZvbGRlciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGF3YWl0IGNwKGhlbHBlclNvdXJjZVBhdGgsIGhlbHBlckZvbGRlciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgY29uc3Qgc2V0dGluZ3M6IERlbW9WYXVsdEhlbHBlclNldHRpbmdzID0geyBkZW1vZWRQbHVnaW5JZCB9O1xuICBhd2FpdCB3cml0ZUZpbGUoam9pbihoZWxwZXJGb2xkZXIsIERBVEFfSlNPTl9GSUxFX05BTUUpLCBgJHtKU09OLnN0cmluZ2lmeShzZXR0aW5ncywgbnVsbCwgREFUQV9KU09OX0lOREVOVCl9XFxuYCwgJ3V0Zi04Jyk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWFBLE9BQU8sWUFBWTtBQUNuQixTQUFTLGtCQUFrQjtBQUMzQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBSVAsU0FBUywrQkFBK0I7QUFDeEM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGlDQUFpQztBQUMxQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLE1BQU0sOEJBQThCO0FBQ3BDLE1BQU0sc0JBQXNCO0FBQzVCLE1BQU0sbUJBQW1CO0FBMkJ6QixlQUFzQix5QkFBaUQ7QUFDckUsUUFBTSxnQkFBZ0Isd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsVUFBVSxDQUFDO0FBQ3pGLE1BQUksQ0FBQyxXQUFXLGFBQWEsR0FBRztBQUM5QixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sZUFBZSx3QkFBd0IsRUFBRSxNQUFNLHdCQUF3QixhQUFhLENBQUM7QUFDM0YsUUFBTSxXQUFXLEtBQUssTUFBTSxNQUFNLFNBQVMsY0FBYyxPQUFPLENBQUM7QUFFakUsUUFBTSxlQUFlLHdCQUF3QjtBQUFBLElBQzNDLE1BQU07QUFBQSxNQUNKLHdCQUF3QjtBQUFBLE1BQ3hCLHdCQUF3QjtBQUFBLE1BQ3hCLHdCQUF3QjtBQUFBLE1BQ3hCLFNBQVM7QUFBQSxJQUNYO0FBQUEsRUFDRixDQUFDO0FBQ0QsUUFBTSxNQUFNLGNBQWMsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUU3QyxRQUFNLGdCQUFnQix3QkFBd0IsRUFBRSxNQUFNLHdCQUF3QixVQUFVLENBQUM7QUFDekYsUUFBTSxHQUFHLGVBQWUsY0FBYyxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBRXpELFFBQU0sc0JBQXNCLFNBQVMsRUFBRTtBQUd2QyxRQUFNLFVBQVUsd0JBQXdCO0FBQUEsSUFDdEMsTUFBTSxLQUFLLHdCQUF3QixXQUFXLEdBQUcsU0FBUyxFQUFFLGVBQWUsU0FBUyxPQUFPLE1BQU07QUFBQSxFQUNuRyxDQUFDO0FBQ0QsUUFBTSxNQUFNLElBQUksT0FBTztBQUN2QixNQUFJLGVBQWUsYUFBYTtBQUNoQyxRQUFNLElBQUksZ0JBQWdCLE9BQU87QUFDakMsU0FBTztBQUNUO0FBUUEsZUFBZSxzQkFBc0IsZ0JBQXVDO0FBQzFFLFFBQU0sZ0JBQWdCLGNBQWMsY0FBYyxZQUFZLEdBQUcsQ0FBQztBQUNsRSxNQUFJLENBQUMsZUFBZTtBQUNsQixVQUFNLElBQUksTUFBTSxpR0FBaUc7QUFBQSxFQUNuSDtBQUVBLFFBQU0sbUJBQW1CLEtBQUssZUFBZSwwQkFBMEIsbUJBQW1CO0FBQzFGLFFBQU0sZUFBZSx3QkFBd0I7QUFBQSxJQUMzQyxNQUFNO0FBQUEsTUFDSix3QkFBd0I7QUFBQSxNQUN4Qix3QkFBd0I7QUFBQSxNQUN4Qix3QkFBd0I7QUFBQSxNQUN4QjtBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUM7QUFDRCxRQUFNLE1BQU0sY0FBYyxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQzdDLFFBQU0sR0FBRyxrQkFBa0IsY0FBYyxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBRTVELFFBQU0sV0FBb0MsRUFBRSxlQUFlO0FBQzNELFFBQU0sVUFBVSxLQUFLLGNBQWMsbUJBQW1CLEdBQUcsR0FBRyxLQUFLLFVBQVUsVUFBVSxNQUFNLGdCQUFnQixDQUFDO0FBQUEsR0FBTSxPQUFPO0FBQzNIOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9kZW1vLXZhdWx0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQXJjaGl2ZXMgYSBwbHVnaW4ncyBkZW1vIHZhdWx0IGFzIGEgcmVsZWFzZSBhcnRpZmFjdC5cbiAqXG4gKiBBIHBsdWdpbiBjYW4gc2hpcCBhIGN1cmF0ZWQgZGVtbyB2YXVsdCBhdCBgZGVtby12YXVsdC9gIGluIGl0cyByZXBvIHJvb3QuIEF0IHJlbGVhc2UgdGltZSB0aGlzXG4gKiBtb2R1bGUgaW5zdGFsbHMgdGhlIGZyZXNobHkgYnVpbHQgcGx1Z2luIGludG8gdGhhdCB2YXVsdCdzIGAub2JzaWRpYW4vcGx1Z2lucy88aWQ+L2AgZm9sZGVyIGFuZFxuICogemlwcyB0aGUgd2hvbGUgdmF1bHQgaW50byBgZGlzdC9idWlsZC88cGx1Z2luLWlkPi1kZW1vLXZhdWx0LTx2ZXJzaW9uPi56aXBgLCBzbyB0aGUgZXhpc3RpbmdcbiAqIEdpdEh1Yi1yZWxlYXNlIHN0ZXAgKHdoaWNoIHVwbG9hZHMgZXZlcnkgZmlsZSBpbiBgZGlzdC9idWlsZC9gKSBhdHRhY2hlcyBpdCBhdXRvbWF0aWNhbGx5LiBUaGVcbiAqIGFyY2hpdmUgbmFtZSBjYXJyaWVzIHRoZSBwbHVnaW4gaWQgKHNvIHNldmVyYWwgcGx1Z2lucycgZGVtbyB2YXVsdHMgbmV2ZXIgY29sbGlkZSkgYW5kIHRoZSB2ZXJzaW9uXG4gKiAoc28gZWFjaCByZWxlYXNlIHNoaXBzIGl0cyBvd24gZGlzdGluY3RseSBuYW1lZCBhcnRpZmFjdCkuXG4gKlxuICogVGhlIGFyY2hpdmVkIGNvcHkgYWxzbyBjYXJyaWVzIHRoZSBgLm9ic2lkaWFuL2FwcC5qc29uYCBzZXR0aW5ncyB0aGlzIHBhY2thZ2Ugb3ducyAoc2VlXG4gKiBgZGVtby12YXVsdC1hcHAtanNvbi50c2ApLiBUaGV5IGFyZSB3cml0dGVuIGludG8gdGhlIFpJUCBFTlRSWSBhbmQgbmV2ZXIgaW50byB0aGUgcmVwbyBmb2xkZXI6IHRoZVxuICogY29tbWl0dGVkIGBhcHAuanNvbmAgaXMgYSB0cmFja2VkIGZpbGUsIGFuZCBgdXBkYXRlVmVyc2lvbmAgYXJjaGl2ZXMgYWZ0ZXIgaXQgaGFzIGFscmVhZHkgcHVzaGVkLCBzb1xuICogYW4gaW4tcGxhY2Ugd3JpdGUgd291bGQgbGVhdmUgYW4gdW5jb21taXR0ZWQgY2hhbmdlIGJlaGluZCBhIHB1Ymxpc2hlZCByZWxlYXNlLlxuICovXG5cbmltcG9ydCBBZG1aaXAgZnJvbSAnYWRtLXppcCc7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQge1xuICBjcCxcbiAgbWtkaXIsXG4gIHJlYWRGaWxlLFxuICB3cml0ZUZpbGVcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5cbmltcG9ydCB0eXBlIHsgRGVtb1ZhdWx0SGVscGVyU2V0dGluZ3MgfSBmcm9tICcuLi9vYnNpZGlhbi9kZW1vLXZhdWx0LWhlbHBlci1zZXR0aW5ncy50cyc7XG5pbXBvcnQgdHlwZSB7IERlbW9WYXVsdEFwcEpzb24gfSBmcm9tICcuL2RlbW8tdmF1bHQtYXBwLWpzb24udHMnO1xuXG5pbXBvcnQgeyBPYnNpZGlhblBsdWdpblJlcG9QYXRocyB9IGZyb20gJy4uL29ic2lkaWFuL3BsdWdpbi9vYnNpZGlhbi1wbHVnaW4tcmVwby1wYXRocy50cyc7XG5pbXBvcnQge1xuICBnZXRGb2xkZXJOYW1lLFxuICBqb2luXG59IGZyb20gJy4uL3BhdGgudHMnO1xuaW1wb3J0IHtcbiAgYnVpbGRBcmNoaXZlZERlbW9WYXVsdEFwcEpzb25Db250ZW50LFxuICBmaW5kT3duZWREZW1vVmF1bHRBcHBKc29uU2V0dGluZ3MsXG4gIHBhcnNlRGVtb1ZhdWx0QXBwSnNvblxufSBmcm9tICcuL2RlbW8tdmF1bHQtYXBwLWpzb24udHMnO1xuaW1wb3J0IHsgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocyB9IGZyb20gJy4vb2JzaWRpYW4tZGV2LXV0aWxzLXJlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgZ2V0Um9vdEZvbGRlcixcbiAgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmVcbn0gZnJvbSAnLi9yb290LnRzJztcblxuY29uc3QgREVNT19WQVVMVF9IRUxQRVJfUExVR0lOX0lEID0gJ2RlbW8tdmF1bHQtaGVscGVyJztcbmNvbnN0IERBVEFfSlNPTl9GSUxFX05BTUUgPSAnZGF0YS5qc29uJztcbmNvbnN0IERBVEFfSlNPTl9JTkRFTlQgPSAyO1xuXG4vKipcbiAqIFRoZSBtaW5pbWFsIHNoYXBlIG9mIGEgcGx1Z2luIGBtYW5pZmVzdC5qc29uYCByZWFkIGJ5IHtAbGluayBhcmNoaXZlUGx1Z2luRGVtb1ZhdWx0fS5cbiAqL1xuaW50ZXJmYWNlIFBsdWdpbk1hbmlmZXN0IHtcbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gaWQsIHVzZWQgYXMgdGhlIGZvbGRlciBuYW1lIHVuZGVyIGBkZW1vLXZhdWx0Ly5vYnNpZGlhbi9wbHVnaW5zL2AuXG4gICAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIHZlcnNpb24sIGVtYmVkZGVkIGluIHRoZSBhcmNoaXZlIGZpbGUgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBBcmNoaXZlcyB0aGUgcGx1Z2luJ3MgZGVtbyB2YXVsdCAoYGRlbW8tdmF1bHQvYCBpbiB0aGUgcmVwbyByb290KSBhcyBhIHJlbGVhc2UgYXJ0aWZhY3QuXG4gKlxuICogSW5zdGFsbHMgdGhlIGZyZXNobHkgYnVpbHQgcGx1Z2luIGZyb20gYGRpc3QvYnVpbGQvYCBpbnRvIHRoZSB2YXVsdCdzXG4gKiBgLm9ic2lkaWFuL3BsdWdpbnMvPGlkPi9gIGZvbGRlciwgdGhlbiB6aXBzIHRoZSB3aG9sZSB2YXVsdCB0b1xuICogYGRpc3QvYnVpbGQvPHBsdWdpbi1pZD4tZGVtby12YXVsdC08dmVyc2lvbj4uemlwYC5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBjcmVhdGVkIHppcCBhcmNoaXZlLCBvclxuICogYG51bGxgIGlmIHRoZSByZXBvIGhhcyBubyBgZGVtby12YXVsdC9gIGZvbGRlci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFyY2hpdmVQbHVnaW5EZW1vVmF1bHQoKTogUHJvbWlzZTxudWxsIHwgc3RyaW5nPiB7XG4gIGNvbnN0IGRlbW9WYXVsdFBhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRlbW9WYXVsdCB9KTtcbiAgaWYgKCFleGlzdHNTeW5jKGRlbW9WYXVsdFBhdGgpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBtYW5pZmVzdFBhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hbmlmZXN0SnNvbiB9KTtcbiAgY29uc3QgbWFuaWZlc3QgPSBKU09OLnBhcnNlKGF3YWl0IHJlYWRGaWxlKG1hbmlmZXN0UGF0aCwgJ3V0Zi04JykpIGFzIFBsdWdpbk1hbmlmZXN0O1xuXG4gIGNvbnN0IHBsdWdpbkZvbGRlciA9IHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHtcbiAgICBwYXRoOiBqb2luKFxuICAgICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRGVtb1ZhdWx0LFxuICAgICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRG90T2JzaWRpYW4sXG4gICAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5QbHVnaW5zLFxuICAgICAgbWFuaWZlc3QuaWRcbiAgICApXG4gIH0pO1xuICBhd2FpdCBta2RpcihwbHVnaW5Gb2xkZXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIGNvbnN0IGRpc3RCdWlsZFBhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRpc3RCdWlsZCB9KTtcbiAgYXdhaXQgY3AoZGlzdEJ1aWxkUGF0aCwgcGx1Z2luRm9sZGVyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBhd2FpdCBpbmplY3REZW1vVmF1bHRIZWxwZXIobWFuaWZlc3QuaWQpO1xuXG4gIC8vIEFyY2hpdmUgbmFtZSBpcyBoYW5kLXN5bmNlZCB3aXRoIHRoZSBydW50aW1lIGBvcGVuRGVtb1ZhdWx0YCBvcGVuZXIsIHdoaWNoIGRvd25sb2FkcyB0aGlzIGV4YWN0IGFzc2V0IG5hbWUuXG4gIGNvbnN0IHppcFBhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7XG4gICAgcGF0aDogam9pbihPYnNpZGlhblBsdWdpblJlcG9QYXRocy5EaXN0QnVpbGQsIGAke21hbmlmZXN0LmlkfS1kZW1vLXZhdWx0LSR7bWFuaWZlc3QudmVyc2lvbn0uemlwYClcbiAgfSk7XG4gIGNvbnN0IHppcCA9IG5ldyBBZG1aaXAoKTtcbiAgemlwLmFkZExvY2FsRm9sZGVyKGRlbW9WYXVsdFBhdGgpO1xuICBpbmplY3RBcHBKc29uKHppcCwgYXdhaXQgcmVhZENvbW1pdHRlZEFwcEpzb24oKSk7XG4gIGF3YWl0IHppcC53cml0ZVppcFByb21pc2UoemlwUGF0aCk7XG4gIHJldHVybiB6aXBQYXRoO1xufVxuXG4vLyBTdG9yZXMgdGhlIGFyY2hpdmVkIHZhdWx0J3MgYC5vYnNpZGlhbi9hcHAuanNvbmAgXHUyMDE0IHRoZSBjb21taXR0ZWQgc2V0dGluZ3Mgd2l0aCB0aGUgb3duZWQgb25lcyBtZXJnZWRcbi8vIE92ZXIgdGhlbS4gVGhlIGVudHJ5IGlzIHJlcGxhY2VkIHJhdGhlciB0aGFuIHRoZSBmaWxlLCBzbyB0aGUgcmVwbyBmb2xkZXIgaXMgbGVmdCBleGFjdGx5IGFzIGl0IHdhcy5cbmZ1bmN0aW9uIGluamVjdEFwcEpzb24oemlwOiBBZG1aaXAsIGFwcEpzb246IERlbW9WYXVsdEFwcEpzb24pOiB2b2lkIHtcbiAgY29uc3QgZW50cnlOYW1lID0gam9pbihPYnNpZGlhblBsdWdpblJlcG9QYXRocy5Eb3RPYnNpZGlhbiwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQXBwSnNvbik7XG4gIGNvbnN0IGNvbnRlbnQgPSBCdWZmZXIuZnJvbShidWlsZEFyY2hpdmVkRGVtb1ZhdWx0QXBwSnNvbkNvbnRlbnQoeyBhcHBKc29uIH0pLCAndXRmLTgnKTtcbiAgY29uc3QgZW50cnkgPSB6aXAuZ2V0RW50cnkoZW50cnlOYW1lKTtcbiAgaWYgKGVudHJ5KSB7XG4gICAgemlwLnVwZGF0ZUZpbGUoZW50cnksIGNvbnRlbnQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEEgdmF1bHQgd2l0aCBub3RoaW5nIGVsc2UgdG8gY29uZmlndXJlIGNvbW1pdHMgbm8gYGFwcC5qc29uYCBhdCBhbGwsIHdoaWNoIGlzIHRoZSBleHBlY3RlZCBzdGF0ZS5cbiAgemlwLmFkZEZpbGUoZW50cnlOYW1lLCBjb250ZW50KTtcbn1cblxuLy8gSW5qZWN0cyB0aGUgYnVpbHQsIGBvYnNpZGlhbi1kZXYtdXRpbHNgLW93bmVkIGBkZW1vLXZhdWx0LWhlbHBlcmAgYm9vdHN0cmFwIHBsdWdpbiAoc2hpcHBlZCBpbiB0aGlzIHBhY2thZ2UpIGludG8gdGhlIGRlbW8gdmF1bHQsIHNvIG5vIHBlci12YXVsdCBjb3B5IGlzIGNvbW1pdHRlZCBhbmQgYW4gYG9ic2lkaWFuLWRldi11dGlsc2AgYnVtcCBwcm9wYWdhdGVzIGZpeGVzLlxuLy9cbi8vIEFsb25nc2lkZSB0aGUgYmluYXJpZXMgaXQgd3JpdGVzIHRoZSBoZWxwZXIncyBvd24gYGRhdGEuanNvbmAgbmFtaW5nIHRoZSBkZW1vbnN0cmF0ZWQgcGx1Z2luLiBUaGF0IGlzXG4vLyBUaGUgb25lIG1vbWVudCB0aGUgaWQgaXMga25vd24gZm9yIGNlcnRhaW4gXHUyMDE0IGl0IGNvbWVzIGZyb20gdGhlIHBsdWdpbidzIG93biBtYW5pZmVzdCBcdTIwMTQgd2hlcmVhcyB0aGVcbi8vIE9wZW5lZCB2YXVsdCBvbmx5IG9mZmVycyBwbHVnaW4gZm9sZGVycyB0byBjb3VudCwgd2hpY2ggdGhlIGJvb3RzdHJhcCBpdHNlbGYgYWRkcyB0byAoc2VlXG4vLyBgRGVtb1ZhdWx0SGVscGVyU2V0dGluZ3NgKS5cbmFzeW5jIGZ1bmN0aW9uIGluamVjdERlbW9WYXVsdEhlbHBlcihkZW1vZWRQbHVnaW5JZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBhY2thZ2VGb2xkZXIgPSBnZXRSb290Rm9sZGVyKGdldEZvbGRlck5hbWUoaW1wb3J0Lm1ldGEudXJsKSk7XG4gIGlmICghcGFja2FnZUZvbGRlcikge1xuICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IHJlc29sdmUgdGhlIG9ic2lkaWFuLWRldi11dGlscyBwYWNrYWdlIGZvbGRlciB0byBpbmplY3QgdGhlIGRlbW8tdmF1bHQtaGVscGVyIHBsdWdpbi4nKTtcbiAgfVxuXG4gIGNvbnN0IGhlbHBlclNvdXJjZVBhdGggPSBqb2luKHBhY2thZ2VGb2xkZXIsIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuRGlzdERlbW9WYXVsdEhlbHBlcik7XG4gIGNvbnN0IGhlbHBlckZvbGRlciA9IHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHtcbiAgICBwYXRoOiBqb2luKFxuICAgICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRGVtb1ZhdWx0LFxuICAgICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRG90T2JzaWRpYW4sXG4gICAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5QbHVnaW5zLFxuICAgICAgREVNT19WQVVMVF9IRUxQRVJfUExVR0lOX0lEXG4gICAgKVxuICB9KTtcbiAgYXdhaXQgbWtkaXIoaGVscGVyRm9sZGVyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXdhaXQgY3AoaGVscGVyU291cmNlUGF0aCwgaGVscGVyRm9sZGVyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBjb25zdCBzZXR0aW5nczogRGVtb1ZhdWx0SGVscGVyU2V0dGluZ3MgPSB7IGRlbW9lZFBsdWdpbklkIH07XG4gIGF3YWl0IHdyaXRlRmlsZShqb2luKGhlbHBlckZvbGRlciwgREFUQV9KU09OX0ZJTEVfTkFNRSksIGAke0pTT04uc3RyaW5naWZ5KHNldHRpbmdzLCBudWxsLCBEQVRBX0pTT05fSU5ERU5UKX1cXG5gLCAndXRmLTgnKTtcbn1cblxuLy8gUmVhZHMgdGhlIGRlbW8gdmF1bHQncyBjb21taXR0ZWQgYC5vYnNpZGlhbi9hcHAuanNvbmAsIHJlZnVzaW5nIHRoZSBzZXR0aW5ncyB0aGlzIHBhY2thZ2Ugb3ducy5cbi8vXG4vLyBUaG9zZSBzZXR0aW5ncyBhcmUgaW5qZWN0ZWQgaW50byB0aGUgYXJjaGl2ZSwgc28gYSBjb21taXR0ZWQgb25lIGlzIGEgc2Vjb25kIHNvdXJjZSBvZiB0cnV0aCB0aGF0XG4vLyBOb3RoaW5nIGtlZXBzIGluIHN0ZXAuIFRoZSBkZW1vLXZhdWx0IGNvdmVyYWdlIHN1aXRlIGFscmVhZHkgZmFpbHMgb24gaXQsIHdoaWNoIG1lYW5zIHJlYWNoaW5nIGhlcmVcbi8vIE1lYW5zIHRoYXQgZ2F0ZSB3YXMgc2tpcHBlZCBcdTIwMTQgc28gdGhpcyByZWZ1c2VzIHJhdGhlciB0aGFuIG92ZXJ3cml0aW5nIGEgdmFsdWUgc29tZWJvZHkgY2hvc2Ugb24gcHVycG9zZS5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRDb21taXR0ZWRBcHBKc29uKCk6IFByb21pc2U8RGVtb1ZhdWx0QXBwSnNvbj4ge1xuICBjb25zdCBhcHBKc29uUGF0aCA9IHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHtcbiAgICBwYXRoOiBqb2luKE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRlbW9WYXVsdCwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRG90T2JzaWRpYW4sIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFwcEpzb24pXG4gIH0pO1xuICBjb25zdCBjb250ZW50ID0gZXhpc3RzU3luYyhhcHBKc29uUGF0aCkgPyBhd2FpdCByZWFkRmlsZShhcHBKc29uUGF0aCwgJ3V0Zi04JykgOiBudWxsO1xuICBjb25zdCBhcHBKc29uID0gcGFyc2VEZW1vVmF1bHRBcHBKc29uKHsgY29udGVudCwgcGF0aDogYXBwSnNvblBhdGggfSk7XG5cbiAgY29uc3Qgb3duZWRTZXR0aW5ncyA9IGZpbmRPd25lZERlbW9WYXVsdEFwcEpzb25TZXR0aW5ncyh7IGFwcEpzb24gfSk7XG4gIGlmIChvd25lZFNldHRpbmdzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgJHthcHBKc29uUGF0aH0gc2V0cyAke293bmVkU2V0dGluZ3Muam9pbignLCAnKX0sIHdoaWNoIG9ic2lkaWFuLWRldi11dGlscyBvd25zIGFuZCB3cml0ZXMgaW50byB0aGUgYXJjaGl2ZWQgZGVtbyB2YXVsdC4gU2V0dGluZ3MgaXQgb3ducyBtdXN0IG5vdCBiZSBjb21taXR0ZWQuYFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gYXBwSnNvbjtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0JBLE9BQU8sWUFBWTtBQUNuQixTQUFTLGtCQUFrQjtBQUMzQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBS1AsU0FBUywrQkFBK0I7QUFDeEM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGlDQUFpQztBQUMxQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLE1BQU0sOEJBQThCO0FBQ3BDLE1BQU0sc0JBQXNCO0FBQzVCLE1BQU0sbUJBQW1CO0FBMkJ6QixlQUFzQix5QkFBaUQ7QUFDckUsUUFBTSxnQkFBZ0Isd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsVUFBVSxDQUFDO0FBQ3pGLE1BQUksQ0FBQyxXQUFXLGFBQWEsR0FBRztBQUM5QixXQUFP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
|
|
@@ -5,6 +5,7 @@ export * as 'check-project-types' from './check-project-types.mjs';
|
|
|
5
5
|
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
|
+
export * as 'demo-vault-app-json' from './demo-vault-app-json.mjs';
|
|
8
9
|
export * as 'demo-vault-coverage' from './demo-vault-coverage.mjs';
|
|
9
10
|
export * as 'demo-vault' from './demo-vault.mjs';
|
|
10
11
|
export * as 'env-toggle' from './env-toggle.mjs';
|
|
@@ -27,6 +27,7 @@ import * as check_project_types from "./check-project-types.mjs";
|
|
|
27
27
|
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
|
+
import * as demo_vault_app_json from "./demo-vault-app-json.mjs";
|
|
30
31
|
import * as demo_vault_coverage from "./demo-vault-coverage.mjs";
|
|
31
32
|
import * as demo_vault from "./demo-vault.mjs";
|
|
32
33
|
import * as env_toggle from "./env-toggle.mjs";
|
|
@@ -54,6 +55,7 @@ export {
|
|
|
54
55
|
code_generator as "code-generator",
|
|
55
56
|
commitlint_config as "commitlint-config",
|
|
56
57
|
demo_vault as "demo-vault",
|
|
58
|
+
demo_vault_app_json as "demo-vault-app-json",
|
|
57
59
|
demo_vault_coverage as "demo-vault-coverage",
|
|
58
60
|
env_toggle as "env-toggle",
|
|
59
61
|
exec,
|
|
@@ -73,4 +75,4 @@ export {
|
|
|
73
75
|
version,
|
|
74
76
|
warnings_as_errors as "warnings-as-errors"
|
|
75
77
|
};
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdidWlsZCcgZnJvbSAnLi9idWlsZC50cyc7XG5leHBvcnQgKiBhcyAnYnVuZGxlcnMnIGZyb20gJy4vYnVuZGxlcnMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ2NoZWNrLXByb2plY3QtdHlwZXMnIGZyb20gJy4vY2hlY2stcHJvamVjdC10eXBlcy50cyc7XG5leHBvcnQgKiBhcyAnY2xpLXV0aWxzJyBmcm9tICcuL2NsaS11dGlscy50cyc7XG5leHBvcnQgKiBhcyAnY29kZS1nZW5lcmF0b3InIGZyb20gJy4vY29kZS1nZW5lcmF0b3IudHMnO1xuZXhwb3J0ICogYXMgJ2NvbW1pdGxpbnQtY29uZmlnJyBmcm9tICcuL2NvbW1pdGxpbnQtY29uZmlnLnRzJztcbmV4cG9ydCAqIGFzICdkZW1vLXZhdWx0LWFwcC1qc29uJyBmcm9tICcuL2RlbW8tdmF1bHQtYXBwLWpzb24udHMnO1xuZXhwb3J0ICogYXMgJ2RlbW8tdmF1bHQtY292ZXJhZ2UnIGZyb20gJy4vZGVtby12YXVsdC1jb3ZlcmFnZS50cyc7XG5leHBvcnQgKiBhcyAnZGVtby12YXVsdCcgZnJvbSAnLi9kZW1vLXZhdWx0LnRzJztcbmV4cG9ydCAqIGFzICdlbnYtdG9nZ2xlJyBmcm9tICcuL2Vudi10b2dnbGUudHMnO1xuZXhwb3J0ICogYXMgJ2V4ZWMnIGZyb20gJy4vZXhlYy50cyc7XG5leHBvcnQgKiBhcyAnZm9ybWF0dGVycycgZnJvbSAnLi9mb3JtYXR0ZXJzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICdmcycgZnJvbSAnLi9mcy50cyc7XG5leHBvcnQgKiBhcyAnZ2l0JyBmcm9tICcuL2dpdC50cyc7XG5leHBvcnQgKiBhcyAnanNvbicgZnJvbSAnLi9qc29uLnRzJztcbmV4cG9ydCAqIGFzICdsaW50ZXJzJyBmcm9tICcuL2xpbnRlcnMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ25hbm8tc3RhZ2VkLWNvbmZpZycgZnJvbSAnLi9uYW5vLXN0YWdlZC1jb25maWcudHMnO1xuZXhwb3J0ICogYXMgJ25wbS1wdWJsaXNoJyBmcm9tICcuL25wbS1wdWJsaXNoLnRzJztcbmV4cG9ydCAqIGFzICducG0tcnVuJyBmcm9tICcuL25wbS1ydW4udHMnO1xuZXhwb3J0ICogYXMgJ25wbScgZnJvbSAnLi9ucG0udHMnO1xuZXhwb3J0ICogYXMgJ29ic2lkaWFuLWRldi11dGlscy1yZXBvLXBhdGhzJyBmcm9tICcuL29ic2lkaWFuLWRldi11dGlscy1yZXBvLXBhdGhzLnRzJztcbmV4cG9ydCAqIGFzICdyb290JyBmcm9tICcuL3Jvb3QudHMnO1xuZXhwb3J0ICogYXMgJ3Rlc3QtcnVubmVycycgZnJvbSAnLi90ZXN0LXJ1bm5lcnMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ3ZhbGlkYXRlLWRlY2xhcmF0aW9ucycgZnJvbSAnLi92YWxpZGF0ZS1kZWNsYXJhdGlvbnMudHMnO1xuZXhwb3J0ICogYXMgJ3ZlcnNpb24nIGZyb20gJy4vdmVyc2lvbi50cyc7XG5leHBvcnQgKiBhcyAnd2FybmluZ3MtYXMtZXJyb3JzJyBmcm9tICcuL3dhcm5pbmdzLWFzLWVycm9ycy50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLFlBQVksV0FBYTtBQUN6QixZQUFZLGNBQWdCO0FBQzVCLFlBQVlBLHlCQUEyQjtBQUN2QyxZQUFZQyxlQUFpQjtBQUM3QixZQUFZQyxvQkFBc0I7QUFDbEMsWUFBWUMsdUJBQXlCO0FBQ3JDLFlBQVlDLHlCQUEyQjtBQUN2QyxZQUFZQyx5QkFBMkI7QUFDdkMsWUFBWUMsZ0JBQWtCO0FBQzlCLFlBQVlDLGdCQUFrQjtBQUM5QixZQUFZLFVBQVk7QUFDeEIsWUFBWSxnQkFBa0I7QUFDOUIsWUFBWSxRQUFVO0FBQ3RCLFlBQVksU0FBVztBQUN2QixZQUFZLFVBQVk7QUFDeEIsWUFBWSxhQUFlO0FBQzNCLFlBQVlDLHdCQUEwQjtBQUN0QyxZQUFZQyxpQkFBbUI7QUFDL0IsWUFBWUMsYUFBZTtBQUMzQixZQUFZLFNBQVc7QUFDdkIsWUFBWUMsbUNBQXFDO0FBQ2pELFlBQVksVUFBWTtBQUN4QixZQUFZQyxrQkFBb0I7QUFDaEMsWUFBWUMsMkJBQTZCO0FBQ3pDLFlBQVksYUFBZTtBQUMzQixZQUFZQyx3QkFBMEI7IiwKICAibmFtZXMiOiBbImNoZWNrLXByb2plY3QtdHlwZXMiLCAiY2xpLXV0aWxzIiwgImNvZGUtZ2VuZXJhdG9yIiwgImNvbW1pdGxpbnQtY29uZmlnIiwgImRlbW8tdmF1bHQtYXBwLWpzb24iLCAiZGVtby12YXVsdC1jb3ZlcmFnZSIsICJkZW1vLXZhdWx0IiwgImVudi10b2dnbGUiLCAibmFuby1zdGFnZWQtY29uZmlnIiwgIm5wbS1wdWJsaXNoIiwgIm5wbS1ydW4iLCAib2JzaWRpYW4tZGV2LXV0aWxzLXJlcG8tcGF0aHMiLCAidGVzdC1ydW5uZXJzIiwgInZhbGlkYXRlLWRlY2xhcmF0aW9ucyIsICJ3YXJuaW5ncy1hcy1lcnJvcnMiXQp9Cg==
|
|
@@ -33,7 +33,12 @@ const obsidianDevUtilsConfig = {
|
|
|
33
33
|
"MD052": {
|
|
34
34
|
// eslint-disable-next-line camelcase -- That's how it is defined in the schema.
|
|
35
35
|
ignored_labels: [
|
|
36
|
+
// GitHub's five alert types, all of which Obsidian renders as callouts. markdownlint reads the
|
|
37
|
+
// Bracketed marker opening one as a shortcut reference link, so each has to be ignored explicitly.
|
|
38
|
+
"!caution",
|
|
39
|
+
"!important",
|
|
36
40
|
"!note",
|
|
41
|
+
"!tip",
|
|
37
42
|
"!warning",
|
|
38
43
|
// Preserve markdownlint's default ignored label so GFM task-list items (`- [x]`) are not flagged as undefined shortcut references.
|
|
39
44
|
"x"
|
|
@@ -65,4 +70,4 @@ const obsidianDevUtilsConfig = {
|
|
|
65
70
|
export {
|
|
66
71
|
obsidianDevUtilsConfig
|
|
67
72
|
};
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL21hcmtkb3dubGludC1jbGkyLWNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIERlZmF1bHQgbWFya2Rvd25saW50LWNsaTIgY29uZmlndXJhdGlvbiBmb3IgdGhlIE9ic2lkaWFuIERldiBVdGlscy5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gRGVjbGFyYXRpdmUgbWFya2Rvd25saW50LWNsaTIgcnVsZS9wbHVnaW4gY29uZmlndXJhdGlvbjsgY29ycmVjdG5lc3MgaXMgdmVyaWZpZWQgYnkgcnVubmluZyBtYXJrZG93bmxpbnQsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgcmVsYXRpdmVMaW5rc1J1bGUgZnJvbSAnbWFya2Rvd25saW50LXJ1bGUtcmVsYXRpdmUtbGlua3MnO1xuXG5pbXBvcnQgdHlwZSB7IE1hcmtkb3dubGludENsaTJDb25maWd1cmF0aW9uU2NoZW1hIGFzIE1hcmtkb3dubGludENsaTJDb25maWdTY2hlbWEgfSBmcm9tICcuL21hcmtkb3dubGludC10eXBlcy9AdHlwZXMvbWFya2Rvd25saW50LWNsaTItY29uZmlnLXNjaGVtYS5kLnRzJztcblxuaW1wb3J0IHsgTk9ERV9NT0RVTEVTX0lHTk9SRV9HTE9CIH0gZnJvbSAnLi9tYXJrZG93bmxpbnQtaWdub3Jlcy50cyc7XG5cbi8qKlxuICogRGVmYXVsdCBtYXJrZG93bmxpbnQtY2xpMiBjb25maWd1cmF0aW9uIGZvciB0aGUgT2JzaWRpYW4gRGV2IFV0aWxzLlxuICovXG5leHBvcnQgY29uc3Qgb2JzaWRpYW5EZXZVdGlsc0NvbmZpZzogTWFya2Rvd25saW50Q2xpMkNvbmZpZ1NjaGVtYSA9IHtcbiAgY29uZmlnOiB7XG4gICAgJ01EMDEzJzogZmFsc2UsXG4gICAgJ01EMDI0Jzoge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZSAtLSBUaGF0J3MgaG93IGl0IGlzIGRlZmluZWQgaW4gdGhlIHNjaGVtYS5cbiAgICAgIHNpYmxpbmdzX29ubHk6IHRydWVcbiAgICB9LFxuICAgICdNRDA1Mic6IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2UgLS0gVGhhdCdzIGhvdyBpdCBpcyBkZWZpbmVkIGluIHRoZSBzY2hlbWEuXG4gICAgICBpZ25vcmVkX2xhYmVsczogW1xuICAgICAgICAvLyBHaXRIdWIncyBmaXZlIGFsZXJ0IHR5cGVzLCBhbGwgb2Ygd2hpY2ggT2JzaWRpYW4gcmVuZGVycyBhcyBjYWxsb3V0cy4gbWFya2Rvd25saW50IHJlYWRzIHRoZVxuICAgICAgICAvLyBCcmFja2V0ZWQgbWFya2VyIG9wZW5pbmcgb25lIGFzIGEgc2hvcnRjdXQgcmVmZXJlbmNlIGxpbmssIHNvIGVhY2ggaGFzIHRvIGJlIGlnbm9yZWQgZXhwbGljaXRseS5cbiAgICAgICAgJyFjYXV0aW9uJyxcbiAgICAgICAgJyFpbXBvcnRhbnQnLFxuICAgICAgICAnIW5vdGUnLFxuICAgICAgICAnIXRpcCcsXG4gICAgICAgICchd2FybmluZycsXG4gICAgICAgIC8vIFByZXNlcnZlIG1hcmtkb3dubGludCdzIGRlZmF1bHQgaWdub3JlZCBsYWJlbCBzbyBHRk0gdGFzay1saXN0IGl0ZW1zIChgLSBbeF1gKSBhcmUgbm90IGZsYWdnZWQgYXMgdW5kZWZpbmVkIHNob3J0Y3V0IHJlZmVyZW5jZXMuXG4gICAgICAgICd4J1xuICAgICAgXSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2UgLS0gVGhhdCdzIGhvdyBpdCBpcyBkZWZpbmVkIGluIHRoZSBzY2hlbWEuXG4gICAgICBzaG9ydGN1dF9zeW50YXg6IHRydWVcbiAgICB9LFxuICAgICdyZWxhdGl2ZS1saW5rcyc6IHRydWVcbiAgfSxcbiAgY3VzdG9tUnVsZXM6IFtcbiAgICByZWxhdGl2ZUxpbmtzUnVsZVxuICBdLFxuICAvLyBFdmVyeSBgLmdpdGlnbm9yZWAgaW4gdGhlIHRyZWUsIGFuZCB1cCB0byB0aGUgcmVwb3NpdG9yeSByb290IFx1MjAxNCBnaXQncyBvd24gZGVmYXVsdCBiZWhhdmlvci4gQSBwYXRoIGdpdFxuICAvLyBJZ25vcmVzIGlzIGEgcGF0aCB3ZSBkbyBub3QgbGludCwgc28gYG5vZGVfbW9kdWxlc2AgKGluY2x1ZGluZyB0aGUgbmVzdGVkIG9uZXMgdW5kZXIgdGVzdCBmaXh0dXJlcyksXG4gIC8vIGBkaXN0YCwgYW5kIGV2ZXJ5IGdlbmVyYXRlZCBmb2xkZXIgYXJlIHNraXBwZWQgd2l0aG91dCBhbnlvbmUgbWFpbnRhaW5pbmcgYSBsaXN0IHRoYXQgY2FuIGRyaWZ0LlxuICBnaXRpZ25vcmU6IHRydWUsXG4gIGdsb2JzOiBbXG4gICAgJyoqLyoubWQnXG4gIF0sXG4gIC8vIFRoZSByZXNpZHVhbCwgZXhwbGljaXQgbGlzdCBcdTIwMTQgZXZlcnl0aGluZyBgLmdpdGlnbm9yZWAgY2Fubm90IGV4cHJlc3MgZm9yIHVzLiBHaXQgbmV2ZXIgXCJpZ25vcmVzXCJcbiAgLy8gYC5naXRgIGl0c2VsZiAoaXQgaXMgc2ltcGx5IG91dHNpZGUgdGhlIHdvcmtpbmcgdHJlZSksIGFuZCBhIHJlcG9zaXRvcnkgY2FuIGRlbGliZXJhdGVseSBUUkFDSyBhXG4gIC8vIFZlbmRvcmVkIGBub2RlX21vZHVsZXNgIHRyZWUsIHdob3NlIHRoaXJkLXBhcnR5IG1hcmtkb3duIGlzIG5vdCBvdXJzIHRvIGxpbnQuIFNlZVxuICAvLyBgbWFya2Rvd25saW50LWlnbm9yZXMudHNgLlxuICBpZ25vcmVzOiBbXG4gICAgJy5naXQvKionLFxuICAgIE5PREVfTU9EVUxFU19JR05PUkVfR0xPQlxuICBdXG59O1xuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRQSxPQUFPLHVCQUF1QjtBQUk5QixTQUFTLGdDQUFnQztBQUtsQyxNQUFNLHlCQUF1RDtBQUFBLEVBQ2xFLFFBQVE7QUFBQSxJQUNOLFNBQVM7QUFBQSxJQUNULFNBQVM7QUFBQTtBQUFBLE1BRVAsZUFBZTtBQUFBLElBQ2pCO0FBQUEsSUFDQSxTQUFTO0FBQUE7QUFBQSxNQUVQLGdCQUFnQjtBQUFBO0FBQUE7QUFBQSxRQUdkO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBO0FBQUEsUUFFQTtBQUFBLE1BQ0Y7QUFBQTtBQUFBLE1BRUEsaUJBQWlCO0FBQUEsSUFDbkI7QUFBQSxJQUNBLGtCQUFrQjtBQUFBLEVBQ3BCO0FBQUEsRUFDQSxhQUFhO0FBQUEsSUFDWDtBQUFBLEVBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUlBLFdBQVc7QUFBQSxFQUNYLE9BQU87QUFBQSxJQUNMO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQSxTQUFTO0FBQUEsSUFDUDtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
|