@getopenpay/openpay-js 0.3.4 → 0.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ExportResult-Bo1QOwfo.js +19 -0
- package/dist/Resource-An2TTXLX.js +176 -0
- package/dist/SimpleSpanProcessor-DTBWGI5n.js +957 -0
- package/dist/_commonjsHelpers-DnMzE-71.js +25 -0
- package/dist/detect-resources-DR8R_DN6.js +854 -0
- package/dist/diag-api-Ck_l5qgD.js +6 -0
- package/dist/index-BDf1_xy1.js +830 -0
- package/dist/index-CBUINdAA.js +6685 -0
- package/dist/index-CHYLSCf3.js +19 -0
- package/dist/index-CtfVTSwI.js +52 -0
- package/dist/index-DUAfQijD.js +5286 -0
- package/dist/index-Dqd2L94L.js +130 -0
- package/dist/index-DvoH92Oq.js +1599 -0
- package/dist/index-J1_yL36v.js +150 -0
- package/dist/index-M878lnrF.js +330 -0
- package/dist/index-xSo7EjGK.js +431 -0
- package/dist/index.d.ts +19 -7
- package/dist/index.es.js +8 -4607
- package/dist/index.umd.js +28 -23
- package/dist/metrics-api-Qe5u_X_E.js +160 -0
- package/dist/sdk-info-SNq483aR.js +484 -0
- package/dist/url-BwiN4sTR.js +797 -0
- package/dist/utils-BGeftTvk.js +14 -0
- package/dist/utils-Bf1MO8XE.js +142 -0
- package/dist/utils-BqVpDqfk.js +381 -0
- package/package.json +2 -1
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { b as I, t as l, i as D, T as o, d as T, e as b } from "./index-DUAfQijD.js";
|
|
2
|
+
var C = I("OpenTelemetry SDK Context Key SUPPRESS_TRACING");
|
|
3
|
+
function A(r) {
|
|
4
|
+
return r.getValue(C) === !0;
|
|
5
|
+
}
|
|
6
|
+
var p = I("OpenTelemetry Context Key B3 Debug Flag"), f = "b3", v = "x-b3-traceid", g = "x-b3-spanid", c = "x-b3-sampled", N = "x-b3-parentspanid", S = "x-b3-flags", V = /* @__PURE__ */ new Set([!0, "true", "True", "1", 1]), B = /* @__PURE__ */ new Set([!1, "false", "False", "0", 0]);
|
|
7
|
+
function F(r) {
|
|
8
|
+
return r === o.SAMPLED || r === o.NONE;
|
|
9
|
+
}
|
|
10
|
+
function R(r) {
|
|
11
|
+
return Array.isArray(r) ? r[0] : r;
|
|
12
|
+
}
|
|
13
|
+
function d(r, t, e) {
|
|
14
|
+
var n = t.get(r, e);
|
|
15
|
+
return R(n);
|
|
16
|
+
}
|
|
17
|
+
function m(r, t) {
|
|
18
|
+
var e = d(r, t, v);
|
|
19
|
+
return typeof e == "string" ? e.padStart(32, "0") : "";
|
|
20
|
+
}
|
|
21
|
+
function x(r, t) {
|
|
22
|
+
var e = d(r, t, g);
|
|
23
|
+
return typeof e == "string" ? e : "";
|
|
24
|
+
}
|
|
25
|
+
function h(r, t) {
|
|
26
|
+
var e = d(r, t, S);
|
|
27
|
+
return e === "1" ? "1" : void 0;
|
|
28
|
+
}
|
|
29
|
+
function U(r, t) {
|
|
30
|
+
var e = d(r, t, c), n = h(r, t);
|
|
31
|
+
if (n === "1" || V.has(e))
|
|
32
|
+
return o.SAMPLED;
|
|
33
|
+
if (e === void 0 || B.has(e))
|
|
34
|
+
return o.NONE;
|
|
35
|
+
}
|
|
36
|
+
var G = (
|
|
37
|
+
/** @class */
|
|
38
|
+
function() {
|
|
39
|
+
function r() {
|
|
40
|
+
}
|
|
41
|
+
return r.prototype.inject = function(t, e, n) {
|
|
42
|
+
var a = l.getSpanContext(t);
|
|
43
|
+
if (!(!a || !D(a) || A(t))) {
|
|
44
|
+
var i = t.getValue(p);
|
|
45
|
+
n.set(e, v, a.traceId), n.set(e, g, a.spanId), i === "1" ? n.set(e, S, i) : a.traceFlags !== void 0 && n.set(e, c, (o.SAMPLED & a.traceFlags) === o.SAMPLED ? "1" : "0");
|
|
46
|
+
}
|
|
47
|
+
}, r.prototype.extract = function(t, e, n) {
|
|
48
|
+
var a = m(e, n), i = x(e, n), u = U(e, n), s = h(e, n);
|
|
49
|
+
return T(a) && b(i) && F(u) ? (t = t.setValue(p, s), l.setSpanContext(t, {
|
|
50
|
+
traceId: a,
|
|
51
|
+
spanId: i,
|
|
52
|
+
isRemote: !0,
|
|
53
|
+
traceFlags: u
|
|
54
|
+
})) : t;
|
|
55
|
+
}, r.prototype.fields = function() {
|
|
56
|
+
return [
|
|
57
|
+
v,
|
|
58
|
+
g,
|
|
59
|
+
S,
|
|
60
|
+
c,
|
|
61
|
+
N
|
|
62
|
+
];
|
|
63
|
+
}, r;
|
|
64
|
+
}()
|
|
65
|
+
), H = function(r, t) {
|
|
66
|
+
var e = typeof Symbol == "function" && r[Symbol.iterator];
|
|
67
|
+
if (!e) return r;
|
|
68
|
+
var n = e.call(r), a, i = [], u;
|
|
69
|
+
try {
|
|
70
|
+
for (; (t === void 0 || t-- > 0) && !(a = n.next()).done; ) i.push(a.value);
|
|
71
|
+
} catch (s) {
|
|
72
|
+
u = { error: s };
|
|
73
|
+
} finally {
|
|
74
|
+
try {
|
|
75
|
+
a && !a.done && (e = n.return) && e.call(n);
|
|
76
|
+
} finally {
|
|
77
|
+
if (u) throw u.error;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return i;
|
|
81
|
+
}, X = /((?:[0-9a-f]{16}){1,2})-([0-9a-f]{16})(?:-([01d](?![0-9a-f])))?(?:-([0-9a-f]{16}))?/, j = "0".repeat(16), w = /* @__PURE__ */ new Set(["d", "1"]), O = "d";
|
|
82
|
+
function K(r) {
|
|
83
|
+
return r.length === 32 ? r : "" + j + r;
|
|
84
|
+
}
|
|
85
|
+
function Y(r) {
|
|
86
|
+
return r && w.has(r) ? o.SAMPLED : o.NONE;
|
|
87
|
+
}
|
|
88
|
+
var k = (
|
|
89
|
+
/** @class */
|
|
90
|
+
function() {
|
|
91
|
+
function r() {
|
|
92
|
+
}
|
|
93
|
+
return r.prototype.inject = function(t, e, n) {
|
|
94
|
+
var a = l.getSpanContext(t);
|
|
95
|
+
if (!(!a || !D(a) || A(t))) {
|
|
96
|
+
var i = t.getValue(p) || a.traceFlags & 1, u = a.traceId + "-" + a.spanId + "-" + i;
|
|
97
|
+
n.set(e, f, u);
|
|
98
|
+
}
|
|
99
|
+
}, r.prototype.extract = function(t, e, n) {
|
|
100
|
+
var a = n.get(e, f), i = Array.isArray(a) ? a[0] : a;
|
|
101
|
+
if (typeof i != "string")
|
|
102
|
+
return t;
|
|
103
|
+
var u = i.match(X);
|
|
104
|
+
if (!u)
|
|
105
|
+
return t;
|
|
106
|
+
var s = H(u, 4), L = s[1], P = s[2], _ = s[3], y = K(L);
|
|
107
|
+
if (!T(y) || !b(P))
|
|
108
|
+
return t;
|
|
109
|
+
var M = Y(_);
|
|
110
|
+
return _ === O && (t = t.setValue(p, _)), l.setSpanContext(t, {
|
|
111
|
+
traceId: y,
|
|
112
|
+
spanId: P,
|
|
113
|
+
isRemote: !0,
|
|
114
|
+
traceFlags: M
|
|
115
|
+
});
|
|
116
|
+
}, r.prototype.fields = function() {
|
|
117
|
+
return [f];
|
|
118
|
+
}, r;
|
|
119
|
+
}()
|
|
120
|
+
), E;
|
|
121
|
+
(function(r) {
|
|
122
|
+
r[r.SINGLE_HEADER = 0] = "SINGLE_HEADER", r[r.MULTI_HEADER = 1] = "MULTI_HEADER";
|
|
123
|
+
})(E || (E = {}));
|
|
124
|
+
var z = (
|
|
125
|
+
/** @class */
|
|
126
|
+
function() {
|
|
127
|
+
function r(t) {
|
|
128
|
+
t === void 0 && (t = {}), this._b3MultiPropagator = new G(), this._b3SinglePropagator = new k(), t.injectEncoding === E.MULTI_HEADER ? (this._inject = this._b3MultiPropagator.inject, this._fields = this._b3MultiPropagator.fields()) : (this._inject = this._b3SinglePropagator.inject, this._fields = this._b3SinglePropagator.fields());
|
|
129
|
+
}
|
|
130
|
+
return r.prototype.inject = function(t, e, n) {
|
|
131
|
+
A(t) || this._inject(t, e, n);
|
|
132
|
+
}, r.prototype.extract = function(t, e, n) {
|
|
133
|
+
var a = n.get(e, f), i = Array.isArray(a) ? a[0] : a;
|
|
134
|
+
return i ? this._b3SinglePropagator.extract(t, e, n) : this._b3MultiPropagator.extract(t, e, n);
|
|
135
|
+
}, r.prototype.fields = function() {
|
|
136
|
+
return this._fields;
|
|
137
|
+
}, r;
|
|
138
|
+
}()
|
|
139
|
+
);
|
|
140
|
+
export {
|
|
141
|
+
E as B3InjectEncoding,
|
|
142
|
+
z as B3Propagator,
|
|
143
|
+
f as B3_CONTEXT_HEADER,
|
|
144
|
+
S as X_B3_FLAGS,
|
|
145
|
+
N as X_B3_PARENT_SPAN_ID,
|
|
146
|
+
c as X_B3_SAMPLED,
|
|
147
|
+
g as X_B3_SPAN_ID,
|
|
148
|
+
v as X_B3_TRACE_ID
|
|
149
|
+
};
|
|
150
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDBpfX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGIgYXMgY3JlYXRlQ29udGV4dEtleSwgdCBhcyB0cmFjZSwgaSBhcyBpc1NwYW5Db250ZXh0VmFsaWQsIFQgYXMgVHJhY2VGbGFncywgZCBhcyBpc1ZhbGlkVHJhY2VJZCwgZSBhcyBpc1ZhbGlkU3BhbklkIH0gZnJvbSAnLi9pbmRleC0hfnswMDV9fi5qcyc7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgU1VQUFJFU1NfVFJBQ0lOR19LRVkgPSBjcmVhdGVDb250ZXh0S2V5KCdPcGVuVGVsZW1ldHJ5IFNESyBDb250ZXh0IEtleSBTVVBQUkVTU19UUkFDSU5HJyk7XG5mdW5jdGlvbiBpc1RyYWNpbmdTdXBwcmVzc2VkKGNvbnRleHQpIHtcbiAgICByZXR1cm4gY29udGV4dC5nZXRWYWx1ZShTVVBQUkVTU19UUkFDSU5HX0tFWSkgPT09IHRydWU7XG59XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vKiogc2hhcmVkIGNvbnRleHQgZm9yIHN0b3JpbmcgYW4gZXh0cmFjdGVkIGIzIGRlYnVnIGZsYWcgKi9cbnZhciBCM19ERUJVR19GTEFHX0tFWSA9IGNyZWF0ZUNvbnRleHRLZXkoJ09wZW5UZWxlbWV0cnkgQ29udGV4dCBLZXkgQjMgRGVidWcgRmxhZycpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqIEIzIHNpbmdsZS1oZWFkZXIga2V5ICovXG52YXIgQjNfQ09OVEVYVF9IRUFERVIgPSAnYjMnO1xuLyogYjMgbXVsdGktaGVhZGVyIGtleXMgKi9cbnZhciBYX0IzX1RSQUNFX0lEID0gJ3gtYjMtdHJhY2VpZCc7XG52YXIgWF9CM19TUEFOX0lEID0gJ3gtYjMtc3BhbmlkJztcbnZhciBYX0IzX1NBTVBMRUQgPSAneC1iMy1zYW1wbGVkJztcbnZhciBYX0IzX1BBUkVOVF9TUEFOX0lEID0gJ3gtYjMtcGFyZW50c3BhbmlkJztcbnZhciBYX0IzX0ZMQUdTID0gJ3gtYjMtZmxhZ3MnO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIFZBTElEX1NBTVBMRURfVkFMVUVTID0gbmV3IFNldChbdHJ1ZSwgJ3RydWUnLCAnVHJ1ZScsICcxJywgMV0pO1xudmFyIFZBTElEX1VOU0FNUExFRF9WQUxVRVMgPSBuZXcgU2V0KFtmYWxzZSwgJ2ZhbHNlJywgJ0ZhbHNlJywgJzAnLCAwXSk7XG5mdW5jdGlvbiBpc1ZhbGlkU2FtcGxlZFZhbHVlKHNhbXBsZWQpIHtcbiAgICByZXR1cm4gc2FtcGxlZCA9PT0gVHJhY2VGbGFncy5TQU1QTEVEIHx8IHNhbXBsZWQgPT09IFRyYWNlRmxhZ3MuTk9ORTtcbn1cbmZ1bmN0aW9uIHBhcnNlSGVhZGVyKGhlYWRlcikge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGhlYWRlcikgPyBoZWFkZXJbMF0gOiBoZWFkZXI7XG59XG5mdW5jdGlvbiBnZXRIZWFkZXJWYWx1ZShjYXJyaWVyLCBnZXR0ZXIsIGtleSkge1xuICAgIHZhciBoZWFkZXIgPSBnZXR0ZXIuZ2V0KGNhcnJpZXIsIGtleSk7XG4gICAgcmV0dXJuIHBhcnNlSGVhZGVyKGhlYWRlcik7XG59XG5mdW5jdGlvbiBnZXRUcmFjZUlkKGNhcnJpZXIsIGdldHRlcikge1xuICAgIHZhciB0cmFjZUlkID0gZ2V0SGVhZGVyVmFsdWUoY2FycmllciwgZ2V0dGVyLCBYX0IzX1RSQUNFX0lEKTtcbiAgICBpZiAodHlwZW9mIHRyYWNlSWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0cmFjZUlkLnBhZFN0YXJ0KDMyLCAnMCcpO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG5mdW5jdGlvbiBnZXRTcGFuSWQoY2FycmllciwgZ2V0dGVyKSB7XG4gICAgdmFyIHNwYW5JZCA9IGdldEhlYWRlclZhbHVlKGNhcnJpZXIsIGdldHRlciwgWF9CM19TUEFOX0lEKTtcbiAgICBpZiAodHlwZW9mIHNwYW5JZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHNwYW5JZDtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xufVxuZnVuY3Rpb24gZ2V0RGVidWcoY2FycmllciwgZ2V0dGVyKSB7XG4gICAgdmFyIGRlYnVnID0gZ2V0SGVhZGVyVmFsdWUoY2FycmllciwgZ2V0dGVyLCBYX0IzX0ZMQUdTKTtcbiAgICByZXR1cm4gZGVidWcgPT09ICcxJyA/ICcxJyA6IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGdldFRyYWNlRmxhZ3MoY2FycmllciwgZ2V0dGVyKSB7XG4gICAgdmFyIHRyYWNlRmxhZ3MgPSBnZXRIZWFkZXJWYWx1ZShjYXJyaWVyLCBnZXR0ZXIsIFhfQjNfU0FNUExFRCk7XG4gICAgdmFyIGRlYnVnID0gZ2V0RGVidWcoY2FycmllciwgZ2V0dGVyKTtcbiAgICBpZiAoZGVidWcgPT09ICcxJyB8fCBWQUxJRF9TQU1QTEVEX1ZBTFVFUy5oYXModHJhY2VGbGFncykpIHtcbiAgICAgICAgcmV0dXJuIFRyYWNlRmxhZ3MuU0FNUExFRDtcbiAgICB9XG4gICAgaWYgKHRyYWNlRmxhZ3MgPT09IHVuZGVmaW5lZCB8fCBWQUxJRF9VTlNBTVBMRURfVkFMVUVTLmhhcyh0cmFjZUZsYWdzKSkge1xuICAgICAgICByZXR1cm4gVHJhY2VGbGFncy5OT05FO1xuICAgIH1cbiAgICAvLyBUaGlzIGluZGljYXRlcyB0byBpc1ZhbGlkU2FtcGxlZFZhbHVlIHRoYXQgdGhpcyBpcyBub3QgdmFsaWRcbiAgICByZXR1cm47XG59XG4vKipcbiAqIFByb3BhZ2F0b3IgZm9yIHRoZSBCMyBtdWx0aXBsZS1oZWFkZXIgSFRUUCBmb3JtYXQuXG4gKiBCYXNlZCBvbjogaHR0cHM6Ly9naXRodWIuY29tL29wZW56aXBraW4vYjMtcHJvcGFnYXRpb25cbiAqL1xudmFyIEIzTXVsdGlQcm9wYWdhdG9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEIzTXVsdGlQcm9wYWdhdG9yKCkge1xuICAgIH1cbiAgICBCM011bHRpUHJvcGFnYXRvci5wcm90b3R5cGUuaW5qZWN0ID0gZnVuY3Rpb24gKGNvbnRleHQsIGNhcnJpZXIsIHNldHRlcikge1xuICAgICAgICB2YXIgc3BhbkNvbnRleHQgPSB0cmFjZS5nZXRTcGFuQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgaWYgKCFzcGFuQ29udGV4dCB8fFxuICAgICAgICAgICAgIWlzU3BhbkNvbnRleHRWYWxpZChzcGFuQ29udGV4dCkgfHxcbiAgICAgICAgICAgIGlzVHJhY2luZ1N1cHByZXNzZWQoY29udGV4dCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBkZWJ1ZyA9IGNvbnRleHQuZ2V0VmFsdWUoQjNfREVCVUdfRkxBR19LRVkpO1xuICAgICAgICBzZXR0ZXIuc2V0KGNhcnJpZXIsIFhfQjNfVFJBQ0VfSUQsIHNwYW5Db250ZXh0LnRyYWNlSWQpO1xuICAgICAgICBzZXR0ZXIuc2V0KGNhcnJpZXIsIFhfQjNfU1BBTl9JRCwgc3BhbkNvbnRleHQuc3BhbklkKTtcbiAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBCMyBzcGVjLCBpZiB0aGUgZGVidWcgZmxhZyBpcyBzZXQsXG4gICAgICAgIC8vIHRoZSBzYW1wbGVkIGZsYWcgc2hvdWxkbid0IGJlIHByb3BhZ2F0ZWQgYXMgd2VsbC5cbiAgICAgICAgaWYgKGRlYnVnID09PSAnMScpIHtcbiAgICAgICAgICAgIHNldHRlci5zZXQoY2FycmllciwgWF9CM19GTEFHUywgZGVidWcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNwYW5Db250ZXh0LnRyYWNlRmxhZ3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gV2Ugc2V0IHRoZSBoZWFkZXIgb25seSBpZiB0aGVyZSBpcyBhbiBleGlzdGluZyBzYW1wbGluZyBkZWNpc2lvbi5cbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSB3ZSB3aWxsIG9taXQgaXQgPT4gQWJzZW50LlxuICAgICAgICAgICAgc2V0dGVyLnNldChjYXJyaWVyLCBYX0IzX1NBTVBMRUQsIChUcmFjZUZsYWdzLlNBTVBMRUQgJiBzcGFuQ29udGV4dC50cmFjZUZsYWdzKSA9PT0gVHJhY2VGbGFncy5TQU1QTEVEXG4gICAgICAgICAgICAgICAgPyAnMSdcbiAgICAgICAgICAgICAgICA6ICcwJyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEIzTXVsdGlQcm9wYWdhdG9yLnByb3RvdHlwZS5leHRyYWN0ID0gZnVuY3Rpb24gKGNvbnRleHQsIGNhcnJpZXIsIGdldHRlcikge1xuICAgICAgICB2YXIgdHJhY2VJZCA9IGdldFRyYWNlSWQoY2FycmllciwgZ2V0dGVyKTtcbiAgICAgICAgdmFyIHNwYW5JZCA9IGdldFNwYW5JZChjYXJyaWVyLCBnZXR0ZXIpO1xuICAgICAgICB2YXIgdHJhY2VGbGFncyA9IGdldFRyYWNlRmxhZ3MoY2FycmllciwgZ2V0dGVyKTtcbiAgICAgICAgdmFyIGRlYnVnID0gZ2V0RGVidWcoY2FycmllciwgZ2V0dGVyKTtcbiAgICAgICAgaWYgKGlzVmFsaWRUcmFjZUlkKHRyYWNlSWQpICYmXG4gICAgICAgICAgICBpc1ZhbGlkU3BhbklkKHNwYW5JZCkgJiZcbiAgICAgICAgICAgIGlzVmFsaWRTYW1wbGVkVmFsdWUodHJhY2VGbGFncykpIHtcbiAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnNldFZhbHVlKEIzX0RFQlVHX0ZMQUdfS0VZLCBkZWJ1Zyk7XG4gICAgICAgICAgICByZXR1cm4gdHJhY2Uuc2V0U3BhbkNvbnRleHQoY29udGV4dCwge1xuICAgICAgICAgICAgICAgIHRyYWNlSWQ6IHRyYWNlSWQsXG4gICAgICAgICAgICAgICAgc3BhbklkOiBzcGFuSWQsXG4gICAgICAgICAgICAgICAgaXNSZW1vdGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdHJhY2VGbGFnczogdHJhY2VGbGFncyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgIH07XG4gICAgQjNNdWx0aVByb3BhZ2F0b3IucHJvdG90eXBlLmZpZWxkcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIFhfQjNfVFJBQ0VfSUQsXG4gICAgICAgICAgICBYX0IzX1NQQU5fSUQsXG4gICAgICAgICAgICBYX0IzX0ZMQUdTLFxuICAgICAgICAgICAgWF9CM19TQU1QTEVELFxuICAgICAgICAgICAgWF9CM19QQVJFTlRfU1BBTl9JRCxcbiAgICAgICAgXTtcbiAgICB9O1xuICAgIHJldHVybiBCM011bHRpUHJvcGFnYXRvcjtcbn0oKSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgX19yZWFkID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIEIzX0NPTlRFWFRfUkVHRVggPSAvKCg/OlswLTlhLWZdezE2fSl7MSwyfSktKFswLTlhLWZdezE2fSkoPzotKFswMWRdKD8hWzAtOWEtZl0pKSk/KD86LShbMC05YS1mXXsxNn0pKT8vO1xudmFyIFBBRERJTkcgPSAnMCcucmVwZWF0KDE2KTtcbnZhciBTQU1QTEVEX1ZBTFVFUyA9IG5ldyBTZXQoWydkJywgJzEnXSk7XG52YXIgREVCVUdfU1RBVEUgPSAnZCc7XG5mdW5jdGlvbiBjb252ZXJ0VG9UcmFjZUlkMTI4KHRyYWNlSWQpIHtcbiAgICByZXR1cm4gdHJhY2VJZC5sZW5ndGggPT09IDMyID8gdHJhY2VJZCA6IFwiXCIgKyBQQURESU5HICsgdHJhY2VJZDtcbn1cbmZ1bmN0aW9uIGNvbnZlcnRUb1RyYWNlRmxhZ3Moc2FtcGxpbmdTdGF0ZSkge1xuICAgIGlmIChzYW1wbGluZ1N0YXRlICYmIFNBTVBMRURfVkFMVUVTLmhhcyhzYW1wbGluZ1N0YXRlKSkge1xuICAgICAgICByZXR1cm4gVHJhY2VGbGFncy5TQU1QTEVEO1xuICAgIH1cbiAgICByZXR1cm4gVHJhY2VGbGFncy5OT05FO1xufVxuLyoqXG4gKiBQcm9wYWdhdG9yIGZvciB0aGUgQjMgc2luZ2xlLWhlYWRlciBIVFRQIGZvcm1hdC5cbiAqIEJhc2VkIG9uOiBodHRwczovL2dpdGh1Yi5jb20vb3BlbnppcGtpbi9iMy1wcm9wYWdhdGlvblxuICovXG52YXIgQjNTaW5nbGVQcm9wYWdhdG9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEIzU2luZ2xlUHJvcGFnYXRvcigpIHtcbiAgICB9XG4gICAgQjNTaW5nbGVQcm9wYWdhdG9yLnByb3RvdHlwZS5pbmplY3QgPSBmdW5jdGlvbiAoY29udGV4dCwgY2Fycmllciwgc2V0dGVyKSB7XG4gICAgICAgIHZhciBzcGFuQ29udGV4dCA9IHRyYWNlLmdldFNwYW5Db250ZXh0KGNvbnRleHQpO1xuICAgICAgICBpZiAoIXNwYW5Db250ZXh0IHx8XG4gICAgICAgICAgICAhaXNTcGFuQ29udGV4dFZhbGlkKHNwYW5Db250ZXh0KSB8fFxuICAgICAgICAgICAgaXNUcmFjaW5nU3VwcHJlc3NlZChjb250ZXh0KSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIHNhbXBsaW5nU3RhdGUgPSBjb250ZXh0LmdldFZhbHVlKEIzX0RFQlVHX0ZMQUdfS0VZKSB8fCBzcGFuQ29udGV4dC50cmFjZUZsYWdzICYgMHgxO1xuICAgICAgICB2YXIgdmFsdWUgPSBzcGFuQ29udGV4dC50cmFjZUlkICsgXCItXCIgKyBzcGFuQ29udGV4dC5zcGFuSWQgKyBcIi1cIiArIHNhbXBsaW5nU3RhdGU7XG4gICAgICAgIHNldHRlci5zZXQoY2FycmllciwgQjNfQ09OVEVYVF9IRUFERVIsIHZhbHVlKTtcbiAgICB9O1xuICAgIEIzU2luZ2xlUHJvcGFnYXRvci5wcm90b3R5cGUuZXh0cmFjdCA9IGZ1bmN0aW9uIChjb250ZXh0LCBjYXJyaWVyLCBnZXR0ZXIpIHtcbiAgICAgICAgdmFyIGhlYWRlciA9IGdldHRlci5nZXQoY2FycmllciwgQjNfQ09OVEVYVF9IRUFERVIpO1xuICAgICAgICB2YXIgYjNDb250ZXh0ID0gQXJyYXkuaXNBcnJheShoZWFkZXIpID8gaGVhZGVyWzBdIDogaGVhZGVyO1xuICAgICAgICBpZiAodHlwZW9mIGIzQ29udGV4dCAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgdmFyIG1hdGNoID0gYjNDb250ZXh0Lm1hdGNoKEIzX0NPTlRFWFRfUkVHRVgpO1xuICAgICAgICBpZiAoIW1hdGNoKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgIHZhciBfYSA9IF9fcmVhZChtYXRjaCwgNCksIGV4dHJhY3RlZFRyYWNlSWQgPSBfYVsxXSwgc3BhbklkID0gX2FbMl0sIHNhbXBsaW5nU3RhdGUgPSBfYVszXTtcbiAgICAgICAgdmFyIHRyYWNlSWQgPSBjb252ZXJ0VG9UcmFjZUlkMTI4KGV4dHJhY3RlZFRyYWNlSWQpO1xuICAgICAgICBpZiAoIWlzVmFsaWRUcmFjZUlkKHRyYWNlSWQpIHx8ICFpc1ZhbGlkU3BhbklkKHNwYW5JZCkpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgdmFyIHRyYWNlRmxhZ3MgPSBjb252ZXJ0VG9UcmFjZUZsYWdzKHNhbXBsaW5nU3RhdGUpO1xuICAgICAgICBpZiAoc2FtcGxpbmdTdGF0ZSA9PT0gREVCVUdfU1RBVEUpIHtcbiAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnNldFZhbHVlKEIzX0RFQlVHX0ZMQUdfS0VZLCBzYW1wbGluZ1N0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhY2Uuc2V0U3BhbkNvbnRleHQoY29udGV4dCwge1xuICAgICAgICAgICAgdHJhY2VJZDogdHJhY2VJZCxcbiAgICAgICAgICAgIHNwYW5JZDogc3BhbklkLFxuICAgICAgICAgICAgaXNSZW1vdGU6IHRydWUsXG4gICAgICAgICAgICB0cmFjZUZsYWdzOiB0cmFjZUZsYWdzLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIEIzU2luZ2xlUHJvcGFnYXRvci5wcm90b3R5cGUuZmllbGRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gW0IzX0NPTlRFWFRfSEVBREVSXTtcbiAgICB9O1xuICAgIHJldHVybiBCM1NpbmdsZVByb3BhZ2F0b3I7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqIEVudW1lcmF0aW9uIG9mIEIzIGluamVjdCBlbmNvZGluZ3MgKi9cbnZhciBCM0luamVjdEVuY29kaW5nO1xuKGZ1bmN0aW9uIChCM0luamVjdEVuY29kaW5nKSB7XG4gICAgQjNJbmplY3RFbmNvZGluZ1tCM0luamVjdEVuY29kaW5nW1wiU0lOR0xFX0hFQURFUlwiXSA9IDBdID0gXCJTSU5HTEVfSEVBREVSXCI7XG4gICAgQjNJbmplY3RFbmNvZGluZ1tCM0luamVjdEVuY29kaW5nW1wiTVVMVElfSEVBREVSXCJdID0gMV0gPSBcIk1VTFRJX0hFQURFUlwiO1xufSkoQjNJbmplY3RFbmNvZGluZyB8fCAoQjNJbmplY3RFbmNvZGluZyA9IHt9KSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vKipcbiAqIFByb3BhZ2F0b3IgdGhhdCBleHRyYWN0cyBCMyBjb250ZXh0IGluIGJvdGggc2luZ2xlIGFuZCBtdWx0aS1oZWFkZXIgdmFyaWFudHMsXG4gKiB3aXRoIGNvbmZpZ3VyYWJsZSBpbmplY3Rpb24gZm9ybWF0IGRlZmF1bHRpbmcgdG8gQjMgc2luZ2xlLWhlYWRlci4gRHVlIHRvXG4gKiB0aGUgYXN5bW1ldHJ5IGluIGluamVjdGlvbiBhbmQgZXh0cmFjdGlvbiBmb3JtYXRzIHRoaXMgaXMgbm90IHN1aXRhYmxlIHRvXG4gKiBiZSBpbXBsZW1lbnRlZCBhcyBhIGNvbXBvc2l0ZSBwcm9wYWdhdG9yLlxuICogQmFzZWQgb246IGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuemlwa2luL2IzLXByb3BhZ2F0aW9uXG4gKi9cbnZhciBCM1Byb3BhZ2F0b3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQjNQcm9wYWdhdG9yKGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnID09PSB2b2lkIDApIHsgY29uZmlnID0ge307IH1cbiAgICAgICAgdGhpcy5fYjNNdWx0aVByb3BhZ2F0b3IgPSBuZXcgQjNNdWx0aVByb3BhZ2F0b3IoKTtcbiAgICAgICAgdGhpcy5fYjNTaW5nbGVQcm9wYWdhdG9yID0gbmV3IEIzU2luZ2xlUHJvcGFnYXRvcigpO1xuICAgICAgICBpZiAoY29uZmlnLmluamVjdEVuY29kaW5nID09PSBCM0luamVjdEVuY29kaW5nLk1VTFRJX0hFQURFUikge1xuICAgICAgICAgICAgdGhpcy5faW5qZWN0ID0gdGhpcy5fYjNNdWx0aVByb3BhZ2F0b3IuaW5qZWN0O1xuICAgICAgICAgICAgdGhpcy5fZmllbGRzID0gdGhpcy5fYjNNdWx0aVByb3BhZ2F0b3IuZmllbGRzKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pbmplY3QgPSB0aGlzLl9iM1NpbmdsZVByb3BhZ2F0b3IuaW5qZWN0O1xuICAgICAgICAgICAgdGhpcy5fZmllbGRzID0gdGhpcy5fYjNTaW5nbGVQcm9wYWdhdG9yLmZpZWxkcygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIEIzUHJvcGFnYXRvci5wcm90b3R5cGUuaW5qZWN0ID0gZnVuY3Rpb24gKGNvbnRleHQsIGNhcnJpZXIsIHNldHRlcikge1xuICAgICAgICBpZiAoaXNUcmFjaW5nU3VwcHJlc3NlZChjb250ZXh0KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2luamVjdChjb250ZXh0LCBjYXJyaWVyLCBzZXR0ZXIpO1xuICAgIH07XG4gICAgQjNQcm9wYWdhdG9yLnByb3RvdHlwZS5leHRyYWN0ID0gZnVuY3Rpb24gKGNvbnRleHQsIGNhcnJpZXIsIGdldHRlcikge1xuICAgICAgICB2YXIgaGVhZGVyID0gZ2V0dGVyLmdldChjYXJyaWVyLCBCM19DT05URVhUX0hFQURFUik7XG4gICAgICAgIHZhciBiM0NvbnRleHQgPSBBcnJheS5pc0FycmF5KGhlYWRlcikgPyBoZWFkZXJbMF0gOiBoZWFkZXI7XG4gICAgICAgIGlmIChiM0NvbnRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9iM1NpbmdsZVByb3BhZ2F0b3IuZXh0cmFjdChjb250ZXh0LCBjYXJyaWVyLCBnZXR0ZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2IzTXVsdGlQcm9wYWdhdG9yLmV4dHJhY3QoY29udGV4dCwgY2FycmllciwgZ2V0dGVyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQjNQcm9wYWdhdG9yLnByb3RvdHlwZS5maWVsZHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZHM7XG4gICAgfTtcbiAgICByZXR1cm4gQjNQcm9wYWdhdG9yO1xufSgpKTtcblxuZXhwb3J0IHsgQjNJbmplY3RFbmNvZGluZywgQjNQcm9wYWdhdG9yLCBCM19DT05URVhUX0hFQURFUiwgWF9CM19GTEFHUywgWF9CM19QQVJFTlRfU1BBTl9JRCwgWF9CM19TQU1QTEVELCBYX0IzX1NQQU5fSUQsIFhfQjNfVFJBQ0VfSUQgfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLEtBQUtBLEdBQWtCLEtBQUtDLEdBQU8sS0FBS0MsR0FBb0IsS0FBS0MsR0FBWSxLQUFLQyxHQUFnQixLQUFLQyxTQUFxQjtBQWlCckksSUFBSUMsSUFBdUJOLEVBQWlCLGdEQUFnRDtBQUM1RixTQUFTTyxFQUFvQkMsR0FBUztBQUNsQyxTQUFPQSxFQUFRLFNBQVNGLENBQW9CLE1B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SyxRQUFRQSxHQUFTZSxHQUFTWSxDQUFNO0FBQUEsSUFDekMsR0FDQXlCLEVBQWEsVUFBVSxVQUFVLFNBQVVwRCxHQUFTZSxHQUFTQyxHQUFRO0FBQ2pFLFVBQUlILElBQVNHLEVBQU8sSUFBSUQsR0FBU2IsQ0FBaUIsR0FDOUM2QyxJQUFZLE1BQU0sUUFBUWxDLENBQU0sSUFBSUEsRUFBTyxDQUFDLElBQUlBO0FBQ3BELGFBQUlrQyxJQUNPLEtBQUssb0JBQW9CLFFBQVEvQyxHQUFTZSxHQUFTQyxDQUFNLElBR3pELEtBQUssbUJBQW1CLFFBQVFoQixHQUFTZSxHQUFTQyxDQUFNO0FBQUEsSUFFdkUsR0FDQW9DLEVBQWEsVUFBVSxTQUFTLFdBQVk7QUFDeEMsYUFBTyxLQUFLO0FBQUEsSUFDaEIsR0FDT0E7QUFBQSxFQUNYLEVBQUU7QUFBQTsiLAogICJuYW1lcyI6IFsiY3JlYXRlQ29udGV4dEtleSIsICJ0cmFjZSIsICJpc1NwYW5Db250ZXh0VmFsaWQiLCAiVHJhY2VGbGFncyIsICJpc1ZhbGlkVHJhY2VJZCIsICJpc1ZhbGlkU3BhbklkIiwgIlNVUFBSRVNTX1RSQUNJTkdfS0VZIiwgImlzVHJhY2luZ1N1cHByZXNzZWQiLCAiY29udGV4dCIsICJCM19ERUJVR19GTEFHX0tFWSIsICJCM19DT05URVhUX0hFQURFUiIsICJYX0IzX1RSQUNFX0lEIiwgIlhfQjNfU1BBTl9JRCIsICJYX0IzX1NBTVBMRUQiLCAiWF9CM19QQVJFTlRfU1BBTl9JRCIsICJYX0IzX0ZMQUdTIiwgIlZBTElEX1NBTVBMRURfVkFMVUVTIiwgIlZBTElEX1VOU0FNUExFRF9WQUxVRVMiLCAiaXNWYWxpZFNhbXBsZWRWYWx1ZSIsICJzYW1wbGVkIiwgInBhcnNlSGVhZGVyIiwgImhlYWRlciIsICJnZXRIZWFkZXJWYWx1ZSIsICJjYXJyaWVyIiwgImdldHRlciIsICJrZXkiLCAiZ2V0VHJhY2VJZCIsICJ0cmFjZUlkIiwgImdldFNwYW5JZCIsICJzcGFuSWQiLCAiZ2V0RGVidWciLCAiZGVidWciLCAiZ2V0VHJhY2VGbGFncyIsICJ0cmFjZUZsYWdzIiwgIkIzTXVsdGlQcm9wYWdhdG9yIiwgInNldHRlciIsICJzcGFuQ29udGV4dCIsICJfX3JlYWQiLCAibyIsICJuIiwgIm0iLCAiaSIsICJyIiwgImFyIiwgImUiLCAiZXJyb3IiLCAiQjNfQ09OVEVYVF9SRUdFWCIsICJQQURESU5HIiwgIlNBTVBMRURfVkFMVUVTIiwgIkRFQlVHX1NUQVRFIiwgImNvbnZlcnRUb1RyYWNlSWQxMjgiLCAiY29udmVydFRvVHJhY2VGbGFncyIsICJzYW1wbGluZ1N0YXRlIiwgIkIzU2luZ2xlUHJvcGFnYXRvciIsICJ2YWx1ZSIsICJiM0NvbnRleHQiLCAibWF0Y2giLCAiX2EiLCAiZXh0cmFjdGVkVHJhY2VJZCIsICJCM0luamVjdEVuY29kaW5nIiwgIkIzUHJvcGFnYXRvciIsICJjb25maWciXQp9Cg==
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
import { R as l } from "./Resource-An2TTXLX.js";
|
|
2
|
+
import { d as ee } from "./Resource-An2TTXLX.js";
|
|
3
|
+
import { d as v } from "./diag-api-Ck_l5qgD.js";
|
|
4
|
+
import { e as A, f as m, g as b, h as w, S as D } from "./sdk-info-SNq483aR.js";
|
|
5
|
+
var T = (
|
|
6
|
+
/** @class */
|
|
7
|
+
function() {
|
|
8
|
+
function e() {
|
|
9
|
+
}
|
|
10
|
+
return e.prototype.detect = function() {
|
|
11
|
+
return new l({});
|
|
12
|
+
}, e;
|
|
13
|
+
}()
|
|
14
|
+
), h = new T(), I = (
|
|
15
|
+
/** @class */
|
|
16
|
+
function() {
|
|
17
|
+
function e() {
|
|
18
|
+
}
|
|
19
|
+
return e.prototype.detect = function() {
|
|
20
|
+
return Promise.resolve(h.detect());
|
|
21
|
+
}, e;
|
|
22
|
+
}()
|
|
23
|
+
), _ = new I(), H = _, F = h, X = _, k = h, K = _, Y = _, q = h, E = function() {
|
|
24
|
+
return E = Object.assign || function(e) {
|
|
25
|
+
for (var n, t = 1, i = arguments.length; t < i; t++) {
|
|
26
|
+
n = arguments[t];
|
|
27
|
+
for (var o in n) Object.prototype.hasOwnProperty.call(n, o) && (e[o] = n[o]);
|
|
28
|
+
}
|
|
29
|
+
return e;
|
|
30
|
+
}, E.apply(this, arguments);
|
|
31
|
+
}, N = (
|
|
32
|
+
/** @class */
|
|
33
|
+
function() {
|
|
34
|
+
function e() {
|
|
35
|
+
}
|
|
36
|
+
return e.prototype.detect = function(n) {
|
|
37
|
+
var t, i, o, r, u = typeof navigator < "u" && ((o = (i = global.process) === null || i === void 0 ? void 0 : i.versions) === null || o === void 0 ? void 0 : o.node) === void 0 && // Node.js v21 adds `navigator`
|
|
38
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
39
|
+
// @ts-ignore don't have Bun types
|
|
40
|
+
((r = global.Bun) === null || r === void 0 ? void 0 : r.version) === void 0;
|
|
41
|
+
if (!u)
|
|
42
|
+
return l.empty();
|
|
43
|
+
var a = (t = {}, t[A] = "browser", t[m] = "Web Browser", t[b] = navigator.userAgent, t);
|
|
44
|
+
return this._getResourceAttributes(a, n);
|
|
45
|
+
}, e.prototype._getResourceAttributes = function(n, t) {
|
|
46
|
+
return n[b] === "" ? (v.debug("BrowserDetector failed: Unable to find required browser resources. "), l.empty()) : new l(E({}, n));
|
|
47
|
+
}, e;
|
|
48
|
+
}()
|
|
49
|
+
), O = new N(), M = (
|
|
50
|
+
/** @class */
|
|
51
|
+
function() {
|
|
52
|
+
function e() {
|
|
53
|
+
}
|
|
54
|
+
return e.prototype.detect = function(n) {
|
|
55
|
+
return Promise.resolve(O.detect(n));
|
|
56
|
+
}, e;
|
|
57
|
+
}()
|
|
58
|
+
), J = new M(), L = function(e) {
|
|
59
|
+
var n = typeof Symbol == "function" && Symbol.iterator, t = n && e[n], i = 0;
|
|
60
|
+
if (t) return t.call(e);
|
|
61
|
+
if (e && typeof e.length == "number") return {
|
|
62
|
+
next: function() {
|
|
63
|
+
return e && i >= e.length && (e = void 0), { value: e && e[i++], done: !e };
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
throw new TypeError(n ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
67
|
+
}, x = function(e, n) {
|
|
68
|
+
var t = typeof Symbol == "function" && e[Symbol.iterator];
|
|
69
|
+
if (!t) return e;
|
|
70
|
+
var i = t.call(e), o, r = [], u;
|
|
71
|
+
try {
|
|
72
|
+
for (; (n === void 0 || n-- > 0) && !(o = i.next()).done; ) r.push(o.value);
|
|
73
|
+
} catch (a) {
|
|
74
|
+
u = { error: a };
|
|
75
|
+
} finally {
|
|
76
|
+
try {
|
|
77
|
+
o && !o.done && (t = i.return) && t.call(i);
|
|
78
|
+
} finally {
|
|
79
|
+
if (u) throw u.error;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return r;
|
|
83
|
+
}, C = (
|
|
84
|
+
/** @class */
|
|
85
|
+
function() {
|
|
86
|
+
function e() {
|
|
87
|
+
this._MAX_LENGTH = 255, this._COMMA_SEPARATOR = ",", this._LABEL_KEY_VALUE_SPLITTER = "=", this._ERROR_MESSAGE_INVALID_CHARS = "should be a ASCII string with a length greater than 0 and not exceed " + this._MAX_LENGTH + " characters.", this._ERROR_MESSAGE_INVALID_VALUE = "should be a ASCII string with a length not exceed " + this._MAX_LENGTH + " characters.";
|
|
88
|
+
}
|
|
89
|
+
return e.prototype.detect = function(n) {
|
|
90
|
+
var t = {}, i = w(), o = i.OTEL_RESOURCE_ATTRIBUTES, r = i.OTEL_SERVICE_NAME;
|
|
91
|
+
if (o)
|
|
92
|
+
try {
|
|
93
|
+
var u = this._parseResourceAttributes(o);
|
|
94
|
+
Object.assign(t, u);
|
|
95
|
+
} catch (a) {
|
|
96
|
+
v.debug("EnvDetector failed: " + a.message);
|
|
97
|
+
}
|
|
98
|
+
return r && (t[D] = r), new l(t);
|
|
99
|
+
}, e.prototype._parseResourceAttributes = function(n) {
|
|
100
|
+
var t, i;
|
|
101
|
+
if (!n)
|
|
102
|
+
return {};
|
|
103
|
+
var o = {}, r = n.split(this._COMMA_SEPARATOR, -1);
|
|
104
|
+
try {
|
|
105
|
+
for (var u = L(r), a = u.next(); !a.done; a = u.next()) {
|
|
106
|
+
var f = a.value, c = f.split(this._LABEL_KEY_VALUE_SPLITTER, -1);
|
|
107
|
+
if (c.length === 2) {
|
|
108
|
+
var s = x(c, 2), d = s[0], y = s[1];
|
|
109
|
+
if (d = d.trim(), y = y.trim().split(/^"|"$/).join(""), !this._isValidAndNotEmpty(d))
|
|
110
|
+
throw new Error("Attribute key " + this._ERROR_MESSAGE_INVALID_CHARS);
|
|
111
|
+
if (!this._isValid(y))
|
|
112
|
+
throw new Error("Attribute value " + this._ERROR_MESSAGE_INVALID_VALUE);
|
|
113
|
+
o[d] = decodeURIComponent(y);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
} catch (g) {
|
|
117
|
+
t = { error: g };
|
|
118
|
+
} finally {
|
|
119
|
+
try {
|
|
120
|
+
a && !a.done && (i = u.return) && i.call(u);
|
|
121
|
+
} finally {
|
|
122
|
+
if (t) throw t.error;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return o;
|
|
126
|
+
}, e.prototype._isValid = function(n) {
|
|
127
|
+
return n.length <= this._MAX_LENGTH && this._isBaggageOctetString(n);
|
|
128
|
+
}, e.prototype._isBaggageOctetString = function(n) {
|
|
129
|
+
for (var t = 0; t < n.length; t++) {
|
|
130
|
+
var i = n.charCodeAt(t);
|
|
131
|
+
if (i < 33 || i === 44 || i === 59 || i === 92 || i > 126)
|
|
132
|
+
return !1;
|
|
133
|
+
}
|
|
134
|
+
return !0;
|
|
135
|
+
}, e.prototype._isValidAndNotEmpty = function(n) {
|
|
136
|
+
return n.length > 0 && this._isValid(n);
|
|
137
|
+
}, e;
|
|
138
|
+
}()
|
|
139
|
+
), V = new C(), B = (
|
|
140
|
+
/** @class */
|
|
141
|
+
function() {
|
|
142
|
+
function e() {
|
|
143
|
+
}
|
|
144
|
+
return e.prototype.detect = function(n) {
|
|
145
|
+
return Promise.resolve(V.detect(n));
|
|
146
|
+
}, e;
|
|
147
|
+
}()
|
|
148
|
+
), W = new B(), U = function(e) {
|
|
149
|
+
return e !== null && typeof e == "object" && typeof e.then == "function";
|
|
150
|
+
}, S = function(e, n, t, i) {
|
|
151
|
+
function o(r) {
|
|
152
|
+
return r instanceof t ? r : new t(function(u) {
|
|
153
|
+
u(r);
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
return new (t || (t = Promise))(function(r, u) {
|
|
157
|
+
function a(s) {
|
|
158
|
+
try {
|
|
159
|
+
c(i.next(s));
|
|
160
|
+
} catch (d) {
|
|
161
|
+
u(d);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
function f(s) {
|
|
165
|
+
try {
|
|
166
|
+
c(i.throw(s));
|
|
167
|
+
} catch (d) {
|
|
168
|
+
u(d);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
function c(s) {
|
|
172
|
+
s.done ? r(s.value) : o(s.value).then(a, f);
|
|
173
|
+
}
|
|
174
|
+
c((i = i.apply(e, n || [])).next());
|
|
175
|
+
});
|
|
176
|
+
}, p = function(e, n) {
|
|
177
|
+
var t = { label: 0, sent: function() {
|
|
178
|
+
if (r[0] & 1) throw r[1];
|
|
179
|
+
return r[1];
|
|
180
|
+
}, trys: [], ops: [] }, i, o, r, u;
|
|
181
|
+
return u = { next: a(0), throw: a(1), return: a(2) }, typeof Symbol == "function" && (u[Symbol.iterator] = function() {
|
|
182
|
+
return this;
|
|
183
|
+
}), u;
|
|
184
|
+
function a(c) {
|
|
185
|
+
return function(s) {
|
|
186
|
+
return f([c, s]);
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
function f(c) {
|
|
190
|
+
if (i) throw new TypeError("Generator is already executing.");
|
|
191
|
+
for (; t; ) try {
|
|
192
|
+
if (i = 1, o && (r = c[0] & 2 ? o.return : c[0] ? o.throw || ((r = o.return) && r.call(o), 0) : o.next) && !(r = r.call(o, c[1])).done) return r;
|
|
193
|
+
switch (o = 0, r && (c = [c[0] & 2, r.value]), c[0]) {
|
|
194
|
+
case 0:
|
|
195
|
+
case 1:
|
|
196
|
+
r = c;
|
|
197
|
+
break;
|
|
198
|
+
case 4:
|
|
199
|
+
return t.label++, { value: c[1], done: !1 };
|
|
200
|
+
case 5:
|
|
201
|
+
t.label++, o = c[1], c = [0];
|
|
202
|
+
continue;
|
|
203
|
+
case 7:
|
|
204
|
+
c = t.ops.pop(), t.trys.pop();
|
|
205
|
+
continue;
|
|
206
|
+
default:
|
|
207
|
+
if (r = t.trys, !(r = r.length > 0 && r[r.length - 1]) && (c[0] === 6 || c[0] === 2)) {
|
|
208
|
+
t = 0;
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
if (c[0] === 3 && (!r || c[1] > r[0] && c[1] < r[3])) {
|
|
212
|
+
t.label = c[1];
|
|
213
|
+
break;
|
|
214
|
+
}
|
|
215
|
+
if (c[0] === 6 && t.label < r[1]) {
|
|
216
|
+
t.label = r[1], r = c;
|
|
217
|
+
break;
|
|
218
|
+
}
|
|
219
|
+
if (r && t.label < r[2]) {
|
|
220
|
+
t.label = r[2], t.ops.push(c);
|
|
221
|
+
break;
|
|
222
|
+
}
|
|
223
|
+
r[2] && t.ops.pop(), t.trys.pop();
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
c = n.call(e, t);
|
|
227
|
+
} catch (s) {
|
|
228
|
+
c = [6, s], o = 0;
|
|
229
|
+
} finally {
|
|
230
|
+
i = r = 0;
|
|
231
|
+
}
|
|
232
|
+
if (c[0] & 5) throw c[1];
|
|
233
|
+
return { value: c[0] ? c[1] : void 0, done: !0 };
|
|
234
|
+
}
|
|
235
|
+
}, $ = function(e) {
|
|
236
|
+
return e === void 0 && (e = {}), S(void 0, void 0, void 0, function() {
|
|
237
|
+
var n;
|
|
238
|
+
return p(this, function(t) {
|
|
239
|
+
switch (t.label) {
|
|
240
|
+
case 0:
|
|
241
|
+
return [4, Promise.all((e.detectors || []).map(function(i) {
|
|
242
|
+
return S(void 0, void 0, void 0, function() {
|
|
243
|
+
var o, r;
|
|
244
|
+
return p(this, function(u) {
|
|
245
|
+
switch (u.label) {
|
|
246
|
+
case 0:
|
|
247
|
+
return u.trys.push([0, 2, , 3]), [4, i.detect(e)];
|
|
248
|
+
case 1:
|
|
249
|
+
return o = u.sent(), v.debug(i.constructor.name + " found resource.", o), [2, o];
|
|
250
|
+
case 2:
|
|
251
|
+
return r = u.sent(), v.debug(i.constructor.name + " failed: " + r.message), [2, l.empty()];
|
|
252
|
+
case 3:
|
|
253
|
+
return [
|
|
254
|
+
2
|
|
255
|
+
/*return*/
|
|
256
|
+
];
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
}))];
|
|
261
|
+
case 1:
|
|
262
|
+
return n = t.sent(), R(n), [2, n.reduce(function(i, o) {
|
|
263
|
+
return i.merge(o);
|
|
264
|
+
}, l.empty())];
|
|
265
|
+
}
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
}, z = function(e) {
|
|
269
|
+
var n;
|
|
270
|
+
e === void 0 && (e = {});
|
|
271
|
+
var t = ((n = e.detectors) !== null && n !== void 0 ? n : []).map(function(o) {
|
|
272
|
+
try {
|
|
273
|
+
var r = o.detect(e), u;
|
|
274
|
+
if (U(r)) {
|
|
275
|
+
var a = function() {
|
|
276
|
+
return S(void 0, void 0, void 0, function() {
|
|
277
|
+
var f, c;
|
|
278
|
+
return p(this, function(s) {
|
|
279
|
+
switch (s.label) {
|
|
280
|
+
case 0:
|
|
281
|
+
return [4, r];
|
|
282
|
+
case 1:
|
|
283
|
+
return f = s.sent(), [4, (c = f.waitForAsyncAttributes) === null || c === void 0 ? void 0 : c.call(f)];
|
|
284
|
+
case 2:
|
|
285
|
+
return s.sent(), [2, f.attributes];
|
|
286
|
+
}
|
|
287
|
+
});
|
|
288
|
+
});
|
|
289
|
+
};
|
|
290
|
+
u = new l({}, a());
|
|
291
|
+
} else
|
|
292
|
+
u = r;
|
|
293
|
+
return u.waitForAsyncAttributes ? u.waitForAsyncAttributes().then(function() {
|
|
294
|
+
return v.debug(o.constructor.name + " found resource.", u);
|
|
295
|
+
}) : v.debug(o.constructor.name + " found resource.", u), u;
|
|
296
|
+
} catch (f) {
|
|
297
|
+
return v.error(o.constructor.name + " failed: " + f.message), l.empty();
|
|
298
|
+
}
|
|
299
|
+
}), i = t.reduce(function(o, r) {
|
|
300
|
+
return o.merge(r);
|
|
301
|
+
}, l.empty());
|
|
302
|
+
return i.waitForAsyncAttributes && i.waitForAsyncAttributes().then(function() {
|
|
303
|
+
R(t);
|
|
304
|
+
}), i;
|
|
305
|
+
}, R = function(e) {
|
|
306
|
+
e.forEach(function(n) {
|
|
307
|
+
if (Object.keys(n.attributes).length > 0) {
|
|
308
|
+
var t = JSON.stringify(n.attributes, null, 4);
|
|
309
|
+
v.verbose(t);
|
|
310
|
+
}
|
|
311
|
+
});
|
|
312
|
+
};
|
|
313
|
+
export {
|
|
314
|
+
l as Resource,
|
|
315
|
+
J as browserDetector,
|
|
316
|
+
O as browserDetectorSync,
|
|
317
|
+
ee as defaultServiceName,
|
|
318
|
+
$ as detectResources,
|
|
319
|
+
z as detectResourcesSync,
|
|
320
|
+
W as envDetector,
|
|
321
|
+
V as envDetectorSync,
|
|
322
|
+
H as hostDetector,
|
|
323
|
+
F as hostDetectorSync,
|
|
324
|
+
X as osDetector,
|
|
325
|
+
k as osDetectorSync,
|
|
326
|
+
K as processDetector,
|
|
327
|
+
Y as processDetectorSync,
|
|
328
|
+
q as serviceInstanceIdDetectorSync
|
|
329
|
+
};
|
|
330
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDBqfX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IFIgYXMgUmVzb3VyY2UgfSBmcm9tICcuL1Jlc291cmNlLSF+ezAwOX1+LmpzJztcbmV4cG9ydCB7IGQgYXMgZGVmYXVsdFNlcnZpY2VOYW1lIH0gZnJvbSAnLi9SZXNvdXJjZS0hfnswMDl9fi5qcyc7XG5pbXBvcnQgeyBkIGFzIGRpYWcgfSBmcm9tICcuL2RpYWctYXBpLSF+ezAwNH1+LmpzJztcbmltcG9ydCB7IGUgYXMgU0VNUkVTQVRUUlNfUFJPQ0VTU19SVU5USU1FX05BTUUsIGYgYXMgU0VNUkVTQVRUUlNfUFJPQ0VTU19SVU5USU1FX0RFU0NSSVBUSU9OLCBnIGFzIFNFTVJFU0FUVFJTX1BST0NFU1NfUlVOVElNRV9WRVJTSU9OLCBoIGFzIGdldEVudiwgUyBhcyBTRU1SRVNBVFRSU19TRVJWSUNFX05BTUUgfSBmcm9tICcuL3Nkay1pbmZvLSF+ezAwYX1+LmpzJztcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBOb29wRGV0ZWN0b3JTeW5jID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5vb3BEZXRlY3RvclN5bmMoKSB7XG4gICAgfVxuICAgIE5vb3BEZXRlY3RvclN5bmMucHJvdG90eXBlLmRldGVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXNvdXJjZSh7fSk7XG4gICAgfTtcbiAgICByZXR1cm4gTm9vcERldGVjdG9yU3luYztcbn0oKSk7XG52YXIgbm9vcERldGVjdG9yU3luYyA9IG5ldyBOb29wRGV0ZWN0b3JTeW5jKCk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgTm9vcERldGVjdG9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5vb3BEZXRlY3RvcigpIHtcbiAgICB9XG4gICAgTm9vcERldGVjdG9yLnByb3RvdHlwZS5kZXRlY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobm9vcERldGVjdG9yU3luYy5kZXRlY3QoKSk7XG4gICAgfTtcbiAgICByZXR1cm4gTm9vcERldGVjdG9yO1xufSgpKTtcbnZhciBub29wRGV0ZWN0b3IgPSBuZXcgTm9vcERldGVjdG9yKCk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgaG9zdERldGVjdG9yID0gbm9vcERldGVjdG9yO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIGhvc3REZXRlY3RvclN5bmMgPSBub29wRGV0ZWN0b3JTeW5jO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIG9zRGV0ZWN0b3IgPSBub29wRGV0ZWN0b3I7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgb3NEZXRlY3RvclN5bmMgPSBub29wRGV0ZWN0b3JTeW5jO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIHByb2Nlc3NEZXRlY3RvciA9IG5vb3BEZXRlY3RvcjtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBwcm9jZXNzRGV0ZWN0b3JTeW5jID0gbm9vcERldGVjdG9yO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqXG4gKiBAZXhwZXJpbWVudGFsXG4gKi9cbnZhciBzZXJ2aWNlSW5zdGFuY2VJZERldGVjdG9yU3luYyA9IG5vb3BEZXRlY3RvclN5bmM7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgX19hc3NpZ24gPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbi8qKlxuICogQnJvd3NlckRldGVjdG9yU3luYyB3aWxsIGJlIHVzZWQgdG8gZGV0ZWN0IHRoZSByZXNvdXJjZXMgcmVsYXRlZCB0byBicm93c2VyLlxuICovXG52YXIgQnJvd3NlckRldGVjdG9yU3luYyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBCcm93c2VyRGV0ZWN0b3JTeW5jKCkge1xuICAgIH1cbiAgICBCcm93c2VyRGV0ZWN0b3JTeW5jLnByb3RvdHlwZS5kZXRlY3QgPSBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XG4gICAgICAgIHZhciBpc0Jyb3dzZXIgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgKChfYyA9IChfYiA9IGdsb2JhbC5wcm9jZXNzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IudmVyc2lvbnMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5ub2RlKSA9PT0gdW5kZWZpbmVkICYmIC8vIE5vZGUuanMgdjIxIGFkZHMgYG5hdmlnYXRvcmBcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgZG9uJ3QgaGF2ZSBCdW4gdHlwZXNcbiAgICAgICAgICAgICgoX2QgPSBnbG9iYWwuQnVuKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QudmVyc2lvbikgPT09IHVuZGVmaW5lZDsgLy8gQnVuIChidW4uc2gpIGRlZmluZXMgYG5hdmlnYXRvcmBcbiAgICAgICAgaWYgKCFpc0Jyb3dzZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBSZXNvdXJjZS5lbXB0eSgpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBicm93c2VyUmVzb3VyY2UgPSAoX2EgPSB7fSxcbiAgICAgICAgICAgIF9hW1NFTVJFU0FUVFJTX1BST0NFU1NfUlVOVElNRV9OQU1FXSA9ICdicm93c2VyJyxcbiAgICAgICAgICAgIF9hW1NFTVJFU0FUVFJTX1BST0NFU1NfUlVOVElNRV9ERVNDUklQVElPTl0gPSAnV2ViIEJyb3dzZXInLFxuICAgICAgICAgICAgX2FbU0VNUkVTQVRUUlNfUFJPQ0VTU19SVU5USU1FX1ZFUlNJT05dID0gbmF2aWdhdG9yLnVzZXJBZ2VudCxcbiAgICAgICAgICAgIF9hKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFJlc291cmNlQXR0cmlidXRlcyhicm93c2VyUmVzb3VyY2UsIGNvbmZpZyk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZXMgcHJvY2VzcyByZXNvdXJjZSBhdHRyaWJ1dGUgbWFwIGZyb20gcHJvY2VzcyB2YXJpYWJsZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBicm93c2VyUmVzb3VyY2UgVGhlIHVuLXNhbml0aXplZCByZXNvdXJjZSBhdHRyaWJ1dGVzIGZyb20gcHJvY2VzcyBhcyBrZXkvdmFsdWUgcGFpcnMuXG4gICAgICogQHBhcmFtIGNvbmZpZzogQ29uZmlnXG4gICAgICogQHJldHVybnMgVGhlIHNhbml0aXplZCByZXNvdXJjZSBhdHRyaWJ1dGVzLlxuICAgICAqL1xuICAgIEJyb3dzZXJEZXRlY3RvclN5bmMucHJvdG90eXBlLl9nZXRSZXNvdXJjZUF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAoYnJvd3NlclJlc291cmNlLCBfY29uZmlnKSB7XG4gICAgICAgIGlmIChicm93c2VyUmVzb3VyY2VbU0VNUkVTQVRUUlNfUFJPQ0VTU19SVU5USU1FX1ZFUlNJT05dID09PSAnJykge1xuICAgICAgICAgICAgZGlhZy5kZWJ1ZygnQnJvd3NlckRldGVjdG9yIGZhaWxlZDogVW5hYmxlIHRvIGZpbmQgcmVxdWlyZWQgYnJvd3NlciByZXNvdXJjZXMuICcpO1xuICAgICAgICAgICAgcmV0dXJuIFJlc291cmNlLmVtcHR5KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlc291cmNlKF9fYXNzaWduKHt9LCBicm93c2VyUmVzb3VyY2UpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3RvclN5bmM7XG59KCkpO1xudmFyIGJyb3dzZXJEZXRlY3RvclN5bmMgPSBuZXcgQnJvd3NlckRldGVjdG9yU3luYygpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqXG4gKiBCcm93c2VyRGV0ZWN0b3Igd2lsbCBiZSB1c2VkIHRvIGRldGVjdCB0aGUgcmVzb3VyY2VzIHJlbGF0ZWQgdG8gYnJvd3Nlci5cbiAqL1xudmFyIEJyb3dzZXJEZXRlY3RvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBCcm93c2VyRGV0ZWN0b3IoKSB7XG4gICAgfVxuICAgIEJyb3dzZXJEZXRlY3Rvci5wcm90b3R5cGUuZGV0ZWN0ID0gZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGJyb3dzZXJEZXRlY3RvclN5bmMuZGV0ZWN0KGNvbmZpZykpO1xuICAgIH07XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvcjtcbn0oKSk7XG52YXIgYnJvd3NlckRldGVjdG9yID0gbmV3IEJyb3dzZXJEZXRlY3RvcigpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fdmFsdWVzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX192YWx1ZXMpIHx8IGZ1bmN0aW9uKG8pIHtcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufTtcbnZhciBfX3JlYWQgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG4vKipcbiAqIEVudkRldGVjdG9yU3luYyBjYW4gYmUgdXNlZCB0byBkZXRlY3QgdGhlIHByZXNlbmNlIG9mIGFuZCBjcmVhdGUgYSBSZXNvdXJjZVxuICogZnJvbSB0aGUgT1RFTF9SRVNPVVJDRV9BVFRSSUJVVEVTIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICovXG52YXIgRW52RGV0ZWN0b3JTeW5jID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEVudkRldGVjdG9yU3luYygpIHtcbiAgICAgICAgLy8gVHlwZSwgYXR0cmlidXRlIGtleXMsIGFuZCBhdHRyaWJ1dGUgdmFsdWVzIHNob3VsZCBub3QgZXhjZWVkIDI1NiBjaGFyYWN0ZXJzLlxuICAgICAgICB0aGlzLl9NQVhfTEVOR1RIID0gMjU1O1xuICAgICAgICAvLyBPVEVMX1JFU09VUkNFX0FUVFJJQlVURVMgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBhdHRyaWJ1dGVzLlxuICAgICAgICB0aGlzLl9DT01NQV9TRVBBUkFUT1IgPSAnLCc7XG4gICAgICAgIC8vIE9URUxfUkVTT1VSQ0VfQVRUUklCVVRFUyBjb250YWlucyBrZXkgdmFsdWUgcGFpciBzZXBhcmF0ZWQgYnkgJz0nLlxuICAgICAgICB0aGlzLl9MQUJFTF9LRVlfVkFMVUVfU1BMSVRURVIgPSAnPSc7XG4gICAgICAgIHRoaXMuX0VSUk9SX01FU1NBR0VfSU5WQUxJRF9DSEFSUyA9ICdzaG91bGQgYmUgYSBBU0NJSSBzdHJpbmcgd2l0aCBhIGxlbmd0aCBncmVhdGVyIHRoYW4gMCBhbmQgbm90IGV4Y2VlZCAnICtcbiAgICAgICAgICAgIHRoaXMuX01BWF9MRU5HVEggK1xuICAgICAgICAgICAgJyBjaGFyYWN0ZXJzLic7XG4gICAgICAgIHRoaXMuX0VSUk9SX01FU1NBR0VfSU5WQUxJRF9WQUxVRSA9ICdzaG91bGQgYmUgYSBBU0NJSSBzdHJpbmcgd2l0aCBhIGxlbmd0aCBub3QgZXhjZWVkICcgK1xuICAgICAgICAgICAgdGhpcy5fTUFYX0xFTkdUSCArXG4gICAgICAgICAgICAnIGNoYXJhY3RlcnMuJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHtAbGluayBSZXNvdXJjZX0gcG9wdWxhdGVkIHdpdGggYXR0cmlidXRlcyBmcm9tIHRoZVxuICAgICAqIE9URUxfUkVTT1VSQ0VfQVRUUklCVVRFUyBlbnZpcm9ubWVudCB2YXJpYWJsZS4gTm90ZSB0aGlzIGlzIGFuIGFzeW5jXG4gICAgICogZnVuY3Rpb24gdG8gY29uZm9ybSB0byB0aGUgRGV0ZWN0b3IgaW50ZXJmYWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbmZpZyBUaGUgcmVzb3VyY2UgZGV0ZWN0aW9uIGNvbmZpZ1xuICAgICAqL1xuICAgIEVudkRldGVjdG9yU3luYy5wcm90b3R5cGUuZGV0ZWN0ID0gZnVuY3Rpb24gKF9jb25maWcpIHtcbiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgdmFyIGVudiA9IGdldEVudigpO1xuICAgICAgICB2YXIgcmF3QXR0cmlidXRlcyA9IGVudi5PVEVMX1JFU09VUkNFX0FUVFJJQlVURVM7XG4gICAgICAgIHZhciBzZXJ2aWNlTmFtZSA9IGVudi5PVEVMX1NFUlZJQ0VfTkFNRTtcbiAgICAgICAgaWYgKHJhd0F0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFyIHBhcnNlZEF0dHJpYnV0ZXMgPSB0aGlzLl9wYXJzZVJlc291cmNlQXR0cmlidXRlcyhyYXdBdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGF0dHJpYnV0ZXMsIHBhcnNlZEF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBkaWFnLmRlYnVnKFwiRW52RGV0ZWN0b3IgZmFpbGVkOiBcIiArIGUubWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlcnZpY2VOYW1lKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW1NFTVJFU0FUVFJTX1NFUlZJQ0VfTkFNRV0gPSBzZXJ2aWNlTmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFJlc291cmNlKGF0dHJpYnV0ZXMpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhdHRyaWJ1dGUgbWFwIGZyb20gdGhlIE9URUxfUkVTT1VSQ0VfQVRUUklCVVRFUyBlbnZpcm9ubWVudFxuICAgICAqIHZhcmlhYmxlLlxuICAgICAqXG4gICAgICogT1RFTF9SRVNPVVJDRV9BVFRSSUJVVEVTOiBBIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGF0dHJpYnV0ZXMgZGVzY3JpYmluZ1xuICAgICAqIHRoZSBzb3VyY2UgaW4gbW9yZSBkZXRhaWwsIGUuZy4g4oCca2V5MT12YWwxLGtleTI9dmFsMuKAnS4gRG9tYWluIG5hbWVzIGFuZFxuICAgICAqIHBhdGhzIGFyZSBhY2NlcHRlZCBhcyBhdHRyaWJ1dGUga2V5cy4gVmFsdWVzIG1heSBiZSBxdW90ZWQgb3IgdW5xdW90ZWQgaW5cbiAgICAgKiBnZW5lcmFsLiBJZiBhIHZhbHVlIGNvbnRhaW5zIHdoaXRlc3BhY2UsID0sIG9yIFwiIGNoYXJhY3RlcnMsIGl0IG11c3RcbiAgICAgKiBhbHdheXMgYmUgcXVvdGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJhd0VudkF0dHJpYnV0ZXMgVGhlIHJlc291cmNlIGF0dHJpYnV0ZXMgYXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdFxuICAgICAqIG9mIGtleS92YWx1ZSBwYWlycy5cbiAgICAgKiBAcmV0dXJucyBUaGUgc2FuaXRpemVkIHJlc291cmNlIGF0dHJpYnV0ZXMuXG4gICAgICovXG4gICAgRW52RGV0ZWN0b3JTeW5jLnByb3RvdHlwZS5fcGFyc2VSZXNvdXJjZUF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAocmF3RW52QXR0cmlidXRlcykge1xuICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgaWYgKCFyYXdFbnZBdHRyaWJ1dGVzKVxuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHt9O1xuICAgICAgICB2YXIgcmF3QXR0cmlidXRlcyA9IHJhd0VudkF0dHJpYnV0ZXMuc3BsaXQodGhpcy5fQ09NTUFfU0VQQVJBVE9SLCAtMSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciByYXdBdHRyaWJ1dGVzXzEgPSBfX3ZhbHVlcyhyYXdBdHRyaWJ1dGVzKSwgcmF3QXR0cmlidXRlc18xXzEgPSByYXdBdHRyaWJ1dGVzXzEubmV4dCgpOyAhcmF3QXR0cmlidXRlc18xXzEuZG9uZTsgcmF3QXR0cmlidXRlc18xXzEgPSByYXdBdHRyaWJ1dGVzXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJhd0F0dHJpYnV0ZSA9IHJhd0F0dHJpYnV0ZXNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgIHZhciBrZXlWYWx1ZVBhaXIgPSByYXdBdHRyaWJ1dGUuc3BsaXQodGhpcy5fTEFCRUxfS0VZX1ZBTFVFX1NQTElUVEVSLCAtMSk7XG4gICAgICAgICAgICAgICAgaWYgKGtleVZhbHVlUGFpci5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBfYiA9IF9fcmVhZChrZXlWYWx1ZVBhaXIsIDIpLCBrZXkgPSBfYlswXSwgdmFsdWUgPSBfYlsxXTtcbiAgICAgICAgICAgICAgICAvLyBMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlcyBhcmUgdHJpbW1lZC5cbiAgICAgICAgICAgICAgICBrZXkgPSBrZXkudHJpbSgpO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudHJpbSgpLnNwbGl0KC9eXCJ8XCIkLykuam9pbignJyk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1ZhbGlkQW5kTm90RW1wdHkoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdHRyaWJ1dGUga2V5IFwiICsgdGhpcy5fRVJST1JfTUVTU0FHRV9JTlZBTElEX0NIQVJTKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1ZhbGlkKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdHRyaWJ1dGUgdmFsdWUgXCIgKyB0aGlzLl9FUlJPUl9NRVNTQUdFX0lOVkFMSURfVkFMVUUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW2tleV0gPSBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAocmF3QXR0cmlidXRlc18xXzEgJiYgIXJhd0F0dHJpYnV0ZXNfMV8xLmRvbmUgJiYgKF9hID0gcmF3QXR0cmlidXRlc18xLnJldHVybikpIF9hLmNhbGwocmF3QXR0cmlidXRlc18xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgZ2l2ZW4gU3RyaW5nIGlzIGEgdmFsaWQgcHJpbnRhYmxlIEFTQ0lJIHN0cmluZyB3aXRoXG4gICAgICogYSBsZW5ndGggbm90IGV4Y2VlZCBfTUFYX0xFTkdUSCBjaGFyYWN0ZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHN0ciBUaGUgU3RyaW5nIHRvIGJlIHZhbGlkYXRlZC5cbiAgICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBTdHJpbmcgaXMgdmFsaWQuXG4gICAgICovXG4gICAgRW52RGV0ZWN0b3JTeW5jLnByb3RvdHlwZS5faXNWYWxpZCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHJldHVybiBuYW1lLmxlbmd0aCA8PSB0aGlzLl9NQVhfTEVOR1RIICYmIHRoaXMuX2lzQmFnZ2FnZU9jdGV0U3RyaW5nKG5hbWUpO1xuICAgIH07XG4gICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2JhZ2dhZ2UvI2RlZmluaXRpb25cbiAgICBFbnZEZXRlY3RvclN5bmMucHJvdG90eXBlLl9pc0JhZ2dhZ2VPY3RldFN0cmluZyA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjaCA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgaWYgKGNoIDwgMHgyMSB8fCBjaCA9PT0gMHgyYyB8fCBjaCA9PT0gMHgzYiB8fCBjaCA9PT0gMHg1YyB8fCBjaCA+IDB4N2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGdpdmVuIFN0cmluZyBpcyBhIHZhbGlkIHByaW50YWJsZSBBU0NJSSBzdHJpbmcgd2l0aFxuICAgICAqIGEgbGVuZ3RoIGdyZWF0ZXIgdGhhbiAwIGFuZCBub3QgZXhjZWVkIF9NQVhfTEVOR1RIIGNoYXJhY3RlcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RyIFRoZSBTdHJpbmcgdG8gYmUgdmFsaWRhdGVkLlxuICAgICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIFN0cmluZyBpcyB2YWxpZCBhbmQgbm90IGVtcHR5LlxuICAgICAqL1xuICAgIEVudkRldGVjdG9yU3luYy5wcm90b3R5cGUuX2lzVmFsaWRBbmROb3RFbXB0eSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5sZW5ndGggPiAwICYmIHRoaXMuX2lzVmFsaWQoc3RyKTtcbiAgICB9O1xuICAgIHJldHVybiBFbnZEZXRlY3RvclN5bmM7XG59KCkpO1xudmFyIGVudkRldGVjdG9yU3luYyA9IG5ldyBFbnZEZXRlY3RvclN5bmMoKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogRW52RGV0ZWN0b3IgY2FuIGJlIHVzZWQgdG8gZGV0ZWN0IHRoZSBwcmVzZW5jZSBvZiBhbmQgY3JlYXRlIGEgUmVzb3VyY2VcbiAqIGZyb20gdGhlIE9URUxfUkVTT1VSQ0VfQVRUUklCVVRFUyBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqL1xudmFyIEVudkRldGVjdG9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEVudkRldGVjdG9yKCkge1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEge0BsaW5rIFJlc291cmNlfSBwb3B1bGF0ZWQgd2l0aCBhdHRyaWJ1dGVzIGZyb20gdGhlXG4gICAgICogT1RFTF9SRVNPVVJDRV9BVFRSSUJVVEVTIGVudmlyb25tZW50IHZhcmlhYmxlLiBOb3RlIHRoaXMgaXMgYW4gYXN5bmNcbiAgICAgKiBmdW5jdGlvbiB0byBjb25mb3JtIHRvIHRoZSBEZXRlY3RvciBpbnRlcmZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29uZmlnIFRoZSByZXNvdXJjZSBkZXRlY3Rpb24gY29uZmlnXG4gICAgICovXG4gICAgRW52RGV0ZWN0b3IucHJvdG90eXBlLmRldGVjdCA9IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShlbnZEZXRlY3RvclN5bmMuZGV0ZWN0KGNvbmZpZykpO1xuICAgIH07XG4gICAgcmV0dXJuIEVudkRldGVjdG9yO1xufSgpKTtcbnZhciBlbnZEZXRlY3RvciA9IG5ldyBFbnZEZXRlY3RvcigpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIGlzUHJvbWlzZUxpa2UgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgcmV0dXJuICh2YWwgIT09IG51bGwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhbC50aGVuID09PSAnZnVuY3Rpb24nKTtcbn07XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgX19hd2FpdGVyID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG4vKipcbiAqIFJ1bnMgYWxsIHJlc291cmNlIGRldGVjdG9ycyBhbmQgcmV0dXJucyB0aGUgcmVzdWx0cyBtZXJnZWQgaW50byBhIHNpbmdsZSBSZXNvdXJjZS4gUHJvbWlzZVxuICogZG9lcyBub3QgcmVzb2x2ZSB1bnRpbCBhbGwgdGhlIHVuZGVybHlpbmcgZGV0ZWN0b3JzIGhhdmUgcmVzb2x2ZWQsIHVubGlrZVxuICogZGV0ZWN0UmVzb3VyY2VzU3luYy5cbiAqXG4gKiBAZGVwcmVjYXRlZCB1c2UgZGV0ZWN0UmVzb3VyY2VzU3luYygpIGluc3RlYWQuXG4gKiBAcGFyYW0gY29uZmlnIENvbmZpZ3VyYXRpb24gZm9yIHJlc291cmNlIGRldGVjdGlvblxuICovXG52YXIgZGV0ZWN0UmVzb3VyY2VzID0gZnVuY3Rpb24gKGNvbmZpZykge1xuICAgIGlmIChjb25maWcgPT09IHZvaWQgMCkgeyBjb25maWcgPSB7fTsgfVxuICAgIHJldHVybiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmVzb3VyY2VzO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCBQcm9taXNlLmFsbCgoY29uZmlnLmRldGVjdG9ycyB8fCBbXSkubWFwKGZ1bmN0aW9uIChkKSB7IHJldHVybiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc291cmNlLCBlXzE7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS50cnlzLnB1c2goWzAsIDIsICwgM10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgZC5kZXRlY3QoY29uZmlnKV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlhZy5kZWJ1ZyhkLmNvbnN0cnVjdG9yLm5hbWUgKyBcIiBmb3VuZCByZXNvdXJjZS5cIiwgcmVzb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHJlc291cmNlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZV8xID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlhZy5kZWJ1ZyhkLmNvbnN0cnVjdG9yLm5hbWUgKyBcIiBmYWlsZWQ6IFwiICsgZV8xLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIFJlc291cmNlLmVtcHR5KCldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7IH0pKV07XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXMgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIEZ1dHVyZSBjaGVjayBpZiB2ZXJib3NlIGxvZ2dpbmcgaXMgZW5hYmxlZCBpc3N1ZSAjMTkwM1xuICAgICAgICAgICAgICAgICAgICBsb2dSZXNvdXJjZXMocmVzb3VyY2VzKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHJlc291cmNlcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcmVzb3VyY2UpIHsgcmV0dXJuIGFjYy5tZXJnZShyZXNvdXJjZSk7IH0sIFJlc291cmNlLmVtcHR5KCkpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuLyoqXG4gKiBSdW5zIGFsbCByZXNvdXJjZSBkZXRlY3RvcnMgc3luY2hyb25vdXNseSwgbWVyZ2luZyB0aGVpciByZXN1bHRzLiBJbiBjYXNlIG9mIGF0dHJpYnV0ZSBjb2xsaXNpb24gbGF0ZXIgcmVzb3VyY2VzIHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEBwYXJhbSBjb25maWcgQ29uZmlndXJhdGlvbiBmb3IgcmVzb3VyY2UgZGV0ZWN0aW9uXG4gKi9cbnZhciBkZXRlY3RSZXNvdXJjZXNTeW5jID0gZnVuY3Rpb24gKGNvbmZpZykge1xuICAgIHZhciBfYTtcbiAgICBpZiAoY29uZmlnID09PSB2b2lkIDApIHsgY29uZmlnID0ge307IH1cbiAgICB2YXIgcmVzb3VyY2VzID0gKChfYSA9IGNvbmZpZy5kZXRlY3RvcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdKS5tYXAoZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciByZXNvdXJjZU9yUHJvbWlzZV8xID0gZC5kZXRlY3QoY29uZmlnKTtcbiAgICAgICAgICAgIHZhciByZXNvdXJjZV8xO1xuICAgICAgICAgICAgaWYgKGlzUHJvbWlzZUxpa2UocmVzb3VyY2VPclByb21pc2VfMSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgY3JlYXRlUHJvbWlzZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXNvbHZlZFJlc291cmNlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIHJlc291cmNlT3JQcm9taXNlXzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRSZXNvdXJjZSA9IF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgKChfYSA9IHJlc29sdmVkUmVzb3VyY2Uud2FpdEZvckFzeW5jQXR0cmlidXRlcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwocmVzb2x2ZWRSZXNvdXJjZSkpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHJlc29sdmVkUmVzb3VyY2UuYXR0cmlidXRlc107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pOyB9O1xuICAgICAgICAgICAgICAgIHJlc291cmNlXzEgPSBuZXcgUmVzb3VyY2Uoe30sIGNyZWF0ZVByb21pc2UoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZV8xID0gcmVzb3VyY2VPclByb21pc2VfMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXNvdXJjZV8xLndhaXRGb3JBc3luY0F0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICB2b2lkIHJlc291cmNlXzFcbiAgICAgICAgICAgICAgICAgICAgLndhaXRGb3JBc3luY0F0dHJpYnV0ZXMoKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkaWFnLmRlYnVnKGQuY29uc3RydWN0b3IubmFtZSArIFwiIGZvdW5kIHJlc291cmNlLlwiLCByZXNvdXJjZV8xKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpYWcuZGVidWcoZC5jb25zdHJ1Y3Rvci5uYW1lICsgXCIgZm91bmQgcmVzb3VyY2UuXCIsIHJlc291cmNlXzEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc291cmNlXzE7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGRpYWcuZXJyb3IoZC5jb25zdHJ1Y3Rvci5uYW1lICsgXCIgZmFpbGVkOiBcIiArIGUubWVzc2FnZSk7XG4gICAgICAgICAgICByZXR1cm4gUmVzb3VyY2UuZW1wdHkoKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHZhciBtZXJnZWRSZXNvdXJjZXMgPSByZXNvdXJjZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHJlc291cmNlKSB7IHJldHVybiBhY2MubWVyZ2UocmVzb3VyY2UpOyB9LCBSZXNvdXJjZS5lbXB0eSgpKTtcbiAgICBpZiAobWVyZ2VkUmVzb3VyY2VzLndhaXRGb3JBc3luY0F0dHJpYnV0ZXMpIHtcbiAgICAgICAgdm9pZCBtZXJnZWRSZXNvdXJjZXMud2FpdEZvckFzeW5jQXR0cmlidXRlcygpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gRnV0dXJlIGNoZWNrIGlmIHZlcmJvc2UgbG9nZ2luZyBpcyBlbmFibGVkIGlzc3VlICMxOTAzXG4gICAgICAgICAgICBsb2dSZXNvdXJjZXMocmVzb3VyY2VzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBtZXJnZWRSZXNvdXJjZXM7XG59O1xuLyoqXG4gKiBXcml0ZXMgZGVidWcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRldGVjdGVkIHJlc291cmNlcyB0byB0aGUgbG9nZ2VyIGRlZmluZWQgaW4gdGhlIHJlc291cmNlIGRldGVjdGlvbiBjb25maWcsIGlmIG9uZSBpcyBwcm92aWRlZC5cbiAqXG4gKiBAcGFyYW0gcmVzb3VyY2VzIFRoZSBhcnJheSBvZiB7QGxpbmsgUmVzb3VyY2V9IHRoYXQgc2hvdWxkIGJlIGxvZ2dlZC4gRW1wdHkgZW50cmllcyB3aWxsIGJlIGlnbm9yZWQuXG4gKi9cbnZhciBsb2dSZXNvdXJjZXMgPSBmdW5jdGlvbiAocmVzb3VyY2VzKSB7XG4gICAgcmVzb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gICAgICAgIC8vIFByaW50IG9ubHkgcG9wdWxhdGVkIHJlc291cmNlc1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMocmVzb3VyY2UuYXR0cmlidXRlcykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdmFyIHJlc291cmNlRGVidWdTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShyZXNvdXJjZS5hdHRyaWJ1dGVzLCBudWxsLCA0KTtcbiAgICAgICAgICAgIGRpYWcudmVyYm9zZShyZXNvdXJjZURlYnVnU3RyaW5nKTtcbiAgICAgICAgfVxuICAgIH0pO1xufTtcblxuZXhwb3J0IHsgUmVzb3VyY2UsIGJyb3dzZXJEZXRlY3RvciwgYnJvd3NlckRldGVjdG9yU3luYywgZGV0ZWN0UmVzb3VyY2VzLCBkZXRlY3RSZXNvdXJjZXNTeW5jLCBlbnZEZXRlY3RvciwgZW52RGV0ZWN0b3JTeW5jLCBob3N0RGV0ZWN0b3IsIGhvc3REZXRlY3RvclN5bmMsIG9zRGV0ZWN0b3IsIG9zRGV0ZWN0b3JTeW5jLCBwcm9jZXNzRGV0ZWN0b3IsIHByb2Nlc3NEZXRlY3RvclN5bmMsIHNlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3JTeW5jIH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxLQUFLQSxTQUFnQjtBQUM5QixTQUFjLEtBQUxDLFVBQStCO0FBQ3hDLFNBQVMsS0FBS0MsU0FBWTtBQUMxQixTQUFTLEtBQUtDLEdBQWtDLEtBQUtDLEdBQXlDLEtBQUtDLEdBQXFDLEtBQUtDLEdBQVEsS0FBS0MsU0FBZ0M7QUFpQjFMLElBQUlDO0FBQUE7QUFBQSxFQUFrQyxXQUFZO0FBQzlDLGFBQVNBLElBQW1CO0FBQUEsSUFDNUI7QUFDQSxXQUFBQSxFQUFpQixVQUFVLFNBQVMsV0FBWTtBQUM1QyxhQUFPLElBQUlSLEVBQVMsQ0FBQyxDQUFDO0FBQUEsSUFDMUIsR0FDT1E7QUFBQSxFQUNYLEVBQUU7QUFBQSxHQUNFQyxJQUFtQixJQUFJRCxFQUFpQixHQWlCeENFO0FBQUE7QUFBQSxFQUE4QixXQUFZO0FBQzFDLGFBQVNBLElBQWU7QUFBQSxJQUN4QjtBQUNBLFdBQUFBLEVBQWEsVUFBVSxTQUFTLFdBQVk7QUFDeEMsYUFBTyxRQUFRLFFBQVFELEVBQWlCLE9BQU8sQ0FBQztBQUFBLElBQ3BELEdBQ09DO0FBQUEsRUFDWCxFQUFFO0FBQUEsR0FD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RyxFQUFTLENBQUMsR0FBR2lHLEVBQWMsQ0FBQztBQUFBLE1BQ2pEO0FBRUksUUFBQUQsSUFBYUQ7QUFFakIsYUFBSUMsRUFBVyx5QkFDTkEsRUFDQSx1QkFBdUIsRUFDdkIsS0FBSyxXQUFZO0FBQ2xCLGVBQU85RixFQUFLLE1BQU1ELEVBQUUsWUFBWSxPQUFPLG9CQUFvQitGLENBQVU7QUFBQSxNQUN6RSxDQUFDLElBR0Q5RixFQUFLLE1BQU1ELEVBQUUsWUFBWSxPQUFPLG9CQUFvQitGLENBQVUsR0FFM0RBO0FBQUEsSUFDWCxTQUNPckQsR0FBRztBQUNOLGFBQUF6QyxFQUFLLE1BQU1ELEVBQUUsWUFBWSxPQUFPLGNBQWMwQyxFQUFFLE9BQU8sR0FDaEQzQyxFQUFTLE1BQU07QUFBQSxJQUMxQjtBQUFBLEVBQ0osQ0FBQyxHQUNHbUcsSUFBa0JULEVBQVUsT0FBTyxTQUFVRyxHQUFLRixHQUFVO0FBQUUsV0FBT0UsRUFBSSxNQUFNRixDQUFRO0FBQUEsRUFBRyxHQUFHM0YsRUFBUyxNQUFNLENBQUM7QUFDakgsU0FBSW1HLEVBQWdCLDBCQUNYQSxFQUFnQix1QkFBdUIsRUFBRSxLQUFLLFdBQVk7QUFFM0QsSUFBQVAsRUFBYUYsQ0FBUztBQUFBLEVBQzFCLENBQUMsR0FFRVM7QUFDWCxHQU1JUCxJQUFlLFNBQVVGLEdBQVc7QUFDcEMsRUFBQUEsRUFBVSxRQUFRLFNBQVVDLEdBQVU7QUFFbEMsUUFBSSxPQUFPLEtBQUtBLEVBQVMsVUFBVSxFQUFFLFNBQVMsR0FBRztBQUM3QyxVQUFJUyxJQUFzQixLQUFLLFVBQVVULEVBQVMsWUFBWSxNQUFNLENBQUM7QUFDckUsTUFBQXpGLEVBQUssUUFBUWtHLENBQW1CO0FBQUEsSUFDcEM7QUFBQSxFQUNKLENBQUM7QUFDTDsiLAogICJuYW1lcyI6IFsiUmVzb3VyY2UiLCAiZCIsICJkaWFnIiwgIlNFTVJFU0FUVFJTX1BST0NFU1NfUlVOVElNRV9OQU1FIiwgIlNFTVJFU0FUVFJTX1BST0NFU1NfUlVOVElNRV9ERVNDUklQVElPTiIsICJTRU1SRVNBVFRSU19QUk9DRVNTX1JVTlRJTUVfVkVSU0lPTiIsICJnZXRFbnYiLCAiU0VNUkVTQVRUUlNfU0VSVklDRV9OQU1FIiwgIk5vb3BEZXRlY3RvclN5bmMiLCAibm9vcERldGVjdG9yU3luYyIsICJOb29wRGV0ZWN0b3IiLCAibm9vcERldGVjdG9yIiwgImhvc3REZXRlY3RvciIsICJob3N0RGV0ZWN0b3JTeW5jIiwgIm9zRGV0ZWN0b3IiLCAib3NEZXRlY3RvclN5bmMiLCAicHJvY2Vzc0RldGVjdG9yIiwgInByb2Nlc3NEZXRlY3RvclN5bmMiLCAic2VydmljZUluc3RhbmNlSWREZXRlY3RvclN5bmMiLCAiX19hc3NpZ24iLCAidCIsICJzIiwgImkiLCAibiIsICJwIiwgIkJyb3dzZXJEZXRlY3RvclN5bmMiLCAiY29uZmlnIiwgIl9hIiwgIl9iIiwgIl9jIiwgIl9kIiwgImlzQnJvd3NlciIsICJicm93c2VyUmVzb3VyY2UiLCAiX2NvbmZpZyIsICJicm93c2VyRGV0ZWN0b3JTeW5jIiwgIkJyb3dzZXJEZXRlY3RvciIsICJicm93c2VyRGV0ZWN0b3IiLCAiX192YWx1ZXMiLCAibyIsICJtIiwgIl9fcmVhZCIsICJyIiwgImFyIiwgImUiLCAiZXJyb3IiLCAiRW52RGV0ZWN0b3JTeW5jIiwgImF0dHJpYnV0ZXMiLCAiZW52IiwgInJhd0F0dHJpYnV0ZXMiLCAic2VydmljZU5hbWUiLCAicGFyc2VkQXR0cmlidXRlcyIsICJyYXdFbnZBdHRyaWJ1dGVzIiwgImVfMSIsICJyYXdBdHRyaWJ1dGVzXzEiLCAicmF3QXR0cmlidXRlc18xXzEiLCAicmF3QXR0cmlidXRlIiwgImtleVZhbHVlUGFpciIsICJrZXkiLCAidmFsdWUiLCAiZV8xXzEiLCAibmFtZSIsICJzdHIiLCAiY2giLCAiZW52RGV0ZWN0b3JTeW5jIiwgIkVudkRldGVjdG9yIiwgImVudkRldGVjdG9yIiwgImlzUHJvbWlzZUxpa2UiLCAidmFsIiwgIl9fYXdhaXRlciIsICJ0aGlzQXJnIiwgIl9hcmd1bWVudHMiLCAiUCIsICJnZW5lcmF0b3IiLCAiYWRvcHQiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZnVsZmlsbGVkIiwgInN0ZXAiLCAicmVqZWN0ZWQiLCAicmVzdWx0IiwgIl9fZ2VuZXJhdG9yIiwgImJvZHkiLCAiXyIsICJmIiwgInkiLCAiZyIsICJ2ZXJiIiwgInYiLCAib3AiLCAiZGV0ZWN0UmVzb3VyY2VzIiwgInJlc291cmNlcyIsICJyZXNvdXJjZSIsICJsb2dSZXNvdXJjZXMiLCAiYWNjIiwgImRldGVjdFJlc291cmNlc1N5bmMiLCAicmVzb3VyY2VPclByb21pc2VfMSIsICJyZXNvdXJjZV8xIiwgImNyZWF0ZVByb21pc2UiLCAicmVzb2x2ZWRSZXNvdXJjZSIsICJtZXJnZWRSZXNvdXJjZXMiLCAicmVzb3VyY2VEZWJ1Z1N0cmluZyJdCn0K
|