about-system 0.0.51 → 0.0.65

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.
@@ -1,24 +1,35 @@
1
1
  import B from "os";
2
2
  import m from "fs";
3
- import LI from "https";
3
+ import QI from "https";
4
4
  import M from "path";
5
5
  import { execSync as oI } from "child_process";
6
6
  const vI = {}, E = M.join(
7
7
  B.homedir(),
8
8
  ".config",
9
9
  "systeminfo-settings.json"
10
- ), O = M.join(B.tmpdir(), "systeminfo-cache.json"), Xg = {
10
+ ), x = M.join(B.tmpdir(), "systeminfo-cache.json"), Xe = {
11
11
  reset: "\x1B[0m",
12
- red: "\x1B[38;5;196m",
13
- orange: "\x1B[38;5;208m",
14
- yellow: "\x1B[38;5;226m",
15
- green: "\x1B[38;5;46m",
16
- blue: "\x1B[38;5;39m",
17
- cyan: "\x1B[38;5;51m",
18
- purple: "\x1B[38;5;171m",
19
- magenta: "\x1B[38;5;213m",
20
- gray: "\x1B[38;5;250m",
21
- lightblue: "\x1B[38;5;220m"
12
+ red: "\x1B[38;5;160m",
13
+ orange: "\x1B[38;5;130m",
14
+ yellow: "\x1B[38;5;58m",
15
+ green: "\x1B[38;5;22m",
16
+ blue: "\x1B[38;5;25m",
17
+ cyan: "\x1B[38;5;23m",
18
+ purple: "\x1B[38;5;91m",
19
+ magenta: "\x1B[38;5;125m",
20
+ gray: "\x1B[38;5;238m",
21
+ lightblue: "\x1B[38;5;24m"
22
+ }, He = {
23
+ red: "\x1B[48;5;88m\x1B[38;5;255m",
24
+ orange: "\x1B[48;5;166m\x1B[38;5;232m",
25
+ yellow: "\x1B[48;5;178m\x1B[38;5;232m",
26
+ green: "\x1B[48;5;22m\x1B[38;5;255m",
27
+ blue: "\x1B[48;5;18m\x1B[38;5;255m",
28
+ cyan: "\x1B[48;5;23m\x1B[38;5;255m",
29
+ purple: "\x1B[48;5;54m\x1B[38;5;255m",
30
+ magenta: "\x1B[48;5;53m\x1B[38;5;255m",
31
+ gray: "\x1B[48;5;236m\x1B[38;5;255m",
32
+ lightblue: "\x1B[48;5;26m\x1B[38;5;255m"
22
33
  }, YI = {
23
34
  display_order: [
24
35
  ["user", "hostname", "os", "device", "kernel", "cpu", "gpu", "bench"],
@@ -141,6 +152,7 @@ const vI = {}, E = M.join(
141
152
  },
142
153
  display: {
143
154
  show_emojis: !0,
155
+ show_backgrounds: !0,
144
156
  single_line: !0,
145
157
  line_wrap_length: vI?.stdout?.columns || 100
146
158
  },
@@ -151,7 +163,7 @@ const vI = {}, E = M.join(
151
163
  debug: !1
152
164
  }
153
165
  };
154
- function fg() {
166
+ function fe() {
155
167
  try {
156
168
  if (m.existsSync(E)) {
157
169
  const I = JSON.parse(m.readFileSync(E, "utf8"));
@@ -161,23 +173,23 @@ function fg() {
161
173
  }
162
174
  return YI;
163
175
  }
164
- function Hg(I) {
176
+ function Ke(I) {
165
177
  try {
166
- const e = M.dirname(E);
167
- return m.existsSync(e) || m.mkdirSync(e, { recursive: !0 }), m.writeFileSync(E, JSON.stringify(I, null, 2)), !0;
178
+ const g = M.dirname(E);
179
+ return m.existsSync(g) || m.mkdirSync(g, { recursive: !0 }), m.writeFileSync(E, JSON.stringify(I, null, 2)), !0;
168
180
  } catch {
169
181
  return !1;
170
182
  }
171
183
  }
172
- const S = B.platform() === "win32", N = B.platform() === "darwin", p = B.platform() === "linux";
173
- function Z(I, e = {}) {
184
+ const F = B.platform() === "win32", N = B.platform() === "darwin", p = B.platform() === "linux";
185
+ function Z(I, g = {}) {
174
186
  try {
175
- const g = S ? `cmd /c ${I}` : I;
176
- return oI(g, {
187
+ const e = F ? `cmd /c ${I}` : I;
188
+ return oI(e, {
177
189
  encoding: "utf8",
178
190
  timeout: 1e4,
179
191
  stdio: ["pipe", "pipe", "ignore"],
180
- ...e
192
+ ...g
181
193
  }).toString().trim();
182
194
  } catch {
183
195
  return "";
@@ -185,7 +197,7 @@ function Z(I, e = {}) {
185
197
  }
186
198
  function k(I) {
187
199
  try {
188
- return S ? oI(`where ${I}`, { stdio: "ignore" }) : oI(`which ${I}`, { stdio: "ignore" }), !0;
200
+ return F ? oI(`where ${I}`, { stdio: "ignore" }) : oI(`which ${I}`, { stdio: "ignore" }), !0;
189
201
  } catch {
190
202
  return !1;
191
203
  }
@@ -210,19 +222,19 @@ const UI = {
210
222
  network_interfaces: 300 * 1e3,
211
223
  mount_points: 600 * 1e3
212
224
  };
213
- function TI(I, e) {
225
+ function TI(I, g) {
214
226
  if (!I || !I.timestamp) return !1;
215
- const g = Date.now() - I.timestamp, c = UI[e] || 6e4;
216
- return g < c;
227
+ const e = Date.now() - I.timestamp, c = UI[g] || 6e4;
228
+ return e < c;
217
229
  }
218
- function G(I, e) {
219
- if (!I[e]) return null;
220
- const g = I[e];
221
- return TI(g, e) ? g.value : (delete I[e], null);
230
+ function G(I, g) {
231
+ if (!I[g]) return null;
232
+ const e = I[g];
233
+ return TI(e, g) ? e.value : (delete I[g], null);
222
234
  }
223
- function r(I, e, g) {
224
- I[e] = {
225
- value: g,
235
+ function r(I, g, e) {
236
+ I[g] = {
237
+ value: e,
226
238
  timestamp: Date.now()
227
239
  };
228
240
  }
@@ -232,12 +244,12 @@ function DI() {
232
244
  function EI() {
233
245
  return B.hostname();
234
246
  }
235
- function OI(I) {
236
- const e = G(I.cache, "os");
237
- if (e) return e;
238
- const g = B.platform(), c = B.release();
247
+ function xI(I) {
248
+ const g = G(I.cache, "os");
249
+ if (g) return g;
250
+ const e = B.platform(), c = B.release();
239
251
  let i = "";
240
- if (S)
252
+ if (F)
241
253
  try {
242
254
  const t = Z("ver").match(/Microsoft Windows \[Version ([^\]]+)\]/);
243
255
  i = t ? `Windows ${t[1]}` : `Windows ${c}`;
@@ -255,19 +267,19 @@ function OI(I) {
255
267
  i = `Linux ${c}`;
256
268
  }
257
269
  else
258
- i = `${g} ${c}`;
270
+ i = `${e} ${c}`;
259
271
  return r(I.cache, "os", i), i;
260
272
  }
261
- function xI(I) {
262
- const e = G(I.cache, "kernel");
263
- if (e) return e;
264
- const g = B.release();
265
- return r(I.cache, "kernel", g), g;
273
+ function OI(I) {
274
+ const g = G(I.cache, "kernel");
275
+ if (g) return g;
276
+ const e = B.release();
277
+ return r(I.cache, "kernel", e), e;
266
278
  }
267
279
  function _I(I) {
268
- const e = G(I.cache, "device");
269
- if (e !== null) return e;
270
- if (S) {
280
+ const g = G(I.cache, "device");
281
+ if (g !== null) return g;
282
+ if (F) {
271
283
  try {
272
284
  const c = Z("wmic csproduct get name /format:list").match(/Name=(.+)/);
273
285
  if (c) {
@@ -278,11 +290,11 @@ function _I(I) {
278
290
  } catch {
279
291
  }
280
292
  try {
281
- const g = Z(
293
+ const e = Z(
282
294
  'powershell.exe -Command "Get-WmiObject -Class Win32_ComputerSystem | Select-Object -ExpandProperty Model"'
283
295
  );
284
- if (g.trim()) {
285
- const c = g.trim();
296
+ if (e.trim()) {
297
+ const c = e.trim();
286
298
  return r(I.cache, "device", c), c;
287
299
  }
288
300
  } catch {
@@ -300,9 +312,9 @@ function _I(I) {
300
312
  if (c)
301
313
  return r(I.cache, "device", c), c;
302
314
  }
303
- const g = "/sys/devices/virtual/dmi/id/product_name";
304
- if (m.existsSync(g)) {
305
- const c = m.readFileSync(g, "utf8").trim();
315
+ const e = "/sys/devices/virtual/dmi/id/product_name";
316
+ if (m.existsSync(e)) {
317
+ const c = m.readFileSync(e, "utf8").trim();
306
318
  if (c)
307
319
  return r(I.cache, "device", c), c;
308
320
  }
@@ -310,15 +322,15 @@ function _I(I) {
310
322
  }
311
323
  return r(I.cache, "device", ""), "";
312
324
  }
313
- const P = "data:video/mp2t;base64,LyoqCiAqIE1lbW9yeSBhbmQgZGlzay1yZWxhdGVkIHN5c3RlbSBpbmZvcm1hdGlvbiBmdW5jdGlvbnMKICogQG1vZHVsZSBpbmZvL21lbW9yeQogKi8KCmltcG9ydCBvcyBmcm9tICJvcyI7CmltcG9ydCBmcyBmcm9tICJmcyI7CmltcG9ydCB0eXBlIHsgSW5mb0NvbnRleHQgfSBmcm9tICIuLi90eXBlcy9pbnRlcm5hbC10eXBlcyI7CmltcG9ydCB7IElTX0xJTlVYLCBJU19NQUMgfSBmcm9tICIuLi91dGlscy9wbGF0Zm9ybSI7CmltcG9ydCB7IGV4ZWNDb21tYW5kIH0gZnJvbSAiLi4vdXRpbHMvY29tbWFuZCI7CmltcG9ydCB7IGdldENhY2hlZFZhbHVlLCBzZXRDYWNoZWRWYWx1ZSB9IGZyb20gIi4uL2NhY2hlL2NhY2hlIjsKCi8qKgogKiBHZXRzIG1lbW9yeSB1c2FnZSBpbiBnaWdhYnl0ZXMKICogUmVhZHMgZnJvbSAvcHJvYy9tZW1pbmZvIG9uIExpbnV4LCBmYWxscyBiYWNrIHRvIG9zLnRvdGFsbWVtKCkKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBNZW1vcnkgdXNhZ2UgYXMgInVzZWQvdG90YWwgR0IiCiAqIEBleGFtcGxlICIxMi8zMkdCIiwgIjYvMTZHQiIKICovCmV4cG9ydCBmdW5jdGlvbiByYW1fdXNlZChjb250ZXh0OiBJbmZvQ29udGV4dCk6IHN0cmluZyB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInJhbV91c2VkIik7CiAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDsKCiAgaWYgKElTX0xJTlVYKSB7CiAgICB0cnkgewogICAgICBjb25zdCBtZW1pbmZvID0gZnMucmVhZEZpbGVTeW5jKCIvcHJvYy9tZW1pbmZvIiwgInV0ZjgiKTsKICAgICAgY29uc3QgdG90YWxNYXRjaCA9IG1lbWluZm8ubWF0Y2goL01lbVRvdGFsOlxzKyhcZCspIGtCLyk7CiAgICAgIGNvbnN0IGZyZWVNYXRjaCA9IG1lbWluZm8ubWF0Y2goL01lbUZyZWU6XHMrKFxkKykga0IvKTsKCiAgICAgIGlmICh0b3RhbE1hdGNoICYmIGZyZWVNYXRjaCkgewogICAgICAgIGNvbnN0IHRvdGFsTUIgPSBNYXRoLnJvdW5kKHBhcnNlSW50KHRvdGFsTWF0Y2hbMV0pIC8gMTAyNCk7CiAgICAgICAgY29uc3QgZnJlZU1CID0gTWF0aC5yb3VuZChwYXJzZUludChmcmVlTWF0Y2hbMV0pIC8gMTAyNCk7CiAgICAgICAgY29uc3QgdXNlZE1CID0gdG90YWxNQiAtIGZyZWVNQjsKCiAgICAgICAgY29uc3QgdG90YWxHQiA9IE1hdGgucm91bmQodG90YWxNQiAvIDEwMjQpOwogICAgICAgIGNvbnN0IHVzZWRHQiA9IE1hdGgucm91bmQodXNlZE1CIC8gMTAyNCk7CgogICAgICAgIGNvbnN0IHJlc3VsdCA9IGAke3VzZWRHQn0vJHt0b3RhbEdCfUdCYDsKICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAicmFtX3VzZWQiLCByZXN1bHQpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgIH0gY2F0Y2gge30KICB9CgogIGNvbnN0IHRvdGFsTWVtID0gb3MudG90YWxtZW0oKTsKICBjb25zdCBmcmVlTWVtID0gb3MuZnJlZW1lbSgpOwogIGNvbnN0IHVzZWRNZW0gPSB0b3RhbE1lbSAtIGZyZWVNZW07CgogIGNvbnN0IHRvdGFsR0IgPSBNYXRoLnJvdW5kKHRvdGFsTWVtIC8gKDEwMjQgKiAxMDI0ICogMTAyNCkpOwogIGNvbnN0IHVzZWRHQiA9IE1hdGgucm91bmQodXNlZE1lbSAvICgxMDI0ICogMTAyNCAqIDEwMjQpKTsKCiAgY29uc3QgcmVzdWx0ID0gYCR7dXNlZEdCfS8ke3RvdGFsR0J9R0JgOwogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJyYW1fdXNlZCIsIHJlc3VsdCk7CiAgcmV0dXJuIHJlc3VsdDsKfQoKLyoqCiAqIEdldHMgYXZhaWxhYmxlIG1lbW9yeSBpbiBnaWdhYnl0ZXMKICogUmVhZHMgTWVtQXZhaWxhYmxlIGZyb20gL3Byb2MvbWVtaW5mbyAoTGludXgpIG9yIGRlcml2ZXMgaXQgZnJvbQogKiB2bV9zdGF0J3MgZnJlZStpbmFjdGl2ZSBwYWdlcyAobWFjT1MpCiAqIEByZXR1cm5zIEF2YWlsYWJsZSBtZW1vcnkgd2l0aCAiR0IgYXZhaWxhYmxlIiBzdWZmaXggb3IgZW1wdHkgc3RyaW5nCiAqIEBleGFtcGxlICIxMkdCIGF2YWlsYWJsZSIsICI0R0IgYXZhaWxhYmxlIgogKi8KZXhwb3J0IGZ1bmN0aW9uIG1lbW9yeV9hdmFpbGFibGUoKTogc3RyaW5nIHsKICBpZiAoSVNfTElOVVgpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IG1lbWluZm8gPSBmcy5yZWFkRmlsZVN5bmMoIi9wcm9jL21lbWluZm8iLCAidXRmOCIpOwogICAgICBjb25zdCBhdmFpbGFibGVNYXRjaCA9IG1lbWluZm8ubWF0Y2goL01lbUF2YWlsYWJsZTpccysoXGQrKSBrQi8pOwogICAgICBpZiAoYXZhaWxhYmxlTWF0Y2gpIHsKICAgICAgICBjb25zdCBhdmFpbGFibGVHQiA9IE1hdGgucm91bmQocGFyc2VJbnQoYXZhaWxhYmxlTWF0Y2hbMV0pIC8gMTAyNCAvIDEwMjQpOwogICAgICAgIHJldHVybiBgJHthdmFpbGFibGVHQn1HQiBhdmFpbGFibGVgOwogICAgICB9CiAgICB9IGNhdGNoIHt9CiAgICByZXR1cm4gIiI7CiAgfQoKICBpZiAoSVNfTUFDKSB7CiAgICB0cnkgewogICAgICBjb25zdCB2bVN0YXQgPSBleGVjQ29tbWFuZCgidm1fc3RhdCIpOwogICAgICBjb25zdCBwYWdlU2l6ZU1hdGNoID0gdm1TdGF0Lm1hdGNoKC9wYWdlIHNpemUgb2YgKFxkKykgYnl0ZXMvKTsKICAgICAgY29uc3QgZnJlZU1hdGNoID0gdm1TdGF0Lm1hdGNoKC9QYWdlcyBmcmVlOlxzKyhcZCspXC4vKTsKICAgICAgY29uc3QgaW5hY3RpdmVNYXRjaCA9IHZtU3RhdC5tYXRjaCgvUGFnZXMgaW5hY3RpdmU6XHMrKFxkKylcLi8pOwoKICAgICAgaWYgKHBhZ2VTaXplTWF0Y2ggJiYgZnJlZU1hdGNoICYmIGluYWN0aXZlTWF0Y2gpIHsKICAgICAgICBjb25zdCBwYWdlU2l6ZSA9IHBhcnNlSW50KHBhZ2VTaXplTWF0Y2hbMV0pOwogICAgICAgIGNvbnN0IGF2YWlsYWJsZVBhZ2VzID0gcGFyc2VJbnQoZnJlZU1hdGNoWzFdKSArIHBhcnNlSW50KGluYWN0aXZlTWF0Y2hbMV0pOwogICAgICAgIGNvbnN0IGF2YWlsYWJsZUdCID0gTWF0aC5yb3VuZCgoYXZhaWxhYmxlUGFnZXMgKiBwYWdlU2l6ZSkgLyAoMTAyNCAqIDEwMjQgKiAxMDI0KSk7CiAgICAgICAgcmV0dXJuIGAke2F2YWlsYWJsZUdCfUdCIGF2YWlsYWJsZWA7CiAgICAgIH0KICAgIH0gY2F0Y2gge30KICAgIHJldHVybiAiIjsKICB9CgogIHJldHVybiAiIjsKfQoKLyoqCiAqIEdldHMgc3dhcCBtZW1vcnkgdXNhZ2UKICogQ2FsY3VsYXRlcyBzd2FwIHVzYWdlIGZyb20gL3Byb2MvbWVtaW5mbyAoTGludXgpIG9yIGBzeXNjdGwgdm0uc3dhcHVzYWdlYAogKiAobWFjT1MpCiAqIEByZXR1cm5zIFN3YXAgdXNhZ2UgYXMgInBlcmNlbnRhZ2UgKHNpemUgTUIpIHN3YXAiIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiMTUlICg1MTJNQikgc3dhcCIsICIwJSAoME1CKSBzd2FwIgogKi8KZXhwb3J0IGZ1bmN0aW9uIHN3YXBfdXNlZCgpOiBzdHJpbmcgewogIGlmIChJU19MSU5VWCkgewogICAgdHJ5IHsKICAgICAgY29uc3QgbWVtaW5mbyA9IGZzLnJlYWRGaWxlU3luYygiL3Byb2MvbWVtaW5mbyIsICJ1dGY4Iik7CiAgICAgIGNvbnN0IHN3YXBUb3RhbE1hdGNoID0gbWVtaW5mby5tYXRjaCgvU3dhcFRvdGFsOlxzKyhcZCspIGtCLyk7CiAgICAgIGNvbnN0IHN3YXBGcmVlTWF0Y2ggPSBtZW1pbmZvLm1hdGNoKC9Td2FwRnJlZTpccysoXGQrKSBrQi8pOwoKICAgICAgaWYgKHN3YXBUb3RhbE1hdGNoICYmIHN3YXBGcmVlTWF0Y2gpIHsKICAgICAgICBjb25zdCBzd2FwVG90YWwgPSBwYXJzZUludChzd2FwVG90YWxNYXRjaFsxXSk7CiAgICAgICAgY29uc3Qgc3dhcEZyZWUgPSBwYXJzZUludChzd2FwRnJlZU1hdGNoWzFdKTsKICAgICAgICBjb25zdCBzd2FwVXNlZCA9IHN3YXBUb3RhbCAtIHN3YXBGcmVlOwoKICAgICAgICBpZiAoc3dhcFRvdGFsID4gMCkgewogICAgICAgICAgY29uc3Qgc3dhcFVzZWRQZXJjZW50ID0gTWF0aC5yb3VuZCgoc3dhcFVzZWQgLyBzd2FwVG90YWwpICogMTAwKTsKICAgICAgICAgIGNvbnN0IHN3YXBVc2VkTUIgPSBNYXRoLnJvdW5kKHN3YXBVc2VkIC8gMTAyNCk7CiAgICAgICAgICByZXR1cm4gYCR7c3dhcFVzZWRQZXJjZW50fSUgKCR7c3dhcFVzZWRNQn1NQikgc3dhcGA7CiAgICAgICAgfQogICAgICB9CiAgICB9IGNhdGNoIHt9CiAgICByZXR1cm4gIiI7CiAgfQoKICBpZiAoSVNfTUFDKSB7CiAgICB0cnkgewogICAgICBjb25zdCBzd2FwdXNhZ2UgPSBleGVjQ29tbWFuZCgic3lzY3RsIC1uIHZtLnN3YXB1c2FnZSIpOwogICAgICBjb25zdCBtYXRjaCA9IHN3YXB1c2FnZS5tYXRjaCgKICAgICAgICAvdG90YWxccyo9XHMqKFtcZC5dKylNXHMrdXNlZFxzKj1ccyooW1xkLl0rKU1ccytmcmVlXHMqPVxzKihbXGQuXSspTS8KICAgICAgKTsKCiAgICAgIGlmIChtYXRjaCkgewogICAgICAgIGNvbnN0IHN3YXBUb3RhbCA9IHBhcnNlRmxvYXQobWF0Y2hbMV0pOwogICAgICAgIGNvbnN0IHN3YXBVc2VkTUIgPSBwYXJzZUZsb2F0KG1hdGNoWzJdKTsKCiAgICAgICAgaWYgKHN3YXBUb3RhbCA+IDApIHsKICAgICAgICAgIGNvbnN0IHN3YXBVc2VkUGVyY2VudCA9IE1hdGgucm91bmQoKHN3YXBVc2VkTUIgLyBzd2FwVG90YWwpICogMTAwKTsKICAgICAgICAgIHJldHVybiBgJHtzd2FwVXNlZFBlcmNlbnR9JSAoJHtNYXRoLnJvdW5kKHN3YXBVc2VkTUIpfU1CKSBzd2FwYDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAiMCUgKDBNQikgc3dhcCI7CiAgICAgIH0KICAgIH0gY2F0Y2gge30KICAgIHJldHVybiAiIjsKICB9CgogIHJldHVybiAiIjsKfQoKLyoqCiAqIEdldHMgcm9vdCBmaWxlc3lzdGVtIGRpc2sgdXNhZ2UgcGVyY2VudGFnZQogKiBVc2VzIGRmIGNvbW1hbmQgb24gTGludXgvQW5kcm9pZC9tYWNPUwogKiBAcGFyYW0gY29udGV4dCAtIEluZm8gY29udGV4dCB3aXRoIGNhY2hlCiAqIEByZXR1cm5zIFBlcmNlbnRhZ2Ugc3RyaW5nIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiNDUlIiwgIjc4JSIKICovCmV4cG9ydCBmdW5jdGlvbiBkaXNrX3VzZWQoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJkaXNrX3VzZWQiKTsKICBpZiAoY2FjaGVkICE9PSBudWxsKSByZXR1cm4gY2FjaGVkOwoKICBpZiAoSVNfTElOVVggfHwgSVNfTUFDKSB7CiAgICB0cnkgewogICAgICBjb25zdCBkZiA9IGV4ZWNDb21tYW5kKCJkZiAtaCIpOwogICAgICBsZXQgZGlza1VzYWdlID0gIiI7CgogICAgICBpZiAoZGYuaW5jbHVkZXMoIi9zdG9yYWdlL2VtdWxhdGVkIikpIHsKICAgICAgICBjb25zdCBtYXRjaCA9IGRmLm1hdGNoKC9ccysoXGQrJSlccytcL3N0b3JhZ2VcL2VtdWxhdGVkLyk7CiAgICAgICAgZGlza1VzYWdlID0gbWF0Y2ggPyBtYXRjaFsxXSA6ICIiOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IGxpbmVzID0gZGYuc3BsaXQoIlxuIik7CiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7CiAgICAgICAgICBpZiAobGluZS50cmltKCkuZW5kc1dpdGgoIiAvIikpIHsKICAgICAgICAgICAgY29uc3QgcGFydHMgPSBsaW5lLnRyaW0oKS5zcGxpdCgvXHMrLyk7CiAgICAgICAgICAgIGNvbnN0IHBlcmNlbnRJbmRleCA9IHBhcnRzLmZpbmRJbmRleCgocGFydCkgPT4gcGFydC5pbmNsdWRlcygiJSIpKTsKICAgICAgICAgICAgaWYgKHBlcmNlbnRJbmRleCAhPT0gLTEpIHsKICAgICAgICAgICAgICBkaXNrVXNhZ2UgPSBwYXJ0c1twZXJjZW50SW5kZXhdOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIWRpc2tVc2FnZSkgewogICAgICAgICAgY29uc3Qgcm9vdE1hdGNoID0gZGYubWF0Y2goLyhcZCslKVxzK1wvXHMqJC9tKTsKICAgICAgICAgIGRpc2tVc2FnZSA9IHJvb3RNYXRjaCA/IHJvb3RNYXRjaFsxXSA6ICIiOwogICAgICAgIH0KICAgICAgfQoKICAgICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImRpc2tfdXNlZCIsIGRpc2tVc2FnZSk7CiAgICAgIHJldHVybiBkaXNrVXNhZ2U7CiAgICB9IGNhdGNoIHt9CiAgfQoKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGlza191c2VkIiwgIiIpOwogIHJldHVybiAiIjsKfQoKLyoqCiAqIE1pbmltdW0gdG90YWwgc2l6ZSAoaW4gS0IpIGZvciBhIHBhcnRpdGlvbiB0byBiZSBjb25zaWRlcmVkIGEgcmVhbCBkaXNrCiAqIHJhdGhlciB0aGFuIGEgc21hbGwgc3lzdGVtL2Jvb3QgcGFydGl0aW9uCiAqLwpjb25zdCBNSU5fUkVBTF9ESVNLX0tCID0gMTAgKiAxMDI0ICogMTAyNDsgLy8gMTBHQgoKLyoqCiAqIEdldHMgZGlzayBzaXplICh1c2VkL3RvdGFsKSBmb3IgZWFjaCByZWFsIGRpc2sKICogVXNlcyBgZGYgLWtgIG9uIExpbnV4L21hY09TLCBmaWx0ZXJpbmcgb3V0IHBzZXVkbyBmaWxlc3lzdGVtcywgc3lzdGVtL2Jvb3QKICogcGFydGl0aW9ucyAoZS5nLiAvYm9vdCwgL1N5c3RlbS9Wb2x1bWVzLyopLCBhbmQgYW55dGhpbmcgdW5kZXIgMTBHQiwgc2luY2UKICogdGhvc2UgYXJlbid0IGRpc2tzIGEgdXNlciB3b3VsZCBjYXJlIGFib3V0LiBXaGVuIGV4YWN0bHkgb25lIHJlYWwgZGlzayBpcwogKiBmb3VuZCAodGhlIGNvbW1vbiBjYXNlKSB0aGUgcmVzdWx0IG9taXRzIHRoZSBtb3VudCBwb2ludDsgd2hlbiBtdWx0aXBsZQogKiByZWFsIGRpc2tzIGFyZSBmb3VuZCAoZS5nLiBhIGRhdGEgZHJpdmUgb3IgZXh0ZXJuYWwgdm9sdW1lKSwgZWFjaCBpcwogKiBsYWJlbGVkIGJ5IGl0cyBtb3VudCBwb2ludC4KICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBEaXNrIHNpemUgYXMgInVzZWQvdG90YWwgR0IiIG9yICJtb3VudCh1c2VkL3RvdGFsIEdCKSAuLi4iIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiMjU2LzUxMkdCIiwgIi8oMTAwLzUwMEdCKSAvVm9sdW1lcy9CYWNrdXAoOTAwLzIwMDBHQikiCiAqLwpleHBvcnQgZnVuY3Rpb24gZGlza19zaXplKGNvbnRleHQ6IEluZm9Db250ZXh0KTogc3RyaW5nIHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGlza19zaXplIik7CiAgaWYgKGNhY2hlZCAhPT0gbnVsbCkgcmV0dXJuIGNhY2hlZDsKCiAgaWYgKCFJU19MSU5VWCAmJiAhSVNfTUFDKSB7CiAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGlza19zaXplIiwgIiIpOwogICAgcmV0dXJuICIiOwogIH0KCiAgdHJ5IHsKICAgIGNvbnN0IGRmID0gZXhlY0NvbW1hbmQoImRmIC1rIik7CiAgICBjb25zdCBsaW5lcyA9IGRmLnRyaW0oKS5zcGxpdCgiXG4iKS5zbGljZSgxKTsKICAgIGNvbnN0IGRpc2tzOiB7IG1vdW50OiBzdHJpbmc7IHVzZWRHQjogbnVtYmVyOyB0b3RhbEdCOiBudW1iZXIgfVtdID0gW107CgogICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7CiAgICAgIGNvbnN0IHBhcnRzID0gbGluZS50cmltKCkuc3BsaXQoL1xzKy8pOwogICAgICBpZiAocGFydHMubGVuZ3RoIDwgNikgY29udGludWU7CgogICAgICBjb25zdCBmaWxlc3lzdGVtID0gcGFydHNbMF07CiAgICAgIGNvbnN0IHRvdGFsS0IgPSBwYXJzZUludChwYXJ0c1sxXSk7CiAgICAgIGNvbnN0IHVzZWRLQiA9IHBhcnNlSW50KHBhcnRzWzJdKTsKICAgICAgY29uc3QgbW91bnQgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTsKCiAgICAgIGlmIChpc05hTih0b3RhbEtCKSB8fCBpc05hTih1c2VkS0IpIHx8IHRvdGFsS0IgPCBNSU5fUkVBTF9ESVNLX0tCKSBjb250aW51ZTsKCiAgICAgIGlmIChJU19NQUMpIHsKICAgICAgICAvLyBPbmx5IHRoZSBib290IGRpc2sgKCIvIikgYW5kIGV4dGVybmFsbHkgbW91bnRlZCByZWFsIGRpc2tzIGNvdW50LgogICAgICAgIC8vIEFQRlMgaW50ZXJuYWwgc3lzdGVtIHZvbHVtZXMgKERhdGEsIFZNLCBQcmVib290LCBVcGRhdGUsIC4uLikgYWxsCiAgICAgICAgLy8gbGl2ZSB1bmRlciAvU3lzdGVtL1ZvbHVtZXMgYW5kIGFyZW4ndCBzZXBhcmF0ZSBwaHlzaWNhbCBkaXNrcy4KICAgICAgICBpZiAobW91bnQgIT09ICIvIiAmJiAhbW91bnQuc3RhcnRzV2l0aCgiL1ZvbHVtZXMvIikpIGNvbnRpbnVlOwogICAgICB9IGVsc2UgewogICAgICAgIGlmICgKICAgICAgICAgIGZpbGVzeXN0ZW0uc3RhcnRzV2l0aCgiZGV2dG1wZnMiKSB8fAogICAgICAgICAgZmlsZXN5c3RlbS5zdGFydHNXaXRoKCJ0bXBmcyIpIHx8CiAgICAgICAgICBmaWxlc3lzdGVtID09PSAib3ZlcmxheSIgfHwKICAgICAgICAgIG1vdW50LnN0YXJ0c1dpdGgoIi9ib290IikgfHwKICAgICAgICAgIG1vdW50LnN0YXJ0c1dpdGgoIi9kZXYiKSB8fAogICAgICAgICAgbW91bnQuc3RhcnRzV2l0aCgiL3Byb2MiKSB8fAogICAgICAgICAgbW91bnQuc3RhcnRzV2l0aCgiL3N5cyIpIHx8CiAgICAgICAgICBtb3VudC5zdGFydHNXaXRoKCIvcnVuIikKICAgICAgICApIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgfQoKICAgICAgZGlza3MucHVzaCh7CiAgICAgICAgbW91bnQsCiAgICAgICAgdXNlZEdCOiBNYXRoLnJvdW5kKHVzZWRLQiAvICgxMDI0ICogMTAyNCkpLAogICAgICAgIHRvdGFsR0I6IE1hdGgucm91bmQodG90YWxLQiAvICgxMDI0ICogMTAyNCkpLAogICAgICB9KTsKICAgIH0KCiAgICBsZXQgcmVzdWx0ID0gIiI7CiAgICBpZiAoZGlza3MubGVuZ3RoID09PSAxKSB7CiAgICAgIHJlc3VsdCA9IGAke2Rpc2tzWzBdLnVzZWRHQn0vJHtkaXNrc1swXS50b3RhbEdCfUdCYDsKICAgIH0gZWxzZSBpZiAoZGlza3MubGVuZ3RoID4gMSkgewogICAgICByZXN1bHQgPSBkaXNrcwogICAgICAgIC5tYXAoKGQpID0+IGAke2QubW91bnR9KCR7ZC51c2VkR0J9LyR7ZC50b3RhbEdCfUdCKWApCiAgICAgICAgLmpvaW4oIiAiKTsKICAgIH0KCiAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGlza19zaXplIiwgcmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfSBjYXRjaCB7fQoKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGlza19zaXplIiwgIiIpOwogIHJldHVybiAiIjsKfQoKLyoqCiAqIEdldHMgbW91bnRlZCBmaWxlc3lzdGVtIGluZm9ybWF0aW9uCiAqIExpc3RzIG5vbi1zeXN0ZW0gbW91bnQgcG9pbnRzIHdpdGggdXNhZ2UgZnJvbSBkZiAoTGludXgvbWFjT1MpCiAqIE9uIExpbnV4LCBleGNsdWRlcyAvLCAvZGV2LCAvcHJvYywgL3N5cyBhbmQgaW50ZXJuYWwgL1N5c3RlbS9Wb2x1bWVzIG1vdW50cy4KICogT24gbWFjT1MsIEFQRlMgaW50ZXJuYWwgdm9sdW1lcyAoRGF0YSwgVk0sIFByZWJvb3QsIFVwZGF0ZSwgLi4uKSBhbGwgbGl2ZQogKiB1bmRlciAvU3lzdGVtL1ZvbHVtZXMgYW5kIGFyZSBub3QgdXNlci1yZWxldmFudCwgc28gb25seSAvVm9sdW1lcyAoZXh0ZXJuYWwKICogZGlza3MsIG5ldHdvcmsgc2hhcmVzLCBkaXNrIGltYWdlcykgYXJlIHJlcG9ydGVkLgogKiBAcGFyYW0gY29udGV4dCAtIEluZm8gY29udGV4dCB3aXRoIGNhY2hlCiAqIEByZXR1cm5zIFNwYWNlLXNlcGFyYXRlZCBtb3VudCBwb2ludHMgd2l0aCB1c2FnZSBvciBlbXB0eSBzdHJpbmcKICogQGV4YW1wbGUgIi9ob21lKDQ1JSkgL21udC9kYXRhKDc4JSkiLCAiL1ZvbHVtZXMvQmFja3VwKDc4JSkiCiAqLwpleHBvcnQgZnVuY3Rpb24gbW91bnRfcG9pbnRzKGNvbnRleHQ6IEluZm9Db250ZXh0KTogc3RyaW5nIHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAibW91bnRfcG9pbnRzIik7CiAgaWYgKGNhY2hlZCAhPT0gbnVsbCkgcmV0dXJuIGNhY2hlZDsKCiAgaWYgKCFJU19MSU5VWCAmJiAhSVNfTUFDKSB7CiAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAibW91bnRfcG9pbnRzIiwgIiIpOwogICAgcmV0dXJuICIiOwogIH0KCiAgdHJ5IHsKICAgIGNvbnN0IGRmID0gZXhlY0NvbW1hbmQoImRmIC1oIik7CiAgICBjb25zdCBsaW5lcyA9IGRmLnNwbGl0KCJcbiIpLnNsaWNlKDEpOwogICAgY29uc3QgbW91bnRQb2ludHM6IHN0cmluZ1tdID0gW107CgogICAgbGluZXMuZm9yRWFjaCgobGluZSkgPT4gewogICAgICBjb25zdCBwYXJ0cyA9IGxpbmUudHJpbSgpLnNwbGl0KC9ccysvKTsKICAgICAgaWYgKHBhcnRzLmxlbmd0aCA8IDIpIHJldHVybjsKCiAgICAgIGNvbnN0IG1vdW50UG9pbnQgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTsKICAgICAgY29uc3QgdXNhZ2UgPSBwYXJ0cy5maW5kKChwYXJ0KSA9PiAvXlxkKyUkLy50ZXN0KHBhcnQpKSB8fCAiIjsKCiAgICAgIGlmICghdXNhZ2UpIHJldHVybjsKCiAgICAgIGlmIChJU19NQUMpIHsKICAgICAgICAvLyBTa2lwIHRoZSAiTWFjaW50b3NoIEhEIiBzZWxmLXN5bWxpbmsgYW5kIGFueSBvdGhlciBzeW1saW5rIGJhY2sgdG8gLwogICAgICAgIGlmIChtb3VudFBvaW50LnN0YXJ0c1dpdGgoIi9Wb2x1bWVzLyIpICYmIG1vdW50UG9pbnQgIT09ICIvIikgewogICAgICAgICAgbW91bnRQb2ludHMucHVzaChgJHttb3VudFBvaW50fSgke3VzYWdlfSlgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBpZiAoCiAgICAgICAgIW1vdW50UG9pbnQuc3RhcnRzV2l0aCgiL2RldiIpICYmCiAgICAgICAgIW1vdW50UG9pbnQuc3RhcnRzV2l0aCgiL3Byb2MiKSAmJgogICAgICAgICFtb3VudFBvaW50LnN0YXJ0c1dpdGgoIi9zeXMiKSAmJgogICAgICAgICFtb3VudFBvaW50LnN0YXJ0c1dpdGgoIi9TeXN0ZW0vVm9sdW1lcyIpICYmCiAgICAgICAgbW91bnRQb2ludCAhPT0gIi8iCiAgICAgICkgewogICAgICAgIG1vdW50UG9pbnRzLnB1c2goYCR7bW91bnRQb2ludH0oJHt1c2FnZX0pYCk7CiAgICAgIH0KICAgIH0pOwoKICAgIGNvbnN0IHJlc3VsdCA9IG1vdW50UG9pbnRzLnNsaWNlKDAsIDMpLmpvaW4oIiAiKTsKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJtb3VudF9wb2ludHMiLCByZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9IGNhdGNoIHt9CgogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJtb3VudF9wb2ludHMiLCAiIik7CiAgcmV0dXJuICIiOwp9Cg==", $ = "data:video/mp2t;base64,LyoqCiAqIE5ldHdvcmstcmVsYXRlZCBzeXN0ZW0gaW5mb3JtYXRpb24gZnVuY3Rpb25zCiAqIEBtb2R1bGUgaW5mby9uZXR3b3JrCiAqLwoKaW1wb3J0IG9zIGZyb20gIm9zIjsKaW1wb3J0IHR5cGUgeyBJbmZvQ29udGV4dCB9IGZyb20gIi4uL3R5cGVzL2ludGVybmFsLXR5cGVzIjsKaW1wb3J0IHsgSVNfTElOVVgsIElTX01BQyB9IGZyb20gIi4uL3V0aWxzL3BsYXRmb3JtIjsKaW1wb3J0IHsgZXhlY0NvbW1hbmQgfSBmcm9tICIuLi91dGlscy9jb21tYW5kIjsKaW1wb3J0IHsgZ2V0Q2FjaGVkVmFsdWUsIHNldENhY2hlZFZhbHVlIH0gZnJvbSAiLi4vY2FjaGUvY2FjaGUiOwoKLyoqCiAqIEdldHMgcHVibGljIElQIGFkZHJlc3MgZnJvbSBpcGluZm8uaW8KICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZSBhbmQgSVAgaW5mbwogKiBAcmV0dXJucyBQdWJsaWMgSVB2NCBhZGRyZXNzIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiMjAzLjAuMTEzLjQyIgogKi8KZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlwKGNvbnRleHQ6IEluZm9Db250ZXh0KTogUHJvbWlzZTxzdHJpbmc+IHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiaXAiKTsKICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkOwoKICBpZiAoIWNvbnRleHQuaXBJbmZvKSB7CiAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiaXAiLCAiIik7CiAgICByZXR1cm4gIiI7CiAgfQogIGNvbnN0IGlwID0gY29udGV4dC5pcEluZm8uaXAgfHwgIiI7CiAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImlwIiwgaXApOwogIHJldHVybiBpcDsKfQoKLyoqCiAqIEdldHMgbG9jYWwvcHJpdmF0ZSBJUCBhZGRyZXNzKGVzKQogKiBUcmllcyBpZmNvbmZpZyBhbmQgaXAgY29tbWFuZHMgb24gTGludXgsIGZhbGxzIGJhY2sgdG8gTm9kZS5qcyBBUEkKICogQHJldHVybnMgU3BhY2Utc2VwYXJhdGVkIGxvY2FsIElQIGFkZHJlc3NlcyAoUkZDIDE5MTggcmFuZ2VzKQogKiBAZXhhbXBsZSAiMTkyLjE2OC4xLjEwMCIgb3IgIjEwLjAuMC41MCAxOTIuMTY4LjEuMTAwIgogKi8KZXhwb3J0IGZ1bmN0aW9uIGlwbG9jYWwoKTogc3RyaW5nIHsKICBpZiAoSVNfTElOVVgpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IGlmY29uZmlnID0gZXhlY0NvbW1hbmQoImlmY29uZmlnIDI+L2Rldi9udWxsIik7CiAgICAgIGNvbnN0IHdsYW5NYXRjaCA9IGlmY29uZmlnLm1hdGNoKAogICAgICAgIC93bGFuMFtcc1xTXSo/aW5ldCAoXGQrXC5cZCtcLlxkK1wuXGQrKS8KICAgICAgKTsKICAgICAgaWYgKHdsYW5NYXRjaCkgewogICAgICAgIHJldHVybiB3bGFuTWF0Y2hbMV07CiAgICAgIH0KICAgIH0gY2F0Y2gge30KCiAgICB0cnkgewogICAgICBjb25zdCBpcEFkZHIgPSBleGVjQ29tbWFuZCgiaXAgYWRkciBzaG93IDI+L2Rldi9udWxsIik7CiAgICAgIGNvbnN0IGFkZHJlc3Nlczogc3RyaW5nW10gPSBbXTsKICAgICAgY29uc3QgbWF0Y2hlcyA9IGlwQWRkci5tYXRjaEFsbCgvaW5ldCAoXGQrXC5cZCtcLlxkK1wuXGQrKVwvXGQrL2cpOwogICAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIG1hdGNoZXMpIHsKICAgICAgICBpZiAoIW1hdGNoWzFdLnN0YXJ0c1dpdGgoIjEyNy4iKSkgewogICAgICAgICAgYWRkcmVzc2VzLnB1c2gobWF0Y2hbMV0pOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoYWRkcmVzc2VzLmxlbmd0aCA+IDApIHsKICAgICAgICByZXR1cm4gYWRkcmVzc2VzLmpvaW4oIiAiKTsKICAgICAgfQogICAgfSBjYXRjaCB7fQogIH0KCiAgY29uc3QgaW50ZXJmYWNlcyA9IG9zLm5ldHdvcmtJbnRlcmZhY2VzKCk7CiAgY29uc3QgYWRkcmVzc2VzOiBzdHJpbmdbXSA9IFtdOwoKICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMoaW50ZXJmYWNlcykpIHsKICAgIGZvciAoY29uc3QgZGV2aWNlIG9mIGludGVyZmFjZXNbbmFtZV0gfHwgW10pIHsKICAgICAgaWYgKGRldmljZS5mYW1pbHkgPT09ICJJUHY0IiAmJiAhZGV2aWNlLmludGVybmFsKSB7CiAgICAgICAgYWRkcmVzc2VzLnB1c2goZGV2aWNlLmFkZHJlc3MpOwogICAgICB9CiAgICB9CiAgfQoKICByZXR1cm4gYWRkcmVzc2VzLmpvaW4oIiAiKTsKfQoKLyoqCiAqIEdldHMgZ2VvZ3JhcGhpYyBjaXR5IGJhc2VkIG9uIHB1YmxpYyBJUAogKiBAcGFyYW0gY29udGV4dCAtIEluZm8gY29udGV4dCB3aXRoIElQIGdlb2xvY2F0aW9uIGRhdGEKICogQHJldHVybnMgQ2l0eSBuYW1lIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiU2FuIEZyYW5jaXNjbyIsICJOZXcgWW9yayIsICJMb25kb24iCiAqLwpleHBvcnQgYXN5bmMgZnVuY3Rpb24gY2l0eShjb250ZXh0OiBJbmZvQ29udGV4dCk6IFByb21pc2U8c3RyaW5nPiB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImNpdHkiKTsKICBpZiAoY2FjaGVkICE9PSBudWxsKSByZXR1cm4gY2FjaGVkOwoKICBpZiAoIWNvbnRleHQuaXBJbmZvIHx8ICFjb250ZXh0LmlwSW5mby5jaXR5KSB7CiAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiY2l0eSIsICIiKTsKICAgIHJldHVybiAiIjsKICB9CiAgY29uc3QgY2l0eSA9IGNvbnRleHQuaXBJbmZvLmNpdHk7CiAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImNpdHkiLCBjaXR5KTsKICByZXR1cm4gY2l0eTsKfQoKLyoqCiAqIEdldHMgcmV2ZXJzZSBETlMgaG9zdG5hbWUgd2l0aCBIVFRQIHByZWZpeAogKiBAcGFyYW0gY29udGV4dCAtIEluZm8gY29udGV4dCB3aXRoIElQIGluZm8KICogQHJldHVybnMgRG9tYWluIHdpdGggaHR0cDovLyBwcmVmaXggb3IgZW1wdHkgc3RyaW5nCiAqIEBleGFtcGxlICJodHRwOi8vZXhhbXBsZS5jb20iLCAiaHR0cDovL2hvc3QtMjAzLTAtMTEzLTQyLmV4YW1wbGUubmV0IgogKi8KZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvbWFpbihjb250ZXh0OiBJbmZvQ29udGV4dCk6IFByb21pc2U8c3RyaW5nPiB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImRvbWFpbiIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmICghY29udGV4dC5pcEluZm8gfHwgIWNvbnRleHQuaXBJbmZvLmhvc3RuYW1lKSB7CiAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZG9tYWluIiwgIiIpOwogICAgcmV0dXJuICIiOwogIH0KICBjb25zdCBkb21haW4gPSBgaHR0cDovLyR7Y29udGV4dC5pcEluZm8uaG9zdG5hbWV9YDsKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZG9tYWluIiwgZG9tYWluKTsKICByZXR1cm4gZG9tYWluOwp9CgovKioKICogR2V0cyBJbnRlcm5ldCBTZXJ2aWNlIFByb3ZpZGVyIG5hbWUKICogU3RyaXBzIEFTIG51bWJlciBwcmVmaXggZnJvbSBvcmdhbml6YXRpb24gc3RyaW5nCiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggSVAgaW5mbwogKiBAcmV0dXJucyBJU1AgbmFtZSBvciBlbXB0eSBzdHJpbmcKICogQGV4YW1wbGUgIkNvbWNhc3QgQ2FibGUiLCAiVmVyaXpvbiBCdXNpbmVzcyIsICJDbG91ZGZsYXJlIEluYyIKICovCmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc3AoY29udGV4dDogSW5mb0NvbnRleHQpOiBQcm9taXNlPHN0cmluZz4gewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJpc3AiKTsKICBpZiAoY2FjaGVkICE9PSBudWxsKSByZXR1cm4gY2FjaGVkOwoKICBpZiAoIWNvbnRleHQuaXBJbmZvIHx8ICFjb250ZXh0LmlwSW5mby5vcmcpIHsKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJpc3AiLCAiIik7CiAgICByZXR1cm4gIiI7CiAgfQogIGNvbnN0IGlzcCA9IGNvbnRleHQuaXBJbmZvLm9yZy5zcGxpdCgiICIpLnNsaWNlKDEpLmpvaW4oIiAiKTsKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiaXNwIiwgaXNwKTsKICByZXR1cm4gaXNwOwp9CgovKioKICogR2V0cyBhY3RpdmUgbmV0d29yayBpbnRlcmZhY2UgbmFtZXMKICogTGlzdHMgbm9uLWxvb3BiYWNrIGludGVyZmFjZXMgd2l0aCBJUHY0IGFkZHJlc3NlcyAoTGludXgvbWFjT1Mgb25seSkKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBTcGFjZS1zZXBhcmF0ZWQgaW50ZXJmYWNlIG5hbWVzIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiZXRoMCB3bGFuMCIsICJlbjAgZW4xIgogKi8KZXhwb3J0IGZ1bmN0aW9uIG5ldHdvcmtfaW50ZXJmYWNlcyhjb250ZXh0OiBJbmZvQ29udGV4dCk6IHN0cmluZyB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgIm5ldHdvcmtfaW50ZXJmYWNlcyIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmICghSVNfTElOVVggJiYgIUlTX01BQykgewogICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgIm5ldHdvcmtfaW50ZXJmYWNlcyIsICIiKTsKICAgIHJldHVybiAiIjsKICB9CgogIHRyeSB7CiAgICBjb25zdCBpbnRlcmZhY2VzID0gb3MubmV0d29ya0ludGVyZmFjZXMoKTsKICAgIGNvbnN0IGFjdGl2ZUludGVyZmFjZXM6IHN0cmluZ1tdID0gW107CgogICAgZm9yIChjb25zdCBbbmFtZSwgYWRkcnNdIG9mIE9iamVjdC5lbnRyaWVzKGludGVyZmFjZXMpKSB7CiAgICAgIGlmIChuYW1lICE9PSAibG8iKSB7CiAgICAgICAgY29uc3QgaXB2NEFkZHIgPSBhZGRycz8uZmluZCgKICAgICAgICAgIChhZGRyKSA9PiBhZGRyLmZhbWlseSA9PT0gIklQdjQiICYmICFhZGRyLmludGVybmFsCiAgICAgICAgKTsKICAgICAgICBpZiAoaXB2NEFkZHIpIHsKICAgICAgICAgIGFjdGl2ZUludGVyZmFjZXMucHVzaChuYW1lKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBjb25zdCByZXN1bHQgPSBhY3RpdmVJbnRlcmZhY2VzLmpvaW4oIiAiKTsKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJuZXR3b3JrX2ludGVyZmFjZXMiLCByZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9IGNhdGNoIHt9CgogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJuZXR3b3JrX2ludGVyZmFjZXMiLCAiIik7CiAgcmV0dXJuICIiOwp9Ci8qKgogKiBHZXRzIG9wZW4gVENQIHBvcnRzIHdpdGggc2VydmljZSBuYW1lcwogKiBVc2VzIGxzb2YgdG8gZmluZCBsaXN0ZW5pbmcgVENQIHBvcnRzIChMaW51eC9tYWNPUyBvbmx5KQogKiBAcGFyYW0gY29udGV4dCAtIEluZm8gY29udGV4dCB3aXRoIGNhY2hlCiAqIEByZXR1cm5zIFNwYWNlLXNlcGFyYXRlZCBwb3J0K3Byb2Nlc3MgcGFpcnMgb3IgZW1wdHkgc3RyaW5nCiAqIEBleGFtcGxlICI4MGh0dHAgNDQzaHR0cCAyMnNzaCIsICIzMDAwbm9kZSA1NDMycG9zdCIKICovCmV4cG9ydCBmdW5jdGlvbiBwb3J0cyhjb250ZXh0OiBJbmZvQ29udGV4dCk6IHN0cmluZyB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInBvcnRzIik7CiAgaWYgKGNhY2hlZCAhPT0gbnVsbCkgcmV0dXJuIGNhY2hlZDsKCiAgaWYgKElTX0xJTlVYIHx8IElTX01BQykgewogICAgdHJ5IHsKICAgICAgY29uc3QgbHNvZiA9IGV4ZWNDb21tYW5kKCJsc29mIC1uUCAtaVRDUCAtc1RDUDpMSVNURU4iKTsKICAgICAgY29uc3QgbGluZXMgPSBsc29mLnNwbGl0KCJcbiIpLnNsaWNlKDEpOwogICAgICBjb25zdCBwb3J0cyA9IG5ldyBTZXQ8c3RyaW5nPigpOwoKICAgICAgbGluZXMuZm9yRWFjaCgobGluZSkgPT4gewogICAgICAgIGNvbnN0IHBhcnRzID0gbGluZS5zcGxpdCgvXHMrLyk7CiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+PSA5KSB7CiAgICAgICAgICBjb25zdCBhZGRyZXNzID0gcGFydHNbOF07CiAgICAgICAgICBjb25zdCBwb3J0TWF0Y2ggPSBhZGRyZXNzLm1hdGNoKC86KFxkKykkLyk7CiAgICAgICAgICBpZiAocG9ydE1hdGNoKSB7CiAgICAgICAgICAgIGNvbnN0IHBvcnQgPSBwb3J0TWF0Y2hbMV07CiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3MgPSBwYXJ0c1swXS5zdWJzdHJpbmcoMCwgNCk7CiAgICAgICAgICAgIHBvcnRzLmFkZChgJHtwb3J0fSR7cHJvY2Vzc31gKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwoKICAgICAgY29uc3QgcmVzdWx0ID0gQXJyYXkuZnJvbShwb3J0cykuam9pbigiICIpOwogICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAicG9ydHMiLCByZXN1bHQpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfSBjYXRjaCB7fQogIH0KCiAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInBvcnRzIiwgIiIpOwogIHJldHVybiAiIjsKfQo=", q = "data:video/mp2t;base64,LyoqCiAqIFBsYXRmb3JtLXJlbGF0ZWQgc3lzdGVtIGluZm9ybWF0aW9uIGZ1bmN0aW9ucwogKiBAbW9kdWxlIGluZm8vcGxhdGZvcm0KICovCgppbXBvcnQgb3MgZnJvbSAib3MiOwppbXBvcnQgZnMgZnJvbSAiZnMiOwppbXBvcnQgdHlwZSB7IEluZm9Db250ZXh0IH0gZnJvbSAiLi4vdHlwZXMvaW50ZXJuYWwtdHlwZXMiOwppbXBvcnQgeyBJU19XSU5ET1dTLCBJU19NQUMsIElTX0xJTlVYIH0gZnJvbSAiLi4vdXRpbHMvcGxhdGZvcm0iOwppbXBvcnQgeyBleGVjQ29tbWFuZCwgY29tbWFuZEV4aXN0cyB9IGZyb20gIi4uL3V0aWxzL2NvbW1hbmQiOwppbXBvcnQgeyBnZXRDYWNoZWRWYWx1ZSwgc2V0Q2FjaGVkVmFsdWUgfSBmcm9tICIuLi9jYWNoZS9jYWNoZSI7CgovKioKICogR2V0cyB0aGUgY3VycmVudCB1c2VybmFtZQogKiBAcmV0dXJucyBDdXJyZW50IHN5c3RlbSB1c2VybmFtZQogKi8KZXhwb3J0IGZ1bmN0aW9uIHVzZXIoKTogc3RyaW5nIHsKICByZXR1cm4gb3MudXNlckluZm8oKS51c2VybmFtZTsKfQoKLyoqCiAqIEdldHMgdGhlIHN5c3RlbSBob3N0bmFtZQogKiBAcmV0dXJucyBDb21wdXRlciBob3N0bmFtZS9uZXR3b3JrIG5hbWUKICovCmV4cG9ydCBmdW5jdGlvbiBob3N0bmFtZSgpOiBzdHJpbmcgewogIHJldHVybiBvcy5ob3N0bmFtZSgpOwp9CgovKioKICogR2V0cyBvcGVyYXRpbmcgc3lzdGVtIG5hbWUgYW5kIHZlcnNpb24KICogUGxhdGZvcm0tc3BlY2lmaWMgZGV0ZWN0aW9uIGZvciBXaW5kb3dzLCBtYWNPUywgYW5kIExpbnV4CiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgT1MgbmFtZSBhbmQgdmVyc2lvbiBzdHJpbmcKICogQGV4YW1wbGUgIldpbmRvd3MgMTEgUHJvIiwgIm1hY09TIFZlbnR1cmEgMTMuMi4xIiwgIlVidW50dSAyMi4wNC4zIExUUyIKICovCmV4cG9ydCBmdW5jdGlvbiBvc19pbmZvKGNvbnRleHQ6IEluZm9Db250ZXh0KTogc3RyaW5nIHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAib3MiKTsKICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkOwoKICBjb25zdCBwbGF0Zm9ybSA9IG9zLnBsYXRmb3JtKCk7CiAgY29uc3QgcmVsZWFzZSA9IG9zLnJlbGVhc2UoKTsKICBsZXQgb3NOYW1lID0gIiI7CgogIGlmIChJU19XSU5ET1dTKSB7CiAgICB0cnkgewogICAgICBjb25zdCB2ZXJzaW9uID0gZXhlY0NvbW1hbmQoInZlciIpOwogICAgICBjb25zdCBtYXRjaCA9IHZlcnNpb24ubWF0Y2goL01pY3Jvc29mdCBXaW5kb3dzIFxbVmVyc2lvbiAoW15cXV0rKVxdLyk7CiAgICAgIG9zTmFtZSA9IG1hdGNoID8gYFdpbmRvd3MgJHttYXRjaFsxXX1gIDogYFdpbmRvd3MgJHtyZWxlYXNlfWA7CiAgICB9IGNhdGNoIHsKICAgICAgb3NOYW1lID0gYFdpbmRvd3MgJHtyZWxlYXNlfWA7CiAgICB9CiAgfSBlbHNlIGlmIChJU19NQUMpIHsKICAgIGNvbnN0IHByb2R1Y3ROYW1lID0gZXhlY0NvbW1hbmQoInN3X3ZlcnMgLXByb2R1Y3ROYW1lIik7CiAgICBjb25zdCBwcm9kdWN0VmVyc2lvbiA9IGV4ZWNDb21tYW5kKCJzd192ZXJzIC1wcm9kdWN0VmVyc2lvbiIpOwogICAgb3NOYW1lID0KICAgICAgcHJvZHVjdE5hbWUgJiYgcHJvZHVjdFZlcnNpb24KICAgICAgICA/IGAke3Byb2R1Y3ROYW1lfSAke3Byb2R1Y3RWZXJzaW9ufWAKICAgICAgICA6IGBtYWNPUyAke3JlbGVhc2V9YDsKICB9IGVsc2UgaWYgKElTX0xJTlVYKSB7CiAgICB0cnkgewogICAgICBjb25zdCBvc1JlbGVhc2UgPSBmcy5yZWFkRmlsZVN5bmMoIi9ldGMvb3MtcmVsZWFzZSIsICJ1dGY4Iik7CiAgICAgIGNvbnN0IG5hbWVNYXRjaCA9IG9zUmVsZWFzZS5tYXRjaCgvXk5BTUU9IihbXiJdKykiL20pOwogICAgICBjb25zdCB2ZXJzaW9uTWF0Y2ggPSBvc1JlbGVhc2UubWF0Y2goL15WRVJTSU9OX0lEPSIoW14iXSspIi9tKTsKICAgICAgb3NOYW1lID0gbmFtZU1hdGNoID8gbmFtZU1hdGNoWzFdIDogIkxpbnV4IjsKICAgICAgaWYgKHZlcnNpb25NYXRjaCkgb3NOYW1lICs9IGAgJHt2ZXJzaW9uTWF0Y2hbMV19YDsKICAgIH0gY2F0Y2ggewogICAgICBvc05hbWUgPSBgTGludXggJHtyZWxlYXNlfWA7CiAgICB9CiAgfSBlbHNlIHsKICAgIG9zTmFtZSA9IGAke3BsYXRmb3JtfSAke3JlbGVhc2V9YDsKICB9CgogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJvcyIsIG9zTmFtZSk7CiAgcmV0dXJuIG9zTmFtZTsKfQoKLyoqCiAqIEdldHMga2VybmVsIHZlcnNpb24gc3RyaW5nCiAqIFJldHVybnMgdGhlIG9wZXJhdGluZyBzeXN0ZW0ga2VybmVsIHZlcnNpb24gZnJvbSBvcy5yZWxlYXNlKCkKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBLZXJuZWwgdmVyc2lvbiBzdHJpbmcKICogQGV4YW1wbGUgIjUuMTUuMC01Ni1nZW5lcmljIiwgIjYuMTEuMTEtdmFsdmUxMi0xLW5lcHR1bmUiCiAqLwpleHBvcnQgZnVuY3Rpb24ga2VybmVsKGNvbnRleHQ6IEluZm9Db250ZXh0KTogc3RyaW5nIHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAia2VybmVsIik7CiAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDsKCiAgY29uc3Qga2VybmVsID0gb3MucmVsZWFzZSgpOwogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJrZXJuZWwiLCBrZXJuZWwpOwogIHJldHVybiBrZXJuZWw7Cn0KCi8qKgogKiBHZXRzIGRldmljZSBvciBjb21wdXRlciBtb2RlbCBuYW1lCiAqIFVzZXMgV01JIG9uIFdpbmRvd3MsIERNSSBvbiBMaW51eCwgZ2V0cHJvcCBvbiBBbmRyb2lkCiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgRGV2aWNlIG1vZGVsIG5hbWUgb3IgZW1wdHkgc3RyaW5nCiAqIEBleGFtcGxlICJEZWxsIE9wdGlQbGV4IDcwOTAiLCAiTWFjQm9vayBQcm8gMTYtaW5jaCIsICJWYWx2ZSBTdGVhbSBEZWNrIgogKi8KZXhwb3J0IGZ1bmN0aW9uIGRldmljZShjb250ZXh0OiBJbmZvQ29udGV4dCk6IHN0cmluZyB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImRldmljZSIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmIChJU19XSU5ET1dTKSB7CiAgICB0cnkgewogICAgICBjb25zdCB3bWljID0gZXhlY0NvbW1hbmQoIndtaWMgY3Nwcm9kdWN0IGdldCBuYW1lIC9mb3JtYXQ6bGlzdCIpOwogICAgICBjb25zdCBuYW1lTWF0Y2ggPSB3bWljLm1hdGNoKC9OYW1lPSguKykvKTsKICAgICAgaWYgKG5hbWVNYXRjaCkgewogICAgICAgIGNvbnN0IGRldmljZSA9IG5hbWVNYXRjaFsxXS50cmltKCk7CiAgICAgICAgaWYgKGRldmljZSAmJiBkZXZpY2UgIT09ICIiKSB7CiAgICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGV2aWNlIiwgZGV2aWNlKTsKICAgICAgICAgIHJldHVybiBkZXZpY2U7CiAgICAgICAgfQogICAgICB9CiAgICB9IGNhdGNoIHt9CgogICAgdHJ5IHsKICAgICAgY29uc3QgcHMgPSBleGVjQ29tbWFuZCgKICAgICAgICAncG93ZXJzaGVsbC5leGUgLUNvbW1hbmQgIkdldC1XbWlPYmplY3QgLUNsYXNzIFdpbjMyX0NvbXB1dGVyU3lzdGVtIHwgU2VsZWN0LU9iamVjdCAtRXhwYW5kUHJvcGVydHkgTW9kZWwiJwogICAgICApOwogICAgICBpZiAocHMudHJpbSgpKSB7CiAgICAgICAgY29uc3QgZGV2aWNlID0gcHMudHJpbSgpOwogICAgICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJkZXZpY2UiLCBkZXZpY2UpOwogICAgICAgIHJldHVybiBkZXZpY2U7CiAgICAgIH0KICAgIH0gY2F0Y2gge30KICB9IGVsc2UgaWYgKElTX01BQykgewogICAgY29uc3QgcHJvZmlsZSA9IGV4ZWNDb21tYW5kKCJzeXN0ZW1fcHJvZmlsZXIgU1BIYXJkd2FyZURhdGFUeXBlIik7CiAgICBjb25zdCBuYW1lTWF0Y2ggPSBwcm9maWxlLm1hdGNoKC9Nb2RlbCBOYW1lOlxzKiguKykvKTsKICAgIGlmIChuYW1lTWF0Y2gpIHsKICAgICAgY29uc3QgZGV2aWNlID0gbmFtZU1hdGNoWzFdLnRyaW0oKTsKICAgICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImRldmljZSIsIGRldmljZSk7CiAgICAgIHJldHVybiBkZXZpY2U7CiAgICB9CiAgfSBlbHNlIGlmIChJU19MSU5VWCkgewogICAgdHJ5IHsKICAgICAgaWYgKGNvbW1hbmRFeGlzdHMoImdldHByb3AiKSkgewogICAgICAgIGNvbnN0IGRldmljZSA9IGV4ZWNDb21tYW5kKCJnZXRwcm9wIHJvLnByb2R1Y3QubW9kZWwiKTsKICAgICAgICBpZiAoZGV2aWNlKSB7CiAgICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGV2aWNlIiwgZGV2aWNlKTsKICAgICAgICAgIHJldHVybiBkZXZpY2U7CiAgICAgICAgfQogICAgICB9CgogICAgICBjb25zdCBkbWlQYXRoID0gIi9zeXMvZGV2aWNlcy92aXJ0dWFsL2RtaS9pZC9wcm9kdWN0X25hbWUiOwogICAgICBpZiAoZnMuZXhpc3RzU3luYyhkbWlQYXRoKSkgewogICAgICAgIGNvbnN0IGRldmljZSA9IGZzLnJlYWRGaWxlU3luYyhkbWlQYXRoLCAidXRmOCIpLnRyaW0oKTsKICAgICAgICBpZiAoZGV2aWNlKSB7CiAgICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGV2aWNlIiwgZGV2aWNlKTsKICAgICAgICAgIHJldHVybiBkZXZpY2U7CiAgICAgICAgfQogICAgICB9CiAgICB9IGNhdGNoIHt9CiAgfQoKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGV2aWNlIiwgIiIpOwogIHJldHVybiAiIjsKfQo=", II = "data:video/mp2t;base64,LyoqCiAqIFByb2Nlc3MtcmVsYXRlZCBzeXN0ZW0gaW5mb3JtYXRpb24gZnVuY3Rpb25zCiAqIEBtb2R1bGUgaW5mby9wcm9jZXNzCiAqLwoKaW1wb3J0IG9zIGZyb20gIm9zIjsKaW1wb3J0IHR5cGUgeyBJbmZvQ29udGV4dCB9IGZyb20gIi4uL3R5cGVzL2ludGVybmFsLXR5cGVzIjsKaW1wb3J0IHsgSVNfTElOVVgsIElTX01BQyB9IGZyb20gIi4uL3V0aWxzL3BsYXRmb3JtIjsKaW1wb3J0IHsgZXhlY0NvbW1hbmQgfSBmcm9tICIuLi91dGlscy9jb21tYW5kIjsKaW1wb3J0IHsgZ2V0Q2FjaGVkVmFsdWUsIHNldENhY2hlZFZhbHVlIH0gZnJvbSAiLi4vY2FjaGUvY2FjaGUiOwoKLyoqCiAqIEdldHMgdGhlIGhpZ2hlc3QgQ1BVLWNvbnN1bWluZyBwcm9jZXNzCiAqIFVzZXMgcHMgY29tbWFuZCB0byBmaW5kIHRvcCBwcm9jZXNzIGJ5IENQVSB1c2FnZSAoTGludXgvbWFjT1Mgb25seSkKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBQcm9jZXNzIGluZm8gYXMgInBlcmNlbnRhZ2UgcHJvY2Vzc25hbWUiIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiOCUgZmlyZWZveCIsICIxNSUgY2hyb21lIiwgIjMlIHN5c3RlbWQiCiAqLwpleHBvcnQgZnVuY3Rpb24gdG9wX3Byb2Nlc3MoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJ0b3BfcHJvY2VzcyIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmIChJU19MSU5VWCkgewogICAgdHJ5IHsKICAgICAgY29uc3QgcHMgPSBleGVjQ29tbWFuZCgicHMgLWVvIHBjcHUsY29tbSAtLXNvcnQ9LSVjcHUgLS1uby1oZWFkZXJzIik7CiAgICAgIGNvbnN0IGxpbmVzID0gcHMuc3BsaXQoIlxuIik7CiAgICAgIGlmIChsaW5lcy5sZW5ndGggPiAwKSB7CiAgICAgICAgY29uc3QgdG9wUHJvY2VzcyA9IGxpbmVzWzBdLnRyaW0oKS5yZXBsYWNlKC9ccysvLCAiICIpLnNwbGl0KCIgIik7CiAgICAgICAgY29uc3QgY3B1ID0gdG9wUHJvY2Vzc1swXS5yZXBsYWNlKC9cLlxkKy8sICIlIik7CiAgICAgICAgY29uc3QgcHJvY2VzcyA9IHRvcFByb2Nlc3NbMV0uc3BsaXQoIi8iKS5wb3AoKTsKICAgICAgICBjb25zdCByZXN1bHQgPSBgJHtjcHV9JSAke3Byb2Nlc3N9YDsKICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAidG9wX3Byb2Nlc3MiLCByZXN1bHQpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgIH0gY2F0Y2gge30KICB9IGVsc2UgaWYgKElTX01BQykgewogICAgdHJ5IHsKICAgICAgLy8gLWMgZ2l2ZXMgdGhlIHNob3J0IGNvbW1hbmQgbmFtZSwgLXIgc29ydHMgYnkgJUNQVSBkZXNjZW5kaW5nCiAgICAgIGNvbnN0IHBzID0gZXhlY0NvbW1hbmQoInBzIC1BY2VvIHBjcHUsY29tbSAtciIpOwogICAgICBjb25zdCBsaW5lcyA9IHBzLnNwbGl0KCJcbiIpLmZpbHRlcigobGluZSkgPT4gbGluZS50cmltKCkpOwogICAgICBpZiAobGluZXMubGVuZ3RoID4gMSkgewogICAgICAgIGNvbnN0IHRvcFByb2Nlc3MgPSBsaW5lc1sxXS50cmltKCkuc3BsaXQoL1xzKy8pOwogICAgICAgIGNvbnN0IGNwdVZhbHVlID0gTWF0aC5yb3VuZChwYXJzZUZsb2F0KHRvcFByb2Nlc3NbMF0pKTsKICAgICAgICBjb25zdCBwcm9jZXNzID0gdG9wUHJvY2Vzcy5zbGljZSgxKS5qb2luKCIgIik7CiAgICAgICAgaWYgKCFpc05hTihjcHVWYWx1ZSkgJiYgcHJvY2VzcykgewogICAgICAgICAgY29uc3QgcmVzdWx0ID0gYCR7Y3B1VmFsdWV9JSAke3Byb2Nlc3N9YDsKICAgICAgICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJ0b3BfcHJvY2VzcyIsIHJlc3VsdCk7CiAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0KICAgICAgfQogICAgfSBjYXRjaCB7fQogIH0KCiAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInRvcF9wcm9jZXNzIiwgIiIpOwogIHJldHVybiAiIjsKfQoKLyoqCiAqIEdldHMgc3lzdGVtIHVwdGltZSBzaW5jZSBsYXN0IGJvb3QKICogQHJldHVybnMgVXB0aW1lIGZvcm1hdHRlZCBhcyAiWGQgWWggWm0iCiAqIEBleGFtcGxlICIyZCAxNGggMjNtIiwgIjBkIDNoIDQ1bSIKICovCmV4cG9ydCBmdW5jdGlvbiB1cHRpbWUoKTogc3RyaW5nIHsKICBjb25zdCB1cHRpbWVTZWNvbmRzID0gb3MudXB0aW1lKCk7CiAgY29uc3QgZGF5cyA9IE1hdGguZmxvb3IodXB0aW1lU2Vjb25kcyAvIDg2NDAwKTsKICBjb25zdCBob3VycyA9IE1hdGguZmxvb3IoKHVwdGltZVNlY29uZHMgJSA4NjQwMCkgLyAzNjAwKTsKICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcigodXB0aW1lU2Vjb25kcyAlIDM2MDApIC8gNjApOwogIHJldHVybiBgJHtkYXlzfWQgJHtob3Vyc31oICR7bWludXRlc31tYDsKfQoKLyoqCiAqIEdldHMgbnVtYmVyIG9mIGxvZ2dlZCBpbiB1c2VycwogKiBVc2VzIHdobyBjb21tYW5kIHRvIGNvdW50IGFjdGl2ZSB1c2VyIHNlc3Npb25zIChMaW51eC9tYWNPUyBvbmx5KQogKiBAcmV0dXJucyBVc2VyIGNvdW50IHdpdGggInVzZXJzIiBzdWZmaXggb3IgZW1wdHkgc3RyaW5nCiAqIEBleGFtcGxlICIzIHVzZXJzIiwgIjEgdXNlcnMiCiAqLwpleHBvcnQgZnVuY3Rpb24gdXNlcnNfbG9nZ2VkX2luKCk6IHN0cmluZyB7CiAgaWYgKCFJU19MSU5VWCAmJiAhSVNfTUFDKSByZXR1cm4gIiI7CgogIHRyeSB7CiAgICBjb25zdCB3aG8gPSBleGVjQ29tbWFuZCgid2hvIik7CiAgICBjb25zdCB1c2VycyA9IHdoby5zcGxpdCgiXG4iKS5maWx0ZXIoKGxpbmUpID0+IGxpbmUudHJpbSgpKS5sZW5ndGg7CiAgICBpZiAodXNlcnMgPiAwKSB7CiAgICAgIHJldHVybiBgJHt1c2Vyc30gdXNlcnNgOwogICAgfQogIH0gY2F0Y2gge30KICByZXR1cm4gIiI7Cn0K", eI = "data:video/mp2t;base64,LyoqCiAqIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnQKICogQG1vZHVsZSBpbmZvL3NldHRpbmdzCiAqLwoKaW1wb3J0IHBhdGggZnJvbSAicGF0aCI7CmltcG9ydCBvcyBmcm9tICJvcyI7CmltcG9ydCBmcyBmcm9tICJmcyI7CmltcG9ydCBwcm9jZXNzIGZyb20gInByb2Nlc3MiOwoKLy8gU2V0dGluZ3MgZmlsZSBwYXRocwpleHBvcnQgY29uc3QgU0VUVElOR1NfRklMRSA9IHBhdGguam9pbigKICBvcy5ob21lZGlyKCksCiAgIi5jb25maWciLAogICJzeXN0ZW1pbmZvLXNldHRpbmdzLmpzb24iLAopOwpleHBvcnQgY29uc3QgQ0FDSEVfRklMRSA9IHBhdGguam9pbihvcy50bXBkaXIoKSwgInN5c3RlbWluZm8tY2FjaGUuanNvbiIpOwoKLy8gQ29sb3IgY29kZXMKZXhwb3J0IGNvbnN0IGNvbG9ycyA9IHsKICByZXNldDogIlx4MWJbMG0iLAogIHJlZDogIlx4MWJbMzg7NTsxOTZtIiwKICBvcmFuZ2U6ICJceDFiWzM4OzU7MjA4bSIsCiAgeWVsbG93OiAiXHgxYlszODs1OzIyNm0iLAogIGdyZWVuOiAiXHgxYlszODs1OzQ2bSIsCiAgYmx1ZTogIlx4MWJbMzg7NTszOW0iLAogIGN5YW46ICJceDFiWzM4OzU7NTFtIiwKICBwdXJwbGU6ICJceDFiWzM4OzU7MTcxbSIsCiAgbWFnZW50YTogIlx4MWJbMzg7NTsyMTNtIiwKICBncmF5OiAiXHgxYlszODs1OzI1MG0iLAogIGxpZ2h0Ymx1ZTogIlx4MWJbMzg7NTsyMjBtIiwKfTsKCi8vIERlZmF1bHQgc2V0dGluZ3MKZXhwb3J0IGNvbnN0IERFRkFVTFRfU0VUVElOR1MgPSB7CiAgZGlzcGxheV9vcmRlcjogWwogICAgWyJ1c2VyIiwgImhvc3RuYW1lIiwgIm9zIiwgImRldmljZSIsICJrZXJuZWwiLCAiY3B1IiwgImdwdSIsICJiZW5jaCJdLAogICAgWwogICAgICAiZGlza191c2VkIiwKICAgICAgImRpc2tfc2l6ZSIsCiAgICAgICJyYW1fdXNlZCIsCiAgICAgICJ0b3BfcHJvY2VzcyIsCiAgICAgICJ1cHRpbWUiLAogICAgICAidGVtcGVyYXR1cmUiLAogICAgICAiYmF0dGVyeSIsCiAgICAgICJsb2FkX2F2ZXJhZ2UiLAogICAgXSwKICAgIFsiaXAiLCAiaXBsb2NhbCIsICJjaXR5Il0sCiAgICBbInNoZWxsIiwgInNlcnZpY2VzX3J1bm5pbmciLCAicGFjbWFuIiwgImNvbnRhaW5lcnMiXSwKICBdLAogIGNvbG9yczogewogICAgdXNlcjogInJlZCIsCiAgICBob3N0bmFtZTogIm9yYW5nZSIsCiAgICBkaXNrX3VzZWQ6ICJwdXJwbGUiLAogICAgZGlza19zaXplOiAicHVycGxlIiwKICAgIHJhbV91c2VkOiAieWVsbG93IiwKICAgIHRvcF9wcm9jZXNzOiAibWFnZW50YSIsCiAgICB1cHRpbWU6ICJjeWFuIiwKICAgIGlwOiAiZ3JlZW4iLAogICAgaXBsb2NhbDogInllbGxvdyIsCiAgICBjaXR5OiAiZ3JlZW4iLAogICAgZG9tYWluOiAiZ3JheSIsCiAgICBpc3A6ICJsaWdodGJsdWUiLAogICAgb3M6ICJncmF5IiwKICAgIGNwdTogIm9yYW5nZSIsCiAgICBncHU6ICJ5ZWxsb3ciLAogICAgYmVuY2g6ICJyZWQiLAogICAgZGV2aWNlOiAieWVsbG93IiwKICAgIGtlcm5lbDogImdyZWVuIiwKICAgIHNoZWxsOiAib3JhbmdlIiwKICAgIHBhY21hbjogIm11bHRpY29sb3IiLAogICAgcG9ydHM6ICJtdWx0aWNvbG9yIiwKICAgIGNvbnRhaW5lcnM6ICJncmVlbiIsCiAgICBtZW1vcnlfYXZhaWxhYmxlOiAiYmx1ZSIsCiAgICBzd2FwX3VzZWQ6ICJwdXJwbGUiLAogICAgbG9hZF9hdmVyYWdlOiAicmVkIiwKICAgIHVzZXJzX2xvZ2dlZF9pbjogImN5YW4iLAogICAgbmV0d29ya19pbnRlcmZhY2VzOiAieWVsbG93IiwKICAgIG1vdW50X3BvaW50czogImdyYXkiLAogICAgc2VydmljZXNfcnVubmluZzogImdyZWVuIiwKICAgIHRlbXBlcmF0dXJlOiAicmVkIiwKICAgIGJhdHRlcnk6ICJncmVlbiIsCiAgICBzY3JlZW5fcmVzb2x1dGlvbjogImJsdWUiLAogIH0sCiAgZW1vamlzOiB7CiAgICB1c2VyOiAi8J+RpCAiLAogICAgaG9zdG5hbWU6ICLwn4+gICIsCiAgICBpcDogIvCfjI4gIiwKICAgIGlwbG9jYWw6ICLwn4yQICIsCiAgICBjaXR5OiAi8J+TjSAiLAogICAgZG9tYWluOiAi8J+UlyAiLAogICAgaXNwOiAi8J+RriAiLAogICAgb3M6ICLimqEgIiwKICAgIGNwdTogIvCfk4ggIiwKICAgIGdwdTogIvCfjq4gIiwKICAgIGJlbmNoOiAi8J+SqiAiLAogICAgZGV2aWNlOiAi8J+SuyAiLAogICAga2VybmVsOiAi8J+UpyAiLAogICAgc2hlbGw6ICLwn5CaICIsCiAgICBwYWNtYW46ICLwn5qAICIsCiAgICBkaXNrX3VzZWQ6ICLwn5OBICIsCiAgICBkaXNrX3NpemU6ICLwn5K9ICIsCiAgICByYW1fdXNlZDogIvCfkr4gIiwKICAgIHRvcF9wcm9jZXNzOiAi8J+UnSAiLAogICAgdXB0aW1lOiAi4o+x77iPICIsCiAgICBwb3J0czogIvCflIwgIiwKICAgIGNvbnRhaW5lcnM6ICLwn5OmICIsCiAgICBtZW1vcnlfYXZhaWxhYmxlOiAi8J+noCAiLAogICAgc3dhcF91c2VkOiAi8J+UhCAiLAogICAgbG9hZF9hdmVyYWdlOiAi4pqW77iPICIsCiAgICB1c2Vyc19sb2dnZWRfaW46ICLwn5GlICIsCiAgICBuZXR3b3JrX2ludGVyZmFjZXM6ICLwn4yQICIsCiAgICBtb3VudF9wb2ludHM6ICLwn5OCICIsCiAgICBzZXJ2aWNlc19ydW5uaW5nOiAi4pqZ77iPICIsCiAgICB0ZW1wZXJhdHVyZTogIvCfjKHvuI8gIiwKICAgIGJhdHRlcnlfY2hhcmdpbmc6ICLwn5SMICIsCiAgICBiYXR0ZXJ5OiAi8J+UiyAiLAogICAgc2NyZWVuX3Jlc29sdXRpb246ICLwn5al77iPICIsCiAgfSwKICBsYWJlbHM6IHsKICAgIHVzZXI6ICJVc2VyIiwKICAgIGhvc3RuYW1lOiAiSG9zdCIsCiAgICBpcDogIklQIiwKICAgIGlwbG9jYWw6ICJMb2NhbCBJUCIsCiAgICBjaXR5OiAiQ2l0eSIsCiAgICBkb21haW46ICJEb21haW4iLAogICAgaXNwOiAiSVNQIiwKICAgIG9zOiAiT1MiLAogICAgY3B1OiAiQ1BVIiwKICAgIGdwdTogIkdQVSIsCiAgICBiZW5jaDogIkJlbmNoIiwKICAgIGRldmljZTogIkRldmljZSIsCiAgICBrZXJuZWw6ICJLZXJuZWwiLAogICAgc2hlbGw6ICJTaGVsbCIsCiAgICBwYWNtYW46ICJQYWNrYWdlcyIsCiAgICBkaXNrX3VzZWQ6ICJEaXNrIiwKICAgIGRpc2tfc2l6ZTogIkRpc2sgU2l6ZSIsCiAgICByYW1fdXNlZDogIlJBTSIsCiAgICB0b3BfcHJvY2VzczogIlRvcCIsCiAgICB1cHRpbWU6ICJVcHRpbWUiLAogICAgcG9ydHM6ICJQb3J0cyIsCiAgICBjb250YWluZXJzOiAiQ29udGFpbmVycyIsCiAgICBtZW1vcnlfYXZhaWxhYmxlOiAiTWVtb3J5IiwKICAgIHN3YXBfdXNlZDogIlN3YXAiLAogICAgbG9hZF9hdmVyYWdlOiAiTG9hZCIsCiAgICB1c2Vyc19sb2dnZWRfaW46ICJVc2VycyIsCiAgICBuZXR3b3JrX2ludGVyZmFjZXM6ICJOZXR3b3JrIiwKICAgIG1vdW50X3BvaW50czogIk1vdW50cyIsCiAgICBzZXJ2aWNlc19ydW5uaW5nOiAiU2VydmljZXMiLAogICAgdGVtcGVyYXR1cmU6ICJUZW1wIiwKICAgIGJhdHRlcnlfY2hhcmdpbmc6ICJCYXR0ZXJ5IiwKICAgIGJhdHRlcnk6ICJCYXR0ZXJ5IiwKICAgIHNjcmVlbl9yZXNvbHV0aW9uOiAiUmVzb2x1dGlvbiIsCiAgfSwKICBkaXNwbGF5OiB7CiAgICBzaG93X2Vtb2ppczogdHJ1ZSwKICAgIHNpbmdsZV9saW5lOiB0cnVlLAogICAgbGluZV93cmFwX2xlbmd0aDogcHJvY2Vzcz8uc3Rkb3V0Py5jb2x1bW5zIHx8IDEwMCwKICB9LAogIG5ldHdvcms6IHsKICAgIHNob3dfb2ZmbGluZV9tZXNzYWdlOiB0cnVlLAogIH0sCiAgYWR2YW5jZWQ6IHsKICAgIGRlYnVnOiBmYWxzZSwKICB9LAp9OwoKZXhwb3J0IGludGVyZmFjZSBTZXR0aW5ncyB7CiAgZGlzcGxheV9vcmRlcjogc3RyaW5nW11bXTsKICBjb2xvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47CiAgZW1vamlzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+OwogIGxhYmVsczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjsKICBkaXNwbGF5OiB7CiAgICBzaG93X2Vtb2ppczogYm9vbGVhbjsKICAgIC8qKiB0cnVlOiBwcmludCBvbmUgY29udGludW91cyBsaW5lIGFuZCBsZXQgdGhlIHRlcm1pbmFsIHNvZnQtd3JhcCBpdDsgZmFsc2U6IGhhcmQtd3JhcCBhdCBsaW5lX3dyYXBfbGVuZ3RoICovCiAgICBzaW5nbGVfbGluZTogYm9vbGVhbjsKICAgIGxpbmVfd3JhcF9sZW5ndGg6IG51bWJlcjsKICB9OwogIG5ldHdvcms6IHsKICAgIHNob3dfb2ZmbGluZV9tZXNzYWdlOiBib29sZWFuOwogIH07CiAgYWR2YW5jZWQ6IHsKICAgIGRlYnVnOiBib29sZWFuOwogIH07Cn0KCi8qKgogKiBMb2FkcyBzZXR0aW5ncyBmcm9tIHRoZSBjb25maWd1cmF0aW9uIGZpbGUKICogQHJldHVybnMgU2V0dGluZ3Mgb2JqZWN0IChkZWZhdWx0cyBtZXJnZWQgd2l0aCB1c2VyIHNldHRpbmdzKQogKi8KZXhwb3J0IGZ1bmN0aW9uIGxvYWRTZXR0aW5ncygpOiBTZXR0aW5ncyB7CiAgdHJ5IHsKICAgIGlmIChmcy5leGlzdHNTeW5jKFNFVFRJTkdTX0ZJTEUpKSB7CiAgICAgIGNvbnN0IHNldHRpbmdzID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoU0VUVElOR1NfRklMRSwgInV0ZjgiKSk7CiAgICAgIHJldHVybiB7IC4uLkRFRkFVTFRfU0VUVElOR1MsIC4uLnNldHRpbmdzIH07CiAgICB9CiAgfSBjYXRjaCB7fQogIHJldHVybiBERUZBVUxUX1NFVFRJTkdTOwp9CgovKioKICogU2F2ZXMgc2V0dGluZ3MgdG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZQogKiBAcGFyYW0gc2V0dGluZ3MgLSBUaGUgc2V0dGluZ3Mgb2JqZWN0IHRvIHNhdmUKICogQHJldHVybnMgVHJ1ZSBpZiBzdWNjZXNzZnVsLCBmYWxzZSBvdGhlcndpc2UKICovCmV4cG9ydCBmdW5jdGlvbiBzYXZlU2V0dGluZ3Moc2V0dGluZ3M6IFNldHRpbmdzKTogYm9vbGVhbiB7CiAgdHJ5IHsKICAgIGNvbnN0IGNvbmZpZ0RpciA9IHBhdGguZGlybmFtZShTRVRUSU5HU19GSUxFKTsKICAgIGlmICghZnMuZXhpc3RzU3luYyhjb25maWdEaXIpKSB7CiAgICAgIGZzLm1rZGlyU3luYyhjb25maWdEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pOwogICAgfQogICAgZnMud3JpdGVGaWxlU3luYyhTRVRUSU5HU19GSUxFLCBKU09OLnN0cmluZ2lmeShzZXR0aW5ncywgbnVsbCwgMikpOwogICAgcmV0dXJuIHRydWU7CiAgfSBjYXRjaCB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9Cg==", gI = "data:video/mp2t;base64,LyoqCiAqIFNvZnR3YXJlIGFuZCBwYWNrYWdlLXJlbGF0ZWQgc3lzdGVtIGluZm9ybWF0aW9uIGZ1bmN0aW9ucwogKiBAbW9kdWxlIGluZm8vc29mdHdhcmUKICovCgppbXBvcnQgb3MgZnJvbSAib3MiOwppbXBvcnQgcHJvY2VzcyBmcm9tICJwcm9jZXNzIjsKaW1wb3J0IHR5cGUgeyBJbmZvQ29udGV4dCB9IGZyb20gIi4uL3R5cGVzL2ludGVybmFsLXR5cGVzIjsKaW1wb3J0IHsgSVNfV0lORE9XUyB9IGZyb20gIi4uL3V0aWxzL3BsYXRmb3JtIjsKaW1wb3J0IHsgZXhlY0NvbW1hbmQsIGNvbW1hbmRFeGlzdHMgfSBmcm9tICIuLi91dGlscy9jb21tYW5kIjsKaW1wb3J0IHsgZ2V0Q2FjaGVkVmFsdWUsIHNldENhY2hlZFZhbHVlIH0gZnJvbSAiLi4vY2FjaGUvY2FjaGUiOwoKLyoqCiAqIEdldHMgdGhlIGN1cnJlbnQgc2hlbGwgbmFtZQogKiBVc2VzIHRoZSB1c2VyJ3MgbG9naW4gc2hlbGwgKG1hY09TL0xpbnV4KSwgZmFsbHMgYmFjayB0byBwcyBmb3IgdGhlCiAqIHBhcmVudCBwcm9jZXNzIHNoZWxsCiAqIEByZXR1cm5zIFNoZWxsIG5hbWUgb3IgZW1wdHkgc3RyaW5nIG9uIFdpbmRvd3MKICogQGV4YW1wbGUgImJhc2giLCAienNoIiwgImZpc2giLCAibnUiCiAqLwpleHBvcnQgZnVuY3Rpb24gc2hlbGwoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJzaGVsbCIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmICghSVNfV0lORE9XUykgewogICAgdHJ5IHsKICAgICAgY29uc3QgbG9naW5TaGVsbCA9IG9zLnVzZXJJbmZvKCkuc2hlbGw7CiAgICAgIGlmIChsb2dpblNoZWxsKSB7CiAgICAgICAgY29uc3Qgc2hlbGxOYW1lID0gbG9naW5TaGVsbC5zcGxpdCgiLyIpLnBvcCgpIGFzIHN0cmluZzsKICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAic2hlbGwiLCBzaGVsbE5hbWUpOwogICAgICAgIHJldHVybiBzaGVsbE5hbWU7CiAgICAgIH0KICAgIH0gY2F0Y2gge30KCiAgICB0cnkgewogICAgICBjb25zdCBwcGlkID0gcHJvY2Vzcy5wcGlkOwogICAgICBjb25zdCBzaGVsbE5hbWUgPSBleGVjQ29tbWFuZChgcHMgLXAgJHtwcGlkfSAtbyBjb21tPWApLnNwbGl0KCIvIikucG9wKCk7CiAgICAgIGlmIChzaGVsbE5hbWUpIHsKICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAic2hlbGwiLCBzaGVsbE5hbWUpOwogICAgICAgIHJldHVybiBzaGVsbE5hbWU7CiAgICAgIH0KICAgIH0gY2F0Y2gge30KICB9CgogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJzaGVsbCIsICIiKTsKICByZXR1cm4gIiI7Cn0KCi8qKgogKiBHZXRzIGF2YWlsYWJsZSBwYWNrYWdlIG1hbmFnZXJzIGFuZCBkZXZlbG9wbWVudCB0b29scwogKiBDaGVja3MgZm9yIHBhY2thZ2UgbWFuYWdlcnMgKGFwdCwgeXVtLCBucG0sIGV0Yy4pIGFuZCBlZGl0b3JzIChudmltLCBoeCkKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBTcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBhdmFpbGFibGUgY29tbWFuZHMKICogQGV4YW1wbGUgImFwdCBucG0gZG9ja2VyIG52aW0iLCAieWF5IHBhY21hbiBidW4gaHgiCiAqLwpleHBvcnQgZnVuY3Rpb24gcGFja2FnZXMoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJwYWNrYWdlcyIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGNvbnN0IGNvbW1hbmRzID0gWwogICAgImFwdCIsCiAgICAiYnJldyIsCiAgICAibnBtIiwKICAgICJ1diIsCiAgICAiZG9ja2VyIiwKICAgICJoeCIsCiAgICAibnZpbSIsCiAgICAiYnVuIiwKICAgICJ5YXkiLAogICAgInBhY21hbiIsCiAgICAieXVtIiwKICAgICJkbmYiLAogICAgInp5cHBlciIsCiAgICAiZW1lcmdlIiwKICAgICJhcGsiLAogICAgInNuYXAiLAogICAgImZsYXRwYWsiLAogIF07CiAgY29uc3QgYXZhaWxhYmxlID0gY29tbWFuZHMuZmlsdGVyKChjbWQpID0+IGNvbW1hbmRFeGlzdHMoY21kKSk7CgogIGNvbnN0IHJlc3VsdCA9IGF2YWlsYWJsZS5qb2luKCIgIik7CiAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInBhY2thZ2VzIiwgcmVzdWx0KTsKICByZXR1cm4gcmVzdWx0Owp9CgovKioKICogR2V0cyB2ZXJzaW9ucyBvZiBjb21tb24gc29mdHdhcmUgdG9vbHMKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBGb3JtYXR0ZWQgc3RyaW5nIG9mIHRvb2wgdmVyc2lvbnMKICogQGV4YW1wbGUgIm5vZGU6MjAuMS4wIGdpdDoyLjM0LjEiCiAqLwpleHBvcnQgZnVuY3Rpb24gY29tbW9uX3ZlcnNpb25zKGNvbnRleHQ6IEluZm9Db250ZXh0KTogc3RyaW5nIHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiY29tbW9uX3ZlcnNpb25zIik7CiAgaWYgKGNhY2hlZCAhPT0gbnVsbCkgcmV0dXJuIGNhY2hlZDsKCiAgY29uc3QgdG9vbHMgPSBbCiAgICB7CiAgICAgIGNtZDogIm5vZGUiLAogICAgICBhcmdzOiAiLS12ZXJzaW9uIiwKICAgICAgY2xlYW46ICh2OiBzdHJpbmcpID0+IHYucmVwbGFjZSgvXnYvLCAiIiksCiAgICB9LAogICAgewogICAgICBjbWQ6ICJnaXQiLAogICAgICBhcmdzOiAiLS12ZXJzaW9uIiwKICAgICAgY2xlYW46ICh2OiBzdHJpbmcpID0+IHYucmVwbGFjZSgiZ2l0IHZlcnNpb24gIiwgIiIpLAogICAgfSwKICAgIHsKICAgICAgY21kOiAiZG9ja2VyIiwKICAgICAgYXJnczogIi0tdmVyc2lvbiIsCiAgICAgIGNsZWFuOiAodjogc3RyaW5nKSA9PiB2LnJlcGxhY2UoL0RvY2tlciB2ZXJzaW9uIChbXixdKyksLiovLCAiJDEiKSwKICAgIH0sCiAgICB7CiAgICAgIGNtZDogInB5dGhvbjMiLAogICAgICBhcmdzOiAiLS12ZXJzaW9uIiwKICAgICAgY2xlYW46ICh2OiBzdHJpbmcpID0+IHYucmVwbGFjZSgiUHl0aG9uICIsICIiKSwKICAgIH0sCiAgICB7CiAgICAgIGNtZDogImdvIiwKICAgICAgYXJnczogInZlcnNpb24iLAogICAgICBjbGVhbjogKHY6IHN0cmluZykgPT4gdi5yZXBsYWNlKCJnbyB2ZXJzaW9uIGdvIiwgIiIpLnNwbGl0KCIgIilbMF0sCiAgICB9LAogICAgewogICAgICBjbWQ6ICJydXN0YyIsCiAgICAgIGFyZ3M6ICItLXZlcnNpb24iLAogICAgICBjbGVhbjogKHY6IHN0cmluZykgPT4gdi5yZXBsYWNlKCJydXN0YyAiLCAiIikuc3BsaXQoIiAiKVswXSwKICAgIH0sCiAgXTsKCiAgY29uc3QgdmVyc2lvbnM6IHN0cmluZ1tdID0gW107CgogIGZvciAoY29uc3QgdG9vbCBvZiB0b29scykgewogICAgaWYgKGNvbW1hbmRFeGlzdHModG9vbC5jbWQpKSB7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3Qgb3V0cHV0ID0gZXhlY0NvbW1hbmQoYCR7dG9vbC5jbWR9ICR7dG9vbC5hcmdzfWApOwogICAgICAgIGNvbnN0IHZlcnNpb24gPSB0b29sLmNsZWFuKG91dHB1dCkudHJpbSgpOwogICAgICAgIGlmICh2ZXJzaW9uKSB7CiAgICAgICAgICB2ZXJzaW9ucy5wdXNoKGAke3Rvb2wuY21kfToke3ZlcnNpb259YCk7CiAgICAgICAgfQogICAgICB9IGNhdGNoIHt9CiAgICB9CiAgfQoKICBjb25zdCByZXN1bHQgPSB2ZXJzaW9ucy5qb2luKCIgIik7CiAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImNvbW1vbl92ZXJzaW9ucyIsIHJlc3VsdCk7CiAgcmV0dXJuIHJlc3VsdDsKfQovKioKICogR2V0cyBydW5uaW5nIERvY2tlciBjb250YWluZXIgbmFtZXMKICogTGlzdHMgYWN0aXZlIERvY2tlciBjb250YWluZXJzIHdpdGggdGhlaXIgbmFtZXMKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBTcGFjZS1zZXBhcmF0ZWQgY29udGFpbmVyIG5hbWVzIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAibmdpbnggcmVkaXMgcG9zdGdyZXMiLCAid2ViLWFwcCBkYi1zZXJ2ZXIiCiAqLwpleHBvcnQgZnVuY3Rpb24gY29udGFpbmVycyhjb250ZXh0OiBJbmZvQ29udGV4dCk6IHN0cmluZyB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImNvbnRhaW5lcnMiKTsKICBpZiAoY2FjaGVkICE9PSBudWxsKSByZXR1cm4gY2FjaGVkOwoKICBpZiAoIWNvbW1hbmRFeGlzdHMoImRvY2tlciIpKSB7CiAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiY29udGFpbmVycyIsICIiKTsKICAgIHJldHVybiAiIjsKICB9CgogIHRyeSB7CiAgICBjb25zdCBjb250YWluZXJDb3VudCA9IGV4ZWNDb21tYW5kKCJkb2NrZXIgcHMgLXEiKQogICAgICAuc3BsaXQoIlxuIikKICAgICAgLmZpbHRlcigobGluZSkgPT4gbGluZS50cmltKCkpLmxlbmd0aDsKICAgIGlmIChjb250YWluZXJDb3VudCA9PT0gMCkgewogICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiY29udGFpbmVycyIsICIiKTsKICAgICAgcmV0dXJuICIiOwogICAgfQoKICAgIGNvbnN0IGNvbnRhaW5lcnMgPSBleGVjQ29tbWFuZCgKICAgICAgJ2RvY2tlciBwcyAtLWZvcm1hdCAie3suTmFtZXN9fVx0e3suUG9ydHN9fSInCiAgICApOwogICAgY29uc3QgbGluZXMgPSBjb250YWluZXJzLnNwbGl0KCJcbiIpLmZpbHRlcigobGluZSkgPT4gbGluZS50cmltKCkpOwoKICAgIGNvbnN0IGNvbnRhaW5lckluZm86IHN0cmluZ1tdID0gW107CgogICAgbGluZXMuZm9yRWFjaCgobGluZSkgPT4gewogICAgICBjb25zdCBbbmFtZSwgcG9ydHNdID0gbGluZS5zcGxpdCgiXHQiKTsKICAgICAgaWYgKG5hbWUpIHsKICAgICAgICBjb250YWluZXJJbmZvLnB1c2gobmFtZSk7CgogICAgICAgIGlmIChwb3J0cykgewogICAgICAgICAgY29uc3QgcG9ydE1hdGNoZXMgPSBwb3J0cy5tYXRjaCgvLT4oXGQrKC1cZCspPylcLy9nKTsKICAgICAgICAgIGlmIChwb3J0TWF0Y2hlcykgewogICAgICAgICAgICBjb25zdCB1bmlxdWVQb3J0cyA9IFsKICAgICAgICAgICAgICAuLi5uZXcgU2V0KAogICAgICAgICAgICAgICAgcG9ydE1hdGNoZXMubWFwKChwKSA9PiBwLnJlcGxhY2UoLy0+XGQrKC1cZCspP1wvLywgIiIpKQogICAgICAgICAgICAgICksCiAgICAgICAgICAgIF07CiAgICAgICAgICAgIGNvbnRhaW5lckluZm8ucHVzaCguLi51bmlxdWVQb3J0cyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKCiAgICBjb25zdCByZXN1bHQgPSBjb250YWluZXJJbmZvLmpvaW4oIiAiKTsKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJjb250YWluZXJzIiwgcmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfSBjYXRjaCB7fQoKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiY29udGFpbmVycyIsICIiKTsKICByZXR1cm4gIiI7Cn0K", cI = "data:video/mp2t;base64,LyoqCiAqIFN5c3RlbSBzdGF0dXMgYW5kIGhlYWx0aCBpbmZvcm1hdGlvbiBmdW5jdGlvbnMKICogQG1vZHVsZSBpbmZvL3N5c3RlbS1zdGF0dXMKICovCgppbXBvcnQgZnMgZnJvbSAiZnMiOwppbXBvcnQgb3MgZnJvbSAib3MiOwppbXBvcnQgdHlwZSB7IEluZm9Db250ZXh0IH0gZnJvbSAiLi4vdHlwZXMvaW50ZXJuYWwtdHlwZXMiOwppbXBvcnQgeyBJU19MSU5VWCwgSVNfTUFDIH0gZnJvbSAiLi4vdXRpbHMvcGxhdGZvcm0iOwppbXBvcnQgeyBleGVjQ29tbWFuZCwgY29tbWFuZEV4aXN0cyB9IGZyb20gIi4uL3V0aWxzL2NvbW1hbmQiOwppbXBvcnQgeyBnZXRDYWNoZWRWYWx1ZSwgc2V0Q2FjaGVkVmFsdWUgfSBmcm9tICIuLi9jYWNoZS9jYWNoZSI7CgovKioKICogR2V0cyBzeXN0ZW0gbG9hZCBhdmVyYWdlcwogKiBSZWFkcyAxLCA1LCBhbmQgMTUgbWludXRlIGxvYWQgYXZlcmFnZXMgZnJvbSAvcHJvYy9sb2FkYXZnIChMaW51eCkgb3IKICogb3MubG9hZGF2ZygpIChtYWNPUykKICogQHJldHVybnMgU3BhY2Utc2VwYXJhdGVkIGxvYWQgYXZlcmFnZXMgKDFtIDVtIDE1bSkgb3IgZW1wdHkgc3RyaW5nCiAqIEBleGFtcGxlICIwLjUyIDAuNTggMC41OSIsICIyLjEwIDEuOTUgMS44OCIKICovCmV4cG9ydCBmdW5jdGlvbiBsb2FkX2F2ZXJhZ2UoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGlmIChJU19NQUMpIHsKICAgIHJldHVybiBvcwogICAgICAubG9hZGF2ZygpCiAgICAgIC5tYXAoKG4pID0+IG4udG9GaXhlZCgyKSkKICAgICAgLmpvaW4oIiAiKTsKICB9CgogIGlmICghSVNfTElOVVgpIHJldHVybiAiIjsKCiAgdHJ5IHsKICAgIGNvbnN0IGxvYWRhdmcgPSBmcy5yZWFkRmlsZVN5bmMoIi9wcm9jL2xvYWRhdmciLCAidXRmOCIpOwogICAgY29uc3QgbG9hZHMgPSBsb2FkYXZnLnNwbGl0KCIgIikuc2xpY2UoMCwgMyk7CiAgICByZXR1cm4gbG9hZHMuam9pbigiICIpOwogIH0gY2F0Y2gge30KICByZXR1cm4gIiI7Cn0KCi8qKgogKiBHZXRzIGJhdHRlcnkgY2hhcmdlIGxldmVsIGFuZCBjaGFyZ2luZyBzdGF0dXMKICogUmVhZHMgZnJvbSAvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS9CQVQwIChMaW51eCBsYXB0b3BzIG9ubHkpCiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgQmF0dGVyeSBwZXJjZW50YWdlIHdpdGggb3B0aW9uYWwgKyBmb3IgY2hhcmdpbmcsIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiODUlIiwgIjQyJSsiLCAiMTAwJSIKICovCmV4cG9ydCBmdW5jdGlvbiBiYXR0ZXJ5KGNvbnRleHQ6IEluZm9Db250ZXh0KTogc3RyaW5nIHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiYmF0dGVyeSIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmIChJU19NQUMpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IGJhdHQgPSBleGVjQ29tbWFuZCgicG1zZXQgLWcgYmF0dCIpOwogICAgICBjb25zdCBwZXJjZW50TWF0Y2ggPSBiYXR0Lm1hdGNoKC8oXGQrKSUvKTsKICAgICAgaWYgKHBlcmNlbnRNYXRjaCkgewogICAgICAgIGNvbnN0IGlzQ2hhcmdpbmcgPSAvO1xzKihjaGFyZ2luZ3xjaGFyZ2VkKTsvaS50ZXN0KGJhdHQpOwogICAgICAgIGNvbnN0IHJlc3VsdCA9IGAke3BlcmNlbnRNYXRjaFsxXX0lJHtpc0NoYXJnaW5nID8gIisiIDogIiJ9YDsKICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiYmF0dGVyeSIsIHJlc3VsdCk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgfSBjYXRjaCB7fQoKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJiYXR0ZXJ5IiwgIiIpOwogICAgcmV0dXJuICIiOwogIH0KCiAgaWYgKCFJU19MSU5VWCkgewogICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImJhdHRlcnkiLCAiIik7CiAgICByZXR1cm4gIiI7CiAgfQoKICB0cnkgewogICAgY29uc3QgYmF0dGVyeVBhdGggPSAiL3N5cy9jbGFzcy9wb3dlcl9zdXBwbHkvQkFUMCI7CiAgICBjb25zdCBjYXBhY2l0eVBhdGggPSBgJHtiYXR0ZXJ5UGF0aH0vY2FwYWNpdHlgOwogICAgY29uc3Qgc3RhdHVzUGF0aCA9IGAke2JhdHRlcnlQYXRofS9zdGF0dXNgOwoKICAgIGlmIChmcy5leGlzdHNTeW5jKGNhcGFjaXR5UGF0aCkpIHsKICAgICAgY29uc3QgY2FwYWNpdHkgPSBmcy5yZWFkRmlsZVN5bmMoY2FwYWNpdHlQYXRoLCAidXRmOCIpLnRyaW0oKTsKICAgICAgY29uc3Qgc3RhdHVzID0gZnMuZXhpc3RzU3luYyhzdGF0dXNQYXRoKQogICAgICAgID8gZnMucmVhZEZpbGVTeW5jKHN0YXR1c1BhdGgsICJ1dGY4IikudHJpbSgpCiAgICAgICAgOiAiVW5rbm93biI7CgogICAgICBjb25zdCBiYXR0ZXJ5UGVyY2VudCA9IHBhcnNlSW50KGNhcGFjaXR5KTsKICAgICAgY29uc3QgaXNDaGFyZ2luZyA9IHN0YXR1cyA9PT0gIkNoYXJnaW5nIjsKICAgICAgY29uc3QgcmVzdWx0ID0gYCR7YmF0dGVyeVBlcmNlbnR9JSR7aXNDaGFyZ2luZyA/ICIrIiA6ICIifWA7CiAgICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJiYXR0ZXJ5IiwgcmVzdWx0KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICB9IGNhdGNoIHt9CgogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJiYXR0ZXJ5IiwgIiIpOwogIHJldHVybiAiIjsKfQoKLyoqCiAqIEdldHMgc3lzdGVtIHRlbXBlcmF0dXJlIGluIENlbHNpdXMKICogUmVhZHMgZnJvbSB0aGVybWFsIHpvbmUgb3IgaHdtb24gc2Vuc29ycyAoTGludXgpLCBvciBmcm9tIHRoZQogKiBgb3N4LWNwdS10ZW1wYCBDTEkgKG1hY09TLCBpZiBpbnN0YWxsZWQgdmlhIGBicmV3IGluc3RhbGwgb3N4LWNwdS10ZW1wYCkgLQogKiBtYWNPUyBoYXMgbm8gdW5wcml2aWxlZ2VkIEFQSSBmb3IgdGhpcywgc28gbm90aGluZyBpcyByZXBvcnRlZCB3aXRob3V0IGl0CiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgVGVtcGVyYXR1cmUgd2l0aCDCsEMgc3VmZml4IG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiNDXCsEMiLCAiNjLCsEMiCiAqLwpleHBvcnQgZnVuY3Rpb24gdGVtcGVyYXR1cmUoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJ0ZW1wZXJhdHVyZSIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmIChJU19NQUMpIHsKICAgIGlmIChjb21tYW5kRXhpc3RzKCJvc3gtY3B1LXRlbXAiKSkgewogICAgICB0cnkgewogICAgICAgIGNvbnN0IG91dHB1dCA9IGV4ZWNDb21tYW5kKCJvc3gtY3B1LXRlbXAiKTsKICAgICAgICBjb25zdCBtYXRjaCA9IG91dHB1dC5tYXRjaCgvKFtcZC5dKylccyrCsD9DLyk7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICBjb25zdCB0ZW1wQyA9IE1hdGgucm91bmQocGFyc2VGbG9hdChtYXRjaFsxXSkpOwogICAgICAgICAgaWYgKHRlbXBDID4gMCAmJiB0ZW1wQyA8IDE1MCkgewogICAgICAgICAgICBjb25zdCByZXN1bHQgPSBgJHt0ZW1wQ33CsENgOwogICAgICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAidGVtcGVyYXR1cmUiLCByZXN1bHQpOwogICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBjYXRjaCB7fQogICAgfQoKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJ0ZW1wZXJhdHVyZSIsICIiKTsKICAgIHJldHVybiAiIjsKICB9CgogIGlmICghSVNfTElOVVgpIHsKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJ0ZW1wZXJhdHVyZSIsICIiKTsKICAgIHJldHVybiAiIjsKICB9CgogIHRyeSB7CiAgICBjb25zdCB0ZW1wU291cmNlcyA9IFsKICAgICAgIi9zeXMvY2xhc3MvdGhlcm1hbC90aGVybWFsX3pvbmUwL3RlbXAiLAogICAgICAiL3N5cy9jbGFzcy9od21vbi9od21vbjAvdGVtcDFfaW5wdXQiLAogICAgICAiL3N5cy9jbGFzcy9od21vbi9od21vbjEvdGVtcDFfaW5wdXQiLAogICAgXTsKCiAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiB0ZW1wU291cmNlcykgewogICAgICBpZiAoZnMuZXhpc3RzU3luYyhzb3VyY2UpKSB7CiAgICAgICAgY29uc3QgdGVtcCA9IGZzLnJlYWRGaWxlU3luYyhzb3VyY2UsICJ1dGY4IikudHJpbSgpOwogICAgICAgIGNvbnN0IHRlbXBDID0gTWF0aC5yb3VuZChwYXJzZUludCh0ZW1wKSAvIDEwMDApOwoKICAgICAgICBpZiAodGVtcEMgPiAwICYmIHRlbXBDIDwgMTUwKSB7CiAgICAgICAgICBjb25zdCByZXN1bHQgPSBgJHt0ZW1wQ33CsENgOwogICAgICAgICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInRlbXBlcmF0dXJlIiwgcmVzdWx0KTsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfSBjYXRjaCB7fQoKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAidGVtcGVyYXR1cmUiLCAiIik7CiAgcmV0dXJuICIiOwp9CgovKioKICogR2V0cyBjb3VudCBvZiBydW5uaW5nIHN5c3RlbSBzZXJ2aWNlcwogKiBVc2VzIHN5c3RlbWN0bCBvciBzZXJ2aWNlIGNvbW1hbmQgKExpbnV4IG9ubHkpCiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgU2VydmljZSBjb3VudCB3aXRoICJzZXJ2aWNlcyIgc3VmZml4IG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiMTI1IHNlcnZpY2VzIiwgIjg5IHNlcnZpY2VzIgogKi8KZXhwb3J0IGZ1bmN0aW9uIHNlcnZpY2VzX3J1bm5pbmcoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJzZXJ2aWNlc19ydW5uaW5nIik7CiAgaWYgKGNhY2hlZCAhPT0gbnVsbCkgcmV0dXJuIGNhY2hlZDsKCiAgaWYgKElTX01BQykgewogICAgdHJ5IHsKICAgICAgY29uc3Qgc2VydmljZXMgPSBleGVjQ29tbWFuZCgibGF1bmNoY3RsIGxpc3QiKTsKICAgICAgY29uc3Qgc2VydmljZUNvdW50ID0gc2VydmljZXMKICAgICAgICAuc3BsaXQoIlxuIikKICAgICAgICAuZmlsdGVyKChsaW5lKSA9PiBsaW5lLnRyaW0oKSAmJiAhbGluZS5zdGFydHNXaXRoKCJQSUQiKSkubGVuZ3RoOwoKICAgICAgaWYgKHNlcnZpY2VDb3VudCA+IDApIHsKICAgICAgICBjb25zdCByZXN1bHQgPSBgJHtzZXJ2aWNlQ291bnR9IHNlcnZpY2VzYDsKICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAic2VydmljZXNfcnVubmluZyIsIHJlc3VsdCk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgfSBjYXRjaCB7fQoKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJzZXJ2aWNlc19ydW5uaW5nIiwgIiIpOwogICAgcmV0dXJuICIiOwogIH0KCiAgaWYgKCFJU19MSU5VWCkgewogICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInNlcnZpY2VzX3J1bm5pbmciLCAiIik7CiAgICByZXR1cm4gIiI7CiAgfQoKICB0cnkgewogICAgbGV0IHNlcnZpY2VDb3VudCA9IDA7CgogICAgaWYgKGNvbW1hbmRFeGlzdHMoInN5c3RlbWN0bCIpKSB7CiAgICAgIGNvbnN0IHNlcnZpY2VzID0gZXhlY0NvbW1hbmQoCiAgICAgICAgInN5c3RlbWN0bCBsaXN0LXVuaXRzIC0tdHlwZT1zZXJ2aWNlIC0tc3RhdGU9cnVubmluZyAtLW5vLXBhZ2VyIgogICAgICApOwogICAgICBzZXJ2aWNlQ291bnQgPSBzZXJ2aWNlcwogICAgICAgIC5zcGxpdCgiXG4iKQogICAgICAgIC5maWx0ZXIoKGxpbmUpID0+IGxpbmUuaW5jbHVkZXMoIi5zZXJ2aWNlIikpLmxlbmd0aDsKICAgIH0gZWxzZSBpZiAoY29tbWFuZEV4aXN0cygic2VydmljZSIpKSB7CiAgICAgIGNvbnN0IHNlcnZpY2VzID0gZXhlY0NvbW1hbmQoInNlcnZpY2UgLS1zdGF0dXMtYWxsIik7CiAgICAgIHNlcnZpY2VDb3VudCA9IHNlcnZpY2VzCiAgICAgICAgLnNwbGl0KCJcbiIpCiAgICAgICAgLmZpbHRlcigobGluZSkgPT4gbGluZS5pbmNsdWRlcygiKyIpKS5sZW5ndGg7CiAgICB9CgogICAgaWYgKHNlcnZpY2VDb3VudCA+IDApIHsKICAgICAgY29uc3QgcmVzdWx0ID0gYCR7c2VydmljZUNvdW50fSBzZXJ2aWNlc2A7CiAgICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJzZXJ2aWNlc19ydW5uaW5nIiwgcmVzdWx0KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICB9IGNhdGNoIHt9CgogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJzZXJ2aWNlc19ydW5uaW5nIiwgIiIpOwogIHJldHVybiAiIjsKfQo=";
325
+ const P = "data:video/mp2t;base64,LyoqCiAqIE1lbW9yeSBhbmQgZGlzay1yZWxhdGVkIHN5c3RlbSBpbmZvcm1hdGlvbiBmdW5jdGlvbnMKICogQG1vZHVsZSBpbmZvL21lbW9yeQogKi8KCmltcG9ydCBvcyBmcm9tICJvcyI7CmltcG9ydCBmcyBmcm9tICJmcyI7CmltcG9ydCB0eXBlIHsgSW5mb0NvbnRleHQgfSBmcm9tICIuLi90eXBlcy9pbnRlcm5hbC10eXBlcyI7CmltcG9ydCB7IElTX0xJTlVYLCBJU19NQUMgfSBmcm9tICIuLi91dGlscy9wbGF0Zm9ybSI7CmltcG9ydCB7IGV4ZWNDb21tYW5kIH0gZnJvbSAiLi4vdXRpbHMvY29tbWFuZCI7CmltcG9ydCB7IGdldENhY2hlZFZhbHVlLCBzZXRDYWNoZWRWYWx1ZSB9IGZyb20gIi4uL2NhY2hlL2NhY2hlIjsKCi8qKgogKiBHZXRzIG1lbW9yeSB1c2FnZSBpbiBnaWdhYnl0ZXMKICogUmVhZHMgZnJvbSAvcHJvYy9tZW1pbmZvIG9uIExpbnV4LCBmYWxscyBiYWNrIHRvIG9zLnRvdGFsbWVtKCkKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBNZW1vcnkgdXNhZ2UgYXMgInVzZWQvdG90YWwgR0IiCiAqIEBleGFtcGxlICIxMi8zMkdCIiwgIjYvMTZHQiIKICovCmV4cG9ydCBmdW5jdGlvbiByYW1fdXNlZChjb250ZXh0OiBJbmZvQ29udGV4dCk6IHN0cmluZyB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInJhbV91c2VkIik7CiAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDsKCiAgaWYgKElTX0xJTlVYKSB7CiAgICB0cnkgewogICAgICBjb25zdCBtZW1pbmZvID0gZnMucmVhZEZpbGVTeW5jKCIvcHJvYy9tZW1pbmZvIiwgInV0ZjgiKTsKICAgICAgY29uc3QgdG90YWxNYXRjaCA9IG1lbWluZm8ubWF0Y2goL01lbVRvdGFsOlxzKyhcZCspIGtCLyk7CiAgICAgIGNvbnN0IGZyZWVNYXRjaCA9IG1lbWluZm8ubWF0Y2goL01lbUZyZWU6XHMrKFxkKykga0IvKTsKCiAgICAgIGlmICh0b3RhbE1hdGNoICYmIGZyZWVNYXRjaCkgewogICAgICAgIGNvbnN0IHRvdGFsTUIgPSBNYXRoLnJvdW5kKHBhcnNlSW50KHRvdGFsTWF0Y2hbMV0pIC8gMTAyNCk7CiAgICAgICAgY29uc3QgZnJlZU1CID0gTWF0aC5yb3VuZChwYXJzZUludChmcmVlTWF0Y2hbMV0pIC8gMTAyNCk7CiAgICAgICAgY29uc3QgdXNlZE1CID0gdG90YWxNQiAtIGZyZWVNQjsKCiAgICAgICAgY29uc3QgdG90YWxHQiA9IE1hdGgucm91bmQodG90YWxNQiAvIDEwMjQpOwogICAgICAgIGNvbnN0IHVzZWRHQiA9IE1hdGgucm91bmQodXNlZE1CIC8gMTAyNCk7CgogICAgICAgIGNvbnN0IHJlc3VsdCA9IGAke3VzZWRHQn0vJHt0b3RhbEdCfUdCYDsKICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAicmFtX3VzZWQiLCByZXN1bHQpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgIH0gY2F0Y2gge30KICB9CgogIGNvbnN0IHRvdGFsTWVtID0gb3MudG90YWxtZW0oKTsKICBjb25zdCBmcmVlTWVtID0gb3MuZnJlZW1lbSgpOwogIGNvbnN0IHVzZWRNZW0gPSB0b3RhbE1lbSAtIGZyZWVNZW07CgogIGNvbnN0IHRvdGFsR0IgPSBNYXRoLnJvdW5kKHRvdGFsTWVtIC8gKDEwMjQgKiAxMDI0ICogMTAyNCkpOwogIGNvbnN0IHVzZWRHQiA9IE1hdGgucm91bmQodXNlZE1lbSAvICgxMDI0ICogMTAyNCAqIDEwMjQpKTsKCiAgY29uc3QgcmVzdWx0ID0gYCR7dXNlZEdCfS8ke3RvdGFsR0J9R0JgOwogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJyYW1fdXNlZCIsIHJlc3VsdCk7CiAgcmV0dXJuIHJlc3VsdDsKfQoKLyoqCiAqIEdldHMgYXZhaWxhYmxlIG1lbW9yeSBpbiBnaWdhYnl0ZXMKICogUmVhZHMgTWVtQXZhaWxhYmxlIGZyb20gL3Byb2MvbWVtaW5mbyAoTGludXgpIG9yIGRlcml2ZXMgaXQgZnJvbQogKiB2bV9zdGF0J3MgZnJlZStpbmFjdGl2ZSBwYWdlcyAobWFjT1MpCiAqIEByZXR1cm5zIEF2YWlsYWJsZSBtZW1vcnkgd2l0aCAiR0IgYXZhaWxhYmxlIiBzdWZmaXggb3IgZW1wdHkgc3RyaW5nCiAqIEBleGFtcGxlICIxMkdCIGF2YWlsYWJsZSIsICI0R0IgYXZhaWxhYmxlIgogKi8KZXhwb3J0IGZ1bmN0aW9uIG1lbW9yeV9hdmFpbGFibGUoKTogc3RyaW5nIHsKICBpZiAoSVNfTElOVVgpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IG1lbWluZm8gPSBmcy5yZWFkRmlsZVN5bmMoIi9wcm9jL21lbWluZm8iLCAidXRmOCIpOwogICAgICBjb25zdCBhdmFpbGFibGVNYXRjaCA9IG1lbWluZm8ubWF0Y2goL01lbUF2YWlsYWJsZTpccysoXGQrKSBrQi8pOwogICAgICBpZiAoYXZhaWxhYmxlTWF0Y2gpIHsKICAgICAgICBjb25zdCBhdmFpbGFibGVHQiA9IE1hdGgucm91bmQocGFyc2VJbnQoYXZhaWxhYmxlTWF0Y2hbMV0pIC8gMTAyNCAvIDEwMjQpOwogICAgICAgIHJldHVybiBgJHthdmFpbGFibGVHQn1HQiBhdmFpbGFibGVgOwogICAgICB9CiAgICB9IGNhdGNoIHt9CiAgICByZXR1cm4gIiI7CiAgfQoKICBpZiAoSVNfTUFDKSB7CiAgICB0cnkgewogICAgICBjb25zdCB2bVN0YXQgPSBleGVjQ29tbWFuZCgidm1fc3RhdCIpOwogICAgICBjb25zdCBwYWdlU2l6ZU1hdGNoID0gdm1TdGF0Lm1hdGNoKC9wYWdlIHNpemUgb2YgKFxkKykgYnl0ZXMvKTsKICAgICAgY29uc3QgZnJlZU1hdGNoID0gdm1TdGF0Lm1hdGNoKC9QYWdlcyBmcmVlOlxzKyhcZCspXC4vKTsKICAgICAgY29uc3QgaW5hY3RpdmVNYXRjaCA9IHZtU3RhdC5tYXRjaCgvUGFnZXMgaW5hY3RpdmU6XHMrKFxkKylcLi8pOwoKICAgICAgaWYgKHBhZ2VTaXplTWF0Y2ggJiYgZnJlZU1hdGNoICYmIGluYWN0aXZlTWF0Y2gpIHsKICAgICAgICBjb25zdCBwYWdlU2l6ZSA9IHBhcnNlSW50KHBhZ2VTaXplTWF0Y2hbMV0pOwogICAgICAgIGNvbnN0IGF2YWlsYWJsZVBhZ2VzID0gcGFyc2VJbnQoZnJlZU1hdGNoWzFdKSArIHBhcnNlSW50KGluYWN0aXZlTWF0Y2hbMV0pOwogICAgICAgIGNvbnN0IGF2YWlsYWJsZUdCID0gTWF0aC5yb3VuZCgoYXZhaWxhYmxlUGFnZXMgKiBwYWdlU2l6ZSkgLyAoMTAyNCAqIDEwMjQgKiAxMDI0KSk7CiAgICAgICAgcmV0dXJuIGAke2F2YWlsYWJsZUdCfUdCIGF2YWlsYWJsZWA7CiAgICAgIH0KICAgIH0gY2F0Y2gge30KICAgIHJldHVybiAiIjsKICB9CgogIHJldHVybiAiIjsKfQoKLyoqCiAqIEdldHMgc3dhcCBtZW1vcnkgdXNhZ2UKICogQ2FsY3VsYXRlcyBzd2FwIHVzYWdlIGZyb20gL3Byb2MvbWVtaW5mbyAoTGludXgpIG9yIGBzeXNjdGwgdm0uc3dhcHVzYWdlYAogKiAobWFjT1MpCiAqIEByZXR1cm5zIFN3YXAgdXNhZ2UgYXMgInBlcmNlbnRhZ2UgKHNpemUgTUIpIHN3YXAiIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiMTUlICg1MTJNQikgc3dhcCIsICIwJSAoME1CKSBzd2FwIgogKi8KZXhwb3J0IGZ1bmN0aW9uIHN3YXBfdXNlZCgpOiBzdHJpbmcgewogIGlmIChJU19MSU5VWCkgewogICAgdHJ5IHsKICAgICAgY29uc3QgbWVtaW5mbyA9IGZzLnJlYWRGaWxlU3luYygiL3Byb2MvbWVtaW5mbyIsICJ1dGY4Iik7CiAgICAgIGNvbnN0IHN3YXBUb3RhbE1hdGNoID0gbWVtaW5mby5tYXRjaCgvU3dhcFRvdGFsOlxzKyhcZCspIGtCLyk7CiAgICAgIGNvbnN0IHN3YXBGcmVlTWF0Y2ggPSBtZW1pbmZvLm1hdGNoKC9Td2FwRnJlZTpccysoXGQrKSBrQi8pOwoKICAgICAgaWYgKHN3YXBUb3RhbE1hdGNoICYmIHN3YXBGcmVlTWF0Y2gpIHsKICAgICAgICBjb25zdCBzd2FwVG90YWwgPSBwYXJzZUludChzd2FwVG90YWxNYXRjaFsxXSk7CiAgICAgICAgY29uc3Qgc3dhcEZyZWUgPSBwYXJzZUludChzd2FwRnJlZU1hdGNoWzFdKTsKICAgICAgICBjb25zdCBzd2FwVXNlZCA9IHN3YXBUb3RhbCAtIHN3YXBGcmVlOwoKICAgICAgICBpZiAoc3dhcFRvdGFsID4gMCkgewogICAgICAgICAgY29uc3Qgc3dhcFVzZWRQZXJjZW50ID0gTWF0aC5yb3VuZCgoc3dhcFVzZWQgLyBzd2FwVG90YWwpICogMTAwKTsKICAgICAgICAgIGNvbnN0IHN3YXBVc2VkTUIgPSBNYXRoLnJvdW5kKHN3YXBVc2VkIC8gMTAyNCk7CiAgICAgICAgICByZXR1cm4gYCR7c3dhcFVzZWRQZXJjZW50fSUgKCR7c3dhcFVzZWRNQn1NQikgc3dhcGA7CiAgICAgICAgfQogICAgICB9CiAgICB9IGNhdGNoIHt9CiAgICByZXR1cm4gIiI7CiAgfQoKICBpZiAoSVNfTUFDKSB7CiAgICB0cnkgewogICAgICBjb25zdCBzd2FwdXNhZ2UgPSBleGVjQ29tbWFuZCgic3lzY3RsIC1uIHZtLnN3YXB1c2FnZSIpOwogICAgICBjb25zdCBtYXRjaCA9IHN3YXB1c2FnZS5tYXRjaCgKICAgICAgICAvdG90YWxccyo9XHMqKFtcZC5dKylNXHMrdXNlZFxzKj1ccyooW1xkLl0rKU1ccytmcmVlXHMqPVxzKihbXGQuXSspTS8KICAgICAgKTsKCiAgICAgIGlmIChtYXRjaCkgewogICAgICAgIGNvbnN0IHN3YXBUb3RhbCA9IHBhcnNlRmxvYXQobWF0Y2hbMV0pOwogICAgICAgIGNvbnN0IHN3YXBVc2VkTUIgPSBwYXJzZUZsb2F0KG1hdGNoWzJdKTsKCiAgICAgICAgaWYgKHN3YXBUb3RhbCA+IDApIHsKICAgICAgICAgIGNvbnN0IHN3YXBVc2VkUGVyY2VudCA9IE1hdGgucm91bmQoKHN3YXBVc2VkTUIgLyBzd2FwVG90YWwpICogMTAwKTsKICAgICAgICAgIHJldHVybiBgJHtzd2FwVXNlZFBlcmNlbnR9JSAoJHtNYXRoLnJvdW5kKHN3YXBVc2VkTUIpfU1CKSBzd2FwYDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAiMCUgKDBNQikgc3dhcCI7CiAgICAgIH0KICAgIH0gY2F0Y2gge30KICAgIHJldHVybiAiIjsKICB9CgogIHJldHVybiAiIjsKfQoKLyoqCiAqIEdldHMgcm9vdCBmaWxlc3lzdGVtIGRpc2sgdXNhZ2UgcGVyY2VudGFnZQogKiBVc2VzIGRmIGNvbW1hbmQgb24gTGludXgvQW5kcm9pZC9tYWNPUwogKiBAcGFyYW0gY29udGV4dCAtIEluZm8gY29udGV4dCB3aXRoIGNhY2hlCiAqIEByZXR1cm5zIFBlcmNlbnRhZ2Ugc3RyaW5nIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiNDUlIiwgIjc4JSIKICovCmV4cG9ydCBmdW5jdGlvbiBkaXNrX3VzZWQoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJkaXNrX3VzZWQiKTsKICBpZiAoY2FjaGVkICE9PSBudWxsKSByZXR1cm4gY2FjaGVkOwoKICBpZiAoSVNfTElOVVggfHwgSVNfTUFDKSB7CiAgICB0cnkgewogICAgICBjb25zdCBkZiA9IGV4ZWNDb21tYW5kKCJkZiAtaCIpOwogICAgICBsZXQgZGlza1VzYWdlID0gIiI7CgogICAgICBpZiAoZGYuaW5jbHVkZXMoIi9zdG9yYWdlL2VtdWxhdGVkIikpIHsKICAgICAgICBjb25zdCBtYXRjaCA9IGRmLm1hdGNoKC9ccysoXGQrJSlccytcL3N0b3JhZ2VcL2VtdWxhdGVkLyk7CiAgICAgICAgZGlza1VzYWdlID0gbWF0Y2ggPyBtYXRjaFsxXSA6ICIiOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IGxpbmVzID0gZGYuc3BsaXQoIlxuIik7CiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7CiAgICAgICAgICBpZiAobGluZS50cmltKCkuZW5kc1dpdGgoIiAvIikpIHsKICAgICAgICAgICAgY29uc3QgcGFydHMgPSBsaW5lLnRyaW0oKS5zcGxpdCgvXHMrLyk7CiAgICAgICAgICAgIGNvbnN0IHBlcmNlbnRJbmRleCA9IHBhcnRzLmZpbmRJbmRleCgocGFydCkgPT4gcGFydC5pbmNsdWRlcygiJSIpKTsKICAgICAgICAgICAgaWYgKHBlcmNlbnRJbmRleCAhPT0gLTEpIHsKICAgICAgICAgICAgICBkaXNrVXNhZ2UgPSBwYXJ0c1twZXJjZW50SW5kZXhdOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIWRpc2tVc2FnZSkgewogICAgICAgICAgY29uc3Qgcm9vdE1hdGNoID0gZGYubWF0Y2goLyhcZCslKVxzK1wvXHMqJC9tKTsKICAgICAgICAgIGRpc2tVc2FnZSA9IHJvb3RNYXRjaCA/IHJvb3RNYXRjaFsxXSA6ICIiOwogICAgICAgIH0KICAgICAgfQoKICAgICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImRpc2tfdXNlZCIsIGRpc2tVc2FnZSk7CiAgICAgIHJldHVybiBkaXNrVXNhZ2U7CiAgICB9IGNhdGNoIHt9CiAgfQoKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGlza191c2VkIiwgIiIpOwogIHJldHVybiAiIjsKfQoKLyoqCiAqIE1pbmltdW0gdG90YWwgc2l6ZSAoaW4gS0IpIGZvciBhIHBhcnRpdGlvbiB0byBiZSBjb25zaWRlcmVkIGEgcmVhbCBkaXNrCiAqIHJhdGhlciB0aGFuIGEgc21hbGwgc3lzdGVtL2Jvb3QgcGFydGl0aW9uCiAqLwpjb25zdCBNSU5fUkVBTF9ESVNLX0tCID0gMTAgKiAxMDI0ICogMTAyNDsgLy8gMTBHQgoKLyoqCiAqIEdldHMgZGlzayBzaXplICh1c2VkL3RvdGFsKSBmb3IgZWFjaCByZWFsIGRpc2sKICogVXNlcyBgZGYgLWtgIG9uIExpbnV4L21hY09TLCBmaWx0ZXJpbmcgb3V0IHBzZXVkbyBmaWxlc3lzdGVtcywgc3lzdGVtL2Jvb3QKICogcGFydGl0aW9ucyAoZS5nLiAvYm9vdCwgL1N5c3RlbS9Wb2x1bWVzLyopLCBhbmQgYW55dGhpbmcgdW5kZXIgMTBHQiwgc2luY2UKICogdGhvc2UgYXJlbid0IGRpc2tzIGEgdXNlciB3b3VsZCBjYXJlIGFib3V0LiBXaGVuIGV4YWN0bHkgb25lIHJlYWwgZGlzayBpcwogKiBmb3VuZCAodGhlIGNvbW1vbiBjYXNlKSB0aGUgcmVzdWx0IG9taXRzIHRoZSBtb3VudCBwb2ludDsgd2hlbiBtdWx0aXBsZQogKiByZWFsIGRpc2tzIGFyZSBmb3VuZCAoZS5nLiBhIGRhdGEgZHJpdmUgb3IgZXh0ZXJuYWwgdm9sdW1lKSwgZWFjaCBpcwogKiBsYWJlbGVkIGJ5IGl0cyBtb3VudCBwb2ludC4KICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBEaXNrIHNpemUgYXMgInVzZWQvdG90YWwgR0IiIG9yICJtb3VudCh1c2VkL3RvdGFsIEdCKSAuLi4iIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiMjU2LzUxMkdCIiwgIi8oMTAwLzUwMEdCKSAvVm9sdW1lcy9CYWNrdXAoOTAwLzIwMDBHQikiCiAqLwpleHBvcnQgZnVuY3Rpb24gZGlza19zaXplKGNvbnRleHQ6IEluZm9Db250ZXh0KTogc3RyaW5nIHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGlza19zaXplIik7CiAgaWYgKGNhY2hlZCAhPT0gbnVsbCkgcmV0dXJuIGNhY2hlZDsKCiAgaWYgKCFJU19MSU5VWCAmJiAhSVNfTUFDKSB7CiAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGlza19zaXplIiwgIiIpOwogICAgcmV0dXJuICIiOwogIH0KCiAgdHJ5IHsKICAgIGNvbnN0IGRmID0gZXhlY0NvbW1hbmQoImRmIC1rIik7CiAgICBjb25zdCBsaW5lcyA9IGRmLnRyaW0oKS5zcGxpdCgiXG4iKS5zbGljZSgxKTsKICAgIGNvbnN0IGRpc2tzOiB7IG1vdW50OiBzdHJpbmc7IHVzZWRHQjogbnVtYmVyOyB0b3RhbEdCOiBudW1iZXIgfVtdID0gW107CgogICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7CiAgICAgIGNvbnN0IHBhcnRzID0gbGluZS50cmltKCkuc3BsaXQoL1xzKy8pOwogICAgICBpZiAocGFydHMubGVuZ3RoIDwgNikgY29udGludWU7CgogICAgICBjb25zdCBmaWxlc3lzdGVtID0gcGFydHNbMF07CiAgICAgIGNvbnN0IHRvdGFsS0IgPSBwYXJzZUludChwYXJ0c1sxXSk7CiAgICAgIGNvbnN0IHVzZWRLQiA9IHBhcnNlSW50KHBhcnRzWzJdKTsKICAgICAgY29uc3QgbW91bnQgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTsKCiAgICAgIGlmIChpc05hTih0b3RhbEtCKSB8fCBpc05hTih1c2VkS0IpIHx8IHRvdGFsS0IgPCBNSU5fUkVBTF9ESVNLX0tCKSBjb250aW51ZTsKCiAgICAgIGlmIChJU19NQUMpIHsKICAgICAgICAvLyBPbmx5IHRoZSBib290IGRpc2sgKCIvIikgYW5kIGV4dGVybmFsbHkgbW91bnRlZCByZWFsIGRpc2tzIGNvdW50LgogICAgICAgIC8vIEFQRlMgaW50ZXJuYWwgc3lzdGVtIHZvbHVtZXMgKERhdGEsIFZNLCBQcmVib290LCBVcGRhdGUsIC4uLikgYWxsCiAgICAgICAgLy8gbGl2ZSB1bmRlciAvU3lzdGVtL1ZvbHVtZXMgYW5kIGFyZW4ndCBzZXBhcmF0ZSBwaHlzaWNhbCBkaXNrcy4KICAgICAgICBpZiAobW91bnQgIT09ICIvIiAmJiAhbW91bnQuc3RhcnRzV2l0aCgiL1ZvbHVtZXMvIikpIGNvbnRpbnVlOwogICAgICB9IGVsc2UgewogICAgICAgIGlmICgKICAgICAgICAgIGZpbGVzeXN0ZW0uc3RhcnRzV2l0aCgiZGV2dG1wZnMiKSB8fAogICAgICAgICAgZmlsZXN5c3RlbS5zdGFydHNXaXRoKCJ0bXBmcyIpIHx8CiAgICAgICAgICBmaWxlc3lzdGVtID09PSAib3ZlcmxheSIgfHwKICAgICAgICAgIG1vdW50LnN0YXJ0c1dpdGgoIi9ib290IikgfHwKICAgICAgICAgIG1vdW50LnN0YXJ0c1dpdGgoIi9kZXYiKSB8fAogICAgICAgICAgbW91bnQuc3RhcnRzV2l0aCgiL3Byb2MiKSB8fAogICAgICAgICAgbW91bnQuc3RhcnRzV2l0aCgiL3N5cyIpIHx8CiAgICAgICAgICBtb3VudC5zdGFydHNXaXRoKCIvcnVuIikKICAgICAgICApIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgfQoKICAgICAgZGlza3MucHVzaCh7CiAgICAgICAgbW91bnQsCiAgICAgICAgdXNlZEdCOiBNYXRoLnJvdW5kKHVzZWRLQiAvICgxMDI0ICogMTAyNCkpLAogICAgICAgIHRvdGFsR0I6IE1hdGgucm91bmQodG90YWxLQiAvICgxMDI0ICogMTAyNCkpLAogICAgICB9KTsKICAgIH0KCiAgICBsZXQgcmVzdWx0ID0gIiI7CiAgICBpZiAoZGlza3MubGVuZ3RoID09PSAxKSB7CiAgICAgIHJlc3VsdCA9IGAke2Rpc2tzWzBdLnVzZWRHQn0vJHtkaXNrc1swXS50b3RhbEdCfUdCYDsKICAgIH0gZWxzZSBpZiAoZGlza3MubGVuZ3RoID4gMSkgewogICAgICByZXN1bHQgPSBkaXNrcwogICAgICAgIC5tYXAoKGQpID0+IGAke2QubW91bnR9KCR7ZC51c2VkR0J9LyR7ZC50b3RhbEdCfUdCKWApCiAgICAgICAgLmpvaW4oIiAiKTsKICAgIH0KCiAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGlza19zaXplIiwgcmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfSBjYXRjaCB7fQoKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGlza19zaXplIiwgIiIpOwogIHJldHVybiAiIjsKfQoKLyoqCiAqIEdldHMgbW91bnRlZCBmaWxlc3lzdGVtIGluZm9ybWF0aW9uCiAqIExpc3RzIG5vbi1zeXN0ZW0gbW91bnQgcG9pbnRzIHdpdGggdXNhZ2UgZnJvbSBkZiAoTGludXgvbWFjT1MpCiAqIE9uIExpbnV4LCBleGNsdWRlcyAvLCAvZGV2LCAvcHJvYywgL3N5cyBhbmQgaW50ZXJuYWwgL1N5c3RlbS9Wb2x1bWVzIG1vdW50cy4KICogT24gbWFjT1MsIEFQRlMgaW50ZXJuYWwgdm9sdW1lcyAoRGF0YSwgVk0sIFByZWJvb3QsIFVwZGF0ZSwgLi4uKSBhbGwgbGl2ZQogKiB1bmRlciAvU3lzdGVtL1ZvbHVtZXMgYW5kIGFyZSBub3QgdXNlci1yZWxldmFudCwgc28gb25seSAvVm9sdW1lcyAoZXh0ZXJuYWwKICogZGlza3MsIG5ldHdvcmsgc2hhcmVzLCBkaXNrIGltYWdlcykgYXJlIHJlcG9ydGVkLgogKiBAcGFyYW0gY29udGV4dCAtIEluZm8gY29udGV4dCB3aXRoIGNhY2hlCiAqIEByZXR1cm5zIFNwYWNlLXNlcGFyYXRlZCBtb3VudCBwb2ludHMgd2l0aCB1c2FnZSBvciBlbXB0eSBzdHJpbmcKICogQGV4YW1wbGUgIi9ob21lKDQ1JSkgL21udC9kYXRhKDc4JSkiLCAiL1ZvbHVtZXMvQmFja3VwKDc4JSkiCiAqLwpleHBvcnQgZnVuY3Rpb24gbW91bnRfcG9pbnRzKGNvbnRleHQ6IEluZm9Db250ZXh0KTogc3RyaW5nIHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAibW91bnRfcG9pbnRzIik7CiAgaWYgKGNhY2hlZCAhPT0gbnVsbCkgcmV0dXJuIGNhY2hlZDsKCiAgaWYgKCFJU19MSU5VWCAmJiAhSVNfTUFDKSB7CiAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAibW91bnRfcG9pbnRzIiwgIiIpOwogICAgcmV0dXJuICIiOwogIH0KCiAgdHJ5IHsKICAgIGNvbnN0IGRmID0gZXhlY0NvbW1hbmQoImRmIC1oIik7CiAgICBjb25zdCBsaW5lcyA9IGRmLnNwbGl0KCJcbiIpLnNsaWNlKDEpOwogICAgY29uc3QgbW91bnRQb2ludHM6IHN0cmluZ1tdID0gW107CgogICAgbGluZXMuZm9yRWFjaCgobGluZSkgPT4gewogICAgICBjb25zdCBwYXJ0cyA9IGxpbmUudHJpbSgpLnNwbGl0KC9ccysvKTsKICAgICAgaWYgKHBhcnRzLmxlbmd0aCA8IDIpIHJldHVybjsKCiAgICAgIGNvbnN0IG1vdW50UG9pbnQgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTsKICAgICAgY29uc3QgdXNhZ2UgPSBwYXJ0cy5maW5kKChwYXJ0KSA9PiAvXlxkKyUkLy50ZXN0KHBhcnQpKSB8fCAiIjsKCiAgICAgIGlmICghdXNhZ2UpIHJldHVybjsKCiAgICAgIGlmIChJU19NQUMpIHsKICAgICAgICAvLyBTa2lwIHRoZSAiTWFjaW50b3NoIEhEIiBzZWxmLXN5bWxpbmsgYW5kIGFueSBvdGhlciBzeW1saW5rIGJhY2sgdG8gLwogICAgICAgIGlmIChtb3VudFBvaW50LnN0YXJ0c1dpdGgoIi9Wb2x1bWVzLyIpICYmIG1vdW50UG9pbnQgIT09ICIvIikgewogICAgICAgICAgbW91bnRQb2ludHMucHVzaChgJHttb3VudFBvaW50fSgke3VzYWdlfSlgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBpZiAoCiAgICAgICAgIW1vdW50UG9pbnQuc3RhcnRzV2l0aCgiL2RldiIpICYmCiAgICAgICAgIW1vdW50UG9pbnQuc3RhcnRzV2l0aCgiL3Byb2MiKSAmJgogICAgICAgICFtb3VudFBvaW50LnN0YXJ0c1dpdGgoIi9zeXMiKSAmJgogICAgICAgICFtb3VudFBvaW50LnN0YXJ0c1dpdGgoIi9TeXN0ZW0vVm9sdW1lcyIpICYmCiAgICAgICAgbW91bnRQb2ludCAhPT0gIi8iCiAgICAgICkgewogICAgICAgIG1vdW50UG9pbnRzLnB1c2goYCR7bW91bnRQb2ludH0oJHt1c2FnZX0pYCk7CiAgICAgIH0KICAgIH0pOwoKICAgIGNvbnN0IHJlc3VsdCA9IG1vdW50UG9pbnRzLnNsaWNlKDAsIDMpLmpvaW4oIiAiKTsKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJtb3VudF9wb2ludHMiLCByZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9IGNhdGNoIHt9CgogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJtb3VudF9wb2ludHMiLCAiIik7CiAgcmV0dXJuICIiOwp9Cg==", $ = "data:video/mp2t;base64,LyoqCiAqIE5ldHdvcmstcmVsYXRlZCBzeXN0ZW0gaW5mb3JtYXRpb24gZnVuY3Rpb25zCiAqIEBtb2R1bGUgaW5mby9uZXR3b3JrCiAqLwoKaW1wb3J0IG9zIGZyb20gIm9zIjsKaW1wb3J0IHR5cGUgeyBJbmZvQ29udGV4dCB9IGZyb20gIi4uL3R5cGVzL2ludGVybmFsLXR5cGVzIjsKaW1wb3J0IHsgSVNfTElOVVgsIElTX01BQyB9IGZyb20gIi4uL3V0aWxzL3BsYXRmb3JtIjsKaW1wb3J0IHsgZXhlY0NvbW1hbmQgfSBmcm9tICIuLi91dGlscy9jb21tYW5kIjsKaW1wb3J0IHsgZ2V0Q2FjaGVkVmFsdWUsIHNldENhY2hlZFZhbHVlIH0gZnJvbSAiLi4vY2FjaGUvY2FjaGUiOwoKLyoqCiAqIEdldHMgcHVibGljIElQIGFkZHJlc3MgZnJvbSBpcGluZm8uaW8KICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZSBhbmQgSVAgaW5mbwogKiBAcmV0dXJucyBQdWJsaWMgSVB2NCBhZGRyZXNzIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiMjAzLjAuMTEzLjQyIgogKi8KZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlwKGNvbnRleHQ6IEluZm9Db250ZXh0KTogUHJvbWlzZTxzdHJpbmc+IHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiaXAiKTsKICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkOwoKICBpZiAoIWNvbnRleHQuaXBJbmZvKSB7CiAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiaXAiLCAiIik7CiAgICByZXR1cm4gIiI7CiAgfQogIGNvbnN0IGlwID0gY29udGV4dC5pcEluZm8uaXAgfHwgIiI7CiAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImlwIiwgaXApOwogIHJldHVybiBpcDsKfQoKLyoqCiAqIEdldHMgbG9jYWwvcHJpdmF0ZSBJUCBhZGRyZXNzKGVzKQogKiBUcmllcyBpZmNvbmZpZyBhbmQgaXAgY29tbWFuZHMgb24gTGludXgsIGZhbGxzIGJhY2sgdG8gTm9kZS5qcyBBUEkKICogQHJldHVybnMgU3BhY2Utc2VwYXJhdGVkIGxvY2FsIElQIGFkZHJlc3NlcyAoUkZDIDE5MTggcmFuZ2VzKQogKiBAZXhhbXBsZSAiMTkyLjE2OC4xLjEwMCIgb3IgIjEwLjAuMC41MCAxOTIuMTY4LjEuMTAwIgogKi8KZXhwb3J0IGZ1bmN0aW9uIGlwbG9jYWwoKTogc3RyaW5nIHsKICBpZiAoSVNfTElOVVgpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IGlmY29uZmlnID0gZXhlY0NvbW1hbmQoImlmY29uZmlnIDI+L2Rldi9udWxsIik7CiAgICAgIGNvbnN0IHdsYW5NYXRjaCA9IGlmY29uZmlnLm1hdGNoKAogICAgICAgIC93bGFuMFtcc1xTXSo/aW5ldCAoXGQrXC5cZCtcLlxkK1wuXGQrKS8KICAgICAgKTsKICAgICAgaWYgKHdsYW5NYXRjaCkgewogICAgICAgIHJldHVybiB3bGFuTWF0Y2hbMV07CiAgICAgIH0KICAgIH0gY2F0Y2gge30KCiAgICB0cnkgewogICAgICBjb25zdCBpcEFkZHIgPSBleGVjQ29tbWFuZCgiaXAgYWRkciBzaG93IDI+L2Rldi9udWxsIik7CiAgICAgIGNvbnN0IGFkZHJlc3Nlczogc3RyaW5nW10gPSBbXTsKICAgICAgY29uc3QgbWF0Y2hlcyA9IGlwQWRkci5tYXRjaEFsbCgvaW5ldCAoXGQrXC5cZCtcLlxkK1wuXGQrKVwvXGQrL2cpOwogICAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIG1hdGNoZXMpIHsKICAgICAgICBpZiAoIW1hdGNoWzFdLnN0YXJ0c1dpdGgoIjEyNy4iKSkgewogICAgICAgICAgYWRkcmVzc2VzLnB1c2gobWF0Y2hbMV0pOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoYWRkcmVzc2VzLmxlbmd0aCA+IDApIHsKICAgICAgICByZXR1cm4gYWRkcmVzc2VzLmpvaW4oIiAiKTsKICAgICAgfQogICAgfSBjYXRjaCB7fQogIH0KCiAgY29uc3QgaW50ZXJmYWNlcyA9IG9zLm5ldHdvcmtJbnRlcmZhY2VzKCk7CiAgY29uc3QgYWRkcmVzc2VzOiBzdHJpbmdbXSA9IFtdOwoKICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMoaW50ZXJmYWNlcykpIHsKICAgIGZvciAoY29uc3QgZGV2aWNlIG9mIGludGVyZmFjZXNbbmFtZV0gfHwgW10pIHsKICAgICAgaWYgKGRldmljZS5mYW1pbHkgPT09ICJJUHY0IiAmJiAhZGV2aWNlLmludGVybmFsKSB7CiAgICAgICAgYWRkcmVzc2VzLnB1c2goZGV2aWNlLmFkZHJlc3MpOwogICAgICB9CiAgICB9CiAgfQoKICByZXR1cm4gYWRkcmVzc2VzLmpvaW4oIiAiKTsKfQoKLyoqCiAqIEdldHMgZ2VvZ3JhcGhpYyBjaXR5IGJhc2VkIG9uIHB1YmxpYyBJUAogKiBAcGFyYW0gY29udGV4dCAtIEluZm8gY29udGV4dCB3aXRoIElQIGdlb2xvY2F0aW9uIGRhdGEKICogQHJldHVybnMgQ2l0eSBuYW1lIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiU2FuIEZyYW5jaXNjbyIsICJOZXcgWW9yayIsICJMb25kb24iCiAqLwpleHBvcnQgYXN5bmMgZnVuY3Rpb24gY2l0eShjb250ZXh0OiBJbmZvQ29udGV4dCk6IFByb21pc2U8c3RyaW5nPiB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImNpdHkiKTsKICBpZiAoY2FjaGVkICE9PSBudWxsKSByZXR1cm4gY2FjaGVkOwoKICBpZiAoIWNvbnRleHQuaXBJbmZvIHx8ICFjb250ZXh0LmlwSW5mby5jaXR5KSB7CiAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiY2l0eSIsICIiKTsKICAgIHJldHVybiAiIjsKICB9CiAgY29uc3QgY2l0eSA9IGNvbnRleHQuaXBJbmZvLmNpdHk7CiAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImNpdHkiLCBjaXR5KTsKICByZXR1cm4gY2l0eTsKfQoKLyoqCiAqIEdldHMgcmV2ZXJzZSBETlMgaG9zdG5hbWUgd2l0aCBIVFRQIHByZWZpeAogKiBAcGFyYW0gY29udGV4dCAtIEluZm8gY29udGV4dCB3aXRoIElQIGluZm8KICogQHJldHVybnMgRG9tYWluIHdpdGggaHR0cDovLyBwcmVmaXggb3IgZW1wdHkgc3RyaW5nCiAqIEBleGFtcGxlICJodHRwOi8vZXhhbXBsZS5jb20iLCAiaHR0cDovL2hvc3QtMjAzLTAtMTEzLTQyLmV4YW1wbGUubmV0IgogKi8KZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvbWFpbihjb250ZXh0OiBJbmZvQ29udGV4dCk6IFByb21pc2U8c3RyaW5nPiB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImRvbWFpbiIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmICghY29udGV4dC5pcEluZm8gfHwgIWNvbnRleHQuaXBJbmZvLmhvc3RuYW1lKSB7CiAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZG9tYWluIiwgIiIpOwogICAgcmV0dXJuICIiOwogIH0KICBjb25zdCBkb21haW4gPSBgaHR0cDovLyR7Y29udGV4dC5pcEluZm8uaG9zdG5hbWV9YDsKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZG9tYWluIiwgZG9tYWluKTsKICByZXR1cm4gZG9tYWluOwp9CgovKioKICogR2V0cyBJbnRlcm5ldCBTZXJ2aWNlIFByb3ZpZGVyIG5hbWUKICogU3RyaXBzIEFTIG51bWJlciBwcmVmaXggZnJvbSBvcmdhbml6YXRpb24gc3RyaW5nCiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggSVAgaW5mbwogKiBAcmV0dXJucyBJU1AgbmFtZSBvciBlbXB0eSBzdHJpbmcKICogQGV4YW1wbGUgIkNvbWNhc3QgQ2FibGUiLCAiVmVyaXpvbiBCdXNpbmVzcyIsICJDbG91ZGZsYXJlIEluYyIKICovCmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc3AoY29udGV4dDogSW5mb0NvbnRleHQpOiBQcm9taXNlPHN0cmluZz4gewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJpc3AiKTsKICBpZiAoY2FjaGVkICE9PSBudWxsKSByZXR1cm4gY2FjaGVkOwoKICBpZiAoIWNvbnRleHQuaXBJbmZvIHx8ICFjb250ZXh0LmlwSW5mby5vcmcpIHsKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJpc3AiLCAiIik7CiAgICByZXR1cm4gIiI7CiAgfQogIGNvbnN0IGlzcCA9IGNvbnRleHQuaXBJbmZvLm9yZy5zcGxpdCgiICIpLnNsaWNlKDEpLmpvaW4oIiAiKTsKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiaXNwIiwgaXNwKTsKICByZXR1cm4gaXNwOwp9CgovKioKICogR2V0cyBhY3RpdmUgbmV0d29yayBpbnRlcmZhY2UgbmFtZXMKICogTGlzdHMgbm9uLWxvb3BiYWNrIGludGVyZmFjZXMgd2l0aCBJUHY0IGFkZHJlc3NlcyAoTGludXgvbWFjT1Mgb25seSkKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBTcGFjZS1zZXBhcmF0ZWQgaW50ZXJmYWNlIG5hbWVzIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiZXRoMCB3bGFuMCIsICJlbjAgZW4xIgogKi8KZXhwb3J0IGZ1bmN0aW9uIG5ldHdvcmtfaW50ZXJmYWNlcyhjb250ZXh0OiBJbmZvQ29udGV4dCk6IHN0cmluZyB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgIm5ldHdvcmtfaW50ZXJmYWNlcyIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmICghSVNfTElOVVggJiYgIUlTX01BQykgewogICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgIm5ldHdvcmtfaW50ZXJmYWNlcyIsICIiKTsKICAgIHJldHVybiAiIjsKICB9CgogIHRyeSB7CiAgICBjb25zdCBpbnRlcmZhY2VzID0gb3MubmV0d29ya0ludGVyZmFjZXMoKTsKICAgIGNvbnN0IGFjdGl2ZUludGVyZmFjZXM6IHN0cmluZ1tdID0gW107CgogICAgZm9yIChjb25zdCBbbmFtZSwgYWRkcnNdIG9mIE9iamVjdC5lbnRyaWVzKGludGVyZmFjZXMpKSB7CiAgICAgIGlmIChuYW1lICE9PSAibG8iKSB7CiAgICAgICAgY29uc3QgaXB2NEFkZHIgPSBhZGRycz8uZmluZCgKICAgICAgICAgIChhZGRyKSA9PiBhZGRyLmZhbWlseSA9PT0gIklQdjQiICYmICFhZGRyLmludGVybmFsCiAgICAgICAgKTsKICAgICAgICBpZiAoaXB2NEFkZHIpIHsKICAgICAgICAgIGFjdGl2ZUludGVyZmFjZXMucHVzaChuYW1lKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBjb25zdCByZXN1bHQgPSBhY3RpdmVJbnRlcmZhY2VzLmpvaW4oIiAiKTsKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJuZXR3b3JrX2ludGVyZmFjZXMiLCByZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9IGNhdGNoIHt9CgogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJuZXR3b3JrX2ludGVyZmFjZXMiLCAiIik7CiAgcmV0dXJuICIiOwp9Ci8qKgogKiBHZXRzIG9wZW4gVENQIHBvcnRzIHdpdGggc2VydmljZSBuYW1lcwogKiBVc2VzIGxzb2YgdG8gZmluZCBsaXN0ZW5pbmcgVENQIHBvcnRzIChMaW51eC9tYWNPUyBvbmx5KQogKiBAcGFyYW0gY29udGV4dCAtIEluZm8gY29udGV4dCB3aXRoIGNhY2hlCiAqIEByZXR1cm5zIFNwYWNlLXNlcGFyYXRlZCBwb3J0K3Byb2Nlc3MgcGFpcnMgb3IgZW1wdHkgc3RyaW5nCiAqIEBleGFtcGxlICI4MGh0dHAgNDQzaHR0cCAyMnNzaCIsICIzMDAwbm9kZSA1NDMycG9zdCIKICovCmV4cG9ydCBmdW5jdGlvbiBwb3J0cyhjb250ZXh0OiBJbmZvQ29udGV4dCk6IHN0cmluZyB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInBvcnRzIik7CiAgaWYgKGNhY2hlZCAhPT0gbnVsbCkgcmV0dXJuIGNhY2hlZDsKCiAgaWYgKElTX0xJTlVYIHx8IElTX01BQykgewogICAgdHJ5IHsKICAgICAgY29uc3QgbHNvZiA9IGV4ZWNDb21tYW5kKCJsc29mIC1uUCAtaVRDUCAtc1RDUDpMSVNURU4iKTsKICAgICAgY29uc3QgbGluZXMgPSBsc29mLnNwbGl0KCJcbiIpLnNsaWNlKDEpOwogICAgICBjb25zdCBwb3J0cyA9IG5ldyBTZXQ8c3RyaW5nPigpOwoKICAgICAgbGluZXMuZm9yRWFjaCgobGluZSkgPT4gewogICAgICAgIGNvbnN0IHBhcnRzID0gbGluZS5zcGxpdCgvXHMrLyk7CiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+PSA5KSB7CiAgICAgICAgICBjb25zdCBhZGRyZXNzID0gcGFydHNbOF07CiAgICAgICAgICBjb25zdCBwb3J0TWF0Y2ggPSBhZGRyZXNzLm1hdGNoKC86KFxkKykkLyk7CiAgICAgICAgICBpZiAocG9ydE1hdGNoKSB7CiAgICAgICAgICAgIGNvbnN0IHBvcnQgPSBwb3J0TWF0Y2hbMV07CiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3MgPSBwYXJ0c1swXS5zdWJzdHJpbmcoMCwgNCk7CiAgICAgICAgICAgIHBvcnRzLmFkZChgJHtwb3J0fSR7cHJvY2Vzc31gKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwoKICAgICAgY29uc3QgcmVzdWx0ID0gQXJyYXkuZnJvbShwb3J0cykuam9pbigiICIpOwogICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAicG9ydHMiLCByZXN1bHQpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfSBjYXRjaCB7fQogIH0KCiAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInBvcnRzIiwgIiIpOwogIHJldHVybiAiIjsKfQo=", q = "data:video/mp2t;base64,LyoqCiAqIFBsYXRmb3JtLXJlbGF0ZWQgc3lzdGVtIGluZm9ybWF0aW9uIGZ1bmN0aW9ucwogKiBAbW9kdWxlIGluZm8vcGxhdGZvcm0KICovCgppbXBvcnQgb3MgZnJvbSAib3MiOwppbXBvcnQgZnMgZnJvbSAiZnMiOwppbXBvcnQgdHlwZSB7IEluZm9Db250ZXh0IH0gZnJvbSAiLi4vdHlwZXMvaW50ZXJuYWwtdHlwZXMiOwppbXBvcnQgeyBJU19XSU5ET1dTLCBJU19NQUMsIElTX0xJTlVYIH0gZnJvbSAiLi4vdXRpbHMvcGxhdGZvcm0iOwppbXBvcnQgeyBleGVjQ29tbWFuZCwgY29tbWFuZEV4aXN0cyB9IGZyb20gIi4uL3V0aWxzL2NvbW1hbmQiOwppbXBvcnQgeyBnZXRDYWNoZWRWYWx1ZSwgc2V0Q2FjaGVkVmFsdWUgfSBmcm9tICIuLi9jYWNoZS9jYWNoZSI7CgovKioKICogR2V0cyB0aGUgY3VycmVudCB1c2VybmFtZQogKiBAcmV0dXJucyBDdXJyZW50IHN5c3RlbSB1c2VybmFtZQogKi8KZXhwb3J0IGZ1bmN0aW9uIHVzZXIoKTogc3RyaW5nIHsKICByZXR1cm4gb3MudXNlckluZm8oKS51c2VybmFtZTsKfQoKLyoqCiAqIEdldHMgdGhlIHN5c3RlbSBob3N0bmFtZQogKiBAcmV0dXJucyBDb21wdXRlciBob3N0bmFtZS9uZXR3b3JrIG5hbWUKICovCmV4cG9ydCBmdW5jdGlvbiBob3N0bmFtZSgpOiBzdHJpbmcgewogIHJldHVybiBvcy5ob3N0bmFtZSgpOwp9CgovKioKICogR2V0cyBvcGVyYXRpbmcgc3lzdGVtIG5hbWUgYW5kIHZlcnNpb24KICogUGxhdGZvcm0tc3BlY2lmaWMgZGV0ZWN0aW9uIGZvciBXaW5kb3dzLCBtYWNPUywgYW5kIExpbnV4CiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgT1MgbmFtZSBhbmQgdmVyc2lvbiBzdHJpbmcKICogQGV4YW1wbGUgIldpbmRvd3MgMTEgUHJvIiwgIm1hY09TIFZlbnR1cmEgMTMuMi4xIiwgIlVidW50dSAyMi4wNC4zIExUUyIKICovCmV4cG9ydCBmdW5jdGlvbiBvc19pbmZvKGNvbnRleHQ6IEluZm9Db250ZXh0KTogc3RyaW5nIHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAib3MiKTsKICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkOwoKICBjb25zdCBwbGF0Zm9ybSA9IG9zLnBsYXRmb3JtKCk7CiAgY29uc3QgcmVsZWFzZSA9IG9zLnJlbGVhc2UoKTsKICBsZXQgb3NOYW1lID0gIiI7CgogIGlmIChJU19XSU5ET1dTKSB7CiAgICB0cnkgewogICAgICBjb25zdCB2ZXJzaW9uID0gZXhlY0NvbW1hbmQoInZlciIpOwogICAgICBjb25zdCBtYXRjaCA9IHZlcnNpb24ubWF0Y2goL01pY3Jvc29mdCBXaW5kb3dzIFxbVmVyc2lvbiAoW15cXV0rKVxdLyk7CiAgICAgIG9zTmFtZSA9IG1hdGNoID8gYFdpbmRvd3MgJHttYXRjaFsxXX1gIDogYFdpbmRvd3MgJHtyZWxlYXNlfWA7CiAgICB9IGNhdGNoIHsKICAgICAgb3NOYW1lID0gYFdpbmRvd3MgJHtyZWxlYXNlfWA7CiAgICB9CiAgfSBlbHNlIGlmIChJU19NQUMpIHsKICAgIGNvbnN0IHByb2R1Y3ROYW1lID0gZXhlY0NvbW1hbmQoInN3X3ZlcnMgLXByb2R1Y3ROYW1lIik7CiAgICBjb25zdCBwcm9kdWN0VmVyc2lvbiA9IGV4ZWNDb21tYW5kKCJzd192ZXJzIC1wcm9kdWN0VmVyc2lvbiIpOwogICAgb3NOYW1lID0KICAgICAgcHJvZHVjdE5hbWUgJiYgcHJvZHVjdFZlcnNpb24KICAgICAgICA/IGAke3Byb2R1Y3ROYW1lfSAke3Byb2R1Y3RWZXJzaW9ufWAKICAgICAgICA6IGBtYWNPUyAke3JlbGVhc2V9YDsKICB9IGVsc2UgaWYgKElTX0xJTlVYKSB7CiAgICB0cnkgewogICAgICBjb25zdCBvc1JlbGVhc2UgPSBmcy5yZWFkRmlsZVN5bmMoIi9ldGMvb3MtcmVsZWFzZSIsICJ1dGY4Iik7CiAgICAgIGNvbnN0IG5hbWVNYXRjaCA9IG9zUmVsZWFzZS5tYXRjaCgvXk5BTUU9IihbXiJdKykiL20pOwogICAgICBjb25zdCB2ZXJzaW9uTWF0Y2ggPSBvc1JlbGVhc2UubWF0Y2goL15WRVJTSU9OX0lEPSIoW14iXSspIi9tKTsKICAgICAgb3NOYW1lID0gbmFtZU1hdGNoID8gbmFtZU1hdGNoWzFdIDogIkxpbnV4IjsKICAgICAgaWYgKHZlcnNpb25NYXRjaCkgb3NOYW1lICs9IGAgJHt2ZXJzaW9uTWF0Y2hbMV19YDsKICAgIH0gY2F0Y2ggewogICAgICBvc05hbWUgPSBgTGludXggJHtyZWxlYXNlfWA7CiAgICB9CiAgfSBlbHNlIHsKICAgIG9zTmFtZSA9IGAke3BsYXRmb3JtfSAke3JlbGVhc2V9YDsKICB9CgogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJvcyIsIG9zTmFtZSk7CiAgcmV0dXJuIG9zTmFtZTsKfQoKLyoqCiAqIEdldHMga2VybmVsIHZlcnNpb24gc3RyaW5nCiAqIFJldHVybnMgdGhlIG9wZXJhdGluZyBzeXN0ZW0ga2VybmVsIHZlcnNpb24gZnJvbSBvcy5yZWxlYXNlKCkKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBLZXJuZWwgdmVyc2lvbiBzdHJpbmcKICogQGV4YW1wbGUgIjUuMTUuMC01Ni1nZW5lcmljIiwgIjYuMTEuMTEtdmFsdmUxMi0xLW5lcHR1bmUiCiAqLwpleHBvcnQgZnVuY3Rpb24ga2VybmVsKGNvbnRleHQ6IEluZm9Db250ZXh0KTogc3RyaW5nIHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAia2VybmVsIik7CiAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDsKCiAgY29uc3Qga2VybmVsID0gb3MucmVsZWFzZSgpOwogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJrZXJuZWwiLCBrZXJuZWwpOwogIHJldHVybiBrZXJuZWw7Cn0KCi8qKgogKiBHZXRzIGRldmljZSBvciBjb21wdXRlciBtb2RlbCBuYW1lCiAqIFVzZXMgV01JIG9uIFdpbmRvd3MsIERNSSBvbiBMaW51eCwgZ2V0cHJvcCBvbiBBbmRyb2lkCiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgRGV2aWNlIG1vZGVsIG5hbWUgb3IgZW1wdHkgc3RyaW5nCiAqIEBleGFtcGxlICJEZWxsIE9wdGlQbGV4IDcwOTAiLCAiTWFjQm9vayBQcm8gMTYtaW5jaCIsICJWYWx2ZSBTdGVhbSBEZWNrIgogKi8KZXhwb3J0IGZ1bmN0aW9uIGRldmljZShjb250ZXh0OiBJbmZvQ29udGV4dCk6IHN0cmluZyB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImRldmljZSIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmIChJU19XSU5ET1dTKSB7CiAgICB0cnkgewogICAgICBjb25zdCB3bWljID0gZXhlY0NvbW1hbmQoIndtaWMgY3Nwcm9kdWN0IGdldCBuYW1lIC9mb3JtYXQ6bGlzdCIpOwogICAgICBjb25zdCBuYW1lTWF0Y2ggPSB3bWljLm1hdGNoKC9OYW1lPSguKykvKTsKICAgICAgaWYgKG5hbWVNYXRjaCkgewogICAgICAgIGNvbnN0IGRldmljZSA9IG5hbWVNYXRjaFsxXS50cmltKCk7CiAgICAgICAgaWYgKGRldmljZSAmJiBkZXZpY2UgIT09ICIiKSB7CiAgICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGV2aWNlIiwgZGV2aWNlKTsKICAgICAgICAgIHJldHVybiBkZXZpY2U7CiAgICAgICAgfQogICAgICB9CiAgICB9IGNhdGNoIHt9CgogICAgdHJ5IHsKICAgICAgY29uc3QgcHMgPSBleGVjQ29tbWFuZCgKICAgICAgICAncG93ZXJzaGVsbC5leGUgLUNvbW1hbmQgIkdldC1XbWlPYmplY3QgLUNsYXNzIFdpbjMyX0NvbXB1dGVyU3lzdGVtIHwgU2VsZWN0LU9iamVjdCAtRXhwYW5kUHJvcGVydHkgTW9kZWwiJwogICAgICApOwogICAgICBpZiAocHMudHJpbSgpKSB7CiAgICAgICAgY29uc3QgZGV2aWNlID0gcHMudHJpbSgpOwogICAgICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJkZXZpY2UiLCBkZXZpY2UpOwogICAgICAgIHJldHVybiBkZXZpY2U7CiAgICAgIH0KICAgIH0gY2F0Y2gge30KICB9IGVsc2UgaWYgKElTX01BQykgewogICAgY29uc3QgcHJvZmlsZSA9IGV4ZWNDb21tYW5kKCJzeXN0ZW1fcHJvZmlsZXIgU1BIYXJkd2FyZURhdGFUeXBlIik7CiAgICBjb25zdCBuYW1lTWF0Y2ggPSBwcm9maWxlLm1hdGNoKC9Nb2RlbCBOYW1lOlxzKiguKykvKTsKICAgIGlmIChuYW1lTWF0Y2gpIHsKICAgICAgY29uc3QgZGV2aWNlID0gbmFtZU1hdGNoWzFdLnRyaW0oKTsKICAgICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImRldmljZSIsIGRldmljZSk7CiAgICAgIHJldHVybiBkZXZpY2U7CiAgICB9CiAgfSBlbHNlIGlmIChJU19MSU5VWCkgewogICAgdHJ5IHsKICAgICAgaWYgKGNvbW1hbmRFeGlzdHMoImdldHByb3AiKSkgewogICAgICAgIGNvbnN0IGRldmljZSA9IGV4ZWNDb21tYW5kKCJnZXRwcm9wIHJvLnByb2R1Y3QubW9kZWwiKTsKICAgICAgICBpZiAoZGV2aWNlKSB7CiAgICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGV2aWNlIiwgZGV2aWNlKTsKICAgICAgICAgIHJldHVybiBkZXZpY2U7CiAgICAgICAgfQogICAgICB9CgogICAgICBjb25zdCBkbWlQYXRoID0gIi9zeXMvZGV2aWNlcy92aXJ0dWFsL2RtaS9pZC9wcm9kdWN0X25hbWUiOwogICAgICBpZiAoZnMuZXhpc3RzU3luYyhkbWlQYXRoKSkgewogICAgICAgIGNvbnN0IGRldmljZSA9IGZzLnJlYWRGaWxlU3luYyhkbWlQYXRoLCAidXRmOCIpLnRyaW0oKTsKICAgICAgICBpZiAoZGV2aWNlKSB7CiAgICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGV2aWNlIiwgZGV2aWNlKTsKICAgICAgICAgIHJldHVybiBkZXZpY2U7CiAgICAgICAgfQogICAgICB9CiAgICB9IGNhdGNoIHt9CiAgfQoKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGV2aWNlIiwgIiIpOwogIHJldHVybiAiIjsKfQo=", II = "data:video/mp2t;base64,LyoqCiAqIFByb2Nlc3MtcmVsYXRlZCBzeXN0ZW0gaW5mb3JtYXRpb24gZnVuY3Rpb25zCiAqIEBtb2R1bGUgaW5mby9wcm9jZXNzCiAqLwoKaW1wb3J0IG9zIGZyb20gIm9zIjsKaW1wb3J0IHR5cGUgeyBJbmZvQ29udGV4dCB9IGZyb20gIi4uL3R5cGVzL2ludGVybmFsLXR5cGVzIjsKaW1wb3J0IHsgSVNfTElOVVgsIElTX01BQyB9IGZyb20gIi4uL3V0aWxzL3BsYXRmb3JtIjsKaW1wb3J0IHsgZXhlY0NvbW1hbmQgfSBmcm9tICIuLi91dGlscy9jb21tYW5kIjsKaW1wb3J0IHsgZ2V0Q2FjaGVkVmFsdWUsIHNldENhY2hlZFZhbHVlIH0gZnJvbSAiLi4vY2FjaGUvY2FjaGUiOwoKLyoqCiAqIEdldHMgdGhlIGhpZ2hlc3QgQ1BVLWNvbnN1bWluZyBwcm9jZXNzCiAqIFVzZXMgcHMgY29tbWFuZCB0byBmaW5kIHRvcCBwcm9jZXNzIGJ5IENQVSB1c2FnZSAoTGludXgvbWFjT1Mgb25seSkKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBQcm9jZXNzIGluZm8gYXMgInBlcmNlbnRhZ2UgcHJvY2Vzc25hbWUiIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiOCUgZmlyZWZveCIsICIxNSUgY2hyb21lIiwgIjMlIHN5c3RlbWQiCiAqLwpleHBvcnQgZnVuY3Rpb24gdG9wX3Byb2Nlc3MoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJ0b3BfcHJvY2VzcyIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmIChJU19MSU5VWCkgewogICAgdHJ5IHsKICAgICAgY29uc3QgcHMgPSBleGVjQ29tbWFuZCgicHMgLWVvIHBjcHUsY29tbSAtLXNvcnQ9LSVjcHUgLS1uby1oZWFkZXJzIik7CiAgICAgIGNvbnN0IGxpbmVzID0gcHMuc3BsaXQoIlxuIik7CiAgICAgIGlmIChsaW5lcy5sZW5ndGggPiAwKSB7CiAgICAgICAgY29uc3QgdG9wUHJvY2VzcyA9IGxpbmVzWzBdLnRyaW0oKS5yZXBsYWNlKC9ccysvLCAiICIpLnNwbGl0KCIgIik7CiAgICAgICAgY29uc3QgY3B1ID0gdG9wUHJvY2Vzc1swXS5yZXBsYWNlKC9cLlxkKy8sICIlIik7CiAgICAgICAgY29uc3QgcHJvY2VzcyA9IHRvcFByb2Nlc3NbMV0uc3BsaXQoIi8iKS5wb3AoKTsKICAgICAgICBjb25zdCByZXN1bHQgPSBgJHtjcHV9JSAke3Byb2Nlc3N9YDsKICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAidG9wX3Byb2Nlc3MiLCByZXN1bHQpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgIH0gY2F0Y2gge30KICB9IGVsc2UgaWYgKElTX01BQykgewogICAgdHJ5IHsKICAgICAgLy8gLWMgZ2l2ZXMgdGhlIHNob3J0IGNvbW1hbmQgbmFtZSwgLXIgc29ydHMgYnkgJUNQVSBkZXNjZW5kaW5nCiAgICAgIGNvbnN0IHBzID0gZXhlY0NvbW1hbmQoInBzIC1BY2VvIHBjcHUsY29tbSAtciIpOwogICAgICBjb25zdCBsaW5lcyA9IHBzLnNwbGl0KCJcbiIpLmZpbHRlcigobGluZSkgPT4gbGluZS50cmltKCkpOwogICAgICBpZiAobGluZXMubGVuZ3RoID4gMSkgewogICAgICAgIGNvbnN0IHRvcFByb2Nlc3MgPSBsaW5lc1sxXS50cmltKCkuc3BsaXQoL1xzKy8pOwogICAgICAgIGNvbnN0IGNwdVZhbHVlID0gTWF0aC5yb3VuZChwYXJzZUZsb2F0KHRvcFByb2Nlc3NbMF0pKTsKICAgICAgICBjb25zdCBwcm9jZXNzID0gdG9wUHJvY2Vzcy5zbGljZSgxKS5qb2luKCIgIik7CiAgICAgICAgaWYgKCFpc05hTihjcHVWYWx1ZSkgJiYgcHJvY2VzcykgewogICAgICAgICAgY29uc3QgcmVzdWx0ID0gYCR7Y3B1VmFsdWV9JSAke3Byb2Nlc3N9YDsKICAgICAgICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJ0b3BfcHJvY2VzcyIsIHJlc3VsdCk7CiAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0KICAgICAgfQogICAgfSBjYXRjaCB7fQogIH0KCiAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInRvcF9wcm9jZXNzIiwgIiIpOwogIHJldHVybiAiIjsKfQoKLyoqCiAqIEdldHMgc3lzdGVtIHVwdGltZSBzaW5jZSBsYXN0IGJvb3QKICogQHJldHVybnMgVXB0aW1lIGZvcm1hdHRlZCBhcyAiWGQgWWggWm0iCiAqIEBleGFtcGxlICIyZCAxNGggMjNtIiwgIjBkIDNoIDQ1bSIKICovCmV4cG9ydCBmdW5jdGlvbiB1cHRpbWUoKTogc3RyaW5nIHsKICBjb25zdCB1cHRpbWVTZWNvbmRzID0gb3MudXB0aW1lKCk7CiAgY29uc3QgZGF5cyA9IE1hdGguZmxvb3IodXB0aW1lU2Vjb25kcyAvIDg2NDAwKTsKICBjb25zdCBob3VycyA9IE1hdGguZmxvb3IoKHVwdGltZVNlY29uZHMgJSA4NjQwMCkgLyAzNjAwKTsKICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcigodXB0aW1lU2Vjb25kcyAlIDM2MDApIC8gNjApOwogIHJldHVybiBgJHtkYXlzfWQgJHtob3Vyc31oICR7bWludXRlc31tYDsKfQoKLyoqCiAqIEdldHMgbnVtYmVyIG9mIGxvZ2dlZCBpbiB1c2VycwogKiBVc2VzIHdobyBjb21tYW5kIHRvIGNvdW50IGFjdGl2ZSB1c2VyIHNlc3Npb25zIChMaW51eC9tYWNPUyBvbmx5KQogKiBAcmV0dXJucyBVc2VyIGNvdW50IHdpdGggInVzZXJzIiBzdWZmaXggb3IgZW1wdHkgc3RyaW5nCiAqIEBleGFtcGxlICIzIHVzZXJzIiwgIjEgdXNlcnMiCiAqLwpleHBvcnQgZnVuY3Rpb24gdXNlcnNfbG9nZ2VkX2luKCk6IHN0cmluZyB7CiAgaWYgKCFJU19MSU5VWCAmJiAhSVNfTUFDKSByZXR1cm4gIiI7CgogIHRyeSB7CiAgICBjb25zdCB3aG8gPSBleGVjQ29tbWFuZCgid2hvIik7CiAgICBjb25zdCB1c2VycyA9IHdoby5zcGxpdCgiXG4iKS5maWx0ZXIoKGxpbmUpID0+IGxpbmUudHJpbSgpKS5sZW5ndGg7CiAgICBpZiAodXNlcnMgPiAwKSB7CiAgICAgIHJldHVybiBgJHt1c2Vyc30gdXNlcnNgOwogICAgfQogIH0gY2F0Y2gge30KICByZXR1cm4gIiI7Cn0K", gI = "data:video/mp2t;base64,LyoqCiAqIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnQKICogQG1vZHVsZSBpbmZvL3NldHRpbmdzCiAqLwoKaW1wb3J0IHBhdGggZnJvbSAicGF0aCI7CmltcG9ydCBvcyBmcm9tICJvcyI7CmltcG9ydCBmcyBmcm9tICJmcyI7CmltcG9ydCBwcm9jZXNzIGZyb20gInByb2Nlc3MiOwoKLy8gU2V0dGluZ3MgZmlsZSBwYXRocwpleHBvcnQgY29uc3QgU0VUVElOR1NfRklMRSA9IHBhdGguam9pbigKICBvcy5ob21lZGlyKCksCiAgIi5jb25maWciLAogICJzeXN0ZW1pbmZvLXNldHRpbmdzLmpzb24iLAopOwpleHBvcnQgY29uc3QgQ0FDSEVfRklMRSA9IHBhdGguam9pbihvcy50bXBkaXIoKSwgInN5c3RlbWluZm8tY2FjaGUuanNvbiIpOwoKLy8gQ29sb3IgY29kZXMKLy8KLy8gVGhlc2UgYXJlIGRlbGliZXJhdGVseSBkYXJrZXIvbW9yZSBzYXR1cmF0ZWQgdGhhbiBhIHR5cGljYWwgdGVybWluYWwKLy8gcGFsZXR0ZS4gVGhlIG9yaWdpbmFsIGJyaWdodCB2YXJpYW50cyAoZS5nLiB5ZWxsb3cgMjI2LCBjeWFuIDUxLCBncmF5IDI1MCkKLy8gaGF2ZSB2ZXJ5IGhpZ2ggbHVtaW5hbmNlIGFuZCBhcmUgbmVhcmx5IHVucmVhZGFibGUgb24gYSBsaWdodC93aGl0ZQovLyB0ZXJtaW5hbCBiYWNrZ3JvdW5kLiBgbGlnaHRibHVlYCB3YXMgYWxzbyBtaXNsYWJlbGVkOiBpdCBwb2ludGVkIGF0IGdvbGQKLy8gKDIyMCksIG5vdCBhIGJsdWUgYXQgYWxsLiBFdmVyeSB2YWx1ZSBiZWxvdyByZWFkcyBjbGVhcmx5IG9uIGJvdGggbGlnaHQKLy8gYW5kIGRhcmsgYmFja2dyb3VuZHMuCmV4cG9ydCBjb25zdCBjb2xvcnMgPSB7CiAgcmVzZXQ6ICJceDFiWzBtIiwKICByZWQ6ICJceDFiWzM4OzU7MTYwbSIsCiAgb3JhbmdlOiAiXHgxYlszODs1OzEzMG0iLAogIHllbGxvdzogIlx4MWJbMzg7NTs1OG0iLAogIGdyZWVuOiAiXHgxYlszODs1OzIybSIsCiAgYmx1ZTogIlx4MWJbMzg7NTsyNW0iLAogIGN5YW46ICJceDFiWzM4OzU7MjNtIiwKICBwdXJwbGU6ICJceDFiWzM4OzU7OTFtIiwKICBtYWdlbnRhOiAiXHgxYlszODs1OzEyNW0iLAogIGdyYXk6ICJceDFiWzM4OzU7MjM4bSIsCiAgbGlnaHRibHVlOiAiXHgxYlszODs1OzI0bSIsCn07CgovLyBCYWNrZ3JvdW5kIHZhcmlhbnRzLCBrZXllZCB0aGUgc2FtZSBhcyBgY29sb3JzYCwgdXNlZCB3aGVuCi8vIGBkaXNwbGF5LnNob3dfYmFja2dyb3VuZHNgIGlzIGVuYWJsZWQuIEVhY2ggZW50cnkgc2V0cyBpdHMgb3duIGJhY2tncm91bmQKLy8gYmxvY2sgcGx1cyBhIGZvcmVncm91bmQgdGV4dCBjb2xvciBjaG9zZW4gZm9yIGNvbnRyYXN0IGFnYWluc3QgaXQsIHNvCi8vIGV2ZXJ5IGl0ZW0gaXMgbGVnaWJsZSBvbiBpdHMgb3duIHJlZ2FyZGxlc3Mgb2Ygd2hhdCB0aGUgdGVybWluYWwncwovLyBiYWNrZ3JvdW5kIGFjdHVhbGx5IGlzLgpleHBvcnQgY29uc3QgYmFja2dyb3VuZHMgPSB7CiAgcmVkOiAiXHgxYls0ODs1Ozg4bVx4MWJbMzg7NTsyNTVtIiwKICBvcmFuZ2U6ICJceDFiWzQ4OzU7MTY2bVx4MWJbMzg7NTsyMzJtIiwKICB5ZWxsb3c6ICJceDFiWzQ4OzU7MTc4bVx4MWJbMzg7NTsyMzJtIiwKICBncmVlbjogIlx4MWJbNDg7NTsyMm1ceDFiWzM4OzU7MjU1bSIsCiAgYmx1ZTogIlx4MWJbNDg7NTsxOG1ceDFiWzM4OzU7MjU1bSIsCiAgY3lhbjogIlx4MWJbNDg7NTsyM21ceDFiWzM4OzU7MjU1bSIsCiAgcHVycGxlOiAiXHgxYls0ODs1OzU0bVx4MWJbMzg7NTsyNTVtIiwKICBtYWdlbnRhOiAiXHgxYls0ODs1OzUzbVx4MWJbMzg7NTsyNTVtIiwKICBncmF5OiAiXHgxYls0ODs1OzIzNm1ceDFiWzM4OzU7MjU1bSIsCiAgbGlnaHRibHVlOiAiXHgxYls0ODs1OzI2bVx4MWJbMzg7NTsyNTVtIiwKfTsKCi8vIERlZmF1bHQgc2V0dGluZ3MKZXhwb3J0IGNvbnN0IERFRkFVTFRfU0VUVElOR1MgPSB7CiAgZGlzcGxheV9vcmRlcjogWwogICAgWyJ1c2VyIiwgImhvc3RuYW1lIiwgIm9zIiwgImRldmljZSIsICJrZXJuZWwiLCAiY3B1IiwgImdwdSIsICJiZW5jaCJdLAogICAgWwogICAgICAiZGlza191c2VkIiwKICAgICAgImRpc2tfc2l6ZSIsCiAgICAgICJyYW1fdXNlZCIsCiAgICAgICJ0b3BfcHJvY2VzcyIsCiAgICAgICJ1cHRpbWUiLAogICAgICAidGVtcGVyYXR1cmUiLAogICAgICAiYmF0dGVyeSIsCiAgICAgICJsb2FkX2F2ZXJhZ2UiLAogICAgXSwKICAgIFsiaXAiLCAiaXBsb2NhbCIsICJjaXR5Il0sCiAgICBbInNoZWxsIiwgInNlcnZpY2VzX3J1bm5pbmciLCAicGFjbWFuIiwgImNvbnRhaW5lcnMiXSwKICBdLAogIGNvbG9yczogewogICAgdXNlcjogInJlZCIsCiAgICBob3N0bmFtZTogIm9yYW5nZSIsCiAgICBkaXNrX3VzZWQ6ICJwdXJwbGUiLAogICAgZGlza19zaXplOiAicHVycGxlIiwKICAgIHJhbV91c2VkOiAieWVsbG93IiwKICAgIHRvcF9wcm9jZXNzOiAibWFnZW50YSIsCiAgICB1cHRpbWU6ICJjeWFuIiwKICAgIGlwOiAiZ3JlZW4iLAogICAgaXBsb2NhbDogInllbGxvdyIsCiAgICBjaXR5OiAiZ3JlZW4iLAogICAgZG9tYWluOiAiZ3JheSIsCiAgICBpc3A6ICJsaWdodGJsdWUiLAogICAgb3M6ICJncmF5IiwKICAgIGNwdTogIm9yYW5nZSIsCiAgICBncHU6ICJ5ZWxsb3ciLAogICAgYmVuY2g6ICJyZWQiLAogICAgZGV2aWNlOiAieWVsbG93IiwKICAgIGtlcm5lbDogImdyZWVuIiwKICAgIHNoZWxsOiAib3JhbmdlIiwKICAgIHBhY21hbjogIm11bHRpY29sb3IiLAogICAgcG9ydHM6ICJtdWx0aWNvbG9yIiwKICAgIGNvbnRhaW5lcnM6ICJncmVlbiIsCiAgICBtZW1vcnlfYXZhaWxhYmxlOiAiYmx1ZSIsCiAgICBzd2FwX3VzZWQ6ICJwdXJwbGUiLAogICAgbG9hZF9hdmVyYWdlOiAicmVkIiwKICAgIHVzZXJzX2xvZ2dlZF9pbjogImN5YW4iLAogICAgbmV0d29ya19pbnRlcmZhY2VzOiAieWVsbG93IiwKICAgIG1vdW50X3BvaW50czogImdyYXkiLAogICAgc2VydmljZXNfcnVubmluZzogImdyZWVuIiwKICAgIHRlbXBlcmF0dXJlOiAicmVkIiwKICAgIGJhdHRlcnk6ICJncmVlbiIsCiAgICBzY3JlZW5fcmVzb2x1dGlvbjogImJsdWUiLAogIH0sCiAgZW1vamlzOiB7CiAgICB1c2VyOiAi8J+RpCAiLAogICAgaG9zdG5hbWU6ICLwn4+gICIsCiAgICBpcDogIvCfjI4gIiwKICAgIGlwbG9jYWw6ICLwn4yQICIsCiAgICBjaXR5OiAi8J+TjSAiLAogICAgZG9tYWluOiAi8J+UlyAiLAogICAgaXNwOiAi8J+RriAiLAogICAgb3M6ICLimqEgIiwKICAgIGNwdTogIvCfk4ggIiwKICAgIGdwdTogIvCfjq4gIiwKICAgIGJlbmNoOiAi8J+SqiAiLAogICAgZGV2aWNlOiAi8J+SuyAiLAogICAga2VybmVsOiAi8J+UpyAiLAogICAgc2hlbGw6ICLwn5CaICIsCiAgICBwYWNtYW46ICLwn5qAICIsCiAgICBkaXNrX3VzZWQ6ICLwn5OBICIsCiAgICBkaXNrX3NpemU6ICLwn5K9ICIsCiAgICByYW1fdXNlZDogIvCfkr4gIiwKICAgIHRvcF9wcm9jZXNzOiAi8J+UnSAiLAogICAgdXB0aW1lOiAi4o+x77iPICIsCiAgICBwb3J0czogIvCflIwgIiwKICAgIGNvbnRhaW5lcnM6ICLwn5OmICIsCiAgICBtZW1vcnlfYXZhaWxhYmxlOiAi8J+noCAiLAogICAgc3dhcF91c2VkOiAi8J+UhCAiLAogICAgbG9hZF9hdmVyYWdlOiAi4pqW77iPICIsCiAgICB1c2Vyc19sb2dnZWRfaW46ICLwn5GlICIsCiAgICBuZXR3b3JrX2ludGVyZmFjZXM6ICLwn4yQICIsCiAgICBtb3VudF9wb2ludHM6ICLwn5OCICIsCiAgICBzZXJ2aWNlc19ydW5uaW5nOiAi4pqZ77iPICIsCiAgICB0ZW1wZXJhdHVyZTogIvCfjKHvuI8gIiwKICAgIGJhdHRlcnlfY2hhcmdpbmc6ICLwn5SMICIsCiAgICBiYXR0ZXJ5OiAi8J+UiyAiLAogICAgc2NyZWVuX3Jlc29sdXRpb246ICLwn5al77iPICIsCiAgfSwKICBsYWJlbHM6IHsKICAgIHVzZXI6ICJVc2VyIiwKICAgIGhvc3RuYW1lOiAiSG9zdCIsCiAgICBpcDogIklQIiwKICAgIGlwbG9jYWw6ICJMb2NhbCBJUCIsCiAgICBjaXR5OiAiQ2l0eSIsCiAgICBkb21haW46ICJEb21haW4iLAogICAgaXNwOiAiSVNQIiwKICAgIG9zOiAiT1MiLAogICAgY3B1OiAiQ1BVIiwKICAgIGdwdTogIkdQVSIsCiAgICBiZW5jaDogIkJlbmNoIiwKICAgIGRldmljZTogIkRldmljZSIsCiAgICBrZXJuZWw6ICJLZXJuZWwiLAogICAgc2hlbGw6ICJTaGVsbCIsCiAgICBwYWNtYW46ICJQYWNrYWdlcyIsCiAgICBkaXNrX3VzZWQ6ICJEaXNrIiwKICAgIGRpc2tfc2l6ZTogIkRpc2sgU2l6ZSIsCiAgICByYW1fdXNlZDogIlJBTSIsCiAgICB0b3BfcHJvY2VzczogIlRvcCIsCiAgICB1cHRpbWU6ICJVcHRpbWUiLAogICAgcG9ydHM6ICJQb3J0cyIsCiAgICBjb250YWluZXJzOiAiQ29udGFpbmVycyIsCiAgICBtZW1vcnlfYXZhaWxhYmxlOiAiTWVtb3J5IiwKICAgIHN3YXBfdXNlZDogIlN3YXAiLAogICAgbG9hZF9hdmVyYWdlOiAiTG9hZCIsCiAgICB1c2Vyc19sb2dnZWRfaW46ICJVc2VycyIsCiAgICBuZXR3b3JrX2ludGVyZmFjZXM6ICJOZXR3b3JrIiwKICAgIG1vdW50X3BvaW50czogIk1vdW50cyIsCiAgICBzZXJ2aWNlc19ydW5uaW5nOiAiU2VydmljZXMiLAogICAgdGVtcGVyYXR1cmU6ICJUZW1wIiwKICAgIGJhdHRlcnlfY2hhcmdpbmc6ICJCYXR0ZXJ5IiwKICAgIGJhdHRlcnk6ICJCYXR0ZXJ5IiwKICAgIHNjcmVlbl9yZXNvbHV0aW9uOiAiUmVzb2x1dGlvbiIsCiAgfSwKICBkaXNwbGF5OiB7CiAgICBzaG93X2Vtb2ppczogdHJ1ZSwKICAgIHNob3dfYmFja2dyb3VuZHM6IHRydWUsCiAgICBzaW5nbGVfbGluZTogdHJ1ZSwKICAgIGxpbmVfd3JhcF9sZW5ndGg6IHByb2Nlc3M/LnN0ZG91dD8uY29sdW1ucyB8fCAxMDAsCiAgfSwKICBuZXR3b3JrOiB7CiAgICBzaG93X29mZmxpbmVfbWVzc2FnZTogdHJ1ZSwKICB9LAogIGFkdmFuY2VkOiB7CiAgICBkZWJ1ZzogZmFsc2UsCiAgfSwKfTsKCmV4cG9ydCBpbnRlcmZhY2UgU2V0dGluZ3MgewogIGRpc3BsYXlfb3JkZXI6IHN0cmluZ1tdW107CiAgY29sb3JzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+OwogIGVtb2ppczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjsKICBsYWJlbHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47CiAgZGlzcGxheTogewogICAgc2hvd19lbW9qaXM6IGJvb2xlYW47CiAgICAvKiogdHJ1ZSAoZGVmYXVsdCk6IGdpdmUgZXZlcnkgaXRlbSBpdHMgb3duIGJhY2tncm91bmQgY29sb3IgYmxvY2ssIHNvIGl0IHN0YXlzIGxlZ2libGUgcmVnYXJkbGVzcyBvZiB0aGUgdGVybWluYWwncyBiYWNrZ3JvdW5kICovCiAgICBzaG93X2JhY2tncm91bmRzOiBib29sZWFuOwogICAgLyoqIHRydWU6IHByaW50IG9uZSBjb250aW51b3VzIGxpbmUgYW5kIGxldCB0aGUgdGVybWluYWwgc29mdC13cmFwIGl0OyBmYWxzZTogaGFyZC13cmFwIGF0IGxpbmVfd3JhcF9sZW5ndGggKi8KICAgIHNpbmdsZV9saW5lOiBib29sZWFuOwogICAgbGluZV93cmFwX2xlbmd0aDogbnVtYmVyOwogIH07CiAgbmV0d29yazogewogICAgc2hvd19vZmZsaW5lX21lc3NhZ2U6IGJvb2xlYW47CiAgfTsKICBhZHZhbmNlZDogewogICAgZGVidWc6IGJvb2xlYW47CiAgfTsKfQoKLyoqCiAqIExvYWRzIHNldHRpbmdzIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZQogKiBAcmV0dXJucyBTZXR0aW5ncyBvYmplY3QgKGRlZmF1bHRzIG1lcmdlZCB3aXRoIHVzZXIgc2V0dGluZ3MpCiAqLwpleHBvcnQgZnVuY3Rpb24gbG9hZFNldHRpbmdzKCk6IFNldHRpbmdzIHsKICB0cnkgewogICAgaWYgKGZzLmV4aXN0c1N5bmMoU0VUVElOR1NfRklMRSkpIHsKICAgICAgY29uc3Qgc2V0dGluZ3MgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhTRVRUSU5HU19GSUxFLCAidXRmOCIpKTsKICAgICAgcmV0dXJuIHsgLi4uREVGQVVMVF9TRVRUSU5HUywgLi4uc2V0dGluZ3MgfTsKICAgIH0KICB9IGNhdGNoIHt9CiAgcmV0dXJuIERFRkFVTFRfU0VUVElOR1M7Cn0KCi8qKgogKiBTYXZlcyBzZXR0aW5ncyB0byB0aGUgY29uZmlndXJhdGlvbiBmaWxlCiAqIEBwYXJhbSBzZXR0aW5ncyAtIFRoZSBzZXR0aW5ncyBvYmplY3QgdG8gc2F2ZQogKiBAcmV0dXJucyBUcnVlIGlmIHN1Y2Nlc3NmdWwsIGZhbHNlIG90aGVyd2lzZQogKi8KZXhwb3J0IGZ1bmN0aW9uIHNhdmVTZXR0aW5ncyhzZXR0aW5nczogU2V0dGluZ3MpOiBib29sZWFuIHsKICB0cnkgewogICAgY29uc3QgY29uZmlnRGlyID0gcGF0aC5kaXJuYW1lKFNFVFRJTkdTX0ZJTEUpOwogICAgaWYgKCFmcy5leGlzdHNTeW5jKGNvbmZpZ0RpcikpIHsKICAgICAgZnMubWtkaXJTeW5jKGNvbmZpZ0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7CiAgICB9CiAgICBmcy53cml0ZUZpbGVTeW5jKFNFVFRJTkdTX0ZJTEUsIEpTT04uc3RyaW5naWZ5KHNldHRpbmdzLCBudWxsLCAyKSk7CiAgICByZXR1cm4gdHJ1ZTsKICB9IGNhdGNoIHsKICAgIHJldHVybiBmYWxzZTsKICB9Cn0K", eI = "data:video/mp2t;base64,LyoqCiAqIFNvZnR3YXJlIGFuZCBwYWNrYWdlLXJlbGF0ZWQgc3lzdGVtIGluZm9ybWF0aW9uIGZ1bmN0aW9ucwogKiBAbW9kdWxlIGluZm8vc29mdHdhcmUKICovCgppbXBvcnQgb3MgZnJvbSAib3MiOwppbXBvcnQgcHJvY2VzcyBmcm9tICJwcm9jZXNzIjsKaW1wb3J0IHR5cGUgeyBJbmZvQ29udGV4dCB9IGZyb20gIi4uL3R5cGVzL2ludGVybmFsLXR5cGVzIjsKaW1wb3J0IHsgSVNfV0lORE9XUyB9IGZyb20gIi4uL3V0aWxzL3BsYXRmb3JtIjsKaW1wb3J0IHsgZXhlY0NvbW1hbmQsIGNvbW1hbmRFeGlzdHMgfSBmcm9tICIuLi91dGlscy9jb21tYW5kIjsKaW1wb3J0IHsgZ2V0Q2FjaGVkVmFsdWUsIHNldENhY2hlZFZhbHVlIH0gZnJvbSAiLi4vY2FjaGUvY2FjaGUiOwoKLyoqCiAqIEdldHMgdGhlIGN1cnJlbnQgc2hlbGwgbmFtZQogKiBVc2VzIHRoZSB1c2VyJ3MgbG9naW4gc2hlbGwgKG1hY09TL0xpbnV4KSwgZmFsbHMgYmFjayB0byBwcyBmb3IgdGhlCiAqIHBhcmVudCBwcm9jZXNzIHNoZWxsCiAqIEByZXR1cm5zIFNoZWxsIG5hbWUgb3IgZW1wdHkgc3RyaW5nIG9uIFdpbmRvd3MKICogQGV4YW1wbGUgImJhc2giLCAienNoIiwgImZpc2giLCAibnUiCiAqLwpleHBvcnQgZnVuY3Rpb24gc2hlbGwoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJzaGVsbCIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmICghSVNfV0lORE9XUykgewogICAgdHJ5IHsKICAgICAgY29uc3QgbG9naW5TaGVsbCA9IG9zLnVzZXJJbmZvKCkuc2hlbGw7CiAgICAgIGlmIChsb2dpblNoZWxsKSB7CiAgICAgICAgY29uc3Qgc2hlbGxOYW1lID0gbG9naW5TaGVsbC5zcGxpdCgiLyIpLnBvcCgpIGFzIHN0cmluZzsKICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAic2hlbGwiLCBzaGVsbE5hbWUpOwogICAgICAgIHJldHVybiBzaGVsbE5hbWU7CiAgICAgIH0KICAgIH0gY2F0Y2gge30KCiAgICB0cnkgewogICAgICBjb25zdCBwcGlkID0gcHJvY2Vzcy5wcGlkOwogICAgICBjb25zdCBzaGVsbE5hbWUgPSBleGVjQ29tbWFuZChgcHMgLXAgJHtwcGlkfSAtbyBjb21tPWApLnNwbGl0KCIvIikucG9wKCk7CiAgICAgIGlmIChzaGVsbE5hbWUpIHsKICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAic2hlbGwiLCBzaGVsbE5hbWUpOwogICAgICAgIHJldHVybiBzaGVsbE5hbWU7CiAgICAgIH0KICAgIH0gY2F0Y2gge30KICB9CgogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJzaGVsbCIsICIiKTsKICByZXR1cm4gIiI7Cn0KCi8qKgogKiBHZXRzIGF2YWlsYWJsZSBwYWNrYWdlIG1hbmFnZXJzIGFuZCBkZXZlbG9wbWVudCB0b29scwogKiBDaGVja3MgZm9yIHBhY2thZ2UgbWFuYWdlcnMgKGFwdCwgeXVtLCBucG0sIGV0Yy4pIGFuZCBlZGl0b3JzIChudmltLCBoeCkKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBTcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBhdmFpbGFibGUgY29tbWFuZHMKICogQGV4YW1wbGUgImFwdCBucG0gZG9ja2VyIG52aW0iLCAieWF5IHBhY21hbiBidW4gaHgiCiAqLwpleHBvcnQgZnVuY3Rpb24gcGFja2FnZXMoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJwYWNrYWdlcyIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGNvbnN0IGNvbW1hbmRzID0gWwogICAgImFwdCIsCiAgICAiYnJldyIsCiAgICAibnBtIiwKICAgICJ1diIsCiAgICAiZG9ja2VyIiwKICAgICJoeCIsCiAgICAibnZpbSIsCiAgICAiYnVuIiwKICAgICJ5YXkiLAogICAgInBhY21hbiIsCiAgICAieXVtIiwKICAgICJkbmYiLAogICAgInp5cHBlciIsCiAgICAiZW1lcmdlIiwKICAgICJhcGsiLAogICAgInNuYXAiLAogICAgImZsYXRwYWsiLAogIF07CiAgY29uc3QgYXZhaWxhYmxlID0gY29tbWFuZHMuZmlsdGVyKChjbWQpID0+IGNvbW1hbmRFeGlzdHMoY21kKSk7CgogIGNvbnN0IHJlc3VsdCA9IGF2YWlsYWJsZS5qb2luKCIgIik7CiAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInBhY2thZ2VzIiwgcmVzdWx0KTsKICByZXR1cm4gcmVzdWx0Owp9CgovKioKICogR2V0cyB2ZXJzaW9ucyBvZiBjb21tb24gc29mdHdhcmUgdG9vbHMKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBGb3JtYXR0ZWQgc3RyaW5nIG9mIHRvb2wgdmVyc2lvbnMKICogQGV4YW1wbGUgIm5vZGU6MjAuMS4wIGdpdDoyLjM0LjEiCiAqLwpleHBvcnQgZnVuY3Rpb24gY29tbW9uX3ZlcnNpb25zKGNvbnRleHQ6IEluZm9Db250ZXh0KTogc3RyaW5nIHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiY29tbW9uX3ZlcnNpb25zIik7CiAgaWYgKGNhY2hlZCAhPT0gbnVsbCkgcmV0dXJuIGNhY2hlZDsKCiAgY29uc3QgdG9vbHMgPSBbCiAgICB7CiAgICAgIGNtZDogIm5vZGUiLAogICAgICBhcmdzOiAiLS12ZXJzaW9uIiwKICAgICAgY2xlYW46ICh2OiBzdHJpbmcpID0+IHYucmVwbGFjZSgvXnYvLCAiIiksCiAgICB9LAogICAgewogICAgICBjbWQ6ICJnaXQiLAogICAgICBhcmdzOiAiLS12ZXJzaW9uIiwKICAgICAgY2xlYW46ICh2OiBzdHJpbmcpID0+IHYucmVwbGFjZSgiZ2l0IHZlcnNpb24gIiwgIiIpLAogICAgfSwKICAgIHsKICAgICAgY21kOiAiZG9ja2VyIiwKICAgICAgYXJnczogIi0tdmVyc2lvbiIsCiAgICAgIGNsZWFuOiAodjogc3RyaW5nKSA9PiB2LnJlcGxhY2UoL0RvY2tlciB2ZXJzaW9uIChbXixdKyksLiovLCAiJDEiKSwKICAgIH0sCiAgICB7CiAgICAgIGNtZDogInB5dGhvbjMiLAogICAgICBhcmdzOiAiLS12ZXJzaW9uIiwKICAgICAgY2xlYW46ICh2OiBzdHJpbmcpID0+IHYucmVwbGFjZSgiUHl0aG9uICIsICIiKSwKICAgIH0sCiAgICB7CiAgICAgIGNtZDogImdvIiwKICAgICAgYXJnczogInZlcnNpb24iLAogICAgICBjbGVhbjogKHY6IHN0cmluZykgPT4gdi5yZXBsYWNlKCJnbyB2ZXJzaW9uIGdvIiwgIiIpLnNwbGl0KCIgIilbMF0sCiAgICB9LAogICAgewogICAgICBjbWQ6ICJydXN0YyIsCiAgICAgIGFyZ3M6ICItLXZlcnNpb24iLAogICAgICBjbGVhbjogKHY6IHN0cmluZykgPT4gdi5yZXBsYWNlKCJydXN0YyAiLCAiIikuc3BsaXQoIiAiKVswXSwKICAgIH0sCiAgXTsKCiAgY29uc3QgdmVyc2lvbnM6IHN0cmluZ1tdID0gW107CgogIGZvciAoY29uc3QgdG9vbCBvZiB0b29scykgewogICAgaWYgKGNvbW1hbmRFeGlzdHModG9vbC5jbWQpKSB7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3Qgb3V0cHV0ID0gZXhlY0NvbW1hbmQoYCR7dG9vbC5jbWR9ICR7dG9vbC5hcmdzfWApOwogICAgICAgIGNvbnN0IHZlcnNpb24gPSB0b29sLmNsZWFuKG91dHB1dCkudHJpbSgpOwogICAgICAgIGlmICh2ZXJzaW9uKSB7CiAgICAgICAgICB2ZXJzaW9ucy5wdXNoKGAke3Rvb2wuY21kfToke3ZlcnNpb259YCk7CiAgICAgICAgfQogICAgICB9IGNhdGNoIHt9CiAgICB9CiAgfQoKICBjb25zdCByZXN1bHQgPSB2ZXJzaW9ucy5qb2luKCIgIik7CiAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImNvbW1vbl92ZXJzaW9ucyIsIHJlc3VsdCk7CiAgcmV0dXJuIHJlc3VsdDsKfQovKioKICogR2V0cyBydW5uaW5nIERvY2tlciBjb250YWluZXIgbmFtZXMKICogTGlzdHMgYWN0aXZlIERvY2tlciBjb250YWluZXJzIHdpdGggdGhlaXIgbmFtZXMKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBTcGFjZS1zZXBhcmF0ZWQgY29udGFpbmVyIG5hbWVzIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAibmdpbnggcmVkaXMgcG9zdGdyZXMiLCAid2ViLWFwcCBkYi1zZXJ2ZXIiCiAqLwpleHBvcnQgZnVuY3Rpb24gY29udGFpbmVycyhjb250ZXh0OiBJbmZvQ29udGV4dCk6IHN0cmluZyB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImNvbnRhaW5lcnMiKTsKICBpZiAoY2FjaGVkICE9PSBudWxsKSByZXR1cm4gY2FjaGVkOwoKICBpZiAoIWNvbW1hbmRFeGlzdHMoImRvY2tlciIpKSB7CiAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiY29udGFpbmVycyIsICIiKTsKICAgIHJldHVybiAiIjsKICB9CgogIHRyeSB7CiAgICBjb25zdCBjb250YWluZXJDb3VudCA9IGV4ZWNDb21tYW5kKCJkb2NrZXIgcHMgLXEiKQogICAgICAuc3BsaXQoIlxuIikKICAgICAgLmZpbHRlcigobGluZSkgPT4gbGluZS50cmltKCkpLmxlbmd0aDsKICAgIGlmIChjb250YWluZXJDb3VudCA9PT0gMCkgewogICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiY29udGFpbmVycyIsICIiKTsKICAgICAgcmV0dXJuICIiOwogICAgfQoKICAgIGNvbnN0IGNvbnRhaW5lcnMgPSBleGVjQ29tbWFuZCgKICAgICAgJ2RvY2tlciBwcyAtLWZvcm1hdCAie3suTmFtZXN9fVx0e3suUG9ydHN9fSInCiAgICApOwogICAgY29uc3QgbGluZXMgPSBjb250YWluZXJzLnNwbGl0KCJcbiIpLmZpbHRlcigobGluZSkgPT4gbGluZS50cmltKCkpOwoKICAgIGNvbnN0IGNvbnRhaW5lckluZm86IHN0cmluZ1tdID0gW107CgogICAgbGluZXMuZm9yRWFjaCgobGluZSkgPT4gewogICAgICBjb25zdCBbbmFtZSwgcG9ydHNdID0gbGluZS5zcGxpdCgiXHQiKTsKICAgICAgaWYgKG5hbWUpIHsKICAgICAgICBjb250YWluZXJJbmZvLnB1c2gobmFtZSk7CgogICAgICAgIGlmIChwb3J0cykgewogICAgICAgICAgY29uc3QgcG9ydE1hdGNoZXMgPSBwb3J0cy5tYXRjaCgvLT4oXGQrKC1cZCspPylcLy9nKTsKICAgICAgICAgIGlmIChwb3J0TWF0Y2hlcykgewogICAgICAgICAgICBjb25zdCB1bmlxdWVQb3J0cyA9IFsKICAgICAgICAgICAgICAuLi5uZXcgU2V0KAogICAgICAgICAgICAgICAgcG9ydE1hdGNoZXMubWFwKChwKSA9PiBwLnJlcGxhY2UoLy0+XGQrKC1cZCspP1wvLywgIiIpKQogICAgICAgICAgICAgICksCiAgICAgICAgICAgIF07CiAgICAgICAgICAgIGNvbnRhaW5lckluZm8ucHVzaCguLi51bmlxdWVQb3J0cyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKCiAgICBjb25zdCByZXN1bHQgPSBjb250YWluZXJJbmZvLmpvaW4oIiAiKTsKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJjb250YWluZXJzIiwgcmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfSBjYXRjaCB7fQoKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiY29udGFpbmVycyIsICIiKTsKICByZXR1cm4gIiI7Cn0K", cI = "data:video/mp2t;base64,LyoqCiAqIFN5c3RlbSBzdGF0dXMgYW5kIGhlYWx0aCBpbmZvcm1hdGlvbiBmdW5jdGlvbnMKICogQG1vZHVsZSBpbmZvL3N5c3RlbS1zdGF0dXMKICovCgppbXBvcnQgZnMgZnJvbSAiZnMiOwppbXBvcnQgb3MgZnJvbSAib3MiOwppbXBvcnQgdHlwZSB7IEluZm9Db250ZXh0IH0gZnJvbSAiLi4vdHlwZXMvaW50ZXJuYWwtdHlwZXMiOwppbXBvcnQgeyBJU19MSU5VWCwgSVNfTUFDIH0gZnJvbSAiLi4vdXRpbHMvcGxhdGZvcm0iOwppbXBvcnQgeyBleGVjQ29tbWFuZCwgY29tbWFuZEV4aXN0cyB9IGZyb20gIi4uL3V0aWxzL2NvbW1hbmQiOwppbXBvcnQgeyBnZXRDYWNoZWRWYWx1ZSwgc2V0Q2FjaGVkVmFsdWUgfSBmcm9tICIuLi9jYWNoZS9jYWNoZSI7CgovKioKICogR2V0cyBzeXN0ZW0gbG9hZCBhdmVyYWdlcwogKiBSZWFkcyAxLCA1LCBhbmQgMTUgbWludXRlIGxvYWQgYXZlcmFnZXMgZnJvbSAvcHJvYy9sb2FkYXZnIChMaW51eCkgb3IKICogb3MubG9hZGF2ZygpIChtYWNPUykKICogQHJldHVybnMgU3BhY2Utc2VwYXJhdGVkIGxvYWQgYXZlcmFnZXMgKDFtIDVtIDE1bSkgb3IgZW1wdHkgc3RyaW5nCiAqIEBleGFtcGxlICIwLjUyIDAuNTggMC41OSIsICIyLjEwIDEuOTUgMS44OCIKICovCmV4cG9ydCBmdW5jdGlvbiBsb2FkX2F2ZXJhZ2UoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGlmIChJU19NQUMpIHsKICAgIHJldHVybiBvcwogICAgICAubG9hZGF2ZygpCiAgICAgIC5tYXAoKG4pID0+IG4udG9GaXhlZCgyKSkKICAgICAgLmpvaW4oIiAiKTsKICB9CgogIGlmICghSVNfTElOVVgpIHJldHVybiAiIjsKCiAgdHJ5IHsKICAgIGNvbnN0IGxvYWRhdmcgPSBmcy5yZWFkRmlsZVN5bmMoIi9wcm9jL2xvYWRhdmciLCAidXRmOCIpOwogICAgY29uc3QgbG9hZHMgPSBsb2FkYXZnLnNwbGl0KCIgIikuc2xpY2UoMCwgMyk7CiAgICByZXR1cm4gbG9hZHMuam9pbigiICIpOwogIH0gY2F0Y2gge30KICByZXR1cm4gIiI7Cn0KCi8qKgogKiBHZXRzIGJhdHRlcnkgY2hhcmdlIGxldmVsIGFuZCBjaGFyZ2luZyBzdGF0dXMKICogUmVhZHMgZnJvbSAvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS9CQVQwIChMaW51eCBsYXB0b3BzIG9ubHkpCiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgQmF0dGVyeSBwZXJjZW50YWdlIHdpdGggb3B0aW9uYWwgKyBmb3IgY2hhcmdpbmcsIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiODUlIiwgIjQyJSsiLCAiMTAwJSIKICovCmV4cG9ydCBmdW5jdGlvbiBiYXR0ZXJ5KGNvbnRleHQ6IEluZm9Db250ZXh0KTogc3RyaW5nIHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiYmF0dGVyeSIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmIChJU19NQUMpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IGJhdHQgPSBleGVjQ29tbWFuZCgicG1zZXQgLWcgYmF0dCIpOwogICAgICBjb25zdCBwZXJjZW50TWF0Y2ggPSBiYXR0Lm1hdGNoKC8oXGQrKSUvKTsKICAgICAgaWYgKHBlcmNlbnRNYXRjaCkgewogICAgICAgIGNvbnN0IGlzQ2hhcmdpbmcgPSAvO1xzKihjaGFyZ2luZ3xjaGFyZ2VkKTsvaS50ZXN0KGJhdHQpOwogICAgICAgIGNvbnN0IHJlc3VsdCA9IGAke3BlcmNlbnRNYXRjaFsxXX0lJHtpc0NoYXJnaW5nID8gIisiIDogIiJ9YDsKICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiYmF0dGVyeSIsIHJlc3VsdCk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgfSBjYXRjaCB7fQoKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJiYXR0ZXJ5IiwgIiIpOwogICAgcmV0dXJuICIiOwogIH0KCiAgaWYgKCFJU19MSU5VWCkgewogICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImJhdHRlcnkiLCAiIik7CiAgICByZXR1cm4gIiI7CiAgfQoKICB0cnkgewogICAgY29uc3QgYmF0dGVyeVBhdGggPSAiL3N5cy9jbGFzcy9wb3dlcl9zdXBwbHkvQkFUMCI7CiAgICBjb25zdCBjYXBhY2l0eVBhdGggPSBgJHtiYXR0ZXJ5UGF0aH0vY2FwYWNpdHlgOwogICAgY29uc3Qgc3RhdHVzUGF0aCA9IGAke2JhdHRlcnlQYXRofS9zdGF0dXNgOwoKICAgIGlmIChmcy5leGlzdHNTeW5jKGNhcGFjaXR5UGF0aCkpIHsKICAgICAgY29uc3QgY2FwYWNpdHkgPSBmcy5yZWFkRmlsZVN5bmMoY2FwYWNpdHlQYXRoLCAidXRmOCIpLnRyaW0oKTsKICAgICAgY29uc3Qgc3RhdHVzID0gZnMuZXhpc3RzU3luYyhzdGF0dXNQYXRoKQogICAgICAgID8gZnMucmVhZEZpbGVTeW5jKHN0YXR1c1BhdGgsICJ1dGY4IikudHJpbSgpCiAgICAgICAgOiAiVW5rbm93biI7CgogICAgICBjb25zdCBiYXR0ZXJ5UGVyY2VudCA9IHBhcnNlSW50KGNhcGFjaXR5KTsKICAgICAgY29uc3QgaXNDaGFyZ2luZyA9IHN0YXR1cyA9PT0gIkNoYXJnaW5nIjsKICAgICAgY29uc3QgcmVzdWx0ID0gYCR7YmF0dGVyeVBlcmNlbnR9JSR7aXNDaGFyZ2luZyA/ICIrIiA6ICIifWA7CiAgICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJiYXR0ZXJ5IiwgcmVzdWx0KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICB9IGNhdGNoIHt9CgogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJiYXR0ZXJ5IiwgIiIpOwogIHJldHVybiAiIjsKfQoKLyoqCiAqIEdldHMgc3lzdGVtIHRlbXBlcmF0dXJlIGluIENlbHNpdXMKICogUmVhZHMgZnJvbSB0aGVybWFsIHpvbmUgb3IgaHdtb24gc2Vuc29ycyAoTGludXgpLCBvciBmcm9tIHRoZQogKiBgb3N4LWNwdS10ZW1wYCBDTEkgKG1hY09TLCBpZiBpbnN0YWxsZWQgdmlhIGBicmV3IGluc3RhbGwgb3N4LWNwdS10ZW1wYCkgLQogKiBtYWNPUyBoYXMgbm8gdW5wcml2aWxlZ2VkIEFQSSBmb3IgdGhpcywgc28gbm90aGluZyBpcyByZXBvcnRlZCB3aXRob3V0IGl0CiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgVGVtcGVyYXR1cmUgd2l0aCDCsEMgc3VmZml4IG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiNDXCsEMiLCAiNjLCsEMiCiAqLwpleHBvcnQgZnVuY3Rpb24gdGVtcGVyYXR1cmUoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJ0ZW1wZXJhdHVyZSIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmIChJU19NQUMpIHsKICAgIGlmIChjb21tYW5kRXhpc3RzKCJvc3gtY3B1LXRlbXAiKSkgewogICAgICB0cnkgewogICAgICAgIGNvbnN0IG91dHB1dCA9IGV4ZWNDb21tYW5kKCJvc3gtY3B1LXRlbXAiKTsKICAgICAgICBjb25zdCBtYXRjaCA9IG91dHB1dC5tYXRjaCgvKFtcZC5dKylccyrCsD9DLyk7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICBjb25zdCB0ZW1wQyA9IE1hdGgucm91bmQocGFyc2VGbG9hdChtYXRjaFsxXSkpOwogICAgICAgICAgaWYgKHRlbXBDID4gMCAmJiB0ZW1wQyA8IDE1MCkgewogICAgICAgICAgICBjb25zdCByZXN1bHQgPSBgJHt0ZW1wQ33CsENgOwogICAgICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAidGVtcGVyYXR1cmUiLCByZXN1bHQpOwogICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBjYXRjaCB7fQogICAgfQoKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJ0ZW1wZXJhdHVyZSIsICIiKTsKICAgIHJldHVybiAiIjsKICB9CgogIGlmICghSVNfTElOVVgpIHsKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJ0ZW1wZXJhdHVyZSIsICIiKTsKICAgIHJldHVybiAiIjsKICB9CgogIHRyeSB7CiAgICBjb25zdCB0ZW1wU291cmNlcyA9IFsKICAgICAgIi9zeXMvY2xhc3MvdGhlcm1hbC90aGVybWFsX3pvbmUwL3RlbXAiLAogICAgICAiL3N5cy9jbGFzcy9od21vbi9od21vbjAvdGVtcDFfaW5wdXQiLAogICAgICAiL3N5cy9jbGFzcy9od21vbi9od21vbjEvdGVtcDFfaW5wdXQiLAogICAgXTsKCiAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiB0ZW1wU291cmNlcykgewogICAgICBpZiAoZnMuZXhpc3RzU3luYyhzb3VyY2UpKSB7CiAgICAgICAgY29uc3QgdGVtcCA9IGZzLnJlYWRGaWxlU3luYyhzb3VyY2UsICJ1dGY4IikudHJpbSgpOwogICAgICAgIGNvbnN0IHRlbXBDID0gTWF0aC5yb3VuZChwYXJzZUludCh0ZW1wKSAvIDEwMDApOwoKICAgICAgICBpZiAodGVtcEMgPiAwICYmIHRlbXBDIDwgMTUwKSB7CiAgICAgICAgICBjb25zdCByZXN1bHQgPSBgJHt0ZW1wQ33CsENgOwogICAgICAgICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInRlbXBlcmF0dXJlIiwgcmVzdWx0KTsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfSBjYXRjaCB7fQoKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAidGVtcGVyYXR1cmUiLCAiIik7CiAgcmV0dXJuICIiOwp9CgovKioKICogR2V0cyBjb3VudCBvZiBydW5uaW5nIHN5c3RlbSBzZXJ2aWNlcwogKiBVc2VzIHN5c3RlbWN0bCBvciBzZXJ2aWNlIGNvbW1hbmQgKExpbnV4IG9ubHkpCiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgU2VydmljZSBjb3VudCB3aXRoICJzZXJ2aWNlcyIgc3VmZml4IG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiMTI1IHNlcnZpY2VzIiwgIjg5IHNlcnZpY2VzIgogKi8KZXhwb3J0IGZ1bmN0aW9uIHNlcnZpY2VzX3J1bm5pbmcoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJzZXJ2aWNlc19ydW5uaW5nIik7CiAgaWYgKGNhY2hlZCAhPT0gbnVsbCkgcmV0dXJuIGNhY2hlZDsKCiAgaWYgKElTX01BQykgewogICAgdHJ5IHsKICAgICAgY29uc3Qgc2VydmljZXMgPSBleGVjQ29tbWFuZCgibGF1bmNoY3RsIGxpc3QiKTsKICAgICAgY29uc3Qgc2VydmljZUNvdW50ID0gc2VydmljZXMKICAgICAgICAuc3BsaXQoIlxuIikKICAgICAgICAuZmlsdGVyKChsaW5lKSA9PiBsaW5lLnRyaW0oKSAmJiAhbGluZS5zdGFydHNXaXRoKCJQSUQiKSkubGVuZ3RoOwoKICAgICAgaWYgKHNlcnZpY2VDb3VudCA+IDApIHsKICAgICAgICBjb25zdCByZXN1bHQgPSBgJHtzZXJ2aWNlQ291bnR9IHNlcnZpY2VzYDsKICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAic2VydmljZXNfcnVubmluZyIsIHJlc3VsdCk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgfSBjYXRjaCB7fQoKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJzZXJ2aWNlc19ydW5uaW5nIiwgIiIpOwogICAgcmV0dXJuICIiOwogIH0KCiAgaWYgKCFJU19MSU5VWCkgewogICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInNlcnZpY2VzX3J1bm5pbmciLCAiIik7CiAgICByZXR1cm4gIiI7CiAgfQoKICB0cnkgewogICAgbGV0IHNlcnZpY2VDb3VudCA9IDA7CgogICAgaWYgKGNvbW1hbmRFeGlzdHMoInN5c3RlbWN0bCIpKSB7CiAgICAgIGNvbnN0IHNlcnZpY2VzID0gZXhlY0NvbW1hbmQoCiAgICAgICAgInN5c3RlbWN0bCBsaXN0LXVuaXRzIC0tdHlwZT1zZXJ2aWNlIC0tc3RhdGU9cnVubmluZyAtLW5vLXBhZ2VyIgogICAgICApOwogICAgICBzZXJ2aWNlQ291bnQgPSBzZXJ2aWNlcwogICAgICAgIC5zcGxpdCgiXG4iKQogICAgICAgIC5maWx0ZXIoKGxpbmUpID0+IGxpbmUuaW5jbHVkZXMoIi5zZXJ2aWNlIikpLmxlbmd0aDsKICAgIH0gZWxzZSBpZiAoY29tbWFuZEV4aXN0cygic2VydmljZSIpKSB7CiAgICAgIGNvbnN0IHNlcnZpY2VzID0gZXhlY0NvbW1hbmQoInNlcnZpY2UgLS1zdGF0dXMtYWxsIik7CiAgICAgIHNlcnZpY2VDb3VudCA9IHNlcnZpY2VzCiAgICAgICAgLnNwbGl0KCJcbiIpCiAgICAgICAgLmZpbHRlcigobGluZSkgPT4gbGluZS5pbmNsdWRlcygiKyIpKS5sZW5ndGg7CiAgICB9CgogICAgaWYgKHNlcnZpY2VDb3VudCA+IDApIHsKICAgICAgY29uc3QgcmVzdWx0ID0gYCR7c2VydmljZUNvdW50fSBzZXJ2aWNlc2A7CiAgICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJzZXJ2aWNlc19ydW5uaW5nIiwgcmVzdWx0KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICB9IGNhdGNoIHt9CgogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJzZXJ2aWNlc19ydW5uaW5nIiwgIiIpOwogIHJldHVybiAiIjsKfQo=";
314
326
  function w(I) {
315
- return Array.isArray ? Array.isArray(I) : SI(I) === "[object Array]";
327
+ return Array.isArray ? Array.isArray(I) : FI(I) === "[object Array]";
316
328
  }
317
329
  function PI(I) {
318
330
  if (typeof I == "string") return I;
319
331
  if (typeof I == "bigint") return I.toString();
320
- const e = I + "";
321
- return e == "0" && 1 / I == -1 / 0 ? "-0" : e;
332
+ const g = I + "";
333
+ return g == "0" && 1 / I == -1 / 0 ? "-0" : g;
322
334
  }
323
335
  function lI(I) {
324
336
  return I == null ? "" : PI(I);
@@ -330,7 +342,7 @@ function T(I) {
330
342
  return typeof I == "number";
331
343
  }
332
344
  function $I(I) {
333
- return I === !0 || I === !1 || qI(I) && SI(I) == "[object Boolean]";
345
+ return I === !0 || I === !1 || qI(I) && FI(I) == "[object Boolean]";
334
346
  }
335
347
  function RI(I) {
336
348
  return typeof I == "object";
@@ -344,19 +356,19 @@ function X(I) {
344
356
  function U(I) {
345
357
  return !I.trim().length;
346
358
  }
347
- function SI(I) {
359
+ function FI(I) {
348
360
  return I == null ? I === void 0 ? "[object Undefined]" : "[object Null]" : Object.prototype.toString.call(I);
349
361
  }
350
- const Ie = "Incorrect 'index' type", aI = "Invalid doc index: must be a non-negative integer within the bounds of the docs array", ee = (I) => `Invalid value for key ${I}`, ge = (I) => `Pattern length exceeds max of ${I}.`, ce = (I) => `Missing ${I} property in key`, ie = (I) => `Property 'weight' in key '${I}' must be a positive integer`, se = "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.", yI = Object.prototype.hasOwnProperty;
351
- var te = class {
362
+ const Ig = "Incorrect 'index' type", aI = "Invalid doc index: must be a non-negative integer within the bounds of the docs array", gg = (I) => `Invalid value for key ${I}`, eg = (I) => `Pattern length exceeds max of ${I}.`, cg = (I) => `Missing ${I} property in key`, ig = (I) => `Property 'weight' in key '${I}' must be a positive integer`, sg = "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.", yI = Object.prototype.hasOwnProperty;
363
+ var tg = class {
352
364
  constructor(I) {
353
365
  this._keys = [], this._keyMap = {};
354
- let e = 0;
355
- I.forEach((g) => {
356
- const c = FI(g);
357
- this._keys.push(c), this._keyMap[c.id] = c, e += c.weight;
358
- }), this._keys.forEach((g) => {
359
- g.weight /= e;
366
+ let g = 0;
367
+ I.forEach((e) => {
368
+ const c = SI(e);
369
+ this._keys.push(c), this._keyMap[c.id] = c, g += c.weight;
370
+ }), this._keys.forEach((e) => {
371
+ e.weight /= g;
360
372
  });
361
373
  }
362
374
  get(I) {
@@ -369,20 +381,20 @@ var te = class {
369
381
  return JSON.stringify(this._keys);
370
382
  }
371
383
  };
372
- function FI(I) {
373
- let e = null, g = null, c = null, i = 1, s = null;
384
+ function SI(I) {
385
+ let g = null, e = null, c = null, i = 1, s = null;
374
386
  if (y(I) || w(I))
375
- c = I, e = VI(I), g = D(I);
387
+ c = I, g = VI(I), e = D(I);
376
388
  else {
377
- if (!yI.call(I, "name")) throw new Error(ce("name"));
389
+ if (!yI.call(I, "name")) throw new Error(cg("name"));
378
390
  const t = I.name;
379
391
  if (c = t, yI.call(I, "weight") && I.weight !== void 0 && (i = I.weight, i <= 0))
380
- throw new Error(ie(D(t)));
381
- e = VI(t), g = D(t), s = I.getFn ?? null;
392
+ throw new Error(ig(D(t)));
393
+ g = VI(t), e = D(t), s = I.getFn ?? null;
382
394
  }
383
395
  return {
384
- path: e,
385
- id: g,
396
+ path: g,
397
+ id: e,
386
398
  weight: i,
387
399
  src: c,
388
400
  getFn: s
@@ -394,19 +406,19 @@ function VI(I) {
394
406
  function D(I) {
395
407
  return w(I) ? I.join(".") : I;
396
408
  }
397
- function ne(I, e) {
398
- const g = [];
409
+ function ng(I, g) {
410
+ const e = [];
399
411
  let c = !1;
400
412
  const i = (s, t, n, C) => {
401
413
  if (X(s))
402
- if (!t[n]) g.push(C !== void 0 ? {
414
+ if (!t[n]) e.push(C !== void 0 ? {
403
415
  v: s,
404
416
  i: C
405
417
  } : s);
406
418
  else {
407
419
  const a = s[t[n]];
408
420
  if (!X(a)) return;
409
- if (n === t.length - 1 && (y(a) || T(a) || $I(a) || typeof a == "bigint")) g.push(C !== void 0 ? {
421
+ if (n === t.length - 1 && (y(a) || T(a) || $I(a) || typeof a == "bigint")) e.push(C !== void 0 ? {
410
422
  v: lI(a),
411
423
  i: C
412
424
  } : lI(a));
@@ -416,59 +428,59 @@ function ne(I, e) {
416
428
  } else t.length && i(a, t, n + 1, C);
417
429
  }
418
430
  };
419
- return i(I, y(e) ? e.split(".") : e, 0), c ? g : g[0];
431
+ return i(I, y(g) ? g.split(".") : g, 0), c ? e : e[0];
420
432
  }
421
- const Ce = {
433
+ const Cg = {
422
434
  includeMatches: !1,
423
435
  findAllMatches: !1,
424
436
  minMatchCharLength: 1
425
- }, oe = {
437
+ }, og = {
426
438
  isCaseSensitive: !1,
427
439
  ignoreDiacritics: !1,
428
440
  includeScore: !1,
429
441
  keys: [],
430
442
  shouldSort: !0,
431
- sortFn: (I, e) => I.score === e.score ? I.idx < e.idx ? -1 : 1 : I.score < e.score ? -1 : 1
432
- }, le = {
443
+ sortFn: (I, g) => I.score === g.score ? I.idx < g.idx ? -1 : 1 : I.score < g.score ? -1 : 1
444
+ }, lg = {
433
445
  location: 0,
434
446
  threshold: 0.6,
435
447
  distance: 100
436
- }, ae = {
448
+ }, ag = {
437
449
  useExtendedSearch: !1,
438
450
  useTokenSearch: !1,
439
451
  tokenize: void 0,
440
452
  tokenMatch: "any",
441
- getFn: ne,
453
+ getFn: ng,
442
454
  ignoreLocation: !1,
443
455
  ignoreFieldNorm: !1,
444
456
  fieldNormWeight: 1
445
457
  }, b = Object.freeze({
446
- ...oe,
447
- ...Ce,
448
- ...le,
449
- ...ae
458
+ ...og,
459
+ ...Cg,
460
+ ...lg,
461
+ ...ag
450
462
  });
451
- function re(I) {
463
+ function rg(I) {
452
464
  return I >= 9 && I <= 13 || I === 32 || I === 160;
453
465
  }
454
- function de(I = 1, e = 3) {
455
- const g = /* @__PURE__ */ new Map(), c = Math.pow(10, e);
466
+ function dg(I = 1, g = 3) {
467
+ const e = /* @__PURE__ */ new Map(), c = Math.pow(10, g);
456
468
  return {
457
469
  get(i) {
458
470
  let s = 0, t = !1;
459
- for (let C = 0; C < i.length; C++) re(i.charCodeAt(C)) ? t = !1 : t || (s++, t = !0);
460
- if (s === 0 && (s = 1), g.has(s)) return g.get(s);
471
+ for (let C = 0; C < i.length; C++) rg(i.charCodeAt(C)) ? t = !1 : t || (s++, t = !0);
472
+ if (s === 0 && (s = 1), e.has(s)) return e.get(s);
461
473
  const n = Math.round(c / Math.pow(s, 0.5 * I)) / c;
462
- return g.set(s, n), n;
474
+ return e.set(s, n), n;
463
475
  },
464
476
  clear() {
465
- g.clear();
477
+ e.clear();
466
478
  }
467
479
  };
468
480
  }
469
481
  var mI = class {
470
- constructor({ getFn: I = b.getFn, fieldNormWeight: e = b.fieldNormWeight } = {}) {
471
- this.norm = de(e, 3), this.getFn = I, this.isCreated = !1, this.docs = [], this.keys = [], this._keysMap = {}, this.setIndexRecords();
482
+ constructor({ getFn: I = b.getFn, fieldNormWeight: g = b.fieldNormWeight } = {}) {
483
+ this.norm = dg(g, 3), this.getFn = I, this.isCreated = !1, this.docs = [], this.keys = [], this._keysMap = {}, this.setIndexRecords();
472
484
  }
473
485
  setSources(I = []) {
474
486
  this.docs = I;
@@ -477,8 +489,8 @@ var mI = class {
477
489
  this.records = I;
478
490
  }
479
491
  setKeys(I = []) {
480
- this.keys = I, this._keysMap = {}, I.forEach((e, g) => {
481
- this._keysMap[e.id] = g;
492
+ this.keys = I, this._keysMap = {}, I.forEach((g, e) => {
493
+ this._keysMap[g.id] = e;
482
494
  });
483
495
  }
484
496
  create() {
@@ -486,62 +498,62 @@ var mI = class {
486
498
  this.isCreated = !0;
487
499
  const I = this.docs.length;
488
500
  this.records = new Array(I);
489
- let e = 0;
490
- if (y(this.docs[0])) for (let g = 0; g < I; g++) {
491
- const c = this._createStringRecord(this.docs[g], g);
492
- c && (this.records[e++] = c);
501
+ let g = 0;
502
+ if (y(this.docs[0])) for (let e = 0; e < I; e++) {
503
+ const c = this._createStringRecord(this.docs[e], e);
504
+ c && (this.records[g++] = c);
493
505
  }
494
- else for (let g = 0; g < I; g++) this.records[e++] = this._createObjectRecord(this.docs[g], g);
495
- this.records.length = e, this.norm.clear();
506
+ else for (let e = 0; e < I; e++) this.records[g++] = this._createObjectRecord(this.docs[e], e);
507
+ this.records.length = g, this.norm.clear();
496
508
  }
497
- add(I, e) {
498
- if (!Number.isInteger(e) || e < 0) throw new Error(aI);
509
+ add(I, g) {
510
+ if (!Number.isInteger(g) || g < 0) throw new Error(aI);
499
511
  if (y(I)) {
500
- const c = this._createStringRecord(I, e);
512
+ const c = this._createStringRecord(I, g);
501
513
  return c && this.records.push(c), c;
502
514
  }
503
- const g = this._createObjectRecord(I, e);
504
- return this.records.push(g), g;
515
+ const e = this._createObjectRecord(I, g);
516
+ return this.records.push(e), e;
505
517
  }
506
518
  removeAt(I) {
507
519
  if (!Number.isInteger(I) || I < 0) throw new Error(aI);
508
- for (let e = 0, g = this.records.length; e < g; e += 1) if (this.records[e].i === I) {
509
- this.records.splice(e, 1);
520
+ for (let g = 0, e = this.records.length; g < e; g += 1) if (this.records[g].i === I) {
521
+ this.records.splice(g, 1);
510
522
  break;
511
523
  }
512
- for (let e = 0, g = this.records.length; e < g; e += 1) this.records[e].i > I && (this.records[e].i -= 1);
524
+ for (let g = 0, e = this.records.length; g < e; g += 1) this.records[g].i > I && (this.records[g].i -= 1);
513
525
  }
514
526
  removeAll(I) {
515
- const e = /* @__PURE__ */ new Set();
516
- for (const c of I) Number.isInteger(c) && c >= 0 && e.add(c);
517
- if (e.size === 0) return;
518
- this.records = this.records.filter((c) => !e.has(c.i));
519
- const g = Array.from(e).sort((c, i) => c - i);
527
+ const g = /* @__PURE__ */ new Set();
528
+ for (const c of I) Number.isInteger(c) && c >= 0 && g.add(c);
529
+ if (g.size === 0) return;
530
+ this.records = this.records.filter((c) => !g.has(c.i));
531
+ const e = Array.from(g).sort((c, i) => c - i);
520
532
  for (const c of this.records) {
521
- let i = 0, s = g.length;
533
+ let i = 0, s = e.length;
522
534
  for (; i < s; ) {
523
535
  const t = i + s >>> 1;
524
- g[t] < c.i ? i = t + 1 : s = t;
536
+ e[t] < c.i ? i = t + 1 : s = t;
525
537
  }
526
538
  c.i -= i;
527
539
  }
528
540
  }
529
- getValueForItemAtKeyId(I, e) {
530
- return I[this._keysMap[e]];
541
+ getValueForItemAtKeyId(I, g) {
542
+ return I[this._keysMap[g]];
531
543
  }
532
544
  size() {
533
545
  return this.records.length;
534
546
  }
535
- _createStringRecord(I, e) {
547
+ _createStringRecord(I, g) {
536
548
  return !X(I) || U(I) ? null : {
537
549
  v: I,
538
- i: e,
550
+ i: g,
539
551
  n: this.norm.get(I)
540
552
  };
541
553
  }
542
- _createObjectRecord(I, e) {
543
- const g = {
544
- i: e,
554
+ _createObjectRecord(I, g) {
555
+ const e = {
556
+ i: g,
545
557
  $: {}
546
558
  };
547
559
  for (let c = 0, i = this.keys.length; c < i; c++) {
@@ -574,82 +586,82 @@ var mI = class {
574
586
  }
575
587
  }
576
588
  }
577
- g.$[c] = n;
589
+ e.$[c] = n;
578
590
  } else if (y(t) && !U(t)) {
579
591
  const n = {
580
592
  v: t,
581
593
  n: this.norm.get(t)
582
594
  };
583
- g.$[c] = n;
595
+ e.$[c] = n;
584
596
  }
585
597
  }
586
598
  }
587
- return g;
599
+ return e;
588
600
  }
589
601
  toJSON() {
590
602
  return {
591
- keys: this.keys.map(({ getFn: I, ...e }) => e),
603
+ keys: this.keys.map(({ getFn: I, ...g }) => g),
592
604
  records: this.records
593
605
  };
594
606
  }
595
607
  };
596
- function JI(I, e, { getFn: g = b.getFn, fieldNormWeight: c = b.fieldNormWeight } = {}) {
608
+ function JI(I, g, { getFn: e = b.getFn, fieldNormWeight: c = b.fieldNormWeight } = {}) {
597
609
  const i = new mI({
598
- getFn: g,
610
+ getFn: e,
599
611
  fieldNormWeight: c
600
612
  });
601
- return i.setKeys(I.map(FI)), i.setSources(e), i.create(), i;
613
+ return i.setKeys(I.map(SI)), i.setSources(g), i.create(), i;
602
614
  }
603
- function he(I, { getFn: e = b.getFn, fieldNormWeight: g = b.fieldNormWeight } = {}) {
615
+ function hg(I, { getFn: g = b.getFn, fieldNormWeight: e = b.fieldNormWeight } = {}) {
604
616
  const { keys: c, records: i } = I, s = new mI({
605
- getFn: e,
606
- fieldNormWeight: g
617
+ getFn: g,
618
+ fieldNormWeight: e
607
619
  });
608
620
  return s.setKeys(c), s.setIndexRecords(i), s;
609
621
  }
610
- function Ae(I = [], e = b.minMatchCharLength) {
611
- const g = [];
622
+ function Ag(I = [], g = b.minMatchCharLength) {
623
+ const e = [];
612
624
  let c = -1, i = -1, s = 0;
613
625
  for (let t = I.length; s < t; s += 1) {
614
626
  const n = I[s];
615
- n && c === -1 ? c = s : !n && c !== -1 && (i = s - 1, i - c + 1 >= e && g.push([c, i]), c = -1);
627
+ n && c === -1 ? c = s : !n && c !== -1 && (i = s - 1, i - c + 1 >= g && e.push([c, i]), c = -1);
616
628
  }
617
- return I[s - 1] && s - c >= e && g.push([c, s - 1]), g;
629
+ return I[s - 1] && s - c >= g && e.push([c, s - 1]), e;
618
630
  }
619
- function ue(I, e, g, { location: c = b.location, distance: i = b.distance, threshold: s = b.threshold, findAllMatches: t = b.findAllMatches, minMatchCharLength: n = b.minMatchCharLength, includeMatches: C = b.includeMatches, ignoreLocation: a = b.ignoreLocation } = {}) {
620
- if (e.length > 32) throw new Error(ge(32));
621
- const l = e.length, o = I.length, d = Math.max(0, Math.min(c, o));
631
+ function ug(I, g, e, { location: c = b.location, distance: i = b.distance, threshold: s = b.threshold, findAllMatches: t = b.findAllMatches, minMatchCharLength: n = b.minMatchCharLength, includeMatches: C = b.includeMatches, ignoreLocation: a = b.ignoreLocation } = {}) {
632
+ if (g.length > 32) throw new Error(eg(32));
633
+ const l = g.length, o = I.length, d = Math.max(0, Math.min(c, o));
622
634
  let A = s, u = d;
623
635
  const h = (Y, V) => {
624
- const f = Y / l;
625
- if (a) return f;
636
+ const H = Y / l;
637
+ if (a) return H;
626
638
  const z = Math.abs(d - V);
627
- return i ? f + z / i : z ? 1 : f;
628
- }, W = n > 1 || C, H = W ? Array(o) : [];
629
- let F;
630
- for (; (F = I.indexOf(e, u)) > -1; ) {
631
- const Y = h(0, F);
632
- if (A = Math.min(Y, A), u = F + l, W) {
639
+ return i ? H + z / i : z ? 1 : H;
640
+ }, W = n > 1 || C, f = W ? Array(o) : [];
641
+ let S;
642
+ for (; (S = I.indexOf(g, u)) > -1; ) {
643
+ const Y = h(0, S);
644
+ if (A = Math.min(Y, A), u = S + l, W) {
633
645
  let V = 0;
634
646
  for (; V < l; )
635
- H[F + V] = 1, V += 1;
647
+ f[S + V] = 1, V += 1;
636
648
  }
637
649
  }
638
650
  u = -1;
639
- let R = [], Q = 1, NI = 0, L = l + o;
651
+ let R = [], L = 1, NI = 0, Q = l + o;
640
652
  const MI = 1 << l - 1;
641
653
  for (let Y = 0; Y < l; Y += 1) {
642
- let V = 0, f = L;
643
- for (; V < f; )
644
- h(Y, d + f) <= A ? V = f : L = f, f = Math.floor((L - V) / 2 + V);
645
- L = f;
646
- let z = Math.max(1, d - f + 1);
647
- const tI = t ? o : Math.min(d + f, o) + l, J = Array(tI + 2);
654
+ let V = 0, H = Q;
655
+ for (; V < H; )
656
+ h(Y, d + H) <= A ? V = H : Q = H, H = Math.floor((Q - V) / 2 + V);
657
+ Q = H;
658
+ let z = Math.max(1, d - H + 1);
659
+ const tI = t ? o : Math.min(d + H, o) + l, J = Array(tI + 2);
648
660
  J[tI + 1] = (1 << Y) - 1;
649
661
  for (let K = tI; K >= z; K -= 1) {
650
- const nI = K - 1, QI = g[I[nI]];
651
- if (J[K] = (J[K + 1] << 1 | 1) & QI, Y && (J[K] |= (R[K + 1] | R[K]) << 1 | 1 | R[K + 1]), J[K] & MI && (Q = h(Y, nI), Q <= A)) {
652
- if (A = Q, u = nI, NI = Y, u <= d) break;
662
+ const nI = K - 1, LI = e[I[nI]];
663
+ if (J[K] = (J[K + 1] << 1 | 1) & LI, Y && (J[K] |= (R[K + 1] | R[K]) << 1 | 1 | R[K + 1]), J[K] & MI && (L = h(Y, nI), L <= A)) {
664
+ if (A = L, u = nI, NI = Y, u <= d) break;
653
665
  z = Math.max(1, 2 * d - u);
654
666
  }
655
667
  }
@@ -658,35 +670,35 @@ function ue(I, e, g, { location: c = b.location, distance: i = b.distance, thres
658
670
  }
659
671
  if (W && u >= 0) {
660
672
  const Y = Math.min(o - 1, u + l - 1 + NI);
661
- for (let V = u; V <= Y; V += 1) g[I[V]] && (H[V] = 1);
673
+ for (let V = u; V <= Y; V += 1) e[I[V]] && (f[V] = 1);
662
674
  }
663
675
  const sI = {
664
676
  isMatch: u >= 0,
665
- score: Math.max(1e-3, Q)
677
+ score: Math.max(1e-3, L)
666
678
  };
667
679
  if (W) {
668
- const Y = Ae(H, n);
680
+ const Y = Ag(f, n);
669
681
  Y.length ? C && (sI.indices = Y) : sI.isMatch = !1;
670
682
  }
671
683
  return sI;
672
684
  }
673
- function be(I) {
674
- const e = {};
675
- for (let g = 0, c = I.length; g < c; g += 1) {
676
- const i = I.charAt(g);
677
- e[i] = (e[i] || 0) | 1 << c - g - 1;
685
+ function bg(I) {
686
+ const g = {};
687
+ for (let e = 0, c = I.length; e < c; e += 1) {
688
+ const i = I.charAt(e);
689
+ g[i] = (g[i] || 0) | 1 << c - e - 1;
678
690
  }
679
- return e;
691
+ return g;
680
692
  }
681
693
  function ZI(I) {
682
694
  if (I.length <= 1) return I;
683
- I.sort((g, c) => g[0] - c[0] || g[1] - c[1]);
684
- const e = [I[0]];
685
- for (let g = 1, c = I.length; g < c; g += 1) {
686
- const i = e[e.length - 1], s = I[g];
687
- s[0] <= i[1] + 1 ? i[1] = Math.max(i[1], s[1]) : e.push(s);
695
+ I.sort((e, c) => e[0] - c[0] || e[1] - c[1]);
696
+ const g = [I[0]];
697
+ for (let e = 1, c = I.length; e < c; e += 1) {
698
+ const i = g[g.length - 1], s = I[e];
699
+ s[0] <= i[1] + 1 ? i[1] = Math.max(i[1], s[1]) : g.push(s);
688
700
  }
689
- return e;
701
+ return g;
690
702
  }
691
703
  const kI = {
692
704
  ł: "l",
@@ -701,12 +713,12 @@ const kI = {
701
713
  Ŧ: "T",
702
714
  ı: "i",
703
715
  ß: "ss"
704
- }, me = new RegExp("[" + Object.keys(kI).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(me, (e) => kI[e]) : (I) => I;
716
+ }, mg = new RegExp("[" + Object.keys(kI).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(mg, (g) => kI[g]) : (I) => I;
705
717
  var GI = class {
706
- constructor(I, { location: e = b.location, threshold: g = b.threshold, distance: c = b.distance, includeMatches: i = b.includeMatches, findAllMatches: s = b.findAllMatches, minMatchCharLength: t = b.minMatchCharLength, isCaseSensitive: n = b.isCaseSensitive, ignoreDiacritics: C = b.ignoreDiacritics, ignoreLocation: a = b.ignoreLocation } = {}) {
718
+ constructor(I, { location: g = b.location, threshold: e = b.threshold, distance: c = b.distance, includeMatches: i = b.includeMatches, findAllMatches: s = b.findAllMatches, minMatchCharLength: t = b.minMatchCharLength, isCaseSensitive: n = b.isCaseSensitive, ignoreDiacritics: C = b.ignoreDiacritics, ignoreLocation: a = b.ignoreLocation } = {}) {
707
719
  if (this.options = {
708
- location: e,
709
- threshold: g,
720
+ location: g,
721
+ threshold: e,
710
722
  distance: c,
711
723
  includeMatches: i,
712
724
  findAllMatches: s,
@@ -718,7 +730,7 @@ var GI = class {
718
730
  const l = (d, A) => {
719
731
  this.chunks.push({
720
732
  pattern: d,
721
- alphabet: be(d),
733
+ alphabet: bg(d),
722
734
  startIndex: A
723
735
  });
724
736
  }, o = this.pattern.length;
@@ -734,8 +746,8 @@ var GI = class {
734
746
  } else l(this.pattern, 0);
735
747
  }
736
748
  searchIn(I) {
737
- const { isCaseSensitive: e, ignoreDiacritics: g, includeMatches: c } = this.options;
738
- if (I = e ? I : I.toLowerCase(), I = g ? j(I) : I, this.pattern === I) {
749
+ const { isCaseSensitive: g, ignoreDiacritics: e, includeMatches: c } = this.options;
750
+ if (I = g ? I : I.toLowerCase(), I = e ? j(I) : I, this.pattern === I) {
739
751
  if (I.length < this.options.minMatchCharLength) return {
740
752
  isMatch: !1,
741
753
  score: 1
@@ -749,7 +761,7 @@ var GI = class {
749
761
  const { location: i, distance: s, threshold: t, findAllMatches: n, minMatchCharLength: C, ignoreLocation: a } = this.options, l = [];
750
762
  let o = 0, d = !1;
751
763
  this.chunks.forEach(({ pattern: u, alphabet: h, startIndex: W }) => {
752
- const { isMatch: H, score: F, indices: R } = ue(I, u, h, {
764
+ const { isMatch: f, score: S, indices: R } = ug(I, u, h, {
753
765
  location: i + W,
754
766
  distance: s,
755
767
  threshold: t,
@@ -758,7 +770,7 @@ var GI = class {
758
770
  includeMatches: c,
759
771
  ignoreLocation: a
760
772
  });
761
- H && (d = !0), o += F, H && R && l.push(...R);
773
+ f && (d = !0), o += S, f && R && l.push(...R);
762
774
  });
763
775
  const A = {
764
776
  isMatch: d,
@@ -767,8 +779,8 @@ var GI = class {
767
779
  return d && c && (A.indices = ZI(l)), A;
768
780
  }
769
781
  };
770
- const Ze = /* @__PURE__ */ new Set(["fuzzy", "include"]);
771
- function Ge(I) {
782
+ const Zg = /* @__PURE__ */ new Set(["fuzzy", "include"]);
783
+ function Gg(I) {
772
784
  return I.startsWith("inverse");
773
785
  }
774
786
  const rI = [
@@ -778,11 +790,11 @@ const rI = [
778
790
  singleRegex: /^=(.*)$/,
779
791
  create: (I) => ({
780
792
  type: "exact",
781
- search(e) {
782
- const g = e === I;
793
+ search(g) {
794
+ const e = g === I;
783
795
  return {
784
- isMatch: g,
785
- score: g ? 0 : 1,
796
+ isMatch: e,
797
+ score: e ? 0 : 1,
786
798
  indices: [0, I.length - 1]
787
799
  };
788
800
  }
@@ -794,11 +806,11 @@ const rI = [
794
806
  singleRegex: /^'(.*)$/,
795
807
  create: (I) => ({
796
808
  type: "include",
797
- search(e) {
798
- let g = 0, c;
809
+ search(g) {
810
+ let e = 0, c;
799
811
  const i = [], s = I.length;
800
- for (; (c = e.indexOf(I, g)) > -1; )
801
- g = c + s, i.push([c, g - 1]);
812
+ for (; (c = g.indexOf(I, e)) > -1; )
813
+ e = c + s, i.push([c, e - 1]);
802
814
  const t = !!i.length;
803
815
  return {
804
816
  isMatch: t,
@@ -814,11 +826,11 @@ const rI = [
814
826
  singleRegex: /^\^(.*)$/,
815
827
  create: (I) => ({
816
828
  type: "prefix-exact",
817
- search(e) {
818
- const g = e.startsWith(I);
829
+ search(g) {
830
+ const e = g.startsWith(I);
819
831
  return {
820
- isMatch: g,
821
- score: g ? 0 : 1,
832
+ isMatch: e,
833
+ score: e ? 0 : 1,
822
834
  indices: [0, I.length - 1]
823
835
  };
824
836
  }
@@ -830,12 +842,12 @@ const rI = [
830
842
  singleRegex: /^!\^(.*)$/,
831
843
  create: (I) => ({
832
844
  type: "inverse-prefix-exact",
833
- search(e) {
834
- const g = !e.startsWith(I);
845
+ search(g) {
846
+ const e = !g.startsWith(I);
835
847
  return {
836
- isMatch: g,
837
- score: g ? 0 : 1,
838
- indices: [0, e.length - 1]
848
+ isMatch: e,
849
+ score: e ? 0 : 1,
850
+ indices: [0, g.length - 1]
839
851
  };
840
852
  }
841
853
  })
@@ -846,12 +858,12 @@ const rI = [
846
858
  singleRegex: /^!(.*)\$$/,
847
859
  create: (I) => ({
848
860
  type: "inverse-suffix-exact",
849
- search(e) {
850
- const g = !e.endsWith(I);
861
+ search(g) {
862
+ const e = !g.endsWith(I);
851
863
  return {
852
- isMatch: g,
853
- score: g ? 0 : 1,
854
- indices: [0, e.length - 1]
864
+ isMatch: e,
865
+ score: e ? 0 : 1,
866
+ indices: [0, g.length - 1]
855
867
  };
856
868
  }
857
869
  })
@@ -862,12 +874,12 @@ const rI = [
862
874
  singleRegex: /^(.*)\$$/,
863
875
  create: (I) => ({
864
876
  type: "suffix-exact",
865
- search(e) {
866
- const g = e.endsWith(I);
877
+ search(g) {
878
+ const e = g.endsWith(I);
867
879
  return {
868
- isMatch: g,
869
- score: g ? 0 : 1,
870
- indices: [e.length - I.length, e.length - 1]
880
+ isMatch: e,
881
+ score: e ? 0 : 1,
882
+ indices: [g.length - I.length, g.length - 1]
871
883
  };
872
884
  }
873
885
  })
@@ -878,12 +890,12 @@ const rI = [
878
890
  singleRegex: /^!(.*)$/,
879
891
  create: (I) => ({
880
892
  type: "inverse-exact",
881
- search(e) {
882
- const g = e.indexOf(I) === -1;
893
+ search(g) {
894
+ const e = g.indexOf(I) === -1;
883
895
  return {
884
- isMatch: g,
885
- score: g ? 0 : 1,
886
- indices: [0, e.length - 1]
896
+ isMatch: e,
897
+ score: e ? 0 : 1,
898
+ indices: [0, g.length - 1]
887
899
  };
888
900
  }
889
901
  })
@@ -892,77 +904,77 @@ const rI = [
892
904
  type: "fuzzy",
893
905
  multiRegex: /^"(.*)"$/,
894
906
  singleRegex: /^(.*)$/,
895
- create: (I, e = {}) => {
896
- const g = new GI(I, {
897
- location: e.location ?? b.location,
898
- threshold: e.threshold ?? b.threshold,
899
- distance: e.distance ?? b.distance,
900
- includeMatches: e.includeMatches ?? b.includeMatches,
901
- findAllMatches: e.findAllMatches ?? b.findAllMatches,
902
- minMatchCharLength: e.minMatchCharLength ?? b.minMatchCharLength,
903
- isCaseSensitive: e.isCaseSensitive ?? b.isCaseSensitive,
904
- ignoreDiacritics: e.ignoreDiacritics ?? b.ignoreDiacritics,
905
- ignoreLocation: e.ignoreLocation ?? b.ignoreLocation
907
+ create: (I, g = {}) => {
908
+ const e = new GI(I, {
909
+ location: g.location ?? b.location,
910
+ threshold: g.threshold ?? b.threshold,
911
+ distance: g.distance ?? b.distance,
912
+ includeMatches: g.includeMatches ?? b.includeMatches,
913
+ findAllMatches: g.findAllMatches ?? b.findAllMatches,
914
+ minMatchCharLength: g.minMatchCharLength ?? b.minMatchCharLength,
915
+ isCaseSensitive: g.isCaseSensitive ?? b.isCaseSensitive,
916
+ ignoreDiacritics: g.ignoreDiacritics ?? b.ignoreDiacritics,
917
+ ignoreLocation: g.ignoreLocation ?? b.ignoreLocation
906
918
  });
907
919
  return {
908
920
  type: "fuzzy",
909
921
  search(c) {
910
- return g.searchIn(c);
922
+ return e.searchIn(c);
911
923
  }
912
924
  };
913
925
  }
914
926
  }
915
- ], XI = rI.length, Be = "\0", We = "|";
916
- function pe(I) {
917
- const e = [], g = I.length;
927
+ ], XI = rI.length, Bg = "\0", Wg = "|";
928
+ function pg(I) {
929
+ const g = [], e = I.length;
918
930
  let c = 0;
919
- for (; c < g; ) {
920
- for (; c < g && I[c] === " "; ) c++;
921
- if (c >= g) break;
931
+ for (; c < e; ) {
932
+ for (; c < e && I[c] === " "; ) c++;
933
+ if (c >= e) break;
922
934
  let i = c;
923
- for (; i < g && I[i] !== " " && I[i] !== '"'; ) i++;
924
- if (i < g && I[i] === '"') {
925
- for (i++; i < g; ) {
935
+ for (; i < e && I[i] !== " " && I[i] !== '"'; ) i++;
936
+ if (i < e && I[i] === '"') {
937
+ for (i++; i < e; ) {
926
938
  if (I[i] === '"') {
927
939
  const s = i + 1;
928
- if (s >= g || I[s] === " ") {
940
+ if (s >= e || I[s] === " ") {
929
941
  i++;
930
942
  break;
931
943
  }
932
- if (I[s] === "$" && (s + 1 >= g || I[s + 1] === " ")) {
944
+ if (I[s] === "$" && (s + 1 >= e || I[s + 1] === " ")) {
933
945
  i += 2;
934
946
  break;
935
947
  }
936
948
  }
937
949
  i++;
938
950
  }
939
- e.push(I.substring(c, i)), c = i;
951
+ g.push(I.substring(c, i)), c = i;
940
952
  } else {
941
- for (; i < g && I[i] !== " "; ) i++;
942
- e.push(I.substring(c, i)), c = i;
953
+ for (; i < e && I[i] !== " "; ) i++;
954
+ g.push(I.substring(c, i)), c = i;
943
955
  }
944
956
  }
945
- return e;
957
+ return g;
946
958
  }
947
- function fI(I, e) {
948
- const g = I.match(e);
949
- return g ? g[1] : null;
959
+ function HI(I, g) {
960
+ const e = I.match(g);
961
+ return e ? e[1] : null;
950
962
  }
951
- function Ne(I, e = {}) {
952
- return I.replace(/\\\|/g, Be).split(We).map((g) => {
953
- const c = pe(g.replace(/\u0000/g, "|").trim()).filter((s) => s && !!s.trim()), i = [];
963
+ function Ng(I, g = {}) {
964
+ return I.replace(/\\\|/g, Bg).split(Wg).map((e) => {
965
+ const c = pg(e.replace(/\u0000/g, "|").trim()).filter((s) => s && !!s.trim()), i = [];
954
966
  for (let s = 0, t = c.length; s < t; s += 1) {
955
967
  const n = c[s];
956
968
  let C = !1, a = -1;
957
969
  for (; !C && ++a < XI; ) {
958
- const l = rI[a], o = fI(n, l.multiRegex);
959
- o && (i.push(l.create(o, e)), C = !0);
970
+ const l = rI[a], o = HI(n, l.multiRegex);
971
+ o && (i.push(l.create(o, g)), C = !0);
960
972
  }
961
973
  if (!C)
962
974
  for (a = -1; ++a < XI; ) {
963
- const l = rI[a], o = fI(n, l.singleRegex);
975
+ const l = rI[a], o = HI(n, l.singleRegex);
964
976
  if (o) {
965
- i.push(l.create(o, e));
977
+ i.push(l.create(o, g));
966
978
  break;
967
979
  }
968
980
  }
@@ -970,11 +982,11 @@ function Ne(I, e = {}) {
970
982
  return i;
971
983
  });
972
984
  }
973
- var Ye = class {
974
- constructor(I, { isCaseSensitive: e = b.isCaseSensitive, ignoreDiacritics: g = b.ignoreDiacritics, includeMatches: c = b.includeMatches, minMatchCharLength: i = b.minMatchCharLength, ignoreLocation: s = b.ignoreLocation, findAllMatches: t = b.findAllMatches, location: n = b.location, threshold: C = b.threshold, distance: a = b.distance } = {}) {
985
+ var Yg = class {
986
+ constructor(I, { isCaseSensitive: g = b.isCaseSensitive, ignoreDiacritics: e = b.ignoreDiacritics, includeMatches: c = b.includeMatches, minMatchCharLength: i = b.minMatchCharLength, ignoreLocation: s = b.ignoreLocation, findAllMatches: t = b.findAllMatches, location: n = b.location, threshold: C = b.threshold, distance: a = b.distance } = {}) {
975
987
  this.query = null, this.options = {
976
- isCaseSensitive: e,
977
- ignoreDiacritics: g,
988
+ isCaseSensitive: g,
989
+ ignoreDiacritics: e,
978
990
  includeMatches: c,
979
991
  minMatchCharLength: i,
980
992
  findAllMatches: t,
@@ -982,29 +994,29 @@ var Ye = class {
982
994
  location: n,
983
995
  threshold: C,
984
996
  distance: a
985
- }, I = e ? I : I.toLowerCase(), I = g ? j(I) : I, this.pattern = I, this.query = Ne(this.pattern, this.options);
997
+ }, I = g ? I : I.toLowerCase(), I = e ? j(I) : I, this.pattern = I, this.query = Ng(this.pattern, this.options);
986
998
  }
987
- static condition(I, e) {
988
- return e.useExtendedSearch;
999
+ static condition(I, g) {
1000
+ return g.useExtendedSearch;
989
1001
  }
990
1002
  searchIn(I) {
991
- const e = this.query;
992
- if (!e) return {
1003
+ const g = this.query;
1004
+ if (!g) return {
993
1005
  isMatch: !1,
994
1006
  score: 1
995
1007
  };
996
- const { includeMatches: g, isCaseSensitive: c, ignoreDiacritics: i } = this.options;
1008
+ const { includeMatches: e, isCaseSensitive: c, ignoreDiacritics: i } = this.options;
997
1009
  I = c ? I : I.toLowerCase(), I = i ? j(I) : I;
998
1010
  let s = 0;
999
1011
  const t = [];
1000
1012
  let n = 0, C = !1;
1001
- for (let a = 0, l = e.length; a < l; a += 1) {
1002
- const o = e[a];
1013
+ for (let a = 0, l = g.length; a < l; a += 1) {
1014
+ const o = g[a];
1003
1015
  t.length = 0, s = 0, C = !1;
1004
1016
  for (let d = 0, A = o.length; d < A; d += 1) {
1005
- const u = o[d], { isMatch: h, indices: W, score: H } = u.search(I);
1017
+ const u = o[d], { isMatch: h, indices: W, score: f } = u.search(I);
1006
1018
  if (h)
1007
- s += 1, n += H, Ge(u.type) && (C = !0), g && (Ze.has(u.type) ? t.push(...W) : t.push(W));
1019
+ s += 1, n += f, Gg(u.type) && (C = !0), e && (Zg.has(u.type) ? t.push(...W) : t.push(W));
1008
1020
  else {
1009
1021
  n = 0, s = 0, t.length = 0, C = !1;
1010
1022
  break;
@@ -1015,7 +1027,7 @@ var Ye = class {
1015
1027
  isMatch: !0,
1016
1028
  score: n / s
1017
1029
  };
1018
- return C && (d.hasInverse = !0), g && (d.indices = ZI(t)), d;
1030
+ return C && (d.hasInverse = !0), e && (d.indices = ZI(t)), d;
1019
1031
  }
1020
1032
  }
1021
1033
  return {
@@ -1028,12 +1040,12 @@ const dI = [];
1028
1040
  function BI(...I) {
1029
1041
  dI.push(...I);
1030
1042
  }
1031
- function x(I, e) {
1032
- for (let g = 0, c = dI.length; g < c; g += 1) {
1033
- const i = dI[g];
1034
- if (i.condition(I, e)) return new i(I, e);
1043
+ function O(I, g) {
1044
+ for (let e = 0, c = dI.length; e < c; e += 1) {
1045
+ const i = dI[e];
1046
+ if (i.condition(I, g)) return new i(I, g);
1035
1047
  }
1036
- return new GI(I, e);
1048
+ return new GI(I, g);
1037
1049
  }
1038
1050
  const _ = {
1039
1051
  AND: "$and",
@@ -1041,26 +1053,26 @@ const _ = {
1041
1053
  }, hI = {
1042
1054
  PATH: "$path",
1043
1055
  PATTERN: "$val"
1044
- }, AI = (I) => !!(I[_.AND] || I[_.OR]), ye = (I) => !!I[hI.PATH], Ve = (I) => !w(I) && RI(I) && !AI(I), HI = (I) => ({ [_.AND]: Object.keys(I).map((e) => ({ [e]: I[e] })) });
1045
- function zI(I, e, { auto: g = !0 } = {}) {
1056
+ }, AI = (I) => !!(I[_.AND] || I[_.OR]), yg = (I) => !!I[hI.PATH], Vg = (I) => !w(I) && RI(I) && !AI(I), fI = (I) => ({ [_.AND]: Object.keys(I).map((g) => ({ [g]: I[g] })) });
1057
+ function zI(I, g, { auto: e = !0 } = {}) {
1046
1058
  const c = (i) => {
1047
1059
  if (y(i)) {
1048
1060
  const C = {
1049
1061
  keyId: null,
1050
1062
  pattern: i
1051
1063
  };
1052
- return g && (C.searcher = x(i, e)), C;
1064
+ return e && (C.searcher = O(i, g)), C;
1053
1065
  }
1054
- const s = Object.keys(i), t = ye(i);
1055
- if (!t && s.length > 1 && !AI(i)) return c(HI(i));
1056
- if (Ve(i)) {
1066
+ const s = Object.keys(i), t = yg(i);
1067
+ if (!t && s.length > 1 && !AI(i)) return c(fI(i));
1068
+ if (Vg(i)) {
1057
1069
  const C = t ? i[hI.PATH] : s[0], a = t ? i[hI.PATTERN] : i[C];
1058
- if (!y(a)) throw new Error(ee(C));
1070
+ if (!y(a)) throw new Error(gg(C));
1059
1071
  const l = {
1060
1072
  keyId: D(C),
1061
1073
  pattern: a
1062
1074
  };
1063
- return g && (l.searcher = x(a, e)), l;
1075
+ return e && (l.searcher = O(a, g)), l;
1064
1076
  }
1065
1077
  const n = {
1066
1078
  children: [],
@@ -1073,23 +1085,23 @@ function zI(I, e, { auto: g = !0 } = {}) {
1073
1085
  });
1074
1086
  }), n;
1075
1087
  };
1076
- return AI(I) || (I = HI(I)), c(I);
1088
+ return AI(I) || (I = fI(I)), c(I);
1077
1089
  }
1078
- function uI(I, { ignoreFieldNorm: e = b.ignoreFieldNorm }) {
1079
- let g = 1;
1090
+ function uI(I, { ignoreFieldNorm: g = b.ignoreFieldNorm }) {
1091
+ let e = 1;
1080
1092
  return I.forEach(({ key: c, norm: i, score: s }) => {
1081
1093
  const t = c ? c.weight : null;
1082
- g *= Math.pow(s === 0 && t ? Number.EPSILON : s, (t || 1) * (e ? 1 : i));
1083
- }), g;
1094
+ e *= Math.pow(s === 0 && t ? Number.EPSILON : s, (t || 1) * (g ? 1 : i));
1095
+ }), e;
1084
1096
  }
1085
- function Xe(I, { ignoreFieldNorm: e = b.ignoreFieldNorm }) {
1086
- I.forEach((g) => {
1087
- g.score = uI(g.matches, { ignoreFieldNorm: e });
1097
+ function Xg(I, { ignoreFieldNorm: g = b.ignoreFieldNorm }) {
1098
+ I.forEach((e) => {
1099
+ e.score = uI(e.matches, { ignoreFieldNorm: g });
1088
1100
  });
1089
1101
  }
1090
- var fe = class {
1091
- constructor(I, e) {
1092
- this.limit = I, this.heap = [], this.comparator = e;
1102
+ var Hg = class {
1103
+ constructor(I, g) {
1104
+ this.limit = I, this.heap = [], this.comparator = g;
1093
1105
  }
1094
1106
  get size() {
1095
1107
  return this.heap.length;
@@ -1101,183 +1113,183 @@ var fe = class {
1101
1113
  return this.heap.sort(this.comparator);
1102
1114
  }
1103
1115
  _bubbleUp(I) {
1104
- const e = this.heap;
1116
+ const g = this.heap;
1105
1117
  for (; I > 0; ) {
1106
- const g = I - 1 >> 1;
1107
- if (this.comparator(e[I], e[g]) <= 0) break;
1108
- const c = e[I];
1109
- e[I] = e[g], e[g] = c, I = g;
1118
+ const e = I - 1 >> 1;
1119
+ if (this.comparator(g[I], g[e]) <= 0) break;
1120
+ const c = g[I];
1121
+ g[I] = g[e], g[e] = c, I = e;
1110
1122
  }
1111
1123
  }
1112
1124
  _sinkDown(I) {
1113
- const e = this.heap, g = e.length;
1125
+ const g = this.heap, e = g.length;
1114
1126
  let c = I;
1115
1127
  do {
1116
1128
  I = c;
1117
1129
  const i = 2 * I + 1, s = 2 * I + 2;
1118
- if (i < g && this.comparator(e[i], e[c]) > 0 && (c = i), s < g && this.comparator(e[s], e[c]) > 0 && (c = s), c !== I) {
1119
- const t = e[I];
1120
- e[I] = e[c], e[c] = t;
1130
+ if (i < e && this.comparator(g[i], g[c]) > 0 && (c = i), s < e && this.comparator(g[s], g[c]) > 0 && (c = s), c !== I) {
1131
+ const t = g[I];
1132
+ g[I] = g[c], g[c] = t;
1121
1133
  }
1122
1134
  } while (c !== I);
1123
1135
  }
1124
1136
  };
1125
- function He(I) {
1126
- const e = [];
1127
- return I.matches.forEach((g) => {
1128
- if (!X(g.indices) || !g.indices.length) return;
1137
+ function fg(I) {
1138
+ const g = [];
1139
+ return I.matches.forEach((e) => {
1140
+ if (!X(e.indices) || !e.indices.length) return;
1129
1141
  const c = {
1130
- indices: g.indices,
1131
- value: g.value
1142
+ indices: e.indices,
1143
+ value: e.value
1132
1144
  };
1133
- g.key && (c.key = g.key.id), g.idx > -1 && (c.refIndex = g.idx), e.push(c);
1134
- }), e;
1145
+ e.key && (c.key = e.key.id), e.idx > -1 && (c.refIndex = e.idx), g.push(c);
1146
+ }), g;
1135
1147
  }
1136
- function Ke(I, e, { includeMatches: g = b.includeMatches, includeScore: c = b.includeScore } = {}) {
1148
+ function Kg(I, g, { includeMatches: e = b.includeMatches, includeScore: c = b.includeScore } = {}) {
1137
1149
  return I.map((i) => {
1138
1150
  const { idx: s } = i, t = {
1139
- item: e[s],
1151
+ item: g[s],
1140
1152
  refIndex: s
1141
1153
  };
1142
- return g && (t.matches = He(i)), c && (t.score = i.score), t;
1154
+ return e && (t.matches = fg(i)), c && (t.score = i.score), t;
1143
1155
  });
1144
1156
  }
1145
- const we = /[\p{L}\p{M}\p{N}_]+/gu, KI = /* @__PURE__ */ new WeakSet();
1146
- function ve(I) {
1157
+ const wg = /[\p{L}\p{M}\p{N}_]+/gu, KI = /* @__PURE__ */ new WeakSet();
1158
+ function vg(I) {
1147
1159
  KI.has(I) || (KI.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.`));
1148
1160
  }
1149
- function Re(I) {
1161
+ function Rg(I) {
1150
1162
  if (typeof I == "function") {
1151
- let e = !1;
1152
- return (g) => {
1153
- const c = I(g);
1154
- if (!e && (e = !0, !Array.isArray(c) || c.some((i) => typeof i != "string")))
1163
+ let g = !1;
1164
+ return (e) => {
1165
+ const c = I(e);
1166
+ if (!g && (g = !0, !Array.isArray(c) || c.some((i) => typeof i != "string")))
1155
1167
  throw new Error(`[Fuse] tokenize function must return string[]; received ${Array.isArray(c) ? "array containing non-strings" : typeof c}.`);
1156
1168
  return c;
1157
1169
  };
1158
1170
  }
1159
- return I instanceof RegExp ? (I.global || ve(I), (e) => e.match(I) || []) : (e) => e.match(we) || [];
1171
+ return I instanceof RegExp ? (I.global || vg(I), (g) => g.match(I) || []) : (g) => g.match(wg) || [];
1160
1172
  }
1161
- function bI({ isCaseSensitive: I = !1, ignoreDiacritics: e = !1, tokenize: g } = {}) {
1162
- const c = Re(g);
1173
+ function bI({ isCaseSensitive: I = !1, ignoreDiacritics: g = !1, tokenize: e } = {}) {
1174
+ const c = Rg(e);
1163
1175
  return { tokenize(i) {
1164
- return I || (i = i.toLowerCase()), e && (i = j(i)), c(i);
1176
+ return I || (i = i.toLowerCase()), g && (i = j(i)), c(i);
1165
1177
  } };
1166
1178
  }
1167
- var Se = class {
1168
- static condition(I, e) {
1169
- return e.useTokenSearch;
1179
+ var Fg = class {
1180
+ static condition(I, g) {
1181
+ return g.useTokenSearch;
1170
1182
  }
1171
- constructor(I, e) {
1172
- this.options = e, this.analyzer = bI({
1173
- isCaseSensitive: e.isCaseSensitive,
1174
- ignoreDiacritics: e.ignoreDiacritics,
1175
- tokenize: e.tokenize
1183
+ constructor(I, g) {
1184
+ this.options = g, this.analyzer = bI({
1185
+ isCaseSensitive: g.isCaseSensitive,
1186
+ ignoreDiacritics: g.ignoreDiacritics,
1187
+ tokenize: g.tokenize
1176
1188
  });
1177
- const g = this.analyzer.tokenize(I), { df: c, fieldCount: i } = e._invertedIndex;
1189
+ const e = this.analyzer.tokenize(I), { df: c, fieldCount: i } = g._invertedIndex;
1178
1190
  this.termSearchers = [], this.idfWeights = [];
1179
- for (const s of g) {
1191
+ for (const s of e) {
1180
1192
  this.termSearchers.push(new GI(s, {
1181
- location: e.location,
1182
- threshold: e.threshold,
1183
- distance: e.distance,
1184
- includeMatches: e.includeMatches,
1185
- findAllMatches: e.findAllMatches,
1186
- minMatchCharLength: e.minMatchCharLength,
1187
- isCaseSensitive: e.isCaseSensitive,
1188
- ignoreDiacritics: e.ignoreDiacritics,
1193
+ location: g.location,
1194
+ threshold: g.threshold,
1195
+ distance: g.distance,
1196
+ includeMatches: g.includeMatches,
1197
+ findAllMatches: g.findAllMatches,
1198
+ minMatchCharLength: g.minMatchCharLength,
1199
+ isCaseSensitive: g.isCaseSensitive,
1200
+ ignoreDiacritics: g.ignoreDiacritics,
1189
1201
  ignoreLocation: !0
1190
1202
  }));
1191
1203
  const t = c.get(s) || 0, n = Math.log(1 + (i - t + 0.5) / (t + 0.5));
1192
1204
  this.idfWeights.push(n);
1193
1205
  }
1194
- this.combineAll = e.tokenMatch === "all", this.numTerms = this.termSearchers.length, this.useMask = this.numTerms <= 31;
1206
+ this.combineAll = g.tokenMatch === "all", this.numTerms = this.termSearchers.length, this.useMask = this.numTerms <= 31;
1195
1207
  }
1196
1208
  searchIn(I) {
1197
1209
  if (!this.termSearchers.length) return {
1198
1210
  isMatch: !1,
1199
1211
  score: 1
1200
1212
  };
1201
- const e = [];
1202
- let g = 0, c = 0, i = 0, s = 0;
1213
+ const g = [];
1214
+ let e = 0, c = 0, i = 0, s = 0;
1203
1215
  const t = this.combineAll && !this.useMask ? /* @__PURE__ */ new Set() : null;
1204
1216
  for (let a = 0; a < this.termSearchers.length; a++) {
1205
1217
  const l = this.termSearchers[a].searchIn(I), o = this.idfWeights[a];
1206
- c += o, l.isMatch && (i++, g += o * (1 - l.score), l.indices && e.push(...l.indices), this.combineAll && (this.useMask ? s |= 1 << a : t.add(a)));
1218
+ c += o, l.isMatch && (i++, e += o * (1 - l.score), l.indices && g.push(...l.indices), this.combineAll && (this.useMask ? s |= 1 << a : t.add(a)));
1207
1219
  }
1208
1220
  if (i === 0) return {
1209
1221
  isMatch: !1,
1210
1222
  score: 1
1211
1223
  };
1212
- const n = c > 0 ? 1 - g / c : 0, C = {
1224
+ const n = c > 0 ? 1 - e / c : 0, C = {
1213
1225
  isMatch: !0,
1214
1226
  score: Math.max(1e-3, n)
1215
1227
  };
1216
- return this.options.includeMatches && e.length && (C.indices = ZI(e)), this.combineAll && (this.useMask ? C.matchedMask = s : C.matchedTerms = t, C.termCount = this.numTerms), C;
1228
+ return this.options.includeMatches && g.length && (C.indices = ZI(g)), this.combineAll && (this.useMask ? C.matchedMask = s : C.matchedTerms = t, C.termCount = this.numTerms), C;
1217
1229
  }
1218
1230
  };
1219
- function CI(I, e, g, c) {
1220
- const i = c.tokenize(e);
1231
+ function CI(I, g, e, c) {
1232
+ const i = c.tokenize(g);
1221
1233
  if (!i.length) return;
1222
- I.fieldCount++, I.docFieldCount.set(g, (I.docFieldCount.get(g) || 0) + 1);
1234
+ I.fieldCount++, I.docFieldCount.set(e, (I.docFieldCount.get(e) || 0) + 1);
1223
1235
  const s = new Set(i);
1224
- let t = I.docTermFieldHits.get(g);
1225
- t || (t = /* @__PURE__ */ new Map(), I.docTermFieldHits.set(g, t));
1236
+ let t = I.docTermFieldHits.get(e);
1237
+ t || (t = /* @__PURE__ */ new Map(), I.docTermFieldHits.set(e, t));
1226
1238
  for (const n of s)
1227
1239
  t.set(n, (t.get(n) || 0) + 1), I.df.set(n, (I.df.get(n) || 0) + 1);
1228
1240
  }
1229
- function jI(I, e, g, c) {
1230
- const { i, v: s, $: t } = e;
1241
+ function jI(I, g, e, c) {
1242
+ const { i, v: s, $: t } = g;
1231
1243
  if (s !== void 0) {
1232
1244
  CI(I, s, i, c);
1233
1245
  return;
1234
1246
  }
1235
1247
  if (t)
1236
- for (let n = 0; n < g; n++) {
1248
+ for (let n = 0; n < e; n++) {
1237
1249
  const C = t[n];
1238
1250
  if (C)
1239
1251
  if (Array.isArray(C)) for (const a of C) CI(I, a.v, i, c);
1240
1252
  else CI(I, C.v, i, c);
1241
1253
  }
1242
1254
  }
1243
- function Fe(I, e, g) {
1255
+ function Sg(I, g, e) {
1244
1256
  const c = {
1245
1257
  fieldCount: 0,
1246
1258
  df: /* @__PURE__ */ new Map(),
1247
1259
  docFieldCount: /* @__PURE__ */ new Map(),
1248
1260
  docTermFieldHits: /* @__PURE__ */ new Map()
1249
1261
  };
1250
- for (const i of I) jI(c, i, e, g);
1262
+ for (const i of I) jI(c, i, g, e);
1251
1263
  return c;
1252
1264
  }
1253
- function Je(I, e, g, c) {
1254
- jI(I, e, g, c);
1265
+ function Jg(I, g, e, c) {
1266
+ jI(I, g, e, c);
1255
1267
  }
1256
- function ke(I, e) {
1257
- const g = I.docFieldCount.get(e);
1258
- if (g === void 0) return;
1259
- I.fieldCount -= g, I.docFieldCount.delete(e);
1260
- const c = I.docTermFieldHits.get(e);
1268
+ function kg(I, g) {
1269
+ const e = I.docFieldCount.get(g);
1270
+ if (e === void 0) return;
1271
+ I.fieldCount -= e, I.docFieldCount.delete(g);
1272
+ const c = I.docTermFieldHits.get(g);
1261
1273
  if (c) {
1262
1274
  for (const [i, s] of c) {
1263
1275
  const t = (I.df.get(i) || 0) - s;
1264
1276
  t <= 0 ? I.df.delete(i) : I.df.set(i, t);
1265
1277
  }
1266
- I.docTermFieldHits.delete(e);
1278
+ I.docTermFieldHits.delete(g);
1267
1279
  }
1268
1280
  }
1269
- function wI(I, e) {
1270
- if (e.length === 0) return;
1271
- const g = Array.from(new Set(e)).sort((n, C) => n - C);
1272
- for (const n of g) ke(I, n);
1281
+ function wI(I, g) {
1282
+ if (g.length === 0) return;
1283
+ const e = Array.from(new Set(g)).sort((n, C) => n - C);
1284
+ for (const n of e) kg(I, n);
1273
1285
  const c = (n) => {
1274
- let C = 0, a = g.length;
1286
+ let C = 0, a = e.length;
1275
1287
  for (; C < a; ) {
1276
1288
  const l = C + a >>> 1;
1277
- g[l] < n ? C = l + 1 : a = l;
1289
+ e[l] < n ? C = l + 1 : a = l;
1278
1290
  }
1279
1291
  return n - C;
1280
- }, i = g[0], s = /* @__PURE__ */ new Map();
1292
+ }, i = e[0], s = /* @__PURE__ */ new Map();
1281
1293
  for (const [n, C] of I.docFieldCount) s.set(n > i ? c(n) : n, C);
1282
1294
  I.docFieldCount = s;
1283
1295
  const t = /* @__PURE__ */ new Map();
@@ -1285,64 +1297,64 @@ function wI(I, e) {
1285
1297
  I.docTermFieldHits = t;
1286
1298
  }
1287
1299
  var v = class {
1288
- constructor(I, e, g) {
1300
+ constructor(I, g, e) {
1289
1301
  this.options = {
1290
1302
  ...b,
1291
- ...e
1292
- }, this.options.useExtendedSearch, this.options.useTokenSearch, this._keyStore = new te(this.options.keys), this._docs = I, this._myIndex = null, this._invertedIndex = null, this.setCollection(I, g), this._lastQuery = null, this._lastSearcher = null;
1303
+ ...g
1304
+ }, this.options.useExtendedSearch, this.options.useTokenSearch, this._keyStore = new tg(this.options.keys), this._docs = I, this._myIndex = null, this._invertedIndex = null, this.setCollection(I, e), this._lastQuery = null, this._lastSearcher = null;
1293
1305
  }
1294
1306
  _getSearcher(I) {
1295
1307
  if (this._lastQuery === I) return this._lastSearcher;
1296
- const e = x(I, this._invertedIndex ? {
1308
+ const g = O(I, this._invertedIndex ? {
1297
1309
  ...this.options,
1298
1310
  _invertedIndex: this._invertedIndex
1299
1311
  } : this.options);
1300
- return this._lastQuery = I, this._lastSearcher = e, e;
1312
+ return this._lastQuery = I, this._lastSearcher = g, g;
1301
1313
  }
1302
- setCollection(I, e) {
1303
- if (this._docs = I, e && !(e instanceof mI)) throw new Error(Ie);
1304
- if (this._myIndex = e || JI(this.options.keys, this._docs, {
1314
+ setCollection(I, g) {
1315
+ if (this._docs = I, g && !(g instanceof mI)) throw new Error(Ig);
1316
+ if (this._myIndex = g || JI(this.options.keys, this._docs, {
1305
1317
  getFn: this.options.getFn,
1306
1318
  fieldNormWeight: this.options.fieldNormWeight
1307
1319
  }), this.options.useTokenSearch) {
1308
- const g = bI({
1320
+ const e = bI({
1309
1321
  isCaseSensitive: this.options.isCaseSensitive,
1310
1322
  ignoreDiacritics: this.options.ignoreDiacritics,
1311
1323
  tokenize: this.options.tokenize
1312
1324
  });
1313
- this._invertedIndex = Fe(this._myIndex.records, this._myIndex.keys.length, g);
1325
+ this._invertedIndex = Sg(this._myIndex.records, this._myIndex.keys.length, e);
1314
1326
  }
1315
1327
  this._invalidateSearcherCache();
1316
1328
  }
1317
1329
  add(I) {
1318
1330
  if (!X(I)) return;
1319
1331
  this._docs.push(I);
1320
- const e = this._myIndex.add(I, this._docs.length - 1);
1321
- if (this._invertedIndex && e) {
1322
- const g = bI({
1332
+ const g = this._myIndex.add(I, this._docs.length - 1);
1333
+ if (this._invertedIndex && g) {
1334
+ const e = bI({
1323
1335
  isCaseSensitive: this.options.isCaseSensitive,
1324
1336
  ignoreDiacritics: this.options.ignoreDiacritics,
1325
1337
  tokenize: this.options.tokenize
1326
1338
  });
1327
- Je(this._invertedIndex, e, this._myIndex.keys.length, g);
1339
+ Jg(this._invertedIndex, g, this._myIndex.keys.length, e);
1328
1340
  }
1329
1341
  this._invalidateSearcherCache();
1330
1342
  }
1331
1343
  remove(I = () => !1) {
1332
- const e = [], g = [];
1333
- for (let c = 0, i = this._docs.length; c < i; c += 1) I(this._docs[c], c) && (e.push(this._docs[c]), g.push(c));
1334
- if (g.length) {
1335
- this._invertedIndex && wI(this._invertedIndex, g);
1336
- const c = new Set(g);
1337
- this._docs = this._docs.filter((i, s) => !c.has(s)), this._myIndex.removeAll(g), this._invalidateSearcherCache();
1344
+ const g = [], e = [];
1345
+ for (let c = 0, i = this._docs.length; c < i; c += 1) I(this._docs[c], c) && (g.push(this._docs[c]), e.push(c));
1346
+ if (e.length) {
1347
+ this._invertedIndex && wI(this._invertedIndex, e);
1348
+ const c = new Set(e);
1349
+ this._docs = this._docs.filter((i, s) => !c.has(s)), this._myIndex.removeAll(e), this._invalidateSearcherCache();
1338
1350
  }
1339
- return e;
1351
+ return g;
1340
1352
  }
1341
1353
  removeAt(I) {
1342
1354
  if (!Number.isInteger(I) || I < 0 || I >= this._docs.length) throw new Error(aI);
1343
1355
  this._invertedIndex && wI(this._invertedIndex, [I]);
1344
- const e = this._docs.splice(I, 1)[0];
1345
- return this._myIndex.removeAt(I), this._invalidateSearcherCache(), e;
1356
+ const g = this._docs.splice(I, 1)[0];
1357
+ return this._myIndex.removeAt(I), this._invalidateSearcherCache(), g;
1346
1358
  }
1347
1359
  _invalidateSearcherCache() {
1348
1360
  this._lastQuery = null, this._lastSearcher = null;
@@ -1353,19 +1365,19 @@ var v = class {
1353
1365
  _normalizedKeys() {
1354
1366
  return this._myIndex.keys.map((I) => this._keyStore.get(I.id) || I);
1355
1367
  }
1356
- search(I, e) {
1357
- const { limit: g = -1 } = e || {}, { includeMatches: c, includeScore: i, shouldSort: s, sortFn: t, ignoreFieldNorm: n } = this.options;
1368
+ search(I, g) {
1369
+ const { limit: e = -1 } = g || {}, { includeMatches: c, includeScore: i, shouldSort: s, sortFn: t, ignoreFieldNorm: n } = this.options;
1358
1370
  if (y(I) && !I.trim()) {
1359
1371
  let d = this._docs.map((A, u) => ({
1360
1372
  item: A,
1361
1373
  refIndex: u
1362
1374
  }));
1363
- return T(g) && g > -1 && (d = d.slice(0, g)), d;
1375
+ return T(e) && e > -1 && (d = d.slice(0, e)), d;
1364
1376
  }
1365
- const C = s && T(g) && g > 0 && y(I), a = t, l = (d, A) => a(d, A) || d.idx - A.idx;
1377
+ const C = s && T(e) && e > 0 && y(I), a = t, l = (d, A) => a(d, A) || d.idx - A.idx;
1366
1378
  let o;
1367
1379
  if (C) {
1368
- const d = new fe(g, l);
1380
+ const d = new Hg(e, l);
1369
1381
  y(this._docs[0]) ? this._searchStringList(I, {
1370
1382
  heap: d,
1371
1383
  ignoreFieldNorm: n
@@ -1374,14 +1386,14 @@ var v = class {
1374
1386
  ignoreFieldNorm: n
1375
1387
  }), o = d.extractSorted();
1376
1388
  } else
1377
- o = y(I) ? y(this._docs[0]) ? this._searchStringList(I) : this._searchObjectList(I) : this._searchLogical(I), Xe(o, { ignoreFieldNorm: n }), s && o.sort(y(I) ? l : a), T(g) && g > -1 && (o = o.slice(0, g));
1378
- return Ke(o, this._docs, {
1389
+ o = y(I) ? y(this._docs[0]) ? this._searchStringList(I) : this._searchObjectList(I) : this._searchLogical(I), Xg(o, { ignoreFieldNorm: n }), s && o.sort(y(I) ? l : a), T(e) && e > -1 && (o = o.slice(0, e));
1390
+ return Kg(o, this._docs, {
1379
1391
  includeMatches: c,
1380
1392
  includeScore: i
1381
1393
  });
1382
1394
  }
1383
- _searchStringList(I, { heap: e, ignoreFieldNorm: g } = {}) {
1384
- const c = this._getSearcher(I), i = this.options.useTokenSearch && this.options.tokenMatch === "all", { records: s } = this._myIndex, t = e ? null : [];
1395
+ _searchStringList(I, { heap: g, ignoreFieldNorm: e } = {}) {
1396
+ const c = this._getSearcher(I), i = this.options.useTokenSearch && this.options.tokenMatch === "all", { records: s } = this._myIndex, t = g ? null : [];
1385
1397
  return s.forEach(({ v: n, i: C, n: a }) => {
1386
1398
  if (!X(n)) return;
1387
1399
  const l = c.searchIn(n);
@@ -1400,20 +1412,20 @@ var v = class {
1400
1412
  idx: C,
1401
1413
  matches: d
1402
1414
  };
1403
- e ? (A.score = uI(A.matches, { ignoreFieldNorm: g }), e.insert(A)) : t.push(A);
1415
+ g ? (A.score = uI(A.matches, { ignoreFieldNorm: e }), g.insert(A)) : t.push(A);
1404
1416
  }
1405
1417
  }
1406
1418
  }), t;
1407
1419
  }
1408
1420
  _searchLogical(I) {
1409
- const e = zI(I, this.options), g = this._normalizedKeys(), c = (n, C, a) => {
1421
+ const g = zI(I, this.options), e = this._normalizedKeys(), c = (n, C, a) => {
1410
1422
  if (!("children" in n)) {
1411
1423
  const { keyId: A, searcher: u } = n;
1412
1424
  let h;
1413
- return A === null ? (h = [], g.forEach((W, H) => {
1425
+ return A === null ? (h = [], e.forEach((W, f) => {
1414
1426
  h.push(...this._findMatches({
1415
1427
  key: W,
1416
- value: C[H],
1428
+ value: C[f],
1417
1429
  searcher: u
1418
1430
  }));
1419
1431
  })) : h = this._findMatches({
@@ -1436,7 +1448,7 @@ var v = class {
1436
1448
  }, i = this._myIndex.records, s = /* @__PURE__ */ new Map(), t = [];
1437
1449
  return i.forEach(({ $: n, i: C }) => {
1438
1450
  if (X(n)) {
1439
- const a = c(e, n, C);
1451
+ const a = c(g, n, C);
1440
1452
  a.length && (s.has(C) || (s.set(C, {
1441
1453
  idx: C,
1442
1454
  item: n,
@@ -1447,8 +1459,8 @@ var v = class {
1447
1459
  }
1448
1460
  }), t;
1449
1461
  }
1450
- _searchObjectList(I, { heap: e, ignoreFieldNorm: g } = {}) {
1451
- const c = this._getSearcher(I), i = this.options.useTokenSearch && this.options.tokenMatch === "all", { records: s } = this._myIndex, t = this._normalizedKeys(), n = e ? null : [];
1462
+ _searchObjectList(I, { heap: g, ignoreFieldNorm: e } = {}) {
1463
+ const c = this._getSearcher(I), i = this.options.useTokenSearch && this.options.tokenMatch === "all", { records: s } = this._myIndex, t = this._normalizedKeys(), n = g ? null : [];
1452
1464
  return s.forEach(({ $: C, i: a }) => {
1453
1465
  if (!X(C)) return;
1454
1466
  const l = [];
@@ -1466,16 +1478,16 @@ var v = class {
1466
1478
  item: C,
1467
1479
  matches: l
1468
1480
  };
1469
- e ? (A.score = uI(A.matches, { ignoreFieldNorm: g }), e.insert(A)) : n.push(A);
1481
+ g ? (A.score = uI(A.matches, { ignoreFieldNorm: e }), g.insert(A)) : n.push(A);
1470
1482
  }
1471
1483
  }), n;
1472
1484
  }
1473
- _findMatches({ key: I, value: e, searcher: g }) {
1474
- if (!X(e)) return [];
1485
+ _findMatches({ key: I, value: g, searcher: e }) {
1486
+ if (!X(g)) return [];
1475
1487
  const c = [];
1476
- if (w(e)) e.forEach(({ v: i, i: s, n: t }) => {
1488
+ if (w(g)) g.forEach(({ v: i, i: s, n: t }) => {
1477
1489
  if (!X(i)) return;
1478
- const n = g.searchIn(i);
1490
+ const n = e.searchIn(i);
1479
1491
  if (n.isMatch) {
1480
1492
  const C = {
1481
1493
  score: n.score,
@@ -1490,7 +1502,7 @@ var v = class {
1490
1502
  }
1491
1503
  });
1492
1504
  else {
1493
- const { v: i, n: s } = e, t = g.searchIn(i);
1505
+ const { v: i, n: s } = g, t = e.searchIn(i);
1494
1506
  if (t.isMatch) {
1495
1507
  const n = {
1496
1508
  score: t.score,
@@ -1506,91 +1518,91 @@ var v = class {
1506
1518
  return c;
1507
1519
  }
1508
1520
  _coversAllTokens(I) {
1509
- const e = I.length ? I[0].termCount : void 0;
1510
- if (e === void 0) return !0;
1511
- if (e <= 31) {
1521
+ const g = I.length ? I[0].termCount : void 0;
1522
+ if (g === void 0) return !0;
1523
+ if (g <= 31) {
1512
1524
  let c = 0;
1513
1525
  for (let i = 0; i < I.length; i++) c |= I[i].matchedMask || 0;
1514
- return c === 2 ** e - 1;
1526
+ return c === 2 ** g - 1;
1515
1527
  }
1516
- const g = /* @__PURE__ */ new Set();
1528
+ const e = /* @__PURE__ */ new Set();
1517
1529
  for (let c = 0; c < I.length; c++) {
1518
1530
  const i = I[c].matchedTerms;
1519
- if (i) for (const s of i) g.add(s);
1531
+ if (i) for (const s of i) e.add(s);
1520
1532
  }
1521
- return g.size === e;
1533
+ return e.size === g;
1522
1534
  }
1523
1535
  };
1524
1536
  v.version = "7.5.0";
1525
1537
  v.createIndex = JI;
1526
- v.parseIndex = he;
1538
+ v.parseIndex = hg;
1527
1539
  v.config = b;
1528
- v.match = function(I, e, g) {
1529
- if (g && g.useTokenSearch) throw new Error(se);
1530
- return x(I, {
1540
+ v.match = function(I, g, e) {
1541
+ if (e && e.useTokenSearch) throw new Error(sg);
1542
+ return O(I, {
1531
1543
  ...b,
1532
- ...g
1533
- }).searchIn(e);
1544
+ ...e
1545
+ }).searchIn(g);
1534
1546
  };
1535
1547
  v.parseQuery = zI;
1536
- BI(Ye);
1537
- BI(Se);
1548
+ BI(Yg);
1549
+ BI(Fg);
1538
1550
  v.use = function(...I) {
1539
- I.forEach((e) => BI(e));
1551
+ I.forEach((g) => BI(g));
1540
1552
  };
1541
1553
  var iI = v;
1542
1554
  function WI(I) {
1543
- const e = G(I.cache, "cpu");
1544
- if (e) return e;
1545
- let g = "";
1546
- if (S) {
1555
+ const g = G(I.cache, "cpu");
1556
+ if (g) return g;
1557
+ let e = "";
1558
+ if (F) {
1547
1559
  try {
1548
1560
  const i = Z("wmic cpu get name /format:list").match(/Name=(.+)/);
1549
- i && (g = i[1].trim());
1561
+ i && (e = i[1].trim());
1550
1562
  } catch {
1551
1563
  }
1552
- if (!g)
1564
+ if (!e)
1553
1565
  try {
1554
1566
  const c = Z(
1555
1567
  'powershell.exe -Command "Get-WmiObject -Class Win32_Processor | Select-Object -ExpandProperty Name"'
1556
1568
  );
1557
- c.trim() && (g = c.trim());
1569
+ c.trim() && (e = c.trim());
1558
1570
  } catch {
1559
1571
  }
1560
1572
  } else if (p) {
1561
1573
  try {
1562
1574
  const i = Z("lscpu").match(/Model name:\s*([^\n,]+)/);
1563
- i && (g = i[1].trim());
1575
+ i && (e = i[1].trim());
1564
1576
  } catch {
1565
1577
  }
1566
- if (!g)
1578
+ if (!e)
1567
1579
  try {
1568
1580
  const c = m.readFileSync("/proc/cpuinfo", "utf8"), i = c.match(/model name\s*:\s*([^\n]+)/), s = c.match(/Hardware\s*:\s*([^\n]+)/);
1569
- i ? g = i[1].trim() : s && (g = s[1].trim());
1581
+ i ? e = i[1].trim() : s && (e = s[1].trim());
1570
1582
  } catch {
1571
1583
  }
1572
1584
  } else {
1573
1585
  const c = B.cpus();
1574
- c.length > 0 && (g = c[0].model.trim().replace(/[\r\n]+/g, " "));
1586
+ c.length > 0 && (e = c[0].model.trim().replace(/[\r\n]+/g, " "));
1575
1587
  }
1576
- return g ? (g = g.trim().replace(/with .*/, ""), r(I.cache, "cpu", g), g) : (r(I.cache, "cpu", ""), "");
1588
+ return e ? (e = e.trim().replace(/with .*/, ""), r(I.cache, "cpu", e), e) : (r(I.cache, "cpu", ""), "");
1577
1589
  }
1578
1590
  function pI(I) {
1579
- const e = G(I.cache, "gpu");
1580
- if (e !== null) return e;
1581
- if (S) {
1582
- const g = [];
1591
+ const g = G(I.cache, "gpu");
1592
+ if (g !== null) return g;
1593
+ if (F) {
1594
+ const e = [];
1583
1595
  try {
1584
1596
  const i = Z(
1585
1597
  "wmic path win32_VideoController get name /format:list"
1586
1598
  ).matchAll(/Name=(.+)/g);
1587
1599
  for (const s of i) {
1588
1600
  const t = s[1].trim();
1589
- t && !t.includes("Microsoft Basic") && g.push(t);
1601
+ t && !t.includes("Microsoft Basic") && e.push(t);
1590
1602
  }
1591
1603
  } catch {
1592
1604
  }
1593
- if (g.length === 0)
1605
+ if (e.length === 0)
1594
1606
  try {
1595
1607
  const c = Z(
1596
1608
  `powershell.exe -Command "Get-WmiObject -Class Win32_VideoController | Where-Object {$_.Name -notlike '*Microsoft Basic*'} | Select-Object -ExpandProperty Name"`
@@ -1598,17 +1610,17 @@ function pI(I) {
1598
1610
  if (c.trim())
1599
1611
  for (const i of c.trim().split(/\r?\n/)) {
1600
1612
  const s = i.trim();
1601
- s && !s.includes("Microsoft Basic") && g.push(s);
1613
+ s && !s.includes("Microsoft Basic") && e.push(s);
1602
1614
  }
1603
1615
  } catch {
1604
1616
  }
1605
- if (g.length > 0) {
1606
- const c = g.join(", ");
1617
+ if (e.length > 0) {
1618
+ const c = e.join(", ");
1607
1619
  return r(I.cache, "gpu", c), c;
1608
1620
  }
1609
1621
  } else if (N)
1610
1622
  try {
1611
- const g = Z("system_profiler SPDisplaysDataType"), c = Array.from(g.matchAll(/Chipset Model:\s*(.+)/g)).map(
1623
+ const e = Z("system_profiler SPDisplaysDataType"), c = Array.from(e.matchAll(/Chipset Model:\s*(.+)/g)).map(
1612
1624
  (i) => i[1].trim()
1613
1625
  );
1614
1626
  if (c.length > 0) {
@@ -1619,8 +1631,8 @@ function pI(I) {
1619
1631
  }
1620
1632
  else if (p)
1621
1633
  try {
1622
- const g = Z("lspci"), c = [], i = /(?:VGA compatible controller|3D controller|Display controller)/i, s = /(?:NVIDIA|GeForce|RTX|GTX|Quadro|Tesla|AMD|ATI|Radeon|Navi|Vega|RX|Intel.*(?:Arc|UHD|Iris|HD Graphics))/i;
1623
- for (const t of g.split(`
1634
+ const e = Z("lspci"), c = [], i = /(?:VGA compatible controller|3D controller|Display controller)/i, s = /(?:NVIDIA|GeForce|RTX|GTX|Quadro|Tesla|AMD|ATI|Radeon|Navi|Vega|RX|Intel.*(?:Arc|UHD|Iris|HD Graphics))/i;
1635
+ for (const t of e.split(`
1624
1636
  `)) {
1625
1637
  if (!i.test(t) || !s.test(t)) continue;
1626
1638
  let n;
@@ -1635,12 +1647,12 @@ function pI(I) {
1635
1647
  }
1636
1648
  return r(I.cache, "gpu", ""), "";
1637
1649
  }
1638
- function ze() {
1650
+ function zg() {
1639
1651
  if (N) {
1640
1652
  try {
1641
- const e = Z("system_profiler SPDisplaysDataType").match(/Resolution:\s*(\d+) x (\d+)/);
1642
- if (e)
1643
- return `${e[1]}x${e[2]}`;
1653
+ const g = Z("system_profiler SPDisplaysDataType").match(/Resolution:\s*(\d+) x (\d+)/);
1654
+ if (g)
1655
+ return `${g[1]}x${g[2]}`;
1644
1656
  } catch {
1645
1657
  }
1646
1658
  return "";
@@ -1648,19 +1660,19 @@ function ze() {
1648
1660
  if (!p) return "";
1649
1661
  try {
1650
1662
  if (process.env.DISPLAY) {
1651
- const e = Z("xrandr").match(/(\d+x\d+)\+\d+\+\d+/);
1652
- if (e)
1653
- return e[1];
1663
+ const g = Z("xrandr").match(/(\d+x\d+)\+\d+\+\d+/);
1664
+ if (g)
1665
+ return g[1];
1654
1666
  }
1655
1667
  } catch {
1656
1668
  }
1657
1669
  return "";
1658
1670
  }
1659
- function je(I) {
1660
- const e = G(I.cache, "bench");
1661
- if (e) return e;
1662
- const g = WI(I);
1663
- if (!g)
1671
+ function jg(I) {
1672
+ const g = G(I.cache, "bench");
1673
+ if (g) return g;
1674
+ const e = WI(I);
1675
+ if (!e)
1664
1676
  return r(I.cache, "bench", ""), "";
1665
1677
  try {
1666
1678
  let c;
@@ -1673,7 +1685,7 @@ function je(I) {
1673
1685
  c = `./bench/${i}`;
1674
1686
  else
1675
1687
  try {
1676
- const o = new URL((/* @__PURE__ */ Object.assign({ "./memory.ts": P, "./network.ts": $, "./platform.ts": q, "./process.ts": II, "./settings.ts": eI, "./software.ts": gI, "./system-status.ts": cI }))[`./${i}`], import.meta.url);
1688
+ const o = new URL((/* @__PURE__ */ Object.assign({ "./memory.ts": P, "./network.ts": $, "./platform.ts": q, "./process.ts": II, "./settings.ts": gI, "./software.ts": eI, "./system-status.ts": cI }))[`./${i}`], import.meta.url);
1677
1689
  c = o.pathname, m.existsSync(c) || (c = o.pathname.substring(0, o.pathname.lastIndexOf("/")) + `/${i}`);
1678
1690
  } catch {
1679
1691
  c = i;
@@ -1682,7 +1694,7 @@ function je(I) {
1682
1694
  keys: ["name"],
1683
1695
  threshold: 0.6,
1684
1696
  minMatchCharLength: 3
1685
- }).search(g);
1697
+ }).search(e);
1686
1698
  if (l.length > 0) {
1687
1699
  const o = l[0].item, d = Math.round(o.score / 100) / 10, A = o.rank, u = `${d}k #${A}`;
1688
1700
  return r(I.cache, "bench", u), u;
@@ -1691,11 +1703,11 @@ function je(I) {
1691
1703
  }
1692
1704
  return r(I.cache, "bench", ""), "";
1693
1705
  }
1694
- function Me(I) {
1695
- const e = G(I.cache, "cpu_bench_info");
1696
- if (e) return e;
1697
- const g = WI(I);
1698
- if (!g)
1706
+ function Mg(I) {
1707
+ const g = G(I.cache, "cpu_bench_info");
1708
+ if (g) return g;
1709
+ const e = WI(I);
1710
+ if (!e)
1699
1711
  return r(I.cache, "cpu_bench_info", ""), "";
1700
1712
  try {
1701
1713
  let c;
@@ -1708,7 +1720,7 @@ function Me(I) {
1708
1720
  c = `./bench/${i}`;
1709
1721
  else
1710
1722
  try {
1711
- const o = new URL((/* @__PURE__ */ Object.assign({ "./memory.ts": P, "./network.ts": $, "./platform.ts": q, "./process.ts": II, "./settings.ts": eI, "./software.ts": gI, "./system-status.ts": cI }))[`./${i}`], import.meta.url);
1723
+ const o = new URL((/* @__PURE__ */ Object.assign({ "./memory.ts": P, "./network.ts": $, "./platform.ts": q, "./process.ts": II, "./settings.ts": gI, "./software.ts": eI, "./system-status.ts": cI }))[`./${i}`], import.meta.url);
1712
1724
  c = o.pathname, m.existsSync(c) || (c = o.pathname.substring(0, o.pathname.lastIndexOf("/")) + `/${i}`);
1713
1725
  } catch {
1714
1726
  c = i;
@@ -1721,7 +1733,7 @@ function Me(I) {
1721
1733
  keys: ["name"],
1722
1734
  threshold: 0.6,
1723
1735
  minMatchCharLength: 3
1724
- }).search(g);
1736
+ }).search(e);
1725
1737
  if (l.length > 0) {
1726
1738
  const o = l[0].item, d = Math.round(o.score / 100) / 10, A = o.rank;
1727
1739
  let u = "Unknown";
@@ -1733,11 +1745,11 @@ function Me(I) {
1733
1745
  }
1734
1746
  return r(I.cache, "cpu_bench_info", ""), "";
1735
1747
  }
1736
- function Qe(I) {
1737
- const e = G(I.cache, "gpu_bench");
1738
- if (e) return e;
1739
- const g = pI(I);
1740
- if (!g)
1748
+ function Lg(I) {
1749
+ const g = G(I.cache, "gpu_bench");
1750
+ if (g) return g;
1751
+ const e = pI(I);
1752
+ if (!e)
1741
1753
  return r(I.cache, "gpu_bench", ""), "";
1742
1754
  try {
1743
1755
  let c;
@@ -1750,7 +1762,7 @@ function Qe(I) {
1750
1762
  c = `./bench/${i}`;
1751
1763
  else
1752
1764
  try {
1753
- const o = new URL((/* @__PURE__ */ Object.assign({ "./memory.ts": P, "./network.ts": $, "./platform.ts": q, "./process.ts": II, "./settings.ts": eI, "./software.ts": gI, "./system-status.ts": cI }))[`./${i}`], import.meta.url);
1765
+ const o = new URL((/* @__PURE__ */ Object.assign({ "./memory.ts": P, "./network.ts": $, "./platform.ts": q, "./process.ts": II, "./settings.ts": gI, "./software.ts": eI, "./system-status.ts": cI }))[`./${i}`], import.meta.url);
1754
1766
  c = o.pathname, m.existsSync(c) || (c = o.pathname.substring(0, o.pathname.lastIndexOf("/")) + `/${i}`);
1755
1767
  } catch {
1756
1768
  c = i;
@@ -1759,7 +1771,7 @@ function Qe(I) {
1759
1771
  keys: ["name"],
1760
1772
  threshold: 0.6,
1761
1773
  minMatchCharLength: 3
1762
- }).search(g);
1774
+ }).search(e);
1763
1775
  if (l.length > 0) {
1764
1776
  const o = l[0].item, d = Math.round(o.score / 100) / 10, A = o.rank, u = `${d}k #${A}`;
1765
1777
  return r(I.cache, "gpu_bench", u), u;
@@ -1768,11 +1780,11 @@ function Qe(I) {
1768
1780
  }
1769
1781
  return r(I.cache, "gpu_bench", ""), "";
1770
1782
  }
1771
- function Le(I) {
1772
- const e = G(I.cache, "gpu_bench_info");
1773
- if (e) return e;
1774
- const g = pI(I);
1775
- if (!g)
1783
+ function Qg(I) {
1784
+ const g = G(I.cache, "gpu_bench_info");
1785
+ if (g) return g;
1786
+ const e = pI(I);
1787
+ if (!e)
1776
1788
  return r(I.cache, "gpu_bench_info", ""), "";
1777
1789
  try {
1778
1790
  let c;
@@ -1785,7 +1797,7 @@ function Le(I) {
1785
1797
  c = `./bench/${i}`;
1786
1798
  else
1787
1799
  try {
1788
- const o = new URL((/* @__PURE__ */ Object.assign({ "./memory.ts": P, "./network.ts": $, "./platform.ts": q, "./process.ts": II, "./settings.ts": eI, "./software.ts": gI, "./system-status.ts": cI }))[`./${i}`], import.meta.url);
1800
+ const o = new URL((/* @__PURE__ */ Object.assign({ "./memory.ts": P, "./network.ts": $, "./platform.ts": q, "./process.ts": II, "./settings.ts": gI, "./software.ts": eI, "./system-status.ts": cI }))[`./${i}`], import.meta.url);
1789
1801
  c = o.pathname, m.existsSync(c) || (c = o.pathname.substring(0, o.pathname.lastIndexOf("/")) + `/${i}`);
1790
1802
  } catch {
1791
1803
  c = i;
@@ -1798,7 +1810,7 @@ function Le(I) {
1798
1810
  keys: ["name"],
1799
1811
  threshold: 0.6,
1800
1812
  minMatchCharLength: 3
1801
- }).search(g);
1813
+ }).search(e);
1802
1814
  if (l.length > 0) {
1803
1815
  const o = l[0].item, d = Math.round(o.score / 100) / 10, A = o.rank;
1804
1816
  let u = "Unknown";
@@ -1811,9 +1823,9 @@ function Le(I) {
1811
1823
  }
1812
1824
  return r(I.cache, "gpu_bench_info", ""), "";
1813
1825
  }
1814
- function Ue(I) {
1815
- const e = G(I.cache, "ram_used");
1816
- if (e) return e;
1826
+ function Ug(I) {
1827
+ const g = G(I.cache, "ram_used");
1828
+ if (g) return g;
1817
1829
  if (p)
1818
1830
  try {
1819
1831
  const C = m.readFileSync("/proc/meminfo", "utf8"), a = C.match(/MemTotal:\s+(\d+) kB/), l = C.match(/MemFree:\s+(\d+) kB/);
@@ -1823,24 +1835,24 @@ function Ue(I) {
1823
1835
  }
1824
1836
  } catch {
1825
1837
  }
1826
- const g = B.totalmem(), c = B.freemem(), i = g - c, s = Math.round(g / (1024 * 1024 * 1024)), n = `${Math.round(i / (1024 * 1024 * 1024))}/${s}GB`;
1838
+ const e = B.totalmem(), c = B.freemem(), i = e - c, s = Math.round(e / (1024 * 1024 * 1024)), n = `${Math.round(i / (1024 * 1024 * 1024))}/${s}GB`;
1827
1839
  return r(I.cache, "ram_used", n), n;
1828
1840
  }
1829
- function Te() {
1841
+ function Tg() {
1830
1842
  if (p) {
1831
1843
  try {
1832
- const e = m.readFileSync("/proc/meminfo", "utf8").match(/MemAvailable:\s+(\d+) kB/);
1833
- if (e)
1834
- return `${Math.round(parseInt(e[1]) / 1024 / 1024)}GB available`;
1844
+ const g = m.readFileSync("/proc/meminfo", "utf8").match(/MemAvailable:\s+(\d+) kB/);
1845
+ if (g)
1846
+ return `${Math.round(parseInt(g[1]) / 1024 / 1024)}GB available`;
1835
1847
  } catch {
1836
1848
  }
1837
1849
  return "";
1838
1850
  }
1839
1851
  if (N) {
1840
1852
  try {
1841
- const I = Z("vm_stat"), e = I.match(/page size of (\d+) bytes/), g = I.match(/Pages free:\s+(\d+)\./), c = I.match(/Pages inactive:\s+(\d+)\./);
1842
- if (e && g && c) {
1843
- const i = parseInt(e[1]), s = parseInt(g[1]) + parseInt(c[1]);
1853
+ const I = Z("vm_stat"), g = I.match(/page size of (\d+) bytes/), e = I.match(/Pages free:\s+(\d+)\./), c = I.match(/Pages inactive:\s+(\d+)\./);
1854
+ if (g && e && c) {
1855
+ const i = parseInt(g[1]), s = parseInt(e[1]) + parseInt(c[1]);
1844
1856
  return `${Math.round(s * i / (1024 * 1024 * 1024))}GB available`;
1845
1857
  }
1846
1858
  } catch {
@@ -1849,12 +1861,12 @@ function Te() {
1849
1861
  }
1850
1862
  return "";
1851
1863
  }
1852
- function De() {
1864
+ function Dg() {
1853
1865
  if (p) {
1854
1866
  try {
1855
- const I = m.readFileSync("/proc/meminfo", "utf8"), e = I.match(/SwapTotal:\s+(\d+) kB/), g = I.match(/SwapFree:\s+(\d+) kB/);
1856
- if (e && g) {
1857
- const c = parseInt(e[1]), i = parseInt(g[1]), s = c - i;
1867
+ const I = m.readFileSync("/proc/meminfo", "utf8"), g = I.match(/SwapTotal:\s+(\d+) kB/), e = I.match(/SwapFree:\s+(\d+) kB/);
1868
+ if (g && e) {
1869
+ const c = parseInt(g[1]), i = parseInt(e[1]), s = c - i;
1858
1870
  if (c > 0) {
1859
1871
  const t = Math.round(s / c * 100), n = Math.round(s / 1024);
1860
1872
  return `${t}% (${n}MB) swap`;
@@ -1866,12 +1878,12 @@ function De() {
1866
1878
  }
1867
1879
  if (N) {
1868
1880
  try {
1869
- const e = Z("sysctl -n vm.swapusage").match(
1881
+ const g = Z("sysctl -n vm.swapusage").match(
1870
1882
  /total\s*=\s*([\d.]+)M\s+used\s*=\s*([\d.]+)M\s+free\s*=\s*([\d.]+)M/
1871
1883
  );
1872
- if (e) {
1873
- const g = parseFloat(e[1]), c = parseFloat(e[2]);
1874
- return g > 0 ? `${Math.round(c / g * 100)}% (${Math.round(c)}MB) swap` : "0% (0MB) swap";
1884
+ if (g) {
1885
+ const e = parseFloat(g[1]), c = parseFloat(g[2]);
1886
+ return e > 0 ? `${Math.round(c / e * 100)}% (${Math.round(c)}MB) swap` : "0% (0MB) swap";
1875
1887
  }
1876
1888
  } catch {
1877
1889
  }
@@ -1879,18 +1891,18 @@ function De() {
1879
1891
  }
1880
1892
  return "";
1881
1893
  }
1882
- function Ee(I) {
1883
- const e = G(I.cache, "disk_used");
1884
- if (e !== null) return e;
1894
+ function Eg(I) {
1895
+ const g = G(I.cache, "disk_used");
1896
+ if (g !== null) return g;
1885
1897
  if (p || N)
1886
1898
  try {
1887
- const g = Z("df -h");
1899
+ const e = Z("df -h");
1888
1900
  let c = "";
1889
- if (g.includes("/storage/emulated")) {
1890
- const i = g.match(/\s+(\d+%)\s+\/storage\/emulated/);
1901
+ if (e.includes("/storage/emulated")) {
1902
+ const i = e.match(/\s+(\d+%)\s+\/storage\/emulated/);
1891
1903
  c = i ? i[1] : "";
1892
1904
  } else {
1893
- const i = g.split(`
1905
+ const i = e.split(`
1894
1906
  `);
1895
1907
  for (const s of i)
1896
1908
  if (s.trim().endsWith(" /")) {
@@ -1901,7 +1913,7 @@ function Ee(I) {
1901
1913
  }
1902
1914
  }
1903
1915
  if (!c) {
1904
- const s = g.match(/(\d+%)\s+\/\s*$/m);
1916
+ const s = e.match(/(\d+%)\s+\/\s*$/m);
1905
1917
  c = s ? s[1] : "";
1906
1918
  }
1907
1919
  }
@@ -1910,10 +1922,10 @@ function Ee(I) {
1910
1922
  }
1911
1923
  return r(I.cache, "disk_used", ""), "";
1912
1924
  }
1913
- const Oe = 10 * 1024 * 1024;
1914
- function xe(I) {
1915
- const e = G(I.cache, "disk_size");
1916
- if (e !== null) return e;
1925
+ const xg = 10 * 1024 * 1024;
1926
+ function Og(I) {
1927
+ const g = G(I.cache, "disk_size");
1928
+ if (g !== null) return g;
1917
1929
  if (!p && !N)
1918
1930
  return r(I.cache, "disk_size", ""), "";
1919
1931
  try {
@@ -1923,7 +1935,7 @@ function xe(I) {
1923
1935
  const n = t.trim().split(/\s+/);
1924
1936
  if (n.length < 6) continue;
1925
1937
  const C = n[0], a = parseInt(n[1]), l = parseInt(n[2]), o = n[n.length - 1];
1926
- if (!(isNaN(a) || isNaN(l) || a < Oe)) {
1938
+ if (!(isNaN(a) || isNaN(l) || a < xg)) {
1927
1939
  if (N) {
1928
1940
  if (o !== "/" && !o.startsWith("/Volumes/")) continue;
1929
1941
  } else if (C.startsWith("devtmpfs") || C.startsWith("tmpfs") || C === "overlay" || o.startsWith("/boot") || o.startsWith("/dev") || o.startsWith("/proc") || o.startsWith("/sys") || o.startsWith("/run"))
@@ -1941,9 +1953,9 @@ function xe(I) {
1941
1953
  }
1942
1954
  return r(I.cache, "disk_size", ""), "";
1943
1955
  }
1944
- function _e(I) {
1945
- const e = G(I.cache, "mount_points");
1946
- if (e !== null) return e;
1956
+ function _g(I) {
1957
+ const g = G(I.cache, "mount_points");
1958
+ if (g !== null) return g;
1947
1959
  if (!p && !N)
1948
1960
  return r(I.cache, "mount_points", ""), "";
1949
1961
  try {
@@ -1967,9 +1979,9 @@ function _e(I) {
1967
1979
  }
1968
1980
  return r(I.cache, "mount_points", ""), "";
1969
1981
  }
1970
- function Pe(I) {
1971
- const e = G(I.cache, "top_process");
1972
- if (e !== null) return e;
1982
+ function Pg(I) {
1983
+ const g = G(I.cache, "top_process");
1984
+ if (g !== null) return g;
1973
1985
  if (p)
1974
1986
  try {
1975
1987
  const c = Z("ps -eo pcpu,comm --sort=-%cpu --no-headers").split(`
@@ -1995,30 +2007,30 @@ function Pe(I) {
1995
2007
  }
1996
2008
  return r(I.cache, "top_process", ""), "";
1997
2009
  }
1998
- function $e() {
1999
- const I = B.uptime(), e = Math.floor(I / 86400), g = Math.floor(I % 86400 / 3600), c = Math.floor(I % 3600 / 60);
2000
- return `${e}d ${g}h ${c}m`;
2010
+ function $g() {
2011
+ const I = B.uptime(), g = Math.floor(I / 86400), e = Math.floor(I % 86400 / 3600), c = Math.floor(I % 3600 / 60);
2012
+ return `${g}d ${e}h ${c}m`;
2001
2013
  }
2002
- function qe() {
2014
+ function qg() {
2003
2015
  if (!p && !N) return "";
2004
2016
  try {
2005
- const e = Z("who").split(`
2006
- `).filter((g) => g.trim()).length;
2007
- if (e > 0)
2008
- return `${e} users`;
2017
+ const g = Z("who").split(`
2018
+ `).filter((e) => e.trim()).length;
2019
+ if (g > 0)
2020
+ return `${g} users`;
2009
2021
  } catch {
2010
2022
  }
2011
2023
  return "";
2012
2024
  }
2013
- async function Ig(I) {
2014
- const e = G(I.cache, "ip");
2015
- if (e) return e;
2025
+ async function Ie(I) {
2026
+ const g = G(I.cache, "ip");
2027
+ if (g) return g;
2016
2028
  if (!I.ipInfo)
2017
2029
  return r(I.cache, "ip", ""), "";
2018
- const g = I.ipInfo.ip || "";
2019
- return r(I.cache, "ip", g), g;
2030
+ const e = I.ipInfo.ip || "";
2031
+ return r(I.cache, "ip", e), e;
2020
2032
  }
2021
- function eg() {
2033
+ function ge() {
2022
2034
  if (p) {
2023
2035
  try {
2024
2036
  const c = Z("ifconfig 2>/dev/null").match(
@@ -2029,7 +2041,7 @@ function eg() {
2029
2041
  } catch {
2030
2042
  }
2031
2043
  try {
2032
- const g = Z("ip addr show 2>/dev/null"), c = [], i = g.matchAll(/inet (\d+\.\d+\.\d+\.\d+)\/\d+/g);
2044
+ const e = Z("ip addr show 2>/dev/null"), c = [], i = e.matchAll(/inet (\d+\.\d+\.\d+\.\d+)\/\d+/g);
2033
2045
  for (const s of i)
2034
2046
  s[1].startsWith("127.") || c.push(s[1]);
2035
2047
  if (c.length > 0)
@@ -2037,44 +2049,44 @@ function eg() {
2037
2049
  } catch {
2038
2050
  }
2039
2051
  }
2040
- const I = B.networkInterfaces(), e = [];
2041
- for (const g of Object.keys(I))
2042
- for (const c of I[g] || [])
2043
- c.family === "IPv4" && !c.internal && e.push(c.address);
2044
- return e.join(" ");
2052
+ const I = B.networkInterfaces(), g = [];
2053
+ for (const e of Object.keys(I))
2054
+ for (const c of I[e] || [])
2055
+ c.family === "IPv4" && !c.internal && g.push(c.address);
2056
+ return g.join(" ");
2045
2057
  }
2046
- async function gg(I) {
2047
- const e = G(I.cache, "city");
2048
- if (e !== null) return e;
2058
+ async function ee(I) {
2059
+ const g = G(I.cache, "city");
2060
+ if (g !== null) return g;
2049
2061
  if (!I.ipInfo || !I.ipInfo.city)
2050
2062
  return r(I.cache, "city", ""), "";
2051
- const g = I.ipInfo.city;
2052
- return r(I.cache, "city", g), g;
2063
+ const e = I.ipInfo.city;
2064
+ return r(I.cache, "city", e), e;
2053
2065
  }
2054
- async function cg(I) {
2055
- const e = G(I.cache, "domain");
2056
- if (e !== null) return e;
2066
+ async function ce(I) {
2067
+ const g = G(I.cache, "domain");
2068
+ if (g !== null) return g;
2057
2069
  if (!I.ipInfo || !I.ipInfo.hostname)
2058
2070
  return r(I.cache, "domain", ""), "";
2059
- const g = `http://${I.ipInfo.hostname}`;
2060
- return r(I.cache, "domain", g), g;
2071
+ const e = `http://${I.ipInfo.hostname}`;
2072
+ return r(I.cache, "domain", e), e;
2061
2073
  }
2062
- async function ig(I) {
2063
- const e = G(I.cache, "isp");
2064
- if (e !== null) return e;
2074
+ async function ie(I) {
2075
+ const g = G(I.cache, "isp");
2076
+ if (g !== null) return g;
2065
2077
  if (!I.ipInfo || !I.ipInfo.org)
2066
2078
  return r(I.cache, "isp", ""), "";
2067
- const g = I.ipInfo.org.split(" ").slice(1).join(" ");
2068
- return r(I.cache, "isp", g), g;
2079
+ const e = I.ipInfo.org.split(" ").slice(1).join(" ");
2080
+ return r(I.cache, "isp", e), e;
2069
2081
  }
2070
- function sg(I) {
2071
- const e = G(I.cache, "network_interfaces");
2072
- if (e !== null) return e;
2082
+ function se(I) {
2083
+ const g = G(I.cache, "network_interfaces");
2084
+ if (g !== null) return g;
2073
2085
  if (!p && !N)
2074
2086
  return r(I.cache, "network_interfaces", ""), "";
2075
2087
  try {
2076
- const g = B.networkInterfaces(), c = [];
2077
- for (const [s, t] of Object.entries(g))
2088
+ const e = B.networkInterfaces(), c = [];
2089
+ for (const [s, t] of Object.entries(e))
2078
2090
  s !== "lo" && t?.find(
2079
2091
  (C) => C.family === "IPv4" && !C.internal
2080
2092
  ) && c.push(s);
@@ -2084,9 +2096,9 @@ function sg(I) {
2084
2096
  }
2085
2097
  return r(I.cache, "network_interfaces", ""), "";
2086
2098
  }
2087
- function tg(I) {
2088
- const e = G(I.cache, "ports");
2089
- if (e !== null) return e;
2099
+ function te(I) {
2100
+ const g = G(I.cache, "ports");
2101
+ if (g !== null) return g;
2090
2102
  if (p || N)
2091
2103
  try {
2092
2104
  const c = Z("lsof -nP -iTCP -sTCP:LISTEN").split(`
@@ -2107,9 +2119,9 @@ function tg(I) {
2107
2119
  }
2108
2120
  return r(I.cache, "ports", ""), "";
2109
2121
  }
2110
- function ng(I) {
2122
+ function ne(I) {
2111
2123
  if (N)
2112
- return B.loadavg().map((e) => e.toFixed(2)).join(" ");
2124
+ return B.loadavg().map((g) => g.toFixed(2)).join(" ");
2113
2125
  if (!p) return "";
2114
2126
  try {
2115
2127
  return m.readFileSync("/proc/loadavg", "utf8").split(" ").slice(0, 3).join(" ");
@@ -2117,14 +2129,14 @@ function ng(I) {
2117
2129
  }
2118
2130
  return "";
2119
2131
  }
2120
- function Cg(I) {
2121
- const e = G(I.cache, "battery");
2122
- if (e !== null) return e;
2132
+ function Ce(I) {
2133
+ const g = G(I.cache, "battery");
2134
+ if (g !== null) return g;
2123
2135
  if (N) {
2124
2136
  try {
2125
- const g = Z("pmset -g batt"), c = g.match(/(\d+)%/);
2137
+ const e = Z("pmset -g batt"), c = e.match(/(\d+)%/);
2126
2138
  if (c) {
2127
- const i = /;\s*(charging|charged);/i.test(g), s = `${c[1]}%${i ? "+" : ""}`;
2139
+ const i = /;\s*(charging|charged);/i.test(e), s = `${c[1]}%${i ? "+" : ""}`;
2128
2140
  return r(I.cache, "battery", s), s;
2129
2141
  }
2130
2142
  } catch {
@@ -2134,7 +2146,7 @@ function Cg(I) {
2134
2146
  if (!p)
2135
2147
  return r(I.cache, "battery", ""), "";
2136
2148
  try {
2137
- const g = "/sys/class/power_supply/BAT0", c = `${g}/capacity`, i = `${g}/status`;
2149
+ const e = "/sys/class/power_supply/BAT0", c = `${e}/capacity`, i = `${e}/status`;
2138
2150
  if (m.existsSync(c)) {
2139
2151
  const s = m.readFileSync(c, "utf8").trim(), t = m.existsSync(i) ? m.readFileSync(i, "utf8").trim() : "Unknown", a = `${parseInt(s)}%${t === "Charging" ? "+" : ""}`;
2140
2152
  return r(I.cache, "battery", a), a;
@@ -2143,9 +2155,9 @@ function Cg(I) {
2143
2155
  }
2144
2156
  return r(I.cache, "battery", ""), "";
2145
2157
  }
2146
- function og(I) {
2147
- const e = G(I.cache, "temperature");
2148
- if (e !== null) return e;
2158
+ function oe(I) {
2159
+ const g = G(I.cache, "temperature");
2160
+ if (g !== null) return g;
2149
2161
  if (N) {
2150
2162
  if (k("osx-cpu-temp"))
2151
2163
  try {
@@ -2164,12 +2176,12 @@ function og(I) {
2164
2176
  if (!p)
2165
2177
  return r(I.cache, "temperature", ""), "";
2166
2178
  try {
2167
- const g = [
2179
+ const e = [
2168
2180
  "/sys/class/thermal/thermal_zone0/temp",
2169
2181
  "/sys/class/hwmon/hwmon0/temp1_input",
2170
2182
  "/sys/class/hwmon/hwmon1/temp1_input"
2171
2183
  ];
2172
- for (const c of g)
2184
+ for (const c of e)
2173
2185
  if (m.existsSync(c)) {
2174
2186
  const i = m.readFileSync(c, "utf8").trim(), s = Math.round(parseInt(i) / 1e3);
2175
2187
  if (s > 0 && s < 150) {
@@ -2181,9 +2193,9 @@ function og(I) {
2181
2193
  }
2182
2194
  return r(I.cache, "temperature", ""), "";
2183
2195
  }
2184
- function lg(I) {
2185
- const e = G(I.cache, "services_running");
2186
- if (e !== null) return e;
2196
+ function le(I) {
2197
+ const g = G(I.cache, "services_running");
2198
+ if (g !== null) return g;
2187
2199
  if (N) {
2188
2200
  try {
2189
2201
  const c = Z("launchctl list").split(`
@@ -2199,33 +2211,33 @@ function lg(I) {
2199
2211
  if (!p)
2200
2212
  return r(I.cache, "services_running", ""), "";
2201
2213
  try {
2202
- let g = 0;
2203
- if (k("systemctl") ? g = Z(
2214
+ let e = 0;
2215
+ if (k("systemctl") ? e = Z(
2204
2216
  "systemctl list-units --type=service --state=running --no-pager"
2205
2217
  ).split(`
2206
- `).filter((i) => i.includes(".service")).length : k("service") && (g = Z("service --status-all").split(`
2207
- `).filter((i) => i.includes("+")).length), g > 0) {
2208
- const c = `${g} services`;
2218
+ `).filter((i) => i.includes(".service")).length : k("service") && (e = Z("service --status-all").split(`
2219
+ `).filter((i) => i.includes("+")).length), e > 0) {
2220
+ const c = `${e} services`;
2209
2221
  return r(I.cache, "services_running", c), c;
2210
2222
  }
2211
2223
  } catch {
2212
2224
  }
2213
2225
  return r(I.cache, "services_running", ""), "";
2214
2226
  }
2215
- function ag(I) {
2216
- const e = G(I.cache, "shell");
2217
- if (e !== null) return e;
2218
- if (!S) {
2227
+ function ae(I) {
2228
+ const g = G(I.cache, "shell");
2229
+ if (g !== null) return g;
2230
+ if (!F) {
2219
2231
  try {
2220
- const g = B.userInfo().shell;
2221
- if (g) {
2222
- const c = g.split("/").pop();
2232
+ const e = B.userInfo().shell;
2233
+ if (e) {
2234
+ const c = e.split("/").pop();
2223
2235
  return r(I.cache, "shell", c), c;
2224
2236
  }
2225
2237
  } catch {
2226
2238
  }
2227
2239
  try {
2228
- const g = vI.ppid, c = Z(`ps -p ${g} -o comm=`).split("/").pop();
2240
+ const e = vI.ppid, c = Z(`ps -p ${e} -o comm=`).split("/").pop();
2229
2241
  if (c)
2230
2242
  return r(I.cache, "shell", c), c;
2231
2243
  } catch {
@@ -2233,9 +2245,9 @@ function ag(I) {
2233
2245
  }
2234
2246
  return r(I.cache, "shell", ""), "";
2235
2247
  }
2236
- function rg(I) {
2237
- const e = G(I.cache, "packages");
2238
- if (e !== null) return e;
2248
+ function re(I) {
2249
+ const g = G(I.cache, "packages");
2250
+ if (g !== null) return g;
2239
2251
  const i = [
2240
2252
  "apt",
2241
2253
  "brew",
@@ -2257,9 +2269,9 @@ function rg(I) {
2257
2269
  ].filter((s) => k(s)).join(" ");
2258
2270
  return r(I.cache, "packages", i), i;
2259
2271
  }
2260
- function dg(I) {
2261
- const e = G(I.cache, "containers");
2262
- if (e !== null) return e;
2272
+ function de(I) {
2273
+ const g = G(I.cache, "containers");
2274
+ if (g !== null) return g;
2263
2275
  if (!k("docker"))
2264
2276
  return r(I.cache, "containers", ""), "";
2265
2277
  try {
@@ -2290,107 +2302,108 @@ function dg(I) {
2290
2302
  }
2291
2303
  return r(I.cache, "containers", ""), "";
2292
2304
  }
2293
- const hg = B.platform() === "win32", Ag = B.platform() === "darwin", ug = B.platform() === "linux", bg = "da2d6cc4baa5d1", mg = 5e3;
2294
- function Zg() {
2305
+ const he = B.platform() === "win32", Ae = B.platform() === "darwin", ue = B.platform() === "linux", be = "da2d6cc4baa5d1", me = 5e3;
2306
+ function Ze() {
2295
2307
  try {
2296
- if (m.existsSync(O))
2297
- return JSON.parse(m.readFileSync(O, "utf8"));
2308
+ if (m.existsSync(x))
2309
+ return JSON.parse(m.readFileSync(x, "utf8"));
2298
2310
  } catch {
2299
2311
  }
2300
2312
  return {};
2301
2313
  }
2302
- function Gg(I) {
2314
+ function Ge(I) {
2303
2315
  try {
2304
- const e = M.dirname(O);
2305
- m.existsSync(e) || m.mkdirSync(e, { recursive: !0 }), m.writeFileSync(O, JSON.stringify(I, null, 2));
2316
+ const g = M.dirname(x);
2317
+ m.existsSync(g) || m.mkdirSync(g, { recursive: !0 }), m.writeFileSync(x, JSON.stringify(I, null, 2));
2306
2318
  } catch {
2307
2319
  }
2308
2320
  }
2309
- async function Bg(I = bg, e = mg) {
2310
- return new Promise((g) => {
2311
- const c = `https://ipinfo.io/json${I ? `?token=${I}` : ""}`, i = LI.get(c, (s) => {
2321
+ async function Be(I = be, g = me) {
2322
+ return new Promise((e) => {
2323
+ const c = `https://ipinfo.io/json${I ? `?token=${I}` : ""}`, i = QI.get(c, (s) => {
2312
2324
  let t = "";
2313
2325
  s.on("data", (n) => t += n), s.on("end", () => {
2314
2326
  try {
2315
- g(JSON.parse(t));
2327
+ e(JSON.parse(t));
2316
2328
  } catch {
2317
- g({});
2329
+ e({});
2318
2330
  }
2319
2331
  });
2320
2332
  });
2321
- i.on("error", () => g({})), i.setTimeout(e, () => {
2322
- i.destroy(), g({});
2333
+ i.on("error", () => e({})), i.setTimeout(g, () => {
2334
+ i.destroy(), e({});
2323
2335
  });
2324
2336
  });
2325
2337
  }
2326
- const Wg = {
2338
+ const We = {
2327
2339
  user: DI,
2328
2340
  hostname: EI,
2329
- ip: Ig,
2330
- iplocal: eg,
2331
- city: gg,
2332
- domain: cg,
2333
- isp: ig,
2334
- os: OI,
2341
+ ip: Ie,
2342
+ iplocal: ge,
2343
+ city: ee,
2344
+ domain: ce,
2345
+ isp: ie,
2346
+ os: xI,
2335
2347
  // Mapped from os_info
2336
2348
  cpu: WI,
2337
2349
  gpu: pI,
2338
- bench: je,
2339
- cpu_bench_info: Me,
2340
- gpu_bench: Qe,
2341
- gpu_bench_info: Le,
2342
- disk_used: Ee,
2343
- disk_size: xe,
2344
- ram_used: Ue,
2345
- top_process: Pe,
2346
- uptime: $e,
2350
+ bench: jg,
2351
+ cpu_bench_info: Mg,
2352
+ gpu_bench: Lg,
2353
+ gpu_bench_info: Qg,
2354
+ disk_used: Eg,
2355
+ disk_size: Og,
2356
+ ram_used: Ug,
2357
+ top_process: Pg,
2358
+ uptime: $g,
2347
2359
  device: _I,
2348
- kernel: xI,
2349
- shell: ag,
2350
- pacman: rg,
2360
+ kernel: OI,
2361
+ shell: ae,
2362
+ pacman: re,
2351
2363
  // Mapped from packages
2352
- ports: tg,
2353
- containers: dg,
2354
- memory_available: Te,
2355
- swap_used: De,
2356
- load_average: ng,
2357
- users_logged_in: qe,
2358
- network_interfaces: sg,
2359
- mount_points: _e,
2360
- services_running: lg,
2361
- temperature: og,
2362
- battery: Cg,
2363
- screen_resolution: ze
2364
+ ports: te,
2365
+ containers: de,
2366
+ memory_available: Tg,
2367
+ swap_used: Dg,
2368
+ load_average: ne,
2369
+ users_logged_in: qg,
2370
+ network_interfaces: se,
2371
+ mount_points: _g,
2372
+ services_running: le,
2373
+ temperature: oe,
2374
+ battery: Ce,
2375
+ screen_resolution: zg
2364
2376
  };
2365
- async function Kg(I = {}) {
2366
- const e = Zg(), g = { cache: e }, c = e.ipInfo?.value;
2367
- c ? g.ipInfo = c : (g.ipInfo = await Bg(), e.ipInfo = {
2368
- value: g.ipInfo,
2377
+ async function we(I = {}) {
2378
+ const g = Ze(), e = { cache: g }, c = g.ipInfo?.value;
2379
+ c ? e.ipInfo = c : (e.ipInfo = await Be(), g.ipInfo = {
2380
+ value: e.ipInfo,
2369
2381
  timestamp: Date.now()
2370
2382
  });
2371
2383
  const i = {
2372
2384
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
2373
- platform: hg ? "windows" : Ag ? "macos" : ug ? "linux" : "unknown"
2385
+ platform: he ? "windows" : Ae ? "macos" : ue ? "linux" : "unknown"
2374
2386
  };
2375
- for (const [s, t] of Object.entries(Wg))
2387
+ for (const [s, t] of Object.entries(We))
2376
2388
  try {
2377
- const n = await t(g);
2389
+ const n = await t(e);
2378
2390
  i[s] = n;
2379
2391
  } catch {
2380
2392
  i[s] = "";
2381
2393
  }
2382
- return Gg(e), i;
2394
+ return Ge(g), i;
2383
2395
  }
2384
2396
  export {
2385
- O as C,
2397
+ x as C,
2386
2398
  YI as D,
2387
2399
  E as S,
2388
- fg as a,
2389
- Hg as b,
2390
- Xg as c,
2391
- Kg as g,
2392
- Wg as i,
2393
- Zg as l,
2394
- Gg as s
2400
+ fe as a,
2401
+ Ke as b,
2402
+ Xe as c,
2403
+ He as d,
2404
+ we as g,
2405
+ We as i,
2406
+ Ze as l,
2407
+ Ge as s
2395
2408
  };
2396
- //# sourceMappingURL=system-info-api-CChFyamn.js.map
2409
+ //# sourceMappingURL=system-info-api-Ddz5VwDd.js.map