about-system 0.10.9 → 0.10.10
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/dist/about-system-cli.d.ts.map +1 -0
- package/dist/about-system-cli.js +1 -1
- package/dist/cache/cache-config.d.ts +62 -0
- package/dist/cache/cache-config.d.ts.map +1 -0
- package/dist/cache/cache.d.ts +53 -0
- package/dist/cache/cache.d.ts.map +1 -0
- package/dist/index.d.ts +18 -52
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -1
- package/dist/info/hardware.d.ts +76 -0
- package/dist/info/hardware.d.ts.map +1 -0
- package/dist/info/memory.d.ts +59 -0
- package/dist/info/memory.d.ts.map +1 -0
- package/dist/info/network.d.ts +54 -0
- package/dist/info/network.d.ts.map +1 -0
- package/dist/info/platform.d.ts +36 -0
- package/dist/info/platform.d.ts.map +1 -0
- package/dist/info/process.d.ts +23 -0
- package/dist/info/process.d.ts.map +1 -0
- package/dist/info/settings.d.ts +185 -0
- package/dist/info/settings.d.ts.map +1 -0
- package/dist/info/software.d.ts +33 -0
- package/dist/info/software.d.ts.map +1 -0
- package/dist/info/system-status.d.ts +36 -0
- package/dist/info/system-status.d.ts.map +1 -0
- package/dist/{system-info-api-NgTm8Gzo.js → system-info-api-ByXoHI0m.js} +314 -278
- package/dist/system-info-api-ByXoHI0m.js.map +1 -0
- package/dist/system-info-api.d.ts +62 -442
- package/dist/system-info-api.d.ts.map +1 -0
- package/dist/system-info-api.js +4 -5
- package/dist/system-info-api.js.map +1 -1
- package/dist/types/internal-types.d.ts +14 -0
- package/dist/types/internal-types.d.ts.map +1 -0
- package/dist/utils/command.d.ts +18 -0
- package/dist/utils/command.d.ts.map +1 -0
- package/dist/utils/network.d.ts +27 -0
- package/dist/utils/network.d.ts.map +1 -0
- package/dist/utils/platform.d.ts +11 -0
- package/dist/utils/platform.d.ts.map +1 -0
- package/dist/web-server.d.ts +21 -0
- package/dist/web-server.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/cache/cache-config.ts +2 -2
- package/src/system-info-api.ts +2 -67
- package/src/utils/network.ts +104 -4
- package/src/utils/utils.test.ts +105 -38
- package/dist/system-info-api-NgTm8Gzo.js.map +0 -1
- package/dist/web/assets/index--HOsj3jw.js +0 -14
- package/dist/web/assets/index-BU_blZyu.css +0 -1
- package/dist/web/index.html +0 -13
|
@@ -1,13 +1,86 @@
|
|
|
1
1
|
import W from "os";
|
|
2
2
|
import u from "fs";
|
|
3
|
-
import
|
|
3
|
+
import JI from "https";
|
|
4
4
|
import M from "path";
|
|
5
5
|
import { execSync as aI } from "child_process";
|
|
6
|
-
|
|
6
|
+
M.join(W.tmpdir(), "systeminfo-cache.json");
|
|
7
|
+
const _I = {
|
|
8
|
+
ip: 600 * 1e3,
|
|
9
|
+
cpu: 1440 * 60 * 1e3,
|
|
10
|
+
gpu: 1440 * 60 * 1e3,
|
|
11
|
+
os: 1440 * 60 * 1e3,
|
|
12
|
+
device: 1440 * 60 * 1e3,
|
|
13
|
+
kernel: 3600 * 1e3,
|
|
14
|
+
pacman: 600 * 1e3,
|
|
15
|
+
ports: 300 * 1e3,
|
|
16
|
+
containers: 300 * 1e3,
|
|
17
|
+
top_process: 5 * 1e3,
|
|
18
|
+
disk_used: 60 * 1e3,
|
|
19
|
+
ram_used: 10 * 1e3,
|
|
20
|
+
services_running: 300 * 1e3,
|
|
21
|
+
temperature: 30 * 1e3,
|
|
22
|
+
battery: 60 * 1e3,
|
|
23
|
+
network_interfaces: 300 * 1e3,
|
|
24
|
+
mount_points: 600 * 1e3
|
|
25
|
+
}, kI = "da2d6cc4baa5d1", GI = 5e3;
|
|
26
|
+
async function PI(I = kI, g = GI) {
|
|
27
|
+
return new Promise((i) => {
|
|
28
|
+
const c = `https://api.ipinfo.io/lite/8.8.8.8?token=${I}`, e = JI.get(c, (s) => {
|
|
29
|
+
let t = "";
|
|
30
|
+
s.on("data", (C) => t += C), s.on("end", () => {
|
|
31
|
+
try {
|
|
32
|
+
const C = JSON.parse(t);
|
|
33
|
+
i({
|
|
34
|
+
ip: C.ip,
|
|
35
|
+
city: C.city,
|
|
36
|
+
hostname: C.hostname,
|
|
37
|
+
org: C.org
|
|
38
|
+
});
|
|
39
|
+
} catch {
|
|
40
|
+
i({});
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
e.on("error", () => i({})), e.setTimeout(g, () => {
|
|
45
|
+
e.destroy(), i({});
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
async function $I(I = GI) {
|
|
50
|
+
return new Promise((g) => {
|
|
51
|
+
const c = JI.get("http://ip-api.com/json/?fields=status,message,query,city,isp,org,as", (e) => {
|
|
52
|
+
let s = "";
|
|
53
|
+
e.on("data", (t) => s += t), e.on("end", () => {
|
|
54
|
+
try {
|
|
55
|
+
const t = JSON.parse(s);
|
|
56
|
+
t.status === "success" ? g({
|
|
57
|
+
ip: t.query,
|
|
58
|
+
city: t.city,
|
|
59
|
+
hostname: void 0,
|
|
60
|
+
org: t.org || t.isp || t.as
|
|
61
|
+
}) : g({});
|
|
62
|
+
} catch {
|
|
63
|
+
g({});
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
c.on("error", () => g({})), c.setTimeout(I, () => {
|
|
68
|
+
c.destroy(), g({});
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
async function qI(I = kI, g = GI) {
|
|
73
|
+
const [i, c] = await Promise.allSettled([
|
|
74
|
+
PI(I, g),
|
|
75
|
+
$I(g)
|
|
76
|
+
]);
|
|
77
|
+
return i.status === "fulfilled" && i.value && i.value.ip ? i.value : c.status === "fulfilled" && c.value && c.value.ip ? c.value : i.status === "fulfilled" && i.value ? i.value : c.status === "fulfilled" && c.value ? c.value : {};
|
|
78
|
+
}
|
|
79
|
+
const zI = {}, O = M.join(
|
|
7
80
|
W.homedir(),
|
|
8
81
|
".config",
|
|
9
82
|
"systeminfo-settings.json"
|
|
10
|
-
), E = M.join(W.tmpdir(), "systeminfo-cache.json"),
|
|
83
|
+
), E = M.join(W.tmpdir(), "systeminfo-cache.json"), vi = {
|
|
11
84
|
reset: "\x1B[0m",
|
|
12
85
|
red: "\x1B[38;5;160m",
|
|
13
86
|
orange: "\x1B[38;5;130m",
|
|
@@ -19,7 +92,7 @@ const FI = {}, O = M.join(
|
|
|
19
92
|
magenta: "\x1B[38;5;125m",
|
|
20
93
|
gray: "\x1B[38;5;238m",
|
|
21
94
|
lightblue: "\x1B[38;5;24m"
|
|
22
|
-
},
|
|
95
|
+
}, Ri = {
|
|
23
96
|
red: "\x1B[48;5;88m\x1B[38;5;255m",
|
|
24
97
|
orange: "\x1B[48;5;166m\x1B[38;5;232m",
|
|
25
98
|
yellow: "\x1B[48;5;178m\x1B[38;5;232m",
|
|
@@ -30,7 +103,7 @@ const FI = {}, O = M.join(
|
|
|
30
103
|
magenta: "\x1B[48;5;53m\x1B[38;5;255m",
|
|
31
104
|
gray: "\x1B[48;5;236m\x1B[38;5;255m",
|
|
32
105
|
lightblue: "\x1B[48;5;26m\x1B[38;5;255m"
|
|
33
|
-
},
|
|
106
|
+
}, XI = {
|
|
34
107
|
display_order: [
|
|
35
108
|
[
|
|
36
109
|
"user",
|
|
@@ -167,7 +240,7 @@ const FI = {}, O = M.join(
|
|
|
167
240
|
show_emojis: !0,
|
|
168
241
|
show_backgrounds: !0,
|
|
169
242
|
single_line: !0,
|
|
170
|
-
line_wrap_length:
|
|
243
|
+
line_wrap_length: zI?.stdout?.columns || 100
|
|
171
244
|
},
|
|
172
245
|
network: {
|
|
173
246
|
show_offline_message: !0
|
|
@@ -176,17 +249,17 @@ const FI = {}, O = M.join(
|
|
|
176
249
|
debug: !1
|
|
177
250
|
}
|
|
178
251
|
};
|
|
179
|
-
function
|
|
252
|
+
function Fi() {
|
|
180
253
|
try {
|
|
181
254
|
if (u.existsSync(O)) {
|
|
182
255
|
const I = JSON.parse(u.readFileSync(O, "utf8"));
|
|
183
|
-
return { ...
|
|
256
|
+
return { ...XI, ...I };
|
|
184
257
|
}
|
|
185
258
|
} catch {
|
|
186
259
|
}
|
|
187
|
-
return
|
|
260
|
+
return XI;
|
|
188
261
|
}
|
|
189
|
-
function
|
|
262
|
+
function Ji(I) {
|
|
190
263
|
try {
|
|
191
264
|
const g = M.dirname(O);
|
|
192
265
|
return u.existsSync(g) || u.mkdirSync(g, { recursive: !0 }), u.writeFileSync(O, JSON.stringify(I, null, 2)), !0;
|
|
@@ -215,35 +288,15 @@ function k(I) {
|
|
|
215
288
|
return !1;
|
|
216
289
|
}
|
|
217
290
|
}
|
|
218
|
-
|
|
219
|
-
const EI = {
|
|
220
|
-
ip: 300 * 1e3,
|
|
221
|
-
cpu: 1440 * 60 * 1e3,
|
|
222
|
-
gpu: 1440 * 60 * 1e3,
|
|
223
|
-
os: 1440 * 60 * 1e3,
|
|
224
|
-
device: 1440 * 60 * 1e3,
|
|
225
|
-
kernel: 3600 * 1e3,
|
|
226
|
-
pacman: 600 * 1e3,
|
|
227
|
-
ports: 300 * 1e3,
|
|
228
|
-
containers: 300 * 1e3,
|
|
229
|
-
top_process: 5 * 1e3,
|
|
230
|
-
disk_used: 60 * 1e3,
|
|
231
|
-
ram_used: 10 * 1e3,
|
|
232
|
-
services_running: 300 * 1e3,
|
|
233
|
-
temperature: 30 * 1e3,
|
|
234
|
-
battery: 60 * 1e3,
|
|
235
|
-
network_interfaces: 300 * 1e3,
|
|
236
|
-
mount_points: 600 * 1e3
|
|
237
|
-
};
|
|
238
|
-
function xI(I, g) {
|
|
291
|
+
function Ig(I, g) {
|
|
239
292
|
if (!I || !I.timestamp) return !1;
|
|
240
|
-
const i = Date.now() - I.timestamp, c =
|
|
293
|
+
const i = Date.now() - I.timestamp, c = _I[g] || 6e4;
|
|
241
294
|
return i < c;
|
|
242
295
|
}
|
|
243
296
|
function B(I, g) {
|
|
244
297
|
if (!I[g]) return null;
|
|
245
298
|
const i = I[g];
|
|
246
|
-
return
|
|
299
|
+
return Ig(i, g) ? i.value : (delete I[g], null);
|
|
247
300
|
}
|
|
248
301
|
function d(I, g, i) {
|
|
249
302
|
I[g] = {
|
|
@@ -251,13 +304,13 @@ function d(I, g, i) {
|
|
|
251
304
|
timestamp: Date.now()
|
|
252
305
|
};
|
|
253
306
|
}
|
|
254
|
-
function
|
|
307
|
+
function gg() {
|
|
255
308
|
return W.userInfo().username;
|
|
256
309
|
}
|
|
257
|
-
function
|
|
310
|
+
function ig() {
|
|
258
311
|
return W.hostname();
|
|
259
312
|
}
|
|
260
|
-
function
|
|
313
|
+
function cg(I) {
|
|
261
314
|
const g = B(I.cache, "os");
|
|
262
315
|
if (g) return g;
|
|
263
316
|
const i = W.platform(), c = W.release();
|
|
@@ -283,13 +336,13 @@ function $I(I) {
|
|
|
283
336
|
e = `${i} ${c}`;
|
|
284
337
|
return d(I.cache, "os", e), e;
|
|
285
338
|
}
|
|
286
|
-
function
|
|
339
|
+
function eg(I) {
|
|
287
340
|
const g = B(I.cache, "kernel");
|
|
288
341
|
if (g) return g;
|
|
289
342
|
const i = W.release();
|
|
290
343
|
return d(I.cache, "kernel", i), i;
|
|
291
344
|
}
|
|
292
|
-
function
|
|
345
|
+
function sg(I) {
|
|
293
346
|
const g = B(I.cache, "device");
|
|
294
347
|
if (g !== null) return g;
|
|
295
348
|
if (R) {
|
|
@@ -337,16 +390,16 @@ function Ig(I) {
|
|
|
337
390
|
}
|
|
338
391
|
const P = "data:video/mp2t;base64,aW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tICJ2aXRlc3QiOwppbXBvcnQgeyBmb3JtYXRCZW5jaCwgdG9wUGVyY2VudCB9IGZyb20gIi4vaGFyZHdhcmUiOwoKZGVzY3JpYmUoInRvcFBlcmNlbnQiLCAoKSA9PiB7CiAgaXQoInJvdW5kcyB1cCBzbyB0aGUgZmFzdGVzdCBlbnRyeSByZWFkcyB0b3AgMSUiLCAoKSA9PiB7CiAgICBleHBlY3QodG9wUGVyY2VudCgxLCAxMDAwKSkudG9CZSgxKTsKICAgIGV4cGVjdCh0b3BQZXJjZW50KDY4LCAxMDAwKSkudG9CZSg3KTsKICAgIGV4cGVjdCh0b3BQZXJjZW50KDUwLCAxMDAwKSkudG9CZSg1KTsKICB9KTsKCiAgaXQoInN0YXlzIHdpdGhpbiAxLi4xMDAiLCAoKSA9PiB7CiAgICBleHBlY3QodG9wUGVyY2VudCgxMDAwLCAxMDAwKSkudG9CZSgxMDApOwogICAgZXhwZWN0KHRvcFBlcmNlbnQoMTIwMCwgMTAwMCkpLnRvQmUoMTAwKTsKICAgIGV4cGVjdCh0b3BQZXJjZW50KDUsIDApKS50b0JlKDEwMCk7CiAgfSk7Cn0pOwoKZGVzY3JpYmUoImZvcm1hdEJlbmNoIiwgKCkgPT4gewogIGl0KCJyb3VuZHMgdGhlIHNjb3JlIHRvIHdob2xlIHRob3VzYW5kcyBhbmQgYXBwZW5kcyB0aGUgcGVyY2VudGlsZSIsICgpID0+IHsKICAgIGV4cGVjdChmb3JtYXRCZW5jaCgzNzk2NywgMSwgMTAwMCkpLnRvQmUoIjM4ayAjMSB0b3AgMSUiKTsKICAgIGV4cGVjdChmb3JtYXRCZW5jaCgyMDUxMiwgNjgsIDEwMDApKS50b0JlKCIyMWsgIzY4IHRvcCA3JSIpOwogICAgZXhwZWN0KGZvcm1hdEJlbmNoKDM4Njc3OSwgNSwgMTAyNikpLnRvQmUoIjM4N2sgIzUgdG9wIDElIik7CiAgfSk7CgogIGl0KCJuZXZlciBwcmludHMgYSBkZWNpbWFsIGluIHRoZSBzY29yZSIsICgpID0+IHsKICAgIGV4cGVjdChmb3JtYXRCZW5jaCgxOTI0OSwgOTEsIDEwMDApKS5ub3QudG9NYXRjaCgvXGRcLlxkLyk7CiAgfSk7Cn0pOwo=", $ = "data:video/mp2t;base64,LyoqCiAqIE1lbW9yeSBhbmQgZGlzay1yZWxhdGVkIHN5c3RlbSBpbmZvcm1hdGlvbiBmdW5jdGlvbnMKICogQG1vZHVsZSBpbmZvL21lbW9yeQogKi8KCmltcG9ydCBvcyBmcm9tICJvcyI7CmltcG9ydCBmcyBmcm9tICJmcyI7CmltcG9ydCB0eXBlIHsgSW5mb0NvbnRleHQgfSBmcm9tICIuLi90eXBlcy9pbnRlcm5hbC10eXBlcyI7CmltcG9ydCB7IElTX0xJTlVYLCBJU19NQUMgfSBmcm9tICIuLi91dGlscy9wbGF0Zm9ybSI7CmltcG9ydCB7IGV4ZWNDb21tYW5kIH0gZnJvbSAiLi4vdXRpbHMvY29tbWFuZCI7CmltcG9ydCB7IGdldENhY2hlZFZhbHVlLCBzZXRDYWNoZWRWYWx1ZSB9IGZyb20gIi4uL2NhY2hlL2NhY2hlIjsKCi8qKgogKiBHZXRzIG1lbW9yeSB1c2FnZSBpbiBnaWdhYnl0ZXMKICogUmVhZHMgZnJvbSAvcHJvYy9tZW1pbmZvIG9uIExpbnV4LCBmYWxscyBiYWNrIHRvIG9zLnRvdGFsbWVtKCkKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBNZW1vcnkgdXNhZ2UgYXMgInVzZWQvdG90YWwgR0IiCiAqIEBleGFtcGxlICIxMi8zMkdCIiwgIjYvMTZHQiIKICovCmV4cG9ydCBmdW5jdGlvbiByYW1fdXNlZChjb250ZXh0OiBJbmZvQ29udGV4dCk6IHN0cmluZyB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInJhbV91c2VkIik7CiAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDsKCiAgaWYgKElTX0xJTlVYKSB7CiAgICB0cnkgewogICAgICBjb25zdCBtZW1pbmZvID0gZnMucmVhZEZpbGVTeW5jKCIvcHJvYy9tZW1pbmZvIiwgInV0ZjgiKTsKICAgICAgY29uc3QgdG90YWxNYXRjaCA9IG1lbWluZm8ubWF0Y2goL01lbVRvdGFsOlxzKyhcZCspIGtCLyk7CiAgICAgIGNvbnN0IGZyZWVNYXRjaCA9IG1lbWluZm8ubWF0Y2goL01lbUZyZWU6XHMrKFxkKykga0IvKTsKCiAgICAgIGlmICh0b3RhbE1hdGNoICYmIGZyZWVNYXRjaCkgewogICAgICAgIGNvbnN0IHRvdGFsTUIgPSBNYXRoLnJvdW5kKHBhcnNlSW50KHRvdGFsTWF0Y2hbMV0pIC8gMTAyNCk7CiAgICAgICAgY29uc3QgZnJlZU1CID0gTWF0aC5yb3VuZChwYXJzZUludChmcmVlTWF0Y2hbMV0pIC8gMTAyNCk7CiAgICAgICAgY29uc3QgdXNlZE1CID0gdG90YWxNQiAtIGZyZWVNQjsKCiAgICAgICAgY29uc3QgdG90YWxHQiA9IE1hdGgucm91bmQodG90YWxNQiAvIDEwMjQpOwogICAgICAgIGNvbnN0IHVzZWRHQiA9IE1hdGgucm91bmQodXNlZE1CIC8gMTAyNCk7CgogICAgICAgIGNvbnN0IHJlc3VsdCA9IGAke3VzZWRHQn0vJHt0b3RhbEdCfUdCYDsKICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAicmFtX3VzZWQiLCByZXN1bHQpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgIH0gY2F0Y2gge30KICB9CgogIGNvbnN0IHRvdGFsTWVtID0gb3MudG90YWxtZW0oKTsKICBjb25zdCBmcmVlTWVtID0gb3MuZnJlZW1lbSgpOwogIGNvbnN0IHVzZWRNZW0gPSB0b3RhbE1lbSAtIGZyZWVNZW07CgogIGNvbnN0IHRvdGFsR0IgPSBNYXRoLnJvdW5kKHRvdGFsTWVtIC8gKDEwMjQgKiAxMDI0ICogMTAyNCkpOwogIGNvbnN0IHVzZWRHQiA9IE1hdGgucm91bmQodXNlZE1lbSAvICgxMDI0ICogMTAyNCAqIDEwMjQpKTsKCiAgY29uc3QgcmVzdWx0ID0gYCR7dXNlZEdCfS8ke3RvdGFsR0J9R0JgOwogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJyYW1fdXNlZCIsIHJlc3VsdCk7CiAgcmV0dXJuIHJlc3VsdDsKfQoKLyoqCiAqIEdldHMgYXZhaWxhYmxlIG1lbW9yeSBpbiBnaWdhYnl0ZXMKICogUmVhZHMgTWVtQXZhaWxhYmxlIGZyb20gL3Byb2MvbWVtaW5mbyAoTGludXgpIG9yIGRlcml2ZXMgaXQgZnJvbQogKiB2bV9zdGF0J3MgZnJlZStpbmFjdGl2ZSBwYWdlcyAobWFjT1MpCiAqIEByZXR1cm5zIEF2YWlsYWJsZSBtZW1vcnkgd2l0aCAiR0IgYXZhaWxhYmxlIiBzdWZmaXggb3IgZW1wdHkgc3RyaW5nCiAqIEBleGFtcGxlICIxMkdCIGF2YWlsYWJsZSIsICI0R0IgYXZhaWxhYmxlIgogKi8KZXhwb3J0IGZ1bmN0aW9uIG1lbW9yeV9hdmFpbGFibGUoKTogc3RyaW5nIHsKICBpZiAoSVNfTElOVVgpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IG1lbWluZm8gPSBmcy5yZWFkRmlsZVN5bmMoIi9wcm9jL21lbWluZm8iLCAidXRmOCIpOwogICAgICBjb25zdCBhdmFpbGFibGVNYXRjaCA9IG1lbWluZm8ubWF0Y2goL01lbUF2YWlsYWJsZTpccysoXGQrKSBrQi8pOwogICAgICBpZiAoYXZhaWxhYmxlTWF0Y2gpIHsKICAgICAgICBjb25zdCBhdmFpbGFibGVHQiA9IE1hdGgucm91bmQocGFyc2VJbnQoYXZhaWxhYmxlTWF0Y2hbMV0pIC8gMTAyNCAvIDEwMjQpOwogICAgICAgIHJldHVybiBgJHthdmFpbGFibGVHQn1HQiBhdmFpbGFibGVgOwogICAgICB9CiAgICB9IGNhdGNoIHt9CiAgICByZXR1cm4gIiI7CiAgfQoKICBpZiAoSVNfTUFDKSB7CiAgICB0cnkgewogICAgICBjb25zdCB2bVN0YXQgPSBleGVjQ29tbWFuZCgidm1fc3RhdCIpOwogICAgICBjb25zdCBwYWdlU2l6ZU1hdGNoID0gdm1TdGF0Lm1hdGNoKC9wYWdlIHNpemUgb2YgKFxkKykgYnl0ZXMvKTsKICAgICAgY29uc3QgZnJlZU1hdGNoID0gdm1TdGF0Lm1hdGNoKC9QYWdlcyBmcmVlOlxzKyhcZCspXC4vKTsKICAgICAgY29uc3QgaW5hY3RpdmVNYXRjaCA9IHZtU3RhdC5tYXRjaCgvUGFnZXMgaW5hY3RpdmU6XHMrKFxkKylcLi8pOwoKICAgICAgaWYgKHBhZ2VTaXplTWF0Y2ggJiYgZnJlZU1hdGNoICYmIGluYWN0aXZlTWF0Y2gpIHsKICAgICAgICBjb25zdCBwYWdlU2l6ZSA9IHBhcnNlSW50KHBhZ2VTaXplTWF0Y2hbMV0pOwogICAgICAgIGNvbnN0IGF2YWlsYWJsZVBhZ2VzID0gcGFyc2VJbnQoZnJlZU1hdGNoWzFdKSArIHBhcnNlSW50KGluYWN0aXZlTWF0Y2hbMV0pOwogICAgICAgIGNvbnN0IGF2YWlsYWJsZUdCID0gTWF0aC5yb3VuZCgoYXZhaWxhYmxlUGFnZXMgKiBwYWdlU2l6ZSkgLyAoMTAyNCAqIDEwMjQgKiAxMDI0KSk7CiAgICAgICAgcmV0dXJuIGAke2F2YWlsYWJsZUdCfUdCIGF2YWlsYWJsZWA7CiAgICAgIH0KICAgIH0gY2F0Y2gge30KICAgIHJldHVybiAiIjsKICB9CgogIHJldHVybiAiIjsKfQoKLyoqCiAqIEdldHMgc3dhcCBtZW1vcnkgdXNhZ2UKICogQ2FsY3VsYXRlcyBzd2FwIHVzYWdlIGZyb20gL3Byb2MvbWVtaW5mbyAoTGludXgpIG9yIGBzeXNjdGwgdm0uc3dhcHVzYWdlYAogKiAobWFjT1MpCiAqIEByZXR1cm5zIFN3YXAgdXNhZ2UgYXMgInBlcmNlbnRhZ2UgKHNpemUgTUIpIHN3YXAiIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiMTUlICg1MTJNQikgc3dhcCIsICIwJSAoME1CKSBzd2FwIgogKi8KZXhwb3J0IGZ1bmN0aW9uIHN3YXBfdXNlZCgpOiBzdHJpbmcgewogIGlmIChJU19MSU5VWCkgewogICAgdHJ5IHsKICAgICAgY29uc3QgbWVtaW5mbyA9IGZzLnJlYWRGaWxlU3luYygiL3Byb2MvbWVtaW5mbyIsICJ1dGY4Iik7CiAgICAgIGNvbnN0IHN3YXBUb3RhbE1hdGNoID0gbWVtaW5mby5tYXRjaCgvU3dhcFRvdGFsOlxzKyhcZCspIGtCLyk7CiAgICAgIGNvbnN0IHN3YXBGcmVlTWF0Y2ggPSBtZW1pbmZvLm1hdGNoKC9Td2FwRnJlZTpccysoXGQrKSBrQi8pOwoKICAgICAgaWYgKHN3YXBUb3RhbE1hdGNoICYmIHN3YXBGcmVlTWF0Y2gpIHsKICAgICAgICBjb25zdCBzd2FwVG90YWwgPSBwYXJzZUludChzd2FwVG90YWxNYXRjaFsxXSk7CiAgICAgICAgY29uc3Qgc3dhcEZyZWUgPSBwYXJzZUludChzd2FwRnJlZU1hdGNoWzFdKTsKICAgICAgICBjb25zdCBzd2FwVXNlZCA9IHN3YXBUb3RhbCAtIHN3YXBGcmVlOwoKICAgICAgICBpZiAoc3dhcFRvdGFsID4gMCkgewogICAgICAgICAgY29uc3Qgc3dhcFVzZWRQZXJjZW50ID0gTWF0aC5yb3VuZCgoc3dhcFVzZWQgLyBzd2FwVG90YWwpICogMTAwKTsKICAgICAgICAgIGNvbnN0IHN3YXBVc2VkTUIgPSBNYXRoLnJvdW5kKHN3YXBVc2VkIC8gMTAyNCk7CiAgICAgICAgICByZXR1cm4gYCR7c3dhcFVzZWRQZXJjZW50fSUgKCR7c3dhcFVzZWRNQn1NQikgc3dhcGA7CiAgICAgICAgfQogICAgICB9CiAgICB9IGNhdGNoIHt9CiAgICByZXR1cm4gIiI7CiAgfQoKICBpZiAoSVNfTUFDKSB7CiAgICB0cnkgewogICAgICBjb25zdCBzd2FwdXNhZ2UgPSBleGVjQ29tbWFuZCgic3lzY3RsIC1uIHZtLnN3YXB1c2FnZSIpOwogICAgICBjb25zdCBtYXRjaCA9IHN3YXB1c2FnZS5tYXRjaCgKICAgICAgICAvdG90YWxccyo9XHMqKFtcZC5dKylNXHMrdXNlZFxzKj1ccyooW1xkLl0rKU1ccytmcmVlXHMqPVxzKihbXGQuXSspTS8KICAgICAgKTsKCiAgICAgIGlmIChtYXRjaCkgewogICAgICAgIGNvbnN0IHN3YXBUb3RhbCA9IHBhcnNlRmxvYXQobWF0Y2hbMV0pOwogICAgICAgIGNvbnN0IHN3YXBVc2VkTUIgPSBwYXJzZUZsb2F0KG1hdGNoWzJdKTsKCiAgICAgICAgaWYgKHN3YXBUb3RhbCA+IDApIHsKICAgICAgICAgIGNvbnN0IHN3YXBVc2VkUGVyY2VudCA9IE1hdGgucm91bmQoKHN3YXBVc2VkTUIgLyBzd2FwVG90YWwpICogMTAwKTsKICAgICAgICAgIHJldHVybiBgJHtzd2FwVXNlZFBlcmNlbnR9JSAoJHtNYXRoLnJvdW5kKHN3YXBVc2VkTUIpfU1CKSBzd2FwYDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAiMCUgKDBNQikgc3dhcCI7CiAgICAgIH0KICAgIH0gY2F0Y2gge30KICAgIHJldHVybiAiIjsKICB9CgogIHJldHVybiAiIjsKfQoKLyoqCiAqIEdldHMgcm9vdCBmaWxlc3lzdGVtIGRpc2sgdXNhZ2UgcGVyY2VudGFnZQogKiBVc2VzIGRmIGNvbW1hbmQgb24gTGludXgvQW5kcm9pZC9tYWNPUwogKiBAcGFyYW0gY29udGV4dCAtIEluZm8gY29udGV4dCB3aXRoIGNhY2hlCiAqIEByZXR1cm5zIFBlcmNlbnRhZ2Ugc3RyaW5nIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiNDUlIiwgIjc4JSIKICovCmV4cG9ydCBmdW5jdGlvbiBkaXNrX3VzZWQoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJkaXNrX3VzZWQiKTsKICBpZiAoY2FjaGVkICE9PSBudWxsKSByZXR1cm4gY2FjaGVkOwoKICBpZiAoSVNfTElOVVggfHwgSVNfTUFDKSB7CiAgICB0cnkgewogICAgICBjb25zdCBkZiA9IGV4ZWNDb21tYW5kKCJkZiAtaCIpOwogICAgICBsZXQgZGlza1VzYWdlID0gIiI7CgogICAgICBpZiAoZGYuaW5jbHVkZXMoIi9zdG9yYWdlL2VtdWxhdGVkIikpIHsKICAgICAgICBjb25zdCBtYXRjaCA9IGRmLm1hdGNoKC9ccysoXGQrJSlccytcL3N0b3JhZ2VcL2VtdWxhdGVkLyk7CiAgICAgICAgZGlza1VzYWdlID0gbWF0Y2ggPyBtYXRjaFsxXSA6ICIiOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IGxpbmVzID0gZGYuc3BsaXQoIlxuIik7CiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7CiAgICAgICAgICBpZiAobGluZS50cmltKCkuZW5kc1dpdGgoIiAvIikpIHsKICAgICAgICAgICAgY29uc3QgcGFydHMgPSBsaW5lLnRyaW0oKS5zcGxpdCgvXHMrLyk7CiAgICAgICAgICAgIGNvbnN0IHBlcmNlbnRJbmRleCA9IHBhcnRzLmZpbmRJbmRleCgocGFydCkgPT4gcGFydC5pbmNsdWRlcygiJSIpKTsKICAgICAgICAgICAgaWYgKHBlcmNlbnRJbmRleCAhPT0gLTEpIHsKICAgICAgICAgICAgICBkaXNrVXNhZ2UgPSBwYXJ0c1twZXJjZW50SW5kZXhdOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIWRpc2tVc2FnZSkgewogICAgICAgICAgY29uc3Qgcm9vdE1hdGNoID0gZGYubWF0Y2goLyhcZCslKVxzK1wvXHMqJC9tKTsKICAgICAgICAgIGRpc2tVc2FnZSA9IHJvb3RNYXRjaCA/IHJvb3RNYXRjaFsxXSA6ICIiOwogICAgICAgIH0KICAgICAgfQoKICAgICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImRpc2tfdXNlZCIsIGRpc2tVc2FnZSk7CiAgICAgIHJldHVybiBkaXNrVXNhZ2U7CiAgICB9IGNhdGNoIHt9CiAgfQoKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGlza191c2VkIiwgIiIpOwogIHJldHVybiAiIjsKfQoKLyoqCiAqIE1pbmltdW0gdG90YWwgc2l6ZSAoaW4gS0IpIGZvciBhIHBhcnRpdGlvbiB0byBiZSBjb25zaWRlcmVkIGEgcmVhbCBkaXNrCiAqIHJhdGhlciB0aGFuIGEgc21hbGwgc3lzdGVtL2Jvb3QgcGFydGl0aW9uCiAqLwpjb25zdCBNSU5fUkVBTF9ESVNLX0tCID0gMTAgKiAxMDI0ICogMTAyNDsgLy8gMTBHQgoKLyoqCiAqIEdldHMgZGlzayBzaXplICh1c2VkL3RvdGFsKSBmb3IgZWFjaCByZWFsIGRpc2sKICogVXNlcyBgZGYgLWtgIG9uIExpbnV4L21hY09TLCBmaWx0ZXJpbmcgb3V0IHBzZXVkbyBmaWxlc3lzdGVtcywgc3lzdGVtL2Jvb3QKICogcGFydGl0aW9ucyAoZS5nLiAvYm9vdCwgL1N5c3RlbS9Wb2x1bWVzLyopLCBhbmQgYW55dGhpbmcgdW5kZXIgMTBHQiwgc2luY2UKICogdGhvc2UgYXJlbid0IGRpc2tzIGEgdXNlciB3b3VsZCBjYXJlIGFib3V0LiBXaGVuIGV4YWN0bHkgb25lIHJlYWwgZGlzayBpcwogKiBmb3VuZCAodGhlIGNvbW1vbiBjYXNlKSB0aGUgcmVzdWx0IG9taXRzIHRoZSBtb3VudCBwb2ludDsgd2hlbiBtdWx0aXBsZQogKiByZWFsIGRpc2tzIGFyZSBmb3VuZCAoZS5nLiBhIGRhdGEgZHJpdmUgb3IgZXh0ZXJuYWwgdm9sdW1lKSwgZWFjaCBpcwogKiBsYWJlbGVkIGJ5IGl0cyBtb3VudCBwb2ludC4KICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBEaXNrIHNpemUgYXMgInVzZWQvdG90YWwgR0IiIG9yICJtb3VudCh1c2VkL3RvdGFsIEdCKSAuLi4iIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiMjU2LzUxMkdCIiwgIi8oMTAwLzUwMEdCKSAvVm9sdW1lcy9CYWNrdXAoOTAwLzIwMDBHQikiCiAqLwpleHBvcnQgZnVuY3Rpb24gZGlza19zaXplKGNvbnRleHQ6IEluZm9Db250ZXh0KTogc3RyaW5nIHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGlza19zaXplIik7CiAgaWYgKGNhY2hlZCAhPT0gbnVsbCkgcmV0dXJuIGNhY2hlZDsKCiAgaWYgKCFJU19MSU5VWCAmJiAhSVNfTUFDKSB7CiAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGlza19zaXplIiwgIiIpOwogICAgcmV0dXJuICIiOwogIH0KCiAgdHJ5IHsKICAgIGNvbnN0IGRmID0gZXhlY0NvbW1hbmQoImRmIC1rIik7CiAgICBjb25zdCBsaW5lcyA9IGRmLnRyaW0oKS5zcGxpdCgiXG4iKS5zbGljZSgxKTsKICAgIGNvbnN0IGRpc2tzOiB7IG1vdW50OiBzdHJpbmc7IHVzZWRHQjogbnVtYmVyOyB0b3RhbEdCOiBudW1iZXIgfVtdID0gW107CgogICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7CiAgICAgIGNvbnN0IHBhcnRzID0gbGluZS50cmltKCkuc3BsaXQoL1xzKy8pOwogICAgICBpZiAocGFydHMubGVuZ3RoIDwgNikgY29udGludWU7CgogICAgICBjb25zdCBmaWxlc3lzdGVtID0gcGFydHNbMF07CiAgICAgIGNvbnN0IHRvdGFsS0IgPSBwYXJzZUludChwYXJ0c1sxXSk7CiAgICAgIGNvbnN0IHVzZWRLQiA9IHBhcnNlSW50KHBhcnRzWzJdKTsKICAgICAgY29uc3QgbW91bnQgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTsKCiAgICAgIGlmIChpc05hTih0b3RhbEtCKSB8fCBpc05hTih1c2VkS0IpIHx8IHRvdGFsS0IgPCBNSU5fUkVBTF9ESVNLX0tCKSBjb250aW51ZTsKCiAgICAgIGlmIChJU19NQUMpIHsKICAgICAgICAvLyBPbmx5IHRoZSBib290IGRpc2sgKCIvIikgYW5kIGV4dGVybmFsbHkgbW91bnRlZCByZWFsIGRpc2tzIGNvdW50LgogICAgICAgIC8vIEFQRlMgaW50ZXJuYWwgc3lzdGVtIHZvbHVtZXMgKERhdGEsIFZNLCBQcmVib290LCBVcGRhdGUsIC4uLikgYWxsCiAgICAgICAgLy8gbGl2ZSB1bmRlciAvU3lzdGVtL1ZvbHVtZXMgYW5kIGFyZW4ndCBzZXBhcmF0ZSBwaHlzaWNhbCBkaXNrcy4KICAgICAgICBpZiAobW91bnQgIT09ICIvIiAmJiAhbW91bnQuc3RhcnRzV2l0aCgiL1ZvbHVtZXMvIikpIGNvbnRpbnVlOwogICAgICB9IGVsc2UgewogICAgICAgIGlmICgKICAgICAgICAgIGZpbGVzeXN0ZW0uc3RhcnRzV2l0aCgiZGV2dG1wZnMiKSB8fAogICAgICAgICAgZmlsZXN5c3RlbS5zdGFydHNXaXRoKCJ0bXBmcyIpIHx8CiAgICAgICAgICBmaWxlc3lzdGVtID09PSAib3ZlcmxheSIgfHwKICAgICAgICAgIG1vdW50LnN0YXJ0c1dpdGgoIi9ib290IikgfHwKICAgICAgICAgIG1vdW50LnN0YXJ0c1dpdGgoIi9kZXYiKSB8fAogICAgICAgICAgbW91bnQuc3RhcnRzV2l0aCgiL3Byb2MiKSB8fAogICAgICAgICAgbW91bnQuc3RhcnRzV2l0aCgiL3N5cyIpIHx8CiAgICAgICAgICBtb3VudC5zdGFydHNXaXRoKCIvcnVuIikKICAgICAgICApIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgfQoKICAgICAgZGlza3MucHVzaCh7CiAgICAgICAgbW91bnQsCiAgICAgICAgdXNlZEdCOiBNYXRoLnJvdW5kKHVzZWRLQiAvICgxMDI0ICogMTAyNCkpLAogICAgICAgIHRvdGFsR0I6IE1hdGgucm91bmQodG90YWxLQiAvICgxMDI0ICogMTAyNCkpLAogICAgICB9KTsKICAgIH0KCiAgICBsZXQgcmVzdWx0ID0gIiI7CiAgICBpZiAoZGlza3MubGVuZ3RoID09PSAxKSB7CiAgICAgIHJlc3VsdCA9IGAke2Rpc2tzWzBdLnVzZWRHQn0vJHtkaXNrc1swXS50b3RhbEdCfUdCYDsKICAgIH0gZWxzZSBpZiAoZGlza3MubGVuZ3RoID4gMSkgewogICAgICByZXN1bHQgPSBkaXNrcwogICAgICAgIC5tYXAoKGQpID0+IGAke2QubW91bnR9KCR7ZC51c2VkR0J9LyR7ZC50b3RhbEdCfUdCKWApCiAgICAgICAgLmpvaW4oIiAiKTsKICAgIH0KCiAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGlza19zaXplIiwgcmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfSBjYXRjaCB7fQoKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGlza19zaXplIiwgIiIpOwogIHJldHVybiAiIjsKfQoKLyoqCiAqIEdldHMgbW91bnRlZCBmaWxlc3lzdGVtIGluZm9ybWF0aW9uCiAqIExpc3RzIG5vbi1zeXN0ZW0gbW91bnQgcG9pbnRzIHdpdGggdXNhZ2UgZnJvbSBkZiAoTGludXgvbWFjT1MpCiAqIE9uIExpbnV4LCBleGNsdWRlcyAvLCAvZGV2LCAvcHJvYywgL3N5cyBhbmQgaW50ZXJuYWwgL1N5c3RlbS9Wb2x1bWVzIG1vdW50cy4KICogT24gbWFjT1MsIEFQRlMgaW50ZXJuYWwgdm9sdW1lcyAoRGF0YSwgVk0sIFByZWJvb3QsIFVwZGF0ZSwgLi4uKSBhbGwgbGl2ZQogKiB1bmRlciAvU3lzdGVtL1ZvbHVtZXMgYW5kIGFyZSBub3QgdXNlci1yZWxldmFudCwgc28gb25seSAvVm9sdW1lcyAoZXh0ZXJuYWwKICogZGlza3MsIG5ldHdvcmsgc2hhcmVzLCBkaXNrIGltYWdlcykgYXJlIHJlcG9ydGVkLgogKiBAcGFyYW0gY29udGV4dCAtIEluZm8gY29udGV4dCB3aXRoIGNhY2hlCiAqIEByZXR1cm5zIFNwYWNlLXNlcGFyYXRlZCBtb3VudCBwb2ludHMgd2l0aCB1c2FnZSBvciBlbXB0eSBzdHJpbmcKICogQGV4YW1wbGUgIi9ob21lKDQ1JSkgL21udC9kYXRhKDc4JSkiLCAiL1ZvbHVtZXMvQmFja3VwKDc4JSkiCiAqLwpleHBvcnQgZnVuY3Rpb24gbW91bnRfcG9pbnRzKGNvbnRleHQ6IEluZm9Db250ZXh0KTogc3RyaW5nIHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAibW91bnRfcG9pbnRzIik7CiAgaWYgKGNhY2hlZCAhPT0gbnVsbCkgcmV0dXJuIGNhY2hlZDsKCiAgaWYgKCFJU19MSU5VWCAmJiAhSVNfTUFDKSB7CiAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAibW91bnRfcG9pbnRzIiwgIiIpOwogICAgcmV0dXJuICIiOwogIH0KCiAgdHJ5IHsKICAgIGNvbnN0IGRmID0gZXhlY0NvbW1hbmQoImRmIC1oIik7CiAgICBjb25zdCBsaW5lcyA9IGRmLnNwbGl0KCJcbiIpLnNsaWNlKDEpOwogICAgY29uc3QgbW91bnRQb2ludHM6IHN0cmluZ1tdID0gW107CgogICAgbGluZXMuZm9yRWFjaCgobGluZSkgPT4gewogICAgICBjb25zdCBwYXJ0cyA9IGxpbmUudHJpbSgpLnNwbGl0KC9ccysvKTsKICAgICAgaWYgKHBhcnRzLmxlbmd0aCA8IDIpIHJldHVybjsKCiAgICAgIGNvbnN0IG1vdW50UG9pbnQgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTsKICAgICAgY29uc3QgdXNhZ2UgPSBwYXJ0cy5maW5kKChwYXJ0KSA9PiAvXlxkKyUkLy50ZXN0KHBhcnQpKSB8fCAiIjsKCiAgICAgIGlmICghdXNhZ2UpIHJldHVybjsKCiAgICAgIGlmIChJU19NQUMpIHsKICAgICAgICAvLyBTa2lwIHRoZSAiTWFjaW50b3NoIEhEIiBzZWxmLXN5bWxpbmsgYW5kIGFueSBvdGhlciBzeW1saW5rIGJhY2sgdG8gLwogICAgICAgIGlmIChtb3VudFBvaW50LnN0YXJ0c1dpdGgoIi9Wb2x1bWVzLyIpICYmIG1vdW50UG9pbnQgIT09ICIvIikgewogICAgICAgICAgbW91bnRQb2ludHMucHVzaChgJHttb3VudFBvaW50fSgke3VzYWdlfSlgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBpZiAoCiAgICAgICAgIW1vdW50UG9pbnQuc3RhcnRzV2l0aCgiL2RldiIpICYmCiAgICAgICAgIW1vdW50UG9pbnQuc3RhcnRzV2l0aCgiL3Byb2MiKSAmJgogICAgICAgICFtb3VudFBvaW50LnN0YXJ0c1dpdGgoIi9zeXMiKSAmJgogICAgICAgICFtb3VudFBvaW50LnN0YXJ0c1dpdGgoIi9TeXN0ZW0vVm9sdW1lcyIpICYmCiAgICAgICAgbW91bnRQb2ludCAhPT0gIi8iCiAgICAgICkgewogICAgICAgIG1vdW50UG9pbnRzLnB1c2goYCR7bW91bnRQb2ludH0oJHt1c2FnZX0pYCk7CiAgICAgIH0KICAgIH0pOwoKICAgIGNvbnN0IHJlc3VsdCA9IG1vdW50UG9pbnRzLnNsaWNlKDAsIDMpLmpvaW4oIiAiKTsKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJtb3VudF9wb2ludHMiLCByZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9IGNhdGNoIHt9CgogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJtb3VudF9wb2ludHMiLCAiIik7CiAgcmV0dXJuICIiOwp9Cg==", q = "data:video/mp2t;base64,LyoqCiAqIE5ldHdvcmstcmVsYXRlZCBzeXN0ZW0gaW5mb3JtYXRpb24gZnVuY3Rpb25zCiAqIEBtb2R1bGUgaW5mby9uZXR3b3JrCiAqLwoKaW1wb3J0IG9zIGZyb20gIm9zIjsKaW1wb3J0IHR5cGUgeyBJbmZvQ29udGV4dCB9IGZyb20gIi4uL3R5cGVzL2ludGVybmFsLXR5cGVzIjsKaW1wb3J0IHsgSVNfTElOVVgsIElTX01BQyB9IGZyb20gIi4uL3V0aWxzL3BsYXRmb3JtIjsKaW1wb3J0IHsgZXhlY0NvbW1hbmQgfSBmcm9tICIuLi91dGlscy9jb21tYW5kIjsKaW1wb3J0IHsgZ2V0Q2FjaGVkVmFsdWUsIHNldENhY2hlZFZhbHVlIH0gZnJvbSAiLi4vY2FjaGUvY2FjaGUiOwoKLyoqCiAqIEdldHMgcHVibGljIElQIGFkZHJlc3MgZnJvbSBpcGluZm8uaW8KICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZSBhbmQgSVAgaW5mbwogKiBAcmV0dXJucyBQdWJsaWMgSVB2NCBhZGRyZXNzIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiMjAzLjAuMTEzLjQyIgogKi8KZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlwKGNvbnRleHQ6IEluZm9Db250ZXh0KTogUHJvbWlzZTxzdHJpbmc+IHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiaXAiKTsKICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkOwoKICBpZiAoIWNvbnRleHQuaXBJbmZvKSB7CiAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiaXAiLCAiIik7CiAgICByZXR1cm4gIiI7CiAgfQogIGNvbnN0IGlwID0gY29udGV4dC5pcEluZm8uaXAgfHwgIiI7CiAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImlwIiwgaXApOwogIHJldHVybiBpcDsKfQoKLyoqCiAqIEdldHMgbG9jYWwvcHJpdmF0ZSBJUCBhZGRyZXNzKGVzKQogKiBUcmllcyBpZmNvbmZpZyBhbmQgaXAgY29tbWFuZHMgb24gTGludXgsIGZhbGxzIGJhY2sgdG8gTm9kZS5qcyBBUEkKICogQHJldHVybnMgU3BhY2Utc2VwYXJhdGVkIGxvY2FsIElQIGFkZHJlc3NlcyAoUkZDIDE5MTggcmFuZ2VzKQogKiBAZXhhbXBsZSAiMTkyLjE2OC4xLjEwMCIgb3IgIjEwLjAuMC41MCAxOTIuMTY4LjEuMTAwIgogKi8KZXhwb3J0IGZ1bmN0aW9uIGlwbG9jYWwoKTogc3RyaW5nIHsKICBpZiAoSVNfTElOVVgpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IGlmY29uZmlnID0gZXhlY0NvbW1hbmQoImlmY29uZmlnIDI+L2Rldi9udWxsIik7CiAgICAgIGNvbnN0IHdsYW5NYXRjaCA9IGlmY29uZmlnLm1hdGNoKAogICAgICAgIC93bGFuMFtcc1xTXSo/aW5ldCAoXGQrXC5cZCtcLlxkK1wuXGQrKS8KICAgICAgKTsKICAgICAgaWYgKHdsYW5NYXRjaCkgewogICAgICAgIHJldHVybiB3bGFuTWF0Y2hbMV07CiAgICAgIH0KICAgIH0gY2F0Y2gge30KCiAgICB0cnkgewogICAgICBjb25zdCBpcEFkZHIgPSBleGVjQ29tbWFuZCgiaXAgYWRkciBzaG93IDI+L2Rldi9udWxsIik7CiAgICAgIGNvbnN0IGFkZHJlc3Nlczogc3RyaW5nW10gPSBbXTsKICAgICAgY29uc3QgbWF0Y2hlcyA9IGlwQWRkci5tYXRjaEFsbCgvaW5ldCAoXGQrXC5cZCtcLlxkK1wuXGQrKVwvXGQrL2cpOwogICAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIG1hdGNoZXMpIHsKICAgICAgICBpZiAoIW1hdGNoWzFdLnN0YXJ0c1dpdGgoIjEyNy4iKSkgewogICAgICAgICAgYWRkcmVzc2VzLnB1c2gobWF0Y2hbMV0pOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoYWRkcmVzc2VzLmxlbmd0aCA+IDApIHsKICAgICAgICByZXR1cm4gYWRkcmVzc2VzLmpvaW4oIiAiKTsKICAgICAgfQogICAgfSBjYXRjaCB7fQogIH0KCiAgY29uc3QgaW50ZXJmYWNlcyA9IG9zLm5ldHdvcmtJbnRlcmZhY2VzKCk7CiAgY29uc3QgYWRkcmVzc2VzOiBzdHJpbmdbXSA9IFtdOwoKICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMoaW50ZXJmYWNlcykpIHsKICAgIGZvciAoY29uc3QgZGV2aWNlIG9mIGludGVyZmFjZXNbbmFtZV0gfHwgW10pIHsKICAgICAgaWYgKGRldmljZS5mYW1pbHkgPT09ICJJUHY0IiAmJiAhZGV2aWNlLmludGVybmFsKSB7CiAgICAgICAgYWRkcmVzc2VzLnB1c2goZGV2aWNlLmFkZHJlc3MpOwogICAgICB9CiAgICB9CiAgfQoKICByZXR1cm4gYWRkcmVzc2VzLmpvaW4oIiAiKTsKfQoKLyoqCiAqIEdldHMgZ2VvZ3JhcGhpYyBjaXR5IGJhc2VkIG9uIHB1YmxpYyBJUAogKiBAcGFyYW0gY29udGV4dCAtIEluZm8gY29udGV4dCB3aXRoIElQIGdlb2xvY2F0aW9uIGRhdGEKICogQHJldHVybnMgQ2l0eSBuYW1lIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiU2FuIEZyYW5jaXNjbyIsICJOZXcgWW9yayIsICJMb25kb24iCiAqLwpleHBvcnQgYXN5bmMgZnVuY3Rpb24gY2l0eShjb250ZXh0OiBJbmZvQ29udGV4dCk6IFByb21pc2U8c3RyaW5nPiB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImNpdHkiKTsKICBpZiAoY2FjaGVkICE9PSBudWxsKSByZXR1cm4gY2FjaGVkOwoKICBpZiAoIWNvbnRleHQuaXBJbmZvIHx8ICFjb250ZXh0LmlwSW5mby5jaXR5KSB7CiAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiY2l0eSIsICIiKTsKICAgIHJldHVybiAiIjsKICB9CiAgY29uc3QgY2l0eSA9IGNvbnRleHQuaXBJbmZvLmNpdHk7CiAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImNpdHkiLCBjaXR5KTsKICByZXR1cm4gY2l0eTsKfQoKLyoqCiAqIEdldHMgcmV2ZXJzZSBETlMgaG9zdG5hbWUgd2l0aCBIVFRQIHByZWZpeAogKiBAcGFyYW0gY29udGV4dCAtIEluZm8gY29udGV4dCB3aXRoIElQIGluZm8KICogQHJldHVybnMgRG9tYWluIHdpdGggaHR0cDovLyBwcmVmaXggb3IgZW1wdHkgc3RyaW5nCiAqIEBleGFtcGxlICJodHRwOi8vZXhhbXBsZS5jb20iLCAiaHR0cDovL2hvc3QtMjAzLTAtMTEzLTQyLmV4YW1wbGUubmV0IgogKi8KZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvbWFpbihjb250ZXh0OiBJbmZvQ29udGV4dCk6IFByb21pc2U8c3RyaW5nPiB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImRvbWFpbiIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmICghY29udGV4dC5pcEluZm8gfHwgIWNvbnRleHQuaXBJbmZvLmhvc3RuYW1lKSB7CiAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZG9tYWluIiwgIiIpOwogICAgcmV0dXJuICIiOwogIH0KICBjb25zdCBkb21haW4gPSBgaHR0cDovLyR7Y29udGV4dC5pcEluZm8uaG9zdG5hbWV9YDsKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZG9tYWluIiwgZG9tYWluKTsKICByZXR1cm4gZG9tYWluOwp9CgovKioKICogR2V0cyBJbnRlcm5ldCBTZXJ2aWNlIFByb3ZpZGVyIG5hbWUKICogU3RyaXBzIEFTIG51bWJlciBwcmVmaXggZnJvbSBvcmdhbml6YXRpb24gc3RyaW5nCiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggSVAgaW5mbwogKiBAcmV0dXJucyBJU1AgbmFtZSBvciBlbXB0eSBzdHJpbmcKICogQGV4YW1wbGUgIkNvbWNhc3QgQ2FibGUiLCAiVmVyaXpvbiBCdXNpbmVzcyIsICJDbG91ZGZsYXJlIEluYyIKICovCmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc3AoY29udGV4dDogSW5mb0NvbnRleHQpOiBQcm9taXNlPHN0cmluZz4gewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJpc3AiKTsKICBpZiAoY2FjaGVkICE9PSBudWxsKSByZXR1cm4gY2FjaGVkOwoKICBpZiAoIWNvbnRleHQuaXBJbmZvIHx8ICFjb250ZXh0LmlwSW5mby5vcmcpIHsKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJpc3AiLCAiIik7CiAgICByZXR1cm4gIiI7CiAgfQogIGNvbnN0IGlzcCA9IGNvbnRleHQuaXBJbmZvLm9yZy5zcGxpdCgiICIpLnNsaWNlKDEpLmpvaW4oIiAiKTsKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiaXNwIiwgaXNwKTsKICByZXR1cm4gaXNwOwp9CgovKioKICogR2V0cyBhY3RpdmUgbmV0d29yayBpbnRlcmZhY2UgbmFtZXMKICogTGlzdHMgbm9uLWxvb3BiYWNrIGludGVyZmFjZXMgd2l0aCBJUHY0IGFkZHJlc3NlcyAoTGludXgvbWFjT1Mgb25seSkKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBTcGFjZS1zZXBhcmF0ZWQgaW50ZXJmYWNlIG5hbWVzIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiZXRoMCB3bGFuMCIsICJlbjAgZW4xIgogKi8KZXhwb3J0IGZ1bmN0aW9uIG5ldHdvcmtfaW50ZXJmYWNlcyhjb250ZXh0OiBJbmZvQ29udGV4dCk6IHN0cmluZyB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgIm5ldHdvcmtfaW50ZXJmYWNlcyIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmICghSVNfTElOVVggJiYgIUlTX01BQykgewogICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgIm5ldHdvcmtfaW50ZXJmYWNlcyIsICIiKTsKICAgIHJldHVybiAiIjsKICB9CgogIHRyeSB7CiAgICBjb25zdCBpbnRlcmZhY2VzID0gb3MubmV0d29ya0ludGVyZmFjZXMoKTsKICAgIGNvbnN0IGFjdGl2ZUludGVyZmFjZXM6IHN0cmluZ1tdID0gW107CgogICAgZm9yIChjb25zdCBbbmFtZSwgYWRkcnNdIG9mIE9iamVjdC5lbnRyaWVzKGludGVyZmFjZXMpKSB7CiAgICAgIGlmIChuYW1lICE9PSAibG8iKSB7CiAgICAgICAgY29uc3QgaXB2NEFkZHIgPSBhZGRycz8uZmluZCgKICAgICAgICAgIChhZGRyKSA9PiBhZGRyLmZhbWlseSA9PT0gIklQdjQiICYmICFhZGRyLmludGVybmFsCiAgICAgICAgKTsKICAgICAgICBpZiAoaXB2NEFkZHIpIHsKICAgICAgICAgIGFjdGl2ZUludGVyZmFjZXMucHVzaChuYW1lKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBjb25zdCByZXN1bHQgPSBhY3RpdmVJbnRlcmZhY2VzLmpvaW4oIiAiKTsKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJuZXR3b3JrX2ludGVyZmFjZXMiLCByZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9IGNhdGNoIHt9CgogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJuZXR3b3JrX2ludGVyZmFjZXMiLCAiIik7CiAgcmV0dXJuICIiOwp9Ci8qKgogKiBHZXRzIG9wZW4gVENQIHBvcnRzIHdpdGggc2VydmljZSBuYW1lcwogKiBVc2VzIGxzb2YgdG8gZmluZCBsaXN0ZW5pbmcgVENQIHBvcnRzIChMaW51eC9tYWNPUyBvbmx5KQogKiBAcGFyYW0gY29udGV4dCAtIEluZm8gY29udGV4dCB3aXRoIGNhY2hlCiAqIEByZXR1cm5zIFNwYWNlLXNlcGFyYXRlZCBwb3J0K3Byb2Nlc3MgcGFpcnMgb3IgZW1wdHkgc3RyaW5nCiAqIEBleGFtcGxlICI4MGh0dHAgNDQzaHR0cCAyMnNzaCIsICIzMDAwbm9kZSA1NDMycG9zdCIKICovCmV4cG9ydCBmdW5jdGlvbiBwb3J0cyhjb250ZXh0OiBJbmZvQ29udGV4dCk6IHN0cmluZyB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInBvcnRzIik7CiAgaWYgKGNhY2hlZCAhPT0gbnVsbCkgcmV0dXJuIGNhY2hlZDsKCiAgaWYgKElTX0xJTlVYIHx8IElTX01BQykgewogICAgdHJ5IHsKICAgICAgY29uc3QgbHNvZiA9IGV4ZWNDb21tYW5kKCJsc29mIC1uUCAtaVRDUCAtc1RDUDpMSVNURU4iKTsKICAgICAgY29uc3QgbGluZXMgPSBsc29mLnNwbGl0KCJcbiIpLnNsaWNlKDEpOwogICAgICBjb25zdCBwb3J0cyA9IG5ldyBTZXQ8c3RyaW5nPigpOwoKICAgICAgbGluZXMuZm9yRWFjaCgobGluZSkgPT4gewogICAgICAgIGNvbnN0IHBhcnRzID0gbGluZS5zcGxpdCgvXHMrLyk7CiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+PSA5KSB7CiAgICAgICAgICBjb25zdCBhZGRyZXNzID0gcGFydHNbOF07CiAgICAgICAgICBjb25zdCBwb3J0TWF0Y2ggPSBhZGRyZXNzLm1hdGNoKC86KFxkKykkLyk7CiAgICAgICAgICBpZiAocG9ydE1hdGNoKSB7CiAgICAgICAgICAgIGNvbnN0IHBvcnQgPSBwb3J0TWF0Y2hbMV07CiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3MgPSBwYXJ0c1swXS5zdWJzdHJpbmcoMCwgNCk7CiAgICAgICAgICAgIHBvcnRzLmFkZChgJHtwb3J0fSR7cHJvY2Vzc31gKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwoKICAgICAgY29uc3QgcmVzdWx0ID0gQXJyYXkuZnJvbShwb3J0cykuam9pbigiICIpOwogICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAicG9ydHMiLCByZXN1bHQpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfSBjYXRjaCB7fQogIH0KCiAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInBvcnRzIiwgIiIpOwogIHJldHVybiAiIjsKfQo=", II = "data:video/mp2t;base64,LyoqCiAqIEBmaWxlb3ZlcnZpZXcgQ292ZXJzIHRoZSBwbGF0Zm9ybSBmYWN0cyBgYWJvdXQtc3lzdGVtYCBvcGVucyBpdHMgcmVhZG91dAogKiB3aXRoOiB1c2VyLCBob3N0bmFtZSwgT1MgbmFtZSwga2VybmVsIGFuZCBkZXZpY2UgbW9kZWwuCiAqCiAqIEVhY2ggb2YgdGhlc2Ugc2hlbGxzIG91dCB0byBhIGRpZmZlcmVudCB0b29sIHBlciBwbGF0Zm9ybSBhbmQgcGFyc2VzIGl0cwogKiBvdXRwdXQsIHNvIHRoZSB0ZXN0cyBkcml2ZSB0aGUgTGludXggcGF0aCAodGhlIG9uZSBDSSBydW5zIG9uKSBlbmQgdG8gZW5kIGFuZAogKiBwaW4gdGhlIHR3byBiZWhhdmlvdXJzIHRoYXQgaG9sZCBldmVyeXdoZXJlOiB0aGUgY2FjaGUgaXMgY29uc3VsdGVkIGJlZm9yZQogKiBhbnkgY29tbWFuZCBydW5zLCBhbmQgYSBtaXNzaW5nIHRvb2wgZGVncmFkZXMgdG8gYSBmYWxsYmFjayByYXRoZXIgdGhhbgogKiB0aHJvd2luZy4KICovCgppbXBvcnQgeyBhZnRlckVhY2gsIGJlZm9yZUVhY2gsIGRlc2NyaWJlLCBleHBlY3QsIGl0LCB2aSB9IGZyb20gInZpdGVzdCI7CgovLyBUaGVzZSBtb2R1bGVzIGJpbmQgdGhlaXIgaW1wb3J0cyBieSBuYW1lLCBzbyB0aGUgZGVwZW5kZW5jaWVzIGhhdmUgdG8gYmUKLy8gbW9ja2VkIG91dHJpZ2h0IHJhdGhlciB0aGFuIHNwaWVkIG9uIHRocm91Z2ggYSBuYW1lc3BhY2Ugb2JqZWN0Lgpjb25zdCBleGVjQ29tbWFuZCA9IHZpLmhvaXN0ZWQoKCkgPT4gdmkuZm4oKSk7CmNvbnN0IGNvbW1hbmRFeGlzdHMgPSB2aS5ob2lzdGVkKCgpID0+IHZpLmZuKCkpOwp2aS5tb2NrKCIuLi91dGlscy9jb21tYW5kIiwgKCkgPT4gKHsgZXhlY0NvbW1hbmQsIGNvbW1hbmRFeGlzdHMgfSkpOwoKY29uc3Qgb3NNb2NrID0gdmkuaG9pc3RlZCgoKSA9PiAoewogIHBsYXRmb3JtOiB2aS5mbigoKSA9PiAibGludXgiKSwKICByZWxlYXNlOiB2aS5mbigoKSA9PiAiNi4xLjAtZ2VuZXJpYyIpLAogIGhvc3RuYW1lOiB2aS5mbigoKSA9PiAid29ya3N0YXRpb24iKSwKICB1c2VySW5mbzogdmkuZm4oKCkgPT4gKHsgdXNlcm5hbWU6ICJhZGEiIH0pKSwKICAvLyBjYWNoZS1jb25maWcgcmVzb2x2ZXMgdGhlIGNhY2hlIGZpbGUgdW5kZXIgdGhlIHRlbXAgZGlyZWN0b3J5IGF0IGltcG9ydCB0aW1lLgogIHRtcGRpcjogdmkuZm4oKCkgPT4gIi90bXAiKSwKfSkpOwp2aS5tb2NrKCJvcyIsICgpID0+ICh7IC4uLm9zTW9jaywgZGVmYXVsdDogb3NNb2NrIH0pKTsKCmNvbnN0IGZzTW9jayA9IHZpLmhvaXN0ZWQoKCkgPT4gKHsKICBleGlzdHNTeW5jOiB2aS5mbigoKSA9PiBmYWxzZSksCiAgcmVhZEZpbGVTeW5jOiB2aS5mbigoKSA9PiAiIiksCn0pKTsKdmkubW9jaygiZnMiLCAoKSA9PiAoeyAuLi5mc01vY2ssIGRlZmF1bHQ6IGZzTW9jayB9KSk7Cgpjb25zdCB7IGRldmljZSwgaG9zdG5hbWUsIGtlcm5lbCwgb3NfaW5mbywgdXNlciB9ID0gYXdhaXQgaW1wb3J0KCIuL3BsYXRmb3JtIik7CmNvbnN0IHsgSVNfTElOVVggfSA9IGF3YWl0IGltcG9ydCgiLi4vdXRpbHMvcGxhdGZvcm0iKTsKaW1wb3J0IHR5cGUgeyBJbmZvQ29udGV4dCB9IGZyb20gIi4uL3R5cGVzL2ludGVybmFsLXR5cGVzIjsKCmNvbnN0IGNvbnRleHQgPSAoKTogSW5mb0NvbnRleHQgPT4gKHsgY2FjaGU6IHt9IH0pOwoKYmVmb3JlRWFjaCgoKSA9PiB7CiAgZXhlY0NvbW1hbmQubW9ja1JldHVyblZhbHVlKCIiKTsKICBjb21tYW5kRXhpc3RzLm1vY2tSZXR1cm5WYWx1ZShmYWxzZSk7CiAgZnNNb2NrLmV4aXN0c1N5bmMubW9ja1JldHVyblZhbHVlKGZhbHNlKTsKICBmc01vY2sucmVhZEZpbGVTeW5jLm1vY2tSZXR1cm5WYWx1ZSgiIik7Cn0pOwoKYWZ0ZXJFYWNoKCgpID0+IHsKICB2aS5jbGVhckFsbE1vY2tzKCk7Cn0pOwoKZGVzY3JpYmUoInVzZXIgYW5kIGhvc3RuYW1lIiwgKCkgPT4gewogIGl0KCJyZWFkcyB0aGUgY3VycmVudCB1c2VybmFtZSIsICgpID0+IHsKICAgIGV4cGVjdCh1c2VyKCkpLnRvQmUoImFkYSIpOwogIH0pOwoKICBpdCgicmVhZHMgdGhlIG1hY2hpbmUncyBuZXR3b3JrIG5hbWUiLCAoKSA9PiB7CiAgICBleHBlY3QoaG9zdG5hbWUoKSkudG9CZSgid29ya3N0YXRpb24iKTsKICB9KTsKfSk7CgpkZXNjcmliZSgia2VybmVsIiwgKCkgPT4gewogIGl0KCJyZXBvcnRzIHRoZSBrZXJuZWwgcmVsZWFzZSIsICgpID0+IHsKICAgIGV4cGVjdChrZXJuZWwoY29udGV4dCgpKSkudG9CZSgiNi4xLjAtZ2VuZXJpYyIpOwogIH0pOwoKICBpdCgiY2FjaGVzIHRoZSByZXN1bHQiLCAoKSA9PiB7CiAgICBjb25zdCBjdHggPSBjb250ZXh0KCk7CiAgICBrZXJuZWwoY3R4KTsKICAgIGV4cGVjdChjdHguY2FjaGUua2VybmVsPy52YWx1ZSkudG9CZSgiNi4xLjAtZ2VuZXJpYyIpOwogIH0pOwoKICBpdCgic2VydmVzIGEgY2FjaGVkIGtlcm5lbCB3aXRob3V0IGFza2luZyB0aGUgT1MgYWdhaW4iLCAoKSA9PiB7CiAgICBjb25zdCBjdHggPSBjb250ZXh0KCk7CiAgICBjdHguY2FjaGUua2VybmVsID0geyB2YWx1ZTogImNhY2hlZC1rZXJuZWwiLCB0aW1lc3RhbXA6IERhdGUubm93KCkgfTsKCiAgICBleHBlY3Qoa2VybmVsKGN0eCkpLnRvQmUoImNhY2hlZC1rZXJuZWwiKTsKICAgIGV4cGVjdChvc01vY2sucmVsZWFzZSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTsKICB9KTsKfSk7CgpkZXNjcmliZSgib3NfaW5mbyIsICgpID0+IHsKICBpdCgic2VydmVzIGEgY2FjaGVkIHZhbHVlIHdpdGhvdXQgcnVubmluZyBhbnkgY29tbWFuZCIsICgpID0+IHsKICAgIGNvbnN0IGN0eCA9IGNvbnRleHQoKTsKICAgIGN0eC5jYWNoZS5vcyA9IHsgdmFsdWU6ICJDYWNoZWQgT1MgMS4wIiwgdGltZXN0YW1wOiBEYXRlLm5vdygpIH07CgogICAgZXhwZWN0KG9zX2luZm8oY3R4KSkudG9CZSgiQ2FjaGVkIE9TIDEuMCIpOwogICAgZXhwZWN0KGV4ZWNDb21tYW5kKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpOwogIH0pOwoKICBpdCgiY2FjaGVzIHdoYXRldmVyIGl0IHJlc29sdmVzIiwgKCkgPT4gewogICAgY29uc3QgY3R4ID0gY29udGV4dCgpOwogICAgY29uc3QgcmVzb2x2ZWQgPSBvc19pbmZvKGN0eCk7CiAgICBleHBlY3QoY3R4LmNhY2hlLm9zPy52YWx1ZSkudG9CZShyZXNvbHZlZCk7CiAgfSk7CgogIGl0KCJuZXZlciByZXR1cm5zIGFuIGVtcHR5IHN0cmluZywgd2hhdGV2ZXIgdGhlIHBsYXRmb3JtIiwgKCkgPT4gewogICAgZXhwZWN0KG9zX2luZm8oY29udGV4dCgpKSkudG9CZVRydXRoeSgpOwogIH0pOwoKICBpdC5ydW5JZihJU19MSU5VWCkoInJlYWRzIHRoZSBkaXN0cmlidXRpb24gZnJvbSAvZXRjL29zLXJlbGVhc2UiLCAoKSA9PiB7CiAgICBmc01vY2suZXhpc3RzU3luYy5tb2NrUmV0dXJuVmFsdWUodHJ1ZSk7CiAgICBmc01vY2sucmVhZEZpbGVTeW5jLm1vY2tSZXR1cm5WYWx1ZSgKICAgICAgJ05BTUU9IlVidW50dSJcblZFUlNJT05fSUQ9IjIyLjA0IlxuSUQ9dWJ1bnR1XG4nLAogICAgKTsKCiAgICBleHBlY3Qob3NfaW5mbyhjb250ZXh0KCkpKS50b0JlKCJVYnVudHUgMjIuMDQiKTsKICB9KTsKCiAgaXQucnVuSWYoSVNfTElOVVgpKCJ1c2VzIHRoZSBuYW1lIGFsb25lIHdoZW4gdGhlcmUgaXMgbm8gdmVyc2lvbiBpZCIsICgpID0+IHsKICAgIGZzTW9jay5yZWFkRmlsZVN5bmMubW9ja1JldHVyblZhbHVlKCdOQU1FPSJBcmNoIExpbnV4IlxuJyk7CiAgICBleHBlY3Qob3NfaW5mbyhjb250ZXh0KCkpKS50b0JlKCJBcmNoIExpbnV4Iik7CiAgfSk7CgogIGl0LnJ1bklmKElTX0xJTlVYKSgiZmFsbHMgYmFjayB0byB0aGUga2VybmVsIHJlbGVhc2Ugd2l0aCBubyBvcy1yZWxlYXNlIGZpbGUiLCAoKSA9PiB7CiAgICBmc01vY2sucmVhZEZpbGVTeW5jLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiRU5PRU5UIik7CiAgICB9KTsKCiAgICBleHBlY3Qob3NfaW5mbyhjb250ZXh0KCkpKS50b0JlKCJMaW51eCA2LjEuMC1nZW5lcmljIik7CiAgfSk7CgogIGl0LnJ1bklmKElTX0xJTlVYKSgiZmFsbHMgYmFjayB0byBhIGJhcmUgTGludXggd2hlbiB0aGUgZmlsZSBoYXMgbm8gTkFNRSIsICgpID0+IHsKICAgIGZzTW9jay5yZWFkRmlsZVN5bmMubW9ja1JldHVyblZhbHVlKCJJRD11bmtub3duXG4iKTsKICAgIGV4cGVjdChvc19pbmZvKGNvbnRleHQoKSkpLnRvQmUoIkxpbnV4Iik7CiAgfSk7Cn0pOwoKZGVzY3JpYmUoImRldmljZSIsICgpID0+IHsKICBpdCgic2VydmVzIGEgY2FjaGVkIG1vZGVsIHdpdGhvdXQgcHJvYmluZyIsICgpID0+IHsKICAgIGNvbnN0IGN0eCA9IGNvbnRleHQoKTsKICAgIGN0eC5jYWNoZS5kZXZpY2UgPSB7IHZhbHVlOiAiQ2FjaGVkIEJveCIsIHRpbWVzdGFtcDogRGF0ZS5ub3coKSB9OwoKICAgIGV4cGVjdChkZXZpY2UoY3R4KSkudG9CZSgiQ2FjaGVkIEJveCIpOwogICAgZXhwZWN0KGV4ZWNDb21tYW5kKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpOwogIH0pOwoKICBpdCgiY2FjaGVzIGFuIGVtcHR5IHJlc3VsdCB0b28sIHNvIHRoZSBwcm9iZSBpcyBub3QgcmVwZWF0ZWQiLCAoKSA9PiB7CiAgICBjb25zdCBjdHggPSBjb250ZXh0KCk7CiAgICBkZXZpY2UoY3R4KTsKICAgIGV4cGVjdChjdHguY2FjaGUuZGV2aWNlKS50b0JlRGVmaW5lZCgpOwogIH0pOwoKICBpdCgicmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgd2hlbiBub3RoaW5nIGlkZW50aWZpZXMgdGhlIG1hY2hpbmUiLCAoKSA9PiB7CiAgICBleHBlY3QoZGV2aWNlKGNvbnRleHQoKSkpLnRvQmUoIiIpOwogIH0pOwoKICBpdC5ydW5JZihJU19MSU5VWCkoInJlYWRzIHRoZSBtb2RlbCBmcm9tIHRoZSBETUkgcHJvZHVjdCBuYW1lIiwgKCkgPT4gewogICAgZnNNb2NrLmV4aXN0c1N5bmMubW9ja0ltcGxlbWVudGF0aW9uKAogICAgICAocGF0aDogc3RyaW5nKSA9PiBwYXRoID09PSAiL3N5cy9kZXZpY2VzL3ZpcnR1YWwvZG1pL2lkL3Byb2R1Y3RfbmFtZSIsCiAgICApOwogICAgZnNNb2NrLnJlYWRGaWxlU3luYy5tb2NrUmV0dXJuVmFsdWUoIk9wdGlQbGV4IDcwOTBcbiIpOwoKICAgIGV4cGVjdChkZXZpY2UoY29udGV4dCgpKSkudG9CZSgiT3B0aVBsZXggNzA5MCIpOwogIH0pOwoKICBpdC5ydW5JZihJU19MSU5VWCkoInByZWZlcnMgQW5kcm9pZCdzIGdldHByb3Agd2hlbiBpdCBpcyBhdmFpbGFibGUiLCAoKSA9PiB7CiAgICBjb21tYW5kRXhpc3RzLm1vY2tJbXBsZW1lbnRhdGlvbigoY21kOiBzdHJpbmcpID0+IGNtZCA9PT0gImdldHByb3AiKTsKICAgIGV4ZWNDb21tYW5kLm1vY2tSZXR1cm5WYWx1ZSgiUGl4ZWwgOCIpOwoKICAgIGV4cGVjdChkZXZpY2UoY29udGV4dCgpKSkudG9CZSgiUGl4ZWwgOCIpOwogICAgZXhwZWN0KGV4ZWNDb21tYW5kKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgiZ2V0cHJvcCByby5wcm9kdWN0Lm1vZGVsIik7CiAgfSk7CgogIGl0LnJ1bklmKElTX0xJTlVYKSgiZmFsbHMgdGhyb3VnaCB0byBETUkgd2hlbiBnZXRwcm9wIGFuc3dlcnMgbm90aGluZyIsICgpID0+IHsKICAgIGNvbW1hbmRFeGlzdHMubW9ja0ltcGxlbWVudGF0aW9uKChjbWQ6IHN0cmluZykgPT4gY21kID09PSAiZ2V0cHJvcCIpOwogICAgZXhlY0NvbW1hbmQubW9ja1JldHVyblZhbHVlKCIiKTsKICAgIGZzTW9jay5leGlzdHNTeW5jLm1vY2tSZXR1cm5WYWx1ZSh0cnVlKTsKICAgIGZzTW9jay5yZWFkRmlsZVN5bmMubW9ja1JldHVyblZhbHVlKCJTdGVhbSBEZWNrXG4iKTsKCiAgICBleHBlY3QoZGV2aWNlKGNvbnRleHQoKSkpLnRvQmUoIlN0ZWFtIERlY2siKTsKICB9KTsKCiAgaXQucnVuSWYoSVNfTElOVVgpKCJpZ25vcmVzIGEgYmxhbmsgRE1JIHByb2R1Y3QgbmFtZSIsICgpID0+IHsKICAgIGZzTW9jay5leGlzdHNTeW5jLm1vY2tSZXR1cm5WYWx1ZSh0cnVlKTsKICAgIGZzTW9jay5yZWFkRmlsZVN5bmMubW9ja1JldHVyblZhbHVlKCIgICBcbiIpOwoKICAgIGV4cGVjdChkZXZpY2UoY29udGV4dCgpKSkudG9CZSgiIik7CiAgfSk7CgogIGl0LnJ1bklmKElTX0xJTlVYKSgic3Vydml2ZXMgYW4gdW5yZWFkYWJsZSBETUkgZmlsZSIsICgpID0+IHsKICAgIGZzTW9jay5leGlzdHNTeW5jLm1vY2tSZXR1cm5WYWx1ZSh0cnVlKTsKICAgIGZzTW9jay5yZWFkRmlsZVN5bmMubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJFQUNDRVMiKTsKICAgIH0pOwoKICAgIGV4cGVjdChkZXZpY2UoY29udGV4dCgpKSkudG9CZSgiIik7CiAgfSk7Cn0pOwo=", gI = "data:video/mp2t;base64,LyoqCiAqIFBsYXRmb3JtLXJlbGF0ZWQgc3lzdGVtIGluZm9ybWF0aW9uIGZ1bmN0aW9ucwogKiBAbW9kdWxlIGluZm8vcGxhdGZvcm0KICovCgppbXBvcnQgb3MgZnJvbSAib3MiOwppbXBvcnQgZnMgZnJvbSAiZnMiOwppbXBvcnQgdHlwZSB7IEluZm9Db250ZXh0IH0gZnJvbSAiLi4vdHlwZXMvaW50ZXJuYWwtdHlwZXMiOwppbXBvcnQgeyBJU19XSU5ET1dTLCBJU19NQUMsIElTX0xJTlVYIH0gZnJvbSAiLi4vdXRpbHMvcGxhdGZvcm0iOwppbXBvcnQgeyBleGVjQ29tbWFuZCwgY29tbWFuZEV4aXN0cyB9IGZyb20gIi4uL3V0aWxzL2NvbW1hbmQiOwppbXBvcnQgeyBnZXRDYWNoZWRWYWx1ZSwgc2V0Q2FjaGVkVmFsdWUgfSBmcm9tICIuLi9jYWNoZS9jYWNoZSI7CgovKioKICogR2V0cyB0aGUgY3VycmVudCB1c2VybmFtZQogKiBAcmV0dXJucyBDdXJyZW50IHN5c3RlbSB1c2VybmFtZQogKi8KZXhwb3J0IGZ1bmN0aW9uIHVzZXIoKTogc3RyaW5nIHsKICByZXR1cm4gb3MudXNlckluZm8oKS51c2VybmFtZTsKfQoKLyoqCiAqIEdldHMgdGhlIHN5c3RlbSBob3N0bmFtZQogKiBAcmV0dXJucyBDb21wdXRlciBob3N0bmFtZS9uZXR3b3JrIG5hbWUKICovCmV4cG9ydCBmdW5jdGlvbiBob3N0bmFtZSgpOiBzdHJpbmcgewogIHJldHVybiBvcy5ob3N0bmFtZSgpOwp9CgovKioKICogR2V0cyBvcGVyYXRpbmcgc3lzdGVtIG5hbWUgYW5kIHZlcnNpb24KICogUGxhdGZvcm0tc3BlY2lmaWMgZGV0ZWN0aW9uIGZvciBXaW5kb3dzLCBtYWNPUywgYW5kIExpbnV4CiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgT1MgbmFtZSBhbmQgdmVyc2lvbiBzdHJpbmcKICogQGV4YW1wbGUgIldpbmRvd3MgMTEgUHJvIiwgIm1hY09TIFZlbnR1cmEgMTMuMi4xIiwgIlVidW50dSAyMi4wNC4zIExUUyIKICovCmV4cG9ydCBmdW5jdGlvbiBvc19pbmZvKGNvbnRleHQ6IEluZm9Db250ZXh0KTogc3RyaW5nIHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAib3MiKTsKICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkOwoKICBjb25zdCBwbGF0Zm9ybSA9IG9zLnBsYXRmb3JtKCk7CiAgY29uc3QgcmVsZWFzZSA9IG9zLnJlbGVhc2UoKTsKICBsZXQgb3NOYW1lID0gIiI7CgogIGlmIChJU19XSU5ET1dTKSB7CiAgICB0cnkgewogICAgICBjb25zdCB2ZXJzaW9uID0gZXhlY0NvbW1hbmQoInZlciIpOwogICAgICBjb25zdCBtYXRjaCA9IHZlcnNpb24ubWF0Y2goL01pY3Jvc29mdCBXaW5kb3dzIFxbVmVyc2lvbiAoW15cXV0rKVxdLyk7CiAgICAgIG9zTmFtZSA9IG1hdGNoID8gYFdpbmRvd3MgJHttYXRjaFsxXX1gIDogYFdpbmRvd3MgJHtyZWxlYXNlfWA7CiAgICB9IGNhdGNoIHsKICAgICAgb3NOYW1lID0gYFdpbmRvd3MgJHtyZWxlYXNlfWA7CiAgICB9CiAgfSBlbHNlIGlmIChJU19NQUMpIHsKICAgIGNvbnN0IHByb2R1Y3ROYW1lID0gZXhlY0NvbW1hbmQoInN3X3ZlcnMgLXByb2R1Y3ROYW1lIik7CiAgICBjb25zdCBwcm9kdWN0VmVyc2lvbiA9IGV4ZWNDb21tYW5kKCJzd192ZXJzIC1wcm9kdWN0VmVyc2lvbiIpOwogICAgb3NOYW1lID0KICAgICAgcHJvZHVjdE5hbWUgJiYgcHJvZHVjdFZlcnNpb24KICAgICAgICA/IGAke3Byb2R1Y3ROYW1lfSAke3Byb2R1Y3RWZXJzaW9ufWAKICAgICAgICA6IGBtYWNPUyAke3JlbGVhc2V9YDsKICB9IGVsc2UgaWYgKElTX0xJTlVYKSB7CiAgICB0cnkgewogICAgICBjb25zdCBvc1JlbGVhc2UgPSBmcy5yZWFkRmlsZVN5bmMoIi9ldGMvb3MtcmVsZWFzZSIsICJ1dGY4Iik7CiAgICAgIGNvbnN0IG5hbWVNYXRjaCA9IG9zUmVsZWFzZS5tYXRjaCgvXk5BTUU9IihbXiJdKykiL20pOwogICAgICBjb25zdCB2ZXJzaW9uTWF0Y2ggPSBvc1JlbGVhc2UubWF0Y2goL15WRVJTSU9OX0lEPSIoW14iXSspIi9tKTsKICAgICAgb3NOYW1lID0gbmFtZU1hdGNoID8gbmFtZU1hdGNoWzFdIDogIkxpbnV4IjsKICAgICAgaWYgKHZlcnNpb25NYXRjaCkgb3NOYW1lICs9IGAgJHt2ZXJzaW9uTWF0Y2hbMV19YDsKICAgIH0gY2F0Y2ggewogICAgICBvc05hbWUgPSBgTGludXggJHtyZWxlYXNlfWA7CiAgICB9CiAgfSBlbHNlIHsKICAgIG9zTmFtZSA9IGAke3BsYXRmb3JtfSAke3JlbGVhc2V9YDsKICB9CgogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJvcyIsIG9zTmFtZSk7CiAgcmV0dXJuIG9zTmFtZTsKfQoKLyoqCiAqIEdldHMga2VybmVsIHZlcnNpb24gc3RyaW5nCiAqIFJldHVybnMgdGhlIG9wZXJhdGluZyBzeXN0ZW0ga2VybmVsIHZlcnNpb24gZnJvbSBvcy5yZWxlYXNlKCkKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBLZXJuZWwgdmVyc2lvbiBzdHJpbmcKICogQGV4YW1wbGUgIjUuMTUuMC01Ni1nZW5lcmljIiwgIjYuMTEuMTEtdmFsdmUxMi0xLW5lcHR1bmUiCiAqLwpleHBvcnQgZnVuY3Rpb24ga2VybmVsKGNvbnRleHQ6IEluZm9Db250ZXh0KTogc3RyaW5nIHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAia2VybmVsIik7CiAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDsKCiAgY29uc3Qga2VybmVsID0gb3MucmVsZWFzZSgpOwogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJrZXJuZWwiLCBrZXJuZWwpOwogIHJldHVybiBrZXJuZWw7Cn0KCi8qKgogKiBHZXRzIGRldmljZSBvciBjb21wdXRlciBtb2RlbCBuYW1lCiAqIFVzZXMgV01JIG9uIFdpbmRvd3MsIERNSSBvbiBMaW51eCwgZ2V0cHJvcCBvbiBBbmRyb2lkCiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgRGV2aWNlIG1vZGVsIG5hbWUgb3IgZW1wdHkgc3RyaW5nCiAqIEBleGFtcGxlICJEZWxsIE9wdGlQbGV4IDcwOTAiLCAiTWFjQm9vayBQcm8gMTYtaW5jaCIsICJWYWx2ZSBTdGVhbSBEZWNrIgogKi8KZXhwb3J0IGZ1bmN0aW9uIGRldmljZShjb250ZXh0OiBJbmZvQ29udGV4dCk6IHN0cmluZyB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImRldmljZSIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmIChJU19XSU5ET1dTKSB7CiAgICB0cnkgewogICAgICBjb25zdCB3bWljID0gZXhlY0NvbW1hbmQoIndtaWMgY3Nwcm9kdWN0IGdldCBuYW1lIC9mb3JtYXQ6bGlzdCIpOwogICAgICBjb25zdCBuYW1lTWF0Y2ggPSB3bWljLm1hdGNoKC9OYW1lPSguKykvKTsKICAgICAgaWYgKG5hbWVNYXRjaCkgewogICAgICAgIGNvbnN0IGRldmljZSA9IG5hbWVNYXRjaFsxXS50cmltKCk7CiAgICAgICAgaWYgKGRldmljZSAmJiBkZXZpY2UgIT09ICIiKSB7CiAgICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGV2aWNlIiwgZGV2aWNlKTsKICAgICAgICAgIHJldHVybiBkZXZpY2U7CiAgICAgICAgfQogICAgICB9CiAgICB9IGNhdGNoIHt9CgogICAgdHJ5IHsKICAgICAgY29uc3QgcHMgPSBleGVjQ29tbWFuZCgKICAgICAgICAncG93ZXJzaGVsbC5leGUgLUNvbW1hbmQgIkdldC1XbWlPYmplY3QgLUNsYXNzIFdpbjMyX0NvbXB1dGVyU3lzdGVtIHwgU2VsZWN0LU9iamVjdCAtRXhwYW5kUHJvcGVydHkgTW9kZWwiJwogICAgICApOwogICAgICBpZiAocHMudHJpbSgpKSB7CiAgICAgICAgY29uc3QgZGV2aWNlID0gcHMudHJpbSgpOwogICAgICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJkZXZpY2UiLCBkZXZpY2UpOwogICAgICAgIHJldHVybiBkZXZpY2U7CiAgICAgIH0KICAgIH0gY2F0Y2gge30KICB9IGVsc2UgaWYgKElTX01BQykgewogICAgY29uc3QgcHJvZmlsZSA9IGV4ZWNDb21tYW5kKCJzeXN0ZW1fcHJvZmlsZXIgU1BIYXJkd2FyZURhdGFUeXBlIik7CiAgICBjb25zdCBuYW1lTWF0Y2ggPSBwcm9maWxlLm1hdGNoKC9Nb2RlbCBOYW1lOlxzKiguKykvKTsKICAgIGlmIChuYW1lTWF0Y2gpIHsKICAgICAgY29uc3QgZGV2aWNlID0gbmFtZU1hdGNoWzFdLnRyaW0oKTsKICAgICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImRldmljZSIsIGRldmljZSk7CiAgICAgIHJldHVybiBkZXZpY2U7CiAgICB9CiAgfSBlbHNlIGlmIChJU19MSU5VWCkgewogICAgdHJ5IHsKICAgICAgaWYgKGNvbW1hbmRFeGlzdHMoImdldHByb3AiKSkgewogICAgICAgIGNvbnN0IGRldmljZSA9IGV4ZWNDb21tYW5kKCJnZXRwcm9wIHJvLnByb2R1Y3QubW9kZWwiKTsKICAgICAgICBpZiAoZGV2aWNlKSB7CiAgICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGV2aWNlIiwgZGV2aWNlKTsKICAgICAgICAgIHJldHVybiBkZXZpY2U7CiAgICAgICAgfQogICAgICB9CgogICAgICBjb25zdCBkbWlQYXRoID0gIi9zeXMvZGV2aWNlcy92aXJ0dWFsL2RtaS9pZC9wcm9kdWN0X25hbWUiOwogICAgICBpZiAoZnMuZXhpc3RzU3luYyhkbWlQYXRoKSkgewogICAgICAgIGNvbnN0IGRldmljZSA9IGZzLnJlYWRGaWxlU3luYyhkbWlQYXRoLCAidXRmOCIpLnRyaW0oKTsKICAgICAgICBpZiAoZGV2aWNlKSB7CiAgICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGV2aWNlIiwgZGV2aWNlKTsKICAgICAgICAgIHJldHVybiBkZXZpY2U7CiAgICAgICAgfQogICAgICB9CiAgICB9IGNhdGNoIHt9CiAgfQoKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGV2aWNlIiwgIiIpOwogIHJldHVybiAiIjsKfQo=", iI = "data:video/mp2t;base64,LyoqCiAqIFByb2Nlc3MtcmVsYXRlZCBzeXN0ZW0gaW5mb3JtYXRpb24gZnVuY3Rpb25zCiAqIEBtb2R1bGUgaW5mby9wcm9jZXNzCiAqLwoKaW1wb3J0IG9zIGZyb20gIm9zIjsKaW1wb3J0IHR5cGUgeyBJbmZvQ29udGV4dCB9IGZyb20gIi4uL3R5cGVzL2ludGVybmFsLXR5cGVzIjsKaW1wb3J0IHsgSVNfTElOVVgsIElTX01BQyB9IGZyb20gIi4uL3V0aWxzL3BsYXRmb3JtIjsKaW1wb3J0IHsgZXhlY0NvbW1hbmQgfSBmcm9tICIuLi91dGlscy9jb21tYW5kIjsKaW1wb3J0IHsgZ2V0Q2FjaGVkVmFsdWUsIHNldENhY2hlZFZhbHVlIH0gZnJvbSAiLi4vY2FjaGUvY2FjaGUiOwoKLyoqCiAqIEdldHMgdGhlIGhpZ2hlc3QgQ1BVLWNvbnN1bWluZyBwcm9jZXNzCiAqIFVzZXMgcHMgY29tbWFuZCB0byBmaW5kIHRvcCBwcm9jZXNzIGJ5IENQVSB1c2FnZSAoTGludXgvbWFjT1Mgb25seSkKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBQcm9jZXNzIGluZm8gYXMgInBlcmNlbnRhZ2UgcHJvY2Vzc25hbWUiIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiOCUgZmlyZWZveCIsICIxNSUgY2hyb21lIiwgIjMlIHN5c3RlbWQiCiAqLwpleHBvcnQgZnVuY3Rpb24gdG9wX3Byb2Nlc3MoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJ0b3BfcHJvY2VzcyIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmIChJU19MSU5VWCkgewogICAgdHJ5IHsKICAgICAgY29uc3QgcHMgPSBleGVjQ29tbWFuZCgicHMgLWVvIHBjcHUsY29tbSAtLXNvcnQ9LSVjcHUgLS1uby1oZWFkZXJzIik7CiAgICAgIGNvbnN0IGxpbmVzID0gcHMuc3BsaXQoIlxuIik7CiAgICAgIGlmIChsaW5lcy5sZW5ndGggPiAwKSB7CiAgICAgICAgY29uc3QgdG9wUHJvY2VzcyA9IGxpbmVzWzBdLnRyaW0oKS5yZXBsYWNlKC9ccysvLCAiICIpLnNwbGl0KCIgIik7CiAgICAgICAgY29uc3QgY3B1ID0gdG9wUHJvY2Vzc1swXS5yZXBsYWNlKC9cLlxkKy8sICIlIik7CiAgICAgICAgY29uc3QgcHJvY2VzcyA9IHRvcFByb2Nlc3NbMV0uc3BsaXQoIi8iKS5wb3AoKTsKICAgICAgICBjb25zdCByZXN1bHQgPSBgJHtjcHV9JSAke3Byb2Nlc3N9YDsKICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAidG9wX3Byb2Nlc3MiLCByZXN1bHQpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgIH0gY2F0Y2gge30KICB9IGVsc2UgaWYgKElTX01BQykgewogICAgdHJ5IHsKICAgICAgLy8gLWMgZ2l2ZXMgdGhlIHNob3J0IGNvbW1hbmQgbmFtZSwgLXIgc29ydHMgYnkgJUNQVSBkZXNjZW5kaW5nCiAgICAgIGNvbnN0IHBzID0gZXhlY0NvbW1hbmQoInBzIC1BY2VvIHBjcHUsY29tbSAtciIpOwogICAgICBjb25zdCBsaW5lcyA9IHBzLnNwbGl0KCJcbiIpLmZpbHRlcigobGluZSkgPT4gbGluZS50cmltKCkpOwogICAgICBpZiAobGluZXMubGVuZ3RoID4gMSkgewogICAgICAgIGNvbnN0IHRvcFByb2Nlc3MgPSBsaW5lc1sxXS50cmltKCkuc3BsaXQoL1xzKy8pOwogICAgICAgIGNvbnN0IGNwdVZhbHVlID0gTWF0aC5yb3VuZChwYXJzZUZsb2F0KHRvcFByb2Nlc3NbMF0pKTsKICAgICAgICBjb25zdCBwcm9jZXNzID0gdG9wUHJvY2Vzcy5zbGljZSgxKS5qb2luKCIgIik7CiAgICAgICAgaWYgKCFpc05hTihjcHVWYWx1ZSkgJiYgcHJvY2VzcykgewogICAgICAgICAgY29uc3QgcmVzdWx0ID0gYCR7Y3B1VmFsdWV9JSAke3Byb2Nlc3N9YDsKICAgICAgICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJ0b3BfcHJvY2VzcyIsIHJlc3VsdCk7CiAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0KICAgICAgfQogICAgfSBjYXRjaCB7fQogIH0KCiAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInRvcF9wcm9jZXNzIiwgIiIpOwogIHJldHVybiAiIjsKfQoKLyoqCiAqIEdldHMgc3lzdGVtIHVwdGltZSBzaW5jZSBsYXN0IGJvb3QKICogQHJldHVybnMgVXB0aW1lIGZvcm1hdHRlZCBhcyAiWGQgWWggWm0iCiAqIEBleGFtcGxlICIyZCAxNGggMjNtIiwgIjBkIDNoIDQ1bSIKICovCmV4cG9ydCBmdW5jdGlvbiB1cHRpbWUoKTogc3RyaW5nIHsKICBjb25zdCB1cHRpbWVTZWNvbmRzID0gb3MudXB0aW1lKCk7CiAgY29uc3QgZGF5cyA9IE1hdGguZmxvb3IodXB0aW1lU2Vjb25kcyAvIDg2NDAwKTsKICBjb25zdCBob3VycyA9IE1hdGguZmxvb3IoKHVwdGltZVNlY29uZHMgJSA4NjQwMCkgLyAzNjAwKTsKICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcigodXB0aW1lU2Vjb25kcyAlIDM2MDApIC8gNjApOwogIHJldHVybiBgJHtkYXlzfWQgJHtob3Vyc31oICR7bWludXRlc31tYDsKfQoKLyoqCiAqIEdldHMgbnVtYmVyIG9mIGxvZ2dlZCBpbiB1c2VycwogKiBVc2VzIHdobyBjb21tYW5kIHRvIGNvdW50IGFjdGl2ZSB1c2VyIHNlc3Npb25zIChMaW51eC9tYWNPUyBvbmx5KQogKiBAcmV0dXJucyBVc2VyIGNvdW50IHdpdGggInVzZXJzIiBzdWZmaXggb3IgZW1wdHkgc3RyaW5nCiAqIEBleGFtcGxlICIzIHVzZXJzIiwgIjEgdXNlcnMiCiAqLwpleHBvcnQgZnVuY3Rpb24gdXNlcnNfbG9nZ2VkX2luKCk6IHN0cmluZyB7CiAgaWYgKCFJU19MSU5VWCAmJiAhSVNfTUFDKSByZXR1cm4gIiI7CgogIHRyeSB7CiAgICBjb25zdCB3aG8gPSBleGVjQ29tbWFuZCgid2hvIik7CiAgICBjb25zdCB1c2VycyA9IHdoby5zcGxpdCgiXG4iKS5maWx0ZXIoKGxpbmUpID0+IGxpbmUudHJpbSgpKS5sZW5ndGg7CiAgICBpZiAodXNlcnMgPiAwKSB7CiAgICAgIHJldHVybiBgJHt1c2Vyc30gdXNlcnNgOwogICAgfQogIH0gY2F0Y2gge30KICByZXR1cm4gIiI7Cn0K", cI = "data:video/mp2t;base64,LyoqCiAqIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnQKICogQG1vZHVsZSBpbmZvL3NldHRpbmdzCiAqLwoKaW1wb3J0IHBhdGggZnJvbSAicGF0aCI7CmltcG9ydCBvcyBmcm9tICJvcyI7CmltcG9ydCBmcyBmcm9tICJmcyI7CmltcG9ydCBwcm9jZXNzIGZyb20gInByb2Nlc3MiOwoKLy8gU2V0dGluZ3MgZmlsZSBwYXRocwpleHBvcnQgY29uc3QgU0VUVElOR1NfRklMRSA9IHBhdGguam9pbigKICBvcy5ob21lZGlyKCksCiAgIi5jb25maWciLAogICJzeXN0ZW1pbmZvLXNldHRpbmdzLmpzb24iLAopOwpleHBvcnQgY29uc3QgQ0FDSEVfRklMRSA9IHBhdGguam9pbihvcy50bXBkaXIoKSwgInN5c3RlbWluZm8tY2FjaGUuanNvbiIpOwoKLy8gQ29sb3IgY29kZXMKLy8KLy8gVGhlc2UgYXJlIGRlbGliZXJhdGVseSBkYXJrZXIvbW9yZSBzYXR1cmF0ZWQgdGhhbiBhIHR5cGljYWwgdGVybWluYWwKLy8gcGFsZXR0ZS4gVGhlIG9yaWdpbmFsIGJyaWdodCB2YXJpYW50cyAoZS5nLiB5ZWxsb3cgMjI2LCBjeWFuIDUxLCBncmF5IDI1MCkKLy8gaGF2ZSB2ZXJ5IGhpZ2ggbHVtaW5hbmNlIGFuZCBhcmUgbmVhcmx5IHVucmVhZGFibGUgb24gYSBsaWdodC93aGl0ZQovLyB0ZXJtaW5hbCBiYWNrZ3JvdW5kLiBgbGlnaHRibHVlYCB3YXMgYWxzbyBtaXNsYWJlbGVkOiBpdCBwb2ludGVkIGF0IGdvbGQKLy8gKDIyMCksIG5vdCBhIGJsdWUgYXQgYWxsLiBFdmVyeSB2YWx1ZSBiZWxvdyByZWFkcyBjbGVhcmx5IG9uIGJvdGggbGlnaHQKLy8gYW5kIGRhcmsgYmFja2dyb3VuZHMuCmV4cG9ydCBjb25zdCBjb2xvcnMgPSB7CiAgcmVzZXQ6ICJceDFiWzBtIiwKICByZWQ6ICJceDFiWzM4OzU7MTYwbSIsCiAgb3JhbmdlOiAiXHgxYlszODs1OzEzMG0iLAogIHllbGxvdzogIlx4MWJbMzg7NTs1OG0iLAogIGdyZWVuOiAiXHgxYlszODs1OzIybSIsCiAgYmx1ZTogIlx4MWJbMzg7NTsyNW0iLAogIGN5YW46ICJceDFiWzM4OzU7MjNtIiwKICBwdXJwbGU6ICJceDFiWzM4OzU7OTFtIiwKICBtYWdlbnRhOiAiXHgxYlszODs1OzEyNW0iLAogIGdyYXk6ICJceDFiWzM4OzU7MjM4bSIsCiAgbGlnaHRibHVlOiAiXHgxYlszODs1OzI0bSIsCn07CgovLyBCYWNrZ3JvdW5kIHZhcmlhbnRzLCBrZXllZCB0aGUgc2FtZSBhcyBgY29sb3JzYCwgdXNlZCB3aGVuCi8vIGBkaXNwbGF5LnNob3dfYmFja2dyb3VuZHNgIGlzIGVuYWJsZWQuIEVhY2ggZW50cnkgc2V0cyBpdHMgb3duIGJhY2tncm91bmQKLy8gYmxvY2sgcGx1cyBhIGZvcmVncm91bmQgdGV4dCBjb2xvciBjaG9zZW4gZm9yIGNvbnRyYXN0IGFnYWluc3QgaXQsIHNvCi8vIGV2ZXJ5IGl0ZW0gaXMgbGVnaWJsZSBvbiBpdHMgb3duIHJlZ2FyZGxlc3Mgb2Ygd2hhdCB0aGUgdGVybWluYWwncwovLyBiYWNrZ3JvdW5kIGFjdHVhbGx5IGlzLgpleHBvcnQgY29uc3QgYmFja2dyb3VuZHMgPSB7CiAgcmVkOiAiXHgxYls0ODs1Ozg4bVx4MWJbMzg7NTsyNTVtIiwKICBvcmFuZ2U6ICJceDFiWzQ4OzU7MTY2bVx4MWJbMzg7NTsyMzJtIiwKICB5ZWxsb3c6ICJceDFiWzQ4OzU7MTc4bVx4MWJbMzg7NTsyMzJtIiwKICBncmVlbjogIlx4MWJbNDg7NTsyMm1ceDFiWzM4OzU7MjU1bSIsCiAgYmx1ZTogIlx4MWJbNDg7NTsxOG1ceDFiWzM4OzU7MjU1bSIsCiAgY3lhbjogIlx4MWJbNDg7NTsyM21ceDFiWzM4OzU7MjU1bSIsCiAgcHVycGxlOiAiXHgxYls0ODs1OzU0bVx4MWJbMzg7NTsyNTVtIiwKICBtYWdlbnRhOiAiXHgxYls0ODs1OzUzbVx4MWJbMzg7NTsyNTVtIiwKICBncmF5OiAiXHgxYls0ODs1OzIzNm1ceDFiWzM4OzU7MjU1bSIsCiAgbGlnaHRibHVlOiAiXHgxYls0ODs1OzI2bVx4MWJbMzg7NTsyNTVtIiwKfTsKCi8vIERlZmF1bHQgc2V0dGluZ3MKZXhwb3J0IGNvbnN0IERFRkFVTFRfU0VUVElOR1MgPSB7CiAgZGlzcGxheV9vcmRlcjogWwogICAgWwogICAgICAidXNlciIsCiAgICAgICJob3N0bmFtZSIsCiAgICAgICJvcyIsCiAgICAgICJkZXZpY2UiLAogICAgICAia2VybmVsIiwKICAgICAgImNwdSIsCiAgICAgICJiZW5jaCIsCiAgICAgICJncHUiLAogICAgICAiZ3B1X2JlbmNoIiwKICAgIF0sCiAgICBbCiAgICAgICJkaXNrX3VzZWQiLAogICAgICAiZGlza19zaXplIiwKICAgICAgInJhbV91c2VkIiwKICAgICAgInRvcF9wcm9jZXNzIiwKICAgICAgInVwdGltZSIsCiAgICAgICJ0ZW1wZXJhdHVyZSIsCiAgICAgICJiYXR0ZXJ5IiwKICAgICAgImxvYWRfYXZlcmFnZSIsCiAgICBdLAogICAgWyJpcCIsICJpcGxvY2FsIiwgImNpdHkiXSwKICAgIFsic2hlbGwiLCAic2VydmljZXNfcnVubmluZyIsICJwYWNtYW4iLCAiY29udGFpbmVycyJdLAogIF0sCiAgY29sb3JzOiB7CiAgICB1c2VyOiAicmVkIiwKICAgIGhvc3RuYW1lOiAib3JhbmdlIiwKICAgIGRpc2tfdXNlZDogInB1cnBsZSIsCiAgICBkaXNrX3NpemU6ICJwdXJwbGUiLAogICAgcmFtX3VzZWQ6ICJ5ZWxsb3ciLAogICAgdG9wX3Byb2Nlc3M6ICJtYWdlbnRhIiwKICAgIHVwdGltZTogImN5YW4iLAogICAgaXA6ICJncmVlbiIsCiAgICBpcGxvY2FsOiAieWVsbG93IiwKICAgIGNpdHk6ICJncmVlbiIsCiAgICBkb21haW46ICJncmF5IiwKICAgIGlzcDogImxpZ2h0Ymx1ZSIsCiAgICBvczogImdyYXkiLAogICAgY3B1OiAib3JhbmdlIiwKICAgIGdwdTogInllbGxvdyIsCiAgICBiZW5jaDogInJlZCIsCiAgICBncHVfYmVuY2g6ICJyZWQiLAogICAgZGV2aWNlOiAieWVsbG93IiwKICAgIGtlcm5lbDogImdyZWVuIiwKICAgIHNoZWxsOiAib3JhbmdlIiwKICAgIHBhY21hbjogIm11bHRpY29sb3IiLAogICAgcG9ydHM6ICJtdWx0aWNvbG9yIiwKICAgIGNvbnRhaW5lcnM6ICJncmVlbiIsCiAgICBtZW1vcnlfYXZhaWxhYmxlOiAiYmx1ZSIsCiAgICBzd2FwX3VzZWQ6ICJwdXJwbGUiLAogICAgbG9hZF9hdmVyYWdlOiAicmVkIiwKICAgIHVzZXJzX2xvZ2dlZF9pbjogImN5YW4iLAogICAgbmV0d29ya19pbnRlcmZhY2VzOiAieWVsbG93IiwKICAgIG1vdW50X3BvaW50czogImdyYXkiLAogICAgc2VydmljZXNfcnVubmluZzogImdyZWVuIiwKICAgIHRlbXBlcmF0dXJlOiAicmVkIiwKICAgIGJhdHRlcnk6ICJncmVlbiIsCiAgICBzY3JlZW5fcmVzb2x1dGlvbjogImJsdWUiLAogIH0sCiAgZW1vamlzOiB7CiAgICB1c2VyOiAi8J+RpCAiLAogICAgaG9zdG5hbWU6ICLwn4+gICIsCiAgICBpcDogIvCfjI4gIiwKICAgIGlwbG9jYWw6ICLwn4yQICIsCiAgICBjaXR5OiAi8J+TjSAiLAogICAgZG9tYWluOiAi8J+UlyAiLAogICAgaXNwOiAi8J+RriAiLAogICAgb3M6ICLimqEgIiwKICAgIGNwdTogIvCfk4ggIiwKICAgIGdwdTogIvCfjq4gIiwKICAgIGJlbmNoOiAi8J+SqiAiLAogICAgZ3B1X2JlbmNoOiAi8J+Pju+4jyAiLAogICAgZGV2aWNlOiAi8J+SuyAiLAogICAga2VybmVsOiAi8J+UpyAiLAogICAgc2hlbGw6ICLwn5CaICIsCiAgICBwYWNtYW46ICLwn5qAICIsCiAgICBkaXNrX3VzZWQ6ICLwn5OBICIsCiAgICBkaXNrX3NpemU6ICLwn5K9ICIsCiAgICByYW1fdXNlZDogIvCfkr4gIiwKICAgIHRvcF9wcm9jZXNzOiAi8J+UnSAiLAogICAgdXB0aW1lOiAi4o+x77iPICIsCiAgICBwb3J0czogIvCflIwgIiwKICAgIGNvbnRhaW5lcnM6ICLwn5OmICIsCiAgICBtZW1vcnlfYXZhaWxhYmxlOiAi8J+noCAiLAogICAgc3dhcF91c2VkOiAi8J+UhCAiLAogICAgbG9hZF9hdmVyYWdlOiAi4pqW77iPICIsCiAgICB1c2Vyc19sb2dnZWRfaW46ICLwn5GlICIsCiAgICBuZXR3b3JrX2ludGVyZmFjZXM6ICLwn4yQICIsCiAgICBtb3VudF9wb2ludHM6ICLwn5OCICIsCiAgICBzZXJ2aWNlc19ydW5uaW5nOiAi4pqZ77iPICIsCiAgICB0ZW1wZXJhdHVyZTogIvCfjKHvuI8gIiwKICAgIGJhdHRlcnlfY2hhcmdpbmc6ICLwn5SMICIsCiAgICBiYXR0ZXJ5OiAi8J+UiyAiLAogICAgc2NyZWVuX3Jlc29sdXRpb246ICLwn5al77iPICIsCiAgfSwKICBsYWJlbHM6IHsKICAgIHVzZXI6ICJVc2VyIiwKICAgIGhvc3RuYW1lOiAiSG9zdCIsCiAgICBpcDogIklQIiwKICAgIGlwbG9jYWw6ICJMb2NhbCBJUCIsCiAgICBjaXR5OiAiQ2l0eSIsCiAgICBkb21haW46ICJEb21haW4iLAogICAgaXNwOiAiSVNQIiwKICAgIG9zOiAiT1MiLAogICAgY3B1OiAiQ1BVIiwKICAgIGdwdTogIkdQVSIsCiAgICBiZW5jaDogIkJlbmNoIiwKICAgIGdwdV9iZW5jaDogIkdQVSBCZW5jaCIsCiAgICBkZXZpY2U6ICJEZXZpY2UiLAogICAga2VybmVsOiAiS2VybmVsIiwKICAgIHNoZWxsOiAiU2hlbGwiLAogICAgcGFjbWFuOiAiUGFja2FnZXMiLAogICAgZGlza191c2VkOiAiRGlzayIsCiAgICBkaXNrX3NpemU6ICJEaXNrIFNpemUiLAogICAgcmFtX3VzZWQ6ICJSQU0iLAogICAgdG9wX3Byb2Nlc3M6ICJUb3AiLAogICAgdXB0aW1lOiAiVXB0aW1lIiwKICAgIHBvcnRzOiAiUG9ydHMiLAogICAgY29udGFpbmVyczogIkNvbnRhaW5lcnMiLAogICAgbWVtb3J5X2F2YWlsYWJsZTogIk1lbW9yeSIsCiAgICBzd2FwX3VzZWQ6ICJTd2FwIiwKICAgIGxvYWRfYXZlcmFnZTogIkxvYWQiLAogICAgdXNlcnNfbG9nZ2VkX2luOiAiVXNlcnMiLAogICAgbmV0d29ya19pbnRlcmZhY2VzOiAiTmV0d29yayIsCiAgICBtb3VudF9wb2ludHM6ICJNb3VudHMiLAogICAgc2VydmljZXNfcnVubmluZzogIlNlcnZpY2VzIiwKICAgIHRlbXBlcmF0dXJlOiAiVGVtcCIsCiAgICBiYXR0ZXJ5X2NoYXJnaW5nOiAiQmF0dGVyeSIsCiAgICBiYXR0ZXJ5OiAiQmF0dGVyeSIsCiAgICBzY3JlZW5fcmVzb2x1dGlvbjogIlJlc29sdXRpb24iLAogIH0sCiAgZGlzcGxheTogewogICAgc2hvd19lbW9qaXM6IHRydWUsCiAgICBzaG93X2JhY2tncm91bmRzOiB0cnVlLAogICAgc2luZ2xlX2xpbmU6IHRydWUsCiAgICBsaW5lX3dyYXBfbGVuZ3RoOiBwcm9jZXNzPy5zdGRvdXQ/LmNvbHVtbnMgfHwgMTAwLAogIH0sCiAgbmV0d29yazogewogICAgc2hvd19vZmZsaW5lX21lc3NhZ2U6IHRydWUsCiAgfSwKICBhZHZhbmNlZDogewogICAgZGVidWc6IGZhbHNlLAogIH0sCn07CgpleHBvcnQgaW50ZXJmYWNlIFNldHRpbmdzIHsKICBkaXNwbGF5X29yZGVyOiBzdHJpbmdbXVtdOwogIGNvbG9yczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjsKICBlbW9qaXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47CiAgbGFiZWxzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+OwogIGRpc3BsYXk6IHsKICAgIHNob3dfZW1vamlzOiBib29sZWFuOwogICAgLyoqIHRydWUgKGRlZmF1bHQpOiBnaXZlIGV2ZXJ5IGl0ZW0gaXRzIG93biBiYWNrZ3JvdW5kIGNvbG9yIGJsb2NrLCBzbyBpdCBzdGF5cyBsZWdpYmxlIHJlZ2FyZGxlc3Mgb2YgdGhlIHRlcm1pbmFsJ3MgYmFja2dyb3VuZCAqLwogICAgc2hvd19iYWNrZ3JvdW5kczogYm9vbGVhbjsKICAgIC8qKiB0cnVlOiBwcmludCBvbmUgY29udGludW91cyBsaW5lIGFuZCBsZXQgdGhlIHRlcm1pbmFsIHNvZnQtd3JhcCBpdDsgZmFsc2U6IGhhcmQtd3JhcCBhdCBsaW5lX3dyYXBfbGVuZ3RoICovCiAgICBzaW5nbGVfbGluZTogYm9vbGVhbjsKICAgIGxpbmVfd3JhcF9sZW5ndGg6IG51bWJlcjsKICB9OwogIG5ldHdvcms6IHsKICAgIHNob3dfb2ZmbGluZV9tZXNzYWdlOiBib29sZWFuOwogIH07CiAgYWR2YW5jZWQ6IHsKICAgIGRlYnVnOiBib29sZWFuOwogIH07Cn0KCi8qKgogKiBMb2FkcyBzZXR0aW5ncyBmcm9tIHRoZSBjb25maWd1cmF0aW9uIGZpbGUKICogQHJldHVybnMgU2V0dGluZ3Mgb2JqZWN0IChkZWZhdWx0cyBtZXJnZWQgd2l0aCB1c2VyIHNldHRpbmdzKQogKi8KZXhwb3J0IGZ1bmN0aW9uIGxvYWRTZXR0aW5ncygpOiBTZXR0aW5ncyB7CiAgdHJ5IHsKICAgIGlmIChmcy5leGlzdHNTeW5jKFNFVFRJTkdTX0ZJTEUpKSB7CiAgICAgIGNvbnN0IHNldHRpbmdzID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoU0VUVElOR1NfRklMRSwgInV0ZjgiKSk7CiAgICAgIHJldHVybiB7IC4uLkRFRkFVTFRfU0VUVElOR1MsIC4uLnNldHRpbmdzIH07CiAgICB9CiAgfSBjYXRjaCB7fQogIHJldHVybiBERUZBVUxUX1NFVFRJTkdTOwp9CgovKioKICogU2F2ZXMgc2V0dGluZ3MgdG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZQogKiBAcGFyYW0gc2V0dGluZ3MgLSBUaGUgc2V0dGluZ3Mgb2JqZWN0IHRvIHNhdmUKICogQHJldHVybnMgVHJ1ZSBpZiBzdWNjZXNzZnVsLCBmYWxzZSBvdGhlcndpc2UKICovCmV4cG9ydCBmdW5jdGlvbiBzYXZlU2V0dGluZ3Moc2V0dGluZ3M6IFNldHRpbmdzKTogYm9vbGVhbiB7CiAgdHJ5IHsKICAgIGNvbnN0IGNvbmZpZ0RpciA9IHBhdGguZGlybmFtZShTRVRUSU5HU19GSUxFKTsKICAgIGlmICghZnMuZXhpc3RzU3luYyhjb25maWdEaXIpKSB7CiAgICAgIGZzLm1rZGlyU3luYyhjb25maWdEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pOwogICAgfQogICAgZnMud3JpdGVGaWxlU3luYyhTRVRUSU5HU19GSUxFLCBKU09OLnN0cmluZ2lmeShzZXR0aW5ncywgbnVsbCwgMikpOwogICAgcmV0dXJuIHRydWU7CiAgfSBjYXRjaCB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9Cg==", eI = "data:video/mp2t;base64,LyoqCiAqIFNvZnR3YXJlIGFuZCBwYWNrYWdlLXJlbGF0ZWQgc3lzdGVtIGluZm9ybWF0aW9uIGZ1bmN0aW9ucwogKiBAbW9kdWxlIGluZm8vc29mdHdhcmUKICovCgppbXBvcnQgb3MgZnJvbSAib3MiOwppbXBvcnQgcHJvY2VzcyBmcm9tICJwcm9jZXNzIjsKaW1wb3J0IHR5cGUgeyBJbmZvQ29udGV4dCB9IGZyb20gIi4uL3R5cGVzL2ludGVybmFsLXR5cGVzIjsKaW1wb3J0IHsgSVNfV0lORE9XUyB9IGZyb20gIi4uL3V0aWxzL3BsYXRmb3JtIjsKaW1wb3J0IHsgZXhlY0NvbW1hbmQsIGNvbW1hbmRFeGlzdHMgfSBmcm9tICIuLi91dGlscy9jb21tYW5kIjsKaW1wb3J0IHsgZ2V0Q2FjaGVkVmFsdWUsIHNldENhY2hlZFZhbHVlIH0gZnJvbSAiLi4vY2FjaGUvY2FjaGUiOwoKLyoqCiAqIEdldHMgdGhlIGN1cnJlbnQgc2hlbGwgbmFtZQogKiBVc2VzIHRoZSB1c2VyJ3MgbG9naW4gc2hlbGwgKG1hY09TL0xpbnV4KSwgZmFsbHMgYmFjayB0byBwcyBmb3IgdGhlCiAqIHBhcmVudCBwcm9jZXNzIHNoZWxsCiAqIEByZXR1cm5zIFNoZWxsIG5hbWUgb3IgZW1wdHkgc3RyaW5nIG9uIFdpbmRvd3MKICogQGV4YW1wbGUgImJhc2giLCAienNoIiwgImZpc2giLCAibnUiCiAqLwpleHBvcnQgZnVuY3Rpb24gc2hlbGwoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJzaGVsbCIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmICghSVNfV0lORE9XUykgewogICAgdHJ5IHsKICAgICAgY29uc3QgbG9naW5TaGVsbCA9IG9zLnVzZXJJbmZvKCkuc2hlbGw7CiAgICAgIGlmIChsb2dpblNoZWxsKSB7CiAgICAgICAgY29uc3Qgc2hlbGxOYW1lID0gbG9naW5TaGVsbC5zcGxpdCgiLyIpLnBvcCgpIGFzIHN0cmluZzsKICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAic2hlbGwiLCBzaGVsbE5hbWUpOwogICAgICAgIHJldHVybiBzaGVsbE5hbWU7CiAgICAgIH0KICAgIH0gY2F0Y2gge30KCiAgICB0cnkgewogICAgICBjb25zdCBwcGlkID0gcHJvY2Vzcy5wcGlkOwogICAgICBjb25zdCBzaGVsbE5hbWUgPSBleGVjQ29tbWFuZChgcHMgLXAgJHtwcGlkfSAtbyBjb21tPWApLnNwbGl0KCIvIikucG9wKCk7CiAgICAgIGlmIChzaGVsbE5hbWUpIHsKICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAic2hlbGwiLCBzaGVsbE5hbWUpOwogICAgICAgIHJldHVybiBzaGVsbE5hbWU7CiAgICAgIH0KICAgIH0gY2F0Y2gge30KICB9CgogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJzaGVsbCIsICIiKTsKICByZXR1cm4gIiI7Cn0KCi8qKgogKiBHZXRzIGF2YWlsYWJsZSBwYWNrYWdlIG1hbmFnZXJzIGFuZCBkZXZlbG9wbWVudCB0b29scwogKiBDaGVja3MgZm9yIHBhY2thZ2UgbWFuYWdlcnMgKGFwdCwgeXVtLCBucG0sIGV0Yy4pIGFuZCBlZGl0b3JzIChudmltLCBoeCkKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBTcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBhdmFpbGFibGUgY29tbWFuZHMKICogQGV4YW1wbGUgImFwdCBucG0gZG9ja2VyIG52aW0iLCAieWF5IHBhY21hbiBidW4gaHgiCiAqLwpleHBvcnQgZnVuY3Rpb24gcGFja2FnZXMoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJwYWNrYWdlcyIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGNvbnN0IGNvbW1hbmRzID0gWwogICAgImFwdCIsCiAgICAiYnJldyIsCiAgICAibnBtIiwKICAgICJ1diIsCiAgICAiZG9ja2VyIiwKICAgICJoeCIsCiAgICAibnZpbSIsCiAgICAiYnVuIiwKICAgICJ5YXkiLAogICAgInBhY21hbiIsCiAgICAieXVtIiwKICAgICJkbmYiLAogICAgInp5cHBlciIsCiAgICAiZW1lcmdlIiwKICAgICJhcGsiLAogICAgInNuYXAiLAogICAgImZsYXRwYWsiLAogIF07CiAgY29uc3QgYXZhaWxhYmxlID0gY29tbWFuZHMuZmlsdGVyKChjbWQpID0+IGNvbW1hbmRFeGlzdHMoY21kKSk7CgogIGNvbnN0IHJlc3VsdCA9IGF2YWlsYWJsZS5qb2luKCIgIik7CiAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInBhY2thZ2VzIiwgcmVzdWx0KTsKICByZXR1cm4gcmVzdWx0Owp9CgovKioKICogR2V0cyB2ZXJzaW9ucyBvZiBjb21tb24gc29mdHdhcmUgdG9vbHMKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBGb3JtYXR0ZWQgc3RyaW5nIG9mIHRvb2wgdmVyc2lvbnMKICogQGV4YW1wbGUgIm5vZGU6MjAuMS4wIGdpdDoyLjM0LjEiCiAqLwpleHBvcnQgZnVuY3Rpb24gY29tbW9uX3ZlcnNpb25zKGNvbnRleHQ6IEluZm9Db250ZXh0KTogc3RyaW5nIHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiY29tbW9uX3ZlcnNpb25zIik7CiAgaWYgKGNhY2hlZCAhPT0gbnVsbCkgcmV0dXJuIGNhY2hlZDsKCiAgY29uc3QgdG9vbHMgPSBbCiAgICB7CiAgICAgIGNtZDogIm5vZGUiLAogICAgICBhcmdzOiAiLS12ZXJzaW9uIiwKICAgICAgY2xlYW46ICh2OiBzdHJpbmcpID0+IHYucmVwbGFjZSgvXnYvLCAiIiksCiAgICB9LAogICAgewogICAgICBjbWQ6ICJnaXQiLAogICAgICBhcmdzOiAiLS12ZXJzaW9uIiwKICAgICAgY2xlYW46ICh2OiBzdHJpbmcpID0+IHYucmVwbGFjZSgiZ2l0IHZlcnNpb24gIiwgIiIpLAogICAgfSwKICAgIHsKICAgICAgY21kOiAiZG9ja2VyIiwKICAgICAgYXJnczogIi0tdmVyc2lvbiIsCiAgICAgIGNsZWFuOiAodjogc3RyaW5nKSA9PiB2LnJlcGxhY2UoL0RvY2tlciB2ZXJzaW9uIChbXixdKyksLiovLCAiJDEiKSwKICAgIH0sCiAgICB7CiAgICAgIGNtZDogInB5dGhvbjMiLAogICAgICBhcmdzOiAiLS12ZXJzaW9uIiwKICAgICAgY2xlYW46ICh2OiBzdHJpbmcpID0+IHYucmVwbGFjZSgiUHl0aG9uICIsICIiKSwKICAgIH0sCiAgICB7CiAgICAgIGNtZDogImdvIiwKICAgICAgYXJnczogInZlcnNpb24iLAogICAgICBjbGVhbjogKHY6IHN0cmluZykgPT4gdi5yZXBsYWNlKCJnbyB2ZXJzaW9uIGdvIiwgIiIpLnNwbGl0KCIgIilbMF0sCiAgICB9LAogICAgewogICAgICBjbWQ6ICJydXN0YyIsCiAgICAgIGFyZ3M6ICItLXZlcnNpb24iLAogICAgICBjbGVhbjogKHY6IHN0cmluZykgPT4gdi5yZXBsYWNlKCJydXN0YyAiLCAiIikuc3BsaXQoIiAiKVswXSwKICAgIH0sCiAgXTsKCiAgY29uc3QgdmVyc2lvbnM6IHN0cmluZ1tdID0gW107CgogIGZvciAoY29uc3QgdG9vbCBvZiB0b29scykgewogICAgaWYgKGNvbW1hbmRFeGlzdHModG9vbC5jbWQpKSB7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3Qgb3V0cHV0ID0gZXhlY0NvbW1hbmQoYCR7dG9vbC5jbWR9ICR7dG9vbC5hcmdzfWApOwogICAgICAgIGNvbnN0IHZlcnNpb24gPSB0b29sLmNsZWFuKG91dHB1dCkudHJpbSgpOwogICAgICAgIGlmICh2ZXJzaW9uKSB7CiAgICAgICAgICB2ZXJzaW9ucy5wdXNoKGAke3Rvb2wuY21kfToke3ZlcnNpb259YCk7CiAgICAgICAgfQogICAgICB9IGNhdGNoIHt9CiAgICB9CiAgfQoKICBjb25zdCByZXN1bHQgPSB2ZXJzaW9ucy5qb2luKCIgIik7CiAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImNvbW1vbl92ZXJzaW9ucyIsIHJlc3VsdCk7CiAgcmV0dXJuIHJlc3VsdDsKfQovKioKICogR2V0cyBydW5uaW5nIERvY2tlciBjb250YWluZXIgbmFtZXMKICogTGlzdHMgYWN0aXZlIERvY2tlciBjb250YWluZXJzIHdpdGggdGhlaXIgbmFtZXMKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBTcGFjZS1zZXBhcmF0ZWQgY29udGFpbmVyIG5hbWVzIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAibmdpbnggcmVkaXMgcG9zdGdyZXMiLCAid2ViLWFwcCBkYi1zZXJ2ZXIiCiAqLwpleHBvcnQgZnVuY3Rpb24gY29udGFpbmVycyhjb250ZXh0OiBJbmZvQ29udGV4dCk6IHN0cmluZyB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImNvbnRhaW5lcnMiKTsKICBpZiAoY2FjaGVkICE9PSBudWxsKSByZXR1cm4gY2FjaGVkOwoKICBpZiAoIWNvbW1hbmRFeGlzdHMoImRvY2tlciIpKSB7CiAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiY29udGFpbmVycyIsICIiKTsKICAgIHJldHVybiAiIjsKICB9CgogIHRyeSB7CiAgICBjb25zdCBjb250YWluZXJDb3VudCA9IGV4ZWNDb21tYW5kKCJkb2NrZXIgcHMgLXEiKQogICAgICAuc3BsaXQoIlxuIikKICAgICAgLmZpbHRlcigobGluZSkgPT4gbGluZS50cmltKCkpLmxlbmd0aDsKICAgIGlmIChjb250YWluZXJDb3VudCA9PT0gMCkgewogICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiY29udGFpbmVycyIsICIiKTsKICAgICAgcmV0dXJuICIiOwogICAgfQoKICAgIGNvbnN0IGNvbnRhaW5lcnMgPSBleGVjQ29tbWFuZCgKICAgICAgJ2RvY2tlciBwcyAtLWZvcm1hdCAie3suTmFtZXN9fVx0e3suUG9ydHN9fSInCiAgICApOwogICAgY29uc3QgbGluZXMgPSBjb250YWluZXJzLnNwbGl0KCJcbiIpLmZpbHRlcigobGluZSkgPT4gbGluZS50cmltKCkpOwoKICAgIGNvbnN0IGNvbnRhaW5lckluZm86IHN0cmluZ1tdID0gW107CgogICAgbGluZXMuZm9yRWFjaCgobGluZSkgPT4gewogICAgICBjb25zdCBbbmFtZSwgcG9ydHNdID0gbGluZS5zcGxpdCgiXHQiKTsKICAgICAgaWYgKG5hbWUpIHsKICAgICAgICBjb250YWluZXJJbmZvLnB1c2gobmFtZSk7CgogICAgICAgIGlmIChwb3J0cykgewogICAgICAgICAgY29uc3QgcG9ydE1hdGNoZXMgPSBwb3J0cy5tYXRjaCgvLT4oXGQrKC1cZCspPylcLy9nKTsKICAgICAgICAgIGlmIChwb3J0TWF0Y2hlcykgewogICAgICAgICAgICBjb25zdCB1bmlxdWVQb3J0cyA9IFsKICAgICAgICAgICAgICAuLi5uZXcgU2V0KAogICAgICAgICAgICAgICAgcG9ydE1hdGNoZXMubWFwKChwKSA9PiBwLnJlcGxhY2UoLy0+XGQrKC1cZCspP1wvLywgIiIpKQogICAgICAgICAgICAgICksCiAgICAgICAgICAgIF07CiAgICAgICAgICAgIGNvbnRhaW5lckluZm8ucHVzaCguLi51bmlxdWVQb3J0cyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKCiAgICBjb25zdCByZXN1bHQgPSBjb250YWluZXJJbmZvLmpvaW4oIiAiKTsKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJjb250YWluZXJzIiwgcmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfSBjYXRjaCB7fQoKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiY29udGFpbmVycyIsICIiKTsKICByZXR1cm4gIiI7Cn0K", sI = "data:video/mp2t;base64,LyoqCiAqIFN5c3RlbSBzdGF0dXMgYW5kIGhlYWx0aCBpbmZvcm1hdGlvbiBmdW5jdGlvbnMKICogQG1vZHVsZSBpbmZvL3N5c3RlbS1zdGF0dXMKICovCgppbXBvcnQgZnMgZnJvbSAiZnMiOwppbXBvcnQgb3MgZnJvbSAib3MiOwppbXBvcnQgdHlwZSB7IEluZm9Db250ZXh0IH0gZnJvbSAiLi4vdHlwZXMvaW50ZXJuYWwtdHlwZXMiOwppbXBvcnQgeyBJU19MSU5VWCwgSVNfTUFDIH0gZnJvbSAiLi4vdXRpbHMvcGxhdGZvcm0iOwppbXBvcnQgeyBleGVjQ29tbWFuZCwgY29tbWFuZEV4aXN0cyB9IGZyb20gIi4uL3V0aWxzL2NvbW1hbmQiOwppbXBvcnQgeyBnZXRDYWNoZWRWYWx1ZSwgc2V0Q2FjaGVkVmFsdWUgfSBmcm9tICIuLi9jYWNoZS9jYWNoZSI7CgovKioKICogR2V0cyBzeXN0ZW0gbG9hZCBhdmVyYWdlcwogKiBSZWFkcyAxLCA1LCBhbmQgMTUgbWludXRlIGxvYWQgYXZlcmFnZXMgZnJvbSAvcHJvYy9sb2FkYXZnIChMaW51eCkgb3IKICogb3MubG9hZGF2ZygpIChtYWNPUykKICogQHJldHVybnMgU3BhY2Utc2VwYXJhdGVkIGxvYWQgYXZlcmFnZXMgKDFtIDVtIDE1bSkgb3IgZW1wdHkgc3RyaW5nCiAqIEBleGFtcGxlICIwLjUyIDAuNTggMC41OSIsICIyLjEwIDEuOTUgMS44OCIKICovCmV4cG9ydCBmdW5jdGlvbiBsb2FkX2F2ZXJhZ2UoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGlmIChJU19NQUMpIHsKICAgIHJldHVybiBvcwogICAgICAubG9hZGF2ZygpCiAgICAgIC5tYXAoKG4pID0+IG4udG9GaXhlZCgyKSkKICAgICAgLmpvaW4oIiAiKTsKICB9CgogIGlmICghSVNfTElOVVgpIHJldHVybiAiIjsKCiAgdHJ5IHsKICAgIGNvbnN0IGxvYWRhdmcgPSBmcy5yZWFkRmlsZVN5bmMoIi9wcm9jL2xvYWRhdmciLCAidXRmOCIpOwogICAgY29uc3QgbG9hZHMgPSBsb2FkYXZnLnNwbGl0KCIgIikuc2xpY2UoMCwgMyk7CiAgICByZXR1cm4gbG9hZHMuam9pbigiICIpOwogIH0gY2F0Y2gge30KICByZXR1cm4gIiI7Cn0KCi8qKgogKiBHZXRzIGJhdHRlcnkgY2hhcmdlIGxldmVsIGFuZCBjaGFyZ2luZyBzdGF0dXMKICogUmVhZHMgZnJvbSAvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS9CQVQwIChMaW51eCBsYXB0b3BzIG9ubHkpCiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgQmF0dGVyeSBwZXJjZW50YWdlIHdpdGggb3B0aW9uYWwgKyBmb3IgY2hhcmdpbmcsIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiODUlIiwgIjQyJSsiLCAiMTAwJSIKICovCmV4cG9ydCBmdW5jdGlvbiBiYXR0ZXJ5KGNvbnRleHQ6IEluZm9Db250ZXh0KTogc3RyaW5nIHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiYmF0dGVyeSIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmIChJU19NQUMpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IGJhdHQgPSBleGVjQ29tbWFuZCgicG1zZXQgLWcgYmF0dCIpOwogICAgICBjb25zdCBwZXJjZW50TWF0Y2ggPSBiYXR0Lm1hdGNoKC8oXGQrKSUvKTsKICAgICAgaWYgKHBlcmNlbnRNYXRjaCkgewogICAgICAgIGNvbnN0IGlzQ2hhcmdpbmcgPSAvO1xzKihjaGFyZ2luZ3xjaGFyZ2VkKTsvaS50ZXN0KGJhdHQpOwogICAgICAgIGNvbnN0IHJlc3VsdCA9IGAke3BlcmNlbnRNYXRjaFsxXX0lJHtpc0NoYXJnaW5nID8gIisiIDogIiJ9YDsKICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiYmF0dGVyeSIsIHJlc3VsdCk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgfSBjYXRjaCB7fQoKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJiYXR0ZXJ5IiwgIiIpOwogICAgcmV0dXJuICIiOwogIH0KCiAgaWYgKCFJU19MSU5VWCkgewogICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImJhdHRlcnkiLCAiIik7CiAgICByZXR1cm4gIiI7CiAgfQoKICB0cnkgewogICAgY29uc3QgYmF0dGVyeVBhdGggPSAiL3N5cy9jbGFzcy9wb3dlcl9zdXBwbHkvQkFUMCI7CiAgICBjb25zdCBjYXBhY2l0eVBhdGggPSBgJHtiYXR0ZXJ5UGF0aH0vY2FwYWNpdHlgOwogICAgY29uc3Qgc3RhdHVzUGF0aCA9IGAke2JhdHRlcnlQYXRofS9zdGF0dXNgOwoKICAgIGlmIChmcy5leGlzdHNTeW5jKGNhcGFjaXR5UGF0aCkpIHsKICAgICAgY29uc3QgY2FwYWNpdHkgPSBmcy5yZWFkRmlsZVN5bmMoY2FwYWNpdHlQYXRoLCAidXRmOCIpLnRyaW0oKTsKICAgICAgY29uc3Qgc3RhdHVzID0gZnMuZXhpc3RzU3luYyhzdGF0dXNQYXRoKQogICAgICAgID8gZnMucmVhZEZpbGVTeW5jKHN0YXR1c1BhdGgsICJ1dGY4IikudHJpbSgpCiAgICAgICAgOiAiVW5rbm93biI7CgogICAgICBjb25zdCBiYXR0ZXJ5UGVyY2VudCA9IHBhcnNlSW50KGNhcGFjaXR5KTsKICAgICAgY29uc3QgaXNDaGFyZ2luZyA9IHN0YXR1cyA9PT0gIkNoYXJnaW5nIjsKICAgICAgY29uc3QgcmVzdWx0ID0gYCR7YmF0dGVyeVBlcmNlbnR9JSR7aXNDaGFyZ2luZyA/ICIrIiA6ICIifWA7CiAgICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJiYXR0ZXJ5IiwgcmVzdWx0KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICB9IGNhdGNoIHt9CgogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJiYXR0ZXJ5IiwgIiIpOwogIHJldHVybiAiIjsKfQoKLyoqCiAqIEdldHMgc3lzdGVtIHRlbXBlcmF0dXJlIGluIENlbHNpdXMKICogUmVhZHMgZnJvbSB0aGVybWFsIHpvbmUgb3IgaHdtb24gc2Vuc29ycyAoTGludXgpLCBvciBmcm9tIHRoZQogKiBgb3N4LWNwdS10ZW1wYCBDTEkgKG1hY09TLCBpZiBpbnN0YWxsZWQgdmlhIGBicmV3IGluc3RhbGwgb3N4LWNwdS10ZW1wYCkgLQogKiBtYWNPUyBoYXMgbm8gdW5wcml2aWxlZ2VkIEFQSSBmb3IgdGhpcywgc28gbm90aGluZyBpcyByZXBvcnRlZCB3aXRob3V0IGl0CiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgVGVtcGVyYXR1cmUgd2l0aCDCsEMgc3VmZml4IG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiNDXCsEMiLCAiNjLCsEMiCiAqLwpleHBvcnQgZnVuY3Rpb24gdGVtcGVyYXR1cmUoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJ0ZW1wZXJhdHVyZSIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmIChJU19NQUMpIHsKICAgIGlmIChjb21tYW5kRXhpc3RzKCJvc3gtY3B1LXRlbXAiKSkgewogICAgICB0cnkgewogICAgICAgIGNvbnN0IG91dHB1dCA9IGV4ZWNDb21tYW5kKCJvc3gtY3B1LXRlbXAiKTsKICAgICAgICBjb25zdCBtYXRjaCA9IG91dHB1dC5tYXRjaCgvKFtcZC5dKylccyrCsD9DLyk7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICBjb25zdCB0ZW1wQyA9IE1hdGgucm91bmQocGFyc2VGbG9hdChtYXRjaFsxXSkpOwogICAgICAgICAgaWYgKHRlbXBDID4gMCAmJiB0ZW1wQyA8IDE1MCkgewogICAgICAgICAgICBjb25zdCByZXN1bHQgPSBgJHt0ZW1wQ33CsENgOwogICAgICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAidGVtcGVyYXR1cmUiLCByZXN1bHQpOwogICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBjYXRjaCB7fQogICAgfQoKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJ0ZW1wZXJhdHVyZSIsICIiKTsKICAgIHJldHVybiAiIjsKICB9CgogIGlmICghSVNfTElOVVgpIHsKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJ0ZW1wZXJhdHVyZSIsICIiKTsKICAgIHJldHVybiAiIjsKICB9CgogIHRyeSB7CiAgICBjb25zdCB0ZW1wU291cmNlcyA9IFsKICAgICAgIi9zeXMvY2xhc3MvdGhlcm1hbC90aGVybWFsX3pvbmUwL3RlbXAiLAogICAgICAiL3N5cy9jbGFzcy9od21vbi9od21vbjAvdGVtcDFfaW5wdXQiLAogICAgICAiL3N5cy9jbGFzcy9od21vbi9od21vbjEvdGVtcDFfaW5wdXQiLAogICAgXTsKCiAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiB0ZW1wU291cmNlcykgewogICAgICBpZiAoZnMuZXhpc3RzU3luYyhzb3VyY2UpKSB7CiAgICAgICAgY29uc3QgdGVtcCA9IGZzLnJlYWRGaWxlU3luYyhzb3VyY2UsICJ1dGY4IikudHJpbSgpOwogICAgICAgIGNvbnN0IHRlbXBDID0gTWF0aC5yb3VuZChwYXJzZUludCh0ZW1wKSAvIDEwMDApOwoKICAgICAgICBpZiAodGVtcEMgPiAwICYmIHRlbXBDIDwgMTUwKSB7CiAgICAgICAgICBjb25zdCByZXN1bHQgPSBgJHt0ZW1wQ33CsENgOwogICAgICAgICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInRlbXBlcmF0dXJlIiwgcmVzdWx0KTsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfSBjYXRjaCB7fQoKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAidGVtcGVyYXR1cmUiLCAiIik7CiAgcmV0dXJuICIiOwp9CgovKioKICogR2V0cyBjb3VudCBvZiBydW5uaW5nIHN5c3RlbSBzZXJ2aWNlcwogKiBVc2VzIHN5c3RlbWN0bCBvciBzZXJ2aWNlIGNvbW1hbmQgKExpbnV4IG9ubHkpCiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgU2VydmljZSBjb3VudCB3aXRoICJzZXJ2aWNlcyIgc3VmZml4IG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiMTI1IHNlcnZpY2VzIiwgIjg5IHNlcnZpY2VzIgogKi8KZXhwb3J0IGZ1bmN0aW9uIHNlcnZpY2VzX3J1bm5pbmcoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJzZXJ2aWNlc19ydW5uaW5nIik7CiAgaWYgKGNhY2hlZCAhPT0gbnVsbCkgcmV0dXJuIGNhY2hlZDsKCiAgaWYgKElTX01BQykgewogICAgdHJ5IHsKICAgICAgY29uc3Qgc2VydmljZXMgPSBleGVjQ29tbWFuZCgibGF1bmNoY3RsIGxpc3QiKTsKICAgICAgY29uc3Qgc2VydmljZUNvdW50ID0gc2VydmljZXMKICAgICAgICAuc3BsaXQoIlxuIikKICAgICAgICAuZmlsdGVyKChsaW5lKSA9PiBsaW5lLnRyaW0oKSAmJiAhbGluZS5zdGFydHNXaXRoKCJQSUQiKSkubGVuZ3RoOwoKICAgICAgaWYgKHNlcnZpY2VDb3VudCA+IDApIHsKICAgICAgICBjb25zdCByZXN1bHQgPSBgJHtzZXJ2aWNlQ291bnR9IHNlcnZpY2VzYDsKICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAic2VydmljZXNfcnVubmluZyIsIHJlc3VsdCk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgfSBjYXRjaCB7fQoKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJzZXJ2aWNlc19ydW5uaW5nIiwgIiIpOwogICAgcmV0dXJuICIiOwogIH0KCiAgaWYgKCFJU19MSU5VWCkgewogICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInNlcnZpY2VzX3J1bm5pbmciLCAiIik7CiAgICByZXR1cm4gIiI7CiAgfQoKICB0cnkgewogICAgbGV0IHNlcnZpY2VDb3VudCA9IDA7CgogICAgaWYgKGNvbW1hbmRFeGlzdHMoInN5c3RlbWN0bCIpKSB7CiAgICAgIGNvbnN0IHNlcnZpY2VzID0gZXhlY0NvbW1hbmQoCiAgICAgICAgInN5c3RlbWN0bCBsaXN0LXVuaXRzIC0tdHlwZT1zZXJ2aWNlIC0tc3RhdGU9cnVubmluZyAtLW5vLXBhZ2VyIgogICAgICApOwogICAgICBzZXJ2aWNlQ291bnQgPSBzZXJ2aWNlcwogICAgICAgIC5zcGxpdCgiXG4iKQogICAgICAgIC5maWx0ZXIoKGxpbmUpID0+IGxpbmUuaW5jbHVkZXMoIi5zZXJ2aWNlIikpLmxlbmd0aDsKICAgIH0gZWxzZSBpZiAoY29tbWFuZEV4aXN0cygic2VydmljZSIpKSB7CiAgICAgIGNvbnN0IHNlcnZpY2VzID0gZXhlY0NvbW1hbmQoInNlcnZpY2UgLS1zdGF0dXMtYWxsIik7CiAgICAgIHNlcnZpY2VDb3VudCA9IHNlcnZpY2VzCiAgICAgICAgLnNwbGl0KCJcbiIpCiAgICAgICAgLmZpbHRlcigobGluZSkgPT4gbGluZS5pbmNsdWRlcygiKyIpKS5sZW5ndGg7CiAgICB9CgogICAgaWYgKHNlcnZpY2VDb3VudCA+IDApIHsKICAgICAgY29uc3QgcmVzdWx0ID0gYCR7c2VydmljZUNvdW50fSBzZXJ2aWNlc2A7CiAgICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJzZXJ2aWNlc19ydW5uaW5nIiwgcmVzdWx0KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICB9IGNhdGNoIHt9CgogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJzZXJ2aWNlc19ydW5uaW5nIiwgIiIpOwogIHJldHVybiAiIjsKfQo=";
|
|
339
392
|
function f(I) {
|
|
340
|
-
return Array.isArray ? Array.isArray(I) :
|
|
393
|
+
return Array.isArray ? Array.isArray(I) : MI(I) === "[object Array]";
|
|
341
394
|
}
|
|
342
|
-
function
|
|
395
|
+
function tg(I) {
|
|
343
396
|
if (typeof I == "string") return I;
|
|
344
397
|
if (typeof I == "bigint") return I.toString();
|
|
345
398
|
const g = I + "";
|
|
346
399
|
return g == "0" && 1 / I == -1 / 0 ? "-0" : g;
|
|
347
400
|
}
|
|
348
401
|
function dI(I) {
|
|
349
|
-
return I == null ? "" :
|
|
402
|
+
return I == null ? "" : tg(I);
|
|
350
403
|
}
|
|
351
404
|
function N(I) {
|
|
352
405
|
return typeof I == "string";
|
|
@@ -354,14 +407,14 @@ function N(I) {
|
|
|
354
407
|
function T(I) {
|
|
355
408
|
return typeof I == "number";
|
|
356
409
|
}
|
|
357
|
-
function
|
|
358
|
-
return I === !0 || I === !1 ||
|
|
410
|
+
function Cg(I) {
|
|
411
|
+
return I === !0 || I === !1 || ng(I) && MI(I) == "[object Boolean]";
|
|
359
412
|
}
|
|
360
|
-
function
|
|
413
|
+
function jI(I) {
|
|
361
414
|
return typeof I == "object";
|
|
362
415
|
}
|
|
363
|
-
function
|
|
364
|
-
return
|
|
416
|
+
function ng(I) {
|
|
417
|
+
return jI(I) && I !== null;
|
|
365
418
|
}
|
|
366
419
|
function X(I) {
|
|
367
420
|
return I != null;
|
|
@@ -369,16 +422,16 @@ function X(I) {
|
|
|
369
422
|
function U(I) {
|
|
370
423
|
return !I.trim().length;
|
|
371
424
|
}
|
|
372
|
-
function
|
|
425
|
+
function MI(I) {
|
|
373
426
|
return I == null ? I === void 0 ? "[object Undefined]" : "[object Null]" : Object.prototype.toString.call(I);
|
|
374
427
|
}
|
|
375
|
-
const
|
|
376
|
-
var
|
|
428
|
+
const og = "Incorrect 'index' type", AI = "Invalid doc index: must be a non-negative integer within the bounds of the docs array", lg = (I) => `Invalid value for key ${I}`, ag = (I) => `Pattern length exceeds max of ${I}.`, dg = (I) => `Missing ${I} property in key`, Ag = (I) => `Property 'weight' in key '${I}' must be a positive integer`, hg = "Fuse.match does not support useTokenSearch: token search requires corpus-level statistics (df, fieldCount) that a one-off string comparison does not have. Use new Fuse(...).search(...) instead.", HI = Object.prototype.hasOwnProperty;
|
|
429
|
+
var bg = class {
|
|
377
430
|
constructor(I) {
|
|
378
431
|
this._keys = [], this._keyMap = {};
|
|
379
432
|
let g = 0;
|
|
380
433
|
I.forEach((i) => {
|
|
381
|
-
const c =
|
|
434
|
+
const c = LI(i);
|
|
382
435
|
this._keys.push(c), this._keyMap[c.id] = c, g += c.weight;
|
|
383
436
|
}), this._keys.forEach((i) => {
|
|
384
437
|
i.weight /= g;
|
|
@@ -394,16 +447,16 @@ var lg = class {
|
|
|
394
447
|
return JSON.stringify(this._keys);
|
|
395
448
|
}
|
|
396
449
|
};
|
|
397
|
-
function
|
|
450
|
+
function LI(I) {
|
|
398
451
|
let g = null, i = null, c = null, e = 1, s = null;
|
|
399
452
|
if (N(I) || f(I))
|
|
400
|
-
c = I, g =
|
|
453
|
+
c = I, g = wI(I), i = D(I);
|
|
401
454
|
else {
|
|
402
|
-
if (!
|
|
455
|
+
if (!HI.call(I, "name")) throw new Error(dg("name"));
|
|
403
456
|
const t = I.name;
|
|
404
|
-
if (c = t,
|
|
405
|
-
throw new Error(
|
|
406
|
-
g =
|
|
457
|
+
if (c = t, HI.call(I, "weight") && I.weight !== void 0 && (e = I.weight, e <= 0))
|
|
458
|
+
throw new Error(Ag(D(t)));
|
|
459
|
+
g = wI(t), i = D(t), s = I.getFn ?? null;
|
|
407
460
|
}
|
|
408
461
|
return {
|
|
409
462
|
path: g,
|
|
@@ -413,13 +466,13 @@ function zI(I) {
|
|
|
413
466
|
getFn: s
|
|
414
467
|
};
|
|
415
468
|
}
|
|
416
|
-
function
|
|
469
|
+
function wI(I) {
|
|
417
470
|
return f(I) ? I : I.split(".");
|
|
418
471
|
}
|
|
419
472
|
function D(I) {
|
|
420
473
|
return f(I) ? I.join(".") : I;
|
|
421
474
|
}
|
|
422
|
-
function
|
|
475
|
+
function rg(I, g) {
|
|
423
476
|
const i = [];
|
|
424
477
|
let c = !1;
|
|
425
478
|
const e = (s, t, C, n) => {
|
|
@@ -431,7 +484,7 @@ function ag(I, g) {
|
|
|
431
484
|
else {
|
|
432
485
|
const a = s[t[C]];
|
|
433
486
|
if (!X(a)) return;
|
|
434
|
-
if (C === t.length - 1 && (N(a) || T(a) ||
|
|
487
|
+
if (C === t.length - 1 && (N(a) || T(a) || Cg(a) || typeof a == "bigint")) i.push(n !== void 0 ? {
|
|
435
488
|
v: dI(a),
|
|
436
489
|
i: n
|
|
437
490
|
} : dI(a));
|
|
@@ -443,45 +496,45 @@ function ag(I, g) {
|
|
|
443
496
|
};
|
|
444
497
|
return e(I, N(g) ? g.split(".") : g, 0), c ? i : i[0];
|
|
445
498
|
}
|
|
446
|
-
const
|
|
499
|
+
const ug = {
|
|
447
500
|
includeMatches: !1,
|
|
448
501
|
findAllMatches: !1,
|
|
449
502
|
minMatchCharLength: 1
|
|
450
|
-
},
|
|
503
|
+
}, mg = {
|
|
451
504
|
isCaseSensitive: !1,
|
|
452
505
|
ignoreDiacritics: !1,
|
|
453
506
|
includeScore: !1,
|
|
454
507
|
keys: [],
|
|
455
508
|
shouldSort: !0,
|
|
456
509
|
sortFn: (I, g) => I.score === g.score ? I.idx < g.idx ? -1 : 1 : I.score < g.score ? -1 : 1
|
|
457
|
-
},
|
|
510
|
+
}, Zg = {
|
|
458
511
|
location: 0,
|
|
459
512
|
threshold: 0.6,
|
|
460
513
|
distance: 100
|
|
461
|
-
},
|
|
514
|
+
}, Gg = {
|
|
462
515
|
useExtendedSearch: !1,
|
|
463
516
|
useTokenSearch: !1,
|
|
464
517
|
tokenize: void 0,
|
|
465
518
|
tokenMatch: "any",
|
|
466
|
-
getFn:
|
|
519
|
+
getFn: rg,
|
|
467
520
|
ignoreLocation: !1,
|
|
468
521
|
ignoreFieldNorm: !1,
|
|
469
522
|
fieldNormWeight: 1
|
|
470
523
|
}, b = Object.freeze({
|
|
471
|
-
...
|
|
472
|
-
...
|
|
473
|
-
...
|
|
474
|
-
...
|
|
524
|
+
...mg,
|
|
525
|
+
...ug,
|
|
526
|
+
...Zg,
|
|
527
|
+
...Gg
|
|
475
528
|
});
|
|
476
|
-
function
|
|
529
|
+
function Bg(I) {
|
|
477
530
|
return I >= 9 && I <= 13 || I === 32 || I === 160;
|
|
478
531
|
}
|
|
479
|
-
function
|
|
532
|
+
function Wg(I = 1, g = 3) {
|
|
480
533
|
const i = /* @__PURE__ */ new Map(), c = Math.pow(10, g);
|
|
481
534
|
return {
|
|
482
535
|
get(e) {
|
|
483
536
|
let s = 0, t = !1;
|
|
484
|
-
for (let n = 0; n < e.length; n++)
|
|
537
|
+
for (let n = 0; n < e.length; n++) Bg(e.charCodeAt(n)) ? t = !1 : t || (s++, t = !0);
|
|
485
538
|
if (s === 0 && (s = 1), i.has(s)) return i.get(s);
|
|
486
539
|
const C = Math.round(c / Math.pow(s, 0.5 * I)) / c;
|
|
487
540
|
return i.set(s, C), C;
|
|
@@ -491,9 +544,9 @@ function ug(I = 1, g = 3) {
|
|
|
491
544
|
}
|
|
492
545
|
};
|
|
493
546
|
}
|
|
494
|
-
var
|
|
547
|
+
var BI = class {
|
|
495
548
|
constructor({ getFn: I = b.getFn, fieldNormWeight: g = b.fieldNormWeight } = {}) {
|
|
496
|
-
this.norm =
|
|
549
|
+
this.norm = Wg(g, 3), this.getFn = I, this.isCreated = !1, this.docs = [], this.keys = [], this._keysMap = {}, this.setIndexRecords();
|
|
497
550
|
}
|
|
498
551
|
setSources(I = []) {
|
|
499
552
|
this.docs = I;
|
|
@@ -618,21 +671,21 @@ var GI = class {
|
|
|
618
671
|
};
|
|
619
672
|
}
|
|
620
673
|
};
|
|
621
|
-
function
|
|
622
|
-
const e = new
|
|
674
|
+
function QI(I, g, { getFn: i = b.getFn, fieldNormWeight: c = b.fieldNormWeight } = {}) {
|
|
675
|
+
const e = new BI({
|
|
623
676
|
getFn: i,
|
|
624
677
|
fieldNormWeight: c
|
|
625
678
|
});
|
|
626
|
-
return e.setKeys(I.map(
|
|
679
|
+
return e.setKeys(I.map(LI)), e.setSources(g), e.create(), e;
|
|
627
680
|
}
|
|
628
|
-
function
|
|
629
|
-
const { keys: c, records: e } = I, s = new
|
|
681
|
+
function pg(I, { getFn: g = b.getFn, fieldNormWeight: i = b.fieldNormWeight } = {}) {
|
|
682
|
+
const { keys: c, records: e } = I, s = new BI({
|
|
630
683
|
getFn: g,
|
|
631
684
|
fieldNormWeight: i
|
|
632
685
|
});
|
|
633
686
|
return s.setKeys(c), s.setIndexRecords(e), s;
|
|
634
687
|
}
|
|
635
|
-
function
|
|
688
|
+
function Yg(I = [], g = b.minMatchCharLength) {
|
|
636
689
|
const i = [];
|
|
637
690
|
let c = -1, e = -1, s = 0;
|
|
638
691
|
for (let t = I.length; s < t; s += 1) {
|
|
@@ -641,8 +694,8 @@ function Zg(I = [], g = b.minMatchCharLength) {
|
|
|
641
694
|
}
|
|
642
695
|
return I[s - 1] && s - c >= g && i.push([c, s - 1]), i;
|
|
643
696
|
}
|
|
644
|
-
function
|
|
645
|
-
if (g.length > 32) throw new Error(
|
|
697
|
+
function Vg(I, g, i, { location: c = b.location, distance: e = b.distance, threshold: s = b.threshold, findAllMatches: t = b.findAllMatches, minMatchCharLength: C = b.minMatchCharLength, includeMatches: n = b.includeMatches, ignoreLocation: a = b.ignoreLocation } = {}) {
|
|
698
|
+
if (g.length > 32) throw new Error(ag(32));
|
|
646
699
|
const l = g.length, o = I.length, A = Math.max(0, Math.min(c, o));
|
|
647
700
|
let h = s, m = A;
|
|
648
701
|
const Z = (V, y) => {
|
|
@@ -661,8 +714,8 @@ function Gg(I, g, i, { location: c = b.location, distance: e = b.distance, thres
|
|
|
661
714
|
}
|
|
662
715
|
}
|
|
663
716
|
m = -1;
|
|
664
|
-
let v = [], L = 1,
|
|
665
|
-
const
|
|
717
|
+
let v = [], L = 1, KI = 0, Q = l + o;
|
|
718
|
+
const EI = 1 << l - 1;
|
|
666
719
|
for (let V = 0; V < l; V += 1) {
|
|
667
720
|
let y = 0, H = Q;
|
|
668
721
|
for (; y < H; )
|
|
@@ -672,9 +725,9 @@ function Gg(I, g, i, { location: c = b.location, distance: e = b.distance, thres
|
|
|
672
725
|
const nI = t ? o : Math.min(A + H, o) + l, J = Array(nI + 2);
|
|
673
726
|
J[nI + 1] = (1 << V) - 1;
|
|
674
727
|
for (let w = nI; w >= z; w -= 1) {
|
|
675
|
-
const oI = w - 1,
|
|
676
|
-
if (J[w] = (J[w + 1] << 1 | 1) &
|
|
677
|
-
if (h = L, m = oI,
|
|
728
|
+
const oI = w - 1, xI = i[I[oI]];
|
|
729
|
+
if (J[w] = (J[w + 1] << 1 | 1) & xI, V && (J[w] |= (v[w + 1] | v[w]) << 1 | 1 | v[w + 1]), J[w] & EI && (L = Z(V, oI), L <= h)) {
|
|
730
|
+
if (h = L, m = oI, KI = V, m <= A) break;
|
|
678
731
|
z = Math.max(1, 2 * A - m);
|
|
679
732
|
}
|
|
680
733
|
}
|
|
@@ -682,7 +735,7 @@ function Gg(I, g, i, { location: c = b.location, distance: e = b.distance, thres
|
|
|
682
735
|
v = J;
|
|
683
736
|
}
|
|
684
737
|
if (r && m >= 0) {
|
|
685
|
-
const V = Math.min(o - 1, m + l - 1 +
|
|
738
|
+
const V = Math.min(o - 1, m + l - 1 + KI);
|
|
686
739
|
for (let y = m; y <= V; y += 1) i[I[y]] && (K[y] = 1);
|
|
687
740
|
}
|
|
688
741
|
const CI = {
|
|
@@ -690,12 +743,12 @@ function Gg(I, g, i, { location: c = b.location, distance: e = b.distance, thres
|
|
|
690
743
|
score: Math.max(1e-3, L)
|
|
691
744
|
};
|
|
692
745
|
if (r) {
|
|
693
|
-
const V =
|
|
746
|
+
const V = Yg(K, C);
|
|
694
747
|
V.length ? n && (CI.indices = V) : CI.isMatch = !1;
|
|
695
748
|
}
|
|
696
749
|
return CI;
|
|
697
750
|
}
|
|
698
|
-
function
|
|
751
|
+
function Ng(I) {
|
|
699
752
|
const g = {};
|
|
700
753
|
for (let i = 0, c = I.length; i < c; i += 1) {
|
|
701
754
|
const e = I.charAt(i);
|
|
@@ -703,7 +756,7 @@ function Bg(I) {
|
|
|
703
756
|
}
|
|
704
757
|
return g;
|
|
705
758
|
}
|
|
706
|
-
function
|
|
759
|
+
function WI(I) {
|
|
707
760
|
if (I.length <= 1) return I;
|
|
708
761
|
I.sort((i, c) => i[0] - c[0] || i[1] - c[1]);
|
|
709
762
|
const g = [I[0]];
|
|
@@ -713,7 +766,7 @@ function BI(I) {
|
|
|
713
766
|
}
|
|
714
767
|
return g;
|
|
715
768
|
}
|
|
716
|
-
const
|
|
769
|
+
const UI = {
|
|
717
770
|
ł: "l",
|
|
718
771
|
Ł: "L",
|
|
719
772
|
đ: "d",
|
|
@@ -726,8 +779,8 @@ const MI = {
|
|
|
726
779
|
Ŧ: "T",
|
|
727
780
|
ı: "i",
|
|
728
781
|
ß: "ss"
|
|
729
|
-
},
|
|
730
|
-
var
|
|
782
|
+
}, yg = new RegExp("[" + Object.keys(UI).join("") + "]", "g"), j = typeof String.prototype.normalize == "function" ? (I) => I.normalize("NFD").replace(/[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u09FE\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C04\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D00-\u0D03\u0D3B\u0D3C\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF7-\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F]/g, "").replace(yg, (g) => UI[g]) : (I) => I;
|
|
783
|
+
var pI = class {
|
|
731
784
|
constructor(I, { location: g = b.location, threshold: i = b.threshold, distance: c = b.distance, includeMatches: e = b.includeMatches, findAllMatches: s = b.findAllMatches, minMatchCharLength: t = b.minMatchCharLength, isCaseSensitive: C = b.isCaseSensitive, ignoreDiacritics: n = b.ignoreDiacritics, ignoreLocation: a = b.ignoreLocation } = {}) {
|
|
732
785
|
if (this.options = {
|
|
733
786
|
location: g,
|
|
@@ -743,7 +796,7 @@ var WI = class {
|
|
|
743
796
|
const l = (A, h) => {
|
|
744
797
|
this.chunks.push({
|
|
745
798
|
pattern: A,
|
|
746
|
-
alphabet:
|
|
799
|
+
alphabet: Ng(A),
|
|
747
800
|
startIndex: h
|
|
748
801
|
});
|
|
749
802
|
}, o = this.pattern.length;
|
|
@@ -774,7 +827,7 @@ var WI = class {
|
|
|
774
827
|
const { location: e, distance: s, threshold: t, findAllMatches: C, minMatchCharLength: n, ignoreLocation: a } = this.options, l = [];
|
|
775
828
|
let o = 0, A = !1;
|
|
776
829
|
this.chunks.forEach(({ pattern: m, alphabet: Z, startIndex: r }) => {
|
|
777
|
-
const { isMatch: K, score: F, indices: v } =
|
|
830
|
+
const { isMatch: K, score: F, indices: v } = Vg(I, m, Z, {
|
|
778
831
|
location: e + r,
|
|
779
832
|
distance: s,
|
|
780
833
|
threshold: t,
|
|
@@ -789,11 +842,11 @@ var WI = class {
|
|
|
789
842
|
isMatch: A,
|
|
790
843
|
score: A ? o / this.chunks.length : 1
|
|
791
844
|
};
|
|
792
|
-
return A && c && (h.indices =
|
|
845
|
+
return A && c && (h.indices = WI(l)), h;
|
|
793
846
|
}
|
|
794
847
|
};
|
|
795
|
-
const
|
|
796
|
-
function
|
|
848
|
+
const Kg = /* @__PURE__ */ new Set(["fuzzy", "include"]);
|
|
849
|
+
function Xg(I) {
|
|
797
850
|
return I.startsWith("inverse");
|
|
798
851
|
}
|
|
799
852
|
const hI = [
|
|
@@ -918,7 +971,7 @@ const hI = [
|
|
|
918
971
|
multiRegex: /^"(.*)"$/,
|
|
919
972
|
singleRegex: /^(.*)$/,
|
|
920
973
|
create: (I, g = {}) => {
|
|
921
|
-
const i = new
|
|
974
|
+
const i = new pI(I, {
|
|
922
975
|
location: g.location ?? b.location,
|
|
923
976
|
threshold: g.threshold ?? b.threshold,
|
|
924
977
|
distance: g.distance ?? b.distance,
|
|
@@ -937,8 +990,8 @@ const hI = [
|
|
|
937
990
|
};
|
|
938
991
|
}
|
|
939
992
|
}
|
|
940
|
-
],
|
|
941
|
-
function
|
|
993
|
+
], fI = hI.length, Hg = "\0", wg = "|";
|
|
994
|
+
function fg(I) {
|
|
942
995
|
const g = [], i = I.length;
|
|
943
996
|
let c = 0;
|
|
944
997
|
for (; c < i; ) {
|
|
@@ -969,23 +1022,23 @@ function yg(I) {
|
|
|
969
1022
|
}
|
|
970
1023
|
return g;
|
|
971
1024
|
}
|
|
972
|
-
function
|
|
1025
|
+
function SI(I, g) {
|
|
973
1026
|
const i = I.match(g);
|
|
974
1027
|
return i ? i[1] : null;
|
|
975
1028
|
}
|
|
976
|
-
function
|
|
977
|
-
return I.replace(/\\\|/g,
|
|
978
|
-
const c =
|
|
1029
|
+
function Sg(I, g = {}) {
|
|
1030
|
+
return I.replace(/\\\|/g, Hg).split(wg).map((i) => {
|
|
1031
|
+
const c = fg(i.replace(/\u0000/g, "|").trim()).filter((s) => s && !!s.trim()), e = [];
|
|
979
1032
|
for (let s = 0, t = c.length; s < t; s += 1) {
|
|
980
1033
|
const C = c[s];
|
|
981
1034
|
let n = !1, a = -1;
|
|
982
|
-
for (; !n && ++a <
|
|
983
|
-
const l = hI[a], o =
|
|
1035
|
+
for (; !n && ++a < fI; ) {
|
|
1036
|
+
const l = hI[a], o = SI(C, l.multiRegex);
|
|
984
1037
|
o && (e.push(l.create(o, g)), n = !0);
|
|
985
1038
|
}
|
|
986
1039
|
if (!n)
|
|
987
|
-
for (a = -1; ++a <
|
|
988
|
-
const l = hI[a], o =
|
|
1040
|
+
for (a = -1; ++a < fI; ) {
|
|
1041
|
+
const l = hI[a], o = SI(C, l.singleRegex);
|
|
989
1042
|
if (o) {
|
|
990
1043
|
e.push(l.create(o, g));
|
|
991
1044
|
break;
|
|
@@ -995,7 +1048,7 @@ function Kg(I, g = {}) {
|
|
|
995
1048
|
return e;
|
|
996
1049
|
});
|
|
997
1050
|
}
|
|
998
|
-
var
|
|
1051
|
+
var vg = class {
|
|
999
1052
|
constructor(I, { isCaseSensitive: g = b.isCaseSensitive, ignoreDiacritics: i = b.ignoreDiacritics, includeMatches: c = b.includeMatches, minMatchCharLength: e = b.minMatchCharLength, ignoreLocation: s = b.ignoreLocation, findAllMatches: t = b.findAllMatches, location: C = b.location, threshold: n = b.threshold, distance: a = b.distance } = {}) {
|
|
1000
1053
|
this.query = null, this.options = {
|
|
1001
1054
|
isCaseSensitive: g,
|
|
@@ -1007,7 +1060,7 @@ var Xg = class {
|
|
|
1007
1060
|
location: C,
|
|
1008
1061
|
threshold: n,
|
|
1009
1062
|
distance: a
|
|
1010
|
-
}, I = g ? I : I.toLowerCase(), I = i ? j(I) : I, this.pattern = I, this.query =
|
|
1063
|
+
}, I = g ? I : I.toLowerCase(), I = i ? j(I) : I, this.pattern = I, this.query = Sg(this.pattern, this.options);
|
|
1011
1064
|
}
|
|
1012
1065
|
static condition(I, g) {
|
|
1013
1066
|
return g.useExtendedSearch;
|
|
@@ -1029,7 +1082,7 @@ var Xg = class {
|
|
|
1029
1082
|
for (let A = 0, h = o.length; A < h; A += 1) {
|
|
1030
1083
|
const m = o[A], { isMatch: Z, indices: r, score: K } = m.search(I);
|
|
1031
1084
|
if (Z)
|
|
1032
|
-
s += 1, C += K,
|
|
1085
|
+
s += 1, C += K, Xg(m.type) && (n = !0), i && (Kg.has(m.type) ? t.push(...r) : t.push(r));
|
|
1033
1086
|
else {
|
|
1034
1087
|
C = 0, s = 0, t.length = 0, n = !1;
|
|
1035
1088
|
break;
|
|
@@ -1040,7 +1093,7 @@ var Xg = class {
|
|
|
1040
1093
|
isMatch: !0,
|
|
1041
1094
|
score: C / s
|
|
1042
1095
|
};
|
|
1043
|
-
return n && (A.hasInverse = !0), i && (A.indices =
|
|
1096
|
+
return n && (A.hasInverse = !0), i && (A.indices = WI(t)), A;
|
|
1044
1097
|
}
|
|
1045
1098
|
}
|
|
1046
1099
|
return {
|
|
@@ -1050,7 +1103,7 @@ var Xg = class {
|
|
|
1050
1103
|
}
|
|
1051
1104
|
};
|
|
1052
1105
|
const bI = [];
|
|
1053
|
-
function
|
|
1106
|
+
function YI(...I) {
|
|
1054
1107
|
bI.push(...I);
|
|
1055
1108
|
}
|
|
1056
1109
|
function x(I, g) {
|
|
@@ -1058,7 +1111,7 @@ function x(I, g) {
|
|
|
1058
1111
|
const e = bI[i];
|
|
1059
1112
|
if (e.condition(I, g)) return new e(I, g);
|
|
1060
1113
|
}
|
|
1061
|
-
return new
|
|
1114
|
+
return new pI(I, g);
|
|
1062
1115
|
}
|
|
1063
1116
|
const _ = {
|
|
1064
1117
|
AND: "$and",
|
|
@@ -1066,8 +1119,8 @@ const _ = {
|
|
|
1066
1119
|
}, rI = {
|
|
1067
1120
|
PATH: "$path",
|
|
1068
1121
|
PATTERN: "$val"
|
|
1069
|
-
}, uI = (I) => !!(I[_.AND] || I[_.OR]),
|
|
1070
|
-
function
|
|
1122
|
+
}, uI = (I) => !!(I[_.AND] || I[_.OR]), Rg = (I) => !!I[rI.PATH], Fg = (I) => !f(I) && jI(I) && !uI(I), vI = (I) => ({ [_.AND]: Object.keys(I).map((g) => ({ [g]: I[g] })) });
|
|
1123
|
+
function TI(I, g, { auto: i = !0 } = {}) {
|
|
1071
1124
|
const c = (e) => {
|
|
1072
1125
|
if (N(e)) {
|
|
1073
1126
|
const n = {
|
|
@@ -1076,11 +1129,11 @@ function LI(I, g, { auto: i = !0 } = {}) {
|
|
|
1076
1129
|
};
|
|
1077
1130
|
return i && (n.searcher = x(e, g)), n;
|
|
1078
1131
|
}
|
|
1079
|
-
const s = Object.keys(e), t =
|
|
1080
|
-
if (!t && s.length > 1 && !uI(e)) return c(
|
|
1081
|
-
if (
|
|
1132
|
+
const s = Object.keys(e), t = Rg(e);
|
|
1133
|
+
if (!t && s.length > 1 && !uI(e)) return c(vI(e));
|
|
1134
|
+
if (Fg(e)) {
|
|
1082
1135
|
const n = t ? e[rI.PATH] : s[0], a = t ? e[rI.PATTERN] : e[n];
|
|
1083
|
-
if (!N(a)) throw new Error(
|
|
1136
|
+
if (!N(a)) throw new Error(lg(n));
|
|
1084
1137
|
const l = {
|
|
1085
1138
|
keyId: D(n),
|
|
1086
1139
|
pattern: a
|
|
@@ -1098,7 +1151,7 @@ function LI(I, g, { auto: i = !0 } = {}) {
|
|
|
1098
1151
|
});
|
|
1099
1152
|
}), C;
|
|
1100
1153
|
};
|
|
1101
|
-
return uI(I) || (I =
|
|
1154
|
+
return uI(I) || (I = vI(I)), c(I);
|
|
1102
1155
|
}
|
|
1103
1156
|
function mI(I, { ignoreFieldNorm: g = b.ignoreFieldNorm }) {
|
|
1104
1157
|
let i = 1;
|
|
@@ -1107,12 +1160,12 @@ function mI(I, { ignoreFieldNorm: g = b.ignoreFieldNorm }) {
|
|
|
1107
1160
|
i *= Math.pow(s === 0 && t ? Number.EPSILON : s, (t || 1) * (g ? 1 : e));
|
|
1108
1161
|
}), i;
|
|
1109
1162
|
}
|
|
1110
|
-
function
|
|
1163
|
+
function Jg(I, { ignoreFieldNorm: g = b.ignoreFieldNorm }) {
|
|
1111
1164
|
I.forEach((i) => {
|
|
1112
1165
|
i.score = mI(i.matches, { ignoreFieldNorm: g });
|
|
1113
1166
|
});
|
|
1114
1167
|
}
|
|
1115
|
-
var
|
|
1168
|
+
var kg = class {
|
|
1116
1169
|
constructor(I, g) {
|
|
1117
1170
|
this.limit = I, this.heap = [], this.comparator = g;
|
|
1118
1171
|
}
|
|
@@ -1147,7 +1200,7 @@ var Sg = class {
|
|
|
1147
1200
|
} while (c !== I);
|
|
1148
1201
|
}
|
|
1149
1202
|
};
|
|
1150
|
-
function
|
|
1203
|
+
function zg(I) {
|
|
1151
1204
|
const g = [];
|
|
1152
1205
|
return I.matches.forEach((i) => {
|
|
1153
1206
|
if (!X(i.indices) || !i.indices.length) return;
|
|
@@ -1158,20 +1211,20 @@ function vg(I) {
|
|
|
1158
1211
|
i.key && (c.key = i.key.id), i.idx > -1 && (c.refIndex = i.idx), g.push(c);
|
|
1159
1212
|
}), g;
|
|
1160
1213
|
}
|
|
1161
|
-
function
|
|
1214
|
+
function jg(I, g, { includeMatches: i = b.includeMatches, includeScore: c = b.includeScore } = {}) {
|
|
1162
1215
|
return I.map((e) => {
|
|
1163
1216
|
const { idx: s } = e, t = {
|
|
1164
1217
|
item: g[s],
|
|
1165
1218
|
refIndex: s
|
|
1166
1219
|
};
|
|
1167
|
-
return i && (t.matches =
|
|
1220
|
+
return i && (t.matches = zg(e)), c && (t.score = e.score), t;
|
|
1168
1221
|
});
|
|
1169
1222
|
}
|
|
1170
|
-
const
|
|
1171
|
-
function
|
|
1172
|
-
|
|
1223
|
+
const Mg = /[\p{L}\p{M}\p{N}_]+/gu, RI = /* @__PURE__ */ new WeakSet();
|
|
1224
|
+
function Lg(I) {
|
|
1225
|
+
RI.has(I) || (RI.add(I), console.warn(`[Fuse] tokenize regex ${I} lacks the global flag; only the first match per text will be returned. Add the 'g' flag.`));
|
|
1173
1226
|
}
|
|
1174
|
-
function
|
|
1227
|
+
function Qg(I) {
|
|
1175
1228
|
if (typeof I == "function") {
|
|
1176
1229
|
let g = !1;
|
|
1177
1230
|
return (i) => {
|
|
@@ -1181,15 +1234,15 @@ function kg(I) {
|
|
|
1181
1234
|
return c;
|
|
1182
1235
|
};
|
|
1183
1236
|
}
|
|
1184
|
-
return I instanceof RegExp ? (I.global ||
|
|
1237
|
+
return I instanceof RegExp ? (I.global || Lg(I), (g) => g.match(I) || []) : (g) => g.match(Mg) || [];
|
|
1185
1238
|
}
|
|
1186
1239
|
function ZI({ isCaseSensitive: I = !1, ignoreDiacritics: g = !1, tokenize: i } = {}) {
|
|
1187
|
-
const c =
|
|
1240
|
+
const c = Qg(i);
|
|
1188
1241
|
return { tokenize(e) {
|
|
1189
1242
|
return I || (e = e.toLowerCase()), g && (e = j(e)), c(e);
|
|
1190
1243
|
} };
|
|
1191
1244
|
}
|
|
1192
|
-
var
|
|
1245
|
+
var Ug = class {
|
|
1193
1246
|
static condition(I, g) {
|
|
1194
1247
|
return g.useTokenSearch;
|
|
1195
1248
|
}
|
|
@@ -1202,7 +1255,7 @@ var zg = class {
|
|
|
1202
1255
|
const i = this.analyzer.tokenize(I), { df: c, fieldCount: e } = g._invertedIndex;
|
|
1203
1256
|
this.termSearchers = [], this.idfWeights = [];
|
|
1204
1257
|
for (const s of i) {
|
|
1205
|
-
this.termSearchers.push(new
|
|
1258
|
+
this.termSearchers.push(new pI(s, {
|
|
1206
1259
|
location: g.location,
|
|
1207
1260
|
threshold: g.threshold,
|
|
1208
1261
|
distance: g.distance,
|
|
@@ -1238,7 +1291,7 @@ var zg = class {
|
|
|
1238
1291
|
isMatch: !0,
|
|
1239
1292
|
score: Math.max(1e-3, C)
|
|
1240
1293
|
};
|
|
1241
|
-
return this.options.includeMatches && g.length && (n.indices =
|
|
1294
|
+
return this.options.includeMatches && g.length && (n.indices = WI(g)), this.combineAll && (this.useMask ? n.matchedMask = s : n.matchedTerms = t, n.termCount = this.numTerms), n;
|
|
1242
1295
|
}
|
|
1243
1296
|
};
|
|
1244
1297
|
function lI(I, g, i, c) {
|
|
@@ -1251,7 +1304,7 @@ function lI(I, g, i, c) {
|
|
|
1251
1304
|
for (const C of s)
|
|
1252
1305
|
t.set(C, (t.get(C) || 0) + 1), I.df.set(C, (I.df.get(C) || 0) + 1);
|
|
1253
1306
|
}
|
|
1254
|
-
function
|
|
1307
|
+
function DI(I, g, i, c) {
|
|
1255
1308
|
const { i: e, v: s, $: t } = g;
|
|
1256
1309
|
if (s !== void 0) {
|
|
1257
1310
|
lI(I, s, e, c);
|
|
@@ -1265,20 +1318,20 @@ function QI(I, g, i, c) {
|
|
|
1265
1318
|
else lI(I, n.v, e, c);
|
|
1266
1319
|
}
|
|
1267
1320
|
}
|
|
1268
|
-
function
|
|
1321
|
+
function Tg(I, g, i) {
|
|
1269
1322
|
const c = {
|
|
1270
1323
|
fieldCount: 0,
|
|
1271
1324
|
df: /* @__PURE__ */ new Map(),
|
|
1272
1325
|
docFieldCount: /* @__PURE__ */ new Map(),
|
|
1273
1326
|
docTermFieldHits: /* @__PURE__ */ new Map()
|
|
1274
1327
|
};
|
|
1275
|
-
for (const e of I)
|
|
1328
|
+
for (const e of I) DI(c, e, g, i);
|
|
1276
1329
|
return c;
|
|
1277
1330
|
}
|
|
1278
|
-
function
|
|
1279
|
-
|
|
1331
|
+
function Dg(I, g, i, c) {
|
|
1332
|
+
DI(I, g, i, c);
|
|
1280
1333
|
}
|
|
1281
|
-
function
|
|
1334
|
+
function Og(I, g) {
|
|
1282
1335
|
const i = I.docFieldCount.get(g);
|
|
1283
1336
|
if (i === void 0) return;
|
|
1284
1337
|
I.fieldCount -= i, I.docFieldCount.delete(g);
|
|
@@ -1291,10 +1344,10 @@ function Lg(I, g) {
|
|
|
1291
1344
|
I.docTermFieldHits.delete(g);
|
|
1292
1345
|
}
|
|
1293
1346
|
}
|
|
1294
|
-
function
|
|
1347
|
+
function FI(I, g) {
|
|
1295
1348
|
if (g.length === 0) return;
|
|
1296
1349
|
const i = Array.from(new Set(g)).sort((C, n) => C - n);
|
|
1297
|
-
for (const C of i)
|
|
1350
|
+
for (const C of i) Og(I, C);
|
|
1298
1351
|
const c = (C) => {
|
|
1299
1352
|
let n = 0, a = i.length;
|
|
1300
1353
|
for (; n < a; ) {
|
|
@@ -1314,7 +1367,7 @@ var S = class {
|
|
|
1314
1367
|
this.options = {
|
|
1315
1368
|
...b,
|
|
1316
1369
|
...g
|
|
1317
|
-
}, this.options.useExtendedSearch, this.options.useTokenSearch, this._keyStore = new
|
|
1370
|
+
}, this.options.useExtendedSearch, this.options.useTokenSearch, this._keyStore = new bg(this.options.keys), this._docs = I, this._myIndex = null, this._invertedIndex = null, this.setCollection(I, i), this._lastQuery = null, this._lastSearcher = null;
|
|
1318
1371
|
}
|
|
1319
1372
|
_getSearcher(I) {
|
|
1320
1373
|
if (this._lastQuery === I) return this._lastSearcher;
|
|
@@ -1325,8 +1378,8 @@ var S = class {
|
|
|
1325
1378
|
return this._lastQuery = I, this._lastSearcher = g, g;
|
|
1326
1379
|
}
|
|
1327
1380
|
setCollection(I, g) {
|
|
1328
|
-
if (this._docs = I, g && !(g instanceof
|
|
1329
|
-
if (this._myIndex = g ||
|
|
1381
|
+
if (this._docs = I, g && !(g instanceof BI)) throw new Error(og);
|
|
1382
|
+
if (this._myIndex = g || QI(this.options.keys, this._docs, {
|
|
1330
1383
|
getFn: this.options.getFn,
|
|
1331
1384
|
fieldNormWeight: this.options.fieldNormWeight
|
|
1332
1385
|
}), this.options.useTokenSearch) {
|
|
@@ -1335,7 +1388,7 @@ var S = class {
|
|
|
1335
1388
|
ignoreDiacritics: this.options.ignoreDiacritics,
|
|
1336
1389
|
tokenize: this.options.tokenize
|
|
1337
1390
|
});
|
|
1338
|
-
this._invertedIndex =
|
|
1391
|
+
this._invertedIndex = Tg(this._myIndex.records, this._myIndex.keys.length, i);
|
|
1339
1392
|
}
|
|
1340
1393
|
this._invalidateSearcherCache();
|
|
1341
1394
|
}
|
|
@@ -1349,7 +1402,7 @@ var S = class {
|
|
|
1349
1402
|
ignoreDiacritics: this.options.ignoreDiacritics,
|
|
1350
1403
|
tokenize: this.options.tokenize
|
|
1351
1404
|
});
|
|
1352
|
-
|
|
1405
|
+
Dg(this._invertedIndex, g, this._myIndex.keys.length, i);
|
|
1353
1406
|
}
|
|
1354
1407
|
this._invalidateSearcherCache();
|
|
1355
1408
|
}
|
|
@@ -1357,7 +1410,7 @@ var S = class {
|
|
|
1357
1410
|
const g = [], i = [];
|
|
1358
1411
|
for (let c = 0, e = this._docs.length; c < e; c += 1) I(this._docs[c], c) && (g.push(this._docs[c]), i.push(c));
|
|
1359
1412
|
if (i.length) {
|
|
1360
|
-
this._invertedIndex &&
|
|
1413
|
+
this._invertedIndex && FI(this._invertedIndex, i);
|
|
1361
1414
|
const c = new Set(i);
|
|
1362
1415
|
this._docs = this._docs.filter((e, s) => !c.has(s)), this._myIndex.removeAll(i), this._invalidateSearcherCache();
|
|
1363
1416
|
}
|
|
@@ -1365,7 +1418,7 @@ var S = class {
|
|
|
1365
1418
|
}
|
|
1366
1419
|
removeAt(I) {
|
|
1367
1420
|
if (!Number.isInteger(I) || I < 0 || I >= this._docs.length) throw new Error(AI);
|
|
1368
|
-
this._invertedIndex &&
|
|
1421
|
+
this._invertedIndex && FI(this._invertedIndex, [I]);
|
|
1369
1422
|
const g = this._docs.splice(I, 1)[0];
|
|
1370
1423
|
return this._myIndex.removeAt(I), this._invalidateSearcherCache(), g;
|
|
1371
1424
|
}
|
|
@@ -1390,7 +1443,7 @@ var S = class {
|
|
|
1390
1443
|
const n = s && T(i) && i > 0 && N(I), a = t, l = (A, h) => a(A, h) || A.idx - h.idx;
|
|
1391
1444
|
let o;
|
|
1392
1445
|
if (n) {
|
|
1393
|
-
const A = new
|
|
1446
|
+
const A = new kg(i, l);
|
|
1394
1447
|
N(this._docs[0]) ? this._searchStringList(I, {
|
|
1395
1448
|
heap: A,
|
|
1396
1449
|
ignoreFieldNorm: C
|
|
@@ -1399,8 +1452,8 @@ var S = class {
|
|
|
1399
1452
|
ignoreFieldNorm: C
|
|
1400
1453
|
}), o = A.extractSorted();
|
|
1401
1454
|
} else
|
|
1402
|
-
o = N(I) ? N(this._docs[0]) ? this._searchStringList(I) : this._searchObjectList(I) : this._searchLogical(I),
|
|
1403
|
-
return
|
|
1455
|
+
o = N(I) ? N(this._docs[0]) ? this._searchStringList(I) : this._searchObjectList(I) : this._searchLogical(I), Jg(o, { ignoreFieldNorm: C }), s && o.sort(N(I) ? l : a), T(i) && i > -1 && (o = o.slice(0, i));
|
|
1456
|
+
return jg(o, this._docs, {
|
|
1404
1457
|
includeMatches: c,
|
|
1405
1458
|
includeScore: e
|
|
1406
1459
|
});
|
|
@@ -1431,7 +1484,7 @@ var S = class {
|
|
|
1431
1484
|
}), t;
|
|
1432
1485
|
}
|
|
1433
1486
|
_searchLogical(I) {
|
|
1434
|
-
const g =
|
|
1487
|
+
const g = TI(I, this.options), i = this._normalizedKeys(), c = (C, n, a) => {
|
|
1435
1488
|
if (!("children" in C)) {
|
|
1436
1489
|
const { keyId: h, searcher: m } = C;
|
|
1437
1490
|
let Z;
|
|
@@ -1547,30 +1600,30 @@ var S = class {
|
|
|
1547
1600
|
}
|
|
1548
1601
|
};
|
|
1549
1602
|
S.version = "7.5.0";
|
|
1550
|
-
S.createIndex =
|
|
1551
|
-
S.parseIndex =
|
|
1603
|
+
S.createIndex = QI;
|
|
1604
|
+
S.parseIndex = pg;
|
|
1552
1605
|
S.config = b;
|
|
1553
1606
|
S.match = function(I, g, i) {
|
|
1554
|
-
if (i && i.useTokenSearch) throw new Error(
|
|
1607
|
+
if (i && i.useTokenSearch) throw new Error(hg);
|
|
1555
1608
|
return x(I, {
|
|
1556
1609
|
...b,
|
|
1557
1610
|
...i
|
|
1558
1611
|
}).searchIn(g);
|
|
1559
1612
|
};
|
|
1560
|
-
S.parseQuery =
|
|
1561
|
-
|
|
1562
|
-
|
|
1613
|
+
S.parseQuery = TI;
|
|
1614
|
+
YI(vg);
|
|
1615
|
+
YI(Ug);
|
|
1563
1616
|
S.use = function(...I) {
|
|
1564
|
-
I.forEach((g) =>
|
|
1617
|
+
I.forEach((g) => YI(g));
|
|
1565
1618
|
};
|
|
1566
1619
|
var tI = S;
|
|
1567
|
-
function
|
|
1568
|
-
return `${Math.round(I / 1e3)}k #${g} top ${
|
|
1620
|
+
function OI(I, g, i) {
|
|
1621
|
+
return `${Math.round(I / 1e3)}k #${g} top ${VI(g, i)}%`;
|
|
1569
1622
|
}
|
|
1570
|
-
function
|
|
1623
|
+
function VI(I, g) {
|
|
1571
1624
|
return !g || g < 1 ? 100 : Math.min(100, Math.max(1, Math.ceil(I / g * 100)));
|
|
1572
1625
|
}
|
|
1573
|
-
function
|
|
1626
|
+
function NI(I) {
|
|
1574
1627
|
const g = B(I.cache, "cpu");
|
|
1575
1628
|
if (g) return g;
|
|
1576
1629
|
let i = "";
|
|
@@ -1606,7 +1659,7 @@ function VI(I) {
|
|
|
1606
1659
|
}
|
|
1607
1660
|
return i ? (i = i.trim().replace(/with .*/, ""), d(I.cache, "cpu", i), i) : (d(I.cache, "cpu", ""), "");
|
|
1608
1661
|
}
|
|
1609
|
-
function
|
|
1662
|
+
function yI(I) {
|
|
1610
1663
|
const g = B(I.cache, "gpu");
|
|
1611
1664
|
if (g !== null) return g;
|
|
1612
1665
|
if (R) {
|
|
@@ -1666,7 +1719,7 @@ function NI(I) {
|
|
|
1666
1719
|
}
|
|
1667
1720
|
return d(I.cache, "gpu", ""), "";
|
|
1668
1721
|
}
|
|
1669
|
-
function
|
|
1722
|
+
function Eg() {
|
|
1670
1723
|
if (Y) {
|
|
1671
1724
|
try {
|
|
1672
1725
|
const g = G("system_profiler SPDisplaysDataType").match(/Resolution:\s*(\d+) x (\d+)/);
|
|
@@ -1687,10 +1740,10 @@ function Qg() {
|
|
|
1687
1740
|
}
|
|
1688
1741
|
return "";
|
|
1689
1742
|
}
|
|
1690
|
-
function
|
|
1743
|
+
function xg(I) {
|
|
1691
1744
|
const g = B(I.cache, "bench");
|
|
1692
1745
|
if (g) return g;
|
|
1693
|
-
const i =
|
|
1746
|
+
const i = NI(I);
|
|
1694
1747
|
if (!i)
|
|
1695
1748
|
return d(I.cache, "bench", ""), "";
|
|
1696
1749
|
try {
|
|
@@ -1715,17 +1768,17 @@ function Ug(I) {
|
|
|
1715
1768
|
minMatchCharLength: 3
|
|
1716
1769
|
}).search(i);
|
|
1717
1770
|
if (l.length > 0) {
|
|
1718
|
-
const o = l[0].item, A =
|
|
1771
|
+
const o = l[0].item, A = OI(o.score, o.rank, C.length);
|
|
1719
1772
|
return d(I.cache, "bench", A), A;
|
|
1720
1773
|
}
|
|
1721
1774
|
} catch {
|
|
1722
1775
|
}
|
|
1723
1776
|
return d(I.cache, "bench", ""), "";
|
|
1724
1777
|
}
|
|
1725
|
-
function
|
|
1778
|
+
function _g(I) {
|
|
1726
1779
|
const g = B(I.cache, "cpu_bench_info");
|
|
1727
1780
|
if (g) return g;
|
|
1728
|
-
const i =
|
|
1781
|
+
const i = NI(I);
|
|
1729
1782
|
if (!i)
|
|
1730
1783
|
return d(I.cache, "cpu_bench_info", ""), "";
|
|
1731
1784
|
try {
|
|
@@ -1754,7 +1807,7 @@ function Tg(I) {
|
|
|
1754
1807
|
minMatchCharLength: 3
|
|
1755
1808
|
}).search(i);
|
|
1756
1809
|
if (l.length > 0) {
|
|
1757
|
-
const o = l[0].item, A = Math.round(o.score / 1e3), h = o.rank, m =
|
|
1810
|
+
const o = l[0].item, A = Math.round(o.score / 1e3), h = o.rank, m = VI(h, C.length);
|
|
1758
1811
|
let Z = "Unknown";
|
|
1759
1812
|
o.name.includes("Apple") || o.name.includes("ARM") ? Z = "ARM" : o.name.includes("Intel") ? Z = "Intel" : o.name.includes("AMD") || o.name.includes("Ryzen") || o.name.includes("EPYC") ? Z = "AMD" : o.name.includes("Qualcomm") && (Z = "ARM");
|
|
1760
1813
|
const r = `Geekbench 6: ${A}k (Rank #${h}, top ${m}%) - ${Z}`;
|
|
@@ -1764,10 +1817,10 @@ function Tg(I) {
|
|
|
1764
1817
|
}
|
|
1765
1818
|
return d(I.cache, "cpu_bench_info", ""), "";
|
|
1766
1819
|
}
|
|
1767
|
-
function
|
|
1820
|
+
function Pg(I) {
|
|
1768
1821
|
const g = B(I.cache, "gpu_bench");
|
|
1769
1822
|
if (g) return g;
|
|
1770
|
-
const i =
|
|
1823
|
+
const i = yI(I);
|
|
1771
1824
|
if (!i)
|
|
1772
1825
|
return d(I.cache, "gpu_bench", ""), "";
|
|
1773
1826
|
try {
|
|
@@ -1792,17 +1845,17 @@ function Dg(I) {
|
|
|
1792
1845
|
minMatchCharLength: 3
|
|
1793
1846
|
}).search(i);
|
|
1794
1847
|
if (l.length > 0) {
|
|
1795
|
-
const o = l[0].item, A =
|
|
1848
|
+
const o = l[0].item, A = OI(o.score, o.rank, C.length);
|
|
1796
1849
|
return d(I.cache, "gpu_bench", A), A;
|
|
1797
1850
|
}
|
|
1798
1851
|
} catch {
|
|
1799
1852
|
}
|
|
1800
1853
|
return d(I.cache, "gpu_bench", ""), "";
|
|
1801
1854
|
}
|
|
1802
|
-
function
|
|
1855
|
+
function $g(I) {
|
|
1803
1856
|
const g = B(I.cache, "gpu_bench_info");
|
|
1804
1857
|
if (g) return g;
|
|
1805
|
-
const i =
|
|
1858
|
+
const i = yI(I);
|
|
1806
1859
|
if (!i)
|
|
1807
1860
|
return d(I.cache, "gpu_bench_info", ""), "";
|
|
1808
1861
|
try {
|
|
@@ -1831,7 +1884,7 @@ function Og(I) {
|
|
|
1831
1884
|
minMatchCharLength: 3
|
|
1832
1885
|
}).search(i);
|
|
1833
1886
|
if (l.length > 0) {
|
|
1834
|
-
const o = l[0].item, A = Math.round(o.score / 1e3), h = o.rank, m =
|
|
1887
|
+
const o = l[0].item, A = Math.round(o.score / 1e3), h = o.rank, m = VI(h, C.length);
|
|
1835
1888
|
let Z = "Unknown";
|
|
1836
1889
|
const r = o.name.toUpperCase();
|
|
1837
1890
|
r.includes("NVIDIA") || r.includes("GEFORCE") || r.includes("RTX") || r.includes("GTX") || r.includes("QUADRO") || r.includes("TESL") || r.includes("B200") || r.includes("H100") || r.includes("A100") || r.includes("A40") || r.includes("L40") || r.includes("L20") ? Z = "NVIDIA" : r.includes("AMD") || r.includes("RADEON") || r.includes("RX ") || r.includes("HD") || r.includes("EPYC") || r.includes("INSTINCT") || r.includes("NAVI") || r.includes("VEGA") ? Z = "AMD" : (r.includes("INTEL") || r.includes("ARC") || r.includes("UHD") || r.includes("IRIS") || r.includes("HD GRAPHICS")) && (Z = "Intel");
|
|
@@ -1842,7 +1895,7 @@ function Og(I) {
|
|
|
1842
1895
|
}
|
|
1843
1896
|
return d(I.cache, "gpu_bench_info", ""), "";
|
|
1844
1897
|
}
|
|
1845
|
-
function
|
|
1898
|
+
function qg(I) {
|
|
1846
1899
|
const g = B(I.cache, "ram_used");
|
|
1847
1900
|
if (g) return g;
|
|
1848
1901
|
if (p)
|
|
@@ -1857,7 +1910,7 @@ function Eg(I) {
|
|
|
1857
1910
|
const i = W.totalmem(), c = W.freemem(), e = i - c, s = Math.round(i / (1024 * 1024 * 1024)), C = `${Math.round(e / (1024 * 1024 * 1024))}/${s}GB`;
|
|
1858
1911
|
return d(I.cache, "ram_used", C), C;
|
|
1859
1912
|
}
|
|
1860
|
-
function
|
|
1913
|
+
function Ii() {
|
|
1861
1914
|
if (p) {
|
|
1862
1915
|
try {
|
|
1863
1916
|
const g = u.readFileSync("/proc/meminfo", "utf8").match(/MemAvailable:\s+(\d+) kB/);
|
|
@@ -1880,7 +1933,7 @@ function xg() {
|
|
|
1880
1933
|
}
|
|
1881
1934
|
return "";
|
|
1882
1935
|
}
|
|
1883
|
-
function
|
|
1936
|
+
function gi() {
|
|
1884
1937
|
if (p) {
|
|
1885
1938
|
try {
|
|
1886
1939
|
const I = u.readFileSync("/proc/meminfo", "utf8"), g = I.match(/SwapTotal:\s+(\d+) kB/), i = I.match(/SwapFree:\s+(\d+) kB/);
|
|
@@ -1910,7 +1963,7 @@ function _g() {
|
|
|
1910
1963
|
}
|
|
1911
1964
|
return "";
|
|
1912
1965
|
}
|
|
1913
|
-
function
|
|
1966
|
+
function ii(I) {
|
|
1914
1967
|
const g = B(I.cache, "disk_used");
|
|
1915
1968
|
if (g !== null) return g;
|
|
1916
1969
|
if (p || Y)
|
|
@@ -1941,8 +1994,8 @@ function Pg(I) {
|
|
|
1941
1994
|
}
|
|
1942
1995
|
return d(I.cache, "disk_used", ""), "";
|
|
1943
1996
|
}
|
|
1944
|
-
const
|
|
1945
|
-
function
|
|
1997
|
+
const ci = 10 * 1024 * 1024;
|
|
1998
|
+
function ei(I) {
|
|
1946
1999
|
const g = B(I.cache, "disk_size");
|
|
1947
2000
|
if (g !== null) return g;
|
|
1948
2001
|
if (!p && !Y)
|
|
@@ -1954,7 +2007,7 @@ function qg(I) {
|
|
|
1954
2007
|
const C = t.trim().split(/\s+/);
|
|
1955
2008
|
if (C.length < 6) continue;
|
|
1956
2009
|
const n = C[0], a = parseInt(C[1]), l = parseInt(C[2]), o = C[C.length - 1];
|
|
1957
|
-
if (!(isNaN(a) || isNaN(l) || a <
|
|
2010
|
+
if (!(isNaN(a) || isNaN(l) || a < ci)) {
|
|
1958
2011
|
if (Y) {
|
|
1959
2012
|
if (o !== "/" && !o.startsWith("/Volumes/")) continue;
|
|
1960
2013
|
} else if (n.startsWith("devtmpfs") || n.startsWith("tmpfs") || n === "overlay" || o.startsWith("/boot") || o.startsWith("/dev") || o.startsWith("/proc") || o.startsWith("/sys") || o.startsWith("/run"))
|
|
@@ -1972,7 +2025,7 @@ function qg(I) {
|
|
|
1972
2025
|
}
|
|
1973
2026
|
return d(I.cache, "disk_size", ""), "";
|
|
1974
2027
|
}
|
|
1975
|
-
function
|
|
2028
|
+
function si(I) {
|
|
1976
2029
|
const g = B(I.cache, "mount_points");
|
|
1977
2030
|
if (g !== null) return g;
|
|
1978
2031
|
if (!p && !Y)
|
|
@@ -1998,7 +2051,7 @@ function Ii(I) {
|
|
|
1998
2051
|
}
|
|
1999
2052
|
return d(I.cache, "mount_points", ""), "";
|
|
2000
2053
|
}
|
|
2001
|
-
function
|
|
2054
|
+
function ti(I) {
|
|
2002
2055
|
const g = B(I.cache, "top_process");
|
|
2003
2056
|
if (g !== null) return g;
|
|
2004
2057
|
if (p)
|
|
@@ -2026,11 +2079,11 @@ function gi(I) {
|
|
|
2026
2079
|
}
|
|
2027
2080
|
return d(I.cache, "top_process", ""), "";
|
|
2028
2081
|
}
|
|
2029
|
-
function
|
|
2082
|
+
function Ci() {
|
|
2030
2083
|
const I = W.uptime(), g = Math.floor(I / 86400), i = Math.floor(I % 86400 / 3600), c = Math.floor(I % 3600 / 60);
|
|
2031
2084
|
return `${g}d ${i}h ${c}m`;
|
|
2032
2085
|
}
|
|
2033
|
-
function
|
|
2086
|
+
function ni() {
|
|
2034
2087
|
if (!p && !Y) return "";
|
|
2035
2088
|
try {
|
|
2036
2089
|
const g = G("who").split(`
|
|
@@ -2041,7 +2094,7 @@ function ci() {
|
|
|
2041
2094
|
}
|
|
2042
2095
|
return "";
|
|
2043
2096
|
}
|
|
2044
|
-
async function
|
|
2097
|
+
async function oi(I) {
|
|
2045
2098
|
const g = B(I.cache, "ip");
|
|
2046
2099
|
if (g) return g;
|
|
2047
2100
|
if (!I.ipInfo)
|
|
@@ -2049,7 +2102,7 @@ async function ei(I) {
|
|
|
2049
2102
|
const i = I.ipInfo.ip || "";
|
|
2050
2103
|
return d(I.cache, "ip", i), i;
|
|
2051
2104
|
}
|
|
2052
|
-
function
|
|
2105
|
+
function li() {
|
|
2053
2106
|
if (p) {
|
|
2054
2107
|
try {
|
|
2055
2108
|
const c = G("ifconfig 2>/dev/null").match(
|
|
@@ -2074,7 +2127,7 @@ function si() {
|
|
|
2074
2127
|
c.family === "IPv4" && !c.internal && g.push(c.address);
|
|
2075
2128
|
return g.join(" ");
|
|
2076
2129
|
}
|
|
2077
|
-
async function
|
|
2130
|
+
async function ai(I) {
|
|
2078
2131
|
const g = B(I.cache, "city");
|
|
2079
2132
|
if (g !== null) return g;
|
|
2080
2133
|
if (!I.ipInfo || !I.ipInfo.city)
|
|
@@ -2082,7 +2135,7 @@ async function ti(I) {
|
|
|
2082
2135
|
const i = I.ipInfo.city;
|
|
2083
2136
|
return d(I.cache, "city", i), i;
|
|
2084
2137
|
}
|
|
2085
|
-
async function
|
|
2138
|
+
async function di(I) {
|
|
2086
2139
|
const g = B(I.cache, "domain");
|
|
2087
2140
|
if (g !== null) return g;
|
|
2088
2141
|
if (!I.ipInfo || !I.ipInfo.hostname)
|
|
@@ -2090,7 +2143,7 @@ async function Ci(I) {
|
|
|
2090
2143
|
const i = `http://${I.ipInfo.hostname}`;
|
|
2091
2144
|
return d(I.cache, "domain", i), i;
|
|
2092
2145
|
}
|
|
2093
|
-
async function
|
|
2146
|
+
async function Ai(I) {
|
|
2094
2147
|
const g = B(I.cache, "isp");
|
|
2095
2148
|
if (g !== null) return g;
|
|
2096
2149
|
if (!I.ipInfo || !I.ipInfo.org)
|
|
@@ -2098,7 +2151,7 @@ async function ni(I) {
|
|
|
2098
2151
|
const i = I.ipInfo.org.split(" ").slice(1).join(" ");
|
|
2099
2152
|
return d(I.cache, "isp", i), i;
|
|
2100
2153
|
}
|
|
2101
|
-
function
|
|
2154
|
+
function hi(I) {
|
|
2102
2155
|
const g = B(I.cache, "network_interfaces");
|
|
2103
2156
|
if (g !== null) return g;
|
|
2104
2157
|
if (!p && !Y)
|
|
@@ -2115,7 +2168,7 @@ function oi(I) {
|
|
|
2115
2168
|
}
|
|
2116
2169
|
return d(I.cache, "network_interfaces", ""), "";
|
|
2117
2170
|
}
|
|
2118
|
-
function
|
|
2171
|
+
function bi(I) {
|
|
2119
2172
|
const g = B(I.cache, "ports");
|
|
2120
2173
|
if (g !== null) return g;
|
|
2121
2174
|
if (p || Y)
|
|
@@ -2138,7 +2191,7 @@ function li(I) {
|
|
|
2138
2191
|
}
|
|
2139
2192
|
return d(I.cache, "ports", ""), "";
|
|
2140
2193
|
}
|
|
2141
|
-
function
|
|
2194
|
+
function ri(I) {
|
|
2142
2195
|
if (Y)
|
|
2143
2196
|
return W.loadavg().map((g) => g.toFixed(2)).join(" ");
|
|
2144
2197
|
if (!p) return "";
|
|
@@ -2148,7 +2201,7 @@ function ai(I) {
|
|
|
2148
2201
|
}
|
|
2149
2202
|
return "";
|
|
2150
2203
|
}
|
|
2151
|
-
function
|
|
2204
|
+
function ui(I) {
|
|
2152
2205
|
const g = B(I.cache, "battery");
|
|
2153
2206
|
if (g !== null) return g;
|
|
2154
2207
|
if (Y) {
|
|
@@ -2174,7 +2227,7 @@ function di(I) {
|
|
|
2174
2227
|
}
|
|
2175
2228
|
return d(I.cache, "battery", ""), "";
|
|
2176
2229
|
}
|
|
2177
|
-
function
|
|
2230
|
+
function mi(I) {
|
|
2178
2231
|
const g = B(I.cache, "temperature");
|
|
2179
2232
|
if (g !== null) return g;
|
|
2180
2233
|
if (Y) {
|
|
@@ -2212,7 +2265,7 @@ function Ai(I) {
|
|
|
2212
2265
|
}
|
|
2213
2266
|
return d(I.cache, "temperature", ""), "";
|
|
2214
2267
|
}
|
|
2215
|
-
function
|
|
2268
|
+
function Zi(I) {
|
|
2216
2269
|
const g = B(I.cache, "services_running");
|
|
2217
2270
|
if (g !== null) return g;
|
|
2218
2271
|
if (Y) {
|
|
@@ -2243,7 +2296,7 @@ function hi(I) {
|
|
|
2243
2296
|
}
|
|
2244
2297
|
return d(I.cache, "services_running", ""), "";
|
|
2245
2298
|
}
|
|
2246
|
-
function
|
|
2299
|
+
function Gi(I) {
|
|
2247
2300
|
const g = B(I.cache, "shell");
|
|
2248
2301
|
if (g !== null) return g;
|
|
2249
2302
|
if (!R) {
|
|
@@ -2256,7 +2309,7 @@ function bi(I) {
|
|
|
2256
2309
|
} catch {
|
|
2257
2310
|
}
|
|
2258
2311
|
try {
|
|
2259
|
-
const i =
|
|
2312
|
+
const i = zI.ppid, c = G(`ps -p ${i} -o comm=`).split("/").pop();
|
|
2260
2313
|
if (c)
|
|
2261
2314
|
return d(I.cache, "shell", c), c;
|
|
2262
2315
|
} catch {
|
|
@@ -2264,7 +2317,7 @@ function bi(I) {
|
|
|
2264
2317
|
}
|
|
2265
2318
|
return d(I.cache, "shell", ""), "";
|
|
2266
2319
|
}
|
|
2267
|
-
function
|
|
2320
|
+
function Bi(I) {
|
|
2268
2321
|
const g = B(I.cache, "packages");
|
|
2269
2322
|
if (g !== null) return g;
|
|
2270
2323
|
const e = [
|
|
@@ -2288,7 +2341,7 @@ function ri(I) {
|
|
|
2288
2341
|
].filter((s) => k(s)).join(" ");
|
|
2289
2342
|
return d(I.cache, "packages", e), e;
|
|
2290
2343
|
}
|
|
2291
|
-
function
|
|
2344
|
+
function Wi(I) {
|
|
2292
2345
|
const g = B(I.cache, "containers");
|
|
2293
2346
|
if (g !== null) return g;
|
|
2294
2347
|
if (!k("docker"))
|
|
@@ -2321,8 +2374,8 @@ function ui(I) {
|
|
|
2321
2374
|
}
|
|
2322
2375
|
return d(I.cache, "containers", ""), "";
|
|
2323
2376
|
}
|
|
2324
|
-
const
|
|
2325
|
-
function
|
|
2377
|
+
const pi = W.platform() === "win32", Yi = W.platform() === "darwin", Vi = W.platform() === "linux";
|
|
2378
|
+
function Ni() {
|
|
2326
2379
|
try {
|
|
2327
2380
|
if (u.existsSync(E))
|
|
2328
2381
|
return JSON.parse(u.readFileSync(E, "utf8"));
|
|
@@ -2330,99 +2383,82 @@ function pi() {
|
|
|
2330
2383
|
}
|
|
2331
2384
|
return {};
|
|
2332
2385
|
}
|
|
2333
|
-
function
|
|
2386
|
+
function yi(I) {
|
|
2334
2387
|
try {
|
|
2335
2388
|
const g = M.dirname(E);
|
|
2336
2389
|
u.existsSync(g) || u.mkdirSync(g, { recursive: !0 }), u.writeFileSync(E, JSON.stringify(I, null, 2));
|
|
2337
2390
|
} catch {
|
|
2338
2391
|
}
|
|
2339
2392
|
}
|
|
2340
|
-
|
|
2341
|
-
|
|
2342
|
-
|
|
2343
|
-
|
|
2344
|
-
|
|
2345
|
-
|
|
2346
|
-
|
|
2347
|
-
|
|
2348
|
-
|
|
2349
|
-
}
|
|
2350
|
-
});
|
|
2351
|
-
});
|
|
2352
|
-
e.on("error", () => i({})), e.setTimeout(g, () => {
|
|
2353
|
-
e.destroy(), i({});
|
|
2354
|
-
});
|
|
2355
|
-
});
|
|
2356
|
-
}
|
|
2357
|
-
const Ni = {
|
|
2358
|
-
user: _I,
|
|
2359
|
-
hostname: PI,
|
|
2360
|
-
ip: ei,
|
|
2361
|
-
iplocal: si,
|
|
2362
|
-
city: ti,
|
|
2363
|
-
domain: Ci,
|
|
2364
|
-
isp: ni,
|
|
2365
|
-
os: $I,
|
|
2393
|
+
const Ki = {
|
|
2394
|
+
user: gg,
|
|
2395
|
+
hostname: ig,
|
|
2396
|
+
ip: oi,
|
|
2397
|
+
iplocal: li,
|
|
2398
|
+
city: ai,
|
|
2399
|
+
domain: di,
|
|
2400
|
+
isp: Ai,
|
|
2401
|
+
os: cg,
|
|
2366
2402
|
// Mapped from os_info
|
|
2367
|
-
cpu:
|
|
2368
|
-
gpu:
|
|
2369
|
-
bench:
|
|
2370
|
-
cpu_bench_info:
|
|
2371
|
-
gpu_bench:
|
|
2372
|
-
gpu_bench_info:
|
|
2373
|
-
disk_used:
|
|
2374
|
-
disk_size:
|
|
2375
|
-
ram_used:
|
|
2376
|
-
top_process:
|
|
2377
|
-
uptime:
|
|
2378
|
-
device:
|
|
2379
|
-
kernel:
|
|
2380
|
-
shell:
|
|
2381
|
-
pacman:
|
|
2403
|
+
cpu: NI,
|
|
2404
|
+
gpu: yI,
|
|
2405
|
+
bench: xg,
|
|
2406
|
+
cpu_bench_info: _g,
|
|
2407
|
+
gpu_bench: Pg,
|
|
2408
|
+
gpu_bench_info: $g,
|
|
2409
|
+
disk_used: ii,
|
|
2410
|
+
disk_size: ei,
|
|
2411
|
+
ram_used: qg,
|
|
2412
|
+
top_process: ti,
|
|
2413
|
+
uptime: Ci,
|
|
2414
|
+
device: sg,
|
|
2415
|
+
kernel: eg,
|
|
2416
|
+
shell: Gi,
|
|
2417
|
+
pacman: Bi,
|
|
2382
2418
|
// Mapped from packages
|
|
2383
|
-
ports:
|
|
2384
|
-
containers:
|
|
2385
|
-
memory_available:
|
|
2386
|
-
swap_used:
|
|
2387
|
-
load_average:
|
|
2388
|
-
users_logged_in:
|
|
2389
|
-
network_interfaces:
|
|
2390
|
-
mount_points:
|
|
2391
|
-
services_running:
|
|
2392
|
-
temperature:
|
|
2393
|
-
battery:
|
|
2394
|
-
screen_resolution:
|
|
2419
|
+
ports: bi,
|
|
2420
|
+
containers: Wi,
|
|
2421
|
+
memory_available: Ii,
|
|
2422
|
+
swap_used: gi,
|
|
2423
|
+
load_average: ri,
|
|
2424
|
+
users_logged_in: ni,
|
|
2425
|
+
network_interfaces: hi,
|
|
2426
|
+
mount_points: si,
|
|
2427
|
+
services_running: Zi,
|
|
2428
|
+
temperature: mi,
|
|
2429
|
+
battery: ui,
|
|
2430
|
+
screen_resolution: Eg
|
|
2395
2431
|
};
|
|
2396
|
-
async function
|
|
2397
|
-
const g =
|
|
2398
|
-
c ? i.ipInfo = c : (i.ipInfo = await
|
|
2432
|
+
async function ki(I = {}) {
|
|
2433
|
+
const g = Ni(), i = { cache: g }, c = g.ipInfo?.value;
|
|
2434
|
+
c ? i.ipInfo = c : (i.ipInfo = await qI(), g.ipInfo = {
|
|
2399
2435
|
value: i.ipInfo,
|
|
2400
2436
|
timestamp: Date.now()
|
|
2401
2437
|
});
|
|
2402
2438
|
const e = {
|
|
2403
2439
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
2404
|
-
platform:
|
|
2440
|
+
platform: pi ? "windows" : Yi ? "macos" : Vi ? "linux" : "unknown"
|
|
2405
2441
|
};
|
|
2406
|
-
for (const [s, t] of Object.entries(
|
|
2442
|
+
for (const [s, t] of Object.entries(Ki))
|
|
2407
2443
|
try {
|
|
2408
2444
|
const C = await t(i);
|
|
2409
2445
|
e[s] = C;
|
|
2410
2446
|
} catch {
|
|
2411
2447
|
e[s] = "";
|
|
2412
2448
|
}
|
|
2413
|
-
return
|
|
2449
|
+
return yi(g), e;
|
|
2414
2450
|
}
|
|
2415
2451
|
export {
|
|
2416
2452
|
E as C,
|
|
2417
|
-
|
|
2453
|
+
XI as D,
|
|
2418
2454
|
O as S,
|
|
2419
|
-
|
|
2420
|
-
|
|
2421
|
-
|
|
2422
|
-
|
|
2423
|
-
|
|
2424
|
-
|
|
2425
|
-
|
|
2426
|
-
|
|
2455
|
+
Fi as a,
|
|
2456
|
+
Ji as b,
|
|
2457
|
+
vi as c,
|
|
2458
|
+
Ri as d,
|
|
2459
|
+
ki as g,
|
|
2460
|
+
Ki as i,
|
|
2461
|
+
Ni as l,
|
|
2462
|
+
yi as s
|
|
2427
2463
|
};
|
|
2428
|
-
//# sourceMappingURL=system-info-api-
|
|
2464
|
+
//# sourceMappingURL=system-info-api-ByXoHI0m.js.map
|