obsidian-dev-utils 99.0.0 → 100.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/CHANGELOG.md +9 -0
- package/dist/integration-test-plugin/main.js +25 -1
- package/dist/lib/cjs/__merged.cjs +5 -1
- package/dist/lib/cjs/__merged.d.cts +2 -2
- package/dist/lib/cjs/generated-during-build.cjs +1 -1
- package/dist/lib/cjs/obsidian/attachment-path.cjs +6 -1
- package/dist/lib/cjs/obsidian/attachment-path.d.cts +29 -0
- package/dist/lib/cjs/obsidian/attachment-unit-folder.cjs +7 -2
- package/dist/lib/cjs/obsidian/attachment-unit-folder.d.cts +32 -2
- package/dist/lib/cjs/obsidian/note-priority.cjs +16 -1
- package/dist/lib/cjs/obsidian/note-priority.d.cts +28 -0
- package/dist/lib/esm/__merged.d.mts +2 -2
- package/dist/lib/esm/__merged.mjs +5 -1
- package/dist/lib/esm/generated-during-build.mjs +1 -1
- package/dist/lib/esm/obsidian/attachment-path.d.mts +29 -0
- package/dist/lib/esm/obsidian/attachment-path.mjs +5 -1
- package/dist/lib/esm/obsidian/attachment-unit-folder.d.mts +32 -2
- package/dist/lib/esm/obsidian/attachment-unit-folder.mjs +7 -2
- package/dist/lib/esm/obsidian/note-priority.d.mts +28 -0
- package/dist/lib/esm/obsidian/note-priority.mjs +15 -1
- package/package.json +1 -1
|
@@ -13,11 +13,38 @@
|
|
|
13
13
|
* This lives in the shared library rather than in one plugin because more than one plugin relocates
|
|
14
14
|
* attachments over the same vault. If they each decided separately what one attachment is, a user
|
|
15
15
|
* with both installed would get a folder kept whole by one and torn apart by the other.
|
|
16
|
+
*
|
|
17
|
+
* Which is why the designation itself is read from the vault rather than supplied per caller: pass an
|
|
18
|
+
* {@link App} and {@link findAttachmentUnitFolderPath} walks with whatever an attachment-location
|
|
19
|
+
* plugin published on the patched `Vault.getAvailablePathForAttachments`, so every plugin decides from
|
|
20
|
+
* one answer. The explicit-predicate form remains for a caller that genuinely owns its own patterns.
|
|
21
|
+
*/
|
|
22
|
+
import type { App } from 'obsidian';
|
|
23
|
+
/**
|
|
24
|
+
* Parameters for {@link findAttachmentUnitFolderPath}, reading the designation published on the vault.
|
|
16
25
|
*/
|
|
26
|
+
export interface FindAttachmentUnitFolderPathFromAppParams {
|
|
27
|
+
/**
|
|
28
|
+
* An Obsidian application instance, whose patched `Vault.getAvailablePathForAttachments` carries the
|
|
29
|
+
* designation.
|
|
30
|
+
*/
|
|
31
|
+
readonly app: App;
|
|
32
|
+
/**
|
|
33
|
+
* The vault-relative path of the attachment.
|
|
34
|
+
*/
|
|
35
|
+
readonly attachmentPath: string;
|
|
36
|
+
}
|
|
17
37
|
/**
|
|
18
38
|
* Parameters for {@link findAttachmentUnitFolderPath}.
|
|
39
|
+
*
|
|
40
|
+
* Prefer {@link FindAttachmentUnitFolderPathFromAppParams} — it is the form that makes every plugin
|
|
41
|
+
* decide from one published answer.
|
|
19
42
|
*/
|
|
20
|
-
export
|
|
43
|
+
export type FindAttachmentUnitFolderPathParams = FindAttachmentUnitFolderPathFromAppParams | FindAttachmentUnitFolderPathWithPredicateParams;
|
|
44
|
+
/**
|
|
45
|
+
* Parameters for {@link findAttachmentUnitFolderPath}, walking with a predicate the caller owns.
|
|
46
|
+
*/
|
|
47
|
+
export interface FindAttachmentUnitFolderPathWithPredicateParams {
|
|
21
48
|
/**
|
|
22
49
|
* The vault-relative path of the attachment.
|
|
23
50
|
*/
|
|
@@ -28,7 +55,7 @@ export interface FindAttachmentUnitFolderPathParams {
|
|
|
28
55
|
* @param folderPath - The vault-relative path of the folder.
|
|
29
56
|
* @returns `true` if the folder is designated as an attachment unit, `false` otherwise.
|
|
30
57
|
*/
|
|
31
|
-
checkIsAttachmentUnitFolder(folderPath: string): boolean;
|
|
58
|
+
checkIsAttachmentUnitFolder(this: void, folderPath: string): boolean;
|
|
32
59
|
}
|
|
33
60
|
/**
|
|
34
61
|
* Parameters for {@link rebasePathOntoFolder}.
|
|
@@ -57,6 +84,9 @@ export interface RebasePathOntoFolderParams {
|
|
|
57
84
|
* The vault root is never a unit, however the patterns are written: designating it would make every
|
|
58
85
|
* relocation a no-op at best and a vault-wide move at worst.
|
|
59
86
|
*
|
|
87
|
+
* Passing an {@link App} walks with the designation an attachment-location plugin published on the vault;
|
|
88
|
+
* when nobody published one, nothing is designated and the answer is `null`.
|
|
89
|
+
*
|
|
60
90
|
* @param params - The parameters for finding the attachment unit folder.
|
|
61
91
|
* @returns The unit folder's path, or `null` when the attachment belongs to no unit.
|
|
62
92
|
*/
|
|
@@ -42,15 +42,20 @@ function ensureBrowserProcess() {
|
|
|
42
42
|
})();
|
|
43
43
|
|
|
44
44
|
import { dirname } from "../path.mjs";
|
|
45
|
+
import { getCheckIsAttachmentUnitFolderFunction } from "./attachment-path.mjs";
|
|
45
46
|
function findAttachmentUnitFolderPath(params) {
|
|
46
47
|
const parentFolderPath = dirname(params.attachmentPath);
|
|
47
48
|
if (!parentFolderPath || parentFolderPath === "." || parentFolderPath === "/") {
|
|
48
49
|
return null;
|
|
49
50
|
}
|
|
51
|
+
const checkIsAttachmentUnitFolder = "checkIsAttachmentUnitFolder" in params ? params.checkIsAttachmentUnitFolder : getCheckIsAttachmentUnitFolderFunction(params.app);
|
|
52
|
+
if (!checkIsAttachmentUnitFolder) {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
50
55
|
const segments = parentFolderPath.split("/").filter(Boolean);
|
|
51
56
|
for (let count = 1; count <= segments.length; count++) {
|
|
52
57
|
const candidate = segments.slice(0, count).join("/");
|
|
53
|
-
if (
|
|
58
|
+
if (checkIsAttachmentUnitFolder(candidate)) {
|
|
54
59
|
return candidate;
|
|
55
60
|
}
|
|
56
61
|
}
|
|
@@ -67,4 +72,4 @@ export {
|
|
|
67
72
|
findAttachmentUnitFolderPath,
|
|
68
73
|
rebasePathOntoFolder
|
|
69
74
|
};
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2F0dGFjaG1lbnQtdW5pdC1mb2xkZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBSZXNvbHZlcyB3aGljaCBmb2xkZXIgYW4gYXR0YWNobWVudCBiZWxvbmdzIHRvIHdoZW4gdGhlIHVzZXIgaGFzIGRlc2lnbmF0ZWQgZm9sZGVycyB0aGF0IG11c3RcbiAqIHRyYXZlbCBhcyBhIHNpbmdsZSB1bml0LlxuICpcbiAqIFNvbWUgZm9ybWF0cyBhcmUgcmVhbGx5IGEgZGlyZWN0b3J5IHRyZWUgcmF0aGVyIHRoYW4gYSBmaWxlOiBhIHBhZ2Ugc2F2ZWQgZnJvbSBhIGJyb3dzZXIgc2l0cyBuZXh0XG4gKiB0byBhIGBfZmlsZXMvYCBmb2xkZXIgaG9sZGluZyBpdHMgaW1hZ2VzIGFuZCBzdHlsZXNoZWV0cywgYW4gYC5leGNhbGlkcmF3YCBzaXRzIG5leHQgdG8gdGhlIGltYWdlc1xuICogaXQgcmVmZXJlbmNlcy4gUmVsb2NhdGluZyBvbmx5IHRoZSBsaW5rZWQgZmlsZSBsZWF2ZXMgdGhlIHJlc3QgYmVoaW5kIGFuZCB0aGUgYXR0YWNobWVudCBhcnJpdmVzXG4gKiBicm9rZW4uXG4gKlxuICogVGhpcyBsaXZlcyBpbiB0aGUgc2hhcmVkIGxpYnJhcnkgcmF0aGVyIHRoYW4gaW4gb25lIHBsdWdpbiBiZWNhdXNlIG1vcmUgdGhhbiBvbmUgcGx1Z2luIHJlbG9jYXRlc1xuICogYXR0YWNobWVudHMgb3ZlciB0aGUgc2FtZSB2YXVsdC4gSWYgdGhleSBlYWNoIGRlY2lkZWQgc2VwYXJhdGVseSB3aGF0IG9uZSBhdHRhY2htZW50IGlzLCBhIHVzZXJcbiAqIHdpdGggYm90aCBpbnN0YWxsZWQgd291bGQgZ2V0IGEgZm9sZGVyIGtlcHQgd2hvbGUgYnkgb25lIGFuZCB0b3JuIGFwYXJ0IGJ5IHRoZSBvdGhlci5cbiAqXG4gKiBXaGljaCBpcyB3aHkgdGhlIGRlc2lnbmF0aW9uIGl0c2VsZiBpcyByZWFkIGZyb20gdGhlIHZhdWx0IHJhdGhlciB0aGFuIHN1cHBsaWVkIHBlciBjYWxsZXI6IHBhc3MgYW5cbiAqIHtAbGluayBBcHB9IGFuZCB7QGxpbmsgZmluZEF0dGFjaG1lbnRVbml0Rm9sZGVyUGF0aH0gd2Fsa3Mgd2l0aCB3aGF0ZXZlciBhbiBhdHRhY2htZW50LWxvY2F0aW9uXG4gKiBwbHVnaW4gcHVibGlzaGVkIG9uIHRoZSBwYXRjaGVkIGBWYXVsdC5nZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNgLCBzbyBldmVyeSBwbHVnaW4gZGVjaWRlcyBmcm9tXG4gKiBvbmUgYW5zd2VyLiBUaGUgZXhwbGljaXQtcHJlZGljYXRlIGZvcm0gcmVtYWlucyBmb3IgYSBjYWxsZXIgdGhhdCBnZW51aW5lbHkgb3ducyBpdHMgb3duIHBhdHRlcm5zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSAnLi4vcGF0aC50cyc7XG5pbXBvcnQgeyBnZXRDaGVja0lzQXR0YWNobWVudFVuaXRGb2xkZXJGdW5jdGlvbiB9IGZyb20gJy4vYXR0YWNobWVudC1wYXRoLnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZmluZEF0dGFjaG1lbnRVbml0Rm9sZGVyUGF0aH0sIHJlYWRpbmcgdGhlIGRlc2lnbmF0aW9uIHB1Ymxpc2hlZCBvbiB0aGUgdmF1bHQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmluZEF0dGFjaG1lbnRVbml0Rm9sZGVyUGF0aEZyb21BcHBQYXJhbXMge1xuICAvKipcbiAgICogQW4gT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UsIHdob3NlIHBhdGNoZWQgYFZhdWx0LmdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c2AgY2FycmllcyB0aGVcbiAgICogZGVzaWduYXRpb24uXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIHZhdWx0LXJlbGF0aXZlIHBhdGggb2YgdGhlIGF0dGFjaG1lbnQuXG4gICAqL1xuICByZWFkb25seSBhdHRhY2htZW50UGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBmaW5kQXR0YWNobWVudFVuaXRGb2xkZXJQYXRofS5cbiAqXG4gKiBQcmVmZXIge0BsaW5rIEZpbmRBdHRhY2htZW50VW5pdEZvbGRlclBhdGhGcm9tQXBwUGFyYW1zfSBcdTIwMTQgaXQgaXMgdGhlIGZvcm0gdGhhdCBtYWtlcyBldmVyeSBwbHVnaW5cbiAqIGRlY2lkZSBmcm9tIG9uZSBwdWJsaXNoZWQgYW5zd2VyLlxuICovXG5leHBvcnQgdHlwZSBGaW5kQXR0YWNobWVudFVuaXRGb2xkZXJQYXRoUGFyYW1zID0gRmluZEF0dGFjaG1lbnRVbml0Rm9sZGVyUGF0aEZyb21BcHBQYXJhbXMgfCBGaW5kQXR0YWNobWVudFVuaXRGb2xkZXJQYXRoV2l0aFByZWRpY2F0ZVBhcmFtcztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZmluZEF0dGFjaG1lbnRVbml0Rm9sZGVyUGF0aH0sIHdhbGtpbmcgd2l0aCBhIHByZWRpY2F0ZSB0aGUgY2FsbGVyIG93bnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmluZEF0dGFjaG1lbnRVbml0Rm9sZGVyUGF0aFdpdGhQcmVkaWNhdGVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHZhdWx0LXJlbGF0aXZlIHBhdGggb2YgdGhlIGF0dGFjaG1lbnQuXG4gICAqL1xuICByZWFkb25seSBhdHRhY2htZW50UGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGEgZm9sZGVyIHBhdGggaXMgZGVzaWduYXRlZCBhcyBhbiBhdHRhY2htZW50IHVuaXQuXG4gICAqXG4gICAqIEBwYXJhbSBmb2xkZXJQYXRoIC0gVGhlIHZhdWx0LXJlbGF0aXZlIHBhdGggb2YgdGhlIGZvbGRlci5cbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBmb2xkZXIgaXMgZGVzaWduYXRlZCBhcyBhbiBhdHRhY2htZW50IHVuaXQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgY2hlY2tJc0F0dGFjaG1lbnRVbml0Rm9sZGVyKHRoaXM6IHZvaWQsIGZvbGRlclBhdGg6IHN0cmluZyk6IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlYmFzZVBhdGhPbnRvRm9sZGVyfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWJhc2VQYXRoT250b0ZvbGRlclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZm9sZGVyJ3MgbmV3IHBhdGguXG4gICAqL1xuICByZWFkb25seSBuZXdGb2xkZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIncyBvbGQgcGF0aC5cbiAgICovXG4gIHJlYWRvbmx5IG9sZEZvbGRlclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhdGggdG8gcmViYXNlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBmb2xkZXIgdGhhdCBhbiBhdHRhY2htZW50IG11c3QgdHJhdmVsIHdpdGguXG4gKlxuICogUmV0dXJucyB0aGUgKipvdXRlcm1vc3QqKiBkZXNpZ25hdGVkIGFuY2VzdG9yLCBub3QgdGhlIG5lYXJlc3Qgb25lLiBXaXRoIG5lc3RlZCBkZXNpZ25hdGlvbnMsXG4gKiBtb3ZpbmcgdGhlIG5lYXJlc3Qgd291bGQgdGVhciB0aGUgb3V0ZXIgdHJlZSBpbiBoYWxmLCB3aGljaCBpcyB0aGUgZmFpbHVyZSB0aGUgd2hvbGUgZmVhdHVyZSBleGlzdHNcbiAqIHRvIHByZXZlbnQuXG4gKlxuICogVGhlIHZhdWx0IHJvb3QgaXMgbmV2ZXIgYSB1bml0LCBob3dldmVyIHRoZSBwYXR0ZXJucyBhcmUgd3JpdHRlbjogZGVzaWduYXRpbmcgaXQgd291bGQgbWFrZSBldmVyeVxuICogcmVsb2NhdGlvbiBhIG5vLW9wIGF0IGJlc3QgYW5kIGEgdmF1bHQtd2lkZSBtb3ZlIGF0IHdvcnN0LlxuICpcbiAqIFBhc3NpbmcgYW4ge0BsaW5rIEFwcH0gd2Fsa3Mgd2l0aCB0aGUgZGVzaWduYXRpb24gYW4gYXR0YWNobWVudC1sb2NhdGlvbiBwbHVnaW4gcHVibGlzaGVkIG9uIHRoZSB2YXVsdDtcbiAqIHdoZW4gbm9ib2R5IHB1Ymxpc2hlZCBvbmUsIG5vdGhpbmcgaXMgZGVzaWduYXRlZCBhbmQgdGhlIGFuc3dlciBpcyBgbnVsbGAuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBmaW5kaW5nIHRoZSBhdHRhY2htZW50IHVuaXQgZm9sZGVyLlxuICogQHJldHVybnMgVGhlIHVuaXQgZm9sZGVyJ3MgcGF0aCwgb3IgYG51bGxgIHdoZW4gdGhlIGF0dGFjaG1lbnQgYmVsb25ncyB0byBubyB1bml0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZEF0dGFjaG1lbnRVbml0Rm9sZGVyUGF0aChwYXJhbXM6IEZpbmRBdHRhY2htZW50VW5pdEZvbGRlclBhdGhQYXJhbXMpOiBudWxsIHwgc3RyaW5nIHtcbiAgY29uc3QgcGFyZW50Rm9sZGVyUGF0aCA9IGRpcm5hbWUocGFyYW1zLmF0dGFjaG1lbnRQYXRoKTtcbiAgaWYgKCFwYXJlbnRGb2xkZXJQYXRoIHx8IHBhcmVudEZvbGRlclBhdGggPT09ICcuJyB8fCBwYXJlbnRGb2xkZXJQYXRoID09PSAnLycpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGNoZWNrSXNBdHRhY2htZW50VW5pdEZvbGRlciA9ICdjaGVja0lzQXR0YWNobWVudFVuaXRGb2xkZXInIGluIHBhcmFtc1xuICAgID8gcGFyYW1zLmNoZWNrSXNBdHRhY2htZW50VW5pdEZvbGRlclxuICAgIDogZ2V0Q2hlY2tJc0F0dGFjaG1lbnRVbml0Rm9sZGVyRnVuY3Rpb24ocGFyYW1zLmFwcCk7XG5cbiAgaWYgKCFjaGVja0lzQXR0YWNobWVudFVuaXRGb2xkZXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHNlZ21lbnRzID0gcGFyZW50Rm9sZGVyUGF0aC5zcGxpdCgnLycpLmZpbHRlcihCb29sZWFuKTtcbiAgZm9yIChsZXQgY291bnQgPSAxOyBjb3VudCA8PSBzZWdtZW50cy5sZW5ndGg7IGNvdW50KyspIHtcbiAgICBjb25zdCBjYW5kaWRhdGUgPSBzZWdtZW50cy5zbGljZSgwLCBjb3VudCkuam9pbignLycpO1xuICAgIGlmIChjaGVja0lzQXR0YWNobWVudFVuaXRGb2xkZXIoY2FuZGlkYXRlKSkge1xuICAgICAgcmV0dXJuIGNhbmRpZGF0ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBSZWJhc2VzIGEgcGF0aCBmcm9tIG9uZSBmb2xkZXIgb250byBhbm90aGVyLlxuICpcbiAqIFVzZWQgdG8gd29yayBvdXQgd2hlcmUgYSBsaW5rZWQgYXR0YWNobWVudCBlbmRzIHVwIG9uY2UgaXRzIHdob2xlIHVuaXQgZm9sZGVyIGhhcyBtb3ZlZCwgc28gdGhlXG4gKiBsaW5rIGNhbiBiZSBwb2ludGVkIGF0IHRoZSBmaWxlJ3MgbmV3IGhvbWUgcmF0aGVyIHRoYW4gYXQgd2hlcmUgdGhlIGZvbGRlciB1c2VkIHRvIGJlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcmViYXNpbmcgdGhlIHBhdGguXG4gKiBAcmV0dXJucyBUaGUgcmViYXNlZCBwYXRoLCBvciBgbnVsbGAgd2hlbiB0aGUgcGF0aCBkb2VzIG5vdCBzaXQgaW5zaWRlIHRoZSBvbGQgZm9sZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmViYXNlUGF0aE9udG9Gb2xkZXIocGFyYW1zOiBSZWJhc2VQYXRoT250b0ZvbGRlclBhcmFtcyk6IG51bGwgfCBzdHJpbmcge1xuICBjb25zdCBwcmVmaXggPSBgJHtwYXJhbXMub2xkRm9sZGVyUGF0aH0vYDtcbiAgaWYgKCFwYXJhbXMucGF0aC5zdGFydHNXaXRoKHByZWZpeCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBgJHtwYXJhbXMubmV3Rm9sZGVyUGF0aH0vJHtwYXJhbXMucGF0aC5zbGljZShwcmVmaXgubGVuZ3RoKX1gO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVCQSxTQUFTLGVBQWU7QUFDeEIsU0FBUyw4Q0FBOEM7QUFnRmhELFNBQVMsNkJBQTZCLFFBQTJEO0FBQ3RHLFFBQU0sbUJBQW1CLFFBQVEsT0FBTyxjQUFjO0FBQ3RELE1BQUksQ0FBQyxvQkFBb0IscUJBQXFCLE9BQU8scUJBQXFCLEtBQUs7QUFDN0UsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLDhCQUE4QixpQ0FBaUMsU0FDakUsT0FBTyw4QkFDUCx1Q0FBdUMsT0FBTyxHQUFHO0FBRXJELE1BQUksQ0FBQyw2QkFBNkI7QUFDaEMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLFdBQVcsaUJBQWlCLE1BQU0sR0FBRyxFQUFFLE9BQU8sT0FBTztBQUMzRCxXQUFTLFFBQVEsR0FBRyxTQUFTLFNBQVMsUUFBUSxTQUFTO0FBQ3JELFVBQU0sWUFBWSxTQUFTLE1BQU0sR0FBRyxLQUFLLEVBQUUsS0FBSyxHQUFHO0FBQ25ELFFBQUksNEJBQTRCLFNBQVMsR0FBRztBQUMxQyxhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFXTyxTQUFTLHFCQUFxQixRQUFtRDtBQUN0RixRQUFNLFNBQVMsR0FBRyxPQUFPLGFBQWE7QUFDdEMsTUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLE1BQU0sR0FBRztBQUNuQyxXQUFPO0FBQUEsRUFDVDtBQUVBLFNBQU8sR0FBRyxPQUFPLGFBQWEsSUFBSSxPQUFPLEtBQUssTUFBTSxPQUFPLE1BQU0sQ0FBQztBQUNwRTsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -12,6 +12,11 @@
|
|
|
12
12
|
* A tie is deliberately NOT resolved here. Two notes of equal priority is exactly the ambiguity the
|
|
13
13
|
* existing mode setting already exists to handle, and inventing a second, silent rule for it would
|
|
14
14
|
* move a file the user never named.
|
|
15
|
+
*
|
|
16
|
+
* The tie is also the whole of what gets REPORTED. A note the list ranked below the best rank cannot
|
|
17
|
+
* resolve the ambiguity, so listing it only adds noise — and worse in a picker, where offering it
|
|
18
|
+
* invites an answer the priority list itself would not have given. That is why
|
|
19
|
+
* {@link filterHighestPriorityNotePaths} exists alongside the two functions that decide.
|
|
15
20
|
*/
|
|
16
21
|
/**
|
|
17
22
|
* Why the priority list did not settle which note owns an attachment.
|
|
@@ -34,6 +39,13 @@ export declare enum NoPriorityWinnerReason {
|
|
|
34
39
|
*/
|
|
35
40
|
Tie = "Tie"
|
|
36
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Parameters for {@link filterHighestPriorityNotePaths}.
|
|
44
|
+
*
|
|
45
|
+
* The same question as {@link pickHighestPriorityNotePath} asks, so deliberately the same parameters:
|
|
46
|
+
* the two must be answered from identical inputs or they could disagree.
|
|
47
|
+
*/
|
|
48
|
+
export type FilterHighestPriorityNotePathsParams = PickHighestPriorityNotePathParams;
|
|
37
49
|
/**
|
|
38
50
|
* Parameters for {@link findNoPriorityWinnerReason}.
|
|
39
51
|
*/
|
|
@@ -81,6 +93,22 @@ export interface PickHighestPriorityNotePathParams {
|
|
|
81
93
|
* that matches nothing always loses to one that matches something.
|
|
82
94
|
*/
|
|
83
95
|
export declare const NO_PRIORITY_MATCH: number;
|
|
96
|
+
/**
|
|
97
|
+
* Narrows the referencing notes to the ones sharing the best rank.
|
|
98
|
+
*
|
|
99
|
+
* Those notes are the whole of the ambiguity: one the list ranked below them cannot resolve anything,
|
|
100
|
+
* so reporting it only adds noise. This mirrors {@link pickHighestPriorityNotePath}'s conditions
|
|
101
|
+
* rather than re-deciding anything, so the two can only ever agree — whenever that names a winner,
|
|
102
|
+
* this returns exactly that one note.
|
|
103
|
+
*
|
|
104
|
+
* A list that decides nothing at all — empty, or matching no note — ranks every note
|
|
105
|
+
* {@link NO_PRIORITY_MATCH}, so they all tie and every one of them is kept. That is the same list the
|
|
106
|
+
* user saw before, which is correct: nothing has ruled any of them out.
|
|
107
|
+
*
|
|
108
|
+
* @param params - The referencing notes and how to rank one.
|
|
109
|
+
* @returns The notes holding the best rank, in the order they were given.
|
|
110
|
+
*/
|
|
111
|
+
export declare function filterHighestPriorityNotePaths(params: FilterHighestPriorityNotePathsParams): string[];
|
|
84
112
|
/**
|
|
85
113
|
* Explains why the priority list named no owner for an attachment.
|
|
86
114
|
*
|
|
@@ -53,6 +53,19 @@ var NoPriorityWinnerReason = /* @__PURE__ */ ((NoPriorityWinnerReason2) => {
|
|
|
53
53
|
return NoPriorityWinnerReason2;
|
|
54
54
|
})(NoPriorityWinnerReason || {});
|
|
55
55
|
const NO_PRIORITY_MATCH = Infinity;
|
|
56
|
+
function filterHighestPriorityNotePaths(params) {
|
|
57
|
+
const rankedNotePaths = params.notePaths.map((notePath) => ({
|
|
58
|
+
notePath,
|
|
59
|
+
rank: params.rank(notePath)
|
|
60
|
+
}));
|
|
61
|
+
let bestRank = NO_PRIORITY_MATCH;
|
|
62
|
+
for (const ranked of rankedNotePaths) {
|
|
63
|
+
if (ranked.rank < bestRank) {
|
|
64
|
+
bestRank = ranked.rank;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return rankedNotePaths.filter((ranked) => ranked.rank === bestRank).map((ranked) => ranked.notePath);
|
|
68
|
+
}
|
|
56
69
|
function findNoPriorityWinnerReason(params) {
|
|
57
70
|
if (params.entries.length === 0) {
|
|
58
71
|
return "EmptyList" /* EmptyList */;
|
|
@@ -139,8 +152,9 @@ function checkPropertyMatches(specifier, frontmatter) {
|
|
|
139
152
|
export {
|
|
140
153
|
NO_PRIORITY_MATCH,
|
|
141
154
|
NoPriorityWinnerReason,
|
|
155
|
+
filterHighestPriorityNotePaths,
|
|
142
156
|
findNoPriorityWinnerReason,
|
|
143
157
|
findNotePriorityRank,
|
|
144
158
|
pickHighestPriorityNotePath
|
|
145
159
|
};
|
|
146
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL25vdGUtcHJpb3JpdHkudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBEZWNpZGVzIHdoaWNoIG9mIHNldmVyYWwgbm90ZXMgcmVmZXJlbmNpbmcgdGhlIHNhbWUgYXR0YWNobWVudCBvd25zIGl0LlxuICpcbiAqIEFuIGF0dGFjaG1lbnQgcmVmZXJlbmNlZCBmcm9tIG1vcmUgdGhhbiBvbmUgbm90ZSBoYXMgbm8gc2luZ2xlIGNvcnJlY3QgaG9tZSwgc28gY29sbGVjdGluZyBpdCBmYWxsc1xuICogYmFjayB0byB3aGF0ZXZlciBgY29sbGVjdEF0dGFjaG1lbnRVc2VkQnlNdWx0aXBsZU5vdGVzTW9kZWAgc2F5cyBcdTIwMTQgc2tpcCwgY29weSwgY2FuY2VsLCBvciBhc2suIEFcbiAqIHByaW9yaXR5IGxpc3QgbGV0cyB0aGUgdXNlciBhbnN3ZXIgdGhlIHF1ZXN0aW9uIG9uY2UgaW5zdGVhZDogcHV0IGAubWRgIGFib3ZlIGAuZXhjYWxpZHJhd2AgYW5kIGFuXG4gKiBpbWFnZSBzaGFyZWQgYnkgYm90aCBsYW5kcyBpbiB0aGUgbWFya2Rvd24gbm90ZSdzIGZvbGRlci5cbiAqXG4gKiBBIHRpZSBpcyBkZWxpYmVyYXRlbHkgTk9UIHJlc29sdmVkIGhlcmUuIFR3byBub3RlcyBvZiBlcXVhbCBwcmlvcml0eSBpcyBleGFjdGx5IHRoZSBhbWJpZ3VpdHkgdGhlXG4gKiBleGlzdGluZyBtb2RlIHNldHRpbmcgYWxyZWFkeSBleGlzdHMgdG8gaGFuZGxlLCBhbmQgaW52ZW50aW5nIGEgc2Vjb25kLCBzaWxlbnQgcnVsZSBmb3IgaXQgd291bGRcbiAqIG1vdmUgYSBmaWxlIHRoZSB1c2VyIG5ldmVyIG5hbWVkLlxuICovXG5cbmltcG9ydCB7IGlzVmFsaWRSZWdFeHAgfSBmcm9tICcuLi9yZWctZXhwLnRzJztcblxuY29uc3QgUFJPUEVSVFlfUFJFRklYID0gJ3Byb3BlcnR5Oic7XG5jb25zdCBSRUdfRVhQX0RFTElNSVRFUiA9ICcvJztcbmNvbnN0IEVYVEVOU0lPTl9QUkVGSVggPSAnLic7XG5jb25zdCBQUk9QRVJUWV9WQUxVRV9TRVBBUkFUT1IgPSAnPSc7XG5cbi8qKlxuICogV2h5IHRoZSBwcmlvcml0eSBsaXN0IGRpZCBub3Qgc2V0dGxlIHdoaWNoIG5vdGUgb3ducyBhbiBhdHRhY2htZW50LlxuICpcbiAqIFRoZSB0aHJlZSB2YWx1ZXMgYXJlIGV4YWN0bHkgdGhlIHRocmVlIHdheXMge0BsaW5rIHBpY2tIaWdoZXN0UHJpb3JpdHlOb3RlUGF0aH0gKHBsdXMgaXRzIGVtcHR5LWxpc3RcbiAqIGd1YXJkKSBjYW4gZmFpbCB0byBuYW1lIGEgd2lubmVyLCBzbyBhIGNhbGxlciBjYW4gdGVsbCB0aGUgdXNlciB0aGUgcmVhbCByZWFzb24gaW5zdGVhZCBvZiBvbmx5XG4gKiByZXBvcnRpbmcgdGhhdCB0aGUgYXR0YWNobWVudCBpcyByZWZlcmVuY2VkIGJ5IHNldmVyYWwgbm90ZXMuXG4gKi9cbmV4cG9ydCBlbnVtIE5vUHJpb3JpdHlXaW5uZXJSZWFzb24ge1xuICAvKipcbiAgICogVGhlIHByaW9yaXR5IGxpc3QgaXMgZW1wdHkgXHUyMDE0IGl0cyBkZWZhdWx0LiBOb3RoaW5nIHdhcyBjb25maWd1cmVkIHRvIGRlY2lkZSBiZXR3ZWVuIHRoZSBub3Rlcy5cbiAgICovXG4gIEVtcHR5TGlzdCA9ICdFbXB0eUxpc3QnLFxuXG4gIC8qKlxuICAgKiBUaGUgbGlzdCBoYXMgZW50cmllcywgYnV0IG5vbmUgb2YgdGhlIHJlZmVyZW5jaW5nIG5vdGVzIG1hdGNoZXMgYW55IG9mIHRoZW0uXG4gICAqL1xuICBOb01hdGNoID0gJ05vTWF0Y2gnLFxuXG4gIC8qKlxuICAgKiBTZXZlcmFsIHJlZmVyZW5jaW5nIG5vdGVzIHRpZSBmb3IgdGhlIGJlc3QgcmFuaywgc28gdGhlIGxpc3QgbmFtZXMgbm8gc2luZ2xlIG93bmVyLlxuICAgKi9cbiAgVGllID0gJ1RpZSdcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZmluZE5vUHJpb3JpdHlXaW5uZXJSZWFzb259LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbmROb1ByaW9yaXR5V2lubmVyUmVhc29uUGFyYW1zIGV4dGVuZHMgUGlja0hpZ2hlc3RQcmlvcml0eU5vdGVQYXRoUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBwcmlvcml0eSBsaXN0LCBoaWdoZXN0IHByaW9yaXR5IGZpcnN0LlxuICAgKi9cbiAgcmVhZG9ubHkgZW50cmllczogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGZpbmROb3RlUHJpb3JpdHlSYW5rfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaW5kTm90ZVByaW9yaXR5UmFua1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgcHJpb3JpdHkgbGlzdCwgaGlnaGVzdCBwcmlvcml0eSBmaXJzdC5cbiAgICovXG4gIHJlYWRvbmx5IGVudHJpZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgbm90ZSdzIGZyb250bWF0dGVyLCBvciBgbnVsbGAgd2hlbiBpdCBoYXMgbm9uZS5cbiAgICovXG4gIHJlYWRvbmx5IGZyb250bWF0dGVyOiBudWxsIHwgUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuXG4gIC8qKlxuICAgKiBUaGUgdmF1bHQtcmVsYXRpdmUgcGF0aCBvZiB0aGUgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGVQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHBpY2tIaWdoZXN0UHJpb3JpdHlOb3RlUGF0aH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlja0hpZ2hlc3RQcmlvcml0eU5vdGVQYXRoUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSB2YXVsdC1yZWxhdGl2ZSBwYXRocyBvZiB0aGUgbm90ZXMgcmVmZXJlbmNpbmcgdGhlIGF0dGFjaG1lbnQuXG4gICAqL1xuICByZWFkb25seSBub3RlUGF0aHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpb3JpdHkgcmFuayBvZiBhIG5vdGUuIExvd2VyIHdpbnM7IHtAbGluayBOT19QUklPUklUWV9NQVRDSH0gbWVhbnMgdGhlIG5vdGUgbWF0Y2hlZCBub3RoaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gbm90ZVBhdGggLSBUaGUgdmF1bHQtcmVsYXRpdmUgcGF0aCBvZiB0aGUgbm90ZS5cbiAgICogQHJldHVybnMgVGhlIHJhbmsuXG4gICAqL1xuICByYW5rKG5vdGVQYXRoOiBzdHJpbmcpOiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIHJhbmsgb2YgYSBub3RlIHRoYXQgbWF0Y2hlcyBubyBlbnRyeSBpbiB0aGUgcHJpb3JpdHkgbGlzdC4gSGlnaGVyIHRoYW4gYW55IHJlYWwgcmFuaywgc28gYSBub3RlXG4gKiB0aGF0IG1hdGNoZXMgbm90aGluZyBhbHdheXMgbG9zZXMgdG8gb25lIHRoYXQgbWF0Y2hlcyBzb21ldGhpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBOT19QUklPUklUWV9NQVRDSCA9IEluZmluaXR5O1xuXG4vKipcbiAqIEV4cGxhaW5zIHdoeSB0aGUgcHJpb3JpdHkgbGlzdCBuYW1lZCBubyBvd25lciBmb3IgYW4gYXR0YWNobWVudC5cbiAqXG4gKiBPbmx5IG1lYW5pbmdmdWwgb25jZSB7QGxpbmsgcGlja0hpZ2hlc3RQcmlvcml0eU5vdGVQYXRofSBoYXMgcmV0dXJuZWQgYG51bGxgIChvciB0aGUgbGlzdCB3YXMgZW1wdHlcbiAqIGFuZCB3YXMgbmV2ZXIgY29uc3VsdGVkKTsgaXQgbWlycm9ycyB0aGF0IGZ1bmN0aW9uJ3Mgb3duIGNvbmRpdGlvbnMgcmF0aGVyIHRoYW4gcmUtZGVjaWRpbmdcbiAqIGFueXRoaW5nLCBzbyB0aGUgdHdvIGNhbiBvbmx5IGV2ZXIgYWdyZWUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwcmlvcml0eSBsaXN0LCB0aGUgcmVmZXJlbmNpbmcgbm90ZXMsIGFuZCBob3cgdG8gcmFuayBvbmUuXG4gKiBAcmV0dXJucyBXaGljaCBvZiB0aGUgdGhyZWUgd2F5cyB0aGUgbGlzdCBmYWlsZWQgdG8gc2V0dGxlIGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZE5vUHJpb3JpdHlXaW5uZXJSZWFzb24ocGFyYW1zOiBGaW5kTm9Qcmlvcml0eVdpbm5lclJlYXNvblBhcmFtcyk6IE5vUHJpb3JpdHlXaW5uZXJSZWFzb24ge1xuICBpZiAocGFyYW1zLmVudHJpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIE5vUHJpb3JpdHlXaW5uZXJSZWFzb24uRW1wdHlMaXN0O1xuICB9XG5cbiAgbGV0IGJlc3RSYW5rID0gTk9fUFJJT1JJVFlfTUFUQ0g7XG4gIGZvciAoY29uc3Qgbm90ZVBhdGggb2YgcGFyYW1zLm5vdGVQYXRocykge1xuICAgIGNvbnN0IGN1cnJlbnRSYW5rID0gcGFyYW1zLnJhbmsobm90ZVBhdGgpO1xuICAgIGlmIChjdXJyZW50UmFuayA8IGJlc3RSYW5rKSB7XG4gICAgICBiZXN0UmFuayA9IGN1cnJlbnRSYW5rO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBiZXN0UmFuayA9PT0gTk9fUFJJT1JJVFlfTUFUQ0ggPyBOb1ByaW9yaXR5V2lubmVyUmVhc29uLk5vTWF0Y2ggOiBOb1ByaW9yaXR5V2lubmVyUmVhc29uLlRpZTtcbn1cblxuLyoqXG4gKiBGaW5kcyBob3cgaGlnaGx5IGEgbm90ZSByYW5rcyBpbiB0aGUgcHJpb3JpdHkgbGlzdC5cbiAqXG4gKiBBbiBlbnRyeSBtYXRjaGVzIGluIG9uZSBvZiBmb3VyIHdheXMsIHBpY2tlZCBieSBpdHMgc2hhcGUgc28gdGhhdCBvbmUgbGlzdCBjYW4gZXhwcmVzcyBhbGwgb2YgdGhlbTpcbiAqXG4gKiAtIGBwcm9wZXJ0eTpuYW1lYCBcdTIwMTQgdGhlIG5vdGUncyBmcm9udG1hdHRlciBoYXMgYG5hbWVgOyBgcHJvcGVydHk6bmFtZT12YWx1ZWAgYWxzbyBjb21wYXJlcyB0aGUgdmFsdWUuXG4gKiAtIGAvcmVndWxhciBleHByZXNzaW9uL2AgXHUyMDE0IHRlc3RlZCBhZ2FpbnN0IHRoZSBub3RlJ3MgcGF0aC5cbiAqIC0gYC5leHRgIFx1MjAxNCB0aGUgbm90ZSdzIHBhdGggZW5kcyB3aXRoIGl0LCBjYXNlLWluc2Vuc2l0aXZlbHkuIFRoaXMgaXMgdGhlIGZvcm0gdGhlIHJlcXVlc3QgYXNrZWQgZm9yLlxuICogLSBhbnl0aGluZyBlbHNlIFx1MjAxNCBhIHBhdGggZnJvbSB0aGUgdmF1bHQgcm9vdCwgbWF0Y2hpbmcgdGhlIHZvY2FidWxhcnkgb2YgdGhlIGluY2x1ZGUgLyBleGNsdWRlXG4gKiAgIHBhdGggc2V0dGluZ3MuXG4gKlxuICogV2hlbiBhIG5vdGUgbWF0Y2hlcyBzZXZlcmFsIGVudHJpZXMgdGhlICoqbG9uZ2VzdCoqIG9uZSBkZWNpZGVzIGl0cyByYW5rLCBzbyB0aGUgbW9zdCBzcGVjaWZpY1xuICogZW50cnkgd2lucyBhbmQgdGhlIG9yZGVyIG9mIHRoZSBsaXN0IGlzIGxlZnQgdG8gZXhwcmVzcyBwcmlvcml0eS4gV2l0aG91dCB0aGlzIGFuIEV4Y2FsaWRyYXcgbm90ZVxuICogY291bGQgbmV2ZXIgcmFuayBiZWxvdyBhIHBsYWluIG1hcmtkb3duIG9uZTogYGRyYXdpbmcuZXhjYWxpZHJhdy5tZGAgYWxzbyBlbmRzIHdpdGggYC5tZGAsIHNvXG4gKiBgLm1kYCBhYm92ZSBgLmV4Y2FsaWRyYXcubWRgIFx1MjAxNCB0aGUgdmVyeSBleGFtcGxlIHRoZSByZXF1ZXN0IGlzIGJ1aWx0IG9uIFx1MjAxNCB3b3VsZCB0aWUgaW5zdGVhZCBvZlxuICogcmVzb2x2aW5nLiBFcXVhbC1sZW5ndGggbWF0Y2hlcyBmYWxsIHRvIHRoZSBlYXJsaWVyIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgZmluZGluZyB0aGUgcmFuay5cbiAqIEByZXR1cm5zIFRoZSBpbmRleCBvZiB0aGUgbW9zdCBzcGVjaWZpYyBtYXRjaGluZyBlbnRyeSwgb3Ige0BsaW5rIE5PX1BSSU9SSVRZX01BVENIfSB3aGVuIG5vbmUgbWF0Y2guXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTm90ZVByaW9yaXR5UmFuayhwYXJhbXM6IEZpbmROb3RlUHJpb3JpdHlSYW5rUGFyYW1zKTogbnVtYmVyIHtcbiAgbGV0IGJlc3RSYW5rID0gTk9fUFJJT1JJVFlfTUFUQ0g7XG4gIGxldCBiZXN0TGVuZ3RoID0gLTE7XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIGVudHJ5XSBvZiBwYXJhbXMuZW50cmllcy5lbnRyaWVzKCkpIHtcbiAgICAvLyBBIHNob3J0ZXIgZW50cnkgY2FuIG5ldmVyIGJlYXQgb25lIHRoYXQgYWxyZWFkeSBtYXRjaGVkLCBzbyBpdCBpcyBub3Qgd29ydGggdGVzdGluZy5cbiAgICBpZiAoZW50cnkubGVuZ3RoIDw9IGJlc3RMZW5ndGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICghY2hlY2tFbnRyeU1hdGNoZXMoZW50cnksIHBhcmFtcykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGJlc3RSYW5rID0gaW5kZXg7XG4gICAgYmVzdExlbmd0aCA9IGVudHJ5Lmxlbmd0aDtcbiAgfVxuXG4gIHJldHVybiBiZXN0UmFuaztcbn1cblxuLyoqXG4gKiBQaWNrcyB0aGUgc2luZ2xlIGhpZ2hlc3QtcHJpb3JpdHkgbm90ZSBhbW9uZyB0aG9zZSByZWZlcmVuY2luZyBhbiBhdHRhY2htZW50LlxuICpcbiAqIFJldHVybnMgYG51bGxgIHdoZW4gdGhlIGJlc3QgcmFuayBpcyBzaGFyZWQgYnkgbW9yZSB0aGFuIG9uZSBub3RlLCBvciB3aGVuIG5vIG5vdGUgbWF0Y2hlc1xuICogYW55dGhpbmcuIEJvdGggYXJlIHRpZXMsIGFuZCBhIHRpZSBpcyB0aGUgY2FsbGVyJ3MgcHJvYmxlbTogaXQgaXMgd2hhdCB0aGUgbXVsdGlwbGUtbm90ZXMgbW9kZVxuICogc2V0dGluZyBpcyBmb3IuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBwaWNraW5nIHRoZSBub3RlLlxuICogQHJldHVybnMgVGhlIHdpbm5pbmcgbm90ZSdzIHBhdGgsIG9yIGBudWxsYCB3aGVuIHRoZXJlIGlzIG5vIHNpbmdsZSB3aW5uZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaWNrSGlnaGVzdFByaW9yaXR5Tm90ZVBhdGgocGFyYW1zOiBQaWNrSGlnaGVzdFByaW9yaXR5Tm90ZVBhdGhQYXJhbXMpOiBudWxsIHwgc3RyaW5nIHtcbiAgbGV0IGJlc3RSYW5rID0gTk9fUFJJT1JJVFlfTUFUQ0g7XG4gIGxldCBiZXN0Tm90ZVBhdGg6IG51bGwgfCBzdHJpbmcgPSBudWxsO1xuICBsZXQgYmVzdENvdW50ID0gMDtcblxuICBmb3IgKGNvbnN0IG5vdGVQYXRoIG9mIHBhcmFtcy5ub3RlUGF0aHMpIHtcbiAgICBjb25zdCBjdXJyZW50UmFuayA9IHBhcmFtcy5yYW5rKG5vdGVQYXRoKTtcbiAgICBpZiAoY3VycmVudFJhbmsgPCBiZXN0UmFuaykge1xuICAgICAgYmVzdFJhbmsgPSBjdXJyZW50UmFuaztcbiAgICAgIGJlc3ROb3RlUGF0aCA9IG5vdGVQYXRoO1xuICAgICAgYmVzdENvdW50ID0gMTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRSYW5rID09PSBiZXN0UmFuaykge1xuICAgICAgYmVzdENvdW50Kys7XG4gICAgfVxuICB9XG5cbiAgaWYgKGJlc3RDb3VudCAhPT0gMSB8fCBiZXN0UmFuayA9PT0gTk9fUFJJT1JJVFlfTUFUQ0gpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBiZXN0Tm90ZVBhdGg7XG59XG5cbmZ1bmN0aW9uIGNoZWNrRW50cnlNYXRjaGVzKGVudHJ5OiBzdHJpbmcsIHBhcmFtczogRmluZE5vdGVQcmlvcml0eVJhbmtQYXJhbXMpOiBib29sZWFuIHtcbiAgaWYgKCFlbnRyeSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChlbnRyeS5zdGFydHNXaXRoKFBST1BFUlRZX1BSRUZJWCkpIHtcbiAgICByZXR1cm4gY2hlY2tQcm9wZXJ0eU1hdGNoZXMoZW50cnkuc2xpY2UoUFJPUEVSVFlfUFJFRklYLmxlbmd0aCksIHBhcmFtcy5mcm9udG1hdHRlcik7XG4gIH1cblxuICBpZiAoZW50cnkubGVuZ3RoID4gMSAmJiBlbnRyeS5zdGFydHNXaXRoKFJFR19FWFBfREVMSU1JVEVSKSAmJiBlbnRyeS5lbmRzV2l0aChSRUdfRVhQX0RFTElNSVRFUikpIHtcbiAgICBjb25zdCBzb3VyY2UgPSBlbnRyeS5zbGljZSgxLCAtMSk7XG4gICAgLy8gQW4gdW5wYXJzZWFibGUgZXhwcmVzc2lvbiBtdXN0IG5vdCB0aHJvdyBtaWQtY29sbGVjdGlvbjsgaXQgc2ltcGx5IG1hdGNoZXMgbm90aGluZy5cbiAgICByZXR1cm4gaXNWYWxpZFJlZ0V4cChzb3VyY2UpICYmIG5ldyBSZWdFeHAoc291cmNlKS50ZXN0KHBhcmFtcy5ub3RlUGF0aCk7XG4gIH1cblxuICBpZiAoZW50cnkuc3RhcnRzV2l0aChFWFRFTlNJT05fUFJFRklYKSkge1xuICAgIHJldHVybiBwYXJhbXMubm90ZVBhdGgudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChlbnRyeS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIGNvbnN0IHByZWZpeCA9IGVudHJ5LmVuZHNXaXRoKCcvJykgPyBlbnRyeSA6IGAke2VudHJ5fS9gO1xuICByZXR1cm4gcGFyYW1zLm5vdGVQYXRoID09PSBlbnRyeSB8fCBwYXJhbXMubm90ZVBhdGguc3RhcnRzV2l0aChwcmVmaXgpO1xufVxuXG5mdW5jdGlvbiBjaGVja1Byb3BlcnR5TWF0Y2hlcyhzcGVjaWZpZXI6IHN0cmluZywgZnJvbnRtYXR0ZXI6IG51bGwgfCBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4pOiBib29sZWFuIHtcbiAgaWYgKCFmcm9udG1hdHRlcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHNlcGFyYXRvckluZGV4ID0gc3BlY2lmaWVyLmluZGV4T2YoUFJPUEVSVFlfVkFMVUVfU0VQQVJBVE9SKTtcbiAgaWYgKHNlcGFyYXRvckluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiBPYmplY3QuaGFzT3duKGZyb250bWF0dGVyLCBzcGVjaWZpZXIpO1xuICB9XG5cbiAgY29uc3QgcHJvcGVydHlOYW1lID0gc3BlY2lmaWVyLnNsaWNlKDAsIHNlcGFyYXRvckluZGV4KTtcbiAgY29uc3QgZXhwZWN0ZWRWYWx1ZSA9IHNwZWNpZmllci5zbGljZShzZXBhcmF0b3JJbmRleCArIDEpO1xuICBpZiAoIU9iamVjdC5oYXNPd24oZnJvbnRtYXR0ZXIsIHByb3BlcnR5TmFtZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBhY3R1YWxWYWx1ZSA9IGZyb250bWF0dGVyW3Byb3BlcnR5TmFtZV07XG4gIC8vIEZyb250bWF0dGVyIHZhbHVlcyBhcmUgd2hhdGV2ZXIgWUFNTCBwcm9kdWNlZCwgc28gY29tcGFyZSB0aGVpciByZW5kZXJpbmcgcmF0aGVyIHRoYW4gcmVxdWlyaW5nIGFcbiAgLy8gU3RyaW5nLiBBbiBhcnJheSBtYXRjaGVzIHdoZW4gYW55IG9mIGl0cyBlbnRyaWVzIGRvZXMsIHdoaWNoIGlzIGhvdyB0YWctbGlrZSBwcm9wZXJ0aWVzIHJlYWQuXG4gIGlmIChBcnJheS5pc0FycmF5KGFjdHVhbFZhbHVlKSkge1xuICAgIHJldHVybiBhY3R1YWxWYWx1ZS5zb21lKChpdGVtKSA9PiBTdHJpbmcoaXRlbSkgPT09IGV4cGVjdGVkVmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIFN0cmluZyhhY3R1YWxWYWx1ZSkgPT09IGV4cGVjdGVkVmFsdWU7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZUEsU0FBUyxxQkFBcUI7QUFFOUIsTUFBTSxrQkFBa0I7QUFDeEIsTUFBTSxvQkFBb0I7QUFDMUIsTUFBTSxtQkFBbUI7QUFDekIsTUFBTSwyQkFBMkI7QUFTMUIsSUFBSyx5QkFBTCxrQkFBS0EsNEJBQUw7QUFJTCxFQUFBQSx3QkFBQSxlQUFZO0FBS1osRUFBQUEsd0JBQUEsYUFBVTtBQUtWLEVBQUFBLHdCQUFBLFNBQU07QUFkSSxTQUFBQTtBQUFBLEdBQUE7QUFxRUwsTUFBTSxvQkFBb0I7QUFZMUIsU0FBUywyQkFBMkIsUUFBa0U7QUFDM0csTUFBSSxPQUFPLFFBQVEsV0FBVyxHQUFHO0FBQy9CLFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBSSxXQUFXO0FBQ2YsYUFBVyxZQUFZLE9BQU8sV0FBVztBQUN2QyxVQUFNLGNBQWMsT0FBTyxLQUFLLFFBQVE7QUFDeEMsUUFBSSxjQUFjLFVBQVU7QUFDMUIsaUJBQVc7QUFBQSxJQUNiO0FBQUEsRUFDRjtBQUVBLFNBQU8sYUFBYSxvQkFBb0IsMEJBQWlDO0FBQzNFO0FBc0JPLFNBQVMscUJBQXFCLFFBQTRDO0FBQy9FLE1BQUksV0FBVztBQUNmLE1BQUksYUFBYTtBQUVqQixhQUFXLENBQUMsT0FBTyxLQUFLLEtBQUssT0FBTyxRQUFRLFFBQVEsR0FBRztBQUVyRCxRQUFJLE1BQU0sVUFBVSxZQUFZO0FBQzlCO0FBQUEsSUFDRjtBQUVBLFFBQUksQ0FBQyxrQkFBa0IsT0FBTyxNQUFNLEdBQUc7QUFDckM7QUFBQSxJQUNGO0FBRUEsZUFBVztBQUNYLGlCQUFhLE1BQU07QUFBQSxFQUNyQjtBQUVBLFNBQU87QUFDVDtBQVlPLFNBQVMsNEJBQTRCLFFBQTBEO0FBQ3BHLE1BQUksV0FBVztBQUNmLE1BQUksZUFBOEI7QUFDbEMsTUFBSSxZQUFZO0FBRWhCLGFBQVcsWUFBWSxPQUFPLFdBQVc7QUFDdkMsVUFBTSxjQUFjLE9BQU8sS0FBSyxRQUFRO0FBQ3hDLFFBQUksY0FBYyxVQUFVO0FBQzFCLGlCQUFXO0FBQ1gscUJBQWU7QUFDZixrQkFBWTtBQUFBLElBQ2QsV0FBVyxnQkFBZ0IsVUFBVTtBQUNuQztBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsTUFBSSxjQUFjLEtBQUssYUFBYSxtQkFBbUI7QUFDckQsV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPO0FBQ1Q7QUFFQSxTQUFTLGtCQUFrQixPQUFlLFFBQTZDO0FBQ3JGLE1BQUksQ0FBQyxPQUFPO0FBQ1YsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJLE1BQU0sV0FBVyxlQUFlLEdBQUc7QUFDckMsV0FBTyxxQkFBcUIsTUFBTSxNQUFNLGdCQUFnQixNQUFNLEdBQUcsT0FBTyxXQUFXO0FBQUEsRUFDckY7QUFFQSxNQUFJLE1BQU0sU0FBUyxLQUFLLE1BQU0sV0FBVyxpQkFBaUIsS0FBSyxNQUFNLFNBQVMsaUJBQWlCLEdBQUc7QUFDaEcsVUFBTSxTQUFTLE1BQU0sTUFBTSxHQUFHLEVBQUU7QUFFaEMsV0FBTyxjQUFjLE1BQU0sS0FBSyxJQUFJLE9BQU8sTUFBTSxFQUFFLEtBQUssT0FBTyxRQUFRO0FBQUEsRUFDekU7QUFFQSxNQUFJLE1BQU0sV0FBVyxnQkFBZ0IsR0FBRztBQUN0QyxXQUFPLE9BQU8sU0FBUyxZQUFZLEVBQUUsU0FBUyxNQUFNLFlBQVksQ0FBQztBQUFBLEVBQ25FO0FBRUEsUUFBTSxTQUFTLE1BQU0sU0FBUyxHQUFHLElBQUksUUFBUSxHQUFHLEtBQUs7QUFDckQsU0FBTyxPQUFPLGFBQWEsU0FBUyxPQUFPLFNBQVMsV0FBVyxNQUFNO0FBQ3ZFO0FBRUEsU0FBUyxxQkFBcUIsV0FBbUIsYUFBZ0U7QUFDL0csTUFBSSxDQUFDLGFBQWE7QUFDaEIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLGlCQUFpQixVQUFVLFFBQVEsd0JBQXdCO0FBQ2pFLE1BQUksbUJBQW1CLElBQUk7QUFDekIsV0FBTyxPQUFPLE9BQU8sYUFBYSxTQUFTO0FBQUEsRUFDN0M7QUFFQSxRQUFNLGVBQWUsVUFBVSxNQUFNLEdBQUcsY0FBYztBQUN0RCxRQUFNLGdCQUFnQixVQUFVLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsTUFBSSxDQUFDLE9BQU8sT0FBTyxhQUFhLFlBQVksR0FBRztBQUM3QyxXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sY0FBYyxZQUFZLFlBQVk7QUFHNUMsTUFBSSxNQUFNLFFBQVEsV0FBVyxHQUFHO0FBQzlCLFdBQU8sWUFBWSxLQUFLLENBQUMsU0FBUyxPQUFPLElBQUksTUFBTSxhQUFhO0FBQUEsRUFDbEU7QUFFQSxTQUFPLE9BQU8sV0FBVyxNQUFNO0FBQ2pDOyIsCiAgIm5hbWVzIjogWyJOb1ByaW9yaXR5V2lubmVyUmVhc29uIl0KfQo=
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL25vdGUtcHJpb3JpdHkudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBEZWNpZGVzIHdoaWNoIG9mIHNldmVyYWwgbm90ZXMgcmVmZXJlbmNpbmcgdGhlIHNhbWUgYXR0YWNobWVudCBvd25zIGl0LlxuICpcbiAqIEFuIGF0dGFjaG1lbnQgcmVmZXJlbmNlZCBmcm9tIG1vcmUgdGhhbiBvbmUgbm90ZSBoYXMgbm8gc2luZ2xlIGNvcnJlY3QgaG9tZSwgc28gY29sbGVjdGluZyBpdCBmYWxsc1xuICogYmFjayB0byB3aGF0ZXZlciBgY29sbGVjdEF0dGFjaG1lbnRVc2VkQnlNdWx0aXBsZU5vdGVzTW9kZWAgc2F5cyBcdTIwMTQgc2tpcCwgY29weSwgY2FuY2VsLCBvciBhc2suIEFcbiAqIHByaW9yaXR5IGxpc3QgbGV0cyB0aGUgdXNlciBhbnN3ZXIgdGhlIHF1ZXN0aW9uIG9uY2UgaW5zdGVhZDogcHV0IGAubWRgIGFib3ZlIGAuZXhjYWxpZHJhd2AgYW5kIGFuXG4gKiBpbWFnZSBzaGFyZWQgYnkgYm90aCBsYW5kcyBpbiB0aGUgbWFya2Rvd24gbm90ZSdzIGZvbGRlci5cbiAqXG4gKiBBIHRpZSBpcyBkZWxpYmVyYXRlbHkgTk9UIHJlc29sdmVkIGhlcmUuIFR3byBub3RlcyBvZiBlcXVhbCBwcmlvcml0eSBpcyBleGFjdGx5IHRoZSBhbWJpZ3VpdHkgdGhlXG4gKiBleGlzdGluZyBtb2RlIHNldHRpbmcgYWxyZWFkeSBleGlzdHMgdG8gaGFuZGxlLCBhbmQgaW52ZW50aW5nIGEgc2Vjb25kLCBzaWxlbnQgcnVsZSBmb3IgaXQgd291bGRcbiAqIG1vdmUgYSBmaWxlIHRoZSB1c2VyIG5ldmVyIG5hbWVkLlxuICpcbiAqIFRoZSB0aWUgaXMgYWxzbyB0aGUgd2hvbGUgb2Ygd2hhdCBnZXRzIFJFUE9SVEVELiBBIG5vdGUgdGhlIGxpc3QgcmFua2VkIGJlbG93IHRoZSBiZXN0IHJhbmsgY2Fubm90XG4gKiByZXNvbHZlIHRoZSBhbWJpZ3VpdHksIHNvIGxpc3RpbmcgaXQgb25seSBhZGRzIG5vaXNlIFx1MjAxNCBhbmQgd29yc2UgaW4gYSBwaWNrZXIsIHdoZXJlIG9mZmVyaW5nIGl0XG4gKiBpbnZpdGVzIGFuIGFuc3dlciB0aGUgcHJpb3JpdHkgbGlzdCBpdHNlbGYgd291bGQgbm90IGhhdmUgZ2l2ZW4uIFRoYXQgaXMgd2h5XG4gKiB7QGxpbmsgZmlsdGVySGlnaGVzdFByaW9yaXR5Tm90ZVBhdGhzfSBleGlzdHMgYWxvbmdzaWRlIHRoZSB0d28gZnVuY3Rpb25zIHRoYXQgZGVjaWRlLlxuICovXG5cbmltcG9ydCB7IGlzVmFsaWRSZWdFeHAgfSBmcm9tICcuLi9yZWctZXhwLnRzJztcblxuY29uc3QgUFJPUEVSVFlfUFJFRklYID0gJ3Byb3BlcnR5Oic7XG5jb25zdCBSRUdfRVhQX0RFTElNSVRFUiA9ICcvJztcbmNvbnN0IEVYVEVOU0lPTl9QUkVGSVggPSAnLic7XG5jb25zdCBQUk9QRVJUWV9WQUxVRV9TRVBBUkFUT1IgPSAnPSc7XG5cbi8qKlxuICogV2h5IHRoZSBwcmlvcml0eSBsaXN0IGRpZCBub3Qgc2V0dGxlIHdoaWNoIG5vdGUgb3ducyBhbiBhdHRhY2htZW50LlxuICpcbiAqIFRoZSB0aHJlZSB2YWx1ZXMgYXJlIGV4YWN0bHkgdGhlIHRocmVlIHdheXMge0BsaW5rIHBpY2tIaWdoZXN0UHJpb3JpdHlOb3RlUGF0aH0gKHBsdXMgaXRzIGVtcHR5LWxpc3RcbiAqIGd1YXJkKSBjYW4gZmFpbCB0byBuYW1lIGEgd2lubmVyLCBzbyBhIGNhbGxlciBjYW4gdGVsbCB0aGUgdXNlciB0aGUgcmVhbCByZWFzb24gaW5zdGVhZCBvZiBvbmx5XG4gKiByZXBvcnRpbmcgdGhhdCB0aGUgYXR0YWNobWVudCBpcyByZWZlcmVuY2VkIGJ5IHNldmVyYWwgbm90ZXMuXG4gKi9cbmV4cG9ydCBlbnVtIE5vUHJpb3JpdHlXaW5uZXJSZWFzb24ge1xuICAvKipcbiAgICogVGhlIHByaW9yaXR5IGxpc3QgaXMgZW1wdHkgXHUyMDE0IGl0cyBkZWZhdWx0LiBOb3RoaW5nIHdhcyBjb25maWd1cmVkIHRvIGRlY2lkZSBiZXR3ZWVuIHRoZSBub3Rlcy5cbiAgICovXG4gIEVtcHR5TGlzdCA9ICdFbXB0eUxpc3QnLFxuXG4gIC8qKlxuICAgKiBUaGUgbGlzdCBoYXMgZW50cmllcywgYnV0IG5vbmUgb2YgdGhlIHJlZmVyZW5jaW5nIG5vdGVzIG1hdGNoZXMgYW55IG9mIHRoZW0uXG4gICAqL1xuICBOb01hdGNoID0gJ05vTWF0Y2gnLFxuXG4gIC8qKlxuICAgKiBTZXZlcmFsIHJlZmVyZW5jaW5nIG5vdGVzIHRpZSBmb3IgdGhlIGJlc3QgcmFuaywgc28gdGhlIGxpc3QgbmFtZXMgbm8gc2luZ2xlIG93bmVyLlxuICAgKi9cbiAgVGllID0gJ1RpZSdcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZmlsdGVySGlnaGVzdFByaW9yaXR5Tm90ZVBhdGhzfS5cbiAqXG4gKiBUaGUgc2FtZSBxdWVzdGlvbiBhcyB7QGxpbmsgcGlja0hpZ2hlc3RQcmlvcml0eU5vdGVQYXRofSBhc2tzLCBzbyBkZWxpYmVyYXRlbHkgdGhlIHNhbWUgcGFyYW1ldGVyczpcbiAqIHRoZSB0d28gbXVzdCBiZSBhbnN3ZXJlZCBmcm9tIGlkZW50aWNhbCBpbnB1dHMgb3IgdGhleSBjb3VsZCBkaXNhZ3JlZS5cbiAqL1xuZXhwb3J0IHR5cGUgRmlsdGVySGlnaGVzdFByaW9yaXR5Tm90ZVBhdGhzUGFyYW1zID0gUGlja0hpZ2hlc3RQcmlvcml0eU5vdGVQYXRoUGFyYW1zO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBmaW5kTm9Qcmlvcml0eVdpbm5lclJlYXNvbn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmluZE5vUHJpb3JpdHlXaW5uZXJSZWFzb25QYXJhbXMgZXh0ZW5kcyBQaWNrSGlnaGVzdFByaW9yaXR5Tm90ZVBhdGhQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHByaW9yaXR5IGxpc3QsIGhpZ2hlc3QgcHJpb3JpdHkgZmlyc3QuXG4gICAqL1xuICByZWFkb25seSBlbnRyaWVzOiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZmluZE5vdGVQcmlvcml0eVJhbmt9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbmROb3RlUHJpb3JpdHlSYW5rUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBwcmlvcml0eSBsaXN0LCBoaWdoZXN0IHByaW9yaXR5IGZpcnN0LlxuICAgKi9cbiAgcmVhZG9ubHkgZW50cmllczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBub3RlJ3MgZnJvbnRtYXR0ZXIsIG9yIGBudWxsYCB3aGVuIGl0IGhhcyBub25lLlxuICAgKi9cbiAgcmVhZG9ubHkgZnJvbnRtYXR0ZXI6IG51bGwgfCBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG5cbiAgLyoqXG4gICAqIFRoZSB2YXVsdC1yZWxhdGl2ZSBwYXRoIG9mIHRoZSBub3RlLlxuICAgKi9cbiAgcmVhZG9ubHkgbm90ZVBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcGlja0hpZ2hlc3RQcmlvcml0eU5vdGVQYXRofS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaWNrSGlnaGVzdFByaW9yaXR5Tm90ZVBhdGhQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHZhdWx0LXJlbGF0aXZlIHBhdGhzIG9mIHRoZSBub3RlcyByZWZlcmVuY2luZyB0aGUgYXR0YWNobWVudC5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGVQYXRoczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwcmlvcml0eSByYW5rIG9mIGEgbm90ZS4gTG93ZXIgd2luczsge0BsaW5rIE5PX1BSSU9SSVRZX01BVENIfSBtZWFucyB0aGUgbm90ZSBtYXRjaGVkIG5vdGhpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBub3RlUGF0aCAtIFRoZSB2YXVsdC1yZWxhdGl2ZSBwYXRoIG9mIHRoZSBub3RlLlxuICAgKiBAcmV0dXJucyBUaGUgcmFuay5cbiAgICovXG4gIHJhbmsobm90ZVBhdGg6IHN0cmluZyk6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgcmFuayBvZiBhIG5vdGUgdGhhdCBtYXRjaGVzIG5vIGVudHJ5IGluIHRoZSBwcmlvcml0eSBsaXN0LiBIaWdoZXIgdGhhbiBhbnkgcmVhbCByYW5rLCBzbyBhIG5vdGVcbiAqIHRoYXQgbWF0Y2hlcyBub3RoaW5nIGFsd2F5cyBsb3NlcyB0byBvbmUgdGhhdCBtYXRjaGVzIHNvbWV0aGluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IE5PX1BSSU9SSVRZX01BVENIID0gSW5maW5pdHk7XG5cbi8qKlxuICogTmFycm93cyB0aGUgcmVmZXJlbmNpbmcgbm90ZXMgdG8gdGhlIG9uZXMgc2hhcmluZyB0aGUgYmVzdCByYW5rLlxuICpcbiAqIFRob3NlIG5vdGVzIGFyZSB0aGUgd2hvbGUgb2YgdGhlIGFtYmlndWl0eTogb25lIHRoZSBsaXN0IHJhbmtlZCBiZWxvdyB0aGVtIGNhbm5vdCByZXNvbHZlIGFueXRoaW5nLFxuICogc28gcmVwb3J0aW5nIGl0IG9ubHkgYWRkcyBub2lzZS4gVGhpcyBtaXJyb3JzIHtAbGluayBwaWNrSGlnaGVzdFByaW9yaXR5Tm90ZVBhdGh9J3MgY29uZGl0aW9uc1xuICogcmF0aGVyIHRoYW4gcmUtZGVjaWRpbmcgYW55dGhpbmcsIHNvIHRoZSB0d28gY2FuIG9ubHkgZXZlciBhZ3JlZSBcdTIwMTQgd2hlbmV2ZXIgdGhhdCBuYW1lcyBhIHdpbm5lcixcbiAqIHRoaXMgcmV0dXJucyBleGFjdGx5IHRoYXQgb25lIG5vdGUuXG4gKlxuICogQSBsaXN0IHRoYXQgZGVjaWRlcyBub3RoaW5nIGF0IGFsbCBcdTIwMTQgZW1wdHksIG9yIG1hdGNoaW5nIG5vIG5vdGUgXHUyMDE0IHJhbmtzIGV2ZXJ5IG5vdGVcbiAqIHtAbGluayBOT19QUklPUklUWV9NQVRDSH0sIHNvIHRoZXkgYWxsIHRpZSBhbmQgZXZlcnkgb25lIG9mIHRoZW0gaXMga2VwdC4gVGhhdCBpcyB0aGUgc2FtZSBsaXN0IHRoZVxuICogdXNlciBzYXcgYmVmb3JlLCB3aGljaCBpcyBjb3JyZWN0OiBub3RoaW5nIGhhcyBydWxlZCBhbnkgb2YgdGhlbSBvdXQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSByZWZlcmVuY2luZyBub3RlcyBhbmQgaG93IHRvIHJhbmsgb25lLlxuICogQHJldHVybnMgVGhlIG5vdGVzIGhvbGRpbmcgdGhlIGJlc3QgcmFuaywgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBnaXZlbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckhpZ2hlc3RQcmlvcml0eU5vdGVQYXRocyhwYXJhbXM6IEZpbHRlckhpZ2hlc3RQcmlvcml0eU5vdGVQYXRoc1BhcmFtcyk6IHN0cmluZ1tdIHtcbiAgLy8gUmFua2luZyBjYW4gaGl0IHRoZSB2YXVsdCBhbmQgdGhlIG1ldGFkYXRhIGNhY2hlLCBzbyBlYWNoIG5vdGUgaXMgcmFua2VkIG9uY2UgYW5kIGNhcnJpZWQuXG4gIGNvbnN0IHJhbmtlZE5vdGVQYXRocyA9IHBhcmFtcy5ub3RlUGF0aHMubWFwKChub3RlUGF0aCkgPT4gKHtcbiAgICBub3RlUGF0aCxcbiAgICByYW5rOiBwYXJhbXMucmFuayhub3RlUGF0aClcbiAgfSkpO1xuXG4gIGxldCBiZXN0UmFuayA9IE5PX1BSSU9SSVRZX01BVENIO1xuICBmb3IgKGNvbnN0IHJhbmtlZCBvZiByYW5rZWROb3RlUGF0aHMpIHtcbiAgICBpZiAocmFua2VkLnJhbmsgPCBiZXN0UmFuaykge1xuICAgICAgYmVzdFJhbmsgPSByYW5rZWQucmFuaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmFua2VkTm90ZVBhdGhzXG4gICAgLmZpbHRlcigocmFua2VkKSA9PiByYW5rZWQucmFuayA9PT0gYmVzdFJhbmspXG4gICAgLm1hcCgocmFua2VkKSA9PiByYW5rZWQubm90ZVBhdGgpO1xufVxuXG4vKipcbiAqIEV4cGxhaW5zIHdoeSB0aGUgcHJpb3JpdHkgbGlzdCBuYW1lZCBubyBvd25lciBmb3IgYW4gYXR0YWNobWVudC5cbiAqXG4gKiBPbmx5IG1lYW5pbmdmdWwgb25jZSB7QGxpbmsgcGlja0hpZ2hlc3RQcmlvcml0eU5vdGVQYXRofSBoYXMgcmV0dXJuZWQgYG51bGxgIChvciB0aGUgbGlzdCB3YXMgZW1wdHlcbiAqIGFuZCB3YXMgbmV2ZXIgY29uc3VsdGVkKTsgaXQgbWlycm9ycyB0aGF0IGZ1bmN0aW9uJ3Mgb3duIGNvbmRpdGlvbnMgcmF0aGVyIHRoYW4gcmUtZGVjaWRpbmdcbiAqIGFueXRoaW5nLCBzbyB0aGUgdHdvIGNhbiBvbmx5IGV2ZXIgYWdyZWUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwcmlvcml0eSBsaXN0LCB0aGUgcmVmZXJlbmNpbmcgbm90ZXMsIGFuZCBob3cgdG8gcmFuayBvbmUuXG4gKiBAcmV0dXJucyBXaGljaCBvZiB0aGUgdGhyZWUgd2F5cyB0aGUgbGlzdCBmYWlsZWQgdG8gc2V0dGxlIGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZE5vUHJpb3JpdHlXaW5uZXJSZWFzb24ocGFyYW1zOiBGaW5kTm9Qcmlvcml0eVdpbm5lclJlYXNvblBhcmFtcyk6IE5vUHJpb3JpdHlXaW5uZXJSZWFzb24ge1xuICBpZiAocGFyYW1zLmVudHJpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIE5vUHJpb3JpdHlXaW5uZXJSZWFzb24uRW1wdHlMaXN0O1xuICB9XG5cbiAgbGV0IGJlc3RSYW5rID0gTk9fUFJJT1JJVFlfTUFUQ0g7XG4gIGZvciAoY29uc3Qgbm90ZVBhdGggb2YgcGFyYW1zLm5vdGVQYXRocykge1xuICAgIGNvbnN0IGN1cnJlbnRSYW5rID0gcGFyYW1zLnJhbmsobm90ZVBhdGgpO1xuICAgIGlmIChjdXJyZW50UmFuayA8IGJlc3RSYW5rKSB7XG4gICAgICBiZXN0UmFuayA9IGN1cnJlbnRSYW5rO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBiZXN0UmFuayA9PT0gTk9fUFJJT1JJVFlfTUFUQ0ggPyBOb1ByaW9yaXR5V2lubmVyUmVhc29uLk5vTWF0Y2ggOiBOb1ByaW9yaXR5V2lubmVyUmVhc29uLlRpZTtcbn1cblxuLyoqXG4gKiBGaW5kcyBob3cgaGlnaGx5IGEgbm90ZSByYW5rcyBpbiB0aGUgcHJpb3JpdHkgbGlzdC5cbiAqXG4gKiBBbiBlbnRyeSBtYXRjaGVzIGluIG9uZSBvZiBmb3VyIHdheXMsIHBpY2tlZCBieSBpdHMgc2hhcGUgc28gdGhhdCBvbmUgbGlzdCBjYW4gZXhwcmVzcyBhbGwgb2YgdGhlbTpcbiAqXG4gKiAtIGBwcm9wZXJ0eTpuYW1lYCBcdTIwMTQgdGhlIG5vdGUncyBmcm9udG1hdHRlciBoYXMgYG5hbWVgOyBgcHJvcGVydHk6bmFtZT12YWx1ZWAgYWxzbyBjb21wYXJlcyB0aGUgdmFsdWUuXG4gKiAtIGAvcmVndWxhciBleHByZXNzaW9uL2AgXHUyMDE0IHRlc3RlZCBhZ2FpbnN0IHRoZSBub3RlJ3MgcGF0aC5cbiAqIC0gYC5leHRgIFx1MjAxNCB0aGUgbm90ZSdzIHBhdGggZW5kcyB3aXRoIGl0LCBjYXNlLWluc2Vuc2l0aXZlbHkuIFRoaXMgaXMgdGhlIGZvcm0gdGhlIHJlcXVlc3QgYXNrZWQgZm9yLlxuICogLSBhbnl0aGluZyBlbHNlIFx1MjAxNCBhIHBhdGggZnJvbSB0aGUgdmF1bHQgcm9vdCwgbWF0Y2hpbmcgdGhlIHZvY2FidWxhcnkgb2YgdGhlIGluY2x1ZGUgLyBleGNsdWRlXG4gKiAgIHBhdGggc2V0dGluZ3MuXG4gKlxuICogV2hlbiBhIG5vdGUgbWF0Y2hlcyBzZXZlcmFsIGVudHJpZXMgdGhlICoqbG9uZ2VzdCoqIG9uZSBkZWNpZGVzIGl0cyByYW5rLCBzbyB0aGUgbW9zdCBzcGVjaWZpY1xuICogZW50cnkgd2lucyBhbmQgdGhlIG9yZGVyIG9mIHRoZSBsaXN0IGlzIGxlZnQgdG8gZXhwcmVzcyBwcmlvcml0eS4gV2l0aG91dCB0aGlzIGFuIEV4Y2FsaWRyYXcgbm90ZVxuICogY291bGQgbmV2ZXIgcmFuayBiZWxvdyBhIHBsYWluIG1hcmtkb3duIG9uZTogYGRyYXdpbmcuZXhjYWxpZHJhdy5tZGAgYWxzbyBlbmRzIHdpdGggYC5tZGAsIHNvXG4gKiBgLm1kYCBhYm92ZSBgLmV4Y2FsaWRyYXcubWRgIFx1MjAxNCB0aGUgdmVyeSBleGFtcGxlIHRoZSByZXF1ZXN0IGlzIGJ1aWx0IG9uIFx1MjAxNCB3b3VsZCB0aWUgaW5zdGVhZCBvZlxuICogcmVzb2x2aW5nLiBFcXVhbC1sZW5ndGggbWF0Y2hlcyBmYWxsIHRvIHRoZSBlYXJsaWVyIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgZmluZGluZyB0aGUgcmFuay5cbiAqIEByZXR1cm5zIFRoZSBpbmRleCBvZiB0aGUgbW9zdCBzcGVjaWZpYyBtYXRjaGluZyBlbnRyeSwgb3Ige0BsaW5rIE5PX1BSSU9SSVRZX01BVENIfSB3aGVuIG5vbmUgbWF0Y2guXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTm90ZVByaW9yaXR5UmFuayhwYXJhbXM6IEZpbmROb3RlUHJpb3JpdHlSYW5rUGFyYW1zKTogbnVtYmVyIHtcbiAgbGV0IGJlc3RSYW5rID0gTk9fUFJJT1JJVFlfTUFUQ0g7XG4gIGxldCBiZXN0TGVuZ3RoID0gLTE7XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIGVudHJ5XSBvZiBwYXJhbXMuZW50cmllcy5lbnRyaWVzKCkpIHtcbiAgICAvLyBBIHNob3J0ZXIgZW50cnkgY2FuIG5ldmVyIGJlYXQgb25lIHRoYXQgYWxyZWFkeSBtYXRjaGVkLCBzbyBpdCBpcyBub3Qgd29ydGggdGVzdGluZy5cbiAgICBpZiAoZW50cnkubGVuZ3RoIDw9IGJlc3RMZW5ndGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICghY2hlY2tFbnRyeU1hdGNoZXMoZW50cnksIHBhcmFtcykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGJlc3RSYW5rID0gaW5kZXg7XG4gICAgYmVzdExlbmd0aCA9IGVudHJ5Lmxlbmd0aDtcbiAgfVxuXG4gIHJldHVybiBiZXN0UmFuaztcbn1cblxuLyoqXG4gKiBQaWNrcyB0aGUgc2luZ2xlIGhpZ2hlc3QtcHJpb3JpdHkgbm90ZSBhbW9uZyB0aG9zZSByZWZlcmVuY2luZyBhbiBhdHRhY2htZW50LlxuICpcbiAqIFJldHVybnMgYG51bGxgIHdoZW4gdGhlIGJlc3QgcmFuayBpcyBzaGFyZWQgYnkgbW9yZSB0aGFuIG9uZSBub3RlLCBvciB3aGVuIG5vIG5vdGUgbWF0Y2hlc1xuICogYW55dGhpbmcuIEJvdGggYXJlIHRpZXMsIGFuZCBhIHRpZSBpcyB0aGUgY2FsbGVyJ3MgcHJvYmxlbTogaXQgaXMgd2hhdCB0aGUgbXVsdGlwbGUtbm90ZXMgbW9kZVxuICogc2V0dGluZyBpcyBmb3IuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBwaWNraW5nIHRoZSBub3RlLlxuICogQHJldHVybnMgVGhlIHdpbm5pbmcgbm90ZSdzIHBhdGgsIG9yIGBudWxsYCB3aGVuIHRoZXJlIGlzIG5vIHNpbmdsZSB3aW5uZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaWNrSGlnaGVzdFByaW9yaXR5Tm90ZVBhdGgocGFyYW1zOiBQaWNrSGlnaGVzdFByaW9yaXR5Tm90ZVBhdGhQYXJhbXMpOiBudWxsIHwgc3RyaW5nIHtcbiAgbGV0IGJlc3RSYW5rID0gTk9fUFJJT1JJVFlfTUFUQ0g7XG4gIGxldCBiZXN0Tm90ZVBhdGg6IG51bGwgfCBzdHJpbmcgPSBudWxsO1xuICBsZXQgYmVzdENvdW50ID0gMDtcblxuICBmb3IgKGNvbnN0IG5vdGVQYXRoIG9mIHBhcmFtcy5ub3RlUGF0aHMpIHtcbiAgICBjb25zdCBjdXJyZW50UmFuayA9IHBhcmFtcy5yYW5rKG5vdGVQYXRoKTtcbiAgICBpZiAoY3VycmVudFJhbmsgPCBiZXN0UmFuaykge1xuICAgICAgYmVzdFJhbmsgPSBjdXJyZW50UmFuaztcbiAgICAgIGJlc3ROb3RlUGF0aCA9IG5vdGVQYXRoO1xuICAgICAgYmVzdENvdW50ID0gMTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRSYW5rID09PSBiZXN0UmFuaykge1xuICAgICAgYmVzdENvdW50Kys7XG4gICAgfVxuICB9XG5cbiAgaWYgKGJlc3RDb3VudCAhPT0gMSB8fCBiZXN0UmFuayA9PT0gTk9fUFJJT1JJVFlfTUFUQ0gpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBiZXN0Tm90ZVBhdGg7XG59XG5cbmZ1bmN0aW9uIGNoZWNrRW50cnlNYXRjaGVzKGVudHJ5OiBzdHJpbmcsIHBhcmFtczogRmluZE5vdGVQcmlvcml0eVJhbmtQYXJhbXMpOiBib29sZWFuIHtcbiAgaWYgKCFlbnRyeSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChlbnRyeS5zdGFydHNXaXRoKFBST1BFUlRZX1BSRUZJWCkpIHtcbiAgICByZXR1cm4gY2hlY2tQcm9wZXJ0eU1hdGNoZXMoZW50cnkuc2xpY2UoUFJPUEVSVFlfUFJFRklYLmxlbmd0aCksIHBhcmFtcy5mcm9udG1hdHRlcik7XG4gIH1cblxuICBpZiAoZW50cnkubGVuZ3RoID4gMSAmJiBlbnRyeS5zdGFydHNXaXRoKFJFR19FWFBfREVMSU1JVEVSKSAmJiBlbnRyeS5lbmRzV2l0aChSRUdfRVhQX0RFTElNSVRFUikpIHtcbiAgICBjb25zdCBzb3VyY2UgPSBlbnRyeS5zbGljZSgxLCAtMSk7XG4gICAgLy8gQW4gdW5wYXJzZWFibGUgZXhwcmVzc2lvbiBtdXN0IG5vdCB0aHJvdyBtaWQtY29sbGVjdGlvbjsgaXQgc2ltcGx5IG1hdGNoZXMgbm90aGluZy5cbiAgICByZXR1cm4gaXNWYWxpZFJlZ0V4cChzb3VyY2UpICYmIG5ldyBSZWdFeHAoc291cmNlKS50ZXN0KHBhcmFtcy5ub3RlUGF0aCk7XG4gIH1cblxuICBpZiAoZW50cnkuc3RhcnRzV2l0aChFWFRFTlNJT05fUFJFRklYKSkge1xuICAgIHJldHVybiBwYXJhbXMubm90ZVBhdGgudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChlbnRyeS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIGNvbnN0IHByZWZpeCA9IGVudHJ5LmVuZHNXaXRoKCcvJykgPyBlbnRyeSA6IGAke2VudHJ5fS9gO1xuICByZXR1cm4gcGFyYW1zLm5vdGVQYXRoID09PSBlbnRyeSB8fCBwYXJhbXMubm90ZVBhdGguc3RhcnRzV2l0aChwcmVmaXgpO1xufVxuXG5mdW5jdGlvbiBjaGVja1Byb3BlcnR5TWF0Y2hlcyhzcGVjaWZpZXI6IHN0cmluZywgZnJvbnRtYXR0ZXI6IG51bGwgfCBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4pOiBib29sZWFuIHtcbiAgaWYgKCFmcm9udG1hdHRlcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHNlcGFyYXRvckluZGV4ID0gc3BlY2lmaWVyLmluZGV4T2YoUFJPUEVSVFlfVkFMVUVfU0VQQVJBVE9SKTtcbiAgaWYgKHNlcGFyYXRvckluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiBPYmplY3QuaGFzT3duKGZyb250bWF0dGVyLCBzcGVjaWZpZXIpO1xuICB9XG5cbiAgY29uc3QgcHJvcGVydHlOYW1lID0gc3BlY2lmaWVyLnNsaWNlKDAsIHNlcGFyYXRvckluZGV4KTtcbiAgY29uc3QgZXhwZWN0ZWRWYWx1ZSA9IHNwZWNpZmllci5zbGljZShzZXBhcmF0b3JJbmRleCArIDEpO1xuICBpZiAoIU9iamVjdC5oYXNPd24oZnJvbnRtYXR0ZXIsIHByb3BlcnR5TmFtZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBhY3R1YWxWYWx1ZSA9IGZyb250bWF0dGVyW3Byb3BlcnR5TmFtZV07XG4gIC8vIEZyb250bWF0dGVyIHZhbHVlcyBhcmUgd2hhdGV2ZXIgWUFNTCBwcm9kdWNlZCwgc28gY29tcGFyZSB0aGVpciByZW5kZXJpbmcgcmF0aGVyIHRoYW4gcmVxdWlyaW5nIGFcbiAgLy8gU3RyaW5nLiBBbiBhcnJheSBtYXRjaGVzIHdoZW4gYW55IG9mIGl0cyBlbnRyaWVzIGRvZXMsIHdoaWNoIGlzIGhvdyB0YWctbGlrZSBwcm9wZXJ0aWVzIHJlYWQuXG4gIGlmIChBcnJheS5pc0FycmF5KGFjdHVhbFZhbHVlKSkge1xuICAgIHJldHVybiBhY3R1YWxWYWx1ZS5zb21lKChpdGVtKSA9PiBTdHJpbmcoaXRlbSkgPT09IGV4cGVjdGVkVmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIFN0cmluZyhhY3R1YWxWYWx1ZSkgPT09IGV4cGVjdGVkVmFsdWU7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBLFNBQVMscUJBQXFCO0FBRTlCLE1BQU0sa0JBQWtCO0FBQ3hCLE1BQU0sb0JBQW9CO0FBQzFCLE1BQU0sbUJBQW1CO0FBQ3pCLE1BQU0sMkJBQTJCO0FBUzFCLElBQUsseUJBQUwsa0JBQUtBLDRCQUFMO0FBSUwsRUFBQUEsd0JBQUEsZUFBWTtBQUtaLEVBQUFBLHdCQUFBLGFBQVU7QUFLVixFQUFBQSx3QkFBQSxTQUFNO0FBZEksU0FBQUE7QUFBQSxHQUFBO0FBNkVMLE1BQU0sb0JBQW9CO0FBaUIxQixTQUFTLCtCQUErQixRQUF3RDtBQUVyRyxRQUFNLGtCQUFrQixPQUFPLFVBQVUsSUFBSSxDQUFDLGNBQWM7QUFBQSxJQUMxRDtBQUFBLElBQ0EsTUFBTSxPQUFPLEtBQUssUUFBUTtBQUFBLEVBQzVCLEVBQUU7QUFFRixNQUFJLFdBQVc7QUFDZixhQUFXLFVBQVUsaUJBQWlCO0FBQ3BDLFFBQUksT0FBTyxPQUFPLFVBQVU7QUFDMUIsaUJBQVcsT0FBTztBQUFBLElBQ3BCO0FBQUEsRUFDRjtBQUVBLFNBQU8sZ0JBQ0osT0FBTyxDQUFDLFdBQVcsT0FBTyxTQUFTLFFBQVEsRUFDM0MsSUFBSSxDQUFDLFdBQVcsT0FBTyxRQUFRO0FBQ3BDO0FBWU8sU0FBUywyQkFBMkIsUUFBa0U7QUFD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
|