@mnaoumov/typescript-dev-toolkit 3.0.0 → 3.1.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/assets/biome.json +49 -0
- package/assets/prettier.json +13 -0
- package/dist/lib/cjs/docs-site/docs-links.cjs +6 -3
- package/dist/lib/cjs/docs-site/docs-site-commands.cjs +24 -5
- package/dist/lib/cjs/docs-site/docs-site-commands.d.cts +8 -3
- package/dist/lib/cjs/docs-site/docs-site-config.cjs +4 -1
- package/dist/lib/cjs/docs-site/docs-site-config.d.cts +17 -0
- package/dist/lib/cjs/docs-site/index.cjs +4 -1
- package/dist/lib/cjs/docs-site/index.d.cts +1 -0
- package/dist/lib/cjs/docs-site/link-check.cjs +88 -11
- package/dist/lib/cjs/docs-site/link-check.d.cts +91 -2
- package/dist/lib/cjs/docs-site/repo-homepage.cjs +108 -0
- package/dist/lib/cjs/docs-site/repo-homepage.d.cts +50 -0
- package/dist/lib/cjs/formatters/auto.cjs +59 -0
- package/dist/lib/cjs/formatters/auto.d.cts +51 -0
- package/dist/lib/cjs/formatters/biome.cjs +121 -0
- package/dist/lib/cjs/formatters/biome.d.cts +69 -0
- package/dist/lib/cjs/formatters/index.cjs +12 -3
- package/dist/lib/cjs/formatters/index.d.cts +3 -0
- package/dist/lib/cjs/formatters/prettier.cjs +93 -0
- package/dist/lib/cjs/formatters/prettier.d.cts +56 -0
- package/dist/lib/cjs/index.cjs +4 -1
- package/dist/lib/cjs/index.d.cts +1 -0
- package/dist/lib/cjs/linters/auto.cjs +52 -0
- package/dist/lib/cjs/linters/auto.d.cts +49 -0
- package/dist/lib/cjs/linters/biome.cjs +50 -0
- package/dist/lib/cjs/linters/biome.d.cts +36 -0
- package/dist/lib/cjs/linters/eslint-config.cjs +1 -1
- package/dist/lib/cjs/linters/eslint.cjs +15 -14
- package/dist/lib/cjs/linters/eslint.d.cts +6 -0
- package/dist/lib/cjs/linters/index.cjs +7 -1
- package/dist/lib/cjs/linters/index.d.cts +2 -0
- package/dist/lib/cjs/repo-paths.cjs +3 -1
- package/dist/lib/cjs/repo-paths.d.cts +8 -0
- package/dist/lib/cjs/shared-config-files.cjs +68 -0
- package/dist/lib/cjs/shared-config-files.d.cts +29 -0
- package/dist/lib/cjs/test-runners/auto.cjs +83 -0
- package/dist/lib/cjs/test-runners/auto.d.cts +82 -0
- package/dist/lib/cjs/test-runners/index.cjs +10 -1
- package/dist/lib/cjs/test-runners/index.d.cts +3 -0
- package/dist/lib/cjs/test-runners/jest-config.cjs +86 -0
- package/dist/lib/cjs/test-runners/jest-config.d.cts +71 -0
- package/dist/lib/cjs/test-runners/jest.cjs +111 -0
- package/dist/lib/cjs/test-runners/jest.d.cts +77 -0
- package/dist/lib/esm/docs-site/docs-links.mjs +7 -3
- package/dist/lib/esm/docs-site/docs-site-commands.d.mts +8 -3
- package/dist/lib/esm/docs-site/docs-site-commands.mjs +14 -5
- package/dist/lib/esm/docs-site/docs-site-config.d.mts +17 -0
- package/dist/lib/esm/docs-site/docs-site-config.mjs +4 -1
- package/dist/lib/esm/docs-site/index.d.mts +1 -0
- package/dist/lib/esm/docs-site/index.mjs +3 -1
- package/dist/lib/esm/docs-site/link-check.d.mts +91 -2
- package/dist/lib/esm/docs-site/link-check.mjs +83 -11
- package/dist/lib/esm/docs-site/repo-homepage.d.mts +50 -0
- package/dist/lib/esm/docs-site/repo-homepage.mjs +84 -0
- package/dist/lib/esm/formatters/auto.d.mts +51 -0
- package/dist/lib/esm/formatters/auto.mjs +40 -0
- package/dist/lib/esm/formatters/biome.d.mts +69 -0
- package/dist/lib/esm/formatters/biome.mjs +107 -0
- package/dist/lib/esm/formatters/index.d.mts +3 -0
- package/dist/lib/esm/formatters/index.mjs +8 -2
- package/dist/lib/esm/formatters/prettier.d.mts +56 -0
- package/dist/lib/esm/formatters/prettier.mjs +75 -0
- package/dist/lib/esm/index.d.mts +1 -0
- package/dist/lib/esm/index.mjs +3 -1
- package/dist/lib/esm/linters/auto.d.mts +49 -0
- package/dist/lib/esm/linters/auto.mjs +30 -0
- package/dist/lib/esm/linters/biome.d.mts +36 -0
- package/dist/lib/esm/linters/biome.mjs +29 -0
- package/dist/lib/esm/linters/eslint-config.mjs +1 -1
- package/dist/lib/esm/linters/eslint.d.mts +6 -0
- package/dist/lib/esm/linters/eslint.mjs +14 -14
- package/dist/lib/esm/linters/index.d.mts +2 -0
- package/dist/lib/esm/linters/index.mjs +5 -1
- package/dist/lib/esm/repo-paths.d.mts +8 -0
- package/dist/lib/esm/repo-paths.mjs +3 -1
- package/dist/lib/esm/shared-config-files.d.mts +29 -0
- package/dist/lib/esm/shared-config-files.mjs +36 -0
- package/dist/lib/esm/test-runners/auto.d.mts +82 -0
- package/dist/lib/esm/test-runners/auto.mjs +64 -0
- package/dist/lib/esm/test-runners/index.d.mts +3 -0
- package/dist/lib/esm/test-runners/index.mjs +7 -1
- package/dist/lib/esm/test-runners/jest-config.d.mts +71 -0
- package/dist/lib/esm/test-runners/jest-config.mjs +58 -0
- package/dist/lib/esm/test-runners/jest.d.mts +77 -0
- package/dist/lib/esm/test-runners/jest.mjs +75 -0
- package/docs-site/repo-homepage/package.json +6 -0
- package/formatters/auto/package.json +6 -0
- package/formatters/biome/package.json +6 -0
- package/formatters/prettier/package.json +6 -0
- package/linters/auto/package.json +6 -0
- package/linters/biome/package.json +6 -0
- package/package.json +21 -1
- package/test-runners/auto/package.json +6 -0
- package/test-runners/jest/package.json +6 -0
- package/test-runners/jest-config/package.json +6 -0
|
@@ -47,6 +47,7 @@ function resolveDocsSiteConfig(config) {
|
|
|
47
47
|
owner = "mnaoumov",
|
|
48
48
|
packageSites = DEFAULT_PACKAGE_SITES,
|
|
49
49
|
repo,
|
|
50
|
+
repoHomepage = "off",
|
|
50
51
|
rootDirectory = process.cwd(),
|
|
51
52
|
siteOrigin = "https://mnaoumov.dev",
|
|
52
53
|
sourceDirectory = "src",
|
|
@@ -81,10 +82,12 @@ function resolveDocsSiteConfig(config) {
|
|
|
81
82
|
githubUrl,
|
|
82
83
|
guidesDirectory,
|
|
83
84
|
ogOutputDirectory: join(publicDirectory, "og"),
|
|
85
|
+
owner,
|
|
84
86
|
packageName: packageJson.name,
|
|
85
87
|
packageVersion: packageJson.version,
|
|
86
88
|
publicDirectory,
|
|
87
89
|
repo,
|
|
90
|
+
repoHomepage,
|
|
88
91
|
rootDirectory,
|
|
89
92
|
siteBaseUrl: `${siteOrigin}/${repo}/`,
|
|
90
93
|
siteOrigin,
|
|
@@ -95,4 +98,4 @@ function resolveDocsSiteConfig(config) {
|
|
|
95
98
|
export {
|
|
96
99
|
resolveDocsSiteConfig
|
|
97
100
|
};
|
|
98
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvZG9jcy1zaXRlLWNvbmZpZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIG9uZSBkZXNjcmlwdGlvbiBvZiBhIGRvY3VtZW50YXRpb24gc2l0ZSB0aGF0IGl0cyBBc3RybyBjb25maWcgYW5kIGl0cyBidWlsZCBjb21tYW5kcyBzaGFyZTogd2hpY2ggcmVwb3NpdG9yeVxuICogaXQgZG9jdW1lbnRzLCB3aGVyZSBpdHMgc291cmNlcyBhbmQgcGFnZXMgbGl2ZSwgYW5kIHdoaWNoIG90aGVyIHNpdGVzIGl0IGxpbmtzIHRvLlxuICovXG5cbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHsgQXBpRG9jU2V0dGluZ3MgfSBmcm9tICcuL2FwaS1kb2Mtc2V0dGluZ3MudHMnO1xuXG5pbXBvcnQgeyBERUZBVUxUX1BBQ0tBR0VfU0lURVMgfSBmcm9tICcuL2FwaS1kb2MtcGFja2FnZS1zaXRlcy50cyc7XG5cbi8qKlxuICogRGVzY3JpYmVzIGEgZG9jdW1lbnRhdGlvbiBzaXRlLiBFdmVyeSBwYXRoIGlzIHJlbGF0aXZlIHRvIHtAbGluayBEb2NzU2l0ZUNvbmZpZy5yb290RGlyZWN0b3J5fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEb2NzU2l0ZUNvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgZm9sZGVyIGhvbGRpbmcgdGhlIHNpdGU6IGl0cyBgc3JjYCAocGFnZXMsIGBjb250ZW50LmNvbmZpZy50c2ApLCBgcHVibGljYCBhbmQgYnVpbGQgb3V0cHV0IGBkaXN0YC5cbiAgICpcbiAgICogQGRlZmF1bHQgJ2RvY3MnXG4gICAqL1xuICByZWFkb25seSBkb2NzRGlyZWN0b3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUeXBlIG5hbWVzIG1hcHBlZCB0byB0aGUgVVJMIHRoZWlyIHJlZmVyZW5jZXMgbGluayB0bywgZm9yIHR5cGVzIG5vIGRvY3VtZW50ZWQgcGFja2FnZSBkZWNsYXJlcy4gVGhlIGxheWVyXG4gICAqIGRvY3VtZW50aW5nIGFuIGVjb3N5c3RlbSdzIHBhY2thZ2VzIGZpbGxzIGl0IHdpdGggdGhhdCBlY29zeXN0ZW0ncyByZWZlcmVuY2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgZXh0ZXJuYWxUeXBlTGlua3M/OiBSZWFkb25seU1hcDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIgdW5kZXIgYDxkb2NzPi9zcmMvY29udGVudC9kb2NzYCB0aGUgZ3VpZGVzIHNpZGViYXIgZ3JvdXAgaXMgZ2VuZXJhdGVkIGZyb20uXG4gICAqXG4gICAqIEBkZWZhdWx0ICdndWlkZXMnXG4gICAqL1xuICByZWFkb25seSBndWlkZXNEaXJlY3Rvcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBHaXRIdWIgYWNjb3VudCB0aGUgcmVwb3NpdG9yeSBiZWxvbmdzIHRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnbW5hb3Vtb3YnXG4gICAqL1xuICByZWFkb25seSBvd25lcj86IHN0cmluZztcblxuICAvKipcbiAgICogUGFja2FnZSBuYW1lcyBtYXBwZWQgdG8gdGhlIHJvb3QgVVJMIG9mIHRoZWlyIGRvY3VtZW50YXRpb24gc2l0ZSwgd2l0aCBhIHRyYWlsaW5nIHNsYXNoLiBBIHR5cGUgZGVjbGFyZWQgaW4gb25lXG4gICAqIG9mIHRoZW0gbGlua3MgdG8gaXRzIHBhZ2UgdGhlcmUuIFRoZSBkb2N1bWVudGVkIHBhY2thZ2UgaXRzZWxmIGlzIG5ldmVyIGxpbmtlZCB0aGlzIHdheS5cbiAgICpcbiAgICogQGRlZmF1bHQgREVGQVVMVF9QQUNLQUdFX1NJVEVTXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlU2l0ZXM/OiBSZWFkb25seU1hcDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFRoZSByZXBvc2l0b3J5J3MgbmFtZS4gVGhlIHNpdGUgaXMgc2VydmVkIHVuZGVyIGl0OiBgPHNpdGVPcmlnaW4+LzxyZXBvPi9gLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwbzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVwb3NpdG9yeSByb290LCBob2xkaW5nIGBwYWNrYWdlLmpzb25gLCBgdHNjb25maWcuanNvbmAgYW5kIGBub2RlX21vZHVsZXNgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBwcm9jZXNzLmN3ZCgpXG4gICAqL1xuICByZWFkb25seSByb290RGlyZWN0b3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luIGV2ZXJ5IHNpdGUgb2YgdGhlIGFjY291bnQgaXMgc2VydmVkIGZyb20uXG4gICAqXG4gICAqIEBkZWZhdWx0ICdodHRwczovL21uYW91bW92LmRldidcbiAgICovXG4gIHJlYWRvbmx5IHNpdGVPcmlnaW4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIgd2hvc2UgbW9kdWxlcyB0aGUgQVBJIHJlZmVyZW5jZSBkb2N1bWVudHMuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdzcmMnXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VEaXJlY3Rvcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzaXRlJ3MgdGl0bGUsIHNob3duIGluIGl0cyBoZWFkZXIuXG4gICAqL1xuICByZWFkb25seSB0aXRsZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIHtAbGluayBEb2NzU2l0ZUNvbmZpZ30gd2l0aCBldmVyeSBkZWZhdWx0IGFwcGxpZWQsIGV2ZXJ5IHBhdGggYWJzb2x1dGUsIGFuZCB0aGUgdmFsdWVzIGRlcml2ZWQgZnJvbSB0aGVtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkRG9jc1NpdGVDb25maWcge1xuICAvKipcbiAgICogVGhlIEFQSSBkb2N1bWVudGF0aW9uIGdlbmVyYXRvcidzIHNldHRpbmdzIGZvciB0aGUgc2l0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwaURvY1NldHRpbmdzOiBBcGlEb2NTZXR0aW5ncztcblxuICAvKipcbiAgICogVGhlIGJhc2UgcGF0aCwgZS5nLiBgL3R5cGVzY3JpcHQtbGliYC5cbiAgICovXG4gIHJlYWRvbmx5IGJhc2VQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkb2N1bWVudGF0aW9uIGNvbnRlbnQgcm9vdCwgYDxkb2NzPi9zcmMvY29udGVudC9kb2NzYC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnREb2NzRGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBidWlsZCBvdXRwdXQgZm9sZGVyLCBgPGRvY3M+L2Rpc3RgLlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzdERpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l0ZSBmb2xkZXIuXG4gICAqL1xuICByZWFkb25seSBkb2NzRGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzaXRlJ3Mgc291cmNlIGZvbGRlciwgYDxkb2NzPi9zcmNgLlxuICAgKi9cbiAgcmVhZG9ubHkgZG9jc1NvdXJjZURpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgVVJMIGEgcGFnZSdzIGVkaXQgbGluayBzdGFydHMgd2l0aDogdGhlIHJlcG9zaXRvcnkncyBgZWRpdC9tYWluL2AgdHJlZS5cbiAgICovXG4gIHJlYWRvbmx5IGVkaXRMaW5rQmFzZVVybDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l0ZSdzIFNWRyBsb2dvLCBgPGRvY3M+L3B1YmxpYy9mYXZpY29uLnN2Z2AuXG4gICAqL1xuICByZWFkb25seSBmYXZpY29uUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVwb3NpdG9yeSdzIEdpdEh1YiBVUkwuXG4gICAqL1xuICByZWFkb25seSBnaXRodWJVcmw6IHN0cmluZztcblxuICAvKipcbiAgICogU2VlIHtAbGluayBEb2NzU2l0ZUNvbmZpZy5ndWlkZXNEaXJlY3Rvcnl9LlxuICAgKi9cbiAgcmVhZG9ubHkgZ3VpZGVzRGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIgdGhlIE9wZW4gR3JhcGggY2FyZHMgYXJlIHdyaXR0ZW4gdG8sIGA8ZG9jcz4vcHVibGljL29nYC5cbiAgICovXG4gIHJlYWRvbmx5IG9nT3V0cHV0RGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkb2N1bWVudGVkIHBhY2thZ2UncyBuYW1lLCByZWFkIGZyb20gdGhlIHJvb3QgYHBhY2thZ2UuanNvbmAuXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZG9jdW1lbnRlZCBwYWNrYWdlJ3MgdmVyc2lvbiwgcmVhZCBmcm9tIHRoZSByb290IGBwYWNrYWdlLmpzb25gLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZVZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNpdGUncyBzdGF0aWMgZm9sZGVyLCBgPGRvY3M+L3B1YmxpY2AuXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNEaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogU2VlIHtAbGluayBEb2NzU2l0ZUNvbmZpZy5yZXBvfS5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG86IHN0cmluZztcblxuICAvKipcbiAgICogU2VlIHtAbGluayBEb2NzU2l0ZUNvbmZpZy5yb290RGlyZWN0b3J5fS5cbiAgICovXG4gIHJlYWRvbmx5IHJvb3REaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFic29sdXRlIFVSTCB0aGUgc2l0ZSBpcyBzZXJ2ZWQgZnJvbSwgd2l0aCBhIHRyYWlsaW5nIHNsYXNoLlxuICAgKi9cbiAgcmVhZG9ubHkgc2l0ZUJhc2VVcmw6IHN0cmluZztcblxuICAvKipcbiAgICogU2VlIHtAbGluayBEb2NzU2l0ZUNvbmZpZy5zaXRlT3JpZ2lufS5cbiAgICovXG4gIHJlYWRvbmx5IHNpdGVPcmlnaW46IHN0cmluZztcblxuICAvKipcbiAgICogU2VlIHtAbGluayBEb2NzU2l0ZUNvbmZpZy5zb3VyY2VEaXJlY3Rvcnl9LlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlRGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNlZSB7QGxpbmsgRG9jc1NpdGVDb25maWcudGl0bGV9LlxuICAgKi9cbiAgcmVhZG9ubHkgdGl0bGU6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFBhY2thZ2VKc29uRmllbGRzIHtcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBkZWZhdWx0cyB0byBhIHNpdGUncyBvcHRpb25zIGFuZCBkZXJpdmVzIGV2ZXJ5IHBhdGggYW5kIFVSTCBmcm9tIHRoZW0uXG4gKlxuICogQHBhcmFtIGNvbmZpZyAtIFRoZSBzaXRlJ3MgY29uZmlndXJhdGlvbi5cbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBjb25maWd1cmF0aW9uLlxuICogQHRocm93cyBJZiB0aGUgcm9vdCBgcGFja2FnZS5qc29uYCBoYXMgbm8gYG5hbWVgIG9yIGB2ZXJzaW9uYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVEb2NzU2l0ZUNvbmZpZyhjb25maWc6IERvY3NTaXRlQ29uZmlnKTogUmVzb2x2ZWREb2NzU2l0ZUNvbmZpZyB7XG4gIGNvbnN0IHtcbiAgICBkb2NzRGlyZWN0b3J5ID0gJ2RvY3MnLFxuICAgIGV4dGVybmFsVHlwZUxpbmtzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKSxcbiAgICBndWlkZXNEaXJlY3RvcnkgPSAnZ3VpZGVzJyxcbiAgICBvd25lciA9ICdtbmFvdW1vdicsXG4gICAgcGFja2FnZVNpdGVzID0gREVGQVVMVF9QQUNLQUdFX1NJVEVTLFxuICAgIHJlcG8sXG4gICAgcm9vdERpcmVjdG9yeSA9IHByb2Nlc3MuY3dkKCksXG4gICAgc2l0ZU9yaWdpbiA9ICdodHRwczovL21uYW91bW92LmRldicsXG4gICAgc291cmNlRGlyZWN0b3J5ID0gJ3NyYycsXG4gICAgdGl0bGVcbiAgfSA9IGNvbmZpZztcblxuICBjb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKGpvaW4ocm9vdERpcmVjdG9yeSwgJ3BhY2thZ2UuanNvbicpLCAndXRmLTgnKSkgYXMgUGFja2FnZUpzb25GaWVsZHM7XG4gIGlmIChwYWNrYWdlSnNvbi5uYW1lID09PSB1bmRlZmluZWQgfHwgcGFja2FnZUpzb24udmVyc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2pvaW4ocm9vdERpcmVjdG9yeSwgJ3BhY2thZ2UuanNvbicpfSBoYXMgbm8gbmFtZSBvciBubyB2ZXJzaW9uLmApO1xuICB9XG5cbiAgY29uc3QgYWJzb2x1dGVEb2NzRGlyZWN0b3J5ID0gam9pbihyb290RGlyZWN0b3J5LCBkb2NzRGlyZWN0b3J5KTtcbiAgY29uc3QgZG9jc1NvdXJjZURpcmVjdG9yeSA9IGpvaW4oYWJzb2x1dGVEb2NzRGlyZWN0b3J5LCAnc3JjJyk7XG4gIGNvbnN0IGNvbnRlbnREb2NzRGlyZWN0b3J5ID0gam9pbihkb2NzU291cmNlRGlyZWN0b3J5LCAnY29udGVudCcsICdkb2NzJyk7XG4gIGNvbnN0IHB1YmxpY0RpcmVjdG9yeSA9IGpvaW4oYWJzb2x1dGVEb2NzRGlyZWN0b3J5LCAncHVibGljJyk7XG4gIGNvbnN0IGdpdGh1YlVybCA9IGBodHRwczovL2dpdGh1Yi5jb20vJHtvd25lcn0vJHtyZXBvfWA7XG5cbiAgY29uc3QgYmFzZVBhdGggPSBgLyR7cmVwb31gO1xuICByZXR1cm4ge1xuICAgIGFwaURvY1NldHRpbmdzOiB7XG4gICAgICBiYXNlUGF0aCxcbiAgICAgIGV4dGVybmFsVHlwZUxpbmtzLFxuICAgICAgb3V0cHV0RGlyZWN0b3J5OiBqb2luKGNvbnRlbnREb2NzRGlyZWN0b3J5LCAnYXBpJyksXG4gICAgICBwYWNrYWdlTmFtZTogcGFja2FnZUpzb24ubmFtZSxcbiAgICAgIHBhY2thZ2VTaXRlcyxcbiAgICAgIHNpZGViYXJGaWxlOiBqb2luKGRvY3NTb3VyY2VEaXJlY3RvcnksICdnZW5lcmF0ZWQtc2lkZWJhci5qc29uJylcbiAgICB9LFxuICAgIGJhc2VQYXRoLFxuICAgIGNvbnRlbnREb2NzRGlyZWN0b3J5LFxuICAgIGRpc3REaXJlY3Rvcnk6IGpvaW4oYWJzb2x1dGVEb2NzRGlyZWN0b3J5LCAnZGlzdCcpLFxuICAgIGRvY3NEaXJlY3Rvcnk6IGFic29sdXRlRG9jc0RpcmVjdG9yeSxcbiAgICBkb2NzU291cmNlRGlyZWN0b3J5LFxuICAgIGVkaXRMaW5rQmFzZVVybDogYCR7Z2l0aHViVXJsfS9lZGl0L21haW4vYCxcbiAgICBmYXZpY29uUGF0aDogam9pbihwdWJsaWNEaXJlY3RvcnksICdmYXZpY29uLnN2ZycpLFxuICAgIGdpdGh1YlVybCxcbiAgICBndWlkZXNEaXJlY3RvcnksXG4gICAgb2dPdXRwdXREaXJlY3Rvcnk6IGpvaW4ocHVibGljRGlyZWN0b3J5LCAnb2cnKSxcbiAgICBwYWNrYWdlTmFtZTogcGFja2FnZUpzb24ubmFtZSxcbiAgICBwYWNrYWdlVmVyc2lvbjogcGFja2FnZUpzb24udmVyc2lvbixcbiAgICBwdWJsaWNEaXJlY3RvcnksXG4gICAgcmVwbyxcbiAgICByb290RGlyZWN0b3J5LFxuICAgIHNpdGVCYXNlVXJsOiBgJHtzaXRlT3JpZ2lufS8ke3JlcG99L2AsXG4gICAgc2l0ZU9yaWdpbixcbiAgICBzb3VyY2VEaXJlY3Rvcnk6IGpvaW4ocm9vdERpcmVjdG9yeSwgc291cmNlRGlyZWN0b3J5KSxcbiAgICB0aXRsZVxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU9BLFNBQVMsb0JBQW9CO0FBQzdCLFNBQVMsWUFBWTtBQUlyQixTQUFTLDZCQUE2QjtBQThML0IsU0FBUyxzQkFBc0IsUUFBZ0Q7QUFDcEYsUUFBTTtBQUFBLElBQ0osZ0JBQWdCO0FBQUEsSUFDaEIsb0JBQW9CLG9CQUFJLElBQW9CO0FBQUEsSUFDNUMsa0JBQWtCO0FBQUEsSUFDbEIsUUFBUTtBQUFBLElBQ1IsZUFBZTtBQUFBLElBQ2Y7QUFBQSxJQUNBLGdCQUFnQixRQUFRLElBQUk7QUFBQSxJQUM1QixhQUFhO0FBQUEsSUFDYixrQkFBa0I7QUFBQSxJQUNsQjtBQUFBLEVBQ0YsSUFBSTtBQUVKLFFBQU0sY0FBYyxLQUFLLE1BQU0sYUFBYSxLQUFLLGVBQWUsY0FBYyxHQUFHLE9BQU8sQ0FBQztBQUN6RixNQUFJLFlBQVksU0FBUyxVQUFhLFlBQVksWUFBWSxRQUFXO0FBQ3ZFLFVBQU0sSUFBSSxNQUFNLEdBQUcsS0FBSyxlQUFlLGNBQWMsQ0FBQyw2QkFBNkI7QUFBQSxFQUNyRjtBQUVBLFFBQU0sd0JBQXdCLEtBQUssZUFBZSxhQUFhO0FBQy9ELFFBQU0sc0JBQXNCLEtBQUssdUJBQXVCLEtBQUs7QUFDN0QsUUFBTSx1QkFBdUIsS0FBSyxxQkFBcUIsV0FBVyxNQUFNO0FBQ3hFLFFBQU0sa0JBQWtCLEtBQUssdUJBQXVCLFFBQVE7QUFDNUQsUUFBTSxZQUFZLHNCQUFzQixLQUFLLElBQUksSUFBSTtBQUVyRCxRQUFNLFdBQVcsSUFBSSxJQUFJO0FBQ3pCLFNBQU87QUFBQSxJQUNMLGdCQUFnQjtBQUFBLE1BQ2Q7QUFBQSxNQUNBO0FBQUEsTUFDQSxpQkFBaUIsS0FBSyxzQkFBc0IsS0FBSztBQUFBLE1BQ2pELGFBQWEsWUFBWTtBQUFBLE1BQ3pCO0FBQUEsTUFDQSxhQUFhLEtBQUsscUJBQXFCLHdCQUF3QjtBQUFBLElBQ2pFO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLGVBQWUsS0FBSyx1QkFBdUIsTUFBTTtBQUFBLElBQ2pELGVBQWU7QUFBQSxJQUNmO0FBQUEsSUFDQSxpQkFBaUIsR0FBRyxTQUFTO0FBQUEsSUFDN0IsYUFBYSxLQUFLLGlCQUFpQixhQUFhO0FBQUEsSUFDaEQ7QUFBQSxJQUNBO0FBQUEsSUFDQSxtQkFBbUIsS0FBSyxpQkFBaUIsSUFBSTtBQUFBLElBQzdDLGFBQWEsWUFBWTtBQUFBLElBQ3pCLGdCQUFnQixZQUFZO0FBQUEsSUFDNUI7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsYUFBYSxHQUFHLFVBQVUsSUFBSSxJQUFJO0FBQUEsSUFDbEM7QUFBQSxJQUNBLGlCQUFpQixLQUFLLGVBQWUsZUFBZTtBQUFBLElBQ3BEO0FBQUEsRUFDRjtBQUNGOyIsIm5hbWVzIjpbXX0=
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvZG9jcy1zaXRlLWNvbmZpZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIG9uZSBkZXNjcmlwdGlvbiBvZiBhIGRvY3VtZW50YXRpb24gc2l0ZSB0aGF0IGl0cyBBc3RybyBjb25maWcgYW5kIGl0cyBidWlsZCBjb21tYW5kcyBzaGFyZTogd2hpY2ggcmVwb3NpdG9yeVxuICogaXQgZG9jdW1lbnRzLCB3aGVyZSBpdHMgc291cmNlcyBhbmQgcGFnZXMgbGl2ZSwgYW5kIHdoaWNoIG90aGVyIHNpdGVzIGl0IGxpbmtzIHRvLlxuICovXG5cbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHsgQXBpRG9jU2V0dGluZ3MgfSBmcm9tICcuL2FwaS1kb2Mtc2V0dGluZ3MudHMnO1xuaW1wb3J0IHR5cGUgeyBSZXBvSG9tZXBhZ2VNb2RlIH0gZnJvbSAnLi9yZXBvLWhvbWVwYWdlLnRzJztcblxuaW1wb3J0IHsgREVGQVVMVF9QQUNLQUdFX1NJVEVTIH0gZnJvbSAnLi9hcGktZG9jLXBhY2thZ2Utc2l0ZXMudHMnO1xuXG4vKipcbiAqIERlc2NyaWJlcyBhIGRvY3VtZW50YXRpb24gc2l0ZS4gRXZlcnkgcGF0aCBpcyByZWxhdGl2ZSB0byB7QGxpbmsgRG9jc1NpdGVDb25maWcucm9vdERpcmVjdG9yeX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG9jc1NpdGVDb25maWcge1xuICAvKipcbiAgICogVGhlIGZvbGRlciBob2xkaW5nIHRoZSBzaXRlOiBpdHMgYHNyY2AgKHBhZ2VzLCBgY29udGVudC5jb25maWcudHNgKSwgYHB1YmxpY2AgYW5kIGJ1aWxkIG91dHB1dCBgZGlzdGAuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdkb2NzJ1xuICAgKi9cbiAgcmVhZG9ubHkgZG9jc0RpcmVjdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogVHlwZSBuYW1lcyBtYXBwZWQgdG8gdGhlIFVSTCB0aGVpciByZWZlcmVuY2VzIGxpbmsgdG8sIGZvciB0eXBlcyBubyBkb2N1bWVudGVkIHBhY2thZ2UgZGVjbGFyZXMuIFRoZSBsYXllclxuICAgKiBkb2N1bWVudGluZyBhbiBlY29zeXN0ZW0ncyBwYWNrYWdlcyBmaWxscyBpdCB3aXRoIHRoYXQgZWNvc3lzdGVtJ3MgcmVmZXJlbmNlcy5cbiAgICovXG4gIHJlYWRvbmx5IGV4dGVybmFsVHlwZUxpbmtzPzogUmVhZG9ubHlNYXA8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBUaGUgZm9sZGVyIHVuZGVyIGA8ZG9jcz4vc3JjL2NvbnRlbnQvZG9jc2AgdGhlIGd1aWRlcyBzaWRlYmFyIGdyb3VwIGlzIGdlbmVyYXRlZCBmcm9tLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnZ3VpZGVzJ1xuICAgKi9cbiAgcmVhZG9ubHkgZ3VpZGVzRGlyZWN0b3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgR2l0SHViIGFjY291bnQgdGhlIHJlcG9zaXRvcnkgYmVsb25ncyB0by5cbiAgICpcbiAgICogQGRlZmF1bHQgJ21uYW91bW92J1xuICAgKi9cbiAgcmVhZG9ubHkgb3duZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhY2thZ2UgbmFtZXMgbWFwcGVkIHRvIHRoZSByb290IFVSTCBvZiB0aGVpciBkb2N1bWVudGF0aW9uIHNpdGUsIHdpdGggYSB0cmFpbGluZyBzbGFzaC4gQSB0eXBlIGRlY2xhcmVkIGluIG9uZVxuICAgKiBvZiB0aGVtIGxpbmtzIHRvIGl0cyBwYWdlIHRoZXJlLiBUaGUgZG9jdW1lbnRlZCBwYWNrYWdlIGl0c2VsZiBpcyBuZXZlciBsaW5rZWQgdGhpcyB3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IERFRkFVTFRfUEFDS0FHRV9TSVRFU1xuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZVNpdGVzPzogUmVhZG9ubHlNYXA8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBUaGUgcmVwb3NpdG9yeSdzIG5hbWUuIFRoZSBzaXRlIGlzIHNlcnZlZCB1bmRlciBpdDogYDxzaXRlT3JpZ2luPi88cmVwbz4vYC5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG86IHN0cmluZztcblxuICAvKipcbiAgICogV2hhdCBgYnVpbGREb2NzU2l0ZWAgZG9lcywgYWZ0ZXIgdGhlIGJ1aWxkLCBhYm91dCB0aGUgcmVwb3NpdG9yeSdzIEdpdEh1YiBob21lcGFnZTogY29tcGFyZSBpdCB3aXRoIHRoZSBzaXRlJ3NcbiAgICogVVJMIGFuZCByZXBvcnQgYSBtaXNtYXRjaCAoYGNoZWNrYCksIG9yIGFsc28gc2V0IGl0IChgc2V0YCkuIEl0IHJlYWRzIGFuZCB3cml0ZXMgdGhyb3VnaCB0aGUgYGdoYCBDTEksIGFuZFxuICAgKiBvbmx5IGV2ZXIgd2FybnMuIEEgd29ya2Zsb3cncyBgR0lUSFVCX1RPS0VOYCBjYW4gcmVhZCB0aGUgaG9tZXBhZ2UgYnV0IG5vdCBzZXQgaXQsIHNvIGluIENJIGBzZXRgIHJlcG9ydHMgdG9vLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnb2ZmJ1xuICAgKi9cbiAgcmVhZG9ubHkgcmVwb0hvbWVwYWdlPzogUmVwb0hvbWVwYWdlTW9kZTtcblxuICAvKipcbiAgICogVGhlIHJlcG9zaXRvcnkgcm9vdCwgaG9sZGluZyBgcGFja2FnZS5qc29uYCwgYHRzY29uZmlnLmpzb25gIGFuZCBgbm9kZV9tb2R1bGVzYC5cbiAgICpcbiAgICogQGRlZmF1bHQgcHJvY2Vzcy5jd2QoKVxuICAgKi9cbiAgcmVhZG9ubHkgcm9vdERpcmVjdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9yaWdpbiBldmVyeSBzaXRlIG9mIHRoZSBhY2NvdW50IGlzIHNlcnZlZCBmcm9tLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnaHR0cHM6Ly9tbmFvdW1vdi5kZXYnXG4gICAqL1xuICByZWFkb25seSBzaXRlT3JpZ2luPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9sZGVyIHdob3NlIG1vZHVsZXMgdGhlIEFQSSByZWZlcmVuY2UgZG9jdW1lbnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnc3JjJ1xuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlRGlyZWN0b3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l0ZSdzIHRpdGxlLCBzaG93biBpbiBpdHMgaGVhZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgdGl0bGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiB7QGxpbmsgRG9jc1NpdGVDb25maWd9IHdpdGggZXZlcnkgZGVmYXVsdCBhcHBsaWVkLCBldmVyeSBwYXRoIGFic29sdXRlLCBhbmQgdGhlIHZhbHVlcyBkZXJpdmVkIGZyb20gdGhlbS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZERvY3NTaXRlQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBBUEkgZG9jdW1lbnRhdGlvbiBnZW5lcmF0b3IncyBzZXR0aW5ncyBmb3IgdGhlIHNpdGUuXG4gICAqL1xuICByZWFkb25seSBhcGlEb2NTZXR0aW5nczogQXBpRG9jU2V0dGluZ3M7XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIHBhdGgsIGUuZy4gYC90eXBlc2NyaXB0LWxpYmAuXG4gICAqL1xuICByZWFkb25seSBiYXNlUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZG9jdW1lbnRhdGlvbiBjb250ZW50IHJvb3QsIGA8ZG9jcz4vc3JjL2NvbnRlbnQvZG9jc2AuXG4gICAqL1xuICByZWFkb25seSBjb250ZW50RG9jc0RpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYnVpbGQgb3V0cHV0IGZvbGRlciwgYDxkb2NzPi9kaXN0YC5cbiAgICovXG4gIHJlYWRvbmx5IGRpc3REaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNpdGUgZm9sZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgZG9jc0RpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l0ZSdzIHNvdXJjZSBmb2xkZXIsIGA8ZG9jcz4vc3JjYC5cbiAgICovXG4gIHJlYWRvbmx5IGRvY3NTb3VyY2VEaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFVSTCBhIHBhZ2UncyBlZGl0IGxpbmsgc3RhcnRzIHdpdGg6IHRoZSByZXBvc2l0b3J5J3MgYGVkaXQvbWFpbi9gIHRyZWUuXG4gICAqL1xuICByZWFkb25seSBlZGl0TGlua0Jhc2VVcmw6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNpdGUncyBTVkcgbG9nbywgYDxkb2NzPi9wdWJsaWMvZmF2aWNvbi5zdmdgLlxuICAgKi9cbiAgcmVhZG9ubHkgZmF2aWNvblBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlcG9zaXRvcnkncyBHaXRIdWIgVVJMLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0aHViVXJsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNlZSB7QGxpbmsgRG9jc1NpdGVDb25maWcuZ3VpZGVzRGlyZWN0b3J5fS5cbiAgICovXG4gIHJlYWRvbmx5IGd1aWRlc0RpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9sZGVyIHRoZSBPcGVuIEdyYXBoIGNhcmRzIGFyZSB3cml0dGVuIHRvLCBgPGRvY3M+L3B1YmxpYy9vZ2AuXG4gICAqL1xuICByZWFkb25seSBvZ091dHB1dERpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZWUge0BsaW5rIERvY3NTaXRlQ29uZmlnLm93bmVyfS5cbiAgICovXG4gIHJlYWRvbmx5IG93bmVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkb2N1bWVudGVkIHBhY2thZ2UncyBuYW1lLCByZWFkIGZyb20gdGhlIHJvb3QgYHBhY2thZ2UuanNvbmAuXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZG9jdW1lbnRlZCBwYWNrYWdlJ3MgdmVyc2lvbiwgcmVhZCBmcm9tIHRoZSByb290IGBwYWNrYWdlLmpzb25gLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZVZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNpdGUncyBzdGF0aWMgZm9sZGVyLCBgPGRvY3M+L3B1YmxpY2AuXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNEaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogU2VlIHtAbGluayBEb2NzU2l0ZUNvbmZpZy5yZXBvfS5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG86IHN0cmluZztcblxuICAvKipcbiAgICogU2VlIHtAbGluayBEb2NzU2l0ZUNvbmZpZy5yZXBvSG9tZXBhZ2V9LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb0hvbWVwYWdlOiBSZXBvSG9tZXBhZ2VNb2RlO1xuXG4gIC8qKlxuICAgKiBTZWUge0BsaW5rIERvY3NTaXRlQ29uZmlnLnJvb3REaXJlY3Rvcnl9LlxuICAgKi9cbiAgcmVhZG9ubHkgcm9vdERpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYWJzb2x1dGUgVVJMIHRoZSBzaXRlIGlzIHNlcnZlZCBmcm9tLCB3aXRoIGEgdHJhaWxpbmcgc2xhc2guXG4gICAqL1xuICByZWFkb25seSBzaXRlQmFzZVVybDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZWUge0BsaW5rIERvY3NTaXRlQ29uZmlnLnNpdGVPcmlnaW59LlxuICAgKi9cbiAgcmVhZG9ubHkgc2l0ZU9yaWdpbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZWUge0BsaW5rIERvY3NTaXRlQ29uZmlnLnNvdXJjZURpcmVjdG9yeX0uXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VEaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogU2VlIHtAbGluayBEb2NzU2l0ZUNvbmZpZy50aXRsZX0uXG4gICAqL1xuICByZWFkb25seSB0aXRsZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUGFja2FnZUpzb25GaWVsZHMge1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGRlZmF1bHRzIHRvIGEgc2l0ZSdzIG9wdGlvbnMgYW5kIGRlcml2ZXMgZXZlcnkgcGF0aCBhbmQgVVJMIGZyb20gdGhlbS5cbiAqXG4gKiBAcGFyYW0gY29uZmlnIC0gVGhlIHNpdGUncyBjb25maWd1cmF0aW9uLlxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIGNvbmZpZ3VyYXRpb24uXG4gKiBAdGhyb3dzIElmIHRoZSByb290IGBwYWNrYWdlLmpzb25gIGhhcyBubyBgbmFtZWAgb3IgYHZlcnNpb25gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZURvY3NTaXRlQ29uZmlnKGNvbmZpZzogRG9jc1NpdGVDb25maWcpOiBSZXNvbHZlZERvY3NTaXRlQ29uZmlnIHtcbiAgY29uc3Qge1xuICAgIGRvY3NEaXJlY3RvcnkgPSAnZG9jcycsXG4gICAgZXh0ZXJuYWxUeXBlTGlua3MgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpLFxuICAgIGd1aWRlc0RpcmVjdG9yeSA9ICdndWlkZXMnLFxuICAgIG93bmVyID0gJ21uYW91bW92JyxcbiAgICBwYWNrYWdlU2l0ZXMgPSBERUZBVUxUX1BBQ0tBR0VfU0lURVMsXG4gICAgcmVwbyxcbiAgICByZXBvSG9tZXBhZ2UgPSAnb2ZmJyxcbiAgICByb290RGlyZWN0b3J5ID0gcHJvY2Vzcy5jd2QoKSxcbiAgICBzaXRlT3JpZ2luID0gJ2h0dHBzOi8vbW5hb3Vtb3YuZGV2JyxcbiAgICBzb3VyY2VEaXJlY3RvcnkgPSAnc3JjJyxcbiAgICB0aXRsZVxuICB9ID0gY29uZmlnO1xuXG4gIGNvbnN0IHBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoam9pbihyb290RGlyZWN0b3J5LCAncGFja2FnZS5qc29uJyksICd1dGYtOCcpKSBhcyBQYWNrYWdlSnNvbkZpZWxkcztcbiAgaWYgKHBhY2thZ2VKc29uLm5hbWUgPT09IHVuZGVmaW5lZCB8fCBwYWNrYWdlSnNvbi52ZXJzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7am9pbihyb290RGlyZWN0b3J5LCAncGFja2FnZS5qc29uJyl9IGhhcyBubyBuYW1lIG9yIG5vIHZlcnNpb24uYCk7XG4gIH1cblxuICBjb25zdCBhYnNvbHV0ZURvY3NEaXJlY3RvcnkgPSBqb2luKHJvb3REaXJlY3RvcnksIGRvY3NEaXJlY3RvcnkpO1xuICBjb25zdCBkb2NzU291cmNlRGlyZWN0b3J5ID0gam9pbihhYnNvbHV0ZURvY3NEaXJlY3RvcnksICdzcmMnKTtcbiAgY29uc3QgY29udGVudERvY3NEaXJlY3RvcnkgPSBqb2luKGRvY3NTb3VyY2VEaXJlY3RvcnksICdjb250ZW50JywgJ2RvY3MnKTtcbiAgY29uc3QgcHVibGljRGlyZWN0b3J5ID0gam9pbihhYnNvbHV0ZURvY3NEaXJlY3RvcnksICdwdWJsaWMnKTtcbiAgY29uc3QgZ2l0aHViVXJsID0gYGh0dHBzOi8vZ2l0aHViLmNvbS8ke293bmVyfS8ke3JlcG99YDtcblxuICBjb25zdCBiYXNlUGF0aCA9IGAvJHtyZXBvfWA7XG4gIHJldHVybiB7XG4gICAgYXBpRG9jU2V0dGluZ3M6IHtcbiAgICAgIGJhc2VQYXRoLFxuICAgICAgZXh0ZXJuYWxUeXBlTGlua3MsXG4gICAgICBvdXRwdXREaXJlY3Rvcnk6IGpvaW4oY29udGVudERvY3NEaXJlY3RvcnksICdhcGknKSxcbiAgICAgIHBhY2thZ2VOYW1lOiBwYWNrYWdlSnNvbi5uYW1lLFxuICAgICAgcGFja2FnZVNpdGVzLFxuICAgICAgc2lkZWJhckZpbGU6IGpvaW4oZG9jc1NvdXJjZURpcmVjdG9yeSwgJ2dlbmVyYXRlZC1zaWRlYmFyLmpzb24nKVxuICAgIH0sXG4gICAgYmFzZVBhdGgsXG4gICAgY29udGVudERvY3NEaXJlY3RvcnksXG4gICAgZGlzdERpcmVjdG9yeTogam9pbihhYnNvbHV0ZURvY3NEaXJlY3RvcnksICdkaXN0JyksXG4gICAgZG9jc0RpcmVjdG9yeTogYWJzb2x1dGVEb2NzRGlyZWN0b3J5LFxuICAgIGRvY3NTb3VyY2VEaXJlY3RvcnksXG4gICAgZWRpdExpbmtCYXNlVXJsOiBgJHtnaXRodWJVcmx9L2VkaXQvbWFpbi9gLFxuICAgIGZhdmljb25QYXRoOiBqb2luKHB1YmxpY0RpcmVjdG9yeSwgJ2Zhdmljb24uc3ZnJyksXG4gICAgZ2l0aHViVXJsLFxuICAgIGd1aWRlc0RpcmVjdG9yeSxcbiAgICBvZ091dHB1dERpcmVjdG9yeTogam9pbihwdWJsaWNEaXJlY3RvcnksICdvZycpLFxuICAgIG93bmVyLFxuICAgIHBhY2thZ2VOYW1lOiBwYWNrYWdlSnNvbi5uYW1lLFxuICAgIHBhY2thZ2VWZXJzaW9uOiBwYWNrYWdlSnNvbi52ZXJzaW9uLFxuICAgIHB1YmxpY0RpcmVjdG9yeSxcbiAgICByZXBvLFxuICAgIHJlcG9Ib21lcGFnZSxcbiAgICByb290RGlyZWN0b3J5LFxuICAgIHNpdGVCYXNlVXJsOiBgJHtzaXRlT3JpZ2lufS8ke3JlcG99L2AsXG4gICAgc2l0ZU9yaWdpbixcbiAgICBzb3VyY2VEaXJlY3Rvcnk6IGpvaW4ocm9vdERpcmVjdG9yeSwgc291cmNlRGlyZWN0b3J5KSxcbiAgICB0aXRsZVxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU9BLFNBQVMsb0JBQW9CO0FBQzdCLFNBQVMsWUFBWTtBQUtyQixTQUFTLDZCQUE2QjtBQWlOL0IsU0FBUyxzQkFBc0IsUUFBZ0Q7QUFDcEYsUUFBTTtBQUFBLElBQ0osZ0JBQWdCO0FBQUEsSUFDaEIsb0JBQW9CLG9CQUFJLElBQW9CO0FBQUEsSUFDNUMsa0JBQWtCO0FBQUEsSUFDbEIsUUFBUTtBQUFBLElBQ1IsZUFBZTtBQUFBLElBQ2Y7QUFBQSxJQUNBLGVBQWU7QUFBQSxJQUNmLGdCQUFnQixRQUFRLElBQUk7QUFBQSxJQUM1QixhQUFhO0FBQUEsSUFDYixrQkFBa0I7QUFBQSxJQUNsQjtBQUFBLEVBQ0YsSUFBSTtBQUVKLFFBQU0sY0FBYyxLQUFLLE1BQU0sYUFBYSxLQUFLLGVBQWUsY0FBYyxHQUFHLE9BQU8sQ0FBQztBQUN6RixNQUFJLFlBQVksU0FBUyxVQUFhLFlBQVksWUFBWSxRQUFXO0FBQ3ZFLFVBQU0sSUFBSSxNQUFNLEdBQUcsS0FBSyxlQUFlLGNBQWMsQ0FBQyw2QkFBNkI7QUFBQSxFQUNyRjtBQUVBLFFBQU0sd0JBQXdCLEtBQUssZUFBZSxhQUFhO0FBQy9ELFFBQU0sc0JBQXNCLEtBQUssdUJBQXVCLEtBQUs7QUFDN0QsUUFBTSx1QkFBdUIsS0FBSyxxQkFBcUIsV0FBVyxNQUFNO0FBQ3hFLFFBQU0sa0JBQWtCLEtBQUssdUJBQXVCLFFBQVE7QUFDNUQsUUFBTSxZQUFZLHNCQUFzQixLQUFLLElBQUksSUFBSTtBQUVyRCxRQUFNLFdBQVcsSUFBSSxJQUFJO0FBQ3pCLFNBQU87QUFBQSxJQUNMLGdCQUFnQjtBQUFBLE1BQ2Q7QUFBQSxNQUNBO0FBQUEsTUFDQSxpQkFBaUIsS0FBSyxzQkFBc0IsS0FBSztBQUFBLE1BQ2pELGFBQWEsWUFBWTtBQUFBLE1BQ3pCO0FBQUEsTUFDQSxhQUFhLEtBQUsscUJBQXFCLHdCQUF3QjtBQUFBLElBQ2pFO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLGVBQWUsS0FBSyx1QkFBdUIsTUFBTTtBQUFBLElBQ2pELGVBQWU7QUFBQSxJQUNmO0FBQUEsSUFDQSxpQkFBaUIsR0FBRyxTQUFTO0FBQUEsSUFDN0IsYUFBYSxLQUFLLGlCQUFpQixhQUFhO0FBQUEsSUFDaEQ7QUFBQSxJQUNBO0FBQUEsSUFDQSxtQkFBbUIsS0FBSyxpQkFBaUIsSUFBSTtBQUFBLElBQzdDO0FBQUEsSUFDQSxhQUFhLFlBQVk7QUFBQSxJQUN6QixnQkFBZ0IsWUFBWTtBQUFBLElBQzVCO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxhQUFhLEdBQUcsVUFBVSxJQUFJLElBQUk7QUFBQSxJQUNsQztBQUFBLElBQ0EsaUJBQWlCLEtBQUssZUFBZSxlQUFlO0FBQUEsSUFDcEQ7QUFBQSxFQUNGO0FBQ0Y7IiwibmFtZXMiOltdfQ==
|
|
@@ -21,6 +21,7 @@ export * as 'link-check' from './link-check.mjs';
|
|
|
21
21
|
export * as 'og-image-page' from './og-image-page.mjs';
|
|
22
22
|
export * as 'og-image' from './og-image.mjs';
|
|
23
23
|
export * as 'og-images' from './og-images.mjs';
|
|
24
|
+
export * as 'repo-homepage' from './repo-homepage.mjs';
|
|
24
25
|
export * as 'route-data' from './route-data.mjs';
|
|
25
26
|
export * as 'satteri-github-alerts' from './satteri-github-alerts.mjs';
|
|
26
27
|
export * as 'satteri-relative-links' from './satteri-relative-links.mjs';
|
|
@@ -25,6 +25,7 @@ import * as link_check from "./link-check.mjs";
|
|
|
25
25
|
import * as og_image_page from "./og-image-page.mjs";
|
|
26
26
|
import * as og_image from "./og-image.mjs";
|
|
27
27
|
import * as og_images from "./og-images.mjs";
|
|
28
|
+
import * as repo_homepage from "./repo-homepage.mjs";
|
|
28
29
|
import * as route_data from "./route-data.mjs";
|
|
29
30
|
import * as satteri_github_alerts from "./satteri-github-alerts.mjs";
|
|
30
31
|
import * as satteri_relative_links from "./satteri-relative-links.mjs";
|
|
@@ -52,9 +53,10 @@ export {
|
|
|
52
53
|
og_image as "og-image",
|
|
53
54
|
og_image_page as "og-image-page",
|
|
54
55
|
og_images as "og-images",
|
|
56
|
+
repo_homepage as "repo-homepage",
|
|
55
57
|
route_data as "route-data",
|
|
56
58
|
satteri_github_alerts as "satteri-github-alerts",
|
|
57
59
|
satteri_relative_links as "satteri-relative-links",
|
|
58
60
|
unrendered_alerts as "unrendered-alerts"
|
|
59
61
|
};
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2RvY3Mtc2l0ZS9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdhcGktZG9jLWNvbnN0YW50cycgZnJvbSAnLi9hcGktZG9jLWNvbnN0YW50cy50cyc7XG5leHBvcnQgKiBhcyAnYXBpLWRvYy1kb2N1bWVudGVkLWZpbGVzJyBmcm9tICcuL2FwaS1kb2MtZG9jdW1lbnRlZC1maWxlcy50cyc7XG5leHBvcnQgKiBhcyAnYXBpLWRvYy1qc2RvYycgZnJvbSAnLi9hcGktZG9jLWpzZG9jLnRzJztcbmV4cG9ydCAqIGFzICdhcGktZG9jLWxpbmstcmVuZGVyaW5nJyBmcm9tICcuL2FwaS1kb2MtbGluay1yZW5kZXJpbmcudHMnO1xuZXhwb3J0ICogYXMgJ2FwaS1kb2MtcGFja2FnZS1zaXRlcycgZnJvbSAnLi9hcGktZG9jLXBhY2thZ2Utc2l0ZXMudHMnO1xuZXhwb3J0ICogYXMgJ2FwaS1kb2MtcGFnZS1nZW5lcmF0aW9uJyBmcm9tICcuL2FwaS1kb2MtcGFnZS1nZW5lcmF0aW9uLnRzJztcbmV4cG9ydCAqIGFzICdhcGktZG9jLXJvdXRlLXNlZ21lbnRzJyBmcm9tICcuL2FwaS1kb2Mtcm91dGUtc2VnbWVudHMudHMnO1xuZXhwb3J0ICogYXMgJ2FwaS1kb2Mtc2V0dGluZ3MnIGZyb20gJy4vYXBpLWRvYy1zZXR0aW5ncy50cyc7XG5leHBvcnQgKiBhcyAnYXBpLWRvYy1zb3VyY2UtcHJvY2Vzc2luZycgZnJvbSAnLi9hcGktZG9jLXNvdXJjZS1wcm9jZXNzaW5nLnRzJztcbmV4cG9ydCAqIGFzICdhcGktZG9jLXRleHQtdXRpbHMnIGZyb20gJy4vYXBpLWRvYy10ZXh0LXV0aWxzLnRzJztcbmV4cG9ydCAqIGFzICdhcGktZG9jLXR5cGUtbWVyZ2luZycgZnJvbSAnLi9hcGktZG9jLXR5cGUtbWVyZ2luZy50cyc7XG5leHBvcnQgKiBhcyAnYXBpLWRvYy10eXBlcycgZnJvbSAnLi9hcGktZG9jLXR5cGVzLnRzJztcbmV4cG9ydCAqIGFzICdhcGktZG9jcycgZnJvbSAnLi9hcGktZG9jcy50cyc7XG5leHBvcnQgKiBhcyAnYXN0cm8tY29uZmlnJyBmcm9tICcuL2FzdHJvLWNvbmZpZy50cyc7XG5leHBvcnQgKiBhcyAnZG9jcy1saW5rcycgZnJvbSAnLi9kb2NzLWxpbmtzLnRzJztcbmV4cG9ydCAqIGFzICdkb2NzLXNpdGUtYXNzZXRzJyBmcm9tICcuL2RvY3Mtc2l0ZS1hc3NldHMudHMnO1xuZXhwb3J0ICogYXMgJ2RvY3Mtc2l0ZS1jb21tYW5kcycgZnJvbSAnLi9kb2NzLXNpdGUtY29tbWFuZHMudHMnO1xuZXhwb3J0ICogYXMgJ2RvY3Mtc2l0ZS1jb25maWcnIGZyb20gJy4vZG9jcy1zaXRlLWNvbmZpZy50cyc7XG5leHBvcnQgKiBhcyAnbGluay1jaGVjaycgZnJvbSAnLi9saW5rLWNoZWNrLnRzJztcbmV4cG9ydCAqIGFzICdvZy1pbWFnZS1wYWdlJyBmcm9tICcuL29nLWltYWdlLXBhZ2UudHMnO1xuZXhwb3J0ICogYXMgJ29nLWltYWdlJyBmcm9tICcuL29nLWltYWdlLnRzJztcbmV4cG9ydCAqIGFzICdvZy1pbWFnZXMnIGZyb20gJy4vb2ctaW1hZ2VzLnRzJztcbmV4cG9ydCAqIGFzICdyZXBvLWhvbWVwYWdlJyBmcm9tICcuL3JlcG8taG9tZXBhZ2UudHMnO1xuZXhwb3J0ICogYXMgJ3JvdXRlLWRhdGEnIGZyb20gJy4vcm91dGUtZGF0YS50cyc7XG5leHBvcnQgKiBhcyAnc2F0dGVyaS1naXRodWItYWxlcnRzJyBmcm9tICcuL3NhdHRlcmktZ2l0aHViLWFsZXJ0cy50cyc7XG5leHBvcnQgKiBhcyAnc2F0dGVyaS1yZWxhdGl2ZS1saW5rcycgZnJvbSAnLi9zYXR0ZXJpLXJlbGF0aXZlLWxpbmtzLnRzJztcbmV4cG9ydCAqIGFzICd1bnJlbmRlcmVkLWFsZXJ0cycgZnJvbSAnLi91bnJlbmRlcmVkLWFsZXJ0cy50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQUVBLFlBQVlBLHVCQUF5QjtBQUNyQyxZQUFZQyw4QkFBZ0M7QUFDNUMsWUFBWUMsbUJBQXFCO0FBQ2pDLFlBQVlDLDRCQUE4QjtBQUMxQyxZQUFZQywyQkFBNkI7QUFDekMsWUFBWUMsNkJBQStCO0FBQzNDLFlBQVlDLDRCQUE4QjtBQUMxQyxZQUFZQyxzQkFBd0I7QUFDcEMsWUFBWUMsK0JBQWlDO0FBQzdDLFlBQVlDLHdCQUEwQjtBQUN0QyxZQUFZQywwQkFBNEI7QUFDeEMsWUFBWUMsbUJBQXFCO0FBQ2pDLFlBQVlDLGNBQWdCO0FBQzVCLFlBQVlDLGtCQUFvQjtBQUNoQyxZQUFZQyxnQkFBa0I7QUFDOUIsWUFBWUMsc0JBQXdCO0FBQ3BDLFlBQVlDLHdCQUEwQjtBQUN0QyxZQUFZQyxzQkFBd0I7QUFDcEMsWUFBWUMsZ0JBQWtCO0FBQzlCLFlBQVlDLG1CQUFxQjtBQUNqQyxZQUFZQyxjQUFnQjtBQUM1QixZQUFZQyxlQUFpQjtBQUM3QixZQUFZQyxtQkFBcUI7QUFDakMsWUFBWUMsZ0JBQWtCO0FBQzlCLFlBQVlDLDJCQUE2QjtBQUN6QyxZQUFZQyw0QkFBOEI7QUFDMUMsWUFBWUMsdUJBQXlCOyIsCiAgIm5hbWVzIjogWyJhcGktZG9jLWNvbnN0YW50cyIsICJhcGktZG9jLWRvY3VtZW50ZWQtZmlsZXMiLCAiYXBpLWRvYy1qc2RvYyIsICJhcGktZG9jLWxpbmstcmVuZGVyaW5nIiwgImFwaS1kb2MtcGFja2FnZS1zaXRlcyIsICJhcGktZG9jLXBhZ2UtZ2VuZXJhdGlvbiIsICJhcGktZG9jLXJvdXRlLXNlZ21lbnRzIiwgImFwaS1kb2Mtc2V0dGluZ3MiLCAiYXBpLWRvYy1zb3VyY2UtcHJvY2Vzc2luZyIsICJhcGktZG9jLXRleHQtdXRpbHMiLCAiYXBpLWRvYy10eXBlLW1lcmdpbmciLCAiYXBpLWRvYy10eXBlcyIsICJhcGktZG9jcyIsICJhc3Ryby1jb25maWciLCAiZG9jcy1saW5rcyIsICJkb2NzLXNpdGUtYXNzZXRzIiwgImRvY3Mtc2l0ZS1jb21tYW5kcyIsICJkb2NzLXNpdGUtY29uZmlnIiwgImxpbmstY2hlY2siLCAib2ctaW1hZ2UtcGFnZSIsICJvZy1pbWFnZSIsICJvZy1pbWFnZXMiLCAicmVwby1ob21lcGFnZSIsICJyb3V0ZS1kYXRhIiwgInNhdHRlcmktZ2l0aHViLWFsZXJ0cyIsICJzYXR0ZXJpLXJlbGF0aXZlLWxpbmtzIiwgInVucmVuZGVyZWQtYWxlcnRzIl0KfQo=
|
|
@@ -40,6 +40,19 @@ export interface BrokenLink {
|
|
|
40
40
|
*/
|
|
41
41
|
targetUrl: string;
|
|
42
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Options for {@link collectBrokenExternalLinks}.
|
|
45
|
+
*/
|
|
46
|
+
export interface CollectBrokenExternalLinksOptions {
|
|
47
|
+
/**
|
|
48
|
+
* The maximum number of in-flight probes against one host. Defaults to {@link DEFAULT_EXTERNAL_LINK_PER_HOST_CONCURRENCY}.
|
|
49
|
+
*/
|
|
50
|
+
readonly perHostConcurrency?: number;
|
|
51
|
+
/**
|
|
52
|
+
* How a transient failure is retried.
|
|
53
|
+
*/
|
|
54
|
+
readonly retry?: ExternalLinkRetryOptions;
|
|
55
|
+
}
|
|
43
56
|
/**
|
|
44
57
|
* A single built documentation page to validate.
|
|
45
58
|
*/
|
|
@@ -53,6 +66,50 @@ export interface DocumentationPage {
|
|
|
53
66
|
*/
|
|
54
67
|
relativePath: string;
|
|
55
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* What one probe of an external URL learned.
|
|
71
|
+
*/
|
|
72
|
+
export interface ExternalLinkProbeResult {
|
|
73
|
+
/**
|
|
74
|
+
* How long the server asked the client to wait before asking again (its `Retry-After` header), when it said.
|
|
75
|
+
*/
|
|
76
|
+
readonly retryAfterInMilliseconds?: number | undefined;
|
|
77
|
+
/**
|
|
78
|
+
* The HTTP status, or {@link NETWORK_FAILURE_STATUS} when no response was received.
|
|
79
|
+
*/
|
|
80
|
+
readonly status: number;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* How {@link collectBrokenExternalLinks} retries a transient failure: a network failure, an HTTP `429` or an HTTP `5xx`.
|
|
84
|
+
*
|
|
85
|
+
* Each wait doubles from {@link ExternalLinkRetryOptions.initialDelayInMilliseconds} up to
|
|
86
|
+
* {@link ExternalLinkRetryOptions.maxDelayInMilliseconds}, is jittered into its upper half, and is never shorter than the
|
|
87
|
+
* server's `Retry-After`. The waits of one URL never add up to more than
|
|
88
|
+
* {@link ExternalLinkRetryOptions.totalBudgetInMilliseconds}; the status of the last attempt is final.
|
|
89
|
+
*/
|
|
90
|
+
export interface ExternalLinkRetryOptions {
|
|
91
|
+
/**
|
|
92
|
+
* The first wait. Defaults to {@link DEFAULT_EXTERNAL_LINK_RETRY_INITIAL_DELAY_IN_MILLISECONDS}.
|
|
93
|
+
*/
|
|
94
|
+
readonly initialDelayInMilliseconds?: number;
|
|
95
|
+
/**
|
|
96
|
+
* The longest single wait the backoff grows to. Defaults to {@link DEFAULT_EXTERNAL_LINK_RETRY_MAX_DELAY_IN_MILLISECONDS}.
|
|
97
|
+
*/
|
|
98
|
+
readonly maxDelayInMilliseconds?: number;
|
|
99
|
+
/**
|
|
100
|
+
* Returns a number in `[0, 1)` for the jitter. Defaults to `Math.random`.
|
|
101
|
+
*/
|
|
102
|
+
readonly random?: () => number;
|
|
103
|
+
/**
|
|
104
|
+
* Waits the given time. Defaults to a `setTimeout`.
|
|
105
|
+
*/
|
|
106
|
+
readonly sleep?: (milliseconds: number) => Promise<void>;
|
|
107
|
+
/**
|
|
108
|
+
* The most one URL may spend waiting between its attempts. Defaults to
|
|
109
|
+
* {@link DEFAULT_EXTERNAL_LINK_RETRY_TOTAL_BUDGET_IN_MILLISECONDS}.
|
|
110
|
+
*/
|
|
111
|
+
readonly totalBudgetInMilliseconds?: number;
|
|
112
|
+
}
|
|
56
113
|
/**
|
|
57
114
|
* Filesystem access the link checker needs, injected so the pure decision logic can be tested
|
|
58
115
|
* against an in-memory stub instead of a real build output.
|
|
@@ -74,15 +131,39 @@ export interface LinkCheckFileSystem {
|
|
|
74
131
|
*/
|
|
75
132
|
resolveExistingPage: (outputRelativePath: string) => null | string;
|
|
76
133
|
}
|
|
134
|
+
/**
|
|
135
|
+
* The default {@link CollectBrokenExternalLinksOptions.perHostConcurrency}. A documentation site links thousands of
|
|
136
|
+
* pages of its sibling sites, all on one host, and GitHub Pages answers a burst of them with a `503`.
|
|
137
|
+
*/
|
|
138
|
+
export declare const DEFAULT_EXTERNAL_LINK_PER_HOST_CONCURRENCY = 8;
|
|
139
|
+
/**
|
|
140
|
+
* The default {@link ExternalLinkRetryOptions.initialDelayInMilliseconds}.
|
|
141
|
+
*/
|
|
142
|
+
export declare const DEFAULT_EXTERNAL_LINK_RETRY_INITIAL_DELAY_IN_MILLISECONDS = 1000;
|
|
143
|
+
/**
|
|
144
|
+
* The default {@link ExternalLinkRetryOptions.maxDelayInMilliseconds}.
|
|
145
|
+
*/
|
|
146
|
+
export declare const DEFAULT_EXTERNAL_LINK_RETRY_MAX_DELAY_IN_MILLISECONDS = 16000;
|
|
147
|
+
/**
|
|
148
|
+
* The default {@link ExternalLinkRetryOptions.totalBudgetInMilliseconds}.
|
|
149
|
+
*/
|
|
150
|
+
export declare const DEFAULT_EXTERNAL_LINK_RETRY_TOTAL_BUDGET_IN_MILLISECONDS = 45000;
|
|
77
151
|
/**
|
|
78
152
|
* Validates the deduplicated external URLs over the network through a bounded concurrency pool.
|
|
79
153
|
*
|
|
154
|
+
* A network failure, an HTTP `429` and an HTTP `5xx` are retried with an exponential, jittered backoff that honors
|
|
155
|
+
* `Retry-After` (see {@link ExternalLinkRetryOptions}); any other status, a `404` included, is final at once. Probes of
|
|
156
|
+
* one host are also capped at {@link CollectBrokenExternalLinksOptions.perHostConcurrency}, and a probe of another host
|
|
157
|
+
* is started while one host is at its cap.
|
|
158
|
+
*
|
|
80
159
|
* @param targets - The unique external URL → referencing page map from {@link collectExternalTargets}.
|
|
81
|
-
* @param fetchUrlStatus - Injected probe returning the HTTP status for a URL (`0` for a network failure)
|
|
160
|
+
* @param fetchUrlStatus - Injected probe returning the HTTP status for a URL (`0` for a network failure), or an
|
|
161
|
+
* {@link ExternalLinkProbeResult} that also carries the server's `Retry-After`.
|
|
82
162
|
* @param concurrency - The maximum number of in-flight probes.
|
|
163
|
+
* @param options - The per-host cap and the retry policy.
|
|
83
164
|
* @returns Every external URL that did not return HTTP `200`, in the map's iteration order.
|
|
84
165
|
*/
|
|
85
|
-
export declare function collectBrokenExternalLinks(targets: Map<string, string>, fetchUrlStatus: (url: string) => Promise<number>, concurrency: number): Promise<BrokenLink[]>;
|
|
166
|
+
export declare function collectBrokenExternalLinks(targets: Map<string, string>, fetchUrlStatus: (url: string) => Promise<ExternalLinkProbeResult | number>, concurrency: number, options?: CollectBrokenExternalLinksOptions): Promise<BrokenLink[]>;
|
|
86
167
|
/**
|
|
87
168
|
* Finds every internal link across the built documentation pages that does not resolve.
|
|
88
169
|
*
|
|
@@ -152,6 +233,14 @@ export declare function getPageUrl(relativePath: string, siteBaseUrl: string): s
|
|
|
152
233
|
* @returns `true` when the link is same-origin and under the site base path.
|
|
153
234
|
*/
|
|
154
235
|
export declare function isInternalDocUrl(targetUrl: URL, siteBaseUrl: string): boolean;
|
|
236
|
+
/**
|
|
237
|
+
* Reads an HTTP `Retry-After` header, which is either a number of seconds or an HTTP date.
|
|
238
|
+
*
|
|
239
|
+
* @param headerValue - The header's value, or `null` when the response has none.
|
|
240
|
+
* @param nowInMilliseconds - The current time, against which a date is measured.
|
|
241
|
+
* @returns How long to wait, never negative, or `undefined` when the header is absent or unreadable.
|
|
242
|
+
*/
|
|
243
|
+
export declare function parseRetryAfterInMilliseconds(headerValue: null | string, nowInMilliseconds: number): number | undefined;
|
|
155
244
|
/**
|
|
156
245
|
* Resolves an output-relative path to an absolute path inside the build-output root, rejecting
|
|
157
246
|
* paths that escape it via `..` segments.
|
|
@@ -46,20 +46,47 @@ const LINK_ATTRIBUTE_REGEX = /\b(?:href|src)=(?<quote>['"])(?<value>.*?)\k<quote
|
|
|
46
46
|
const ID_ATTRIBUTE_REGEX = /\bid=(?<quote>['"])(?<value>.*?)\k<quote>/giu;
|
|
47
47
|
const HTTP_OK_STATUS = 200;
|
|
48
48
|
const NETWORK_FAILURE_STATUS = 0;
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
const DEFAULT_EXTERNAL_LINK_PER_HOST_CONCURRENCY = 8;
|
|
50
|
+
const DEFAULT_EXTERNAL_LINK_RETRY_INITIAL_DELAY_IN_MILLISECONDS = 1e3;
|
|
51
|
+
const DEFAULT_EXTERNAL_LINK_RETRY_MAX_DELAY_IN_MILLISECONDS = 16e3;
|
|
52
|
+
const DEFAULT_EXTERNAL_LINK_RETRY_TOTAL_BUDGET_IN_MILLISECONDS = 45e3;
|
|
53
|
+
const HTTP_TOO_MANY_REQUESTS_STATUS = 429;
|
|
54
|
+
const HTTP_SERVER_ERROR_MIN_STATUS = 500;
|
|
55
|
+
const MILLISECONDS_PER_SECOND = 1e3;
|
|
56
|
+
const JITTER_FLOOR = 0.5;
|
|
57
|
+
const BACKOFF_FACTOR = 2;
|
|
58
|
+
async function collectBrokenExternalLinks(targets, fetchUrlStatus, concurrency, options = {}) {
|
|
59
|
+
const perHostConcurrency = Math.max(1, options.perHostConcurrency ?? DEFAULT_EXTERNAL_LINK_PER_HOST_CONCURRENCY);
|
|
60
|
+
const pending = [...targets].map(([url, pageUrl], index) => ({ host: new URL(url).host, index, pageUrl, url }));
|
|
61
|
+
const results = Array.from({ length: pending.length }, () => null);
|
|
62
|
+
const inFlightByHost = /* @__PURE__ */ new Map();
|
|
63
|
+
const waiters = [];
|
|
53
64
|
async function runWorker() {
|
|
54
|
-
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
65
|
+
while (pending.length > 0) {
|
|
66
|
+
const position = pending.findIndex((probe2) => (inFlightByHost.get(probe2.host) ?? 0) < perHostConcurrency);
|
|
67
|
+
if (position === -1) {
|
|
68
|
+
await new Promise((resolvePromise) => {
|
|
69
|
+
waiters.push(resolvePromise);
|
|
70
|
+
});
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
const [probe] = pending.splice(position, 1);
|
|
74
|
+
const { host, index, pageUrl, url } = ensureNonNullable(probe);
|
|
75
|
+
inFlightByHost.set(host, (inFlightByHost.get(host) ?? 0) + 1);
|
|
76
|
+
try {
|
|
77
|
+
const httpStatus = await probeWithRetry(url, fetchUrlStatus, options.retry ?? {});
|
|
78
|
+
if (httpStatus !== HTTP_OK_STATUS) {
|
|
79
|
+
results[index] = { httpStatus, pageUrl, reason: "external-error", targetUrl: url };
|
|
80
|
+
}
|
|
81
|
+
} finally {
|
|
82
|
+
inFlightByHost.set(host, ensureNonNullable(inFlightByHost.get(host)) - 1);
|
|
83
|
+
for (const wake of waiters.splice(0)) {
|
|
84
|
+
wake();
|
|
85
|
+
}
|
|
59
86
|
}
|
|
60
87
|
}
|
|
61
88
|
}
|
|
62
|
-
const workerCount = Math.max(1, Math.min(concurrency,
|
|
89
|
+
const workerCount = Math.max(1, Math.min(concurrency, pending.length));
|
|
63
90
|
await Promise.all(Array.from({ length: workerCount }, () => runWorker()));
|
|
64
91
|
return results.filter((brokenLink) => brokenLink !== null);
|
|
65
92
|
}
|
|
@@ -139,6 +166,17 @@ function isInternalDocUrl(targetUrl, siteBaseUrl) {
|
|
|
139
166
|
const base = new URL(siteBaseUrl);
|
|
140
167
|
return targetUrl.origin === base.origin && targetUrl.pathname.startsWith(base.pathname);
|
|
141
168
|
}
|
|
169
|
+
function parseRetryAfterInMilliseconds(headerValue, nowInMilliseconds) {
|
|
170
|
+
const trimmed = headerValue?.trim() ?? "";
|
|
171
|
+
if (trimmed === "") {
|
|
172
|
+
return void 0;
|
|
173
|
+
}
|
|
174
|
+
if (/^\d+$/u.test(trimmed)) {
|
|
175
|
+
return Number(trimmed) * MILLISECONDS_PER_SECOND;
|
|
176
|
+
}
|
|
177
|
+
const dateInMilliseconds = Date.parse(trimmed);
|
|
178
|
+
return Number.isNaN(dateInMilliseconds) ? void 0 : Math.max(0, dateInMilliseconds - nowInMilliseconds);
|
|
179
|
+
}
|
|
142
180
|
function resolveWithinRoot(outputRootPath, outputRelativePath) {
|
|
143
181
|
const root = normalize(outputRootPath.replaceAll("\\", "/")).replace(/\/$/u, "");
|
|
144
182
|
let joined = normalize(`${root}/${outputRelativePath.replaceAll("\\", "/")}`);
|
|
@@ -150,7 +188,40 @@ function resolveWithinRoot(outputRootPath, outputRelativePath) {
|
|
|
150
188
|
function describeHttpStatus(httpStatus) {
|
|
151
189
|
return httpStatus === void 0 || httpStatus === NETWORK_FAILURE_STATUS ? "a network failure" : `HTTP ${String(httpStatus)}`;
|
|
152
190
|
}
|
|
191
|
+
function isTransientStatus(status) {
|
|
192
|
+
return status === NETWORK_FAILURE_STATUS || status === HTTP_TOO_MANY_REQUESTS_STATUS || status >= HTTP_SERVER_ERROR_MIN_STATUS;
|
|
193
|
+
}
|
|
194
|
+
async function probeWithRetry(url, fetchUrlStatus, retry) {
|
|
195
|
+
const initialDelayInMilliseconds = retry.initialDelayInMilliseconds ?? DEFAULT_EXTERNAL_LINK_RETRY_INITIAL_DELAY_IN_MILLISECONDS;
|
|
196
|
+
const maxDelayInMilliseconds = retry.maxDelayInMilliseconds ?? DEFAULT_EXTERNAL_LINK_RETRY_MAX_DELAY_IN_MILLISECONDS;
|
|
197
|
+
const totalBudgetInMilliseconds = retry.totalBudgetInMilliseconds ?? DEFAULT_EXTERNAL_LINK_RETRY_TOTAL_BUDGET_IN_MILLISECONDS;
|
|
198
|
+
const random = retry.random ?? Math.random;
|
|
199
|
+
const sleep = retry.sleep ?? sleepWithTimeout;
|
|
200
|
+
let waitedInMilliseconds = 0;
|
|
201
|
+
for (let attempt = 0; ; attempt++) {
|
|
202
|
+
const probeResult = await fetchUrlStatus(url);
|
|
203
|
+
const { retryAfterInMilliseconds, status } = typeof probeResult === "number" ? { retryAfterInMilliseconds: void 0, status: probeResult } : probeResult;
|
|
204
|
+
const remainingInMilliseconds = totalBudgetInMilliseconds - waitedInMilliseconds;
|
|
205
|
+
if (!isTransientStatus(status) || remainingInMilliseconds <= 0) {
|
|
206
|
+
return status;
|
|
207
|
+
}
|
|
208
|
+
const backoffInMilliseconds = Math.min(maxDelayInMilliseconds, initialDelayInMilliseconds * BACKOFF_FACTOR ** attempt);
|
|
209
|
+
const jitteredInMilliseconds = backoffInMilliseconds * (JITTER_FLOOR + (1 - JITTER_FLOOR) * random());
|
|
210
|
+
const delayInMilliseconds = Math.min(remainingInMilliseconds, Math.max(jitteredInMilliseconds, retryAfterInMilliseconds ?? 0));
|
|
211
|
+
await sleep(delayInMilliseconds);
|
|
212
|
+
waitedInMilliseconds += delayInMilliseconds;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
function sleepWithTimeout(milliseconds) {
|
|
216
|
+
return new Promise((resolvePromise) => {
|
|
217
|
+
globalThis.setTimeout(resolvePromise, milliseconds);
|
|
218
|
+
});
|
|
219
|
+
}
|
|
153
220
|
export {
|
|
221
|
+
DEFAULT_EXTERNAL_LINK_PER_HOST_CONCURRENCY,
|
|
222
|
+
DEFAULT_EXTERNAL_LINK_RETRY_INITIAL_DELAY_IN_MILLISECONDS,
|
|
223
|
+
DEFAULT_EXTERNAL_LINK_RETRY_MAX_DELAY_IN_MILLISECONDS,
|
|
224
|
+
DEFAULT_EXTERNAL_LINK_RETRY_TOTAL_BUDGET_IN_MILLISECONDS,
|
|
154
225
|
NETWORK_FAILURE_STATUS,
|
|
155
226
|
collectBrokenExternalLinks,
|
|
156
227
|
collectBrokenLinks,
|
|
@@ -161,6 +232,7 @@ export {
|
|
|
161
232
|
getOutputRelativePath,
|
|
162
233
|
getPageUrl,
|
|
163
234
|
isInternalDocUrl,
|
|
235
|
+
parseRetryAfterInMilliseconds,
|
|
164
236
|
resolveWithinRoot
|
|
165
237
|
};
|
|
166
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvbGluay1jaGVjay50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVmFsaWRhdGlvbiBvZiB0aGUgbGlua3MgZW1pdHRlZCBieSB0aGUgYnVpbHQgZG9jdW1lbnRhdGlvbiBIVE1MLlxuICpcbiAqIEludGVybmFsIChzYW1lLXNpdGUpIGxpbmtzIGFyZSB2YWxpZGF0ZWQgb2ZmbGluZTogZXZlcnkgYGhyZWZgL2BzcmNgIG11c3QgcmVzb2x2ZSB0byBhIHJlYWxcbiAqIGZpbGUgaW4gdGhlIGJ1aWxkIG91dHB1dCwgYW5kIGV2ZXJ5IGAjZnJhZ21lbnRgIG11c3QgcmVzb2x2ZSB0byBhIHJlYWwgZWxlbWVudCBpZCBvbiB0aGVcbiAqIHRhcmdldCBwYWdlLlxuICpcbiAqIEV4dGVybmFsIGxpbmtzIGNhbiBvbmx5IGJlIHZhbGlkYXRlZCBvdmVyIHRoZSBuZXR3b3JrLCBzbyB0aG9zZSByZXF1ZXN0cyBhcmUgaGVhdmlseVxuICogZGVkdXBsaWNhdGVkIOKAlCBlYWNoIHVuaXF1ZSBleHRlcm5hbCBVUkwgaXMgZmV0Y2hlZCBhdCBtb3N0IG9uY2UgcmVnYXJkbGVzcyBvZiBob3cgbWFueSBvZiB0aGVcbiAqIHRob3VzYW5kcyBvZiBnZW5lcmF0ZWQgcGFnZXMgcmVmZXJlbmNlIGl0IOKAlCBhbmQgcnVuIHRocm91Z2ggYSBib3VuZGVkIGNvbmN1cnJlbmN5IHBvb2wuXG4gKi9cblxuaW1wb3J0IHsgZ2V0TWFuZGF0b3J5TmFtZWRHcm91cCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9yZWctZXhwJztcbmltcG9ydCB7XG4gIGFzc2VydE5ldmVyLFxuICBlbnN1cmVOb25OdWxsYWJsZVxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHsgbm9ybWFsaXplIH0gZnJvbSAnbm9kZTpwYXRoL3Bvc2l4JztcblxuY29uc3QgTElOS19BVFRSSUJVVEVfUkVHRVggPSAvXFxiKD86aHJlZnxzcmMpPSg/PHF1b3RlPlsnXCJdKSg/PHZhbHVlPi4qPylcXGs8cXVvdGU+L2dpdTtcbmNvbnN0IElEX0FUVFJJQlVURV9SRUdFWCA9IC9cXGJpZD0oPzxxdW90ZT5bJ1wiXSkoPzx2YWx1ZT4uKj8pXFxrPHF1b3RlPi9naXU7XG5jb25zdCBIVFRQX09LX1NUQVRVUyA9IDIwMDtcblxuLyoqXG4gKiBUaGUge0BsaW5rIEJyb2tlbkxpbmsuaHR0cFN0YXR1c30gc2VudGluZWwgZm9yIGEgbmV0d29yay1sZXZlbCBmYWlsdXJlICh0aW1lb3V0LCBETlMsXG4gKiBjb25uZWN0aW9uIHJlZnVzZWQpIHdoZXJlIG5vIEhUVFAgcmVzcG9uc2Ugd2FzIHJlY2VpdmVkLlxuICovXG5leHBvcnQgY29uc3QgTkVUV09SS19GQUlMVVJFX1NUQVRVUyA9IDA7XG5cbi8qKlxuICogQSBzaW5nbGUgbGluayB0aGF0IGRvZXMgbm90IHJlc29sdmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnJva2VuTGluayB7XG4gIC8qKlxuICAgKiBUaGUgSFRUUCBzdGF0dXMgcmV0dXJuZWQgYnkgYW4gZXh0ZXJuYWwgbGluaywgd2hlbiB7QGxpbmsgQnJva2VuTGluay5yZWFzb259IGlzXG4gICAqIGBleHRlcm5hbC1lcnJvcmAuIGAwYCBkZW5vdGVzIGEgbmV0d29yay1sZXZlbCBmYWlsdXJlICh0aW1lb3V0LCBETlMsIGNvbm5lY3Rpb24gcmVmdXNlZCkuXG4gICAqL1xuICBodHRwU3RhdHVzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgYWJzb2x1dGUgVVJMIG9mIHRoZSBwYWdlIHRoYXQgY29udGFpbnMgdGhlIGJyb2tlbiBsaW5rLlxuICAgKi9cbiAgcGFnZVVybDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaHkgdGhlIGxpbmsgaXMgY29uc2lkZXJlZCBicm9rZW4uXG4gICAqL1xuICByZWFzb246ICdleHRlcm5hbC1lcnJvcicgfCAnbWlzc2luZy1mcmFnbWVudCcgfCAnbWlzc2luZy1wYWdlJztcblxuICAvKipcbiAgICogVGhlIHJlc29sdmVkIGFic29sdXRlIFVSTCB0aGUgbGluayBwb2ludHMgYXQuXG4gICAqL1xuICB0YXJnZXRVcmw6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHNpbmdsZSBidWlsdCBkb2N1bWVudGF0aW9uIHBhZ2UgdG8gdmFsaWRhdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG9jdW1lbnRhdGlvblBhZ2Uge1xuICAvKipcbiAgICogVGhlIHBhZ2UncyByZW5kZXJlZCBIVE1MLlxuICAgKi9cbiAgaHRtbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFnZSdzIHBhdGggcmVsYXRpdmUgdG8gdGhlIGJ1aWxkLW91dHB1dCByb290LCBlLmcuIGBhcGkvZm9vL2luZGV4Lmh0bWxgLlxuICAgKi9cbiAgcmVsYXRpdmVQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRmlsZXN5c3RlbSBhY2Nlc3MgdGhlIGxpbmsgY2hlY2tlciBuZWVkcywgaW5qZWN0ZWQgc28gdGhlIHB1cmUgZGVjaXNpb24gbG9naWMgY2FuIGJlIHRlc3RlZFxuICogYWdhaW5zdCBhbiBpbi1tZW1vcnkgc3R1YiBpbnN0ZWFkIG9mIGEgcmVhbCBidWlsZCBvdXRwdXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlua0NoZWNrRmlsZVN5c3RlbSB7XG4gIC8qKlxuICAgKiBSZWFkcyB0aGUgZWxlbWVudCBpZHMgcHJlc2VudCBvbiBhbiBhbHJlYWR5LXJlc29sdmVkIHBhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBwYWdlS2V5IC0gVGhlIGtleSByZXR1cm5lZCBieSB7QGxpbmsgTGlua0NoZWNrRmlsZVN5c3RlbS5yZXNvbHZlRXhpc3RpbmdQYWdlfS5cbiAgICogQHJldHVybnMgVGhlIHNldCBvZiBlbGVtZW50IGlkcyBvbiB0aGF0IHBhZ2UuXG4gICAqL1xuICByZWFkSWRzOiAocGFnZUtleTogc3RyaW5nKSA9PiBTZXQ8c3RyaW5nPjtcblxuICAvKipcbiAgICogUmVzb2x2ZXMgYW4gb3V0cHV0LXJlbGF0aXZlIHBhdGggdG8gYW4gZXhpc3RpbmcgcGFnZS5cbiAgICpcbiAgICogQHBhcmFtIG91dHB1dFJlbGF0aXZlUGF0aCAtIFRoZSBkZWNvZGVkIHBhdGggcmVsYXRpdmUgdG8gdGhlIGJ1aWxkLW91dHB1dCByb290LlxuICAgKiBAcmV0dXJucyBBIHN0YWJsZSBrZXkgKGUuZy4gdGhlIHJlc29sdmVkIGFic29sdXRlIGZpbGUgcGF0aCkgZm9yIHRoZSBleGlzdGluZyBwYWdlLCBvclxuICAgKiAgIGBudWxsYCB3aGVuIG5vdGhpbmcgZXhpc3RzIGF0IHRoYXQgcGF0aCBvciB0aGUgcGF0aCBlc2NhcGVzIHRoZSBidWlsZC1vdXRwdXQgcm9vdC5cbiAgICovXG4gIHJlc29sdmVFeGlzdGluZ1BhZ2U6IChvdXRwdXRSZWxhdGl2ZVBhdGg6IHN0cmluZykgPT4gbnVsbCB8IHN0cmluZztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIGRlZHVwbGljYXRlZCBleHRlcm5hbCBVUkxzIG92ZXIgdGhlIG5ldHdvcmsgdGhyb3VnaCBhIGJvdW5kZWQgY29uY3VycmVuY3kgcG9vbC5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0cyAtIFRoZSB1bmlxdWUgZXh0ZXJuYWwgVVJMIOKGkiByZWZlcmVuY2luZyBwYWdlIG1hcCBmcm9tIHtAbGluayBjb2xsZWN0RXh0ZXJuYWxUYXJnZXRzfS5cbiAqIEBwYXJhbSBmZXRjaFVybFN0YXR1cyAtIEluamVjdGVkIHByb2JlIHJldHVybmluZyB0aGUgSFRUUCBzdGF0dXMgZm9yIGEgVVJMIChgMGAgZm9yIGEgbmV0d29yayBmYWlsdXJlKS5cbiAqIEBwYXJhbSBjb25jdXJyZW5jeSAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbi1mbGlnaHQgcHJvYmVzLlxuICogQHJldHVybnMgRXZlcnkgZXh0ZXJuYWwgVVJMIHRoYXQgZGlkIG5vdCByZXR1cm4gSFRUUCBgMjAwYCwgaW4gdGhlIG1hcCdzIGl0ZXJhdGlvbiBvcmRlci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbGxlY3RCcm9rZW5FeHRlcm5hbExpbmtzKFxuICB0YXJnZXRzOiBNYXA8c3RyaW5nLCBzdHJpbmc+LFxuICBmZXRjaFVybFN0YXR1czogKHVybDogc3RyaW5nKSA9PiBQcm9taXNlPG51bWJlcj4sXG4gIGNvbmN1cnJlbmN5OiBudW1iZXJcbik6IFByb21pc2U8QnJva2VuTGlua1tdPiB7XG4gIGNvbnN0IGVudHJpZXMgPSBbLi4udGFyZ2V0c107XG4gIGNvbnN0IHJlc3VsdHM6IChCcm9rZW5MaW5rIHwgbnVsbClbXSA9IEFycmF5LmZyb20oeyBsZW5ndGg6IGVudHJpZXMubGVuZ3RoIH0sICgpID0+IG51bGwpO1xuICBsZXQgbmV4dEluZGV4ID0gMDtcblxuICBhc3luYyBmdW5jdGlvbiBydW5Xb3JrZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZm9yIChsZXQgaW5kZXggPSBuZXh0SW5kZXgrKzsgaW5kZXggPCBlbnRyaWVzLmxlbmd0aDsgaW5kZXggPSBuZXh0SW5kZXgrKykge1xuICAgICAgY29uc3QgW2V4dGVybmFsVXJsLCBwYWdlVXJsXSA9IGVuc3VyZU5vbk51bGxhYmxlKGVudHJpZXNbaW5kZXhdKTtcbiAgICAgIGNvbnN0IGh0dHBTdGF0dXMgPSBhd2FpdCBmZXRjaFVybFN0YXR1cyhleHRlcm5hbFVybCk7XG4gICAgICBpZiAoaHR0cFN0YXR1cyAhPT0gSFRUUF9PS19TVEFUVVMpIHtcbiAgICAgICAgcmVzdWx0c1tpbmRleF0gPSB7IGh0dHBTdGF0dXMsIHBhZ2VVcmwsIHJlYXNvbjogJ2V4dGVybmFsLWVycm9yJywgdGFyZ2V0VXJsOiBleHRlcm5hbFVybCB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHdvcmtlckNvdW50ID0gTWF0aC5tYXgoMSwgTWF0aC5taW4oY29uY3VycmVuY3ksIGVudHJpZXMubGVuZ3RoKSk7XG4gIGF3YWl0IFByb21pc2UuYWxsKEFycmF5LmZyb20oeyBsZW5ndGg6IHdvcmtlckNvdW50IH0sICgpID0+IHJ1bldvcmtlcigpKSk7XG5cbiAgLy8gSW5kZXhlZCBhc3NpZ25tZW50IGFib3ZlIGtlZXBzIGZhaWx1cmVzIGluIHRoZSBtYXAncyBpdGVyYXRpb24gb3JkZXI7IGRyb3AgdGhlIHN1Y2Nlc3NmdWwgZ2Fwcy5cbiAgcmV0dXJuIHJlc3VsdHMuZmlsdGVyKChicm9rZW5MaW5rKTogYnJva2VuTGluayBpcyBCcm9rZW5MaW5rID0+IGJyb2tlbkxpbmsgIT09IG51bGwpO1xufVxuXG4vKipcbiAqIEZpbmRzIGV2ZXJ5IGludGVybmFsIGxpbmsgYWNyb3NzIHRoZSBidWlsdCBkb2N1bWVudGF0aW9uIHBhZ2VzIHRoYXQgZG9lcyBub3QgcmVzb2x2ZS5cbiAqXG4gKiBFeHRlcm5hbCBhbmQgbm9uLUhUVFAgbGlua3MgYXJlIGlnbm9yZWQuIEVhY2ggaW50ZXJuYWwgbGluayBtdXN0IHJlc29sdmUgdG8gYW4gZXhpc3RpbmcgcGFnZSxcbiAqIGFuZCBlYWNoIGAjZnJhZ21lbnRgIG11c3QgcmVzb2x2ZSB0byBhbiBleGlzdGluZyBlbGVtZW50IGlkIG9uIHRoZSB0YXJnZXQgcGFnZS5cbiAqXG4gKiBAcGFyYW0gcGFnZXMgLSBUaGUgYnVpbHQgZG9jdW1lbnRhdGlvbiBwYWdlcyB0byB2YWxpZGF0ZS5cbiAqIEBwYXJhbSBmaWxlU3lzdGVtIC0gSW5qZWN0ZWQgYWNjZXNzIHRvIHRoZSBidWlsZCBvdXRwdXQuXG4gKiBAcGFyYW0gc2l0ZUJhc2VVcmwgLSBUaGUgYWJzb2x1dGUgYmFzZSBVUkwgdGhlIHNpdGUgaXMgc2VydmVkIGZyb20gKHdpdGggYSB0cmFpbGluZyBzbGFzaCkuXG4gKiBAcmV0dXJucyBFdmVyeSBicm9rZW4gaW50ZXJuYWwgbGluaywgaW4gcGFnZS10aGVuLWRvY3VtZW50IG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdEJyb2tlbkxpbmtzKHBhZ2VzOiBEb2N1bWVudGF0aW9uUGFnZVtdLCBmaWxlU3lzdGVtOiBMaW5rQ2hlY2tGaWxlU3lzdGVtLCBzaXRlQmFzZVVybDogc3RyaW5nKTogQnJva2VuTGlua1tdIHtcbiAgY29uc3QgYnJva2VuTGlua3M6IEJyb2tlbkxpbmtbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgcGFnZSBvZiBwYWdlcykge1xuICAgIGNvbnN0IHBhZ2VVcmwgPSBnZXRQYWdlVXJsKHBhZ2UucmVsYXRpdmVQYXRoLCBzaXRlQmFzZVVybCk7XG4gICAgZm9yIChjb25zdCByYXdMaW5rIG9mIGV4dHJhY3RMaW5rcyhwYWdlLmh0bWwpKSB7XG4gICAgICBjb25zdCB0YXJnZXRVcmwgPSBuZXcgVVJMKHJhd0xpbmssIHBhZ2VVcmwpO1xuICAgICAgaWYgKCFpc0ludGVybmFsRG9jVXJsKHRhcmdldFVybCwgc2l0ZUJhc2VVcmwpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYWdlS2V5ID0gZmlsZVN5c3RlbS5yZXNvbHZlRXhpc3RpbmdQYWdlKGdldE91dHB1dFJlbGF0aXZlUGF0aCh0YXJnZXRVcmwsIHNpdGVCYXNlVXJsKSk7XG4gICAgICBpZiAocGFnZUtleSA9PT0gbnVsbCkge1xuICAgICAgICBicm9rZW5MaW5rcy5wdXNoKHsgcGFnZVVybCwgcmVhc29uOiAnbWlzc2luZy1wYWdlJywgdGFyZ2V0VXJsOiB0YXJnZXRVcmwuaHJlZiB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZyYWdtZW50ID0gdGFyZ2V0VXJsLmhhc2guc2xpY2UoMSk7XG4gICAgICBpZiAoZnJhZ21lbnQubGVuZ3RoID4gMCAmJiAhZmlsZVN5c3RlbS5yZWFkSWRzKHBhZ2VLZXkpLmhhcyhmcmFnbWVudCkpIHtcbiAgICAgICAgYnJva2VuTGlua3MucHVzaCh7IHBhZ2VVcmwsIHJlYXNvbjogJ21pc3NpbmctZnJhZ21lbnQnLCB0YXJnZXRVcmw6IHRhcmdldFVybC5ocmVmIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBicm9rZW5MaW5rcztcbn1cblxuLyoqXG4gKiBDb2xsZWN0cyBldmVyeSB1bmlxdWUgZXh0ZXJuYWwgVVJMIHJlZmVyZW5jZWQgYWNyb3NzIHRoZSBidWlsdCBwYWdlcywgZGVkdXBsaWNhdGVkLlxuICpcbiAqIE9ubHkgSFRUUChTKSBsaW5rcyB0aGF0IGFyZSBub3Qge0BsaW5rIGlzSW50ZXJuYWxEb2NVcmx9IGFyZSByZXR1cm5lZC4gRWFjaCB1bmlxdWUgVVJMIG1hcHMgdG9cbiAqIHRoZSBmaXJzdCBwYWdlIHRoYXQgcmVmZXJlbmNlZCBpdCwgc28gYSBsYXRlciBmYWlsdXJlIGNhbiBiZSByZXBvcnRlZCB3aXRoIGEgY29uY3JldGUgZXhhbXBsZVxuICogcGFnZSBldmVuIHRob3VnaCB0aGUgVVJMIGlzIGZldGNoZWQgb25seSBvbmNlLlxuICpcbiAqIEBwYXJhbSBwYWdlcyAtIFRoZSBidWlsdCBkb2N1bWVudGF0aW9uIHBhZ2VzIHRvIHNjYW4uXG4gKiBAcGFyYW0gc2l0ZUJhc2VVcmwgLSBUaGUgYWJzb2x1dGUgYmFzZSBVUkwgdGhlIHNpdGUgaXMgc2VydmVkIGZyb20gKHdpdGggYSB0cmFpbGluZyBzbGFzaCkuXG4gKiBAcmV0dXJucyBBIG1hcCBmcm9tIGVhY2ggdW5pcXVlIGV4dGVybmFsIFVSTCB0byBvbmUgcmVmZXJlbmNpbmcgcGFnZSBVUkwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0RXh0ZXJuYWxUYXJnZXRzKHBhZ2VzOiBEb2N1bWVudGF0aW9uUGFnZVtdLCBzaXRlQmFzZVVybDogc3RyaW5nKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IHRhcmdldHMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4gIGZvciAoY29uc3QgcGFnZSBvZiBwYWdlcykge1xuICAgIGNvbnN0IHBhZ2VVcmwgPSBnZXRQYWdlVXJsKHBhZ2UucmVsYXRpdmVQYXRoLCBzaXRlQmFzZVVybCk7XG4gICAgZm9yIChjb25zdCByYXdMaW5rIG9mIGV4dHJhY3RMaW5rcyhwYWdlLmh0bWwpKSB7XG4gICAgICBjb25zdCB0YXJnZXRVcmwgPSBuZXcgVVJMKHJhd0xpbmssIHBhZ2VVcmwpO1xuICAgICAgaWYgKCh0YXJnZXRVcmwucHJvdG9jb2wgIT09ICdodHRwOicgJiYgdGFyZ2V0VXJsLnByb3RvY29sICE9PSAnaHR0cHM6JykgfHwgaXNJbnRlcm5hbERvY1VybCh0YXJnZXRVcmwsIHNpdGVCYXNlVXJsKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXh0ZXJuYWxVcmwgPSBgJHt0YXJnZXRVcmwub3JpZ2lufSR7dGFyZ2V0VXJsLnBhdGhuYW1lfSR7dGFyZ2V0VXJsLnNlYXJjaH1gO1xuICAgICAgaWYgKCF0YXJnZXRzLmhhcyhleHRlcm5hbFVybCkpIHtcbiAgICAgICAgdGFyZ2V0cy5zZXQoZXh0ZXJuYWxVcmwsIHBhZ2VVcmwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXRzO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSB2YWx1ZXMgb2YgZXZlcnkgYGlkYCBhdHRyaWJ1dGUgaW4gYSBjaHVuayBvZiBIVE1MLlxuICpcbiAqIEBwYXJhbSBodG1sIC0gVGhlIEhUTUwgdG8gc2Nhbi5cbiAqIEByZXR1cm5zIFRoZSBzZXQgb2YgZWxlbWVudCBpZHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0SWRzKGh0bWw6IHN0cmluZyk6IFNldDxzdHJpbmc+IHtcbiAgcmV0dXJuIG5ldyBTZXQoWy4uLmh0bWwubWF0Y2hBbGwoSURfQVRUUklCVVRFX1JFR0VYKV0ubWFwKChtYXRjaCkgPT4gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3ZhbHVlJykpKTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgdmFsdWVzIG9mIGV2ZXJ5IGBocmVmYC9gc3JjYCBhdHRyaWJ1dGUgaW4gYSBjaHVuayBvZiBIVE1MLlxuICpcbiAqIEBwYXJhbSBodG1sIC0gVGhlIEhUTUwgdG8gc2Nhbi5cbiAqIEByZXR1cm5zIFRoZSByYXcgbGluayB2YWx1ZXMsIGluIGRvY3VtZW50IG9yZGVyIChkdXBsaWNhdGVzIHByZXNlcnZlZCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0TGlua3MoaHRtbDogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gWy4uLmh0bWwubWF0Y2hBbGwoTElOS19BVFRSSUJVVEVfUkVHRVgpXS5tYXAoKG1hdGNoKSA9PiBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAndmFsdWUnKSk7XG59XG5cbi8qKlxuICogRm9ybWF0cyBicm9rZW4gbGlua3MgaW50byBhIGh1bWFuLXJlYWRhYmxlIG11bHRpLWxpbmUgcmVwb3J0LlxuICpcbiAqIEBwYXJhbSBicm9rZW5MaW5rcyAtIFRoZSBicm9rZW4gbGlua3MgdG8gZGVzY3JpYmUuXG4gKiBAcmV0dXJucyBPbmUgbGluZSBwZXIgYnJva2VuIGxpbmsuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRCcm9rZW5MaW5rcyhicm9rZW5MaW5rczogQnJva2VuTGlua1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGJyb2tlbkxpbmtzXG4gICAgLm1hcCgoYnJva2VuTGluaykgPT4ge1xuICAgICAgc3dpdGNoIChicm9rZW5MaW5rLnJlYXNvbikge1xuICAgICAgICBjYXNlICdleHRlcm5hbC1lcnJvcic6IHtcbiAgICAgICAgICByZXR1cm4gYCR7YnJva2VuTGluay5wYWdlVXJsfSBsaW5rcyB0byBleHRlcm5hbCBVUkwgJHticm9rZW5MaW5rLnRhcmdldFVybH0gdGhhdCByZXR1cm5lZCAke2Rlc2NyaWJlSHR0cFN0YXR1cyhicm9rZW5MaW5rLmh0dHBTdGF0dXMpfS5gO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ21pc3NpbmctZnJhZ21lbnQnOiB7XG4gICAgICAgICAgcmV0dXJuIGAke2Jyb2tlbkxpbmsucGFnZVVybH0gbGlua3MgdG8gbWlzc2luZyBmcmFnbWVudCAke2Jyb2tlbkxpbmsudGFyZ2V0VXJsfS5gO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ21pc3NpbmctcGFnZSc6IHtcbiAgICAgICAgICByZXR1cm4gYCR7YnJva2VuTGluay5wYWdlVXJsfSBsaW5rcyB0byBtaXNzaW5nIHBhZ2UgJHticm9rZW5MaW5rLnRhcmdldFVybH0uYDtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgcmV0dXJuIGFzc2VydE5ldmVyKGJyb2tlbkxpbmsucmVhc29uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICAgLmpvaW4oJ1xcbicpO1xufVxuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBidWlsZC1vdXRwdXQtcmVsYXRpdmUgcGF0aCBmb3IgYW4gaW50ZXJuYWwgZG9jdW1lbnRhdGlvbiBVUkwuXG4gKlxuICogQHBhcmFtIHRhcmdldFVybCAtIFRoZSByZXNvbHZlZCBhYnNvbHV0ZSBsaW5rIFVSTCAobXVzdCBiZSB7QGxpbmsgaXNJbnRlcm5hbERvY1VybH0pLlxuICogQHBhcmFtIHNpdGVCYXNlVXJsIC0gVGhlIGFic29sdXRlIGJhc2UgVVJMIHRoZSBzaXRlIGlzIHNlcnZlZCBmcm9tICh3aXRoIGEgdHJhaWxpbmcgc2xhc2gpLlxuICogQHJldHVybnMgVGhlIGRlY29kZWQgcGF0aCByZWxhdGl2ZSB0byB0aGUgYnVpbGQtb3V0cHV0IHJvb3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPdXRwdXRSZWxhdGl2ZVBhdGgodGFyZ2V0VXJsOiBVUkwsIHNpdGVCYXNlVXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBiYXNlID0gbmV3IFVSTChzaXRlQmFzZVVybCk7XG4gIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQodGFyZ2V0VXJsLnBhdGhuYW1lLnNsaWNlKGJhc2UucGF0aG5hbWUubGVuZ3RoKSk7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGFic29sdXRlIFVSTCBhIGJ1aWx0IHBhZ2UgaXMgc2VydmVkIGF0LlxuICpcbiAqIEBwYXJhbSByZWxhdGl2ZVBhdGggLSBUaGUgcGFnZSdzIHBhdGggcmVsYXRpdmUgdG8gdGhlIGJ1aWxkLW91dHB1dCByb290LlxuICogQHBhcmFtIHNpdGVCYXNlVXJsIC0gVGhlIGFic29sdXRlIGJhc2UgVVJMIHRoZSBzaXRlIGlzIHNlcnZlZCBmcm9tICh3aXRoIGEgdHJhaWxpbmcgc2xhc2gpLlxuICogQHJldHVybnMgVGhlIHBhZ2UncyBhYnNvbHV0ZSBVUkwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWdlVXJsKHJlbGF0aXZlUGF0aDogc3RyaW5nLCBzaXRlQmFzZVVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHJlbGF0aXZlUGF0aC5yZXBsYWNlQWxsKCdcXFxcJywgJy8nKTtcbiAgY29uc3QgdXJsUGF0aCA9IG5vcm1hbGl6ZWQgPT09ICdpbmRleC5odG1sJyA/ICcnIDogbm9ybWFsaXplZC5yZXBsYWNlKC9pbmRleFxcLmh0bWwkL3UsICcnKTtcbiAgcmV0dXJuIG5ldyBVUkwodXJsUGF0aCwgc2l0ZUJhc2VVcmwpLmhyZWY7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgcmVzb2x2ZWQgbGluayBwb2ludHMgYXQgYSBwYWdlIGhvc3RlZCBieSB0aGlzIGRvY3VtZW50YXRpb24gc2l0ZS5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0VXJsIC0gVGhlIHJlc29sdmVkIGFic29sdXRlIGxpbmsgVVJMLlxuICogQHBhcmFtIHNpdGVCYXNlVXJsIC0gVGhlIGFic29sdXRlIGJhc2UgVVJMIHRoZSBzaXRlIGlzIHNlcnZlZCBmcm9tICh3aXRoIGEgdHJhaWxpbmcgc2xhc2gpLlxuICogQHJldHVybnMgYHRydWVgIHdoZW4gdGhlIGxpbmsgaXMgc2FtZS1vcmlnaW4gYW5kIHVuZGVyIHRoZSBzaXRlIGJhc2UgcGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW50ZXJuYWxEb2NVcmwodGFyZ2V0VXJsOiBVUkwsIHNpdGVCYXNlVXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgYmFzZSA9IG5ldyBVUkwoc2l0ZUJhc2VVcmwpO1xuICByZXR1cm4gdGFyZ2V0VXJsLm9yaWdpbiA9PT0gYmFzZS5vcmlnaW4gJiYgdGFyZ2V0VXJsLnBhdGhuYW1lLnN0YXJ0c1dpdGgoYmFzZS5wYXRobmFtZSk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgYW4gb3V0cHV0LXJlbGF0aXZlIHBhdGggdG8gYW4gYWJzb2x1dGUgcGF0aCBpbnNpZGUgdGhlIGJ1aWxkLW91dHB1dCByb290LCByZWplY3RpbmdcbiAqIHBhdGhzIHRoYXQgZXNjYXBlIGl0IHZpYSBgLi5gIHNlZ21lbnRzLlxuICpcbiAqIEBwYXJhbSBvdXRwdXRSb290UGF0aCAtIFRoZSBhYnNvbHV0ZSBidWlsZC1vdXRwdXQgcm9vdCBwYXRoLlxuICogQHBhcmFtIG91dHB1dFJlbGF0aXZlUGF0aCAtIFRoZSBkZWNvZGVkIG91dHB1dC1yZWxhdGl2ZSBwYXRoLlxuICogQHJldHVybnMgVGhlIGpvaW5lZCBwYXRoIHdoZW4gaXQgc3RheXMgd2l0aGluIHRoZSByb290LCBvdGhlcndpc2UgYG51bGxgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVdpdGhpblJvb3Qob3V0cHV0Um9vdFBhdGg6IHN0cmluZywgb3V0cHV0UmVsYXRpdmVQYXRoOiBzdHJpbmcpOiBudWxsIHwgc3RyaW5nIHtcbiAgY29uc3Qgcm9vdCA9IG5vcm1hbGl6ZShvdXRwdXRSb290UGF0aC5yZXBsYWNlQWxsKCdcXFxcJywgJy8nKSkucmVwbGFjZSgvXFwvJC91LCAnJyk7XG4gIGxldCBqb2luZWQgPSBub3JtYWxpemUoYCR7cm9vdH0vJHtvdXRwdXRSZWxhdGl2ZVBhdGgucmVwbGFjZUFsbCgnXFxcXCcsICcvJyl9YCk7XG4gIGlmIChqb2luZWQubGVuZ3RoID4gMSkge1xuICAgIGpvaW5lZCA9IGpvaW5lZC5yZXBsYWNlKC9cXC8kL3UsICcnKTtcbiAgfVxuXG4gIHJldHVybiBqb2luZWQgIT09IHJvb3QgJiYgIWpvaW5lZC5zdGFydHNXaXRoKGAke3Jvb3R9L2ApID8gbnVsbCA6IGpvaW5lZDtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVIdHRwU3RhdHVzKGh0dHBTdGF0dXM6IG51bWJlciB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIHJldHVybiBodHRwU3RhdHVzID09PSB1bmRlZmluZWQgfHwgaHR0cFN0YXR1cyA9PT0gTkVUV09SS19GQUlMVVJFX1NUQVRVUyA/ICdhIG5ldHdvcmsgZmFpbHVyZScgOiBgSFRUUCAke1N0cmluZyhodHRwU3RhdHVzKX1gO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWNBLFNBQVMsOEJBQThCO0FBQ3ZDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxpQkFBaUI7QUFFMUIsTUFBTSx1QkFBdUI7QUFDN0IsTUFBTSxxQkFBcUI7QUFDM0IsTUFBTSxpQkFBaUI7QUFNaEIsTUFBTSx5QkFBeUI7QUEwRXRDLGVBQXNCLDJCQUNwQixTQUNBLGdCQUNBLGFBQ3VCO0FBQ3ZCLFFBQU0sVUFBVSxDQUFDLEdBQUcsT0FBTztBQUMzQixRQUFNLFVBQWlDLE1BQU0sS0FBSyxFQUFFLFFBQVEsUUFBUSxPQUFPLEdBQUcsTUFBTSxJQUFJO0FBQ3hGLE1BQUksWUFBWTtBQUVoQixpQkFBZSxZQUEyQjtBQUN4QyxhQUFTLFFBQVEsYUFBYSxRQUFRLFFBQVEsUUFBUSxRQUFRLGFBQWE7QUFDekUsWUFBTSxDQUFDLGFBQWEsT0FBTyxJQUFJLGtCQUFrQixRQUFRLEtBQUssQ0FBQztBQUMvRCxZQUFNLGFBQWEsTUFBTSxlQUFlLFdBQVc7QUFDbkQsVUFBSSxlQUFlLGdCQUFnQjtBQUNqQyxnQkFBUSxLQUFLLElBQUksRUFBRSxZQUFZLFNBQVMsUUFBUSxrQkFBa0IsV0FBVyxZQUFZO0FBQUEsTUFDM0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLFFBQU0sY0FBYyxLQUFLLElBQUksR0FBRyxLQUFLLElBQUksYUFBYSxRQUFRLE1BQU0sQ0FBQztBQUNyRSxRQUFNLFFBQVEsSUFBSSxNQUFNLEtBQUssRUFBRSxRQUFRLFlBQVksR0FBRyxNQUFNLFVBQVUsQ0FBQyxDQUFDO0FBR3hFLFNBQU8sUUFBUSxPQUFPLENBQUMsZUFBeUMsZUFBZSxJQUFJO0FBQ3JGO0FBYU8sU0FBUyxtQkFBbUIsT0FBNEIsWUFBaUMsYUFBbUM7QUFDakksUUFBTSxjQUE0QixDQUFDO0FBRW5DLGFBQVcsUUFBUSxPQUFPO0FBQ3hCLFVBQU0sVUFBVSxXQUFXLEtBQUssY0FBYyxXQUFXO0FBQ3pELGVBQVcsV0FBVyxhQUFhLEtBQUssSUFBSSxHQUFHO0FBQzdDLFlBQU0sWUFBWSxJQUFJLElBQUksU0FBUyxPQUFPO0FBQzFDLFVBQUksQ0FBQyxpQkFBaUIsV0FBVyxXQUFXLEdBQUc7QUFDN0M7QUFBQSxNQUNGO0FBRUEsWUFBTSxVQUFVLFdBQVcsb0JBQW9CLHNCQUFzQixXQUFXLFdBQVcsQ0FBQztBQUM1RixVQUFJLFlBQVksTUFBTTtBQUNwQixvQkFBWSxLQUFLLEVBQUUsU0FBUyxRQUFRLGdCQUFnQixXQUFXLFVBQVUsS0FBSyxDQUFDO0FBQy9FO0FBQUEsTUFDRjtBQUVBLFlBQU0sV0FBVyxVQUFVLEtBQUssTUFBTSxDQUFDO0FBQ3ZDLFVBQUksU0FBUyxTQUFTLEtBQUssQ0FBQyxXQUFXLFFBQVEsT0FBTyxFQUFFLElBQUksUUFBUSxHQUFHO0FBQ3JFLG9CQUFZLEtBQUssRUFBRSxTQUFTLFFBQVEsb0JBQW9CLFdBQVcsVUFBVSxLQUFLLENBQUM7QUFBQSxNQUNyRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUO0FBYU8sU0FBUyx1QkFBdUIsT0FBNEIsYUFBMEM7QUFDM0csUUFBTSxVQUFVLG9CQUFJLElBQW9CO0FBRXhDLGFBQVcsUUFBUSxPQUFPO0FBQ3hCLFVBQU0sVUFBVSxXQUFXLEtBQUssY0FBYyxXQUFXO0FBQ3pELGVBQVcsV0FBVyxhQUFhLEtBQUssSUFBSSxHQUFHO0FBQzdDLFlBQU0sWUFBWSxJQUFJLElBQUksU0FBUyxPQUFPO0FBQzFDLFVBQUssVUFBVSxhQUFhLFdBQVcsVUFBVSxhQUFhLFlBQWEsaUJBQWlCLFdBQVcsV0FBVyxHQUFHO0FBQ25IO0FBQUEsTUFDRjtBQUVBLFlBQU0sY0FBYyxHQUFHLFVBQVUsTUFBTSxHQUFHLFVBQVUsUUFBUSxHQUFHLFVBQVUsTUFBTTtBQUMvRSxVQUFJLENBQUMsUUFBUSxJQUFJLFdBQVcsR0FBRztBQUM3QixnQkFBUSxJQUFJLGFBQWEsT0FBTztBQUFBLE1BQ2xDO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFRTyxTQUFTLFdBQVcsTUFBMkI7QUFDcEQsU0FBTyxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssU0FBUyxrQkFBa0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLHVCQUF1QixPQUFPLE9BQU8sQ0FBQyxDQUFDO0FBQzlHO0FBUU8sU0FBUyxhQUFhLE1BQXdCO0FBQ25ELFNBQU8sQ0FBQyxHQUFHLEtBQUssU0FBUyxvQkFBb0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLHVCQUF1QixPQUFPLE9BQU8sQ0FBQztBQUN2RztBQVFPLFNBQVMsa0JBQWtCLGFBQW1DO0FBQ25FLFNBQU8sWUFDSixJQUFJLENBQUMsZUFBZTtBQUNuQixZQUFRLFdBQVcsUUFBUTtBQUFBLE1BQ3pCLEtBQUssa0JBQWtCO0FBQ3JCLGVBQU8sR0FBRyxXQUFXLE9BQU8sMEJBQTBCLFdBQVcsU0FBUyxrQkFBa0IsbUJBQW1CLFdBQVcsVUFBVSxDQUFDO0FBQUEsTUFDdkk7QUFBQSxNQUNBLEtBQUssb0JBQW9CO0FBQ3ZCLGVBQU8sR0FBRyxXQUFXLE9BQU8sOEJBQThCLFdBQVcsU0FBUztBQUFBLE1BQ2hGO0FBQUEsTUFDQSxLQUFLLGdCQUFnQjtBQUNuQixlQUFPLEdBQUcsV0FBVyxPQUFPLDBCQUEwQixXQUFXLFNBQVM7QUFBQSxNQUM1RTtBQUFBLE1BQ0EsU0FBUztBQUNQLGVBQU8sWUFBWSxXQUFXLE1BQU07QUFBQSxNQUN0QztBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUMsRUFDQSxLQUFLLElBQUk7QUFDZDtBQVNPLFNBQVMsc0JBQXNCLFdBQWdCLGFBQTZCO0FBQ2pGLFFBQU0sT0FBTyxJQUFJLElBQUksV0FBVztBQUNoQyxTQUFPLG1CQUFtQixVQUFVLFNBQVMsTUFBTSxLQUFLLFNBQVMsTUFBTSxDQUFDO0FBQzFFO0FBU08sU0FBUyxXQUFXLGNBQXNCLGFBQTZCO0FBQzVFLFFBQU0sYUFBYSxhQUFhLFdBQVcsTUFBTSxHQUFHO0FBQ3BELFFBQU0sVUFBVSxlQUFlLGVBQWUsS0FBSyxXQUFXLFFBQVEsaUJBQWlCLEVBQUU7QUFDekYsU0FBTyxJQUFJLElBQUksU0FBUyxXQUFXLEVBQUU7QUFDdkM7QUFTTyxTQUFTLGlCQUFpQixXQUFnQixhQUE4QjtBQUM3RSxRQUFNLE9BQU8sSUFBSSxJQUFJLFdBQVc7QUFDaEMsU0FBTyxVQUFVLFdBQVcsS0FBSyxVQUFVLFVBQVUsU0FBUyxXQUFXLEtBQUssUUFBUTtBQUN4RjtBQVVPLFNBQVMsa0JBQWtCLGdCQUF3QixvQkFBMkM7QUFDbkcsUUFBTSxPQUFPLFVBQVUsZUFBZSxXQUFXLE1BQU0sR0FBRyxDQUFDLEVBQUUsUUFBUSxRQUFRLEVBQUU7QUFDL0UsTUFBSSxTQUFTLFVBQVUsR0FBRyxJQUFJLElBQUksbUJBQW1CLFdBQVcsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUM1RSxNQUFJLE9BQU8sU0FBUyxHQUFHO0FBQ3JCLGFBQVMsT0FBTyxRQUFRLFFBQVEsRUFBRTtBQUFBLEVBQ3BDO0FBRUEsU0FBTyxXQUFXLFFBQVEsQ0FBQyxPQUFPLFdBQVcsR0FBRyxJQUFJLEdBQUcsSUFBSSxPQUFPO0FBQ3BFO0FBRUEsU0FBUyxtQkFBbUIsWUFBd0M7QUFDbEUsU0FBTyxlQUFlLFVBQWEsZUFBZSx5QkFBeUIsc0JBQXNCLFFBQVEsT0FBTyxVQUFVLENBQUM7QUFDN0g7IiwibmFtZXMiOltdfQ==
|
|
238
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvbGluay1jaGVjay50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVmFsaWRhdGlvbiBvZiB0aGUgbGlua3MgZW1pdHRlZCBieSB0aGUgYnVpbHQgZG9jdW1lbnRhdGlvbiBIVE1MLlxuICpcbiAqIEludGVybmFsIChzYW1lLXNpdGUpIGxpbmtzIGFyZSB2YWxpZGF0ZWQgb2ZmbGluZTogZXZlcnkgYGhyZWZgL2BzcmNgIG11c3QgcmVzb2x2ZSB0byBhIHJlYWxcbiAqIGZpbGUgaW4gdGhlIGJ1aWxkIG91dHB1dCwgYW5kIGV2ZXJ5IGAjZnJhZ21lbnRgIG11c3QgcmVzb2x2ZSB0byBhIHJlYWwgZWxlbWVudCBpZCBvbiB0aGVcbiAqIHRhcmdldCBwYWdlLlxuICpcbiAqIEV4dGVybmFsIGxpbmtzIGNhbiBvbmx5IGJlIHZhbGlkYXRlZCBvdmVyIHRoZSBuZXR3b3JrLCBzbyB0aG9zZSByZXF1ZXN0cyBhcmUgaGVhdmlseVxuICogZGVkdXBsaWNhdGVkIOKAlCBlYWNoIHVuaXF1ZSBleHRlcm5hbCBVUkwgaXMgZmV0Y2hlZCBhdCBtb3N0IG9uY2UgcmVnYXJkbGVzcyBvZiBob3cgbWFueSBvZiB0aGVcbiAqIHRob3VzYW5kcyBvZiBnZW5lcmF0ZWQgcGFnZXMgcmVmZXJlbmNlIGl0IOKAlCBhbmQgcnVuIHRocm91Z2ggYSBib3VuZGVkIGNvbmN1cnJlbmN5IHBvb2wuXG4gKi9cblxuaW1wb3J0IHsgZ2V0TWFuZGF0b3J5TmFtZWRHcm91cCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9yZWctZXhwJztcbmltcG9ydCB7XG4gIGFzc2VydE5ldmVyLFxuICBlbnN1cmVOb25OdWxsYWJsZVxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHsgbm9ybWFsaXplIH0gZnJvbSAnbm9kZTpwYXRoL3Bvc2l4JztcblxuY29uc3QgTElOS19BVFRSSUJVVEVfUkVHRVggPSAvXFxiKD86aHJlZnxzcmMpPSg/PHF1b3RlPlsnXCJdKSg/PHZhbHVlPi4qPylcXGs8cXVvdGU+L2dpdTtcbmNvbnN0IElEX0FUVFJJQlVURV9SRUdFWCA9IC9cXGJpZD0oPzxxdW90ZT5bJ1wiXSkoPzx2YWx1ZT4uKj8pXFxrPHF1b3RlPi9naXU7XG5jb25zdCBIVFRQX09LX1NUQVRVUyA9IDIwMDtcblxuLyoqXG4gKiBUaGUge0BsaW5rIEJyb2tlbkxpbmsuaHR0cFN0YXR1c30gc2VudGluZWwgZm9yIGEgbmV0d29yay1sZXZlbCBmYWlsdXJlICh0aW1lb3V0LCBETlMsXG4gKiBjb25uZWN0aW9uIHJlZnVzZWQpIHdoZXJlIG5vIEhUVFAgcmVzcG9uc2Ugd2FzIHJlY2VpdmVkLlxuICovXG5leHBvcnQgY29uc3QgTkVUV09SS19GQUlMVVJFX1NUQVRVUyA9IDA7XG5cbi8qKlxuICogQSBzaW5nbGUgbGluayB0aGF0IGRvZXMgbm90IHJlc29sdmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnJva2VuTGluayB7XG4gIC8qKlxuICAgKiBUaGUgSFRUUCBzdGF0dXMgcmV0dXJuZWQgYnkgYW4gZXh0ZXJuYWwgbGluaywgd2hlbiB7QGxpbmsgQnJva2VuTGluay5yZWFzb259IGlzXG4gICAqIGBleHRlcm5hbC1lcnJvcmAuIGAwYCBkZW5vdGVzIGEgbmV0d29yay1sZXZlbCBmYWlsdXJlICh0aW1lb3V0LCBETlMsIGNvbm5lY3Rpb24gcmVmdXNlZCkuXG4gICAqL1xuICBodHRwU3RhdHVzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgYWJzb2x1dGUgVVJMIG9mIHRoZSBwYWdlIHRoYXQgY29udGFpbnMgdGhlIGJyb2tlbiBsaW5rLlxuICAgKi9cbiAgcGFnZVVybDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaHkgdGhlIGxpbmsgaXMgY29uc2lkZXJlZCBicm9rZW4uXG4gICAqL1xuICByZWFzb246ICdleHRlcm5hbC1lcnJvcicgfCAnbWlzc2luZy1mcmFnbWVudCcgfCAnbWlzc2luZy1wYWdlJztcblxuICAvKipcbiAgICogVGhlIHJlc29sdmVkIGFic29sdXRlIFVSTCB0aGUgbGluayBwb2ludHMgYXQuXG4gICAqL1xuICB0YXJnZXRVcmw6IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgY29sbGVjdEJyb2tlbkV4dGVybmFsTGlua3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3RCcm9rZW5FeHRlcm5hbExpbmtzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgaW4tZmxpZ2h0IHByb2JlcyBhZ2FpbnN0IG9uZSBob3N0LiBEZWZhdWx0cyB0byB7QGxpbmsgREVGQVVMVF9FWFRFUk5BTF9MSU5LX1BFUl9IT1NUX0NPTkNVUlJFTkNZfS5cbiAgICovXG4gIHJlYWRvbmx5IHBlckhvc3RDb25jdXJyZW5jeT86IG51bWJlcjtcblxuICAvKipcbiAgICogSG93IGEgdHJhbnNpZW50IGZhaWx1cmUgaXMgcmV0cmllZC5cbiAgICovXG4gIHJlYWRvbmx5IHJldHJ5PzogRXh0ZXJuYWxMaW5rUmV0cnlPcHRpb25zO1xufVxuXG4vKipcbiAqIEEgc2luZ2xlIGJ1aWx0IGRvY3VtZW50YXRpb24gcGFnZSB0byB2YWxpZGF0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEb2N1bWVudGF0aW9uUGFnZSB7XG4gIC8qKlxuICAgKiBUaGUgcGFnZSdzIHJlbmRlcmVkIEhUTUwuXG4gICAqL1xuICBodG1sOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwYWdlJ3MgcGF0aCByZWxhdGl2ZSB0byB0aGUgYnVpbGQtb3V0cHV0IHJvb3QsIGUuZy4gYGFwaS9mb28vaW5kZXguaHRtbGAuXG4gICAqL1xuICByZWxhdGl2ZVBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBXaGF0IG9uZSBwcm9iZSBvZiBhbiBleHRlcm5hbCBVUkwgbGVhcm5lZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHRlcm5hbExpbmtQcm9iZVJlc3VsdCB7XG4gIC8qKlxuICAgKiBIb3cgbG9uZyB0aGUgc2VydmVyIGFza2VkIHRoZSBjbGllbnQgdG8gd2FpdCBiZWZvcmUgYXNraW5nIGFnYWluIChpdHMgYFJldHJ5LUFmdGVyYCBoZWFkZXIpLCB3aGVuIGl0IHNhaWQuXG4gICAqL1xuICByZWFkb25seSByZXRyeUFmdGVySW5NaWxsaXNlY29uZHM/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBIVFRQIHN0YXR1cywgb3Ige0BsaW5rIE5FVFdPUktfRkFJTFVSRV9TVEFUVVN9IHdoZW4gbm8gcmVzcG9uc2Ugd2FzIHJlY2VpdmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzOiBudW1iZXI7XG59XG5cbi8qKlxuICogSG93IHtAbGluayBjb2xsZWN0QnJva2VuRXh0ZXJuYWxMaW5rc30gcmV0cmllcyBhIHRyYW5zaWVudCBmYWlsdXJlOiBhIG5ldHdvcmsgZmFpbHVyZSwgYW4gSFRUUCBgNDI5YCBvciBhbiBIVFRQIGA1eHhgLlxuICpcbiAqIEVhY2ggd2FpdCBkb3VibGVzIGZyb20ge0BsaW5rIEV4dGVybmFsTGlua1JldHJ5T3B0aW9ucy5pbml0aWFsRGVsYXlJbk1pbGxpc2Vjb25kc30gdXAgdG9cbiAqIHtAbGluayBFeHRlcm5hbExpbmtSZXRyeU9wdGlvbnMubWF4RGVsYXlJbk1pbGxpc2Vjb25kc30sIGlzIGppdHRlcmVkIGludG8gaXRzIHVwcGVyIGhhbGYsIGFuZCBpcyBuZXZlciBzaG9ydGVyIHRoYW4gdGhlXG4gKiBzZXJ2ZXIncyBgUmV0cnktQWZ0ZXJgLiBUaGUgd2FpdHMgb2Ygb25lIFVSTCBuZXZlciBhZGQgdXAgdG8gbW9yZSB0aGFuXG4gKiB7QGxpbmsgRXh0ZXJuYWxMaW5rUmV0cnlPcHRpb25zLnRvdGFsQnVkZ2V0SW5NaWxsaXNlY29uZHN9OyB0aGUgc3RhdHVzIG9mIHRoZSBsYXN0IGF0dGVtcHQgaXMgZmluYWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZXJuYWxMaW5rUmV0cnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBmaXJzdCB3YWl0LiBEZWZhdWx0cyB0byB7QGxpbmsgREVGQVVMVF9FWFRFUk5BTF9MSU5LX1JFVFJZX0lOSVRJQUxfREVMQVlfSU5fTUlMTElTRUNPTkRTfS5cbiAgICovXG4gIHJlYWRvbmx5IGluaXRpYWxEZWxheUluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9uZ2VzdCBzaW5nbGUgd2FpdCB0aGUgYmFja29mZiBncm93cyB0by4gRGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfRVhURVJOQUxfTElOS19SRVRSWV9NQVhfREVMQVlfSU5fTUlMTElTRUNPTkRTfS5cbiAgICovXG4gIHJlYWRvbmx5IG1heERlbGF5SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBudW1iZXIgaW4gYFswLCAxKWAgZm9yIHRoZSBqaXR0ZXIuIERlZmF1bHRzIHRvIGBNYXRoLnJhbmRvbWAuXG4gICAqL1xuICByZWFkb25seSByYW5kb20/OiAoKSA9PiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdhaXRzIHRoZSBnaXZlbiB0aW1lLiBEZWZhdWx0cyB0byBhIGBzZXRUaW1lb3V0YC5cbiAgICovXG4gIHJlYWRvbmx5IHNsZWVwPzogKG1pbGxpc2Vjb25kczogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgbW9zdCBvbmUgVVJMIG1heSBzcGVuZCB3YWl0aW5nIGJldHdlZW4gaXRzIGF0dGVtcHRzLiBEZWZhdWx0cyB0b1xuICAgKiB7QGxpbmsgREVGQVVMVF9FWFRFUk5BTF9MSU5LX1JFVFJZX1RPVEFMX0JVREdFVF9JTl9NSUxMSVNFQ09ORFN9LlxuICAgKi9cbiAgcmVhZG9ubHkgdG90YWxCdWRnZXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBGaWxlc3lzdGVtIGFjY2VzcyB0aGUgbGluayBjaGVja2VyIG5lZWRzLCBpbmplY3RlZCBzbyB0aGUgcHVyZSBkZWNpc2lvbiBsb2dpYyBjYW4gYmUgdGVzdGVkXG4gKiBhZ2FpbnN0IGFuIGluLW1lbW9yeSBzdHViIGluc3RlYWQgb2YgYSByZWFsIGJ1aWxkIG91dHB1dC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaW5rQ2hlY2tGaWxlU3lzdGVtIHtcbiAgLyoqXG4gICAqIFJlYWRzIHRoZSBlbGVtZW50IGlkcyBwcmVzZW50IG9uIGFuIGFscmVhZHktcmVzb2x2ZWQgcGFnZS5cbiAgICpcbiAgICogQHBhcmFtIHBhZ2VLZXkgLSBUaGUga2V5IHJldHVybmVkIGJ5IHtAbGluayBMaW5rQ2hlY2tGaWxlU3lzdGVtLnJlc29sdmVFeGlzdGluZ1BhZ2V9LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0IG9mIGVsZW1lbnQgaWRzIG9uIHRoYXQgcGFnZS5cbiAgICovXG4gIHJlYWRJZHM6IChwYWdlS2V5OiBzdHJpbmcpID0+IFNldDxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhbiBvdXRwdXQtcmVsYXRpdmUgcGF0aCB0byBhbiBleGlzdGluZyBwYWdlLlxuICAgKlxuICAgKiBAcGFyYW0gb3V0cHV0UmVsYXRpdmVQYXRoIC0gVGhlIGRlY29kZWQgcGF0aCByZWxhdGl2ZSB0byB0aGUgYnVpbGQtb3V0cHV0IHJvb3QuXG4gICAqIEByZXR1cm5zIEEgc3RhYmxlIGtleSAoZS5nLiB0aGUgcmVzb2x2ZWQgYWJzb2x1dGUgZmlsZSBwYXRoKSBmb3IgdGhlIGV4aXN0aW5nIHBhZ2UsIG9yXG4gICAqICAgYG51bGxgIHdoZW4gbm90aGluZyBleGlzdHMgYXQgdGhhdCBwYXRoIG9yIHRoZSBwYXRoIGVzY2FwZXMgdGhlIGJ1aWxkLW91dHB1dCByb290LlxuICAgKi9cbiAgcmVzb2x2ZUV4aXN0aW5nUGFnZTogKG91dHB1dFJlbGF0aXZlUGF0aDogc3RyaW5nKSA9PiBudWxsIHwgc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHtAbGluayBDb2xsZWN0QnJva2VuRXh0ZXJuYWxMaW5rc09wdGlvbnMucGVySG9zdENvbmN1cnJlbmN5fS4gQSBkb2N1bWVudGF0aW9uIHNpdGUgbGlua3MgdGhvdXNhbmRzIG9mXG4gKiBwYWdlcyBvZiBpdHMgc2libGluZyBzaXRlcywgYWxsIG9uIG9uZSBob3N0LCBhbmQgR2l0SHViIFBhZ2VzIGFuc3dlcnMgYSBidXJzdCBvZiB0aGVtIHdpdGggYSBgNTAzYC5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRVhURVJOQUxfTElOS19QRVJfSE9TVF9DT05DVVJSRU5DWSA9IDg7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQge0BsaW5rIEV4dGVybmFsTGlua1JldHJ5T3B0aW9ucy5pbml0aWFsRGVsYXlJbk1pbGxpc2Vjb25kc30uXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VYVEVSTkFMX0xJTktfUkVUUllfSU5JVElBTF9ERUxBWV9JTl9NSUxMSVNFQ09ORFMgPSAxMDAwO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHtAbGluayBFeHRlcm5hbExpbmtSZXRyeU9wdGlvbnMubWF4RGVsYXlJbk1pbGxpc2Vjb25kc30uXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VYVEVSTkFMX0xJTktfUkVUUllfTUFYX0RFTEFZX0lOX01JTExJU0VDT05EUyA9IDE2XzAwMDtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCB7QGxpbmsgRXh0ZXJuYWxMaW5rUmV0cnlPcHRpb25zLnRvdGFsQnVkZ2V0SW5NaWxsaXNlY29uZHN9LlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9FWFRFUk5BTF9MSU5LX1JFVFJZX1RPVEFMX0JVREdFVF9JTl9NSUxMSVNFQ09ORFMgPSA0NV8wMDA7XG5cbmNvbnN0IEhUVFBfVE9PX01BTllfUkVRVUVTVFNfU1RBVFVTID0gNDI5O1xuY29uc3QgSFRUUF9TRVJWRVJfRVJST1JfTUlOX1NUQVRVUyA9IDUwMDtcbmNvbnN0IE1JTExJU0VDT05EU19QRVJfU0VDT05EID0gMTAwMDtcbmNvbnN0IEpJVFRFUl9GTE9PUiA9IDAuNTtcbmNvbnN0IEJBQ0tPRkZfRkFDVE9SID0gMjtcblxuaW50ZXJmYWNlIFBlbmRpbmdQcm9iZSB7XG4gIHJlYWRvbmx5IGhvc3Q6IHN0cmluZztcbiAgcmVhZG9ubHkgaW5kZXg6IG51bWJlcjtcbiAgcmVhZG9ubHkgcGFnZVVybDogc3RyaW5nO1xuICByZWFkb25seSB1cmw6IHN0cmluZztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIGRlZHVwbGljYXRlZCBleHRlcm5hbCBVUkxzIG92ZXIgdGhlIG5ldHdvcmsgdGhyb3VnaCBhIGJvdW5kZWQgY29uY3VycmVuY3kgcG9vbC5cbiAqXG4gKiBBIG5ldHdvcmsgZmFpbHVyZSwgYW4gSFRUUCBgNDI5YCBhbmQgYW4gSFRUUCBgNXh4YCBhcmUgcmV0cmllZCB3aXRoIGFuIGV4cG9uZW50aWFsLCBqaXR0ZXJlZCBiYWNrb2ZmIHRoYXQgaG9ub3JzXG4gKiBgUmV0cnktQWZ0ZXJgIChzZWUge0BsaW5rIEV4dGVybmFsTGlua1JldHJ5T3B0aW9uc30pOyBhbnkgb3RoZXIgc3RhdHVzLCBhIGA0MDRgIGluY2x1ZGVkLCBpcyBmaW5hbCBhdCBvbmNlLiBQcm9iZXMgb2ZcbiAqIG9uZSBob3N0IGFyZSBhbHNvIGNhcHBlZCBhdCB7QGxpbmsgQ29sbGVjdEJyb2tlbkV4dGVybmFsTGlua3NPcHRpb25zLnBlckhvc3RDb25jdXJyZW5jeX0sIGFuZCBhIHByb2JlIG9mIGFub3RoZXIgaG9zdFxuICogaXMgc3RhcnRlZCB3aGlsZSBvbmUgaG9zdCBpcyBhdCBpdHMgY2FwLlxuICpcbiAqIEBwYXJhbSB0YXJnZXRzIC0gVGhlIHVuaXF1ZSBleHRlcm5hbCBVUkwg4oaSIHJlZmVyZW5jaW5nIHBhZ2UgbWFwIGZyb20ge0BsaW5rIGNvbGxlY3RFeHRlcm5hbFRhcmdldHN9LlxuICogQHBhcmFtIGZldGNoVXJsU3RhdHVzIC0gSW5qZWN0ZWQgcHJvYmUgcmV0dXJuaW5nIHRoZSBIVFRQIHN0YXR1cyBmb3IgYSBVUkwgKGAwYCBmb3IgYSBuZXR3b3JrIGZhaWx1cmUpLCBvciBhblxuICogICB7QGxpbmsgRXh0ZXJuYWxMaW5rUHJvYmVSZXN1bHR9IHRoYXQgYWxzbyBjYXJyaWVzIHRoZSBzZXJ2ZXIncyBgUmV0cnktQWZ0ZXJgLlxuICogQHBhcmFtIGNvbmN1cnJlbmN5IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGluLWZsaWdodCBwcm9iZXMuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwZXItaG9zdCBjYXAgYW5kIHRoZSByZXRyeSBwb2xpY3kuXG4gKiBAcmV0dXJucyBFdmVyeSBleHRlcm5hbCBVUkwgdGhhdCBkaWQgbm90IHJldHVybiBIVFRQIGAyMDBgLCBpbiB0aGUgbWFwJ3MgaXRlcmF0aW9uIG9yZGVyLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29sbGVjdEJyb2tlbkV4dGVybmFsTGlua3MoXG4gIHRhcmdldHM6IE1hcDxzdHJpbmcsIHN0cmluZz4sXG4gIGZldGNoVXJsU3RhdHVzOiAodXJsOiBzdHJpbmcpID0+IFByb21pc2U8RXh0ZXJuYWxMaW5rUHJvYmVSZXN1bHQgfCBudW1iZXI+LFxuICBjb25jdXJyZW5jeTogbnVtYmVyLFxuICBvcHRpb25zOiBDb2xsZWN0QnJva2VuRXh0ZXJuYWxMaW5rc09wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxCcm9rZW5MaW5rW10+IHtcbiAgY29uc3QgcGVySG9zdENvbmN1cnJlbmN5ID0gTWF0aC5tYXgoMSwgb3B0aW9ucy5wZXJIb3N0Q29uY3VycmVuY3kgPz8gREVGQVVMVF9FWFRFUk5BTF9MSU5LX1BFUl9IT1NUX0NPTkNVUlJFTkNZKTtcbiAgY29uc3QgcGVuZGluZzogUGVuZGluZ1Byb2JlW10gPSBbLi4udGFyZ2V0c10ubWFwKChbdXJsLCBwYWdlVXJsXSwgaW5kZXgpID0+ICh7IGhvc3Q6IG5ldyBVUkwodXJsKS5ob3N0LCBpbmRleCwgcGFnZVVybCwgdXJsIH0pKTtcbiAgY29uc3QgcmVzdWx0czogKEJyb2tlbkxpbmsgfCBudWxsKVtdID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogcGVuZGluZy5sZW5ndGggfSwgKCkgPT4gbnVsbCk7XG4gIGNvbnN0IGluRmxpZ2h0QnlIb3N0ID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgY29uc3Qgd2FpdGVyczogKCgpID0+IHZvaWQpW10gPSBbXTtcblxuICBhc3luYyBmdW5jdGlvbiBydW5Xb3JrZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2hpbGUgKHBlbmRpbmcubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcG9zaXRpb24gPSBwZW5kaW5nLmZpbmRJbmRleCgocHJvYmUpID0+IChpbkZsaWdodEJ5SG9zdC5nZXQocHJvYmUuaG9zdCkgPz8gMCkgPCBwZXJIb3N0Q29uY3VycmVuY3kpO1xuICAgICAgaWYgKHBvc2l0aW9uID09PSAtMSkge1xuICAgICAgICAvLyBFdmVyeSBwZW5kaW5nIFVSTCBpcyBvbiBhIGhvc3QgYXQgaXRzIGNhcCwgc28gYSBwcm9iZSBpcyBpbiBmbGlnaHQgdGhlcmUgYW5kIHdha2VzIHRoaXMgd29ya2VyIHdoZW4gaXQgZW5kcy5cbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmVQcm9taXNlKSA9PiB7XG4gICAgICAgICAgd2FpdGVycy5wdXNoKHJlc29sdmVQcm9taXNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBbcHJvYmVdID0gcGVuZGluZy5zcGxpY2UocG9zaXRpb24sIDEpO1xuICAgICAgY29uc3QgeyBob3N0LCBpbmRleCwgcGFnZVVybCwgdXJsIH0gPSBlbnN1cmVOb25OdWxsYWJsZShwcm9iZSk7XG4gICAgICBpbkZsaWdodEJ5SG9zdC5zZXQoaG9zdCwgKGluRmxpZ2h0QnlIb3N0LmdldChob3N0KSA/PyAwKSArIDEpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaHR0cFN0YXR1cyA9IGF3YWl0IHByb2JlV2l0aFJldHJ5KHVybCwgZmV0Y2hVcmxTdGF0dXMsIG9wdGlvbnMucmV0cnkgPz8ge30pO1xuICAgICAgICBpZiAoaHR0cFN0YXR1cyAhPT0gSFRUUF9PS19TVEFUVVMpIHtcbiAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHsgaHR0cFN0YXR1cywgcGFnZVVybCwgcmVhc29uOiAnZXh0ZXJuYWwtZXJyb3InLCB0YXJnZXRVcmw6IHVybCB9O1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpbkZsaWdodEJ5SG9zdC5zZXQoaG9zdCwgZW5zdXJlTm9uTnVsbGFibGUoaW5GbGlnaHRCeUhvc3QuZ2V0KGhvc3QpKSAtIDEpO1xuICAgICAgICBmb3IgKGNvbnN0IHdha2Ugb2Ygd2FpdGVycy5zcGxpY2UoMCkpIHtcbiAgICAgICAgICB3YWtlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCB3b3JrZXJDb3VudCA9IE1hdGgubWF4KDEsIE1hdGgubWluKGNvbmN1cnJlbmN5LCBwZW5kaW5nLmxlbmd0aCkpO1xuICBhd2FpdCBQcm9taXNlLmFsbChBcnJheS5mcm9tKHsgbGVuZ3RoOiB3b3JrZXJDb3VudCB9LCAoKSA9PiBydW5Xb3JrZXIoKSkpO1xuXG4gIC8vIEluZGV4ZWQgYXNzaWdubWVudCBhYm92ZSBrZWVwcyBmYWlsdXJlcyBpbiB0aGUgbWFwJ3MgaXRlcmF0aW9uIG9yZGVyOyBkcm9wIHRoZSBzdWNjZXNzZnVsIGdhcHMuXG4gIHJldHVybiByZXN1bHRzLmZpbHRlcigoYnJva2VuTGluayk6IGJyb2tlbkxpbmsgaXMgQnJva2VuTGluayA9PiBicm9rZW5MaW5rICE9PSBudWxsKTtcbn1cblxuLyoqXG4gKiBGaW5kcyBldmVyeSBpbnRlcm5hbCBsaW5rIGFjcm9zcyB0aGUgYnVpbHQgZG9jdW1lbnRhdGlvbiBwYWdlcyB0aGF0IGRvZXMgbm90IHJlc29sdmUuXG4gKlxuICogRXh0ZXJuYWwgYW5kIG5vbi1IVFRQIGxpbmtzIGFyZSBpZ25vcmVkLiBFYWNoIGludGVybmFsIGxpbmsgbXVzdCByZXNvbHZlIHRvIGFuIGV4aXN0aW5nIHBhZ2UsXG4gKiBhbmQgZWFjaCBgI2ZyYWdtZW50YCBtdXN0IHJlc29sdmUgdG8gYW4gZXhpc3RpbmcgZWxlbWVudCBpZCBvbiB0aGUgdGFyZ2V0IHBhZ2UuXG4gKlxuICogQHBhcmFtIHBhZ2VzIC0gVGhlIGJ1aWx0IGRvY3VtZW50YXRpb24gcGFnZXMgdG8gdmFsaWRhdGUuXG4gKiBAcGFyYW0gZmlsZVN5c3RlbSAtIEluamVjdGVkIGFjY2VzcyB0byB0aGUgYnVpbGQgb3V0cHV0LlxuICogQHBhcmFtIHNpdGVCYXNlVXJsIC0gVGhlIGFic29sdXRlIGJhc2UgVVJMIHRoZSBzaXRlIGlzIHNlcnZlZCBmcm9tICh3aXRoIGEgdHJhaWxpbmcgc2xhc2gpLlxuICogQHJldHVybnMgRXZlcnkgYnJva2VuIGludGVybmFsIGxpbmssIGluIHBhZ2UtdGhlbi1kb2N1bWVudCBvcmRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RCcm9rZW5MaW5rcyhwYWdlczogRG9jdW1lbnRhdGlvblBhZ2VbXSwgZmlsZVN5c3RlbTogTGlua0NoZWNrRmlsZVN5c3RlbSwgc2l0ZUJhc2VVcmw6IHN0cmluZyk6IEJyb2tlbkxpbmtbXSB7XG4gIGNvbnN0IGJyb2tlbkxpbmtzOiBCcm9rZW5MaW5rW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IHBhZ2Ugb2YgcGFnZXMpIHtcbiAgICBjb25zdCBwYWdlVXJsID0gZ2V0UGFnZVVybChwYWdlLnJlbGF0aXZlUGF0aCwgc2l0ZUJhc2VVcmwpO1xuICAgIGZvciAoY29uc3QgcmF3TGluayBvZiBleHRyYWN0TGlua3MocGFnZS5odG1sKSkge1xuICAgICAgY29uc3QgdGFyZ2V0VXJsID0gbmV3IFVSTChyYXdMaW5rLCBwYWdlVXJsKTtcbiAgICAgIGlmICghaXNJbnRlcm5hbERvY1VybCh0YXJnZXRVcmwsIHNpdGVCYXNlVXJsKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFnZUtleSA9IGZpbGVTeXN0ZW0ucmVzb2x2ZUV4aXN0aW5nUGFnZShnZXRPdXRwdXRSZWxhdGl2ZVBhdGgodGFyZ2V0VXJsLCBzaXRlQmFzZVVybCkpO1xuICAgICAgaWYgKHBhZ2VLZXkgPT09IG51bGwpIHtcbiAgICAgICAgYnJva2VuTGlua3MucHVzaCh7IHBhZ2VVcmwsIHJlYXNvbjogJ21pc3NpbmctcGFnZScsIHRhcmdldFVybDogdGFyZ2V0VXJsLmhyZWYgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmcmFnbWVudCA9IHRhcmdldFVybC5oYXNoLnNsaWNlKDEpO1xuICAgICAgaWYgKGZyYWdtZW50Lmxlbmd0aCA+IDAgJiYgIWZpbGVTeXN0ZW0ucmVhZElkcyhwYWdlS2V5KS5oYXMoZnJhZ21lbnQpKSB7XG4gICAgICAgIGJyb2tlbkxpbmtzLnB1c2goeyBwYWdlVXJsLCByZWFzb246ICdtaXNzaW5nLWZyYWdtZW50JywgdGFyZ2V0VXJsOiB0YXJnZXRVcmwuaHJlZiB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnJva2VuTGlua3M7XG59XG5cbi8qKlxuICogQ29sbGVjdHMgZXZlcnkgdW5pcXVlIGV4dGVybmFsIFVSTCByZWZlcmVuY2VkIGFjcm9zcyB0aGUgYnVpbHQgcGFnZXMsIGRlZHVwbGljYXRlZC5cbiAqXG4gKiBPbmx5IEhUVFAoUykgbGlua3MgdGhhdCBhcmUgbm90IHtAbGluayBpc0ludGVybmFsRG9jVXJsfSBhcmUgcmV0dXJuZWQuIEVhY2ggdW5pcXVlIFVSTCBtYXBzIHRvXG4gKiB0aGUgZmlyc3QgcGFnZSB0aGF0IHJlZmVyZW5jZWQgaXQsIHNvIGEgbGF0ZXIgZmFpbHVyZSBjYW4gYmUgcmVwb3J0ZWQgd2l0aCBhIGNvbmNyZXRlIGV4YW1wbGVcbiAqIHBhZ2UgZXZlbiB0aG91Z2ggdGhlIFVSTCBpcyBmZXRjaGVkIG9ubHkgb25jZS5cbiAqXG4gKiBAcGFyYW0gcGFnZXMgLSBUaGUgYnVpbHQgZG9jdW1lbnRhdGlvbiBwYWdlcyB0byBzY2FuLlxuICogQHBhcmFtIHNpdGVCYXNlVXJsIC0gVGhlIGFic29sdXRlIGJhc2UgVVJMIHRoZSBzaXRlIGlzIHNlcnZlZCBmcm9tICh3aXRoIGEgdHJhaWxpbmcgc2xhc2gpLlxuICogQHJldHVybnMgQSBtYXAgZnJvbSBlYWNoIHVuaXF1ZSBleHRlcm5hbCBVUkwgdG8gb25lIHJlZmVyZW5jaW5nIHBhZ2UgVVJMLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdEV4dGVybmFsVGFyZ2V0cyhwYWdlczogRG9jdW1lbnRhdGlvblBhZ2VbXSwgc2l0ZUJhc2VVcmw6IHN0cmluZyk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCB0YXJnZXRzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblxuICBmb3IgKGNvbnN0IHBhZ2Ugb2YgcGFnZXMpIHtcbiAgICBjb25zdCBwYWdlVXJsID0gZ2V0UGFnZVVybChwYWdlLnJlbGF0aXZlUGF0aCwgc2l0ZUJhc2VVcmwpO1xuICAgIGZvciAoY29uc3QgcmF3TGluayBvZiBleHRyYWN0TGlua3MocGFnZS5odG1sKSkge1xuICAgICAgY29uc3QgdGFyZ2V0VXJsID0gbmV3IFVSTChyYXdMaW5rLCBwYWdlVXJsKTtcbiAgICAgIGlmICgodGFyZ2V0VXJsLnByb3RvY29sICE9PSAnaHR0cDonICYmIHRhcmdldFVybC5wcm90b2NvbCAhPT0gJ2h0dHBzOicpIHx8IGlzSW50ZXJuYWxEb2NVcmwodGFyZ2V0VXJsLCBzaXRlQmFzZVVybCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV4dGVybmFsVXJsID0gYCR7dGFyZ2V0VXJsLm9yaWdpbn0ke3RhcmdldFVybC5wYXRobmFtZX0ke3RhcmdldFVybC5zZWFyY2h9YDtcbiAgICAgIGlmICghdGFyZ2V0cy5oYXMoZXh0ZXJuYWxVcmwpKSB7XG4gICAgICAgIHRhcmdldHMuc2V0KGV4dGVybmFsVXJsLCBwYWdlVXJsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0cztcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgdmFsdWVzIG9mIGV2ZXJ5IGBpZGAgYXR0cmlidXRlIGluIGEgY2h1bmsgb2YgSFRNTC5cbiAqXG4gKiBAcGFyYW0gaHRtbCAtIFRoZSBIVE1MIHRvIHNjYW4uXG4gKiBAcmV0dXJucyBUaGUgc2V0IG9mIGVsZW1lbnQgaWRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdElkcyhodG1sOiBzdHJpbmcpOiBTZXQ8c3RyaW5nPiB7XG4gIHJldHVybiBuZXcgU2V0KFsuLi5odG1sLm1hdGNoQWxsKElEX0FUVFJJQlVURV9SRUdFWCldLm1hcCgobWF0Y2gpID0+IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICd2YWx1ZScpKSk7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgdGhlIHZhbHVlcyBvZiBldmVyeSBgaHJlZmAvYHNyY2AgYXR0cmlidXRlIGluIGEgY2h1bmsgb2YgSFRNTC5cbiAqXG4gKiBAcGFyYW0gaHRtbCAtIFRoZSBIVE1MIHRvIHNjYW4uXG4gKiBAcmV0dXJucyBUaGUgcmF3IGxpbmsgdmFsdWVzLCBpbiBkb2N1bWVudCBvcmRlciAoZHVwbGljYXRlcyBwcmVzZXJ2ZWQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdExpbmtzKGh0bWw6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFsuLi5odG1sLm1hdGNoQWxsKExJTktfQVRUUklCVVRFX1JFR0VYKV0ubWFwKChtYXRjaCkgPT4gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3ZhbHVlJykpO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgYnJva2VuIGxpbmtzIGludG8gYSBodW1hbi1yZWFkYWJsZSBtdWx0aS1saW5lIHJlcG9ydC5cbiAqXG4gKiBAcGFyYW0gYnJva2VuTGlua3MgLSBUaGUgYnJva2VuIGxpbmtzIHRvIGRlc2NyaWJlLlxuICogQHJldHVybnMgT25lIGxpbmUgcGVyIGJyb2tlbiBsaW5rLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0QnJva2VuTGlua3MoYnJva2VuTGlua3M6IEJyb2tlbkxpbmtbXSk6IHN0cmluZyB7XG4gIHJldHVybiBicm9rZW5MaW5rc1xuICAgIC5tYXAoKGJyb2tlbkxpbmspID0+IHtcbiAgICAgIHN3aXRjaCAoYnJva2VuTGluay5yZWFzb24pIHtcbiAgICAgICAgY2FzZSAnZXh0ZXJuYWwtZXJyb3InOiB7XG4gICAgICAgICAgcmV0dXJuIGAke2Jyb2tlbkxpbmsucGFnZVVybH0gbGlua3MgdG8gZXh0ZXJuYWwgVVJMICR7YnJva2VuTGluay50YXJnZXRVcmx9IHRoYXQgcmV0dXJuZWQgJHtkZXNjcmliZUh0dHBTdGF0dXMoYnJva2VuTGluay5odHRwU3RhdHVzKX0uYDtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdtaXNzaW5nLWZyYWdtZW50Jzoge1xuICAgICAgICAgIHJldHVybiBgJHticm9rZW5MaW5rLnBhZ2VVcmx9IGxpbmtzIHRvIG1pc3NpbmcgZnJhZ21lbnQgJHticm9rZW5MaW5rLnRhcmdldFVybH0uYDtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdtaXNzaW5nLXBhZ2UnOiB7XG4gICAgICAgICAgcmV0dXJuIGAke2Jyb2tlbkxpbmsucGFnZVVybH0gbGlua3MgdG8gbWlzc2luZyBwYWdlICR7YnJva2VuTGluay50YXJnZXRVcmx9LmA7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIHJldHVybiBhc3NlcnROZXZlcihicm9rZW5MaW5rLnJlYXNvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICAgIC5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgYnVpbGQtb3V0cHV0LXJlbGF0aXZlIHBhdGggZm9yIGFuIGludGVybmFsIGRvY3VtZW50YXRpb24gVVJMLlxuICpcbiAqIEBwYXJhbSB0YXJnZXRVcmwgLSBUaGUgcmVzb2x2ZWQgYWJzb2x1dGUgbGluayBVUkwgKG11c3QgYmUge0BsaW5rIGlzSW50ZXJuYWxEb2NVcmx9KS5cbiAqIEBwYXJhbSBzaXRlQmFzZVVybCAtIFRoZSBhYnNvbHV0ZSBiYXNlIFVSTCB0aGUgc2l0ZSBpcyBzZXJ2ZWQgZnJvbSAod2l0aCBhIHRyYWlsaW5nIHNsYXNoKS5cbiAqIEByZXR1cm5zIFRoZSBkZWNvZGVkIHBhdGggcmVsYXRpdmUgdG8gdGhlIGJ1aWxkLW91dHB1dCByb290LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3V0cHV0UmVsYXRpdmVQYXRoKHRhcmdldFVybDogVVJMLCBzaXRlQmFzZVVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgYmFzZSA9IG5ldyBVUkwoc2l0ZUJhc2VVcmwpO1xuICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHRhcmdldFVybC5wYXRobmFtZS5zbGljZShiYXNlLnBhdGhuYW1lLmxlbmd0aCkpO1xufVxuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBhYnNvbHV0ZSBVUkwgYSBidWlsdCBwYWdlIGlzIHNlcnZlZCBhdC5cbiAqXG4gKiBAcGFyYW0gcmVsYXRpdmVQYXRoIC0gVGhlIHBhZ2UncyBwYXRoIHJlbGF0aXZlIHRvIHRoZSBidWlsZC1vdXRwdXQgcm9vdC5cbiAqIEBwYXJhbSBzaXRlQmFzZVVybCAtIFRoZSBhYnNvbHV0ZSBiYXNlIFVSTCB0aGUgc2l0ZSBpcyBzZXJ2ZWQgZnJvbSAod2l0aCBhIHRyYWlsaW5nIHNsYXNoKS5cbiAqIEByZXR1cm5zIFRoZSBwYWdlJ3MgYWJzb2x1dGUgVVJMLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFnZVVybChyZWxhdGl2ZVBhdGg6IHN0cmluZywgc2l0ZUJhc2VVcmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSByZWxhdGl2ZVBhdGgucmVwbGFjZUFsbCgnXFxcXCcsICcvJyk7XG4gIGNvbnN0IHVybFBhdGggPSBub3JtYWxpemVkID09PSAnaW5kZXguaHRtbCcgPyAnJyA6IG5vcm1hbGl6ZWQucmVwbGFjZSgvaW5kZXhcXC5odG1sJC91LCAnJyk7XG4gIHJldHVybiBuZXcgVVJMKHVybFBhdGgsIHNpdGVCYXNlVXJsKS5ocmVmO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIHJlc29sdmVkIGxpbmsgcG9pbnRzIGF0IGEgcGFnZSBob3N0ZWQgYnkgdGhpcyBkb2N1bWVudGF0aW9uIHNpdGUuXG4gKlxuICogQHBhcmFtIHRhcmdldFVybCAtIFRoZSByZXNvbHZlZCBhYnNvbHV0ZSBsaW5rIFVSTC5cbiAqIEBwYXJhbSBzaXRlQmFzZVVybCAtIFRoZSBhYnNvbHV0ZSBiYXNlIFVSTCB0aGUgc2l0ZSBpcyBzZXJ2ZWQgZnJvbSAod2l0aCBhIHRyYWlsaW5nIHNsYXNoKS5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBsaW5rIGlzIHNhbWUtb3JpZ2luIGFuZCB1bmRlciB0aGUgc2l0ZSBiYXNlIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVybmFsRG9jVXJsKHRhcmdldFVybDogVVJMLCBzaXRlQmFzZVVybDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGJhc2UgPSBuZXcgVVJMKHNpdGVCYXNlVXJsKTtcbiAgcmV0dXJuIHRhcmdldFVybC5vcmlnaW4gPT09IGJhc2Uub3JpZ2luICYmIHRhcmdldFVybC5wYXRobmFtZS5zdGFydHNXaXRoKGJhc2UucGF0aG5hbWUpO1xufVxuXG4vKipcbiAqIFJlYWRzIGFuIEhUVFAgYFJldHJ5LUFmdGVyYCBoZWFkZXIsIHdoaWNoIGlzIGVpdGhlciBhIG51bWJlciBvZiBzZWNvbmRzIG9yIGFuIEhUVFAgZGF0ZS5cbiAqXG4gKiBAcGFyYW0gaGVhZGVyVmFsdWUgLSBUaGUgaGVhZGVyJ3MgdmFsdWUsIG9yIGBudWxsYCB3aGVuIHRoZSByZXNwb25zZSBoYXMgbm9uZS5cbiAqIEBwYXJhbSBub3dJbk1pbGxpc2Vjb25kcyAtIFRoZSBjdXJyZW50IHRpbWUsIGFnYWluc3Qgd2hpY2ggYSBkYXRlIGlzIG1lYXN1cmVkLlxuICogQHJldHVybnMgSG93IGxvbmcgdG8gd2FpdCwgbmV2ZXIgbmVnYXRpdmUsIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhlIGhlYWRlciBpcyBhYnNlbnQgb3IgdW5yZWFkYWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmV0cnlBZnRlckluTWlsbGlzZWNvbmRzKGhlYWRlclZhbHVlOiBudWxsIHwgc3RyaW5nLCBub3dJbk1pbGxpc2Vjb25kczogbnVtYmVyKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdHJpbW1lZCA9IGhlYWRlclZhbHVlPy50cmltKCkgPz8gJyc7XG4gIGlmICh0cmltbWVkID09PSAnJykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoL15cXGQrJC91LnRlc3QodHJpbW1lZCkpIHtcbiAgICByZXR1cm4gTnVtYmVyKHRyaW1tZWQpICogTUlMTElTRUNPTkRTX1BFUl9TRUNPTkQ7XG4gIH1cblxuICBjb25zdCBkYXRlSW5NaWxsaXNlY29uZHMgPSBEYXRlLnBhcnNlKHRyaW1tZWQpO1xuICByZXR1cm4gTnVtYmVyLmlzTmFOKGRhdGVJbk1pbGxpc2Vjb25kcykgPyB1bmRlZmluZWQgOiBNYXRoLm1heCgwLCBkYXRlSW5NaWxsaXNlY29uZHMgLSBub3dJbk1pbGxpc2Vjb25kcyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgYW4gb3V0cHV0LXJlbGF0aXZlIHBhdGggdG8gYW4gYWJzb2x1dGUgcGF0aCBpbnNpZGUgdGhlIGJ1aWxkLW91dHB1dCByb290LCByZWplY3RpbmdcbiAqIHBhdGhzIHRoYXQgZXNjYXBlIGl0IHZpYSBgLi5gIHNlZ21lbnRzLlxuICpcbiAqIEBwYXJhbSBvdXRwdXRSb290UGF0aCAtIFRoZSBhYnNvbHV0ZSBidWlsZC1vdXRwdXQgcm9vdCBwYXRoLlxuICogQHBhcmFtIG91dHB1dFJlbGF0aXZlUGF0aCAtIFRoZSBkZWNvZGVkIG91dHB1dC1yZWxhdGl2ZSBwYXRoLlxuICogQHJldHVybnMgVGhlIGpvaW5lZCBwYXRoIHdoZW4gaXQgc3RheXMgd2l0aGluIHRoZSByb290LCBvdGhlcndpc2UgYG51bGxgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVdpdGhpblJvb3Qob3V0cHV0Um9vdFBhdGg6IHN0cmluZywgb3V0cHV0UmVsYXRpdmVQYXRoOiBzdHJpbmcpOiBudWxsIHwgc3RyaW5nIHtcbiAgY29uc3Qgcm9vdCA9IG5vcm1hbGl6ZShvdXRwdXRSb290UGF0aC5yZXBsYWNlQWxsKCdcXFxcJywgJy8nKSkucmVwbGFjZSgvXFwvJC91LCAnJyk7XG4gIGxldCBqb2luZWQgPSBub3JtYWxpemUoYCR7cm9vdH0vJHtvdXRwdXRSZWxhdGl2ZVBhdGgucmVwbGFjZUFsbCgnXFxcXCcsICcvJyl9YCk7XG4gIGlmIChqb2luZWQubGVuZ3RoID4gMSkge1xuICAgIGpvaW5lZCA9IGpvaW5lZC5yZXBsYWNlKC9cXC8kL3UsICcnKTtcbiAgfVxuXG4gIHJldHVybiBqb2luZWQgIT09IHJvb3QgJiYgIWpvaW5lZC5zdGFydHNXaXRoKGAke3Jvb3R9L2ApID8gbnVsbCA6IGpvaW5lZDtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVIdHRwU3RhdHVzKGh0dHBTdGF0dXM6IG51bWJlciB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIHJldHVybiBodHRwU3RhdHVzID09PSB1bmRlZmluZWQgfHwgaHR0cFN0YXR1cyA9PT0gTkVUV09SS19GQUlMVVJFX1NUQVRVUyA/ICdhIG5ldHdvcmsgZmFpbHVyZScgOiBgSFRUUCAke1N0cmluZyhodHRwU3RhdHVzKX1gO1xufVxuXG5mdW5jdGlvbiBpc1RyYW5zaWVudFN0YXR1cyhzdGF0dXM6IG51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gc3RhdHVzID09PSBORVRXT1JLX0ZBSUxVUkVfU1RBVFVTIHx8IHN0YXR1cyA9PT0gSFRUUF9UT09fTUFOWV9SRVFVRVNUU19TVEFUVVMgfHwgc3RhdHVzID49IEhUVFBfU0VSVkVSX0VSUk9SX01JTl9TVEFUVVM7XG59XG5cbi8qXG4gKiBBIHNpdGUgbGlua2luZyBpdHMgc2libGluZyBzaXRlcyBwcm9iZXMgdGhvdXNhbmRzIG9mIFVSTHMgb24gb25lIGhvc3QsIGFuZCBpbiBDSSBHaXRIdWIgUGFnZXMgYW5zd2VycyBhIGZldyBvZiB0aGVtXG4gKiB3aXRoIGEgNTAzLCBvciBkcm9wcyB0aGUgY29ubmVjdGlvbiwgd2hpbGUgdGhlIHBhZ2Ugc2VydmVzIDIwMCBhIG1vbWVudCBsYXRlci4gVGhyZWUgYXR0ZW1wdHMgYSBzZWNvbmQgYXBhcnQgZ2F2ZSB1cFxuICogdG9vIHNvb24gZm9yIHRoYXQgKDIwMjYtMTAtMTYpLCBzbyB0aGUgd2FpdCBncm93cyB1bnRpbCB0aGUgYnVkZ2V0IGlzIHNwZW50LlxuICovXG5hc3luYyBmdW5jdGlvbiBwcm9iZVdpdGhSZXRyeShcbiAgdXJsOiBzdHJpbmcsXG4gIGZldGNoVXJsU3RhdHVzOiAodXJsOiBzdHJpbmcpID0+IFByb21pc2U8RXh0ZXJuYWxMaW5rUHJvYmVSZXN1bHQgfCBudW1iZXI+LFxuICByZXRyeTogRXh0ZXJuYWxMaW5rUmV0cnlPcHRpb25zXG4pOiBQcm9taXNlPG51bWJlcj4ge1xuICBjb25zdCBpbml0aWFsRGVsYXlJbk1pbGxpc2Vjb25kcyA9IHJldHJ5LmluaXRpYWxEZWxheUluTWlsbGlzZWNvbmRzID8/IERFRkFVTFRfRVhURVJOQUxfTElOS19SRVRSWV9JTklUSUFMX0RFTEFZX0lOX01JTExJU0VDT05EUztcbiAgY29uc3QgbWF4RGVsYXlJbk1pbGxpc2Vjb25kcyA9IHJldHJ5Lm1heERlbGF5SW5NaWxsaXNlY29uZHMgPz8gREVGQVVMVF9FWFRFUk5BTF9MSU5LX1JFVFJZX01BWF9ERUxBWV9JTl9NSUxMSVNFQ09ORFM7XG4gIGNvbnN0IHRvdGFsQnVkZ2V0SW5NaWxsaXNlY29uZHMgPSByZXRyeS50b3RhbEJ1ZGdldEluTWlsbGlzZWNvbmRzID8/IERFRkFVTFRfRVhURVJOQUxfTElOS19SRVRSWV9UT1RBTF9CVURHRVRfSU5fTUlMTElTRUNPTkRTO1xuICBjb25zdCByYW5kb20gPSByZXRyeS5yYW5kb20gPz8gTWF0aC5yYW5kb207XG4gIGNvbnN0IHNsZWVwID0gcmV0cnkuc2xlZXAgPz8gc2xlZXBXaXRoVGltZW91dDtcblxuICBsZXQgd2FpdGVkSW5NaWxsaXNlY29uZHMgPSAwO1xuICBmb3IgKGxldCBhdHRlbXB0ID0gMDs7IGF0dGVtcHQrKykge1xuICAgIGNvbnN0IHByb2JlUmVzdWx0ID0gYXdhaXQgZmV0Y2hVcmxTdGF0dXModXJsKTtcbiAgICBjb25zdCB7IHJldHJ5QWZ0ZXJJbk1pbGxpc2Vjb25kcywgc3RhdHVzIH0gPSB0eXBlb2YgcHJvYmVSZXN1bHQgPT09ICdudW1iZXInID8geyByZXRyeUFmdGVySW5NaWxsaXNlY29uZHM6IHVuZGVmaW5lZCwgc3RhdHVzOiBwcm9iZVJlc3VsdCB9IDogcHJvYmVSZXN1bHQ7XG4gICAgY29uc3QgcmVtYWluaW5nSW5NaWxsaXNlY29uZHMgPSB0b3RhbEJ1ZGdldEluTWlsbGlzZWNvbmRzIC0gd2FpdGVkSW5NaWxsaXNlY29uZHM7XG4gICAgaWYgKCFpc1RyYW5zaWVudFN0YXR1cyhzdGF0dXMpIHx8IHJlbWFpbmluZ0luTWlsbGlzZWNvbmRzIDw9IDApIHtcbiAgICAgIHJldHVybiBzdGF0dXM7XG4gICAgfVxuXG4gICAgY29uc3QgYmFja29mZkluTWlsbGlzZWNvbmRzID0gTWF0aC5taW4obWF4RGVsYXlJbk1pbGxpc2Vjb25kcywgaW5pdGlhbERlbGF5SW5NaWxsaXNlY29uZHMgKiBCQUNLT0ZGX0ZBQ1RPUiAqKiBhdHRlbXB0KTtcbiAgICBjb25zdCBqaXR0ZXJlZEluTWlsbGlzZWNvbmRzID0gYmFja29mZkluTWlsbGlzZWNvbmRzICogKEpJVFRFUl9GTE9PUiArICgxIC0gSklUVEVSX0ZMT09SKSAqIHJhbmRvbSgpKTtcbiAgICBjb25zdCBkZWxheUluTWlsbGlzZWNvbmRzID0gTWF0aC5taW4ocmVtYWluaW5nSW5NaWxsaXNlY29uZHMsIE1hdGgubWF4KGppdHRlcmVkSW5NaWxsaXNlY29uZHMsIHJldHJ5QWZ0ZXJJbk1pbGxpc2Vjb25kcyA/PyAwKSk7XG4gICAgYXdhaXQgc2xlZXAoZGVsYXlJbk1pbGxpc2Vjb25kcyk7XG4gICAgd2FpdGVkSW5NaWxsaXNlY29uZHMgKz0gZGVsYXlJbk1pbGxpc2Vjb25kcztcbiAgfVxufVxuXG5mdW5jdGlvbiBzbGVlcFdpdGhUaW1lb3V0KG1pbGxpc2Vjb25kczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZVByb21pc2UpID0+IHtcbiAgICBnbG9iYWxUaGlzLnNldFRpbWVvdXQocmVzb2x2ZVByb21pc2UsIG1pbGxpc2Vjb25kcyk7XG4gIH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWNBLFNBQVMsOEJBQThCO0FBQ3ZDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxpQkFBaUI7QUFFMUIsTUFBTSx1QkFBdUI7QUFDN0IsTUFBTSxxQkFBcUI7QUFDM0IsTUFBTSxpQkFBaUI7QUFNaEIsTUFBTSx5QkFBeUI7QUF3SS9CLE1BQU0sNkNBQTZDO0FBS25ELE1BQU0sNERBQTREO0FBS2xFLE1BQU0sd0RBQXdEO0FBSzlELE1BQU0sMkRBQTJEO0FBRXhFLE1BQU0sZ0NBQWdDO0FBQ3RDLE1BQU0sK0JBQStCO0FBQ3JDLE1BQU0sMEJBQTBCO0FBQ2hDLE1BQU0sZUFBZTtBQUNyQixNQUFNLGlCQUFpQjtBQXdCdkIsZUFBc0IsMkJBQ3BCLFNBQ0EsZ0JBQ0EsYUFDQSxVQUE2QyxDQUFDLEdBQ3ZCO0FBQ3ZCLFFBQU0scUJBQXFCLEtBQUssSUFBSSxHQUFHLFFBQVEsc0JBQXNCLDBDQUEwQztBQUMvRyxRQUFNLFVBQTBCLENBQUMsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxPQUFPLEdBQUcsV0FBVyxFQUFFLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLE9BQU8sU0FBUyxJQUFJLEVBQUU7QUFDOUgsUUFBTSxVQUFpQyxN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
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/// <reference path="../library-references.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Keeps a repository's GitHub homepage pointing at its documentation site.
|
|
6
|
+
*
|
|
7
|
+
* The URL is the site's own (`site` + `base` of its Astro configuration), so nothing here knows which origin or
|
|
8
|
+
* account a site belongs to. It reads and writes through the `gh` CLI with whatever credentials it already has.
|
|
9
|
+
*
|
|
10
|
+
* A workflow's `GITHUB_TOKEN` cannot change a repository's settings, so in CI a mismatch is reported, never fixed:
|
|
11
|
+
* the report prints the `gh repo edit` line that fixes it. Nothing here ever fails a build.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* What a site build does about its repository's GitHub homepage.
|
|
15
|
+
*
|
|
16
|
+
* - `off`: nothing.
|
|
17
|
+
* - `check`: report a homepage that is not the site's URL, with the command that sets it.
|
|
18
|
+
* - `set`: set a homepage that is not the site's URL, and report it when the credentials cannot.
|
|
19
|
+
*/
|
|
20
|
+
export type RepoHomepageMode = 'check' | 'off' | 'set';
|
|
21
|
+
/**
|
|
22
|
+
* Params for {@link syncRepoHomepage}.
|
|
23
|
+
*/
|
|
24
|
+
export interface SyncRepoHomepageParams {
|
|
25
|
+
/**
|
|
26
|
+
* The URL the homepage should be: the site's base URL.
|
|
27
|
+
*/
|
|
28
|
+
readonly homepageUrl: string;
|
|
29
|
+
/**
|
|
30
|
+
* Whether to set a mismatched homepage or only report it.
|
|
31
|
+
*/
|
|
32
|
+
readonly mode: Exclude<RepoHomepageMode, 'off'>;
|
|
33
|
+
/**
|
|
34
|
+
* The GitHub account the repository belongs to.
|
|
35
|
+
*/
|
|
36
|
+
readonly owner: string;
|
|
37
|
+
/**
|
|
38
|
+
* The repository's name.
|
|
39
|
+
*/
|
|
40
|
+
readonly repo: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Compares a repository's GitHub homepage with its site's URL, and sets it or reports the mismatch.
|
|
44
|
+
*
|
|
45
|
+
* It only warns: an unreadable repository, a mismatch it may not fix and a failed update each print the reason and
|
|
46
|
+
* the `gh repo edit` line, and inside GitHub Actions also a `::warning::` annotation.
|
|
47
|
+
*
|
|
48
|
+
* @param params - The repository, the site's URL and the mode.
|
|
49
|
+
*/
|
|
50
|
+
export declare function syncRepoHomepage(params: SyncRepoHomepageParams): Promise<void>;
|