@getopenpay/openpay-js-react 0.5.4 → 0.5.5-alpha.094d93d
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/.tsbuildinfo +1 -1
- package/dist/{Resource-DFFbVGKi-CDOmaO86.js → Resource-BlFiNt1s-zHmNo3I-.js} +3 -3
- package/dist/{SimpleSpanProcessor-C1tmqVnt-UyReHxQn.js → SimpleSpanProcessor-qSMsTFml-m6Uz9W8j.js} +7 -7
- package/dist/{detect-resources-D209lY8u-DJsWH2zW.js → detect-resources-CLMuhAyq-CAxqLRoT.js} +7 -7
- package/dist/{diag-api-BhqoDu5p-BmIx9NpC.js → diag-api-BumtsBPG-BLmrooT7.js} +2 -2
- package/dist/{index-ndl392gu-837MtCn7.js → index-483JcAvC-BlXCKUKz.js} +2 -2
- package/dist/{index-CM8rSN00-DfVrGDFd.js → index-B8vHqN6U-CNlNmKVv.js} +5 -5
- package/dist/{index-Bhpj-r7q-Cewp_xM6.js → index-CAW3kVLb-C3B31rbf.js} +5 -5
- package/dist/{index-DKMlZbAT-BaMooIL3.js → index-Ccc9hN4p-D80PvA_h.js} +5 -5
- package/dist/{index-OfdHd64A-LpjobbwL.js → index-DVc7b-3y-DU9cYylp.js} +6 -6
- package/dist/{index-BiD1fl0z.js → index-DVkYMAt0.js} +104 -104
- package/dist/{index-B1QyVQwB-usZu6lkL.js → index-Di1Lx8Nt-Bif0Asiv.js} +2 -2
- package/dist/{index-BpXWQpIg-BH4pR5_K.js → index-ZSkLm3B3-Pg8OmLGd.js} +6 -6
- package/dist/{index-CKt2gfO2-bo_31Vp5.js → index-iiuWJLn0-CV1Tgasr.js} +2 -2
- package/dist/{index-D9ZmuU6m-DwqAQIt_.js → index-lov-3L_d-DJlHTJS-.js} +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/{metrics-api-BLdNa3zl-8hRhscDc.js → metrics-api-HCNAnwZM-Dh2Ncqh2.js} +2 -2
- package/dist/{sdk-info-CqA-SXuM-DI-zWj4L.js → sdk-info-CXo7OMj6-BR1k0dwb.js} +2 -2
- package/dist/{url-DeNJTAv_-Dz8hGDTr.js → url-S5Q08fQj-DdLf3S7C.js} +2 -2
- package/dist/{utils-o5pYuIi6-DBvzMNEE.js → utils-BJY0Mt8V-CZFvm4qU.js} +4 -4
- package/dist/{utils-BGeURJ6g-CR7cu0vX.js → utils-BeyfWAlL-ByuuoURl.js} +2 -2
- package/package.json +1 -1
|
@@ -48,8 +48,8 @@ var Ni = /* @__PURE__ */ function() {
|
|
|
48
48
|
const I = n.string().trim().min(1, { message: "Please fill in this field" }), k = n.string().trim().optional(), G = (e) => n.nullable(e.optional());
|
|
49
49
|
var R = /* @__PURE__ */ ((e) => (e.FIRST_NAME = "firstName", e.LAST_NAME = "lastName", e.PHONE = "phone", e.EMAIL = "email", e.LINE1 = "line1", e.LINE2 = "line2", e.LINE3 = "line3", e.CITY = "city", e.STATE = "state", e.COUNTRY = "country", e.ZIP_CODE = "zipCode", e.SHIPPING_LINE1 = "shippingAddressLine1", e.SHIPPING_LINE2 = "shippingAddressLine2", e.SHIPPING_LINE3 = "shippingAddressLine3", e.SHIPPING_CITY = "shippingAddressCity", e.SHIPPING_STATE = "shippingAddressState", e.SHIPPING_COUNTRY = "shippingAddressCountry", e.SHIPPING_ZIP_CODE = "shippingAddressZipCode", e.IS_SHIPPING_SAME_AS_BILLING = "isShippingSameAsBilling", e.PROMOTION_CODE = "promotionCode", e))(R || {});
|
|
50
50
|
const Yn = n.nativeEnum(R);
|
|
51
|
-
var
|
|
52
|
-
const
|
|
51
|
+
var Zn = /* @__PURE__ */ ((e) => (e.CARD_NUMBER = "cardNumber", e.CARD_EXPIRY = "cardExpiry", e.CARD_CVC = "cardCvc", e))(Zn || {});
|
|
52
|
+
const Kn = n.nativeEnum(Zn), Ri = n.union([Yn, Kn]);
|
|
53
53
|
var it = /* @__PURE__ */ ((e) => (e.CARD = "card", e.CARD_NUMBER = "card-number", e.CARD_EXPIRY = "card-expiry", e.CARD_CVC = "card-cvc", e.CDE_BRIDGE = "cde-bridge", e))(it || {});
|
|
54
54
|
n.nativeEnum(it);
|
|
55
55
|
const Xt = n.object({
|
|
@@ -99,7 +99,7 @@ const ge = n.enum([
|
|
|
99
99
|
"START_PAYMENT_FLOW"
|
|
100
100
|
]), Mi = ge.extract(["TOKENIZE_STARTED", "CHECKOUT_STARTED"]), Oi = n.object({ type: Mi }), ji = ge.extract(["BLUR", "FOCUS", "CHANGE"]), Di = n.object({
|
|
101
101
|
type: ji,
|
|
102
|
-
elementType:
|
|
102
|
+
elementType: Kn,
|
|
103
103
|
errors: n.array(n.string()).optional(),
|
|
104
104
|
obfuscatedValue: n.string().optional()
|
|
105
105
|
}), Fi = ge.extract(["LOAD_ERROR", "TOKENIZE_ERROR", "CHECKOUT_ERROR"]), Ui = n.object({
|
|
@@ -185,7 +185,7 @@ n.object({
|
|
|
185
185
|
shippingAddressCountry: I,
|
|
186
186
|
shippingAddressZipCode: I
|
|
187
187
|
});
|
|
188
|
-
const Yi = ge.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]),
|
|
188
|
+
const Yi = ge.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), Zi = n.object({
|
|
189
189
|
type: Yi,
|
|
190
190
|
sessionId: I,
|
|
191
191
|
checkoutPaymentMethod: Xt,
|
|
@@ -193,7 +193,7 @@ const Yi = ge.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), Ki = n.ob
|
|
|
193
193
|
doNotUseLegacyCCFlow: n.boolean().optional(),
|
|
194
194
|
existingCCPMId: k,
|
|
195
195
|
paymentRouteId: k
|
|
196
|
-
}).extend(Xe.shape),
|
|
196
|
+
}).extend(Xe.shape), Ki = n.object({
|
|
197
197
|
type: n.literal(ge.enum.TOKENIZE_SUCCESS),
|
|
198
198
|
isReadyForCheckout: n.boolean()
|
|
199
199
|
}), Qi = n.object({
|
|
@@ -208,8 +208,8 @@ const Yi = ge.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), Ki = n.ob
|
|
|
208
208
|
qi,
|
|
209
209
|
Vi,
|
|
210
210
|
$i,
|
|
211
|
-
Ki,
|
|
212
211
|
Zi,
|
|
212
|
+
Ki,
|
|
213
213
|
Qi,
|
|
214
214
|
Hi,
|
|
215
215
|
zi
|
|
@@ -1433,13 +1433,13 @@ function Ba(e) {
|
|
|
1433
1433
|
function Ya(e) {
|
|
1434
1434
|
return Symbol.asyncIterator && B(e == null ? void 0 : e[Symbol.asyncIterator]);
|
|
1435
1435
|
}
|
|
1436
|
-
function
|
|
1436
|
+
function Za(e) {
|
|
1437
1437
|
return new TypeError("You provided " + (e !== null && typeof e == "object" ? "an invalid object" : "'" + e + "'") + " where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.");
|
|
1438
1438
|
}
|
|
1439
|
-
function
|
|
1439
|
+
function Ka() {
|
|
1440
1440
|
return typeof Symbol != "function" || !Symbol.iterator ? "@@iterator" : Symbol.iterator;
|
|
1441
1441
|
}
|
|
1442
|
-
var Qa =
|
|
1442
|
+
var Qa = Ka();
|
|
1443
1443
|
function Ja(e) {
|
|
1444
1444
|
return B(e == null ? void 0 : e[Qa]);
|
|
1445
1445
|
}
|
|
@@ -1494,7 +1494,7 @@ function es(e) {
|
|
|
1494
1494
|
if (Xa(e))
|
|
1495
1495
|
return is(e);
|
|
1496
1496
|
}
|
|
1497
|
-
throw
|
|
1497
|
+
throw Za(e);
|
|
1498
1498
|
}
|
|
1499
1499
|
function ts(e) {
|
|
1500
1500
|
return new Te(function(t) {
|
|
@@ -2295,8 +2295,8 @@ const ve = n.enum([
|
|
|
2295
2295
|
"TOKENIZE",
|
|
2296
2296
|
"CHECKOUT",
|
|
2297
2297
|
"START_PAYMENT_FLOW"
|
|
2298
|
-
]), Ys = ve.extract(["TOKENIZE_STARTED", "CHECKOUT_STARTED"]),
|
|
2299
|
-
type:
|
|
2298
|
+
]), Ys = ve.extract(["TOKENIZE_STARTED", "CHECKOUT_STARTED"]), Zs = n.object({ type: Ys }), Ks = ve.extract(["BLUR", "FOCUS", "CHANGE"]), Qs = n.object({
|
|
2299
|
+
type: Ks,
|
|
2300
2300
|
elementType: mo,
|
|
2301
2301
|
errors: n.array(n.string()).optional(),
|
|
2302
2302
|
obfuscatedValue: n.string().optional()
|
|
@@ -2400,7 +2400,7 @@ const ac = ve.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), sc = n.ob
|
|
|
2400
2400
|
subscriptionIds: n.array(n.string()),
|
|
2401
2401
|
customerId: n.string()
|
|
2402
2402
|
}), uc = n.discriminatedUnion("type", [
|
|
2403
|
-
|
|
2403
|
+
Zs,
|
|
2404
2404
|
Qs,
|
|
2405
2405
|
Ws,
|
|
2406
2406
|
ec,
|
|
@@ -2820,15 +2820,15 @@ const Gc = n.object({}), qc = n.object({
|
|
|
2820
2820
|
} catch {
|
|
2821
2821
|
return !1;
|
|
2822
2822
|
}
|
|
2823
|
-
},
|
|
2823
|
+
}, Zc = (e) => e.length === 1 ? Ar(e[0].msg) : `Please fix the following errors:
|
|
2824
2824
|
${e.map((t) => `• ${Ar(t.msg)}`).join(`
|
|
2825
|
-
`)}`,
|
|
2825
|
+
`)}`, Kc = (e) => `Encountered the following errors:
|
|
2826
2826
|
${e.map((t) => `- ${t.path.join("/")}: ${t.message}`).join(`
|
|
2827
2827
|
`)}`, oe = (e) => {
|
|
2828
2828
|
if (e instanceof Error)
|
|
2829
2829
|
if (Yc(e.message)) {
|
|
2830
2830
|
const t = JSON.parse(e.message);
|
|
2831
|
-
return $c.safeParse(t).success ?
|
|
2831
|
+
return $c.safeParse(t).success ? Zc(t) : zc.safeParse(t).success ? Kc(t) : (console.warn(`Encountered unknown stringified JSON object:
|
|
2832
2832
|
${e.message}`), e.message);
|
|
2833
2833
|
} else
|
|
2834
2834
|
return Ar(e.message);
|
|
@@ -3039,7 +3039,7 @@ function Yt(e, t) {
|
|
|
3039
3039
|
}
|
|
3040
3040
|
return a;
|
|
3041
3041
|
}
|
|
3042
|
-
function
|
|
3042
|
+
function Zt(e, t, r) {
|
|
3043
3043
|
if (arguments.length === 2) for (var o = 0, i = t.length, a; o < i; o++)
|
|
3044
3044
|
(a || !(o in t)) && (a || (a = Array.prototype.slice.call(t, 0, o)), a[o] = t[o]);
|
|
3045
3045
|
return e.concat(a || Array.prototype.slice.call(t));
|
|
@@ -3122,7 +3122,7 @@ var _r = nr(function(e) {
|
|
|
3122
3122
|
`) : "", this.name = "UnsubscriptionError", this.errors = t;
|
|
3123
3123
|
};
|
|
3124
3124
|
});
|
|
3125
|
-
function
|
|
3125
|
+
function Kt(e, t) {
|
|
3126
3126
|
if (e) {
|
|
3127
3127
|
var r = e.indexOf(t);
|
|
3128
3128
|
0 <= r && e.splice(r, 1);
|
|
@@ -3171,7 +3171,7 @@ var Tt = function() {
|
|
|
3171
3171
|
try {
|
|
3172
3172
|
fn(_);
|
|
3173
3173
|
} catch (y) {
|
|
3174
|
-
a = a ?? [], y instanceof _r ? a =
|
|
3174
|
+
a = a ?? [], y instanceof _r ? a = Zt(Zt([], Yt(a)), Yt(y.errors)) : a.push(y);
|
|
3175
3175
|
}
|
|
3176
3176
|
}
|
|
3177
3177
|
} catch (y) {
|
|
@@ -3208,10 +3208,10 @@ var Tt = function() {
|
|
|
3208
3208
|
this._parentage = Array.isArray(r) ? (r.push(t), r) : r ? [r, t] : t;
|
|
3209
3209
|
}, e.prototype._removeParent = function(t) {
|
|
3210
3210
|
var r = this._parentage;
|
|
3211
|
-
r === t ? this._parentage = null : Array.isArray(r) &&
|
|
3211
|
+
r === t ? this._parentage = null : Array.isArray(r) && Kt(r, t);
|
|
3212
3212
|
}, e.prototype.remove = function(t) {
|
|
3213
3213
|
var r = this._finalizers;
|
|
3214
|
-
r &&
|
|
3214
|
+
r && Kt(r, t), t instanceof e && t._removeParent(this);
|
|
3215
3215
|
}, e.EMPTY = function() {
|
|
3216
3216
|
var t = new e();
|
|
3217
3217
|
return t.closed = !0, t;
|
|
@@ -3233,7 +3233,7 @@ var Io = {
|
|
|
3233
3233
|
setTimeout: function(e, t) {
|
|
3234
3234
|
for (var r = [], o = 2; o < arguments.length; o++)
|
|
3235
3235
|
r[o - 2] = arguments[o];
|
|
3236
|
-
return setTimeout.apply(void 0,
|
|
3236
|
+
return setTimeout.apply(void 0, Zt([e, t], Yt(r)));
|
|
3237
3237
|
},
|
|
3238
3238
|
clearTimeout: function(e) {
|
|
3239
3239
|
return clearTimeout(e);
|
|
@@ -3560,7 +3560,7 @@ var hl = function(e) {
|
|
|
3560
3560
|
}, t.prototype._innerSubscribe = function(r) {
|
|
3561
3561
|
var o = this, i = this, a = i.hasError, s = i.isStopped, c = i.observers;
|
|
3562
3562
|
return a || s ? ko : (this.currentObservers = null, c.push(r), new Tt(function() {
|
|
3563
|
-
o.currentObservers = null,
|
|
3563
|
+
o.currentObservers = null, Kt(c, r);
|
|
3564
3564
|
}));
|
|
3565
3565
|
}, t.prototype._checkFinalizedStatuses = function(r) {
|
|
3566
3566
|
var o = this, i = o.hasError, a = o.thrownError, s = o.isStopped;
|
|
@@ -3607,7 +3607,7 @@ var hl = function(e) {
|
|
|
3607
3607
|
setInterval: function(e, t) {
|
|
3608
3608
|
for (var r = [], o = 2; o < arguments.length; o++)
|
|
3609
3609
|
r[o - 2] = arguments[o];
|
|
3610
|
-
return setInterval.apply(void 0,
|
|
3610
|
+
return setInterval.apply(void 0, Zt([e, t], Yt(r)));
|
|
3611
3611
|
},
|
|
3612
3612
|
clearInterval: function(e) {
|
|
3613
3613
|
return clearInterval(e);
|
|
@@ -3652,7 +3652,7 @@ var hl = function(e) {
|
|
|
3652
3652
|
}, t.prototype.unsubscribe = function() {
|
|
3653
3653
|
if (!this.closed) {
|
|
3654
3654
|
var r = this, o = r.id, i = r.scheduler, a = i.actions;
|
|
3655
|
-
this.work = this.state = this.scheduler = null, this.pending = !1,
|
|
3655
|
+
this.work = this.state = this.scheduler = null, this.pending = !1, Kt(a, this), o != null && (this.id = this.recycleAsyncId(i, o, null)), this.delay = null, e.prototype.unsubscribe.call(this);
|
|
3656
3656
|
}
|
|
3657
3657
|
}, t;
|
|
3658
3658
|
}(gl), bn = function() {
|
|
@@ -3973,7 +3973,7 @@ const En = n.enum(["dev", "stg", "prod"]), Yl = {
|
|
|
3973
3973
|
prod: "https://connto.getopenpay.com",
|
|
3974
3974
|
stg: "https://connto.openpaystaging.com",
|
|
3975
3975
|
dev: "http://localhost:8000"
|
|
3976
|
-
},
|
|
3976
|
+
}, Zl = (e) => Yl[e], fr = {}, Ro = async (e) => {
|
|
3977
3977
|
if (fr[e])
|
|
3978
3978
|
return fr[e];
|
|
3979
3979
|
try {
|
|
@@ -3989,7 +3989,7 @@ function or(e) {
|
|
|
3989
3989
|
const ir = (e, t) => Object.fromEntries(Object.entries(e).filter(([r]) => !t.includes(r))), H = () => {
|
|
3990
3990
|
if (!(typeof window > "u"))
|
|
3991
3991
|
return window;
|
|
3992
|
-
}, xr = new vt(), Pn = "op_metrics_queue",
|
|
3992
|
+
}, xr = new vt(), Pn = "op_metrics_queue", Kl = 3, Ql = 3, Jl = 1e3, { log__: Mt } = N("op-metrics");
|
|
3993
3993
|
class Wl {
|
|
3994
3994
|
constructor() {
|
|
3995
3995
|
var t, r;
|
|
@@ -4066,7 +4066,7 @@ class Wl {
|
|
|
4066
4066
|
...s.properties
|
|
4067
4067
|
}
|
|
4068
4068
|
}))
|
|
4069
|
-
}, i =
|
|
4069
|
+
}, i = Zl(t.environment), a = new URL("/metrics/public/capture", i);
|
|
4070
4070
|
(await fetch(a.toString(), {
|
|
4071
4071
|
method: "POST",
|
|
4072
4072
|
headers: {
|
|
@@ -4082,7 +4082,7 @@ class Wl {
|
|
|
4082
4082
|
t.forEach((o) => {
|
|
4083
4083
|
o.attemptCount++;
|
|
4084
4084
|
});
|
|
4085
|
-
const r = t.filter((o) => o.attemptCount <
|
|
4085
|
+
const r = t.filter((o) => o.attemptCount < Kl);
|
|
4086
4086
|
this.queue = this.queue.slice(t.length), this.queue = [...r, ...this.queue], this.saveQueueToStorage();
|
|
4087
4087
|
}
|
|
4088
4088
|
cleanup() {
|
|
@@ -4755,7 +4755,7 @@ const J = async (e, t, r, o) => zu(e, t, async () => {
|
|
|
4755
4755
|
return o && v(o, {
|
|
4756
4756
|
...i
|
|
4757
4757
|
}), i;
|
|
4758
|
-
}), Bu = (e, t) => t.safeParse(e).success, Yu = (e) => Pc.safeParse(e).success,
|
|
4758
|
+
}), Bu = (e, t) => t.safeParse(e).success, Yu = (e) => Pc.safeParse(e).success, Zu = async (e, t) => await J(e, { type: "get_checkout_preview", payload: t }, vo), F = async (e) => await J(e, { type: "get_prefill", payload: {} }, wo), ce = async (e, t) => await J(
|
|
4759
4759
|
e,
|
|
4760
4760
|
{ type: "v2_start_payment_flow", payload: t },
|
|
4761
4761
|
Po,
|
|
@@ -4765,7 +4765,7 @@ const J = async (e, t, r, o) => zu(e, t, async () => {
|
|
|
4765
4765
|
{ type: "start_payment_flow_for_cc", payload: t },
|
|
4766
4766
|
Dc,
|
|
4767
4767
|
"start_payment_flow_for_cc"
|
|
4768
|
-
),
|
|
4768
|
+
), Ku = async (e, t) => {
|
|
4769
4769
|
v("start_payment_flow_for_pr", {
|
|
4770
4770
|
...t
|
|
4771
4771
|
});
|
|
@@ -4789,7 +4789,7 @@ const J = async (e, t, r, o) => zu(e, t, async () => {
|
|
|
4789
4789
|
gc,
|
|
4790
4790
|
"check_if_popup_window_verified"
|
|
4791
4791
|
), Wu = async (e, t, r) => {
|
|
4792
|
-
const o = await
|
|
4792
|
+
const o = await Zu(e, {
|
|
4793
4793
|
secure_token: t,
|
|
4794
4794
|
promotion_code: r
|
|
4795
4795
|
}), i = new Set(o.preview.invoices.map((c) => c.currency));
|
|
@@ -4915,15 +4915,15 @@ function dd(e, t) {
|
|
|
4915
4915
|
const r = ad(), o = Date.now();
|
|
4916
4916
|
return ld(o, Yo) + cd(od, r);
|
|
4917
4917
|
}
|
|
4918
|
-
const
|
|
4919
|
-
const e = document.cookie.split(";").find((r) => r.includes(
|
|
4918
|
+
const Zo = "op_analytics_device_token", Ko = () => {
|
|
4919
|
+
const e = document.cookie.split(";").find((r) => r.includes(Zo));
|
|
4920
4920
|
if (e)
|
|
4921
4921
|
return e.split("=")[1];
|
|
4922
4922
|
const t = dd();
|
|
4923
4923
|
return pd(t), t;
|
|
4924
4924
|
}, pd = (e) => {
|
|
4925
4925
|
const t = /* @__PURE__ */ new Date();
|
|
4926
|
-
t.setFullYear(t.getFullYear() + 1), document.cookie = `${
|
|
4926
|
+
t.setFullYear(t.getFullYear() + 1), document.cookie = `${Zo}=${e}; path=/; expires=${t.toUTCString()}`;
|
|
4927
4927
|
}, md = (e) => {
|
|
4928
4928
|
const t = {};
|
|
4929
4929
|
return Object.entries(e).forEach(([r, o]) => {
|
|
@@ -5307,7 +5307,7 @@ const Wo = async (e) => {
|
|
|
5307
5307
|
throw Ed("Got validation errors in non-CDE form fields", a), new Error("Almost there! Just a few things highlighted above to fix before you can submit.");
|
|
5308
5308
|
}
|
|
5309
5309
|
return o.data;
|
|
5310
|
-
}, { log__: Cd, err__: kd } = N("common-cc"),
|
|
5310
|
+
}, { log__: Cd, err__: kd } = N("common-cc"), Z = Sd, ei = (e, t) => {
|
|
5311
5311
|
for (const r of e)
|
|
5312
5312
|
if (r.success === !1)
|
|
5313
5313
|
throw r.errors.forEach((o) => {
|
|
@@ -5323,7 +5323,7 @@ const Wo = async (e) => {
|
|
|
5323
5323
|
if (e.payment_methods.length !== 1)
|
|
5324
5324
|
throw new Error(`Expected exactly one payment method, got ${e.payment_methods.length}`);
|
|
5325
5325
|
return { payment_method_id: e.payment_methods[0].id };
|
|
5326
|
-
},
|
|
5326
|
+
}, K = (e, t) => {
|
|
5327
5327
|
const r = e.find((o) => t.safeParse(o).success);
|
|
5328
5328
|
if (!r)
|
|
5329
5329
|
throw ti("No CPMs found for model. All models:", e), new Error("No CPMs found for model");
|
|
@@ -5442,7 +5442,7 @@ const ri = ({
|
|
|
5442
5442
|
}
|
|
5443
5443
|
};
|
|
5444
5444
|
return a != null && a.googlePayPaymentRequest ? typeof a.googlePayPaymentRequest == "function" ? { ...h, ...a.googlePayPaymentRequest(h) } : { ...h, ...a.googlePayPaymentRequest } : h;
|
|
5445
|
-
},
|
|
5445
|
+
}, Zr = () => ri({
|
|
5446
5446
|
scriptId: "__op_internal_google_pay_sdk",
|
|
5447
5447
|
src: "https://pay.google.com/gp/p/js/pay.js",
|
|
5448
5448
|
checkLoadedFn: () => {
|
|
@@ -5451,8 +5451,8 @@ const ri = ({
|
|
|
5451
5451
|
}
|
|
5452
5452
|
});
|
|
5453
5453
|
let wr = null;
|
|
5454
|
-
const
|
|
5455
|
-
const r = await
|
|
5454
|
+
const Kr = async (e) => await Ro(e) === "prod" ? "PRODUCTION" : "TEST", lt = async (e, t) => {
|
|
5455
|
+
const r = await Kr(e);
|
|
5456
5456
|
return wr === null && (wr = new window.google.payments.api.PaymentsClient({
|
|
5457
5457
|
environment: r,
|
|
5458
5458
|
merchantInfo: t.merchantInfo
|
|
@@ -5479,7 +5479,7 @@ const Zr = async (e) => await Ro(e) === "prod" ? "PRODUCTION" : "TEST", lt = asy
|
|
|
5479
5479
|
customParams: i
|
|
5480
5480
|
}) => {
|
|
5481
5481
|
var a, s;
|
|
5482
|
-
const c =
|
|
5482
|
+
const c = Z(r, o.get.onValidationError), l = e.anyCdeConnection, u = await F(l), d = i.verificationMethod ?? "truelayer", f = await ce(l, {
|
|
5483
5483
|
payment_provider: t.provider,
|
|
5484
5484
|
checkout_payment_method: t,
|
|
5485
5485
|
new_customer_email: c[m.EMAIL],
|
|
@@ -5571,7 +5571,7 @@ const Zr = async (e) => await Ro(e) === "prod" ? "PRODUCTION" : "TEST", lt = asy
|
|
|
5571
5571
|
customParams: i
|
|
5572
5572
|
}) => {
|
|
5573
5573
|
var a, s;
|
|
5574
|
-
const c =
|
|
5574
|
+
const c = Z(r, o.get.onValidationError), l = e.anyCdeConnection, u = await F(l), d = i.verificationMethod ?? "plaid", f = await ce(l, {
|
|
5575
5575
|
payment_provider: t.provider,
|
|
5576
5576
|
checkout_payment_method: t,
|
|
5577
5577
|
new_customer_email: c[m.EMAIL],
|
|
@@ -5649,7 +5649,7 @@ const Zr = async (e) => await Ro(e) === "prod" ? "PRODUCTION" : "TEST", lt = asy
|
|
|
5649
5649
|
customParams: i
|
|
5650
5650
|
}) => {
|
|
5651
5651
|
var a, s;
|
|
5652
|
-
const c =
|
|
5652
|
+
const c = Z(r, o.get.onValidationError), l = e.anyCdeConnection, u = await F(l), d = i.verificationMethod ?? "truelayer", f = await ce(l, {
|
|
5653
5653
|
payment_provider: t.provider,
|
|
5654
5654
|
checkout_payment_method: t,
|
|
5655
5655
|
new_customer_email: c[m.EMAIL],
|
|
@@ -6014,7 +6014,7 @@ const Dd = ({
|
|
|
6014
6014
|
google_pay_merchant_id: n.string().nullish()
|
|
6015
6015
|
})
|
|
6016
6016
|
}), { log__: Yd } = N("awx-apple-pay");
|
|
6017
|
-
async function
|
|
6017
|
+
async function Zd(e, t) {
|
|
6018
6018
|
try {
|
|
6019
6019
|
const r = (await cr(t.connection, {
|
|
6020
6020
|
checkout_payment_method: t.checkoutPaymentMethod,
|
|
@@ -6035,10 +6035,10 @@ async function Kd(e, t) {
|
|
|
6035
6035
|
throw t.session.abort(), r;
|
|
6036
6036
|
}
|
|
6037
6037
|
}
|
|
6038
|
-
async function
|
|
6038
|
+
async function Kd(e, t) {
|
|
6039
6039
|
var r, o;
|
|
6040
6040
|
try {
|
|
6041
|
-
const i = e.payment, a = Xr(t.nonCdeFormInputs, i), s =
|
|
6041
|
+
const i = e.payment, a = Xr(t.nonCdeFormInputs, i), s = Z(
|
|
6042
6042
|
a,
|
|
6043
6043
|
t.formCallbacks.get.onValidationError,
|
|
6044
6044
|
t.defaultFieldValues
|
|
@@ -6095,7 +6095,7 @@ const { log__: ft, err__: pi } = N("adyen-apple-pay"), Qd = Ne(
|
|
|
6095
6095
|
isLoading: !1,
|
|
6096
6096
|
startFlow: async () => {
|
|
6097
6097
|
}
|
|
6098
|
-
}, o =
|
|
6098
|
+
}, o = K(e.checkoutPaymentMethods, ui);
|
|
6099
6099
|
if (!o)
|
|
6100
6100
|
return r;
|
|
6101
6101
|
if (ft("Loading Apple Pay script"), await Wr(), !window.ApplePaySession || !ApplePaySession.canMakePayments())
|
|
@@ -6137,7 +6137,7 @@ const { log__: ft, err__: pi } = N("adyen-apple-pay"), Qd = Ne(
|
|
|
6137
6137
|
formCallbacks: i
|
|
6138
6138
|
}) => {
|
|
6139
6139
|
var a;
|
|
6140
|
-
const s =
|
|
6140
|
+
const s = K(e.checkoutPaymentMethods, ui), { overridePaymentRequest: c, initialPreview: l } = o, u = e.anyCdeConnection, d = await F(u), f = d.mode === "setup", h = en({
|
|
6141
6141
|
overridePaymentRequest: c,
|
|
6142
6142
|
initialPreview: l,
|
|
6143
6143
|
prefill: {
|
|
@@ -6166,7 +6166,7 @@ const { log__: ft, err__: pi } = N("adyen-apple-pay"), Qd = Ne(
|
|
|
6166
6166
|
};
|
|
6167
6167
|
p.onvalidatemerchant = async (b) => {
|
|
6168
6168
|
try {
|
|
6169
|
-
await
|
|
6169
|
+
await Zd(b, _);
|
|
6170
6170
|
} catch (E) {
|
|
6171
6171
|
g(E);
|
|
6172
6172
|
}
|
|
@@ -6178,7 +6178,7 @@ const { log__: ft, err__: pi } = N("adyen-apple-pay"), Qd = Ne(
|
|
|
6178
6178
|
}, p.onpaymentauthorized = async (b) => {
|
|
6179
6179
|
v("apple_pay_payment_authorized");
|
|
6180
6180
|
try {
|
|
6181
|
-
const E = await
|
|
6181
|
+
const E = await Kd(b, _);
|
|
6182
6182
|
y(E);
|
|
6183
6183
|
} catch (E) {
|
|
6184
6184
|
g(E);
|
|
@@ -6199,16 +6199,16 @@ const { log__: ft, err__: pi } = N("adyen-apple-pay"), Qd = Ne(
|
|
|
6199
6199
|
isLoading: !1,
|
|
6200
6200
|
startFlow: async () => {
|
|
6201
6201
|
}
|
|
6202
|
-
}, a =
|
|
6202
|
+
}, a = K(e.checkoutPaymentMethods, di);
|
|
6203
6203
|
if (!a)
|
|
6204
6204
|
return i;
|
|
6205
6205
|
fe("Google Pay CPM", a);
|
|
6206
6206
|
const s = a.metadata;
|
|
6207
6207
|
if (!s.processor_account_id)
|
|
6208
6208
|
return Be("No gateway merchant ID found in processor account"), i;
|
|
6209
|
-
if (fe("Loading Google Pay script"), await
|
|
6209
|
+
if (fe("Loading Google Pay script"), await Zr(), !((o = (r = window.google) == null ? void 0 : r.payments) != null && o.api))
|
|
6210
6210
|
return Be("Google Pay SDK not loaded properly"), i;
|
|
6211
|
-
if (await
|
|
6211
|
+
if (await Kr(e.baseUrl) === "PRODUCTION" && !s.google_pay_merchant_id)
|
|
6212
6212
|
return Be("Google Pay merchant ID is required for production environment"), i;
|
|
6213
6213
|
fe("Google Pay SDK loaded", window.google.payments);
|
|
6214
6214
|
const c = e.anyCdeConnection, l = await F(c);
|
|
@@ -6264,7 +6264,7 @@ const { log__: ft, err__: pi } = N("adyen-apple-pay"), Qd = Ne(
|
|
|
6264
6264
|
}) => {
|
|
6265
6265
|
var a, s, c, l, u, d, f, h, p;
|
|
6266
6266
|
fe("Starting Google Pay flow...");
|
|
6267
|
-
const _ =
|
|
6267
|
+
const _ = K(e.checkoutPaymentMethods, di), { initialPreview: y, overridePaymentRequest: g } = i, w = _.metadata;
|
|
6268
6268
|
if (!w.processor_account_id)
|
|
6269
6269
|
throw new Error("No gateway merchant ID found in processor account");
|
|
6270
6270
|
const b = e.anyCdeConnection, E = await F(b), M = ct({
|
|
@@ -6285,7 +6285,7 @@ const { log__: ft, err__: pi } = N("adyen-apple-pay"), Qd = Ne(
|
|
|
6285
6285
|
try {
|
|
6286
6286
|
const x = await C.loadPaymentData(M);
|
|
6287
6287
|
fe("Google Pay Payment data", x);
|
|
6288
|
-
const W = Qr(r, x), le =
|
|
6288
|
+
const W = Qr(r, x), le = Z(
|
|
6289
6289
|
W,
|
|
6290
6290
|
o.get.onValidationError,
|
|
6291
6291
|
i == null ? void 0 : i.defaultFieldValues
|
|
@@ -6359,7 +6359,7 @@ const { log__: ft, err__: pi } = N("adyen-apple-pay"), Qd = Ne(
|
|
|
6359
6359
|
customParams: i
|
|
6360
6360
|
}) => {
|
|
6361
6361
|
var a, s;
|
|
6362
|
-
const c =
|
|
6362
|
+
const c = Z(r, o.get.onValidationError), l = e.anyCdeConnection, u = await F(l), d = i.verificationMethod ?? "plaid", f = await ce(l, {
|
|
6363
6363
|
payment_provider: t.provider,
|
|
6364
6364
|
checkout_payment_method: t,
|
|
6365
6365
|
new_customer_email: c[m.EMAIL],
|
|
@@ -6473,7 +6473,7 @@ async function np(e, t) {
|
|
|
6473
6473
|
async function op(e, t) {
|
|
6474
6474
|
var r, o, i, a, s;
|
|
6475
6475
|
try {
|
|
6476
|
-
const c = e.payment, l = Xr(t.nonCdeFormInputs, c), u =
|
|
6476
|
+
const c = e.payment, l = Xr(t.nonCdeFormInputs, c), u = Z(
|
|
6477
6477
|
l,
|
|
6478
6478
|
t.formCallbacks.get.onValidationError,
|
|
6479
6479
|
t.defaultFieldValues
|
|
@@ -6543,7 +6543,7 @@ const { log__: yt, err__: mi } = N("awx-apple-pay"), ip = Ne(
|
|
|
6543
6543
|
isLoading: !1,
|
|
6544
6544
|
startFlow: async () => {
|
|
6545
6545
|
}
|
|
6546
|
-
}, o =
|
|
6546
|
+
}, o = K(e.checkoutPaymentMethods, ii);
|
|
6547
6547
|
if (!o)
|
|
6548
6548
|
return r;
|
|
6549
6549
|
if (yt("Loading Apple Pay script"), await Wr(), !window.ApplePaySession || !ApplePaySession.canMakePayments())
|
|
@@ -6585,7 +6585,7 @@ const { log__: yt, err__: mi } = N("awx-apple-pay"), ip = Ne(
|
|
|
6585
6585
|
formCallbacks: i
|
|
6586
6586
|
}) => {
|
|
6587
6587
|
var a;
|
|
6588
|
-
const s =
|
|
6588
|
+
const s = K(e.checkoutPaymentMethods, ii), { overridePaymentRequest: c, initialPreview: l } = o, u = e.anyCdeConnection, d = await F(u), f = d.mode === "setup", h = en({
|
|
6589
6589
|
overridePaymentRequest: c,
|
|
6590
6590
|
initialPreview: l,
|
|
6591
6591
|
prefill: {
|
|
@@ -6647,16 +6647,16 @@ const { log__: yt, err__: mi } = N("awx-apple-pay"), ip = Ne(
|
|
|
6647
6647
|
isLoading: !1,
|
|
6648
6648
|
startFlow: async () => {
|
|
6649
6649
|
}
|
|
6650
|
-
}, a =
|
|
6650
|
+
}, a = K(e.checkoutPaymentMethods, ai);
|
|
6651
6651
|
if (!a)
|
|
6652
6652
|
return i;
|
|
6653
6653
|
se("Google Pay CPM", a);
|
|
6654
6654
|
const s = a.metadata;
|
|
6655
6655
|
if (!s.processor_account_id)
|
|
6656
6656
|
return Ye("No gateway merchant ID found in processor account"), i;
|
|
6657
|
-
if (se("Loading Google Pay script"), await
|
|
6657
|
+
if (se("Loading Google Pay script"), await Zr(), !((o = (r = window.google) == null ? void 0 : r.payments) != null && o.api))
|
|
6658
6658
|
return Ye("Google Pay SDK not loaded properly"), i;
|
|
6659
|
-
if (await
|
|
6659
|
+
if (await Kr(e.baseUrl) === "PRODUCTION" && !s.google_pay_merchant_id)
|
|
6660
6660
|
return Ye("Google Pay merchant ID is required for production environment"), i;
|
|
6661
6661
|
se("Google Pay SDK loaded", window.google.payments);
|
|
6662
6662
|
const c = e.anyCdeConnection, l = await F(c);
|
|
@@ -6712,7 +6712,7 @@ const { log__: yt, err__: mi } = N("awx-apple-pay"), ip = Ne(
|
|
|
6712
6712
|
}) => {
|
|
6713
6713
|
var a, s, c, l, u, d, f;
|
|
6714
6714
|
se("Starting Google Pay flow...");
|
|
6715
|
-
const h =
|
|
6715
|
+
const h = K(e.checkoutPaymentMethods, ai), { initialPreview: p, overridePaymentRequest: _ } = i, y = h.metadata;
|
|
6716
6716
|
if (!y.processor_account_id)
|
|
6717
6717
|
throw new Error("No gateway merchant ID found in processor account");
|
|
6718
6718
|
const g = e.anyCdeConnection, w = await F(g), b = ct({
|
|
@@ -6733,7 +6733,7 @@ const { log__: yt, err__: mi } = N("awx-apple-pay"), ip = Ne(
|
|
|
6733
6733
|
try {
|
|
6734
6734
|
const M = await E.loadPaymentData(b);
|
|
6735
6735
|
se("Google Pay Payment data", M);
|
|
6736
|
-
const C = Qr(r, M), x =
|
|
6736
|
+
const C = Qr(r, M), x = Z(
|
|
6737
6737
|
C,
|
|
6738
6738
|
o.get.onValidationError,
|
|
6739
6739
|
i == null ? void 0 : i.defaultFieldValues
|
|
@@ -6849,7 +6849,7 @@ async function lp(e, t) {
|
|
|
6849
6849
|
async function up(e, t) {
|
|
6850
6850
|
var r, o;
|
|
6851
6851
|
try {
|
|
6852
|
-
const i = e.payment, a = Xr(t.nonCdeFormInputs, i), s =
|
|
6852
|
+
const i = e.payment, a = Xr(t.nonCdeFormInputs, i), s = Z(a, t.formCallbacks.get.onValidationError);
|
|
6853
6853
|
v("billing_details_received", {
|
|
6854
6854
|
...s
|
|
6855
6855
|
}), await ce(t.connection, {
|
|
@@ -6903,7 +6903,7 @@ const { log__: Ut, err__: fi } = N("authnet-applepay"), dp = Ne(
|
|
|
6903
6903
|
isLoading: !1,
|
|
6904
6904
|
startFlow: async () => {
|
|
6905
6905
|
}
|
|
6906
|
-
}, o =
|
|
6906
|
+
}, o = K(e.checkoutPaymentMethods, _i);
|
|
6907
6907
|
if (!o)
|
|
6908
6908
|
return r;
|
|
6909
6909
|
if (Ut("Loading Apple Pay script"), await Wr(), !window.ApplePaySession || !ApplePaySession.canMakePayments())
|
|
@@ -6947,7 +6947,7 @@ const { log__: Ut, err__: fi } = N("authnet-applepay"), dp = Ne(
|
|
|
6947
6947
|
formCallbacks: i
|
|
6948
6948
|
}) => {
|
|
6949
6949
|
var a;
|
|
6950
|
-
const { initialPreview: s, overridePaymentRequest: c } = o, l =
|
|
6950
|
+
const { initialPreview: s, overridePaymentRequest: c } = o, l = K(e.checkoutPaymentMethods, _i), u = e.anyCdeConnection, d = await F(u), f = d.mode === "setup", h = en({
|
|
6951
6951
|
overridePaymentRequest: c,
|
|
6952
6952
|
initialPreview: s,
|
|
6953
6953
|
prefill: d,
|
|
@@ -7008,14 +7008,14 @@ const { log__: Ut, err__: fi } = N("authnet-applepay"), dp = Ne(
|
|
|
7008
7008
|
isLoading: !1,
|
|
7009
7009
|
startFlow: async () => {
|
|
7010
7010
|
}
|
|
7011
|
-
}, a =
|
|
7011
|
+
}, a = K(e.checkoutPaymentMethods, hi);
|
|
7012
7012
|
if (!a)
|
|
7013
7013
|
return i;
|
|
7014
7014
|
qe("Google Pay CPM", a);
|
|
7015
7015
|
const s = a.metadata;
|
|
7016
7016
|
if (!s.processor_account_id)
|
|
7017
7017
|
return gt("No gateway merchant ID found in processor account"), i;
|
|
7018
|
-
if (qe("Loading Google Pay script"), await
|
|
7018
|
+
if (qe("Loading Google Pay script"), await Zr(), !((o = (r = window.google) == null ? void 0 : r.payments) != null && o.api))
|
|
7019
7019
|
return gt("Google Pay SDK not loaded properly"), i;
|
|
7020
7020
|
qe("Google Pay SDK loaded", window.google.payments);
|
|
7021
7021
|
const c = e.anyCdeConnection, l = await F(c);
|
|
@@ -7072,7 +7072,7 @@ const { log__: Ut, err__: fi } = N("authnet-applepay"), dp = Ne(
|
|
|
7072
7072
|
customParams: i
|
|
7073
7073
|
}) => {
|
|
7074
7074
|
var a, s, c, l;
|
|
7075
|
-
const { initialPreview: u, overridePaymentRequest: d } = i, f =
|
|
7075
|
+
const { initialPreview: u, overridePaymentRequest: d } = i, f = K(e.checkoutPaymentMethods, hi).metadata, h = e.anyCdeConnection, p = await F(h), _ = ct({
|
|
7076
7076
|
prefill: p,
|
|
7077
7077
|
gateway: "authorizenet",
|
|
7078
7078
|
gatewayMerchantId: f.processor_account_id,
|
|
@@ -7090,7 +7090,7 @@ const { log__: Ut, err__: fi } = N("authnet-applepay"), dp = Ne(
|
|
|
7090
7090
|
try {
|
|
7091
7091
|
const g = await y.loadPaymentData(_);
|
|
7092
7092
|
qe("Google Pay Payment data", g);
|
|
7093
|
-
const w = Qr(t, g), b =
|
|
7093
|
+
const w = Qr(t, g), b = Z(w, o.get.onValidationError);
|
|
7094
7094
|
v("billing_details_received", {
|
|
7095
7095
|
...b
|
|
7096
7096
|
});
|
|
@@ -7192,14 +7192,14 @@ Error: ${oe(t)}`), new Error(r);
|
|
|
7192
7192
|
He("├ Running unified CC flow...", { checkoutPaymentMethod: t });
|
|
7193
7193
|
const a = e.anyCdeConnection, s = await F(a);
|
|
7194
7194
|
He(`├ Validating non-CDE form fields [Mode: ${s.mode}]`);
|
|
7195
|
-
const c =
|
|
7195
|
+
const c = Z(r, o.get.onValidationError), l = {
|
|
7196
7196
|
session_id: e.elementsSessionId,
|
|
7197
7197
|
checkout_payment_method: t,
|
|
7198
7198
|
non_cde_form_fields: c,
|
|
7199
7199
|
extra_metadata: {
|
|
7200
7200
|
origin: window.location.origin,
|
|
7201
7201
|
// For debugging purposes in the checkout attempt logs
|
|
7202
|
-
deviceToken:
|
|
7202
|
+
deviceToken: Ko()
|
|
7203
7203
|
},
|
|
7204
7204
|
use_unified_cc_flow: !0,
|
|
7205
7205
|
pay_first_flow_cart_info: {
|
|
@@ -7357,7 +7357,7 @@ const Ip = Q(
|
|
|
7357
7357
|
initResult: void 0
|
|
7358
7358
|
});
|
|
7359
7359
|
j(`├ Picked legacy CC flow (${d} vs ${u})`), v("legacy_cc_flow_picked", h), j(`├ Validating non-CDE form fields [Mode: ${l.mode}]`);
|
|
7360
|
-
const p =
|
|
7360
|
+
const p = Z(
|
|
7361
7361
|
r,
|
|
7362
7362
|
o.get.onValidationError,
|
|
7363
7363
|
l.checkout_settings
|
|
@@ -7483,7 +7483,7 @@ const Ip = Q(
|
|
|
7483
7483
|
}), { log__: X, err__: Rp } = N("loop-crypto"), Lp = Ne(
|
|
7484
7484
|
async ({ context: e }) => {
|
|
7485
7485
|
X("Checking if there are any CPMs for Loop Crypto...");
|
|
7486
|
-
const t =
|
|
7486
|
+
const t = K(e.checkoutPaymentMethods, Np);
|
|
7487
7487
|
X(`checkoutPaymentMethod: ${JSON.stringify(t)}`), X("Starting Loop Crypto flow...");
|
|
7488
7488
|
const r = await F(e.anyCdeConnection), o = r.mode === "setup", i = await cr(e.anyCdeConnection, {
|
|
7489
7489
|
checkout_payment_method: t
|
|
@@ -7511,7 +7511,7 @@ const Ip = Q(
|
|
|
7511
7511
|
minAuthorizationUsdAmount: l,
|
|
7512
7512
|
allowCustomerToChooseAuth: u
|
|
7513
7513
|
}, _ = {
|
|
7514
|
-
|
|
7514
|
+
apiToken: t.metadata.api_token,
|
|
7515
7515
|
entityId: t.metadata.entity_id,
|
|
7516
7516
|
merchantId: t.metadata.merchant_id,
|
|
7517
7517
|
environment: t.metadata.environment
|
|
@@ -7533,7 +7533,7 @@ const Ip = Q(
|
|
|
7533
7533
|
X("Running Loop flow..."), X("context", e), X("checkoutPaymentMethod", t), X("nonCdeFormInputs", r), X("flowCallbacks", o), X("customParams", i);
|
|
7534
7534
|
const a = await F(e.anyCdeConnection);
|
|
7535
7535
|
X(`├ Validating non-CDE form fields [Mode: ${a.mode}]`);
|
|
7536
|
-
const s =
|
|
7536
|
+
const s = Z(
|
|
7537
7537
|
r,
|
|
7538
7538
|
o.get.onValidationError,
|
|
7539
7539
|
a.checkout_settings
|
|
@@ -7583,7 +7583,7 @@ const Ip = Q(
|
|
|
7583
7583
|
metadata: n.object({ client_id: n.string() }),
|
|
7584
7584
|
processor_name: n.literal("paypal")
|
|
7585
7585
|
}), jp = async ({ context: e, formCallbacks: t }) => {
|
|
7586
|
-
const r =
|
|
7586
|
+
const r = K(e.checkoutPaymentMethods, Pi);
|
|
7587
7587
|
if (!r)
|
|
7588
7588
|
throw new Error("PayPal CPM not found in available payment methods");
|
|
7589
7589
|
return {
|
|
@@ -7612,7 +7612,7 @@ const Ip = Q(
|
|
|
7612
7612
|
Ue("Verifying CPM...");
|
|
7613
7613
|
const u = Pi.parse(r);
|
|
7614
7614
|
Ue("├ Validating non-CDE form fields");
|
|
7615
|
-
const d =
|
|
7615
|
+
const d = Z(t, o.get.onValidationError, {
|
|
7616
7616
|
...c ? hd() : void 0,
|
|
7617
7617
|
...s.checkout_settings
|
|
7618
7618
|
}), f = Yr(d, s.checkout_settings);
|
|
@@ -7672,7 +7672,7 @@ n.array(
|
|
|
7672
7672
|
})
|
|
7673
7673
|
).length(1);
|
|
7674
7674
|
const Fp = async ({ context: e, formCallbacks: t }) => {
|
|
7675
|
-
const r =
|
|
7675
|
+
const r = K(e.checkoutPaymentMethods, Si);
|
|
7676
7676
|
if (!r)
|
|
7677
7677
|
throw new Error("Pockyt PayPal CPM not found in available payment methods");
|
|
7678
7678
|
return {
|
|
@@ -7701,7 +7701,7 @@ const Fp = async ({ context: e, formCallbacks: t }) => {
|
|
|
7701
7701
|
Ee("Verifying CPM...");
|
|
7702
7702
|
const u = Si.parse(t);
|
|
7703
7703
|
Ee("├ Validating non-CDE form fields");
|
|
7704
|
-
const d = i == null ? void 0 : i.settings, f =
|
|
7704
|
+
const d = i == null ? void 0 : i.settings, f = Z(
|
|
7705
7705
|
r,
|
|
7706
7706
|
o.get.onValidationError,
|
|
7707
7707
|
d == null ? void 0 : d.defaultFieldValues
|
|
@@ -7772,7 +7772,7 @@ const Fp = async ({ context: e, formCallbacks: t }) => {
|
|
|
7772
7772
|
async ({ context: e, formCallbacks: t }) => {
|
|
7773
7773
|
const r = e.customInitParams.stripeLink;
|
|
7774
7774
|
z("Checking if there are any CPMs for Stripe Link...");
|
|
7775
|
-
const o =
|
|
7775
|
+
const o = K(e.checkoutPaymentMethods, qp);
|
|
7776
7776
|
z("Starting stripe link flow...");
|
|
7777
7777
|
const i = e.anyCdeConnection, a = await F(i), s = a.mode === "setup";
|
|
7778
7778
|
z("Creating stripe elements...");
|
|
@@ -7838,7 +7838,7 @@ const Fp = async ({ context: e, formCallbacks: t }) => {
|
|
|
7838
7838
|
z("Running Stripe Link flow...");
|
|
7839
7839
|
const a = e.anyCdeConnection, s = await F(a);
|
|
7840
7840
|
z("Merging PM fields with form fields...");
|
|
7841
|
-
const c = zp(r, i.stripePM), l =
|
|
7841
|
+
const c = zp(r, i.stripePM), l = Z(c, o.get.onValidationError);
|
|
7842
7842
|
v("billing_details_received", {
|
|
7843
7843
|
...l
|
|
7844
7844
|
}), z("Starting payment flow...");
|
|
@@ -7896,16 +7896,16 @@ const Fp = async ({ context: e, formCallbacks: t }) => {
|
|
|
7896
7896
|
o ? t(o) : requestAnimationFrame(r);
|
|
7897
7897
|
};
|
|
7898
7898
|
r();
|
|
7899
|
-
}), { log__: ee, err__: Yp } = N("stripe-pr"),
|
|
7899
|
+
}), { log__: ee, err__: Yp } = N("stripe-pr"), Zp = n.object({
|
|
7900
7900
|
provider: n.union([n.literal("apple_pay"), n.literal("google_pay")]),
|
|
7901
7901
|
processor_name: n.literal("stripe"),
|
|
7902
7902
|
metadata: n.object({
|
|
7903
7903
|
stripe_pk: n.string()
|
|
7904
7904
|
})
|
|
7905
|
-
}),
|
|
7905
|
+
}), Kp = Ne(
|
|
7906
7906
|
async ({ context: e, formCallbacks: t }) => {
|
|
7907
7907
|
ee("Checking if there are any CPMs for Stripe PR...");
|
|
7908
|
-
const r =
|
|
7908
|
+
const r = K(e.checkoutPaymentMethods, Zp);
|
|
7909
7909
|
ee("Initializing Stripe PR flow...");
|
|
7910
7910
|
const o = e.anyCdeConnection, i = await F(o), a = i.mode === "setup";
|
|
7911
7911
|
ee("Getting initial preview amount");
|
|
@@ -7966,11 +7966,11 @@ const Fp = async ({ context: e, formCallbacks: t }) => {
|
|
|
7966
7966
|
ee("Showing PR dialog..."), c.show();
|
|
7967
7967
|
const l = await su(c);
|
|
7968
7968
|
ee("Stripe PM added event:", l), ee("Merging PM fields with form fields...");
|
|
7969
|
-
const u = Jp(r, l), d =
|
|
7969
|
+
const u = Jp(r, l), d = Z(u, o.get.onValidationError);
|
|
7970
7970
|
v("billing_details_received", {
|
|
7971
7971
|
...d
|
|
7972
7972
|
}), ee("PR dialog finished. Starting payment flow...", d);
|
|
7973
|
-
const f = await
|
|
7973
|
+
const f = await Ku(s, {
|
|
7974
7974
|
fields: d,
|
|
7975
7975
|
checkoutPaymentMethod: t
|
|
7976
7976
|
}), h = Xp(f);
|
|
@@ -8049,7 +8049,7 @@ Details: got ${e.required_user_actions.length} required user actions`);
|
|
|
8049
8049
|
},
|
|
8050
8050
|
// Stripe
|
|
8051
8051
|
stripePR: {
|
|
8052
|
-
init:
|
|
8052
|
+
init: Kp,
|
|
8053
8053
|
run: Qp
|
|
8054
8054
|
},
|
|
8055
8055
|
stripeLink: {
|
|
@@ -8172,7 +8172,7 @@ Details: got ${e.required_user_actions.length} required user actions`);
|
|
|
8172
8172
|
onSetupPaymentMethodSuccess: he,
|
|
8173
8173
|
onCheckoutError: he,
|
|
8174
8174
|
onPaymentRequestLoad: he
|
|
8175
|
-
}),
|
|
8175
|
+
}), Ze = class Gt {
|
|
8176
8176
|
constructor() {
|
|
8177
8177
|
this.setCallbacks = (t) => {
|
|
8178
8178
|
this._callbacks = Gt.createEmptyCallbacks(), Object.entries(t).forEach(([r, o]) => {
|
|
@@ -8188,17 +8188,17 @@ Details: got ${e.required_user_actions.length} required user actions`);
|
|
|
8188
8188
|
return { ...this._callbacks };
|
|
8189
8189
|
}
|
|
8190
8190
|
};
|
|
8191
|
-
|
|
8192
|
-
},
|
|
8191
|
+
Ze.NOOP = () => {
|
|
8192
|
+
}, Ze.createEmptyCallbacks = () => {
|
|
8193
8193
|
const e = {};
|
|
8194
8194
|
return Object.keys(Dn.keyof().enum).forEach((t) => {
|
|
8195
|
-
e[t] =
|
|
8195
|
+
e[t] = Ze.NOOP;
|
|
8196
8196
|
}), e;
|
|
8197
|
-
},
|
|
8198
|
-
const t = new
|
|
8197
|
+
}, Ze.fromObject = (e) => {
|
|
8198
|
+
const t = new Ze();
|
|
8199
8199
|
return t.setCallbacks(Dn.parse(e)), t;
|
|
8200
8200
|
};
|
|
8201
|
-
let im =
|
|
8201
|
+
let im = Ze;
|
|
8202
8202
|
function am() {
|
|
8203
8203
|
try {
|
|
8204
8204
|
const e = H(), t = e;
|
|
@@ -8340,7 +8340,7 @@ let Gn;
|
|
|
8340
8340
|
const _m = async (e, t) => {
|
|
8341
8341
|
if (typeof window > "u")
|
|
8342
8342
|
return;
|
|
8343
|
-
const r = await import("./index-
|
|
8343
|
+
const r = await import("./index-B8vHqN6U-CNlNmKVv.js"), { ConsoleSpanExporter: o, SimpleSpanProcessor: i, WebTracerProvider: a } = r, s = await import("./index-ZSkLm3B3-Pg8OmLGd.js"), { FetchInstrumentation: c } = s, l = await import("./index-lov-3L_d-DJlHTJS-.js"), { ZoneContextManager: u } = l, d = await import("./index-DVc7b-3y-DU9cYylp.js"), { registerInstrumentations: f } = d, h = await import("./index-Ccc9hN4p-D80PvA_h.js"), { Resource: p } = h, _ = await import("./detect-resources-CLMuhAyq-CAxqLRoT.js").then((ue) => ue.d), { detectResourcesSync: y } = _, g = await import("./index-483JcAvC-BlXCKUKz.js"), { OTLPTraceExporter: w } = g, b = await import("./index-Di1Lx8Nt-Bif0Asiv.js"), { B3Propagator: E, B3InjectEncoding: M } = b, C = await import("./index-iiuWJLn0-CV1Tgasr.js"), { BatchSpanProcessor: x } = C;
|
|
8344
8344
|
br(`Initializing tracer with version ${e} and baseUrl ${t}`);
|
|
8345
8345
|
const W = hm(t);
|
|
8346
8346
|
br(`Using collector URL ${W}`);
|
|
@@ -8479,7 +8479,7 @@ const vm = (e, t, r) => {
|
|
|
8479
8479
|
formCallbacks: o,
|
|
8480
8480
|
customParams: { provider: e, overridePaymentRequest: i == null ? void 0 : i.overridePaymentRequest },
|
|
8481
8481
|
initResult: t
|
|
8482
|
-
}), $n = "The secure form failed to load properly. Please check your internet connection, or try again later.", { log__: Pe, err__: ae } = N("op-form"),
|
|
8482
|
+
}), $n = "The secure form failed to load properly. Please check your internet connection, or try again later.", { log__: Pe, err__: ae } = N("op-form"), Ke = class qt {
|
|
8483
8483
|
constructor(t) {
|
|
8484
8484
|
var r;
|
|
8485
8485
|
this.isDestroyed = !1, this.cdeLoadEvent = new vt(), this.anyCdeConn = new vt(), this.context = new vt(), this.initFlows = nm(), this.isSubmitting = !1, this.startFormInit = async () => {
|
|
@@ -8909,7 +8909,7 @@ const vm = (e, t, r) => {
|
|
|
8909
8909
|
(a = H()) == null || a.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), tu(), this.registeredElements = null, delete window.ojs, v("form_destroyed");
|
|
8910
8910
|
}, this.updateCallbacks = (a) => {
|
|
8911
8911
|
this.formCallbacks.setCallbacks(a);
|
|
8912
|
-
}, qt.assignAsSingleton(this), this.ojsVersion = "0.5.
|
|
8912
|
+
}, qt.assignAsSingleton(this), this.ojsVersion = "0.5.5", this.ojsReleaseVersion = "local_build", this.baseUrl = t.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...t, baseUrl: this.baseUrl }, this.formCallbacks = im.fromObject(t), this.registeredElements = null, this.formId = `opjs-form-${ze()}`, this.referrer = window.location.origin, this.formTarget = t.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new gm(), this.deviceToken = Ko(), eu();
|
|
8913
8913
|
const { framework: o, version: i } = cm();
|
|
8914
8914
|
Ro(this.baseUrl).then((a) => {
|
|
8915
8915
|
if (!xr.current.isSuccess) {
|
|
@@ -8957,11 +8957,11 @@ const vm = (e, t, r) => {
|
|
|
8957
8957
|
return this.isDestroyed ? (ae(i), v("outdated_form_instance", { error: i }), !1) : !r || r.formId !== this.formId ? (ae(i), v("outdated_form_instance", { error: i }), !1) : !0;
|
|
8958
8958
|
}
|
|
8959
8959
|
};
|
|
8960
|
-
|
|
8961
|
-
if (
|
|
8960
|
+
Ke.ojsFlows = L, Ke.assignAsSingleton = (e) => {
|
|
8961
|
+
if (Ke.getInstance())
|
|
8962
8962
|
throw new Error("OpenPay instance already exists. Only one instance is allowed.");
|
|
8963
8963
|
window.ojs = e;
|
|
8964
|
-
},
|
|
8964
|
+
}, Ke.getInstance = () => window.ojs ?? null, Ke.buildOjsFlowContext = (e, t, r, o) => ({
|
|
8965
8965
|
checkoutSecureToken: e.checkoutSecureToken,
|
|
8966
8966
|
baseUrl: new URL(e.baseUrl ?? zo).origin,
|
|
8967
8967
|
formDiv: o,
|
|
@@ -8971,7 +8971,7 @@ Ze.ojsFlows = L, Ze.assignAsSingleton = (e) => {
|
|
|
8971
8971
|
customInitParams: e.customInitParams ?? {},
|
|
8972
8972
|
preventNavigationDuringSubmission: e.preventNavigationDuringSubmission
|
|
8973
8973
|
});
|
|
8974
|
-
let Wt =
|
|
8974
|
+
let Wt = Ke;
|
|
8975
8975
|
const wm = (e) => {
|
|
8976
8976
|
var r;
|
|
8977
8977
|
const t = kr.fromObject({
|
|
@@ -9106,4 +9106,4 @@ export {
|
|
|
9106
9106
|
jo as y,
|
|
9107
9107
|
Nr as z
|
|
9108
9108
|
};
|
|
9109
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDA0fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCB7IHogYXMgeiQxIH0gZnJvbSAnem9kJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyB2NCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IHsganN4LCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0L2pzeC1ydW50aW1lJztcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VSZWYsIHVzZU1lbW8sIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcblxuZnVuY3Rpb24gZml4UHJvdG8odGFyZ2V0LCBwcm90b3R5cGUpIHtcbiAgdmFyIHNldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBzZXRQcm90b3R5cGVPZiA/IHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG90eXBlKSA6IHRhcmdldC5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG59XG5mdW5jdGlvbiBmaXhTdGFjayh0YXJnZXQsIGZuKSB7XG4gIGlmIChmbiA9PT0gdm9pZCAwKSB7XG4gICAgZm4gPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgY2FwdHVyZVN0YWNrVHJhY2UgJiYgY2FwdHVyZVN0YWNrVHJhY2UodGFyZ2V0LCBmbik7XG59XG5cbnZhciBfX2V4dGVuZHMkMSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZC5fX3Byb3RvX18gPSBiO1xuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcblxuICAgIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuXG4gICAgZnVuY3Rpb24gX18oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgICB9XG5cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gIH07XG59KCk7XG5cbihmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyQxKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0pKEVycm9yKTtcblxuY29uc3QgUmVxdWlyZWRTdHJpbmcgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBQbGVhc2UgZmlsbCBpbiB0aGlzIGZpZWxkYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0geiQxLnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpO1xuY29uc3QgbnVsbE9yVW5kZWZPciQxID0gKHpUeXBlKSA9PiB6JDEubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG52YXIgRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoRmllbGROYW1lMikgPT4ge1xuICBGaWVsZE5hbWUyW1wiRklSU1RfTkFNRVwiXSA9IFwiZmlyc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJMQVNUX05BTUVcIl0gPSBcImxhc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJQSE9ORVwiXSA9IFwicGhvbmVcIjtcbiAgRmllbGROYW1lMltcIkVNQUlMXCJdID0gXCJlbWFpbFwiO1xuICBGaWVsZE5hbWUyW1wiTElORTFcIl0gPSBcImxpbmUxXCI7XG4gIEZpZWxkTmFtZTJbXCJMSU5FMlwiXSA9IFwibGluZTJcIjtcbiAgRmllbGROYW1lMltcIkxJTkUzXCJdID0gXCJsaW5lM1wiO1xuICBGaWVsZE5hbWUyW1wiQ0lUWVwiXSA9IFwiY2l0eVwiO1xuICBGaWVsZE5hbWUyW1wiU1RBVEVcIl0gPSBcInN0YXRlXCI7XG4gIEZpZWxkTmFtZTJbXCJDT1VOVFJZXCJdID0gXCJjb3VudHJ5XCI7XG4gIEZpZWxkTmFtZTJbXCJaSVBfQ09ERVwiXSA9IFwiemlwQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfTElORTFcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0xpbmUxXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19MSU5FMlwiXSA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTJcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0xJTkUzXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lM1wiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfQ0lUWVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzQ2l0eVwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfU1RBVEVcIl0gPSBcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19DT1VOVFJZXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19aSVBfQ09ERVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXCJdID0gXCJpc1NoaXBwaW5nU2FtZUFzQmlsbGluZ1wiO1xuICBGaWVsZE5hbWUyW1wiUFJPTU9USU9OX0NPREVcIl0gPSBcInByb21vdGlvbkNvZGVcIjtcbiAgcmV0dXJuIEZpZWxkTmFtZTI7XG59KShGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgRmllbGROYW1lRW51bSA9IHokMS5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6JDEubmF0aXZlRW51bShQcml2YXRlRmllbGROYW1lKTtcbmNvbnN0IEFsbEZpZWxkTmFtZXMgPSB6JDEudW5pb24oW0ZpZWxkTmFtZUVudW0sIFByaXZhdGVGaWVsZE5hbWVFbnVtXSk7XG52YXIgRWxlbWVudFR5cGVFbnVtID0gLyogQF9fUFVSRV9fICovICgoRWxlbWVudFR5cGVFbnVtMikgPT4ge1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRFwiXSA9IFwiY2FyZFwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmQtbnVtYmVyXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZC1leHBpcnlcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkLWN2Y1wiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0RFX0JSSURHRVwiXSA9IFwiY2RlLWJyaWRnZVwiO1xuICByZXR1cm4gRWxlbWVudFR5cGVFbnVtMjtcbn0pKEVsZW1lbnRUeXBlRW51bSB8fCB7fSk7XG56JDEubmF0aXZlRW51bShFbGVtZW50VHlwZUVudW0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50TWV0aG9kTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBPcHRpb25hbFN0cmluZyxcbiAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgY3ZjOiBPcHRpb25hbFN0cmluZ1xufSk7XG56JDEub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgbWFyZ2luOiBPcHRpb25hbFN0cmluZyxcbiAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgaGlkZUljb246IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IEV2ZW50VHlwZSA9IHokMS5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKTtcbmNvbnN0IEdlbmVyaWNFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHsgdHlwZTogR2VuZXJpY0V2ZW50VHlwZSB9KTtcbmNvbnN0IElucHV0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKTtcbmNvbnN0IElucHV0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IElucHV0RXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogUHJpdmF0ZUZpZWxkTmFtZUVudW0sXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgb2JmdXNjYXRlZFZhbHVlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBFcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKTtcbmNvbnN0IEVycm9yRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IEVycm9yRXZlbnRUeXBlLFxuICBtZXNzYWdlOiBSZXF1aXJlZFN0cmluZyxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBBbGxGaWVsZE5hbWVzLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IExheW91dEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IExvYWRlZEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICB0b3RhbEFtb3VudEF0b21zOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBPcHRpb25hbFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogeiQxLmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCQxKVxufSk7XG5jb25zdCBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6JDEub3B0aW9uYWwoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBSZXF1aXJlZEZvcm1GaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTJcIiAvKiBMSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lM1wiIC8qIExJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCIgLyogSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HICovXTogeiQxLmN1c3RvbSgpLm9wdGlvbmFsKCkuZGVmYXVsdCh0cnVlKSxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTFcIiAvKiBTSElQUElOR19MSU5FMSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiIC8qIFNISVBQSU5HX0xJTkUyICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCIgLyogU0hJUFBJTkdfTElORTMgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ2l0eVwiIC8qIFNISVBQSU5HX0NJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzU3RhdGVcIiAvKiBTSElQUElOR19TVEFURSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCIgLyogU0hJUFBJTkdfQ09VTlRSWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCIgLyogU0hJUFBJTkdfWklQX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBQUkZvcm1GaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTJcIiAvKiBMSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lM1wiIC8qIExJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCIgLyogSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HICovXTogeiQxLmN1c3RvbSgpLm9wdGlvbmFsKCkuZGVmYXVsdCh0cnVlKSxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTFcIiAvKiBTSElQUElOR19MSU5FMSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiIC8qIFNISVBQSU5HX0xJTkUyICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCIgLyogU0hJUFBJTkdfTElORTMgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ2l0eVwiIC8qIFNISVBQSU5HX0NJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzU3RhdGVcIiAvKiBTSElQUElOR19TVEFURSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCIgLyogU0hJUFBJTkdfQ09VTlRSWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCIgLyogU0hJUFBJTkdfWklQX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG56JDEub2JqZWN0KHtcbiAgW1wibGluZTFcIiAvKiBMSU5FMSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiIC8qIFNISVBQSU5HX0xJTkUxICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiAvKiBTSElQUElOR19DSVRZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIgLyogU0hJUFBJTkdfU1RBVEUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgU3VibWl0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSk7XG5jb25zdCBTdWJtaXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogU3VibWl0RXZlbnRUeXBlLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IE9wdGlvbmFsU3RyaW5nLFxuICBwYXltZW50Um91dGVJZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHokMS5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBFdmVudFBheWxvYWQgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIEdlbmVyaWNFdmVudFBheWxvYWQsXG4gIElucHV0RXZlbnRQYXlsb2FkLFxuICBFcnJvckV2ZW50UGF5bG9hZCxcbiAgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkLFxuICBMYXlvdXRFdmVudFBheWxvYWQsXG4gIExvYWRlZEV2ZW50UGF5bG9hZCxcbiAgU3VibWl0RXZlbnRQYXlsb2FkLFxuICBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkLFxuICBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZFxuXSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIGFtb3VudEF0b206IHokMS5udW1iZXIoKSxcbiAgLyoqXG4gICAqIFRoZSB0aHJlZS1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBmb3IgdGhlIHBheW1lbnQuXG4gICAqL1xuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuYXJyYXkoeiQxLnN0cmluZygpKSlcbn0pO1xuY29uc3QgRmllbGRWYWxpZGF0aW9uRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHokMS5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoZmFsc2UpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG56JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHokMS5vYmplY3QoeyBzdWNjZXNzOiB6JDEubGl0ZXJhbCh0cnVlKSB9KSxcbiAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6JDEuc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIGNvbnNlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEFXWEJhbmsgPSB6JDEub2JqZWN0KHtcbiAgYmFua19uYW1lOiB6JDEuc3RyaW5nKCksXG4gIGRpc3BsYXlfbmFtZTogeiQxLnN0cmluZygpLFxuICByZXNvdXJjZXM6IHokMS5vYmplY3Qoe1xuICAgIGxvZ29fdXJsOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxuICB9KVxufSk7XG5jb25zdCBDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBpbml0aWFsX2ludGVudF9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHBheW1lbnRfc2Vzc2lvbjogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgYXZhaWxhYmxlX2JhbmtzOiBudWxsT3JVbmRlZk9yJDEoeiQxLmFycmF5KEFXWEJhbmspKVxufSk7XG56JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwicHJlc2VudFwiLCBbXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCh0cnVlKSwgaHJlZjogeiQxLnN0cmluZygpIH0pLFxuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoZmFsc2UpIH0pXG5dKTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHokMS5hcnJheShQYXltZW50TWV0aG9kTWluaW1hbCksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yJDEoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IG51bGxPclVuZGVmT3IkMSh6JDEuYXJyYXkoQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhKSksXG4gIHBvc3RfY2hlY2tvdXRfcmVkaXJlY3RfdG86IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yJDEoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpXG59KTtcbmNvbnN0IEVGVEZvcm1EYXRhID0geiQxLm9iamVjdCh7XG4gIGluc3RpdHV0aW9uTnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIHRyYW5zaXROdW1iZXI6IHokMS5zdHJpbmcoKSxcbiAgYWNjb3VudE51bWJlcjogeiQxLnN0cmluZygpLFxuICBhY2NvdW50VHlwZTogeiQxLmVudW0oW1wicGVyc29uYWxcIiwgXCJidXNpbmVzc1wiXSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiBFRlRGb3JtRGF0YS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEJBQ1NGb3JtRGF0YSA9IHokMS5vYmplY3Qoe1xuICBzb3J0Q29kZTogeiQxLnN0cmluZygpLFxuICBhY2NvdW50TnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6JDEuZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IEJBQ1NGb3JtRGF0YS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFNFUEFGb3JtRGF0YSA9IHokMS5vYmplY3Qoe1xuICBpYmFuOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6JDEuZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IFNFUEFGb3JtRGF0YS5vcHRpb25hbCgpXG59KTtcblxuY29uc3QgbnVsbE9yVW5kZWZPciA9ICh6VHlwZSkgPT4geiQxLm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xueiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbnokMS5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogeiQxLmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbnokMS5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBDb3Vwb25NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6JDEuc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKTtcbmNvbnN0IEJyYW5kID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoQnJhbmRTZXR0aW5ncylcbn0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25JdGVtTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbk1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKClcbn0pO1xuY29uc3QgSW52b2ljZUxpbmVJdGVtTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgRGlzY291bnRNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGNvdXBvbjogQ291cG9uTWluaW1hbFxufSk7XG5jb25zdCBJbnZvaWNlTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudHM6IHokMS5hcnJheShEaXNjb3VudE1pbmltYWwpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShJbnZvaWNlTGluZUl0ZW1NaW5pbWFsKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpXG59KTtcbmNvbnN0IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjcmVhdGVkOiB6JDEuYXJyYXkoU3Vic2NyaXB0aW9uTWluaW1hbCksXG4gIGludm9pY2VzOiB6JDEuYXJyYXkoSW52b2ljZU1pbmltYWwpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3IoeiQxLmFycmF5KHokMS5zdHJpbmcoKSkpXG59KTtcbmNvbnN0IFByZXZpZXdDaGVja291dFJlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gIGNvdXBvbnM6IHokMS5hcnJheShDb3Vwb25NaW5pbWFsKVxufSk7XG5jb25zdCBfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICBsb2NhbGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgY2hlY2tvdXRfc2V0dGluZ3M6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTGluZUl0ZW0pLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBicmFuZDogQnJhbmQsXG4gIHN1YnNfcHJldmlldzogbnVsbE9yVW5kZWZPcihQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogeiQxLmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCksXG4gIHJldHVybl91cmw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgc3VjY2Vzc191cmw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZmluYWxfZmVhdHVyZV9yb2xsb3V0X3NldHRpbmdzOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHokMS5udWxsYWJsZSh6JDEudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKSxcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHokMS5zdHJpbmcoKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSlcbl0pO1xuY29uc3QgQ29tcGxldGVkRm9ybVByZWZpbGwgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KTtcbmNvbnN0IEV4cGlyZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW1BheW1lbnRGb3JtUHJlZmlsbCwgQ29tcGxldGVkRm9ybVByZWZpbGwsIEV4cGlyZWRGb3JtUHJlZmlsbF0pO1xueiQxLm9iamVjdCh7XG4gIGxvZ286IHokMS5zdHJpbmcoKSxcbiAgaWNvbjogeiQxLnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBDb21wbGV0ZUFkZHJlc3MgPSB6JDEub2JqZWN0KHtcbiAgbGluZTE6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBsaW5lMjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGxpbmUzOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY2l0eTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHN0YXRlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY291bnRyeTogeiQxLnN0cmluZygpLFxuICB6aXBfY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6JDEuYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3MsXG4gIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcy5vcHRpb25hbCgpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTGluZUl0ZW0pLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6JDEuYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxKTtcbmNvbnN0IE5ld0N1c3RvbWVyRmllbGRzID0geiQxLm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3MsXG4gIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3Mub3B0aW9uYWwoKVxufSk7XG5jb25zdCBQcmljZVF0eSA9IHokMS5vYmplY3Qoe1xuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IENhcnRJbmZvID0geiQxLm9iamVjdCh7XG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShQcmljZVF0eSksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YSA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBDYXJ0SW5mby5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pLmV4dGVuZChOZXdDdXN0b21lckZpZWxkcy5zaGFwZSkuZXh0ZW5kKFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEuc2hhcGUpO1xueiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG4gIHVzZV91bmlmaWVkX2NjX2Zsb3c6IG51bGxPclVuZGVmT3IoeiQxLmJvb2xlYW4oKSksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogQ2FydEluZm8ub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2NfcG1faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPcihDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEucmVjb3JkKHokMS5hbnkoKSk7XG56JDEub2JqZWN0KHtcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZTE6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZTI6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZTM6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgY2l0eTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBzdGF0ZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBjb3VudHJ5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHppcF9jb2RlOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHVwZGF0ZV9wcm9jZXNzb3JfY3VzdG9tZXI6IG51bGxPclVuZGVmT3IoeiQxLmJvb2xlYW4oKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGFkZHJlc3M6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBtZXNzYWdlOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGVycm9yX2NvZGU6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBuZXh0X2FjdGlvbl9tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBldmVudHM6IHokMS5hcnJheShcbiAgICB6JDEub2JqZWN0KHtcbiAgICAgIGV2ZW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICAgIGRldmljZV90b2tlbjogeiQxLnN0cmluZygpLFxuICAgICAgcHJvcGVydGllczogeiQxLnJlY29yZCh6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gICAgICBjb250ZXh0X3Byb3BlcnRpZXM6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpXG4gICAgfSlcbiAgKVxufSk7XG56JDEuYW55KCkub3B0aW9uYWwoKTtcbnokMS5vYmplY3Qoe1xuICBkZXZpY2VfdG9rZW46IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHt9KTtcbnokMS5vYmplY3Qoe1xuICBfdW5pZmllZF9jY19hY3Rpb25fbmFtZTogeiQxLnN0cmluZygpLFxuICBfdW5pZmllZF9jY19wY2NzX2lkOiB6JDEuc3RyaW5nKClcbn0pLmNhdGNoYWxsKHokMS5hbnkoKSk7XG5cbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvcik7XG5jb25zdCBab2RGaWVsZEVycm9yID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEuYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICBjb25zdCBsb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ubG9nKGAke2NoYWxrLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICBjb25zdCBlcnIgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ud2FybihgJHtjaGFsay5yZWQuYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nLFxuICAgIGVycixcbiAgICBsb2dfXzogbG9nLFxuICAgIGVycl9fOiBlcnJcbiAgfTtcbn07XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxuZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XG4gIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGcgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gZy5uZXh0ID0gdmVyYigwKSwgZ1tcInRocm93XCJdID0gdmVyYigxKSwgZ1tcInJldHVyblwiXSA9IHZlcmIoMiksIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XG4gIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cblxuZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcbiAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIW0pIHJldHVybiBvO1xuICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgdHJ5IHtcbiAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICB9XG4gIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgfVxuICByZXR1cm4gYXI7XG59XG5cbmZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcbiAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn1cblxuZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5mdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xuICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIsIGF3YWl0UmV0dXJuKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKGdbbl0pIHsgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgaWYgKGYpIGlbbl0gPSBmKGlbbl0pOyB9IH1cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxuICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn1cblxuZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XG4gIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcbiAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxuICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XG59XG5cbnR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xuICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcbn07XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFcnJvckNsYXNzKGNyZWF0ZUltcGwpIHtcbiAgICB2YXIgX3N1cGVyID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgIEVycm9yLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgICBpbnN0YW5jZS5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICAgIH07XG4gICAgdmFyIGN0b3JGdW5jID0gY3JlYXRlSW1wbChfc3VwZXIpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbiAgICBjdG9yRnVuYy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yRnVuYztcbiAgICByZXR1cm4gY3RvckZ1bmM7XG59XG5cbnZhciBVbnN1YnNjcmlwdGlvbkVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFVuc3Vic2NyaXB0aW9uRXJyb3JJbXBsKGVycm9ycykge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IGVycm9yc1xuICAgICAgICAgICAgPyBlcnJvcnMubGVuZ3RoICsgXCIgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcXG5cIiArIGVycm9ycy5tYXAoZnVuY3Rpb24gKGVyciwgaSkgeyByZXR1cm4gaSArIDEgKyBcIikgXCIgKyBlcnIudG9TdHJpbmcoKTsgfSkuam9pbignXFxuICAnKVxuICAgICAgICAgICAgOiAnJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1Vuc3Vic2NyaXB0aW9uRXJyb3InO1xuICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICB9O1xufSk7XG5cbmZ1bmN0aW9uIGFyclJlbW92ZShhcnIsIGl0ZW0pIHtcbiAgICBpZiAoYXJyKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGFyci5pbmRleE9mKGl0ZW0pO1xuICAgICAgICAwIDw9IGluZGV4ICYmIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbn1cblxudmFyIFN1YnNjcmlwdGlvbiA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3Vic2NyaXB0aW9uKGluaXRpYWxUZWFyZG93bikge1xuICAgICAgICB0aGlzLmluaXRpYWxUZWFyZG93biA9IGluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgfVxuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlXzEsIF9hLCBlXzIsIF9iO1xuICAgICAgICB2YXIgZXJyb3JzO1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgICAgIGlmIChfcGFyZW50YWdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX3BhcmVudGFnZV8xID0gX192YWx1ZXMoX3BhcmVudGFnZSksIF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKTsgIV9wYXJlbnRhZ2VfMV8xLmRvbmU7IF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRfMSA9IF9wYXJlbnRhZ2VfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudF8xLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2VfMV8xICYmICFfcGFyZW50YWdlXzFfMS5kb25lICYmIChfYSA9IF9wYXJlbnRhZ2VfMS5yZXR1cm4pKSBfYS5jYWxsKF9wYXJlbnRhZ2VfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF9wYXJlbnRhZ2UucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBpbml0aWFsRmluYWxpemVyID0gdGhpcy5pbml0aWFsVGVhcmRvd247XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihpbml0aWFsRmluYWxpemVyKSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxGaW5hbGl6ZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZSBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IgPyBlLmVycm9ycyA6IFtlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2ZpbmFsaXplcnNfMSA9IF9fdmFsdWVzKF9maW5hbGl6ZXJzKSwgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCk7ICFfZmluYWxpemVyc18xXzEuZG9uZTsgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaW5hbGl6ZXIgPSBfZmluYWxpemVyc18xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMgIT09IG51bGwgJiYgZXJyb3JzICE9PSB2b2lkIDAgPyBlcnJvcnMgOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBfX3NwcmVhZEFycmF5KF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChlcnJvcnMpKSwgX19yZWFkKGVyci5lcnJvcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzJfMSkgeyBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnNfMV8xICYmICFfZmluYWxpemVyc18xXzEuZG9uZSAmJiAoX2IgPSBfZmluYWxpemVyc18xLnJldHVybikpIF9iLmNhbGwoX2ZpbmFsaXplcnNfMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdWJzY3JpcHRpb25FcnJvcihlcnJvcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0ZWFyZG93biAmJiB0ZWFyZG93biAhPT0gdGhpcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcih0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duLmNsb3NlZCB8fCB0ZWFyZG93bi5faGFzUGFyZW50KHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGVhcmRvd24uX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAoX2EgPSB0aGlzLl9maW5hbGl6ZXJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSkucHVzaCh0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHJldHVybiBfcGFyZW50YWdlID09PSBwYXJlbnQgfHwgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgJiYgX3BhcmVudGFnZS5pbmNsdWRlcyhwYXJlbnQpKTtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgPyAoX3BhcmVudGFnZS5wdXNoKHBhcmVudCksIF9wYXJlbnRhZ2UpIDogX3BhcmVudGFnZSA/IFtfcGFyZW50YWdlLCBwYXJlbnRdIDogcGFyZW50O1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgaWYgKF9wYXJlbnRhZ2UgPT09IHBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICBhcnJSZW1vdmUoX3BhcmVudGFnZSwgcGFyZW50KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgX2ZpbmFsaXplcnMgJiYgYXJyUmVtb3ZlKF9maW5hbGl6ZXJzLCB0ZWFyZG93bik7XG4gICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGVhcmRvd24uX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLkVNUFRZID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVtcHR5ID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICBlbXB0eS5jbG9zZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZW1wdHk7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gU3Vic2NyaXB0aW9uO1xufSgpKTtcbnZhciBFTVBUWV9TVUJTQ1JJUFRJT04gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5mdW5jdGlvbiBpc1N1YnNjcmlwdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24gfHxcbiAgICAgICAgKHZhbHVlICYmICdjbG9zZWQnIGluIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUucmVtb3ZlKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmFkZCkgJiYgaXNGdW5jdGlvbih2YWx1ZS51bnN1YnNjcmliZSkpKTtcbn1cbmZ1bmN0aW9uIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZmluYWxpemVyKSkge1xuICAgICAgICBmaW5hbGl6ZXIoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGZpbmFsaXplci51bnN1YnNjcmliZSgpO1xuICAgIH1cbn1cblxudmFyIGNvbmZpZyA9IHtcbiAgICBvblVuaGFuZGxlZEVycm9yOiBudWxsLFxuICAgIG9uU3RvcHBlZE5vdGlmaWNhdGlvbjogbnVsbCxcbiAgICBQcm9taXNlOiB1bmRlZmluZWQsXG4gICAgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzogZmFsc2UsXG4gICAgdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiBmYWxzZSxcbn07XG5cbnZhciB0aW1lb3V0UHJvdmlkZXIgPSB7XG4gICAgc2V0VGltZW91dDogZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAyOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgfSxcbiAgICBjbGVhclRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gdGltZW91dFByb3ZpZGVyLmRlbGVnYXRlO1xuICAgICAgICByZXR1cm4gKChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuY2xlYXJUaW1lb3V0KSB8fCBjbGVhclRpbWVvdXQpKGhhbmRsZSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxuZnVuY3Rpb24gcmVwb3J0VW5oYW5kbGVkRXJyb3IoZXJyKSB7XG4gICAgdGltZW91dFByb3ZpZGVyLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbm9vcCgpIHsgfVxuXG5mdW5jdGlvbiBlcnJvckNvbnRleHQoY2IpIHtcbiAgICB7XG4gICAgICAgIGNiKCk7XG4gICAgfVxufVxuXG52YXIgU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3Vic2NyaWJlcihkZXN0aW5hdGlvbikge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICAgICAgaWYgKGlzU3Vic2NyaXB0aW9uKGRlc3RpbmF0aW9uKSkge1xuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmFkZChfdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IEVNUFRZX09CU0VSVkVSO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgU3Vic2NyaWJlci5jcmVhdGUgPSBmdW5jdGlvbiAobmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2FmZVN1YnNjcmliZXIobmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbmV4dCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQodmFsdWUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBTdWJzY3JpYmVyO1xufShTdWJzY3JpcHRpb24pKTtcbnZhciBfYmluZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xuZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICAgIHJldHVybiBfYmluZC5jYWxsKGZuLCB0aGlzQXJnKTtcbn1cbnZhciBDb25zdW1lck9ic2VydmVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb25zdW1lck9ic2VydmVyKHBhcnRpYWxPYnNlcnZlcikge1xuICAgICAgICB0aGlzLnBhcnRpYWxPYnNlcnZlciA9IHBhcnRpYWxPYnNlcnZlcjtcbiAgICB9XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIubmV4dCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQ29uc3VtZXJPYnNlcnZlcjtcbn0oKSk7XG52YXIgU2FmZVN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTYWZlU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKG9ic2VydmVyT3JOZXh0KSB8fCAhb2JzZXJ2ZXJPck5leHQpIHtcbiAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IHtcbiAgICAgICAgICAgICAgICBuZXh0OiAob2JzZXJ2ZXJPck5leHQgIT09IG51bGwgJiYgb2JzZXJ2ZXJPck5leHQgIT09IHZvaWQgMCA/IG9ic2VydmVyT3JOZXh0IDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBjb21wbGV0ZSAhPT0gbnVsbCAmJiBjb21wbGV0ZSAhPT0gdm9pZCAwID8gY29tcGxldGUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGNvbnRleHRfMTtcbiAgICAgICAgICAgIGlmIChfdGhpcyAmJiBjb25maWcudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgY29udGV4dF8xID0gT2JqZWN0LmNyZWF0ZShvYnNlcnZlck9yTmV4dCk7XG4gICAgICAgICAgICAgICAgY29udGV4dF8xLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMudW5zdWJzY3JpYmUoKTsgfTtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IG9ic2VydmVyT3JOZXh0Lm5leHQgJiYgYmluZChvYnNlcnZlck9yTmV4dC5uZXh0LCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogb2JzZXJ2ZXJPck5leHQuZXJyb3IgJiYgYmluZChvYnNlcnZlck9yTmV4dC5lcnJvciwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6IG9ic2VydmVyT3JOZXh0LmNvbXBsZXRlICYmIGJpbmQob2JzZXJ2ZXJPck5leHQuY29tcGxldGUsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IG9ic2VydmVyT3JOZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gbmV3IENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICByZXR1cm4gU2FmZVN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcbmZ1bmN0aW9uIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKSB7XG4gICAge1xuICAgICAgICByZXBvcnRVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gZGVmYXVsdEVycm9ySGFuZGxlcihlcnIpIHtcbiAgICB0aHJvdyBlcnI7XG59XG52YXIgRU1QVFlfT0JTRVJWRVIgPSB7XG4gICAgY2xvc2VkOiB0cnVlLFxuICAgIG5leHQ6IG5vb3AsXG4gICAgZXJyb3I6IGRlZmF1bHRFcnJvckhhbmRsZXIsXG4gICAgY29tcGxldGU6IG5vb3AsXG59O1xuXG52YXIgb2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7IHJldHVybiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wub2JzZXJ2YWJsZSkgfHwgJ0BAb2JzZXJ2YWJsZSc7IH0pKCk7XG5cbmZ1bmN0aW9uIGlkZW50aXR5KHgpIHtcbiAgICByZXR1cm4geDtcbn1cblxuZnVuY3Rpb24gcGlwZUZyb21BcnJheShmbnMpIHtcbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gaWRlbnRpdHk7XG4gICAgfVxuICAgIGlmIChmbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBmbnNbMF07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiBwaXBlZChpbnB1dCkge1xuICAgICAgICByZXR1cm4gZm5zLnJlZHVjZShmdW5jdGlvbiAocHJldiwgZm4pIHsgcmV0dXJuIGZuKHByZXYpOyB9LCBpbnB1dCk7XG4gICAgfTtcbn1cblxudmFyIE9ic2VydmFibGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE9ic2VydmFibGUoc3Vic2NyaWJlKSB7XG4gICAgICAgIGlmIChzdWJzY3JpYmUpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1YnNjcmliZSA9IHN1YnNjcmliZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGUoKTtcbiAgICAgICAgb2JzZXJ2YWJsZS5zb3VyY2UgPSB0aGlzO1xuICAgICAgICBvYnNlcnZhYmxlLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24gKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHN1YnNjcmliZXIgPSBpc1N1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQpID8gb2JzZXJ2ZXJPck5leHQgOiBuZXcgU2FmZVN1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSk7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcywgb3BlcmF0b3IgPSBfYS5vcGVyYXRvciwgc291cmNlID0gX2Euc291cmNlO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5hZGQob3BlcmF0b3JcbiAgICAgICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yLmNhbGwoc3Vic2NyaWJlciwgc291cmNlKVxuICAgICAgICAgICAgICAgIDogc291cmNlXG4gICAgICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9zdWJzY3JpYmUoc3Vic2NyaWJlcilcbiAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3RyeVN1YnNjcmliZShzdWJzY3JpYmVyKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc3Vic2NyaWJlcjtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc2luaykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZShzaW5rKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBzaW5rLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAobmV4dCwgcHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHN1YnNjcmliZXIgPSBuZXcgU2FmZVN1YnNjcmliZXIoe1xuICAgICAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IHJlc29sdmUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF90aGlzLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZVtvYnNlcnZhYmxlXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb3BlcmF0aW9ucyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgb3BlcmF0aW9uc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwaXBlRnJvbUFycmF5KG9wZXJhdGlvbnMpKHRoaXMpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUudG9Qcm9taXNlID0gZnVuY3Rpb24gKHByb21pc2VDdG9yKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHByb21pc2VDdG9yID0gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpO1xuICAgICAgICByZXR1cm4gbmV3IHByb21pc2VDdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZTtcbiAgICAgICAgICAgIF90aGlzLnN1YnNjcmliZShmdW5jdGlvbiAoeCkgeyByZXR1cm4gKHZhbHVlID0geCk7IH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHJlamVjdChlcnIpOyB9LCBmdW5jdGlvbiAoKSB7IHJldHVybiByZXNvbHZlKHZhbHVlKTsgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5jcmVhdGUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlKSB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShzdWJzY3JpYmUpO1xuICAgIH07XG4gICAgcmV0dXJuIE9ic2VydmFibGU7XG59KCkpO1xuZnVuY3Rpb24gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChfYSA9IHByb21pc2VDdG9yICE9PSBudWxsICYmIHByb21pc2VDdG9yICE9PSB2b2lkIDAgPyBwcm9taXNlQ3RvciA6IGNvbmZpZy5Qcm9taXNlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBQcm9taXNlO1xufVxuZnVuY3Rpb24gaXNPYnNlcnZlcih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLm5leHQpICYmIGlzRnVuY3Rpb24odmFsdWUuZXJyb3IpICYmIGlzRnVuY3Rpb24odmFsdWUuY29tcGxldGUpO1xufVxuZnVuY3Rpb24gaXNTdWJzY3JpYmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIFN1YnNjcmliZXIpIHx8IChpc09ic2VydmVyKHZhbHVlKSAmJiBpc1N1YnNjcmlwdGlvbih2YWx1ZSkpO1xufVxuXG5mdW5jdGlvbiBoYXNMaWZ0KHNvdXJjZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHNvdXJjZSA9PT0gbnVsbCB8fCBzb3VyY2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNvdXJjZS5saWZ0KTtcbn1cbmZ1bmN0aW9uIG9wZXJhdGUoaW5pdCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIGlmIChoYXNMaWZ0KHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2UubGlmdChmdW5jdGlvbiAobGlmdGVkU291cmNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluaXQobGlmdGVkU291cmNlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUnKTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSkge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUpO1xufVxudmFyIE9wZXJhdG9yU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKE9wZXJhdG9yU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSwgc2hvdWxkVW5zdWJzY3JpYmUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm9uRmluYWxpemUgPSBvbkZpbmFsaXplO1xuICAgICAgICBfdGhpcy5zaG91bGRVbnN1YnNjcmliZSA9IHNob3VsZFVuc3Vic2NyaWJlO1xuICAgICAgICBfdGhpcy5fbmV4dCA9IG9uTmV4dFxuICAgICAgICAgICAgPyBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbk5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9uZXh0O1xuICAgICAgICBfdGhpcy5fZXJyb3IgPSBvbkVycm9yXG4gICAgICAgICAgICA/IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX2Vycm9yO1xuICAgICAgICBfdGhpcy5fY29tcGxldGUgPSBvbkNvbXBsZXRlXG4gICAgICAgICAgICA/IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbkNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX2NvbXBsZXRlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9wZXJhdG9yU3Vic2NyaWJlci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlIHx8IHRoaXMuc2hvdWxkVW5zdWJzY3JpYmUoKSkge1xuICAgICAgICAgICAgdmFyIGNsb3NlZF8xID0gdGhpcy5jbG9zZWQ7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAhY2xvc2VkXzEgJiYgKChfYSA9IHRoaXMub25GaW5hbGl6ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodGhpcykpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gT3BlcmF0b3JTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5cbnZhciBPYmplY3RVbnN1YnNjcmliZWRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBPYmplY3RVbnN1YnNjcmliZWRFcnJvckltcGwoKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ09iamVjdFVuc3Vic2NyaWJlZEVycm9yJztcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ29iamVjdCB1bnN1YnNjcmliZWQnO1xuICAgIH07XG59KTtcblxudmFyIFN1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1YmplY3QoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgX3RoaXMub2JzZXJ2ZXJzID0gW107XG4gICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5oYXNFcnJvciA9IGZhbHNlO1xuICAgICAgICBfdGhpcy50aHJvd25FcnJvciA9IG51bGw7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgU3ViamVjdC5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uIChvcGVyYXRvcikge1xuICAgICAgICB2YXIgc3ViamVjdCA9IG5ldyBBbm9ueW1vdXNTdWJqZWN0KHRoaXMsIHRoaXMpO1xuICAgICAgICBzdWJqZWN0Lm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgIHJldHVybiBzdWJqZWN0O1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3Rocm93SWZDbG9zZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9iamVjdFVuc3Vic2NyaWJlZEVycm9yKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBBcnJheS5mcm9tKF90aGlzLm9ic2VydmVycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9iID0gX192YWx1ZXMoX3RoaXMuY3VycmVudE9ic2VydmVycyksIF9jID0gX2IubmV4dCgpOyAhX2MuZG9uZTsgX2MgPSBfYi5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlciA9IF9jLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfYyAmJiAhX2MuZG9uZSAmJiAoX2EgPSBfYi5yZXR1cm4pKSBfYS5jYWxsKF9iKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBfdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIF90aGlzLnRocm93bkVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlcnMgPSBfdGhpcy5vYnNlcnZlcnM7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXJzLnNoaWZ0KCkuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlcnMgPSBfdGhpcy5vYnNlcnZlcnM7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXJzLnNoaWZ0KCkuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLm9ic2VydmVycyA9IHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3ViamVjdC5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiAoKF9hID0gdGhpcy5vYnNlcnZlcnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sZW5ndGgpID4gMDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1YmplY3QucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLl90cnlTdWJzY3JpYmUuY2FsbCh0aGlzLCBzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbm5lclN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9pbm5lclN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGhhc0Vycm9yID0gX2EuaGFzRXJyb3IsIGlzU3RvcHBlZCA9IF9hLmlzU3RvcHBlZCwgb2JzZXJ2ZXJzID0gX2Eub2JzZXJ2ZXJzO1xuICAgICAgICBpZiAoaGFzRXJyb3IgfHwgaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgIG9ic2VydmVycy5wdXNoKHN1YnNjcmliZXIpO1xuICAgICAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgICAgIGFyclJlbW92ZShvYnNlcnZlcnMsIHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgdGhyb3duRXJyb3IgPSBfYS50aHJvd25FcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkO1xuICAgICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IodGhyb3duRXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzU3RvcHBlZCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGUoKTtcbiAgICAgICAgb2JzZXJ2YWJsZS5zb3VyY2UgPSB0aGlzO1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICB9O1xuICAgIFN1YmplY3QuY3JlYXRlID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbm9ueW1vdXNTdWJqZWN0KGRlc3RpbmF0aW9uLCBzb3VyY2UpO1xuICAgIH07XG4gICAgcmV0dXJuIFN1YmplY3Q7XG59KE9ic2VydmFibGUpKTtcbnZhciBBbm9ueW1vdXNTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQW5vbnltb3VzU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBbm9ueW1vdXNTdWJqZWN0KGRlc3RpbmF0aW9uLCBzb3VyY2UpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgX3RoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5leHQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCB2YWx1ZSk7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmVycm9yKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgZXJyKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29tcGxldGUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICByZXR1cm4gKF9iID0gKF9hID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdWJzY3JpYmUoc3Vic2NyaWJlcikpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IEVNUFRZX1NVQlNDUklQVElPTjtcbiAgICB9O1xuICAgIHJldHVybiBBbm9ueW1vdXNTdWJqZWN0O1xufShTdWJqZWN0KSk7XG5cbnZhciBkYXRlVGltZXN0YW1wUHJvdmlkZXIgPSB7XG4gICAgbm93OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoRGF0ZSkubm93KCk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxudmFyIEFjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHJldHVybiBBY3Rpb247XG59KFN1YnNjcmlwdGlvbikpO1xuXG52YXIgaW50ZXJ2YWxQcm92aWRlciA9IHtcbiAgICBzZXRJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAyOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbaGFuZGxlciwgdGltZW91dF0sIF9fcmVhZChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICByZXR1cm4gKGNsZWFySW50ZXJ2YWwpKGhhbmRsZSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxudmFyIEFzeW5jQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yaykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBfdGhpcy53b3JrID0gd29yaztcbiAgICAgICAgX3RoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIHZhciBpZCA9IHRoaXMuaWQ7XG4gICAgICAgIHZhciBzY2hlZHVsZXIgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmRlbGF5ID0gZGVsYXk7XG4gICAgICAgIHRoaXMuaWQgPSAoX2EgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLnJlcXVlc3RBc3luY0lkKHNjaGVkdWxlciwgdGhpcy5pZCwgZGVsYXkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIF9pZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBpbnRlcnZhbFByb3ZpZGVyLnNldEludGVydmFsKHNjaGVkdWxlci5mbHVzaC5iaW5kKHNjaGVkdWxlciwgdGhpcyksIGRlbGF5KTtcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uIChfc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmIChkZWxheSAhPSBudWxsICYmIHRoaXMuZGVsYXkgPT09IGRlbGF5ICYmIHRoaXMucGVuZGluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBpZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaW50ZXJ2YWxQcm92aWRlci5jbGVhckludGVydmFsKGlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLl9leGVjdXRlKHN0YXRlLCBkZWxheSk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucGVuZGluZyA9PT0gZmFsc2UgJiYgdGhpcy5pZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgX2RlbGF5KSB7XG4gICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvclZhbHVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy53b3JrKHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZXJyb3JlZCA9IHRydWU7XG4gICAgICAgICAgICBlcnJvclZhbHVlID0gZSA/IGUgOiBuZXcgRXJyb3IoJ1NjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3JlZCkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yVmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdmFyIF9hID0gdGhpcywgaWQgPSBfYS5pZCwgc2NoZWR1bGVyID0gX2Euc2NoZWR1bGVyO1xuICAgICAgICAgICAgdmFyIGFjdGlvbnMgPSBzY2hlZHVsZXIuYWN0aW9ucztcbiAgICAgICAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGFyclJlbW92ZShhY3Rpb25zLCB0aGlzKTtcbiAgICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRlbGF5ID0gbnVsbDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jQWN0aW9uO1xufShBY3Rpb24pKTtcblxudmFyIFNjaGVkdWxlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2NoZWR1bGVyKHNjaGVkdWxlckFjdGlvbkN0b3IsIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSBzY2hlZHVsZXJBY3Rpb25DdG9yO1xuICAgICAgICB0aGlzLm5vdyA9IG5vdztcbiAgICB9XG4gICAgU2NoZWR1bGVyLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uICh3b3JrLCBkZWxheSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHdvcmspLnNjaGVkdWxlKHN0YXRlLCBkZWxheSk7XG4gICAgfTtcbiAgICBTY2hlZHVsZXIubm93ID0gZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLm5vdztcbiAgICByZXR1cm4gU2NoZWR1bGVyO1xufSgpKTtcblxudmFyIEFzeW5jU2NoZWR1bGVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNTY2hlZHVsZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNTY2hlZHVsZXIoU2NoZWR1bGVyQWN0aW9uLCBub3cpIHtcbiAgICAgICAgaWYgKG5vdyA9PT0gdm9pZCAwKSB7IG5vdyA9IFNjaGVkdWxlci5ub3c7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgU2NoZWR1bGVyQWN0aW9uLCBub3cpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmFjdGlvbnMgPSBbXTtcbiAgICAgICAgX3RoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jU2NoZWR1bGVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNTY2hlZHVsZXI7XG59KFNjaGVkdWxlcikpO1xuXG52YXIgYXN5bmNTY2hlZHVsZXIgPSBuZXcgQXN5bmNTY2hlZHVsZXIoQXN5bmNBY3Rpb24pO1xuXG52YXIgaXNBcnJheUxpa2UgPSAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggJiYgdHlwZW9mIHgubGVuZ3RoID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgeCAhPT0gJ2Z1bmN0aW9uJzsgfSk7XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZS50aGVuKTtcbn1cblxuZnVuY3Rpb24gaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0W29ic2VydmFibGVdKTtcbn1cblxuZnVuY3Rpb24gaXNBc3luY0l0ZXJhYmxlKG9iaikge1xuICAgIHJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciAmJiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKGlucHV0ICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgPyAnYW4gaW52YWxpZCBvYmplY3QnIDogXCInXCIgKyBpbnB1dCArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuXG5mdW5jdGlvbiBnZXRTeW1ib2xJdGVyYXRvcigpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCAhU3ltYm9sLml0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiAnQEBpdGVyYXRvcic7XG4gICAgfVxuICAgIHJldHVybiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgaXRlcmF0b3IgPSBnZXRTeW1ib2xJdGVyYXRvcigpO1xuXG5mdW5jdGlvbiBpc0l0ZXJhYmxlKGlucHV0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0W2l0ZXJhdG9yXSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3JfMSgpIHtcbiAgICAgICAgdmFyIHJlYWRlciwgX2EsIHZhbHVlLCBkb25lO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMjtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdChyZWFkZXIucmVhZCgpKV07XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBfYSA9IF9iLnNlbnQoKSwgdmFsdWUgPSBfYS52YWx1ZSwgZG9uZSA9IF9hLmRvbmU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZG9uZSkgcmV0dXJuIFszLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHZvaWQgMCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFs0LCBfX2F3YWl0KHZhbHVlKV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OiByZXR1cm4gWzQsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMl07XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWxlYXNlTG9jaygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaXNSZWFkYWJsZVN0cmVhbUxpa2Uob2JqKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqLmdldFJlYWRlcik7XG59XG5cbmZ1bmN0aW9uIGlubmVyRnJvbShpbnB1dCkge1xuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5TGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm9taXNlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Qcm9taXNlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBc3luY0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSXRlcmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCk7XG59XG5mdW5jdGlvbiBmcm9tSW50ZXJvcE9ic2VydmFibGUob2JqKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvYnMgPSBvYmpbb2JzZXJ2YWJsZV0oKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzLnN1YnNjcmliZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlJyk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlKGFycmF5KSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoICYmICFzdWJzY3JpYmVyLmNsb3NlZDsgaSsrKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYXJyYXlbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21Qcm9taXNlKHByb21pc2UpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSlcbiAgICAgICAgICAgIC50aGVuKG51bGwsIHJlcG9ydFVuaGFuZGxlZEVycm9yKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21JdGVyYWJsZShpdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGl0ZXJhYmxlXzEgPSBfX3ZhbHVlcyhpdGVyYWJsZSksIGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpOyAhaXRlcmFibGVfMV8xLmRvbmU7IGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gaXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZV8xXzEgJiYgIWl0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGl0ZXJhYmxlXzEucmV0dXJuKSkgX2EuY2FsbChpdGVyYWJsZV8xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXN5bmNJdGVyYWJsZShhc3luY0l0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikuY2F0Y2goZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUocmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkpO1xufVxuZnVuY3Rpb24gcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKSB7XG4gICAgdmFyIGFzeW5jSXRlcmFibGVfMSwgYXN5bmNJdGVyYWJsZV8xXzE7XG4gICAgdmFyIGVfMiwgX2E7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdmFsdWUsIGVfMl8xO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzAsIDUsIDYsIDExXSk7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jSXRlcmFibGVfMSA9IF9fYXN5bmNWYWx1ZXMoYXN5bmNJdGVyYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbNCwgYXN5bmNJdGVyYWJsZV8xLm5leHQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSA9IF9iLnNlbnQoKSwgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUpKSByZXR1cm4gWzMsIDRdO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzeW5jSXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAzO1xuICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFszLCAxXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgZV8yXzEgPSBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xICYmICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGFzeW5jSXRlcmFibGVfMS5yZXR1cm4pKSkgcmV0dXJuIFszLCA4XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfYS5jYWxsKGFzeW5jSXRlcmFibGVfMSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDg7XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVTY2hlZHVsZShwYXJlbnRTdWJzY3JpcHRpb24sIHNjaGVkdWxlciwgd29yaywgZGVsYXksIHJlcGVhdCkge1xuICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgIGlmIChyZXBlYXQgPT09IHZvaWQgMCkgeyByZXBlYXQgPSBmYWxzZTsgfVxuICAgIHZhciBzY2hlZHVsZVN1YnNjcmlwdGlvbiA9IHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdvcmsoKTtcbiAgICAgICAgaWYgKHJlcGVhdCkge1xuICAgICAgICAgICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIGRlbGF5KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9LCBkZWxheSk7XG4gICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZChzY2hlZHVsZVN1YnNjcmlwdGlvbik7XG4gICAgaWYgKCFyZXBlYXQpIHtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlU3Vic2NyaXB0aW9uO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dFcnJvcihlcnJvck9yRXJyb3JGYWN0b3J5LCBzY2hlZHVsZXIpIHtcbiAgICB2YXIgZXJyb3JGYWN0b3J5ID0gaXNGdW5jdGlvbihlcnJvck9yRXJyb3JGYWN0b3J5KSA/IGVycm9yT3JFcnJvckZhY3RvcnkgOiBmdW5jdGlvbiAoKSB7IHJldHVybiBlcnJvck9yRXJyb3JGYWN0b3J5OyB9O1xuICAgIHZhciBpbml0ID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyb3JGYWN0b3J5KCkpOyB9O1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShpbml0KTtcbn1cblxudmFyIEVtcHR5RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHsgcmV0dXJuIGZ1bmN0aW9uIEVtcHR5RXJyb3JJbXBsKCkge1xuICAgIF9zdXBlcih0aGlzKTtcbiAgICB0aGlzLm5hbWUgPSAnRW1wdHlFcnJvcic7XG4gICAgdGhpcy5tZXNzYWdlID0gJ25vIGVsZW1lbnRzIGluIHNlcXVlbmNlJztcbn07IH0pO1xuXG5mdW5jdGlvbiBsYXN0VmFsdWVGcm9tKHNvdXJjZSwgY29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIF9oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgX3ZhbHVlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIF9oYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9oYXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKF92YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVtcHR5RXJyb3IoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWREYXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odmFsdWUpO1xufVxuXG52YXIgVGltZW91dEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFRpbWVvdXRFcnJvckltcGwoaW5mbykge1xuICAgICAgICBpZiAoaW5mbyA9PT0gdm9pZCAwKSB7IGluZm8gPSBudWxsOyB9XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ1RpbWVvdXQgaGFzIG9jY3VycmVkJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1RpbWVvdXRFcnJvcic7XG4gICAgICAgIHRoaXMuaW5mbyA9IGluZm87XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gdGltZW91dChjb25maWcsIHNjaGVkdWxlckFyZykge1xuICAgIHZhciBfYSA9IChpc1ZhbGlkRGF0ZShjb25maWcpID8geyBmaXJzdDogY29uZmlnIH0gOiB0eXBlb2YgY29uZmlnID09PSAnbnVtYmVyJyA/IHsgZWFjaDogY29uZmlnIH0gOiBjb25maWcpLCBmaXJzdCA9IF9hLmZpcnN0LCBlYWNoID0gX2EuZWFjaCwgX2IgPSBfYS53aXRoLCBfd2l0aCA9IF9iID09PSB2b2lkIDAgPyB0aW1lb3V0RXJyb3JGYWN0b3J5IDogX2IsIF9jID0gX2Euc2NoZWR1bGVyLCBzY2hlZHVsZXIgPSBfYyA9PT0gdm9pZCAwID8gYXN5bmNTY2hlZHVsZXIgOiBfYywgX2QgPSBfYS5tZXRhLCBtZXRhID0gX2QgPT09IHZvaWQgMCA/IG51bGwgOiBfZDtcbiAgICBpZiAoZmlyc3QgPT0gbnVsbCAmJiBlYWNoID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gdGltZW91dCBwcm92aWRlZC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb247XG4gICAgICAgIHZhciB0aW1lclN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIHZhciBzZWVuID0gMDtcbiAgICAgICAgdmFyIHN0YXJ0VGltZXIgPSBmdW5jdGlvbiAoZGVsYXkpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID0gZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlubmVyRnJvbShfd2l0aCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhOiBtZXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlOiBsYXN0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWVuOiBzZWVuLFxuICAgICAgICAgICAgICAgICAgICB9KSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBkZWxheSk7XG4gICAgICAgIH07XG4gICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uID0gc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHNlZW4rKztcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCgobGFzdFZhbHVlID0gdmFsdWUpKTtcbiAgICAgICAgICAgIGVhY2ggPiAwICYmIHN0YXJ0VGltZXIoZWFjaCk7XG4gICAgICAgIH0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoISh0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24uY2xvc2VkKSkge1xuICAgICAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgfSkpO1xuICAgICAgICAhc2VlbiAmJiBzdGFydFRpbWVyKGZpcnN0ICE9IG51bGwgPyAodHlwZW9mIGZpcnN0ID09PSAnbnVtYmVyJyA/IGZpcnN0IDogK2ZpcnN0IC0gc2NoZWR1bGVyLm5vdygpKSA6IGVhY2gpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gdGltZW91dEVycm9yRmFjdG9yeShpbmZvKSB7XG4gICAgdGhyb3cgbmV3IFRpbWVvdXRFcnJvcihpbmZvKTtcbn1cblxuY2xhc3MgTG9hZGVkT25jZVB1Ymxpc2hlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0ID0gKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiwgaXNTdWNjZXNzOiB0cnVlLCBsb2FkZWRWYWx1ZTogdmFsdWUgfTtcbiAgICAgIHRoaXMuX3N1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgICB0aGlzLl9zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICB0aGlzLnRocm93ID0gKGVycm9yLCBlcnJNc2cpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiZXJyb3JcIiwgaXNTdWNjZXNzOiBmYWxzZSwgZXJyb3IsIGVyck1zZyB9O1xuICAgICAgdGhpcy5fc3ViamVjdC5lcnJvcihlcnJvcik7XG4gICAgfTtcbiAgICB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHZhbHVlSWZOb3RMb2FkZWQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiB0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlSWZOb3RMb2FkZWQ7XG4gICAgfTtcbiAgICB0aGlzLnN1YnNjcmliZSA9IChmbikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChuZXh0KTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiZXJyb3JcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAoZXJyb3IpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMud2FpdEZvckxvYWQgPSAodGltZW91dENvbmZpZykgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5fY3VycmVudC5lcnJvcik7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiKSBhc3NlcnROZXZlcih0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHRpbWVvdXRQYXJhbXMgPSB7XG4gICAgICAgIGZpcnN0OiB0aW1lb3V0Q29uZmlnLnRpbWVvdXRTZWMgKiAxZTMsXG4gICAgICAgIHdpdGg6ICgpID0+IHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKHRpbWVvdXRDb25maWcudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5fc3ViamVjdC5waXBlKHRpbWVvdXQodGltZW91dFBhcmFtcykpKTtcbiAgICB9O1xuICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogZmFsc2UgfTtcbiAgICB0aGlzLl9zdWJqZWN0ID0gbmV3IFN1YmplY3QoKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuXG56JDEuZW51bShbXCJkZXZcIiwgXCJzdGdcIiwgXCJwcm9kXCJdKTtcbmNvbnN0IGNvbm50b0Jhc2VVcmxzID0ge1xuICBwcm9kOiBcImh0dHBzOi8vY29ubnRvLmdldG9wZW5wYXkuY29tXCIsXG4gIHN0ZzogXCJodHRwczovL2Nvbm50by5vcGVucGF5c3RhZ2luZy5jb21cIixcbiAgZGV2OiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMFwiXG59O1xuY29uc3QgZ2V0Q29ubnRvVXJsID0gKGVudikgPT4ge1xuICByZXR1cm4gY29ubnRvQmFzZVVybHNbZW52XTtcbn07XG5cbmZ1bmN0aW9uIGFzc2VydE5ldmVyKHZhbHVlKSB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIGNhc2U6ICR7dmFsdWV9YCk7XG59XG5jb25zdCBnZXRXaW5kb3dTYWZlID0gKCkgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgcmV0dXJuIHdpbmRvdztcbn07XG5cbmNvbnN0IG1ldHJpY3NQdWJsaXNoZXIgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuY29uc3QgTUVUUklDU19RVUVVRV9LRVkgPSBcIm9wX21ldHJpY3NfcXVldWVcIjtcbmNvbnN0IE1BWF9SRVRSWV9BVFRFTVBUUyA9IDM7XG5jb25zdCBCQVRDSF9TSVpFID0gMztcbmNvbnN0IEJBVENIX0lOVEVSVkFMX01TID0gMWUzO1xuY29uc3QgeyBsb2dfXzogbG9nX18kMSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJvcC1tZXRyaWNzXCIpO1xuY2xhc3MgTWV0cmljc1F1ZXVlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gMDtcbiAgICB0aGlzLm9mZmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fJDEoXCJOZXR3b3JrIG9mZmxpbmUsIG1ldHJpY3Mgd2lsbCBiZSBxdWV1ZWRcIik7XG4gICAgICB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICAgIH07XG4gICAgdGhpcy5vbmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fJDEoXCJOZXR3b3JrIG9ubGluZSwgcHJvY2Vzc2luZyBtZXRyaWNzIHF1ZXVlXCIpO1xuICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9O1xuICAgIHRoaXMubG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gIH1cbiAgYWRkRXZlbnQoZXZlbnROYW1lLCBwcm9wZXJ0aWVzLCBjb250ZXh0UHJvcGVydGllcykge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnROYW1lLFxuICAgICAgcHJvcGVydGllczogcHJvcGVydGllcyB8fCB7fSxcbiAgICAgIGNvbnRleHRQcm9wZXJ0aWVzOiBjb250ZXh0UHJvcGVydGllcyB8fCB7fSxcbiAgICAgIG5vbmNlOiB2NCgpLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgZGF0ZXRpbWU6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIGF0dGVtcHRDb3VudDogMCxcbiAgICAgIHRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQ6IHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID8gRGF0ZS5ub3coKSAtIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wIDogMFxuICAgIH07XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSBldmVudC50aW1lc3RhbXA7XG4gICAgdGhpcy5xdWV1ZS5wdXNoKGV2ZW50KTtcbiAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxuICBsb2FkUXVldWVGcm9tU3RvcmFnZSgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkUXVldWUgPSBnZXRXaW5kb3dTYWZlKCk/LmxvY2FsU3RvcmFnZT8uZ2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSk7XG4gICAgICBpZiAoc3RvcmVkUXVldWUpIHtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IEpTT04ucGFyc2Uoc3RvcmVkUXVldWUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIH1cbiAgfVxuICBzYXZlUXVldWVUb1N0b3JhZ2UoKSB7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSwgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWV1ZSkpO1xuICB9XG4gIHNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIGNvbnN0IHNhZmVXaW5kb3cgPSBnZXRXaW5kb3dTYWZlKCk7XG4gICAgaWYgKHNhZmVXaW5kb3cgJiYgbmF2aWdhdG9yLm9uTGluZSAmJiAhdGhpcy5wcm9jZXNzaW5nUXVldWUgJiYgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmICF0aGlzLmJhdGNoVGltZW91dCkge1xuICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBzYWZlV2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgICB9LCBCQVRDSF9JTlRFUlZBTF9NUyk7XG4gICAgfVxuICB9XG4gIGNhbmNlbEJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBpZiAodGhpcy5iYXRjaFRpbWVvdXQpIHtcbiAgICAgIGdldFdpbmRvd1NhZmUoKT8uY2xlYXJUaW1lb3V0KHRoaXMuYmF0Y2hUaW1lb3V0KTtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgfVxuICBwcm9jZXNzUXVldWUoKSB7XG4gICAgaWYgKCFuYXZpZ2F0b3Iub25MaW5lIHx8IHRoaXMucHJvY2Vzc2luZ1F1ZXVlIHx8IHRoaXMucXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gdHJ1ZTtcbiAgICB0aGlzLnNlbmRCYXRjaCgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGFzeW5jIHNlbmRCYXRjaCgpIHtcbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBjb250ZXh0ID0gbWV0cmljc1B1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZSh2b2lkIDApO1xuICAgIGlmICghY29udGV4dCkge1xuICAgICAgbG9nX18kMShcIk1ldHJpY3MgY29udGV4dCBub3QgYXZhaWxhYmxlLCB3aWxsIHJldHJ5IGxhdGVyXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBiYXRjaCA9IHRoaXMucXVldWUuc2xpY2UoMCwgQkFUQ0hfU0laRSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhdGNoUGF5bG9hZCA9IHtcbiAgICAgICAgZXZlbnRzOiBiYXRjaC5tYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGV2ZW50X25hbWU6IGV2ZW50LmV2ZW50TmFtZSxcbiAgICAgICAgICAgIGRldmljZV90b2tlbjogY29udGV4dC5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGNvbnRleHRfcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAuLi5jb250ZXh0LFxuICAgICAgICAgICAgICAuLi5ldmVudC5jb250ZXh0UHJvcGVydGllc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgbm9uY2U6IGV2ZW50Lm5vbmNlLFxuICAgICAgICAgICAgICBkYXRldGltZTogZXZlbnQuZGF0ZXRpbWUsXG4gICAgICAgICAgICAgIHRpbWVzdGFtcDogZXZlbnQudGltZXN0YW1wLFxuICAgICAgICAgICAgICB0aW1lX2RpZmZfZnJvbV9wcmV2aW91c19ldmVudDogZXZlbnQudGltZURpZmZGcm9tUHJldmlvdXNFdmVudCxcbiAgICAgICAgICAgICAgY2hlY2tvdXRfc2VjdXJlX3Rva2VuOiBjb250ZXh0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICAgIC4uLmV2ZW50LnByb3BlcnRpZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbm50b1VybCA9IGdldENvbm50b1VybChjb250ZXh0LmVudmlyb25tZW50KTtcbiAgICAgIGNvbnN0IG1ldHJpY3NSb3V0ZXIgPSBuZXcgVVJMKFwiL21ldHJpY3MvcHVibGljL2NhcHR1cmVcIiwgY29ubnRvVXJsKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gobWV0cmljc1JvdXRlci50b1N0cmluZygpLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShiYXRjaFBheWxvYWQpXG4gICAgICB9KTtcbiAgICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICB0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZShiYXRjaC5sZW5ndGgpO1xuICAgICAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChiYXRjaCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ19fJDEoXCJFcnJvciBzZW5kaW5nIG1ldHJpY3MgYmF0Y2g6XCIsIGVycm9yKTtcbiAgICAgIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpO1xuICAgIH1cbiAgfVxuICBoYW5kbGVGYWlsZWRCYXRjaChiYXRjaCkge1xuICAgIGJhdGNoLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5hdHRlbXB0Q291bnQrKztcbiAgICB9KTtcbiAgICBjb25zdCBldmVudHNUb0tlZXAgPSBiYXRjaC5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5hdHRlbXB0Q291bnQgPCBNQVhfUkVUUllfQVRURU1QVFMpO1xuICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKGJhdGNoLmxlbmd0aCk7XG4gICAgdGhpcy5xdWV1ZSA9IFsuLi5ldmVudHNUb0tlZXAsIC4uLnRoaXMucXVldWVdO1xuICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gIH1cbiAgY2xlYW51cCgpIHtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gICAgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxufVxuY29uc3QgbWV0cmljc1F1ZXVlID0gbmV3IE1ldHJpY3NRdWV1ZSgpO1xuZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsICgpID0+IHtcbiAgbWV0cmljc1F1ZXVlLnByb2Nlc3NRdWV1ZSgpO1xufSk7XG5cbnokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG59KTtcblxuY29uc3QgZXh0cmFjdElzc3Vlc1BlckZpZWxkID0gKGVycm9yKSA9PiB7XG4gIGNvbnN0IGlzc3Vlc1BlckZpZWxkID0ge307XG4gIE9iamVjdC5lbnRyaWVzKGVycm9yKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gRmllbGROYW1lRW51bS5wYXJzZShrZXkpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGlzc3Vlc1BlckZpZWxkW2ZpZWxkTmFtZV0gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5fZXJyb3JzKSkge1xuICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWUuX2Vycm9ycztcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaXNzdWVzUGVyRmllbGQ7XG59O1xuXG5jb25zdCB7IGxvZ19fLCBlcnJfXzogZXJyX18kMSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG5jb25zdCBjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYSA9ICh7XG4gIHJlcXVpcmVfemlwX2NvZGUsXG4gIHJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3MsXG4gIHJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzLFxuICBwYXltZW50X21ldGhvZFxufSkgPT4ge1xuICBjb25zdCBjb25kaXRpb25hbEZpZWxkcyA9IHt9O1xuICBpZiAocGF5bWVudF9tZXRob2QgPT09IFwiYWNoXCIpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSB6JDEuc3RyaW5nKCkubWluKDIsIHsgbWVzc2FnZTogXCJNaW5pbXVtIGxlbmd0aCBpcyAyXCIgfSk7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSB6JDEuc3RyaW5nKCkubWluKDIsIHsgbWVzc2FnZTogXCJNaW5pbXVtIGxlbmd0aCBpcyAyXCIgfSk7XG4gIH1cbiAgaWYgKHJlcXVpcmVfemlwX2NvZGUpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdID0gUmVxdWlyZWRTdHJpbmc7XG4gIH1cbiAgaWYgKHJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3MpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuTElORTFdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkNJVFldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNUQVRFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBSZXF1aXJlZFN0cmluZztcbiAgfVxuICBpZiAocmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTFdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0NJVFldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX1NUQVRFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19aSVBfQ09ERV0gPSBSZXF1aXJlZFN0cmluZztcbiAgfVxuICBpZiAoT2JqZWN0LmtleXMoY29uZGl0aW9uYWxGaWVsZHMpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBSZXF1aXJlZEZvcm1GaWVsZHM7XG4gIH1cbiAgcmV0dXJuIFJlcXVpcmVkRm9ybUZpZWxkcy5leHRlbmQoY29uZGl0aW9uYWxGaWVsZHMpO1xufTtcbmNvbnN0IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcyA9IChub25DZGVGb3JtSW5wdXRzLCBvblZhbGlkYXRpb25FcnJvciwgZGVmYXVsdEZpZWxkVmFsdWVzID0ge30pID0+IHtcbiAgaWYgKGRlZmF1bHRGaWVsZFZhbHVlcykge1xuICAgIGxvZ19fKGBSZWNlaXZlZCBkZWZhdWx0IGZpZWxkIHZhbHVlczogJHtKU09OLnN0cmluZ2lmeShkZWZhdWx0RmllbGRWYWx1ZXMpfWApO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhkZWZhdWx0RmllbGRWYWx1ZXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGNvbnN0IHZhbHVlID0gZGVmYXVsdEZpZWxkVmFsdWVzW2tleV07XG4gICAgICBpZiAoIW5vbkNkZUZvcm1JbnB1dHNba2V5XSkge1xuICAgICAgICBub25DZGVGb3JtSW5wdXRzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSA9ICEhbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXTtcbiAgaWYgKG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLklTX1NISVBQSU5HX1NBTUVfQVNfQklMTElOR10pIHtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gPSBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5MSU5FMV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTJdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuTElORTJdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUzXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkxJTkUzXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkNJVFldO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1NUQVRFXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNUQVRFXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkNPVU5UUlldO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1pJUF9DT0RFXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXTtcbiAgfVxuICBjb25zdCB2YWxpZGF0aW9uU2NoZW1hID0gY3JlYXRlRHluYW1pY1ZhbGlkYXRpb25TY2hlbWEoZGVmYXVsdEZpZWxkVmFsdWVzKTtcbiAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGlvblNjaGVtYS5zYWZlUGFyc2Uobm9uQ2RlRm9ybUlucHV0cyk7XG4gIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSByZXN1bHQuZXJyb3IuZm9ybWF0KCk7XG4gICAgY29uc3QgaXNzdWVzID0gZXh0cmFjdElzc3Vlc1BlckZpZWxkKGZvcm1hdHRlZCk7XG4gICAgY29uc3QgaXNzdWVLZXlzID0gT2JqZWN0LmtleXMoaXNzdWVzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlzc3VlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gaXNzdWVLZXlzW2ldO1xuICAgICAgY29uc3QgZXJyb3JzID0gaXNzdWVzW2ZpZWxkTmFtZV07XG4gICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9ycywgZmllbGROYW1lKTtcbiAgICB9XG4gICAgZXJyX18kMShcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIGlzc3Vlcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQWxtb3N0IHRoZXJlISBKdXN0IGEgZmV3IHRoaW5ncyBoaWdobGlnaHRlZCBhYm92ZSB0byBmaXggYmVmb3JlIHlvdSBjYW4gc3VibWl0LlwiKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0LmRhdGE7XG59O1xuXG5jb25zdCBQYXltZW50UHJvY2Vzc29yID0geiQxLmVudW0oW1wic3RyaXBlXCIsIFwiYWlyd2FsbGV4XCIsIFwiYXV0aG9yaXplX25ldFwiLCBcImFkeWVuXCIsIFwicGF5cGFsXCIsIFwicG9ja3l0XCIsIFwibG9vcFwiXSk7XG4oe1xuICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgfVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBcIm9wLWFpcndhbGxleC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCI6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5jb25zdCBBV1hfTE9BRElORyA9IHtcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICB9XG59O1xuXG56JDEub2JqZWN0KHtcbiAgZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVzc2FnZUhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAgIGVycm9yczogeiQxLmFycmF5KHokMS5hbnkoKSksXG4gICAgbWVzc2FnZVR5cGU6IHokMS5zdHJpbmcoKSxcbiAgICBtZXNzYWdlQm9keTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgfSksXG4gIG9yaWdpbjogeiQxLmxpdGVyYWwoXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb21cIilcbn0pO1xuXG5jb25zdCBBZHllbkVudmlyb25tZW50ID0geiQxLmVudW0oW1widGVzdFwiLCBcImxpdmVcIiwgXCJsaXZlLXVzXCIsIFwibGl2ZS1pblwiLCBcImxpdmUtYXBzZVwiLCBcImxpdmUtYXVcIl0pO1xueiQxLmVudW0oW1xuICBcImFyXCIsXG4gIFwiYmctQkdcIixcbiAgXCJjYS1FU1wiLFxuICBcImNzLUNaXCIsXG4gIFwiZGEtREtcIixcbiAgXCJkZS1ERVwiLFxuICBcImVsLUdSXCIsXG4gIFwiZW4tVVNcIixcbiAgXCJlcy1FU1wiLFxuICBcImV0LUVFXCIsXG4gIFwiZmktRklcIixcbiAgXCJmci1GUlwiLFxuICBcImhyLUhSXCIsXG4gIFwiaHUtSFVcIixcbiAgXCJpcy1JU1wiLFxuICBcIml0LUlUXCIsXG4gIFwiamEtSlBcIixcbiAgXCJrby1LUlwiLFxuICBcImx0LUxUXCIsXG4gIFwibHYtTFZcIixcbiAgXCJubC1OTFwiLFxuICBcIm5vLU5PXCIsXG4gIFwicGwtUExcIixcbiAgXCJwdC1CUlwiLFxuICBcInB0LVBUXCIsXG4gIFwicm8tUk9cIixcbiAgXCJydS1SVVwiLFxuICBcInNrLVNLXCIsXG4gIFwic2wtU0lcIixcbiAgXCJzdi1TRVwiLFxuICBcInpoLUNOXCIsXG4gIFwiemgtVFdcIlxuXSk7XG56JDEub2JqZWN0KHtcbiAgXCJvcC1hY2NvdW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1jbGllbnQta2V5XCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiOiBBZHllbkVudmlyb25tZW50LFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWR5ZW5cIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWR5ZW5cIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG52YXIgRW52aXJvbm1lbnQgPSAvKiBAX19QVVJFX18gKi8gKChFbnZpcm9ubWVudDIpID0+IHtcbiAgRW52aXJvbm1lbnQyW1wiTG9jYWxcIl0gPSBcImxvY2FsXCI7XG4gIEVudmlyb25tZW50MltcIkRldmVsb3BtZW50XCJdID0gXCJkZXZlbG9wbWVudFwiO1xuICBFbnZpcm9ubWVudDJbXCJTdGFnaW5nXCJdID0gXCJzdGFnaW5nXCI7XG4gIEVudmlyb25tZW50MltcIkRlbW9cIl0gPSBcImRlbW9cIjtcbiAgRW52aXJvbm1lbnQyW1wiUHJvZHVjdGlvblwiXSA9IFwicHJvZHVjdGlvblwiO1xuICByZXR1cm4gRW52aXJvbm1lbnQyO1xufSkoRW52aXJvbm1lbnQgfHwge30pO1xudmFyIFBheUluRmFpbGVkID0gLyogQF9fUFVSRV9fICovICgoUGF5SW5GYWlsZWQyKSA9PiB7XG4gIFBheUluRmFpbGVkMltcIk1FVEhPRF9DUkVBVElPTl9GQUlMRURcIl0gPSBcIm1ldGhvZENyZWF0aW9uRmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIklOU1VGRklDSUVOVF9CQUxBTkNFXCJdID0gXCJpbnN1ZmZpY2llbnRCYWxhbmNlXCI7XG4gIFBheUluRmFpbGVkMltcIklOU1VGRklDSUVOVF9BVVRIT1JJWkFUSU9OXCJdID0gXCJpbnN1ZmZpY2llbnRBdXRob3JpemF0aW9uXCI7XG4gIFBheUluRmFpbGVkMltcIlNJR05FRF9NRVNTQUdFX1JFUVVJUkVEXCJdID0gXCJzaWduZWRNZXNzYWdlUmVxdWlyZWRcIjtcbiAgUGF5SW5GYWlsZWQyW1wiQ1VTVE9NRVJfQ1JFQVRJT05fRkFJTEVEXCJdID0gXCJjdXN0b21lckNyZWF0aW9uRmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIlBBWU1FTlRfRkFJTEVEXCJdID0gXCJwYXltZW50RmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIlRSQU5TQUNUSU9OX0ZBSUxFRFwiXSA9IFwidHJhbnNhY3Rpb25GYWlsZWRcIjtcbiAgcmV0dXJuIFBheUluRmFpbGVkMjtcbn0pKFBheUluRmFpbGVkIHx8IHt9KTtcbnZhciBQYXlJblN0YXRlID0gLyogQF9fUFVSRV9fICovICgoUGF5SW5TdGF0ZTIpID0+IHtcbiAgUGF5SW5TdGF0ZTJbXCJJRExFXCJdID0gXCJpZGxlXCI7XG4gIFBheUluU3RhdGUyW1wiQ09ORklSTUlOR19CQUxBTkNFXCJdID0gXCJjb25maXJtaW5nQmFsYW5jZVwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfQVVUSE9SSVpBVElPTlwiXSA9IFwiY29uZmlybWluZ0F1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5TdGF0ZTJbXCJVUERBVElOR19BVVRIT1JJWkFUSU9OXCJdID0gXCJ1cGRhdGluZ0F1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5TdGF0ZTJbXCJTSUdOSU5HX01FU1NBR0VcIl0gPSBcInNpZ25pbmdNZXNzYWdlXCI7XG4gIFBheUluU3RhdGUyW1wiQ1JFQVRJTkdfQ1VTVE9NRVJcIl0gPSBcImNyZWF0aW5nQ3VzdG9tZXJcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDUkVBVElOR19QQVlNRU5UX01FVEhPRFwiXSA9IFwiY3JlYXRpbmdQYXltZW50TWV0aG9kXCI7XG4gIFBheUluU3RhdGUyW1wiUFJPQ0VTU0lOR19QQVlNRU5UXCJdID0gXCJwcm9jZXNzaW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNSRUFUSU5HX1BBWU1FTlRcIl0gPSBcImNyZWF0aW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfUEFZTUVOVFwiXSA9IFwiY29uZmlybWluZ1BheW1lbnRcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDT01QTEVURVwiXSA9IFwiY29tcGxldGVcIjtcbiAgUGF5SW5TdGF0ZTJbXCJBVVRIT1JJWkVEXCJdID0gXCJhdXRob3JpemVkXCI7XG4gIHJldHVybiBQYXlJblN0YXRlMjtcbn0pKFBheUluU3RhdGUgfHwge30pO1xuXG5jb25zdCBMT09QX0xPQURJTkcgPSB7XG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBjb25maWc6IG51bGwsXG4gIHdpZGdldDogbnVsbFxufTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3QoeyBjbGllbnRfaWQ6IHokMS5zdHJpbmcoKSB9KSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHokMS5zdHJpbmcoKSxcbiAgICB2ZXJpZnlfdG9rZW46IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnVuaW9uKFt6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcblxuY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJmb3JtLWNhbGxiYWNrc1wiKTtcbmNvbnN0IE9wdGlvbmFsRm4gPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpO1xuY29uc3QgWm9kRm9ybUNhbGxiYWNrcyA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiBPcHRpb25hbEZuLFxuICBvbkJsdXI6IE9wdGlvbmFsRm4sXG4gIG9uQ2hhbmdlOiBPcHRpb25hbEZuLFxuICBvbkxvYWQ6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZEVycm9yOiBPcHRpb25hbEZuLFxuICBvblZhbGlkYXRpb25FcnJvcjogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IE9wdGlvbmFsRm5cbn0pO1xuY2xhc3MgRm9ybUNhbGxiYWNrcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIFNldHMgQUxMIGZvcm0gY2FsbGJhY2tzLiBOb3RlIHRoYXQgYWxsIG9sZCBjYWxsYmFja3MgYXJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocmF3Q2FsbGJhY2tzKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gICAgICBPYmplY3QuZW50cmllcyhyYXdDYWxsYmFja3MpLmZvckVhY2goKFtrZXksIHJhd0NhbGxiYWNrXSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZlQ2FsbGJhY2sgPSBtYWtlQ2FsbGJhY2tTYWZlKGtleSwgcmF3Q2FsbGJhY2sgPz8gRm9ybUNhbGxiYWNrcy5OT09QLCBlcnJfXyk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1trZXldID0gc2FmZUNhbGxiYWNrO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLk5PT1AgPSAoKSA9PiB7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gICAgICBjb25zdCB4ID0ge307XG4gICAgICBPYmplY3Qua2V5cyhab2RGb3JtQ2FsbGJhY2tzLmtleW9mKCkuZW51bSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHhba2V5XSA9IEZvcm1DYWxsYmFja3MuTk9PUDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZnJvbU9iamVjdCA9IChvYmopID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEZvcm1DYWxsYmFja3MoKTtcbiAgICAgIGluc3RhbmNlLnNldENhbGxiYWNrcyhab2RGb3JtQ2FsbGJhY2tzLnBhcnNlKG9iaikpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn1cblxudmFyIFN1Ym1pdE1ldGhvZHMgPSAvKiBAX19QVVJFX18gKi8gKChTdWJtaXRNZXRob2RzMikgPT4ge1xuICBTdWJtaXRNZXRob2RzMltcInBvY2t5dFBheXBhbFwiXSA9IFwicG9ja3l0LXBheXBhbFwiO1xuICBTdWJtaXRNZXRob2RzMltcImFwcGxlUGF5XCJdID0gXCJhcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJnb29nbGVQYXlcIl0gPSBcImdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJsb29wQ3J5cHRvXCJdID0gXCJsb29wLWNyeXB0b1wiO1xuICBTdWJtaXRNZXRob2RzMltcInBheXBhbFwiXSA9IFwicGF5cGFsXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4R29vZ2xlUGF5XCJdID0gXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEFwcGxlUGF5XCJdID0gXCJhaXJ3YWxsZXgtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXV0aG9yaXplbmV0R29vZ2xlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEFwcGxlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWR5ZW5Hb29nbGVQYXlcIl0gPSBcImFkeWVuLWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhZHllbkFwcGxlUGF5XCJdID0gXCJhZHllbi1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhBQ0hcIl0gPSBcImFpcndhbGxleC1hY2hcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhFRlRcIl0gPSBcImFpcndhbGxleC1lZnRcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhCQUNTXCJdID0gXCJhaXJ3YWxsZXgtYmFjc1wiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleFNFUEFcIl0gPSBcImFpcndhbGxleC1zZXBhXCI7XG4gIHJldHVybiBTdWJtaXRNZXRob2RzMjtcbn0pKFN1Ym1pdE1ldGhvZHMgfHwge30pO1xueiQxLm5hdGl2ZUVudW0oU3VibWl0TWV0aG9kcyk7XG5cbmNvbnN0IE1PQklMRV9XQUxMRVRfTE9BRElOR19TVEFURSA9IHtcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIHByb2Nlc3NvcnM6IFtdLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgc3RhcnRGbG93IHRyaWdnZXJlZCB3aGlsZSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbm90IHJlYWR5LiBcbiAgICAgIFlvdSBjYW4gY2hlY2sgdGhlIFwiLmlzTG9hZGluZ1wiIHBhcmFtIHRvIGtub3cgd2hlbiBhIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBsb2FkaW5nLCBcbiAgICAgIGFuZCBcIi5pc0F2YWlsYWJsZVwiIHRvIGtub3cgaWYgYSBwYXltZW50IHJlcXVlc3QgaXMgYXZhaWxhYmxlLmBcbiAgICApO1xuICB9XG59O1xuY29uc3QgZ2V0QXBwbGVQYXlQcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBhcHBsZVBheUluaXRGbG93cyA9IFtpbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXksIGluaXRGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheSwgaW5pdEZsb3dzLmFkeWVuQXBwbGVQYXldO1xuICBjb25zdCBhcHBsZVBheUluaXRSZXN1bHRzID0gW107XG4gIGFwcGxlUGF5SW5pdEZsb3dzLmZvckVhY2goKGZsb3cpID0+IHtcbiAgICBjb25zdCBmbG93VmFsdWUgPSBmbG93LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICBpZiAoZmxvd1ZhbHVlPy5pc0F2YWlsYWJsZSkge1xuICAgICAgYXBwbGVQYXlJbml0UmVzdWx0cy5wdXNoKGZsb3dWYWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc3RyaXBlUFJGbG93UmVzdWx0ID0gaW5pdEZsb3dzLnN0cmlwZVBSLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgaWYgKHN0cmlwZVBSRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUpIHtcbiAgICBjb25zdCBpc0FwcGxlUGF5QXZhaWxhYmxlID0gc3RyaXBlUFJGbG93UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheTtcbiAgICBpZiAoaXNBcHBsZVBheUF2YWlsYWJsZSkge1xuICAgICAgYXBwbGVQYXlJbml0UmVzdWx0cy5wdXNoKHtcbiAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiBzdHJpcGVQUkZsb3dSZXN1bHQuc3RhcnRGbG93KFwiYXBwbGVfcGF5XCIsIHtcbiAgICAgICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjdXN0b21QYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHByb2Nlc3NvcnM6IGFwcGxlUGF5SW5pdFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiBhcHBsZVBheUluaXRSZXN1bHRzLmxlbmd0aCA+IDAsXG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHJldHVybiBzdGFydEFwcGxlUGF5RmxvdyhhcHBsZVBheUluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBnZXRHb29nbGVQYXlQcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBnb29nbGVQYXlJbml0Rmxvd3MgPSBbaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheSwgaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEdvb2dsZVBheSwgaW5pdEZsb3dzLmFkeWVuR29vZ2xlUGF5XTtcbiAgY29uc3QgZ29vZ2xlUGF5SW5pdFJlc3VsdHMgPSBbXTtcbiAgZ29vZ2xlUGF5SW5pdEZsb3dzLmZvckVhY2goKGZsb3cpID0+IHtcbiAgICBjb25zdCBmbG93VmFsdWUgPSBmbG93LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICBpZiAoZmxvd1ZhbHVlPy5pc0F2YWlsYWJsZSkge1xuICAgICAgZ29vZ2xlUGF5SW5pdFJlc3VsdHMucHVzaChmbG93VmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IHN0cmlwZVBSRmxvd1Jlc3VsdCA9IGluaXRGbG93cy5zdHJpcGVQUi5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIGlmIChzdHJpcGVQUkZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlKSB7XG4gICAgY29uc3QgaXNHb29nbGVQYXlBdmFpbGFibGUgPSBzdHJpcGVQUkZsb3dSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheTtcbiAgICBpZiAoaXNHb29nbGVQYXlBdmFpbGFibGUpIHtcbiAgICAgIGdvb2dsZVBheUluaXRSZXN1bHRzLnB1c2goe1xuICAgICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHN0cmlwZVBSRmxvd1Jlc3VsdC5zdGFydEZsb3coXCJnb29nbGVfcGF5XCIsIHtcbiAgICAgICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjdXN0b21QYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHByb2Nlc3NvcnM6IGdvb2dsZVBheUluaXRSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZTogZ29vZ2xlUGF5SW5pdFJlc3VsdHMubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIHN0YXJ0R29vZ2xlUGF5Rmxvdyhnb29nbGVQYXlJbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gIH07XG59O1xuY29uc3Qgc3RhcnRBcHBsZVBheUZsb3cgPSAoaW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcykgPT4ge1xuICBpZiAoY3VzdG9tUGFyYW1zPy5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBmbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yID09PSBjdXN0b21QYXJhbXMucHJvY2Vzc29yKTtcbiAgICBpZiAoZmxvdz8uaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBBcHBsZSBQYXkgcHJvY2Vzc29yICR7Y3VzdG9tUGFyYW1zLnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IGF2YWlsYWJsZUZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5pc0F2YWlsYWJsZSk7XG4gIGlmIChhdmFpbGFibGVGbG93KSB7XG4gICAgcmV0dXJuIGF2YWlsYWJsZUZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEFwcGxlIFBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuY29uc3Qgc3RhcnRHb29nbGVQYXlGbG93ID0gKGluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpID0+IHtcbiAgaWYgKGN1c3RvbVBhcmFtcz8ucHJvY2Vzc29yKSB7XG4gICAgY29uc3QgZmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciA9PT0gY3VzdG9tUGFyYW1zLnByb2Nlc3Nvcik7XG4gICAgaWYgKGZsb3c/LmlzQXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4gZmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZWQgR29vZ2xlIFBheSBwcm9jZXNzb3IgJHtjdXN0b21QYXJhbXMucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgYXZhaWxhYmxlRmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LmlzQXZhaWxhYmxlKTtcbiAgaWYgKGF2YWlsYWJsZUZsb3cpIHtcbiAgICByZXR1cm4gYXZhaWxhYmxlRmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgR29vZ2xlIFBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuXG5jb25zdCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyA9IChzdHlsZXMpID0+IHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0eWxlcyA9IEpTT04uc3RyaW5naWZ5KHN0eWxlcyk7XG4gIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xufTtcblxuY29uc3QgRWxlbWVudHNDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG4gIGZvcm1JZDogXCJcIixcbiAgZm9ybUhlaWdodDogXCJcIixcbiAgcmVmZXJyZXI6IHZvaWQgMCxcbiAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdm9pZCAwLFxuICByZWdpc3RlcklmcmFtZTogKCkgPT4ge1xuICB9LFxuICBiYXNlVXJsOiBcIlwiXG59KTtcblxuY29uc3QgdXNlT3BlblBheUVsZW1lbnRzID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChFbGVtZW50c0NvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VPcGVuUGF5RWxlbWVudHMgbXVzdCBiZSB1c2VkIHdpdGhpbiBhbiBPcGVuUGF5RWxlbWVudHNQcm92aWRlclwiKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn07XG5cbmNvbnN0IEVsZW1lbnRGcmFtZSA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGVsZW1lbnRUeXBlLCBzdHlsZXMgfSA9IHByb3BzO1xuICBjb25zdCB7IGZvcm1JZCwgcmVmZXJyZXIsIGZvcm1IZWlnaHQsIGNoZWNrb3V0U2VjdXJlVG9rZW4sIHJlZ2lzdGVySWZyYW1lLCBiYXNlVXJsIH0gPSB1c2VPcGVuUGF5RWxlbWVudHMoKTtcbiAgY29uc3Qgc3ViUGF0aCA9IGVsZW1lbnRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IFtoYXNMb2FkZWQsIHNldEhhc0xvYWRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGlmcmFtZVJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgZWxlbWVudFN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFzdHlsZXMpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyhzdHlsZXMpO1xuICB9LCBbc3R5bGVzXSk7XG4gIGNvbnN0IGZyYW1lU3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgIGhlaWdodDogZm9ybUhlaWdodFxuICAgIH07XG4gIH0sIFtmb3JtSGVpZ2h0XSk7XG4gIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFjaGVja291dFNlY3VyZVRva2VuIHx8ICFyZWZlcnJlcikgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJyZWZlcmVyXCIsIHJlZmVycmVyKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic3R5bGVzXCIsIGVsZW1lbnRTdHlsZSk7XG4gICAgcGFyYW1zLmFwcGVuZChcImZvcm1JZFwiLCBmb3JtSWQpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCBjaGVja291dFNlY3VyZVRva2VuKTtcbiAgICByZXR1cm4gcGFyYW1zLnRvU3RyaW5nKCk7XG4gIH0sIFtlbGVtZW50U3R5bGUsIGZvcm1JZCwgcmVmZXJyZXIsIGNoZWNrb3V0U2VjdXJlVG9rZW5dKTtcbiAgdXNlRWZmZWN0KCgpID0+IHNldEhhc0xvYWRlZCh0cnVlKSwgW10pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaWZyYW1lUmVmLmN1cnJlbnQgfHwgIWhhc0xvYWRlZCkgcmV0dXJuO1xuICAgIHJlZ2lzdGVySWZyYW1lKGVsZW1lbnRUeXBlLCBpZnJhbWVSZWYuY3VycmVudCk7XG4gIH0sIFtoYXNMb2FkZWRdKTtcbiAgaWYgKCFjaGVja291dFNlY3VyZVRva2VuKSB7XG4gICAgY29uc29sZS5lcnJvcihcIltmb3JtXSBDYW5ub3QgcmVuZGVyIHBhcnRpYWxseSBpbml0aWFsaXplZCBmcmFtZVwiKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcImRpdlwiLCB7fSk7XG4gIH1cbiAgY29uc3QgdXJsID0gbmV3IFVSTChgL2FwcC92MS8ke3N1YlBhdGh9LWVsZW1lbnQvYCwgYmFzZVVybCk7XG4gIHVybC5zZWFyY2ggPSBxdWVyeVN0cmluZztcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgXCJpZnJhbWVcIixcbiAgICB7XG4gICAgICBpZDogYG9qcy0ke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgbmFtZTogYCR7c3ViUGF0aH0tZWxlbWVudGAsXG4gICAgICBjbGFzc05hbWU6IFwib2pzLWlmcmFtZVwiLFxuICAgICAgc3JjOiB1cmwudG9TdHJpbmcoKSxcbiAgICAgIHN0eWxlOiBmcmFtZVN0eWxlLFxuICAgICAgcmVmOiBpZnJhbWVSZWZcbiAgICB9XG4gICk7XG59O1xuXG5jb25zdCBDYXJkRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRCB9KTtcbn07XG5cbmNvbnN0IENhcmRDdmNFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0NWQyB9KTtcbn07XG5cbmNvbnN0IENhcmRFeHBpcnlFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0VYUElSWSB9KTtcbn07XG5cbmNvbnN0IENhcmROdW1iZXJFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX05VTUJFUiB9KTtcbn07XG5cbmZ1bmN0aW9uIGlvKGUsIHQpIHtcbiAgdmFyIHIgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIHIgPyByKGUsIHQpIDogZS5fX3Byb3RvX18gPSB0O1xufVxuZnVuY3Rpb24gc28oZSwgdCkge1xuICB0ID09PSB2b2lkIDAgJiYgKHQgPSBlLmNvbnN0cnVjdG9yKTtcbiAgdmFyIHIgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgciAmJiByKGUsIHQpO1xufVxudmFyIGNvID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkge1xuICB2YXIgZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICByZXR1cm4gZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICBfX3Byb3RvX186IFtdXG4gICAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKGEsIG8pIHtcbiAgICAgIGEuX19wcm90b19fID0gbztcbiAgICB9IHx8IGZ1bmN0aW9uKGEsIG8pIHtcbiAgICAgIGZvciAodmFyIHMgaW4gbylcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHMpICYmIChhW3NdID0gb1tzXSk7XG4gICAgfSwgZShyLCBuKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQsIHIpIHtcbiAgICBpZiAodHlwZW9mIHIgIT0gXCJmdW5jdGlvblwiICYmIHIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKHIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICBlKHQsIHIpO1xuICAgIGZ1bmN0aW9uIG4oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gdDtcbiAgICB9XG4gICAgdC5wcm90b3R5cGUgPSByID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShyKSA6IChuLnByb3RvdHlwZSA9IHIucHJvdG90eXBlLCBuZXcgbigpKTtcbiAgfTtcbn0oKSwgbG8gPSBmdW5jdGlvbihlKSB7XG4gIGNvKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICB2YXIgYSA9IHRoaXMuY29uc3RydWN0b3IsIG8gPSBlLmNhbGwodGhpcywgciwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogYS5uYW1lLFxuICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfSksIGlvKG8sIGEucHJvdG90eXBlKSwgc28obyksIG87XG4gIH1cbiAgcmV0dXJuIHQ7XG59KEVycm9yKTtcbmNvbnN0IGsgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IFwiUGxlYXNlIGZpbGwgaW4gdGhpcyBmaWVsZFwiIH0pLCBTID0geiQxLnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpLCB4ID0gKGUpID0+IHokMS5udWxsYWJsZShlLm9wdGlvbmFsKCkpO1xudmFyIHAgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5GSVJTVF9OQU1FID0gXCJmaXJzdE5hbWVcIiwgZS5MQVNUX05BTUUgPSBcImxhc3ROYW1lXCIsIGUuUEhPTkUgPSBcInBob25lXCIsIGUuRU1BSUwgPSBcImVtYWlsXCIsIGUuTElORTEgPSBcImxpbmUxXCIsIGUuTElORTIgPSBcImxpbmUyXCIsIGUuTElORTMgPSBcImxpbmUzXCIsIGUuQ0lUWSA9IFwiY2l0eVwiLCBlLlNUQVRFID0gXCJzdGF0ZVwiLCBlLkNPVU5UUlkgPSBcImNvdW50cnlcIiwgZS5aSVBfQ09ERSA9IFwiemlwQ29kZVwiLCBlLlNISVBQSU5HX0xJTkUxID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiLCBlLlNISVBQSU5HX0xJTkUyID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiLCBlLlNISVBQSU5HX0xJTkUzID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lM1wiLCBlLlNISVBQSU5HX0NJVFkgPSBcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiwgZS5TSElQUElOR19TVEFURSA9IFwic2hpcHBpbmdBZGRyZXNzU3RhdGVcIiwgZS5TSElQUElOR19DT1VOVFJZID0gXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCIsIGUuU0hJUFBJTkdfWklQX0NPREUgPSBcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiwgZS5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkcgPSBcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCIsIGUuUFJPTU9USU9OX0NPREUgPSBcInByb21vdGlvbkNvZGVcIiwgZSkpKHAgfHwge30pO1xuY29uc3QgcXIgPSB6JDEubmF0aXZlRW51bShwKTtcbnZhciB6ciA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLkNBUkRfTlVNQkVSID0gXCJjYXJkTnVtYmVyXCIsIGUuQ0FSRF9FWFBJUlkgPSBcImNhcmRFeHBpcnlcIiwgZS5DQVJEX0NWQyA9IFwiY2FyZEN2Y1wiLCBlKSkoenIgfHwge30pO1xuY29uc3QgSHIgPSB6JDEubmF0aXZlRW51bSh6ciksIEJyID0geiQxLnVuaW9uKFtxciwgSHJdKTtcbnZhciBfZSA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLkNBUkQgPSBcImNhcmRcIiwgZS5DQVJEX05VTUJFUiA9IFwiY2FyZC1udW1iZXJcIiwgZS5DQVJEX0VYUElSWSA9IFwiY2FyZC1leHBpcnlcIiwgZS5DQVJEX0NWQyA9IFwiY2FyZC1jdmNcIiwgZS5DREVfQlJJREdFID0gXCJjZGUtYnJpZGdlXCIsIGUpKShfZSB8fCB7fSk7XG5jb25zdCB1byA9IHokMS5uYXRpdmVFbnVtKF9lKSwgU3QgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IHgoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IHgoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgcG8gPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2FyZE51bWJlcjogUyxcbiAgZXhwaXJ5OiBTLFxuICBjdmM6IFNcbn0pO1xueiQxLm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogUyxcbiAgY29sb3I6IFMsXG4gIGZvbnRGYW1pbHk6IFMsXG4gIGZvbnRTaXplOiBTLFxuICBmb250V2VpZ2h0OiBTLFxuICBtYXJnaW46IFMsXG4gIHBhZGRpbmc6IFMsXG4gIGxldHRlclNwYWNpbmc6IFMsXG4gIGxpbmVIZWlnaHQ6IFMsXG4gIGhpZGVJY29uOiBTXG59KTtcbmNvbnN0IHNlID0geiQxLmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSksIF9vID0gc2UuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSksIG1vID0geiQxLm9iamVjdCh7IHR5cGU6IF9vIH0pLCBmbyA9IHNlLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKSwgeW8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogZm8sXG4gIGVsZW1lbnRUeXBlOiBIcixcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKS5vcHRpb25hbCgpLFxuICBvYmZ1c2NhdGVkVmFsdWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KSwgaG8gPSBzZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKSwgZ28gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogaG8sXG4gIG1lc3NhZ2U6IGssXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pLCB3byA9IHNlLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSksIHZvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHdvLFxuICBlbGVtZW50VHlwZTogQnIsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pLCBibyA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChzZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDoga1xufSksIEVvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKHNlLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBrLFxuICB0b3RhbEFtb3VudEF0b21zOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBTLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6JDEuYXJyYXkoU3QpXG59KSwgUG8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoc2UuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHokMS5vcHRpb25hbCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBTbyA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChzZS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHokMS5zdHJpbmcoKVxufSksIE9lID0geiQxLm9iamVjdCh7XG4gIGVtYWlsOiBrLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIGZpcnN0TmFtZTogayxcbiAgbGFzdE5hbWU6IGssXG4gIHByb21vdGlvbkNvZGU6IFMsXG4gIGxpbmUxOiBTLFxuICBsaW5lMjogUyxcbiAgbGluZTM6IFMsXG4gIGNpdHk6IFMsXG4gIHN0YXRlOiBTLFxuICBjb3VudHJ5OiBrLFxuICB6aXBDb2RlOiBTLFxuICBpc1NoaXBwaW5nU2FtZUFzQmlsbGluZzogeiQxLmN1c3RvbSgpLm9wdGlvbmFsKCkuZGVmYXVsdCghMCksXG4gIHNoaXBwaW5nQWRkcmVzc0xpbmUxOiBTLFxuICBzaGlwcGluZ0FkZHJlc3NMaW5lMjogUyxcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTM6IFMsXG4gIHNoaXBwaW5nQWRkcmVzc0NpdHk6IFMsXG4gIHNoaXBwaW5nQWRkcmVzc1N0YXRlOiBTLFxuICBzaGlwcGluZ0FkZHJlc3NDb3VudHJ5OiBTLFxuICBzaGlwcGluZ0FkZHJlc3NaaXBDb2RlOiBTXG59KSwgQ28gPSB6JDEub2JqZWN0KHtcbiAgZW1haWw6IGsuZW1haWwoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIiB9KSxcbiAgZmlyc3ROYW1lOiBTLFxuICBsYXN0TmFtZTogUyxcbiAgcHJvbW90aW9uQ29kZTogUyxcbiAgbGluZTE6IFMsXG4gIGxpbmUyOiBTLFxuICBsaW5lMzogUyxcbiAgY2l0eTogUyxcbiAgc3RhdGU6IFMsXG4gIGNvdW50cnk6IGssXG4gIHppcENvZGU6IFMsXG4gIGlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nOiB6JDEuY3VzdG9tKCkub3B0aW9uYWwoKS5kZWZhdWx0KCEwKSxcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTE6IFMsXG4gIHNoaXBwaW5nQWRkcmVzc0xpbmUyOiBTLFxuICBzaGlwcGluZ0FkZHJlc3NMaW5lMzogUyxcbiAgc2hpcHBpbmdBZGRyZXNzQ2l0eTogUyxcbiAgc2hpcHBpbmdBZGRyZXNzU3RhdGU6IFMsXG4gIHNoaXBwaW5nQWRkcmVzc0NvdW50cnk6IFMsXG4gIHNoaXBwaW5nQWRkcmVzc1ppcENvZGU6IFNcbn0pO1xueiQxLm9iamVjdCh7XG4gIGxpbmUxOiBrLFxuICBjaXR5OiBrLFxuICBzdGF0ZTogayxcbiAgY291bnRyeToga1xufSk7XG56JDEub2JqZWN0KHtcbiAgc2hpcHBpbmdBZGRyZXNzQ291bnRyeTogayxcbiAgc2hpcHBpbmdBZGRyZXNzWmlwQ29kZToga1xufSk7XG56JDEub2JqZWN0KHtcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTE6IGssXG4gIHNoaXBwaW5nQWRkcmVzc0NpdHk6IGssXG4gIHNoaXBwaW5nQWRkcmVzc1N0YXRlOiBrLFxuICBzaGlwcGluZ0FkZHJlc3NDb3VudHJ5OiBrLFxuICBzaGlwcGluZ0FkZHJlc3NaaXBDb2RlOiBrXG59KTtcbmNvbnN0IGtvID0gc2UuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKSwgQW8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZToga28sXG4gIHNlc3Npb25JZDogayxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBTdCxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBTLFxuICBwYXltZW50Um91dGVJZDogU1xufSkuZXh0ZW5kKE9lLnNoYXBlKSwgSW8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoc2UuZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6JDEuYm9vbGVhbigpXG59KSwgVG8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoc2UuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6JDEuc3RyaW5nKClcbn0pLCBSbyA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgbW8sXG4gIHlvLFxuICBnbyxcbiAgdm8sXG4gIGJvLFxuICBFbyxcbiAgQW8sXG4gIElvLFxuICBUbyxcbiAgUG8sXG4gIFNvXG5dKSwgTm8gPSB6JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogUm8sXG4gIG5vbmNlOiBrLFxuICBmb3JtSWQ6IGssXG4gIGVsZW1lbnRJZDoga1xufSk7XG56JDEub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogeiQxLm51bWJlcigpLFxuICAvKipcbiAgICogVGhlIHRocmVlLWxldHRlciBJU08gNDIxNyBjdXJyZW5jeSBjb2RlIGZvciB0aGUgcGF5bWVudC5cbiAgICovXG4gIGN1cnJlbmN5OiBrXG59KTtcbnokMS5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBleGlzdGluZ19jY19wbV9pZDogeCh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogeCh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiB4KHokMS5zdHJpbmcoKSksXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogeCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgbnQgPSB6JDEub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3NvcnNfdXNlZDogeCh6JDEuYXJyYXkoeiQxLnN0cmluZygpKSlcbn0pLCBGbyA9IHokMS5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogeiQxLnN0cmluZygpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgTW8gPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoITEpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KEZvKVxufSksIExvID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6JDEub2JqZWN0KHsgc3VjY2VzczogeiQxLmxpdGVyYWwoITApIH0pLFxuICBNb1xuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogU3QsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IE9lLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB4KHokMS5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogeCh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogeCh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBTdCxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogT2UsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiB4KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB4KHokMS5zdHJpbmcoKSlcbn0pO1xudmFyIEYgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5TVUNDRVNTID0gXCJzdWNjZXNzXCIsIGUuRkFJTFVSRSA9IFwiZmFpbHVyZVwiLCBlLkNBTkNFTExFRCA9IFwiY2FuY2VsbGVkXCIsIGUpKShGIHx8IHt9KTtcbmNvbnN0IERvID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1xuICAgIFwic3VjY2Vzc1wiLFxuICAgIFwiZmFpbHVyZVwiLFxuICAgIFwiY2FuY2VsbGVkXCJcbiAgICAvKiBDQU5DRUxMRUQgKi9cbiAgXSksXG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuY29uc3QgeG8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHokMS5zdHJpbmcoKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogeiQxLnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pLCBPbyA9IHokMS5vYmplY3Qoe1xuICBiYW5rX25hbWU6IHokMS5zdHJpbmcoKSxcbiAgZGlzcGxheV9uYW1lOiB6JDEuc3RyaW5nKCksXG4gIHJlc291cmNlczogeiQxLm9iamVjdCh7XG4gICAgbG9nb191cmw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG4gIH0pXG59KSwgWXIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHgoeiQxLnN0cmluZygpKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IHgoeiQxLnN0cmluZygpKSxcbiAgY29uc2VudF9pZDogeCh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogeCh6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3Nlc3Npb246IHgoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBhdmFpbGFibGVfYmFua3M6IHgoeiQxLmFycmF5KE9vKSlcbn0pLCBVbyA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKCEwKSwgaHJlZjogeiQxLnN0cmluZygpIH0pLFxuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoITEpIH0pXG5dKSwgam8gPSB6JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6JDEuYXJyYXkocG8pLFxuICBwYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZTogeChudCksXG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeCh6JDEuYXJyYXkoWXIpKSxcbiAgcG9zdF9jaGVja291dF9yZWRpcmVjdF90bzogeCh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiB4KG50KVxufSksICRvID0geiQxLm9iamVjdCh7XG4gIGluc3RpdHV0aW9uTnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIHRyYW5zaXROdW1iZXI6IHokMS5zdHJpbmcoKSxcbiAgYWNjb3VudE51bWJlcjogeiQxLnN0cmluZygpLFxuICBhY2NvdW50VHlwZTogeiQxLmVudW0oW1wicGVyc29uYWxcIiwgXCJidXNpbmVzc1wiXSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiAkby5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEdvID0geiQxLm9iamVjdCh7XG4gIHNvcnRDb2RlOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnROdW1iZXI6IHokMS5zdHJpbmcoKSxcbiAgYWNjb3VudFR5cGU6IHokMS5lbnVtKFtcInBlcnNvbmFsXCIsIFwiYnVzaW5lc3NcIl0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5lbnVtKFtcInN1Y2Nlc3NcIiwgXCJmYWlsdXJlXCJdKSxcbiAgcGF5bG9hZDogR28ub3B0aW9uYWwoKVxufSk7XG5jb25zdCBWbyA9IHokMS5vYmplY3Qoe1xuICBpYmFuOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6JDEuZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IFZvLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgUCA9IChlKSA9PiB6JDEubnVsbGFibGUoZS5vcHRpb25hbCgpKTtcbnokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJDYW5ub3QgYmUgYmxhbmtcIiB9KTtcbmNvbnN0IHFvID0geiQxLm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6JDEubGl0ZXJhbChcImVycm9yXCIpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IEpyID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiBQKHokMS5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBQKHokMS5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBQKHokMS5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6JDEuc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogUCh6JDEubnVtYmVyKCkpXG59KSwgV3IgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IFAoeiQxLnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogUCh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBQKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCB6byA9IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLCBIbyA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIHNldHRpbmdzOiBQKHpvKVxufSksIFZlID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBQKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBQKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIEJvID0geiQxLm9iamVjdCh7XG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKClcbn0pLCBZbyA9IHokMS5vYmplY3Qoe1xuICBpZDogUCh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsOiBQKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IFAoeiQxLm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6JDEuYXJyYXkoQm8pLFxuICB0cmlhbF9zdGFydDogUCh6JDEuc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IFAoeiQxLnN0cmluZygpKVxufSksIFpyID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKClcbn0pLCBKbyA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KFpyKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1faWQ6IHokMS5zdHJpbmcoKVxufSksIFdvID0geiQxLm9iamVjdCh7XG4gIGNvdXBvbjogSnJcbn0pLCBabyA9IHokMS5vYmplY3Qoe1xuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudHM6IHokMS5hcnJheShXbyksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogUCh6JDEuc3RyaW5nKCkpLFxuICBsaW5lczogeiQxLmFycmF5KEpvKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShacilcbn0pLCBkciA9IHokMS5vYmplY3Qoe1xuICBjcmVhdGVkOiB6JDEuYXJyYXkoWW8pLFxuICBpbnZvaWNlczogeiQxLmFycmF5KFpvKSxcbiAgcHJvY2Vzc29yc191c2VkOiBQKHokMS5hcnJheSh6JDEuc3RyaW5nKCkpKVxufSksIEtyID0geiQxLm9iamVjdCh7XG4gIHByZXZpZXc6IGRyLFxuICBwcmV2aWV3X3Bvc3RfdHJpYWw6IFAoZHIpLFxuICBjb3Vwb25zOiB6JDEuYXJyYXkoSnIpXG59KSwgcHIgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcIm9wZW5cIiksXG4gIGxvY2FsZTogUCh6JDEuc3RyaW5nKCkpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogUCh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9zZXR0aW5nczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShXciksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBIbyxcbiAgc3Vic19wcmV2aWV3OiBQKEtyKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6JDEuYXJyYXkoVmUpLFxuICByZXR1cm5fdXJsOiBQKHokMS5zdHJpbmcoKSksXG4gIHN1Y2Nlc3NfdXJsOiBQKHokMS5zdHJpbmcoKSksXG4gIGZpbmFsX2ZlYXR1cmVfcm9sbG91dF9zZXR0aW5nczogUCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBRciA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogeiQxLm51bGxhYmxlKHokMS51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKHByLnNoYXBlKSxcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHokMS5zdHJpbmcoKVxuICB9KS5leHRlbmQocHIuc2hhcGUpXG5dKSwgS28gPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KSwgUW8gPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImV4cGlyZWRcIilcbn0pO1xueiQxLnVuaW9uKFtRciwgS28sIFFvXSk7XG56JDEub2JqZWN0KHtcbiAgbG9nbzogeiQxLnN0cmluZygpLFxuICBpY29uOiB6JDEuc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHokMS5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwbV9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IGd0ID0geiQxLm9iamVjdCh7XG4gIGxpbmUxOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbGluZTI6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBsaW5lMzogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNpdHk6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBzdGF0ZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNvdW50cnk6IHokMS5zdHJpbmcoKSxcbiAgemlwX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogeiQxLmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfYWRkcmVzczogZ3QsXG4gIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGd0Lm9wdGlvbmFsKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShXciksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBWZSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IFAoeiQxLnN0cmluZygpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogUCh6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IFhyID0geiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBYbyA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSk7XG56JDEuYXJyYXkoWG8pO1xuY29uc3QgZWEgPSB6JDEub2JqZWN0KHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IGd0LFxuICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogZ3Qub3B0aW9uYWwoKVxufSksIHRhID0geiQxLm9iamVjdCh7XG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCBlbiA9IHokMS5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkodGEpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpXG59KSwgcmEgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBQKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogVmUsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBlbi5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pLmV4dGVuZChlYS5zaGFwZSkuZXh0ZW5kKHJhLnNoYXBlKTtcbmNvbnN0IHRuID0geiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogUCh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IENvLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IFZlLFxuICBwYXltZW50X3JvdXRlX2lkOiBQKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogT2UsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBWZSxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbiAgdXNlX3VuaWZpZWRfY2NfZmxvdzogUCh6JDEuYm9vbGVhbigpKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBlbi5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBQKHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IFAoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBuYSA9IHokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNjX3BtX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2U6IFAobnQpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBQKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLnJlY29yZCh6JDEuYW55KCkpO1xueiQxLm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IFAoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBQKHokMS5zdHJpbmcoKSksXG4gIGxpbmUxOiBQKHokMS5zdHJpbmcoKSksXG4gIGxpbmUyOiBQKHokMS5zdHJpbmcoKSksXG4gIGxpbmUzOiBQKHokMS5zdHJpbmcoKSksXG4gIGNpdHk6IFAoeiQxLnN0cmluZygpKSxcbiAgc3RhdGU6IFAoeiQxLnN0cmluZygpKSxcbiAgY291bnRyeTogUCh6JDEuc3RyaW5nKCkpLFxuICB6aXBfY29kZTogUCh6JDEuc3RyaW5nKCkpLFxuICBlbWFpbDogUCh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBQKHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogUCh6JDEuc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiBQKHokMS5ib29sZWFuKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICBlbWFpbDogUCh6JDEuc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiBQKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogUCh6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IFAoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogUCh6JDEuc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBQKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IG9hID0geiQxLm9iamVjdCh7XG4gIGVycm9yX2NvZGU6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IFZlLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBQKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgYWEgPSB6JDEub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IFAoeiQxLnJlY29yZCh6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZXZlbnRzOiB6JDEuYXJyYXkoXG4gICAgeiQxLm9iamVjdCh7XG4gICAgICBldmVudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICAgIHByb3BlcnRpZXM6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKVxuICAgIH0pXG4gIClcbn0pO1xueiQxLmFueSgpLm9wdGlvbmFsKCk7XG56JDEub2JqZWN0KHtcbiAgZGV2aWNlX3Rva2VuOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgaWEgPSB6JDEub2JqZWN0KHt9KSwgc2EgPSB6JDEub2JqZWN0KHtcbiAgX3VuaWZpZWRfY2NfYWN0aW9uX25hbWU6IHokMS5zdHJpbmcoKSxcbiAgX3VuaWZpZWRfY2NfcGNjc19pZDogeiQxLnN0cmluZygpXG59KS5jYXRjaGFsbCh6JDEuYW55KCkpLCBjYSA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSksIGxhID0geiQxLmFycmF5KGNhKSwgdWEgPSB6JDEub2JqZWN0KHtcbiAgY29kZTogeiQxLnN0cmluZygpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIHBhdGg6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KSwgZGEgPSB6JDEuYXJyYXkodWEpLCBwYSA9IHtcbiAgXCJmYWlsZWQgdG8gZmV0Y2hcIjogXCJDb25uZWN0aW9uIGVycm9yOiBwbGVhc2UgZG91YmxlIGNoZWNrIGlmIHlvdSBhcmUgY29ubmVjdGVkIHRvIHRoZSBpbnRlcm5ldCwgdGhlbiB0cnkgYWdhaW5cIlxufSwgJHQgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgcmV0dXJuIHBhW3RdID8/IGU7XG59LCBfYSA9IChlKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHR5cGVvZiBKU09OLnBhcnNlKGUpID09IFwib2JqZWN0XCI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAhMTtcbiAgfVxufSwgbWEgPSAoZSkgPT4gZS5sZW5ndGggPT09IDEgPyAkdChlWzBdLm1zZykgOiBgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpcbiR7ZS5tYXAoKHIpID0+IGDigKIgJHskdChyLm1zZyl9YCkuam9pbihgXG5gKX1gLCBmYSA9IChlKSA9PiBgRW5jb3VudGVyZWQgdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke2UubWFwKChyKSA9PiBgLSAke3IucGF0aC5qb2luKFwiL1wiKX06ICR7ci5tZXNzYWdlfWApLmpvaW4oYFxuYCl9YCwgZWUgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKVxuICAgIGlmIChfYShlLm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCB0ID0gSlNPTi5wYXJzZShlLm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIGxhLnNhZmVQYXJzZSh0KS5zdWNjZXNzID8gbWEodCkgOiBkYS5zYWZlUGFyc2UodCkuc3VjY2VzcyA/IGZhKHQpIDogKGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7ZS5tZXNzYWdlfWApLCBlLm1lc3NhZ2UpO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuICR0KGUubWVzc2FnZSk7XG4gIGlmICh0eXBlb2YgZSA9PSBcIm9iamVjdFwiKVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSk7XG4gICAgfSBjYXRjaCAodCkge1xuICAgICAgcmV0dXJuIHQgKyBcIlwiO1xuICAgIH1cbiAgZWxzZVxuICAgIHJldHVybiBlICsgXCJcIjtcbn0sIHlhID0gKGUsIHQsIHIpID0+ICguLi5uKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHQoLi4ubik7XG4gIH0gY2F0Y2ggKGEpIHtcbiAgICByKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtlfSk6YCwgYSk7XG4gICAgcmV0dXJuO1xuICB9XG59LCBoYSA9IChlKSA9PiBlLnJlZHVjZSgodCwgcikgPT4gdCArIHIsIDApLCBybiA9IChlKSA9PiB7XG4gIGUucHJldmVudERlZmF1bHQoKSwgZS5yZXR1cm5WYWx1ZSA9ICEwO1xufSwgZ2EgPSAoKSA9PiB7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIHJuKTtcbn0sIHdhID0gKCkgPT4ge1xuICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBybik7XG59LCBIID0gKGUpID0+IHtcbiAgbGV0IHQgPSAhMTtcbiAgcmV0dXJuIGFzeW5jIChyKSA9PiB7XG4gICAgdmFyIG4sIGE7XG4gICAgaWYgKHQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIlNraXBwaW5nIHN1Ym1pc3Npb24gYmVjYXVzZSBpdCBpcyBhbHJlYWR5IGluIHByb2dyZXNzXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0ID0gITA7XG4gICAgdHJ5IHtcbiAgICAgIHIuY29udGV4dC5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24gJiYgZ2EoKSwgKGEgPSAobiA9IHIuZm9ybUNhbGxiYWNrcy5nZXQpLm9uQ2hlY2tvdXRTdGFydGVkKSA9PSBudWxsIHx8IGEuY2FsbChuKSwgZyhcImNoZWNrb3V0X3N0YXJ0ZWRcIiwge1xuICAgICAgICBjcG06IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG8gPSBhd2FpdCBlKHIpO1xuICAgICAgaWYgKGcoXCJjaGVja291dF9zdWNjZXNzXCIsIHtcbiAgICAgICAgY3BtOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgLi4ub1xuICAgICAgfSksIGdpKCksIG8ubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhvLnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgICBlbHNlIGlmIChvLm1vZGUgPT09IFwiY2hlY2tvdXRcIilcbiAgICAgICAgci5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0U3VjY2VzcyhcbiAgICAgICAgICBvLnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgICAgby5yZXN1bHQuc3Vic2NyaXB0aW9uX2lkcyxcbiAgICAgICAgICBvLnJlc3VsdC5jdXN0b21lcl9pZCxcbiAgICAgICAgICBvLnJlc3VsdC5wcm9jZXNzb3JzX3VzZWQgPz8gW11cbiAgICAgICAgKTtcbiAgICAgIGVsc2VcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgbW9kZTogJHtvfWApO1xuICAgIH0gY2F0Y2ggKG8pIHtcbiAgICAgIHQgPSAhMTtcbiAgICAgIGNvbnN0IHMgPSBlZShvKSwgYyA9IGF3YWl0IFNuKHIuY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLCBzKTtcbiAgICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKHMsIGMpLCBnKFwiY2hlY2tvdXRfZXJyb3JcIiwgeyBjcG06IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kLCBlcnJvck1lc3NhZ2U6IHMsIGVycm9yQ29kZTogYywgZXJyb3I6IG8gfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHQgPSAhMSwgci5jb250ZXh0LnByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvbiAmJiB3YSgpO1xuICAgIH1cbiAgfTtcbn0sIHdlID0gKGUpID0+IGFzeW5jICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGUodCk7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICBjb25zdCB7IGVycl9fOiBuIH0gPSBJKFwiaW5pdC1lcnJvci1jYXRjaGVyXCIpLCBhID0gZWUociksIG8gPSBhd2FpdCBTbih0LmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgYSk7XG4gICAgcmV0dXJuIG4obywgYSwgciksIGcoXCJpbml0X2Zsb3dfZXJyb3JcIiwgeyBlcnJvck1lc3NhZ2U6IGEsIGVycm9yQ29kZTogbywgZXJyb3I6IHIgfSksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IGEsIGVycm9yQ29kZTogbywgaXNMb2FkaW5nOiAhMSB9O1xuICB9XG59LCBJID0gKGUpID0+IHtcbiAgY29uc3QgdCA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUubG9nKGAke2NoYWxrLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke2V9YCl9XHRgLCAuLi5uKTtcbiAgfSwgciA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUud2FybihgJHtjaGFsay5yZWQuYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7ZX1gKX1cdGAsIC4uLm4pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZzogdCxcbiAgICBlcnI6IHIsXG4gICAgbG9nX186IHQsXG4gICAgZXJyX186IHJcbiAgfTtcbn07XG52YXIgR3QgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHJldHVybiBHdCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKHIsIG4pIHtcbiAgICByLl9fcHJvdG9fXyA9IG47XG4gIH0gfHwgZnVuY3Rpb24ociwgbikge1xuICAgIGZvciAodmFyIGEgaW4gbikgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sIGEpICYmIChyW2FdID0gblthXSk7XG4gIH0sIEd0KGUsIHQpO1xufTtcbmZ1bmN0aW9uIFBlKGUsIHQpIHtcbiAgaWYgKHR5cGVvZiB0ICE9IFwiZnVuY3Rpb25cIiAmJiB0ICE9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKHQpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgR3QoZSwgdCk7XG4gIGZ1bmN0aW9uIHIoKSB7XG4gICAgdGhpcy5jb25zdHJ1Y3RvciA9IGU7XG4gIH1cbiAgZS5wcm90b3R5cGUgPSB0ID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZSh0KSA6IChyLnByb3RvdHlwZSA9IHQucHJvdG90eXBlLCBuZXcgcigpKTtcbn1cbmZ1bmN0aW9uIHZhKGUsIHQsIHIsIG4pIHtcbiAgZnVuY3Rpb24gYShvKSB7XG4gICAgcmV0dXJuIG8gaW5zdGFuY2VvZiByID8gbyA6IG5ldyByKGZ1bmN0aW9uKHMpIHtcbiAgICAgIHMobyk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ldyAociB8fCAociA9IFByb21pc2UpKShmdW5jdGlvbihvLCBzKSB7XG4gICAgZnVuY3Rpb24gYyhkKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KG4ubmV4dChkKSk7XG4gICAgICB9IGNhdGNoIChmKSB7XG4gICAgICAgIHMoZik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGwoZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShuLnRocm93KGQpKTtcbiAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgcyhmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdShkKSB7XG4gICAgICBkLmRvbmUgPyBvKGQudmFsdWUpIDogYShkLnZhbHVlKS50aGVuKGMsIGwpO1xuICAgIH1cbiAgICB1KChuID0gbi5hcHBseShlLCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gbm4oZSwgdCkge1xuICB2YXIgciA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChvWzBdICYgMSkgdGhyb3cgb1sxXTtcbiAgICByZXR1cm4gb1sxXTtcbiAgfSwgdHJ5czogW10sIG9wczogW10gfSwgbiwgYSwgbywgcyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIHMubmV4dCA9IGMoMCksIHMudGhyb3cgPSBjKDEpLCBzLnJldHVybiA9IGMoMiksIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIChzW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIHM7XG4gIGZ1bmN0aW9uIGModSkge1xuICAgIHJldHVybiBmdW5jdGlvbihkKSB7XG4gICAgICByZXR1cm4gbChbdSwgZF0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbCh1KSB7XG4gICAgaWYgKG4pIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgIGZvciAoOyBzICYmIChzID0gMCwgdVswXSAmJiAociA9IDApKSwgcjsgKSB0cnkge1xuICAgICAgaWYgKG4gPSAxLCBhICYmIChvID0gdVswXSAmIDIgPyBhLnJldHVybiA6IHVbMF0gPyBhLnRocm93IHx8ICgobyA9IGEucmV0dXJuKSAmJiBvLmNhbGwoYSksIDApIDogYS5uZXh0KSAmJiAhKG8gPSBvLmNhbGwoYSwgdVsxXSkpLmRvbmUpIHJldHVybiBvO1xuICAgICAgc3dpdGNoIChhID0gMCwgbyAmJiAodSA9IFt1WzBdICYgMiwgby52YWx1ZV0pLCB1WzBdKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG8gPSB1O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIHIubGFiZWwrKywgeyB2YWx1ZTogdVsxXSwgZG9uZTogITEgfTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHIubGFiZWwrKywgYSA9IHVbMV0sIHUgPSBbMF07XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICB1ID0gci5vcHMucG9wKCksIHIudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAobyA9IHIudHJ5cywgIShvID0gby5sZW5ndGggPiAwICYmIG9bby5sZW5ndGggLSAxXSkgJiYgKHVbMF0gPT09IDYgfHwgdVswXSA9PT0gMikpIHtcbiAgICAgICAgICAgIHIgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSAzICYmICghbyB8fCB1WzFdID4gb1swXSAmJiB1WzFdIDwgb1szXSkpIHtcbiAgICAgICAgICAgIHIubGFiZWwgPSB1WzFdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSA2ICYmIHIubGFiZWwgPCBvWzFdKSB7XG4gICAgICAgICAgICByLmxhYmVsID0gb1sxXSwgbyA9IHU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG8gJiYgci5sYWJlbCA8IG9bMl0pIHtcbiAgICAgICAgICAgIHIubGFiZWwgPSBvWzJdLCByLm9wcy5wdXNoKHUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9bMl0gJiYgci5vcHMucG9wKCksIHIudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHUgPSB0LmNhbGwoZSwgcik7XG4gICAgfSBjYXRjaCAoZCkge1xuICAgICAgdSA9IFs2LCBkXSwgYSA9IDA7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIG4gPSBvID0gMDtcbiAgICB9XG4gICAgaWYgKHVbMF0gJiA1KSB0aHJvdyB1WzFdO1xuICAgIHJldHVybiB7IHZhbHVlOiB1WzBdID8gdVsxXSA6IHZvaWQgMCwgZG9uZTogITAgfTtcbiAgfVxufVxuZnVuY3Rpb24gVWUoZSkge1xuICB2YXIgdCA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgciA9IHQgJiYgZVt0XSwgbiA9IDA7XG4gIGlmIChyKSByZXR1cm4gci5jYWxsKGUpO1xuICBpZiAoZSAmJiB0eXBlb2YgZS5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBlICYmIG4gPj0gZS5sZW5ndGggJiYgKGUgPSB2b2lkIDApLCB7IHZhbHVlOiBlICYmIGVbbisrXSwgZG9uZTogIWUgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IodCA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cbmZ1bmN0aW9uIHd0KGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBhLCBvID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShhID0gbi5uZXh0KCkpLmRvbmU7ICkgby5wdXNoKGEudmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgcyA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgYSAmJiAhYS5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBvO1xufVxuZnVuY3Rpb24gdnQoZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIGEgPSB0Lmxlbmd0aCwgbzsgbiA8IGE7IG4rKylcbiAgICAobyB8fCAhKG4gaW4gdCkpICYmIChvIHx8IChvID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBvW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChvIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn1cbmZ1bmN0aW9uIERlKGUpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBEZSA/ICh0aGlzLnYgPSBlLCB0aGlzKSA6IG5ldyBEZShlKTtcbn1cbmZ1bmN0aW9uIGJhKGUsIHQsIHIpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG4gPSByLmFwcGx5KGUsIHQgfHwgW10pLCBhLCBvID0gW107XG4gIHJldHVybiBhID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgYyhcIm5leHRcIiksIGMoXCJ0aHJvd1wiKSwgYyhcInJldHVyblwiLCBzKSwgYVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgYTtcbiAgZnVuY3Rpb24gcyhtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeSkudGhlbihtLCBmKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGMobSwgeSkge1xuICAgIG5bbV0gJiYgKGFbbV0gPSBmdW5jdGlvbihoKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oYiwgdikge1xuICAgICAgICBvLnB1c2goW20sIGgsIGIsIHZdKSA+IDEgfHwgbChtLCBoKTtcbiAgICAgIH0pO1xuICAgIH0sIHkgJiYgKGFbbV0gPSB5KGFbbV0pKSk7XG4gIH1cbiAgZnVuY3Rpb24gbChtLCB5KSB7XG4gICAgdHJ5IHtcbiAgICAgIHUoblttXSh5KSk7XG4gICAgfSBjYXRjaCAoaCkge1xuICAgICAgXyhvWzBdWzNdLCBoKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdShtKSB7XG4gICAgbS52YWx1ZSBpbnN0YW5jZW9mIERlID8gUHJvbWlzZS5yZXNvbHZlKG0udmFsdWUudikudGhlbihkLCBmKSA6IF8ob1swXVsyXSwgbSk7XG4gIH1cbiAgZnVuY3Rpb24gZChtKSB7XG4gICAgbChcIm5leHRcIiwgbSk7XG4gIH1cbiAgZnVuY3Rpb24gZihtKSB7XG4gICAgbChcInRocm93XCIsIG0pO1xuICB9XG4gIGZ1bmN0aW9uIF8obSwgeSkge1xuICAgIG0oeSksIG8uc2hpZnQoKSwgby5sZW5ndGggJiYgbChvWzBdWzBdLCBvWzBdWzFdKTtcbiAgfVxufVxuZnVuY3Rpb24gRWEoZSkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgdCA9IGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCByO1xuICByZXR1cm4gdCA/IHQuY2FsbChlKSA6IChlID0gdHlwZW9mIFVlID09IFwiZnVuY3Rpb25cIiA/IFVlKGUpIDogZVtTeW1ib2wuaXRlcmF0b3JdKCksIHIgPSB7fSwgbihcIm5leHRcIiksIG4oXCJ0aHJvd1wiKSwgbihcInJldHVyblwiKSwgcltTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgcik7XG4gIGZ1bmN0aW9uIG4obykge1xuICAgIHJbb10gPSBlW29dICYmIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihjLCBsKSB7XG4gICAgICAgIHMgPSBlW29dKHMpLCBhKGMsIGwsIHMuZG9uZSwgcy52YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGEobywgcywgYywgbCkge1xuICAgIFByb21pc2UucmVzb2x2ZShsKS50aGVuKGZ1bmN0aW9uKHUpIHtcbiAgICAgIG8oeyB2YWx1ZTogdSwgZG9uZTogYyB9KTtcbiAgICB9LCBzKTtcbiAgfVxufVxuZnVuY3Rpb24gVihlKSB7XG4gIHJldHVybiB0eXBlb2YgZSA9PSBcImZ1bmN0aW9uXCI7XG59XG5mdW5jdGlvbiBDdChlKSB7XG4gIHZhciB0ID0gZnVuY3Rpb24obikge1xuICAgIEVycm9yLmNhbGwobiksIG4uc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgfSwgciA9IGUodCk7XG4gIHJldHVybiByLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSwgci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSByLCByO1xufVxudmFyIEZ0ID0gQ3QoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24ocikge1xuICAgIGUodGhpcyksIHRoaXMubWVzc2FnZSA9IHIgPyByLmxlbmd0aCArIGAgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcbmAgKyByLm1hcChmdW5jdGlvbihuLCBhKSB7XG4gICAgICByZXR1cm4gYSArIDEgKyBcIikgXCIgKyBuLnRvU3RyaW5nKCk7XG4gICAgfSkuam9pbihgXG4gIGApIDogXCJcIiwgdGhpcy5uYW1lID0gXCJVbnN1YnNjcmlwdGlvbkVycm9yXCIsIHRoaXMuZXJyb3JzID0gcjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gYnQoZSwgdCkge1xuICBpZiAoZSkge1xuICAgIHZhciByID0gZS5pbmRleE9mKHQpO1xuICAgIDAgPD0gciAmJiBlLnNwbGljZShyLCAxKTtcbiAgfVxufVxudmFyIGx0ID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGUodCkge1xuICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gdCwgdGhpcy5jbG9zZWQgPSAhMSwgdGhpcy5fcGFyZW50YWdlID0gbnVsbCwgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHQsIHIsIG4sIGEsIG87XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdGhpcy5jbG9zZWQgPSAhMDtcbiAgICAgIHZhciBzID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgaWYgKHMpXG4gICAgICAgIGlmICh0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCBBcnJheS5pc0FycmF5KHMpKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBjID0gVWUocyksIGwgPSBjLm5leHQoKTsgIWwuZG9uZTsgbCA9IGMubmV4dCgpKSB7XG4gICAgICAgICAgICAgIHZhciB1ID0gbC52YWx1ZTtcbiAgICAgICAgICAgICAgdS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgICAgdCA9IHsgZXJyb3I6IGggfTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbCAmJiAhbC5kb25lICYmIChyID0gYy5yZXR1cm4pICYmIHIuY2FsbChjKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGlmICh0KSB0aHJvdyB0LmVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIHMucmVtb3ZlKHRoaXMpO1xuICAgICAgdmFyIGQgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgIGlmIChWKGQpKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGQoKTtcbiAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgIG8gPSBoIGluc3RhbmNlb2YgRnQgPyBoLmVycm9ycyA6IFtoXTtcbiAgICAgICAgfVxuICAgICAgdmFyIGYgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgaWYgKGYpIHtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICh2YXIgXyA9IFVlKGYpLCBtID0gXy5uZXh0KCk7ICFtLmRvbmU7IG0gPSBfLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIHkgPSBtLnZhbHVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgX3IoeSk7XG4gICAgICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgICAgIG8gPSBvID8/IFtdLCBoIGluc3RhbmNlb2YgRnQgPyBvID0gdnQodnQoW10sIHd0KG8pKSwgd3QoaC5lcnJvcnMpKSA6IG8ucHVzaChoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICBuID0geyBlcnJvcjogaCB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBtICYmICFtLmRvbmUgJiYgKGEgPSBfLnJldHVybikgJiYgYS5jYWxsKF8pO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAobikgdGhyb3cgbi5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChvKVxuICAgICAgICB0aHJvdyBuZXcgRnQobyk7XG4gICAgfVxuICB9LCBlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHI7XG4gICAgaWYgKHQgJiYgdCAhPT0gdGhpcylcbiAgICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgICAgX3IodCk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiBlKSB7XG4gICAgICAgICAgaWYgKHQuY2xvc2VkIHx8IHQuX2hhc1BhcmVudCh0aGlzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB0Ll9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAociA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIHIgIT09IHZvaWQgMCA/IHIgOiBbXSkucHVzaCh0KTtcbiAgICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICByZXR1cm4gciA9PT0gdCB8fCBBcnJheS5pc0FycmF5KHIpICYmIHIuaW5jbHVkZXModCk7XG4gIH0sIGUucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheShyKSA/IChyLnB1c2godCksIHIpIDogciA/IFtyLCB0XSA6IHQ7XG4gIH0sIGUucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgciA9PT0gdCA/IHRoaXMuX3BhcmVudGFnZSA9IG51bGwgOiBBcnJheS5pc0FycmF5KHIpICYmIGJ0KHIsIHQpO1xuICB9LCBlLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgIHIgJiYgYnQociwgdCksIHQgaW5zdGFuY2VvZiBlICYmIHQuX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgfSwgZS5FTVBUWSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0ID0gbmV3IGUoKTtcbiAgICByZXR1cm4gdC5jbG9zZWQgPSAhMCwgdDtcbiAgfSgpLCBlO1xufSgpLCBvbiA9IGx0LkVNUFRZO1xuZnVuY3Rpb24gYW4oZSkge1xuICByZXR1cm4gZSBpbnN0YW5jZW9mIGx0IHx8IGUgJiYgXCJjbG9zZWRcIiBpbiBlICYmIFYoZS5yZW1vdmUpICYmIFYoZS5hZGQpICYmIFYoZS51bnN1YnNjcmliZSk7XG59XG5mdW5jdGlvbiBfcihlKSB7XG4gIFYoZSkgPyBlKCkgOiBlLnVuc3Vic2NyaWJlKCk7XG59XG52YXIgc24gPSB7XG4gIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gIG9uU3RvcHBlZE5vdGlmaWNhdGlvbjogbnVsbCxcbiAgUHJvbWlzZTogdm9pZCAwLFxuICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiAhMSxcbiAgdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiAhMVxufSwgY24gPSB7XG4gIHNldFRpbWVvdXQ6IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICBmb3IgKHZhciByID0gW10sIG4gPSAyOyBuIDwgYXJndW1lbnRzLmxlbmd0aDsgbisrKVxuICAgICAgcltuIC0gMl0gPSBhcmd1bWVudHNbbl07XG4gICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCB2dChbZSwgdF0sIHd0KHIpKSk7XG4gIH0sXG4gIGNsZWFyVGltZW91dDogZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiAoY2xlYXJUaW1lb3V0KShlKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufTtcbmZ1bmN0aW9uIGxuKGUpIHtcbiAgY24uc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICB0aHJvdyBlO1xuICB9KTtcbn1cbmZ1bmN0aW9uIG1yKCkge1xufVxuZnVuY3Rpb24gZnQoZSkge1xuICBlKCk7XG59XG52YXIgWXQgPSBmdW5jdGlvbihlKSB7XG4gIFBlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIpIHtcbiAgICB2YXIgbiA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBuLmlzU3RvcHBlZCA9ICExLCByID8gKG4uZGVzdGluYXRpb24gPSByLCBhbihyKSAmJiByLmFkZChuKSkgOiBuLmRlc3RpbmF0aW9uID0ga2EsIG47XG4gIH1cbiAgcmV0dXJuIHQuY3JlYXRlID0gZnVuY3Rpb24ociwgbiwgYSkge1xuICAgIHJldHVybiBuZXcgVnQociwgbiwgYSk7XG4gIH0sIHQucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihyKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgdGhpcy5fbmV4dChyKTtcbiAgfSwgdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHRoaXMuX2Vycm9yKHIpKTtcbiAgfSwgdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fY29tcGxldGUoKSk7XG4gIH0sIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jbG9zZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksIHRoaXMuZGVzdGluYXRpb24gPSBudWxsKTtcbiAgfSwgdC5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbihyKSB7XG4gICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHIpO1xuICB9LCB0LnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3Iocik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIHQucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIHQ7XG59KGx0KSwgUGEgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbmZ1bmN0aW9uIE10KGUsIHQpIHtcbiAgcmV0dXJuIFBhLmNhbGwoZSwgdCk7XG59XG52YXIgU2EgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZSh0KSB7XG4gICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSB0O1xuICB9XG4gIHJldHVybiBlLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHIubmV4dClcbiAgICAgIHRyeSB7XG4gICAgICAgIHIubmV4dCh0KTtcbiAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgcHQobik7XG4gICAgICB9XG4gIH0sIGUucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHIuZXJyb3IpXG4gICAgICB0cnkge1xuICAgICAgICByLmVycm9yKHQpO1xuICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICBwdChuKTtcbiAgICAgIH1cbiAgICBlbHNlXG4gICAgICBwdCh0KTtcbiAgfSwgZS5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdCA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmICh0LmNvbXBsZXRlKVxuICAgICAgdHJ5IHtcbiAgICAgICAgdC5jb21wbGV0ZSgpO1xuICAgICAgfSBjYXRjaCAocikge1xuICAgICAgICBwdChyKTtcbiAgICAgIH1cbiAgfSwgZTtcbn0oKSwgVnQgPSBmdW5jdGlvbihlKSB7XG4gIFBlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4sIGEpIHtcbiAgICB2YXIgbyA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzLCBzO1xuICAgIGlmIChWKHIpIHx8ICFyKVxuICAgICAgcyA9IHtcbiAgICAgICAgbmV4dDogciA/PyB2b2lkIDAsXG4gICAgICAgIGVycm9yOiBuID8/IHZvaWQgMCxcbiAgICAgICAgY29tcGxldGU6IGEgPz8gdm9pZCAwXG4gICAgICB9O1xuICAgIGVsc2Uge1xuICAgICAgdmFyIGM7XG4gICAgICBvICYmIHNuLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCA/IChjID0gT2JqZWN0LmNyZWF0ZShyKSwgYy51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gby51bnN1YnNjcmliZSgpO1xuICAgICAgfSwgcyA9IHtcbiAgICAgICAgbmV4dDogci5uZXh0ICYmIE10KHIubmV4dCwgYyksXG4gICAgICAgIGVycm9yOiByLmVycm9yICYmIE10KHIuZXJyb3IsIGMpLFxuICAgICAgICBjb21wbGV0ZTogci5jb21wbGV0ZSAmJiBNdChyLmNvbXBsZXRlLCBjKVxuICAgICAgfSkgOiBzID0gcjtcbiAgICB9XG4gICAgcmV0dXJuIG8uZGVzdGluYXRpb24gPSBuZXcgU2EocyksIG87XG4gIH1cbiAgcmV0dXJuIHQ7XG59KFl0KTtcbmZ1bmN0aW9uIHB0KGUpIHtcbiAgbG4oZSk7XG59XG5mdW5jdGlvbiBDYShlKSB7XG4gIHRocm93IGU7XG59XG52YXIga2EgPSB7XG4gIGNsb3NlZDogITAsXG4gIG5leHQ6IG1yLFxuICBlcnJvcjogQ2EsXG4gIGNvbXBsZXRlOiBtclxufSwgSnQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8IFwiQEBvYnNlcnZhYmxlXCI7XG59KCk7XG5mdW5jdGlvbiBBYShlKSB7XG4gIHJldHVybiBlO1xufVxuZnVuY3Rpb24gSWEoZSkge1xuICByZXR1cm4gZS5sZW5ndGggPT09IDAgPyBBYSA6IGUubGVuZ3RoID09PSAxID8gZVswXSA6IGZ1bmN0aW9uKHIpIHtcbiAgICByZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24obiwgYSkge1xuICAgICAgcmV0dXJuIGEobik7XG4gICAgfSwgcik7XG4gIH07XG59XG52YXIgZ2UgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZSh0KSB7XG4gICAgdCAmJiAodGhpcy5fc3Vic2NyaWJlID0gdCk7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSBuZXcgZSgpO1xuICAgIHJldHVybiByLnNvdXJjZSA9IHRoaXMsIHIub3BlcmF0b3IgPSB0LCByO1xuICB9LCBlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgdmFyIGEgPSB0aGlzLCBvID0gUmEodCkgPyB0IDogbmV3IFZ0KHQsIHIsIG4pO1xuICAgIHJldHVybiBmdChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzID0gYSwgYyA9IHMub3BlcmF0b3IsIGwgPSBzLnNvdXJjZTtcbiAgICAgIG8uYWRkKGMgPyBjLmNhbGwobywgbCkgOiBsID8gYS5fc3Vic2NyaWJlKG8pIDogYS5fdHJ5U3Vic2NyaWJlKG8pKTtcbiAgICB9KSwgbztcbiAgfSwgZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZSh0KTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICB0LmVycm9yKHIpO1xuICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgcmV0dXJuIHIgPSBmcihyKSwgbmV3IHIoZnVuY3Rpb24oYSwgbykge1xuICAgICAgdmFyIHMgPSBuZXcgVnQoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbihjKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHQoYyk7XG4gICAgICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICAgICAgbyhsKSwgcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IG8sXG4gICAgICAgIGNvbXBsZXRlOiBhXG4gICAgICB9KTtcbiAgICAgIG4uc3Vic2NyaWJlKHMpO1xuICAgIH0pO1xuICB9LCBlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByO1xuICAgIHJldHVybiAociA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLnN1YnNjcmliZSh0KTtcbiAgfSwgZS5wcm90b3R5cGVbSnRdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICByZXR1cm4gSWEodCkodGhpcyk7XG4gIH0sIGUucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgcmV0dXJuIHQgPSBmcih0KSwgbmV3IHQoZnVuY3Rpb24obiwgYSkge1xuICAgICAgdmFyIG87XG4gICAgICByLnN1YnNjcmliZShmdW5jdGlvbihzKSB7XG4gICAgICAgIHJldHVybiBvID0gcztcbiAgICAgIH0sIGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgcmV0dXJuIGEocyk7XG4gICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG4obyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSwgZS5jcmVhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIG5ldyBlKHQpO1xuICB9LCBlO1xufSgpO1xuZnVuY3Rpb24gZnIoZSkge1xuICB2YXIgdDtcbiAgcmV0dXJuICh0ID0gZSA/PyBzbi5Qcm9taXNlKSAhPT0gbnVsbCAmJiB0ICE9PSB2b2lkIDAgPyB0IDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIFRhKGUpIHtcbiAgcmV0dXJuIGUgJiYgVihlLm5leHQpICYmIFYoZS5lcnJvcikgJiYgVihlLmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIFJhKGUpIHtcbiAgcmV0dXJuIGUgJiYgZSBpbnN0YW5jZW9mIFl0IHx8IFRhKGUpICYmIGFuKGUpO1xufVxuZnVuY3Rpb24gTmEoZSkge1xuICByZXR1cm4gVihlID09IG51bGwgPyB2b2lkIDAgOiBlLmxpZnQpO1xufVxuZnVuY3Rpb24gRmEoZSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGlmIChOYSh0KSlcbiAgICAgIHJldHVybiB0LmxpZnQoZnVuY3Rpb24ocikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBlKHIsIHRoaXMpO1xuICAgICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgICAgdGhpcy5lcnJvcihuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlXCIpO1xuICB9O1xufVxuZnVuY3Rpb24gTWEoZSwgdCwgciwgbiwgYSkge1xuICByZXR1cm4gbmV3IExhKGUsIHQsIHIsIG4sIGEpO1xufVxudmFyIExhID0gZnVuY3Rpb24oZSkge1xuICBQZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuLCBhLCBvLCBzLCBjKSB7XG4gICAgdmFyIGwgPSBlLmNhbGwodGhpcywgcikgfHwgdGhpcztcbiAgICByZXR1cm4gbC5vbkZpbmFsaXplID0gcywgbC5zaG91bGRVbnN1YnNjcmliZSA9IGMsIGwuX25leHQgPSBuID8gZnVuY3Rpb24odSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbih1KTtcbiAgICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgICAgci5lcnJvcihkKTtcbiAgICAgIH1cbiAgICB9IDogZS5wcm90b3R5cGUuX25leHQsIGwuX2Vycm9yID0gbyA/IGZ1bmN0aW9uKHUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG8odSk7XG4gICAgICB9IGNhdGNoIChkKSB7XG4gICAgICAgIHIuZXJyb3IoZCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IGUucHJvdG90eXBlLl9lcnJvciwgbC5fY29tcGxldGUgPSBhID8gZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhKCk7XG4gICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgIHIuZXJyb3IodSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IGUucHJvdG90eXBlLl9jb21wbGV0ZSwgbDtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcjtcbiAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICB2YXIgbiA9IHRoaXMuY2xvc2VkO1xuICAgICAgZS5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgIW4gJiYgKChyID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgfHwgci5jYWxsKHRoaXMpKTtcbiAgICB9XG4gIH0sIHQ7XG59KFl0KSwgRGEgPSBDdChmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBlKHRoaXMpLCB0aGlzLm5hbWUgPSBcIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwib2JqZWN0IHVuc3Vic2NyaWJlZFwiO1xuICB9O1xufSksIHVuID0gZnVuY3Rpb24oZSkge1xuICBQZSh0LCBlKTtcbiAgZnVuY3Rpb24gdCgpIHtcbiAgICB2YXIgciA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiByLmNsb3NlZCA9ICExLCByLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCByLm9ic2VydmVycyA9IFtdLCByLmlzU3RvcHBlZCA9ICExLCByLmhhc0Vycm9yID0gITEsIHIudGhyb3duRXJyb3IgPSBudWxsLCByO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuID0gbmV3IHlyKHRoaXMsIHRoaXMpO1xuICAgIHJldHVybiBuLm9wZXJhdG9yID0gciwgbjtcbiAgfSwgdC5wcm90b3R5cGUuX3Rocm93SWZDbG9zZWQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICB0aHJvdyBuZXcgRGEoKTtcbiAgfSwgdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgZnQoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgYSwgbztcbiAgICAgIGlmIChuLl90aHJvd0lmQ2xvc2VkKCksICFuLmlzU3RvcHBlZCkge1xuICAgICAgICBuLmN1cnJlbnRPYnNlcnZlcnMgfHwgKG4uY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20obi5vYnNlcnZlcnMpKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBzID0gVWUobi5jdXJyZW50T2JzZXJ2ZXJzKSwgYyA9IHMubmV4dCgpOyAhYy5kb25lOyBjID0gcy5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciBsID0gYy52YWx1ZTtcbiAgICAgICAgICAgIGwubmV4dChyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgICBhID0geyBlcnJvcjogdSB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjICYmICFjLmRvbmUgJiYgKG8gPSBzLnJldHVybikgJiYgby5jYWxsKHMpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoYSkgdGhyb3cgYS5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIGZ0KGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKG4uX3Rocm93SWZDbG9zZWQoKSwgIW4uaXNTdG9wcGVkKSB7XG4gICAgICAgIG4uaGFzRXJyb3IgPSBuLmlzU3RvcHBlZCA9ICEwLCBuLnRocm93bkVycm9yID0gcjtcbiAgICAgICAgZm9yICh2YXIgYSA9IG4ub2JzZXJ2ZXJzOyBhLmxlbmd0aDsgKVxuICAgICAgICAgIGEuc2hpZnQoKS5lcnJvcihyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgZnQoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoci5fdGhyb3dJZkNsb3NlZCgpLCAhci5pc1N0b3BwZWQpIHtcbiAgICAgICAgci5pc1N0b3BwZWQgPSAhMDtcbiAgICAgICAgZm9yICh2YXIgbiA9IHIub2JzZXJ2ZXJzOyBuLmxlbmd0aDsgKVxuICAgICAgICAgIG4uc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCB0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSAhMCwgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICB9LCBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcjtcbiAgICAgIHJldHVybiAoKHIgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgciA9PT0gdm9pZCAwID8gdm9pZCAwIDogci5sZW5ndGgpID4gMDtcbiAgICB9LFxuICAgIGVudW1lcmFibGU6ICExLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHIpO1xuICB9LCB0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMociksIHRoaXMuX2lubmVyU3Vic2NyaWJlKHIpO1xuICB9LCB0LnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzLCBhID0gdGhpcywgbyA9IGEuaGFzRXJyb3IsIHMgPSBhLmlzU3RvcHBlZCwgYyA9IGEub2JzZXJ2ZXJzO1xuICAgIHJldHVybiBvIHx8IHMgPyBvbiA6ICh0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBjLnB1c2gociksIG5ldyBsdChmdW5jdGlvbigpIHtcbiAgICAgIG4uY3VycmVudE9ic2VydmVycyA9IG51bGwsIGJ0KGMsIHIpO1xuICAgIH0pKTtcbiAgfSwgdC5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzLCBhID0gbi5oYXNFcnJvciwgbyA9IG4udGhyb3duRXJyb3IsIHMgPSBuLmlzU3RvcHBlZDtcbiAgICBhID8gci5lcnJvcihvKSA6IHMgJiYgci5jb21wbGV0ZSgpO1xuICB9LCB0LnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciA9IG5ldyBnZSgpO1xuICAgIHJldHVybiByLnNvdXJjZSA9IHRoaXMsIHI7XG4gIH0sIHQuY3JlYXRlID0gZnVuY3Rpb24ociwgbikge1xuICAgIHJldHVybiBuZXcgeXIociwgbik7XG4gIH0sIHQ7XG59KGdlKSwgeXIgPSBmdW5jdGlvbihlKSB7XG4gIFBlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICB2YXIgYSA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBhLmRlc3RpbmF0aW9uID0gciwgYS5zb3VyY2UgPSBuLCBhO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuLCBhO1xuICAgIChhID0gKG4gPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLm5leHQpID09PSBudWxsIHx8IGEgPT09IHZvaWQgMCB8fCBhLmNhbGwobiwgcik7XG4gIH0sIHQucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuLCBhO1xuICAgIChhID0gKG4gPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLmVycm9yKSA9PT0gbnVsbCB8fCBhID09PSB2b2lkIDAgfHwgYS5jYWxsKG4sIHIpO1xuICB9LCB0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByLCBuO1xuICAgIChuID0gKHIgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgfHwgbi5jYWxsKHIpO1xuICB9LCB0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuLCBhO1xuICAgIHJldHVybiAoYSA9IChuID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4uc3Vic2NyaWJlKHIpKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogb247XG4gIH0sIHQ7XG59KHVuKSwgeGEgPSB7XG4gIG5vdzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIERhdGUubm93KCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIE9hID0gZnVuY3Rpb24oZSkge1xuICBQZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuKSB7XG4gICAgcmV0dXJuIGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgdDtcbn0obHQpLCBociA9IHtcbiAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICBmb3IgKHZhciByID0gW10sIG4gPSAyOyBuIDwgYXJndW1lbnRzLmxlbmd0aDsgbisrKVxuICAgICAgcltuIC0gMl0gPSBhcmd1bWVudHNbbl07XG4gICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgdnQoW2UsIHRdLCB3dChyKSkpO1xuICB9LFxuICBjbGVhckludGVydmFsOiBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIGNsZWFySW50ZXJ2YWwoZSk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIFVhID0gZnVuY3Rpb24oZSkge1xuICBQZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuKSB7XG4gICAgdmFyIGEgPSBlLmNhbGwodGhpcywgciwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gYS5zY2hlZHVsZXIgPSByLCBhLndvcmsgPSBuLCBhLnBlbmRpbmcgPSAhMSwgYTtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgdmFyIGE7XG4gICAgaWYgKG4gPT09IHZvaWQgMCAmJiAobiA9IDApLCB0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIHRoaXMuc3RhdGUgPSByO1xuICAgIHZhciBvID0gdGhpcy5pZCwgcyA9IHRoaXMuc2NoZWR1bGVyO1xuICAgIHJldHVybiBvICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHMsIG8sIG4pKSwgdGhpcy5wZW5kaW5nID0gITAsIHRoaXMuZGVsYXkgPSBuLCB0aGlzLmlkID0gKGEgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChzLCB0aGlzLmlkLCBuKSwgdGhpcztcbiAgfSwgdC5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbihyLCBuLCBhKSB7XG4gICAgcmV0dXJuIGEgPT09IHZvaWQgMCAmJiAoYSA9IDApLCBoci5zZXRJbnRlcnZhbChyLmZsdXNoLmJpbmQociwgdGhpcyksIGEpO1xuICB9LCB0LnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uKHIsIG4sIGEpIHtcbiAgICBpZiAoYSA9PT0gdm9pZCAwICYmIChhID0gMCksIGEgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBhICYmIHRoaXMucGVuZGluZyA9PT0gITEpXG4gICAgICByZXR1cm4gbjtcbiAgICBuICE9IG51bGwgJiYgaHIuY2xlYXJJbnRlcnZhbChuKTtcbiAgfSwgdC5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gbmV3IEVycm9yKFwiZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvblwiKTtcbiAgICB0aGlzLnBlbmRpbmcgPSAhMTtcbiAgICB2YXIgYSA9IHRoaXMuX2V4ZWN1dGUociwgbik7XG4gICAgaWYgKGEpXG4gICAgICByZXR1cm4gYTtcbiAgICB0aGlzLnBlbmRpbmcgPT09ICExICYmIHRoaXMuaWQgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpKTtcbiAgfSwgdC5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgdmFyIGEgPSAhMSwgbztcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrKHIpO1xuICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgIGEgPSAhMCwgbyA9IHMgfHwgbmV3IEVycm9yKFwiU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvclwiKTtcbiAgICB9XG4gICAgaWYgKGEpXG4gICAgICByZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLCBvO1xuICB9LCB0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHZhciByID0gdGhpcywgbiA9IHIuaWQsIGEgPSByLnNjaGVkdWxlciwgbyA9IGEuYWN0aW9ucztcbiAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGwsIHRoaXMucGVuZGluZyA9ICExLCBidChvLCB0aGlzKSwgbiAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChhLCBuLCBudWxsKSksIHRoaXMuZGVsYXkgPSBudWxsLCBlLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfSwgdDtcbn0oT2EpLCBnciA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBlKHQsIHIpIHtcbiAgICByID09PSB2b2lkIDAgJiYgKHIgPSBlLm5vdyksIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IHQsIHRoaXMubm93ID0gcjtcbiAgfVxuICByZXR1cm4gZS5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgcmV0dXJuIHIgPT09IHZvaWQgMCAmJiAociA9IDApLCBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHQpLnNjaGVkdWxlKG4sIHIpO1xuICB9LCBlLm5vdyA9IHhhLm5vdywgZTtcbn0oKSwgamEgPSBmdW5jdGlvbihlKSB7XG4gIFBlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICBuID09PSB2b2lkIDAgJiYgKG4gPSBnci5ub3cpO1xuICAgIHZhciBhID0gZS5jYWxsKHRoaXMsIHIsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIGEuYWN0aW9ucyA9IFtdLCBhLl9hY3RpdmUgPSAhMSwgYTtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzLmFjdGlvbnM7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgbi5wdXNoKHIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgYTtcbiAgICB0aGlzLl9hY3RpdmUgPSAhMDtcbiAgICBkb1xuICAgICAgaWYgKGEgPSByLmV4ZWN1dGUoci5zdGF0ZSwgci5kZWxheSkpXG4gICAgICAgIGJyZWFrO1xuICAgIHdoaWxlIChyID0gbi5zaGlmdCgpKTtcbiAgICBpZiAodGhpcy5fYWN0aXZlID0gITEsIGEpIHtcbiAgICAgIGZvciAoOyByID0gbi5zaGlmdCgpOyApXG4gICAgICAgIHIudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRocm93IGE7XG4gICAgfVxuICB9LCB0O1xufShnciksICRhID0gbmV3IGphKFVhKSwgR2EgPSBmdW5jdGlvbihlKSB7XG4gIHJldHVybiBlICYmIHR5cGVvZiBlLmxlbmd0aCA9PSBcIm51bWJlclwiICYmIHR5cGVvZiBlICE9IFwiZnVuY3Rpb25cIjtcbn07XG5mdW5jdGlvbiBWYShlKSB7XG4gIHJldHVybiBWKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUudGhlbik7XG59XG5mdW5jdGlvbiBxYShlKSB7XG4gIHJldHVybiBWKGVbSnRdKTtcbn1cbmZ1bmN0aW9uIHphKGUpIHtcbiAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIFYoZSA9PSBudWxsID8gdm9pZCAwIDogZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuZnVuY3Rpb24gSGEoZSkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArIChlICE9PSBudWxsICYmIHR5cGVvZiBlID09IFwib2JqZWN0XCIgPyBcImFuIGludmFsaWQgb2JqZWN0XCIgOiBcIidcIiArIGUgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cbmZ1bmN0aW9uIEJhKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCAhPSBcImZ1bmN0aW9uXCIgfHwgIVN5bWJvbC5pdGVyYXRvciA/IFwiQEBpdGVyYXRvclwiIDogU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIFlhID0gQmEoKTtcbmZ1bmN0aW9uIEphKGUpIHtcbiAgcmV0dXJuIFYoZSA9PSBudWxsID8gdm9pZCAwIDogZVtZYV0pO1xufVxuZnVuY3Rpb24gV2EoZSkge1xuICByZXR1cm4gYmEodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgciwgbiwgYSwgbztcbiAgICByZXR1cm4gbm4odGhpcywgZnVuY3Rpb24ocykge1xuICAgICAgc3dpdGNoIChzLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICByID0gZS5nZXRSZWFkZXIoKSwgcy5sYWJlbCA9IDE7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBzLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pLCBzLmxhYmVsID0gMjtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiBbNCwgRGUoci5yZWFkKCkpXTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBuID0gcy5zZW50KCksIGEgPSBuLnZhbHVlLCBvID0gbi5kb25lLCBvID8gWzQsIERlKHZvaWQgMCldIDogWzMsIDVdO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIFsyLCBzLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gWzQsIERlKGEpXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBbNCwgcy5zZW50KCldO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgcmV0dXJuIHMuc2VudCgpLCBbMywgMl07XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHJldHVybiByLnJlbGVhc2VMb2NrKCksIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFphKGUpIHtcbiAgcmV0dXJuIFYoZSA9PSBudWxsID8gdm9pZCAwIDogZS5nZXRSZWFkZXIpO1xufVxuZnVuY3Rpb24gS2EoZSkge1xuICBpZiAoZSBpbnN0YW5jZW9mIGdlKVxuICAgIHJldHVybiBlO1xuICBpZiAoZSAhPSBudWxsKSB7XG4gICAgaWYgKHFhKGUpKVxuICAgICAgcmV0dXJuIFFhKGUpO1xuICAgIGlmIChHYShlKSlcbiAgICAgIHJldHVybiBYYShlKTtcbiAgICBpZiAoVmEoZSkpXG4gICAgICByZXR1cm4gZWkoZSk7XG4gICAgaWYgKHphKGUpKVxuICAgICAgcmV0dXJuIGRuKGUpO1xuICAgIGlmIChKYShlKSlcbiAgICAgIHJldHVybiB0aShlKTtcbiAgICBpZiAoWmEoZSkpXG4gICAgICByZXR1cm4gcmkoZSk7XG4gIH1cbiAgdGhyb3cgSGEoZSk7XG59XG5mdW5jdGlvbiBRYShlKSB7XG4gIHJldHVybiBuZXcgZ2UoZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gZVtKdF0oKTtcbiAgICBpZiAoVihyLnN1YnNjcmliZSkpXG4gICAgICByZXR1cm4gci5zdWJzY3JpYmUodCk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlXCIpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFhhKGUpIHtcbiAgcmV0dXJuIG5ldyBnZShmdW5jdGlvbih0KSB7XG4gICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLmxlbmd0aCAmJiAhdC5jbG9zZWQ7IHIrKylcbiAgICAgIHQubmV4dChlW3JdKTtcbiAgICB0LmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZWkoZSkge1xuICByZXR1cm4gbmV3IGdlKGZ1bmN0aW9uKHQpIHtcbiAgICBlLnRoZW4oZnVuY3Rpb24ocikge1xuICAgICAgdC5jbG9zZWQgfHwgKHQubmV4dChyKSwgdC5jb21wbGV0ZSgpKTtcbiAgICB9LCBmdW5jdGlvbihyKSB7XG4gICAgICByZXR1cm4gdC5lcnJvcihyKTtcbiAgICB9KS50aGVuKG51bGwsIGxuKTtcbiAgfSk7XG59XG5mdW5jdGlvbiB0aShlKSB7XG4gIHJldHVybiBuZXcgZ2UoZnVuY3Rpb24odCkge1xuICAgIHZhciByLCBuO1xuICAgIHRyeSB7XG4gICAgICBmb3IgKHZhciBhID0gVWUoZSksIG8gPSBhLm5leHQoKTsgIW8uZG9uZTsgbyA9IGEubmV4dCgpKSB7XG4gICAgICAgIHZhciBzID0gby52YWx1ZTtcbiAgICAgICAgaWYgKHQubmV4dChzKSwgdC5jbG9zZWQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgIHIgPSB7IGVycm9yOiBjIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG8gJiYgIW8uZG9uZSAmJiAobiA9IGEucmV0dXJuKSAmJiBuLmNhbGwoYSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAocikgdGhyb3cgci5lcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgdC5jb21wbGV0ZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGRuKGUpIHtcbiAgcmV0dXJuIG5ldyBnZShmdW5jdGlvbih0KSB7XG4gICAgbmkoZSwgdCkuY2F0Y2goZnVuY3Rpb24ocikge1xuICAgICAgcmV0dXJuIHQuZXJyb3Iocik7XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gcmkoZSkge1xuICByZXR1cm4gZG4oV2EoZSkpO1xufVxuZnVuY3Rpb24gbmkoZSwgdCkge1xuICB2YXIgciwgbiwgYSwgbztcbiAgcmV0dXJuIHZhKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgcywgYztcbiAgICByZXR1cm4gbm4odGhpcywgZnVuY3Rpb24obCkge1xuICAgICAgc3dpdGNoIChsLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBsLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKSwgciA9IEVhKGUpLCBsLmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBbNCwgci5uZXh0KCldO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKG4gPSBsLnNlbnQoKSwgISFuLmRvbmUpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgaWYgKHMgPSBuLnZhbHVlLCB0Lm5leHQocyksIHQuY2xvc2VkKVxuICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICBsLmxhYmVsID0gMztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBbMywgMV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBjID0gbC5zZW50KCksIGEgPSB7IGVycm9yOiBjIH0sIFszLCAxMV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gbC50cnlzLnB1c2goWzYsICwgOSwgMTBdKSwgbiAmJiAhbi5kb25lICYmIChvID0gci5yZXR1cm4pID8gWzQsIG8uY2FsbChyKV0gOiBbMywgOF07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBsLnNlbnQoKSwgbC5sYWJlbCA9IDg7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIGlmIChhKSB0aHJvdyBhLmVycm9yO1xuICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm4gdC5jb21wbGV0ZSgpLCBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gb2koZSwgdCwgciwgbiwgYSkge1xuICBuID09PSB2b2lkIDAgJiYgKG4gPSAwKSwgYSA9PT0gdm9pZCAwICYmIChhID0gITEpO1xuICB2YXIgbyA9IHQuc2NoZWR1bGUoZnVuY3Rpb24oKSB7XG4gICAgcigpLCBhID8gZS5hZGQodGhpcy5zY2hlZHVsZShudWxsLCBuKSkgOiB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gIH0sIG4pO1xuICBpZiAoZS5hZGQobyksICFhKVxuICAgIHJldHVybiBvO1xufVxuZnVuY3Rpb24gYWkoZSwgdCkge1xuICB2YXIgciA9IFYoZSkgPyBlIDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0sIG4gPSBmdW5jdGlvbihhKSB7XG4gICAgcmV0dXJuIGEuZXJyb3IocigpKTtcbiAgfTtcbiAgcmV0dXJuIG5ldyBnZShuKTtcbn1cbnZhciBpaSA9IEN0KGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGUodGhpcyksIHRoaXMubmFtZSA9IFwiRW1wdHlFcnJvclwiLCB0aGlzLm1lc3NhZ2UgPSBcIm5vIGVsZW1lbnRzIGluIHNlcXVlbmNlXCI7XG4gIH07XG59KTtcbmZ1bmN0aW9uIHNpKGUsIHQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsIG4pIHtcbiAgICB2YXIgYSA9ICExLCBvO1xuICAgIGUuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgbyA9IHMsIGEgPSAhMDtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogbixcbiAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgYSA/IHIobykgOiBuKG5ldyBpaSgpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBjaShlKSB7XG4gIHJldHVybiBlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4oZSk7XG59XG52YXIgbGkgPSBDdChmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbihyKSB7XG4gICAgciA9PT0gdm9pZCAwICYmIChyID0gbnVsbCksIGUodGhpcyksIHRoaXMubWVzc2FnZSA9IFwiVGltZW91dCBoYXMgb2NjdXJyZWRcIiwgdGhpcy5uYW1lID0gXCJUaW1lb3V0RXJyb3JcIiwgdGhpcy5pbmZvID0gcjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gdWkoZSwgdCkge1xuICB2YXIgciA9IGNpKGUpID8geyBmaXJzdDogZSB9IDogdHlwZW9mIGUgPT0gXCJudW1iZXJcIiA/IHsgZWFjaDogZSB9IDogZSwgbiA9IHIuZmlyc3QsIGEgPSByLmVhY2gsIG8gPSByLndpdGgsIHMgPSBvID09PSB2b2lkIDAgPyBkaSA6IG8sIGMgPSByLnNjaGVkdWxlciwgbCA9IGMgPT09IHZvaWQgMCA/ICRhIDogYywgdSA9IHIubWV0YSwgZCA9IHUgPT09IHZvaWQgMCA/IG51bGwgOiB1O1xuICBpZiAobiA9PSBudWxsICYmIGEgPT0gbnVsbClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gdGltZW91dCBwcm92aWRlZC5cIik7XG4gIHJldHVybiBGYShmdW5jdGlvbihmLCBfKSB7XG4gICAgdmFyIG0sIHksIGggPSBudWxsLCBiID0gMCwgdiA9IGZ1bmN0aW9uKHcpIHtcbiAgICAgIHkgPSBvaShfLCBsLCBmdW5jdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBtLnVuc3Vic2NyaWJlKCksIEthKHMoe1xuICAgICAgICAgICAgbWV0YTogZCxcbiAgICAgICAgICAgIGxhc3RWYWx1ZTogaCxcbiAgICAgICAgICAgIHNlZW46IGJcbiAgICAgICAgICB9KSkuc3Vic2NyaWJlKF8pO1xuICAgICAgICB9IGNhdGNoIChFKSB7XG4gICAgICAgICAgXy5lcnJvcihFKTtcbiAgICAgICAgfVxuICAgICAgfSwgdyk7XG4gICAgfTtcbiAgICBtID0gZi5zdWJzY3JpYmUoTWEoXywgZnVuY3Rpb24odykge1xuICAgICAgeSA9PSBudWxsIHx8IHkudW5zdWJzY3JpYmUoKSwgYisrLCBfLm5leHQoaCA9IHcpLCBhID4gMCAmJiB2KGEpO1xuICAgIH0sIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICAgIHkgIT0gbnVsbCAmJiB5LmNsb3NlZCB8fCB5ID09IG51bGwgfHwgeS51bnN1YnNjcmliZSgpLCBoID0gbnVsbDtcbiAgICB9KSksICFiICYmIHYobiAhPSBudWxsID8gdHlwZW9mIG4gPT0gXCJudW1iZXJcIiA/IG4gOiArbiAtIGwubm93KCkgOiBhKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBkaShlKSB7XG4gIHRocm93IG5ldyBsaShlKTtcbn1cbmNsYXNzIGV0IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAodCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6ICEwLCBsb2FkZWRWYWx1ZTogdCB9LCB0aGlzLl9zdWJqZWN0Lm5leHQodCksIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9LCB0aGlzLnRocm93ID0gKHQsIHIpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImVycm9yXCIsIGlzU3VjY2VzczogITEsIGVycm9yOiB0LCBlcnJNc2c6IHIgfSwgdGhpcy5fc3ViamVjdC5lcnJvcih0KTtcbiAgICB9LCB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHQpID0+IHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiA/IHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUgOiB0LCB0aGlzLnN1YnNjcmliZSA9ICh0KSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHQodGhpcy5fY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIgJiYgdCh0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHIgPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAobmV4dCk6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB0KHRoaXMuX2N1cnJlbnQpLCByLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImVycm9yXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB0KHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLndhaXRGb3JMb2FkID0gKHQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuX2N1cnJlbnQuZXJyb3IpO1xuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiICYmIGt0KHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgciA9IHtcbiAgICAgICAgZmlyc3Q6IHQudGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gYWkoKCkgPT4gbmV3IEVycm9yKHQudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHNpKHRoaXMuX3N1YmplY3QucGlwZSh1aShyKSkpO1xuICAgIH0sIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogITEgfSwgdGhpcy5fc3ViamVjdCA9IG5ldyB1bigpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5jb25zdCB3ciA9IHokMS5lbnVtKFtcImRldlwiLCBcInN0Z1wiLCBcInByb2RcIl0pLCBwaSA9IHtcbiAgcHJvZDogXCJodHRwczovL2Nvbm50by5nZXRvcGVucGF5LmNvbVwiLFxuICBzdGc6IFwiaHR0cHM6Ly9jb25udG8ub3BlbnBheXN0YWdpbmcuY29tXCIsXG4gIGRldjogXCJodHRwOi8vbG9jYWxob3N0OjgwMDBcIlxufSwgX2kgPSAoZSkgPT4gcGlbZV0sIEx0ID0ge30sIHBuID0gYXN5bmMgKGUpID0+IHtcbiAgaWYgKEx0W2VdKVxuICAgIHJldHVybiBMdFtlXTtcbiAgdHJ5IHtcbiAgICBjb25zdCB0ID0gYXdhaXQgZmV0Y2gobmV3IFVSTChcIi9oZWFsdGgvZW52aXJvbm1lbnRcIiwgZSkpLnRoZW4oKG4pID0+IG4uanNvbigpKSwgciA9IHdyLnBhcnNlKHQuZW52aXJvbm1lbnQpO1xuICAgIHJldHVybiBMdFtlXSA9IHIsIHI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB3ci5WYWx1ZXMucHJvZDtcbiAgfVxufTtcbmZ1bmN0aW9uIGt0KGUpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHtlfWApO1xufVxuY29uc3QgQXQgPSAoZSwgdCkgPT4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW3JdKSA9PiAhdC5pbmNsdWRlcyhyKSkpLCAkID0gKCkgPT4ge1xuICBpZiAoISh0eXBlb2Ygd2luZG93ID4gXCJ1XCIpKVxuICAgIHJldHVybiB3aW5kb3c7XG59LCBxdCA9IG5ldyBldCgpLCB2ciA9IFwib3BfbWV0cmljc19xdWV1ZVwiLCBtaSA9IDMsIGZpID0gMywgeWkgPSAxZTMsIHsgbG9nX186IF90IH0gPSBJKFwib3AtbWV0cmljc1wiKTtcbmNsYXNzIGhpIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdmFyIHQsIHI7XG4gICAgdGhpcy5xdWV1ZSA9IFtdLCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9ICExLCB0aGlzLmJhdGNoVGltZW91dCA9IG51bGwsIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gMCwgdGhpcy5vZmZsaW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBfdChcIk5ldHdvcmsgb2ZmbGluZSwgbWV0cmljcyB3aWxsIGJlIHF1ZXVlZFwiKSwgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICB9LCB0aGlzLm9ubGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgX3QoXCJOZXR3b3JrIG9ubGluZSwgcHJvY2Vzc2luZyBtZXRyaWNzIHF1ZXVlXCIpLCB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgIH0sIHRoaXMubG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKSwgKHQgPSAkKCkpID09IG51bGwgfHwgdC5hZGRFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lciksIChyID0gJCgpKSA9PSBudWxsIHx8IHIuYWRkRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgfVxuICBhZGRFdmVudCh0LCByLCBuKSB7XG4gICAgY29uc3QgYSA9IHtcbiAgICAgIGV2ZW50TmFtZTogdCxcbiAgICAgIHByb3BlcnRpZXM6IHIgfHwge30sXG4gICAgICBjb250ZXh0UHJvcGVydGllczogbiB8fCB7fSxcbiAgICAgIG5vbmNlOiB2NCgpLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgZGF0ZXRpbWU6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIGF0dGVtcHRDb3VudDogMCxcbiAgICAgIHRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQ6IHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID8gRGF0ZS5ub3coKSAtIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wIDogMFxuICAgIH07XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSBhLnRpbWVzdGFtcCwgdGhpcy5xdWV1ZS5wdXNoKGEpLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpLCB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbiAgbG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKSB7XG4gICAgdmFyIHQsIHI7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG4gPSAociA9ICh0ID0gJCgpKSA9PSBudWxsID8gdm9pZCAwIDogdC5sb2NhbFN0b3JhZ2UpID09IG51bGwgPyB2b2lkIDAgOiByLmdldEl0ZW0odnIpO1xuICAgICAgbiAmJiAodGhpcy5xdWV1ZSA9IEpTT04ucGFyc2UobikpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhpcy5xdWV1ZSA9IFtdLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIH1cbiAgfVxuICBzYXZlUXVldWVUb1N0b3JhZ2UoKSB7XG4gICAgdmFyIHQ7XG4gICAgKHQgPSAkKCkpID09IG51bGwgfHwgdC5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh2ciwgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWV1ZSkpO1xuICB9XG4gIHNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIGNvbnN0IHQgPSAkKCk7XG4gICAgdCAmJiBuYXZpZ2F0b3Iub25MaW5lICYmICF0aGlzLnByb2Nlc3NpbmdRdWV1ZSAmJiB0aGlzLnF1ZXVlLmxlbmd0aCA+IDAgJiYgIXRoaXMuYmF0Y2hUaW1lb3V0ICYmICh0aGlzLmJhdGNoVGltZW91dCA9IHQuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGwsIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgfSwgeWkpKTtcbiAgfVxuICBjYW5jZWxCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgdmFyIHQ7XG4gICAgdGhpcy5iYXRjaFRpbWVvdXQgJiYgKCh0ID0gJCgpKSA9PSBudWxsIHx8IHQuY2xlYXJUaW1lb3V0KHRoaXMuYmF0Y2hUaW1lb3V0KSwgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsKSwgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSAhMTtcbiAgfVxuICBwcm9jZXNzUXVldWUoKSB7XG4gICAgIW5hdmlnYXRvci5vbkxpbmUgfHwgdGhpcy5wcm9jZXNzaW5nUXVldWUgfHwgdGhpcy5xdWV1ZS5sZW5ndGggPT09IDAgfHwgKHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gITAsIHRoaXMuc2VuZEJhdGNoKCkuZmluYWxseSgoKSA9PiB7XG4gICAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9ICExLCB0aGlzLnF1ZXVlLmxlbmd0aCA+IDAgJiYgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICAgIH0pKTtcbiAgfVxuICBhc3luYyBzZW5kQmF0Y2goKSB7XG4gICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgdCA9IHF0LmdldFZhbHVlSWZMb2FkZWRFbHNlKHZvaWQgMCk7XG4gICAgaWYgKCF0KSB7XG4gICAgICBfdChcIk1ldHJpY3MgY29udGV4dCBub3QgYXZhaWxhYmxlLCB3aWxsIHJldHJ5IGxhdGVyXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByID0gdGhpcy5xdWV1ZS5zbGljZSgwLCBmaSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG4gPSB7XG4gICAgICAgIGV2ZW50czogci5tYXAoKGMpID0+ICh7XG4gICAgICAgICAgZXZlbnRfbmFtZTogYy5ldmVudE5hbWUsXG4gICAgICAgICAgZGV2aWNlX3Rva2VuOiB0LmRldmljZVRva2VuLFxuICAgICAgICAgIGNvbnRleHRfcHJvcGVydGllczoge1xuICAgICAgICAgICAgLi4udCxcbiAgICAgICAgICAgIC4uLmMuY29udGV4dFByb3BlcnRpZXNcbiAgICAgICAgICB9LFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIG5vbmNlOiBjLm5vbmNlLFxuICAgICAgICAgICAgZGF0ZXRpbWU6IGMuZGF0ZXRpbWUsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IGMudGltZXN0YW1wLFxuICAgICAgICAgICAgdGltZV9kaWZmX2Zyb21fcHJldmlvdXNfZXZlbnQ6IGMudGltZURpZmZGcm9tUHJldmlvdXNFdmVudCxcbiAgICAgICAgICAgIGNoZWNrb3V0X3NlY3VyZV90b2tlbjogdC5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgLi4uYy5wcm9wZXJ0aWVzXG4gICAgICAgICAgfVxuICAgICAgICB9KSlcbiAgICAgIH0sIGEgPSBfaSh0LmVudmlyb25tZW50KSwgbyA9IG5ldyBVUkwoXCIvbWV0cmljcy9wdWJsaWMvY2FwdHVyZVwiLCBhKTtcbiAgICAgIChhd2FpdCBmZXRjaChvLnRvU3RyaW5nKCksIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KG4pXG4gICAgICB9KSkub2sgPyAodGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2Uoci5sZW5ndGgpLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpKSA6IHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2gocik7XG4gICAgfSBjYXRjaCAobikge1xuICAgICAgX3QoXCJFcnJvciBzZW5kaW5nIG1ldHJpY3MgYmF0Y2g6XCIsIG4pLCB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKHIpO1xuICAgIH1cbiAgfVxuICBoYW5kbGVGYWlsZWRCYXRjaCh0KSB7XG4gICAgdC5mb3JFYWNoKChuKSA9PiB7XG4gICAgICBuLmF0dGVtcHRDb3VudCsrO1xuICAgIH0pO1xuICAgIGNvbnN0IHIgPSB0LmZpbHRlcigobikgPT4gbi5hdHRlbXB0Q291bnQgPCBtaSk7XG4gICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UodC5sZW5ndGgpLCB0aGlzLnF1ZXVlID0gWy4uLnIsIC4uLnRoaXMucXVldWVdLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICB9XG4gIGNsZWFudXAoKSB7XG4gICAgdmFyIHQsIHI7XG4gICAgKHQgPSAkKCkpID09IG51bGwgfHwgdC5yZW1vdmVFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lciksIChyID0gJCgpKSA9PSBudWxsIHx8IHIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKSwgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxufVxuY29uc3QgV3QgPSBuZXcgaGkoKSwgZyA9IChlLCB0LCByKSA9PiB7XG4gIFd0LmFkZEV2ZW50KGUsIHQsIHIpO1xufSwgZ2kgPSAoKSA9PiB7XG4gIFd0LnByb2Nlc3NRdWV1ZSgpO1xufSwgX24gPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZWUoZS5yZWFzb24pO1xuICBnKFwidW5oYW5kbGVkX3JlamVjdGlvbl9lcnJvclwiLCB7XG4gICAgZXJyb3JfbWVzc2FnZTogdCxcbiAgICBlcnJvcl9uYW1lOiBlLnJlYXNvblxuICB9KTtcbn0sIG1uID0gKGUpID0+IHtcbiAgdmFyIHIsIG47XG4gIGNvbnN0IHQgPSBlZShlLmVycm9yKTtcbiAgZyhcInVuY2F1Z2h0X2Vycm9yXCIsIHtcbiAgICBlcnJvcl9tZXNzYWdlOiB0LFxuICAgIGVycm9yX25hbWU6IChyID0gZS5lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IHIubmFtZSxcbiAgICBlcnJvcl9zdGFjazogKG4gPSBlLmVycm9yKSA9PSBudWxsID8gdm9pZCAwIDogbi5zdGFjayxcbiAgICBmaWxlX25hbWU6IGUuZmlsZW5hbWUsXG4gICAgbGluZV9udW1iZXI6IGUubGluZW5vLFxuICAgIGNvbHVtbl9udW1iZXI6IGUuY29sbm9cbiAgfSk7XG59LCB3aSA9ICgpID0+IHtcbiAgdmFyIGUsIHQ7XG4gIChlID0gJCgpKSA9PSBudWxsIHx8IGUuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIG1uKSwgKHQgPSAkKCkpID09IG51bGwgfHwgdC5hZGRFdmVudExpc3RlbmVyKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsIF9uKTtcbn0sIHZpID0gKCkgPT4ge1xuICB2YXIgZSwgdDtcbiAgKGUgPSAkKCkpID09IG51bGwgfHwgZS5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgbW4pLCAodCA9ICQoKSkgPT0gbnVsbCB8fCB0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIiwgX24pO1xufTtcbnZhciBHcjtcbihHciA9ICQoKSkgPT0gbnVsbCB8fCBHci5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsICgpID0+IHtcbiAgV3QucHJvY2Vzc1F1ZXVlKCk7XG59KTtcbmNvbnN0IGJpID0geiQxLm9iamVjdCh7XG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogeiQxLnN0cmluZygpXG59KSwgRWkgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG59KSwgUGkgPSB7XG4gIHVzZDogXCJ1c2RcIixcbiAgYnJsOiBcImJybFwiXG59LCBJdCA9IGFzeW5jIChlKSA9PiB7XG4gIGZvciAobGV0IHIgPSAwOyByIDwgMTA7IHIrKylcbiAgICBicigpIHx8IGF3YWl0IFR0KDUwMCk7XG4gIGlmICghYnIoKSlcbiAgICB0aHJvdyBjb25zb2xlLmxvZyhcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpLCBuZXcgRXJyb3IoXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKTtcbiAgcmV0dXJuIG5ldyBTdHJpcGUoZSk7XG59LCBTaSA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBhd2FpdCBJdChlKTtcbiAgcmV0dXJuIHtcbiAgICBlbGVtZW50czogci5lbGVtZW50cyh0KSxcbiAgICBzdHJpcGU6IHJcbiAgfTtcbn0sIENpID0gYXN5bmMgKGUsIHQsIHIsIG4sIGEpID0+IHtcbiAgY29uc3QgbyA9IGF3YWl0IEl0KGUpLCBzID0gUGlbci50b0xvd2VyQ2FzZSgpLnRyaW0oKV07XG4gIHJldHVybiBvLnBheW1lbnRSZXF1ZXN0KHtcbiAgICAvLyBUT0RPOiByZXBsYWNlIHRoaXMgd2l0aCBzdHJpcGUgYWNjb3VudCBjb3VudHJ5IGFzIHNvb24gYXMgd2Ugc3VwcG9ydCBpdFxuICAgIGNvdW50cnk6IFwiVVNcIixcbiAgICBjdXJyZW5jeTogcyxcbiAgICB0b3RhbDoge1xuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIGFtb3VudDogdCxcbiAgICAgIHBlbmRpbmc6IG5cbiAgICB9LFxuICAgIC8vIHJlcXVlc3RTaGlwcGluZzogdHJ1ZSxcbiAgICByZXF1ZXN0UGF5ZXJOYW1lOiAhMCxcbiAgICByZXF1ZXN0UGF5ZXJFbWFpbDogITAsXG4gICAgZGlzYWJsZVdhbGxldHM6IFtdXG4gIH0pO1xufSwgVHQgPSAoZSkgPT4gbmV3IFByb21pc2UoKHQpID0+IHtcbiAgc2V0VGltZW91dCh0LCBlKTtcbn0pLCBiciA9ICgpID0+IFwiU3RyaXBlXCIgaW4gd2luZG93LCBraSA9IGFzeW5jIChlKSA9PiBuZXcgUHJvbWlzZSgodCwgcikgPT4ge1xuICB0cnkge1xuICAgIGUub24oXCJwYXltZW50bWV0aG9kXCIsIGFzeW5jIChuKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcInBheW1lbnRtZXRob2QgRVZUOjogXCIsIG4pLCB0KG4pO1xuICAgIH0pLCBlLm9uKFwidG9rZW5cIiwgYXN5bmMgKG4pID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwidG9rZW4gRVZUOjogXCIsIG4pO1xuICAgIH0pLCBlLm9uKFwiY2FuY2VsXCIsICgpID0+IHtcbiAgICAgIHIobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAobikge1xuICAgIHIobik7XG4gIH1cbn0pLCBBaSA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGlmICghZS5zdHJpcGVfcGsgfHwgIWUuY2xpZW50X3NlY3JldClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmV4dCBhY3Rpb24gbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KGUpfWApO1xuICBjb25zdCBuID0gYXdhaXQgKGF3YWl0IEl0KGUuc3RyaXBlX3BrKSkuY29uZmlybUNhcmRTZXR1cChlLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogdC5wYXltZW50TWV0aG9kLmlkXG4gIH0pO1xuICBpZiAobi5lcnJvcilcbiAgICB0aHJvdyB0LmNvbXBsZXRlKFwiZmFpbFwiKSwgbmV3IEVycm9yKGBQYXltZW50IGZhaWxlZDogJHtuLmVycm9yLm1lc3NhZ2UgPz8gXCJ1bmtub3duXCJ9YCk7XG4gIHJldHVybiB0LmNvbXBsZXRlKFwic3VjY2Vzc1wiKSwgbjtcbn0sIElpID0gYXN5bmMgKGUpID0+IHtcbiAgdmFyIGEsIG8sIHMsIGM7XG4gIGNvbnN0IHIgPSBhd2FpdCAoYXdhaXQgSXQoZS5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKGUuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiBlLnN0cmlwZV9wbV9pZFxuICB9KSwgbiA9IChhID0gci5zZXR1cEludGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGEuc3RhdHVzO1xuICBpZiAobiA9PT0gXCJzdWNjZWVkZWRcIilcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIENPTkZJUk1JTkcgUE06XCIsIGUuc3RyaXBlX3BtX2lkKSwgY29uc29sZS5sb2coXCJbM0RTXSBTZXR1cCBpbnRlbnQgY3JlYXRlZDpcIiwgci5zZXR1cEludGVudCk7XG4gIGVsc2UgdGhyb3cgbiA9PT0gXCJjYW5jZWxlZFwiID8gbmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpIDogbmV3IEVycm9yKFxuICAgIGAkeygobyA9IHIuZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBvLm1lc3NhZ2UpID8/ICgoYyA9IChzID0gci5zZXR1cEludGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IHMubGFzdF9zZXR1cF9lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IGMubWVzc2FnZSkgPz8gXCJQYXltZW50IGZhaWxlZCwgcGxlYXNlIGNsaWNrIHN1Ym1pdCBhZ2FpbiB0byBwYXkuXCJ9YFxuICApO1xufTtcbnZhciBUaSA9IHR5cGVvZiBnbG9iYWxUaGlzID09IFwib2JqZWN0XCIgPyBnbG9iYWxUaGlzIDogdHlwZW9mIHNlbGYgPT0gXCJvYmplY3RcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ID09IFwib2JqZWN0XCIgPyB3aW5kb3cgOiB0eXBlb2YgZ2xvYmFsID09IFwib2JqZWN0XCIgPyBnbG9iYWwgOiB7fSwgVGUgPSBcIjEuOS4wXCIsIEVyID0gL14oXFxkKylcXC4oXFxkKylcXC4oXFxkKykoLSguKykpPyQvO1xuZnVuY3Rpb24gUmkoZSkge1xuICB2YXIgdCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFtlXSksIHIgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLCBuID0gZS5tYXRjaChFcik7XG4gIGlmICghbilcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gITE7XG4gICAgfTtcbiAgdmFyIGEgPSB7XG4gICAgbWFqb3I6ICtuWzFdLFxuICAgIG1pbm9yOiArblsyXSxcbiAgICBwYXRjaDogK25bM10sXG4gICAgcHJlcmVsZWFzZTogbls0XVxuICB9O1xuICBpZiAoYS5wcmVyZWxlYXNlICE9IG51bGwpXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGwpIHtcbiAgICAgIHJldHVybiBsID09PSBlO1xuICAgIH07XG4gIGZ1bmN0aW9uIG8oYykge1xuICAgIHJldHVybiByLmFkZChjKSwgITE7XG4gIH1cbiAgZnVuY3Rpb24gcyhjKSB7XG4gICAgcmV0dXJuIHQuYWRkKGMpLCAhMDtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24obCkge1xuICAgIGlmICh0LmhhcyhsKSlcbiAgICAgIHJldHVybiAhMDtcbiAgICBpZiAoci5oYXMobCkpXG4gICAgICByZXR1cm4gITE7XG4gICAgdmFyIHUgPSBsLm1hdGNoKEVyKTtcbiAgICBpZiAoIXUpXG4gICAgICByZXR1cm4gbyhsKTtcbiAgICB2YXIgZCA9IHtcbiAgICAgIG1ham9yOiArdVsxXSxcbiAgICAgIG1pbm9yOiArdVsyXSxcbiAgICAgIHBhdGNoOiArdVszXSxcbiAgICAgIHByZXJlbGVhc2U6IHVbNF1cbiAgICB9O1xuICAgIHJldHVybiBkLnByZXJlbGVhc2UgIT0gbnVsbCB8fCBhLm1ham9yICE9PSBkLm1ham9yID8gbyhsKSA6IGEubWFqb3IgPT09IDAgPyBhLm1pbm9yID09PSBkLm1pbm9yICYmIGEucGF0Y2ggPD0gZC5wYXRjaCA/IHMobCkgOiBvKGwpIDogYS5taW5vciA8PSBkLm1pbm9yID8gcyhsKSA6IG8obCk7XG4gIH07XG59XG52YXIgTmkgPSBSaShUZSksIEZpID0gVGUuc3BsaXQoXCIuXCIpWzBdLCBvdCA9IFN5bWJvbC5mb3IoXCJvcGVudGVsZW1ldHJ5LmpzLmFwaS5cIiArIEZpKSwgYXQgPSBUaTtcbmZ1bmN0aW9uIFp0KGUsIHQsIHIsIG4pIHtcbiAgdmFyIGE7XG4gIG4gPT09IHZvaWQgMCAmJiAobiA9ICExKTtcbiAgdmFyIG8gPSBhdFtvdF0gPSAoYSA9IGF0W290XSkgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IHtcbiAgICB2ZXJzaW9uOiBUZVxuICB9O1xuICBpZiAoIW4gJiYgb1tlXSkge1xuICAgIHZhciBzID0gbmV3IEVycm9yKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBBdHRlbXB0ZWQgZHVwbGljYXRlIHJlZ2lzdHJhdGlvbiBvZiBBUEk6IFwiICsgZSk7XG4gICAgcmV0dXJuIHIuZXJyb3Iocy5zdGFjayB8fCBzLm1lc3NhZ2UpLCAhMTtcbiAgfVxuICBpZiAoby52ZXJzaW9uICE9PSBUZSkge1xuICAgIHZhciBzID0gbmV3IEVycm9yKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBSZWdpc3RyYXRpb24gb2YgdmVyc2lvbiB2XCIgKyBvLnZlcnNpb24gKyBcIiBmb3IgXCIgKyBlICsgXCIgZG9lcyBub3QgbWF0Y2ggcHJldmlvdXNseSByZWdpc3RlcmVkIEFQSSB2XCIgKyBUZSk7XG4gICAgcmV0dXJuIHIuZXJyb3Iocy5zdGFjayB8fCBzLm1lc3NhZ2UpLCAhMTtcbiAgfVxuICByZXR1cm4gb1tlXSA9IHQsIHIuZGVidWcoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IFJlZ2lzdGVyZWQgYSBnbG9iYWwgZm9yIFwiICsgZSArIFwiIHZcIiArIFRlICsgXCIuXCIpLCAhMDtcbn1cbmZ1bmN0aW9uIGl0KGUpIHtcbiAgdmFyIHQsIHIsIG4gPSAodCA9IGF0W290XSkgPT09IG51bGwgfHwgdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdC52ZXJzaW9uO1xuICBpZiAoISghbiB8fCAhTmkobikpKVxuICAgIHJldHVybiAociA9IGF0W290XSkgPT09IG51bGwgfHwgciA9PT0gdm9pZCAwID8gdm9pZCAwIDogcltlXTtcbn1cbmZ1bmN0aW9uIEt0KGUsIHQpIHtcbiAgdC5kZWJ1ZyhcIkBvcGVudGVsZW1ldHJ5L2FwaTogVW5yZWdpc3RlcmluZyBhIGdsb2JhbCBmb3IgXCIgKyBlICsgXCIgdlwiICsgVGUgKyBcIi5cIik7XG4gIHZhciByID0gYXRbb3RdO1xuICByICYmIGRlbGV0ZSByW2VdO1xufVxudmFyIE1pID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIGEsIG8gPSBbXSwgcztcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKGEgPSBuLm5leHQoKSkuZG9uZTsgKSBvLnB1c2goYS52YWx1ZSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBzID0geyBlcnJvcjogYyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBhICYmICFhLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocykgdGhyb3cgcy5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG87XG59LCBMaSA9IGZ1bmN0aW9uKGUsIHQsIHIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBhID0gdC5sZW5ndGgsIG87IG4gPCBhOyBuKyspXG4gICAgKG8gfHwgIShuIGluIHQpKSAmJiAobyB8fCAobyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsIDAsIG4pKSwgb1tuXSA9IHRbbl0pO1xuICByZXR1cm4gZS5jb25jYXQobyB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7XG59LCBEaSA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKHQpIHtcbiAgICAgIHRoaXMuX25hbWVzcGFjZSA9IHQubmFtZXNwYWNlIHx8IFwiRGlhZ0NvbXBvbmVudExvZ2dlclwiO1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuZGVidWcgPSBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDA7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICAgIHRbcl0gPSBhcmd1bWVudHNbcl07XG4gICAgICByZXR1cm4gWWUoXCJkZWJ1Z1wiLCB0aGlzLl9uYW1lc3BhY2UsIHQpO1xuICAgIH0sIGUucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgICAgcmV0dXJuIFllKFwiZXJyb3JcIiwgdGhpcy5fbmFtZXNwYWNlLCB0KTtcbiAgICB9LCBlLnByb3RvdHlwZS5pbmZvID0gZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgICAgcmV0dXJuIFllKFwiaW5mb1wiLCB0aGlzLl9uYW1lc3BhY2UsIHQpO1xuICAgIH0sIGUucHJvdG90eXBlLndhcm4gPSBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDA7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICAgIHRbcl0gPSBhcmd1bWVudHNbcl07XG4gICAgICByZXR1cm4gWWUoXCJ3YXJuXCIsIHRoaXMuX25hbWVzcGFjZSwgdCk7XG4gICAgfSwgZS5wcm90b3R5cGUudmVyYm9zZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgZm9yICh2YXIgdCA9IFtdLCByID0gMDsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKylcbiAgICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICAgIHJldHVybiBZZShcInZlcmJvc2VcIiwgdGhpcy5fbmFtZXNwYWNlLCB0KTtcbiAgICB9LCBlO1xuICB9KClcbik7XG5mdW5jdGlvbiBZZShlLCB0LCByKSB7XG4gIHZhciBuID0gaXQoXCJkaWFnXCIpO1xuICBpZiAobilcbiAgICByZXR1cm4gci51bnNoaWZ0KHQpLCBuW2VdLmFwcGx5KG4sIExpKFtdLCBNaShyKSwgITEpKTtcbn1cbnZhciBYO1xuKGZ1bmN0aW9uKGUpIHtcbiAgZVtlLk5PTkUgPSAwXSA9IFwiTk9ORVwiLCBlW2UuRVJST1IgPSAzMF0gPSBcIkVSUk9SXCIsIGVbZS5XQVJOID0gNTBdID0gXCJXQVJOXCIsIGVbZS5JTkZPID0gNjBdID0gXCJJTkZPXCIsIGVbZS5ERUJVRyA9IDcwXSA9IFwiREVCVUdcIiwgZVtlLlZFUkJPU0UgPSA4MF0gPSBcIlZFUkJPU0VcIiwgZVtlLkFMTCA9IDk5OTldID0gXCJBTExcIjtcbn0pKFggfHwgKFggPSB7fSkpO1xuZnVuY3Rpb24geGkoZSwgdCkge1xuICBlIDwgWC5OT05FID8gZSA9IFguTk9ORSA6IGUgPiBYLkFMTCAmJiAoZSA9IFguQUxMKSwgdCA9IHQgfHwge307XG4gIGZ1bmN0aW9uIHIobiwgYSkge1xuICAgIHZhciBvID0gdFtuXTtcbiAgICByZXR1cm4gdHlwZW9mIG8gPT0gXCJmdW5jdGlvblwiICYmIGUgPj0gYSA/IG8uYmluZCh0KSA6IGZ1bmN0aW9uKCkge1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBlcnJvcjogcihcImVycm9yXCIsIFguRVJST1IpLFxuICAgIHdhcm46IHIoXCJ3YXJuXCIsIFguV0FSTiksXG4gICAgaW5mbzogcihcImluZm9cIiwgWC5JTkZPKSxcbiAgICBkZWJ1ZzogcihcImRlYnVnXCIsIFguREVCVUcpLFxuICAgIHZlcmJvc2U6IHIoXCJ2ZXJib3NlXCIsIFguVkVSQk9TRSlcbiAgfTtcbn1cbnZhciBPaSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBhLCBvID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShhID0gbi5uZXh0KCkpLmRvbmU7ICkgby5wdXNoKGEudmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgcyA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgYSAmJiAhYS5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBvO1xufSwgVWkgPSBmdW5jdGlvbihlLCB0LCByKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgYSA9IHQubGVuZ3RoLCBvOyBuIDwgYTsgbisrKVxuICAgIChvIHx8ICEobiBpbiB0KSkgJiYgKG8gfHwgKG8gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LCAwLCBuKSksIG9bbl0gPSB0W25dKTtcbiAgcmV0dXJuIGUuY29uY2F0KG8gfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpO1xufSwgamkgPSBcImRpYWdcIiwgRXQgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICAgIGZ1bmN0aW9uIHQoYSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZm9yICh2YXIgbyA9IFtdLCBzID0gMDsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKylcbiAgICAgICAgICAgIG9bc10gPSBhcmd1bWVudHNbc107XG4gICAgICAgICAgdmFyIGMgPSBpdChcImRpYWdcIik7XG4gICAgICAgICAgaWYgKGMpXG4gICAgICAgICAgICByZXR1cm4gY1thXS5hcHBseShjLCBVaShbXSwgT2kobyksICExKSk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB2YXIgciA9IHRoaXMsIG4gPSBmdW5jdGlvbihhLCBvKSB7XG4gICAgICAgIHZhciBzLCBjLCBsO1xuICAgICAgICBpZiAobyA9PT0gdm9pZCAwICYmIChvID0geyBsb2dMZXZlbDogWC5JTkZPIH0pLCBhID09PSByKSB7XG4gICAgICAgICAgdmFyIHUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgdXNlIGRpYWcgYXMgdGhlIGxvZ2dlciBmb3IgaXRzZWxmLiBQbGVhc2UgdXNlIGEgRGlhZ0xvZ2dlciBpbXBsZW1lbnRhdGlvbiBsaWtlIENvbnNvbGVEaWFnTG9nZ2VyIG9yIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uXCIpO1xuICAgICAgICAgIHJldHVybiByLmVycm9yKChzID0gdS5zdGFjaykgIT09IG51bGwgJiYgcyAhPT0gdm9pZCAwID8gcyA6IHUubWVzc2FnZSksICExO1xuICAgICAgICB9XG4gICAgICAgIHR5cGVvZiBvID09IFwibnVtYmVyXCIgJiYgKG8gPSB7XG4gICAgICAgICAgbG9nTGV2ZWw6IG9cbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBkID0gaXQoXCJkaWFnXCIpLCBmID0geGkoKGMgPSBvLmxvZ0xldmVsKSAhPT0gbnVsbCAmJiBjICE9PSB2b2lkIDAgPyBjIDogWC5JTkZPLCBhKTtcbiAgICAgICAgaWYgKGQgJiYgIW8uc3VwcHJlc3NPdmVycmlkZU1lc3NhZ2UpIHtcbiAgICAgICAgICB2YXIgXyA9IChsID0gbmV3IEVycm9yKCkuc3RhY2spICE9PSBudWxsICYmIGwgIT09IHZvaWQgMCA/IGwgOiBcIjxmYWlsZWQgdG8gZ2VuZXJhdGUgc3RhY2t0cmFjZT5cIjtcbiAgICAgICAgICBkLndhcm4oXCJDdXJyZW50IGxvZ2dlciB3aWxsIGJlIG92ZXJ3cml0dGVuIGZyb20gXCIgKyBfKSwgZi53YXJuKFwiQ3VycmVudCBsb2dnZXIgd2lsbCBvdmVyd3JpdGUgb25lIGFscmVhZHkgcmVnaXN0ZXJlZCBmcm9tIFwiICsgXyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFp0KFwiZGlhZ1wiLCBmLCByLCAhMCk7XG4gICAgICB9O1xuICAgICAgci5zZXRMb2dnZXIgPSBuLCByLmRpc2FibGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgS3QoamksIHIpO1xuICAgICAgfSwgci5jcmVhdGVDb21wb25lbnRMb2dnZXIgPSBmdW5jdGlvbihhKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGkoYSk7XG4gICAgICB9LCByLnZlcmJvc2UgPSB0KFwidmVyYm9zZVwiKSwgci5kZWJ1ZyA9IHQoXCJkZWJ1Z1wiKSwgci5pbmZvID0gdChcImluZm9cIiksIHIud2FybiA9IHQoXCJ3YXJuXCIpLCByLmVycm9yID0gdChcImVycm9yXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZS5pbnN0YW5jZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlIHx8ICh0aGlzLl9pbnN0YW5jZSA9IG5ldyBlKCkpLCB0aGlzLl9pbnN0YW5jZTtcbiAgICB9LCBlO1xuICB9KClcbik7XG5mdW5jdGlvbiAkaShlKSB7XG4gIHJldHVybiBTeW1ib2wuZm9yKGUpO1xufVxudmFyIEdpID0gKFxuICAvKiogQGNsYXNzICovXG4gIC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKHQpIHtcbiAgICAgIHZhciByID0gdGhpcztcbiAgICAgIHIuX2N1cnJlbnRDb250ZXh0ID0gdCA/IG5ldyBNYXAodCkgOiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLCByLmdldFZhbHVlID0gZnVuY3Rpb24obikge1xuICAgICAgICByZXR1cm4gci5fY3VycmVudENvbnRleHQuZ2V0KG4pO1xuICAgICAgfSwgci5zZXRWYWx1ZSA9IGZ1bmN0aW9uKG4sIGEpIHtcbiAgICAgICAgdmFyIG8gPSBuZXcgZShyLl9jdXJyZW50Q29udGV4dCk7XG4gICAgICAgIHJldHVybiBvLl9jdXJyZW50Q29udGV4dC5zZXQobiwgYSksIG87XG4gICAgICB9LCByLmRlbGV0ZVZhbHVlID0gZnVuY3Rpb24obikge1xuICAgICAgICB2YXIgYSA9IG5ldyBlKHIuX2N1cnJlbnRDb250ZXh0KTtcbiAgICAgICAgcmV0dXJuIGEuX2N1cnJlbnRDb250ZXh0LmRlbGV0ZShuKSwgYTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBlO1xuICB9KClcbiksIFZpID0gbmV3IEdpKCksIHFpID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIGEsIG8gPSBbXSwgcztcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKGEgPSBuLm5leHQoKSkuZG9uZTsgKSBvLnB1c2goYS52YWx1ZSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBzID0geyBlcnJvcjogYyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBhICYmICFhLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocykgdGhyb3cgcy5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG87XG59LCB6aSA9IGZ1bmN0aW9uKGUsIHQsIHIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBhID0gdC5sZW5ndGgsIG87IG4gPCBhOyBuKyspXG4gICAgKG8gfHwgIShuIGluIHQpKSAmJiAobyB8fCAobyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsIDAsIG4pKSwgb1tuXSA9IHRbbl0pO1xuICByZXR1cm4gZS5jb25jYXQobyB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7XG59LCBIaSA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuYWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gVmk7XG4gICAgfSwgZS5wcm90b3R5cGUud2l0aCA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIGZvciAodmFyIGEgPSBbXSwgbyA9IDM7IG8gPCBhcmd1bWVudHMubGVuZ3RoOyBvKyspXG4gICAgICAgIGFbbyAtIDNdID0gYXJndW1lbnRzW29dO1xuICAgICAgcmV0dXJuIHIuY2FsbC5hcHBseShyLCB6aShbbl0sIHFpKGEpLCAhMSkpO1xuICAgIH0sIGUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gcjtcbiAgICB9LCBlLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgQmkgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIXIpIHJldHVybiBlO1xuICB2YXIgbiA9IHIuY2FsbChlKSwgYSwgbyA9IFtdLCBzO1xuICB0cnkge1xuICAgIGZvciAoOyAodCA9PT0gdm9pZCAwIHx8IHQtLSA+IDApICYmICEoYSA9IG4ubmV4dCgpKS5kb25lOyApIG8ucHVzaChhLnZhbHVlKTtcbiAgfSBjYXRjaCAoYykge1xuICAgIHMgPSB7IGVycm9yOiBjIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGEgJiYgIWEuZG9uZSAmJiAociA9IG4ucmV0dXJuKSAmJiByLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChzKSB0aHJvdyBzLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbztcbn0sIFlpID0gZnVuY3Rpb24oZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIGEgPSB0Lmxlbmd0aCwgbzsgbiA8IGE7IG4rKylcbiAgICAobyB8fCAhKG4gaW4gdCkpICYmIChvIHx8IChvID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBvW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChvIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn0sIER0ID0gXCJjb250ZXh0XCIsIEppID0gbmV3IEhpKCksIFF0ID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLmdldEluc3RhbmNlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IGUoKSksIHRoaXMuX2luc3RhbmNlO1xuICAgIH0sIGUucHJvdG90eXBlLnNldEdsb2JhbENvbnRleHRNYW5hZ2VyID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIFp0KER0LCB0LCBFdC5pbnN0YW5jZSgpKTtcbiAgICB9LCBlLnByb3RvdHlwZS5hY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpLmFjdGl2ZSgpO1xuICAgIH0sIGUucHJvdG90eXBlLndpdGggPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICBmb3IgKHZhciBhLCBvID0gW10sIHMgPSAzOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKVxuICAgICAgICBvW3MgLSAzXSA9IGFyZ3VtZW50c1tzXTtcbiAgICAgIHJldHVybiAoYSA9IHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkpLndpdGguYXBwbHkoYSwgWWkoW3QsIHIsIG5dLCBCaShvKSwgITEpKTtcbiAgICB9LCBlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuYmluZCh0LCByKTtcbiAgICB9LCBlLnByb3RvdHlwZS5fZ2V0Q29udGV4dE1hbmFnZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBpdChEdCkgfHwgSmk7XG4gICAgfSwgZS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5kaXNhYmxlKCksIEt0KER0LCBFdC5pbnN0YW5jZSgpKTtcbiAgICB9LCBlO1xuICB9KClcbiksIHp0O1xuKGZ1bmN0aW9uKGUpIHtcbiAgZVtlLk5PTkUgPSAwXSA9IFwiTk9ORVwiLCBlW2UuU0FNUExFRCA9IDFdID0gXCJTQU1QTEVEXCI7XG59KSh6dCB8fCAoenQgPSB7fSkpO1xudmFyIGZuID0gXCIwMDAwMDAwMDAwMDAwMDAwXCIsIHluID0gXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLCBXaSA9IHtcbiAgdHJhY2VJZDogeW4sXG4gIHNwYW5JZDogZm4sXG4gIHRyYWNlRmxhZ3M6IHp0Lk5PTkVcbn0sIHR0ID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCkge1xuICAgICAgdCA9PT0gdm9pZCAwICYmICh0ID0gV2kpLCB0aGlzLl9zcGFuQ29udGV4dCA9IHQ7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5zcGFuQ29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NwYW5Db250ZXh0O1xuICAgIH0sIGUucHJvdG90eXBlLnNldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLnNldEF0dHJpYnV0ZXMgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5hZGRFdmVudCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLmFkZExpbmsgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5hZGRMaW5rcyA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLnNldFN0YXR1cyA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLnVwZGF0ZU5hbWUgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbih0KSB7XG4gICAgfSwgZS5wcm90b3R5cGUuaXNSZWNvcmRpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhMTtcbiAgICB9LCBlLnByb3RvdHlwZS5yZWNvcmRFeGNlcHRpb24gPSBmdW5jdGlvbih0LCByKSB7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBYdCA9ICRpKFwiT3BlblRlbGVtZXRyeSBDb250ZXh0IEtleSBTUEFOXCIpO1xuZnVuY3Rpb24gZXIoZSkge1xuICByZXR1cm4gZS5nZXRWYWx1ZShYdCkgfHwgdm9pZCAwO1xufVxuZnVuY3Rpb24gWmkoKSB7XG4gIHJldHVybiBlcihRdC5nZXRJbnN0YW5jZSgpLmFjdGl2ZSgpKTtcbn1cbmZ1bmN0aW9uIHRyKGUsIHQpIHtcbiAgcmV0dXJuIGUuc2V0VmFsdWUoWHQsIHQpO1xufVxuZnVuY3Rpb24gS2koZSkge1xuICByZXR1cm4gZS5kZWxldGVWYWx1ZShYdCk7XG59XG5mdW5jdGlvbiBRaShlLCB0KSB7XG4gIHJldHVybiB0cihlLCBuZXcgdHQodCkpO1xufVxuZnVuY3Rpb24gaG4oZSkge1xuICB2YXIgdDtcbiAgcmV0dXJuICh0ID0gZXIoZSkpID09PSBudWxsIHx8IHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHQuc3BhbkNvbnRleHQoKTtcbn1cbnZhciBYaSA9IC9eKFswLTlhLWZdezMyfSkkL2ksIGVzID0gL15bMC05YS1mXXsxNn0kL2k7XG5mdW5jdGlvbiB0cyhlKSB7XG4gIHJldHVybiBYaS50ZXN0KGUpICYmIGUgIT09IHluO1xufVxuZnVuY3Rpb24gcnMoZSkge1xuICByZXR1cm4gZXMudGVzdChlKSAmJiBlICE9PSBmbjtcbn1cbmZ1bmN0aW9uIGduKGUpIHtcbiAgcmV0dXJuIHRzKGUudHJhY2VJZCkgJiYgcnMoZS5zcGFuSWQpO1xufVxuZnVuY3Rpb24gbnMoZSkge1xuICByZXR1cm4gbmV3IHR0KGUpO1xufVxudmFyIHh0ID0gUXQuZ2V0SW5zdGFuY2UoKSwgd24gPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLnN0YXJ0U3BhbiA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIG4gPT09IHZvaWQgMCAmJiAobiA9IHh0LmFjdGl2ZSgpKTtcbiAgICAgIHZhciBhID0gISEociAhPSBudWxsICYmIHIucm9vdCk7XG4gICAgICBpZiAoYSlcbiAgICAgICAgcmV0dXJuIG5ldyB0dCgpO1xuICAgICAgdmFyIG8gPSBuICYmIGhuKG4pO1xuICAgICAgcmV0dXJuIG9zKG8pICYmIGduKG8pID8gbmV3IHR0KG8pIDogbmV3IHR0KCk7XG4gICAgfSwgZS5wcm90b3R5cGUuc3RhcnRBY3RpdmVTcGFuID0gZnVuY3Rpb24odCwgciwgbiwgYSkge1xuICAgICAgdmFyIG8sIHMsIGM7XG4gICAgICBpZiAoIShhcmd1bWVudHMubGVuZ3RoIDwgMikpIHtcbiAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMiA/IGMgPSByIDogYXJndW1lbnRzLmxlbmd0aCA9PT0gMyA/IChvID0gciwgYyA9IG4pIDogKG8gPSByLCBzID0gbiwgYyA9IGEpO1xuICAgICAgICB2YXIgbCA9IHMgPz8geHQuYWN0aXZlKCksIHUgPSB0aGlzLnN0YXJ0U3Bhbih0LCBvLCBsKSwgZCA9IHRyKGwsIHUpO1xuICAgICAgICByZXR1cm4geHQud2l0aChkLCBjLCB2b2lkIDAsIHUpO1xuICAgICAgfVxuICAgIH0sIGU7XG4gIH0oKVxuKTtcbmZ1bmN0aW9uIG9zKGUpIHtcbiAgcmV0dXJuIHR5cGVvZiBlID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIGUuc3BhbklkID09IFwic3RyaW5nXCIgJiYgdHlwZW9mIGUudHJhY2VJZCA9PSBcInN0cmluZ1wiICYmIHR5cGVvZiBlLnRyYWNlRmxhZ3MgPT0gXCJudW1iZXJcIjtcbn1cbnZhciBhcyA9IG5ldyB3bigpLCBpcyA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKHQsIHIsIG4sIGEpIHtcbiAgICAgIHRoaXMuX3Byb3ZpZGVyID0gdCwgdGhpcy5uYW1lID0gciwgdGhpcy52ZXJzaW9uID0gbiwgdGhpcy5vcHRpb25zID0gYTtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLnN0YXJ0U3BhbiA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRUcmFjZXIoKS5zdGFydFNwYW4odCwgciwgbik7XG4gICAgfSwgZS5wcm90b3R5cGUuc3RhcnRBY3RpdmVTcGFuID0gZnVuY3Rpb24odCwgciwgbiwgYSkge1xuICAgICAgdmFyIG8gPSB0aGlzLl9nZXRUcmFjZXIoKTtcbiAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KG8uc3RhcnRBY3RpdmVTcGFuLCBvLCBhcmd1bWVudHMpO1xuICAgIH0sIGUucHJvdG90eXBlLl9nZXRUcmFjZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLl9kZWxlZ2F0ZSlcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlO1xuICAgICAgdmFyIHQgPSB0aGlzLl9wcm92aWRlci5nZXREZWxlZ2F0ZVRyYWNlcih0aGlzLm5hbWUsIHRoaXMudmVyc2lvbiwgdGhpcy5vcHRpb25zKTtcbiAgICAgIHJldHVybiB0ID8gKHRoaXMuX2RlbGVnYXRlID0gdCwgdGhpcy5fZGVsZWdhdGUpIDogYXM7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBzcyA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuZ2V0VHJhY2VyID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgcmV0dXJuIG5ldyB3bigpO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgY3MgPSBuZXcgc3MoKSwgUHIgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLmdldFRyYWNlciA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIHZhciBhO1xuICAgICAgcmV0dXJuIChhID0gdGhpcy5nZXREZWxlZ2F0ZVRyYWNlcih0LCByLCBuKSkgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IG5ldyBpcyh0aGlzLCB0LCByLCBuKTtcbiAgICB9LCBlLnByb3RvdHlwZS5nZXREZWxlZ2F0ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQ7XG4gICAgICByZXR1cm4gKHQgPSB0aGlzLl9kZWxlZ2F0ZSkgIT09IG51bGwgJiYgdCAhPT0gdm9pZCAwID8gdCA6IGNzO1xuICAgIH0sIGUucHJvdG90eXBlLnNldERlbGVnYXRlID0gZnVuY3Rpb24odCkge1xuICAgICAgdGhpcy5fZGVsZWdhdGUgPSB0O1xuICAgIH0sIGUucHJvdG90eXBlLmdldERlbGVnYXRlVHJhY2VyID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgdmFyIGE7XG4gICAgICByZXR1cm4gKGEgPSB0aGlzLl9kZWxlZ2F0ZSkgPT09IG51bGwgfHwgYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogYS5nZXRUcmFjZXIodCwgciwgbik7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBzdDtcbihmdW5jdGlvbihlKSB7XG4gIGVbZS5JTlRFUk5BTCA9IDBdID0gXCJJTlRFUk5BTFwiLCBlW2UuU0VSVkVSID0gMV0gPSBcIlNFUlZFUlwiLCBlW2UuQ0xJRU5UID0gMl0gPSBcIkNMSUVOVFwiLCBlW2UuUFJPRFVDRVIgPSAzXSA9IFwiUFJPRFVDRVJcIiwgZVtlLkNPTlNVTUVSID0gNF0gPSBcIkNPTlNVTUVSXCI7XG59KShzdCB8fCAoc3QgPSB7fSkpO1xudmFyIEVlO1xuKGZ1bmN0aW9uKGUpIHtcbiAgZVtlLlVOU0VUID0gMF0gPSBcIlVOU0VUXCIsIGVbZS5PSyA9IDFdID0gXCJPS1wiLCBlW2UuRVJST1IgPSAyXSA9IFwiRVJST1JcIjtcbn0pKEVlIHx8IChFZSA9IHt9KSk7XG52YXIgeGUgPSBRdC5nZXRJbnN0YW5jZSgpLCBPdCA9IFwidHJhY2VcIiwgbHMgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICAgIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIgPSBuZXcgUHIoKSwgdGhpcy53cmFwU3BhbkNvbnRleHQgPSBucywgdGhpcy5pc1NwYW5Db250ZXh0VmFsaWQgPSBnbiwgdGhpcy5kZWxldGVTcGFuID0gS2ksIHRoaXMuZ2V0U3BhbiA9IGVyLCB0aGlzLmdldEFjdGl2ZVNwYW4gPSBaaSwgdGhpcy5nZXRTcGFuQ29udGV4dCA9IGhuLCB0aGlzLnNldFNwYW4gPSB0ciwgdGhpcy5zZXRTcGFuQ29udGV4dCA9IFFpO1xuICAgIH1cbiAgICByZXR1cm4gZS5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlIHx8ICh0aGlzLl9pbnN0YW5jZSA9IG5ldyBlKCkpLCB0aGlzLl9pbnN0YW5jZTtcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRHbG9iYWxUcmFjZXJQcm92aWRlciA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciByID0gWnQoT3QsIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIsIEV0Lmluc3RhbmNlKCkpO1xuICAgICAgcmV0dXJuIHIgJiYgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlci5zZXREZWxlZ2F0ZSh0KSwgcjtcbiAgICB9LCBlLnByb3RvdHlwZS5nZXRUcmFjZXJQcm92aWRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGl0KE90KSB8fCB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyO1xuICAgIH0sIGUucHJvdG90eXBlLmdldFRyYWNlciA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFRyYWNlclByb3ZpZGVyKCkuZ2V0VHJhY2VyKHQsIHIpO1xuICAgIH0sIGUucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIEt0KE90LCBFdC5pbnN0YW5jZSgpKSwgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlciA9IG5ldyBQcigpO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgamUgPSBscy5nZXRJbnN0YW5jZSgpO1xuY29uc3QgdXMgPSBhc3luYyAoZSwgdCwgcikgPT4ge1xuICBjb25zdCBuID0gamUuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKSwgYSA9IHhlLmFjdGl2ZSgpLCBvID0gbi5zdGFydFNwYW4oXG4gICAgYGNkZS4ke3QudHlwZX1gLFxuICAgIHtcbiAgICAgIGtpbmQ6IHN0LkNMSUVOVCxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgXCJtZXNzYWdlLnR5cGVcIjogdC50eXBlLFxuICAgICAgICAuLi5lLnRyYWNpbmdDb250ZXh0ICYmIHtcbiAgICAgICAgICBcIm9qcy5jaGVja291dFNlY3VyZVRva2VuXCI6IGUudHJhY2luZ0NvbnRleHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiBlLnRyYWNpbmdDb250ZXh0LmRldmljZVRva2VuLFxuICAgICAgICAgIFwib2pzLmZvcm1JZFwiOiBlLnRyYWNpbmdDb250ZXh0LmZvcm1JZCxcbiAgICAgICAgICBcIm9qcy52ZXJzaW9uXCI6IGUudHJhY2luZ0NvbnRleHQudmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogZS50cmFjaW5nQ29udGV4dC5yZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5iYXNlX3VybFwiOiBlLnRyYWNpbmdDb250ZXh0LmJhc2VVcmwsXG4gICAgICAgICAgXCJvanMucmVmZXJyZXJcIjogZS50cmFjaW5nQ29udGV4dC5yZWZlcnJlclxuICAgICAgICB9LFxuICAgICAgICBcImNkZS5tZXNzYWdlLnR5cGVcIjogdC50eXBlLFxuICAgICAgICBcImNkZS5tZXNzYWdlLnBheWxvYWRcIjogSlNPTi5zdHJpbmdpZnkodC5wYXlsb2FkKVxuICAgICAgfVxuICAgIH0sXG4gICAgYVxuICApO1xuICByZXR1cm4geGUud2l0aChqZS5zZXRTcGFuKGEsIG8pLCBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHMgPSBhd2FpdCByKCk7XG4gICAgICByZXR1cm4gby5zZXRTdGF0dXMoeyBjb2RlOiBFZS5PSyB9KSwgcztcbiAgICB9IGNhdGNoIChzKSB7XG4gICAgICB0aHJvdyBvLnNldFN0YXR1cyh7XG4gICAgICAgIGNvZGU6IEVlLkVSUk9SLFxuICAgICAgICBtZXNzYWdlOiBzIGluc3RhbmNlb2YgRXJyb3IgPyBzLm1lc3NhZ2UgOiBcIlVua25vd24gZXJyb3JcIlxuICAgICAgfSksIHM7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIG8uZW5kKCk7XG4gICAgfVxuICB9KTtcbn0sIG10ID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IGplLmdldFRyYWNlcihcIm9wZW5wYXktanNcIiksIG4gPSB4ZS5hY3RpdmUoKSwgYSA9IHIuc3RhcnRTcGFuKFxuICAgIGBmb3JtLiR7ZS5zcGFuTmFtZX1gLFxuICAgIHtcbiAgICAgIGtpbmQ6IHN0LkNMSUVOVCxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiBlLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgIFwib2pzLmRldmljZVRva2VuXCI6IGUuZGV2aWNlVG9rZW4sXG4gICAgICAgIFwib2pzLmZvcm1JZFwiOiBlLmZvcm1JZCxcbiAgICAgICAgXCJvanMudmVyc2lvblwiOiBlLnZlcnNpb24sXG4gICAgICAgIFwib2pzLnJlbGVhc2VfdmVyc2lvblwiOiBlLnJlbGVhc2VWZXJzaW9uLFxuICAgICAgICBcIm9qcy5iYXNlX3VybFwiOiBlLmJhc2VVcmwsXG4gICAgICAgIFwib2pzLnJlZmVycmVyXCI6IGUucmVmZXJyZXIsXG4gICAgICAgIC4uLmUucGF5bWVudFJvdXRlSWQgJiYgeyBcInBheW1lbnQucm91dGVfaWRcIjogZS5wYXltZW50Um91dGVJZCB9XG4gICAgICB9XG4gICAgfSxcbiAgICBuXG4gICk7XG4gIHRyeSB7XG4gICAgY29uc3QgbyA9IGF3YWl0IHQoKTtcbiAgICByZXR1cm4gYS5zZXRTdGF0dXMoeyBjb2RlOiBFZS5PSyB9KSwgbztcbiAgfSBjYXRjaCAobykge1xuICAgIGNvbnN0IHMgPSBvIGluc3RhbmNlb2YgRXJyb3IgPyBvLm1lc3NhZ2UgOiBcIlVua25vd24gZXJyb3JcIjtcbiAgICB0aHJvdyBhLnNldFN0YXR1cyh7XG4gICAgICBjb2RlOiBFZS5FUlJPUixcbiAgICAgIG1lc3NhZ2U6IHNcbiAgICB9KSwgbztcbiAgfSBmaW5hbGx5IHtcbiAgICBhLmVuZCgpO1xuICB9XG59O1xuY2xhc3Mgdm4gZXh0ZW5kcyBsbyB7XG4gIGNvbnN0cnVjdG9yKHQpIHtcbiAgICBjb25zdCByID0gYCR7dC5tZXNzYWdlfWA7XG4gICAgc3VwZXIociksIHRoaXMucmVzcG9uc2UgPSB0O1xuICB9XG4gIGdldCBvcmlnaW5hbEVycm9yTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNwb25zZS5tZXNzYWdlO1xuICB9XG59XG5jb25zdCBCID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHVzKGUsIHQsIGFzeW5jICgpID0+IHtcbiAgbiAmJiBnKG4sIHtcbiAgICAuLi50XG4gIH0pO1xuICBjb25zdCBhID0gYXdhaXQgZS5zZW5kKHQpO1xuICBpZiAocHMoYSkpXG4gICAgdGhyb3cgZyhcImNkZV9yZXNwb25zZV9lcnJvclwiLCB7XG4gICAgICAuLi5hXG4gICAgfSksIG5ldyB2bihhKTtcbiAgaWYgKCFkcyhhLCByKSkge1xuICAgIGNvbnN0IG8gPSByLnNhZmVQYXJzZShhKTtcbiAgICB0aHJvdyBvLnN1Y2Nlc3MgPyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlXCIpIDogKGNvbnNvbGUuZXJyb3IoXCJPSlMgcXVlcnlBcGkgZ290IGEgc2NoZW1hIGVycm9yLiBFeHBlY3RlZCBzY2hlbWE6XCIsIHIsIFwiQWN0dWFsOlwiLCBhKSwgby5lcnJvcik7XG4gIH1cbiAgcmV0dXJuIG4gJiYgZyhuLCB7XG4gICAgLi4uYVxuICB9KSwgYTtcbn0pLCBkcyA9IChlLCB0KSA9PiB0LnNhZmVQYXJzZShlKS5zdWNjZXNzLCBwcyA9IChlKSA9PiBxby5zYWZlUGFyc2UoZSkuc3VjY2VzcywgX3MgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgQihlLCB7IHR5cGU6IFwiZ2V0X2NoZWNrb3V0X3ByZXZpZXdcIiwgcGF5bG9hZDogdCB9LCBLciksIE0gPSBhc3luYyAoZSkgPT4gYXdhaXQgQihlLCB7IHR5cGU6IFwiZ2V0X3ByZWZpbGxcIiwgcGF5bG9hZDoge30gfSwgUXIpLCBuZSA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBCKFxuICBlLFxuICB7IHR5cGU6IFwidjJfc3RhcnRfcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IHQgfSxcbiAgdG4sXG4gIFwic3RhcnRfcGF5bWVudF9mbG93XCJcbiksIGJuID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IEIoXG4gIGUsXG4gIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCIsIHBheWxvYWQ6IHQgfSxcbiAgbmEsXG4gIFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiXG4pLCBtcyA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGcoXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByXCIsIHtcbiAgICAuLi50XG4gIH0pO1xuICBjb25zdCByID0gYXdhaXQgQihlLCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCBwYXlsb2FkOiB0IH0sIHRuKTtcbiAgcmV0dXJuIGcoXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByX3Jlc3VsdFwiLCB7XG4gICAgLi4uclxuICB9KSwgcjtcbn0sIEwgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgQihcbiAgZSxcbiAgeyB0eXBlOiBcImNvbmZpcm1fcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IHQgfSxcbiAgam8sXG4gIFwiY29uZmlybV9wYXltZW50X2Zsb3dcIlxuKSwgZnMgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgQihcbiAgZSxcbiAgeyB0eXBlOiBcImZpbmFsaXplX3NldHVwX3BheW1lbnRfbWV0aG9kXCIsIHBheWxvYWQ6IHQgfSxcbiAgWHIsXG4gIFwiZmluYWxpemVfc2V0dXBfcGF5bWVudF9tZXRob2RcIlxuKSwgeXMgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgQihcbiAgZSxcbiAgeyB0eXBlOiBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiLCBwYXlsb2FkOiB0IH0sXG4gIFVvLFxuICBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiXG4pLCBocyA9IGFzeW5jIChlLCB0LCByKSA9PiB7XG4gIGNvbnN0IG4gPSBhd2FpdCBfcyhlLCB7XG4gICAgc2VjdXJlX3Rva2VuOiB0LFxuICAgIHByb21vdGlvbl9jb2RlOiByXG4gIH0pLCBhID0gbmV3IFNldChuLnByZXZpZXcuaW52b2ljZXMubWFwKChjKSA9PiBjLmN1cnJlbmN5KSk7XG4gIGlmIChhLnNpemUgIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBjdXJyZW5jeSwgZ290ICR7YS5zaXplfWApO1xuICBjb25zdCBvID0gYS52YWx1ZXMoKS5uZXh0KCkudmFsdWUgPz8gXCJ1c2RcIiwgcyA9IGhhKG4ucHJldmlldy5pbnZvaWNlcy5tYXAoKGMpID0+IGMucmVtYWluaW5nX2Ftb3VudF9hdG9tKSk7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3k6IG8sXG4gICAgYW1vdW50QXRvbTogc1xuICB9O1xufSwgdmUgPSBhc3luYyAoZSwgdCwgciwgbikgPT4ge1xuICBpZiAocilcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiAwLCBjdXJyZW5jeTogXCJ1c2RcIiB9O1xuICB7XG4gICAgbiA9IG4gfHwgdm9pZCAwLCBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwicHJvbW9Db2RlXCIpICYmICFuICYmIChuID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInByb21vQ29kZVwiKSk7XG4gICAgY29uc3QgYSA9IGF3YWl0IGhzKGUsIHQsIG4pO1xuICAgIHJldHVybiB7IGFtb3VudEF0b206IGEuYW1vdW50QXRvbSwgY3VycmVuY3k6IGEuY3VycmVuY3kgfTtcbiAgfVxufSwgRW4gPSBhc3luYyAoZSwgdCkgPT4ge1xuICBpZiAoZS5zaXplID09PSAwKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIENERSBjb25uZWN0aW9ucyBmb3VuZFwiKTtcbiAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIEFycmF5LmZyb20oZS52YWx1ZXMoKSkubWFwKFxuICAgICAgKG4pID0+IEIobiwgeyB0eXBlOiBcInRva2VuaXplX2NhcmRcIiwgcGF5bG9hZDogdCB9LCBMbylcbiAgICApXG4gICk7XG59LCBTciA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBCKFxuICBlLFxuICB7IHR5cGU6IFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiLCBwYXlsb2FkOiB0IH0sXG4gIG50LFxuICBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIlxuKSwgZ3MgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgQihlLCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZDogdCB9LCBYciwgXCJzZXR1cF9jaGVja291dFwiKSwgcnIgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgQihlLCB7IHR5cGU6IFwiY2hlY2tvdXRcIiwgcGF5bG9hZDogdCB9LCBudCwgXCJwZXJmb3JtX2NoZWNrb3V0XCIpLCBQbiA9IDFlMywgd3MgPSBhc3luYyAoZSwgdCwgciwgbikgPT4ge1xuICBjb25zb2xlLmxvZyh0KTtcbiAgY29uc3QgbyA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IGUsXG4gICAgZGVidWc6ICEwLFxuICAgIHRpbWVvdXQ6IFBuLFxuICAgIGNoaWxkT3JpZ2luOiBcIipcIlxuICAgIC8vIFRPRE86IHVzZSB3aXRoIHByb3BlciBjaGlsZE9yaWdpblxuICB9KS5wcm9taXNlLCBzID0gYXdhaXQgQihvLCB7IHR5cGU6IHIgfSwgbik7XG4gIHJldHVybiBjb25zb2xlLmxvZyhcIvCfn6IgQ0RFIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCEgU3RvcHBpbmcgcG9sbGluZy4uLiBSZXN1bHQ6XCIsIHMpLCBzO1xufSwgUnQgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgQihcbiAgZSxcbiAgeyB0eXBlOiBcInByZXBhcmVfcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IHQgfSxcbiAgYWEsXG4gIFwicHJlcGFyZV9wYXltZW50X2Zsb3dcIlxuKSwgU24gPSBhc3luYyAoZSwgdCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiAoYXdhaXQgQihcbiAgICAgIGUsXG4gICAgICB7IHR5cGU6IFwiZ2V0X3N0YW5kYXJkaXplZF9lcnJvcl9jb2RlXCIsIHBheWxvYWQ6IHsgbWVzc2FnZTogdCB9IH0sXG4gICAgICBvYVxuICAgICkpLmVycm9yX2NvZGU7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgZ2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlOlwiLCBlZShyKSksIFwiUEFZTUVOVF9GQUlMRURfR0VORVJJQ1wiO1xuICB9XG59LCB2cyA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBCKFxuICBlLFxuICB7IHR5cGU6IFwic2V0X3VzZXJfZGV2aWNlX3Rva2VuXCIsIHBheWxvYWQ6IHsgZGV2aWNlX3Rva2VuOiB0IH0gfSxcbiAgaWFcbiksIGJzID0gYXN5bmMgKGUpID0+IHtcbiAgaWYgKHR5cGVvZiBlICE9IFwib2JqZWN0XCIgfHwgIWUpIHJldHVybiAhMTtcbiAgdHJ5IHtcbiAgICBjb25zdCB0ID0geyB0eXBlOiBcInBpbmdcIiB9LCByID0gYXdhaXQgZS5zZW5kKHQpO1xuICAgIGlmIChyICE9PSAhMClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJ3RydWUnIGFmdGVyIHBpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KHIpfWApO1xuICAgIHJldHVybiAhMDtcbiAgfSBjYXRjaCAodCkge1xuICAgIHJldHVybiBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBDREUgY29ubmVjdGlvbiBjaGVjazpcIiwgdCksICExO1xuICB9XG59LCBFcyA9IChlLCB0KSA9PiAhIWUgJiYgdCwgQ24gPSBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCIsIGtuID0gXCIwMTIzNDU2Nzg5QUJDREVGR0hKS01OUFFSU1RWV1hZWlwiLCBydCA9IDMyLCBQcyA9IDE2LCBBbiA9IDEwLCBDciA9IDI4MTQ3NDk3NjcxMDY1NTtcbnZhciBSZTtcbihmdW5jdGlvbihlKSB7XG4gIGUuQmFzZTMySW5jb3JyZWN0RW5jb2RpbmcgPSBcIkIzMl9FTkNfSU5WQUxJRFwiLCBlLkRlY29kZVRpbWVJbnZhbGlkQ2hhcmFjdGVyID0gXCJERUNfVElNRV9DSEFSXCIsIGUuRGVjb2RlVGltZVZhbHVlTWFsZm9ybWVkID0gXCJERUNfVElNRV9NQUxGT1JNRURcIiwgZS5FbmNvZGVUaW1lTmVnYXRpdmUgPSBcIkVOQ19USU1FX05FR1wiLCBlLkVuY29kZVRpbWVTaXplRXhjZWVkZWQgPSBcIkVOQ19USU1FX1NJWkVfRVhDRUVEXCIsIGUuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkID0gXCJFTkNfVElNRV9NQUxGT1JNRURcIiwgZS5QUk5HRGV0ZWN0RmFpbHVyZSA9IFwiUFJOR19ERVRFQ1RcIiwgZS5VTElESW52YWxpZCA9IFwiVUxJRF9JTlZBTElEXCIsIGUuVW5leHBlY3RlZCA9IFwiVU5FWFBFQ1RFRFwiLCBlLlVVSURJbnZhbGlkID0gXCJVVUlEX0lOVkFMSURcIjtcbn0pKFJlIHx8IChSZSA9IHt9KSk7XG5jbGFzcyBaZSBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IodCwgcikge1xuICAgIHN1cGVyKGAke3J9ICgke3R9KWApLCB0aGlzLm5hbWUgPSBcIlVMSURFcnJvclwiLCB0aGlzLmNvZGUgPSB0O1xuICB9XG59XG5mdW5jdGlvbiBTcyhlKSB7XG4gIGxldCB0ID0gTWF0aC5mbG9vcihlKCkgKiBydCk7XG4gIHJldHVybiB0ID09PSBydCAmJiAodCA9IHJ0IC0gMSksIGtuLmNoYXJBdCh0KTtcbn1cbmZ1bmN0aW9uIENzKGUpIHtcbiAgY29uc3QgdCA9IGtzKCksIHIgPSB0ICYmICh0LmNyeXB0byB8fCB0Lm1zQ3J5cHRvKSB8fCBudWxsO1xuICBpZiAodHlwZW9mIChyID09IG51bGwgPyB2b2lkIDAgOiByLmdldFJhbmRvbVZhbHVlcykgPT0gXCJmdW5jdGlvblwiKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjb25zdCBuID0gbmV3IFVpbnQ4QXJyYXkoMSk7XG4gICAgICByZXR1cm4gci5nZXRSYW5kb21WYWx1ZXMobiksIG5bMF0gLyAyNTU7XG4gICAgfTtcbiAgaWYgKHR5cGVvZiAociA9PSBudWxsID8gdm9pZCAwIDogci5yYW5kb21CeXRlcykgPT0gXCJmdW5jdGlvblwiKVxuICAgIHJldHVybiAoKSA9PiByLnJhbmRvbUJ5dGVzKDEpLnJlYWRVSW50OCgpIC8gMjU1O1xuICB0aHJvdyBuZXcgWmUoUmUuUFJOR0RldGVjdEZhaWx1cmUsIFwiRmFpbGVkIHRvIGZpbmQgYSByZWxpYWJsZSBQUk5HXCIpO1xufVxuZnVuY3Rpb24ga3MoKSB7XG4gIHJldHVybiBUcygpID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgPCBcInVcIiA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgPCBcInVcIiA/IGdsb2JhbCA6IHR5cGVvZiBnbG9iYWxUaGlzIDwgXCJ1XCIgPyBnbG9iYWxUaGlzIDogbnVsbDtcbn1cbmZ1bmN0aW9uIEFzKGUsIHQpIHtcbiAgbGV0IHIgPSBcIlwiO1xuICBmb3IgKDsgZSA+IDA7IGUtLSlcbiAgICByID0gU3ModCkgKyByO1xuICByZXR1cm4gcjtcbn1cbmZ1bmN0aW9uIElzKGUsIHQgPSBBbikge1xuICBpZiAoaXNOYU4oZSkpXG4gICAgdGhyb3cgbmV3IFplKFJlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCwgYFRpbWUgbXVzdCBiZSBhIG51bWJlcjogJHtlfWApO1xuICBpZiAoZSA+IENyKVxuICAgIHRocm93IG5ldyBaZShSZS5FbmNvZGVUaW1lU2l6ZUV4Y2VlZGVkLCBgQ2Fubm90IGVuY29kZSBhIHRpbWUgbGFyZ2VyIHRoYW4gJHtDcn06ICR7ZX1gKTtcbiAgaWYgKGUgPCAwKVxuICAgIHRocm93IG5ldyBaZShSZS5FbmNvZGVUaW1lTmVnYXRpdmUsIGBUaW1lIG11c3QgYmUgcG9zaXRpdmU6ICR7ZX1gKTtcbiAgaWYgKE51bWJlci5pc0ludGVnZXIoZSkgPT09ICExKVxuICAgIHRocm93IG5ldyBaZShSZS5FbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWQsIGBUaW1lIG11c3QgYmUgYW4gaW50ZWdlcjogJHtlfWApO1xuICBsZXQgciwgbiA9IFwiXCI7XG4gIGZvciAobGV0IGEgPSB0OyBhID4gMDsgYS0tKVxuICAgIHIgPSBlICUgcnQsIG4gPSBrbi5jaGFyQXQocikgKyBuLCBlID0gKGUgLSByKSAvIHJ0O1xuICByZXR1cm4gbjtcbn1cbmZ1bmN0aW9uIFRzKCkge1xuICByZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlIDwgXCJ1XCIgJiYgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlO1xufVxuZnVuY3Rpb24gUnMoZSwgdCkge1xuICBjb25zdCByID0gQ3MoKSwgbiA9IERhdGUubm93KCk7XG4gIHJldHVybiBJcyhuLCBBbikgKyBBcyhQcywgcik7XG59XG5jb25zdCBJbiA9IFwib3BfYW5hbHl0aWNzX2RldmljZV90b2tlblwiLCBUbiA9ICgpID0+IHtcbiAgY29uc3QgZSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdChcIjtcIikuZmluZCgocikgPT4gci5pbmNsdWRlcyhJbikpO1xuICBpZiAoZSlcbiAgICByZXR1cm4gZS5zcGxpdChcIj1cIilbMV07XG4gIGNvbnN0IHQgPSBScygpO1xuICByZXR1cm4gTnModCksIHQ7XG59LCBOcyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTtcbiAgdC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkgKyAxKSwgZG9jdW1lbnQuY29va2llID0gYCR7SW59PSR7ZX07IHBhdGg9LzsgZXhwaXJlcz0ke3QudG9VVENTdHJpbmcoKX1gO1xufSwgRnMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0ge307XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhlKS5mb3JFYWNoKChbciwgbl0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYSA9IHFyLnBhcnNlKHIpO1xuICAgICAgQXJyYXkuaXNBcnJheShuKSA/IHRbYV0gPSBuIDogQXJyYXkuaXNBcnJheShuLl9lcnJvcnMpICYmICh0W2FdID0gbi5fZXJyb3JzKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pLCB0O1xufSwgaiA9IChlLCB0KSA9PiBBcnJheS5mcm9tKGUucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLW9waWRdXCIpID8/IFtdKS5yZWR1Y2UoKGEsIG8pID0+IHtcbiAgY29uc3QgcyA9IG8uZ2V0QXR0cmlidXRlKFwiZGF0YS1vcGlkXCIpO1xuICBpZiAoIXMpIHJldHVybiBhO1xuICBjb25zdCBjID0gby50eXBlID09PSBcImNoZWNrYm94XCIgPyBvLmNoZWNrZWQgOiBvLnZhbHVlO1xuICByZXR1cm4geyAuLi5hLCBbc106IGMgfTtcbn0sIHt9KSwgTXMgPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBOby5wYXJzZShlKTtcbiAgfSBjYXRjaCAodCkge1xuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGV2ZW50IHBheWxvYWQ6XCIsIGUsIHQpLCB0O1xuICB9XG59LCBMcyA9ICgpID0+IHtcbiAgY29uc3QgZSA9IHY0KCkuc3BsaXQoXCItXCIpWzBdO1xuICByZXR1cm4ge1xuICAgIGZpcnN0TmFtZTogYHh4XyR7ZX1gLFxuICAgIGxhc3ROYW1lOiBgeHhfJHtlfWAsXG4gICAgZW1haWw6IGB4eF8ke2V9QGVtYWlsLmNvbWAsXG4gICAgemlwQ29kZTogYHh4XyR7ZX1gLFxuICAgIGNvdW50cnk6IFwiVVNcIlxuICB9O1xufSwgWiA9IChlKSA9PiAoe1xuICBsaW5lMTogZVtwLkxJTkUxXSxcbiAgbGluZTI6IGVbcC5MSU5FMl0sXG4gIGxpbmUzOiBlW3AuTElORTNdLFxuICBjaXR5OiBlW3AuQ0lUWV0sXG4gIHN0YXRlOiBlW3AuU1RBVEVdLFxuICBjb3VudHJ5OiBlW3AuQ09VTlRSWV0sXG4gIHppcF9jb2RlOiBlW3AuWklQX0NPREVdXG59KSwgSyA9IChlLCB0KSA9PiB7XG4gIGlmICh0LnJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzKVxuICAgIHJldHVybiB7XG4gICAgICBsaW5lMTogZVtwLlNISVBQSU5HX0xJTkUxXSxcbiAgICAgIGxpbmUyOiBlW3AuU0hJUFBJTkdfTElORTJdLFxuICAgICAgbGluZTM6IGVbcC5TSElQUElOR19MSU5FM10sXG4gICAgICBjaXR5OiBlW3AuU0hJUFBJTkdfQ0lUWV0sXG4gICAgICBzdGF0ZTogZVtwLlNISVBQSU5HX1NUQVRFXSxcbiAgICAgIGNvdW50cnk6IGVbcC5TSElQUElOR19DT1VOVFJZXSxcbiAgICAgIHppcF9jb2RlOiBlW3AuU0hJUFBJTkdfWklQX0NPREVdXG4gICAgfTtcbn0sIE50ID0gKGUsIHQpID0+IFtlLCB0XS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIiksIERzID0gKHsgd2lkdGg6IGUsIGhlaWdodDogdCB9KSA9PiBgXG5Aa2V5ZnJhbWVzIGZhZGVJbiB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbn1cblxuLm92ZXJsYXkge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgei1pbmRleDogMjE0NzQ4MzY0OCAhaW1wb3J0YW50O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xufVxuLmNvbnRhaW5lciB7XG4gIG1heC13aWR0aDogJHtlID8/IFwiNTAwcHhcIn07XG4gIG1heC1oZWlnaHQ6ICR7dCA/PyBcIjYwMHB4XCJ9O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBhbmltYXRpb246IGZhZGVJbiAwLjNzIGVhc2Utb3V0O1xufVxuLmZyYW1lLCAjYWR5ZW4tY29udGFpbmVyLCAjYWR5ZW4tY29udGFpbmVyID4gKiB7XG4gIG1heC13aWR0aDogJHtlID8/IFwiNTAwcHhcIn07XG4gIG1heC1oZWlnaHQ6ICR7dCA/PyBcIjYwMHB4XCJ9O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBib3JkZXI6IG5vbmU7XG59XG4uY2FuY2VsLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBjb2xvcjogI2ZmZjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0b3A6IC0xLjVyZW07XG4gIHBhZGRpbmc6IDA7XG4gIHJpZ2h0OiAwO1xufVxuYCwgeHMgPSAoeyB3aWR0aDogZSwgaGVpZ2h0OiB0IH0pID0+IGBcbkBrZXlmcmFtZXMgZmFkZUluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOSk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgfVxufVxuXG4ub3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB6LWluZGV4OiAyMTQ3NDgzNjQ4ICFpbXBvcnRhbnQ7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XG59XG4uY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiAke2UgPz8gXCI1MDBweFwifTtcbiAgbWF4LWhlaWdodDogJHt0ID8/IFwiNjAwcHhcIn07XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBhbmltYXRpb246IGZhZGVJbiAwLjNzIGVhc2Utb3V0O1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGJveC1zaGFkb3c6IDAgMTBweCAyNXB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cbi5iYW5rLXNlbGVjdG9yLWNvbnRlbnQge1xuICBwYWRkaW5nOiAyNHB4O1xuICBtYXgtaGVpZ2h0OiBjYWxjKCR7dCA/PyBcIjYwMHB4XCJ9IC0gNDhweCk7XG4gIG92ZXJmbG93LXk6IGF1dG87XG59XG4uYmFuay1zZWxlY3Rvci1oZWFkZXIge1xuICBmb250LXNpemU6IDEuMjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGNvbG9yOiAjMWExYTFhO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4uYmFuay1saXN0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiAxMnB4O1xufVxuLmJhbmstaXRlbSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDE2cHg7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNlNWU1ZTU7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xufVxuLmJhbmstaXRlbTpob3ZlciB7XG4gIGJvcmRlci1jb2xvcjogIzNiODJmNjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZmFmYztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpO1xuICBib3gtc2hhZG93OiAwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cbi5iYW5rLWl0ZW06YWN0aXZlIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xufVxuLmJhbmstbG9nbyB7XG4gIHdpZHRoOiA0MHB4O1xuICBoZWlnaHQ6IDQwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgb2JqZWN0LWZpdDogY29udGFpbjtcbiAgbWFyZ2luLXJpZ2h0OiAxNnB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOWZhO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTllY2VmO1xufVxuLmJhbmstbG9nby1wbGFjZWhvbGRlciB7XG4gIHdpZHRoOiA0MHB4O1xuICBoZWlnaHQ6IDQwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U5ZWNlZjtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG1hcmdpbi1yaWdodDogMTZweDtcbiAgY29sb3I6ICM2Yzc1N2Q7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG4uYmFuay1pbmZvIHtcbiAgZmxleDogMTtcbn1cbi5iYW5rLWRpc3BsYXktbmFtZSB7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6ICMxYTFhMWE7XG4gIG1hcmdpbi1ib3R0b206IDJweDtcbn1cbi5iYW5rLW5hbWUge1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICBjb2xvcjogIzZjNzU3ZDtcbn1cbi5jYW5jZWwtYnV0dG9uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiBub25lO1xuICBmb250LXNpemU6IDFyZW07XG4gIGNvbG9yOiAjZmZmO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRvcDogLTEuNXJlbTtcbiAgcGFkZGluZzogMDtcbiAgcmlnaHQ6IDA7XG59XG5gLCBSbiA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHsgaWQ6IHIsIHRpdGxlOiBuLCB3aWR0aDogYSwgaGVpZ2h0OiBvIH0gPSB0ID8/IHt9LCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICBzLmlubmVySFRNTCA9IGBcbiAgICA8c3R5bGU+XG4gICAgICAke0RzKHsgd2lkdGg6IGEsIGhlaWdodDogbyB9KX1cbiAgICA8L3N0eWxlPlxuICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDxpZnJhbWUgc3JjPVwiJHtlfVwiIGNsYXNzPVwiZnJhbWVcIiBpZD1cIiR7ciA/PyBcInRocmVlLWRzLWlmcmFtZVwifVwiIHRpdGxlPVwiJHtuID8/IFwiM0QgU2VjdXJlIHZlcmlmaWNhdGlvblwifVwiIGFsbG93PVwicGF5bWVudFwiPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG4gIGNvbnN0IGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLCBsID0gYy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgbC5hcHBlbmRDaGlsZChzLmNvbnRlbnQuY2xvbmVOb2RlKCEwKSk7XG4gIGNvbnN0IHUgPSBsLnF1ZXJ5U2VsZWN0b3IoXCIjdGhyZWUtZHMtaWZyYW1lXCIpLCBkID0gbC5xdWVyeVNlbGVjdG9yKFwiLmNhbmNlbC1idXR0b25cIik7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGMpLCB7IGhvc3Q6IGMsIGlmcmFtZTogdSwgY2FuY2VsQnV0dG9uOiBkIH07XG59LCBObiA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHsgd2lkdGg6IHIsIGhlaWdodDogbiwgdGl0bGU6IGEgfSA9IHQgPz8ge307XG4gIHJldHVybiBuZXcgUHJvbWlzZSgobywgcykgPT4ge1xuICAgIGNvbnN0IGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIiksIGwgPSBlLm1hcCgoeSwgaCkgPT4ge1xuICAgICAgY29uc3QgYiA9IHkucmVzb3VyY2VzLmxvZ29fdXJsID8gYDxpbWcgc3JjPVwiJHt5LnJlc291cmNlcy5sb2dvX3VybH1cIiBhbHQ9XCIke3kuZGlzcGxheV9uYW1lfVwiIGNsYXNzPVwiYmFuay1sb2dvXCIgLz5gIDogYDxkaXYgY2xhc3M9XCJiYW5rLWxvZ28tcGxhY2Vob2xkZXJcIj4ke3kuZGlzcGxheV9uYW1lLnN1YnN0cmluZygwLCAyKS50b1VwcGVyQ2FzZSgpfTwvZGl2PmA7XG4gICAgICByZXR1cm4gYFxuICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1pdGVtXCIgZGF0YS1iYW5rLWluZGV4PVwiJHtofVwiPlxuICAgICAgICAgICR7Yn1cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1pbmZvXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1kaXNwbGF5LW5hbWVcIj4ke3kuZGlzcGxheV9uYW1lfTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstbmFtZVwiPiR7eS5iYW5rX25hbWV9PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgYDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICAgIGMuaW5uZXJIVE1MID0gYFxuICAgICAgPHN0eWxlPlxuICAgICAgICAke3hzKHsgd2lkdGg6IHIsIGhlaWdodDogbiB9KX1cbiAgICAgIDwvc3R5bGU+XG4gICAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1zZWxlY3Rvci1jb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1zZWxlY3Rvci1oZWFkZXJcIj4ke2EgPz8gXCJTZWxlY3QgeW91ciBiYW5rXCJ9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1saXN0XCI+XG4gICAgICAgICAgICAgICR7bH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gICAgY29uc3QgdSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIGQgPSB1LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICAgIGQuYXBwZW5kQ2hpbGQoYy5jb250ZW50LmNsb25lTm9kZSghMCkpO1xuICAgIGNvbnN0IGYgPSBkLnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKSwgXyA9IGQucXVlcnlTZWxlY3RvckFsbChcIi5iYW5rLWl0ZW1cIiksIG0gPSAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHUpO1xuICAgIH07XG4gICAgZi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgbSgpLCBzKG5ldyBFcnJvcihcIkJhbmsgc2VsZWN0aW9uIGNhbmNlbGxlZFwiKSk7XG4gICAgfSksIF8uZm9yRWFjaCgoeSwgaCkgPT4ge1xuICAgICAgeS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICBtKCksIG8oZVtoXSk7XG4gICAgICB9KTtcbiAgICB9KSwgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh1KTtcbiAgfSk7XG59O1xuZnVuY3Rpb24gT3MoZSwgdCwgciwgbiwgYSkge1xuICBjb25zdCBvID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjID0gYXdhaXQgd3MoZSwgciwgbiwgYSk7XG4gICAgICBjICYmIChjbGVhckludGVydmFsKHMpLCB0KGMpKTtcbiAgICB9IGNhdGNoIHtcbiAgICB9XG4gIH07XG4gIG8oKTtcbiAgY29uc3QgcyA9IHNldEludGVydmFsKG8sIFBuKTtcbiAgcmV0dXJuIHM7XG59XG5mdW5jdGlvbiBVcyh7XG4gIGVsZW1lbnRzOiBlLFxuICBwb2xsaW5nSW50ZXJ2YWw6IHQsXG4gIHJlc29sdmU6IHJcbn0pIHtcbiAgY29uc3QgbiA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHQpLCBlLmhvc3QucmVtb3ZlKCksIHIoeyBzdGF0dXM6IEYuQ0FOQ0VMTEVEIH0pO1xuICB9O1xuICByZXR1cm4gZS5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pLCAoKSA9PiB7XG4gICAgZS5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pO1xuICB9O1xufVxuYXN5bmMgZnVuY3Rpb24gYmUoZSkge1xuICBjb25zdCB7IHVybDogdCwgYmFzZVVybDogciwgZnJhbWVXaWR0aDogbiwgZnJhbWVIZWlnaHQ6IGEsIGZyYW1lVGl0bGU6IG8gfSA9IGUsIHMgPSBSbih0LCB7IHdpZHRoOiBuLCBoZWlnaHQ6IGEsIHRpdGxlOiBvIH0pO1xuICByZXR1cm4gbmV3IFByb21pc2UoKGMpID0+IHtcbiAgICBjb25zdCBsID0gKGYpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzLmhvc3QucmVtb3ZlKCk7XG4gICAgICB9LCAxZTMpLCBjKGYpLCBkID09IG51bGwgfHwgZCgpO1xuICAgIH0sIHUgPSBPcyhcbiAgICAgIHMuaWZyYW1lLFxuICAgICAgbCxcbiAgICAgIG5ldyBVUkwocikub3JpZ2luLFxuICAgICAgXCJwaW5nLTNkcy1zdGF0dXNcIixcbiAgICAgIERvXG4gICAgKSwgZCA9IFVzKHtcbiAgICAgIGVsZW1lbnRzOiBzLFxuICAgICAgcG9sbGluZ0ludGVydmFsOiB1LFxuICAgICAgcmVzb2x2ZTogY1xuICAgIH0pO1xuICB9KTtcbn1cbmNvbnN0IEZuID0gYXN5bmMgKGUpID0+IHtcbiAgY29uc3QgdCA9IGF3YWl0IGJlKGUpO1xuICBpZiAodC5zdGF0dXMgPT09IEYuQ0FOQ0VMTEVEKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAodC5zdGF0dXMgPT09IEYuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgcmV0dXJuIHQuc3RhdHVzICE9PSBGLlNVQ0NFU1MgJiYga3QodC5zdGF0dXMpLCB7XG4gICAgaHJlZjogdC5ocmVmXG4gIH07XG59LCBqcyA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSB3aW5kb3cub3Blbih0LCBcIl9ibGFua1wiKTtcbiAgaWYgKCFyKVxuICAgIHRocm93IG5ldyBFcnJvcihgJHtlfSBwb3B1cCB3aW5kb3cgYmxvY2tlZC4gUGxlYXNlIGFsbG93IHBvcHVwcyBmb3IgdGhpcyBzaXRlLmApO1xuICByZXR1cm4gcjtcbn0sIE1uID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHtcbiAgY29uc3QgeyBlcnJfXzogYSB9ID0gSShcInBvcHVwLXZlcmlmeVwiKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChvLCBzKSA9PiB7XG4gICAgY29uc3QgYyA9IGpzKGUsIG4pLCBsID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdSA9IGF3YWl0IHlzKHQsIHIpO1xuICAgICAgICBpZiAodS5wcmVzZW50KVxuICAgICAgICAgIGNsZWFySW50ZXJ2YWwobCksIGMuY2xvc2UoKSwgbyh7IGhyZWY6IHUuaHJlZiB9KTtcbiAgICAgICAgZWxzZSBpZiAoYy5jbG9zZWQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2V9IHBheW1lbnQgY2FuY2VsbGVkYCk7XG4gICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgIGEoZWUodSkpLCBjbGVhckludGVydmFsKGwpLCBzKGVlKHUpKTtcbiAgICAgIH1cbiAgICB9LCAxZTMpO1xuICB9KTtcbn0sIGNlID0gKCkgPT4ge1xuICBjb25zdCBlID0gbmF2aWdhdG9yLmxhbmd1YWdlcyAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzLmxlbmd0aCA/IG5hdmlnYXRvci5sYW5ndWFnZXMgOiBbbmF2aWdhdG9yLmxhbmd1YWdlXTtcbiAgbGV0IHQgPSBlID09IG51bGwgPyB2b2lkIDAgOiBlWzBdO1xuICByZXR1cm4gdCAmJiAodCA9IHQuc3BsaXQoXCItXCIpWzBdKSwgdDtcbn0sIHsgbG9nX186ICRzLCBlcnJfXzogR3MgfSA9IEkoXCJjb21tb24tY2NcIiksIFZzID0gKHtcbiAgcmVxdWlyZV96aXBfY29kZTogZSxcbiAgcmVxdWlyZV9mdWxsX2JpbGxpbmdfYWRkcmVzczogdCxcbiAgcmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3M6IHIsXG4gIHBheW1lbnRfbWV0aG9kOiBuXG59KSA9PiB7XG4gIGNvbnN0IGEgPSB7fTtcbiAgcmV0dXJuIG4gPT09IFwiYWNoXCIgJiYgKGFbcC5GSVJTVF9OQU1FXSA9IHokMS5zdHJpbmcoKS5taW4oMiwgeyBtZXNzYWdlOiBcIk1pbmltdW0gbGVuZ3RoIGlzIDJcIiB9KSwgYVtwLkxBU1RfTkFNRV0gPSB6JDEuc3RyaW5nKCkubWluKDIsIHsgbWVzc2FnZTogXCJNaW5pbXVtIGxlbmd0aCBpcyAyXCIgfSkpLCBlICYmIChhW3AuWklQX0NPREVdID0gayksIHQgJiYgKGFbcC5MSU5FMV0gPSBrLCBhW3AuQ0lUWV0gPSBrLCBhW3AuU1RBVEVdID0gaywgYVtwLkNPVU5UUlldID0gaywgYVtwLlpJUF9DT0RFXSA9IGspLCByICYmIChhW3AuU0hJUFBJTkdfTElORTFdID0gaywgYVtwLlNISVBQSU5HX0NJVFldID0gaywgYVtwLlNISVBQSU5HX1NUQVRFXSA9IGssIGFbcC5TSElQUElOR19DT1VOVFJZXSA9IGssIGFbcC5TSElQUElOR19aSVBfQ09ERV0gPSBrKSwgT2JqZWN0LmtleXMoYSkubGVuZ3RoID09PSAwID8gT2UgOiBPZS5leHRlbmQoYSk7XG59LCBxcyA9IChlLCB0LCByID0ge30pID0+IHtcbiAgaWYgKHIpIHtcbiAgICAkcyhgUmVjZWl2ZWQgZGVmYXVsdCBmaWVsZCB2YWx1ZXM6ICR7SlNPTi5zdHJpbmdpZnkocil9YCk7XG4gICAgY29uc3QgbyA9IE9iamVjdC5rZXlzKHIpO1xuICAgIGZvciAobGV0IHMgPSAwOyBzIDwgby5sZW5ndGg7IHMrKykge1xuICAgICAgY29uc3QgYyA9IG9bc10sIGwgPSByW2NdO1xuICAgICAgZVtjXSB8fCAoZVtjXSA9IGwpO1xuICAgIH1cbiAgfVxuICBlW3AuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSA9ICEhZVtwLklTX1NISVBQSU5HX1NBTUVfQVNfQklMTElOR10sIGVbcC5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddICYmIChlW3AuU0hJUFBJTkdfTElORTFdID0gZVtwLkxJTkUxXSwgZVtwLlNISVBQSU5HX0xJTkUyXSA9IGVbcC5MSU5FMl0sIGVbcC5TSElQUElOR19MSU5FM10gPSBlW3AuTElORTNdLCBlW3AuU0hJUFBJTkdfQ0lUWV0gPSBlW3AuQ0lUWV0sIGVbcC5TSElQUElOR19TVEFURV0gPSBlW3AuU1RBVEVdLCBlW3AuU0hJUFBJTkdfQ09VTlRSWV0gPSBlW3AuQ09VTlRSWV0sIGVbcC5TSElQUElOR19aSVBfQ09ERV0gPSBlW3AuWklQX0NPREVdKTtcbiAgY29uc3QgYSA9IFZzKHIpLnNhZmVQYXJzZShlKTtcbiAgaWYgKCFhLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBvID0gYS5lcnJvci5mb3JtYXQoKSwgcyA9IEZzKG8pLCBjID0gT2JqZWN0LmtleXMocyk7XG4gICAgZm9yIChsZXQgbCA9IDA7IGwgPCBjLmxlbmd0aDsgbCsrKSB7XG4gICAgICBjb25zdCB1ID0gY1tsXSwgZCA9IHNbdV07XG4gICAgICB0KHUsIGQsIHUpO1xuICAgIH1cbiAgICB0aHJvdyBHcyhcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIHMpLCBuZXcgRXJyb3IoXCJBbG1vc3QgdGhlcmUhIEp1c3QgYSBmZXcgdGhpbmdzIGhpZ2hsaWdodGVkIGFib3ZlIHRvIGZpeCBiZWZvcmUgeW91IGNhbiBzdWJtaXQuXCIpO1xuICB9XG4gIHJldHVybiBhLmRhdGE7XG59LCB7IGxvZ19fOiB6cywgZXJyX186IEhzIH0gPSBJKFwiY29tbW9uLWNjXCIpLCBxID0gcXMsIExuID0gKGUsIHQpID0+IHtcbiAgZm9yIChjb25zdCByIG9mIGUpXG4gICAgaWYgKHIuc3VjY2VzcyA9PT0gITEpXG4gICAgICB0aHJvdyByLmVycm9ycy5mb3JFYWNoKChuKSA9PiB7XG4gICAgICAgIGNvbnN0IGEgPSBCci5zYWZlUGFyc2Uobi5lbGVtZW50VHlwZSk7XG4gICAgICAgIGlmICghYS5zdWNjZXNzKVxuICAgICAgICAgIEhzKGBVbmtub3duIGZpZWxkIG5hbWUgaW4gb25WYWxpZGF0aW9uRXJyb3I6ICR7bi5lbGVtZW50VHlwZX0uIEVycm9yIG9iamVjdDpgLCBuKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29uc3QgbyA9IGEuZGF0YTtcbiAgICAgICAgICB0KG8sIG4uZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgfSksIHpzKGBFcnJvciB0b2tlbml6aW5nIGNhcmQ6IGdvdCB2YWxpZGF0aW9uIGVycm9yczogJHtKU09OLnN0cmluZ2lmeShyLmVycm9ycyl9YCksIG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyB3aGlsZSB0b2tlbml6aW5nIGNhcmRcIik7XG59LCB7IGxvZ19fOiBWbCwgZXJyX186IERuIH0gPSBJKFwiY29tbW9uXCIpLCB1dCA9IChlKSA9PiB7XG4gIGlmIChlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBwYXltZW50IG1ldGhvZCwgZ290ICR7ZS5wYXltZW50X21ldGhvZHMubGVuZ3RofWApO1xuICByZXR1cm4geyBwYXltZW50X21ldGhvZF9pZDogZS5wYXltZW50X21ldGhvZHNbMF0uaWQgfTtcbn0sIHogPSAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gZS5maW5kKChuKSA9PiB0LnNhZmVQYXJzZShuKS5zdWNjZXNzKTtcbiAgaWYgKCFyKVxuICAgIHRocm93IERuKFwiTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWwuIEFsbCBtb2RlbHM6XCIsIGUpLCBuZXcgRXJyb3IoXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbFwiKTtcbiAgcmV0dXJuIHQucGFyc2Uocik7XG59LCBuciA9IChlLCB0KSA9PiAoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IGUuZW1haWwsXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGUubGFzdE5hbWUsXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBlLmZpcnN0TmFtZSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IFooZSksXG4gIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBLKGUsIHQpXG59KSwgbGUgPSBhc3luYyAoZSkgPT4ge1xuICBjb25zdCB7IGxvZ19fOiB0IH0gPSBJKGUubG9nUHJlZml4KSwgciA9IGF3YWl0IE0oZS5hbnlDZGVDb25uZWN0aW9uKSwgbiA9IHV0KGUuY29uZmlybVJlc3VsdCk7XG4gIGlmIChyLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICByZXR1cm4gdChcIlNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QuLi5cIiksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGF3YWl0IGZzKGUuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiByLnRva2VuLFxuICAgICAgcG1faWQ6IG4ucGF5bWVudF9tZXRob2RfaWRcbiAgICB9KSB9O1xuICB7XG4gICAgaWYgKGUudXNlUGF5Rmlyc3RGbG93KSB7XG4gICAgICBpZiAodChcIlVzaW5nIHBheS1maXJzdCBmbG93Li4uXCIpLCAhZS5jb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgICB0aHJvdyBEbihcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIGUuY29uZmlybVJlc3VsdCksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IGUuY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgYSA9IHtcbiAgICAgIHNlY3VyZV90b2tlbjogci50b2tlbixcbiAgICAgIHBheW1lbnRfaW5wdXQ6IHsgcHJvdmlkZXJfdHlwZTogZS5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIgfSxcbiAgICAgIGN1c3RvbWVyX2VtYWlsOiBlLnJlcXVpcmVkRm9ybUZpZWxkc1twLkVNQUlMXSxcbiAgICAgIGN1c3RvbWVyX2FkZHJlc3M6IFooZS5yZXF1aXJlZEZvcm1GaWVsZHMpLFxuICAgICAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogSyhlLnJlcXVpcmVkRm9ybUZpZWxkcywgci5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBwcm9tb3Rpb25fY29kZTogZS5yZXF1aXJlZEZvcm1GaWVsZHNbcC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICBsaW5lX2l0ZW1zOiByLmxpbmVfaXRlbXMsXG4gICAgICB0b3RhbF9hbW91bnRfYXRvbTogci5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbi5wYXltZW50X21ldGhvZF9pZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgIH07XG4gICAgcmV0dXJuIHQoXCJEb2luZyBjaGVja291dC4uLlwiLCBhKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgcnIoZS5hbnlDZGVDb25uZWN0aW9uLCBhKSB9O1xuICB9XG59LCBVID0geiQxLmVudW0oW1wic3RyaXBlXCIsIFwiYWlyd2FsbGV4XCIsIFwiYXV0aG9yaXplX25ldFwiLCBcImFkeWVuXCIsIFwicGF5cGFsXCIsIFwicG9ja3l0XCIsIFwibG9vcFwiXSk7XG5VLkVudW0uc3RyaXBlO1xuY29uc3QgeG4gPSAoe1xuICBzY3JpcHRJZDogZSxcbiAgc3JjOiB0LFxuICBjaGVja0xvYWRlZEZuOiByXG59KSA9PiB7XG4gIGNvbnN0IG4gPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgoYSwgbykgPT4ge1xuICAgIGxldCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICBzLnNyYyA9IHQsIHMuaWQgPSBlLCBzLmFzeW5jID0gITA7XG4gICAgY29uc3QgYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO1xuICAgIHIoKSA/IGEoKSA6IGMgPyBzID0gYyA6IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocyksIHMuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIFwibG9hZFwiLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBuLmFib3J0KCksIGEoKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogbi5zaWduYWwgfVxuICAgICksIHMuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIFwiZXJyb3JcIixcbiAgICAgICgpID0+IHtcbiAgICAgICAgbi5hYm9ydCgpLCBvKFwiRmFpbGVkIHRvIGxvYWQgdGhlIHNjcmlwdFwiKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogbi5zaWduYWwgfVxuICAgICk7XG4gIH0pO1xufSwgcWUgPSAoe1xuICBnYXRld2F5OiBlLFxuICBnYXRld2F5TWVyY2hhbnRJZDogdCxcbiAgbWVyY2hhbnROYW1lOiByLFxuICBtZXJjaGFudElkOiBuLFxuICBpbml0aWFsUHJldmlldzogYSxcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogbyxcbiAgcHJlZmlsbDogc1xufSkgPT4ge1xuICB2YXIgZiwgXztcbiAgY29uc3QgYyA9ICgoZiA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogZi5hbW91bnRBdG9tKSA/PyAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5hbW91bnRBdG9tKSA/PyAwLCBsID0gTWF0aC5tYXgoYyAvIDEwMCwgMCksIHUgPSAoKChfID0gbyA9PSBudWxsID8gdm9pZCAwIDogby5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBfLmN1cnJlbmN5KSA/PyAocyA9PSBudWxsID8gdm9pZCAwIDogcy5jdXJyZW5jeSkgPz8gYS5jdXJyZW5jeSkudG9VcHBlckNhc2UoKSwgZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAyLFxuICAgIGFwaVZlcnNpb25NaW5vcjogMCxcbiAgICBhbGxvd2VkUGF5bWVudE1ldGhvZHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJDQVJEXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBhbGxvd2VkQXV0aE1ldGhvZHM6IFtcIlBBTl9PTkxZXCIsIFwiQ1JZUFRPR1JBTV8zRFNcIl0sXG4gICAgICAgICAgYWxsb3dlZENhcmROZXR3b3JrczogW1wiQU1FWFwiLCBcIkRJU0NPVkVSXCIsIFwiSU5URVJBQ1wiLCBcIkpDQlwiLCBcIk1BU1RFUkNBUkRcIiwgXCJWSVNBXCJdLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUmVxdWlyZWQ6ICEwLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZm9ybWF0OiBcIkZVTExcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsb3dDcmVkaXRDYXJkczogITAsXG4gICAgICAgICAgYWxsb3dQcmVwYWlkQ2FyZHM6ICEwXG4gICAgICAgIH0sXG4gICAgICAgIHRva2VuaXphdGlvblNwZWNpZmljYXRpb246IHtcbiAgICAgICAgICB0eXBlOiBcIlBBWU1FTlRfR0FURVdBWVwiLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGdhdGV3YXk6IGUsXG4gICAgICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogdFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0sXG4gICAgZW1haWxSZXF1aXJlZDogITAsXG4gICAgc2hpcHBpbmdBZGRyZXNzUmVxdWlyZWQ6IHMuY2hlY2tvdXRfc2V0dGluZ3MucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MsXG4gICAgbWVyY2hhbnRJbmZvOiB7XG4gICAgICAvLyBQUk9EIGVudiB3aWxsIG5lZWQgdGhpc1xuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcGF5L2FwaS93ZWIvcmVmZXJlbmNlL3JlcXVlc3Qtb2JqZWN0cyNNZXJjaGFudEluZm9cbiAgICAgIG1lcmNoYW50SWQ6IG4gPz8gXCJcIixcbiAgICAgIG1lcmNoYW50TmFtZTogclxuICAgIH0sXG4gICAgdHJhbnNhY3Rpb25JbmZvOiB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlOiB1LFxuICAgICAgdG90YWxQcmljZVN0YXR1czogbyAhPSBudWxsICYmIG8ucGVuZGluZyA/IFwiRVNUSU1BVEVEXCIgOiBcIkZJTkFMXCIsXG4gICAgICB0b3RhbFByaWNlOiBsLnRvRml4ZWQoMilcbiAgICB9XG4gIH07XG4gIHJldHVybiBvICE9IG51bGwgJiYgby5nb29nbGVQYXlQYXltZW50UmVxdWVzdCA/IHR5cGVvZiBvLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0ID09IFwiZnVuY3Rpb25cIiA/IHsgLi4uZCwgLi4uby5nb29nbGVQYXlQYXltZW50UmVxdWVzdChkKSB9IDogeyAuLi5kLCAuLi5vLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0IH0gOiBkO1xufSwgb3IgPSAoKSA9PiB4bih7XG4gIHNjcmlwdElkOiBcIl9fb3BfaW50ZXJuYWxfZ29vZ2xlX3BheV9zZGtcIixcbiAgc3JjOiBcImh0dHBzOi8vcGF5Lmdvb2dsZS5jb20vZ3AvcC9qcy9wYXkuanNcIixcbiAgY2hlY2tMb2FkZWRGbjogKCkgPT4ge1xuICAgIHZhciBlLCB0O1xuICAgIHJldHVybiAhISgodCA9IChlID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGUucGF5bWVudHMpICE9IG51bGwgJiYgdC5hcGkpO1xuICB9XG59KTtcbmxldCBVdCA9IG51bGw7XG5jb25zdCBhciA9IGFzeW5jIChlKSA9PiBhd2FpdCBwbihlKSA9PT0gXCJwcm9kXCIgPyBcIlBST0RVQ1RJT05cIiA6IFwiVEVTVFwiLCB6ZSA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBhd2FpdCBhcihlKTtcbiAgcmV0dXJuIFV0ID09PSBudWxsICYmIChVdCA9IG5ldyB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzLmFwaS5QYXltZW50c0NsaWVudCh7XG4gICAgZW52aXJvbm1lbnQ6IHIsXG4gICAgbWVyY2hhbnRJbmZvOiB0Lm1lcmNoYW50SW5mb1xuICB9KSksIFV0O1xufSwgSGUgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgocikgPT4gci50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIHJldHVybiB0ID8gWXIucGFyc2UodCkgOiBudWxsO1xufSwgaXIgPSAoZSwgdCkgPT4ge1xuICB2YXIgbywgcywgYywgbDtcbiAgY29uc3QgciA9IHsgLi4uZSB9LCBuID0gKHMgPSAobyA9IHQucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBvLmluZm8pID09IG51bGwgPyB2b2lkIDAgOiBzLmJpbGxpbmdBZGRyZXNzLCBhID0gdC5zaGlwcGluZ0FkZHJlc3M7XG4gIGlmIChuKSB7XG4gICAgY29uc3QgW3UsIC4uLmRdID0gKChsID0gKGMgPSBuLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBjLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGwuc3BsaXQoL1xccysvKSkgPz8gW10sIGYgPSBkLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgICByW3AuRU1BSUxdID0gcltwLkVNQUlMXSB8fCB0LmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgcltwLkxJTkUxXSA9IHJbcC5MSU5FMV0gfHwgbi5hZGRyZXNzMSB8fCBcIlwiLCByW3AuTElORTJdID0gcltwLkxJTkUyXSB8fCBuLmFkZHJlc3MyIHx8IFwiXCIsIHJbcC5MSU5FM10gPSByW3AuTElORTNdIHx8IG4uYWRkcmVzczMgfHwgXCJcIiwgcltwLkNJVFldID0gcltwLkNJVFldIHx8IG4ubG9jYWxpdHkgfHwgXCJcIiwgcltwLlNUQVRFXSA9IHJbcC5TVEFURV0gfHwgbi5hZG1pbmlzdHJhdGl2ZUFyZWEgfHwgXCJcIiwgcltwLkNPVU5UUlldID0gcltwLkNPVU5UUlldIHx8IG4uY291bnRyeUNvZGUgfHwgXCJVU1wiLCByW3AuWklQX0NPREVdID0gcltwLlpJUF9DT0RFXSB8fCBuLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICAgIGNvbnN0IF8gPSByW3AuRklSU1RfTkFNRV0gfHwgdSB8fCBcIlwiLCBtID0gcltwLkxBU1RfTkFNRV0gfHwgZiB8fCBcIlwiO1xuICAgIF8gfHwgbSA/IChyW3AuRklSU1RfTkFNRV0gPSBfLCByW3AuTEFTVF9OQU1FXSA9IG0pIDogKHJbcC5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIiwgcltwLkxBU1RfTkFNRV0gPSBcIlwiKTtcbiAgfVxuICByZXR1cm4gYSAmJiAocltwLlNISVBQSU5HX0xJTkUxXSA9IHJbcC5TSElQUElOR19MSU5FMV0gfHwgYS5hZGRyZXNzMSB8fCBcIlwiLCByW3AuU0hJUFBJTkdfTElORTJdID0gcltwLlNISVBQSU5HX0xJTkUyXSB8fCBhLmFkZHJlc3MyIHx8IFwiXCIsIHJbcC5TSElQUElOR19MSU5FM10gPSByW3AuU0hJUFBJTkdfTElORTNdIHx8IGEuYWRkcmVzczMgfHwgXCJcIiwgcltwLlNISVBQSU5HX0NJVFldID0gcltwLlNISVBQSU5HX0NJVFldIHx8IGEubG9jYWxpdHkgfHwgXCJcIiwgcltwLlNISVBQSU5HX1pJUF9DT0RFXSA9IHJbcC5TSElQUElOR19aSVBfQ09ERV0gfHwgYS5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIiwgcltwLlNISVBQSU5HX1NUQVRFXSA9IHJbcC5TSElQUElOR19TVEFURV0gfHwgYS5hZG1pbmlzdHJhdGl2ZUFyZWEgfHwgXCJcIiwgcltwLlNISVBQSU5HX0NPVU5UUlldID0gcltwLlNISVBQSU5HX0NPVU5UUlldIHx8IGEuY291bnRyeUNvZGUgfHwgXCJVU1wiKSwgcjtcbn0sIHsgbG9nX186IEplLCBlcnJfXzogQnMgfSA9IEkoXCJhd3gtYmFjc1wiKSwgWXMgPSBIKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIHZhciB3LCBFO1xuICAgIGNvbnN0IG8gPSBxKHIsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE0ocyksIGwgPSBhLnZlcmlmaWNhdGlvbk1ldGhvZCA/PyBcInRydWVsYXllclwiLCB1ID0gYXdhaXQgbmUocywge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBvW3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG9bcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IG9bcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IFoobyksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogSyhvLCBjLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBjZSgpXG4gICAgfSksIGQgPSBIZSh1KSwgZiA9IGQgPT0gbnVsbCA/IHZvaWQgMCA6IGQuY29uc2VudF9pZCwgXyA9IGQgPT0gbnVsbCA/IHZvaWQgMCA6IGQuYXZhaWxhYmxlX2JhbmtzO1xuICAgIGxldCBtO1xuICAgIGlmIChfICYmIF8ubGVuZ3RoID49IDEpIHtcbiAgICAgIEplKFwiTXVsdGlwbGUgYmFua3MgYXZhaWxhYmxlLCBzaG93aW5nIGJhbmsgc2VsZWN0b3IuLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBtID0gYXdhaXQgTm4oXywge1xuICAgICAgICAgIHdpZHRoOiBcIjQ1MHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjUwMHB4XCIsXG4gICAgICAgICAgdGl0bGU6IFwiU2VsZWN0IGJhbmtcIlxuICAgICAgICB9KSwgSmUoYEJhbmsgc2VsZWN0ZWQ6ICR7bS5kaXNwbGF5X25hbWV9YCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgSmUoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIiksIG5ldyBFcnJvcihcIkJhbmsgc2VsZWN0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgeSA9IHtcbiAgICAgIHR5cGU6IFwiYmFjc19kaXJlY3RfZGViaXRcIixcbiAgICAgIGJhY3NfZGlyZWN0X2RlYml0OiB7XG4gICAgICAgIC8vIFRydWVMYXllclxuICAgICAgICBiYW5rX25hbWU6IG0gPT0gbnVsbCA/IHZvaWQgMCA6IG0uYmFua19uYW1lLFxuICAgICAgICAvLyBNaWNyb2RlcG9zaXRcbiAgICAgICAgb3duZXJfbmFtZTogTnQob1twLkZJUlNUX05BTUVdLCBvW3AuTEFTVF9OQU1FXSksXG4gICAgICAgIG93bmVyX2VtYWlsOiBvW3AuRU1BSUxdLFxuICAgICAgICBjb3VudHJ5X2NvZGU6IG9bcC5DT1VOVFJZXVxuICAgICAgICAvLyBhY2NvdW50X251bWJlcjogY3VzdG9tUGFyYW1zLmFjY291bnROdW1iZXIsXG4gICAgICAgIC8vIHNvcnRfY29kZTogY3VzdG9tUGFyYW1zLnNvcnRDb2RlLFxuICAgICAgICAvLyBhZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgIH1cbiAgICB9LCBiID0gKEUgPSAodyA9IChhd2FpdCBMKHMsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogYy50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogZixcbiAgICAgICAgdmVyaWZpY2F0aW9uX21ldGhvZDogbCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IHlcbiAgICAgIH1cbiAgICB9KSkucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogdy5maW5kKFxuICAgICAgKEMpID0+IEMudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApKSA9PSBudWxsID8gdm9pZCAwIDogRS5yZWRpcmVjdF91cmw7XG4gICAgaWYgKGIpIHtcbiAgICAgIEplKFwiQkFDUyB2ZXJpZmljYXRpb24gcmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiKTtcbiAgICAgIGNvbnN0IHsgc3RhdHVzOiBDIH0gPSBhd2FpdCBiZSh7XG4gICAgICAgIHVybDogYixcbiAgICAgICAgYmFzZVVybDogZS5iYXNlVXJsLFxuICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgIGZyYW1lVGl0bGU6IFwiQkFDUyB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBpZiAoSmUoYOKVsCBCQUNTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtDfV1gKSwgQyA9PT0gRi5DQU5DRUxMRUQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJBQ1MgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIGlmIChDID09PSBGLkZBSUxVUkUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJBQ1MgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICB9XG4gICAgY29uc3QgdiA9IGF3YWl0IEwocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBmXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBsZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYmFjc1wiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiBzLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogdixcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoQykge1xuICAgICAgdGhyb3cgQnMoXCJCQUNTIHBheW1lbnQgZXJyb3JcIiwgQyksIGcoXCJjaGVja291dF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBDXG4gICAgICB9KSwgbmV3IEVycm9yKChDID09IG51bGwgPyB2b2lkIDAgOiBDLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IGtyLCBlcnJfXzogSnMgfSA9IEkoXCJhd3gtZWZ0XCIpLCBXcyA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIGIsIHY7XG4gICAgY29uc3QgbyA9IHEociwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgTShzKSwgbCA9IGEudmVyaWZpY2F0aW9uTWV0aG9kID8/IFwicGxhaWRcIiwgdSA9IGF3YWl0IG5lKHMsIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogb1twLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBvW3AuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBvW3AuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBaKG8pLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IEsobywgYy5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogY2UoKVxuICAgIH0pLCBkID0gSGUodSksIGYgPSBkID09IG51bGwgPyB2b2lkIDAgOiBkLmNvbnNlbnRfaWQsIF8gPSB7XG4gICAgICB0eXBlOiBcImVmdF9kaXJlY3RfZGViaXRcIixcbiAgICAgIGVmdF9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgLy8gUGxhaWRcbiAgICAgICAgYnVzaW5lc3NfYWNjb3VudDogYS5pc0J1c2luZXNzQWNjb3VudCA/PyAhMSxcbiAgICAgICAgb3duZXJfbmFtZTogTnQob1twLkZJUlNUX05BTUVdLCBvW3AuTEFTVF9OQU1FXSksXG4gICAgICAgIG93bmVyX2VtYWlsOiBvW3AuRU1BSUxdXG4gICAgICAgIC8vIE1pY3JvZGVwb3NpdFxuICAgICAgICAvLyBpbnN0aXR1dGlvbl9udW1iZXI6IHVuZGVmaW5lZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgICAgIC8vIHRyYW5zaXRfbnVtYmVyOiB1bmRlZmluZWQgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgICAvLyBhY2NvdW50X251bWJlcjogdW5kZWZpbmVkIGFzIHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgICAgLy8gbWFuZGF0ZV92ZXJzaW9uOiB1bmRlZmluZWQgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgfVxuICAgIH0sIHkgPSAodiA9IChiID0gKGF3YWl0IEwocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBmLFxuICAgICAgICB2ZXJpZmljYXRpb25fbWV0aG9kOiBsLFxuICAgICAgICBkaXJlY3RfZGViaXRfZGF0YTogX1xuICAgICAgfVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBiLmZpbmQoXG4gICAgICAodykgPT4gdy50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICkpID09IG51bGwgPyB2b2lkIDAgOiB2LnJlZGlyZWN0X3VybDtcbiAgICBpZiAoeSkge1xuICAgICAga3IoXCJFRlQgdmVyaWZpY2F0aW9uIHJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1czogdyB9ID0gYXdhaXQgYmUoe1xuICAgICAgICB1cmw6IHksXG4gICAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIkVGVCB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBpZiAoa3IoYOKVsCBFRlQgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3d9XWApLCB3ID09PSBGLkNBTkNFTExFRClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRUZUIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICBpZiAodyA9PT0gRi5GQUlMVVJFKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFRlQgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICB9XG4gICAgY29uc3QgaCA9IGF3YWl0IEwocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBmXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBsZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtZWZ0XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHMsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBvLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBoLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoICh3KSB7XG4gICAgICB0aHJvdyBKcyhcIkVGVCBwYXltZW50IGVycm9yXCIsIHcpLCBnKFwiY2hlY2tvdXRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogd1xuICAgICAgfSksIG5ldyBFcnJvcigodyA9PSBudWxsID8gdm9pZCAwIDogdy5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBXZSwgZXJyX186IFpzIH0gPSBJKFwiYXd4LXNlcGFcIiksIEtzID0gSChcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBhXG4gIH0pID0+IHtcbiAgICB2YXIgdiwgdztcbiAgICBjb25zdCBvID0gcShyLCBuLmdldC5vblZhbGlkYXRpb25FcnJvciksIHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBNKHMpLCBsID0gYS52ZXJpZmljYXRpb25NZXRob2QgPz8gXCJ0cnVlbGF5ZXJcIiwgdSA9IGF3YWl0IG5lKHMsIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogb1twLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBvW3AuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBvW3AuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBaKG8pLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IEsobywgYy5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogY2UoKVxuICAgIH0pLCBkID0gSGUodSksIGYgPSBkID09IG51bGwgPyB2b2lkIDAgOiBkLmNvbnNlbnRfaWQsIF8gPSBkID09IG51bGwgPyB2b2lkIDAgOiBkLmF2YWlsYWJsZV9iYW5rcztcbiAgICBsZXQgbTtcbiAgICBpZiAoXyAmJiBfLmxlbmd0aCA+PSAxKSB7XG4gICAgICBXZShcIk11bHRpcGxlIGJhbmtzIGF2YWlsYWJsZSwgc2hvd2luZyBiYW5rIHNlbGVjdG9yLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbSA9IGF3YWl0IE5uKF8sIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCI1MDBweFwiLFxuICAgICAgICAgIHRpdGxlOiBcIlNlbGVjdCBiYW5rXCJcbiAgICAgICAgfSksIFdlKGBCYW5rIHNlbGVjdGVkOiAke20uZGlzcGxheV9uYW1lfWApO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IFdlKFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpLCBuZXcgRXJyb3IoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGggPSAodyA9ICh2ID0gKGF3YWl0IEwocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBmLFxuICAgICAgICB2ZXJpZmljYXRpb25fbWV0aG9kOiBsLFxuICAgICAgICBkaXJlY3RfZGViaXRfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwic2VwYV9kaXJlY3RfZGViaXRcIixcbiAgICAgICAgICBzZXBhX2RpcmVjdF9kZWJpdDoge1xuICAgICAgICAgICAgLy8gdHJ1ZWxheWVyXG4gICAgICAgICAgICBiYW5rX25hbWU6IG0gPT0gbnVsbCA/IHZvaWQgMCA6IG0uYmFua19uYW1lLFxuICAgICAgICAgICAgY291bnRyeV9jb2RlOiBvW3AuQ09VTlRSWV0sXG4gICAgICAgICAgICAvLyBtaWNyb2RlcG9zaXRcbiAgICAgICAgICAgIG93bmVyX25hbWU6IE50KG9bcC5GSVJTVF9OQU1FXSwgb1twLkxBU1RfTkFNRV0pLFxuICAgICAgICAgICAgb3duZXJfZW1haWw6IG9bcC5FTUFJTF1cbiAgICAgICAgICAgIC8vIGliYW46IGN1c3RvbVBhcmFtcy5pYmFuLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiB2LmZpbmQoXG4gICAgICAoRSkgPT4gRS50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICkpID09IG51bGwgPyB2b2lkIDAgOiB3LnJlZGlyZWN0X3VybDtcbiAgICBpZiAoaCkge1xuICAgICAgV2UoXCJTRVBBIHZlcmlmaWNhdGlvbiByZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgeyBzdGF0dXM6IEUgfSA9IGF3YWl0IGJlKHtcbiAgICAgICAgdXJsOiBoLFxuICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICAgIGZyYW1lV2lkdGg6IFwiNTAwcHhcIixcbiAgICAgICAgZnJhbWVIZWlnaHQ6IFwiNzAwcHhcIixcbiAgICAgICAgZnJhbWVUaXRsZTogXCJTRVBBIHZlcmlmaWNhdGlvblwiXG4gICAgICB9KTtcbiAgICAgIGlmIChXZShg4pWwIFNFUEEgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke0V9XWApLCBFID09PSBGLkNBTkNFTExFRClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU0VQQSB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgaWYgKEUgPT09IEYuRkFJTFVSRSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU0VQQSB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgIH1cbiAgICBjb25zdCBiID0gYXdhaXQgTChzLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGMudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGZcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGxlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1zZXBhXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHMsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBvLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBiLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChFKSB7XG4gICAgICB0aHJvdyBacyhcIlNFUEEgcGF5bWVudCBlcnJvclwiLCBFKSwgZyhcImNoZWNrb3V0X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IEVcbiAgICAgIH0pLCBuZXcgRXJyb3IoKEUgPT0gbnVsbCA/IHZvaWQgMCA6IEUubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgeyBsb2dfXzogUXMsIGVycl9fOiBzciB9ID0gSShcImFpcndhbGxleC1jY1wiKSwgWHMgPSB6JDEub2JqZWN0KHtcbiAgXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6JDEuc3RyaW5nKClcbn0pLCBlYyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBYcy5zYWZlUGFyc2UoZSk7XG4gIGlmICghdC5zdWNjZXNzKSB7XG4gICAgY29uc3QgciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgbiA9IGBBaXJ3YWxsZXggM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlKX1gO1xuICAgIHRocm93IHNyKG4pLCBuZXcgRXJyb3Iocik7XG4gIH1cbiAgcmV0dXJuIHQuZGF0YTtcbn0sIE9uID0gKGUpID0+IChlID09IG51bGwgPyB2b2lkIDAgOiBlW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0pICE9PSB2b2lkIDAsIHRjID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB0ID0gbmV3IFVSTChlID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJwYXltZW50X2ludGVudF9pZFwiKTtcbiAgICBpZiAoIXQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBpbnRlbnQgSUQgZm91bmQgaW4gQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIHJldHVybiBRcyhgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW0ludGVudCBJRDogJHt0fV1gKSwgdDtcbiAgfSBjYXRjaCAodCkge1xuICAgIGNvbnN0IHIgPSBcIkVycm9yIHZlcmlmeWluZyBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuXCI7XG4gICAgdGhyb3cgc3IociwgYFJlc3VsdGluZyBVUkw6ICR7ZX0uXG5FcnJvcjogJHtlZSh0KX1gKSwgbmV3IEVycm9yKHIpO1xuICB9XG59LCBVbiA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBlYyh0KSwgbiA9IGF3YWl0IEZuKHsgdXJsOiByW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0sIGJhc2VVcmw6IGUgfSksIGEgPSB0YyhuLmhyZWYgPz8gXCJcIiksIG8gPSByW1wib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCJdO1xuICBpZiAobyAhPT0gYSkge1xuICAgIGNvbnN0IGMgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIGwgPSBgSW50ZW50IElEIGZyb20gY2FsbGJhY2sgKCR7YX0pIGRvZXMgbm90IG1hdGNoIHRoZSBpbml0aWFsIGludGVudCBJRCAoJHtvfSkuYDtcbiAgICB0aHJvdyBzcihsKSwgbmV3IEVycm9yKGMpO1xuICB9XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIGluaXRpYWxfaW50ZW50X2lkOiBhLFxuICAgICAgY29uc2VudF9pZDogcltcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCJdXG4gICAgfVxuICB9O1xufSwgam4gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSksICRuID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pLCBjciA9ICgpID0+IHhuKHtcbiAgc2NyaXB0SWQ6IFwiX19vcF9pbnRlcm5hbF9hcHBsZV9wYXlfc2RrXCIsXG4gIHNyYzogXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb20vanNhcGkvMS5sYXRlc3QvYXBwbGUtcGF5LXNkay5qc1wiLFxuICBjaGVja0xvYWRlZEZuOiAoKSA9PiAhIXdpbmRvdy5BcHBsZVBheVNlc3Npb25cbn0pLCBsciA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSB0LnRva2VuLnBheW1lbnRNZXRob2QuYmlsbGluZ0NvbnRhY3QsIG4gPSB0LmJpbGxpbmdDb250YWN0LCBhID0gdC5zaGlwcGluZ0NvbnRhY3QsIG8gPSB7IC4uLmUgfTtcbiAgaWYgKHIgfHwgbiB8fCBhKSB7XG4gICAgb1twLkVNQUlMXSA9IG9bcC5FTUFJTF0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZW1haWxBZGRyZXNzKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5lbWFpbEFkZHJlc3MpIHx8IChhID09IG51bGwgPyB2b2lkIDAgOiBhLmVtYWlsQWRkcmVzcykgfHwgXCJvcF91bmZpbGxlZEBlbWFpbC5jb21cIiwgb1twLkNPVU5UUlldID0gb1twLkNPVU5UUlldIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmNvdW50cnlDb2RlKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5jb3VudHJ5Q29kZSkgfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuY291bnRyeUNvZGUpIHx8IFwiVVNcIiwgb1twLlpJUF9DT0RFXSA9IG9bcC5aSVBfQ09ERV0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIucG9zdGFsQ29kZSkgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4ucG9zdGFsQ29kZSkgfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEucG9zdGFsQ29kZSkgfHwgXCIwMDAwMFwiO1xuICAgIGNvbnN0IHMgPSBvW3AuRklSU1RfTkFNRV0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZ2l2ZW5OYW1lKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5naXZlbk5hbWUpIHx8IChhID09IG51bGwgPyB2b2lkIDAgOiBhLmdpdmVuTmFtZSkgfHwgXCJcIiwgYyA9IG9bcC5MQVNUX05BTUVdIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmZhbWlseU5hbWUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmZhbWlseU5hbWUpIHx8IChhID09IG51bGwgPyB2b2lkIDAgOiBhLmZhbWlseU5hbWUpIHx8IFwiXCI7XG4gICAgcyB8fCBjID8gKG9bcC5GSVJTVF9OQU1FXSA9IHMsIG9bcC5MQVNUX05BTUVdID0gYykgOiAob1twLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiLCBvW3AuTEFTVF9OQU1FXSA9IFwiXCIpO1xuICB9XG4gIHJldHVybiBvO1xufTtcbnokMS5vYmplY3Qoe1xuICBkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBtZXNzYWdlSGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gICAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogeiQxLnN0cmluZygpLFxuICAgIG1lc3NhZ2VCb2R5OiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICB9KSxcbiAgb3JpZ2luOiB6JDEubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSk7XG5jb25zdCByYyA9ICh7XG4gIHRvdGFsOiBlLFxuICBwcmVmaWxsOiB0XG59KSA9PiB7XG4gIHZhciBuO1xuICBpZiAodC5tb2RlID09PSBcInNldHVwXCIpXG4gICAgcmV0dXJuIHtcbiAgICAgIHBheW1lbnREZXNjcmlwdGlvbjogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgICAgYW1vdW50OiBlLmFtb3VudCxcbiAgICAgICAgbGFiZWw6IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgICAgcGF5bWVudFRpbWluZzogXCJyZWN1cnJpbmdcIixcbiAgICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgICB9LFxuICAgICAgLy8gVE9ETzogdGhpcyBzaG91bGQgYmUgYmlsbGluZyBwb3J0YWwgdXJsXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9wYXNza2l0L3BrcmVjdXJyaW5ncGF5bWVudHJlcXVlc3QvbWFuYWdlbWVudHVybCNEaXNjdXNzaW9uXG4gICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IHVzZWQgd2hlbiB1c2VyIHJlbW92ZSBhIGNhcmQgZnJvbSB0aGVpciBBcHBsZVBheSB3YWxsZXQuXG4gICAgICAvLyBDdXJyZW50eSBzZXQgdG8gY2hlY2tvdXQgc2Vzc2lvbiB1cmwgdG8gc2F0aXNmeSBBcHBsZVBheSB0eXBlc1xuICAgICAgbWFuYWdlbWVudFVSTDogbmV3IFVSTChgL3BheS8ke3QudG9rZW59YCwgQ24pLnRvU3RyaW5nKClcbiAgICB9O1xuICBjb25zdCByID0gKG4gPSB0LmxpbmVfaXRlbXMpID09IG51bGwgPyB2b2lkIDAgOiBuWzBdO1xuICBpZiAocilcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiAociA9PSBudWxsID8gdm9pZCAwIDogci5kZXNjcmlwdGlvbikgPz8gXCJcIixcbiAgICAgIHJlZ3VsYXJCaWxsaW5nOiB7XG4gICAgICAgIGFtb3VudDogZS5hbW91bnQsXG4gICAgICAgIGxhYmVsOiAociA9PSBudWxsID8gdm9pZCAwIDogci5kZXNjcmlwdGlvbikgPz8gXCJcIixcbiAgICAgICAgcmVjdXJyaW5nUGF5bWVudEludGVydmFsVW5pdDogciA9PSBudWxsID8gdm9pZCAwIDogci5iaWxsaW5nX2ludGVydmFsLFxuICAgICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxDb3VudDogKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuYmlsbGluZ19pbnRlcnZhbF9jb3VudCkgPz8gdm9pZCAwLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICBtYW5hZ2VtZW50VVJMOiBgaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb20vcGF5LyR7dC50b2tlbn1gXG4gICAgfTtcbn0sIG5jID0gKHtcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogZSxcbiAgaW5pdGlhbFByZXZpZXc6IHQsXG4gIHByZWZpbGw6IHIsXG4gIGRlZmF1bHRMYWJlbDogbiA9IFwiVG90YWxcIlxufSkgPT4ge1xuICB2YXIgYywgbDtcbiAgY29uc3QgYSA9ICgoKGMgPSBlID09IG51bGwgPyB2b2lkIDAgOiBlLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuY3VycmVuY3kpID8/IChyID09IG51bGwgPyB2b2lkIDAgOiByLmN1cnJlbmN5KSA/PyB0LmN1cnJlbmN5KS50b1VwcGVyQ2FzZSgpLCBzID0gKCgoKGwgPSBlID09IG51bGwgPyB2b2lkIDAgOiBlLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGwuYW1vdW50QXRvbSkgPz8gKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuYW1vdW50QXRvbSkgPz8gMCkgLyAxMDApLnRvRml4ZWQoMik7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3lDb2RlOiBhLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUubGFiZWwpID8/IG4gPz8gXCJUb3RhbFwiLFxuICAgICAgdHlwZTogZSAhPSBudWxsICYmIGUucGVuZGluZyA/IFwicGVuZGluZ1wiIDogXCJmaW5hbFwiLFxuICAgICAgYW1vdW50OiBzXG4gICAgfVxuICB9O1xufSwgdXIgPSAoe1xuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBlLFxuICBpbml0aWFsUHJldmlldzogdCxcbiAgcHJlZmlsbDogcixcbiAgZGVmYXVsdExhYmVsOiBuXG59KSA9PiB7XG4gIGNvbnN0IHsgY3VycmVuY3lDb2RlOiBhLCB0b3RhbDogbyB9ID0gbmMoe1xuICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGUsXG4gICAgaW5pdGlhbFByZXZpZXc6IHQsXG4gICAgcHJlZmlsbDogcixcbiAgICBkZWZhdWx0TGFiZWw6IG5cbiAgfSk7XG4gIGxldCBzID0ge1xuICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgY3VycmVuY3lDb2RlOiBhLFxuICAgIHJlcXVpcmVkQmlsbGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCIsIFwicG9zdGFsQWRkcmVzc1wiLCBcIm5hbWVcIl0sXG4gICAgcmVxdWlyZWRTaGlwcGluZ0NvbnRhY3RGaWVsZHM6IFtcbiAgICAgIFwiZW1haWxcIixcbiAgICAgIC4uLnIuY2hlY2tvdXRfc2V0dGluZ3MucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MgPyBbXCJwb3N0YWxBZGRyZXNzXCJdIDogW11cbiAgICBdLFxuICAgIHN1cHBvcnRlZE5ldHdvcmtzOiBbXCJ2aXNhXCIsIFwibWFzdGVyQ2FyZFwiLCBcImFtZXhcIiwgXCJkaXNjb3ZlclwiXSxcbiAgICBtZXJjaGFudENhcGFiaWxpdGllczogW1xuICAgICAgXCJzdXBwb3J0czNEU1wiLFxuICAgICAgXCJzdXBwb3J0c0NyZWRpdFwiLFxuICAgICAgXCJzdXBwb3J0c0RlYml0XCIsXG4gICAgICBcInN1cHBvcnRzRU1WXCJcbiAgICBdLFxuICAgIHRvdGFsOiBvLFxuICAgIHJlY3VycmluZ1BheW1lbnRSZXF1ZXN0OiByYyh7XG4gICAgICB0b3RhbDogbyxcbiAgICAgIHByZWZpbGw6IHJcbiAgICB9KVxuICB9O1xuICByZXR1cm4gZSAhPSBudWxsICYmIGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCAmJiAodHlwZW9mIGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCA9PSBcImZ1bmN0aW9uXCIgPyBzID0ge1xuICAgIC4uLnMsXG4gICAgLi4uZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KHMpXG4gIH0gOiBzID0geyAuLi5zLCAuLi5lLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgfSksIHM7XG59LCBvYyA9IHokMS5lbnVtKFtcInRlc3RcIiwgXCJsaXZlXCIsIFwibGl2ZS11c1wiLCBcImxpdmUtaW5cIiwgXCJsaXZlLWFwc2VcIiwgXCJsaXZlLWF1XCJdKSwgYWMgPSB6JDEuZW51bShbXG4gIFwiYXJcIixcbiAgXCJiZy1CR1wiLFxuICBcImNhLUVTXCIsXG4gIFwiY3MtQ1pcIixcbiAgXCJkYS1ES1wiLFxuICBcImRlLURFXCIsXG4gIFwiZWwtR1JcIixcbiAgXCJlbi1VU1wiLFxuICBcImVzLUVTXCIsXG4gIFwiZXQtRUVcIixcbiAgXCJmaS1GSVwiLFxuICBcImZyLUZSXCIsXG4gIFwiaHItSFJcIixcbiAgXCJodS1IVVwiLFxuICBcImlzLUlTXCIsXG4gIFwiaXQtSVRcIixcbiAgXCJqYS1KUFwiLFxuICBcImtvLUtSXCIsXG4gIFwibHQtTFRcIixcbiAgXCJsdi1MVlwiLFxuICBcIm5sLU5MXCIsXG4gIFwibm8tTk9cIixcbiAgXCJwbC1QTFwiLFxuICBcInB0LUJSXCIsXG4gIFwicHQtUFRcIixcbiAgXCJyby1ST1wiLFxuICBcInJ1LVJVXCIsXG4gIFwic2stU0tcIixcbiAgXCJzbC1TSVwiLFxuICBcInN2LVNFXCIsXG4gIFwiemgtQ05cIixcbiAgXCJ6aC1UV1wiXG5dKSwgeyBsb2dfXzogJGUsIGVycl9fOiBjdCB9ID0gSShcImFkeWVuLWNjXCIpLCBpYyA9IHokMS5vYmplY3Qoe1xuICBcIm9wLWFjY291bnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWVudmlyb25tZW50XCI6IG9jLFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6JDEuc3RyaW5nKClcbn0pLCBHbiA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgc2MgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gaWMuc2FmZVBhcnNlKGUpO1xuICBpZiAoIXQuc3VjY2VzcylcbiAgICB0aHJvdyBjdChgQWR5ZW4gM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlKX1gKSwgbmV3IEVycm9yKEduKTtcbiAgcmV0dXJuIHQuZGF0YTtcbn0sIGNjID0gKGUpID0+IEpTT04ucGFyc2UoZSksIEFyID0gKCkgPT4gXCJBZHllbldlYlwiIGluIHdpbmRvdyAmJiBcIkFkeWVuQ2hlY2tvdXRcIiBpbiB3aW5kb3cuQWR5ZW5XZWIsIGxjID0gYXN5bmMgKCkgPT4ge1xuICAkZShcIldhaXRpbmcgZm9yIEFkeWVuIFNESyB0byBsb2FkLi4uXCIpO1xuICBmb3IgKGxldCBlID0gMDsgZSA8IDEwOyBlKyspXG4gICAgQXIoKSB8fCBhd2FpdCBUdCg1MDApO1xuICBpZiAoIUFyKCkpXG4gICAgdGhyb3cgY3QoXCJBZHllbiBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgbmV3IEVycm9yKEduKTtcbiAgcmV0dXJuICRlKFwiQWR5ZW4gU0RLIGxvYWRlZCBzdWNjZXNzZnVsbHlcIiksIHdpbmRvdy5BZHllbldlYi5BZHllbkNoZWNrb3V0O1xufSwgdWMgPSAoZSkgPT4ge1xuICBjb25zdCB7IGhlYWRlcnM6IHQsIGxvY2FsZTogciwgY291bnRyeUNvZGU6IG4sIGNvbXBvbmVudDogYSwgaG9zdDogbywgY2FuY2VsQnV0dG9uOiBzIH0gPSBlLCBjID0gY2ModFtcIm9wLWFkeWVuLWFjdGlvblwiXSk7XG4gIHJldHVybiAkZShgUnVubmluZyBBZHllbiAzRFMgZmxvdyBmb3IgYWN0aW9uIHR5cGU6ICR7Yy50eXBlfWApLCBuZXcgUHJvbWlzZSgobCkgPT4ge1xuICAgIGNvbnN0IHUgPSAoKSA9PiB7XG4gICAgICAkZShcIkNsZWFuaW5nIHVwIEFkeWVuIDNEUyBmbG93XCIpLCBzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBfKSwgby5yZW1vdmUoKTtcbiAgICB9LCBkID0gKHkpID0+IHtcbiAgICAgIGN0KFwiQXV0aGVudGljYXRpb24gZmFpbGVkLiBSZXN1bHQ6XCIsIHkpLCBsKHsgc3RhdHVzOiBGLkZBSUxVUkUsIGNsZWFudXA6IHUgfSk7XG4gICAgfSwgZiA9ICh5KSA9PiB7XG4gICAgICBjdChcIkFkeWVuIGVycm9yOlwiLCB5KSwgbCh7IHN0YXR1czogRi5GQUlMVVJFLCBjbGVhbnVwOiB1IH0pO1xuICAgIH0sIF8gPSAoKSA9PiB7XG4gICAgICBsKHsgc3RhdHVzOiBGLkNBTkNFTExFRCwgY2xlYW51cDogdSB9KTtcbiAgICB9O1xuICAgIHMuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIF8pO1xuICAgIGNvbnN0IG0gPSAoeSwgaCwgYikgPT4ge1xuICAgICAgby5yZW1vdmUoKSwgbCh7IHN0YXR1czogRi5TVUNDRVNTLCBhZGRpdGlvbmFsRGV0YWlsczogeSwgY2xlYW51cDogdSB9KTtcbiAgICB9O1xuICAgIGxjKCkudGhlbihcbiAgICAgICh5KSA9PiB5KHtcbiAgICAgICAgY2xpZW50S2V5OiB0W1wib3AtYWR5ZW4tY2xpZW50LWtleVwiXSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IHRbXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiXSxcbiAgICAgICAgbG9jYWxlOiByLFxuICAgICAgICBjb3VudHJ5Q29kZTogbixcbiAgICAgICAgb25BZGRpdGlvbmFsRGV0YWlsczogbSxcbiAgICAgICAgb25QYXltZW50RmFpbGVkOiBkLFxuICAgICAgICBvbkVycm9yOiBmXG4gICAgICB9KVxuICAgICkudGhlbigoeSkgPT4ge1xuICAgICAgeS5jcmVhdGVGcm9tQWN0aW9uKGMsIHsgY2hhbGxlbmdlV2luZG93U2l6ZTogXCIwM1wiIH0pLm1vdW50KGEpO1xuICAgIH0pO1xuICB9KTtcbn0sIGRjID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGggPyBuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdIDogbmF2aWdhdG9yLmxhbmd1YWdlLCByID0gZSA/PyB0LCBuID0gYWMuc2FmZVBhcnNlKHIpO1xuICByZXR1cm4gbi5zdWNjZXNzID8gKCRlKGBSZXNvbHZlZCBsb2NhbGU6ICR7bi5kYXRhfWApLCBuLmRhdGEpIDogKGN0KGBSZXNvbHZlZCBpbnZhbGlkIGxvY2FsZTogJHtyfS4gRGVmYXVsdGluZyB0byBlbi1VUy5gKSwgXCJlbi1VU1wiKTtcbn0sIFZuID0gKGUpID0+IChlID09IG51bGwgPyB2b2lkIDAgOiBlW1wib3AtYWR5ZW4tYWN0aW9uXCJdKSAhPT0gdm9pZCAwLCBxbiA9IGFzeW5jIChlLCB0LCByKSA9PiB7XG4gIGNvbnN0IG4gPSBzYyh0KSwgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGEuaWQgPSBcImFkeWVuLWNvbnRhaW5lclwiO1xuICBjb25zdCB7IGhvc3Q6IG8sIGlmcmFtZTogcywgY2FuY2VsQnV0dG9uOiBjIH0gPSBSbihcImh0dHA6Ly9leGFtcGxlLmNvbVwiKTtcbiAgcy5yZXBsYWNlV2l0aChhKTtcbiAgY29uc3QgbCA9IGF3YWl0IHVjKHtcbiAgICBoZWFkZXJzOiBuLFxuICAgIGxvY2FsZTogZGMociksXG4gICAgY291bnRyeUNvZGU6IGUsXG4gICAgY29tcG9uZW50OiBhLFxuICAgIGhvc3Q6IG8sXG4gICAgY2FuY2VsQnV0dG9uOiBjXG4gIH0pO1xuICBpZiAobC5jbGVhbnVwKCksIGwuc3RhdHVzID09PSBGLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIGlmIChsLnN0YXR1cyA9PT0gRi5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChsLnN0YXR1cyA9PT0gRi5TVUNDRVNTKSB7XG4gICAgaWYgKCFsLmFkZGl0aW9uYWxEZXRhaWxzKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWQgYnV0IG5vIGFkZGl0aW9uYWwgZGV0YWlscyB3ZXJlIHJldHVybmVkXCIpO1xuICAgIHJldHVybiAkZShcIjNEUyB2ZXJpZmljYXRpb24gc3VjY2VlZGVkXCIpLCB7XG4gICAgICBleGlzdGluZ19jYzoge1xuICAgICAgICBhZGRpdGlvbmFsX2RldGFpbHM6IGwuYWRkaXRpb25hbERldGFpbHMuZGF0YVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZVxuICAgIGt0KGwuc3RhdHVzKTtcbn0sIHpuID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWR5ZW5cIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIEhuID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFkeWVuXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSksIHsgbG9nX186IHBjIH0gPSBJKFwiYXd4LWFwcGxlLXBheVwiKTtcbmFzeW5jIGZ1bmN0aW9uIF9jKGUsIHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBuID0gKGF3YWl0IFJ0KHQuY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFwcGxlX3BheV9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGUudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiB0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5uZXh0X2FjdGlvbl9tZXRhZGF0YSwgYSA9IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uYXBwbGVfcGF5X3Nlc3Npb247XG4gICAgaWYgKCFhKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihhKSwgZyhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLmFcbiAgICB9KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRocm93IHQuc2Vzc2lvbi5hYm9ydCgpLCByO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBtYyhlLCB0KSB7XG4gIHZhciByLCBuO1xuICB0cnkge1xuICAgIGNvbnN0IGEgPSBlLnBheW1lbnQsIG8gPSBscih0Lm5vbkNkZUZvcm1JbnB1dHMsIGEpLCBzID0gcShcbiAgICAgIG8sXG4gICAgICB0LmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgdC5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4uc1xuICAgIH0pLCBhd2FpdCBuZSh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBzW3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHNbcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHNbcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IFoocyksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogSyhcbiAgICAgICAgcyxcbiAgICAgICAgdC5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgICApXG4gICAgfSk7XG4gICAgY29uc3QgYyA9IGF3YWl0IEwodC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYnJvd3Nlcl9pbmZvOiBhbygpLFxuICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YToge1xuICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBKU09OLnN0cmluZ2lmeShhLnRva2VuKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHBjKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgYyksICEoKG4gPSAociA9IGMucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogclswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IG4uaWQpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgY29uc3QgdSA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICByZXR1cm4gdC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudCh1KSwgbGUoe1xuICAgICAgbG9nUHJlZml4OiBcImFkeWVuLWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiB0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBzLFxuICAgICAgY29uZmlybVJlc3VsdDogYyxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICB9KTtcbiAgfSBjYXRjaCAoYSkge1xuICAgIGNvbnN0IG8gPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgdGhyb3cgdC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChvKSwgYTtcbiAgfVxufVxuY29uc3QgeyBsb2dfXzogS2UsIGVycl9fOiBCbiB9ID0gSShcImFkeWVuLWFwcGxlLXBheVwiKSwgZmMgPSB3ZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmFkeWVuLFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIG4gPSB6KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgem4pO1xuICAgIGlmICghbilcbiAgICAgIHJldHVybiByO1xuICAgIGlmIChLZShcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgY3IoKSwgIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiBLZShcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIiksIHI7XG4gICAgaWYgKEtlKFwiQXBwbGUgUGF5IExvYWRlZFwiKSwgIWF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiBLZShcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKSwgcjtcbiAgICBpZiAoIW4ubWV0YWRhdGEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBNKHMpLCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCB2ZShzLCBjLnRva2VuLCBsLCB2b2lkIDApLCBkID0gYXN5bmMgKGYpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IFQuYWR5ZW5BcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGooZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgIEJuKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgXyksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoXyA9PSBudWxsID8gdm9pZCAwIDogXy5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBkXG4gICAgfTtcbiAgfVxuKSwgeWMgPSBIKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBuLFxuICAgIGZvcm1DYWxsYmFja3M6IGFcbiAgfSkgPT4ge1xuICAgIHZhciB5O1xuICAgIGNvbnN0IG8gPSB6KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgem4pLCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsIGluaXRpYWxQcmV2aWV3OiBjIH0gPSBuLCBsID0gZS5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgTShsKSwgZCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCBmID0gdXIoe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBjLFxuICAgICAgcHJlZmlsbDoge1xuICAgICAgICAuLi51XG4gICAgICB9LFxuICAgICAgZGVmYXVsdExhYmVsOiAoeSA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiB5LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KSwgXyA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgZiksIG0gPSB7XG4gICAgICBzZXNzaW9uOiBfLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IG8ubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IGQsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBhLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBuID09IG51bGwgPyB2b2lkIDAgOiBuLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgcmV0dXJuIGcoXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiB0LnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogQXQodSwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pLCBuZXcgUHJvbWlzZSgoaCwgYikgPT4ge1xuICAgICAgY29uc3QgdiA9ICgpID0+IHtcbiAgICAgICAgS2UoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCBiKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIF8ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKHcpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBfYyh3LCBtKTtcbiAgICAgICAgfSBjYXRjaCAoRSkge1xuICAgICAgICAgIGIoRSk7XG4gICAgICAgIH1cbiAgICAgIH0sIF8ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHcgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IHsgLi4uZi50b3RhbCB9XG4gICAgICAgIH07XG4gICAgICAgIF8uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKHcpO1xuICAgICAgfSwgXy5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKHcpID0+IHtcbiAgICAgICAgZyhcImFwcGxlX3BheV9wYXltZW50X2F1dGhvcml6ZWRcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgRSA9IGF3YWl0IG1jKHcsIG0pO1xuICAgICAgICAgIGgoRSk7XG4gICAgICAgIH0gY2F0Y2ggKEUpIHtcbiAgICAgICAgICBiKEUpO1xuICAgICAgICB9XG4gICAgICB9LCBfLm9uY2FuY2VsID0gdiwgXy5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChoKSA9PiB7XG4gICAgICB0aHJvdyBCbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGgpLCBnKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogaFxuICAgICAgfSksIGg7XG4gICAgfSk7XG4gIH1cbiksIHsgbG9nX186IGllLCBlcnJfXzogTWUgfSA9IEkoXCJhZHllbi1nb29nbGUtcGF5XCIpLCBoYyA9IHdlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICB2YXIgZiwgXztcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBIbik7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgaWUoXCJHb29nbGUgUGF5IENQTVwiLCBuKTtcbiAgICBjb25zdCBhID0gbi5tZXRhZGF0YTtcbiAgICBpZiAoIWEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gTWUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCByO1xuICAgIGlmIChpZShcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIiksIGF3YWl0IG9yKCksICEoKF8gPSAoZiA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBmLnBheW1lbnRzKSAhPSBudWxsICYmIF8uYXBpKSlcbiAgICAgIHJldHVybiBNZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHI7XG4gICAgaWYgKGF3YWl0IGFyKGUuYmFzZVVybCkgPT09IFwiUFJPRFVDVElPTlwiICYmICFhLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpXG4gICAgICByZXR1cm4gTWUoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpLCByO1xuICAgIGllKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBNKHMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtID0gcWUoe1xuICAgICAgICBwcmVmaWxsOiBjLFxuICAgICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogYS5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBhLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IGEuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlldzoge1xuICAgICAgICAgIGFtb3VudEF0b206IDAsXG4gICAgICAgICAgY3VycmVuY3k6IFwiVVNEXCJcbiAgICAgICAgfVxuICAgICAgfSksIHkgPSBhd2FpdCB6ZShlLmJhc2VVcmwsIG0pLCB7IHJlc3VsdDogaCB9ID0gYXdhaXQgeS5pc1JlYWR5VG9QYXkobSk7XG4gICAgICBpZiAoIWgpXG4gICAgICAgIHJldHVybiBpZShcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCByO1xuICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgIHJldHVybiBNZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIG0pLCByO1xuICAgIH1cbiAgICBjb25zdCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCB2ZShzLCBjLnRva2VuLCBsLCB2b2lkIDApLCBkID0gYXN5bmMgKG0pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIFQuYWR5ZW5Hb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5tLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoeSkge1xuICAgICAgICBNZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCB5KSwgdC5nZXQub25DaGVja291dEVycm9yKCh5ID09IG51bGwgPyB2b2lkIDAgOiB5Lm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBnYyA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIG0sIHksIGgsIGIsIHYsIHcsIEUsIEMsIE87XG4gICAgaWUoXCJTdGFydGluZyBHb29nbGUgUGF5IGZsb3cuLi5cIik7XG4gICAgY29uc3QgbyA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBIbiksIHsgaW5pdGlhbFByZXZpZXc6IHMsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGMgfSA9IGEsIGwgPSBvLm1ldGFkYXRhO1xuICAgIGlmICghbC5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgdSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgZCA9IGF3YWl0IE0odSksIGYgPSBxZSh7XG4gICAgICBwcmVmaWxsOiBkLFxuICAgICAgZ2F0ZXdheTogXCJhZHllblwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGwucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IGwucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IGwuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IHMsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjXG4gICAgfSk7XG4gICAgZyhcImdvb2dsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBvLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogQXQoZCwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY1xuICAgIH0pO1xuICAgIGNvbnN0IF8gPSBhd2FpdCB6ZShlLmJhc2VVcmwsIGYpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBBID0gYXdhaXQgXy5sb2FkUGF5bWVudERhdGEoZik7XG4gICAgICBpZShcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIEEpO1xuICAgICAgY29uc3QgRCA9IGlyKHIsIEEpLCBRID0gcShcbiAgICAgICAgRCxcbiAgICAgICAgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgICApO1xuICAgICAgaWYgKGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgICAuLi5RXG4gICAgICB9KSwgISgoeSA9IChtID0gQS5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IG0udG9rZW5pemF0aW9uRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IHkudG9rZW4pKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IHVlID0gYXdhaXQgbmUodSwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBRW3AuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogUVtwLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBRW3AuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IFooUSksXG4gICAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBLKFEsIGQuY2hlY2tvdXRfc2V0dGluZ3MpXG4gICAgICB9KSwgQ2UgPSBIZSh1ZSk7XG4gICAgICBpZShcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIENlKTtcbiAgICAgIGxldCBZID0gYXdhaXQgTCh1LCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogZC50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgICBicm93c2VyX2luZm86IGFvKCksXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiAoYiA9IChoID0gQS5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGgudG9rZW5pemF0aW9uRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGIudG9rZW5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWUoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBZKTtcbiAgICAgIGxldCBoZSA9ICh3ID0gKHYgPSBZLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IHZbMF0pID09IG51bGwgPyB2b2lkIDAgOiB3LmlkO1xuICAgICAgY29uc3QgRmUgPSAoRSA9IFkucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogRS5maW5kKChCZSkgPT4gQmUudHlwZSA9PT0gXCJhZHllbi0zZHNcIik7XG4gICAgICBpZiAoRmUgJiYgRmUucmVkaXJlY3RfdXJsKSB7XG4gICAgICAgIGllKFwiQWR5ZW4gM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgRmUpO1xuICAgICAgICBjb25zdCB7IHN0YXR1czogQmUgfSA9IGF3YWl0IGJlKHtcbiAgICAgICAgICB1cmw6IEZlLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpZShg4pWwIEFkeWVuIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7QmV9XWApLCBCZSA9PT0gRi5DQU5DRUxMRUQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIGlmIChCZSA9PT0gRi5GQUlMVVJFKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKEZlICYmICFoZSAmJiAoWSA9IGF3YWl0IEwodSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGQudG9rZW4sXG4gICAgICAgIHRoZWlyX3BtX2lkOiBGZS50aGVpcl9wbV9pZCxcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlclxuICAgICAgICB9XG4gICAgICB9KSwgaWUoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZSBhZnRlciAzRFNcIiwgWSksIGhlID0gKE8gPSAoQyA9IFkucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogQ1swXSkgPT0gbnVsbCA/IHZvaWQgMCA6IE8uaWQpLCAhaGUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgbWV0aG9kIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIGxlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImFkeWVuLWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiB1LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogUSxcbiAgICAgICAgY29uZmlybVJlc3VsdDogWSxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoQSkge1xuICAgICAgdGhyb3cgTWUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgQSksIGcoXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogQVxuICAgICAgfSksIG5ldyBFcnJvcigoQSA9PSBudWxsID8gdm9pZCAwIDogQS5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBJciwgZXJyX186IHdjIH0gPSBJKFwiYXd4LWFjaFwiKSwgdmMgPSBIKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIHZhciBoLCBiO1xuICAgIGNvbnN0IG8gPSBxKHIsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE0ocyksIGwgPSBhLnZlcmlmaWNhdGlvbk1ldGhvZCA/PyBcInBsYWlkXCIsIHUgPSBhd2FpdCBuZShzLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG9bcC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogb1twLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogb1twLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogWihvKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBLKG8sIGMuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGNlKClcbiAgICB9KSwgZCA9IEhlKHUpLCBmID0gZCA9PSBudWxsID8gdm9pZCAwIDogZC5jb25zZW50X2lkLCBtID0gKGIgPSAoaCA9IChhd2FpdCBMKHMsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogYy50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogZixcbiAgICAgICAgdmVyaWZpY2F0aW9uX21ldGhvZDogbCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFjaF9kaXJlY3RfZGViaXRcIixcbiAgICAgICAgICBhY2hfZGlyZWN0X2RlYml0OiB7XG4gICAgICAgICAgICAvL3BsYWlkIHZlcmlmaWNhdGlvbiByZXF1aXJlZCBmaWVsZHNcbiAgICAgICAgICAgIGJ1c2luZXNzX2FjY291bnQ6IGEuaXNCdXNpbmVzc0FjY291bnQgPz8gITEsXG4gICAgICAgICAgICBvd25lcl9uYW1lOiBOdChvW3AuRklSU1RfTkFNRV0sIG9bcC5MQVNUX05BTUVdKSxcbiAgICAgICAgICAgIG93bmVyX2VtYWlsOiBvW3AuRU1BSUxdXG4gICAgICAgICAgICAvL0FDSCBtaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiByZXF1aXJlZCBmaWVsZHNcbiAgICAgICAgICAgIC8vIGFjY291bnRfbnVtYmVyOiBhY2hSZXN1bHQ/LnBheWxvYWQ/LmFjY291bnROdW1iZXIsXG4gICAgICAgICAgICAvLyBhYmFfcm91dGluZ19udW1iZXI6IGFjaFJlc3VsdD8ucGF5bG9hZD8ucm91dGluZ051bWJlcixcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSkucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogaC5maW5kKFxuICAgICAgKHYpID0+IHYudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApKSA9PSBudWxsID8gdm9pZCAwIDogYi5yZWRpcmVjdF91cmw7XG4gICAgaWYgKG0pIHtcbiAgICAgIElyKFwiUGxhaWQgdmVyaWZpY2F0aW9uIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1czogdiB9ID0gYXdhaXQgYmUoe1xuICAgICAgICB1cmw6IG0sXG4gICAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIkFDSCB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBpZiAoSXIoYOKVsCBQbGFpZCB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7dn1dYCksIHYgPT09IEYuQ0FOQ0VMTEVEKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGFpZCB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgaWYgKHYgPT09IEYuRkFJTFVSRSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxhaWQgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICB9XG4gICAgY29uc3QgeSA9IGF3YWl0IEwocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBmXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBsZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYWNoXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHMsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBvLFxuICAgICAgICBjb25maXJtUmVzdWx0OiB5LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoICh2KSB7XG4gICAgICB0aHJvdyB3YyhcIkFDSCBwYXltZW50IGVycm9yXCIsIHYpLCBnKFwiY2hlY2tvdXRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogdlxuICAgICAgfSksIG5ldyBFcnJvcigodiA9PSBudWxsID8gdm9pZCAwIDogdi5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiB5dCB9ID0gSShcImF3eC1hcHBsZS1wYXlcIik7XG5hc3luYyBmdW5jdGlvbiBiYyhlLCB0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IChhd2FpdCBSdCh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGUudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiB0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5uZXh0X2FjdGlvbl9tZXRhZGF0YSwgYSA9IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uYXBwbGVfcGF5X3Nlc3Npb247XG4gICAgaWYgKCFhKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihhKSwgZyhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLmFcbiAgICB9KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRocm93IHQuc2Vzc2lvbi5hYm9ydCgpLCByO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBFYyhlLCB0KSB7XG4gIGlmICghZS5yZWRpcmVjdF91cmwpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kXCIpO1xuICB5dChcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIGUpO1xuICBjb25zdCB7IHN0YXR1czogciB9ID0gYXdhaXQgYmUoe1xuICAgIHVybDogZS5yZWRpcmVjdF91cmwsXG4gICAgYmFzZVVybDogdC5iYXNlVXJsXG4gIH0pO1xuICBpZiAoeXQoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3J9XWApLCByID09PSBGLkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHIgPT09IEYuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgY29uc3QgbiA9IGF3YWl0IEwodC5jb25uZWN0aW9uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiB0LnByZWZpbGwudG9rZW4sXG4gICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICB0aGVpcl9wbV9pZDogZS50aGVpcl9wbV9pZCxcbiAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBlLmNvbnNlbnRfaWQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB5dChcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIG4pLCBuO1xufVxuYXN5bmMgZnVuY3Rpb24gUGMoZSwgdCkge1xuICB2YXIgciwgbiwgYSwgbywgcztcbiAgdHJ5IHtcbiAgICBjb25zdCBjID0gZS5wYXltZW50LCBsID0gbHIodC5ub25DZGVGb3JtSW5wdXRzLCBjKSwgdSA9IHEoXG4gICAgICBsLFxuICAgICAgdC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHQuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLnVcbiAgICB9KTtcbiAgICBjb25zdCBfID0gKGF3YWl0IG5lKHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHVbcC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogdVtwLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogdVtwLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogWih1KSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBLKFxuICAgICAgICB1LFxuICAgICAgICB0LnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICAgICksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogY2UoKVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0uY29uc2VudF9pZDtcbiAgICBpZiAoIV8pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25zZW50IElEIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIGxldCBtID0gYXdhaXQgTCh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogdC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogXyxcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFwcGxlcGF5XCIsXG4gICAgICAgICAgYXBwbGVwYXk6IHtcbiAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkoYy50b2tlbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB5dChcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIG0pO1xuICAgIGxldCB5ID0gKG4gPSAociA9IG0ucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogclswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IG4uaWQ7XG4gICAgY29uc3QgaCA9IChhID0gbS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBhLmZpbmQoXG4gICAgICAodikgPT4gdi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk7XG4gICAgaWYgKGggIT0gbnVsbCAmJiBoLnJlZGlyZWN0X3VybCAmJiBoLmNvbnNlbnRfaWQgJiYgaC50aGVpcl9wbV9pZCAmJiAobSA9IGF3YWl0IEVjKGgsIHQpLCB5ID0gKHMgPSAobyA9IG0ucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogb1swXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHMuaWQpLCAheSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIGNvbnN0IGIgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgcmV0dXJuIHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQoYiksIGxlKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IHQuY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IHUsXG4gICAgICBjb25maXJtUmVzdWx0OiBtLFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgIH0pO1xuICB9IGNhdGNoIChjKSB7XG4gICAgY29uc3QgbCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICB0aHJvdyB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KGwpLCBjO1xuICB9XG59XG5jb25zdCB7IGxvZ19fOiBRZSwgZXJyX186IFluIH0gPSBJKFwiYXd4LWFwcGxlLXBheVwiKSwgU2MgPSB3ZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGpuKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICBpZiAoUWUoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIiksIGF3YWl0IGNyKCksICF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gUWUoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCByO1xuICAgIGlmIChRZShcIkFwcGxlIFBheSBMb2FkZWRcIiksICFhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gUWUoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIiksIHI7XG4gICAgaWYgKCFuLm1ldGFkYXRhLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgTShzKSwgbCA9IGMubW9kZSA9PT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgdmUocywgYy50b2tlbiwgbCwgdm9pZCAwKSwgZCA9IGFzeW5jIChmKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBULmFpcndhbGxleEFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgWW4oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBfKSwgdC5nZXQub25DaGVja291dEVycm9yKChfID09IG51bGwgPyB2b2lkIDAgOiBfLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBkXG4gICAgfTtcbiAgfVxuKSwgQ2MgPSBIKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBuLFxuICAgIGZvcm1DYWxsYmFja3M6IGFcbiAgfSkgPT4ge1xuICAgIHZhciB5O1xuICAgIGNvbnN0IG8gPSB6KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgam4pLCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsIGluaXRpYWxQcmV2aWV3OiBjIH0gPSBuLCBsID0gZS5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgTShsKSwgZCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCBmID0gdXIoe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBjLFxuICAgICAgcHJlZmlsbDoge1xuICAgICAgICAuLi51XG4gICAgICB9LFxuICAgICAgZGVmYXVsdExhYmVsOiAoeSA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiB5LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KSwgXyA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgZiksIG0gPSB7XG4gICAgICBzZXNzaW9uOiBfLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IG8ubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IGQsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBhLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBuID09IG51bGwgPyB2b2lkIDAgOiBuLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgcmV0dXJuIGcoXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiB0LnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogQXQodSwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pLCBuZXcgUHJvbWlzZSgoaCwgYikgPT4ge1xuICAgICAgY29uc3QgdiA9ICgpID0+IHtcbiAgICAgICAgUWUoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCBiKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIF8ub25jYW5jZWwgPSB2LCBfLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jICh3KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgYmModywgbSk7XG4gICAgICAgIH0gY2F0Y2ggKEUpIHtcbiAgICAgICAgICBiKEUpO1xuICAgICAgICB9XG4gICAgICB9LCBfLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB3ID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiB7IC4uLmYudG90YWwgfVxuICAgICAgICB9O1xuICAgICAgICBfLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbih3KTtcbiAgICAgIH0sIF8ub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jICh3KSA9PiB7XG4gICAgICAgIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9hdXRob3JpemVkXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IEUgPSBhd2FpdCBQYyh3LCBtKTtcbiAgICAgICAgICBoKEUpO1xuICAgICAgICB9IGNhdGNoIChFKSB7XG4gICAgICAgICAgYihFKTtcbiAgICAgICAgfVxuICAgICAgfSwgXy5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChoKSA9PiB7XG4gICAgICB0aHJvdyBZbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGgpLCBnKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogaFxuICAgICAgfSksIGg7XG4gICAgfSk7XG4gIH1cbiksIHsgbG9nX186IHJlLCBlcnJfXzogTGUgfSA9IEkoXCJhd3gtZ29vZ2xlLXBheVwiKSwga2MgPSB3ZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgdmFyIGYsIF87XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsICRuKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICByZShcIkdvb2dsZSBQYXkgQ1BNXCIsIG4pO1xuICAgIGNvbnN0IGEgPSBuLm1ldGFkYXRhO1xuICAgIGlmICghYS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHJldHVybiBMZShcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIiksIHI7XG4gICAgaWYgKHJlKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgb3IoKSwgISgoXyA9IChmID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGYucGF5bWVudHMpICE9IG51bGwgJiYgXy5hcGkpKVxuICAgICAgcmV0dXJuIExlKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgcjtcbiAgICBpZiAoYXdhaXQgYXIoZS5iYXNlVXJsKSA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIWEuZ29vZ2xlX3BheV9tZXJjaGFudF9pZClcbiAgICAgIHJldHVybiBMZShcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIiksIHI7XG4gICAgcmUoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE0ocyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG0gPSBxZSh7XG4gICAgICAgIHByZWZpbGw6IGMsXG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBhLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IGEucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogYS5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgeSA9IGF3YWl0IHplKGUuYmFzZVVybCwgbSksIHsgcmVzdWx0OiBoIH0gPSBhd2FpdCB5LmlzUmVhZHlUb1BheShtKTtcbiAgICAgIGlmICghaClcbiAgICAgICAgcmV0dXJuIHJlKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIHI7XG4gICAgfSBjYXRjaCAobSkge1xuICAgICAgcmV0dXJuIExlKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgbSksIHI7XG4gICAgfVxuICAgIGNvbnN0IGwgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IHZlKHMsIGMudG9rZW4sIGwsIHZvaWQgMCksIGQgPSBhc3luYyAobSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgVC5haXJ3YWxsZXhHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5tLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoeSkge1xuICAgICAgICBMZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCB5KSwgdC5nZXQub25DaGVja291dEVycm9yKCh5ID09IG51bGwgPyB2b2lkIDAgOiB5Lm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBkXG4gICAgfTtcbiAgfVxuKSwgQWMgPSBIKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIHZhciBtLCB5LCBoLCBiLCB2LCB3LCBFO1xuICAgIHJlKFwiU3RhcnRpbmcgR29vZ2xlIFBheSBmbG93Li4uXCIpO1xuICAgIGNvbnN0IG8gPSB6KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgJG4pLCB7IGluaXRpYWxQcmV2aWV3OiBzLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjIH0gPSBhLCBsID0gby5tZXRhZGF0YTtcbiAgICBpZiAoIWwucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IHUgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGQgPSBhd2FpdCBNKHUpLCBmID0gcWUoe1xuICAgICAgcHJlZmlsbDogZCxcbiAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogbC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogbC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogbC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogcyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGNcbiAgICB9KTtcbiAgICBnKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IG8ucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBBdChkLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjXG4gICAgfSk7XG4gICAgY29uc3QgXyA9IGF3YWl0IHplKGUuYmFzZVVybCwgZik7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IEMgPSBhd2FpdCBfLmxvYWRQYXltZW50RGF0YShmKTtcbiAgICAgIHJlKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgQyk7XG4gICAgICBjb25zdCBPID0gaXIociwgQyksIEEgPSBxKFxuICAgICAgICBPLFxuICAgICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgYSA9PSBudWxsID8gdm9pZCAwIDogYS5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICAgICk7XG4gICAgICByZShcIl9fX1wiLCBBKSwgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLkFcbiAgICAgIH0pO1xuICAgICAgY29uc3QgRCA9ICh5ID0gKG0gPSBDLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogbS50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogeS50b2tlbjtcbiAgICAgIGlmICghRClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICBjb25zdCBRID0gYXdhaXQgbmUodSwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBBW3AuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogQVtwLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBBW3AuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IFooQSksXG4gICAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBLKEEsIGQuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgICBjdXN0b21lcl9sYW5ndWFnZTogY2UoKVxuICAgICAgfSksIFNlID0gSGUoUSk7XG4gICAgICByZShcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIFNlKTtcbiAgICAgIGxldCB1ZSA9IGF3YWl0IEwodSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGQudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgICAgLy8gR29vZ2xlUGF5J3MgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW4gcHJvdmlkZWQgdG8gdmVyaWZ5IHRoZSBjb25zZW50IGZpcnN0XG4gICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IFNlID09IG51bGwgPyB2b2lkIDAgOiBTZS5jb25zZW50X2lkLFxuICAgICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBcImdvb2dsZXBheVwiLFxuICAgICAgICAgICAgZ29vZ2xlcGF5OiB7XG4gICAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBEXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJlKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgdWUpO1xuICAgICAgbGV0IENlID0gKGIgPSAoaCA9IHVlLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IGhbMF0pID09IG51bGwgPyB2b2lkIDAgOiBiLmlkO1xuICAgICAgY29uc3QgWSA9ICh2ID0gdWUucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogdi5maW5kKFxuICAgICAgICAoaGUpID0+IGhlLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgICApO1xuICAgICAgaWYgKFkgJiYgWS5yZWRpcmVjdF91cmwpIHtcbiAgICAgICAgcmUoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBZKTtcbiAgICAgICAgY29uc3QgeyBzdGF0dXM6IGhlIH0gPSBhd2FpdCBiZSh7XG4gICAgICAgICAgdXJsOiBZLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZShg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7aGV9XWApLCBoZSA9PT0gRi5DQU5DRUxMRUQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIGlmIChoZSA9PT0gRi5GQUlMVVJFKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKFkgJiYgIUNlICYmICh1ZSA9IGF3YWl0IEwodSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGQudG9rZW4sXG4gICAgICAgIHRoZWlyX3BtX2lkOiBZLnRoZWlyX3BtX2lkLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBZLmNvbnNlbnRfaWRcbiAgICAgICAgfVxuICAgICAgfSksIHJlKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgdWUpLCBDZSA9IChFID0gKHcgPSB1ZS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiB3WzBdKSA9PSBudWxsID8gdm9pZCAwIDogRS5pZCksICFDZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgICByZXR1cm4gbGUoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiB1LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogQSxcbiAgICAgICAgY29uZmlybVJlc3VsdDogdWUsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKEMpIHtcbiAgICAgIHRocm93IExlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIEMpLCBnKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IENcbiAgICAgIH0pLCBuZXcgRXJyb3IoKEMgPT0gbnVsbCA/IHZvaWQgMCA6IEMubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgSm4gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBXbiA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5hc3luYyBmdW5jdGlvbiBJYyhlLCB0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IChhd2FpdCBSdCh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhcHBsZV9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZS52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLm5leHRfYWN0aW9uX21ldGFkYXRhLCBhID0gbiA9PSBudWxsID8gdm9pZCAwIDogbi5hcHBsZV9wYXlfc2Vzc2lvbjtcbiAgICBpZiAoIWEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgdC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKGEpLCBnKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4uYVxuICAgIH0pO1xuICB9IGNhdGNoIChyKSB7XG4gICAgdGhyb3cgdC5zZXNzaW9uLmFib3J0KCksIHI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIFRjKGUsIHQpIHtcbiAgdmFyIHIsIG47XG4gIHRyeSB7XG4gICAgY29uc3QgYSA9IGUucGF5bWVudCwgbyA9IGxyKHQubm9uQ2RlRm9ybUlucHV0cywgYSksIHMgPSBxKG8sIHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4uc1xuICAgIH0pLCBhd2FpdCBuZSh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBzW3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHNbcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHNbcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IFoocyksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogSyhcbiAgICAgICAgcyxcbiAgICAgICAgdC5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgICApLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGNlKClcbiAgICB9KTtcbiAgICBjb25zdCBjID0ge1xuICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkFQUExFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkoYS50b2tlbi5wYXltZW50RGF0YSkpXG4gICAgfSwgbCA9IGF3YWl0IEwodC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IGNcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoISgobiA9IChyID0gbC5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiByWzBdKSA9PSBudWxsID8gdm9pZCAwIDogbi5pZCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICBjb25zdCBkID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIHJldHVybiB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KGQpLCBsZSh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXV0aG5ldC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogdC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogcyxcbiAgICAgIGNvbmZpcm1SZXN1bHQ6IGwsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGEpIHtcbiAgICBjb25zdCBvID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIHRocm93IHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQobyksIGE7XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IGh0LCBlcnJfXzogWm4gfSA9IEkoXCJhdXRobmV0LWFwcGxlcGF5XCIpLCBSYyA9IHdlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEpuKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICBpZiAoaHQoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIiksIGF3YWl0IGNyKCksICF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gaHQoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCByO1xuICAgIGlmICghYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIGh0KFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCByO1xuICAgIGlmICghbi5tZXRhZGF0YS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE0ocyksIGwgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IHZlKHMsIGMudG9rZW4sIGwsIHZvaWQgMCksIGQgPSBhc3luYyAoZikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgVC5hdXRob3JpemVOZXRBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGooZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgIFpuKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgXyksIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IF9cbiAgICAgICAgfSksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoXyA9PSBudWxsID8gdm9pZCAwIDogXy5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBOYyA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBjdXN0b21QYXJhbXM6IG4sXG4gICAgZm9ybUNhbGxiYWNrczogYVxuICB9KSA9PiB7XG4gICAgdmFyIHk7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldzogbywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyB9ID0gbiwgYyA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBKbiksIGwgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHUgPSBhd2FpdCBNKGwpLCBkID0gdS5tb2RlID09PSBcInNldHVwXCIsIGYgPSB1cih7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IG8sXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgZGVmYXVsdExhYmVsOiAoeSA9IGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiB5LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KTtcbiAgICBnKFwiYXBwbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogdC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzXG4gICAgfSk7XG4gICAgY29uc3QgXyA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgZiksIG0gPSB7XG4gICAgICBzZXNzaW9uOiBfLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IHQubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IGQsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBhXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKGgsIGIpID0+IHtcbiAgICAgIF8ub25jYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGh0KFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSwgYihuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH0sIF8ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKHYpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBJYyh2LCBtKTtcbiAgICAgICAgfSBjYXRjaCAodykge1xuICAgICAgICAgIGIodyk7XG4gICAgICAgIH1cbiAgICAgIH0sIF8ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHYgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IGYudG90YWxcbiAgICAgICAgfTtcbiAgICAgICAgXy5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24odik7XG4gICAgICB9LCBfLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAodikgPT4ge1xuICAgICAgICBnKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB3ID0gYXdhaXQgVGModiwgbSk7XG4gICAgICAgICAgaCh3KTtcbiAgICAgICAgfSBjYXRjaCAodykge1xuICAgICAgICAgIGIodyk7XG4gICAgICAgIH1cbiAgICAgIH0sIF8uYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoaCkgPT4ge1xuICAgICAgdGhyb3cgWm4oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBoKSwgZyhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGhcbiAgICAgIH0pLCBoO1xuICAgIH0pO1xuICB9XG4pLCB7IGxvZ19fOiBJZSwgZXJyX186IFhlIH0gPSBJKFwiYXV0aG5ldC1nb29nbGVwYXlcIiksIEZjID0gd2UoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIHZhciBkLCBmO1xuICAgIEllKFwiSW5pdGlhbGl6aW5nIEF1dGhuZXQgR29vZ2xlUGF5IGZsb3dcIik7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBXbik7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgSWUoXCJHb29nbGUgUGF5IENQTVwiLCBuKTtcbiAgICBjb25zdCBhID0gbi5tZXRhZGF0YTtcbiAgICBpZiAoIWEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gWGUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCByO1xuICAgIGlmIChJZShcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIiksIGF3YWl0IG9yKCksICEoKGYgPSAoZCA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBkLnBheW1lbnRzKSAhPSBudWxsICYmIGYuYXBpKSlcbiAgICAgIHJldHVybiBYZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHI7XG4gICAgSWUoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgbyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IE0obyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IF8gPSBxZSh7XG4gICAgICAgIHByZWZpbGw6IHMsXG4gICAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBhLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IGEucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogYS5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgbSA9IGF3YWl0IHplKGUuYmFzZVVybCwgXyksIHsgcmVzdWx0OiB5IH0gPSBhd2FpdCBtLmlzUmVhZHlUb1BheShfKTtcbiAgICAgIGlmICgheSlcbiAgICAgICAgcmV0dXJuIEllKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIHI7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgcmV0dXJuIFhlKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgXyksIHI7XG4gICAgfVxuICAgIGNvbnN0IGMgPSBzLm1vZGUgPT09IFwic2V0dXBcIiwgbCA9IGF3YWl0IHZlKG8sIHMudG9rZW4sIGMsIHZvaWQgMCksIHUgPSBhc3luYyAoXykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgVC5hdXRob3JpemVOZXRHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5fLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IGxcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICBYZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBtKSwgZyhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IG1cbiAgICAgICAgfSksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigobSA9PSBudWxsID8gdm9pZCAwIDogbS5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IHVcbiAgICB9O1xuICB9XG4pLCBNYyA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIG0sIHksIGgsIGI7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldzogbywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyB9ID0gYSwgbCA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBXbikubWV0YWRhdGEsIHUgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGQgPSBhd2FpdCBNKHUpLCBmID0gcWUoe1xuICAgICAgcHJlZmlsbDogZCxcbiAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogbC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogbC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogbC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogbyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHNcbiAgICB9KTtcbiAgICBnKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IHIucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBkLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pO1xuICAgIGNvbnN0IF8gPSBhd2FpdCB6ZShlLmJhc2VVcmwsIGYpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB2ID0gYXdhaXQgXy5sb2FkUGF5bWVudERhdGEoZik7XG4gICAgICBJZShcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIHYpO1xuICAgICAgY29uc3QgdyA9IGlyKHQsIHYpLCBFID0gcSh3LCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4uRVxuICAgICAgfSk7XG4gICAgICBjb25zdCBDID0gKHkgPSAobSA9IHYucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBtLnRva2VuaXphdGlvbkRhdGEpID09IG51bGwgPyB2b2lkIDAgOiB5LnRva2VuO1xuICAgICAgaWYgKCFDKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IE8gPSBhd2FpdCBuZSh1LCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IEVbcC5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBFW3AuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IEVbcC5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogWihFKSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IEsoRSwgZC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBjZSgpXG4gICAgICB9KTtcbiAgICAgIEllKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIE8pO1xuICAgICAgY29uc3QgQSA9IGF3YWl0IEwodSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGQudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5HT09HTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShDKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoISgoYiA9IChoID0gQS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBoWzBdKSA9PSBudWxsID8gdm9pZCAwIDogYi5pZCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIGxlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBFLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBBLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoICh2KSB7XG4gICAgICB0aHJvdyBYZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCB2KSwgZyhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiB2XG4gICAgICB9KSwgbmV3IEVycm9yKCh2ID09IG51bGwgPyB2b2lkIDAgOiB2Lm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IExjLCBlcnJfXzogS24gfSA9IEkoXCJwb2NreXQtY2NcIiksIERjID0geiQxLm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogeiQxLnN0cmluZygpXG59KSwgeGMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gRGMuc2FmZVBhcnNlKGUpO1xuICBpZiAoIXQuc3VjY2Vzcykge1xuICAgIGNvbnN0IHIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIG4gPSBgUG9ja3l0IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YDtcbiAgICB0aHJvdyBLbihuKSwgbmV3IEVycm9yKHIpO1xuICB9XG4gIHJldHVybiB0LmRhdGE7XG59LCBRbiA9IChlKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdCA9IG5ldyBVUkwoZSA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwidmF1bHRJZFwiKTtcbiAgICBpZiAoIXQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2YXVsdCBJRCBmb3VuZCBpbiAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gTGMoYDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW1ZhdWx0IElEOiAke3R9XWApLCB0O1xuICB9IGNhdGNoICh0KSB7XG4gICAgY29uc3QgciA9IFwiRXJyb3IgdmVyaWZ5aW5nIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IEtuKHIsIGBSZXN1bHRpbmcgVVJMOiAke2V9LlxuRXJyb3I6ICR7ZWUodCl9YCksIG5ldyBFcnJvcihyKTtcbiAgfVxufSwgSHQgPSAoZSwgdCkgPT4gbmV3IFVSTChlKS5zZWFyY2hQYXJhbXMuZ2V0KHQpLCBPYyA9IChlKSA9PiAoZSA9PSBudWxsID8gdm9pZCAwIDogZVtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBVYyA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSB4Yyh0KSwgbiA9IGF3YWl0IEZuKHsgdXJsOiByW1wib3AtcG9ja3l0LTNkcy11cmxcIl0sIGJhc2VVcmw6IGUgfSk7XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIHZhdWx0X2lkOiBRbihuLmhyZWYgPz8gXCJcIiksXG4gICAgICB0cmFuc2FjdGlvbl9ubzogcltcIm9wLXBvY2t5dC10eG4tbm9cIl0sXG4gICAgICByZWZlcmVuY2Vfbm86IHJbXCJvcC1wb2NreXQtcmVmLW5vXCJdXG4gICAgfVxuICB9O1xufSwgeyBsb2dfXzogVHIgfSA9IEkoXCJzdHJpcGUtY2NcIiksIGpjID0geiQxLm9iamVjdCh7XG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogeiQxLnN0cmluZygpXG59KSwgWG4gPSBhc3luYyAoZSkgPT4ge1xuICBnKFwiM2RzX3N0cmlwZV9yZWRpcmVjdFwiLCB7XG4gICAgLi4uZVxuICB9KSwgVHIoYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3cgW0NsaWVudCBTZWNyZXQ6ICR7ZS5jbGllbnRfc2VjcmV0LnN1YnN0cmluZygwLCA4KX0uLi5dYCksIGF3YWl0IElpKGUpLCBnKFwiM2RzX3N0cmlwZV9jb21wbGV0ZVwiKSwgVHIoXCLilbAgU3RyaXBlIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcIik7XG59LCAkYyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBqYy5zYWZlUGFyc2UoZSk7XG4gIGlmICghdC5zdWNjZXNzKVxuICAgIHRocm93IG5ldyBFcnJvcihgU3RyaXBlIDNEUyBtZXRhZGF0YSBoYXMgdW5leHBlY3RlZCBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkodC5lcnJvci5lcnJvcnMpfWApO1xuICByZXR1cm4ge1xuICAgIHN0cmlwZV9wazogdC5kYXRhLnN0cmlwZV9wayxcbiAgICBjbGllbnRfc2VjcmV0OiB0LmRhdGEuY2xpZW50X3NlY3JldCxcbiAgICBzdHJpcGVfcG1faWQ6IHQuZGF0YS5zdHJpcGVfcG1faWRcbiAgfTtcbn0sIEdjID0gNCwgeyBsb2dfXzogTmUsIGVycl9fOiBQdCB9ID0gSShcInVuaWZpZWQtY2NcIiksIFZjID0gYXN5bmMgKHtcbiAgY29udGV4dDogZSxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICBub25DZGVGb3JtSW5wdXRzOiByLFxuICBmb3JtQ2FsbGJhY2tzOiBuLFxuICBjdXN0b21QYXJhbXM6IGFcbn0pID0+IHtcbiAgTmUoXCLilJwgUnVubmluZyB1bmlmaWVkIENDIGZsb3cuLi5cIiwgeyBjaGVja291dFBheW1lbnRNZXRob2Q6IHQgfSk7XG4gIGNvbnN0IG8gPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBNKG8pO1xuICBOZShg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtzLm1vZGV9XWApO1xuICBjb25zdCBjID0gcShyLCBuLmdldC5vblZhbGlkYXRpb25FcnJvciksIGwgPSB7XG4gICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBjLFxuICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sXG4gICAgICAvLyBGb3IgZGVidWdnaW5nIHB1cnBvc2VzIGluIHRoZSBjaGVja291dCBhdHRlbXB0IGxvZ3NcbiAgICAgIGRldmljZVRva2VuOiBUbigpXG4gICAgfSxcbiAgICB1c2VfdW5pZmllZF9jY19mbG93OiAhMCxcbiAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IHtcbiAgICAgIGxpbmVfaXRlbXM6IHMubGluZV9pdGVtcyxcbiAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcy5hbW91bnRfdG90YWxfYXRvbVxuICAgIH0sXG4gICAgcGF5bWVudF9yb3V0ZV9pZDogYS5wYXltZW50Um91dGVJZFxuICB9O1xuICBQdChhLCBsKSwgTmUoYOKUnCBUb2tlbml6aW5nIGNhcmQgaW5mbyBpbiBQYXJ0aWFsIFBNcyBbU2Vzc2lvbjogJHtlLmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgY29uc3QgdSA9IGF3YWl0IEVuKGEuY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZFxuICB9KTtcbiAgTG4odSwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICBjb25zdCBkID0gYXdhaXQgYm4obywgbCk7XG4gIGlmIChOZShcIuKUnCBzdGFydFBmIHJlc3VsdFwiLCBkKSwgZC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgIHJldHVybiBlbyhzLm1vZGUsIGQpO1xuICBpZiAoIWQuY2hlY2tvdXRfYXR0ZW1wdF9pZClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyBjaGVja291dCBhdHRlbXB0IElEIGZyb20gUEYgcmVzdWx0XCIpO1xuICByZXR1cm4gcWMoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgcHJlZmlsbDogcyxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zOiBsLFxuICAgIGFueUNkZUNvbm5lY3Rpb246IG8sXG4gICAgc3RhcnRQZlJlc3VsdDogZCxcbiAgICBjaGVja291dEF0dGVtcHRJZDogZC5jaGVja291dF9hdHRlbXB0X2lkXG4gIH0pO1xufSwgcWMgPSBhc3luYyAoZSkgPT4ge1xuICBjb25zdCB7XG4gICAgY29udGV4dDogdCxcbiAgICBwcmVmaWxsOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IG4sXG4gICAgY29tbW9uQ2hlY2tvdXRQYXJhbXM6IGEsXG4gICAgYW55Q2RlQ29ubmVjdGlvbjogbyxcbiAgICBzdGFydFBmUmVzdWx0OiBzLFxuICAgIGNoZWNrb3V0QXR0ZW1wdElkOiBjXG4gIH0gPSBlO1xuICBsZXQgbCA9IHM7XG4gIGZvciAobGV0IHUgPSAwOyB1IDwgR2M7IHUrKykge1xuICAgIE5lKGDilJwgUnVubmluZyBjb25maXJtIGxvb3AgaXRlcmF0aW9uICR7dX1gKSwgZyhcInVuaWZpZWRfY2NfY29uZmlybV9sb29wX2l0ZXJhdGlvblwiLCB7IGl0ZXJhdGlvbjogdSB9KTtcbiAgICBjb25zdCB7IHVzZXJBY3Rpb246IGQgfSA9IEJjKGwpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmID0gYXdhaXQgemModC5iYXNlVXJsLCBkLCByLCBuKTtcbiAgICAgIGEuZXh0cmFfbWV0YWRhdGEgPSB7XG4gICAgICAgIC4uLmEuZXh0cmFfbWV0YWRhdGEsXG4gICAgICAgIC4uLmYubWV0YWRhdGFGb3JDb25maXJtU3RlcFxuICAgICAgfSwgTmUoXCLilJwgTmV3IGV4dHJhIG1ldGFkYXRhXCIsIGEuZXh0cmFfbWV0YWRhdGEpO1xuICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgIGNvbnN0IF8gPSBlZShmKTtcbiAgICAgIFB0KGDilJwgRXJyb3IgaW4gcnVubmluZyB1c2VyIGFjdGlvbiBpbiBpdGVyYXRpb24gJHt1fS4gQ29udGludWluZyB0byBjb25maXJtIHN0ZXAuLi5gLCBfKSwgZyhcInVuaWZpZWRfY2NfdXNlcl9hY3Rpb25fZXJyb3JcIiwgeyBlcnJvcl9tZXNzYWdlOiBfLCBpdGVyYXRpb246IHUgfSk7XG4gICAgfVxuICAgIGlmIChsID0gYXdhaXQgTChvLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBjLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBhLmV4dHJhX21ldGFkYXRhXG4gICAgfSksIE5lKGDilJwgY29uZmlybVBmIHJlc3VsdCAoaXRlcmF0aW9uICR7dX0pYCwgbCksIGwuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgIHJldHVybiBlbyhyLm1vZGUsIGwpO1xuICB9XG4gIHRocm93IGcoXCJ1bmlmaWVkX2NjX3VuZXhwZWN0ZWRfYnJhbmNoXCIsIHtcbiAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbC5jaGVja291dF9hdHRlbXB0X2lkLFxuICAgIGNvbmZpcm1QRlJlc3VsdDogbFxuICB9KSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZXJyb3IsIHBsZWFzZSB0cnkgYW5vdGhlciBwYXltZW50IG1ldGhvZFwiKTtcbn0sIHpjID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHtcbiAgaWYgKHQuX3VuaWZpZWRfY2NfYWN0aW9uX25hbWUgPT09IFwiM0RTX1JFUVVJUkVEXCIpIHtcbiAgICBpZiAodC50eXBlID09PSBcInN0cmlwZV8zZHNcIilcbiAgICAgIHJldHVybiBhd2FpdCBYbigkYyh0KSksIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICBpZiAoT24odCkpXG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFpcndhbGxleDogYXdhaXQgVW4oZSwgdCkgfSB9O1xuICAgIGlmIChWbih0KSlcbiAgICAgIHJldHVybiB7IG1ldGFkYXRhRm9yQ29uZmlybVN0ZXA6IHsgYWR5ZW46IGF3YWl0IHFuKFxuICAgICAgICBuW3AuQ09VTlRSWV0sXG4gICAgICAgIHQsXG4gICAgICAgIHIubG9jYWxlXG4gICAgICApIH0gfTtcbiAgICBpZiAoSGModCkpXG4gICAgICByZXR1cm4gYXdhaXQgcm8oeyByZXF1aXJlZF91c2VyX2FjdGlvbnM6IFt0XSB9LCBlKSwgeyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7fSB9O1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIDNEUyB1c2VyIGFjdGlvbjogJHtKU09OLnN0cmluZ2lmeSh0KX1gKTtcbiAgfSBlbHNlXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlcXVpcmVkIHVzZXIgYWN0aW9uOiAke0pTT04uc3RyaW5naWZ5KHQpfWApO1xufSwgSGMgPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0byhbZV0pLCAhMDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuICExO1xuICB9XG59LCBCYyA9IChlKSA9PiB7XG4gIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykge1xuICAgIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggPT09IDApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gICAgaWYgKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCA+IDEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBtdWx0aXBsZSByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIH0gZWxzZSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIGNvbnN0IHQgPSBzYS5zYWZlUGFyc2UoZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xuICBpZiAoIXQuc3VjY2VzcylcbiAgICB0aHJvdyBQdChcIlVzZXIgYWN0aW9uIHJhdyBwYXlsb2FkXCIsIGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKSwgUHQoXCJQYXJzaW5nIGVycm9yXCIsIHQuZXJyb3IpLCBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBzY2hlbWEgb2YgdXNlciBhY3Rpb24gcGF5bG9hZCBpcyBub3QgdmFsaWRcIik7XG4gIHJldHVybiB7XG4gICAgdXNlckFjdGlvbjogdC5kYXRhXG4gIH07XG59LCBlbyA9IChlLCB0KSA9PiB7XG4gIHZhciByO1xuICBpZiAoZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgY29uc3QgbiA9IHQuY2NfcG1faWQgPz8gKChyID0gdC5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiByWzBdLmlkKTtcbiAgICBpZiAoIW4pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyBDQyBQTSBJRCBvciBwYXltZW50X21ldGhvZHMgZm91bmQgaW4gUEYgcmVzdWx0XCIpO1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICByZXN1bHQ6IHtcbiAgICAgICAgcGF5bWVudF9tZXRob2RfaWQ6IG5cbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGlmICghdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gY2hlY2tvdXQgc3VjY2VzcyByZXNwb25zZSBmcm9tIHN0YXJ0UEZcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgIHJlc3VsdDogdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgfTtcbiAgfVxufSwgeyBsb2dfXzogTiwgZXJyX186IFJyIH0gPSBJKFwiY29tbW9uLWNjXCIpO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBZYyA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIG0sIHk7XG4gICAgTihcIuKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uXCIsIHsgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0IH0pO1xuICAgIGNvbnN0IG8gPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBNKG8pO1xuICAgIGcoXCJjb21tb25fY2NfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIC4uLnQsXG4gICAgICBwcmVmaWxsOiBzXG4gICAgfSk7XG4gICAgY29uc3QgYyA9ICgobSA9IHMuZmluYWxfZmVhdHVyZV9yb2xsb3V0X3NldHRpbmdzKSA9PSBudWxsID8gdm9pZCAwIDogbS51bmlmaWVkX2NjKSA/PyAwO1xuICAgIE4oYOKUnCBVbmlmaWVkIENDIHJvbGxvdXQ6ICR7TWF0aC5yb3VuZChjICogMTAwKX0lYCk7XG4gICAgY29uc3QgbCA9IE1hdGgucmFuZG9tKCksIHUgPSBsIDwgYywgZCA9IHtcbiAgICAgIHJvbGw6IGwsXG4gICAgICB1bmlmaWVkQ0NSb2xsb3V0UmF0aW86IGMsXG4gICAgICB1c2VVbmlmaWVkQ0NGbG93OiB1XG4gICAgfTtcbiAgICBpZiAodSlcbiAgICAgIHJldHVybiBOKGDilJwgUGlja2VkIHVuaWZpZWQgQ0MgZmxvdyAoJHtsfSB2cyAke2N9KWApLCBnKFwidW5pZmllZF9jY19mbG93X3BpY2tlZFwiLCBkKSwgVmMoe1xuICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgICAgIGN1c3RvbVBhcmFtczogYSxcbiAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICB9KTtcbiAgICBOKGDilJwgUGlja2VkIGxlZ2FjeSBDQyBmbG93ICgke2x9IHZzICR7Y30pYCksIGcoXCJsZWdhY3lfY2NfZmxvd19waWNrZWRcIiwgZCksIE4oYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cy5tb2RlfV1gKTtcbiAgICBjb25zdCBmID0gcShcbiAgICAgIHIsXG4gICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHMuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICApO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4uZlxuICAgIH0pO1xuICAgIGNvbnN0IF8gPSB7XG4gICAgICBzZXNzaW9uX2lkOiBlLmVsZW1lbnRzU2Vzc2lvbklkLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBmLFxuICAgICAgZXh0cmFfbWV0YWRhdGE6IHtcbiAgICAgICAgb3JpZ2luOiB3aW5kb3cubG9jYXRpb24ub3JpZ2luXG4gICAgICB9LFxuICAgICAgdXNlX3VuaWZpZWRfY2NfZmxvdzogITEsXG4gICAgICBwYXltZW50X3JvdXRlX2lkOiBhLnBheW1lbnRSb3V0ZUlkLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGNlKClcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBOKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2UuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgY29uc3QgaCA9IGF3YWl0IEVuKGEuY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgICAgIHNlc3Npb25faWQ6IGUuZWxlbWVudHNTZXNzaW9uSWRcbiAgICAgIH0pO1xuICAgICAgaWYgKExuKGgsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgcy5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgTihg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHtzLnRva2VufV1gKTtcbiAgICAgICAgY29uc3QgYiA9IGF3YWl0IGdzKG8sIF8pO1xuICAgICAgICByZXR1cm4gTihg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke2IucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBiIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBOKGDilJwgSW5pdGlhbCBjaGVja291dCBmbG93LiBDaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtlLmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgICAgY29uc3QgYiA9IGF3YWl0IFNyKG8sIF8pO1xuICAgICAgICByZXR1cm4gTihcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYiB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgIGlmIChoIGluc3RhbmNlb2Ygdm4gJiYgaC5vcmlnaW5hbEVycm9yTWVzc2FnZS5pbmNsdWRlcyhcIjNEU19SRVFVSVJFRFwiKSkge1xuICAgICAgICBOKFwi4pScIENhcmQgcmVxdWlyZXMgM0RTLCBzdGFydGluZyBub24tbGVnYWN5IHBheW1lbnQgZmxvd1wiKSwgTihcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBoLnJlc3BvbnNlLmhlYWRlcnMpLCBnKFwiM2RzX3JlcXVpcmVkXCIsIHtcbiAgICAgICAgICAuLi50LFxuICAgICAgICAgIC4uLmgucmVzcG9uc2UuaGVhZGVyc1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYiA9IGgucmVzcG9uc2UuaGVhZGVycyA/PyB7fTtcbiAgICAgICAgXCJvcC1leGlzdGluZy1jYy1wbS1pZFwiIGluIGIgJiYgKF8uZXhpc3RpbmdfY2NfcG1faWQgPSBiW1wib3AtZXhpc3RpbmctY2MtcG0taWRcIl0sIE4oYOKUnCBFeGlzdGluZyBDQyBQTSBJRDogJHtfLmV4aXN0aW5nX2NjX3BtX2lkfWApKTtcbiAgICAgICAgY29uc3QgdiA9IE9jKGgucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgTihcIuKUnCBQb2NreXQgM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggUG9ja3l0IDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCBEID0gYXdhaXQgVWMoZS5iYXNlVXJsLCBoLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIF8uZXh0cmFfbWV0YWRhdGEucG9ja3l0ID0gRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoT24oaC5yZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICAgIE4oXCLilJwgQWlyd2FsbGV4IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFpcndhbGxleCAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgRCA9IGF3YWl0IFVuKGUuYmFzZVVybCwgaC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBfLmV4dHJhX21ldGFkYXRhLmFpcndhbGxleCA9IEQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFZuKGgucmVzcG9uc2UuaGVhZGVycykpIHtcbiAgICAgICAgICBOKFwi4pScIEFkeWVuIDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFkeWVuIDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCBEID0gYXdhaXQgcW4oXG4gICAgICAgICAgICByW3AuQ09VTlRSWV0sXG4gICAgICAgICAgICBoLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgICBzLmxvY2FsZVxuICAgICAgICAgICk7XG4gICAgICAgICAgXy5leHRyYV9tZXRhZGF0YS5hZHllbiA9IEQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgQyA9IGF3YWl0IGJuKG8sIF8pO1xuICAgICAgICBOKFwi4pScIFN0YXJ0IHBheW1lbnQgZmxvdyByZXN1bHQ6XCIsIEMpO1xuICAgICAgICBjb25zdCBPID0gKCh5ID0gaC5yZXNwb25zZS5oZWFkZXJzKSA9PSBudWxsID8gdm9pZCAwIDogeVtcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0pICE9PSBcInRydWVcIjtcbiAgICAgICAgdiA/IE4oXCLilJwgUHJlLXN0YXJ0IDNEUyBpcyBzdWNjZXNzZnVsLCBvdGhlciAzRFMgZmxvd3Mgd2lsbCBiZSBza2lwcGVkLlwiKSA6IE8gPyAoTihcIuKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3dcIiksIGF3YWl0IFhuKEpjKEMpKSkgOiAoTihcIuKUnCBVc2luZyBjb21tb24gM0RTIGZsb3dcIiksIGF3YWl0IHJvKEMsIGUuYmFzZVVybCkpO1xuICAgICAgICBjb25zdCBBID0gQy5jY19wbV9pZDtcbiAgICAgICAgaWYgKHMubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgICAgTihg4pScIENvbmZpcm1pbmcgcGF5bWVudCBmbG93IFtjY19wbV9pZDogJHtBfV1gKTtcbiAgICAgICAgICBjb25zdCBEID0gYXdhaXQgTChvLCB7XG4gICAgICAgICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogQVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIE4oXCLilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpcIiwgRCk7XG4gICAgICAgICAgY29uc3QgUSA9IHV0KEQpO1xuICAgICAgICAgIHJldHVybiBOKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7US5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IFEgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBOKGDilJwgQ2hlY2tpbmcgb3V0IGFmdGVyIDNEUyBmbG93IFtGbG93OiAke08gPyBcImxlZ2FjeVwiIDogXCJuZXdcIn1dYCk7XG4gICAgICAgICAgY29uc3QgRCA9IGF3YWl0IFNyKG8sIHtcbiAgICAgICAgICAgIC4uLl8sXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogQSxcbiAgICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IE9cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gTihcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogRCB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBScihcIuKVsCBFcnJvciBjaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERVwiKSwgUnIoaCksIGg7XG4gICAgfVxuICB9XG4pLCBKYyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChyKSA9PiByLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKTtcbiAgaWYgKCF0KVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHN0cmlwZSAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gYmkucGFyc2UodCk7XG59LCBXYyA9IFtcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIiwgXCJhZHllblwiXSwgdG8gPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZS5maW5kKChyKSA9PiBXYy5pbmNsdWRlcyhyLnR5cGUpKTtcbiAgaWYgKCF0KVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbW1vbiAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4geG8ucGFyc2UodCk7XG59LCBybyA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSB0byhlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucyk7XG4gIGlmIChyLnJlZGlyZWN0X3VybCA9PT0gXCIzRFNfQ09NUExFVEVcIikge1xuICAgIE4oXCLilJwgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKSwgZyhcIjNkc19jb21wbGV0ZVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgTihg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke3IucmVkaXJlY3RfdXJsfV1gKSwgZyhcIjNkc19yZWRpcmVjdFwiLCB7XG4gICAgLi4uclxuICB9KTtcbiAgY29uc3QgeyBzdGF0dXM6IG4gfSA9IGF3YWl0IGJlKHsgdXJsOiByLnJlZGlyZWN0X3VybCwgYmFzZVVybDogdCB9KTtcbiAgaWYgKE4oYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke259XWApLCBuID09PSBGLkNBTkNFTExFRClcbiAgICB0aHJvdyBnKFwiM2RzX2NhbmNlbGxlZFwiKSwgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChuID09PSBGLkZBSUxVUkUpXG4gICAgdGhyb3cgZyhcIjNkc19mYWlsdXJlXCIpLCBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgZyhcImNvbW1vbl8zZHNfY29tcGxldGVkXCIpO1xufSwgWmMgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIHsgbG9nX186IEosIGVycl9fOiBLYyB9ID0gSShcImxvb3AtY3J5cHRvXCIpLCBRYyA9IHdlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlIH0pID0+IHtcbiAgICBKKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBMb29wIENyeXB0by4uLlwiKTtcbiAgICBjb25zdCB0ID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFpjKTtcbiAgICBKKGBjaGVja291dFBheW1lbnRNZXRob2Q6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCksIEooXCJTdGFydGluZyBMb29wIENyeXB0byBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHIgPSBhd2FpdCBNKGUuYW55Q2RlQ29ubmVjdGlvbiksIG4gPSByLm1vZGUgPT09IFwic2V0dXBcIiwgYSA9IGF3YWl0IFJ0KGUuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHRcbiAgICB9KSwgbyA9IGF3YWl0IHZlKFxuICAgICAgZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgci50b2tlbixcbiAgICAgIG4sXG4gICAgICB2b2lkIDBcbiAgICApO1xuICAgIGlmICghbiAmJiAhdC5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llcy5pbmNsdWRlcyhyLmN1cnJlbmN5KSlcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgQ3VycmVuY3kgJHtyLmN1cnJlbmN5fSBub3QgZW5hYmxlZCBmb3IgTG9vcC4gRW5hYmxlZCBjdXJyZW5jaWVzOiAke3QubWV0YWRhdGEuc3VwcG9ydGVkX2N1cnJlbmNpZXN9YFxuICAgICAgKTtcbiAgICBpZiAoIWEgfHwgIWEubmV4dF9hY3Rpb25fbWV0YWRhdGEpXG4gICAgICB0aHJvdyBFcnJvcihcIkZhaWxlZCB0byBmZXRjaCBuZWNlc3Nhcnkgc2V0dXAgZGF0YSBmb3IgTG9vcFwiKTtcbiAgICBjb25zdCBzID0gYS5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBsZXQgYyA9IHMuYXV0aG9yaXphdGlvbl9hbW91bnQsIGwgPSBzLm1pbl9hdXRob3JpemF0aW9uX2Ftb3VudDtcbiAgICBjb25zdCB1ID0gcy5hbGxvd19jdXN0b21lcl90b19jaG9vc2VfYXV0aDtcbiAgICBsZXQgZDtcbiAgICBuID8gKGQgPSAwLCBjID0gTWF0aC5tYXgoYywgbCkpIDogKGQgPSAobyA/IG8uYW1vdW50QXRvbSA6IHIuYW1vdW50X3RvdGFsX2F0b20pICogcy50b2tlbl9wcmljZSwgbCA9IE1hdGgubWF4KGwsIGQpLCBjID0gTWF0aC5tYXgoYywgbCkpO1xuICAgIGNvbnN0IGYgPSBkLCBfID0gdjQoKSwgbSA9IHtcbiAgICAgIHBheW1lbnRVc2RBbW91bnQ6IGYsXG4gICAgICBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50OiBjLFxuICAgICAgY3VzdG9tZXJSZWZJZDogXyxcbiAgICAgIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQ6IGwsXG4gICAgICBhbGxvd0N1c3RvbWVyVG9DaG9vc2VBdXRoOiB1XG4gICAgfSwgeSA9IHtcbiAgICAgIGFwaUtleTogdC5tZXRhZGF0YS5hcGlfdG9rZW4sXG4gICAgICBlbnRpdHlJZDogdC5tZXRhZGF0YS5lbnRpdHlfaWQsXG4gICAgICBtZXJjaGFudElkOiB0Lm1ldGFkYXRhLm1lcmNoYW50X2lkLFxuICAgICAgZW52aXJvbm1lbnQ6IHQubWV0YWRhdGEuZW52aXJvbm1lbnRcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICB3aWRnZXRQcm9wczogbSxcbiAgICAgIGluaXRMb29wQ29ubmVjdFByb3BzOiB5XG4gICAgfTtcbiAgfVxuKSwgWGMgPSBIKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIEooXCJSdW5uaW5nIExvb3AgZmxvdy4uLlwiKSwgSihcImNvbnRleHRcIiwgZSksIEooXCJjaGVja291dFBheW1lbnRNZXRob2RcIiwgdCksIEooXCJub25DZGVGb3JtSW5wdXRzXCIsIHIpLCBKKFwiZmxvd0NhbGxiYWNrc1wiLCBuKSwgSihcImN1c3RvbVBhcmFtc1wiLCBhKTtcbiAgICBjb25zdCBvID0gYXdhaXQgTShlLmFueUNkZUNvbm5lY3Rpb24pO1xuICAgIEooYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7by5tb2RlfV1gKTtcbiAgICBjb25zdCBzID0gcShcbiAgICAgIHIsXG4gICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIG8uY2hlY2tvdXRfc2V0dGluZ3NcbiAgICApLCBjID0gZS5hbnlDZGVDb25uZWN0aW9uLCBsID0gby5tb2RlICE9PSBcInNldHVwXCIsIHUgPSBucihzLCBvLmNoZWNrb3V0X3NldHRpbmdzKTtcbiAgICBpZiAoIWEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQuIEZhaWxlZCB0byBwcm9wZXJseSBzdWJtaXQgZm9ybSBkYXRhLlwiKTtcbiAgICBpZiAoIWEuc3VjY2VzcylcbiAgICAgIHRocm93IGcoXCJsb29wX3BheV9mbG93X2ZhaWx1cmVcIiwgYSksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZC4gU3VjY2VzcyBpcyBub3QgdHJ1ZS5cIik7XG4gICAgY29uc3QgZCA9IGF3YWl0IG5lKGUuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgLi4udSxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogbCxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogbCA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogby5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IG8uYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDAsXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogY2UoKVxuICAgIH0pLCBmID0gYXdhaXQgTChjLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IG8udG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogYS5wYXltZW50TWV0aG9kLnBheW1lbnRNZXRob2RJZCxcbiAgICAgIC8vIE5PVEU6IHdlIGRvIGhhdmUgdGhlIGNoZWNrb3V0IGF0dGVtcHQgaWQgaGVyZSBldmVuIGlmIGl0cyBhIHNldHVwLCBidXQgZm9yIG5vdyB3ZSBkb24ndCBpbmNsdWRlIGl0XG4gICAgICAvLyBiZWNhdXNlIHdlIGRvbid0IGhhdmUgY2hlY2tvdXQgYXR0ZW1wdCBzdXBwb3J0IGZvciBzZXR1cCBpbnRlbnRzLlxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbCA/IGQuY2hlY2tvdXRfYXR0ZW1wdF9pZCA6IHZvaWQgMCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBsb29wX2N1c3RvbWVyOiBhLmN1c3RvbWVyLFxuICAgICAgICBsb29wX3BheW1lbnRfbWV0aG9kOiBhLnBheW1lbnRNZXRob2QsXG4gICAgICAgIGxvb3Bfc3VjY2VzczogYS5zdWNjZXNzXG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKEooYENvbmZpcm0gcmVzdWx0OiAke2Z9YCksIG8ubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBKKFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKSwgSihcIuKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OlwiLCBmKTtcbiAgICAgIGNvbnN0IF8gPSB1dChmKTtcbiAgICAgIHJldHVybiBKKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Xy5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IF8gfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKEooXCJEb2luZyBjaGVja291dC4uLlwiKSwgIWYucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICAgIHRocm93IEtjKFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgZiksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IGYucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICAgIH07XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBrZSwgZXJyX186IGVsIH0gPSBJKFwicGF5cGFsXCIpLCBubyA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHsgY2xpZW50X2lkOiB6JDEuc3RyaW5nKCkgfSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKVxufSksIHRsID0gYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gIGNvbnN0IHIgPSB6KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgbm8pO1xuICBpZiAoIXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUGF5UGFsIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgcmV0dXJuIHtcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICBzdGFydEZsb3c6ICgpID0+IFQucGF5cGFsLnJ1bih7XG4gICAgICBjb250ZXh0OiBlLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczoge30gfVxuICAgIH0pXG4gIH07XG59LCBybCA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGtlKFwiUnVubmluZyBQYXlQYWwgZmxvdy4uLlwiKTtcbiAgICAgIGNvbnN0IG8gPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBNKG8pLCB7IGlzQW5vbnltb3VzOiBjLCB1c2VSZWRpcmVjdEZsb3c6IGwgfSA9IGEuc2V0dGluZ3MgPz8ge307XG4gICAgICBrZShcIlZlcmlmeWluZyBDUE0uLi5cIik7XG4gICAgICBjb25zdCB1ID0gbm8ucGFyc2Uocik7XG4gICAgICBrZShcIuKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gICAgICBjb25zdCBkID0gcSh0LCBuLmdldC5vblZhbGlkYXRpb25FcnJvciwge1xuICAgICAgICAuLi5jID8gTHMoKSA6IHZvaWQgMCxcbiAgICAgICAgLi4ucy5jaGVja291dF9zZXR0aW5nc1xuICAgICAgfSksIGYgPSBucihkLCBzLmNoZWNrb3V0X3NldHRpbmdzKTtcbiAgICAgIGtlKGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHtzLm1vZGV9YCk7XG4gICAgICBjb25zdCBfID0gdjQoKSwgbSA9IHMubW9kZSAhPT0gXCJzZXR1cFwiLCB5ID0ge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB1LnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdSxcbiAgICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBtLFxuICAgICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IG0gPyB7XG4gICAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgICBsaW5lX2l0ZW1zOiBzLmxpbmVfaXRlbXMsXG4gICAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBzLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICAgIH0gOiB2b2lkIDAsXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHVzZV9wYXlwYWxfcmVkaXJlY3RfZmxvdzogbCxcbiAgICAgICAgICBmcm9udGVuZF90b2tlbl9mb3JfcmVkaXJlY3RfZmxvdzogX1xuICAgICAgICB9LFxuICAgICAgICAuLi5mXG4gICAgICB9LCBoID0gbmV3IFVSTChcIi9hcHAvcHJlLWFjdGlvbi9zdGFydC9cIiwgZS5iYXNlVXJsKS50b1N0cmluZygpLCBiID0gYnRvYShKU09OLnN0cmluZ2lmeSh5KSksIHYgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgc3Q6IHMudG9rZW4sXG4gICAgICAgIHI6IGJcbiAgICAgIH0pLCB3ID0gYCR7aH0/JHt2LnRvU3RyaW5nKCl9YDtcbiAgICAgIGlmIChsKVxuICAgICAgICB0aHJvdyBrZShcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKSwgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB3LCBhd2FpdCBUdCgyMCAqIDFlMyksIG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgY29uc3QgRSA9IGF3YWl0IE1uKFxuICAgICAgICBcIlBheVBhbFwiLFxuICAgICAgICBvLFxuICAgICAgICBfLFxuICAgICAgICB3XG4gICAgICApO1xuICAgICAga2UoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgRSk7XG4gICAgICBjb25zdCBDID0gSHQoRS5ocmVmLCBcImNhdHRcIiksIE8gPSBIdChFLmhyZWYsIFwiYXBwcm92YWxfc2Vzc2lvbl9pZFwiKSwgQSA9IGF3YWl0IEwobywge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG0gPyBDIDogdm9pZCAwLFxuICAgICAgICB0aGVpcl9wbV9pZDogbSA/IE8gOiB2b2lkIDBcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGtlKFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIEEpLCBsZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJwYXlwYWxcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogbyxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB1LFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IGQsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IEEsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogbVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAobykge1xuICAgICAgdGhyb3cgZWwoXCJQYXlQYWwgcGF5bWVudCBlcnJvclwiLCBvKSwgZyhcImNoZWNrb3V0X2Vycm9yXCIsIHsgcGF5bWVudF9tZXRob2Q6IFwicGF5cGFsXCIsIGVycm9yOiBvIH0pLCBuZXcgRXJyb3IoKG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgeyBsb2dfXzogZGUsIGVycl9fOiBOciB9ID0gSShcInBvY2t5dC1wYXlwYWxcIiksIG9vID0geiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHokMS5zdHJpbmcoKSxcbiAgICB2ZXJpZnlfdG9rZW46IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBubCA9IGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICBjb25zdCByID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIG9vKTtcbiAgaWYgKCFyKVxuICAgIHRocm93IG5ldyBFcnJvcihcIlBvY2t5dCBQYXlQYWwgQ1BNIG5vdCBmb3VuZCBpbiBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzXCIpO1xuICByZXR1cm4ge1xuICAgIGlzTG9hZGluZzogITEsXG4gICAgaXNBdmFpbGFibGU6ICEwLFxuICAgIHN0YXJ0RmxvdzogKCkgPT4gVC5wb2NreXRQYXlwYWwucnVuKHtcbiAgICAgIGNvbnRleHQ6IGUsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiB7fSB9XG4gICAgfSlcbiAgfTtcbn0sIG9sID0gSChcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBhXG4gIH0pID0+IHtcbiAgICB2YXIgQSwgRDtcbiAgICBkZShcIlJ1bm5pbmcgUG9ja3l0IFBheXBhbCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IG8gPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBNKG8pO1xuICAgIGRlKFwiVmVyaWZ5aW5nIENQTS4uLlwiKTtcbiAgICBjb25zdCBjID0gb28ucGFyc2UodCk7XG4gICAgZGUoXCLilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICAgIGNvbnN0IGwgPSBhID09IG51bGwgPyB2b2lkIDAgOiBhLnNldHRpbmdzLCB1ID0gcShcbiAgICAgIHIsXG4gICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIGwgPT0gbnVsbCA/IHZvaWQgMCA6IGwuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKSwgZCA9IG5yKHUsIHMuY2hlY2tvdXRfc2V0dGluZ3MpO1xuICAgIGRlKGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHtzLm1vZGV9YCk7XG4gICAgY29uc3QgZiA9IHY0KCksIF8gPSBzLm1vZGUgIT09IFwic2V0dXBcIiwgbSA9IHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGMucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogYyxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogXyxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogXyA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogcy5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHMuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDAsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlX3BheXBhbF9yZWRpcmVjdF9mbG93OiAhISgoQSA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuc2V0dGluZ3MpICE9IG51bGwgJiYgQS51c2VSZWRpcmVjdEZsb3cpLFxuICAgICAgICBmcm9udGVuZF90b2tlbl9mb3JfcmVkaXJlY3RfZmxvdzogZlxuICAgICAgfSxcbiAgICAgIC4uLmRcbiAgICB9LCB5ID0gbmV3IFVSTChcIi9hcHAvcHJlLWFjdGlvbi9zdGFydC9cIiwgZS5iYXNlVXJsKS50b1N0cmluZygpLCBoID0gYnRvYShKU09OLnN0cmluZ2lmeShtKSksIGIgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgIHN0OiBzLnRva2VuLFxuICAgICAgcjogaFxuICAgIH0pLCB2ID0gYCR7eX0/JHtiLnRvU3RyaW5nKCl9YDtcbiAgICBpZiAoKEQgPSBhID09IG51bGwgPyB2b2lkIDAgOiBhLnNldHRpbmdzKSAhPSBudWxsICYmIEQudXNlUmVkaXJlY3RGbG93KVxuICAgICAgdGhyb3cgZGUoXCJTdGFydGluZyByZWRpcmVjdCBtb2RlIGZvciBQYXlQYWwuLi5cIiksIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdiwgYXdhaXQgVHQoMjAgKiAxZTMpLCBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICBkZShcIlN0YXJ0aW5nIHBvcHVwIG1vZGUgZm9yIFBheVBhbC4uLlwiKSwgZGUoXCJPcGVuaW5nIHBheXBhbCBpZnJhbWUuLi5cIik7XG4gICAgY29uc3QgdyA9IGF3YWl0IE1uKFxuICAgICAgXCJQYXlQYWxcIixcbiAgICAgIG8sXG4gICAgICBmLFxuICAgICAgdlxuICAgICk7XG4gICAgZGUoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgdyk7XG4gICAgY29uc3QgRSA9IFFuKHcuaHJlZiksIEMgPSBIdCh3LmhyZWYsIFwiY2F0dFwiKTtcbiAgICBpZiAoIUMpXG4gICAgICB0aHJvdyBOcihcIkNoZWNrb3V0IGF0dGVtcHQgSUQgbm90IGZvdW5kIGluIHJlZGlyZWN0IFVSTDpcIiwgdy5ocmVmKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMXCIpO1xuICAgIGRlKGBDb25maXJtaW5nIHBheW1lbnQgZmxvdyB1c2luZyB2YXVsdCBJRCAke0V9YCk7XG4gICAgY29uc3QgTyA9IGF3YWl0IEwobywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBzLnRva2VuLFxuICAgICAgdGhlaXJfcG1faWQ6IEUsXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBfID8gQyA6IHZvaWQgMFxuICAgIH0pO1xuICAgIGlmIChkZShcIkNvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdFwiLCBPKSwgcy5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIHBheW1lbnRfbWV0aG9kX2lkOiBPLnBheW1lbnRfbWV0aG9kc1swXS5pZFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIGlmICghTy5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgIHRocm93IE5yKFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgTyksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICByZXN1bHQ6IE8ucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICB9O1xuICB9XG4pLCBGciA9IFwib2pzLXN0cmlwZS1saW5rLWJ0blwiLCB7IGxvZ19fOiBHLCBlcnJfXzogYWwgfSA9IEkoXCJzdHJpcGUtbGlua1wiKSwgaWwgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgc2wgPSB6JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKSwgY2wgPSB3ZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgY29uc3QgciA9IGUuY3VzdG9tSW5pdFBhcmFtcy5zdHJpcGVMaW5rO1xuICAgIEcoXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBMaW5rLi4uXCIpO1xuICAgIGNvbnN0IG4gPSB6KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgaWwpO1xuICAgIEcoXCJTdGFydGluZyBzdHJpcGUgbGluayBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGEgPSBlLmFueUNkZUNvbm5lY3Rpb24sIG8gPSBhd2FpdCBNKGEpLCBzID0gby5tb2RlID09PSBcInNldHVwXCI7XG4gICAgRyhcIkNyZWF0aW5nIHN0cmlwZSBlbGVtZW50cy4uLlwiKTtcbiAgICBjb25zdCBjID0gYXdhaXQgdmUoYSwgby50b2tlbiwgcywgdm9pZCAwKSwgeyBlbGVtZW50czogbCwgc3RyaXBlOiB1IH0gPSBhd2FpdCBTaShuLm1ldGFkYXRhLnN0cmlwZV9waywge1xuICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgY3VycmVuY3k6IGMuY3VycmVuY3ksXG4gICAgICBzZXR1cF9mdXR1cmVfdXNhZ2U6IFwib2ZmX3Nlc3Npb25cIixcbiAgICAgIHBheW1lbnRNZXRob2RDcmVhdGlvbjogXCJtYW51YWxcIlxuICAgIH0pO1xuICAgIEcoXCJDcmVhdGluZyBleHByZXNzIGNoZWNrb3V0Li4uXCIpO1xuICAgIGNvbnN0IGQgPSBsLmNyZWF0ZShcImV4cHJlc3NDaGVja291dFwiLCB7XG4gICAgICBidXR0b25IZWlnaHQ6IHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuYnV0dG9uSGVpZ2h0LFxuICAgICAgcGF5bWVudE1ldGhvZHM6IHtcbiAgICAgICAgYW1hem9uUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGFwcGxlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGdvb2dsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBwYXlwYWw6IFwibmV2ZXJcIlxuICAgICAgfVxuICAgIH0pLCBmID0gKCkgPT4ge1xuICAgICAgZC5tb3VudChgIyR7RnJ9YCk7XG4gICAgfSwgXyA9ICgpID0+IHtcbiAgICAgIGQudW5tb3VudCgpO1xuICAgIH07XG4gICAgcmV0dXJuIHIgIT0gbnVsbCAmJiByLmRvTm90TW91bnRPbkluaXQgPyBHKFwiTk9UIG1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbiAoZG9Ob3RNb3VudE9uSW5pdCBpcyB0cnVlKVwiKSA6IChHKFwiTW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uLi4uXCIpLCBmKCkpLCBkLm9uKFwiY2xpY2tcIiwgYXN5bmMgKG0pID0+IHtcbiAgICAgIGlmIChHKFwiU3RyaXBlIExpbmsgYnV0dG9uIGNsaWNrZWRcIiksIHIgIT0gbnVsbCAmJiByLm92ZXJyaWRlTGlua1N1Ym1pdCAmJiAhYXdhaXQgci5vdmVycmlkZUxpbmtTdWJtaXQoKSkge1xuICAgICAgICBHKFwiU3RyaXBlIExpbmsgc3VibWl0IGFib3J0ZWQgYnkgb3ZlcnJpZGVMaW5rU3VibWl0XCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBtLnJlc29sdmUoKTtcbiAgICB9KSwgZC5vbihcImNvbmZpcm1cIiwgYXN5bmMgKG0pID0+IHtcbiAgICAgIEcoXCJTdHJpcGUgTGluayB3aW5kb3cgY29uZmlybWVkXCIsIG0pO1xuICAgICAgY29uc3QgeSA9IGF3YWl0IHUuY3JlYXRlUGF5bWVudE1ldGhvZCh7XG4gICAgICAgIGVsZW1lbnRzOiBsLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBiaWxsaW5nX2RldGFpbHM6IG0uYmlsbGluZ0RldGFpbHNcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB5LmVycm9yID8gKGFsKFwiZXJyb3JcIiwgeS5lcnJvciksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcih5LmVycm9yLm1lc3NhZ2UgPz8gXCJTdHJpcGUgTGluayB1bmtub3duIGVycm9yXCIpKSA6IChHKFwicGF5bWVudE1ldGhvZFwiLCB5LnBheW1lbnRNZXRob2QpLCBULnN0cmlwZUxpbmsucnVuKHtcbiAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgIGN1c3RvbVBhcmFtczogeyBzdHJpcGVQTTogeS5wYXltZW50TWV0aG9kIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6ICEwIH1cbiAgICAgIH0pKTtcbiAgICB9KSwge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBtb3VudEJ1dHRvbjogZixcbiAgICAgICAgZGlzbW91bnRCdXR0b246IF8sXG4gICAgICAgIHdhaXRGb3JCdXR0b25Ub01vdW50OiBhc3luYyAoKSA9PiBhd2FpdCBkbChGcilcbiAgICAgIH1cbiAgICB9O1xuICB9XG4pLCBsbCA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgRyhcIlJ1bm5pbmcgU3RyaXBlIExpbmsgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBvID0gZS5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgTShvKTtcbiAgICBHKFwiTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLlwiKTtcbiAgICBjb25zdCBjID0gdWwociwgYS5zdHJpcGVQTSksIGwgPSBxKGMsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLmxcbiAgICB9KSwgRyhcIlN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLlwiKTtcbiAgICBjb25zdCB1ID0gYXdhaXQgbmUobywge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IGEuc3RyaXBlUE0uaWQsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGxbcC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbFtwLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbFtwLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogWihsKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBLKGwsIHMuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGNlKClcbiAgICB9KTtcbiAgICBHKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHUpO1xuICAgIGNvbnN0IGYgPSBzbC5wYXJzZSh1LnJlcXVpcmVkX3VzZXJfYWN0aW9ucylbMF0ub3VyX2V4aXN0aW5nX3BtX2lkO1xuICAgIGlmIChzLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgRyhcIkRvaW5nIHBheW1lbnQgc2V0dXAuLi5cIik7XG4gICAgICBjb25zdCBfID0gYXdhaXQgTChvLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcy50b2tlbixcbiAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGZcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IHV0KF8pIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIEcoXCJEb2luZyBjaGVja291dC4uLlwiKTtcbiAgICAgIGNvbnN0IF8gPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcy50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IHQucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IGxbcC5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IGxbcC5GSVJTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfbGFzdF9uYW1lOiBsW3AuTEFTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfYWRkcmVzczogWihsKSxcbiAgICAgICAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogSyhsLCBzLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IGxbcC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IHMubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHMuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBycihvLCBfKSB9O1xuICAgIH1cbiAgfVxuKSwgdWwgPSAoZSwgdCkgPT4ge1xuICB2YXIgbCwgdSwgZCwgZiwgXztcbiAgY29uc3QgciA9IHsgLi4uZSB9LCBbbiwgLi4uYV0gPSAoKHUgPSAobCA9IHQuYmlsbGluZ19kZXRhaWxzLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBsLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IHUuc3BsaXQoL1xccysvKSkgPz8gW10sIG8gPSBhLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgcltwLkVNQUlMXSA9IHJbcC5FTUFJTF0gfHwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgKChkID0gdC5saW5rKSA9PSBudWxsID8gdm9pZCAwIDogZC5lbWFpbCkgfHwgdC5iaWxsaW5nX2RldGFpbHMuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCByW3AuWklQX0NPREVdID0gcltwLlpJUF9DT0RFXSB8fCAoKGYgPSB0LmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogZi5wb3N0YWxfY29kZSkgfHwgXCIwMDAwMFwiLCByW3AuQ09VTlRSWV0gPSByW3AuQ09VTlRSWV0gfHwgKChfID0gdC5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IF8uY291bnRyeSkgfHwgXCJVU1wiO1xuICBjb25zdCBzID0gcltwLkZJUlNUX05BTUVdIHx8IG4gfHwgXCJcIiwgYyA9IHJbcC5MQVNUX05BTUVdIHx8IG8gfHwgXCJcIjtcbiAgcmV0dXJuIHMgfHwgYyA/IChyW3AuRklSU1RfTkFNRV0gPSBzLCByW3AuTEFTVF9OQU1FXSA9IGMpIDogKHJbcC5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIiwgcltwLkxBU1RfTkFNRV0gPSBcIlwiKSwgRyhcIkZpbmFsIGZvcm0gaW5wdXRzOlwiLCByKSwgcjtcbn0sIGRsID0gKGUpID0+IG5ldyBQcm9taXNlKCh0KSA9PiB7XG4gIGNvbnN0IHIgPSAoKSA9PiB7XG4gICAgY29uc3QgbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO1xuICAgIG4gPyB0KG4pIDogcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHIpO1xuICB9O1xuICByKCk7XG59KSwgeyBsb2dfXzogVywgZXJyX186IHBsIH0gPSBJKFwic3RyaXBlLXByXCIpLCBfbCA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnVuaW9uKFt6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgbWwgPSB3ZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgVyhcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIFBSLi4uXCIpO1xuICAgIGNvbnN0IHIgPSB6KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgX2wpO1xuICAgIFcoXCJJbml0aWFsaXppbmcgU3RyaXBlIFBSIGZsb3cuLi5cIik7XG4gICAgY29uc3QgbiA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYSA9IGF3YWl0IE0obiksIG8gPSBhLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBXKFwiR2V0dGluZyBpbml0aWFsIHByZXZpZXcgYW1vdW50XCIpO1xuICAgIGNvbnN0IHMgPSBhd2FpdCB2ZShuLCBhLnRva2VuLCBvLCB2b2lkIDApLCBjID0gYXdhaXQgQ2koXG4gICAgICByLm1ldGFkYXRhLnN0cmlwZV9wayxcbiAgICAgIHMuYW1vdW50QXRvbSxcbiAgICAgIHMuY3VycmVuY3ksXG4gICAgICBvXG4gICAgKTtcbiAgICBXKFwiQ2hlY2tpbmcgaWYgY2FuIG1ha2UgcGF5bWVudFwiKTtcbiAgICBjb25zdCBsID0gYXdhaXQgYy5jYW5NYWtlUGF5bWVudCgpO1xuICAgIGlmIChsID09PSBudWxsKVxuICAgICAgcmV0dXJuIHBsKFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiKSwgeyBpc0F2YWlsYWJsZTogITEsIHJlYXNvbjogXCJjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsXCIgfTtcbiAgICBXKFwiU3RyaXBlIFBSIGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBDYW4gbWFrZSBwYXltZW50XCIsIGwpO1xuICAgIGNvbnN0IHUgPSAoZCwgZikgPT4gVC5zdHJpcGVQUi5ydW4oe1xuICAgICAgY29udGV4dDogZSxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbWUoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBkKSxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGooZS5mb3JtRGl2KSxcbiAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICBjdXN0b21QYXJhbXM6IHsgcHJvdmlkZXI6IGQsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGYgPT0gbnVsbCA/IHZvaWQgMCA6IGYub3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9LFxuICAgICAgaW5pdFJlc3VsdDoge1xuICAgICAgICBwcm9jZXNzb3I6IFUuRW51bS5zdHJpcGUsXG4gICAgICAgIHByOiBjLFxuICAgICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczogeyBhcHBsZVBheTogbC5hcHBsZVBheSwgZ29vZ2xlUGF5OiBsLmdvb2dsZVBheSB9LFxuICAgICAgICBzdGFydEZsb3c6IHVcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uc3RyaXBlLFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgcHI6IGMsXG4gICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHtcbiAgICAgICAgYXBwbGVQYXk6IGwuYXBwbGVQYXksXG4gICAgICAgIGdvb2dsZVBheTogbC5nb29nbGVQYXlcbiAgICAgIH0sXG4gICAgICBzdGFydEZsb3c6IHVcbiAgICB9O1xuICB9XG4pLCBmbCA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYSxcbiAgICBpbml0UmVzdWx0OiBvXG4gIH0pID0+IHtcbiAgICBpZiAoVyhcIlJ1bm5pbmcgU3RyaXBlIFBSIGZsb3cuLi5cIiksIGEucHJvdmlkZXIgIT09IHQucHJvdmlkZXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVyIG1pc21hdGNoLiBFeHBlY3RlZCAke2EucHJvdmlkZXJ9LCBnb3QgJHt0LnByb3ZpZGVyfWApO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBvLnByO1xuICAgIGlmIChhICE9IG51bGwgJiYgYS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCB5ID0gYS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0O1xuICAgICAgVyhcIk92ZXJyaWRpbmcgUFIgYW1vdW50IHdpdGhcIiwgeSk7XG4gICAgICBjb25zdCBoID0gdHlwZW9mIHkuYXBwbGVQYXlQYXltZW50UmVxdWVzdCA9PSBcImZ1bmN0aW9uXCIgPyB5LmFwcGxlUGF5UGF5bWVudFJlcXVlc3Qoe30pIDogeS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0O1xuICAgICAgaGwoYywgeS5hbW91bnQsIHkucGVuZGluZywgaCwgeS5sYWJlbCk7XG4gICAgfVxuICAgIFcoXCJTaG93aW5nIFBSIGRpYWxvZy4uLlwiKSwgYy5zaG93KCk7XG4gICAgY29uc3QgbCA9IGF3YWl0IGtpKGMpO1xuICAgIFcoXCJTdHJpcGUgUE0gYWRkZWQgZXZlbnQ6XCIsIGwpLCBXKFwiTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLlwiKTtcbiAgICBjb25zdCB1ID0geWwociwgbCksIGQgPSBxKHUsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLmRcbiAgICB9KSwgVyhcIlBSIGRpYWxvZyBmaW5pc2hlZC4gU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uXCIsIGQpO1xuICAgIGNvbnN0IGYgPSBhd2FpdCBtcyhzLCB7XG4gICAgICBmaWVsZHM6IGQsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHRcbiAgICB9KSwgXyA9IGdsKGYpO1xuICAgIFcoXCJDb25maXJtaW5nIFBSIHdpdGggU3RyaXBlLi4uXCIpLCBhd2FpdCBBaShfLCBsKTtcbiAgICBjb25zdCBtID0gYXdhaXQgTShzKTtcbiAgICBpZiAobS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIFcoXCJDb25maXJtaW5nIHBheW1lbnQgZmxvdyBmb3Igc2V0dXAuLi5cIik7XG4gICAgICBjb25zdCB5ID0gYXdhaXQgTChzLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogbS50b2tlblxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogdXQoeSkgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgVyhcIlBlcmZvcm1pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCB5ID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IG0udG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiB0LnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IGRbcC5GSVJTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfbGFzdF9uYW1lOiBkW3AuTEFTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IGRbcC5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX2FkZHJlc3M6IFooZCksXG4gICAgICAgIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IEsoZCwgbS5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBkW3AuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBtLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBtLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHRcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgcnIocywgeSkgfTtcbiAgICB9XG4gIH1cbiksIHlsID0gKGUsIHQpID0+IHtcbiAgdmFyIGQsIGYsIF8sIG07XG4gIGNvbnN0IHIgPSB7IC4uLmUgfSwgW24sIC4uLmFdID0gKChmID0gKGQgPSB0LnBheWVyTmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGQudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogZi5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgbyA9IGEuam9pbihcIiBcIikgfHwgdm9pZCAwLCBzID0gKG0gPSAoXyA9IHQucGF5bWVudE1ldGhvZCkgPT0gbnVsbCA/IHZvaWQgMCA6IF8uYmlsbGluZ19kZXRhaWxzKSA9PSBudWxsID8gdm9pZCAwIDogbS5hZGRyZXNzLCBjID0gdC5zaGlwcGluZ0FkZHJlc3M7XG4gIHJbcC5FTUFJTF0gPSByW3AuRU1BSUxdIHx8IHQucGF5ZXJFbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIHJbcC5aSVBfQ09ERV0gPSByW3AuWklQX0NPREVdIHx8IChzID09IG51bGwgPyB2b2lkIDAgOiBzLnBvc3RhbF9jb2RlKSB8fCAoYyA9PSBudWxsID8gdm9pZCAwIDogYy5wb3N0YWxDb2RlKSB8fCBcIjAwMDAwXCIsIHJbcC5DT1VOVFJZXSA9IHJbcC5DT1VOVFJZXSB8fCAocyA9PSBudWxsID8gdm9pZCAwIDogcy5jb3VudHJ5KSB8fCAoYyA9PSBudWxsID8gdm9pZCAwIDogYy5jb3VudHJ5KSB8fCBcIlVTXCI7XG4gIGNvbnN0IGwgPSByW3AuRklSU1RfTkFNRV0gfHwgbiB8fCBcIlwiLCB1ID0gcltwLkxBU1RfTkFNRV0gfHwgbyB8fCBcIlwiO1xuICByZXR1cm4gbCB8fCB1ID8gKHJbcC5GSVJTVF9OQU1FXSA9IGwsIHJbcC5MQVNUX05BTUVdID0gdSkgOiAocltwLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiLCByW3AuTEFTVF9OQU1FXSA9IFwiXCIpLCBXKFwiRmluYWwgZm9ybSBpbnB1dHM6XCIsIHIpLCByO1xufSwgaGwgPSAoZSwgdCwgciwgbiwgYSkgPT4ge1xuICBlLnVwZGF0ZSh7XG4gICAgdG90YWw6IHtcbiAgICAgIGFtb3VudDogdC5hbW91bnRBdG9tLFxuICAgICAgbGFiZWw6IGEgPz8gXCJUb3RhbFwiLFxuICAgICAgcGVuZGluZzogclxuICAgIH0sXG4gICAgY3VycmVuY3k6IHQuY3VycmVuY3ksXG4gICAgLy8gU3RyaXBlJ3MgYXBwbGVQYXkgb3B0aW9uIG9ubHkgc3VwcG9ydHMgJ3JlY3VycmluZ1BheW1lbnRSZXF1ZXN0JyB8ICdkZWZlcnJlZFBheW1lbnRSZXF1ZXN0JyB8ICdhdXRvbWF0aWNSZWxvYWRQYXltZW50UmVxdWVzdCcgb2YgbmF0aXZlIEFwcGxlUGF5IHBheW1lbnQgcmVxdWVzdFxuICAgIC8vIFdlJ3JlIGFjY2VwdGluZyBuYXRpdmUgUGF5bWVudCBSZXF1ZXN0IGhlcmUgZm9yIG1vcmUgY29tbW9uIHR5cGluZy5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gc3RyaXBlIGRvIG5vdCBleHBlY3QgYWRkaXRpb25hbCBmaWVsZHNcbiAgICBhcHBsZVBheTogblxuICB9KTtcbn0sIGdsID0gKGUpID0+IHtcbiAgaWYgKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIG9jY3VycmVkLlxuRGV0YWlsczogZ290ICR7ZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RofSByZXF1aXJlZCB1c2VyIGFjdGlvbnNgKTtcbiAgcmV0dXJuIEVpLnBhcnNlKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbn0sIG1lID0gKGUsIHQsIHIpID0+IHtcbiAgY29uc3QgbiA9IGUuZmlsdGVyKChhKSA9PiB7XG4gICAgY29uc3QgbyA9IHIgPT09IHZvaWQgMCA/ICEwIDogYS5wcm9jZXNzb3JfbmFtZSA9PT0gciwgcyA9IGEucHJvdmlkZXIgPT09IHQ7XG4gICAgcmV0dXJuIG8gJiYgcztcbiAgfSk7XG4gIGlmIChuLmxlbmd0aCA9PT0gMClcbiAgICB0aHJvdyBjb25zb2xlLndhcm4oXCJDUE1zIGxpc3RcIiwgZSksIG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3R9JyBhbmQgcHJvY2Vzc29yICcke3J9J2ApO1xuICByZXR1cm4gbi5sZW5ndGggIT09IDEgJiYgKGNvbnNvbGUud2FybihcIkNQTXMgbGlzdFwiLCBlKSwgY29uc29sZS53YXJuKGBNb3JlIHRoYW4gb25lIENQTSBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3R9JyBhbmQgcHJvY2Vzc29yICcke3J9J2ApLCBnKFwibW9yZV90aGFuX29uZV9jcG1fZm91bmRcIiwge1xuICAgIHByb3ZpZGVyOiB0LFxuICAgIHByb2Nlc3NvcjogcixcbiAgICBjcG1zOiBlXG4gIH0pKSwgblswXTtcbn0sIFQgPSB7XG4gIC8vIOKciyBOb3RlOiBGb3IgZmxvd3MgdGhhdCByZXF1aXJlIGluaXRpYWxpemF0aW9uLCBwbGVhc2UgYWRkIHRoZW0gdG8gYGluaXQtZmxvd3MudHNgXG4gIC8vIENvbW1vblxuICBjb21tb25DQzoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogWWNcbiAgfSxcbiAgLy8gU3RyaXBlXG4gIHN0cmlwZVBSOiB7XG4gICAgaW5pdDogbWwsXG4gICAgcnVuOiBmbFxuICB9LFxuICBzdHJpcGVMaW5rOiB7XG4gICAgaW5pdDogY2wsXG4gICAgcnVuOiBsbFxuICB9LFxuICAvLyBQb2NreXRcbiAgcG9ja3l0UGF5cGFsOiB7XG4gICAgaW5pdDogbmwsXG4gICAgcnVuOiBvbFxuICB9LFxuICAvLyBQYXlQYWxcbiAgcGF5cGFsOiB7XG4gICAgaW5pdDogdGwsXG4gICAgcnVuOiBybFxuICB9LFxuICAvLyBBaXJ3YWxsZXhcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgaW5pdDoga2MsXG4gICAgcnVuOiBBY1xuICB9LFxuICBhaXJ3YWxsZXhBcHBsZVBheToge1xuICAgIGluaXQ6IFNjLFxuICAgIHJ1bjogQ2NcbiAgfSxcbiAgYWlyd2FsbGV4QUNIOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiB2Y1xuICB9LFxuICBhaXJ3YWxsZXhFRlQ6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IFdzXG4gIH0sXG4gIGFpcndhbGxleEJBQ1M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IFlzXG4gIH0sXG4gIGFpcndhbGxleFNFUEE6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IEtzXG4gIH0sXG4gIC8vIExvb3BcbiAgbG9vcENyeXB0bzoge1xuICAgIGluaXQ6IFFjLFxuICAgIHJ1bjogWGNcbiAgfSxcbiAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IHtcbiAgICBpbml0OiBSYyxcbiAgICBydW46IE5jXG4gIH0sXG4gIGF1dGhvcml6ZU5ldEdvb2dsZVBheToge1xuICAgIGluaXQ6IEZjLFxuICAgIHJ1bjogTWNcbiAgfSxcbiAgYWR5ZW5Hb29nbGVQYXk6IHtcbiAgICBpbml0OiBoYyxcbiAgICBydW46IGdjXG4gIH0sXG4gIGFkeWVuQXBwbGVQYXk6IHtcbiAgICBpbml0OiBmYyxcbiAgICBydW46IHljXG4gIH1cbiAgLy8g8J+RiSBBZGQgbW9yZSBmbG93cyBoZXJlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59LCB7IGxvZ19fOiB3bCwgZXJyX186IHZsIH0gPSBJKFwiaW5pdC1mbG93c1wiKSwgb2UgPSAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gbmV3IGV0KCk7XG4gIHJldHVybiB7XG4gICAgcHVibGlzaGVyOiByLFxuICAgIGluaXRpYWxpemU6IGFzeW5jIChuKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoci5jdXJyZW50LmlzU3VjY2VzcylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGZsb3cgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5cIik7XG4gICAgICAgIGNvbnN0IGEgPSBhd2FpdCB0KG4pO1xuICAgICAgICB3bChg4pyUICR7ZX0gZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIFJlc3VsdDpgLCBhKSwgci5zZXQoYSk7XG4gICAgICB9IGNhdGNoIChhKSB7XG4gICAgICAgIHZsKGDwnZmtICR7ZX0gZmxvdyBpbml0aWFsaXphdGlvbiBmYWlsZWQuIEVycm9yOmAsIGVlKGEpLCBcIkRldGFpbHM6XCIsIGEpLCByLnRocm93KGEsIGVlKGEpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59LCBibCA9IGFzeW5jIChlLCB0LCByKSA9PiB7XG4gIGF3YWl0IFByb21pc2UuYWxsKE9iamVjdC52YWx1ZXMoZSkubWFwKChuKSA9PiBuLmluaXRpYWxpemUoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiByIH0pKSk7XG59LCBFbCA9ICgpID0+ICh7XG4gIC8vIPCfkqEgQWRkIG5ldyBpbml0IGZsb3dzIGhlcmVcbiAgLy8gU3RyaXBlIFBSXG4gIHN0cmlwZVBSOiBvZShcIlN0cmlwZSBQUlwiLCBULnN0cmlwZVBSLmluaXQpLFxuICAvLyBTdHJpcGUgTGlua1xuICBzdHJpcGVMaW5rOiBvZShcIlN0cmlwZSBMaW5rXCIsIFQuc3RyaXBlTGluay5pbml0KSxcbiAgLy8gQWlyd2FsbGV4IEdvb2dsZVBheVxuICBhaXJ3YWxsZXhHb29nbGVQYXk6IG9lKFwiQWlyd2FsbGV4IEdvb2dsZVBheVwiLCBULmFpcndhbGxleEdvb2dsZVBheS5pbml0KSxcbiAgLy8gQWlyd2FsbGV4IEFwcGxlUGF5XG4gIGFpcndhbGxleEFwcGxlUGF5OiBvZShcIkFpcndhbGxleCBBcHBsZVBheVwiLCBULmFpcndhbGxleEFwcGxlUGF5LmluaXQpLFxuICAvLyBMb29wXG4gIGxvb3A6IG9lKFwiTG9vcFwiLCBULmxvb3BDcnlwdG8uaW5pdCksXG4gIC8vIFBheVBhbFxuICBwYXlwYWw6IG9lKFwiUGF5UGFsXCIsIFQucGF5cGFsLmluaXQpLFxuICAvLyBQb2NreXQgUGF5UGFsXG4gIHBvY2t5dFBheXBhbDogb2UoXCJQb2NreXQgUGF5UGFsXCIsIFQucG9ja3l0UGF5cGFsLmluaXQpLFxuICAvLyBBdXRobmV0IEdvb2dsZVBheVxuICBhdXRob3JpemVOZXRHb29nbGVQYXk6IG9lKFwiQXV0aG5ldCBHb29nbGVQYXlcIiwgVC5hdXRob3JpemVOZXRHb29nbGVQYXkuaW5pdCksXG4gIC8vIEF1dGhuZXQgQXBwbGVQYXlcbiAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IG9lKFwiQXV0aG5ldCBBcHBsZVBheVwiLCBULmF1dGhvcml6ZU5ldEFwcGxlUGF5LmluaXQpLFxuICAvLyBBZHllbiBHb29nbGVQYXlcbiAgYWR5ZW5Hb29nbGVQYXk6IG9lKFwiQWR5ZW4gR29vZ2xlUGF5XCIsIFQuYWR5ZW5Hb29nbGVQYXkuaW5pdCksXG4gIC8vIEFkeWVuIEFwcGxlUGF5XG4gIGFkeWVuQXBwbGVQYXk6IG9lKFwiQWR5ZW4gQXBwbGVQYXlcIiwgVC5hZHllbkFwcGxlUGF5LmluaXQpXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59KSwgeyBlcnJfXzogUGwgfSA9IEkoXCJmb3JtLWNhbGxiYWNrc1wiKSwgYWUgPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpLCBNciA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiBhZSxcbiAgb25CbHVyOiBhZSxcbiAgb25DaGFuZ2U6IGFlLFxuICBvbkxvYWQ6IGFlLFxuICBvbkxvYWRFcnJvcjogYWUsXG4gIG9uVmFsaWRhdGlvbkVycm9yOiBhZSxcbiAgb25DaGVja291dFN0YXJ0ZWQ6IGFlLFxuICBvbkNoZWNrb3V0U3VjY2VzczogYWUsXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogYWUsXG4gIG9uQ2hlY2tvdXRFcnJvcjogYWUsXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBhZVxufSksIGZlID0gY2xhc3MgZmUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldENhbGxiYWNrcyA9ICh0KSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBmZS5jcmVhdGVFbXB0eUNhbGxiYWNrcygpLCBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKChbciwgbl0pID0+IHtcbiAgICAgICAgY29uc3QgYSA9IHlhKHIsIG4gPz8gZmUuTk9PUCwgUGwpO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3Nbcl0gPSBhO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5fY2FsbGJhY2tzID0gZmUuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufTtcbmZlLk5PT1AgPSAoKSA9PiB7XG59LCBmZS5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgY29uc3QgdCA9IHt9O1xuICByZXR1cm4gT2JqZWN0LmtleXMoTXIua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChyKSA9PiB7XG4gICAgdFtyXSA9IGZlLk5PT1A7XG4gIH0pLCB0O1xufSwgZmUuZnJvbU9iamVjdCA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSBuZXcgZmUoKTtcbiAgcmV0dXJuIHIuc2V0Q2FsbGJhY2tzKE1yLnBhcnNlKHQpKSwgcjtcbn07XG5sZXQgQnQgPSBmZTtcbmZ1bmN0aW9uIFNsKCkge1xuICB0cnkge1xuICAgIGNvbnN0IGUgPSAkKCksIHQgPSBlO1xuICAgIGlmICh0ICE9IG51bGwgJiYgdC5uZXh0IHx8IHQgIT0gbnVsbCAmJiB0Ll9fTkVYVF9EQVRBX18gfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNfX25leHRcIikpXG4gICAgICByZXR1cm4gXCJuZXh0anNcIjtcbiAgICBjb25zdCByID0gZTtcbiAgICBpZiAociAhPSBudWxsICYmIHIuX19OVVhUX18gfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNfX251eHRcIikpXG4gICAgICByZXR1cm4gXCJudXh0XCI7XG4gICAgaWYgKE9iamVjdC5rZXlzKGRvY3VtZW50KS5maW5kKChhKSA9PiBhLmluY2x1ZGVzKFwicmVhY3RcIikpIHx8IEFycmF5LmZyb20oZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKFwiYm9keSA+ICpcIikpLmZpbmQoXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gX3JlYWN0Um9vdENvbnRhaW5lciBkb2Vzbid0IGV4aXN0XG4gICAgICAoYSkgPT4gYS5fcmVhY3RSb290Q29udGFpbmVyXG4gICAgKSlcbiAgICAgIHJldHVybiBcInJlYWN0XCI7XG4gICAgY29uc3QgbiA9IGU7XG4gICAgcmV0dXJuIG4gIT0gbnVsbCAmJiBuLlZ1ZSB8fCBuICE9IG51bGwgJiYgbi5fX1ZVRV9fID8gXCJ2dWVcIiA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbbmctdmVyc2lvbl1cIikgPyBcImFuZ3VsYXJcIiA6IFwidmFuaWxsYVwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gXCJ1bmtub3duXCI7XG4gIH1cbn1cbmZ1bmN0aW9uIENsKGUpIHtcbiAgdmFyIHQsIHIsIG47XG4gIHRyeSB7XG4gICAgc3dpdGNoIChlKSB7XG4gICAgICBjYXNlIFwicmVhY3RcIjpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBjYXNlIFwibmV4dGpzXCI6IHtcbiAgICAgICAgY29uc3QgbyA9ICQoKTtcbiAgICAgICAgcmV0dXJuICgodCA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ubmV4dCkgPT0gbnVsbCA/IHZvaWQgMCA6IHQudmVyc2lvbikgfHwgKChyID0gbyA9PSBudWxsID8gdm9pZCAwIDogby5fX05FWFRfREFUQV9fKSA9PSBudWxsID8gdm9pZCAwIDogci5idWlsZElkKSB8fCBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSBcIm51eHRcIjpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBjYXNlIFwidnVlXCI6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSBcImFuZ3VsYXJcIjoge1xuICAgICAgICBjb25zdCBhID0gKG4gPSAkKCkpID09IG51bGwgPyB2b2lkIDAgOiBuLmRvY3VtZW50LCBvID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5xdWVyeVNlbGVjdG9yKFwiW25nLXZlcnNpb25dXCIpO1xuICAgICAgICByZXR1cm4gbyA/IG8uZ2V0QXR0cmlidXRlKFwibmctdmVyc2lvblwiKSA6IG51bGw7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5mdW5jdGlvbiBrbCgpIHtcbiAgY29uc3QgZSA9IFNsKCksIHQgPSBDbChlKTtcbiAgcmV0dXJuIHsgZnJhbWV3b3JrOiBlLCB2ZXJzaW9uOiB0IH07XG59XG5jb25zdCBhbyA9ICgpID0+IHtcbiAgY29uc3QgZSA9IHdpbmRvdyAmJiB3aW5kb3cuc2NyZWVuID8gd2luZG93LnNjcmVlbi5oZWlnaHQgOiBudWxsLCB0ID0gd2luZG93ICYmIHdpbmRvdy5zY3JlZW4gPyB3aW5kb3cuc2NyZWVuLndpZHRoIDogbnVsbCwgciA9IHdpbmRvdyAmJiB3aW5kb3cuc2NyZWVuID8gd2luZG93LnNjcmVlbi5jb2xvckRlcHRoIDogbnVsbCwgbiA9IHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yID8gd2luZG93Lm5hdmlnYXRvci5qYXZhRW5hYmxlZCgpIDogITEsIGEgPSB3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvciA/IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50IDogbnVsbCwgbyA9IFwidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2Uvd2VicCxpbWFnZS9hcG5nLCovKjtxPTAuOFwiO1xuICBsZXQgcyA9IG51bGw7XG4gIHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yICYmIChzID0gd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZSA/IHdpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2UgOiB3aW5kb3cubmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZSk7XG4gIGNvbnN0IGMgPSAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gIHJldHVybiB7XG4gICAgY29sb3JfZGVwdGg6IHIsXG4gICAgamF2YV9lbmFibGVkOiBuLFxuICAgIGphdmFzY3JpcHRfZW5hYmxlZDogITAsXG4gICAgbGFuZ3VhZ2U6IHMsXG4gICAgc2NyZWVuX2hlaWdodDogZSxcbiAgICBzY3JlZW5fd2lkdGg6IHQsXG4gICAgdGltZV96b25lX29mZnNldDogYyxcbiAgICB1c2VyX2FnZW50OiBhLFxuICAgIGFjY2VwdF9oZWFkZXI6IG9cbiAgfTtcbn07XG52YXIgUiA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLnBvY2t5dFBheXBhbCA9IFwicG9ja3l0LXBheXBhbFwiLCBlLmFwcGxlUGF5ID0gXCJhcHBsZS1wYXlcIiwgZS5nb29nbGVQYXkgPSBcImdvb2dsZS1wYXlcIiwgZS5sb29wQ3J5cHRvID0gXCJsb29wLWNyeXB0b1wiLCBlLnBheXBhbCA9IFwicGF5cGFsXCIsIGUuYWlyd2FsbGV4R29vZ2xlUGF5ID0gXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheVwiLCBlLmFpcndhbGxleEFwcGxlUGF5ID0gXCJhaXJ3YWxsZXgtYXBwbGUtcGF5XCIsIGUuYXV0aG9yaXplbmV0R29vZ2xlUGF5ID0gXCJhdXRob3JpemVuZXQtZ29vZ2xlLXBheVwiLCBlLmF1dGhvcml6ZW5ldEFwcGxlUGF5ID0gXCJhdXRob3JpemVuZXQtYXBwbGUtcGF5XCIsIGUuYWR5ZW5Hb29nbGVQYXkgPSBcImFkeWVuLWdvb2dsZS1wYXlcIiwgZS5hZHllbkFwcGxlUGF5ID0gXCJhZHllbi1hcHBsZS1wYXlcIiwgZS5haXJ3YWxsZXhBQ0ggPSBcImFpcndhbGxleC1hY2hcIiwgZS5haXJ3YWxsZXhFRlQgPSBcImFpcndhbGxleC1lZnRcIiwgZS5haXJ3YWxsZXhCQUNTID0gXCJhaXJ3YWxsZXgtYmFjc1wiLCBlLmFpcndhbGxleFNFUEEgPSBcImFpcndhbGxleC1zZXBhXCIsIGUpKShSIHx8IHt9KTtcbnokMS5uYXRpdmVFbnVtKFIpO1xudmFyIEFlID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuQUNIID0gXCJhY2hcIiwgZS5FRlQgPSBcImVmdFwiLCBlLkJBQ1MgPSBcImJhY3NcIiwgZS5TRVBBID0gXCJzZXBhXCIsIGUuQVBQTEVfUEFZID0gXCJhcHBsZV9wYXlcIiwgZS5DUkVESVRfQ0FSRCA9IFwiY3JlZGl0X2NhcmRcIiwgZS5HT09HTEVfUEFZID0gXCJnb29nbGVfcGF5XCIsIGUuU1RSSVBFX0xJTksgPSBcInN0cmlwZV9saW5rXCIsIGUuQ1JZUFRPID0gXCJjcnlwdG9cIiwgZS5QQVlQQUwgPSBcInBheXBhbFwiLCBlKSkoQWUgfHwge30pO1xuY29uc3QgTHIgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gW2UuYWlyd2FsbGV4QXBwbGVQYXksIGUuYXV0aG9yaXplTmV0QXBwbGVQYXksIGUuYWR5ZW5BcHBsZVBheV0sIHIgPSBbXTtcbiAgdC5mb3JFYWNoKChhKSA9PiB7XG4gICAgY29uc3QgbyA9IGEucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgIG8gIT0gbnVsbCAmJiBvLmlzQXZhaWxhYmxlICYmIHIucHVzaChvKTtcbiAgfSk7XG4gIGNvbnN0IG4gPSBlLnN0cmlwZVBSLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgcmV0dXJuIG4gIT0gbnVsbCAmJiBuLmlzQXZhaWxhYmxlICYmIG4uYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5ICYmIHIucHVzaCh7XG4gICAgaXNBdmFpbGFibGU6ICEwLFxuICAgIGlzTG9hZGluZzogITEsXG4gICAgcHJvY2Vzc29yOiBVLkVudW0uc3RyaXBlLFxuICAgIHN0YXJ0RmxvdzogKG8pID0+IG4uc3RhcnRGbG93KFwiYXBwbGVfcGF5XCIsIHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pXG4gIH0pLCB7XG4gICAgcHJvY2Vzc29yczogci5tYXAoKGEpID0+IGEucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZTogci5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogITEsXG4gICAgc3RhcnRGbG93OiAoYSkgPT4gQWwociwgYSlcbiAgfTtcbn0sIERyID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IFtlLmFpcndhbGxleEdvb2dsZVBheSwgZS5hdXRob3JpemVOZXRHb29nbGVQYXksIGUuYWR5ZW5Hb29nbGVQYXldLCByID0gW107XG4gIHQuZm9yRWFjaCgoYSkgPT4ge1xuICAgIGNvbnN0IG8gPSBhLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICBvICE9IG51bGwgJiYgby5pc0F2YWlsYWJsZSAmJiByLnB1c2gobyk7XG4gIH0pO1xuICBjb25zdCBuID0gZS5zdHJpcGVQUi5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIHJldHVybiBuICE9IG51bGwgJiYgbi5pc0F2YWlsYWJsZSAmJiBuLmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXkgJiYgci5wdXNoKHtcbiAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgaXNMb2FkaW5nOiAhMSxcbiAgICBwcm9jZXNzb3I6IFUuRW51bS5zdHJpcGUsXG4gICAgc3RhcnRGbG93OiAobykgPT4gbi5zdGFydEZsb3coXCJnb29nbGVfcGF5XCIsIHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pXG4gIH0pLCB7XG4gICAgcHJvY2Vzc29yczogci5tYXAoKGEpID0+IGEucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZTogci5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogITEsXG4gICAgc3RhcnRGbG93OiAoYSkgPT4gSWwociwgYSlcbiAgfTtcbn0sIEFsID0gKGUsIHQpID0+IHtcbiAgaWYgKHQgIT0gbnVsbCAmJiB0LnByb2Nlc3Nvcikge1xuICAgIGNvbnN0IG4gPSBlLmZpbmQoKGEpID0+IGEucHJvY2Vzc29yID09PSB0LnByb2Nlc3Nvcik7XG4gICAgaWYgKG4gIT0gbnVsbCAmJiBuLmlzQXZhaWxhYmxlKVxuICAgICAgcmV0dXJuIG4uc3RhcnRGbG93KHQpO1xuICAgIHRocm93IG5ldyBFcnJvcihgU3BlY2lmaWVkIEFwcGxlIFBheSBwcm9jZXNzb3IgJHt0LnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IHIgPSBlLmZpbmQoKG4pID0+IG4uaXNBdmFpbGFibGUpO1xuICBpZiAocilcbiAgICByZXR1cm4gci5zdGFydEZsb3codCk7XG4gIHRocm93IG5ldyBFcnJvcihcIk5vIGF2YWlsYWJsZSBBcHBsZSBQYXkgcHJvY2Vzc29yIGZvdW5kXCIpO1xufSwgSWwgPSAoZSwgdCkgPT4ge1xuICBpZiAodCAhPSBudWxsICYmIHQucHJvY2Vzc29yKSB7XG4gICAgY29uc3QgbiA9IGUuZmluZCgoYSkgPT4gYS5wcm9jZXNzb3IgPT09IHQucHJvY2Vzc29yKTtcbiAgICBpZiAobiAhPSBudWxsICYmIG4uaXNBdmFpbGFibGUpXG4gICAgICByZXR1cm4gbi5zdGFydEZsb3codCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZWQgR29vZ2xlIFBheSBwcm9jZXNzb3IgJHt0LnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IHIgPSBlLmZpbmQoKG4pID0+IG4uaXNBdmFpbGFibGUpO1xuICBpZiAocilcbiAgICByZXR1cm4gci5zdGFydEZsb3codCk7XG4gIHRocm93IG5ldyBFcnJvcihcIk5vIGF2YWlsYWJsZSBHb29nbGUgUGF5IHByb2Nlc3NvciBmb3VuZFwiKTtcbn0sIFRsID0gKGUpID0+IEpTT04uc3RyaW5naWZ5KGUpLCB7IGxvZ19fOiBqdCwgZXJyX186IFJsIH0gPSBJKFwidHJhY2VyXCIpLCBObCA9IChlLCB0KSA9PiB7XG4gIHRyeSB7XG4gICAgRmwoZSwgdCk7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICBSbChgRXJyb3IgaW5pdGlhbGl6aW5nIHRyYWNlcjogJHtyfWApO1xuICB9XG59O1xubGV0IHhyO1xuY29uc3QgRmwgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA+IFwidVwiKVxuICAgIHJldHVybjtcbiAgY29uc3QgciA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1DTThyU04wMC0hfnswMDN9fi5qcycpLCB7IENvbnNvbGVTcGFuRXhwb3J0ZXI6IG4sIFNpbXBsZVNwYW5Qcm9jZXNzb3I6IGEsIFdlYlRyYWNlclByb3ZpZGVyOiBvIH0gPSByLCBzID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LUJwWFdRcElnLSF+ezAwNn1+LmpzJyksIHsgRmV0Y2hJbnN0cnVtZW50YXRpb246IGMgfSA9IHMsIGwgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtRDlabXVVNm0tIX57MDBifX4uanMnKSwgeyBab25lQ29udGV4dE1hbmFnZXI6IHUgfSA9IGwsIGQgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtT2ZkSGQ2NEEtIX57MDBjfX4uanMnKSwgeyByZWdpc3Rlckluc3RydW1lbnRhdGlvbnM6IGYgfSA9IGQsIF8gPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtREtNbFpiQVQtIX57MDBlfX4uanMnKSwgeyBSZXNvdXJjZTogbSB9ID0gXywgeSA9IGF3YWl0IGltcG9ydCgnLi9kZXRlY3QtcmVzb3VyY2VzLUQyMDlsWTh1LSF+ezAwaH1+LmpzJykudGhlbigoQ2UpID0+IENlLmQpLCB7IGRldGVjdFJlc291cmNlc1N5bmM6IGggfSA9IHksIGIgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtbmRsMzkyZ3UtIX57MDBrfX4uanMnKSwgeyBPVExQVHJhY2VFeHBvcnRlcjogdiB9ID0gYiwgdyA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1CMVF5VlF3Qi0hfnswMG19fi5qcycpLCB7IEIzUHJvcGFnYXRvcjogRSwgQjNJbmplY3RFbmNvZGluZzogQyB9ID0gdywgTyA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1DS3QyZ2ZPMi0hfnswMDF9fi5qcycpLCB7IEJhdGNoU3BhblByb2Nlc3NvcjogQSB9ID0gTztcbiAganQoYEluaXRpYWxpemluZyB0cmFjZXIgd2l0aCB2ZXJzaW9uICR7ZX0gYW5kIGJhc2VVcmwgJHt0fWApO1xuICBjb25zdCBEID0gTWwodCk7XG4gIGp0KGBVc2luZyBjb2xsZWN0b3IgVVJMICR7RH1gKTtcbiAgY29uc3QgUSA9IG5ldyB2KHsgdXJsOiBEIH0pLCBTZSA9IHtcbiAgICBcInNlcnZpY2UudmVyc2lvblwiOiBlLFxuICAgIFwic2VydmljZS5uYW1lXCI6IFwib2pzXCJcbiAgfTtcbiAgcmV0dXJuIG5ldyBvKHtcbiAgICByZXNvdXJjZTogbmV3IG0oU2UpLm1lcmdlKGgoKSksXG4gICAgc3BhblByb2Nlc3NvcnM6IFtcbiAgICAgIG5ldyBhKG5ldyBuKCkpLFxuICAgICAgbmV3IEEoUSwge1xuICAgICAgICBzY2hlZHVsZWREZWxheU1pbGxpczogNTAwXG4gICAgICB9KVxuICAgIF1cbiAgfSkucmVnaXN0ZXIoe1xuICAgIGNvbnRleHRNYW5hZ2VyOiBuZXcgdSgpLFxuICAgIHByb3BhZ2F0b3I6IG5ldyBFKHsgaW5qZWN0RW5jb2Rpbmc6IEMuTVVMVElfSEVBREVSIH0pXG4gIH0pLCBmKHtcbiAgICBpbnN0cnVtZW50YXRpb25zOiBbXG4gICAgICBuZXcgYyh7XG4gICAgICAgIHByb3BhZ2F0ZVRyYWNlSGVhZGVyQ29yc1VybHM6IFsvLiovXSxcbiAgICAgICAgLy8gUHJvcGFnYXRlIHRvIGFsbCBVUkxzXG4gICAgICAgIC8vIEV4Y2x1ZGUgQWR5ZW4gVVJMcyAtIHRoZXkgZG8gbm90IGFsbG93IE9QVElPTlMgcmVxdWVzdHNcbiAgICAgICAgLy8gQWxzbyBleGNsdWRlIGxvb3BjcnlwdG8ueHl6XG4gICAgICAgIGlnbm9yZVVybHM6IFsvXmh0dHBzOlxcL1xcLyguKlxcLik/YWR5ZW5cXC5jb20vLCAvXmh0dHBzOlxcL1xcLyguKlxcLik/bG9vcGNyeXB0b1xcLnh5ei9dXG4gICAgICB9KVxuICAgIF1cbiAgfSksIHhyID0gamUuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKSwganQoXCJUcmFjZXIgaW5pdGlhbGl6ZWRcIiksIHhyO1xufSwgTWwgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gbmV3IFVSTChlKS5ob3N0bmFtZTtcbiAgcmV0dXJuIHQgPT09IFwiY2RlLm9wZW5wYXlzdGFnaW5nLmNvbVwiID8gXCJodHRwczovL290ZWwub3BlbnBheXNhbmRib3guY29tL3YxL3RyYWNlc1wiIDogdCA9PT0gXCJjZGUuZ2V0b3BlbnBheS5jb21cIiA/IFwiaHR0cHM6Ly9vdGVsLmdldG9wZW5wYXkuY29tL3YxL3RyYWNlc1wiIDogXCJodHRwOi8vbG9jYWxob3N0OjQzMTkvdjEvdHJhY2VzXCI7XG59O1xuY2xhc3MgTGwge1xuICBjb25zdHJ1Y3Rvcih0LCByLCBuLCBhKSB7XG4gICAgdGhpcy5oYW5kbGVNZXNzYWdlID0gKG8pID0+IHtcbiAgICAgIGlmICghby5zb3VyY2UpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW09KU10gTm8gc291cmNlIGZvdW5kXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoT3Ioby5vcmlnaW4pICE9PSBPcih0aGlzLmJhc2VVcmwpIHx8IHR5cGVvZiBvLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBvLmRhdGEucGVucGFsIHx8IHR5cGVvZiBvLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBvLmRhdGEuc291cmNlICYmIG8uZGF0YS5zb3VyY2UgPT09IFwicmVhY3QtZGV2dG9vbHMtYnJpZGdlXCIpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGxldCBzID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHMgPSBNcyhKU09OLnBhcnNlKG8uZGF0YSkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZUV2ZW50KHMpKSByZXR1cm47XG4gICAgICBjb25zdCB7IGVsZW1lbnRJZDogbCwgcGF5bG9hZDogdSB9ID0gcywgZCA9IHUudHlwZTtcbiAgICAgIHN3aXRjaCAoZCkge1xuICAgICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5zZXRGb3JtSGVpZ2h0KHUuaGVpZ2h0ID8gYCR7dS5oZWlnaHR9cHhgIDogXCIxMDAlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRk9DVVNcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uRm9jdXMobCwgdS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJCTFVSXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkJsdXIobCwgdS5lbGVtZW50VHlwZSwge1xuICAgICAgICAgICAgb2JmdXNjYXRlZFZhbHVlOiB1Lm9iZnVzY2F0ZWRWYWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQ0hBTkdFXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoYW5nZShsLCB1LmVsZW1lbnRUeXBlLCB1LmVycm9ycyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FERURcIjpcbiAgICAgICAgICB0aGlzLmV2ZW50VGFyZ2V0c1tsXSA9IG8uc291cmNlLCB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZGVkKHUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BRF9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkRXJyb3IodS5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlZBTElEQVRJT05fRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKHUuZWxlbWVudFR5cGUsIHUuZXJyb3JzLCBsKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gVW5oYW5kbGVkIGV2ZW50IHR5cGU6XCIsIGQpO1xuICAgICAgfVxuICAgIH0sIHRoaXMudmFsaWRhdGVFdmVudCA9IChvKSA9PiBvLmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQgfHwgIW8uZWxlbWVudElkID8gKGNvbnNvbGUubG9nKFwiW09KU10gZm9ybUlkXCIsIHRoaXMuZm9ybUlkLCBvLmZvcm1JZCksIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyB1bmtub3duIGV2ZW50OlwiLCBvKSwgITEpIDogdGhpcy5ub25jZXMuaGFzKG8ubm9uY2UpID8gKGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyBkdXBsaWNhdGUgZXZlbnQ6XCIsIG8pLCAhMSkgOiAodGhpcy5ub25jZXMuYWRkKG8ubm9uY2UpLCAhMCksIHRoaXMuZXZlbnRUYXJnZXRzID0ge30sIHRoaXMubm9uY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgdGhpcy5mb3JtSWQgPSB0LCB0aGlzLmJhc2VVcmwgPSByLCB0aGlzLmZvcm1DYWxsYmFja3MgPSBuLCB0aGlzLmludGVybmFsQ2FsbGJhY2tzID0gYTtcbiAgfVxufVxuY29uc3QgT3IgPSAoZSkgPT4gbmV3IFVSTChlKS5vcmlnaW47XG5hc3luYyBmdW5jdGlvbiBEbChlLCB0KSB7XG4gIGNvbnN0IG4gPSBhd2FpdCBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lOiBlLFxuICAgIGRlYnVnOiAhMSxcbiAgICBjaGlsZE9yaWdpbjogdFxuICB9KS5wcm9taXNlLCBhID0gYXdhaXQgYnMobik7XG4gIGlmICghRXMobiwgYSkpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiR290IGludmFsaWQgQ0RFIGNvbm5lY3Rpb24gb2JqZWN0XCIpO1xuICByZXR1cm4gbjtcbn1cbmNsYXNzIHhsIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIH1cbiAgYWRkQ29ubmVjdGlvbih0LCByKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucy5zZXQodCwgcik7XG4gIH1cbiAgZ2V0Q29ubmVjdGlvbigpIHtcbiAgICBjb25zdCB0ID0gdGhpcy5jb25uZWN0aW9ucy52YWx1ZXMoKS5uZXh0KCkudmFsdWU7XG4gICAgaWYgKCF0KVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBub3QgZm91bmRcIik7XG4gICAgcmV0dXJuIHQ7XG4gIH1cbiAgZ2V0QWxsQ29ubmVjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbnM7XG4gIH1cbn1cbmNvbnN0IE9sID0gKGUsIHQsIHIpID0+IHtcbiAgY29uc3QgeyBzdHJpcGVQUjogbiB9ID0gZTtcbiAgbi5wdWJsaXNoZXIuc3Vic2NyaWJlKChhKSA9PiB7XG4gICAgaWYgKGEuaXNTdWNjZXNzKSB7XG4gICAgICBjb25zdCBvID0gYS5sb2FkZWRWYWx1ZSwgcyA9IG8uaXNBdmFpbGFibGUgJiYgby5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXksIGMgPSBvLmlzQXZhaWxhYmxlICYmIG8uYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheSwgbCA9IHtcbiAgICAgICAgYXBwbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogcyxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1KSA9PiB7XG4gICAgICAgICAgICBzICYmIFVyKFwiYXBwbGVfcGF5XCIsIG8sIHQsIHIsIHUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ29vZ2xlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGMsXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodSkgPT4ge1xuICAgICAgICAgICAgYyAmJiBVcihcImdvb2dsZV9wYXlcIiwgbywgdCwgciwgdSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgci5nZXQub25QYXltZW50UmVxdWVzdExvYWQobCk7XG4gICAgfVxuICB9KTtcbn0sIFVyID0gKGUsIHQsIHIsIG4sIGEpID0+IFQuc3RyaXBlUFIucnVuKHtcbiAgY29udGV4dDogcixcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBtZShyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGUpLFxuICBub25DZGVGb3JtSW5wdXRzOiBqKHIuZm9ybURpdiksXG4gIGZvcm1DYWxsYmFja3M6IG4sXG4gIGN1c3RvbVBhcmFtczogeyBwcm92aWRlcjogZSwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogYSA9PSBudWxsID8gdm9pZCAwIDogYS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gIGluaXRSZXN1bHQ6IHRcbn0pLCBqciA9IFwiVGhlIHNlY3VyZSBmb3JtIGZhaWxlZCB0byBsb2FkIHByb3Blcmx5LiBQbGVhc2UgY2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uLCBvciB0cnkgYWdhaW4gbGF0ZXIuXCIsIHsgbG9nX186IHBlLCBlcnJfXzogdGUgfSA9IEkoXCJvcC1mb3JtXCIpLCB5ZSA9IGNsYXNzIHllIHtcbiAgY29uc3RydWN0b3IodCkge1xuICAgIHZhciBhO1xuICAgIHRoaXMuaXNEZXN0cm95ZWQgPSAhMSwgdGhpcy5jZGVMb2FkRXZlbnQgPSBuZXcgZXQoKSwgdGhpcy5hbnlDZGVDb25uID0gbmV3IGV0KCksIHRoaXMuY29udGV4dCA9IG5ldyBldCgpLCB0aGlzLmluaXRGbG93cyA9IEVsKCksIHRoaXMuaXNTdWJtaXR0aW5nID0gITEsIHRoaXMuc3RhcnRGb3JtSW5pdCA9IGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG8gPSBqZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpLCBzID0gby5zdGFydFNwYW4oXCJmb3JtLmluaXRpYWxpemVcIiwge1xuICAgICAgICBraW5kOiBzdC5DTElFTlQsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBcIm9qcy5jaGVja291dFNlY3VyZVRva2VuXCI6IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZGV2aWNlVG9rZW5cIjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICAvLyAnZW52aXJvbm1lbnQnOiAsXG4gICAgICAgICAgLy8gJ2ZyYW1ld29yayc6IGZyYW1ld29yayxcbiAgICAgICAgICAvLyAnZnJhbWV3b3JrLnZlcnNpb24nOiB2ZXJzaW9uLFxuICAgICAgICAgIFwib2pzLmZvcm1JZFwiOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICBcIm9qcy52ZXJzaW9uXCI6IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5iYXNlX3VybFwiOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgXCJvanMucmVmZXJyZXJcIjogdGhpcy5yZWZlcnJlclxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB4ZS53aXRoKGplLnNldFNwYW4oeGUuYWN0aXZlKCksIHMpLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgYyA9IHRoaXMuY3JlYXRlRWxlbWVudChfZS5DREVfQlJJREdFKTtcbiAgICAgICAgICBjLm5vZGUuaWQgPSBcIl9fb3BfaW50ZXJuYWxfY2RlX2JyaWRnZVwiLCBjLm5vZGUuYXJpYUhpZGRlbiA9IFwidHJ1ZVwiLCBPYmplY3QuYXNzaWduKGMubm9kZS5zdHlsZSwge1xuICAgICAgICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgICAgICAgIG1hcmdpbjogXCIwcHhcIixcbiAgICAgICAgICAgIHBhZGRpbmc6IFwiMHB4XCIsXG4gICAgICAgICAgICB3aWR0aDogXCIxcHhcIixcbiAgICAgICAgICAgIGhlaWdodDogXCIxcHhcIixcbiAgICAgICAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiLFxuICAgICAgICAgICAgdmlzaWJpbGl0eTogXCJoaWRkZW5cIixcbiAgICAgICAgICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgICAgICAgICBwb2ludGVyRXZlbnRzOiBcIm5vbmVcIixcbiAgICAgICAgICAgIHVzZXJTZWxlY3Q6IFwibm9uZVwiXG4gICAgICAgICAgfSksIGMubW91bnQoXCJib2R5XCIpLCBwZShcIkNERSBicmlkZ2UgZWxlbWVudCBtb3VudGVkXCIpLCBwZShcIkluaXRpYWxpemluZyBPcGVuUGF5IGZvcm06XCIpLCBwZShcIuKUnCBXYWl0aW5nIGZvciBDREUgbG9hZCBldmVudC4uLlwiKTtcbiAgICAgICAgICBjb25zdCBsID0gYXdhaXQgdGhpcy5jZGVMb2FkRXZlbnQud2FpdEZvckxvYWQoe1xuICAgICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgICAgdGltZW91dEVyck1zZzoganJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwZShcIuKUnCBDREUgbG9hZCBldmVudCByZWNlaXZlZFwiKSwgcyA9PSBudWxsIHx8IHMuYWRkRXZlbnQoXCJ3YWl0aW5nX2Zvcl9jZGVfY29ubmVjdGlvblwiKSwgcGUoXCLilJwgV2FpdGluZyBmb3IgQ0RFIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgICAgICAgY29uc3QgdSA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uc3RhcnRTcGFuKFwiY2RlLmNvbm5lY3RcIiwgdm9pZCAwLCB4ZS5hY3RpdmUoKSksIGQgPSBhd2FpdCB0aGlzLmFueUNkZUNvbm4ud2FpdEZvckxvYWQoe1xuICAgICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgICAgdGltZW91dEVyck1zZzoganJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB1ID09IG51bGwgfHwgdS5lbmQoKSwgcyA9PSBudWxsIHx8IHMuYWRkRXZlbnQoXCJjZGVfY29ubmVjdGVkXCIpLCBwZShcIuKUnCBDREUgY29ubmVjdGlvbiByZWNlaXZlZFwiKSwgYXdhaXQgdnMoZCwgdGhpcy5kZXZpY2VUb2tlbiksIHBlKFwi4pScIENyZWF0aW5nIE9KUyBjb250ZXh0LCBzZXR0aW5nIHVwIGhhbmRsZXJzLi4uXCIpO1xuICAgICAgICAgIGNvbnN0IGYgPSB5ZS5idWlsZE9qc0Zsb3dDb250ZXh0KFxuICAgICAgICAgICAgdGhpcy5jb25maWcsXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZCxcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybURpdigpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmNvbnRleHQuc2V0KGYpLCBPbCh0aGlzLmluaXRGbG93cywgZiwgdGhpcy5mb3JtQ2FsbGJhY2tzKSwgcGUoXCLilJwgU3RhcnRpbmcgT0pTIGluaXQgZmxvd3MuLi5cIiksIGF3YWl0IGJsKHRoaXMuaW5pdEZsb3dzLCBmLCB0aGlzLmZvcm1DYWxsYmFja3MpLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZChsLnRvdGFsQW1vdW50QXRvbXMsIGwuY3VycmVuY3kpLCBwZShcIuKVsCBEb25lIGluaXRpYWxpemluZyBPSlMgZmxvd3MuXCIpLCBzID09IG51bGwgfHwgcy5zZXRTdGF0dXMoeyBjb2RlOiBFZS5PSyB9KSwgZyhcImZvcm1fbG9hZGVkXCIpO1xuICAgICAgICB9IGNhdGNoIChjKSB7XG4gICAgICAgICAgY29uc3QgbCA9IGVlKGMpO1xuICAgICAgICAgIHMgPT0gbnVsbCB8fCBzLnNldFN0YXR1cyh7XG4gICAgICAgICAgICBjb2RlOiBFZS5FUlJPUixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGxcbiAgICAgICAgICB9KSwgdGUoXCLilbAgRXJyb3IgaW5pdGlhbGl6aW5nIE9QIGZvcm06XCIsIGwpLCBnKFwiZm9ybV9pbml0X2Vycm9yXCIsIHtcbiAgICAgICAgICAgIGVycm9yOiBsXG4gICAgICAgICAgfSksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkRXJyb3IobCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgcyA9PSBudWxsIHx8IHMuZW5kKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuc2V0Rm9ybUhlaWdodCA9IChvKSA9PiB7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IG8sIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzICYmIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpLmZvckVhY2goKHMpID0+IHtcbiAgICAgICAgIXMgfHwgcy50eXBlID09PSBfZS5DREVfQlJJREdFIHx8IChzLm5vZGUuc3R5bGUuaGVpZ2h0ID0gbyk7XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZGVkID0gKG8pID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8ICh0aGlzLmNkZUxvYWRFdmVudC5zZXQobyksIGcoXCJjZGVfbG9hZGVkXCIpKTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZEVycm9yID0gKG8pID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8ICh0aGlzLmNkZUxvYWRFdmVudC50aHJvdyhuZXcgRXJyb3IobyksIG8pLCBnKFwiY2RlX2xvYWRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogb1xuICAgICAgfSkpO1xuICAgIH0sIHRoaXMuY3JlYXRlRWxlbWVudCA9IChvLCBzID0ge30pID0+IHtcbiAgICAgIGlmICh0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJjcmVhdGVFbGVtZW50XCIpLCAhdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBjb25zdCBjID0gdW8ucGFyc2UobyksIGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpLCB1ID0gdGhpcy5idWlsZFF1ZXJ5U3RyaW5nKHMpO1xuICAgICAgbC5uYW1lID0gYCR7Y30tZWxlbWVudGA7XG4gICAgICBjb25zdCBkID0gbmV3IFVSTChgL2FwcC92MS8ke2wubmFtZX0vYCwgdGhpcy5jb25maWcuYmFzZVVybCk7XG4gICAgICByZXR1cm4gZC5zZWFyY2ggPSB1LnRvU3RyaW5nKCksIGwuc3JjID0gZC5ocmVmLCBsLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiLCBsLnN0eWxlLndpZHRoID0gXCIxMDAlXCIsIHRoaXMucmVnaXN0ZXJJZnJhbWUoYywgbCk7XG4gICAgfSwgdGhpcy5yZWdpc3RlcklmcmFtZSA9IChvLCBzKSA9PiB7XG4gICAgICBjb25zdCBjID0ge1xuICAgICAgICB0eXBlOiBvLFxuICAgICAgICBub2RlOiBzLFxuICAgICAgICBtb3VudDogKGwpID0+IHtcbiAgICAgICAgICB2YXIgdTtcbiAgICAgICAgICAodSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobCkpID09IG51bGwgfHwgdS5hcHBlbmRDaGlsZChzKSwgZyhcImVsZW1lbnRfbW91bnRlZFwiLCB7XG4gICAgICAgICAgICBlbGVtZW50X3R5cGU6IG9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoeyB0eXBlOiBjLnR5cGUsIG5vZGU6IGMubm9kZSB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgfHwgKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0ge1xuICAgICAgICBbX2UuQ0FSRF06IHZvaWQgMCxcbiAgICAgICAgW19lLkNBUkRfTlVNQkVSXTogdm9pZCAwLFxuICAgICAgICBbX2UuQ0FSRF9FWFBJUlldOiB2b2lkIDAsXG4gICAgICAgIFtfZS5DQVJEX0NWQ106IHZvaWQgMCxcbiAgICAgICAgW19lLkNERV9CUklER0VdOiB2b2lkIDBcbiAgICAgIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50c1tvXSA9IGMsIGM7XG4gICAgfSwgdGhpcy5idWlsZFF1ZXJ5U3RyaW5nID0gKG8pID0+IHtcbiAgICAgIGNvbnN0IHMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICByZXR1cm4gcy5hcHBlbmQoXCJyZWZlcmVyXCIsIHRoaXMucmVmZXJyZXIpLCBzLmFwcGVuZChcImZvcm1JZFwiLCB0aGlzLmZvcm1JZCksIG8uc3R5bGVzICYmIHMuYXBwZW5kKFwic3R5bGVzXCIsIFRsKG8uc3R5bGVzKSksIHMuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbiksIHM7XG4gICAgfSwgdGhpcy5jb25uZWN0VG9FbGVtZW50ID0gKG8pID0+IG10KFxuICAgICAge1xuICAgICAgICBzcGFuTmFtZTogXCJjb25uZWN0X3RvX2VsZW1lbnRcIixcbiAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgIH0sXG4gICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHMgPSBhd2FpdCBEbChvLm5vZGUpO1xuICAgICAgICBzLnRyYWNpbmdDb250ZXh0ID0ge1xuICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICAgIH0sIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuYWRkQ29ubmVjdGlvbihvLnR5cGUsIHMpLCAhdGhpcy5hbnlDZGVDb25uLmN1cnJlbnQuaXNTdWNjZXNzICYmIG8udHlwZSA9PT0gX2UuQ0RFX0JSSURHRSAmJiB0aGlzLmFueUNkZUNvbm4uc2V0KHMpO1xuICAgICAgfVxuICAgICkuY2F0Y2goKHMpID0+IHRlKFwiW0ZPUk1dIEVycm9yIGNvbm5lY3RpbmcgdG8gQ0RFIGlmcmFtZVwiLCBzKSksIHRoaXMuZ2V0Rm9ybURpdiA9ICgpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5LCB0aGlzLnN1Ym1pdENhcmQgPSBhc3luYyAobykgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNTdWJtaXR0aW5nKSB7XG4gICAgICAgIHRlKFwiRm9ybSBpcyBhbHJlYWR5IHN1Ym1pdHRpbmcuIFBsZWFzZSB3YWl0IGZvciB0aGUgc3VibWlzc2lvbiB0byBmaW5pc2ggYmVmb3JlIHN1Ym1pdHRpbmcgYWdhaW4uXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmlzU3VibWl0dGluZyA9ICEwO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcyA9IGF3YWl0IG10KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNwYW5OYW1lOiBcInN1Ym1pdF9jYXJkXCIsXG4gICAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlcixcbiAgICAgICAgICAgIHBheW1lbnRSb3V0ZUlkOiBvID09IG51bGwgPyB2b2lkIDAgOiBvLnBheW1lbnRSb3V0ZUlkXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBnKFwic3VibWl0X2NhcmRcIiwgeyAuLi5vIH0pLCB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJzdWJtaXRDYXJkXCIpO1xuICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgIGlmICghYylcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgICAgIGF3YWl0IFQuY29tbW9uQ0MucnVuKHtcbiAgICAgICAgICAgICAgY29udGV4dDogYyxcbiAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBtZShjLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGooYy5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Q2RlQ29ubmVjdGlvbnM6IHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZ2V0QWxsQ29ubmVjdGlvbnMoKSxcbiAgICAgICAgICAgICAgICBwYXltZW50Um91dGVJZDogbyA9PSBudWxsID8gdm9pZCAwIDogby5wYXltZW50Um91dGVJZFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTdWJtaXR0aW5nID0gITEsIHM7XG4gICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgIHRocm93IHRoaXMuaXNTdWJtaXR0aW5nID0gITEsIHM7XG4gICAgICB9XG4gICAgfSwgdGhpcy5nZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcyA9ICgpID0+IG10KFxuICAgICAge1xuICAgICAgICBzcGFuTmFtZTogXCJnZXRfYXZhaWxhYmxlX3BheW1lbnRfbWV0aG9kc1wiLFxuICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHNcIik7XG4gICAgICAgIGNvbnN0IG8gPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgIGlmICghbylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIGdldHRpbmcgYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kcy5cIik7XG4gICAgICAgIGNvbnN0IHsgcHJvY2Vzc29yczogcywgaXNBdmFpbGFibGU6IGMgfSA9IExyKFxuICAgICAgICAgIHRoaXMuaW5pdEZsb3dzXG4gICAgICAgICksIHsgcHJvY2Vzc29yczogbCwgaXNBdmFpbGFibGU6IHUgfSA9IERyKFxuICAgICAgICAgIHRoaXMuaW5pdEZsb3dzXG4gICAgICAgICksIGQgPSB0aGlzLmluaXRGbG93cy5wYXlwYWwucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpLCBmID0gKGQgPT0gbnVsbCA/IHZvaWQgMCA6IGQuaXNBdmFpbGFibGUpID8/ICExLCBfID0gby5jaGVja291dFBheW1lbnRNZXRob2RzLnNvbWUoXG4gICAgICAgICAgKHcpID0+IHcucHJvY2Vzc29yX25hbWUgPT09IFwicG9ja3l0XCIgJiYgdy5wcm92aWRlciA9PT0gXCJwYXlwYWxcIlxuICAgICAgICApLCBtID0gdGhpcy5pbml0Rmxvd3MubG9vcC5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCksIHkgPSAobSA9PSBudWxsID8gdm9pZCAwIDogbS5pc0F2YWlsYWJsZSkgPz8gITEsIGggPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogUi5hcHBsZVBheSxcbiAgICAgICAgICAgIHByb2Nlc3NvcnM6IHMsXG4gICAgICAgICAgICBpc0F2YWlsYWJsZTogY1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogUi5nb29nbGVQYXksXG4gICAgICAgICAgICBwcm9jZXNzb3JzOiBsLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IHVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFIucGF5cGFsLFxuICAgICAgICAgICAgcHJvY2Vzc29yczogZiA/IFtVLkVudW0ucGF5cGFsXSA6IFtdLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IGZcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFIucG9ja3l0UGF5cGFsLFxuICAgICAgICAgICAgcHJvY2Vzc29yczogXyA/IFtVLkVudW0ucG9ja3l0XSA6IFtdLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IF9cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFIubG9vcENyeXB0byxcbiAgICAgICAgICAgIHByb2Nlc3NvcnM6IHkgPyBbVS5FbnVtLmxvb3BdIDogW10sXG4gICAgICAgICAgICBpc0F2YWlsYWJsZTogeVxuICAgICAgICAgIH1cbiAgICAgICAgXSwgYiA9IHtcbiAgICAgICAgICBwYXlwYWw6IFIucGF5cGFsLFxuICAgICAgICAgIGFpcndhbGxleEdvb2dsZVBheTogUi5haXJ3YWxsZXhHb29nbGVQYXksXG4gICAgICAgICAgYWlyd2FsbGV4QXBwbGVQYXk6IFIuYWlyd2FsbGV4QXBwbGVQYXksXG4gICAgICAgICAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiBSLmF1dGhvcml6ZW5ldEdvb2dsZVBheSxcbiAgICAgICAgICBhdXRob3JpemVOZXRBcHBsZVBheTogUi5hdXRob3JpemVuZXRBcHBsZVBheSxcbiAgICAgICAgICBhZHllbkdvb2dsZVBheTogUi5hZHllbkdvb2dsZVBheSxcbiAgICAgICAgICBhZHllbkFwcGxlUGF5OiBSLmFkeWVuQXBwbGVQYXlcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIFsuLi5PYmplY3QuZW50cmllcyh0aGlzLmluaXRGbG93cykubWFwKChbdywgRV0pID0+IHtcbiAgICAgICAgICBjb25zdCBDID0gRS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IGJbd10gPz8gdyxcbiAgICAgICAgICAgIHByb2Nlc3NvcnM6IFtdLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IChDID09IG51bGwgPyB2b2lkIDAgOiBDLmlzQXZhaWxhYmxlKSA/PyAhMVxuICAgICAgICAgIH07XG4gICAgICAgIH0pLCAuLi5oXTtcbiAgICAgIH1cbiAgICApLCB0aGlzLmdlbmVyYWxTdWJtaXQgPSBhc3luYyAobywgcykgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNTdWJtaXR0aW5nKSB7XG4gICAgICAgIHRlKFwiRm9ybSBpcyBhbHJlYWR5IHN1Ym1pdHRpbmcuIFBsZWFzZSB3YWl0IGZvciB0aGUgc3VibWlzc2lvbiB0byBmaW5pc2ggYmVmb3JlIHN1Ym1pdHRpbmcgYWdhaW4uXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmlzU3VibWl0dGluZyA9ICEwO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYyA9IGF3YWl0IG10KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNwYW5OYW1lOiBcImdlbmVyYWxfZm9ybV9zdWJtaXRcIixcbiAgICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBnKFwiZ2VuZXJhbF9mb3JtX3N1Ym1pdFwiLCB7IG1ldGhvZDogbywgc2V0dGluZ3M6IHMgfSksIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImdlbmVyYWxTdWJtaXRcIik7XG4gICAgICAgICAgICBjb25zdCBsID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgaWYgKCFsKVxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICAgICAgc3dpdGNoIChvKSB7XG4gICAgICAgICAgICAgIGNhc2UgUi5wb2NreXRQYXlwYWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFQucG9ja3l0UGF5cGFsLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBsLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBtZShcbiAgICAgICAgICAgICAgICAgICAgbC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBBZS5QQVlQQUwsXG4gICAgICAgICAgICAgICAgICAgIFwicG9ja3l0XCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGwuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3M6IHMgfSxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFIucGF5cGFsOlxuICAgICAgICAgICAgICAgIHJldHVybiBULnBheXBhbC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogbCxcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbWUoXG4gICAgICAgICAgICAgICAgICAgIGwuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgQWUuUEFZUEFMLFxuICAgICAgICAgICAgICAgICAgICBcInBheXBhbFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihsLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiBzIH0sXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3NcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBSLmxvb3BDcnlwdG86XG4gICAgICAgICAgICAgICAgcmV0dXJuIFQubG9vcENyeXB0by5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogbCxcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbWUoXG4gICAgICAgICAgICAgICAgICAgIGwuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgXCJjcnlwdG9cIixcbiAgICAgICAgICAgICAgICAgICAgXCJsb29wXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGwuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHMsXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBSLmFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydEZsb3c6IHUgfSA9IExyKHRoaXMuaW5pdEZsb3dzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdShzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFIuZ29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydEZsb3c6IHUgfSA9IERyKHRoaXMuaW5pdEZsb3dzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdShzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFIuYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdSA9IHRoaXMuaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCF1KSB7XG4gICAgICAgICAgICAgICAgICB0ZShcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUuc3RhcnRGbG93KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgUi5haXJ3YWxsZXhBcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCF1KSB7XG4gICAgICAgICAgICAgICAgICB0ZShcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXgtYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdS5zdGFydEZsb3cocyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBSLmF1dGhvcml6ZW5ldEdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghdSkge1xuICAgICAgICAgICAgICAgICAgdGUoXG4gICAgICAgICAgICAgICAgICAgIFwiYXV0aG9yaXplLW5ldC1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdS5zdGFydEZsb3cocyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBSLmF1dGhvcml6ZW5ldEFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdSA9IHRoaXMuaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEFwcGxlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXUpIHtcbiAgICAgICAgICAgICAgICAgIHRlKFxuICAgICAgICAgICAgICAgICAgICBcImF1dGhvcml6ZS1uZXQtYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdS5zdGFydEZsb3cocyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBSLmFkeWVuR29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdSA9IHRoaXMuaW5pdEZsb3dzLmFkeWVuR29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXUpIHtcbiAgICAgICAgICAgICAgICAgIHRlKFxuICAgICAgICAgICAgICAgICAgICBcImFkeWVuLWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnN0YXJ0RmxvdyhzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFIuYWR5ZW5BcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5hZHllbkFwcGxlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXUpIHtcbiAgICAgICAgICAgICAgICAgIHRlKFxuICAgICAgICAgICAgICAgICAgICBcImFkeWVuLWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUuc3RhcnRGbG93KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgUi5haXJ3YWxsZXhBQ0g6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFQuYWlyd2FsbGV4QUNILnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBsLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBtZShcbiAgICAgICAgICAgICAgICAgICAgbC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBBZS5BQ0gsXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4XCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGwuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHMsXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBSLmFpcndhbGxleEVGVDpcbiAgICAgICAgICAgICAgICByZXR1cm4gVC5haXJ3YWxsZXhFRlQucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGwsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG1lKFxuICAgICAgICAgICAgICAgICAgICBsLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIEFlLkVGVCxcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXhcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGoobC5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogcyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFIuYWlyd2FsbGV4QkFDUzpcbiAgICAgICAgICAgICAgICByZXR1cm4gVC5haXJ3YWxsZXhCQUNTLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBsLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBtZShcbiAgICAgICAgICAgICAgICAgICAgbC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBBZS5CQUNTLFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihsLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgUi5haXJ3YWxsZXhTRVBBOlxuICAgICAgICAgICAgICAgIHJldHVybiBULmFpcndhbGxleFNFUEEucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGwsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG1lKFxuICAgICAgICAgICAgICAgICAgICBsLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIEFlLlNFUEEsXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4XCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGwuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHMsXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBrdChvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU3VibWl0dGluZyA9ICExLCBjO1xuICAgICAgfSBjYXRjaCAoYykge1xuICAgICAgICB0aHJvdyB0aGlzLmlzU3VibWl0dGluZyA9ICExLCBjO1xuICAgICAgfVxuICAgIH0sIHRoaXMuc3VibWl0ID0gdGhpcy5zdWJtaXRDYXJkLCB0aGlzLmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICB2YXIgbztcbiAgICAgIHBlKFwiRGVzdHJveWluZyBPcGVuUGF5IGZvcm0uLi5cIiksIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImRlc3Ryb3lcIiksIHRoaXMuaXNEZXN0cm95ZWQgPSAhMDtcbiAgICAgIGZvciAoY29uc3QgcyBvZiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID8/IHt9KSlcbiAgICAgICAgcyAmJiBzLm5vZGUucmVtb3ZlKCk7XG4gICAgICAobyA9ICQoKSkgPT0gbnVsbCB8fCBvLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpLCB2aSgpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIGRlbGV0ZSB3aW5kb3cub2pzLCBnKFwiZm9ybV9kZXN0cm95ZWRcIik7XG4gICAgfSwgdGhpcy51cGRhdGVDYWxsYmFja3MgPSAobykgPT4ge1xuICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLnNldENhbGxiYWNrcyhvKTtcbiAgICB9LCB5ZS5hc3NpZ25Bc1NpbmdsZXRvbih0aGlzKSwgdGhpcy5vanNWZXJzaW9uID0gXCIwLjUuNFwiLCB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uID0gXCJsb2NhbF9idWlsZFwiLCB0aGlzLmJhc2VVcmwgPSB0LmJhc2VVcmwgPz8gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCB0aGlzLmNvbmZpZyA9IHsgLi4udCwgYmFzZVVybDogdGhpcy5iYXNlVXJsIH0sIHRoaXMuZm9ybUNhbGxiYWNrcyA9IEJ0LmZyb21PYmplY3QodCksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbCwgdGhpcy5mb3JtSWQgPSBgb3Bqcy1mb3JtLSR7djQoKX1gLCB0aGlzLnJlZmVycmVyID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiwgdGhpcy5mb3JtVGFyZ2V0ID0gdC5mb3JtVGFyZ2V0ID8/IFwiYm9keVwiLCB0aGlzLmZvcm1Qcm9wZXJ0aWVzID0geyBoZWlnaHQ6IFwiMXB4XCIgfSwgdGhpcy5jb25uZWN0aW9uTWFuYWdlciA9IG5ldyB4bCgpLCB0aGlzLmRldmljZVRva2VuID0gVG4oKSwgd2koKTtcbiAgICBjb25zdCB7IGZyYW1ld29yazogciwgdmVyc2lvbjogbiB9ID0ga2woKTtcbiAgICBwbih0aGlzLmJhc2VVcmwpLnRoZW4oKG8pID0+IHtcbiAgICAgIGlmICghcXQuY3VycmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgcyA9IHtcbiAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIGVudmlyb25tZW50OiBvLFxuICAgICAgICAgIGZyYW1ld29yazogcixcbiAgICAgICAgICBmcmFtZXdvcmtWZXJzaW9uOiBuLFxuICAgICAgICAgIG9qc1ZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICBvanNSZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlcixcbiAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmxcbiAgICAgICAgfTtcbiAgICAgICAgcXQuc2V0KHMpO1xuICAgICAgfVxuICAgIH0pLCBnKFwiZm9ybV9pbml0XCIpLCBjb25zb2xlLmxvZyhcIk9KUyBWRVJTSU9OXCIsIHRoaXMub2pzVmVyc2lvbiksIHQuYWxsb3dUcmFjaW5nID09PSAhMCAmJiBObCh0aGlzLm9qc1ZlcnNpb24sIHRoaXMuYmFzZVVybCksIHRoaXMuZXZlbnRIYW5kbGVyID0gbmV3IExsKHRoaXMuZm9ybUlkLCB0aGlzLmJhc2VVcmwsIHRoaXMuZm9ybUNhbGxiYWNrcywge1xuICAgICAgc2V0Rm9ybUhlaWdodDogdGhpcy5zZXRGb3JtSGVpZ2h0LFxuICAgICAgb25DZGVMb2FkZWQ6IHRoaXMub25DZGVMb2FkZWQsXG4gICAgICBvbkNkZUxvYWRFcnJvcjogdGhpcy5vbkNkZUxvYWRFcnJvclxuICAgIH0pLCAoYSA9ICQoKSkgPT0gbnVsbCB8fCBhLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpLCB0aGlzLnN0YXJ0Rm9ybUluaXQoKTtcbiAgfVxuICBnZXQgY2hlY2tvdXRTZWN1cmVUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbjtcbiAgfVxuICBjaGVja1ZhbGlkRm9ybUluc3RhbmNlKHQgPSBcInVua25vd25cIikge1xuICAgIGNvbnN0IHIgPSB5ZS5nZXRJbnN0YW5jZSgpLCBuID0ge1xuICAgICAgY2FsbGVyOiB0LFxuICAgICAgdGhpc0Zvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICBjdXJyZW50Rm9ybUlkOiAociA9PSBudWxsID8gdm9pZCAwIDogci5mb3JtSWQpIHx8IFwibm8tY3VycmVudC1pbnN0YW5jZVwiLFxuICAgICAgaXNEZXN0cm95ZWQ6IHRoaXMuaXNEZXN0cm95ZWQsXG4gICAgICBjaGVja291dFRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLnN1YnN0cmluZygwLCAxMCkgKyBcIi4uLlwiXG4gICAgfSwgYSA9IGBcbiAgICAgIFtXYXJuaW5nXSBJbnZhbGlkIGZvcm0gaW5zdGFuY2UgZGV0ZWN0ZWQuXG4gICAgICBJdCBsb29rcyBsaWtlIHlvdSBhcmUgc3RpbGwgdXNpbmcgYW4gb2xkIGluc3RhbmNlIHRoYXQgaGFzIGJlZW4gZGVzdHJveWVkLlxuICAgICAgUGxlYXNlIG1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBsYXRlc3QgaW5zdGFuY2Ugb2YgdGhlIGZvcm0gYW5kIGNsZWFudXAgZXZlbnQgbGlzdGVuZXJzLlxuICAgICAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgICBEZWJ1ZyBJbmZvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAtIGNhbGxlcjogJHt0fVxuICAgICAgLSBjYWxsZXJfZm9ybV9pZDogJHtuLnRoaXNGb3JtSWR9XG4gICAgICAtIGN1cnJlbnRfYWN0aXZlX2Zvcm1faWQ6ICR7bi5jdXJyZW50Rm9ybUlkfVxuICAgICAgLSBpc19kZXN0cm95ZWQ6ICR7bi5pc0Rlc3Ryb3llZH1cbiAgICAgIC0gY2hlY2tvdXRfdG9rZW46ICR7bi5jaGVja291dFRva2VufVxuICAgIGA7XG4gICAgcmV0dXJuIHRoaXMuaXNEZXN0cm95ZWQgPyAodGUoYSksIGcoXCJvdXRkYXRlZF9mb3JtX2luc3RhbmNlXCIsIHsgZXJyb3I6IGEgfSksICExKSA6ICFyIHx8IHIuZm9ybUlkICE9PSB0aGlzLmZvcm1JZCA/ICh0ZShhKSwgZyhcIm91dGRhdGVkX2Zvcm1faW5zdGFuY2VcIiwgeyBlcnJvcjogYSB9KSwgITEpIDogITA7XG4gIH1cbn07XG55ZS5vanNGbG93cyA9IFQsIHllLmFzc2lnbkFzU2luZ2xldG9uID0gKHQpID0+IHtcbiAgaWYgKHllLmdldEluc3RhbmNlKCkpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBpbnN0YW5jZSBhbHJlYWR5IGV4aXN0cy4gT25seSBvbmUgaW5zdGFuY2UgaXMgYWxsb3dlZC5cIik7XG4gIHdpbmRvdy5vanMgPSB0O1xufSwgeWUuZ2V0SW5zdGFuY2UgPSAoKSA9PiB3aW5kb3cub2pzID8/IG51bGwsIHllLmJ1aWxkT2pzRmxvd0NvbnRleHQgPSAodCwgciwgbiwgYSkgPT4gKHtcbiAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdC5jaGVja291dFNlY3VyZVRva2VuLFxuICBiYXNlVXJsOiBuZXcgVVJMKHQuYmFzZVVybCA/PyBDbikub3JpZ2luLFxuICBmb3JtRGl2OiBhLFxuICBlbGVtZW50c1Nlc3Npb25JZDogci5zZXNzaW9uSWQsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgYW55Q2RlQ29ubmVjdGlvbjogbixcbiAgY3VzdG9tSW5pdFBhcmFtczogdC5jdXN0b21Jbml0UGFyYW1zID8/IHt9LFxuICBwcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb246IHQucHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uXG59KTtcbmxldCAkciA9IHllO1xuXG5jb25zdCB1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuZnJvbU9iamVjdCh7XG4gICAgb25Gb2N1czogcHJvcHMub25Gb2N1cyxcbiAgICBvbkJsdXI6IHByb3BzLm9uQmx1cixcbiAgICBvbkNoYW5nZTogcHJvcHMub25DaGFuZ2UsXG4gICAgb25Mb2FkOiBwcm9wcy5vbkxvYWQsXG4gICAgb25Mb2FkRXJyb3I6IHByb3BzLm9uTG9hZEVycm9yLFxuICAgIG9uVmFsaWRhdGlvbkVycm9yOiBwcm9wcy5vblZhbGlkYXRpb25FcnJvcixcbiAgICBvbkNoZWNrb3V0U3RhcnRlZDogcHJvcHMub25DaGVja291dFN0YXJ0ZWQsXG4gICAgb25DaGVja291dFN1Y2Nlc3M6IHByb3BzLm9uQ2hlY2tvdXRTdWNjZXNzLFxuICAgIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogcHJvcHMub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzLFxuICAgIG9uQ2hlY2tvdXRFcnJvcjogcHJvcHMub25DaGVja291dEVycm9yLFxuICAgIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBwcm9wcy5vblBheW1lbnRSZXF1ZXN0TG9hZFxuICB9KTtcbiAgaWYgKCRyLmdldEluc3RhbmNlKCkpIHtcbiAgICAkci5nZXRJbnN0YW5jZSgpPy51cGRhdGVDYWxsYmFja3MoZm9ybUNhbGxiYWNrcy5nZXQpO1xuICB9XG4gIHJldHVybiBmb3JtQ2FsbGJhY2tzLmdldDtcbn07XG5cbmNvbnN0IEZPUk1fVEFSR0VUID0gXCJvcF9vanNfZm9ybVwiO1xuY29uc3QgRWxlbWVudHNGb3JtID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IFtvcEZvcm0sIHNldE9wRm9ybV0gPSB1c2VTdGF0ZSgpO1xuICBjb25zdCBbZWxlbWVudHNDb250ZXh0VmFsdWUsIHNldEVsZW1lbnRzQ29udGV4dFZhbHVlXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbbG9hZGVkLCBzZXRMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbYXBwbGVQYXlSZXN1bHQsIHNldEFwcGxlUGF5UmVzdWx0XSA9IHVzZVN0YXRlKE1PQklMRV9XQUxMRVRfTE9BRElOR19TVEFURSk7XG4gIGNvbnN0IFtnb29nbGVQYXlSZXN1bHQsIHNldEdvb2dsZVBheVJlc3VsdF0gPSB1c2VTdGF0ZShNT0JJTEVfV0FMTEVUX0xPQURJTkdfU1RBVEUpO1xuICBjb25zdCBbc3RyaXBlTGlua0N0cmwsIHNldFN0cmlwZUxpbmtDdHJsXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbbG9vcENvbmZpZywgc2V0TG9vcENvbmZpZ10gPSB1c2VTdGF0ZShMT09QX0xPQURJTkcpO1xuICBjb25zdCBbYWlyd2FsbGV4LCBzZXRBaXJ3YWxsZXhdID0gdXNlU3RhdGUoe1xuICAgIGdvb2dsZVBheTogQVdYX0xPQURJTkcsXG4gICAgYXBwbGVQYXk6IEFXWF9MT0FESU5HXG4gIH0pO1xuICBjb25zdCBmb3JtQ2FsbGJhY2tzID0gdXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzKHtcbiAgICAuLi5wcm9wcyxcbiAgICBvbkxvYWQ6ICh0b3RhbEFtb3VudEF0b21zLCBjdXJyZW5jeSkgPT4ge1xuICAgICAgc2V0TG9hZGVkKHRydWUpO1xuICAgICAgcHJvcHMub25Mb2FkPy4odG90YWxBbW91bnRBdG9tcywgY3VycmVuY3kpO1xuICAgICAgaWYgKG9wRm9ybSkge1xuICAgICAgICBjb25zdCBhcHBsZVBheVJlc3VsdDIgPSBnZXRBcHBsZVBheVByb2Nlc3NvcnMob3BGb3JtLmluaXRGbG93cyk7XG4gICAgICAgIHNldEFwcGxlUGF5UmVzdWx0KGFwcGxlUGF5UmVzdWx0Mik7XG4gICAgICAgIGNvbnN0IGdvb2dsZVBheVJlc3VsdDIgPSBnZXRHb29nbGVQYXlQcm9jZXNzb3JzKG9wRm9ybS5pbml0Rmxvd3MpO1xuICAgICAgICBzZXRHb29nbGVQYXlSZXN1bHQoZ29vZ2xlUGF5UmVzdWx0Mik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob3BGb3JtKSByZXR1cm47XG4gICAgY29uc3QgZm9ybSA9ICRyLmdldEluc3RhbmNlKCkgPz8gbmV3ICRyKHtcbiAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHByb3BzLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICBmb3JtVGFyZ2V0OiBgIyR7Rk9STV9UQVJHRVR9YCxcbiAgICAgIGJhc2VVcmw6IHByb3BzLmJhc2VVcmwsXG4gICAgICBjdXN0b21Jbml0UGFyYW1zOiBwcm9wcy5jdXN0b21Jbml0UGFyYW1zLFxuICAgICAgYWxsb3dUcmFjaW5nOiBwcm9wcy5hbGxvd1RyYWNpbmcgPz8gZmFsc2UsXG4gICAgICBwcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb246IHByb3BzLnByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvbixcbiAgICAgIC4uLmZvcm1DYWxsYmFja3NcbiAgICB9KTtcbiAgICBzZXRPcEZvcm0oZm9ybSk7XG4gICAgY29uc3QgdmFsdWUgPSBnZXRFbGVtZW50c0NvbnRleHRWYWx1ZShmb3JtKTtcbiAgICBzZXRFbGVtZW50c0NvbnRleHRWYWx1ZSh2YWx1ZSk7XG4gICAgZm9ybS5pbml0Rmxvd3Muc3RyaXBlTGluay5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRTdHJpcGVMaW5rQ3RybChyZXN1bHQubG9hZGVkVmFsdWUuY29udHJvbGxlcik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MubG9vcC5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRMb29wQ29uZmlnKHtcbiAgICAgICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIHdpZGdldDogcmVzdWx0LmxvYWRlZFZhbHVlLndpZGdldFByb3BzLFxuICAgICAgICAgIGNvbmZpZzogcmVzdWx0LmxvYWRlZFZhbHVlLmluaXRMb29wQ29ubmVjdFByb3BzXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmICFyZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0TG9vcENvbmZpZyh7XG4gICAgICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgd2lkZ2V0OiBudWxsLFxuICAgICAgICAgIGNvbmZpZzogbnVsbFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JtLmluaXRGbG93cy5haXJ3YWxsZXhHb29nbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUpIHtcbiAgICAgICAgc2V0QWlyd2FsbGV4KChwcmV2KSA9PiAoe1xuICAgICAgICAgIGFwcGxlUGF5OiBwcmV2LmFwcGxlUGF5LFxuICAgICAgICAgIGdvb2dsZVBheTogcmVzdWx0LmxvYWRlZFZhbHVlXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JtLmluaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZSkge1xuICAgICAgICBzZXRBaXJ3YWxsZXgoKHByZXYpID0+ICh7XG4gICAgICAgICAgZ29vZ2xlUGF5OiBwcmV2Lmdvb2dsZVBheSxcbiAgICAgICAgICBhcHBsZVBheTogcmVzdWx0LmxvYWRlZFZhbHVlXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZm9ybS5kZXN0cm95KCk7XG4gICAgfTtcbiAgfSwgW10pO1xuICBpZiAoIW9wRm9ybSkge1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSk7XG4gIH1cbiAgY29uc3QgY2hpbGRyZW5Qcm9wcyA9IHtcbiAgICBzdWJtaXQ6IG9wRm9ybS5zdWJtaXRDYXJkLFxuICAgIHN1Ym1pdFdpdGg6IG9wRm9ybS5nZW5lcmFsU3VibWl0LFxuICAgIGFwcGxlUGF5OiBhcHBsZVBheVJlc3VsdCxcbiAgICBnb29nbGVQYXk6IGdvb2dsZVBheVJlc3VsdCxcbiAgICBsb2FkZWQsXG4gICAgLy8gRGlzYWJsZSBkeW5hbWljIHByZXZpZXdzIGZlYXR1cmUgZm9yIG5vd1xuICAgIHByZXZpZXc6IHtcbiAgICAgIGFtb3VudDogbnVsbCxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBlcnJvcjogbnVsbFxuICAgIH0sXG4gICAgc3RyaXBlTGluazogc3RyaXBlTGlua0N0cmwsXG4gICAgYWlyd2FsbGV4LFxuICAgIGxvb3A6IGxvb3BDb25maWdcbiAgfTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHsgY2hpbGRyZW46IGVsZW1lbnRzQ29udGV4dFZhbHVlID8gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50c0NvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IGVsZW1lbnRzQ29udGV4dFZhbHVlLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChcImRpdlwiLCB7IGlkOiBGT1JNX1RBUkdFVCwgY2xhc3NOYW1lOiBwcm9wcy5jbGFzc05hbWUsIGNoaWxkcmVuOiBwcm9wcy5jaGlsZHJlbihjaGlsZHJlblByb3BzKSB9KSB9KSA6IC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHt9KSB9KTtcbn07XG5jb25zdCBnZXRFbGVtZW50c0NvbnRleHRWYWx1ZSA9IChvcEZvcm0pID0+IHtcbiAgcmV0dXJuIHtcbiAgICBmb3JtSWQ6IG9wRm9ybS5mb3JtSWQsXG4gICAgZm9ybUhlaWdodDogb3BGb3JtLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCxcbiAgICByZWZlcnJlcjogb3BGb3JtLnJlZmVycmVyLFxuICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IG9wRm9ybS5jaGVja291dFNlY3VyZVRva2VuLFxuICAgIHJlZ2lzdGVySWZyYW1lOiBvcEZvcm0ucmVnaXN0ZXJJZnJhbWUsXG4gICAgYmFzZVVybDogb3BGb3JtLmJhc2VVcmxcbiAgfTtcbn07XG5cbmV4cG9ydCB7ICRpIGFzICQsIENhcmRDdmNFbGVtZW50IGFzIEMsIEVlIGFzIEUsIEZpZWxkTmFtZSBhcyBGLCBLdCBhcyBLLCBQciBhcyBQLCBRdCBhcyBRLCBTdWJtaXRNZXRob2RzIGFzIFMsIFZpIGFzIFYsIFdpIGFzIFcsIFgsIFp0IGFzIFosIEV0IGFzIGEsIGl0IGFzIGIsIENhcmRFbGVtZW50IGFzIGMsIENhcmRFeHBpcnlFbGVtZW50IGFzIGQsIENhcmROdW1iZXJFbGVtZW50IGFzIGUsIGZuIGFzIGYsIGduIGFzIGcsIEVsZW1lbnRzRm9ybSBhcyBoLCBpcyBhcyBpLCBqZSBhcyBqLCBFbnZpcm9ubWVudCBhcyBrLCBQYXlJbkZhaWxlZCBhcyBsLCBQYXlJblN0YXRlIGFzIG0sIHJzIGFzIHIsIHN0IGFzIHMsIHRzIGFzIHQsIHVzZU9wZW5QYXlFbGVtZW50cyBhcyB1LCB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHMgYXMgdiwgeGUgYXMgeCwgeW4gYXMgeSwgenQgYXMgeiB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsa0JBQUFBLFVBQXNCO0FBQy9CLFNBQVMsS0FBS0MsU0FBVztBQUN6QixPQUFPQyxRQUFXO0FBQ2xCLFNBQVMsTUFBQUMsVUFBVTtBQUNuQixTQUFTLE9BQUFDLElBQUssWUFBQUMsVUFBZ0I7QUFDOUIsU0FBUyxpQkFBQUMsSUFBZSxjQUFBQyxJQUFZLFlBQUFDLElBQVUsVUFBQUMsSUFBUSxXQUFBQyxJQUFTLGFBQUFDLFVBQWlCO0FBRWhGLFNBQVNDLEdBQVNDLEdBQVFDLEdBQVc7QUFDbkMsTUFBSUMsSUFBaUIsT0FBTztBQUM1QixFQUFBQSxJQUFpQkEsRUFBZUYsR0FBUUMsQ0FBUyxJQUFJRCxFQUFPLFlBQVlDO0FBQzFFO0FBQ0EsU0FBU0UsR0FBU0gsR0FBUUksR0FBSTtBQUM1QixFQUFJQSxNQUFPLFdBQ1RBLElBQUtKLEVBQU87QUFHZCxNQUFJSyxJ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IiwgImNoYWxrIiwgInY0IiwgImpzeCIsICJGcmFnbWVudCIsICJjcmVhdGVDb250ZXh0IiwgInVzZUNvbnRleHQiLCAidXNlU3RhdGUiLCAidXNlUmVmIiwgInVzZU1lbW8iLCAidXNlRWZmZWN0IiwgImZpeFByb3RvIiwgInRhcmdldCIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiZm4iLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzJDEiLCAiX2V4dGVuZFN0YXRpY3MiLCAiZCIsICJiIiwgInAiLCAiX18iLCAiX3N1cGVyIiwgIkN1c3RvbUVycm9yIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJfbmV3VGFyZ2V0IiwgIl90aGlzIiwgIlJlcXVpcmVkU3RyaW5nIiwgIk9wdGlvbmFsU3RyaW5nIiwgIm51bGxPclVuZGVmT3IkMSIsICJ6VHlwZSIsICJGaWVsZE5hbWUiLCAiRmllbGROYW1lMiIsICJGaWVsZE5hbWVFbnVtIiwgIlByaXZhdGVGaWVsZE5hbWUiLCAiUHJpdmF0ZUZpZWxkTmFtZTIiLCAiUHJpdmF0ZUZpZWxkTmFtZUVudW0iLCAiQWxsRmllbGROYW1lcyIsICJFbGVtZW50VHlwZUVudW0iLCAiRWxlbWVudFR5cGVFbnVtMiIsICJDaGVja291dFBheW1lbnRNZXRob2QkMSIsICJQYXltZW50TWV0aG9kTWluaW1hbCIsICJFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRQYXlsb2FkIiwgIklucHV0RXZlbnRUeXBlIiwgIklucHV0RXZlbnRQYXlsb2FkIiwgIkVycm9yRXZlbnRUeXBlIiwgIkVycm9yRXZlbnRQYXlsb2FkIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQiLCAiTGF5b3V0RXZlbnRQYXlsb2FkIiwgIkxvYWRlZEV2ZW50UGF5bG9hZCIsICJQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQiLCAiU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgIlBSRm9ybUZpZWxkcyIsICJTdWJtaXRFdmVudFR5cGUiLCAiU3VibWl0RXZlbnRQYXlsb2FkIiwgIlRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgIkZpZWxkVmFsaWRhdGlvbkVycm9yIiwgIlRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UiLCAiQVdYQmFuayIsICJDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEiLCAiRUZURm9ybURhdGEiLCAiQkFDU0Zvcm1EYXRhIiwgIlNFUEFGb3JtRGF0YSIsICJudWxsT3JVbmRlZk9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZUFkZHJlc3MiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSIsICJOZXdDdXN0b21lckZpZWxkcyIsICJQcmljZVF0eSIsICJDYXJ0SW5mbyIsICJQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yIiwgIlpvZEZpZWxkRXJyb3IiLCAibWFrZUNhbGxiYWNrU2FmZSIsICJjYWxsYmFja05hbWUiLCAiZXJyb3JMb2dnZXIiLCAiYXJncyIsICJlcnJvciIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJwcmVmaXgiLCAibG9nIiwgImVyciIsICJleHRlbmRTdGF0aWNzIiwgIl9fZXh0ZW5kcyIsICJfX2F3YWl0ZXIiLCAidGhpc0FyZyIsICJfYXJndW1lbnRzIiwgIlAiLCAiZ2VuZXJhdG9yIiwgImFkb3B0IiwgInZhbHVlIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImZ1bGZpbGxlZCIsICJzdGVwIiwgImUiLCAicmVqZWN0ZWQiLCAicmVzdWx0IiwgIl9fZ2VuZXJhdG9yIiwgImJvZHkiLCAiXyIsICJ0IiwgImYiLCAieSIsICJnIiwgInZlcmIiLCAibiIsICJ2IiwgIm9wIiwgIl9fdmFsdWVzIiwgIm8iLCAicyIsICJtIiwgImkiLCAiX19yZWFkIiwgInIiLCAiYXIiLCAiX19zcHJlYWRBcnJheSIsICJ0byIsICJmcm9tIiwgInBhY2siLCAibCIsICJfX2F3YWl0IiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAicSIsICJhd2FpdFJldHVybiIsICJhIiwgInJlc3VtZSIsICJzZXR0bGUiLCAiZnVsZmlsbCIsICJfX2FzeW5jVmFsdWVzIiwgImlzRnVuY3Rpb24iLCAidmFsdWUiLCAiY3JlYXRlRXJyb3JDbGFzcyIsICJjcmVhdGVJbXBsIiwgIl9zdXBlciIsICJpbnN0YW5jZSIsICJjdG9yRnVuYyIsICJVbnN1YnNjcmlwdGlvbkVycm9yIiwgImVycm9ycyIsICJlcnIiLCAiYXJyUmVtb3ZlIiwgImFyciIsICJpdGVtIiwgImluZGV4IiwgIlN1YnNjcmlwdGlvbiIsICJpbml0aWFsVGVhcmRvd24iLCAiZV8xIiwgIl9hIiwgImVfMiIsICJfYiIsICJfcGFyZW50YWdlIiwgIl9wYXJlbnRhZ2VfMSIsICJfX3ZhbHVlcyIsICJfcGFyZW50YWdlXzFfMSIsICJwYXJlbnRfMSIsICJlXzFfMSIsICJpbml0aWFsRmluYWxpemVyIiwgImUiLCAiX2ZpbmFsaXplcnMiLCAiX2ZpbmFsaXplcnNfMSIsICJfZmluYWxpemVyc18xXzEiLCAiZmluYWxpemVyIiwgImV4ZWNGaW5hbGl6ZXIiLCAiX19zcHJlYWRBcnJheSIsICJfX3JlYWQiLCAiZV8yXzEiLCAidGVhcmRvd24iLCAicGFyZW50IiwgImVtcHR5IiwgIkVNUFRZX1NVQlNDUklQVElPTiIsICJpc1N1YnNjcmlwdGlvbiIsICJjb25maWciLCAidGltZW91dFByb3ZpZGVyIiwgImhhbmRsZXIiLCAidGltZW91dCIsICJhcmdzIiwgIl9pIiwgImhhbmRsZSIsICJkZWxlZ2F0ZSIsICJyZXBvcnRVbmhhbmRsZWRFcnJvciIsICJub29wIiwgImVycm9yQ29udGV4dCIsICJjYiIsICJTdWJzY3JpYmVyIiwgIl9fZXh0ZW5kcyIsICJkZXN0aW5hdGlvbiIsICJfdGhpcyIsICJFTVBUWV9PQlNFUlZFUiIsICJuZXh0IiwgImVycm9yIiwgImNvbXBsZXRlIiwgIlNhZmVTdWJzY3JpYmVyIiwgIl9iaW5kIiwgImJpbmQiLCAiZm4iLCAidGhpc0FyZyIsICJDb25zdW1lck9ic2VydmVyIiwgInBhcnRpYWxPYnNlcnZlciIsICJoYW5kbGVVbmhhbmRsZWRFcnJvciIsICJvYnNlcnZlck9yTmV4dCIsICJjb250ZXh0XzEiLCAiZGVmYXVsdEVycm9ySGFuZGxlciIsICJvYnNlcnZhYmxlIiwgImlkZW50aXR5IiwgIngiLCAicGlwZUZyb21BcnJheSIsICJmbnMiLCAiaW5wdXQiLCAicHJldiIsICJPYnNlcnZhYmxlIiwgInN1YnNjcmliZSIsICJvcGVyYXRvciIsICJzdWJzY3JpYmVyIiwgImlzU3Vic2NyaWJlciIsICJzb3VyY2UiLCAic2luayIsICJwcm9taXNlQ3RvciIsICJnZXRQcm9taXNlQ3RvciIsICJyZXNvbHZlIiwgInJlamVjdCIsICJvcGVyYXRpb25zIiwgImlzT2JzZXJ2ZXIiLCAiaGFzTGlmdCIsICJvcGVyYXRlIiwgImluaXQiLCAibGlmdGVkU291cmNlIiwgImNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciIsICJvbk5leHQiLCAib25Db21wbGV0ZSIsICJvbkVycm9yIiwgIm9uRmluYWxpemUiLCAiT3BlcmF0b3JTdWJzY3JpYmVyIiwgInNob3VsZFVuc3Vic2NyaWJlIiwgImNsb3NlZF8xIiwgIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yIiwgIlN1YmplY3QiLCAic3ViamVjdCIsICJBbm9ueW1vdXNTdWJqZWN0IiwgIl9jIiwgIm9ic2VydmVyIiwgIm9ic2VydmVycyIsICJoYXNFcnJvciIsICJpc1N0b3BwZWQiLCAidGhyb3duRXJyb3IiLCAiZGF0ZVRpbWVzdGFtcFByb3ZpZGVyIiwgIkFjdGlvbiIsICJzY2hlZHVsZXIiLCAid29yayIsICJzdGF0ZSIsICJkZWxheSIsICJpbnRlcnZhbFByb3ZpZGVyIiwgIkFzeW5jQWN0aW9uIiwgImlkIiwgIl9pZCIsICJfc2NoZWR1bGVyIiwgIl9kZWxheSIsICJlcnJvcmVkIiwgImVycm9yVmFsdWUiLCAiYWN0aW9ucyIsICJTY2hlZHVsZXIiLCAic2NoZWR1bGVyQWN0aW9uQ3RvciIsICJub3ciLCAiQXN5bmNTY2hlZHVsZXIiLCAiU2NoZWR1bGVyQWN0aW9uIiwgImFjdGlvbiIsICJhc3luY1NjaGVkdWxlciIsICJpc0FycmF5TGlrZSIsICJpc1Byb21pc2UiLCAiaXNJbnRlcm9wT2JzZXJ2YWJsZSIsICJpc0FzeW5jSXRlcmFibGUiLCAib2JqIiwgImNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yIiwgImdldFN5bWJvbEl0ZXJhdG9yIiwgIml0ZXJhdG9yIiwgImlzSXRlcmFibGUiLCAicmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvciIsICJyZWFkYWJsZVN0cmVhbSIsICJfX2FzeW5jR2VuZXJhdG9yIiwgInJlYWRlciIsICJkb25lIiwgIl9fZ2VuZXJhdG9yIiwgIl9fYXdhaXQiLCAiaXNSZWFkYWJsZVN0cmVhbUxpa2UiLCAiaW5uZXJGcm9tIiwgImZyb21JbnRlcm9wT2JzZXJ2YWJsZSIsICJmcm9tQXJyYXlMaWtlIiwgImZyb21Qcm9taXNlIiwgImZyb21Bc3luY0l0ZXJhYmxlIiwgImZyb21JdGVyYWJsZSIsICJmcm9tUmVhZGFibGVTdHJlYW1MaWtlIiwgIm9icyIsICJhcnJheSIsICJpIiwgInByb21pc2UiLCAiaXRlcmFibGUiLCAiaXRlcmFibGVfMSIsICJpdGVyYWJsZV8xXzEiLCAiYXN5bmNJdGVyYWJsZSIsICJwcm9jZXNzIiwgImFzeW5jSXRlcmFibGVfMSIsICJhc3luY0l0ZXJhYmxlXzFfMSIsICJfX2F3YWl0ZXIiLCAiX19hc3luY1ZhbHVlcyIsICJleGVjdXRlU2NoZWR1bGUiLCAicGFyZW50U3Vic2NyaXB0aW9uIiwgInJlcGVhdCIsICJzY2hlZHVsZVN1YnNjcmlwdGlvbiIsICJ0aHJvd0Vycm9yIiwgImVycm9yT3JFcnJvckZhY3RvcnkiLCAiZXJyb3JGYWN0b3J5IiwgIkVtcHR5RXJyb3IiLCAibGFzdFZhbHVlRnJvbSIsICJfaGFzVmFsdWUiLCAiX3ZhbHVlIiwgImlzVmFsaWREYXRlIiwgIlRpbWVvdXRFcnJvciIsICJpbmZvIiwgInNjaGVkdWxlckFyZyIsICJmaXJzdCIsICJlYWNoIiwgIl93aXRoIiwgInRpbWVvdXRFcnJvckZhY3RvcnkiLCAiX2QiLCAibWV0YSIsICJvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbiIsICJ0aW1lclN1YnNjcmlwdGlvbiIsICJsYXN0VmFsdWUiLCAic2VlbiIsICJzdGFydFRpbWVyIiwgIkxvYWRlZE9uY2VQdWJsaXNoZXIiLCAiZXJyTXNnIiwgInZhbHVlSWZOb3RMb2FkZWQiLCAic3Vic2NyaXB0aW9uIiwgInRpbWVvdXRDb25maWciLCAiYXNzZXJ0TmV2ZXIiLCAidGltZW91dFBhcmFtcyIsICJ6JDEiLCAiY29ubnRvQmFzZVVybHMiLCAiZ2V0Q29ubnRvVXJsIiwgImVudiIsICJnZXRXaW5kb3dTYWZlIiwgIm1ldHJpY3NQdWJsaXNoZXIiLCAiTUVUUklDU19RVUVVRV9LRVkiLCAiTUFYX1JFVFJZX0FUVEVNUFRTIiwgIkJBVENIX1NJWkUiLCAiQkFUQ0hfSU5URVJWQUxfTVMiLCAibG9nX18kMSIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJNZXRyaWNzUXVldWUiLCAiZXZlbnROYW1lIiwgInByb3BlcnRpZXMiLCAiY29udGV4dFByb3BlcnRpZXMiLCAiZXZlbnQiLCAidjQiLCAic3RvcmVkUXVldWUiLCAic2FmZVdpbmRvdyIsICJjb250ZXh0IiwgImJhdGNoIiwgImJhdGNoUGF5bG9hZCIsICJjb25udG9VcmwiLCAibWV0cmljc1JvdXRlciIsICJldmVudHNUb0tlZXAiLCAibWV0cmljc1F1ZXVlIiwgImV4dHJhY3RJc3N1ZXNQZXJGaWVsZCIsICJpc3N1ZXNQZXJGaWVsZCIsICJrZXkiLCAiZmllbGROYW1lIiwgIkZpZWxkTmFtZUVudW0iLCAibG9nX18iLCAiZXJyX18kMSIsICJjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYSIsICJyZXF1aXJlX3ppcF9jb2RlIiwgInJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3MiLCAicmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MiLCAicGF5bWVudF9tZXRob2QiLCAiY29uZGl0aW9uYWxGaWVsZHMiLCAiRmllbGROYW1lIiwgIlJlcXVpcmVkU3RyaW5nIiwgIlJlcXVpcmVkRm9ybUZpZWxkcyIsICJ2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHMiLCAibm9uQ2RlRm9ybUlucHV0cyIsICJvblZhbGlkYXRpb25FcnJvciIsICJkZWZhdWx0RmllbGRWYWx1ZXMiLCAia2V5cyIsICJyZXN1bHQiLCAiZm9ybWF0dGVkIiwgImlzc3VlcyIsICJpc3N1ZUtleXMiLCAiUGF5bWVudFByb2Nlc3NvciIsICJBV1hfTE9BRElORyIsICJBZHllbkVudmlyb25tZW50IiwgIkVudmlyb25tZW50IiwgIkVudmlyb25tZW50MiIsICJQYXlJbkZhaWxlZCIsICJQYXlJbkZhaWxlZDIiLCAiUGF5SW5TdGF0ZSIsICJQYXlJblN0YXRlMiIsICJMT09QX0xPQURJTkciLCAiZXJyX18iLCAiT3B0aW9uYWxGbiIsICJab2RGb3JtQ2FsbGJhY2tzIiwgIl9Gb3JtQ2FsbGJhY2tzIiwgInJhd0NhbGxiYWNrcyIsICJyYXdDYWxsYmFjayIsICJzYWZlQ2FsbGJhY2siLCAibWFrZUNhbGxiYWNrU2FmZSIsICJGb3JtQ2FsbGJhY2tzIiwgIlN1Ym1pdE1ldGhvZHMiLCAiU3VibWl0TWV0aG9kczIiLCAiTU9CSUxFX1dBTExFVF9MT0FESU5HX1NUQVRFIiwgImdldEFwcGxlUGF5UHJvY2Vzc29ycyIsICJpbml0Rmxvd3MiLCAiYXBwbGVQYXlJbml0Rmxvd3MiLCAiYXBwbGVQYXlJbml0UmVzdWx0cyIsICJmbG93IiwgImZsb3dWYWx1ZSIsICJzdHJpcGVQUkZsb3dSZXN1bHQiLCAiY3VzdG9tUGFyYW1zIiwgInN0YXJ0QXBwbGVQYXlGbG93IiwgImdldEdvb2dsZVBheVByb2Nlc3NvcnMiLCAiZ29vZ2xlUGF5SW5pdEZsb3dzIiwgImdvb2dsZVBheUluaXRSZXN1bHRzIiwgInN0YXJ0R29vZ2xlUGF5RmxvdyIsICJpbml0UmVzdWx0cyIsICJhdmFpbGFibGVGbG93IiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgInN0eWxlcyIsICJFbGVtZW50c0NvbnRleHQiLCAiY3JlYXRlQ29udGV4dCIsICJ1c2VPcGVuUGF5RWxlbWVudHMiLCAidXNlQ29udGV4dCIsICJFbGVtZW50RnJhbWUiLCAicHJvcHMiLCAiZWxlbWVudFR5cGUiLCAiZm9ybUlkIiwgInJlZmVycmVyIiwgImZvcm1IZWlnaHQiLCAiY2hlY2tvdXRTZWN1cmVUb2tlbiIsICJyZWdpc3RlcklmcmFtZSIsICJiYXNlVXJsIiwgInN1YlBhdGgiLCAiaGFzTG9hZGVkIiwgInNldEhhc0xvYWRlZCIsICJ1c2VTdGF0ZSIsICJpZnJhbWVSZWYiLCAidXNlUmVmIiwgImVsZW1lbnRTdHlsZSIsICJ1c2VNZW1vIiwgImZyYW1lU3R5bGUiLCAicXVlcnlTdHJpbmciLCAicGFyYW1zIiwgInVzZUVmZmVjdCIsICJqc3giLCAidXJsIiwgIkNhcmRFbGVtZW50IiwgIkVsZW1lbnRUeXBlRW51bSIsICJDYXJkQ3ZjRWxlbWVudCIsICJDYXJkRXhwaXJ5RWxlbWVudCIsICJDYXJkTnVtYmVyRWxlbWVudCIsICJpbyIsICJzbyIsICJjbyIsICJyIiwgIm4iLCAiYSIsICJvIiwgInMiLCAibG8iLCAiayIsICJTIiwgInAiLCAicXIiLCAienIiLCAiSHIiLCAiQnIiLCAiX2UiLCAidW8iLCAiU3QiLCAicG8iLCAic2UiLCAiX28iLCAibW8iLCAiZm8iLCAieW8iLCAiaG8iLCAiZ28iLCAid28iLCAidm8iLCAiYm8iLCAiRW8iLCAiUG8iLCAiU28iLCAiT2UiLCAiQ28iLCAia28iLCAiQW8iLCAiSW8iLCAiVG8iLCAiUm8iLCAiTm8iLCAibnQiLCAiRm8iLCAiTW8iLCAiTG8iLCAiRiIsICJEbyIsICJ4byIsICJPbyIsICJZciIsICJVbyIsICJqbyIsICIkbyIsICJHbyIsICJWbyIsICJQIiwgInFvIiwgIkpyIiwgIldyIiwgInpvIiwgIkhvIiwgIlZlIiwgIkJvIiwgIllvIiwgIlpyIiwgIkpvIiwgIldvIiwgIlpvIiwgImRyIiwgIktyIiwgInByIiwgIlFyIiwgIktvIiwgIlFvIiwgImd0IiwgIlhyIiwgIlhvIiwgImVhIiwgInRhIiwgImVuIiwgInJhIiwgInRuIiwgIm5hIiwgIm9hIiwgImFhIiwgImlhIiwgInNhIiwgImNhIiwgImxhIiwgInVhIiwgImRhIiwgInBhIiwgIiR0IiwgIm1hIiwgImZhIiwgImVlIiwgInlhIiwgImhhIiwgInJuIiwgImdhIiwgIndhIiwgIkgiLCAiZyIsICJnaSIsICJTbiIsICJ3ZSIsICJJIiwgImNoYWxrIiwgIkd0IiwgIlBlIiwgInZhIiwgIm5uIiwgIlVlIiwgInd0IiwgInZ0IiwgIkRlIiwgImJhIiwgIm0iLCAieSIsICJoIiwgImIiLCAidiIsICJfIiwgIkVhIiwgIlYiLCAiQ3QiLCAiRnQiLCAiYnQiLCAibHQiLCAiX3IiLCAib24iLCAiYW4iLCAic24iLCAiY24iLCAibG4iLCAibXIiLCAiZnQiLCAiWXQiLCAia2EiLCAiVnQiLCAiUGEiLCAiTXQiLCAiU2EiLCAicHQiLCAiQ2EiLCAiSnQiLCAiQWEiLCAiSWEiLCAiZ2UiLCAiUmEiLCAiZnIiLCAiVGEiLCAiTmEiLCAiRmEiLCAiTWEiLCAiTGEiLCAiRGEiLCAidW4iLCAieXIiLCAieGEiLCAiT2EiLCAiaHIiLCAiVWEiLCAiZ3IiLCAiamEiLCAiJGEiLCAiR2EiLCAiVmEiLCAicWEiLCAiemEiLCAiSGEiLCAiQmEiLCAiWWEiLCAiSmEiLCAiV2EiLCAiWmEiLCAiS2EiLCAiUWEiLCAiWGEiLCAiZWkiLCAiZG4iLCAidGkiLCAicmkiLCAibmkiLCAib2kiLCAiYWkiLCAiaWkiLCAic2kiLCAiY2kiLCAibGkiLCAidWkiLCAiZGkiLCAidyIsICJldCIsICJrdCIsICJ3ciIsICJwaSIsICJMdCIsICJwbiIsICJBdCIsICIkIiwgInF0IiwgInZyIiwgIm1pIiwgImZpIiwgInlpIiwgIl90IiwgImhpIiwgImMiLCAiV3QiLCAiX24iLCAibW4iLCAidCIsICJ3aSIsICJ2aSIsICJHciIsICJiaSIsICJFaSIsICJQaSIsICJJdCIsICJiciIsICJUdCIsICJTaSIsICJDaSIsICJraSIsICJBaSIsICJJaSIsICJUaSIsICJUZSIsICJFciIsICJSaSIsICJsIiwgInUiLCAiZCIsICJOaSIsICJGaSIsICJvdCIsICJhdCIsICJadCIsICJpdCIsICJLdCIsICJNaSIsICJMaSIsICJEaSIsICJZZSIsICJYIiwgInhpIiwgIk9pIiwgIlVpIiwgImppIiwgIkV0IiwgIiRpIiwgIkdpIiwgIlZpIiwgInFpIiwgInppIiwgIkhpIiwgIkJpIiwgIllpIiwgIkR0IiwgIkppIiwgIlF0IiwgInp0IiwgInluIiwgIldpIiwgInR0IiwgIlh0IiwgImVyIiwgIlppIiwgInRyIiwgIktpIiwgIlFpIiwgImhuIiwgIlhpIiwgImVzIiwgInRzIiwgInJzIiwgImduIiwgIm5zIiwgInh0IiwgInduIiwgIm9zIiwgImFzIiwgImlzIiwgInNzIiwgImNzIiwgIlByIiwgInN0IiwgIkVlIiwgInhlIiwgIk90IiwgImxzIiwgImplIiwgInVzIiwgIm10IiwgInZuIiwgIkIiLCAicHMiLCAiZHMiLCAiX3MiLCAiTSIsICJuZSIsICJibiIsICJtcyIsICJMIiwgImZzIiwgInlzIiwgImhzIiwgInZlIiwgIkVuIiwgIlNyIiwgImdzIiwgInJyIiwgIlBuIiwgIndzIiwgImNvbm5lY3RUb0NoaWxkIiwgIlJ0IiwgInZzIiwgImJzIiwgIkVzIiwgIkNuIiwgImtuIiwgInJ0IiwgIlBzIiwgIkFuIiwgIkNyIiwgIlJlIiwgIlplIiwgIlNzIiwgIkNzIiwgImtzIiwgIlRzIiwgIkFzIiwgIklzIiwgIlJzIiwgIkluIiwgIlRuIiwgIk5zIiwgIkZzIiwgImoiLCAiTXMiLCAiTHMiLCAiWiIsICJLIiwgIk50IiwgIkRzIiwgInhzIiwgIlJuIiwgIk5uIiwgIk9zIiwgIlVzIiwgImJlIiwgIkZuIiwgImpzIiwgIk1uIiwgImNlIiwgIiRzIiwgIkdzIiwgIlZzIiwgInFzIiwgInpzIiwgIkhzIiwgInEiLCAiTG4iLCAiVmwiLCAiRG4iLCAidXQiLCAieiIsICJuciIsICJsZSIsICJVIiwgInhuIiwgInFlIiwgImYiLCAib3IiLCAiVXQiLCAiYXIiLCAiemUiLCAiSGUiLCAiaXIiLCAiSmUiLCAiQnMiLCAiWXMiLCAiRSIsICJDIiwgImtyIiwgIkpzIiwgIldzIiwgIldlIiwgIlpzIiwgIktzIiwgIlFzIiwgInNyIiwgIlhzIiwgImVjIiwgIk9uIiwgInRjIiwgIlVuIiwgImpuIiwgIiRuIiwgImNyIiwgImxyIiwgInJjIiwgIm5jIiwgInVyIiwgIm9jIiwgImFjIiwgIiRlIiwgImN0IiwgImljIiwgIkduIiwgInNjIiwgImNjIiwgIkFyIiwgImxjIiwgInVjIiwgImRjIiwgIlZuIiwgInFuIiwgInpuIiwgIkhuIiwgInBjIiwgIm1jIiwgImFvIiwgIktlIiwgIkJuIiwgImZjIiwgIlQiLCAieWMiLCAiaWUiLCAiTWUiLCAiaGMiLCAiZ2MiLCAiTyIsICJBIiwgIkQiLCAiUSIsICJ1ZSIsICJDZSIsICJZIiwgImhlIiwgIkZlIiwgIkJlIiwgIklyIiwgIndjIiwgInZjIiwgInl0IiwgImJjIiwgIkVjIiwgIlBjIiwgIlFlIiwgIlluIiwgIlNjIiwgIkNjIiwgInJlIiwgIkxlIiwgImtjIiwgIkFjIiwgIlNlIiwgIkpuIiwgIlduIiwgIkljIiwgIlRjIiwgImh0IiwgIlpuIiwgIlJjIiwgIk5jIiwgIkllIiwgIlhlIiwgIkZjIiwgIk1jIiwgIkxjIiwgIktuIiwgIkRjIiwgInhjIiwgIlFuIiwgIkh0IiwgIk9jIiwgIlVjIiwgIlRyIiwgImpjIiwgIlhuIiwgIiRjIiwgIkdjIiwgIk5lIiwgIlB0IiwgIlZjIiwgImVvIiwgInFjIiwgIkJjIiwgInpjIiwgIkhjIiwgInJvIiwgInRvIiwgIk4iLCAiUnIiLCAiWWMiLCAiSmMiLCAiV2MiLCAiWmMiLCAiSiIsICJLYyIsICJRYyIsICJYYyIsICJrZSIsICJlbCIsICJubyIsICJ0bCIsICJybCIsICJkZSIsICJOciIsICJvbyIsICJubCIsICJvbCIsICJGciIsICJHIiwgImFsIiwgImlsIiwgInNsIiwgImNsIiwgImRsIiwgImxsIiwgInVsIiwgIlciLCAicGwiLCAiX2wiLCAibWwiLCAibWUiLCAiZmwiLCAiaGwiLCAieWwiLCAiZ2wiLCAid2wiLCAidmwiLCAib2UiLCAiYmwiLCAiRWwiLCAiUGwiLCAiYWUiLCAiTXIiLCAiZmUiLCAiQnQiLCAiU2wiLCAiQ2wiLCAia2wiLCAiUiIsICJBZSIsICJMciIsICJBbCIsICJEciIsICJJbCIsICJUbCIsICJqdCIsICJSbCIsICJObCIsICJGbCIsICJ4ciIsICJNbCIsICJMbCIsICJPciIsICJEbCIsICJ4bCIsICJPbCIsICJVciIsICJqciIsICJwZSIsICJ0ZSIsICJ5ZSIsICIkciIsICJ1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MiLCAiZm9ybUNhbGxiYWNrcyIsICJGT1JNX1RBUkdFVCIsICJFbGVtZW50c0Zvcm0iLCAib3BGb3JtIiwgInNldE9wRm9ybSIsICJlbGVtZW50c0NvbnRleHRWYWx1ZSIsICJzZXRFbGVtZW50c0NvbnRleHRWYWx1ZSIsICJsb2FkZWQiLCAic2V0TG9hZGVkIiwgImFwcGxlUGF5UmVzdWx0IiwgInNldEFwcGxlUGF5UmVzdWx0IiwgImdvb2dsZVBheVJlc3VsdCIsICJzZXRHb29nbGVQYXlSZXN1bHQiLCAic3RyaXBlTGlua0N0cmwiLCAic2V0U3RyaXBlTGlua0N0cmwiLCAibG9vcENvbmZpZyIsICJzZXRMb29wQ29uZmlnIiwgImFpcndhbGxleCIsICJzZXRBaXJ3YWxsZXgiLCAidG90YWxBbW91bnRBdG9tcyIsICJjdXJyZW5jeSIsICJhcHBsZVBheVJlc3VsdDIiLCAiZ29vZ2xlUGF5UmVzdWx0MiIsICJmb3JtIiwgImdldEVsZW1lbnRzQ29udGV4dFZhbHVlIiwgIkZyYWdtZW50IiwgImNoaWxkcmVuUHJvcHMiXQp9Cg==
|
|
9109
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDA0fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCB7IHogYXMgeiQxIH0gZnJvbSAnem9kJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyB2NCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IHsganN4LCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0L2pzeC1ydW50aW1lJztcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VSZWYsIHVzZU1lbW8sIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcblxuZnVuY3Rpb24gZml4UHJvdG8odGFyZ2V0LCBwcm90b3R5cGUpIHtcbiAgdmFyIHNldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBzZXRQcm90b3R5cGVPZiA/IHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG90eXBlKSA6IHRhcmdldC5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG59XG5mdW5jdGlvbiBmaXhTdGFjayh0YXJnZXQsIGZuKSB7XG4gIGlmIChmbiA9PT0gdm9pZCAwKSB7XG4gICAgZm4gPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgY2FwdHVyZVN0YWNrVHJhY2UgJiYgY2FwdHVyZVN0YWNrVHJhY2UodGFyZ2V0LCBmbik7XG59XG5cbnZhciBfX2V4dGVuZHMkMSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZC5fX3Byb3RvX18gPSBiO1xuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcblxuICAgIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuXG4gICAgZnVuY3Rpb24gX18oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgICB9XG5cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gIH07XG59KCk7XG5cbihmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyQxKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0pKEVycm9yKTtcblxuY29uc3QgUmVxdWlyZWRTdHJpbmcgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBQbGVhc2UgZmlsbCBpbiB0aGlzIGZpZWxkYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0geiQxLnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpO1xuY29uc3QgbnVsbE9yVW5kZWZPciQxID0gKHpUeXBlKSA9PiB6JDEubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG52YXIgRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoRmllbGROYW1lMikgPT4ge1xuICBGaWVsZE5hbWUyW1wiRklSU1RfTkFNRVwiXSA9IFwiZmlyc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJMQVNUX05BTUVcIl0gPSBcImxhc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJQSE9ORVwiXSA9IFwicGhvbmVcIjtcbiAgRmllbGROYW1lMltcIkVNQUlMXCJdID0gXCJlbWFpbFwiO1xuICBGaWVsZE5hbWUyW1wiTElORTFcIl0gPSBcImxpbmUxXCI7XG4gIEZpZWxkTmFtZTJbXCJMSU5FMlwiXSA9IFwibGluZTJcIjtcbiAgRmllbGROYW1lMltcIkxJTkUzXCJdID0gXCJsaW5lM1wiO1xuICBGaWVsZE5hbWUyW1wiQ0lUWVwiXSA9IFwiY2l0eVwiO1xuICBGaWVsZE5hbWUyW1wiU1RBVEVcIl0gPSBcInN0YXRlXCI7XG4gIEZpZWxkTmFtZTJbXCJDT1VOVFJZXCJdID0gXCJjb3VudHJ5XCI7XG4gIEZpZWxkTmFtZTJbXCJaSVBfQ09ERVwiXSA9IFwiemlwQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfTElORTFcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0xpbmUxXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19MSU5FMlwiXSA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTJcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0xJTkUzXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lM1wiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfQ0lUWVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzQ2l0eVwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfU1RBVEVcIl0gPSBcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19DT1VOVFJZXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19aSVBfQ09ERVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXCJdID0gXCJpc1NoaXBwaW5nU2FtZUFzQmlsbGluZ1wiO1xuICBGaWVsZE5hbWUyW1wiUFJPTU9USU9OX0NPREVcIl0gPSBcInByb21vdGlvbkNvZGVcIjtcbiAgcmV0dXJuIEZpZWxkTmFtZTI7XG59KShGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgRmllbGROYW1lRW51bSA9IHokMS5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6JDEubmF0aXZlRW51bShQcml2YXRlRmllbGROYW1lKTtcbmNvbnN0IEFsbEZpZWxkTmFtZXMgPSB6JDEudW5pb24oW0ZpZWxkTmFtZUVudW0sIFByaXZhdGVGaWVsZE5hbWVFbnVtXSk7XG52YXIgRWxlbWVudFR5cGVFbnVtID0gLyogQF9fUFVSRV9fICovICgoRWxlbWVudFR5cGVFbnVtMikgPT4ge1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRFwiXSA9IFwiY2FyZFwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmQtbnVtYmVyXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZC1leHBpcnlcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkLWN2Y1wiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0RFX0JSSURHRVwiXSA9IFwiY2RlLWJyaWRnZVwiO1xuICByZXR1cm4gRWxlbWVudFR5cGVFbnVtMjtcbn0pKEVsZW1lbnRUeXBlRW51bSB8fCB7fSk7XG56JDEubmF0aXZlRW51bShFbGVtZW50VHlwZUVudW0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50TWV0aG9kTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBPcHRpb25hbFN0cmluZyxcbiAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgY3ZjOiBPcHRpb25hbFN0cmluZ1xufSk7XG56JDEub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgbWFyZ2luOiBPcHRpb25hbFN0cmluZyxcbiAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgaGlkZUljb246IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IEV2ZW50VHlwZSA9IHokMS5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKTtcbmNvbnN0IEdlbmVyaWNFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHsgdHlwZTogR2VuZXJpY0V2ZW50VHlwZSB9KTtcbmNvbnN0IElucHV0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKTtcbmNvbnN0IElucHV0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IElucHV0RXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogUHJpdmF0ZUZpZWxkTmFtZUVudW0sXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgb2JmdXNjYXRlZFZhbHVlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBFcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKTtcbmNvbnN0IEVycm9yRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IEVycm9yRXZlbnRUeXBlLFxuICBtZXNzYWdlOiBSZXF1aXJlZFN0cmluZyxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBBbGxGaWVsZE5hbWVzLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IExheW91dEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IExvYWRlZEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICB0b3RhbEFtb3VudEF0b21zOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBPcHRpb25hbFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogeiQxLmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCQxKVxufSk7XG5jb25zdCBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6JDEub3B0aW9uYWwoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBSZXF1aXJlZEZvcm1GaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTJcIiAvKiBMSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lM1wiIC8qIExJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCIgLyogSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HICovXTogeiQxLmN1c3RvbSgpLm9wdGlvbmFsKCkuZGVmYXVsdCh0cnVlKSxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTFcIiAvKiBTSElQUElOR19MSU5FMSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiIC8qIFNISVBQSU5HX0xJTkUyICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCIgLyogU0hJUFBJTkdfTElORTMgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ2l0eVwiIC8qIFNISVBQSU5HX0NJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzU3RhdGVcIiAvKiBTSElQUElOR19TVEFURSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCIgLyogU0hJUFBJTkdfQ09VTlRSWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCIgLyogU0hJUFBJTkdfWklQX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBQUkZvcm1GaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTJcIiAvKiBMSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lM1wiIC8qIExJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCIgLyogSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HICovXTogeiQxLmN1c3RvbSgpLm9wdGlvbmFsKCkuZGVmYXVsdCh0cnVlKSxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTFcIiAvKiBTSElQUElOR19MSU5FMSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiIC8qIFNISVBQSU5HX0xJTkUyICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCIgLyogU0hJUFBJTkdfTElORTMgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ2l0eVwiIC8qIFNISVBQSU5HX0NJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzU3RhdGVcIiAvKiBTSElQUElOR19TVEFURSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCIgLyogU0hJUFBJTkdfQ09VTlRSWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCIgLyogU0hJUFBJTkdfWklQX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG56JDEub2JqZWN0KHtcbiAgW1wibGluZTFcIiAvKiBMSU5FMSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiIC8qIFNISVBQSU5HX0xJTkUxICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiAvKiBTSElQUElOR19DSVRZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIgLyogU0hJUFBJTkdfU1RBVEUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgU3VibWl0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSk7XG5jb25zdCBTdWJtaXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogU3VibWl0RXZlbnRUeXBlLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IE9wdGlvbmFsU3RyaW5nLFxuICBwYXltZW50Um91dGVJZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHokMS5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBFdmVudFBheWxvYWQgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIEdlbmVyaWNFdmVudFBheWxvYWQsXG4gIElucHV0RXZlbnRQYXlsb2FkLFxuICBFcnJvckV2ZW50UGF5bG9hZCxcbiAgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkLFxuICBMYXlvdXRFdmVudFBheWxvYWQsXG4gIExvYWRlZEV2ZW50UGF5bG9hZCxcbiAgU3VibWl0RXZlbnRQYXlsb2FkLFxuICBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkLFxuICBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZFxuXSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIGFtb3VudEF0b206IHokMS5udW1iZXIoKSxcbiAgLyoqXG4gICAqIFRoZSB0aHJlZS1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBmb3IgdGhlIHBheW1lbnQuXG4gICAqL1xuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuYXJyYXkoeiQxLnN0cmluZygpKSlcbn0pO1xuY29uc3QgRmllbGRWYWxpZGF0aW9uRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHokMS5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoZmFsc2UpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG56JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHokMS5vYmplY3QoeyBzdWNjZXNzOiB6JDEubGl0ZXJhbCh0cnVlKSB9KSxcbiAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6JDEuc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIGNvbnNlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEFXWEJhbmsgPSB6JDEub2JqZWN0KHtcbiAgYmFua19uYW1lOiB6JDEuc3RyaW5nKCksXG4gIGRpc3BsYXlfbmFtZTogeiQxLnN0cmluZygpLFxuICByZXNvdXJjZXM6IHokMS5vYmplY3Qoe1xuICAgIGxvZ29fdXJsOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxuICB9KVxufSk7XG5jb25zdCBDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBpbml0aWFsX2ludGVudF9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHBheW1lbnRfc2Vzc2lvbjogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgYXZhaWxhYmxlX2JhbmtzOiBudWxsT3JVbmRlZk9yJDEoeiQxLmFycmF5KEFXWEJhbmspKVxufSk7XG56JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwicHJlc2VudFwiLCBbXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCh0cnVlKSwgaHJlZjogeiQxLnN0cmluZygpIH0pLFxuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoZmFsc2UpIH0pXG5dKTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHokMS5hcnJheShQYXltZW50TWV0aG9kTWluaW1hbCksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yJDEoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IG51bGxPclVuZGVmT3IkMSh6JDEuYXJyYXkoQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhKSksXG4gIHBvc3RfY2hlY2tvdXRfcmVkaXJlY3RfdG86IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yJDEoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpXG59KTtcbmNvbnN0IEVGVEZvcm1EYXRhID0geiQxLm9iamVjdCh7XG4gIGluc3RpdHV0aW9uTnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIHRyYW5zaXROdW1iZXI6IHokMS5zdHJpbmcoKSxcbiAgYWNjb3VudE51bWJlcjogeiQxLnN0cmluZygpLFxuICBhY2NvdW50VHlwZTogeiQxLmVudW0oW1wicGVyc29uYWxcIiwgXCJidXNpbmVzc1wiXSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiBFRlRGb3JtRGF0YS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEJBQ1NGb3JtRGF0YSA9IHokMS5vYmplY3Qoe1xuICBzb3J0Q29kZTogeiQxLnN0cmluZygpLFxuICBhY2NvdW50TnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6JDEuZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IEJBQ1NGb3JtRGF0YS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFNFUEFGb3JtRGF0YSA9IHokMS5vYmplY3Qoe1xuICBpYmFuOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6JDEuZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IFNFUEFGb3JtRGF0YS5vcHRpb25hbCgpXG59KTtcblxuY29uc3QgbnVsbE9yVW5kZWZPciA9ICh6VHlwZSkgPT4geiQxLm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xueiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbnokMS5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogeiQxLmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbnokMS5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBDb3Vwb25NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6JDEuc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKTtcbmNvbnN0IEJyYW5kID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoQnJhbmRTZXR0aW5ncylcbn0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25JdGVtTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbk1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKClcbn0pO1xuY29uc3QgSW52b2ljZUxpbmVJdGVtTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgRGlzY291bnRNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGNvdXBvbjogQ291cG9uTWluaW1hbFxufSk7XG5jb25zdCBJbnZvaWNlTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudHM6IHokMS5hcnJheShEaXNjb3VudE1pbmltYWwpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShJbnZvaWNlTGluZUl0ZW1NaW5pbWFsKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpXG59KTtcbmNvbnN0IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjcmVhdGVkOiB6JDEuYXJyYXkoU3Vic2NyaXB0aW9uTWluaW1hbCksXG4gIGludm9pY2VzOiB6JDEuYXJyYXkoSW52b2ljZU1pbmltYWwpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3IoeiQxLmFycmF5KHokMS5zdHJpbmcoKSkpXG59KTtcbmNvbnN0IFByZXZpZXdDaGVja291dFJlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gIGNvdXBvbnM6IHokMS5hcnJheShDb3Vwb25NaW5pbWFsKVxufSk7XG5jb25zdCBfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICBsb2NhbGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgY2hlY2tvdXRfc2V0dGluZ3M6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTGluZUl0ZW0pLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBicmFuZDogQnJhbmQsXG4gIHN1YnNfcHJldmlldzogbnVsbE9yVW5kZWZPcihQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogeiQxLmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCksXG4gIHJldHVybl91cmw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgc3VjY2Vzc191cmw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZmluYWxfZmVhdHVyZV9yb2xsb3V0X3NldHRpbmdzOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHokMS5udWxsYWJsZSh6JDEudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKSxcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHokMS5zdHJpbmcoKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSlcbl0pO1xuY29uc3QgQ29tcGxldGVkRm9ybVByZWZpbGwgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KTtcbmNvbnN0IEV4cGlyZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW1BheW1lbnRGb3JtUHJlZmlsbCwgQ29tcGxldGVkRm9ybVByZWZpbGwsIEV4cGlyZWRGb3JtUHJlZmlsbF0pO1xueiQxLm9iamVjdCh7XG4gIGxvZ286IHokMS5zdHJpbmcoKSxcbiAgaWNvbjogeiQxLnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBDb21wbGV0ZUFkZHJlc3MgPSB6JDEub2JqZWN0KHtcbiAgbGluZTE6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBsaW5lMjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGxpbmUzOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY2l0eTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHN0YXRlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY291bnRyeTogeiQxLnN0cmluZygpLFxuICB6aXBfY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6JDEuYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3MsXG4gIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcy5vcHRpb25hbCgpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTGluZUl0ZW0pLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6JDEuYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxKTtcbmNvbnN0IE5ld0N1c3RvbWVyRmllbGRzID0geiQxLm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3MsXG4gIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3Mub3B0aW9uYWwoKVxufSk7XG5jb25zdCBQcmljZVF0eSA9IHokMS5vYmplY3Qoe1xuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IENhcnRJbmZvID0geiQxLm9iamVjdCh7XG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShQcmljZVF0eSksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YSA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBDYXJ0SW5mby5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pLmV4dGVuZChOZXdDdXN0b21lckZpZWxkcy5zaGFwZSkuZXh0ZW5kKFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEuc2hhcGUpO1xueiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG4gIHVzZV91bmlmaWVkX2NjX2Zsb3c6IG51bGxPclVuZGVmT3IoeiQxLmJvb2xlYW4oKSksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogQ2FydEluZm8ub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2NfcG1faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPcihDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEucmVjb3JkKHokMS5hbnkoKSk7XG56JDEub2JqZWN0KHtcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZTE6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZTI6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZTM6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgY2l0eTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBzdGF0ZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBjb3VudHJ5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHppcF9jb2RlOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHVwZGF0ZV9wcm9jZXNzb3JfY3VzdG9tZXI6IG51bGxPclVuZGVmT3IoeiQxLmJvb2xlYW4oKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGFkZHJlc3M6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBtZXNzYWdlOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGVycm9yX2NvZGU6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBuZXh0X2FjdGlvbl9tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBldmVudHM6IHokMS5hcnJheShcbiAgICB6JDEub2JqZWN0KHtcbiAgICAgIGV2ZW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICAgIGRldmljZV90b2tlbjogeiQxLnN0cmluZygpLFxuICAgICAgcHJvcGVydGllczogeiQxLnJlY29yZCh6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gICAgICBjb250ZXh0X3Byb3BlcnRpZXM6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpXG4gICAgfSlcbiAgKVxufSk7XG56JDEuYW55KCkub3B0aW9uYWwoKTtcbnokMS5vYmplY3Qoe1xuICBkZXZpY2VfdG9rZW46IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHt9KTtcbnokMS5vYmplY3Qoe1xuICBfdW5pZmllZF9jY19hY3Rpb25fbmFtZTogeiQxLnN0cmluZygpLFxuICBfdW5pZmllZF9jY19wY2NzX2lkOiB6JDEuc3RyaW5nKClcbn0pLmNhdGNoYWxsKHokMS5hbnkoKSk7XG5cbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvcik7XG5jb25zdCBab2RGaWVsZEVycm9yID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEuYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICBjb25zdCBsb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ubG9nKGAke2NoYWxrLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICBjb25zdCBlcnIgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ud2FybihgJHtjaGFsay5yZWQuYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nLFxuICAgIGVycixcbiAgICBsb2dfXzogbG9nLFxuICAgIGVycl9fOiBlcnJcbiAgfTtcbn07XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxuZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XG4gIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGcgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gZy5uZXh0ID0gdmVyYigwKSwgZ1tcInRocm93XCJdID0gdmVyYigxKSwgZ1tcInJldHVyblwiXSA9IHZlcmIoMiksIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XG4gIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cblxuZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcbiAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIW0pIHJldHVybiBvO1xuICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgdHJ5IHtcbiAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICB9XG4gIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgfVxuICByZXR1cm4gYXI7XG59XG5cbmZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcbiAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn1cblxuZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5mdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xuICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIsIGF3YWl0UmV0dXJuKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKGdbbl0pIHsgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgaWYgKGYpIGlbbl0gPSBmKGlbbl0pOyB9IH1cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxuICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn1cblxuZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XG4gIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcbiAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxuICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XG59XG5cbnR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xuICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcbn07XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFcnJvckNsYXNzKGNyZWF0ZUltcGwpIHtcbiAgICB2YXIgX3N1cGVyID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgIEVycm9yLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgICBpbnN0YW5jZS5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICAgIH07XG4gICAgdmFyIGN0b3JGdW5jID0gY3JlYXRlSW1wbChfc3VwZXIpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbiAgICBjdG9yRnVuYy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yRnVuYztcbiAgICByZXR1cm4gY3RvckZ1bmM7XG59XG5cbnZhciBVbnN1YnNjcmlwdGlvbkVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFVuc3Vic2NyaXB0aW9uRXJyb3JJbXBsKGVycm9ycykge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IGVycm9yc1xuICAgICAgICAgICAgPyBlcnJvcnMubGVuZ3RoICsgXCIgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcXG5cIiArIGVycm9ycy5tYXAoZnVuY3Rpb24gKGVyciwgaSkgeyByZXR1cm4gaSArIDEgKyBcIikgXCIgKyBlcnIudG9TdHJpbmcoKTsgfSkuam9pbignXFxuICAnKVxuICAgICAgICAgICAgOiAnJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1Vuc3Vic2NyaXB0aW9uRXJyb3InO1xuICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICB9O1xufSk7XG5cbmZ1bmN0aW9uIGFyclJlbW92ZShhcnIsIGl0ZW0pIHtcbiAgICBpZiAoYXJyKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGFyci5pbmRleE9mKGl0ZW0pO1xuICAgICAgICAwIDw9IGluZGV4ICYmIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbn1cblxudmFyIFN1YnNjcmlwdGlvbiA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3Vic2NyaXB0aW9uKGluaXRpYWxUZWFyZG93bikge1xuICAgICAgICB0aGlzLmluaXRpYWxUZWFyZG93biA9IGluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgfVxuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlXzEsIF9hLCBlXzIsIF9iO1xuICAgICAgICB2YXIgZXJyb3JzO1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgICAgIGlmIChfcGFyZW50YWdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX3BhcmVudGFnZV8xID0gX192YWx1ZXMoX3BhcmVudGFnZSksIF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKTsgIV9wYXJlbnRhZ2VfMV8xLmRvbmU7IF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRfMSA9IF9wYXJlbnRhZ2VfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudF8xLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2VfMV8xICYmICFfcGFyZW50YWdlXzFfMS5kb25lICYmIChfYSA9IF9wYXJlbnRhZ2VfMS5yZXR1cm4pKSBfYS5jYWxsKF9wYXJlbnRhZ2VfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF9wYXJlbnRhZ2UucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBpbml0aWFsRmluYWxpemVyID0gdGhpcy5pbml0aWFsVGVhcmRvd247XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihpbml0aWFsRmluYWxpemVyKSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxGaW5hbGl6ZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZSBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IgPyBlLmVycm9ycyA6IFtlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2ZpbmFsaXplcnNfMSA9IF9fdmFsdWVzKF9maW5hbGl6ZXJzKSwgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCk7ICFfZmluYWxpemVyc18xXzEuZG9uZTsgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaW5hbGl6ZXIgPSBfZmluYWxpemVyc18xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMgIT09IG51bGwgJiYgZXJyb3JzICE9PSB2b2lkIDAgPyBlcnJvcnMgOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBfX3NwcmVhZEFycmF5KF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChlcnJvcnMpKSwgX19yZWFkKGVyci5lcnJvcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzJfMSkgeyBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnNfMV8xICYmICFfZmluYWxpemVyc18xXzEuZG9uZSAmJiAoX2IgPSBfZmluYWxpemVyc18xLnJldHVybikpIF9iLmNhbGwoX2ZpbmFsaXplcnNfMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdWJzY3JpcHRpb25FcnJvcihlcnJvcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0ZWFyZG93biAmJiB0ZWFyZG93biAhPT0gdGhpcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcih0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duLmNsb3NlZCB8fCB0ZWFyZG93bi5faGFzUGFyZW50KHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGVhcmRvd24uX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAoX2EgPSB0aGlzLl9maW5hbGl6ZXJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSkucHVzaCh0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHJldHVybiBfcGFyZW50YWdlID09PSBwYXJlbnQgfHwgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgJiYgX3BhcmVudGFnZS5pbmNsdWRlcyhwYXJlbnQpKTtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgPyAoX3BhcmVudGFnZS5wdXNoKHBhcmVudCksIF9wYXJlbnRhZ2UpIDogX3BhcmVudGFnZSA/IFtfcGFyZW50YWdlLCBwYXJlbnRdIDogcGFyZW50O1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgaWYgKF9wYXJlbnRhZ2UgPT09IHBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICBhcnJSZW1vdmUoX3BhcmVudGFnZSwgcGFyZW50KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgX2ZpbmFsaXplcnMgJiYgYXJyUmVtb3ZlKF9maW5hbGl6ZXJzLCB0ZWFyZG93bik7XG4gICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGVhcmRvd24uX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLkVNUFRZID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVtcHR5ID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICBlbXB0eS5jbG9zZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZW1wdHk7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gU3Vic2NyaXB0aW9uO1xufSgpKTtcbnZhciBFTVBUWV9TVUJTQ1JJUFRJT04gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5mdW5jdGlvbiBpc1N1YnNjcmlwdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24gfHxcbiAgICAgICAgKHZhbHVlICYmICdjbG9zZWQnIGluIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUucmVtb3ZlKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmFkZCkgJiYgaXNGdW5jdGlvbih2YWx1ZS51bnN1YnNjcmliZSkpKTtcbn1cbmZ1bmN0aW9uIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZmluYWxpemVyKSkge1xuICAgICAgICBmaW5hbGl6ZXIoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGZpbmFsaXplci51bnN1YnNjcmliZSgpO1xuICAgIH1cbn1cblxudmFyIGNvbmZpZyA9IHtcbiAgICBvblVuaGFuZGxlZEVycm9yOiBudWxsLFxuICAgIG9uU3RvcHBlZE5vdGlmaWNhdGlvbjogbnVsbCxcbiAgICBQcm9taXNlOiB1bmRlZmluZWQsXG4gICAgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzogZmFsc2UsXG4gICAgdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiBmYWxzZSxcbn07XG5cbnZhciB0aW1lb3V0UHJvdmlkZXIgPSB7XG4gICAgc2V0VGltZW91dDogZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAyOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgfSxcbiAgICBjbGVhclRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gdGltZW91dFByb3ZpZGVyLmRlbGVnYXRlO1xuICAgICAgICByZXR1cm4gKChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuY2xlYXJUaW1lb3V0KSB8fCBjbGVhclRpbWVvdXQpKGhhbmRsZSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxuZnVuY3Rpb24gcmVwb3J0VW5oYW5kbGVkRXJyb3IoZXJyKSB7XG4gICAgdGltZW91dFByb3ZpZGVyLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbm9vcCgpIHsgfVxuXG5mdW5jdGlvbiBlcnJvckNvbnRleHQoY2IpIHtcbiAgICB7XG4gICAgICAgIGNiKCk7XG4gICAgfVxufVxuXG52YXIgU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3Vic2NyaWJlcihkZXN0aW5hdGlvbikge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICAgICAgaWYgKGlzU3Vic2NyaXB0aW9uKGRlc3RpbmF0aW9uKSkge1xuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmFkZChfdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IEVNUFRZX09CU0VSVkVSO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgU3Vic2NyaWJlci5jcmVhdGUgPSBmdW5jdGlvbiAobmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2FmZVN1YnNjcmliZXIobmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbmV4dCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQodmFsdWUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBTdWJzY3JpYmVyO1xufShTdWJzY3JpcHRpb24pKTtcbnZhciBfYmluZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xuZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICAgIHJldHVybiBfYmluZC5jYWxsKGZuLCB0aGlzQXJnKTtcbn1cbnZhciBDb25zdW1lck9ic2VydmVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb25zdW1lck9ic2VydmVyKHBhcnRpYWxPYnNlcnZlcikge1xuICAgICAgICB0aGlzLnBhcnRpYWxPYnNlcnZlciA9IHBhcnRpYWxPYnNlcnZlcjtcbiAgICB9XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIubmV4dCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQ29uc3VtZXJPYnNlcnZlcjtcbn0oKSk7XG52YXIgU2FmZVN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTYWZlU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKG9ic2VydmVyT3JOZXh0KSB8fCAhb2JzZXJ2ZXJPck5leHQpIHtcbiAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IHtcbiAgICAgICAgICAgICAgICBuZXh0OiAob2JzZXJ2ZXJPck5leHQgIT09IG51bGwgJiYgb2JzZXJ2ZXJPck5leHQgIT09IHZvaWQgMCA/IG9ic2VydmVyT3JOZXh0IDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBjb21wbGV0ZSAhPT0gbnVsbCAmJiBjb21wbGV0ZSAhPT0gdm9pZCAwID8gY29tcGxldGUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGNvbnRleHRfMTtcbiAgICAgICAgICAgIGlmIChfdGhpcyAmJiBjb25maWcudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgY29udGV4dF8xID0gT2JqZWN0LmNyZWF0ZShvYnNlcnZlck9yTmV4dCk7XG4gICAgICAgICAgICAgICAgY29udGV4dF8xLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMudW5zdWJzY3JpYmUoKTsgfTtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IG9ic2VydmVyT3JOZXh0Lm5leHQgJiYgYmluZChvYnNlcnZlck9yTmV4dC5uZXh0LCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogb2JzZXJ2ZXJPck5leHQuZXJyb3IgJiYgYmluZChvYnNlcnZlck9yTmV4dC5lcnJvciwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6IG9ic2VydmVyT3JOZXh0LmNvbXBsZXRlICYmIGJpbmQob2JzZXJ2ZXJPck5leHQuY29tcGxldGUsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IG9ic2VydmVyT3JOZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gbmV3IENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICByZXR1cm4gU2FmZVN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcbmZ1bmN0aW9uIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKSB7XG4gICAge1xuICAgICAgICByZXBvcnRVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gZGVmYXVsdEVycm9ySGFuZGxlcihlcnIpIHtcbiAgICB0aHJvdyBlcnI7XG59XG52YXIgRU1QVFlfT0JTRVJWRVIgPSB7XG4gICAgY2xvc2VkOiB0cnVlLFxuICAgIG5leHQ6IG5vb3AsXG4gICAgZXJyb3I6IGRlZmF1bHRFcnJvckhhbmRsZXIsXG4gICAgY29tcGxldGU6IG5vb3AsXG59O1xuXG52YXIgb2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7IHJldHVybiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wub2JzZXJ2YWJsZSkgfHwgJ0BAb2JzZXJ2YWJsZSc7IH0pKCk7XG5cbmZ1bmN0aW9uIGlkZW50aXR5KHgpIHtcbiAgICByZXR1cm4geDtcbn1cblxuZnVuY3Rpb24gcGlwZUZyb21BcnJheShmbnMpIHtcbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gaWRlbnRpdHk7XG4gICAgfVxuICAgIGlmIChmbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBmbnNbMF07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiBwaXBlZChpbnB1dCkge1xuICAgICAgICByZXR1cm4gZm5zLnJlZHVjZShmdW5jdGlvbiAocHJldiwgZm4pIHsgcmV0dXJuIGZuKHByZXYpOyB9LCBpbnB1dCk7XG4gICAgfTtcbn1cblxudmFyIE9ic2VydmFibGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE9ic2VydmFibGUoc3Vic2NyaWJlKSB7XG4gICAgICAgIGlmIChzdWJzY3JpYmUpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1YnNjcmliZSA9IHN1YnNjcmliZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGUoKTtcbiAgICAgICAgb2JzZXJ2YWJsZS5zb3VyY2UgPSB0aGlzO1xuICAgICAgICBvYnNlcnZhYmxlLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24gKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHN1YnNjcmliZXIgPSBpc1N1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQpID8gb2JzZXJ2ZXJPck5leHQgOiBuZXcgU2FmZVN1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSk7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcywgb3BlcmF0b3IgPSBfYS5vcGVyYXRvciwgc291cmNlID0gX2Euc291cmNlO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5hZGQob3BlcmF0b3JcbiAgICAgICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yLmNhbGwoc3Vic2NyaWJlciwgc291cmNlKVxuICAgICAgICAgICAgICAgIDogc291cmNlXG4gICAgICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9zdWJzY3JpYmUoc3Vic2NyaWJlcilcbiAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3RyeVN1YnNjcmliZShzdWJzY3JpYmVyKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc3Vic2NyaWJlcjtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc2luaykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZShzaW5rKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBzaW5rLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAobmV4dCwgcHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHN1YnNjcmliZXIgPSBuZXcgU2FmZVN1YnNjcmliZXIoe1xuICAgICAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IHJlc29sdmUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF90aGlzLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZVtvYnNlcnZhYmxlXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb3BlcmF0aW9ucyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgb3BlcmF0aW9uc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwaXBlRnJvbUFycmF5KG9wZXJhdGlvbnMpKHRoaXMpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUudG9Qcm9taXNlID0gZnVuY3Rpb24gKHByb21pc2VDdG9yKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHByb21pc2VDdG9yID0gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpO1xuICAgICAgICByZXR1cm4gbmV3IHByb21pc2VDdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZTtcbiAgICAgICAgICAgIF90aGlzLnN1YnNjcmliZShmdW5jdGlvbiAoeCkgeyByZXR1cm4gKHZhbHVlID0geCk7IH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHJlamVjdChlcnIpOyB9LCBmdW5jdGlvbiAoKSB7IHJldHVybiByZXNvbHZlKHZhbHVlKTsgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5jcmVhdGUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlKSB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShzdWJzY3JpYmUpO1xuICAgIH07XG4gICAgcmV0dXJuIE9ic2VydmFibGU7XG59KCkpO1xuZnVuY3Rpb24gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChfYSA9IHByb21pc2VDdG9yICE9PSBudWxsICYmIHByb21pc2VDdG9yICE9PSB2b2lkIDAgPyBwcm9taXNlQ3RvciA6IGNvbmZpZy5Qcm9taXNlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBQcm9taXNlO1xufVxuZnVuY3Rpb24gaXNPYnNlcnZlcih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLm5leHQpICYmIGlzRnVuY3Rpb24odmFsdWUuZXJyb3IpICYmIGlzRnVuY3Rpb24odmFsdWUuY29tcGxldGUpO1xufVxuZnVuY3Rpb24gaXNTdWJzY3JpYmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIFN1YnNjcmliZXIpIHx8IChpc09ic2VydmVyKHZhbHVlKSAmJiBpc1N1YnNjcmlwdGlvbih2YWx1ZSkpO1xufVxuXG5mdW5jdGlvbiBoYXNMaWZ0KHNvdXJjZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHNvdXJjZSA9PT0gbnVsbCB8fCBzb3VyY2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNvdXJjZS5saWZ0KTtcbn1cbmZ1bmN0aW9uIG9wZXJhdGUoaW5pdCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIGlmIChoYXNMaWZ0KHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2UubGlmdChmdW5jdGlvbiAobGlmdGVkU291cmNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluaXQobGlmdGVkU291cmNlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUnKTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSkge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUpO1xufVxudmFyIE9wZXJhdG9yU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKE9wZXJhdG9yU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSwgc2hvdWxkVW5zdWJzY3JpYmUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm9uRmluYWxpemUgPSBvbkZpbmFsaXplO1xuICAgICAgICBfdGhpcy5zaG91bGRVbnN1YnNjcmliZSA9IHNob3VsZFVuc3Vic2NyaWJlO1xuICAgICAgICBfdGhpcy5fbmV4dCA9IG9uTmV4dFxuICAgICAgICAgICAgPyBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbk5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9uZXh0O1xuICAgICAgICBfdGhpcy5fZXJyb3IgPSBvbkVycm9yXG4gICAgICAgICAgICA/IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX2Vycm9yO1xuICAgICAgICBfdGhpcy5fY29tcGxldGUgPSBvbkNvbXBsZXRlXG4gICAgICAgICAgICA/IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbkNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX2NvbXBsZXRlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9wZXJhdG9yU3Vic2NyaWJlci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlIHx8IHRoaXMuc2hvdWxkVW5zdWJzY3JpYmUoKSkge1xuICAgICAgICAgICAgdmFyIGNsb3NlZF8xID0gdGhpcy5jbG9zZWQ7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAhY2xvc2VkXzEgJiYgKChfYSA9IHRoaXMub25GaW5hbGl6ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodGhpcykpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gT3BlcmF0b3JTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5cbnZhciBPYmplY3RVbnN1YnNjcmliZWRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBPYmplY3RVbnN1YnNjcmliZWRFcnJvckltcGwoKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ09iamVjdFVuc3Vic2NyaWJlZEVycm9yJztcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ29iamVjdCB1bnN1YnNjcmliZWQnO1xuICAgIH07XG59KTtcblxudmFyIFN1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1YmplY3QoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgX3RoaXMub2JzZXJ2ZXJzID0gW107XG4gICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5oYXNFcnJvciA9IGZhbHNlO1xuICAgICAgICBfdGhpcy50aHJvd25FcnJvciA9IG51bGw7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgU3ViamVjdC5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uIChvcGVyYXRvcikge1xuICAgICAgICB2YXIgc3ViamVjdCA9IG5ldyBBbm9ueW1vdXNTdWJqZWN0KHRoaXMsIHRoaXMpO1xuICAgICAgICBzdWJqZWN0Lm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgIHJldHVybiBzdWJqZWN0O1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3Rocm93SWZDbG9zZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9iamVjdFVuc3Vic2NyaWJlZEVycm9yKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBBcnJheS5mcm9tKF90aGlzLm9ic2VydmVycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9iID0gX192YWx1ZXMoX3RoaXMuY3VycmVudE9ic2VydmVycyksIF9jID0gX2IubmV4dCgpOyAhX2MuZG9uZTsgX2MgPSBfYi5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlciA9IF9jLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfYyAmJiAhX2MuZG9uZSAmJiAoX2EgPSBfYi5yZXR1cm4pKSBfYS5jYWxsKF9iKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBfdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIF90aGlzLnRocm93bkVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlcnMgPSBfdGhpcy5vYnNlcnZlcnM7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXJzLnNoaWZ0KCkuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlcnMgPSBfdGhpcy5vYnNlcnZlcnM7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXJzLnNoaWZ0KCkuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLm9ic2VydmVycyA9IHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3ViamVjdC5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiAoKF9hID0gdGhpcy5vYnNlcnZlcnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sZW5ndGgpID4gMDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1YmplY3QucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLl90cnlTdWJzY3JpYmUuY2FsbCh0aGlzLCBzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbm5lclN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9pbm5lclN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGhhc0Vycm9yID0gX2EuaGFzRXJyb3IsIGlzU3RvcHBlZCA9IF9hLmlzU3RvcHBlZCwgb2JzZXJ2ZXJzID0gX2Eub2JzZXJ2ZXJzO1xuICAgICAgICBpZiAoaGFzRXJyb3IgfHwgaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgIG9ic2VydmVycy5wdXNoKHN1YnNjcmliZXIpO1xuICAgICAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgICAgIGFyclJlbW92ZShvYnNlcnZlcnMsIHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgdGhyb3duRXJyb3IgPSBfYS50aHJvd25FcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkO1xuICAgICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IodGhyb3duRXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzU3RvcHBlZCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGUoKTtcbiAgICAgICAgb2JzZXJ2YWJsZS5zb3VyY2UgPSB0aGlzO1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICB9O1xuICAgIFN1YmplY3QuY3JlYXRlID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbm9ueW1vdXNTdWJqZWN0KGRlc3RpbmF0aW9uLCBzb3VyY2UpO1xuICAgIH07XG4gICAgcmV0dXJuIFN1YmplY3Q7XG59KE9ic2VydmFibGUpKTtcbnZhciBBbm9ueW1vdXNTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQW5vbnltb3VzU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBbm9ueW1vdXNTdWJqZWN0KGRlc3RpbmF0aW9uLCBzb3VyY2UpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgX3RoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5leHQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCB2YWx1ZSk7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmVycm9yKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgZXJyKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29tcGxldGUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICByZXR1cm4gKF9iID0gKF9hID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdWJzY3JpYmUoc3Vic2NyaWJlcikpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IEVNUFRZX1NVQlNDUklQVElPTjtcbiAgICB9O1xuICAgIHJldHVybiBBbm9ueW1vdXNTdWJqZWN0O1xufShTdWJqZWN0KSk7XG5cbnZhciBkYXRlVGltZXN0YW1wUHJvdmlkZXIgPSB7XG4gICAgbm93OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoRGF0ZSkubm93KCk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxudmFyIEFjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHJldHVybiBBY3Rpb247XG59KFN1YnNjcmlwdGlvbikpO1xuXG52YXIgaW50ZXJ2YWxQcm92aWRlciA9IHtcbiAgICBzZXRJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAyOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbaGFuZGxlciwgdGltZW91dF0sIF9fcmVhZChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICByZXR1cm4gKGNsZWFySW50ZXJ2YWwpKGhhbmRsZSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxudmFyIEFzeW5jQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yaykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBfdGhpcy53b3JrID0gd29yaztcbiAgICAgICAgX3RoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIHZhciBpZCA9IHRoaXMuaWQ7XG4gICAgICAgIHZhciBzY2hlZHVsZXIgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmRlbGF5ID0gZGVsYXk7XG4gICAgICAgIHRoaXMuaWQgPSAoX2EgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLnJlcXVlc3RBc3luY0lkKHNjaGVkdWxlciwgdGhpcy5pZCwgZGVsYXkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIF9pZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBpbnRlcnZhbFByb3ZpZGVyLnNldEludGVydmFsKHNjaGVkdWxlci5mbHVzaC5iaW5kKHNjaGVkdWxlciwgdGhpcyksIGRlbGF5KTtcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uIChfc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmIChkZWxheSAhPSBudWxsICYmIHRoaXMuZGVsYXkgPT09IGRlbGF5ICYmIHRoaXMucGVuZGluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBpZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaW50ZXJ2YWxQcm92aWRlci5jbGVhckludGVydmFsKGlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLl9leGVjdXRlKHN0YXRlLCBkZWxheSk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucGVuZGluZyA9PT0gZmFsc2UgJiYgdGhpcy5pZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgX2RlbGF5KSB7XG4gICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvclZhbHVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy53b3JrKHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZXJyb3JlZCA9IHRydWU7XG4gICAgICAgICAgICBlcnJvclZhbHVlID0gZSA/IGUgOiBuZXcgRXJyb3IoJ1NjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3JlZCkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yVmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdmFyIF9hID0gdGhpcywgaWQgPSBfYS5pZCwgc2NoZWR1bGVyID0gX2Euc2NoZWR1bGVyO1xuICAgICAgICAgICAgdmFyIGFjdGlvbnMgPSBzY2hlZHVsZXIuYWN0aW9ucztcbiAgICAgICAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGFyclJlbW92ZShhY3Rpb25zLCB0aGlzKTtcbiAgICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRlbGF5ID0gbnVsbDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jQWN0aW9uO1xufShBY3Rpb24pKTtcblxudmFyIFNjaGVkdWxlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2NoZWR1bGVyKHNjaGVkdWxlckFjdGlvbkN0b3IsIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSBzY2hlZHVsZXJBY3Rpb25DdG9yO1xuICAgICAgICB0aGlzLm5vdyA9IG5vdztcbiAgICB9XG4gICAgU2NoZWR1bGVyLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uICh3b3JrLCBkZWxheSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHdvcmspLnNjaGVkdWxlKHN0YXRlLCBkZWxheSk7XG4gICAgfTtcbiAgICBTY2hlZHVsZXIubm93ID0gZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLm5vdztcbiAgICByZXR1cm4gU2NoZWR1bGVyO1xufSgpKTtcblxudmFyIEFzeW5jU2NoZWR1bGVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNTY2hlZHVsZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNTY2hlZHVsZXIoU2NoZWR1bGVyQWN0aW9uLCBub3cpIHtcbiAgICAgICAgaWYgKG5vdyA9PT0gdm9pZCAwKSB7IG5vdyA9IFNjaGVkdWxlci5ub3c7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgU2NoZWR1bGVyQWN0aW9uLCBub3cpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmFjdGlvbnMgPSBbXTtcbiAgICAgICAgX3RoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jU2NoZWR1bGVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNTY2hlZHVsZXI7XG59KFNjaGVkdWxlcikpO1xuXG52YXIgYXN5bmNTY2hlZHVsZXIgPSBuZXcgQXN5bmNTY2hlZHVsZXIoQXN5bmNBY3Rpb24pO1xuXG52YXIgaXNBcnJheUxpa2UgPSAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggJiYgdHlwZW9mIHgubGVuZ3RoID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgeCAhPT0gJ2Z1bmN0aW9uJzsgfSk7XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZS50aGVuKTtcbn1cblxuZnVuY3Rpb24gaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0W29ic2VydmFibGVdKTtcbn1cblxuZnVuY3Rpb24gaXNBc3luY0l0ZXJhYmxlKG9iaikge1xuICAgIHJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciAmJiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKGlucHV0ICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgPyAnYW4gaW52YWxpZCBvYmplY3QnIDogXCInXCIgKyBpbnB1dCArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuXG5mdW5jdGlvbiBnZXRTeW1ib2xJdGVyYXRvcigpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCAhU3ltYm9sLml0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiAnQEBpdGVyYXRvcic7XG4gICAgfVxuICAgIHJldHVybiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgaXRlcmF0b3IgPSBnZXRTeW1ib2xJdGVyYXRvcigpO1xuXG5mdW5jdGlvbiBpc0l0ZXJhYmxlKGlucHV0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0W2l0ZXJhdG9yXSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3JfMSgpIHtcbiAgICAgICAgdmFyIHJlYWRlciwgX2EsIHZhbHVlLCBkb25lO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMjtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdChyZWFkZXIucmVhZCgpKV07XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBfYSA9IF9iLnNlbnQoKSwgdmFsdWUgPSBfYS52YWx1ZSwgZG9uZSA9IF9hLmRvbmU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZG9uZSkgcmV0dXJuIFszLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHZvaWQgMCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFs0LCBfX2F3YWl0KHZhbHVlKV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OiByZXR1cm4gWzQsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMl07XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWxlYXNlTG9jaygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaXNSZWFkYWJsZVN0cmVhbUxpa2Uob2JqKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqLmdldFJlYWRlcik7XG59XG5cbmZ1bmN0aW9uIGlubmVyRnJvbShpbnB1dCkge1xuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5TGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm9taXNlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Qcm9taXNlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBc3luY0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSXRlcmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCk7XG59XG5mdW5jdGlvbiBmcm9tSW50ZXJvcE9ic2VydmFibGUob2JqKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvYnMgPSBvYmpbb2JzZXJ2YWJsZV0oKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzLnN1YnNjcmliZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlJyk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlKGFycmF5KSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoICYmICFzdWJzY3JpYmVyLmNsb3NlZDsgaSsrKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYXJyYXlbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21Qcm9taXNlKHByb21pc2UpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSlcbiAgICAgICAgICAgIC50aGVuKG51bGwsIHJlcG9ydFVuaGFuZGxlZEVycm9yKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21JdGVyYWJsZShpdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGl0ZXJhYmxlXzEgPSBfX3ZhbHVlcyhpdGVyYWJsZSksIGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpOyAhaXRlcmFibGVfMV8xLmRvbmU7IGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gaXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZV8xXzEgJiYgIWl0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGl0ZXJhYmxlXzEucmV0dXJuKSkgX2EuY2FsbChpdGVyYWJsZV8xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXN5bmNJdGVyYWJsZShhc3luY0l0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikuY2F0Y2goZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUocmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkpO1xufVxuZnVuY3Rpb24gcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKSB7XG4gICAgdmFyIGFzeW5jSXRlcmFibGVfMSwgYXN5bmNJdGVyYWJsZV8xXzE7XG4gICAgdmFyIGVfMiwgX2E7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdmFsdWUsIGVfMl8xO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzAsIDUsIDYsIDExXSk7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jSXRlcmFibGVfMSA9IF9fYXN5bmNWYWx1ZXMoYXN5bmNJdGVyYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbNCwgYXN5bmNJdGVyYWJsZV8xLm5leHQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSA9IF9iLnNlbnQoKSwgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUpKSByZXR1cm4gWzMsIDRdO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzeW5jSXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAzO1xuICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFszLCAxXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgZV8yXzEgPSBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xICYmICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGFzeW5jSXRlcmFibGVfMS5yZXR1cm4pKSkgcmV0dXJuIFszLCA4XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfYS5jYWxsKGFzeW5jSXRlcmFibGVfMSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDg7XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVTY2hlZHVsZShwYXJlbnRTdWJzY3JpcHRpb24sIHNjaGVkdWxlciwgd29yaywgZGVsYXksIHJlcGVhdCkge1xuICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgIGlmIChyZXBlYXQgPT09IHZvaWQgMCkgeyByZXBlYXQgPSBmYWxzZTsgfVxuICAgIHZhciBzY2hlZHVsZVN1YnNjcmlwdGlvbiA9IHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdvcmsoKTtcbiAgICAgICAgaWYgKHJlcGVhdCkge1xuICAgICAgICAgICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIGRlbGF5KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9LCBkZWxheSk7XG4gICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZChzY2hlZHVsZVN1YnNjcmlwdGlvbik7XG4gICAgaWYgKCFyZXBlYXQpIHtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlU3Vic2NyaXB0aW9uO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dFcnJvcihlcnJvck9yRXJyb3JGYWN0b3J5LCBzY2hlZHVsZXIpIHtcbiAgICB2YXIgZXJyb3JGYWN0b3J5ID0gaXNGdW5jdGlvbihlcnJvck9yRXJyb3JGYWN0b3J5KSA/IGVycm9yT3JFcnJvckZhY3RvcnkgOiBmdW5jdGlvbiAoKSB7IHJldHVybiBlcnJvck9yRXJyb3JGYWN0b3J5OyB9O1xuICAgIHZhciBpbml0ID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyb3JGYWN0b3J5KCkpOyB9O1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShpbml0KTtcbn1cblxudmFyIEVtcHR5RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHsgcmV0dXJuIGZ1bmN0aW9uIEVtcHR5RXJyb3JJbXBsKCkge1xuICAgIF9zdXBlcih0aGlzKTtcbiAgICB0aGlzLm5hbWUgPSAnRW1wdHlFcnJvcic7XG4gICAgdGhpcy5tZXNzYWdlID0gJ25vIGVsZW1lbnRzIGluIHNlcXVlbmNlJztcbn07IH0pO1xuXG5mdW5jdGlvbiBsYXN0VmFsdWVGcm9tKHNvdXJjZSwgY29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIF9oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgX3ZhbHVlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIF9oYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9oYXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKF92YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVtcHR5RXJyb3IoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWREYXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odmFsdWUpO1xufVxuXG52YXIgVGltZW91dEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFRpbWVvdXRFcnJvckltcGwoaW5mbykge1xuICAgICAgICBpZiAoaW5mbyA9PT0gdm9pZCAwKSB7IGluZm8gPSBudWxsOyB9XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ1RpbWVvdXQgaGFzIG9jY3VycmVkJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1RpbWVvdXRFcnJvcic7XG4gICAgICAgIHRoaXMuaW5mbyA9IGluZm87XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gdGltZW91dChjb25maWcsIHNjaGVkdWxlckFyZykge1xuICAgIHZhciBfYSA9IChpc1ZhbGlkRGF0ZShjb25maWcpID8geyBmaXJzdDogY29uZmlnIH0gOiB0eXBlb2YgY29uZmlnID09PSAnbnVtYmVyJyA/IHsgZWFjaDogY29uZmlnIH0gOiBjb25maWcpLCBmaXJzdCA9IF9hLmZpcnN0LCBlYWNoID0gX2EuZWFjaCwgX2IgPSBfYS53aXRoLCBfd2l0aCA9IF9iID09PSB2b2lkIDAgPyB0aW1lb3V0RXJyb3JGYWN0b3J5IDogX2IsIF9jID0gX2Euc2NoZWR1bGVyLCBzY2hlZHVsZXIgPSBfYyA9PT0gdm9pZCAwID8gYXN5bmNTY2hlZHVsZXIgOiBfYywgX2QgPSBfYS5tZXRhLCBtZXRhID0gX2QgPT09IHZvaWQgMCA/IG51bGwgOiBfZDtcbiAgICBpZiAoZmlyc3QgPT0gbnVsbCAmJiBlYWNoID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gdGltZW91dCBwcm92aWRlZC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb247XG4gICAgICAgIHZhciB0aW1lclN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIHZhciBzZWVuID0gMDtcbiAgICAgICAgdmFyIHN0YXJ0VGltZXIgPSBmdW5jdGlvbiAoZGVsYXkpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID0gZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlubmVyRnJvbShfd2l0aCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhOiBtZXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlOiBsYXN0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWVuOiBzZWVuLFxuICAgICAgICAgICAgICAgICAgICB9KSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBkZWxheSk7XG4gICAgICAgIH07XG4gICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uID0gc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHNlZW4rKztcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCgobGFzdFZhbHVlID0gdmFsdWUpKTtcbiAgICAgICAgICAgIGVhY2ggPiAwICYmIHN0YXJ0VGltZXIoZWFjaCk7XG4gICAgICAgIH0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoISh0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24uY2xvc2VkKSkge1xuICAgICAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgfSkpO1xuICAgICAgICAhc2VlbiAmJiBzdGFydFRpbWVyKGZpcnN0ICE9IG51bGwgPyAodHlwZW9mIGZpcnN0ID09PSAnbnVtYmVyJyA/IGZpcnN0IDogK2ZpcnN0IC0gc2NoZWR1bGVyLm5vdygpKSA6IGVhY2gpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gdGltZW91dEVycm9yRmFjdG9yeShpbmZvKSB7XG4gICAgdGhyb3cgbmV3IFRpbWVvdXRFcnJvcihpbmZvKTtcbn1cblxuY2xhc3MgTG9hZGVkT25jZVB1Ymxpc2hlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0ID0gKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiwgaXNTdWNjZXNzOiB0cnVlLCBsb2FkZWRWYWx1ZTogdmFsdWUgfTtcbiAgICAgIHRoaXMuX3N1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgICB0aGlzLl9zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICB0aGlzLnRocm93ID0gKGVycm9yLCBlcnJNc2cpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiZXJyb3JcIiwgaXNTdWNjZXNzOiBmYWxzZSwgZXJyb3IsIGVyck1zZyB9O1xuICAgICAgdGhpcy5fc3ViamVjdC5lcnJvcihlcnJvcik7XG4gICAgfTtcbiAgICB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHZhbHVlSWZOb3RMb2FkZWQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiB0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlSWZOb3RMb2FkZWQ7XG4gICAgfTtcbiAgICB0aGlzLnN1YnNjcmliZSA9IChmbikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChuZXh0KTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiZXJyb3JcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAoZXJyb3IpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMud2FpdEZvckxvYWQgPSAodGltZW91dENvbmZpZykgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5fY3VycmVudC5lcnJvcik7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiKSBhc3NlcnROZXZlcih0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHRpbWVvdXRQYXJhbXMgPSB7XG4gICAgICAgIGZpcnN0OiB0aW1lb3V0Q29uZmlnLnRpbWVvdXRTZWMgKiAxZTMsXG4gICAgICAgIHdpdGg6ICgpID0+IHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKHRpbWVvdXRDb25maWcudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5fc3ViamVjdC5waXBlKHRpbWVvdXQodGltZW91dFBhcmFtcykpKTtcbiAgICB9O1xuICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogZmFsc2UgfTtcbiAgICB0aGlzLl9zdWJqZWN0ID0gbmV3IFN1YmplY3QoKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuXG56JDEuZW51bShbXCJkZXZcIiwgXCJzdGdcIiwgXCJwcm9kXCJdKTtcbmNvbnN0IGNvbm50b0Jhc2VVcmxzID0ge1xuICBwcm9kOiBcImh0dHBzOi8vY29ubnRvLmdldG9wZW5wYXkuY29tXCIsXG4gIHN0ZzogXCJodHRwczovL2Nvbm50by5vcGVucGF5c3RhZ2luZy5jb21cIixcbiAgZGV2OiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMFwiXG59O1xuY29uc3QgZ2V0Q29ubnRvVXJsID0gKGVudikgPT4ge1xuICByZXR1cm4gY29ubnRvQmFzZVVybHNbZW52XTtcbn07XG5cbmZ1bmN0aW9uIGFzc2VydE5ldmVyKHZhbHVlKSB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIGNhc2U6ICR7dmFsdWV9YCk7XG59XG5jb25zdCBnZXRXaW5kb3dTYWZlID0gKCkgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgcmV0dXJuIHdpbmRvdztcbn07XG5cbmNvbnN0IG1ldHJpY3NQdWJsaXNoZXIgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuY29uc3QgTUVUUklDU19RVUVVRV9LRVkgPSBcIm9wX21ldHJpY3NfcXVldWVcIjtcbmNvbnN0IE1BWF9SRVRSWV9BVFRFTVBUUyA9IDM7XG5jb25zdCBCQVRDSF9TSVpFID0gMztcbmNvbnN0IEJBVENIX0lOVEVSVkFMX01TID0gMWUzO1xuY29uc3QgeyBsb2dfXzogbG9nX18kMSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJvcC1tZXRyaWNzXCIpO1xuY2xhc3MgTWV0cmljc1F1ZXVlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gMDtcbiAgICB0aGlzLm9mZmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fJDEoXCJOZXR3b3JrIG9mZmxpbmUsIG1ldHJpY3Mgd2lsbCBiZSBxdWV1ZWRcIik7XG4gICAgICB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICAgIH07XG4gICAgdGhpcy5vbmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fJDEoXCJOZXR3b3JrIG9ubGluZSwgcHJvY2Vzc2luZyBtZXRyaWNzIHF1ZXVlXCIpO1xuICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9O1xuICAgIHRoaXMubG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gIH1cbiAgYWRkRXZlbnQoZXZlbnROYW1lLCBwcm9wZXJ0aWVzLCBjb250ZXh0UHJvcGVydGllcykge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnROYW1lLFxuICAgICAgcHJvcGVydGllczogcHJvcGVydGllcyB8fCB7fSxcbiAgICAgIGNvbnRleHRQcm9wZXJ0aWVzOiBjb250ZXh0UHJvcGVydGllcyB8fCB7fSxcbiAgICAgIG5vbmNlOiB2NCgpLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgZGF0ZXRpbWU6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIGF0dGVtcHRDb3VudDogMCxcbiAgICAgIHRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQ6IHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID8gRGF0ZS5ub3coKSAtIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wIDogMFxuICAgIH07XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSBldmVudC50aW1lc3RhbXA7XG4gICAgdGhpcy5xdWV1ZS5wdXNoKGV2ZW50KTtcbiAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxuICBsb2FkUXVldWVGcm9tU3RvcmFnZSgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkUXVldWUgPSBnZXRXaW5kb3dTYWZlKCk/LmxvY2FsU3RvcmFnZT8uZ2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSk7XG4gICAgICBpZiAoc3RvcmVkUXVldWUpIHtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IEpTT04ucGFyc2Uoc3RvcmVkUXVldWUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIH1cbiAgfVxuICBzYXZlUXVldWVUb1N0b3JhZ2UoKSB7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSwgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWV1ZSkpO1xuICB9XG4gIHNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIGNvbnN0IHNhZmVXaW5kb3cgPSBnZXRXaW5kb3dTYWZlKCk7XG4gICAgaWYgKHNhZmVXaW5kb3cgJiYgbmF2aWdhdG9yLm9uTGluZSAmJiAhdGhpcy5wcm9jZXNzaW5nUXVldWUgJiYgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmICF0aGlzLmJhdGNoVGltZW91dCkge1xuICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBzYWZlV2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgICB9LCBCQVRDSF9JTlRFUlZBTF9NUyk7XG4gICAgfVxuICB9XG4gIGNhbmNlbEJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBpZiAodGhpcy5iYXRjaFRpbWVvdXQpIHtcbiAgICAgIGdldFdpbmRvd1NhZmUoKT8uY2xlYXJUaW1lb3V0KHRoaXMuYmF0Y2hUaW1lb3V0KTtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgfVxuICBwcm9jZXNzUXVldWUoKSB7XG4gICAgaWYgKCFuYXZpZ2F0b3Iub25MaW5lIHx8IHRoaXMucHJvY2Vzc2luZ1F1ZXVlIHx8IHRoaXMucXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gdHJ1ZTtcbiAgICB0aGlzLnNlbmRCYXRjaCgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGFzeW5jIHNlbmRCYXRjaCgpIHtcbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBjb250ZXh0ID0gbWV0cmljc1B1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZSh2b2lkIDApO1xuICAgIGlmICghY29udGV4dCkge1xuICAgICAgbG9nX18kMShcIk1ldHJpY3MgY29udGV4dCBub3QgYXZhaWxhYmxlLCB3aWxsIHJldHJ5IGxhdGVyXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBiYXRjaCA9IHRoaXMucXVldWUuc2xpY2UoMCwgQkFUQ0hfU0laRSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhdGNoUGF5bG9hZCA9IHtcbiAgICAgICAgZXZlbnRzOiBiYXRjaC5tYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGV2ZW50X25hbWU6IGV2ZW50LmV2ZW50TmFtZSxcbiAgICAgICAgICAgIGRldmljZV90b2tlbjogY29udGV4dC5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGNvbnRleHRfcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAuLi5jb250ZXh0LFxuICAgICAgICAgICAgICAuLi5ldmVudC5jb250ZXh0UHJvcGVydGllc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgbm9uY2U6IGV2ZW50Lm5vbmNlLFxuICAgICAgICAgICAgICBkYXRldGltZTogZXZlbnQuZGF0ZXRpbWUsXG4gICAgICAgICAgICAgIHRpbWVzdGFtcDogZXZlbnQudGltZXN0YW1wLFxuICAgICAgICAgICAgICB0aW1lX2RpZmZfZnJvbV9wcmV2aW91c19ldmVudDogZXZlbnQudGltZURpZmZGcm9tUHJldmlvdXNFdmVudCxcbiAgICAgICAgICAgICAgY2hlY2tvdXRfc2VjdXJlX3Rva2VuOiBjb250ZXh0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICAgIC4uLmV2ZW50LnByb3BlcnRpZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbm50b1VybCA9IGdldENvbm50b1VybChjb250ZXh0LmVudmlyb25tZW50KTtcbiAgICAgIGNvbnN0IG1ldHJpY3NSb3V0ZXIgPSBuZXcgVVJMKFwiL21ldHJpY3MvcHVibGljL2NhcHR1cmVcIiwgY29ubnRvVXJsKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gobWV0cmljc1JvdXRlci50b1N0cmluZygpLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShiYXRjaFBheWxvYWQpXG4gICAgICB9KTtcbiAgICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICB0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZShiYXRjaC5sZW5ndGgpO1xuICAgICAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChiYXRjaCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ19fJDEoXCJFcnJvciBzZW5kaW5nIG1ldHJpY3MgYmF0Y2g6XCIsIGVycm9yKTtcbiAgICAgIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpO1xuICAgIH1cbiAgfVxuICBoYW5kbGVGYWlsZWRCYXRjaChiYXRjaCkge1xuICAgIGJhdGNoLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5hdHRlbXB0Q291bnQrKztcbiAgICB9KTtcbiAgICBjb25zdCBldmVudHNUb0tlZXAgPSBiYXRjaC5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5hdHRlbXB0Q291bnQgPCBNQVhfUkVUUllfQVRURU1QVFMpO1xuICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKGJhdGNoLmxlbmd0aCk7XG4gICAgdGhpcy5xdWV1ZSA9IFsuLi5ldmVudHNUb0tlZXAsIC4uLnRoaXMucXVldWVdO1xuICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gIH1cbiAgY2xlYW51cCgpIHtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gICAgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxufVxuY29uc3QgbWV0cmljc1F1ZXVlID0gbmV3IE1ldHJpY3NRdWV1ZSgpO1xuZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsICgpID0+IHtcbiAgbWV0cmljc1F1ZXVlLnByb2Nlc3NRdWV1ZSgpO1xufSk7XG5cbnokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG59KTtcblxuY29uc3QgZXh0cmFjdElzc3Vlc1BlckZpZWxkID0gKGVycm9yKSA9PiB7XG4gIGNvbnN0IGlzc3Vlc1BlckZpZWxkID0ge307XG4gIE9iamVjdC5lbnRyaWVzKGVycm9yKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gRmllbGROYW1lRW51bS5wYXJzZShrZXkpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGlzc3Vlc1BlckZpZWxkW2ZpZWxkTmFtZV0gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5fZXJyb3JzKSkge1xuICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWUuX2Vycm9ycztcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaXNzdWVzUGVyRmllbGQ7XG59O1xuXG5jb25zdCB7IGxvZ19fLCBlcnJfXzogZXJyX18kMSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG5jb25zdCBjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYSA9ICh7XG4gIHJlcXVpcmVfemlwX2NvZGUsXG4gIHJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3MsXG4gIHJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzLFxuICBwYXltZW50X21ldGhvZFxufSkgPT4ge1xuICBjb25zdCBjb25kaXRpb25hbEZpZWxkcyA9IHt9O1xuICBpZiAocGF5bWVudF9tZXRob2QgPT09IFwiYWNoXCIpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSB6JDEuc3RyaW5nKCkubWluKDIsIHsgbWVzc2FnZTogXCJNaW5pbXVtIGxlbmd0aCBpcyAyXCIgfSk7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSB6JDEuc3RyaW5nKCkubWluKDIsIHsgbWVzc2FnZTogXCJNaW5pbXVtIGxlbmd0aCBpcyAyXCIgfSk7XG4gIH1cbiAgaWYgKHJlcXVpcmVfemlwX2NvZGUpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdID0gUmVxdWlyZWRTdHJpbmc7XG4gIH1cbiAgaWYgKHJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3MpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuTElORTFdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkNJVFldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNUQVRFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBSZXF1aXJlZFN0cmluZztcbiAgfVxuICBpZiAocmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTFdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0NJVFldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX1NUQVRFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19aSVBfQ09ERV0gPSBSZXF1aXJlZFN0cmluZztcbiAgfVxuICBpZiAoT2JqZWN0LmtleXMoY29uZGl0aW9uYWxGaWVsZHMpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBSZXF1aXJlZEZvcm1GaWVsZHM7XG4gIH1cbiAgcmV0dXJuIFJlcXVpcmVkRm9ybUZpZWxkcy5leHRlbmQoY29uZGl0aW9uYWxGaWVsZHMpO1xufTtcbmNvbnN0IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcyA9IChub25DZGVGb3JtSW5wdXRzLCBvblZhbGlkYXRpb25FcnJvciwgZGVmYXVsdEZpZWxkVmFsdWVzID0ge30pID0+IHtcbiAgaWYgKGRlZmF1bHRGaWVsZFZhbHVlcykge1xuICAgIGxvZ19fKGBSZWNlaXZlZCBkZWZhdWx0IGZpZWxkIHZhbHVlczogJHtKU09OLnN0cmluZ2lmeShkZWZhdWx0RmllbGRWYWx1ZXMpfWApO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhkZWZhdWx0RmllbGRWYWx1ZXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGNvbnN0IHZhbHVlID0gZGVmYXVsdEZpZWxkVmFsdWVzW2tleV07XG4gICAgICBpZiAoIW5vbkNkZUZvcm1JbnB1dHNba2V5XSkge1xuICAgICAgICBub25DZGVGb3JtSW5wdXRzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSA9ICEhbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXTtcbiAgaWYgKG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLklTX1NISVBQSU5HX1NBTUVfQVNfQklMTElOR10pIHtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gPSBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5MSU5FMV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTJdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuTElORTJdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUzXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkxJTkUzXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkNJVFldO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1NUQVRFXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNUQVRFXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkNPVU5UUlldO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1pJUF9DT0RFXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXTtcbiAgfVxuICBjb25zdCB2YWxpZGF0aW9uU2NoZW1hID0gY3JlYXRlRHluYW1pY1ZhbGlkYXRpb25TY2hlbWEoZGVmYXVsdEZpZWxkVmFsdWVzKTtcbiAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGlvblNjaGVtYS5zYWZlUGFyc2Uobm9uQ2RlRm9ybUlucHV0cyk7XG4gIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSByZXN1bHQuZXJyb3IuZm9ybWF0KCk7XG4gICAgY29uc3QgaXNzdWVzID0gZXh0cmFjdElzc3Vlc1BlckZpZWxkKGZvcm1hdHRlZCk7XG4gICAgY29uc3QgaXNzdWVLZXlzID0gT2JqZWN0LmtleXMoaXNzdWVzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlzc3VlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gaXNzdWVLZXlzW2ldO1xuICAgICAgY29uc3QgZXJyb3JzID0gaXNzdWVzW2ZpZWxkTmFtZV07XG4gICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9ycywgZmllbGROYW1lKTtcbiAgICB9XG4gICAgZXJyX18kMShcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIGlzc3Vlcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQWxtb3N0IHRoZXJlISBKdXN0IGEgZmV3IHRoaW5ncyBoaWdobGlnaHRlZCBhYm92ZSB0byBmaXggYmVmb3JlIHlvdSBjYW4gc3VibWl0LlwiKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0LmRhdGE7XG59O1xuXG5jb25zdCBQYXltZW50UHJvY2Vzc29yID0geiQxLmVudW0oW1wic3RyaXBlXCIsIFwiYWlyd2FsbGV4XCIsIFwiYXV0aG9yaXplX25ldFwiLCBcImFkeWVuXCIsIFwicGF5cGFsXCIsIFwicG9ja3l0XCIsIFwibG9vcFwiXSk7XG4oe1xuICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgfVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBcIm9wLWFpcndhbGxleC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCI6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5jb25zdCBBV1hfTE9BRElORyA9IHtcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICB9XG59O1xuXG56JDEub2JqZWN0KHtcbiAgZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVzc2FnZUhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAgIGVycm9yczogeiQxLmFycmF5KHokMS5hbnkoKSksXG4gICAgbWVzc2FnZVR5cGU6IHokMS5zdHJpbmcoKSxcbiAgICBtZXNzYWdlQm9keTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgfSksXG4gIG9yaWdpbjogeiQxLmxpdGVyYWwoXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb21cIilcbn0pO1xuXG5jb25zdCBBZHllbkVudmlyb25tZW50ID0geiQxLmVudW0oW1widGVzdFwiLCBcImxpdmVcIiwgXCJsaXZlLXVzXCIsIFwibGl2ZS1pblwiLCBcImxpdmUtYXBzZVwiLCBcImxpdmUtYXVcIl0pO1xueiQxLmVudW0oW1xuICBcImFyXCIsXG4gIFwiYmctQkdcIixcbiAgXCJjYS1FU1wiLFxuICBcImNzLUNaXCIsXG4gIFwiZGEtREtcIixcbiAgXCJkZS1ERVwiLFxuICBcImVsLUdSXCIsXG4gIFwiZW4tVVNcIixcbiAgXCJlcy1FU1wiLFxuICBcImV0LUVFXCIsXG4gIFwiZmktRklcIixcbiAgXCJmci1GUlwiLFxuICBcImhyLUhSXCIsXG4gIFwiaHUtSFVcIixcbiAgXCJpcy1JU1wiLFxuICBcIml0LUlUXCIsXG4gIFwiamEtSlBcIixcbiAgXCJrby1LUlwiLFxuICBcImx0LUxUXCIsXG4gIFwibHYtTFZcIixcbiAgXCJubC1OTFwiLFxuICBcIm5vLU5PXCIsXG4gIFwicGwtUExcIixcbiAgXCJwdC1CUlwiLFxuICBcInB0LVBUXCIsXG4gIFwicm8tUk9cIixcbiAgXCJydS1SVVwiLFxuICBcInNrLVNLXCIsXG4gIFwic2wtU0lcIixcbiAgXCJzdi1TRVwiLFxuICBcInpoLUNOXCIsXG4gIFwiemgtVFdcIlxuXSk7XG56JDEub2JqZWN0KHtcbiAgXCJvcC1hY2NvdW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1jbGllbnQta2V5XCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiOiBBZHllbkVudmlyb25tZW50LFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWR5ZW5cIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWR5ZW5cIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG52YXIgRW52aXJvbm1lbnQgPSAvKiBAX19QVVJFX18gKi8gKChFbnZpcm9ubWVudDIpID0+IHtcbiAgRW52aXJvbm1lbnQyW1wiTG9jYWxcIl0gPSBcImxvY2FsXCI7XG4gIEVudmlyb25tZW50MltcIkRldmVsb3BtZW50XCJdID0gXCJkZXZlbG9wbWVudFwiO1xuICBFbnZpcm9ubWVudDJbXCJTdGFnaW5nXCJdID0gXCJzdGFnaW5nXCI7XG4gIEVudmlyb25tZW50MltcIkRlbW9cIl0gPSBcImRlbW9cIjtcbiAgRW52aXJvbm1lbnQyW1wiUHJvZHVjdGlvblwiXSA9IFwicHJvZHVjdGlvblwiO1xuICByZXR1cm4gRW52aXJvbm1lbnQyO1xufSkoRW52aXJvbm1lbnQgfHwge30pO1xudmFyIFBheUluRmFpbGVkID0gLyogQF9fUFVSRV9fICovICgoUGF5SW5GYWlsZWQyKSA9PiB7XG4gIFBheUluRmFpbGVkMltcIk1FVEhPRF9DUkVBVElPTl9GQUlMRURcIl0gPSBcIm1ldGhvZENyZWF0aW9uRmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIklOU1VGRklDSUVOVF9CQUxBTkNFXCJdID0gXCJpbnN1ZmZpY2llbnRCYWxhbmNlXCI7XG4gIFBheUluRmFpbGVkMltcIklOU1VGRklDSUVOVF9BVVRIT1JJWkFUSU9OXCJdID0gXCJpbnN1ZmZpY2llbnRBdXRob3JpemF0aW9uXCI7XG4gIFBheUluRmFpbGVkMltcIlNJR05FRF9NRVNTQUdFX1JFUVVJUkVEXCJdID0gXCJzaWduZWRNZXNzYWdlUmVxdWlyZWRcIjtcbiAgUGF5SW5GYWlsZWQyW1wiQ1VTVE9NRVJfQ1JFQVRJT05fRkFJTEVEXCJdID0gXCJjdXN0b21lckNyZWF0aW9uRmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIlBBWU1FTlRfRkFJTEVEXCJdID0gXCJwYXltZW50RmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIlRSQU5TQUNUSU9OX0ZBSUxFRFwiXSA9IFwidHJhbnNhY3Rpb25GYWlsZWRcIjtcbiAgcmV0dXJuIFBheUluRmFpbGVkMjtcbn0pKFBheUluRmFpbGVkIHx8IHt9KTtcbnZhciBQYXlJblN0YXRlID0gLyogQF9fUFVSRV9fICovICgoUGF5SW5TdGF0ZTIpID0+IHtcbiAgUGF5SW5TdGF0ZTJbXCJJRExFXCJdID0gXCJpZGxlXCI7XG4gIFBheUluU3RhdGUyW1wiQ09ORklSTUlOR19CQUxBTkNFXCJdID0gXCJjb25maXJtaW5nQmFsYW5jZVwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfQVVUSE9SSVpBVElPTlwiXSA9IFwiY29uZmlybWluZ0F1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5TdGF0ZTJbXCJVUERBVElOR19BVVRIT1JJWkFUSU9OXCJdID0gXCJ1cGRhdGluZ0F1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5TdGF0ZTJbXCJTSUdOSU5HX01FU1NBR0VcIl0gPSBcInNpZ25pbmdNZXNzYWdlXCI7XG4gIFBheUluU3RhdGUyW1wiQ1JFQVRJTkdfQ1VTVE9NRVJcIl0gPSBcImNyZWF0aW5nQ3VzdG9tZXJcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDUkVBVElOR19QQVlNRU5UX01FVEhPRFwiXSA9IFwiY3JlYXRpbmdQYXltZW50TWV0aG9kXCI7XG4gIFBheUluU3RhdGUyW1wiUFJPQ0VTU0lOR19QQVlNRU5UXCJdID0gXCJwcm9jZXNzaW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNSRUFUSU5HX1BBWU1FTlRcIl0gPSBcImNyZWF0aW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfUEFZTUVOVFwiXSA9IFwiY29uZmlybWluZ1BheW1lbnRcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDT01QTEVURVwiXSA9IFwiY29tcGxldGVcIjtcbiAgUGF5SW5TdGF0ZTJbXCJBVVRIT1JJWkVEXCJdID0gXCJhdXRob3JpemVkXCI7XG4gIHJldHVybiBQYXlJblN0YXRlMjtcbn0pKFBheUluU3RhdGUgfHwge30pO1xuXG5jb25zdCBMT09QX0xPQURJTkcgPSB7XG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBjb25maWc6IG51bGwsXG4gIHdpZGdldDogbnVsbFxufTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3QoeyBjbGllbnRfaWQ6IHokMS5zdHJpbmcoKSB9KSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHokMS5zdHJpbmcoKSxcbiAgICB2ZXJpZnlfdG9rZW46IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnVuaW9uKFt6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcblxuY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJmb3JtLWNhbGxiYWNrc1wiKTtcbmNvbnN0IE9wdGlvbmFsRm4gPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpO1xuY29uc3QgWm9kRm9ybUNhbGxiYWNrcyA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiBPcHRpb25hbEZuLFxuICBvbkJsdXI6IE9wdGlvbmFsRm4sXG4gIG9uQ2hhbmdlOiBPcHRpb25hbEZuLFxuICBvbkxvYWQ6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZEVycm9yOiBPcHRpb25hbEZuLFxuICBvblZhbGlkYXRpb25FcnJvcjogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IE9wdGlvbmFsRm5cbn0pO1xuY2xhc3MgRm9ybUNhbGxiYWNrcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIFNldHMgQUxMIGZvcm0gY2FsbGJhY2tzLiBOb3RlIHRoYXQgYWxsIG9sZCBjYWxsYmFja3MgYXJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocmF3Q2FsbGJhY2tzKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gICAgICBPYmplY3QuZW50cmllcyhyYXdDYWxsYmFja3MpLmZvckVhY2goKFtrZXksIHJhd0NhbGxiYWNrXSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZlQ2FsbGJhY2sgPSBtYWtlQ2FsbGJhY2tTYWZlKGtleSwgcmF3Q2FsbGJhY2sgPz8gRm9ybUNhbGxiYWNrcy5OT09QLCBlcnJfXyk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1trZXldID0gc2FmZUNhbGxiYWNrO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLk5PT1AgPSAoKSA9PiB7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gICAgICBjb25zdCB4ID0ge307XG4gICAgICBPYmplY3Qua2V5cyhab2RGb3JtQ2FsbGJhY2tzLmtleW9mKCkuZW51bSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHhba2V5XSA9IEZvcm1DYWxsYmFja3MuTk9PUDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZnJvbU9iamVjdCA9IChvYmopID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEZvcm1DYWxsYmFja3MoKTtcbiAgICAgIGluc3RhbmNlLnNldENhbGxiYWNrcyhab2RGb3JtQ2FsbGJhY2tzLnBhcnNlKG9iaikpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn1cblxudmFyIFN1Ym1pdE1ldGhvZHMgPSAvKiBAX19QVVJFX18gKi8gKChTdWJtaXRNZXRob2RzMikgPT4ge1xuICBTdWJtaXRNZXRob2RzMltcInBvY2t5dFBheXBhbFwiXSA9IFwicG9ja3l0LXBheXBhbFwiO1xuICBTdWJtaXRNZXRob2RzMltcImFwcGxlUGF5XCJdID0gXCJhcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJnb29nbGVQYXlcIl0gPSBcImdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJsb29wQ3J5cHRvXCJdID0gXCJsb29wLWNyeXB0b1wiO1xuICBTdWJtaXRNZXRob2RzMltcInBheXBhbFwiXSA9IFwicGF5cGFsXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4R29vZ2xlUGF5XCJdID0gXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEFwcGxlUGF5XCJdID0gXCJhaXJ3YWxsZXgtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXV0aG9yaXplbmV0R29vZ2xlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEFwcGxlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWR5ZW5Hb29nbGVQYXlcIl0gPSBcImFkeWVuLWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhZHllbkFwcGxlUGF5XCJdID0gXCJhZHllbi1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhBQ0hcIl0gPSBcImFpcndhbGxleC1hY2hcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhFRlRcIl0gPSBcImFpcndhbGxleC1lZnRcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhCQUNTXCJdID0gXCJhaXJ3YWxsZXgtYmFjc1wiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleFNFUEFcIl0gPSBcImFpcndhbGxleC1zZXBhXCI7XG4gIHJldHVybiBTdWJtaXRNZXRob2RzMjtcbn0pKFN1Ym1pdE1ldGhvZHMgfHwge30pO1xueiQxLm5hdGl2ZUVudW0oU3VibWl0TWV0aG9kcyk7XG5cbmNvbnN0IE1PQklMRV9XQUxMRVRfTE9BRElOR19TVEFURSA9IHtcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIHByb2Nlc3NvcnM6IFtdLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgc3RhcnRGbG93IHRyaWdnZXJlZCB3aGlsZSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbm90IHJlYWR5LiBcbiAgICAgIFlvdSBjYW4gY2hlY2sgdGhlIFwiLmlzTG9hZGluZ1wiIHBhcmFtIHRvIGtub3cgd2hlbiBhIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBsb2FkaW5nLCBcbiAgICAgIGFuZCBcIi5pc0F2YWlsYWJsZVwiIHRvIGtub3cgaWYgYSBwYXltZW50IHJlcXVlc3QgaXMgYXZhaWxhYmxlLmBcbiAgICApO1xuICB9XG59O1xuY29uc3QgZ2V0QXBwbGVQYXlQcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBhcHBsZVBheUluaXRGbG93cyA9IFtpbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXksIGluaXRGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheSwgaW5pdEZsb3dzLmFkeWVuQXBwbGVQYXldO1xuICBjb25zdCBhcHBsZVBheUluaXRSZXN1bHRzID0gW107XG4gIGFwcGxlUGF5SW5pdEZsb3dzLmZvckVhY2goKGZsb3cpID0+IHtcbiAgICBjb25zdCBmbG93VmFsdWUgPSBmbG93LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICBpZiAoZmxvd1ZhbHVlPy5pc0F2YWlsYWJsZSkge1xuICAgICAgYXBwbGVQYXlJbml0UmVzdWx0cy5wdXNoKGZsb3dWYWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc3RyaXBlUFJGbG93UmVzdWx0ID0gaW5pdEZsb3dzLnN0cmlwZVBSLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgaWYgKHN0cmlwZVBSRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUpIHtcbiAgICBjb25zdCBpc0FwcGxlUGF5QXZhaWxhYmxlID0gc3RyaXBlUFJGbG93UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheTtcbiAgICBpZiAoaXNBcHBsZVBheUF2YWlsYWJsZSkge1xuICAgICAgYXBwbGVQYXlJbml0UmVzdWx0cy5wdXNoKHtcbiAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiBzdHJpcGVQUkZsb3dSZXN1bHQuc3RhcnRGbG93KFwiYXBwbGVfcGF5XCIsIHtcbiAgICAgICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjdXN0b21QYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHByb2Nlc3NvcnM6IGFwcGxlUGF5SW5pdFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiBhcHBsZVBheUluaXRSZXN1bHRzLmxlbmd0aCA+IDAsXG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHJldHVybiBzdGFydEFwcGxlUGF5RmxvdyhhcHBsZVBheUluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBnZXRHb29nbGVQYXlQcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBnb29nbGVQYXlJbml0Rmxvd3MgPSBbaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheSwgaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEdvb2dsZVBheSwgaW5pdEZsb3dzLmFkeWVuR29vZ2xlUGF5XTtcbiAgY29uc3QgZ29vZ2xlUGF5SW5pdFJlc3VsdHMgPSBbXTtcbiAgZ29vZ2xlUGF5SW5pdEZsb3dzLmZvckVhY2goKGZsb3cpID0+IHtcbiAgICBjb25zdCBmbG93VmFsdWUgPSBmbG93LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICBpZiAoZmxvd1ZhbHVlPy5pc0F2YWlsYWJsZSkge1xuICAgICAgZ29vZ2xlUGF5SW5pdFJlc3VsdHMucHVzaChmbG93VmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IHN0cmlwZVBSRmxvd1Jlc3VsdCA9IGluaXRGbG93cy5zdHJpcGVQUi5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIGlmIChzdHJpcGVQUkZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlKSB7XG4gICAgY29uc3QgaXNHb29nbGVQYXlBdmFpbGFibGUgPSBzdHJpcGVQUkZsb3dSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheTtcbiAgICBpZiAoaXNHb29nbGVQYXlBdmFpbGFibGUpIHtcbiAgICAgIGdvb2dsZVBheUluaXRSZXN1bHRzLnB1c2goe1xuICAgICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHN0cmlwZVBSRmxvd1Jlc3VsdC5zdGFydEZsb3coXCJnb29nbGVfcGF5XCIsIHtcbiAgICAgICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjdXN0b21QYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHByb2Nlc3NvcnM6IGdvb2dsZVBheUluaXRSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZTogZ29vZ2xlUGF5SW5pdFJlc3VsdHMubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIHN0YXJ0R29vZ2xlUGF5Rmxvdyhnb29nbGVQYXlJbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gIH07XG59O1xuY29uc3Qgc3RhcnRBcHBsZVBheUZsb3cgPSAoaW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcykgPT4ge1xuICBpZiAoY3VzdG9tUGFyYW1zPy5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBmbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yID09PSBjdXN0b21QYXJhbXMucHJvY2Vzc29yKTtcbiAgICBpZiAoZmxvdz8uaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBBcHBsZSBQYXkgcHJvY2Vzc29yICR7Y3VzdG9tUGFyYW1zLnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IGF2YWlsYWJsZUZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5pc0F2YWlsYWJsZSk7XG4gIGlmIChhdmFpbGFibGVGbG93KSB7XG4gICAgcmV0dXJuIGF2YWlsYWJsZUZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEFwcGxlIFBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuY29uc3Qgc3RhcnRHb29nbGVQYXlGbG93ID0gKGluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpID0+IHtcbiAgaWYgKGN1c3RvbVBhcmFtcz8ucHJvY2Vzc29yKSB7XG4gICAgY29uc3QgZmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciA9PT0gY3VzdG9tUGFyYW1zLnByb2Nlc3Nvcik7XG4gICAgaWYgKGZsb3c/LmlzQXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4gZmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZWQgR29vZ2xlIFBheSBwcm9jZXNzb3IgJHtjdXN0b21QYXJhbXMucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgYXZhaWxhYmxlRmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LmlzQXZhaWxhYmxlKTtcbiAgaWYgKGF2YWlsYWJsZUZsb3cpIHtcbiAgICByZXR1cm4gYXZhaWxhYmxlRmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgR29vZ2xlIFBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuXG5jb25zdCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyA9IChzdHlsZXMpID0+IHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0eWxlcyA9IEpTT04uc3RyaW5naWZ5KHN0eWxlcyk7XG4gIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xufTtcblxuY29uc3QgRWxlbWVudHNDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG4gIGZvcm1JZDogXCJcIixcbiAgZm9ybUhlaWdodDogXCJcIixcbiAgcmVmZXJyZXI6IHZvaWQgMCxcbiAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdm9pZCAwLFxuICByZWdpc3RlcklmcmFtZTogKCkgPT4ge1xuICB9LFxuICBiYXNlVXJsOiBcIlwiXG59KTtcblxuY29uc3QgdXNlT3BlblBheUVsZW1lbnRzID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChFbGVtZW50c0NvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VPcGVuUGF5RWxlbWVudHMgbXVzdCBiZSB1c2VkIHdpdGhpbiBhbiBPcGVuUGF5RWxlbWVudHNQcm92aWRlclwiKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn07XG5cbmNvbnN0IEVsZW1lbnRGcmFtZSA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGVsZW1lbnRUeXBlLCBzdHlsZXMgfSA9IHByb3BzO1xuICBjb25zdCB7IGZvcm1JZCwgcmVmZXJyZXIsIGZvcm1IZWlnaHQsIGNoZWNrb3V0U2VjdXJlVG9rZW4sIHJlZ2lzdGVySWZyYW1lLCBiYXNlVXJsIH0gPSB1c2VPcGVuUGF5RWxlbWVudHMoKTtcbiAgY29uc3Qgc3ViUGF0aCA9IGVsZW1lbnRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IFtoYXNMb2FkZWQsIHNldEhhc0xvYWRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGlmcmFtZVJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgZWxlbWVudFN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFzdHlsZXMpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyhzdHlsZXMpO1xuICB9LCBbc3R5bGVzXSk7XG4gIGNvbnN0IGZyYW1lU3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgIGhlaWdodDogZm9ybUhlaWdodFxuICAgIH07XG4gIH0sIFtmb3JtSGVpZ2h0XSk7XG4gIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFjaGVja291dFNlY3VyZVRva2VuIHx8ICFyZWZlcnJlcikgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJyZWZlcmVyXCIsIHJlZmVycmVyKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic3R5bGVzXCIsIGVsZW1lbnRTdHlsZSk7XG4gICAgcGFyYW1zLmFwcGVuZChcImZvcm1JZFwiLCBmb3JtSWQpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCBjaGVja291dFNlY3VyZVRva2VuKTtcbiAgICByZXR1cm4gcGFyYW1zLnRvU3RyaW5nKCk7XG4gIH0sIFtlbGVtZW50U3R5bGUsIGZvcm1JZCwgcmVmZXJyZXIsIGNoZWNrb3V0U2VjdXJlVG9rZW5dKTtcbiAgdXNlRWZmZWN0KCgpID0+IHNldEhhc0xvYWRlZCh0cnVlKSwgW10pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaWZyYW1lUmVmLmN1cnJlbnQgfHwgIWhhc0xvYWRlZCkgcmV0dXJuO1xuICAgIHJlZ2lzdGVySWZyYW1lKGVsZW1lbnRUeXBlLCBpZnJhbWVSZWYuY3VycmVudCk7XG4gIH0sIFtoYXNMb2FkZWRdKTtcbiAgaWYgKCFjaGVja291dFNlY3VyZVRva2VuKSB7XG4gICAgY29uc29sZS5lcnJvcihcIltmb3JtXSBDYW5ub3QgcmVuZGVyIHBhcnRpYWxseSBpbml0aWFsaXplZCBmcmFtZVwiKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcImRpdlwiLCB7fSk7XG4gIH1cbiAgY29uc3QgdXJsID0gbmV3IFVSTChgL2FwcC92MS8ke3N1YlBhdGh9LWVsZW1lbnQvYCwgYmFzZVVybCk7XG4gIHVybC5zZWFyY2ggPSBxdWVyeVN0cmluZztcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgXCJpZnJhbWVcIixcbiAgICB7XG4gICAgICBpZDogYG9qcy0ke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgbmFtZTogYCR7c3ViUGF0aH0tZWxlbWVudGAsXG4gICAgICBjbGFzc05hbWU6IFwib2pzLWlmcmFtZVwiLFxuICAgICAgc3JjOiB1cmwudG9TdHJpbmcoKSxcbiAgICAgIHN0eWxlOiBmcmFtZVN0eWxlLFxuICAgICAgcmVmOiBpZnJhbWVSZWZcbiAgICB9XG4gICk7XG59O1xuXG5jb25zdCBDYXJkRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRCB9KTtcbn07XG5cbmNvbnN0IENhcmRDdmNFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0NWQyB9KTtcbn07XG5cbmNvbnN0IENhcmRFeHBpcnlFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0VYUElSWSB9KTtcbn07XG5cbmNvbnN0IENhcmROdW1iZXJFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX05VTUJFUiB9KTtcbn07XG5cbmZ1bmN0aW9uIGlvKGUsIHQpIHtcbiAgdmFyIHIgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIHIgPyByKGUsIHQpIDogZS5fX3Byb3RvX18gPSB0O1xufVxuZnVuY3Rpb24gc28oZSwgdCkge1xuICB0ID09PSB2b2lkIDAgJiYgKHQgPSBlLmNvbnN0cnVjdG9yKTtcbiAgdmFyIHIgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgciAmJiByKGUsIHQpO1xufVxudmFyIGNvID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkge1xuICB2YXIgZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICByZXR1cm4gZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICBfX3Byb3RvX186IFtdXG4gICAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKGEsIG8pIHtcbiAgICAgIGEuX19wcm90b19fID0gbztcbiAgICB9IHx8IGZ1bmN0aW9uKGEsIG8pIHtcbiAgICAgIGZvciAodmFyIHMgaW4gbylcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHMpICYmIChhW3NdID0gb1tzXSk7XG4gICAgfSwgZShyLCBuKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQsIHIpIHtcbiAgICBpZiAodHlwZW9mIHIgIT0gXCJmdW5jdGlvblwiICYmIHIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKHIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICBlKHQsIHIpO1xuICAgIGZ1bmN0aW9uIG4oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gdDtcbiAgICB9XG4gICAgdC5wcm90b3R5cGUgPSByID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShyKSA6IChuLnByb3RvdHlwZSA9IHIucHJvdG90eXBlLCBuZXcgbigpKTtcbiAgfTtcbn0oKSwgbG8gPSBmdW5jdGlvbihlKSB7XG4gIGNvKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICB2YXIgYSA9IHRoaXMuY29uc3RydWN0b3IsIG8gPSBlLmNhbGwodGhpcywgciwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogYS5uYW1lLFxuICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfSksIGlvKG8sIGEucHJvdG90eXBlKSwgc28obyksIG87XG4gIH1cbiAgcmV0dXJuIHQ7XG59KEVycm9yKTtcbmNvbnN0IGsgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IFwiUGxlYXNlIGZpbGwgaW4gdGhpcyBmaWVsZFwiIH0pLCBTID0geiQxLnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpLCB4ID0gKGUpID0+IHokMS5udWxsYWJsZShlLm9wdGlvbmFsKCkpO1xudmFyIHAgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5GSVJTVF9OQU1FID0gXCJmaXJzdE5hbWVcIiwgZS5MQVNUX05BTUUgPSBcImxhc3ROYW1lXCIsIGUuUEhPTkUgPSBcInBob25lXCIsIGUuRU1BSUwgPSBcImVtYWlsXCIsIGUuTElORTEgPSBcImxpbmUxXCIsIGUuTElORTIgPSBcImxpbmUyXCIsIGUuTElORTMgPSBcImxpbmUzXCIsIGUuQ0lUWSA9IFwiY2l0eVwiLCBlLlNUQVRFID0gXCJzdGF0ZVwiLCBlLkNPVU5UUlkgPSBcImNvdW50cnlcIiwgZS5aSVBfQ09ERSA9IFwiemlwQ29kZVwiLCBlLlNISVBQSU5HX0xJTkUxID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiLCBlLlNISVBQSU5HX0xJTkUyID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiLCBlLlNISVBQSU5HX0xJTkUzID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lM1wiLCBlLlNISVBQSU5HX0NJVFkgPSBcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiwgZS5TSElQUElOR19TVEFURSA9IFwic2hpcHBpbmdBZGRyZXNzU3RhdGVcIiwgZS5TSElQUElOR19DT1VOVFJZID0gXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCIsIGUuU0hJUFBJTkdfWklQX0NPREUgPSBcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiwgZS5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkcgPSBcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCIsIGUuUFJPTU9USU9OX0NPREUgPSBcInByb21vdGlvbkNvZGVcIiwgZSkpKHAgfHwge30pO1xuY29uc3QgcXIgPSB6JDEubmF0aXZlRW51bShwKTtcbnZhciB6ciA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLkNBUkRfTlVNQkVSID0gXCJjYXJkTnVtYmVyXCIsIGUuQ0FSRF9FWFBJUlkgPSBcImNhcmRFeHBpcnlcIiwgZS5DQVJEX0NWQyA9IFwiY2FyZEN2Y1wiLCBlKSkoenIgfHwge30pO1xuY29uc3QgSHIgPSB6JDEubmF0aXZlRW51bSh6ciksIEJyID0geiQxLnVuaW9uKFtxciwgSHJdKTtcbnZhciBfZSA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLkNBUkQgPSBcImNhcmRcIiwgZS5DQVJEX05VTUJFUiA9IFwiY2FyZC1udW1iZXJcIiwgZS5DQVJEX0VYUElSWSA9IFwiY2FyZC1leHBpcnlcIiwgZS5DQVJEX0NWQyA9IFwiY2FyZC1jdmNcIiwgZS5DREVfQlJJREdFID0gXCJjZGUtYnJpZGdlXCIsIGUpKShfZSB8fCB7fSk7XG5jb25zdCB1byA9IHokMS5uYXRpdmVFbnVtKF9lKSwgU3QgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IHgoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IHgoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgcG8gPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2FyZE51bWJlcjogUyxcbiAgZXhwaXJ5OiBTLFxuICBjdmM6IFNcbn0pO1xueiQxLm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogUyxcbiAgY29sb3I6IFMsXG4gIGZvbnRGYW1pbHk6IFMsXG4gIGZvbnRTaXplOiBTLFxuICBmb250V2VpZ2h0OiBTLFxuICBtYXJnaW46IFMsXG4gIHBhZGRpbmc6IFMsXG4gIGxldHRlclNwYWNpbmc6IFMsXG4gIGxpbmVIZWlnaHQ6IFMsXG4gIGhpZGVJY29uOiBTXG59KTtcbmNvbnN0IHNlID0geiQxLmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSksIF9vID0gc2UuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSksIG1vID0geiQxLm9iamVjdCh7IHR5cGU6IF9vIH0pLCBmbyA9IHNlLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKSwgeW8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogZm8sXG4gIGVsZW1lbnRUeXBlOiBIcixcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKS5vcHRpb25hbCgpLFxuICBvYmZ1c2NhdGVkVmFsdWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KSwgaG8gPSBzZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKSwgZ28gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogaG8sXG4gIG1lc3NhZ2U6IGssXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pLCB3byA9IHNlLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSksIHZvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHdvLFxuICBlbGVtZW50VHlwZTogQnIsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pLCBibyA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChzZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDoga1xufSksIEVvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKHNlLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBrLFxuICB0b3RhbEFtb3VudEF0b21zOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBTLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6JDEuYXJyYXkoU3QpXG59KSwgUG8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoc2UuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHokMS5vcHRpb25hbCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBTbyA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChzZS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHokMS5zdHJpbmcoKVxufSksIE9lID0geiQxLm9iamVjdCh7XG4gIGVtYWlsOiBrLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIGZpcnN0TmFtZTogayxcbiAgbGFzdE5hbWU6IGssXG4gIHByb21vdGlvbkNvZGU6IFMsXG4gIGxpbmUxOiBTLFxuICBsaW5lMjogUyxcbiAgbGluZTM6IFMsXG4gIGNpdHk6IFMsXG4gIHN0YXRlOiBTLFxuICBjb3VudHJ5OiBrLFxuICB6aXBDb2RlOiBTLFxuICBpc1NoaXBwaW5nU2FtZUFzQmlsbGluZzogeiQxLmN1c3RvbSgpLm9wdGlvbmFsKCkuZGVmYXVsdCghMCksXG4gIHNoaXBwaW5nQWRkcmVzc0xpbmUxOiBTLFxuICBzaGlwcGluZ0FkZHJlc3NMaW5lMjogUyxcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTM6IFMsXG4gIHNoaXBwaW5nQWRkcmVzc0NpdHk6IFMsXG4gIHNoaXBwaW5nQWRkcmVzc1N0YXRlOiBTLFxuICBzaGlwcGluZ0FkZHJlc3NDb3VudHJ5OiBTLFxuICBzaGlwcGluZ0FkZHJlc3NaaXBDb2RlOiBTXG59KSwgQ28gPSB6JDEub2JqZWN0KHtcbiAgZW1haWw6IGsuZW1haWwoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIiB9KSxcbiAgZmlyc3ROYW1lOiBTLFxuICBsYXN0TmFtZTogUyxcbiAgcHJvbW90aW9uQ29kZTogUyxcbiAgbGluZTE6IFMsXG4gIGxpbmUyOiBTLFxuICBsaW5lMzogUyxcbiAgY2l0eTogUyxcbiAgc3RhdGU6IFMsXG4gIGNvdW50cnk6IGssXG4gIHppcENvZGU6IFMsXG4gIGlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nOiB6JDEuY3VzdG9tKCkub3B0aW9uYWwoKS5kZWZhdWx0KCEwKSxcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTE6IFMsXG4gIHNoaXBwaW5nQWRkcmVzc0xpbmUyOiBTLFxuICBzaGlwcGluZ0FkZHJlc3NMaW5lMzogUyxcbiAgc2hpcHBpbmdBZGRyZXNzQ2l0eTogUyxcbiAgc2hpcHBpbmdBZGRyZXNzU3RhdGU6IFMsXG4gIHNoaXBwaW5nQWRkcmVzc0NvdW50cnk6IFMsXG4gIHNoaXBwaW5nQWRkcmVzc1ppcENvZGU6IFNcbn0pO1xueiQxLm9iamVjdCh7XG4gIGxpbmUxOiBrLFxuICBjaXR5OiBrLFxuICBzdGF0ZTogayxcbiAgY291bnRyeToga1xufSk7XG56JDEub2JqZWN0KHtcbiAgc2hpcHBpbmdBZGRyZXNzQ291bnRyeTogayxcbiAgc2hpcHBpbmdBZGRyZXNzWmlwQ29kZToga1xufSk7XG56JDEub2JqZWN0KHtcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTE6IGssXG4gIHNoaXBwaW5nQWRkcmVzc0NpdHk6IGssXG4gIHNoaXBwaW5nQWRkcmVzc1N0YXRlOiBrLFxuICBzaGlwcGluZ0FkZHJlc3NDb3VudHJ5OiBrLFxuICBzaGlwcGluZ0FkZHJlc3NaaXBDb2RlOiBrXG59KTtcbmNvbnN0IGtvID0gc2UuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKSwgQW8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZToga28sXG4gIHNlc3Npb25JZDogayxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBTdCxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBTLFxuICBwYXltZW50Um91dGVJZDogU1xufSkuZXh0ZW5kKE9lLnNoYXBlKSwgSW8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoc2UuZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6JDEuYm9vbGVhbigpXG59KSwgVG8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoc2UuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6JDEuc3RyaW5nKClcbn0pLCBSbyA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgbW8sXG4gIHlvLFxuICBnbyxcbiAgdm8sXG4gIGJvLFxuICBFbyxcbiAgQW8sXG4gIElvLFxuICBUbyxcbiAgUG8sXG4gIFNvXG5dKSwgTm8gPSB6JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogUm8sXG4gIG5vbmNlOiBrLFxuICBmb3JtSWQ6IGssXG4gIGVsZW1lbnRJZDoga1xufSk7XG56JDEub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogeiQxLm51bWJlcigpLFxuICAvKipcbiAgICogVGhlIHRocmVlLWxldHRlciBJU08gNDIxNyBjdXJyZW5jeSBjb2RlIGZvciB0aGUgcGF5bWVudC5cbiAgICovXG4gIGN1cnJlbmN5OiBrXG59KTtcbnokMS5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBleGlzdGluZ19jY19wbV9pZDogeCh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogeCh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiB4KHokMS5zdHJpbmcoKSksXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogeCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgbnQgPSB6JDEub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3NvcnNfdXNlZDogeCh6JDEuYXJyYXkoeiQxLnN0cmluZygpKSlcbn0pLCBGbyA9IHokMS5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogeiQxLnN0cmluZygpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgTW8gPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoITEpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KEZvKVxufSksIExvID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6JDEub2JqZWN0KHsgc3VjY2VzczogeiQxLmxpdGVyYWwoITApIH0pLFxuICBNb1xuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogU3QsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IE9lLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB4KHokMS5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogeCh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogeCh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBTdCxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogT2UsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiB4KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB4KHokMS5zdHJpbmcoKSlcbn0pO1xudmFyIEYgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5TVUNDRVNTID0gXCJzdWNjZXNzXCIsIGUuRkFJTFVSRSA9IFwiZmFpbHVyZVwiLCBlLkNBTkNFTExFRCA9IFwiY2FuY2VsbGVkXCIsIGUpKShGIHx8IHt9KTtcbmNvbnN0IERvID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1xuICAgIFwic3VjY2Vzc1wiLFxuICAgIFwiZmFpbHVyZVwiLFxuICAgIFwiY2FuY2VsbGVkXCJcbiAgICAvKiBDQU5DRUxMRUQgKi9cbiAgXSksXG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuY29uc3QgeG8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHokMS5zdHJpbmcoKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogeiQxLnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pLCBPbyA9IHokMS5vYmplY3Qoe1xuICBiYW5rX25hbWU6IHokMS5zdHJpbmcoKSxcbiAgZGlzcGxheV9uYW1lOiB6JDEuc3RyaW5nKCksXG4gIHJlc291cmNlczogeiQxLm9iamVjdCh7XG4gICAgbG9nb191cmw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG4gIH0pXG59KSwgWXIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHgoeiQxLnN0cmluZygpKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IHgoeiQxLnN0cmluZygpKSxcbiAgY29uc2VudF9pZDogeCh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogeCh6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3Nlc3Npb246IHgoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBhdmFpbGFibGVfYmFua3M6IHgoeiQxLmFycmF5KE9vKSlcbn0pLCBVbyA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKCEwKSwgaHJlZjogeiQxLnN0cmluZygpIH0pLFxuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoITEpIH0pXG5dKSwgam8gPSB6JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6JDEuYXJyYXkocG8pLFxuICBwYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZTogeChudCksXG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeCh6JDEuYXJyYXkoWXIpKSxcbiAgcG9zdF9jaGVja291dF9yZWRpcmVjdF90bzogeCh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiB4KG50KVxufSksICRvID0geiQxLm9iamVjdCh7XG4gIGluc3RpdHV0aW9uTnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIHRyYW5zaXROdW1iZXI6IHokMS5zdHJpbmcoKSxcbiAgYWNjb3VudE51bWJlcjogeiQxLnN0cmluZygpLFxuICBhY2NvdW50VHlwZTogeiQxLmVudW0oW1wicGVyc29uYWxcIiwgXCJidXNpbmVzc1wiXSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiAkby5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEdvID0geiQxLm9iamVjdCh7XG4gIHNvcnRDb2RlOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnROdW1iZXI6IHokMS5zdHJpbmcoKSxcbiAgYWNjb3VudFR5cGU6IHokMS5lbnVtKFtcInBlcnNvbmFsXCIsIFwiYnVzaW5lc3NcIl0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5lbnVtKFtcInN1Y2Nlc3NcIiwgXCJmYWlsdXJlXCJdKSxcbiAgcGF5bG9hZDogR28ub3B0aW9uYWwoKVxufSk7XG5jb25zdCBWbyA9IHokMS5vYmplY3Qoe1xuICBpYmFuOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6JDEuZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IFZvLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgUCA9IChlKSA9PiB6JDEubnVsbGFibGUoZS5vcHRpb25hbCgpKTtcbnokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJDYW5ub3QgYmUgYmxhbmtcIiB9KTtcbmNvbnN0IHFvID0geiQxLm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6JDEubGl0ZXJhbChcImVycm9yXCIpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IEpyID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiBQKHokMS5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBQKHokMS5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBQKHokMS5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6JDEuc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogUCh6JDEubnVtYmVyKCkpXG59KSwgV3IgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IFAoeiQxLnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogUCh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBQKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCB6byA9IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLCBIbyA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIHNldHRpbmdzOiBQKHpvKVxufSksIFZlID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBQKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBQKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIEJvID0geiQxLm9iamVjdCh7XG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKClcbn0pLCBZbyA9IHokMS5vYmplY3Qoe1xuICBpZDogUCh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsOiBQKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IFAoeiQxLm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6JDEuYXJyYXkoQm8pLFxuICB0cmlhbF9zdGFydDogUCh6JDEuc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IFAoeiQxLnN0cmluZygpKVxufSksIFpyID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKClcbn0pLCBKbyA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KFpyKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1faWQ6IHokMS5zdHJpbmcoKVxufSksIFdvID0geiQxLm9iamVjdCh7XG4gIGNvdXBvbjogSnJcbn0pLCBabyA9IHokMS5vYmplY3Qoe1xuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudHM6IHokMS5hcnJheShXbyksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogUCh6JDEuc3RyaW5nKCkpLFxuICBsaW5lczogeiQxLmFycmF5KEpvKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShacilcbn0pLCBkciA9IHokMS5vYmplY3Qoe1xuICBjcmVhdGVkOiB6JDEuYXJyYXkoWW8pLFxuICBpbnZvaWNlczogeiQxLmFycmF5KFpvKSxcbiAgcHJvY2Vzc29yc191c2VkOiBQKHokMS5hcnJheSh6JDEuc3RyaW5nKCkpKVxufSksIEtyID0geiQxLm9iamVjdCh7XG4gIHByZXZpZXc6IGRyLFxuICBwcmV2aWV3X3Bvc3RfdHJpYWw6IFAoZHIpLFxuICBjb3Vwb25zOiB6JDEuYXJyYXkoSnIpXG59KSwgcHIgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcIm9wZW5cIiksXG4gIGxvY2FsZTogUCh6JDEuc3RyaW5nKCkpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogUCh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9zZXR0aW5nczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShXciksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBIbyxcbiAgc3Vic19wcmV2aWV3OiBQKEtyKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6JDEuYXJyYXkoVmUpLFxuICByZXR1cm5fdXJsOiBQKHokMS5zdHJpbmcoKSksXG4gIHN1Y2Nlc3NfdXJsOiBQKHokMS5zdHJpbmcoKSksXG4gIGZpbmFsX2ZlYXR1cmVfcm9sbG91dF9zZXR0aW5nczogUCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBRciA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogeiQxLm51bGxhYmxlKHokMS51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKHByLnNoYXBlKSxcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHokMS5zdHJpbmcoKVxuICB9KS5leHRlbmQocHIuc2hhcGUpXG5dKSwgS28gPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KSwgUW8gPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImV4cGlyZWRcIilcbn0pO1xueiQxLnVuaW9uKFtRciwgS28sIFFvXSk7XG56JDEub2JqZWN0KHtcbiAgbG9nbzogeiQxLnN0cmluZygpLFxuICBpY29uOiB6JDEuc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHokMS5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwbV9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IGd0ID0geiQxLm9iamVjdCh7XG4gIGxpbmUxOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbGluZTI6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBsaW5lMzogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNpdHk6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBzdGF0ZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNvdW50cnk6IHokMS5zdHJpbmcoKSxcbiAgemlwX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogeiQxLmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfYWRkcmVzczogZ3QsXG4gIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGd0Lm9wdGlvbmFsKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShXciksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBWZSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IFAoeiQxLnN0cmluZygpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogUCh6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IFhyID0geiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBYbyA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSk7XG56JDEuYXJyYXkoWG8pO1xuY29uc3QgZWEgPSB6JDEub2JqZWN0KHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IGd0LFxuICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogZ3Qub3B0aW9uYWwoKVxufSksIHRhID0geiQxLm9iamVjdCh7XG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCBlbiA9IHokMS5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkodGEpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpXG59KSwgcmEgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBQKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogVmUsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBlbi5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pLmV4dGVuZChlYS5zaGFwZSkuZXh0ZW5kKHJhLnNoYXBlKTtcbmNvbnN0IHRuID0geiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogUCh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IENvLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IFZlLFxuICBwYXltZW50X3JvdXRlX2lkOiBQKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogT2UsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBWZSxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbiAgdXNlX3VuaWZpZWRfY2NfZmxvdzogUCh6JDEuYm9vbGVhbigpKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBlbi5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBQKHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IFAoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBuYSA9IHokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNjX3BtX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2U6IFAobnQpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBQKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLnJlY29yZCh6JDEuYW55KCkpO1xueiQxLm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IFAoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBQKHokMS5zdHJpbmcoKSksXG4gIGxpbmUxOiBQKHokMS5zdHJpbmcoKSksXG4gIGxpbmUyOiBQKHokMS5zdHJpbmcoKSksXG4gIGxpbmUzOiBQKHokMS5zdHJpbmcoKSksXG4gIGNpdHk6IFAoeiQxLnN0cmluZygpKSxcbiAgc3RhdGU6IFAoeiQxLnN0cmluZygpKSxcbiAgY291bnRyeTogUCh6JDEuc3RyaW5nKCkpLFxuICB6aXBfY29kZTogUCh6JDEuc3RyaW5nKCkpLFxuICBlbWFpbDogUCh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBQKHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogUCh6JDEuc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiBQKHokMS5ib29sZWFuKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICBlbWFpbDogUCh6JDEuc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiBQKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogUCh6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IFAoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogUCh6JDEuc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBQKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IG9hID0geiQxLm9iamVjdCh7XG4gIGVycm9yX2NvZGU6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IFZlLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBQKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgYWEgPSB6JDEub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IFAoeiQxLnJlY29yZCh6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZXZlbnRzOiB6JDEuYXJyYXkoXG4gICAgeiQxLm9iamVjdCh7XG4gICAgICBldmVudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICAgIHByb3BlcnRpZXM6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKVxuICAgIH0pXG4gIClcbn0pO1xueiQxLmFueSgpLm9wdGlvbmFsKCk7XG56JDEub2JqZWN0KHtcbiAgZGV2aWNlX3Rva2VuOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgaWEgPSB6JDEub2JqZWN0KHt9KSwgc2EgPSB6JDEub2JqZWN0KHtcbiAgX3VuaWZpZWRfY2NfYWN0aW9uX25hbWU6IHokMS5zdHJpbmcoKSxcbiAgX3VuaWZpZWRfY2NfcGNjc19pZDogeiQxLnN0cmluZygpXG59KS5jYXRjaGFsbCh6JDEuYW55KCkpLCBjYSA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSksIGxhID0geiQxLmFycmF5KGNhKSwgdWEgPSB6JDEub2JqZWN0KHtcbiAgY29kZTogeiQxLnN0cmluZygpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIHBhdGg6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KSwgZGEgPSB6JDEuYXJyYXkodWEpLCBwYSA9IHtcbiAgXCJmYWlsZWQgdG8gZmV0Y2hcIjogXCJDb25uZWN0aW9uIGVycm9yOiBwbGVhc2UgZG91YmxlIGNoZWNrIGlmIHlvdSBhcmUgY29ubmVjdGVkIHRvIHRoZSBpbnRlcm5ldCwgdGhlbiB0cnkgYWdhaW5cIlxufSwgJHQgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgcmV0dXJuIHBhW3RdID8/IGU7XG59LCBfYSA9IChlKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHR5cGVvZiBKU09OLnBhcnNlKGUpID09IFwib2JqZWN0XCI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAhMTtcbiAgfVxufSwgbWEgPSAoZSkgPT4gZS5sZW5ndGggPT09IDEgPyAkdChlWzBdLm1zZykgOiBgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpcbiR7ZS5tYXAoKHIpID0+IGDigKIgJHskdChyLm1zZyl9YCkuam9pbihgXG5gKX1gLCBmYSA9IChlKSA9PiBgRW5jb3VudGVyZWQgdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke2UubWFwKChyKSA9PiBgLSAke3IucGF0aC5qb2luKFwiL1wiKX06ICR7ci5tZXNzYWdlfWApLmpvaW4oYFxuYCl9YCwgZWUgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKVxuICAgIGlmIChfYShlLm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCB0ID0gSlNPTi5wYXJzZShlLm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIGxhLnNhZmVQYXJzZSh0KS5zdWNjZXNzID8gbWEodCkgOiBkYS5zYWZlUGFyc2UodCkuc3VjY2VzcyA/IGZhKHQpIDogKGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7ZS5tZXNzYWdlfWApLCBlLm1lc3NhZ2UpO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuICR0KGUubWVzc2FnZSk7XG4gIGlmICh0eXBlb2YgZSA9PSBcIm9iamVjdFwiKVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSk7XG4gICAgfSBjYXRjaCAodCkge1xuICAgICAgcmV0dXJuIHQgKyBcIlwiO1xuICAgIH1cbiAgZWxzZVxuICAgIHJldHVybiBlICsgXCJcIjtcbn0sIHlhID0gKGUsIHQsIHIpID0+ICguLi5uKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHQoLi4ubik7XG4gIH0gY2F0Y2ggKGEpIHtcbiAgICByKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtlfSk6YCwgYSk7XG4gICAgcmV0dXJuO1xuICB9XG59LCBoYSA9IChlKSA9PiBlLnJlZHVjZSgodCwgcikgPT4gdCArIHIsIDApLCBybiA9IChlKSA9PiB7XG4gIGUucHJldmVudERlZmF1bHQoKSwgZS5yZXR1cm5WYWx1ZSA9ICEwO1xufSwgZ2EgPSAoKSA9PiB7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIHJuKTtcbn0sIHdhID0gKCkgPT4ge1xuICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBybik7XG59LCBIID0gKGUpID0+IHtcbiAgbGV0IHQgPSAhMTtcbiAgcmV0dXJuIGFzeW5jIChyKSA9PiB7XG4gICAgdmFyIG4sIGE7XG4gICAgaWYgKHQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIlNraXBwaW5nIHN1Ym1pc3Npb24gYmVjYXVzZSBpdCBpcyBhbHJlYWR5IGluIHByb2dyZXNzXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0ID0gITA7XG4gICAgdHJ5IHtcbiAgICAgIHIuY29udGV4dC5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24gJiYgZ2EoKSwgKGEgPSAobiA9IHIuZm9ybUNhbGxiYWNrcy5nZXQpLm9uQ2hlY2tvdXRTdGFydGVkKSA9PSBudWxsIHx8IGEuY2FsbChuKSwgZyhcImNoZWNrb3V0X3N0YXJ0ZWRcIiwge1xuICAgICAgICBjcG06IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG8gPSBhd2FpdCBlKHIpO1xuICAgICAgaWYgKGcoXCJjaGVja291dF9zdWNjZXNzXCIsIHtcbiAgICAgICAgY3BtOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgLi4ub1xuICAgICAgfSksIGdpKCksIG8ubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhvLnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgICBlbHNlIGlmIChvLm1vZGUgPT09IFwiY2hlY2tvdXRcIilcbiAgICAgICAgci5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0U3VjY2VzcyhcbiAgICAgICAgICBvLnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgICAgby5yZXN1bHQuc3Vic2NyaXB0aW9uX2lkcyxcbiAgICAgICAgICBvLnJlc3VsdC5jdXN0b21lcl9pZCxcbiAgICAgICAgICBvLnJlc3VsdC5wcm9jZXNzb3JzX3VzZWQgPz8gW11cbiAgICAgICAgKTtcbiAgICAgIGVsc2VcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgbW9kZTogJHtvfWApO1xuICAgIH0gY2F0Y2ggKG8pIHtcbiAgICAgIHQgPSAhMTtcbiAgICAgIGNvbnN0IHMgPSBlZShvKSwgYyA9IGF3YWl0IFNuKHIuY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLCBzKTtcbiAgICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKHMsIGMpLCBnKFwiY2hlY2tvdXRfZXJyb3JcIiwgeyBjcG06IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kLCBlcnJvck1lc3NhZ2U6IHMsIGVycm9yQ29kZTogYywgZXJyb3I6IG8gfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHQgPSAhMSwgci5jb250ZXh0LnByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvbiAmJiB3YSgpO1xuICAgIH1cbiAgfTtcbn0sIHdlID0gKGUpID0+IGFzeW5jICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGUodCk7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICBjb25zdCB7IGVycl9fOiBuIH0gPSBJKFwiaW5pdC1lcnJvci1jYXRjaGVyXCIpLCBhID0gZWUociksIG8gPSBhd2FpdCBTbih0LmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgYSk7XG4gICAgcmV0dXJuIG4obywgYSwgciksIGcoXCJpbml0X2Zsb3dfZXJyb3JcIiwgeyBlcnJvck1lc3NhZ2U6IGEsIGVycm9yQ29kZTogbywgZXJyb3I6IHIgfSksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IGEsIGVycm9yQ29kZTogbywgaXNMb2FkaW5nOiAhMSB9O1xuICB9XG59LCBJID0gKGUpID0+IHtcbiAgY29uc3QgdCA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUubG9nKGAke2NoYWxrLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke2V9YCl9XHRgLCAuLi5uKTtcbiAgfSwgciA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUud2FybihgJHtjaGFsay5yZWQuYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7ZX1gKX1cdGAsIC4uLm4pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZzogdCxcbiAgICBlcnI6IHIsXG4gICAgbG9nX186IHQsXG4gICAgZXJyX186IHJcbiAgfTtcbn07XG52YXIgR3QgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHJldHVybiBHdCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKHIsIG4pIHtcbiAgICByLl9fcHJvdG9fXyA9IG47XG4gIH0gfHwgZnVuY3Rpb24ociwgbikge1xuICAgIGZvciAodmFyIGEgaW4gbikgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sIGEpICYmIChyW2FdID0gblthXSk7XG4gIH0sIEd0KGUsIHQpO1xufTtcbmZ1bmN0aW9uIFBlKGUsIHQpIHtcbiAgaWYgKHR5cGVvZiB0ICE9IFwiZnVuY3Rpb25cIiAmJiB0ICE9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKHQpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgR3QoZSwgdCk7XG4gIGZ1bmN0aW9uIHIoKSB7XG4gICAgdGhpcy5jb25zdHJ1Y3RvciA9IGU7XG4gIH1cbiAgZS5wcm90b3R5cGUgPSB0ID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZSh0KSA6IChyLnByb3RvdHlwZSA9IHQucHJvdG90eXBlLCBuZXcgcigpKTtcbn1cbmZ1bmN0aW9uIHZhKGUsIHQsIHIsIG4pIHtcbiAgZnVuY3Rpb24gYShvKSB7XG4gICAgcmV0dXJuIG8gaW5zdGFuY2VvZiByID8gbyA6IG5ldyByKGZ1bmN0aW9uKHMpIHtcbiAgICAgIHMobyk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ldyAociB8fCAociA9IFByb21pc2UpKShmdW5jdGlvbihvLCBzKSB7XG4gICAgZnVuY3Rpb24gYyhkKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KG4ubmV4dChkKSk7XG4gICAgICB9IGNhdGNoIChmKSB7XG4gICAgICAgIHMoZik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGwoZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShuLnRocm93KGQpKTtcbiAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgcyhmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdShkKSB7XG4gICAgICBkLmRvbmUgPyBvKGQudmFsdWUpIDogYShkLnZhbHVlKS50aGVuKGMsIGwpO1xuICAgIH1cbiAgICB1KChuID0gbi5hcHBseShlLCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gbm4oZSwgdCkge1xuICB2YXIgciA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChvWzBdICYgMSkgdGhyb3cgb1sxXTtcbiAgICByZXR1cm4gb1sxXTtcbiAgfSwgdHJ5czogW10sIG9wczogW10gfSwgbiwgYSwgbywgcyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIHMubmV4dCA9IGMoMCksIHMudGhyb3cgPSBjKDEpLCBzLnJldHVybiA9IGMoMiksIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIChzW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIHM7XG4gIGZ1bmN0aW9uIGModSkge1xuICAgIHJldHVybiBmdW5jdGlvbihkKSB7XG4gICAgICByZXR1cm4gbChbdSwgZF0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbCh1KSB7XG4gICAgaWYgKG4pIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgIGZvciAoOyBzICYmIChzID0gMCwgdVswXSAmJiAociA9IDApKSwgcjsgKSB0cnkge1xuICAgICAgaWYgKG4gPSAxLCBhICYmIChvID0gdVswXSAmIDIgPyBhLnJldHVybiA6IHVbMF0gPyBhLnRocm93IHx8ICgobyA9IGEucmV0dXJuKSAmJiBvLmNhbGwoYSksIDApIDogYS5uZXh0KSAmJiAhKG8gPSBvLmNhbGwoYSwgdVsxXSkpLmRvbmUpIHJldHVybiBvO1xuICAgICAgc3dpdGNoIChhID0gMCwgbyAmJiAodSA9IFt1WzBdICYgMiwgby52YWx1ZV0pLCB1WzBdKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG8gPSB1O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIHIubGFiZWwrKywgeyB2YWx1ZTogdVsxXSwgZG9uZTogITEgfTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHIubGFiZWwrKywgYSA9IHVbMV0sIHUgPSBbMF07XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICB1ID0gci5vcHMucG9wKCksIHIudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAobyA9IHIudHJ5cywgIShvID0gby5sZW5ndGggPiAwICYmIG9bby5sZW5ndGggLSAxXSkgJiYgKHVbMF0gPT09IDYgfHwgdVswXSA9PT0gMikpIHtcbiAgICAgICAgICAgIHIgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSAzICYmICghbyB8fCB1WzFdID4gb1swXSAmJiB1WzFdIDwgb1szXSkpIHtcbiAgICAgICAgICAgIHIubGFiZWwgPSB1WzFdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSA2ICYmIHIubGFiZWwgPCBvWzFdKSB7XG4gICAgICAgICAgICByLmxhYmVsID0gb1sxXSwgbyA9IHU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG8gJiYgci5sYWJlbCA8IG9bMl0pIHtcbiAgICAgICAgICAgIHIubGFiZWwgPSBvWzJdLCByLm9wcy5wdXNoKHUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9bMl0gJiYgci5vcHMucG9wKCksIHIudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHUgPSB0LmNhbGwoZSwgcik7XG4gICAgfSBjYXRjaCAoZCkge1xuICAgICAgdSA9IFs2LCBkXSwgYSA9IDA7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIG4gPSBvID0gMDtcbiAgICB9XG4gICAgaWYgKHVbMF0gJiA1KSB0aHJvdyB1WzFdO1xuICAgIHJldHVybiB7IHZhbHVlOiB1WzBdID8gdVsxXSA6IHZvaWQgMCwgZG9uZTogITAgfTtcbiAgfVxufVxuZnVuY3Rpb24gVWUoZSkge1xuICB2YXIgdCA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgciA9IHQgJiYgZVt0XSwgbiA9IDA7XG4gIGlmIChyKSByZXR1cm4gci5jYWxsKGUpO1xuICBpZiAoZSAmJiB0eXBlb2YgZS5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBlICYmIG4gPj0gZS5sZW5ndGggJiYgKGUgPSB2b2lkIDApLCB7IHZhbHVlOiBlICYmIGVbbisrXSwgZG9uZTogIWUgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IodCA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cbmZ1bmN0aW9uIHd0KGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBhLCBvID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShhID0gbi5uZXh0KCkpLmRvbmU7ICkgby5wdXNoKGEudmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgcyA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgYSAmJiAhYS5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBvO1xufVxuZnVuY3Rpb24gdnQoZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIGEgPSB0Lmxlbmd0aCwgbzsgbiA8IGE7IG4rKylcbiAgICAobyB8fCAhKG4gaW4gdCkpICYmIChvIHx8IChvID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBvW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChvIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn1cbmZ1bmN0aW9uIERlKGUpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBEZSA/ICh0aGlzLnYgPSBlLCB0aGlzKSA6IG5ldyBEZShlKTtcbn1cbmZ1bmN0aW9uIGJhKGUsIHQsIHIpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG4gPSByLmFwcGx5KGUsIHQgfHwgW10pLCBhLCBvID0gW107XG4gIHJldHVybiBhID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgYyhcIm5leHRcIiksIGMoXCJ0aHJvd1wiKSwgYyhcInJldHVyblwiLCBzKSwgYVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgYTtcbiAgZnVuY3Rpb24gcyhtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeSkudGhlbihtLCBmKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGMobSwgeSkge1xuICAgIG5bbV0gJiYgKGFbbV0gPSBmdW5jdGlvbihoKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oYiwgdikge1xuICAgICAgICBvLnB1c2goW20sIGgsIGIsIHZdKSA+IDEgfHwgbChtLCBoKTtcbiAgICAgIH0pO1xuICAgIH0sIHkgJiYgKGFbbV0gPSB5KGFbbV0pKSk7XG4gIH1cbiAgZnVuY3Rpb24gbChtLCB5KSB7XG4gICAgdHJ5IHtcbiAgICAgIHUoblttXSh5KSk7XG4gICAgfSBjYXRjaCAoaCkge1xuICAgICAgXyhvWzBdWzNdLCBoKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdShtKSB7XG4gICAgbS52YWx1ZSBpbnN0YW5jZW9mIERlID8gUHJvbWlzZS5yZXNvbHZlKG0udmFsdWUudikudGhlbihkLCBmKSA6IF8ob1swXVsyXSwgbSk7XG4gIH1cbiAgZnVuY3Rpb24gZChtKSB7XG4gICAgbChcIm5leHRcIiwgbSk7XG4gIH1cbiAgZnVuY3Rpb24gZihtKSB7XG4gICAgbChcInRocm93XCIsIG0pO1xuICB9XG4gIGZ1bmN0aW9uIF8obSwgeSkge1xuICAgIG0oeSksIG8uc2hpZnQoKSwgby5sZW5ndGggJiYgbChvWzBdWzBdLCBvWzBdWzFdKTtcbiAgfVxufVxuZnVuY3Rpb24gRWEoZSkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgdCA9IGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCByO1xuICByZXR1cm4gdCA/IHQuY2FsbChlKSA6IChlID0gdHlwZW9mIFVlID09IFwiZnVuY3Rpb25cIiA/IFVlKGUpIDogZVtTeW1ib2wuaXRlcmF0b3JdKCksIHIgPSB7fSwgbihcIm5leHRcIiksIG4oXCJ0aHJvd1wiKSwgbihcInJldHVyblwiKSwgcltTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgcik7XG4gIGZ1bmN0aW9uIG4obykge1xuICAgIHJbb10gPSBlW29dICYmIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihjLCBsKSB7XG4gICAgICAgIHMgPSBlW29dKHMpLCBhKGMsIGwsIHMuZG9uZSwgcy52YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGEobywgcywgYywgbCkge1xuICAgIFByb21pc2UucmVzb2x2ZShsKS50aGVuKGZ1bmN0aW9uKHUpIHtcbiAgICAgIG8oeyB2YWx1ZTogdSwgZG9uZTogYyB9KTtcbiAgICB9LCBzKTtcbiAgfVxufVxuZnVuY3Rpb24gVihlKSB7XG4gIHJldHVybiB0eXBlb2YgZSA9PSBcImZ1bmN0aW9uXCI7XG59XG5mdW5jdGlvbiBDdChlKSB7XG4gIHZhciB0ID0gZnVuY3Rpb24obikge1xuICAgIEVycm9yLmNhbGwobiksIG4uc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgfSwgciA9IGUodCk7XG4gIHJldHVybiByLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSwgci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSByLCByO1xufVxudmFyIEZ0ID0gQ3QoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24ocikge1xuICAgIGUodGhpcyksIHRoaXMubWVzc2FnZSA9IHIgPyByLmxlbmd0aCArIGAgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcbmAgKyByLm1hcChmdW5jdGlvbihuLCBhKSB7XG4gICAgICByZXR1cm4gYSArIDEgKyBcIikgXCIgKyBuLnRvU3RyaW5nKCk7XG4gICAgfSkuam9pbihgXG4gIGApIDogXCJcIiwgdGhpcy5uYW1lID0gXCJVbnN1YnNjcmlwdGlvbkVycm9yXCIsIHRoaXMuZXJyb3JzID0gcjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gYnQoZSwgdCkge1xuICBpZiAoZSkge1xuICAgIHZhciByID0gZS5pbmRleE9mKHQpO1xuICAgIDAgPD0gciAmJiBlLnNwbGljZShyLCAxKTtcbiAgfVxufVxudmFyIGx0ID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGUodCkge1xuICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gdCwgdGhpcy5jbG9zZWQgPSAhMSwgdGhpcy5fcGFyZW50YWdlID0gbnVsbCwgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHQsIHIsIG4sIGEsIG87XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdGhpcy5jbG9zZWQgPSAhMDtcbiAgICAgIHZhciBzID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgaWYgKHMpXG4gICAgICAgIGlmICh0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCBBcnJheS5pc0FycmF5KHMpKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBjID0gVWUocyksIGwgPSBjLm5leHQoKTsgIWwuZG9uZTsgbCA9IGMubmV4dCgpKSB7XG4gICAgICAgICAgICAgIHZhciB1ID0gbC52YWx1ZTtcbiAgICAgICAgICAgICAgdS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgICAgdCA9IHsgZXJyb3I6IGggfTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbCAmJiAhbC5kb25lICYmIChyID0gYy5yZXR1cm4pICYmIHIuY2FsbChjKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGlmICh0KSB0aHJvdyB0LmVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIHMucmVtb3ZlKHRoaXMpO1xuICAgICAgdmFyIGQgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgIGlmIChWKGQpKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGQoKTtcbiAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgIG8gPSBoIGluc3RhbmNlb2YgRnQgPyBoLmVycm9ycyA6IFtoXTtcbiAgICAgICAgfVxuICAgICAgdmFyIGYgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgaWYgKGYpIHtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICh2YXIgXyA9IFVlKGYpLCBtID0gXy5uZXh0KCk7ICFtLmRvbmU7IG0gPSBfLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIHkgPSBtLnZhbHVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgX3IoeSk7XG4gICAgICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgICAgIG8gPSBvID8/IFtdLCBoIGluc3RhbmNlb2YgRnQgPyBvID0gdnQodnQoW10sIHd0KG8pKSwgd3QoaC5lcnJvcnMpKSA6IG8ucHVzaChoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICBuID0geyBlcnJvcjogaCB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBtICYmICFtLmRvbmUgJiYgKGEgPSBfLnJldHVybikgJiYgYS5jYWxsKF8pO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAobikgdGhyb3cgbi5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChvKVxuICAgICAgICB0aHJvdyBuZXcgRnQobyk7XG4gICAgfVxuICB9LCBlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHI7XG4gICAgaWYgKHQgJiYgdCAhPT0gdGhpcylcbiAgICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgICAgX3IodCk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiBlKSB7XG4gICAgICAgICAgaWYgKHQuY2xvc2VkIHx8IHQuX2hhc1BhcmVudCh0aGlzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB0Ll9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAociA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIHIgIT09IHZvaWQgMCA/IHIgOiBbXSkucHVzaCh0KTtcbiAgICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICByZXR1cm4gciA9PT0gdCB8fCBBcnJheS5pc0FycmF5KHIpICYmIHIuaW5jbHVkZXModCk7XG4gIH0sIGUucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheShyKSA/IChyLnB1c2godCksIHIpIDogciA/IFtyLCB0XSA6IHQ7XG4gIH0sIGUucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgciA9PT0gdCA/IHRoaXMuX3BhcmVudGFnZSA9IG51bGwgOiBBcnJheS5pc0FycmF5KHIpICYmIGJ0KHIsIHQpO1xuICB9LCBlLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgIHIgJiYgYnQociwgdCksIHQgaW5zdGFuY2VvZiBlICYmIHQuX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgfSwgZS5FTVBUWSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0ID0gbmV3IGUoKTtcbiAgICByZXR1cm4gdC5jbG9zZWQgPSAhMCwgdDtcbiAgfSgpLCBlO1xufSgpLCBvbiA9IGx0LkVNUFRZO1xuZnVuY3Rpb24gYW4oZSkge1xuICByZXR1cm4gZSBpbnN0YW5jZW9mIGx0IHx8IGUgJiYgXCJjbG9zZWRcIiBpbiBlICYmIFYoZS5yZW1vdmUpICYmIFYoZS5hZGQpICYmIFYoZS51bnN1YnNjcmliZSk7XG59XG5mdW5jdGlvbiBfcihlKSB7XG4gIFYoZSkgPyBlKCkgOiBlLnVuc3Vic2NyaWJlKCk7XG59XG52YXIgc24gPSB7XG4gIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gIG9uU3RvcHBlZE5vdGlmaWNhdGlvbjogbnVsbCxcbiAgUHJvbWlzZTogdm9pZCAwLFxuICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiAhMSxcbiAgdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiAhMVxufSwgY24gPSB7XG4gIHNldFRpbWVvdXQ6IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICBmb3IgKHZhciByID0gW10sIG4gPSAyOyBuIDwgYXJndW1lbnRzLmxlbmd0aDsgbisrKVxuICAgICAgcltuIC0gMl0gPSBhcmd1bWVudHNbbl07XG4gICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCB2dChbZSwgdF0sIHd0KHIpKSk7XG4gIH0sXG4gIGNsZWFyVGltZW91dDogZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiAoY2xlYXJUaW1lb3V0KShlKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufTtcbmZ1bmN0aW9uIGxuKGUpIHtcbiAgY24uc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICB0aHJvdyBlO1xuICB9KTtcbn1cbmZ1bmN0aW9uIG1yKCkge1xufVxuZnVuY3Rpb24gZnQoZSkge1xuICBlKCk7XG59XG52YXIgWXQgPSBmdW5jdGlvbihlKSB7XG4gIFBlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIpIHtcbiAgICB2YXIgbiA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBuLmlzU3RvcHBlZCA9ICExLCByID8gKG4uZGVzdGluYXRpb24gPSByLCBhbihyKSAmJiByLmFkZChuKSkgOiBuLmRlc3RpbmF0aW9uID0ga2EsIG47XG4gIH1cbiAgcmV0dXJuIHQuY3JlYXRlID0gZnVuY3Rpb24ociwgbiwgYSkge1xuICAgIHJldHVybiBuZXcgVnQociwgbiwgYSk7XG4gIH0sIHQucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihyKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgdGhpcy5fbmV4dChyKTtcbiAgfSwgdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHRoaXMuX2Vycm9yKHIpKTtcbiAgfSwgdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fY29tcGxldGUoKSk7XG4gIH0sIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jbG9zZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksIHRoaXMuZGVzdGluYXRpb24gPSBudWxsKTtcbiAgfSwgdC5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbihyKSB7XG4gICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHIpO1xuICB9LCB0LnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3Iocik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIHQucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIHQ7XG59KGx0KSwgUGEgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbmZ1bmN0aW9uIE10KGUsIHQpIHtcbiAgcmV0dXJuIFBhLmNhbGwoZSwgdCk7XG59XG52YXIgU2EgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZSh0KSB7XG4gICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSB0O1xuICB9XG4gIHJldHVybiBlLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHIubmV4dClcbiAgICAgIHRyeSB7XG4gICAgICAgIHIubmV4dCh0KTtcbiAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgcHQobik7XG4gICAgICB9XG4gIH0sIGUucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHIuZXJyb3IpXG4gICAgICB0cnkge1xuICAgICAgICByLmVycm9yKHQpO1xuICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICBwdChuKTtcbiAgICAgIH1cbiAgICBlbHNlXG4gICAgICBwdCh0KTtcbiAgfSwgZS5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdCA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmICh0LmNvbXBsZXRlKVxuICAgICAgdHJ5IHtcbiAgICAgICAgdC5jb21wbGV0ZSgpO1xuICAgICAgfSBjYXRjaCAocikge1xuICAgICAgICBwdChyKTtcbiAgICAgIH1cbiAgfSwgZTtcbn0oKSwgVnQgPSBmdW5jdGlvbihlKSB7XG4gIFBlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4sIGEpIHtcbiAgICB2YXIgbyA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzLCBzO1xuICAgIGlmIChWKHIpIHx8ICFyKVxuICAgICAgcyA9IHtcbiAgICAgICAgbmV4dDogciA/PyB2b2lkIDAsXG4gICAgICAgIGVycm9yOiBuID8/IHZvaWQgMCxcbiAgICAgICAgY29tcGxldGU6IGEgPz8gdm9pZCAwXG4gICAgICB9O1xuICAgIGVsc2Uge1xuICAgICAgdmFyIGM7XG4gICAgICBvICYmIHNuLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCA/IChjID0gT2JqZWN0LmNyZWF0ZShyKSwgYy51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gby51bnN1YnNjcmliZSgpO1xuICAgICAgfSwgcyA9IHtcbiAgICAgICAgbmV4dDogci5uZXh0ICYmIE10KHIubmV4dCwgYyksXG4gICAgICAgIGVycm9yOiByLmVycm9yICYmIE10KHIuZXJyb3IsIGMpLFxuICAgICAgICBjb21wbGV0ZTogci5jb21wbGV0ZSAmJiBNdChyLmNvbXBsZXRlLCBjKVxuICAgICAgfSkgOiBzID0gcjtcbiAgICB9XG4gICAgcmV0dXJuIG8uZGVzdGluYXRpb24gPSBuZXcgU2EocyksIG87XG4gIH1cbiAgcmV0dXJuIHQ7XG59KFl0KTtcbmZ1bmN0aW9uIHB0KGUpIHtcbiAgbG4oZSk7XG59XG5mdW5jdGlvbiBDYShlKSB7XG4gIHRocm93IGU7XG59XG52YXIga2EgPSB7XG4gIGNsb3NlZDogITAsXG4gIG5leHQ6IG1yLFxuICBlcnJvcjogQ2EsXG4gIGNvbXBsZXRlOiBtclxufSwgSnQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8IFwiQEBvYnNlcnZhYmxlXCI7XG59KCk7XG5mdW5jdGlvbiBBYShlKSB7XG4gIHJldHVybiBlO1xufVxuZnVuY3Rpb24gSWEoZSkge1xuICByZXR1cm4gZS5sZW5ndGggPT09IDAgPyBBYSA6IGUubGVuZ3RoID09PSAxID8gZVswXSA6IGZ1bmN0aW9uKHIpIHtcbiAgICByZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24obiwgYSkge1xuICAgICAgcmV0dXJuIGEobik7XG4gICAgfSwgcik7XG4gIH07XG59XG52YXIgZ2UgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZSh0KSB7XG4gICAgdCAmJiAodGhpcy5fc3Vic2NyaWJlID0gdCk7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSBuZXcgZSgpO1xuICAgIHJldHVybiByLnNvdXJjZSA9IHRoaXMsIHIub3BlcmF0b3IgPSB0LCByO1xuICB9LCBlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgdmFyIGEgPSB0aGlzLCBvID0gUmEodCkgPyB0IDogbmV3IFZ0KHQsIHIsIG4pO1xuICAgIHJldHVybiBmdChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzID0gYSwgYyA9IHMub3BlcmF0b3IsIGwgPSBzLnNvdXJjZTtcbiAgICAgIG8uYWRkKGMgPyBjLmNhbGwobywgbCkgOiBsID8gYS5fc3Vic2NyaWJlKG8pIDogYS5fdHJ5U3Vic2NyaWJlKG8pKTtcbiAgICB9KSwgbztcbiAgfSwgZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZSh0KTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICB0LmVycm9yKHIpO1xuICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgcmV0dXJuIHIgPSBmcihyKSwgbmV3IHIoZnVuY3Rpb24oYSwgbykge1xuICAgICAgdmFyIHMgPSBuZXcgVnQoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbihjKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHQoYyk7XG4gICAgICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICAgICAgbyhsKSwgcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IG8sXG4gICAgICAgIGNvbXBsZXRlOiBhXG4gICAgICB9KTtcbiAgICAgIG4uc3Vic2NyaWJlKHMpO1xuICAgIH0pO1xuICB9LCBlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByO1xuICAgIHJldHVybiAociA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLnN1YnNjcmliZSh0KTtcbiAgfSwgZS5wcm90b3R5cGVbSnRdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICByZXR1cm4gSWEodCkodGhpcyk7XG4gIH0sIGUucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgcmV0dXJuIHQgPSBmcih0KSwgbmV3IHQoZnVuY3Rpb24obiwgYSkge1xuICAgICAgdmFyIG87XG4gICAgICByLnN1YnNjcmliZShmdW5jdGlvbihzKSB7XG4gICAgICAgIHJldHVybiBvID0gcztcbiAgICAgIH0sIGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgcmV0dXJuIGEocyk7XG4gICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG4obyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSwgZS5jcmVhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIG5ldyBlKHQpO1xuICB9LCBlO1xufSgpO1xuZnVuY3Rpb24gZnIoZSkge1xuICB2YXIgdDtcbiAgcmV0dXJuICh0ID0gZSA/PyBzbi5Qcm9taXNlKSAhPT0gbnVsbCAmJiB0ICE9PSB2b2lkIDAgPyB0IDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIFRhKGUpIHtcbiAgcmV0dXJuIGUgJiYgVihlLm5leHQpICYmIFYoZS5lcnJvcikgJiYgVihlLmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIFJhKGUpIHtcbiAgcmV0dXJuIGUgJiYgZSBpbnN0YW5jZW9mIFl0IHx8IFRhKGUpICYmIGFuKGUpO1xufVxuZnVuY3Rpb24gTmEoZSkge1xuICByZXR1cm4gVihlID09IG51bGwgPyB2b2lkIDAgOiBlLmxpZnQpO1xufVxuZnVuY3Rpb24gRmEoZSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGlmIChOYSh0KSlcbiAgICAgIHJldHVybiB0LmxpZnQoZnVuY3Rpb24ocikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBlKHIsIHRoaXMpO1xuICAgICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgICAgdGhpcy5lcnJvcihuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlXCIpO1xuICB9O1xufVxuZnVuY3Rpb24gTWEoZSwgdCwgciwgbiwgYSkge1xuICByZXR1cm4gbmV3IExhKGUsIHQsIHIsIG4sIGEpO1xufVxudmFyIExhID0gZnVuY3Rpb24oZSkge1xuICBQZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuLCBhLCBvLCBzLCBjKSB7XG4gICAgdmFyIGwgPSBlLmNhbGwodGhpcywgcikgfHwgdGhpcztcbiAgICByZXR1cm4gbC5vbkZpbmFsaXplID0gcywgbC5zaG91bGRVbnN1YnNjcmliZSA9IGMsIGwuX25leHQgPSBuID8gZnVuY3Rpb24odSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbih1KTtcbiAgICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgICAgci5lcnJvcihkKTtcbiAgICAgIH1cbiAgICB9IDogZS5wcm90b3R5cGUuX25leHQsIGwuX2Vycm9yID0gbyA/IGZ1bmN0aW9uKHUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG8odSk7XG4gICAgICB9IGNhdGNoIChkKSB7XG4gICAgICAgIHIuZXJyb3IoZCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IGUucHJvdG90eXBlLl9lcnJvciwgbC5fY29tcGxldGUgPSBhID8gZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhKCk7XG4gICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgIHIuZXJyb3IodSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IGUucHJvdG90eXBlLl9jb21wbGV0ZSwgbDtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcjtcbiAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICB2YXIgbiA9IHRoaXMuY2xvc2VkO1xuICAgICAgZS5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgIW4gJiYgKChyID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgfHwgci5jYWxsKHRoaXMpKTtcbiAgICB9XG4gIH0sIHQ7XG59KFl0KSwgRGEgPSBDdChmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBlKHRoaXMpLCB0aGlzLm5hbWUgPSBcIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwib2JqZWN0IHVuc3Vic2NyaWJlZFwiO1xuICB9O1xufSksIHVuID0gZnVuY3Rpb24oZSkge1xuICBQZSh0LCBlKTtcbiAgZnVuY3Rpb24gdCgpIHtcbiAgICB2YXIgciA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiByLmNsb3NlZCA9ICExLCByLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCByLm9ic2VydmVycyA9IFtdLCByLmlzU3RvcHBlZCA9ICExLCByLmhhc0Vycm9yID0gITEsIHIudGhyb3duRXJyb3IgPSBudWxsLCByO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuID0gbmV3IHlyKHRoaXMsIHRoaXMpO1xuICAgIHJldHVybiBuLm9wZXJhdG9yID0gciwgbjtcbiAgfSwgdC5wcm90b3R5cGUuX3Rocm93SWZDbG9zZWQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICB0aHJvdyBuZXcgRGEoKTtcbiAgfSwgdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgZnQoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgYSwgbztcbiAgICAgIGlmIChuLl90aHJvd0lmQ2xvc2VkKCksICFuLmlzU3RvcHBlZCkge1xuICAgICAgICBuLmN1cnJlbnRPYnNlcnZlcnMgfHwgKG4uY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20obi5vYnNlcnZlcnMpKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBzID0gVWUobi5jdXJyZW50T2JzZXJ2ZXJzKSwgYyA9IHMubmV4dCgpOyAhYy5kb25lOyBjID0gcy5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciBsID0gYy52YWx1ZTtcbiAgICAgICAgICAgIGwubmV4dChyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgICBhID0geyBlcnJvcjogdSB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjICYmICFjLmRvbmUgJiYgKG8gPSBzLnJldHVybikgJiYgby5jYWxsKHMpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoYSkgdGhyb3cgYS5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIGZ0KGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKG4uX3Rocm93SWZDbG9zZWQoKSwgIW4uaXNTdG9wcGVkKSB7XG4gICAgICAgIG4uaGFzRXJyb3IgPSBuLmlzU3RvcHBlZCA9ICEwLCBuLnRocm93bkVycm9yID0gcjtcbiAgICAgICAgZm9yICh2YXIgYSA9IG4ub2JzZXJ2ZXJzOyBhLmxlbmd0aDsgKVxuICAgICAgICAgIGEuc2hpZnQoKS5lcnJvcihyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgZnQoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoci5fdGhyb3dJZkNsb3NlZCgpLCAhci5pc1N0b3BwZWQpIHtcbiAgICAgICAgci5pc1N0b3BwZWQgPSAhMDtcbiAgICAgICAgZm9yICh2YXIgbiA9IHIub2JzZXJ2ZXJzOyBuLmxlbmd0aDsgKVxuICAgICAgICAgIG4uc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCB0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSAhMCwgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICB9LCBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcjtcbiAgICAgIHJldHVybiAoKHIgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgciA9PT0gdm9pZCAwID8gdm9pZCAwIDogci5sZW5ndGgpID4gMDtcbiAgICB9LFxuICAgIGVudW1lcmFibGU6ICExLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHIpO1xuICB9LCB0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMociksIHRoaXMuX2lubmVyU3Vic2NyaWJlKHIpO1xuICB9LCB0LnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzLCBhID0gdGhpcywgbyA9IGEuaGFzRXJyb3IsIHMgPSBhLmlzU3RvcHBlZCwgYyA9IGEub2JzZXJ2ZXJzO1xuICAgIHJldHVybiBvIHx8IHMgPyBvbiA6ICh0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBjLnB1c2gociksIG5ldyBsdChmdW5jdGlvbigpIHtcbiAgICAgIG4uY3VycmVudE9ic2VydmVycyA9IG51bGwsIGJ0KGMsIHIpO1xuICAgIH0pKTtcbiAgfSwgdC5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzLCBhID0gbi5oYXNFcnJvciwgbyA9IG4udGhyb3duRXJyb3IsIHMgPSBuLmlzU3RvcHBlZDtcbiAgICBhID8gci5lcnJvcihvKSA6IHMgJiYgci5jb21wbGV0ZSgpO1xuICB9LCB0LnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciA9IG5ldyBnZSgpO1xuICAgIHJldHVybiByLnNvdXJjZSA9IHRoaXMsIHI7XG4gIH0sIHQuY3JlYXRlID0gZnVuY3Rpb24ociwgbikge1xuICAgIHJldHVybiBuZXcgeXIociwgbik7XG4gIH0sIHQ7XG59KGdlKSwgeXIgPSBmdW5jdGlvbihlKSB7XG4gIFBlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICB2YXIgYSA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBhLmRlc3RpbmF0aW9uID0gciwgYS5zb3VyY2UgPSBuLCBhO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuLCBhO1xuICAgIChhID0gKG4gPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLm5leHQpID09PSBudWxsIHx8IGEgPT09IHZvaWQgMCB8fCBhLmNhbGwobiwgcik7XG4gIH0sIHQucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuLCBhO1xuICAgIChhID0gKG4gPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLmVycm9yKSA9PT0gbnVsbCB8fCBhID09PSB2b2lkIDAgfHwgYS5jYWxsKG4sIHIpO1xuICB9LCB0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByLCBuO1xuICAgIChuID0gKHIgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgfHwgbi5jYWxsKHIpO1xuICB9LCB0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuLCBhO1xuICAgIHJldHVybiAoYSA9IChuID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4uc3Vic2NyaWJlKHIpKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogb247XG4gIH0sIHQ7XG59KHVuKSwgeGEgPSB7XG4gIG5vdzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIERhdGUubm93KCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIE9hID0gZnVuY3Rpb24oZSkge1xuICBQZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuKSB7XG4gICAgcmV0dXJuIGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgdDtcbn0obHQpLCBociA9IHtcbiAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICBmb3IgKHZhciByID0gW10sIG4gPSAyOyBuIDwgYXJndW1lbnRzLmxlbmd0aDsgbisrKVxuICAgICAgcltuIC0gMl0gPSBhcmd1bWVudHNbbl07XG4gICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgdnQoW2UsIHRdLCB3dChyKSkpO1xuICB9LFxuICBjbGVhckludGVydmFsOiBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIGNsZWFySW50ZXJ2YWwoZSk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIFVhID0gZnVuY3Rpb24oZSkge1xuICBQZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuKSB7XG4gICAgdmFyIGEgPSBlLmNhbGwodGhpcywgciwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gYS5zY2hlZHVsZXIgPSByLCBhLndvcmsgPSBuLCBhLnBlbmRpbmcgPSAhMSwgYTtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgdmFyIGE7XG4gICAgaWYgKG4gPT09IHZvaWQgMCAmJiAobiA9IDApLCB0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIHRoaXMuc3RhdGUgPSByO1xuICAgIHZhciBvID0gdGhpcy5pZCwgcyA9IHRoaXMuc2NoZWR1bGVyO1xuICAgIHJldHVybiBvICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHMsIG8sIG4pKSwgdGhpcy5wZW5kaW5nID0gITAsIHRoaXMuZGVsYXkgPSBuLCB0aGlzLmlkID0gKGEgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChzLCB0aGlzLmlkLCBuKSwgdGhpcztcbiAgfSwgdC5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbihyLCBuLCBhKSB7XG4gICAgcmV0dXJuIGEgPT09IHZvaWQgMCAmJiAoYSA9IDApLCBoci5zZXRJbnRlcnZhbChyLmZsdXNoLmJpbmQociwgdGhpcyksIGEpO1xuICB9LCB0LnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uKHIsIG4sIGEpIHtcbiAgICBpZiAoYSA9PT0gdm9pZCAwICYmIChhID0gMCksIGEgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBhICYmIHRoaXMucGVuZGluZyA9PT0gITEpXG4gICAgICByZXR1cm4gbjtcbiAgICBuICE9IG51bGwgJiYgaHIuY2xlYXJJbnRlcnZhbChuKTtcbiAgfSwgdC5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gbmV3IEVycm9yKFwiZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvblwiKTtcbiAgICB0aGlzLnBlbmRpbmcgPSAhMTtcbiAgICB2YXIgYSA9IHRoaXMuX2V4ZWN1dGUociwgbik7XG4gICAgaWYgKGEpXG4gICAgICByZXR1cm4gYTtcbiAgICB0aGlzLnBlbmRpbmcgPT09ICExICYmIHRoaXMuaWQgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpKTtcbiAgfSwgdC5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgdmFyIGEgPSAhMSwgbztcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrKHIpO1xuICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgIGEgPSAhMCwgbyA9IHMgfHwgbmV3IEVycm9yKFwiU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvclwiKTtcbiAgICB9XG4gICAgaWYgKGEpXG4gICAgICByZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLCBvO1xuICB9LCB0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHZhciByID0gdGhpcywgbiA9IHIuaWQsIGEgPSByLnNjaGVkdWxlciwgbyA9IGEuYWN0aW9ucztcbiAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGwsIHRoaXMucGVuZGluZyA9ICExLCBidChvLCB0aGlzKSwgbiAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChhLCBuLCBudWxsKSksIHRoaXMuZGVsYXkgPSBudWxsLCBlLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfSwgdDtcbn0oT2EpLCBnciA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBlKHQsIHIpIHtcbiAgICByID09PSB2b2lkIDAgJiYgKHIgPSBlLm5vdyksIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IHQsIHRoaXMubm93ID0gcjtcbiAgfVxuICByZXR1cm4gZS5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgcmV0dXJuIHIgPT09IHZvaWQgMCAmJiAociA9IDApLCBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHQpLnNjaGVkdWxlKG4sIHIpO1xuICB9LCBlLm5vdyA9IHhhLm5vdywgZTtcbn0oKSwgamEgPSBmdW5jdGlvbihlKSB7XG4gIFBlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICBuID09PSB2b2lkIDAgJiYgKG4gPSBnci5ub3cpO1xuICAgIHZhciBhID0gZS5jYWxsKHRoaXMsIHIsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIGEuYWN0aW9ucyA9IFtdLCBhLl9hY3RpdmUgPSAhMSwgYTtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzLmFjdGlvbnM7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgbi5wdXNoKHIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgYTtcbiAgICB0aGlzLl9hY3RpdmUgPSAhMDtcbiAgICBkb1xuICAgICAgaWYgKGEgPSByLmV4ZWN1dGUoci5zdGF0ZSwgci5kZWxheSkpXG4gICAgICAgIGJyZWFrO1xuICAgIHdoaWxlIChyID0gbi5zaGlmdCgpKTtcbiAgICBpZiAodGhpcy5fYWN0aXZlID0gITEsIGEpIHtcbiAgICAgIGZvciAoOyByID0gbi5zaGlmdCgpOyApXG4gICAgICAgIHIudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRocm93IGE7XG4gICAgfVxuICB9LCB0O1xufShnciksICRhID0gbmV3IGphKFVhKSwgR2EgPSBmdW5jdGlvbihlKSB7XG4gIHJldHVybiBlICYmIHR5cGVvZiBlLmxlbmd0aCA9PSBcIm51bWJlclwiICYmIHR5cGVvZiBlICE9IFwiZnVuY3Rpb25cIjtcbn07XG5mdW5jdGlvbiBWYShlKSB7XG4gIHJldHVybiBWKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUudGhlbik7XG59XG5mdW5jdGlvbiBxYShlKSB7XG4gIHJldHVybiBWKGVbSnRdKTtcbn1cbmZ1bmN0aW9uIHphKGUpIHtcbiAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIFYoZSA9PSBudWxsID8gdm9pZCAwIDogZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuZnVuY3Rpb24gSGEoZSkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArIChlICE9PSBudWxsICYmIHR5cGVvZiBlID09IFwib2JqZWN0XCIgPyBcImFuIGludmFsaWQgb2JqZWN0XCIgOiBcIidcIiArIGUgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cbmZ1bmN0aW9uIEJhKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCAhPSBcImZ1bmN0aW9uXCIgfHwgIVN5bWJvbC5pdGVyYXRvciA/IFwiQEBpdGVyYXRvclwiIDogU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIFlhID0gQmEoKTtcbmZ1bmN0aW9uIEphKGUpIHtcbiAgcmV0dXJuIFYoZSA9PSBudWxsID8gdm9pZCAwIDogZVtZYV0pO1xufVxuZnVuY3Rpb24gV2EoZSkge1xuICByZXR1cm4gYmEodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgciwgbiwgYSwgbztcbiAgICByZXR1cm4gbm4odGhpcywgZnVuY3Rpb24ocykge1xuICAgICAgc3dpdGNoIChzLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICByID0gZS5nZXRSZWFkZXIoKSwgcy5sYWJlbCA9IDE7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBzLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pLCBzLmxhYmVsID0gMjtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiBbNCwgRGUoci5yZWFkKCkpXTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBuID0gcy5zZW50KCksIGEgPSBuLnZhbHVlLCBvID0gbi5kb25lLCBvID8gWzQsIERlKHZvaWQgMCldIDogWzMsIDVdO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIFsyLCBzLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gWzQsIERlKGEpXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBbNCwgcy5zZW50KCldO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgcmV0dXJuIHMuc2VudCgpLCBbMywgMl07XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHJldHVybiByLnJlbGVhc2VMb2NrKCksIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFphKGUpIHtcbiAgcmV0dXJuIFYoZSA9PSBudWxsID8gdm9pZCAwIDogZS5nZXRSZWFkZXIpO1xufVxuZnVuY3Rpb24gS2EoZSkge1xuICBpZiAoZSBpbnN0YW5jZW9mIGdlKVxuICAgIHJldHVybiBlO1xuICBpZiAoZSAhPSBudWxsKSB7XG4gICAgaWYgKHFhKGUpKVxuICAgICAgcmV0dXJuIFFhKGUpO1xuICAgIGlmIChHYShlKSlcbiAgICAgIHJldHVybiBYYShlKTtcbiAgICBpZiAoVmEoZSkpXG4gICAgICByZXR1cm4gZWkoZSk7XG4gICAgaWYgKHphKGUpKVxuICAgICAgcmV0dXJuIGRuKGUpO1xuICAgIGlmIChKYShlKSlcbiAgICAgIHJldHVybiB0aShlKTtcbiAgICBpZiAoWmEoZSkpXG4gICAgICByZXR1cm4gcmkoZSk7XG4gIH1cbiAgdGhyb3cgSGEoZSk7XG59XG5mdW5jdGlvbiBRYShlKSB7XG4gIHJldHVybiBuZXcgZ2UoZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gZVtKdF0oKTtcbiAgICBpZiAoVihyLnN1YnNjcmliZSkpXG4gICAgICByZXR1cm4gci5zdWJzY3JpYmUodCk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlXCIpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFhhKGUpIHtcbiAgcmV0dXJuIG5ldyBnZShmdW5jdGlvbih0KSB7XG4gICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLmxlbmd0aCAmJiAhdC5jbG9zZWQ7IHIrKylcbiAgICAgIHQubmV4dChlW3JdKTtcbiAgICB0LmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZWkoZSkge1xuICByZXR1cm4gbmV3IGdlKGZ1bmN0aW9uKHQpIHtcbiAgICBlLnRoZW4oZnVuY3Rpb24ocikge1xuICAgICAgdC5jbG9zZWQgfHwgKHQubmV4dChyKSwgdC5jb21wbGV0ZSgpKTtcbiAgICB9LCBmdW5jdGlvbihyKSB7XG4gICAgICByZXR1cm4gdC5lcnJvcihyKTtcbiAgICB9KS50aGVuKG51bGwsIGxuKTtcbiAgfSk7XG59XG5mdW5jdGlvbiB0aShlKSB7XG4gIHJldHVybiBuZXcgZ2UoZnVuY3Rpb24odCkge1xuICAgIHZhciByLCBuO1xuICAgIHRyeSB7XG4gICAgICBmb3IgKHZhciBhID0gVWUoZSksIG8gPSBhLm5leHQoKTsgIW8uZG9uZTsgbyA9IGEubmV4dCgpKSB7XG4gICAgICAgIHZhciBzID0gby52YWx1ZTtcbiAgICAgICAgaWYgKHQubmV4dChzKSwgdC5jbG9zZWQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgIHIgPSB7IGVycm9yOiBjIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG8gJiYgIW8uZG9uZSAmJiAobiA9IGEucmV0dXJuKSAmJiBuLmNhbGwoYSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAocikgdGhyb3cgci5lcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgdC5jb21wbGV0ZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGRuKGUpIHtcbiAgcmV0dXJuIG5ldyBnZShmdW5jdGlvbih0KSB7XG4gICAgbmkoZSwgdCkuY2F0Y2goZnVuY3Rpb24ocikge1xuICAgICAgcmV0dXJuIHQuZXJyb3Iocik7XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gcmkoZSkge1xuICByZXR1cm4gZG4oV2EoZSkpO1xufVxuZnVuY3Rpb24gbmkoZSwgdCkge1xuICB2YXIgciwgbiwgYSwgbztcbiAgcmV0dXJuIHZhKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgcywgYztcbiAgICByZXR1cm4gbm4odGhpcywgZnVuY3Rpb24obCkge1xuICAgICAgc3dpdGNoIChsLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBsLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKSwgciA9IEVhKGUpLCBsLmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBbNCwgci5uZXh0KCldO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKG4gPSBsLnNlbnQoKSwgISFuLmRvbmUpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgaWYgKHMgPSBuLnZhbHVlLCB0Lm5leHQocyksIHQuY2xvc2VkKVxuICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICBsLmxhYmVsID0gMztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBbMywgMV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBjID0gbC5zZW50KCksIGEgPSB7IGVycm9yOiBjIH0sIFszLCAxMV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gbC50cnlzLnB1c2goWzYsICwgOSwgMTBdKSwgbiAmJiAhbi5kb25lICYmIChvID0gci5yZXR1cm4pID8gWzQsIG8uY2FsbChyKV0gOiBbMywgOF07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBsLnNlbnQoKSwgbC5sYWJlbCA9IDg7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIGlmIChhKSB0aHJvdyBhLmVycm9yO1xuICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm4gdC5jb21wbGV0ZSgpLCBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gb2koZSwgdCwgciwgbiwgYSkge1xuICBuID09PSB2b2lkIDAgJiYgKG4gPSAwKSwgYSA9PT0gdm9pZCAwICYmIChhID0gITEpO1xuICB2YXIgbyA9IHQuc2NoZWR1bGUoZnVuY3Rpb24oKSB7XG4gICAgcigpLCBhID8gZS5hZGQodGhpcy5zY2hlZHVsZShudWxsLCBuKSkgOiB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gIH0sIG4pO1xuICBpZiAoZS5hZGQobyksICFhKVxuICAgIHJldHVybiBvO1xufVxuZnVuY3Rpb24gYWkoZSwgdCkge1xuICB2YXIgciA9IFYoZSkgPyBlIDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0sIG4gPSBmdW5jdGlvbihhKSB7XG4gICAgcmV0dXJuIGEuZXJyb3IocigpKTtcbiAgfTtcbiAgcmV0dXJuIG5ldyBnZShuKTtcbn1cbnZhciBpaSA9IEN0KGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGUodGhpcyksIHRoaXMubmFtZSA9IFwiRW1wdHlFcnJvclwiLCB0aGlzLm1lc3NhZ2UgPSBcIm5vIGVsZW1lbnRzIGluIHNlcXVlbmNlXCI7XG4gIH07XG59KTtcbmZ1bmN0aW9uIHNpKGUsIHQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsIG4pIHtcbiAgICB2YXIgYSA9ICExLCBvO1xuICAgIGUuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgbyA9IHMsIGEgPSAhMDtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogbixcbiAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgYSA/IHIobykgOiBuKG5ldyBpaSgpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBjaShlKSB7XG4gIHJldHVybiBlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4oZSk7XG59XG52YXIgbGkgPSBDdChmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbihyKSB7XG4gICAgciA9PT0gdm9pZCAwICYmIChyID0gbnVsbCksIGUodGhpcyksIHRoaXMubWVzc2FnZSA9IFwiVGltZW91dCBoYXMgb2NjdXJyZWRcIiwgdGhpcy5uYW1lID0gXCJUaW1lb3V0RXJyb3JcIiwgdGhpcy5pbmZvID0gcjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gdWkoZSwgdCkge1xuICB2YXIgciA9IGNpKGUpID8geyBmaXJzdDogZSB9IDogdHlwZW9mIGUgPT0gXCJudW1iZXJcIiA/IHsgZWFjaDogZSB9IDogZSwgbiA9IHIuZmlyc3QsIGEgPSByLmVhY2gsIG8gPSByLndpdGgsIHMgPSBvID09PSB2b2lkIDAgPyBkaSA6IG8sIGMgPSByLnNjaGVkdWxlciwgbCA9IGMgPT09IHZvaWQgMCA/ICRhIDogYywgdSA9IHIubWV0YSwgZCA9IHUgPT09IHZvaWQgMCA/IG51bGwgOiB1O1xuICBpZiAobiA9PSBudWxsICYmIGEgPT0gbnVsbClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gdGltZW91dCBwcm92aWRlZC5cIik7XG4gIHJldHVybiBGYShmdW5jdGlvbihmLCBfKSB7XG4gICAgdmFyIG0sIHksIGggPSBudWxsLCBiID0gMCwgdiA9IGZ1bmN0aW9uKHcpIHtcbiAgICAgIHkgPSBvaShfLCBsLCBmdW5jdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBtLnVuc3Vic2NyaWJlKCksIEthKHMoe1xuICAgICAgICAgICAgbWV0YTogZCxcbiAgICAgICAgICAgIGxhc3RWYWx1ZTogaCxcbiAgICAgICAgICAgIHNlZW46IGJcbiAgICAgICAgICB9KSkuc3Vic2NyaWJlKF8pO1xuICAgICAgICB9IGNhdGNoIChFKSB7XG4gICAgICAgICAgXy5lcnJvcihFKTtcbiAgICAgICAgfVxuICAgICAgfSwgdyk7XG4gICAgfTtcbiAgICBtID0gZi5zdWJzY3JpYmUoTWEoXywgZnVuY3Rpb24odykge1xuICAgICAgeSA9PSBudWxsIHx8IHkudW5zdWJzY3JpYmUoKSwgYisrLCBfLm5leHQoaCA9IHcpLCBhID4gMCAmJiB2KGEpO1xuICAgIH0sIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICAgIHkgIT0gbnVsbCAmJiB5LmNsb3NlZCB8fCB5ID09IG51bGwgfHwgeS51bnN1YnNjcmliZSgpLCBoID0gbnVsbDtcbiAgICB9KSksICFiICYmIHYobiAhPSBudWxsID8gdHlwZW9mIG4gPT0gXCJudW1iZXJcIiA/IG4gOiArbiAtIGwubm93KCkgOiBhKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBkaShlKSB7XG4gIHRocm93IG5ldyBsaShlKTtcbn1cbmNsYXNzIGV0IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAodCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6ICEwLCBsb2FkZWRWYWx1ZTogdCB9LCB0aGlzLl9zdWJqZWN0Lm5leHQodCksIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9LCB0aGlzLnRocm93ID0gKHQsIHIpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImVycm9yXCIsIGlzU3VjY2VzczogITEsIGVycm9yOiB0LCBlcnJNc2c6IHIgfSwgdGhpcy5fc3ViamVjdC5lcnJvcih0KTtcbiAgICB9LCB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHQpID0+IHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiA/IHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUgOiB0LCB0aGlzLnN1YnNjcmliZSA9ICh0KSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHQodGhpcy5fY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIgJiYgdCh0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHIgPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAobmV4dCk6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB0KHRoaXMuX2N1cnJlbnQpLCByLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImVycm9yXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB0KHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLndhaXRGb3JMb2FkID0gKHQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuX2N1cnJlbnQuZXJyb3IpO1xuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiICYmIGt0KHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgciA9IHtcbiAgICAgICAgZmlyc3Q6IHQudGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gYWkoKCkgPT4gbmV3IEVycm9yKHQudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHNpKHRoaXMuX3N1YmplY3QucGlwZSh1aShyKSkpO1xuICAgIH0sIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogITEgfSwgdGhpcy5fc3ViamVjdCA9IG5ldyB1bigpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5jb25zdCB3ciA9IHokMS5lbnVtKFtcImRldlwiLCBcInN0Z1wiLCBcInByb2RcIl0pLCBwaSA9IHtcbiAgcHJvZDogXCJodHRwczovL2Nvbm50by5nZXRvcGVucGF5LmNvbVwiLFxuICBzdGc6IFwiaHR0cHM6Ly9jb25udG8ub3BlbnBheXN0YWdpbmcuY29tXCIsXG4gIGRldjogXCJodHRwOi8vbG9jYWxob3N0OjgwMDBcIlxufSwgX2kgPSAoZSkgPT4gcGlbZV0sIEx0ID0ge30sIHBuID0gYXN5bmMgKGUpID0+IHtcbiAgaWYgKEx0W2VdKVxuICAgIHJldHVybiBMdFtlXTtcbiAgdHJ5IHtcbiAgICBjb25zdCB0ID0gYXdhaXQgZmV0Y2gobmV3IFVSTChcIi9oZWFsdGgvZW52aXJvbm1lbnRcIiwgZSkpLnRoZW4oKG4pID0+IG4uanNvbigpKSwgciA9IHdyLnBhcnNlKHQuZW52aXJvbm1lbnQpO1xuICAgIHJldHVybiBMdFtlXSA9IHIsIHI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB3ci5WYWx1ZXMucHJvZDtcbiAgfVxufTtcbmZ1bmN0aW9uIGt0KGUpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHtlfWApO1xufVxuY29uc3QgQXQgPSAoZSwgdCkgPT4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW3JdKSA9PiAhdC5pbmNsdWRlcyhyKSkpLCAkID0gKCkgPT4ge1xuICBpZiAoISh0eXBlb2Ygd2luZG93ID4gXCJ1XCIpKVxuICAgIHJldHVybiB3aW5kb3c7XG59LCBxdCA9IG5ldyBldCgpLCB2ciA9IFwib3BfbWV0cmljc19xdWV1ZVwiLCBtaSA9IDMsIGZpID0gMywgeWkgPSAxZTMsIHsgbG9nX186IF90IH0gPSBJKFwib3AtbWV0cmljc1wiKTtcbmNsYXNzIGhpIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdmFyIHQsIHI7XG4gICAgdGhpcy5xdWV1ZSA9IFtdLCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9ICExLCB0aGlzLmJhdGNoVGltZW91dCA9IG51bGwsIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gMCwgdGhpcy5vZmZsaW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBfdChcIk5ldHdvcmsgb2ZmbGluZSwgbWV0cmljcyB3aWxsIGJlIHF1ZXVlZFwiKSwgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICB9LCB0aGlzLm9ubGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgX3QoXCJOZXR3b3JrIG9ubGluZSwgcHJvY2Vzc2luZyBtZXRyaWNzIHF1ZXVlXCIpLCB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgIH0sIHRoaXMubG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKSwgKHQgPSAkKCkpID09IG51bGwgfHwgdC5hZGRFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lciksIChyID0gJCgpKSA9PSBudWxsIHx8IHIuYWRkRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgfVxuICBhZGRFdmVudCh0LCByLCBuKSB7XG4gICAgY29uc3QgYSA9IHtcbiAgICAgIGV2ZW50TmFtZTogdCxcbiAgICAgIHByb3BlcnRpZXM6IHIgfHwge30sXG4gICAgICBjb250ZXh0UHJvcGVydGllczogbiB8fCB7fSxcbiAgICAgIG5vbmNlOiB2NCgpLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgZGF0ZXRpbWU6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIGF0dGVtcHRDb3VudDogMCxcbiAgICAgIHRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQ6IHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID8gRGF0ZS5ub3coKSAtIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wIDogMFxuICAgIH07XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSBhLnRpbWVzdGFtcCwgdGhpcy5xdWV1ZS5wdXNoKGEpLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpLCB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbiAgbG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKSB7XG4gICAgdmFyIHQsIHI7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG4gPSAociA9ICh0ID0gJCgpKSA9PSBudWxsID8gdm9pZCAwIDogdC5sb2NhbFN0b3JhZ2UpID09IG51bGwgPyB2b2lkIDAgOiByLmdldEl0ZW0odnIpO1xuICAgICAgbiAmJiAodGhpcy5xdWV1ZSA9IEpTT04ucGFyc2UobikpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhpcy5xdWV1ZSA9IFtdLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIH1cbiAgfVxuICBzYXZlUXVldWVUb1N0b3JhZ2UoKSB7XG4gICAgdmFyIHQ7XG4gICAgKHQgPSAkKCkpID09IG51bGwgfHwgdC5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh2ciwgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWV1ZSkpO1xuICB9XG4gIHNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIGNvbnN0IHQgPSAkKCk7XG4gICAgdCAmJiBuYXZpZ2F0b3Iub25MaW5lICYmICF0aGlzLnByb2Nlc3NpbmdRdWV1ZSAmJiB0aGlzLnF1ZXVlLmxlbmd0aCA+IDAgJiYgIXRoaXMuYmF0Y2hUaW1lb3V0ICYmICh0aGlzLmJhdGNoVGltZW91dCA9IHQuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGwsIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgfSwgeWkpKTtcbiAgfVxuICBjYW5jZWxCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgdmFyIHQ7XG4gICAgdGhpcy5iYXRjaFRpbWVvdXQgJiYgKCh0ID0gJCgpKSA9PSBudWxsIHx8IHQuY2xlYXJUaW1lb3V0KHRoaXMuYmF0Y2hUaW1lb3V0KSwgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsKSwgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSAhMTtcbiAgfVxuICBwcm9jZXNzUXVldWUoKSB7XG4gICAgIW5hdmlnYXRvci5vbkxpbmUgfHwgdGhpcy5wcm9jZXNzaW5nUXVldWUgfHwgdGhpcy5xdWV1ZS5sZW5ndGggPT09IDAgfHwgKHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gITAsIHRoaXMuc2VuZEJhdGNoKCkuZmluYWxseSgoKSA9PiB7XG4gICAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9ICExLCB0aGlzLnF1ZXVlLmxlbmd0aCA+IDAgJiYgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICAgIH0pKTtcbiAgfVxuICBhc3luYyBzZW5kQmF0Y2goKSB7XG4gICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgdCA9IHF0LmdldFZhbHVlSWZMb2FkZWRFbHNlKHZvaWQgMCk7XG4gICAgaWYgKCF0KSB7XG4gICAgICBfdChcIk1ldHJpY3MgY29udGV4dCBub3QgYXZhaWxhYmxlLCB3aWxsIHJldHJ5IGxhdGVyXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByID0gdGhpcy5xdWV1ZS5zbGljZSgwLCBmaSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG4gPSB7XG4gICAgICAgIGV2ZW50czogci5tYXAoKGMpID0+ICh7XG4gICAgICAgICAgZXZlbnRfbmFtZTogYy5ldmVudE5hbWUsXG4gICAgICAgICAgZGV2aWNlX3Rva2VuOiB0LmRldmljZVRva2VuLFxuICAgICAgICAgIGNvbnRleHRfcHJvcGVydGllczoge1xuICAgICAgICAgICAgLi4udCxcbiAgICAgICAgICAgIC4uLmMuY29udGV4dFByb3BlcnRpZXNcbiAgICAgICAgICB9LFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIG5vbmNlOiBjLm5vbmNlLFxuICAgICAgICAgICAgZGF0ZXRpbWU6IGMuZGF0ZXRpbWUsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IGMudGltZXN0YW1wLFxuICAgICAgICAgICAgdGltZV9kaWZmX2Zyb21fcHJldmlvdXNfZXZlbnQ6IGMudGltZURpZmZGcm9tUHJldmlvdXNFdmVudCxcbiAgICAgICAgICAgIGNoZWNrb3V0X3NlY3VyZV90b2tlbjogdC5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgLi4uYy5wcm9wZXJ0aWVzXG4gICAgICAgICAgfVxuICAgICAgICB9KSlcbiAgICAgIH0sIGEgPSBfaSh0LmVudmlyb25tZW50KSwgbyA9IG5ldyBVUkwoXCIvbWV0cmljcy9wdWJsaWMvY2FwdHVyZVwiLCBhKTtcbiAgICAgIChhd2FpdCBmZXRjaChvLnRvU3RyaW5nKCksIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KG4pXG4gICAgICB9KSkub2sgPyAodGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2Uoci5sZW5ndGgpLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpKSA6IHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2gocik7XG4gICAgfSBjYXRjaCAobikge1xuICAgICAgX3QoXCJFcnJvciBzZW5kaW5nIG1ldHJpY3MgYmF0Y2g6XCIsIG4pLCB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKHIpO1xuICAgIH1cbiAgfVxuICBoYW5kbGVGYWlsZWRCYXRjaCh0KSB7XG4gICAgdC5mb3JFYWNoKChuKSA9PiB7XG4gICAgICBuLmF0dGVtcHRDb3VudCsrO1xuICAgIH0pO1xuICAgIGNvbnN0IHIgPSB0LmZpbHRlcigobikgPT4gbi5hdHRlbXB0Q291bnQgPCBtaSk7XG4gICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UodC5sZW5ndGgpLCB0aGlzLnF1ZXVlID0gWy4uLnIsIC4uLnRoaXMucXVldWVdLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICB9XG4gIGNsZWFudXAoKSB7XG4gICAgdmFyIHQsIHI7XG4gICAgKHQgPSAkKCkpID09IG51bGwgfHwgdC5yZW1vdmVFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lciksIChyID0gJCgpKSA9PSBudWxsIHx8IHIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKSwgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxufVxuY29uc3QgV3QgPSBuZXcgaGkoKSwgZyA9IChlLCB0LCByKSA9PiB7XG4gIFd0LmFkZEV2ZW50KGUsIHQsIHIpO1xufSwgZ2kgPSAoKSA9PiB7XG4gIFd0LnByb2Nlc3NRdWV1ZSgpO1xufSwgX24gPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZWUoZS5yZWFzb24pO1xuICBnKFwidW5oYW5kbGVkX3JlamVjdGlvbl9lcnJvclwiLCB7XG4gICAgZXJyb3JfbWVzc2FnZTogdCxcbiAgICBlcnJvcl9uYW1lOiBlLnJlYXNvblxuICB9KTtcbn0sIG1uID0gKGUpID0+IHtcbiAgdmFyIHIsIG47XG4gIGNvbnN0IHQgPSBlZShlLmVycm9yKTtcbiAgZyhcInVuY2F1Z2h0X2Vycm9yXCIsIHtcbiAgICBlcnJvcl9tZXNzYWdlOiB0LFxuICAgIGVycm9yX25hbWU6IChyID0gZS5lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IHIubmFtZSxcbiAgICBlcnJvcl9zdGFjazogKG4gPSBlLmVycm9yKSA9PSBudWxsID8gdm9pZCAwIDogbi5zdGFjayxcbiAgICBmaWxlX25hbWU6IGUuZmlsZW5hbWUsXG4gICAgbGluZV9udW1iZXI6IGUubGluZW5vLFxuICAgIGNvbHVtbl9udW1iZXI6IGUuY29sbm9cbiAgfSk7XG59LCB3aSA9ICgpID0+IHtcbiAgdmFyIGUsIHQ7XG4gIChlID0gJCgpKSA9PSBudWxsIHx8IGUuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIG1uKSwgKHQgPSAkKCkpID09IG51bGwgfHwgdC5hZGRFdmVudExpc3RlbmVyKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsIF9uKTtcbn0sIHZpID0gKCkgPT4ge1xuICB2YXIgZSwgdDtcbiAgKGUgPSAkKCkpID09IG51bGwgfHwgZS5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgbW4pLCAodCA9ICQoKSkgPT0gbnVsbCB8fCB0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIiwgX24pO1xufTtcbnZhciBHcjtcbihHciA9ICQoKSkgPT0gbnVsbCB8fCBHci5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsICgpID0+IHtcbiAgV3QucHJvY2Vzc1F1ZXVlKCk7XG59KTtcbmNvbnN0IGJpID0geiQxLm9iamVjdCh7XG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogeiQxLnN0cmluZygpXG59KSwgRWkgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG59KSwgUGkgPSB7XG4gIHVzZDogXCJ1c2RcIixcbiAgYnJsOiBcImJybFwiXG59LCBJdCA9IGFzeW5jIChlKSA9PiB7XG4gIGZvciAobGV0IHIgPSAwOyByIDwgMTA7IHIrKylcbiAgICBicigpIHx8IGF3YWl0IFR0KDUwMCk7XG4gIGlmICghYnIoKSlcbiAgICB0aHJvdyBjb25zb2xlLmxvZyhcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpLCBuZXcgRXJyb3IoXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKTtcbiAgcmV0dXJuIG5ldyBTdHJpcGUoZSk7XG59LCBTaSA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBhd2FpdCBJdChlKTtcbiAgcmV0dXJuIHtcbiAgICBlbGVtZW50czogci5lbGVtZW50cyh0KSxcbiAgICBzdHJpcGU6IHJcbiAgfTtcbn0sIENpID0gYXN5bmMgKGUsIHQsIHIsIG4sIGEpID0+IHtcbiAgY29uc3QgbyA9IGF3YWl0IEl0KGUpLCBzID0gUGlbci50b0xvd2VyQ2FzZSgpLnRyaW0oKV07XG4gIHJldHVybiBvLnBheW1lbnRSZXF1ZXN0KHtcbiAgICAvLyBUT0RPOiByZXBsYWNlIHRoaXMgd2l0aCBzdHJpcGUgYWNjb3VudCBjb3VudHJ5IGFzIHNvb24gYXMgd2Ugc3VwcG9ydCBpdFxuICAgIGNvdW50cnk6IFwiVVNcIixcbiAgICBjdXJyZW5jeTogcyxcbiAgICB0b3RhbDoge1xuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIGFtb3VudDogdCxcbiAgICAgIHBlbmRpbmc6IG5cbiAgICB9LFxuICAgIC8vIHJlcXVlc3RTaGlwcGluZzogdHJ1ZSxcbiAgICByZXF1ZXN0UGF5ZXJOYW1lOiAhMCxcbiAgICByZXF1ZXN0UGF5ZXJFbWFpbDogITAsXG4gICAgZGlzYWJsZVdhbGxldHM6IFtdXG4gIH0pO1xufSwgVHQgPSAoZSkgPT4gbmV3IFByb21pc2UoKHQpID0+IHtcbiAgc2V0VGltZW91dCh0LCBlKTtcbn0pLCBiciA9ICgpID0+IFwiU3RyaXBlXCIgaW4gd2luZG93LCBraSA9IGFzeW5jIChlKSA9PiBuZXcgUHJvbWlzZSgodCwgcikgPT4ge1xuICB0cnkge1xuICAgIGUub24oXCJwYXltZW50bWV0aG9kXCIsIGFzeW5jIChuKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcInBheW1lbnRtZXRob2QgRVZUOjogXCIsIG4pLCB0KG4pO1xuICAgIH0pLCBlLm9uKFwidG9rZW5cIiwgYXN5bmMgKG4pID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwidG9rZW4gRVZUOjogXCIsIG4pO1xuICAgIH0pLCBlLm9uKFwiY2FuY2VsXCIsICgpID0+IHtcbiAgICAgIHIobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAobikge1xuICAgIHIobik7XG4gIH1cbn0pLCBBaSA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGlmICghZS5zdHJpcGVfcGsgfHwgIWUuY2xpZW50X3NlY3JldClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmV4dCBhY3Rpb24gbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KGUpfWApO1xuICBjb25zdCBuID0gYXdhaXQgKGF3YWl0IEl0KGUuc3RyaXBlX3BrKSkuY29uZmlybUNhcmRTZXR1cChlLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogdC5wYXltZW50TWV0aG9kLmlkXG4gIH0pO1xuICBpZiAobi5lcnJvcilcbiAgICB0aHJvdyB0LmNvbXBsZXRlKFwiZmFpbFwiKSwgbmV3IEVycm9yKGBQYXltZW50IGZhaWxlZDogJHtuLmVycm9yLm1lc3NhZ2UgPz8gXCJ1bmtub3duXCJ9YCk7XG4gIHJldHVybiB0LmNvbXBsZXRlKFwic3VjY2Vzc1wiKSwgbjtcbn0sIElpID0gYXN5bmMgKGUpID0+IHtcbiAgdmFyIGEsIG8sIHMsIGM7XG4gIGNvbnN0IHIgPSBhd2FpdCAoYXdhaXQgSXQoZS5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKGUuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiBlLnN0cmlwZV9wbV9pZFxuICB9KSwgbiA9IChhID0gci5zZXR1cEludGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGEuc3RhdHVzO1xuICBpZiAobiA9PT0gXCJzdWNjZWVkZWRcIilcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIENPTkZJUk1JTkcgUE06XCIsIGUuc3RyaXBlX3BtX2lkKSwgY29uc29sZS5sb2coXCJbM0RTXSBTZXR1cCBpbnRlbnQgY3JlYXRlZDpcIiwgci5zZXR1cEludGVudCk7XG4gIGVsc2UgdGhyb3cgbiA9PT0gXCJjYW5jZWxlZFwiID8gbmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpIDogbmV3IEVycm9yKFxuICAgIGAkeygobyA9IHIuZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBvLm1lc3NhZ2UpID8/ICgoYyA9IChzID0gci5zZXR1cEludGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IHMubGFzdF9zZXR1cF9lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IGMubWVzc2FnZSkgPz8gXCJQYXltZW50IGZhaWxlZCwgcGxlYXNlIGNsaWNrIHN1Ym1pdCBhZ2FpbiB0byBwYXkuXCJ9YFxuICApO1xufTtcbnZhciBUaSA9IHR5cGVvZiBnbG9iYWxUaGlzID09IFwib2JqZWN0XCIgPyBnbG9iYWxUaGlzIDogdHlwZW9mIHNlbGYgPT0gXCJvYmplY3RcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ID09IFwib2JqZWN0XCIgPyB3aW5kb3cgOiB0eXBlb2YgZ2xvYmFsID09IFwib2JqZWN0XCIgPyBnbG9iYWwgOiB7fSwgVGUgPSBcIjEuOS4wXCIsIEVyID0gL14oXFxkKylcXC4oXFxkKylcXC4oXFxkKykoLSguKykpPyQvO1xuZnVuY3Rpb24gUmkoZSkge1xuICB2YXIgdCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFtlXSksIHIgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLCBuID0gZS5tYXRjaChFcik7XG4gIGlmICghbilcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gITE7XG4gICAgfTtcbiAgdmFyIGEgPSB7XG4gICAgbWFqb3I6ICtuWzFdLFxuICAgIG1pbm9yOiArblsyXSxcbiAgICBwYXRjaDogK25bM10sXG4gICAgcHJlcmVsZWFzZTogbls0XVxuICB9O1xuICBpZiAoYS5wcmVyZWxlYXNlICE9IG51bGwpXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGwpIHtcbiAgICAgIHJldHVybiBsID09PSBlO1xuICAgIH07XG4gIGZ1bmN0aW9uIG8oYykge1xuICAgIHJldHVybiByLmFkZChjKSwgITE7XG4gIH1cbiAgZnVuY3Rpb24gcyhjKSB7XG4gICAgcmV0dXJuIHQuYWRkKGMpLCAhMDtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24obCkge1xuICAgIGlmICh0LmhhcyhsKSlcbiAgICAgIHJldHVybiAhMDtcbiAgICBpZiAoci5oYXMobCkpXG4gICAgICByZXR1cm4gITE7XG4gICAgdmFyIHUgPSBsLm1hdGNoKEVyKTtcbiAgICBpZiAoIXUpXG4gICAgICByZXR1cm4gbyhsKTtcbiAgICB2YXIgZCA9IHtcbiAgICAgIG1ham9yOiArdVsxXSxcbiAgICAgIG1pbm9yOiArdVsyXSxcbiAgICAgIHBhdGNoOiArdVszXSxcbiAgICAgIHByZXJlbGVhc2U6IHVbNF1cbiAgICB9O1xuICAgIHJldHVybiBkLnByZXJlbGVhc2UgIT0gbnVsbCB8fCBhLm1ham9yICE9PSBkLm1ham9yID8gbyhsKSA6IGEubWFqb3IgPT09IDAgPyBhLm1pbm9yID09PSBkLm1pbm9yICYmIGEucGF0Y2ggPD0gZC5wYXRjaCA/IHMobCkgOiBvKGwpIDogYS5taW5vciA8PSBkLm1pbm9yID8gcyhsKSA6IG8obCk7XG4gIH07XG59XG52YXIgTmkgPSBSaShUZSksIEZpID0gVGUuc3BsaXQoXCIuXCIpWzBdLCBvdCA9IFN5bWJvbC5mb3IoXCJvcGVudGVsZW1ldHJ5LmpzLmFwaS5cIiArIEZpKSwgYXQgPSBUaTtcbmZ1bmN0aW9uIFp0KGUsIHQsIHIsIG4pIHtcbiAgdmFyIGE7XG4gIG4gPT09IHZvaWQgMCAmJiAobiA9ICExKTtcbiAgdmFyIG8gPSBhdFtvdF0gPSAoYSA9IGF0W290XSkgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IHtcbiAgICB2ZXJzaW9uOiBUZVxuICB9O1xuICBpZiAoIW4gJiYgb1tlXSkge1xuICAgIHZhciBzID0gbmV3IEVycm9yKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBBdHRlbXB0ZWQgZHVwbGljYXRlIHJlZ2lzdHJhdGlvbiBvZiBBUEk6IFwiICsgZSk7XG4gICAgcmV0dXJuIHIuZXJyb3Iocy5zdGFjayB8fCBzLm1lc3NhZ2UpLCAhMTtcbiAgfVxuICBpZiAoby52ZXJzaW9uICE9PSBUZSkge1xuICAgIHZhciBzID0gbmV3IEVycm9yKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBSZWdpc3RyYXRpb24gb2YgdmVyc2lvbiB2XCIgKyBvLnZlcnNpb24gKyBcIiBmb3IgXCIgKyBlICsgXCIgZG9lcyBub3QgbWF0Y2ggcHJldmlvdXNseSByZWdpc3RlcmVkIEFQSSB2XCIgKyBUZSk7XG4gICAgcmV0dXJuIHIuZXJyb3Iocy5zdGFjayB8fCBzLm1lc3NhZ2UpLCAhMTtcbiAgfVxuICByZXR1cm4gb1tlXSA9IHQsIHIuZGVidWcoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IFJlZ2lzdGVyZWQgYSBnbG9iYWwgZm9yIFwiICsgZSArIFwiIHZcIiArIFRlICsgXCIuXCIpLCAhMDtcbn1cbmZ1bmN0aW9uIGl0KGUpIHtcbiAgdmFyIHQsIHIsIG4gPSAodCA9IGF0W290XSkgPT09IG51bGwgfHwgdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdC52ZXJzaW9uO1xuICBpZiAoISghbiB8fCAhTmkobikpKVxuICAgIHJldHVybiAociA9IGF0W290XSkgPT09IG51bGwgfHwgciA9PT0gdm9pZCAwID8gdm9pZCAwIDogcltlXTtcbn1cbmZ1bmN0aW9uIEt0KGUsIHQpIHtcbiAgdC5kZWJ1ZyhcIkBvcGVudGVsZW1ldHJ5L2FwaTogVW5yZWdpc3RlcmluZyBhIGdsb2JhbCBmb3IgXCIgKyBlICsgXCIgdlwiICsgVGUgKyBcIi5cIik7XG4gIHZhciByID0gYXRbb3RdO1xuICByICYmIGRlbGV0ZSByW2VdO1xufVxudmFyIE1pID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIGEsIG8gPSBbXSwgcztcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKGEgPSBuLm5leHQoKSkuZG9uZTsgKSBvLnB1c2goYS52YWx1ZSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBzID0geyBlcnJvcjogYyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBhICYmICFhLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocykgdGhyb3cgcy5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG87XG59LCBMaSA9IGZ1bmN0aW9uKGUsIHQsIHIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBhID0gdC5sZW5ndGgsIG87IG4gPCBhOyBuKyspXG4gICAgKG8gfHwgIShuIGluIHQpKSAmJiAobyB8fCAobyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsIDAsIG4pKSwgb1tuXSA9IHRbbl0pO1xuICByZXR1cm4gZS5jb25jYXQobyB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7XG59LCBEaSA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKHQpIHtcbiAgICAgIHRoaXMuX25hbWVzcGFjZSA9IHQubmFtZXNwYWNlIHx8IFwiRGlhZ0NvbXBvbmVudExvZ2dlclwiO1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuZGVidWcgPSBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDA7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICAgIHRbcl0gPSBhcmd1bWVudHNbcl07XG4gICAgICByZXR1cm4gWWUoXCJkZWJ1Z1wiLCB0aGlzLl9uYW1lc3BhY2UsIHQpO1xuICAgIH0sIGUucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgICAgcmV0dXJuIFllKFwiZXJyb3JcIiwgdGhpcy5fbmFtZXNwYWNlLCB0KTtcbiAgICB9LCBlLnByb3RvdHlwZS5pbmZvID0gZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgICAgcmV0dXJuIFllKFwiaW5mb1wiLCB0aGlzLl9uYW1lc3BhY2UsIHQpO1xuICAgIH0sIGUucHJvdG90eXBlLndhcm4gPSBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDA7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICAgIHRbcl0gPSBhcmd1bWVudHNbcl07XG4gICAgICByZXR1cm4gWWUoXCJ3YXJuXCIsIHRoaXMuX25hbWVzcGFjZSwgdCk7XG4gICAgfSwgZS5wcm90b3R5cGUudmVyYm9zZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgZm9yICh2YXIgdCA9IFtdLCByID0gMDsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKylcbiAgICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICAgIHJldHVybiBZZShcInZlcmJvc2VcIiwgdGhpcy5fbmFtZXNwYWNlLCB0KTtcbiAgICB9LCBlO1xuICB9KClcbik7XG5mdW5jdGlvbiBZZShlLCB0LCByKSB7XG4gIHZhciBuID0gaXQoXCJkaWFnXCIpO1xuICBpZiAobilcbiAgICByZXR1cm4gci51bnNoaWZ0KHQpLCBuW2VdLmFwcGx5KG4sIExpKFtdLCBNaShyKSwgITEpKTtcbn1cbnZhciBYO1xuKGZ1bmN0aW9uKGUpIHtcbiAgZVtlLk5PTkUgPSAwXSA9IFwiTk9ORVwiLCBlW2UuRVJST1IgPSAzMF0gPSBcIkVSUk9SXCIsIGVbZS5XQVJOID0gNTBdID0gXCJXQVJOXCIsIGVbZS5JTkZPID0gNjBdID0gXCJJTkZPXCIsIGVbZS5ERUJVRyA9IDcwXSA9IFwiREVCVUdcIiwgZVtlLlZFUkJPU0UgPSA4MF0gPSBcIlZFUkJPU0VcIiwgZVtlLkFMTCA9IDk5OTldID0gXCJBTExcIjtcbn0pKFggfHwgKFggPSB7fSkpO1xuZnVuY3Rpb24geGkoZSwgdCkge1xuICBlIDwgWC5OT05FID8gZSA9IFguTk9ORSA6IGUgPiBYLkFMTCAmJiAoZSA9IFguQUxMKSwgdCA9IHQgfHwge307XG4gIGZ1bmN0aW9uIHIobiwgYSkge1xuICAgIHZhciBvID0gdFtuXTtcbiAgICByZXR1cm4gdHlwZW9mIG8gPT0gXCJmdW5jdGlvblwiICYmIGUgPj0gYSA/IG8uYmluZCh0KSA6IGZ1bmN0aW9uKCkge1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBlcnJvcjogcihcImVycm9yXCIsIFguRVJST1IpLFxuICAgIHdhcm46IHIoXCJ3YXJuXCIsIFguV0FSTiksXG4gICAgaW5mbzogcihcImluZm9cIiwgWC5JTkZPKSxcbiAgICBkZWJ1ZzogcihcImRlYnVnXCIsIFguREVCVUcpLFxuICAgIHZlcmJvc2U6IHIoXCJ2ZXJib3NlXCIsIFguVkVSQk9TRSlcbiAgfTtcbn1cbnZhciBPaSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBhLCBvID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShhID0gbi5uZXh0KCkpLmRvbmU7ICkgby5wdXNoKGEudmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgcyA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgYSAmJiAhYS5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBvO1xufSwgVWkgPSBmdW5jdGlvbihlLCB0LCByKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgYSA9IHQubGVuZ3RoLCBvOyBuIDwgYTsgbisrKVxuICAgIChvIHx8ICEobiBpbiB0KSkgJiYgKG8gfHwgKG8gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LCAwLCBuKSksIG9bbl0gPSB0W25dKTtcbiAgcmV0dXJuIGUuY29uY2F0KG8gfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpO1xufSwgamkgPSBcImRpYWdcIiwgRXQgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICAgIGZ1bmN0aW9uIHQoYSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZm9yICh2YXIgbyA9IFtdLCBzID0gMDsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKylcbiAgICAgICAgICAgIG9bc10gPSBhcmd1bWVudHNbc107XG4gICAgICAgICAgdmFyIGMgPSBpdChcImRpYWdcIik7XG4gICAgICAgICAgaWYgKGMpXG4gICAgICAgICAgICByZXR1cm4gY1thXS5hcHBseShjLCBVaShbXSwgT2kobyksICExKSk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB2YXIgciA9IHRoaXMsIG4gPSBmdW5jdGlvbihhLCBvKSB7XG4gICAgICAgIHZhciBzLCBjLCBsO1xuICAgICAgICBpZiAobyA9PT0gdm9pZCAwICYmIChvID0geyBsb2dMZXZlbDogWC5JTkZPIH0pLCBhID09PSByKSB7XG4gICAgICAgICAgdmFyIHUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgdXNlIGRpYWcgYXMgdGhlIGxvZ2dlciBmb3IgaXRzZWxmLiBQbGVhc2UgdXNlIGEgRGlhZ0xvZ2dlciBpbXBsZW1lbnRhdGlvbiBsaWtlIENvbnNvbGVEaWFnTG9nZ2VyIG9yIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uXCIpO1xuICAgICAgICAgIHJldHVybiByLmVycm9yKChzID0gdS5zdGFjaykgIT09IG51bGwgJiYgcyAhPT0gdm9pZCAwID8gcyA6IHUubWVzc2FnZSksICExO1xuICAgICAgICB9XG4gICAgICAgIHR5cGVvZiBvID09IFwibnVtYmVyXCIgJiYgKG8gPSB7XG4gICAgICAgICAgbG9nTGV2ZWw6IG9cbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBkID0gaXQoXCJkaWFnXCIpLCBmID0geGkoKGMgPSBvLmxvZ0xldmVsKSAhPT0gbnVsbCAmJiBjICE9PSB2b2lkIDAgPyBjIDogWC5JTkZPLCBhKTtcbiAgICAgICAgaWYgKGQgJiYgIW8uc3VwcHJlc3NPdmVycmlkZU1lc3NhZ2UpIHtcbiAgICAgICAgICB2YXIgXyA9IChsID0gbmV3IEVycm9yKCkuc3RhY2spICE9PSBudWxsICYmIGwgIT09IHZvaWQgMCA/IGwgOiBcIjxmYWlsZWQgdG8gZ2VuZXJhdGUgc3RhY2t0cmFjZT5cIjtcbiAgICAgICAgICBkLndhcm4oXCJDdXJyZW50IGxvZ2dlciB3aWxsIGJlIG92ZXJ3cml0dGVuIGZyb20gXCIgKyBfKSwgZi53YXJuKFwiQ3VycmVudCBsb2dnZXIgd2lsbCBvdmVyd3JpdGUgb25lIGFscmVhZHkgcmVnaXN0ZXJlZCBmcm9tIFwiICsgXyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFp0KFwiZGlhZ1wiLCBmLCByLCAhMCk7XG4gICAgICB9O1xuICAgICAgci5zZXRMb2dnZXIgPSBuLCByLmRpc2FibGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgS3QoamksIHIpO1xuICAgICAgfSwgci5jcmVhdGVDb21wb25lbnRMb2dnZXIgPSBmdW5jdGlvbihhKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGkoYSk7XG4gICAgICB9LCByLnZlcmJvc2UgPSB0KFwidmVyYm9zZVwiKSwgci5kZWJ1ZyA9IHQoXCJkZWJ1Z1wiKSwgci5pbmZvID0gdChcImluZm9cIiksIHIud2FybiA9IHQoXCJ3YXJuXCIpLCByLmVycm9yID0gdChcImVycm9yXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZS5pbnN0YW5jZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlIHx8ICh0aGlzLl9pbnN0YW5jZSA9IG5ldyBlKCkpLCB0aGlzLl9pbnN0YW5jZTtcbiAgICB9LCBlO1xuICB9KClcbik7XG5mdW5jdGlvbiAkaShlKSB7XG4gIHJldHVybiBTeW1ib2wuZm9yKGUpO1xufVxudmFyIEdpID0gKFxuICAvKiogQGNsYXNzICovXG4gIC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKHQpIHtcbiAgICAgIHZhciByID0gdGhpcztcbiAgICAgIHIuX2N1cnJlbnRDb250ZXh0ID0gdCA/IG5ldyBNYXAodCkgOiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLCByLmdldFZhbHVlID0gZnVuY3Rpb24obikge1xuICAgICAgICByZXR1cm4gci5fY3VycmVudENvbnRleHQuZ2V0KG4pO1xuICAgICAgfSwgci5zZXRWYWx1ZSA9IGZ1bmN0aW9uKG4sIGEpIHtcbiAgICAgICAgdmFyIG8gPSBuZXcgZShyLl9jdXJyZW50Q29udGV4dCk7XG4gICAgICAgIHJldHVybiBvLl9jdXJyZW50Q29udGV4dC5zZXQobiwgYSksIG87XG4gICAgICB9LCByLmRlbGV0ZVZhbHVlID0gZnVuY3Rpb24obikge1xuICAgICAgICB2YXIgYSA9IG5ldyBlKHIuX2N1cnJlbnRDb250ZXh0KTtcbiAgICAgICAgcmV0dXJuIGEuX2N1cnJlbnRDb250ZXh0LmRlbGV0ZShuKSwgYTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBlO1xuICB9KClcbiksIFZpID0gbmV3IEdpKCksIHFpID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIGEsIG8gPSBbXSwgcztcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKGEgPSBuLm5leHQoKSkuZG9uZTsgKSBvLnB1c2goYS52YWx1ZSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBzID0geyBlcnJvcjogYyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBhICYmICFhLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocykgdGhyb3cgcy5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG87XG59LCB6aSA9IGZ1bmN0aW9uKGUsIHQsIHIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBhID0gdC5sZW5ndGgsIG87IG4gPCBhOyBuKyspXG4gICAgKG8gfHwgIShuIGluIHQpKSAmJiAobyB8fCAobyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsIDAsIG4pKSwgb1tuXSA9IHRbbl0pO1xuICByZXR1cm4gZS5jb25jYXQobyB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7XG59LCBIaSA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuYWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gVmk7XG4gICAgfSwgZS5wcm90b3R5cGUud2l0aCA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIGZvciAodmFyIGEgPSBbXSwgbyA9IDM7IG8gPCBhcmd1bWVudHMubGVuZ3RoOyBvKyspXG4gICAgICAgIGFbbyAtIDNdID0gYXJndW1lbnRzW29dO1xuICAgICAgcmV0dXJuIHIuY2FsbC5hcHBseShyLCB6aShbbl0sIHFpKGEpLCAhMSkpO1xuICAgIH0sIGUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gcjtcbiAgICB9LCBlLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgQmkgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIXIpIHJldHVybiBlO1xuICB2YXIgbiA9IHIuY2FsbChlKSwgYSwgbyA9IFtdLCBzO1xuICB0cnkge1xuICAgIGZvciAoOyAodCA9PT0gdm9pZCAwIHx8IHQtLSA+IDApICYmICEoYSA9IG4ubmV4dCgpKS5kb25lOyApIG8ucHVzaChhLnZhbHVlKTtcbiAgfSBjYXRjaCAoYykge1xuICAgIHMgPSB7IGVycm9yOiBjIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGEgJiYgIWEuZG9uZSAmJiAociA9IG4ucmV0dXJuKSAmJiByLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChzKSB0aHJvdyBzLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbztcbn0sIFlpID0gZnVuY3Rpb24oZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIGEgPSB0Lmxlbmd0aCwgbzsgbiA8IGE7IG4rKylcbiAgICAobyB8fCAhKG4gaW4gdCkpICYmIChvIHx8IChvID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBvW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChvIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn0sIER0ID0gXCJjb250ZXh0XCIsIEppID0gbmV3IEhpKCksIFF0ID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLmdldEluc3RhbmNlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IGUoKSksIHRoaXMuX2luc3RhbmNlO1xuICAgIH0sIGUucHJvdG90eXBlLnNldEdsb2JhbENvbnRleHRNYW5hZ2VyID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIFp0KER0LCB0LCBFdC5pbnN0YW5jZSgpKTtcbiAgICB9LCBlLnByb3RvdHlwZS5hY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpLmFjdGl2ZSgpO1xuICAgIH0sIGUucHJvdG90eXBlLndpdGggPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICBmb3IgKHZhciBhLCBvID0gW10sIHMgPSAzOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKVxuICAgICAgICBvW3MgLSAzXSA9IGFyZ3VtZW50c1tzXTtcbiAgICAgIHJldHVybiAoYSA9IHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkpLndpdGguYXBwbHkoYSwgWWkoW3QsIHIsIG5dLCBCaShvKSwgITEpKTtcbiAgICB9LCBlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuYmluZCh0LCByKTtcbiAgICB9LCBlLnByb3RvdHlwZS5fZ2V0Q29udGV4dE1hbmFnZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBpdChEdCkgfHwgSmk7XG4gICAgfSwgZS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5kaXNhYmxlKCksIEt0KER0LCBFdC5pbnN0YW5jZSgpKTtcbiAgICB9LCBlO1xuICB9KClcbiksIHp0O1xuKGZ1bmN0aW9uKGUpIHtcbiAgZVtlLk5PTkUgPSAwXSA9IFwiTk9ORVwiLCBlW2UuU0FNUExFRCA9IDFdID0gXCJTQU1QTEVEXCI7XG59KSh6dCB8fCAoenQgPSB7fSkpO1xudmFyIGZuID0gXCIwMDAwMDAwMDAwMDAwMDAwXCIsIHluID0gXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLCBXaSA9IHtcbiAgdHJhY2VJZDogeW4sXG4gIHNwYW5JZDogZm4sXG4gIHRyYWNlRmxhZ3M6IHp0Lk5PTkVcbn0sIHR0ID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCkge1xuICAgICAgdCA9PT0gdm9pZCAwICYmICh0ID0gV2kpLCB0aGlzLl9zcGFuQ29udGV4dCA9IHQ7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5zcGFuQ29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NwYW5Db250ZXh0O1xuICAgIH0sIGUucHJvdG90eXBlLnNldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLnNldEF0dHJpYnV0ZXMgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5hZGRFdmVudCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLmFkZExpbmsgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5hZGRMaW5rcyA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLnNldFN0YXR1cyA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLnVwZGF0ZU5hbWUgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbih0KSB7XG4gICAgfSwgZS5wcm90b3R5cGUuaXNSZWNvcmRpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhMTtcbiAgICB9LCBlLnByb3RvdHlwZS5yZWNvcmRFeGNlcHRpb24gPSBmdW5jdGlvbih0LCByKSB7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBYdCA9ICRpKFwiT3BlblRlbGVtZXRyeSBDb250ZXh0IEtleSBTUEFOXCIpO1xuZnVuY3Rpb24gZXIoZSkge1xuICByZXR1cm4gZS5nZXRWYWx1ZShYdCkgfHwgdm9pZCAwO1xufVxuZnVuY3Rpb24gWmkoKSB7XG4gIHJldHVybiBlcihRdC5nZXRJbnN0YW5jZSgpLmFjdGl2ZSgpKTtcbn1cbmZ1bmN0aW9uIHRyKGUsIHQpIHtcbiAgcmV0dXJuIGUuc2V0VmFsdWUoWHQsIHQpO1xufVxuZnVuY3Rpb24gS2koZSkge1xuICByZXR1cm4gZS5kZWxldGVWYWx1ZShYdCk7XG59XG5mdW5jdGlvbiBRaShlLCB0KSB7XG4gIHJldHVybiB0cihlLCBuZXcgdHQodCkpO1xufVxuZnVuY3Rpb24gaG4oZSkge1xuICB2YXIgdDtcbiAgcmV0dXJuICh0ID0gZXIoZSkpID09PSBudWxsIHx8IHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHQuc3BhbkNvbnRleHQoKTtcbn1cbnZhciBYaSA9IC9eKFswLTlhLWZdezMyfSkkL2ksIGVzID0gL15bMC05YS1mXXsxNn0kL2k7XG5mdW5jdGlvbiB0cyhlKSB7XG4gIHJldHVybiBYaS50ZXN0KGUpICYmIGUgIT09IHluO1xufVxuZnVuY3Rpb24gcnMoZSkge1xuICByZXR1cm4gZXMudGVzdChlKSAmJiBlICE9PSBmbjtcbn1cbmZ1bmN0aW9uIGduKGUpIHtcbiAgcmV0dXJuIHRzKGUudHJhY2VJZCkgJiYgcnMoZS5zcGFuSWQpO1xufVxuZnVuY3Rpb24gbnMoZSkge1xuICByZXR1cm4gbmV3IHR0KGUpO1xufVxudmFyIHh0ID0gUXQuZ2V0SW5zdGFuY2UoKSwgd24gPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLnN0YXJ0U3BhbiA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIG4gPT09IHZvaWQgMCAmJiAobiA9IHh0LmFjdGl2ZSgpKTtcbiAgICAgIHZhciBhID0gISEociAhPSBudWxsICYmIHIucm9vdCk7XG4gICAgICBpZiAoYSlcbiAgICAgICAgcmV0dXJuIG5ldyB0dCgpO1xuICAgICAgdmFyIG8gPSBuICYmIGhuKG4pO1xuICAgICAgcmV0dXJuIG9zKG8pICYmIGduKG8pID8gbmV3IHR0KG8pIDogbmV3IHR0KCk7XG4gICAgfSwgZS5wcm90b3R5cGUuc3RhcnRBY3RpdmVTcGFuID0gZnVuY3Rpb24odCwgciwgbiwgYSkge1xuICAgICAgdmFyIG8sIHMsIGM7XG4gICAgICBpZiAoIShhcmd1bWVudHMubGVuZ3RoIDwgMikpIHtcbiAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMiA/IGMgPSByIDogYXJndW1lbnRzLmxlbmd0aCA9PT0gMyA/IChvID0gciwgYyA9IG4pIDogKG8gPSByLCBzID0gbiwgYyA9IGEpO1xuICAgICAgICB2YXIgbCA9IHMgPz8geHQuYWN0aXZlKCksIHUgPSB0aGlzLnN0YXJ0U3Bhbih0LCBvLCBsKSwgZCA9IHRyKGwsIHUpO1xuICAgICAgICByZXR1cm4geHQud2l0aChkLCBjLCB2b2lkIDAsIHUpO1xuICAgICAgfVxuICAgIH0sIGU7XG4gIH0oKVxuKTtcbmZ1bmN0aW9uIG9zKGUpIHtcbiAgcmV0dXJuIHR5cGVvZiBlID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIGUuc3BhbklkID09IFwic3RyaW5nXCIgJiYgdHlwZW9mIGUudHJhY2VJZCA9PSBcInN0cmluZ1wiICYmIHR5cGVvZiBlLnRyYWNlRmxhZ3MgPT0gXCJudW1iZXJcIjtcbn1cbnZhciBhcyA9IG5ldyB3bigpLCBpcyA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKHQsIHIsIG4sIGEpIHtcbiAgICAgIHRoaXMuX3Byb3ZpZGVyID0gdCwgdGhpcy5uYW1lID0gciwgdGhpcy52ZXJzaW9uID0gbiwgdGhpcy5vcHRpb25zID0gYTtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLnN0YXJ0U3BhbiA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRUcmFjZXIoKS5zdGFydFNwYW4odCwgciwgbik7XG4gICAgfSwgZS5wcm90b3R5cGUuc3RhcnRBY3RpdmVTcGFuID0gZnVuY3Rpb24odCwgciwgbiwgYSkge1xuICAgICAgdmFyIG8gPSB0aGlzLl9nZXRUcmFjZXIoKTtcbiAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KG8uc3RhcnRBY3RpdmVTcGFuLCBvLCBhcmd1bWVudHMpO1xuICAgIH0sIGUucHJvdG90eXBlLl9nZXRUcmFjZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLl9kZWxlZ2F0ZSlcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlO1xuICAgICAgdmFyIHQgPSB0aGlzLl9wcm92aWRlci5nZXREZWxlZ2F0ZVRyYWNlcih0aGlzLm5hbWUsIHRoaXMudmVyc2lvbiwgdGhpcy5vcHRpb25zKTtcbiAgICAgIHJldHVybiB0ID8gKHRoaXMuX2RlbGVnYXRlID0gdCwgdGhpcy5fZGVsZWdhdGUpIDogYXM7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBzcyA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuZ2V0VHJhY2VyID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgcmV0dXJuIG5ldyB3bigpO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgY3MgPSBuZXcgc3MoKSwgUHIgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLmdldFRyYWNlciA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIHZhciBhO1xuICAgICAgcmV0dXJuIChhID0gdGhpcy5nZXREZWxlZ2F0ZVRyYWNlcih0LCByLCBuKSkgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IG5ldyBpcyh0aGlzLCB0LCByLCBuKTtcbiAgICB9LCBlLnByb3RvdHlwZS5nZXREZWxlZ2F0ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQ7XG4gICAgICByZXR1cm4gKHQgPSB0aGlzLl9kZWxlZ2F0ZSkgIT09IG51bGwgJiYgdCAhPT0gdm9pZCAwID8gdCA6IGNzO1xuICAgIH0sIGUucHJvdG90eXBlLnNldERlbGVnYXRlID0gZnVuY3Rpb24odCkge1xuICAgICAgdGhpcy5fZGVsZWdhdGUgPSB0O1xuICAgIH0sIGUucHJvdG90eXBlLmdldERlbGVnYXRlVHJhY2VyID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgdmFyIGE7XG4gICAgICByZXR1cm4gKGEgPSB0aGlzLl9kZWxlZ2F0ZSkgPT09IG51bGwgfHwgYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogYS5nZXRUcmFjZXIodCwgciwgbik7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBzdDtcbihmdW5jdGlvbihlKSB7XG4gIGVbZS5JTlRFUk5BTCA9IDBdID0gXCJJTlRFUk5BTFwiLCBlW2UuU0VSVkVSID0gMV0gPSBcIlNFUlZFUlwiLCBlW2UuQ0xJRU5UID0gMl0gPSBcIkNMSUVOVFwiLCBlW2UuUFJPRFVDRVIgPSAzXSA9IFwiUFJPRFVDRVJcIiwgZVtlLkNPTlNVTUVSID0gNF0gPSBcIkNPTlNVTUVSXCI7XG59KShzdCB8fCAoc3QgPSB7fSkpO1xudmFyIEVlO1xuKGZ1bmN0aW9uKGUpIHtcbiAgZVtlLlVOU0VUID0gMF0gPSBcIlVOU0VUXCIsIGVbZS5PSyA9IDFdID0gXCJPS1wiLCBlW2UuRVJST1IgPSAyXSA9IFwiRVJST1JcIjtcbn0pKEVlIHx8IChFZSA9IHt9KSk7XG52YXIgeGUgPSBRdC5nZXRJbnN0YW5jZSgpLCBPdCA9IFwidHJhY2VcIiwgbHMgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICAgIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIgPSBuZXcgUHIoKSwgdGhpcy53cmFwU3BhbkNvbnRleHQgPSBucywgdGhpcy5pc1NwYW5Db250ZXh0VmFsaWQgPSBnbiwgdGhpcy5kZWxldGVTcGFuID0gS2ksIHRoaXMuZ2V0U3BhbiA9IGVyLCB0aGlzLmdldEFjdGl2ZVNwYW4gPSBaaSwgdGhpcy5nZXRTcGFuQ29udGV4dCA9IGhuLCB0aGlzLnNldFNwYW4gPSB0ciwgdGhpcy5zZXRTcGFuQ29udGV4dCA9IFFpO1xuICAgIH1cbiAgICByZXR1cm4gZS5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlIHx8ICh0aGlzLl9pbnN0YW5jZSA9IG5ldyBlKCkpLCB0aGlzLl9pbnN0YW5jZTtcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRHbG9iYWxUcmFjZXJQcm92aWRlciA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciByID0gWnQoT3QsIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIsIEV0Lmluc3RhbmNlKCkpO1xuICAgICAgcmV0dXJuIHIgJiYgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlci5zZXREZWxlZ2F0ZSh0KSwgcjtcbiAgICB9LCBlLnByb3RvdHlwZS5nZXRUcmFjZXJQcm92aWRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGl0KE90KSB8fCB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyO1xuICAgIH0sIGUucHJvdG90eXBlLmdldFRyYWNlciA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFRyYWNlclByb3ZpZGVyKCkuZ2V0VHJhY2VyKHQsIHIpO1xuICAgIH0sIGUucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIEt0KE90LCBFdC5pbnN0YW5jZSgpKSwgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlciA9IG5ldyBQcigpO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgamUgPSBscy5nZXRJbnN0YW5jZSgpO1xuY29uc3QgdXMgPSBhc3luYyAoZSwgdCwgcikgPT4ge1xuICBjb25zdCBuID0gamUuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKSwgYSA9IHhlLmFjdGl2ZSgpLCBvID0gbi5zdGFydFNwYW4oXG4gICAgYGNkZS4ke3QudHlwZX1gLFxuICAgIHtcbiAgICAgIGtpbmQ6IHN0LkNMSUVOVCxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgXCJtZXNzYWdlLnR5cGVcIjogdC50eXBlLFxuICAgICAgICAuLi5lLnRyYWNpbmdDb250ZXh0ICYmIHtcbiAgICAgICAgICBcIm9qcy5jaGVja291dFNlY3VyZVRva2VuXCI6IGUudHJhY2luZ0NvbnRleHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiBlLnRyYWNpbmdDb250ZXh0LmRldmljZVRva2VuLFxuICAgICAgICAgIFwib2pzLmZvcm1JZFwiOiBlLnRyYWNpbmdDb250ZXh0LmZvcm1JZCxcbiAgICAgICAgICBcIm9qcy52ZXJzaW9uXCI6IGUudHJhY2luZ0NvbnRleHQudmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogZS50cmFjaW5nQ29udGV4dC5yZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5iYXNlX3VybFwiOiBlLnRyYWNpbmdDb250ZXh0LmJhc2VVcmwsXG4gICAgICAgICAgXCJvanMucmVmZXJyZXJcIjogZS50cmFjaW5nQ29udGV4dC5yZWZlcnJlclxuICAgICAgICB9LFxuICAgICAgICBcImNkZS5tZXNzYWdlLnR5cGVcIjogdC50eXBlLFxuICAgICAgICBcImNkZS5tZXNzYWdlLnBheWxvYWRcIjogSlNPTi5zdHJpbmdpZnkodC5wYXlsb2FkKVxuICAgICAgfVxuICAgIH0sXG4gICAgYVxuICApO1xuICByZXR1cm4geGUud2l0aChqZS5zZXRTcGFuKGEsIG8pLCBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHMgPSBhd2FpdCByKCk7XG4gICAgICByZXR1cm4gby5zZXRTdGF0dXMoeyBjb2RlOiBFZS5PSyB9KSwgcztcbiAgICB9IGNhdGNoIChzKSB7XG4gICAgICB0aHJvdyBvLnNldFN0YXR1cyh7XG4gICAgICAgIGNvZGU6IEVlLkVSUk9SLFxuICAgICAgICBtZXNzYWdlOiBzIGluc3RhbmNlb2YgRXJyb3IgPyBzLm1lc3NhZ2UgOiBcIlVua25vd24gZXJyb3JcIlxuICAgICAgfSksIHM7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIG8uZW5kKCk7XG4gICAgfVxuICB9KTtcbn0sIG10ID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IGplLmdldFRyYWNlcihcIm9wZW5wYXktanNcIiksIG4gPSB4ZS5hY3RpdmUoKSwgYSA9IHIuc3RhcnRTcGFuKFxuICAgIGBmb3JtLiR7ZS5zcGFuTmFtZX1gLFxuICAgIHtcbiAgICAgIGtpbmQ6IHN0LkNMSUVOVCxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiBlLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgIFwib2pzLmRldmljZVRva2VuXCI6IGUuZGV2aWNlVG9rZW4sXG4gICAgICAgIFwib2pzLmZvcm1JZFwiOiBlLmZvcm1JZCxcbiAgICAgICAgXCJvanMudmVyc2lvblwiOiBlLnZlcnNpb24sXG4gICAgICAgIFwib2pzLnJlbGVhc2VfdmVyc2lvblwiOiBlLnJlbGVhc2VWZXJzaW9uLFxuICAgICAgICBcIm9qcy5iYXNlX3VybFwiOiBlLmJhc2VVcmwsXG4gICAgICAgIFwib2pzLnJlZmVycmVyXCI6IGUucmVmZXJyZXIsXG4gICAgICAgIC4uLmUucGF5bWVudFJvdXRlSWQgJiYgeyBcInBheW1lbnQucm91dGVfaWRcIjogZS5wYXltZW50Um91dGVJZCB9XG4gICAgICB9XG4gICAgfSxcbiAgICBuXG4gICk7XG4gIHRyeSB7XG4gICAgY29uc3QgbyA9IGF3YWl0IHQoKTtcbiAgICByZXR1cm4gYS5zZXRTdGF0dXMoeyBjb2RlOiBFZS5PSyB9KSwgbztcbiAgfSBjYXRjaCAobykge1xuICAgIGNvbnN0IHMgPSBvIGluc3RhbmNlb2YgRXJyb3IgPyBvLm1lc3NhZ2UgOiBcIlVua25vd24gZXJyb3JcIjtcbiAgICB0aHJvdyBhLnNldFN0YXR1cyh7XG4gICAgICBjb2RlOiBFZS5FUlJPUixcbiAgICAgIG1lc3NhZ2U6IHNcbiAgICB9KSwgbztcbiAgfSBmaW5hbGx5IHtcbiAgICBhLmVuZCgpO1xuICB9XG59O1xuY2xhc3Mgdm4gZXh0ZW5kcyBsbyB7XG4gIGNvbnN0cnVjdG9yKHQpIHtcbiAgICBjb25zdCByID0gYCR7dC5tZXNzYWdlfWA7XG4gICAgc3VwZXIociksIHRoaXMucmVzcG9uc2UgPSB0O1xuICB9XG4gIGdldCBvcmlnaW5hbEVycm9yTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNwb25zZS5tZXNzYWdlO1xuICB9XG59XG5jb25zdCBCID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHVzKGUsIHQsIGFzeW5jICgpID0+IHtcbiAgbiAmJiBnKG4sIHtcbiAgICAuLi50XG4gIH0pO1xuICBjb25zdCBhID0gYXdhaXQgZS5zZW5kKHQpO1xuICBpZiAocHMoYSkpXG4gICAgdGhyb3cgZyhcImNkZV9yZXNwb25zZV9lcnJvclwiLCB7XG4gICAgICAuLi5hXG4gICAgfSksIG5ldyB2bihhKTtcbiAgaWYgKCFkcyhhLCByKSkge1xuICAgIGNvbnN0IG8gPSByLnNhZmVQYXJzZShhKTtcbiAgICB0aHJvdyBvLnN1Y2Nlc3MgPyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlXCIpIDogKGNvbnNvbGUuZXJyb3IoXCJPSlMgcXVlcnlBcGkgZ290IGEgc2NoZW1hIGVycm9yLiBFeHBlY3RlZCBzY2hlbWE6XCIsIHIsIFwiQWN0dWFsOlwiLCBhKSwgby5lcnJvcik7XG4gIH1cbiAgcmV0dXJuIG4gJiYgZyhuLCB7XG4gICAgLi4uYVxuICB9KSwgYTtcbn0pLCBkcyA9IChlLCB0KSA9PiB0LnNhZmVQYXJzZShlKS5zdWNjZXNzLCBwcyA9IChlKSA9PiBxby5zYWZlUGFyc2UoZSkuc3VjY2VzcywgX3MgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgQihlLCB7IHR5cGU6IFwiZ2V0X2NoZWNrb3V0X3ByZXZpZXdcIiwgcGF5bG9hZDogdCB9LCBLciksIE0gPSBhc3luYyAoZSkgPT4gYXdhaXQgQihlLCB7IHR5cGU6IFwiZ2V0X3ByZWZpbGxcIiwgcGF5bG9hZDoge30gfSwgUXIpLCBuZSA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBCKFxuICBlLFxuICB7IHR5cGU6IFwidjJfc3RhcnRfcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IHQgfSxcbiAgdG4sXG4gIFwic3RhcnRfcGF5bWVudF9mbG93XCJcbiksIGJuID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IEIoXG4gIGUsXG4gIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCIsIHBheWxvYWQ6IHQgfSxcbiAgbmEsXG4gIFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiXG4pLCBtcyA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGcoXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByXCIsIHtcbiAgICAuLi50XG4gIH0pO1xuICBjb25zdCByID0gYXdhaXQgQihlLCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCBwYXlsb2FkOiB0IH0sIHRuKTtcbiAgcmV0dXJuIGcoXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByX3Jlc3VsdFwiLCB7XG4gICAgLi4uclxuICB9KSwgcjtcbn0sIEwgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgQihcbiAgZSxcbiAgeyB0eXBlOiBcImNvbmZpcm1fcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IHQgfSxcbiAgam8sXG4gIFwiY29uZmlybV9wYXltZW50X2Zsb3dcIlxuKSwgZnMgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgQihcbiAgZSxcbiAgeyB0eXBlOiBcImZpbmFsaXplX3NldHVwX3BheW1lbnRfbWV0aG9kXCIsIHBheWxvYWQ6IHQgfSxcbiAgWHIsXG4gIFwiZmluYWxpemVfc2V0dXBfcGF5bWVudF9tZXRob2RcIlxuKSwgeXMgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgQihcbiAgZSxcbiAgeyB0eXBlOiBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiLCBwYXlsb2FkOiB0IH0sXG4gIFVvLFxuICBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiXG4pLCBocyA9IGFzeW5jIChlLCB0LCByKSA9PiB7XG4gIGNvbnN0IG4gPSBhd2FpdCBfcyhlLCB7XG4gICAgc2VjdXJlX3Rva2VuOiB0LFxuICAgIHByb21vdGlvbl9jb2RlOiByXG4gIH0pLCBhID0gbmV3IFNldChuLnByZXZpZXcuaW52b2ljZXMubWFwKChjKSA9PiBjLmN1cnJlbmN5KSk7XG4gIGlmIChhLnNpemUgIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBjdXJyZW5jeSwgZ290ICR7YS5zaXplfWApO1xuICBjb25zdCBvID0gYS52YWx1ZXMoKS5uZXh0KCkudmFsdWUgPz8gXCJ1c2RcIiwgcyA9IGhhKG4ucHJldmlldy5pbnZvaWNlcy5tYXAoKGMpID0+IGMucmVtYWluaW5nX2Ftb3VudF9hdG9tKSk7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3k6IG8sXG4gICAgYW1vdW50QXRvbTogc1xuICB9O1xufSwgdmUgPSBhc3luYyAoZSwgdCwgciwgbikgPT4ge1xuICBpZiAocilcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiAwLCBjdXJyZW5jeTogXCJ1c2RcIiB9O1xuICB7XG4gICAgbiA9IG4gfHwgdm9pZCAwLCBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwicHJvbW9Db2RlXCIpICYmICFuICYmIChuID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInByb21vQ29kZVwiKSk7XG4gICAgY29uc3QgYSA9IGF3YWl0IGhzKGUsIHQsIG4pO1xuICAgIHJldHVybiB7IGFtb3VudEF0b206IGEuYW1vdW50QXRvbSwgY3VycmVuY3k6IGEuY3VycmVuY3kgfTtcbiAgfVxufSwgRW4gPSBhc3luYyAoZSwgdCkgPT4ge1xuICBpZiAoZS5zaXplID09PSAwKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIENERSBjb25uZWN0aW9ucyBmb3VuZFwiKTtcbiAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIEFycmF5LmZyb20oZS52YWx1ZXMoKSkubWFwKFxuICAgICAgKG4pID0+IEIobiwgeyB0eXBlOiBcInRva2VuaXplX2NhcmRcIiwgcGF5bG9hZDogdCB9LCBMbylcbiAgICApXG4gICk7XG59LCBTciA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBCKFxuICBlLFxuICB7IHR5cGU6IFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiLCBwYXlsb2FkOiB0IH0sXG4gIG50LFxuICBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIlxuKSwgZ3MgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgQihlLCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZDogdCB9LCBYciwgXCJzZXR1cF9jaGVja291dFwiKSwgcnIgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgQihlLCB7IHR5cGU6IFwiY2hlY2tvdXRcIiwgcGF5bG9hZDogdCB9LCBudCwgXCJwZXJmb3JtX2NoZWNrb3V0XCIpLCBQbiA9IDFlMywgd3MgPSBhc3luYyAoZSwgdCwgciwgbikgPT4ge1xuICBjb25zb2xlLmxvZyh0KTtcbiAgY29uc3QgbyA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IGUsXG4gICAgZGVidWc6ICEwLFxuICAgIHRpbWVvdXQ6IFBuLFxuICAgIGNoaWxkT3JpZ2luOiBcIipcIlxuICAgIC8vIFRPRE86IHVzZSB3aXRoIHByb3BlciBjaGlsZE9yaWdpblxuICB9KS5wcm9taXNlLCBzID0gYXdhaXQgQihvLCB7IHR5cGU6IHIgfSwgbik7XG4gIHJldHVybiBjb25zb2xlLmxvZyhcIvCfn6IgQ0RFIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCEgU3RvcHBpbmcgcG9sbGluZy4uLiBSZXN1bHQ6XCIsIHMpLCBzO1xufSwgUnQgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgQihcbiAgZSxcbiAgeyB0eXBlOiBcInByZXBhcmVfcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IHQgfSxcbiAgYWEsXG4gIFwicHJlcGFyZV9wYXltZW50X2Zsb3dcIlxuKSwgU24gPSBhc3luYyAoZSwgdCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiAoYXdhaXQgQihcbiAgICAgIGUsXG4gICAgICB7IHR5cGU6IFwiZ2V0X3N0YW5kYXJkaXplZF9lcnJvcl9jb2RlXCIsIHBheWxvYWQ6IHsgbWVzc2FnZTogdCB9IH0sXG4gICAgICBvYVxuICAgICkpLmVycm9yX2NvZGU7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgZ2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlOlwiLCBlZShyKSksIFwiUEFZTUVOVF9GQUlMRURfR0VORVJJQ1wiO1xuICB9XG59LCB2cyA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBCKFxuICBlLFxuICB7IHR5cGU6IFwic2V0X3VzZXJfZGV2aWNlX3Rva2VuXCIsIHBheWxvYWQ6IHsgZGV2aWNlX3Rva2VuOiB0IH0gfSxcbiAgaWFcbiksIGJzID0gYXN5bmMgKGUpID0+IHtcbiAgaWYgKHR5cGVvZiBlICE9IFwib2JqZWN0XCIgfHwgIWUpIHJldHVybiAhMTtcbiAgdHJ5IHtcbiAgICBjb25zdCB0ID0geyB0eXBlOiBcInBpbmdcIiB9LCByID0gYXdhaXQgZS5zZW5kKHQpO1xuICAgIGlmIChyICE9PSAhMClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJ3RydWUnIGFmdGVyIHBpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KHIpfWApO1xuICAgIHJldHVybiAhMDtcbiAgfSBjYXRjaCAodCkge1xuICAgIHJldHVybiBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBDREUgY29ubmVjdGlvbiBjaGVjazpcIiwgdCksICExO1xuICB9XG59LCBFcyA9IChlLCB0KSA9PiAhIWUgJiYgdCwgQ24gPSBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCIsIGtuID0gXCIwMTIzNDU2Nzg5QUJDREVGR0hKS01OUFFSU1RWV1hZWlwiLCBydCA9IDMyLCBQcyA9IDE2LCBBbiA9IDEwLCBDciA9IDI4MTQ3NDk3NjcxMDY1NTtcbnZhciBSZTtcbihmdW5jdGlvbihlKSB7XG4gIGUuQmFzZTMySW5jb3JyZWN0RW5jb2RpbmcgPSBcIkIzMl9FTkNfSU5WQUxJRFwiLCBlLkRlY29kZVRpbWVJbnZhbGlkQ2hhcmFjdGVyID0gXCJERUNfVElNRV9DSEFSXCIsIGUuRGVjb2RlVGltZVZhbHVlTWFsZm9ybWVkID0gXCJERUNfVElNRV9NQUxGT1JNRURcIiwgZS5FbmNvZGVUaW1lTmVnYXRpdmUgPSBcIkVOQ19USU1FX05FR1wiLCBlLkVuY29kZVRpbWVTaXplRXhjZWVkZWQgPSBcIkVOQ19USU1FX1NJWkVfRVhDRUVEXCIsIGUuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkID0gXCJFTkNfVElNRV9NQUxGT1JNRURcIiwgZS5QUk5HRGV0ZWN0RmFpbHVyZSA9IFwiUFJOR19ERVRFQ1RcIiwgZS5VTElESW52YWxpZCA9IFwiVUxJRF9JTlZBTElEXCIsIGUuVW5leHBlY3RlZCA9IFwiVU5FWFBFQ1RFRFwiLCBlLlVVSURJbnZhbGlkID0gXCJVVUlEX0lOVkFMSURcIjtcbn0pKFJlIHx8IChSZSA9IHt9KSk7XG5jbGFzcyBaZSBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IodCwgcikge1xuICAgIHN1cGVyKGAke3J9ICgke3R9KWApLCB0aGlzLm5hbWUgPSBcIlVMSURFcnJvclwiLCB0aGlzLmNvZGUgPSB0O1xuICB9XG59XG5mdW5jdGlvbiBTcyhlKSB7XG4gIGxldCB0ID0gTWF0aC5mbG9vcihlKCkgKiBydCk7XG4gIHJldHVybiB0ID09PSBydCAmJiAodCA9IHJ0IC0gMSksIGtuLmNoYXJBdCh0KTtcbn1cbmZ1bmN0aW9uIENzKGUpIHtcbiAgY29uc3QgdCA9IGtzKCksIHIgPSB0ICYmICh0LmNyeXB0byB8fCB0Lm1zQ3J5cHRvKSB8fCBudWxsO1xuICBpZiAodHlwZW9mIChyID09IG51bGwgPyB2b2lkIDAgOiByLmdldFJhbmRvbVZhbHVlcykgPT0gXCJmdW5jdGlvblwiKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjb25zdCBuID0gbmV3IFVpbnQ4QXJyYXkoMSk7XG4gICAgICByZXR1cm4gci5nZXRSYW5kb21WYWx1ZXMobiksIG5bMF0gLyAyNTU7XG4gICAgfTtcbiAgaWYgKHR5cGVvZiAociA9PSBudWxsID8gdm9pZCAwIDogci5yYW5kb21CeXRlcykgPT0gXCJmdW5jdGlvblwiKVxuICAgIHJldHVybiAoKSA9PiByLnJhbmRvbUJ5dGVzKDEpLnJlYWRVSW50OCgpIC8gMjU1O1xuICB0aHJvdyBuZXcgWmUoUmUuUFJOR0RldGVjdEZhaWx1cmUsIFwiRmFpbGVkIHRvIGZpbmQgYSByZWxpYWJsZSBQUk5HXCIpO1xufVxuZnVuY3Rpb24ga3MoKSB7XG4gIHJldHVybiBUcygpID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgPCBcInVcIiA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgPCBcInVcIiA/IGdsb2JhbCA6IHR5cGVvZiBnbG9iYWxUaGlzIDwgXCJ1XCIgPyBnbG9iYWxUaGlzIDogbnVsbDtcbn1cbmZ1bmN0aW9uIEFzKGUsIHQpIHtcbiAgbGV0IHIgPSBcIlwiO1xuICBmb3IgKDsgZSA+IDA7IGUtLSlcbiAgICByID0gU3ModCkgKyByO1xuICByZXR1cm4gcjtcbn1cbmZ1bmN0aW9uIElzKGUsIHQgPSBBbikge1xuICBpZiAoaXNOYU4oZSkpXG4gICAgdGhyb3cgbmV3IFplKFJlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCwgYFRpbWUgbXVzdCBiZSBhIG51bWJlcjogJHtlfWApO1xuICBpZiAoZSA+IENyKVxuICAgIHRocm93IG5ldyBaZShSZS5FbmNvZGVUaW1lU2l6ZUV4Y2VlZGVkLCBgQ2Fubm90IGVuY29kZSBhIHRpbWUgbGFyZ2VyIHRoYW4gJHtDcn06ICR7ZX1gKTtcbiAgaWYgKGUgPCAwKVxuICAgIHRocm93IG5ldyBaZShSZS5FbmNvZGVUaW1lTmVnYXRpdmUsIGBUaW1lIG11c3QgYmUgcG9zaXRpdmU6ICR7ZX1gKTtcbiAgaWYgKE51bWJlci5pc0ludGVnZXIoZSkgPT09ICExKVxuICAgIHRocm93IG5ldyBaZShSZS5FbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWQsIGBUaW1lIG11c3QgYmUgYW4gaW50ZWdlcjogJHtlfWApO1xuICBsZXQgciwgbiA9IFwiXCI7XG4gIGZvciAobGV0IGEgPSB0OyBhID4gMDsgYS0tKVxuICAgIHIgPSBlICUgcnQsIG4gPSBrbi5jaGFyQXQocikgKyBuLCBlID0gKGUgLSByKSAvIHJ0O1xuICByZXR1cm4gbjtcbn1cbmZ1bmN0aW9uIFRzKCkge1xuICByZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlIDwgXCJ1XCIgJiYgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlO1xufVxuZnVuY3Rpb24gUnMoZSwgdCkge1xuICBjb25zdCByID0gQ3MoKSwgbiA9IERhdGUubm93KCk7XG4gIHJldHVybiBJcyhuLCBBbikgKyBBcyhQcywgcik7XG59XG5jb25zdCBJbiA9IFwib3BfYW5hbHl0aWNzX2RldmljZV90b2tlblwiLCBUbiA9ICgpID0+IHtcbiAgY29uc3QgZSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdChcIjtcIikuZmluZCgocikgPT4gci5pbmNsdWRlcyhJbikpO1xuICBpZiAoZSlcbiAgICByZXR1cm4gZS5zcGxpdChcIj1cIilbMV07XG4gIGNvbnN0IHQgPSBScygpO1xuICByZXR1cm4gTnModCksIHQ7XG59LCBOcyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTtcbiAgdC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkgKyAxKSwgZG9jdW1lbnQuY29va2llID0gYCR7SW59PSR7ZX07IHBhdGg9LzsgZXhwaXJlcz0ke3QudG9VVENTdHJpbmcoKX1gO1xufSwgRnMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0ge307XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhlKS5mb3JFYWNoKChbciwgbl0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYSA9IHFyLnBhcnNlKHIpO1xuICAgICAgQXJyYXkuaXNBcnJheShuKSA/IHRbYV0gPSBuIDogQXJyYXkuaXNBcnJheShuLl9lcnJvcnMpICYmICh0W2FdID0gbi5fZXJyb3JzKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pLCB0O1xufSwgaiA9IChlLCB0KSA9PiBBcnJheS5mcm9tKGUucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLW9waWRdXCIpID8/IFtdKS5yZWR1Y2UoKGEsIG8pID0+IHtcbiAgY29uc3QgcyA9IG8uZ2V0QXR0cmlidXRlKFwiZGF0YS1vcGlkXCIpO1xuICBpZiAoIXMpIHJldHVybiBhO1xuICBjb25zdCBjID0gby50eXBlID09PSBcImNoZWNrYm94XCIgPyBvLmNoZWNrZWQgOiBvLnZhbHVlO1xuICByZXR1cm4geyAuLi5hLCBbc106IGMgfTtcbn0sIHt9KSwgTXMgPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBOby5wYXJzZShlKTtcbiAgfSBjYXRjaCAodCkge1xuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGV2ZW50IHBheWxvYWQ6XCIsIGUsIHQpLCB0O1xuICB9XG59LCBMcyA9ICgpID0+IHtcbiAgY29uc3QgZSA9IHY0KCkuc3BsaXQoXCItXCIpWzBdO1xuICByZXR1cm4ge1xuICAgIGZpcnN0TmFtZTogYHh4XyR7ZX1gLFxuICAgIGxhc3ROYW1lOiBgeHhfJHtlfWAsXG4gICAgZW1haWw6IGB4eF8ke2V9QGVtYWlsLmNvbWAsXG4gICAgemlwQ29kZTogYHh4XyR7ZX1gLFxuICAgIGNvdW50cnk6IFwiVVNcIlxuICB9O1xufSwgWiA9IChlKSA9PiAoe1xuICBsaW5lMTogZVtwLkxJTkUxXSxcbiAgbGluZTI6IGVbcC5MSU5FMl0sXG4gIGxpbmUzOiBlW3AuTElORTNdLFxuICBjaXR5OiBlW3AuQ0lUWV0sXG4gIHN0YXRlOiBlW3AuU1RBVEVdLFxuICBjb3VudHJ5OiBlW3AuQ09VTlRSWV0sXG4gIHppcF9jb2RlOiBlW3AuWklQX0NPREVdXG59KSwgSyA9IChlLCB0KSA9PiB7XG4gIGlmICh0LnJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzKVxuICAgIHJldHVybiB7XG4gICAgICBsaW5lMTogZVtwLlNISVBQSU5HX0xJTkUxXSxcbiAgICAgIGxpbmUyOiBlW3AuU0hJUFBJTkdfTElORTJdLFxuICAgICAgbGluZTM6IGVbcC5TSElQUElOR19MSU5FM10sXG4gICAgICBjaXR5OiBlW3AuU0hJUFBJTkdfQ0lUWV0sXG4gICAgICBzdGF0ZTogZVtwLlNISVBQSU5HX1NUQVRFXSxcbiAgICAgIGNvdW50cnk6IGVbcC5TSElQUElOR19DT1VOVFJZXSxcbiAgICAgIHppcF9jb2RlOiBlW3AuU0hJUFBJTkdfWklQX0NPREVdXG4gICAgfTtcbn0sIE50ID0gKGUsIHQpID0+IFtlLCB0XS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIiksIERzID0gKHsgd2lkdGg6IGUsIGhlaWdodDogdCB9KSA9PiBgXG5Aa2V5ZnJhbWVzIGZhZGVJbiB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbn1cblxuLm92ZXJsYXkge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgei1pbmRleDogMjE0NzQ4MzY0OCAhaW1wb3J0YW50O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xufVxuLmNvbnRhaW5lciB7XG4gIG1heC13aWR0aDogJHtlID8/IFwiNTAwcHhcIn07XG4gIG1heC1oZWlnaHQ6ICR7dCA/PyBcIjYwMHB4XCJ9O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBhbmltYXRpb246IGZhZGVJbiAwLjNzIGVhc2Utb3V0O1xufVxuLmZyYW1lLCAjYWR5ZW4tY29udGFpbmVyLCAjYWR5ZW4tY29udGFpbmVyID4gKiB7XG4gIG1heC13aWR0aDogJHtlID8/IFwiNTAwcHhcIn07XG4gIG1heC1oZWlnaHQ6ICR7dCA/PyBcIjYwMHB4XCJ9O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBib3JkZXI6IG5vbmU7XG59XG4uY2FuY2VsLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBjb2xvcjogI2ZmZjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0b3A6IC0xLjVyZW07XG4gIHBhZGRpbmc6IDA7XG4gIHJpZ2h0OiAwO1xufVxuYCwgeHMgPSAoeyB3aWR0aDogZSwgaGVpZ2h0OiB0IH0pID0+IGBcbkBrZXlmcmFtZXMgZmFkZUluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOSk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgfVxufVxuXG4ub3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB6LWluZGV4OiAyMTQ3NDgzNjQ4ICFpbXBvcnRhbnQ7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XG59XG4uY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiAke2UgPz8gXCI1MDBweFwifTtcbiAgbWF4LWhlaWdodDogJHt0ID8/IFwiNjAwcHhcIn07XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBhbmltYXRpb246IGZhZGVJbiAwLjNzIGVhc2Utb3V0O1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGJveC1zaGFkb3c6IDAgMTBweCAyNXB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cbi5iYW5rLXNlbGVjdG9yLWNvbnRlbnQge1xuICBwYWRkaW5nOiAyNHB4O1xuICBtYXgtaGVpZ2h0OiBjYWxjKCR7dCA/PyBcIjYwMHB4XCJ9IC0gNDhweCk7XG4gIG92ZXJmbG93LXk6IGF1dG87XG59XG4uYmFuay1zZWxlY3Rvci1oZWFkZXIge1xuICBmb250LXNpemU6IDEuMjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGNvbG9yOiAjMWExYTFhO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4uYmFuay1saXN0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiAxMnB4O1xufVxuLmJhbmstaXRlbSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDE2cHg7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNlNWU1ZTU7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xufVxuLmJhbmstaXRlbTpob3ZlciB7XG4gIGJvcmRlci1jb2xvcjogIzNiODJmNjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZmFmYztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpO1xuICBib3gtc2hhZG93OiAwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cbi5iYW5rLWl0ZW06YWN0aXZlIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xufVxuLmJhbmstbG9nbyB7XG4gIHdpZHRoOiA0MHB4O1xuICBoZWlnaHQ6IDQwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgb2JqZWN0LWZpdDogY29udGFpbjtcbiAgbWFyZ2luLXJpZ2h0OiAxNnB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOWZhO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTllY2VmO1xufVxuLmJhbmstbG9nby1wbGFjZWhvbGRlciB7XG4gIHdpZHRoOiA0MHB4O1xuICBoZWlnaHQ6IDQwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U5ZWNlZjtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG1hcmdpbi1yaWdodDogMTZweDtcbiAgY29sb3I6ICM2Yzc1N2Q7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG4uYmFuay1pbmZvIHtcbiAgZmxleDogMTtcbn1cbi5iYW5rLWRpc3BsYXktbmFtZSB7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6ICMxYTFhMWE7XG4gIG1hcmdpbi1ib3R0b206IDJweDtcbn1cbi5iYW5rLW5hbWUge1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICBjb2xvcjogIzZjNzU3ZDtcbn1cbi5jYW5jZWwtYnV0dG9uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiBub25lO1xuICBmb250LXNpemU6IDFyZW07XG4gIGNvbG9yOiAjZmZmO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRvcDogLTEuNXJlbTtcbiAgcGFkZGluZzogMDtcbiAgcmlnaHQ6IDA7XG59XG5gLCBSbiA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHsgaWQ6IHIsIHRpdGxlOiBuLCB3aWR0aDogYSwgaGVpZ2h0OiBvIH0gPSB0ID8/IHt9LCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICBzLmlubmVySFRNTCA9IGBcbiAgICA8c3R5bGU+XG4gICAgICAke0RzKHsgd2lkdGg6IGEsIGhlaWdodDogbyB9KX1cbiAgICA8L3N0eWxlPlxuICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDxpZnJhbWUgc3JjPVwiJHtlfVwiIGNsYXNzPVwiZnJhbWVcIiBpZD1cIiR7ciA/PyBcInRocmVlLWRzLWlmcmFtZVwifVwiIHRpdGxlPVwiJHtuID8/IFwiM0QgU2VjdXJlIHZlcmlmaWNhdGlvblwifVwiIGFsbG93PVwicGF5bWVudFwiPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG4gIGNvbnN0IGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLCBsID0gYy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgbC5hcHBlbmRDaGlsZChzLmNvbnRlbnQuY2xvbmVOb2RlKCEwKSk7XG4gIGNvbnN0IHUgPSBsLnF1ZXJ5U2VsZWN0b3IoXCIjdGhyZWUtZHMtaWZyYW1lXCIpLCBkID0gbC5xdWVyeVNlbGVjdG9yKFwiLmNhbmNlbC1idXR0b25cIik7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGMpLCB7IGhvc3Q6IGMsIGlmcmFtZTogdSwgY2FuY2VsQnV0dG9uOiBkIH07XG59LCBObiA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHsgd2lkdGg6IHIsIGhlaWdodDogbiwgdGl0bGU6IGEgfSA9IHQgPz8ge307XG4gIHJldHVybiBuZXcgUHJvbWlzZSgobywgcykgPT4ge1xuICAgIGNvbnN0IGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIiksIGwgPSBlLm1hcCgoeSwgaCkgPT4ge1xuICAgICAgY29uc3QgYiA9IHkucmVzb3VyY2VzLmxvZ29fdXJsID8gYDxpbWcgc3JjPVwiJHt5LnJlc291cmNlcy5sb2dvX3VybH1cIiBhbHQ9XCIke3kuZGlzcGxheV9uYW1lfVwiIGNsYXNzPVwiYmFuay1sb2dvXCIgLz5gIDogYDxkaXYgY2xhc3M9XCJiYW5rLWxvZ28tcGxhY2Vob2xkZXJcIj4ke3kuZGlzcGxheV9uYW1lLnN1YnN0cmluZygwLCAyKS50b1VwcGVyQ2FzZSgpfTwvZGl2PmA7XG4gICAgICByZXR1cm4gYFxuICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1pdGVtXCIgZGF0YS1iYW5rLWluZGV4PVwiJHtofVwiPlxuICAgICAgICAgICR7Yn1cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1pbmZvXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1kaXNwbGF5LW5hbWVcIj4ke3kuZGlzcGxheV9uYW1lfTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstbmFtZVwiPiR7eS5iYW5rX25hbWV9PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgYDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICAgIGMuaW5uZXJIVE1MID0gYFxuICAgICAgPHN0eWxlPlxuICAgICAgICAke3hzKHsgd2lkdGg6IHIsIGhlaWdodDogbiB9KX1cbiAgICAgIDwvc3R5bGU+XG4gICAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1zZWxlY3Rvci1jb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1zZWxlY3Rvci1oZWFkZXJcIj4ke2EgPz8gXCJTZWxlY3QgeW91ciBiYW5rXCJ9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1saXN0XCI+XG4gICAgICAgICAgICAgICR7bH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gICAgY29uc3QgdSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIGQgPSB1LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICAgIGQuYXBwZW5kQ2hpbGQoYy5jb250ZW50LmNsb25lTm9kZSghMCkpO1xuICAgIGNvbnN0IGYgPSBkLnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKSwgXyA9IGQucXVlcnlTZWxlY3RvckFsbChcIi5iYW5rLWl0ZW1cIiksIG0gPSAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHUpO1xuICAgIH07XG4gICAgZi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgbSgpLCBzKG5ldyBFcnJvcihcIkJhbmsgc2VsZWN0aW9uIGNhbmNlbGxlZFwiKSk7XG4gICAgfSksIF8uZm9yRWFjaCgoeSwgaCkgPT4ge1xuICAgICAgeS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICBtKCksIG8oZVtoXSk7XG4gICAgICB9KTtcbiAgICB9KSwgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh1KTtcbiAgfSk7XG59O1xuZnVuY3Rpb24gT3MoZSwgdCwgciwgbiwgYSkge1xuICBjb25zdCBvID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjID0gYXdhaXQgd3MoZSwgciwgbiwgYSk7XG4gICAgICBjICYmIChjbGVhckludGVydmFsKHMpLCB0KGMpKTtcbiAgICB9IGNhdGNoIHtcbiAgICB9XG4gIH07XG4gIG8oKTtcbiAgY29uc3QgcyA9IHNldEludGVydmFsKG8sIFBuKTtcbiAgcmV0dXJuIHM7XG59XG5mdW5jdGlvbiBVcyh7XG4gIGVsZW1lbnRzOiBlLFxuICBwb2xsaW5nSW50ZXJ2YWw6IHQsXG4gIHJlc29sdmU6IHJcbn0pIHtcbiAgY29uc3QgbiA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHQpLCBlLmhvc3QucmVtb3ZlKCksIHIoeyBzdGF0dXM6IEYuQ0FOQ0VMTEVEIH0pO1xuICB9O1xuICByZXR1cm4gZS5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pLCAoKSA9PiB7XG4gICAgZS5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pO1xuICB9O1xufVxuYXN5bmMgZnVuY3Rpb24gYmUoZSkge1xuICBjb25zdCB7IHVybDogdCwgYmFzZVVybDogciwgZnJhbWVXaWR0aDogbiwgZnJhbWVIZWlnaHQ6IGEsIGZyYW1lVGl0bGU6IG8gfSA9IGUsIHMgPSBSbih0LCB7IHdpZHRoOiBuLCBoZWlnaHQ6IGEsIHRpdGxlOiBvIH0pO1xuICByZXR1cm4gbmV3IFByb21pc2UoKGMpID0+IHtcbiAgICBjb25zdCBsID0gKGYpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzLmhvc3QucmVtb3ZlKCk7XG4gICAgICB9LCAxZTMpLCBjKGYpLCBkID09IG51bGwgfHwgZCgpO1xuICAgIH0sIHUgPSBPcyhcbiAgICAgIHMuaWZyYW1lLFxuICAgICAgbCxcbiAgICAgIG5ldyBVUkwocikub3JpZ2luLFxuICAgICAgXCJwaW5nLTNkcy1zdGF0dXNcIixcbiAgICAgIERvXG4gICAgKSwgZCA9IFVzKHtcbiAgICAgIGVsZW1lbnRzOiBzLFxuICAgICAgcG9sbGluZ0ludGVydmFsOiB1LFxuICAgICAgcmVzb2x2ZTogY1xuICAgIH0pO1xuICB9KTtcbn1cbmNvbnN0IEZuID0gYXN5bmMgKGUpID0+IHtcbiAgY29uc3QgdCA9IGF3YWl0IGJlKGUpO1xuICBpZiAodC5zdGF0dXMgPT09IEYuQ0FOQ0VMTEVEKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAodC5zdGF0dXMgPT09IEYuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgcmV0dXJuIHQuc3RhdHVzICE9PSBGLlNVQ0NFU1MgJiYga3QodC5zdGF0dXMpLCB7XG4gICAgaHJlZjogdC5ocmVmXG4gIH07XG59LCBqcyA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSB3aW5kb3cub3Blbih0LCBcIl9ibGFua1wiKTtcbiAgaWYgKCFyKVxuICAgIHRocm93IG5ldyBFcnJvcihgJHtlfSBwb3B1cCB3aW5kb3cgYmxvY2tlZC4gUGxlYXNlIGFsbG93IHBvcHVwcyBmb3IgdGhpcyBzaXRlLmApO1xuICByZXR1cm4gcjtcbn0sIE1uID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHtcbiAgY29uc3QgeyBlcnJfXzogYSB9ID0gSShcInBvcHVwLXZlcmlmeVwiKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChvLCBzKSA9PiB7XG4gICAgY29uc3QgYyA9IGpzKGUsIG4pLCBsID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdSA9IGF3YWl0IHlzKHQsIHIpO1xuICAgICAgICBpZiAodS5wcmVzZW50KVxuICAgICAgICAgIGNsZWFySW50ZXJ2YWwobCksIGMuY2xvc2UoKSwgbyh7IGhyZWY6IHUuaHJlZiB9KTtcbiAgICAgICAgZWxzZSBpZiAoYy5jbG9zZWQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2V9IHBheW1lbnQgY2FuY2VsbGVkYCk7XG4gICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgIGEoZWUodSkpLCBjbGVhckludGVydmFsKGwpLCBzKGVlKHUpKTtcbiAgICAgIH1cbiAgICB9LCAxZTMpO1xuICB9KTtcbn0sIGNlID0gKCkgPT4ge1xuICBjb25zdCBlID0gbmF2aWdhdG9yLmxhbmd1YWdlcyAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzLmxlbmd0aCA/IG5hdmlnYXRvci5sYW5ndWFnZXMgOiBbbmF2aWdhdG9yLmxhbmd1YWdlXTtcbiAgbGV0IHQgPSBlID09IG51bGwgPyB2b2lkIDAgOiBlWzBdO1xuICByZXR1cm4gdCAmJiAodCA9IHQuc3BsaXQoXCItXCIpWzBdKSwgdDtcbn0sIHsgbG9nX186ICRzLCBlcnJfXzogR3MgfSA9IEkoXCJjb21tb24tY2NcIiksIFZzID0gKHtcbiAgcmVxdWlyZV96aXBfY29kZTogZSxcbiAgcmVxdWlyZV9mdWxsX2JpbGxpbmdfYWRkcmVzczogdCxcbiAgcmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3M6IHIsXG4gIHBheW1lbnRfbWV0aG9kOiBuXG59KSA9PiB7XG4gIGNvbnN0IGEgPSB7fTtcbiAgcmV0dXJuIG4gPT09IFwiYWNoXCIgJiYgKGFbcC5GSVJTVF9OQU1FXSA9IHokMS5zdHJpbmcoKS5taW4oMiwgeyBtZXNzYWdlOiBcIk1pbmltdW0gbGVuZ3RoIGlzIDJcIiB9KSwgYVtwLkxBU1RfTkFNRV0gPSB6JDEuc3RyaW5nKCkubWluKDIsIHsgbWVzc2FnZTogXCJNaW5pbXVtIGxlbmd0aCBpcyAyXCIgfSkpLCBlICYmIChhW3AuWklQX0NPREVdID0gayksIHQgJiYgKGFbcC5MSU5FMV0gPSBrLCBhW3AuQ0lUWV0gPSBrLCBhW3AuU1RBVEVdID0gaywgYVtwLkNPVU5UUlldID0gaywgYVtwLlpJUF9DT0RFXSA9IGspLCByICYmIChhW3AuU0hJUFBJTkdfTElORTFdID0gaywgYVtwLlNISVBQSU5HX0NJVFldID0gaywgYVtwLlNISVBQSU5HX1NUQVRFXSA9IGssIGFbcC5TSElQUElOR19DT1VOVFJZXSA9IGssIGFbcC5TSElQUElOR19aSVBfQ09ERV0gPSBrKSwgT2JqZWN0LmtleXMoYSkubGVuZ3RoID09PSAwID8gT2UgOiBPZS5leHRlbmQoYSk7XG59LCBxcyA9IChlLCB0LCByID0ge30pID0+IHtcbiAgaWYgKHIpIHtcbiAgICAkcyhgUmVjZWl2ZWQgZGVmYXVsdCBmaWVsZCB2YWx1ZXM6ICR7SlNPTi5zdHJpbmdpZnkocil9YCk7XG4gICAgY29uc3QgbyA9IE9iamVjdC5rZXlzKHIpO1xuICAgIGZvciAobGV0IHMgPSAwOyBzIDwgby5sZW5ndGg7IHMrKykge1xuICAgICAgY29uc3QgYyA9IG9bc10sIGwgPSByW2NdO1xuICAgICAgZVtjXSB8fCAoZVtjXSA9IGwpO1xuICAgIH1cbiAgfVxuICBlW3AuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSA9ICEhZVtwLklTX1NISVBQSU5HX1NBTUVfQVNfQklMTElOR10sIGVbcC5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddICYmIChlW3AuU0hJUFBJTkdfTElORTFdID0gZVtwLkxJTkUxXSwgZVtwLlNISVBQSU5HX0xJTkUyXSA9IGVbcC5MSU5FMl0sIGVbcC5TSElQUElOR19MSU5FM10gPSBlW3AuTElORTNdLCBlW3AuU0hJUFBJTkdfQ0lUWV0gPSBlW3AuQ0lUWV0sIGVbcC5TSElQUElOR19TVEFURV0gPSBlW3AuU1RBVEVdLCBlW3AuU0hJUFBJTkdfQ09VTlRSWV0gPSBlW3AuQ09VTlRSWV0sIGVbcC5TSElQUElOR19aSVBfQ09ERV0gPSBlW3AuWklQX0NPREVdKTtcbiAgY29uc3QgYSA9IFZzKHIpLnNhZmVQYXJzZShlKTtcbiAgaWYgKCFhLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBvID0gYS5lcnJvci5mb3JtYXQoKSwgcyA9IEZzKG8pLCBjID0gT2JqZWN0LmtleXMocyk7XG4gICAgZm9yIChsZXQgbCA9IDA7IGwgPCBjLmxlbmd0aDsgbCsrKSB7XG4gICAgICBjb25zdCB1ID0gY1tsXSwgZCA9IHNbdV07XG4gICAgICB0KHUsIGQsIHUpO1xuICAgIH1cbiAgICB0aHJvdyBHcyhcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIHMpLCBuZXcgRXJyb3IoXCJBbG1vc3QgdGhlcmUhIEp1c3QgYSBmZXcgdGhpbmdzIGhpZ2hsaWdodGVkIGFib3ZlIHRvIGZpeCBiZWZvcmUgeW91IGNhbiBzdWJtaXQuXCIpO1xuICB9XG4gIHJldHVybiBhLmRhdGE7XG59LCB7IGxvZ19fOiB6cywgZXJyX186IEhzIH0gPSBJKFwiY29tbW9uLWNjXCIpLCBxID0gcXMsIExuID0gKGUsIHQpID0+IHtcbiAgZm9yIChjb25zdCByIG9mIGUpXG4gICAgaWYgKHIuc3VjY2VzcyA9PT0gITEpXG4gICAgICB0aHJvdyByLmVycm9ycy5mb3JFYWNoKChuKSA9PiB7XG4gICAgICAgIGNvbnN0IGEgPSBCci5zYWZlUGFyc2Uobi5lbGVtZW50VHlwZSk7XG4gICAgICAgIGlmICghYS5zdWNjZXNzKVxuICAgICAgICAgIEhzKGBVbmtub3duIGZpZWxkIG5hbWUgaW4gb25WYWxpZGF0aW9uRXJyb3I6ICR7bi5lbGVtZW50VHlwZX0uIEVycm9yIG9iamVjdDpgLCBuKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29uc3QgbyA9IGEuZGF0YTtcbiAgICAgICAgICB0KG8sIG4uZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgfSksIHpzKGBFcnJvciB0b2tlbml6aW5nIGNhcmQ6IGdvdCB2YWxpZGF0aW9uIGVycm9yczogJHtKU09OLnN0cmluZ2lmeShyLmVycm9ycyl9YCksIG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyB3aGlsZSB0b2tlbml6aW5nIGNhcmRcIik7XG59LCB7IGxvZ19fOiBWbCwgZXJyX186IERuIH0gPSBJKFwiY29tbW9uXCIpLCB1dCA9IChlKSA9PiB7XG4gIGlmIChlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBwYXltZW50IG1ldGhvZCwgZ290ICR7ZS5wYXltZW50X21ldGhvZHMubGVuZ3RofWApO1xuICByZXR1cm4geyBwYXltZW50X21ldGhvZF9pZDogZS5wYXltZW50X21ldGhvZHNbMF0uaWQgfTtcbn0sIHogPSAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gZS5maW5kKChuKSA9PiB0LnNhZmVQYXJzZShuKS5zdWNjZXNzKTtcbiAgaWYgKCFyKVxuICAgIHRocm93IERuKFwiTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWwuIEFsbCBtb2RlbHM6XCIsIGUpLCBuZXcgRXJyb3IoXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbFwiKTtcbiAgcmV0dXJuIHQucGFyc2Uocik7XG59LCBuciA9IChlLCB0KSA9PiAoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IGUuZW1haWwsXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGUubGFzdE5hbWUsXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBlLmZpcnN0TmFtZSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IFooZSksXG4gIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBLKGUsIHQpXG59KSwgbGUgPSBhc3luYyAoZSkgPT4ge1xuICBjb25zdCB7IGxvZ19fOiB0IH0gPSBJKGUubG9nUHJlZml4KSwgciA9IGF3YWl0IE0oZS5hbnlDZGVDb25uZWN0aW9uKSwgbiA9IHV0KGUuY29uZmlybVJlc3VsdCk7XG4gIGlmIChyLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICByZXR1cm4gdChcIlNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QuLi5cIiksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGF3YWl0IGZzKGUuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiByLnRva2VuLFxuICAgICAgcG1faWQ6IG4ucGF5bWVudF9tZXRob2RfaWRcbiAgICB9KSB9O1xuICB7XG4gICAgaWYgKGUudXNlUGF5Rmlyc3RGbG93KSB7XG4gICAgICBpZiAodChcIlVzaW5nIHBheS1maXJzdCBmbG93Li4uXCIpLCAhZS5jb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgICB0aHJvdyBEbihcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIGUuY29uZmlybVJlc3VsdCksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IGUuY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgYSA9IHtcbiAgICAgIHNlY3VyZV90b2tlbjogci50b2tlbixcbiAgICAgIHBheW1lbnRfaW5wdXQ6IHsgcHJvdmlkZXJfdHlwZTogZS5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIgfSxcbiAgICAgIGN1c3RvbWVyX2VtYWlsOiBlLnJlcXVpcmVkRm9ybUZpZWxkc1twLkVNQUlMXSxcbiAgICAgIGN1c3RvbWVyX2FkZHJlc3M6IFooZS5yZXF1aXJlZEZvcm1GaWVsZHMpLFxuICAgICAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogSyhlLnJlcXVpcmVkRm9ybUZpZWxkcywgci5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBwcm9tb3Rpb25fY29kZTogZS5yZXF1aXJlZEZvcm1GaWVsZHNbcC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICBsaW5lX2l0ZW1zOiByLmxpbmVfaXRlbXMsXG4gICAgICB0b3RhbF9hbW91bnRfYXRvbTogci5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbi5wYXltZW50X21ldGhvZF9pZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgIH07XG4gICAgcmV0dXJuIHQoXCJEb2luZyBjaGVja291dC4uLlwiLCBhKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgcnIoZS5hbnlDZGVDb25uZWN0aW9uLCBhKSB9O1xuICB9XG59LCBVID0geiQxLmVudW0oW1wic3RyaXBlXCIsIFwiYWlyd2FsbGV4XCIsIFwiYXV0aG9yaXplX25ldFwiLCBcImFkeWVuXCIsIFwicGF5cGFsXCIsIFwicG9ja3l0XCIsIFwibG9vcFwiXSk7XG5VLkVudW0uc3RyaXBlO1xuY29uc3QgeG4gPSAoe1xuICBzY3JpcHRJZDogZSxcbiAgc3JjOiB0LFxuICBjaGVja0xvYWRlZEZuOiByXG59KSA9PiB7XG4gIGNvbnN0IG4gPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgoYSwgbykgPT4ge1xuICAgIGxldCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICBzLnNyYyA9IHQsIHMuaWQgPSBlLCBzLmFzeW5jID0gITA7XG4gICAgY29uc3QgYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO1xuICAgIHIoKSA/IGEoKSA6IGMgPyBzID0gYyA6IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocyksIHMuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIFwibG9hZFwiLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBuLmFib3J0KCksIGEoKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogbi5zaWduYWwgfVxuICAgICksIHMuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIFwiZXJyb3JcIixcbiAgICAgICgpID0+IHtcbiAgICAgICAgbi5hYm9ydCgpLCBvKFwiRmFpbGVkIHRvIGxvYWQgdGhlIHNjcmlwdFwiKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogbi5zaWduYWwgfVxuICAgICk7XG4gIH0pO1xufSwgcWUgPSAoe1xuICBnYXRld2F5OiBlLFxuICBnYXRld2F5TWVyY2hhbnRJZDogdCxcbiAgbWVyY2hhbnROYW1lOiByLFxuICBtZXJjaGFudElkOiBuLFxuICBpbml0aWFsUHJldmlldzogYSxcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogbyxcbiAgcHJlZmlsbDogc1xufSkgPT4ge1xuICB2YXIgZiwgXztcbiAgY29uc3QgYyA9ICgoZiA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogZi5hbW91bnRBdG9tKSA/PyAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5hbW91bnRBdG9tKSA/PyAwLCBsID0gTWF0aC5tYXgoYyAvIDEwMCwgMCksIHUgPSAoKChfID0gbyA9PSBudWxsID8gdm9pZCAwIDogby5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBfLmN1cnJlbmN5KSA/PyAocyA9PSBudWxsID8gdm9pZCAwIDogcy5jdXJyZW5jeSkgPz8gYS5jdXJyZW5jeSkudG9VcHBlckNhc2UoKSwgZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAyLFxuICAgIGFwaVZlcnNpb25NaW5vcjogMCxcbiAgICBhbGxvd2VkUGF5bWVudE1ldGhvZHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJDQVJEXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBhbGxvd2VkQXV0aE1ldGhvZHM6IFtcIlBBTl9PTkxZXCIsIFwiQ1JZUFRPR1JBTV8zRFNcIl0sXG4gICAgICAgICAgYWxsb3dlZENhcmROZXR3b3JrczogW1wiQU1FWFwiLCBcIkRJU0NPVkVSXCIsIFwiSU5URVJBQ1wiLCBcIkpDQlwiLCBcIk1BU1RFUkNBUkRcIiwgXCJWSVNBXCJdLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUmVxdWlyZWQ6ICEwLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZm9ybWF0OiBcIkZVTExcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsb3dDcmVkaXRDYXJkczogITAsXG4gICAgICAgICAgYWxsb3dQcmVwYWlkQ2FyZHM6ICEwXG4gICAgICAgIH0sXG4gICAgICAgIHRva2VuaXphdGlvblNwZWNpZmljYXRpb246IHtcbiAgICAgICAgICB0eXBlOiBcIlBBWU1FTlRfR0FURVdBWVwiLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGdhdGV3YXk6IGUsXG4gICAgICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogdFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0sXG4gICAgZW1haWxSZXF1aXJlZDogITAsXG4gICAgc2hpcHBpbmdBZGRyZXNzUmVxdWlyZWQ6IHMuY2hlY2tvdXRfc2V0dGluZ3MucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MsXG4gICAgbWVyY2hhbnRJbmZvOiB7XG4gICAgICAvLyBQUk9EIGVudiB3aWxsIG5lZWQgdGhpc1xuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcGF5L2FwaS93ZWIvcmVmZXJlbmNlL3JlcXVlc3Qtb2JqZWN0cyNNZXJjaGFudEluZm9cbiAgICAgIG1lcmNoYW50SWQ6IG4gPz8gXCJcIixcbiAgICAgIG1lcmNoYW50TmFtZTogclxuICAgIH0sXG4gICAgdHJhbnNhY3Rpb25JbmZvOiB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlOiB1LFxuICAgICAgdG90YWxQcmljZVN0YXR1czogbyAhPSBudWxsICYmIG8ucGVuZGluZyA/IFwiRVNUSU1BVEVEXCIgOiBcIkZJTkFMXCIsXG4gICAgICB0b3RhbFByaWNlOiBsLnRvRml4ZWQoMilcbiAgICB9XG4gIH07XG4gIHJldHVybiBvICE9IG51bGwgJiYgby5nb29nbGVQYXlQYXltZW50UmVxdWVzdCA/IHR5cGVvZiBvLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0ID09IFwiZnVuY3Rpb25cIiA/IHsgLi4uZCwgLi4uby5nb29nbGVQYXlQYXltZW50UmVxdWVzdChkKSB9IDogeyAuLi5kLCAuLi5vLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0IH0gOiBkO1xufSwgb3IgPSAoKSA9PiB4bih7XG4gIHNjcmlwdElkOiBcIl9fb3BfaW50ZXJuYWxfZ29vZ2xlX3BheV9zZGtcIixcbiAgc3JjOiBcImh0dHBzOi8vcGF5Lmdvb2dsZS5jb20vZ3AvcC9qcy9wYXkuanNcIixcbiAgY2hlY2tMb2FkZWRGbjogKCkgPT4ge1xuICAgIHZhciBlLCB0O1xuICAgIHJldHVybiAhISgodCA9IChlID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGUucGF5bWVudHMpICE9IG51bGwgJiYgdC5hcGkpO1xuICB9XG59KTtcbmxldCBVdCA9IG51bGw7XG5jb25zdCBhciA9IGFzeW5jIChlKSA9PiBhd2FpdCBwbihlKSA9PT0gXCJwcm9kXCIgPyBcIlBST0RVQ1RJT05cIiA6IFwiVEVTVFwiLCB6ZSA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBhd2FpdCBhcihlKTtcbiAgcmV0dXJuIFV0ID09PSBudWxsICYmIChVdCA9IG5ldyB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzLmFwaS5QYXltZW50c0NsaWVudCh7XG4gICAgZW52aXJvbm1lbnQ6IHIsXG4gICAgbWVyY2hhbnRJbmZvOiB0Lm1lcmNoYW50SW5mb1xuICB9KSksIFV0O1xufSwgSGUgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgocikgPT4gci50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIHJldHVybiB0ID8gWXIucGFyc2UodCkgOiBudWxsO1xufSwgaXIgPSAoZSwgdCkgPT4ge1xuICB2YXIgbywgcywgYywgbDtcbiAgY29uc3QgciA9IHsgLi4uZSB9LCBuID0gKHMgPSAobyA9IHQucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBvLmluZm8pID09IG51bGwgPyB2b2lkIDAgOiBzLmJpbGxpbmdBZGRyZXNzLCBhID0gdC5zaGlwcGluZ0FkZHJlc3M7XG4gIGlmIChuKSB7XG4gICAgY29uc3QgW3UsIC4uLmRdID0gKChsID0gKGMgPSBuLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBjLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGwuc3BsaXQoL1xccysvKSkgPz8gW10sIGYgPSBkLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgICByW3AuRU1BSUxdID0gcltwLkVNQUlMXSB8fCB0LmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgcltwLkxJTkUxXSA9IHJbcC5MSU5FMV0gfHwgbi5hZGRyZXNzMSB8fCBcIlwiLCByW3AuTElORTJdID0gcltwLkxJTkUyXSB8fCBuLmFkZHJlc3MyIHx8IFwiXCIsIHJbcC5MSU5FM10gPSByW3AuTElORTNdIHx8IG4uYWRkcmVzczMgfHwgXCJcIiwgcltwLkNJVFldID0gcltwLkNJVFldIHx8IG4ubG9jYWxpdHkgfHwgXCJcIiwgcltwLlNUQVRFXSA9IHJbcC5TVEFURV0gfHwgbi5hZG1pbmlzdHJhdGl2ZUFyZWEgfHwgXCJcIiwgcltwLkNPVU5UUlldID0gcltwLkNPVU5UUlldIHx8IG4uY291bnRyeUNvZGUgfHwgXCJVU1wiLCByW3AuWklQX0NPREVdID0gcltwLlpJUF9DT0RFXSB8fCBuLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICAgIGNvbnN0IF8gPSByW3AuRklSU1RfTkFNRV0gfHwgdSB8fCBcIlwiLCBtID0gcltwLkxBU1RfTkFNRV0gfHwgZiB8fCBcIlwiO1xuICAgIF8gfHwgbSA/IChyW3AuRklSU1RfTkFNRV0gPSBfLCByW3AuTEFTVF9OQU1FXSA9IG0pIDogKHJbcC5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIiwgcltwLkxBU1RfTkFNRV0gPSBcIlwiKTtcbiAgfVxuICByZXR1cm4gYSAmJiAocltwLlNISVBQSU5HX0xJTkUxXSA9IHJbcC5TSElQUElOR19MSU5FMV0gfHwgYS5hZGRyZXNzMSB8fCBcIlwiLCByW3AuU0hJUFBJTkdfTElORTJdID0gcltwLlNISVBQSU5HX0xJTkUyXSB8fCBhLmFkZHJlc3MyIHx8IFwiXCIsIHJbcC5TSElQUElOR19MSU5FM10gPSByW3AuU0hJUFBJTkdfTElORTNdIHx8IGEuYWRkcmVzczMgfHwgXCJcIiwgcltwLlNISVBQSU5HX0NJVFldID0gcltwLlNISVBQSU5HX0NJVFldIHx8IGEubG9jYWxpdHkgfHwgXCJcIiwgcltwLlNISVBQSU5HX1pJUF9DT0RFXSA9IHJbcC5TSElQUElOR19aSVBfQ09ERV0gfHwgYS5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIiwgcltwLlNISVBQSU5HX1NUQVRFXSA9IHJbcC5TSElQUElOR19TVEFURV0gfHwgYS5hZG1pbmlzdHJhdGl2ZUFyZWEgfHwgXCJcIiwgcltwLlNISVBQSU5HX0NPVU5UUlldID0gcltwLlNISVBQSU5HX0NPVU5UUlldIHx8IGEuY291bnRyeUNvZGUgfHwgXCJVU1wiKSwgcjtcbn0sIHsgbG9nX186IEplLCBlcnJfXzogQnMgfSA9IEkoXCJhd3gtYmFjc1wiKSwgWXMgPSBIKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIHZhciB3LCBFO1xuICAgIGNvbnN0IG8gPSBxKHIsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE0ocyksIGwgPSBhLnZlcmlmaWNhdGlvbk1ldGhvZCA/PyBcInRydWVsYXllclwiLCB1ID0gYXdhaXQgbmUocywge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBvW3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG9bcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IG9bcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IFoobyksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogSyhvLCBjLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBjZSgpXG4gICAgfSksIGQgPSBIZSh1KSwgZiA9IGQgPT0gbnVsbCA/IHZvaWQgMCA6IGQuY29uc2VudF9pZCwgXyA9IGQgPT0gbnVsbCA/IHZvaWQgMCA6IGQuYXZhaWxhYmxlX2JhbmtzO1xuICAgIGxldCBtO1xuICAgIGlmIChfICYmIF8ubGVuZ3RoID49IDEpIHtcbiAgICAgIEplKFwiTXVsdGlwbGUgYmFua3MgYXZhaWxhYmxlLCBzaG93aW5nIGJhbmsgc2VsZWN0b3IuLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBtID0gYXdhaXQgTm4oXywge1xuICAgICAgICAgIHdpZHRoOiBcIjQ1MHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjUwMHB4XCIsXG4gICAgICAgICAgdGl0bGU6IFwiU2VsZWN0IGJhbmtcIlxuICAgICAgICB9KSwgSmUoYEJhbmsgc2VsZWN0ZWQ6ICR7bS5kaXNwbGF5X25hbWV9YCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgSmUoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIiksIG5ldyBFcnJvcihcIkJhbmsgc2VsZWN0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgeSA9IHtcbiAgICAgIHR5cGU6IFwiYmFjc19kaXJlY3RfZGViaXRcIixcbiAgICAgIGJhY3NfZGlyZWN0X2RlYml0OiB7XG4gICAgICAgIC8vIFRydWVMYXllclxuICAgICAgICBiYW5rX25hbWU6IG0gPT0gbnVsbCA/IHZvaWQgMCA6IG0uYmFua19uYW1lLFxuICAgICAgICAvLyBNaWNyb2RlcG9zaXRcbiAgICAgICAgb3duZXJfbmFtZTogTnQob1twLkZJUlNUX05BTUVdLCBvW3AuTEFTVF9OQU1FXSksXG4gICAgICAgIG93bmVyX2VtYWlsOiBvW3AuRU1BSUxdLFxuICAgICAgICBjb3VudHJ5X2NvZGU6IG9bcC5DT1VOVFJZXVxuICAgICAgICAvLyBhY2NvdW50X251bWJlcjogY3VzdG9tUGFyYW1zLmFjY291bnROdW1iZXIsXG4gICAgICAgIC8vIHNvcnRfY29kZTogY3VzdG9tUGFyYW1zLnNvcnRDb2RlLFxuICAgICAgICAvLyBhZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgIH1cbiAgICB9LCBiID0gKEUgPSAodyA9IChhd2FpdCBMKHMsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogYy50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogZixcbiAgICAgICAgdmVyaWZpY2F0aW9uX21ldGhvZDogbCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IHlcbiAgICAgIH1cbiAgICB9KSkucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogdy5maW5kKFxuICAgICAgKEMpID0+IEMudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApKSA9PSBudWxsID8gdm9pZCAwIDogRS5yZWRpcmVjdF91cmw7XG4gICAgaWYgKGIpIHtcbiAgICAgIEplKFwiQkFDUyB2ZXJpZmljYXRpb24gcmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiKTtcbiAgICAgIGNvbnN0IHsgc3RhdHVzOiBDIH0gPSBhd2FpdCBiZSh7XG4gICAgICAgIHVybDogYixcbiAgICAgICAgYmFzZVVybDogZS5iYXNlVXJsLFxuICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgIGZyYW1lVGl0bGU6IFwiQkFDUyB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBpZiAoSmUoYOKVsCBCQUNTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtDfV1gKSwgQyA9PT0gRi5DQU5DRUxMRUQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJBQ1MgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIGlmIChDID09PSBGLkZBSUxVUkUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJBQ1MgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICB9XG4gICAgY29uc3QgdiA9IGF3YWl0IEwocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBmXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBsZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYmFjc1wiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiBzLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogdixcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoQykge1xuICAgICAgdGhyb3cgQnMoXCJCQUNTIHBheW1lbnQgZXJyb3JcIiwgQyksIGcoXCJjaGVja291dF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBDXG4gICAgICB9KSwgbmV3IEVycm9yKChDID09IG51bGwgPyB2b2lkIDAgOiBDLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IGtyLCBlcnJfXzogSnMgfSA9IEkoXCJhd3gtZWZ0XCIpLCBXcyA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIGIsIHY7XG4gICAgY29uc3QgbyA9IHEociwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgTShzKSwgbCA9IGEudmVyaWZpY2F0aW9uTWV0aG9kID8/IFwicGxhaWRcIiwgdSA9IGF3YWl0IG5lKHMsIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogb1twLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBvW3AuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBvW3AuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBaKG8pLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IEsobywgYy5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogY2UoKVxuICAgIH0pLCBkID0gSGUodSksIGYgPSBkID09IG51bGwgPyB2b2lkIDAgOiBkLmNvbnNlbnRfaWQsIF8gPSB7XG4gICAgICB0eXBlOiBcImVmdF9kaXJlY3RfZGViaXRcIixcbiAgICAgIGVmdF9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgLy8gUGxhaWRcbiAgICAgICAgYnVzaW5lc3NfYWNjb3VudDogYS5pc0J1c2luZXNzQWNjb3VudCA/PyAhMSxcbiAgICAgICAgb3duZXJfbmFtZTogTnQob1twLkZJUlNUX05BTUVdLCBvW3AuTEFTVF9OQU1FXSksXG4gICAgICAgIG93bmVyX2VtYWlsOiBvW3AuRU1BSUxdXG4gICAgICAgIC8vIE1pY3JvZGVwb3NpdFxuICAgICAgICAvLyBpbnN0aXR1dGlvbl9udW1iZXI6IHVuZGVmaW5lZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgICAgIC8vIHRyYW5zaXRfbnVtYmVyOiB1bmRlZmluZWQgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgICAvLyBhY2NvdW50X251bWJlcjogdW5kZWZpbmVkIGFzIHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgICAgLy8gbWFuZGF0ZV92ZXJzaW9uOiB1bmRlZmluZWQgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgfVxuICAgIH0sIHkgPSAodiA9IChiID0gKGF3YWl0IEwocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBmLFxuICAgICAgICB2ZXJpZmljYXRpb25fbWV0aG9kOiBsLFxuICAgICAgICBkaXJlY3RfZGViaXRfZGF0YTogX1xuICAgICAgfVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBiLmZpbmQoXG4gICAgICAodykgPT4gdy50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICkpID09IG51bGwgPyB2b2lkIDAgOiB2LnJlZGlyZWN0X3VybDtcbiAgICBpZiAoeSkge1xuICAgICAga3IoXCJFRlQgdmVyaWZpY2F0aW9uIHJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1czogdyB9ID0gYXdhaXQgYmUoe1xuICAgICAgICB1cmw6IHksXG4gICAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIkVGVCB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBpZiAoa3IoYOKVsCBFRlQgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3d9XWApLCB3ID09PSBGLkNBTkNFTExFRClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRUZUIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICBpZiAodyA9PT0gRi5GQUlMVVJFKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFRlQgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICB9XG4gICAgY29uc3QgaCA9IGF3YWl0IEwocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBmXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBsZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtZWZ0XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHMsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBvLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBoLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoICh3KSB7XG4gICAgICB0aHJvdyBKcyhcIkVGVCBwYXltZW50IGVycm9yXCIsIHcpLCBnKFwiY2hlY2tvdXRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogd1xuICAgICAgfSksIG5ldyBFcnJvcigodyA9PSBudWxsID8gdm9pZCAwIDogdy5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBXZSwgZXJyX186IFpzIH0gPSBJKFwiYXd4LXNlcGFcIiksIEtzID0gSChcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBhXG4gIH0pID0+IHtcbiAgICB2YXIgdiwgdztcbiAgICBjb25zdCBvID0gcShyLCBuLmdldC5vblZhbGlkYXRpb25FcnJvciksIHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBNKHMpLCBsID0gYS52ZXJpZmljYXRpb25NZXRob2QgPz8gXCJ0cnVlbGF5ZXJcIiwgdSA9IGF3YWl0IG5lKHMsIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogb1twLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBvW3AuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBvW3AuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBaKG8pLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IEsobywgYy5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogY2UoKVxuICAgIH0pLCBkID0gSGUodSksIGYgPSBkID09IG51bGwgPyB2b2lkIDAgOiBkLmNvbnNlbnRfaWQsIF8gPSBkID09IG51bGwgPyB2b2lkIDAgOiBkLmF2YWlsYWJsZV9iYW5rcztcbiAgICBsZXQgbTtcbiAgICBpZiAoXyAmJiBfLmxlbmd0aCA+PSAxKSB7XG4gICAgICBXZShcIk11bHRpcGxlIGJhbmtzIGF2YWlsYWJsZSwgc2hvd2luZyBiYW5rIHNlbGVjdG9yLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbSA9IGF3YWl0IE5uKF8sIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCI1MDBweFwiLFxuICAgICAgICAgIHRpdGxlOiBcIlNlbGVjdCBiYW5rXCJcbiAgICAgICAgfSksIFdlKGBCYW5rIHNlbGVjdGVkOiAke20uZGlzcGxheV9uYW1lfWApO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IFdlKFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpLCBuZXcgRXJyb3IoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGggPSAodyA9ICh2ID0gKGF3YWl0IEwocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBmLFxuICAgICAgICB2ZXJpZmljYXRpb25fbWV0aG9kOiBsLFxuICAgICAgICBkaXJlY3RfZGViaXRfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwic2VwYV9kaXJlY3RfZGViaXRcIixcbiAgICAgICAgICBzZXBhX2RpcmVjdF9kZWJpdDoge1xuICAgICAgICAgICAgLy8gdHJ1ZWxheWVyXG4gICAgICAgICAgICBiYW5rX25hbWU6IG0gPT0gbnVsbCA/IHZvaWQgMCA6IG0uYmFua19uYW1lLFxuICAgICAgICAgICAgY291bnRyeV9jb2RlOiBvW3AuQ09VTlRSWV0sXG4gICAgICAgICAgICAvLyBtaWNyb2RlcG9zaXRcbiAgICAgICAgICAgIG93bmVyX25hbWU6IE50KG9bcC5GSVJTVF9OQU1FXSwgb1twLkxBU1RfTkFNRV0pLFxuICAgICAgICAgICAgb3duZXJfZW1haWw6IG9bcC5FTUFJTF1cbiAgICAgICAgICAgIC8vIGliYW46IGN1c3RvbVBhcmFtcy5pYmFuLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiB2LmZpbmQoXG4gICAgICAoRSkgPT4gRS50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICkpID09IG51bGwgPyB2b2lkIDAgOiB3LnJlZGlyZWN0X3VybDtcbiAgICBpZiAoaCkge1xuICAgICAgV2UoXCJTRVBBIHZlcmlmaWNhdGlvbiByZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgeyBzdGF0dXM6IEUgfSA9IGF3YWl0IGJlKHtcbiAgICAgICAgdXJsOiBoLFxuICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICAgIGZyYW1lV2lkdGg6IFwiNTAwcHhcIixcbiAgICAgICAgZnJhbWVIZWlnaHQ6IFwiNzAwcHhcIixcbiAgICAgICAgZnJhbWVUaXRsZTogXCJTRVBBIHZlcmlmaWNhdGlvblwiXG4gICAgICB9KTtcbiAgICAgIGlmIChXZShg4pWwIFNFUEEgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke0V9XWApLCBFID09PSBGLkNBTkNFTExFRClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU0VQQSB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgaWYgKEUgPT09IEYuRkFJTFVSRSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU0VQQSB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgIH1cbiAgICBjb25zdCBiID0gYXdhaXQgTChzLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGMudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGZcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGxlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1zZXBhXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHMsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBvLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBiLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChFKSB7XG4gICAgICB0aHJvdyBacyhcIlNFUEEgcGF5bWVudCBlcnJvclwiLCBFKSwgZyhcImNoZWNrb3V0X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IEVcbiAgICAgIH0pLCBuZXcgRXJyb3IoKEUgPT0gbnVsbCA/IHZvaWQgMCA6IEUubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgeyBsb2dfXzogUXMsIGVycl9fOiBzciB9ID0gSShcImFpcndhbGxleC1jY1wiKSwgWHMgPSB6JDEub2JqZWN0KHtcbiAgXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6JDEuc3RyaW5nKClcbn0pLCBlYyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBYcy5zYWZlUGFyc2UoZSk7XG4gIGlmICghdC5zdWNjZXNzKSB7XG4gICAgY29uc3QgciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgbiA9IGBBaXJ3YWxsZXggM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlKX1gO1xuICAgIHRocm93IHNyKG4pLCBuZXcgRXJyb3Iocik7XG4gIH1cbiAgcmV0dXJuIHQuZGF0YTtcbn0sIE9uID0gKGUpID0+IChlID09IG51bGwgPyB2b2lkIDAgOiBlW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0pICE9PSB2b2lkIDAsIHRjID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB0ID0gbmV3IFVSTChlID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJwYXltZW50X2ludGVudF9pZFwiKTtcbiAgICBpZiAoIXQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBpbnRlbnQgSUQgZm91bmQgaW4gQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIHJldHVybiBRcyhgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW0ludGVudCBJRDogJHt0fV1gKSwgdDtcbiAgfSBjYXRjaCAodCkge1xuICAgIGNvbnN0IHIgPSBcIkVycm9yIHZlcmlmeWluZyBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuXCI7XG4gICAgdGhyb3cgc3IociwgYFJlc3VsdGluZyBVUkw6ICR7ZX0uXG5FcnJvcjogJHtlZSh0KX1gKSwgbmV3IEVycm9yKHIpO1xuICB9XG59LCBVbiA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBlYyh0KSwgbiA9IGF3YWl0IEZuKHsgdXJsOiByW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0sIGJhc2VVcmw6IGUgfSksIGEgPSB0YyhuLmhyZWYgPz8gXCJcIiksIG8gPSByW1wib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCJdO1xuICBpZiAobyAhPT0gYSkge1xuICAgIGNvbnN0IGMgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIGwgPSBgSW50ZW50IElEIGZyb20gY2FsbGJhY2sgKCR7YX0pIGRvZXMgbm90IG1hdGNoIHRoZSBpbml0aWFsIGludGVudCBJRCAoJHtvfSkuYDtcbiAgICB0aHJvdyBzcihsKSwgbmV3IEVycm9yKGMpO1xuICB9XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIGluaXRpYWxfaW50ZW50X2lkOiBhLFxuICAgICAgY29uc2VudF9pZDogcltcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCJdXG4gICAgfVxuICB9O1xufSwgam4gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSksICRuID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pLCBjciA9ICgpID0+IHhuKHtcbiAgc2NyaXB0SWQ6IFwiX19vcF9pbnRlcm5hbF9hcHBsZV9wYXlfc2RrXCIsXG4gIHNyYzogXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb20vanNhcGkvMS5sYXRlc3QvYXBwbGUtcGF5LXNkay5qc1wiLFxuICBjaGVja0xvYWRlZEZuOiAoKSA9PiAhIXdpbmRvdy5BcHBsZVBheVNlc3Npb25cbn0pLCBsciA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSB0LnRva2VuLnBheW1lbnRNZXRob2QuYmlsbGluZ0NvbnRhY3QsIG4gPSB0LmJpbGxpbmdDb250YWN0LCBhID0gdC5zaGlwcGluZ0NvbnRhY3QsIG8gPSB7IC4uLmUgfTtcbiAgaWYgKHIgfHwgbiB8fCBhKSB7XG4gICAgb1twLkVNQUlMXSA9IG9bcC5FTUFJTF0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZW1haWxBZGRyZXNzKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5lbWFpbEFkZHJlc3MpIHx8IChhID09IG51bGwgPyB2b2lkIDAgOiBhLmVtYWlsQWRkcmVzcykgfHwgXCJvcF91bmZpbGxlZEBlbWFpbC5jb21cIiwgb1twLkNPVU5UUlldID0gb1twLkNPVU5UUlldIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmNvdW50cnlDb2RlKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5jb3VudHJ5Q29kZSkgfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuY291bnRyeUNvZGUpIHx8IFwiVVNcIiwgb1twLlpJUF9DT0RFXSA9IG9bcC5aSVBfQ09ERV0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIucG9zdGFsQ29kZSkgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4ucG9zdGFsQ29kZSkgfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEucG9zdGFsQ29kZSkgfHwgXCIwMDAwMFwiO1xuICAgIGNvbnN0IHMgPSBvW3AuRklSU1RfTkFNRV0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZ2l2ZW5OYW1lKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5naXZlbk5hbWUpIHx8IChhID09IG51bGwgPyB2b2lkIDAgOiBhLmdpdmVuTmFtZSkgfHwgXCJcIiwgYyA9IG9bcC5MQVNUX05BTUVdIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmZhbWlseU5hbWUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmZhbWlseU5hbWUpIHx8IChhID09IG51bGwgPyB2b2lkIDAgOiBhLmZhbWlseU5hbWUpIHx8IFwiXCI7XG4gICAgcyB8fCBjID8gKG9bcC5GSVJTVF9OQU1FXSA9IHMsIG9bcC5MQVNUX05BTUVdID0gYykgOiAob1twLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiLCBvW3AuTEFTVF9OQU1FXSA9IFwiXCIpO1xuICB9XG4gIHJldHVybiBvO1xufTtcbnokMS5vYmplY3Qoe1xuICBkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBtZXNzYWdlSGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gICAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogeiQxLnN0cmluZygpLFxuICAgIG1lc3NhZ2VCb2R5OiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICB9KSxcbiAgb3JpZ2luOiB6JDEubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSk7XG5jb25zdCByYyA9ICh7XG4gIHRvdGFsOiBlLFxuICBwcmVmaWxsOiB0XG59KSA9PiB7XG4gIHZhciBuO1xuICBpZiAodC5tb2RlID09PSBcInNldHVwXCIpXG4gICAgcmV0dXJuIHtcbiAgICAgIHBheW1lbnREZXNjcmlwdGlvbjogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgICAgYW1vdW50OiBlLmFtb3VudCxcbiAgICAgICAgbGFiZWw6IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgICAgcGF5bWVudFRpbWluZzogXCJyZWN1cnJpbmdcIixcbiAgICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgICB9LFxuICAgICAgLy8gVE9ETzogdGhpcyBzaG91bGQgYmUgYmlsbGluZyBwb3J0YWwgdXJsXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9wYXNza2l0L3BrcmVjdXJyaW5ncGF5bWVudHJlcXVlc3QvbWFuYWdlbWVudHVybCNEaXNjdXNzaW9uXG4gICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IHVzZWQgd2hlbiB1c2VyIHJlbW92ZSBhIGNhcmQgZnJvbSB0aGVpciBBcHBsZVBheSB3YWxsZXQuXG4gICAgICAvLyBDdXJyZW50eSBzZXQgdG8gY2hlY2tvdXQgc2Vzc2lvbiB1cmwgdG8gc2F0aXNmeSBBcHBsZVBheSB0eXBlc1xuICAgICAgbWFuYWdlbWVudFVSTDogbmV3IFVSTChgL3BheS8ke3QudG9rZW59YCwgQ24pLnRvU3RyaW5nKClcbiAgICB9O1xuICBjb25zdCByID0gKG4gPSB0LmxpbmVfaXRlbXMpID09IG51bGwgPyB2b2lkIDAgOiBuWzBdO1xuICBpZiAocilcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiAociA9PSBudWxsID8gdm9pZCAwIDogci5kZXNjcmlwdGlvbikgPz8gXCJcIixcbiAgICAgIHJlZ3VsYXJCaWxsaW5nOiB7XG4gICAgICAgIGFtb3VudDogZS5hbW91bnQsXG4gICAgICAgIGxhYmVsOiAociA9PSBudWxsID8gdm9pZCAwIDogci5kZXNjcmlwdGlvbikgPz8gXCJcIixcbiAgICAgICAgcmVjdXJyaW5nUGF5bWVudEludGVydmFsVW5pdDogciA9PSBudWxsID8gdm9pZCAwIDogci5iaWxsaW5nX2ludGVydmFsLFxuICAgICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxDb3VudDogKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuYmlsbGluZ19pbnRlcnZhbF9jb3VudCkgPz8gdm9pZCAwLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICBtYW5hZ2VtZW50VVJMOiBgaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb20vcGF5LyR7dC50b2tlbn1gXG4gICAgfTtcbn0sIG5jID0gKHtcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogZSxcbiAgaW5pdGlhbFByZXZpZXc6IHQsXG4gIHByZWZpbGw6IHIsXG4gIGRlZmF1bHRMYWJlbDogbiA9IFwiVG90YWxcIlxufSkgPT4ge1xuICB2YXIgYywgbDtcbiAgY29uc3QgYSA9ICgoKGMgPSBlID09IG51bGwgPyB2b2lkIDAgOiBlLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuY3VycmVuY3kpID8/IChyID09IG51bGwgPyB2b2lkIDAgOiByLmN1cnJlbmN5KSA/PyB0LmN1cnJlbmN5KS50b1VwcGVyQ2FzZSgpLCBzID0gKCgoKGwgPSBlID09IG51bGwgPyB2b2lkIDAgOiBlLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGwuYW1vdW50QXRvbSkgPz8gKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuYW1vdW50QXRvbSkgPz8gMCkgLyAxMDApLnRvRml4ZWQoMik7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3lDb2RlOiBhLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUubGFiZWwpID8/IG4gPz8gXCJUb3RhbFwiLFxuICAgICAgdHlwZTogZSAhPSBudWxsICYmIGUucGVuZGluZyA/IFwicGVuZGluZ1wiIDogXCJmaW5hbFwiLFxuICAgICAgYW1vdW50OiBzXG4gICAgfVxuICB9O1xufSwgdXIgPSAoe1xuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBlLFxuICBpbml0aWFsUHJldmlldzogdCxcbiAgcHJlZmlsbDogcixcbiAgZGVmYXVsdExhYmVsOiBuXG59KSA9PiB7XG4gIGNvbnN0IHsgY3VycmVuY3lDb2RlOiBhLCB0b3RhbDogbyB9ID0gbmMoe1xuICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGUsXG4gICAgaW5pdGlhbFByZXZpZXc6IHQsXG4gICAgcHJlZmlsbDogcixcbiAgICBkZWZhdWx0TGFiZWw6IG5cbiAgfSk7XG4gIGxldCBzID0ge1xuICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgY3VycmVuY3lDb2RlOiBhLFxuICAgIHJlcXVpcmVkQmlsbGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCIsIFwicG9zdGFsQWRkcmVzc1wiLCBcIm5hbWVcIl0sXG4gICAgcmVxdWlyZWRTaGlwcGluZ0NvbnRhY3RGaWVsZHM6IFtcbiAgICAgIFwiZW1haWxcIixcbiAgICAgIC4uLnIuY2hlY2tvdXRfc2V0dGluZ3MucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MgPyBbXCJwb3N0YWxBZGRyZXNzXCJdIDogW11cbiAgICBdLFxuICAgIHN1cHBvcnRlZE5ldHdvcmtzOiBbXCJ2aXNhXCIsIFwibWFzdGVyQ2FyZFwiLCBcImFtZXhcIiwgXCJkaXNjb3ZlclwiXSxcbiAgICBtZXJjaGFudENhcGFiaWxpdGllczogW1xuICAgICAgXCJzdXBwb3J0czNEU1wiLFxuICAgICAgXCJzdXBwb3J0c0NyZWRpdFwiLFxuICAgICAgXCJzdXBwb3J0c0RlYml0XCIsXG4gICAgICBcInN1cHBvcnRzRU1WXCJcbiAgICBdLFxuICAgIHRvdGFsOiBvLFxuICAgIHJlY3VycmluZ1BheW1lbnRSZXF1ZXN0OiByYyh7XG4gICAgICB0b3RhbDogbyxcbiAgICAgIHByZWZpbGw6IHJcbiAgICB9KVxuICB9O1xuICByZXR1cm4gZSAhPSBudWxsICYmIGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCAmJiAodHlwZW9mIGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCA9PSBcImZ1bmN0aW9uXCIgPyBzID0ge1xuICAgIC4uLnMsXG4gICAgLi4uZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KHMpXG4gIH0gOiBzID0geyAuLi5zLCAuLi5lLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgfSksIHM7XG59LCBvYyA9IHokMS5lbnVtKFtcInRlc3RcIiwgXCJsaXZlXCIsIFwibGl2ZS11c1wiLCBcImxpdmUtaW5cIiwgXCJsaXZlLWFwc2VcIiwgXCJsaXZlLWF1XCJdKSwgYWMgPSB6JDEuZW51bShbXG4gIFwiYXJcIixcbiAgXCJiZy1CR1wiLFxuICBcImNhLUVTXCIsXG4gIFwiY3MtQ1pcIixcbiAgXCJkYS1ES1wiLFxuICBcImRlLURFXCIsXG4gIFwiZWwtR1JcIixcbiAgXCJlbi1VU1wiLFxuICBcImVzLUVTXCIsXG4gIFwiZXQtRUVcIixcbiAgXCJmaS1GSVwiLFxuICBcImZyLUZSXCIsXG4gIFwiaHItSFJcIixcbiAgXCJodS1IVVwiLFxuICBcImlzLUlTXCIsXG4gIFwiaXQtSVRcIixcbiAgXCJqYS1KUFwiLFxuICBcImtvLUtSXCIsXG4gIFwibHQtTFRcIixcbiAgXCJsdi1MVlwiLFxuICBcIm5sLU5MXCIsXG4gIFwibm8tTk9cIixcbiAgXCJwbC1QTFwiLFxuICBcInB0LUJSXCIsXG4gIFwicHQtUFRcIixcbiAgXCJyby1ST1wiLFxuICBcInJ1LVJVXCIsXG4gIFwic2stU0tcIixcbiAgXCJzbC1TSVwiLFxuICBcInN2LVNFXCIsXG4gIFwiemgtQ05cIixcbiAgXCJ6aC1UV1wiXG5dKSwgeyBsb2dfXzogJGUsIGVycl9fOiBjdCB9ID0gSShcImFkeWVuLWNjXCIpLCBpYyA9IHokMS5vYmplY3Qoe1xuICBcIm9wLWFjY291bnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWVudmlyb25tZW50XCI6IG9jLFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6JDEuc3RyaW5nKClcbn0pLCBHbiA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgc2MgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gaWMuc2FmZVBhcnNlKGUpO1xuICBpZiAoIXQuc3VjY2VzcylcbiAgICB0aHJvdyBjdChgQWR5ZW4gM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlKX1gKSwgbmV3IEVycm9yKEduKTtcbiAgcmV0dXJuIHQuZGF0YTtcbn0sIGNjID0gKGUpID0+IEpTT04ucGFyc2UoZSksIEFyID0gKCkgPT4gXCJBZHllbldlYlwiIGluIHdpbmRvdyAmJiBcIkFkeWVuQ2hlY2tvdXRcIiBpbiB3aW5kb3cuQWR5ZW5XZWIsIGxjID0gYXN5bmMgKCkgPT4ge1xuICAkZShcIldhaXRpbmcgZm9yIEFkeWVuIFNESyB0byBsb2FkLi4uXCIpO1xuICBmb3IgKGxldCBlID0gMDsgZSA8IDEwOyBlKyspXG4gICAgQXIoKSB8fCBhd2FpdCBUdCg1MDApO1xuICBpZiAoIUFyKCkpXG4gICAgdGhyb3cgY3QoXCJBZHllbiBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgbmV3IEVycm9yKEduKTtcbiAgcmV0dXJuICRlKFwiQWR5ZW4gU0RLIGxvYWRlZCBzdWNjZXNzZnVsbHlcIiksIHdpbmRvdy5BZHllbldlYi5BZHllbkNoZWNrb3V0O1xufSwgdWMgPSAoZSkgPT4ge1xuICBjb25zdCB7IGhlYWRlcnM6IHQsIGxvY2FsZTogciwgY291bnRyeUNvZGU6IG4sIGNvbXBvbmVudDogYSwgaG9zdDogbywgY2FuY2VsQnV0dG9uOiBzIH0gPSBlLCBjID0gY2ModFtcIm9wLWFkeWVuLWFjdGlvblwiXSk7XG4gIHJldHVybiAkZShgUnVubmluZyBBZHllbiAzRFMgZmxvdyBmb3IgYWN0aW9uIHR5cGU6ICR7Yy50eXBlfWApLCBuZXcgUHJvbWlzZSgobCkgPT4ge1xuICAgIGNvbnN0IHUgPSAoKSA9PiB7XG4gICAgICAkZShcIkNsZWFuaW5nIHVwIEFkeWVuIDNEUyBmbG93XCIpLCBzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBfKSwgby5yZW1vdmUoKTtcbiAgICB9LCBkID0gKHkpID0+IHtcbiAgICAgIGN0KFwiQXV0aGVudGljYXRpb24gZmFpbGVkLiBSZXN1bHQ6XCIsIHkpLCBsKHsgc3RhdHVzOiBGLkZBSUxVUkUsIGNsZWFudXA6IHUgfSk7XG4gICAgfSwgZiA9ICh5KSA9PiB7XG4gICAgICBjdChcIkFkeWVuIGVycm9yOlwiLCB5KSwgbCh7IHN0YXR1czogRi5GQUlMVVJFLCBjbGVhbnVwOiB1IH0pO1xuICAgIH0sIF8gPSAoKSA9PiB7XG4gICAgICBsKHsgc3RhdHVzOiBGLkNBTkNFTExFRCwgY2xlYW51cDogdSB9KTtcbiAgICB9O1xuICAgIHMuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIF8pO1xuICAgIGNvbnN0IG0gPSAoeSwgaCwgYikgPT4ge1xuICAgICAgby5yZW1vdmUoKSwgbCh7IHN0YXR1czogRi5TVUNDRVNTLCBhZGRpdGlvbmFsRGV0YWlsczogeSwgY2xlYW51cDogdSB9KTtcbiAgICB9O1xuICAgIGxjKCkudGhlbihcbiAgICAgICh5KSA9PiB5KHtcbiAgICAgICAgY2xpZW50S2V5OiB0W1wib3AtYWR5ZW4tY2xpZW50LWtleVwiXSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IHRbXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiXSxcbiAgICAgICAgbG9jYWxlOiByLFxuICAgICAgICBjb3VudHJ5Q29kZTogbixcbiAgICAgICAgb25BZGRpdGlvbmFsRGV0YWlsczogbSxcbiAgICAgICAgb25QYXltZW50RmFpbGVkOiBkLFxuICAgICAgICBvbkVycm9yOiBmXG4gICAgICB9KVxuICAgICkudGhlbigoeSkgPT4ge1xuICAgICAgeS5jcmVhdGVGcm9tQWN0aW9uKGMsIHsgY2hhbGxlbmdlV2luZG93U2l6ZTogXCIwM1wiIH0pLm1vdW50KGEpO1xuICAgIH0pO1xuICB9KTtcbn0sIGRjID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGggPyBuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdIDogbmF2aWdhdG9yLmxhbmd1YWdlLCByID0gZSA/PyB0LCBuID0gYWMuc2FmZVBhcnNlKHIpO1xuICByZXR1cm4gbi5zdWNjZXNzID8gKCRlKGBSZXNvbHZlZCBsb2NhbGU6ICR7bi5kYXRhfWApLCBuLmRhdGEpIDogKGN0KGBSZXNvbHZlZCBpbnZhbGlkIGxvY2FsZTogJHtyfS4gRGVmYXVsdGluZyB0byBlbi1VUy5gKSwgXCJlbi1VU1wiKTtcbn0sIFZuID0gKGUpID0+IChlID09IG51bGwgPyB2b2lkIDAgOiBlW1wib3AtYWR5ZW4tYWN0aW9uXCJdKSAhPT0gdm9pZCAwLCBxbiA9IGFzeW5jIChlLCB0LCByKSA9PiB7XG4gIGNvbnN0IG4gPSBzYyh0KSwgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGEuaWQgPSBcImFkeWVuLWNvbnRhaW5lclwiO1xuICBjb25zdCB7IGhvc3Q6IG8sIGlmcmFtZTogcywgY2FuY2VsQnV0dG9uOiBjIH0gPSBSbihcImh0dHA6Ly9leGFtcGxlLmNvbVwiKTtcbiAgcy5yZXBsYWNlV2l0aChhKTtcbiAgY29uc3QgbCA9IGF3YWl0IHVjKHtcbiAgICBoZWFkZXJzOiBuLFxuICAgIGxvY2FsZTogZGMociksXG4gICAgY291bnRyeUNvZGU6IGUsXG4gICAgY29tcG9uZW50OiBhLFxuICAgIGhvc3Q6IG8sXG4gICAgY2FuY2VsQnV0dG9uOiBjXG4gIH0pO1xuICBpZiAobC5jbGVhbnVwKCksIGwuc3RhdHVzID09PSBGLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIGlmIChsLnN0YXR1cyA9PT0gRi5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChsLnN0YXR1cyA9PT0gRi5TVUNDRVNTKSB7XG4gICAgaWYgKCFsLmFkZGl0aW9uYWxEZXRhaWxzKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWQgYnV0IG5vIGFkZGl0aW9uYWwgZGV0YWlscyB3ZXJlIHJldHVybmVkXCIpO1xuICAgIHJldHVybiAkZShcIjNEUyB2ZXJpZmljYXRpb24gc3VjY2VlZGVkXCIpLCB7XG4gICAgICBleGlzdGluZ19jYzoge1xuICAgICAgICBhZGRpdGlvbmFsX2RldGFpbHM6IGwuYWRkaXRpb25hbERldGFpbHMuZGF0YVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZVxuICAgIGt0KGwuc3RhdHVzKTtcbn0sIHpuID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWR5ZW5cIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIEhuID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFkeWVuXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSksIHsgbG9nX186IHBjIH0gPSBJKFwiYXd4LWFwcGxlLXBheVwiKTtcbmFzeW5jIGZ1bmN0aW9uIF9jKGUsIHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBuID0gKGF3YWl0IFJ0KHQuY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFwcGxlX3BheV9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGUudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiB0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5uZXh0X2FjdGlvbl9tZXRhZGF0YSwgYSA9IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uYXBwbGVfcGF5X3Nlc3Npb247XG4gICAgaWYgKCFhKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihhKSwgZyhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLmFcbiAgICB9KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRocm93IHQuc2Vzc2lvbi5hYm9ydCgpLCByO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBtYyhlLCB0KSB7XG4gIHZhciByLCBuO1xuICB0cnkge1xuICAgIGNvbnN0IGEgPSBlLnBheW1lbnQsIG8gPSBscih0Lm5vbkNkZUZvcm1JbnB1dHMsIGEpLCBzID0gcShcbiAgICAgIG8sXG4gICAgICB0LmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgdC5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4uc1xuICAgIH0pLCBhd2FpdCBuZSh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBzW3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHNbcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHNbcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IFoocyksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogSyhcbiAgICAgICAgcyxcbiAgICAgICAgdC5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgICApXG4gICAgfSk7XG4gICAgY29uc3QgYyA9IGF3YWl0IEwodC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYnJvd3Nlcl9pbmZvOiBhbygpLFxuICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YToge1xuICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBKU09OLnN0cmluZ2lmeShhLnRva2VuKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHBjKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgYyksICEoKG4gPSAociA9IGMucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogclswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IG4uaWQpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgY29uc3QgdSA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICByZXR1cm4gdC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudCh1KSwgbGUoe1xuICAgICAgbG9nUHJlZml4OiBcImFkeWVuLWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiB0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBzLFxuICAgICAgY29uZmlybVJlc3VsdDogYyxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICB9KTtcbiAgfSBjYXRjaCAoYSkge1xuICAgIGNvbnN0IG8gPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgdGhyb3cgdC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChvKSwgYTtcbiAgfVxufVxuY29uc3QgeyBsb2dfXzogS2UsIGVycl9fOiBCbiB9ID0gSShcImFkeWVuLWFwcGxlLXBheVwiKSwgZmMgPSB3ZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmFkeWVuLFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIG4gPSB6KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgem4pO1xuICAgIGlmICghbilcbiAgICAgIHJldHVybiByO1xuICAgIGlmIChLZShcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgY3IoKSwgIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiBLZShcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIiksIHI7XG4gICAgaWYgKEtlKFwiQXBwbGUgUGF5IExvYWRlZFwiKSwgIWF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiBLZShcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKSwgcjtcbiAgICBpZiAoIW4ubWV0YWRhdGEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBNKHMpLCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCB2ZShzLCBjLnRva2VuLCBsLCB2b2lkIDApLCBkID0gYXN5bmMgKGYpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IFQuYWR5ZW5BcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGooZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgIEJuKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgXyksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoXyA9PSBudWxsID8gdm9pZCAwIDogXy5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBkXG4gICAgfTtcbiAgfVxuKSwgeWMgPSBIKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBuLFxuICAgIGZvcm1DYWxsYmFja3M6IGFcbiAgfSkgPT4ge1xuICAgIHZhciB5O1xuICAgIGNvbnN0IG8gPSB6KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgem4pLCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsIGluaXRpYWxQcmV2aWV3OiBjIH0gPSBuLCBsID0gZS5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgTShsKSwgZCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCBmID0gdXIoe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBjLFxuICAgICAgcHJlZmlsbDoge1xuICAgICAgICAuLi51XG4gICAgICB9LFxuICAgICAgZGVmYXVsdExhYmVsOiAoeSA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiB5LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KSwgXyA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgZiksIG0gPSB7XG4gICAgICBzZXNzaW9uOiBfLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IG8ubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IGQsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBhLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBuID09IG51bGwgPyB2b2lkIDAgOiBuLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgcmV0dXJuIGcoXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiB0LnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogQXQodSwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pLCBuZXcgUHJvbWlzZSgoaCwgYikgPT4ge1xuICAgICAgY29uc3QgdiA9ICgpID0+IHtcbiAgICAgICAgS2UoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCBiKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIF8ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKHcpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBfYyh3LCBtKTtcbiAgICAgICAgfSBjYXRjaCAoRSkge1xuICAgICAgICAgIGIoRSk7XG4gICAgICAgIH1cbiAgICAgIH0sIF8ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHcgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IHsgLi4uZi50b3RhbCB9XG4gICAgICAgIH07XG4gICAgICAgIF8uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKHcpO1xuICAgICAgfSwgXy5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKHcpID0+IHtcbiAgICAgICAgZyhcImFwcGxlX3BheV9wYXltZW50X2F1dGhvcml6ZWRcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgRSA9IGF3YWl0IG1jKHcsIG0pO1xuICAgICAgICAgIGgoRSk7XG4gICAgICAgIH0gY2F0Y2ggKEUpIHtcbiAgICAgICAgICBiKEUpO1xuICAgICAgICB9XG4gICAgICB9LCBfLm9uY2FuY2VsID0gdiwgXy5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChoKSA9PiB7XG4gICAgICB0aHJvdyBCbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGgpLCBnKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogaFxuICAgICAgfSksIGg7XG4gICAgfSk7XG4gIH1cbiksIHsgbG9nX186IGllLCBlcnJfXzogTWUgfSA9IEkoXCJhZHllbi1nb29nbGUtcGF5XCIpLCBoYyA9IHdlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICB2YXIgZiwgXztcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBIbik7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgaWUoXCJHb29nbGUgUGF5IENQTVwiLCBuKTtcbiAgICBjb25zdCBhID0gbi5tZXRhZGF0YTtcbiAgICBpZiAoIWEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gTWUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCByO1xuICAgIGlmIChpZShcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIiksIGF3YWl0IG9yKCksICEoKF8gPSAoZiA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBmLnBheW1lbnRzKSAhPSBudWxsICYmIF8uYXBpKSlcbiAgICAgIHJldHVybiBNZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHI7XG4gICAgaWYgKGF3YWl0IGFyKGUuYmFzZVVybCkgPT09IFwiUFJPRFVDVElPTlwiICYmICFhLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpXG4gICAgICByZXR1cm4gTWUoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpLCByO1xuICAgIGllKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBNKHMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtID0gcWUoe1xuICAgICAgICBwcmVmaWxsOiBjLFxuICAgICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogYS5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBhLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IGEuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlldzoge1xuICAgICAgICAgIGFtb3VudEF0b206IDAsXG4gICAgICAgICAgY3VycmVuY3k6IFwiVVNEXCJcbiAgICAgICAgfVxuICAgICAgfSksIHkgPSBhd2FpdCB6ZShlLmJhc2VVcmwsIG0pLCB7IHJlc3VsdDogaCB9ID0gYXdhaXQgeS5pc1JlYWR5VG9QYXkobSk7XG4gICAgICBpZiAoIWgpXG4gICAgICAgIHJldHVybiBpZShcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCByO1xuICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgIHJldHVybiBNZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIG0pLCByO1xuICAgIH1cbiAgICBjb25zdCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCB2ZShzLCBjLnRva2VuLCBsLCB2b2lkIDApLCBkID0gYXN5bmMgKG0pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIFQuYWR5ZW5Hb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5tLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoeSkge1xuICAgICAgICBNZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCB5KSwgdC5nZXQub25DaGVja291dEVycm9yKCh5ID09IG51bGwgPyB2b2lkIDAgOiB5Lm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBnYyA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIG0sIHksIGgsIGIsIHYsIHcsIEUsIEMsIE87XG4gICAgaWUoXCJTdGFydGluZyBHb29nbGUgUGF5IGZsb3cuLi5cIik7XG4gICAgY29uc3QgbyA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBIbiksIHsgaW5pdGlhbFByZXZpZXc6IHMsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGMgfSA9IGEsIGwgPSBvLm1ldGFkYXRhO1xuICAgIGlmICghbC5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgdSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgZCA9IGF3YWl0IE0odSksIGYgPSBxZSh7XG4gICAgICBwcmVmaWxsOiBkLFxuICAgICAgZ2F0ZXdheTogXCJhZHllblwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGwucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IGwucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IGwuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IHMsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjXG4gICAgfSk7XG4gICAgZyhcImdvb2dsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBvLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogQXQoZCwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY1xuICAgIH0pO1xuICAgIGNvbnN0IF8gPSBhd2FpdCB6ZShlLmJhc2VVcmwsIGYpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBBID0gYXdhaXQgXy5sb2FkUGF5bWVudERhdGEoZik7XG4gICAgICBpZShcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIEEpO1xuICAgICAgY29uc3QgRCA9IGlyKHIsIEEpLCBRID0gcShcbiAgICAgICAgRCxcbiAgICAgICAgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgICApO1xuICAgICAgaWYgKGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgICAuLi5RXG4gICAgICB9KSwgISgoeSA9IChtID0gQS5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IG0udG9rZW5pemF0aW9uRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IHkudG9rZW4pKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IHVlID0gYXdhaXQgbmUodSwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBRW3AuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogUVtwLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBRW3AuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IFooUSksXG4gICAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBLKFEsIGQuY2hlY2tvdXRfc2V0dGluZ3MpXG4gICAgICB9KSwgQ2UgPSBIZSh1ZSk7XG4gICAgICBpZShcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIENlKTtcbiAgICAgIGxldCBZID0gYXdhaXQgTCh1LCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogZC50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgICBicm93c2VyX2luZm86IGFvKCksXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiAoYiA9IChoID0gQS5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGgudG9rZW5pemF0aW9uRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGIudG9rZW5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWUoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBZKTtcbiAgICAgIGxldCBoZSA9ICh3ID0gKHYgPSBZLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IHZbMF0pID09IG51bGwgPyB2b2lkIDAgOiB3LmlkO1xuICAgICAgY29uc3QgRmUgPSAoRSA9IFkucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogRS5maW5kKChCZSkgPT4gQmUudHlwZSA9PT0gXCJhZHllbi0zZHNcIik7XG4gICAgICBpZiAoRmUgJiYgRmUucmVkaXJlY3RfdXJsKSB7XG4gICAgICAgIGllKFwiQWR5ZW4gM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgRmUpO1xuICAgICAgICBjb25zdCB7IHN0YXR1czogQmUgfSA9IGF3YWl0IGJlKHtcbiAgICAgICAgICB1cmw6IEZlLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpZShg4pWwIEFkeWVuIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7QmV9XWApLCBCZSA9PT0gRi5DQU5DRUxMRUQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIGlmIChCZSA9PT0gRi5GQUlMVVJFKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKEZlICYmICFoZSAmJiAoWSA9IGF3YWl0IEwodSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGQudG9rZW4sXG4gICAgICAgIHRoZWlyX3BtX2lkOiBGZS50aGVpcl9wbV9pZCxcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlclxuICAgICAgICB9XG4gICAgICB9KSwgaWUoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZSBhZnRlciAzRFNcIiwgWSksIGhlID0gKE8gPSAoQyA9IFkucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogQ1swXSkgPT0gbnVsbCA/IHZvaWQgMCA6IE8uaWQpLCAhaGUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgbWV0aG9kIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIGxlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImFkeWVuLWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiB1LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogUSxcbiAgICAgICAgY29uZmlybVJlc3VsdDogWSxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoQSkge1xuICAgICAgdGhyb3cgTWUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgQSksIGcoXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogQVxuICAgICAgfSksIG5ldyBFcnJvcigoQSA9PSBudWxsID8gdm9pZCAwIDogQS5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBJciwgZXJyX186IHdjIH0gPSBJKFwiYXd4LWFjaFwiKSwgdmMgPSBIKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIHZhciBoLCBiO1xuICAgIGNvbnN0IG8gPSBxKHIsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE0ocyksIGwgPSBhLnZlcmlmaWNhdGlvbk1ldGhvZCA/PyBcInBsYWlkXCIsIHUgPSBhd2FpdCBuZShzLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG9bcC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogb1twLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogb1twLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogWihvKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBLKG8sIGMuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGNlKClcbiAgICB9KSwgZCA9IEhlKHUpLCBmID0gZCA9PSBudWxsID8gdm9pZCAwIDogZC5jb25zZW50X2lkLCBtID0gKGIgPSAoaCA9IChhd2FpdCBMKHMsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogYy50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogZixcbiAgICAgICAgdmVyaWZpY2F0aW9uX21ldGhvZDogbCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFjaF9kaXJlY3RfZGViaXRcIixcbiAgICAgICAgICBhY2hfZGlyZWN0X2RlYml0OiB7XG4gICAgICAgICAgICAvL3BsYWlkIHZlcmlmaWNhdGlvbiByZXF1aXJlZCBmaWVsZHNcbiAgICAgICAgICAgIGJ1c2luZXNzX2FjY291bnQ6IGEuaXNCdXNpbmVzc0FjY291bnQgPz8gITEsXG4gICAgICAgICAgICBvd25lcl9uYW1lOiBOdChvW3AuRklSU1RfTkFNRV0sIG9bcC5MQVNUX05BTUVdKSxcbiAgICAgICAgICAgIG93bmVyX2VtYWlsOiBvW3AuRU1BSUxdXG4gICAgICAgICAgICAvL0FDSCBtaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiByZXF1aXJlZCBmaWVsZHNcbiAgICAgICAgICAgIC8vIGFjY291bnRfbnVtYmVyOiBhY2hSZXN1bHQ/LnBheWxvYWQ/LmFjY291bnROdW1iZXIsXG4gICAgICAgICAgICAvLyBhYmFfcm91dGluZ19udW1iZXI6IGFjaFJlc3VsdD8ucGF5bG9hZD8ucm91dGluZ051bWJlcixcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSkucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogaC5maW5kKFxuICAgICAgKHYpID0+IHYudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApKSA9PSBudWxsID8gdm9pZCAwIDogYi5yZWRpcmVjdF91cmw7XG4gICAgaWYgKG0pIHtcbiAgICAgIElyKFwiUGxhaWQgdmVyaWZpY2F0aW9uIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1czogdiB9ID0gYXdhaXQgYmUoe1xuICAgICAgICB1cmw6IG0sXG4gICAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIkFDSCB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBpZiAoSXIoYOKVsCBQbGFpZCB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7dn1dYCksIHYgPT09IEYuQ0FOQ0VMTEVEKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGFpZCB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgaWYgKHYgPT09IEYuRkFJTFVSRSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxhaWQgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICB9XG4gICAgY29uc3QgeSA9IGF3YWl0IEwocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBmXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBsZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYWNoXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHMsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBvLFxuICAgICAgICBjb25maXJtUmVzdWx0OiB5LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoICh2KSB7XG4gICAgICB0aHJvdyB3YyhcIkFDSCBwYXltZW50IGVycm9yXCIsIHYpLCBnKFwiY2hlY2tvdXRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogdlxuICAgICAgfSksIG5ldyBFcnJvcigodiA9PSBudWxsID8gdm9pZCAwIDogdi5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiB5dCB9ID0gSShcImF3eC1hcHBsZS1wYXlcIik7XG5hc3luYyBmdW5jdGlvbiBiYyhlLCB0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IChhd2FpdCBSdCh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGUudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiB0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5uZXh0X2FjdGlvbl9tZXRhZGF0YSwgYSA9IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uYXBwbGVfcGF5X3Nlc3Npb247XG4gICAgaWYgKCFhKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihhKSwgZyhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLmFcbiAgICB9KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRocm93IHQuc2Vzc2lvbi5hYm9ydCgpLCByO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBFYyhlLCB0KSB7XG4gIGlmICghZS5yZWRpcmVjdF91cmwpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kXCIpO1xuICB5dChcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIGUpO1xuICBjb25zdCB7IHN0YXR1czogciB9ID0gYXdhaXQgYmUoe1xuICAgIHVybDogZS5yZWRpcmVjdF91cmwsXG4gICAgYmFzZVVybDogdC5iYXNlVXJsXG4gIH0pO1xuICBpZiAoeXQoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3J9XWApLCByID09PSBGLkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHIgPT09IEYuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgY29uc3QgbiA9IGF3YWl0IEwodC5jb25uZWN0aW9uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiB0LnByZWZpbGwudG9rZW4sXG4gICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICB0aGVpcl9wbV9pZDogZS50aGVpcl9wbV9pZCxcbiAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBlLmNvbnNlbnRfaWQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB5dChcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIG4pLCBuO1xufVxuYXN5bmMgZnVuY3Rpb24gUGMoZSwgdCkge1xuICB2YXIgciwgbiwgYSwgbywgcztcbiAgdHJ5IHtcbiAgICBjb25zdCBjID0gZS5wYXltZW50LCBsID0gbHIodC5ub25DZGVGb3JtSW5wdXRzLCBjKSwgdSA9IHEoXG4gICAgICBsLFxuICAgICAgdC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHQuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLnVcbiAgICB9KTtcbiAgICBjb25zdCBfID0gKGF3YWl0IG5lKHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHVbcC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogdVtwLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogdVtwLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogWih1KSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBLKFxuICAgICAgICB1LFxuICAgICAgICB0LnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICAgICksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogY2UoKVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0uY29uc2VudF9pZDtcbiAgICBpZiAoIV8pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25zZW50IElEIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIGxldCBtID0gYXdhaXQgTCh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogdC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogXyxcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFwcGxlcGF5XCIsXG4gICAgICAgICAgYXBwbGVwYXk6IHtcbiAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkoYy50b2tlbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB5dChcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIG0pO1xuICAgIGxldCB5ID0gKG4gPSAociA9IG0ucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogclswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IG4uaWQ7XG4gICAgY29uc3QgaCA9IChhID0gbS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBhLmZpbmQoXG4gICAgICAodikgPT4gdi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk7XG4gICAgaWYgKGggIT0gbnVsbCAmJiBoLnJlZGlyZWN0X3VybCAmJiBoLmNvbnNlbnRfaWQgJiYgaC50aGVpcl9wbV9pZCAmJiAobSA9IGF3YWl0IEVjKGgsIHQpLCB5ID0gKHMgPSAobyA9IG0ucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogb1swXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHMuaWQpLCAheSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIGNvbnN0IGIgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgcmV0dXJuIHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQoYiksIGxlKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IHQuY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IHUsXG4gICAgICBjb25maXJtUmVzdWx0OiBtLFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgIH0pO1xuICB9IGNhdGNoIChjKSB7XG4gICAgY29uc3QgbCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICB0aHJvdyB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KGwpLCBjO1xuICB9XG59XG5jb25zdCB7IGxvZ19fOiBRZSwgZXJyX186IFluIH0gPSBJKFwiYXd4LWFwcGxlLXBheVwiKSwgU2MgPSB3ZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGpuKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICBpZiAoUWUoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIiksIGF3YWl0IGNyKCksICF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gUWUoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCByO1xuICAgIGlmIChRZShcIkFwcGxlIFBheSBMb2FkZWRcIiksICFhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gUWUoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIiksIHI7XG4gICAgaWYgKCFuLm1ldGFkYXRhLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgTShzKSwgbCA9IGMubW9kZSA9PT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgdmUocywgYy50b2tlbiwgbCwgdm9pZCAwKSwgZCA9IGFzeW5jIChmKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBULmFpcndhbGxleEFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgWW4oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBfKSwgdC5nZXQub25DaGVja291dEVycm9yKChfID09IG51bGwgPyB2b2lkIDAgOiBfLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBkXG4gICAgfTtcbiAgfVxuKSwgQ2MgPSBIKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBuLFxuICAgIGZvcm1DYWxsYmFja3M6IGFcbiAgfSkgPT4ge1xuICAgIHZhciB5O1xuICAgIGNvbnN0IG8gPSB6KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgam4pLCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsIGluaXRpYWxQcmV2aWV3OiBjIH0gPSBuLCBsID0gZS5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgTShsKSwgZCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCBmID0gdXIoe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBjLFxuICAgICAgcHJlZmlsbDoge1xuICAgICAgICAuLi51XG4gICAgICB9LFxuICAgICAgZGVmYXVsdExhYmVsOiAoeSA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiB5LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KSwgXyA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgZiksIG0gPSB7XG4gICAgICBzZXNzaW9uOiBfLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IG8ubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IGQsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBhLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBuID09IG51bGwgPyB2b2lkIDAgOiBuLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgcmV0dXJuIGcoXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiB0LnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogQXQodSwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pLCBuZXcgUHJvbWlzZSgoaCwgYikgPT4ge1xuICAgICAgY29uc3QgdiA9ICgpID0+IHtcbiAgICAgICAgUWUoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCBiKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIF8ub25jYW5jZWwgPSB2LCBfLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jICh3KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgYmModywgbSk7XG4gICAgICAgIH0gY2F0Y2ggKEUpIHtcbiAgICAgICAgICBiKEUpO1xuICAgICAgICB9XG4gICAgICB9LCBfLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB3ID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiB7IC4uLmYudG90YWwgfVxuICAgICAgICB9O1xuICAgICAgICBfLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbih3KTtcbiAgICAgIH0sIF8ub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jICh3KSA9PiB7XG4gICAgICAgIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9hdXRob3JpemVkXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IEUgPSBhd2FpdCBQYyh3LCBtKTtcbiAgICAgICAgICBoKEUpO1xuICAgICAgICB9IGNhdGNoIChFKSB7XG4gICAgICAgICAgYihFKTtcbiAgICAgICAgfVxuICAgICAgfSwgXy5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChoKSA9PiB7XG4gICAgICB0aHJvdyBZbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGgpLCBnKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogaFxuICAgICAgfSksIGg7XG4gICAgfSk7XG4gIH1cbiksIHsgbG9nX186IHJlLCBlcnJfXzogTGUgfSA9IEkoXCJhd3gtZ29vZ2xlLXBheVwiKSwga2MgPSB3ZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgdmFyIGYsIF87XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsICRuKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICByZShcIkdvb2dsZSBQYXkgQ1BNXCIsIG4pO1xuICAgIGNvbnN0IGEgPSBuLm1ldGFkYXRhO1xuICAgIGlmICghYS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHJldHVybiBMZShcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIiksIHI7XG4gICAgaWYgKHJlKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgb3IoKSwgISgoXyA9IChmID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGYucGF5bWVudHMpICE9IG51bGwgJiYgXy5hcGkpKVxuICAgICAgcmV0dXJuIExlKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgcjtcbiAgICBpZiAoYXdhaXQgYXIoZS5iYXNlVXJsKSA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIWEuZ29vZ2xlX3BheV9tZXJjaGFudF9pZClcbiAgICAgIHJldHVybiBMZShcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIiksIHI7XG4gICAgcmUoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE0ocyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG0gPSBxZSh7XG4gICAgICAgIHByZWZpbGw6IGMsXG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBhLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IGEucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogYS5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgeSA9IGF3YWl0IHplKGUuYmFzZVVybCwgbSksIHsgcmVzdWx0OiBoIH0gPSBhd2FpdCB5LmlzUmVhZHlUb1BheShtKTtcbiAgICAgIGlmICghaClcbiAgICAgICAgcmV0dXJuIHJlKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIHI7XG4gICAgfSBjYXRjaCAobSkge1xuICAgICAgcmV0dXJuIExlKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgbSksIHI7XG4gICAgfVxuICAgIGNvbnN0IGwgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IHZlKHMsIGMudG9rZW4sIGwsIHZvaWQgMCksIGQgPSBhc3luYyAobSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgVC5haXJ3YWxsZXhHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5tLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoeSkge1xuICAgICAgICBMZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCB5KSwgdC5nZXQub25DaGVja291dEVycm9yKCh5ID09IG51bGwgPyB2b2lkIDAgOiB5Lm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBkXG4gICAgfTtcbiAgfVxuKSwgQWMgPSBIKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIHZhciBtLCB5LCBoLCBiLCB2LCB3LCBFO1xuICAgIHJlKFwiU3RhcnRpbmcgR29vZ2xlIFBheSBmbG93Li4uXCIpO1xuICAgIGNvbnN0IG8gPSB6KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgJG4pLCB7IGluaXRpYWxQcmV2aWV3OiBzLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjIH0gPSBhLCBsID0gby5tZXRhZGF0YTtcbiAgICBpZiAoIWwucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IHUgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGQgPSBhd2FpdCBNKHUpLCBmID0gcWUoe1xuICAgICAgcHJlZmlsbDogZCxcbiAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogbC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogbC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogbC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogcyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGNcbiAgICB9KTtcbiAgICBnKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IG8ucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBBdChkLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjXG4gICAgfSk7XG4gICAgY29uc3QgXyA9IGF3YWl0IHplKGUuYmFzZVVybCwgZik7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IEMgPSBhd2FpdCBfLmxvYWRQYXltZW50RGF0YShmKTtcbiAgICAgIHJlKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgQyk7XG4gICAgICBjb25zdCBPID0gaXIociwgQyksIEEgPSBxKFxuICAgICAgICBPLFxuICAgICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgYSA9PSBudWxsID8gdm9pZCAwIDogYS5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICAgICk7XG4gICAgICByZShcIl9fX1wiLCBBKSwgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLkFcbiAgICAgIH0pO1xuICAgICAgY29uc3QgRCA9ICh5ID0gKG0gPSBDLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogbS50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogeS50b2tlbjtcbiAgICAgIGlmICghRClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICBjb25zdCBRID0gYXdhaXQgbmUodSwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBBW3AuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogQVtwLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBBW3AuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IFooQSksXG4gICAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBLKEEsIGQuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgICBjdXN0b21lcl9sYW5ndWFnZTogY2UoKVxuICAgICAgfSksIFNlID0gSGUoUSk7XG4gICAgICByZShcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIFNlKTtcbiAgICAgIGxldCB1ZSA9IGF3YWl0IEwodSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGQudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgICAgLy8gR29vZ2xlUGF5J3MgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW4gcHJvdmlkZWQgdG8gdmVyaWZ5IHRoZSBjb25zZW50IGZpcnN0XG4gICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IFNlID09IG51bGwgPyB2b2lkIDAgOiBTZS5jb25zZW50X2lkLFxuICAgICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBcImdvb2dsZXBheVwiLFxuICAgICAgICAgICAgZ29vZ2xlcGF5OiB7XG4gICAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBEXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJlKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgdWUpO1xuICAgICAgbGV0IENlID0gKGIgPSAoaCA9IHVlLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IGhbMF0pID09IG51bGwgPyB2b2lkIDAgOiBiLmlkO1xuICAgICAgY29uc3QgWSA9ICh2ID0gdWUucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogdi5maW5kKFxuICAgICAgICAoaGUpID0+IGhlLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgICApO1xuICAgICAgaWYgKFkgJiYgWS5yZWRpcmVjdF91cmwpIHtcbiAgICAgICAgcmUoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBZKTtcbiAgICAgICAgY29uc3QgeyBzdGF0dXM6IGhlIH0gPSBhd2FpdCBiZSh7XG4gICAgICAgICAgdXJsOiBZLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZShg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7aGV9XWApLCBoZSA9PT0gRi5DQU5DRUxMRUQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIGlmIChoZSA9PT0gRi5GQUlMVVJFKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKFkgJiYgIUNlICYmICh1ZSA9IGF3YWl0IEwodSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGQudG9rZW4sXG4gICAgICAgIHRoZWlyX3BtX2lkOiBZLnRoZWlyX3BtX2lkLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBZLmNvbnNlbnRfaWRcbiAgICAgICAgfVxuICAgICAgfSksIHJlKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgdWUpLCBDZSA9IChFID0gKHcgPSB1ZS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiB3WzBdKSA9PSBudWxsID8gdm9pZCAwIDogRS5pZCksICFDZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgICByZXR1cm4gbGUoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiB1LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogQSxcbiAgICAgICAgY29uZmlybVJlc3VsdDogdWUsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKEMpIHtcbiAgICAgIHRocm93IExlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIEMpLCBnKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IENcbiAgICAgIH0pLCBuZXcgRXJyb3IoKEMgPT0gbnVsbCA/IHZvaWQgMCA6IEMubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgSm4gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBXbiA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5hc3luYyBmdW5jdGlvbiBJYyhlLCB0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IChhd2FpdCBSdCh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhcHBsZV9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZS52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLm5leHRfYWN0aW9uX21ldGFkYXRhLCBhID0gbiA9PSBudWxsID8gdm9pZCAwIDogbi5hcHBsZV9wYXlfc2Vzc2lvbjtcbiAgICBpZiAoIWEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgdC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKGEpLCBnKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4uYVxuICAgIH0pO1xuICB9IGNhdGNoIChyKSB7XG4gICAgdGhyb3cgdC5zZXNzaW9uLmFib3J0KCksIHI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIFRjKGUsIHQpIHtcbiAgdmFyIHIsIG47XG4gIHRyeSB7XG4gICAgY29uc3QgYSA9IGUucGF5bWVudCwgbyA9IGxyKHQubm9uQ2RlRm9ybUlucHV0cywgYSksIHMgPSBxKG8sIHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4uc1xuICAgIH0pLCBhd2FpdCBuZSh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBzW3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHNbcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHNbcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IFoocyksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogSyhcbiAgICAgICAgcyxcbiAgICAgICAgdC5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgICApLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGNlKClcbiAgICB9KTtcbiAgICBjb25zdCBjID0ge1xuICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkFQUExFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkoYS50b2tlbi5wYXltZW50RGF0YSkpXG4gICAgfSwgbCA9IGF3YWl0IEwodC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IGNcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoISgobiA9IChyID0gbC5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiByWzBdKSA9PSBudWxsID8gdm9pZCAwIDogbi5pZCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICBjb25zdCBkID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIHJldHVybiB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KGQpLCBsZSh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXV0aG5ldC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogdC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogcyxcbiAgICAgIGNvbmZpcm1SZXN1bHQ6IGwsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGEpIHtcbiAgICBjb25zdCBvID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIHRocm93IHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQobyksIGE7XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IGh0LCBlcnJfXzogWm4gfSA9IEkoXCJhdXRobmV0LWFwcGxlcGF5XCIpLCBSYyA9IHdlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEpuKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICBpZiAoaHQoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIiksIGF3YWl0IGNyKCksICF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gaHQoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCByO1xuICAgIGlmICghYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIGh0KFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCByO1xuICAgIGlmICghbi5tZXRhZGF0YS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE0ocyksIGwgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IHZlKHMsIGMudG9rZW4sIGwsIHZvaWQgMCksIGQgPSBhc3luYyAoZikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgVC5hdXRob3JpemVOZXRBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGooZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgIFpuKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgXyksIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IF9cbiAgICAgICAgfSksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoXyA9PSBudWxsID8gdm9pZCAwIDogXy5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBOYyA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBjdXN0b21QYXJhbXM6IG4sXG4gICAgZm9ybUNhbGxiYWNrczogYVxuICB9KSA9PiB7XG4gICAgdmFyIHk7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldzogbywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyB9ID0gbiwgYyA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBKbiksIGwgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHUgPSBhd2FpdCBNKGwpLCBkID0gdS5tb2RlID09PSBcInNldHVwXCIsIGYgPSB1cih7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IG8sXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgZGVmYXVsdExhYmVsOiAoeSA9IGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiB5LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KTtcbiAgICBnKFwiYXBwbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogdC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzXG4gICAgfSk7XG4gICAgY29uc3QgXyA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgZiksIG0gPSB7XG4gICAgICBzZXNzaW9uOiBfLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IHQubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IGQsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBhXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKGgsIGIpID0+IHtcbiAgICAgIF8ub25jYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGh0KFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSwgYihuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH0sIF8ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKHYpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBJYyh2LCBtKTtcbiAgICAgICAgfSBjYXRjaCAodykge1xuICAgICAgICAgIGIodyk7XG4gICAgICAgIH1cbiAgICAgIH0sIF8ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHYgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IGYudG90YWxcbiAgICAgICAgfTtcbiAgICAgICAgXy5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24odik7XG4gICAgICB9LCBfLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAodikgPT4ge1xuICAgICAgICBnKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB3ID0gYXdhaXQgVGModiwgbSk7XG4gICAgICAgICAgaCh3KTtcbiAgICAgICAgfSBjYXRjaCAodykge1xuICAgICAgICAgIGIodyk7XG4gICAgICAgIH1cbiAgICAgIH0sIF8uYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoaCkgPT4ge1xuICAgICAgdGhyb3cgWm4oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBoKSwgZyhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGhcbiAgICAgIH0pLCBoO1xuICAgIH0pO1xuICB9XG4pLCB7IGxvZ19fOiBJZSwgZXJyX186IFhlIH0gPSBJKFwiYXV0aG5ldC1nb29nbGVwYXlcIiksIEZjID0gd2UoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIHZhciBkLCBmO1xuICAgIEllKFwiSW5pdGlhbGl6aW5nIEF1dGhuZXQgR29vZ2xlUGF5IGZsb3dcIik7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBXbik7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgSWUoXCJHb29nbGUgUGF5IENQTVwiLCBuKTtcbiAgICBjb25zdCBhID0gbi5tZXRhZGF0YTtcbiAgICBpZiAoIWEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gWGUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCByO1xuICAgIGlmIChJZShcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIiksIGF3YWl0IG9yKCksICEoKGYgPSAoZCA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBkLnBheW1lbnRzKSAhPSBudWxsICYmIGYuYXBpKSlcbiAgICAgIHJldHVybiBYZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHI7XG4gICAgSWUoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgbyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IE0obyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IF8gPSBxZSh7XG4gICAgICAgIHByZWZpbGw6IHMsXG4gICAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBhLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IGEucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogYS5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgbSA9IGF3YWl0IHplKGUuYmFzZVVybCwgXyksIHsgcmVzdWx0OiB5IH0gPSBhd2FpdCBtLmlzUmVhZHlUb1BheShfKTtcbiAgICAgIGlmICgheSlcbiAgICAgICAgcmV0dXJuIEllKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIHI7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgcmV0dXJuIFhlKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgXyksIHI7XG4gICAgfVxuICAgIGNvbnN0IGMgPSBzLm1vZGUgPT09IFwic2V0dXBcIiwgbCA9IGF3YWl0IHZlKG8sIHMudG9rZW4sIGMsIHZvaWQgMCksIHUgPSBhc3luYyAoXykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgVC5hdXRob3JpemVOZXRHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5fLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IGxcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICBYZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBtKSwgZyhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IG1cbiAgICAgICAgfSksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigobSA9PSBudWxsID8gdm9pZCAwIDogbS5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IHVcbiAgICB9O1xuICB9XG4pLCBNYyA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIG0sIHksIGgsIGI7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldzogbywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyB9ID0gYSwgbCA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBXbikubWV0YWRhdGEsIHUgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGQgPSBhd2FpdCBNKHUpLCBmID0gcWUoe1xuICAgICAgcHJlZmlsbDogZCxcbiAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogbC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogbC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogbC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogbyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHNcbiAgICB9KTtcbiAgICBnKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IHIucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBkLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pO1xuICAgIGNvbnN0IF8gPSBhd2FpdCB6ZShlLmJhc2VVcmwsIGYpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB2ID0gYXdhaXQgXy5sb2FkUGF5bWVudERhdGEoZik7XG4gICAgICBJZShcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIHYpO1xuICAgICAgY29uc3QgdyA9IGlyKHQsIHYpLCBFID0gcSh3LCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4uRVxuICAgICAgfSk7XG4gICAgICBjb25zdCBDID0gKHkgPSAobSA9IHYucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBtLnRva2VuaXphdGlvbkRhdGEpID09IG51bGwgPyB2b2lkIDAgOiB5LnRva2VuO1xuICAgICAgaWYgKCFDKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IE8gPSBhd2FpdCBuZSh1LCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IEVbcC5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBFW3AuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IEVbcC5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogWihFKSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IEsoRSwgZC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBjZSgpXG4gICAgICB9KTtcbiAgICAgIEllKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIE8pO1xuICAgICAgY29uc3QgQSA9IGF3YWl0IEwodSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGQudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5HT09HTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShDKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoISgoYiA9IChoID0gQS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBoWzBdKSA9PSBudWxsID8gdm9pZCAwIDogYi5pZCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIGxlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBFLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBBLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoICh2KSB7XG4gICAgICB0aHJvdyBYZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCB2KSwgZyhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiB2XG4gICAgICB9KSwgbmV3IEVycm9yKCh2ID09IG51bGwgPyB2b2lkIDAgOiB2Lm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IExjLCBlcnJfXzogS24gfSA9IEkoXCJwb2NreXQtY2NcIiksIERjID0geiQxLm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogeiQxLnN0cmluZygpXG59KSwgeGMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gRGMuc2FmZVBhcnNlKGUpO1xuICBpZiAoIXQuc3VjY2Vzcykge1xuICAgIGNvbnN0IHIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIG4gPSBgUG9ja3l0IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YDtcbiAgICB0aHJvdyBLbihuKSwgbmV3IEVycm9yKHIpO1xuICB9XG4gIHJldHVybiB0LmRhdGE7XG59LCBRbiA9IChlKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdCA9IG5ldyBVUkwoZSA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwidmF1bHRJZFwiKTtcbiAgICBpZiAoIXQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2YXVsdCBJRCBmb3VuZCBpbiAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gTGMoYDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW1ZhdWx0IElEOiAke3R9XWApLCB0O1xuICB9IGNhdGNoICh0KSB7XG4gICAgY29uc3QgciA9IFwiRXJyb3IgdmVyaWZ5aW5nIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IEtuKHIsIGBSZXN1bHRpbmcgVVJMOiAke2V9LlxuRXJyb3I6ICR7ZWUodCl9YCksIG5ldyBFcnJvcihyKTtcbiAgfVxufSwgSHQgPSAoZSwgdCkgPT4gbmV3IFVSTChlKS5zZWFyY2hQYXJhbXMuZ2V0KHQpLCBPYyA9IChlKSA9PiAoZSA9PSBudWxsID8gdm9pZCAwIDogZVtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBVYyA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSB4Yyh0KSwgbiA9IGF3YWl0IEZuKHsgdXJsOiByW1wib3AtcG9ja3l0LTNkcy11cmxcIl0sIGJhc2VVcmw6IGUgfSk7XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIHZhdWx0X2lkOiBRbihuLmhyZWYgPz8gXCJcIiksXG4gICAgICB0cmFuc2FjdGlvbl9ubzogcltcIm9wLXBvY2t5dC10eG4tbm9cIl0sXG4gICAgICByZWZlcmVuY2Vfbm86IHJbXCJvcC1wb2NreXQtcmVmLW5vXCJdXG4gICAgfVxuICB9O1xufSwgeyBsb2dfXzogVHIgfSA9IEkoXCJzdHJpcGUtY2NcIiksIGpjID0geiQxLm9iamVjdCh7XG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogeiQxLnN0cmluZygpXG59KSwgWG4gPSBhc3luYyAoZSkgPT4ge1xuICBnKFwiM2RzX3N0cmlwZV9yZWRpcmVjdFwiLCB7XG4gICAgLi4uZVxuICB9KSwgVHIoYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3cgW0NsaWVudCBTZWNyZXQ6ICR7ZS5jbGllbnRfc2VjcmV0LnN1YnN0cmluZygwLCA4KX0uLi5dYCksIGF3YWl0IElpKGUpLCBnKFwiM2RzX3N0cmlwZV9jb21wbGV0ZVwiKSwgVHIoXCLilbAgU3RyaXBlIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcIik7XG59LCAkYyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBqYy5zYWZlUGFyc2UoZSk7XG4gIGlmICghdC5zdWNjZXNzKVxuICAgIHRocm93IG5ldyBFcnJvcihgU3RyaXBlIDNEUyBtZXRhZGF0YSBoYXMgdW5leHBlY3RlZCBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkodC5lcnJvci5lcnJvcnMpfWApO1xuICByZXR1cm4ge1xuICAgIHN0cmlwZV9wazogdC5kYXRhLnN0cmlwZV9wayxcbiAgICBjbGllbnRfc2VjcmV0OiB0LmRhdGEuY2xpZW50X3NlY3JldCxcbiAgICBzdHJpcGVfcG1faWQ6IHQuZGF0YS5zdHJpcGVfcG1faWRcbiAgfTtcbn0sIEdjID0gNCwgeyBsb2dfXzogTmUsIGVycl9fOiBQdCB9ID0gSShcInVuaWZpZWQtY2NcIiksIFZjID0gYXN5bmMgKHtcbiAgY29udGV4dDogZSxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICBub25DZGVGb3JtSW5wdXRzOiByLFxuICBmb3JtQ2FsbGJhY2tzOiBuLFxuICBjdXN0b21QYXJhbXM6IGFcbn0pID0+IHtcbiAgTmUoXCLilJwgUnVubmluZyB1bmlmaWVkIENDIGZsb3cuLi5cIiwgeyBjaGVja291dFBheW1lbnRNZXRob2Q6IHQgfSk7XG4gIGNvbnN0IG8gPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBNKG8pO1xuICBOZShg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtzLm1vZGV9XWApO1xuICBjb25zdCBjID0gcShyLCBuLmdldC5vblZhbGlkYXRpb25FcnJvciksIGwgPSB7XG4gICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBjLFxuICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sXG4gICAgICAvLyBGb3IgZGVidWdnaW5nIHB1cnBvc2VzIGluIHRoZSBjaGVja291dCBhdHRlbXB0IGxvZ3NcbiAgICAgIGRldmljZVRva2VuOiBUbigpXG4gICAgfSxcbiAgICB1c2VfdW5pZmllZF9jY19mbG93OiAhMCxcbiAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IHtcbiAgICAgIGxpbmVfaXRlbXM6IHMubGluZV9pdGVtcyxcbiAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcy5hbW91bnRfdG90YWxfYXRvbVxuICAgIH0sXG4gICAgcGF5bWVudF9yb3V0ZV9pZDogYS5wYXltZW50Um91dGVJZFxuICB9O1xuICBQdChhLCBsKSwgTmUoYOKUnCBUb2tlbml6aW5nIGNhcmQgaW5mbyBpbiBQYXJ0aWFsIFBNcyBbU2Vzc2lvbjogJHtlLmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgY29uc3QgdSA9IGF3YWl0IEVuKGEuY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZFxuICB9KTtcbiAgTG4odSwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICBjb25zdCBkID0gYXdhaXQgYm4obywgbCk7XG4gIGlmIChOZShcIuKUnCBzdGFydFBmIHJlc3VsdFwiLCBkKSwgZC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgIHJldHVybiBlbyhzLm1vZGUsIGQpO1xuICBpZiAoIWQuY2hlY2tvdXRfYXR0ZW1wdF9pZClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyBjaGVja291dCBhdHRlbXB0IElEIGZyb20gUEYgcmVzdWx0XCIpO1xuICByZXR1cm4gcWMoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgcHJlZmlsbDogcyxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zOiBsLFxuICAgIGFueUNkZUNvbm5lY3Rpb246IG8sXG4gICAgc3RhcnRQZlJlc3VsdDogZCxcbiAgICBjaGVja291dEF0dGVtcHRJZDogZC5jaGVja291dF9hdHRlbXB0X2lkXG4gIH0pO1xufSwgcWMgPSBhc3luYyAoZSkgPT4ge1xuICBjb25zdCB7XG4gICAgY29udGV4dDogdCxcbiAgICBwcmVmaWxsOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IG4sXG4gICAgY29tbW9uQ2hlY2tvdXRQYXJhbXM6IGEsXG4gICAgYW55Q2RlQ29ubmVjdGlvbjogbyxcbiAgICBzdGFydFBmUmVzdWx0OiBzLFxuICAgIGNoZWNrb3V0QXR0ZW1wdElkOiBjXG4gIH0gPSBlO1xuICBsZXQgbCA9IHM7XG4gIGZvciAobGV0IHUgPSAwOyB1IDwgR2M7IHUrKykge1xuICAgIE5lKGDilJwgUnVubmluZyBjb25maXJtIGxvb3AgaXRlcmF0aW9uICR7dX1gKSwgZyhcInVuaWZpZWRfY2NfY29uZmlybV9sb29wX2l0ZXJhdGlvblwiLCB7IGl0ZXJhdGlvbjogdSB9KTtcbiAgICBjb25zdCB7IHVzZXJBY3Rpb246IGQgfSA9IEJjKGwpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmID0gYXdhaXQgemModC5iYXNlVXJsLCBkLCByLCBuKTtcbiAgICAgIGEuZXh0cmFfbWV0YWRhdGEgPSB7XG4gICAgICAgIC4uLmEuZXh0cmFfbWV0YWRhdGEsXG4gICAgICAgIC4uLmYubWV0YWRhdGFGb3JDb25maXJtU3RlcFxuICAgICAgfSwgTmUoXCLilJwgTmV3IGV4dHJhIG1ldGFkYXRhXCIsIGEuZXh0cmFfbWV0YWRhdGEpO1xuICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgIGNvbnN0IF8gPSBlZShmKTtcbiAgICAgIFB0KGDilJwgRXJyb3IgaW4gcnVubmluZyB1c2VyIGFjdGlvbiBpbiBpdGVyYXRpb24gJHt1fS4gQ29udGludWluZyB0byBjb25maXJtIHN0ZXAuLi5gLCBfKSwgZyhcInVuaWZpZWRfY2NfdXNlcl9hY3Rpb25fZXJyb3JcIiwgeyBlcnJvcl9tZXNzYWdlOiBfLCBpdGVyYXRpb246IHUgfSk7XG4gICAgfVxuICAgIGlmIChsID0gYXdhaXQgTChvLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBjLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBhLmV4dHJhX21ldGFkYXRhXG4gICAgfSksIE5lKGDilJwgY29uZmlybVBmIHJlc3VsdCAoaXRlcmF0aW9uICR7dX0pYCwgbCksIGwuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgIHJldHVybiBlbyhyLm1vZGUsIGwpO1xuICB9XG4gIHRocm93IGcoXCJ1bmlmaWVkX2NjX3VuZXhwZWN0ZWRfYnJhbmNoXCIsIHtcbiAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbC5jaGVja291dF9hdHRlbXB0X2lkLFxuICAgIGNvbmZpcm1QRlJlc3VsdDogbFxuICB9KSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZXJyb3IsIHBsZWFzZSB0cnkgYW5vdGhlciBwYXltZW50IG1ldGhvZFwiKTtcbn0sIHpjID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHtcbiAgaWYgKHQuX3VuaWZpZWRfY2NfYWN0aW9uX25hbWUgPT09IFwiM0RTX1JFUVVJUkVEXCIpIHtcbiAgICBpZiAodC50eXBlID09PSBcInN0cmlwZV8zZHNcIilcbiAgICAgIHJldHVybiBhd2FpdCBYbigkYyh0KSksIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICBpZiAoT24odCkpXG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFpcndhbGxleDogYXdhaXQgVW4oZSwgdCkgfSB9O1xuICAgIGlmIChWbih0KSlcbiAgICAgIHJldHVybiB7IG1ldGFkYXRhRm9yQ29uZmlybVN0ZXA6IHsgYWR5ZW46IGF3YWl0IHFuKFxuICAgICAgICBuW3AuQ09VTlRSWV0sXG4gICAgICAgIHQsXG4gICAgICAgIHIubG9jYWxlXG4gICAgICApIH0gfTtcbiAgICBpZiAoSGModCkpXG4gICAgICByZXR1cm4gYXdhaXQgcm8oeyByZXF1aXJlZF91c2VyX2FjdGlvbnM6IFt0XSB9LCBlKSwgeyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7fSB9O1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIDNEUyB1c2VyIGFjdGlvbjogJHtKU09OLnN0cmluZ2lmeSh0KX1gKTtcbiAgfSBlbHNlXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlcXVpcmVkIHVzZXIgYWN0aW9uOiAke0pTT04uc3RyaW5naWZ5KHQpfWApO1xufSwgSGMgPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0byhbZV0pLCAhMDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuICExO1xuICB9XG59LCBCYyA9IChlKSA9PiB7XG4gIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykge1xuICAgIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggPT09IDApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gICAgaWYgKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCA+IDEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBtdWx0aXBsZSByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIH0gZWxzZSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIGNvbnN0IHQgPSBzYS5zYWZlUGFyc2UoZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xuICBpZiAoIXQuc3VjY2VzcylcbiAgICB0aHJvdyBQdChcIlVzZXIgYWN0aW9uIHJhdyBwYXlsb2FkXCIsIGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKSwgUHQoXCJQYXJzaW5nIGVycm9yXCIsIHQuZXJyb3IpLCBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBzY2hlbWEgb2YgdXNlciBhY3Rpb24gcGF5bG9hZCBpcyBub3QgdmFsaWRcIik7XG4gIHJldHVybiB7XG4gICAgdXNlckFjdGlvbjogdC5kYXRhXG4gIH07XG59LCBlbyA9IChlLCB0KSA9PiB7XG4gIHZhciByO1xuICBpZiAoZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgY29uc3QgbiA9IHQuY2NfcG1faWQgPz8gKChyID0gdC5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiByWzBdLmlkKTtcbiAgICBpZiAoIW4pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyBDQyBQTSBJRCBvciBwYXltZW50X21ldGhvZHMgZm91bmQgaW4gUEYgcmVzdWx0XCIpO1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICByZXN1bHQ6IHtcbiAgICAgICAgcGF5bWVudF9tZXRob2RfaWQ6IG5cbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGlmICghdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gY2hlY2tvdXQgc3VjY2VzcyByZXNwb25zZSBmcm9tIHN0YXJ0UEZcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgIHJlc3VsdDogdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgfTtcbiAgfVxufSwgeyBsb2dfXzogTiwgZXJyX186IFJyIH0gPSBJKFwiY29tbW9uLWNjXCIpO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBZYyA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIG0sIHk7XG4gICAgTihcIuKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uXCIsIHsgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0IH0pO1xuICAgIGNvbnN0IG8gPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBNKG8pO1xuICAgIGcoXCJjb21tb25fY2NfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIC4uLnQsXG4gICAgICBwcmVmaWxsOiBzXG4gICAgfSk7XG4gICAgY29uc3QgYyA9ICgobSA9IHMuZmluYWxfZmVhdHVyZV9yb2xsb3V0X3NldHRpbmdzKSA9PSBudWxsID8gdm9pZCAwIDogbS51bmlmaWVkX2NjKSA/PyAwO1xuICAgIE4oYOKUnCBVbmlmaWVkIENDIHJvbGxvdXQ6ICR7TWF0aC5yb3VuZChjICogMTAwKX0lYCk7XG4gICAgY29uc3QgbCA9IE1hdGgucmFuZG9tKCksIHUgPSBsIDwgYywgZCA9IHtcbiAgICAgIHJvbGw6IGwsXG4gICAgICB1bmlmaWVkQ0NSb2xsb3V0UmF0aW86IGMsXG4gICAgICB1c2VVbmlmaWVkQ0NGbG93OiB1XG4gICAgfTtcbiAgICBpZiAodSlcbiAgICAgIHJldHVybiBOKGDilJwgUGlja2VkIHVuaWZpZWQgQ0MgZmxvdyAoJHtsfSB2cyAke2N9KWApLCBnKFwidW5pZmllZF9jY19mbG93X3BpY2tlZFwiLCBkKSwgVmMoe1xuICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgICAgIGN1c3RvbVBhcmFtczogYSxcbiAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICB9KTtcbiAgICBOKGDilJwgUGlja2VkIGxlZ2FjeSBDQyBmbG93ICgke2x9IHZzICR7Y30pYCksIGcoXCJsZWdhY3lfY2NfZmxvd19waWNrZWRcIiwgZCksIE4oYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cy5tb2RlfV1gKTtcbiAgICBjb25zdCBmID0gcShcbiAgICAgIHIsXG4gICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHMuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICApO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4uZlxuICAgIH0pO1xuICAgIGNvbnN0IF8gPSB7XG4gICAgICBzZXNzaW9uX2lkOiBlLmVsZW1lbnRzU2Vzc2lvbklkLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBmLFxuICAgICAgZXh0cmFfbWV0YWRhdGE6IHtcbiAgICAgICAgb3JpZ2luOiB3aW5kb3cubG9jYXRpb24ub3JpZ2luXG4gICAgICB9LFxuICAgICAgdXNlX3VuaWZpZWRfY2NfZmxvdzogITEsXG4gICAgICBwYXltZW50X3JvdXRlX2lkOiBhLnBheW1lbnRSb3V0ZUlkLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGNlKClcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBOKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2UuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgY29uc3QgaCA9IGF3YWl0IEVuKGEuY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgICAgIHNlc3Npb25faWQ6IGUuZWxlbWVudHNTZXNzaW9uSWRcbiAgICAgIH0pO1xuICAgICAgaWYgKExuKGgsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgcy5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgTihg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHtzLnRva2VufV1gKTtcbiAgICAgICAgY29uc3QgYiA9IGF3YWl0IGdzKG8sIF8pO1xuICAgICAgICByZXR1cm4gTihg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke2IucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBiIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBOKGDilJwgSW5pdGlhbCBjaGVja291dCBmbG93LiBDaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtlLmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgICAgY29uc3QgYiA9IGF3YWl0IFNyKG8sIF8pO1xuICAgICAgICByZXR1cm4gTihcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYiB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgIGlmIChoIGluc3RhbmNlb2Ygdm4gJiYgaC5vcmlnaW5hbEVycm9yTWVzc2FnZS5pbmNsdWRlcyhcIjNEU19SRVFVSVJFRFwiKSkge1xuICAgICAgICBOKFwi4pScIENhcmQgcmVxdWlyZXMgM0RTLCBzdGFydGluZyBub24tbGVnYWN5IHBheW1lbnQgZmxvd1wiKSwgTihcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBoLnJlc3BvbnNlLmhlYWRlcnMpLCBnKFwiM2RzX3JlcXVpcmVkXCIsIHtcbiAgICAgICAgICAuLi50LFxuICAgICAgICAgIC4uLmgucmVzcG9uc2UuaGVhZGVyc1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYiA9IGgucmVzcG9uc2UuaGVhZGVycyA/PyB7fTtcbiAgICAgICAgXCJvcC1leGlzdGluZy1jYy1wbS1pZFwiIGluIGIgJiYgKF8uZXhpc3RpbmdfY2NfcG1faWQgPSBiW1wib3AtZXhpc3RpbmctY2MtcG0taWRcIl0sIE4oYOKUnCBFeGlzdGluZyBDQyBQTSBJRDogJHtfLmV4aXN0aW5nX2NjX3BtX2lkfWApKTtcbiAgICAgICAgY29uc3QgdiA9IE9jKGgucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgTihcIuKUnCBQb2NreXQgM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggUG9ja3l0IDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCBEID0gYXdhaXQgVWMoZS5iYXNlVXJsLCBoLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIF8uZXh0cmFfbWV0YWRhdGEucG9ja3l0ID0gRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoT24oaC5yZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICAgIE4oXCLilJwgQWlyd2FsbGV4IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFpcndhbGxleCAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgRCA9IGF3YWl0IFVuKGUuYmFzZVVybCwgaC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBfLmV4dHJhX21ldGFkYXRhLmFpcndhbGxleCA9IEQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFZuKGgucmVzcG9uc2UuaGVhZGVycykpIHtcbiAgICAgICAgICBOKFwi4pScIEFkeWVuIDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFkeWVuIDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCBEID0gYXdhaXQgcW4oXG4gICAgICAgICAgICByW3AuQ09VTlRSWV0sXG4gICAgICAgICAgICBoLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgICBzLmxvY2FsZVxuICAgICAgICAgICk7XG4gICAgICAgICAgXy5leHRyYV9tZXRhZGF0YS5hZHllbiA9IEQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgQyA9IGF3YWl0IGJuKG8sIF8pO1xuICAgICAgICBOKFwi4pScIFN0YXJ0IHBheW1lbnQgZmxvdyByZXN1bHQ6XCIsIEMpO1xuICAgICAgICBjb25zdCBPID0gKCh5ID0gaC5yZXNwb25zZS5oZWFkZXJzKSA9PSBudWxsID8gdm9pZCAwIDogeVtcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0pICE9PSBcInRydWVcIjtcbiAgICAgICAgdiA/IE4oXCLilJwgUHJlLXN0YXJ0IDNEUyBpcyBzdWNjZXNzZnVsLCBvdGhlciAzRFMgZmxvd3Mgd2lsbCBiZSBza2lwcGVkLlwiKSA6IE8gPyAoTihcIuKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3dcIiksIGF3YWl0IFhuKEpjKEMpKSkgOiAoTihcIuKUnCBVc2luZyBjb21tb24gM0RTIGZsb3dcIiksIGF3YWl0IHJvKEMsIGUuYmFzZVVybCkpO1xuICAgICAgICBjb25zdCBBID0gQy5jY19wbV9pZDtcbiAgICAgICAgaWYgKHMubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgICAgTihg4pScIENvbmZpcm1pbmcgcGF5bWVudCBmbG93IFtjY19wbV9pZDogJHtBfV1gKTtcbiAgICAgICAgICBjb25zdCBEID0gYXdhaXQgTChvLCB7XG4gICAgICAgICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogQVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIE4oXCLilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpcIiwgRCk7XG4gICAgICAgICAgY29uc3QgUSA9IHV0KEQpO1xuICAgICAgICAgIHJldHVybiBOKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7US5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IFEgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBOKGDilJwgQ2hlY2tpbmcgb3V0IGFmdGVyIDNEUyBmbG93IFtGbG93OiAke08gPyBcImxlZ2FjeVwiIDogXCJuZXdcIn1dYCk7XG4gICAgICAgICAgY29uc3QgRCA9IGF3YWl0IFNyKG8sIHtcbiAgICAgICAgICAgIC4uLl8sXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogQSxcbiAgICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IE9cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gTihcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogRCB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBScihcIuKVsCBFcnJvciBjaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERVwiKSwgUnIoaCksIGg7XG4gICAgfVxuICB9XG4pLCBKYyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChyKSA9PiByLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKTtcbiAgaWYgKCF0KVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHN0cmlwZSAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gYmkucGFyc2UodCk7XG59LCBXYyA9IFtcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIiwgXCJhZHllblwiXSwgdG8gPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZS5maW5kKChyKSA9PiBXYy5pbmNsdWRlcyhyLnR5cGUpKTtcbiAgaWYgKCF0KVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbW1vbiAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4geG8ucGFyc2UodCk7XG59LCBybyA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSB0byhlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucyk7XG4gIGlmIChyLnJlZGlyZWN0X3VybCA9PT0gXCIzRFNfQ09NUExFVEVcIikge1xuICAgIE4oXCLilJwgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKSwgZyhcIjNkc19jb21wbGV0ZVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgTihg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke3IucmVkaXJlY3RfdXJsfV1gKSwgZyhcIjNkc19yZWRpcmVjdFwiLCB7XG4gICAgLi4uclxuICB9KTtcbiAgY29uc3QgeyBzdGF0dXM6IG4gfSA9IGF3YWl0IGJlKHsgdXJsOiByLnJlZGlyZWN0X3VybCwgYmFzZVVybDogdCB9KTtcbiAgaWYgKE4oYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke259XWApLCBuID09PSBGLkNBTkNFTExFRClcbiAgICB0aHJvdyBnKFwiM2RzX2NhbmNlbGxlZFwiKSwgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChuID09PSBGLkZBSUxVUkUpXG4gICAgdGhyb3cgZyhcIjNkc19mYWlsdXJlXCIpLCBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgZyhcImNvbW1vbl8zZHNfY29tcGxldGVkXCIpO1xufSwgWmMgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIHsgbG9nX186IEosIGVycl9fOiBLYyB9ID0gSShcImxvb3AtY3J5cHRvXCIpLCBRYyA9IHdlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlIH0pID0+IHtcbiAgICBKKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBMb29wIENyeXB0by4uLlwiKTtcbiAgICBjb25zdCB0ID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFpjKTtcbiAgICBKKGBjaGVja291dFBheW1lbnRNZXRob2Q6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCksIEooXCJTdGFydGluZyBMb29wIENyeXB0byBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHIgPSBhd2FpdCBNKGUuYW55Q2RlQ29ubmVjdGlvbiksIG4gPSByLm1vZGUgPT09IFwic2V0dXBcIiwgYSA9IGF3YWl0IFJ0KGUuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHRcbiAgICB9KSwgbyA9IGF3YWl0IHZlKFxuICAgICAgZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgci50b2tlbixcbiAgICAgIG4sXG4gICAgICB2b2lkIDBcbiAgICApO1xuICAgIGlmICghbiAmJiAhdC5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llcy5pbmNsdWRlcyhyLmN1cnJlbmN5KSlcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgQ3VycmVuY3kgJHtyLmN1cnJlbmN5fSBub3QgZW5hYmxlZCBmb3IgTG9vcC4gRW5hYmxlZCBjdXJyZW5jaWVzOiAke3QubWV0YWRhdGEuc3VwcG9ydGVkX2N1cnJlbmNpZXN9YFxuICAgICAgKTtcbiAgICBpZiAoIWEgfHwgIWEubmV4dF9hY3Rpb25fbWV0YWRhdGEpXG4gICAgICB0aHJvdyBFcnJvcihcIkZhaWxlZCB0byBmZXRjaCBuZWNlc3Nhcnkgc2V0dXAgZGF0YSBmb3IgTG9vcFwiKTtcbiAgICBjb25zdCBzID0gYS5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBsZXQgYyA9IHMuYXV0aG9yaXphdGlvbl9hbW91bnQsIGwgPSBzLm1pbl9hdXRob3JpemF0aW9uX2Ftb3VudDtcbiAgICBjb25zdCB1ID0gcy5hbGxvd19jdXN0b21lcl90b19jaG9vc2VfYXV0aDtcbiAgICBsZXQgZDtcbiAgICBuID8gKGQgPSAwLCBjID0gTWF0aC5tYXgoYywgbCkpIDogKGQgPSAobyA/IG8uYW1vdW50QXRvbSA6IHIuYW1vdW50X3RvdGFsX2F0b20pICogcy50b2tlbl9wcmljZSwgbCA9IE1hdGgubWF4KGwsIGQpLCBjID0gTWF0aC5tYXgoYywgbCkpO1xuICAgIGNvbnN0IGYgPSBkLCBfID0gdjQoKSwgbSA9IHtcbiAgICAgIHBheW1lbnRVc2RBbW91bnQ6IGYsXG4gICAgICBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50OiBjLFxuICAgICAgY3VzdG9tZXJSZWZJZDogXyxcbiAgICAgIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQ6IGwsXG4gICAgICBhbGxvd0N1c3RvbWVyVG9DaG9vc2VBdXRoOiB1XG4gICAgfSwgeSA9IHtcbiAgICAgIGFwaVRva2VuOiB0Lm1ldGFkYXRhLmFwaV90b2tlbixcbiAgICAgIGVudGl0eUlkOiB0Lm1ldGFkYXRhLmVudGl0eV9pZCxcbiAgICAgIG1lcmNoYW50SWQ6IHQubWV0YWRhdGEubWVyY2hhbnRfaWQsXG4gICAgICBlbnZpcm9ubWVudDogdC5tZXRhZGF0YS5lbnZpcm9ubWVudFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHdpZGdldFByb3BzOiBtLFxuICAgICAgaW5pdExvb3BDb25uZWN0UHJvcHM6IHlcbiAgICB9O1xuICB9XG4pLCBYYyA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgSihcIlJ1bm5pbmcgTG9vcCBmbG93Li4uXCIpLCBKKFwiY29udGV4dFwiLCBlKSwgSihcImNoZWNrb3V0UGF5bWVudE1ldGhvZFwiLCB0KSwgSihcIm5vbkNkZUZvcm1JbnB1dHNcIiwgciksIEooXCJmbG93Q2FsbGJhY2tzXCIsIG4pLCBKKFwiY3VzdG9tUGFyYW1zXCIsIGEpO1xuICAgIGNvbnN0IG8gPSBhd2FpdCBNKGUuYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgSihg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtvLm1vZGV9XWApO1xuICAgIGNvbnN0IHMgPSBxKFxuICAgICAgcixcbiAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgby5jaGVja291dF9zZXR0aW5nc1xuICAgICksIGMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGwgPSBvLm1vZGUgIT09IFwic2V0dXBcIiwgdSA9IG5yKHMsIG8uY2hlY2tvdXRfc2V0dGluZ3MpO1xuICAgIGlmICghYSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZC4gRmFpbGVkIHRvIHByb3Blcmx5IHN1Ym1pdCBmb3JtIGRhdGEuXCIpO1xuICAgIGlmICghYS5zdWNjZXNzKVxuICAgICAgdGhyb3cgZyhcImxvb3BfcGF5X2Zsb3dfZmFpbHVyZVwiLCBhKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLiBTdWNjZXNzIGlzIG5vdCB0cnVlLlwiKTtcbiAgICBjb25zdCBkID0gYXdhaXQgbmUoZS5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAuLi51LFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBsLFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBsID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBvLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogby5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBjZSgpXG4gICAgfSksIGYgPSBhd2FpdCBMKGMsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogby50b2tlbixcbiAgICAgIHRoZWlyX3BtX2lkOiBhLnBheW1lbnRNZXRob2QucGF5bWVudE1ldGhvZElkLFxuICAgICAgLy8gTk9URTogd2UgZG8gaGF2ZSB0aGUgY2hlY2tvdXQgYXR0ZW1wdCBpZCBoZXJlIGV2ZW4gaWYgaXRzIGEgc2V0dXAsIGJ1dCBmb3Igbm93IHdlIGRvbid0IGluY2x1ZGUgaXRcbiAgICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBjaGVja291dCBhdHRlbXB0IHN1cHBvcnQgZm9yIHNldHVwIGludGVudHMuXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBsID8gZC5jaGVja291dF9hdHRlbXB0X2lkIDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGxvb3BfY3VzdG9tZXI6IGEuY3VzdG9tZXIsXG4gICAgICAgIGxvb3BfcGF5bWVudF9tZXRob2Q6IGEucGF5bWVudE1ldGhvZCxcbiAgICAgICAgbG9vcF9zdWNjZXNzOiBhLnN1Y2Nlc3NcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoSihgQ29uZmlybSByZXN1bHQ6ICR7Zn1gKSwgby5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIEooXCJEb2luZyBwYXltZW50IHNldHVwLi4uXCIpLCBKKFwi4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6XCIsIGYpO1xuICAgICAgY29uc3QgXyA9IHV0KGYpO1xuICAgICAgcmV0dXJuIEooYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtfLnBheW1lbnRfbWV0aG9kX2lkfV1gKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogXyB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoSihcIkRvaW5nIGNoZWNrb3V0Li4uXCIpLCAhZi5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgICAgdGhyb3cgS2MoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBmKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogZi5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IGtlLCBlcnJfXzogZWwgfSA9IEkoXCJwYXlwYWxcIiksIG5vID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3QoeyBjbGllbnRfaWQ6IHokMS5zdHJpbmcoKSB9KSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpXG59KSwgdGwgPSBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgY29uc3QgciA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBubyk7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXlQYWwgQ1BNIG5vdCBmb3VuZCBpbiBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzXCIpO1xuICByZXR1cm4ge1xuICAgIGlzTG9hZGluZzogITEsXG4gICAgaXNBdmFpbGFibGU6ICEwLFxuICAgIHN0YXJ0RmxvdzogKCkgPT4gVC5wYXlwYWwucnVuKHtcbiAgICAgIGNvbnRleHQ6IGUsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiB7fSB9XG4gICAgfSlcbiAgfTtcbn0sIHJsID0gSChcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBhXG4gIH0pID0+IHtcbiAgICB0cnkge1xuICAgICAga2UoXCJSdW5uaW5nIFBheVBhbCBmbG93Li4uXCIpO1xuICAgICAgY29uc3QgbyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IE0obyksIHsgaXNBbm9ueW1vdXM6IGMsIHVzZVJlZGlyZWN0RmxvdzogbCB9ID0gYS5zZXR0aW5ncyA/PyB7fTtcbiAgICAgIGtlKFwiVmVyaWZ5aW5nIENQTS4uLlwiKTtcbiAgICAgIGNvbnN0IHUgPSBuby5wYXJzZShyKTtcbiAgICAgIGtlKFwi4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgICAgIGNvbnN0IGQgPSBxKHQsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLCB7XG4gICAgICAgIC4uLmMgPyBMcygpIDogdm9pZCAwLFxuICAgICAgICAuLi5zLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgICB9KSwgZiA9IG5yKGQsIHMuY2hlY2tvdXRfc2V0dGluZ3MpO1xuICAgICAga2UoYFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLiBNb2RlOiAke3MubW9kZX1gKTtcbiAgICAgIGNvbnN0IF8gPSB2NCgpLCBtID0gcy5tb2RlICE9PSBcInNldHVwXCIsIHkgPSB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHUucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB1LFxuICAgICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IG0sXG4gICAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogbSA/IHtcbiAgICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICAgIGxpbmVfaXRlbXM6IHMubGluZV9pdGVtcyxcbiAgICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHMuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgICAgfSA6IHZvaWQgMCxcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgdXNlX3BheXBhbF9yZWRpcmVjdF9mbG93OiBsLFxuICAgICAgICAgIGZyb250ZW5kX3Rva2VuX2Zvcl9yZWRpcmVjdF9mbG93OiBfXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmZcbiAgICAgIH0sIGggPSBuZXcgVVJMKFwiL2FwcC9wcmUtYWN0aW9uL3N0YXJ0L1wiLCBlLmJhc2VVcmwpLnRvU3RyaW5nKCksIGIgPSBidG9hKEpTT04uc3RyaW5naWZ5KHkpKSwgdiA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICBzdDogcy50b2tlbixcbiAgICAgICAgcjogYlxuICAgICAgfSksIHcgPSBgJHtofT8ke3YudG9TdHJpbmcoKX1gO1xuICAgICAgaWYgKGwpXG4gICAgICAgIHRocm93IGtlKFwiU3RhcnRpbmcgcmVkaXJlY3QgbW9kZSBmb3IgUGF5UGFsLi4uXCIpLCB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHcsIGF3YWl0IFR0KDIwICogMWUzKSwgbmV3IEVycm9yKFwiUGF5cGFsIGZsb3cgdGltZWQgb3V0LCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICBjb25zdCBFID0gYXdhaXQgTW4oXG4gICAgICAgIFwiUGF5UGFsXCIsXG4gICAgICAgIG8sXG4gICAgICAgIF8sXG4gICAgICAgIHdcbiAgICAgICk7XG4gICAgICBrZShcIlBheXBhbCBmbG93IHJlc3VsdFwiLCBFKTtcbiAgICAgIGNvbnN0IEMgPSBIdChFLmhyZWYsIFwiY2F0dFwiKSwgTyA9IEh0KEUuaHJlZiwgXCJhcHByb3ZhbF9zZXNzaW9uX2lkXCIpLCBBID0gYXdhaXQgTChvLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcy50b2tlbixcbiAgICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbSA/IEMgOiB2b2lkIDAsXG4gICAgICAgIHRoZWlyX3BtX2lkOiBtID8gTyA6IHZvaWQgMFxuICAgICAgfSk7XG4gICAgICByZXR1cm4ga2UoXCJDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHRcIiwgQSksIGxlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcInBheXBhbFwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiBvLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHUsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogZCxcbiAgICAgICAgY29uZmlybVJlc3VsdDogQSxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBtXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChvKSB7XG4gICAgICB0aHJvdyBlbChcIlBheVBhbCBwYXltZW50IGVycm9yXCIsIG8pLCBnKFwiY2hlY2tvdXRfZXJyb3JcIiwgeyBwYXltZW50X21ldGhvZDogXCJwYXlwYWxcIiwgZXJyb3I6IG8gfSksIG5ldyBFcnJvcigobyA9PSBudWxsID8gdm9pZCAwIDogby5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBkZSwgZXJyX186IE5yIH0gPSBJKFwicG9ja3l0LXBheXBhbFwiKSwgb28gPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBwYXlwYWxfaWZyYW1lX3VybDogeiQxLnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IG5sID0gYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gIGNvbnN0IHIgPSB6KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgb28pO1xuICBpZiAoIXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUG9ja3l0IFBheVBhbCBDUE0gbm90IGZvdW5kIGluIGF2YWlsYWJsZSBwYXltZW50IG1ldGhvZHNcIik7XG4gIHJldHVybiB7XG4gICAgaXNMb2FkaW5nOiAhMSxcbiAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgc3RhcnRGbG93OiAoKSA9PiBULnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgY29udGV4dDogZSxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGooZS5mb3JtRGl2KSxcbiAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3M6IHt9IH1cbiAgICB9KVxuICB9O1xufSwgb2wgPSBIKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIHZhciBBLCBEO1xuICAgIGRlKFwiUnVubmluZyBQb2NreXQgUGF5cGFsIGZsb3cuLi5cIik7XG4gICAgY29uc3QgbyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IE0obyk7XG4gICAgZGUoXCJWZXJpZnlpbmcgQ1BNLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBvby5wYXJzZSh0KTtcbiAgICBkZShcIuKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gICAgY29uc3QgbCA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuc2V0dGluZ3MsIHUgPSBxKFxuICAgICAgcixcbiAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgbCA9PSBudWxsID8gdm9pZCAwIDogbC5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApLCBkID0gbnIodSwgcy5jaGVja291dF9zZXR0aW5ncyk7XG4gICAgZGUoYFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLiBNb2RlOiAke3MubW9kZX1gKTtcbiAgICBjb25zdCBmID0gdjQoKSwgXyA9IHMubW9kZSAhPT0gXCJzZXR1cFwiLCBtID0ge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogYy5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBfLFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBfID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBzLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcy5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICB1c2VfcGF5cGFsX3JlZGlyZWN0X2Zsb3c6ICEhKChBID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5zZXR0aW5ncykgIT0gbnVsbCAmJiBBLnVzZVJlZGlyZWN0RmxvdyksXG4gICAgICAgIGZyb250ZW5kX3Rva2VuX2Zvcl9yZWRpcmVjdF9mbG93OiBmXG4gICAgICB9LFxuICAgICAgLi4uZFxuICAgIH0sIHkgPSBuZXcgVVJMKFwiL2FwcC9wcmUtYWN0aW9uL3N0YXJ0L1wiLCBlLmJhc2VVcmwpLnRvU3RyaW5nKCksIGggPSBidG9hKEpTT04uc3RyaW5naWZ5KG0pKSwgYiA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgc3Q6IHMudG9rZW4sXG4gICAgICByOiBoXG4gICAgfSksIHYgPSBgJHt5fT8ke2IudG9TdHJpbmcoKX1gO1xuICAgIGlmICgoRCA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuc2V0dGluZ3MpICE9IG51bGwgJiYgRC51c2VSZWRpcmVjdEZsb3cpXG4gICAgICB0aHJvdyBkZShcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKSwgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB2LCBhd2FpdCBUdCgyMCAqIDFlMyksIG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgIGRlKFwiU3RhcnRpbmcgcG9wdXAgbW9kZSBmb3IgUGF5UGFsLi4uXCIpLCBkZShcIk9wZW5pbmcgcGF5cGFsIGlmcmFtZS4uLlwiKTtcbiAgICBjb25zdCB3ID0gYXdhaXQgTW4oXG4gICAgICBcIlBheVBhbFwiLFxuICAgICAgbyxcbiAgICAgIGYsXG4gICAgICB2XG4gICAgKTtcbiAgICBkZShcIlBheXBhbCBmbG93IHJlc3VsdFwiLCB3KTtcbiAgICBjb25zdCBFID0gUW4ody5ocmVmKSwgQyA9IEh0KHcuaHJlZiwgXCJjYXR0XCIpO1xuICAgIGlmICghQylcbiAgICAgIHRocm93IE5yKFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMOlwiLCB3LmhyZWYpLCBuZXcgRXJyb3IoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZWRpcmVjdCBVUkxcIik7XG4gICAgZGUoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IHVzaW5nIHZhdWx0IElEICR7RX1gKTtcbiAgICBjb25zdCBPID0gYXdhaXQgTChvLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogRSxcbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IF8gPyBDIDogdm9pZCAwXG4gICAgfSk7XG4gICAgaWYgKGRlKFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIE8pLCBzLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgcGF5bWVudF9tZXRob2RfaWQ6IE8ucGF5bWVudF9tZXRob2RzWzBdLmlkXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgaWYgKCFPLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgdGhyb3cgTnIoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBPKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgIHJlc3VsdDogTy5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgIH07XG4gIH1cbiksIEZyID0gXCJvanMtc3RyaXBlLWxpbmstYnRuXCIsIHsgbG9nX186IEcsIGVycl9fOiBhbCB9ID0gSShcInN0cmlwZS1saW5rXCIpLCBpbCA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBzbCA9IHokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpLCBjbCA9IHdlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICBjb25zdCByID0gZS5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms7XG4gICAgRyhcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIExpbmsuLi5cIik7XG4gICAgY29uc3QgbiA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBpbCk7XG4gICAgRyhcIlN0YXJ0aW5nIHN0cmlwZSBsaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgYSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgbyA9IGF3YWl0IE0oYSksIHMgPSBvLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBHKFwiQ3JlYXRpbmcgc3RyaXBlIGVsZW1lbnRzLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBhd2FpdCB2ZShhLCBvLnRva2VuLCBzLCB2b2lkIDApLCB7IGVsZW1lbnRzOiBsLCBzdHJpcGU6IHUgfSA9IGF3YWl0IFNpKG4ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogYy5jdXJyZW5jeSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgfSk7XG4gICAgRyhcIkNyZWF0aW5nIGV4cHJlc3MgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgZCA9IGwuY3JlYXRlKFwiZXhwcmVzc0NoZWNrb3V0XCIsIHtcbiAgICAgIGJ1dHRvbkhlaWdodDogciA9PSBudWxsID8gdm9pZCAwIDogci5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSksIGYgPSAoKSA9PiB7XG4gICAgICBkLm1vdW50KGAjJHtGcn1gKTtcbiAgICB9LCBfID0gKCkgPT4ge1xuICAgICAgZC51bm1vdW50KCk7XG4gICAgfTtcbiAgICByZXR1cm4gciAhPSBudWxsICYmIHIuZG9Ob3RNb3VudE9uSW5pdCA/IEcoXCJOT1QgbW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uIChkb05vdE1vdW50T25Jbml0IGlzIHRydWUpXCIpIDogKEcoXCJNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5cIiksIGYoKSksIGQub24oXCJjbGlja1wiLCBhc3luYyAobSkgPT4ge1xuICAgICAgaWYgKEcoXCJTdHJpcGUgTGluayBidXR0b24gY2xpY2tlZFwiKSwgciAhPSBudWxsICYmIHIub3ZlcnJpZGVMaW5rU3VibWl0ICYmICFhd2FpdCByLm92ZXJyaWRlTGlua1N1Ym1pdCgpKSB7XG4gICAgICAgIEcoXCJTdHJpcGUgTGluayBzdWJtaXQgYWJvcnRlZCBieSBvdmVycmlkZUxpbmtTdWJtaXRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG0ucmVzb2x2ZSgpO1xuICAgIH0pLCBkLm9uKFwiY29uZmlybVwiLCBhc3luYyAobSkgPT4ge1xuICAgICAgRyhcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgbSk7XG4gICAgICBjb25zdCB5ID0gYXdhaXQgdS5jcmVhdGVQYXltZW50TWV0aG9kKHtcbiAgICAgICAgZWxlbWVudHM6IGwsXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGJpbGxpbmdfZGV0YWlsczogbS5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHkuZXJyb3IgPyAoYWwoXCJlcnJvclwiLCB5LmVycm9yKSwgdC5nZXQub25DaGVja291dEVycm9yKHkuZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIikpIDogKEcoXCJwYXltZW50TWV0aG9kXCIsIHkucGF5bWVudE1ldGhvZCksIFQuc3RyaXBlTGluay5ydW4oe1xuICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGooZS5mb3JtRGl2KSxcbiAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHN0cmlwZVBNOiB5LnBheW1lbnRNZXRob2QgfSxcbiAgICAgICAgaW5pdFJlc3VsdDogeyBpc0F2YWlsYWJsZTogITAgfVxuICAgICAgfSkpO1xuICAgIH0pLCB7XG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBjb250cm9sbGVyOiB7XG4gICAgICAgIG1vdW50QnV0dG9uOiBmLFxuICAgICAgICBkaXNtb3VudEJ1dHRvbjogXyxcbiAgICAgICAgd2FpdEZvckJ1dHRvblRvTW91bnQ6IGFzeW5jICgpID0+IGF3YWl0IGRsKEZyKVxuICAgICAgfVxuICAgIH07XG4gIH1cbiksIGxsID0gSChcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBhXG4gIH0pID0+IHtcbiAgICBHKFwiUnVubmluZyBTdHJpcGUgTGluayBmbG93Li4uXCIpO1xuICAgIGNvbnN0IG8gPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBNKG8pO1xuICAgIEcoXCJNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IGMgPSB1bChyLCBhLnN0cmlwZVBNKSwgbCA9IHEoYywgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubFxuICAgIH0pLCBHKFwiU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHUgPSBhd2FpdCBuZShvLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICB0aGVpcl9leGlzdGluZ19wbV9pZDogYS5zdHJpcGVQTS5pZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbFtwLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBsW3AuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBsW3AuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBaKGwpLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IEsobCwgcy5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogY2UoKVxuICAgIH0pO1xuICAgIEcoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgdSk7XG4gICAgY29uc3QgZiA9IHNsLnBhcnNlKHUucmVxdWlyZWRfdXNlcl9hY3Rpb25zKVswXS5vdXJfZXhpc3RpbmdfcG1faWQ7XG4gICAgaWYgKHMubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBHKFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKTtcbiAgICAgIGNvbnN0IF8gPSBhd2FpdCBMKG8sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBzLnRva2VuLFxuICAgICAgICBleGlzdGluZ19jY19wbV9pZDogZlxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogdXQoXykgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgRyhcIkRvaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgICAgY29uc3QgXyA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBzLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogdC5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogbFtwLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfZmlyc3RfbmFtZTogbFtwLkZJUlNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IGxbcC5MQVNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9hZGRyZXNzOiBaKGwpLFxuICAgICAgICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBLKGwsIHMuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogbFtwLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogcy5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogcy5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IHJyKG8sIF8pIH07XG4gICAgfVxuICB9XG4pLCB1bCA9IChlLCB0KSA9PiB7XG4gIHZhciBsLCB1LCBkLCBmLCBfO1xuICBjb25zdCByID0geyAuLi5lIH0sIFtuLCAuLi5hXSA9ICgodSA9IChsID0gdC5iaWxsaW5nX2RldGFpbHMubmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGwudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogdS5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgbyA9IGEuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICByW3AuRU1BSUxdID0gcltwLkVNQUlMXSB8fCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAoKGQgPSB0LmxpbmspID09IG51bGwgPyB2b2lkIDAgOiBkLmVtYWlsKSB8fCB0LmJpbGxpbmdfZGV0YWlscy5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIHJbcC5aSVBfQ09ERV0gPSByW3AuWklQX0NPREVdIHx8ICgoZiA9IHQuYmlsbGluZ19kZXRhaWxzLmFkZHJlc3MpID09IG51bGwgPyB2b2lkIDAgOiBmLnBvc3RhbF9jb2RlKSB8fCBcIjAwMDAwXCIsIHJbcC5DT1VOVFJZXSA9IHJbcC5DT1VOVFJZXSB8fCAoKF8gPSB0LmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogXy5jb3VudHJ5KSB8fCBcIlVTXCI7XG4gIGNvbnN0IHMgPSByW3AuRklSU1RfTkFNRV0gfHwgbiB8fCBcIlwiLCBjID0gcltwLkxBU1RfTkFNRV0gfHwgbyB8fCBcIlwiO1xuICByZXR1cm4gcyB8fCBjID8gKHJbcC5GSVJTVF9OQU1FXSA9IHMsIHJbcC5MQVNUX05BTUVdID0gYykgOiAocltwLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiLCByW3AuTEFTVF9OQU1FXSA9IFwiXCIpLCBHKFwiRmluYWwgZm9ybSBpbnB1dHM6XCIsIHIpLCByO1xufSwgZGwgPSAoZSkgPT4gbmV3IFByb21pc2UoKHQpID0+IHtcbiAgY29uc3QgciA9ICgpID0+IHtcbiAgICBjb25zdCBuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSk7XG4gICAgbiA/IHQobikgOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocik7XG4gIH07XG4gIHIoKTtcbn0pLCB7IGxvZ19fOiBXLCBlcnJfXzogcGwgfSA9IEkoXCJzdHJpcGUtcHJcIiksIF9sID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEudW5pb24oW3okMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBtbCA9IHdlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICBXKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5cIik7XG4gICAgY29uc3QgciA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBfbCk7XG4gICAgVyhcIkluaXRpYWxpemluZyBTdHJpcGUgUFIgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBuID0gZS5hbnlDZGVDb25uZWN0aW9uLCBhID0gYXdhaXQgTShuKSwgbyA9IGEubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIFcoXCJHZXR0aW5nIGluaXRpYWwgcHJldmlldyBhbW91bnRcIik7XG4gICAgY29uc3QgcyA9IGF3YWl0IHZlKG4sIGEudG9rZW4sIG8sIHZvaWQgMCksIGMgPSBhd2FpdCBDaShcbiAgICAgIHIubWV0YWRhdGEuc3RyaXBlX3BrLFxuICAgICAgcy5hbW91bnRBdG9tLFxuICAgICAgcy5jdXJyZW5jeSxcbiAgICAgIG9cbiAgICApO1xuICAgIFcoXCJDaGVja2luZyBpZiBjYW4gbWFrZSBwYXltZW50XCIpO1xuICAgIGNvbnN0IGwgPSBhd2FpdCBjLmNhbk1ha2VQYXltZW50KCk7XG4gICAgaWYgKGwgPT09IG51bGwpXG4gICAgICByZXR1cm4gcGwoXCJjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsXCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgcmVhc29uOiBcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiB9O1xuICAgIFcoXCJTdHJpcGUgUFIgZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIENhbiBtYWtlIHBheW1lbnRcIiwgbCk7XG4gICAgY29uc3QgdSA9IChkLCBmKSA9PiBULnN0cmlwZVBSLnJ1bih7XG4gICAgICBjb250ZXh0OiBlLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBtZShlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGQpLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgIGN1c3RvbVBhcmFtczogeyBwcm92aWRlcjogZCwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogZiA9PSBudWxsID8gdm9pZCAwIDogZi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gICAgICBpbml0UmVzdWx0OiB7XG4gICAgICAgIHByb2Nlc3NvcjogVS5FbnVtLnN0cmlwZSxcbiAgICAgICAgcHI6IGMsXG4gICAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7IGFwcGxlUGF5OiBsLmFwcGxlUGF5LCBnb29nbGVQYXk6IGwuZ29vZ2xlUGF5IH0sXG4gICAgICAgIHN0YXJ0RmxvdzogdVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5zdHJpcGUsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBwcjogYyxcbiAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczoge1xuICAgICAgICBhcHBsZVBheTogbC5hcHBsZVBheSxcbiAgICAgICAgZ29vZ2xlUGF5OiBsLmdvb2dsZVBheVxuICAgICAgfSxcbiAgICAgIHN0YXJ0RmxvdzogdVxuICAgIH07XG4gIH1cbiksIGZsID0gSChcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBhLFxuICAgIGluaXRSZXN1bHQ6IG9cbiAgfSkgPT4ge1xuICAgIGlmIChXKFwiUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLlwiKSwgYS5wcm92aWRlciAhPT0gdC5wcm92aWRlcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgbWlzbWF0Y2guIEV4cGVjdGVkICR7YS5wcm92aWRlcn0sIGdvdCAke3QucHJvdmlkZXJ9YCk7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IG8ucHI7XG4gICAgaWYgKGEgIT0gbnVsbCAmJiBhLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IHkgPSBhLm92ZXJyaWRlUGF5bWVudFJlcXVlc3Q7XG4gICAgICBXKFwiT3ZlcnJpZGluZyBQUiBhbW91bnQgd2l0aFwiLCB5KTtcbiAgICAgIGNvbnN0IGggPSB0eXBlb2YgeS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ID09IFwiZnVuY3Rpb25cIiA/IHkuYXBwbGVQYXlQYXltZW50UmVxdWVzdCh7fSkgOiB5LmFwcGxlUGF5UGF5bWVudFJlcXVlc3Q7XG4gICAgICBobChjLCB5LmFtb3VudCwgeS5wZW5kaW5nLCBoLCB5LmxhYmVsKTtcbiAgICB9XG4gICAgVyhcIlNob3dpbmcgUFIgZGlhbG9nLi4uXCIpLCBjLnNob3coKTtcbiAgICBjb25zdCBsID0gYXdhaXQga2koYyk7XG4gICAgVyhcIlN0cmlwZSBQTSBhZGRlZCBldmVudDpcIiwgbCksIFcoXCJNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IHUgPSB5bChyLCBsKSwgZCA9IHEodSwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4uZFxuICAgIH0pLCBXKFwiUFIgZGlhbG9nIGZpbmlzaGVkLiBTdGFydGluZyBwYXltZW50IGZsb3cuLi5cIiwgZCk7XG4gICAgY29uc3QgZiA9IGF3YWl0IG1zKHMsIHtcbiAgICAgIGZpZWxkczogZCxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdFxuICAgIH0pLCBfID0gZ2woZik7XG4gICAgVyhcIkNvbmZpcm1pbmcgUFIgd2l0aCBTdHJpcGUuLi5cIiksIGF3YWl0IEFpKF8sIGwpO1xuICAgIGNvbnN0IG0gPSBhd2FpdCBNKHMpO1xuICAgIGlmIChtLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgVyhcIkNvbmZpcm1pbmcgcGF5bWVudCBmbG93IGZvciBzZXR1cC4uLlwiKTtcbiAgICAgIGNvbnN0IHkgPSBhd2FpdCBMKHMsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBtLnRva2VuXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiB1dCh5KSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBXKFwiUGVyZm9ybWluZyBjaGVja291dC4uLlwiKTtcbiAgICAgIGNvbnN0IHkgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogbS50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IHQucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZmlyc3RfbmFtZTogZFtwLkZJUlNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IGRbcC5MQVNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogZFtwLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfYWRkcmVzczogWihkKSxcbiAgICAgICAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogSyhkLCBtLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IGRbcC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IG0ubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IG0uYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBycihzLCB5KSB9O1xuICAgIH1cbiAgfVxuKSwgeWwgPSAoZSwgdCkgPT4ge1xuICB2YXIgZCwgZiwgXywgbTtcbiAgY29uc3QgciA9IHsgLi4uZSB9LCBbbiwgLi4uYV0gPSAoKGYgPSAoZCA9IHQucGF5ZXJOYW1lKSA9PSBudWxsID8gdm9pZCAwIDogZC50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiBmLnNwbGl0KC9cXHMrLykpID8/IFtdLCBvID0gYS5qb2luKFwiIFwiKSB8fCB2b2lkIDAsIHMgPSAobSA9IChfID0gdC5wYXltZW50TWV0aG9kKSA9PSBudWxsID8gdm9pZCAwIDogXy5iaWxsaW5nX2RldGFpbHMpID09IG51bGwgPyB2b2lkIDAgOiBtLmFkZHJlc3MsIGMgPSB0LnNoaXBwaW5nQWRkcmVzcztcbiAgcltwLkVNQUlMXSA9IHJbcC5FTUFJTF0gfHwgdC5wYXllckVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgcltwLlpJUF9DT0RFXSA9IHJbcC5aSVBfQ09ERV0gfHwgKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMucG9zdGFsX2NvZGUpIHx8IChjID09IG51bGwgPyB2b2lkIDAgOiBjLnBvc3RhbENvZGUpIHx8IFwiMDAwMDBcIiwgcltwLkNPVU5UUlldID0gcltwLkNPVU5UUlldIHx8IChzID09IG51bGwgPyB2b2lkIDAgOiBzLmNvdW50cnkpIHx8IChjID09IG51bGwgPyB2b2lkIDAgOiBjLmNvdW50cnkpIHx8IFwiVVNcIjtcbiAgY29uc3QgbCA9IHJbcC5GSVJTVF9OQU1FXSB8fCBuIHx8IFwiXCIsIHUgPSByW3AuTEFTVF9OQU1FXSB8fCBvIHx8IFwiXCI7XG4gIHJldHVybiBsIHx8IHUgPyAocltwLkZJUlNUX05BTUVdID0gbCwgcltwLkxBU1RfTkFNRV0gPSB1KSA6IChyW3AuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIHJbcC5MQVNUX05BTUVdID0gXCJcIiksIFcoXCJGaW5hbCBmb3JtIGlucHV0czpcIiwgciksIHI7XG59LCBobCA9IChlLCB0LCByLCBuLCBhKSA9PiB7XG4gIGUudXBkYXRlKHtcbiAgICB0b3RhbDoge1xuICAgICAgYW1vdW50OiB0LmFtb3VudEF0b20sXG4gICAgICBsYWJlbDogYSA/PyBcIlRvdGFsXCIsXG4gICAgICBwZW5kaW5nOiByXG4gICAgfSxcbiAgICBjdXJyZW5jeTogdC5jdXJyZW5jeSxcbiAgICAvLyBTdHJpcGUncyBhcHBsZVBheSBvcHRpb24gb25seSBzdXBwb3J0cyAncmVjdXJyaW5nUGF5bWVudFJlcXVlc3QnIHwgJ2RlZmVycmVkUGF5bWVudFJlcXVlc3QnIHwgJ2F1dG9tYXRpY1JlbG9hZFBheW1lbnRSZXF1ZXN0JyBvZiBuYXRpdmUgQXBwbGVQYXkgcGF5bWVudCByZXF1ZXN0XG4gICAgLy8gV2UncmUgYWNjZXB0aW5nIG5hdGl2ZSBQYXltZW50IFJlcXVlc3QgaGVyZSBmb3IgbW9yZSBjb21tb24gdHlwaW5nLlxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBzdHJpcGUgZG8gbm90IGV4cGVjdCBhZGRpdGlvbmFsIGZpZWxkc1xuICAgIGFwcGxlUGF5OiBuXG4gIH0pO1xufSwgZ2wgPSAoZSkgPT4ge1xuICBpZiAoZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igb2NjdXJyZWQuXG5EZXRhaWxzOiBnb3QgJHtlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGh9IHJlcXVpcmVkIHVzZXIgYWN0aW9uc2ApO1xuICByZXR1cm4gRWkucGFyc2UoZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xufSwgbWUgPSAoZSwgdCwgcikgPT4ge1xuICBjb25zdCBuID0gZS5maWx0ZXIoKGEpID0+IHtcbiAgICBjb25zdCBvID0gciA9PT0gdm9pZCAwID8gITAgOiBhLnByb2Nlc3Nvcl9uYW1lID09PSByLCBzID0gYS5wcm92aWRlciA9PT0gdDtcbiAgICByZXR1cm4gbyAmJiBzO1xuICB9KTtcbiAgaWYgKG4ubGVuZ3RoID09PSAwKVxuICAgIHRocm93IGNvbnNvbGUud2FybihcIkNQTXMgbGlzdFwiLCBlKSwgbmV3IEVycm9yKGBObyBDUE1zIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7dH0nIGFuZCBwcm9jZXNzb3IgJyR7cn0nYCk7XG4gIHJldHVybiBuLmxlbmd0aCAhPT0gMSAmJiAoY29uc29sZS53YXJuKFwiQ1BNcyBsaXN0XCIsIGUpLCBjb25zb2xlLndhcm4oYE1vcmUgdGhhbiBvbmUgQ1BNIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7dH0nIGFuZCBwcm9jZXNzb3IgJyR7cn0nYCksIGcoXCJtb3JlX3RoYW5fb25lX2NwbV9mb3VuZFwiLCB7XG4gICAgcHJvdmlkZXI6IHQsXG4gICAgcHJvY2Vzc29yOiByLFxuICAgIGNwbXM6IGVcbiAgfSkpLCBuWzBdO1xufSwgVCA9IHtcbiAgLy8g4pyLIE5vdGU6IEZvciBmbG93cyB0aGF0IHJlcXVpcmUgaW5pdGlhbGl6YXRpb24sIHBsZWFzZSBhZGQgdGhlbSB0byBgaW5pdC1mbG93cy50c2BcbiAgLy8gQ29tbW9uXG4gIGNvbW1vbkNDOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBZY1xuICB9LFxuICAvLyBTdHJpcGVcbiAgc3RyaXBlUFI6IHtcbiAgICBpbml0OiBtbCxcbiAgICBydW46IGZsXG4gIH0sXG4gIHN0cmlwZUxpbms6IHtcbiAgICBpbml0OiBjbCxcbiAgICBydW46IGxsXG4gIH0sXG4gIC8vIFBvY2t5dFxuICBwb2NreXRQYXlwYWw6IHtcbiAgICBpbml0OiBubCxcbiAgICBydW46IG9sXG4gIH0sXG4gIC8vIFBheVBhbFxuICBwYXlwYWw6IHtcbiAgICBpbml0OiB0bCxcbiAgICBydW46IHJsXG4gIH0sXG4gIC8vIEFpcndhbGxleFxuICBhaXJ3YWxsZXhHb29nbGVQYXk6IHtcbiAgICBpbml0OiBrYyxcbiAgICBydW46IEFjXG4gIH0sXG4gIGFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgaW5pdDogU2MsXG4gICAgcnVuOiBDY1xuICB9LFxuICBhaXJ3YWxsZXhBQ0g6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IHZjXG4gIH0sXG4gIGFpcndhbGxleEVGVDoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogV3NcbiAgfSxcbiAgYWlyd2FsbGV4QkFDUzoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogWXNcbiAgfSxcbiAgYWlyd2FsbGV4U0VQQToge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogS3NcbiAgfSxcbiAgLy8gTG9vcFxuICBsb29wQ3J5cHRvOiB7XG4gICAgaW5pdDogUWMsXG4gICAgcnVuOiBYY1xuICB9LFxuICBhdXRob3JpemVOZXRBcHBsZVBheToge1xuICAgIGluaXQ6IFJjLFxuICAgIHJ1bjogTmNcbiAgfSxcbiAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiB7XG4gICAgaW5pdDogRmMsXG4gICAgcnVuOiBNY1xuICB9LFxuICBhZHllbkdvb2dsZVBheToge1xuICAgIGluaXQ6IGhjLFxuICAgIHJ1bjogZ2NcbiAgfSxcbiAgYWR5ZW5BcHBsZVBheToge1xuICAgIGluaXQ6IGZjLFxuICAgIHJ1bjogeWNcbiAgfVxuICAvLyDwn5GJIEFkZCBtb3JlIGZsb3dzIGhlcmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn0sIHsgbG9nX186IHdsLCBlcnJfXzogdmwgfSA9IEkoXCJpbml0LWZsb3dzXCIpLCBvZSA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBuZXcgZXQoKTtcbiAgcmV0dXJuIHtcbiAgICBwdWJsaXNoZXI6IHIsXG4gICAgaW5pdGlhbGl6ZTogYXN5bmMgKG4pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChyLmN1cnJlbnQuaXNTdWNjZXNzKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgZmxvdyBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLlwiKTtcbiAgICAgICAgY29uc3QgYSA9IGF3YWl0IHQobik7XG4gICAgICAgIHdsKGDinJQgJHtlfSBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gUmVzdWx0OmAsIGEpLCByLnNldChhKTtcbiAgICAgIH0gY2F0Y2ggKGEpIHtcbiAgICAgICAgdmwoYPCdma0gJHtlfSBmbG93IGluaXRpYWxpemF0aW9uIGZhaWxlZC4gRXJyb3I6YCwgZWUoYSksIFwiRGV0YWlsczpcIiwgYSksIHIudGhyb3coYSwgZWUoYSkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn0sIGJsID0gYXN5bmMgKGUsIHQsIHIpID0+IHtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LnZhbHVlcyhlKS5tYXAoKG4pID0+IG4uaW5pdGlhbGl6ZSh7IGNvbnRleHQ6IHQsIGZvcm1DYWxsYmFja3M6IHIgfSkpKTtcbn0sIEVsID0gKCkgPT4gKHtcbiAgLy8g8J+SoSBBZGQgbmV3IGluaXQgZmxvd3MgaGVyZVxuICAvLyBTdHJpcGUgUFJcbiAgc3RyaXBlUFI6IG9lKFwiU3RyaXBlIFBSXCIsIFQuc3RyaXBlUFIuaW5pdCksXG4gIC8vIFN0cmlwZSBMaW5rXG4gIHN0cmlwZUxpbms6IG9lKFwiU3RyaXBlIExpbmtcIiwgVC5zdHJpcGVMaW5rLmluaXQpLFxuICAvLyBBaXJ3YWxsZXggR29vZ2xlUGF5XG4gIGFpcndhbGxleEdvb2dsZVBheTogb2UoXCJBaXJ3YWxsZXggR29vZ2xlUGF5XCIsIFQuYWlyd2FsbGV4R29vZ2xlUGF5LmluaXQpLFxuICAvLyBBaXJ3YWxsZXggQXBwbGVQYXlcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IG9lKFwiQWlyd2FsbGV4IEFwcGxlUGF5XCIsIFQuYWlyd2FsbGV4QXBwbGVQYXkuaW5pdCksXG4gIC8vIExvb3BcbiAgbG9vcDogb2UoXCJMb29wXCIsIFQubG9vcENyeXB0by5pbml0KSxcbiAgLy8gUGF5UGFsXG4gIHBheXBhbDogb2UoXCJQYXlQYWxcIiwgVC5wYXlwYWwuaW5pdCksXG4gIC8vIFBvY2t5dCBQYXlQYWxcbiAgcG9ja3l0UGF5cGFsOiBvZShcIlBvY2t5dCBQYXlQYWxcIiwgVC5wb2NreXRQYXlwYWwuaW5pdCksXG4gIC8vIEF1dGhuZXQgR29vZ2xlUGF5XG4gIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogb2UoXCJBdXRobmV0IEdvb2dsZVBheVwiLCBULmF1dGhvcml6ZU5ldEdvb2dsZVBheS5pbml0KSxcbiAgLy8gQXV0aG5ldCBBcHBsZVBheVxuICBhdXRob3JpemVOZXRBcHBsZVBheTogb2UoXCJBdXRobmV0IEFwcGxlUGF5XCIsIFQuYXV0aG9yaXplTmV0QXBwbGVQYXkuaW5pdCksXG4gIC8vIEFkeWVuIEdvb2dsZVBheVxuICBhZHllbkdvb2dsZVBheTogb2UoXCJBZHllbiBHb29nbGVQYXlcIiwgVC5hZHllbkdvb2dsZVBheS5pbml0KSxcbiAgLy8gQWR5ZW4gQXBwbGVQYXlcbiAgYWR5ZW5BcHBsZVBheTogb2UoXCJBZHllbiBBcHBsZVBheVwiLCBULmFkeWVuQXBwbGVQYXkuaW5pdClcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn0pLCB7IGVycl9fOiBQbCB9ID0gSShcImZvcm0tY2FsbGJhY2tzXCIpLCBhZSA9IHokMS5mdW5jdGlvbigpLm9wdGlvbmFsKCksIE1yID0geiQxLm9iamVjdCh7XG4gIG9uRm9jdXM6IGFlLFxuICBvbkJsdXI6IGFlLFxuICBvbkNoYW5nZTogYWUsXG4gIG9uTG9hZDogYWUsXG4gIG9uTG9hZEVycm9yOiBhZSxcbiAgb25WYWxpZGF0aW9uRXJyb3I6IGFlLFxuICBvbkNoZWNrb3V0U3RhcnRlZDogYWUsXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBhZSxcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBhZSxcbiAgb25DaGVja291dEVycm9yOiBhZSxcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IGFlXG59KSwgZmUgPSBjbGFzcyBmZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0Q2FsbGJhY2tzID0gKHQpID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IGZlLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCksIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtyLCBuXSkgPT4ge1xuICAgICAgICBjb25zdCBhID0geWEociwgbiA/PyBmZS5OT09QLCBQbCk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1tyXSA9IGE7XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLl9jYWxsYmFja3MgPSBmZS5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVhZC1vbmx5IHZlcnNpb24gb2YgdGhlIGNhbGxiYWNrcyBvYmplY3QuXG4gICAqL1xuICBnZXQgZ2V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2NhbGxiYWNrcyB9O1xuICB9XG59O1xuZmUuTk9PUCA9ICgpID0+IHtcbn0sIGZlLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzID0gKCkgPT4ge1xuICBjb25zdCB0ID0ge307XG4gIHJldHVybiBPYmplY3Qua2V5cyhNci5rZXlvZigpLmVudW0pLmZvckVhY2goKHIpID0+IHtcbiAgICB0W3JdID0gZmUuTk9PUDtcbiAgfSksIHQ7XG59LCBmZS5mcm9tT2JqZWN0ID0gKHQpID0+IHtcbiAgY29uc3QgciA9IG5ldyBmZSgpO1xuICByZXR1cm4gci5zZXRDYWxsYmFja3MoTXIucGFyc2UodCkpLCByO1xufTtcbmxldCBCdCA9IGZlO1xuZnVuY3Rpb24gU2woKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgZSA9ICQoKSwgdCA9IGU7XG4gICAgaWYgKHQgIT0gbnVsbCAmJiB0Lm5leHQgfHwgdCAhPSBudWxsICYmIHQuX19ORVhUX0RBVEFfXyB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI19fbmV4dFwiKSlcbiAgICAgIHJldHVybiBcIm5leHRqc1wiO1xuICAgIGNvbnN0IHIgPSBlO1xuICAgIGlmIChyICE9IG51bGwgJiYgci5fX05VWFRfXyB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI19fbnV4dFwiKSlcbiAgICAgIHJldHVybiBcIm51eHRcIjtcbiAgICBpZiAoT2JqZWN0LmtleXMoZG9jdW1lbnQpLmZpbmQoKGEpID0+IGEuaW5jbHVkZXMoXCJyZWFjdFwiKSkgfHwgQXJyYXkuZnJvbShkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoXCJib2R5ID4gKlwiKSkuZmluZChcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBfcmVhY3RSb290Q29udGFpbmVyIGRvZXNuJ3QgZXhpc3RcbiAgICAgIChhKSA9PiBhLl9yZWFjdFJvb3RDb250YWluZXJcbiAgICApKVxuICAgICAgcmV0dXJuIFwicmVhY3RcIjtcbiAgICBjb25zdCBuID0gZTtcbiAgICByZXR1cm4gbiAhPSBudWxsICYmIG4uVnVlIHx8IG4gIT0gbnVsbCAmJiBuLl9fVlVFX18gPyBcInZ1ZVwiIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIltuZy12ZXJzaW9uXVwiKSA/IFwiYW5ndWxhclwiIDogXCJ2YW5pbGxhXCI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBcInVua25vd25cIjtcbiAgfVxufVxuZnVuY3Rpb24gQ2woZSkge1xuICB2YXIgdCwgciwgbjtcbiAgdHJ5IHtcbiAgICBzd2l0Y2ggKGUpIHtcbiAgICAgIGNhc2UgXCJyZWFjdFwiOlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIGNhc2UgXCJuZXh0anNcIjoge1xuICAgICAgICBjb25zdCBvID0gJCgpO1xuICAgICAgICByZXR1cm4gKCh0ID0gbyA9PSBudWxsID8gdm9pZCAwIDogby5uZXh0KSA9PSBudWxsID8gdm9pZCAwIDogdC52ZXJzaW9uKSB8fCAoKHIgPSBvID09IG51bGwgPyB2b2lkIDAgOiBvLl9fTkVYVF9EQVRBX18pID09IG51bGwgPyB2b2lkIDAgOiByLmJ1aWxkSWQpIHx8IG51bGw7XG4gICAgICB9XG4gICAgICBjYXNlIFwibnV4dFwiOlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIGNhc2UgXCJ2dWVcIjpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBjYXNlIFwiYW5ndWxhclwiOiB7XG4gICAgICAgIGNvbnN0IGEgPSAobiA9ICQoKSkgPT0gbnVsbCA/IHZvaWQgMCA6IG4uZG9jdW1lbnQsIG8gPSBhID09IG51bGwgPyB2b2lkIDAgOiBhLnF1ZXJ5U2VsZWN0b3IoXCJbbmctdmVyc2lvbl1cIik7XG4gICAgICAgIHJldHVybiBvID8gby5nZXRBdHRyaWJ1dGUoXCJuZy12ZXJzaW9uXCIpIDogbnVsbDtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbmZ1bmN0aW9uIGtsKCkge1xuICBjb25zdCBlID0gU2woKSwgdCA9IENsKGUpO1xuICByZXR1cm4geyBmcmFtZXdvcms6IGUsIHZlcnNpb246IHQgfTtcbn1cbmNvbnN0IGFvID0gKCkgPT4ge1xuICBjb25zdCBlID0gd2luZG93ICYmIHdpbmRvdy5zY3JlZW4gPyB3aW5kb3cuc2NyZWVuLmhlaWdodCA6IG51bGwsIHQgPSB3aW5kb3cgJiYgd2luZG93LnNjcmVlbiA/IHdpbmRvdy5zY3JlZW4ud2lkdGggOiBudWxsLCByID0gd2luZG93ICYmIHdpbmRvdy5zY3JlZW4gPyB3aW5kb3cuc2NyZWVuLmNvbG9yRGVwdGggOiBudWxsLCBuID0gd2luZG93ICYmIHdpbmRvdy5uYXZpZ2F0b3IgPyB3aW5kb3cubmF2aWdhdG9yLmphdmFFbmFibGVkKCkgOiAhMSwgYSA9IHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yID8gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQgOiBudWxsLCBvID0gXCJ0ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sLGFwcGxpY2F0aW9uL3htbDtxPTAuOSxpbWFnZS93ZWJwLGltYWdlL2FwbmcsKi8qO3E9MC44XCI7XG4gIGxldCBzID0gbnVsbDtcbiAgd2luZG93ICYmIHdpbmRvdy5uYXZpZ2F0b3IgJiYgKHMgPSB3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlID8gd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZSA6IHdpbmRvdy5uYXZpZ2F0b3IuYnJvd3Nlckxhbmd1YWdlKTtcbiAgY29uc3QgYyA9ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgcmV0dXJuIHtcbiAgICBjb2xvcl9kZXB0aDogcixcbiAgICBqYXZhX2VuYWJsZWQ6IG4sXG4gICAgamF2YXNjcmlwdF9lbmFibGVkOiAhMCxcbiAgICBsYW5ndWFnZTogcyxcbiAgICBzY3JlZW5faGVpZ2h0OiBlLFxuICAgIHNjcmVlbl93aWR0aDogdCxcbiAgICB0aW1lX3pvbmVfb2Zmc2V0OiBjLFxuICAgIHVzZXJfYWdlbnQ6IGEsXG4gICAgYWNjZXB0X2hlYWRlcjogb1xuICB9O1xufTtcbnZhciBSID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUucG9ja3l0UGF5cGFsID0gXCJwb2NreXQtcGF5cGFsXCIsIGUuYXBwbGVQYXkgPSBcImFwcGxlLXBheVwiLCBlLmdvb2dsZVBheSA9IFwiZ29vZ2xlLXBheVwiLCBlLmxvb3BDcnlwdG8gPSBcImxvb3AtY3J5cHRvXCIsIGUucGF5cGFsID0gXCJwYXlwYWxcIiwgZS5haXJ3YWxsZXhHb29nbGVQYXkgPSBcImFpcndhbGxleC1nb29nbGUtcGF5XCIsIGUuYWlyd2FsbGV4QXBwbGVQYXkgPSBcImFpcndhbGxleC1hcHBsZS1wYXlcIiwgZS5hdXRob3JpemVuZXRHb29nbGVQYXkgPSBcImF1dGhvcml6ZW5ldC1nb29nbGUtcGF5XCIsIGUuYXV0aG9yaXplbmV0QXBwbGVQYXkgPSBcImF1dGhvcml6ZW5ldC1hcHBsZS1wYXlcIiwgZS5hZHllbkdvb2dsZVBheSA9IFwiYWR5ZW4tZ29vZ2xlLXBheVwiLCBlLmFkeWVuQXBwbGVQYXkgPSBcImFkeWVuLWFwcGxlLXBheVwiLCBlLmFpcndhbGxleEFDSCA9IFwiYWlyd2FsbGV4LWFjaFwiLCBlLmFpcndhbGxleEVGVCA9IFwiYWlyd2FsbGV4LWVmdFwiLCBlLmFpcndhbGxleEJBQ1MgPSBcImFpcndhbGxleC1iYWNzXCIsIGUuYWlyd2FsbGV4U0VQQSA9IFwiYWlyd2FsbGV4LXNlcGFcIiwgZSkpKFIgfHwge30pO1xueiQxLm5hdGl2ZUVudW0oUik7XG52YXIgQWUgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5BQ0ggPSBcImFjaFwiLCBlLkVGVCA9IFwiZWZ0XCIsIGUuQkFDUyA9IFwiYmFjc1wiLCBlLlNFUEEgPSBcInNlcGFcIiwgZS5BUFBMRV9QQVkgPSBcImFwcGxlX3BheVwiLCBlLkNSRURJVF9DQVJEID0gXCJjcmVkaXRfY2FyZFwiLCBlLkdPT0dMRV9QQVkgPSBcImdvb2dsZV9wYXlcIiwgZS5TVFJJUEVfTElOSyA9IFwic3RyaXBlX2xpbmtcIiwgZS5DUllQVE8gPSBcImNyeXB0b1wiLCBlLlBBWVBBTCA9IFwicGF5cGFsXCIsIGUpKShBZSB8fCB7fSk7XG5jb25zdCBMciA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBbZS5haXJ3YWxsZXhBcHBsZVBheSwgZS5hdXRob3JpemVOZXRBcHBsZVBheSwgZS5hZHllbkFwcGxlUGF5XSwgciA9IFtdO1xuICB0LmZvckVhY2goKGEpID0+IHtcbiAgICBjb25zdCBvID0gYS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgbyAhPSBudWxsICYmIG8uaXNBdmFpbGFibGUgJiYgci5wdXNoKG8pO1xuICB9KTtcbiAgY29uc3QgbiA9IGUuc3RyaXBlUFIucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICByZXR1cm4gbiAhPSBudWxsICYmIG4uaXNBdmFpbGFibGUgJiYgbi5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXkgJiYgci5wdXNoKHtcbiAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgaXNMb2FkaW5nOiAhMSxcbiAgICBwcm9jZXNzb3I6IFUuRW51bS5zdHJpcGUsXG4gICAgc3RhcnRGbG93OiAobykgPT4gbi5zdGFydEZsb3coXCJhcHBsZV9wYXlcIiwge1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogbyA9PSBudWxsID8gdm9pZCAwIDogby5vdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSlcbiAgfSksIHtcbiAgICBwcm9jZXNzb3JzOiByLm1hcCgoYSkgPT4gYS5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiByLmxlbmd0aCA+IDAsXG4gICAgaXNMb2FkaW5nOiAhMSxcbiAgICBzdGFydEZsb3c6IChhKSA9PiBBbChyLCBhKVxuICB9O1xufSwgRHIgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gW2UuYWlyd2FsbGV4R29vZ2xlUGF5LCBlLmF1dGhvcml6ZU5ldEdvb2dsZVBheSwgZS5hZHllbkdvb2dsZVBheV0sIHIgPSBbXTtcbiAgdC5mb3JFYWNoKChhKSA9PiB7XG4gICAgY29uc3QgbyA9IGEucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgIG8gIT0gbnVsbCAmJiBvLmlzQXZhaWxhYmxlICYmIHIucHVzaChvKTtcbiAgfSk7XG4gIGNvbnN0IG4gPSBlLnN0cmlwZVBSLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgcmV0dXJuIG4gIT0gbnVsbCAmJiBuLmlzQXZhaWxhYmxlICYmIG4uYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheSAmJiByLnB1c2goe1xuICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIHByb2Nlc3NvcjogVS5FbnVtLnN0cmlwZSxcbiAgICBzdGFydEZsb3c6IChvKSA9PiBuLnN0YXJ0RmxvdyhcImdvb2dsZV9wYXlcIiwge1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogbyA9PSBudWxsID8gdm9pZCAwIDogby5vdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSlcbiAgfSksIHtcbiAgICBwcm9jZXNzb3JzOiByLm1hcCgoYSkgPT4gYS5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiByLmxlbmd0aCA+IDAsXG4gICAgaXNMb2FkaW5nOiAhMSxcbiAgICBzdGFydEZsb3c6IChhKSA9PiBJbChyLCBhKVxuICB9O1xufSwgQWwgPSAoZSwgdCkgPT4ge1xuICBpZiAodCAhPSBudWxsICYmIHQucHJvY2Vzc29yKSB7XG4gICAgY29uc3QgbiA9IGUuZmluZCgoYSkgPT4gYS5wcm9jZXNzb3IgPT09IHQucHJvY2Vzc29yKTtcbiAgICBpZiAobiAhPSBudWxsICYmIG4uaXNBdmFpbGFibGUpXG4gICAgICByZXR1cm4gbi5zdGFydEZsb3codCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZWQgQXBwbGUgUGF5IHByb2Nlc3NvciAke3QucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgciA9IGUuZmluZCgobikgPT4gbi5pc0F2YWlsYWJsZSk7XG4gIGlmIChyKVxuICAgIHJldHVybiByLnN0YXJ0Rmxvdyh0KTtcbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEFwcGxlIFBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59LCBJbCA9IChlLCB0KSA9PiB7XG4gIGlmICh0ICE9IG51bGwgJiYgdC5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBuID0gZS5maW5kKChhKSA9PiBhLnByb2Nlc3NvciA9PT0gdC5wcm9jZXNzb3IpO1xuICAgIGlmIChuICE9IG51bGwgJiYgbi5pc0F2YWlsYWJsZSlcbiAgICAgIHJldHVybiBuLnN0YXJ0Rmxvdyh0KTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBHb29nbGUgUGF5IHByb2Nlc3NvciAke3QucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgciA9IGUuZmluZCgobikgPT4gbi5pc0F2YWlsYWJsZSk7XG4gIGlmIChyKVxuICAgIHJldHVybiByLnN0YXJ0Rmxvdyh0KTtcbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEdvb2dsZSBQYXkgcHJvY2Vzc29yIGZvdW5kXCIpO1xufSwgVGwgPSAoZSkgPT4gSlNPTi5zdHJpbmdpZnkoZSksIHsgbG9nX186IGp0LCBlcnJfXzogUmwgfSA9IEkoXCJ0cmFjZXJcIiksIE5sID0gKGUsIHQpID0+IHtcbiAgdHJ5IHtcbiAgICBGbChlLCB0KTtcbiAgfSBjYXRjaCAocikge1xuICAgIFJsKGBFcnJvciBpbml0aWFsaXppbmcgdHJhY2VyOiAke3J9YCk7XG4gIH1cbn07XG5sZXQgeHI7XG5jb25zdCBGbCA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID4gXCJ1XCIpXG4gICAgcmV0dXJuO1xuICBjb25zdCByID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LUI4dkhxTjZVLSF+ezAwM31+LmpzJyksIHsgQ29uc29sZVNwYW5FeHBvcnRlcjogbiwgU2ltcGxlU3BhblByb2Nlc3NvcjogYSwgV2ViVHJhY2VyUHJvdmlkZXI6IG8gfSA9IHIsIHMgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtWlNrTG0zQjMtIX57MDA2fX4uanMnKSwgeyBGZXRjaEluc3RydW1lbnRhdGlvbjogYyB9ID0gcywgbCA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1sb3YtM0xfZC0hfnswMGJ9fi5qcycpLCB7IFpvbmVDb250ZXh0TWFuYWdlcjogdSB9ID0gbCwgZCA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1EVmM3Yi0zeS0hfnswMGN9fi5qcycpLCB7IHJlZ2lzdGVySW5zdHJ1bWVudGF0aW9uczogZiB9ID0gZCwgXyA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1DY2M5aE40cC0hfnswMGV9fi5qcycpLCB7IFJlc291cmNlOiBtIH0gPSBfLCB5ID0gYXdhaXQgaW1wb3J0KCcuL2RldGVjdC1yZXNvdXJjZXMtQ0xNdWhBeXEtIX57MDBofX4uanMnKS50aGVuKChDZSkgPT4gQ2UuZCksIHsgZGV0ZWN0UmVzb3VyY2VzU3luYzogaCB9ID0geSwgYiA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC00ODNKY0F2Qy0hfnswMGt9fi5qcycpLCB7IE9UTFBUcmFjZUV4cG9ydGVyOiB2IH0gPSBiLCB3ID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LURpMUx4OE50LSF+ezAwbX1+LmpzJyksIHsgQjNQcm9wYWdhdG9yOiBFLCBCM0luamVjdEVuY29kaW5nOiBDIH0gPSB3LCBPID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LWlpdVdKTG4wLSF+ezAwMX1+LmpzJyksIHsgQmF0Y2hTcGFuUHJvY2Vzc29yOiBBIH0gPSBPO1xuICBqdChgSW5pdGlhbGl6aW5nIHRyYWNlciB3aXRoIHZlcnNpb24gJHtlfSBhbmQgYmFzZVVybCAke3R9YCk7XG4gIGNvbnN0IEQgPSBNbCh0KTtcbiAganQoYFVzaW5nIGNvbGxlY3RvciBVUkwgJHtEfWApO1xuICBjb25zdCBRID0gbmV3IHYoeyB1cmw6IEQgfSksIFNlID0ge1xuICAgIFwic2VydmljZS52ZXJzaW9uXCI6IGUsXG4gICAgXCJzZXJ2aWNlLm5hbWVcIjogXCJvanNcIlxuICB9O1xuICByZXR1cm4gbmV3IG8oe1xuICAgIHJlc291cmNlOiBuZXcgbShTZSkubWVyZ2UoaCgpKSxcbiAgICBzcGFuUHJvY2Vzc29yczogW1xuICAgICAgbmV3IGEobmV3IG4oKSksXG4gICAgICBuZXcgQShRLCB7XG4gICAgICAgIHNjaGVkdWxlZERlbGF5TWlsbGlzOiA1MDBcbiAgICAgIH0pXG4gICAgXVxuICB9KS5yZWdpc3Rlcih7XG4gICAgY29udGV4dE1hbmFnZXI6IG5ldyB1KCksXG4gICAgcHJvcGFnYXRvcjogbmV3IEUoeyBpbmplY3RFbmNvZGluZzogQy5NVUxUSV9IRUFERVIgfSlcbiAgfSksIGYoe1xuICAgIGluc3RydW1lbnRhdGlvbnM6IFtcbiAgICAgIG5ldyBjKHtcbiAgICAgICAgcHJvcGFnYXRlVHJhY2VIZWFkZXJDb3JzVXJsczogWy8uKi9dLFxuICAgICAgICAvLyBQcm9wYWdhdGUgdG8gYWxsIFVSTHNcbiAgICAgICAgLy8gRXhjbHVkZSBBZHllbiBVUkxzIC0gdGhleSBkbyBub3QgYWxsb3cgT1BUSU9OUyByZXF1ZXN0c1xuICAgICAgICAvLyBBbHNvIGV4Y2x1ZGUgbG9vcGNyeXB0by54eXpcbiAgICAgICAgaWdub3JlVXJsczogWy9eaHR0cHM6XFwvXFwvKC4qXFwuKT9hZHllblxcLmNvbS8sIC9eaHR0cHM6XFwvXFwvKC4qXFwuKT9sb29wY3J5cHRvXFwueHl6L11cbiAgICAgIH0pXG4gICAgXVxuICB9KSwgeHIgPSBqZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpLCBqdChcIlRyYWNlciBpbml0aWFsaXplZFwiKSwgeHI7XG59LCBNbCA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBuZXcgVVJMKGUpLmhvc3RuYW1lO1xuICByZXR1cm4gdCA9PT0gXCJjZGUub3BlbnBheXN0YWdpbmcuY29tXCIgPyBcImh0dHBzOi8vb3RlbC5vcGVucGF5c2FuZGJveC5jb20vdjEvdHJhY2VzXCIgOiB0ID09PSBcImNkZS5nZXRvcGVucGF5LmNvbVwiID8gXCJodHRwczovL290ZWwuZ2V0b3BlbnBheS5jb20vdjEvdHJhY2VzXCIgOiBcImh0dHA6Ly9sb2NhbGhvc3Q6NDMxOS92MS90cmFjZXNcIjtcbn07XG5jbGFzcyBMbCB7XG4gIGNvbnN0cnVjdG9yKHQsIHIsIG4sIGEpIHtcbiAgICB0aGlzLmhhbmRsZU1lc3NhZ2UgPSAobykgPT4ge1xuICAgICAgaWYgKCFvLnNvdXJjZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbT0pTXSBObyBzb3VyY2UgZm91bmRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChPcihvLm9yaWdpbikgIT09IE9yKHRoaXMuYmFzZVVybCkgfHwgdHlwZW9mIG8uZGF0YSA9PSBcIm9iamVjdFwiICYmIG8uZGF0YS5wZW5wYWwgfHwgdHlwZW9mIG8uZGF0YSA9PSBcIm9iamVjdFwiICYmIG8uZGF0YS5zb3VyY2UgJiYgby5kYXRhLnNvdXJjZSA9PT0gXCJyZWFjdC1kZXZ0b29scy1icmlkZ2VcIilcbiAgICAgICAgcmV0dXJuO1xuICAgICAgbGV0IHMgPSBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcyA9IE1zKEpTT04ucGFyc2Uoby5kYXRhKSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlRXZlbnQocykpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgZWxlbWVudElkOiBsLCBwYXlsb2FkOiB1IH0gPSBzLCBkID0gdS50eXBlO1xuICAgICAgc3dpdGNoIChkKSB7XG4gICAgICAgIGNhc2UgXCJMQVlPVVRcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLnNldEZvcm1IZWlnaHQodS5oZWlnaHQgPyBgJHt1LmhlaWdodH1weGAgOiBcIjEwMCVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJGT0NVU1wiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Gb2N1cyhsLCB1LmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkJMVVJcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQmx1cihsLCB1LmVsZW1lbnRUeXBlLCB7XG4gICAgICAgICAgICBvYmZ1c2NhdGVkVmFsdWU6IHUub2JmdXNjYXRlZFZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJDSEFOR0VcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hhbmdlKGwsIHUuZWxlbWVudFR5cGUsIHUuZXJyb3JzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURFRFwiOlxuICAgICAgICAgIHRoaXMuZXZlbnRUYXJnZXRzW2xdID0gby5zb3VyY2UsIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkZWQodSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FEX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRFcnJvcih1Lm1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVkFMSURBVElPTl9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IodS5lbGVtZW50VHlwZSwgdS5lcnJvcnMsIGwpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBVbmhhbmRsZWQgZXZlbnQgdHlwZTpcIiwgZCk7XG4gICAgICB9XG4gICAgfSwgdGhpcy52YWxpZGF0ZUV2ZW50ID0gKG8pID0+IG8uZm9ybUlkICE9PSB0aGlzLmZvcm1JZCB8fCAhby5lbGVtZW50SWQgPyAoY29uc29sZS5sb2coXCJbT0pTXSBmb3JtSWRcIiwgdGhpcy5mb3JtSWQsIG8uZm9ybUlkKSwgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIHVua25vd24gZXZlbnQ6XCIsIG8pLCAhMSkgOiB0aGlzLm5vbmNlcy5oYXMoby5ub25jZSkgPyAoY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIGR1cGxpY2F0ZSBldmVudDpcIiwgbyksICExKSA6ICh0aGlzLm5vbmNlcy5hZGQoby5ub25jZSksICEwKSwgdGhpcy5ldmVudFRhcmdldHMgPSB7fSwgdGhpcy5ub25jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLCB0aGlzLmZvcm1JZCA9IHQsIHRoaXMuYmFzZVVybCA9IHIsIHRoaXMuZm9ybUNhbGxiYWNrcyA9IG4sIHRoaXMuaW50ZXJuYWxDYWxsYmFja3MgPSBhO1xuICB9XG59XG5jb25zdCBPciA9IChlKSA9PiBuZXcgVVJMKGUpLm9yaWdpbjtcbmFzeW5jIGZ1bmN0aW9uIERsKGUsIHQpIHtcbiAgY29uc3QgbiA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IGUsXG4gICAgZGVidWc6ICExLFxuICAgIGNoaWxkT3JpZ2luOiB0XG4gIH0pLnByb21pc2UsIGEgPSBhd2FpdCBicyhuKTtcbiAgaWYgKCFFcyhuLCBhKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgaW52YWxpZCBDREUgY29ubmVjdGlvbiBvYmplY3RcIik7XG4gIHJldHVybiBuO1xufVxuY2xhc3MgeGwge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgfVxuICBhZGRDb25uZWN0aW9uKHQsIHIpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLnNldCh0LCByKTtcbiAgfVxuICBnZXRDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IHQgPSB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICBpZiAoIXQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIG5vdCBmb3VuZFwiKTtcbiAgICByZXR1cm4gdDtcbiAgfVxuICBnZXRBbGxDb25uZWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9ucztcbiAgfVxufVxuY29uc3QgT2wgPSAoZSwgdCwgcikgPT4ge1xuICBjb25zdCB7IHN0cmlwZVBSOiBuIH0gPSBlO1xuICBuLnB1Ymxpc2hlci5zdWJzY3JpYmUoKGEpID0+IHtcbiAgICBpZiAoYS5pc1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IG8gPSBhLmxvYWRlZFZhbHVlLCBzID0gby5pc0F2YWlsYWJsZSAmJiBvLmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheSwgYyA9IG8uaXNBdmFpbGFibGUgJiYgby5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5LCBsID0ge1xuICAgICAgICBhcHBsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBzLFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHUpID0+IHtcbiAgICAgICAgICAgIHMgJiYgVXIoXCJhcHBsZV9wYXlcIiwgbywgdCwgciwgdSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnb29nbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogYyxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1KSA9PiB7XG4gICAgICAgICAgICBjICYmIFVyKFwiZ29vZ2xlX3BheVwiLCBvLCB0LCByLCB1KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByLmdldC5vblBheW1lbnRSZXF1ZXN0TG9hZChsKTtcbiAgICB9XG4gIH0pO1xufSwgVXIgPSAoZSwgdCwgciwgbiwgYSkgPT4gVC5zdHJpcGVQUi5ydW4oe1xuICBjb250ZXh0OiByLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IG1lKHIuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgZSksXG4gIG5vbkNkZUZvcm1JbnB1dHM6IGooci5mb3JtRGl2KSxcbiAgZm9ybUNhbGxiYWNrczogbixcbiAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiBlLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBhID09IG51bGwgPyB2b2lkIDAgOiBhLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgaW5pdFJlc3VsdDogdFxufSksIGpyID0gXCJUaGUgc2VjdXJlIGZvcm0gZmFpbGVkIHRvIGxvYWQgcHJvcGVybHkuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24sIG9yIHRyeSBhZ2FpbiBsYXRlci5cIiwgeyBsb2dfXzogcGUsIGVycl9fOiB0ZSB9ID0gSShcIm9wLWZvcm1cIiksIHllID0gY2xhc3MgeWUge1xuICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgdmFyIGE7XG4gICAgdGhpcy5pc0Rlc3Ryb3llZCA9ICExLCB0aGlzLmNkZUxvYWRFdmVudCA9IG5ldyBldCgpLCB0aGlzLmFueUNkZUNvbm4gPSBuZXcgZXQoKSwgdGhpcy5jb250ZXh0ID0gbmV3IGV0KCksIHRoaXMuaW5pdEZsb3dzID0gRWwoKSwgdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMSwgdGhpcy5zdGFydEZvcm1Jbml0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgbyA9IGplLmdldFRyYWNlcihcIm9wZW5wYXktanNcIiksIHMgPSBvLnN0YXJ0U3BhbihcImZvcm0uaW5pdGlhbGl6ZVwiLCB7XG4gICAgICAgIGtpbmQ6IHN0LkNMSUVOVCxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIC8vICdlbnZpcm9ubWVudCc6ICxcbiAgICAgICAgICAvLyAnZnJhbWV3b3JrJzogZnJhbWV3b3JrLFxuICAgICAgICAgIC8vICdmcmFtZXdvcmsudmVyc2lvbic6IHZlcnNpb24sXG4gICAgICAgICAgXCJvanMuZm9ybUlkXCI6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgIFwib2pzLnZlcnNpb25cIjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgIFwib2pzLnJlbGVhc2VfdmVyc2lvblwiOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIFwib2pzLmJhc2VfdXJsXCI6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiB0aGlzLnJlZmVycmVyXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHhlLndpdGgoamUuc2V0U3Bhbih4ZS5hY3RpdmUoKSwgcyksIGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBjID0gdGhpcy5jcmVhdGVFbGVtZW50KF9lLkNERV9CUklER0UpO1xuICAgICAgICAgIGMubm9kZS5pZCA9IFwiX19vcF9pbnRlcm5hbF9jZGVfYnJpZGdlXCIsIGMubm9kZS5hcmlhSGlkZGVuID0gXCJ0cnVlXCIsIE9iamVjdC5hc3NpZ24oYy5ub2RlLnN0eWxlLCB7XG4gICAgICAgICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgICAgICAgbWFyZ2luOiBcIjBweFwiLFxuICAgICAgICAgICAgcGFkZGluZzogXCIwcHhcIixcbiAgICAgICAgICAgIHdpZHRoOiBcIjFweFwiLFxuICAgICAgICAgICAgaGVpZ2h0OiBcIjFweFwiLFxuICAgICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiBcImhpZGRlblwiLFxuICAgICAgICAgICAgcG9zaXRpb246IFwiZml4ZWRcIixcbiAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6IFwibm9uZVwiLFxuICAgICAgICAgICAgdXNlclNlbGVjdDogXCJub25lXCJcbiAgICAgICAgICB9KSwgYy5tb3VudChcImJvZHlcIiksIHBlKFwiQ0RFIGJyaWRnZSBlbGVtZW50IG1vdW50ZWRcIiksIHBlKFwiSW5pdGlhbGl6aW5nIE9wZW5QYXkgZm9ybTpcIiksIHBlKFwi4pScIFdhaXRpbmcgZm9yIENERSBsb2FkIGV2ZW50Li4uXCIpO1xuICAgICAgICAgIGNvbnN0IGwgPSBhd2FpdCB0aGlzLmNkZUxvYWRFdmVudC53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBqclxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHBlKFwi4pScIENERSBsb2FkIGV2ZW50IHJlY2VpdmVkXCIpLCBzID09IG51bGwgfHwgcy5hZGRFdmVudChcIndhaXRpbmdfZm9yX2NkZV9jb25uZWN0aW9uXCIpLCBwZShcIuKUnCBXYWl0aW5nIGZvciBDREUgY29ubmVjdGlvbi4uLlwiKTtcbiAgICAgICAgICBjb25zdCB1ID0gbyA9PSBudWxsID8gdm9pZCAwIDogby5zdGFydFNwYW4oXCJjZGUuY29ubmVjdFwiLCB2b2lkIDAsIHhlLmFjdGl2ZSgpKSwgZCA9IGF3YWl0IHRoaXMuYW55Q2RlQ29ubi53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBqclxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHUgPT0gbnVsbCB8fCB1LmVuZCgpLCBzID09IG51bGwgfHwgcy5hZGRFdmVudChcImNkZV9jb25uZWN0ZWRcIiksIHBlKFwi4pScIENERSBjb25uZWN0aW9uIHJlY2VpdmVkXCIpLCBhd2FpdCB2cyhkLCB0aGlzLmRldmljZVRva2VuKSwgcGUoXCLilJwgQ3JlYXRpbmcgT0pTIGNvbnRleHQsIHNldHRpbmcgdXAgaGFuZGxlcnMuLi5cIik7XG4gICAgICAgICAgY29uc3QgZiA9IHllLmJ1aWxkT2pzRmxvd0NvbnRleHQoXG4gICAgICAgICAgICB0aGlzLmNvbmZpZyxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBkLFxuICAgICAgICAgICAgdGhpcy5nZXRGb3JtRGl2KClcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuY29udGV4dC5zZXQoZiksIE9sKHRoaXMuaW5pdEZsb3dzLCBmLCB0aGlzLmZvcm1DYWxsYmFja3MpLCBwZShcIuKUnCBTdGFydGluZyBPSlMgaW5pdCBmbG93cy4uLlwiKSwgYXdhaXQgYmwodGhpcy5pbml0Rmxvd3MsIGYsIHRoaXMuZm9ybUNhbGxiYWNrcyksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkKGwudG90YWxBbW91bnRBdG9tcywgbC5jdXJyZW5jeSksIHBlKFwi4pWwIERvbmUgaW5pdGlhbGl6aW5nIE9KUyBmbG93cy5cIiksIHMgPT0gbnVsbCB8fCBzLnNldFN0YXR1cyh7IGNvZGU6IEVlLk9LIH0pLCBnKFwiZm9ybV9sb2FkZWRcIik7XG4gICAgICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgICAgICBjb25zdCBsID0gZWUoYyk7XG4gICAgICAgICAgcyA9PSBudWxsIHx8IHMuc2V0U3RhdHVzKHtcbiAgICAgICAgICAgIGNvZGU6IEVlLkVSUk9SLFxuICAgICAgICAgICAgbWVzc2FnZTogbFxuICAgICAgICAgIH0pLCB0ZShcIuKVsCBFcnJvciBpbml0aWFsaXppbmcgT1AgZm9ybTpcIiwgbCksIGcoXCJmb3JtX2luaXRfZXJyb3JcIiwge1xuICAgICAgICAgICAgZXJyb3I6IGxcbiAgICAgICAgICB9KSwgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWRFcnJvcihsKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzID09IG51bGwgfHwgcy5lbmQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgdGhpcy5zZXRGb3JtSGVpZ2h0ID0gKG8pID0+IHtcbiAgICAgIHRoaXMuZm9ybVByb3BlcnRpZXMuaGVpZ2h0ID0gbywgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgJiYgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cykuZm9yRWFjaCgocykgPT4ge1xuICAgICAgICAhcyB8fCBzLnR5cGUgPT09IF9lLkNERV9CUklER0UgfHwgKHMubm9kZS5zdHlsZS5oZWlnaHQgPSBvKTtcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMub25DZGVMb2FkZWQgPSAobykgPT4ge1xuICAgICAgdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MgfHwgKHRoaXMuY2RlTG9hZEV2ZW50LnNldChvKSwgZyhcImNkZV9sb2FkZWRcIikpO1xuICAgIH0sIHRoaXMub25DZGVMb2FkRXJyb3IgPSAobykgPT4ge1xuICAgICAgdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MgfHwgKHRoaXMuY2RlTG9hZEV2ZW50LnRocm93KG5ldyBFcnJvcihvKSwgbyksIGcoXCJjZGVfbG9hZF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBvXG4gICAgICB9KSk7XG4gICAgfSwgdGhpcy5jcmVhdGVFbGVtZW50ID0gKG8sIHMgPSB7fSkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImNyZWF0ZUVsZW1lbnRcIiksICF0aGlzLmNvbmZpZykgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBmb3JtIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICAgIGNvbnN0IGMgPSB1by5wYXJzZShvKSwgbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIiksIHUgPSB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcocyk7XG4gICAgICBsLm5hbWUgPSBgJHtjfS1lbGVtZW50YDtcbiAgICAgIGNvbnN0IGQgPSBuZXcgVVJMKGAvYXBwL3YxLyR7bC5uYW1lfS9gLCB0aGlzLmNvbmZpZy5iYXNlVXJsKTtcbiAgICAgIHJldHVybiBkLnNlYXJjaCA9IHUudG9TdHJpbmcoKSwgbC5zcmMgPSBkLmhyZWYsIGwuc3R5bGUuYm9yZGVyID0gXCJub25lXCIsIGwuc3R5bGUud2lkdGggPSBcIjEwMCVcIiwgdGhpcy5yZWdpc3RlcklmcmFtZShjLCBsKTtcbiAgICB9LCB0aGlzLnJlZ2lzdGVySWZyYW1lID0gKG8sIHMpID0+IHtcbiAgICAgIGNvbnN0IGMgPSB7XG4gICAgICAgIHR5cGU6IG8sXG4gICAgICAgIG5vZGU6IHMsXG4gICAgICAgIG1vdW50OiAobCkgPT4ge1xuICAgICAgICAgIHZhciB1O1xuICAgICAgICAgICh1ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihsKSkgPT0gbnVsbCB8fCB1LmFwcGVuZENoaWxkKHMpLCBnKFwiZWxlbWVudF9tb3VudGVkXCIsIHtcbiAgICAgICAgICAgIGVsZW1lbnRfdHlwZTogb1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdFRvRWxlbWVudCh7IHR5cGU6IGMudHlwZSwgbm9kZTogYy5ub2RlIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyB8fCAodGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSB7XG4gICAgICAgIFtfZS5DQVJEXTogdm9pZCAwLFxuICAgICAgICBbX2UuQ0FSRF9OVU1CRVJdOiB2b2lkIDAsXG4gICAgICAgIFtfZS5DQVJEX0VYUElSWV06IHZvaWQgMCxcbiAgICAgICAgW19lLkNBUkRfQ1ZDXTogdm9pZCAwLFxuICAgICAgICBbX2UuQ0RFX0JSSURHRV06IHZvaWQgMFxuICAgICAgfSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzW29dID0gYywgYztcbiAgICB9LCB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcgPSAobykgPT4ge1xuICAgICAgY29uc3QgcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgIHJldHVybiBzLmFwcGVuZChcInJlZmVyZXJcIiwgdGhpcy5yZWZlcnJlciksIHMuYXBwZW5kKFwiZm9ybUlkXCIsIHRoaXMuZm9ybUlkKSwgby5zdHlsZXMgJiYgcy5hcHBlbmQoXCJzdHlsZXNcIiwgVGwoby5zdHlsZXMpKSwgcy5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuKSwgcztcbiAgICB9LCB0aGlzLmNvbm5lY3RUb0VsZW1lbnQgPSAobykgPT4gbXQoXG4gICAgICB7XG4gICAgICAgIHNwYW5OYW1lOiBcImNvbm5lY3RfdG9fZWxlbWVudFwiLFxuICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgfSxcbiAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcyA9IGF3YWl0IERsKG8ubm9kZSk7XG4gICAgICAgIHMudHJhY2luZ0NvbnRleHQgPSB7XG4gICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgfSwgdGhpcy5jb25uZWN0aW9uTWFuYWdlci5hZGRDb25uZWN0aW9uKG8udHlwZSwgcyksICF0aGlzLmFueUNkZUNvbm4uY3VycmVudC5pc1N1Y2Nlc3MgJiYgby50eXBlID09PSBfZS5DREVfQlJJREdFICYmIHRoaXMuYW55Q2RlQ29ubi5zZXQocyk7XG4gICAgICB9XG4gICAgKS5jYXRjaCgocykgPT4gdGUoXCJbRk9STV0gRXJyb3IgY29ubmVjdGluZyB0byBDREUgaWZyYW1lXCIsIHMpKSwgdGhpcy5nZXRGb3JtRGl2ID0gKCkgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1UYXJnZXQpID8/IGRvY3VtZW50LmJvZHksIHRoaXMuc3VibWl0Q2FyZCA9IGFzeW5jIChvKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1N1Ym1pdHRpbmcpIHtcbiAgICAgICAgdGUoXCJGb3JtIGlzIGFscmVhZHkgc3VibWl0dGluZy4gUGxlYXNlIHdhaXQgZm9yIHRoZSBzdWJtaXNzaW9uIHRvIGZpbmlzaCBiZWZvcmUgc3VibWl0dGluZyBhZ2Fpbi5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gITA7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzID0gYXdhaXQgbXQoXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3Bhbk5hbWU6IFwic3VibWl0X2NhcmRcIixcbiAgICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyLFxuICAgICAgICAgICAgcGF5bWVudFJvdXRlSWQ6IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ucGF5bWVudFJvdXRlSWRcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGcoXCJzdWJtaXRfY2FyZFwiLCB7IC4uLm8gfSksIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcInN1Ym1pdENhcmRcIik7XG4gICAgICAgICAgICBjb25zdCBjID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgaWYgKCFjKVxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICAgICAgYXdhaXQgVC5jb21tb25DQy5ydW4oe1xuICAgICAgICAgICAgICBjb250ZXh0OiBjLFxuICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG1lKGMuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJjcmVkaXRfY2FyZFwiKSxcbiAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihjLmZvcm1EaXYpLFxuICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRDZGVDb25uZWN0aW9uczogdGhpcy5jb25uZWN0aW9uTWFuYWdlci5nZXRBbGxDb25uZWN0aW9ucygpLFxuICAgICAgICAgICAgICAgIHBheW1lbnRSb3V0ZUlkOiBvID09IG51bGwgPyB2b2lkIDAgOiBvLnBheW1lbnRSb3V0ZUlkXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMSwgcztcbiAgICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMSwgcztcbiAgICAgIH1cbiAgICB9LCB0aGlzLmdldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzID0gKCkgPT4gbXQoXG4gICAgICB7XG4gICAgICAgIHNwYW5OYW1lOiBcImdldF9hdmFpbGFibGVfcGF5bWVudF9tZXRob2RzXCIsXG4gICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kc1wiKTtcbiAgICAgICAgY29uc3QgbyA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgaWYgKCFvKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgZ2V0dGluZyBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzLlwiKTtcbiAgICAgICAgY29uc3QgeyBwcm9jZXNzb3JzOiBzLCBpc0F2YWlsYWJsZTogYyB9ID0gTHIoXG4gICAgICAgICAgdGhpcy5pbml0Rmxvd3NcbiAgICAgICAgKSwgeyBwcm9jZXNzb3JzOiBsLCBpc0F2YWlsYWJsZTogdSB9ID0gRHIoXG4gICAgICAgICAgdGhpcy5pbml0Rmxvd3NcbiAgICAgICAgKSwgZCA9IHRoaXMuaW5pdEZsb3dzLnBheXBhbC5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCksIGYgPSAoZCA9PSBudWxsID8gdm9pZCAwIDogZC5pc0F2YWlsYWJsZSkgPz8gITEsIF8gPSBvLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMuc29tZShcbiAgICAgICAgICAodykgPT4gdy5wcm9jZXNzb3JfbmFtZSA9PT0gXCJwb2NreXRcIiAmJiB3LnByb3ZpZGVyID09PSBcInBheXBhbFwiXG4gICAgICAgICksIG0gPSB0aGlzLmluaXRGbG93cy5sb29wLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKSwgeSA9IChtID09IG51bGwgPyB2b2lkIDAgOiBtLmlzQXZhaWxhYmxlKSA/PyAhMSwgaCA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBSLmFwcGxlUGF5LFxuICAgICAgICAgICAgcHJvY2Vzc29yczogcyxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBjXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBSLmdvb2dsZVBheSxcbiAgICAgICAgICAgIHByb2Nlc3NvcnM6IGwsXG4gICAgICAgICAgICBpc0F2YWlsYWJsZTogdVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogUi5wYXlwYWwsXG4gICAgICAgICAgICBwcm9jZXNzb3JzOiBmID8gW1UuRW51bS5wYXlwYWxdIDogW10sXG4gICAgICAgICAgICBpc0F2YWlsYWJsZTogZlxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogUi5wb2NreXRQYXlwYWwsXG4gICAgICAgICAgICBwcm9jZXNzb3JzOiBfID8gW1UuRW51bS5wb2NreXRdIDogW10sXG4gICAgICAgICAgICBpc0F2YWlsYWJsZTogX1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogUi5sb29wQ3J5cHRvLFxuICAgICAgICAgICAgcHJvY2Vzc29yczogeSA/IFtVLkVudW0ubG9vcF0gOiBbXSxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiB5XG4gICAgICAgICAgfVxuICAgICAgICBdLCBiID0ge1xuICAgICAgICAgIHBheXBhbDogUi5wYXlwYWwsXG4gICAgICAgICAgYWlyd2FsbGV4R29vZ2xlUGF5OiBSLmFpcndhbGxleEdvb2dsZVBheSxcbiAgICAgICAgICBhaXJ3YWxsZXhBcHBsZVBheTogUi5haXJ3YWxsZXhBcHBsZVBheSxcbiAgICAgICAgICBhdXRob3JpemVOZXRHb29nbGVQYXk6IFIuYXV0aG9yaXplbmV0R29vZ2xlUGF5LFxuICAgICAgICAgIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiBSLmF1dGhvcml6ZW5ldEFwcGxlUGF5LFxuICAgICAgICAgIGFkeWVuR29vZ2xlUGF5OiBSLmFkeWVuR29vZ2xlUGF5LFxuICAgICAgICAgIGFkeWVuQXBwbGVQYXk6IFIuYWR5ZW5BcHBsZVBheVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gWy4uLk9iamVjdC5lbnRyaWVzKHRoaXMuaW5pdEZsb3dzKS5tYXAoKFt3LCBFXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IEMgPSBFLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogYlt3XSA/PyB3LFxuICAgICAgICAgICAgcHJvY2Vzc29yczogW10sXG4gICAgICAgICAgICBpc0F2YWlsYWJsZTogKEMgPT0gbnVsbCA/IHZvaWQgMCA6IEMuaXNBdmFpbGFibGUpID8/ICExXG4gICAgICAgICAgfTtcbiAgICAgICAgfSksIC4uLmhdO1xuICAgICAgfVxuICAgICksIHRoaXMuZ2VuZXJhbFN1Ym1pdCA9IGFzeW5jIChvLCBzKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1N1Ym1pdHRpbmcpIHtcbiAgICAgICAgdGUoXCJGb3JtIGlzIGFscmVhZHkgc3VibWl0dGluZy4gUGxlYXNlIHdhaXQgZm9yIHRoZSBzdWJtaXNzaW9uIHRvIGZpbmlzaCBiZWZvcmUgc3VibWl0dGluZyBhZ2Fpbi5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gITA7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjID0gYXdhaXQgbXQoXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3Bhbk5hbWU6IFwiZ2VuZXJhbF9mb3JtX3N1Ym1pdFwiLFxuICAgICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGcoXCJnZW5lcmFsX2Zvcm1fc3VibWl0XCIsIHsgbWV0aG9kOiBvLCBzZXR0aW5nczogcyB9KSwgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiZ2VuZXJhbFN1Ym1pdFwiKTtcbiAgICAgICAgICAgIGNvbnN0IGwgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICBpZiAoIWwpXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgICAgICBzd2l0Y2ggKG8pIHtcbiAgICAgICAgICAgICAgY2FzZSBSLnBvY2t5dFBheXBhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gVC5wb2NreXRQYXlwYWwucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGwsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG1lKFxuICAgICAgICAgICAgICAgICAgICBsLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIEFlLlBBWVBBTCxcbiAgICAgICAgICAgICAgICAgICAgXCJwb2NreXRcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGoobC5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczogcyB9LFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgUi5wYXlwYWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFQucGF5cGFsLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBsLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBtZShcbiAgICAgICAgICAgICAgICAgICAgbC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBBZS5QQVlQQUwsXG4gICAgICAgICAgICAgICAgICAgIFwicGF5cGFsXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGwuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3M6IHMgfSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFIubG9vcENyeXB0bzpcbiAgICAgICAgICAgICAgICByZXR1cm4gVC5sb29wQ3J5cHRvLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBsLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBtZShcbiAgICAgICAgICAgICAgICAgICAgbC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBcImNyeXB0b1wiLFxuICAgICAgICAgICAgICAgICAgICBcImxvb3BcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGoobC5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogcyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFIuYXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0RmxvdzogdSB9ID0gTHIodGhpcy5pbml0Rmxvd3MpO1xuICAgICAgICAgICAgICAgIHJldHVybiB1KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgUi5nb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0RmxvdzogdSB9ID0gRHIodGhpcy5pbml0Rmxvd3MpO1xuICAgICAgICAgICAgICAgIHJldHVybiB1KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgUi5haXJ3YWxsZXhHb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXUpIHtcbiAgICAgICAgICAgICAgICAgIHRlKFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleC1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdS5zdGFydEZsb3cocyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBSLmFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdSA9IHRoaXMuaW5pdEZsb3dzLmFpcndhbGxleEFwcGxlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXUpIHtcbiAgICAgICAgICAgICAgICAgIHRlKFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleC1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnN0YXJ0RmxvdyhzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFIuYXV0aG9yaXplbmV0R29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdSA9IHRoaXMuaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCF1KSB7XG4gICAgICAgICAgICAgICAgICB0ZShcbiAgICAgICAgICAgICAgICAgICAgXCJhdXRob3JpemUtbmV0LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnN0YXJ0RmxvdyhzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFIuYXV0aG9yaXplbmV0QXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghdSkge1xuICAgICAgICAgICAgICAgICAgdGUoXG4gICAgICAgICAgICAgICAgICAgIFwiYXV0aG9yaXplLW5ldC1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnN0YXJ0RmxvdyhzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFIuYWR5ZW5Hb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYWR5ZW5Hb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghdSkge1xuICAgICAgICAgICAgICAgICAgdGUoXG4gICAgICAgICAgICAgICAgICAgIFwiYWR5ZW4tZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUuc3RhcnRGbG93KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgUi5hZHllbkFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdSA9IHRoaXMuaW5pdEZsb3dzLmFkeWVuQXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghdSkge1xuICAgICAgICAgICAgICAgICAgdGUoXG4gICAgICAgICAgICAgICAgICAgIFwiYWR5ZW4tYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdS5zdGFydEZsb3cocyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBSLmFpcndhbGxleEFDSDpcbiAgICAgICAgICAgICAgICByZXR1cm4gVC5haXJ3YWxsZXhBQ0gucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGwsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG1lKFxuICAgICAgICAgICAgICAgICAgICBsLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIEFlLkFDSCxcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXhcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGoobC5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogcyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFIuYWlyd2FsbGV4RUZUOlxuICAgICAgICAgICAgICAgIHJldHVybiBULmFpcndhbGxleEVGVC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogbCxcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbWUoXG4gICAgICAgICAgICAgICAgICAgIGwuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgQWUuRUZULFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihsLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgUi5haXJ3YWxsZXhCQUNTOlxuICAgICAgICAgICAgICAgIHJldHVybiBULmFpcndhbGxleEJBQ1MucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGwsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG1lKFxuICAgICAgICAgICAgICAgICAgICBsLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIEFlLkJBQ1MsXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4XCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGwuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHMsXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBSLmFpcndhbGxleFNFUEE6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFQuYWlyd2FsbGV4U0VQQS5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogbCxcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbWUoXG4gICAgICAgICAgICAgICAgICAgIGwuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgQWUuU0VQQSxcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXhcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGoobC5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogcyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGt0KG8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTdWJtaXR0aW5nID0gITEsIGM7XG4gICAgICB9IGNhdGNoIChjKSB7XG4gICAgICAgIHRocm93IHRoaXMuaXNTdWJtaXR0aW5nID0gITEsIGM7XG4gICAgICB9XG4gICAgfSwgdGhpcy5zdWJtaXQgPSB0aGlzLnN1Ym1pdENhcmQsIHRoaXMuZGVzdHJveSA9ICgpID0+IHtcbiAgICAgIHZhciBvO1xuICAgICAgcGUoXCJEZXN0cm95aW5nIE9wZW5QYXkgZm9ybS4uLlwiKSwgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiZGVzdHJveVwiKSwgdGhpcy5pc0Rlc3Ryb3llZCA9ICEwO1xuICAgICAgZm9yIChjb25zdCBzIG9mIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPz8ge30pKVxuICAgICAgICBzICYmIHMubm9kZS5yZW1vdmUoKTtcbiAgICAgIChvID0gJCgpKSA9PSBudWxsIHx8IG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSksIHZpKCksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbCwgZGVsZXRlIHdpbmRvdy5vanMsIGcoXCJmb3JtX2Rlc3Ryb3llZFwiKTtcbiAgICB9LCB0aGlzLnVwZGF0ZUNhbGxiYWNrcyA9IChvKSA9PiB7XG4gICAgICB0aGlzLmZvcm1DYWxsYmFja3Muc2V0Q2FsbGJhY2tzKG8pO1xuICAgIH0sIHllLmFzc2lnbkFzU2luZ2xldG9uKHRoaXMpLCB0aGlzLm9qc1ZlcnNpb24gPSBcIjAuNS41XCIsIHRoaXMub2pzUmVsZWFzZVZlcnNpb24gPSBcImxvY2FsX2J1aWxkXCIsIHRoaXMuYmFzZVVybCA9IHQuYmFzZVVybCA/PyBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCIsIHRoaXMuY29uZmlnID0geyAuLi50LCBiYXNlVXJsOiB0aGlzLmJhc2VVcmwgfSwgdGhpcy5mb3JtQ2FsbGJhY2tzID0gQnQuZnJvbU9iamVjdCh0KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsLCB0aGlzLmZvcm1JZCA9IGBvcGpzLWZvcm0tJHt2NCgpfWAsIHRoaXMucmVmZXJyZXIgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luLCB0aGlzLmZvcm1UYXJnZXQgPSB0LmZvcm1UYXJnZXQgPz8gXCJib2R5XCIsIHRoaXMuZm9ybVByb3BlcnRpZXMgPSB7IGhlaWdodDogXCIxcHhcIiB9LCB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyID0gbmV3IHhsKCksIHRoaXMuZGV2aWNlVG9rZW4gPSBUbigpLCB3aSgpO1xuICAgIGNvbnN0IHsgZnJhbWV3b3JrOiByLCB2ZXJzaW9uOiBuIH0gPSBrbCgpO1xuICAgIHBuKHRoaXMuYmFzZVVybCkudGhlbigobykgPT4ge1xuICAgICAgaWYgKCFxdC5jdXJyZW50LmlzU3VjY2Vzcykge1xuICAgICAgICBjb25zdCBzID0ge1xuICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgZW52aXJvbm1lbnQ6IG8sXG4gICAgICAgICAgZnJhbWV3b3JrOiByLFxuICAgICAgICAgIGZyYW1ld29ya1ZlcnNpb246IG4sXG4gICAgICAgICAgb2pzVmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgIG9qc1JlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyLFxuICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybFxuICAgICAgICB9O1xuICAgICAgICBxdC5zZXQocyk7XG4gICAgICB9XG4gICAgfSksIGcoXCJmb3JtX2luaXRcIiksIGNvbnNvbGUubG9nKFwiT0pTIFZFUlNJT05cIiwgdGhpcy5vanNWZXJzaW9uKSwgdC5hbGxvd1RyYWNpbmcgPT09ICEwICYmIE5sKHRoaXMub2pzVmVyc2lvbiwgdGhpcy5iYXNlVXJsKSwgdGhpcy5ldmVudEhhbmRsZXIgPSBuZXcgTGwodGhpcy5mb3JtSWQsIHRoaXMuYmFzZVVybCwgdGhpcy5mb3JtQ2FsbGJhY2tzLCB7XG4gICAgICBzZXRGb3JtSGVpZ2h0OiB0aGlzLnNldEZvcm1IZWlnaHQsXG4gICAgICBvbkNkZUxvYWRlZDogdGhpcy5vbkNkZUxvYWRlZCxcbiAgICAgIG9uQ2RlTG9hZEVycm9yOiB0aGlzLm9uQ2RlTG9hZEVycm9yXG4gICAgfSksIChhID0gJCgpKSA9PSBudWxsIHx8IGEuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSksIHRoaXMuc3RhcnRGb3JtSW5pdCgpO1xuICB9XG4gIGdldCBjaGVja291dFNlY3VyZVRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuO1xuICB9XG4gIGNoZWNrVmFsaWRGb3JtSW5zdGFuY2UodCA9IFwidW5rbm93blwiKSB7XG4gICAgY29uc3QgciA9IHllLmdldEluc3RhbmNlKCksIG4gPSB7XG4gICAgICBjYWxsZXI6IHQsXG4gICAgICB0aGlzRm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgIGN1cnJlbnRGb3JtSWQ6IChyID09IG51bGwgPyB2b2lkIDAgOiByLmZvcm1JZCkgfHwgXCJuby1jdXJyZW50LWluc3RhbmNlXCIsXG4gICAgICBpc0Rlc3Ryb3llZDogdGhpcy5pc0Rlc3Ryb3llZCxcbiAgICAgIGNoZWNrb3V0VG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4uc3Vic3RyaW5nKDAsIDEwKSArIFwiLi4uXCJcbiAgICB9LCBhID0gYFxuICAgICAgW1dhcm5pbmddIEludmFsaWQgZm9ybSBpbnN0YW5jZSBkZXRlY3RlZC5cbiAgICAgIEl0IGxvb2tzIGxpa2UgeW91IGFyZSBzdGlsbCB1c2luZyBhbiBvbGQgaW5zdGFuY2UgdGhhdCBoYXMgYmVlbiBkZXN0cm95ZWQuXG4gICAgICBQbGVhc2UgbWFrZSBzdXJlIHlvdSBhcmUgdXNpbmcgdGhlIGxhdGVzdCBpbnN0YW5jZSBvZiB0aGUgZm9ybSBhbmQgY2xlYW51cCBldmVudCBsaXN0ZW5lcnMuXG4gICAgICDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICAgIERlYnVnIEluZm86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgIC0gY2FsbGVyOiAke3R9XG4gICAgICAtIGNhbGxlcl9mb3JtX2lkOiAke24udGhpc0Zvcm1JZH1cbiAgICAgIC0gY3VycmVudF9hY3RpdmVfZm9ybV9pZDogJHtuLmN1cnJlbnRGb3JtSWR9XG4gICAgICAtIGlzX2Rlc3Ryb3llZDogJHtuLmlzRGVzdHJveWVkfVxuICAgICAgLSBjaGVja291dF90b2tlbjogJHtuLmNoZWNrb3V0VG9rZW59XG4gICAgYDtcbiAgICByZXR1cm4gdGhpcy5pc0Rlc3Ryb3llZCA/ICh0ZShhKSwgZyhcIm91dGRhdGVkX2Zvcm1faW5zdGFuY2VcIiwgeyBlcnJvcjogYSB9KSwgITEpIDogIXIgfHwgci5mb3JtSWQgIT09IHRoaXMuZm9ybUlkID8gKHRlKGEpLCBnKFwib3V0ZGF0ZWRfZm9ybV9pbnN0YW5jZVwiLCB7IGVycm9yOiBhIH0pLCAhMSkgOiAhMDtcbiAgfVxufTtcbnllLm9qc0Zsb3dzID0gVCwgeWUuYXNzaWduQXNTaW5nbGV0b24gPSAodCkgPT4ge1xuICBpZiAoeWUuZ2V0SW5zdGFuY2UoKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGluc3RhbmNlIGFscmVhZHkgZXhpc3RzLiBPbmx5IG9uZSBpbnN0YW5jZSBpcyBhbGxvd2VkLlwiKTtcbiAgd2luZG93Lm9qcyA9IHQ7XG59LCB5ZS5nZXRJbnN0YW5jZSA9ICgpID0+IHdpbmRvdy5vanMgPz8gbnVsbCwgeWUuYnVpbGRPanNGbG93Q29udGV4dCA9ICh0LCByLCBuLCBhKSA9PiAoe1xuICBjaGVja291dFNlY3VyZVRva2VuOiB0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gIGJhc2VVcmw6IG5ldyBVUkwodC5iYXNlVXJsID8/IENuKS5vcmlnaW4sXG4gIGZvcm1EaXY6IGEsXG4gIGVsZW1lbnRzU2Vzc2lvbklkOiByLnNlc3Npb25JZCxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogci5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICBhbnlDZGVDb25uZWN0aW9uOiBuLFxuICBjdXN0b21Jbml0UGFyYW1zOiB0LmN1c3RvbUluaXRQYXJhbXMgPz8ge30sXG4gIHByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvbjogdC5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb25cbn0pO1xubGV0ICRyID0geWU7XG5cbmNvbnN0IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyA9IChwcm9wcykgPT4ge1xuICBjb25zdCBmb3JtQ2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5mcm9tT2JqZWN0KHtcbiAgICBvbkZvY3VzOiBwcm9wcy5vbkZvY3VzLFxuICAgIG9uQmx1cjogcHJvcHMub25CbHVyLFxuICAgIG9uQ2hhbmdlOiBwcm9wcy5vbkNoYW5nZSxcbiAgICBvbkxvYWQ6IHByb3BzLm9uTG9hZCxcbiAgICBvbkxvYWRFcnJvcjogcHJvcHMub25Mb2FkRXJyb3IsXG4gICAgb25WYWxpZGF0aW9uRXJyb3I6IHByb3BzLm9uVmFsaWRhdGlvbkVycm9yLFxuICAgIG9uQ2hlY2tvdXRTdGFydGVkOiBwcm9wcy5vbkNoZWNrb3V0U3RhcnRlZCxcbiAgICBvbkNoZWNrb3V0U3VjY2VzczogcHJvcHMub25DaGVja291dFN1Y2Nlc3MsXG4gICAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBwcm9wcy5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MsXG4gICAgb25DaGVja291dEVycm9yOiBwcm9wcy5vbkNoZWNrb3V0RXJyb3IsXG4gICAgb25QYXltZW50UmVxdWVzdExvYWQ6IHByb3BzLm9uUGF5bWVudFJlcXVlc3RMb2FkXG4gIH0pO1xuICBpZiAoJHIuZ2V0SW5zdGFuY2UoKSkge1xuICAgICRyLmdldEluc3RhbmNlKCk/LnVwZGF0ZUNhbGxiYWNrcyhmb3JtQ2FsbGJhY2tzLmdldCk7XG4gIH1cbiAgcmV0dXJuIGZvcm1DYWxsYmFja3MuZ2V0O1xufTtcblxuY29uc3QgRk9STV9UQVJHRVQgPSBcIm9wX29qc19mb3JtXCI7XG5jb25zdCBFbGVtZW50c0Zvcm0gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgW29wRm9ybSwgc2V0T3BGb3JtXSA9IHVzZVN0YXRlKCk7XG4gIGNvbnN0IFtlbGVtZW50c0NvbnRleHRWYWx1ZSwgc2V0RWxlbWVudHNDb250ZXh0VmFsdWVdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtsb2FkZWQsIHNldExvYWRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFthcHBsZVBheVJlc3VsdCwgc2V0QXBwbGVQYXlSZXN1bHRdID0gdXNlU3RhdGUoTU9CSUxFX1dBTExFVF9MT0FESU5HX1NUQVRFKTtcbiAgY29uc3QgW2dvb2dsZVBheVJlc3VsdCwgc2V0R29vZ2xlUGF5UmVzdWx0XSA9IHVzZVN0YXRlKE1PQklMRV9XQUxMRVRfTE9BRElOR19TVEFURSk7XG4gIGNvbnN0IFtzdHJpcGVMaW5rQ3RybCwgc2V0U3RyaXBlTGlua0N0cmxdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtsb29wQ29uZmlnLCBzZXRMb29wQ29uZmlnXSA9IHVzZVN0YXRlKExPT1BfTE9BRElORyk7XG4gIGNvbnN0IFthaXJ3YWxsZXgsIHNldEFpcndhbGxleF0gPSB1c2VTdGF0ZSh7XG4gICAgZ29vZ2xlUGF5OiBBV1hfTE9BRElORyxcbiAgICBhcHBsZVBheTogQVdYX0xPQURJTkdcbiAgfSk7XG4gIGNvbnN0IGZvcm1DYWxsYmFja3MgPSB1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3Moe1xuICAgIC4uLnByb3BzLFxuICAgIG9uTG9hZDogKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KSA9PiB7XG4gICAgICBzZXRMb2FkZWQodHJ1ZSk7XG4gICAgICBwcm9wcy5vbkxvYWQ/Lih0b3RhbEFtb3VudEF0b21zLCBjdXJyZW5jeSk7XG4gICAgICBpZiAob3BGb3JtKSB7XG4gICAgICAgIGNvbnN0IGFwcGxlUGF5UmVzdWx0MiA9IGdldEFwcGxlUGF5UHJvY2Vzc29ycyhvcEZvcm0uaW5pdEZsb3dzKTtcbiAgICAgICAgc2V0QXBwbGVQYXlSZXN1bHQoYXBwbGVQYXlSZXN1bHQyKTtcbiAgICAgICAgY29uc3QgZ29vZ2xlUGF5UmVzdWx0MiA9IGdldEdvb2dsZVBheVByb2Nlc3NvcnMob3BGb3JtLmluaXRGbG93cyk7XG4gICAgICAgIHNldEdvb2dsZVBheVJlc3VsdChnb29nbGVQYXlSZXN1bHQyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvcEZvcm0pIHJldHVybjtcbiAgICBjb25zdCBmb3JtID0gJHIuZ2V0SW5zdGFuY2UoKSA/PyBuZXcgJHIoe1xuICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogcHJvcHMuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgIGZvcm1UYXJnZXQ6IGAjJHtGT1JNX1RBUkdFVH1gLFxuICAgICAgYmFzZVVybDogcHJvcHMuYmFzZVVybCxcbiAgICAgIGN1c3RvbUluaXRQYXJhbXM6IHByb3BzLmN1c3RvbUluaXRQYXJhbXMsXG4gICAgICBhbGxvd1RyYWNpbmc6IHByb3BzLmFsbG93VHJhY2luZyA/PyBmYWxzZSxcbiAgICAgIHByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvbjogcHJvcHMucHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uLFxuICAgICAgLi4uZm9ybUNhbGxiYWNrc1xuICAgIH0pO1xuICAgIHNldE9wRm9ybShmb3JtKTtcbiAgICBjb25zdCB2YWx1ZSA9IGdldEVsZW1lbnRzQ29udGV4dFZhbHVlKGZvcm0pO1xuICAgIHNldEVsZW1lbnRzQ29udGV4dFZhbHVlKHZhbHVlKTtcbiAgICBmb3JtLmluaXRGbG93cy5zdHJpcGVMaW5rLnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldFN0cmlwZUxpbmtDdHJsKHJlc3VsdC5sb2FkZWRWYWx1ZS5jb250cm9sbGVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JtLmluaXRGbG93cy5sb29wLnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldExvb3BDb25maWcoe1xuICAgICAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgd2lkZ2V0OiByZXN1bHQubG9hZGVkVmFsdWUud2lkZ2V0UHJvcHMsXG4gICAgICAgICAgY29uZmlnOiByZXN1bHQubG9hZGVkVmFsdWUuaW5pdExvb3BDb25uZWN0UHJvcHNcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgIXJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRMb29wQ29uZmlnKHtcbiAgICAgICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICB3aWRnZXQ6IG51bGwsXG4gICAgICAgICAgY29uZmlnOiBudWxsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheS5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZSkge1xuICAgICAgICBzZXRBaXJ3YWxsZXgoKHByZXYpID0+ICh7XG4gICAgICAgICAgYXBwbGVQYXk6IHByZXYuYXBwbGVQYXksXG4gICAgICAgICAgZ29vZ2xlUGF5OiByZXN1bHQubG9hZGVkVmFsdWVcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmFpcndhbGxleEFwcGxlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlKSB7XG4gICAgICAgIHNldEFpcndhbGxleCgocHJldikgPT4gKHtcbiAgICAgICAgICBnb29nbGVQYXk6IHByZXYuZ29vZ2xlUGF5LFxuICAgICAgICAgIGFwcGxlUGF5OiByZXN1bHQubG9hZGVkVmFsdWVcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBmb3JtLmRlc3Ryb3koKTtcbiAgICB9O1xuICB9LCBbXSk7XG4gIGlmICghb3BGb3JtKSB7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHt9KTtcbiAgfVxuICBjb25zdCBjaGlsZHJlblByb3BzID0ge1xuICAgIHN1Ym1pdDogb3BGb3JtLnN1Ym1pdENhcmQsXG4gICAgc3VibWl0V2l0aDogb3BGb3JtLmdlbmVyYWxTdWJtaXQsXG4gICAgYXBwbGVQYXk6IGFwcGxlUGF5UmVzdWx0LFxuICAgIGdvb2dsZVBheTogZ29vZ2xlUGF5UmVzdWx0LFxuICAgIGxvYWRlZCxcbiAgICAvLyBEaXNhYmxlIGR5bmFtaWMgcHJldmlld3MgZmVhdHVyZSBmb3Igbm93XG4gICAgcHJldmlldzoge1xuICAgICAgYW1vdW50OiBudWxsLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIGVycm9yOiBudWxsXG4gICAgfSxcbiAgICBzdHJpcGVMaW5rOiBzdHJpcGVMaW5rQ3RybCxcbiAgICBhaXJ3YWxsZXgsXG4gICAgbG9vcDogbG9vcENvbmZpZ1xuICB9O1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwgeyBjaGlsZHJlbjogZWxlbWVudHNDb250ZXh0VmFsdWUgPyAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRzQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogZWxlbWVudHNDb250ZXh0VmFsdWUsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFwiZGl2XCIsIHsgaWQ6IEZPUk1fVEFSR0VULCBjbGFzc05hbWU6IHByb3BzLmNsYXNzTmFtZSwgY2hpbGRyZW46IHByb3BzLmNoaWxkcmVuKGNoaWxkcmVuUHJvcHMpIH0pIH0pIDogLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwge30pIH0pO1xufTtcbmNvbnN0IGdldEVsZW1lbnRzQ29udGV4dFZhbHVlID0gKG9wRm9ybSkgPT4ge1xuICByZXR1cm4ge1xuICAgIGZvcm1JZDogb3BGb3JtLmZvcm1JZCxcbiAgICBmb3JtSGVpZ2h0OiBvcEZvcm0uZm9ybVByb3BlcnRpZXMuaGVpZ2h0LFxuICAgIHJlZmVycmVyOiBvcEZvcm0ucmVmZXJyZXIsXG4gICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogb3BGb3JtLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgcmVnaXN0ZXJJZnJhbWU6IG9wRm9ybS5yZWdpc3RlcklmcmFtZSxcbiAgICBiYXNlVXJsOiBvcEZvcm0uYmFzZVVybFxuICB9O1xufTtcblxuZXhwb3J0IHsgJGkgYXMgJCwgQ2FyZEN2Y0VsZW1lbnQgYXMgQywgRWUgYXMgRSwgRmllbGROYW1lIGFzIEYsIEt0IGFzIEssIFByIGFzIFAsIFF0IGFzIFEsIFN1Ym1pdE1ldGhvZHMgYXMgUywgVmkgYXMgViwgV2kgYXMgVywgWCwgWnQgYXMgWiwgRXQgYXMgYSwgaXQgYXMgYiwgQ2FyZEVsZW1lbnQgYXMgYywgQ2FyZEV4cGlyeUVsZW1lbnQgYXMgZCwgQ2FyZE51bWJlckVsZW1lbnQgYXMgZSwgZm4gYXMgZiwgZ24gYXMgZywgRWxlbWVudHNGb3JtIGFzIGgsIGlzIGFzIGksIGplIGFzIGosIEVudmlyb25tZW50IGFzIGssIFBheUluRmFpbGVkIGFzIGwsIFBheUluU3RhdGUgYXMgbSwgcnMgYXMgciwgc3QgYXMgcywgdHMgYXMgdCwgdXNlT3BlblBheUVsZW1lbnRzIGFzIHUsIHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcyBhcyB2LCB4ZSBhcyB4LCB5biBhcyB5LCB6dCBhcyB6IH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxrQkFBQUEsVUFBc0I7QUFDL0IsU0FBUyxLQUFLQyxTQUFXO0FBQ3pCLE9BQU9DLFFBQVc7QUFDbEIsU0FBUyxNQUFBQyxVQUFVO0FBQ25CLFNBQVMsT0FBQUMsSUFBSyxZQUFBQyxVQUFnQjtBQUM5QixTQUFTLGlCQUFBQyxJQUFlLGNBQUFDLElBQVksWUFBQUMsSUFBVSxVQUFBQyxJQUFRLFdBQUFDLElBQVMsYUFBQUMsVUFBaUI7QUFFaEYsU0FBU0MsR0FBU0MsR0FBUUMsR0FBVztBQUNuQyxNQUFJQyxJQUFpQixPQUFPO0FBQzVCLEVBQUFBLElBQWlCQSxFQUFlRixHQUFRQyxDQUFTLElBQUlELEVBQU8sWUFBWUM7QUFDMUU7QUFDQSxTQUFTRSxHQUFTSCxHQUFRSSxHQUFJO0FBQzVCLEVBQUlBLE1BQU8sV0FDVEEsSUFBS0osRUFBTztBQUdkLE1BQUlL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JDEiLCAiY2hhbGsiLCAidjQiLCAianN4IiwgIkZyYWdtZW50IiwgImNyZWF0ZUNvbnRleHQiLCAidXNlQ29udGV4dCIsICJ1c2VTdGF0ZSIsICJ1c2VSZWYiLCAidXNlTWVtbyIsICJ1c2VFZmZlY3QiLCAiZml4UHJvdG8iLCAidGFyZ2V0IiwgInByb3RvdHlwZSIsICJzZXRQcm90b3R5cGVPZiIsICJmaXhTdGFjayIsICJmbiIsICJjYXB0dXJlU3RhY2tUcmFjZSIsICJfX2V4dGVuZHMkMSIsICJfZXh0ZW5kU3RhdGljcyIsICJkIiwgImIiLCAicCIsICJfXyIsICJfc3VwZXIiLCAiQ3VzdG9tRXJyb3IiLCAibWVzc2FnZSIsICJvcHRpb25zIiwgIl9uZXdUYXJnZXQiLCAiX3RoaXMiLCAiUmVxdWlyZWRTdHJpbmciLCAiT3B0aW9uYWxTdHJpbmciLCAibnVsbE9yVW5kZWZPciQxIiwgInpUeXBlIiwgIkZpZWxkTmFtZSIsICJGaWVsZE5hbWUyIiwgIkZpZWxkTmFtZUVudW0iLCAiUHJpdmF0ZUZpZWxkTmFtZSIsICJQcml2YXRlRmllbGROYW1lMiIsICJQcml2YXRlRmllbGROYW1lRW51bSIsICJBbGxGaWVsZE5hbWVzIiwgIkVsZW1lbnRUeXBlRW51bSIsICJFbGVtZW50VHlwZUVudW0yIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCQxIiwgIlBheW1lbnRNZXRob2RNaW5pbWFsIiwgIkV2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFBheWxvYWQiLCAiSW5wdXRFdmVudFR5cGUiLCAiSW5wdXRFdmVudFBheWxvYWQiLCAiRXJyb3JFdmVudFR5cGUiLCAiRXJyb3JFdmVudFBheWxvYWQiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCIsICJMYXlvdXRFdmVudFBheWxvYWQiLCAiTG9hZGVkRXZlbnRQYXlsb2FkIiwgIlBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCIsICJTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAiUFJGb3JtRmllbGRzIiwgIlN1Ym1pdEV2ZW50VHlwZSIsICJTdWJtaXRFdmVudFBheWxvYWQiLCAiVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAiRmllbGRWYWxpZGF0aW9uRXJyb3IiLCAiVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSIsICJBV1hCYW5rIiwgIkNvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSIsICJFRlRGb3JtRGF0YSIsICJCQUNTRm9ybURhdGEiLCAiU0VQQUZvcm1EYXRhIiwgIm51bGxPclVuZGVmT3IiLCAiQ291cG9uTWluaW1hbCIsICJMaW5lSXRlbSIsICJCcmFuZFNldHRpbmdzIiwgIkJyYW5kIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJTdWJzY3JpcHRpb25JdGVtTWluaW1hbCIsICJTdWJzY3JpcHRpb25NaW5pbWFsIiwgIkludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCIsICJJbnZvaWNlTGluZUl0ZW1NaW5pbWFsIiwgIkRpc2NvdW50TWluaW1hbCIsICJJbnZvaWNlTWluaW1hbCIsICJDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwiLCAiUHJldmlld0NoZWNrb3V0UmVzcG9uc2UiLCAiX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiIsICJQYXltZW50Rm9ybVByZWZpbGwiLCAiQ29tcGxldGVkRm9ybVByZWZpbGwiLCAiRXhwaXJlZEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlQWRkcmVzcyIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxIiwgIk5ld0N1c3RvbWVyRmllbGRzIiwgIlByaWNlUXR5IiwgIkNhcnRJbmZvIiwgIlByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IiLCAiWm9kRmllbGRFcnJvciIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgImNhbGxiYWNrTmFtZSIsICJlcnJvckxvZ2dlciIsICJhcmdzIiwgImVycm9yIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgInByZWZpeCIsICJsb2ciLCAiZXJyIiwgImV4dGVuZFN0YXRpY3MiLCAiX19leHRlbmRzIiwgIl9fYXdhaXRlciIsICJ0aGlzQXJnIiwgIl9hcmd1bWVudHMiLCAiUCIsICJnZW5lcmF0b3IiLCAiYWRvcHQiLCAidmFsdWUiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZnVsZmlsbGVkIiwgInN0ZXAiLCAiZSIsICJyZWplY3RlZCIsICJyZXN1bHQiLCAiX19nZW5lcmF0b3IiLCAiYm9keSIsICJfIiwgInQiLCAiZiIsICJ5IiwgImciLCAidmVyYiIsICJuIiwgInYiLCAib3AiLCAiX192YWx1ZXMiLCAibyIsICJzIiwgIm0iLCAiaSIsICJfX3JlYWQiLCAiciIsICJhciIsICJfX3NwcmVhZEFycmF5IiwgInRvIiwgImZyb20iLCAicGFjayIsICJsIiwgIl9fYXdhaXQiLCAiX19hc3luY0dlbmVyYXRvciIsICJxIiwgImF3YWl0UmV0dXJuIiwgImEiLCAicmVzdW1lIiwgInNldHRsZSIsICJmdWxmaWxsIiwgIl9fYXN5bmNWYWx1ZXMiLCAiaXNGdW5jdGlvbiIsICJ2YWx1ZSIsICJjcmVhdGVFcnJvckNsYXNzIiwgImNyZWF0ZUltcGwiLCAiX3N1cGVyIiwgImluc3RhbmNlIiwgImN0b3JGdW5jIiwgIlVuc3Vic2NyaXB0aW9uRXJyb3IiLCAiZXJyb3JzIiwgImVyciIsICJhcnJSZW1vdmUiLCAiYXJyIiwgIml0ZW0iLCAiaW5kZXgiLCAiU3Vic2NyaXB0aW9uIiwgImluaXRpYWxUZWFyZG93biIsICJlXzEiLCAiX2EiLCAiZV8yIiwgIl9iIiwgIl9wYXJlbnRhZ2UiLCAiX3BhcmVudGFnZV8xIiwgIl9fdmFsdWVzIiwgIl9wYXJlbnRhZ2VfMV8xIiwgInBhcmVudF8xIiwgImVfMV8xIiwgImluaXRpYWxGaW5hbGl6ZXIiLCAiZSIsICJfZmluYWxpemVycyIsICJfZmluYWxpemVyc18xIiwgIl9maW5hbGl6ZXJzXzFfMSIsICJmaW5hbGl6ZXIiLCAiZXhlY0ZpbmFsaXplciIsICJfX3NwcmVhZEFycmF5IiwgIl9fcmVhZCIsICJlXzJfMSIsICJ0ZWFyZG93biIsICJwYXJlbnQiLCAiZW1wdHkiLCAiRU1QVFlfU1VCU0NSSVBUSU9OIiwgImlzU3Vic2NyaXB0aW9uIiwgImNvbmZpZyIsICJ0aW1lb3V0UHJvdmlkZXIiLCAiaGFuZGxlciIsICJ0aW1lb3V0IiwgImFyZ3MiLCAiX2kiLCAiaGFuZGxlIiwgImRlbGVnYXRlIiwgInJlcG9ydFVuaGFuZGxlZEVycm9yIiwgIm5vb3AiLCAiZXJyb3JDb250ZXh0IiwgImNiIiwgIlN1YnNjcmliZXIiLCAiX19leHRlbmRzIiwgImRlc3RpbmF0aW9uIiwgIl90aGlzIiwgIkVNUFRZX09CU0VSVkVSIiwgIm5leHQiLCAiZXJyb3IiLCAiY29tcGxldGUiLCAiU2FmZVN1YnNjcmliZXIiLCAiX2JpbmQiLCAiYmluZCIsICJmbiIsICJ0aGlzQXJnIiwgIkNvbnN1bWVyT2JzZXJ2ZXIiLCAicGFydGlhbE9ic2VydmVyIiwgImhhbmRsZVVuaGFuZGxlZEVycm9yIiwgIm9ic2VydmVyT3JOZXh0IiwgImNvbnRleHRfMSIsICJkZWZhdWx0RXJyb3JIYW5kbGVyIiwgIm9ic2VydmFibGUiLCAiaWRlbnRpdHkiLCAieCIsICJwaXBlRnJvbUFycmF5IiwgImZucyIsICJpbnB1dCIsICJwcmV2IiwgIk9ic2VydmFibGUiLCAic3Vic2NyaWJlIiwgIm9wZXJhdG9yIiwgInN1YnNjcmliZXIiLCAiaXNTdWJzY3JpYmVyIiwgInNvdXJjZSIsICJzaW5rIiwgInByb21pc2VDdG9yIiwgImdldFByb21pc2VDdG9yIiwgInJlc29sdmUiLCAicmVqZWN0IiwgIm9wZXJhdGlvbnMiLCAiaXNPYnNlcnZlciIsICJoYXNMaWZ0IiwgIm9wZXJhdGUiLCAiaW5pdCIsICJsaWZ0ZWRTb3VyY2UiLCAiY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIiwgIm9uTmV4dCIsICJvbkNvbXBsZXRlIiwgIm9uRXJyb3IiLCAib25GaW5hbGl6ZSIsICJPcGVyYXRvclN1YnNjcmliZXIiLCAic2hvdWxkVW5zdWJzY3JpYmUiLCAiY2xvc2VkXzEiLCAiT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IiLCAiU3ViamVjdCIsICJzdWJqZWN0IiwgIkFub255bW91c1N1YmplY3QiLCAiX2MiLCAib2JzZXJ2ZXIiLCAib2JzZXJ2ZXJzIiwgImhhc0Vycm9yIiwgImlzU3RvcHBlZCIsICJ0aHJvd25FcnJvciIsICJkYXRlVGltZXN0YW1wUHJvdmlkZXIiLCAiQWN0aW9uIiwgInNjaGVkdWxlciIsICJ3b3JrIiwgInN0YXRlIiwgImRlbGF5IiwgImludGVydmFsUHJvdmlkZXIiLCAiQXN5bmNBY3Rpb24iLCAiaWQiLCAiX2lkIiwgIl9zY2hlZHVsZXIiLCAiX2RlbGF5IiwgImVycm9yZWQiLCAiZXJyb3JWYWx1ZSIsICJhY3Rpb25zIiwgIlNjaGVkdWxlciIsICJzY2hlZHVsZXJBY3Rpb25DdG9yIiwgIm5vdyIsICJBc3luY1NjaGVkdWxlciIsICJTY2hlZHVsZXJBY3Rpb24iLCAiYWN0aW9uIiwgImFzeW5jU2NoZWR1bGVyIiwgImlzQXJyYXlMaWtlIiwgImlzUHJvbWlzZSIsICJpc0ludGVyb3BPYnNlcnZhYmxlIiwgImlzQXN5bmNJdGVyYWJsZSIsICJvYmoiLCAiY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IiLCAiZ2V0U3ltYm9sSXRlcmF0b3IiLCAiaXRlcmF0b3IiLCAiaXNJdGVyYWJsZSIsICJyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yIiwgInJlYWRhYmxlU3RyZWFtIiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAicmVhZGVyIiwgImRvbmUiLCAiX19nZW5lcmF0b3IiLCAiX19hd2FpdCIsICJpc1JlYWRhYmxlU3RyZWFtTGlrZSIsICJpbm5lckZyb20iLCAiZnJvbUludGVyb3BPYnNlcnZhYmxlIiwgImZyb21BcnJheUxpa2UiLCAiZnJvbVByb21pc2UiLCAiZnJvbUFzeW5jSXRlcmFibGUiLCAiZnJvbUl0ZXJhYmxlIiwgImZyb21SZWFkYWJsZVN0cmVhbUxpa2UiLCAib2JzIiwgImFycmF5IiwgImkiLCAicHJvbWlzZSIsICJpdGVyYWJsZSIsICJpdGVyYWJsZV8xIiwgIml0ZXJhYmxlXzFfMSIsICJhc3luY0l0ZXJhYmxlIiwgInByb2Nlc3MiLCAiYXN5bmNJdGVyYWJsZV8xIiwgImFzeW5jSXRlcmFibGVfMV8xIiwgIl9fYXdhaXRlciIsICJfX2FzeW5jVmFsdWVzIiwgImV4ZWN1dGVTY2hlZHVsZSIsICJwYXJlbnRTdWJzY3JpcHRpb24iLCAicmVwZWF0IiwgInNjaGVkdWxlU3Vic2NyaXB0aW9uIiwgInRocm93RXJyb3IiLCAiZXJyb3JPckVycm9yRmFjdG9yeSIsICJlcnJvckZhY3RvcnkiLCAiRW1wdHlFcnJvciIsICJsYXN0VmFsdWVGcm9tIiwgIl9oYXNWYWx1ZSIsICJfdmFsdWUiLCAiaXNWYWxpZERhdGUiLCAiVGltZW91dEVycm9yIiwgImluZm8iLCAic2NoZWR1bGVyQXJnIiwgImZpcnN0IiwgImVhY2giLCAiX3dpdGgiLCAidGltZW91dEVycm9yRmFjdG9yeSIsICJfZCIsICJtZXRhIiwgIm9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uIiwgInRpbWVyU3Vic2NyaXB0aW9uIiwgImxhc3RWYWx1ZSIsICJzZWVuIiwgInN0YXJ0VGltZXIiLCAiTG9hZGVkT25jZVB1Ymxpc2hlciIsICJlcnJNc2ciLCAidmFsdWVJZk5vdExvYWRlZCIsICJzdWJzY3JpcHRpb24iLCAidGltZW91dENvbmZpZyIsICJhc3NlcnROZXZlciIsICJ0aW1lb3V0UGFyYW1zIiwgInokMSIsICJjb25udG9CYXNlVXJscyIsICJnZXRDb25udG9VcmwiLCAiZW52IiwgImdldFdpbmRvd1NhZmUiLCAibWV0cmljc1B1Ymxpc2hlciIsICJNRVRSSUNTX1FVRVVFX0tFWSIsICJNQVhfUkVUUllfQVRURU1QVFMiLCAiQkFUQ0hfU0laRSIsICJCQVRDSF9JTlRFUlZBTF9NUyIsICJsb2dfXyQxIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgIk1ldHJpY3NRdWV1ZSIsICJldmVudE5hbWUiLCAicHJvcGVydGllcyIsICJjb250ZXh0UHJvcGVydGllcyIsICJldmVudCIsICJ2NCIsICJzdG9yZWRRdWV1ZSIsICJzYWZlV2luZG93IiwgImNvbnRleHQiLCAiYmF0Y2giLCAiYmF0Y2hQYXlsb2FkIiwgImNvbm50b1VybCIsICJtZXRyaWNzUm91dGVyIiwgImV2ZW50c1RvS2VlcCIsICJtZXRyaWNzUXVldWUiLCAiZXh0cmFjdElzc3Vlc1BlckZpZWxkIiwgImlzc3Vlc1BlckZpZWxkIiwgImtleSIsICJmaWVsZE5hbWUiLCAiRmllbGROYW1lRW51bSIsICJsb2dfXyIsICJlcnJfXyQxIiwgImNyZWF0ZUR5bmFtaWNWYWxpZGF0aW9uU2NoZW1hIiwgInJlcXVpcmVfemlwX2NvZGUiLCAicmVxdWlyZV9mdWxsX2JpbGxpbmdfYWRkcmVzcyIsICJyZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcyIsICJwYXltZW50X21ldGhvZCIsICJjb25kaXRpb25hbEZpZWxkcyIsICJGaWVsZE5hbWUiLCAiUmVxdWlyZWRTdHJpbmciLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgInZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcyIsICJub25DZGVGb3JtSW5wdXRzIiwgIm9uVmFsaWRhdGlvbkVycm9yIiwgImRlZmF1bHRGaWVsZFZhbHVlcyIsICJrZXlzIiwgInJlc3VsdCIsICJmb3JtYXR0ZWQiLCAiaXNzdWVzIiwgImlzc3VlS2V5cyIsICJQYXltZW50UHJvY2Vzc29yIiwgIkFXWF9MT0FESU5HIiwgIkFkeWVuRW52aXJvbm1lbnQiLCAiRW52aXJvbm1lbnQiLCAiRW52aXJvbm1lbnQyIiwgIlBheUluRmFpbGVkIiwgIlBheUluRmFpbGVkMiIsICJQYXlJblN0YXRlIiwgIlBheUluU3RhdGUyIiwgIkxPT1BfTE9BRElORyIsICJlcnJfXyIsICJPcHRpb25hbEZuIiwgIlpvZEZvcm1DYWxsYmFja3MiLCAiX0Zvcm1DYWxsYmFja3MiLCAicmF3Q2FsbGJhY2tzIiwgInJhd0NhbGxiYWNrIiwgInNhZmVDYWxsYmFjayIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgIkZvcm1DYWxsYmFja3MiLCAiU3VibWl0TWV0aG9kcyIsICJTdWJtaXRNZXRob2RzMiIsICJNT0JJTEVfV0FMTEVUX0xPQURJTkdfU1RBVEUiLCAiZ2V0QXBwbGVQYXlQcm9jZXNzb3JzIiwgImluaXRGbG93cyIsICJhcHBsZVBheUluaXRGbG93cyIsICJhcHBsZVBheUluaXRSZXN1bHRzIiwgImZsb3ciLCAiZmxvd1ZhbHVlIiwgInN0cmlwZVBSRmxvd1Jlc3VsdCIsICJjdXN0b21QYXJhbXMiLCAic3RhcnRBcHBsZVBheUZsb3ciLCAiZ2V0R29vZ2xlUGF5UHJvY2Vzc29ycyIsICJnb29nbGVQYXlJbml0Rmxvd3MiLCAiZ29vZ2xlUGF5SW5pdFJlc3VsdHMiLCAic3RhcnRHb29nbGVQYXlGbG93IiwgImluaXRSZXN1bHRzIiwgImF2YWlsYWJsZUZsb3ciLCAiY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmciLCAic3R5bGVzIiwgIkVsZW1lbnRzQ29udGV4dCIsICJjcmVhdGVDb250ZXh0IiwgInVzZU9wZW5QYXlFbGVtZW50cyIsICJ1c2VDb250ZXh0IiwgIkVsZW1lbnRGcmFtZSIsICJwcm9wcyIsICJlbGVtZW50VHlwZSIsICJmb3JtSWQiLCAicmVmZXJyZXIiLCAiZm9ybUhlaWdodCIsICJjaGVja291dFNlY3VyZVRva2VuIiwgInJlZ2lzdGVySWZyYW1lIiwgImJhc2VVcmwiLCAic3ViUGF0aCIsICJoYXNMb2FkZWQiLCAic2V0SGFzTG9hZGVkIiwgInVzZVN0YXRlIiwgImlmcmFtZVJlZiIsICJ1c2VSZWYiLCAiZWxlbWVudFN0eWxlIiwgInVzZU1lbW8iLCAiZnJhbWVTdHlsZSIsICJxdWVyeVN0cmluZyIsICJwYXJhbXMiLCAidXNlRWZmZWN0IiwgImpzeCIsICJ1cmwiLCAiQ2FyZEVsZW1lbnQiLCAiRWxlbWVudFR5cGVFbnVtIiwgIkNhcmRDdmNFbGVtZW50IiwgIkNhcmRFeHBpcnlFbGVtZW50IiwgIkNhcmROdW1iZXJFbGVtZW50IiwgImlvIiwgInNvIiwgImNvIiwgInIiLCAibiIsICJhIiwgIm8iLCAicyIsICJsbyIsICJrIiwgIlMiLCAicCIsICJxciIsICJ6ciIsICJIciIsICJCciIsICJfZSIsICJ1byIsICJTdCIsICJwbyIsICJzZSIsICJfbyIsICJtbyIsICJmbyIsICJ5byIsICJobyIsICJnbyIsICJ3byIsICJ2byIsICJibyIsICJFbyIsICJQbyIsICJTbyIsICJPZSIsICJDbyIsICJrbyIsICJBbyIsICJJbyIsICJUbyIsICJSbyIsICJObyIsICJudCIsICJGbyIsICJNbyIsICJMbyIsICJGIiwgIkRvIiwgInhvIiwgIk9vIiwgIllyIiwgIlVvIiwgImpvIiwgIiRvIiwgIkdvIiwgIlZvIiwgIlAiLCAicW8iLCAiSnIiLCAiV3IiLCAiem8iLCAiSG8iLCAiVmUiLCAiQm8iLCAiWW8iLCAiWnIiLCAiSm8iLCAiV28iLCAiWm8iLCAiZHIiLCAiS3IiLCAicHIiLCAiUXIiLCAiS28iLCAiUW8iLCAiZ3QiLCAiWHIiLCAiWG8iLCAiZWEiLCAidGEiLCAiZW4iLCAicmEiLCAidG4iLCAibmEiLCAib2EiLCAiYWEiLCAiaWEiLCAic2EiLCAiY2EiLCAibGEiLCAidWEiLCAiZGEiLCAicGEiLCAiJHQiLCAibWEiLCAiZmEiLCAiZWUiLCAieWEiLCAiaGEiLCAicm4iLCAiZ2EiLCAid2EiLCAiSCIsICJnIiwgImdpIiwgIlNuIiwgIndlIiwgIkkiLCAiY2hhbGsiLCAiR3QiLCAiUGUiLCAidmEiLCAibm4iLCAiVWUiLCAid3QiLCAidnQiLCAiRGUiLCAiYmEiLCAibSIsICJ5IiwgImgiLCAiYiIsICJ2IiwgIl8iLCAiRWEiLCAiViIsICJDdCIsICJGdCIsICJidCIsICJsdCIsICJfciIsICJvbiIsICJhbiIsICJzbiIsICJjbiIsICJsbiIsICJtciIsICJmdCIsICJZdCIsICJrYSIsICJWdCIsICJQYSIsICJNdCIsICJTYSIsICJwdCIsICJDYSIsICJKdCIsICJBYSIsICJJYSIsICJnZSIsICJSYSIsICJmciIsICJUYSIsICJOYSIsICJGYSIsICJNYSIsICJMYSIsICJEYSIsICJ1biIsICJ5ciIsICJ4YSIsICJPYSIsICJociIsICJVYSIsICJnciIsICJqYSIsICIkYSIsICJHYSIsICJWYSIsICJxYSIsICJ6YSIsICJIYSIsICJCYSIsICJZYSIsICJKYSIsICJXYSIsICJaYSIsICJLYSIsICJRYSIsICJYYSIsICJlaSIsICJkbiIsICJ0aSIsICJyaSIsICJuaSIsICJvaSIsICJhaSIsICJpaSIsICJzaSIsICJjaSIsICJsaSIsICJ1aSIsICJkaSIsICJ3IiwgImV0IiwgImt0IiwgIndyIiwgInBpIiwgIkx0IiwgInBuIiwgIkF0IiwgIiQiLCAicXQiLCAidnIiLCAibWkiLCAiZmkiLCAieWkiLCAiX3QiLCAiaGkiLCAiYyIsICJXdCIsICJfbiIsICJtbiIsICJ0IiwgIndpIiwgInZpIiwgIkdyIiwgImJpIiwgIkVpIiwgIlBpIiwgIkl0IiwgImJyIiwgIlR0IiwgIlNpIiwgIkNpIiwgImtpIiwgIkFpIiwgIklpIiwgIlRpIiwgIlRlIiwgIkVyIiwgIlJpIiwgImwiLCAidSIsICJkIiwgIk5pIiwgIkZpIiwgIm90IiwgImF0IiwgIlp0IiwgIml0IiwgIkt0IiwgIk1pIiwgIkxpIiwgIkRpIiwgIlllIiwgIlgiLCAieGkiLCAiT2kiLCAiVWkiLCAiamkiLCAiRXQiLCAiJGkiLCAiR2kiLCAiVmkiLCAicWkiLCAiemkiLCAiSGkiLCAiQmkiLCAiWWkiLCAiRHQiLCAiSmkiLCAiUXQiLCAienQiLCAieW4iLCAiV2kiLCAidHQiLCAiWHQiLCAiZXIiLCAiWmkiLCAidHIiLCAiS2kiLCAiUWkiLCAiaG4iLCAiWGkiLCAiZXMiLCAidHMiLCAicnMiLCAiZ24iLCAibnMiLCAieHQiLCAid24iLCAib3MiLCAiYXMiLCAiaXMiLCAic3MiLCAiY3MiLCAiUHIiLCAic3QiLCAiRWUiLCAieGUiLCAiT3QiLCAibHMiLCAiamUiLCAidXMiLCAibXQiLCAidm4iLCAiQiIsICJwcyIsICJkcyIsICJfcyIsICJNIiwgIm5lIiwgImJuIiwgIm1zIiwgIkwiLCAiZnMiLCAieXMiLCAiaHMiLCAidmUiLCAiRW4iLCAiU3IiLCAiZ3MiLCAicnIiLCAiUG4iLCAid3MiLCAiY29ubmVjdFRvQ2hpbGQiLCAiUnQiLCAidnMiLCAiYnMiLCAiRXMiLCAiQ24iLCAia24iLCAicnQiLCAiUHMiLCAiQW4iLCAiQ3IiLCAiUmUiLCAiWmUiLCAiU3MiLCAiQ3MiLCAia3MiLCAiVHMiLCAiQXMiLCAiSXMiLCAiUnMiLCAiSW4iLCAiVG4iLCAiTnMiLCAiRnMiLCAiaiIsICJNcyIsICJMcyIsICJaIiwgIksiLCAiTnQiLCAiRHMiLCAieHMiLCAiUm4iLCAiTm4iLCAiT3MiLCAiVXMiLCAiYmUiLCAiRm4iLCAianMiLCAiTW4iLCAiY2UiLCAiJHMiLCAiR3MiLCAiVnMiLCAicXMiLCAienMiLCAiSHMiLCAicSIsICJMbiIsICJWbCIsICJEbiIsICJ1dCIsICJ6IiwgIm5yIiwgImxlIiwgIlUiLCAieG4iLCAicWUiLCAiZiIsICJvciIsICJVdCIsICJhciIsICJ6ZSIsICJIZSIsICJpciIsICJKZSIsICJCcyIsICJZcyIsICJFIiwgIkMiLCAia3IiLCAiSnMiLCAiV3MiLCAiV2UiLCAiWnMiLCAiS3MiLCAiUXMiLCAic3IiLCAiWHMiLCAiZWMiLCAiT24iLCAidGMiLCAiVW4iLCAiam4iLCAiJG4iLCAiY3IiLCAibHIiLCAicmMiLCAibmMiLCAidXIiLCAib2MiLCAiYWMiLCAiJGUiLCAiY3QiLCAiaWMiLCAiR24iLCAic2MiLCAiY2MiLCAiQXIiLCAibGMiLCAidWMiLCAiZGMiLCAiVm4iLCAicW4iLCAiem4iLCAiSG4iLCAicGMiLCAibWMiLCAiYW8iLCAiS2UiLCAiQm4iLCAiZmMiLCAiVCIsICJ5YyIsICJpZSIsICJNZSIsICJoYyIsICJnYyIsICJPIiwgIkEiLCAiRCIsICJRIiwgInVlIiwgIkNlIiwgIlkiLCAiaGUiLCAiRmUiLCAiQmUiLCAiSXIiLCAid2MiLCAidmMiLCAieXQiLCAiYmMiLCAiRWMiLCAiUGMiLCAiUWUiLCAiWW4iLCAiU2MiLCAiQ2MiLCAicmUiLCAiTGUiLCAia2MiLCAiQWMiLCAiU2UiLCAiSm4iLCAiV24iLCAiSWMiLCAiVGMiLCAiaHQiLCAiWm4iLCAiUmMiLCAiTmMiLCAiSWUiLCAiWGUiLCAiRmMiLCAiTWMiLCAiTGMiLCAiS24iLCAiRGMiLCAieGMiLCAiUW4iLCAiSHQiLCAiT2MiLCAiVWMiLCAiVHIiLCAiamMiLCAiWG4iLCAiJGMiLCAiR2MiLCAiTmUiLCAiUHQiLCAiVmMiLCAiZW8iLCAicWMiLCAiQmMiLCAiemMiLCAiSGMiLCAicm8iLCAidG8iLCAiTiIsICJSciIsICJZYyIsICJKYyIsICJXYyIsICJaYyIsICJKIiwgIktjIiwgIlFjIiwgIlhjIiwgImtlIiwgImVsIiwgIm5vIiwgInRsIiwgInJsIiwgImRlIiwgIk5yIiwgIm9vIiwgIm5sIiwgIm9sIiwgIkZyIiwgIkciLCAiYWwiLCAiaWwiLCAic2wiLCAiY2wiLCAiZGwiLCAibGwiLCAidWwiLCAiVyIsICJwbCIsICJfbCIsICJtbCIsICJtZSIsICJmbCIsICJobCIsICJ5bCIsICJnbCIsICJ3bCIsICJ2bCIsICJvZSIsICJibCIsICJFbCIsICJQbCIsICJhZSIsICJNciIsICJmZSIsICJCdCIsICJTbCIsICJDbCIsICJrbCIsICJSIiwgIkFlIiwgIkxyIiwgIkFsIiwgIkRyIiwgIklsIiwgIlRsIiwgImp0IiwgIlJsIiwgIk5sIiwgIkZsIiwgInhyIiwgIk1sIiwgIkxsIiwgIk9yIiwgIkRsIiwgInhsIiwgIk9sIiwgIlVyIiwgImpyIiwgInBlIiwgInRlIiwgInllIiwgIiRyIiwgInVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyIsICJmb3JtQ2FsbGJhY2tzIiwgIkZPUk1fVEFSR0VUIiwgIkVsZW1lbnRzRm9ybSIsICJvcEZvcm0iLCAic2V0T3BGb3JtIiwgImVsZW1lbnRzQ29udGV4dFZhbHVlIiwgInNldEVsZW1lbnRzQ29udGV4dFZhbHVlIiwgImxvYWRlZCIsICJzZXRMb2FkZWQiLCAiYXBwbGVQYXlSZXN1bHQiLCAic2V0QXBwbGVQYXlSZXN1bHQiLCAiZ29vZ2xlUGF5UmVzdWx0IiwgInNldEdvb2dsZVBheVJlc3VsdCIsICJzdHJpcGVMaW5rQ3RybCIsICJzZXRTdHJpcGVMaW5rQ3RybCIsICJsb29wQ29uZmlnIiwgInNldExvb3BDb25maWciLCAiYWlyd2FsbGV4IiwgInNldEFpcndhbGxleCIsICJ0b3RhbEFtb3VudEF0b21zIiwgImN1cnJlbmN5IiwgImFwcGxlUGF5UmVzdWx0MiIsICJnb29nbGVQYXlSZXN1bHQyIiwgImZvcm0iLCAiZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAiRnJhZ21lbnQiLCAiY2hpbGRyZW5Qcm9wcyJdCn0K
|