@mnaoumov/obsidian-lib 7.0.0 → 7.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.
@@ -0,0 +1,139 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+ (function () {
6
+ function ensureBrowserProcess() {
7
+ const browserProcess = {
8
+ browser: true,
9
+ cwd() {
10
+ return "/";
11
+ },
12
+ env: {},
13
+ platform: "android"
14
+ };
15
+ const existingProcess = globalThis.process;
16
+ if (!existingProcess) {
17
+ globalThis.process = browserProcess;
18
+ return;
19
+ }
20
+ if (existingProcess.versions?.node) {
21
+ return;
22
+ }
23
+ const existingProcessRecord = existingProcess;
24
+ for (const [key, value] of Object.entries(browserProcess)) {
25
+ existingProcessRecord[key] ??= value;
26
+ }
27
+ existingProcessRecord["browser"] = true;
28
+ }
29
+
30
+ ensureBrowserProcess();
31
+ })();
32
+
33
+ import { escapeRegExp } from "@mnaoumov/typescript-lib/reg-exp";
34
+ const WORD_LETTERS_SOURCE = /A-Za-z\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC/.source;
35
+ const WORD_DIGITS_SOURCE = /0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19/.source;
36
+ const WORD_CHARACTERS_SOURCE = WORD_LETTERS_SOURCE + WORD_DIGITS_SOURCE;
37
+ const CODE_UNIT_COUNT = 65536;
38
+ const ASCII_LIMIT = 128;
39
+ const characterTablesHolder = { value: null };
40
+ function canonicalizeObsidianText(text) {
41
+ return canonicalizeRun(text, 0, text.length, getCharacterTables());
42
+ }
43
+ function createObsidianMentionRegExp(name) {
44
+ const isFirstWord = isObsidianWordCharacter(name.charCodeAt(0));
45
+ const isLastWord = isObsidianWordCharacter(name.charCodeAt(name.length - 1));
46
+ const prefix = isFirstWord ? `(?:^|[^${WORD_CHARACTERS_SOURCE}])` : "";
47
+ const suffix = isLastWord ? `(?![${WORD_CHARACTERS_SOURCE}])` : "()";
48
+ return new RegExp(`${prefix}(${escapeRegExp(name)})${suffix}`, "gi");
49
+ }
50
+ function getObsidianNameTokens(name) {
51
+ const tables = getCharacterTables();
52
+ for (let index = 0; index < name.length; index++) {
53
+ if (tables.ambiguityFlags[name.charCodeAt(index)] === 1) {
54
+ return null;
55
+ }
56
+ }
57
+ const tokens = tokenizeObsidianWords(name);
58
+ return tokens.length === 0 ? null : tokens;
59
+ }
60
+ function isObsidianWordCharacter(charCode) {
61
+ return getCharacterTables().wordFlags[charCode] === 1;
62
+ }
63
+ function tokenizeObsidianWords(text) {
64
+ const tables = getCharacterTables();
65
+ const tokens = [];
66
+ let tokenStart = -1;
67
+ let hasIrregularCase = false;
68
+ for (let index = 0; index <= text.length; index++) {
69
+ const charCode = text.charCodeAt(index);
70
+ if (tables.wordFlags[charCode] === 1) {
71
+ if (tokenStart === -1) {
72
+ tokenStart = index;
73
+ hasIrregularCase = false;
74
+ }
75
+ if (tables.irregularCaseFlags[charCode] === 1) {
76
+ hasIrregularCase = true;
77
+ }
78
+ continue;
79
+ }
80
+ if (tokenStart === -1) {
81
+ continue;
82
+ }
83
+ tokens.push(hasIrregularCase ? canonicalizeRun(text, tokenStart, index, tables) : text.slice(tokenStart, index).toUpperCase());
84
+ tokenStart = -1;
85
+ }
86
+ return tokens;
87
+ }
88
+ function buildCharacterTables() {
89
+ const wordRegExp = new RegExp(`[${WORD_CHARACTERS_SOURCE}]`);
90
+ const canonicalCharacters = [];
91
+ const irregularCaseFlags = new Uint8Array(CODE_UNIT_COUNT);
92
+ const wordFlags = new Uint8Array(CODE_UNIT_COUNT);
93
+ const foldedFromWordFlags = new Uint8Array(CODE_UNIT_COUNT);
94
+ const foldedFromNonWordFlags = new Uint8Array(CODE_UNIT_COUNT);
95
+ for (let charCode = 0; charCode < CODE_UNIT_COUNT; charCode++) {
96
+ const character = String.fromCharCode(charCode);
97
+ const canonicalCharCode = canonicalize(charCode, character);
98
+ const canonicalCharacter = String.fromCharCode(canonicalCharCode);
99
+ canonicalCharacters.push(canonicalCharacter);
100
+ irregularCaseFlags[charCode] = character.toUpperCase() === canonicalCharacter ? 0 : 1;
101
+ const isObsidianWordCharacterValue = wordRegExp.test(character);
102
+ wordFlags[charCode] = isObsidianWordCharacterValue ? 1 : 0;
103
+ (isObsidianWordCharacterValue ? foldedFromWordFlags : foldedFromNonWordFlags)[canonicalCharCode] = 1;
104
+ }
105
+ const canonical = canonicalCharacters.join("");
106
+ const ambiguityFlags = new Uint8Array(CODE_UNIT_COUNT);
107
+ for (let charCode = 0; charCode < CODE_UNIT_COUNT; charCode++) {
108
+ const canonicalCharCode = canonical.charCodeAt(charCode);
109
+ ambiguityFlags[charCode] = foldedFromWordFlags[canonicalCharCode] === 1 && foldedFromNonWordFlags[canonicalCharCode] === 1 ? 1 : 0;
110
+ }
111
+ return { ambiguityFlags, canonical, irregularCaseFlags, wordFlags };
112
+ }
113
+ function canonicalize(charCode, character) {
114
+ const upperCase = character.toUpperCase();
115
+ if (upperCase.length !== 1) {
116
+ return charCode;
117
+ }
118
+ const upperCharCode = upperCase.charCodeAt(0);
119
+ return charCode >= ASCII_LIMIT && upperCharCode < ASCII_LIMIT ? charCode : upperCharCode;
120
+ }
121
+ function canonicalizeRun(text, start, end, tables) {
122
+ const characters = [];
123
+ for (let index = start; index < end; index++) {
124
+ characters.push(tables.canonical.charAt(text.charCodeAt(index)));
125
+ }
126
+ return characters.join("");
127
+ }
128
+ function getCharacterTables() {
129
+ characterTablesHolder.value ??= buildCharacterTables();
130
+ return characterTablesHolder.value;
131
+ }
132
+ export {
133
+ canonicalizeObsidianText,
134
+ createObsidianMentionRegExp,
135
+ getObsidianNameTokens,
136
+ isObsidianWordCharacter,
137
+ tokenizeObsidianWords
138
+ };
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9vYnNpZGlhbi13b3JkLWNoYXJhY3RlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEhvdyBPYnNpZGlhbiBkZWNpZGVzIHdoZXJlIGEgbmFtZSBtYXkgbWF0Y2ggYXMgYW4gdW5saW5rZWQgbWVudGlvbiwgcmVzdGF0ZWQgc28gdGhlIGluZGV4IGNhbiBmaW5kIHRoZSBzYW1lXG4gKiBtYXRjaGVzIHdpdGhvdXQgcnVubmluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBwZXIgbmFtZSBvdmVyIGV2ZXJ5IG5vdGUuXG4gKlxuICogT2JzaWRpYW4gMS4xNC40IGJ1aWxkcyBvbmUgYFJlZ0V4cChzb3VyY2UsICdnaScpYCBwZXIgbmFtZSBvZiB0aGUgdGFyZ2V0IG5vdGUuIEEgbmFtZSB3aG9zZSBmaXJzdCBjaGFyYWN0ZXIgaXNcbiAqIGEgV09SRCBjaGFyYWN0ZXIgbXVzdCBiZSBwcmVjZWRlZCBieSBhIG5vbi13b3JkIGNoYXJhY3RlciBvciB0aGUgc3RhcnQgb2YgdGhlIGZpbGUsIGFuZCBvbmUgd2hvc2UgbGFzdFxuICogY2hhcmFjdGVyIGlzIGEgd29yZCBjaGFyYWN0ZXIgbXVzdCBub3QgYmUgZm9sbG93ZWQgYnkgb25lLiBUaGUgd29yZCBjaGFyYWN0ZXJzIGFyZSBhIGZpeGVkIHRhYmxlIG9mIFVuaWNvZGVcbiAqIGxldHRlcnMgYW5kIGRpZ2l0cywgY29waWVkIGJlbG93LiBUaGlzIGlzIG5vdCBhIFVuaWNvZGUgbGV0dGVyIGNsYXNzaWZpY2F0aW9uOiBmb3IgZXhhbXBsZSwgYSBuYW1lIHN1Y2ggYXNcbiAqIOadseS6rCBoYXMgbm8gd29yZCBjaGFyYWN0ZXIgYXQgYWxsIGFuZCBtYXRjaGVzIGluc2lkZSBhbnkgcnVuIG9mIHRleHQuIFRoZXJlIGlzIG5vIGB1YCBmbGFnLCBzbyBjYXNlIGlzIGZvbGRlZFxuICogdGhlIHdheSBhIG5vbi1Vbmljb2RlIGBpYCByZWdleCBmb2xkcyBpdCwgb25lIFVURi0xNlxuICogY29kZSB1bml0IGF0IGEgdGltZSwgYW5kIGRpYWNyaXRpY3MgYXJlIG5vdCBmb2xkZWQgYXQgYWxsLlxuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIHVuaWNvcm4vcHJlZmVyLWNvZGUtcG9pbnQgLS0gT2JzaWRpYW4ncyByZWdleCBoYXMgbm8gYHVgIGZsYWcsIHNvIGl0IHJlYWRzIFVURi0xNiBjb2RlIHVuaXRzLCBhbmQgc28gbXVzdCBldmVyeSB0YWJsZSBoZXJlLiAqL1xuXG5pbXBvcnQgeyBlc2NhcGVSZWdFeHAgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcmVnLWV4cCc7XG5cbi8vIENvcGllZCBmcm9tIE9ic2lkaWFuIDEuMTQuNCdzIGBhcHAuanNgOiB0aGUgbGV0dGVycywgdGhlbiB0aGUgZGlnaXRzLCBvZiBpdHMgd29yZC1jaGFyYWN0ZXIgY2xhc3MuXG4vKiBlc2xpbnQtZGlzYWJsZSB1bmljb3JuL3ByZWZlci11bmljb2RlLWNvZGUtcG9pbnQtZXNjYXBlcyAtLSBDb3BpZWQgdmVyYmF0aW0sIGFuZCByZWFkIHdpdGhvdXQgdGhlIGB1YCBmbGFnLCB3aGVyZSBgXFx1ey4uLn1gIG1lYW5zIHNvbWV0aGluZyBlbHNlLiAqL1xuY29uc3QgV09SRF9MRVRURVJTX1NPVVJDRSA9XG4gIC9BLVphLXpcXHUwMEFBXFx1MDBCNVxcdTAwQkFcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzNzAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM3RlxcdTAzODZcXHUwMzg4LVxcdTAzOEFcXHUwMzhDXFx1MDM4RS1cXHUwM0ExXFx1MDNBMy1cXHUwM0Y1XFx1MDNGNy1cXHUwNDgxXFx1MDQ4QS1cXHUwNTJGXFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjEtXFx1MDU4N1xcdTA1RDAtXFx1MDVFQVxcdTA1RjAtXFx1MDVGMlxcdTA2MjAtXFx1MDY0QVxcdTA2NkVcXHUwNjZGXFx1MDY3MS1cXHUwNkQzXFx1MDZENVxcdTA2RTVcXHUwNkU2XFx1MDZFRVxcdTA2RUZcXHUwNkZBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMFxcdTA3MTItXFx1MDcyRlxcdTA3NEQtXFx1MDdBNVxcdTA3QjFcXHUwN0NBLVxcdTA3RUFcXHUwN0Y0XFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MTVcXHUwODFBXFx1MDgyNFxcdTA4MjhcXHUwODQwLVxcdTA4NThcXHUwOEEwLVxcdTA4QjRcXHUwOTA0LVxcdTA5MzlcXHUwOTNEXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzEtXFx1MDk4MFxcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkRcXHUwOUNFXFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNzItXFx1MEE3NFxcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRDBcXHUwQUUwXFx1MEFFMVxcdTBBRjlcXHUwQjA1LVxcdTBCMENcXHUwQjBGXFx1MEIxMFxcdTBCMTMtXFx1MEIyOFxcdTBCMkEtXFx1MEIzMFxcdTBCMzJcXHUwQjMzXFx1MEIzNS1cXHUwQjM5XFx1MEIzRFxcdTBCNUNcXHUwQjVEXFx1MEI1Ri1cXHUwQjYxXFx1MEI3MVxcdTBCODNcXHUwQjg1LVxcdTBCOEFcXHUwQjhFLVxcdTBCOTBcXHUwQjkyLVxcdTBCOTVcXHUwQjk5XFx1MEI5QVxcdTBCOUNcXHUwQjlFXFx1MEI5RlxcdTBCQTNcXHUwQkE0XFx1MEJBOC1cXHUwQkFBXFx1MEJBRS1cXHUwQkI5XFx1MEJEMFxcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzOVxcdTBDM0RcXHUwQzU4LVxcdTBDNUFcXHUwQzYwXFx1MEM2MVxcdTBDODUtXFx1MEM4Q1xcdTBDOEUtXFx1MEM5MFxcdTBDOTItXFx1MENBOFxcdTBDQUEtXFx1MENCM1xcdTBDQjUtXFx1MENCOVxcdTBDQkRcXHUwQ0RFXFx1MENFMFxcdTBDRTFcXHUwQ0YxXFx1MENGMlxcdTBEMDUtXFx1MEQwQ1xcdTBEMEUtXFx1MEQxMFxcdTBEMTItXFx1MEQzQVxcdTBEM0RcXHUwRDRFXFx1MEQ1Ri1cXHUwRDYxXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4NS1cXHUwRDk2XFx1MEQ5QS1cXHUwREIxXFx1MERCMy1cXHUwREJCXFx1MERCRFxcdTBEQzAtXFx1MERDNlxcdTBFMDEtXFx1MEUzMFxcdTBFMzJcXHUwRTMzXFx1MEU0MC1cXHUwRTQ2XFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4N1xcdTBFODhcXHUwRThBXFx1MEU4RFxcdTBFOTQtXFx1MEU5N1xcdTBFOTktXFx1MEU5RlxcdTBFQTEtXFx1MEVBM1xcdTBFQTVcXHUwRUE3XFx1MEVBQVxcdTBFQUJcXHUwRUFELVxcdTBFQjBcXHUwRUIyXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVEQy1cXHUwRURGXFx1MTAwMC1cXHUxMDJBXFx1MTAzRlxcdTEwNTAtXFx1MTA1NVxcdTEwNUEtXFx1MTA1RFxcdTEwNjFcXHUxMDY1XFx1MTA2NlxcdTEwNkUtXFx1MTA3MFxcdTEwNzUtXFx1MTA4MVxcdTEwOEVcXHUxMEEwLVxcdTEwQzVcXHUxMEM3XFx1MTBDRFxcdTEwRDAtXFx1MTBGQVxcdTEwRkMtXFx1MTI0OFxcdTEyNEEtXFx1MTI0RFxcdTEyNTAtXFx1MTI1NlxcdTEyNThcXHUxMjVBLVxcdTEyNURcXHUxMjYwLVxcdTEyODhcXHUxMjhBLVxcdTEyOERcXHUxMjkwLVxcdTEyQjBcXHUxMkIyLVxcdTEyQjVcXHUxMkI4LVxcdTEyQkVcXHUxMkMwXFx1MTJDMi1cXHUxMkM1XFx1MTJDOC1cXHUxMkQ2XFx1MTJEOC1cXHUxMzEwXFx1MTMxMi1cXHUxMzE1XFx1MTMxOC1cXHUxMzVBXFx1MTM4MC1cXHUxMzhGXFx1MTNBMC1cXHUxM0Y1XFx1MTNGOC1cXHUxM0ZEXFx1MTQwMS1cXHUxNjZDXFx1MTY2Ri1cXHUxNjdGXFx1MTY4MS1cXHUxNjlBXFx1MTZBMC1cXHUxNkVBXFx1MTZGMS1cXHUxNkY4XFx1MTcwMC1cXHUxNzBDXFx1MTcwRS1cXHUxNzExXFx1MTcyMC1cXHUxNzMxXFx1MTc0MC1cXHUxNzUxXFx1MTc2MC1cXHUxNzZDXFx1MTc2RS1cXHUxNzcwXFx1MTc4MC1cXHUxN0IzXFx1MTdEN1xcdTE3RENcXHUxODIwLVxcdTE4NzdcXHUxODgwLVxcdTE4QThcXHUxOEFBXFx1MThCMC1cXHUxOEY1XFx1MTkwMC1cXHUxOTFFXFx1MTk1MC1cXHUxOTZEXFx1MTk3MC1cXHUxOTc0XFx1MTk4MC1cXHUxOUFCXFx1MTlCMC1cXHUxOUM5XFx1MUEwMC1cXHUxQTE2XFx1MUEyMC1cXHUxQTU0XFx1MUFBN1xcdTFCMDUtXFx1MUIzM1xcdTFCNDUtXFx1MUI0QlxcdTFCODMtXFx1MUJBMFxcdTFCQUVcXHUxQkFGXFx1MUJCQS1cXHUxQkU1XFx1MUMwMC1cXHUxQzIzXFx1MUM0RC1cXHUxQzRGXFx1MUM1QS1cXHUxQzdEXFx1MUNFOS1cXHUxQ0VDXFx1MUNFRS1cXHUxQ0YxXFx1MUNGNVxcdTFDRjZcXHUxRDAwLVxcdTFEQkZcXHUxRTAwLVxcdTFGMTVcXHUxRjE4LVxcdTFGMURcXHUxRjIwLVxcdTFGNDVcXHUxRjQ4LVxcdTFGNERcXHUxRjUwLVxcdTFGNTdcXHUxRjU5XFx1MUY1QlxcdTFGNURcXHUxRjVGLVxcdTFGN0RcXHUxRjgwLVxcdTFGQjRcXHUxRkI2LVxcdTFGQkNcXHUxRkJFXFx1MUZDMi1cXHUxRkM0XFx1MUZDNi1cXHUxRkNDXFx1MUZEMC1cXHUxRkQzXFx1MUZENi1cXHUxRkRCXFx1MUZFMC1cXHUxRkVDXFx1MUZGMi1cXHUxRkY0XFx1MUZGNi1cXHUxRkZDXFx1MjA3MVxcdTIwN0ZcXHUyMDkwLVxcdTIwOUNcXHUyMTAyXFx1MjEwN1xcdTIxMEEtXFx1MjExM1xcdTIxMTVcXHUyMTE5LVxcdTIxMURcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJBLVxcdTIxMkRcXHUyMTJGLVxcdTIxMzlcXHUyMTNDLVxcdTIxM0ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRFXFx1MjE4M1xcdTIxODRcXHUyQzAwLVxcdTJDMkVcXHUyQzMwLVxcdTJDNUVcXHUyQzYwLVxcdTJDRTRcXHUyQ0VCLVxcdTJDRUVcXHUyQ0YyXFx1MkNGM1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1MkQzMC1cXHUyRDY3XFx1MkQ2RlxcdTJEODAtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNlxcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRVxcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTJFMkZcXHUzMDA1XFx1MzAwNlxcdTMwMzEtXFx1MzAzNVxcdTMwM0JcXHUzMDNDXFx1MzEwNS1cXHUzMTJEXFx1MzEzMS1cXHUzMThFXFx1MzFBMC1cXHUzMUJBXFx1MzFGMC1cXHUzMUZGXFx1MzQwMC1cXHU0REI1XFx1QTAwMC1cXHVBNDhDXFx1QTREMC1cXHVBNEZEXFx1QTUwMC1cXHVBNjBDXFx1QTYxMC1cXHVBNjFGXFx1QTYyQVxcdUE2MkJcXHVBNjQwLVxcdUE2NkVcXHVBNjdGLVxcdUE2OURcXHVBNkEwLVxcdUE2RTVcXHVBNzE3LVxcdUE3MUZcXHVBNzIyLVxcdUE3ODhcXHVBNzhCLVxcdUE3QURcXHVBN0IwLVxcdUE3QjdcXHVBN0Y3LVxcdUE4MDFcXHVBODAzLVxcdUE4MDVcXHVBODA3LVxcdUE4MEFcXHVBODBDLVxcdUE4MjJcXHVBODQwLVxcdUE4NzNcXHVBODgyLVxcdUE4QjNcXHVBOEYyLVxcdUE4RjdcXHVBOEZCXFx1QThGRFxcdUE5MEEtXFx1QTkyNVxcdUE5MzAtXFx1QTk0NlxcdUE5ODQtXFx1QTlCMlxcdUE5Q0ZcXHVBOUUwLVxcdUE5RTRcXHVBOUU2LVxcdUE5RUZcXHVBOUZBLVxcdUE5RkVcXHVBQTAwLVxcdUFBMjhcXHVBQTQwLVxcdUFBNDJcXHVBQTQ0LVxcdUFBNEJcXHVBQTYwLVxcdUFBNzZcXHVBQTdBXFx1QUE3RS1cXHVBQUFGXFx1QUFCMVxcdUFBQjVcXHVBQUI2XFx1QUFCOS1cXHVBQUJEXFx1QUFDMFxcdUFBQzJcXHVBQURCLVxcdUFBRERcXHVBQUUwLVxcdUFBRUFcXHVBQUYyLVxcdUFBRjRcXHVBQjAxLVxcdUFCMDZcXHVBQjA5LVxcdUFCMEVcXHVBQjExLVxcdUFCMTZcXHVBQjIwLVxcdUFCMjZcXHVBQjI4LVxcdUFCMkVcXHVBQjMwLVxcdUFCNUFcXHVBQjVDLVxcdUFCNjVcXHVBQjcwLVxcdUFCRTJcXHVEN0NCLVxcdUQ3RkJcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDlcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGQjFEXFx1RkIxRi1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjIxLVxcdUZGM0FcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGREMvXG4gICAgLnNvdXJjZTtcbmNvbnN0IFdPUkRfRElHSVRTX1NPVVJDRSA9IC8wLTlcXHUwNjYwLVxcdTA2NjlcXHUwNkYwLVxcdTA2RjlcXHUwN0MwLVxcdTA3QzlcXHUwOTY2LVxcdTA5NkZcXHUwOUU2LVxcdTA5RUZcXHUwQTY2LVxcdTBBNkZcXHUwQUU2LVxcdTBBRUZcXHUwQjY2LVxcdTBCNkZcXHUwQkU2LVxcdTBCRUZcXHUwQzY2LVxcdTBDNkZcXHUwQ0U2LVxcdTBDRUZcXHUwRDY2LVxcdTBENkZcXHUwREU2LVxcdTBERUZcXHUwRTUwLVxcdTBFNTlcXHUwRUQwLVxcdTBFRDlcXHUwRjIwLVxcdTBGMjlcXHUxMDQwLVxcdTEwNDlcXHUxMDkwLVxcdTEwOTlcXHUxN0UwLVxcdTE3RTlcXHUxODEwLVxcdTE4MTlcXHUxOTQ2LVxcdTE5NEZcXHUxOUQwLVxcdTE5RDlcXHUxQTgwLVxcdTFBODlcXHUxQTkwLVxcdTFBOTlcXHUxQjUwLVxcdTFCNTlcXHUxQkIwLVxcdTFCQjlcXHUxQzQwLVxcdTFDNDlcXHUxQzUwLVxcdTFDNTlcXHVBNjIwLVxcdUE2MjlcXHVBOEQwLVxcdUE4RDlcXHVBOTAwLVxcdUE5MDlcXHVBOUQwLVxcdUE5RDlcXHVBOUYwLVxcdUE5RjlcXHVBQTUwLVxcdUFBNTlcXHVBQkYwLVxcdUFCRjlcXHVGRjEwLVxcdUZGMTkvLnNvdXJjZTtcbi8qIGVzbGludC1lbmFibGUgdW5pY29ybi9wcmVmZXItdW5pY29kZS1jb2RlLXBvaW50LWVzY2FwZXMgLS0gRW5kIG9mIHRoZSBjb3BpZWQgY2xhc3MuICovXG5jb25zdCBXT1JEX0NIQVJBQ1RFUlNfU09VUkNFID0gV09SRF9MRVRURVJTX1NPVVJDRSArIFdPUkRfRElHSVRTX1NPVVJDRTtcblxuY29uc3QgQ09ERV9VTklUX0NPVU5UID0gMHgxXzAwXzAwO1xuY29uc3QgQVNDSUlfTElNSVQgPSAweDgwO1xuXG5pbnRlcmZhY2UgQ2hhcmFjdGVyVGFibGVzIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBjb2RlIHVuaXQgc2hhcmVzIGl0cyBjYW5vbmljYWwgZm9ybSB3aXRoIGFub3RoZXIgY29kZSB1bml0IG9mIHRoZSBPVEhFUiB3b3JkLW5lc3MuIEEgbmFtZSBob2xkaW5nXG4gICAqIG9uZSBjYW5ub3QgYmUgc3BsaXQgaW50byB0b2tlbnMgdGhlIHdheSB0aGUgdGV4dCBpdCBtYXRjaGVzIGlzIHNwbGl0LCBzbyBpdCBpcyBuZXZlciBpbmRleGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYW1iaWd1aXR5RmxhZ3M6IFVpbnQ4QXJyYXk7XG5cbiAgLyoqXG4gICAqIEVhY2ggY29kZSB1bml0J3MgY2Fub25pY2FsIGZvcm0gdW5kZXIgYSBub24tVW5pY29kZSBgaWAgcmVnZXg6IHRoZSBjaGFyYWN0ZXIgYXQgdGhlIGNvZGUgdW5pdCdzIGluZGV4LlxuICAgKi9cbiAgcmVhZG9ubHkgY2Fub25pY2FsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBjb2RlIHVuaXQncyBjYW5vbmljYWwgZm9ybSBpcyBOT1Qgd2hhdCBgU3RyaW5nLnByb3RvdHlwZS50b1VwcGVyQ2FzZWAgbWFrZXMgb2YgaXQ6IGDDn2AsIHdob3NlIHVwcGVyXG4gICAqIGNhc2UgaXMgdHdvIGNvZGUgdW5pdHMsIG9yIGDEsWAsIHdoaWNoIHRoZSByZWdleCByZWZ1c2VzIHRvIGZvbGQgdG8gYW4gQVNDSUkgYElgLiBBIHJ1biBmcmVlIG9mIHRoZW0gaXMgZm9sZGVkIGJ5XG4gICAqIG9uZSBgdG9VcHBlckNhc2VgIGNhbGwuXG4gICAqL1xuICByZWFkb25seSBpcnJlZ3VsYXJDYXNlRmxhZ3M6IFVpbnQ4QXJyYXk7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBjb2RlIHVuaXQgaXMgb25lIG9mIE9ic2lkaWFuJ3Mgd29yZCBjaGFyYWN0ZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgd29yZEZsYWdzOiBVaW50OEFycmF5O1xufVxuXG5pbnRlcmZhY2UgQ2hhcmFjdGVyVGFibGVzSG9sZGVyIHtcbiAgdmFsdWU6IENoYXJhY3RlclRhYmxlcyB8IG51bGw7XG59XG5cbi8vIEEgaG9sZGVyIHJhdGhlciB0aGFuIGEgdmFyaWFibGUsIHNvIGJ1aWxkaW5nIHRoZSB0YWJsZXMgb24gZmlyc3QgdXNlIG11dGF0ZXMgaXQgaW5zdGVhZCBvZiByZWFzc2lnbmluZyBpdC5cbmNvbnN0IGNoYXJhY3RlclRhYmxlc0hvbGRlcjogQ2hhcmFjdGVyVGFibGVzSG9sZGVyID0geyB2YWx1ZTogbnVsbCB9O1xuXG4vKipcbiAqIENhbm9uaWNhbGl6ZXMgdGV4dCBmb3IgT2JzaWRpYW4gU2VhcmNoIGFuZCB1bmxpbmtlZCBtZW50aW9ucycgbm9uLVVuaWNvZGUgaWdub3JlLWNhc2UgcmVnZXggbWF0Y2hpbmcuXG4gKlxuICogUHJlc2VydmVzIFVURi0xNiBsZW5ndGgsIGxvbmUgc3Vycm9nYXRlcyBhbmQgYWNjZW50cy4gVGhpcyBpcyBub3QgVW5pY29kZSBvciBsb2NhbGUgY2FzZSBmb2xkaW5nOlxuICogR3JlZWsgZmluYWwgc2lnbWEgZm9sZHMgdG8gc2lnbWEncyB1cHBlcmNhc2UsIGJ1dCBLZWx2aW4gc2lnbiwgbG9uZyBzIGFuZCBkb3RsZXNzIGkgZG8gbm90IGZvbGQgdG8gQVNDSUkuXG4gKiBWZXJpZmllZCBhZ2FpbnN0IGNvcmUgU2VhcmNoJ3MgYGdtaWAgZXhwcmVzc2lvbnMgaW4gT2JzaWRpYW4gMS4xNC41IGFuZCAxLjE1LjAuXG4gKlxuICogQHBhcmFtIHRleHQgLSBUaGUgbGl0ZXJhbCB0ZXh0LCBub3QgYSByZWd1bGFyIGV4cHJlc3Npb24gc291cmNlLlxuICogQHJldHVybnMgSXRzIEVDTUFTY3JpcHQgbm9uLVVuaWNvZGUgaWdub3JlLWNhc2UgY2Fub25pY2FsIGZvcm0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYW5vbmljYWxpemVPYnNpZGlhblRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNhbm9uaWNhbGl6ZVJ1bih0ZXh0LCAwLCB0ZXh0Lmxlbmd0aCwgZ2V0Q2hhcmFjdGVyVGFibGVzKCkpO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgcmVndWxhciBleHByZXNzaW9uIE9ic2lkaWFuIG1hdGNoZXMgYSBuYW1lIHdpdGgsIG9uZSBwZXIgbmFtZSwgZXhhY3RseSBhcyBpdHMgb3duIGByZWNvbXB1dGVVbmxpbmtlZGBcbiAqIGJ1aWxkcyBpdC4gR3JvdXAgMSBpcyB0aGUgbmFtZSBpdHNlbGYuXG4gKlxuICogQHBhcmFtIG5hbWUgLSBBIGJhc2VuYW1lIG9yIGFuIGFsaWFzLlxuICogQHJldHVybnMgVGhlIGV4cHJlc3Npb24sIGdsb2JhbCBhbmQgY2FzZS1pbnNlbnNpdGl2ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU9ic2lkaWFuTWVudGlvblJlZ0V4cChuYW1lOiBzdHJpbmcpOiBSZWdFeHAge1xuICBjb25zdCBpc0ZpcnN0V29yZCA9IGlzT2JzaWRpYW5Xb3JkQ2hhcmFjdGVyKG5hbWUuY2hhckNvZGVBdCgwKSk7XG4gIGNvbnN0IGlzTGFzdFdvcmQgPSBpc09ic2lkaWFuV29yZENoYXJhY3RlcihuYW1lLmNoYXJDb2RlQXQobmFtZS5sZW5ndGggLSAxKSk7XG4gIGNvbnN0IHByZWZpeCA9IGlzRmlyc3RXb3JkID8gYCg/Ol58W14ke1dPUkRfQ0hBUkFDVEVSU19TT1VSQ0V9XSlgIDogJyc7XG4gIGNvbnN0IHN1ZmZpeCA9IGlzTGFzdFdvcmQgPyBgKD8hWyR7V09SRF9DSEFSQUNURVJTX1NPVVJDRX1dKWAgOiAnKCknO1xuICByZXR1cm4gbmV3IFJlZ0V4cChgJHtwcmVmaXh9KCR7ZXNjYXBlUmVnRXhwKG5hbWUpfSkke3N1ZmZpeH1gLCAnZ2knKTtcbn1cblxuLyoqXG4gKiBTcGxpdHMgYSBuYW1lIGludG8gdGhlIGNhbm9uaWNhbCB3b3JkIHRva2VucyB0aGUgaW5kZXgga2V5cyBpdCBieS5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIEEgYmFzZW5hbWUgb3IgYW4gYWxpYXMuXG4gKiBAcmV0dXJucyBUaGUgdG9rZW5zLCBvciBgbnVsbGAgd2hlbiB0aGUgbmFtZSBjYW5ub3QgYmUgaW5kZXhlZDogaXQgaGFzIG5vIHdvcmQgY2hhcmFjdGVyLCBvciBpdCBob2xkcyBhXG4gKiAgIGNoYXJhY3RlciB3aG9zZSBjYXNlIGZvbGRpbmcgY3Jvc3NlcyBiZXR3ZWVuIHdvcmQgYW5kIG5vbi13b3JkIGNoYXJhY3RlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPYnNpZGlhbk5hbWVUb2tlbnMobmFtZTogc3RyaW5nKTogbnVsbCB8IHN0cmluZ1tdIHtcbiAgY29uc3QgdGFibGVzID0gZ2V0Q2hhcmFjdGVyVGFibGVzKCk7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBuYW1lLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGlmICh0YWJsZXMuYW1iaWd1aXR5RmxhZ3NbbmFtZS5jaGFyQ29kZUF0KGluZGV4KV0gPT09IDEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHRva2VucyA9IHRva2VuaXplT2JzaWRpYW5Xb3JkcyhuYW1lKTtcbiAgcmV0dXJuIHRva2Vucy5sZW5ndGggPT09IDAgPyBudWxsIDogdG9rZW5zO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgYSBVVEYtMTYgY29kZSB1bml0IGlzIG9uZSBvZiBPYnNpZGlhbidzIHdvcmQgY2hhcmFjdGVycy5cbiAqXG4gKiBAcGFyYW0gY2hhckNvZGUgLSBUaGUgY29kZSB1bml0OyBgTmFOYCwgYXMgYGNoYXJDb2RlQXRgIHJldHVybnMgcGFzdCB0aGUgZW5kLCBpcyBub3Qgb25lLlxuICogQHJldHVybnMgV2hldGhlciBpdCBpcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzT2JzaWRpYW5Xb3JkQ2hhcmFjdGVyKGNoYXJDb2RlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGdldENoYXJhY3RlclRhYmxlcygpLndvcmRGbGFnc1tjaGFyQ29kZV0gPT09IDE7XG59XG5cbi8qKlxuICogU3BsaXRzIHRleHQgaW50byBpdHMgbWF4aW1hbCBydW5zIG9mIHdvcmQgY2hhcmFjdGVycywgZWFjaCBmb2xkZWQgdG8gaXRzIGNhbm9uaWNhbCBjYXNlLlxuICpcbiAqIEV2ZXJ5IG1hdGNoIE9ic2lkaWFuIGZpbmRzIGZvciBhbiBpbmRleGFibGUgbmFtZSBjb3ZlcnMgd2hvbGUgcnVucyBvZiB0aGlzIHNwbGl0LCBpbiBvcmRlciBhbmQgd2l0aCBub3RoaW5nXG4gKiBiZXR3ZWVuIHRoZW0sIHdoaWNoIGlzIHdoYXQgbGV0cyB0aGUgaW5kZXggZmluZCBjYW5kaWRhdGVzIHdpdGhvdXQgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHJldHVybnMgVGhlIGNhbm9uaWNhbCB0b2tlbnMsIGluIG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemVPYnNpZGlhbldvcmRzKHRleHQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgdGFibGVzID0gZ2V0Q2hhcmFjdGVyVGFibGVzKCk7XG4gIGNvbnN0IHRva2Vuczogc3RyaW5nW10gPSBbXTtcbiAgbGV0IHRva2VuU3RhcnQgPSAtMTtcbiAgbGV0IGhhc0lycmVndWxhckNhc2UgPSBmYWxzZTtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDw9IHRleHQubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgY2hhckNvZGUgPSB0ZXh0LmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgIGlmICh0YWJsZXMud29yZEZsYWdzW2NoYXJDb2RlXSA9PT0gMSkge1xuICAgICAgaWYgKHRva2VuU3RhcnQgPT09IC0xKSB7XG4gICAgICAgIHRva2VuU3RhcnQgPSBpbmRleDtcbiAgICAgICAgaGFzSXJyZWd1bGFyQ2FzZSA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGFibGVzLmlycmVndWxhckNhc2VGbGFnc1tjaGFyQ29kZV0gPT09IDEpIHtcbiAgICAgICAgaGFzSXJyZWd1bGFyQ2FzZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICh0b2tlblN0YXJ0ID09PSAtMSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdG9rZW5zLnB1c2goaGFzSXJyZWd1bGFyQ2FzZSA/IGNhbm9uaWNhbGl6ZVJ1bih0ZXh0LCB0b2tlblN0YXJ0LCBpbmRleCwgdGFibGVzKSA6IHRleHQuc2xpY2UodG9rZW5TdGFydCwgaW5kZXgpLnRvVXBwZXJDYXNlKCkpO1xuICAgIHRva2VuU3RhcnQgPSAtMTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQ2hhcmFjdGVyVGFibGVzKCk6IENoYXJhY3RlclRhYmxlcyB7XG4gIGNvbnN0IHdvcmRSZWdFeHAgPSBuZXcgUmVnRXhwKGBbJHtXT1JEX0NIQVJBQ1RFUlNfU09VUkNFfV1gKTtcbiAgY29uc3QgY2Fub25pY2FsQ2hhcmFjdGVyczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgaXJyZWd1bGFyQ2FzZUZsYWdzID0gbmV3IFVpbnQ4QXJyYXkoQ09ERV9VTklUX0NPVU5UKTtcbiAgY29uc3Qgd29yZEZsYWdzID0gbmV3IFVpbnQ4QXJyYXkoQ09ERV9VTklUX0NPVU5UKTtcbiAgLy8gUGVyIGNhbm9uaWNhbCBmb3JtOiB3aGV0aGVyIGEgd29yZCBjaGFyYWN0ZXIgZm9sZHMgdG8gaXQsIGFuZCB3aGV0aGVyIGEgbm9uLXdvcmQgY2hhcmFjdGVyIGRvZXMuXG4gIGNvbnN0IGZvbGRlZEZyb21Xb3JkRmxhZ3MgPSBuZXcgVWludDhBcnJheShDT0RFX1VOSVRfQ09VTlQpO1xuICBjb25zdCBmb2xkZWRGcm9tTm9uV29yZEZsYWdzID0gbmV3IFVpbnQ4QXJyYXkoQ09ERV9VTklUX0NPVU5UKTtcblxuICBmb3IgKGxldCBjaGFyQ29kZSA9IDA7IGNoYXJDb2RlIDwgQ09ERV9VTklUX0NPVU5UOyBjaGFyQ29kZSsrKSB7XG4gICAgY29uc3QgY2hhcmFjdGVyID0gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSk7XG4gICAgY29uc3QgY2Fub25pY2FsQ2hhckNvZGUgPSBjYW5vbmljYWxpemUoY2hhckNvZGUsIGNoYXJhY3Rlcik7XG4gICAgY29uc3QgY2Fub25pY2FsQ2hhcmFjdGVyID0gU3RyaW5nLmZyb21DaGFyQ29kZShjYW5vbmljYWxDaGFyQ29kZSk7XG4gICAgY2Fub25pY2FsQ2hhcmFjdGVycy5wdXNoKGNhbm9uaWNhbENoYXJhY3Rlcik7XG4gICAgaXJyZWd1bGFyQ2FzZUZsYWdzW2NoYXJDb2RlXSA9IGNoYXJhY3Rlci50b1VwcGVyQ2FzZSgpID09PSBjYW5vbmljYWxDaGFyYWN0ZXIgPyAwIDogMTtcbiAgICBjb25zdCBpc09ic2lkaWFuV29yZENoYXJhY3RlclZhbHVlID0gd29yZFJlZ0V4cC50ZXN0KGNoYXJhY3Rlcik7XG4gICAgd29yZEZsYWdzW2NoYXJDb2RlXSA9IGlzT2JzaWRpYW5Xb3JkQ2hhcmFjdGVyVmFsdWUgPyAxIDogMDtcbiAgICAoaXNPYnNpZGlhbldvcmRDaGFyYWN0ZXJWYWx1ZSA/IGZvbGRlZEZyb21Xb3JkRmxhZ3MgOiBmb2xkZWRGcm9tTm9uV29yZEZsYWdzKVtjYW5vbmljYWxDaGFyQ29kZV0gPSAxO1xuICB9XG5cbiAgY29uc3QgY2Fub25pY2FsID0gY2Fub25pY2FsQ2hhcmFjdGVycy5qb2luKCcnKTtcbiAgY29uc3QgYW1iaWd1aXR5RmxhZ3MgPSBuZXcgVWludDhBcnJheShDT0RFX1VOSVRfQ09VTlQpO1xuICBmb3IgKGxldCBjaGFyQ29kZSA9IDA7IGNoYXJDb2RlIDwgQ09ERV9VTklUX0NPVU5UOyBjaGFyQ29kZSsrKSB7XG4gICAgY29uc3QgY2Fub25pY2FsQ2hhckNvZGUgPSBjYW5vbmljYWwuY2hhckNvZGVBdChjaGFyQ29kZSk7XG4gICAgYW1iaWd1aXR5RmxhZ3NbY2hhckNvZGVdID0gZm9sZGVkRnJvbVdvcmRGbGFnc1tjYW5vbmljYWxDaGFyQ29kZV0gPT09IDEgJiYgZm9sZGVkRnJvbU5vbldvcmRGbGFnc1tjYW5vbmljYWxDaGFyQ29kZV0gPT09IDEgPyAxIDogMDtcbiAgfVxuXG4gIHJldHVybiB7IGFtYmlndWl0eUZsYWdzLCBjYW5vbmljYWwsIGlycmVndWxhckNhc2VGbGFncywgd29yZEZsYWdzIH07XG59XG5cbi8qXG4gKiBFQ01BU2NyaXB0J3MgYENhbm9uaWNhbGl6ZWAgZm9yIGEgcmVndWxhciBleHByZXNzaW9uIHdpdGggYGlgIGFuZCB3aXRob3V0IGB1YDogdGhlIGNvZGUgdW5pdCdzIHVwcGVyIGNhc2UsIHVubGVzc1xuICogdGhhdCBpcyBsb25nZXIgdGhhbiBvbmUgY29kZSB1bml0LCBvciB3b3VsZCB0dXJuIGEgbm9uLUFTQ0lJIGNvZGUgdW5pdCBpbnRvIGFuIEFTQ0lJIG9uZS5cbiAqL1xuZnVuY3Rpb24gY2Fub25pY2FsaXplKGNoYXJDb2RlOiBudW1iZXIsIGNoYXJhY3Rlcjogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3QgdXBwZXJDYXNlID0gY2hhcmFjdGVyLnRvVXBwZXJDYXNlKCk7XG4gIGlmICh1cHBlckNhc2UubGVuZ3RoICE9PSAxKSB7XG4gICAgcmV0dXJuIGNoYXJDb2RlO1xuICB9XG5cbiAgY29uc3QgdXBwZXJDaGFyQ29kZSA9IHVwcGVyQ2FzZS5jaGFyQ29kZUF0KDApO1xuICByZXR1cm4gY2hhckNvZGUgPj0gQVNDSUlfTElNSVQgJiYgdXBwZXJDaGFyQ29kZSA8IEFTQ0lJX0xJTUlUID8gY2hhckNvZGUgOiB1cHBlckNoYXJDb2RlO1xufVxuXG5mdW5jdGlvbiBjYW5vbmljYWxpemVSdW4odGV4dDogc3RyaW5nLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciwgdGFibGVzOiBDaGFyYWN0ZXJUYWJsZXMpOiBzdHJpbmcge1xuICBjb25zdCBjaGFyYWN0ZXJzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGxldCBpbmRleCA9IHN0YXJ0OyBpbmRleCA8IGVuZDsgaW5kZXgrKykge1xuICAgIGNoYXJhY3RlcnMucHVzaCh0YWJsZXMuY2Fub25pY2FsLmNoYXJBdCh0ZXh0LmNoYXJDb2RlQXQoaW5kZXgpKSk7XG4gIH1cblxuICByZXR1cm4gY2hhcmFjdGVycy5qb2luKCcnKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hhcmFjdGVyVGFibGVzKCk6IENoYXJhY3RlclRhYmxlcyB7XG4gIGNoYXJhY3RlclRhYmxlc0hvbGRlci52YWx1ZSA/Pz0gYnVpbGRDaGFyYWN0ZXJUYWJsZXMoKTtcbiAgcmV0dXJuIGNoYXJhY3RlclRhYmxlc0hvbGRlci52YWx1ZTtcbn1cblxuLyogZXNsaW50LWVuYWJsZSB1bmljb3JuL3ByZWZlci1jb2RlLXBvaW50IC0tIEVuZCBvZiB0aGUgZmlsZS4gKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQkEsU0FBUyxvQkFBb0I7QUFJN0IsTUFBTSxzQkFDSiw2Z0lBQ0c7QUFDTCxNQUFNLHFCQUFxQiwwZEFBMGQ7QUFFcmYsTUFBTSx5QkFBeUIsc0JBQXNCO0FBRXJELE1BQU0sa0JBQWtCO0FBQ3hCLE1BQU0sY0FBYztBQWdDcEIsTUFBTSx3QkFBK0MsRUFBRSxPQUFPLEtBQUs7QUFZNUQsU0FBUyx5QkFBeUIsTUFBc0I7QUFDN0QsU0FBTyxnQkFBZ0IsTUFBTSxHQUFHLEtBQUssUUFBUSxtQkFBbUIsQ0FBQztBQUNuRTtBQVNPLFNBQVMsNEJBQTRCLE1BQXNCO0FBQ2hFLFFBQU0sY0FBYyx3QkFBd0IsS0FBSyxXQUFXLENBQUMsQ0FBQztBQUM5RCxRQUFNLGFBQWEsd0JBQXdCLEtBQUssV0FBVyxLQUFLLFNBQVMsQ0FBQyxDQUFDO0FBQzNFLFFBQU0sU0FBUyxjQUFjLFVBQVUsc0JBQXNCLE9BQU87QUFDcEUsUUFBTSxTQUFTLGFBQWEsT0FBTyxzQkFBc0IsT0FBTztBQUNoRSxTQUFPLElBQUksT0FBTyxHQUFHLE1BQU0sSUFBSSxhQUFhLElBQUksQ0FBQyxJQUFJLE1BQU0sSUFBSSxJQUFJO0FBQ3JFO0FBU08sU0FBUyxzQkFBc0IsTUFBK0I7QUFDbkUsUUFBTSxTQUFTLG1CQUFtQjtBQUNsQyxXQUFTLFFBQVEsR0FBRyxRQUFRLEtBQUssUUFBUSxTQUFTO0FBQ2hELFFBQUksT0FBTyxlQUFlLEtBQUssV0FBVyxLQUFLLENBQUMsTUFBTSxHQUFHO0FBQ3ZELGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUVBLFFBQU0sU0FBUyxzQkFBc0IsSUFBSTtBQUN6QyxTQUFPLE9BQU8sV0FBVyxJQUFJLE9BQU87QUFDdEM7QUFRTyxTQUFTLHdCQUF3QixVQUEyQjtBQUNqRSxTQUFPLG1CQUFtQixFQUFFLFVBQVUsUUFBUSxNQUFNO0FBQ3REO0FBV08sU0FBUyxzQkFBc0IsTUFBd0I7QUFDNUQsUUFBTSxTQUFTLG1CQUFtQjtBQUNsQyxRQUFNLFNBQW1CLENBQUM7QUFDMUIsTUFBSSxhQUFhO0FBQ2pCLE1BQUksbUJBQW1CO0FBRXZCLFdBQVMsUUFBUSxHQUFHLFNBQVMsS0FBSyxRQUFRLFNBQVM7QUFDakQsVUFBTSxXQUFXLEtBQUssV0FBVyxLQUFLO0FBQ3RDLFFBQUksT0FBTyxVQUFVLFFBQVEsTUFBTSxHQUFHO0FBQ3BDLFVBQUksZUFBZSxJQUFJO0FBQ3JCLHFCQUFhO0FBQ2IsMkJBQW1CO0FBQUEsTUFDckI7QUFFQSxVQUFJLE9BQU8sbUJBQW1CLFFBQVEsTUFBTSxHQUFHO0FBQzdDLDJCQUFtQjtBQUFBLE1BQ3JCO0FBRUE7QUFBQSxJQUNGO0FBRUEsUUFBSSxlQUFlLElBQUk7QUFDckI7QUFBQSxJQUNGO0FBRUEsV0FBTyxLQUFLLG1CQUFtQixnQkFBZ0IsTUFBTSxZQUFZLE9BQU8sTUFBTSxJQUFJLEtBQUssTUFBTSxZQUFZLEtBQUssRUFBRSxZQUFZLENBQUM7QUFDN0gsaUJBQWE7QUFBQSxFQUNmO0FBRUEsU0FBTztBQUNUO0FBRUEsU0FBUyx1QkFBd0M7QUFDL0MsUUFBTSxhQUFhLElBQUksT0FBTyxJQUFJLHNCQUFzQixHQUFHO0FBQzNELFFBQU0sc0JBQWdDLENBQUM7QUFDdkMsUUFBTSxxQkFBcUIsSUFBSSxXQUFXLGVBQWU7QUFDekQsUUFBTSxZQUFZLElBQUksV0FBVyxlQUFlO0FBRWhELFFBQU0sc0JBQXNCLElBQUksV0FBVyxlQUFlO0FBQzFELFFBQU0seUJBQXlCLElBQUksV0FBVyxlQUFlO0FBRTdELFdBQVMsV0FBVyxHQUFHLFdBQVcsaUJBQWlCLFlBQVk7QUFDN0QsVUFBTSxZQUFZLE9BQU8sYUFBYSxRQUFRO0FBQzlDLFVBQU0sb0JBQW9CLGFBQWEsVUFBVSxTQUFTO0FBQzFELFVBQU0scUJBQXFCLE9BQU8sYUFBYSxpQkFBaUI7QUFDaEUsd0JBQW9CLEtBQUssa0JBQWtCO0FBQzNDLHVCQUFtQixRQUFRLElBQUksVUFBVSxZQUFZLE1BQU0scUJBQXFCLElBQUk7QUFDcEYsVUFBTSwrQkFBK0IsV0FBVyxLQUFLLFNBQVM7QUFDOUQsY0FBVSxRQUFRLElBQUksK0JBQStCLElBQUk7QUFDekQsS0FBQywrQkFBK0Isc0JBQXNCLHdCQUF3QixpQkFBaUIsSUFBSTtBQUFBLEVBQ3JHO0FBRUEsUUFBTSxZQUFZLG9CQUFvQixLQUFLLEVBQUU7QUFDN0MsUUFBTSxpQkFBaUIsSUFBSSxXQUFXLGVBQWU7QUFDckQsV0FBUyxXQUFXLEdBQUcsV0FBVyxpQkFBaUIsWUFBWTtBQUM3RCxVQUFNLG9CQUFvQixVQUFVLFdBQVcsUUFBUTtBQUN2RCxtQkFBZSxRQUFRLElBQUksb0JBQW9CLGlCQUFpQixNQUFNLEtBQUssdUJBQXVCLGlCQUFpQixNQUFNLElBQUksSUFBSTtBQUFBLEVBQ25JO0FBRUEsU0FBTyxFQUFFLGdCQUFnQixXQUFXLG9CQUFvQixVQUFVO0FBQ3BFO0FBTUEsU0FBUyxhQUFhLFVBQWtCLFdBQTJCO0FBQ2pFLFFBQU0sWUFBWSxVQUFVLFlBQVk7QUFDeEMsTUFBSSxVQUFVLFdBQVcsR0FBRztBQUMxQixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sZ0JBQWdCLFVBQVUsV0FBVyxDQUFDO0FBQzVDLFNBQU8sWUFBWSxlQUFlLGdCQUFnQixjQUFjLFdBQVc7QUFDN0U7QUFFQSxTQUFTLGdCQUFnQixNQUFjLE9BQWUsS0FBYSxRQUFpQztBQUNsRyxRQUFNLGFBQXVCLENBQUM7QUFDOUIsV0FBUyxRQUFRLE9BQU8sUUFBUSxLQUFLLFNBQVM7QUFDNUMsZUFBVyxLQUFLLE9BQU8sVUFBVSxPQUFPLEtBQUssV0FBVyxLQUFLLENBQUMsQ0FBQztBQUFBLEVBQ2pFO0FBRUEsU0FBTyxXQUFXLEtBQUssRUFBRTtBQUMzQjtBQUVBLFNBQVMscUJBQXNDO0FBQzdDLHdCQUFzQixVQUFVLHFCQUFxQjtBQUNyRCxTQUFPLHNCQUFzQjtBQUMvQjsiLCJuYW1lcyI6W119
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mnaoumov/obsidian-lib",
3
- "version": "7.0.0",
3
+ "version": "7.1.0",
4
4
  "description": "Runtime library for Obsidian plugin development: plugin base classes, components, settings, modals, vault and metadata helpers.",
5
5
  "keywords": [
6
6
  "obsidian",