@launchdarkly/session-replay 0.4.12 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/dist/{LDObserve-BHQyYqSE.js → LDObserve-BeLi-QhE.js} +2 -2
- package/dist/{LDObserve-BHQyYqSE.js.map → LDObserve-BeLi-QhE.js.map} +1 -1
- package/dist/{index-DDMbSYLF.js → index-6I8VmpDC.js} +646 -646
- package/dist/index-6I8VmpDC.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/index.umd.js +56 -56
- package/dist/index.umd.js.map +1 -1
- package/package.json +2 -2
- package/dist/index-DDMbSYLF.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var hu = Object.defineProperty, pu = (e, t, i) => t in e ? hu(e, t, { enumerable: !0, configurable: !0, writable: !0, value: i }) : e[t] = i,
|
|
1
|
+
var hu = Object.defineProperty, pu = (e, t, i) => t in e ? hu(e, t, { enumerable: !0, configurable: !0, writable: !0, value: i }) : e[t] = i, ze = (e, t, i) => pu(e, typeof t != "symbol" ? t + "" : t, i), mu = (e, t, i) => new Promise((n, s) => {
|
|
2
2
|
var r = (a) => {
|
|
3
3
|
try {
|
|
4
4
|
o(i.next(a));
|
|
@@ -21,14 +21,14 @@ const Br = /* @__PURE__ */ Object.create(null), Ve = (e, t, ...i) => {
|
|
|
21
21
|
Br[`${e}-${t}`] || (Br[`${e}-${t}`] = !0, Ve(e, i, ...n));
|
|
22
22
|
}, bu = (e, ...t) => mu(void 0, null, function* () {
|
|
23
23
|
try {
|
|
24
|
-
const { LDObserve: i } = yield import("./LDObserve-
|
|
24
|
+
const { LDObserve: i } = yield import("./LDObserve-BeLi-QhE.js");
|
|
25
25
|
i.recordLog(`${e}${t}`, "warn");
|
|
26
26
|
} catch {
|
|
27
27
|
}
|
|
28
28
|
});
|
|
29
29
|
class vl {
|
|
30
30
|
constructor(t, i) {
|
|
31
|
-
|
|
31
|
+
ze(this, "debug"), ze(this, "name"), this.debug = t, this.name = i;
|
|
32
32
|
}
|
|
33
33
|
log(...t) {
|
|
34
34
|
if (this.debug) {
|
|
@@ -43,7 +43,7 @@ class vl {
|
|
|
43
43
|
}
|
|
44
44
|
let wl = class {
|
|
45
45
|
constructor() {
|
|
46
|
-
|
|
46
|
+
ze(this, "_sdk"), ze(this, "_isLoaded", !1), ze(this, "_callBuffer", []), ze(this, "_capacity", 1e5), ze(this, "_droppedEvents", 0), ze(this, "_exceededCapacity", !1), ze(this, "_logger", new vl());
|
|
47
47
|
}
|
|
48
48
|
_bufferCall(t, i) {
|
|
49
49
|
if (this._isLoaded)
|
|
@@ -97,7 +97,7 @@ var fu = Object.defineProperty, yu = Object.defineProperties, gu = Object.getOwn
|
|
|
97
97
|
for (var n of ln(e))
|
|
98
98
|
t.indexOf(n) < 0 && Tl.call(e, n) && (i[n] = e[n]);
|
|
99
99
|
return i;
|
|
100
|
-
}, ni = (e, t, i) => ys(e, typeof t != "symbol" ? t + "" : t, i),
|
|
100
|
+
}, ni = (e, t, i) => ys(e, typeof t != "symbol" ? t + "" : t, i), Wt = (e, t, i) => new Promise((n, s) => {
|
|
101
101
|
var r = (a) => {
|
|
102
102
|
try {
|
|
103
103
|
o(i.next(a));
|
|
@@ -197,7 +197,7 @@ function Xu(e) {
|
|
|
197
197
|
extensions: e[5]
|
|
198
198
|
} : t;
|
|
199
199
|
}
|
|
200
|
-
let
|
|
200
|
+
let Wu = class Ll extends Error {
|
|
201
201
|
/**
|
|
202
202
|
* An array of `{ line, column }` locations within the source GraphQL document
|
|
203
203
|
* which correspond to this error.
|
|
@@ -307,12 +307,12 @@ function jr(e) {
|
|
|
307
307
|
return e === void 0 || e.length === 0 ? void 0 : e;
|
|
308
308
|
}
|
|
309
309
|
function ue(e, t, i) {
|
|
310
|
-
return new
|
|
310
|
+
return new Wu(`Syntax Error: ${i}`, {
|
|
311
311
|
source: e,
|
|
312
312
|
positions: [t]
|
|
313
313
|
});
|
|
314
314
|
}
|
|
315
|
-
let
|
|
315
|
+
let Cu = class {
|
|
316
316
|
/**
|
|
317
317
|
* The character offset at which this Node begins.
|
|
318
318
|
*/
|
|
@@ -479,15 +479,15 @@ function Is(e) {
|
|
|
479
479
|
function si(e) {
|
|
480
480
|
return e >= 48 && e <= 57;
|
|
481
481
|
}
|
|
482
|
-
function
|
|
482
|
+
function Ul(e) {
|
|
483
483
|
return e >= 97 && e <= 122 || // A-Z
|
|
484
484
|
e >= 65 && e <= 90;
|
|
485
485
|
}
|
|
486
|
-
function
|
|
487
|
-
return
|
|
486
|
+
function Fl(e) {
|
|
487
|
+
return Ul(e) || e === 95;
|
|
488
488
|
}
|
|
489
489
|
function ku(e) {
|
|
490
|
-
return
|
|
490
|
+
return Ul(e) || si(e) || e === 95;
|
|
491
491
|
}
|
|
492
492
|
function vu(e) {
|
|
493
493
|
var t;
|
|
@@ -574,12 +574,12 @@ function Jt(e) {
|
|
|
574
574
|
return e >= 0 && e <= 55295 || e >= 57344 && e <= 1114111;
|
|
575
575
|
}
|
|
576
576
|
function Nn(e, t) {
|
|
577
|
-
return Kl(e.charCodeAt(t)) &&
|
|
577
|
+
return Kl(e.charCodeAt(t)) && Ml(e.charCodeAt(t + 1));
|
|
578
578
|
}
|
|
579
579
|
function Kl(e) {
|
|
580
580
|
return e >= 55296 && e <= 56319;
|
|
581
581
|
}
|
|
582
|
-
function
|
|
582
|
+
function Ml(e) {
|
|
583
583
|
return e >= 56320 && e <= 57343;
|
|
584
584
|
}
|
|
585
585
|
function lt(e, t) {
|
|
@@ -647,12 +647,12 @@ function Lu(e, t) {
|
|
|
647
647
|
case 125:
|
|
648
648
|
return le(e, Z.BRACE_R, s, s + 1);
|
|
649
649
|
case 34:
|
|
650
|
-
return i.charCodeAt(s + 1) === 34 && i.charCodeAt(s + 2) === 34 ?
|
|
650
|
+
return i.charCodeAt(s + 1) === 34 && i.charCodeAt(s + 2) === 34 ? Ou(e, s) : Uu(e, s);
|
|
651
651
|
}
|
|
652
652
|
if (si(r) || r === 45)
|
|
653
653
|
return Yu(e, s, r);
|
|
654
|
-
if (
|
|
655
|
-
return
|
|
654
|
+
if (Fl(r))
|
|
655
|
+
return Eu(e, s);
|
|
656
656
|
throw ue(
|
|
657
657
|
e.source,
|
|
658
658
|
s,
|
|
@@ -698,7 +698,7 @@ function Yu(e, t, i) {
|
|
|
698
698
|
);
|
|
699
699
|
} else
|
|
700
700
|
s = Qn(e, s, r), r = n.charCodeAt(s);
|
|
701
|
-
if (r === 46 && (l = !0, r = n.charCodeAt(++s), s = Qn(e, s, r), r = n.charCodeAt(s)), (r === 69 || r === 101) && (l = !0, r = n.charCodeAt(++s), (r === 43 || r === 45) && (r = n.charCodeAt(++s)), s = Qn(e, s, r), r = n.charCodeAt(s)), r === 46 ||
|
|
701
|
+
if (r === 46 && (l = !0, r = n.charCodeAt(++s), s = Qn(e, s, r), r = n.charCodeAt(s)), (r === 69 || r === 101) && (l = !0, r = n.charCodeAt(++s), (r === 43 || r === 45) && (r = n.charCodeAt(++s)), s = Qn(e, s, r), r = n.charCodeAt(s)), r === 46 || Fl(r))
|
|
702
702
|
throw ue(
|
|
703
703
|
e.source,
|
|
704
704
|
s,
|
|
@@ -731,7 +731,7 @@ function Qn(e, t, i) {
|
|
|
731
731
|
++s;
|
|
732
732
|
return s;
|
|
733
733
|
}
|
|
734
|
-
function
|
|
734
|
+
function Uu(e, t) {
|
|
735
735
|
const i = e.source.body, n = i.length;
|
|
736
736
|
let s = t + 1, r = s, l = "";
|
|
737
737
|
for (; s < n; ) {
|
|
@@ -740,7 +740,7 @@ function Fu(e, t) {
|
|
|
740
740
|
return l += i.slice(r, s), le(e, Z.STRING, t, s + 1, l);
|
|
741
741
|
if (o === 92) {
|
|
742
742
|
l += i.slice(r, s);
|
|
743
|
-
const a = i.charCodeAt(s + 1) === 117 ? i.charCodeAt(s + 2) === 123 ?
|
|
743
|
+
const a = i.charCodeAt(s + 1) === 117 ? i.charCodeAt(s + 2) === 123 ? Fu(e, s) : Ku(e, s) : Mu(e, s);
|
|
744
744
|
l += a.value, s += a.size, r = s;
|
|
745
745
|
continue;
|
|
746
746
|
}
|
|
@@ -762,7 +762,7 @@ function Fu(e, t) {
|
|
|
762
762
|
}
|
|
763
763
|
throw ue(e.source, s, "Unterminated string.");
|
|
764
764
|
}
|
|
765
|
-
function
|
|
765
|
+
function Fu(e, t) {
|
|
766
766
|
const i = e.source.body;
|
|
767
767
|
let n = 0, s = 3;
|
|
768
768
|
for (; s < 12; ) {
|
|
@@ -796,7 +796,7 @@ function Ku(e, t) {
|
|
|
796
796
|
};
|
|
797
797
|
if (Kl(n) && i.charCodeAt(t + 6) === 92 && i.charCodeAt(t + 7) === 117) {
|
|
798
798
|
const s = Ar(i, t + 8);
|
|
799
|
-
if (
|
|
799
|
+
if (Ml(s))
|
|
800
800
|
return {
|
|
801
801
|
value: String.fromCodePoint(n, s),
|
|
802
802
|
size: 12
|
|
@@ -814,7 +814,7 @@ function Ar(e, t) {
|
|
|
814
814
|
function Dt(e) {
|
|
815
815
|
return e >= 48 && e <= 57 ? e - 48 : e >= 65 && e <= 70 ? e - 55 : e >= 97 && e <= 102 ? e - 87 : -1;
|
|
816
816
|
}
|
|
817
|
-
function
|
|
817
|
+
function Mu(e, t) {
|
|
818
818
|
const i = e.source.body;
|
|
819
819
|
switch (i.charCodeAt(t + 1)) {
|
|
820
820
|
case 34:
|
|
@@ -868,7 +868,7 @@ function Ou(e, t) {
|
|
|
868
868
|
)}".`
|
|
869
869
|
);
|
|
870
870
|
}
|
|
871
|
-
function
|
|
871
|
+
function Ou(e, t) {
|
|
872
872
|
const i = e.source.body, n = i.length;
|
|
873
873
|
let s = e.lineStart, r = t + 3, l = r, o = "";
|
|
874
874
|
const a = [];
|
|
@@ -911,7 +911,7 @@ function Eu(e, t) {
|
|
|
911
911
|
}
|
|
912
912
|
throw ue(e.source, r, "Unterminated string.");
|
|
913
913
|
}
|
|
914
|
-
function
|
|
914
|
+
function Eu(e, t) {
|
|
915
915
|
const i = e.source.body, n = i.length;
|
|
916
916
|
let s = t + 1;
|
|
917
917
|
for (; s < n; ) {
|
|
@@ -929,7 +929,7 @@ function Mu(e, t) {
|
|
|
929
929
|
i.slice(t, s)
|
|
930
930
|
);
|
|
931
931
|
}
|
|
932
|
-
const
|
|
932
|
+
const Hu = 10, Ol = 2;
|
|
933
933
|
function hr(e) {
|
|
934
934
|
return Ln(e, []);
|
|
935
935
|
}
|
|
@@ -940,12 +940,12 @@ function Ln(e, t) {
|
|
|
940
940
|
case "function":
|
|
941
941
|
return e.name ? `[function ${e.name}]` : "[function]";
|
|
942
942
|
case "object":
|
|
943
|
-
return
|
|
943
|
+
return zu(e, t);
|
|
944
944
|
default:
|
|
945
945
|
return String(e);
|
|
946
946
|
}
|
|
947
947
|
}
|
|
948
|
-
function
|
|
948
|
+
function zu(e, t) {
|
|
949
949
|
if (e === null)
|
|
950
950
|
return "null";
|
|
951
951
|
if (t.includes(e))
|
|
@@ -964,16 +964,16 @@ function Pu(e) {
|
|
|
964
964
|
}
|
|
965
965
|
function Bu(e, t) {
|
|
966
966
|
const i = Object.entries(e);
|
|
967
|
-
return i.length === 0 ? "{}" : t.length >
|
|
967
|
+
return i.length === 0 ? "{}" : t.length > Ol ? "[" + ju(e) + "]" : "{ " + i.map(
|
|
968
968
|
([n, s]) => n + ": " + Ln(s, t)
|
|
969
969
|
).join(", ") + " }";
|
|
970
970
|
}
|
|
971
971
|
function Du(e, t) {
|
|
972
972
|
if (e.length === 0)
|
|
973
973
|
return "[]";
|
|
974
|
-
if (t.length >
|
|
974
|
+
if (t.length > Ol)
|
|
975
975
|
return "[Array]";
|
|
976
|
-
const i = Math.min(
|
|
976
|
+
const i = Math.min(Hu, e.length), n = e.length - i, s = [];
|
|
977
977
|
for (let r = 0; r < i; ++r)
|
|
978
978
|
s.push(Ln(e[r], t));
|
|
979
979
|
return n === 1 ? s.push("... 1 more item") : n > 1 && s.push(`... ${n} more items`), "[" + s.join(", ") + "]";
|
|
@@ -1021,7 +1021,7 @@ spurious results.`);
|
|
|
1021
1021
|
return !1;
|
|
1022
1022
|
}
|
|
1023
1023
|
);
|
|
1024
|
-
let
|
|
1024
|
+
let El = class {
|
|
1025
1025
|
constructor(t, i = "GraphQL request", n = {
|
|
1026
1026
|
line: 1,
|
|
1027
1027
|
column: 1
|
|
@@ -1039,9 +1039,9 @@ let Ml = class {
|
|
|
1039
1039
|
}
|
|
1040
1040
|
};
|
|
1041
1041
|
function _u(e) {
|
|
1042
|
-
return Au(e,
|
|
1042
|
+
return Au(e, El);
|
|
1043
1043
|
}
|
|
1044
|
-
function
|
|
1044
|
+
function Hl(e, t) {
|
|
1045
1045
|
const i = new $u(e, t), n = i.parseDocument();
|
|
1046
1046
|
return Object.defineProperty(n, "tokenCount", {
|
|
1047
1047
|
enumerable: !1,
|
|
@@ -1050,7 +1050,7 @@ function zl(e, t) {
|
|
|
1050
1050
|
}
|
|
1051
1051
|
let $u = class {
|
|
1052
1052
|
constructor(t, i = {}) {
|
|
1053
|
-
const n = _u(t) ? t : new
|
|
1053
|
+
const n = _u(t) ? t : new El(t);
|
|
1054
1054
|
this._lexer = new Tu(n), this._options = i, this._tokenCounter = 0;
|
|
1055
1055
|
}
|
|
1056
1056
|
get tokenCount() {
|
|
@@ -2021,7 +2021,7 @@ let $u = class {
|
|
|
2021
2021
|
* given parsed object.
|
|
2022
2022
|
*/
|
|
2023
2023
|
node(t, i) {
|
|
2024
|
-
return this._options.noLocation !== !0 && (i.loc = new
|
|
2024
|
+
return this._options.noLocation !== !0 && (i.loc = new Cu(
|
|
2025
2025
|
t,
|
|
2026
2026
|
this._lexer.lastToken,
|
|
2027
2027
|
this._lexer.source
|
|
@@ -2044,7 +2044,7 @@ let $u = class {
|
|
|
2044
2044
|
throw ue(
|
|
2045
2045
|
this._lexer.source,
|
|
2046
2046
|
i.start,
|
|
2047
|
-
`Expected ${
|
|
2047
|
+
`Expected ${zl(t)}, found ${Vi(i)}.`
|
|
2048
2048
|
);
|
|
2049
2049
|
}
|
|
2050
2050
|
/**
|
|
@@ -2154,9 +2154,9 @@ let $u = class {
|
|
|
2154
2154
|
};
|
|
2155
2155
|
function Vi(e) {
|
|
2156
2156
|
const t = e.value;
|
|
2157
|
-
return
|
|
2157
|
+
return zl(e.kind) + (t != null ? ` "${t}"` : "");
|
|
2158
2158
|
}
|
|
2159
|
-
function
|
|
2159
|
+
function zl(e) {
|
|
2160
2160
|
return Nu(e) ? `"${e}"` : e;
|
|
2161
2161
|
}
|
|
2162
2162
|
function qu(e) {
|
|
@@ -2362,27 +2362,27 @@ function sd(e, t, i = Yl) {
|
|
|
2362
2362
|
continue;
|
|
2363
2363
|
p.push(u);
|
|
2364
2364
|
}
|
|
2365
|
-
let
|
|
2365
|
+
let C;
|
|
2366
2366
|
if (!Array.isArray(c)) {
|
|
2367
2367
|
var b, d;
|
|
2368
2368
|
Qr(c) || Qi(!1, `Invalid AST Node: ${hr(c)}.`);
|
|
2369
2369
|
const X = I ? (b = n.get(c.kind)) === null || b === void 0 ? void 0 : b.leave : (d = n.get(c.kind)) === null || d === void 0 ? void 0 : d.enter;
|
|
2370
|
-
if (
|
|
2370
|
+
if (C = X?.call(t, c, u, h, p, m), C === nd)
|
|
2371
2371
|
break;
|
|
2372
|
-
if (
|
|
2372
|
+
if (C === !1) {
|
|
2373
2373
|
if (!I) {
|
|
2374
2374
|
p.pop();
|
|
2375
2375
|
continue;
|
|
2376
2376
|
}
|
|
2377
|
-
} else if (
|
|
2378
|
-
if (Qr(
|
|
2379
|
-
c =
|
|
2377
|
+
} else if (C !== void 0 && (a.push([u, C]), !I))
|
|
2378
|
+
if (Qr(C))
|
|
2379
|
+
c = C;
|
|
2380
2380
|
else {
|
|
2381
2381
|
p.pop();
|
|
2382
2382
|
continue;
|
|
2383
2383
|
}
|
|
2384
2384
|
}
|
|
2385
|
-
if (
|
|
2385
|
+
if (C === void 0 && V && a.push([u, c]), I)
|
|
2386
2386
|
p.pop();
|
|
2387
2387
|
else {
|
|
2388
2388
|
var S;
|
|
@@ -2425,7 +2425,7 @@ const od = 80, ld = {
|
|
|
2425
2425
|
},
|
|
2426
2426
|
OperationDefinition: {
|
|
2427
2427
|
leave(e) {
|
|
2428
|
-
const t =
|
|
2428
|
+
const t = H("(", x(e.variableDefinitions, ", "), ")"), i = x(
|
|
2429
2429
|
[
|
|
2430
2430
|
e.operation,
|
|
2431
2431
|
x([e.name, t]),
|
|
@@ -2437,16 +2437,16 @@ const od = 80, ld = {
|
|
|
2437
2437
|
}
|
|
2438
2438
|
},
|
|
2439
2439
|
VariableDefinition: {
|
|
2440
|
-
leave: ({ variable: e, type: t, defaultValue: i, directives: n }) => e + ": " + t +
|
|
2440
|
+
leave: ({ variable: e, type: t, defaultValue: i, directives: n }) => e + ": " + t + H(" = ", i) + H(" ", x(n, " "))
|
|
2441
2441
|
},
|
|
2442
2442
|
SelectionSet: {
|
|
2443
2443
|
leave: ({ selections: e }) => xe(e)
|
|
2444
2444
|
},
|
|
2445
2445
|
Field: {
|
|
2446
2446
|
leave({ alias: e, name: t, arguments: i, directives: n, selectionSet: s }) {
|
|
2447
|
-
const r =
|
|
2448
|
-
let l = r +
|
|
2449
|
-
return l.length > od && (l = r +
|
|
2447
|
+
const r = H("", e, ": ") + t;
|
|
2448
|
+
let l = r + H("(", x(i, ", "), ")");
|
|
2449
|
+
return l.length > od && (l = r + H(`(
|
|
2450
2450
|
`, Ai(x(i, `
|
|
2451
2451
|
`)), `
|
|
2452
2452
|
)`)), x([l, x(n, " "), s], " ");
|
|
@@ -2457,13 +2457,13 @@ const od = 80, ld = {
|
|
|
2457
2457
|
},
|
|
2458
2458
|
// Fragments
|
|
2459
2459
|
FragmentSpread: {
|
|
2460
|
-
leave: ({ name: e, directives: t }) => "..." + e +
|
|
2460
|
+
leave: ({ name: e, directives: t }) => "..." + e + H(" ", x(t, " "))
|
|
2461
2461
|
},
|
|
2462
2462
|
InlineFragment: {
|
|
2463
2463
|
leave: ({ typeCondition: e, directives: t, selectionSet: i }) => x(
|
|
2464
2464
|
[
|
|
2465
2465
|
"...",
|
|
2466
|
-
|
|
2466
|
+
H("on ", e),
|
|
2467
2467
|
x(t, " "),
|
|
2468
2468
|
i
|
|
2469
2469
|
],
|
|
@@ -2473,7 +2473,7 @@ const od = 80, ld = {
|
|
|
2473
2473
|
FragmentDefinition: {
|
|
2474
2474
|
leave: ({ name: e, typeCondition: t, variableDefinitions: i, directives: n, selectionSet: s }) => (
|
|
2475
2475
|
// or removed in the future.
|
|
2476
|
-
`fragment ${e}${
|
|
2476
|
+
`fragment ${e}${H("(", x(i, ", "), ")")} on ${t} ${H("", x(n, " "), " ")}` + s
|
|
2477
2477
|
)
|
|
2478
2478
|
},
|
|
2479
2479
|
// Value
|
|
@@ -2506,7 +2506,7 @@ const od = 80, ld = {
|
|
|
2506
2506
|
},
|
|
2507
2507
|
// Directive
|
|
2508
2508
|
Directive: {
|
|
2509
|
-
leave: ({ name: e, arguments: t }) => "@" + e +
|
|
2509
|
+
leave: ({ name: e, arguments: t }) => "@" + e + H("(", x(t, ", "), ")")
|
|
2510
2510
|
},
|
|
2511
2511
|
// Type
|
|
2512
2512
|
NamedType: {
|
|
@@ -2520,23 +2520,23 @@ const od = 80, ld = {
|
|
|
2520
2520
|
},
|
|
2521
2521
|
// Type System Definitions
|
|
2522
2522
|
SchemaDefinition: {
|
|
2523
|
-
leave: ({ description: e, directives: t, operationTypes: i }) =>
|
|
2523
|
+
leave: ({ description: e, directives: t, operationTypes: i }) => H("", e, `
|
|
2524
2524
|
`) + x(["schema", x(t, " "), xe(i)], " ")
|
|
2525
2525
|
},
|
|
2526
2526
|
OperationTypeDefinition: {
|
|
2527
2527
|
leave: ({ operation: e, type: t }) => e + ": " + t
|
|
2528
2528
|
},
|
|
2529
2529
|
ScalarTypeDefinition: {
|
|
2530
|
-
leave: ({ description: e, name: t, directives: i }) =>
|
|
2530
|
+
leave: ({ description: e, name: t, directives: i }) => H("", e, `
|
|
2531
2531
|
`) + x(["scalar", t, x(i, " ")], " ")
|
|
2532
2532
|
},
|
|
2533
2533
|
ObjectTypeDefinition: {
|
|
2534
|
-
leave: ({ description: e, name: t, interfaces: i, directives: n, fields: s }) =>
|
|
2534
|
+
leave: ({ description: e, name: t, interfaces: i, directives: n, fields: s }) => H("", e, `
|
|
2535
2535
|
`) + x(
|
|
2536
2536
|
[
|
|
2537
2537
|
"type",
|
|
2538
2538
|
t,
|
|
2539
|
-
|
|
2539
|
+
H("implements ", x(i, " & ")),
|
|
2540
2540
|
x(n, " "),
|
|
2541
2541
|
xe(s)
|
|
2542
2542
|
],
|
|
@@ -2544,26 +2544,26 @@ const od = 80, ld = {
|
|
|
2544
2544
|
)
|
|
2545
2545
|
},
|
|
2546
2546
|
FieldDefinition: {
|
|
2547
|
-
leave: ({ description: e, name: t, arguments: i, type: n, directives: s }) =>
|
|
2548
|
-
`) + t + (_r(i) ?
|
|
2547
|
+
leave: ({ description: e, name: t, arguments: i, type: n, directives: s }) => H("", e, `
|
|
2548
|
+
`) + t + (_r(i) ? H(`(
|
|
2549
2549
|
`, Ai(x(i, `
|
|
2550
2550
|
`)), `
|
|
2551
|
-
)`) :
|
|
2551
|
+
)`) : H("(", x(i, ", "), ")")) + ": " + n + H(" ", x(s, " "))
|
|
2552
2552
|
},
|
|
2553
2553
|
InputValueDefinition: {
|
|
2554
|
-
leave: ({ description: e, name: t, type: i, defaultValue: n, directives: s }) =>
|
|
2554
|
+
leave: ({ description: e, name: t, type: i, defaultValue: n, directives: s }) => H("", e, `
|
|
2555
2555
|
`) + x(
|
|
2556
|
-
[t + ": " + i,
|
|
2556
|
+
[t + ": " + i, H("= ", n), x(s, " ")],
|
|
2557
2557
|
" "
|
|
2558
2558
|
)
|
|
2559
2559
|
},
|
|
2560
2560
|
InterfaceTypeDefinition: {
|
|
2561
|
-
leave: ({ description: e, name: t, interfaces: i, directives: n, fields: s }) =>
|
|
2561
|
+
leave: ({ description: e, name: t, interfaces: i, directives: n, fields: s }) => H("", e, `
|
|
2562
2562
|
`) + x(
|
|
2563
2563
|
[
|
|
2564
2564
|
"interface",
|
|
2565
2565
|
t,
|
|
2566
|
-
|
|
2566
|
+
H("implements ", x(i, " & ")),
|
|
2567
2567
|
x(n, " "),
|
|
2568
2568
|
xe(s)
|
|
2569
2569
|
],
|
|
@@ -2571,30 +2571,30 @@ const od = 80, ld = {
|
|
|
2571
2571
|
)
|
|
2572
2572
|
},
|
|
2573
2573
|
UnionTypeDefinition: {
|
|
2574
|
-
leave: ({ description: e, name: t, directives: i, types: n }) =>
|
|
2574
|
+
leave: ({ description: e, name: t, directives: i, types: n }) => H("", e, `
|
|
2575
2575
|
`) + x(
|
|
2576
|
-
["union", t, x(i, " "),
|
|
2576
|
+
["union", t, x(i, " "), H("= ", x(n, " | "))],
|
|
2577
2577
|
" "
|
|
2578
2578
|
)
|
|
2579
2579
|
},
|
|
2580
2580
|
EnumTypeDefinition: {
|
|
2581
|
-
leave: ({ description: e, name: t, directives: i, values: n }) =>
|
|
2581
|
+
leave: ({ description: e, name: t, directives: i, values: n }) => H("", e, `
|
|
2582
2582
|
`) + x(["enum", t, x(i, " "), xe(n)], " ")
|
|
2583
2583
|
},
|
|
2584
2584
|
EnumValueDefinition: {
|
|
2585
|
-
leave: ({ description: e, name: t, directives: i }) =>
|
|
2585
|
+
leave: ({ description: e, name: t, directives: i }) => H("", e, `
|
|
2586
2586
|
`) + x([t, x(i, " ")], " ")
|
|
2587
2587
|
},
|
|
2588
2588
|
InputObjectTypeDefinition: {
|
|
2589
|
-
leave: ({ description: e, name: t, directives: i, fields: n }) =>
|
|
2589
|
+
leave: ({ description: e, name: t, directives: i, fields: n }) => H("", e, `
|
|
2590
2590
|
`) + x(["input", t, x(i, " "), xe(n)], " ")
|
|
2591
2591
|
},
|
|
2592
2592
|
DirectiveDefinition: {
|
|
2593
|
-
leave: ({ description: e, name: t, arguments: i, repeatable: n, locations: s }) =>
|
|
2594
|
-
`) + "directive @" + t + (_r(i) ?
|
|
2593
|
+
leave: ({ description: e, name: t, arguments: i, repeatable: n, locations: s }) => H("", e, `
|
|
2594
|
+
`) + "directive @" + t + (_r(i) ? H(`(
|
|
2595
2595
|
`, Ai(x(i, `
|
|
2596
2596
|
`)), `
|
|
2597
|
-
)`) :
|
|
2597
|
+
)`) : H("(", x(i, ", "), ")")) + (n ? " repeatable" : "") + " on " + x(s, " | ")
|
|
2598
2598
|
},
|
|
2599
2599
|
SchemaExtension: {
|
|
2600
2600
|
leave: ({ directives: e, operationTypes: t }) => x(
|
|
@@ -2610,7 +2610,7 @@ const od = 80, ld = {
|
|
|
2610
2610
|
[
|
|
2611
2611
|
"extend type",
|
|
2612
2612
|
e,
|
|
2613
|
-
|
|
2613
|
+
H("implements ", x(t, " & ")),
|
|
2614
2614
|
x(i, " "),
|
|
2615
2615
|
xe(n)
|
|
2616
2616
|
],
|
|
@@ -2622,7 +2622,7 @@ const od = 80, ld = {
|
|
|
2622
2622
|
[
|
|
2623
2623
|
"extend interface",
|
|
2624
2624
|
e,
|
|
2625
|
-
|
|
2625
|
+
H("implements ", x(t, " & ")),
|
|
2626
2626
|
x(i, " "),
|
|
2627
2627
|
xe(n)
|
|
2628
2628
|
],
|
|
@@ -2635,7 +2635,7 @@ const od = 80, ld = {
|
|
|
2635
2635
|
"extend union",
|
|
2636
2636
|
e,
|
|
2637
2637
|
x(t, " "),
|
|
2638
|
-
|
|
2638
|
+
H("= ", x(i, " | "))
|
|
2639
2639
|
],
|
|
2640
2640
|
" "
|
|
2641
2641
|
)
|
|
@@ -2652,16 +2652,16 @@ function x(e, t = "") {
|
|
|
2652
2652
|
return (i = e?.filter((n) => n).join(t)) !== null && i !== void 0 ? i : "";
|
|
2653
2653
|
}
|
|
2654
2654
|
function xe(e) {
|
|
2655
|
-
return
|
|
2655
|
+
return H(`{
|
|
2656
2656
|
`, Ai(x(e, `
|
|
2657
2657
|
`)), `
|
|
2658
2658
|
}`);
|
|
2659
2659
|
}
|
|
2660
|
-
function
|
|
2660
|
+
function H(e, t, i = "") {
|
|
2661
2661
|
return t != null && t !== "" ? e + t + i : "";
|
|
2662
2662
|
}
|
|
2663
2663
|
function Ai(e) {
|
|
2664
|
-
return
|
|
2664
|
+
return H(" ", e.replace(/\n/g, `
|
|
2665
2665
|
`));
|
|
2666
2666
|
}
|
|
2667
2667
|
function _r(e) {
|
|
@@ -2697,7 +2697,7 @@ const pr = JSON, ad = (e) => e.toUpperCase(), cd = (e) => {
|
|
|
2697
2697
|
if (typeof e == "string") {
|
|
2698
2698
|
let i;
|
|
2699
2699
|
try {
|
|
2700
|
-
const n =
|
|
2700
|
+
const n = Hl(e);
|
|
2701
2701
|
i = $r(n);
|
|
2702
2702
|
} catch {
|
|
2703
2703
|
}
|
|
@@ -2844,9 +2844,9 @@ var Ss = { exports: {} };
|
|
|
2844
2844
|
var y = new FileReader(), T = S(y);
|
|
2845
2845
|
return y.readAsText(f), T;
|
|
2846
2846
|
}
|
|
2847
|
-
function
|
|
2848
|
-
for (var y = new Uint8Array(f), T = new Array(y.length),
|
|
2849
|
-
T[
|
|
2847
|
+
function C(f) {
|
|
2848
|
+
for (var y = new Uint8Array(f), T = new Array(y.length), U = 0; U < y.length; U++)
|
|
2849
|
+
T[U] = String.fromCharCode(y[U]);
|
|
2850
2850
|
return T.join("");
|
|
2851
2851
|
}
|
|
2852
2852
|
function X(f) {
|
|
@@ -2878,7 +2878,7 @@ var Ss = { exports: {} };
|
|
|
2878
2878
|
if (this._bodyBlob)
|
|
2879
2879
|
return V(this._bodyBlob);
|
|
2880
2880
|
if (this._bodyArrayBuffer)
|
|
2881
|
-
return Promise.resolve(
|
|
2881
|
+
return Promise.resolve(C(this._bodyArrayBuffer));
|
|
2882
2882
|
if (this._bodyFormData)
|
|
2883
2883
|
throw new Error("could not read FormData body as text");
|
|
2884
2884
|
return Promise.resolve(this._bodyText);
|
|
@@ -2913,17 +2913,17 @@ var Ss = { exports: {} };
|
|
|
2913
2913
|
var y = new FormData();
|
|
2914
2914
|
return f.trim().split("&").forEach(function(T) {
|
|
2915
2915
|
if (T) {
|
|
2916
|
-
var
|
|
2917
|
-
y.append(decodeURIComponent(
|
|
2916
|
+
var U = T.split("="), F = U.shift().replace(/\+/g, " "), N = U.join("=").replace(/\+/g, " ");
|
|
2917
|
+
y.append(decodeURIComponent(F), decodeURIComponent(N));
|
|
2918
2918
|
}
|
|
2919
2919
|
}), y;
|
|
2920
2920
|
}
|
|
2921
2921
|
function R(f) {
|
|
2922
2922
|
var y = new b(), T = f.replace(/\r?\n[\t ]+/g, " ");
|
|
2923
|
-
return T.split(/\r?\n/).forEach(function(
|
|
2924
|
-
var
|
|
2923
|
+
return T.split(/\r?\n/).forEach(function(U) {
|
|
2924
|
+
var F = U.split(":"), N = F.shift().trim();
|
|
2925
2925
|
if (N) {
|
|
2926
|
-
var A =
|
|
2926
|
+
var A = F.join(":").trim();
|
|
2927
2927
|
y.append(N, A);
|
|
2928
2928
|
}
|
|
2929
2929
|
}), y;
|
|
@@ -2943,9 +2943,9 @@ var Ss = { exports: {} };
|
|
|
2943
2943
|
var f = new J(null, { status: 0, statusText: "" });
|
|
2944
2944
|
return f.type = "error", f;
|
|
2945
2945
|
};
|
|
2946
|
-
var
|
|
2946
|
+
var E = [301, 302, 303, 307, 308];
|
|
2947
2947
|
J.redirect = function(f, y) {
|
|
2948
|
-
if (
|
|
2948
|
+
if (E.indexOf(y) === -1)
|
|
2949
2949
|
throw new RangeError("Invalid status code");
|
|
2950
2950
|
return new J(null, { status: y, headers: { location: f } });
|
|
2951
2951
|
}, l.DOMException = r.DOMException;
|
|
@@ -2954,15 +2954,15 @@ var Ss = { exports: {} };
|
|
|
2954
2954
|
} catch {
|
|
2955
2955
|
l.DOMException = function(y, T) {
|
|
2956
2956
|
this.message = y, this.name = T;
|
|
2957
|
-
var
|
|
2958
|
-
this.stack =
|
|
2957
|
+
var U = Error(y);
|
|
2958
|
+
this.stack = U.stack;
|
|
2959
2959
|
}, l.DOMException.prototype = Object.create(Error.prototype), l.DOMException.prototype.constructor = l.DOMException;
|
|
2960
2960
|
}
|
|
2961
2961
|
function $(f, y) {
|
|
2962
|
-
return new Promise(function(T,
|
|
2963
|
-
var
|
|
2964
|
-
if (
|
|
2965
|
-
return
|
|
2962
|
+
return new Promise(function(T, U) {
|
|
2963
|
+
var F = new w(f, y);
|
|
2964
|
+
if (F.signal && F.signal.aborted)
|
|
2965
|
+
return U(new l.DOMException("Aborted", "AbortError"));
|
|
2966
2966
|
var N = new XMLHttpRequest();
|
|
2967
2967
|
function A() {
|
|
2968
2968
|
N.abort();
|
|
@@ -2977,16 +2977,16 @@ var Ss = { exports: {} };
|
|
|
2977
2977
|
var de = "response" in N ? N.response : N.responseText;
|
|
2978
2978
|
T(new J(de, D));
|
|
2979
2979
|
}, N.onerror = function() {
|
|
2980
|
-
|
|
2980
|
+
U(new TypeError("Network request failed"));
|
|
2981
2981
|
}, N.ontimeout = function() {
|
|
2982
|
-
|
|
2982
|
+
U(new TypeError("Network request failed"));
|
|
2983
2983
|
}, N.onabort = function() {
|
|
2984
|
-
|
|
2985
|
-
}, N.open(
|
|
2984
|
+
U(new l.DOMException("Aborted", "AbortError"));
|
|
2985
|
+
}, N.open(F.method, F.url, !0), F.credentials === "include" ? N.withCredentials = !0 : F.credentials === "omit" && (N.withCredentials = !1), "responseType" in N && o.blob && (N.responseType = "blob"), F.headers.forEach(function(D, de) {
|
|
2986
2986
|
N.setRequestHeader(de, D);
|
|
2987
|
-
}),
|
|
2988
|
-
N.readyState === 4 &&
|
|
2989
|
-
}), N.send(typeof
|
|
2987
|
+
}), F.signal && (F.signal.addEventListener("abort", A), N.onreadystatechange = function() {
|
|
2988
|
+
N.readyState === 4 && F.signal.removeEventListener("abort", A);
|
|
2989
|
+
}), N.send(typeof F._bodyInit > "u" ? null : F._bodyInit);
|
|
2990
2990
|
});
|
|
2991
2991
|
}
|
|
2992
2992
|
return $.polyfill = !0, r.fetch || (r.fetch = $, r.Headers = b, r.Request = w, r.Response = J), l.Headers = b, l.Request = w, l.Response = J, l.fetch = $, Object.defineProperty(l, "__esModule", { value: !0 }), l;
|
|
@@ -3016,7 +3016,7 @@ const _i = /* @__PURE__ */ mr(cn), md = /* @__PURE__ */ Zu({
|
|
|
3016
3016
|
variables: t.variables ? t.jsonSerializer.stringify(t.variables[r]) : void 0
|
|
3017
3017
|
}), n), []);
|
|
3018
3018
|
return `query=${encodeURIComponent(t.jsonSerializer.stringify(i))}`;
|
|
3019
|
-
}, fd = (e) => (t) =>
|
|
3019
|
+
}, fd = (e) => (t) => Wt(void 0, null, function* () {
|
|
3020
3020
|
var i;
|
|
3021
3021
|
const { url: n, query: s, variables: r, operationName: l, fetch: o, fetchOptions: a, middleware: c } = t, u = Q({}, t.headers);
|
|
3022
3022
|
let h = "", p;
|
|
@@ -3040,7 +3040,7 @@ const _i = /* @__PURE__ */ mr(cn), md = /* @__PURE__ */ Zu({
|
|
|
3040
3040
|
});
|
|
3041
3041
|
let yd = class {
|
|
3042
3042
|
constructor(t, i = {}) {
|
|
3043
|
-
this.url = t, this.requestConfig = i, this.rawRequest = (...n) =>
|
|
3043
|
+
this.url = t, this.requestConfig = i, this.rawRequest = (...n) => Wt(this, null, function* () {
|
|
3044
3044
|
const [s, r, l] = n, o = dd(s, r, l), a = this.requestConfig, { headers: c, fetch: u = _i, method: h = "POST", requestMiddleware: p, responseMiddleware: m } = a, b = Qt(a, ["headers", "fetch", "method", "requestMiddleware", "responseMiddleware"]), { url: d } = this;
|
|
3045
3045
|
o.signal !== void 0 && (b.signal = o.signal);
|
|
3046
3046
|
const { operationName: S } = An(o.query);
|
|
@@ -3060,7 +3060,7 @@ let yd = class {
|
|
|
3060
3060
|
});
|
|
3061
3061
|
}
|
|
3062
3062
|
request(t, ...i) {
|
|
3063
|
-
return
|
|
3063
|
+
return Wt(this, null, function* () {
|
|
3064
3064
|
const [n, s] = i, r = ud(t, n, s), l = this.requestConfig, { headers: o, fetch: a = _i, method: c = "POST", requestMiddleware: u, responseMiddleware: h } = l, p = Qt(l, ["headers", "fetch", "method", "requestMiddleware", "responseMiddleware"]), { url: m } = this;
|
|
3065
3065
|
r.signal !== void 0 && (p.signal = r.signal);
|
|
3066
3066
|
const { query: b, operationName: d } = An(r.document);
|
|
@@ -3117,7 +3117,7 @@ let yd = class {
|
|
|
3117
3117
|
return this.url = t, this;
|
|
3118
3118
|
}
|
|
3119
3119
|
};
|
|
3120
|
-
const _n = (e) =>
|
|
3120
|
+
const _n = (e) => Wt(void 0, null, function* () {
|
|
3121
3121
|
var t, i;
|
|
3122
3122
|
const { query: n, variables: s, fetchOptions: r } = e, l = fd(ad((t = e.method) != null ? t : "post")), o = Array.isArray(e.query), a = yield l(e), c = yield Zd(a, (i = r.jsonSerializer) != null ? i : pr), u = Array.isArray(c) ? !c.some(({ data: p }) => !p) : !!c.data, h = Array.isArray(c) || !c.errors || Array.isArray(c.errors) && !c.errors.length || r.errorPolicy === "all" || r.errorPolicy === "ignore";
|
|
3123
3123
|
if (a.ok && h && u) {
|
|
@@ -3144,7 +3144,7 @@ const _n = (e) => Ct(void 0, null, function* () {
|
|
|
3144
3144
|
throw new Error("Cannot create request body with given variable type, array expected");
|
|
3145
3145
|
const r = e.reduce((l, o, a) => (l.push({ query: o, variables: t ? t[a] : void 0 }), l), []);
|
|
3146
3146
|
return s.stringify(r);
|
|
3147
|
-
}, Zd = (e, t) =>
|
|
3147
|
+
}, Zd = (e, t) => Wt(void 0, null, function* () {
|
|
3148
3148
|
let i;
|
|
3149
3149
|
return e.headers.forEach((n, s) => {
|
|
3150
3150
|
s.toLowerCase() === "content-type" && (i = n);
|
|
@@ -3209,10 +3209,10 @@ function Xd(e) {
|
|
|
3209
3209
|
var i = e.loc;
|
|
3210
3210
|
return i && (delete i.startToken, delete i.endToken), e;
|
|
3211
3211
|
}
|
|
3212
|
-
function
|
|
3212
|
+
function Wd(e) {
|
|
3213
3213
|
var t = Dl(e);
|
|
3214
3214
|
if (!$i.has(t)) {
|
|
3215
|
-
var i =
|
|
3215
|
+
var i = Hl(e, {
|
|
3216
3216
|
experimentalFragmentVariables: dn,
|
|
3217
3217
|
allowLegacyFragmentVariables: dn
|
|
3218
3218
|
});
|
|
@@ -3229,9 +3229,9 @@ function Ie(e) {
|
|
|
3229
3229
|
var n = e[0];
|
|
3230
3230
|
return t.forEach(function(s, r) {
|
|
3231
3231
|
s && s.kind === "Document" ? n += s.loc.source.body : n += s, n += e[r + 1];
|
|
3232
|
-
}),
|
|
3232
|
+
}), Wd(n);
|
|
3233
3233
|
}
|
|
3234
|
-
function
|
|
3234
|
+
function Cd() {
|
|
3235
3235
|
$i.clear(), Vs.clear();
|
|
3236
3236
|
}
|
|
3237
3237
|
function Rd() {
|
|
@@ -3243,15 +3243,15 @@ function kd() {
|
|
|
3243
3243
|
function vd() {
|
|
3244
3244
|
dn = !1;
|
|
3245
3245
|
}
|
|
3246
|
-
var
|
|
3246
|
+
var Ft = {
|
|
3247
3247
|
gql: Ie,
|
|
3248
|
-
resetCaches:
|
|
3248
|
+
resetCaches: Cd,
|
|
3249
3249
|
disableFragmentWarnings: Rd,
|
|
3250
3250
|
enableExperimentalFragmentVariables: kd,
|
|
3251
3251
|
disableExperimentalFragmentVariables: vd
|
|
3252
3252
|
};
|
|
3253
3253
|
(function(e) {
|
|
3254
|
-
e.gql =
|
|
3254
|
+
e.gql = Ft.gql, e.resetCaches = Ft.resetCaches, e.disableFragmentWarnings = Ft.disableFragmentWarnings, e.enableExperimentalFragmentVariables = Ft.enableExperimentalFragmentVariables, e.disableExperimentalFragmentVariables = Ft.disableExperimentalFragmentVariables;
|
|
3255
3255
|
})(Ie || (Ie = {}));
|
|
3256
3256
|
Ie.default = Ie;
|
|
3257
3257
|
const jl = Ie`
|
|
@@ -3431,7 +3431,7 @@ const jl = Ie`
|
|
|
3431
3431
|
query Ignore($id: ID!) {
|
|
3432
3432
|
ignore(id: $id)
|
|
3433
3433
|
}
|
|
3434
|
-
`,
|
|
3434
|
+
`, Ud = Ie`
|
|
3435
3435
|
query GetSamplingConfig($organization_verbose_id: String!) {
|
|
3436
3436
|
sampling(organization_verbose_id: $organization_verbose_id) {
|
|
3437
3437
|
spans {
|
|
@@ -3481,8 +3481,8 @@ const jl = Ie`
|
|
|
3481
3481
|
}
|
|
3482
3482
|
}
|
|
3483
3483
|
${jl}
|
|
3484
|
-
`,
|
|
3485
|
-
function Kd(e, t =
|
|
3484
|
+
`, Fd = (e, t, i, n) => e();
|
|
3485
|
+
function Kd(e, t = Fd) {
|
|
3486
3486
|
return {
|
|
3487
3487
|
PushPayload(i, n) {
|
|
3488
3488
|
return t(
|
|
@@ -3579,7 +3579,7 @@ function Kd(e, t = Ud) {
|
|
|
3579
3579
|
GetSamplingConfig(i, n) {
|
|
3580
3580
|
return t(
|
|
3581
3581
|
(s) => e.request(
|
|
3582
|
-
|
|
3582
|
+
Ud,
|
|
3583
3583
|
i,
|
|
3584
3584
|
Q(Q({}, n), s)
|
|
3585
3585
|
),
|
|
@@ -3590,12 +3590,12 @@ function Kd(e, t = Ud) {
|
|
|
3590
3590
|
}
|
|
3591
3591
|
};
|
|
3592
3592
|
}
|
|
3593
|
-
function
|
|
3593
|
+
function Md() {
|
|
3594
3594
|
var e = document.createElement("canvas");
|
|
3595
3595
|
return e.getContext && e.getContext("2d") ? e.toDataURL("image/webp").indexOf("data:image/webp") == 0 : !1;
|
|
3596
3596
|
}
|
|
3597
|
-
function
|
|
3598
|
-
return
|
|
3597
|
+
function Od() {
|
|
3598
|
+
return Md() ? {
|
|
3599
3599
|
type: "image/webp",
|
|
3600
3600
|
quality: 0.9
|
|
3601
3601
|
} : {
|
|
@@ -3603,7 +3603,7 @@ function Ed() {
|
|
|
3603
3603
|
quality: 0.6
|
|
3604
3604
|
};
|
|
3605
3605
|
}
|
|
3606
|
-
const
|
|
3606
|
+
const Ed = "telemetry.sdk.name", Hd = "telemetry.sdk.version", eo = 1e3, zd = 1e3 * 2, Pd = 4 * 60 * 60 * 1e3, br = 15 * 60 * 1e3, to = {
|
|
3607
3607
|
normal: {
|
|
3608
3608
|
bytes: 1e7,
|
|
3609
3609
|
time: 4 * 60 * 1e3
|
|
@@ -3687,8 +3687,8 @@ function Xs(e, t) {
|
|
|
3687
3687
|
}
|
|
3688
3688
|
);
|
|
3689
3689
|
}
|
|
3690
|
-
var qn = Xs(_d, { path: "/" }),
|
|
3691
|
-
let hn = "localStorage",
|
|
3690
|
+
var qn = Xs(_d, { path: "/" }), Ws = /* @__PURE__ */ ((e) => (e.CLIENT_ID = "highlightClientID", e))(Ws || {});
|
|
3691
|
+
let hn = "localStorage", Cs = !0, $d = class {
|
|
3692
3692
|
constructor() {
|
|
3693
3693
|
ni(this, "storage", {});
|
|
3694
3694
|
}
|
|
@@ -3715,13 +3715,13 @@ let hn = "localStorage", Ws = !0, $d = class {
|
|
|
3715
3715
|
return (i = qn.get(t)) != null ? i : "";
|
|
3716
3716
|
}
|
|
3717
3717
|
setItem(t, i) {
|
|
3718
|
-
if (!
|
|
3718
|
+
if (!Cs)
|
|
3719
3719
|
return;
|
|
3720
3720
|
const n = /* @__PURE__ */ new Date();
|
|
3721
3721
|
n.setTime(n.getTime() + br), qn.set(t, i, { expires: n });
|
|
3722
3722
|
}
|
|
3723
3723
|
removeItem(t) {
|
|
3724
|
-
|
|
3724
|
+
Cs && qn.remove(t);
|
|
3725
3725
|
}
|
|
3726
3726
|
};
|
|
3727
3727
|
const Xt = new $d(), pn = new qd(), ri = () => {
|
|
@@ -3756,7 +3756,7 @@ const Xt = new $d(), pn = new qd(), ri = () => {
|
|
|
3756
3756
|
}, eh = (e) => {
|
|
3757
3757
|
hn = e;
|
|
3758
3758
|
}, no = (e) => {
|
|
3759
|
-
|
|
3759
|
+
Cs = e;
|
|
3760
3760
|
}, Xe = (e) => {
|
|
3761
3761
|
try {
|
|
3762
3762
|
return ri().getItem(e);
|
|
@@ -3884,7 +3884,7 @@ const lh = 3, ah = 1e3, ch = 500, uh = [_l.BillingQuotaExceeded.toString()], dh
|
|
|
3884
3884
|
(i) => uh.includes(i.message)
|
|
3885
3885
|
)) === void 0;
|
|
3886
3886
|
}, hh = () => {
|
|
3887
|
-
const e = (t, i, n, s, r = 0) =>
|
|
3887
|
+
const e = (t, i, n, s, r = 0) => Wt(void 0, null, function* () {
|
|
3888
3888
|
try {
|
|
3889
3889
|
return yield t();
|
|
3890
3890
|
} catch (l) {
|
|
@@ -3991,11 +3991,11 @@ class Ih extends wl {
|
|
|
3991
3991
|
return this._bufferCall("track", [t, i]);
|
|
3992
3992
|
}
|
|
3993
3993
|
}
|
|
3994
|
-
const Sh = "9.25.
|
|
3994
|
+
const Sh = "9.25.1", Gh = {
|
|
3995
3995
|
version: Sh
|
|
3996
3996
|
}, Vh = Gh.version;
|
|
3997
3997
|
function ta(e, t) {
|
|
3998
|
-
return
|
|
3998
|
+
return Wh(e);
|
|
3999
3999
|
}
|
|
4000
4000
|
function Xh(e) {
|
|
4001
4001
|
if (e.id.length)
|
|
@@ -4008,11 +4008,11 @@ function Xh(e) {
|
|
|
4008
4008
|
}
|
|
4009
4009
|
return e.nodeName.toLowerCase();
|
|
4010
4010
|
}
|
|
4011
|
-
const
|
|
4011
|
+
const Wh = (e) => {
|
|
4012
4012
|
let t = "";
|
|
4013
4013
|
const i = e.getAttribute("class"), n = e.getAttribute("id");
|
|
4014
4014
|
return n && (t = t.concat(lo(n, "#"))), i && (t = t.concat(lo(i, "."))), t === "" && (t = t.concat(e.tagName.toLowerCase())), t;
|
|
4015
|
-
}, lo = (e, t) => `${t}${e.trim().split(" ").join(t)}`,
|
|
4015
|
+
}, lo = (e, t) => `${t}${e.trim().split(" ").join(t)}`, Ch = (e) => {
|
|
4016
4016
|
let t;
|
|
4017
4017
|
const i = () => {
|
|
4018
4018
|
clearTimeout(t), t = setTimeout(() => {
|
|
@@ -4192,7 +4192,7 @@ var Th = Object.defineProperty, Nh = Object.defineProperties, Lh = Object.getOwn
|
|
|
4192
4192
|
for (var i of bn(t))
|
|
4193
4193
|
sa.call(t, i) && Rs(e, i, t[i]);
|
|
4194
4194
|
return e;
|
|
4195
|
-
}, Se = (e, t) => Nh(e, Lh(t)),
|
|
4195
|
+
}, Se = (e, t) => Nh(e, Lh(t)), Ct = (e, t) => {
|
|
4196
4196
|
var i = {};
|
|
4197
4197
|
for (var n in e)
|
|
4198
4198
|
na.call(e, n) && t.indexOf(n) < 0 && (i[n] = e[n]);
|
|
@@ -4218,7 +4218,7 @@ var Th = Object.defineProperty, Nh = Object.defineProperties, Lh = Object.getOwn
|
|
|
4218
4218
|
});
|
|
4219
4219
|
const Jh = {
|
|
4220
4220
|
key: "_sid"
|
|
4221
|
-
}, Yh = "rrweb/sequential-id@1",
|
|
4221
|
+
}, Yh = "rrweb/sequential-id@1", Uh = (e) => {
|
|
4222
4222
|
const t = Jh;
|
|
4223
4223
|
let i = 0;
|
|
4224
4224
|
return {
|
|
@@ -4231,30 +4231,30 @@ const Jh = {
|
|
|
4231
4231
|
options: t
|
|
4232
4232
|
};
|
|
4233
4233
|
};
|
|
4234
|
-
var
|
|
4235
|
-
const
|
|
4234
|
+
var Fh = Object.defineProperty, Kh = (e, t, i) => t in e ? Fh(e, t, { enumerable: !0, configurable: !0, writable: !0, value: i }) : e[t] = i, W = (e, t, i) => Kh(e, typeof t != "symbol" ? t + "" : t, i), co, Mh = Object.defineProperty, Oh = (e, t, i) => t in e ? Mh(e, t, { enumerable: !0, configurable: !0, writable: !0, value: i }) : e[t] = i, uo = (e, t, i) => Oh(e, typeof t != "symbol" ? t + "" : t, i), ae = /* @__PURE__ */ ((e) => (e[e.Document = 0] = "Document", e[e.DocumentType = 1] = "DocumentType", e[e.Element = 2] = "Element", e[e.Text = 3] = "Text", e[e.CDATA = 4] = "CDATA", e[e.Comment = 5] = "Comment", e))(ae || {});
|
|
4235
|
+
const Wi = /* @__PURE__ */ new Map(), ho = /* @__PURE__ */ new WeakSet();
|
|
4236
4236
|
function po(e) {
|
|
4237
4237
|
return e !== null && typeof e == "object" && "complete" in e && "naturalWidth" in e && "naturalHeight" in e && "src" in e && "onload" in e;
|
|
4238
4238
|
}
|
|
4239
|
-
function
|
|
4239
|
+
function Eh(e) {
|
|
4240
4240
|
if (ho.has(e))
|
|
4241
4241
|
return;
|
|
4242
4242
|
ho.add(e);
|
|
4243
4243
|
const t = e.drawImage.bind(e);
|
|
4244
4244
|
e.drawImage = function(i, ...n) {
|
|
4245
|
-
const s =
|
|
4245
|
+
const s = Wi.get(e);
|
|
4246
4246
|
s && (s.cancelled = !0);
|
|
4247
4247
|
const r = () => {
|
|
4248
4248
|
n.length === 2 && po(i) && n.push(i.naturalWidth || i.width, i.naturalHeight || i.height), t(i, ...n);
|
|
4249
4249
|
};
|
|
4250
4250
|
if (po(i) && !i.complete) {
|
|
4251
4251
|
const l = { cancelled: !1 };
|
|
4252
|
-
|
|
4252
|
+
Wi.set(e, l);
|
|
4253
4253
|
const o = () => {
|
|
4254
|
-
l.cancelled || (
|
|
4254
|
+
l.cancelled || (Wi.delete(e), r());
|
|
4255
4255
|
}, a = () => {
|
|
4256
4256
|
if (!l.cancelled) {
|
|
4257
|
-
|
|
4257
|
+
Wi.delete(e);
|
|
4258
4258
|
try {
|
|
4259
4259
|
r();
|
|
4260
4260
|
} catch {
|
|
@@ -4276,10 +4276,10 @@ const mo = {
|
|
|
4276
4276
|
ShadowRoot: ["getSelection"],
|
|
4277
4277
|
Element: [],
|
|
4278
4278
|
MutationObserver: ["constructor"]
|
|
4279
|
-
},
|
|
4279
|
+
}, Ci = {}, Hh = () => !!globalThis.Zone;
|
|
4280
4280
|
function fr(e) {
|
|
4281
|
-
if (
|
|
4282
|
-
return
|
|
4281
|
+
if (Ci[e])
|
|
4282
|
+
return Ci[e];
|
|
4283
4283
|
const t = globalThis[e], i = t.prototype, n = e in mo ? mo[e] : void 0, s = !!(n && // @ts-expect-error 2345
|
|
4284
4284
|
n.every(
|
|
4285
4285
|
(o) => {
|
|
@@ -4293,15 +4293,15 @@ function fr(e) {
|
|
|
4293
4293
|
return typeof i[o] == "function" && ((a = i[o]) == null ? void 0 : a.toString().includes("[native code]"));
|
|
4294
4294
|
}
|
|
4295
4295
|
));
|
|
4296
|
-
if (s && l && !
|
|
4297
|
-
return
|
|
4296
|
+
if (s && l && !Hh())
|
|
4297
|
+
return Ci[e] = t.prototype, t.prototype;
|
|
4298
4298
|
try {
|
|
4299
4299
|
const o = document.createElement("iframe");
|
|
4300
4300
|
document.body.appendChild(o);
|
|
4301
4301
|
const a = o.contentWindow;
|
|
4302
4302
|
if (!a) return t.prototype;
|
|
4303
4303
|
const c = a[e].prototype;
|
|
4304
|
-
return document.body.removeChild(o), c ?
|
|
4304
|
+
return document.body.removeChild(o), c ? Ci[e] = c : i;
|
|
4305
4305
|
} catch {
|
|
4306
4306
|
return i;
|
|
4307
4307
|
}
|
|
@@ -4330,7 +4330,7 @@ function ra(e, t, i) {
|
|
|
4330
4330
|
const s = fr(e)[i];
|
|
4331
4331
|
return typeof s != "function" ? t[i] : (is[n] = s, s.bind(t));
|
|
4332
4332
|
}
|
|
4333
|
-
function
|
|
4333
|
+
function zh(e) {
|
|
4334
4334
|
return qe("Node", e, "childNodes");
|
|
4335
4335
|
}
|
|
4336
4336
|
function Ph(e) {
|
|
@@ -4386,7 +4386,7 @@ function ip(e, t, i) {
|
|
|
4386
4386
|
}
|
|
4387
4387
|
}
|
|
4388
4388
|
const he = {
|
|
4389
|
-
childNodes:
|
|
4389
|
+
childNodes: zh,
|
|
4390
4390
|
parentNode: Ph,
|
|
4391
4391
|
parentElement: Bh,
|
|
4392
4392
|
textContent: Dh,
|
|
@@ -4399,7 +4399,7 @@ const he = {
|
|
|
4399
4399
|
querySelectorAll: ep,
|
|
4400
4400
|
mutationObserver: tp,
|
|
4401
4401
|
patch: ip,
|
|
4402
|
-
wrapCanvasContextDrawImage:
|
|
4402
|
+
wrapCanvasContextDrawImage: Eh
|
|
4403
4403
|
};
|
|
4404
4404
|
function oa(e) {
|
|
4405
4405
|
return e.nodeType === e.ELEMENT_NODE;
|
|
@@ -4712,16 +4712,16 @@ const da = ({
|
|
|
4712
4712
|
const s = i && i.toLowerCase();
|
|
4713
4713
|
return n !== "true" && (!!e[t.toLowerCase()] || !!(s && e[s]));
|
|
4714
4714
|
};
|
|
4715
|
-
let
|
|
4716
|
-
const
|
|
4715
|
+
let Wp = 1;
|
|
4716
|
+
const Cp = new RegExp("[^a-z0-9-_:]"), oi = -2;
|
|
4717
4717
|
function ha() {
|
|
4718
|
-
return
|
|
4718
|
+
return Wp++;
|
|
4719
4719
|
}
|
|
4720
4720
|
function Rp(e) {
|
|
4721
4721
|
if (e instanceof HTMLFormElement)
|
|
4722
4722
|
return "form";
|
|
4723
4723
|
const t = Rt(e.tagName);
|
|
4724
|
-
return
|
|
4724
|
+
return Cp.test(t) ? "div" : t;
|
|
4725
4725
|
}
|
|
4726
4726
|
let yt, yo;
|
|
4727
4727
|
const kp = /^[^ \t\n\r\u000c]+/, vp = /^[, \t\n\r\u000c]+/;
|
|
@@ -4892,7 +4892,7 @@ function Lp(e, t) {
|
|
|
4892
4892
|
keepIframeSrcFn: S,
|
|
4893
4893
|
newlyAddedElement: I = !1,
|
|
4894
4894
|
cssCaptured: V = !1,
|
|
4895
|
-
privacySetting:
|
|
4895
|
+
privacySetting: C
|
|
4896
4896
|
} = t, X = Jp(i, n);
|
|
4897
4897
|
switch (e.nodeType) {
|
|
4898
4898
|
case e.DOCUMENT_NODE:
|
|
@@ -4914,7 +4914,7 @@ function Lp(e, t) {
|
|
|
4914
4914
|
rootId: X
|
|
4915
4915
|
};
|
|
4916
4916
|
case e.ELEMENT_NODE:
|
|
4917
|
-
return
|
|
4917
|
+
return Up(e, {
|
|
4918
4918
|
doc: i,
|
|
4919
4919
|
blockClass: s,
|
|
4920
4920
|
blockSelector: r,
|
|
@@ -4928,7 +4928,7 @@ function Lp(e, t) {
|
|
|
4928
4928
|
recordCanvas: d,
|
|
4929
4929
|
keepIframeSrcFn: S,
|
|
4930
4930
|
newlyAddedElement: I,
|
|
4931
|
-
privacySetting:
|
|
4931
|
+
privacySetting: C,
|
|
4932
4932
|
rootId: X
|
|
4933
4933
|
});
|
|
4934
4934
|
case e.TEXT_NODE:
|
|
@@ -4936,7 +4936,7 @@ function Lp(e, t) {
|
|
|
4936
4936
|
doc: i,
|
|
4937
4937
|
needsMask: l,
|
|
4938
4938
|
maskTextFn: u,
|
|
4939
|
-
privacySetting:
|
|
4939
|
+
privacySetting: C,
|
|
4940
4940
|
rootId: X,
|
|
4941
4941
|
cssCaptured: V
|
|
4942
4942
|
});
|
|
@@ -4982,7 +4982,7 @@ function Yp(e, t) {
|
|
|
4982
4982
|
rootId: l
|
|
4983
4983
|
};
|
|
4984
4984
|
}
|
|
4985
|
-
function
|
|
4985
|
+
function Up(e, t) {
|
|
4986
4986
|
const {
|
|
4987
4987
|
doc: i,
|
|
4988
4988
|
blockClass: n,
|
|
@@ -5001,7 +5001,7 @@ function Fp(e, t) {
|
|
|
5001
5001
|
rootId: S
|
|
5002
5002
|
} = t;
|
|
5003
5003
|
let I = Zo(e, n, s);
|
|
5004
|
-
const V = Zo(e, a, null),
|
|
5004
|
+
const V = Zo(e, a, null), C = d === "strict";
|
|
5005
5005
|
let X = Rp(e), G = {};
|
|
5006
5006
|
const k = e.attributes.length;
|
|
5007
5007
|
for (let g = 0; g < k; g++) {
|
|
@@ -5052,10 +5052,10 @@ function Fp(e, t) {
|
|
|
5052
5052
|
g !== J && (G.rr_dataURL = g);
|
|
5053
5053
|
}
|
|
5054
5054
|
}
|
|
5055
|
-
if (X === "img" && u && !I && !V && !
|
|
5055
|
+
if (X === "img" && u && !I && !V && !C) {
|
|
5056
5056
|
yt || (yt = i.createElement("canvas"), yo = yt.getContext("2d"));
|
|
5057
|
-
const g = e, R = g.currentSrc || g.getAttribute("src") || "<unknown-src>", J = g.crossOrigin,
|
|
5058
|
-
g.removeEventListener("load",
|
|
5057
|
+
const g = e, R = g.currentSrc || g.getAttribute("src") || "<unknown-src>", J = g.crossOrigin, E = () => {
|
|
5058
|
+
g.removeEventListener("load", E);
|
|
5059
5059
|
try {
|
|
5060
5060
|
yt.width = g.naturalWidth, yt.height = g.naturalHeight, yo.drawImage(g, 0, 0), G.rr_dataURL = yt.toDataURL(
|
|
5061
5061
|
c.type,
|
|
@@ -5063,7 +5063,7 @@ function Fp(e, t) {
|
|
|
5063
5063
|
);
|
|
5064
5064
|
} catch ($) {
|
|
5065
5065
|
if (g.crossOrigin !== "anonymous") {
|
|
5066
|
-
g.crossOrigin = "anonymous", g.complete && g.naturalWidth !== 0 ?
|
|
5066
|
+
g.crossOrigin = "anonymous", g.complete && g.naturalWidth !== 0 ? E() : g.addEventListener("load", E);
|
|
5067
5067
|
return;
|
|
5068
5068
|
} else
|
|
5069
5069
|
console.warn(
|
|
@@ -5072,13 +5072,13 @@ function Fp(e, t) {
|
|
|
5072
5072
|
}
|
|
5073
5073
|
g.crossOrigin === "anonymous" && (J ? G.crossOrigin = J : g.removeAttribute("crossorigin"));
|
|
5074
5074
|
};
|
|
5075
|
-
g.complete && g.naturalWidth !== 0 ?
|
|
5075
|
+
g.complete && g.naturalWidth !== 0 ? E() : g.addEventListener("load", E);
|
|
5076
5076
|
}
|
|
5077
5077
|
if (X === "audio" || X === "video") {
|
|
5078
5078
|
const g = G;
|
|
5079
5079
|
g.rr_mediaState = e.paused ? "paused" : "played", g.rr_mediaCurrentTime = e.currentTime, g.rr_mediaPlaybackRate = e.playbackRate, g.rr_mediaMuted = e.muted, g.rr_mediaLoop = e.loop, g.rr_mediaVolume = e.volume;
|
|
5080
5080
|
}
|
|
5081
|
-
if (b || (e.scrollLeft && (G.rr_scrollLeft = e.scrollLeft), e.scrollTop && (G.rr_scrollTop = e.scrollTop)), I || V ||
|
|
5081
|
+
if (b || (e.scrollLeft && (G.rr_scrollLeft = e.scrollLeft), e.scrollTop && (G.rr_scrollTop = e.scrollTop)), I || V || C && vs(X)) {
|
|
5082
5082
|
const { width: g, height: R } = e.getBoundingClientRect();
|
|
5083
5083
|
G = {
|
|
5084
5084
|
class: G.class,
|
|
@@ -5086,7 +5086,7 @@ function Fp(e, t) {
|
|
|
5086
5086
|
rr_height: `${R}px`
|
|
5087
5087
|
};
|
|
5088
5088
|
}
|
|
5089
|
-
|
|
5089
|
+
C && vs(X) && (I = !0), X === "iframe" && !m(G.src) && (e.contentDocument || (G.rr_src = G.src), delete G.src);
|
|
5090
5090
|
let v;
|
|
5091
5091
|
try {
|
|
5092
5092
|
customElements.get(X) && (v = !0);
|
|
@@ -5103,8 +5103,8 @@ function Fp(e, t) {
|
|
|
5103
5103
|
class: G.class,
|
|
5104
5104
|
style: G.style
|
|
5105
5105
|
}, X = "canvas";
|
|
5106
|
-
const
|
|
5107
|
-
|
|
5106
|
+
const E = i.createElement("canvas");
|
|
5107
|
+
E.width = e.width, E.height = e.height, G.rr_dataURL = E.toDataURL(
|
|
5108
5108
|
c.type,
|
|
5109
5109
|
c.quality
|
|
5110
5110
|
);
|
|
@@ -5128,7 +5128,7 @@ function Fp(e, t) {
|
|
|
5128
5128
|
function ie(e) {
|
|
5129
5129
|
return e == null ? "" : e.toLowerCase();
|
|
5130
5130
|
}
|
|
5131
|
-
function
|
|
5131
|
+
function Fp(e, t) {
|
|
5132
5132
|
return !!(t.comment && e.type === ae.Comment || e.type === ae.Element && (t.script && // script tag
|
|
5133
5133
|
(e.tagName === "script" || // (module)preload link
|
|
5134
5134
|
e.tagName === "link" && (e.attributes.rel === "preload" && e.attributes.as === "script" || e.attributes.rel === "modulepreload") || // prefetch link
|
|
@@ -5156,7 +5156,7 @@ function St(e, t) {
|
|
|
5156
5156
|
inlineVideos: S = !1,
|
|
5157
5157
|
recordCanvas: I = !1,
|
|
5158
5158
|
onSerialize: V,
|
|
5159
|
-
onIframeLoad:
|
|
5159
|
+
onIframeLoad: C,
|
|
5160
5160
|
iframeLoadTimeout: X = 5e3,
|
|
5161
5161
|
onStylesheetLoad: G,
|
|
5162
5162
|
stylesheetLoadTimeout: k = 5e3,
|
|
@@ -5165,7 +5165,7 @@ function St(e, t) {
|
|
|
5165
5165
|
cssCaptured: g = !1,
|
|
5166
5166
|
privacySetting: R
|
|
5167
5167
|
} = t;
|
|
5168
|
-
let { needsMask: J } = t, { preserveWhiteSpace:
|
|
5168
|
+
let { needsMask: J } = t, { preserveWhiteSpace: E = !0 } = t;
|
|
5169
5169
|
J || (J = ba(
|
|
5170
5170
|
e,
|
|
5171
5171
|
l,
|
|
@@ -5195,14 +5195,14 @@ function St(e, t) {
|
|
|
5195
5195
|
if (!$)
|
|
5196
5196
|
return console.warn(e, "not serialized"), null;
|
|
5197
5197
|
let f;
|
|
5198
|
-
n.hasNode(e) ? f = n.getId(e) :
|
|
5198
|
+
n.hasNode(e) ? f = n.getId(e) : Fp($, m) || !E && $.type === ae.Text && !$.textContent.replace(/^\s+|\s+$/gm, "").length ? f = oi : f = ha();
|
|
5199
5199
|
const y = Object.assign($, { id: f });
|
|
5200
5200
|
if (n.add(e, y), f === oi)
|
|
5201
5201
|
return null;
|
|
5202
5202
|
V && V(e);
|
|
5203
|
-
let T = !a,
|
|
5203
|
+
let T = !a, U = R, F = R === "strict";
|
|
5204
5204
|
if (y.type === ae.Element) {
|
|
5205
|
-
if (T = T && !y.needBlock,
|
|
5205
|
+
if (T = T && !y.needBlock, F || (F = !!y.needBlock || !!y.needMask), U = F ? "strict" : U, F && vs(y.tagName)) {
|
|
5206
5206
|
const D = e.cloneNode();
|
|
5207
5207
|
D.src = "", n.add(D, y);
|
|
5208
5208
|
}
|
|
@@ -5211,7 +5211,7 @@ function St(e, t) {
|
|
|
5211
5211
|
A && qt(A) && (y.isShadowHost = !0);
|
|
5212
5212
|
}
|
|
5213
5213
|
if ((y.type === ae.Document || y.type === ae.Element) && T) {
|
|
5214
|
-
m.headWhitespace && y.type === ae.Element && y.tagName === "head" && (
|
|
5214
|
+
m.headWhitespace && y.type === ae.Element && y.tagName === "head" && (E = !1);
|
|
5215
5215
|
const A = {
|
|
5216
5216
|
doc: i,
|
|
5217
5217
|
mirror: n,
|
|
@@ -5230,15 +5230,15 @@ function St(e, t) {
|
|
|
5230
5230
|
inlineImages: d,
|
|
5231
5231
|
inlineVideos: S,
|
|
5232
5232
|
recordCanvas: I,
|
|
5233
|
-
preserveWhiteSpace:
|
|
5233
|
+
preserveWhiteSpace: E,
|
|
5234
5234
|
onSerialize: V,
|
|
5235
|
-
onIframeLoad:
|
|
5235
|
+
onIframeLoad: C,
|
|
5236
5236
|
iframeLoadTimeout: X,
|
|
5237
5237
|
onStylesheetLoad: G,
|
|
5238
5238
|
stylesheetLoadTimeout: k,
|
|
5239
5239
|
keepIframeSrcFn: v,
|
|
5240
5240
|
cssCaptured: !1,
|
|
5241
|
-
privacySetting:
|
|
5241
|
+
privacySetting: U
|
|
5242
5242
|
};
|
|
5243
5243
|
if (!(y.type === ae.Element && y.tagName === "textarea" && y.attributes.value !== void 0)) {
|
|
5244
5244
|
y.type === ae.Element && y.attributes._cssText !== void 0 && typeof y.attributes._cssText == "string" && (A.cssCaptured = !0);
|
|
@@ -5259,7 +5259,7 @@ function St(e, t) {
|
|
|
5259
5259
|
e,
|
|
5260
5260
|
() => {
|
|
5261
5261
|
const A = e.contentDocument;
|
|
5262
|
-
if (A &&
|
|
5262
|
+
if (A && C) {
|
|
5263
5263
|
const D = St(A, {
|
|
5264
5264
|
doc: A,
|
|
5265
5265
|
mirror: n,
|
|
@@ -5278,16 +5278,16 @@ function St(e, t) {
|
|
|
5278
5278
|
inlineImages: d,
|
|
5279
5279
|
inlineVideos: S,
|
|
5280
5280
|
recordCanvas: I,
|
|
5281
|
-
preserveWhiteSpace:
|
|
5281
|
+
preserveWhiteSpace: E,
|
|
5282
5282
|
onSerialize: V,
|
|
5283
|
-
onIframeLoad:
|
|
5283
|
+
onIframeLoad: C,
|
|
5284
5284
|
iframeLoadTimeout: X,
|
|
5285
5285
|
onStylesheetLoad: G,
|
|
5286
5286
|
stylesheetLoadTimeout: k,
|
|
5287
5287
|
keepIframeSrcFn: v,
|
|
5288
5288
|
privacySetting: R
|
|
5289
5289
|
});
|
|
5290
|
-
D &&
|
|
5290
|
+
D && C(
|
|
5291
5291
|
e,
|
|
5292
5292
|
D
|
|
5293
5293
|
);
|
|
@@ -5316,9 +5316,9 @@ function St(e, t) {
|
|
|
5316
5316
|
inlineImages: d,
|
|
5317
5317
|
inlineVideos: S,
|
|
5318
5318
|
recordCanvas: I,
|
|
5319
|
-
preserveWhiteSpace:
|
|
5319
|
+
preserveWhiteSpace: E,
|
|
5320
5320
|
onSerialize: V,
|
|
5321
|
-
onIframeLoad:
|
|
5321
|
+
onIframeLoad: C,
|
|
5322
5322
|
iframeLoadTimeout: X,
|
|
5323
5323
|
onStylesheetLoad: G,
|
|
5324
5324
|
stylesheetLoadTimeout: k,
|
|
@@ -5353,7 +5353,7 @@ function Kp(e, t) {
|
|
|
5353
5353
|
preserveWhiteSpace: S,
|
|
5354
5354
|
onSerialize: I,
|
|
5355
5355
|
onIframeLoad: V,
|
|
5356
|
-
iframeLoadTimeout:
|
|
5356
|
+
iframeLoadTimeout: C,
|
|
5357
5357
|
onStylesheetLoad: X,
|
|
5358
5358
|
stylesheetLoadTimeout: G,
|
|
5359
5359
|
keepIframeSrcFn: k = () => !1,
|
|
@@ -5413,7 +5413,7 @@ function Kp(e, t) {
|
|
|
5413
5413
|
preserveWhiteSpace: S,
|
|
5414
5414
|
onSerialize: I,
|
|
5415
5415
|
onIframeLoad: V,
|
|
5416
|
-
iframeLoadTimeout:
|
|
5416
|
+
iframeLoadTimeout: C,
|
|
5417
5417
|
onStylesheetLoad: X,
|
|
5418
5418
|
stylesheetLoadTimeout: G,
|
|
5419
5419
|
keepIframeSrcFn: k,
|
|
@@ -5421,7 +5421,7 @@ function Kp(e, t) {
|
|
|
5421
5421
|
privacySetting: v
|
|
5422
5422
|
});
|
|
5423
5423
|
}
|
|
5424
|
-
function
|
|
5424
|
+
function Mp(e) {
|
|
5425
5425
|
if (e.__esModule) return e;
|
|
5426
5426
|
var t = e.default;
|
|
5427
5427
|
if (typeof t == "function") {
|
|
@@ -5440,17 +5440,17 @@ function Op(e) {
|
|
|
5440
5440
|
});
|
|
5441
5441
|
}), i;
|
|
5442
5442
|
}
|
|
5443
|
-
var Zr = { exports: {} },
|
|
5444
|
-
return { isColorSupported: !1, reset:
|
|
5443
|
+
var Zr = { exports: {} }, M = String, fa = function() {
|
|
5444
|
+
return { isColorSupported: !1, reset: M, bold: M, dim: M, italic: M, underline: M, inverse: M, hidden: M, strikethrough: M, black: M, red: M, green: M, yellow: M, blue: M, magenta: M, cyan: M, white: M, gray: M, bgBlack: M, bgRed: M, bgGreen: M, bgYellow: M, bgBlue: M, bgMagenta: M, bgCyan: M, bgWhite: M, blackBright: M, redBright: M, greenBright: M, yellowBright: M, blueBright: M, magentaBright: M, cyanBright: M, whiteBright: M, bgBlackBright: M, bgRedBright: M, bgGreenBright: M, bgYellowBright: M, bgBlueBright: M, bgMagentaBright: M, bgCyanBright: M, bgWhiteBright: M };
|
|
5445
5445
|
};
|
|
5446
5446
|
Zr.exports = fa();
|
|
5447
5447
|
Zr.exports.createColors = fa;
|
|
5448
|
-
var
|
|
5449
|
-
const
|
|
5448
|
+
var Op = Zr.exports;
|
|
5449
|
+
const Ep = {}, Hp = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
5450
5450
|
__proto__: null,
|
|
5451
|
-
default:
|
|
5452
|
-
}, Symbol.toStringTag, { value: "Module" })), Ne = /* @__PURE__ */
|
|
5453
|
-
let Io =
|
|
5451
|
+
default: Ep
|
|
5452
|
+
}, Symbol.toStringTag, { value: "Module" })), Ne = /* @__PURE__ */ Mp(Hp);
|
|
5453
|
+
let Io = Op, So = Ne, ws = class ya extends Error {
|
|
5454
5454
|
constructor(t, i, n, s, r, l) {
|
|
5455
5455
|
super(t), this.name = "CssSyntaxError", this.reason = t, r && (this.file = r), s && (this.source = s), l && (this.plugin = l), typeof i < "u" && typeof n < "u" && (typeof i == "number" ? (this.line = i, this.column = n) : (this.line = i.line, this.column = i.column, this.endLine = n.line, this.endColumn = n.column)), this.setMessage(), Error.captureStackTrace && Error.captureStackTrace(this, ya);
|
|
5456
5456
|
}
|
|
@@ -5474,9 +5474,9 @@ let Io = Ep, So = Ne, ws = class ya extends Error {
|
|
|
5474
5474
|
let d = 20, S = Math.max(0, this.column - d), I = Math.max(
|
|
5475
5475
|
this.column + d,
|
|
5476
5476
|
this.endColumn + d
|
|
5477
|
-
), V = u.slice(S, I),
|
|
5477
|
+
), V = u.slice(S, I), C = n(m.replace(/\d/g, " ")) + u.slice(0, Math.min(this.column - 1, d - 1)).replace(/[^\t]/g, " ");
|
|
5478
5478
|
return s(">") + n(m) + r(V) + `
|
|
5479
|
-
` +
|
|
5479
|
+
` + C + s("^");
|
|
5480
5480
|
}
|
|
5481
5481
|
let b = n(m.replace(/\d/g, " ")) + u.slice(0, this.column - 1).replace(/[^\t]/g, " ");
|
|
5482
5482
|
return s(">") + n(m) + r(u) + `
|
|
@@ -5515,7 +5515,7 @@ const Go = {
|
|
|
5515
5515
|
indent: " ",
|
|
5516
5516
|
semicolon: !1
|
|
5517
5517
|
};
|
|
5518
|
-
function
|
|
5518
|
+
function zp(e) {
|
|
5519
5519
|
return e[0].toUpperCase() + e.slice(1);
|
|
5520
5520
|
}
|
|
5521
5521
|
let xs = class {
|
|
@@ -5586,7 +5586,7 @@ let xs = class {
|
|
|
5586
5586
|
if (i === "before" || i === "after")
|
|
5587
5587
|
return this.beforeAfter(e, i);
|
|
5588
5588
|
{
|
|
5589
|
-
let l = "raw" +
|
|
5589
|
+
let l = "raw" + zp(i);
|
|
5590
5590
|
this[l] ? n = this[l](r, e) : r.walk((o) => {
|
|
5591
5591
|
if (n = o.raws[t], typeof n < "u") return !1;
|
|
5592
5592
|
});
|
|
@@ -5940,16 +5940,16 @@ let Ls = class {
|
|
|
5940
5940
|
return e.warn(t, n);
|
|
5941
5941
|
}
|
|
5942
5942
|
};
|
|
5943
|
-
var
|
|
5943
|
+
var Un = Ls;
|
|
5944
5944
|
Ls.default = Ls;
|
|
5945
|
-
let Ap =
|
|
5945
|
+
let Ap = Un, Js = class extends Ap {
|
|
5946
5946
|
constructor(e) {
|
|
5947
5947
|
super(e), this.type = "comment";
|
|
5948
5948
|
}
|
|
5949
5949
|
};
|
|
5950
|
-
var
|
|
5950
|
+
var Fn = Js;
|
|
5951
5951
|
Js.default = Js;
|
|
5952
|
-
let _p =
|
|
5952
|
+
let _p = Un, Ys = class extends _p {
|
|
5953
5953
|
get variable() {
|
|
5954
5954
|
return this.prop.startsWith("--") || this.prop[0] === "$";
|
|
5955
5955
|
}
|
|
@@ -5959,14 +5959,14 @@ let _p = Fn, Ys = class extends _p {
|
|
|
5959
5959
|
};
|
|
5960
5960
|
var Kn = Ys;
|
|
5961
5961
|
Ys.default = Ys;
|
|
5962
|
-
let Za =
|
|
5963
|
-
function Ca(e) {
|
|
5964
|
-
return e.map((t) => (t.nodes && (t.nodes = Ca(t.nodes)), delete t.source, t));
|
|
5965
|
-
}
|
|
5962
|
+
let Za = Fn, Ia = Kn, $p = Un, { isClean: Sa, my: Ga } = yi, Sr, Va, Xa, Gr;
|
|
5966
5963
|
function Wa(e) {
|
|
5964
|
+
return e.map((t) => (t.nodes && (t.nodes = Wa(t.nodes)), delete t.source, t));
|
|
5965
|
+
}
|
|
5966
|
+
function Ca(e) {
|
|
5967
5967
|
if (e[Sa] = !1, e.proxyOf.nodes)
|
|
5968
5968
|
for (let t of e.proxyOf.nodes)
|
|
5969
|
-
|
|
5969
|
+
Ca(t);
|
|
5970
5970
|
}
|
|
5971
5971
|
let De = class Ra extends $p {
|
|
5972
5972
|
get first() {
|
|
@@ -6044,7 +6044,7 @@ let De = class Ra extends $p {
|
|
|
6044
6044
|
}
|
|
6045
6045
|
normalize(t, i) {
|
|
6046
6046
|
if (typeof t == "string")
|
|
6047
|
-
t =
|
|
6047
|
+
t = Wa(Va(t).nodes);
|
|
6048
6048
|
else if (typeof t > "u")
|
|
6049
6049
|
t = [];
|
|
6050
6050
|
else if (Array.isArray(t)) {
|
|
@@ -6069,7 +6069,7 @@ let De = class Ra extends $p {
|
|
|
6069
6069
|
t = [new Za(t)];
|
|
6070
6070
|
else
|
|
6071
6071
|
throw new Error("Unknown node type in node creation");
|
|
6072
|
-
return t.map((n) => (n[Ga] || Ra.rebuild(n), n = n.proxyOf, n.parent && n.parent.removeChild(n), n[Sa] &&
|
|
6072
|
+
return t.map((n) => (n[Ga] || Ra.rebuild(n), n = n.proxyOf, n.parent && n.parent.removeChild(n), n[Sa] && Ca(n), n.raws || (n.raws = {}), typeof n.raws.before > "u" && i && typeof i.raws.before < "u" && (n.raws.before = i.raws.before.replace(/\S/g, "")), n.parent = this.proxyOf, n));
|
|
6073
6073
|
}
|
|
6074
6074
|
prepend(...t) {
|
|
6075
6075
|
t = t.reverse();
|
|
@@ -6217,7 +6217,7 @@ let { existsSync: nm, readFileSync: sm } = Ne, { dirname: ns, join: rm } = Ne, {
|
|
|
6217
6217
|
function om(e) {
|
|
6218
6218
|
return Buffer ? Buffer.from(e, "base64").toString() : window.atob(e);
|
|
6219
6219
|
}
|
|
6220
|
-
let
|
|
6220
|
+
let Us = class {
|
|
6221
6221
|
constructor(e, t) {
|
|
6222
6222
|
if (t.map === !1) return;
|
|
6223
6223
|
this.loadAnnotation(e), this.inline = this.startWith(this.annotation, "data:");
|
|
@@ -6295,9 +6295,9 @@ let Fs = class {
|
|
|
6295
6295
|
return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);
|
|
6296
6296
|
}
|
|
6297
6297
|
};
|
|
6298
|
-
var xa =
|
|
6299
|
-
|
|
6300
|
-
let { nanoid: lm } = im, { isAbsolute:
|
|
6298
|
+
var xa = Us;
|
|
6299
|
+
Us.default = Us;
|
|
6300
|
+
let { nanoid: lm } = im, { isAbsolute: Fs, resolve: Ks } = Ne, { SourceMapConsumer: am, SourceMapGenerator: cm } = Ne, { fileURLToPath: Wo, pathToFileURL: ki } = Ne, Co = Ir, um = xa, ss = Ne, rs = Symbol("lineToIndexCache"), dm = !!(am && cm), Ro = !!(Ks && Fs);
|
|
6301
6301
|
function ko(e) {
|
|
6302
6302
|
if (e[rs]) return e[rs];
|
|
6303
6303
|
let t = e.css.split(`
|
|
@@ -6313,7 +6313,7 @@ let Gn = class {
|
|
|
6313
6313
|
constructor(e, t = {}) {
|
|
6314
6314
|
if (e === null || typeof e > "u" || typeof e == "object" && !e.toString)
|
|
6315
6315
|
throw new Error(`PostCSS received ${e} instead of CSS string`);
|
|
6316
|
-
if (this.css = e.toString(), this.css[0] === "\uFEFF" || this.css[0] === "" ? (this.hasBOM = !0, this.css = this.css.slice(1)) : this.hasBOM = !1, this.document = this.css, t.document && (this.document = t.document.toString()), t.from && (!Ro || /^\w+:\/\//.test(t.from) ||
|
|
6316
|
+
if (this.css = e.toString(), this.css[0] === "\uFEFF" || this.css[0] === "" ? (this.hasBOM = !0, this.css = this.css.slice(1)) : this.hasBOM = !1, this.document = this.css, t.document && (this.document = t.document.toString()), t.from && (!Ro || /^\w+:\/\//.test(t.from) || Fs(t.from) ? this.file = t.from : this.file = Ks(t.from)), Ro && dm) {
|
|
6317
6317
|
let i = new um(this.css, t);
|
|
6318
6318
|
if (i.text) {
|
|
6319
6319
|
this.map = i;
|
|
@@ -6347,14 +6347,14 @@ let Gn = class {
|
|
|
6347
6347
|
t = u.line, i = u.col;
|
|
6348
6348
|
}
|
|
6349
6349
|
let c = this.origin(t, i, r, s);
|
|
6350
|
-
return c ? a = new
|
|
6350
|
+
return c ? a = new Co(
|
|
6351
6351
|
e,
|
|
6352
6352
|
c.endLine === void 0 ? c.line : { column: c.column, line: c.line },
|
|
6353
6353
|
c.endLine === void 0 ? c.column : { column: c.endColumn, line: c.endLine },
|
|
6354
6354
|
c.source,
|
|
6355
6355
|
c.file,
|
|
6356
6356
|
n.plugin
|
|
6357
|
-
) : a = new
|
|
6357
|
+
) : a = new Co(
|
|
6358
6358
|
e,
|
|
6359
6359
|
r === void 0 ? t : { column: i, line: t },
|
|
6360
6360
|
r === void 0 ? i : { column: s, line: r },
|
|
@@ -6397,7 +6397,7 @@ let Gn = class {
|
|
|
6397
6397
|
let l;
|
|
6398
6398
|
typeof i == "number" && (l = s.originalPositionFor({ column: n, line: i }));
|
|
6399
6399
|
let o;
|
|
6400
|
-
|
|
6400
|
+
Fs(r.source) ? o = ki(r.source) : o = new URL(
|
|
6401
6401
|
r.source,
|
|
6402
6402
|
this.map.consumer().sourceRoot || ki(this.map.mapFile)
|
|
6403
6403
|
);
|
|
@@ -6409,8 +6409,8 @@ let Gn = class {
|
|
|
6409
6409
|
url: o.toString()
|
|
6410
6410
|
};
|
|
6411
6411
|
if (o.protocol === "file:")
|
|
6412
|
-
if (
|
|
6413
|
-
a.file =
|
|
6412
|
+
if (Wo)
|
|
6413
|
+
a.file = Wo(o);
|
|
6414
6414
|
else
|
|
6415
6415
|
throw new Error("file: protocol is not available in this PostCSS build");
|
|
6416
6416
|
let c = s.sourceContentFor(r.source);
|
|
@@ -6423,7 +6423,7 @@ let Gn = class {
|
|
|
6423
6423
|
return this.map && (e.map = Y({}, this.map), e.map.consumerCache && (e.map.consumerCache = void 0)), e;
|
|
6424
6424
|
}
|
|
6425
6425
|
};
|
|
6426
|
-
var
|
|
6426
|
+
var Mn = Gn;
|
|
6427
6427
|
Gn.default = Gn;
|
|
6428
6428
|
ss && ss.registerInput && ss.registerInput(Gn);
|
|
6429
6429
|
let Ta = ct, Na, La, kt = class extends Ta {
|
|
@@ -6488,13 +6488,13 @@ let Ya = ct, hm = Ja, Vn = class extends Ya {
|
|
|
6488
6488
|
super(e), this.type = "rule", this.nodes || (this.nodes = []);
|
|
6489
6489
|
}
|
|
6490
6490
|
};
|
|
6491
|
-
var
|
|
6491
|
+
var Wr = Vn;
|
|
6492
6492
|
Vn.default = Vn;
|
|
6493
6493
|
Ya.registerRule(Vn);
|
|
6494
|
-
let pm = Vr, mm =
|
|
6494
|
+
let pm = Vr, mm = Fn, bm = Kn, fm = Mn, ym = xa, gm = gi, Zm = Wr;
|
|
6495
6495
|
function ci(e, t) {
|
|
6496
6496
|
if (Array.isArray(e)) return e.map((r) => ci(r));
|
|
6497
|
-
let i = e, { inputs: n } = i, s =
|
|
6497
|
+
let i = e, { inputs: n } = i, s = Ct(i, ["inputs"]);
|
|
6498
6498
|
if (n) {
|
|
6499
6499
|
t = [];
|
|
6500
6500
|
for (let r of n) {
|
|
@@ -6505,7 +6505,7 @@ function ci(e, t) {
|
|
|
6505
6505
|
}
|
|
6506
6506
|
}
|
|
6507
6507
|
if (s.nodes && (s.nodes = e.nodes.map((r) => ci(r, t))), s.source) {
|
|
6508
|
-
let r = s.source, { inputId: l } = r, o =
|
|
6508
|
+
let r = s.source, { inputId: l } = r, o = Ct(r, ["inputId"]);
|
|
6509
6509
|
s.source = o, l != null && (s.source.input = t[l]);
|
|
6510
6510
|
}
|
|
6511
6511
|
if (s.type === "root")
|
|
@@ -6522,7 +6522,7 @@ function ci(e, t) {
|
|
|
6522
6522
|
}
|
|
6523
6523
|
var Im = ci;
|
|
6524
6524
|
ci.default = ci;
|
|
6525
|
-
let { dirname: en, relative:
|
|
6525
|
+
let { dirname: en, relative: Ua, resolve: Fa, sep: Ka } = Ne, { SourceMapConsumer: Ma, SourceMapGenerator: tn } = Ne, { pathToFileURL: vo } = Ne, Sm = Mn, Gm = !!(Ma && tn), Vm = !!(en && Fa && Ua && Ka), Xm = class {
|
|
6526
6526
|
constructor(e, t, i, n) {
|
|
6527
6527
|
this.stringify = e, this.mapOpts = i.map || {}, this.root = t, this.opts = i, this.css = n, this.originalCSS = n, this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute, this.memoizedFileURLs = /* @__PURE__ */ new Map(), this.memoizedPaths = /* @__PURE__ */ new Map(), this.memoizedURLs = /* @__PURE__ */ new Map();
|
|
6528
6528
|
}
|
|
@@ -6538,7 +6538,7 @@ let { dirname: en, relative: Fa, resolve: Ua, sep: Ka } = Ne, { SourceMapConsume
|
|
|
6538
6538
|
applyPrevMaps() {
|
|
6539
6539
|
for (let e of this.previous()) {
|
|
6540
6540
|
let t = this.toUrl(this.path(e.file)), i = e.root || en(e.file), n;
|
|
6541
|
-
this.mapOpts.sourcesContent === !1 ? (n = new
|
|
6541
|
+
this.mapOpts.sourcesContent === !1 ? (n = new Ma(e.text), n.sourcesContent && (n.sourcesContent = null)) : n = e.consumer(), this.map.applySourceMap(n, t, this.toUrl(this.path(i)));
|
|
6542
6542
|
}
|
|
6543
6543
|
}
|
|
6544
6544
|
clearAnnotation() {
|
|
@@ -6619,8 +6619,8 @@ let { dirname: en, relative: Fa, resolve: Ua, sep: Ka } = Ne, { SourceMapConsume
|
|
|
6619
6619
|
let t = this.memoizedPaths.get(e);
|
|
6620
6620
|
if (t) return t;
|
|
6621
6621
|
let i = this.opts.to ? en(this.opts.to) : ".";
|
|
6622
|
-
typeof this.mapOpts.annotation == "string" && (i = en(
|
|
6623
|
-
let n =
|
|
6622
|
+
typeof this.mapOpts.annotation == "string" && (i = en(Fa(i, this.mapOpts.annotation)));
|
|
6623
|
+
let n = Ua(i, e);
|
|
6624
6624
|
return this.memoizedPaths.set(e, n), n;
|
|
6625
6625
|
}
|
|
6626
6626
|
previous() {
|
|
@@ -6681,14 +6681,14 @@ let { dirname: en, relative: Fa, resolve: Ua, sep: Ka } = Ne, { SourceMapConsume
|
|
|
6681
6681
|
return this.memoizedURLs.set(e, i), i;
|
|
6682
6682
|
}
|
|
6683
6683
|
};
|
|
6684
|
-
var
|
|
6685
|
-
const os = 39, wo = 34, vi = 92, xo = 47, wi = 10,
|
|
6684
|
+
var Oa = Xm;
|
|
6685
|
+
const os = 39, wo = 34, vi = 92, xo = 47, wi = 10, Mt = 32, xi = 12, Ti = 9, Ni = 13, Wm = 91, Cm = 93, Rm = 40, km = 41, vm = 123, wm = 125, xm = 59, Tm = 42, Nm = 58, Lm = 64, Li = /[\t\n\f\r "#'()/;[\\\]{}]/g, Ji = /[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g, Jm = /.[\r\n"'(/\\]/, To = /[\da-f]/i;
|
|
6686
6686
|
var Ym = function(e, t = {}) {
|
|
6687
6687
|
let i = e.css.valueOf(), n = t.ignoreErrors, s, r, l, o, a, c, u, h, p, m, b = i.length, d = 0, S = [], I = [];
|
|
6688
6688
|
function V() {
|
|
6689
6689
|
return d;
|
|
6690
6690
|
}
|
|
6691
|
-
function
|
|
6691
|
+
function C(v) {
|
|
6692
6692
|
throw e.error("Unclosed " + v, d);
|
|
6693
6693
|
}
|
|
6694
6694
|
function X() {
|
|
@@ -6700,19 +6700,19 @@ var Ym = function(e, t = {}) {
|
|
|
6700
6700
|
let w = v ? v.ignoreUnclosed : !1;
|
|
6701
6701
|
switch (s = i.charCodeAt(d), s) {
|
|
6702
6702
|
case wi:
|
|
6703
|
-
case
|
|
6703
|
+
case Mt:
|
|
6704
6704
|
case Ti:
|
|
6705
6705
|
case Ni:
|
|
6706
6706
|
case xi: {
|
|
6707
6707
|
o = d;
|
|
6708
6708
|
do
|
|
6709
6709
|
o += 1, s = i.charCodeAt(o);
|
|
6710
|
-
while (s ===
|
|
6710
|
+
while (s === Mt || s === wi || s === Ti || s === Ni || s === xi);
|
|
6711
6711
|
c = ["space", i.slice(d, o)], d = o - 1;
|
|
6712
6712
|
break;
|
|
6713
6713
|
}
|
|
6714
|
-
case Cm:
|
|
6715
6714
|
case Wm:
|
|
6715
|
+
case Cm:
|
|
6716
6716
|
case vm:
|
|
6717
6717
|
case wm:
|
|
6718
6718
|
case Nm:
|
|
@@ -6723,7 +6723,7 @@ var Ym = function(e, t = {}) {
|
|
|
6723
6723
|
break;
|
|
6724
6724
|
}
|
|
6725
6725
|
case Rm: {
|
|
6726
|
-
if (m = S.length ? S.pop()[1] : "", p = i.charCodeAt(d + 1), m === "url" && p !== os && p !== wo && p !==
|
|
6726
|
+
if (m = S.length ? S.pop()[1] : "", p = i.charCodeAt(d + 1), m === "url" && p !== os && p !== wo && p !== Mt && p !== wi && p !== Ti && p !== xi && p !== Ni) {
|
|
6727
6727
|
o = d;
|
|
6728
6728
|
do {
|
|
6729
6729
|
if (u = !1, o = i.indexOf(")", o + 1), o === -1)
|
|
@@ -6731,7 +6731,7 @@ var Ym = function(e, t = {}) {
|
|
|
6731
6731
|
o = d;
|
|
6732
6732
|
break;
|
|
6733
6733
|
} else
|
|
6734
|
-
|
|
6734
|
+
C("bracket");
|
|
6735
6735
|
for (h = o; i.charCodeAt(h - 1) === vi; )
|
|
6736
6736
|
h -= 1, u = !u;
|
|
6737
6737
|
} while (u);
|
|
@@ -6749,7 +6749,7 @@ var Ym = function(e, t = {}) {
|
|
|
6749
6749
|
o = d + 1;
|
|
6750
6750
|
break;
|
|
6751
6751
|
} else
|
|
6752
|
-
|
|
6752
|
+
C("string");
|
|
6753
6753
|
for (h = o; i.charCodeAt(h - 1) === vi; )
|
|
6754
6754
|
h -= 1, u = !u;
|
|
6755
6755
|
} while (u);
|
|
@@ -6763,16 +6763,16 @@ var Ym = function(e, t = {}) {
|
|
|
6763
6763
|
case vi: {
|
|
6764
6764
|
for (o = d, l = !0; i.charCodeAt(o + 1) === vi; )
|
|
6765
6765
|
o += 1, l = !l;
|
|
6766
|
-
if (s = i.charCodeAt(o + 1), l && s !== xo && s !==
|
|
6766
|
+
if (s = i.charCodeAt(o + 1), l && s !== xo && s !== Mt && s !== wi && s !== Ti && s !== Ni && s !== xi && (o += 1, To.test(i.charAt(o)))) {
|
|
6767
6767
|
for (; To.test(i.charAt(o + 1)); )
|
|
6768
6768
|
o += 1;
|
|
6769
|
-
i.charCodeAt(o + 1) ===
|
|
6769
|
+
i.charCodeAt(o + 1) === Mt && (o += 1);
|
|
6770
6770
|
}
|
|
6771
6771
|
c = ["word", i.slice(d, o + 1), d, o], d = o;
|
|
6772
6772
|
break;
|
|
6773
6773
|
}
|
|
6774
6774
|
default: {
|
|
6775
|
-
s === xo && i.charCodeAt(d + 1) === Tm ? (o = i.indexOf("*/", d + 2) + 1, o === 0 && (n || w ? o = i.length :
|
|
6775
|
+
s === xo && i.charCodeAt(d + 1) === Tm ? (o = i.indexOf("*/", d + 2) + 1, o === 0 && (n || w ? o = i.length : C("comment")), c = ["comment", i.slice(d, o + 1), d, o], d = o) : (Ji.lastIndex = d + 1, Ji.test(i), Ji.lastIndex === 0 ? o = i.length - 1 : o = Ji.lastIndex - 2, c = ["word", i.slice(d, o + 1), d, o], S.push(c), d = o);
|
|
6776
6776
|
break;
|
|
6777
6777
|
}
|
|
6778
6778
|
}
|
|
@@ -6788,23 +6788,23 @@ var Ym = function(e, t = {}) {
|
|
|
6788
6788
|
position: V
|
|
6789
6789
|
};
|
|
6790
6790
|
};
|
|
6791
|
-
let
|
|
6791
|
+
let Um = Vr, Fm = Fn, Km = Kn, Mm = gi, No = Wr, Om = Ym;
|
|
6792
6792
|
const Lo = {
|
|
6793
6793
|
empty: !0,
|
|
6794
6794
|
space: !0
|
|
6795
6795
|
};
|
|
6796
|
-
function
|
|
6796
|
+
function Em(e) {
|
|
6797
6797
|
for (let t = e.length - 1; t >= 0; t--) {
|
|
6798
6798
|
let i = e[t], n = i[3] || i[2];
|
|
6799
6799
|
if (n) return n;
|
|
6800
6800
|
}
|
|
6801
6801
|
}
|
|
6802
|
-
let
|
|
6802
|
+
let Hm = class {
|
|
6803
6803
|
constructor(e) {
|
|
6804
|
-
this.input = e, this.root = new
|
|
6804
|
+
this.input = e, this.root = new Mm(), this.current = this.root, this.spaces = "", this.semicolon = !1, this.createTokenizer(), this.root.source = { input: e, start: { column: 1, line: 1, offset: 0 } };
|
|
6805
6805
|
}
|
|
6806
6806
|
atrule(e) {
|
|
6807
|
-
let t = new
|
|
6807
|
+
let t = new Um();
|
|
6808
6808
|
t.name = e[1].slice(1), t.name === "" && this.unnamedAtrule(t, e), this.init(t, e[2]);
|
|
6809
6809
|
let i, n, s, r = !1, l = !1, o = [], a = [];
|
|
6810
6810
|
for (; !this.tokenizer.endOfFile(); ) {
|
|
@@ -6861,7 +6861,7 @@ let zm = class {
|
|
|
6861
6861
|
return !1;
|
|
6862
6862
|
}
|
|
6863
6863
|
comment(e) {
|
|
6864
|
-
let t = new
|
|
6864
|
+
let t = new Fm();
|
|
6865
6865
|
this.init(t, e[2]), t.source.end = this.getPosition(e[3] || e[2]), t.source.end.offset++;
|
|
6866
6866
|
let i = e[1].slice(2, -2);
|
|
6867
6867
|
if (/^\s*$/.test(i))
|
|
@@ -6872,14 +6872,14 @@ let zm = class {
|
|
|
6872
6872
|
}
|
|
6873
6873
|
}
|
|
6874
6874
|
createTokenizer() {
|
|
6875
|
-
this.tokenizer =
|
|
6875
|
+
this.tokenizer = Om(this.input);
|
|
6876
6876
|
}
|
|
6877
6877
|
decl(e, t) {
|
|
6878
6878
|
let i = new Km();
|
|
6879
6879
|
this.init(i, e[0][2]);
|
|
6880
6880
|
let n = e[e.length - 1];
|
|
6881
6881
|
for (n[0] === ";" && (this.semicolon = !0, e.pop()), i.source.end = this.getPosition(
|
|
6882
|
-
n[3] || n[2] ||
|
|
6882
|
+
n[3] || n[2] || Em(e)
|
|
6883
6883
|
), i.source.end.offset++; e[0][0] !== "word"; )
|
|
6884
6884
|
e.length === 1 && this.unknownWord(e), i.raws.before += e.shift()[1];
|
|
6885
6885
|
for (i.source.start = this.getPosition(e[0][2]), i.prop = ""; e.length; ) {
|
|
@@ -7095,8 +7095,8 @@ let zm = class {
|
|
|
7095
7095
|
);
|
|
7096
7096
|
}
|
|
7097
7097
|
};
|
|
7098
|
-
var
|
|
7099
|
-
let Pm = ct, Bm =
|
|
7098
|
+
var zm = Hm;
|
|
7099
|
+
let Pm = ct, Bm = Mn, Dm = zm;
|
|
7100
7100
|
function Xn(e, t) {
|
|
7101
7101
|
let i = new Bm(e, t), n = new Dm(i);
|
|
7102
7102
|
try {
|
|
@@ -7109,10 +7109,10 @@ You tried to parse Less with the standard CSS parser; try again with the postcss
|
|
|
7109
7109
|
}
|
|
7110
7110
|
return n.root;
|
|
7111
7111
|
}
|
|
7112
|
-
var
|
|
7112
|
+
var Cr = Xn;
|
|
7113
7113
|
Xn.default = Xn;
|
|
7114
7114
|
Pm.registerParse(Xn);
|
|
7115
|
-
let
|
|
7115
|
+
let Ms = class {
|
|
7116
7116
|
constructor(e, t = {}) {
|
|
7117
7117
|
if (this.type = "warning", this.text = e, t.node && t.node.source) {
|
|
7118
7118
|
let i = t.node.rangeBy(t);
|
|
@@ -7128,9 +7128,9 @@ let Os = class {
|
|
|
7128
7128
|
}).message : this.plugin ? this.plugin + ": " + this.text : this.text;
|
|
7129
7129
|
}
|
|
7130
7130
|
};
|
|
7131
|
-
var
|
|
7132
|
-
|
|
7133
|
-
let jm =
|
|
7131
|
+
var Ea = Ms;
|
|
7132
|
+
Ms.default = Ms;
|
|
7133
|
+
let jm = Ea, Os = class {
|
|
7134
7134
|
get content() {
|
|
7135
7135
|
return this.css;
|
|
7136
7136
|
}
|
|
@@ -7149,13 +7149,13 @@ let jm = Ma, Es = class {
|
|
|
7149
7149
|
return this.messages.filter((e) => e.type === "warning");
|
|
7150
7150
|
}
|
|
7151
7151
|
};
|
|
7152
|
-
var Rr =
|
|
7153
|
-
|
|
7152
|
+
var Rr = Os;
|
|
7153
|
+
Os.default = Os;
|
|
7154
7154
|
let Jo = {};
|
|
7155
|
-
var
|
|
7155
|
+
var Ha = function(e) {
|
|
7156
7156
|
Jo[e] || (Jo[e] = !0, typeof console < "u" && console.warn && console.warn(e));
|
|
7157
7157
|
};
|
|
7158
|
-
let Qm = ct, Am = Xr, _m =
|
|
7158
|
+
let Qm = ct, Am = Xr, _m = Oa, $m = Cr, Yo = Rr, qm = gi, eb = Yn, { isClean: Ye, my: tb } = yi, ib = Ha;
|
|
7159
7159
|
const nb = {
|
|
7160
7160
|
atrule: "AtRule",
|
|
7161
7161
|
comment: "Comment",
|
|
@@ -7185,10 +7185,10 @@ const nb = {
|
|
|
7185
7185
|
postcssPlugin: !0,
|
|
7186
7186
|
prepare: !0
|
|
7187
7187
|
}, vt = 0;
|
|
7188
|
-
function
|
|
7188
|
+
function Ot(e) {
|
|
7189
7189
|
return typeof e == "object" && typeof e.then == "function";
|
|
7190
7190
|
}
|
|
7191
|
-
function
|
|
7191
|
+
function za(e) {
|
|
7192
7192
|
let t = !1, i = nb[e.type];
|
|
7193
7193
|
return e.type === "decl" ? t = e.prop.toLowerCase() : e.type === "atrule" && (t = e.name.toLowerCase()), t && e.append ? [
|
|
7194
7194
|
i,
|
|
@@ -7198,9 +7198,9 @@ function Ha(e) {
|
|
|
7198
7198
|
i + "Exit-" + t
|
|
7199
7199
|
] : t ? [i, i + "-" + t, i + "Exit", i + "Exit-" + t] : e.append ? [i, vt, i + "Exit"] : [i, i + "Exit"];
|
|
7200
7200
|
}
|
|
7201
|
-
function
|
|
7201
|
+
function Uo(e) {
|
|
7202
7202
|
let t;
|
|
7203
|
-
return e.type === "document" ? t = ["Document", vt, "DocumentExit"] : e.type === "root" ? t = ["Root", vt, "RootExit"] : t =
|
|
7203
|
+
return e.type === "document" ? t = ["Document", vt, "DocumentExit"] : e.type === "root" ? t = ["Root", vt, "RootExit"] : t = za(e), {
|
|
7204
7204
|
eventIndex: 0,
|
|
7205
7205
|
events: t,
|
|
7206
7206
|
iterator: 0,
|
|
@@ -7209,10 +7209,10 @@ function Fo(e) {
|
|
|
7209
7209
|
visitors: []
|
|
7210
7210
|
};
|
|
7211
7211
|
}
|
|
7212
|
-
function
|
|
7213
|
-
return e[Ye] = !1, e.nodes && e.nodes.forEach((t) =>
|
|
7212
|
+
function Es(e) {
|
|
7213
|
+
return e[Ye] = !1, e.nodes && e.nodes.forEach((t) => Es(t)), e;
|
|
7214
7214
|
}
|
|
7215
|
-
let
|
|
7215
|
+
let Hs = {}, wt = class Pa {
|
|
7216
7216
|
get content() {
|
|
7217
7217
|
return this.stringify().content;
|
|
7218
7218
|
}
|
|
@@ -7241,9 +7241,9 @@ let zs = {}, wt = class Pa {
|
|
|
7241
7241
|
this.stringified = !1, this.processed = !1;
|
|
7242
7242
|
let s;
|
|
7243
7243
|
if (typeof i == "object" && i !== null && (i.type === "root" || i.type === "document"))
|
|
7244
|
-
s =
|
|
7244
|
+
s = Es(i);
|
|
7245
7245
|
else if (i instanceof Pa || i instanceof Yo)
|
|
7246
|
-
s =
|
|
7246
|
+
s = Es(i.root), i.map && (typeof n.map > "u" && (n.map = {}), n.map.inline || (n.map.inline = !1), n.map.prev = i.map);
|
|
7247
7247
|
else {
|
|
7248
7248
|
let r = $m;
|
|
7249
7249
|
n.syntax && (r = n.syntax.parse), n.parser && (r = n.parser), r.parse && (r = r.parse);
|
|
@@ -7254,7 +7254,7 @@ let zs = {}, wt = class Pa {
|
|
|
7254
7254
|
}
|
|
7255
7255
|
s && !s[tb] && Qm.rebuild(s);
|
|
7256
7256
|
}
|
|
7257
|
-
this.result = new Yo(t, s, n), this.helpers = Se(Y({},
|
|
7257
|
+
this.result = new Yo(t, s, n), this.helpers = Se(Y({}, Hs), { postcss: Hs, result: this.result }), this.plugins = this.processor.plugins.map((r) => typeof r == "object" && r.prepare ? Y(Y({}, r), r.prepare(this.result)) : r);
|
|
7258
7258
|
}
|
|
7259
7259
|
async() {
|
|
7260
7260
|
return this.error ? Promise.reject(this.error) : this.processed ? Promise.resolve(this.result) : (this.processing || (this.processing = this.runAsync()), this.processing);
|
|
@@ -7313,7 +7313,7 @@ let zs = {}, wt = class Pa {
|
|
|
7313
7313
|
this.plugin = 0;
|
|
7314
7314
|
for (let t = 0; t < this.plugins.length; t++) {
|
|
7315
7315
|
let i = this.plugins[t], n = this.runOnRoot(i);
|
|
7316
|
-
if (
|
|
7316
|
+
if (Ot(n))
|
|
7317
7317
|
try {
|
|
7318
7318
|
yield n;
|
|
7319
7319
|
} catch (s) {
|
|
@@ -7324,10 +7324,10 @@ let zs = {}, wt = class Pa {
|
|
|
7324
7324
|
let t = this.result.root;
|
|
7325
7325
|
for (; !t[Ye]; ) {
|
|
7326
7326
|
t[Ye] = !0;
|
|
7327
|
-
let i = [
|
|
7327
|
+
let i = [Uo(t)];
|
|
7328
7328
|
for (; i.length > 0; ) {
|
|
7329
7329
|
let n = this.visitTick(i);
|
|
7330
|
-
if (
|
|
7330
|
+
if (Ot(n))
|
|
7331
7331
|
try {
|
|
7332
7332
|
yield n;
|
|
7333
7333
|
} catch (s) {
|
|
@@ -7363,7 +7363,7 @@ let zs = {}, wt = class Pa {
|
|
|
7363
7363
|
let i = this.result.root.nodes.map(
|
|
7364
7364
|
(n) => t.Once(n, this.helpers)
|
|
7365
7365
|
);
|
|
7366
|
-
return
|
|
7366
|
+
return Ot(i[0]) ? Promise.all(i) : i;
|
|
7367
7367
|
}
|
|
7368
7368
|
return t.Once(this.result.root, this.helpers);
|
|
7369
7369
|
} else if (typeof t == "function")
|
|
@@ -7388,7 +7388,7 @@ let zs = {}, wt = class Pa {
|
|
|
7388
7388
|
throw this.getAsyncError();
|
|
7389
7389
|
for (let t of this.plugins) {
|
|
7390
7390
|
let i = this.runOnRoot(t);
|
|
7391
|
-
if (
|
|
7391
|
+
if (Ot(i))
|
|
7392
7392
|
throw this.getAsyncError();
|
|
7393
7393
|
}
|
|
7394
7394
|
if (this.prepareVisitors(), this.hasListener) {
|
|
@@ -7423,7 +7423,7 @@ let zs = {}, wt = class Pa {
|
|
|
7423
7423
|
}
|
|
7424
7424
|
if (i.type !== "root" && i.type !== "document" && !i.parent)
|
|
7425
7425
|
return !0;
|
|
7426
|
-
if (
|
|
7426
|
+
if (Ot(r))
|
|
7427
7427
|
throw this.getAsyncError();
|
|
7428
7428
|
}
|
|
7429
7429
|
}
|
|
@@ -7446,7 +7446,7 @@ let zs = {}, wt = class Pa {
|
|
|
7446
7446
|
let l = i.iterator, o;
|
|
7447
7447
|
for (; o = n.nodes[n.indexes[l]]; )
|
|
7448
7448
|
if (n.indexes[l] += 1, !o[Ye]) {
|
|
7449
|
-
o[Ye] = !0, t.push(
|
|
7449
|
+
o[Ye] = !0, t.push(Uo(o));
|
|
7450
7450
|
return;
|
|
7451
7451
|
}
|
|
7452
7452
|
i.iterator = 0, delete n.indexes[l];
|
|
@@ -7466,7 +7466,7 @@ let zs = {}, wt = class Pa {
|
|
|
7466
7466
|
}
|
|
7467
7467
|
walkSync(t) {
|
|
7468
7468
|
t[Ye] = !0;
|
|
7469
|
-
let i =
|
|
7469
|
+
let i = za(t);
|
|
7470
7470
|
for (let n of i)
|
|
7471
7471
|
if (n === vt)
|
|
7472
7472
|
t.nodes && t.each((s) => {
|
|
@@ -7483,15 +7483,15 @@ let zs = {}, wt = class Pa {
|
|
|
7483
7483
|
}
|
|
7484
7484
|
};
|
|
7485
7485
|
wt.registerPostcss = (e) => {
|
|
7486
|
-
|
|
7486
|
+
Hs = e;
|
|
7487
7487
|
};
|
|
7488
7488
|
var Ba = wt;
|
|
7489
7489
|
wt.default = wt;
|
|
7490
7490
|
qm.registerLazyResult(wt);
|
|
7491
7491
|
Am.registerLazyResult(wt);
|
|
7492
|
-
let ob =
|
|
7492
|
+
let ob = Oa, lb = Cr;
|
|
7493
7493
|
const ab = Rr;
|
|
7494
|
-
let cb = Yn, ub =
|
|
7494
|
+
let cb = Yn, ub = Ha, zs = class {
|
|
7495
7495
|
get content() {
|
|
7496
7496
|
return this.result.css;
|
|
7497
7497
|
}
|
|
@@ -7568,8 +7568,8 @@ let cb = Yn, ub = za, Hs = class {
|
|
|
7568
7568
|
return [];
|
|
7569
7569
|
}
|
|
7570
7570
|
};
|
|
7571
|
-
var db =
|
|
7572
|
-
|
|
7571
|
+
var db = zs;
|
|
7572
|
+
zs.default = zs;
|
|
7573
7573
|
let hb = Xr, pb = Ba, mb = db, bb = gi, ui = class {
|
|
7574
7574
|
constructor(e = []) {
|
|
7575
7575
|
this.version = "8.5.6", this.plugins = this.normalize(e);
|
|
@@ -7603,7 +7603,7 @@ var fb = ui;
|
|
|
7603
7603
|
ui.default = ui;
|
|
7604
7604
|
bb.registerProcessor(ui);
|
|
7605
7605
|
hb.registerProcessor(ui);
|
|
7606
|
-
let Da = Vr, ja =
|
|
7606
|
+
let Da = Vr, ja = Fn, yb = ct, gb = Ir, Qa = Kn, Aa = Xr, Zb = Im, Ib = Mn, Sb = Ba, Gb = Ja, Vb = Un, Xb = Cr, kr = fb, Wb = Rr, _a = gi, $a = Wr, Cb = Yn, Rb = Ea;
|
|
7607
7607
|
function q(...e) {
|
|
7608
7608
|
return e.length === 1 && Array.isArray(e[0]) && (e = e[0]), new kr(e);
|
|
7609
7609
|
}
|
|
@@ -7629,7 +7629,7 @@ https://www.w3ctech.com/topic/2226`
|
|
|
7629
7629
|
return q([n(o)]).process(r, l);
|
|
7630
7630
|
}, n;
|
|
7631
7631
|
};
|
|
7632
|
-
q.stringify =
|
|
7632
|
+
q.stringify = Cb;
|
|
7633
7633
|
q.parse = Xb;
|
|
7634
7634
|
q.fromJSON = Zb;
|
|
7635
7635
|
q.list = Gb;
|
|
@@ -7647,7 +7647,7 @@ q.Document = Aa;
|
|
|
7647
7647
|
q.Comment = ja;
|
|
7648
7648
|
q.Warning = Rb;
|
|
7649
7649
|
q.AtRule = Da;
|
|
7650
|
-
q.Result =
|
|
7650
|
+
q.Result = Wb;
|
|
7651
7651
|
q.Input = Ib;
|
|
7652
7652
|
q.Rule = $a;
|
|
7653
7653
|
q.Root = _a;
|
|
@@ -7674,8 +7674,8 @@ function wb(e) {
|
|
|
7674
7674
|
});
|
|
7675
7675
|
}), i;
|
|
7676
7676
|
}
|
|
7677
|
-
var vr = { exports: {} },
|
|
7678
|
-
return { isColorSupported: !1, reset:
|
|
7677
|
+
var vr = { exports: {} }, O = String, qa = function() {
|
|
7678
|
+
return { isColorSupported: !1, reset: O, bold: O, dim: O, italic: O, underline: O, inverse: O, hidden: O, strikethrough: O, black: O, red: O, green: O, yellow: O, blue: O, magenta: O, cyan: O, white: O, gray: O, bgBlack: O, bgRed: O, bgGreen: O, bgYellow: O, bgBlue: O, bgMagenta: O, bgCyan: O, bgWhite: O, blackBright: O, redBright: O, greenBright: O, yellowBright: O, blueBright: O, magentaBright: O, cyanBright: O, whiteBright: O, bgBlackBright: O, bgRedBright: O, bgGreenBright: O, bgYellowBright: O, bgBlueBright: O, bgMagentaBright: O, bgCyanBright: O, bgWhiteBright: O };
|
|
7679
7679
|
};
|
|
7680
7680
|
vr.exports = qa();
|
|
7681
7681
|
vr.exports.createColors = qa;
|
|
@@ -7684,7 +7684,7 @@ const Tb = {}, Nb = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineP
|
|
|
7684
7684
|
__proto__: null,
|
|
7685
7685
|
default: Tb
|
|
7686
7686
|
}, Symbol.toStringTag, { value: "Module" })), Le = /* @__PURE__ */ wb(Nb);
|
|
7687
|
-
let
|
|
7687
|
+
let Fo = xb, Ko = Le, Ps = class ec extends Error {
|
|
7688
7688
|
constructor(t, i, n, s, r, l) {
|
|
7689
7689
|
super(t), this.name = "CssSyntaxError", this.reason = t, r && (this.file = r), s && (this.source = s), l && (this.plugin = l), typeof i < "u" && typeof n < "u" && (typeof i == "number" ? (this.line = i, this.column = n) : (this.line = i.line, this.column = i.column, this.endLine = n.line, this.endColumn = n.column)), this.setMessage(), Error.captureStackTrace && Error.captureStackTrace(this, ec);
|
|
7690
7690
|
}
|
|
@@ -7694,10 +7694,10 @@ let Uo = xb, Ko = Le, Ps = class ec extends Error {
|
|
|
7694
7694
|
showSourceCode(t) {
|
|
7695
7695
|
if (!this.source) return "";
|
|
7696
7696
|
let i = this.source;
|
|
7697
|
-
t == null && (t =
|
|
7697
|
+
t == null && (t = Fo.isColorSupported);
|
|
7698
7698
|
let n = (u) => u, s = (u) => u, r = (u) => u;
|
|
7699
7699
|
if (t) {
|
|
7700
|
-
let { bold: u, gray: h, red: p } =
|
|
7700
|
+
let { bold: u, gray: h, red: p } = Fo.createColors(!0);
|
|
7701
7701
|
s = (m) => u(p(m)), n = (m) => h(m), Ko && (r = (m) => Ko(m));
|
|
7702
7702
|
}
|
|
7703
7703
|
let l = i.split(/\r?\n/), o = Math.max(this.line - 3, 0), a = Math.min(this.line + 2, l.length), c = String(a).length;
|
|
@@ -7708,9 +7708,9 @@ let Uo = xb, Ko = Le, Ps = class ec extends Error {
|
|
|
7708
7708
|
let d = 20, S = Math.max(0, this.column - d), I = Math.max(
|
|
7709
7709
|
this.column + d,
|
|
7710
7710
|
this.endColumn + d
|
|
7711
|
-
), V = u.slice(S, I),
|
|
7711
|
+
), V = u.slice(S, I), C = n(m.replace(/\d/g, " ")) + u.slice(0, Math.min(this.column - 1, d - 1)).replace(/[^\t]/g, " ");
|
|
7712
7712
|
return s(">") + n(m) + r(V) + `
|
|
7713
|
-
` +
|
|
7713
|
+
` + C + s("^");
|
|
7714
7714
|
}
|
|
7715
7715
|
let b = n(m.replace(/\d/g, " ")) + u.slice(0, this.column - 1).replace(/[^\t]/g, " ");
|
|
7716
7716
|
return s(">") + n(m) + r(u) + `
|
|
@@ -7730,7 +7730,7 @@ let Uo = xb, Ko = Le, Ps = class ec extends Error {
|
|
|
7730
7730
|
};
|
|
7731
7731
|
var wr = Ps;
|
|
7732
7732
|
Ps.default = Ps;
|
|
7733
|
-
const
|
|
7733
|
+
const Mo = {
|
|
7734
7734
|
after: `
|
|
7735
7735
|
`,
|
|
7736
7736
|
beforeClose: `
|
|
@@ -7813,7 +7813,7 @@ let Bs = class {
|
|
|
7813
7813
|
let s = e.parent;
|
|
7814
7814
|
if (i === "before" && (!s || s.type === "root" && s.first === e || s && s.type === "document"))
|
|
7815
7815
|
return "";
|
|
7816
|
-
if (!s) return
|
|
7816
|
+
if (!s) return Mo[i];
|
|
7817
7817
|
let r = e.root();
|
|
7818
7818
|
if (r.rawCache || (r.rawCache = {}), typeof r.rawCache[i] < "u")
|
|
7819
7819
|
return r.rawCache[i];
|
|
@@ -7825,7 +7825,7 @@ let Bs = class {
|
|
|
7825
7825
|
if (n = o.raws[t], typeof n < "u") return !1;
|
|
7826
7826
|
});
|
|
7827
7827
|
}
|
|
7828
|
-
return typeof n > "u" && (n =
|
|
7828
|
+
return typeof n > "u" && (n = Mo[i]), r.rawCache[i] = n, n;
|
|
7829
7829
|
}
|
|
7830
7830
|
rawBeforeClose(e) {
|
|
7831
7831
|
let t;
|
|
@@ -7923,12 +7923,12 @@ let Jb = tc;
|
|
|
7923
7923
|
function Ds(e, t) {
|
|
7924
7924
|
new Jb(t).stringify(e);
|
|
7925
7925
|
}
|
|
7926
|
-
var
|
|
7926
|
+
var On = Ds;
|
|
7927
7927
|
Ds.default = Ds;
|
|
7928
7928
|
var Zi = {};
|
|
7929
7929
|
Zi.isClean = Symbol("isClean");
|
|
7930
7930
|
Zi.my = Symbol("my");
|
|
7931
|
-
let Yb = wr,
|
|
7931
|
+
let Yb = wr, Ub = tc, Fb = On, { isClean: Et, my: Kb } = Zi;
|
|
7932
7932
|
function js(e, t) {
|
|
7933
7933
|
let i = new e.constructor();
|
|
7934
7934
|
for (let n in e) {
|
|
@@ -7957,7 +7957,7 @@ let Qs = class {
|
|
|
7957
7957
|
return this;
|
|
7958
7958
|
}
|
|
7959
7959
|
constructor(e = {}) {
|
|
7960
|
-
this.raws = {}, this[
|
|
7960
|
+
this.raws = {}, this[Et] = !1, this[Kb] = !0;
|
|
7961
7961
|
for (let t in e)
|
|
7962
7962
|
if (t === "nodes") {
|
|
7963
7963
|
this.nodes = [];
|
|
@@ -8029,14 +8029,14 @@ let Qs = class {
|
|
|
8029
8029
|
}
|
|
8030
8030
|
/* c8 ignore next 3 */
|
|
8031
8031
|
markClean() {
|
|
8032
|
-
this[
|
|
8032
|
+
this[Et] = !0;
|
|
8033
8033
|
}
|
|
8034
8034
|
markDirty() {
|
|
8035
|
-
if (this[
|
|
8036
|
-
this[
|
|
8035
|
+
if (this[Et]) {
|
|
8036
|
+
this[Et] = !1;
|
|
8037
8037
|
let e = this;
|
|
8038
8038
|
for (; e = e.parent; )
|
|
8039
|
-
e[
|
|
8039
|
+
e[Et] = !1;
|
|
8040
8040
|
}
|
|
8041
8041
|
}
|
|
8042
8042
|
next() {
|
|
@@ -8114,7 +8114,7 @@ let Qs = class {
|
|
|
8114
8114
|
}), { end: n, start: i };
|
|
8115
8115
|
}
|
|
8116
8116
|
raw(e, t) {
|
|
8117
|
-
return new
|
|
8117
|
+
return new Ub().raw(this, e, t);
|
|
8118
8118
|
}
|
|
8119
8119
|
remove() {
|
|
8120
8120
|
return this.parent && this.parent.removeChild(this), this.parent = void 0, this;
|
|
@@ -8161,7 +8161,7 @@ let Qs = class {
|
|
|
8161
8161
|
toProxy() {
|
|
8162
8162
|
return this.proxyCache || (this.proxyCache = new Proxy(this, this.getProxyProcessor())), this.proxyCache;
|
|
8163
8163
|
}
|
|
8164
|
-
toString(e =
|
|
8164
|
+
toString(e = Fb) {
|
|
8165
8165
|
e.stringify && (e = e.stringify);
|
|
8166
8166
|
let t = "";
|
|
8167
8167
|
return e(this, (i) => {
|
|
@@ -8174,16 +8174,16 @@ let Qs = class {
|
|
|
8174
8174
|
return e.warn(t, n);
|
|
8175
8175
|
}
|
|
8176
8176
|
};
|
|
8177
|
-
var
|
|
8177
|
+
var En = Qs;
|
|
8178
8178
|
Qs.default = Qs;
|
|
8179
|
-
let
|
|
8179
|
+
let Mb = En, As = class extends Mb {
|
|
8180
8180
|
constructor(e) {
|
|
8181
8181
|
super(e), this.type = "comment";
|
|
8182
8182
|
}
|
|
8183
8183
|
};
|
|
8184
|
-
var
|
|
8184
|
+
var Hn = As;
|
|
8185
8185
|
As.default = As;
|
|
8186
|
-
let
|
|
8186
|
+
let Ob = En, _s = class extends Ob {
|
|
8187
8187
|
get variable() {
|
|
8188
8188
|
return this.prop.startsWith("--") || this.prop[0] === "$";
|
|
8189
8189
|
}
|
|
@@ -8191,9 +8191,9 @@ let Eb = Mn, _s = class extends Eb {
|
|
|
8191
8191
|
e && typeof e.value < "u" && typeof e.value != "string" && (e = Se(Y({}, e), { value: String(e.value) })), super(e), this.type = "decl";
|
|
8192
8192
|
}
|
|
8193
8193
|
};
|
|
8194
|
-
var
|
|
8194
|
+
var zn = _s;
|
|
8195
8195
|
_s.default = _s;
|
|
8196
|
-
let ic =
|
|
8196
|
+
let ic = Hn, nc = zn, Eb = En, { isClean: sc, my: rc } = Zi, xr, oc, lc, Tr;
|
|
8197
8197
|
function ac(e) {
|
|
8198
8198
|
return e.map((t) => (t.nodes && (t.nodes = ac(t.nodes)), delete t.source, t));
|
|
8199
8199
|
}
|
|
@@ -8202,7 +8202,7 @@ function cc(e) {
|
|
|
8202
8202
|
for (let t of e.proxyOf.nodes)
|
|
8203
8203
|
cc(t);
|
|
8204
8204
|
}
|
|
8205
|
-
let je = class uc extends
|
|
8205
|
+
let je = class uc extends Eb {
|
|
8206
8206
|
get first() {
|
|
8207
8207
|
if (this.proxyOf.nodes)
|
|
8208
8208
|
return this.proxyOf.nodes[0];
|
|
@@ -8410,7 +8410,7 @@ je.rebuild = (e) => {
|
|
|
8410
8410
|
je.rebuild(t);
|
|
8411
8411
|
});
|
|
8412
8412
|
};
|
|
8413
|
-
let dc = ut,
|
|
8413
|
+
let dc = ut, Wn = class extends dc {
|
|
8414
8414
|
constructor(e) {
|
|
8415
8415
|
super(e), this.type = "atrule";
|
|
8416
8416
|
}
|
|
@@ -8421,10 +8421,10 @@ let dc = ut, Cn = class extends dc {
|
|
|
8421
8421
|
return this.proxyOf.nodes || (this.nodes = []), super.prepend(...e);
|
|
8422
8422
|
}
|
|
8423
8423
|
};
|
|
8424
|
-
var Nr =
|
|
8425
|
-
|
|
8426
|
-
dc.registerAtRule(
|
|
8427
|
-
let
|
|
8424
|
+
var Nr = Wn;
|
|
8425
|
+
Wn.default = Wn;
|
|
8426
|
+
dc.registerAtRule(Wn);
|
|
8427
|
+
let Hb = ut, hc, pc, di = class extends Hb {
|
|
8428
8428
|
constructor(e) {
|
|
8429
8429
|
super(Y({ type: "document" }, e)), this.nodes || (this.nodes = []);
|
|
8430
8430
|
}
|
|
@@ -8440,14 +8440,14 @@ di.registerProcessor = (e) => {
|
|
|
8440
8440
|
};
|
|
8441
8441
|
var Lr = di;
|
|
8442
8442
|
di.default = di;
|
|
8443
|
-
let
|
|
8443
|
+
let zb = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict", Pb = (e = 21) => {
|
|
8444
8444
|
let t = "", i = e | 0;
|
|
8445
8445
|
for (; i--; )
|
|
8446
|
-
t +=
|
|
8446
|
+
t += zb[Math.random() * 64 | 0];
|
|
8447
8447
|
return t;
|
|
8448
8448
|
};
|
|
8449
8449
|
var Bb = { nanoid: Pb };
|
|
8450
|
-
let { existsSync: Db, readFileSync: jb } = Le, { dirname: ls, join: Qb } = Le, { SourceMapConsumer:
|
|
8450
|
+
let { existsSync: Db, readFileSync: jb } = Le, { dirname: ls, join: Qb } = Le, { SourceMapConsumer: Oo, SourceMapGenerator: Eo } = Le;
|
|
8451
8451
|
function Ab(e) {
|
|
8452
8452
|
return Buffer ? Buffer.from(e, "base64").toString() : window.atob(e);
|
|
8453
8453
|
}
|
|
@@ -8459,7 +8459,7 @@ let $s = class {
|
|
|
8459
8459
|
!this.mapFile && t.from && (this.mapFile = t.from), this.mapFile && (this.root = ls(this.mapFile)), n && (this.text = n);
|
|
8460
8460
|
}
|
|
8461
8461
|
consumer() {
|
|
8462
|
-
return this.consumerCache || (this.consumerCache = new
|
|
8462
|
+
return this.consumerCache || (this.consumerCache = new Oo(this.text)), this.consumerCache;
|
|
8463
8463
|
}
|
|
8464
8464
|
decodeInline(e) {
|
|
8465
8465
|
let t = /^data:application\/json;charset=utf-?8;base64,/, i = /^data:application\/json;base64,/, n = /^data:application\/json;charset=utf-?8,/, s = /^data:application\/json,/, r = e.match(n) || e.match(s);
|
|
@@ -8503,9 +8503,9 @@ let $s = class {
|
|
|
8503
8503
|
return n;
|
|
8504
8504
|
}
|
|
8505
8505
|
} else {
|
|
8506
|
+
if (t instanceof Oo)
|
|
8507
|
+
return Eo.fromSourceMap(t).toString();
|
|
8506
8508
|
if (t instanceof Eo)
|
|
8507
|
-
return Mo.fromSourceMap(t).toString();
|
|
8508
|
-
if (t instanceof Mo)
|
|
8509
8509
|
return t.toString();
|
|
8510
8510
|
if (this.isMap(t))
|
|
8511
8511
|
return JSON.stringify(t);
|
|
@@ -8531,7 +8531,7 @@ let $s = class {
|
|
|
8531
8531
|
};
|
|
8532
8532
|
var mc = $s;
|
|
8533
8533
|
$s.default = $s;
|
|
8534
|
-
let { nanoid: _b } = Bb, { isAbsolute: qs, resolve: er } = Le, { SourceMapConsumer: $b, SourceMapGenerator: qb } = Le, { fileURLToPath:
|
|
8534
|
+
let { nanoid: _b } = Bb, { isAbsolute: qs, resolve: er } = Le, { SourceMapConsumer: $b, SourceMapGenerator: qb } = Le, { fileURLToPath: Ho, pathToFileURL: Yi } = Le, zo = wr, ef = mc, as = Le, cs = Symbol("lineToIndexCache"), tf = !!($b && qb), Po = !!(er && qs);
|
|
8535
8535
|
function Bo(e) {
|
|
8536
8536
|
if (e[cs]) return e[cs];
|
|
8537
8537
|
let t = e.css.split(`
|
|
@@ -8540,7 +8540,7 @@ function Bo(e) {
|
|
|
8540
8540
|
i[s] = n, n += t[s].length + 1;
|
|
8541
8541
|
return e[cs] = i, i;
|
|
8542
8542
|
}
|
|
8543
|
-
let
|
|
8543
|
+
let Cn = class {
|
|
8544
8544
|
get from() {
|
|
8545
8545
|
return this.file || this.id;
|
|
8546
8546
|
}
|
|
@@ -8581,14 +8581,14 @@ let Wn = class {
|
|
|
8581
8581
|
t = u.line, i = u.col;
|
|
8582
8582
|
}
|
|
8583
8583
|
let c = this.origin(t, i, r, s);
|
|
8584
|
-
return c ? a = new
|
|
8584
|
+
return c ? a = new zo(
|
|
8585
8585
|
e,
|
|
8586
8586
|
c.endLine === void 0 ? c.line : { column: c.column, line: c.line },
|
|
8587
8587
|
c.endLine === void 0 ? c.column : { column: c.endColumn, line: c.endLine },
|
|
8588
8588
|
c.source,
|
|
8589
8589
|
c.file,
|
|
8590
8590
|
n.plugin
|
|
8591
|
-
) : a = new
|
|
8591
|
+
) : a = new zo(
|
|
8592
8592
|
e,
|
|
8593
8593
|
r === void 0 ? t : { column: i, line: t },
|
|
8594
8594
|
r === void 0 ? i : { column: s, line: r },
|
|
@@ -8643,8 +8643,8 @@ let Wn = class {
|
|
|
8643
8643
|
url: o.toString()
|
|
8644
8644
|
};
|
|
8645
8645
|
if (o.protocol === "file:")
|
|
8646
|
-
if (
|
|
8647
|
-
a.file =
|
|
8646
|
+
if (Ho)
|
|
8647
|
+
a.file = Ho(o);
|
|
8648
8648
|
else
|
|
8649
8649
|
throw new Error("file: protocol is not available in this PostCSS build");
|
|
8650
8650
|
let c = s.sourceContentFor(r.source);
|
|
@@ -8657,9 +8657,9 @@ let Wn = class {
|
|
|
8657
8657
|
return this.map && (e.map = Y({}, this.map), e.map.consumerCache && (e.map.consumerCache = void 0)), e;
|
|
8658
8658
|
}
|
|
8659
8659
|
};
|
|
8660
|
-
var Pn =
|
|
8661
|
-
|
|
8662
|
-
as && as.registerInput && as.registerInput(
|
|
8660
|
+
var Pn = Cn;
|
|
8661
|
+
Cn.default = Cn;
|
|
8662
|
+
as && as.registerInput && as.registerInput(Cn);
|
|
8663
8663
|
let bc = ut, fc, yc, xt = class extends bc {
|
|
8664
8664
|
constructor(e) {
|
|
8665
8665
|
super(e), this.type = "root", this.nodes || (this.nodes = []);
|
|
@@ -8725,10 +8725,10 @@ let Zc = ut, nf = gc, Rn = class extends Zc {
|
|
|
8725
8725
|
var Jr = Rn;
|
|
8726
8726
|
Rn.default = Rn;
|
|
8727
8727
|
Zc.registerRule(Rn);
|
|
8728
|
-
let sf = Nr, rf =
|
|
8728
|
+
let sf = Nr, rf = Hn, of = zn, lf = Pn, af = mc, cf = Ii, uf = Jr;
|
|
8729
8729
|
function pi(e, t) {
|
|
8730
8730
|
if (Array.isArray(e)) return e.map((r) => pi(r));
|
|
8731
|
-
let i = e, { inputs: n } = i, s =
|
|
8731
|
+
let i = e, { inputs: n } = i, s = Ct(i, ["inputs"]);
|
|
8732
8732
|
if (n) {
|
|
8733
8733
|
t = [];
|
|
8734
8734
|
for (let r of n) {
|
|
@@ -8739,7 +8739,7 @@ function pi(e, t) {
|
|
|
8739
8739
|
}
|
|
8740
8740
|
}
|
|
8741
8741
|
if (s.nodes && (s.nodes = e.nodes.map((r) => pi(r, t))), s.source) {
|
|
8742
|
-
let r = s.source, { inputId: l } = r, o =
|
|
8742
|
+
let r = s.source, { inputId: l } = r, o = Ct(r, ["inputId"]);
|
|
8743
8743
|
s.source = o, l != null && (s.source.input = t[l]);
|
|
8744
8744
|
}
|
|
8745
8745
|
if (s.type === "root")
|
|
@@ -8916,13 +8916,13 @@ let { dirname: nn, relative: Ic, resolve: Sc, sep: Gc } = Le, { SourceMapConsume
|
|
|
8916
8916
|
}
|
|
8917
8917
|
};
|
|
8918
8918
|
var Xc = bf;
|
|
8919
|
-
const us = 39, jo = 34,
|
|
8919
|
+
const us = 39, jo = 34, Ui = 92, Qo = 47, Fi = 10, Ht = 32, Ki = 12, Mi = 9, Oi = 13, ff = 91, yf = 93, gf = 40, Zf = 41, If = 123, Sf = 125, Gf = 59, Vf = 42, Xf = 58, Wf = 64, Ei = /[\t\n\f\r "#'()/;[\\\]{}]/g, Hi = /[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g, Cf = /.[\r\n"'(/\\]/, Ao = /[\da-f]/i;
|
|
8920
8920
|
var Rf = function(e, t = {}) {
|
|
8921
8921
|
let i = e.css.valueOf(), n = t.ignoreErrors, s, r, l, o, a, c, u, h, p, m, b = i.length, d = 0, S = [], I = [];
|
|
8922
8922
|
function V() {
|
|
8923
8923
|
return d;
|
|
8924
8924
|
}
|
|
8925
|
-
function
|
|
8925
|
+
function C(v) {
|
|
8926
8926
|
throw e.error("Unclosed " + v, d);
|
|
8927
8927
|
}
|
|
8928
8928
|
function X() {
|
|
@@ -8933,15 +8933,15 @@ var Rf = function(e, t = {}) {
|
|
|
8933
8933
|
if (d >= b) return;
|
|
8934
8934
|
let w = v ? v.ignoreUnclosed : !1;
|
|
8935
8935
|
switch (s = i.charCodeAt(d), s) {
|
|
8936
|
-
case
|
|
8937
|
-
case
|
|
8936
|
+
case Fi:
|
|
8937
|
+
case Ht:
|
|
8938
|
+
case Mi:
|
|
8938
8939
|
case Oi:
|
|
8939
|
-
case Ei:
|
|
8940
8940
|
case Ki: {
|
|
8941
8941
|
o = d;
|
|
8942
8942
|
do
|
|
8943
8943
|
o += 1, s = i.charCodeAt(o);
|
|
8944
|
-
while (s ===
|
|
8944
|
+
while (s === Ht || s === Fi || s === Mi || s === Oi || s === Ki);
|
|
8945
8945
|
c = ["space", i.slice(d, o)], d = o - 1;
|
|
8946
8946
|
break;
|
|
8947
8947
|
}
|
|
@@ -8957,7 +8957,7 @@ var Rf = function(e, t = {}) {
|
|
|
8957
8957
|
break;
|
|
8958
8958
|
}
|
|
8959
8959
|
case gf: {
|
|
8960
|
-
if (m = S.length ? S.pop()[1] : "", p = i.charCodeAt(d + 1), m === "url" && p !== us && p !== jo && p !==
|
|
8960
|
+
if (m = S.length ? S.pop()[1] : "", p = i.charCodeAt(d + 1), m === "url" && p !== us && p !== jo && p !== Ht && p !== Fi && p !== Mi && p !== Ki && p !== Oi) {
|
|
8961
8961
|
o = d;
|
|
8962
8962
|
do {
|
|
8963
8963
|
if (u = !1, o = i.indexOf(")", o + 1), o === -1)
|
|
@@ -8965,13 +8965,13 @@ var Rf = function(e, t = {}) {
|
|
|
8965
8965
|
o = d;
|
|
8966
8966
|
break;
|
|
8967
8967
|
} else
|
|
8968
|
-
|
|
8969
|
-
for (h = o; i.charCodeAt(h - 1) ===
|
|
8968
|
+
C("bracket");
|
|
8969
|
+
for (h = o; i.charCodeAt(h - 1) === Ui; )
|
|
8970
8970
|
h -= 1, u = !u;
|
|
8971
8971
|
} while (u);
|
|
8972
8972
|
c = ["brackets", i.slice(d, o + 1), d, o], d = o;
|
|
8973
8973
|
} else
|
|
8974
|
-
o = i.indexOf(")", d + 1), r = i.slice(d, o + 1), o === -1 ||
|
|
8974
|
+
o = i.indexOf(")", d + 1), r = i.slice(d, o + 1), o === -1 || Cf.test(r) ? c = ["(", "(", d] : (c = ["brackets", r, d, o], d = o);
|
|
8975
8975
|
break;
|
|
8976
8976
|
}
|
|
8977
8977
|
case us:
|
|
@@ -8983,30 +8983,30 @@ var Rf = function(e, t = {}) {
|
|
|
8983
8983
|
o = d + 1;
|
|
8984
8984
|
break;
|
|
8985
8985
|
} else
|
|
8986
|
-
|
|
8987
|
-
for (h = o; i.charCodeAt(h - 1) ===
|
|
8986
|
+
C("string");
|
|
8987
|
+
for (h = o; i.charCodeAt(h - 1) === Ui; )
|
|
8988
8988
|
h -= 1, u = !u;
|
|
8989
8989
|
} while (u);
|
|
8990
8990
|
c = ["string", i.slice(d, o + 1), d, o], d = o;
|
|
8991
8991
|
break;
|
|
8992
8992
|
}
|
|
8993
|
-
case
|
|
8994
|
-
|
|
8993
|
+
case Wf: {
|
|
8994
|
+
Ei.lastIndex = d + 1, Ei.test(i), Ei.lastIndex === 0 ? o = i.length - 1 : o = Ei.lastIndex - 2, c = ["at-word", i.slice(d, o + 1), d, o], d = o;
|
|
8995
8995
|
break;
|
|
8996
8996
|
}
|
|
8997
|
-
case
|
|
8998
|
-
for (o = d, l = !0; i.charCodeAt(o + 1) ===
|
|
8997
|
+
case Ui: {
|
|
8998
|
+
for (o = d, l = !0; i.charCodeAt(o + 1) === Ui; )
|
|
8999
8999
|
o += 1, l = !l;
|
|
9000
|
-
if (s = i.charCodeAt(o + 1), l && s !== Qo && s !==
|
|
9000
|
+
if (s = i.charCodeAt(o + 1), l && s !== Qo && s !== Ht && s !== Fi && s !== Mi && s !== Oi && s !== Ki && (o += 1, Ao.test(i.charAt(o)))) {
|
|
9001
9001
|
for (; Ao.test(i.charAt(o + 1)); )
|
|
9002
9002
|
o += 1;
|
|
9003
|
-
i.charCodeAt(o + 1) ===
|
|
9003
|
+
i.charCodeAt(o + 1) === Ht && (o += 1);
|
|
9004
9004
|
}
|
|
9005
9005
|
c = ["word", i.slice(d, o + 1), d, o], d = o;
|
|
9006
9006
|
break;
|
|
9007
9007
|
}
|
|
9008
9008
|
default: {
|
|
9009
|
-
s === Qo && i.charCodeAt(d + 1) === Vf ? (o = i.indexOf("*/", d + 2) + 1, o === 0 && (n || w ? o = i.length :
|
|
9009
|
+
s === Qo && i.charCodeAt(d + 1) === Vf ? (o = i.indexOf("*/", d + 2) + 1, o === 0 && (n || w ? o = i.length : C("comment")), c = ["comment", i.slice(d, o + 1), d, o], d = o) : (Hi.lastIndex = d + 1, Hi.test(i), Hi.lastIndex === 0 ? o = i.length - 1 : o = Hi.lastIndex - 2, c = ["word", i.slice(d, o + 1), d, o], S.push(c), d = o);
|
|
9010
9010
|
break;
|
|
9011
9011
|
}
|
|
9012
9012
|
}
|
|
@@ -9022,7 +9022,7 @@ var Rf = function(e, t = {}) {
|
|
|
9022
9022
|
position: V
|
|
9023
9023
|
};
|
|
9024
9024
|
};
|
|
9025
|
-
let kf = Nr, vf =
|
|
9025
|
+
let kf = Nr, vf = Hn, wf = zn, xf = Ii, _o = Jr, Tf = Rf;
|
|
9026
9026
|
const $o = {
|
|
9027
9027
|
empty: !0,
|
|
9028
9028
|
space: !0
|
|
@@ -9330,9 +9330,9 @@ let Lf = class {
|
|
|
9330
9330
|
}
|
|
9331
9331
|
};
|
|
9332
9332
|
var Jf = Lf;
|
|
9333
|
-
let Yf = ut,
|
|
9333
|
+
let Yf = ut, Uf = Pn, Ff = Jf;
|
|
9334
9334
|
function kn(e, t) {
|
|
9335
|
-
let i = new
|
|
9335
|
+
let i = new Uf(e, t), n = new Ff(i);
|
|
9336
9336
|
try {
|
|
9337
9337
|
n.parse();
|
|
9338
9338
|
} catch (s) {
|
|
@@ -9362,9 +9362,9 @@ let tr = class {
|
|
|
9362
9362
|
}).message : this.plugin ? this.plugin + ": " + this.text : this.text;
|
|
9363
9363
|
}
|
|
9364
9364
|
};
|
|
9365
|
-
var
|
|
9365
|
+
var Wc = tr;
|
|
9366
9366
|
tr.default = tr;
|
|
9367
|
-
let Kf =
|
|
9367
|
+
let Kf = Wc, ir = class {
|
|
9368
9368
|
get content() {
|
|
9369
9369
|
return this.css;
|
|
9370
9370
|
}
|
|
@@ -9383,13 +9383,13 @@ let Kf = Cc, ir = class {
|
|
|
9383
9383
|
return this.messages.filter((e) => e.type === "warning");
|
|
9384
9384
|
}
|
|
9385
9385
|
};
|
|
9386
|
-
var
|
|
9386
|
+
var Ur = ir;
|
|
9387
9387
|
ir.default = ir;
|
|
9388
9388
|
let qo = {};
|
|
9389
|
-
var
|
|
9389
|
+
var Cc = function(e) {
|
|
9390
9390
|
qo[e] || (qo[e] = !0, typeof console < "u" && console.warn && console.warn(e));
|
|
9391
9391
|
};
|
|
9392
|
-
let
|
|
9392
|
+
let Mf = ut, Of = Lr, Ef = Xc, Hf = Yr, el = Ur, zf = Ii, Pf = On, { isClean: Ue, my: Bf } = Zi, Df = Cc;
|
|
9393
9393
|
const jf = {
|
|
9394
9394
|
atrule: "AtRule",
|
|
9395
9395
|
comment: "Comment",
|
|
@@ -9419,7 +9419,7 @@ const jf = {
|
|
|
9419
9419
|
postcssPlugin: !0,
|
|
9420
9420
|
prepare: !0
|
|
9421
9421
|
}, Tt = 0;
|
|
9422
|
-
function
|
|
9422
|
+
function zt(e) {
|
|
9423
9423
|
return typeof e == "object" && typeof e.then == "function";
|
|
9424
9424
|
}
|
|
9425
9425
|
function Rc(e) {
|
|
@@ -9444,7 +9444,7 @@ function tl(e) {
|
|
|
9444
9444
|
};
|
|
9445
9445
|
}
|
|
9446
9446
|
function nr(e) {
|
|
9447
|
-
return e[
|
|
9447
|
+
return e[Ue] = !1, e.nodes && e.nodes.forEach((t) => nr(t)), e;
|
|
9448
9448
|
}
|
|
9449
9449
|
let sr = {}, Nt = class kc {
|
|
9450
9450
|
get content() {
|
|
@@ -9479,14 +9479,14 @@ let sr = {}, Nt = class kc {
|
|
|
9479
9479
|
else if (i instanceof kc || i instanceof el)
|
|
9480
9480
|
s = nr(i.root), i.map && (typeof n.map > "u" && (n.map = {}), n.map.inline || (n.map.inline = !1), n.map.prev = i.map);
|
|
9481
9481
|
else {
|
|
9482
|
-
let r =
|
|
9482
|
+
let r = Hf;
|
|
9483
9483
|
n.syntax && (r = n.syntax.parse), n.parser && (r = n.parser), r.parse && (r = r.parse);
|
|
9484
9484
|
try {
|
|
9485
9485
|
s = r(i, n);
|
|
9486
9486
|
} catch (l) {
|
|
9487
9487
|
this.processed = !0, this.error = l;
|
|
9488
9488
|
}
|
|
9489
|
-
s && !s[Bf] &&
|
|
9489
|
+
s && !s[Bf] && Mf.rebuild(s);
|
|
9490
9490
|
}
|
|
9491
9491
|
this.result = new el(t, s, n), this.helpers = Se(Y({}, sr), { postcss: sr, result: this.result }), this.plugins = this.processor.plugins.map((r) => typeof r == "object" && r.prepare ? Y(Y({}, r), r.prepare(this.result)) : r);
|
|
9492
9492
|
}
|
|
@@ -9547,7 +9547,7 @@ let sr = {}, Nt = class kc {
|
|
|
9547
9547
|
this.plugin = 0;
|
|
9548
9548
|
for (let t = 0; t < this.plugins.length; t++) {
|
|
9549
9549
|
let i = this.plugins[t], n = this.runOnRoot(i);
|
|
9550
|
-
if (
|
|
9550
|
+
if (zt(n))
|
|
9551
9551
|
try {
|
|
9552
9552
|
yield n;
|
|
9553
9553
|
} catch (s) {
|
|
@@ -9556,12 +9556,12 @@ let sr = {}, Nt = class kc {
|
|
|
9556
9556
|
}
|
|
9557
9557
|
if (this.prepareVisitors(), this.hasListener) {
|
|
9558
9558
|
let t = this.result.root;
|
|
9559
|
-
for (; !t[
|
|
9560
|
-
t[
|
|
9559
|
+
for (; !t[Ue]; ) {
|
|
9560
|
+
t[Ue] = !0;
|
|
9561
9561
|
let i = [tl(t)];
|
|
9562
9562
|
for (; i.length > 0; ) {
|
|
9563
9563
|
let n = this.visitTick(i);
|
|
9564
|
-
if (
|
|
9564
|
+
if (zt(n))
|
|
9565
9565
|
try {
|
|
9566
9566
|
yield n;
|
|
9567
9567
|
} catch (s) {
|
|
@@ -9597,7 +9597,7 @@ let sr = {}, Nt = class kc {
|
|
|
9597
9597
|
let i = this.result.root.nodes.map(
|
|
9598
9598
|
(n) => t.Once(n, this.helpers)
|
|
9599
9599
|
);
|
|
9600
|
-
return
|
|
9600
|
+
return zt(i[0]) ? Promise.all(i) : i;
|
|
9601
9601
|
}
|
|
9602
9602
|
return t.Once(this.result.root, this.helpers);
|
|
9603
9603
|
} else if (typeof t == "function")
|
|
@@ -9612,7 +9612,7 @@ let sr = {}, Nt = class kc {
|
|
|
9612
9612
|
this.stringified = !0, this.sync();
|
|
9613
9613
|
let t = this.result.opts, i = Pf;
|
|
9614
9614
|
t.syntax && (i = t.syntax.stringify), t.stringifier && (i = t.stringifier), i.stringify && (i = i.stringify);
|
|
9615
|
-
let n = new
|
|
9615
|
+
let n = new Ef(i, this.result.root, this.result.opts).generate();
|
|
9616
9616
|
return this.result.css = n[0], this.result.map = n[1], this.result;
|
|
9617
9617
|
}
|
|
9618
9618
|
sync() {
|
|
@@ -9622,13 +9622,13 @@ let sr = {}, Nt = class kc {
|
|
|
9622
9622
|
throw this.getAsyncError();
|
|
9623
9623
|
for (let t of this.plugins) {
|
|
9624
9624
|
let i = this.runOnRoot(t);
|
|
9625
|
-
if (
|
|
9625
|
+
if (zt(i))
|
|
9626
9626
|
throw this.getAsyncError();
|
|
9627
9627
|
}
|
|
9628
9628
|
if (this.prepareVisitors(), this.hasListener) {
|
|
9629
9629
|
let t = this.result.root;
|
|
9630
|
-
for (; !t[
|
|
9631
|
-
t[
|
|
9630
|
+
for (; !t[Ue]; )
|
|
9631
|
+
t[Ue] = !0, this.walkSync(t);
|
|
9632
9632
|
if (this.listeners.OnceExit)
|
|
9633
9633
|
if (t.type === "document")
|
|
9634
9634
|
for (let i of t.nodes)
|
|
@@ -9657,7 +9657,7 @@ let sr = {}, Nt = class kc {
|
|
|
9657
9657
|
}
|
|
9658
9658
|
if (i.type !== "root" && i.type !== "document" && !i.parent)
|
|
9659
9659
|
return !0;
|
|
9660
|
-
if (
|
|
9660
|
+
if (zt(r))
|
|
9661
9661
|
throw this.getAsyncError();
|
|
9662
9662
|
}
|
|
9663
9663
|
}
|
|
@@ -9679,8 +9679,8 @@ let sr = {}, Nt = class kc {
|
|
|
9679
9679
|
if (i.iterator !== 0) {
|
|
9680
9680
|
let l = i.iterator, o;
|
|
9681
9681
|
for (; o = n.nodes[n.indexes[l]]; )
|
|
9682
|
-
if (n.indexes[l] += 1, !o[
|
|
9683
|
-
o[
|
|
9682
|
+
if (n.indexes[l] += 1, !o[Ue]) {
|
|
9683
|
+
o[Ue] = !0, t.push(tl(o));
|
|
9684
9684
|
return;
|
|
9685
9685
|
}
|
|
9686
9686
|
i.iterator = 0, delete n.indexes[l];
|
|
@@ -9689,7 +9689,7 @@ let sr = {}, Nt = class kc {
|
|
|
9689
9689
|
for (; i.eventIndex < r.length; ) {
|
|
9690
9690
|
let l = r[i.eventIndex];
|
|
9691
9691
|
if (i.eventIndex += 1, l === Tt) {
|
|
9692
|
-
n.nodes && n.nodes.length && (n[
|
|
9692
|
+
n.nodes && n.nodes.length && (n[Ue] = !0, i.iterator = n.getIterator());
|
|
9693
9693
|
return;
|
|
9694
9694
|
} else if (this.listeners[l]) {
|
|
9695
9695
|
i.visitors = this.listeners[l];
|
|
@@ -9699,12 +9699,12 @@ let sr = {}, Nt = class kc {
|
|
|
9699
9699
|
t.pop();
|
|
9700
9700
|
}
|
|
9701
9701
|
walkSync(t) {
|
|
9702
|
-
t[
|
|
9702
|
+
t[Ue] = !0;
|
|
9703
9703
|
let i = Rc(t);
|
|
9704
9704
|
for (let n of i)
|
|
9705
9705
|
if (n === Tt)
|
|
9706
9706
|
t.nodes && t.each((s) => {
|
|
9707
|
-
s[
|
|
9707
|
+
s[Ue] || this.walkSync(s);
|
|
9708
9708
|
});
|
|
9709
9709
|
else {
|
|
9710
9710
|
let s = this.listeners[n];
|
|
@@ -9721,11 +9721,11 @@ Nt.registerPostcss = (e) => {
|
|
|
9721
9721
|
};
|
|
9722
9722
|
var vc = Nt;
|
|
9723
9723
|
Nt.default = Nt;
|
|
9724
|
-
|
|
9725
|
-
|
|
9724
|
+
zf.registerLazyResult(Nt);
|
|
9725
|
+
Of.registerLazyResult(Nt);
|
|
9726
9726
|
let _f = Xc, $f = Yr;
|
|
9727
|
-
const qf =
|
|
9728
|
-
let ey =
|
|
9727
|
+
const qf = Ur;
|
|
9728
|
+
let ey = On, ty = Cc, rr = class {
|
|
9729
9729
|
get content() {
|
|
9730
9730
|
return this.result.css;
|
|
9731
9731
|
}
|
|
@@ -9837,9 +9837,9 @@ var ly = mi;
|
|
|
9837
9837
|
mi.default = mi;
|
|
9838
9838
|
oy.registerProcessor(mi);
|
|
9839
9839
|
ny.registerProcessor(mi);
|
|
9840
|
-
let wc = Nr, xc =
|
|
9840
|
+
let wc = Nr, xc = Hn, ay = ut, cy = wr, Tc = zn, Nc = Lr, uy = df, dy = Pn, hy = vc, py = gc, my = En, by = Yr, Fr = ly, fy = Ur, Lc = Ii, Jc = Jr, yy = On, gy = Wc;
|
|
9841
9841
|
function ee(...e) {
|
|
9842
|
-
return e.length === 1 && Array.isArray(e[0]) && (e = e[0]), new
|
|
9842
|
+
return e.length === 1 && Array.isArray(e[0]) && (e = e[0]), new Fr(e);
|
|
9843
9843
|
}
|
|
9844
9844
|
ee.plugin = function(e, t) {
|
|
9845
9845
|
let i = !1;
|
|
@@ -9852,7 +9852,7 @@ https://evilmartians.com/chronicles/postcss-8-plugin-migration`
|
|
|
9852
9852
|
https://www.w3ctech.com/topic/2226`
|
|
9853
9853
|
));
|
|
9854
9854
|
let l = t(...r);
|
|
9855
|
-
return l.postcssPlugin = e, l.postcssVersion = new
|
|
9855
|
+
return l.postcssPlugin = e, l.postcssVersion = new Fr().version, l;
|
|
9856
9856
|
}
|
|
9857
9857
|
let s;
|
|
9858
9858
|
return Object.defineProperty(n, "postcss", {
|
|
@@ -9876,7 +9876,7 @@ ee.document = (e) => new Nc(e);
|
|
|
9876
9876
|
ee.CssSyntaxError = cy;
|
|
9877
9877
|
ee.Declaration = Tc;
|
|
9878
9878
|
ee.Container = ay;
|
|
9879
|
-
ee.Processor =
|
|
9879
|
+
ee.Processor = Fr;
|
|
9880
9880
|
ee.Document = Nc;
|
|
9881
9881
|
ee.Comment = xc;
|
|
9882
9882
|
ee.Warning = gy;
|
|
@@ -9933,7 +9933,7 @@ class Kr {
|
|
|
9933
9933
|
return "RRNode";
|
|
9934
9934
|
}
|
|
9935
9935
|
}
|
|
9936
|
-
const
|
|
9936
|
+
const zi = /* @__PURE__ */ new Map(), il = /* @__PURE__ */ new WeakSet();
|
|
9937
9937
|
function nl(e) {
|
|
9938
9938
|
return e !== null && typeof e == "object" && "complete" in e && "naturalWidth" in e && "naturalHeight" in e && "src" in e && "onload" in e;
|
|
9939
9939
|
}
|
|
@@ -9943,19 +9943,19 @@ function Zy(e) {
|
|
|
9943
9943
|
il.add(e);
|
|
9944
9944
|
const t = e.drawImage.bind(e);
|
|
9945
9945
|
e.drawImage = function(i, ...n) {
|
|
9946
|
-
const s =
|
|
9946
|
+
const s = zi.get(e);
|
|
9947
9947
|
s && (s.cancelled = !0);
|
|
9948
9948
|
const r = () => {
|
|
9949
9949
|
n.length === 2 && nl(i) && n.push(i.naturalWidth || i.width, i.naturalHeight || i.height), t(i, ...n);
|
|
9950
9950
|
};
|
|
9951
9951
|
if (nl(i) && !i.complete) {
|
|
9952
9952
|
const l = { cancelled: !1 };
|
|
9953
|
-
|
|
9953
|
+
zi.set(e, l);
|
|
9954
9954
|
const o = () => {
|
|
9955
|
-
l.cancelled || (
|
|
9955
|
+
l.cancelled || (zi.delete(e), r());
|
|
9956
9956
|
}, a = () => {
|
|
9957
9957
|
if (!l.cancelled) {
|
|
9958
|
-
|
|
9958
|
+
zi.delete(e);
|
|
9959
9959
|
try {
|
|
9960
9960
|
r();
|
|
9961
9961
|
} catch {
|
|
@@ -9978,7 +9978,7 @@ const sl = {
|
|
|
9978
9978
|
Element: [],
|
|
9979
9979
|
MutationObserver: ["constructor"]
|
|
9980
9980
|
}, Pi = {}, Iy = () => !!globalThis.Zone;
|
|
9981
|
-
function
|
|
9981
|
+
function Mr(e) {
|
|
9982
9982
|
if (Pi[e])
|
|
9983
9983
|
return Pi[e];
|
|
9984
9984
|
const t = globalThis[e], i = t.prototype, n = e in sl ? sl[e] : void 0, s = !!(n && // @ts-expect-error 2345
|
|
@@ -10015,7 +10015,7 @@ function et(e, t, i) {
|
|
|
10015
10015
|
return ds[s].call(
|
|
10016
10016
|
t
|
|
10017
10017
|
);
|
|
10018
|
-
const r =
|
|
10018
|
+
const r = Mr(e), l = (n = Object.getOwnPropertyDescriptor(
|
|
10019
10019
|
r,
|
|
10020
10020
|
i
|
|
10021
10021
|
)) == null ? void 0 : n.get;
|
|
@@ -10028,7 +10028,7 @@ function Yc(e, t, i) {
|
|
|
10028
10028
|
return hs[n].bind(
|
|
10029
10029
|
t
|
|
10030
10030
|
);
|
|
10031
|
-
const s =
|
|
10031
|
+
const s = Mr(e)[i];
|
|
10032
10032
|
return typeof s != "function" ? t[i] : (hs[n] = s, s.bind(t));
|
|
10033
10033
|
}
|
|
10034
10034
|
function Sy(e) {
|
|
@@ -10043,10 +10043,10 @@ function Vy(e) {
|
|
|
10043
10043
|
function Xy(e) {
|
|
10044
10044
|
return et("Node", e, "textContent");
|
|
10045
10045
|
}
|
|
10046
|
-
function
|
|
10046
|
+
function Wy(e, t) {
|
|
10047
10047
|
return Yc("Node", e, "contains")(t);
|
|
10048
10048
|
}
|
|
10049
|
-
function
|
|
10049
|
+
function Cy(e) {
|
|
10050
10050
|
return Yc("Node", e, "getRootNode")();
|
|
10051
10051
|
}
|
|
10052
10052
|
function Ry(e) {
|
|
@@ -10064,8 +10064,8 @@ function wy(e, t) {
|
|
|
10064
10064
|
function xy(e, t) {
|
|
10065
10065
|
return et("Element", e, "querySelectorAll")(t);
|
|
10066
10066
|
}
|
|
10067
|
-
function
|
|
10068
|
-
return
|
|
10067
|
+
function Uc() {
|
|
10068
|
+
return Mr("MutationObserver").constructor;
|
|
10069
10069
|
}
|
|
10070
10070
|
function dt(e, t, i) {
|
|
10071
10071
|
try {
|
|
@@ -10086,19 +10086,19 @@ function dt(e, t, i) {
|
|
|
10086
10086
|
};
|
|
10087
10087
|
}
|
|
10088
10088
|
}
|
|
10089
|
-
const
|
|
10089
|
+
const z = {
|
|
10090
10090
|
childNodes: Sy,
|
|
10091
10091
|
parentNode: Gy,
|
|
10092
10092
|
parentElement: Vy,
|
|
10093
10093
|
textContent: Xy,
|
|
10094
|
-
contains:
|
|
10095
|
-
getRootNode:
|
|
10094
|
+
contains: Wy,
|
|
10095
|
+
getRootNode: Cy,
|
|
10096
10096
|
host: Ry,
|
|
10097
10097
|
styleSheets: ky,
|
|
10098
10098
|
shadowRoot: vy,
|
|
10099
10099
|
querySelector: wy,
|
|
10100
10100
|
querySelectorAll: xy,
|
|
10101
|
-
mutationObserver:
|
|
10101
|
+
mutationObserver: Uc,
|
|
10102
10102
|
patch: dt,
|
|
10103
10103
|
wrapCanvasContextDrawImage: Zy
|
|
10104
10104
|
};
|
|
@@ -10159,22 +10159,22 @@ function Bn(e, t, i, n, s = window) {
|
|
|
10159
10159
|
}
|
|
10160
10160
|
let vn = Date.now;
|
|
10161
10161
|
/* @__PURE__ */ /[1-9][0-9]{12}/.test(Date.now().toString()) || (vn = () => (/* @__PURE__ */ new Date()).getTime());
|
|
10162
|
-
function
|
|
10162
|
+
function Fc(e) {
|
|
10163
10163
|
var t, i, n, s;
|
|
10164
10164
|
const r = e.document;
|
|
10165
10165
|
return {
|
|
10166
|
-
left: r.scrollingElement ? r.scrollingElement.scrollLeft : e.pageXOffset !== void 0 ? e.pageXOffset : r.documentElement.scrollLeft || r?.body && ((t =
|
|
10167
|
-
top: r.scrollingElement ? r.scrollingElement.scrollTop : e.pageYOffset !== void 0 ? e.pageYOffset : r?.documentElement.scrollTop || r?.body && ((n =
|
|
10166
|
+
left: r.scrollingElement ? r.scrollingElement.scrollLeft : e.pageXOffset !== void 0 ? e.pageXOffset : r.documentElement.scrollLeft || r?.body && ((t = z.parentElement(r.body)) == null ? void 0 : t.scrollLeft) || ((i = r?.body) == null ? void 0 : i.scrollLeft) || 0,
|
|
10167
|
+
top: r.scrollingElement ? r.scrollingElement.scrollTop : e.pageYOffset !== void 0 ? e.pageYOffset : r?.documentElement.scrollTop || r?.body && ((n = z.parentElement(r.body)) == null ? void 0 : n.scrollTop) || ((s = r?.body) == null ? void 0 : s.scrollTop) || 0
|
|
10168
10168
|
};
|
|
10169
10169
|
}
|
|
10170
10170
|
function Kc() {
|
|
10171
10171
|
return window.innerHeight || document.documentElement && document.documentElement.clientHeight || document.body && document.body.clientHeight;
|
|
10172
10172
|
}
|
|
10173
|
-
function
|
|
10173
|
+
function Mc() {
|
|
10174
10174
|
return window.innerWidth || document.documentElement && document.documentElement.clientWidth || document.body && document.body.clientWidth;
|
|
10175
10175
|
}
|
|
10176
|
-
function
|
|
10177
|
-
return e ? e.nodeType === e.ELEMENT_NODE ? e :
|
|
10176
|
+
function Oc(e) {
|
|
10177
|
+
return e ? e.nodeType === e.ELEMENT_NODE ? e : z.parentElement(e) : null;
|
|
10178
10178
|
}
|
|
10179
10179
|
const Ty = (e) => {
|
|
10180
10180
|
try {
|
|
@@ -10188,7 +10188,7 @@ const Ty = (e) => {
|
|
|
10188
10188
|
function pe(e, t, i, n) {
|
|
10189
10189
|
if (!e)
|
|
10190
10190
|
return !1;
|
|
10191
|
-
const s =
|
|
10191
|
+
const s = Oc(e);
|
|
10192
10192
|
if (!s)
|
|
10193
10193
|
return !1;
|
|
10194
10194
|
try {
|
|
@@ -10205,14 +10205,14 @@ function Ny(e, t) {
|
|
|
10205
10205
|
function ps(e, t, i) {
|
|
10206
10206
|
return e.tagName === "TITLE" && i.headTitleMutations ? !0 : t.getId(e) === oi;
|
|
10207
10207
|
}
|
|
10208
|
-
function
|
|
10208
|
+
function Ec(e, t) {
|
|
10209
10209
|
if ($t(e))
|
|
10210
10210
|
return !1;
|
|
10211
10211
|
const i = t.getId(e);
|
|
10212
10212
|
if (!t.has(i))
|
|
10213
10213
|
return !0;
|
|
10214
|
-
const n =
|
|
10215
|
-
return n && n.nodeType === e.DOCUMENT_NODE ? !1 : n ?
|
|
10214
|
+
const n = z.parentNode(e);
|
|
10215
|
+
return n && n.nodeType === e.DOCUMENT_NODE ? !1 : n ? Ec(n, t) : !0;
|
|
10216
10216
|
}
|
|
10217
10217
|
function or(e) {
|
|
10218
10218
|
return !!e.changedTouches;
|
|
@@ -10220,18 +10220,18 @@ function or(e) {
|
|
|
10220
10220
|
function Ly(e = window) {
|
|
10221
10221
|
"NodeList" in e && !e.NodeList.prototype.forEach && (e.NodeList.prototype.forEach = Array.prototype.forEach), "DOMTokenList" in e && !e.DOMTokenList.prototype.forEach && (e.DOMTokenList.prototype.forEach = Array.prototype.forEach);
|
|
10222
10222
|
}
|
|
10223
|
-
function
|
|
10223
|
+
function Hc(e, t) {
|
|
10224
10224
|
return !!(e.nodeName === "IFRAME" && t.getMeta(e));
|
|
10225
10225
|
}
|
|
10226
|
-
function
|
|
10226
|
+
function zc(e, t) {
|
|
10227
10227
|
return !!(e.nodeName === "LINK" && e.nodeType === e.ELEMENT_NODE && e.getAttribute && e.getAttribute("rel") === "stylesheet" && t.getMeta(e));
|
|
10228
10228
|
}
|
|
10229
10229
|
function lr(e) {
|
|
10230
|
-
return e ? e instanceof Kr && "shadowRoot" in e ? !!e.shadowRoot : !!
|
|
10230
|
+
return e ? e instanceof Kr && "shadowRoot" in e ? !!e.shadowRoot : !!z.shadowRoot(e) : !1;
|
|
10231
10231
|
}
|
|
10232
10232
|
class Jy {
|
|
10233
10233
|
constructor() {
|
|
10234
|
-
|
|
10234
|
+
W(this, "id", 1), W(this, "styleIDMap", /* @__PURE__ */ new WeakMap()), W(this, "idStyleMap", /* @__PURE__ */ new Map());
|
|
10235
10235
|
}
|
|
10236
10236
|
getId(t) {
|
|
10237
10237
|
var i;
|
|
@@ -10261,7 +10261,7 @@ class Jy {
|
|
|
10261
10261
|
function Pc(e) {
|
|
10262
10262
|
var t;
|
|
10263
10263
|
let i = null;
|
|
10264
|
-
return "getRootNode" in e && ((t =
|
|
10264
|
+
return "getRootNode" in e && ((t = z.getRootNode(e)) == null ? void 0 : t.nodeType) === Node.DOCUMENT_FRAGMENT_NODE && z.host(z.getRootNode(e)) && (i = z.host(z.getRootNode(e))), i;
|
|
10265
10265
|
}
|
|
10266
10266
|
function Yy(e) {
|
|
10267
10267
|
let t = e, i;
|
|
@@ -10269,23 +10269,23 @@ function Yy(e) {
|
|
|
10269
10269
|
t = i;
|
|
10270
10270
|
return t;
|
|
10271
10271
|
}
|
|
10272
|
-
function
|
|
10272
|
+
function Uy(e) {
|
|
10273
10273
|
const t = e.ownerDocument;
|
|
10274
10274
|
if (!t) return !1;
|
|
10275
10275
|
const i = Yy(e);
|
|
10276
|
-
return
|
|
10276
|
+
return z.contains(t, i);
|
|
10277
10277
|
}
|
|
10278
10278
|
function Bc(e) {
|
|
10279
10279
|
const t = e.ownerDocument;
|
|
10280
|
-
return t ?
|
|
10280
|
+
return t ? z.contains(t, e) || Uy(e) : !1;
|
|
10281
10281
|
}
|
|
10282
10282
|
var j = /* @__PURE__ */ ((e) => (e[e.DomContentLoaded = 0] = "DomContentLoaded", e[e.Load = 1] = "Load", e[e.FullSnapshot = 2] = "FullSnapshot", e[e.IncrementalSnapshot = 3] = "IncrementalSnapshot", e[e.Meta = 4] = "Meta", e[e.Custom = 5] = "Custom", e[e.Plugin = 6] = "Plugin", e))(j || {}), P = /* @__PURE__ */ ((e) => (e[e.Mutation = 0] = "Mutation", e[e.MouseMove = 1] = "MouseMove", e[e.MouseInteraction = 2] = "MouseInteraction", e[e.Scroll = 3] = "Scroll", e[e.ViewportResize = 4] = "ViewportResize", e[e.Input = 5] = "Input", e[e.TouchMove = 6] = "TouchMove", e[e.MediaInteraction = 7] = "MediaInteraction", e[e.StyleSheetRule = 8] = "StyleSheetRule", e[e.CanvasMutation = 9] = "CanvasMutation", e[e.Font = 10] = "Font", e[e.Log = 11] = "Log", e[e.Drag = 12] = "Drag", e[e.StyleDeclaration = 13] = "StyleDeclaration", e[e.Selection = 14] = "Selection", e[e.AdoptedStyleSheet = 15] = "AdoptedStyleSheet", e[e.CustomElement = 16] = "CustomElement", e))(P || {}), Ge = /* @__PURE__ */ ((e) => (e[e.MouseUp = 0] = "MouseUp", e[e.MouseDown = 1] = "MouseDown", e[e.Click = 2] = "Click", e[e.ContextMenu = 3] = "ContextMenu", e[e.DblClick = 4] = "DblClick", e[e.Focus = 5] = "Focus", e[e.Blur = 6] = "Blur", e[e.TouchStart = 7] = "TouchStart", e[e.TouchMove_Departed = 8] = "TouchMove_Departed", e[e.TouchEnd = 9] = "TouchEnd", e[e.TouchCancel = 10] = "TouchCancel", e))(Ge || {}), _e = /* @__PURE__ */ ((e) => (e[e.Mouse = 0] = "Mouse", e[e.Pen = 1] = "Pen", e[e.Touch = 2] = "Touch", e))(_e || {}), Lt = /* @__PURE__ */ ((e) => (e[e["2D"] = 0] = "2D", e[e.WebGL = 1] = "WebGL", e[e.WebGL2 = 2] = "WebGL2", e))(Lt || {}), Zt = /* @__PURE__ */ ((e) => (e[e.Play = 0] = "Play", e[e.Pause = 1] = "Pause", e[e.Seeked = 2] = "Seeked", e[e.VolumeChange = 3] = "VolumeChange", e[e.RateChange = 4] = "RateChange", e))(Zt || {}), Dc = /* @__PURE__ */ ((e) => (e[e.Document = 0] = "Document", e[e.DocumentType = 1] = "DocumentType", e[e.Element = 2] = "Element", e[e.Text = 3] = "Text", e[e.CDATA = 4] = "CDATA", e[e.Comment = 5] = "Comment", e))(Dc || {});
|
|
10283
10283
|
function ll(e) {
|
|
10284
10284
|
return "__ln" in e;
|
|
10285
10285
|
}
|
|
10286
|
-
class
|
|
10286
|
+
class Fy {
|
|
10287
10287
|
constructor() {
|
|
10288
|
-
|
|
10288
|
+
W(this, "length", 0), W(this, "head", null), W(this, "tail", null);
|
|
10289
10289
|
}
|
|
10290
10290
|
get(t) {
|
|
10291
10291
|
if (t >= this.length)
|
|
@@ -10319,18 +10319,18 @@ class Uy {
|
|
|
10319
10319
|
const al = (e, t) => `${e}@${t}`;
|
|
10320
10320
|
class Ky {
|
|
10321
10321
|
constructor() {
|
|
10322
|
-
|
|
10322
|
+
W(this, "frozen", !1), W(this, "locked", !1), W(this, "texts", []), W(this, "attributes", []), W(this, "attributeMap", /* @__PURE__ */ new WeakMap()), W(this, "removes", []), W(this, "mapRemoves", []), W(this, "movedMap", {}), W(this, "addedSet", /* @__PURE__ */ new Set()), W(this, "movedSet", /* @__PURE__ */ new Set()), W(this, "droppedSet", /* @__PURE__ */ new Set()), W(this, "removesSubTreeCache", /* @__PURE__ */ new Set()), W(this, "mutationCb"), W(this, "blockClass"), W(this, "blockSelector"), W(this, "maskTextClass"), W(this, "maskTextSelector"), W(this, "inlineStylesheet"), W(this, "maskInputOptions"), W(this, "maskTextFn"), W(this, "maskInputFn"), W(this, "keepIframeSrcFn"), W(this, "recordCanvas"), W(this, "inlineImages"), W(this, "inlineVideos"), W(this, "privacySetting"), W(this, "slimDOMOptions"), W(this, "dataURLOptions"), W(this, "doc"), W(this, "mirror"), W(this, "iframeManager"), W(this, "stylesheetManager"), W(this, "shadowDomManager"), W(this, "canvasManager"), W(this, "processedNodeManager"), W(this, "unattachedDoc"), W(this, "processMutations", (t) => {
|
|
10323
10323
|
t.forEach(this.processMutation), this.emit();
|
|
10324
|
-
}),
|
|
10324
|
+
}), W(this, "emit", () => {
|
|
10325
10325
|
if (this.frozen || this.locked)
|
|
10326
10326
|
return;
|
|
10327
|
-
const t = [], i = /* @__PURE__ */ new Set(), n = new
|
|
10327
|
+
const t = [], i = /* @__PURE__ */ new Set(), n = new Fy(), s = (a) => {
|
|
10328
10328
|
let c = a, u = oi;
|
|
10329
10329
|
for (; u === oi; )
|
|
10330
10330
|
c = c && c.nextSibling, u = c && this.mirror.getId(c);
|
|
10331
10331
|
return u;
|
|
10332
10332
|
}, r = (a) => {
|
|
10333
|
-
const c =
|
|
10333
|
+
const c = z.parentNode(a);
|
|
10334
10334
|
if (!c || !Bc(a))
|
|
10335
10335
|
return;
|
|
10336
10336
|
let u = !1;
|
|
@@ -10363,9 +10363,9 @@ class Ky {
|
|
|
10363
10363
|
inlineVideos: this.inlineVideos,
|
|
10364
10364
|
privacySetting: this.privacySetting,
|
|
10365
10365
|
onSerialize: (b) => {
|
|
10366
|
-
|
|
10366
|
+
Hc(b, this.mirror) && this.iframeManager.addIframe(b), zc(b, this.mirror) && this.stylesheetManager.trackLinkElement(
|
|
10367
10367
|
b
|
|
10368
|
-
), lr(a) && this.shadowDomManager.addShadowRoot(
|
|
10368
|
+
), lr(a) && this.shadowDomManager.addShadowRoot(z.shadowRoot(a), this.doc);
|
|
10369
10369
|
},
|
|
10370
10370
|
onIframeLoad: (b, d) => {
|
|
10371
10371
|
this.iframeManager.attachIframe(b, d), this.shadowDomManager.observeAttachShadow(b);
|
|
@@ -10384,14 +10384,14 @@ class Ky {
|
|
|
10384
10384
|
for (; this.mapRemoves.length; )
|
|
10385
10385
|
this.mirror.removeNodeFromMap(this.mapRemoves.shift());
|
|
10386
10386
|
for (const a of this.movedSet)
|
|
10387
|
-
cl(this.removesSubTreeCache, a) && !this.movedSet.has(
|
|
10387
|
+
cl(this.removesSubTreeCache, a) && !this.movedSet.has(z.parentNode(a)) || r(a);
|
|
10388
10388
|
for (const a of this.addedSet)
|
|
10389
10389
|
!ul(this.droppedSet, a) && !cl(this.removesSubTreeCache, a) || ul(this.movedSet, a) ? r(a) : this.droppedSet.add(a);
|
|
10390
10390
|
let l = null;
|
|
10391
10391
|
for (; n.length; ) {
|
|
10392
10392
|
let a = null;
|
|
10393
10393
|
if (l) {
|
|
10394
|
-
const c = this.mirror.getId(
|
|
10394
|
+
const c = this.mirror.getId(z.parentNode(l.value)), u = s(l.value);
|
|
10395
10395
|
c !== -1 && u !== -1 && (a = l);
|
|
10396
10396
|
}
|
|
10397
10397
|
if (!a) {
|
|
@@ -10399,15 +10399,15 @@ class Ky {
|
|
|
10399
10399
|
for (; c; ) {
|
|
10400
10400
|
const u = c;
|
|
10401
10401
|
if (c = c.previous, u) {
|
|
10402
|
-
const h = this.mirror.getId(
|
|
10402
|
+
const h = this.mirror.getId(z.parentNode(u.value));
|
|
10403
10403
|
if (s(u.value) === -1) continue;
|
|
10404
10404
|
if (h !== -1) {
|
|
10405
10405
|
a = u;
|
|
10406
10406
|
break;
|
|
10407
10407
|
} else {
|
|
10408
|
-
const p = u.value, m =
|
|
10408
|
+
const p = u.value, m = z.parentNode(p);
|
|
10409
10409
|
if (m && m.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
|
|
10410
|
-
const b =
|
|
10410
|
+
const b = z.host(m);
|
|
10411
10411
|
if (this.mirror.getId(b) !== -1) {
|
|
10412
10412
|
a = u;
|
|
10413
10413
|
break;
|
|
@@ -10427,7 +10427,7 @@ class Ky {
|
|
|
10427
10427
|
const o = {
|
|
10428
10428
|
texts: this.texts.map((a) => {
|
|
10429
10429
|
var c, u;
|
|
10430
|
-
const h = a.node, p =
|
|
10430
|
+
const h = a.node, p = z.parentNode(h);
|
|
10431
10431
|
p && p.tagName === "TEXTAREA" && this.genTextAreaValueMutation(p);
|
|
10432
10432
|
let m = a.value;
|
|
10433
10433
|
const b = this.privacySetting === "strict", d = this.privacySetting === "default" && ua(m), S = (u = (c = a.node) == null ? void 0 : c.parentElement) == null ? void 0 : u.getAttribute("data-hl-record");
|
|
@@ -10451,7 +10451,7 @@ class Ky {
|
|
|
10451
10451
|
adds: t
|
|
10452
10452
|
};
|
|
10453
10453
|
!o.texts.length && !o.attributes.length && !o.removes.length && !o.adds.length || (this.texts = [], this.attributes = [], this.attributeMap = /* @__PURE__ */ new WeakMap(), this.removes = [], this.addedSet = /* @__PURE__ */ new Set(), this.movedSet = /* @__PURE__ */ new Set(), this.droppedSet = /* @__PURE__ */ new Set(), this.removesSubTreeCache = /* @__PURE__ */ new Set(), this.movedMap = {}, this.mutationCb(o));
|
|
10454
|
-
}),
|
|
10454
|
+
}), W(this, "genTextAreaValueMutation", (t) => {
|
|
10455
10455
|
let i = this.attributeMap.get(t);
|
|
10456
10456
|
i || (i = {
|
|
10457
10457
|
node: t,
|
|
@@ -10460,8 +10460,8 @@ class Ky {
|
|
|
10460
10460
|
_unchangedStyles: {}
|
|
10461
10461
|
}, this.attributes.push(i), this.attributeMap.set(t, i));
|
|
10462
10462
|
const n = Array.from(
|
|
10463
|
-
|
|
10464
|
-
(s) =>
|
|
10463
|
+
z.childNodes(t),
|
|
10464
|
+
(s) => z.textContent(s) || ""
|
|
10465
10465
|
).join("");
|
|
10466
10466
|
i.attributes.value = fn({
|
|
10467
10467
|
overwriteRecord: null,
|
|
@@ -10472,11 +10472,11 @@ class Ky {
|
|
|
10472
10472
|
value: n,
|
|
10473
10473
|
maskInputFn: this.maskInputFn
|
|
10474
10474
|
});
|
|
10475
|
-
}),
|
|
10475
|
+
}), W(this, "processMutation", (t) => {
|
|
10476
10476
|
if (!ps(t.target, this.mirror, this.slimDOMOptions))
|
|
10477
10477
|
switch (t.type) {
|
|
10478
10478
|
case "characterData": {
|
|
10479
|
-
const i =
|
|
10479
|
+
const i = z.textContent(t.target);
|
|
10480
10480
|
!pe(t.target, this.blockClass, this.blockSelector, !1) && i !== t.oldValue && this.texts.push({
|
|
10481
10481
|
value: ba(
|
|
10482
10482
|
t.target,
|
|
@@ -10484,7 +10484,7 @@ class Ky {
|
|
|
10484
10484
|
this.maskTextSelector,
|
|
10485
10485
|
!0
|
|
10486
10486
|
// checkAncestors
|
|
10487
|
-
) && i ? this.maskTextFn ? this.maskTextFn(i,
|
|
10487
|
+
) && i ? this.maskTextFn ? this.maskTextFn(i, Oc(t.target)) : i.replace(/[\S]/g, "*") : i,
|
|
10488
10488
|
node: t.target
|
|
10489
10489
|
});
|
|
10490
10490
|
break;
|
|
@@ -10557,17 +10557,17 @@ class Ky {
|
|
|
10557
10557
|
return;
|
|
10558
10558
|
}
|
|
10559
10559
|
t.addedNodes.forEach((i) => this.genAdds(i, t.target)), t.removedNodes.forEach((i) => {
|
|
10560
|
-
const n = this.mirror.getId(i), s = $t(t.target) ? this.mirror.getId(
|
|
10561
|
-
pe(t.target, this.blockClass, this.blockSelector, !1) || ps(i, this.mirror, this.slimDOMOptions) || !Ny(i, this.mirror) || (this.addedSet.has(i) ? (ar(this.addedSet, i), this.droppedSet.add(i)) : this.addedSet.has(t.target) && n === -1 ||
|
|
10560
|
+
const n = this.mirror.getId(i), s = $t(t.target) ? this.mirror.getId(z.host(t.target)) : this.mirror.getId(t.target);
|
|
10561
|
+
pe(t.target, this.blockClass, this.blockSelector, !1) || ps(i, this.mirror, this.slimDOMOptions) || !Ny(i, this.mirror) || (this.addedSet.has(i) ? (ar(this.addedSet, i), this.droppedSet.add(i)) : this.addedSet.has(t.target) && n === -1 || Ec(t.target, this.mirror) || (this.movedSet.has(i) && this.movedMap[al(n, s)] ? ar(this.movedSet, i) : (this.removes.push({
|
|
10562
10562
|
parentId: s,
|
|
10563
10563
|
id: n,
|
|
10564
10564
|
isShadow: $t(t.target) && qt(t.target) ? !0 : void 0
|
|
10565
|
-
}),
|
|
10565
|
+
}), My(i, this.removesSubTreeCache))), this.mapRemoves.push(i));
|
|
10566
10566
|
});
|
|
10567
10567
|
break;
|
|
10568
10568
|
}
|
|
10569
10569
|
}
|
|
10570
|
-
}),
|
|
10570
|
+
}), W(this, "genAdds", (t, i) => {
|
|
10571
10571
|
if (!this.processedNodeManager.inOtherBuffer(t, this) && !(this.addedSet.has(t) || this.movedSet.has(t))) {
|
|
10572
10572
|
if (this.mirror.hasNode(t)) {
|
|
10573
10573
|
if (ps(t, this.mirror, this.slimDOMOptions))
|
|
@@ -10577,7 +10577,7 @@ class Ky {
|
|
|
10577
10577
|
i && this.mirror.hasNode(i) && (n = this.mirror.getId(i)), n && n !== -1 && (this.movedMap[al(this.mirror.getId(t), n)] = !0);
|
|
10578
10578
|
} else
|
|
10579
10579
|
this.addedSet.add(t), this.droppedSet.delete(t);
|
|
10580
|
-
pe(t, this.blockClass, this.blockSelector, !1) || (
|
|
10580
|
+
pe(t, this.blockClass, this.blockSelector, !1) || (z.childNodes(t).forEach((n) => this.genAdds(n)), lr(t) && z.childNodes(z.shadowRoot(t)).forEach((n) => {
|
|
10581
10581
|
this.processedNodeManager.add(n, this), this.genAdds(n, t);
|
|
10582
10582
|
}));
|
|
10583
10583
|
}
|
|
@@ -10632,34 +10632,34 @@ class Ky {
|
|
|
10632
10632
|
}
|
|
10633
10633
|
}
|
|
10634
10634
|
function ar(e, t) {
|
|
10635
|
-
e.delete(t),
|
|
10635
|
+
e.delete(t), z.childNodes(t).forEach((i) => ar(e, i));
|
|
10636
10636
|
}
|
|
10637
|
-
function
|
|
10637
|
+
function My(e, t) {
|
|
10638
10638
|
const i = [e];
|
|
10639
10639
|
for (; i.length; ) {
|
|
10640
10640
|
const n = i.pop();
|
|
10641
|
-
t.has(n) || (t.add(n),
|
|
10641
|
+
t.has(n) || (t.add(n), z.childNodes(n).forEach((s) => i.push(s)));
|
|
10642
10642
|
}
|
|
10643
10643
|
}
|
|
10644
10644
|
function cl(e, t, i) {
|
|
10645
|
-
return e.size === 0 ? !1 :
|
|
10645
|
+
return e.size === 0 ? !1 : Oy(e, t);
|
|
10646
10646
|
}
|
|
10647
|
-
function
|
|
10648
|
-
const n =
|
|
10647
|
+
function Oy(e, t, i) {
|
|
10648
|
+
const n = z.parentNode(t);
|
|
10649
10649
|
return n ? e.has(n) : !1;
|
|
10650
10650
|
}
|
|
10651
10651
|
function ul(e, t) {
|
|
10652
10652
|
return e.size === 0 ? !1 : jc(e, t);
|
|
10653
10653
|
}
|
|
10654
10654
|
function jc(e, t) {
|
|
10655
|
-
const i =
|
|
10655
|
+
const i = z.parentNode(t);
|
|
10656
10656
|
return i ? e.has(i) ? !0 : jc(e, i) : !1;
|
|
10657
10657
|
}
|
|
10658
10658
|
let ei;
|
|
10659
|
-
function
|
|
10659
|
+
function Ey(e) {
|
|
10660
10660
|
ei = e;
|
|
10661
10661
|
}
|
|
10662
|
-
function
|
|
10662
|
+
function Hy() {
|
|
10663
10663
|
ei = void 0;
|
|
10664
10664
|
}
|
|
10665
10665
|
const B = (e) => ei ? (...t) => {
|
|
@@ -10686,7 +10686,7 @@ function Si(e) {
|
|
|
10686
10686
|
function Qc(e, t) {
|
|
10687
10687
|
const i = new Ky();
|
|
10688
10688
|
rt.push(i), i.init(e);
|
|
10689
|
-
const n = new (
|
|
10689
|
+
const n = new (Uc())(
|
|
10690
10690
|
B(i.processMutations.bind(i))
|
|
10691
10691
|
);
|
|
10692
10692
|
return n.observe(t, {
|
|
@@ -10698,7 +10698,7 @@ function Qc(e, t) {
|
|
|
10698
10698
|
subtree: !0
|
|
10699
10699
|
}), n;
|
|
10700
10700
|
}
|
|
10701
|
-
function
|
|
10701
|
+
function zy({
|
|
10702
10702
|
mousemoveCb: e,
|
|
10703
10703
|
sampling: t,
|
|
10704
10704
|
doc: i,
|
|
@@ -10831,7 +10831,7 @@ function Ac({
|
|
|
10831
10831
|
return;
|
|
10832
10832
|
const c = i.getId(a);
|
|
10833
10833
|
if (a === t && t.defaultView) {
|
|
10834
|
-
const u =
|
|
10834
|
+
const u = Fc(t.defaultView);
|
|
10835
10835
|
e({
|
|
10836
10836
|
id: c,
|
|
10837
10837
|
x: u.left,
|
|
@@ -10854,7 +10854,7 @@ function By({ viewportResizeCb: e }, { win: t }) {
|
|
|
10854
10854
|
const s = B(
|
|
10855
10855
|
bi(
|
|
10856
10856
|
B(() => {
|
|
10857
|
-
const r = Kc(), l =
|
|
10857
|
+
const r = Kc(), l = Mc();
|
|
10858
10858
|
(i !== r || n !== l) && (e({
|
|
10859
10859
|
width: Number(l),
|
|
10860
10860
|
height: Number(r)
|
|
@@ -10881,8 +10881,8 @@ function jy({
|
|
|
10881
10881
|
}) {
|
|
10882
10882
|
function h(I) {
|
|
10883
10883
|
let V = Si(I);
|
|
10884
|
-
const
|
|
10885
|
-
if (V && X === "OPTION" && (V =
|
|
10884
|
+
const C = I.isTrusted, X = V && V.tagName;
|
|
10885
|
+
if (V && X === "OPTION" && (V = z.parentElement(V)), !V || !X || Dy.indexOf(X) < 0 || pe(V, n, s, !0) || V.classList.contains(r) || l && V.matches(l))
|
|
10886
10886
|
return;
|
|
10887
10887
|
let G = V.value, k = !1;
|
|
10888
10888
|
const v = yn(V) || "", w = V.getAttribute("data-hl-record");
|
|
@@ -10901,7 +10901,7 @@ function jy({
|
|
|
10901
10901
|
maskInputFn: a
|
|
10902
10902
|
})), p(
|
|
10903
10903
|
V,
|
|
10904
|
-
u ? { text: G, isChecked: k, userTriggered:
|
|
10904
|
+
u ? { text: G, isChecked: k, userTriggered: C } : { text: G, isChecked: k }
|
|
10905
10905
|
);
|
|
10906
10906
|
const g = V.name;
|
|
10907
10907
|
v === "radio" && g && k && t.querySelectorAll(`input[type="radio"][name="${g}"]`).forEach((R) => {
|
|
@@ -10915,8 +10915,8 @@ function jy({
|
|
|
10915
10915
|
});
|
|
10916
10916
|
}
|
|
10917
10917
|
function p(I, V) {
|
|
10918
|
-
const
|
|
10919
|
-
if (!
|
|
10918
|
+
const C = dl.get(I);
|
|
10919
|
+
if (!C || C.text !== V.text || C.isChecked !== V.isChecked) {
|
|
10920
10920
|
dl.set(I, V);
|
|
10921
10921
|
const X = i.getId(I);
|
|
10922
10922
|
B(e)(Se(Y({}, V), {
|
|
@@ -11134,7 +11134,7 @@ function _c({
|
|
|
11134
11134
|
}, i) {
|
|
11135
11135
|
var n, s, r;
|
|
11136
11136
|
let l = null;
|
|
11137
|
-
i.nodeName === "#document" ? l = e.getId(i) : l = e.getId(
|
|
11137
|
+
i.nodeName === "#document" ? l = e.getId(i) : l = e.getId(z.host(i));
|
|
11138
11138
|
const o = i.nodeName === "#document" ? (n = i.defaultView) == null ? void 0 : n.Document : (r = (s = i.ownerDocument) == null ? void 0 : s.defaultView) == null ? void 0 : r.ShadowRoot, a = o != null && o.prototype ? Object.getOwnPropertyDescriptor(
|
|
11139
11139
|
o?.prototype,
|
|
11140
11140
|
"adoptedStyleSheets"
|
|
@@ -11401,7 +11401,7 @@ function ig(e, t = {}) {
|
|
|
11401
11401
|
tg(e, t);
|
|
11402
11402
|
let n;
|
|
11403
11403
|
e.recordDOM && (n = Qc(e, e.doc));
|
|
11404
|
-
const s =
|
|
11404
|
+
const s = zy(e), r = Py(e), l = Ac(e), o = By(e, {
|
|
11405
11405
|
win: i
|
|
11406
11406
|
}), a = jy(e), c = _y(e);
|
|
11407
11407
|
let u = () => {
|
|
@@ -11431,7 +11431,7 @@ function Di(e) {
|
|
|
11431
11431
|
}
|
|
11432
11432
|
class hl {
|
|
11433
11433
|
constructor(t) {
|
|
11434
|
-
|
|
11434
|
+
W(this, "iframeIdToRemoteIdMap", /* @__PURE__ */ new WeakMap()), W(this, "iframeRemoteIdToIdMap", /* @__PURE__ */ new WeakMap()), this.generateIdFn = t;
|
|
11435
11435
|
}
|
|
11436
11436
|
getId(t, i, n, s) {
|
|
11437
11437
|
const r = n || this.getIdToRemoteIdMap(t), l = s || this.getRemoteIdToIdMap(t);
|
|
@@ -11470,7 +11470,7 @@ class hl {
|
|
|
11470
11470
|
}
|
|
11471
11471
|
class ng {
|
|
11472
11472
|
constructor(t) {
|
|
11473
|
-
|
|
11473
|
+
W(this, "iframes", /* @__PURE__ */ new WeakMap()), W(this, "crossOriginIframeMap", /* @__PURE__ */ new WeakMap()), W(this, "crossOriginIframeMirror", new hl(ha)), W(this, "crossOriginIframeStyleMirror"), W(this, "crossOriginIframeRootIdMap", /* @__PURE__ */ new WeakMap()), W(this, "mirror"), W(this, "mutationCb"), W(this, "wrappedEmit"), W(this, "loadListener"), W(this, "stylesheetManager"), W(this, "recordCrossOriginIframes"), this.mutationCb = t.mutationCb, this.wrappedEmit = t.wrappedEmit, this.stylesheetManager = t.stylesheetManager, this.recordCrossOriginIframes = t.recordCrossOriginIframes, this.crossOriginIframeStyleMirror = new hl(
|
|
11474
11474
|
this.stylesheetManager.styleMirror.generateId.bind(
|
|
11475
11475
|
this.stylesheetManager.styleMirror
|
|
11476
11476
|
)
|
|
@@ -11635,7 +11635,7 @@ class ng {
|
|
|
11635
11635
|
}
|
|
11636
11636
|
class sg {
|
|
11637
11637
|
constructor(t) {
|
|
11638
|
-
|
|
11638
|
+
W(this, "shadowDoms", /* @__PURE__ */ new WeakSet()), W(this, "mutationCb"), W(this, "scrollCb"), W(this, "bypassOptions"), W(this, "mirror"), W(this, "restoreHandlers", []), this.mutationCb = t.mutationCb, this.scrollCb = t.scrollCb, this.bypassOptions = t.bypassOptions, this.mirror = t.mirror, this.init();
|
|
11639
11639
|
}
|
|
11640
11640
|
init() {
|
|
11641
11641
|
this.reset(), this.patchAttachShadow(Element, document);
|
|
@@ -11663,7 +11663,7 @@ class sg {
|
|
|
11663
11663
|
), setTimeout(() => {
|
|
11664
11664
|
t.adoptedStyleSheets && t.adoptedStyleSheets.length > 0 && this.bypassOptions.stylesheetManager.adoptStyleSheets(
|
|
11665
11665
|
t.adoptedStyleSheets,
|
|
11666
|
-
this.mirror.getId(
|
|
11666
|
+
this.mirror.getId(z.host(t))
|
|
11667
11667
|
), this.restoreHandlers.push(
|
|
11668
11668
|
_c(
|
|
11669
11669
|
{
|
|
@@ -11695,7 +11695,7 @@ class sg {
|
|
|
11695
11695
|
"attachShadow",
|
|
11696
11696
|
function(s) {
|
|
11697
11697
|
return function(r) {
|
|
11698
|
-
const l = s.call(this, r), o =
|
|
11698
|
+
const l = s.call(this, r), o = z.shadowRoot(this);
|
|
11699
11699
|
return o && Bc(this) && n.addShadowRoot(o, i), l;
|
|
11700
11700
|
};
|
|
11701
11701
|
}
|
|
@@ -11992,7 +11992,7 @@ function hg(e) {
|
|
|
11992
11992
|
}
|
|
11993
11993
|
class pg {
|
|
11994
11994
|
constructor(t) {
|
|
11995
|
-
|
|
11995
|
+
W(this, "pendingCanvasMutations", /* @__PURE__ */ new Map()), W(this, "rafStamps", { latestId: 0, invokeId: null }), W(this, "mirror"), W(this, "logger"), W(this, "worker"), W(this, "snapshotInProgressMap", /* @__PURE__ */ new Map()), W(this, "lastSnapshotTime", /* @__PURE__ */ new Map()), W(this, "options"), W(this, "mutationCb"), W(this, "resetObservers"), W(this, "frozen", !1), W(this, "locked", !1), W(this, "processMutation", (h, p) => {
|
|
11996
11996
|
(this.rafStamps.invokeId && this.rafStamps.latestId !== this.rafStamps.invokeId || !this.rafStamps.invokeId) && (this.rafStamps.invokeId = this.rafStamps.latestId), this.pendingCanvasMutations.has(h) || this.pendingCanvasMutations.set(h, []), this.pendingCanvasMutations.get(h).push(p);
|
|
11997
11997
|
});
|
|
11998
11998
|
const {
|
|
@@ -12016,7 +12016,7 @@ class pg {
|
|
|
12016
12016
|
});
|
|
12017
12017
|
return;
|
|
12018
12018
|
}
|
|
12019
|
-
const { base64: m, type: b, dx: d, dy: S, dw: I, dh: V } = h.data,
|
|
12019
|
+
const { base64: m, type: b, dx: d, dy: S, dw: I, dh: V } = h.data, C = {
|
|
12020
12020
|
id: p,
|
|
12021
12021
|
type: Lt["2D"],
|
|
12022
12022
|
commands: [
|
|
@@ -12047,7 +12047,7 @@ class pg {
|
|
|
12047
12047
|
}
|
|
12048
12048
|
]
|
|
12049
12049
|
};
|
|
12050
|
-
this.debug(null, "canvas worker recording mutation",
|
|
12050
|
+
this.debug(null, "canvas worker recording mutation", C), this.mutationCb(C);
|
|
12051
12051
|
}, this.options = t, l && i === "all" ? (this.debug(null, "initializing canvas mutation observer", { sampling: i }), this.initCanvasMutationObserver(n, s, r)) : l && typeof i == "number" && (this.debug(null, "initializing canvas fps observer", { sampling: i }), this.initCanvasFPSObserver(
|
|
12052
12052
|
o,
|
|
12053
12053
|
a,
|
|
@@ -12159,50 +12159,50 @@ class pg {
|
|
|
12159
12159
|
!0
|
|
12160
12160
|
), h = 1e3 / n;
|
|
12161
12161
|
let p = 0, m;
|
|
12162
|
-
const b = /* @__PURE__ */ new Map(), d = (
|
|
12162
|
+
const b = /* @__PURE__ */ new Map(), d = (C, X) => {
|
|
12163
12163
|
const G = [];
|
|
12164
|
-
|
|
12165
|
-
const k = document.createNodeIterator(
|
|
12164
|
+
C.querySelectorAll(X).forEach((w) => G.push(w));
|
|
12165
|
+
const k = document.createNodeIterator(C, Node.ELEMENT_NODE);
|
|
12166
12166
|
let v;
|
|
12167
12167
|
for (; v = k.nextNode(); )
|
|
12168
12168
|
v != null && v.shadowRoot && G.push(...d(v.shadowRoot, X));
|
|
12169
12169
|
return G;
|
|
12170
|
-
}, S = (
|
|
12170
|
+
}, S = (C) => {
|
|
12171
12171
|
const X = [];
|
|
12172
12172
|
return d(s.document, "canvas").forEach((G) => {
|
|
12173
12173
|
if (!pe(G, r, l, !0)) {
|
|
12174
12174
|
this.debug(G, "discovered canvas"), X.push(G);
|
|
12175
12175
|
const k = this.mirror.getId(G);
|
|
12176
|
-
b.has(k) || b.set(k,
|
|
12176
|
+
b.has(k) || b.set(k, C);
|
|
12177
12177
|
}
|
|
12178
12178
|
}), X;
|
|
12179
|
-
}, I = (
|
|
12179
|
+
}, I = (C) => {
|
|
12180
12180
|
const X = [];
|
|
12181
12181
|
return (t || i) && d(s.document, "video").forEach((G) => {
|
|
12182
12182
|
if (!(!i && G.src !== "" && G.src.indexOf("blob:") === -1) && !(!t && (G.src === "" || G.src.indexOf("blob:") !== -1)) && !pe(G, r, l, !0)) {
|
|
12183
12183
|
X.push(G);
|
|
12184
12184
|
const k = this.mirror.getId(G);
|
|
12185
|
-
b.has(k) || b.set(k,
|
|
12185
|
+
b.has(k) || b.set(k, C);
|
|
12186
12186
|
}
|
|
12187
12187
|
}), X;
|
|
12188
|
-
}, V = (
|
|
12189
|
-
if (p &&
|
|
12188
|
+
}, V = (C) => fe(this, null, function* () {
|
|
12189
|
+
if (p && C - p < h) {
|
|
12190
12190
|
m = requestAnimationFrame(V);
|
|
12191
12191
|
return;
|
|
12192
12192
|
}
|
|
12193
|
-
p =
|
|
12193
|
+
p = C;
|
|
12194
12194
|
const X = (k) => {
|
|
12195
|
-
const v = this.mirror.getId(k), w = b.get(v), g = !o.initialSnapshotDelay ||
|
|
12195
|
+
const v = this.mirror.getId(k), w = b.get(v), g = !o.initialSnapshotDelay || C - w > o.initialSnapshotDelay;
|
|
12196
12196
|
return this.debug(k, {
|
|
12197
12197
|
delay: o.initialSnapshotDelay,
|
|
12198
|
-
delta:
|
|
12198
|
+
delta: C - w,
|
|
12199
12199
|
hadLoadingTime: g
|
|
12200
12200
|
}), g;
|
|
12201
12201
|
}, G = [];
|
|
12202
12202
|
G.push(
|
|
12203
|
-
...S(
|
|
12203
|
+
...S(C).filter(X).map((k) => this.snapshot(k))
|
|
12204
12204
|
), G.push(
|
|
12205
|
-
...I(
|
|
12205
|
+
...I(C).filter(X).map((k) => fe(this, null, function* () {
|
|
12206
12206
|
this.debug(k, "starting video snapshotting");
|
|
12207
12207
|
const v = this.mirror.getId(k);
|
|
12208
12208
|
if (this.snapshotInProgressMap.get(v)) {
|
|
@@ -12218,8 +12218,8 @@ class pg {
|
|
|
12218
12218
|
const { width: w, height: g } = k.getBoundingClientRect(), { actualWidth: R, actualHeight: J } = {
|
|
12219
12219
|
actualWidth: k.videoWidth,
|
|
12220
12220
|
actualHeight: k.videoHeight
|
|
12221
|
-
},
|
|
12222
|
-
if (
|
|
12221
|
+
}, E = Math.max(R, J);
|
|
12222
|
+
if (E === 0) {
|
|
12223
12223
|
this.debug(k, "not yet ready", {
|
|
12224
12224
|
width: k.width,
|
|
12225
12225
|
height: k.height,
|
|
@@ -12231,22 +12231,22 @@ class pg {
|
|
|
12231
12231
|
return;
|
|
12232
12232
|
}
|
|
12233
12233
|
let $ = a || 1;
|
|
12234
|
-
c && ($ = Math.min($, c /
|
|
12234
|
+
c && ($ = Math.min($, c / E));
|
|
12235
12235
|
const f = R * $, y = J * $, T = yield createImageBitmap(k, {
|
|
12236
12236
|
resizeWidth: f,
|
|
12237
12237
|
resizeHeight: y
|
|
12238
|
-
}),
|
|
12238
|
+
}), U = Math.max(w, g) / E, F = R * U, N = J * U, A = (w - F) / 2, D = (g - N) / 2;
|
|
12239
12239
|
this.debug(k, "created image bitmap", {
|
|
12240
12240
|
actualWidth: R,
|
|
12241
12241
|
actualHeight: J,
|
|
12242
12242
|
boxWidth: w,
|
|
12243
12243
|
boxHeight: g,
|
|
12244
|
-
outputWidth:
|
|
12244
|
+
outputWidth: F,
|
|
12245
12245
|
outputHeight: N,
|
|
12246
12246
|
resizeWidth: f,
|
|
12247
12247
|
resizeHeight: y,
|
|
12248
12248
|
scale: $,
|
|
12249
|
-
outputScale:
|
|
12249
|
+
outputScale: U,
|
|
12250
12250
|
offsetX: A,
|
|
12251
12251
|
offsetY: D
|
|
12252
12252
|
}), this.worker.postMessage(
|
|
@@ -12257,7 +12257,7 @@ class pg {
|
|
|
12257
12257
|
height: y,
|
|
12258
12258
|
dx: A,
|
|
12259
12259
|
dy: D,
|
|
12260
|
-
dw:
|
|
12260
|
+
dw: F,
|
|
12261
12261
|
dh: N,
|
|
12262
12262
|
dataURLOptions: o.dataURLOptions,
|
|
12263
12263
|
logDebug: !!this.logger
|
|
@@ -12320,13 +12320,13 @@ class pg {
|
|
|
12320
12320
|
return;
|
|
12321
12321
|
const n = this.pendingCanvasMutations.get(t);
|
|
12322
12322
|
if (!n || i === -1) return;
|
|
12323
|
-
const s = n.map((l) =>
|
|
12323
|
+
const s = n.map((l) => Ct(l, ["type"])), { type: r } = n[0];
|
|
12324
12324
|
this.mutationCb({ id: i, type: r, commands: s }), this.pendingCanvasMutations.delete(t);
|
|
12325
12325
|
}
|
|
12326
12326
|
}
|
|
12327
12327
|
class mg {
|
|
12328
12328
|
constructor(t) {
|
|
12329
|
-
|
|
12329
|
+
W(this, "trackedLinkElements", /* @__PURE__ */ new WeakSet()), W(this, "mutationCb"), W(this, "adoptedStyleSheetCb"), W(this, "styleMirror", new Jy()), this.mutationCb = t.mutationCb, this.adoptedStyleSheetCb = t.adoptedStyleSheetCb;
|
|
12330
12330
|
}
|
|
12331
12331
|
attachLinkElement(t, i) {
|
|
12332
12332
|
"_cssText" in i.attributes && this.mutationCb({
|
|
@@ -12371,7 +12371,7 @@ class mg {
|
|
|
12371
12371
|
}
|
|
12372
12372
|
class bg {
|
|
12373
12373
|
constructor() {
|
|
12374
|
-
|
|
12374
|
+
W(this, "nodeMap", /* @__PURE__ */ new WeakMap()), W(this, "active", !1);
|
|
12375
12375
|
}
|
|
12376
12376
|
inOtherBuffer(t, i) {
|
|
12377
12377
|
const n = this.nodeMap.get(t);
|
|
@@ -12408,7 +12408,7 @@ function Be(e = {}) {
|
|
|
12408
12408
|
maskTextClass: S = "highlight-mask",
|
|
12409
12409
|
maskTextSelector: I = null,
|
|
12410
12410
|
inlineStylesheet: V = !0,
|
|
12411
|
-
maskAllInputs:
|
|
12411
|
+
maskAllInputs: C,
|
|
12412
12412
|
maskInputOptions: X,
|
|
12413
12413
|
slimDOMOptions: G,
|
|
12414
12414
|
maskInputFn: k,
|
|
@@ -12417,37 +12417,37 @@ function Be(e = {}) {
|
|
|
12417
12417
|
packFn: g,
|
|
12418
12418
|
sampling: R = {},
|
|
12419
12419
|
mousemoveWait: J,
|
|
12420
|
-
recordDOM:
|
|
12420
|
+
recordDOM: E = !0,
|
|
12421
12421
|
recordCanvas: $ = !1,
|
|
12422
12422
|
recordCrossOriginIframes: f = !1,
|
|
12423
12423
|
recordAfter: y = e.recordAfter === "DOMContentLoaded" ? e.recordAfter : "load",
|
|
12424
12424
|
userTriggeredOnInput: T = !1,
|
|
12425
|
-
collectFonts:
|
|
12426
|
-
inlineImages:
|
|
12425
|
+
collectFonts: U = !1,
|
|
12426
|
+
inlineImages: F = !1,
|
|
12427
12427
|
inlineVideos: N = !1,
|
|
12428
12428
|
plugins: A,
|
|
12429
12429
|
keepIframeSrcFn: D = () => !1,
|
|
12430
12430
|
privacySetting: de = "default",
|
|
12431
12431
|
ignoreCSSAttributes: me = /* @__PURE__ */ new Set([]),
|
|
12432
|
-
errorHandler:
|
|
12432
|
+
errorHandler: Ce,
|
|
12433
12433
|
logger: ce
|
|
12434
12434
|
} = e, ve = Y(Y({}, e.dataURLOptions), (i = (t = e.sampling) == null ? void 0 : t.canvas) == null ? void 0 : i.dataURLOptions);
|
|
12435
|
-
|
|
12435
|
+
Ey(Ce);
|
|
12436
12436
|
const tt = f ? window.parent === window : !0;
|
|
12437
|
-
let
|
|
12437
|
+
let Me = !1;
|
|
12438
12438
|
if (!tt)
|
|
12439
12439
|
try {
|
|
12440
|
-
window.parent.document && (
|
|
12440
|
+
window.parent.document && (Me = !1);
|
|
12441
12441
|
} catch {
|
|
12442
|
-
|
|
12442
|
+
Me = !0;
|
|
12443
12443
|
}
|
|
12444
12444
|
if (tt && !c)
|
|
12445
12445
|
throw new Error("emit function is required");
|
|
12446
|
-
if (!tt && !
|
|
12446
|
+
if (!tt && !Me)
|
|
12447
12447
|
return () => {
|
|
12448
12448
|
};
|
|
12449
12449
|
J !== void 0 && R.mousemove === void 0 && (R.mousemove = J), Te.reset();
|
|
12450
|
-
const Yt =
|
|
12450
|
+
const Yt = C === !0 ? {
|
|
12451
12451
|
color: !0,
|
|
12452
12452
|
date: !0,
|
|
12453
12453
|
"datetime-local": !0,
|
|
@@ -12480,19 +12480,19 @@ function Be(e = {}) {
|
|
|
12480
12480
|
headTitleMutations: G === "all"
|
|
12481
12481
|
} : G || {};
|
|
12482
12482
|
Ly();
|
|
12483
|
-
let
|
|
12483
|
+
let Ut, pt = 0;
|
|
12484
12484
|
const mt = (_) => {
|
|
12485
12485
|
for (const we of A || [])
|
|
12486
12486
|
we.eventProcessor && (_ = we.eventProcessor(_));
|
|
12487
12487
|
return g && // Disable packing events which will be emitted to parent frames.
|
|
12488
|
-
!
|
|
12488
|
+
!Me && (_ = g(_)), _;
|
|
12489
12489
|
};
|
|
12490
12490
|
oe = (_, we) => {
|
|
12491
12491
|
var se;
|
|
12492
12492
|
const re = _;
|
|
12493
12493
|
if (re.timestamp = vn(), (se = rt[0]) != null && se.isFrozen() && re.type !== j.FullSnapshot && !(re.type === j.IncrementalSnapshot && re.data.source === P.Mutation) && rt.forEach((Je) => Je.unfreeze()), tt)
|
|
12494
12494
|
c?.(mt(re), we);
|
|
12495
|
-
else if (
|
|
12495
|
+
else if (Me) {
|
|
12496
12496
|
const Je = {
|
|
12497
12497
|
type: "rrweb",
|
|
12498
12498
|
event: mt(re),
|
|
@@ -12502,12 +12502,12 @@ function Be(e = {}) {
|
|
|
12502
12502
|
window.parent.postMessage(Je, "*");
|
|
12503
12503
|
}
|
|
12504
12504
|
if (re.type === j.FullSnapshot)
|
|
12505
|
-
|
|
12505
|
+
Ut = re, pt = 0;
|
|
12506
12506
|
else if (re.type === j.IncrementalSnapshot) {
|
|
12507
12507
|
if (re.data.source === P.Mutation && re.data.isAttachIframe)
|
|
12508
12508
|
return;
|
|
12509
12509
|
pt++;
|
|
12510
|
-
const Je = h && pt >= h, te = u && re.timestamp -
|
|
12510
|
+
const Je = h && pt >= h, te = u && re.timestamp - Ut.timestamp > u;
|
|
12511
12511
|
(Je || te) && on(!0);
|
|
12512
12512
|
}
|
|
12513
12513
|
};
|
|
@@ -12518,7 +12518,7 @@ function Be(e = {}) {
|
|
|
12518
12518
|
source: P.Mutation
|
|
12519
12519
|
}, _)
|
|
12520
12520
|
});
|
|
12521
|
-
},
|
|
12521
|
+
}, zr = (_) => oe({
|
|
12522
12522
|
type: j.IncrementalSnapshot,
|
|
12523
12523
|
data: Y({
|
|
12524
12524
|
source: P.Scroll
|
|
@@ -12552,7 +12552,7 @@ function Be(e = {}) {
|
|
|
12552
12552
|
const Dn = new bg();
|
|
12553
12553
|
ti = new pg({
|
|
12554
12554
|
recordCanvas: $,
|
|
12555
|
-
recordLocalVideos:
|
|
12555
|
+
recordLocalVideos: F,
|
|
12556
12556
|
recordRemoteVideos: N,
|
|
12557
12557
|
mutationCb: Pr,
|
|
12558
12558
|
win: window,
|
|
@@ -12570,7 +12570,7 @@ function Be(e = {}) {
|
|
|
12570
12570
|
});
|
|
12571
12571
|
const Gi = new sg({
|
|
12572
12572
|
mutationCb: Qe,
|
|
12573
|
-
scrollCb:
|
|
12573
|
+
scrollCb: zr,
|
|
12574
12574
|
bypassOptions: {
|
|
12575
12575
|
blockClass: p,
|
|
12576
12576
|
blockSelector: m,
|
|
@@ -12582,7 +12582,7 @@ function Be(e = {}) {
|
|
|
12582
12582
|
maskTextFn: v,
|
|
12583
12583
|
maskInputFn: k,
|
|
12584
12584
|
recordCanvas: $,
|
|
12585
|
-
inlineImages:
|
|
12585
|
+
inlineImages: F,
|
|
12586
12586
|
inlineVideos: N,
|
|
12587
12587
|
privacySetting: de,
|
|
12588
12588
|
sampling: R,
|
|
@@ -12596,14 +12596,14 @@ function Be(e = {}) {
|
|
|
12596
12596
|
mirror: Te
|
|
12597
12597
|
});
|
|
12598
12598
|
on = (_ = !1) => {
|
|
12599
|
-
if (!
|
|
12599
|
+
if (!E)
|
|
12600
12600
|
return;
|
|
12601
12601
|
oe(
|
|
12602
12602
|
{
|
|
12603
12603
|
type: j.Meta,
|
|
12604
12604
|
data: {
|
|
12605
12605
|
href: window.location.href,
|
|
12606
|
-
width:
|
|
12606
|
+
width: Mc(),
|
|
12607
12607
|
height: Kc()
|
|
12608
12608
|
}
|
|
12609
12609
|
},
|
|
@@ -12622,11 +12622,11 @@ function Be(e = {}) {
|
|
|
12622
12622
|
slimDOM: ht,
|
|
12623
12623
|
dataURLOptions: ve,
|
|
12624
12624
|
recordCanvas: $,
|
|
12625
|
-
inlineImages:
|
|
12625
|
+
inlineImages: F,
|
|
12626
12626
|
inlineVideos: N,
|
|
12627
12627
|
privacySetting: de,
|
|
12628
12628
|
onSerialize: (se) => {
|
|
12629
|
-
|
|
12629
|
+
Hc(se, Te) && nt.addIframe(se), zc(se, Te) && it.trackLinkElement(se), lr(se) && Gi.addShadowRoot(z.shadowRoot(se), document);
|
|
12630
12630
|
},
|
|
12631
12631
|
onIframeLoad: (se, re) => {
|
|
12632
12632
|
nt.attachIframe(se, re), Gi.observeAttachShadow(se);
|
|
@@ -12643,7 +12643,7 @@ function Be(e = {}) {
|
|
|
12643
12643
|
type: j.FullSnapshot,
|
|
12644
12644
|
data: {
|
|
12645
12645
|
node: we,
|
|
12646
|
-
initialOffset:
|
|
12646
|
+
initialOffset: Fc(window)
|
|
12647
12647
|
}
|
|
12648
12648
|
},
|
|
12649
12649
|
_
|
|
@@ -12671,7 +12671,7 @@ function Be(e = {}) {
|
|
|
12671
12671
|
source: P.MouseInteraction
|
|
12672
12672
|
}, te)
|
|
12673
12673
|
}),
|
|
12674
|
-
scrollCb:
|
|
12674
|
+
scrollCb: zr,
|
|
12675
12675
|
viewportResizeCb: (te) => oe({
|
|
12676
12676
|
type: j.IncrementalSnapshot,
|
|
12677
12677
|
data: Y({
|
|
@@ -12733,12 +12733,12 @@ function Be(e = {}) {
|
|
|
12733
12733
|
maskInputOptions: Yt,
|
|
12734
12734
|
inlineStylesheet: V,
|
|
12735
12735
|
sampling: R,
|
|
12736
|
-
recordDOM:
|
|
12736
|
+
recordDOM: E,
|
|
12737
12737
|
recordCanvas: $,
|
|
12738
|
-
inlineImages:
|
|
12738
|
+
inlineImages: F,
|
|
12739
12739
|
inlineVideos: N,
|
|
12740
12740
|
userTriggeredOnInput: T,
|
|
12741
|
-
collectFonts:
|
|
12741
|
+
collectFonts: U,
|
|
12742
12742
|
doc: re,
|
|
12743
12743
|
maskInputFn: k,
|
|
12744
12744
|
maskTextFn: v,
|
|
@@ -12798,7 +12798,7 @@ function Be(e = {}) {
|
|
|
12798
12798
|
window
|
|
12799
12799
|
)
|
|
12800
12800
|
)), () => {
|
|
12801
|
-
_.forEach((re) => re()), Dn.destroy(), xn = !1,
|
|
12801
|
+
_.forEach((re) => re()), Dn.destroy(), xn = !1, Hy();
|
|
12802
12802
|
};
|
|
12803
12803
|
} catch (_) {
|
|
12804
12804
|
console.warn(_);
|
|
@@ -12978,7 +12978,7 @@ const { addCustomEvent: gl } = Be, fg = (e) => {
|
|
|
12978
12978
|
const s = !1, r = !0;
|
|
12979
12979
|
for (let l = 0; l < i.length; l++) {
|
|
12980
12980
|
let o = i[l].split("+");
|
|
12981
|
-
n = [], o.length > 1 && (n = Rg(iu, o)), o = o[o.length - 1], o = o === "*" ? "*" :
|
|
12981
|
+
n = [], o.length > 1 && (n = Rg(iu, o)), o = o[o.length - 1], o = o === "*" ? "*" : Cg(o), o in Ke || (Ke[o] = []), Ke[o].push({
|
|
12982
12982
|
mods: n,
|
|
12983
12983
|
shortcut: i[l],
|
|
12984
12984
|
key: i[l],
|
|
@@ -13002,7 +13002,7 @@ function Xg(e) {
|
|
|
13002
13002
|
t[i - 1] += ",", t.splice(i, 1), i = t.lastIndexOf("");
|
|
13003
13003
|
return t;
|
|
13004
13004
|
}
|
|
13005
|
-
const
|
|
13005
|
+
const Ke = {}, bs = typeof navigator < "u" ? navigator.userAgent.toLowerCase().indexOf("firefox") > 0 : !1, Wg = {
|
|
13006
13006
|
backspace: 8,
|
|
13007
13007
|
tab: 9,
|
|
13008
13008
|
clear: 12,
|
|
@@ -13082,9 +13082,9 @@ const Ue = {}, bs = typeof navigator < "u" ? navigator.userAgent.toLowerCase().i
|
|
|
13082
13082
|
"⌘": 91,
|
|
13083
13083
|
cmd: 91,
|
|
13084
13084
|
command: 91
|
|
13085
|
-
},
|
|
13085
|
+
}, Cg = (e) => (
|
|
13086
13086
|
// @ts-expect-error
|
|
13087
|
-
|
|
13087
|
+
Wg[e.toLowerCase()] || // @ts-expect-error
|
|
13088
13088
|
iu[e.toLowerCase()] || e.toUpperCase().charCodeAt(0)
|
|
13089
13089
|
);
|
|
13090
13090
|
function Rg(e, t) {
|
|
@@ -13110,7 +13110,7 @@ function vg(e, t, i) {
|
|
|
13110
13110
|
}
|
|
13111
13111
|
}
|
|
13112
13112
|
function wg(e) {
|
|
13113
|
-
const t =
|
|
13113
|
+
const t = Ke["*"];
|
|
13114
13114
|
let i = e.keyCode || e.which || e.charCode;
|
|
13115
13115
|
if ((i === 93 || i === 224) && (i = 91), be.indexOf(i) === -1 && i !== 229 && be.push(i), ["ctrlKey", "altKey", "shiftKey", "metaKey"].forEach((n) => {
|
|
13116
13116
|
const s = Il[n];
|
|
@@ -13118,14 +13118,14 @@ function wg(e) {
|
|
|
13118
13118
|
}), !(i in ye && (ye[i] = !0, !t))) {
|
|
13119
13119
|
for (const n in ye)
|
|
13120
13120
|
Object.prototype.hasOwnProperty.call(ye, n) && (ye[n] = e[Il[n]]);
|
|
13121
|
-
if (e.getModifierState && !(e.altKey && !e.ctrlKey) && e.getModifierState("AltGraph") && (be.indexOf(17) === -1 && be.push(17), be.indexOf(18) === -1 && be.push(18), ye[17] = !0, ye[18] = !0), i in
|
|
13122
|
-
for (let n = 0; n <
|
|
13121
|
+
if (e.getModifierState && !(e.altKey && !e.ctrlKey) && e.getModifierState("AltGraph") && (be.indexOf(17) === -1 && be.push(17), be.indexOf(18) === -1 && be.push(18), ye[17] = !0, ye[18] = !0), i in Ke) {
|
|
13122
|
+
for (let n = 0; n < Ke[i].length; n++)
|
|
13123
13123
|
if (
|
|
13124
13124
|
// @ts-expect-error
|
|
13125
|
-
(e.type === "keydown" &&
|
|
13126
|
-
e.type === "keyup" &&
|
|
13125
|
+
(e.type === "keydown" && Ke[i][n].keydown || // @ts-expect-error
|
|
13126
|
+
e.type === "keyup" && Ke[i][n].keyup) && Ke[i][n].key
|
|
13127
13127
|
) {
|
|
13128
|
-
const s =
|
|
13128
|
+
const s = Ke[i][n];
|
|
13129
13129
|
vg(e, s, "all");
|
|
13130
13130
|
}
|
|
13131
13131
|
}
|
|
@@ -13145,7 +13145,7 @@ const Sl = "iframe parent ready", Gl = "iframe ok", fi = "highlightLogs", xg = (
|
|
|
13145
13145
|
`, " ")
|
|
13146
13146
|
));
|
|
13147
13147
|
};
|
|
13148
|
-
var
|
|
13148
|
+
var We = Uint8Array, ke = Uint16Array, Or = Int32Array, Er = new We([
|
|
13149
13149
|
0,
|
|
13150
13150
|
0,
|
|
13151
13151
|
0,
|
|
@@ -13180,7 +13180,7 @@ var Ce = Uint8Array, ke = Uint16Array, Er = Int32Array, Mr = new Ce([
|
|
|
13180
13180
|
0,
|
|
13181
13181
|
/* impossible */
|
|
13182
13182
|
0
|
|
13183
|
-
]),
|
|
13183
|
+
]), Hr = new We([
|
|
13184
13184
|
0,
|
|
13185
13185
|
0,
|
|
13186
13186
|
0,
|
|
@@ -13214,16 +13214,16 @@ var Ce = Uint8Array, ke = Uint16Array, Er = Int32Array, Mr = new Ce([
|
|
|
13214
13214
|
/* unused */
|
|
13215
13215
|
0,
|
|
13216
13216
|
0
|
|
13217
|
-
]), Vl = new
|
|
13217
|
+
]), Vl = new We([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]), nu = function(e, t) {
|
|
13218
13218
|
for (var i = new ke(31), n = 0; n < 31; ++n)
|
|
13219
13219
|
i[n] = t += 1 << e[n - 1];
|
|
13220
|
-
for (var s = new
|
|
13220
|
+
for (var s = new Or(i[30]), n = 1; n < 30; ++n)
|
|
13221
13221
|
for (var r = i[n]; r < i[n + 1]; ++r)
|
|
13222
13222
|
s[r] = r - i[n] << 5 | n;
|
|
13223
13223
|
return { b: i, r: s };
|
|
13224
|
-
}, su = nu(
|
|
13224
|
+
}, su = nu(Er, 2), Lg = su.b, cr = su.r;
|
|
13225
13225
|
Lg[28] = 258, cr[258] = 28;
|
|
13226
|
-
var Jg = nu(
|
|
13226
|
+
var Jg = nu(Hr, 0), Xl = Jg.r, ru = new ke(32768);
|
|
13227
13227
|
for (var ne = 0; ne < 32768; ++ne) {
|
|
13228
13228
|
var Ae = (ne & 43690) >> 1 | (ne & 21845) << 1;
|
|
13229
13229
|
Ae = (Ae & 52428) >> 2 | (Ae & 13107) << 2, Ae = (Ae & 61680) >> 4 | (Ae & 3855) << 4, ru[ne] = ((Ae & 65280) >> 8 | (Ae & 255) << 8) >> 1;
|
|
@@ -13238,7 +13238,7 @@ var ii = function(e, t, i) {
|
|
|
13238
13238
|
for (o = new ke(n), s = 0; s < n; ++s)
|
|
13239
13239
|
e[s] && (o[s] = ru[l[e[s] - 1]++] >> 15 - e[s]);
|
|
13240
13240
|
return o;
|
|
13241
|
-
}, at = new
|
|
13241
|
+
}, at = new We(288);
|
|
13242
13242
|
for (var ne = 0; ne < 144; ++ne)
|
|
13243
13243
|
at[ne] = 8;
|
|
13244
13244
|
for (var ne = 144; ne < 256; ++ne)
|
|
@@ -13247,14 +13247,14 @@ for (var ne = 256; ne < 280; ++ne)
|
|
|
13247
13247
|
at[ne] = 7;
|
|
13248
13248
|
for (var ne = 280; ne < 288; ++ne)
|
|
13249
13249
|
at[ne] = 8;
|
|
13250
|
-
var Tn = new
|
|
13250
|
+
var Tn = new We(32);
|
|
13251
13251
|
for (var ne = 0; ne < 32; ++ne)
|
|
13252
13252
|
Tn[ne] = 5;
|
|
13253
|
-
var Yg = /* @__PURE__ */ ii(at, 9),
|
|
13253
|
+
var Yg = /* @__PURE__ */ ii(at, 9), Ug = /* @__PURE__ */ ii(Tn, 5), ou = function(e) {
|
|
13254
13254
|
return (e + 7) / 8 | 0;
|
|
13255
13255
|
}, lu = function(e, t, i) {
|
|
13256
|
-
return (i == null || i > e.length) && (i = e.length), new
|
|
13257
|
-
},
|
|
13256
|
+
return (i == null || i > e.length) && (i = e.length), new We(e.subarray(t, i));
|
|
13257
|
+
}, He = function(e, t, i) {
|
|
13258
13258
|
i <<= t & 7;
|
|
13259
13259
|
var n = t / 8 | 0;
|
|
13260
13260
|
e[n] |= i, e[n + 1] |= i >> 8;
|
|
@@ -13269,7 +13269,7 @@ var Yg = /* @__PURE__ */ ii(at, 9), Fg = /* @__PURE__ */ ii(Tn, 5), ou = functio
|
|
|
13269
13269
|
if (!s)
|
|
13270
13270
|
return { t: cu, l: 0 };
|
|
13271
13271
|
if (s == 1) {
|
|
13272
|
-
var l = new
|
|
13272
|
+
var l = new We(i[0].s + 1);
|
|
13273
13273
|
return l[i[0].s] = 1, { t: l, l: 1 };
|
|
13274
13274
|
}
|
|
13275
13275
|
i.sort(function(G, k) {
|
|
@@ -13293,8 +13293,8 @@ var Yg = /* @__PURE__ */ ii(at, 9), Fg = /* @__PURE__ */ ii(Tn, 5), ou = functio
|
|
|
13293
13293
|
break;
|
|
13294
13294
|
}
|
|
13295
13295
|
for (d >>= S; d > 0; ) {
|
|
13296
|
-
var
|
|
13297
|
-
m[
|
|
13296
|
+
var C = r[n].s;
|
|
13297
|
+
m[C] < t ? d -= 1 << t - m[C]++ - 1 : ++n;
|
|
13298
13298
|
}
|
|
13299
13299
|
for (; n >= 0 && d; --n) {
|
|
13300
13300
|
var X = r[n].s;
|
|
@@ -13302,10 +13302,10 @@ var Yg = /* @__PURE__ */ ii(at, 9), Fg = /* @__PURE__ */ ii(Tn, 5), ou = functio
|
|
|
13302
13302
|
}
|
|
13303
13303
|
b = t;
|
|
13304
13304
|
}
|
|
13305
|
-
return { t: new
|
|
13305
|
+
return { t: new We(m), l: b };
|
|
13306
13306
|
}, ur = function(e, t, i) {
|
|
13307
13307
|
return e.s == -1 ? Math.max(ur(e.l, t, i + 1), ur(e.r, t, i + 1)) : t[e.s] = i;
|
|
13308
|
-
},
|
|
13308
|
+
}, Wl = function(e) {
|
|
13309
13309
|
for (var t = e.length; t && !e[--t]; )
|
|
13310
13310
|
;
|
|
13311
13311
|
for (var i = new ke(++t), n = 0, s = e[0], r = 1, l = function(a) {
|
|
@@ -13338,88 +13338,88 @@ var Yg = /* @__PURE__ */ ii(at, 9), Fg = /* @__PURE__ */ ii(Tn, 5), ou = functio
|
|
|
13338
13338
|
for (var r = 0; r < n; ++r)
|
|
13339
13339
|
e[s + r + 4] = i[r];
|
|
13340
13340
|
return (s + 4 + n) * 8;
|
|
13341
|
-
},
|
|
13342
|
-
|
|
13343
|
-
for (var h = fs(s, 15), p = h.t, m = h.l, b = fs(r, 15), d = b.t, S = b.l, I =
|
|
13341
|
+
}, Cl = function(e, t, i, n, s, r, l, o, a, c, u) {
|
|
13342
|
+
He(t, u++, i), ++s[256];
|
|
13343
|
+
for (var h = fs(s, 15), p = h.t, m = h.l, b = fs(r, 15), d = b.t, S = b.l, I = Wl(p), V = I.c, C = I.n, X = Wl(d), G = X.c, k = X.n, v = new ke(19), w = 0; w < V.length; ++w)
|
|
13344
13344
|
++v[V[w] & 31];
|
|
13345
13345
|
for (var w = 0; w < G.length; ++w)
|
|
13346
13346
|
++v[G[w] & 31];
|
|
13347
|
-
for (var g = fs(v, 7), R = g.t, J = g.l,
|
|
13347
|
+
for (var g = fs(v, 7), R = g.t, J = g.l, E = 19; E > 4 && !R[Vl[E - 1]]; --E)
|
|
13348
13348
|
;
|
|
13349
|
-
var $ = c + 5 << 3, f = Bt(s, at) + Bt(r, Tn) + l, y = Bt(s, p) + Bt(r, d) + l + 14 + 3 *
|
|
13349
|
+
var $ = c + 5 << 3, f = Bt(s, at) + Bt(r, Tn) + l, y = Bt(s, p) + Bt(r, d) + l + 14 + 3 * E + Bt(v, R) + 2 * v[16] + 3 * v[17] + 7 * v[18];
|
|
13350
13350
|
if (a >= 0 && $ <= f && $ <= y)
|
|
13351
13351
|
return au(t, u, e.subarray(a, a + c));
|
|
13352
|
-
var T,
|
|
13353
|
-
if (
|
|
13354
|
-
T = ii(p, m),
|
|
13352
|
+
var T, U, F, N;
|
|
13353
|
+
if (He(t, u, 1 + (y < f)), u += 2, y < f) {
|
|
13354
|
+
T = ii(p, m), U = p, F = ii(d, S), N = d;
|
|
13355
13355
|
var A = ii(R, J);
|
|
13356
|
-
|
|
13357
|
-
for (var w = 0; w <
|
|
13358
|
-
|
|
13359
|
-
u += 3 *
|
|
13356
|
+
He(t, u, C - 257), He(t, u + 5, k - 1), He(t, u + 10, E - 4), u += 14;
|
|
13357
|
+
for (var w = 0; w < E; ++w)
|
|
13358
|
+
He(t, u + 3 * w, R[Vl[w]]);
|
|
13359
|
+
u += 3 * E;
|
|
13360
13360
|
for (var D = [V, G], de = 0; de < 2; ++de)
|
|
13361
13361
|
for (var me = D[de], w = 0; w < me.length; ++w) {
|
|
13362
|
-
var
|
|
13363
|
-
|
|
13362
|
+
var Ce = me[w] & 31;
|
|
13363
|
+
He(t, u, A[Ce]), u += R[Ce], Ce > 15 && (He(t, u, me[w] >> 5 & 127), u += me[w] >> 12);
|
|
13364
13364
|
}
|
|
13365
13365
|
} else
|
|
13366
|
-
T = Yg,
|
|
13366
|
+
T = Yg, U = at, F = Ug, N = Tn;
|
|
13367
13367
|
for (var w = 0; w < o; ++w) {
|
|
13368
13368
|
var ce = n[w];
|
|
13369
13369
|
if (ce > 255) {
|
|
13370
|
-
var
|
|
13371
|
-
Pt(t, u, T[
|
|
13370
|
+
var Ce = ce >> 18 & 31;
|
|
13371
|
+
Pt(t, u, T[Ce + 257]), u += U[Ce + 257], Ce > 7 && (He(t, u, ce >> 23 & 31), u += Er[Ce]);
|
|
13372
13372
|
var ve = ce & 31;
|
|
13373
|
-
Pt(t, u,
|
|
13373
|
+
Pt(t, u, F[ve]), u += N[ve], ve > 3 && (Pt(t, u, ce >> 5 & 8191), u += Hr[ve]);
|
|
13374
13374
|
} else
|
|
13375
|
-
Pt(t, u, T[ce]), u +=
|
|
13375
|
+
Pt(t, u, T[ce]), u += U[ce];
|
|
13376
13376
|
}
|
|
13377
|
-
return Pt(t, u, T[256]), u +
|
|
13378
|
-
},
|
|
13379
|
-
var l = r.z || e.length, o = new
|
|
13377
|
+
return Pt(t, u, T[256]), u + U[256];
|
|
13378
|
+
}, Fg = /* @__PURE__ */ new Or([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]), cu = /* @__PURE__ */ new We(0), Kg = function(e, t, i, n, s, r) {
|
|
13379
|
+
var l = r.z || e.length, o = new We(n + l + 5 * (1 + Math.ceil(l / 7e3)) + s), a = o.subarray(n, o.length - s), c = r.l, u = (r.r || 0) & 7;
|
|
13380
13380
|
if (t) {
|
|
13381
13381
|
u && (a[0] = r.r >> 3);
|
|
13382
|
-
for (var h =
|
|
13382
|
+
for (var h = Fg[t - 1], p = h >> 13, m = h & 8191, b = (1 << i) - 1, d = r.p || new ke(32768), S = r.h || new ke(b + 1), I = Math.ceil(i / 3), V = 2 * I, C = function(Qe) {
|
|
13383
13383
|
return (e[Qe] ^ e[Qe + 1] << I ^ e[Qe + 2] << V) & b;
|
|
13384
|
-
}, X = new
|
|
13385
|
-
var $ =
|
|
13384
|
+
}, X = new Or(25e3), G = new ke(288), k = new ke(32), v = 0, w = 0, g = r.i || 0, R = 0, J = r.w || 0, E = 0; g + 2 < l; ++g) {
|
|
13385
|
+
var $ = C(g), f = g & 32767, y = S[$];
|
|
13386
13386
|
if (d[f] = y, S[$] = f, J <= g) {
|
|
13387
13387
|
var T = l - g;
|
|
13388
13388
|
if ((v > 7e3 || R > 24576) && (T > 423 || !c)) {
|
|
13389
|
-
u =
|
|
13390
|
-
for (var
|
|
13391
|
-
G[
|
|
13392
|
-
for (var
|
|
13393
|
-
k[
|
|
13389
|
+
u = Cl(e, a, 0, X, G, k, w, R, E, g - E, u), R = v = w = 0, E = g;
|
|
13390
|
+
for (var U = 0; U < 286; ++U)
|
|
13391
|
+
G[U] = 0;
|
|
13392
|
+
for (var U = 0; U < 30; ++U)
|
|
13393
|
+
k[U] = 0;
|
|
13394
13394
|
}
|
|
13395
|
-
var
|
|
13396
|
-
if (T > 2 && $ ==
|
|
13397
|
-
for (var de = Math.min(p, T) - 1, me = Math.min(32767, g),
|
|
13398
|
-
if (e[g +
|
|
13399
|
-
for (var ce = 0; ce <
|
|
13395
|
+
var F = 2, N = 0, A = m, D = f - y & 32767;
|
|
13396
|
+
if (T > 2 && $ == C(g - D))
|
|
13397
|
+
for (var de = Math.min(p, T) - 1, me = Math.min(32767, g), Ce = Math.min(258, T); D <= me && --A && f != y; ) {
|
|
13398
|
+
if (e[g + F] == e[g + F - D]) {
|
|
13399
|
+
for (var ce = 0; ce < Ce && e[g + ce] == e[g + ce - D]; ++ce)
|
|
13400
13400
|
;
|
|
13401
|
-
if (ce >
|
|
13402
|
-
if (
|
|
13401
|
+
if (ce > F) {
|
|
13402
|
+
if (F = ce, N = D, ce > de)
|
|
13403
13403
|
break;
|
|
13404
|
-
for (var ve = Math.min(D, ce - 2), tt = 0,
|
|
13405
|
-
var
|
|
13406
|
-
ht > tt && (tt = ht, y =
|
|
13404
|
+
for (var ve = Math.min(D, ce - 2), tt = 0, U = 0; U < ve; ++U) {
|
|
13405
|
+
var Me = g - D + U & 32767, Yt = d[Me], ht = Me - Yt & 32767;
|
|
13406
|
+
ht > tt && (tt = ht, y = Me);
|
|
13407
13407
|
}
|
|
13408
13408
|
}
|
|
13409
13409
|
}
|
|
13410
13410
|
f = y, y = d[f], D += f - y & 32767;
|
|
13411
13411
|
}
|
|
13412
13412
|
if (N) {
|
|
13413
|
-
X[R++] = 268435456 | cr[
|
|
13414
|
-
var
|
|
13415
|
-
w +=
|
|
13413
|
+
X[R++] = 268435456 | cr[F] << 18 | Xl[N];
|
|
13414
|
+
var Ut = cr[F] & 31, pt = Xl[N] & 31;
|
|
13415
|
+
w += Er[Ut] + Hr[pt], ++G[257 + Ut], ++k[pt], J = g + F, ++v;
|
|
13416
13416
|
} else
|
|
13417
13417
|
X[R++] = e[g], ++G[e[g]];
|
|
13418
13418
|
}
|
|
13419
13419
|
}
|
|
13420
13420
|
for (g = Math.max(g, J); g < l; ++g)
|
|
13421
13421
|
X[R++] = e[g], ++G[e[g]];
|
|
13422
|
-
u =
|
|
13422
|
+
u = Cl(e, a, c, X, G, k, w, R, E, g - E, u), c || (r.r = u & 7 | a[u / 8 | 0] << 3, u -= 7, r.h = S, r.p = d, r.i = g, r.w = J);
|
|
13423
13423
|
} else {
|
|
13424
13424
|
for (var g = r.w || 0; g < l + c; g += 65535) {
|
|
13425
13425
|
var mt = g + 65535;
|
|
@@ -13428,50 +13428,50 @@ var Yg = /* @__PURE__ */ ii(at, 9), Fg = /* @__PURE__ */ ii(Tn, 5), ou = functio
|
|
|
13428
13428
|
r.i = l;
|
|
13429
13429
|
}
|
|
13430
13430
|
return lu(o, 0, n + ou(u) + s);
|
|
13431
|
-
},
|
|
13431
|
+
}, Mg = /* @__PURE__ */ function() {
|
|
13432
13432
|
for (var e = new Int32Array(256), t = 0; t < 256; ++t) {
|
|
13433
13433
|
for (var i = t, n = 9; --n; )
|
|
13434
13434
|
i = (i & 1 && -306674912) ^ i >>> 1;
|
|
13435
13435
|
e[t] = i;
|
|
13436
13436
|
}
|
|
13437
13437
|
return e;
|
|
13438
|
-
}(),
|
|
13438
|
+
}(), Og = function() {
|
|
13439
13439
|
var e = -1;
|
|
13440
13440
|
return {
|
|
13441
13441
|
p: function(t) {
|
|
13442
13442
|
for (var i = e, n = 0; n < t.length; ++n)
|
|
13443
|
-
i =
|
|
13443
|
+
i = Mg[i & 255 ^ t[n]] ^ i >>> 8;
|
|
13444
13444
|
e = i;
|
|
13445
13445
|
},
|
|
13446
13446
|
d: function() {
|
|
13447
13447
|
return ~e;
|
|
13448
13448
|
}
|
|
13449
13449
|
};
|
|
13450
|
-
},
|
|
13450
|
+
}, Eg = function(e, t, i, n, s) {
|
|
13451
13451
|
if (!s && (s = { l: 1 }, t.dictionary)) {
|
|
13452
|
-
var r = t.dictionary.subarray(-32768), l = new
|
|
13452
|
+
var r = t.dictionary.subarray(-32768), l = new We(r.length + e.length);
|
|
13453
13453
|
l.set(r), l.set(e, r.length), e = l, s.w = r.length;
|
|
13454
13454
|
}
|
|
13455
13455
|
return Kg(e, t.level == null ? 6 : t.level, t.mem == null ? s.l ? Math.ceil(Math.max(8, Math.min(13, Math.log(e.length))) * 1.5) : 20 : 12 + t.mem, i, n, s);
|
|
13456
13456
|
}, dr = function(e, t, i) {
|
|
13457
13457
|
for (; i; ++t)
|
|
13458
13458
|
e[t] = i, i >>>= 8;
|
|
13459
|
-
},
|
|
13459
|
+
}, Hg = function(e, t) {
|
|
13460
13460
|
var i = t.filename;
|
|
13461
13461
|
if (e[0] = 31, e[1] = 139, e[2] = 8, e[8] = t.level < 2 ? 4 : t.level == 9 ? 2 : 0, e[9] = 3, t.mtime != 0 && dr(e, 4, Math.floor(new Date(t.mtime || Date.now()) / 1e3)), i) {
|
|
13462
13462
|
e[3] = 8;
|
|
13463
13463
|
for (var n = 0; n <= i.length; ++n)
|
|
13464
13464
|
e[n + 10] = i.charCodeAt(n);
|
|
13465
13465
|
}
|
|
13466
|
-
},
|
|
13466
|
+
}, zg = function(e) {
|
|
13467
13467
|
return 10 + (e.filename ? e.filename.length + 1 : 0);
|
|
13468
13468
|
};
|
|
13469
13469
|
function Pg(e, t) {
|
|
13470
13470
|
t || (t = {});
|
|
13471
|
-
var i =
|
|
13471
|
+
var i = Og(), n = e.length;
|
|
13472
13472
|
i.p(e);
|
|
13473
|
-
var s =
|
|
13474
|
-
return
|
|
13473
|
+
var s = Eg(e, t, zg(t), 8), r = s.length;
|
|
13474
|
+
return Hg(s, t), dr(s, r - 8, i.d()), dr(s, r - 4, n), s;
|
|
13475
13475
|
}
|
|
13476
13476
|
var Rl = typeof TextEncoder < "u" && /* @__PURE__ */ new TextEncoder(), Bg = typeof TextDecoder < "u" && /* @__PURE__ */ new TextDecoder();
|
|
13477
13477
|
try {
|
|
@@ -13482,11 +13482,11 @@ function Dg(e, t) {
|
|
|
13482
13482
|
var i;
|
|
13483
13483
|
if (Rl)
|
|
13484
13484
|
return Rl.encode(e);
|
|
13485
|
-
for (var n = e.length, s = new
|
|
13485
|
+
for (var n = e.length, s = new We(e.length + (e.length >> 1)), r = 0, l = function(u) {
|
|
13486
13486
|
s[r++] = u;
|
|
13487
13487
|
}, i = 0; i < n; ++i) {
|
|
13488
13488
|
if (r + 5 > s.length) {
|
|
13489
|
-
var o = new
|
|
13489
|
+
var o = new We(r + 8 + (n - i << 1));
|
|
13490
13490
|
o.set(s), s = o;
|
|
13491
13491
|
}
|
|
13492
13492
|
var a = e.charCodeAt(i);
|
|
@@ -13507,7 +13507,7 @@ function jg(e) {
|
|
|
13507
13507
|
};
|
|
13508
13508
|
});
|
|
13509
13509
|
}
|
|
13510
|
-
const uu = "dmFyIFZyPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxqcj1PYmplY3QuZGVmaW5lUHJvcGVydGllczt2YXIgcXI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7dmFyICRlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyIHRuPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbm49T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgZnQ9KEYsUCxNKT0+UCBpbiBGP1ZyKEYsUCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6TX0pOkZbUF09TSxEPShGLFApPT57Zm9yKHZhciBNIGluIFB8fChQPXt9KSl0bi5jYWxsKFAsTSkmJmZ0KEYsTSxQW01dKTtpZigkZSlmb3IodmFyIE0gb2YgJGUoUCkpbm4uY2FsbChQLE0pJiZmdChGLE0sUFtNXSk7cmV0dXJuIEZ9LEJlPShGLFApPT5qcihGLHFyKFApKTt2YXIgdmU9KEYsUCk9Pnt2YXIgTT17fTtmb3IodmFyIFggaW4gRil0bi5jYWxsKEYsWCkmJlAuaW5kZXhPZihYKTwwJiYoTVtYXT1GW1hdKTtpZihGIT1udWxsJiYkZSlmb3IodmFyIFggb2YgJGUoRikpUC5pbmRleE9mKFgpPDAmJm5uLmNhbGwoRixYKSYmKE1bWF09RltYXSk7cmV0dXJuIE19O3ZhciBodD0oRixQLE0pPT5mdChGLHR5cGVvZiBQIT0ic3ltYm9sIj9QKyIiOlAsTSk7dmFyIFE9KEYsUCxNKT0+bmV3IFByb21pc2UoKFgsSWUpPT57dmFyIFVlPXJlPT57dHJ5e29lKE0ubmV4dChyZSkpfWNhdGNoKEVlKXtJZShFZSl9fSxWZT1yZT0+e3RyeXtvZShNLnRocm93KHJlKSl9Y2F0Y2goRWUpe0llKEVlKX19LG9lPXJlPT5yZS5kb25lP1gocmUudmFsdWUpOlByb21pc2UucmVzb2x2ZShyZS52YWx1ZSkudGhlbihVZSxWZSk7b2UoKE09TS5hcHBseShGLFApKS5uZXh0KCkpfSk7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEYoZSx0KXtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKG4pe24mJnR5cGVvZiBuIT0ic3RyaW5nIiYmIUFycmF5LmlzQXJyYXkobikmJk9iamVjdC5rZXlzKG4pLmZvckVhY2goZnVuY3Rpb24oaSl7aWYoaSE9PSJkZWZhdWx0IiYmIShpIGluIGUpKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4saSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsaSxyLmdldD9yOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuW2ldfX0pfX0pfSksT2JqZWN0LmZyZWV6ZShlKX1jb25zdCBQPUpTT04sTT1lPT5lLnRvVXBwZXJDYXNlKCksWD1lPT57Y29uc3QgdD17fTtyZXR1cm4gZS5mb3JFYWNoKChuLGkpPT57dFtpXT1ufSksdH0sSWU9KGUsdCxuKT0+ZS5kb2N1bWVudD9lOntkb2N1bWVudDplLHZhcmlhYmxlczp0LHJlcXVlc3RIZWFkZXJzOm4sc2lnbmFsOnZvaWQgMH0sVWU9KGUsdCxuKT0+ZS5xdWVyeT9lOntxdWVyeTplLHZhcmlhYmxlczp0LHJlcXVlc3RIZWFkZXJzOm4sc2lnbmFsOnZvaWQgMH0sVmU9KGUsdCk9PmUuZG9jdW1lbnRzP2U6e2RvY3VtZW50czplLHJlcXVlc3RIZWFkZXJzOnQsc2lnbmFsOnZvaWQgMH07ZnVuY3Rpb24gb2UoZSx0KXtpZighISFlKXRocm93IG5ldyBFcnJvcih0KX1mdW5jdGlvbiByZShlKXtyZXR1cm4gdHlwZW9mIGU9PSJvYmplY3QiJiZlIT09bnVsbH1mdW5jdGlvbiBFZShlLHQpe2lmKCEhIWUpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGludmFyaWFudCB0cmlnZ2VyZWQuIil9Y29uc3Qgcm49L1xyXG58W1xuXHJdL2c7ZnVuY3Rpb24gamUoZSx0KXtsZXQgbj0wLGk9MTtmb3IoY29uc3QgciBvZiBlLmJvZHkubWF0Y2hBbGwocm4pKXtpZih0eXBlb2Ygci5pbmRleD09Im51bWJlciJ8fEVlKCExKSxyLmluZGV4Pj10KWJyZWFrO249ci5pbmRleCtyWzBdLmxlbmd0aCxpKz0xfXJldHVybntsaW5lOmksY29sdW1uOnQrMS1ufX1mdW5jdGlvbiBzbihlKXtyZXR1cm4gZHQoZS5zb3VyY2UsamUoZS5zb3VyY2UsZS5zdGFydCkpfWZ1bmN0aW9uIGR0KGUsdCl7Y29uc3Qgbj1lLmxvY2F0aW9uT2Zmc2V0LmNvbHVtbi0xLGk9IiIucGFkU3RhcnQobikrZS5ib2R5LHI9dC5saW5lLTEscz1lLmxvY2F0aW9uT2Zmc2V0LmxpbmUtMSxvPXQubGluZStzLGM9dC5saW5lPT09MT9uOjAsZj10LmNvbHVtbitjLGQ9YCR7ZS5uYW1lfToke299OiR7Zn0KYCx1PWkuc3BsaXQoL1xyXG58W1xuXHJdL2cpLHk9dVtyXTtpZih5Lmxlbmd0aD4xMjApe2NvbnN0IHY9TWF0aC5mbG9vcihmLzgwKSxiPWYlODAsbT1bXTtmb3IobGV0IE49MDtOPHkubGVuZ3RoO04rPTgwKW0ucHVzaCh5LnNsaWNlKE4sTis4MCkpO3JldHVybiBkK3B0KFtbYCR7b30gfGAsbVswXV0sLi4ubS5zbGljZSgxLHYrMSkubWFwKE49PlsifCIsTl0pLFsifCIsIl4iLnBhZFN0YXJ0KGIpXSxbInwiLG1bdisxXV1dKX1yZXR1cm4gZCtwdChbW2Ake28tMX0gfGAsdVtyLTFdXSxbYCR7b30gfGAseV0sWyJ8IiwiXiIucGFkU3RhcnQoZildLFtgJHtvKzF9IHxgLHVbcisxXV1dKX1mdW5jdGlvbiBwdChlKXtjb25zdCB0PWUuZmlsdGVyKChbaSxyXSk9PnIhPT12b2lkIDApLG49TWF0aC5tYXgoLi4udC5tYXAoKFtpXSk9PmkubGVuZ3RoKSk7cmV0dXJuIHQubWFwKChbaSxyXSk9PmkucGFkU3RhcnQobikrKHI/IiAiK3I6IiIpKS5qb2luKGAKYCl9ZnVuY3Rpb24gb24oZSl7Y29uc3QgdD1lWzBdO3JldHVybiB0PT1udWxsfHwia2luZCJpbiB0fHwibGVuZ3RoImluIHQ/e25vZGVzOnQsc291cmNlOmVbMV0scG9zaXRpb25zOmVbMl0scGF0aDplWzNdLG9yaWdpbmFsRXJyb3I6ZVs0XSxleHRlbnNpb25zOmVbNV19OnR9Y2xhc3MgcWUgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LC4uLm4pe3ZhciBpLHIscztjb25zdHtub2RlczpvLHNvdXJjZTpjLHBvc2l0aW9uczpmLHBhdGg6ZCxvcmlnaW5hbEVycm9yOnUsZXh0ZW5zaW9uczp5fT1vbihuKTtzdXBlcih0KSx0aGlzLm5hbWU9IkdyYXBoUUxFcnJvciIsdGhpcy5wYXRoPWQhPW51bGw/ZDp2b2lkIDAsdGhpcy5vcmlnaW5hbEVycm9yPXUhPW51bGw/dTp2b2lkIDAsdGhpcy5ub2Rlcz1tdChBcnJheS5pc0FycmF5KG8pP286bz9bb106dm9pZCAwKTtjb25zdCB2PW10KChpPXRoaXMubm9kZXMpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS5tYXAobT0+bS5sb2MpLmZpbHRlcihtPT5tIT1udWxsKSk7dGhpcy5zb3VyY2U9YyE9bnVsbD9jOnY9PW51bGx8fChyPXZbMF0pPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5zb3VyY2UsdGhpcy5wb3NpdGlvbnM9ZiE9bnVsbD9mOnY9PW51bGw/dm9pZCAwOnYubWFwKG09Pm0uc3RhcnQpLHRoaXMubG9jYXRpb25zPWYmJmM/Zi5tYXAobT0+amUoYyxtKSk6dj09bnVsbD92b2lkIDA6di5tYXAobT0+amUobS5zb3VyY2UsbS5zdGFydCkpO2NvbnN0IGI9cmUodT09bnVsbD92b2lkIDA6dS5leHRlbnNpb25zKT91PT1udWxsP3ZvaWQgMDp1LmV4dGVuc2lvbnM6dm9pZCAwO3RoaXMuZXh0ZW5zaW9ucz0ocz15IT1udWxsP3k6YikhPT1udWxsJiZzIT09dm9pZCAwP3M6T2JqZWN0LmNyZWF0ZShudWxsKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHttZXNzYWdlOnt3cml0YWJsZTohMCxlbnVtZXJhYmxlOiEwfSxuYW1lOntlbnVtZXJhYmxlOiExfSxub2Rlczp7ZW51bWVyYWJsZTohMX0sc291cmNlOntlbnVtZXJhYmxlOiExfSxwb3NpdGlvbnM6e2VudW1lcmFibGU6ITF9LG9yaWdpbmFsRXJyb3I6e2VudW1lcmFibGU6ITF9fSksdSE9bnVsbCYmdS5zdGFjaz9PYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywic3RhY2siLHt2YWx1ZTp1LnN0YWNrLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pOkVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMscWUpOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJzdGFjayIse3ZhbHVlOkVycm9yKCkuc3RhY2ssd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iR3JhcGhRTEVycm9yIn10b1N0cmluZygpe2xldCB0PXRoaXMubWVzc2FnZTtpZih0aGlzLm5vZGVzKWZvcihjb25zdCBuIG9mIHRoaXMubm9kZXMpbi5sb2MmJih0Kz1gCgpgK3NuKG4ubG9jKSk7ZWxzZSBpZih0aGlzLnNvdXJjZSYmdGhpcy5sb2NhdGlvbnMpZm9yKGNvbnN0IG4gb2YgdGhpcy5sb2NhdGlvbnMpdCs9YAoKYCtkdCh0aGlzLnNvdXJjZSxuKTtyZXR1cm4gdH10b0pTT04oKXtjb25zdCB0PXttZXNzYWdlOnRoaXMubWVzc2FnZX07cmV0dXJuIHRoaXMubG9jYXRpb25zIT1udWxsJiYodC5sb2NhdGlvbnM9dGhpcy5sb2NhdGlvbnMpLHRoaXMucGF0aCE9bnVsbCYmKHQucGF0aD10aGlzLnBhdGgpLHRoaXMuZXh0ZW5zaW9ucyE9bnVsbCYmT2JqZWN0LmtleXModGhpcy5leHRlbnNpb25zKS5sZW5ndGg+MCYmKHQuZXh0ZW5zaW9ucz10aGlzLmV4dGVuc2lvbnMpLHR9fWZ1bmN0aW9uIG10KGUpe3JldHVybiBlPT09dm9pZCAwfHxlLmxlbmd0aD09PTA/dm9pZCAwOmV9ZnVuY3Rpb24gRyhlLHQsbil7cmV0dXJuIG5ldyBxZShgU3ludGF4IEVycm9yOiAke259YCx7c291cmNlOmUscG9zaXRpb25zOlt0XX0pfWNsYXNzIGFue2NvbnN0cnVjdG9yKHQsbixpKXt0aGlzLnN0YXJ0PXQuc3RhcnQsdGhpcy5lbmQ9bi5lbmQsdGhpcy5zdGFydFRva2VuPXQsdGhpcy5lbmRUb2tlbj1uLHRoaXMuc291cmNlPWl9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iTG9jYXRpb24ifXRvSlNPTigpe3JldHVybntzdGFydDp0aGlzLnN0YXJ0LGVuZDp0aGlzLmVuZH19fWNsYXNzIHl0e2NvbnN0cnVjdG9yKHQsbixpLHIscyxvKXt0aGlzLmtpbmQ9dCx0aGlzLnN0YXJ0PW4sdGhpcy5lbmQ9aSx0aGlzLmxpbmU9cix0aGlzLmNvbHVtbj1zLHRoaXMudmFsdWU9byx0aGlzLnByZXY9bnVsbCx0aGlzLm5leHQ9bnVsbH1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJUb2tlbiJ9dG9KU09OKCl7cmV0dXJue2tpbmQ6dGhpcy5raW5kLHZhbHVlOnRoaXMudmFsdWUsbGluZTp0aGlzLmxpbmUsY29sdW1uOnRoaXMuY29sdW1ufX19Y29uc3QgZ3Q9e05hbWU6W10sRG9jdW1lbnQ6WyJkZWZpbml0aW9ucyJdLE9wZXJhdGlvbkRlZmluaXRpb246WyJuYW1lIiwidmFyaWFibGVEZWZpbml0aW9ucyIsImRpcmVjdGl2ZXMiLCJzZWxlY3Rpb25TZXQiXSxWYXJpYWJsZURlZmluaXRpb246WyJ2YXJpYWJsZSIsInR5cGUiLCJkZWZhdWx0VmFsdWUiLCJkaXJlY3RpdmVzIl0sVmFyaWFibGU6WyJuYW1lIl0sU2VsZWN0aW9uU2V0Olsic2VsZWN0aW9ucyJdLEZpZWxkOlsiYWxpYXMiLCJuYW1lIiwiYXJndW1lbnRzIiwiZGlyZWN0aXZlcyIsInNlbGVjdGlvblNldCJdLEFyZ3VtZW50OlsibmFtZSIsInZhbHVlIl0sRnJhZ21lbnRTcHJlYWQ6WyJuYW1lIiwiZGlyZWN0aXZlcyJdLElubGluZUZyYWdtZW50OlsidHlwZUNvbmRpdGlvbiIsImRpcmVjdGl2ZXMiLCJzZWxlY3Rpb25TZXQiXSxGcmFnbWVudERlZmluaXRpb246WyJuYW1lIiwidmFyaWFibGVEZWZpbml0aW9ucyIsInR5cGVDb25kaXRpb24iLCJkaXJlY3RpdmVzIiwic2VsZWN0aW9uU2V0Il0sSW50VmFsdWU6W10sRmxvYXRWYWx1ZTpbXSxTdHJpbmdWYWx1ZTpbXSxCb29sZWFuVmFsdWU6W10sTnVsbFZhbHVlOltdLEVudW1WYWx1ZTpbXSxMaXN0VmFsdWU6WyJ2YWx1ZXMiXSxPYmplY3RWYWx1ZTpbImZpZWxkcyJdLE9iamVjdEZpZWxkOlsibmFtZSIsInZhbHVlIl0sRGlyZWN0aXZlOlsibmFtZSIsImFyZ3VtZW50cyJdLE5hbWVkVHlwZTpbIm5hbWUiXSxMaXN0VHlwZTpbInR5cGUiXSxOb25OdWxsVHlwZTpbInR5cGUiXSxTY2hlbWFEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJkaXJlY3RpdmVzIiwib3BlcmF0aW9uVHlwZXMiXSxPcGVyYXRpb25UeXBlRGVmaW5pdGlvbjpbInR5cGUiXSxTY2FsYXJUeXBlRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsImRpcmVjdGl2ZXMiXSxPYmplY3RUeXBlRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsImludGVyZmFjZXMiLCJkaXJlY3RpdmVzIiwiZmllbGRzIl0sRmllbGREZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwiYXJndW1lbnRzIiwidHlwZSIsImRpcmVjdGl2ZXMiXSxJbnB1dFZhbHVlRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsInR5cGUiLCJkZWZhdWx0VmFsdWUiLCJkaXJlY3RpdmVzIl0sSW50ZXJmYWNlVHlwZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJpbnRlcmZhY2VzIiwiZGlyZWN0aXZlcyIsImZpZWxkcyJdLFVuaW9uVHlwZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJkaXJlY3RpdmVzIiwidHlwZXMiXSxFbnVtVHlwZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJkaXJlY3RpdmVzIiwidmFsdWVzIl0sRW51bVZhbHVlRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsImRpcmVjdGl2ZXMiXSxJbnB1dE9iamVjdFR5cGVEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwiZGlyZWN0aXZlcyIsImZpZWxkcyJdLERpcmVjdGl2ZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJhcmd1bWVudHMiLCJsb2NhdGlvbnMiXSxTY2hlbWFFeHRlbnNpb246WyJkaXJlY3RpdmVzIiwib3BlcmF0aW9uVHlwZXMiXSxTY2FsYXJUeXBlRXh0ZW5zaW9uOlsibmFtZSIsImRpcmVjdGl2ZXMiXSxPYmplY3RUeXBlRXh0ZW5zaW9uOlsibmFtZSIsImludGVyZmFjZXMiLCJkaXJlY3RpdmVzIiwiZmllbGRzIl0sSW50ZXJmYWNlVHlwZUV4dGVuc2lvbjpbIm5hbWUiLCJpbnRlcmZhY2VzIiwiZGlyZWN0aXZlcyIsImZpZWxkcyJdLFVuaW9uVHlwZUV4dGVuc2lvbjpbIm5hbWUiLCJkaXJlY3RpdmVzIiwidHlwZXMiXSxFbnVtVHlwZUV4dGVuc2lvbjpbIm5hbWUiLCJkaXJlY3RpdmVzIiwidmFsdWVzIl0sSW5wdXRPYmplY3RUeXBlRXh0ZW5zaW9uOlsibmFtZSIsImRpcmVjdGl2ZXMiLCJmaWVsZHMiXX0sY249bmV3IFNldChPYmplY3Qua2V5cyhndCkpO2Z1bmN0aW9uIHZ0KGUpe2NvbnN0IHQ9ZT09bnVsbD92b2lkIDA6ZS5raW5kO3JldHVybiB0eXBlb2YgdD09InN0cmluZyImJmNuLmhhcyh0KX12YXIgZmU7KGZ1bmN0aW9uKGUpe2UuUVVFUlk9InF1ZXJ5IixlLk1VVEFUSU9OPSJtdXRhdGlvbiIsZS5TVUJTQ1JJUFRJT049InN1YnNjcmlwdGlvbiJ9KShmZXx8KGZlPXt9KSk7dmFyIEdlOyhmdW5jdGlvbihlKXtlLlFVRVJZPSJRVUVSWSIsZS5NVVRBVElPTj0iTVVUQVRJT04iLGUuU1VCU0NSSVBUSU9OPSJTVUJTQ1JJUFRJT04iLGUuRklFTEQ9IkZJRUxEIixlLkZSQUdNRU5UX0RFRklOSVRJT049IkZSQUdNRU5UX0RFRklOSVRJT04iLGUuRlJBR01FTlRfU1BSRUFEPSJGUkFHTUVOVF9TUFJFQUQiLGUuSU5MSU5FX0ZSQUdNRU5UPSJJTkxJTkVfRlJBR01FTlQiLGUuVkFSSUFCTEVfREVGSU5JVElPTj0iVkFSSUFCTEVfREVGSU5JVElPTiIsZS5TQ0hFTUE9IlNDSEVNQSIsZS5TQ0FMQVI9IlNDQUxBUiIsZS5PQkpFQ1Q9Ik9CSkVDVCIsZS5GSUVMRF9ERUZJTklUSU9OPSJGSUVMRF9ERUZJTklUSU9OIixlLkFSR1VNRU5UX0RFRklOSVRJT049IkFSR1VNRU5UX0RFRklOSVRJT04iLGUuSU5URVJGQUNFPSJJTlRFUkZBQ0UiLGUuVU5JT049IlVOSU9OIixlLkVOVU09IkVOVU0iLGUuRU5VTV9WQUxVRT0iRU5VTV9WQUxVRSIsZS5JTlBVVF9PQkpFQ1Q9IklOUFVUX09CSkVDVCIsZS5JTlBVVF9GSUVMRF9ERUZJTklUSU9OPSJJTlBVVF9GSUVMRF9ERUZJTklUSU9OIn0pKEdlfHwoR2U9e30pKTt2YXIgVDsoZnVuY3Rpb24oZSl7ZS5OQU1FPSJOYW1lIixlLkRPQ1VNRU5UPSJEb2N1bWVudCIsZS5PUEVSQVRJT05fREVGSU5JVElPTj0iT3BlcmF0aW9uRGVmaW5pdGlvbiIsZS5WQVJJQUJMRV9ERUZJTklUSU9OPSJWYXJpYWJsZURlZmluaXRpb24iLGUuU0VMRUNUSU9OX1NFVD0iU2VsZWN0aW9uU2V0IixlLkZJRUxEPSJGaWVsZCIsZS5BUkdVTUVOVD0iQXJndW1lbnQiLGUuRlJBR01FTlRfU1BSRUFEPSJGcmFnbWVudFNwcmVhZCIsZS5JTkxJTkVfRlJBR01FTlQ9IklubGluZUZyYWdtZW50IixlLkZSQUdNRU5UX0RFRklOSVRJT049IkZyYWdtZW50RGVmaW5pdGlvbiIsZS5WQVJJQUJMRT0iVmFyaWFibGUiLGUuSU5UPSJJbnRWYWx1ZSIsZS5GTE9BVD0iRmxvYXRWYWx1ZSIsZS5TVFJJTkc9IlN0cmluZ1ZhbHVlIixlLkJPT0xFQU49IkJvb2xlYW5WYWx1ZSIsZS5OVUxMPSJOdWxsVmFsdWUiLGUuRU5VTT0iRW51bVZhbHVlIixlLkxJU1Q9Ikxpc3RWYWx1ZSIsZS5PQkpFQ1Q9Ik9iamVjdFZhbHVlIixlLk9CSkVDVF9GSUVMRD0iT2JqZWN0RmllbGQiLGUuRElSRUNUSVZFPSJEaXJlY3RpdmUiLGUuTkFNRURfVFlQRT0iTmFtZWRUeXBlIixlLkxJU1RfVFlQRT0iTGlzdFR5cGUiLGUuTk9OX05VTExfVFlQRT0iTm9uTnVsbFR5cGUiLGUuU0NIRU1BX0RFRklOSVRJT049IlNjaGVtYURlZmluaXRpb24iLGUuT1BFUkFUSU9OX1RZUEVfREVGSU5JVElPTj0iT3BlcmF0aW9uVHlwZURlZmluaXRpb24iLGUuU0NBTEFSX1RZUEVfREVGSU5JVElPTj0iU2NhbGFyVHlwZURlZmluaXRpb24iLGUuT0JKRUNUX1RZUEVfREVGSU5JVElPTj0iT2JqZWN0VHlwZURlZmluaXRpb24iLGUuRklFTERfREVGSU5JVElPTj0iRmllbGREZWZpbml0aW9uIixlLklOUFVUX1ZBTFVFX0RFRklOSVRJT049IklucHV0VmFsdWVEZWZpbml0aW9uIixlLklOVEVSRkFDRV9UWVBFX0RFRklOSVRJT049IkludGVyZmFjZVR5cGVEZWZpbml0aW9uIixlLlVOSU9OX1RZUEVfREVGSU5JVElPTj0iVW5pb25UeXBlRGVmaW5pdGlvbiIsZS5FTlVNX1RZUEVfREVGSU5JVElPTj0iRW51bVR5cGVEZWZpbml0aW9uIixlLkVOVU1fVkFMVUVfREVGSU5JVElPTj0iRW51bVZhbHVlRGVmaW5pdGlvbiIsZS5JTlBVVF9PQkpFQ1RfVFlQRV9ERUZJTklUSU9OPSJJbnB1dE9iamVjdFR5cGVEZWZpbml0aW9uIixlLkRJUkVDVElWRV9ERUZJTklUSU9OPSJEaXJlY3RpdmVEZWZpbml0aW9uIixlLlNDSEVNQV9FWFRFTlNJT049IlNjaGVtYUV4dGVuc2lvbiIsZS5TQ0FMQVJfVFlQRV9FWFRFTlNJT049IlNjYWxhclR5cGVFeHRlbnNpb24iLGUuT0JKRUNUX1RZUEVfRVhURU5TSU9OPSJPYmplY3RUeXBlRXh0ZW5zaW9uIixlLklOVEVSRkFDRV9UWVBFX0VYVEVOU0lPTj0iSW50ZXJmYWNlVHlwZUV4dGVuc2lvbiIsZS5VTklPTl9UWVBFX0VYVEVOU0lPTj0iVW5pb25UeXBlRXh0ZW5zaW9uIixlLkVOVU1fVFlQRV9FWFRFTlNJT049IkVudW1UeXBlRXh0ZW5zaW9uIixlLklOUFVUX09CSkVDVF9UWVBFX0VYVEVOU0lPTj0iSW5wdXRPYmplY3RUeXBlRXh0ZW5zaW9uIn0pKFR8fChUPXt9KSk7ZnVuY3Rpb24gemUoZSl7cmV0dXJuIGU9PT05fHxlPT09MzJ9ZnVuY3Rpb24gX2UoZSl7cmV0dXJuIGU+PTQ4JiZlPD01N31mdW5jdGlvbiBFdChlKXtyZXR1cm4gZT49OTcmJmU8PTEyMnx8ZT49NjUmJmU8PTkwfWZ1bmN0aW9uIF90KGUpe3JldHVybiBFdChlKXx8ZT09PTk1fWZ1bmN0aW9uIHVuKGUpe3JldHVybiBFdChlKXx8X2UoZSl8fGU9PT05NX1mdW5jdGlvbiBsbihlKXt2YXIgdDtsZXQgbj1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUixpPW51bGwscj0tMTtmb3IobGV0IG89MDtvPGUubGVuZ3RoOysrbyl7dmFyIHM7Y29uc3QgYz1lW29dLGY9Zm4oYyk7ZiE9PWMubGVuZ3RoJiYoaT0ocz1pKSE9PW51bGwmJnMhPT12b2lkIDA/czpvLHI9byxvIT09MCYmZjxuJiYobj1mKSl9cmV0dXJuIGUubWFwKChvLGMpPT5jPT09MD9vOm8uc2xpY2UobikpLnNsaWNlKCh0PWkpIT09bnVsbCYmdCE9PXZvaWQgMD90OjAscisxKX1mdW5jdGlvbiBmbihlKXtsZXQgdD0wO2Zvcig7dDxlLmxlbmd0aCYmemUoZS5jaGFyQ29kZUF0KHQpKTspKyt0O3JldHVybiB0fWZ1bmN0aW9uIGhuKGUsdCl7Y29uc3Qgbj1lLnJlcGxhY2UoLyIiIi9nLCdcXCIiIicpLGk9bi5zcGxpdCgvXHJcbnxbXG5ccl0vZykscj1pLmxlbmd0aD09PTEscz1pLmxlbmd0aD4xJiZpLnNsaWNlKDEpLmV2ZXJ5KGI9PmIubGVuZ3RoPT09MHx8emUoYi5jaGFyQ29kZUF0KDApKSksbz1uLmVuZHNXaXRoKCdcXCIiIicpLGM9ZS5lbmRzV2l0aCgnIicpJiYhbyxmPWUuZW5kc1dpdGgoIlxcIiksZD1jfHxmLHU9IXJ8fGUubGVuZ3RoPjcwfHxkfHxzfHxvO2xldCB5PSIiO2NvbnN0IHY9ciYmemUoZS5jaGFyQ29kZUF0KDApKTtyZXR1cm4odSYmIXZ8fHMpJiYoeSs9YApgKSx5Kz1uLCh1fHxkKSYmKHkrPWAKYCksJyIiIicreSsnIiIiJ312YXIgbDsoZnVuY3Rpb24oZSl7ZS5TT0Y9IjxTT0Y+IixlLkVPRj0iPEVPRj4iLGUuQkFORz0iISIsZS5ET0xMQVI9IiQiLGUuQU1QPSImIixlLlBBUkVOX0w9IigiLGUuUEFSRU5fUj0iKSIsZS5TUFJFQUQ9Ii4uLiIsZS5DT0xPTj0iOiIsZS5FUVVBTFM9Ij0iLGUuQVQ9IkAiLGUuQlJBQ0tFVF9MPSJbIixlLkJSQUNLRVRfUj0iXSIsZS5CUkFDRV9MPSJ7IixlLlBJUEU9InwiLGUuQlJBQ0VfUj0ifSIsZS5OQU1FPSJOYW1lIixlLklOVD0iSW50IixlLkZMT0FUPSJGbG9hdCIsZS5TVFJJTkc9IlN0cmluZyIsZS5CTE9DS19TVFJJTkc9IkJsb2NrU3RyaW5nIixlLkNPTU1FTlQ9IkNvbW1lbnQifSkobHx8KGw9e30pKTtjbGFzcyBkbntjb25zdHJ1Y3Rvcih0KXtjb25zdCBuPW5ldyB5dChsLlNPRiwwLDAsMCwwKTt0aGlzLnNvdXJjZT10LHRoaXMubGFzdFRva2VuPW4sdGhpcy50b2tlbj1uLHRoaXMubGluZT0xLHRoaXMubGluZVN0YXJ0PTB9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iTGV4ZXIifWFkdmFuY2UoKXtyZXR1cm4gdGhpcy5sYXN0VG9rZW49dGhpcy50b2tlbix0aGlzLnRva2VuPXRoaXMubG9va2FoZWFkKCl9bG9va2FoZWFkKCl7bGV0IHQ9dGhpcy50b2tlbjtpZih0LmtpbmQhPT1sLkVPRilkbyBpZih0Lm5leHQpdD10Lm5leHQ7ZWxzZXtjb25zdCBuPW1uKHRoaXMsdC5lbmQpO3QubmV4dD1uLG4ucHJldj10LHQ9bn13aGlsZSh0LmtpbmQ9PT1sLkNPTU1FTlQpO3JldHVybiB0fX1mdW5jdGlvbiBwbihlKXtyZXR1cm4gZT09PWwuQkFOR3x8ZT09PWwuRE9MTEFSfHxlPT09bC5BTVB8fGU9PT1sLlBBUkVOX0x8fGU9PT1sLlBBUkVOX1J8fGU9PT1sLlNQUkVBRHx8ZT09PWwuQ09MT058fGU9PT1sLkVRVUFMU3x8ZT09PWwuQVR8fGU9PT1sLkJSQUNLRVRfTHx8ZT09PWwuQlJBQ0tFVF9SfHxlPT09bC5CUkFDRV9MfHxlPT09bC5QSVBFfHxlPT09bC5CUkFDRV9SfWZ1bmN0aW9uIGhlKGUpe3JldHVybiBlPj0wJiZlPD01NTI5NXx8ZT49NTczNDQmJmU8PTExMTQxMTF9ZnVuY3Rpb24gU2UoZSx0KXtyZXR1cm4gVHQoZS5jaGFyQ29kZUF0KHQpKSYmYnQoZS5jaGFyQ29kZUF0KHQrMSkpfWZ1bmN0aW9uIFR0KGUpe3JldHVybiBlPj01NTI5NiYmZTw9NTYzMTl9ZnVuY3Rpb24gYnQoZSl7cmV0dXJuIGU+PTU2MzIwJiZlPD01NzM0M31mdW5jdGlvbiB1ZShlLHQpe2NvbnN0IG49ZS5zb3VyY2UuYm9keS5jb2RlUG9pbnRBdCh0KTtpZihuPT09dm9pZCAwKXJldHVybiBsLkVPRjtpZihuPj0zMiYmbjw9MTI2KXtjb25zdCBpPVN0cmluZy5mcm9tQ29kZVBvaW50KG4pO3JldHVybiBpPT09JyInP2AnIidgOmAiJHtpfSJgfXJldHVybiJVKyIrbi50b1N0cmluZygxNikudG9VcHBlckNhc2UoKS5wYWRTdGFydCg0LCIwIil9ZnVuY3Rpb24gVihlLHQsbixpLHIpe2NvbnN0IHM9ZS5saW5lLG89MStuLWUubGluZVN0YXJ0O3JldHVybiBuZXcgeXQodCxuLGkscyxvLHIpfWZ1bmN0aW9uIG1uKGUsdCl7Y29uc3Qgbj1lLnNvdXJjZS5ib2R5LGk9bi5sZW5ndGg7bGV0IHI9dDtmb3IoO3I8aTspe2NvbnN0IHM9bi5jaGFyQ29kZUF0KHIpO3N3aXRjaChzKXtjYXNlIDY1Mjc5OmNhc2UgOTpjYXNlIDMyOmNhc2UgNDQ6KytyO2NvbnRpbnVlO2Nhc2UgMTA6KytyLCsrZS5saW5lLGUubGluZVN0YXJ0PXI7Y29udGludWU7Y2FzZSAxMzpuLmNoYXJDb2RlQXQocisxKT09PTEwP3IrPTI6KytyLCsrZS5saW5lLGUubGluZVN0YXJ0PXI7Y29udGludWU7Y2FzZSAzNTpyZXR1cm4geW4oZSxyKTtjYXNlIDMzOnJldHVybiBWKGUsbC5CQU5HLHIscisxKTtjYXNlIDM2OnJldHVybiBWKGUsbC5ET0xMQVIscixyKzEpO2Nhc2UgMzg6cmV0dXJuIFYoZSxsLkFNUCxyLHIrMSk7Y2FzZSA0MDpyZXR1cm4gVihlLGwuUEFSRU5fTCxyLHIrMSk7Y2FzZSA0MTpyZXR1cm4gVihlLGwuUEFSRU5fUixyLHIrMSk7Y2FzZSA0NjppZihuLmNoYXJDb2RlQXQocisxKT09PTQ2JiZuLmNoYXJDb2RlQXQocisyKT09PTQ2KXJldHVybiBWKGUsbC5TUFJFQUQscixyKzMpO2JyZWFrO2Nhc2UgNTg6cmV0dXJuIFYoZSxsLkNPTE9OLHIscisxKTtjYXNlIDYxOnJldHVybiBWKGUsbC5FUVVBTFMscixyKzEpO2Nhc2UgNjQ6cmV0dXJuIFYoZSxsLkFULHIscisxKTtjYXNlIDkxOnJldHVybiBWKGUsbC5CUkFDS0VUX0wscixyKzEpO2Nhc2UgOTM6cmV0dXJuIFYoZSxsLkJSQUNLRVRfUixyLHIrMSk7Y2FzZSAxMjM6cmV0dXJuIFYoZSxsLkJSQUNFX0wscixyKzEpO2Nhc2UgMTI0OnJldHVybiBWKGUsbC5QSVBFLHIscisxKTtjYXNlIDEyNTpyZXR1cm4gVihlLGwuQlJBQ0VfUixyLHIrMSk7Y2FzZSAzNDpyZXR1cm4gbi5jaGFyQ29kZUF0KHIrMSk9PT0zNCYmbi5jaGFyQ29kZUF0KHIrMik9PT0zND9ibihlLHIpOnZuKGUscil9aWYoX2Uocyl8fHM9PT00NSlyZXR1cm4gZ24oZSxyLHMpO2lmKF90KHMpKXJldHVybiBObihlLHIpO3Rocm93IEcoZS5zb3VyY2UscixzPT09Mzk/YFVuZXhwZWN0ZWQgc2luZ2xlIHF1b3RlIGNoYXJhY3RlciAoJyksIGRpZCB5b3UgbWVhbiB0byB1c2UgYSBkb3VibGUgcXVvdGUgKCIpP2A6aGUocyl8fFNlKG4scik/YFVuZXhwZWN0ZWQgY2hhcmFjdGVyOiAke3VlKGUscil9LmA6YEludmFsaWQgY2hhcmFjdGVyOiAke3VlKGUscil9LmApfXJldHVybiBWKGUsbC5FT0YsaSxpKX1mdW5jdGlvbiB5bihlLHQpe2NvbnN0IG49ZS5zb3VyY2UuYm9keSxpPW4ubGVuZ3RoO2xldCByPXQrMTtmb3IoO3I8aTspe2NvbnN0IHM9bi5jaGFyQ29kZUF0KHIpO2lmKHM9PT0xMHx8cz09PTEzKWJyZWFrO2lmKGhlKHMpKSsrcjtlbHNlIGlmKFNlKG4scikpcis9MjtlbHNlIGJyZWFrfXJldHVybiBWKGUsbC5DT01NRU5ULHQscixuLnNsaWNlKHQrMSxyKSl9ZnVuY3Rpb24gZ24oZSx0LG4pe2NvbnN0IGk9ZS5zb3VyY2UuYm9keTtsZXQgcj10LHM9bixvPSExO2lmKHM9PT00NSYmKHM9aS5jaGFyQ29kZUF0KCsrcikpLHM9PT00OCl7aWYocz1pLmNoYXJDb2RlQXQoKytyKSxfZShzKSl0aHJvdyBHKGUuc291cmNlLHIsYEludmFsaWQgbnVtYmVyLCB1bmV4cGVjdGVkIGRpZ2l0IGFmdGVyIDA6ICR7dWUoZSxyKX0uYCl9ZWxzZSByPUhlKGUscixzKSxzPWkuY2hhckNvZGVBdChyKTtpZihzPT09NDYmJihvPSEwLHM9aS5jaGFyQ29kZUF0KCsrcikscj1IZShlLHIscykscz1pLmNoYXJDb2RlQXQocikpLChzPT09Njl8fHM9PT0xMDEpJiYobz0hMCxzPWkuY2hhckNvZGVBdCgrK3IpLChzPT09NDN8fHM9PT00NSkmJihzPWkuY2hhckNvZGVBdCgrK3IpKSxyPUhlKGUscixzKSxzPWkuY2hhckNvZGVBdChyKSkscz09PTQ2fHxfdChzKSl0aHJvdyBHKGUuc291cmNlLHIsYEludmFsaWQgbnVtYmVyLCBleHBlY3RlZCBkaWdpdCBidXQgZ290OiAke3VlKGUscil9LmApO3JldHVybiBWKGUsbz9sLkZMT0FUOmwuSU5ULHQscixpLnNsaWNlKHQscikpfWZ1bmN0aW9uIEhlKGUsdCxuKXtpZighX2UobikpdGhyb3cgRyhlLnNvdXJjZSx0LGBJbnZhbGlkIG51bWJlciwgZXhwZWN0ZWQgZGlnaXQgYnV0IGdvdDogJHt1ZShlLHQpfS5gKTtjb25zdCBpPWUuc291cmNlLmJvZHk7bGV0IHI9dCsxO2Zvcig7X2UoaS5jaGFyQ29kZUF0KHIpKTspKytyO3JldHVybiByfWZ1bmN0aW9uIHZuKGUsdCl7Y29uc3Qgbj1lLnNvdXJjZS5ib2R5LGk9bi5sZW5ndGg7bGV0IHI9dCsxLHM9cixvPSIiO2Zvcig7cjxpOyl7Y29uc3QgYz1uLmNoYXJDb2RlQXQocik7aWYoYz09PTM0KXJldHVybiBvKz1uLnNsaWNlKHMsciksVihlLGwuU1RSSU5HLHQscisxLG8pO2lmKGM9PT05Mil7bys9bi5zbGljZShzLHIpO2NvbnN0IGY9bi5jaGFyQ29kZUF0KHIrMSk9PT0xMTc/bi5jaGFyQ29kZUF0KHIrMik9PT0xMjM/RW4oZSxyKTpfbihlLHIpOlRuKGUscik7bys9Zi52YWx1ZSxyKz1mLnNpemUscz1yO2NvbnRpbnVlfWlmKGM9PT0xMHx8Yz09PTEzKWJyZWFrO2lmKGhlKGMpKSsrcjtlbHNlIGlmKFNlKG4scikpcis9MjtlbHNlIHRocm93IEcoZS5zb3VyY2UscixgSW52YWxpZCBjaGFyYWN0ZXIgd2l0aGluIFN0cmluZzogJHt1ZShlLHIpfS5gKX10aHJvdyBHKGUuc291cmNlLHIsIlVudGVybWluYXRlZCBzdHJpbmcuIil9ZnVuY3Rpb24gRW4oZSx0KXtjb25zdCBuPWUuc291cmNlLmJvZHk7bGV0IGk9MCxyPTM7Zm9yKDtyPDEyOyl7Y29uc3Qgcz1uLmNoYXJDb2RlQXQodCtyKyspO2lmKHM9PT0xMjUpe2lmKHI8NXx8IWhlKGkpKWJyZWFrO3JldHVybnt2YWx1ZTpTdHJpbmcuZnJvbUNvZGVQb2ludChpKSxzaXplOnJ9fWlmKGk9aTw8NHxUZShzKSxpPDApYnJlYWt9dGhyb3cgRyhlLnNvdXJjZSx0LGBJbnZhbGlkIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlOiAiJHtuLnNsaWNlKHQsdCtyKX0iLmApfWZ1bmN0aW9uIF9uKGUsdCl7Y29uc3Qgbj1lLnNvdXJjZS5ib2R5LGk9TnQobix0KzIpO2lmKGhlKGkpKXJldHVybnt2YWx1ZTpTdHJpbmcuZnJvbUNvZGVQb2ludChpKSxzaXplOjZ9O2lmKFR0KGkpJiZuLmNoYXJDb2RlQXQodCs2KT09PTkyJiZuLmNoYXJDb2RlQXQodCs3KT09PTExNyl7Y29uc3Qgcj1OdChuLHQrOCk7aWYoYnQocikpcmV0dXJue3ZhbHVlOlN0cmluZy5mcm9tQ29kZVBvaW50KGksciksc2l6ZToxMn19dGhyb3cgRyhlLnNvdXJjZSx0LGBJbnZhbGlkIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlOiAiJHtuLnNsaWNlKHQsdCs2KX0iLmApfWZ1bmN0aW9uIE50KGUsdCl7cmV0dXJuIFRlKGUuY2hhckNvZGVBdCh0KSk8PDEyfFRlKGUuY2hhckNvZGVBdCh0KzEpKTw8OHxUZShlLmNoYXJDb2RlQXQodCsyKSk8PDR8VGUoZS5jaGFyQ29kZUF0KHQrMykpfWZ1bmN0aW9uIFRlKGUpe3JldHVybiBlPj00OCYmZTw9NTc/ZS00ODplPj02NSYmZTw9NzA/ZS01NTplPj05NyYmZTw9MTAyP2UtODc6LTF9ZnVuY3Rpb24gVG4oZSx0KXtjb25zdCBuPWUuc291cmNlLmJvZHk7c3dpdGNoKG4uY2hhckNvZGVBdCh0KzEpKXtjYXNlIDM0OnJldHVybnt2YWx1ZTonIicsc2l6ZToyfTtjYXNlIDkyOnJldHVybnt2YWx1ZToiXFwiLHNpemU6Mn07Y2FzZSA0NzpyZXR1cm57dmFsdWU6Ii8iLHNpemU6Mn07Y2FzZSA5ODpyZXR1cm57dmFsdWU6IlxiIixzaXplOjJ9O2Nhc2UgMTAyOnJldHVybnt2YWx1ZToiXGYiLHNpemU6Mn07Y2FzZSAxMTA6cmV0dXJue3ZhbHVlOmAKYCxzaXplOjJ9O2Nhc2UgMTE0OnJldHVybnt2YWx1ZToiXHIiLHNpemU6Mn07Y2FzZSAxMTY6cmV0dXJue3ZhbHVlOiIJIixzaXplOjJ9fXRocm93IEcoZS5zb3VyY2UsdCxgSW52YWxpZCBjaGFyYWN0ZXIgZXNjYXBlIHNlcXVlbmNlOiAiJHtuLnNsaWNlKHQsdCsyKX0iLmApfWZ1bmN0aW9uIGJuKGUsdCl7Y29uc3Qgbj1lLnNvdXJjZS5ib2R5LGk9bi5sZW5ndGg7bGV0IHI9ZS5saW5lU3RhcnQscz10KzMsbz1zLGM9IiI7Y29uc3QgZj1bXTtmb3IoO3M8aTspe2NvbnN0IGQ9bi5jaGFyQ29kZUF0KHMpO2lmKGQ9PT0zNCYmbi5jaGFyQ29kZUF0KHMrMSk9PT0zNCYmbi5jaGFyQ29kZUF0KHMrMik9PT0zNCl7Yys9bi5zbGljZShvLHMpLGYucHVzaChjKTtjb25zdCB1PVYoZSxsLkJMT0NLX1NUUklORyx0LHMrMyxsbihmKS5qb2luKGAKYCkpO3JldHVybiBlLmxpbmUrPWYubGVuZ3RoLTEsZS5saW5lU3RhcnQ9cix1fWlmKGQ9PT05MiYmbi5jaGFyQ29kZUF0KHMrMSk9PT0zNCYmbi5jaGFyQ29kZUF0KHMrMik9PT0zNCYmbi5jaGFyQ29kZUF0KHMrMyk9PT0zNCl7Yys9bi5zbGljZShvLHMpLG89cysxLHMrPTQ7Y29udGludWV9aWYoZD09PTEwfHxkPT09MTMpe2MrPW4uc2xpY2UobyxzKSxmLnB1c2goYyksZD09PTEzJiZuLmNoYXJDb2RlQXQocysxKT09PTEwP3MrPTI6KytzLGM9IiIsbz1zLHI9cztjb250aW51ZX1pZihoZShkKSkrK3M7ZWxzZSBpZihTZShuLHMpKXMrPTI7ZWxzZSB0aHJvdyBHKGUuc291cmNlLHMsYEludmFsaWQgY2hhcmFjdGVyIHdpdGhpbiBTdHJpbmc6ICR7dWUoZSxzKX0uYCl9dGhyb3cgRyhlLnNvdXJjZSxzLCJVbnRlcm1pbmF0ZWQgc3RyaW5nLiIpfWZ1bmN0aW9uIE5uKGUsdCl7Y29uc3Qgbj1lLnNvdXJjZS5ib2R5LGk9bi5sZW5ndGg7bGV0IHI9dCsxO2Zvcig7cjxpOyl7Y29uc3Qgcz1uLmNoYXJDb2RlQXQocik7aWYodW4ocykpKytyO2Vsc2UgYnJlYWt9cmV0dXJuIFYoZSxsLk5BTUUsdCxyLG4uc2xpY2UodCxyKSl9Y29uc3QgeG49MTAseHQ9MjtmdW5jdGlvbiBZZShlKXtyZXR1cm4gT2UoZSxbXSl9ZnVuY3Rpb24gT2UoZSx0KXtzd2l0Y2godHlwZW9mIGUpe2Nhc2Uic3RyaW5nIjpyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSk7Y2FzZSJmdW5jdGlvbiI6cmV0dXJuIGUubmFtZT9gW2Z1bmN0aW9uICR7ZS5uYW1lfV1gOiJbZnVuY3Rpb25dIjtjYXNlIm9iamVjdCI6cmV0dXJuIEFuKGUsdCk7ZGVmYXVsdDpyZXR1cm4gU3RyaW5nKGUpfX1mdW5jdGlvbiBBbihlLHQpe2lmKGU9PT1udWxsKXJldHVybiJudWxsIjtpZih0LmluY2x1ZGVzKGUpKXJldHVybiJbQ2lyY3VsYXJdIjtjb25zdCBuPVsuLi50LGVdO2lmKEluKGUpKXtjb25zdCBpPWUudG9KU09OKCk7aWYoaSE9PWUpcmV0dXJuIHR5cGVvZiBpPT0ic3RyaW5nIj9pOk9lKGksbil9ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBPbihlLG4pO3JldHVybiBTbihlLG4pfWZ1bmN0aW9uIEluKGUpe3JldHVybiB0eXBlb2YgZS50b0pTT049PSJmdW5jdGlvbiJ9ZnVuY3Rpb24gU24oZSx0KXtjb25zdCBuPU9iamVjdC5lbnRyaWVzKGUpO3JldHVybiBuLmxlbmd0aD09PTA/Int9Ijp0Lmxlbmd0aD54dD8iWyIrd24oZSkrIl0iOiJ7ICIrbi5tYXAoKFtyLHNdKT0+cisiOiAiK09lKHMsdCkpLmpvaW4oIiwgIikrIiB9In1mdW5jdGlvbiBPbihlLHQpe2lmKGUubGVuZ3RoPT09MClyZXR1cm4iW10iO2lmKHQubGVuZ3RoPnh0KXJldHVybiJbQXJyYXldIjtjb25zdCBuPU1hdGgubWluKHhuLGUubGVuZ3RoKSxpPWUubGVuZ3RoLW4scj1bXTtmb3IobGV0IHM9MDtzPG47KytzKXIucHVzaChPZShlW3NdLHQpKTtyZXR1cm4gaT09PTE/ci5wdXNoKCIuLi4gMSBtb3JlIGl0ZW0iKTppPjEmJnIucHVzaChgLi4uICR7aX0gbW9yZSBpdGVtc2ApLCJbIityLmpvaW4oIiwgIikrIl0ifWZ1bmN0aW9uIHduKGUpe2NvbnN0IHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnJlcGxhY2UoL15cW29iamVjdCAvLCIiKS5yZXBsYWNlKC9dJC8sIiIpO2lmKHQ9PT0iT2JqZWN0IiYmdHlwZW9mIGUuY29uc3RydWN0b3I9PSJmdW5jdGlvbiIpe2NvbnN0IG49ZS5jb25zdHJ1Y3Rvci5uYW1lO2lmKHR5cGVvZiBuPT0ic3RyaW5nIiYmbiE9PSIiKXJldHVybiBufXJldHVybiB0fWNvbnN0IERuPWdsb2JhbFRoaXMucHJvY2VzcyYmcHJvY2Vzcy5lbnYuTk9ERV9FTlY9PT0icHJvZHVjdGlvbiI/ZnVuY3Rpb24odCxuKXtyZXR1cm4gdCBpbnN0YW5jZW9mIG59OmZ1bmN0aW9uKHQsbil7aWYodCBpbnN0YW5jZW9mIG4pcmV0dXJuITA7aWYodHlwZW9mIHQ9PSJvYmplY3QiJiZ0IT09bnVsbCl7dmFyIGk7Y29uc3Qgcj1uLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddLHM9U3ltYm9sLnRvU3RyaW5nVGFnIGluIHQ/dFtTeW1ib2wudG9TdHJpbmdUYWddOihpPXQuY29uc3RydWN0b3IpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS5uYW1lO2lmKHI9PT1zKXtjb25zdCBvPVllKHQpO3Rocm93IG5ldyBFcnJvcihgQ2Fubm90IHVzZSAke3J9ICIke299IiBmcm9tIGFub3RoZXIgbW9kdWxlIG9yIHJlYWxtLgoKRW5zdXJlIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgaW5zdGFuY2Ugb2YgImdyYXBocWwiIGluIHRoZSBub2RlX21vZHVsZXMKZGlyZWN0b3J5LiBJZiBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgImdyYXBocWwiIGFyZSB0aGUgZGVwZW5kZW5jaWVzIG9mIG90aGVyCnJlbGllZCBvbiBtb2R1bGVzLCB1c2UgInJlc29sdXRpb25zIiB0byBlbnN1cmUgb25seSBvbmUgdmVyc2lvbiBpcyBpbnN0YWxsZWQuCgpodHRwczovL3lhcm5wa2cuY29tL2VuL2RvY3Mvc2VsZWN0aXZlLXZlcnNpb24tcmVzb2x1dGlvbnMKCkR1cGxpY2F0ZSAiZ3JhcGhxbCIgbW9kdWxlcyBjYW5ub3QgYmUgdXNlZCBhdCB0aGUgc2FtZSB0aW1lIHNpbmNlIGRpZmZlcmVudAp2ZXJzaW9ucyBtYXkgaGF2ZSBkaWZmZXJlbnQgY2FwYWJpbGl0aWVzIGFuZCBiZWhhdmlvci4gVGhlIGRhdGEgZnJvbSBvbmUKdmVyc2lvbiB1c2VkIGluIHRoZSBmdW5jdGlvbiBmcm9tIGFub3RoZXIgY291bGQgcHJvZHVjZSBjb25mdXNpbmcgYW5kCnNwdXJpb3VzIHJlc3VsdHMuYCl9fXJldHVybiExfTtjbGFzcyBBdHtjb25zdHJ1Y3Rvcih0LG49IkdyYXBoUUwgcmVxdWVzdCIsaT17bGluZToxLGNvbHVtbjoxfSl7dHlwZW9mIHQ9PSJzdHJpbmcifHxvZSghMSxgQm9keSBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZDogJHtZZSh0KX0uYCksdGhpcy5ib2R5PXQsdGhpcy5uYW1lPW4sdGhpcy5sb2NhdGlvbk9mZnNldD1pLHRoaXMubG9jYXRpb25PZmZzZXQubGluZT4wfHxvZSghMSwibGluZSBpbiBsb2NhdGlvbk9mZnNldCBpcyAxLWluZGV4ZWQgYW5kIG11c3QgYmUgcG9zaXRpdmUuIiksdGhpcy5sb2NhdGlvbk9mZnNldC5jb2x1bW4+MHx8b2UoITEsImNvbHVtbiBpbiBsb2NhdGlvbk9mZnNldCBpcyAxLWluZGV4ZWQgYW5kIG11c3QgYmUgcG9zaXRpdmUuIil9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iU291cmNlIn19ZnVuY3Rpb24gQ24oZSl7cmV0dXJuIERuKGUsQXQpfWZ1bmN0aW9uIEl0KGUsdCl7Y29uc3Qgbj1uZXcga24oZSx0KSxpPW4ucGFyc2VEb2N1bWVudCgpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwidG9rZW5Db3VudCIse2VudW1lcmFibGU6ITEsdmFsdWU6bi50b2tlbkNvdW50fSksaX1jbGFzcyBrbntjb25zdHJ1Y3Rvcih0LG49e30pe2NvbnN0IGk9Q24odCk/dDpuZXcgQXQodCk7dGhpcy5fbGV4ZXI9bmV3IGRuKGkpLHRoaXMuX29wdGlvbnM9bix0aGlzLl90b2tlbkNvdW50ZXI9MH1nZXQgdG9rZW5Db3VudCgpe3JldHVybiB0aGlzLl90b2tlbkNvdW50ZXJ9cGFyc2VOYW1lKCl7Y29uc3QgdD10aGlzLmV4cGVjdFRva2VuKGwuTkFNRSk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuTkFNRSx2YWx1ZTp0LnZhbHVlfSl9cGFyc2VEb2N1bWVudCgpe3JldHVybiB0aGlzLm5vZGUodGhpcy5fbGV4ZXIudG9rZW4se2tpbmQ6VC5ET0NVTUVOVCxkZWZpbml0aW9uczp0aGlzLm1hbnkobC5TT0YsdGhpcy5wYXJzZURlZmluaXRpb24sbC5FT0YpfSl9cGFyc2VEZWZpbml0aW9uKCl7aWYodGhpcy5wZWVrKGwuQlJBQ0VfTCkpcmV0dXJuIHRoaXMucGFyc2VPcGVyYXRpb25EZWZpbml0aW9uKCk7Y29uc3QgdD10aGlzLnBlZWtEZXNjcmlwdGlvbigpLG49dD90aGlzLl9sZXhlci5sb29rYWhlYWQoKTp0aGlzLl9sZXhlci50b2tlbjtpZihuLmtpbmQ9PT1sLk5BTUUpe3N3aXRjaChuLnZhbHVlKXtjYXNlInNjaGVtYSI6cmV0dXJuIHRoaXMucGFyc2VTY2hlbWFEZWZpbml0aW9uKCk7Y2FzZSJzY2FsYXIiOnJldHVybiB0aGlzLnBhcnNlU2NhbGFyVHlwZURlZmluaXRpb24oKTtjYXNlInR5cGUiOnJldHVybiB0aGlzLnBhcnNlT2JqZWN0VHlwZURlZmluaXRpb24oKTtjYXNlImludGVyZmFjZSI6cmV0dXJuIHRoaXMucGFyc2VJbnRlcmZhY2VUeXBlRGVmaW5pdGlvbigpO2Nhc2UidW5pb24iOnJldHVybiB0aGlzLnBhcnNlVW5pb25UeXBlRGVmaW5pdGlvbigpO2Nhc2UiZW51bSI6cmV0dXJuIHRoaXMucGFyc2VFbnVtVHlwZURlZmluaXRpb24oKTtjYXNlImlucHV0IjpyZXR1cm4gdGhpcy5wYXJzZUlucHV0T2JqZWN0VHlwZURlZmluaXRpb24oKTtjYXNlImRpcmVjdGl2ZSI6cmV0dXJuIHRoaXMucGFyc2VEaXJlY3RpdmVEZWZpbml0aW9uKCl9aWYodCl0aHJvdyBHKHRoaXMuX2xleGVyLnNvdXJjZSx0aGlzLl9sZXhlci50b2tlbi5zdGFydCwiVW5leHBlY3RlZCBkZXNjcmlwdGlvbiwgZGVzY3JpcHRpb25zIGFyZSBzdXBwb3J0ZWQgb25seSBvbiB0eXBlIGRlZmluaXRpb25zLiIpO3N3aXRjaChuLnZhbHVlKXtjYXNlInF1ZXJ5IjpjYXNlIm11dGF0aW9uIjpjYXNlInN1YnNjcmlwdGlvbiI6cmV0dXJuIHRoaXMucGFyc2VPcGVyYXRpb25EZWZpbml0aW9uKCk7Y2FzZSJmcmFnbWVudCI6cmV0dXJuIHRoaXMucGFyc2VGcmFnbWVudERlZmluaXRpb24oKTtjYXNlImV4dGVuZCI6cmV0dXJuIHRoaXMucGFyc2VUeXBlU3lzdGVtRXh0ZW5zaW9uKCl9fXRocm93IHRoaXMudW5leHBlY3RlZChuKX1wYXJzZU9wZXJhdGlvbkRlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO2lmKHRoaXMucGVlayhsLkJSQUNFX0wpKXJldHVybiB0aGlzLm5vZGUodCx7a2luZDpULk9QRVJBVElPTl9ERUZJTklUSU9OLG9wZXJhdGlvbjpmZS5RVUVSWSxuYW1lOnZvaWQgMCx2YXJpYWJsZURlZmluaXRpb25zOltdLGRpcmVjdGl2ZXM6W10sc2VsZWN0aW9uU2V0OnRoaXMucGFyc2VTZWxlY3Rpb25TZXQoKX0pO2NvbnN0IG49dGhpcy5wYXJzZU9wZXJhdGlvblR5cGUoKTtsZXQgaTtyZXR1cm4gdGhpcy5wZWVrKGwuTkFNRSkmJihpPXRoaXMucGFyc2VOYW1lKCkpLHRoaXMubm9kZSh0LHtraW5kOlQuT1BFUkFUSU9OX0RFRklOSVRJT04sb3BlcmF0aW9uOm4sbmFtZTppLHZhcmlhYmxlRGVmaW5pdGlvbnM6dGhpcy5wYXJzZVZhcmlhYmxlRGVmaW5pdGlvbnMoKSxkaXJlY3RpdmVzOnRoaXMucGFyc2VEaXJlY3RpdmVzKCExKSxzZWxlY3Rpb25TZXQ6dGhpcy5wYXJzZVNlbGVjdGlvblNldCgpfSl9cGFyc2VPcGVyYXRpb25UeXBlKCl7Y29uc3QgdD10aGlzLmV4cGVjdFRva2VuKGwuTkFNRSk7c3dpdGNoKHQudmFsdWUpe2Nhc2UicXVlcnkiOnJldHVybiBmZS5RVUVSWTtjYXNlIm11dGF0aW9uIjpyZXR1cm4gZmUuTVVUQVRJT047Y2FzZSJzdWJzY3JpcHRpb24iOnJldHVybiBmZS5TVUJTQ1JJUFRJT059dGhyb3cgdGhpcy51bmV4cGVjdGVkKHQpfXBhcnNlVmFyaWFibGVEZWZpbml0aW9ucygpe3JldHVybiB0aGlzLm9wdGlvbmFsTWFueShsLlBBUkVOX0wsdGhpcy5wYXJzZVZhcmlhYmxlRGVmaW5pdGlvbixsLlBBUkVOX1IpfXBhcnNlVmFyaWFibGVEZWZpbml0aW9uKCl7cmV0dXJuIHRoaXMubm9kZSh0aGlzLl9sZXhlci50b2tlbix7a2luZDpULlZBUklBQkxFX0RFRklOSVRJT04sdmFyaWFibGU6dGhpcy5wYXJzZVZhcmlhYmxlKCksdHlwZToodGhpcy5leHBlY3RUb2tlbihsLkNPTE9OKSx0aGlzLnBhcnNlVHlwZVJlZmVyZW5jZSgpKSxkZWZhdWx0VmFsdWU6dGhpcy5leHBlY3RPcHRpb25hbFRva2VuKGwuRVFVQUxTKT90aGlzLnBhcnNlQ29uc3RWYWx1ZUxpdGVyYWwoKTp2b2lkIDAsZGlyZWN0aXZlczp0aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCl9KX1wYXJzZVZhcmlhYmxlKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjtyZXR1cm4gdGhpcy5leHBlY3RUb2tlbihsLkRPTExBUiksdGhpcy5ub2RlKHQse2tpbmQ6VC5WQVJJQUJMRSxuYW1lOnRoaXMucGFyc2VOYW1lKCl9KX1wYXJzZVNlbGVjdGlvblNldCgpe3JldHVybiB0aGlzLm5vZGUodGhpcy5fbGV4ZXIudG9rZW4se2tpbmQ6VC5TRUxFQ1RJT05fU0VULHNlbGVjdGlvbnM6dGhpcy5tYW55KGwuQlJBQ0VfTCx0aGlzLnBhcnNlU2VsZWN0aW9uLGwuQlJBQ0VfUil9KX1wYXJzZVNlbGVjdGlvbigpe3JldHVybiB0aGlzLnBlZWsobC5TUFJFQUQpP3RoaXMucGFyc2VGcmFnbWVudCgpOnRoaXMucGFyc2VGaWVsZCgpfXBhcnNlRmllbGQoKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZU5hbWUoKTtsZXQgaSxyO3JldHVybiB0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4obC5DT0xPTik/KGk9bixyPXRoaXMucGFyc2VOYW1lKCkpOnI9bix0aGlzLm5vZGUodCx7a2luZDpULkZJRUxELGFsaWFzOmksbmFtZTpyLGFyZ3VtZW50czp0aGlzLnBhcnNlQXJndW1lbnRzKCExKSxkaXJlY3RpdmVzOnRoaXMucGFyc2VEaXJlY3RpdmVzKCExKSxzZWxlY3Rpb25TZXQ6dGhpcy5wZWVrKGwuQlJBQ0VfTCk/dGhpcy5wYXJzZVNlbGVjdGlvblNldCgpOnZvaWQgMH0pfXBhcnNlQXJndW1lbnRzKHQpe2NvbnN0IG49dD90aGlzLnBhcnNlQ29uc3RBcmd1bWVudDp0aGlzLnBhcnNlQXJndW1lbnQ7cmV0dXJuIHRoaXMub3B0aW9uYWxNYW55KGwuUEFSRU5fTCxuLGwuUEFSRU5fUil9cGFyc2VBcmd1bWVudCh0PSExKXtjb25zdCBuPXRoaXMuX2xleGVyLnRva2VuLGk9dGhpcy5wYXJzZU5hbWUoKTtyZXR1cm4gdGhpcy5leHBlY3RUb2tlbihsLkNPTE9OKSx0aGlzLm5vZGUobix7a2luZDpULkFSR1VNRU5ULG5hbWU6aSx2YWx1ZTp0aGlzLnBhcnNlVmFsdWVMaXRlcmFsKHQpfSl9cGFyc2VDb25zdEFyZ3VtZW50KCl7cmV0dXJuIHRoaXMucGFyc2VBcmd1bWVudCghMCl9cGFyc2VGcmFnbWVudCgpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47dGhpcy5leHBlY3RUb2tlbihsLlNQUkVBRCk7Y29uc3Qgbj10aGlzLmV4cGVjdE9wdGlvbmFsS2V5d29yZCgib24iKTtyZXR1cm4hbiYmdGhpcy5wZWVrKGwuTkFNRSk/dGhpcy5ub2RlKHQse2tpbmQ6VC5GUkFHTUVOVF9TUFJFQUQsbmFtZTp0aGlzLnBhcnNlRnJhZ21lbnROYW1lKCksZGlyZWN0aXZlczp0aGlzLnBhcnNlRGlyZWN0aXZlcyghMSl9KTp0aGlzLm5vZGUodCx7a2luZDpULklOTElORV9GUkFHTUVOVCx0eXBlQ29uZGl0aW9uOm4/dGhpcy5wYXJzZU5hbWVkVHlwZSgpOnZvaWQgMCxkaXJlY3RpdmVzOnRoaXMucGFyc2VEaXJlY3RpdmVzKCExKSxzZWxlY3Rpb25TZXQ6dGhpcy5wYXJzZVNlbGVjdGlvblNldCgpfSl9cGFyc2VGcmFnbWVudERlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO3JldHVybiB0aGlzLmV4cGVjdEtleXdvcmQoImZyYWdtZW50IiksdGhpcy5fb3B0aW9ucy5hbGxvd0xlZ2FjeUZyYWdtZW50VmFyaWFibGVzPT09ITA/dGhpcy5ub2RlKHQse2tpbmQ6VC5GUkFHTUVOVF9ERUZJTklUSU9OLG5hbWU6dGhpcy5wYXJzZUZyYWdtZW50TmFtZSgpLHZhcmlhYmxlRGVmaW5pdGlvbnM6dGhpcy5wYXJzZVZhcmlhYmxlRGVmaW5pdGlvbnMoKSx0eXBlQ29uZGl0aW9uOih0aGlzLmV4cGVjdEtleXdvcmQoIm9uIiksdGhpcy5wYXJzZU5hbWVkVHlwZSgpKSxkaXJlY3RpdmVzOnRoaXMucGFyc2VEaXJlY3RpdmVzKCExKSxzZWxlY3Rpb25TZXQ6dGhpcy5wYXJzZVNlbGVjdGlvblNldCgpfSk6dGhpcy5ub2RlKHQse2tpbmQ6VC5GUkFHTUVOVF9ERUZJTklUSU9OLG5hbWU6dGhpcy5wYXJzZUZyYWdtZW50TmFtZSgpLHR5cGVDb25kaXRpb246KHRoaXMuZXhwZWN0S2V5d29yZCgib24iKSx0aGlzLnBhcnNlTmFtZWRUeXBlKCkpLGRpcmVjdGl2ZXM6dGhpcy5wYXJzZURpcmVjdGl2ZXMoITEpLHNlbGVjdGlvblNldDp0aGlzLnBhcnNlU2VsZWN0aW9uU2V0KCl9KX1wYXJzZUZyYWdtZW50TmFtZSgpe2lmKHRoaXMuX2xleGVyLnRva2VuLnZhbHVlPT09Im9uIil0aHJvdyB0aGlzLnVuZXhwZWN0ZWQoKTtyZXR1cm4gdGhpcy5wYXJzZU5hbWUoKX1wYXJzZVZhbHVlTGl0ZXJhbCh0KXtjb25zdCBuPXRoaXMuX2xleGVyLnRva2VuO3N3aXRjaChuLmtpbmQpe2Nhc2UgbC5CUkFDS0VUX0w6cmV0dXJuIHRoaXMucGFyc2VMaXN0KHQpO2Nhc2UgbC5CUkFDRV9MOnJldHVybiB0aGlzLnBhcnNlT2JqZWN0KHQpO2Nhc2UgbC5JTlQ6cmV0dXJuIHRoaXMuYWR2YW5jZUxleGVyKCksdGhpcy5ub2RlKG4se2tpbmQ6VC5JTlQsdmFsdWU6bi52YWx1ZX0pO2Nhc2UgbC5GTE9BVDpyZXR1cm4gdGhpcy5hZHZhbmNlTGV4ZXIoKSx0aGlzLm5vZGUobix7a2luZDpULkZMT0FULHZhbHVlOm4udmFsdWV9KTtjYXNlIGwuU1RSSU5HOmNhc2UgbC5CTE9DS19TVFJJTkc6cmV0dXJuIHRoaXMucGFyc2VTdHJpbmdMaXRlcmFsKCk7Y2FzZSBsLk5BTUU6c3dpdGNoKHRoaXMuYWR2YW5jZUxleGVyKCksbi52YWx1ZSl7Y2FzZSJ0cnVlIjpyZXR1cm4gdGhpcy5ub2RlKG4se2tpbmQ6VC5CT09MRUFOLHZhbHVlOiEwfSk7Y2FzZSJmYWxzZSI6cmV0dXJuIHRoaXMubm9kZShuLHtraW5kOlQuQk9PTEVBTix2YWx1ZTohMX0pO2Nhc2UibnVsbCI6cmV0dXJuIHRoaXMubm9kZShuLHtraW5kOlQuTlVMTH0pO2RlZmF1bHQ6cmV0dXJuIHRoaXMubm9kZShuLHtraW5kOlQuRU5VTSx2YWx1ZTpuLnZhbHVlfSl9Y2FzZSBsLkRPTExBUjppZih0KWlmKHRoaXMuZXhwZWN0VG9rZW4obC5ET0xMQVIpLHRoaXMuX2xleGVyLnRva2VuLmtpbmQ9PT1sLk5BTUUpe2NvbnN0IGk9dGhpcy5fbGV4ZXIudG9rZW4udmFsdWU7dGhyb3cgRyh0aGlzLl9sZXhlci5zb3VyY2Usbi5zdGFydCxgVW5leHBlY3RlZCB2YXJpYWJsZSAiJCR7aX0iIGluIGNvbnN0YW50IHZhbHVlLmApfWVsc2UgdGhyb3cgdGhpcy51bmV4cGVjdGVkKG4pO3JldHVybiB0aGlzLnBhcnNlVmFyaWFibGUoKTtkZWZhdWx0OnRocm93IHRoaXMudW5leHBlY3RlZCgpfX1wYXJzZUNvbnN0VmFsdWVMaXRlcmFsKCl7cmV0dXJuIHRoaXMucGFyc2VWYWx1ZUxpdGVyYWwoITApfXBhcnNlU3RyaW5nTGl0ZXJhbCgpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47cmV0dXJuIHRoaXMuYWR2YW5jZUxleGVyKCksdGhpcy5ub2RlKHQse2tpbmQ6VC5TVFJJTkcsdmFsdWU6dC52YWx1ZSxibG9jazp0LmtpbmQ9PT1sLkJMT0NLX1NUUklOR30pfXBhcnNlTGlzdCh0KXtjb25zdCBuPSgpPT50aGlzLnBhcnNlVmFsdWVMaXRlcmFsKHQpO3JldHVybiB0aGlzLm5vZGUodGhpcy5fbGV4ZXIudG9rZW4se2tpbmQ6VC5MSVNULHZhbHVlczp0aGlzLmFueShsLkJSQUNLRVRfTCxuLGwuQlJBQ0tFVF9SKX0pfXBhcnNlT2JqZWN0KHQpe2NvbnN0IG49KCk9PnRoaXMucGFyc2VPYmplY3RGaWVsZCh0KTtyZXR1cm4gdGhpcy5ub2RlKHRoaXMuX2xleGVyLnRva2VuLHtraW5kOlQuT0JKRUNULGZpZWxkczp0aGlzLmFueShsLkJSQUNFX0wsbixsLkJSQUNFX1IpfSl9cGFyc2VPYmplY3RGaWVsZCh0KXtjb25zdCBuPXRoaXMuX2xleGVyLnRva2VuLGk9dGhpcy5wYXJzZU5hbWUoKTtyZXR1cm4gdGhpcy5leHBlY3RUb2tlbihsLkNPTE9OKSx0aGlzLm5vZGUobix7a2luZDpULk9CSkVDVF9GSUVMRCxuYW1lOmksdmFsdWU6dGhpcy5wYXJzZVZhbHVlTGl0ZXJhbCh0KX0pfXBhcnNlRGlyZWN0aXZlcyh0KXtjb25zdCBuPVtdO2Zvcig7dGhpcy5wZWVrKGwuQVQpOyluLnB1c2godGhpcy5wYXJzZURpcmVjdGl2ZSh0KSk7cmV0dXJuIG59cGFyc2VDb25zdERpcmVjdGl2ZXMoKXtyZXR1cm4gdGhpcy5wYXJzZURpcmVjdGl2ZXMoITApfXBhcnNlRGlyZWN0aXZlKHQpe2NvbnN0IG49dGhpcy5fbGV4ZXIudG9rZW47cmV0dXJuIHRoaXMuZXhwZWN0VG9rZW4obC5BVCksdGhpcy5ub2RlKG4se2tpbmQ6VC5ESVJFQ1RJVkUsbmFtZTp0aGlzLnBhcnNlTmFtZSgpLGFyZ3VtZW50czp0aGlzLnBhcnNlQXJndW1lbnRzKHQpfSl9cGFyc2VUeXBlUmVmZXJlbmNlKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjtsZXQgbjtpZih0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4obC5CUkFDS0VUX0wpKXtjb25zdCBpPXRoaXMucGFyc2VUeXBlUmVmZXJlbmNlKCk7dGhpcy5leHBlY3RUb2tlbihsLkJSQUNLRVRfUiksbj10aGlzLm5vZGUodCx7a2luZDpULkxJU1RfVFlQRSx0eXBlOml9KX1lbHNlIG49dGhpcy5wYXJzZU5hbWVkVHlwZSgpO3JldHVybiB0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4obC5CQU5HKT90aGlzLm5vZGUodCx7a2luZDpULk5PTl9OVUxMX1RZUEUsdHlwZTpufSk6bn1wYXJzZU5hbWVkVHlwZSgpe3JldHVybiB0aGlzLm5vZGUodGhpcy5fbGV4ZXIudG9rZW4se2tpbmQ6VC5OQU1FRF9UWVBFLG5hbWU6dGhpcy5wYXJzZU5hbWUoKX0pfXBlZWtEZXNjcmlwdGlvbigpe3JldHVybiB0aGlzLnBlZWsobC5TVFJJTkcpfHx0aGlzLnBlZWsobC5CTE9DS19TVFJJTkcpfXBhcnNlRGVzY3JpcHRpb24oKXtpZih0aGlzLnBlZWtEZXNjcmlwdGlvbigpKXJldHVybiB0aGlzLnBhcnNlU3RyaW5nTGl0ZXJhbCgpfXBhcnNlU2NoZW1hRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKTt0aGlzLmV4cGVjdEtleXdvcmQoInNjaGVtYSIpO2NvbnN0IGk9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLHI9dGhpcy5tYW55KGwuQlJBQ0VfTCx0aGlzLnBhcnNlT3BlcmF0aW9uVHlwZURlZmluaXRpb24sbC5CUkFDRV9SKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6VC5TQ0hFTUFfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLGRpcmVjdGl2ZXM6aSxvcGVyYXRpb25UeXBlczpyfSl9cGFyc2VPcGVyYXRpb25UeXBlRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlT3BlcmF0aW9uVHlwZSgpO3RoaXMuZXhwZWN0VG9rZW4obC5DT0xPTik7Y29uc3QgaT10aGlzLnBhcnNlTmFtZWRUeXBlKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuT1BFUkFUSU9OX1RZUEVfREVGSU5JVElPTixvcGVyYXRpb246bix0eXBlOml9KX1wYXJzZVNjYWxhclR5cGVEZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VEZXNjcmlwdGlvbigpO3RoaXMuZXhwZWN0S2V5d29yZCgic2NhbGFyIik7Y29uc3QgaT10aGlzLnBhcnNlTmFtZSgpLHI9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULlNDQUxBUl9UWVBFX0RFRklOSVRJT04sZGVzY3JpcHRpb246bixuYW1lOmksZGlyZWN0aXZlczpyfSl9cGFyc2VPYmplY3RUeXBlRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKTt0aGlzLmV4cGVjdEtleXdvcmQoInR5cGUiKTtjb25zdCBpPXRoaXMucGFyc2VOYW1lKCkscj10aGlzLnBhcnNlSW1wbGVtZW50c0ludGVyZmFjZXMoKSxzPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxvPXRoaXMucGFyc2VGaWVsZHNEZWZpbml0aW9uKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuT0JKRUNUX1RZUEVfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLG5hbWU6aSxpbnRlcmZhY2VzOnIsZGlyZWN0aXZlczpzLGZpZWxkczpvfSl9cGFyc2VJbXBsZW1lbnRzSW50ZXJmYWNlcygpe3JldHVybiB0aGlzLmV4cGVjdE9wdGlvbmFsS2V5d29yZCgiaW1wbGVtZW50cyIpP3RoaXMuZGVsaW1pdGVkTWFueShsLkFNUCx0aGlzLnBhcnNlTmFtZWRUeXBlKTpbXX1wYXJzZUZpZWxkc0RlZmluaXRpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25hbE1hbnkobC5CUkFDRV9MLHRoaXMucGFyc2VGaWVsZERlZmluaXRpb24sbC5CUkFDRV9SKX1wYXJzZUZpZWxkRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKSxpPXRoaXMucGFyc2VOYW1lKCkscj10aGlzLnBhcnNlQXJndW1lbnREZWZzKCk7dGhpcy5leHBlY3RUb2tlbihsLkNPTE9OKTtjb25zdCBzPXRoaXMucGFyc2VUeXBlUmVmZXJlbmNlKCksbz10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuRklFTERfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLG5hbWU6aSxhcmd1bWVudHM6cix0eXBlOnMsZGlyZWN0aXZlczpvfSl9cGFyc2VBcmd1bWVudERlZnMoKXtyZXR1cm4gdGhpcy5vcHRpb25hbE1hbnkobC5QQVJFTl9MLHRoaXMucGFyc2VJbnB1dFZhbHVlRGVmLGwuUEFSRU5fUil9cGFyc2VJbnB1dFZhbHVlRGVmKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VEZXNjcmlwdGlvbigpLGk9dGhpcy5wYXJzZU5hbWUoKTt0aGlzLmV4cGVjdFRva2VuKGwuQ09MT04pO2NvbnN0IHI9dGhpcy5wYXJzZVR5cGVSZWZlcmVuY2UoKTtsZXQgczt0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4obC5FUVVBTFMpJiYocz10aGlzLnBhcnNlQ29uc3RWYWx1ZUxpdGVyYWwoKSk7Y29uc3Qgbz10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuSU5QVVRfVkFMVUVfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLG5hbWU6aSx0eXBlOnIsZGVmYXVsdFZhbHVlOnMsZGlyZWN0aXZlczpvfSl9cGFyc2VJbnRlcmZhY2VUeXBlRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKTt0aGlzLmV4cGVjdEtleXdvcmQoImludGVyZmFjZSIpO2NvbnN0IGk9dGhpcy5wYXJzZU5hbWUoKSxyPXRoaXMucGFyc2VJbXBsZW1lbnRzSW50ZXJmYWNlcygpLHM9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLG89dGhpcy5wYXJzZUZpZWxkc0RlZmluaXRpb24oKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6VC5JTlRFUkZBQ0VfVFlQRV9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOm4sbmFtZTppLGludGVyZmFjZXM6cixkaXJlY3RpdmVzOnMsZmllbGRzOm99KX1wYXJzZVVuaW9uVHlwZURlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZURlc2NyaXB0aW9uKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJ1bmlvbiIpO2NvbnN0IGk9dGhpcy5wYXJzZU5hbWUoKSxyPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxzPXRoaXMucGFyc2VVbmlvbk1lbWJlclR5cGVzKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuVU5JT05fVFlQRV9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOm4sbmFtZTppLGRpcmVjdGl2ZXM6cix0eXBlczpzfSl9cGFyc2VVbmlvbk1lbWJlclR5cGVzKCl7cmV0dXJuIHRoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbihsLkVRVUFMUyk/dGhpcy5kZWxpbWl0ZWRNYW55KGwuUElQRSx0aGlzLnBhcnNlTmFtZWRUeXBlKTpbXX1wYXJzZUVudW1UeXBlRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKTt0aGlzLmV4cGVjdEtleXdvcmQoImVudW0iKTtjb25zdCBpPXRoaXMucGFyc2VOYW1lKCkscj10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCkscz10aGlzLnBhcnNlRW51bVZhbHVlc0RlZmluaXRpb24oKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6VC5FTlVNX1RZUEVfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLG5hbWU6aSxkaXJlY3RpdmVzOnIsdmFsdWVzOnN9KX1wYXJzZUVudW1WYWx1ZXNEZWZpbml0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9uYWxNYW55KGwuQlJBQ0VfTCx0aGlzLnBhcnNlRW51bVZhbHVlRGVmaW5pdGlvbixsLkJSQUNFX1IpfXBhcnNlRW51bVZhbHVlRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKSxpPXRoaXMucGFyc2VFbnVtVmFsdWVOYW1lKCkscj10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuRU5VTV9WQUxVRV9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOm4sbmFtZTppLGRpcmVjdGl2ZXM6cn0pfXBhcnNlRW51bVZhbHVlTmFtZSgpe2lmKHRoaXMuX2xleGVyLnRva2VuLnZhbHVlPT09InRydWUifHx0aGlzLl9sZXhlci50b2tlbi52YWx1ZT09PSJmYWxzZSJ8fHRoaXMuX2xleGVyLnRva2VuLnZhbHVlPT09Im51bGwiKXRocm93IEcodGhpcy5fbGV4ZXIuc291cmNlLHRoaXMuX2xleGVyLnRva2VuLnN0YXJ0LGAke3dlKHRoaXMuX2xleGVyLnRva2VuKX0gaXMgcmVzZXJ2ZWQgYW5kIGNhbm5vdCBiZSB1c2VkIGZvciBhbiBlbnVtIHZhbHVlLmApO3JldHVybiB0aGlzLnBhcnNlTmFtZSgpfXBhcnNlSW5wdXRPYmplY3RUeXBlRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKTt0aGlzLmV4cGVjdEtleXdvcmQoImlucHV0Iik7Y29uc3QgaT10aGlzLnBhcnNlTmFtZSgpLHI9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLHM9dGhpcy5wYXJzZUlucHV0RmllbGRzRGVmaW5pdGlvbigpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULklOUFVUX09CSkVDVF9UWVBFX0RFRklOSVRJT04sZGVzY3JpcHRpb246bixuYW1lOmksZGlyZWN0aXZlczpyLGZpZWxkczpzfSl9cGFyc2VJbnB1dEZpZWxkc0RlZmluaXRpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25hbE1hbnkobC5CUkFDRV9MLHRoaXMucGFyc2VJbnB1dFZhbHVlRGVmLGwuQlJBQ0VfUil9cGFyc2VUeXBlU3lzdGVtRXh0ZW5zaW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci5sb29rYWhlYWQoKTtpZih0LmtpbmQ9PT1sLk5BTUUpc3dpdGNoKHQudmFsdWUpe2Nhc2Uic2NoZW1hIjpyZXR1cm4gdGhpcy5wYXJzZVNjaGVtYUV4dGVuc2lvbigpO2Nhc2Uic2NhbGFyIjpyZXR1cm4gdGhpcy5wYXJzZVNjYWxhclR5cGVFeHRlbnNpb24oKTtjYXNlInR5cGUiOnJldHVybiB0aGlzLnBhcnNlT2JqZWN0VHlwZUV4dGVuc2lvbigpO2Nhc2UiaW50ZXJmYWNlIjpyZXR1cm4gdGhpcy5wYXJzZUludGVyZmFjZVR5cGVFeHRlbnNpb24oKTtjYXNlInVuaW9uIjpyZXR1cm4gdGhpcy5wYXJzZVVuaW9uVHlwZUV4dGVuc2lvbigpO2Nhc2UiZW51bSI6cmV0dXJuIHRoaXMucGFyc2VFbnVtVHlwZUV4dGVuc2lvbigpO2Nhc2UiaW5wdXQiOnJldHVybiB0aGlzLnBhcnNlSW5wdXRPYmplY3RUeXBlRXh0ZW5zaW9uKCl9dGhyb3cgdGhpcy51bmV4cGVjdGVkKHQpfXBhcnNlU2NoZW1hRXh0ZW5zaW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjt0aGlzLmV4cGVjdEtleXdvcmQoImV4dGVuZCIpLHRoaXMuZXhwZWN0S2V5d29yZCgic2NoZW1hIik7Y29uc3Qgbj10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCksaT10aGlzLm9wdGlvbmFsTWFueShsLkJSQUNFX0wsdGhpcy5wYXJzZU9wZXJhdGlvblR5cGVEZWZpbml0aW9uLGwuQlJBQ0VfUik7aWYobi5sZW5ndGg9PT0wJiZpLmxlbmd0aD09PTApdGhyb3cgdGhpcy51bmV4cGVjdGVkKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuU0NIRU1BX0VYVEVOU0lPTixkaXJlY3RpdmVzOm4sb3BlcmF0aW9uVHlwZXM6aX0pfXBhcnNlU2NhbGFyVHlwZUV4dGVuc2lvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47dGhpcy5leHBlY3RLZXl3b3JkKCJleHRlbmQiKSx0aGlzLmV4cGVjdEtleXdvcmQoInNjYWxhciIpO2NvbnN0IG49dGhpcy5wYXJzZU5hbWUoKSxpPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKTtpZihpLmxlbmd0aD09PTApdGhyb3cgdGhpcy51bmV4cGVjdGVkKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuU0NBTEFSX1RZUEVfRVhURU5TSU9OLG5hbWU6bixkaXJlY3RpdmVzOml9KX1wYXJzZU9iamVjdFR5cGVFeHRlbnNpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO3RoaXMuZXhwZWN0S2V5d29yZCgiZXh0ZW5kIiksdGhpcy5leHBlY3RLZXl3b3JkKCJ0eXBlIik7Y29uc3Qgbj10aGlzLnBhcnNlTmFtZSgpLGk9dGhpcy5wYXJzZUltcGxlbWVudHNJbnRlcmZhY2VzKCkscj10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCkscz10aGlzLnBhcnNlRmllbGRzRGVmaW5pdGlvbigpO2lmKGkubGVuZ3RoPT09MCYmci5sZW5ndGg9PT0wJiZzLmxlbmd0aD09PTApdGhyb3cgdGhpcy51bmV4cGVjdGVkKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuT0JKRUNUX1RZUEVfRVhURU5TSU9OLG5hbWU6bixpbnRlcmZhY2VzOmksZGlyZWN0aXZlczpyLGZpZWxkczpzfSl9cGFyc2VJbnRlcmZhY2VUeXBlRXh0ZW5zaW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjt0aGlzLmV4cGVjdEtleXdvcmQoImV4dGVuZCIpLHRoaXMuZXhwZWN0S2V5d29yZCgiaW50ZXJmYWNlIik7Y29uc3Qgbj10aGlzLnBhcnNlTmFtZSgpLGk9dGhpcy5wYXJzZUltcGxlbWVudHNJbnRlcmZhY2VzKCkscj10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCkscz10aGlzLnBhcnNlRmllbGRzRGVmaW5pdGlvbigpO2lmKGkubGVuZ3RoPT09MCYmci5sZW5ndGg9PT0wJiZzLmxlbmd0aD09PTApdGhyb3cgdGhpcy51bmV4cGVjdGVkKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuSU5URVJGQUNFX1RZUEVfRVhURU5TSU9OLG5hbWU6bixpbnRlcmZhY2VzOmksZGlyZWN0aXZlczpyLGZpZWxkczpzfSl9cGFyc2VVbmlvblR5cGVFeHRlbnNpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO3RoaXMuZXhwZWN0S2V5d29yZCgiZXh0ZW5kIiksdGhpcy5leHBlY3RLZXl3b3JkKCJ1bmlvbiIpO2NvbnN0IG49dGhpcy5wYXJzZU5hbWUoKSxpPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxyPXRoaXMucGFyc2VVbmlvbk1lbWJlclR5cGVzKCk7aWYoaS5sZW5ndGg9PT0wJiZyLmxlbmd0aD09PTApdGhyb3cgdGhpcy51bmV4cGVjdGVkKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuVU5JT05fVFlQRV9FWFRFTlNJT04sbmFtZTpuLGRpcmVjdGl2ZXM6aSx0eXBlczpyfSl9cGFyc2VFbnVtVHlwZUV4dGVuc2lvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47dGhpcy5leHBlY3RLZXl3b3JkKCJleHRlbmQiKSx0aGlzLmV4cGVjdEtleXdvcmQoImVudW0iKTtjb25zdCBuPXRoaXMucGFyc2VOYW1lKCksaT10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCkscj10aGlzLnBhcnNlRW51bVZhbHVlc0RlZmluaXRpb24oKTtpZihpLmxlbmd0aD09PTAmJnIubGVuZ3RoPT09MCl0aHJvdyB0aGlzLnVuZXhwZWN0ZWQoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6VC5FTlVNX1RZUEVfRVhURU5TSU9OLG5hbWU6bixkaXJlY3RpdmVzOmksdmFsdWVzOnJ9KX1wYXJzZUlucHV0T2JqZWN0VHlwZUV4dGVuc2lvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47dGhpcy5leHBlY3RLZXl3b3JkKCJleHRlbmQiKSx0aGlzLmV4cGVjdEtleXdvcmQoImlucHV0Iik7Y29uc3Qgbj10aGlzLnBhcnNlTmFtZSgpLGk9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLHI9dGhpcy5wYXJzZUlucHV0RmllbGRzRGVmaW5pdGlvbigpO2lmKGkubGVuZ3RoPT09MCYmci5sZW5ndGg9PT0wKXRocm93IHRoaXMudW5leHBlY3RlZCgpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULklOUFVUX09CSkVDVF9UWVBFX0VYVEVOU0lPTixuYW1lOm4sZGlyZWN0aXZlczppLGZpZWxkczpyfSl9cGFyc2VEaXJlY3RpdmVEZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VEZXNjcmlwdGlvbigpO3RoaXMuZXhwZWN0S2V5d29yZCgiZGlyZWN0aXZlIiksdGhpcy5leHBlY3RUb2tlbihsLkFUKTtjb25zdCBpPXRoaXMucGFyc2VOYW1lKCkscj10aGlzLnBhcnNlQXJndW1lbnREZWZzKCkscz10aGlzLmV4cGVjdE9wdGlvbmFsS2V5d29yZCgicmVwZWF0YWJsZSIpO3RoaXMuZXhwZWN0S2V5d29yZCgib24iKTtjb25zdCBvPXRoaXMucGFyc2VEaXJlY3RpdmVMb2NhdGlvbnMoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6VC5ESVJFQ1RJVkVfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLG5hbWU6aSxhcmd1bWVudHM6cixyZXBlYXRhYmxlOnMsbG9jYXRpb25zOm99KX1wYXJzZURpcmVjdGl2ZUxvY2F0aW9ucygpe3JldHVybiB0aGlzLmRlbGltaXRlZE1hbnkobC5QSVBFLHRoaXMucGFyc2VEaXJlY3RpdmVMb2NhdGlvbil9cGFyc2VEaXJlY3RpdmVMb2NhdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlTmFtZSgpO2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChHZSxuLnZhbHVlKSlyZXR1cm4gbjt0aHJvdyB0aGlzLnVuZXhwZWN0ZWQodCl9bm9kZSh0LG4pe3JldHVybiB0aGlzLl9vcHRpb25zLm5vTG9jYXRpb24hPT0hMCYmKG4ubG9jPW5ldyBhbih0LHRoaXMuX2xleGVyLmxhc3RUb2tlbix0aGlzLl9sZXhlci5zb3VyY2UpKSxufXBlZWsodCl7cmV0dXJuIHRoaXMuX2xleGVyLnRva2VuLmtpbmQ9PT10fWV4cGVjdFRva2VuKHQpe2NvbnN0IG49dGhpcy5fbGV4ZXIudG9rZW47aWYobi5raW5kPT09dClyZXR1cm4gdGhpcy5hZHZhbmNlTGV4ZXIoKSxuO3Rocm93IEcodGhpcy5fbGV4ZXIuc291cmNlLG4uc3RhcnQsYEV4cGVjdGVkICR7U3QodCl9LCBmb3VuZCAke3dlKG4pfS5gKX1leHBlY3RPcHRpb25hbFRva2VuKHQpe3JldHVybiB0aGlzLl9sZXhlci50b2tlbi5raW5kPT09dD8odGhpcy5hZHZhbmNlTGV4ZXIoKSwhMCk6ITF9ZXhwZWN0S2V5d29yZCh0KXtjb25zdCBuPXRoaXMuX2xleGVyLnRva2VuO2lmKG4ua2luZD09PWwuTkFNRSYmbi52YWx1ZT09PXQpdGhpcy5hZHZhbmNlTGV4ZXIoKTtlbHNlIHRocm93IEcodGhpcy5fbGV4ZXIuc291cmNlLG4uc3RhcnQsYEV4cGVjdGVkICIke3R9IiwgZm91bmQgJHt3ZShuKX0uYCl9ZXhwZWN0T3B0aW9uYWxLZXl3b3JkKHQpe2NvbnN0IG49dGhpcy5fbGV4ZXIudG9rZW47cmV0dXJuIG4ua2luZD09PWwuTkFNRSYmbi52YWx1ZT09PXQ/KHRoaXMuYWR2YW5jZUxleGVyKCksITApOiExfXVuZXhwZWN0ZWQodCl7Y29uc3Qgbj10IT1udWxsP3Q6dGhpcy5fbGV4ZXIudG9rZW47cmV0dXJuIEcodGhpcy5fbGV4ZXIuc291cmNlLG4uc3RhcnQsYFVuZXhwZWN0ZWQgJHt3ZShuKX0uYCl9YW55KHQsbixpKXt0aGlzLmV4cGVjdFRva2VuKHQpO2NvbnN0IHI9W107Zm9yKDshdGhpcy5leHBlY3RPcHRpb25hbFRva2VuKGkpOylyLnB1c2gobi5jYWxsKHRoaXMpKTtyZXR1cm4gcn1vcHRpb25hbE1hbnkodCxuLGkpe2lmKHRoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbih0KSl7Y29uc3Qgcj1bXTtkbyByLnB1c2gobi5jYWxsKHRoaXMpKTt3aGlsZSghdGhpcy5leHBlY3RPcHRpb25hbFRva2VuKGkpKTtyZXR1cm4gcn1yZXR1cm5bXX1tYW55KHQsbixpKXt0aGlzLmV4cGVjdFRva2VuKHQpO2NvbnN0IHI9W107ZG8gci5wdXNoKG4uY2FsbCh0aGlzKSk7d2hpbGUoIXRoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbihpKSk7cmV0dXJuIHJ9ZGVsaW1pdGVkTWFueSh0LG4pe3RoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbih0KTtjb25zdCBpPVtdO2RvIGkucHVzaChuLmNhbGwodGhpcykpO3doaWxlKHRoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbih0KSk7cmV0dXJuIGl9YWR2YW5jZUxleGVyKCl7Y29uc3R7bWF4VG9rZW5zOnR9PXRoaXMuX29wdGlvbnMsbj10aGlzLl9sZXhlci5hZHZhbmNlKCk7aWYobi5raW5kIT09bC5FT0YmJigrK3RoaXMuX3Rva2VuQ291bnRlcix0IT09dm9pZCAwJiZ0aGlzLl90b2tlbkNvdW50ZXI+dCkpdGhyb3cgRyh0aGlzLl9sZXhlci5zb3VyY2Usbi5zdGFydCxgRG9jdW1lbnQgY29udGFpbnMgbW9yZSB0aGF0ICR7dH0gdG9rZW5zLiBQYXJzaW5nIGFib3J0ZWQuYCl9fWZ1bmN0aW9uIHdlKGUpe2NvbnN0IHQ9ZS52YWx1ZTtyZXR1cm4gU3QoZS5raW5kKSsodCE9bnVsbD9gICIke3R9ImA6IiIpfWZ1bmN0aW9uIFN0KGUpe3JldHVybiBwbihlKT9gIiR7ZX0iYDplfWZ1bmN0aW9uIFJuKGUpe3JldHVybmAiJHtlLnJlcGxhY2UoUG4sTG4pfSJgfWNvbnN0IFBuPS9bXHgwMC1ceDFmXHgyMlx4NWNceDdmLVx4OWZdL2c7ZnVuY3Rpb24gTG4oZSl7cmV0dXJuIEZuW2UuY2hhckNvZGVBdCgwKV19Y29uc3QgRm49WyJcXHUwMDAwIiwiXFx1MDAwMSIsIlxcdTAwMDIiLCJcXHUwMDAzIiwiXFx1MDAwNCIsIlxcdTAwMDUiLCJcXHUwMDA2IiwiXFx1MDAwNyIsIlxcYiIsIlxcdCIsIlxcbiIsIlxcdTAwMEIiLCJcXGYiLCJcXHIiLCJcXHUwMDBFIiwiXFx1MDAwRiIsIlxcdTAwMTAiLCJcXHUwMDExIiwiXFx1MDAxMiIsIlxcdTAwMTMiLCJcXHUwMDE0IiwiXFx1MDAxNSIsIlxcdTAwMTYiLCJcXHUwMDE3IiwiXFx1MDAxOCIsIlxcdTAwMTkiLCJcXHUwMDFBIiwiXFx1MDAxQiIsIlxcdTAwMUMiLCJcXHUwMDFEIiwiXFx1MDAxRSIsIlxcdTAwMUYiLCIiLCIiLCdcXCInLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJcXFxcIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiXFx1MDA3RiIsIlxcdTAwODAiLCJcXHUwMDgxIiwiXFx1MDA4MiIsIlxcdTAwODMiLCJcXHUwMDg0IiwiXFx1MDA4NSIsIlxcdTAwODYiLCJcXHUwMDg3IiwiXFx1MDA4OCIsIlxcdTAwODkiLCJcXHUwMDhBIiwiXFx1MDA4QiIsIlxcdTAwOEMiLCJcXHUwMDhEIiwiXFx1MDA4RSIsIlxcdTAwOEYiLCJcXHUwMDkwIiwiXFx1MDA5MSIsIlxcdTAwOTIiLCJcXHUwMDkzIiwiXFx1MDA5NCIsIlxcdTAwOTUiLCJcXHUwMDk2IiwiXFx1MDA5NyIsIlxcdTAwOTgiLCJcXHUwMDk5IiwiXFx1MDA5QSIsIlxcdTAwOUIiLCJcXHUwMDlDIiwiXFx1MDA5RCIsIlxcdTAwOUUiLCJcXHUwMDlGIl0sTW49T2JqZWN0LmZyZWV6ZSh7fSk7ZnVuY3Rpb24gJG4oZSx0LG49Z3Qpe2NvbnN0IGk9bmV3IE1hcDtmb3IoY29uc3QgRSBvZiBPYmplY3QudmFsdWVzKFQpKWkuc2V0KEUsQm4odCxFKSk7bGV0IHIscz1BcnJheS5pc0FycmF5KGUpLG89W2VdLGM9LTEsZj1bXSxkPWUsdSx5O2NvbnN0IHY9W10sYj1bXTtkb3tjKys7Y29uc3QgRT1jPT09by5sZW5ndGgsQz1FJiZmLmxlbmd0aCE9PTA7aWYoRSl7aWYodT1iLmxlbmd0aD09PTA/dm9pZCAwOnZbdi5sZW5ndGgtMV0sZD15LHk9Yi5wb3AoKSxDKWlmKHMpe2Q9ZC5zbGljZSgpO2xldCBSPTA7Zm9yKGNvbnN0WyQscV1vZiBmKXtjb25zdCBCPSQtUjtxPT09bnVsbD8oZC5zcGxpY2UoQiwxKSxSKyspOmRbQl09cX19ZWxzZXtkPUQoe30sZCk7Zm9yKGNvbnN0W1IsJF1vZiBmKWRbUl09JH1jPXIuaW5kZXgsbz1yLmtleXMsZj1yLmVkaXRzLHM9ci5pbkFycmF5LHI9ci5wcmV2fWVsc2UgaWYoeSl7aWYodT1zP2M6b1tjXSxkPXlbdV0sZD09bnVsbCljb250aW51ZTt2LnB1c2godSl9bGV0IHc7aWYoIUFycmF5LmlzQXJyYXkoZCkpe3ZhciBtLE47dnQoZCl8fG9lKCExLGBJbnZhbGlkIEFTVCBOb2RlOiAke1llKGQpfS5gKTtjb25zdCBSPUU/KG09aS5nZXQoZC5raW5kKSk9PT1udWxsfHxtPT09dm9pZCAwP3ZvaWQgMDptLmxlYXZlOihOPWkuZ2V0KGQua2luZCkpPT09bnVsbHx8Tj09PXZvaWQgMD92b2lkIDA6Ti5lbnRlcjtpZih3PVI9PW51bGw/dm9pZCAwOlIuY2FsbCh0LGQsdSx5LHYsYiksdz09PU1uKWJyZWFrO2lmKHc9PT0hMSl7aWYoIUUpe3YucG9wKCk7Y29udGludWV9fWVsc2UgaWYodyE9PXZvaWQgMCYmKGYucHVzaChbdSx3XSksIUUpKWlmKHZ0KHcpKWQ9dztlbHNle3YucG9wKCk7Y29udGludWV9fWlmKHc9PT12b2lkIDAmJkMmJmYucHVzaChbdSxkXSksRSl2LnBvcCgpO2Vsc2V7dmFyIGc7cj17aW5BcnJheTpzLGluZGV4OmMsa2V5czpvLGVkaXRzOmYscHJldjpyfSxzPUFycmF5LmlzQXJyYXkoZCksbz1zP2Q6KGc9bltkLmtpbmRdKSE9PW51bGwmJmchPT12b2lkIDA/ZzpbXSxjPS0xLGY9W10seSYmYi5wdXNoKHkpLHk9ZH19d2hpbGUociE9PXZvaWQgMCk7cmV0dXJuIGYubGVuZ3RoIT09MD9mW2YubGVuZ3RoLTFdWzFdOmV9ZnVuY3Rpb24gQm4oZSx0KXtjb25zdCBuPWVbdF07cmV0dXJuIHR5cGVvZiBuPT0ib2JqZWN0Ij9uOnR5cGVvZiBuPT0iZnVuY3Rpb24iP3tlbnRlcjpuLGxlYXZlOnZvaWQgMH06e2VudGVyOmUuZW50ZXIsbGVhdmU6ZS5sZWF2ZX19ZnVuY3Rpb24gVW4oZSl7cmV0dXJuICRuKGUsam4pfWNvbnN0IFZuPTgwLGpuPXtOYW1lOntsZWF2ZTplPT5lLnZhbHVlfSxWYXJpYWJsZTp7bGVhdmU6ZT0+IiQiK2UubmFtZX0sRG9jdW1lbnQ6e2xlYXZlOmU9PnAoZS5kZWZpbml0aW9ucyxgCgpgKX0sT3BlcmF0aW9uRGVmaW5pdGlvbjp7bGVhdmUoZSl7Y29uc3QgdD1PKCIoIixwKGUudmFyaWFibGVEZWZpbml0aW9ucywiLCAiKSwiKSIpLG49cChbZS5vcGVyYXRpb24scChbZS5uYW1lLHRdKSxwKGUuZGlyZWN0aXZlcywiICIpXSwiICIpO3JldHVybihuPT09InF1ZXJ5Ij8iIjpuKyIgIikrZS5zZWxlY3Rpb25TZXR9fSxWYXJpYWJsZURlZmluaXRpb246e2xlYXZlOih7dmFyaWFibGU6ZSx0eXBlOnQsZGVmYXVsdFZhbHVlOm4sZGlyZWN0aXZlczppfSk9PmUrIjogIit0K08oIiA9ICIsbikrTygiICIscChpLCIgIikpfSxTZWxlY3Rpb25TZXQ6e2xlYXZlOih7c2VsZWN0aW9uczplfSk9PmVlKGUpfSxGaWVsZDp7bGVhdmUoe2FsaWFzOmUsbmFtZTp0LGFyZ3VtZW50czpuLGRpcmVjdGl2ZXM6aSxzZWxlY3Rpb25TZXQ6cn0pe2NvbnN0IHM9TygiIixlLCI6ICIpK3Q7bGV0IG89cytPKCIoIixwKG4sIiwgIiksIikiKTtyZXR1cm4gby5sZW5ndGg+Vm4mJihvPXMrTyhgKApgLERlKHAobixgCmApKSxgCilgKSkscChbbyxwKGksIiAiKSxyXSwiICIpfX0sQXJndW1lbnQ6e2xlYXZlOih7bmFtZTplLHZhbHVlOnR9KT0+ZSsiOiAiK3R9LEZyYWdtZW50U3ByZWFkOntsZWF2ZTooe25hbWU6ZSxkaXJlY3RpdmVzOnR9KT0+Ii4uLiIrZStPKCIgIixwKHQsIiAiKSl9LElubGluZUZyYWdtZW50OntsZWF2ZTooe3R5cGVDb25kaXRpb246ZSxkaXJlY3RpdmVzOnQsc2VsZWN0aW9uU2V0Om59KT0+cChbIi4uLiIsTygib24gIixlKSxwKHQsIiAiKSxuXSwiICIpfSxGcmFnbWVudERlZmluaXRpb246e2xlYXZlOih7bmFtZTplLHR5cGVDb25kaXRpb246dCx2YXJpYWJsZURlZmluaXRpb25zOm4sZGlyZWN0aXZlczppLHNlbGVjdGlvblNldDpyfSk9PmBmcmFnbWVudCAke2V9JHtPKCIoIixwKG4sIiwgIiksIikiKX0gb24gJHt0fSAke08oIiIscChpLCIgIiksIiAiKX1gK3J9LEludFZhbHVlOntsZWF2ZTooe3ZhbHVlOmV9KT0+ZX0sRmxvYXRWYWx1ZTp7bGVhdmU6KHt2YWx1ZTplfSk9PmV9LFN0cmluZ1ZhbHVlOntsZWF2ZTooe3ZhbHVlOmUsYmxvY2s6dH0pPT50P2huKGUpOlJuKGUpfSxCb29sZWFuVmFsdWU6e2xlYXZlOih7dmFsdWU6ZX0pPT5lPyJ0cnVlIjoiZmFsc2UifSxOdWxsVmFsdWU6e2xlYXZlOigpPT4ibnVsbCJ9LEVudW1WYWx1ZTp7bGVhdmU6KHt2YWx1ZTplfSk9PmV9LExpc3RWYWx1ZTp7bGVhdmU6KHt2YWx1ZXM6ZX0pPT4iWyIrcChlLCIsICIpKyJdIn0sT2JqZWN0VmFsdWU6e2xlYXZlOih7ZmllbGRzOmV9KT0+InsiK3AoZSwiLCAiKSsifSJ9LE9iamVjdEZpZWxkOntsZWF2ZTooe25hbWU6ZSx2YWx1ZTp0fSk9PmUrIjogIit0fSxEaXJlY3RpdmU6e2xlYXZlOih7bmFtZTplLGFyZ3VtZW50czp0fSk9PiJAIitlK08oIigiLHAodCwiLCAiKSwiKSIpfSxOYW1lZFR5cGU6e2xlYXZlOih7bmFtZTplfSk9PmV9LExpc3RUeXBlOntsZWF2ZTooe3R5cGU6ZX0pPT4iWyIrZSsiXSJ9LE5vbk51bGxUeXBlOntsZWF2ZTooe3R5cGU6ZX0pPT5lKyIhIn0sU2NoZW1hRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLGRpcmVjdGl2ZXM6dCxvcGVyYXRpb25UeXBlczpufSk9Pk8oIiIsZSxgCmApK3AoWyJzY2hlbWEiLHAodCwiICIpLGVlKG4pXSwiICIpfSxPcGVyYXRpb25UeXBlRGVmaW5pdGlvbjp7bGVhdmU6KHtvcGVyYXRpb246ZSx0eXBlOnR9KT0+ZSsiOiAiK3R9LFNjYWxhclR5cGVEZWZpbml0aW9uOntsZWF2ZTooe2Rlc2NyaXB0aW9uOmUsbmFtZTp0LGRpcmVjdGl2ZXM6bn0pPT5PKCIiLGUsYApgKStwKFsic2NhbGFyIix0LHAobiwiICIpXSwiICIpfSxPYmplY3RUeXBlRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLG5hbWU6dCxpbnRlcmZhY2VzOm4sZGlyZWN0aXZlczppLGZpZWxkczpyfSk9Pk8oIiIsZSxgCmApK3AoWyJ0eXBlIix0LE8oImltcGxlbWVudHMgIixwKG4sIiAmICIpKSxwKGksIiAiKSxlZShyKV0sIiAiKX0sRmllbGREZWZpbml0aW9uOntsZWF2ZTooe2Rlc2NyaXB0aW9uOmUsbmFtZTp0LGFyZ3VtZW50czpuLHR5cGU6aSxkaXJlY3RpdmVzOnJ9KT0+TygiIixlLGAKYCkrdCsoT3Qobik/TyhgKApgLERlKHAobixgCmApKSxgCilgKTpPKCIoIixwKG4sIiwgIiksIikiKSkrIjogIitpK08oIiAiLHAociwiICIpKX0sSW5wdXRWYWx1ZURlZmluaXRpb246e2xlYXZlOih7ZGVzY3JpcHRpb246ZSxuYW1lOnQsdHlwZTpuLGRlZmF1bHRWYWx1ZTppLGRpcmVjdGl2ZXM6cn0pPT5PKCIiLGUsYApgKStwKFt0KyI6ICIrbixPKCI9ICIsaSkscChyLCIgIildLCIgIil9LEludGVyZmFjZVR5cGVEZWZpbml0aW9uOntsZWF2ZTooe2Rlc2NyaXB0aW9uOmUsbmFtZTp0LGludGVyZmFjZXM6bixkaXJlY3RpdmVzOmksZmllbGRzOnJ9KT0+TygiIixlLGAKYCkrcChbImludGVyZmFjZSIsdCxPKCJpbXBsZW1lbnRzICIscChuLCIgJiAiKSkscChpLCIgIiksZWUocildLCIgIil9LFVuaW9uVHlwZURlZmluaXRpb246e2xlYXZlOih7ZGVzY3JpcHRpb246ZSxuYW1lOnQsZGlyZWN0aXZlczpuLHR5cGVzOml9KT0+TygiIixlLGAKYCkrcChbInVuaW9uIix0LHAobiwiICIpLE8oIj0gIixwKGksIiB8ICIpKV0sIiAiKX0sRW51bVR5cGVEZWZpbml0aW9uOntsZWF2ZTooe2Rlc2NyaXB0aW9uOmUsbmFtZTp0LGRpcmVjdGl2ZXM6bix2YWx1ZXM6aX0pPT5PKCIiLGUsYApgKStwKFsiZW51bSIsdCxwKG4sIiAiKSxlZShpKV0sIiAiKX0sRW51bVZhbHVlRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLG5hbWU6dCxkaXJlY3RpdmVzOm59KT0+TygiIixlLGAKYCkrcChbdCxwKG4sIiAiKV0sIiAiKX0sSW5wdXRPYmplY3RUeXBlRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLG5hbWU6dCxkaXJlY3RpdmVzOm4sZmllbGRzOml9KT0+TygiIixlLGAKYCkrcChbImlucHV0Iix0LHAobiwiICIpLGVlKGkpXSwiICIpfSxEaXJlY3RpdmVEZWZpbml0aW9uOntsZWF2ZTooe2Rlc2NyaXB0aW9uOmUsbmFtZTp0LGFyZ3VtZW50czpuLHJlcGVhdGFibGU6aSxsb2NhdGlvbnM6cn0pPT5PKCIiLGUsYApgKSsiZGlyZWN0aXZlIEAiK3QrKE90KG4pP08oYCgKYCxEZShwKG4sYApgKSksYAopYCk6TygiKCIscChuLCIsICIpLCIpIikpKyhpPyIgcmVwZWF0YWJsZSI6IiIpKyIgb24gIitwKHIsIiB8ICIpfSxTY2hlbWFFeHRlbnNpb246e2xlYXZlOih7ZGlyZWN0aXZlczplLG9wZXJhdGlvblR5cGVzOnR9KT0+cChbImV4dGVuZCBzY2hlbWEiLHAoZSwiICIpLGVlKHQpXSwiICIpfSxTY2FsYXJUeXBlRXh0ZW5zaW9uOntsZWF2ZTooe25hbWU6ZSxkaXJlY3RpdmVzOnR9KT0+cChbImV4dGVuZCBzY2FsYXIiLGUscCh0LCIgIildLCIgIil9LE9iamVjdFR5cGVFeHRlbnNpb246e2xlYXZlOih7bmFtZTplLGludGVyZmFjZXM6dCxkaXJlY3RpdmVzOm4sZmllbGRzOml9KT0+cChbImV4dGVuZCB0eXBlIixlLE8oImltcGxlbWVudHMgIixwKHQsIiAmICIpKSxwKG4sIiAiKSxlZShpKV0sIiAiKX0sSW50ZXJmYWNlVHlwZUV4dGVuc2lvbjp7bGVhdmU6KHtuYW1lOmUsaW50ZXJmYWNlczp0LGRpcmVjdGl2ZXM6bixmaWVsZHM6aX0pPT5wKFsiZXh0ZW5kIGludGVyZmFjZSIsZSxPKCJpbXBsZW1lbnRzICIscCh0LCIgJiAiKSkscChuLCIgIiksZWUoaSldLCIgIil9LFVuaW9uVHlwZUV4dGVuc2lvbjp7bGVhdmU6KHtuYW1lOmUsZGlyZWN0aXZlczp0LHR5cGVzOm59KT0+cChbImV4dGVuZCB1bmlvbiIsZSxwKHQsIiAiKSxPKCI9ICIscChuLCIgfCAiKSldLCIgIil9LEVudW1UeXBlRXh0ZW5zaW9uOntsZWF2ZTooe25hbWU6ZSxkaXJlY3RpdmVzOnQsdmFsdWVzOm59KT0+cChbImV4dGVuZCBlbnVtIixlLHAodCwiICIpLGVlKG4pXSwiICIpfSxJbnB1dE9iamVjdFR5cGVFeHRlbnNpb246e2xlYXZlOih7bmFtZTplLGRpcmVjdGl2ZXM6dCxmaWVsZHM6bn0pPT5wKFsiZXh0ZW5kIGlucHV0IixlLHAodCwiICIpLGVlKG4pXSwiICIpfX07ZnVuY3Rpb24gcChlLHQ9IiIpe3ZhciBuO3JldHVybihuPWU9PW51bGw/dm9pZCAwOmUuZmlsdGVyKGk9PmkpLmpvaW4odCkpIT09bnVsbCYmbiE9PXZvaWQgMD9uOiIifWZ1bmN0aW9uIGVlKGUpe3JldHVybiBPKGB7CmAsRGUocChlLGAKYCkpLGAKfWApfWZ1bmN0aW9uIE8oZSx0LG49IiIpe3JldHVybiB0IT1udWxsJiZ0IT09IiI/ZSt0K246IiJ9ZnVuY3Rpb24gRGUoZSl7cmV0dXJuIE8oIiAgIixlLnJlcGxhY2UoL1xuL2csYAogIGApKX1mdW5jdGlvbiBPdChlKXt2YXIgdDtyZXR1cm4odD1lPT1udWxsP3ZvaWQgMDplLnNvbWUobj0+bi5pbmNsdWRlcyhgCmApKSkhPT1udWxsJiZ0IT09dm9pZCAwP3Q6ITF9Y29uc3Qgd3Q9ZT0+e3ZhciBpLHI7bGV0IHQ7Y29uc3Qgbj1lLmRlZmluaXRpb25zLmZpbHRlcihzPT5zLmtpbmQ9PT0iT3BlcmF0aW9uRGVmaW5pdGlvbiIpO3JldHVybiBuLmxlbmd0aD09PTEmJih0PShyPShpPW5bMF0pPT1udWxsP3ZvaWQgMDppLm5hbWUpPT1udWxsP3ZvaWQgMDpyLnZhbHVlKSx0fSxKZT1lPT57aWYodHlwZW9mIGU9PSJzdHJpbmciKXtsZXQgbjt0cnl7Y29uc3QgaT1JdChlKTtuPXd0KGkpfWNhdGNoKGkpe31yZXR1cm57cXVlcnk6ZSxvcGVyYXRpb25OYW1lOm59fWNvbnN0IHQ9d3QoZSk7cmV0dXJue3F1ZXJ5OlVuKGUpLG9wZXJhdGlvbk5hbWU6dH19O2NsYXNzIGRlIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCxuKXtjb25zdCBpPWAke2RlLmV4dHJhY3RNZXNzYWdlKHQpfTogJHtKU09OLnN0cmluZ2lmeSh7cmVzcG9uc2U6dCxyZXF1ZXN0Om59KX1gO3N1cGVyKGkpLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLGRlLnByb3RvdHlwZSksdGhpcy5yZXNwb25zZT10LHRoaXMucmVxdWVzdD1uLHR5cGVvZiBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT09ImZ1bmN0aW9uIiYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxkZSl9c3RhdGljIGV4dHJhY3RNZXNzYWdlKHQpe3ZhciBuLGkscjtyZXR1cm4ocj0oaT0obj10LmVycm9ycyk9PW51bGw/dm9pZCAwOm5bMF0pPT1udWxsP3ZvaWQgMDppLm1lc3NhZ2UpIT1udWxsP3I6YEdyYXBoUUwgRXJyb3IgKENvZGU6ICR7dC5zdGF0dXN9KWB9fXZhciBxbj10eXBlb2YgZ2xvYmFsVGhpcyE9InVuZGVmaW5lZCI/Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93IT0idW5kZWZpbmVkIj93aW5kb3c6dHlwZW9mIGdsb2JhbCE9InVuZGVmaW5lZCI/Z2xvYmFsOnR5cGVvZiBzZWxmIT0idW5kZWZpbmVkIj9zZWxmOnt9O2Z1bmN0aW9uIER0KGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJkZWZhdWx0Iik/ZS5kZWZhdWx0OmV9dmFyIFFlPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oZSx0KXt2YXIgbj10eXBlb2Ygc2VsZiE9InVuZGVmaW5lZCI/c2VsZjpxbixpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcygpe3RoaXMuZmV0Y2g9ITEsdGhpcy5ET01FeGNlcHRpb249bi5ET01FeGNlcHRpb259cmV0dXJuIHMucHJvdG90eXBlPW4sbmV3IHN9KCk7KGZ1bmN0aW9uKHMpeyhmdW5jdGlvbihvKXt2YXIgYz17c2VhcmNoUGFyYW1zOiJVUkxTZWFyY2hQYXJhbXMiaW4gcyxpdGVyYWJsZToiU3ltYm9sImluIHMmJiJpdGVyYXRvciJpbiBTeW1ib2wsYmxvYjoiRmlsZVJlYWRlciJpbiBzJiYiQmxvYiJpbiBzJiZmdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IEJsb2IsITB9Y2F0Y2goYSl7cmV0dXJuITF9fSgpLGZvcm1EYXRhOiJGb3JtRGF0YSJpbiBzLGFycmF5QnVmZmVyOiJBcnJheUJ1ZmZlciJpbiBzfTtmdW5jdGlvbiBmKGEpe3JldHVybiBhJiZEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKX1pZihjLmFycmF5QnVmZmVyKXZhciBkPVsiW29iamVjdCBJbnQ4QXJyYXldIiwiW29iamVjdCBVaW50OEFycmF5XSIsIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIiwiW29iamVjdCBJbnQxNkFycmF5XSIsIltvYmplY3QgVWludDE2QXJyYXldIiwiW29iamVjdCBJbnQzMkFycmF5XSIsIltvYmplY3QgVWludDMyQXJyYXldIiwiW29iamVjdCBGbG9hdDMyQXJyYXldIiwiW29iamVjdCBGbG9hdDY0QXJyYXldIl0sdT1BcnJheUJ1ZmZlci5pc1ZpZXd8fGZ1bmN0aW9uKGEpe3JldHVybiBhJiZkLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpKT4tMX07ZnVuY3Rpb24geShhKXtpZih0eXBlb2YgYSE9InN0cmluZyImJihhPVN0cmluZyhhKSksL1teYS16MC05XC0jJCUmJyorLl5fYHx+XS9pLnRlc3QoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWUiKTtyZXR1cm4gYS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIHYoYSl7cmV0dXJuIHR5cGVvZiBhIT0ic3RyaW5nIiYmKGE9U3RyaW5nKGEpKSxhfWZ1bmN0aW9uIGIoYSl7dmFyIGg9e25leHQ6ZnVuY3Rpb24oKXt2YXIgXz1hLnNoaWZ0KCk7cmV0dXJue2RvbmU6Xz09PXZvaWQgMCx2YWx1ZTpffX19O3JldHVybiBjLml0ZXJhYmxlJiYoaFtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIGh9KSxofWZ1bmN0aW9uIG0oYSl7dGhpcy5tYXA9e30sYSBpbnN0YW5jZW9mIG0/YS5mb3JFYWNoKGZ1bmN0aW9uKGgsXyl7dGhpcy5hcHBlbmQoXyxoKX0sdGhpcyk6QXJyYXkuaXNBcnJheShhKT9hLmZvckVhY2goZnVuY3Rpb24oaCl7dGhpcy5hcHBlbmQoaFswXSxoWzFdKX0sdGhpcyk6YSYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSkuZm9yRWFjaChmdW5jdGlvbihoKXt0aGlzLmFwcGVuZChoLGFbaF0pfSx0aGlzKX1tLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24oYSxoKXthPXkoYSksaD12KGgpO3ZhciBfPXRoaXMubWFwW2FdO3RoaXMubWFwW2FdPV8/XysiLCAiK2g6aH0sbS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGEpe2RlbGV0ZSB0aGlzLm1hcFt5KGEpXX0sbS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe3JldHVybiBhPXkoYSksdGhpcy5oYXMoYSk/dGhpcy5tYXBbYV06bnVsbH0sbS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eSh5KGEpKX0sbS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsaCl7dGhpcy5tYXBbeShhKV09dihoKX0sbS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihhLGgpe2Zvcih2YXIgXyBpbiB0aGlzLm1hcCl0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShfKSYmYS5jYWxsKGgsdGhpcy5tYXBbX10sXyx0aGlzKX0sbS5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oaCxfKXthLnB1c2goXyl9KSxiKGEpfSxtLnByb3RvdHlwZS52YWx1ZXM9ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGgpe2EucHVzaChoKX0pLGIoYSl9LG0ucHJvdG90eXBlLmVudHJpZXM9ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGgsXyl7YS5wdXNoKFtfLGhdKX0pLGIoYSl9LGMuaXRlcmFibGUmJihtLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPW0ucHJvdG90eXBlLmVudHJpZXMpO2Z1bmN0aW9uIE4oYSl7aWYoYS5ib2R5VXNlZClyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcigiQWxyZWFkeSByZWFkIikpO2EuYm9keVVzZWQ9ITB9ZnVuY3Rpb24gZyhhKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oaCxfKXthLm9ubG9hZD1mdW5jdGlvbigpe2goYS5yZXN1bHQpfSxhLm9uZXJyb3I9ZnVuY3Rpb24oKXtfKGEuZXJyb3IpfX0pfWZ1bmN0aW9uIEUoYSl7dmFyIGg9bmV3IEZpbGVSZWFkZXIsXz1nKGgpO3JldHVybiBoLnJlYWRBc0FycmF5QnVmZmVyKGEpLF99ZnVuY3Rpb24gQyhhKXt2YXIgaD1uZXcgRmlsZVJlYWRlcixfPWcoaCk7cmV0dXJuIGgucmVhZEFzVGV4dChhKSxffWZ1bmN0aW9uIHcoYSl7Zm9yKHZhciBoPW5ldyBVaW50OEFycmF5KGEpLF89bmV3IEFycmF5KGgubGVuZ3RoKSxBPTA7QTxoLmxlbmd0aDtBKyspX1tBXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGhbQV0pO3JldHVybiBfLmpvaW4oIiIpfWZ1bmN0aW9uIFIoYSl7aWYoYS5zbGljZSlyZXR1cm4gYS5zbGljZSgwKTt2YXIgaD1uZXcgVWludDhBcnJheShhLmJ5dGVMZW5ndGgpO3JldHVybiBoLnNldChuZXcgVWludDhBcnJheShhKSksaC5idWZmZXJ9ZnVuY3Rpb24gJCgpe3JldHVybiB0aGlzLmJvZHlVc2VkPSExLHRoaXMuX2luaXRCb2R5PWZ1bmN0aW9uKGEpe3RoaXMuX2JvZHlJbml0PWEsYT90eXBlb2YgYT09InN0cmluZyI/dGhpcy5fYm9keVRleHQ9YTpjLmJsb2ImJkJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSk/dGhpcy5fYm9keUJsb2I9YTpjLmZvcm1EYXRhJiZGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKT90aGlzLl9ib2R5Rm9ybURhdGE9YTpjLnNlYXJjaFBhcmFtcyYmVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpP3RoaXMuX2JvZHlUZXh0PWEudG9TdHJpbmcoKTpjLmFycmF5QnVmZmVyJiZjLmJsb2ImJmYoYSk/KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcj1SKGEuYnVmZmVyKSx0aGlzLl9ib2R5SW5pdD1uZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpOmMuYXJyYXlCdWZmZXImJihBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKXx8dShhKSk/dGhpcy5fYm9keUFycmF5QnVmZmVyPVIoYSk6dGhpcy5fYm9keVRleHQ9YT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSk6dGhpcy5fYm9keVRleHQ9IiIsdGhpcy5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIil8fCh0eXBlb2YgYT09InN0cmluZyI/dGhpcy5oZWFkZXJzLnNldCgiY29udGVudC10eXBlIiwidGV4dC9wbGFpbjtjaGFyc2V0PVVURi04Iik6dGhpcy5fYm9keUJsb2ImJnRoaXMuX2JvZHlCbG9iLnR5cGU/dGhpcy5oZWFkZXJzLnNldCgiY29udGVudC10eXBlIix0aGlzLl9ib2R5QmxvYi50eXBlKTpjLnNlYXJjaFBhcmFtcyYmVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpJiZ0aGlzLmhlYWRlcnMuc2V0KCJjb250ZW50LXR5cGUiLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCIpKX0sYy5ibG9iJiYodGhpcy5ibG9iPWZ1bmN0aW9uKCl7dmFyIGE9Tih0aGlzKTtpZihhKXJldHVybiBhO2lmKHRoaXMuX2JvZHlCbG9iKXJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpO2lmKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSk7aWYodGhpcy5fYm9keUZvcm1EYXRhKXRocm93IG5ldyBFcnJvcigiY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iIik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSl9LHRoaXMuYXJyYXlCdWZmZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYm9keUFycmF5QnVmZmVyP04odGhpcyl8fFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpOnRoaXMuYmxvYigpLnRoZW4oRSl9KSx0aGlzLnRleHQ9ZnVuY3Rpb24oKXt2YXIgYT1OKHRoaXMpO2lmKGEpcmV0dXJuIGE7aWYodGhpcy5fYm9keUJsb2IpcmV0dXJuIEModGhpcy5fYm9keUJsb2IpO2lmKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHcodGhpcy5fYm9keUFycmF5QnVmZmVyKSk7aWYodGhpcy5fYm9keUZvcm1EYXRhKXRocm93IG5ldyBFcnJvcigiY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0Iik7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5VGV4dCl9LGMuZm9ybURhdGEmJih0aGlzLmZvcm1EYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oUyl9KSx0aGlzLmpzb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKX0sdGhpc312YXIgcT1bIkRFTEVURSIsIkdFVCIsIkhFQUQiLCJPUFRJT05TIiwiUE9TVCIsIlBVVCJdO2Z1bmN0aW9uIEIoYSl7dmFyIGg9YS50b1VwcGVyQ2FzZSgpO3JldHVybiBxLmluZGV4T2YoaCk+LTE/aDphfWZ1bmN0aW9uIEkoYSxoKXtoPWh8fHt9O3ZhciBfPWguYm9keTtpZihhIGluc3RhbmNlb2YgSSl7aWYoYS5ib2R5VXNlZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJBbHJlYWR5IHJlYWQiKTt0aGlzLnVybD1hLnVybCx0aGlzLmNyZWRlbnRpYWxzPWEuY3JlZGVudGlhbHMsaC5oZWFkZXJzfHwodGhpcy5oZWFkZXJzPW5ldyBtKGEuaGVhZGVycykpLHRoaXMubWV0aG9kPWEubWV0aG9kLHRoaXMubW9kZT1hLm1vZGUsdGhpcy5zaWduYWw9YS5zaWduYWwsIV8mJmEuX2JvZHlJbml0IT1udWxsJiYoXz1hLl9ib2R5SW5pdCxhLmJvZHlVc2VkPSEwKX1lbHNlIHRoaXMudXJsPVN0cmluZyhhKTtpZih0aGlzLmNyZWRlbnRpYWxzPWguY3JlZGVudGlhbHN8fHRoaXMuY3JlZGVudGlhbHN8fCJzYW1lLW9yaWdpbiIsKGguaGVhZGVyc3x8IXRoaXMuaGVhZGVycykmJih0aGlzLmhlYWRlcnM9bmV3IG0oaC5oZWFkZXJzKSksdGhpcy5tZXRob2Q9QihoLm1ldGhvZHx8dGhpcy5tZXRob2R8fCJHRVQiKSx0aGlzLm1vZGU9aC5tb2RlfHx0aGlzLm1vZGV8fG51bGwsdGhpcy5zaWduYWw9aC5zaWduYWx8fHRoaXMuc2lnbmFsLHRoaXMucmVmZXJyZXI9bnVsbCwodGhpcy5tZXRob2Q9PT0iR0VUInx8dGhpcy5tZXRob2Q9PT0iSEVBRCIpJiZfKXRocm93IG5ldyBUeXBlRXJyb3IoIkJvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzIik7dGhpcy5faW5pdEJvZHkoXyl9SS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEkodGhpcyx7Ym9keTp0aGlzLl9ib2R5SW5pdH0pfTtmdW5jdGlvbiBTKGEpe3ZhciBoPW5ldyBGb3JtRGF0YTtyZXR1cm4gYS50cmltKCkuc3BsaXQoIiYiKS5mb3JFYWNoKGZ1bmN0aW9uKF8pe2lmKF8pe3ZhciBBPV8uc3BsaXQoIj0iKSxrPUEuc2hpZnQoKS5yZXBsYWNlKC9cKy9nLCIgIikseD1BLmpvaW4oIj0iKS5yZXBsYWNlKC9cKy9nLCIgIik7aC5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KGspLGRlY29kZVVSSUNvbXBvbmVudCh4KSl9fSksaH1mdW5jdGlvbiBqKGEpe3ZhciBoPW5ldyBtLF89YS5yZXBsYWNlKC9ccj9cbltcdCBdKy9nLCIgIik7cmV0dXJuIF8uc3BsaXQoL1xyP1xuLykuZm9yRWFjaChmdW5jdGlvbihBKXt2YXIgaz1BLnNwbGl0KCI6IikseD1rLnNoaWZ0KCkudHJpbSgpO2lmKHgpe3ZhciBjZT1rLmpvaW4oIjoiKS50cmltKCk7aC5hcHBlbmQoeCxjZSl9fSksaH0kLmNhbGwoSS5wcm90b3R5cGUpO2Z1bmN0aW9uIFUoYSxoKXtofHwoaD17fSksdGhpcy50eXBlPSJkZWZhdWx0Iix0aGlzLnN0YXR1cz1oLnN0YXR1cz09PXZvaWQgMD8yMDA6aC5zdGF0dXMsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDAsdGhpcy5zdGF0dXNUZXh0PSJzdGF0dXNUZXh0ImluIGg/aC5zdGF0dXNUZXh0OiJPSyIsdGhpcy5oZWFkZXJzPW5ldyBtKGguaGVhZGVycyksdGhpcy51cmw9aC51cmx8fCIiLHRoaXMuX2luaXRCb2R5KGEpfSQuY2FsbChVLnByb3RvdHlwZSksVS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFUodGhpcy5fYm9keUluaXQse3N0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OnRoaXMuc3RhdHVzVGV4dCxoZWFkZXJzOm5ldyBtKHRoaXMuaGVhZGVycyksdXJsOnRoaXMudXJsfSl9LFUuZXJyb3I9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgVShudWxsLHtzdGF0dXM6MCxzdGF0dXNUZXh0OiIifSk7cmV0dXJuIGEudHlwZT0iZXJyb3IiLGF9O3ZhciB6PVszMDEsMzAyLDMwMywzMDcsMzA4XTtVLnJlZGlyZWN0PWZ1bmN0aW9uKGEsaCl7aWYoei5pbmRleE9mKGgpPT09LTEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgc3RhdHVzIGNvZGUiKTtyZXR1cm4gbmV3IFUobnVsbCx7c3RhdHVzOmgsaGVhZGVyczp7bG9jYXRpb246YX19KX0sby5ET01FeGNlcHRpb249cy5ET01FeGNlcHRpb247dHJ5e25ldyBvLkRPTUV4Y2VwdGlvbn1jYXRjaChhKXtvLkRPTUV4Y2VwdGlvbj1mdW5jdGlvbihoLF8pe3RoaXMubWVzc2FnZT1oLHRoaXMubmFtZT1fO3ZhciBBPUVycm9yKGgpO3RoaXMuc3RhY2s9QS5zdGFja30sby5ET01FeGNlcHRpb24ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSxvLkRPTUV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3I9by5ET01FeGNlcHRpb259ZnVuY3Rpb24gSyhhLGgpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihfLEEpe3ZhciBrPW5ldyBJKGEsaCk7aWYoay5zaWduYWwmJmsuc2lnbmFsLmFib3J0ZWQpcmV0dXJuIEEobmV3IG8uRE9NRXhjZXB0aW9uKCJBYm9ydGVkIiwiQWJvcnRFcnJvciIpKTt2YXIgeD1uZXcgWE1MSHR0cFJlcXVlc3Q7ZnVuY3Rpb24gY2UoKXt4LmFib3J0KCl9eC5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgSD17c3RhdHVzOnguc3RhdHVzLHN0YXR1c1RleHQ6eC5zdGF0dXNUZXh0LGhlYWRlcnM6aih4LmdldEFsbFJlc3BvbnNlSGVhZGVycygpfHwiIil9O0gudXJsPSJyZXNwb25zZVVSTCJpbiB4P3gucmVzcG9uc2VVUkw6SC5oZWFkZXJzLmdldCgiWC1SZXF1ZXN0LVVSTCIpO3ZhciBzZT0icmVzcG9uc2UiaW4geD94LnJlc3BvbnNlOngucmVzcG9uc2VUZXh0O18obmV3IFUoc2UsSCkpfSx4Lm9uZXJyb3I9ZnVuY3Rpb24oKXtBKG5ldyBUeXBlRXJyb3IoIk5ldHdvcmsgcmVxdWVzdCBmYWlsZWQiKSl9LHgub250aW1lb3V0PWZ1bmN0aW9uKCl7QShuZXcgVHlwZUVycm9yKCJOZXR3b3JrIHJlcXVlc3QgZmFpbGVkIikpfSx4Lm9uYWJvcnQ9ZnVuY3Rpb24oKXtBKG5ldyBvLkRPTUV4Y2VwdGlvbigiQWJvcnRlZCIsIkFib3J0RXJyb3IiKSl9LHgub3BlbihrLm1ldGhvZCxrLnVybCwhMCksay5jcmVkZW50aWFscz09PSJpbmNsdWRlIj94LndpdGhDcmVkZW50aWFscz0hMDprLmNyZWRlbnRpYWxzPT09Im9taXQiJiYoeC53aXRoQ3JlZGVudGlhbHM9ITEpLCJyZXNwb25zZVR5cGUiaW4geCYmYy5ibG9iJiYoeC5yZXNwb25zZVR5cGU9ImJsb2IiKSxrLmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihILHNlKXt4LnNldFJlcXVlc3RIZWFkZXIoc2UsSCl9KSxrLnNpZ25hbCYmKGsuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixjZSkseC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXt4LnJlYWR5U3RhdGU9PT00JiZrLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsY2UpfSkseC5zZW5kKHR5cGVvZiBrLl9ib2R5SW5pdD09InVuZGVmaW5lZCI/bnVsbDprLl9ib2R5SW5pdCl9KX1yZXR1cm4gSy5wb2x5ZmlsbD0hMCxzLmZldGNofHwocy5mZXRjaD1LLHMuSGVhZGVycz1tLHMuUmVxdWVzdD1JLHMuUmVzcG9uc2U9VSksby5IZWFkZXJzPW0sby5SZXF1ZXN0PUksby5SZXNwb25zZT1VLG8uZmV0Y2g9SyxPYmplY3QuZGVmaW5lUHJvcGVydHkobywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksb30pKHt9KX0pKGkpLGkuZmV0Y2gucG9ueWZpbGw9ITAsZGVsZXRlIGkuZmV0Y2gucG9seWZpbGw7dmFyIHI9aTt0PXIuZmV0Y2gsdC5kZWZhdWx0PXIuZmV0Y2gsdC5mZXRjaD1yLmZldGNoLHQuSGVhZGVycz1yLkhlYWRlcnMsdC5SZXF1ZXN0PXIuUmVxdWVzdCx0LlJlc3BvbnNlPXIuUmVzcG9uc2UsZS5leHBvcnRzPXR9KShRZSxRZS5leHBvcnRzKTt2YXIgQ2U9UWUuZXhwb3J0cyxrZT1EdChDZSksR249Rih7X19wcm90b19fOm51bGwsZGVmYXVsdDprZX0sW0NlXSk7Y29uc3QgcGU9ZT0+e2xldCB0PXt9O3JldHVybiBlJiYodHlwZW9mIEhlYWRlcnMhPSJ1bmRlZmluZWQiJiZlIGluc3RhbmNlb2YgSGVhZGVyc3x8R24mJkNlLkhlYWRlcnMmJmUgaW5zdGFuY2VvZiBDZS5IZWFkZXJzP3Q9WChlKTpBcnJheS5pc0FycmF5KGUpP2UuZm9yRWFjaCgoW24saV0pPT57biYmaSE9PXZvaWQgMCYmKHRbbl09aSl9KTp0PWUpLHR9LEN0PWU9PmUucmVwbGFjZSgvKFtccyxdfCNbXlxuXHJdKykrL2csIiAiKS50cmltKCksem49ZT0+e2lmKCFBcnJheS5pc0FycmF5KGUucXVlcnkpKXtjb25zdCBpPWUscj1bYHF1ZXJ5PSR7ZW5jb2RlVVJJQ29tcG9uZW50KEN0KGkucXVlcnkpKX1gXTtyZXR1cm4gZS52YXJpYWJsZXMmJnIucHVzaChgdmFyaWFibGVzPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGkuanNvblNlcmlhbGl6ZXIuc3RyaW5naWZ5KGkudmFyaWFibGVzKSl9YCksaS5vcGVyYXRpb25OYW1lJiZyLnB1c2goYG9wZXJhdGlvbk5hbWU9JHtlbmNvZGVVUklDb21wb25lbnQoaS5vcGVyYXRpb25OYW1lKX1gKSxyLmpvaW4oIiYiKX1pZih0eXBlb2YgZS52YXJpYWJsZXMhPSJ1bmRlZmluZWQiJiYhQXJyYXkuaXNBcnJheShlLnZhcmlhYmxlcykpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY3JlYXRlIHF1ZXJ5IHdpdGggZ2l2ZW4gdmFyaWFibGUgdHlwZSwgYXJyYXkgZXhwZWN0ZWQiKTtjb25zdCB0PWUsbj1lLnF1ZXJ5LnJlZHVjZSgoaSxyLHMpPT4oaS5wdXNoKHtxdWVyeTpDdChyKSx2YXJpYWJsZXM6dC52YXJpYWJsZXM/dC5qc29uU2VyaWFsaXplci5zdHJpbmdpZnkodC52YXJpYWJsZXNbc10pOnZvaWQgMH0pLGkpLFtdKTtyZXR1cm5gcXVlcnk9JHtlbmNvZGVVUklDb21wb25lbnQodC5qc29uU2VyaWFsaXplci5zdHJpbmdpZnkobikpfWB9LEhuPWU9PnQ9PlEodGhpcyxudWxsLGZ1bmN0aW9uKigpe3ZhciBOO2NvbnN0e3VybDpuLHF1ZXJ5OmksdmFyaWFibGVzOnIsb3BlcmF0aW9uTmFtZTpzLGZldGNoOm8sZmV0Y2hPcHRpb25zOmMsbWlkZGxld2FyZTpmfT10LGQ9RCh7fSx0LmhlYWRlcnMpO2xldCB1PSIiLHk7ZT09PSJQT1NUIj8oeT1KbihpLHIscyxjLmpzb25TZXJpYWxpemVyKSx0eXBlb2YgeT09InN0cmluZyImJihkWyJDb250ZW50LVR5cGUiXT0iYXBwbGljYXRpb24vanNvbiIpKTp1PXpuKHtxdWVyeTppLHZhcmlhYmxlczpyLG9wZXJhdGlvbk5hbWU6cyxqc29uU2VyaWFsaXplcjooTj1jLmpzb25TZXJpYWxpemVyKSE9bnVsbD9OOlB9KTtjb25zdCB2PUQoe21ldGhvZDplLGhlYWRlcnM6ZCxib2R5Onl9LGMpO2xldCBiPW4sbT12O2lmKGYpe2NvbnN0IGc9eWllbGQgUHJvbWlzZS5yZXNvbHZlKGYoQmUoRCh7fSx2KSx7dXJsOm4sb3BlcmF0aW9uTmFtZTpzLHZhcmlhYmxlczpyfSkpKSx7dXJsOkN9PWcsdz12ZShnLFsidXJsIl0pO2I9QyxtPXd9cmV0dXJuIHUmJihiPWAke2J9PyR7dX1gKSx5aWVsZCBvKGIsbSl9KTtjbGFzcyBZbntjb25zdHJ1Y3Rvcih0LG49e30pe3RoaXMudXJsPXQsdGhpcy5yZXF1ZXN0Q29uZmlnPW4sdGhpcy5yYXdSZXF1ZXN0PSguLi5pKT0+USh0aGlzLG51bGwsZnVuY3Rpb24qKCl7Y29uc3RbcixzLG9dPWksYz1VZShyLHMsbyksZz10aGlzLnJlcXVlc3RDb25maWcse2hlYWRlcnM6ZixmZXRjaDpkPWtlLG1ldGhvZDp1PSJQT1NUIixyZXF1ZXN0TWlkZGxld2FyZTp5LHJlc3BvbnNlTWlkZGxld2FyZTp2fT1nLGI9dmUoZyxbImhlYWRlcnMiLCJmZXRjaCIsIm1ldGhvZCIsInJlcXVlc3RNaWRkbGV3YXJlIiwicmVzcG9uc2VNaWRkbGV3YXJlIl0pLHt1cmw6bX09dGhpcztjLnNpZ25hbCE9PXZvaWQgMCYmKGIuc2lnbmFsPWMuc2lnbmFsKTtjb25zdHtvcGVyYXRpb25OYW1lOk59PUplKGMucXVlcnkpO3JldHVybiBYZSh7dXJsOm0scXVlcnk6Yy5xdWVyeSx2YXJpYWJsZXM6Yy52YXJpYWJsZXMsaGVhZGVyczpEKEQoe30scGUoV2UoZikpKSxwZShjLnJlcXVlc3RIZWFkZXJzKSksb3BlcmF0aW9uTmFtZTpOLGZldGNoOmQsbWV0aG9kOnUsZmV0Y2hPcHRpb25zOmIsbWlkZGxld2FyZTp5fSkudGhlbihFPT4odiYmdihFKSxFKSkuY2F0Y2goRT0+e3Rocm93IHYmJnYoRSksRX0pfSl9cmVxdWVzdCh0LC4uLm4pe3JldHVybiBRKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtjb25zdFtpLHJdPW4scz1JZSh0LGksciksTj10aGlzLnJlcXVlc3RDb25maWcse2hlYWRlcnM6byxmZXRjaDpjPWtlLG1ldGhvZDpmPSJQT1NUIixyZXF1ZXN0TWlkZGxld2FyZTpkLHJlc3BvbnNlTWlkZGxld2FyZTp1fT1OLHk9dmUoTixbImhlYWRlcnMiLCJmZXRjaCIsIm1ldGhvZCIsInJlcXVlc3RNaWRkbGV3YXJlIiwicmVzcG9uc2VNaWRkbGV3YXJlIl0pLHt1cmw6dn09dGhpcztzLnNpZ25hbCE9PXZvaWQgMCYmKHkuc2lnbmFsPXMuc2lnbmFsKTtjb25zdHtxdWVyeTpiLG9wZXJhdGlvbk5hbWU6bX09SmUocy5kb2N1bWVudCk7cmV0dXJuIFhlKHt1cmw6dixxdWVyeTpiLHZhcmlhYmxlczpzLnZhcmlhYmxlcyxoZWFkZXJzOkQoRCh7fSxwZShXZShvKSkpLHBlKHMucmVxdWVzdEhlYWRlcnMpKSxvcGVyYXRpb25OYW1lOm0sZmV0Y2g6YyxtZXRob2Q6ZixmZXRjaE9wdGlvbnM6eSxtaWRkbGV3YXJlOmR9KS50aGVuKGc9Pih1JiZ1KGcpLGcuZGF0YSkpLmNhdGNoKGc9Pnt0aHJvdyB1JiZ1KGcpLGd9KX0pfWJhdGNoUmVxdWVzdHModCxuKXt2YXIgZDtjb25zdCBpPVZlKHQsbiksZj10aGlzLnJlcXVlc3RDb25maWcse2hlYWRlcnM6cn09ZixzPXZlKGYsWyJoZWFkZXJzIl0pO2kuc2lnbmFsIT09dm9pZCAwJiYocy5zaWduYWw9aS5zaWduYWwpO2NvbnN0IG89aS5kb2N1bWVudHMubWFwKCh7ZG9jdW1lbnQ6dX0pPT5KZSh1KS5xdWVyeSksYz1pLmRvY3VtZW50cy5tYXAoKHt2YXJpYWJsZXM6dX0pPT51KTtyZXR1cm4gWGUoe3VybDp0aGlzLnVybCxxdWVyeTpvLHZhcmlhYmxlczpjLGhlYWRlcnM6RChEKHt9LHBlKFdlKHIpKSkscGUoaS5yZXF1ZXN0SGVhZGVycykpLG9wZXJhdGlvbk5hbWU6dm9pZCAwLGZldGNoOihkPXRoaXMucmVxdWVzdENvbmZpZy5mZXRjaCkhPW51bGw/ZDprZSxtZXRob2Q6dGhpcy5yZXF1ZXN0Q29uZmlnLm1ldGhvZHx8IlBPU1QiLGZldGNoT3B0aW9uczpzLG1pZGRsZXdhcmU6dGhpcy5yZXF1ZXN0Q29uZmlnLnJlcXVlc3RNaWRkbGV3YXJlfSkudGhlbih1PT4odGhpcy5yZXF1ZXN0Q29uZmlnLnJlc3BvbnNlTWlkZGxld2FyZSYmdGhpcy5yZXF1ZXN0Q29uZmlnLnJlc3BvbnNlTWlkZGxld2FyZSh1KSx1LmRhdGEpKS5jYXRjaCh1PT57dGhyb3cgdGhpcy5yZXF1ZXN0Q29uZmlnLnJlc3BvbnNlTWlkZGxld2FyZSYmdGhpcy5yZXF1ZXN0Q29uZmlnLnJlc3BvbnNlTWlkZGxld2FyZSh1KSx1fSl9c2V0SGVhZGVycyh0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0Q29uZmlnLmhlYWRlcnM9dCx0aGlzfXNldEhlYWRlcih0LG4pe2NvbnN0e2hlYWRlcnM6aX09dGhpcy5yZXF1ZXN0Q29uZmlnO3JldHVybiBpP2lbdF09bjp0aGlzLnJlcXVlc3RDb25maWcuaGVhZGVycz17W3RdOm59LHRoaXN9c2V0RW5kcG9pbnQodCl7cmV0dXJuIHRoaXMudXJsPXQsdGhpc319Y29uc3QgWGU9ZT0+USh0aGlzLG51bGwsZnVuY3Rpb24qKCl7dmFyIHUseTtjb25zdHtxdWVyeTp0LHZhcmlhYmxlczpuLGZldGNoT3B0aW9uczppfT1lLHI9SG4oTSgodT1lLm1ldGhvZCkhPW51bGw/dToicG9zdCIpKSxzPUFycmF5LmlzQXJyYXkoZS5xdWVyeSksbz15aWVsZCByKGUpLGM9eWllbGQgUW4obywoeT1pLmpzb25TZXJpYWxpemVyKSE9bnVsbD95OlApLGY9QXJyYXkuaXNBcnJheShjKT8hYy5zb21lKCh7ZGF0YTpifSk9PiFiKTohIWMuZGF0YSxkPUFycmF5LmlzQXJyYXkoYyl8fCFjLmVycm9yc3x8QXJyYXkuaXNBcnJheShjLmVycm9ycykmJiFjLmVycm9ycy5sZW5ndGh8fGkuZXJyb3JQb2xpY3k9PT0iYWxsInx8aS5lcnJvclBvbGljeT09PSJpZ25vcmUiO2lmKG8ub2smJmQmJmYpe2NvbnN0IHY9KEFycmF5LmlzQXJyYXkoYyksYykse2Vycm9yczpifT12LG09dmUodixbImVycm9ycyJdKSxOPWkuZXJyb3JQb2xpY3k9PT0iaWdub3JlIj9tOmM7cmV0dXJuIEJlKEQoe30scz97ZGF0YTpOfTpOKSx7aGVhZGVyczpvLmhlYWRlcnMsc3RhdHVzOm8uc3RhdHVzfSl9ZWxzZXtjb25zdCBiPXR5cGVvZiBjPT0ic3RyaW5nIj97ZXJyb3I6Y306Yzt0aHJvdyBuZXcgZGUoQmUoRCh7fSxiKSx7c3RhdHVzOm8uc3RhdHVzLGhlYWRlcnM6by5oZWFkZXJzfSkse3F1ZXJ5OnQsdmFyaWFibGVzOm59KX19KSxKbj0oZSx0LG4saSk9Pntjb25zdCByPWkhPW51bGw/aTpQO2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiByLnN0cmluZ2lmeSh7cXVlcnk6ZSx2YXJpYWJsZXM6dCxvcGVyYXRpb25OYW1lOm59KTtpZih0eXBlb2YgdCE9InVuZGVmaW5lZCImJiFBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNyZWF0ZSByZXF1ZXN0IGJvZHkgd2l0aCBnaXZlbiB2YXJpYWJsZSB0eXBlLCBhcnJheSBleHBlY3RlZCIpO2NvbnN0IHM9ZS5yZWR1Y2UoKG8sYyxmKT0+KG8ucHVzaCh7cXVlcnk6Yyx2YXJpYWJsZXM6dD90W2ZdOnZvaWQgMH0pLG8pLFtdKTtyZXR1cm4gci5zdHJpbmdpZnkocyl9LFFuPShlLHQpPT5RKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtsZXQgbjtyZXR1cm4gZS5oZWFkZXJzLmZvckVhY2goKGkscik9PntyLnRvTG93ZXJDYXNlKCk9PT0iY29udGVudC10eXBlIiYmKG49aSl9KSxuJiYobi50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoImFwcGxpY2F0aW9uL2pzb24iKXx8bi50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoImFwcGxpY2F0aW9uL2dyYXBocWwranNvbiIpfHxuLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgiYXBwbGljYXRpb24vZ3JhcGhxbC1yZXNwb25zZStqc29uIikpP3QucGFyc2UoeWllbGQgZS50ZXh0KCkpOmUudGV4dCgpfSksV2U9ZT0+dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZSgpOmU7dmFyIFplPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oZSx0KXt0PWUuZXhwb3J0cz1uLHQuZ2V0U2VyaWFsaXplPWk7ZnVuY3Rpb24gbihyLHMsbyxjKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkocixpKHMsYyksbyl9ZnVuY3Rpb24gaShyLHMpe3ZhciBvPVtdLGM9W107cmV0dXJuIHM9PW51bGwmJihzPWZ1bmN0aW9uKGYsZCl7cmV0dXJuIG9bMF09PT1kPyJbQ2lyY3VsYXIgfl0iOiJbQ2lyY3VsYXIgfi4iK2Muc2xpY2UoMCxvLmluZGV4T2YoZCkpLmpvaW4oIi4iKSsiXSJ9KSxmdW5jdGlvbihmLGQpe2lmKG8ubGVuZ3RoPjApe3ZhciB1PW8uaW5kZXhPZih0aGlzKTt+dT9vLnNwbGljZSh1KzEpOm8ucHVzaCh0aGlzKSx+dT9jLnNwbGljZSh1LDEvMCxmKTpjLnB1c2goZiksfm8uaW5kZXhPZihkKSYmKGQ9cy5jYWxsKHRoaXMsZixkKSl9ZWxzZSBvLnB1c2goZCk7cmV0dXJuIHI9PW51bGw/ZDpyLmNhbGwodGhpcyxmLGQpfX19KShaZSxaZS5leHBvcnRzKTt2YXIgWG49WmUuZXhwb3J0cyxtZT1EdChYbik7Y29uc3Qga3Q9MWUzKjE1O3ZhciBSZT1mdW5jdGlvbigpe3JldHVybiBSZT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih0KXtmb3IodmFyIG4saT0xLHI9YXJndW1lbnRzLmxlbmd0aDtpPHI7aSsrKXtuPWFyZ3VtZW50c1tpXTtmb3IodmFyIHMgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixzKSYmKHRbc109bltzXSl9cmV0dXJuIHR9LFJlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dHlwZW9mIFN1cHByZXNzZWRFcnJvcj09ImZ1bmN0aW9uIiYmU3VwcHJlc3NlZEVycm9yO3ZhciBQZT1uZXcgTWFwLEtlPW5ldyBNYXAsUnQ9ITAsTGU9ITE7ZnVuY3Rpb24gUHQoZSl7cmV0dXJuIGUucmVwbGFjZSgvW1xzLF0rL2csIiAiKS50cmltKCl9ZnVuY3Rpb24gV24oZSl7cmV0dXJuIFB0KGUuc291cmNlLmJvZHkuc3Vic3RyaW5nKGUuc3RhcnQsZS5lbmQpKX1mdW5jdGlvbiBabihlKXt2YXIgdD1uZXcgU2V0LG49W107cmV0dXJuIGUuZGVmaW5pdGlvbnMuZm9yRWFjaChmdW5jdGlvbihpKXtpZihpLmtpbmQ9PT0iRnJhZ21lbnREZWZpbml0aW9uIil7dmFyIHI9aS5uYW1lLnZhbHVlLHM9V24oaS5sb2MpLG89S2UuZ2V0KHIpO28mJiFvLmhhcyhzKT9SdCYmY29uc29sZS53YXJuKCJXYXJuaW5nOiBmcmFnbWVudCB3aXRoIG5hbWUgIityK2AgYWxyZWFkeSBleGlzdHMuCmdyYXBocWwtdGFnIGVuZm9yY2VzIGFsbCBmcmFnbWVudCBuYW1lcyBhY3Jvc3MgeW91ciBhcHBsaWNhdGlvbiB0byBiZSB1bmlxdWU7IHJlYWQgbW9yZSBhYm91dAp0aGlzIGluIHRoZSBkb2NzOiBodHRwOi8vZGV2LmFwb2xsb2RhdGEuY29tL2NvcmUvZnJhZ21lbnRzLmh0bWwjdW5pcXVlLW5hbWVzYCk6b3x8S2Uuc2V0KHIsbz1uZXcgU2V0KSxvLmFkZChzKSx0LmhhcyhzKXx8KHQuYWRkKHMpLG4ucHVzaChpKSl9ZWxzZSBuLnB1c2goaSl9KSxSZShSZSh7fSxlKSx7ZGVmaW5pdGlvbnM6bn0pfWZ1bmN0aW9uIEtuKGUpe3ZhciB0PW5ldyBTZXQoZS5kZWZpbml0aW9ucyk7dC5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kubG9jJiZkZWxldGUgaS5sb2MsT2JqZWN0LmtleXMoaSkuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgcz1pW3JdO3MmJnR5cGVvZiBzPT0ib2JqZWN0IiYmdC5hZGQocyl9KX0pO3ZhciBuPWUubG9jO3JldHVybiBuJiYoZGVsZXRlIG4uc3RhcnRUb2tlbixkZWxldGUgbi5lbmRUb2tlbiksZX1mdW5jdGlvbiBlcihlKXt2YXIgdD1QdChlKTtpZighUGUuaGFzKHQpKXt2YXIgbj1JdChlLHtleHBlcmltZW50YWxGcmFnbWVudFZhcmlhYmxlczpMZSxhbGxvd0xlZ2FjeUZyYWdtZW50VmFyaWFibGVzOkxlfSk7aWYoIW58fG4ua2luZCE9PSJEb2N1bWVudCIpdGhyb3cgbmV3IEVycm9yKCJOb3QgYSB2YWxpZCBHcmFwaFFMIGRvY3VtZW50LiIpO1BlLnNldCh0LEtuKFpuKG4pKSl9cmV0dXJuIFBlLmdldCh0KX1mdW5jdGlvbiBKKGUpe2Zvcih2YXIgdD1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO3R5cGVvZiBlPT0ic3RyaW5nIiYmKGU9W2VdKTt2YXIgaT1lWzBdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24ocixzKXtyJiZyLmtpbmQ9PT0iRG9jdW1lbnQiP2krPXIubG9jLnNvdXJjZS5ib2R5OmkrPXIsaSs9ZVtzKzFdfSksZXIoaSl9ZnVuY3Rpb24gdHIoKXtQZS5jbGVhcigpLEtlLmNsZWFyKCl9ZnVuY3Rpb24gbnIoKXtSdD0hMX1mdW5jdGlvbiBycigpe0xlPSEwfWZ1bmN0aW9uIGlyKCl7TGU9ITF9dmFyIGJlPXtncWw6SixyZXNldENhY2hlczp0cixkaXNhYmxlRnJhZ21lbnRXYXJuaW5nczpucixlbmFibGVFeHBlcmltZW50YWxGcmFnbWVudFZhcmlhYmxlczpycixkaXNhYmxlRXhwZXJpbWVudGFsRnJhZ21lbnRWYXJpYWJsZXM6aXJ9OyhmdW5jdGlvbihlKXtlLmdxbD1iZS5ncWwsZS5yZXNldENhY2hlcz1iZS5yZXNldENhY2hlcyxlLmRpc2FibGVGcmFnbWVudFdhcm5pbmdzPWJlLmRpc2FibGVGcmFnbWVudFdhcm5pbmdzLGUuZW5hYmxlRXhwZXJpbWVudGFsRnJhZ21lbnRWYXJpYWJsZXM9YmUuZW5hYmxlRXhwZXJpbWVudGFsRnJhZ21lbnRWYXJpYWJsZXMsZS5kaXNhYmxlRXhwZXJpbWVudGFsRnJhZ21lbnRWYXJpYWJsZXM9YmUuZGlzYWJsZUV4cGVyaW1lbnRhbEZyYWdtZW50VmFyaWFibGVzfSkoSnx8KEo9e30pKSxKLmRlZmF1bHQ9Sjtjb25zdCBMdD1KYAoJZnJhZ21lbnQgTWF0Y2hQYXJ0cyBvbiBNYXRjaENvbmZpZyB7CgkJcmVnZXhWYWx1ZQoJCW1hdGNoVmFsdWUKCX0KYCxzcj1KYAoJbXV0YXRpb24gUHVzaFBheWxvYWQoCgkJJHNlc3Npb25fc2VjdXJlX2lkOiBTdHJpbmchCgkJJHBheWxvYWRfaWQ6IElEIQoJCSRldmVudHM6IFJlcGxheUV2ZW50c0lucHV0IQoJCSRtZXNzYWdlczogU3RyaW5nIQoJCSRyZXNvdXJjZXM6IFN0cmluZyEKCQkkd2ViX3NvY2tldF9ldmVudHM6IFN0cmluZyEKCQkkZXJyb3JzOiBbRXJyb3JPYmplY3RJbnB1dF0hCgkJJGlzX2JlYWNvbjogQm9vbGVhbgoJCSRoYXNfc2Vzc2lvbl91bmxvYWRlZDogQm9vbGVhbgoJCSRoaWdobGlnaHRfbG9nczogU3RyaW5nCgkpIHsKCQlwdXNoUGF5bG9hZCgKCQkJc2Vzc2lvbl9zZWN1cmVfaWQ6ICRzZXNzaW9uX3NlY3VyZV9pZAoJCQlwYXlsb2FkX2lkOiAkcGF5bG9hZF9pZAoJCQlldmVudHM6ICRldmVudHMKCQkJbWVzc2FnZXM6ICRtZXNzYWdlcwoJCQlyZXNvdXJjZXM6ICRyZXNvdXJjZXMKCQkJd2ViX3NvY2tldF9ldmVudHM6ICR3ZWJfc29ja2V0X2V2ZW50cwoJCQllcnJvcnM6ICRlcnJvcnMKCQkJaXNfYmVhY29uOiAkaXNfYmVhY29uCgkJCWhhc19zZXNzaW9uX3VubG9hZGVkOiAkaGFzX3Nlc3Npb25fdW5sb2FkZWQKCQkJaGlnaGxpZ2h0X2xvZ3M6ICRoaWdobGlnaHRfbG9ncwoJCSkKCX0KYCxvcj1KYAoJbXV0YXRpb24gUHVzaFNlc3Npb25FdmVudHMoCgkJJHNlc3Npb25fc2VjdXJlX2lkOiBTdHJpbmchCgkJJHBheWxvYWRfaWQ6IEludDY0SUQhCgkJJGRhdGE6IFN0cmluZyEKCSkgewoJCXB1c2hTZXNzaW9uRXZlbnRzKAoJCQlzZXNzaW9uX3NlY3VyZV9pZDogJHNlc3Npb25fc2VjdXJlX2lkCgkJCXBheWxvYWRfaWQ6ICRwYXlsb2FkX2lkCgkJCWRhdGE6ICRkYXRhCgkJKQoJfQpgLGFyPUpgCgltdXRhdGlvbiBpZGVudGlmeVNlc3Npb24oCgkJJHNlc3Npb25fc2VjdXJlX2lkOiBTdHJpbmchCgkJJHVzZXJfaWRlbnRpZmllcjogU3RyaW5nIQoJCSR1c2VyX29iamVjdDogQW55CgkpIHsKCQlpZGVudGlmeVNlc3Npb24oCgkJCXNlc3Npb25fc2VjdXJlX2lkOiAkc2Vzc2lvbl9zZWN1cmVfaWQKCQkJdXNlcl9pZGVudGlmaWVyOiAkdXNlcl9pZGVudGlmaWVyCgkJCXVzZXJfb2JqZWN0OiAkdXNlcl9vYmplY3QKCQkpCgl9CmAsY3I9SmAKCW11dGF0aW9uIGFkZFNlc3Npb25Qcm9wZXJ0aWVzKAoJCSRzZXNzaW9uX3NlY3VyZV9pZDogU3RyaW5nIQoJCSRwcm9wZXJ0aWVzX29iamVjdDogQW55CgkpIHsKCQlhZGRTZXNzaW9uUHJvcGVydGllcygKCQkJc2Vzc2lvbl9zZWN1cmVfaWQ6ICRzZXNzaW9uX3NlY3VyZV9pZAoJCQlwcm9wZXJ0aWVzX29iamVjdDogJHByb3BlcnRpZXNfb2JqZWN0CgkJKQoJfQpgLHVyPUpgCgltdXRhdGlvbiBwdXNoTWV0cmljcygkbWV0cmljczogW01ldHJpY0lucHV0XSEpIHsKCQlwdXNoTWV0cmljcyhtZXRyaWNzOiAkbWV0cmljcykKCX0KYCxscj1KYAoJbXV0YXRpb24gYWRkU2Vzc2lvbkZlZWRiYWNrKAoJCSRzZXNzaW9uX3NlY3VyZV9pZDogU3RyaW5nIQoJCSR1c2VyX25hbWU6IFN0cmluZwoJCSR1c2VyX2VtYWlsOiBTdHJpbmcKCQkkdmVyYmF0aW06IFN0cmluZyEKCQkkdGltZXN0YW1wOiBUaW1lc3RhbXAhCgkpIHsKCQlhZGRTZXNzaW9uRmVlZGJhY2soCgkJCXNlc3Npb25fc2VjdXJlX2lkOiAkc2Vzc2lvbl9zZWN1cmVfaWQKCQkJdXNlcl9uYW1lOiAkdXNlcl9uYW1lCgkJCXVzZXJfZW1haWw6ICR1c2VyX2VtYWlsCgkJCXZlcmJhdGltOiAkdmVyYmF0aW0KCQkJdGltZXN0YW1wOiAkdGltZXN0YW1wCgkJKQoJfQpgLGZyPUpgCgltdXRhdGlvbiBpbml0aWFsaXplU2Vzc2lvbigKCQkkc2Vzc2lvbl9zZWN1cmVfaWQ6IFN0cmluZyEKCQkkc2Vzc2lvbl9rZXk6IFN0cmluZwoJCSRvcmdhbml6YXRpb25fdmVyYm9zZV9pZDogU3RyaW5nIQoJCSRlbmFibGVfc3RyaWN0X3ByaXZhY3k6IEJvb2xlYW4hCgkJJHByaXZhY3lfc2V0dGluZzogU3RyaW5nIQoJCSRlbmFibGVfcmVjb3JkaW5nX25ldHdvcmtfY29udGVudHM6IEJvb2xlYW4hCgkJJGNsaWVudFZlcnNpb246IFN0cmluZyEKCQkkZmlyc3Rsb2FkVmVyc2lvbjogU3RyaW5nIQoJCSRjbGllbnRDb25maWc6IFN0cmluZyEKCQkkZW52aXJvbm1lbnQ6IFN0cmluZyEKCQkkaWQ6IFN0cmluZyEKCQkkYXBwVmVyc2lvbjogU3RyaW5nCgkJJHNlcnZpY2VOYW1lOiBTdHJpbmchCgkJJGNsaWVudF9pZDogU3RyaW5nIQoJCSRuZXR3b3JrX3JlY29yZGluZ19kb21haW5zOiBbU3RyaW5nIV0KCQkkZGlzYWJsZV9zZXNzaW9uX3JlY29yZGluZzogQm9vbGVhbgoJKSB7CgkJaW5pdGlhbGl6ZVNlc3Npb24oCgkJCXNlc3Npb25fc2VjdXJlX2lkOiAkc2Vzc2lvbl9zZWN1cmVfaWQKCQkJc2Vzc2lvbl9rZXk6ICRzZXNzaW9uX2tleQoJCQlvcmdhbml6YXRpb25fdmVyYm9zZV9pZDogJG9yZ2FuaXphdGlvbl92ZXJib3NlX2lkCgkJCWVuYWJsZV9zdHJpY3RfcHJpdmFjeTogJGVuYWJsZV9zdHJpY3RfcHJpdmFjeQoJCQllbmFibGVfcmVjb3JkaW5nX25ldHdvcmtfY29udGVudHM6ICRlbmFibGVfcmVjb3JkaW5nX25ldHdvcmtfY29udGVudHMKCQkJY2xpZW50VmVyc2lvbjogJGNsaWVudFZlcnNpb24KCQkJZmlyc3Rsb2FkVmVyc2lvbjogJGZpcnN0bG9hZFZlcnNpb24KCQkJY2xpZW50Q29uZmlnOiAkY2xpZW50Q29uZmlnCgkJCWVudmlyb25tZW50OiAkZW52aXJvbm1lbnQKCQkJYXBwVmVyc2lvbjogJGFwcFZlcnNpb24KCQkJc2VydmljZU5hbWU6ICRzZXJ2aWNlTmFtZQoJCQlmaW5nZXJwcmludDogJGlkCgkJCWNsaWVudF9pZDogJGNsaWVudF9pZAoJCQluZXR3b3JrX3JlY29yZGluZ19kb21haW5zOiAkbmV0d29ya19yZWNvcmRpbmdfZG9tYWlucwoJCQlkaXNhYmxlX3Nlc3Npb25fcmVjb3JkaW5nOiAkZGlzYWJsZV9zZXNzaW9uX3JlY29yZGluZwoJCQlwcml2YWN5X3NldHRpbmc6ICRwcml2YWN5X3NldHRpbmcKCQkpIHsKCQkJc2VjdXJlX2lkCgkJCXByb2plY3RfaWQKCQkJc2FtcGxpbmcgewoJCQkJc3BhbnMgewoJCQkJCW5hbWUgewoJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJfQoJCQkJCWF0dHJpYnV0ZXMgewoJCQkJCQlrZXkgewoJCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCQl9CgkJCQkJCWF0dHJpYnV0ZSB7CgkJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJCX0KCQkJCQl9CgkJCQkJZXZlbnRzIHsKCQkJCQkJbmFtZSB7CgkJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJCX0KCQkJCQkJYXR0cmlidXRlcyB7CgkJCQkJCQlrZXkgewoJCQkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQkJCX0KCQkJCQkJCWF0dHJpYnV0ZSB7CgkJCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJCXNhbXBsaW5nUmF0aW8KCQkJCX0KCQkJCWxvZ3MgewoJCQkJCW1lc3NhZ2UgewoJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJfQoJCQkJCXNldmVyaXR5VGV4dCB7CgkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQl9CgkJCQkJYXR0cmlidXRlcyB7CgkJCQkJCWtleSB7CgkJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJCX0KCQkJCQkJYXR0cmlidXRlIHsKCQkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQkJfQoJCQkJCX0KCQkJCQlzYW1wbGluZ1JhdGlvCgkJCQl9CgkJCX0KCQl9Cgl9Cgkke0x0fQpgLGhyPUpgCglxdWVyeSBJZ25vcmUoJGlkOiBJRCEpIHsKCQlpZ25vcmUoaWQ6ICRpZCkKCX0KYCxkcj1KYAoJcXVlcnkgR2V0U2FtcGxpbmdDb25maWcoJG9yZ2FuaXphdGlvbl92ZXJib3NlX2lkOiBTdHJpbmchKSB7CgkJc2FtcGxpbmcob3JnYW5pemF0aW9uX3ZlcmJvc2VfaWQ6ICRvcmdhbml6YXRpb25fdmVyYm9zZV9pZCkgewoJCQlzcGFucyB7CgkJCQluYW1lIHsKCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQl9CgkJCQlhdHRyaWJ1dGVzIHsKCQkJCQlrZXkgewoJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJfQoJCQkJCWF0dHJpYnV0ZSB7CgkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQl9CgkJCQl9CgkJCQlldmVudHMgewoJCQkJCW5hbWUgewoJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJfQoJCQkJCWF0dHJpYnV0ZXMgewoJCQkJCQlrZXkgewoJCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCQl9CgkJCQkJCWF0dHJpYnV0ZSB7CgkJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCQlzYW1wbGluZ1JhdGlvCgkJCX0KCQkJbG9ncyB7CgkJCQltZXNzYWdlIHsKCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQl9CgkJCQlzZXZlcml0eVRleHQgewoJCQkJCS4uLk1hdGNoUGFydHMKCQkJCX0KCQkJCWF0dHJpYnV0ZXMgewoJCQkJCWtleSB7CgkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQl9CgkJCQkJYXR0cmlidXRlIHsKCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCX0KCQkJCX0KCQkJCXNhbXBsaW5nUmF0aW8KCQkJfQoJCX0KCX0KCSR7THR9CmAscHI9KGUsdCxuLGkpPT5lKCk7ZnVuY3Rpb24gbXIoZSx0PXByKXtyZXR1cm57UHVzaFBheWxvYWQobixpKXtyZXR1cm4gdChyPT5lLnJlcXVlc3Qoc3IsbixEKEQoe30saSkscikpLCJQdXNoUGF5bG9hZCIsIm11dGF0aW9uIixuKX0sUHVzaFNlc3Npb25FdmVudHMobixpKXtyZXR1cm4gdChyPT5lLnJlcXVlc3Qob3IsbixEKEQoe30saSkscikpLCJQdXNoU2Vzc2lvbkV2ZW50cyIsIm11dGF0aW9uIixuKX0saWRlbnRpZnlTZXNzaW9uKG4saSl7cmV0dXJuIHQocj0+ZS5yZXF1ZXN0KGFyLG4sRChEKHt9LGkpLHIpKSwiaWRlbnRpZnlTZXNzaW9uIiwibXV0YXRpb24iLG4pfSxhZGRTZXNzaW9uUHJvcGVydGllcyhuLGkpe3JldHVybiB0KHI9PmUucmVxdWVzdChjcixuLEQoRCh7fSxpKSxyKSksImFkZFNlc3Npb25Qcm9wZXJ0aWVzIiwibXV0YXRpb24iLG4pfSxwdXNoTWV0cmljcyhuLGkpe3JldHVybiB0KHI9PmUucmVxdWVzdCh1cixuLEQoRCh7fSxpKSxyKSksInB1c2hNZXRyaWNzIiwibXV0YXRpb24iLG4pfSxhZGRTZXNzaW9uRmVlZGJhY2sobixpKXtyZXR1cm4gdChyPT5lLnJlcXVlc3QobHIsbixEKEQoe30saSkscikpLCJhZGRTZXNzaW9uRmVlZGJhY2siLCJtdXRhdGlvbiIsbil9LGluaXRpYWxpemVTZXNzaW9uKG4saSl7cmV0dXJuIHQocj0+ZS5yZXF1ZXN0KGZyLG4sRChEKHt9LGkpLHIpKSwiaW5pdGlhbGl6ZVNlc3Npb24iLCJtdXRhdGlvbiIsbil9LElnbm9yZShuLGkpe3JldHVybiB0KHI9PmUucmVxdWVzdChocixuLEQoRCh7fSxpKSxyKSksIklnbm9yZSIsInF1ZXJ5IixuKX0sR2V0U2FtcGxpbmdDb25maWcobixpKXtyZXR1cm4gdChyPT5lLnJlcXVlc3QoZHIsbixEKEQoe30saSkscikpLCJHZXRTYW1wbGluZ0NvbmZpZyIsInF1ZXJ5IixuKX19fXZhciBXPVVpbnQ4QXJyYXksWj1VaW50MTZBcnJheSxldD1JbnQzMkFycmF5LHR0PW5ldyBXKFswLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwyLDIsMiwyLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1LDAsMCwwLDBdKSxudD1uZXcgVyhbMCwwLDAsMCwxLDEsMiwyLDMsMyw0LDQsNSw1LDYsNiw3LDcsOCw4LDksOSwxMCwxMCwxMSwxMSwxMiwxMiwxMywxMywwLDBdKSxGdD1uZXcgVyhbMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0pLE10PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPW5ldyBaKDMxKSxpPTA7aTwzMTsrK2kpbltpXT10Kz0xPDxlW2ktMV07Zm9yKHZhciByPW5ldyBldChuWzMwXSksaT0xO2k8MzA7KytpKWZvcih2YXIgcz1uW2ldO3M8bltpKzFdOysrcylyW3NdPXMtbltpXTw8NXxpO3JldHVybntiOm4scn19LCR0PU10KHR0LDIpLHlyPSR0LmIscnQ9JHQucjt5clsyOF09MjU4LHJ0WzI1OF09Mjg7Zm9yKHZhciBncj1NdChudCwwKSxCdD1nci5yLGl0PW5ldyBaKDMyNzY4KSxMPTA7TDwzMjc2ODsrK0wpe3ZhciBhZT0oTCY0MzY5MCk+PjF8KEwmMjE4NDUpPDwxO2FlPShhZSY1MjQyOCk+PjJ8KGFlJjEzMTA3KTw8MixhZT0oYWUmNjE2ODApPj40fChhZSYzODU1KTw8NCxpdFtMXT0oKGFlJjY1MjgwKT4+OHwoYWUmMjU1KTw8OCk+PjF9Zm9yKHZhciBOZT1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciBpPWUubGVuZ3RoLHI9MCxzPW5ldyBaKHQpO3I8aTsrK3IpZVtyXSYmKytzW2Vbcl0tMV07dmFyIG89bmV3IFoodCk7Zm9yKHI9MTtyPHQ7KytyKW9bcl09b1tyLTFdK3Nbci0xXTw8MTt2YXIgYztpZihuKXtjPW5ldyBaKDE8PHQpO3ZhciBmPTE1LXQ7Zm9yKHI9MDtyPGk7KytyKWlmKGVbcl0pZm9yKHZhciBkPXI8PDR8ZVtyXSx1PXQtZVtyXSx5PW9bZVtyXS0xXSsrPDx1LHY9eXwoMTw8dSktMTt5PD12OysreSljW2l0W3ldPj5mXT1kfWVsc2UgZm9yKGM9bmV3IFooaSkscj0wO3I8aTsrK3IpZVtyXSYmKGNbcl09aXRbb1tlW3JdLTFdKytdPj4xNS1lW3JdKTtyZXR1cm4gY30sbGU9bmV3IFcoMjg4KSxMPTA7TDwxNDQ7KytMKWxlW0xdPTg7Zm9yKHZhciBMPTE0NDtMPDI1NjsrK0wpbGVbTF09OTtmb3IodmFyIEw9MjU2O0w8MjgwOysrTClsZVtMXT03O2Zvcih2YXIgTD0yODA7TDwyODg7KytMKWxlW0xdPTg7Zm9yKHZhciBGZT1uZXcgVygzMiksTD0wO0w8MzI7KytMKUZlW0xdPTU7dmFyIHZyPU5lKGxlLDksMCksRXI9TmUoRmUsNSwwKSxVdD1mdW5jdGlvbihlKXtyZXR1cm4oZSs3KS84fDB9LFZ0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4obj09bnVsbHx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKSxuZXcgVyhlLnN1YmFycmF5KHQsbikpfSxpZT1mdW5jdGlvbihlLHQsbil7bjw8PXQmNzt2YXIgaT10Lzh8MDtlW2ldfD1uLGVbaSsxXXw9bj4+OH0seGU9ZnVuY3Rpb24oZSx0LG4pe248PD10Jjc7dmFyIGk9dC84fDA7ZVtpXXw9bixlW2krMV18PW4+PjgsZVtpKzJdfD1uPj4xNn0sc3Q9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W10saT0wO2k8ZS5sZW5ndGg7KytpKWVbaV0mJm4ucHVzaCh7czppLGY6ZVtpXX0pO3ZhciByPW4ubGVuZ3RoLHM9bi5zbGljZSgpO2lmKCFyKXJldHVybnt0Onp0LGw6MH07aWYocj09MSl7dmFyIG89bmV3IFcoblswXS5zKzEpO3JldHVybiBvW25bMF0uc109MSx7dDpvLGw6MX19bi5zb3J0KGZ1bmN0aW9uKCQscSl7cmV0dXJuICQuZi1xLmZ9KSxuLnB1c2goe3M6LTEsZjoyNTAwMX0pO3ZhciBjPW5bMF0sZj1uWzFdLGQ9MCx1PTEseT0yO2ZvcihuWzBdPXtzOi0xLGY6Yy5mK2YuZixsOmMscjpmfTt1IT1yLTE7KWM9bltuW2RdLmY8blt5XS5mP2QrKzp5KytdLGY9bltkIT11JiZuW2RdLmY8blt5XS5mP2QrKzp5KytdLG5bdSsrXT17czotMSxmOmMuZitmLmYsbDpjLHI6Zn07Zm9yKHZhciB2PXNbMF0ucyxpPTE7aTxyOysraSlzW2ldLnM+diYmKHY9c1tpXS5zKTt2YXIgYj1uZXcgWih2KzEpLG09b3Qoblt1LTFdLGIsMCk7aWYobT50KXt2YXIgaT0wLE49MCxnPW0tdCxFPTE8PGc7Zm9yKHMuc29ydChmdW5jdGlvbihxLEIpe3JldHVybiBiW0Iuc10tYltxLnNdfHxxLmYtQi5mfSk7aTxyOysraSl7dmFyIEM9c1tpXS5zO2lmKGJbQ10+dClOKz1FLSgxPDxtLWJbQ10pLGJbQ109dDtlbHNlIGJyZWFrfWZvcihOPj49ZztOPjA7KXt2YXIgdz1zW2ldLnM7Ylt3XTx0P04tPTE8PHQtYlt3XSsrLTE6KytpfWZvcig7aT49MCYmTjstLWkpe3ZhciBSPXNbaV0ucztiW1JdPT10JiYoLS1iW1JdLCsrTil9bT10fXJldHVybnt0Om5ldyBXKGIpLGw6bX19LG90PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZS5zPT0tMT9NYXRoLm1heChvdChlLmwsdCxuKzEpLG90KGUucix0LG4rMSkpOnRbZS5zXT1ufSxqdD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5sZW5ndGg7dCYmIWVbLS10XTspO2Zvcih2YXIgbj1uZXcgWigrK3QpLGk9MCxyPWVbMF0scz0xLG89ZnVuY3Rpb24oZil7bltpKytdPWZ9LGM9MTtjPD10OysrYylpZihlW2NdPT1yJiZjIT10KSsrcztlbHNle2lmKCFyJiZzPjIpe2Zvcig7cz4xMzg7cy09MTM4KW8oMzI3NTQpO3M+MiYmKG8ocz4xMD9zLTExPDw1fDI4NjkwOnMtMzw8NXwxMjMwNSkscz0wKX1lbHNlIGlmKHM+Myl7Zm9yKG8ociksLS1zO3M+NjtzLT02KW8oODMwNCk7cz4yJiYobyhzLTM8PDV8ODIwOCkscz0wKX1mb3IoO3MtLTspbyhyKTtzPTEscj1lW2NdfXJldHVybntjOm4uc3ViYXJyYXkoMCxpKSxuOnR9fSxBZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLGk9MDtpPHQubGVuZ3RoOysraSluKz1lW2ldKnRbaV07cmV0dXJuIG59LHF0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uLmxlbmd0aCxyPVV0KHQrMik7ZVtyXT1pJjI1NSxlW3IrMV09aT4+OCxlW3IrMl09ZVtyXV4yNTUsZVtyKzNdPWVbcisxXV4yNTU7Zm9yKHZhciBzPTA7czxpOysrcyllW3Ircys0XT1uW3NdO3JldHVybihyKzQraSkqOH0sR3Q9ZnVuY3Rpb24oZSx0LG4saSxyLHMsbyxjLGYsZCx1KXtpZSh0LHUrKyxuKSwrK3JbMjU2XTtmb3IodmFyIHk9c3QociwxNSksdj15LnQsYj15LmwsbT1zdChzLDE1KSxOPW0udCxnPW0ubCxFPWp0KHYpLEM9RS5jLHc9RS5uLFI9anQoTiksJD1SLmMscT1SLm4sQj1uZXcgWigxOSksST0wO0k8Qy5sZW5ndGg7KytJKSsrQltDW0ldJjMxXTtmb3IodmFyIEk9MDtJPCQubGVuZ3RoOysrSSkrK0JbJFtJXSYzMV07Zm9yKHZhciBTPXN0KEIsNyksaj1TLnQsVT1TLmwsej0xOTt6PjQmJiFqW0Z0W3otMV1dOy0teik7dmFyIEs9ZCs1PDwzLGE9QWUocixsZSkrQWUocyxGZSkrbyxoPUFlKHIsdikrQWUocyxOKStvKzE0KzMqeitBZShCLGopKzIqQlsxNl0rMypCWzE3XSs3KkJbMThdO2lmKGY+PTAmJks8PWEmJks8PWgpcmV0dXJuIHF0KHQsdSxlLnN1YmFycmF5KGYsZitkKSk7dmFyIF8sQSxrLHg7aWYoaWUodCx1LDErKGg8YSkpLHUrPTIsaDxhKXtfPU5lKHYsYiwwKSxBPXYsaz1OZShOLGcsMCkseD1OO3ZhciBjZT1OZShqLFUsMCk7aWUodCx1LHctMjU3KSxpZSh0LHUrNSxxLTEpLGllKHQsdSsxMCx6LTQpLHUrPTE0O2Zvcih2YXIgST0wO0k8ejsrK0kpaWUodCx1KzMqSSxqW0Z0W0ldXSk7dSs9Myp6O2Zvcih2YXIgSD1bQywkXSxzZT0wO3NlPDI7KytzZSlmb3IodmFyIHllPUhbc2VdLEk9MDtJPHllLmxlbmd0aDsrK0kpe3ZhciBuZT15ZVtJXSYzMTtpZSh0LHUsY2VbbmVdKSx1Kz1qW25lXSxuZT4xNSYmKGllKHQsdSx5ZVtJXT4+NSYxMjcpLHUrPXllW0ldPj4xMil9fWVsc2UgXz12cixBPWxlLGs9RXIseD1GZTtmb3IodmFyIEk9MDtJPGM7KytJKXt2YXIgWT1pW0ldO2lmKFk+MjU1KXt2YXIgbmU9WT4+MTgmMzE7eGUodCx1LF9bbmUrMjU3XSksdSs9QVtuZSsyNTddLG5lPjcmJihpZSh0LHUsWT4+MjMmMzEpLHUrPXR0W25lXSk7dmFyIGdlPVkmMzE7eGUodCx1LGtbZ2VdKSx1Kz14W2dlXSxnZT4zJiYoeGUodCx1LFk+PjUmODE5MSksdSs9bnRbZ2VdKX1lbHNlIHhlKHQsdSxfW1ldKSx1Kz1BW1ldfXJldHVybiB4ZSh0LHUsX1syNTZdKSx1K0FbMjU2XX0sX3I9bmV3IGV0KFs2NTU0MCwxMzEwODAsMTMxMDg4LDEzMTEwNCwyNjIxNzYsMTA0ODcwNCwxMDQ4ODMyLDIxMTQ1NjAsMjExNzYzMl0pLHp0PW5ldyBXKDApLFRyPWZ1bmN0aW9uKGUsdCxuLGkscixzKXt2YXIgbz1zLnp8fGUubGVuZ3RoLGM9bmV3IFcoaStvKzUqKDErTWF0aC5jZWlsKG8vN2UzKSkrciksZj1jLnN1YmFycmF5KGksYy5sZW5ndGgtciksZD1zLmwsdT0ocy5yfHwwKSY3O2lmKHQpe3UmJihmWzBdPXMucj4+Myk7Zm9yKHZhciB5PV9yW3QtMV0sdj15Pj4xMyxiPXkmODE5MSxtPSgxPDxuKS0xLE49cy5wfHxuZXcgWigzMjc2OCksZz1zLmh8fG5ldyBaKG0rMSksRT1NYXRoLmNlaWwobi8zKSxDPTIqRSx3PWZ1bmN0aW9uKGx0KXtyZXR1cm4oZVtsdF1eZVtsdCsxXTw8RV5lW2x0KzJdPDxDKSZtfSxSPW5ldyBldCgyNWUzKSwkPW5ldyBaKDI4OCkscT1uZXcgWigzMiksQj0wLEk9MCxTPXMuaXx8MCxqPTAsVT1zLnd8fDAsej0wO1MrMjxvOysrUyl7dmFyIEs9dyhTKSxhPVMmMzI3NjcsaD1nW0tdO2lmKE5bYV09aCxnW0tdPWEsVTw9Uyl7dmFyIF89by1TO2lmKChCPjdlM3x8aj4yNDU3NikmJihfPjQyM3x8IWQpKXt1PUd0KGUsZiwwLFIsJCxxLEksaix6LFMteix1KSxqPUI9ST0wLHo9Uztmb3IodmFyIEE9MDtBPDI4NjsrK0EpJFtBXT0wO2Zvcih2YXIgQT0wO0E8MzA7KytBKXFbQV09MH12YXIgaz0yLHg9MCxjZT1iLEg9YS1oJjMyNzY3O2lmKF8+MiYmSz09dyhTLUgpKWZvcih2YXIgc2U9TWF0aC5taW4odixfKS0xLHllPU1hdGgubWluKDMyNzY3LFMpLG5lPU1hdGgubWluKDI1OCxfKTtIPD15ZSYmLS1jZSYmYSE9aDspe2lmKGVbUytrXT09ZVtTK2stSF0pe2Zvcih2YXIgWT0wO1k8bmUmJmVbUytZXT09ZVtTK1ktSF07KytZKTtpZihZPmspe2lmKGs9WSx4PUgsWT5zZSlicmVhaztmb3IodmFyIGdlPU1hdGgubWluKEgsWS0yKSxXdD0wLEE9MDtBPGdlOysrQSl7dmFyIGN0PVMtSCtBJjMyNzY3LFVyPU5bY3RdLFp0PWN0LVVyJjMyNzY3O1p0Pld0JiYoV3Q9WnQsaD1jdCl9fX1hPWgsaD1OW2FdLEgrPWEtaCYzMjc2N31pZih4KXtSW2orK109MjY4NDM1NDU2fHJ0W2tdPDwxOHxCdFt4XTt2YXIgS3Q9cnRba10mMzEsZW49QnRbeF0mMzE7SSs9dHRbS3RdK250W2VuXSwrKyRbMjU3K0t0XSwrK3FbZW5dLFU9UytrLCsrQn1lbHNlIFJbaisrXT1lW1NdLCsrJFtlW1NdXX19Zm9yKFM9TWF0aC5tYXgoUyxVKTtTPG87KytTKVJbaisrXT1lW1NdLCsrJFtlW1NdXTt1PUd0KGUsZixkLFIsJCxxLEksaix6LFMteix1KSxkfHwocy5yPXUmN3xmW3UvOHwwXTw8Myx1LT03LHMuaD1nLHMucD1OLHMuaT1TLHMudz1VKX1lbHNle2Zvcih2YXIgUz1zLnd8fDA7UzxvK2Q7Uys9NjU1MzUpe3ZhciB1dD1TKzY1NTM1O3V0Pj1vJiYoZlt1Lzh8MF09ZCx1dD1vKSx1PXF0KGYsdSsxLGUuc3ViYXJyYXkoUyx1dCkpfXMuaT1vfXJldHVybiBWdChjLDAsaStVdCh1KStyKX0sYnI9ZnVuY3Rpb24oKXtmb3IodmFyIGU9bmV3IEludDMyQXJyYXkoMjU2KSx0PTA7dDwyNTY7Kyt0KXtmb3IodmFyIG49dCxpPTk7LS1pOyluPShuJjEmJi0zMDY2NzQ5MTIpXm4+Pj4xO2VbdF09bn1yZXR1cm4gZX0oKSxOcj1mdW5jdGlvbigpe3ZhciBlPS0xO3JldHVybntwOmZ1bmN0aW9uKHQpe2Zvcih2YXIgbj1lLGk9MDtpPHQubGVuZ3RoOysraSluPWJyW24mMjU1XnRbaV1dXm4+Pj44O2U9bn0sZDpmdW5jdGlvbigpe3JldHVybn5lfX19LHhyPWZ1bmN0aW9uKGUsdCxuLGkscil7aWYoIXImJihyPXtsOjF9LHQuZGljdGlvbmFyeSkpe3ZhciBzPXQuZGljdGlvbmFyeS5zdWJhcnJheSgtMzI3NjgpLG89bmV3IFcocy5sZW5ndGgrZS5sZW5ndGgpO28uc2V0KHMpLG8uc2V0KGUscy5sZW5ndGgpLGU9byxyLnc9cy5sZW5ndGh9cmV0dXJuIFRyKGUsdC5sZXZlbD09bnVsbD82OnQubGV2ZWwsdC5tZW09PW51bGw/ci5sP01hdGguY2VpbChNYXRoLm1heCg4LE1hdGgubWluKDEzLE1hdGgubG9nKGUubGVuZ3RoKSkpKjEuNSk6MjA6MTIrdC5tZW0sbixpLHIpfSxhdD1mdW5jdGlvbihlLHQsbil7Zm9yKDtuOysrdCllW3RdPW4sbj4+Pj04fSxBcj1mdW5jdGlvbihlLHQpe3ZhciBuPXQuZmlsZW5hbWU7aWYoZVswXT0zMSxlWzFdPTEzOSxlWzJdPTgsZVs4XT10LmxldmVsPDI/NDp0LmxldmVsPT05PzI6MCxlWzldPTMsdC5tdGltZSE9MCYmYXQoZSw0LE1hdGguZmxvb3IobmV3IERhdGUodC5tdGltZXx8RGF0ZS5ub3coKSkvMWUzKSksbil7ZVszXT04O2Zvcih2YXIgaT0wO2k8PW4ubGVuZ3RoOysraSllW2krMTBdPW4uY2hhckNvZGVBdChpKX19LElyPWZ1bmN0aW9uKGUpe3JldHVybiAxMCsoZS5maWxlbmFtZT9lLmZpbGVuYW1lLmxlbmd0aCsxOjApfTtmdW5jdGlvbiBTcihlLHQpe3R8fCh0PXt9KTt2YXIgbj1OcigpLGk9ZS5sZW5ndGg7bi5wKGUpO3ZhciByPXhyKGUsdCxJcih0KSw4KSxzPXIubGVuZ3RoO3JldHVybiBBcihyLHQpLGF0KHIscy04LG4uZCgpKSxhdChyLHMtNCxpKSxyfXZhciBIdD10eXBlb2YgVGV4dEVuY29kZXIhPSJ1bmRlZmluZWQiJiZuZXcgVGV4dEVuY29kZXIsT3I9dHlwZW9mIFRleHREZWNvZGVyIT0idW5kZWZpbmVkIiYmbmV3IFRleHREZWNvZGVyLHdyPTA7dHJ5e09yLmRlY29kZSh6dCx7c3RyZWFtOiEwfSksd3I9MX1jYXRjaChlKXt9ZnVuY3Rpb24gRHIoZSx0KXt2YXIgbjtpZihIdClyZXR1cm4gSHQuZW5jb2RlKGUpO2Zvcih2YXIgaT1lLmxlbmd0aCxyPW5ldyBXKGUubGVuZ3RoKyhlLmxlbmd0aD4+MSkpLHM9MCxvPWZ1bmN0aW9uKGQpe3JbcysrXT1kfSxuPTA7bjxpOysrbil7aWYocys1PnIubGVuZ3RoKXt2YXIgYz1uZXcgVyhzKzgrKGktbjw8MSkpO2Muc2V0KHIpLHI9Y312YXIgZj1lLmNoYXJDb2RlQXQobik7ZjwxMjh8fHQ/byhmKTpmPDIwNDg/KG8oMTkyfGY+PjYpLG8oMTI4fGYmNjMpKTpmPjU1Mjk1JiZmPDU3MzQ0PyhmPTY1NTM2KyhmJjEwNDc1NTIpfGUuY2hhckNvZGVBdCgrK24pJjEwMjMsbygyNDB8Zj4+MTgpLG8oMTI4fGY+PjEyJjYzKSxvKDEyOHxmPj42JjYzKSxvKDEyOHxmJjYzKSk6KG8oMjI0fGY+PjEyKSxvKDEyOHxmPj42JjYzKSxvKDEyOHxmJjYzKSl9cmV0dXJuIFZ0KHIsMCxzKX1mdW5jdGlvbiBDcihlKXtyZXR1cm4gUSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7Y29uc3QgdD1EcihKU09OLnN0cmluZ2lmeShlKSksbj1Tcih0KSxpPXlpZWxkIG5ldyBQcm9taXNlKHI9Pntjb25zdCBzPW5ldyBGaWxlUmVhZGVyO3Mub25sb2FkPSgpPT5yKHMucmVzdWx0KSxzLnJlYWRBc0RhdGFVUkwobmV3IEJsb2IoW25ldyBVaW50OEFycmF5KG4pXSkpfSk7cmV0dXJue2NvbXByZXNzZWRCYXNlNjQ6aS5zbGljZShpLmluZGV4T2YoIiwiKSsxKSxjb21wcmVzc2VkU2l6ZTpuLmxlbmd0aCxidWZmZXJMZW5ndGg6dC5sZW5ndGh9fSl9Y2xhc3Mga3J7Y29uc3RydWN0b3IodCxuKXtodCh0aGlzLCJkZWJ1ZyIpO2h0KHRoaXMsIm5hbWUiKTt0aGlzLmRlYnVnPXQsdGhpcy5uYW1lPW59bG9nKC4uLnQpe2lmKHRoaXMuZGVidWcpe2xldCBuPWBbJHtEYXRlLm5vdygpfV1gO3RoaXMubmFtZSYmKG4rPWAgLSAke3RoaXMubmFtZX1gKSxjb25zb2xlLmxvZy5hcHBseShjb25zb2xlLFtuLC4uLnRdKX19d2FybiguLi50KXtsZXQgbj1gWyR7RGF0ZS5ub3coKX1dYDt0aGlzLm5hbWUmJihuKz1gIC0gJHt0aGlzLm5hbWV9YCksY29uc29sZS53YXJuLmFwcGx5KGNvbnNvbGUsW24sLi4udF0pfX12YXIgWXQ9KGU9PihlLkJpbGxpbmdRdW90YUV4Y2VlZGVkPSJCaWxsaW5nUXVvdGFFeGNlZWRlZCIsZSkpKFl0fHx7fSk7Y29uc3QgUnI9MyxQcj0xZTMsTHI9NTAwLEZyPVtZdC5CaWxsaW5nUXVvdGFFeGNlZWRlZC50b1N0cmluZygpXSxNcj1lPT57dmFyIG47cmV0dXJuKChuPWUucmVzcG9uc2UuZXJyb3JzKT09bnVsbD92b2lkIDA6bi5maW5kKGk9PkZyLmluY2x1ZGVzKGkubWVzc2FnZSkpKT09PXZvaWQgMH0sJHI9KCk9Pntjb25zdCBlPSh0LG4saSxyLHM9MCk9PlEodGhpcyxudWxsLGZ1bmN0aW9uKigpe3RyeXtyZXR1cm4geWllbGQgdCgpfWNhdGNoKG8pe2lmKG8gaW5zdGFuY2VvZiBkZSYmIU1yKG8pKXRocm93IG87aWYoczxScilyZXR1cm4geWllbGQgbmV3IFByb21pc2UoYz0+c2V0VGltZW91dChjLFByK0xyKk1hdGgucG93KDIscykpKSx5aWVsZCBlKHQsbixpLHIscysxKTt0aHJvdyBjb25zb2xlLmVycm9yKGBoaWdobGlnaHQuaW86IGRhdGEgcmVxdWVzdCBmYWlsZWQgYWZ0ZXIgJHtzfSByZXRyaWVzYCksb319KTtyZXR1cm4gZX0sSnQ9NSxRdD0yZTMsQnI9WyJudW1iZXIiLCJzdHJpbmciLCJib29sZWFuIl07dmFyIHRlPShlPT4oZVtlLkluaXRpYWxpemU9MF09IkluaXRpYWxpemUiLGVbZS5Bc3luY0V2ZW50cz0xXT0iQXN5bmNFdmVudHMiLGVbZS5JZGVudGlmeT0yXT0iSWRlbnRpZnkiLGVbZS5Qcm9wZXJ0aWVzPTNdPSJQcm9wZXJ0aWVzIixlW2UuTWV0cmljcz00XT0iTWV0cmljcyIsZVtlLkZlZWRiYWNrPTVdPSJGZWVkYmFjayIsZVtlLkN1c3RvbUV2ZW50PTZdPSJDdXN0b21FdmVudCIsZVtlLlN0b3A9N109IlN0b3AiLGUpKSh0ZXx8e30pO2NvbnN0IE1lPXNlbGY7ZnVuY3Rpb24gWHQoZSx0KXtjb25zdCBuPXt9LGk9W10scj1bXTtmb3IoY29uc3RbcyxvXW9mIE9iamVjdC5lbnRyaWVzKGUpKXtpZihvPT1udWxsKWNvbnRpbnVlO0JyLmluY2x1ZGVzKHR5cGVvZiBvKXx8aS5wdXNoKHtbc106b30pO2xldCBjO3R5cGVvZiBvPT0ic3RyaW5nIj9jPW86Yz1tZShvKSxjLmxlbmd0aD5RdCYmKHIucHVzaCh7W3NdOm99KSxjPWMuc3Vic3RyaW5nKDAsUXQpKSxuW3NdPWN9cmV0dXJuIHQhPT0ic2Vzc2lvbiImJihpLmxlbmd0aD4wJiZjb25zb2xlLndhcm4oYEhpZ2hsaWdodCB3YXMgcGFzc2VkIG9uZSBvciBtb3JlICR7dH0gcHJvcGVydGllcyBub3Qgb2YgdHlwZSBzdHJpbmcsIG51bWJlciwgb3IgYm9vbGVhbi5gLGkpLHIubGVuZ3RoPjAmJmNvbnNvbGUud2FybihgSGlnaGxpZ2h0IHdhcyBwYXNzZWQgb25lIG9yIG1vcmUgJHt0fSBwcm9wZXJ0aWVzIGV4Y2VlZGluZyAyMDAwIGNoYXJhY3RlcnMsIHdoaWNoIHdpbGwgYmUgdHJ1bmNhdGVkLmAscikpLG59e2xldCBlLHQsbixpPTAscj0wLHM9ITEsbz0wLGM9bmV3IGtyKCExLCJbd29ya2VyXSIpO2NvbnN0IGY9W10sZD0oKT0+byE9PTAmJmk8SnQmJiEhKG4hPW51bGwmJm4ubGVuZ3RoKSx1PShnLEUpPT57TWUucG9zdE1lc3NhZ2Uoe3Jlc3BvbnNlOnt0eXBlOnRlLkN1c3RvbUV2ZW50LHRhZzpnLHBheWxvYWQ6RX19KX0seT1nPT5RKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtjb25zdHtpZDpFLGV2ZW50czpDLG1lc3NhZ2VzOncsZXJyb3JzOlIscmVzb3VyY2VzU3RyaW5nOiQsd2ViU29ja2V0RXZlbnRzU3RyaW5nOnEsaGFzU2Vzc2lvblVubG9hZGVkOkIsaGlnaGxpZ2h0TG9nczpJfT1nLFM9bWUoe21lc3NhZ2VzOnd9KTtsZXQgaj17c2Vzc2lvbl9zZWN1cmVfaWQ6bixwYXlsb2FkX2lkOkUudG9TdHJpbmcoKSxldmVudHM6e2V2ZW50czpDfSxtZXNzYWdlczpTLHJlc291cmNlczokLHdlYl9zb2NrZXRfZXZlbnRzOnEsZXJyb3JzOlIsaXNfYmVhY29uOiExLGhhc19zZXNzaW9uX3VubG9hZGVkOkJ9O0kmJihqLmhpZ2hsaWdodF9sb2dzPUkpO2NvbnN0e2NvbXByZXNzZWRCYXNlNjQ6VSxidWZmZXJMZW5ndGg6eixjb21wcmVzc2VkU2l6ZTpLfT15aWVsZCBDcihqKSxhPXt0eXBlOnRlLkFzeW5jRXZlbnRzLGlkOkUsZXZlbnRzU2l6ZTp6LGNvbXByZXNzZWRTaXplOlUubGVuZ3RofTtjLmxvZyhgUHVzaGluZyBwYXlsb2FkOiAke0pTT04uc3RyaW5naWZ5KHtzZXNzaW9uU2VjdXJlSUQ6bixpZDpFLGZpcnN0U0lEOk1hdGgubWluKC4uLmouZXZlbnRzLmV2ZW50cy5tYXAoeD0+eD09bnVsbD92b2lkIDA6eC5fc2lkKS5maWx0ZXIoeD0+ISF4KSksZXZlbnRzTGVuZ3RoOmouZXZlbnRzLmV2ZW50cy5sZW5ndGgsbWVzc2FnZXNMZW5ndGg6dy5sZW5ndGgscmVzb3VyY2VzTGVuZ3RoOiQubGVuZ3RoLHdlYlNvY2tldExlbmd0aDpxLmxlbmd0aCxlcnJvcnNMZW5ndGg6Ui5sZW5ndGgsYnVmTGVuZ3RoOnosY29tcHJlc3NlZExlbmd0aDpLLGNvbXByZXNzZWRCYXNlNjRMZW5ndGg6VS5sZW5ndGh9LHZvaWQgMCwyKX1gKTtjb25zdCBoPWUuUHVzaFNlc3Npb25FdmVudHMoe3Nlc3Npb25fc2VjdXJlX2lkOm4scGF5bG9hZF9pZDpFLnRvU3RyaW5nKCksZGF0YTpVfSk7bGV0IF89UHJvbWlzZS5yZXNvbHZlKCk7Zi5sZW5ndGgmJihfPWUucHVzaE1ldHJpY3Moe21ldHJpY3M6Zn0pLGYuc3BsaWNlKDApKTtsZXQgQT1wZXJmb3JtYW5jZS5ub3coKTtjb25zdCBrPXNldEludGVydmFsKCgpPT57QSYmcGVyZm9ybWFuY2Uubm93KCktQT5rdCYmKGNvbnNvbGUud2FybihgVXBsb2FkaW5nIHB1c2hQYXlsb2FkIHRvb2sgdG9vIGxvbmcsIGZhaWx1cmUgbnVtYmVyICMke3J9LmApLHIrPTEsY2xlYXJJbnRlcnZhbChrKSxyPj1KdCYmKGNvbnNvbGUud2FybigiVXBsb2FkaW5nIHB1c2hQYXlsb2FkIHRvb2sgdG9vIGxvbmcsIHN0b3BwaW5nIHJlY29yZGluZyB0byBhdm9pZCBPT00uIiksTWUucG9zdE1lc3NhZ2Uoe3Jlc3BvbnNlOnt0eXBlOnRlLlN0b3AscmVxdWVzdFN0YXJ0OkEsYXN5bmNFdmVudHNSZXNwb25zZTphfX0pLGIoe3R5cGU6dGUuUHJvcGVydGllcyxwcm9wZXJ0aWVzT2JqZWN0OntzdG9wUmVhc29uOiJQdXNoIFBheWxvYWQgVGltZW91dCJ9LHByb3BlcnR5VHlwZTp7dHlwZToidHJhY2sifX0pKSl9LDEwMCk7dHJ5e3lpZWxkIFByb21pc2UuYWxsKFtoLF9dKSxyJiZwZXJmb3JtYW5jZS5ub3coKS1BPD1rdCYmKGNvbnNvbGUud2FybihgcHVzaFBheWxvYWQgc3VjY2VlZGVkIGFmdGVyICMke3J9IGZhaWx1cmVzLCByZXNldHRpbmcgc3RvcCBzd2l0Y2guYCkscj0wKX1maW5hbGx5e0E9MCxjbGVhckludGVydmFsKGspfU1lLnBvc3RNZXNzYWdlKHtyZXNwb25zZTphfSl9KSx2PWc9PlEodGhpcyxudWxsLGZ1bmN0aW9uKigpe2NvbnN0e3VzZXJPYmplY3Q6RSx1c2VySWRlbnRpZmllcjpDLHNvdXJjZTp3fT1nO3c9PT0ic2VnbWVudCI/dSgiU2VnbWVudCBJZGVudGlmeSIsbWUoRCh7dXNlcklkZW50aWZpZXI6Q30sRSkpKTp1KCJJZGVudGlmeSIsbWUoRCh7dXNlcklkZW50aWZpZXI6Q30sRSkpKSx5aWVsZCBlLmlkZW50aWZ5U2Vzc2lvbih7c2Vzc2lvbl9zZWN1cmVfaWQ6bix1c2VyX2lkZW50aWZpZXI6Qyx1c2VyX29iamVjdDpYdChFLCJ1c2VyIil9KTtjb25zdCBSPXc9PT0ic2VnbWVudCI/dzoiZGVmYXVsdCI7Yy5sb2coYElkZW50aWZ5ICgke0N9LCBzb3VyY2U6ICR7Un0pIHcvIG9iajogJHttZShFKX0gQCAke3R9YCl9KSxiPWc9PlEodGhpcyxudWxsLGZ1bmN0aW9uKigpe2NvbnN0e3Byb3BlcnRpZXNPYmplY3Q6RSxwcm9wZXJ0eVR5cGU6Q309ZztsZXQgdzsoQz09bnVsbD92b2lkIDA6Qy50eXBlKT09PSJzZXNzaW9uIj8odz0iU2Vzc2lvbiIseWllbGQgZS5hZGRTZXNzaW9uUHJvcGVydGllcyh7c2Vzc2lvbl9zZWN1cmVfaWQ6bixwcm9wZXJ0aWVzX29iamVjdDpYdChFLCJzZXNzaW9uIil9KSk6KEM9PW51bGw/dm9pZCAwOkMuc291cmNlKT09PSJzZWdtZW50Ij93PSJTZWdtZW50Ijp3PSJUcmFjayIsdyE9PSJTZXNzaW9uIiYmdSh3LG1lKEUpKSxjLmxvZyhgQWRkaW5nICR7d30gUHJvcGVydGllcyB0byBzZXNzaW9uICgke259KSB3LyBvYmo6ICR7SlNPTi5zdHJpbmdpZnkoRSl9IEAgJHt0fWApfSksbT1nPT5RKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtmLnB1c2goLi4uZy5tZXRyaWNzLm1hcChFPT4oe25hbWU6RS5uYW1lLHZhbHVlOkUudmFsdWUsc2Vzc2lvbl9zZWN1cmVfaWQ6bixjYXRlZ29yeTpFLmNhdGVnb3J5LGdyb3VwOkUuZ3JvdXAsdGltZXN0YW1wOkUudGltZXN0YW1wLnRvSVNPU3RyaW5nKCksdGFnczpFLnRhZ3N9KSkpfSksTj1nPT5RKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtjb25zdHt0aW1lc3RhbXA6RSx2ZXJiYXRpbTpDLHVzZXJFbWFpbDp3LHVzZXJOYW1lOlJ9PWc7eWllbGQgZS5hZGRTZXNzaW9uRmVlZGJhY2soe3Nlc3Npb25fc2VjdXJlX2lkOm4sdGltZXN0YW1wOkUsdmVyYmF0aW06Qyx1c2VyX2VtYWlsOncsdXNlcl9uYW1lOlJ9KX0pO01lLm9ubWVzc2FnZT1mdW5jdGlvbihnKXtyZXR1cm4gUSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7aWYoZy5kYXRhLm1lc3NhZ2UudHlwZT09PXRlLkluaXRpYWxpemUpe3Q9Zy5kYXRhLm1lc3NhZ2UuYmFja2VuZCxuPWcuZGF0YS5tZXNzYWdlLnNlc3Npb25TZWN1cmVJRCxzPWcuZGF0YS5tZXNzYWdlLmRlYnVnLG89Zy5kYXRhLm1lc3NhZ2UucmVjb3JkaW5nU3RhcnRUaW1lLGMuZGVidWc9cyxlPW1yKG5ldyBZbih0LHtoZWFkZXJzOnt9fSksJHIoKSk7cmV0dXJufWlmKGQoKSl0cnl7Zy5kYXRhLm1lc3NhZ2UudHlwZT09PXRlLkFzeW5jRXZlbnRzP3lpZWxkIHkoZy5kYXRhLm1lc3NhZ2UpOmcuZGF0YS5tZXNzYWdlLnR5cGU9PT10ZS5JZGVudGlmeT95aWVsZCB2KGcuZGF0YS5tZXNzYWdlKTpnLmRhdGEubWVzc2FnZS50eXBlPT09dGUuUHJvcGVydGllcz95aWVsZCBiKGcuZGF0YS5tZXNzYWdlKTpnLmRhdGEubWVzc2FnZS50eXBlPT09dGUuTWV0cmljcz95aWVsZCBtKGcuZGF0YS5tZXNzYWdlKTpnLmRhdGEubWVzc2FnZS50eXBlPT09dGUuRmVlZGJhY2smJih5aWVsZCBOKGcuZGF0YS5tZXNzYWdlKSksaT0wfWNhdGNoKEUpe3MmJmNvbnNvbGUuZXJyb3IoRSksaSs9MX19KX19fSkoKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGlnaGxpZ2h0LWNsaWVudC13b3JrZXItQkRSd0N1OU8uanMubWFwCg==", Qg = (e) => Uint8Array.from(atob(e), (t) => t.charCodeAt(0)), kl = typeof self < "u" && self.Blob && new Blob([Qg(uu)], { type: "text/javascript;charset=utf-8" });
|
|
13510
|
+
const uu = "dmFyIFZyPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxqcj1PYmplY3QuZGVmaW5lUHJvcGVydGllczt2YXIgcXI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7dmFyICRlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyIHRuPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbm49T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgZnQ9KCQsRixCKT0+RiBpbiAkP1ZyKCQsRix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Qn0pOiRbRl09QixEPSgkLEYpPT57Zm9yKHZhciBCIGluIEZ8fChGPXt9KSl0bi5jYWxsKEYsQikmJmZ0KCQsQixGW0JdKTtpZigkZSlmb3IodmFyIEIgb2YgJGUoRikpbm4uY2FsbChGLEIpJiZmdCgkLEIsRltCXSk7cmV0dXJuICR9LEJlPSgkLEYpPT5qcigkLHFyKEYpKTt2YXIgZ2U9KCQsRik9Pnt2YXIgQj17fTtmb3IodmFyIGVlIGluICQpdG4uY2FsbCgkLGVlKSYmRi5pbmRleE9mKGVlKTwwJiYoQltlZV09JFtlZV0pO2lmKCQhPW51bGwmJiRlKWZvcih2YXIgZWUgb2YgJGUoJCkpRi5pbmRleE9mKGVlKTwwJiZubi5jYWxsKCQsZWUpJiYoQltlZV09JFtlZV0pO3JldHVybiBCfTt2YXIgaHQ9KCQsRixCKT0+ZnQoJCx0eXBlb2YgRiE9InN5bWJvbCI/RisiIjpGLEIpO3ZhciBKPSgkLEYsQik9Pm5ldyBQcm9taXNlKChlZSxTZSk9Pnt2YXIgVWU9c2U9Pnt0cnl7YWUoQi5uZXh0KHNlKSl9Y2F0Y2goRWUpe1NlKEVlKX19LFZlPXNlPT57dHJ5e2FlKEIudGhyb3coc2UpKX1jYXRjaChFZSl7U2UoRWUpfX0sYWU9c2U9PnNlLmRvbmU/ZWUoc2UudmFsdWUpOlByb21pc2UucmVzb2x2ZShzZS52YWx1ZSkudGhlbihVZSxWZSk7YWUoKEI9Qi5hcHBseSgkLEYpKS5uZXh0KCkpfSk7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uICQoZSx0KXtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKG4pe24mJnR5cGVvZiBuIT0ic3RyaW5nIiYmIUFycmF5LmlzQXJyYXkobikmJk9iamVjdC5rZXlzKG4pLmZvckVhY2goZnVuY3Rpb24oaSl7aWYoaSE9PSJkZWZhdWx0IiYmIShpIGluIGUpKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4saSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsaSxyLmdldD9yOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuW2ldfX0pfX0pfSksT2JqZWN0LmZyZWV6ZShlKX1jb25zdCBGPUpTT04sQj1lPT5lLnRvVXBwZXJDYXNlKCksZWU9ZT0+e2NvbnN0IHQ9e307cmV0dXJuIGUuZm9yRWFjaCgobixpKT0+e3RbaV09bn0pLHR9LFNlPShlLHQsbik9PmUuZG9jdW1lbnQ/ZTp7ZG9jdW1lbnQ6ZSx2YXJpYWJsZXM6dCxyZXF1ZXN0SGVhZGVyczpuLHNpZ25hbDp2b2lkIDB9LFVlPShlLHQsbik9PmUucXVlcnk/ZTp7cXVlcnk6ZSx2YXJpYWJsZXM6dCxyZXF1ZXN0SGVhZGVyczpuLHNpZ25hbDp2b2lkIDB9LFZlPShlLHQpPT5lLmRvY3VtZW50cz9lOntkb2N1bWVudHM6ZSxyZXF1ZXN0SGVhZGVyczp0LHNpZ25hbDp2b2lkIDB9O2Z1bmN0aW9uIGFlKGUsdCl7aWYoISEhZSl0aHJvdyBuZXcgRXJyb3IodCl9ZnVuY3Rpb24gc2UoZSl7cmV0dXJuIHR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGx9ZnVuY3Rpb24gRWUoZSx0KXtpZighISFlKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnZhcmlhbnQgdHJpZ2dlcmVkLiIpfWNvbnN0IHJuPS9cclxufFtcblxyXS9nO2Z1bmN0aW9uIGplKGUsdCl7bGV0IG49MCxpPTE7Zm9yKGNvbnN0IHIgb2YgZS5ib2R5Lm1hdGNoQWxsKHJuKSl7aWYodHlwZW9mIHIuaW5kZXg9PSJudW1iZXIifHxFZSghMSksci5pbmRleD49dClicmVhaztuPXIuaW5kZXgrclswXS5sZW5ndGgsaSs9MX1yZXR1cm57bGluZTppLGNvbHVtbjp0KzEtbn19ZnVuY3Rpb24gc24oZSl7cmV0dXJuIGR0KGUuc291cmNlLGplKGUuc291cmNlLGUuc3RhcnQpKX1mdW5jdGlvbiBkdChlLHQpe2NvbnN0IG49ZS5sb2NhdGlvbk9mZnNldC5jb2x1bW4tMSxpPSIiLnBhZFN0YXJ0KG4pK2UuYm9keSxyPXQubGluZS0xLHM9ZS5sb2NhdGlvbk9mZnNldC5saW5lLTEsbz10LmxpbmUrcyxjPXQubGluZT09PTE/bjowLGY9dC5jb2x1bW4rYyxkPWAke2UubmFtZX06JHtvfToke2Z9CmAsdT1pLnNwbGl0KC9cclxufFtcblxyXS9nKSx5PXVbcl07aWYoeS5sZW5ndGg+MTIwKXtjb25zdCBnPU1hdGguZmxvb3IoZi84MCksYj1mJTgwLG09W107Zm9yKGxldCBOPTA7Tjx5Lmxlbmd0aDtOKz04MCltLnB1c2goeS5zbGljZShOLE4rODApKTtyZXR1cm4gZCtwdChbW2Ake299IHxgLG1bMF1dLC4uLm0uc2xpY2UoMSxnKzEpLm1hcChOPT5bInwiLE5dKSxbInwiLCJeIi5wYWRTdGFydChiKV0sWyJ8IixtW2crMV1dXSl9cmV0dXJuIGQrcHQoW1tgJHtvLTF9IHxgLHVbci0xXV0sW2Ake299IHxgLHldLFsifCIsIl4iLnBhZFN0YXJ0KGYpXSxbYCR7bysxfSB8YCx1W3IrMV1dXSl9ZnVuY3Rpb24gcHQoZSl7Y29uc3QgdD1lLmZpbHRlcigoW2kscl0pPT5yIT09dm9pZCAwKSxuPU1hdGgubWF4KC4uLnQubWFwKChbaV0pPT5pLmxlbmd0aCkpO3JldHVybiB0Lm1hcCgoW2kscl0pPT5pLnBhZFN0YXJ0KG4pKyhyPyIgIityOiIiKSkuam9pbihgCmApfWZ1bmN0aW9uIG9uKGUpe2NvbnN0IHQ9ZVswXTtyZXR1cm4gdD09bnVsbHx8ImtpbmQiaW4gdHx8Imxlbmd0aCJpbiB0P3tub2Rlczp0LHNvdXJjZTplWzFdLHBvc2l0aW9uczplWzJdLHBhdGg6ZVszXSxvcmlnaW5hbEVycm9yOmVbNF0sZXh0ZW5zaW9uczplWzVdfTp0fWNsYXNzIHFlIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCwuLi5uKXt2YXIgaSxyLHM7Y29uc3R7bm9kZXM6byxzb3VyY2U6Yyxwb3NpdGlvbnM6ZixwYXRoOmQsb3JpZ2luYWxFcnJvcjp1LGV4dGVuc2lvbnM6eX09b24obik7c3VwZXIodCksdGhpcy5uYW1lPSJHcmFwaFFMRXJyb3IiLHRoaXMucGF0aD1kIT1udWxsP2Q6dm9pZCAwLHRoaXMub3JpZ2luYWxFcnJvcj11IT1udWxsP3U6dm9pZCAwLHRoaXMubm9kZXM9bXQoQXJyYXkuaXNBcnJheShvKT9vOm8/W29dOnZvaWQgMCk7Y29uc3QgZz1tdCgoaT10aGlzLm5vZGVzKT09PW51bGx8fGk9PT12b2lkIDA/dm9pZCAwOmkubWFwKG09Pm0ubG9jKS5maWx0ZXIobT0+bSE9bnVsbCkpO3RoaXMuc291cmNlPWMhPW51bGw/YzpnPT1udWxsfHwocj1nWzBdKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuc291cmNlLHRoaXMucG9zaXRpb25zPWYhPW51bGw/ZjpnPT1udWxsP3ZvaWQgMDpnLm1hcChtPT5tLnN0YXJ0KSx0aGlzLmxvY2F0aW9ucz1mJiZjP2YubWFwKG09PmplKGMsbSkpOmc9PW51bGw/dm9pZCAwOmcubWFwKG09PmplKG0uc291cmNlLG0uc3RhcnQpKTtjb25zdCBiPXNlKHU9PW51bGw/dm9pZCAwOnUuZXh0ZW5zaW9ucyk/dT09bnVsbD92b2lkIDA6dS5leHRlbnNpb25zOnZvaWQgMDt0aGlzLmV4dGVuc2lvbnM9KHM9eSE9bnVsbD95OmIpIT09bnVsbCYmcyE9PXZvaWQgMD9zOk9iamVjdC5jcmVhdGUobnVsbCksT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7bWVzc2FnZTp7d3JpdGFibGU6ITAsZW51bWVyYWJsZTohMH0sbmFtZTp7ZW51bWVyYWJsZTohMX0sbm9kZXM6e2VudW1lcmFibGU6ITF9LHNvdXJjZTp7ZW51bWVyYWJsZTohMX0scG9zaXRpb25zOntlbnVtZXJhYmxlOiExfSxvcmlnaW5hbEVycm9yOntlbnVtZXJhYmxlOiExfX0pLHUhPW51bGwmJnUuc3RhY2s/T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInN0YWNrIix7dmFsdWU6dS5zdGFjayx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KTpFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHFlKTpPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywic3RhY2siLHt2YWx1ZTpFcnJvcigpLnN0YWNrLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkdyYXBoUUxFcnJvciJ9dG9TdHJpbmcoKXtsZXQgdD10aGlzLm1lc3NhZ2U7aWYodGhpcy5ub2Rlcylmb3IoY29uc3QgbiBvZiB0aGlzLm5vZGVzKW4ubG9jJiYodCs9YAoKYCtzbihuLmxvYykpO2Vsc2UgaWYodGhpcy5zb3VyY2UmJnRoaXMubG9jYXRpb25zKWZvcihjb25zdCBuIG9mIHRoaXMubG9jYXRpb25zKXQrPWAKCmArZHQodGhpcy5zb3VyY2Usbik7cmV0dXJuIHR9dG9KU09OKCl7Y29uc3QgdD17bWVzc2FnZTp0aGlzLm1lc3NhZ2V9O3JldHVybiB0aGlzLmxvY2F0aW9ucyE9bnVsbCYmKHQubG9jYXRpb25zPXRoaXMubG9jYXRpb25zKSx0aGlzLnBhdGghPW51bGwmJih0LnBhdGg9dGhpcy5wYXRoKSx0aGlzLmV4dGVuc2lvbnMhPW51bGwmJk9iamVjdC5rZXlzKHRoaXMuZXh0ZW5zaW9ucykubGVuZ3RoPjAmJih0LmV4dGVuc2lvbnM9dGhpcy5leHRlbnNpb25zKSx0fX1mdW5jdGlvbiBtdChlKXtyZXR1cm4gZT09PXZvaWQgMHx8ZS5sZW5ndGg9PT0wP3ZvaWQgMDplfWZ1bmN0aW9uIEcoZSx0LG4pe3JldHVybiBuZXcgcWUoYFN5bnRheCBFcnJvcjogJHtufWAse3NvdXJjZTplLHBvc2l0aW9uczpbdF19KX1jbGFzcyBhbntjb25zdHJ1Y3Rvcih0LG4saSl7dGhpcy5zdGFydD10LnN0YXJ0LHRoaXMuZW5kPW4uZW5kLHRoaXMuc3RhcnRUb2tlbj10LHRoaXMuZW5kVG9rZW49bix0aGlzLnNvdXJjZT1pfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkxvY2F0aW9uIn10b0pTT04oKXtyZXR1cm57c3RhcnQ6dGhpcy5zdGFydCxlbmQ6dGhpcy5lbmR9fX1jbGFzcyB5dHtjb25zdHJ1Y3Rvcih0LG4saSxyLHMsbyl7dGhpcy5raW5kPXQsdGhpcy5zdGFydD1uLHRoaXMuZW5kPWksdGhpcy5saW5lPXIsdGhpcy5jb2x1bW49cyx0aGlzLnZhbHVlPW8sdGhpcy5wcmV2PW51bGwsdGhpcy5uZXh0PW51bGx9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iVG9rZW4ifXRvSlNPTigpe3JldHVybntraW5kOnRoaXMua2luZCx2YWx1ZTp0aGlzLnZhbHVlLGxpbmU6dGhpcy5saW5lLGNvbHVtbjp0aGlzLmNvbHVtbn19fWNvbnN0IHZ0PXtOYW1lOltdLERvY3VtZW50OlsiZGVmaW5pdGlvbnMiXSxPcGVyYXRpb25EZWZpbml0aW9uOlsibmFtZSIsInZhcmlhYmxlRGVmaW5pdGlvbnMiLCJkaXJlY3RpdmVzIiwic2VsZWN0aW9uU2V0Il0sVmFyaWFibGVEZWZpbml0aW9uOlsidmFyaWFibGUiLCJ0eXBlIiwiZGVmYXVsdFZhbHVlIiwiZGlyZWN0aXZlcyJdLFZhcmlhYmxlOlsibmFtZSJdLFNlbGVjdGlvblNldDpbInNlbGVjdGlvbnMiXSxGaWVsZDpbImFsaWFzIiwibmFtZSIsImFyZ3VtZW50cyIsImRpcmVjdGl2ZXMiLCJzZWxlY3Rpb25TZXQiXSxBcmd1bWVudDpbIm5hbWUiLCJ2YWx1ZSJdLEZyYWdtZW50U3ByZWFkOlsibmFtZSIsImRpcmVjdGl2ZXMiXSxJbmxpbmVGcmFnbWVudDpbInR5cGVDb25kaXRpb24iLCJkaXJlY3RpdmVzIiwic2VsZWN0aW9uU2V0Il0sRnJhZ21lbnREZWZpbml0aW9uOlsibmFtZSIsInZhcmlhYmxlRGVmaW5pdGlvbnMiLCJ0eXBlQ29uZGl0aW9uIiwiZGlyZWN0aXZlcyIsInNlbGVjdGlvblNldCJdLEludFZhbHVlOltdLEZsb2F0VmFsdWU6W10sU3RyaW5nVmFsdWU6W10sQm9vbGVhblZhbHVlOltdLE51bGxWYWx1ZTpbXSxFbnVtVmFsdWU6W10sTGlzdFZhbHVlOlsidmFsdWVzIl0sT2JqZWN0VmFsdWU6WyJmaWVsZHMiXSxPYmplY3RGaWVsZDpbIm5hbWUiLCJ2YWx1ZSJdLERpcmVjdGl2ZTpbIm5hbWUiLCJhcmd1bWVudHMiXSxOYW1lZFR5cGU6WyJuYW1lIl0sTGlzdFR5cGU6WyJ0eXBlIl0sTm9uTnVsbFR5cGU6WyJ0eXBlIl0sU2NoZW1hRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwiZGlyZWN0aXZlcyIsIm9wZXJhdGlvblR5cGVzIl0sT3BlcmF0aW9uVHlwZURlZmluaXRpb246WyJ0eXBlIl0sU2NhbGFyVHlwZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJkaXJlY3RpdmVzIl0sT2JqZWN0VHlwZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJpbnRlcmZhY2VzIiwiZGlyZWN0aXZlcyIsImZpZWxkcyJdLEZpZWxkRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsImFyZ3VtZW50cyIsInR5cGUiLCJkaXJlY3RpdmVzIl0sSW5wdXRWYWx1ZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJ0eXBlIiwiZGVmYXVsdFZhbHVlIiwiZGlyZWN0aXZlcyJdLEludGVyZmFjZVR5cGVEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwiaW50ZXJmYWNlcyIsImRpcmVjdGl2ZXMiLCJmaWVsZHMiXSxVbmlvblR5cGVEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwiZGlyZWN0aXZlcyIsInR5cGVzIl0sRW51bVR5cGVEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwiZGlyZWN0aXZlcyIsInZhbHVlcyJdLEVudW1WYWx1ZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJkaXJlY3RpdmVzIl0sSW5wdXRPYmplY3RUeXBlRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsImRpcmVjdGl2ZXMiLCJmaWVsZHMiXSxEaXJlY3RpdmVEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwiYXJndW1lbnRzIiwibG9jYXRpb25zIl0sU2NoZW1hRXh0ZW5zaW9uOlsiZGlyZWN0aXZlcyIsIm9wZXJhdGlvblR5cGVzIl0sU2NhbGFyVHlwZUV4dGVuc2lvbjpbIm5hbWUiLCJkaXJlY3RpdmVzIl0sT2JqZWN0VHlwZUV4dGVuc2lvbjpbIm5hbWUiLCJpbnRlcmZhY2VzIiwiZGlyZWN0aXZlcyIsImZpZWxkcyJdLEludGVyZmFjZVR5cGVFeHRlbnNpb246WyJuYW1lIiwiaW50ZXJmYWNlcyIsImRpcmVjdGl2ZXMiLCJmaWVsZHMiXSxVbmlvblR5cGVFeHRlbnNpb246WyJuYW1lIiwiZGlyZWN0aXZlcyIsInR5cGVzIl0sRW51bVR5cGVFeHRlbnNpb246WyJuYW1lIiwiZGlyZWN0aXZlcyIsInZhbHVlcyJdLElucHV0T2JqZWN0VHlwZUV4dGVuc2lvbjpbIm5hbWUiLCJkaXJlY3RpdmVzIiwiZmllbGRzIl19LGNuPW5ldyBTZXQoT2JqZWN0LmtleXModnQpKTtmdW5jdGlvbiBndChlKXtjb25zdCB0PWU9PW51bGw/dm9pZCAwOmUua2luZDtyZXR1cm4gdHlwZW9mIHQ9PSJzdHJpbmciJiZjbi5oYXModCl9dmFyIGZlOyhmdW5jdGlvbihlKXtlLlFVRVJZPSJxdWVyeSIsZS5NVVRBVElPTj0ibXV0YXRpb24iLGUuU1VCU0NSSVBUSU9OPSJzdWJzY3JpcHRpb24ifSkoZmV8fChmZT17fSkpO3ZhciBHZTsoZnVuY3Rpb24oZSl7ZS5RVUVSWT0iUVVFUlkiLGUuTVVUQVRJT049Ik1VVEFUSU9OIixlLlNVQlNDUklQVElPTj0iU1VCU0NSSVBUSU9OIixlLkZJRUxEPSJGSUVMRCIsZS5GUkFHTUVOVF9ERUZJTklUSU9OPSJGUkFHTUVOVF9ERUZJTklUSU9OIixlLkZSQUdNRU5UX1NQUkVBRD0iRlJBR01FTlRfU1BSRUFEIixlLklOTElORV9GUkFHTUVOVD0iSU5MSU5FX0ZSQUdNRU5UIixlLlZBUklBQkxFX0RFRklOSVRJT049IlZBUklBQkxFX0RFRklOSVRJT04iLGUuU0NIRU1BPSJTQ0hFTUEiLGUuU0NBTEFSPSJTQ0FMQVIiLGUuT0JKRUNUPSJPQkpFQ1QiLGUuRklFTERfREVGSU5JVElPTj0iRklFTERfREVGSU5JVElPTiIsZS5BUkdVTUVOVF9ERUZJTklUSU9OPSJBUkdVTUVOVF9ERUZJTklUSU9OIixlLklOVEVSRkFDRT0iSU5URVJGQUNFIixlLlVOSU9OPSJVTklPTiIsZS5FTlVNPSJFTlVNIixlLkVOVU1fVkFMVUU9IkVOVU1fVkFMVUUiLGUuSU5QVVRfT0JKRUNUPSJJTlBVVF9PQkpFQ1QiLGUuSU5QVVRfRklFTERfREVGSU5JVElPTj0iSU5QVVRfRklFTERfREVGSU5JVElPTiJ9KShHZXx8KEdlPXt9KSk7dmFyIFQ7KGZ1bmN0aW9uKGUpe2UuTkFNRT0iTmFtZSIsZS5ET0NVTUVOVD0iRG9jdW1lbnQiLGUuT1BFUkFUSU9OX0RFRklOSVRJT049Ik9wZXJhdGlvbkRlZmluaXRpb24iLGUuVkFSSUFCTEVfREVGSU5JVElPTj0iVmFyaWFibGVEZWZpbml0aW9uIixlLlNFTEVDVElPTl9TRVQ9IlNlbGVjdGlvblNldCIsZS5GSUVMRD0iRmllbGQiLGUuQVJHVU1FTlQ9IkFyZ3VtZW50IixlLkZSQUdNRU5UX1NQUkVBRD0iRnJhZ21lbnRTcHJlYWQiLGUuSU5MSU5FX0ZSQUdNRU5UPSJJbmxpbmVGcmFnbWVudCIsZS5GUkFHTUVOVF9ERUZJTklUSU9OPSJGcmFnbWVudERlZmluaXRpb24iLGUuVkFSSUFCTEU9IlZhcmlhYmxlIixlLklOVD0iSW50VmFsdWUiLGUuRkxPQVQ9IkZsb2F0VmFsdWUiLGUuU1RSSU5HPSJTdHJpbmdWYWx1ZSIsZS5CT09MRUFOPSJCb29sZWFuVmFsdWUiLGUuTlVMTD0iTnVsbFZhbHVlIixlLkVOVU09IkVudW1WYWx1ZSIsZS5MSVNUPSJMaXN0VmFsdWUiLGUuT0JKRUNUPSJPYmplY3RWYWx1ZSIsZS5PQkpFQ1RfRklFTEQ9Ik9iamVjdEZpZWxkIixlLkRJUkVDVElWRT0iRGlyZWN0aXZlIixlLk5BTUVEX1RZUEU9Ik5hbWVkVHlwZSIsZS5MSVNUX1RZUEU9Ikxpc3RUeXBlIixlLk5PTl9OVUxMX1RZUEU9Ik5vbk51bGxUeXBlIixlLlNDSEVNQV9ERUZJTklUSU9OPSJTY2hlbWFEZWZpbml0aW9uIixlLk9QRVJBVElPTl9UWVBFX0RFRklOSVRJT049Ik9wZXJhdGlvblR5cGVEZWZpbml0aW9uIixlLlNDQUxBUl9UWVBFX0RFRklOSVRJT049IlNjYWxhclR5cGVEZWZpbml0aW9uIixlLk9CSkVDVF9UWVBFX0RFRklOSVRJT049Ik9iamVjdFR5cGVEZWZpbml0aW9uIixlLkZJRUxEX0RFRklOSVRJT049IkZpZWxkRGVmaW5pdGlvbiIsZS5JTlBVVF9WQUxVRV9ERUZJTklUSU9OPSJJbnB1dFZhbHVlRGVmaW5pdGlvbiIsZS5JTlRFUkZBQ0VfVFlQRV9ERUZJTklUSU9OPSJJbnRlcmZhY2VUeXBlRGVmaW5pdGlvbiIsZS5VTklPTl9UWVBFX0RFRklOSVRJT049IlVuaW9uVHlwZURlZmluaXRpb24iLGUuRU5VTV9UWVBFX0RFRklOSVRJT049IkVudW1UeXBlRGVmaW5pdGlvbiIsZS5FTlVNX1ZBTFVFX0RFRklOSVRJT049IkVudW1WYWx1ZURlZmluaXRpb24iLGUuSU5QVVRfT0JKRUNUX1RZUEVfREVGSU5JVElPTj0iSW5wdXRPYmplY3RUeXBlRGVmaW5pdGlvbiIsZS5ESVJFQ1RJVkVfREVGSU5JVElPTj0iRGlyZWN0aXZlRGVmaW5pdGlvbiIsZS5TQ0hFTUFfRVhURU5TSU9OPSJTY2hlbWFFeHRlbnNpb24iLGUuU0NBTEFSX1RZUEVfRVhURU5TSU9OPSJTY2FsYXJUeXBlRXh0ZW5zaW9uIixlLk9CSkVDVF9UWVBFX0VYVEVOU0lPTj0iT2JqZWN0VHlwZUV4dGVuc2lvbiIsZS5JTlRFUkZBQ0VfVFlQRV9FWFRFTlNJT049IkludGVyZmFjZVR5cGVFeHRlbnNpb24iLGUuVU5JT05fVFlQRV9FWFRFTlNJT049IlVuaW9uVHlwZUV4dGVuc2lvbiIsZS5FTlVNX1RZUEVfRVhURU5TSU9OPSJFbnVtVHlwZUV4dGVuc2lvbiIsZS5JTlBVVF9PQkpFQ1RfVFlQRV9FWFRFTlNJT049IklucHV0T2JqZWN0VHlwZUV4dGVuc2lvbiJ9KShUfHwoVD17fSkpO2Z1bmN0aW9uIHplKGUpe3JldHVybiBlPT09OXx8ZT09PTMyfWZ1bmN0aW9uIF9lKGUpe3JldHVybiBlPj00OCYmZTw9NTd9ZnVuY3Rpb24gRXQoZSl7cmV0dXJuIGU+PTk3JiZlPD0xMjJ8fGU+PTY1JiZlPD05MH1mdW5jdGlvbiBfdChlKXtyZXR1cm4gRXQoZSl8fGU9PT05NX1mdW5jdGlvbiB1bihlKXtyZXR1cm4gRXQoZSl8fF9lKGUpfHxlPT09OTV9ZnVuY3Rpb24gbG4oZSl7dmFyIHQ7bGV0IG49TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsaT1udWxsLHI9LTE7Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDsrK28pe3ZhciBzO2NvbnN0IGM9ZVtvXSxmPWZuKGMpO2YhPT1jLmxlbmd0aCYmKGk9KHM9aSkhPT1udWxsJiZzIT09dm9pZCAwP3M6byxyPW8sbyE9PTAmJmY8biYmKG49ZikpfXJldHVybiBlLm1hcCgobyxjKT0+Yz09PTA/bzpvLnNsaWNlKG4pKS5zbGljZSgodD1pKSE9PW51bGwmJnQhPT12b2lkIDA/dDowLHIrMSl9ZnVuY3Rpb24gZm4oZSl7bGV0IHQ9MDtmb3IoO3Q8ZS5sZW5ndGgmJnplKGUuY2hhckNvZGVBdCh0KSk7KSsrdDtyZXR1cm4gdH1mdW5jdGlvbiBobihlLHQpe2NvbnN0IG49ZS5yZXBsYWNlKC8iIiIvZywnXFwiIiInKSxpPW4uc3BsaXQoL1xyXG58W1xuXHJdL2cpLHI9aS5sZW5ndGg9PT0xLHM9aS5sZW5ndGg+MSYmaS5zbGljZSgxKS5ldmVyeShiPT5iLmxlbmd0aD09PTB8fHplKGIuY2hhckNvZGVBdCgwKSkpLG89bi5lbmRzV2l0aCgnXFwiIiInKSxjPWUuZW5kc1dpdGgoJyInKSYmIW8sZj1lLmVuZHNXaXRoKCJcXCIpLGQ9Y3x8Zix1PSFyfHxlLmxlbmd0aD43MHx8ZHx8c3x8bztsZXQgeT0iIjtjb25zdCBnPXImJnplKGUuY2hhckNvZGVBdCgwKSk7cmV0dXJuKHUmJiFnfHxzKSYmKHkrPWAKYCkseSs9biwodXx8ZCkmJih5Kz1gCmApLCciIiInK3krJyIiIid9dmFyIGw7KGZ1bmN0aW9uKGUpe2UuU09GPSI8U09GPiIsZS5FT0Y9IjxFT0Y+IixlLkJBTkc9IiEiLGUuRE9MTEFSPSIkIixlLkFNUD0iJiIsZS5QQVJFTl9MPSIoIixlLlBBUkVOX1I9IikiLGUuU1BSRUFEPSIuLi4iLGUuQ09MT049IjoiLGUuRVFVQUxTPSI9IixlLkFUPSJAIixlLkJSQUNLRVRfTD0iWyIsZS5CUkFDS0VUX1I9Il0iLGUuQlJBQ0VfTD0ieyIsZS5QSVBFPSJ8IixlLkJSQUNFX1I9In0iLGUuTkFNRT0iTmFtZSIsZS5JTlQ9IkludCIsZS5GTE9BVD0iRmxvYXQiLGUuU1RSSU5HPSJTdHJpbmciLGUuQkxPQ0tfU1RSSU5HPSJCbG9ja1N0cmluZyIsZS5DT01NRU5UPSJDb21tZW50In0pKGx8fChsPXt9KSk7Y2xhc3MgZG57Y29uc3RydWN0b3IodCl7Y29uc3Qgbj1uZXcgeXQobC5TT0YsMCwwLDAsMCk7dGhpcy5zb3VyY2U9dCx0aGlzLmxhc3RUb2tlbj1uLHRoaXMudG9rZW49bix0aGlzLmxpbmU9MSx0aGlzLmxpbmVTdGFydD0wfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkxleGVyIn1hZHZhbmNlKCl7cmV0dXJuIHRoaXMubGFzdFRva2VuPXRoaXMudG9rZW4sdGhpcy50b2tlbj10aGlzLmxvb2thaGVhZCgpfWxvb2thaGVhZCgpe2xldCB0PXRoaXMudG9rZW47aWYodC5raW5kIT09bC5FT0YpZG8gaWYodC5uZXh0KXQ9dC5uZXh0O2Vsc2V7Y29uc3Qgbj1tbih0aGlzLHQuZW5kKTt0Lm5leHQ9bixuLnByZXY9dCx0PW59d2hpbGUodC5raW5kPT09bC5DT01NRU5UKTtyZXR1cm4gdH19ZnVuY3Rpb24gcG4oZSl7cmV0dXJuIGU9PT1sLkJBTkd8fGU9PT1sLkRPTExBUnx8ZT09PWwuQU1QfHxlPT09bC5QQVJFTl9MfHxlPT09bC5QQVJFTl9SfHxlPT09bC5TUFJFQUR8fGU9PT1sLkNPTE9OfHxlPT09bC5FUVVBTFN8fGU9PT1sLkFUfHxlPT09bC5CUkFDS0VUX0x8fGU9PT1sLkJSQUNLRVRfUnx8ZT09PWwuQlJBQ0VfTHx8ZT09PWwuUElQRXx8ZT09PWwuQlJBQ0VfUn1mdW5jdGlvbiBoZShlKXtyZXR1cm4gZT49MCYmZTw9NTUyOTV8fGU+PTU3MzQ0JiZlPD0xMTE0MTExfWZ1bmN0aW9uIE9lKGUsdCl7cmV0dXJuIFR0KGUuY2hhckNvZGVBdCh0KSkmJmJ0KGUuY2hhckNvZGVBdCh0KzEpKX1mdW5jdGlvbiBUdChlKXtyZXR1cm4gZT49NTUyOTYmJmU8PTU2MzE5fWZ1bmN0aW9uIGJ0KGUpe3JldHVybiBlPj01NjMyMCYmZTw9NTczNDN9ZnVuY3Rpb24gdWUoZSx0KXtjb25zdCBuPWUuc291cmNlLmJvZHkuY29kZVBvaW50QXQodCk7aWYobj09PXZvaWQgMClyZXR1cm4gbC5FT0Y7aWYobj49MzImJm48PTEyNil7Y29uc3QgaT1TdHJpbmcuZnJvbUNvZGVQb2ludChuKTtyZXR1cm4gaT09PSciJz9gJyInYDpgIiR7aX0iYH1yZXR1cm4iVSsiK24udG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkucGFkU3RhcnQoNCwiMCIpfWZ1bmN0aW9uIFUoZSx0LG4saSxyKXtjb25zdCBzPWUubGluZSxvPTErbi1lLmxpbmVTdGFydDtyZXR1cm4gbmV3IHl0KHQsbixpLHMsbyxyKX1mdW5jdGlvbiBtbihlLHQpe2NvbnN0IG49ZS5zb3VyY2UuYm9keSxpPW4ubGVuZ3RoO2xldCByPXQ7Zm9yKDtyPGk7KXtjb25zdCBzPW4uY2hhckNvZGVBdChyKTtzd2l0Y2gocyl7Y2FzZSA2NTI3OTpjYXNlIDk6Y2FzZSAzMjpjYXNlIDQ0Oisrcjtjb250aW51ZTtjYXNlIDEwOisrciwrK2UubGluZSxlLmxpbmVTdGFydD1yO2NvbnRpbnVlO2Nhc2UgMTM6bi5jaGFyQ29kZUF0KHIrMSk9PT0xMD9yKz0yOisrciwrK2UubGluZSxlLmxpbmVTdGFydD1yO2NvbnRpbnVlO2Nhc2UgMzU6cmV0dXJuIHluKGUscik7Y2FzZSAzMzpyZXR1cm4gVShlLGwuQkFORyxyLHIrMSk7Y2FzZSAzNjpyZXR1cm4gVShlLGwuRE9MTEFSLHIscisxKTtjYXNlIDM4OnJldHVybiBVKGUsbC5BTVAscixyKzEpO2Nhc2UgNDA6cmV0dXJuIFUoZSxsLlBBUkVOX0wscixyKzEpO2Nhc2UgNDE6cmV0dXJuIFUoZSxsLlBBUkVOX1IscixyKzEpO2Nhc2UgNDY6aWYobi5jaGFyQ29kZUF0KHIrMSk9PT00NiYmbi5jaGFyQ29kZUF0KHIrMik9PT00NilyZXR1cm4gVShlLGwuU1BSRUFELHIsciszKTticmVhaztjYXNlIDU4OnJldHVybiBVKGUsbC5DT0xPTixyLHIrMSk7Y2FzZSA2MTpyZXR1cm4gVShlLGwuRVFVQUxTLHIscisxKTtjYXNlIDY0OnJldHVybiBVKGUsbC5BVCxyLHIrMSk7Y2FzZSA5MTpyZXR1cm4gVShlLGwuQlJBQ0tFVF9MLHIscisxKTtjYXNlIDkzOnJldHVybiBVKGUsbC5CUkFDS0VUX1IscixyKzEpO2Nhc2UgMTIzOnJldHVybiBVKGUsbC5CUkFDRV9MLHIscisxKTtjYXNlIDEyNDpyZXR1cm4gVShlLGwuUElQRSxyLHIrMSk7Y2FzZSAxMjU6cmV0dXJuIFUoZSxsLkJSQUNFX1IscixyKzEpO2Nhc2UgMzQ6cmV0dXJuIG4uY2hhckNvZGVBdChyKzEpPT09MzQmJm4uY2hhckNvZGVBdChyKzIpPT09MzQ/Ym4oZSxyKTpnbihlLHIpfWlmKF9lKHMpfHxzPT09NDUpcmV0dXJuIHZuKGUscixzKTtpZihfdChzKSlyZXR1cm4gTm4oZSxyKTt0aHJvdyBHKGUuc291cmNlLHIscz09PTM5P2BVbmV4cGVjdGVkIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXIgKCcpLCBkaWQgeW91IG1lYW4gdG8gdXNlIGEgZG91YmxlIHF1b3RlICgiKT9gOmhlKHMpfHxPZShuLHIpP2BVbmV4cGVjdGVkIGNoYXJhY3RlcjogJHt1ZShlLHIpfS5gOmBJbnZhbGlkIGNoYXJhY3RlcjogJHt1ZShlLHIpfS5gKX1yZXR1cm4gVShlLGwuRU9GLGksaSl9ZnVuY3Rpb24geW4oZSx0KXtjb25zdCBuPWUuc291cmNlLmJvZHksaT1uLmxlbmd0aDtsZXQgcj10KzE7Zm9yKDtyPGk7KXtjb25zdCBzPW4uY2hhckNvZGVBdChyKTtpZihzPT09MTB8fHM9PT0xMylicmVhaztpZihoZShzKSkrK3I7ZWxzZSBpZihPZShuLHIpKXIrPTI7ZWxzZSBicmVha31yZXR1cm4gVShlLGwuQ09NTUVOVCx0LHIsbi5zbGljZSh0KzEscikpfWZ1bmN0aW9uIHZuKGUsdCxuKXtjb25zdCBpPWUuc291cmNlLmJvZHk7bGV0IHI9dCxzPW4sbz0hMTtpZihzPT09NDUmJihzPWkuY2hhckNvZGVBdCgrK3IpKSxzPT09NDgpe2lmKHM9aS5jaGFyQ29kZUF0KCsrciksX2UocykpdGhyb3cgRyhlLnNvdXJjZSxyLGBJbnZhbGlkIG51bWJlciwgdW5leHBlY3RlZCBkaWdpdCBhZnRlciAwOiAke3VlKGUscil9LmApfWVsc2Ugcj1IZShlLHIscykscz1pLmNoYXJDb2RlQXQocik7aWYocz09PTQ2JiYobz0hMCxzPWkuY2hhckNvZGVBdCgrK3IpLHI9SGUoZSxyLHMpLHM9aS5jaGFyQ29kZUF0KHIpKSwocz09PTY5fHxzPT09MTAxKSYmKG89ITAscz1pLmNoYXJDb2RlQXQoKytyKSwocz09PTQzfHxzPT09NDUpJiYocz1pLmNoYXJDb2RlQXQoKytyKSkscj1IZShlLHIscykscz1pLmNoYXJDb2RlQXQocikpLHM9PT00Nnx8X3QocykpdGhyb3cgRyhlLnNvdXJjZSxyLGBJbnZhbGlkIG51bWJlciwgZXhwZWN0ZWQgZGlnaXQgYnV0IGdvdDogJHt1ZShlLHIpfS5gKTtyZXR1cm4gVShlLG8/bC5GTE9BVDpsLklOVCx0LHIsaS5zbGljZSh0LHIpKX1mdW5jdGlvbiBIZShlLHQsbil7aWYoIV9lKG4pKXRocm93IEcoZS5zb3VyY2UsdCxgSW52YWxpZCBudW1iZXIsIGV4cGVjdGVkIGRpZ2l0IGJ1dCBnb3Q6ICR7dWUoZSx0KX0uYCk7Y29uc3QgaT1lLnNvdXJjZS5ib2R5O2xldCByPXQrMTtmb3IoO19lKGkuY2hhckNvZGVBdChyKSk7KSsrcjtyZXR1cm4gcn1mdW5jdGlvbiBnbihlLHQpe2NvbnN0IG49ZS5zb3VyY2UuYm9keSxpPW4ubGVuZ3RoO2xldCByPXQrMSxzPXIsbz0iIjtmb3IoO3I8aTspe2NvbnN0IGM9bi5jaGFyQ29kZUF0KHIpO2lmKGM9PT0zNClyZXR1cm4gbys9bi5zbGljZShzLHIpLFUoZSxsLlNUUklORyx0LHIrMSxvKTtpZihjPT09OTIpe28rPW4uc2xpY2UocyxyKTtjb25zdCBmPW4uY2hhckNvZGVBdChyKzEpPT09MTE3P24uY2hhckNvZGVBdChyKzIpPT09MTIzP0VuKGUscik6X24oZSxyKTpUbihlLHIpO28rPWYudmFsdWUscis9Zi5zaXplLHM9cjtjb250aW51ZX1pZihjPT09MTB8fGM9PT0xMylicmVhaztpZihoZShjKSkrK3I7ZWxzZSBpZihPZShuLHIpKXIrPTI7ZWxzZSB0aHJvdyBHKGUuc291cmNlLHIsYEludmFsaWQgY2hhcmFjdGVyIHdpdGhpbiBTdHJpbmc6ICR7dWUoZSxyKX0uYCl9dGhyb3cgRyhlLnNvdXJjZSxyLCJVbnRlcm1pbmF0ZWQgc3RyaW5nLiIpfWZ1bmN0aW9uIEVuKGUsdCl7Y29uc3Qgbj1lLnNvdXJjZS5ib2R5O2xldCBpPTAscj0zO2Zvcig7cjwxMjspe2NvbnN0IHM9bi5jaGFyQ29kZUF0KHQrcisrKTtpZihzPT09MTI1KXtpZihyPDV8fCFoZShpKSlicmVhaztyZXR1cm57dmFsdWU6U3RyaW5nLmZyb21Db2RlUG9pbnQoaSksc2l6ZTpyfX1pZihpPWk8PDR8VGUocyksaTwwKWJyZWFrfXRocm93IEcoZS5zb3VyY2UsdCxgSW52YWxpZCBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZTogIiR7bi5zbGljZSh0LHQrcil9Ii5gKX1mdW5jdGlvbiBfbihlLHQpe2NvbnN0IG49ZS5zb3VyY2UuYm9keSxpPU50KG4sdCsyKTtpZihoZShpKSlyZXR1cm57dmFsdWU6U3RyaW5nLmZyb21Db2RlUG9pbnQoaSksc2l6ZTo2fTtpZihUdChpKSYmbi5jaGFyQ29kZUF0KHQrNik9PT05MiYmbi5jaGFyQ29kZUF0KHQrNyk9PT0xMTcpe2NvbnN0IHI9TnQobix0KzgpO2lmKGJ0KHIpKXJldHVybnt2YWx1ZTpTdHJpbmcuZnJvbUNvZGVQb2ludChpLHIpLHNpemU6MTJ9fXRocm93IEcoZS5zb3VyY2UsdCxgSW52YWxpZCBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZTogIiR7bi5zbGljZSh0LHQrNil9Ii5gKX1mdW5jdGlvbiBOdChlLHQpe3JldHVybiBUZShlLmNoYXJDb2RlQXQodCkpPDwxMnxUZShlLmNoYXJDb2RlQXQodCsxKSk8PDh8VGUoZS5jaGFyQ29kZUF0KHQrMikpPDw0fFRlKGUuY2hhckNvZGVBdCh0KzMpKX1mdW5jdGlvbiBUZShlKXtyZXR1cm4gZT49NDgmJmU8PTU3P2UtNDg6ZT49NjUmJmU8PTcwP2UtNTU6ZT49OTcmJmU8PTEwMj9lLTg3Oi0xfWZ1bmN0aW9uIFRuKGUsdCl7Y29uc3Qgbj1lLnNvdXJjZS5ib2R5O3N3aXRjaChuLmNoYXJDb2RlQXQodCsxKSl7Y2FzZSAzNDpyZXR1cm57dmFsdWU6JyInLHNpemU6Mn07Y2FzZSA5MjpyZXR1cm57dmFsdWU6IlxcIixzaXplOjJ9O2Nhc2UgNDc6cmV0dXJue3ZhbHVlOiIvIixzaXplOjJ9O2Nhc2UgOTg6cmV0dXJue3ZhbHVlOiJcYiIsc2l6ZToyfTtjYXNlIDEwMjpyZXR1cm57dmFsdWU6IlxmIixzaXplOjJ9O2Nhc2UgMTEwOnJldHVybnt2YWx1ZTpgCmAsc2l6ZToyfTtjYXNlIDExNDpyZXR1cm57dmFsdWU6IlxyIixzaXplOjJ9O2Nhc2UgMTE2OnJldHVybnt2YWx1ZToiCSIsc2l6ZToyfX10aHJvdyBHKGUuc291cmNlLHQsYEludmFsaWQgY2hhcmFjdGVyIGVzY2FwZSBzZXF1ZW5jZTogIiR7bi5zbGljZSh0LHQrMil9Ii5gKX1mdW5jdGlvbiBibihlLHQpe2NvbnN0IG49ZS5zb3VyY2UuYm9keSxpPW4ubGVuZ3RoO2xldCByPWUubGluZVN0YXJ0LHM9dCszLG89cyxjPSIiO2NvbnN0IGY9W107Zm9yKDtzPGk7KXtjb25zdCBkPW4uY2hhckNvZGVBdChzKTtpZihkPT09MzQmJm4uY2hhckNvZGVBdChzKzEpPT09MzQmJm4uY2hhckNvZGVBdChzKzIpPT09MzQpe2MrPW4uc2xpY2UobyxzKSxmLnB1c2goYyk7Y29uc3QgdT1VKGUsbC5CTE9DS19TVFJJTkcsdCxzKzMsbG4oZikuam9pbihgCmApKTtyZXR1cm4gZS5saW5lKz1mLmxlbmd0aC0xLGUubGluZVN0YXJ0PXIsdX1pZihkPT09OTImJm4uY2hhckNvZGVBdChzKzEpPT09MzQmJm4uY2hhckNvZGVBdChzKzIpPT09MzQmJm4uY2hhckNvZGVBdChzKzMpPT09MzQpe2MrPW4uc2xpY2UobyxzKSxvPXMrMSxzKz00O2NvbnRpbnVlfWlmKGQ9PT0xMHx8ZD09PTEzKXtjKz1uLnNsaWNlKG8scyksZi5wdXNoKGMpLGQ9PT0xMyYmbi5jaGFyQ29kZUF0KHMrMSk9PT0xMD9zKz0yOisrcyxjPSIiLG89cyxyPXM7Y29udGludWV9aWYoaGUoZCkpKytzO2Vsc2UgaWYoT2UobixzKSlzKz0yO2Vsc2UgdGhyb3cgRyhlLnNvdXJjZSxzLGBJbnZhbGlkIGNoYXJhY3RlciB3aXRoaW4gU3RyaW5nOiAke3VlKGUscyl9LmApfXRocm93IEcoZS5zb3VyY2UscywiVW50ZXJtaW5hdGVkIHN0cmluZy4iKX1mdW5jdGlvbiBObihlLHQpe2NvbnN0IG49ZS5zb3VyY2UuYm9keSxpPW4ubGVuZ3RoO2xldCByPXQrMTtmb3IoO3I8aTspe2NvbnN0IHM9bi5jaGFyQ29kZUF0KHIpO2lmKHVuKHMpKSsrcjtlbHNlIGJyZWFrfXJldHVybiBVKGUsbC5OQU1FLHQscixuLnNsaWNlKHQscikpfWNvbnN0IHhuPTEwLHh0PTI7ZnVuY3Rpb24gWWUoZSl7cmV0dXJuIHdlKGUsW10pfWZ1bmN0aW9uIHdlKGUsdCl7c3dpdGNoKHR5cGVvZiBlKXtjYXNlInN0cmluZyI6cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO2Nhc2UiZnVuY3Rpb24iOnJldHVybiBlLm5hbWU/YFtmdW5jdGlvbiAke2UubmFtZX1dYDoiW2Z1bmN0aW9uXSI7Y2FzZSJvYmplY3QiOnJldHVybiBBbihlLHQpO2RlZmF1bHQ6cmV0dXJuIFN0cmluZyhlKX19ZnVuY3Rpb24gQW4oZSx0KXtpZihlPT09bnVsbClyZXR1cm4ibnVsbCI7aWYodC5pbmNsdWRlcyhlKSlyZXR1cm4iW0NpcmN1bGFyXSI7Y29uc3Qgbj1bLi4udCxlXTtpZihJbihlKSl7Y29uc3QgaT1lLnRvSlNPTigpO2lmKGkhPT1lKXJldHVybiB0eXBlb2YgaT09InN0cmluZyI/aTp3ZShpLG4pfWVsc2UgaWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gT24oZSxuKTtyZXR1cm4gU24oZSxuKX1mdW5jdGlvbiBJbihlKXtyZXR1cm4gdHlwZW9mIGUudG9KU09OPT0iZnVuY3Rpb24ifWZ1bmN0aW9uIFNuKGUsdCl7Y29uc3Qgbj1PYmplY3QuZW50cmllcyhlKTtyZXR1cm4gbi5sZW5ndGg9PT0wPyJ7fSI6dC5sZW5ndGg+eHQ/IlsiK3duKGUpKyJdIjoieyAiK24ubWFwKChbcixzXSk9PnIrIjogIit3ZShzLHQpKS5qb2luKCIsICIpKyIgfSJ9ZnVuY3Rpb24gT24oZSx0KXtpZihlLmxlbmd0aD09PTApcmV0dXJuIltdIjtpZih0Lmxlbmd0aD54dClyZXR1cm4iW0FycmF5XSI7Y29uc3Qgbj1NYXRoLm1pbih4bixlLmxlbmd0aCksaT1lLmxlbmd0aC1uLHI9W107Zm9yKGxldCBzPTA7czxuOysrcylyLnB1c2god2UoZVtzXSx0KSk7cmV0dXJuIGk9PT0xP3IucHVzaCgiLi4uIDEgbW9yZSBpdGVtIik6aT4xJiZyLnB1c2goYC4uLiAke2l9IG1vcmUgaXRlbXNgKSwiWyIrci5qb2luKCIsICIpKyJdIn1mdW5jdGlvbiB3bihlKXtjb25zdCB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5yZXBsYWNlKC9eXFtvYmplY3QgLywiIikucmVwbGFjZSgvXSQvLCIiKTtpZih0PT09Ik9iamVjdCImJnR5cGVvZiBlLmNvbnN0cnVjdG9yPT0iZnVuY3Rpb24iKXtjb25zdCBuPWUuY29uc3RydWN0b3IubmFtZTtpZih0eXBlb2Ygbj09InN0cmluZyImJm4hPT0iIilyZXR1cm4gbn1yZXR1cm4gdH1jb25zdCBEbj1nbG9iYWxUaGlzLnByb2Nlc3MmJnByb2Nlc3MuZW52Lk5PREVfRU5WPT09InByb2R1Y3Rpb24iP2Z1bmN0aW9uKHQsbil7cmV0dXJuIHQgaW5zdGFuY2VvZiBufTpmdW5jdGlvbih0LG4pe2lmKHQgaW5zdGFuY2VvZiBuKXJldHVybiEwO2lmKHR5cGVvZiB0PT0ib2JqZWN0IiYmdCE9PW51bGwpe3ZhciBpO2NvbnN0IHI9bi5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSxzPVN5bWJvbC50b1N0cmluZ1RhZyBpbiB0P3RbU3ltYm9sLnRvU3RyaW5nVGFnXTooaT10LmNvbnN0cnVjdG9yKT09PW51bGx8fGk9PT12b2lkIDA/dm9pZCAwOmkubmFtZTtpZihyPT09cyl7Y29uc3Qgbz1ZZSh0KTt0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCB1c2UgJHtyfSAiJHtvfSIgZnJvbSBhbm90aGVyIG1vZHVsZSBvciByZWFsbS4KCkVuc3VyZSB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGluc3RhbmNlIG9mICJncmFwaHFsIiBpbiB0aGUgbm9kZV9tb2R1bGVzCmRpcmVjdG9yeS4gSWYgZGlmZmVyZW50IHZlcnNpb25zIG9mICJncmFwaHFsIiBhcmUgdGhlIGRlcGVuZGVuY2llcyBvZiBvdGhlcgpyZWxpZWQgb24gbW9kdWxlcywgdXNlICJyZXNvbHV0aW9ucyIgdG8gZW5zdXJlIG9ubHkgb25lIHZlcnNpb24gaXMgaW5zdGFsbGVkLgoKaHR0cHM6Ly95YXJucGtnLmNvbS9lbi9kb2NzL3NlbGVjdGl2ZS12ZXJzaW9uLXJlc29sdXRpb25zCgpEdXBsaWNhdGUgImdyYXBocWwiIG1vZHVsZXMgY2Fubm90IGJlIHVzZWQgYXQgdGhlIHNhbWUgdGltZSBzaW5jZSBkaWZmZXJlbnQKdmVyc2lvbnMgbWF5IGhhdmUgZGlmZmVyZW50IGNhcGFiaWxpdGllcyBhbmQgYmVoYXZpb3IuIFRoZSBkYXRhIGZyb20gb25lCnZlcnNpb24gdXNlZCBpbiB0aGUgZnVuY3Rpb24gZnJvbSBhbm90aGVyIGNvdWxkIHByb2R1Y2UgY29uZnVzaW5nIGFuZApzcHVyaW91cyByZXN1bHRzLmApfX1yZXR1cm4hMX07Y2xhc3MgQXR7Y29uc3RydWN0b3IodCxuPSJHcmFwaFFMIHJlcXVlc3QiLGk9e2xpbmU6MSxjb2x1bW46MX0pe3R5cGVvZiB0PT0ic3RyaW5nInx8YWUoITEsYEJvZHkgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQ6ICR7WWUodCl9LmApLHRoaXMuYm9keT10LHRoaXMubmFtZT1uLHRoaXMubG9jYXRpb25PZmZzZXQ9aSx0aGlzLmxvY2F0aW9uT2Zmc2V0LmxpbmU+MHx8YWUoITEsImxpbmUgaW4gbG9jYXRpb25PZmZzZXQgaXMgMS1pbmRleGVkIGFuZCBtdXN0IGJlIHBvc2l0aXZlLiIpLHRoaXMubG9jYXRpb25PZmZzZXQuY29sdW1uPjB8fGFlKCExLCJjb2x1bW4gaW4gbG9jYXRpb25PZmZzZXQgaXMgMS1pbmRleGVkIGFuZCBtdXN0IGJlIHBvc2l0aXZlLiIpfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIlNvdXJjZSJ9fWZ1bmN0aW9uIENuKGUpe3JldHVybiBEbihlLEF0KX1mdW5jdGlvbiBJdChlLHQpe2NvbnN0IG49bmV3IGtuKGUsdCksaT1uLnBhcnNlRG9jdW1lbnQoKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGksInRva2VuQ291bnQiLHtlbnVtZXJhYmxlOiExLHZhbHVlOm4udG9rZW5Db3VudH0pLGl9Y2xhc3Mga257Y29uc3RydWN0b3IodCxuPXt9KXtjb25zdCBpPUNuKHQpP3Q6bmV3IEF0KHQpO3RoaXMuX2xleGVyPW5ldyBkbihpKSx0aGlzLl9vcHRpb25zPW4sdGhpcy5fdG9rZW5Db3VudGVyPTB9Z2V0IHRva2VuQ291bnQoKXtyZXR1cm4gdGhpcy5fdG9rZW5Db3VudGVyfXBhcnNlTmFtZSgpe2NvbnN0IHQ9dGhpcy5leHBlY3RUb2tlbihsLk5BTUUpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULk5BTUUsdmFsdWU6dC52YWx1ZX0pfXBhcnNlRG9jdW1lbnQoKXtyZXR1cm4gdGhpcy5ub2RlKHRoaXMuX2xleGVyLnRva2VuLHtraW5kOlQuRE9DVU1FTlQsZGVmaW5pdGlvbnM6dGhpcy5tYW55KGwuU09GLHRoaXMucGFyc2VEZWZpbml0aW9uLGwuRU9GKX0pfXBhcnNlRGVmaW5pdGlvbigpe2lmKHRoaXMucGVlayhsLkJSQUNFX0wpKXJldHVybiB0aGlzLnBhcnNlT3BlcmF0aW9uRGVmaW5pdGlvbigpO2NvbnN0IHQ9dGhpcy5wZWVrRGVzY3JpcHRpb24oKSxuPXQ/dGhpcy5fbGV4ZXIubG9va2FoZWFkKCk6dGhpcy5fbGV4ZXIudG9rZW47aWYobi5raW5kPT09bC5OQU1FKXtzd2l0Y2gobi52YWx1ZSl7Y2FzZSJzY2hlbWEiOnJldHVybiB0aGlzLnBhcnNlU2NoZW1hRGVmaW5pdGlvbigpO2Nhc2Uic2NhbGFyIjpyZXR1cm4gdGhpcy5wYXJzZVNjYWxhclR5cGVEZWZpbml0aW9uKCk7Y2FzZSJ0eXBlIjpyZXR1cm4gdGhpcy5wYXJzZU9iamVjdFR5cGVEZWZpbml0aW9uKCk7Y2FzZSJpbnRlcmZhY2UiOnJldHVybiB0aGlzLnBhcnNlSW50ZXJmYWNlVHlwZURlZmluaXRpb24oKTtjYXNlInVuaW9uIjpyZXR1cm4gdGhpcy5wYXJzZVVuaW9uVHlwZURlZmluaXRpb24oKTtjYXNlImVudW0iOnJldHVybiB0aGlzLnBhcnNlRW51bVR5cGVEZWZpbml0aW9uKCk7Y2FzZSJpbnB1dCI6cmV0dXJuIHRoaXMucGFyc2VJbnB1dE9iamVjdFR5cGVEZWZpbml0aW9uKCk7Y2FzZSJkaXJlY3RpdmUiOnJldHVybiB0aGlzLnBhcnNlRGlyZWN0aXZlRGVmaW5pdGlvbigpfWlmKHQpdGhyb3cgRyh0aGlzLl9sZXhlci5zb3VyY2UsdGhpcy5fbGV4ZXIudG9rZW4uc3RhcnQsIlVuZXhwZWN0ZWQgZGVzY3JpcHRpb24sIGRlc2NyaXB0aW9ucyBhcmUgc3VwcG9ydGVkIG9ubHkgb24gdHlwZSBkZWZpbml0aW9ucy4iKTtzd2l0Y2gobi52YWx1ZSl7Y2FzZSJxdWVyeSI6Y2FzZSJtdXRhdGlvbiI6Y2FzZSJzdWJzY3JpcHRpb24iOnJldHVybiB0aGlzLnBhcnNlT3BlcmF0aW9uRGVmaW5pdGlvbigpO2Nhc2UiZnJhZ21lbnQiOnJldHVybiB0aGlzLnBhcnNlRnJhZ21lbnREZWZpbml0aW9uKCk7Y2FzZSJleHRlbmQiOnJldHVybiB0aGlzLnBhcnNlVHlwZVN5c3RlbUV4dGVuc2lvbigpfX10aHJvdyB0aGlzLnVuZXhwZWN0ZWQobil9cGFyc2VPcGVyYXRpb25EZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjtpZih0aGlzLnBlZWsobC5CUkFDRV9MKSlyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6VC5PUEVSQVRJT05fREVGSU5JVElPTixvcGVyYXRpb246ZmUuUVVFUlksbmFtZTp2b2lkIDAsdmFyaWFibGVEZWZpbml0aW9uczpbXSxkaXJlY3RpdmVzOltdLHNlbGVjdGlvblNldDp0aGlzLnBhcnNlU2VsZWN0aW9uU2V0KCl9KTtjb25zdCBuPXRoaXMucGFyc2VPcGVyYXRpb25UeXBlKCk7bGV0IGk7cmV0dXJuIHRoaXMucGVlayhsLk5BTUUpJiYoaT10aGlzLnBhcnNlTmFtZSgpKSx0aGlzLm5vZGUodCx7a2luZDpULk9QRVJBVElPTl9ERUZJTklUSU9OLG9wZXJhdGlvbjpuLG5hbWU6aSx2YXJpYWJsZURlZmluaXRpb25zOnRoaXMucGFyc2VWYXJpYWJsZURlZmluaXRpb25zKCksZGlyZWN0aXZlczp0aGlzLnBhcnNlRGlyZWN0aXZlcyghMSksc2VsZWN0aW9uU2V0OnRoaXMucGFyc2VTZWxlY3Rpb25TZXQoKX0pfXBhcnNlT3BlcmF0aW9uVHlwZSgpe2NvbnN0IHQ9dGhpcy5leHBlY3RUb2tlbihsLk5BTUUpO3N3aXRjaCh0LnZhbHVlKXtjYXNlInF1ZXJ5IjpyZXR1cm4gZmUuUVVFUlk7Y2FzZSJtdXRhdGlvbiI6cmV0dXJuIGZlLk1VVEFUSU9OO2Nhc2Uic3Vic2NyaXB0aW9uIjpyZXR1cm4gZmUuU1VCU0NSSVBUSU9OfXRocm93IHRoaXMudW5leHBlY3RlZCh0KX1wYXJzZVZhcmlhYmxlRGVmaW5pdGlvbnMoKXtyZXR1cm4gdGhpcy5vcHRpb25hbE1hbnkobC5QQVJFTl9MLHRoaXMucGFyc2VWYXJpYWJsZURlZmluaXRpb24sbC5QQVJFTl9SKX1wYXJzZVZhcmlhYmxlRGVmaW5pdGlvbigpe3JldHVybiB0aGlzLm5vZGUodGhpcy5fbGV4ZXIudG9rZW4se2tpbmQ6VC5WQVJJQUJMRV9ERUZJTklUSU9OLHZhcmlhYmxlOnRoaXMucGFyc2VWYXJpYWJsZSgpLHR5cGU6KHRoaXMuZXhwZWN0VG9rZW4obC5DT0xPTiksdGhpcy5wYXJzZVR5cGVSZWZlcmVuY2UoKSksZGVmYXVsdFZhbHVlOnRoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbihsLkVRVUFMUyk/dGhpcy5wYXJzZUNvbnN0VmFsdWVMaXRlcmFsKCk6dm9pZCAwLGRpcmVjdGl2ZXM6dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpfSl9cGFyc2VWYXJpYWJsZSgpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47cmV0dXJuIHRoaXMuZXhwZWN0VG9rZW4obC5ET0xMQVIpLHRoaXMubm9kZSh0LHtraW5kOlQuVkFSSUFCTEUsbmFtZTp0aGlzLnBhcnNlTmFtZSgpfSl9cGFyc2VTZWxlY3Rpb25TZXQoKXtyZXR1cm4gdGhpcy5ub2RlKHRoaXMuX2xleGVyLnRva2VuLHtraW5kOlQuU0VMRUNUSU9OX1NFVCxzZWxlY3Rpb25zOnRoaXMubWFueShsLkJSQUNFX0wsdGhpcy5wYXJzZVNlbGVjdGlvbixsLkJSQUNFX1IpfSl9cGFyc2VTZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5wZWVrKGwuU1BSRUFEKT90aGlzLnBhcnNlRnJhZ21lbnQoKTp0aGlzLnBhcnNlRmllbGQoKX1wYXJzZUZpZWxkKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VOYW1lKCk7bGV0IGkscjtyZXR1cm4gdGhpcy5leHBlY3RPcHRpb25hbFRva2VuKGwuQ09MT04pPyhpPW4scj10aGlzLnBhcnNlTmFtZSgpKTpyPW4sdGhpcy5ub2RlKHQse2tpbmQ6VC5GSUVMRCxhbGlhczppLG5hbWU6cixhcmd1bWVudHM6dGhpcy5wYXJzZUFyZ3VtZW50cyghMSksZGlyZWN0aXZlczp0aGlzLnBhcnNlRGlyZWN0aXZlcyghMSksc2VsZWN0aW9uU2V0OnRoaXMucGVlayhsLkJSQUNFX0wpP3RoaXMucGFyc2VTZWxlY3Rpb25TZXQoKTp2b2lkIDB9KX1wYXJzZUFyZ3VtZW50cyh0KXtjb25zdCBuPXQ/dGhpcy5wYXJzZUNvbnN0QXJndW1lbnQ6dGhpcy5wYXJzZUFyZ3VtZW50O3JldHVybiB0aGlzLm9wdGlvbmFsTWFueShsLlBBUkVOX0wsbixsLlBBUkVOX1IpfXBhcnNlQXJndW1lbnQodD0hMSl7Y29uc3Qgbj10aGlzLl9sZXhlci50b2tlbixpPXRoaXMucGFyc2VOYW1lKCk7cmV0dXJuIHRoaXMuZXhwZWN0VG9rZW4obC5DT0xPTiksdGhpcy5ub2RlKG4se2tpbmQ6VC5BUkdVTUVOVCxuYW1lOmksdmFsdWU6dGhpcy5wYXJzZVZhbHVlTGl0ZXJhbCh0KX0pfXBhcnNlQ29uc3RBcmd1bWVudCgpe3JldHVybiB0aGlzLnBhcnNlQXJndW1lbnQoITApfXBhcnNlRnJhZ21lbnQoKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO3RoaXMuZXhwZWN0VG9rZW4obC5TUFJFQUQpO2NvbnN0IG49dGhpcy5leHBlY3RPcHRpb25hbEtleXdvcmQoIm9uIik7cmV0dXJuIW4mJnRoaXMucGVlayhsLk5BTUUpP3RoaXMubm9kZSh0LHtraW5kOlQuRlJBR01FTlRfU1BSRUFELG5hbWU6dGhpcy5wYXJzZUZyYWdtZW50TmFtZSgpLGRpcmVjdGl2ZXM6dGhpcy5wYXJzZURpcmVjdGl2ZXMoITEpfSk6dGhpcy5ub2RlKHQse2tpbmQ6VC5JTkxJTkVfRlJBR01FTlQsdHlwZUNvbmRpdGlvbjpuP3RoaXMucGFyc2VOYW1lZFR5cGUoKTp2b2lkIDAsZGlyZWN0aXZlczp0aGlzLnBhcnNlRGlyZWN0aXZlcyghMSksc2VsZWN0aW9uU2V0OnRoaXMucGFyc2VTZWxlY3Rpb25TZXQoKX0pfXBhcnNlRnJhZ21lbnREZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjtyZXR1cm4gdGhpcy5leHBlY3RLZXl3b3JkKCJmcmFnbWVudCIpLHRoaXMuX29wdGlvbnMuYWxsb3dMZWdhY3lGcmFnbWVudFZhcmlhYmxlcz09PSEwP3RoaXMubm9kZSh0LHtraW5kOlQuRlJBR01FTlRfREVGSU5JVElPTixuYW1lOnRoaXMucGFyc2VGcmFnbWVudE5hbWUoKSx2YXJpYWJsZURlZmluaXRpb25zOnRoaXMucGFyc2VWYXJpYWJsZURlZmluaXRpb25zKCksdHlwZUNvbmRpdGlvbjoodGhpcy5leHBlY3RLZXl3b3JkKCJvbiIpLHRoaXMucGFyc2VOYW1lZFR5cGUoKSksZGlyZWN0aXZlczp0aGlzLnBhcnNlRGlyZWN0aXZlcyghMSksc2VsZWN0aW9uU2V0OnRoaXMucGFyc2VTZWxlY3Rpb25TZXQoKX0pOnRoaXMubm9kZSh0LHtraW5kOlQuRlJBR01FTlRfREVGSU5JVElPTixuYW1lOnRoaXMucGFyc2VGcmFnbWVudE5hbWUoKSx0eXBlQ29uZGl0aW9uOih0aGlzLmV4cGVjdEtleXdvcmQoIm9uIiksdGhpcy5wYXJzZU5hbWVkVHlwZSgpKSxkaXJlY3RpdmVzOnRoaXMucGFyc2VEaXJlY3RpdmVzKCExKSxzZWxlY3Rpb25TZXQ6dGhpcy5wYXJzZVNlbGVjdGlvblNldCgpfSl9cGFyc2VGcmFnbWVudE5hbWUoKXtpZih0aGlzLl9sZXhlci50b2tlbi52YWx1ZT09PSJvbiIpdGhyb3cgdGhpcy51bmV4cGVjdGVkKCk7cmV0dXJuIHRoaXMucGFyc2VOYW1lKCl9cGFyc2VWYWx1ZUxpdGVyYWwodCl7Y29uc3Qgbj10aGlzLl9sZXhlci50b2tlbjtzd2l0Y2gobi5raW5kKXtjYXNlIGwuQlJBQ0tFVF9MOnJldHVybiB0aGlzLnBhcnNlTGlzdCh0KTtjYXNlIGwuQlJBQ0VfTDpyZXR1cm4gdGhpcy5wYXJzZU9iamVjdCh0KTtjYXNlIGwuSU5UOnJldHVybiB0aGlzLmFkdmFuY2VMZXhlcigpLHRoaXMubm9kZShuLHtraW5kOlQuSU5ULHZhbHVlOm4udmFsdWV9KTtjYXNlIGwuRkxPQVQ6cmV0dXJuIHRoaXMuYWR2YW5jZUxleGVyKCksdGhpcy5ub2RlKG4se2tpbmQ6VC5GTE9BVCx2YWx1ZTpuLnZhbHVlfSk7Y2FzZSBsLlNUUklORzpjYXNlIGwuQkxPQ0tfU1RSSU5HOnJldHVybiB0aGlzLnBhcnNlU3RyaW5nTGl0ZXJhbCgpO2Nhc2UgbC5OQU1FOnN3aXRjaCh0aGlzLmFkdmFuY2VMZXhlcigpLG4udmFsdWUpe2Nhc2UidHJ1ZSI6cmV0dXJuIHRoaXMubm9kZShuLHtraW5kOlQuQk9PTEVBTix2YWx1ZTohMH0pO2Nhc2UiZmFsc2UiOnJldHVybiB0aGlzLm5vZGUobix7a2luZDpULkJPT0xFQU4sdmFsdWU6ITF9KTtjYXNlIm51bGwiOnJldHVybiB0aGlzLm5vZGUobix7a2luZDpULk5VTEx9KTtkZWZhdWx0OnJldHVybiB0aGlzLm5vZGUobix7a2luZDpULkVOVU0sdmFsdWU6bi52YWx1ZX0pfWNhc2UgbC5ET0xMQVI6aWYodClpZih0aGlzLmV4cGVjdFRva2VuKGwuRE9MTEFSKSx0aGlzLl9sZXhlci50b2tlbi5raW5kPT09bC5OQU1FKXtjb25zdCBpPXRoaXMuX2xleGVyLnRva2VuLnZhbHVlO3Rocm93IEcodGhpcy5fbGV4ZXIuc291cmNlLG4uc3RhcnQsYFVuZXhwZWN0ZWQgdmFyaWFibGUgIiQke2l9IiBpbiBjb25zdGFudCB2YWx1ZS5gKX1lbHNlIHRocm93IHRoaXMudW5leHBlY3RlZChuKTtyZXR1cm4gdGhpcy5wYXJzZVZhcmlhYmxlKCk7ZGVmYXVsdDp0aHJvdyB0aGlzLnVuZXhwZWN0ZWQoKX19cGFyc2VDb25zdFZhbHVlTGl0ZXJhbCgpe3JldHVybiB0aGlzLnBhcnNlVmFsdWVMaXRlcmFsKCEwKX1wYXJzZVN0cmluZ0xpdGVyYWwoKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO3JldHVybiB0aGlzLmFkdmFuY2VMZXhlcigpLHRoaXMubm9kZSh0LHtraW5kOlQuU1RSSU5HLHZhbHVlOnQudmFsdWUsYmxvY2s6dC5raW5kPT09bC5CTE9DS19TVFJJTkd9KX1wYXJzZUxpc3QodCl7Y29uc3Qgbj0oKT0+dGhpcy5wYXJzZVZhbHVlTGl0ZXJhbCh0KTtyZXR1cm4gdGhpcy5ub2RlKHRoaXMuX2xleGVyLnRva2VuLHtraW5kOlQuTElTVCx2YWx1ZXM6dGhpcy5hbnkobC5CUkFDS0VUX0wsbixsLkJSQUNLRVRfUil9KX1wYXJzZU9iamVjdCh0KXtjb25zdCBuPSgpPT50aGlzLnBhcnNlT2JqZWN0RmllbGQodCk7cmV0dXJuIHRoaXMubm9kZSh0aGlzLl9sZXhlci50b2tlbix7a2luZDpULk9CSkVDVCxmaWVsZHM6dGhpcy5hbnkobC5CUkFDRV9MLG4sbC5CUkFDRV9SKX0pfXBhcnNlT2JqZWN0RmllbGQodCl7Y29uc3Qgbj10aGlzLl9sZXhlci50b2tlbixpPXRoaXMucGFyc2VOYW1lKCk7cmV0dXJuIHRoaXMuZXhwZWN0VG9rZW4obC5DT0xPTiksdGhpcy5ub2RlKG4se2tpbmQ6VC5PQkpFQ1RfRklFTEQsbmFtZTppLHZhbHVlOnRoaXMucGFyc2VWYWx1ZUxpdGVyYWwodCl9KX1wYXJzZURpcmVjdGl2ZXModCl7Y29uc3Qgbj1bXTtmb3IoO3RoaXMucGVlayhsLkFUKTspbi5wdXNoKHRoaXMucGFyc2VEaXJlY3RpdmUodCkpO3JldHVybiBufXBhcnNlQ29uc3REaXJlY3RpdmVzKCl7cmV0dXJuIHRoaXMucGFyc2VEaXJlY3RpdmVzKCEwKX1wYXJzZURpcmVjdGl2ZSh0KXtjb25zdCBuPXRoaXMuX2xleGVyLnRva2VuO3JldHVybiB0aGlzLmV4cGVjdFRva2VuKGwuQVQpLHRoaXMubm9kZShuLHtraW5kOlQuRElSRUNUSVZFLG5hbWU6dGhpcy5wYXJzZU5hbWUoKSxhcmd1bWVudHM6dGhpcy5wYXJzZUFyZ3VtZW50cyh0KX0pfXBhcnNlVHlwZVJlZmVyZW5jZSgpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47bGV0IG47aWYodGhpcy5leHBlY3RPcHRpb25hbFRva2VuKGwuQlJBQ0tFVF9MKSl7Y29uc3QgaT10aGlzLnBhcnNlVHlwZVJlZmVyZW5jZSgpO3RoaXMuZXhwZWN0VG9rZW4obC5CUkFDS0VUX1IpLG49dGhpcy5ub2RlKHQse2tpbmQ6VC5MSVNUX1RZUEUsdHlwZTppfSl9ZWxzZSBuPXRoaXMucGFyc2VOYW1lZFR5cGUoKTtyZXR1cm4gdGhpcy5leHBlY3RPcHRpb25hbFRva2VuKGwuQkFORyk/dGhpcy5ub2RlKHQse2tpbmQ6VC5OT05fTlVMTF9UWVBFLHR5cGU6bn0pOm59cGFyc2VOYW1lZFR5cGUoKXtyZXR1cm4gdGhpcy5ub2RlKHRoaXMuX2xleGVyLnRva2VuLHtraW5kOlQuTkFNRURfVFlQRSxuYW1lOnRoaXMucGFyc2VOYW1lKCl9KX1wZWVrRGVzY3JpcHRpb24oKXtyZXR1cm4gdGhpcy5wZWVrKGwuU1RSSU5HKXx8dGhpcy5wZWVrKGwuQkxPQ0tfU1RSSU5HKX1wYXJzZURlc2NyaXB0aW9uKCl7aWYodGhpcy5wZWVrRGVzY3JpcHRpb24oKSlyZXR1cm4gdGhpcy5wYXJzZVN0cmluZ0xpdGVyYWwoKX1wYXJzZVNjaGVtYURlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZURlc2NyaXB0aW9uKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJzY2hlbWEiKTtjb25zdCBpPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxyPXRoaXMubWFueShsLkJSQUNFX0wsdGhpcy5wYXJzZU9wZXJhdGlvblR5cGVEZWZpbml0aW9uLGwuQlJBQ0VfUik7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuU0NIRU1BX0RFRklOSVRJT04sZGVzY3JpcHRpb246bixkaXJlY3RpdmVzOmksb3BlcmF0aW9uVHlwZXM6cn0pfXBhcnNlT3BlcmF0aW9uVHlwZURlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZU9wZXJhdGlvblR5cGUoKTt0aGlzLmV4cGVjdFRva2VuKGwuQ09MT04pO2NvbnN0IGk9dGhpcy5wYXJzZU5hbWVkVHlwZSgpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULk9QRVJBVElPTl9UWVBFX0RFRklOSVRJT04sb3BlcmF0aW9uOm4sdHlwZTppfSl9cGFyc2VTY2FsYXJUeXBlRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKTt0aGlzLmV4cGVjdEtleXdvcmQoInNjYWxhciIpO2NvbnN0IGk9dGhpcy5wYXJzZU5hbWUoKSxyPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6VC5TQ0FMQVJfVFlQRV9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOm4sbmFtZTppLGRpcmVjdGl2ZXM6cn0pfXBhcnNlT2JqZWN0VHlwZURlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZURlc2NyaXB0aW9uKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJ0eXBlIik7Y29uc3QgaT10aGlzLnBhcnNlTmFtZSgpLHI9dGhpcy5wYXJzZUltcGxlbWVudHNJbnRlcmZhY2VzKCkscz10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCksbz10aGlzLnBhcnNlRmllbGRzRGVmaW5pdGlvbigpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULk9CSkVDVF9UWVBFX0RFRklOSVRJT04sZGVzY3JpcHRpb246bixuYW1lOmksaW50ZXJmYWNlczpyLGRpcmVjdGl2ZXM6cyxmaWVsZHM6b30pfXBhcnNlSW1wbGVtZW50c0ludGVyZmFjZXMoKXtyZXR1cm4gdGhpcy5leHBlY3RPcHRpb25hbEtleXdvcmQoImltcGxlbWVudHMiKT90aGlzLmRlbGltaXRlZE1hbnkobC5BTVAsdGhpcy5wYXJzZU5hbWVkVHlwZSk6W119cGFyc2VGaWVsZHNEZWZpbml0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9uYWxNYW55KGwuQlJBQ0VfTCx0aGlzLnBhcnNlRmllbGREZWZpbml0aW9uLGwuQlJBQ0VfUil9cGFyc2VGaWVsZERlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZURlc2NyaXB0aW9uKCksaT10aGlzLnBhcnNlTmFtZSgpLHI9dGhpcy5wYXJzZUFyZ3VtZW50RGVmcygpO3RoaXMuZXhwZWN0VG9rZW4obC5DT0xPTik7Y29uc3Qgcz10aGlzLnBhcnNlVHlwZVJlZmVyZW5jZSgpLG89dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULkZJRUxEX0RFRklOSVRJT04sZGVzY3JpcHRpb246bixuYW1lOmksYXJndW1lbnRzOnIsdHlwZTpzLGRpcmVjdGl2ZXM6b30pfXBhcnNlQXJndW1lbnREZWZzKCl7cmV0dXJuIHRoaXMub3B0aW9uYWxNYW55KGwuUEFSRU5fTCx0aGlzLnBhcnNlSW5wdXRWYWx1ZURlZixsLlBBUkVOX1IpfXBhcnNlSW5wdXRWYWx1ZURlZigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKSxpPXRoaXMucGFyc2VOYW1lKCk7dGhpcy5leHBlY3RUb2tlbihsLkNPTE9OKTtjb25zdCByPXRoaXMucGFyc2VUeXBlUmVmZXJlbmNlKCk7bGV0IHM7dGhpcy5leHBlY3RPcHRpb25hbFRva2VuKGwuRVFVQUxTKSYmKHM9dGhpcy5wYXJzZUNvbnN0VmFsdWVMaXRlcmFsKCkpO2NvbnN0IG89dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULklOUFVUX1ZBTFVFX0RFRklOSVRJT04sZGVzY3JpcHRpb246bixuYW1lOmksdHlwZTpyLGRlZmF1bHRWYWx1ZTpzLGRpcmVjdGl2ZXM6b30pfXBhcnNlSW50ZXJmYWNlVHlwZURlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZURlc2NyaXB0aW9uKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJpbnRlcmZhY2UiKTtjb25zdCBpPXRoaXMucGFyc2VOYW1lKCkscj10aGlzLnBhcnNlSW1wbGVtZW50c0ludGVyZmFjZXMoKSxzPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxvPXRoaXMucGFyc2VGaWVsZHNEZWZpbml0aW9uKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuSU5URVJGQUNFX1RZUEVfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLG5hbWU6aSxpbnRlcmZhY2VzOnIsZGlyZWN0aXZlczpzLGZpZWxkczpvfSl9cGFyc2VVbmlvblR5cGVEZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VEZXNjcmlwdGlvbigpO3RoaXMuZXhwZWN0S2V5d29yZCgidW5pb24iKTtjb25zdCBpPXRoaXMucGFyc2VOYW1lKCkscj10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCkscz10aGlzLnBhcnNlVW5pb25NZW1iZXJUeXBlcygpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULlVOSU9OX1RZUEVfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLG5hbWU6aSxkaXJlY3RpdmVzOnIsdHlwZXM6c30pfXBhcnNlVW5pb25NZW1iZXJUeXBlcygpe3JldHVybiB0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4obC5FUVVBTFMpP3RoaXMuZGVsaW1pdGVkTWFueShsLlBJUEUsdGhpcy5wYXJzZU5hbWVkVHlwZSk6W119cGFyc2VFbnVtVHlwZURlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZURlc2NyaXB0aW9uKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJlbnVtIik7Y29uc3QgaT10aGlzLnBhcnNlTmFtZSgpLHI9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLHM9dGhpcy5wYXJzZUVudW1WYWx1ZXNEZWZpbml0aW9uKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuRU5VTV9UWVBFX0RFRklOSVRJT04sZGVzY3JpcHRpb246bixuYW1lOmksZGlyZWN0aXZlczpyLHZhbHVlczpzfSl9cGFyc2VFbnVtVmFsdWVzRGVmaW5pdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbmFsTWFueShsLkJSQUNFX0wsdGhpcy5wYXJzZUVudW1WYWx1ZURlZmluaXRpb24sbC5CUkFDRV9SKX1wYXJzZUVudW1WYWx1ZURlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZURlc2NyaXB0aW9uKCksaT10aGlzLnBhcnNlRW51bVZhbHVlTmFtZSgpLHI9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULkVOVU1fVkFMVUVfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLG5hbWU6aSxkaXJlY3RpdmVzOnJ9KX1wYXJzZUVudW1WYWx1ZU5hbWUoKXtpZih0aGlzLl9sZXhlci50b2tlbi52YWx1ZT09PSJ0cnVlInx8dGhpcy5fbGV4ZXIudG9rZW4udmFsdWU9PT0iZmFsc2UifHx0aGlzLl9sZXhlci50b2tlbi52YWx1ZT09PSJudWxsIil0aHJvdyBHKHRoaXMuX2xleGVyLnNvdXJjZSx0aGlzLl9sZXhlci50b2tlbi5zdGFydCxgJHtEZSh0aGlzLl9sZXhlci50b2tlbil9IGlzIHJlc2VydmVkIGFuZCBjYW5ub3QgYmUgdXNlZCBmb3IgYW4gZW51bSB2YWx1ZS5gKTtyZXR1cm4gdGhpcy5wYXJzZU5hbWUoKX1wYXJzZUlucHV0T2JqZWN0VHlwZURlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZURlc2NyaXB0aW9uKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJpbnB1dCIpO2NvbnN0IGk9dGhpcy5wYXJzZU5hbWUoKSxyPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxzPXRoaXMucGFyc2VJbnB1dEZpZWxkc0RlZmluaXRpb24oKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6VC5JTlBVVF9PQkpFQ1RfVFlQRV9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOm4sbmFtZTppLGRpcmVjdGl2ZXM6cixmaWVsZHM6c30pfXBhcnNlSW5wdXRGaWVsZHNEZWZpbml0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9uYWxNYW55KGwuQlJBQ0VfTCx0aGlzLnBhcnNlSW5wdXRWYWx1ZURlZixsLkJSQUNFX1IpfXBhcnNlVHlwZVN5c3RlbUV4dGVuc2lvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIubG9va2FoZWFkKCk7aWYodC5raW5kPT09bC5OQU1FKXN3aXRjaCh0LnZhbHVlKXtjYXNlInNjaGVtYSI6cmV0dXJuIHRoaXMucGFyc2VTY2hlbWFFeHRlbnNpb24oKTtjYXNlInNjYWxhciI6cmV0dXJuIHRoaXMucGFyc2VTY2FsYXJUeXBlRXh0ZW5zaW9uKCk7Y2FzZSJ0eXBlIjpyZXR1cm4gdGhpcy5wYXJzZU9iamVjdFR5cGVFeHRlbnNpb24oKTtjYXNlImludGVyZmFjZSI6cmV0dXJuIHRoaXMucGFyc2VJbnRlcmZhY2VUeXBlRXh0ZW5zaW9uKCk7Y2FzZSJ1bmlvbiI6cmV0dXJuIHRoaXMucGFyc2VVbmlvblR5cGVFeHRlbnNpb24oKTtjYXNlImVudW0iOnJldHVybiB0aGlzLnBhcnNlRW51bVR5cGVFeHRlbnNpb24oKTtjYXNlImlucHV0IjpyZXR1cm4gdGhpcy5wYXJzZUlucHV0T2JqZWN0VHlwZUV4dGVuc2lvbigpfXRocm93IHRoaXMudW5leHBlY3RlZCh0KX1wYXJzZVNjaGVtYUV4dGVuc2lvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47dGhpcy5leHBlY3RLZXl3b3JkKCJleHRlbmQiKSx0aGlzLmV4cGVjdEtleXdvcmQoInNjaGVtYSIpO2NvbnN0IG49dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLGk9dGhpcy5vcHRpb25hbE1hbnkobC5CUkFDRV9MLHRoaXMucGFyc2VPcGVyYXRpb25UeXBlRGVmaW5pdGlvbixsLkJSQUNFX1IpO2lmKG4ubGVuZ3RoPT09MCYmaS5sZW5ndGg9PT0wKXRocm93IHRoaXMudW5leHBlY3RlZCgpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULlNDSEVNQV9FWFRFTlNJT04sZGlyZWN0aXZlczpuLG9wZXJhdGlvblR5cGVzOml9KX1wYXJzZVNjYWxhclR5cGVFeHRlbnNpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO3RoaXMuZXhwZWN0S2V5d29yZCgiZXh0ZW5kIiksdGhpcy5leHBlY3RLZXl3b3JkKCJzY2FsYXIiKTtjb25zdCBuPXRoaXMucGFyc2VOYW1lKCksaT10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCk7aWYoaS5sZW5ndGg9PT0wKXRocm93IHRoaXMudW5leHBlY3RlZCgpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULlNDQUxBUl9UWVBFX0VYVEVOU0lPTixuYW1lOm4sZGlyZWN0aXZlczppfSl9cGFyc2VPYmplY3RUeXBlRXh0ZW5zaW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjt0aGlzLmV4cGVjdEtleXdvcmQoImV4dGVuZCIpLHRoaXMuZXhwZWN0S2V5d29yZCgidHlwZSIpO2NvbnN0IG49dGhpcy5wYXJzZU5hbWUoKSxpPXRoaXMucGFyc2VJbXBsZW1lbnRzSW50ZXJmYWNlcygpLHI9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLHM9dGhpcy5wYXJzZUZpZWxkc0RlZmluaXRpb24oKTtpZihpLmxlbmd0aD09PTAmJnIubGVuZ3RoPT09MCYmcy5sZW5ndGg9PT0wKXRocm93IHRoaXMudW5leHBlY3RlZCgpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULk9CSkVDVF9UWVBFX0VYVEVOU0lPTixuYW1lOm4saW50ZXJmYWNlczppLGRpcmVjdGl2ZXM6cixmaWVsZHM6c30pfXBhcnNlSW50ZXJmYWNlVHlwZUV4dGVuc2lvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47dGhpcy5leHBlY3RLZXl3b3JkKCJleHRlbmQiKSx0aGlzLmV4cGVjdEtleXdvcmQoImludGVyZmFjZSIpO2NvbnN0IG49dGhpcy5wYXJzZU5hbWUoKSxpPXRoaXMucGFyc2VJbXBsZW1lbnRzSW50ZXJmYWNlcygpLHI9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLHM9dGhpcy5wYXJzZUZpZWxkc0RlZmluaXRpb24oKTtpZihpLmxlbmd0aD09PTAmJnIubGVuZ3RoPT09MCYmcy5sZW5ndGg9PT0wKXRocm93IHRoaXMudW5leHBlY3RlZCgpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULklOVEVSRkFDRV9UWVBFX0VYVEVOU0lPTixuYW1lOm4saW50ZXJmYWNlczppLGRpcmVjdGl2ZXM6cixmaWVsZHM6c30pfXBhcnNlVW5pb25UeXBlRXh0ZW5zaW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjt0aGlzLmV4cGVjdEtleXdvcmQoImV4dGVuZCIpLHRoaXMuZXhwZWN0S2V5d29yZCgidW5pb24iKTtjb25zdCBuPXRoaXMucGFyc2VOYW1lKCksaT10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCkscj10aGlzLnBhcnNlVW5pb25NZW1iZXJUeXBlcygpO2lmKGkubGVuZ3RoPT09MCYmci5sZW5ndGg9PT0wKXRocm93IHRoaXMudW5leHBlY3RlZCgpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULlVOSU9OX1RZUEVfRVhURU5TSU9OLG5hbWU6bixkaXJlY3RpdmVzOmksdHlwZXM6cn0pfXBhcnNlRW51bVR5cGVFeHRlbnNpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO3RoaXMuZXhwZWN0S2V5d29yZCgiZXh0ZW5kIiksdGhpcy5leHBlY3RLZXl3b3JkKCJlbnVtIik7Y29uc3Qgbj10aGlzLnBhcnNlTmFtZSgpLGk9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLHI9dGhpcy5wYXJzZUVudW1WYWx1ZXNEZWZpbml0aW9uKCk7aWYoaS5sZW5ndGg9PT0wJiZyLmxlbmd0aD09PTApdGhyb3cgdGhpcy51bmV4cGVjdGVkKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuRU5VTV9UWVBFX0VYVEVOU0lPTixuYW1lOm4sZGlyZWN0aXZlczppLHZhbHVlczpyfSl9cGFyc2VJbnB1dE9iamVjdFR5cGVFeHRlbnNpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO3RoaXMuZXhwZWN0S2V5d29yZCgiZXh0ZW5kIiksdGhpcy5leHBlY3RLZXl3b3JkKCJpbnB1dCIpO2NvbnN0IG49dGhpcy5wYXJzZU5hbWUoKSxpPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxyPXRoaXMucGFyc2VJbnB1dEZpZWxkc0RlZmluaXRpb24oKTtpZihpLmxlbmd0aD09PTAmJnIubGVuZ3RoPT09MCl0aHJvdyB0aGlzLnVuZXhwZWN0ZWQoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6VC5JTlBVVF9PQkpFQ1RfVFlQRV9FWFRFTlNJT04sbmFtZTpuLGRpcmVjdGl2ZXM6aSxmaWVsZHM6cn0pfXBhcnNlRGlyZWN0aXZlRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKTt0aGlzLmV4cGVjdEtleXdvcmQoImRpcmVjdGl2ZSIpLHRoaXMuZXhwZWN0VG9rZW4obC5BVCk7Y29uc3QgaT10aGlzLnBhcnNlTmFtZSgpLHI9dGhpcy5wYXJzZUFyZ3VtZW50RGVmcygpLHM9dGhpcy5leHBlY3RPcHRpb25hbEtleXdvcmQoInJlcGVhdGFibGUiKTt0aGlzLmV4cGVjdEtleXdvcmQoIm9uIik7Y29uc3Qgbz10aGlzLnBhcnNlRGlyZWN0aXZlTG9jYXRpb25zKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuRElSRUNUSVZFX0RFRklOSVRJT04sZGVzY3JpcHRpb246bixuYW1lOmksYXJndW1lbnRzOnIscmVwZWF0YWJsZTpzLGxvY2F0aW9uczpvfSl9cGFyc2VEaXJlY3RpdmVMb2NhdGlvbnMoKXtyZXR1cm4gdGhpcy5kZWxpbWl0ZWRNYW55KGwuUElQRSx0aGlzLnBhcnNlRGlyZWN0aXZlTG9jYXRpb24pfXBhcnNlRGlyZWN0aXZlTG9jYXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZU5hbWUoKTtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoR2Usbi52YWx1ZSkpcmV0dXJuIG47dGhyb3cgdGhpcy51bmV4cGVjdGVkKHQpfW5vZGUodCxuKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5ub0xvY2F0aW9uIT09ITAmJihuLmxvYz1uZXcgYW4odCx0aGlzLl9sZXhlci5sYXN0VG9rZW4sdGhpcy5fbGV4ZXIuc291cmNlKSksbn1wZWVrKHQpe3JldHVybiB0aGlzLl9sZXhlci50b2tlbi5raW5kPT09dH1leHBlY3RUb2tlbih0KXtjb25zdCBuPXRoaXMuX2xleGVyLnRva2VuO2lmKG4ua2luZD09PXQpcmV0dXJuIHRoaXMuYWR2YW5jZUxleGVyKCksbjt0aHJvdyBHKHRoaXMuX2xleGVyLnNvdXJjZSxuLnN0YXJ0LGBFeHBlY3RlZCAke1N0KHQpfSwgZm91bmQgJHtEZShuKX0uYCl9ZXhwZWN0T3B0aW9uYWxUb2tlbih0KXtyZXR1cm4gdGhpcy5fbGV4ZXIudG9rZW4ua2luZD09PXQ/KHRoaXMuYWR2YW5jZUxleGVyKCksITApOiExfWV4cGVjdEtleXdvcmQodCl7Y29uc3Qgbj10aGlzLl9sZXhlci50b2tlbjtpZihuLmtpbmQ9PT1sLk5BTUUmJm4udmFsdWU9PT10KXRoaXMuYWR2YW5jZUxleGVyKCk7ZWxzZSB0aHJvdyBHKHRoaXMuX2xleGVyLnNvdXJjZSxuLnN0YXJ0LGBFeHBlY3RlZCAiJHt0fSIsIGZvdW5kICR7RGUobil9LmApfWV4cGVjdE9wdGlvbmFsS2V5d29yZCh0KXtjb25zdCBuPXRoaXMuX2xleGVyLnRva2VuO3JldHVybiBuLmtpbmQ9PT1sLk5BTUUmJm4udmFsdWU9PT10Pyh0aGlzLmFkdmFuY2VMZXhlcigpLCEwKTohMX11bmV4cGVjdGVkKHQpe2NvbnN0IG49dCE9bnVsbD90OnRoaXMuX2xleGVyLnRva2VuO3JldHVybiBHKHRoaXMuX2xleGVyLnNvdXJjZSxuLnN0YXJ0LGBVbmV4cGVjdGVkICR7RGUobil9LmApfWFueSh0LG4saSl7dGhpcy5leHBlY3RUb2tlbih0KTtjb25zdCByPVtdO2Zvcig7IXRoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbihpKTspci5wdXNoKG4uY2FsbCh0aGlzKSk7cmV0dXJuIHJ9b3B0aW9uYWxNYW55KHQsbixpKXtpZih0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4odCkpe2NvbnN0IHI9W107ZG8gci5wdXNoKG4uY2FsbCh0aGlzKSk7d2hpbGUoIXRoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbihpKSk7cmV0dXJuIHJ9cmV0dXJuW119bWFueSh0LG4saSl7dGhpcy5leHBlY3RUb2tlbih0KTtjb25zdCByPVtdO2RvIHIucHVzaChuLmNhbGwodGhpcykpO3doaWxlKCF0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4oaSkpO3JldHVybiByfWRlbGltaXRlZE1hbnkodCxuKXt0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4odCk7Y29uc3QgaT1bXTtkbyBpLnB1c2gobi5jYWxsKHRoaXMpKTt3aGlsZSh0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4odCkpO3JldHVybiBpfWFkdmFuY2VMZXhlcigpe2NvbnN0e21heFRva2Vuczp0fT10aGlzLl9vcHRpb25zLG49dGhpcy5fbGV4ZXIuYWR2YW5jZSgpO2lmKG4ua2luZCE9PWwuRU9GJiYoKyt0aGlzLl90b2tlbkNvdW50ZXIsdCE9PXZvaWQgMCYmdGhpcy5fdG9rZW5Db3VudGVyPnQpKXRocm93IEcodGhpcy5fbGV4ZXIuc291cmNlLG4uc3RhcnQsYERvY3VtZW50IGNvbnRhaW5zIG1vcmUgdGhhdCAke3R9IHRva2Vucy4gUGFyc2luZyBhYm9ydGVkLmApfX1mdW5jdGlvbiBEZShlKXtjb25zdCB0PWUudmFsdWU7cmV0dXJuIFN0KGUua2luZCkrKHQhPW51bGw/YCAiJHt0fSJgOiIiKX1mdW5jdGlvbiBTdChlKXtyZXR1cm4gcG4oZSk/YCIke2V9ImA6ZX1mdW5jdGlvbiBSbihlKXtyZXR1cm5gIiR7ZS5yZXBsYWNlKFBuLExuKX0iYH1jb25zdCBQbj0vW1x4MDAtXHgxZlx4MjJceDVjXHg3Zi1ceDlmXS9nO2Z1bmN0aW9uIExuKGUpe3JldHVybiBGbltlLmNoYXJDb2RlQXQoMCldfWNvbnN0IEZuPVsiXFx1MDAwMCIsIlxcdTAwMDEiLCJcXHUwMDAyIiwiXFx1MDAwMyIsIlxcdTAwMDQiLCJcXHUwMDA1IiwiXFx1MDAwNiIsIlxcdTAwMDciLCJcXGIiLCJcXHQiLCJcXG4iLCJcXHUwMDBCIiwiXFxmIiwiXFxyIiwiXFx1MDAwRSIsIlxcdTAwMEYiLCJcXHUwMDEwIiwiXFx1MDAxMSIsIlxcdTAwMTIiLCJcXHUwMDEzIiwiXFx1MDAxNCIsIlxcdTAwMTUiLCJcXHUwMDE2IiwiXFx1MDAxNyIsIlxcdTAwMTgiLCJcXHUwMDE5IiwiXFx1MDAxQSIsIlxcdTAwMUIiLCJcXHUwMDFDIiwiXFx1MDAxRCIsIlxcdTAwMUUiLCJcXHUwMDFGIiwiIiwiIiwnXFwiJywiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiXFxcXCIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIlxcdTAwN0YiLCJcXHUwMDgwIiwiXFx1MDA4MSIsIlxcdTAwODIiLCJcXHUwMDgzIiwiXFx1MDA4NCIsIlxcdTAwODUiLCJcXHUwMDg2IiwiXFx1MDA4NyIsIlxcdTAwODgiLCJcXHUwMDg5IiwiXFx1MDA4QSIsIlxcdTAwOEIiLCJcXHUwMDhDIiwiXFx1MDA4RCIsIlxcdTAwOEUiLCJcXHUwMDhGIiwiXFx1MDA5MCIsIlxcdTAwOTEiLCJcXHUwMDkyIiwiXFx1MDA5MyIsIlxcdTAwOTQiLCJcXHUwMDk1IiwiXFx1MDA5NiIsIlxcdTAwOTciLCJcXHUwMDk4IiwiXFx1MDA5OSIsIlxcdTAwOUEiLCJcXHUwMDlCIiwiXFx1MDA5QyIsIlxcdTAwOUQiLCJcXHUwMDlFIiwiXFx1MDA5RiJdLE1uPU9iamVjdC5mcmVlemUoe30pO2Z1bmN0aW9uICRuKGUsdCxuPXZ0KXtjb25zdCBpPW5ldyBNYXA7Zm9yKGNvbnN0IFAgb2YgT2JqZWN0LnZhbHVlcyhUKSlpLnNldChQLEJuKHQsUCkpO2xldCByLHM9QXJyYXkuaXNBcnJheShlKSxvPVtlXSxjPS0xLGY9W10sZD1lLHUseTtjb25zdCBnPVtdLGI9W107ZG97YysrO2NvbnN0IFA9Yz09PW8ubGVuZ3RoLGo9UCYmZi5sZW5ndGghPT0wO2lmKFApe2lmKHU9Yi5sZW5ndGg9PT0wP3ZvaWQgMDpnW2cubGVuZ3RoLTFdLGQ9eSx5PWIucG9wKCksailpZihzKXtkPWQuc2xpY2UoKTtsZXQgRT0wO2Zvcihjb25zdFt3LENdb2YgZil7Y29uc3QgTD13LUU7Qz09PW51bGw/KGQuc3BsaWNlKEwsMSksRSsrKTpkW0xdPUN9fWVsc2V7ZD1EKHt9LGQpO2Zvcihjb25zdFtFLHddb2YgZilkW0VdPXd9Yz1yLmluZGV4LG89ci5rZXlzLGY9ci5lZGl0cyxzPXIuaW5BcnJheSxyPXIucHJldn1lbHNlIGlmKHkpe2lmKHU9cz9jOm9bY10sZD15W3VdLGQ9PW51bGwpY29udGludWU7Zy5wdXNoKHUpfWxldCB2O2lmKCFBcnJheS5pc0FycmF5KGQpKXt2YXIgbSxOO2d0KGQpfHxhZSghMSxgSW52YWxpZCBBU1QgTm9kZTogJHtZZShkKX0uYCk7Y29uc3QgRT1QPyhtPWkuZ2V0KGQua2luZCkpPT09bnVsbHx8bT09PXZvaWQgMD92b2lkIDA6bS5sZWF2ZTooTj1pLmdldChkLmtpbmQpKT09PW51bGx8fE49PT12b2lkIDA/dm9pZCAwOk4uZW50ZXI7aWYodj1FPT1udWxsP3ZvaWQgMDpFLmNhbGwodCxkLHUseSxnLGIpLHY9PT1NbilicmVhaztpZih2PT09ITEpe2lmKCFQKXtnLnBvcCgpO2NvbnRpbnVlfX1lbHNlIGlmKHYhPT12b2lkIDAmJihmLnB1c2goW3Usdl0pLCFQKSlpZihndCh2KSlkPXY7ZWxzZXtnLnBvcCgpO2NvbnRpbnVlfX1pZih2PT09dm9pZCAwJiZqJiZmLnB1c2goW3UsZF0pLFApZy5wb3AoKTtlbHNle3ZhciBSO3I9e2luQXJyYXk6cyxpbmRleDpjLGtleXM6byxlZGl0czpmLHByZXY6cn0scz1BcnJheS5pc0FycmF5KGQpLG89cz9kOihSPW5bZC5raW5kXSkhPT1udWxsJiZSIT09dm9pZCAwP1I6W10sYz0tMSxmPVtdLHkmJmIucHVzaCh5KSx5PWR9fXdoaWxlKHIhPT12b2lkIDApO3JldHVybiBmLmxlbmd0aCE9PTA/ZltmLmxlbmd0aC0xXVsxXTplfWZ1bmN0aW9uIEJuKGUsdCl7Y29uc3Qgbj1lW3RdO3JldHVybiB0eXBlb2Ygbj09Im9iamVjdCI/bjp0eXBlb2Ygbj09ImZ1bmN0aW9uIj97ZW50ZXI6bixsZWF2ZTp2b2lkIDB9OntlbnRlcjplLmVudGVyLGxlYXZlOmUubGVhdmV9fWZ1bmN0aW9uIFVuKGUpe3JldHVybiAkbihlLGpuKX1jb25zdCBWbj04MCxqbj17TmFtZTp7bGVhdmU6ZT0+ZS52YWx1ZX0sVmFyaWFibGU6e2xlYXZlOmU9PiIkIitlLm5hbWV9LERvY3VtZW50OntsZWF2ZTplPT5wKGUuZGVmaW5pdGlvbnMsYAoKYCl9LE9wZXJhdGlvbkRlZmluaXRpb246e2xlYXZlKGUpe2NvbnN0IHQ9TygiKCIscChlLnZhcmlhYmxlRGVmaW5pdGlvbnMsIiwgIiksIikiKSxuPXAoW2Uub3BlcmF0aW9uLHAoW2UubmFtZSx0XSkscChlLmRpcmVjdGl2ZXMsIiAiKV0sIiAiKTtyZXR1cm4obj09PSJxdWVyeSI/IiI6bisiICIpK2Uuc2VsZWN0aW9uU2V0fX0sVmFyaWFibGVEZWZpbml0aW9uOntsZWF2ZTooe3ZhcmlhYmxlOmUsdHlwZTp0LGRlZmF1bHRWYWx1ZTpuLGRpcmVjdGl2ZXM6aX0pPT5lKyI6ICIrdCtPKCIgPSAiLG4pK08oIiAiLHAoaSwiICIpKX0sU2VsZWN0aW9uU2V0OntsZWF2ZTooe3NlbGVjdGlvbnM6ZX0pPT5yZShlKX0sRmllbGQ6e2xlYXZlKHthbGlhczplLG5hbWU6dCxhcmd1bWVudHM6bixkaXJlY3RpdmVzOmksc2VsZWN0aW9uU2V0OnJ9KXtjb25zdCBzPU8oIiIsZSwiOiAiKSt0O2xldCBvPXMrTygiKCIscChuLCIsICIpLCIpIik7cmV0dXJuIG8ubGVuZ3RoPlZuJiYobz1zK08oYCgKYCxDZShwKG4sYApgKSksYAopYCkpLHAoW28scChpLCIgIikscl0sIiAiKX19LEFyZ3VtZW50OntsZWF2ZTooe25hbWU6ZSx2YWx1ZTp0fSk9PmUrIjogIit0fSxGcmFnbWVudFNwcmVhZDp7bGVhdmU6KHtuYW1lOmUsZGlyZWN0aXZlczp0fSk9PiIuLi4iK2UrTygiICIscCh0LCIgIikpfSxJbmxpbmVGcmFnbWVudDp7bGVhdmU6KHt0eXBlQ29uZGl0aW9uOmUsZGlyZWN0aXZlczp0LHNlbGVjdGlvblNldDpufSk9PnAoWyIuLi4iLE8oIm9uICIsZSkscCh0LCIgIiksbl0sIiAiKX0sRnJhZ21lbnREZWZpbml0aW9uOntsZWF2ZTooe25hbWU6ZSx0eXBlQ29uZGl0aW9uOnQsdmFyaWFibGVEZWZpbml0aW9uczpuLGRpcmVjdGl2ZXM6aSxzZWxlY3Rpb25TZXQ6cn0pPT5gZnJhZ21lbnQgJHtlfSR7TygiKCIscChuLCIsICIpLCIpIil9IG9uICR7dH0gJHtPKCIiLHAoaSwiICIpLCIgIil9YCtyfSxJbnRWYWx1ZTp7bGVhdmU6KHt2YWx1ZTplfSk9PmV9LEZsb2F0VmFsdWU6e2xlYXZlOih7dmFsdWU6ZX0pPT5lfSxTdHJpbmdWYWx1ZTp7bGVhdmU6KHt2YWx1ZTplLGJsb2NrOnR9KT0+dD9obihlKTpSbihlKX0sQm9vbGVhblZhbHVlOntsZWF2ZTooe3ZhbHVlOmV9KT0+ZT8idHJ1ZSI6ImZhbHNlIn0sTnVsbFZhbHVlOntsZWF2ZTooKT0+Im51bGwifSxFbnVtVmFsdWU6e2xlYXZlOih7dmFsdWU6ZX0pPT5lfSxMaXN0VmFsdWU6e2xlYXZlOih7dmFsdWVzOmV9KT0+IlsiK3AoZSwiLCAiKSsiXSJ9LE9iamVjdFZhbHVlOntsZWF2ZTooe2ZpZWxkczplfSk9PiJ7IitwKGUsIiwgIikrIn0ifSxPYmplY3RGaWVsZDp7bGVhdmU6KHtuYW1lOmUsdmFsdWU6dH0pPT5lKyI6ICIrdH0sRGlyZWN0aXZlOntsZWF2ZTooe25hbWU6ZSxhcmd1bWVudHM6dH0pPT4iQCIrZStPKCIoIixwKHQsIiwgIiksIikiKX0sTmFtZWRUeXBlOntsZWF2ZTooe25hbWU6ZX0pPT5lfSxMaXN0VHlwZTp7bGVhdmU6KHt0eXBlOmV9KT0+IlsiK2UrIl0ifSxOb25OdWxsVHlwZTp7bGVhdmU6KHt0eXBlOmV9KT0+ZSsiISJ9LFNjaGVtYURlZmluaXRpb246e2xlYXZlOih7ZGVzY3JpcHRpb246ZSxkaXJlY3RpdmVzOnQsb3BlcmF0aW9uVHlwZXM6bn0pPT5PKCIiLGUsYApgKStwKFsic2NoZW1hIixwKHQsIiAiKSxyZShuKV0sIiAiKX0sT3BlcmF0aW9uVHlwZURlZmluaXRpb246e2xlYXZlOih7b3BlcmF0aW9uOmUsdHlwZTp0fSk9PmUrIjogIit0fSxTY2FsYXJUeXBlRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLG5hbWU6dCxkaXJlY3RpdmVzOm59KT0+TygiIixlLGAKYCkrcChbInNjYWxhciIsdCxwKG4sIiAiKV0sIiAiKX0sT2JqZWN0VHlwZURlZmluaXRpb246e2xlYXZlOih7ZGVzY3JpcHRpb246ZSxuYW1lOnQsaW50ZXJmYWNlczpuLGRpcmVjdGl2ZXM6aSxmaWVsZHM6cn0pPT5PKCIiLGUsYApgKStwKFsidHlwZSIsdCxPKCJpbXBsZW1lbnRzICIscChuLCIgJiAiKSkscChpLCIgIikscmUocildLCIgIil9LEZpZWxkRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLG5hbWU6dCxhcmd1bWVudHM6bix0eXBlOmksZGlyZWN0aXZlczpyfSk9Pk8oIiIsZSxgCmApK3QrKE90KG4pP08oYCgKYCxDZShwKG4sYApgKSksYAopYCk6TygiKCIscChuLCIsICIpLCIpIikpKyI6ICIraStPKCIgIixwKHIsIiAiKSl9LElucHV0VmFsdWVEZWZpbml0aW9uOntsZWF2ZTooe2Rlc2NyaXB0aW9uOmUsbmFtZTp0LHR5cGU6bixkZWZhdWx0VmFsdWU6aSxkaXJlY3RpdmVzOnJ9KT0+TygiIixlLGAKYCkrcChbdCsiOiAiK24sTygiPSAiLGkpLHAociwiICIpXSwiICIpfSxJbnRlcmZhY2VUeXBlRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLG5hbWU6dCxpbnRlcmZhY2VzOm4sZGlyZWN0aXZlczppLGZpZWxkczpyfSk9Pk8oIiIsZSxgCmApK3AoWyJpbnRlcmZhY2UiLHQsTygiaW1wbGVtZW50cyAiLHAobiwiICYgIikpLHAoaSwiICIpLHJlKHIpXSwiICIpfSxVbmlvblR5cGVEZWZpbml0aW9uOntsZWF2ZTooe2Rlc2NyaXB0aW9uOmUsbmFtZTp0LGRpcmVjdGl2ZXM6bix0eXBlczppfSk9Pk8oIiIsZSxgCmApK3AoWyJ1bmlvbiIsdCxwKG4sIiAiKSxPKCI9ICIscChpLCIgfCAiKSldLCIgIil9LEVudW1UeXBlRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLG5hbWU6dCxkaXJlY3RpdmVzOm4sdmFsdWVzOml9KT0+TygiIixlLGAKYCkrcChbImVudW0iLHQscChuLCIgIikscmUoaSldLCIgIil9LEVudW1WYWx1ZURlZmluaXRpb246e2xlYXZlOih7ZGVzY3JpcHRpb246ZSxuYW1lOnQsZGlyZWN0aXZlczpufSk9Pk8oIiIsZSxgCmApK3AoW3QscChuLCIgIildLCIgIil9LElucHV0T2JqZWN0VHlwZURlZmluaXRpb246e2xlYXZlOih7ZGVzY3JpcHRpb246ZSxuYW1lOnQsZGlyZWN0aXZlczpuLGZpZWxkczppfSk9Pk8oIiIsZSxgCmApK3AoWyJpbnB1dCIsdCxwKG4sIiAiKSxyZShpKV0sIiAiKX0sRGlyZWN0aXZlRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLG5hbWU6dCxhcmd1bWVudHM6bixyZXBlYXRhYmxlOmksbG9jYXRpb25zOnJ9KT0+TygiIixlLGAKYCkrImRpcmVjdGl2ZSBAIit0KyhPdChuKT9PKGAoCmAsQ2UocChuLGAKYCkpLGAKKWApOk8oIigiLHAobiwiLCAiKSwiKSIpKSsoaT8iIHJlcGVhdGFibGUiOiIiKSsiIG9uICIrcChyLCIgfCAiKX0sU2NoZW1hRXh0ZW5zaW9uOntsZWF2ZTooe2RpcmVjdGl2ZXM6ZSxvcGVyYXRpb25UeXBlczp0fSk9PnAoWyJleHRlbmQgc2NoZW1hIixwKGUsIiAiKSxyZSh0KV0sIiAiKX0sU2NhbGFyVHlwZUV4dGVuc2lvbjp7bGVhdmU6KHtuYW1lOmUsZGlyZWN0aXZlczp0fSk9PnAoWyJleHRlbmQgc2NhbGFyIixlLHAodCwiICIpXSwiICIpfSxPYmplY3RUeXBlRXh0ZW5zaW9uOntsZWF2ZTooe25hbWU6ZSxpbnRlcmZhY2VzOnQsZGlyZWN0aXZlczpuLGZpZWxkczppfSk9PnAoWyJleHRlbmQgdHlwZSIsZSxPKCJpbXBsZW1lbnRzICIscCh0LCIgJiAiKSkscChuLCIgIikscmUoaSldLCIgIil9LEludGVyZmFjZVR5cGVFeHRlbnNpb246e2xlYXZlOih7bmFtZTplLGludGVyZmFjZXM6dCxkaXJlY3RpdmVzOm4sZmllbGRzOml9KT0+cChbImV4dGVuZCBpbnRlcmZhY2UiLGUsTygiaW1wbGVtZW50cyAiLHAodCwiICYgIikpLHAobiwiICIpLHJlKGkpXSwiICIpfSxVbmlvblR5cGVFeHRlbnNpb246e2xlYXZlOih7bmFtZTplLGRpcmVjdGl2ZXM6dCx0eXBlczpufSk9PnAoWyJleHRlbmQgdW5pb24iLGUscCh0LCIgIiksTygiPSAiLHAobiwiIHwgIikpXSwiICIpfSxFbnVtVHlwZUV4dGVuc2lvbjp7bGVhdmU6KHtuYW1lOmUsZGlyZWN0aXZlczp0LHZhbHVlczpufSk9PnAoWyJleHRlbmQgZW51bSIsZSxwKHQsIiAiKSxyZShuKV0sIiAiKX0sSW5wdXRPYmplY3RUeXBlRXh0ZW5zaW9uOntsZWF2ZTooe25hbWU6ZSxkaXJlY3RpdmVzOnQsZmllbGRzOm59KT0+cChbImV4dGVuZCBpbnB1dCIsZSxwKHQsIiAiKSxyZShuKV0sIiAiKX19O2Z1bmN0aW9uIHAoZSx0PSIiKXt2YXIgbjtyZXR1cm4obj1lPT1udWxsP3ZvaWQgMDplLmZpbHRlcihpPT5pKS5qb2luKHQpKSE9PW51bGwmJm4hPT12b2lkIDA/bjoiIn1mdW5jdGlvbiByZShlKXtyZXR1cm4gTyhgewpgLENlKHAoZSxgCmApKSxgCn1gKX1mdW5jdGlvbiBPKGUsdCxuPSIiKXtyZXR1cm4gdCE9bnVsbCYmdCE9PSIiP2UrdCtuOiIifWZ1bmN0aW9uIENlKGUpe3JldHVybiBPKCIgICIsZS5yZXBsYWNlKC9cbi9nLGAKICBgKSl9ZnVuY3Rpb24gT3QoZSl7dmFyIHQ7cmV0dXJuKHQ9ZT09bnVsbD92b2lkIDA6ZS5zb21lKG49Pm4uaW5jbHVkZXMoYApgKSkpIT09bnVsbCYmdCE9PXZvaWQgMD90OiExfWNvbnN0IHd0PWU9Pnt2YXIgaSxyO2xldCB0O2NvbnN0IG49ZS5kZWZpbml0aW9ucy5maWx0ZXIocz0+cy5raW5kPT09Ik9wZXJhdGlvbkRlZmluaXRpb24iKTtyZXR1cm4gbi5sZW5ndGg9PT0xJiYodD0ocj0oaT1uWzBdKT09bnVsbD92b2lkIDA6aS5uYW1lKT09bnVsbD92b2lkIDA6ci52YWx1ZSksdH0sSmU9ZT0+e2lmKHR5cGVvZiBlPT0ic3RyaW5nIil7bGV0IG47dHJ5e2NvbnN0IGk9SXQoZSk7bj13dChpKX1jYXRjaChpKXt9cmV0dXJue3F1ZXJ5OmUsb3BlcmF0aW9uTmFtZTpufX1jb25zdCB0PXd0KGUpO3JldHVybntxdWVyeTpVbihlKSxvcGVyYXRpb25OYW1lOnR9fTtjbGFzcyBkZSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQsbil7Y29uc3QgaT1gJHtkZS5leHRyYWN0TWVzc2FnZSh0KX06ICR7SlNPTi5zdHJpbmdpZnkoe3Jlc3BvbnNlOnQscmVxdWVzdDpufSl9YDtzdXBlcihpKSxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxkZS5wcm90b3R5cGUpLHRoaXMucmVzcG9uc2U9dCx0aGlzLnJlcXVlc3Q9bix0eXBlb2YgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U9PSJmdW5jdGlvbiImJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsZGUpfXN0YXRpYyBleHRyYWN0TWVzc2FnZSh0KXt2YXIgbixpLHI7cmV0dXJuKHI9KGk9KG49dC5lcnJvcnMpPT1udWxsP3ZvaWQgMDpuWzBdKT09bnVsbD92b2lkIDA6aS5tZXNzYWdlKSE9bnVsbD9yOmBHcmFwaFFMIEVycm9yIChDb2RlOiAke3Quc3RhdHVzfSlgfX12YXIgcW49dHlwZW9mIGdsb2JhbFRoaXMhPSJ1bmRlZmluZWQiP2dsb2JhbFRoaXM6dHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCI/d2luZG93OnR5cGVvZiBnbG9iYWwhPSJ1bmRlZmluZWQiP2dsb2JhbDp0eXBlb2Ygc2VsZiE9InVuZGVmaW5lZCI/c2VsZjp7fTtmdW5jdGlvbiBEdChlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwiZGVmYXVsdCIpP2UuZGVmYXVsdDplfXZhciBRZT17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGUsdCl7dmFyIG49dHlwZW9mIHNlbGYhPSJ1bmRlZmluZWQiP3NlbGY6cW4saT1mdW5jdGlvbigpe2Z1bmN0aW9uIHMoKXt0aGlzLmZldGNoPSExLHRoaXMuRE9NRXhjZXB0aW9uPW4uRE9NRXhjZXB0aW9ufXJldHVybiBzLnByb3RvdHlwZT1uLG5ldyBzfSgpOyhmdW5jdGlvbihzKXsoZnVuY3Rpb24obyl7dmFyIGM9e3NlYXJjaFBhcmFtczoiVVJMU2VhcmNoUGFyYW1zImluIHMsaXRlcmFibGU6IlN5bWJvbCJpbiBzJiYiaXRlcmF0b3IiaW4gU3ltYm9sLGJsb2I6IkZpbGVSZWFkZXIiaW4gcyYmIkJsb2IiaW4gcyYmZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBCbG9iLCEwfWNhdGNoKGEpe3JldHVybiExfX0oKSxmb3JtRGF0YToiRm9ybURhdGEiaW4gcyxhcnJheUJ1ZmZlcjoiQXJyYXlCdWZmZXIiaW4gc307ZnVuY3Rpb24gZihhKXtyZXR1cm4gYSYmRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSl9aWYoYy5hcnJheUJ1ZmZlcil2YXIgZD1bIltvYmplY3QgSW50OEFycmF5XSIsIltvYmplY3QgVWludDhBcnJheV0iLCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsIltvYmplY3QgSW50MTZBcnJheV0iLCJbb2JqZWN0IFVpbnQxNkFycmF5XSIsIltvYmplY3QgSW50MzJBcnJheV0iLCJbb2JqZWN0IFVpbnQzMkFycmF5XSIsIltvYmplY3QgRmxvYXQzMkFycmF5XSIsIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdLHU9QXJyYXlCdWZmZXIuaXNWaWV3fHxmdW5jdGlvbihhKXtyZXR1cm4gYSYmZC5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKSk+LTF9O2Z1bmN0aW9uIHkoYSl7aWYodHlwZW9mIGEhPSJzdHJpbmciJiYoYT1TdHJpbmcoYSkpLC9bXmEtejAtOVwtIyQlJicqKy5eX2B8fl0vaS50ZXN0KGEpKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lIik7cmV0dXJuIGEudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBnKGEpe3JldHVybiB0eXBlb2YgYSE9InN0cmluZyImJihhPVN0cmluZyhhKSksYX1mdW5jdGlvbiBiKGEpe3ZhciBoPXtuZXh0OmZ1bmN0aW9uKCl7dmFyIF89YS5zaGlmdCgpO3JldHVybntkb25lOl89PT12b2lkIDAsdmFsdWU6X319fTtyZXR1cm4gYy5pdGVyYWJsZSYmKGhbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiBofSksaH1mdW5jdGlvbiBtKGEpe3RoaXMubWFwPXt9LGEgaW5zdGFuY2VvZiBtP2EuZm9yRWFjaChmdW5jdGlvbihoLF8pe3RoaXMuYXBwZW5kKF8saCl9LHRoaXMpOkFycmF5LmlzQXJyYXkoYSk/YS5mb3JFYWNoKGZ1bmN0aW9uKGgpe3RoaXMuYXBwZW5kKGhbMF0saFsxXSl9LHRoaXMpOmEmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGEpLmZvckVhY2goZnVuY3Rpb24oaCl7dGhpcy5hcHBlbmQoaCxhW2hdKX0sdGhpcyl9bS5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKGEsaCl7YT15KGEpLGg9ZyhoKTt2YXIgXz10aGlzLm1hcFthXTt0aGlzLm1hcFthXT1fP18rIiwgIitoOmh9LG0ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihhKXtkZWxldGUgdGhpcy5tYXBbeShhKV19LG0ucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtyZXR1cm4gYT15KGEpLHRoaXMuaGFzKGEpP3RoaXMubWFwW2FdOm51bGx9LG0ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5tYXAuaGFzT3duUHJvcGVydHkoeShhKSl9LG0ucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGgpe3RoaXMubWFwW3koYSldPWcoaCl9LG0ucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oYSxoKXtmb3IodmFyIF8gaW4gdGhpcy5tYXApdGhpcy5tYXAuaGFzT3duUHJvcGVydHkoXykmJmEuY2FsbChoLHRoaXMubWFwW19dLF8sdGhpcyl9LG0ucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGgsXyl7YS5wdXNoKF8pfSksYihhKX0sbS5wcm90b3R5cGUudmFsdWVzPWZ1bmN0aW9uKCl7dmFyIGE9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihoKXthLnB1c2goaCl9KSxiKGEpfSxtLnByb3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKCl7dmFyIGE9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihoLF8pe2EucHVzaChbXyxoXSl9KSxiKGEpfSxjLml0ZXJhYmxlJiYobS5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXT1tLnByb3RvdHlwZS5lbnRyaWVzKTtmdW5jdGlvbiBOKGEpe2lmKGEuYm9keVVzZWQpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoIkFscmVhZHkgcmVhZCIpKTthLmJvZHlVc2VkPSEwfWZ1bmN0aW9uIFIoYSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGgsXyl7YS5vbmxvYWQ9ZnVuY3Rpb24oKXtoKGEucmVzdWx0KX0sYS5vbmVycm9yPWZ1bmN0aW9uKCl7XyhhLmVycm9yKX19KX1mdW5jdGlvbiBQKGEpe3ZhciBoPW5ldyBGaWxlUmVhZGVyLF89UihoKTtyZXR1cm4gaC5yZWFkQXNBcnJheUJ1ZmZlcihhKSxffWZ1bmN0aW9uIGooYSl7dmFyIGg9bmV3IEZpbGVSZWFkZXIsXz1SKGgpO3JldHVybiBoLnJlYWRBc1RleHQoYSksX31mdW5jdGlvbiB2KGEpe2Zvcih2YXIgaD1uZXcgVWludDhBcnJheShhKSxfPW5ldyBBcnJheShoLmxlbmd0aCksUz0wO1M8aC5sZW5ndGg7UysrKV9bU109U3RyaW5nLmZyb21DaGFyQ29kZShoW1NdKTtyZXR1cm4gXy5qb2luKCIiKX1mdW5jdGlvbiBFKGEpe2lmKGEuc2xpY2UpcmV0dXJuIGEuc2xpY2UoMCk7dmFyIGg9bmV3IFVpbnQ4QXJyYXkoYS5ieXRlTGVuZ3RoKTtyZXR1cm4gaC5zZXQobmV3IFVpbnQ4QXJyYXkoYSkpLGguYnVmZmVyfWZ1bmN0aW9uIHcoKXtyZXR1cm4gdGhpcy5ib2R5VXNlZD0hMSx0aGlzLl9pbml0Qm9keT1mdW5jdGlvbihhKXt0aGlzLl9ib2R5SW5pdD1hLGE/dHlwZW9mIGE9PSJzdHJpbmciP3RoaXMuX2JvZHlUZXh0PWE6Yy5ibG9iJiZCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpP3RoaXMuX2JvZHlCbG9iPWE6Yy5mb3JtRGF0YSYmRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSk/dGhpcy5fYm9keUZvcm1EYXRhPWE6Yy5zZWFyY2hQYXJhbXMmJlVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKT90aGlzLl9ib2R5VGV4dD1hLnRvU3RyaW5nKCk6Yy5hcnJheUJ1ZmZlciYmYy5ibG9iJiZmKGEpPyh0aGlzLl9ib2R5QXJyYXlCdWZmZXI9RShhLmJ1ZmZlciksdGhpcy5fYm9keUluaXQ9bmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKTpjLmFycmF5QnVmZmVyJiYoQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSl8fHUoYSkpP3RoaXMuX2JvZHlBcnJheUJ1ZmZlcj1FKGEpOnRoaXMuX2JvZHlUZXh0PWE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpOnRoaXMuX2JvZHlUZXh0PSIiLHRoaXMuaGVhZGVycy5nZXQoImNvbnRlbnQtdHlwZSIpfHwodHlwZW9mIGE9PSJzdHJpbmciP3RoaXMuaGVhZGVycy5zZXQoImNvbnRlbnQtdHlwZSIsInRleHQvcGxhaW47Y2hhcnNldD1VVEYtOCIpOnRoaXMuX2JvZHlCbG9iJiZ0aGlzLl9ib2R5QmxvYi50eXBlP3RoaXMuaGVhZGVycy5zZXQoImNvbnRlbnQtdHlwZSIsdGhpcy5fYm9keUJsb2IudHlwZSk6Yy5zZWFyY2hQYXJhbXMmJlVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKSYmdGhpcy5oZWFkZXJzLnNldCgiY29udGVudC10eXBlIiwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgiKSl9LGMuYmxvYiYmKHRoaXMuYmxvYj1mdW5jdGlvbigpe3ZhciBhPU4odGhpcyk7aWYoYSlyZXR1cm4gYTtpZih0aGlzLl9ib2R5QmxvYilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlCbG9iKTtpZih0aGlzLl9ib2R5QXJyYXlCdWZmZXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpO2lmKHRoaXMuX2JvZHlGb3JtRGF0YSl0aHJvdyBuZXcgRXJyb3IoImNvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYiIpO3JldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpfSx0aGlzLmFycmF5QnVmZmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JvZHlBcnJheUJ1ZmZlcj9OKHRoaXMpfHxQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKTp0aGlzLmJsb2IoKS50aGVuKFApfSksdGhpcy50ZXh0PWZ1bmN0aW9uKCl7dmFyIGE9Tih0aGlzKTtpZihhKXJldHVybiBhO2lmKHRoaXMuX2JvZHlCbG9iKXJldHVybiBqKHRoaXMuX2JvZHlCbG9iKTtpZih0aGlzLl9ib2R5QXJyYXlCdWZmZXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpO2lmKHRoaXMuX2JvZHlGb3JtRGF0YSl0aHJvdyBuZXcgRXJyb3IoImNvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dCIpO3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpfSxjLmZvcm1EYXRhJiYodGhpcy5mb3JtRGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQoKS50aGVuKHgpfSksdGhpcy5qc29uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSl9LHRoaXN9dmFyIEM9WyJERUxFVEUiLCJHRVQiLCJIRUFEIiwiT1BUSU9OUyIsIlBPU1QiLCJQVVQiXTtmdW5jdGlvbiBMKGEpe3ZhciBoPWEudG9VcHBlckNhc2UoKTtyZXR1cm4gQy5pbmRleE9mKGgpPi0xP2g6YX1mdW5jdGlvbiBJKGEsaCl7aD1ofHx7fTt2YXIgXz1oLmJvZHk7aWYoYSBpbnN0YW5jZW9mIEkpe2lmKGEuYm9keVVzZWQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQWxyZWFkeSByZWFkIik7dGhpcy51cmw9YS51cmwsdGhpcy5jcmVkZW50aWFscz1hLmNyZWRlbnRpYWxzLGguaGVhZGVyc3x8KHRoaXMuaGVhZGVycz1uZXcgbShhLmhlYWRlcnMpKSx0aGlzLm1ldGhvZD1hLm1ldGhvZCx0aGlzLm1vZGU9YS5tb2RlLHRoaXMuc2lnbmFsPWEuc2lnbmFsLCFfJiZhLl9ib2R5SW5pdCE9bnVsbCYmKF89YS5fYm9keUluaXQsYS5ib2R5VXNlZD0hMCl9ZWxzZSB0aGlzLnVybD1TdHJpbmcoYSk7aWYodGhpcy5jcmVkZW50aWFscz1oLmNyZWRlbnRpYWxzfHx0aGlzLmNyZWRlbnRpYWxzfHwic2FtZS1vcmlnaW4iLChoLmhlYWRlcnN8fCF0aGlzLmhlYWRlcnMpJiYodGhpcy5oZWFkZXJzPW5ldyBtKGguaGVhZGVycykpLHRoaXMubWV0aG9kPUwoaC5tZXRob2R8fHRoaXMubWV0aG9kfHwiR0VUIiksdGhpcy5tb2RlPWgubW9kZXx8dGhpcy5tb2RlfHxudWxsLHRoaXMuc2lnbmFsPWguc2lnbmFsfHx0aGlzLnNpZ25hbCx0aGlzLnJlZmVycmVyPW51bGwsKHRoaXMubWV0aG9kPT09IkdFVCJ8fHRoaXMubWV0aG9kPT09IkhFQUQiKSYmXyl0aHJvdyBuZXcgVHlwZUVycm9yKCJCb2R5IG5vdCBhbGxvd2VkIGZvciBHRVQgb3IgSEVBRCByZXF1ZXN0cyIpO3RoaXMuX2luaXRCb2R5KF8pfUkucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBJKHRoaXMse2JvZHk6dGhpcy5fYm9keUluaXR9KX07ZnVuY3Rpb24geChhKXt2YXIgaD1uZXcgRm9ybURhdGE7cmV0dXJuIGEudHJpbSgpLnNwbGl0KCImIikuZm9yRWFjaChmdW5jdGlvbihfKXtpZihfKXt2YXIgUz1fLnNwbGl0KCI9Iiksaz1TLnNoaWZ0KCkucmVwbGFjZSgvXCsvZywiICIpLEE9Uy5qb2luKCI9IikucmVwbGFjZSgvXCsvZywiICIpO2guYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChrKSxkZWNvZGVVUklDb21wb25lbnQoQSkpfX0pLGh9ZnVuY3Rpb24geihhKXt2YXIgaD1uZXcgbSxfPWEucmVwbGFjZSgvXHI/XG5bXHQgXSsvZywiICIpO3JldHVybiBfLnNwbGl0KC9ccj9cbi8pLmZvckVhY2goZnVuY3Rpb24oUyl7dmFyIGs9Uy5zcGxpdCgiOiIpLEE9ay5zaGlmdCgpLnRyaW0oKTtpZihBKXt2YXIgSz1rLmpvaW4oIjoiKS50cmltKCk7aC5hcHBlbmQoQSxLKX19KSxofXcuY2FsbChJLnByb3RvdHlwZSk7ZnVuY3Rpb24gVihhLGgpe2h8fChoPXt9KSx0aGlzLnR5cGU9ImRlZmF1bHQiLHRoaXMuc3RhdHVzPWguc3RhdHVzPT09dm9pZCAwPzIwMDpoLnN0YXR1cyx0aGlzLm9rPXRoaXMuc3RhdHVzPj0yMDAmJnRoaXMuc3RhdHVzPDMwMCx0aGlzLnN0YXR1c1RleHQ9InN0YXR1c1RleHQiaW4gaD9oLnN0YXR1c1RleHQ6Ik9LIix0aGlzLmhlYWRlcnM9bmV3IG0oaC5oZWFkZXJzKSx0aGlzLnVybD1oLnVybHx8IiIsdGhpcy5faW5pdEJvZHkoYSl9dy5jYWxsKFYucHJvdG90eXBlKSxWLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVih0aGlzLl9ib2R5SW5pdCx7c3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6dGhpcy5zdGF0dXNUZXh0LGhlYWRlcnM6bmV3IG0odGhpcy5oZWFkZXJzKSx1cmw6dGhpcy51cmx9KX0sVi5lcnJvcj1mdW5jdGlvbigpe3ZhciBhPW5ldyBWKG51bGwse3N0YXR1czowLHN0YXR1c1RleHQ6IiJ9KTtyZXR1cm4gYS50eXBlPSJlcnJvciIsYX07dmFyIEg9WzMwMSwzMDIsMzAzLDMwNywzMDhdO1YucmVkaXJlY3Q9ZnVuY3Rpb24oYSxoKXtpZihILmluZGV4T2YoaCk9PT0tMSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBzdGF0dXMgY29kZSIpO3JldHVybiBuZXcgVihudWxsLHtzdGF0dXM6aCxoZWFkZXJzOntsb2NhdGlvbjphfX0pfSxvLkRPTUV4Y2VwdGlvbj1zLkRPTUV4Y2VwdGlvbjt0cnl7bmV3IG8uRE9NRXhjZXB0aW9ufWNhdGNoKGEpe28uRE9NRXhjZXB0aW9uPWZ1bmN0aW9uKGgsXyl7dGhpcy5tZXNzYWdlPWgsdGhpcy5uYW1lPV87dmFyIFM9RXJyb3IoaCk7dGhpcy5zdGFjaz1TLnN0YWNrfSxvLkRPTUV4Y2VwdGlvbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLG8uRE9NRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1vLkRPTUV4Y2VwdGlvbn1mdW5jdGlvbiBYKGEsaCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKF8sUyl7dmFyIGs9bmV3IEkoYSxoKTtpZihrLnNpZ25hbCYmay5zaWduYWwuYWJvcnRlZClyZXR1cm4gUyhuZXcgby5ET01FeGNlcHRpb24oIkFib3J0ZWQiLCJBYm9ydEVycm9yIikpO3ZhciBBPW5ldyBYTUxIdHRwUmVxdWVzdDtmdW5jdGlvbiBLKCl7QS5hYm9ydCgpfUEub25sb2FkPWZ1bmN0aW9uKCl7dmFyIHE9e3N0YXR1czpBLnN0YXR1cyxzdGF0dXNUZXh0OkEuc3RhdHVzVGV4dCxoZWFkZXJzOnooQS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKXx8IiIpfTtxLnVybD0icmVzcG9uc2VVUkwiaW4gQT9BLnJlc3BvbnNlVVJMOnEuaGVhZGVycy5nZXQoIlgtUmVxdWVzdC1VUkwiKTt2YXIgVz0icmVzcG9uc2UiaW4gQT9BLnJlc3BvbnNlOkEucmVzcG9uc2VUZXh0O18obmV3IFYoVyxxKSl9LEEub25lcnJvcj1mdW5jdGlvbigpe1MobmV3IFR5cGVFcnJvcigiTmV0d29yayByZXF1ZXN0IGZhaWxlZCIpKX0sQS5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtTKG5ldyBUeXBlRXJyb3IoIk5ldHdvcmsgcmVxdWVzdCBmYWlsZWQiKSl9LEEub25hYm9ydD1mdW5jdGlvbigpe1MobmV3IG8uRE9NRXhjZXB0aW9uKCJBYm9ydGVkIiwiQWJvcnRFcnJvciIpKX0sQS5vcGVuKGsubWV0aG9kLGsudXJsLCEwKSxrLmNyZWRlbnRpYWxzPT09ImluY2x1ZGUiP0Eud2l0aENyZWRlbnRpYWxzPSEwOmsuY3JlZGVudGlhbHM9PT0ib21pdCImJihBLndpdGhDcmVkZW50aWFscz0hMSksInJlc3BvbnNlVHlwZSJpbiBBJiZjLmJsb2ImJihBLnJlc3BvbnNlVHlwZT0iYmxvYiIpLGsuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHEsVyl7QS5zZXRSZXF1ZXN0SGVhZGVyKFcscSl9KSxrLnNpZ25hbCYmKGsuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixLKSxBLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe0EucmVhZHlTdGF0ZT09PTQmJmsuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixLKX0pLEEuc2VuZCh0eXBlb2Ygay5fYm9keUluaXQ9PSJ1bmRlZmluZWQiP251bGw6ay5fYm9keUluaXQpfSl9cmV0dXJuIFgucG9seWZpbGw9ITAscy5mZXRjaHx8KHMuZmV0Y2g9WCxzLkhlYWRlcnM9bSxzLlJlcXVlc3Q9SSxzLlJlc3BvbnNlPVYpLG8uSGVhZGVycz1tLG8uUmVxdWVzdD1JLG8uUmVzcG9uc2U9VixvLmZldGNoPVgsT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG99KSh7fSl9KShpKSxpLmZldGNoLnBvbnlmaWxsPSEwLGRlbGV0ZSBpLmZldGNoLnBvbHlmaWxsO3ZhciByPWk7dD1yLmZldGNoLHQuZGVmYXVsdD1yLmZldGNoLHQuZmV0Y2g9ci5mZXRjaCx0LkhlYWRlcnM9ci5IZWFkZXJzLHQuUmVxdWVzdD1yLlJlcXVlc3QsdC5SZXNwb25zZT1yLlJlc3BvbnNlLGUuZXhwb3J0cz10fSkoUWUsUWUuZXhwb3J0cyk7dmFyIGtlPVFlLmV4cG9ydHMsUmU9RHQoa2UpLEduPSQoe19fcHJvdG9fXzpudWxsLGRlZmF1bHQ6UmV9LFtrZV0pO2NvbnN0IHBlPWU9PntsZXQgdD17fTtyZXR1cm4gZSYmKHR5cGVvZiBIZWFkZXJzIT0idW5kZWZpbmVkIiYmZSBpbnN0YW5jZW9mIEhlYWRlcnN8fEduJiZrZS5IZWFkZXJzJiZlIGluc3RhbmNlb2Yga2UuSGVhZGVycz90PWVlKGUpOkFycmF5LmlzQXJyYXkoZSk/ZS5mb3JFYWNoKChbbixpXSk9PntuJiZpIT09dm9pZCAwJiYodFtuXT1pKX0pOnQ9ZSksdH0sQ3Q9ZT0+ZS5yZXBsYWNlKC8oW1xzLF18I1teXG5ccl0rKSsvZywiICIpLnRyaW0oKSx6bj1lPT57aWYoIUFycmF5LmlzQXJyYXkoZS5xdWVyeSkpe2NvbnN0IGk9ZSxyPVtgcXVlcnk9JHtlbmNvZGVVUklDb21wb25lbnQoQ3QoaS5xdWVyeSkpfWBdO3JldHVybiBlLnZhcmlhYmxlcyYmci5wdXNoKGB2YXJpYWJsZXM9JHtlbmNvZGVVUklDb21wb25lbnQoaS5qc29uU2VyaWFsaXplci5zdHJpbmdpZnkoaS52YXJpYWJsZXMpKX1gKSxpLm9wZXJhdGlvbk5hbWUmJnIucHVzaChgb3BlcmF0aW9uTmFtZT0ke2VuY29kZVVSSUNvbXBvbmVudChpLm9wZXJhdGlvbk5hbWUpfWApLHIuam9pbigiJiIpfWlmKHR5cGVvZiBlLnZhcmlhYmxlcyE9InVuZGVmaW5lZCImJiFBcnJheS5pc0FycmF5KGUudmFyaWFibGVzKSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjcmVhdGUgcXVlcnkgd2l0aCBnaXZlbiB2YXJpYWJsZSB0eXBlLCBhcnJheSBleHBlY3RlZCIpO2NvbnN0IHQ9ZSxuPWUucXVlcnkucmVkdWNlKChpLHIscyk9PihpLnB1c2goe3F1ZXJ5OkN0KHIpLHZhcmlhYmxlczp0LnZhcmlhYmxlcz90Lmpzb25TZXJpYWxpemVyLnN0cmluZ2lmeSh0LnZhcmlhYmxlc1tzXSk6dm9pZCAwfSksaSksW10pO3JldHVybmBxdWVyeT0ke2VuY29kZVVSSUNvbXBvbmVudCh0Lmpzb25TZXJpYWxpemVyLnN0cmluZ2lmeShuKSl9YH0sSG49ZT0+dD0+Sih0aGlzLG51bGwsZnVuY3Rpb24qKCl7dmFyIE47Y29uc3R7dXJsOm4scXVlcnk6aSx2YXJpYWJsZXM6cixvcGVyYXRpb25OYW1lOnMsZmV0Y2g6byxmZXRjaE9wdGlvbnM6YyxtaWRkbGV3YXJlOmZ9PXQsZD1EKHt9LHQuaGVhZGVycyk7bGV0IHU9IiIseTtlPT09IlBPU1QiPyh5PUpuKGkscixzLGMuanNvblNlcmlhbGl6ZXIpLHR5cGVvZiB5PT0ic3RyaW5nIiYmKGRbIkNvbnRlbnQtVHlwZSJdPSJhcHBsaWNhdGlvbi9qc29uIikpOnU9em4oe3F1ZXJ5OmksdmFyaWFibGVzOnIsb3BlcmF0aW9uTmFtZTpzLGpzb25TZXJpYWxpemVyOihOPWMuanNvblNlcmlhbGl6ZXIpIT1udWxsP046Rn0pO2NvbnN0IGc9RCh7bWV0aG9kOmUsaGVhZGVyczpkLGJvZHk6eX0sYyk7bGV0IGI9bixtPWc7aWYoZil7Y29uc3QgUj15aWVsZCBQcm9taXNlLnJlc29sdmUoZihCZShEKHt9LGcpLHt1cmw6bixvcGVyYXRpb25OYW1lOnMsdmFyaWFibGVzOnJ9KSkpLHt1cmw6an09Uix2PWdlKFIsWyJ1cmwiXSk7Yj1qLG09dn1yZXR1cm4gdSYmKGI9YCR7Yn0/JHt1fWApLHlpZWxkIG8oYixtKX0pO2NsYXNzIFlue2NvbnN0cnVjdG9yKHQsbj17fSl7dGhpcy51cmw9dCx0aGlzLnJlcXVlc3RDb25maWc9bix0aGlzLnJhd1JlcXVlc3Q9KC4uLmkpPT5KKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtjb25zdFtyLHMsb109aSxjPVVlKHIscyxvKSxSPXRoaXMucmVxdWVzdENvbmZpZyx7aGVhZGVyczpmLGZldGNoOmQ9UmUsbWV0aG9kOnU9IlBPU1QiLHJlcXVlc3RNaWRkbGV3YXJlOnkscmVzcG9uc2VNaWRkbGV3YXJlOmd9PVIsYj1nZShSLFsiaGVhZGVycyIsImZldGNoIiwibWV0aG9kIiwicmVxdWVzdE1pZGRsZXdhcmUiLCJyZXNwb25zZU1pZGRsZXdhcmUiXSkse3VybDptfT10aGlzO2Muc2lnbmFsIT09dm9pZCAwJiYoYi5zaWduYWw9Yy5zaWduYWwpO2NvbnN0e29wZXJhdGlvbk5hbWU6Tn09SmUoYy5xdWVyeSk7cmV0dXJuIFhlKHt1cmw6bSxxdWVyeTpjLnF1ZXJ5LHZhcmlhYmxlczpjLnZhcmlhYmxlcyxoZWFkZXJzOkQoRCh7fSxwZShXZShmKSkpLHBlKGMucmVxdWVzdEhlYWRlcnMpKSxvcGVyYXRpb25OYW1lOk4sZmV0Y2g6ZCxtZXRob2Q6dSxmZXRjaE9wdGlvbnM6YixtaWRkbGV3YXJlOnl9KS50aGVuKFA9PihnJiZnKFApLFApKS5jYXRjaChQPT57dGhyb3cgZyYmZyhQKSxQfSl9KX1yZXF1ZXN0KHQsLi4ubil7cmV0dXJuIEoodGhpcyxudWxsLGZ1bmN0aW9uKigpe2NvbnN0W2kscl09bixzPVNlKHQsaSxyKSxOPXRoaXMucmVxdWVzdENvbmZpZyx7aGVhZGVyczpvLGZldGNoOmM9UmUsbWV0aG9kOmY9IlBPU1QiLHJlcXVlc3RNaWRkbGV3YXJlOmQscmVzcG9uc2VNaWRkbGV3YXJlOnV9PU4seT1nZShOLFsiaGVhZGVycyIsImZldGNoIiwibWV0aG9kIiwicmVxdWVzdE1pZGRsZXdhcmUiLCJyZXNwb25zZU1pZGRsZXdhcmUiXSkse3VybDpnfT10aGlzO3Muc2lnbmFsIT09dm9pZCAwJiYoeS5zaWduYWw9cy5zaWduYWwpO2NvbnN0e3F1ZXJ5OmIsb3BlcmF0aW9uTmFtZTptfT1KZShzLmRvY3VtZW50KTtyZXR1cm4gWGUoe3VybDpnLHF1ZXJ5OmIsdmFyaWFibGVzOnMudmFyaWFibGVzLGhlYWRlcnM6RChEKHt9LHBlKFdlKG8pKSkscGUocy5yZXF1ZXN0SGVhZGVycykpLG9wZXJhdGlvbk5hbWU6bSxmZXRjaDpjLG1ldGhvZDpmLGZldGNoT3B0aW9uczp5LG1pZGRsZXdhcmU6ZH0pLnRoZW4oUj0+KHUmJnUoUiksUi5kYXRhKSkuY2F0Y2goUj0+e3Rocm93IHUmJnUoUiksUn0pfSl9YmF0Y2hSZXF1ZXN0cyh0LG4pe3ZhciBkO2NvbnN0IGk9VmUodCxuKSxmPXRoaXMucmVxdWVzdENvbmZpZyx7aGVhZGVyczpyfT1mLHM9Z2UoZixbImhlYWRlcnMiXSk7aS5zaWduYWwhPT12b2lkIDAmJihzLnNpZ25hbD1pLnNpZ25hbCk7Y29uc3Qgbz1pLmRvY3VtZW50cy5tYXAoKHtkb2N1bWVudDp1fSk9PkplKHUpLnF1ZXJ5KSxjPWkuZG9jdW1lbnRzLm1hcCgoe3ZhcmlhYmxlczp1fSk9PnUpO3JldHVybiBYZSh7dXJsOnRoaXMudXJsLHF1ZXJ5Om8sdmFyaWFibGVzOmMsaGVhZGVyczpEKEQoe30scGUoV2UocikpKSxwZShpLnJlcXVlc3RIZWFkZXJzKSksb3BlcmF0aW9uTmFtZTp2b2lkIDAsZmV0Y2g6KGQ9dGhpcy5yZXF1ZXN0Q29uZmlnLmZldGNoKSE9bnVsbD9kOlJlLG1ldGhvZDp0aGlzLnJlcXVlc3RDb25maWcubWV0aG9kfHwiUE9TVCIsZmV0Y2hPcHRpb25zOnMsbWlkZGxld2FyZTp0aGlzLnJlcXVlc3RDb25maWcucmVxdWVzdE1pZGRsZXdhcmV9KS50aGVuKHU9Pih0aGlzLnJlcXVlc3RDb25maWcucmVzcG9uc2VNaWRkbGV3YXJlJiZ0aGlzLnJlcXVlc3RDb25maWcucmVzcG9uc2VNaWRkbGV3YXJlKHUpLHUuZGF0YSkpLmNhdGNoKHU9Pnt0aHJvdyB0aGlzLnJlcXVlc3RDb25maWcucmVzcG9uc2VNaWRkbGV3YXJlJiZ0aGlzLnJlcXVlc3RDb25maWcucmVzcG9uc2VNaWRkbGV3YXJlKHUpLHV9KX1zZXRIZWFkZXJzKHQpe3JldHVybiB0aGlzLnJlcXVlc3RDb25maWcuaGVhZGVycz10LHRoaXN9c2V0SGVhZGVyKHQsbil7Y29uc3R7aGVhZGVyczppfT10aGlzLnJlcXVlc3RDb25maWc7cmV0dXJuIGk/aVt0XT1uOnRoaXMucmVxdWVzdENvbmZpZy5oZWFkZXJzPXtbdF06bn0sdGhpc31zZXRFbmRwb2ludCh0KXtyZXR1cm4gdGhpcy51cmw9dCx0aGlzfX1jb25zdCBYZT1lPT5KKHRoaXMsbnVsbCxmdW5jdGlvbiooKXt2YXIgdSx5O2NvbnN0e3F1ZXJ5OnQsdmFyaWFibGVzOm4sZmV0Y2hPcHRpb25zOml9PWUscj1IbihCKCh1PWUubWV0aG9kKSE9bnVsbD91OiJwb3N0IikpLHM9QXJyYXkuaXNBcnJheShlLnF1ZXJ5KSxvPXlpZWxkIHIoZSksYz15aWVsZCBRbihvLCh5PWkuanNvblNlcmlhbGl6ZXIpIT1udWxsP3k6RiksZj1BcnJheS5pc0FycmF5KGMpPyFjLnNvbWUoKHtkYXRhOmJ9KT0+IWIpOiEhYy5kYXRhLGQ9QXJyYXkuaXNBcnJheShjKXx8IWMuZXJyb3JzfHxBcnJheS5pc0FycmF5KGMuZXJyb3JzKSYmIWMuZXJyb3JzLmxlbmd0aHx8aS5lcnJvclBvbGljeT09PSJhbGwifHxpLmVycm9yUG9saWN5PT09Imlnbm9yZSI7aWYoby5vayYmZCYmZil7Y29uc3QgZz0oQXJyYXkuaXNBcnJheShjKSxjKSx7ZXJyb3JzOmJ9PWcsbT1nZShnLFsiZXJyb3JzIl0pLE49aS5lcnJvclBvbGljeT09PSJpZ25vcmUiP206YztyZXR1cm4gQmUoRCh7fSxzP3tkYXRhOk59Ok4pLHtoZWFkZXJzOm8uaGVhZGVycyxzdGF0dXM6by5zdGF0dXN9KX1lbHNle2NvbnN0IGI9dHlwZW9mIGM9PSJzdHJpbmciP3tlcnJvcjpjfTpjO3Rocm93IG5ldyBkZShCZShEKHt9LGIpLHtzdGF0dXM6by5zdGF0dXMsaGVhZGVyczpvLmhlYWRlcnN9KSx7cXVlcnk6dCx2YXJpYWJsZXM6bn0pfX0pLEpuPShlLHQsbixpKT0+e2NvbnN0IHI9aSE9bnVsbD9pOkY7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIHIuc3RyaW5naWZ5KHtxdWVyeTplLHZhcmlhYmxlczp0LG9wZXJhdGlvbk5hbWU6bn0pO2lmKHR5cGVvZiB0IT0idW5kZWZpbmVkIiYmIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY3JlYXRlIHJlcXVlc3QgYm9keSB3aXRoIGdpdmVuIHZhcmlhYmxlIHR5cGUsIGFycmF5IGV4cGVjdGVkIik7Y29uc3Qgcz1lLnJlZHVjZSgobyxjLGYpPT4oby5wdXNoKHtxdWVyeTpjLHZhcmlhYmxlczp0P3RbZl06dm9pZCAwfSksbyksW10pO3JldHVybiByLnN0cmluZ2lmeShzKX0sUW49KGUsdCk9PkoodGhpcyxudWxsLGZ1bmN0aW9uKigpe2xldCBuO3JldHVybiBlLmhlYWRlcnMuZm9yRWFjaCgoaSxyKT0+e3IudG9Mb3dlckNhc2UoKT09PSJjb250ZW50LXR5cGUiJiYobj1pKX0pLG4mJihuLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgiYXBwbGljYXRpb24vanNvbiIpfHxuLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgiYXBwbGljYXRpb24vZ3JhcGhxbCtqc29uIil8fG4udG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCJhcHBsaWNhdGlvbi9ncmFwaHFsLXJlc3BvbnNlK2pzb24iKSk/dC5wYXJzZSh5aWVsZCBlLnRleHQoKSk6ZS50ZXh0KCl9KSxXZT1lPT50eXBlb2YgZT09ImZ1bmN0aW9uIj9lKCk6ZTt2YXIgWmU9e2V4cG9ydHM6e319OyhmdW5jdGlvbihlLHQpe3Q9ZS5leHBvcnRzPW4sdC5nZXRTZXJpYWxpemU9aTtmdW5jdGlvbiBuKHIscyxvLGMpe3JldHVybiBKU09OLnN0cmluZ2lmeShyLGkocyxjKSxvKX1mdW5jdGlvbiBpKHIscyl7dmFyIG89W10sYz1bXTtyZXR1cm4gcz09bnVsbCYmKHM9ZnVuY3Rpb24oZixkKXtyZXR1cm4gb1swXT09PWQ/IltDaXJjdWxhciB+XSI6IltDaXJjdWxhciB+LiIrYy5zbGljZSgwLG8uaW5kZXhPZihkKSkuam9pbigiLiIpKyJdIn0pLGZ1bmN0aW9uKGYsZCl7aWYoby5sZW5ndGg+MCl7dmFyIHU9by5pbmRleE9mKHRoaXMpO351P28uc3BsaWNlKHUrMSk6by5wdXNoKHRoaXMpLH51P2Muc3BsaWNlKHUsMS8wLGYpOmMucHVzaChmKSx+by5pbmRleE9mKGQpJiYoZD1zLmNhbGwodGhpcyxmLGQpKX1lbHNlIG8ucHVzaChkKTtyZXR1cm4gcj09bnVsbD9kOnIuY2FsbCh0aGlzLGYsZCl9fX0pKFplLFplLmV4cG9ydHMpO3ZhciBYbj1aZS5leHBvcnRzLG1lPUR0KFhuKTtjb25zdCBrdD0xZTMqMTU7dmFyIFBlPWZ1bmN0aW9uKCl7cmV0dXJuIFBlPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHQpe2Zvcih2YXIgbixpPTEscj1hcmd1bWVudHMubGVuZ3RoO2k8cjtpKyspe249YXJndW1lbnRzW2ldO2Zvcih2YXIgcyBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHMpJiYodFtzXT1uW3NdKX1yZXR1cm4gdH0sUGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfTt0eXBlb2YgU3VwcHJlc3NlZEVycm9yPT0iZnVuY3Rpb24iJiZTdXBwcmVzc2VkRXJyb3I7dmFyIExlPW5ldyBNYXAsS2U9bmV3IE1hcCxSdD0hMCxGZT0hMTtmdW5jdGlvbiBQdChlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXHMsXSsvZywiICIpLnRyaW0oKX1mdW5jdGlvbiBXbihlKXtyZXR1cm4gUHQoZS5zb3VyY2UuYm9keS5zdWJzdHJpbmcoZS5zdGFydCxlLmVuZCkpfWZ1bmN0aW9uIFpuKGUpe3ZhciB0PW5ldyBTZXQsbj1bXTtyZXR1cm4gZS5kZWZpbml0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGkpe2lmKGkua2luZD09PSJGcmFnbWVudERlZmluaXRpb24iKXt2YXIgcj1pLm5hbWUudmFsdWUscz1XbihpLmxvYyksbz1LZS5nZXQocik7byYmIW8uaGFzKHMpP1J0JiZjb25zb2xlLndhcm4oIldhcm5pbmc6IGZyYWdtZW50IHdpdGggbmFtZSAiK3IrYCBhbHJlYWR5IGV4aXN0cy4KZ3JhcGhxbC10YWcgZW5mb3JjZXMgYWxsIGZyYWdtZW50IG5hbWVzIGFjcm9zcyB5b3VyIGFwcGxpY2F0aW9uIHRvIGJlIHVuaXF1ZTsgcmVhZCBtb3JlIGFib3V0CnRoaXMgaW4gdGhlIGRvY3M6IGh0dHA6Ly9kZXYuYXBvbGxvZGF0YS5jb20vY29yZS9mcmFnbWVudHMuaHRtbCN1bmlxdWUtbmFtZXNgKTpvfHxLZS5zZXQocixvPW5ldyBTZXQpLG8uYWRkKHMpLHQuaGFzKHMpfHwodC5hZGQocyksbi5wdXNoKGkpKX1lbHNlIG4ucHVzaChpKX0pLFBlKFBlKHt9LGUpLHtkZWZpbml0aW9uczpufSl9ZnVuY3Rpb24gS24oZSl7dmFyIHQ9bmV3IFNldChlLmRlZmluaXRpb25zKTt0LmZvckVhY2goZnVuY3Rpb24oaSl7aS5sb2MmJmRlbGV0ZSBpLmxvYyxPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBzPWlbcl07cyYmdHlwZW9mIHM9PSJvYmplY3QiJiZ0LmFkZChzKX0pfSk7dmFyIG49ZS5sb2M7cmV0dXJuIG4mJihkZWxldGUgbi5zdGFydFRva2VuLGRlbGV0ZSBuLmVuZFRva2VuKSxlfWZ1bmN0aW9uIGVyKGUpe3ZhciB0PVB0KGUpO2lmKCFMZS5oYXModCkpe3ZhciBuPUl0KGUse2V4cGVyaW1lbnRhbEZyYWdtZW50VmFyaWFibGVzOkZlLGFsbG93TGVnYWN5RnJhZ21lbnRWYXJpYWJsZXM6RmV9KTtpZighbnx8bi5raW5kIT09IkRvY3VtZW50Iil0aHJvdyBuZXcgRXJyb3IoIk5vdCBhIHZhbGlkIEdyYXBoUUwgZG9jdW1lbnQuIik7TGUuc2V0KHQsS24oWm4obikpKX1yZXR1cm4gTGUuZ2V0KHQpfWZ1bmN0aW9uIFEoZSl7Zm9yKHZhciB0PVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbi0xXT1hcmd1bWVudHNbbl07dHlwZW9mIGU9PSJzdHJpbmciJiYoZT1bZV0pO3ZhciBpPWVbMF07cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbihyLHMpe3ImJnIua2luZD09PSJEb2N1bWVudCI/aSs9ci5sb2Muc291cmNlLmJvZHk6aSs9cixpKz1lW3MrMV19KSxlcihpKX1mdW5jdGlvbiB0cigpe0xlLmNsZWFyKCksS2UuY2xlYXIoKX1mdW5jdGlvbiBucigpe1J0PSExfWZ1bmN0aW9uIHJyKCl7RmU9ITB9ZnVuY3Rpb24gaXIoKXtGZT0hMX12YXIgYmU9e2dxbDpRLHJlc2V0Q2FjaGVzOnRyLGRpc2FibGVGcmFnbWVudFdhcm5pbmdzOm5yLGVuYWJsZUV4cGVyaW1lbnRhbEZyYWdtZW50VmFyaWFibGVzOnJyLGRpc2FibGVFeHBlcmltZW50YWxGcmFnbWVudFZhcmlhYmxlczppcn07KGZ1bmN0aW9uKGUpe2UuZ3FsPWJlLmdxbCxlLnJlc2V0Q2FjaGVzPWJlLnJlc2V0Q2FjaGVzLGUuZGlzYWJsZUZyYWdtZW50V2FybmluZ3M9YmUuZGlzYWJsZUZyYWdtZW50V2FybmluZ3MsZS5lbmFibGVFeHBlcmltZW50YWxGcmFnbWVudFZhcmlhYmxlcz1iZS5lbmFibGVFeHBlcmltZW50YWxGcmFnbWVudFZhcmlhYmxlcyxlLmRpc2FibGVFeHBlcmltZW50YWxGcmFnbWVudFZhcmlhYmxlcz1iZS5kaXNhYmxlRXhwZXJpbWVudGFsRnJhZ21lbnRWYXJpYWJsZXN9KShRfHwoUT17fSkpLFEuZGVmYXVsdD1RO2NvbnN0IEx0PVFgCglmcmFnbWVudCBNYXRjaFBhcnRzIG9uIE1hdGNoQ29uZmlnIHsKCQlyZWdleFZhbHVlCgkJbWF0Y2hWYWx1ZQoJfQpgLHNyPVFgCgltdXRhdGlvbiBQdXNoUGF5bG9hZCgKCQkkc2Vzc2lvbl9zZWN1cmVfaWQ6IFN0cmluZyEKCQkkcGF5bG9hZF9pZDogSUQhCgkJJGV2ZW50czogUmVwbGF5RXZlbnRzSW5wdXQhCgkJJG1lc3NhZ2VzOiBTdHJpbmchCgkJJHJlc291cmNlczogU3RyaW5nIQoJCSR3ZWJfc29ja2V0X2V2ZW50czogU3RyaW5nIQoJCSRlcnJvcnM6IFtFcnJvck9iamVjdElucHV0XSEKCQkkaXNfYmVhY29uOiBCb29sZWFuCgkJJGhhc19zZXNzaW9uX3VubG9hZGVkOiBCb29sZWFuCgkJJGhpZ2hsaWdodF9sb2dzOiBTdHJpbmcKCSkgewoJCXB1c2hQYXlsb2FkKAoJCQlzZXNzaW9uX3NlY3VyZV9pZDogJHNlc3Npb25fc2VjdXJlX2lkCgkJCXBheWxvYWRfaWQ6ICRwYXlsb2FkX2lkCgkJCWV2ZW50czogJGV2ZW50cwoJCQltZXNzYWdlczogJG1lc3NhZ2VzCgkJCXJlc291cmNlczogJHJlc291cmNlcwoJCQl3ZWJfc29ja2V0X2V2ZW50czogJHdlYl9zb2NrZXRfZXZlbnRzCgkJCWVycm9yczogJGVycm9ycwoJCQlpc19iZWFjb246ICRpc19iZWFjb24KCQkJaGFzX3Nlc3Npb25fdW5sb2FkZWQ6ICRoYXNfc2Vzc2lvbl91bmxvYWRlZAoJCQloaWdobGlnaHRfbG9nczogJGhpZ2hsaWdodF9sb2dzCgkJKQoJfQpgLG9yPVFgCgltdXRhdGlvbiBQdXNoU2Vzc2lvbkV2ZW50cygKCQkkc2Vzc2lvbl9zZWN1cmVfaWQ6IFN0cmluZyEKCQkkcGF5bG9hZF9pZDogSW50NjRJRCEKCQkkZGF0YTogU3RyaW5nIQoJKSB7CgkJcHVzaFNlc3Npb25FdmVudHMoCgkJCXNlc3Npb25fc2VjdXJlX2lkOiAkc2Vzc2lvbl9zZWN1cmVfaWQKCQkJcGF5bG9hZF9pZDogJHBheWxvYWRfaWQKCQkJZGF0YTogJGRhdGEKCQkpCgl9CmAsYXI9UWAKCW11dGF0aW9uIGlkZW50aWZ5U2Vzc2lvbigKCQkkc2Vzc2lvbl9zZWN1cmVfaWQ6IFN0cmluZyEKCQkkdXNlcl9pZGVudGlmaWVyOiBTdHJpbmchCgkJJHVzZXJfb2JqZWN0OiBBbnkKCSkgewoJCWlkZW50aWZ5U2Vzc2lvbigKCQkJc2Vzc2lvbl9zZWN1cmVfaWQ6ICRzZXNzaW9uX3NlY3VyZV9pZAoJCQl1c2VyX2lkZW50aWZpZXI6ICR1c2VyX2lkZW50aWZpZXIKCQkJdXNlcl9vYmplY3Q6ICR1c2VyX29iamVjdAoJCSkKCX0KYCxjcj1RYAoJbXV0YXRpb24gYWRkU2Vzc2lvblByb3BlcnRpZXMoCgkJJHNlc3Npb25fc2VjdXJlX2lkOiBTdHJpbmchCgkJJHByb3BlcnRpZXNfb2JqZWN0OiBBbnkKCSkgewoJCWFkZFNlc3Npb25Qcm9wZXJ0aWVzKAoJCQlzZXNzaW9uX3NlY3VyZV9pZDogJHNlc3Npb25fc2VjdXJlX2lkCgkJCXByb3BlcnRpZXNfb2JqZWN0OiAkcHJvcGVydGllc19vYmplY3QKCQkpCgl9CmAsdXI9UWAKCW11dGF0aW9uIHB1c2hNZXRyaWNzKCRtZXRyaWNzOiBbTWV0cmljSW5wdXRdISkgewoJCXB1c2hNZXRyaWNzKG1ldHJpY3M6ICRtZXRyaWNzKQoJfQpgLGxyPVFgCgltdXRhdGlvbiBhZGRTZXNzaW9uRmVlZGJhY2soCgkJJHNlc3Npb25fc2VjdXJlX2lkOiBTdHJpbmchCgkJJHVzZXJfbmFtZTogU3RyaW5nCgkJJHVzZXJfZW1haWw6IFN0cmluZwoJCSR2ZXJiYXRpbTogU3RyaW5nIQoJCSR0aW1lc3RhbXA6IFRpbWVzdGFtcCEKCSkgewoJCWFkZFNlc3Npb25GZWVkYmFjaygKCQkJc2Vzc2lvbl9zZWN1cmVfaWQ6ICRzZXNzaW9uX3NlY3VyZV9pZAoJCQl1c2VyX25hbWU6ICR1c2VyX25hbWUKCQkJdXNlcl9lbWFpbDogJHVzZXJfZW1haWwKCQkJdmVyYmF0aW06ICR2ZXJiYXRpbQoJCQl0aW1lc3RhbXA6ICR0aW1lc3RhbXAKCQkpCgl9CmAsZnI9UWAKCW11dGF0aW9uIGluaXRpYWxpemVTZXNzaW9uKAoJCSRzZXNzaW9uX3NlY3VyZV9pZDogU3RyaW5nIQoJCSRzZXNzaW9uX2tleTogU3RyaW5nCgkJJG9yZ2FuaXphdGlvbl92ZXJib3NlX2lkOiBTdHJpbmchCgkJJGVuYWJsZV9zdHJpY3RfcHJpdmFjeTogQm9vbGVhbiEKCQkkcHJpdmFjeV9zZXR0aW5nOiBTdHJpbmchCgkJJGVuYWJsZV9yZWNvcmRpbmdfbmV0d29ya19jb250ZW50czogQm9vbGVhbiEKCQkkY2xpZW50VmVyc2lvbjogU3RyaW5nIQoJCSRmaXJzdGxvYWRWZXJzaW9uOiBTdHJpbmchCgkJJGNsaWVudENvbmZpZzogU3RyaW5nIQoJCSRlbnZpcm9ubWVudDogU3RyaW5nIQoJCSRpZDogU3RyaW5nIQoJCSRhcHBWZXJzaW9uOiBTdHJpbmcKCQkkc2VydmljZU5hbWU6IFN0cmluZyEKCQkkY2xpZW50X2lkOiBTdHJpbmchCgkJJG5ldHdvcmtfcmVjb3JkaW5nX2RvbWFpbnM6IFtTdHJpbmchXQoJCSRkaXNhYmxlX3Nlc3Npb25fcmVjb3JkaW5nOiBCb29sZWFuCgkpIHsKCQlpbml0aWFsaXplU2Vzc2lvbigKCQkJc2Vzc2lvbl9zZWN1cmVfaWQ6ICRzZXNzaW9uX3NlY3VyZV9pZAoJCQlzZXNzaW9uX2tleTogJHNlc3Npb25fa2V5CgkJCW9yZ2FuaXphdGlvbl92ZXJib3NlX2lkOiAkb3JnYW5pemF0aW9uX3ZlcmJvc2VfaWQKCQkJZW5hYmxlX3N0cmljdF9wcml2YWN5OiAkZW5hYmxlX3N0cmljdF9wcml2YWN5CgkJCWVuYWJsZV9yZWNvcmRpbmdfbmV0d29ya19jb250ZW50czogJGVuYWJsZV9yZWNvcmRpbmdfbmV0d29ya19jb250ZW50cwoJCQljbGllbnRWZXJzaW9uOiAkY2xpZW50VmVyc2lvbgoJCQlmaXJzdGxvYWRWZXJzaW9uOiAkZmlyc3Rsb2FkVmVyc2lvbgoJCQljbGllbnRDb25maWc6ICRjbGllbnRDb25maWcKCQkJZW52aXJvbm1lbnQ6ICRlbnZpcm9ubWVudAoJCQlhcHBWZXJzaW9uOiAkYXBwVmVyc2lvbgoJCQlzZXJ2aWNlTmFtZTogJHNlcnZpY2VOYW1lCgkJCWZpbmdlcnByaW50OiAkaWQKCQkJY2xpZW50X2lkOiAkY2xpZW50X2lkCgkJCW5ldHdvcmtfcmVjb3JkaW5nX2RvbWFpbnM6ICRuZXR3b3JrX3JlY29yZGluZ19kb21haW5zCgkJCWRpc2FibGVfc2Vzc2lvbl9yZWNvcmRpbmc6ICRkaXNhYmxlX3Nlc3Npb25fcmVjb3JkaW5nCgkJCXByaXZhY3lfc2V0dGluZzogJHByaXZhY3lfc2V0dGluZwoJCSkgewoJCQlzZWN1cmVfaWQKCQkJcHJvamVjdF9pZAoJCQlzYW1wbGluZyB7CgkJCQlzcGFucyB7CgkJCQkJbmFtZSB7CgkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQl9CgkJCQkJYXR0cmlidXRlcyB7CgkJCQkJCWtleSB7CgkJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJCX0KCQkJCQkJYXR0cmlidXRlIHsKCQkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQkJfQoJCQkJCX0KCQkJCQlldmVudHMgewoJCQkJCQluYW1lIHsKCQkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQkJfQoJCQkJCQlhdHRyaWJ1dGVzIHsKCQkJCQkJCWtleSB7CgkJCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCQkJfQoJCQkJCQkJYXR0cmlidXRlIHsKCQkJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQkJc2FtcGxpbmdSYXRpbwoJCQkJfQoJCQkJbG9ncyB7CgkJCQkJbWVzc2FnZSB7CgkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQl9CgkJCQkJc2V2ZXJpdHlUZXh0IHsKCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCX0KCQkJCQlhdHRyaWJ1dGVzIHsKCQkJCQkJa2V5IHsKCQkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQkJfQoJCQkJCQlhdHRyaWJ1dGUgewoJCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCQl9CgkJCQkJfQoJCQkJCXNhbXBsaW5nUmF0aW8KCQkJCX0KCQkJfQoJCX0KCX0KCSR7THR9CmAsaHI9UWAKCXF1ZXJ5IElnbm9yZSgkaWQ6IElEISkgewoJCWlnbm9yZShpZDogJGlkKQoJfQpgLGRyPVFgCglxdWVyeSBHZXRTYW1wbGluZ0NvbmZpZygkb3JnYW5pemF0aW9uX3ZlcmJvc2VfaWQ6IFN0cmluZyEpIHsKCQlzYW1wbGluZyhvcmdhbml6YXRpb25fdmVyYm9zZV9pZDogJG9yZ2FuaXphdGlvbl92ZXJib3NlX2lkKSB7CgkJCXNwYW5zIHsKCQkJCW5hbWUgewoJCQkJCS4uLk1hdGNoUGFydHMKCQkJCX0KCQkJCWF0dHJpYnV0ZXMgewoJCQkJCWtleSB7CgkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQl9CgkJCQkJYXR0cmlidXRlIHsKCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCX0KCQkJCX0KCQkJCWV2ZW50cyB7CgkJCQkJbmFtZSB7CgkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQl9CgkJCQkJYXR0cmlidXRlcyB7CgkJCQkJCWtleSB7CgkJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJCX0KCQkJCQkJYXR0cmlidXRlIHsKCQkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJCXNhbXBsaW5nUmF0aW8KCQkJfQoJCQlsb2dzIHsKCQkJCW1lc3NhZ2UgewoJCQkJCS4uLk1hdGNoUGFydHMKCQkJCX0KCQkJCXNldmVyaXR5VGV4dCB7CgkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJfQoJCQkJYXR0cmlidXRlcyB7CgkJCQkJa2V5IHsKCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCX0KCQkJCQlhdHRyaWJ1dGUgewoJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJfQoJCQkJfQoJCQkJc2FtcGxpbmdSYXRpbwoJCQl9CgkJfQoJfQoJJHtMdH0KYCxwcj0oZSx0LG4saSk9PmUoKTtmdW5jdGlvbiBtcihlLHQ9cHIpe3JldHVybntQdXNoUGF5bG9hZChuLGkpe3JldHVybiB0KHI9PmUucmVxdWVzdChzcixuLEQoRCh7fSxpKSxyKSksIlB1c2hQYXlsb2FkIiwibXV0YXRpb24iLG4pfSxQdXNoU2Vzc2lvbkV2ZW50cyhuLGkpe3JldHVybiB0KHI9PmUucmVxdWVzdChvcixuLEQoRCh7fSxpKSxyKSksIlB1c2hTZXNzaW9uRXZlbnRzIiwibXV0YXRpb24iLG4pfSxpZGVudGlmeVNlc3Npb24obixpKXtyZXR1cm4gdChyPT5lLnJlcXVlc3QoYXIsbixEKEQoe30saSkscikpLCJpZGVudGlmeVNlc3Npb24iLCJtdXRhdGlvbiIsbil9LGFkZFNlc3Npb25Qcm9wZXJ0aWVzKG4saSl7cmV0dXJuIHQocj0+ZS5yZXF1ZXN0KGNyLG4sRChEKHt9LGkpLHIpKSwiYWRkU2Vzc2lvblByb3BlcnRpZXMiLCJtdXRhdGlvbiIsbil9LHB1c2hNZXRyaWNzKG4saSl7cmV0dXJuIHQocj0+ZS5yZXF1ZXN0KHVyLG4sRChEKHt9LGkpLHIpKSwicHVzaE1ldHJpY3MiLCJtdXRhdGlvbiIsbil9LGFkZFNlc3Npb25GZWVkYmFjayhuLGkpe3JldHVybiB0KHI9PmUucmVxdWVzdChscixuLEQoRCh7fSxpKSxyKSksImFkZFNlc3Npb25GZWVkYmFjayIsIm11dGF0aW9uIixuKX0saW5pdGlhbGl6ZVNlc3Npb24obixpKXtyZXR1cm4gdChyPT5lLnJlcXVlc3QoZnIsbixEKEQoe30saSkscikpLCJpbml0aWFsaXplU2Vzc2lvbiIsIm11dGF0aW9uIixuKX0sSWdub3JlKG4saSl7cmV0dXJuIHQocj0+ZS5yZXF1ZXN0KGhyLG4sRChEKHt9LGkpLHIpKSwiSWdub3JlIiwicXVlcnkiLG4pfSxHZXRTYW1wbGluZ0NvbmZpZyhuLGkpe3JldHVybiB0KHI9PmUucmVxdWVzdChkcixuLEQoRCh7fSxpKSxyKSksIkdldFNhbXBsaW5nQ29uZmlnIiwicXVlcnkiLG4pfX19dmFyIHRlPVVpbnQ4QXJyYXksbmU9VWludDE2QXJyYXksZXQ9SW50MzJBcnJheSx0dD1uZXcgdGUoWzAsMCwwLDAsMCwwLDAsMCwxLDEsMSwxLDIsMiwyLDIsMywzLDMsMyw0LDQsNCw0LDUsNSw1LDUsMCwwLDAsMF0pLG50PW5ldyB0ZShbMCwwLDAsMCwxLDEsMiwyLDMsMyw0LDQsNSw1LDYsNiw3LDcsOCw4LDksOSwxMCwxMCwxMSwxMSwxMiwxMiwxMywxMywwLDBdKSxGdD1uZXcgdGUoWzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdKSxNdD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1uZXcgbmUoMzEpLGk9MDtpPDMxOysraSluW2ldPXQrPTE8PGVbaS0xXTtmb3IodmFyIHI9bmV3IGV0KG5bMzBdKSxpPTE7aTwzMDsrK2kpZm9yKHZhciBzPW5baV07czxuW2krMV07KytzKXJbc109cy1uW2ldPDw1fGk7cmV0dXJue2I6bixyfX0sJHQ9TXQodHQsMikseXI9JHQuYixydD0kdC5yO3lyWzI4XT0yNTgscnRbMjU4XT0yODtmb3IodmFyIHZyPU10KG50LDApLEJ0PXZyLnIsaXQ9bmV3IG5lKDMyNzY4KSxNPTA7TTwzMjc2ODsrK00pe3ZhciBjZT0oTSY0MzY5MCk+PjF8KE0mMjE4NDUpPDwxO2NlPShjZSY1MjQyOCk+PjJ8KGNlJjEzMTA3KTw8MixjZT0oY2UmNjE2ODApPj40fChjZSYzODU1KTw8NCxpdFtNXT0oKGNlJjY1MjgwKT4+OHwoY2UmMjU1KTw8OCk+PjF9Zm9yKHZhciBOZT1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciBpPWUubGVuZ3RoLHI9MCxzPW5ldyBuZSh0KTtyPGk7KytyKWVbcl0mJisrc1tlW3JdLTFdO3ZhciBvPW5ldyBuZSh0KTtmb3Iocj0xO3I8dDsrK3Ipb1tyXT1vW3ItMV0rc1tyLTFdPDwxO3ZhciBjO2lmKG4pe2M9bmV3IG5lKDE8PHQpO3ZhciBmPTE1LXQ7Zm9yKHI9MDtyPGk7KytyKWlmKGVbcl0pZm9yKHZhciBkPXI8PDR8ZVtyXSx1PXQtZVtyXSx5PW9bZVtyXS0xXSsrPDx1LGc9eXwoMTw8dSktMTt5PD1nOysreSljW2l0W3ldPj5mXT1kfWVsc2UgZm9yKGM9bmV3IG5lKGkpLHI9MDtyPGk7KytyKWVbcl0mJihjW3JdPWl0W29bZVtyXS0xXSsrXT4+MTUtZVtyXSk7cmV0dXJuIGN9LGxlPW5ldyB0ZSgyODgpLE09MDtNPDE0NDsrK00pbGVbTV09ODtmb3IodmFyIE09MTQ0O008MjU2OysrTSlsZVtNXT05O2Zvcih2YXIgTT0yNTY7TTwyODA7KytNKWxlW01dPTc7Zm9yKHZhciBNPTI4MDtNPDI4ODsrK00pbGVbTV09ODtmb3IodmFyIE1lPW5ldyB0ZSgzMiksTT0wO008MzI7KytNKU1lW01dPTU7dmFyIGdyPU5lKGxlLDksMCksRXI9TmUoTWUsNSwwKSxVdD1mdW5jdGlvbihlKXtyZXR1cm4oZSs3KS84fDB9LFZ0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4obj09bnVsbHx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKSxuZXcgdGUoZS5zdWJhcnJheSh0LG4pKX0sb2U9ZnVuY3Rpb24oZSx0LG4pe248PD10Jjc7dmFyIGk9dC84fDA7ZVtpXXw9bixlW2krMV18PW4+Pjh9LHhlPWZ1bmN0aW9uKGUsdCxuKXtuPDw9dCY3O3ZhciBpPXQvOHwwO2VbaV18PW4sZVtpKzFdfD1uPj44LGVbaSsyXXw9bj4+MTZ9LHN0PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdLGk9MDtpPGUubGVuZ3RoOysraSllW2ldJiZuLnB1c2goe3M6aSxmOmVbaV19KTt2YXIgcj1uLmxlbmd0aCxzPW4uc2xpY2UoKTtpZighcilyZXR1cm57dDp6dCxsOjB9O2lmKHI9PTEpe3ZhciBvPW5ldyB0ZShuWzBdLnMrMSk7cmV0dXJuIG9bblswXS5zXT0xLHt0Om8sbDoxfX1uLnNvcnQoZnVuY3Rpb24odyxDKXtyZXR1cm4gdy5mLUMuZn0pLG4ucHVzaCh7czotMSxmOjI1MDAxfSk7dmFyIGM9blswXSxmPW5bMV0sZD0wLHU9MSx5PTI7Zm9yKG5bMF09e3M6LTEsZjpjLmYrZi5mLGw6YyxyOmZ9O3UhPXItMTspYz1uW25bZF0uZjxuW3ldLmY/ZCsrOnkrK10sZj1uW2QhPXUmJm5bZF0uZjxuW3ldLmY/ZCsrOnkrK10sblt1KytdPXtzOi0xLGY6Yy5mK2YuZixsOmMscjpmfTtmb3IodmFyIGc9c1swXS5zLGk9MTtpPHI7KytpKXNbaV0ucz5nJiYoZz1zW2ldLnMpO3ZhciBiPW5ldyBuZShnKzEpLG09b3Qoblt1LTFdLGIsMCk7aWYobT50KXt2YXIgaT0wLE49MCxSPW0tdCxQPTE8PFI7Zm9yKHMuc29ydChmdW5jdGlvbihDLEwpe3JldHVybiBiW0wuc10tYltDLnNdfHxDLmYtTC5mfSk7aTxyOysraSl7dmFyIGo9c1tpXS5zO2lmKGJbal0+dClOKz1QLSgxPDxtLWJbal0pLGJbal09dDtlbHNlIGJyZWFrfWZvcihOPj49UjtOPjA7KXt2YXIgdj1zW2ldLnM7Ylt2XTx0P04tPTE8PHQtYlt2XSsrLTE6KytpfWZvcig7aT49MCYmTjstLWkpe3ZhciBFPXNbaV0ucztiW0VdPT10JiYoLS1iW0VdLCsrTil9bT10fXJldHVybnt0Om5ldyB0ZShiKSxsOm19fSxvdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUucz09LTE/TWF0aC5tYXgob3QoZS5sLHQsbisxKSxvdChlLnIsdCxuKzEpKTp0W2Uuc109bn0sanQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUubGVuZ3RoO3QmJiFlWy0tdF07KTtmb3IodmFyIG49bmV3IG5lKCsrdCksaT0wLHI9ZVswXSxzPTEsbz1mdW5jdGlvbihmKXtuW2krK109Zn0sYz0xO2M8PXQ7KytjKWlmKGVbY109PXImJmMhPXQpKytzO2Vsc2V7aWYoIXImJnM+Mil7Zm9yKDtzPjEzODtzLT0xMzgpbygzMjc1NCk7cz4yJiYobyhzPjEwP3MtMTE8PDV8Mjg2OTA6cy0zPDw1fDEyMzA1KSxzPTApfWVsc2UgaWYocz4zKXtmb3IobyhyKSwtLXM7cz42O3MtPTYpbyg4MzA0KTtzPjImJihvKHMtMzw8NXw4MjA4KSxzPTApfWZvcig7cy0tOylvKHIpO3M9MSxyPWVbY119cmV0dXJue2M6bi5zdWJhcnJheSgwLGkpLG46dH19LEFlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTAsaT0wO2k8dC5sZW5ndGg7KytpKW4rPWVbaV0qdFtpXTtyZXR1cm4gbn0scXQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4ubGVuZ3RoLHI9VXQodCsyKTtlW3JdPWkmMjU1LGVbcisxXT1pPj44LGVbcisyXT1lW3JdXjI1NSxlW3IrM109ZVtyKzFdXjI1NTtmb3IodmFyIHM9MDtzPGk7KytzKWVbcitzKzRdPW5bc107cmV0dXJuKHIrNCtpKSo4fSxHdD1mdW5jdGlvbihlLHQsbixpLHIscyxvLGMsZixkLHUpe29lKHQsdSsrLG4pLCsrclsyNTZdO2Zvcih2YXIgeT1zdChyLDE1KSxnPXkudCxiPXkubCxtPXN0KHMsMTUpLE49bS50LFI9bS5sLFA9anQoZyksaj1QLmMsdj1QLm4sRT1qdChOKSx3PUUuYyxDPUUubixMPW5ldyBuZSgxOSksST0wO0k8ai5sZW5ndGg7KytJKSsrTFtqW0ldJjMxXTtmb3IodmFyIEk9MDtJPHcubGVuZ3RoOysrSSkrK0xbd1tJXSYzMV07Zm9yKHZhciB4PXN0KEwsNyksej14LnQsVj14LmwsSD0xOTtIPjQmJiF6W0Z0W0gtMV1dOy0tSCk7dmFyIFg9ZCs1PDwzLGE9QWUocixsZSkrQWUocyxNZSkrbyxoPUFlKHIsZykrQWUocyxOKStvKzE0KzMqSCtBZShMLHopKzIqTFsxNl0rMypMWzE3XSs3KkxbMThdO2lmKGY+PTAmJlg8PWEmJlg8PWgpcmV0dXJuIHF0KHQsdSxlLnN1YmFycmF5KGYsZitkKSk7dmFyIF8sUyxrLEE7aWYob2UodCx1LDErKGg8YSkpLHUrPTIsaDxhKXtfPU5lKGcsYiwwKSxTPWcsaz1OZShOLFIsMCksQT1OO3ZhciBLPU5lKHosViwwKTtvZSh0LHUsdi0yNTcpLG9lKHQsdSs1LEMtMSksb2UodCx1KzEwLEgtNCksdSs9MTQ7Zm9yKHZhciBJPTA7STxIOysrSSlvZSh0LHUrMypJLHpbRnRbSV1dKTt1Kz0zKkg7Zm9yKHZhciBxPVtqLHddLFc9MDtXPDI7KytXKWZvcih2YXIgeWU9cVtXXSxJPTA7STx5ZS5sZW5ndGg7KytJKXt2YXIgaWU9eWVbSV0mMzE7b2UodCx1LEtbaWVdKSx1Kz16W2llXSxpZT4xNSYmKG9lKHQsdSx5ZVtJXT4+NSYxMjcpLHUrPXllW0ldPj4xMil9fWVsc2UgXz1ncixTPWxlLGs9RXIsQT1NZTtmb3IodmFyIEk9MDtJPGM7KytJKXt2YXIgWT1pW0ldO2lmKFk+MjU1KXt2YXIgaWU9WT4+MTgmMzE7eGUodCx1LF9baWUrMjU3XSksdSs9U1tpZSsyNTddLGllPjcmJihvZSh0LHUsWT4+MjMmMzEpLHUrPXR0W2llXSk7dmFyIHZlPVkmMzE7eGUodCx1LGtbdmVdKSx1Kz1BW3ZlXSx2ZT4zJiYoeGUodCx1LFk+PjUmODE5MSksdSs9bnRbdmVdKX1lbHNlIHhlKHQsdSxfW1ldKSx1Kz1TW1ldfXJldHVybiB4ZSh0LHUsX1syNTZdKSx1K1NbMjU2XX0sX3I9bmV3IGV0KFs2NTU0MCwxMzEwODAsMTMxMDg4LDEzMTEwNCwyNjIxNzYsMTA0ODcwNCwxMDQ4ODMyLDIxMTQ1NjAsMjExNzYzMl0pLHp0PW5ldyB0ZSgwKSxUcj1mdW5jdGlvbihlLHQsbixpLHIscyl7dmFyIG89cy56fHxlLmxlbmd0aCxjPW5ldyB0ZShpK28rNSooMStNYXRoLmNlaWwoby83ZTMpKStyKSxmPWMuc3ViYXJyYXkoaSxjLmxlbmd0aC1yKSxkPXMubCx1PShzLnJ8fDApJjc7aWYodCl7dSYmKGZbMF09cy5yPj4zKTtmb3IodmFyIHk9X3JbdC0xXSxnPXk+PjEzLGI9eSY4MTkxLG09KDE8PG4pLTEsTj1zLnB8fG5ldyBuZSgzMjc2OCksUj1zLmh8fG5ldyBuZShtKzEpLFA9TWF0aC5jZWlsKG4vMyksaj0yKlAsdj1mdW5jdGlvbihsdCl7cmV0dXJuKGVbbHRdXmVbbHQrMV08PFBeZVtsdCsyXTw8aikmbX0sRT1uZXcgZXQoMjVlMyksdz1uZXcgbmUoMjg4KSxDPW5ldyBuZSgzMiksTD0wLEk9MCx4PXMuaXx8MCx6PTAsVj1zLnd8fDAsSD0wO3grMjxvOysreCl7dmFyIFg9dih4KSxhPXgmMzI3NjcsaD1SW1hdO2lmKE5bYV09aCxSW1hdPWEsVjw9eCl7dmFyIF89by14O2lmKChMPjdlM3x8ej4yNDU3NikmJihfPjQyM3x8IWQpKXt1PUd0KGUsZiwwLEUsdyxDLEkseixILHgtSCx1KSx6PUw9ST0wLEg9eDtmb3IodmFyIFM9MDtTPDI4NjsrK1Mpd1tTXT0wO2Zvcih2YXIgUz0wO1M8MzA7KytTKUNbU109MH12YXIgaz0yLEE9MCxLPWIscT1hLWgmMzI3Njc7aWYoXz4yJiZYPT12KHgtcSkpZm9yKHZhciBXPU1hdGgubWluKGcsXyktMSx5ZT1NYXRoLm1pbigzMjc2Nyx4KSxpZT1NYXRoLm1pbigyNTgsXyk7cTw9eWUmJi0tSyYmYSE9aDspe2lmKGVbeCtrXT09ZVt4K2stcV0pe2Zvcih2YXIgWT0wO1k8aWUmJmVbeCtZXT09ZVt4K1ktcV07KytZKTtpZihZPmspe2lmKGs9WSxBPXEsWT5XKWJyZWFrO2Zvcih2YXIgdmU9TWF0aC5taW4ocSxZLTIpLFd0PTAsUz0wO1M8dmU7KytTKXt2YXIgY3Q9eC1xK1MmMzI3NjcsVXI9TltjdF0sWnQ9Y3QtVXImMzI3Njc7WnQ+V3QmJihXdD1adCxoPWN0KX19fWE9aCxoPU5bYV0scSs9YS1oJjMyNzY3fWlmKEEpe0VbeisrXT0yNjg0MzU0NTZ8cnRba108PDE4fEJ0W0FdO3ZhciBLdD1ydFtrXSYzMSxlbj1CdFtBXSYzMTtJKz10dFtLdF0rbnRbZW5dLCsrd1syNTcrS3RdLCsrQ1tlbl0sVj14K2ssKytMfWVsc2UgRVt6KytdPWVbeF0sKyt3W2VbeF1dfX1mb3IoeD1NYXRoLm1heCh4LFYpO3g8bzsrK3gpRVt6KytdPWVbeF0sKyt3W2VbeF1dO3U9R3QoZSxmLGQsRSx3LEMsSSx6LEgseC1ILHUpLGR8fChzLnI9dSY3fGZbdS84fDBdPDwzLHUtPTcscy5oPVIscy5wPU4scy5pPXgscy53PVYpfWVsc2V7Zm9yKHZhciB4PXMud3x8MDt4PG8rZDt4Kz02NTUzNSl7dmFyIHV0PXgrNjU1MzU7dXQ+PW8mJihmW3UvOHwwXT1kLHV0PW8pLHU9cXQoZix1KzEsZS5zdWJhcnJheSh4LHV0KSl9cy5pPW99cmV0dXJuIFZ0KGMsMCxpK1V0KHUpK3IpfSxicj1mdW5jdGlvbigpe2Zvcih2YXIgZT1uZXcgSW50MzJBcnJheSgyNTYpLHQ9MDt0PDI1NjsrK3Qpe2Zvcih2YXIgbj10LGk9OTstLWk7KW49KG4mMSYmLTMwNjY3NDkxMilebj4+PjE7ZVt0XT1ufXJldHVybiBlfSgpLE5yPWZ1bmN0aW9uKCl7dmFyIGU9LTE7cmV0dXJue3A6ZnVuY3Rpb24odCl7Zm9yKHZhciBuPWUsaT0wO2k8dC5sZW5ndGg7KytpKW49YnJbbiYyNTVedFtpXV1ebj4+Pjg7ZT1ufSxkOmZ1bmN0aW9uKCl7cmV0dXJufmV9fX0seHI9ZnVuY3Rpb24oZSx0LG4saSxyKXtpZighciYmKHI9e2w6MX0sdC5kaWN0aW9uYXJ5KSl7dmFyIHM9dC5kaWN0aW9uYXJ5LnN1YmFycmF5KC0zMjc2OCksbz1uZXcgdGUocy5sZW5ndGgrZS5sZW5ndGgpO28uc2V0KHMpLG8uc2V0KGUscy5sZW5ndGgpLGU9byxyLnc9cy5sZW5ndGh9cmV0dXJuIFRyKGUsdC5sZXZlbD09bnVsbD82OnQubGV2ZWwsdC5tZW09PW51bGw/ci5sP01hdGguY2VpbChNYXRoLm1heCg4LE1hdGgubWluKDEzLE1hdGgubG9nKGUubGVuZ3RoKSkpKjEuNSk6MjA6MTIrdC5tZW0sbixpLHIpfSxhdD1mdW5jdGlvbihlLHQsbil7Zm9yKDtuOysrdCllW3RdPW4sbj4+Pj04fSxBcj1mdW5jdGlvbihlLHQpe3ZhciBuPXQuZmlsZW5hbWU7aWYoZVswXT0zMSxlWzFdPTEzOSxlWzJdPTgsZVs4XT10LmxldmVsPDI/NDp0LmxldmVsPT05PzI6MCxlWzldPTMsdC5tdGltZSE9MCYmYXQoZSw0LE1hdGguZmxvb3IobmV3IERhdGUodC5tdGltZXx8RGF0ZS5ub3coKSkvMWUzKSksbil7ZVszXT04O2Zvcih2YXIgaT0wO2k8PW4ubGVuZ3RoOysraSllW2krMTBdPW4uY2hhckNvZGVBdChpKX19LElyPWZ1bmN0aW9uKGUpe3JldHVybiAxMCsoZS5maWxlbmFtZT9lLmZpbGVuYW1lLmxlbmd0aCsxOjApfTtmdW5jdGlvbiBTcihlLHQpe3R8fCh0PXt9KTt2YXIgbj1OcigpLGk9ZS5sZW5ndGg7bi5wKGUpO3ZhciByPXhyKGUsdCxJcih0KSw4KSxzPXIubGVuZ3RoO3JldHVybiBBcihyLHQpLGF0KHIscy04LG4uZCgpKSxhdChyLHMtNCxpKSxyfXZhciBIdD10eXBlb2YgVGV4dEVuY29kZXIhPSJ1bmRlZmluZWQiJiZuZXcgVGV4dEVuY29kZXIsT3I9dHlwZW9mIFRleHREZWNvZGVyIT0idW5kZWZpbmVkIiYmbmV3IFRleHREZWNvZGVyLHdyPTA7dHJ5e09yLmRlY29kZSh6dCx7c3RyZWFtOiEwfSksd3I9MX1jYXRjaChlKXt9ZnVuY3Rpb24gRHIoZSx0KXt2YXIgbjtpZihIdClyZXR1cm4gSHQuZW5jb2RlKGUpO2Zvcih2YXIgaT1lLmxlbmd0aCxyPW5ldyB0ZShlLmxlbmd0aCsoZS5sZW5ndGg+PjEpKSxzPTAsbz1mdW5jdGlvbihkKXtyW3MrK109ZH0sbj0wO248aTsrK24pe2lmKHMrNT5yLmxlbmd0aCl7dmFyIGM9bmV3IHRlKHMrOCsoaS1uPDwxKSk7Yy5zZXQocikscj1jfXZhciBmPWUuY2hhckNvZGVBdChuKTtmPDEyOHx8dD9vKGYpOmY8MjA0OD8obygxOTJ8Zj4+NiksbygxMjh8ZiY2MykpOmY+NTUyOTUmJmY8NTczNDQ/KGY9NjU1MzYrKGYmMTA0NzU1Mil8ZS5jaGFyQ29kZUF0KCsrbikmMTAyMyxvKDI0MHxmPj4xOCksbygxMjh8Zj4+MTImNjMpLG8oMTI4fGY+PjYmNjMpLG8oMTI4fGYmNjMpKToobygyMjR8Zj4+MTIpLG8oMTI4fGY+PjYmNjMpLG8oMTI4fGYmNjMpKX1yZXR1cm4gVnQociwwLHMpfWZ1bmN0aW9uIENyKGUpe3JldHVybiBKKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtjb25zdCB0PURyKEpTT04uc3RyaW5naWZ5KGUpKSxuPVNyKHQpLGk9eWllbGQgbmV3IFByb21pc2Uocj0+e2NvbnN0IHM9bmV3IEZpbGVSZWFkZXI7cy5vbmxvYWQ9KCk9PnIocy5yZXN1bHQpLHMucmVhZEFzRGF0YVVSTChuZXcgQmxvYihbbmV3IFVpbnQ4QXJyYXkobildKSl9KTtyZXR1cm57Y29tcHJlc3NlZEJhc2U2NDppLnNsaWNlKGkuaW5kZXhPZigiLCIpKzEpLGNvbXByZXNzZWRTaXplOm4ubGVuZ3RoLGJ1ZmZlckxlbmd0aDp0Lmxlbmd0aH19KX1jbGFzcyBrcntjb25zdHJ1Y3Rvcih0LG4pe2h0KHRoaXMsImRlYnVnIik7aHQodGhpcywibmFtZSIpO3RoaXMuZGVidWc9dCx0aGlzLm5hbWU9bn1sb2coLi4udCl7aWYodGhpcy5kZWJ1Zyl7bGV0IG49YFske0RhdGUubm93KCl9XWA7dGhpcy5uYW1lJiYobis9YCAtICR7dGhpcy5uYW1lfWApLGNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsW24sLi4udF0pfX13YXJuKC4uLnQpe2xldCBuPWBbJHtEYXRlLm5vdygpfV1gO3RoaXMubmFtZSYmKG4rPWAgLSAke3RoaXMubmFtZX1gKSxjb25zb2xlLndhcm4uYXBwbHkoY29uc29sZSxbbiwuLi50XSl9fXZhciBZdD0oZT0+KGUuQmlsbGluZ1F1b3RhRXhjZWVkZWQ9IkJpbGxpbmdRdW90YUV4Y2VlZGVkIixlKSkoWXR8fHt9KTtjb25zdCBScj0zLFByPTFlMyxMcj01MDAsRnI9W1l0LkJpbGxpbmdRdW90YUV4Y2VlZGVkLnRvU3RyaW5nKCldLE1yPWU9Pnt2YXIgbjtyZXR1cm4oKG49ZS5yZXNwb25zZS5lcnJvcnMpPT1udWxsP3ZvaWQgMDpuLmZpbmQoaT0+RnIuaW5jbHVkZXMoaS5tZXNzYWdlKSkpPT09dm9pZCAwfSwkcj0oKT0+e2NvbnN0IGU9KHQsbixpLHIscz0wKT0+Sih0aGlzLG51bGwsZnVuY3Rpb24qKCl7dHJ5e3JldHVybiB5aWVsZCB0KCl9Y2F0Y2gobyl7aWYobyBpbnN0YW5jZW9mIGRlJiYhTXIobykpdGhyb3cgbztpZihzPFJyKXJldHVybiB5aWVsZCBuZXcgUHJvbWlzZShjPT5zZXRUaW1lb3V0KGMsUHIrTHIqTWF0aC5wb3coMixzKSkpLHlpZWxkIGUodCxuLGkscixzKzEpO3Rocm93IGNvbnNvbGUuZXJyb3IoYGhpZ2hsaWdodC5pbzogZGF0YSByZXF1ZXN0IGZhaWxlZCBhZnRlciAke3N9IHJldHJpZXNgKSxvfX0pO3JldHVybiBlfSxKdD01LFF0PTJlMyxCcj1bIm51bWJlciIsInN0cmluZyIsImJvb2xlYW4iXTt2YXIgWj0oZT0+KGVbZS5Jbml0aWFsaXplPTBdPSJJbml0aWFsaXplIixlW2UuUmVzZXQ9MV09IlJlc2V0IixlW2UuQXN5bmNFdmVudHM9Ml09IkFzeW5jRXZlbnRzIixlW2UuSWRlbnRpZnk9M109IklkZW50aWZ5IixlW2UuUHJvcGVydGllcz00XT0iUHJvcGVydGllcyIsZVtlLk1ldHJpY3M9NV09Ik1ldHJpY3MiLGVbZS5GZWVkYmFjaz02XT0iRmVlZGJhY2siLGVbZS5DdXN0b21FdmVudD03XT0iQ3VzdG9tRXZlbnQiLGVbZS5TdG9wPThdPSJTdG9wIixlW2UuR2V0U3RhdHVzPTldPSJHZXRTdGF0dXMiLGUpKShafHx7fSk7Y29uc3QgSWU9c2VsZjtmdW5jdGlvbiBYdChlLHQpe2NvbnN0IG49e30saT1bXSxyPVtdO2Zvcihjb25zdFtzLG9db2YgT2JqZWN0LmVudHJpZXMoZSkpe2lmKG89PW51bGwpY29udGludWU7QnIuaW5jbHVkZXModHlwZW9mIG8pfHxpLnB1c2goe1tzXTpvfSk7bGV0IGM7dHlwZW9mIG89PSJzdHJpbmciP2M9bzpjPW1lKG8pLGMubGVuZ3RoPlF0JiYoci5wdXNoKHtbc106b30pLGM9Yy5zdWJzdHJpbmcoMCxRdCkpLG5bc109Y31yZXR1cm4gdCE9PSJzZXNzaW9uIiYmKGkubGVuZ3RoPjAmJmNvbnNvbGUud2FybihgSGlnaGxpZ2h0IHdhcyBwYXNzZWQgb25lIG9yIG1vcmUgJHt0fSBwcm9wZXJ0aWVzIG5vdCBvZiB0eXBlIHN0cmluZywgbnVtYmVyLCBvciBib29sZWFuLmAsaSksci5sZW5ndGg+MCYmY29uc29sZS53YXJuKGBIaWdobGlnaHQgd2FzIHBhc3NlZCBvbmUgb3IgbW9yZSAke3R9IHByb3BlcnRpZXMgZXhjZWVkaW5nIDIwMDAgY2hhcmFjdGVycywgd2hpY2ggd2lsbCBiZSB0cnVuY2F0ZWQuYCxyKSksbn17bGV0IGUsdCxuLGk9MCxyPTAscz0hMSxvPTAsYz1uZXcga3IoITEsIlt3b3JrZXJdIik7Y29uc3QgZj1bXSxkPVtdLHU9KCk9Pm8hPT0wJiZpPEp0JiYhIShuIT1udWxsJiZuLmxlbmd0aCkseT0odixFKT0+e0llLnBvc3RNZXNzYWdlKHtyZXNwb25zZTp7dHlwZTpaLkN1c3RvbUV2ZW50LHRhZzp2LHBheWxvYWQ6RX19KX0sZz12PT5KKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtjb25zdHtpZDpFLGV2ZW50czp3LG1lc3NhZ2VzOkMsZXJyb3JzOkwscmVzb3VyY2VzU3RyaW5nOkksd2ViU29ja2V0RXZlbnRzU3RyaW5nOngsaGFzU2Vzc2lvblVubG9hZGVkOnosaGlnaGxpZ2h0TG9nczpWfT12LEg9bWUoe21lc3NhZ2VzOkN9KTtsZXQgWD17c2Vzc2lvbl9zZWN1cmVfaWQ6bixwYXlsb2FkX2lkOkUudG9TdHJpbmcoKSxldmVudHM6e2V2ZW50czp3fSxtZXNzYWdlczpILHJlc291cmNlczpJLHdlYl9zb2NrZXRfZXZlbnRzOngsZXJyb3JzOkwsaXNfYmVhY29uOiExLGhhc19zZXNzaW9uX3VubG9hZGVkOnp9O1YmJihYLmhpZ2hsaWdodF9sb2dzPVYpO2NvbnN0e2NvbXByZXNzZWRCYXNlNjQ6YSxidWZmZXJMZW5ndGg6aCxjb21wcmVzc2VkU2l6ZTpffT15aWVsZCBDcihYKSxTPXt0eXBlOlouQXN5bmNFdmVudHMsaWQ6RSxldmVudHNTaXplOmgsY29tcHJlc3NlZFNpemU6YS5sZW5ndGh9O2MubG9nKGBQdXNoaW5nIHBheWxvYWQ6ICR7SlNPTi5zdHJpbmdpZnkoe3Nlc3Npb25TZWN1cmVJRDpuLGlkOkUsZmlyc3RTSUQ6TWF0aC5taW4oLi4uWC5ldmVudHMuZXZlbnRzLm1hcChXPT5XPT1udWxsP3ZvaWQgMDpXLl9zaWQpLmZpbHRlcihXPT4hIVcpKSxldmVudHNMZW5ndGg6WC5ldmVudHMuZXZlbnRzLmxlbmd0aCxtZXNzYWdlc0xlbmd0aDpDLmxlbmd0aCxyZXNvdXJjZXNMZW5ndGg6SS5sZW5ndGgsd2ViU29ja2V0TGVuZ3RoOngubGVuZ3RoLGVycm9yc0xlbmd0aDpMLmxlbmd0aCxidWZMZW5ndGg6aCxjb21wcmVzc2VkTGVuZ3RoOl8sY29tcHJlc3NlZEJhc2U2NExlbmd0aDphLmxlbmd0aH0sdm9pZCAwLDIpfWApO2NvbnN0IGs9ZS5QdXNoU2Vzc2lvbkV2ZW50cyh7c2Vzc2lvbl9zZWN1cmVfaWQ6bixwYXlsb2FkX2lkOkUudG9TdHJpbmcoKSxkYXRhOmF9KTtsZXQgQT1Qcm9taXNlLnJlc29sdmUoKTtmLmxlbmd0aCYmKEE9ZS5wdXNoTWV0cmljcyh7bWV0cmljczpmfSksZi5zcGxpY2UoMCkpO2xldCBLPXBlcmZvcm1hbmNlLm5vdygpO2NvbnN0IHE9c2V0SW50ZXJ2YWwoKCk9PntLJiZwZXJmb3JtYW5jZS5ub3coKS1LPmt0JiYoY29uc29sZS53YXJuKGBVcGxvYWRpbmcgcHVzaFBheWxvYWQgdG9vayB0b28gbG9uZywgZmFpbHVyZSBudW1iZXIgIyR7cn0uYCkscis9MSxjbGVhckludGVydmFsKHEpLHI+PUp0JiYoY29uc29sZS53YXJuKCJVcGxvYWRpbmcgcHVzaFBheWxvYWQgdG9vayB0b28gbG9uZywgc3RvcHBpbmcgcmVjb3JkaW5nIHRvIGF2b2lkIE9PTS4iKSxJZS5wb3N0TWVzc2FnZSh7cmVzcG9uc2U6e3R5cGU6Wi5TdG9wLHJlcXVlc3RTdGFydDpLLGFzeW5jRXZlbnRzUmVzcG9uc2U6U319KSxtKHt0eXBlOlouUHJvcGVydGllcyxwcm9wZXJ0aWVzT2JqZWN0OntzdG9wUmVhc29uOiJQdXNoIFBheWxvYWQgVGltZW91dCJ9LHByb3BlcnR5VHlwZTp7dHlwZToidHJhY2sifX0pKSl9LDEwMCk7dHJ5e3lpZWxkIFByb21pc2UuYWxsKFtrLEFdKSxyJiZwZXJmb3JtYW5jZS5ub3coKS1LPD1rdCYmKGNvbnNvbGUud2FybihgcHVzaFBheWxvYWQgc3VjY2VlZGVkIGFmdGVyICMke3J9IGZhaWx1cmVzLCByZXNldHRpbmcgc3RvcCBzd2l0Y2guYCkscj0wKX1maW5hbGx5e0s9MCxjbGVhckludGVydmFsKHEpfUllLnBvc3RNZXNzYWdlKHtyZXNwb25zZTpTfSl9KSxiPXY9PkoodGhpcyxudWxsLGZ1bmN0aW9uKigpe2NvbnN0e3VzZXJPYmplY3Q6RSx1c2VySWRlbnRpZmllcjp3LHNvdXJjZTpDfT12O0M9PT0ic2VnbWVudCI/eSgiU2VnbWVudCBJZGVudGlmeSIsbWUoRCh7dXNlcklkZW50aWZpZXI6d30sRSkpKTp5KCJJZGVudGlmeSIsbWUoRCh7dXNlcklkZW50aWZpZXI6d30sRSkpKSx5aWVsZCBlLmlkZW50aWZ5U2Vzc2lvbih7c2Vzc2lvbl9zZWN1cmVfaWQ6bix1c2VyX2lkZW50aWZpZXI6dyx1c2VyX29iamVjdDpYdChFLCJ1c2VyIil9KTtjb25zdCBMPUM9PT0ic2VnbWVudCI/QzoiZGVmYXVsdCI7Yy5sb2coYElkZW50aWZ5ICgke3d9LCBzb3VyY2U6ICR7TH0pIHcvIG9iajogJHttZShFKX0gQCAke3R9YCl9KSxtPXY9PkoodGhpcyxudWxsLGZ1bmN0aW9uKigpe2NvbnN0e3Byb3BlcnRpZXNPYmplY3Q6RSxwcm9wZXJ0eVR5cGU6d309djtsZXQgQzsodz09bnVsbD92b2lkIDA6dy50eXBlKT09PSJzZXNzaW9uIj8oQz0iU2Vzc2lvbiIseWllbGQgZS5hZGRTZXNzaW9uUHJvcGVydGllcyh7c2Vzc2lvbl9zZWN1cmVfaWQ6bixwcm9wZXJ0aWVzX29iamVjdDpYdChFLCJzZXNzaW9uIil9KSk6KHc9PW51bGw/dm9pZCAwOncuc291cmNlKT09PSJzZWdtZW50Ij9DPSJTZWdtZW50IjpDPSJUcmFjayIsQyE9PSJTZXNzaW9uIiYmeShDLG1lKEUpKSxjLmxvZyhgQWRkaW5nICR7Q30gUHJvcGVydGllcyB0byBzZXNzaW9uICgke259KSB3LyBvYmo6ICR7SlNPTi5zdHJpbmdpZnkoRSl9IEAgJHt0fWApfSksTj12PT5KKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtmLnB1c2goLi4udi5tZXRyaWNzLm1hcChFPT4oe25hbWU6RS5uYW1lLHZhbHVlOkUudmFsdWUsc2Vzc2lvbl9zZWN1cmVfaWQ6bixjYXRlZ29yeTpFLmNhdGVnb3J5LGdyb3VwOkUuZ3JvdXAsdGltZXN0YW1wOkUudGltZXN0YW1wLnRvSVNPU3RyaW5nKCksdGFnczpFLnRhZ3N9KSkpfSksUj12PT5KKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtjb25zdHt0aW1lc3RhbXA6RSx2ZXJiYXRpbTp3LHVzZXJFbWFpbDpDLHVzZXJOYW1lOkx9PXY7eWllbGQgZS5hZGRTZXNzaW9uRmVlZGJhY2soe3Nlc3Npb25fc2VjdXJlX2lkOm4sdGltZXN0YW1wOkUsdmVyYmF0aW06dyx1c2VyX2VtYWlsOkMsdXNlcl9uYW1lOkx9KX0pLFA9dj0+Sih0aGlzLG51bGwsZnVuY3Rpb24qKCl7di50eXBlPT09Wi5Bc3luY0V2ZW50cz95aWVsZCBnKHYpOnYudHlwZT09PVouSWRlbnRpZnk/eWllbGQgYih2KTp2LnR5cGU9PT1aLlByb3BlcnRpZXM/eWllbGQgbSh2KTp2LnR5cGU9PT1aLk1ldHJpY3M/eWllbGQgTih2KTp2LnR5cGU9PT1aLkZlZWRiYWNrJiYoeWllbGQgUih2KSl9KSxqPSgpPT5KKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtmb3IoO2QubGVuZ3RoPjAmJnUoKTspe2NvbnN0IHY9ZC5zaGlmdCgpO3RyeXt5aWVsZCBQKHYpLGk9MH1jYXRjaChFKXtzJiZjb25zb2xlLmVycm9yKEUpLGkrPTF9fX0pO0llLm9ubWVzc2FnZT1mdW5jdGlvbih2KXtyZXR1cm4gSih0aGlzLG51bGwsZnVuY3Rpb24qKCl7aWYodi5kYXRhLm1lc3NhZ2UudHlwZT09PVouSW5pdGlhbGl6ZSl7dD12LmRhdGEubWVzc2FnZS5iYWNrZW5kLG49di5kYXRhLm1lc3NhZ2Uuc2Vzc2lvblNlY3VyZUlELHM9di5kYXRhLm1lc3NhZ2UuZGVidWcsbz12LmRhdGEubWVzc2FnZS5yZWNvcmRpbmdTdGFydFRpbWUsYy5kZWJ1Zz1zLGU9bXIobmV3IFluKHQse2hlYWRlcnM6e319KSwkcigpKSx5aWVsZCBqKCk7cmV0dXJufWlmKHYuZGF0YS5tZXNzYWdlLnR5cGU9PT1aLlJlc2V0KXtkLmxlbmd0aD0wLGYubGVuZ3RoPTAsaT0wLHI9MCxuPSIiLG89MDtyZXR1cm59aWYodi5kYXRhLm1lc3NhZ2UudHlwZT09PVouR2V0U3RhdHVzKXtJZS5wb3N0TWVzc2FnZSh7cmVzcG9uc2U6e3R5cGU6Wi5HZXRTdGF0dXMscGVuZGluZ0NvdW50OmQubGVuZ3RoLGluaXRpYWxpemVkOnUoKX19KTtyZXR1cm59aWYoIXUoKSl7ZC5wdXNoKHYuZGF0YS5tZXNzYWdlKTtyZXR1cm59dHJ5e3lpZWxkIFAodi5kYXRhLm1lc3NhZ2UpLGk9MCx5aWVsZCBqKCl9Y2F0Y2goRSl7cyYmY29uc29sZS5lcnJvcihFKSxpKz0xfX0pfX19KSgpOwovLyMgc291cmNlTWFwcGluZ1VSTD1oaWdobGlnaHQtY2xpZW50LXdvcmtlci1CQVJKeVZqWC5qcy5tYXAK", Qg = (e) => Uint8Array.from(atob(e), (t) => t.charCodeAt(0)), kl = typeof self < "u" && self.Blob && new Blob([Qg(uu)], { type: "text/javascript;charset=utf-8" });
|
|
13511
13511
|
function Ag(e) {
|
|
13512
13512
|
let t;
|
|
13513
13513
|
try {
|
|
@@ -13529,7 +13529,7 @@ function Ag(e) {
|
|
|
13529
13529
|
t && (self.URL || self.webkitURL).revokeObjectURL(t);
|
|
13530
13530
|
}
|
|
13531
13531
|
}
|
|
13532
|
-
var
|
|
13532
|
+
var Fe = /* @__PURE__ */ ((e) => (e[e.Initialize = 0] = "Initialize", e[e.Reset = 1] = "Reset", e[e.AsyncEvents = 2] = "AsyncEvents", e[e.Identify = 3] = "Identify", e[e.Properties = 4] = "Properties", e[e.Metrics = 5] = "Metrics", e[e.Feedback = 6] = "Feedback", e[e.CustomEvent = 7] = "CustomEvent", e[e.Stop = 8] = "Stop", e[e.GetStatus = 9] = "GetStatus", e))(Fe || {});
|
|
13533
13533
|
const _g = ({
|
|
13534
13534
|
apiKey: e
|
|
13535
13535
|
}) => {
|
|
@@ -13671,13 +13671,13 @@ class eZ {
|
|
|
13671
13671
|
var i, n, s, r, l;
|
|
13672
13672
|
this.options = t, typeof ((i = this.options) == null ? void 0 : i.debug) == "boolean" ? this.debugOptions = this.options.debug ? { clientInteractions: !0 } : {} : this.debugOptions = (s = (n = this.options) == null ? void 0 : n.debug) != null ? s : {}, this.logger = new vl(this.debugOptions.clientInteractions), this._worker = new Ag(), this._worker.onmessage = (a) => {
|
|
13673
13673
|
var c, u, h;
|
|
13674
|
-
((c = a.data.response) == null ? void 0 : c.type) ===
|
|
13674
|
+
((c = a.data.response) == null ? void 0 : c.type) === Fe.AsyncEvents ? (this._eventBytesSinceSnapshot += a.data.response.eventsSize, this.logger.log(
|
|
13675
13675
|
`Web worker sent payloadID ${a.data.response.id} size ${a.data.response.eventsSize} bytes, compression ratio ${a.data.response.eventsSize / a.data.response.compressedSize}.
|
|
13676
13676
|
Total since snapshot: ${(this._eventBytesSinceSnapshot / 1e6).toFixed(1)}MB`
|
|
13677
|
-
)) : ((u = a.data.response) == null ? void 0 : u.type) ===
|
|
13677
|
+
)) : ((u = a.data.response) == null ? void 0 : u.type) === Fe.CustomEvent ? this.addCustomEvent(
|
|
13678
13678
|
a.data.response.tag,
|
|
13679
13679
|
a.data.response.payload
|
|
13680
|
-
) : ((h = a.data.response) == null ? void 0 : h.type) ===
|
|
13680
|
+
) : ((h = a.data.response) == null ? void 0 : h.type) === Fe.Stop && (Ve(
|
|
13681
13681
|
"worker.onmessage",
|
|
13682
13682
|
"warn",
|
|
13683
13683
|
"Stopping recording due to worker failure",
|
|
@@ -13725,7 +13725,7 @@ class eZ {
|
|
|
13725
13725
|
}
|
|
13726
13726
|
for (const l of Object.values(ge))
|
|
13727
13727
|
mn(l);
|
|
13728
|
-
this.sessionData.sessionSecureID = n ? _t(`${this.organizationID}-${n}`) : _t(), this.sessionData.sessionKey = n, this.sessionData.sessionStartTime = Date.now(), this.options.sessionSecureID = this.sessionData.sessionSecureID, this.stop(), yield this.start(), s && r && this.identify(s, r);
|
|
13728
|
+
this.sessionData.sessionSecureID = n ? _t(`${this.organizationID}-${n}`) : _t(), this.sessionData.sessionKey = n, this.sessionData.sessionStartTime = Date.now(), this.options.sessionSecureID = this.sessionData.sessionSecureID, this.stop(), this._worker.postMessage({ message: { type: Fe.Reset } }), yield this.start(), s && r && this.identify(s, r);
|
|
13729
13729
|
});
|
|
13730
13730
|
}
|
|
13731
13731
|
_initMembers(t) {
|
|
@@ -13734,7 +13734,7 @@ class eZ {
|
|
|
13734
13734
|
canvasFactor: 0.5,
|
|
13735
13735
|
canvasMaxSnapshotDimension: 360,
|
|
13736
13736
|
canvasClearWebGLBuffer: !0,
|
|
13737
|
-
dataUrlOptions:
|
|
13737
|
+
dataUrlOptions: Od()
|
|
13738
13738
|
}, (o = t.samplingStrategy) != null ? o : {
|
|
13739
13739
|
canvas: 2
|
|
13740
13740
|
}), this._backendUrl = (a = t?.backendUrl) != null ? a : "https://pub.observability.app.launchdarkly.com", this._backendUrl[0] === "/" && (this._backendUrl = new URL(this._backendUrl, document.baseURI).href);
|
|
@@ -13743,7 +13743,7 @@ class eZ {
|
|
|
13743
13743
|
});
|
|
13744
13744
|
this.graphqlSDK = Kd(h, hh()), this.environment = (c = t.environment) != null ? c : "production", this.appVersion = t.appVersion, this.serviceName = (u = t.serviceName) != null ? u : "browser", typeof t.organizationID == "string" ? this.organizationID = t.organizationID : this.organizationID = t.organizationID.toString(), this.isRunningOnHighlight = this.organizationID === "1" || this.organizationID === "1jdkoe52", this.firstloadVersion = t.firstloadVersion || "unknown", this.sessionShortcut = t.sessionShortcut || !1, this._onToggleFeedbackFormVisibility = () => {
|
|
13745
13745
|
};
|
|
13746
|
-
const p = t, m =
|
|
13746
|
+
const p = t, m = Ct(p, ["firstloadVersion"]);
|
|
13747
13747
|
this._optionsInternal = m, this.listeners = [], this.events = [], this.hasSessionUnloaded = !1, this.hasPushedData = !1, window.Intercom && window.Intercom("onShow", () => {
|
|
13748
13748
|
window.Intercom("update", {
|
|
13749
13749
|
highlightSessionURL: this.getCurrentSessionURLWithTimestamp()
|
|
@@ -13765,7 +13765,7 @@ class eZ {
|
|
|
13765
13765
|
t.toString()
|
|
13766
13766
|
), Pe(ge.USER_OBJECT, JSON.stringify(i)), this._worker.postMessage({
|
|
13767
13767
|
message: {
|
|
13768
|
-
type:
|
|
13768
|
+
type: Fe.Identify,
|
|
13769
13769
|
userIdentifier: t,
|
|
13770
13770
|
userObject: i,
|
|
13771
13771
|
source: n
|
|
@@ -13785,7 +13785,7 @@ class eZ {
|
|
|
13785
13785
|
}
|
|
13786
13786
|
}), this._worker.postMessage({
|
|
13787
13787
|
message: {
|
|
13788
|
-
type:
|
|
13788
|
+
type: Fe.Properties,
|
|
13789
13789
|
propertiesObject: n,
|
|
13790
13790
|
propertyType: i
|
|
13791
13791
|
}
|
|
@@ -13817,15 +13817,15 @@ class eZ {
|
|
|
13817
13817
|
this.sessionData,
|
|
13818
13818
|
this.options
|
|
13819
13819
|
), this.sessionData = (s = qi(this.sessionData.sessionSecureID)) != null ? s : this.sessionData, (r = this.sessionData) != null && r.sessionStartTime ? this._recordingStartTime = (l = this.sessionData) == null ? void 0 : l.sessionStartTime : (this._recordingStartTime = (/* @__PURE__ */ new Date()).getTime(), this.sessionData.sessionStartTime = this._recordingStartTime);
|
|
13820
|
-
let p = Xe(
|
|
13821
|
-
p || (p = _t(), Pe(
|
|
13820
|
+
let p = Xe(Ws.CLIENT_ID);
|
|
13821
|
+
p || (p = _t(), Pe(Ws.CLIENT_ID, p));
|
|
13822
13822
|
let m;
|
|
13823
13823
|
this.options.disableSessionRecording || this.options.disableNetworkRecording !== void 0 || typeof this.options.networkRecording == "boolean" ? m = !1 : m = ((o = this.options.networkRecording) == null ? void 0 : o.recordHeadersAndBody) || !1;
|
|
13824
13824
|
let b = [];
|
|
13825
13825
|
if (typeof this.options.networkRecording == "object" && (a = this.options.networkRecording.destinationDomains) != null && a.length && (b = this.options.networkRecording.destinationDomains), this._isCrossOriginIframe)
|
|
13826
13826
|
yield this._setupCrossOriginIframe();
|
|
13827
13827
|
else {
|
|
13828
|
-
const
|
|
13828
|
+
const C = yield this.graphqlSDK.initializeSession({
|
|
13829
13829
|
organization_verbose_id: this.organizationID,
|
|
13830
13830
|
enable_strict_privacy: this.privacySetting === "strict",
|
|
13831
13831
|
privacy_setting: this.privacySetting,
|
|
@@ -13843,10 +13843,10 @@ class eZ {
|
|
|
13843
13843
|
network_recording_domains: b,
|
|
13844
13844
|
disable_session_recording: this.options.disableSessionRecording
|
|
13845
13845
|
});
|
|
13846
|
-
if (
|
|
13847
|
-
`Unexpected secure id returned by initializeSession: ${
|
|
13848
|
-
), this.sessionData.sessionSecureID =
|
|
13849
|
-
((c =
|
|
13846
|
+
if (C.initializeSession.secure_id !== this.sessionData.sessionSecureID && this.logger.log(
|
|
13847
|
+
`Unexpected secure id returned by initializeSession: ${C.initializeSession.secure_id}, expected ${this.sessionData.sessionSecureID}`
|
|
13848
|
+
), this.sessionData.sessionSecureID = C.initializeSession.secure_id, this.sessionData.projectID = parseInt(
|
|
13849
|
+
((c = C?.initializeSession) == null ? void 0 : c.project_id) || "0"
|
|
13850
13850
|
), !this.sessionData.projectID || !this.sessionData.sessionSecureID) {
|
|
13851
13851
|
console.error(
|
|
13852
13852
|
"Failed to initialize Highlight; an error occurred on our end.",
|
|
@@ -13862,15 +13862,15 @@ Project ID: ${this.sessionData.projectID}
|
|
|
13862
13862
|
SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
13863
13863
|
), this.options.sessionSecureID = this.sessionData.sessionSecureID, this._worker.postMessage({
|
|
13864
13864
|
message: {
|
|
13865
|
-
type:
|
|
13865
|
+
type: Fe.Initialize,
|
|
13866
13866
|
sessionSecureID: this.sessionData.sessionSecureID,
|
|
13867
13867
|
backend: this._backendUrl,
|
|
13868
13868
|
debug: !!this.debugOptions.clientInteractions,
|
|
13869
13869
|
recordingStartTime: this._recordingStartTime
|
|
13870
13870
|
}
|
|
13871
13871
|
});
|
|
13872
|
-
for (const
|
|
13873
|
-
|
|
13872
|
+
for (const C of this._integrations)
|
|
13873
|
+
C.init(this.sessionData.sessionSecureID);
|
|
13874
13874
|
if (this.sessionData.userIdentifier && this.identify(
|
|
13875
13875
|
this.sessionData.userIdentifier,
|
|
13876
13876
|
this.sessionData.userObject
|
|
@@ -13882,8 +13882,8 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
13882
13882
|
), this.ready = !0, this.state = "Recording", this.manualStopped = !1;
|
|
13883
13883
|
return;
|
|
13884
13884
|
}
|
|
13885
|
-
const d = (
|
|
13886
|
-
X && this.logger.log("received isCheckout emit", { event:
|
|
13885
|
+
const d = (C, X) => {
|
|
13886
|
+
X && this.logger.log("received isCheckout emit", { event: C }), this.events.push(C);
|
|
13887
13887
|
};
|
|
13888
13888
|
d.bind(this);
|
|
13889
13889
|
const S = !!this._recordStop;
|
|
@@ -13915,12 +13915,12 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
13915
13915
|
maxSnapshotDimension: this.samplingStrategy.canvasMaxSnapshotDimension
|
|
13916
13916
|
}
|
|
13917
13917
|
},
|
|
13918
|
-
keepIframeSrcFn: (
|
|
13918
|
+
keepIframeSrcFn: (C) => !this.options.recordCrossOriginIframe,
|
|
13919
13919
|
inlineImages: this.inlineImages,
|
|
13920
13920
|
inlineVideos: this.inlineVideos,
|
|
13921
13921
|
collectFonts: this.inlineImages,
|
|
13922
13922
|
inlineStylesheet: this.inlineStylesheet,
|
|
13923
|
-
plugins: [
|
|
13923
|
+
plugins: [Uh()],
|
|
13924
13924
|
logger: typeof this.options.debug == "boolean" && this.options.debug || typeof this.options.debug == "object" && this.options.debug.domRecording ? {
|
|
13925
13925
|
debug: this.logger.log,
|
|
13926
13926
|
warn: Ve.bind("RecordSDK", "warn")
|
|
@@ -14019,7 +14019,7 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
14019
14019
|
)) : this.addCustomEvent("Navigate", r);
|
|
14020
14020
|
})
|
|
14021
14021
|
), this.listeners.push(
|
|
14022
|
-
|
|
14022
|
+
Ch(
|
|
14023
14023
|
(r) => {
|
|
14024
14024
|
this.addCustomEvent("Viewport", r);
|
|
14025
14025
|
}
|
|
@@ -14112,7 +14112,7 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
14112
14112
|
var r;
|
|
14113
14113
|
this._worker.postMessage({
|
|
14114
14114
|
message: {
|
|
14115
|
-
type:
|
|
14115
|
+
type: Fe.Feedback,
|
|
14116
14116
|
verbatim: i,
|
|
14117
14117
|
timestamp: t,
|
|
14118
14118
|
userName: s || this.sessionData.userIdentifier,
|
|
@@ -14151,7 +14151,7 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
14151
14151
|
}
|
|
14152
14152
|
this.state === "Recording" && (this.pushPayloadTimerId && (clearTimeout(this.pushPayloadTimerId), this.pushPayloadTimerId = void 0), this.pushPayloadTimerId = setTimeout(() => {
|
|
14153
14153
|
this._save();
|
|
14154
|
-
},
|
|
14154
|
+
}, zd));
|
|
14155
14155
|
});
|
|
14156
14156
|
}
|
|
14157
14157
|
/**
|
|
@@ -14202,7 +14202,7 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
14202
14202
|
} else
|
|
14203
14203
|
this._worker.postMessage({
|
|
14204
14204
|
message: {
|
|
14205
|
-
type:
|
|
14205
|
+
type: Fe.AsyncEvents,
|
|
14206
14206
|
id: l,
|
|
14207
14207
|
events: n,
|
|
14208
14208
|
messages: [],
|
|
@@ -14332,8 +14332,8 @@ class hZ extends wh {
|
|
|
14332
14332
|
getHooks(t) {
|
|
14333
14333
|
var i, n, s, r;
|
|
14334
14334
|
const l = Y(Y({
|
|
14335
|
-
[
|
|
14336
|
-
[
|
|
14335
|
+
[Ed]: t.sdk.name,
|
|
14336
|
+
[Hd]: t.sdk.version,
|
|
14337
14337
|
[ph]: t.clientSideId,
|
|
14338
14338
|
[mh]: "LaunchDarkly"
|
|
14339
14339
|
}, (i = t.application) != null && i.id ? { [bh]: t.application.id } : {}), (n = t.application) != null && n.version ? {
|
|
@@ -14391,4 +14391,4 @@ export {
|
|
|
14391
14391
|
jt as t,
|
|
14392
14392
|
wl as x
|
|
14393
14393
|
};
|
|
14394
|
-
//# sourceMappingURL=index-
|
|
14394
|
+
//# sourceMappingURL=index-6I8VmpDC.js.map
|