@getopenpay/openpay-js 0.1.6-alpha.720e7c5 → 0.1.7-alpha.19e8830
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/index.es.js +261 -260
- package/dist/index.umd.js +6 -6
- package/package.json +1 -1
package/dist/index.es.js
CHANGED
|
@@ -1,36 +1,36 @@
|
|
|
1
1
|
import { z as t } from "zod";
|
|
2
|
-
import { v4 as
|
|
2
|
+
import { v4 as Te } from "uuid";
|
|
3
3
|
import { connectToChild as se } from "penpal";
|
|
4
|
-
import
|
|
5
|
-
const Ie = "https://cde.getopenpay.com",
|
|
4
|
+
import T from "chalk";
|
|
5
|
+
const Ie = "https://cde.getopenpay.com", je = t.object({
|
|
6
6
|
type: t.string(),
|
|
7
7
|
loc: t.array(t.string()),
|
|
8
8
|
msg: t.string(),
|
|
9
9
|
url: t.string()
|
|
10
|
-
}), Fe = t.array(
|
|
10
|
+
}), Fe = t.array(je), Me = t.object({
|
|
11
11
|
code: t.string(),
|
|
12
12
|
message: t.string(),
|
|
13
13
|
path: t.array(t.string())
|
|
14
|
-
}),
|
|
14
|
+
}), Le = t.array(Me), De = {
|
|
15
15
|
"failed to fetch": "Connection error: please double check if you are connected to the internet, then try again"
|
|
16
16
|
}, V = (n) => {
|
|
17
17
|
const e = n.toLowerCase().trim();
|
|
18
|
-
return
|
|
19
|
-
},
|
|
18
|
+
return De[e] ?? n;
|
|
19
|
+
}, Ne = (n) => {
|
|
20
20
|
try {
|
|
21
21
|
return typeof JSON.parse(n) == "object";
|
|
22
22
|
} catch {
|
|
23
23
|
return !1;
|
|
24
24
|
}
|
|
25
|
-
},
|
|
25
|
+
}, xe = (n) => n.length === 1 ? V(n[0].msg) : `Please fix the following errors:
|
|
26
26
|
${n.map((r) => `• ${V(r.msg)}`).join(`
|
|
27
27
|
`)}`, Ue = (n) => `Encountered the following errors:
|
|
28
28
|
${n.map((r) => `- ${r.path.join("/")}: ${r.message}`).join(`
|
|
29
29
|
`)}`, ie = (n) => {
|
|
30
30
|
if (n instanceof Error)
|
|
31
|
-
if (
|
|
31
|
+
if (Ne(n.message)) {
|
|
32
32
|
const e = JSON.parse(n.message);
|
|
33
|
-
return Fe.safeParse(e).success ?
|
|
33
|
+
return Fe.safeParse(e).success ? xe(e) : Le.safeParse(e).success ? Ue(e) : n.message;
|
|
34
34
|
} else
|
|
35
35
|
return V(n.message);
|
|
36
36
|
if (typeof n == "object")
|
|
@@ -47,13 +47,13 @@ ${n.map((r) => `- ${r.path.join("/")}: ${r.message}`).join(`
|
|
|
47
47
|
} catch {
|
|
48
48
|
return;
|
|
49
49
|
}
|
|
50
|
-
},
|
|
51
|
-
var
|
|
52
|
-
const ae = t.nativeEnum(
|
|
50
|
+
}, y = t.string().trim().min(1, { message: "Cannot be blank" }), h = t.string().trim().optional(), M = (n) => t.nullable(n.optional());
|
|
51
|
+
var f = /* @__PURE__ */ ((n) => (n.FIRST_NAME = "firstName", n.LAST_NAME = "lastName", n.EMAIL = "email", n.ZIP_CODE = "zipCode", n.CITY = "city", n.STATE = "state", n.COUNTRY = "country", n.ADDRESS = "address", n.PHONE = "phone", n.PROMOTION_CODE = "promotionCode", n))(f || {});
|
|
52
|
+
const ae = t.nativeEnum(f);
|
|
53
53
|
var ce = /* @__PURE__ */ ((n) => (n.CARD_NUMBER = "cardNumber", n.CARD_EXPIRY = "cardExpiry", n.CARD_CVC = "cardCvc", n))(ce || {});
|
|
54
54
|
const le = t.nativeEnum(ce), ue = t.union([ae, le]);
|
|
55
55
|
var de = /* @__PURE__ */ ((n) => (n.CARD = "card", n.CARD_NUMBER = "card-number", n.CARD_EXPIRY = "card-expiry", n.CARD_CVC = "card-cvc", n))(de || {});
|
|
56
|
-
const $e = t.nativeEnum(de),
|
|
56
|
+
const $e = t.nativeEnum(de), N = t.object({
|
|
57
57
|
provider: t.string(),
|
|
58
58
|
processor_name: M(t.string()),
|
|
59
59
|
metadata: M(t.record(t.string(), t.any()))
|
|
@@ -61,22 +61,22 @@ const $e = t.nativeEnum(de), x = t.object({
|
|
|
61
61
|
id: t.string()
|
|
62
62
|
});
|
|
63
63
|
t.object({
|
|
64
|
-
cardNumber:
|
|
65
|
-
expiry:
|
|
66
|
-
cvc:
|
|
64
|
+
cardNumber: h,
|
|
65
|
+
expiry: h,
|
|
66
|
+
cvc: h
|
|
67
67
|
});
|
|
68
68
|
t.object({
|
|
69
|
-
backgroundColor:
|
|
70
|
-
color:
|
|
71
|
-
fontFamily:
|
|
72
|
-
fontSize:
|
|
73
|
-
fontWeight:
|
|
74
|
-
margin:
|
|
75
|
-
padding:
|
|
76
|
-
letterSpacing:
|
|
77
|
-
lineHeight:
|
|
69
|
+
backgroundColor: h,
|
|
70
|
+
color: h,
|
|
71
|
+
fontFamily: h,
|
|
72
|
+
fontSize: h,
|
|
73
|
+
fontWeight: h,
|
|
74
|
+
margin: h,
|
|
75
|
+
padding: h,
|
|
76
|
+
letterSpacing: h,
|
|
77
|
+
lineHeight: h
|
|
78
78
|
});
|
|
79
|
-
const
|
|
79
|
+
const w = t.enum([
|
|
80
80
|
// Element -> Form
|
|
81
81
|
"LAYOUT",
|
|
82
82
|
"LOADED",
|
|
@@ -97,66 +97,66 @@ const _ = t.enum([
|
|
|
97
97
|
"TOKENIZE",
|
|
98
98
|
"CHECKOUT",
|
|
99
99
|
"START_PAYMENT_FLOW"
|
|
100
|
-
]), ze =
|
|
100
|
+
]), ze = w.extract(["TOKENIZE_STARTED", "CHECKOUT_STARTED"]), Ve = t.object({ type: ze }), He = w.extract(["BLUR", "FOCUS", "CHANGE"]), Ke = t.object({
|
|
101
101
|
type: He,
|
|
102
102
|
elementType: le,
|
|
103
103
|
errors: t.array(t.string()).optional()
|
|
104
|
-
}),
|
|
105
|
-
type:
|
|
106
|
-
message:
|
|
104
|
+
}), Be = w.extract(["LOAD_ERROR", "TOKENIZE_ERROR", "CHECKOUT_ERROR"]), Ye = t.object({
|
|
105
|
+
type: Be,
|
|
106
|
+
message: y,
|
|
107
107
|
headers: t.record(t.string(), t.string()).optional()
|
|
108
|
-
}),
|
|
109
|
-
type:
|
|
108
|
+
}), Ze = w.extract(["VALIDATION_ERROR"]), Ge = t.object({
|
|
109
|
+
type: Ze,
|
|
110
110
|
elementType: ue,
|
|
111
111
|
errors: t.array(t.string())
|
|
112
112
|
}), Je = t.object({
|
|
113
|
-
type: t.literal(
|
|
114
|
-
height:
|
|
113
|
+
type: t.literal(w.enum.LAYOUT),
|
|
114
|
+
height: y
|
|
115
115
|
}), We = t.object({
|
|
116
|
-
type: t.literal(
|
|
117
|
-
sessionId:
|
|
116
|
+
type: t.literal(w.enum.LOADED),
|
|
117
|
+
sessionId: y,
|
|
118
118
|
totalAmountAtoms: t.number(),
|
|
119
|
-
currency:
|
|
120
|
-
checkoutPaymentMethods: t.array(
|
|
119
|
+
currency: h,
|
|
120
|
+
checkoutPaymentMethods: t.array(N)
|
|
121
121
|
}), Qe = t.object({
|
|
122
|
-
type: t.literal(
|
|
122
|
+
type: t.literal(w.enum.PAYMENT_FLOW_STARTED),
|
|
123
123
|
nextActionMetadata: t.record(t.string(), t.any()),
|
|
124
124
|
paymentFlowMetadata: t.any().optional(),
|
|
125
125
|
startPFMetadata: t.optional(t.record(t.string(), t.any()))
|
|
126
126
|
}), Xe = t.object({
|
|
127
|
-
type: t.literal(
|
|
127
|
+
type: t.literal(w.enum.SETUP_PAYMENT_METHOD_SUCCESS),
|
|
128
128
|
paymentMethodId: t.string()
|
|
129
|
-
}),
|
|
130
|
-
firstName:
|
|
131
|
-
lastName:
|
|
132
|
-
email:
|
|
133
|
-
zipCode:
|
|
134
|
-
country:
|
|
135
|
-
promotionCode:
|
|
129
|
+
}), A = t.object({
|
|
130
|
+
firstName: y,
|
|
131
|
+
lastName: y,
|
|
132
|
+
email: y,
|
|
133
|
+
zipCode: y,
|
|
134
|
+
country: y,
|
|
135
|
+
promotionCode: h
|
|
136
136
|
}), et = t.object({
|
|
137
|
-
email:
|
|
138
|
-
zipCode:
|
|
139
|
-
country:
|
|
140
|
-
promotionCode:
|
|
141
|
-
}), tt =
|
|
137
|
+
email: y,
|
|
138
|
+
zipCode: y,
|
|
139
|
+
country: y,
|
|
140
|
+
promotionCode: h
|
|
141
|
+
}), tt = w.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), nt = t.object({
|
|
142
142
|
type: tt,
|
|
143
|
-
sessionId:
|
|
144
|
-
checkoutPaymentMethod:
|
|
143
|
+
sessionId: y,
|
|
144
|
+
checkoutPaymentMethod: N,
|
|
145
145
|
paymentFlowMetadata: t.any().optional(),
|
|
146
146
|
doNotUseLegacyCCFlow: t.boolean().optional(),
|
|
147
|
-
existingCCPMId:
|
|
148
|
-
}).extend(
|
|
149
|
-
type: t.literal(
|
|
147
|
+
existingCCPMId: h
|
|
148
|
+
}).extend(A.shape), rt = t.object({
|
|
149
|
+
type: t.literal(w.enum.TOKENIZE_SUCCESS),
|
|
150
150
|
isReadyForCheckout: t.boolean()
|
|
151
151
|
}), ot = t.object({
|
|
152
|
-
type: t.literal(
|
|
152
|
+
type: t.literal(w.enum.CHECKOUT_SUCCESS),
|
|
153
153
|
invoiceUrls: t.array(t.string()),
|
|
154
154
|
subscriptionIds: t.array(t.string()),
|
|
155
155
|
customerId: t.string()
|
|
156
156
|
}), st = t.discriminatedUnion("type", [
|
|
157
157
|
Ve,
|
|
158
|
-
|
|
159
|
-
|
|
158
|
+
Ke,
|
|
159
|
+
Ye,
|
|
160
160
|
Ge,
|
|
161
161
|
Je,
|
|
162
162
|
We,
|
|
@@ -167,13 +167,13 @@ const _ = t.enum([
|
|
|
167
167
|
Xe
|
|
168
168
|
]), it = t.object({
|
|
169
169
|
payload: st,
|
|
170
|
-
nonce:
|
|
171
|
-
formId:
|
|
172
|
-
elementId:
|
|
170
|
+
nonce: y,
|
|
171
|
+
formId: y,
|
|
172
|
+
elementId: y
|
|
173
173
|
});
|
|
174
174
|
t.object({
|
|
175
175
|
amountAtom: t.number(),
|
|
176
|
-
currency:
|
|
176
|
+
currency: y
|
|
177
177
|
});
|
|
178
178
|
t.object({
|
|
179
179
|
secure_token: t.string(),
|
|
@@ -202,17 +202,17 @@ const lt = t.object({
|
|
|
202
202
|
]);
|
|
203
203
|
t.object({
|
|
204
204
|
session_id: t.string(),
|
|
205
|
-
checkout_payment_method:
|
|
206
|
-
non_cde_form_fields:
|
|
205
|
+
checkout_payment_method: N,
|
|
206
|
+
non_cde_form_fields: A,
|
|
207
207
|
do_not_use_legacy_cc_flow: t.boolean().optional(),
|
|
208
208
|
existing_cc_pm_id: M(t.string())
|
|
209
209
|
});
|
|
210
210
|
t.object({
|
|
211
211
|
session_id: t.string(),
|
|
212
|
-
checkout_payment_method:
|
|
213
|
-
non_cde_form_fields:
|
|
212
|
+
checkout_payment_method: N,
|
|
213
|
+
non_cde_form_fields: A
|
|
214
214
|
});
|
|
215
|
-
var
|
|
215
|
+
var L = /* @__PURE__ */ ((n) => (n.SUCCESS = "success", n.FAILURE = "failure", n.CANCELLED = "cancelled", n))(L || {});
|
|
216
216
|
const dt = t.object({
|
|
217
217
|
status: t.enum([
|
|
218
218
|
"success",
|
|
@@ -246,14 +246,14 @@ const dt = t.object({
|
|
|
246
246
|
}), yt = {
|
|
247
247
|
usd: "usd",
|
|
248
248
|
brl: "brl"
|
|
249
|
-
},
|
|
249
|
+
}, B = async (n) => {
|
|
250
250
|
for (let r = 0; r < 10; r++)
|
|
251
|
-
G() || await
|
|
251
|
+
G() || await gt(500);
|
|
252
252
|
if (!G())
|
|
253
253
|
throw new Error("Stripe JS not found.");
|
|
254
254
|
return new Stripe(n);
|
|
255
|
-
},
|
|
256
|
-
const i = await
|
|
255
|
+
}, _t = async (n, e, r, o, s) => {
|
|
256
|
+
const i = await B(n), a = yt[r.toLowerCase().trim()];
|
|
257
257
|
return i.paymentRequest({
|
|
258
258
|
// TODO: replace this with stripe account country as soon as we support it
|
|
259
259
|
country: "US",
|
|
@@ -267,7 +267,7 @@ const dt = t.object({
|
|
|
267
267
|
requestPayerEmail: !0,
|
|
268
268
|
disableWallets: []
|
|
269
269
|
});
|
|
270
|
-
},
|
|
270
|
+
}, gt = (n) => new Promise((e) => {
|
|
271
271
|
setTimeout(e, n);
|
|
272
272
|
}), G = () => "Stripe" in window, wt = async (n) => new Promise((e, r) => {
|
|
273
273
|
try {
|
|
@@ -282,15 +282,15 @@ const dt = t.object({
|
|
|
282
282
|
}), Et = async (n, e) => {
|
|
283
283
|
if (!n.stripe_pk || !n.client_secret)
|
|
284
284
|
throw new Error(`Invalid next action metadata format: ${JSON.stringify(n)}`);
|
|
285
|
-
const o = await (await
|
|
285
|
+
const o = await (await B(n.stripe_pk)).confirmCardSetup(n.client_secret, {
|
|
286
286
|
payment_method: e.paymentMethod.id
|
|
287
287
|
});
|
|
288
288
|
if (o.error)
|
|
289
289
|
throw e.complete("fail"), new Error(`Payment failed: ${o.error.message ?? "unknown"}`);
|
|
290
|
-
e.complete("success");
|
|
290
|
+
return e.complete("success"), o;
|
|
291
291
|
}, bt = async (n) => {
|
|
292
292
|
var s, i, a, c;
|
|
293
|
-
const r = await (await
|
|
293
|
+
const r = await (await B(n.stripe_pk)).confirmCardSetup(n.client_secret, {
|
|
294
294
|
payment_method: n.stripe_pm_id
|
|
295
295
|
}), o = (s = r.setupIntent) == null ? void 0 : s.status;
|
|
296
296
|
if (o !== "succeeded") throw o === "canceled" ? new Error("Payment cancelled, please click Submit again to pay") : new Error(
|
|
@@ -308,7 +308,7 @@ const dt = t.object({
|
|
|
308
308
|
}, vt = (n, e, r, o, s) => {
|
|
309
309
|
const i = {
|
|
310
310
|
payload: o,
|
|
311
|
-
nonce:
|
|
311
|
+
nonce: Te(),
|
|
312
312
|
formId: e,
|
|
313
313
|
elementId: r
|
|
314
314
|
};
|
|
@@ -323,7 +323,7 @@ const dt = t.object({
|
|
|
323
323
|
} catch {
|
|
324
324
|
return !1;
|
|
325
325
|
}
|
|
326
|
-
}, Rt = (n, e) => !!n && e,
|
|
326
|
+
}, Rt = (n, e) => !!n && e, m = (n) => t.nullable(n.optional());
|
|
327
327
|
t.string().trim().min(1, { message: "Cannot be blank" });
|
|
328
328
|
const Ot = t.object({
|
|
329
329
|
cde_response_type: t.literal("error"),
|
|
@@ -333,36 +333,36 @@ const Ot = t.object({
|
|
|
333
333
|
t.enum(["usd", "brl"]);
|
|
334
334
|
const me = t.object({
|
|
335
335
|
name: t.string(),
|
|
336
|
-
amount_atom_off:
|
|
337
|
-
percent_off:
|
|
338
|
-
currency:
|
|
336
|
+
amount_atom_off: m(t.number()),
|
|
337
|
+
percent_off: m(t.number()),
|
|
338
|
+
currency: m(t.string()),
|
|
339
339
|
duration: t.string(),
|
|
340
|
-
duration_in_months:
|
|
340
|
+
duration_in_months: m(t.number())
|
|
341
341
|
}), pe = t.object({
|
|
342
342
|
amount_subtotal_atom: t.number().int(),
|
|
343
343
|
amount_total_atom: t.number().int(),
|
|
344
344
|
currency: t.string(),
|
|
345
|
-
description:
|
|
345
|
+
description: m(t.string()),
|
|
346
346
|
price_id: t.string(),
|
|
347
|
-
billing_interval:
|
|
348
|
-
billing_interval_count:
|
|
347
|
+
billing_interval: m(t.string()),
|
|
348
|
+
billing_interval_count: m(t.number().int()),
|
|
349
349
|
quantity: t.number().int()
|
|
350
|
-
}),
|
|
350
|
+
}), At = t.record(t.string(), t.any()), Tt = t.object({
|
|
351
351
|
name: t.string(),
|
|
352
|
-
settings:
|
|
353
|
-
}),
|
|
352
|
+
settings: m(At)
|
|
353
|
+
}), x = t.object({
|
|
354
354
|
provider: t.string(),
|
|
355
|
-
processor_name:
|
|
356
|
-
metadata:
|
|
355
|
+
processor_name: m(t.string()),
|
|
356
|
+
metadata: m(t.record(t.string(), t.any()))
|
|
357
357
|
}), It = t.object({
|
|
358
358
|
quantity: t.number()
|
|
359
|
-
}),
|
|
360
|
-
id:
|
|
361
|
-
billing_interval:
|
|
362
|
-
billing_interval_count:
|
|
359
|
+
}), jt = t.object({
|
|
360
|
+
id: m(t.string()),
|
|
361
|
+
billing_interval: m(t.string()),
|
|
362
|
+
billing_interval_count: m(t.number().int()),
|
|
363
363
|
subscription_items: t.array(It),
|
|
364
|
-
trial_start:
|
|
365
|
-
trial_end:
|
|
364
|
+
trial_start: m(t.string()),
|
|
365
|
+
trial_end: m(t.string())
|
|
366
366
|
}), fe = t.object({
|
|
367
367
|
amount_atom: t.number()
|
|
368
368
|
}), Ft = t.object({
|
|
@@ -373,33 +373,33 @@ const me = t.object({
|
|
|
373
373
|
subscription_item_id: t.string()
|
|
374
374
|
}), Mt = t.object({
|
|
375
375
|
coupon: me
|
|
376
|
-
}),
|
|
376
|
+
}), Lt = t.object({
|
|
377
377
|
currency: t.string(),
|
|
378
378
|
discounts: t.array(Mt),
|
|
379
|
-
hosted_invoice_url:
|
|
379
|
+
hosted_invoice_url: m(t.string()),
|
|
380
380
|
lines: t.array(Ft),
|
|
381
381
|
remaining_amount_atom: t.number(),
|
|
382
382
|
tax_amount_atom: t.number(),
|
|
383
383
|
total_amount_atom: t.number(),
|
|
384
384
|
total_discount_amount_atoms: t.array(fe)
|
|
385
385
|
}), J = t.object({
|
|
386
|
-
created: t.array(
|
|
387
|
-
invoices: t.array(
|
|
386
|
+
created: t.array(jt),
|
|
387
|
+
invoices: t.array(Lt)
|
|
388
388
|
}), he = t.object({
|
|
389
389
|
preview: J,
|
|
390
|
-
preview_post_trial:
|
|
390
|
+
preview_post_trial: m(J),
|
|
391
391
|
coupons: t.array(me)
|
|
392
392
|
}), W = t.object({
|
|
393
393
|
status: t.literal("open"),
|
|
394
394
|
token: t.string(),
|
|
395
|
-
email:
|
|
395
|
+
email: m(t.string()),
|
|
396
396
|
line_items: t.array(pe),
|
|
397
397
|
amount_subtotal_atom: t.number().int(),
|
|
398
398
|
amount_total_atom: t.number().int(),
|
|
399
|
-
brand:
|
|
400
|
-
subs_preview:
|
|
399
|
+
brand: Tt,
|
|
400
|
+
subs_preview: m(he),
|
|
401
401
|
// Null in setup mode
|
|
402
|
-
methods_available: t.array(
|
|
402
|
+
methods_available: t.array(x)
|
|
403
403
|
}), ye = t.discriminatedUnion("mode", [
|
|
404
404
|
t.object({
|
|
405
405
|
mode: t.literal("setup"),
|
|
@@ -409,19 +409,19 @@ const me = t.object({
|
|
|
409
409
|
mode: t.enum(["payment", "subscription"]),
|
|
410
410
|
currency: t.string()
|
|
411
411
|
}).extend(W.shape)
|
|
412
|
-
]),
|
|
412
|
+
]), Dt = t.object({
|
|
413
413
|
status: t.literal("complete")
|
|
414
|
-
}),
|
|
414
|
+
}), Nt = t.object({
|
|
415
415
|
status: t.literal("expired")
|
|
416
416
|
});
|
|
417
|
-
t.union([ye,
|
|
417
|
+
t.union([ye, Dt, Nt]);
|
|
418
418
|
t.object({
|
|
419
419
|
logo: t.string(),
|
|
420
420
|
icon: t.string(),
|
|
421
421
|
primary_color: t.string(),
|
|
422
422
|
secondary_color: t.string()
|
|
423
423
|
});
|
|
424
|
-
const
|
|
424
|
+
const _e = t.object({
|
|
425
425
|
invoice_urls: t.array(t.string()),
|
|
426
426
|
subscription_ids: t.array(t.string()),
|
|
427
427
|
customer_id: t.string()
|
|
@@ -436,11 +436,11 @@ t.object({
|
|
|
436
436
|
line_items: t.array(pe),
|
|
437
437
|
total_amount_atom: t.number().int(),
|
|
438
438
|
cancel_at_end: t.boolean(),
|
|
439
|
-
checkout_payment_method:
|
|
439
|
+
checkout_payment_method: x,
|
|
440
440
|
promotion_code: t.string().optional(),
|
|
441
441
|
do_not_use_legacy_cc_flow: t.boolean().optional()
|
|
442
442
|
});
|
|
443
|
-
const
|
|
443
|
+
const xt = t.object({
|
|
444
444
|
payment_method_id: t.string()
|
|
445
445
|
});
|
|
446
446
|
t.object({
|
|
@@ -459,12 +459,12 @@ const $t = t.object({
|
|
|
459
459
|
});
|
|
460
460
|
t.object({
|
|
461
461
|
fields: et,
|
|
462
|
-
checkoutPaymentMethod:
|
|
462
|
+
checkoutPaymentMethod: x
|
|
463
463
|
});
|
|
464
464
|
t.object({
|
|
465
465
|
session_id: t.string(),
|
|
466
|
-
non_cde_form_fields:
|
|
467
|
-
checkout_payment_method:
|
|
466
|
+
non_cde_form_fields: A,
|
|
467
|
+
checkout_payment_method: x
|
|
468
468
|
});
|
|
469
469
|
const qt = t.object({
|
|
470
470
|
required_user_actions: t.array(t.record(t.string(), t.any())),
|
|
@@ -481,7 +481,7 @@ function Ht(n, e) {
|
|
|
481
481
|
var r = Error.captureStackTrace;
|
|
482
482
|
r && r(n, e);
|
|
483
483
|
}
|
|
484
|
-
var
|
|
484
|
+
var Kt = /* @__PURE__ */ function() {
|
|
485
485
|
var n = function(r, o) {
|
|
486
486
|
return n = Object.setPrototypeOf || {
|
|
487
487
|
__proto__: []
|
|
@@ -500,8 +500,8 @@ var Bt = /* @__PURE__ */ function() {
|
|
|
500
500
|
}
|
|
501
501
|
e.prototype = r === null ? Object.create(r) : (o.prototype = r.prototype, new o());
|
|
502
502
|
};
|
|
503
|
-
}(),
|
|
504
|
-
|
|
503
|
+
}(), Bt = function(n) {
|
|
504
|
+
Kt(e, n);
|
|
505
505
|
function e(r, o) {
|
|
506
506
|
var s = this.constructor, i = n.call(this, r, o) || this;
|
|
507
507
|
return Object.defineProperty(i, "name", {
|
|
@@ -512,7 +512,7 @@ var Bt = /* @__PURE__ */ function() {
|
|
|
512
512
|
}
|
|
513
513
|
return e;
|
|
514
514
|
}(Error);
|
|
515
|
-
class
|
|
515
|
+
class ge extends Bt {
|
|
516
516
|
constructor(e) {
|
|
517
517
|
const r = `[cde-client] Error querying CDE: ${e.message}`;
|
|
518
518
|
super(r), this.response = e;
|
|
@@ -521,16 +521,16 @@ class _e extends Kt {
|
|
|
521
521
|
return this.response.message;
|
|
522
522
|
}
|
|
523
523
|
}
|
|
524
|
-
const
|
|
524
|
+
const C = async (n, e, r) => {
|
|
525
525
|
const o = await n.send(e);
|
|
526
|
-
if (
|
|
527
|
-
throw new
|
|
528
|
-
if (!
|
|
526
|
+
if (Zt(o))
|
|
527
|
+
throw new ge(o);
|
|
528
|
+
if (!Yt(o, r)) {
|
|
529
529
|
const s = r.safeParse(o);
|
|
530
530
|
throw s.success ? new Error("Invalid state") : s.error;
|
|
531
531
|
}
|
|
532
532
|
return o;
|
|
533
|
-
},
|
|
533
|
+
}, Yt = (n, e) => e.safeParse(n).success, Zt = (n) => Ot.safeParse(n).success, Gt = async (n, e) => await C(n, { type: "get_checkout_preview", payload: e }, he), Y = async (n) => await C(n, { type: "get_prefill", payload: {} }, ye), Jt = async (n, e) => await C(n, { type: "start_payment_flow_for_cc", payload: e }, qt), Wt = async (n, e) => await C(n, { type: "start_payment_flow_for_pr", payload: e }, $t), we = async (n, e) => await C(n, { type: "confirm_payment_flow", payload: e }, at), Qt = async (n, e, r) => {
|
|
534
534
|
const o = await Gt(n, {
|
|
535
535
|
secure_token: e,
|
|
536
536
|
promotion_code: r
|
|
@@ -555,16 +555,16 @@ const b = async (n, e, r) => {
|
|
|
555
555
|
throw new Error("No CDE connections found");
|
|
556
556
|
return await Promise.all(
|
|
557
557
|
Array.from(n.values()).map(
|
|
558
|
-
(o) =>
|
|
558
|
+
(o) => C(o, { type: "tokenize_card", payload: e }, ut)
|
|
559
559
|
)
|
|
560
560
|
);
|
|
561
561
|
}, Q = async (n, e) => {
|
|
562
562
|
try {
|
|
563
|
-
return await
|
|
563
|
+
return await C(n, { type: "checkout_card_elements", payload: e }, _e);
|
|
564
564
|
} catch (r) {
|
|
565
565
|
throw r;
|
|
566
566
|
}
|
|
567
|
-
}, tn = async (n, e) => await
|
|
567
|
+
}, tn = async (n, e) => await C(n, { type: "setup_payment_method", payload: e }, xt), nn = async (n, e) => await C(n, { type: "checkout", payload: e }, _e), Ee = 1e3, rn = async (n, e) => {
|
|
568
568
|
const o = await se({
|
|
569
569
|
iframe: n,
|
|
570
570
|
debug: !0,
|
|
@@ -572,7 +572,7 @@ const b = async (n, e, r) => {
|
|
|
572
572
|
childOrigin: "*"
|
|
573
573
|
// TODO: use with proper childOrigin
|
|
574
574
|
}).promise;
|
|
575
|
-
return (await
|
|
575
|
+
return (await C(o, { type: "ping-3ds-status" }, dt)).status;
|
|
576
576
|
}, on = "@keyframes fadeIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}.overlay{position:fixed;top:0;left:0;width:100%;height:100%;z-index:2147483648!important;display:flex;justify-content:center;align-items:center;background-color:#00000080}.container{max-width:500px;max-height:600px;width:100%;height:100%;background-color:#fff;position:relative;animation:fadeIn .3s ease-out}.frame{max-width:500px;max-height:600px;width:100%;height:100%;border:none}.cancel-button{position:absolute;background:transparent;border:none;font-size:1rem;color:#fff;cursor:pointer;top:-1.5rem;padding:0;right:0}", sn = (n) => {
|
|
577
577
|
const e = document.createElement("template");
|
|
578
578
|
e.innerHTML = `
|
|
@@ -609,7 +609,7 @@ function cn({
|
|
|
609
609
|
resolve: r
|
|
610
610
|
}) {
|
|
611
611
|
const o = () => {
|
|
612
|
-
clearInterval(e), n.host.remove(), r(
|
|
612
|
+
clearInterval(e), n.host.remove(), r(L.CANCELLED);
|
|
613
613
|
};
|
|
614
614
|
return n.cancelButton.addEventListener("click", o), () => {
|
|
615
615
|
n.cancelButton.removeEventListener("click", o);
|
|
@@ -658,9 +658,9 @@ const be = (n) => async (e) => {
|
|
|
658
658
|
}
|
|
659
659
|
}, P = (n) => {
|
|
660
660
|
const e = (...o) => {
|
|
661
|
-
window.console.log(`${
|
|
661
|
+
window.console.log(`${T.green.bold("ojs/")}${T.bold.gray(`${n}`)} `, ...o);
|
|
662
662
|
}, r = (...o) => {
|
|
663
|
-
window.console.error(`${
|
|
663
|
+
window.console.error(`${T.red.bold("ojs/")}${T.bold.gray(`${n}`)} `, ...o);
|
|
664
664
|
};
|
|
665
665
|
return {
|
|
666
666
|
log: e,
|
|
@@ -669,7 +669,7 @@ const be = (n) => async (e) => {
|
|
|
669
669
|
err__: r
|
|
670
670
|
};
|
|
671
671
|
}, { log__: dn, err__: Ce } = P("common-cc"), Se = (n, e) => {
|
|
672
|
-
const r =
|
|
672
|
+
const r = A.safeParse(n);
|
|
673
673
|
if (!r.success) {
|
|
674
674
|
const o = r.error.format(), s = pt(o);
|
|
675
675
|
for (const [i, a] of Object.entries(s))
|
|
@@ -700,9 +700,9 @@ const be = (n) => async (e) => {
|
|
|
700
700
|
return e.parse(r);
|
|
701
701
|
}, { log__: p, err__: X } = P("common-cc"), { log__: ee } = P("stripe-cc"), fn = be(
|
|
702
702
|
async ({ context: n, checkoutPaymentMethod: e, nonCdeFormInputs: r, flowCallbacks: o }) => {
|
|
703
|
-
var
|
|
703
|
+
var u;
|
|
704
704
|
p("├ Running common CC flow...", { checkoutPaymentMethod: e });
|
|
705
|
-
const s = Array.from(n.cdeConnections.values())[0], i = await
|
|
705
|
+
const s = Array.from(n.cdeConnections.values())[0], i = await Y(s);
|
|
706
706
|
p(`├ Validating non-CDE form fields [Mode: ${i.mode}]`);
|
|
707
707
|
const a = Se(r, o.onValidationError);
|
|
708
708
|
p(`├ Tokenizing card info in CDE [Session: ${n.elementsSessionId}]`);
|
|
@@ -710,7 +710,7 @@ const be = (n) => async (e) => {
|
|
|
710
710
|
session_id: n.elementsSessionId
|
|
711
711
|
});
|
|
712
712
|
mn(c, o.onValidationError);
|
|
713
|
-
const
|
|
713
|
+
const l = {
|
|
714
714
|
session_id: n.elementsSessionId,
|
|
715
715
|
checkout_payment_method: e,
|
|
716
716
|
non_cde_form_fields: a
|
|
@@ -718,37 +718,37 @@ const be = (n) => async (e) => {
|
|
|
718
718
|
try {
|
|
719
719
|
if (i.mode === "setup") {
|
|
720
720
|
p(`├ Setting up payment method in CDE [Token: ${i.token}]`);
|
|
721
|
-
const
|
|
722
|
-
return p(`╰ Setup completed successfully [PM ID: ${
|
|
721
|
+
const d = await tn(s, l);
|
|
722
|
+
return p(`╰ Setup completed successfully [PM ID: ${d.payment_method_id}]`), { mode: "setup", result: d };
|
|
723
723
|
} else {
|
|
724
724
|
p(`├ Initial checkout flow. Checking out card info in CDE [Session: ${n.elementsSessionId}]`);
|
|
725
|
-
const
|
|
726
|
-
return p("╰ Checkout completed successfully."), { mode: "checkout", result:
|
|
725
|
+
const d = await Q(s, l);
|
|
726
|
+
return p("╰ Checkout completed successfully."), { mode: "checkout", result: d };
|
|
727
727
|
}
|
|
728
|
-
} catch (
|
|
729
|
-
if (
|
|
728
|
+
} catch (d) {
|
|
729
|
+
if (d instanceof ge && d.originalErrorMessage === "3DS_REQUIRED") {
|
|
730
730
|
p("├ Card requires 3DS, starting non-legacy payment flow");
|
|
731
|
-
const
|
|
732
|
-
if (p(`├ op-should-use-new-flow: ${
|
|
731
|
+
const S = ((u = d.response.headers) == null ? void 0 : u["op-should-use-new-flow"]) === "true", g = await Jt(s, l);
|
|
732
|
+
if (p(`├ op-should-use-new-flow: ${S}`), p("├ Payment flow result:", g), S ? await _n(g, n.baseUrl) : await gn(g), i.mode === "setup") {
|
|
733
733
|
p(`├ Confirming payment flow [cc_pm_id: ${g.cc_pm_id}]`);
|
|
734
|
-
const
|
|
734
|
+
const E = await we(s, {
|
|
735
735
|
secure_token: i.token,
|
|
736
736
|
existing_cc_pm_id: g.cc_pm_id
|
|
737
737
|
});
|
|
738
|
-
p("├ Confirm payment flow result received Result:",
|
|
739
|
-
const
|
|
740
|
-
return p(`╰ Setup completed successfully [PM ID: ${
|
|
738
|
+
p("├ Confirm payment flow result received Result:", E);
|
|
739
|
+
const b = Pe(E);
|
|
740
|
+
return p(`╰ Setup completed successfully [PM ID: ${b.payment_method_id}]`), { mode: "setup", result: b };
|
|
741
741
|
} else {
|
|
742
|
-
p(`├ Checking out after 3DS flow [Flow: ${
|
|
743
|
-
const
|
|
744
|
-
...
|
|
742
|
+
p(`├ Checking out after 3DS flow [Flow: ${S ? "new" : "legacy"}]`);
|
|
743
|
+
const E = await Q(s, {
|
|
744
|
+
...l,
|
|
745
745
|
existing_cc_pm_id: g.cc_pm_id,
|
|
746
|
-
do_not_use_legacy_cc_flow: !
|
|
746
|
+
do_not_use_legacy_cc_flow: !S
|
|
747
747
|
});
|
|
748
|
-
return p("╰ Checkout completed successfully."), { mode: "checkout", result:
|
|
748
|
+
return p("╰ Checkout completed successfully."), { mode: "checkout", result: E };
|
|
749
749
|
}
|
|
750
750
|
}
|
|
751
|
-
throw X("╰ Error checking out card info in CDE"), X(
|
|
751
|
+
throw X("╰ Error checking out card info in CDE"), X(d), d;
|
|
752
752
|
}
|
|
753
753
|
}
|
|
754
754
|
), hn = (n) => {
|
|
@@ -761,18 +761,18 @@ const be = (n) => async (e) => {
|
|
|
761
761
|
if (!e)
|
|
762
762
|
throw new Error("No common 3DS action found");
|
|
763
763
|
return mt.parse(e);
|
|
764
|
-
},
|
|
764
|
+
}, _n = async (n, e) => {
|
|
765
765
|
const r = yn(n);
|
|
766
766
|
p(`├ Using common 3DS flow [URL: ${r.redirect_url}]`);
|
|
767
767
|
const o = await ln({ url: r.redirect_url, baseUrl: e });
|
|
768
|
-
if (p(`╰ 3DS verification completed [Status: ${o}]`), o ===
|
|
768
|
+
if (p(`╰ 3DS verification completed [Status: ${o}]`), o === L.CANCELLED)
|
|
769
769
|
throw new Error("3DS verification cancelled");
|
|
770
|
-
if (o ===
|
|
770
|
+
if (o === L.FAILURE)
|
|
771
771
|
throw new Error("3DS verification failed");
|
|
772
|
-
},
|
|
772
|
+
}, gn = async (n) => {
|
|
773
773
|
const e = hn(n);
|
|
774
774
|
ee(`├ Using stripe 3DS flow [Client Secret: ${e.client_secret.substring(0, 8)}...]`), await bt(e), ee("╰ Stripe 3DS flow completed successfully");
|
|
775
|
-
}, { log__:
|
|
775
|
+
}, { log__: _, err__: wn } = P("stripe-pr"), En = t.object({
|
|
776
776
|
provider: t.union([t.literal("apple_pay"), t.literal("google_pay")]),
|
|
777
777
|
processor_name: t.literal("stripe"),
|
|
778
778
|
metadata: t.object({
|
|
@@ -780,20 +780,20 @@ const be = (n) => async (e) => {
|
|
|
780
780
|
})
|
|
781
781
|
}), bn = un(
|
|
782
782
|
async ({ context: n }) => {
|
|
783
|
-
|
|
783
|
+
_("Checking if there are any CPMs for Stripe PR...");
|
|
784
784
|
const e = pn(n.checkoutPaymentMethods, En);
|
|
785
|
-
|
|
786
|
-
const r = Array.from(n.cdeConnections.values())[0], o = await
|
|
787
|
-
|
|
788
|
-
const i = await Xt(r, o.token, s, void 0), a = await
|
|
785
|
+
_("Initializing Stripe PR flow...");
|
|
786
|
+
const r = Array.from(n.cdeConnections.values())[0], o = await Y(r), s = o.mode === "setup";
|
|
787
|
+
_("Getting initial preview amount");
|
|
788
|
+
const i = await Xt(r, o.token, s, void 0), a = await _t(
|
|
789
789
|
e.metadata.stripe_pk,
|
|
790
790
|
i.amountAtom,
|
|
791
791
|
i.currency,
|
|
792
792
|
s
|
|
793
793
|
);
|
|
794
|
-
|
|
794
|
+
_("Checking if can make payment");
|
|
795
795
|
const c = await a.canMakePayment();
|
|
796
|
-
return c === null ? (wn("canMakePayment returned null"), { isAvailable: !1, reason: "canMakePayment returned null" }) : (
|
|
796
|
+
return c === null ? (wn("canMakePayment returned null"), { isAvailable: !1, reason: "canMakePayment returned null" }) : (_("Stripe PR flow initialized successfully. Can make payment", c), {
|
|
797
797
|
isAvailable: !0,
|
|
798
798
|
pr: a,
|
|
799
799
|
availableProviders: {
|
|
@@ -811,52 +811,53 @@ const be = (n) => async (e) => {
|
|
|
811
811
|
customParams: s,
|
|
812
812
|
initResult: i
|
|
813
813
|
}) => {
|
|
814
|
-
if (
|
|
814
|
+
if (_("Running Stripe PR flow..."), s.provider !== e.provider)
|
|
815
815
|
throw new Error(`Provider mismatch. Expected ${s.provider}, got ${e.provider}`);
|
|
816
816
|
const a = Array.from(n.cdeConnections.values())[0], c = i.pr;
|
|
817
|
-
y("Validating non-CDE form fields");
|
|
818
|
-
const u = Sn(r), l = Se(u, o.onValidationError);
|
|
819
817
|
if (s != null && s.overridePaymentRequest) {
|
|
820
|
-
const
|
|
821
|
-
|
|
818
|
+
const b = s.overridePaymentRequest;
|
|
819
|
+
_("Overriding PR amount with", b), Pn(c, b.amount, b.pending);
|
|
822
820
|
}
|
|
823
|
-
|
|
824
|
-
const
|
|
825
|
-
|
|
826
|
-
const
|
|
827
|
-
|
|
821
|
+
_("Showing PR dialog..."), c.show();
|
|
822
|
+
const l = await wt(c);
|
|
823
|
+
_("Stripe PM added event:", l), _("Merging PM fields with form fields...");
|
|
824
|
+
const u = Sn(r, l), d = Se(u, o.onValidationError);
|
|
825
|
+
_("PR dialog finished. Starting payment flow...");
|
|
826
|
+
const S = await Wt(a, {
|
|
827
|
+
fields: d,
|
|
828
828
|
checkoutPaymentMethod: e
|
|
829
|
-
}), g = vn(
|
|
830
|
-
|
|
831
|
-
const
|
|
832
|
-
if (
|
|
833
|
-
|
|
834
|
-
const
|
|
835
|
-
secure_token:
|
|
829
|
+
}), g = vn(S);
|
|
830
|
+
_("Confirming PR with Stripe..."), await Et(g, l);
|
|
831
|
+
const E = await Y(a);
|
|
832
|
+
if (E.mode === "setup") {
|
|
833
|
+
_("Confirming payment flow for setup...");
|
|
834
|
+
const b = await we(a, {
|
|
835
|
+
secure_token: E.token
|
|
836
836
|
});
|
|
837
|
-
return { mode: "setup", result: Pe(
|
|
837
|
+
return { mode: "setup", result: Pe(b) };
|
|
838
838
|
} else {
|
|
839
|
-
|
|
840
|
-
const
|
|
841
|
-
secure_token:
|
|
839
|
+
_("Performing checkout...");
|
|
840
|
+
const b = {
|
|
841
|
+
secure_token: E.token,
|
|
842
842
|
payment_input: {
|
|
843
843
|
provider_type: e.provider
|
|
844
844
|
},
|
|
845
|
-
customer_email:
|
|
846
|
-
customer_zip_code:
|
|
847
|
-
customer_country:
|
|
848
|
-
promotion_code:
|
|
849
|
-
line_items:
|
|
850
|
-
total_amount_atom:
|
|
845
|
+
customer_email: d[f.EMAIL],
|
|
846
|
+
customer_zip_code: d[f.ZIP_CODE],
|
|
847
|
+
customer_country: d[f.COUNTRY],
|
|
848
|
+
promotion_code: d[f.PROMOTION_CODE],
|
|
849
|
+
line_items: E.line_items,
|
|
850
|
+
total_amount_atom: E.amount_total_atom,
|
|
851
851
|
cancel_at_end: !1,
|
|
852
852
|
checkout_payment_method: e
|
|
853
853
|
};
|
|
854
|
-
return { mode: "checkout", result: await nn(a,
|
|
854
|
+
return { mode: "checkout", result: await nn(a, b) };
|
|
855
855
|
}
|
|
856
856
|
}
|
|
857
|
-
), Sn = (n) => {
|
|
858
|
-
|
|
859
|
-
|
|
857
|
+
), Sn = (n, e) => {
|
|
858
|
+
var a, c, l, u;
|
|
859
|
+
const r = { ...n }, [o, ...s] = ((c = (a = e.payerName) == null ? void 0 : a.trim()) == null ? void 0 : c.split(/\s+/)) ?? [], i = s.join(" ") || void 0;
|
|
860
|
+
return r[f.FIRST_NAME] = r[f.FIRST_NAME] || o || "_OP_UNKNOWN", r[f.LAST_NAME] = r[f.LAST_NAME] || i || "_OP_UNKNOWN", r[f.EMAIL] = r[f.EMAIL] || e.payerEmail || "op_unfilled@getopenpay.com", r[f.ZIP_CODE] = r[f.ZIP_CODE] || ((l = e.shippingAddress) == null ? void 0 : l.postalCode) || "00000", r[f.COUNTRY] = r[f.COUNTRY] || ((u = e.shippingAddress) == null ? void 0 : u.country) || "US", _("Final form inputs:", r), r;
|
|
860
861
|
}, Pn = (n, e, r) => {
|
|
861
862
|
n.update({
|
|
862
863
|
total: {
|
|
@@ -899,8 +900,8 @@ Object.defineProperty(U, "__esModule", {
|
|
|
899
900
|
value: !0
|
|
900
901
|
});
|
|
901
902
|
U.Observable = void 0;
|
|
902
|
-
const ve = (n) => !!Symbol[n],
|
|
903
|
-
function
|
|
903
|
+
const ve = (n) => !!Symbol[n], Z = (n) => ve(n) ? Symbol[n] : "@@" + n, Rn = Z("iterator"), H = Z("observable"), ke = Z("species");
|
|
904
|
+
function D(n, e) {
|
|
904
905
|
let r = n[e];
|
|
905
906
|
if (r != null) {
|
|
906
907
|
if (typeof r != "function") throw new TypeError(r + " is not a function");
|
|
@@ -919,7 +920,7 @@ function v(n) {
|
|
|
919
920
|
throw n;
|
|
920
921
|
});
|
|
921
922
|
}
|
|
922
|
-
function
|
|
923
|
+
function j(n) {
|
|
923
924
|
Promise.resolve().then(() => {
|
|
924
925
|
try {
|
|
925
926
|
n();
|
|
@@ -935,17 +936,17 @@ function Re(n) {
|
|
|
935
936
|
if (typeof e == "function")
|
|
936
937
|
e();
|
|
937
938
|
else {
|
|
938
|
-
let r =
|
|
939
|
+
let r = D(e, "unsubscribe");
|
|
939
940
|
r && r.call(e);
|
|
940
941
|
}
|
|
941
942
|
} catch (r) {
|
|
942
943
|
v(r);
|
|
943
944
|
}
|
|
944
945
|
}
|
|
945
|
-
function
|
|
946
|
+
function K(n) {
|
|
946
947
|
n._observer = void 0, n._queue = void 0, n._state = "closed";
|
|
947
948
|
}
|
|
948
|
-
function
|
|
949
|
+
function An(n) {
|
|
949
950
|
let e = n._queue;
|
|
950
951
|
if (e) {
|
|
951
952
|
n._queue = void 0, n._state = "ready";
|
|
@@ -957,17 +958,17 @@ function Oe(n, e, r) {
|
|
|
957
958
|
n._state = "running";
|
|
958
959
|
let o = n._observer;
|
|
959
960
|
try {
|
|
960
|
-
let s =
|
|
961
|
+
let s = D(o, e);
|
|
961
962
|
switch (e) {
|
|
962
963
|
case "next":
|
|
963
964
|
s && s.call(o, r);
|
|
964
965
|
break;
|
|
965
966
|
case "error":
|
|
966
|
-
if (
|
|
967
|
+
if (K(n), s) s.call(o, r);
|
|
967
968
|
else throw r;
|
|
968
969
|
break;
|
|
969
970
|
case "complete":
|
|
970
|
-
|
|
971
|
+
K(n), s && s.call(o);
|
|
971
972
|
break;
|
|
972
973
|
}
|
|
973
974
|
} catch (s) {
|
|
@@ -988,13 +989,13 @@ function z(n, e, r) {
|
|
|
988
989
|
n._state = "buffering", n._queue = [{
|
|
989
990
|
type: e,
|
|
990
991
|
value: r
|
|
991
|
-
}],
|
|
992
|
+
}], j(() => An(n));
|
|
992
993
|
return;
|
|
993
994
|
}
|
|
994
995
|
Oe(n, e, r);
|
|
995
996
|
}
|
|
996
997
|
}
|
|
997
|
-
class
|
|
998
|
+
class Tn {
|
|
998
999
|
constructor(e, r) {
|
|
999
1000
|
this._cleanup = void 0, this._observer = e, this._queue = void 0, this._state = "initializing";
|
|
1000
1001
|
let o = this, s = {
|
|
@@ -1022,7 +1023,7 @@ class jn {
|
|
|
1022
1023
|
return this._state === "closed";
|
|
1023
1024
|
}
|
|
1024
1025
|
unsubscribe() {
|
|
1025
|
-
this._state !== "closed" && (
|
|
1026
|
+
this._state !== "closed" && (K(this), Re(this));
|
|
1026
1027
|
}
|
|
1027
1028
|
}
|
|
1028
1029
|
let $ = class F {
|
|
@@ -1036,7 +1037,7 @@ let $ = class F {
|
|
|
1036
1037
|
next: e,
|
|
1037
1038
|
error: arguments[1],
|
|
1038
1039
|
complete: arguments[2]
|
|
1039
|
-
}), new
|
|
1040
|
+
}), new Tn(e, this._subscriber);
|
|
1040
1041
|
}
|
|
1041
1042
|
forEach(e) {
|
|
1042
1043
|
return new Promise((r, o) => {
|
|
@@ -1104,19 +1105,19 @@ let $ = class F {
|
|
|
1104
1105
|
if (typeof e != "function") throw new TypeError(e + " is not a function");
|
|
1105
1106
|
let r = R(this), o = arguments.length > 1, s = !1, a = arguments[1];
|
|
1106
1107
|
return new r((c) => this.subscribe({
|
|
1107
|
-
next(
|
|
1108
|
-
let
|
|
1109
|
-
if (s = !0, !
|
|
1108
|
+
next(l) {
|
|
1109
|
+
let u = !s;
|
|
1110
|
+
if (s = !0, !u || o)
|
|
1110
1111
|
try {
|
|
1111
|
-
a = e(a,
|
|
1112
|
-
} catch (
|
|
1113
|
-
return c.error(
|
|
1112
|
+
a = e(a, l);
|
|
1113
|
+
} catch (d) {
|
|
1114
|
+
return c.error(d);
|
|
1114
1115
|
}
|
|
1115
1116
|
else
|
|
1116
|
-
a =
|
|
1117
|
+
a = l;
|
|
1117
1118
|
},
|
|
1118
|
-
error(
|
|
1119
|
-
c.error(
|
|
1119
|
+
error(l) {
|
|
1120
|
+
c.error(l);
|
|
1120
1121
|
},
|
|
1121
1122
|
complete() {
|
|
1122
1123
|
if (!s && !o) return c.error(new TypeError("Cannot reduce an empty sequence"));
|
|
@@ -1134,11 +1135,11 @@ let $ = class F {
|
|
|
1134
1135
|
let s, i = 0;
|
|
1135
1136
|
function a(c) {
|
|
1136
1137
|
s = c.subscribe({
|
|
1137
|
-
next(
|
|
1138
|
-
o.next(
|
|
1138
|
+
next(l) {
|
|
1139
|
+
o.next(l);
|
|
1139
1140
|
},
|
|
1140
|
-
error(
|
|
1141
|
-
o.error(
|
|
1141
|
+
error(l) {
|
|
1142
|
+
o.error(l);
|
|
1142
1143
|
},
|
|
1143
1144
|
complete() {
|
|
1144
1145
|
i === e.length ? (s = void 0, o.complete()) : a(r.from(e[i++]));
|
|
@@ -1159,22 +1160,22 @@ let $ = class F {
|
|
|
1159
1160
|
if (e)
|
|
1160
1161
|
try {
|
|
1161
1162
|
c = e(c);
|
|
1162
|
-
} catch (
|
|
1163
|
-
return o.error(
|
|
1163
|
+
} catch (u) {
|
|
1164
|
+
return o.error(u);
|
|
1164
1165
|
}
|
|
1165
|
-
let
|
|
1166
|
-
next(
|
|
1167
|
-
o.next(
|
|
1166
|
+
let l = r.from(c).subscribe({
|
|
1167
|
+
next(u) {
|
|
1168
|
+
o.next(u);
|
|
1168
1169
|
},
|
|
1169
|
-
error(
|
|
1170
|
-
o.error(
|
|
1170
|
+
error(u) {
|
|
1171
|
+
o.error(u);
|
|
1171
1172
|
},
|
|
1172
1173
|
complete() {
|
|
1173
|
-
let
|
|
1174
|
-
|
|
1174
|
+
let u = s.indexOf(l);
|
|
1175
|
+
u >= 0 && s.splice(u, 1), a();
|
|
1175
1176
|
}
|
|
1176
1177
|
});
|
|
1177
|
-
s.push(
|
|
1178
|
+
s.push(l);
|
|
1178
1179
|
},
|
|
1179
1180
|
error(c) {
|
|
1180
1181
|
o.error(c);
|
|
@@ -1197,15 +1198,15 @@ let $ = class F {
|
|
|
1197
1198
|
static from(e) {
|
|
1198
1199
|
let r = typeof this == "function" ? this : F;
|
|
1199
1200
|
if (e == null) throw new TypeError(e + " is not an object");
|
|
1200
|
-
let o =
|
|
1201
|
+
let o = D(e, H);
|
|
1201
1202
|
if (o) {
|
|
1202
1203
|
let s = o.call(e);
|
|
1203
1204
|
if (Object(s) !== s) throw new TypeError(s + " is not an object");
|
|
1204
1205
|
return On(s) && s.constructor === r ? s : new r((i) => s.subscribe(i));
|
|
1205
1206
|
}
|
|
1206
|
-
if (ve("iterator") && (o =
|
|
1207
|
+
if (ve("iterator") && (o = D(e, Rn), o))
|
|
1207
1208
|
return new r((s) => {
|
|
1208
|
-
|
|
1209
|
+
j(() => {
|
|
1209
1210
|
if (!s.closed) {
|
|
1210
1211
|
for (let i of o.call(e))
|
|
1211
1212
|
if (s.next(i), s.closed) return;
|
|
@@ -1215,7 +1216,7 @@ let $ = class F {
|
|
|
1215
1216
|
});
|
|
1216
1217
|
if (Array.isArray(e))
|
|
1217
1218
|
return new r((s) => {
|
|
1218
|
-
|
|
1219
|
+
j(() => {
|
|
1219
1220
|
if (!s.closed) {
|
|
1220
1221
|
for (let i = 0; i < e.length; ++i)
|
|
1221
1222
|
if (s.next(e[i]), s.closed) return;
|
|
@@ -1228,7 +1229,7 @@ let $ = class F {
|
|
|
1228
1229
|
static of(...e) {
|
|
1229
1230
|
let r = typeof this == "function" ? this : F;
|
|
1230
1231
|
return new r((o) => {
|
|
1231
|
-
|
|
1232
|
+
j(() => {
|
|
1232
1233
|
if (!o.closed) {
|
|
1233
1234
|
for (let s = 0; s < e.length; ++s)
|
|
1234
1235
|
if (o.next(e[s]), o.closed) return;
|
|
@@ -1250,12 +1251,12 @@ Object.defineProperty($, Symbol("extensions"), {
|
|
|
1250
1251
|
configurable: !0
|
|
1251
1252
|
});
|
|
1252
1253
|
var In = U.Observable;
|
|
1253
|
-
const
|
|
1254
|
+
const jn = /* @__PURE__ */ kn(In), { log__: Fn, err__: Mn } = P("init-flows"), Ln = (n) => ({
|
|
1254
1255
|
// Stripe PR
|
|
1255
|
-
stripePR:
|
|
1256
|
+
stripePR: Dn("stripePR", I.stripePR.init({ context: n }))
|
|
1256
1257
|
// 👉 Add initialization flows here
|
|
1257
|
-
}),
|
|
1258
|
-
const r = new
|
|
1258
|
+
}), Dn = (n, e) => {
|
|
1259
|
+
const r = new jn((o) => {
|
|
1259
1260
|
o.next({ status: "loading" }), e.then((s) => {
|
|
1260
1261
|
o.next({ status: "loaded", result: s });
|
|
1261
1262
|
}).catch((s) => {
|
|
@@ -1282,7 +1283,7 @@ ${JSON.stringify(o)}`), o;
|
|
|
1282
1283
|
startFlow: async () => {
|
|
1283
1284
|
}
|
|
1284
1285
|
};
|
|
1285
|
-
class
|
|
1286
|
+
class Nn {
|
|
1286
1287
|
constructor(e) {
|
|
1287
1288
|
this.formInstance = e, this.config = e.config, this.formId = e.formId, this.eventTargets = {}, this.nonces = /* @__PURE__ */ new Set();
|
|
1288
1289
|
}
|
|
@@ -1435,10 +1436,10 @@ class xn {
|
|
|
1435
1436
|
vt(e, this.formId, r, o, this.config.baseUrl);
|
|
1436
1437
|
}
|
|
1437
1438
|
}
|
|
1438
|
-
async function
|
|
1439
|
+
async function xn(n, e) {
|
|
1439
1440
|
const o = await se({
|
|
1440
1441
|
iframe: n,
|
|
1441
|
-
debug: !
|
|
1442
|
+
debug: !1,
|
|
1442
1443
|
childOrigin: e
|
|
1443
1444
|
}).promise, s = await kt(o);
|
|
1444
1445
|
if (!Rt(o, s))
|
|
@@ -1465,27 +1466,27 @@ class Un {
|
|
|
1465
1466
|
const O = class O {
|
|
1466
1467
|
constructor(e) {
|
|
1467
1468
|
this.tryInitOjsFlows = () => {
|
|
1468
|
-
this.ojsFlowsInitialization === null && this.cdeLoadedPayload && this.connectionManager.getAllConnections().size !== 0 && (this.ojsFlowsInitialization =
|
|
1469
|
+
this.ojsFlowsInitialization === null && this.cdeLoadedPayload && this.connectionManager.getAllConnections().size !== 0 && (this.ojsFlowsInitialization = Ln(this.createOjsFlowContext()), this.ojsFlowsInitialization.stripePR.subscribe((r) => this.onStripePRStatusChange(r)));
|
|
1469
1470
|
}, this.onCdeLoaded = (r) => {
|
|
1470
1471
|
this.cdeLoadedPayload || (this.cdeLoadedPayload = r, this.tryInitOjsFlows());
|
|
1471
1472
|
}, this.onStripePRStatusChange = (r) => {
|
|
1472
|
-
var o, s, i, a, c,
|
|
1473
|
+
var o, s, i, a, c, l;
|
|
1473
1474
|
if (r.status === "loading")
|
|
1474
1475
|
(s = (o = this.config).onPaymentRequestLoad) == null || s.call(o, { apple_pay: ne, google_pay: ne });
|
|
1475
1476
|
else if (r.status === "error")
|
|
1476
1477
|
(a = (i = this.config).onPaymentRequestLoad) == null || a.call(i, { apple_pay: re, google_pay: re });
|
|
1477
1478
|
else if (r.status === "loaded") {
|
|
1478
|
-
const
|
|
1479
|
-
(
|
|
1479
|
+
const u = r.result, d = u.isAvailable && u.availableProviders.applePay, S = u.isAvailable && u.availableProviders.googlePay;
|
|
1480
|
+
(l = (c = this.config).onPaymentRequestLoad) == null || l.call(c, {
|
|
1480
1481
|
apple_pay: {
|
|
1481
1482
|
isLoading: !1,
|
|
1482
|
-
isAvailable:
|
|
1483
|
-
startFlow: async (g) =>
|
|
1483
|
+
isAvailable: d,
|
|
1484
|
+
startFlow: async (g) => d ? this.submitPaymentRequest("apple_pay", u, g) : void 0
|
|
1484
1485
|
},
|
|
1485
1486
|
google_pay: {
|
|
1486
1487
|
isLoading: !1,
|
|
1487
|
-
isAvailable:
|
|
1488
|
-
startFlow: async (g) =>
|
|
1488
|
+
isAvailable: S,
|
|
1489
|
+
startFlow: async (g) => S ? this.submitPaymentRequest("google_pay", u, g) : void 0
|
|
1489
1490
|
}
|
|
1490
1491
|
});
|
|
1491
1492
|
}
|
|
@@ -1499,7 +1500,7 @@ const O = class O {
|
|
|
1499
1500
|
customParams: { provider: r, overridePaymentRequest: s == null ? void 0 : s.overridePaymentRequest },
|
|
1500
1501
|
initResult: o
|
|
1501
1502
|
});
|
|
1502
|
-
}, O.assignAsSingleton(this), this.config = { ...e, baseUrl: e.baseUrl ?? "https://cde.getopenpay.com" }, this.elements = null, this.formId = `opjs-form-${window.crypto.randomUUID()}`, this.referer = window.location.origin, this.formTarget = e.formTarget ?? "body", this.formProperties = { height: "1px" }, this.cdeLoadedPayload = null, this.ojsFlowsInitialization = null, this.checkoutFired = !1, this.connectionManager = new Un(), this.eventHandler = new
|
|
1503
|
+
}, O.assignAsSingleton(this), this.config = { ...e, baseUrl: e.baseUrl ?? "https://cde.getopenpay.com" }, this.elements = null, this.formId = `opjs-form-${window.crypto.randomUUID()}`, this.referer = window.location.origin, this.formTarget = e.formTarget ?? "body", this.formProperties = { height: "1px" }, this.cdeLoadedPayload = null, this.ojsFlowsInitialization = null, this.checkoutFired = !1, this.connectionManager = new Un(), this.eventHandler = new Nn(this), this.ojsVersion = "0.1.7", window.addEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler));
|
|
1503
1504
|
}
|
|
1504
1505
|
/**
|
|
1505
1506
|
* Assign the instance to the window as a singleton
|
|
@@ -1534,9 +1535,9 @@ const O = class O {
|
|
|
1534
1535
|
const c = {
|
|
1535
1536
|
type: o,
|
|
1536
1537
|
node: s,
|
|
1537
|
-
mount: (
|
|
1538
|
-
var
|
|
1539
|
-
return (
|
|
1538
|
+
mount: (l) => {
|
|
1539
|
+
var u;
|
|
1540
|
+
return (u = document.querySelector(l)) == null ? void 0 : u.appendChild(s);
|
|
1540
1541
|
}
|
|
1541
1542
|
};
|
|
1542
1543
|
return this.connectToElement(c), this.elements ? this.elements[o] = c : this.elements = { [o]: c }, c;
|
|
@@ -1546,7 +1547,7 @@ const O = class O {
|
|
|
1546
1547
|
return r.append("referer", this.referer), r.append("formId", this.formId), e.styles && r.append("styles", Ct(e.styles)), r.append("secureToken", this.config.checkoutSecureToken), r;
|
|
1547
1548
|
}
|
|
1548
1549
|
connectToElement(e) {
|
|
1549
|
-
|
|
1550
|
+
xn(e.node).then((r) => {
|
|
1550
1551
|
this.connectionManager.addConnection(e.type, r), this.tryInitOjsFlows();
|
|
1551
1552
|
}).catch((r) => {
|
|
1552
1553
|
});
|
|
@@ -1610,7 +1611,7 @@ const O = class O {
|
|
|
1610
1611
|
O.ojsFlows = I;
|
|
1611
1612
|
let oe = O;
|
|
1612
1613
|
export {
|
|
1613
|
-
|
|
1614
|
+
f as FieldName,
|
|
1614
1615
|
oe as OpenPayForm
|
|
1615
1616
|
};
|
|
1616
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguZXMuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEZSQU1FX0JBU0VfVVJMID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiO1xuXG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBsb2M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIG1zZzogei5zdHJpbmcoKSxcbiAgdXJsOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yUmVzcG9uc2UgPSB6LmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHoub2JqZWN0KHtcbiAgY29kZTogei5zdHJpbmcoKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgcGF0aDogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBab2RGaWVsZEVycm9ycyA9IHouYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBNQVBfVE9fSFVNQU5fRlJJRU5ETFlfTE9XRVJDQVNFID0ge1xuICBcImZhaWxlZCB0byBmZXRjaFwiOiBgQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluYFxufTtcbmNvbnN0IGdldEh1bWFuRnJpZW5kbHlNZXNzYWdlID0gKG9nRXJyb3JNZXNzYWdlKSA9PiB7XG4gIGNvbnN0IGtleSA9IG9nRXJyb3JNZXNzYWdlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICByZXR1cm4gTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRVtrZXldID8/IG9nRXJyb3JNZXNzYWdlO1xufTtcbmNvbnN0IGlzU3RyaW5naWZpZWRKc29uT2JqZWN0ID0gKHN0cikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3RyKTtcbiAgICByZXR1cm4gdHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIjtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbmNvbnN0IGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShyZXNwb25zZVswXS5tc2cpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJ1bGxldGVkID0gcmVzcG9uc2UubWFwKChlcnIpID0+IGDigKIgJHtnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlcnIubXNnKX1gKS5qb2luKFwiXFxuXCIpO1xuICAgIHJldHVybiBgJHtgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpgfVxuJHtidWxsZXRlZH1gO1xuICB9XG59O1xuY29uc3QgY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyA9IChlcnJvcnMpID0+IHtcbiAgY29uc3QgbGlzdE9mRXJyb3JzID0gZXJyb3JzLm1hcCgoZXJyKSA9PiBgLSAke2Vyci5wYXRoLmpvaW4oXCIvXCIpfTogJHtlcnIubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpO1xuICByZXR1cm4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtsaXN0T2ZFcnJvcnN9YDtcbn07XG5jb25zdCBnZXRFcnJvck1lc3NhZ2UgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgaWYgKGlzU3RyaW5naWZpZWRKc29uT2JqZWN0KGUubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZS5tZXNzYWdlKTtcbiAgICAgIGlmIChQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3Iob2JqKTtcbiAgICAgIH0gZWxzZSBpZiAoWm9kRmllbGRFcnJvcnMuc2FmZVBhcnNlKG9iaikuc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyhvYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGUubWVzc2FnZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGdldEh1bWFuRnJpZW5kbHlNZXNzYWdlKGUubWVzc2FnZSk7XG4gICAgfVxuICB9XG4gIGlmICh0eXBlb2YgZSA9PT0gXCJvYmplY3RcIikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSk7XG4gICAgfSBjYXRjaCAoZTIpIHtcbiAgICAgIHJldHVybiBlMiArIFwiXCI7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBlICsgXCJcIjtcbiAgfVxufTtcbmNvbnN0IG1ha2VDYWxsYmFja1NhZmUgPSAoY2FsbGJhY2tOYW1lLCBmbikgPT4ge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IFJlcXVpcmVkU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG5jb25zdCBPcHRpb25hbFN0cmluZyA9IHouc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCk7XG5jb25zdCBudWxsT3JVbmRlZk9yJDEgPSAoelR5cGUpID0+IHoubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG52YXIgRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoRmllbGROYW1lMikgPT4ge1xuICBGaWVsZE5hbWUyW1wiRklSU1RfTkFNRVwiXSA9IFwiZmlyc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJMQVNUX05BTUVcIl0gPSBcImxhc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJFTUFJTFwiXSA9IFwiZW1haWxcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIkFERFJFU1NcIl0gPSBcImFkZHJlc3NcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiUFJPTU9USU9OX0NPREVcIl0gPSBcInByb21vdGlvbkNvZGVcIjtcbiAgcmV0dXJuIEZpZWxkTmFtZTI7XG59KShGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgRmllbGROYW1lRW51bSA9IHoubmF0aXZlRW51bShGaWVsZE5hbWUpO1xudmFyIFByaXZhdGVGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChQcml2YXRlRmllbGROYW1lMikgPT4ge1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkTnVtYmVyXCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmRFeHBpcnlcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZEN2Y1wiO1xuICByZXR1cm4gUHJpdmF0ZUZpZWxkTmFtZTI7XG59KShQcml2YXRlRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IFByaXZhdGVGaWVsZE5hbWVFbnVtID0gei5uYXRpdmVFbnVtKFByaXZhdGVGaWVsZE5hbWUpO1xuY29uc3QgQWxsRmllbGROYW1lcyA9IHoudW5pb24oW0ZpZWxkTmFtZUVudW0sIFByaXZhdGVGaWVsZE5hbWVFbnVtXSk7XG52YXIgRWxlbWVudFR5cGVFbnVtID0gLyogQF9fUFVSRV9fICovICgoRWxlbWVudFR5cGVFbnVtMikgPT4ge1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRFwiXSA9IFwiY2FyZFwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmQtbnVtYmVyXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZC1leHBpcnlcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkLWN2Y1wiO1xuICByZXR1cm4gRWxlbWVudFR5cGVFbnVtMjtcbn0pKEVsZW1lbnRUeXBlRW51bSB8fCB7fSk7XG5jb25zdCBFbGVtZW50VHlwZSA9IHoubmF0aXZlRW51bShFbGVtZW50VHlwZUVudW0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50TWV0aG9kTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBPcHRpb25hbFN0cmluZyxcbiAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgY3ZjOiBPcHRpb25hbFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGNvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFdlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIG1hcmdpbjogT3B0aW9uYWxTdHJpbmcsXG4gIHBhZGRpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgRXZlbnRUeXBlID0gei5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKTtcbmNvbnN0IEdlbmVyaWNFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7IHR5cGU6IEdlbmVyaWNFdmVudFR5cGUgfSk7XG5jb25zdCBJbnB1dEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSk7XG5jb25zdCBJbnB1dEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogSW5wdXRFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBQcml2YXRlRmllbGROYW1lRW51bSxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSk7XG5jb25zdCBFcnJvckV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogRXJyb3JFdmVudFR5cGUsXG4gIG1lc3NhZ2U6IFJlcXVpcmVkU3RyaW5nLFxuICBoZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBBbGxGaWVsZE5hbWVzLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgTGF5b3V0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBSZXF1aXJlZFN0cmluZ1xufSk7XG5jb25zdCBMb2FkZWRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICB0b3RhbEFtb3VudEF0b21zOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogT3B0aW9uYWxTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHouYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEpXG59KTtcbmNvbnN0IFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogei5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHoub3B0aW9uYWwoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBSZXF1aXJlZEZvcm1GaWVsZHMgPSB6Lm9iamVjdCh7XG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBTdWJtaXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKTtcbmNvbnN0IFN1Ym1pdEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogU3VibWl0RXZlbnRUeXBlLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6LmFueSgpLm9wdGlvbmFsKCksXG4gIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogei5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgRXZlbnRQYXlsb2FkID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgR2VuZXJpY0V2ZW50UGF5bG9hZCxcbiAgSW5wdXRFdmVudFBheWxvYWQsXG4gIEVycm9yRXZlbnRQYXlsb2FkLFxuICBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQsXG4gIExheW91dEV2ZW50UGF5bG9hZCxcbiAgTG9hZGVkRXZlbnRQYXlsb2FkLFxuICBTdWJtaXRFdmVudFBheWxvYWQsXG4gIFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQsXG4gIFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkXG5dKTtcbmNvbnN0IEVsZW1lbnRFdmVudCA9IHoub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogei5hcnJheShQYXltZW50TWV0aG9kTWluaW1hbClcbn0pO1xuY29uc3QgRmllbGRWYWxpZGF0aW9uRXJyb3IgPSB6Lm9iamVjdCh7XG4gIGVsZW1lbnRUeXBlOiB6LnN0cmluZygpLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHoubGl0ZXJhbChmYWxzZSksXG4gIGVycm9yX3R5cGU6IHoubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogei5hcnJheShGaWVsZFZhbGlkYXRpb25FcnJvcilcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkUmVzcG9uc2UgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6Lm9iamVjdCh7IHN1Y2Nlc3M6IHoubGl0ZXJhbCh0cnVlKSB9KSxcbiAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuXSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHNcbn0pO1xudmFyIFRocmVlRFNTdGF0dXMgPSAvKiBAX19QVVJFX18gKi8gKChUaHJlZURTU3RhdHVzMikgPT4ge1xuICBUaHJlZURTU3RhdHVzMltcIlNVQ0NFU1NcIl0gPSBcInN1Y2Nlc3NcIjtcbiAgVGhyZWVEU1N0YXR1czJbXCJGQUlMVVJFXCJdID0gXCJmYWlsdXJlXCI7XG4gIFRocmVlRFNTdGF0dXMyW1wiQ0FOQ0VMTEVEXCJdID0gXCJjYW5jZWxsZWRcIjtcbiAgcmV0dXJuIFRocmVlRFNTdGF0dXMyO1xufSkoVGhyZWVEU1N0YXR1cyB8fCB7fSk7XG5jb25zdCBQaW5nM0RTU3RhdHVzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2Nlc3NcIiAvKiBTVUNDRVNTICovLCBcImZhaWx1cmVcIiAvKiBGQUlMVVJFICovLCBcImNhbmNlbGxlZFwiIC8qIENBTkNFTExFRCAqL10pXG59KTtcbmNvbnN0IENvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6LnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogei5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogei5zdHJpbmcoKVxufSk7XG5cbmNvbnN0IGV4dHJhY3RJc3N1ZXNQZXJGaWVsZCA9IChlcnJvcikgPT4ge1xuICBjb25zdCBpc3N1ZXNQZXJGaWVsZCA9IHt9O1xuICBPYmplY3QuZW50cmllcyhlcnJvcikuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IEZpZWxkTmFtZUVudW0ucGFyc2Uoa2V5KTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuX2Vycm9ycykpIHtcbiAgICAgICAgaXNzdWVzUGVyRmllbGRbZmllbGROYW1lXSA9IHZhbHVlLl9lcnJvcnM7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlzc3Vlc1BlckZpZWxkO1xufTtcblxuY29uc3QgU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IG91ckN1cnJlbmN5VG9UaGVpcnMgPSB7XG4gIHVzZDogXCJ1c2RcIixcbiAgYnJsOiBcImJybFwiXG59O1xuY29uc3QgZ2V0TG9hZGVkU3RyaXBlID0gYXN5bmMgKHB1Ymxpc2hhYmxlS2V5KSA9PiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgIGlmICghaXNTdHJpcGVKc1ByZXNlbnQoKSkge1xuICAgICAgYXdhaXQgc2xlZXAoNTAwKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1N0cmlwZUpzUHJlc2VudCgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdHJpcGUgSlMgbm90IGZvdW5kLmApO1xuICB9XG4gIGNvbnN0IHN0cmlwZSA9IG5ldyBTdHJpcGUocHVibGlzaGFibGVLZXkpO1xuICByZXR1cm4gc3RyaXBlO1xufTtcbmNvbnN0IGNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0ID0gYXN5bmMgKHN0cmlwZVB1YktleSwgdG90YWxBbW91bnRBdG9tLCBjdXJyZW5jeSwgaXNBbW91bnRQZW5kaW5nLCBpc0xpbmtPbmx5KSA9PiB7XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShzdHJpcGVQdWJLZXkpO1xuICBjb25zdCBzdHJpcGVDdXJyZW5jeSA9IG91ckN1cnJlbmN5VG9UaGVpcnNbY3VycmVuY3kudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICBjb25zdCBwYXltZW50UmVxdWVzdCA9IHN0cmlwZS5wYXltZW50UmVxdWVzdCh7XG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggc3RyaXBlIGFjY291bnQgY291bnRyeSBhcyBzb29uIGFzIHdlIHN1cHBvcnQgaXRcbiAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgY3VycmVuY3k6IHN0cmlwZUN1cnJlbmN5LFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiB0b3RhbEFtb3VudEF0b20sXG4gICAgICBwZW5kaW5nOiBpc0Ftb3VudFBlbmRpbmdcbiAgICB9LFxuICAgIHJlcXVlc3RQYXllck5hbWU6IHRydWUsXG4gICAgcmVxdWVzdFBheWVyRW1haWw6IHRydWUsXG4gICAgZGlzYWJsZVdhbGxldHM6IFtdIFxuICB9KTtcbiAgcmV0dXJuIHBheW1lbnRSZXF1ZXN0O1xufTtcbmNvbnN0IHNsZWVwID0gKHRpbWVvdXRNcykgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXRNcyk7XG4gIH0pO1xufTtcbmNvbnN0IGlzU3RyaXBlSnNQcmVzZW50ID0gKCkgPT4ge1xuICByZXR1cm4gXCJTdHJpcGVcIiBpbiB3aW5kb3c7XG59O1xuY29uc3Qgd2FpdEZvclVzZXJUb0FkZFBheW1lbnRNZXRob2QgPSBhc3luYyAocGF5bWVudFJlcXVlc3QpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB0cnkge1xuICAgICAgcGF5bWVudFJlcXVlc3Qub24oXCJwYXltZW50bWV0aG9kXCIsIGFzeW5jIChldnQpID0+IHtcbiAgICAgICAgcmVzb2x2ZShldnQpO1xuICAgICAgfSk7XG4gICAgICBwYXltZW50UmVxdWVzdC5vbihcImNhbmNlbFwiLCAoKSA9PiB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheWApKTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJlamVjdChlKTtcbiAgICB9XG4gIH0pO1xufTtcbmNvbnN0IGNvbmZpcm1TdHJpcGVQclBNID0gYXN5bmMgKG5leHRBY3Rpb25NZXRhZGF0YSwgc3RyaXBlUG0pID0+IHtcbiAgaWYgKCFuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BrIHx8ICFuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuZXh0IGFjdGlvbiBtZXRhZGF0YSBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkobmV4dEFjdGlvbk1ldGFkYXRhKX1gKTtcbiAgfVxuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUobmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayk7XG4gIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBzdHJpcGUuY29uZmlybUNhcmRTZXR1cChuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiBzdHJpcGVQbS5wYXltZW50TWV0aG9kLmlkXG4gIH0pO1xuICBpZiAoY29uZmlybVJlc3VsdC5lcnJvcikge1xuICAgIHN0cmlwZVBtLmNvbXBsZXRlKFwiZmFpbFwiKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBheW1lbnQgZmFpbGVkOiAke2NvbmZpcm1SZXN1bHQuZXJyb3IubWVzc2FnZSA/PyBgdW5rbm93bmB9YCk7XG4gIH0gZWxzZSB7XG4gICAgc3RyaXBlUG0uY29tcGxldGUoXCJzdWNjZXNzXCIpO1xuICB9XG59O1xuY29uc3QgbGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyA9IGFzeW5jIChuZXh0QWN0aW9uTWV0YWRhdGEpID0+IHtcbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGspO1xuICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1DYXJkU2V0dXAobmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogbmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wbV9pZFxuICB9KTtcbiAgY29uc3QgcmVzdWx0U3RhdHVzID0gY29uZmlybVJlc3VsdC5zZXR1cEludGVudD8uc3RhdHVzO1xuICBpZiAocmVzdWx0U3RhdHVzID09PSBcInN1Y2NlZWRlZFwiKSA7IGVsc2UgaWYgKHJlc3VsdFN0YXR1cyA9PT0gXCJjYW5jZWxlZFwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlgKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgJHtjb25maXJtUmVzdWx0LmVycm9yPy5tZXNzYWdlID8/IGNvbmZpcm1SZXN1bHQuc2V0dXBJbnRlbnQ/Lmxhc3Rfc2V0dXBfZXJyb3I/Lm1lc3NhZ2UgPz8gXCJQYXltZW50IGZhaWxlZCwgcGxlYXNlIGNsaWNrIHN1Ym1pdCBhZ2FpbiB0byBwYXkuXCJ9YFxuICAgICk7XG4gIH1cbn07XG5cbmNvbnN0IGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nID0gKHN0eWxlcykgPT4ge1xuICBjb25zdCBzZXJpYWxpemVkU3R5bGVzID0gSlNPTi5zdHJpbmdpZnkoc3R5bGVzKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRTdHlsZXM7XG59O1xuXG5jb25zdCBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0gPSAoZm9ybURpdiwgaW5pdGlhbERpY3QpID0+IHtcbiAgY29uc3QgaW5jbHVkZWRJbnB1dHMgPSBBcnJheS5mcm9tKGZvcm1EaXYucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLW9waWRdXCIpID8/IFtdKTtcbiAgY29uc3QgZXh0cmFEYXRhID0gaW5jbHVkZWRJbnB1dHMucmVkdWNlKChhY2MsIGlucHV0KSA9PiB7XG4gICAgY29uc3Qga2V5ID0gaW5wdXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1vcGlkXCIpO1xuICAgIGlmICgha2V5KSByZXR1cm4gYWNjO1xuICAgIHJldHVybiB7IC4uLmFjYywgW2tleV06IGlucHV0LnZhbHVlIH07XG4gIH0sIHt9KTtcbiAgcmV0dXJuIGV4dHJhRGF0YTtcbn07XG5jb25zdCBwYXJzZUV2ZW50UGF5bG9hZCA9IChldmVudERhdGEpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRWxlbWVudEV2ZW50LnBhcnNlKGV2ZW50RGF0YSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5jb25zdCBlbWl0RXZlbnQgPSAodGFyZ2V0LCBmb3JtSWQsIGVsZW1lbnRJZCwgcGF5bG9hZCwgYmFzZVVybCkgPT4ge1xuICBjb25zdCBldmVudCA9IHtcbiAgICBwYXlsb2FkLFxuICAgIG5vbmNlOiB2NCgpLFxuICAgIGZvcm1JZCxcbiAgICBlbGVtZW50SWRcbiAgfTtcbiAgdGFyZ2V0LnBvc3RNZXNzYWdlKEpTT04uc3RyaW5naWZ5KGV2ZW50KSwgYmFzZVVybCk7XG59O1xuXG5jb25zdCBjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0ID0gYXN5bmMgKG9iaikgPT4ge1xuICBpZiAodHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIiB8fCAhb2JqKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3QgcGluZyA9IHsgdHlwZTogXCJwaW5nXCIgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvYmouc2VuZChwaW5nKTtcbiAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICd0cnVlJyBhZnRlciBwaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbmNvbnN0IGlzUmVzdWx0VmFsaWQgPSAob2JqLCBpc1ZhbGlkKSA9PiB7XG4gIHJldHVybiAhIW9iaiAmJiBpc1ZhbGlkO1xufTtcblxuY29uc3QgbnVsbE9yVW5kZWZPciA9ICh6VHlwZSkgPT4gei5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnouc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBDYW5ub3QgYmUgYmxhbmtgIH0pO1xuY29uc3QgQ0RFUmVzcG9uc2VFcnJvciA9IHoub2JqZWN0KHtcbiAgY2RlX3Jlc3BvbnNlX3R5cGU6IHoubGl0ZXJhbChcImVycm9yXCIpLFxuICBtZXNzYWdlOiB6LnN0cmluZygpLFxuICBoZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbnouZW51bShbXCJ1c2RcIiwgXCJicmxcIl0pO1xuY29uc3QgQ291cG9uTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKSxcbiAgY3VycmVuY3k6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6LnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSlcbn0pO1xuY29uc3QgTGluZUl0ZW0gPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgY3VycmVuY3k6IHouc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBwcmljZV9pZDogei5zdHJpbmcoKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpLmludCgpKSxcbiAgcXVhbnRpdHk6IHoubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgQnJhbmRTZXR0aW5ncyA9IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpO1xuY29uc3QgQnJhbmQgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIHNldHRpbmdzOiBudWxsT3JVbmRlZk9yKEJyYW5kU2V0dGluZ3MpXG59KTtcbmNvbnN0IENoZWNrb3V0UGF5bWVudE1ldGhvZCA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIHF1YW50aXR5OiB6Lm51bWJlcigpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbk1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGlkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkuaW50KCkpLFxuICBzdWJzY3JpcHRpb25faXRlbXM6IHouYXJyYXkoU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwpLFxuICB0cmlhbF9zdGFydDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHoubnVtYmVyKClcbn0pO1xuY29uc3QgSW52b2ljZUxpbmVJdGVtTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIGFtb3VudF9hdG9tX2NvbnNpZGVyaW5nX2Rpc2NvdW50X2FwcGxpZWQ6IHoubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHouYXJyYXkoSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgRGlzY291bnRNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjb3Vwb246IENvdXBvbk1pbmltYWxcbn0pO1xuY29uc3QgSW52b2ljZU1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkaXNjb3VudHM6IHouYXJyYXkoRGlzY291bnRNaW5pbWFsKSxcbiAgaG9zdGVkX2ludm9pY2VfdXJsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lczogei5hcnJheShJbnZvaWNlTGluZUl0ZW1NaW5pbWFsKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHouYXJyYXkoSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsKVxufSk7XG5jb25zdCBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGNyZWF0ZWQ6IHouYXJyYXkoU3Vic2NyaXB0aW9uTWluaW1hbCksXG4gIGludm9pY2VzOiB6LmFycmF5KEludm9pY2VNaW5pbWFsKVxufSk7XG5jb25zdCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcHJldmlldzogQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsLFxuICBwcmV2aWV3X3Bvc3RfdHJpYWw6IG51bGxPclVuZGVmT3IoQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsKSxcbiAgY291cG9uczogei5hcnJheShDb3Vwb25NaW5pbWFsKVxufSk7XG5jb25zdCBfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHoubGl0ZXJhbChcIm9wZW5cIiksXG4gIHRva2VuOiB6LnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZV9pdGVtczogei5hcnJheShMaW5lSXRlbSksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IEJyYW5kLFxuICBzdWJzX3ByZXZpZXc6IG51bGxPclVuZGVmT3IoUHJldmlld0NoZWNrb3V0UmVzcG9uc2UpLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHouYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kKVxufSk7XG5jb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHoubnVsbGFibGUoei51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpLFxuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5lbnVtKFtcInBheW1lbnRcIiwgXCJzdWJzY3JpcHRpb25cIl0pLFxuICAgIGN1cnJlbmN5OiB6LnN0cmluZygpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKVxuXSk7XG5jb25zdCBDb21wbGV0ZWRGb3JtUHJlZmlsbCA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxufSk7XG5jb25zdCBFeHBpcmVkRm9ybVByZWZpbGwgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56LnVuaW9uKFtQYXltZW50Rm9ybVByZWZpbGwsIENvbXBsZXRlZEZvcm1QcmVmaWxsLCBFeHBpcmVkRm9ybVByZWZpbGxdKTtcbnoub2JqZWN0KHtcbiAgbG9nbzogei5zdHJpbmcoKSxcbiAgaWNvbjogei5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogei5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6LmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9lbWFpbDogei5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfemlwX2NvZGU6IHouc3RyaW5nKCksXG4gIGN1c3RvbWVyX2NvdW50cnk6IHouc3RyaW5nKCksXG4gIGxpbmVfaXRlbXM6IHouYXJyYXkoTGluZUl0ZW0pLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogei5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgU2V0dXBDaGVja291dFJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBsb2M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIG1zZzogei5zdHJpbmcoKSxcbiAgdXJsOiB6LnN0cmluZygpXG59KTtcbnouYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IpO1xuY29uc3QgU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgZmllbGRzOiBQUkZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kXG59KTtcbmNvbnN0IFN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBjY19wbV9pZDogei5zdHJpbmcoKVxufSk7XG56LnJlY29yZCh6LmFueSgpKTtcblxuY29uc3Qgc3VtID0gKGFycikgPT4ge1xuICByZXR1cm4gYXJyLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xufTtcblxuZnVuY3Rpb24gZml4UHJvdG8odGFyZ2V0LCBwcm90b3R5cGUpIHtcbiAgdmFyIHNldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBzZXRQcm90b3R5cGVPZiA/IHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG90eXBlKSA6IHRhcmdldC5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG59XG5mdW5jdGlvbiBmaXhTdGFjayh0YXJnZXQsIGZuKSB7XG4gIGlmIChmbiA9PT0gdm9pZCAwKSB7XG4gICAgZm4gPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgY2FwdHVyZVN0YWNrVHJhY2UgJiYgY2FwdHVyZVN0YWNrVHJhY2UodGFyZ2V0LCBmbik7XG59XG5cbnZhciBfX2V4dGVuZHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG5cbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG52YXIgQ3VzdG9tRXJyb3IgPSBmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyhDdXN0b21FcnJvciwgX3N1cGVyKTtcblxuICBmdW5jdGlvbiBDdXN0b21FcnJvcihtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgdmFyIF9uZXdUYXJnZXQgPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbWVzc2FnZSwgb3B0aW9ucykgfHwgdGhpcztcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ25hbWUnLCB7XG4gICAgICB2YWx1ZTogX25ld1RhcmdldC5uYW1lLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBmaXhQcm90byhfdGhpcywgX25ld1RhcmdldC5wcm90b3R5cGUpO1xuICAgIGZpeFN0YWNrKF90aGlzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICByZXR1cm4gQ3VzdG9tRXJyb3I7XG59KEVycm9yKTtcblxuY2xhc3MgQ2RlRXJyb3IgZXh0ZW5kcyBDdXN0b21FcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlc3BvbnNlKSB7XG4gICAgY29uc3QgZnJpZW5kbHlNZXNzYWdlID0gYFtjZGUtY2xpZW50XSBFcnJvciBxdWVyeWluZyBDREU6ICR7cmVzcG9uc2UubWVzc2FnZX1gO1xuICAgIHN1cGVyKGZyaWVuZGx5TWVzc2FnZSk7XG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICB9XG4gIGdldCBvcmlnaW5hbEVycm9yTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNwb25zZS5tZXNzYWdlO1xuICB9XG59XG5jb25zdCBxdWVyeUNERSA9IGFzeW5jIChjZGVDb25uLCBkYXRhLCByZXNwb25zZVNjaGVtYSkgPT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNkZUNvbm4uc2VuZChkYXRhKTtcbiAgaWYgKGlzQ0RFUmVzcG9uc2VFcnJvcihyZXNwb25zZSkpIHtcbiAgICB0aHJvdyBuZXcgQ2RlRXJyb3IocmVzcG9uc2UpO1xuICB9XG4gIGlmICghY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEocmVzcG9uc2UsIHJlc3BvbnNlU2NoZW1hKSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHJlc3BvbnNlU2NoZW1hLnNhZmVQYXJzZShyZXNwb25zZSk7XG4gICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlXCIpO1xuICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgfVxuICByZXR1cm4gcmVzcG9uc2U7XG59O1xuY29uc3QgY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEgPSAodmFsdWUsIHNjaGVtYSkgPT4ge1xuICByZXR1cm4gc2NoZW1hLnNhZmVQYXJzZSh2YWx1ZSkuc3VjY2Vzcztcbn07XG5jb25zdCBpc0NERVJlc3BvbnNlRXJyb3IgPSAocmVzcG9uc2UpID0+IHtcbiAgcmV0dXJuIENERVJlc3BvbnNlRXJyb3Iuc2FmZVBhcnNlKHJlc3BvbnNlKS5zdWNjZXNzO1xufTtcbmNvbnN0IGdldENoZWNrb3V0UHJldmlldyA9IGFzeW5jIChjZGVDb25uLCByZXF1ZXN0KSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiZ2V0X2NoZWNrb3V0X3ByZXZpZXdcIiwgcGF5bG9hZDogcmVxdWVzdCB9LCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSk7XG59O1xuY29uc3QgZ2V0UHJlZmlsbCA9IGFzeW5jIChjZGVDb25uKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiZ2V0X3ByZWZpbGxcIiwgcGF5bG9hZDoge30gfSwgUGF5bWVudEZvcm1QcmVmaWxsKTtcbn07XG5jb25zdCBzdGFydFBheW1lbnRGbG93Rm9yQ0MgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIiwgcGF5bG9hZCB9LCBTdGFydFBheW1lbnRGbG93Rm9yQ0NSZXNwb25zZSk7XG59O1xuY29uc3Qgc3RhcnRQYXltZW50Rmxvd0ZvclBSID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByXCIsIHBheWxvYWQgfSwgU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbn07XG5jb25zdCBjb25maXJtUGF5bWVudEZsb3cgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImNvbmZpcm1fcGF5bWVudF9mbG93XCIsIHBheWxvYWQgfSwgQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UpO1xufTtcbmNvbnN0IGdldENoZWNrb3V0VmFsdWUgPSBhc3luYyAoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIHByb21vQ29kZSkgPT4ge1xuICBjb25zdCBjaGVja291dFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXcoY2RlQ29ubiwge1xuICAgIHNlY3VyZV90b2tlbjogc2VjdXJlVG9rZW4sXG4gICAgcHJvbW90aW9uX2NvZGU6IHByb21vQ29kZVxuICB9KTtcbiAgY29uc3QgY3VycmVuY2llcyA9IG5ldyBTZXQoY2hlY2tvdXRQcmV2aWV3LnByZXZpZXcuaW52b2ljZXMubWFwKChpbnYpID0+IGludi5jdXJyZW5jeSkpO1xuICBpZiAoY3VycmVuY2llcy5zaXplICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBjdXJyZW5jeSwgZ290ICR7Y3VycmVuY2llcy5zaXplfWApO1xuICB9XG4gIGNvbnN0IGN1cnJlbmN5ID0gY3VycmVuY2llcy52YWx1ZXMoKS5uZXh0KCkudmFsdWUgPz8gXCJ1c2RcIjtcbiAgY29uc3QgYW1vdW50QXRvbSA9IHN1bShjaGVja291dFByZXZpZXcucHJldmlldy5pbnZvaWNlcy5tYXAoKGludikgPT4gaW52LnJlbWFpbmluZ19hbW91bnRfYXRvbSkpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5LFxuICAgIGFtb3VudEF0b21cbiAgfTtcbn07XG5jb25zdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQgPSBhc3luYyAoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIGlzU2V0dXBNb2RlLCBwcm9tb0NvZGUpID0+IHtcbiAgaWYgKGlzU2V0dXBNb2RlKSB7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBwcm9tb0NvZGUgPSAhcHJvbW9Db2RlID8gdm9pZCAwIDogcHJvbW9Db2RlO1xuICAgIGNvbnN0IGNoZWNrb3V0UHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0VmFsdWUoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIHByb21vQ29kZSk7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogY2hlY2tvdXRQcmV2aWV3LmFtb3VudEF0b20sIGN1cnJlbmN5OiBjaGVja291dFByZXZpZXcuY3VycmVuY3kgfTtcbiAgfVxufTtcbmNvbnN0IHRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMgPSBhc3luYyAoYWxsQ2RlQ29ubmVjdGlvbnMsIHBheWxvYWQpID0+IHtcbiAgaWYgKGFsbENkZUNvbm5lY3Rpb25zLnNpemUgPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBDREUgY29ubmVjdGlvbnMgZm91bmRcIik7XG4gIH1cbiAgY29uc3QgcmVzcG9uc2VzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgQXJyYXkuZnJvbShhbGxDZGVDb25uZWN0aW9ucy52YWx1ZXMoKSkubWFwKFxuICAgICAgKGNkZUNvbm4pID0+IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJ0b2tlbml6ZV9jYXJkXCIsIHBheWxvYWQgfSwgVG9rZW5pemVDYXJkUmVzcG9uc2UpXG4gICAgKVxuICApO1xuICByZXR1cm4gcmVzcG9uc2VzO1xufTtcbmNvbnN0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIiwgcGF5bG9hZCB9LCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5jb25zdCBzZXR1cENoZWNrb3V0ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJzZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkIH0sIFNldHVwQ2hlY2tvdXRSZXNwb25zZSk7XG59O1xuY29uc3QgcGVyZm9ybUNoZWNrb3V0ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJjaGVja291dFwiLCBwYXlsb2FkIH0sIENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKTtcbn07XG5jb25zdCBDREVfUE9MTElOR19JTlRFUlZBTCA9IDFlMztcbmNvbnN0IHBpbmdDZGVGb3IzZHNTdGF0dXMgPSBhc3luYyAoaWZyYW1lLCBjaGlsZE9yaWdpbikgPT4ge1xuICBjb25zdCBjb25uZWN0aW9uID0gY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZSxcbiAgICBkZWJ1ZzogdHJ1ZSxcbiAgICB0aW1lb3V0OiBDREVfUE9MTElOR19JTlRFUlZBTCxcbiAgICBjaGlsZE9yaWdpbjogXCIqXCJcbiAgICAvLyBUT0RPOiB1c2Ugd2l0aCBwcm9wZXIgY2hpbGRPcmlnaW5cbiAgfSk7XG4gIGNvbnN0IGNvbm5lY3Rpb25PYmogPSBhd2FpdCBjb25uZWN0aW9uLnByb21pc2U7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHF1ZXJ5Q0RFKGNvbm5lY3Rpb25PYmosIHsgdHlwZTogXCJwaW5nLTNkcy1zdGF0dXNcIiB9LCBQaW5nM0RTU3RhdHVzUmVzcG9uc2UpO1xuICByZXR1cm4gcmVzdWx0LnN0YXR1cztcbn07XG5cbmNvbnN0IHN0eWxlcyA9IFwiQGtleWZyYW1lcyBmYWRlSW57MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOSl9dG97b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX19Lm92ZXJsYXl7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ei1pbmRleDoyMTQ3NDgzNjQ4IWltcG9ydGFudDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojMDAwMDAwODB9LmNvbnRhaW5lcnttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6I2ZmZjtwb3NpdGlvbjpyZWxhdGl2ZTthbmltYXRpb246ZmFkZUluIC4zcyBlYXNlLW91dH0uZnJhbWV7bWF4LXdpZHRoOjUwMHB4O21heC1oZWlnaHQ6NjAwcHg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtib3JkZXI6bm9uZX0uY2FuY2VsLWJ1dHRvbntwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjpub25lO2ZvbnQtc2l6ZToxcmVtO2NvbG9yOiNmZmY7Y3Vyc29yOnBvaW50ZXI7dG9wOi0xLjVyZW07cGFkZGluZzowO3JpZ2h0OjB9XCI7XG5cbmNvbnN0IGNyZWF0ZUFuZE9wZW5GcmFtZSA9ICh1cmwpID0+IHtcbiAgY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gIHRlbXBsYXRlLmlubmVySFRNTCA9IGBcbiAgICA8c3R5bGU+XG4gICAgICAke3N0eWxlc31cbiAgICA8L3N0eWxlPlxuICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDxpZnJhbWUgc3JjPVwiJHt1cmx9XCIgY2xhc3M9XCJmcmFtZVwiIGlkPVwidGhyZWUtZHMtaWZyYW1lXCIgdGl0bGU9XCIzRCBTZWN1cmUgdmVyaWZpY2F0aW9uXCIgYWxsb3c9XCJwYXltZW50XCI+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgY29uc3QgaG9zdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGNvbnN0IHNoYWRvd1Jvb3QgPSBob3N0LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICBzaGFkb3dSb290LmFwcGVuZENoaWxkKHRlbXBsYXRlLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpKTtcbiAgY29uc3QgaWZyYW1lID0gc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwiI3RocmVlLWRzLWlmcmFtZVwiKTtcbiAgY29uc3QgY2FuY2VsQnV0dG9uID0gc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwiLmNhbmNlbC1idXR0b25cIik7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaG9zdCk7XG4gIHJldHVybiB7IGhvc3QsIGlmcmFtZSwgY2FuY2VsQnV0dG9uIH07XG59O1xuXG5mdW5jdGlvbiBzdGFydFBvbGxpbmcoaWZyYW1lLCBvblN1Y2Nlc3MsIGNoaWxkT3JpZ2luKSB7XG4gIGNvbnN0IGhhbmRsZVBvbGxpbmcgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHBpbmdDZGVGb3IzZHNTdGF0dXMoaWZyYW1lLCBjaGlsZE9yaWdpbik7XG4gICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZ0ludGVydmFsKTtcbiAgICAgICAgb25TdWNjZXNzKHN0YXR1cyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB9XG4gIH07XG4gIGhhbmRsZVBvbGxpbmcoKTtcbiAgY29uc3QgcG9sbGluZ0ludGVydmFsID0gc2V0SW50ZXJ2YWwoaGFuZGxlUG9sbGluZywgQ0RFX1BPTExJTkdfSU5URVJWQUwpO1xuICByZXR1cm4gcG9sbGluZ0ludGVydmFsO1xufVxuZnVuY3Rpb24gaGFuZGxlRXZlbnRzKHtcbiAgZWxlbWVudHMsXG4gIHBvbGxpbmdJbnRlcnZhbCxcbiAgcmVzb2x2ZVxufSkge1xuICBjb25zdCBoYW5kbGVDYW5jZWwgPSAoKSA9PiB7XG4gICAgY2xlYXJJbnRlcnZhbChwb2xsaW5nSW50ZXJ2YWwpO1xuICAgIGVsZW1lbnRzLmhvc3QucmVtb3ZlKCk7XG4gICAgcmVzb2x2ZShUaHJlZURTU3RhdHVzLkNBTkNFTExFRCk7XG4gIH07XG4gIGVsZW1lbnRzLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlQ2FuY2VsKTtcbiAgY29uc3QgY2xlYW51cEV2ZW50TGlzdGVuZXJzID0gKCkgPT4ge1xuICAgIGVsZW1lbnRzLmNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlQ2FuY2VsKTtcbiAgfTtcbiAgcmV0dXJuIGNsZWFudXBFdmVudExpc3RlbmVycztcbn1cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgdXJsLFxuICBiYXNlVXJsXG59KSB7XG4gIGNvbnN0IGVsZW1lbnRzID0gY3JlYXRlQW5kT3BlbkZyYW1lKHVybCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChzdGF0dXMpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgICAgfSwgMWUzKTtcbiAgICAgIHJlc29sdmUoc3RhdHVzKTtcbiAgICAgIGNsZWFudXBFdmVudExpc3RlbmVycz8uKCk7XG4gICAgfTtcbiAgICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzdGFydFBvbGxpbmcoZWxlbWVudHMuaWZyYW1lLCBvblN1Y2Nlc3MsIG5ldyBVUkwoYmFzZVVybCkub3JpZ2luKTtcbiAgICBjb25zdCBjbGVhbnVwRXZlbnRMaXN0ZW5lcnMgPSBoYW5kbGVFdmVudHMoe1xuICAgICAgZWxlbWVudHMsXG4gICAgICBwb2xsaW5nSW50ZXJ2YWwsXG4gICAgICByZXNvbHZlXG4gICAgfSk7XG4gIH0pO1xufVxuXG5jb25zdCBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyA9IChzaW1wbGVPanNGbG93KSA9PiB7XG4gIHJldHVybiBhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHBhcmFtcy5mbG93Q2FsbGJhY2tzLm9uQ2hlY2tvdXRTdGFydGVkKCk7XG4gICAgICBjb25zdCBmbG93UmVzdWx0ID0gYXdhaXQgc2ltcGxlT2pzRmxvdyhwYXJhbXMpO1xuICAgICAgaWYgKGZsb3dSZXN1bHQubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgIHBhcmFtcy5mbG93Q2FsbGJhY2tzLm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhmbG93UmVzdWx0LnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgICB9IGVsc2UgaWYgKGZsb3dSZXN1bHQubW9kZSA9PT0gXCJjaGVja291dFwiKSB7XG4gICAgICAgIHBhcmFtcy5mbG93Q2FsbGJhY2tzLm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0Lmludm9pY2VfdXJscyxcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5zdWJzY3JpcHRpb25faWRzLFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0LmN1c3RvbWVyX2lkXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBtb2RlOiAke2Zsb3dSZXN1bHR9YCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHBhcmFtcy5mbG93Q2FsbGJhY2tzLm9uQ2hlY2tvdXRFcnJvcihnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBhZGRFcnJvckNhdGNoZXJGb3JJbml0ID0gKGluaXQpID0+IHtcbiAgcmV0dXJuIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGluaXQocGFyYW1zKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJpbml0LWVycm9yLWNhdGNoZXJcIik7XG4gICAgICBlcnJfXyhlcnJvcik7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UsIHJlYXNvbjogZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSB9O1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBjcmVhdGVPanNGbG93TG9nZ2VycyA9IChwcmVmaXgpID0+IHtcbiAgY29uc3QgbG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmxvZyhgJHtjaGFsay5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgY29uc3QgZXJyID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmVycm9yKGAke2NoYWxrLnJlZC5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBsb2csXG4gICAgZXJyLFxuICAgIGxvZ19fOiBsb2csXG4gICAgZXJyX186IGVyclxuICB9O1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kMywgZXJyX186IGVycl9fJDQgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uLWNjXCIpO1xuY29uc3QgdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MgPSAobm9uQ2RlRm9ybUlucHV0cywgb25WYWxpZGF0aW9uRXJyb3IpID0+IHtcbiAgY29uc3QgcGF5bG9hZCA9IFJlcXVpcmVkRm9ybUZpZWxkcy5zYWZlUGFyc2Uobm9uQ2RlRm9ybUlucHV0cyk7XG4gIGlmICghcGF5bG9hZC5zdWNjZXNzKSB7XG4gICAgY29uc3QgZm9ybWF0dGVkID0gcGF5bG9hZC5lcnJvci5mb3JtYXQoKTtcbiAgICBjb25zdCBpc3N1ZXMgPSBleHRyYWN0SXNzdWVzUGVyRmllbGQoZm9ybWF0dGVkKTtcbiAgICBmb3IgKGNvbnN0IFtmaWVsZE5hbWUsIGVycm9yc10gb2YgT2JqZWN0LmVudHJpZXMoaXNzdWVzKSkge1xuICAgICAgb25WYWxpZGF0aW9uRXJyb3IoZmllbGROYW1lLCBlcnJvcnMsIGZpZWxkTmFtZSk7XG4gICAgfVxuICAgIGVycl9fJDQoYEdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzYCwgaXNzdWVzKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgfVxuICByZXR1cm4gcGF5bG9hZC5kYXRhO1xufTtcbmNvbnN0IHZhbGlkYXRlVG9rZW5pemVDYXJkUmVzdWx0cyA9ICh0b2tlbml6ZVJlc3VsdHMsIG9uVmFsaWRhdGlvbkVycm9yKSA9PiB7XG4gIGZvciAoY29uc3QgdG9rZW5pemVSZXN1bHQgb2YgdG9rZW5pemVSZXN1bHRzKSB7XG4gICAgaWYgKHRva2VuaXplUmVzdWx0LnN1Y2Nlc3MgPT09IGZhbHNlKSB7XG4gICAgICB0b2tlbml6ZVJlc3VsdC5lcnJvcnMuZm9yRWFjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gQWxsRmllbGROYW1lcy5zYWZlUGFyc2UoZXJyb3IuZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIXBhcnNlZC5zdWNjZXNzKSB7XG4gICAgICAgICAgZXJyX18kNChgVW5rbm93biBmaWVsZCBuYW1lIGluIG9uVmFsaWRhdGlvbkVycm9yOiAke2Vycm9yLmVsZW1lbnRUeXBlfWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IHBhcnNlZC5kYXRhO1xuICAgICAgICAgIG9uVmFsaWRhdGlvbkVycm9yKGZpZWxkTmFtZSwgZXJyb3IuZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsb2dfXyQzKGBFcnJvciB0b2tlbml6aW5nIGNhcmQ6IGdvdCB2YWxpZGF0aW9uIGVycm9yczogJHtKU09OLnN0cmluZ2lmeSh0b2tlbml6ZVJlc3VsdC5lcnJvcnMpfWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIHdoaWxlIHRva2VuaXppbmcgY2FyZFwiKTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IHsgZXJyX186IGVycl9fJDMgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW1vblwiKTtcbmNvbnN0IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHtyZXNwb25zZS5wYXltZW50X21ldGhvZHMubGVuZ3RofWApO1xuICB9XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiByZXNwb25zZS5wYXltZW50X21ldGhvZHNbMF0uaWQgfTtcbn07XG5jb25zdCBmaW5kQ3BtTWF0Y2hpbmdUeXBlID0gKGFsbENQTXMsIHpvZE1vZGVsKSA9PiB7XG4gIGNvbnN0IGNwbSA9IGFsbENQTXMuZmluZCgoY3BtMikgPT4gem9kTW9kZWwuc2FmZVBhcnNlKGNwbTIpLnN1Y2Nlc3MpO1xuICBpZiAoIWNwbSkge1xuICAgIGVycl9fJDMoYE5vIENQTXMgZm91bmQgZm9yIG1vZGVsICR7em9kTW9kZWx9YCk7XG4gICAgZXJyX18kMyhhbGxDUE1zKTtcbiAgICBlcnJfXyQzKGB6b2RNb2RlbGApO1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWwgJHt6b2RNb2RlbH1gKTtcbiAgfVxuICByZXR1cm4gem9kTW9kZWwucGFyc2UoY3BtKTtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDIsIGVycl9fOiBlcnJfXyQyIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vbi1jY1wiKTtcbmNvbnN0IHsgbG9nX186IHN0cmlwZUxvZ19fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1jY1wiKTtcbmNvbnN0IHJ1bkNvbW1vbkNjRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoeyBjb250ZXh0LCBjaGVja291dFBheW1lbnRNZXRob2QsIG5vbkNkZUZvcm1JbnB1dHMsIGZsb3dDYWxsYmFja3MgfSkgPT4ge1xuICAgIGxvZ19fJDIoYOKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uYCwgeyBjaGVja291dFBheW1lbnRNZXRob2QgfSk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IEFycmF5LmZyb20oY29udGV4dC5jZGVDb25uZWN0aW9ucy52YWx1ZXMoKSlbMF07XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbG9nX18kMihg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtwcmVmaWxsLm1vZGV9XWApO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmbG93Q2FsbGJhY2tzLm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBsb2dfXyQyKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2NvbnRleHQuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgIGNvbnN0IHRva2VuaXplQ2FyZFJlc3VsdHMgPSBhd2FpdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zKGNvbnRleHQuY2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgIHNlc3Npb25faWQ6IGNvbnRleHQuZWxlbWVudHNTZXNzaW9uSWRcbiAgICB9KTtcbiAgICB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHModG9rZW5pemVDYXJkUmVzdWx0cywgZmxvd0NhbGxiYWNrcy5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgY29uc3QgY29tbW9uQ2hlY2tvdXRQYXJhbXMgPSB7XG4gICAgICBzZXNzaW9uX2lkOiBjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IG5vbkNkZUZvcm1GaWVsZHNcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgbG9nX18kMihg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHtwcmVmaWxsLnRva2VufV1gKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2V0dXBDaGVja291dChhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgIGxvZ19fJDIoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtyZXN1bHQucGF5bWVudF9tZXRob2RfaWR9XWApO1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdCB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nX18kMihg4pScIEluaXRpYWwgY2hlY2tvdXQgZmxvdy4gQ2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7Y29udGV4dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzKGFueUNkZUNvbm5lY3Rpb24sIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgICAgICAgbG9nX18kMihg4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuYCk7XG4gICAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIENkZUVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5vcmlnaW5hbEVycm9yTWVzc2FnZSA9PT0gXCIzRFNfUkVRVUlSRURcIikge1xuICAgICAgICAgIGxvZ19fJDIoYOKUnCBDYXJkIHJlcXVpcmVzIDNEUywgc3RhcnRpbmcgbm9uLWxlZ2FjeSBwYXltZW50IGZsb3dgKTtcbiAgICAgICAgICBjb25zdCBzaG91bGRVc2VOZXdGbG93ID0gZXJyb3IucmVzcG9uc2UuaGVhZGVycz8uW1wib3Atc2hvdWxkLXVzZS1uZXctZmxvd1wiXSA9PT0gXCJ0cnVlXCI7XG4gICAgICAgICAgY29uc3Qgc3RhcnRQZlJlc3VsdCA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JDQyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgICAgbG9nX18kMihg4pScIG9wLXNob3VsZC11c2UtbmV3LWZsb3c6ICR7c2hvdWxkVXNlTmV3Rmxvd31gKTtcbiAgICAgICAgICBsb2dfXyQyKGDilJwgUGF5bWVudCBmbG93IHJlc3VsdDpgLCBzdGFydFBmUmVzdWx0KTtcbiAgICAgICAgICBpZiAoc2hvdWxkVXNlTmV3Rmxvdykge1xuICAgICAgICAgICAgYXdhaXQgY29tbW9uQ0MzRFNGbG93KHN0YXJ0UGZSZXN1bHQsIGNvbnRleHQuYmFzZVVybCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGF3YWl0IHN0cmlwZUNDM0RTRmxvdyhzdGFydFBmUmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgICAgICBsb2dfXyQyKGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke3N0YXJ0UGZSZXN1bHQuY2NfcG1faWR9XWApO1xuICAgICAgICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IHN0YXJ0UGZSZXN1bHQuY2NfcG1faWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbG9nX18kMihg4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6YCwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICAgICAgICBsb2dfXyQyKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Y3JlYXRlZFBheW1lbnRNZXRob2QucGF5bWVudF9tZXRob2RfaWR9XWApO1xuICAgICAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ19fJDIoYOKUnCBDaGVja2luZyBvdXQgYWZ0ZXIgM0RTIGZsb3cgW0Zsb3c6ICR7c2hvdWxkVXNlTmV3RmxvdyA/IFwibmV3XCIgOiBcImxlZ2FjeVwifV1gKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzKGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICAgICAgLi4uY29tbW9uQ2hlY2tvdXRQYXJhbXMsXG4gICAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBzdGFydFBmUmVzdWx0LmNjX3BtX2lkLFxuICAgICAgICAgICAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiAhc2hvdWxkVXNlTmV3Rmxvd1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsb2dfXyQyKGDilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5gKTtcbiAgICAgICAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlcnJfXyQyKGDilbAgRXJyb3IgY2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREVgKTtcbiAgICAgIGVycl9fJDIoZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4pO1xuY29uc3QgcGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgY29uc3Qgc3RyaXBlQWN0aW9uID0gcmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKTtcbiAgaWYgKCFzdHJpcGVBY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdHJpcGUgM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgfVxuICByZXR1cm4gU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKHN0cmlwZUFjdGlvbik7XG59O1xuY29uc3QgcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgY29uc3QgY29tbW9uQWN0aW9uID0gcmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiKTtcbiAgaWYgKCFjb21tb25BY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21tb24gM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgfVxuICByZXR1cm4gQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKGNvbW1vbkFjdGlvbik7XG59O1xuY29uc3QgY29tbW9uQ0MzRFNGbG93ID0gYXN5bmMgKHN0YXJ0UGZSZXN1bHQsIGJhc2VVcmwpID0+IHtcbiAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQZlJlc3VsdCk7XG4gIGxvZ19fJDIoYOKUnCBVc2luZyBjb21tb24gM0RTIGZsb3cgW1VSTDogJHtuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsfV1gKTtcbiAgY29uc3Qgc3RhdHVzID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oeyB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsIGJhc2VVcmwgfSk7XG4gIGxvZ19fJDIoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH1cbn07XG5jb25zdCBzdHJpcGVDQzNEU0Zsb3cgPSBhc3luYyAoc3RhcnRQZlJlc3VsdCkgPT4ge1xuICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YShzdGFydFBmUmVzdWx0KTtcbiAgc3RyaXBlTG9nX18oYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3cgW0NsaWVudCBTZWNyZXQ6ICR7bmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKTtcbiAgYXdhaXQgbGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyhuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICBzdHJpcGVMb2dfXyhcIuKVsCBTdHJpcGUgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDEsIGVycl9fOiBlcnJfXyQxIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1wclwiKTtcbmNvbnN0IFN0cmlwZVByQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei51bmlvbihbei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IGluaXRTdHJpcGVQckZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0IH0pID0+IHtcbiAgICBsb2dfXyQxKGBDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLmApO1xuICAgIGNvbnN0IGNoZWNrb3V0UGF5bWVudE1ldGhvZCA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBTdHJpcGVQckNwbSk7XG4gICAgbG9nX18kMShgSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IEFycmF5LmZyb20oY29udGV4dC5jZGVDb25uZWN0aW9ucy52YWx1ZXMoKSlbMF07XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBsb2dfXyQxKGBHZXR0aW5nIGluaXRpYWwgcHJldmlldyBhbW91bnRgKTtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBwciA9IGF3YWl0IGNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0KFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLnN0cmlwZV9wayxcbiAgICAgIGluaXRpYWxQcmV2aWV3LmFtb3VudEF0b20sXG4gICAgICBpbml0aWFsUHJldmlldy5jdXJyZW5jeSxcbiAgICAgIGlzU2V0dXBNb2RlXG4gICAgKTtcbiAgICBsb2dfXyQxKGBDaGVja2luZyBpZiBjYW4gbWFrZSBwYXltZW50YCk7XG4gICAgY29uc3QgY2FuTWFrZVBheW1lbnQgPSBhd2FpdCBwci5jYW5NYWtlUGF5bWVudCgpO1xuICAgIGlmIChjYW5NYWtlUGF5bWVudCA9PT0gbnVsbCkge1xuICAgICAgZXJyX18kMShgY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbGApO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH07XG4gICAgfVxuICAgIGxvZ19fJDEoYFN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudGAsIGNhbk1ha2VQYXltZW50KTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBwcixcbiAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczoge1xuICAgICAgICBhcHBsZVBheTogY2FuTWFrZVBheW1lbnQuYXBwbGVQYXksXG4gICAgICAgIGdvb2dsZVBheTogY2FuTWFrZVBheW1lbnQuZ29vZ2xlUGF5XG4gICAgICB9XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1blN0cmlwZVByRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZmxvd0NhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXMsXG4gICAgaW5pdFJlc3VsdFxuICB9KSA9PiB7XG4gICAgbG9nX18kMShgUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLmApO1xuICAgIGlmIChjdXN0b21QYXJhbXMucHJvdmlkZXIgIT09IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm92aWRlciBtaXNtYXRjaC4gRXhwZWN0ZWQgJHtjdXN0b21QYXJhbXMucHJvdmlkZXJ9LCBnb3QgJHtjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJ9YCk7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBBcnJheS5mcm9tKGNvbnRleHQuY2RlQ29ubmVjdGlvbnMudmFsdWVzKCkpWzBdO1xuICAgIGNvbnN0IHByID0gaW5pdFJlc3VsdC5wcjtcbiAgICBsb2dfXyQxKGBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNgKTtcbiAgICBjb25zdCBjbGVhbmVkRm9ybUlucHV0cyA9IG92ZXJyaWRlRW1wdHlaaXBDb2RlKG5vbkNkZUZvcm1JbnB1dHMpO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhjbGVhbmVkRm9ybUlucHV0cywgZmxvd0NhbGxiYWNrcy5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgaWYgKGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdCkge1xuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBjdXN0b21QYXJhbXMub3ZlcnJpZGVQYXltZW50UmVxdWVzdDtcbiAgICAgIGxvZ19fJDEoYE92ZXJyaWRpbmcgUFIgYW1vdW50IHdpdGhgLCBvdmVycmlkZSk7XG4gICAgICB1cGRhdGVQcldpdGhBbW91bnQocHIsIG92ZXJyaWRlLmFtb3VudCwgb3ZlcnJpZGUucGVuZGluZyk7XG4gICAgfVxuICAgIGxvZ19fJDEoYFNob3dpbmcgUFIgZGlhbG9nLi4uYCk7XG4gICAgcHIuc2hvdygpO1xuICAgIGNvbnN0IHN0cmlwZVBtQWRkZWRFdmVudCA9IGF3YWl0IHdhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kKHByKTtcbiAgICBsb2dfXyQxKGBQUiBkaWFsb2cgZmluaXNoZWQuIFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLmApO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JQUihhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBmaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2RcbiAgICB9KTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgbG9nX18kMShgQ29uZmlybWluZyBQUiB3aXRoIFN0cmlwZS4uLmApO1xuICAgIGF3YWl0IGNvbmZpcm1TdHJpcGVQclBNKG5leHRBY3Rpb25NZXRhZGF0YSwgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIGxvZ19fJDEoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IGZvciBzZXR1cC4uLmApO1xuICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlblxuICAgICAgfSk7XG4gICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogY3JlYXRlZFBheW1lbnRNZXRob2QgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nX18kMShgUGVyZm9ybWluZyBjaGVja291dC4uLmApO1xuICAgICAgY29uc3QgY2hlY2tvdXRSZXF1ZXN0ID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSxcbiAgICAgICAgY3VzdG9tZXJfY291bnRyeTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6IGZhbHNlLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGVyZm9ybUNoZWNrb3V0KGFueUNkZUNvbm5lY3Rpb24sIGNoZWNrb3V0UmVxdWVzdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgIH1cbiAgfVxuKTtcbmNvbnN0IG92ZXJyaWRlRW1wdHlaaXBDb2RlID0gKGZvcm1JbnB1dHMpID0+IHtcbiAgY29uc3QgbmV3Rm9ybUlucHV0cyA9IHsgLi4uZm9ybUlucHV0cyB9O1xuICBpZiAoIW5ld0Zvcm1JbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSkge1xuICAgIGxvZ19fJDEoYE92ZXJyaWRpbmcgZW1wdHkgemlwIGNvZGUgKG9ubHkgZm9yIGdvb2dsZSBwYXkgYW5kIGFwcGxlIHBheSlgKTtcbiAgICBuZXdGb3JtSW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBcIjAwMDAwXCI7XG4gIH1cbiAgcmV0dXJuIG5ld0Zvcm1JbnB1dHM7XG59O1xuY29uc3QgdXBkYXRlUHJXaXRoQW1vdW50ID0gKHByLCBhbW91bnQsIGlzUGVuZGluZykgPT4ge1xuICBwci51cGRhdGUoe1xuICAgIHRvdGFsOiB7XG4gICAgICBhbW91bnQ6IGFtb3VudC5hbW91bnRBdG9tLFxuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIHBlbmRpbmc6IGlzUGVuZGluZ1xuICAgIH0sXG4gICAgY3VycmVuY3k6IGFtb3VudC5jdXJyZW5jeVxuICB9KTtcbn07XG5jb25zdCBwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhID0gKHJlc3BvbnNlKSA9PiB7XG4gIGlmIChyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cnJlZC5cbkRldGFpbHM6IGdvdCAke3Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGh9IHJlcXVpcmVkIHVzZXIgYWN0aW9uc2ApO1xuICB9XG4gIHJldHVybiBQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xufTtcblxuY29uc3QgZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdCA9IChjcG1zLCB3aXRoUHJvdmlkZXIsIHdpdGhQcm9jZXNzb3IpID0+IHtcbiAgY29uc3QgbWF0Y2hlcyA9IGNwbXMuZmlsdGVyKChjcG0pID0+IHtcbiAgICBjb25zdCBtYXRjaGVzUHJvY2Vzc29yID0gdHJ1ZSA7XG4gICAgY29uc3QgbWF0Y2hlc1Byb3ZpZGVyID0gY3BtLnByb3ZpZGVyID09PSB3aXRoUHJvdmlkZXI7XG4gICAgcmV0dXJuIG1hdGNoZXNQcm9jZXNzb3IgJiYgbWF0Y2hlc1Byb3ZpZGVyO1xuICB9KTtcbiAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBDUE1zIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7d2l0aFByb3ZpZGVyfScgYW5kIHByb2Nlc3NvciAnJHt3aXRoUHJvY2Vzc29yfSdgKTtcbiAgfVxuICBpZiAobWF0Y2hlcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1vcmUgdGhhbiBvbmUgQ1BNIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7d2l0aFByb3ZpZGVyfScgYW5kIHByb2Nlc3NvciAnJHt3aXRoUHJvY2Vzc29yfSdgKTtcbiAgfVxuICByZXR1cm4gbWF0Y2hlc1swXTtcbn07XG5jb25zdCBPanNGbG93cyA9IHtcbiAgLy8g4pyLIE5vdGU6IEZvciBmbG93cyB0aGF0IHJlcXVpcmUgaW5pdGlhbGl6YXRpb24sIHBsZWFzZSBhZGQgdGhlbSB0byBgaW5pdC1mbG93cy50c2BcbiAgLy8gU3RyaXBlXG4gIGNvbW1vbkNDOiB7XG4gICAgcnVuOiBydW5Db21tb25DY0Zsb3dcbiAgfSxcbiAgc3RyaXBlUFI6IHtcbiAgICBpbml0OiBpbml0U3RyaXBlUHJGbG93LFxuICAgIHJ1bjogcnVuU3RyaXBlUHJGbG93XG4gIH1cbiAgLy8g8J+RiSBBZGQgbW9yZSBmbG93cyBoZXJlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59O1xuXG5mdW5jdGlvbiBnZXREZWZhdWx0RXhwb3J0RnJvbUNqcyAoeCkge1xuXHRyZXR1cm4geCAmJiB4Ll9fZXNNb2R1bGUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsICdkZWZhdWx0JykgPyB4WydkZWZhdWx0J10gOiB4O1xufVxuXG52YXIgT2JzZXJ2YWJsZSQyID0ge307XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYnNlcnZhYmxlJDIsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9ic2VydmFibGUkMi5PYnNlcnZhYmxlID0gdm9pZCAwO1xuXG4vLyA9PT0gU3ltYm9sIFN1cHBvcnQgPT09XG5jb25zdCBoYXNTeW1ib2wgPSBuYW1lID0+IEJvb2xlYW4oU3ltYm9sW25hbWVdKTtcblxuY29uc3QgZ2V0U3ltYm9sID0gbmFtZSA9PiBoYXNTeW1ib2wobmFtZSkgPyBTeW1ib2xbbmFtZV0gOiAnQEAnICsgbmFtZTtcblxuY29uc3QgU3ltYm9sSXRlcmF0b3IgPSBnZXRTeW1ib2woJ2l0ZXJhdG9yJyk7XG5jb25zdCBTeW1ib2xPYnNlcnZhYmxlID0gZ2V0U3ltYm9sKCdvYnNlcnZhYmxlJyk7XG5jb25zdCBTeW1ib2xTcGVjaWVzID0gZ2V0U3ltYm9sKCdzcGVjaWVzJyk7IC8vID09PSBBYnN0cmFjdCBPcGVyYXRpb25zID09PVxuXG5mdW5jdGlvbiBnZXRNZXRob2Qob2JqLCBrZXkpIHtcbiAgbGV0IHZhbHVlID0gb2JqW2tleV07XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKHZhbHVlICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGdldFNwZWNpZXMob2JqKSB7XG4gIGxldCBjdG9yID0gb2JqLmNvbnN0cnVjdG9yO1xuXG4gIGlmIChjdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICBjdG9yID0gY3RvcltTeW1ib2xTcGVjaWVzXTtcblxuICAgIGlmIChjdG9yID09PSBudWxsKSB7XG4gICAgICBjdG9yID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjdG9yICE9PSB1bmRlZmluZWQgPyBjdG9yIDogT2JzZXJ2YWJsZSQxO1xufVxuXG5mdW5jdGlvbiBpc09ic2VydmFibGUoeCkge1xuICByZXR1cm4geCBpbnN0YW5jZW9mIE9ic2VydmFibGUkMTsgLy8gU1BFQzogQnJhbmQgY2hlY2tcbn1cblxuZnVuY3Rpb24gaG9zdFJlcG9ydEVycm9yKGUpIHtcbiAgaWYgKGhvc3RSZXBvcnRFcnJvci5sb2cpIHtcbiAgICBob3N0UmVwb3J0RXJyb3IubG9nKGUpO1xuICB9IGVsc2Uge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhyb3cgZTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbnF1ZXVlKGZuKSB7XG4gIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBmbigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGhvc3RSZXBvcnRFcnJvcihlKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbikge1xuICBsZXQgY2xlYW51cCA9IHN1YnNjcmlwdGlvbi5fY2xlYW51cDtcbiAgaWYgKGNsZWFudXAgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICBzdWJzY3JpcHRpb24uX2NsZWFudXAgPSB1bmRlZmluZWQ7XG5cbiAgaWYgKCFjbGVhbnVwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIGNsZWFudXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNsZWFudXAoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHVuc3Vic2NyaWJlID0gZ2V0TWV0aG9kKGNsZWFudXAsICd1bnN1YnNjcmliZScpO1xuXG4gICAgICBpZiAodW5zdWJzY3JpYmUpIHtcbiAgICAgICAgdW5zdWJzY3JpYmUuY2FsbChjbGVhbnVwKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBob3N0UmVwb3J0RXJyb3IoZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKSB7XG4gIHN1YnNjcmlwdGlvbi5fb2JzZXJ2ZXIgPSB1bmRlZmluZWQ7XG4gIHN1YnNjcmlwdGlvbi5fcXVldWUgPSB1bmRlZmluZWQ7XG4gIHN1YnNjcmlwdGlvbi5fc3RhdGUgPSAnY2xvc2VkJztcbn1cblxuZnVuY3Rpb24gZmx1c2hTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKSB7XG4gIGxldCBxdWV1ZSA9IHN1YnNjcmlwdGlvbi5fcXVldWU7XG5cbiAgaWYgKCFxdWV1ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN1YnNjcmlwdGlvbi5fcXVldWUgPSB1bmRlZmluZWQ7XG4gIHN1YnNjcmlwdGlvbi5fc3RhdGUgPSAncmVhZHknO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyArK2kpIHtcbiAgICBub3RpZnlTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uLCBxdWV1ZVtpXS50eXBlLCBxdWV1ZVtpXS52YWx1ZSk7XG4gICAgaWYgKHN1YnNjcmlwdGlvbi5fc3RhdGUgPT09ICdjbG9zZWQnKSBicmVhaztcbiAgfVxufVxuXG5mdW5jdGlvbiBub3RpZnlTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uLCB0eXBlLCB2YWx1ZSkge1xuICBzdWJzY3JpcHRpb24uX3N0YXRlID0gJ3J1bm5pbmcnO1xuICBsZXQgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX29ic2VydmVyO1xuXG4gIHRyeSB7XG4gICAgbGV0IG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIsIHR5cGUpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICduZXh0JzpcbiAgICAgICAgaWYgKG0pIG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICBjbG9zZVN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgICBpZiAobSkgbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7ZWxzZSB0aHJvdyB2YWx1ZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2NvbXBsZXRlJzpcbiAgICAgICAgY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgaWYgKG0pIG0uY2FsbChvYnNlcnZlcik7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGhvc3RSZXBvcnRFcnJvcihlKTtcbiAgfVxuXG4gIGlmIChzdWJzY3JpcHRpb24uX3N0YXRlID09PSAnY2xvc2VkJykgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO2Vsc2UgaWYgKHN1YnNjcmlwdGlvbi5fc3RhdGUgPT09ICdydW5uaW5nJykgc3Vic2NyaXB0aW9uLl9zdGF0ZSA9ICdyZWFkeSc7XG59XG5cbmZ1bmN0aW9uIG9uTm90aWZ5KHN1YnNjcmlwdGlvbiwgdHlwZSwgdmFsdWUpIHtcbiAgaWYgKHN1YnNjcmlwdGlvbi5fc3RhdGUgPT09ICdjbG9zZWQnKSByZXR1cm47XG5cbiAgaWYgKHN1YnNjcmlwdGlvbi5fc3RhdGUgPT09ICdidWZmZXJpbmcnKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9xdWV1ZS5wdXNoKHtcbiAgICAgIHR5cGUsXG4gICAgICB2YWx1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHN1YnNjcmlwdGlvbi5fc3RhdGUgIT09ICdyZWFkeScpIHtcbiAgICBzdWJzY3JpcHRpb24uX3N0YXRlID0gJ2J1ZmZlcmluZyc7XG4gICAgc3Vic2NyaXB0aW9uLl9xdWV1ZSA9IFt7XG4gICAgICB0eXBlLFxuICAgICAgdmFsdWVcbiAgICB9XTtcbiAgICBlbnF1ZXVlKCgpID0+IGZsdXNoU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbikpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIG5vdGlmeVN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24sIHR5cGUsIHZhbHVlKTtcbn1cblxuY2xhc3MgU3Vic2NyaXB0aW9uIHtcbiAgY29uc3RydWN0b3Iob2JzZXJ2ZXIsIHN1YnNjcmliZXIpIHtcbiAgICAvLyBBU1NFUlQ6IG9ic2VydmVyIGlzIGFuIG9iamVjdFxuICAgIC8vIEFTU0VSVDogc3Vic2NyaWJlciBpcyBjYWxsYWJsZVxuICAgIHRoaXMuX2NsZWFudXAgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fb2JzZXJ2ZXIgPSBvYnNlcnZlcjtcbiAgICB0aGlzLl9xdWV1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9zdGF0ZSA9ICdpbml0aWFsaXppbmcnO1xuICAgIGxldCBzZWxmID0gdGhpcztcbiAgICBsZXQgc3Vic2NyaXB0aW9uT2JzZXJ2ZXIgPSB7XG4gICAgICBnZXQgY2xvc2VkKCkge1xuICAgICAgICByZXR1cm4gc2VsZi5fc3RhdGUgPT09ICdjbG9zZWQnO1xuICAgICAgfSxcblxuICAgICAgbmV4dCh2YWx1ZSkge1xuICAgICAgICBvbk5vdGlmeShzZWxmLCAnbmV4dCcsIHZhbHVlKTtcbiAgICAgIH0sXG5cbiAgICAgIGVycm9yKHZhbHVlKSB7XG4gICAgICAgIG9uTm90aWZ5KHNlbGYsICdlcnJvcicsIHZhbHVlKTtcbiAgICAgIH0sXG5cbiAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICBvbk5vdGlmeShzZWxmLCAnY29tcGxldGUnKTtcbiAgICAgIH1cblxuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5fY2xlYW51cCA9IHN1YnNjcmliZXIuY2FsbCh1bmRlZmluZWQsIHN1YnNjcmlwdGlvbk9ic2VydmVyKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBzdWJzY3JpcHRpb25PYnNlcnZlci5lcnJvcihlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RhdGUgPT09ICdpbml0aWFsaXppbmcnKSB0aGlzLl9zdGF0ZSA9ICdyZWFkeSc7XG4gIH1cblxuICBnZXQgY2xvc2VkKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSA9PT0gJ2Nsb3NlZCc7XG4gIH1cblxuICB1bnN1YnNjcmliZSgpIHtcbiAgICBpZiAodGhpcy5fc3RhdGUgIT09ICdjbG9zZWQnKSB7XG4gICAgICBjbG9zZVN1YnNjcmlwdGlvbih0aGlzKTtcbiAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24odGhpcyk7XG4gICAgfVxuICB9XG5cbn1cblxubGV0IE9ic2VydmFibGUkMSA9IGNsYXNzIE9ic2VydmFibGUge1xuICBjb25zdHJ1Y3RvcihzdWJzY3JpYmVyKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE9ic2VydmFibGUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdPYnNlcnZhYmxlIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbicpO1xuICAgIGlmICh0eXBlb2Ygc3Vic2NyaWJlciAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcignT2JzZXJ2YWJsZSBpbml0aWFsaXplciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICB0aGlzLl9zdWJzY3JpYmVyID0gc3Vic2NyaWJlcjtcbiAgfVxuXG4gIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgIGlmICh0eXBlb2Ygb2JzZXJ2ZXIgIT09ICdvYmplY3QnIHx8IG9ic2VydmVyID09PSBudWxsKSB7XG4gICAgICBvYnNlcnZlciA9IHtcbiAgICAgICAgbmV4dDogb2JzZXJ2ZXIsXG4gICAgICAgIGVycm9yOiBhcmd1bWVudHNbMV0sXG4gICAgICAgIGNvbXBsZXRlOiBhcmd1bWVudHNbMl1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24ob2JzZXJ2ZXIsIHRoaXMuX3N1YnNjcmliZXIpO1xuICB9XG5cbiAgZm9yRWFjaChmbikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKGZuICsgJyBpcyBub3QgYSBmdW5jdGlvbicpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfVxuXG4gICAgICBsZXQgc3Vic2NyaXB0aW9uID0gdGhpcy5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0KHZhbHVlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZuKHZhbHVlLCBkb25lKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgY29tcGxldGU6IHJlc29sdmVcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbWFwKGZuKSB7XG4gICAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcihmbiArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICBsZXQgQyA9IGdldFNwZWNpZXModGhpcyk7XG4gICAgcmV0dXJuIG5ldyBDKG9ic2VydmVyID0+IHRoaXMuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQodmFsdWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YWx1ZSA9IGZuKHZhbHVlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHJldHVybiBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgfSxcblxuICAgICAgZXJyb3IoZSkge1xuICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgIH0sXG5cbiAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgfVxuXG4gICAgfSkpO1xuICB9XG5cbiAgZmlsdGVyKGZuKSB7XG4gICAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcihmbiArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICBsZXQgQyA9IGdldFNwZWNpZXModGhpcyk7XG4gICAgcmV0dXJuIG5ldyBDKG9ic2VydmVyID0+IHRoaXMuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQodmFsdWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoIWZuKHZhbHVlKSkgcmV0dXJuO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmV0dXJuIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgb2JzZXJ2ZXIubmV4dCh2YWx1ZSk7XG4gICAgICB9LFxuXG4gICAgICBlcnJvcihlKSB7XG4gICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgfSxcblxuICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICB9XG5cbiAgICB9KSk7XG4gIH1cblxuICByZWR1Y2UoZm4pIHtcbiAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKGZuICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgIGxldCBDID0gZ2V0U3BlY2llcyh0aGlzKTtcbiAgICBsZXQgaGFzU2VlZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxO1xuICAgIGxldCBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgIGxldCBzZWVkID0gYXJndW1lbnRzWzFdO1xuICAgIGxldCBhY2MgPSBzZWVkO1xuICAgIHJldHVybiBuZXcgQyhvYnNlcnZlciA9PiB0aGlzLnN1YnNjcmliZSh7XG4gICAgICBuZXh0KHZhbHVlKSB7XG4gICAgICAgIGxldCBmaXJzdCA9ICFoYXNWYWx1ZTtcbiAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xuXG4gICAgICAgIGlmICghZmlyc3QgfHwgaGFzU2VlZCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhY2MgPSBmbihhY2MsIHZhbHVlKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFjYyA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBlcnJvcihlKSB7XG4gICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgfSxcblxuICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgIGlmICghaGFzVmFsdWUgJiYgIWhhc1NlZWQpIHJldHVybiBvYnNlcnZlci5lcnJvcihuZXcgVHlwZUVycm9yKCdDYW5ub3QgcmVkdWNlIGFuIGVtcHR5IHNlcXVlbmNlJykpO1xuICAgICAgICBvYnNlcnZlci5uZXh0KGFjYyk7XG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICB9XG5cbiAgICB9KSk7XG4gIH1cblxuICBhc3luYyBhbGwoKSB7XG4gICAgbGV0IHZhbHVlcyA9IFtdO1xuICAgIGF3YWl0IHRoaXMuZm9yRWFjaCh2YWx1ZSA9PiB2YWx1ZXMucHVzaCh2YWx1ZSkpO1xuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cblxuICBjb25jYXQoLi4uc291cmNlcykge1xuICAgIGxldCBDID0gZ2V0U3BlY2llcyh0aGlzKTtcbiAgICByZXR1cm4gbmV3IEMob2JzZXJ2ZXIgPT4ge1xuICAgICAgbGV0IHN1YnNjcmlwdGlvbjtcbiAgICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICAgIGZ1bmN0aW9uIHN0YXJ0TmV4dChuZXh0KSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbiA9IG5leHQuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0KHYpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQodik7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGVycm9yKGUpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gc291cmNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RhcnROZXh0KEMuZnJvbShzb3VyY2VzW2luZGV4KytdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBzdGFydE5leHQodGhpcyk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBpZiAoc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgZmxhdE1hcChmbikge1xuICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBUeXBlRXJyb3IoZm4gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgbGV0IEMgPSBnZXRTcGVjaWVzKHRoaXMpO1xuICAgIHJldHVybiBuZXcgQyhvYnNlcnZlciA9PiB7XG4gICAgICBsZXQgc3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgICAgbGV0IG91dGVyID0gdGhpcy5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0KHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGZuKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB2YWx1ZSA9IGZuKHZhbHVlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBpbm5lciA9IEMuZnJvbSh2YWx1ZSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQodmFsdWUpIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBlcnJvcihlKSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgICAgICAgIGxldCBpID0gc3Vic2NyaXB0aW9ucy5pbmRleE9mKGlubmVyKTtcbiAgICAgICAgICAgICAgaWYgKGkgPj0gMCkgc3Vic2NyaXB0aW9ucy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgIGNvbXBsZXRlSWZEb25lKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzdWJzY3JpcHRpb25zLnB1c2goaW5uZXIpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGVycm9yKGUpIHtcbiAgICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgICBjb21wbGV0ZUlmRG9uZSgpO1xuICAgICAgICB9XG5cbiAgICAgIH0pO1xuXG4gICAgICBmdW5jdGlvbiBjb21wbGV0ZUlmRG9uZSgpIHtcbiAgICAgICAgaWYgKG91dGVyLmNsb3NlZCAmJiBzdWJzY3JpcHRpb25zLmxlbmd0aCA9PT0gMCkgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgb3V0ZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBbU3ltYm9sT2JzZXJ2YWJsZV0oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdGF0aWMgZnJvbSh4KSB7XG4gICAgbGV0IEMgPSB0eXBlb2YgdGhpcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBPYnNlcnZhYmxlO1xuICAgIGlmICh4ID09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoeCArICcgaXMgbm90IGFuIG9iamVjdCcpO1xuICAgIGxldCBtZXRob2QgPSBnZXRNZXRob2QoeCwgU3ltYm9sT2JzZXJ2YWJsZSk7XG5cbiAgICBpZiAobWV0aG9kKSB7XG4gICAgICBsZXQgb2JzZXJ2YWJsZSA9IG1ldGhvZC5jYWxsKHgpO1xuICAgICAgaWYgKE9iamVjdChvYnNlcnZhYmxlKSAhPT0gb2JzZXJ2YWJsZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihvYnNlcnZhYmxlICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gICAgICBpZiAoaXNPYnNlcnZhYmxlKG9ic2VydmFibGUpICYmIG9ic2VydmFibGUuY29uc3RydWN0b3IgPT09IEMpIHJldHVybiBvYnNlcnZhYmxlO1xuICAgICAgcmV0dXJuIG5ldyBDKG9ic2VydmVyID0+IG9ic2VydmFibGUuc3Vic2NyaWJlKG9ic2VydmVyKSk7XG4gICAgfVxuXG4gICAgaWYgKGhhc1N5bWJvbCgnaXRlcmF0b3InKSkge1xuICAgICAgbWV0aG9kID0gZ2V0TWV0aG9kKHgsIFN5bWJvbEl0ZXJhdG9yKTtcblxuICAgICAgaWYgKG1ldGhvZCkge1xuICAgICAgICByZXR1cm4gbmV3IEMob2JzZXJ2ZXIgPT4ge1xuICAgICAgICAgIGVucXVldWUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKG9ic2VydmVyLmNsb3NlZCkgcmV0dXJuO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIG1ldGhvZC5jYWxsKHgpKSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXRlbSk7XG4gICAgICAgICAgICAgIGlmIChvYnNlcnZlci5jbG9zZWQpIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoeCkpIHtcbiAgICAgIHJldHVybiBuZXcgQyhvYnNlcnZlciA9PiB7XG4gICAgICAgIGVucXVldWUoKCkgPT4ge1xuICAgICAgICAgIGlmIChvYnNlcnZlci5jbG9zZWQpIHJldHVybjtcblxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeC5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh4W2ldKTtcbiAgICAgICAgICAgIGlmIChvYnNlcnZlci5jbG9zZWQpIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoeCArICcgaXMgbm90IG9ic2VydmFibGUnKTtcbiAgfVxuXG4gIHN0YXRpYyBvZiguLi5pdGVtcykge1xuICAgIGxldCBDID0gdHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogT2JzZXJ2YWJsZTtcbiAgICByZXR1cm4gbmV3IEMob2JzZXJ2ZXIgPT4ge1xuICAgICAgZW5xdWV1ZSgoKSA9PiB7XG4gICAgICAgIGlmIChvYnNlcnZlci5jbG9zZWQpIHJldHVybjtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIubmV4dChpdGVtc1tpXSk7XG4gICAgICAgICAgaWYgKG9ic2VydmVyLmNsb3NlZCkgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGdldCBbU3ltYm9sU3BlY2llc10oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxufTtcblxuT2JzZXJ2YWJsZSQyLk9ic2VydmFibGUgPSBPYnNlcnZhYmxlJDE7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoT2JzZXJ2YWJsZSQxLCBTeW1ib2woJ2V4dGVuc2lvbnMnKSwge1xuICB2YWx1ZToge1xuICAgIHN5bWJvbDogU3ltYm9sT2JzZXJ2YWJsZSxcbiAgICBob3N0UmVwb3J0RXJyb3JcbiAgfSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxudmFyIHplbk9ic2VydmFibGUgPSBPYnNlcnZhYmxlJDIuT2JzZXJ2YWJsZTtcblxuY29uc3QgT2JzZXJ2YWJsZSA9IC8qQF9fUFVSRV9fKi9nZXREZWZhdWx0RXhwb3J0RnJvbUNqcyh6ZW5PYnNlcnZhYmxlKTtcblxuY29uc3QgeyBsb2dfXywgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiaW5pdC1mbG93c1wiKTtcbmNvbnN0IGluaXRpYWxpemVPanNGbG93cyA9IChjb250ZXh0KSA9PiB7XG4gIHJldHVybiB7XG4gICAgLy8gU3RyaXBlIFBSXG4gICAgc3RyaXBlUFI6IHJ1bkluaXRGbG93QXNPYnNlcnZhYmxlKFwic3RyaXBlUFJcIiwgT2pzRmxvd3Muc3RyaXBlUFIuaW5pdCh7IGNvbnRleHQgfSkpXG4gICAgLy8g8J+RiSBBZGQgaW5pdGlhbGl6YXRpb24gZmxvd3MgaGVyZVxuICB9O1xufTtcbmNvbnN0IHJ1bkluaXRGbG93QXNPYnNlcnZhYmxlID0gKGZsb3dOYW1lLCBpbml0RmxvdykgPT4ge1xuICBjb25zdCBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XG4gICAgb2JzZXJ2ZXIubmV4dCh7IHN0YXR1czogXCJsb2FkaW5nXCIgfSk7XG4gICAgaW5pdEZsb3cudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICBvYnNlcnZlci5uZXh0KHsgc3RhdHVzOiBcImxvYWRlZFwiLCByZXN1bHQgfSk7XG4gICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICBvYnNlcnZlci5uZXh0KHsgc3RhdHVzOiBcImVycm9yXCIsIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgfSk7XG4gIH0pO1xuICBvYnNlcnZhYmxlLnN1YnNjcmliZSh7XG4gICAgbmV4dDogKHJlc3VsdCkgPT4ge1xuICAgICAgbG9nX18oYCR7Zmxvd05hbWV9IGZsb3cgcmVzdWx0YCwgcmVzdWx0KTtcbiAgICB9LFxuICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgIGVycl9fKGAke2Zsb3dOYW1lfSBmbG93IGluaXRpYWxpemF0aW9uIGVycm9yOlxuJHtKU09OLnN0cmluZ2lmeShlcnJvcil9YCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb2JzZXJ2YWJsZTtcbn07XG5cbmNvbnN0IFBSX0xPQURJTkcgPSB7XG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgfVxufTtcbmNvbnN0IFBSX0VSUk9SID0ge1xuICBpc0xvYWRpbmc6IGZhbHNlLFxuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICB9XG59O1xuXG5jbGFzcyBPcGVuUGF5Rm9ybUV2ZW50SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yKGZvcm1JbnN0YW5jZSkge1xuICAgIHRoaXMuZm9ybUluc3RhbmNlID0gZm9ybUluc3RhbmNlO1xuICAgIHRoaXMuY29uZmlnID0gZm9ybUluc3RhbmNlLmNvbmZpZztcbiAgICB0aGlzLmZvcm1JZCA9IGZvcm1JbnN0YW5jZS5mb3JtSWQ7XG4gICAgdGhpcy5ldmVudFRhcmdldHMgPSB7fTtcbiAgICB0aGlzLm5vbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gIH1cbiAgaGFuZGxlTWVzc2FnZShldmVudCkge1xuICAgIGlmICghZXZlbnQuc291cmNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHNvdXJjZSBmb3VuZGApO1xuICAgIH1cbiAgICBpZiAoZXZlbnQub3JpZ2luICE9PSB0aGlzLmZvcm1JbnN0YW5jZS5jb25maWcuX2ZyYW1lVXJsPy5vcmlnaW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBldmVudC5kYXRhID09PSBcIm9iamVjdFwiICYmIGV2ZW50LmRhdGFbXCJwZW5wYWxcIl0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZXZlbnREYXRhID0gcGFyc2VFdmVudFBheWxvYWQoSlNPTi5wYXJzZShldmVudC5kYXRhKSk7XG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMudmFsaWRhdGVFdmVudChldmVudERhdGEpO1xuICAgIGlmICghaXNWYWxpZCkgcmV0dXJuO1xuICAgIGNvbnN0IHsgZWxlbWVudElkLCBwYXlsb2FkIH0gPSBldmVudERhdGE7XG4gICAgY29uc3QgZXZlbnRUeXBlID0gcGF5bG9hZC50eXBlO1xuICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XG4gICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgIHRoaXMuaGFuZGxlTGF5b3V0RXZlbnQocGF5bG9hZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIkZPQ1VTXCI6XG4gICAgICAgIHRoaXMuaGFuZGxlRm9jdXNFdmVudChlbGVtZW50SWQsIHBheWxvYWQuZWxlbWVudFR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJCTFVSXCI6XG4gICAgICAgIHRoaXMuaGFuZGxlQmx1ckV2ZW50KGVsZW1lbnRJZCwgcGF5bG9hZC5lbGVtZW50VHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIkNIQU5HRVwiOlxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZUV2ZW50KGVsZW1lbnRJZCwgcGF5bG9hZC5lbGVtZW50VHlwZSwgcGF5bG9hZC5lcnJvcnMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJMT0FERURcIjpcbiAgICAgICAgdGhpcy5oYW5kbGVMb2FkZWRFdmVudChldmVudC5zb3VyY2UsIGVsZW1lbnRJZCwgcGF5bG9hZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIkxPQURfRVJST1JcIjpcbiAgICAgICAgdGhpcy5oYW5kbGVMb2FkRXJyb3JFdmVudChwYXlsb2FkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiVkFMSURBVElPTl9FUlJPUlwiOlxuICAgICAgICB0aGlzLmhhbmRsZVZhbGlkYXRpb25FcnJvckV2ZW50KHBheWxvYWQsIGVsZW1lbnRJZCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICB2YWxpZGF0ZUV2ZW50KGV2ZW50RGF0YSkge1xuICAgIGlmIChldmVudERhdGEuZm9ybUlkICE9PSB0aGlzLmZvcm1JbnN0YW5jZS5mb3JtSWQgfHwgIWV2ZW50RGF0YS5lbGVtZW50SWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMubm9uY2VzLmhhcyhldmVudERhdGEubm9uY2UpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMubm9uY2VzLmFkZChldmVudERhdGEubm9uY2UpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGhhbmRsZUxheW91dEV2ZW50KHBheWxvYWQpIHtcbiAgICBjb25zdCBoZWlnaHQgPSBwYXlsb2FkLmhlaWdodCA/IGAke3BheWxvYWQuaGVpZ2h0fXB4YCA6IFwiMTAwJVwiO1xuICAgIHRoaXMuZm9ybUluc3RhbmNlLnNldEZvcm1IZWlnaHQoaGVpZ2h0KTtcbiAgfVxuICBoYW5kbGVGb2N1c0V2ZW50KGVsZW1lbnRJZCwgZmllbGQpIHtcbiAgICBpZiAodGhpcy5jb25maWcub25Gb2N1cykgdGhpcy5jb25maWcub25Gb2N1cyhlbGVtZW50SWQsIGZpZWxkKTtcbiAgfVxuICBoYW5kbGVCbHVyRXZlbnQoZWxlbWVudElkLCBmaWVsZCkge1xuICAgIGlmICh0aGlzLmNvbmZpZy5vbkJsdXIpIHRoaXMuY29uZmlnLm9uQmx1cihlbGVtZW50SWQsIGZpZWxkKTtcbiAgfVxuICBoYW5kbGVDaGFuZ2VFdmVudChlbGVtZW50SWQsIGZpZWxkLCBlcnJvcnMpIHtcbiAgICBpZiAodGhpcy5jb25maWcub25DaGFuZ2UpIHRoaXMuY29uZmlnLm9uQ2hhbmdlKGVsZW1lbnRJZCwgZmllbGQsIGVycm9ycyk7XG4gIH1cbiAgYXN5bmMgaGFuZGxlTG9hZGVkRXZlbnQoc291cmNlLCBlbGVtZW50SWQsIHBheWxvYWQpIHtcbiAgICB0aGlzLmV2ZW50VGFyZ2V0c1tlbGVtZW50SWRdID0gc291cmNlO1xuICAgIHRoaXMuZm9ybUluc3RhbmNlLm9uQ2RlTG9hZGVkKHBheWxvYWQpO1xuICAgIGlmICh0aGlzLmNvbmZpZy5vbkxvYWQpIHtcbiAgICAgIHRoaXMuY29uZmlnLm9uTG9hZChwYXlsb2FkLnRvdGFsQW1vdW50QXRvbXMsIHBheWxvYWQuY3VycmVuY3kpO1xuICAgIH1cbiAgfVxuICBoYW5kbGVMb2FkRXJyb3JFdmVudChwYXlsb2FkKSB7XG4gICAgaWYgKHRoaXMuZm9ybUluc3RhbmNlLmNvbmZpZy5vbkxvYWRFcnJvcikgdGhpcy5mb3JtSW5zdGFuY2UuY29uZmlnLm9uTG9hZEVycm9yKHBheWxvYWQubWVzc2FnZSk7XG4gIH1cbiAgaGFuZGxlVmFsaWRhdGlvbkVycm9yRXZlbnQocGF5bG9hZCwgZWxlbWVudElkKSB7XG4gICAgaWYgKHRoaXMuZm9ybUluc3RhbmNlLmNvbmZpZy5vblZhbGlkYXRpb25FcnJvcikge1xuICAgICAgdGhpcy5mb3JtSW5zdGFuY2UuY29uZmlnLm9uVmFsaWRhdGlvbkVycm9yKHBheWxvYWQuZWxlbWVudFR5cGUsIHBheWxvYWQuZXJyb3JzLCBlbGVtZW50SWQpO1xuICAgIH1cbiAgfVxuICAvLyBhc3luYyBoYW5kbGVFcnJvckV2ZW50KHBheWxvYWQ6IEVycm9yRXZlbnRQYXlsb2FkKSB7XG4gIC8vICAgaWYgKHBheWxvYWQubWVzc2FnZSA9PT0gJzNEU19SRVFVSVJFRCcpIHtcbiAgLy8gICAgIGNvbnN0IHRocmVlRFNVcmwgPSBwYXlsb2FkLmhlYWRlcnM/LlsneC0zZHMtYXV0aC11cmwnXSA/PyBTSU1VTEFURV8zRFNfVVJMO1xuICAvLyAgICAgLy8gVGhpcyB3aWxsIG9wZW4gYSBwb3B1cCBhbmQgcHJvY2VzcyB0aGUgM0RTIGZsb3dcbiAgLy8gICAgIC8vIHdpbGwgcmV0dXJuIGEgc3RhdHVzIGBzdWNjZXNzYCB8IGBmYWlsdXJlYCB8IGBjYW5jZWxsZWRgIHdoaWNoIHdlIGNhbiBjb250aW51ZSB3aXRoXG4gIC8vICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7IHVybDogdGhyZWVEU1VybCwgYmFzZVVybDogdGhpcy5jb25maWcuYmFzZVVybCEgfSk7XG4gIC8vICAgICBjb25zb2xlLmxvZygn8J+UkCAzRFMgc3RhdHVzOicsIHN0YXR1cyk7XG4gIC8vICAgICAvLyBUT0RPOiBjb250aW51ZSB3aXRoIHN0YXR1c1xuICAvLyAgICAgY29uc3QgY2FyZENwbSA9IHRoaXMuZm9ybUluc3RhbmNlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHM/LmZpbmQoKGNwbSkgPT4gY3BtLnByb3ZpZGVyID09PSAnY3JlZGl0X2NhcmQnKTtcbiAgLy8gICAgIGlmICghdGhpcy5mb3JtSW5zdGFuY2Uuc2Vzc2lvbklkIHx8ICF0aGlzLmZvcm1JbnN0YW5jZS5mb3JtVGFyZ2V0IHx8ICF0aGlzLmNvbmZpZy5vblZhbGlkYXRpb25FcnJvciB8fCAhY2FyZENwbSlcbiAgLy8gICAgICAgcmV0dXJuO1xuICAvLyAgICAgZm9yIChjb25zdCBbZWxlbWVudElkLCB0YXJnZXRdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuZXZlbnRUYXJnZXRzKSkge1xuICAvLyAgICAgICBpZiAoIXRhcmdldCkgY29udGludWU7XG4gIC8vICAgICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dFdmVudCA9IGNvbnN0cnVjdFN1Ym1pdEV2ZW50UGF5bG9hZChcbiAgLy8gICAgICAgICBFdmVudFR5cGUuZW51bS5TVEFSVF9QQVlNRU5UX0ZMT1csXG4gIC8vICAgICAgICAgdGhpcy5mb3JtSW5zdGFuY2Uuc2Vzc2lvbklkLFxuICAvLyAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtSW5zdGFuY2UuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keSxcbiAgLy8gICAgICAgICB0aGlzLmNvbmZpZy5vblZhbGlkYXRpb25FcnJvcixcbiAgLy8gICAgICAgICB7IC4uLmNhcmRDcG0sIHByb2Nlc3Nvcl9uYW1lOiAnc3RyaXBlJyB9LFxuICAvLyAgICAgICAgIGZhbHNlXG4gIC8vICAgICAgICk7XG4gIC8vICAgICAgIGlmICghc3RhcnRQYXltZW50Rmxvd0V2ZW50KSBjb250aW51ZTtcbiAgLy8gICAgICAgdGhpcy5mb3JtSW5zdGFuY2UuY2hlY2tvdXRGaXJlZCA9IHRydWU7XG4gIC8vICAgICAgIHRoaXMudG9rZW5pemVkRGF0YSA9IHN0YXJ0UGF5bWVudEZsb3dFdmVudDtcbiAgLy8gICAgICAgdGhpcy5wb3N0RXZlbnRUb0ZyYW1lKHRhcmdldCwgZWxlbWVudElkLCBzdGFydFBheW1lbnRGbG93RXZlbnQpO1xuICAvLyAgICAgICBicmVhaztcbiAgLy8gICAgIH1cbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgdGhpcy5mb3JtSW5zdGFuY2UuY2hlY2tvdXRGaXJlZCA9IGZhbHNlO1xuICAvLyAgICAgaWYgKHRoaXMuZm9ybUluc3RhbmNlLmNvbmZpZy5vbkNoZWNrb3V0RXJyb3IpIHRoaXMuZm9ybUluc3RhbmNlLmNvbmZpZy5vbkNoZWNrb3V0RXJyb3IocGF5bG9hZC5tZXNzYWdlKTtcbiAgLy8gICB9XG4gIC8vIH1cbiAgLy8gaGFuZGxlRm9ybVN1Ym1pdCgpIHtcbiAgLy8gICBpZiAoXG4gIC8vICAgICAhdGhpcy5mb3JtSW5zdGFuY2Uuc2Vzc2lvbklkIHx8XG4gIC8vICAgICAhdGhpcy5mb3JtSW5zdGFuY2UuY2hlY2tvdXRQYXltZW50TWV0aG9kcz8ubGVuZ3RoIHx8XG4gIC8vICAgICAhdGhpcy5jb25maWcub25WYWxpZGF0aW9uRXJyb3JcbiAgLy8gICApIHtcbiAgLy8gICAgIHJldHVybjtcbiAgLy8gICB9XG4gIC8vICAgY29uc3QgY2FyZENwbSA9IHRoaXMuZm9ybUluc3RhbmNlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMuZmluZCgoY3BtKSA9PiBjcG0ucHJvdmlkZXIgPT09ICdjcmVkaXRfY2FyZCcpO1xuICAvLyAgIGlmICghY2FyZENwbSkge1xuICAvLyAgICAgdGhyb3cgbmV3IEVycm9yKCdDYXJkIG5vdCBhdmFpbGFibGUgYXMgYSBwYXltZW50IG1ldGhvZCBpbiBjaGVja291dCcpO1xuICAvLyAgIH1cbiAgLy8gICBjb25zdCB0b2tlbml6ZURhdGEgPSBjb25zdHJ1Y3RTdWJtaXRFdmVudFBheWxvYWQoXG4gIC8vICAgICBFdmVudFR5cGUuZW51bS5UT0tFTklaRSxcbiAgLy8gICAgIHRoaXMuZm9ybUluc3RhbmNlLnNlc3Npb25JZCEsXG4gIC8vICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZm9ybUluc3RhbmNlLmZvcm1UYXJnZXQpID8/IGRvY3VtZW50LmJvZHksXG4gIC8vICAgICB0aGlzLmNvbmZpZy5vblZhbGlkYXRpb25FcnJvcixcbiAgLy8gICAgIGNhcmRDcG0sXG4gIC8vICAgICBmYWxzZVxuICAvLyAgICk7XG4gIC8vICAgaWYgKCF0b2tlbml6ZURhdGEpIHtcbiAgLy8gICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IgY29uc3RydWN0aW5nIHRva2VuaXplIGRhdGEnKTtcbiAgLy8gICB9XG4gIC8vICAgZm9yIChjb25zdCBbZWxlbWVudElkLCB0YXJnZXRdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuZXZlbnRUYXJnZXRzKSkge1xuICAvLyAgICAgaWYgKCF0YXJnZXQpIGNvbnRpbnVlO1xuICAvLyAgICAgdGhpcy5wb3N0RXZlbnRUb0ZyYW1lKHRhcmdldCwgZWxlbWVudElkLCB0b2tlbml6ZURhdGEpO1xuICAvLyAgIH1cbiAgLy8gICB0aGlzLnRva2VuaXplZERhdGEgPSB0b2tlbml6ZURhdGE7XG4gIC8vIH1cbiAgLy8gYXN5bmMgb25Vc2VyQ29tcGxldGVQYXltZW50UmVxdWVzdFVJKFxuICAvLyAgIHN0cmlwZVBtOiBQYXltZW50UmVxdWVzdFBheW1lbnRNZXRob2RFdmVudCxcbiAgLy8gICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAvLyApOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gICBpZiAoIXRoaXMuY29uZmlnLm9uVmFsaWRhdGlvbkVycm9yIHx8ICF0aGlzLmZvcm1JbnN0YW5jZS5zZXNzaW9uSWQgfHwgIXRoaXMuZm9ybUluc3RhbmNlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMpXG4gIC8vICAgICByZXR1cm47XG4gIC8vICAgZm9yIChjb25zdCBbZWxlbWVudElkLCBlbGVtZW50XSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmV2ZW50VGFyZ2V0cyA/PyB7fSkpIHtcbiAgLy8gICAgIGNvbnN0IHBheW1lbnRGbG93TWV0YWRhdGEgPSB7IHN0cmlwZVBtSWQ6IHN0cmlwZVBtLnBheW1lbnRNZXRob2QuaWQgfTtcbiAgLy8gICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dFdmVudCA9IGNvbnN0cnVjdFN1Ym1pdEV2ZW50UGF5bG9hZChcbiAgLy8gICAgICAgRXZlbnRUeXBlLmVudW0uU1RBUlRfUEFZTUVOVF9GTE9XLFxuICAvLyAgICAgICB0aGlzLmZvcm1JbnN0YW5jZS5zZXNzaW9uSWQsXG4gIC8vICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtSW5zdGFuY2UuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keSxcbiAgLy8gICAgICAgdGhpcy5jb25maWcub25WYWxpZGF0aW9uRXJyb3IsXG4gIC8vICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgLy8gICAgICAgZmFsc2UsXG4gIC8vICAgICAgIHBheW1lbnRGbG93TWV0YWRhdGFcbiAgLy8gICAgICk7XG4gIC8vICAgICBpZiAoIXN0YXJ0UGF5bWVudEZsb3dFdmVudCkgY29udGludWU7XG4gIC8vICAgICB0aGlzLnN0cmlwZVBtID0gc3RyaXBlUG07XG4gIC8vICAgICB0aGlzLmZvcm1JbnN0YW5jZS5jaGVja291dEZpcmVkID0gdHJ1ZTtcbiAgLy8gICAgIHRoaXMuc2V0VG9rZW5pemVkRGF0YShzdGFydFBheW1lbnRGbG93RXZlbnQpO1xuICAvLyAgICAgdGhpcy5wb3N0RXZlbnRUb0ZyYW1lKGVsZW1lbnQsIGVsZW1lbnRJZCwgc3RhcnRQYXltZW50Rmxvd0V2ZW50KTtcbiAgLy8gICAgIC8vIGVtaXRFdmVudChlbGVtZW50Lm5vZGUuY29udGVudFdpbmRvdyEsIHRoaXMuZm9ybUlkLCBlbGVtZW50SWQsIHN0YXJ0UGF5bWVudEZsb3dFdmVudCwgdGhpcy5jb25maWcuYmFzZVVybCEpO1xuICAvLyAgICAgYnJlYWs7XG4gIC8vICAgfVxuICAvLyB9XG4gIHBvc3RFdmVudFRvRnJhbWUoc291cmNlLCBlbGVtZW50SWQsIGRhdGEpIHtcbiAgICBlbWl0RXZlbnQoc291cmNlLCB0aGlzLmZvcm1JZCwgZWxlbWVudElkLCBkYXRhLCB0aGlzLmNvbmZpZy5iYXNlVXJsKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVDb25uZWN0aW9uKGlmcmFtZSwgY2hpbGRPcmlnaW4pIHtcbiAgY29uc3QgY29ubmVjdGlvbiA9IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWUsXG4gICAgZGVidWc6IHRydWUsXG4gICAgY2hpbGRPcmlnaW5cbiAgfSk7XG4gIGNvbnN0IGNvbm5lY3Rpb25PYmogPSBhd2FpdCBjb25uZWN0aW9uLnByb21pc2U7XG4gIGNvbnN0IGlzVmFsaWRPYmplY3QgPSBhd2FpdCBjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0KGNvbm5lY3Rpb25PYmopO1xuICBpZiAoIWlzUmVzdWx0VmFsaWQoY29ubmVjdGlvbk9iaiwgaXNWYWxpZE9iamVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEdvdCBpbnZhbGlkIENERSBjb25uZWN0aW9uIG9iamVjdGApO1xuICB9XG4gIHJldHVybiBjb25uZWN0aW9uT2JqO1xufVxuY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgfVxuICBhZGRDb25uZWN0aW9uKGlkLCBjb25uZWN0aW9uKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucy5zZXQoaWQsIGNvbm5lY3Rpb24pO1xuICB9XG4gIGdldENvbm5lY3Rpb24oKSB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmICghY29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBub3QgZm91bmRcIik7XG4gICAgfVxuICAgIHJldHVybiBjb25uZWN0aW9uO1xuICB9XG4gIGdldEFsbENvbm5lY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zO1xuICB9XG59XG5cbmNsYXNzIE9wZW5QYXlGb3JtIHtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgdGhpcy50cnlJbml0T2pzRmxvd3MgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5vanNGbG93c0luaXRpYWxpemF0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5jZGVMb2FkZWRQYXlsb2FkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKCkuc2l6ZSA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLm9qc0Zsb3dzSW5pdGlhbGl6YXRpb24gPSBpbml0aWFsaXplT2pzRmxvd3ModGhpcy5jcmVhdGVPanNGbG93Q29udGV4dCgpKTtcbiAgICAgIHRoaXMub2pzRmxvd3NJbml0aWFsaXphdGlvbi5zdHJpcGVQUi5zdWJzY3JpYmUoKHN0YXR1cykgPT4gdGhpcy5vblN0cmlwZVBSU3RhdHVzQ2hhbmdlKHN0YXR1cykpO1xuICAgIH07XG4gICAgdGhpcy5vbkNkZUxvYWRlZCA9IChwYXlsb2FkKSA9PiB7XG4gICAgICBpZiAodGhpcy5jZGVMb2FkZWRQYXlsb2FkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2RlTG9hZGVkUGF5bG9hZCA9IHBheWxvYWQ7XG4gICAgICB0aGlzLnRyeUluaXRPanNGbG93cygpO1xuICAgIH07XG4gICAgdGhpcy5vblN0cmlwZVBSU3RhdHVzQ2hhbmdlID0gKGluaXRTdGF0dXMpID0+IHtcbiAgICAgIGlmIChpbml0U3RhdHVzLnN0YXR1cyA9PT0gXCJsb2FkaW5nXCIpIHtcbiAgICAgICAgdGhpcy5jb25maWcub25QYXltZW50UmVxdWVzdExvYWQ/Lih7IGFwcGxlX3BheTogUFJfTE9BRElORywgZ29vZ2xlX3BheTogUFJfTE9BRElORyB9KTtcbiAgICAgIH0gZWxzZSBpZiAoaW5pdFN0YXR1cy5zdGF0dXMgPT09IFwiZXJyb3JcIikge1xuICAgICAgICB0aGlzLmNvbmZpZy5vblBheW1lbnRSZXF1ZXN0TG9hZD8uKHsgYXBwbGVfcGF5OiBQUl9FUlJPUiwgZ29vZ2xlX3BheTogUFJfRVJST1IgfSk7XG4gICAgICB9IGVsc2UgaWYgKGluaXRTdGF0dXMuc3RhdHVzID09PSBcImxvYWRlZFwiKSB7XG4gICAgICAgIGNvbnN0IGluaXRSZXN1bHQgPSBpbml0U3RhdHVzLnJlc3VsdDtcbiAgICAgICAgY29uc3QgY2FuQXBwbGVQYXkgPSBpbml0UmVzdWx0LmlzQXZhaWxhYmxlICYmIGluaXRSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5O1xuICAgICAgICBjb25zdCBjYW5Hb29nbGVQYXkgPSBpbml0UmVzdWx0LmlzQXZhaWxhYmxlICYmIGluaXRSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheTtcbiAgICAgICAgdGhpcy5jb25maWcub25QYXltZW50UmVxdWVzdExvYWQ/Lih7XG4gICAgICAgICAgYXBwbGVfcGF5OiB7XG4gICAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IGNhbkFwcGxlUGF5LFxuICAgICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodXNlclBhcmFtcykgPT4gY2FuQXBwbGVQYXkgPyB0aGlzLnN1Ym1pdFBheW1lbnRSZXF1ZXN0KFwiYXBwbGVfcGF5XCIsIGluaXRSZXN1bHQsIHVzZXJQYXJhbXMpIDogdm9pZCAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBnb29nbGVfcGF5OiB7XG4gICAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IGNhbkdvb2dsZVBheSxcbiAgICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHVzZXJQYXJhbXMpID0+IGNhbkdvb2dsZVBheSA/IHRoaXMuc3VibWl0UGF5bWVudFJlcXVlc3QoXCJnb29nbGVfcGF5XCIsIGluaXRSZXN1bHQsIHVzZXJQYXJhbXMpIDogdm9pZCAwXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc3VibWl0UGF5bWVudFJlcXVlc3QgPSAocHJvdmlkZXIsIGluaXRSZXN1bHQsIHBhcmFtcykgPT4ge1xuICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY3JlYXRlT2pzRmxvd0NvbnRleHQoKTtcbiAgICAgIHJldHVybiBPanNGbG93cy5zdHJpcGVQUi5ydW4oe1xuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBwcm92aWRlciksXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IHRoaXMuZ2V0Tm9uQ2RlRm9ybUlucHV0cygpLFxuICAgICAgICBmbG93Q2FsbGJhY2tzOiB0aGlzLmNyZWF0ZU9qc0Zsb3dDYWxsYmFja3MoKSxcbiAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBwYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgICAgICAgaW5pdFJlc3VsdFxuICAgICAgfSk7XG4gICAgfTtcbiAgICBPcGVuUGF5Rm9ybS5hc3NpZ25Bc1NpbmdsZXRvbih0aGlzKTtcbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4uY29uZmlnLCBiYXNlVXJsOiBjb25maWcuYmFzZVVybCA/PyBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCIgfTtcbiAgICB0aGlzLmVsZW1lbnRzID0gbnVsbDtcbiAgICB0aGlzLmZvcm1JZCA9IGBvcGpzLWZvcm0tJHt3aW5kb3cuY3J5cHRvLnJhbmRvbVVVSUQoKX1gO1xuICAgIHRoaXMucmVmZXJlciA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgdGhpcy5mb3JtVGFyZ2V0ID0gY29uZmlnLmZvcm1UYXJnZXQgPz8gXCJib2R5XCI7XG4gICAgdGhpcy5mb3JtUHJvcGVydGllcyA9IHsgaGVpZ2h0OiBcIjFweFwiIH07XG4gICAgdGhpcy5jZGVMb2FkZWRQYXlsb2FkID0gbnVsbDtcbiAgICB0aGlzLm9qc0Zsb3dzSW5pdGlhbGl6YXRpb24gPSBudWxsO1xuICAgIHRoaXMuY2hlY2tvdXRGaXJlZCA9IGZhbHNlO1xuICAgIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIgPSBuZXcgQ29ubmVjdGlvbk1hbmFnZXIoKTtcbiAgICB0aGlzLmV2ZW50SGFuZGxlciA9IG5ldyBPcGVuUGF5Rm9ybUV2ZW50SGFuZGxlcih0aGlzKTtcbiAgICB0aGlzLm9qc1ZlcnNpb24gPSBcIjAuMS42XCI7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5vanNGbG93cyA9IE9qc0Zsb3dzO1xuICB9XG4gIC8qKlxuICAgKiBBc3NpZ24gdGhlIGluc3RhbmNlIHRvIHRoZSB3aW5kb3cgYXMgYSBzaW5nbGV0b25cbiAgICogQHBhcmFtIGZvcm0gLSBUaGUgT3BlblBheUZvcm0gaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBhc3NpZ25Bc1NpbmdsZXRvbihmb3JtKSB7XG4gICAgaWYgKE9wZW5QYXlGb3JtLmdldEluc3RhbmNlKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgaW5zdGFuY2UgYWxyZWFkeSBleGlzdHMuIE9ubHkgb25lIGluc3RhbmNlIGlzIGFsbG93ZWQuXCIpO1xuICAgIH1cbiAgICB3aW5kb3dbXCJvanNcIl0gPSBmb3JtO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiBPcGVuUGF5Rm9ybVxuICAgKiBAcmV0dXJucyBUaGUgT3BlblBheUZvcm0gaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBnZXRJbnN0YW5jZSgpIHtcbiAgICByZXR1cm4gd2luZG93W1wib2pzXCJdID8/IG51bGw7XG4gIH1cbiAgZ2V0Q29ubmVjdGlvbk1hbmFnZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbk1hbmFnZXI7XG4gIH1cbiAgc2V0Rm9ybUhlaWdodChoZWlnaHQpIHtcbiAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IGhlaWdodDtcbiAgICBpZiAodGhpcy5lbGVtZW50cykge1xuICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLmVsZW1lbnRzKS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGVsZW1lbnQubm9kZS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgY3JlYXRlRWxlbWVudChlbGVtZW50VmFsdWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgY29uc3QgdHlwZSA9IEVsZW1lbnRUeXBlLnBhcnNlKGVsZW1lbnRWYWx1ZSk7XG4gICAgY29uc3QgZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdGhpcy5idWlsZFF1ZXJ5U3RyaW5nKG9wdGlvbnMpO1xuICAgIGZyYW1lLm5hbWUgPSBgJHt0eXBlfS1lbGVtZW50YDtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGAvYXBwL3YxLyR7ZnJhbWUubmFtZX1gLCB0aGlzLmNvbmZpZy5iYXNlVXJsKTtcbiAgICB1cmwuc2VhcmNoID0gcXVlcnlTdHJpbmcudG9TdHJpbmcoKTtcbiAgICBmcmFtZS5zcmMgPSB1cmwuaHJlZjtcbiAgICB0aGlzLmNvbmZpZy5fZnJhbWVVcmwgPSB1cmw7XG4gICAgZnJhbWUuc3R5bGUuYm9yZGVyID0gXCJub25lXCI7XG4gICAgZnJhbWUuc3R5bGUud2lkdGggPSBcIjEwMCVcIjtcbiAgICBjb25zdCBlbGVtZW50ID0ge1xuICAgICAgdHlwZSxcbiAgICAgIG5vZGU6IGZyYW1lLFxuICAgICAgbW91bnQ6IChzZWxlY3RvcikgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik/LmFwcGVuZENoaWxkKGZyYW1lKVxuICAgIH07XG4gICAgdGhpcy5jb25uZWN0VG9FbGVtZW50KGVsZW1lbnQpO1xuICAgIGlmICh0aGlzLmVsZW1lbnRzKSB7XG4gICAgICB0aGlzLmVsZW1lbnRzW3R5cGVdID0gZWxlbWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbGVtZW50cyA9IHsgW3R5cGVdOiBlbGVtZW50IH07XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG4gIGJ1aWxkUXVlcnlTdHJpbmcob3B0aW9ucykge1xuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcInJlZmVyZXJcIiwgdGhpcy5yZWZlcmVyKTtcbiAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJmb3JtSWRcIiwgdGhpcy5mb3JtSWQpO1xuICAgIGlmIChvcHRpb25zLnN0eWxlcykge1xuICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwic3R5bGVzXCIsIGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nKG9wdGlvbnMuc3R5bGVzKSk7XG4gICAgfVxuICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcInNlY3VyZVRva2VuXCIsIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4pO1xuICAgIHJldHVybiBxdWVyeVN0cmluZztcbiAgfVxuICBjb25uZWN0VG9FbGVtZW50KGVsZW1lbnQpIHtcbiAgICBjcmVhdGVDb25uZWN0aW9uKGVsZW1lbnQubm9kZSkudGhlbigoY29ubikgPT4ge1xuICAgICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlci5hZGRDb25uZWN0aW9uKGVsZW1lbnQudHlwZSwgY29ubik7XG4gICAgICB0aGlzLnRyeUluaXRPanNGbG93cygpO1xuICAgIH0pLmNhdGNoKChlcnIpID0+IHZvaWQgMCk7XG4gIH1cbiAgZ2V0Rm9ybURpdigpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1UYXJnZXQpID8/IGRvY3VtZW50LmJvZHk7XG4gIH1cbiAgY3JlYXRlT2pzRmxvd0NvbnRleHQoKSB7XG4gICAgY29uc3QgY2RlQ29ubmVjdGlvbnMgPSB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKCk7XG4gICAgaWYgKCF0aGlzLmNkZUxvYWRlZFBheWxvYWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlcXVlc3RlZCBjb250ZXh0IHdoaWxlIENERSBub3QgeWV0IGxvYWRlZFwiKTtcbiAgICB9XG4gICAgaWYgKGNkZUNvbm5lY3Rpb25zLnNpemUgPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIENERSBjb25uZWN0aW9ucyBmb3VuZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGJhc2VVcmw6IG5ldyBVUkwodGhpcy5jb25maWcuYmFzZVVybCA/PyBGUkFNRV9CQVNFX1VSTCkub3JpZ2luLFxuICAgICAgZm9ybURpdjogdGhpcy5nZXRGb3JtRGl2KCksXG4gICAgICBlbGVtZW50c1Nlc3Npb25JZDogdGhpcy5jZGVMb2FkZWRQYXlsb2FkLnNlc3Npb25JZCxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHRoaXMuY2RlTG9hZGVkUGF5bG9hZC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgY2RlQ29ubmVjdGlvbnNcbiAgICB9O1xuICB9XG4gIGdldE5vbkNkZUZvcm1JbnB1dHMoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybSh0aGlzLmdldEZvcm1EaXYoKSk7XG4gIH1cbiAgY3JlYXRlT2pzRmxvd0NhbGxiYWNrcygpIHtcbiAgICBjb25zdCBub09wID0gKCkgPT4ge1xuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIG9uQ2hlY2tvdXRFcnJvcjogbWFrZUNhbGxiYWNrU2FmZShcIm9uQ2hlY2tvdXRFcnJvclwiLCB0aGlzLmNvbmZpZy5vbkNoZWNrb3V0RXJyb3IgPz8gbm9PcCksXG4gICAgICBvbkNoZWNrb3V0U3RhcnRlZDogbWFrZUNhbGxiYWNrU2FmZShcIm9uQ2hlY2tvdXRTdGFydGVkXCIsIHRoaXMuY29uZmlnLm9uQ2hlY2tvdXRTdGFydGVkID8/IG5vT3ApLFxuICAgICAgb25DaGVja291dFN1Y2Nlc3M6IG1ha2VDYWxsYmFja1NhZmUoXCJvbkNoZWNrb3V0U3VjY2Vzc1wiLCB0aGlzLmNvbmZpZy5vbkNoZWNrb3V0U3VjY2VzcyA/PyBub09wKSxcbiAgICAgIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogbWFrZUNhbGxiYWNrU2FmZShcbiAgICAgICAgXCJvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3NcIixcbiAgICAgICAgdGhpcy5jb25maWcub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzID8/IG5vT3BcbiAgICAgICksXG4gICAgICBvblZhbGlkYXRpb25FcnJvcjogbWFrZUNhbGxiYWNrU2FmZShcIm9uVmFsaWRhdGlvbkVycm9yXCIsIHRoaXMuY29uZmlnLm9uVmFsaWRhdGlvbkVycm9yID8/IG5vT3ApXG4gICAgfTtcbiAgfVxuICBzdWJtaXQoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuY3JlYXRlT2pzRmxvd0NvbnRleHQoKTtcbiAgICBPanNGbG93cy5jb21tb25DQy5ydW4oe1xuICAgICAgY29udGV4dCxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiB0aGlzLmdldE5vbkNkZUZvcm1JbnB1dHMoKSxcbiAgICAgIGZsb3dDYWxsYmFja3M6IHRoaXMuY3JlYXRlT2pzRmxvd0NhbGxiYWNrcygpLFxuICAgICAgY3VzdG9tUGFyYW1zOiB2b2lkIDAsXG4gICAgICAvLyBUaGlzIGZsb3cgcmVxdWlyZXMgbm8gY3VzdG9tIHBhcmFtc1xuICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAvLyBUaGlzIGZsb3cgcmVxdWlyZXMgbm8gaW5pdGlhbGl6YXRpb25cbiAgICB9KTtcbiAgfVxuICBvblBheW1lbnRSZXF1ZXN0RXJyb3IoZXJyTXNnKSB7XG4gICAgdGhpcy5jaGVja291dEZpcmVkID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuY29uZmlnLm9uQ2hlY2tvdXRFcnJvcikgdGhpcy5jb25maWcub25DaGVja291dEVycm9yKGVyck1zZyk7XG4gIH1cbiAgZGVzdHJveSgpIHtcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmVsZW1lbnRzID8/IHt9KSkge1xuICAgICAgZWxlbWVudC5ub2RlLnJlbW92ZSgpO1xuICAgIH1cbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSk7XG4gIH1cbn1cblxuZXhwb3J0IHsgRmllbGROYW1lLCBPcGVuUGF5Rm9ybSB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsS0FBQUEsU0FBUztBQUNsQixTQUFTLE1BQUFDLFVBQVU7QUFDbkIsU0FBUyxrQkFBQUMsVUFBc0I7QUFDL0IsT0FBT0MsT0FBVztBQUVsQixNQUFNQyxLQUFpQiw4QkFFakJDLEtBQTRCTCxFQUFFLE9BQU87QUFB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LEtBQUssWUFBWSxDQUFDO0FBQUEsRUFDL0Y7QUFDRjtBQWxJSVYsRUFBSyxXQUFXeEU7QUF4RXBCLElBQU0yRixLQUFObkI7IiwKICAibmFtZXMiOiBbInoiLCAidjQiLCAiY29ubmVjdFRvQ2hpbGQiLCAiY2hhbGsiLCAiRlJBTUVfQkFTRV9VUkwiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlIiwgIlpvZEZpZWxkRXJyb3IiLCAiWm9kRmllbGRFcnJvcnMiLCAiTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRSIsICJnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZSIsICJvZ0Vycm9yTWVzc2FnZSIsICJrZXkiLCAiaXNTdHJpbmdpZmllZEpzb25PYmplY3QiLCAic3RyIiwgImNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IiLCAicmVzcG9uc2UiLCAiZXJyIiwgImNyZWF0ZU1lc3NhZ2VGcm9tWm9kRmllbGRFcnJvcnMiLCAiZXJyb3JzIiwgImdldEVycm9yTWVzc2FnZSIsICJlIiwgIm9iaiIsICJlMiIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgImNhbGxiYWNrTmFtZSIsICJmbiIsICJhcmdzIiwgIlJlcXVpcmVkU3RyaW5nIiwgIk9wdGlvbmFsU3RyaW5nIiwgIm51bGxPclVuZGVmT3IkMSIsICJ6VHlwZSIsICJGaWVsZE5hbWUiLCAiRmllbGROYW1lMiIsICJGaWVsZE5hbWVFbnVtIiwgIlByaXZhdGVGaWVsZE5hbWUiLCAiUHJpdmF0ZUZpZWxkTmFtZTIiLCAiUHJpdmF0ZUZpZWxkTmFtZUVudW0iLCAiQWxsRmllbGROYW1lcyIsICJFbGVtZW50VHlwZUVudW0iLCAiRWxlbWVudFR5cGVFbnVtMiIsICJFbGVtZW50VHlwZSIsICJDaGVja291dFBheW1lbnRNZXRob2QkMSIsICJQYXltZW50TWV0aG9kTWluaW1hbCIsICJFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRQYXlsb2FkIiwgIklucHV0RXZlbnRUeXBlIiwgIklucHV0RXZlbnRQYXlsb2FkIiwgIkVycm9yRXZlbnRUeXBlIiwgIkVycm9yRXZlbnRQYXlsb2FkIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQiLCAiTGF5b3V0RXZlbnRQYXlsb2FkIiwgIkxvYWRlZEV2ZW50UGF5bG9hZCIsICJQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQiLCAiU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgIlBSRm9ybUZpZWxkcyIsICJTdWJtaXRFdmVudFR5cGUiLCAiU3VibWl0RXZlbnRQYXlsb2FkIiwgIlRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiRXZlbnRQYXlsb2FkIiwgIkVsZW1lbnRFdmVudCIsICJDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSIsICJGaWVsZFZhbGlkYXRpb25FcnJvciIsICJUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlIiwgIlRva2VuaXplQ2FyZFJlc3BvbnNlIiwgIlRocmVlRFNTdGF0dXMiLCAiVGhyZWVEU1N0YXR1czIiLCAiUGluZzNEU1N0YXR1c1Jlc3BvbnNlIiwgIkNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJleHRyYWN0SXNzdWVzUGVyRmllbGQiLCAiZXJyb3IiLCAiaXNzdWVzUGVyRmllbGQiLCAidmFsdWUiLCAiZmllbGROYW1lIiwgIlN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YSIsICJvdXJDdXJyZW5jeVRvVGhlaXJzIiwgImdldExvYWRlZFN0cmlwZSIsICJwdWJsaXNoYWJsZUtleSIsICJpIiwgImlzU3RyaXBlSnNQcmVzZW50IiwgInNsZWVwIiwgImNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0IiwgInN0cmlwZVB1YktleSIsICJ0b3RhbEFtb3VudEF0b20iLCAiY3VycmVuY3kiLCAiaXNBbW91bnRQZW5kaW5nIiwgImlzTGlua09ubHkiLCAic3RyaXBlIiwgInN0cmlwZUN1cnJlbmN5IiwgInRpbWVvdXRNcyIsICJyZXNvbHZlIiwgIndhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kIiwgInBheW1lbnRSZXF1ZXN0IiwgInJlamVjdCIsICJldnQiLCAiY29uZmlybVN0cmlwZVByUE0iLCAibmV4dEFjdGlvbk1ldGFkYXRhIiwgInN0cmlwZVBtIiwgImNvbmZpcm1SZXN1bHQiLCAibGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyIsICJfYSIsICJfYiIsICJfYyIsICJfZCIsICJyZXN1bHRTdGF0dXMiLCAiY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmciLCAic3R5bGVzIiwgImNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybSIsICJmb3JtRGl2IiwgImluaXRpYWxEaWN0IiwgImFjYyIsICJpbnB1dCIsICJwYXJzZUV2ZW50UGF5bG9hZCIsICJldmVudERhdGEiLCAiZW1pdEV2ZW50IiwgInRhcmdldCIsICJmb3JtSWQiLCAiZWxlbWVudElkIiwgInBheWxvYWQiLCAiYmFzZVVybCIsICJldmVudCIsICJjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0IiwgInBpbmciLCAicmVzdWx0IiwgImlzUmVzdWx0VmFsaWQiLCAiaXNWYWxpZCIsICJudWxsT3JVbmRlZk9yIiwgIkNERVJlc3BvbnNlRXJyb3IiLCAiQ291cG9uTWluaW1hbCIsICJMaW5lSXRlbSIsICJCcmFuZFNldHRpbmdzIiwgIkJyYW5kIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJTdWJzY3JpcHRpb25JdGVtTWluaW1hbCIsICJTdWJzY3JpcHRpb25NaW5pbWFsIiwgIkludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCIsICJJbnZvaWNlTGluZUl0ZW1NaW5pbWFsIiwgIkRpc2NvdW50TWluaW1hbCIsICJJbnZvaWNlTWluaW1hbCIsICJDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwiLCAiUHJldmlld0NoZWNrb3V0UmVzcG9uc2UiLCAiX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiIsICJQYXltZW50Rm9ybVByZWZpbGwiLCAiQ29tcGxldGVkRm9ybVByZWZpbGwiLCAiRXhwaXJlZEZvcm1QcmVmaWxsIiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgIlNldHVwQ2hlY2tvdXRSZXNwb25zZSIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJTdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAiU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UiLCAic3VtIiwgImFyciIsICJhIiwgImIiLCAiZml4UHJvdG8iLCAicHJvdG90eXBlIiwgInNldFByb3RvdHlwZU9mIiwgImZpeFN0YWNrIiwgImNhcHR1cmVTdGFja1RyYWNlIiwgIl9fZXh0ZW5kcyIsICJfZXh0ZW5kU3RhdGljcyIsICJkIiwgInAiLCAiX18iLCAiQ3VzdG9tRXJyb3IiLCAiX3N1cGVyIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJfbmV3VGFyZ2V0IiwgIl90aGlzIiwgIkNkZUVycm9yIiwgImZyaWVuZGx5TWVzc2FnZSIsICJxdWVyeUNERSIsICJjZGVDb25uIiwgImRhdGEiLCAicmVzcG9uc2VTY2hlbWEiLCAiaXNDREVSZXNwb25zZUVycm9yIiwgImNoZWNrSWZDb25mb3Jtc1RvU2NoZW1hIiwgInNjaGVtYSIsICJnZXRDaGVja291dFByZXZpZXciLCAicmVxdWVzdCIsICJnZXRQcmVmaWxsIiwgInN0YXJ0UGF5bWVudEZsb3dGb3JDQyIsICJzdGFydFBheW1lbnRGbG93Rm9yUFIiLCAiY29uZmlybVBheW1lbnRGbG93IiwgImdldENoZWNrb3V0VmFsdWUiLCAic2VjdXJlVG9rZW4iLCAicHJvbW9Db2RlIiwgImNoZWNrb3V0UHJldmlldyIsICJjdXJyZW5jaWVzIiwgImludiIsICJhbW91bnRBdG9tIiwgImdldENoZWNrb3V0UHJldmlld0Ftb3VudCIsICJpc1NldHVwTW9kZSIsICJ0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zIiwgImFsbENkZUNvbm5lY3Rpb25zIiwgImNoZWNrb3V0Q2FyZEVsZW1lbnRzIiwgInNldHVwQ2hlY2tvdXQiLCAicGVyZm9ybUNoZWNrb3V0IiwgIkNERV9QT0xMSU5HX0lOVEVSVkFMIiwgInBpbmdDZGVGb3IzZHNTdGF0dXMiLCAiaWZyYW1lIiwgImNoaWxkT3JpZ2luIiwgImNvbm5lY3Rpb25PYmoiLCAiY3JlYXRlQW5kT3BlbkZyYW1lIiwgInVybCIsICJ0ZW1wbGF0ZSIsICJob3N0IiwgInNoYWRvd1Jvb3QiLCAiY2FuY2VsQnV0dG9uIiwgInN0YXJ0UG9sbGluZyIsICJvblN1Y2Nlc3MiLCAiaGFuZGxlUG9sbGluZyIsICJzdGF0dXMiLCAicG9sbGluZ0ludGVydmFsIiwgImhhbmRsZUV2ZW50cyIsICJlbGVtZW50cyIsICJoYW5kbGVDYW5jZWwiLCAic3RhcnQzZHNWZXJpZmljYXRpb24iLCAiY2xlYW51cEV2ZW50TGlzdGVuZXJzIiwgImFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzIiwgInNpbXBsZU9qc0Zsb3ciLCAicGFyYW1zIiwgImZsb3dSZXN1bHQiLCAiYWRkRXJyb3JDYXRjaGVyRm9ySW5pdCIsICJpbml0IiwgImVycl9fIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgInByZWZpeCIsICJsb2ciLCAibG9nX18kMyIsICJlcnJfXyQ0IiwgInZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDIiwgIm5vbkNkZUZvcm1JbnB1dHMiLCAib25WYWxpZGF0aW9uRXJyb3IiLCAiZm9ybWF0dGVkIiwgImlzc3VlcyIsICJ2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHMiLCAidG9rZW5pemVSZXN1bHRzIiwgInRva2VuaXplUmVzdWx0IiwgInBhcnNlZCIsICJlcnJfXyQzIiwgInBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UiLCAiZmluZENwbU1hdGNoaW5nVHlwZSIsICJhbGxDUE1zIiwgInpvZE1vZGVsIiwgImNwbSIsICJjcG0yIiwgImxvZ19fJDIiLCAiZXJyX18kMiIsICJzdHJpcGVMb2dfXyIsICJydW5Db21tb25DY0Zsb3ciLCAiY29udGV4dCIsICJjaGVja291dFBheW1lbnRNZXRob2QiLCAiZmxvd0NhbGxiYWNrcyIsICJhbnlDZGVDb25uZWN0aW9uIiwgInByZWZpbGwiLCAibm9uQ2RlRm9ybUZpZWxkcyIsICJ0b2tlbml6ZUNhcmRSZXN1bHRzIiwgImNvbW1vbkNoZWNrb3V0UGFyYW1zIiwgInNob3VsZFVzZU5ld0Zsb3ciLCAic3RhcnRQZlJlc3VsdCIsICJjb21tb25DQzNEU0Zsb3ciLCAic3RyaXBlQ0MzRFNGbG93IiwgImNyZWF0ZWRQYXltZW50TWV0aG9kIiwgInBhcnNlU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgInN0cmlwZUFjdGlvbiIsICJhY3Rpb24iLCAicGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiY29tbW9uQWN0aW9uIiwgImxvZ19fJDEiLCAiZXJyX18kMSIsICJTdHJpcGVQckNwbSIsICJpbml0U3RyaXBlUHJGbG93IiwgImluaXRpYWxQcmV2aWV3IiwgInByIiwgImNhbk1ha2VQYXltZW50IiwgInJ1blN0cmlwZVByRmxvdyIsICJjdXN0b21QYXJhbXMiLCAiaW5pdFJlc3VsdCIsICJjbGVhbmVkRm9ybUlucHV0cyIsICJvdmVycmlkZUVtcHR5WmlwQ29kZSIsICJvdmVycmlkZSIsICJ1cGRhdGVQcldpdGhBbW91bnQiLCAic3RyaXBlUG1BZGRlZEV2ZW50IiwgInN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhIiwgImNoZWNrb3V0UmVxdWVzdCIsICJmb3JtSW5wdXRzIiwgIm5ld0Zvcm1JbnB1dHMiLCAiYW1vdW50IiwgImlzUGVuZGluZyIsICJmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0IiwgImNwbXMiLCAid2l0aFByb3ZpZGVyIiwgIndpdGhQcm9jZXNzb3IiLCAibWF0Y2hlcyIsICJPanNGbG93cyIsICJnZXREZWZhdWx0RXhwb3J0RnJvbUNqcyIsICJ4IiwgIk9ic2VydmFibGUkMiIsICJoYXNTeW1ib2wiLCAibmFtZSIsICJnZXRTeW1ib2wiLCAiU3ltYm9sSXRlcmF0b3IiLCAiU3ltYm9sT2JzZXJ2YWJsZSIsICJTeW1ib2xTcGVjaWVzIiwgImdldE1ldGhvZCIsICJnZXRTcGVjaWVzIiwgImN0b3IiLCAiT2JzZXJ2YWJsZSQxIiwgImlzT2JzZXJ2YWJsZSIsICJob3N0UmVwb3J0RXJyb3IiLCAiZW5xdWV1ZSIsICJjbGVhbnVwU3Vic2NyaXB0aW9uIiwgInN1YnNjcmlwdGlvbiIsICJjbGVhbnVwIiwgInVuc3Vic2NyaWJlIiwgImNsb3NlU3Vic2NyaXB0aW9uIiwgImZsdXNoU3Vic2NyaXB0aW9uIiwgInF1ZXVlIiwgIm5vdGlmeVN1YnNjcmlwdGlvbiIsICJ0eXBlIiwgIm9ic2VydmVyIiwgIm0iLCAib25Ob3RpZnkiLCAiU3Vic2NyaXB0aW9uIiwgInN1YnNjcmliZXIiLCAic2VsZiIsICJzdWJzY3JpcHRpb25PYnNlcnZlciIsICJPYnNlcnZhYmxlIiwgImRvbmUiLCAiQyIsICJoYXNTZWVkIiwgImhhc1ZhbHVlIiwgImZpcnN0IiwgInZhbHVlcyIsICJzb3VyY2VzIiwgImluZGV4IiwgInN0YXJ0TmV4dCIsICJuZXh0IiwgInYiLCAic3Vic2NyaXB0aW9ucyIsICJvdXRlciIsICJpbm5lciIsICJjb21wbGV0ZUlmRG9uZSIsICJzIiwgIm1ldGhvZCIsICJvYnNlcnZhYmxlIiwgIml0ZW0iLCAiaXRlbXMiLCAiemVuT2JzZXJ2YWJsZSIsICJsb2dfXyIsICJpbml0aWFsaXplT2pzRmxvd3MiLCAicnVuSW5pdEZsb3dBc09ic2VydmFibGUiLCAiZmxvd05hbWUiLCAiaW5pdEZsb3ciLCAiUFJfTE9BRElORyIsICJQUl9FUlJPUiIsICJPcGVuUGF5Rm9ybUV2ZW50SGFuZGxlciIsICJmb3JtSW5zdGFuY2UiLCAiaGVpZ2h0IiwgImZpZWxkIiwgInNvdXJjZSIsICJjcmVhdGVDb25uZWN0aW9uIiwgImlzVmFsaWRPYmplY3QiLCAiQ29ubmVjdGlvbk1hbmFnZXIiLCAiaWQiLCAiY29ubmVjdGlvbiIsICJfT3BlblBheUZvcm0iLCAiY29uZmlnIiwgImluaXRTdGF0dXMiLCAiX2UiLCAiX2YiLCAiY2FuQXBwbGVQYXkiLCAiY2FuR29vZ2xlUGF5IiwgInVzZXJQYXJhbXMiLCAicHJvdmlkZXIiLCAiZm9ybSIsICJlbGVtZW50IiwgImVsZW1lbnRWYWx1ZSIsICJmcmFtZSIsICJxdWVyeVN0cmluZyIsICJzZWxlY3RvciIsICJjb25uIiwgImNkZUNvbm5lY3Rpb25zIiwgIm5vT3AiLCAiZXJyTXNnIiwgIk9wZW5QYXlGb3JtIl0KfQo=
|
|
1617
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguZXMuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEZSQU1FX0JBU0VfVVJMID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiO1xuXG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBsb2M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIG1zZzogei5zdHJpbmcoKSxcbiAgdXJsOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yUmVzcG9uc2UgPSB6LmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHoub2JqZWN0KHtcbiAgY29kZTogei5zdHJpbmcoKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgcGF0aDogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBab2RGaWVsZEVycm9ycyA9IHouYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBNQVBfVE9fSFVNQU5fRlJJRU5ETFlfTE9XRVJDQVNFID0ge1xuICBcImZhaWxlZCB0byBmZXRjaFwiOiBgQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluYFxufTtcbmNvbnN0IGdldEh1bWFuRnJpZW5kbHlNZXNzYWdlID0gKG9nRXJyb3JNZXNzYWdlKSA9PiB7XG4gIGNvbnN0IGtleSA9IG9nRXJyb3JNZXNzYWdlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICByZXR1cm4gTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRVtrZXldID8/IG9nRXJyb3JNZXNzYWdlO1xufTtcbmNvbnN0IGlzU3RyaW5naWZpZWRKc29uT2JqZWN0ID0gKHN0cikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3RyKTtcbiAgICByZXR1cm4gdHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIjtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbmNvbnN0IGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShyZXNwb25zZVswXS5tc2cpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJ1bGxldGVkID0gcmVzcG9uc2UubWFwKChlcnIpID0+IGDigKIgJHtnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlcnIubXNnKX1gKS5qb2luKFwiXFxuXCIpO1xuICAgIHJldHVybiBgJHtgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpgfVxuJHtidWxsZXRlZH1gO1xuICB9XG59O1xuY29uc3QgY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyA9IChlcnJvcnMpID0+IHtcbiAgY29uc3QgbGlzdE9mRXJyb3JzID0gZXJyb3JzLm1hcCgoZXJyKSA9PiBgLSAke2Vyci5wYXRoLmpvaW4oXCIvXCIpfTogJHtlcnIubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpO1xuICByZXR1cm4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtsaXN0T2ZFcnJvcnN9YDtcbn07XG5jb25zdCBnZXRFcnJvck1lc3NhZ2UgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgaWYgKGlzU3RyaW5naWZpZWRKc29uT2JqZWN0KGUubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZS5tZXNzYWdlKTtcbiAgICAgIGlmIChQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3Iob2JqKTtcbiAgICAgIH0gZWxzZSBpZiAoWm9kRmllbGRFcnJvcnMuc2FmZVBhcnNlKG9iaikuc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyhvYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGUubWVzc2FnZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGdldEh1bWFuRnJpZW5kbHlNZXNzYWdlKGUubWVzc2FnZSk7XG4gICAgfVxuICB9XG4gIGlmICh0eXBlb2YgZSA9PT0gXCJvYmplY3RcIikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSk7XG4gICAgfSBjYXRjaCAoZTIpIHtcbiAgICAgIHJldHVybiBlMiArIFwiXCI7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBlICsgXCJcIjtcbiAgfVxufTtcbmNvbnN0IG1ha2VDYWxsYmFja1NhZmUgPSAoY2FsbGJhY2tOYW1lLCBmbikgPT4ge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IFJlcXVpcmVkU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG5jb25zdCBPcHRpb25hbFN0cmluZyA9IHouc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCk7XG5jb25zdCBudWxsT3JVbmRlZk9yJDEgPSAoelR5cGUpID0+IHoubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG52YXIgRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoRmllbGROYW1lMikgPT4ge1xuICBGaWVsZE5hbWUyW1wiRklSU1RfTkFNRVwiXSA9IFwiZmlyc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJMQVNUX05BTUVcIl0gPSBcImxhc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJFTUFJTFwiXSA9IFwiZW1haWxcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIkFERFJFU1NcIl0gPSBcImFkZHJlc3NcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiUFJPTU9USU9OX0NPREVcIl0gPSBcInByb21vdGlvbkNvZGVcIjtcbiAgcmV0dXJuIEZpZWxkTmFtZTI7XG59KShGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgRmllbGROYW1lRW51bSA9IHoubmF0aXZlRW51bShGaWVsZE5hbWUpO1xudmFyIFByaXZhdGVGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChQcml2YXRlRmllbGROYW1lMikgPT4ge1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkTnVtYmVyXCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmRFeHBpcnlcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZEN2Y1wiO1xuICByZXR1cm4gUHJpdmF0ZUZpZWxkTmFtZTI7XG59KShQcml2YXRlRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IFByaXZhdGVGaWVsZE5hbWVFbnVtID0gei5uYXRpdmVFbnVtKFByaXZhdGVGaWVsZE5hbWUpO1xuY29uc3QgQWxsRmllbGROYW1lcyA9IHoudW5pb24oW0ZpZWxkTmFtZUVudW0sIFByaXZhdGVGaWVsZE5hbWVFbnVtXSk7XG52YXIgRWxlbWVudFR5cGVFbnVtID0gLyogQF9fUFVSRV9fICovICgoRWxlbWVudFR5cGVFbnVtMikgPT4ge1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRFwiXSA9IFwiY2FyZFwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmQtbnVtYmVyXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZC1leHBpcnlcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkLWN2Y1wiO1xuICByZXR1cm4gRWxlbWVudFR5cGVFbnVtMjtcbn0pKEVsZW1lbnRUeXBlRW51bSB8fCB7fSk7XG5jb25zdCBFbGVtZW50VHlwZSA9IHoubmF0aXZlRW51bShFbGVtZW50VHlwZUVudW0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50TWV0aG9kTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBPcHRpb25hbFN0cmluZyxcbiAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgY3ZjOiBPcHRpb25hbFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGNvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFdlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIG1hcmdpbjogT3B0aW9uYWxTdHJpbmcsXG4gIHBhZGRpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgRXZlbnRUeXBlID0gei5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKTtcbmNvbnN0IEdlbmVyaWNFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7IHR5cGU6IEdlbmVyaWNFdmVudFR5cGUgfSk7XG5jb25zdCBJbnB1dEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSk7XG5jb25zdCBJbnB1dEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogSW5wdXRFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBQcml2YXRlRmllbGROYW1lRW51bSxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSk7XG5jb25zdCBFcnJvckV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogRXJyb3JFdmVudFR5cGUsXG4gIG1lc3NhZ2U6IFJlcXVpcmVkU3RyaW5nLFxuICBoZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBBbGxGaWVsZE5hbWVzLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgTGF5b3V0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBSZXF1aXJlZFN0cmluZ1xufSk7XG5jb25zdCBMb2FkZWRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICB0b3RhbEFtb3VudEF0b21zOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogT3B0aW9uYWxTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHouYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEpXG59KTtcbmNvbnN0IFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogei5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHoub3B0aW9uYWwoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBSZXF1aXJlZEZvcm1GaWVsZHMgPSB6Lm9iamVjdCh7XG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBTdWJtaXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKTtcbmNvbnN0IFN1Ym1pdEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogU3VibWl0RXZlbnRUeXBlLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6LmFueSgpLm9wdGlvbmFsKCksXG4gIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogei5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgRXZlbnRQYXlsb2FkID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgR2VuZXJpY0V2ZW50UGF5bG9hZCxcbiAgSW5wdXRFdmVudFBheWxvYWQsXG4gIEVycm9yRXZlbnRQYXlsb2FkLFxuICBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQsXG4gIExheW91dEV2ZW50UGF5bG9hZCxcbiAgTG9hZGVkRXZlbnRQYXlsb2FkLFxuICBTdWJtaXRFdmVudFBheWxvYWQsXG4gIFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQsXG4gIFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkXG5dKTtcbmNvbnN0IEVsZW1lbnRFdmVudCA9IHoub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogei5hcnJheShQYXltZW50TWV0aG9kTWluaW1hbClcbn0pO1xuY29uc3QgRmllbGRWYWxpZGF0aW9uRXJyb3IgPSB6Lm9iamVjdCh7XG4gIGVsZW1lbnRUeXBlOiB6LnN0cmluZygpLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHoubGl0ZXJhbChmYWxzZSksXG4gIGVycm9yX3R5cGU6IHoubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogei5hcnJheShGaWVsZFZhbGlkYXRpb25FcnJvcilcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkUmVzcG9uc2UgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6Lm9iamVjdCh7IHN1Y2Nlc3M6IHoubGl0ZXJhbCh0cnVlKSB9KSxcbiAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuXSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHNcbn0pO1xudmFyIFRocmVlRFNTdGF0dXMgPSAvKiBAX19QVVJFX18gKi8gKChUaHJlZURTU3RhdHVzMikgPT4ge1xuICBUaHJlZURTU3RhdHVzMltcIlNVQ0NFU1NcIl0gPSBcInN1Y2Nlc3NcIjtcbiAgVGhyZWVEU1N0YXR1czJbXCJGQUlMVVJFXCJdID0gXCJmYWlsdXJlXCI7XG4gIFRocmVlRFNTdGF0dXMyW1wiQ0FOQ0VMTEVEXCJdID0gXCJjYW5jZWxsZWRcIjtcbiAgcmV0dXJuIFRocmVlRFNTdGF0dXMyO1xufSkoVGhyZWVEU1N0YXR1cyB8fCB7fSk7XG5jb25zdCBQaW5nM0RTU3RhdHVzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2Nlc3NcIiAvKiBTVUNDRVNTICovLCBcImZhaWx1cmVcIiAvKiBGQUlMVVJFICovLCBcImNhbmNlbGxlZFwiIC8qIENBTkNFTExFRCAqL10pXG59KTtcbmNvbnN0IENvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6LnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogei5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogei5zdHJpbmcoKVxufSk7XG5cbmNvbnN0IGV4dHJhY3RJc3N1ZXNQZXJGaWVsZCA9IChlcnJvcikgPT4ge1xuICBjb25zdCBpc3N1ZXNQZXJGaWVsZCA9IHt9O1xuICBPYmplY3QuZW50cmllcyhlcnJvcikuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IEZpZWxkTmFtZUVudW0ucGFyc2Uoa2V5KTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuX2Vycm9ycykpIHtcbiAgICAgICAgaXNzdWVzUGVyRmllbGRbZmllbGROYW1lXSA9IHZhbHVlLl9lcnJvcnM7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlzc3Vlc1BlckZpZWxkO1xufTtcblxuY29uc3QgU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IG91ckN1cnJlbmN5VG9UaGVpcnMgPSB7XG4gIHVzZDogXCJ1c2RcIixcbiAgYnJsOiBcImJybFwiXG59O1xuY29uc3QgZ2V0TG9hZGVkU3RyaXBlID0gYXN5bmMgKHB1Ymxpc2hhYmxlS2V5KSA9PiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgIGlmICghaXNTdHJpcGVKc1ByZXNlbnQoKSkge1xuICAgICAgYXdhaXQgc2xlZXAoNTAwKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1N0cmlwZUpzUHJlc2VudCgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdHJpcGUgSlMgbm90IGZvdW5kLmApO1xuICB9XG4gIGNvbnN0IHN0cmlwZSA9IG5ldyBTdHJpcGUocHVibGlzaGFibGVLZXkpO1xuICByZXR1cm4gc3RyaXBlO1xufTtcbmNvbnN0IGNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0ID0gYXN5bmMgKHN0cmlwZVB1YktleSwgdG90YWxBbW91bnRBdG9tLCBjdXJyZW5jeSwgaXNBbW91bnRQZW5kaW5nLCBpc0xpbmtPbmx5KSA9PiB7XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShzdHJpcGVQdWJLZXkpO1xuICBjb25zdCBzdHJpcGVDdXJyZW5jeSA9IG91ckN1cnJlbmN5VG9UaGVpcnNbY3VycmVuY3kudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICBjb25zdCBwYXltZW50UmVxdWVzdCA9IHN0cmlwZS5wYXltZW50UmVxdWVzdCh7XG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggc3RyaXBlIGFjY291bnQgY291bnRyeSBhcyBzb29uIGFzIHdlIHN1cHBvcnQgaXRcbiAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgY3VycmVuY3k6IHN0cmlwZUN1cnJlbmN5LFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiB0b3RhbEFtb3VudEF0b20sXG4gICAgICBwZW5kaW5nOiBpc0Ftb3VudFBlbmRpbmdcbiAgICB9LFxuICAgIHJlcXVlc3RQYXllck5hbWU6IHRydWUsXG4gICAgcmVxdWVzdFBheWVyRW1haWw6IHRydWUsXG4gICAgZGlzYWJsZVdhbGxldHM6IFtdIFxuICB9KTtcbiAgcmV0dXJuIHBheW1lbnRSZXF1ZXN0O1xufTtcbmNvbnN0IHNsZWVwID0gKHRpbWVvdXRNcykgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXRNcyk7XG4gIH0pO1xufTtcbmNvbnN0IGlzU3RyaXBlSnNQcmVzZW50ID0gKCkgPT4ge1xuICByZXR1cm4gXCJTdHJpcGVcIiBpbiB3aW5kb3c7XG59O1xuY29uc3Qgd2FpdEZvclVzZXJUb0FkZFBheW1lbnRNZXRob2QgPSBhc3luYyAocGF5bWVudFJlcXVlc3QpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB0cnkge1xuICAgICAgcGF5bWVudFJlcXVlc3Qub24oXCJwYXltZW50bWV0aG9kXCIsIGFzeW5jIChldnQpID0+IHtcbiAgICAgICAgcmVzb2x2ZShldnQpO1xuICAgICAgfSk7XG4gICAgICBwYXltZW50UmVxdWVzdC5vbihcImNhbmNlbFwiLCAoKSA9PiB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheWApKTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJlamVjdChlKTtcbiAgICB9XG4gIH0pO1xufTtcbmNvbnN0IGNvbmZpcm1TdHJpcGVQclBNID0gYXN5bmMgKG5leHRBY3Rpb25NZXRhZGF0YSwgc3RyaXBlUG0pID0+IHtcbiAgaWYgKCFuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BrIHx8ICFuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuZXh0IGFjdGlvbiBtZXRhZGF0YSBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkobmV4dEFjdGlvbk1ldGFkYXRhKX1gKTtcbiAgfVxuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUobmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayk7XG4gIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBzdHJpcGUuY29uZmlybUNhcmRTZXR1cChuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiBzdHJpcGVQbS5wYXltZW50TWV0aG9kLmlkXG4gIH0pO1xuICBpZiAoY29uZmlybVJlc3VsdC5lcnJvcikge1xuICAgIHN0cmlwZVBtLmNvbXBsZXRlKFwiZmFpbFwiKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBheW1lbnQgZmFpbGVkOiAke2NvbmZpcm1SZXN1bHQuZXJyb3IubWVzc2FnZSA/PyBgdW5rbm93bmB9YCk7XG4gIH0gZWxzZSB7XG4gICAgc3RyaXBlUG0uY29tcGxldGUoXCJzdWNjZXNzXCIpO1xuICB9XG4gIHJldHVybiBjb25maXJtUmVzdWx0O1xufTtcbmNvbnN0IGxhdW5jaFN0cmlwZTNEU0RpYWxvZ0Zsb3cgPSBhc3luYyAobmV4dEFjdGlvbk1ldGFkYXRhKSA9PiB7XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BrKTtcbiAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IHN0cmlwZS5jb25maXJtQ2FyZFNldHVwKG5leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcG1faWRcbiAgfSk7XG4gIGNvbnN0IHJlc3VsdFN0YXR1cyA9IGNvbmZpcm1SZXN1bHQuc2V0dXBJbnRlbnQ/LnN0YXR1cztcbiAgaWYgKHJlc3VsdFN0YXR1cyA9PT0gXCJzdWNjZWVkZWRcIikgOyBlbHNlIGlmIChyZXN1bHRTdGF0dXMgPT09IFwiY2FuY2VsZWRcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihgUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5YCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7Y29uZmlybVJlc3VsdC5lcnJvcj8ubWVzc2FnZSA/PyBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50Py5sYXN0X3NldHVwX2Vycm9yPy5tZXNzYWdlID8/IFwiUGF5bWVudCBmYWlsZWQsIHBsZWFzZSBjbGljayBzdWJtaXQgYWdhaW4gdG8gcGF5LlwifWBcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyA9IChzdHlsZXMpID0+IHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0eWxlcyA9IEpTT04uc3RyaW5naWZ5KHN0eWxlcyk7XG4gIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xufTtcblxuY29uc3QgY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtID0gKGZvcm1EaXYsIGluaXRpYWxEaWN0KSA9PiB7XG4gIGNvbnN0IGluY2x1ZGVkSW5wdXRzID0gQXJyYXkuZnJvbShmb3JtRGl2LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcGlkXVwiKSA/PyBbXSk7XG4gIGNvbnN0IGV4dHJhRGF0YSA9IGluY2x1ZGVkSW5wdXRzLnJlZHVjZSgoYWNjLCBpbnB1dCkgPT4ge1xuICAgIGNvbnN0IGtleSA9IGlucHV0LmdldEF0dHJpYnV0ZShcImRhdGEtb3BpZFwiKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuIGFjYztcbiAgICByZXR1cm4geyAuLi5hY2MsIFtrZXldOiBpbnB1dC52YWx1ZSB9O1xuICB9LCB7fSk7XG4gIHJldHVybiBleHRyYURhdGE7XG59O1xuY29uc3QgcGFyc2VFdmVudFBheWxvYWQgPSAoZXZlbnREYXRhKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEVsZW1lbnRFdmVudC5wYXJzZShldmVudERhdGEpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuY29uc3QgZW1pdEV2ZW50ID0gKHRhcmdldCwgZm9ybUlkLCBlbGVtZW50SWQsIHBheWxvYWQsIGJhc2VVcmwpID0+IHtcbiAgY29uc3QgZXZlbnQgPSB7XG4gICAgcGF5bG9hZCxcbiAgICBub25jZTogdjQoKSxcbiAgICBmb3JtSWQsXG4gICAgZWxlbWVudElkXG4gIH07XG4gIHRhcmdldC5wb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeShldmVudCksIGJhc2VVcmwpO1xufTtcblxuY29uc3QgY2hlY2tJZlZhbGlkQ2RlQ29ubmVjdGlvbk9iamVjdCA9IGFzeW5jIChvYmopID0+IHtcbiAgaWYgKHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIgfHwgIW9iaikgcmV0dXJuIGZhbHNlO1xuICB0cnkge1xuICAgIGNvbnN0IHBpbmcgPSB7IHR5cGU6IFwicGluZ1wiIH07XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb2JqLnNlbmQocGluZyk7XG4gICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAndHJ1ZScgYWZ0ZXIgcGluZywgZ290ICR7SlNPTi5zdHJpbmdpZnkocmVzdWx0KX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5jb25zdCBpc1Jlc3VsdFZhbGlkID0gKG9iaiwgaXNWYWxpZCkgPT4ge1xuICByZXR1cm4gISFvYmogJiYgaXNWYWxpZDtcbn07XG5cbmNvbnN0IG51bGxPclVuZGVmT3IgPSAoelR5cGUpID0+IHoubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG56LnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbmNvbnN0IENERVJlc3BvbnNlRXJyb3IgPSB6Lm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6LmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgaGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56LmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IENvdXBvbk1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogei5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0gei5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKTtcbmNvbnN0IEJyYW5kID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBzZXR0aW5nczogbnVsbE9yVW5kZWZPcihCcmFuZFNldHRpbmdzKVxufSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBxdWFudGl0eTogei5udW1iZXIoKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6LmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpXG59KTtcbmNvbnN0IEludm9pY2VMaW5lSXRlbU1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IERpc2NvdW50TWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY291cG9uOiBDb3Vwb25NaW5pbWFsXG59KTtcbmNvbnN0IEludm9pY2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6LmFycmF5KERpc2NvdW50TWluaW1hbCksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZXM6IHouYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbClcbn0pO1xuY29uc3QgQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjcmVhdGVkOiB6LmFycmF5KFN1YnNjcmlwdGlvbk1pbmltYWwpLFxuICBpbnZvaWNlczogei5hcnJheShJbnZvaWNlTWluaW1hbClcbn0pO1xuY29uc3QgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gIGNvdXBvbnM6IHouYXJyYXkoQ291cG9uTWluaW1hbClcbn0pO1xuY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJvcGVuXCIpLFxuICB0b2tlbjogei5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmVfaXRlbXM6IHouYXJyYXkoTGluZUl0ZW0pLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBCcmFuZCxcbiAgc3Vic19wcmV2aWV3OiBudWxsT3JVbmRlZk9yKFByZXZpZXdDaGVja291dFJlc3BvbnNlKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6LmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZClcbn0pO1xuY29uc3QgUGF5bWVudEZvcm1QcmVmaWxsID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgei5vYmplY3Qoe1xuICAgIG1vZGU6IHoubGl0ZXJhbChcInNldHVwXCIpLFxuICAgIGN1cnJlbmN5OiB6Lm51bGxhYmxlKHoudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKSxcbiAgei5vYmplY3Qoe1xuICAgIG1vZGU6IHouZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogei5zdHJpbmcoKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSlcbl0pO1xuY29uc3QgQ29tcGxldGVkRm9ybVByZWZpbGwgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pO1xuY29uc3QgRXhwaXJlZEZvcm1QcmVmaWxsID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHoubGl0ZXJhbChcImV4cGlyZWRcIilcbn0pO1xuei51bmlvbihbUGF5bWVudEZvcm1QcmVmaWxsLCBDb21wbGV0ZWRGb3JtUHJlZmlsbCwgRXhwaXJlZEZvcm1QcmVmaWxsXSk7XG56Lm9iamVjdCh7XG4gIGxvZ286IHouc3RyaW5nKCksXG4gIGljb246IHouc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHouc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogei5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCksXG4gIGN1c3RvbWVyX3ppcF9jb2RlOiB6LnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6LnN0cmluZygpLFxuICBsaW5lX2l0ZW1zOiB6LmFycmF5KExpbmVJdGVtKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHouYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9tb3Rpb25fY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgbG9jOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBtc2c6IHouc3RyaW5nKCksXG4gIHVybDogei5zdHJpbmcoKVxufSk7XG56LmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yKTtcbmNvbnN0IFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG56Lm9iamVjdCh7XG4gIGZpZWxkczogUFJGb3JtRmllbGRzLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZFxufSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZFxufSk7XG5jb25zdCBTdGFydFBheW1lbnRGbG93Rm9yQ0NSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKSxcbiAgY2NfcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuei5yZWNvcmQoei5hbnkoKSk7XG5cbmNvbnN0IHN1bSA9IChhcnIpID0+IHtcbiAgcmV0dXJuIGFyci5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbn07XG5cbmZ1bmN0aW9uIGZpeFByb3RvKHRhcmdldCwgcHJvdG90eXBlKSB7XG4gIHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgc2V0UHJvdG90eXBlT2YgPyBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkgOiB0YXJnZXQuX19wcm90b19fID0gcHJvdG90eXBlO1xufVxuZnVuY3Rpb24gZml4U3RhY2sodGFyZ2V0LCBmbikge1xuICBpZiAoZm4gPT09IHZvaWQgMCkge1xuICAgIGZuID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB9XG5cbiAgdmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGNhcHR1cmVTdGFja1RyYWNlICYmIGNhcHR1cmVTdGFja1RyYWNlKHRhcmdldCwgZm4pO1xufVxuXG52YXIgX19leHRlbmRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX2V4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiBleHRlbmRTdGF0aWNzKGQsIGIpIHtcbiAgICBfZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICBfX3Byb3RvX186IFtdXG4gICAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBkLl9fcHJvdG9fXyA9IGI7XG4gICAgfSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZm9yICh2YXIgcCBpbiBiKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gX2V4dGVuZFN0YXRpY3MoZCwgYik7XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbCkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuXG4gICAgX2V4dGVuZFN0YXRpY3MoZCwgYik7XG5cbiAgICBmdW5jdGlvbiBfXygpIHtcbiAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBkO1xuICAgIH1cblxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgfTtcbn0oKTtcblxudmFyIEN1c3RvbUVycm9yID0gZnVuY3Rpb24gKF9zdXBlcikge1xuICBfX2V4dGVuZHMoQ3VzdG9tRXJyb3IsIF9zdXBlcik7XG5cbiAgZnVuY3Rpb24gQ3VzdG9tRXJyb3IobWVzc2FnZSwgb3B0aW9ucykge1xuICAgIHZhciBfbmV3VGFyZ2V0ID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG1lc3NhZ2UsIG9wdGlvbnMpIHx8IHRoaXM7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICduYW1lJywge1xuICAgICAgdmFsdWU6IF9uZXdUYXJnZXQubmFtZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgZml4UHJvdG8oX3RoaXMsIF9uZXdUYXJnZXQucHJvdG90eXBlKTtcbiAgICBmaXhTdGFjayhfdGhpcyk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgcmV0dXJuIEN1c3RvbUVycm9yO1xufShFcnJvcik7XG5cbmNsYXNzIENkZUVycm9yIGV4dGVuZHMgQ3VzdG9tRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZXNwb25zZSkge1xuICAgIGNvbnN0IGZyaWVuZGx5TWVzc2FnZSA9IGBbY2RlLWNsaWVudF0gRXJyb3IgcXVlcnlpbmcgQ0RFOiAke3Jlc3BvbnNlLm1lc3NhZ2V9YDtcbiAgICBzdXBlcihmcmllbmRseU1lc3NhZ2UpO1xuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgfVxuICBnZXQgb3JpZ2luYWxFcnJvck1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzcG9uc2UubWVzc2FnZTtcbiAgfVxufVxuY29uc3QgcXVlcnlDREUgPSBhc3luYyAoY2RlQ29ubiwgZGF0YSwgcmVzcG9uc2VTY2hlbWEpID0+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjZGVDb25uLnNlbmQoZGF0YSk7XG4gIGlmIChpc0NERVJlc3BvbnNlRXJyb3IocmVzcG9uc2UpKSB7XG4gICAgdGhyb3cgbmV3IENkZUVycm9yKHJlc3BvbnNlKTtcbiAgfVxuICBpZiAoIWNoZWNrSWZDb25mb3Jtc1RvU2NoZW1hKHJlc3BvbnNlLCByZXNwb25zZVNjaGVtYSkpIHtcbiAgICBjb25zdCByZXN1bHQgPSByZXNwb25zZVNjaGVtYS5zYWZlUGFyc2UocmVzcG9uc2UpO1xuICAgIGlmIChyZXN1bHQuc3VjY2VzcykgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZVwiKTtcbiAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlO1xufTtcbmNvbnN0IGNoZWNrSWZDb25mb3Jtc1RvU2NoZW1hID0gKHZhbHVlLCBzY2hlbWEpID0+IHtcbiAgcmV0dXJuIHNjaGVtYS5zYWZlUGFyc2UodmFsdWUpLnN1Y2Nlc3M7XG59O1xuY29uc3QgaXNDREVSZXNwb25zZUVycm9yID0gKHJlc3BvbnNlKSA9PiB7XG4gIHJldHVybiBDREVSZXNwb25zZUVycm9yLnNhZmVQYXJzZShyZXNwb25zZSkuc3VjY2Vzcztcbn07XG5jb25zdCBnZXRDaGVja291dFByZXZpZXcgPSBhc3luYyAoY2RlQ29ubiwgcmVxdWVzdCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImdldF9jaGVja291dF9wcmV2aWV3XCIsIHBheWxvYWQ6IHJlcXVlc3QgfSwgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UpO1xufTtcbmNvbnN0IGdldFByZWZpbGwgPSBhc3luYyAoY2RlQ29ubikgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImdldF9wcmVmaWxsXCIsIHBheWxvYWQ6IHt9IH0sIFBheW1lbnRGb3JtUHJlZmlsbCk7XG59O1xuY29uc3Qgc3RhcnRQYXltZW50Rmxvd0ZvckNDID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCIsIHBheWxvYWQgfSwgU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UpO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3dGb3JQUiA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCBwYXlsb2FkIH0sIFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG59O1xuY29uc3QgY29uZmlybVBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkIH0sIENvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKTtcbn07XG5jb25zdCBnZXRDaGVja291dFZhbHVlID0gYXN5bmMgKGNkZUNvbm4sIHNlY3VyZVRva2VuLCBwcm9tb0NvZGUpID0+IHtcbiAgY29uc3QgY2hlY2tvdXRQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3KGNkZUNvbm4sIHtcbiAgICBzZWN1cmVfdG9rZW46IHNlY3VyZVRva2VuLFxuICAgIHByb21vdGlvbl9jb2RlOiBwcm9tb0NvZGVcbiAgfSk7XG4gIGNvbnN0IGN1cnJlbmNpZXMgPSBuZXcgU2V0KGNoZWNrb3V0UHJldmlldy5wcmV2aWV3Lmludm9pY2VzLm1hcCgoaW52KSA9PiBpbnYuY3VycmVuY3kpKTtcbiAgaWYgKGN1cnJlbmNpZXMuc2l6ZSAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgY3VycmVuY3ksIGdvdCAke2N1cnJlbmNpZXMuc2l6ZX1gKTtcbiAgfVxuICBjb25zdCBjdXJyZW5jeSA9IGN1cnJlbmNpZXMudmFsdWVzKCkubmV4dCgpLnZhbHVlID8/IFwidXNkXCI7XG4gIGNvbnN0IGFtb3VudEF0b20gPSBzdW0oY2hlY2tvdXRQcmV2aWV3LnByZXZpZXcuaW52b2ljZXMubWFwKChpbnYpID0+IGludi5yZW1haW5pbmdfYW1vdW50X2F0b20pKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeSxcbiAgICBhbW91bnRBdG9tXG4gIH07XG59O1xuY29uc3QgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50ID0gYXN5bmMgKGNkZUNvbm4sIHNlY3VyZVRva2VuLCBpc1NldHVwTW9kZSwgcHJvbW9Db2RlKSA9PiB7XG4gIGlmIChpc1NldHVwTW9kZSkge1xuICAgIHJldHVybiB7IGFtb3VudEF0b206IDAsIGN1cnJlbmN5OiBcInVzZFwiIH07XG4gIH0gZWxzZSB7XG4gICAgcHJvbW9Db2RlID0gIXByb21vQ29kZSA/IHZvaWQgMCA6IHByb21vQ29kZTtcbiAgICBjb25zdCBjaGVja291dFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFZhbHVlKGNkZUNvbm4sIHNlY3VyZVRva2VuLCBwcm9tb0NvZGUpO1xuICAgIHJldHVybiB7IGFtb3VudEF0b206IGNoZWNrb3V0UHJldmlldy5hbW91bnRBdG9tLCBjdXJyZW5jeTogY2hlY2tvdXRQcmV2aWV3LmN1cnJlbmN5IH07XG4gIH1cbn07XG5jb25zdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zID0gYXN5bmMgKGFsbENkZUNvbm5lY3Rpb25zLCBwYXlsb2FkKSA9PiB7XG4gIGlmIChhbGxDZGVDb25uZWN0aW9ucy5zaXplID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gQ0RFIGNvbm5lY3Rpb25zIGZvdW5kXCIpO1xuICB9XG4gIGNvbnN0IHJlc3BvbnNlcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgIEFycmF5LmZyb20oYWxsQ2RlQ29ubmVjdGlvbnMudmFsdWVzKCkpLm1hcChcbiAgICAgIChjZGVDb25uKSA9PiBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwidG9rZW5pemVfY2FyZFwiLCBwYXlsb2FkIH0sIFRva2VuaXplQ2FyZFJlc3BvbnNlKVxuICAgIClcbiAgKTtcbiAgcmV0dXJuIHJlc3BvbnNlcztcbn07XG5jb25zdCBjaGVja291dENhcmRFbGVtZW50cyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCIsIHBheWxvYWQgfSwgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuY29uc3Qgc2V0dXBDaGVja291dCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZCB9LCBTZXR1cENoZWNrb3V0UmVzcG9uc2UpO1xufTtcbmNvbnN0IHBlcmZvcm1DaGVja291dCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiY2hlY2tvdXRcIiwgcGF5bG9hZCB9LCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSk7XG59O1xuY29uc3QgQ0RFX1BPTExJTkdfSU5URVJWQUwgPSAxZTM7XG5jb25zdCBwaW5nQ2RlRm9yM2RzU3RhdHVzID0gYXN5bmMgKGlmcmFtZSwgY2hpbGRPcmlnaW4pID0+IHtcbiAgY29uc3QgY29ubmVjdGlvbiA9IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWUsXG4gICAgZGVidWc6IHRydWUsXG4gICAgdGltZW91dDogQ0RFX1BPTExJTkdfSU5URVJWQUwsXG4gICAgY2hpbGRPcmlnaW46IFwiKlwiXG4gICAgLy8gVE9ETzogdXNlIHdpdGggcHJvcGVyIGNoaWxkT3JpZ2luXG4gIH0pO1xuICBjb25zdCBjb25uZWN0aW9uT2JqID0gYXdhaXQgY29ubmVjdGlvbi5wcm9taXNlO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBxdWVyeUNERShjb25uZWN0aW9uT2JqLCB7IHR5cGU6IFwicGluZy0zZHMtc3RhdHVzXCIgfSwgUGluZzNEU1N0YXR1c1Jlc3BvbnNlKTtcbiAgcmV0dXJuIHJlc3VsdC5zdGF0dXM7XG59O1xuXG5jb25zdCBzdHlsZXMgPSBcIkBrZXlmcmFtZXMgZmFkZUluezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjkpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9fS5vdmVybGF5e3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3otaW5kZXg6MjE0NzQ4MzY0OCFpbXBvcnRhbnQ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6IzAwMDAwMDgwfS5jb250YWluZXJ7bWF4LXdpZHRoOjUwMHB4O21heC1oZWlnaHQ6NjAwcHg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7cG9zaXRpb246cmVsYXRpdmU7YW5pbWF0aW9uOmZhZGVJbiAuM3MgZWFzZS1vdXR9LmZyYW1le21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7Ym9yZGVyOm5vbmV9LmNhbmNlbC1idXR0b257cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6bm9uZTtmb250LXNpemU6MXJlbTtjb2xvcjojZmZmO2N1cnNvcjpwb2ludGVyO3RvcDotMS41cmVtO3BhZGRpbmc6MDtyaWdodDowfVwiO1xuXG5jb25zdCBjcmVhdGVBbmRPcGVuRnJhbWUgPSAodXJsKSA9PiB7XG4gIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBgXG4gICAgPHN0eWxlPlxuICAgICAgJHtzdHlsZXN9XG4gICAgPC9zdHlsZT5cbiAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8aWZyYW1lIHNyYz1cIiR7dXJsfVwiIGNsYXNzPVwiZnJhbWVcIiBpZD1cInRocmVlLWRzLWlmcmFtZVwiIHRpdGxlPVwiM0QgU2VjdXJlIHZlcmlmaWNhdGlvblwiIGFsbG93PVwicGF5bWVudFwiPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG4gIGNvbnN0IGhvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBjb25zdCBzaGFkb3dSb290ID0gaG9zdC5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgc2hhZG93Um9vdC5hcHBlbmRDaGlsZCh0ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKSk7XG4gIGNvbnN0IGlmcmFtZSA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcIiN0aHJlZS1kcy1pZnJhbWVcIik7XG4gIGNvbnN0IGNhbmNlbEJ1dHRvbiA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcIi5jYW5jZWwtYnV0dG9uXCIpO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhvc3QpO1xuICByZXR1cm4geyBob3N0LCBpZnJhbWUsIGNhbmNlbEJ1dHRvbiB9O1xufTtcblxuZnVuY3Rpb24gc3RhcnRQb2xsaW5nKGlmcmFtZSwgb25TdWNjZXNzLCBjaGlsZE9yaWdpbikge1xuICBjb25zdCBoYW5kbGVQb2xsaW5nID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBwaW5nQ2RlRm9yM2RzU3RhdHVzKGlmcmFtZSwgY2hpbGRPcmlnaW4pO1xuICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICBjbGVhckludGVydmFsKHBvbGxpbmdJbnRlcnZhbCk7XG4gICAgICAgIG9uU3VjY2VzcyhzdGF0dXMpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgfVxuICB9O1xuICBoYW5kbGVQb2xsaW5nKCk7XG4gIGNvbnN0IHBvbGxpbmdJbnRlcnZhbCA9IHNldEludGVydmFsKGhhbmRsZVBvbGxpbmcsIENERV9QT0xMSU5HX0lOVEVSVkFMKTtcbiAgcmV0dXJuIHBvbGxpbmdJbnRlcnZhbDtcbn1cbmZ1bmN0aW9uIGhhbmRsZUV2ZW50cyh7XG4gIGVsZW1lbnRzLFxuICBwb2xsaW5nSW50ZXJ2YWwsXG4gIHJlc29sdmVcbn0pIHtcbiAgY29uc3QgaGFuZGxlQ2FuY2VsID0gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZ0ludGVydmFsKTtcbiAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgIHJlc29sdmUoVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpO1xuICB9O1xuICBlbGVtZW50cy5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gIGNvbnN0IGNsZWFudXBFdmVudExpc3RlbmVycyA9ICgpID0+IHtcbiAgICBlbGVtZW50cy5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gIH07XG4gIHJldHVybiBjbGVhbnVwRXZlbnRMaXN0ZW5lcnM7XG59XG5hc3luYyBmdW5jdGlvbiBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gIHVybCxcbiAgYmFzZVVybFxufSkge1xuICBjb25zdCBlbGVtZW50cyA9IGNyZWF0ZUFuZE9wZW5GcmFtZSh1cmwpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoc3RhdHVzKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZWxlbWVudHMuaG9zdC5yZW1vdmUoKTtcbiAgICAgIH0sIDFlMyk7XG4gICAgICByZXNvbHZlKHN0YXR1cyk7XG4gICAgICBjbGVhbnVwRXZlbnRMaXN0ZW5lcnM/LigpO1xuICAgIH07XG4gICAgY29uc3QgcG9sbGluZ0ludGVydmFsID0gc3RhcnRQb2xsaW5nKGVsZW1lbnRzLmlmcmFtZSwgb25TdWNjZXNzLCBuZXcgVVJMKGJhc2VVcmwpLm9yaWdpbik7XG4gICAgY29uc3QgY2xlYW51cEV2ZW50TGlzdGVuZXJzID0gaGFuZGxlRXZlbnRzKHtcbiAgICAgIGVsZW1lbnRzLFxuICAgICAgcG9sbGluZ0ludGVydmFsLFxuICAgICAgcmVzb2x2ZVxuICAgIH0pO1xuICB9KTtcbn1cblxuY29uc3QgYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMgPSAoc2ltcGxlT2pzRmxvdykgPT4ge1xuICByZXR1cm4gYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBwYXJhbXMuZmxvd0NhbGxiYWNrcy5vbkNoZWNrb3V0U3RhcnRlZCgpO1xuICAgICAgY29uc3QgZmxvd1Jlc3VsdCA9IGF3YWl0IHNpbXBsZU9qc0Zsb3cocGFyYW1zKTtcbiAgICAgIGlmIChmbG93UmVzdWx0Lm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICBwYXJhbXMuZmxvd0NhbGxiYWNrcy5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MoZmxvd1Jlc3VsdC5yZXN1bHQucGF5bWVudF9tZXRob2RfaWQpO1xuICAgICAgfSBlbHNlIGlmIChmbG93UmVzdWx0Lm1vZGUgPT09IFwiY2hlY2tvdXRcIikge1xuICAgICAgICBwYXJhbXMuZmxvd0NhbGxiYWNrcy5vbkNoZWNrb3V0U3VjY2VzcyhcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgICAgZmxvd1Jlc3VsdC5yZXN1bHQuc3Vic2NyaXB0aW9uX2lkcyxcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5jdXN0b21lcl9pZFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgbW9kZTogJHtmbG93UmVzdWx0fWApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBwYXJhbXMuZmxvd0NhbGxiYWNrcy5vbkNoZWNrb3V0RXJyb3IoZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH07XG59O1xuY29uc3QgYWRkRXJyb3JDYXRjaGVyRm9ySW5pdCA9IChpbml0KSA9PiB7XG4gIHJldHVybiBhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBpbml0KHBhcmFtcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IHsgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiaW5pdC1lcnJvci1jYXRjaGVyXCIpO1xuICAgICAgZXJyX18oZXJyb3IpO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlLCByZWFzb246IGdldEVycm9yTWVzc2FnZShlcnJvcikgfTtcbiAgICB9XG4gIH07XG59O1xuY29uc3QgY3JlYXRlT2pzRmxvd0xvZ2dlcnMgPSAocHJlZml4KSA9PiB7XG4gIGNvbnN0IGxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS5sb2coYCR7Y2hhbGsuZ3JlZW4uYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIGNvbnN0IGVyciA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS5lcnJvcihgJHtjaGFsay5yZWQuYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nLFxuICAgIGVycixcbiAgICBsb2dfXzogbG9nLFxuICAgIGVycl9fOiBlcnJcbiAgfTtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDMsIGVycl9fOiBlcnJfXyQ0IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vbi1jY1wiKTtcbmNvbnN0IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDID0gKG5vbkNkZUZvcm1JbnB1dHMsIG9uVmFsaWRhdGlvbkVycm9yKSA9PiB7XG4gIGNvbnN0IHBheWxvYWQgPSBSZXF1aXJlZEZvcm1GaWVsZHMuc2FmZVBhcnNlKG5vbkNkZUZvcm1JbnB1dHMpO1xuICBpZiAoIXBheWxvYWQuc3VjY2Vzcykge1xuICAgIGNvbnN0IGZvcm1hdHRlZCA9IHBheWxvYWQuZXJyb3IuZm9ybWF0KCk7XG4gICAgY29uc3QgaXNzdWVzID0gZXh0cmFjdElzc3Vlc1BlckZpZWxkKGZvcm1hdHRlZCk7XG4gICAgZm9yIChjb25zdCBbZmllbGROYW1lLCBlcnJvcnNdIG9mIE9iamVjdC5lbnRyaWVzKGlzc3VlcykpIHtcbiAgICAgIG9uVmFsaWRhdGlvbkVycm9yKGZpZWxkTmFtZSwgZXJyb3JzLCBmaWVsZE5hbWUpO1xuICAgIH1cbiAgICBlcnJfXyQ0KGBHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc2AsIGlzc3Vlcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gIH1cbiAgcmV0dXJuIHBheWxvYWQuZGF0YTtcbn07XG5jb25zdCB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHMgPSAodG9rZW5pemVSZXN1bHRzLCBvblZhbGlkYXRpb25FcnJvcikgPT4ge1xuICBmb3IgKGNvbnN0IHRva2VuaXplUmVzdWx0IG9mIHRva2VuaXplUmVzdWx0cykge1xuICAgIGlmICh0b2tlbml6ZVJlc3VsdC5zdWNjZXNzID09PSBmYWxzZSkge1xuICAgICAgdG9rZW5pemVSZXN1bHQuZXJyb3JzLmZvckVhY2goKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEFsbEZpZWxkTmFtZXMuc2FmZVBhcnNlKGVycm9yLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgaWYgKCFwYXJzZWQuc3VjY2Vzcykge1xuICAgICAgICAgIGVycl9fJDQoYFVua25vd24gZmllbGQgbmFtZSBpbiBvblZhbGlkYXRpb25FcnJvcjogJHtlcnJvci5lbGVtZW50VHlwZX1gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBwYXJzZWQuZGF0YTtcbiAgICAgICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9yLmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbG9nX18kMyhgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkodG9rZW5pemVSZXN1bHQuZXJyb3JzKX1gKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyB3aGlsZSB0b2tlbml6aW5nIGNhcmRcIik7XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCB7IGVycl9fOiBlcnJfXyQzIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1tb25cIik7XG5jb25zdCBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlID0gKHJlc3BvbnNlKSA9PiB7XG4gIGlmIChyZXNwb25zZS5wYXltZW50X21ldGhvZHMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBwYXltZW50IG1ldGhvZCwgZ290ICR7cmVzcG9uc2UucGF5bWVudF9tZXRob2RzLmxlbmd0aH1gKTtcbiAgfVxuICByZXR1cm4geyBwYXltZW50X21ldGhvZF9pZDogcmVzcG9uc2UucGF5bWVudF9tZXRob2RzWzBdLmlkIH07XG59O1xuY29uc3QgZmluZENwbU1hdGNoaW5nVHlwZSA9IChhbGxDUE1zLCB6b2RNb2RlbCkgPT4ge1xuICBjb25zdCBjcG0gPSBhbGxDUE1zLmZpbmQoKGNwbTIpID0+IHpvZE1vZGVsLnNhZmVQYXJzZShjcG0yKS5zdWNjZXNzKTtcbiAgaWYgKCFjcG0pIHtcbiAgICBlcnJfXyQzKGBObyBDUE1zIGZvdW5kIGZvciBtb2RlbCAke3pvZE1vZGVsfWApO1xuICAgIGVycl9fJDMoYWxsQ1BNcyk7XG4gICAgZXJyX18kMyhgem9kTW9kZWxgKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgZm9yIG1vZGVsICR7em9kTW9kZWx9YCk7XG4gIH1cbiAgcmV0dXJuIHpvZE1vZGVsLnBhcnNlKGNwbSk7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQyLCBlcnJfXzogZXJyX18kMiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG5jb25zdCB7IGxvZ19fOiBzdHJpcGVMb2dfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUtY2NcIik7XG5jb25zdCBydW5Db21tb25DY0Zsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHsgY29udGV4dCwgY2hlY2tvdXRQYXltZW50TWV0aG9kLCBub25DZGVGb3JtSW5wdXRzLCBmbG93Q2FsbGJhY2tzIH0pID0+IHtcbiAgICBsb2dfXyQyKGDilJwgUnVubmluZyBjb21tb24gQ0MgZmxvdy4uLmAsIHsgY2hlY2tvdXRQYXltZW50TWV0aG9kIH0pO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBBcnJheS5mcm9tKGNvbnRleHQuY2RlQ29ubmVjdGlvbnMudmFsdWVzKCkpWzBdO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGxvZ19fJDIoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cHJlZmlsbC5tb2RlfV1gKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZmxvd0NhbGxiYWNrcy5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgbG9nX18kMihg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICBjb25zdCB0b2tlbml6ZUNhcmRSZXN1bHRzID0gYXdhaXQgdG9rZW5pemVDYXJkT25BbGxDb25uZWN0aW9ucyhjb250ZXh0LmNkZUNvbm5lY3Rpb25zLCB7XG4gICAgICBzZXNzaW9uX2lkOiBjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkXG4gICAgfSk7XG4gICAgdmFsaWRhdGVUb2tlbml6ZUNhcmRSZXN1bHRzKHRva2VuaXplQ2FyZFJlc3VsdHMsIGZsb3dDYWxsYmFja3Mub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGNvbnN0IGNvbW1vbkNoZWNrb3V0UGFyYW1zID0ge1xuICAgICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBub25DZGVGb3JtRmllbGRzXG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgIGxvZ19fJDIoYOKUnCBTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kIGluIENERSBbVG9rZW46ICR7cHJlZmlsbC50b2tlbn1dYCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNldHVwQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICAgICAgICBsb2dfXyQyKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7cmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkfV1gKTtcbiAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ19fJDIoYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2NvbnRleHQuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja291dENhcmRFbGVtZW50cyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgIGxvZ19fJDIoYOKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LmApO1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBDZGVFcnJvcikge1xuICAgICAgICBpZiAoZXJyb3Iub3JpZ2luYWxFcnJvck1lc3NhZ2UgPT09IFwiM0RTX1JFUVVJUkVEXCIpIHtcbiAgICAgICAgICBsb2dfXyQyKGDilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93YCk7XG4gICAgICAgICAgY29uc3Qgc2hvdWxkVXNlTmV3RmxvdyA9IGVycm9yLnJlc3BvbnNlLmhlYWRlcnM/LltcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0gPT09IFwidHJ1ZVwiO1xuICAgICAgICAgIGNvbnN0IHN0YXJ0UGZSZXN1bHQgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93Rm9yQ0MoYW55Q2RlQ29ubmVjdGlvbiwgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICAgICAgICAgIGxvZ19fJDIoYOKUnCBvcC1zaG91bGQtdXNlLW5ldy1mbG93OiAke3Nob3VsZFVzZU5ld0Zsb3d9YCk7XG4gICAgICAgICAgbG9nX18kMihg4pScIFBheW1lbnQgZmxvdyByZXN1bHQ6YCwgc3RhcnRQZlJlc3VsdCk7XG4gICAgICAgICAgaWYgKHNob3VsZFVzZU5ld0Zsb3cpIHtcbiAgICAgICAgICAgIGF3YWl0IGNvbW1vbkNDM0RTRmxvdyhzdGFydFBmUmVzdWx0LCBjb250ZXh0LmJhc2VVcmwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhd2FpdCBzdHJpcGVDQzNEU0Zsb3coc3RhcnRQZlJlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICAgICAgbG9nX18kMihg4pScIENvbmZpcm1pbmcgcGF5bWVudCBmbG93IFtjY19wbV9pZDogJHtzdGFydFBmUmVzdWx0LmNjX3BtX2lkfV1gKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBzdGFydFBmUmVzdWx0LmNjX3BtX2lkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxvZ19fJDIoYOKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OmAsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICAgICAgbG9nX18kMihg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke2NyZWF0ZWRQYXltZW50TWV0aG9kLnBheW1lbnRfbWV0aG9kX2lkfV1gKTtcbiAgICAgICAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBjcmVhdGVkUGF5bWVudE1ldGhvZCB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2dfXyQyKGDilJwgQ2hlY2tpbmcgb3V0IGFmdGVyIDNEUyBmbG93IFtGbG93OiAke3Nob3VsZFVzZU5ld0Zsb3cgPyBcIm5ld1wiIDogXCJsZWdhY3lcIn1dYCk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja291dENhcmRFbGVtZW50cyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgICAgIC4uLmNvbW1vbkNoZWNrb3V0UGFyYW1zLFxuICAgICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogc3RhcnRQZlJlc3VsdC5jY19wbV9pZCxcbiAgICAgICAgICAgICAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogIXNob3VsZFVzZU5ld0Zsb3dcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbG9nX18kMihg4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuYCk7XG4gICAgICAgICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXJyX18kMihg4pWwIEVycm9yIGNoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFYCk7XG4gICAgICBlcnJfXyQyKGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuKTtcbmNvbnN0IHBhcnNlU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gKHJlc3BvbnNlKSA9PiB7XG4gIGNvbnN0IHN0cmlwZUFjdGlvbiA9IHJlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcInN0cmlwZV8zZHNcIik7XG4gIGlmICghc3RyaXBlQWN0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc3RyaXBlIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIH1cbiAgcmV0dXJuIFN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShzdHJpcGVBY3Rpb24pO1xufTtcbmNvbnN0IHBhcnNlQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gKHJlc3BvbnNlKSA9PiB7XG4gIGNvbnN0IGNvbW1vbkFjdGlvbiA9IHJlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIGlmICghY29tbW9uQWN0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29tbW9uIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIH1cbiAgcmV0dXJuIENvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShjb21tb25BY3Rpb24pO1xufTtcbmNvbnN0IGNvbW1vbkNDM0RTRmxvdyA9IGFzeW5jIChzdGFydFBmUmVzdWx0LCBiYXNlVXJsKSA9PiB7XG4gIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHBhcnNlQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhKHN0YXJ0UGZSZXN1bHQpO1xuICBsb2dfXyQyKGDilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93IFtVUkw6ICR7bmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybH1dYCk7XG4gIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHsgdXJsOiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsLCBiYXNlVXJsIH0pO1xuICBsb2dfXyQyKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICB9XG59O1xuY29uc3Qgc3RyaXBlQ0MzRFNGbG93ID0gYXN5bmMgKHN0YXJ0UGZSZXN1bHQpID0+IHtcbiAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQZlJlc3VsdCk7XG4gIHN0cmlwZUxvZ19fKGDilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93IFtDbGllbnQgU2VjcmV0OiAke25leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0LnN1YnN0cmluZygwLCA4KX0uLi5dYCk7XG4gIGF3YWl0IGxhdW5jaFN0cmlwZTNEU0RpYWxvZ0Zsb3cobmV4dEFjdGlvbk1ldGFkYXRhKTtcbiAgc3RyaXBlTG9nX18oXCLilbAgU3RyaXBlIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcIik7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQxLCBlcnJfXzogZXJyX18kMSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUtcHJcIik7XG5jb25zdCBTdHJpcGVQckNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoudW5pb24oW3oubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBpbml0U3RyaXBlUHJGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCB9KSA9PiB7XG4gICAgbG9nX18kMShgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5gKTtcbiAgICBjb25zdCBjaGVja291dFBheW1lbnRNZXRob2QgPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlUHJDcG0pO1xuICAgIGxvZ19fJDEoYEluaXRpYWxpemluZyBTdHJpcGUgUFIgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBBcnJheS5mcm9tKGNvbnRleHQuY2RlQ29ubmVjdGlvbnMudmFsdWVzKCkpWzBdO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgbG9nX18kMShgR2V0dGluZyBpbml0aWFsIHByZXZpZXcgYW1vdW50YCk7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3QgcHIgPSBhd2FpdCBjcmVhdGVTdHJpcGVQYXltZW50UmVxdWVzdChcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBpbml0aWFsUHJldmlldy5hbW91bnRBdG9tLFxuICAgICAgaW5pdGlhbFByZXZpZXcuY3VycmVuY3ksXG4gICAgICBpc1NldHVwTW9kZVxuICAgICk7XG4gICAgbG9nX18kMShgQ2hlY2tpbmcgaWYgY2FuIG1ha2UgcGF5bWVudGApO1xuICAgIGNvbnN0IGNhbk1ha2VQYXltZW50ID0gYXdhaXQgcHIuY2FuTWFrZVBheW1lbnQoKTtcbiAgICBpZiAoY2FuTWFrZVBheW1lbnQgPT09IG51bGwpIHtcbiAgICAgIGVycl9fJDEoYGNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxgKTtcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiBmYWxzZSwgcmVhc29uOiBcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiB9O1xuICAgIH1cbiAgICBsb2dfXyQxKGBTdHJpcGUgUFIgZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIENhbiBtYWtlIHBheW1lbnRgLCBjYW5NYWtlUGF5bWVudCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgcHIsXG4gICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHtcbiAgICAgICAgYXBwbGVQYXk6IGNhbk1ha2VQYXltZW50LmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGNhbk1ha2VQYXltZW50Lmdvb2dsZVBheVxuICAgICAgfVxuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5TdHJpcGVQckZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZsb3dDYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zLFxuICAgIGluaXRSZXN1bHRcbiAgfSkgPT4ge1xuICAgIGxvZ19fJDEoYFJ1bm5pbmcgU3RyaXBlIFBSIGZsb3cuLi5gKTtcbiAgICBpZiAoY3VzdG9tUGFyYW1zLnByb3ZpZGVyICE9PSBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgbWlzbWF0Y2guIEV4cGVjdGVkICR7Y3VzdG9tUGFyYW1zLnByb3ZpZGVyfSwgZ290ICR7Y2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyfWApO1xuICAgIH1cbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gQXJyYXkuZnJvbShjb250ZXh0LmNkZUNvbm5lY3Rpb25zLnZhbHVlcygpKVswXTtcbiAgICBjb25zdCBwciA9IGluaXRSZXN1bHQucHI7XG4gICAgaWYgKGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdCkge1xuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBjdXN0b21QYXJhbXMub3ZlcnJpZGVQYXltZW50UmVxdWVzdDtcbiAgICAgIGxvZ19fJDEoYE92ZXJyaWRpbmcgUFIgYW1vdW50IHdpdGhgLCBvdmVycmlkZSk7XG4gICAgICB1cGRhdGVQcldpdGhBbW91bnQocHIsIG92ZXJyaWRlLmFtb3VudCwgb3ZlcnJpZGUucGVuZGluZyk7XG4gICAgfVxuICAgIGxvZ19fJDEoYFNob3dpbmcgUFIgZGlhbG9nLi4uYCk7XG4gICAgcHIuc2hvdygpO1xuICAgIGNvbnN0IHN0cmlwZVBtQWRkZWRFdmVudCA9IGF3YWl0IHdhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kKHByKTtcbiAgICBsb2dfXyQxKGBTdHJpcGUgUE0gYWRkZWQgZXZlbnQ6YCwgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICBsb2dfXyQxKGBNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uYCk7XG4gICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQbShub25DZGVGb3JtSW5wdXRzLCBzdHJpcGVQbUFkZGVkRXZlbnQpO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhtZXJnZWRJbnB1dHMsIGZsb3dDYWxsYmFja3Mub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGxvZ19fJDEoYFBSIGRpYWxvZyBmaW5pc2hlZC4gU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uYCk7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvd0ZvclBSKGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIGZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHBhcnNlUFJOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBsb2dfXyQxKGBDb25maXJtaW5nIFBSIHdpdGggU3RyaXBlLi4uYCk7XG4gICAgYXdhaXQgY29uZmlybVN0cmlwZVByUE0obmV4dEFjdGlvbk1ldGFkYXRhLCBzdHJpcGVQbUFkZGVkRXZlbnQpO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgbG9nX18kMShgQ29uZmlybWluZyBwYXltZW50IGZsb3cgZm9yIHNldHVwLi4uYCk7XG4gICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShjb25maXJtUmVzdWx0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBjcmVhdGVkUGF5bWVudE1ldGhvZCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyQxKGBQZXJmb3JtaW5nIGNoZWNrb3V0Li4uYCk7XG4gICAgICBjb25zdCBjaGVja291dFJlcXVlc3QgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl96aXBfY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgfVxuICB9XG4pO1xuY29uc3QgZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQbSA9IChmb3JtSW5wdXRzLCBzdHJpcGVQbUV2dCkgPT4ge1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgY29uc3QgW3BheWVyRmlyc3ROYW1lLCAuLi5wYXllckxhc3ROYW1lUGFydHNdID0gc3RyaXBlUG1FdnQucGF5ZXJOYW1lPy50cmltKCk/LnNwbGl0KC9cXHMrLykgPz8gW107XG4gIGNvbnN0IHBheWVyTGFzdE5hbWUgPSBwYXllckxhc3ROYW1lUGFydHMuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwYXllckZpcnN0TmFtZSB8fCBcIl9PUF9VTktOT1dOXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSB8fCBwYXllckxhc3ROYW1lIHx8IFwiX09QX1VOS05PV05cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gPSBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSB8fCBzdHJpcGVQbUV2dC5wYXllckVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSB8fCBzdHJpcGVQbUV2dC5zaGlwcGluZ0FkZHJlc3M/LnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldID0gaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSB8fCBzdHJpcGVQbUV2dC5zaGlwcGluZ0FkZHJlc3M/LmNvdW50cnkgfHwgXCJVU1wiO1xuICBsb2dfXyQxKGBGaW5hbCBmb3JtIGlucHV0czpgLCBpbnB1dHMpO1xuICByZXR1cm4gaW5wdXRzO1xufTtcbmNvbnN0IHVwZGF0ZVByV2l0aEFtb3VudCA9IChwciwgYW1vdW50LCBpc1BlbmRpbmcpID0+IHtcbiAgcHIudXBkYXRlKHtcbiAgICB0b3RhbDoge1xuICAgICAgYW1vdW50OiBhbW91bnQuYW1vdW50QXRvbSxcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBwZW5kaW5nOiBpc1BlbmRpbmdcbiAgICB9LFxuICAgIGN1cnJlbmN5OiBhbW91bnQuY3VycmVuY3lcbiAgfSk7XG59O1xuY29uc3QgcGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YSA9IChyZXNwb25zZSkgPT4ge1xuICBpZiAocmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igb2NjdXJyZWQuXG5EZXRhaWxzOiBnb3QgJHtyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RofSByZXF1aXJlZCB1c2VyIGFjdGlvbnNgKTtcbiAgfVxuICByZXR1cm4gUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEucGFyc2UocmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbn07XG5cbmNvbnN0IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QgPSAoY3Btcywgd2l0aFByb3ZpZGVyLCB3aXRoUHJvY2Vzc29yKSA9PiB7XG4gIGNvbnN0IG1hdGNoZXMgPSBjcG1zLmZpbHRlcigoY3BtKSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlc1Byb2Nlc3NvciA9IHRydWUgO1xuICAgIGNvbnN0IG1hdGNoZXNQcm92aWRlciA9IGNwbS5wcm92aWRlciA9PT0gd2l0aFByb3ZpZGVyO1xuICAgIHJldHVybiBtYXRjaGVzUHJvY2Vzc29yICYmIG1hdGNoZXNQcm92aWRlcjtcbiAgfSk7XG4gIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3dpdGhQcm92aWRlcn0nIGFuZCBwcm9jZXNzb3IgJyR7d2l0aFByb2Nlc3Nvcn0nYCk7XG4gIH1cbiAgaWYgKG1hdGNoZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNb3JlIHRoYW4gb25lIENQTSBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3dpdGhQcm92aWRlcn0nIGFuZCBwcm9jZXNzb3IgJyR7d2l0aFByb2Nlc3Nvcn0nYCk7XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXNbMF07XG59O1xuY29uc3QgT2pzRmxvd3MgPSB7XG4gIC8vIOKciyBOb3RlOiBGb3IgZmxvd3MgdGhhdCByZXF1aXJlIGluaXRpYWxpemF0aW9uLCBwbGVhc2UgYWRkIHRoZW0gdG8gYGluaXQtZmxvd3MudHNgXG4gIC8vIFN0cmlwZVxuICBjb21tb25DQzoge1xuICAgIHJ1bjogcnVuQ29tbW9uQ2NGbG93XG4gIH0sXG4gIHN0cmlwZVBSOiB7XG4gICAgaW5pdDogaW5pdFN0cmlwZVByRmxvdyxcbiAgICBydW46IHJ1blN0cmlwZVByRmxvd1xuICB9XG4gIC8vIPCfkYkgQWRkIG1vcmUgZmxvd3MgaGVyZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufTtcblxuZnVuY3Rpb24gZ2V0RGVmYXVsdEV4cG9ydEZyb21DanMgKHgpIHtcblx0cmV0dXJuIHggJiYgeC5fX2VzTW9kdWxlICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh4LCAnZGVmYXVsdCcpID8geFsnZGVmYXVsdCddIDogeDtcbn1cblxudmFyIE9ic2VydmFibGUkMiA9IHt9O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoT2JzZXJ2YWJsZSQyLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5PYnNlcnZhYmxlJDIuT2JzZXJ2YWJsZSA9IHZvaWQgMDtcblxuLy8gPT09IFN5bWJvbCBTdXBwb3J0ID09PVxuY29uc3QgaGFzU3ltYm9sID0gbmFtZSA9PiBCb29sZWFuKFN5bWJvbFtuYW1lXSk7XG5cbmNvbnN0IGdldFN5bWJvbCA9IG5hbWUgPT4gaGFzU3ltYm9sKG5hbWUpID8gU3ltYm9sW25hbWVdIDogJ0BAJyArIG5hbWU7XG5cbmNvbnN0IFN5bWJvbEl0ZXJhdG9yID0gZ2V0U3ltYm9sKCdpdGVyYXRvcicpO1xuY29uc3QgU3ltYm9sT2JzZXJ2YWJsZSA9IGdldFN5bWJvbCgnb2JzZXJ2YWJsZScpO1xuY29uc3QgU3ltYm9sU3BlY2llcyA9IGdldFN5bWJvbCgnc3BlY2llcycpOyAvLyA9PT0gQWJzdHJhY3QgT3BlcmF0aW9ucyA9PT1cblxuZnVuY3Rpb24gZ2V0TWV0aG9kKG9iaiwga2V5KSB7XG4gIGxldCB2YWx1ZSA9IG9ialtrZXldO1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcih2YWx1ZSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBnZXRTcGVjaWVzKG9iaikge1xuICBsZXQgY3RvciA9IG9iai5jb25zdHJ1Y3RvcjtcblxuICBpZiAoY3RvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY3RvciA9IGN0b3JbU3ltYm9sU3BlY2llc107XG5cbiAgICBpZiAoY3RvciA9PT0gbnVsbCkge1xuICAgICAgY3RvciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY3RvciAhPT0gdW5kZWZpbmVkID8gY3RvciA6IE9ic2VydmFibGUkMTtcbn1cblxuZnVuY3Rpb24gaXNPYnNlcnZhYmxlKHgpIHtcbiAgcmV0dXJuIHggaW5zdGFuY2VvZiBPYnNlcnZhYmxlJDE7IC8vIFNQRUM6IEJyYW5kIGNoZWNrXG59XG5cbmZ1bmN0aW9uIGhvc3RSZXBvcnRFcnJvcihlKSB7XG4gIGlmIChob3N0UmVwb3J0RXJyb3IubG9nKSB7XG4gICAgaG9zdFJlcG9ydEVycm9yLmxvZyhlKTtcbiAgfSBlbHNlIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRocm93IGU7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW5xdWV1ZShmbikge1xuICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICB0cnkge1xuICAgICAgZm4oKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBob3N0UmVwb3J0RXJyb3IoZSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pIHtcbiAgbGV0IGNsZWFudXAgPSBzdWJzY3JpcHRpb24uX2NsZWFudXA7XG4gIGlmIChjbGVhbnVwID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgc3Vic2NyaXB0aW9uLl9jbGVhbnVwID0gdW5kZWZpbmVkO1xuXG4gIGlmICghY2xlYW51cCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiBjbGVhbnVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB1bnN1YnNjcmliZSA9IGdldE1ldGhvZChjbGVhbnVwLCAndW5zdWJzY3JpYmUnKTtcblxuICAgICAgaWYgKHVuc3Vic2NyaWJlKSB7XG4gICAgICAgIHVuc3Vic2NyaWJlLmNhbGwoY2xlYW51cCk7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgaG9zdFJlcG9ydEVycm9yKGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsb3NlU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbikge1xuICBzdWJzY3JpcHRpb24uX29ic2VydmVyID0gdW5kZWZpbmVkO1xuICBzdWJzY3JpcHRpb24uX3F1ZXVlID0gdW5kZWZpbmVkO1xuICBzdWJzY3JpcHRpb24uX3N0YXRlID0gJ2Nsb3NlZCc7XG59XG5cbmZ1bmN0aW9uIGZsdXNoU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbikge1xuICBsZXQgcXVldWUgPSBzdWJzY3JpcHRpb24uX3F1ZXVlO1xuXG4gIGlmICghcXVldWUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBzdWJzY3JpcHRpb24uX3F1ZXVlID0gdW5kZWZpbmVkO1xuICBzdWJzY3JpcHRpb24uX3N0YXRlID0gJ3JlYWR5JztcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgKytpKSB7XG4gICAgbm90aWZ5U3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbiwgcXVldWVbaV0udHlwZSwgcXVldWVbaV0udmFsdWUpO1xuICAgIGlmIChzdWJzY3JpcHRpb24uX3N0YXRlID09PSAnY2xvc2VkJykgYnJlYWs7XG4gIH1cbn1cblxuZnVuY3Rpb24gbm90aWZ5U3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbiwgdHlwZSwgdmFsdWUpIHtcbiAgc3Vic2NyaXB0aW9uLl9zdGF0ZSA9ICdydW5uaW5nJztcbiAgbGV0IG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vYnNlcnZlcjtcblxuICB0cnkge1xuICAgIGxldCBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLCB0eXBlKTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnbmV4dCc6XG4gICAgICAgIGlmIChtKSBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgaWYgKG0pIG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO2Vsc2UgdGhyb3cgdmFsdWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdjb21wbGV0ZSc6XG4gICAgICAgIGNsb3NlU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIGlmIChtKSBtLmNhbGwob2JzZXJ2ZXIpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBob3N0UmVwb3J0RXJyb3IoZSk7XG4gIH1cblxuICBpZiAoc3Vic2NyaXB0aW9uLl9zdGF0ZSA9PT0gJ2Nsb3NlZCcpIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtlbHNlIGlmIChzdWJzY3JpcHRpb24uX3N0YXRlID09PSAncnVubmluZycpIHN1YnNjcmlwdGlvbi5fc3RhdGUgPSAncmVhZHknO1xufVxuXG5mdW5jdGlvbiBvbk5vdGlmeShzdWJzY3JpcHRpb24sIHR5cGUsIHZhbHVlKSB7XG4gIGlmIChzdWJzY3JpcHRpb24uX3N0YXRlID09PSAnY2xvc2VkJykgcmV0dXJuO1xuXG4gIGlmIChzdWJzY3JpcHRpb24uX3N0YXRlID09PSAnYnVmZmVyaW5nJykge1xuICAgIHN1YnNjcmlwdGlvbi5fcXVldWUucHVzaCh7XG4gICAgICB0eXBlLFxuICAgICAgdmFsdWVcbiAgICB9KTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChzdWJzY3JpcHRpb24uX3N0YXRlICE9PSAncmVhZHknKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9zdGF0ZSA9ICdidWZmZXJpbmcnO1xuICAgIHN1YnNjcmlwdGlvbi5fcXVldWUgPSBbe1xuICAgICAgdHlwZSxcbiAgICAgIHZhbHVlXG4gICAgfV07XG4gICAgZW5xdWV1ZSgoKSA9PiBmbHVzaFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBub3RpZnlTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uLCB0eXBlLCB2YWx1ZSk7XG59XG5cbmNsYXNzIFN1YnNjcmlwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG9ic2VydmVyLCBzdWJzY3JpYmVyKSB7XG4gICAgLy8gQVNTRVJUOiBvYnNlcnZlciBpcyBhbiBvYmplY3RcbiAgICAvLyBBU1NFUlQ6IHN1YnNjcmliZXIgaXMgY2FsbGFibGVcbiAgICB0aGlzLl9jbGVhbnVwID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX29ic2VydmVyID0gb2JzZXJ2ZXI7XG4gICAgdGhpcy5fcXVldWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fc3RhdGUgPSAnaW5pdGlhbGl6aW5nJztcbiAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgbGV0IHN1YnNjcmlwdGlvbk9ic2VydmVyID0ge1xuICAgICAgZ2V0IGNsb3NlZCgpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuX3N0YXRlID09PSAnY2xvc2VkJztcbiAgICAgIH0sXG5cbiAgICAgIG5leHQodmFsdWUpIHtcbiAgICAgICAgb25Ob3RpZnkoc2VsZiwgJ25leHQnLCB2YWx1ZSk7XG4gICAgICB9LFxuXG4gICAgICBlcnJvcih2YWx1ZSkge1xuICAgICAgICBvbk5vdGlmeShzZWxmLCAnZXJyb3InLCB2YWx1ZSk7XG4gICAgICB9LFxuXG4gICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgb25Ob3RpZnkoc2VsZiwgJ2NvbXBsZXRlJyk7XG4gICAgICB9XG5cbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX2NsZWFudXAgPSBzdWJzY3JpYmVyLmNhbGwodW5kZWZpbmVkLCBzdWJzY3JpcHRpb25PYnNlcnZlcik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc3Vic2NyaXB0aW9uT2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSAnaW5pdGlhbGl6aW5nJykgdGhpcy5fc3RhdGUgPSAncmVhZHknO1xuICB9XG5cbiAgZ2V0IGNsb3NlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUgPT09ICdjbG9zZWQnO1xuICB9XG5cbiAgdW5zdWJzY3JpYmUoKSB7XG4gICAgaWYgKHRoaXMuX3N0YXRlICE9PSAnY2xvc2VkJykge1xuICAgICAgY2xvc2VTdWJzY3JpcHRpb24odGhpcyk7XG4gICAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHRoaXMpO1xuICAgIH1cbiAgfVxuXG59XG5cbmxldCBPYnNlcnZhYmxlJDEgPSBjbGFzcyBPYnNlcnZhYmxlIHtcbiAgY29uc3RydWN0b3Ioc3Vic2NyaWJlcikge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignT2JzZXJ2YWJsZSBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24nKTtcbiAgICBpZiAodHlwZW9mIHN1YnNjcmliZXIgIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ09ic2VydmFibGUgaW5pdGlhbGl6ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgdGhpcy5fc3Vic2NyaWJlciA9IHN1YnNjcmliZXI7XG4gIH1cblxuICBzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcbiAgICBpZiAodHlwZW9mIG9ic2VydmVyICE9PSAnb2JqZWN0JyB8fCBvYnNlcnZlciA9PT0gbnVsbCkge1xuICAgICAgb2JzZXJ2ZXIgPSB7XG4gICAgICAgIG5leHQ6IG9ic2VydmVyLFxuICAgICAgICBlcnJvcjogYXJndW1lbnRzWzFdLFxuICAgICAgICBjb21wbGV0ZTogYXJndW1lbnRzWzJdXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKG9ic2VydmVyLCB0aGlzLl9zdWJzY3JpYmVyKTtcbiAgfVxuXG4gIGZvckVhY2goZm4pIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcihmbiArICcgaXMgbm90IGEgZnVuY3Rpb24nKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHN1YnNjcmlwdGlvbiA9IHRoaXMuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dCh2YWx1ZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmbih2YWx1ZSwgZG9uZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgIGNvbXBsZXRlOiByZXNvbHZlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG1hcChmbikge1xuICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBUeXBlRXJyb3IoZm4gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgbGV0IEMgPSBnZXRTcGVjaWVzKHRoaXMpO1xuICAgIHJldHVybiBuZXcgQyhvYnNlcnZlciA9PiB0aGlzLnN1YnNjcmliZSh7XG4gICAgICBuZXh0KHZhbHVlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFsdWUgPSBmbih2YWx1ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICByZXR1cm4gb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICAgIH1cblxuICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgIH0sXG5cbiAgICAgIGVycm9yKGUpIHtcbiAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICB9LFxuXG4gICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgIH1cblxuICAgIH0pKTtcbiAgfVxuXG4gIGZpbHRlcihmbikge1xuICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBUeXBlRXJyb3IoZm4gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgbGV0IEMgPSBnZXRTcGVjaWVzKHRoaXMpO1xuICAgIHJldHVybiBuZXcgQyhvYnNlcnZlciA9PiB0aGlzLnN1YnNjcmliZSh7XG4gICAgICBuZXh0KHZhbHVlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKCFmbih2YWx1ZSkpIHJldHVybjtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHJldHVybiBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgfSxcblxuICAgICAgZXJyb3IoZSkge1xuICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgIH0sXG5cbiAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgfVxuXG4gICAgfSkpO1xuICB9XG5cbiAgcmVkdWNlKGZuKSB7XG4gICAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcihmbiArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICBsZXQgQyA9IGdldFNwZWNpZXModGhpcyk7XG4gICAgbGV0IGhhc1NlZWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMTtcbiAgICBsZXQgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICBsZXQgc2VlZCA9IGFyZ3VtZW50c1sxXTtcbiAgICBsZXQgYWNjID0gc2VlZDtcbiAgICByZXR1cm4gbmV3IEMob2JzZXJ2ZXIgPT4gdGhpcy5zdWJzY3JpYmUoe1xuICAgICAgbmV4dCh2YWx1ZSkge1xuICAgICAgICBsZXQgZmlyc3QgPSAhaGFzVmFsdWU7XG4gICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcblxuICAgICAgICBpZiAoIWZpcnN0IHx8IGhhc1NlZWQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYWNjID0gZm4oYWNjLCB2YWx1ZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhY2MgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgZXJyb3IoZSkge1xuICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgIH0sXG5cbiAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICBpZiAoIWhhc1ZhbHVlICYmICFoYXNTZWVkKSByZXR1cm4gb2JzZXJ2ZXIuZXJyb3IobmV3IFR5cGVFcnJvcignQ2Fubm90IHJlZHVjZSBhbiBlbXB0eSBzZXF1ZW5jZScpKTtcbiAgICAgICAgb2JzZXJ2ZXIubmV4dChhY2MpO1xuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgfVxuXG4gICAgfSkpO1xuICB9XG5cbiAgYXN5bmMgYWxsKCkge1xuICAgIGxldCB2YWx1ZXMgPSBbXTtcbiAgICBhd2FpdCB0aGlzLmZvckVhY2godmFsdWUgPT4gdmFsdWVzLnB1c2godmFsdWUpKTtcbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG5cbiAgY29uY2F0KC4uLnNvdXJjZXMpIHtcbiAgICBsZXQgQyA9IGdldFNwZWNpZXModGhpcyk7XG4gICAgcmV0dXJuIG5ldyBDKG9ic2VydmVyID0+IHtcbiAgICAgIGxldCBzdWJzY3JpcHRpb247XG4gICAgICBsZXQgaW5kZXggPSAwO1xuXG4gICAgICBmdW5jdGlvbiBzdGFydE5leHQobmV4dCkge1xuICAgICAgICBzdWJzY3JpcHRpb24gPSBuZXh0LnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dCh2KSB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KHYpO1xuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBlcnJvcihlKSB7XG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IHNvdXJjZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0YXJ0TmV4dChDLmZyb20oc291cmNlc1tpbmRleCsrXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgc3RhcnROZXh0KHRoaXMpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgaWYgKHN1YnNjcmlwdGlvbikge1xuICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIHN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGZsYXRNYXAoZm4pIHtcbiAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKGZuICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgIGxldCBDID0gZ2V0U3BlY2llcyh0aGlzKTtcbiAgICByZXR1cm4gbmV3IEMob2JzZXJ2ZXIgPT4ge1xuICAgICAgbGV0IHN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICAgIGxldCBvdXRlciA9IHRoaXMuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dCh2YWx1ZSkge1xuICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBmbih2YWx1ZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgaW5uZXIgPSBDLmZyb20odmFsdWUpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0KHZhbHVlKSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZXJyb3IoZSkge1xuICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICAgICAgICBsZXQgaSA9IHN1YnNjcmlwdGlvbnMuaW5kZXhPZihpbm5lcik7XG4gICAgICAgICAgICAgIGlmIChpID49IDApIHN1YnNjcmlwdGlvbnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICBjb21wbGV0ZUlmRG9uZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc3Vic2NyaXB0aW9ucy5wdXNoKGlubmVyKTtcbiAgICAgICAgfSxcblxuICAgICAgICBlcnJvcihlKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgICAgY29tcGxldGVJZkRvbmUoKTtcbiAgICAgICAgfVxuXG4gICAgICB9KTtcblxuICAgICAgZnVuY3Rpb24gY29tcGxldGVJZkRvbmUoKSB7XG4gICAgICAgIGlmIChvdXRlci5jbG9zZWQgJiYgc3Vic2NyaXB0aW9ucy5sZW5ndGggPT09IDApIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIG91dGVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgW1N5bWJvbE9ic2VydmFibGVdKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc3RhdGljIGZyb20oeCkge1xuICAgIGxldCBDID0gdHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogT2JzZXJ2YWJsZTtcbiAgICBpZiAoeCA9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKHggKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbiAgICBsZXQgbWV0aG9kID0gZ2V0TWV0aG9kKHgsIFN5bWJvbE9ic2VydmFibGUpO1xuXG4gICAgaWYgKG1ldGhvZCkge1xuICAgICAgbGV0IG9ic2VydmFibGUgPSBtZXRob2QuY2FsbCh4KTtcbiAgICAgIGlmIChPYmplY3Qob2JzZXJ2YWJsZSkgIT09IG9ic2VydmFibGUpIHRocm93IG5ldyBUeXBlRXJyb3Iob2JzZXJ2YWJsZSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xuICAgICAgaWYgKGlzT2JzZXJ2YWJsZShvYnNlcnZhYmxlKSAmJiBvYnNlcnZhYmxlLmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICAgIHJldHVybiBuZXcgQyhvYnNlcnZlciA9PiBvYnNlcnZhYmxlLnN1YnNjcmliZShvYnNlcnZlcikpO1xuICAgIH1cblxuICAgIGlmIChoYXNTeW1ib2woJ2l0ZXJhdG9yJykpIHtcbiAgICAgIG1ldGhvZCA9IGdldE1ldGhvZCh4LCBTeW1ib2xJdGVyYXRvcik7XG5cbiAgICAgIGlmIChtZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDKG9ic2VydmVyID0+IHtcbiAgICAgICAgICBlbnF1ZXVlKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChvYnNlcnZlci5jbG9zZWQpIHJldHVybjtcblxuICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBtZXRob2QuY2FsbCh4KSkge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KGl0ZW0pO1xuICAgICAgICAgICAgICBpZiAob2JzZXJ2ZXIuY2xvc2VkKSByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgICByZXR1cm4gbmV3IEMob2JzZXJ2ZXIgPT4ge1xuICAgICAgICBlbnF1ZXVlKCgpID0+IHtcbiAgICAgICAgICBpZiAob2JzZXJ2ZXIuY2xvc2VkKSByZXR1cm47XG5cbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHgubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoeFtpXSk7XG4gICAgICAgICAgICBpZiAob2JzZXJ2ZXIuY2xvc2VkKSByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHggKyAnIGlzIG5vdCBvYnNlcnZhYmxlJyk7XG4gIH1cblxuICBzdGF0aWMgb2YoLi4uaXRlbXMpIHtcbiAgICBsZXQgQyA9IHR5cGVvZiB0aGlzID09PSAnZnVuY3Rpb24nID8gdGhpcyA6IE9ic2VydmFibGU7XG4gICAgcmV0dXJuIG5ldyBDKG9ic2VydmVyID0+IHtcbiAgICAgIGVucXVldWUoKCkgPT4ge1xuICAgICAgICBpZiAob2JzZXJ2ZXIuY2xvc2VkKSByZXR1cm47XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIG9ic2VydmVyLm5leHQoaXRlbXNbaV0pO1xuICAgICAgICAgIGlmIChvYnNlcnZlci5jbG9zZWQpIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgW1N5bWJvbFNwZWNpZXNdKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbn07XG5cbk9ic2VydmFibGUkMi5PYnNlcnZhYmxlID0gT2JzZXJ2YWJsZSQxO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KE9ic2VydmFibGUkMSwgU3ltYm9sKCdleHRlbnNpb25zJyksIHtcbiAgdmFsdWU6IHtcbiAgICBzeW1ib2w6IFN5bWJvbE9ic2VydmFibGUsXG4gICAgaG9zdFJlcG9ydEVycm9yXG4gIH0sXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbnZhciB6ZW5PYnNlcnZhYmxlID0gT2JzZXJ2YWJsZSQyLk9ic2VydmFibGU7XG5cbmNvbnN0IE9ic2VydmFibGUgPSAvKkBfX1BVUkVfXyovZ2V0RGVmYXVsdEV4cG9ydEZyb21DanMoemVuT2JzZXJ2YWJsZSk7XG5cbmNvbnN0IHsgbG9nX18sIGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImluaXQtZmxvd3NcIik7XG5jb25zdCBpbml0aWFsaXplT2pzRmxvd3MgPSAoY29udGV4dCkgPT4ge1xuICByZXR1cm4ge1xuICAgIC8vIFN0cmlwZSBQUlxuICAgIHN0cmlwZVBSOiBydW5Jbml0Rmxvd0FzT2JzZXJ2YWJsZShcInN0cmlwZVBSXCIsIE9qc0Zsb3dzLnN0cmlwZVBSLmluaXQoeyBjb250ZXh0IH0pKVxuICAgIC8vIPCfkYkgQWRkIGluaXRpYWxpemF0aW9uIGZsb3dzIGhlcmVcbiAgfTtcbn07XG5jb25zdCBydW5Jbml0Rmxvd0FzT2JzZXJ2YWJsZSA9IChmbG93TmFtZSwgaW5pdEZsb3cpID0+IHtcbiAgY29uc3Qgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xuICAgIG9ic2VydmVyLm5leHQoeyBzdGF0dXM6IFwibG9hZGluZ1wiIH0pO1xuICAgIGluaXRGbG93LnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgb2JzZXJ2ZXIubmV4dCh7IHN0YXR1czogXCJsb2FkZWRcIiwgcmVzdWx0IH0pO1xuICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgb2JzZXJ2ZXIubmV4dCh7IHN0YXR1czogXCJlcnJvclwiLCBtZXNzYWdlOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgIH0pO1xuICB9KTtcbiAgb2JzZXJ2YWJsZS5zdWJzY3JpYmUoe1xuICAgIG5leHQ6IChyZXN1bHQpID0+IHtcbiAgICAgIGxvZ19fKGAke2Zsb3dOYW1lfSBmbG93IHJlc3VsdGAsIHJlc3VsdCk7XG4gICAgfSxcbiAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICBlcnJfXyhgJHtmbG93TmFtZX0gZmxvdyBpbml0aWFsaXphdGlvbiBlcnJvcjpcbiR7SlNPTi5zdHJpbmdpZnkoZXJyb3IpfWApO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG9ic2VydmFibGU7XG59O1xuXG5jb25zdCBQUl9MT0FESU5HID0ge1xuICBpc0xvYWRpbmc6IHRydWUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gIH1cbn07XG5jb25zdCBQUl9FUlJPUiA9IHtcbiAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgfVxufTtcblxuY2xhc3MgT3BlblBheUZvcm1FdmVudEhhbmRsZXIge1xuICBjb25zdHJ1Y3Rvcihmb3JtSW5zdGFuY2UpIHtcbiAgICB0aGlzLmZvcm1JbnN0YW5jZSA9IGZvcm1JbnN0YW5jZTtcbiAgICB0aGlzLmNvbmZpZyA9IGZvcm1JbnN0YW5jZS5jb25maWc7XG4gICAgdGhpcy5mb3JtSWQgPSBmb3JtSW5zdGFuY2UuZm9ybUlkO1xuICAgIHRoaXMuZXZlbnRUYXJnZXRzID0ge307XG4gICAgdGhpcy5ub25jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICB9XG4gIGhhbmRsZU1lc3NhZ2UoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50LnNvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBzb3VyY2UgZm91bmRgKTtcbiAgICB9XG4gICAgaWYgKGV2ZW50Lm9yaWdpbiAhPT0gdGhpcy5mb3JtSW5zdGFuY2UuY29uZmlnLl9mcmFtZVVybD8ub3JpZ2luKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBldmVudC5kYXRhW1wicGVucGFsXCJdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGV2ZW50RGF0YSA9IHBhcnNlRXZlbnRQYXlsb2FkKEpTT04ucGFyc2UoZXZlbnQuZGF0YSkpO1xuICAgIGNvbnN0IGlzVmFsaWQgPSB0aGlzLnZhbGlkYXRlRXZlbnQoZXZlbnREYXRhKTtcbiAgICBpZiAoIWlzVmFsaWQpIHJldHVybjtcbiAgICBjb25zdCB7IGVsZW1lbnRJZCwgcGF5bG9hZCB9ID0gZXZlbnREYXRhO1xuICAgIGNvbnN0IGV2ZW50VHlwZSA9IHBheWxvYWQudHlwZTtcbiAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgY2FzZSBcIkxBWU9VVFwiOlxuICAgICAgICB0aGlzLmhhbmRsZUxheW91dEV2ZW50KHBheWxvYWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJGT0NVU1wiOlxuICAgICAgICB0aGlzLmhhbmRsZUZvY3VzRXZlbnQoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiQkxVUlwiOlxuICAgICAgICB0aGlzLmhhbmRsZUJsdXJFdmVudChlbGVtZW50SWQsIHBheWxvYWQuZWxlbWVudFR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJDSEFOR0VcIjpcbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2VFdmVudChlbGVtZW50SWQsIHBheWxvYWQuZWxlbWVudFR5cGUsIHBheWxvYWQuZXJyb3JzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiTE9BREVEXCI6XG4gICAgICAgIHRoaXMuaGFuZGxlTG9hZGVkRXZlbnQoZXZlbnQuc291cmNlLCBlbGVtZW50SWQsIHBheWxvYWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJMT0FEX0VSUk9SXCI6XG4gICAgICAgIHRoaXMuaGFuZGxlTG9hZEVycm9yRXZlbnQocGF5bG9hZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIlZBTElEQVRJT05fRVJST1JcIjpcbiAgICAgICAgdGhpcy5oYW5kbGVWYWxpZGF0aW9uRXJyb3JFdmVudChwYXlsb2FkLCBlbGVtZW50SWQpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgdmFsaWRhdGVFdmVudChldmVudERhdGEpIHtcbiAgICBpZiAoZXZlbnREYXRhLmZvcm1JZCAhPT0gdGhpcy5mb3JtSW5zdGFuY2UuZm9ybUlkIHx8ICFldmVudERhdGEuZWxlbWVudElkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLm5vbmNlcy5oYXMoZXZlbnREYXRhLm5vbmNlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLm5vbmNlcy5hZGQoZXZlbnREYXRhLm5vbmNlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBoYW5kbGVMYXlvdXRFdmVudChwYXlsb2FkKSB7XG4gICAgY29uc3QgaGVpZ2h0ID0gcGF5bG9hZC5oZWlnaHQgPyBgJHtwYXlsb2FkLmhlaWdodH1weGAgOiBcIjEwMCVcIjtcbiAgICB0aGlzLmZvcm1JbnN0YW5jZS5zZXRGb3JtSGVpZ2h0KGhlaWdodCk7XG4gIH1cbiAgaGFuZGxlRm9jdXNFdmVudChlbGVtZW50SWQsIGZpZWxkKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLm9uRm9jdXMpIHRoaXMuY29uZmlnLm9uRm9jdXMoZWxlbWVudElkLCBmaWVsZCk7XG4gIH1cbiAgaGFuZGxlQmx1ckV2ZW50KGVsZW1lbnRJZCwgZmllbGQpIHtcbiAgICBpZiAodGhpcy5jb25maWcub25CbHVyKSB0aGlzLmNvbmZpZy5vbkJsdXIoZWxlbWVudElkLCBmaWVsZCk7XG4gIH1cbiAgaGFuZGxlQ2hhbmdlRXZlbnQoZWxlbWVudElkLCBmaWVsZCwgZXJyb3JzKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLm9uQ2hhbmdlKSB0aGlzLmNvbmZpZy5vbkNoYW5nZShlbGVtZW50SWQsIGZpZWxkLCBlcnJvcnMpO1xuICB9XG4gIGFzeW5jIGhhbmRsZUxvYWRlZEV2ZW50KHNvdXJjZSwgZWxlbWVudElkLCBwYXlsb2FkKSB7XG4gICAgdGhpcy5ldmVudFRhcmdldHNbZWxlbWVudElkXSA9IHNvdXJjZTtcbiAgICB0aGlzLmZvcm1JbnN0YW5jZS5vbkNkZUxvYWRlZChwYXlsb2FkKTtcbiAgICBpZiAodGhpcy5jb25maWcub25Mb2FkKSB7XG4gICAgICB0aGlzLmNvbmZpZy5vbkxvYWQocGF5bG9hZC50b3RhbEFtb3VudEF0b21zLCBwYXlsb2FkLmN1cnJlbmN5KTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlTG9hZEVycm9yRXZlbnQocGF5bG9hZCkge1xuICAgIGlmICh0aGlzLmZvcm1JbnN0YW5jZS5jb25maWcub25Mb2FkRXJyb3IpIHRoaXMuZm9ybUluc3RhbmNlLmNvbmZpZy5vbkxvYWRFcnJvcihwYXlsb2FkLm1lc3NhZ2UpO1xuICB9XG4gIGhhbmRsZVZhbGlkYXRpb25FcnJvckV2ZW50KHBheWxvYWQsIGVsZW1lbnRJZCkge1xuICAgIGlmICh0aGlzLmZvcm1JbnN0YW5jZS5jb25maWcub25WYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgIHRoaXMuZm9ybUluc3RhbmNlLmNvbmZpZy5vblZhbGlkYXRpb25FcnJvcihwYXlsb2FkLmVsZW1lbnRUeXBlLCBwYXlsb2FkLmVycm9ycywgZWxlbWVudElkKTtcbiAgICB9XG4gIH1cbiAgLy8gYXN5bmMgaGFuZGxlRXJyb3JFdmVudChwYXlsb2FkOiBFcnJvckV2ZW50UGF5bG9hZCkge1xuICAvLyAgIGlmIChwYXlsb2FkLm1lc3NhZ2UgPT09ICczRFNfUkVRVUlSRUQnKSB7XG4gIC8vICAgICBjb25zdCB0aHJlZURTVXJsID0gcGF5bG9hZC5oZWFkZXJzPy5bJ3gtM2RzLWF1dGgtdXJsJ10gPz8gU0lNVUxBVEVfM0RTX1VSTDtcbiAgLy8gICAgIC8vIFRoaXMgd2lsbCBvcGVuIGEgcG9wdXAgYW5kIHByb2Nlc3MgdGhlIDNEUyBmbG93XG4gIC8vICAgICAvLyB3aWxsIHJldHVybiBhIHN0YXR1cyBgc3VjY2Vzc2AgfCBgZmFpbHVyZWAgfCBgY2FuY2VsbGVkYCB3aGljaCB3ZSBjYW4gY29udGludWUgd2l0aFxuICAvLyAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oeyB1cmw6IHRocmVlRFNVcmwsIGJhc2VVcmw6IHRoaXMuY29uZmlnLmJhc2VVcmwhIH0pO1xuICAvLyAgICAgY29uc29sZS5sb2coJ/CflJAgM0RTIHN0YXR1czonLCBzdGF0dXMpO1xuICAvLyAgICAgLy8gVE9ETzogY29udGludWUgd2l0aCBzdGF0dXNcbiAgLy8gICAgIGNvbnN0IGNhcmRDcG0gPSB0aGlzLmZvcm1JbnN0YW5jZS5jaGVja291dFBheW1lbnRNZXRob2RzPy5maW5kKChjcG0pID0+IGNwbS5wcm92aWRlciA9PT0gJ2NyZWRpdF9jYXJkJyk7XG4gIC8vICAgICBpZiAoIXRoaXMuZm9ybUluc3RhbmNlLnNlc3Npb25JZCB8fCAhdGhpcy5mb3JtSW5zdGFuY2UuZm9ybVRhcmdldCB8fCAhdGhpcy5jb25maWcub25WYWxpZGF0aW9uRXJyb3IgfHwgIWNhcmRDcG0pXG4gIC8vICAgICAgIHJldHVybjtcbiAgLy8gICAgIGZvciAoY29uc3QgW2VsZW1lbnRJZCwgdGFyZ2V0XSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmV2ZW50VGFyZ2V0cykpIHtcbiAgLy8gICAgICAgaWYgKCF0YXJnZXQpIGNvbnRpbnVlO1xuICAvLyAgICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93RXZlbnQgPSBjb25zdHJ1Y3RTdWJtaXRFdmVudFBheWxvYWQoXG4gIC8vICAgICAgICAgRXZlbnRUeXBlLmVudW0uU1RBUlRfUEFZTUVOVF9GTE9XLFxuICAvLyAgICAgICAgIHRoaXMuZm9ybUluc3RhbmNlLnNlc3Npb25JZCxcbiAgLy8gICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZm9ybUluc3RhbmNlLmZvcm1UYXJnZXQpID8/IGRvY3VtZW50LmJvZHksXG4gIC8vICAgICAgICAgdGhpcy5jb25maWcub25WYWxpZGF0aW9uRXJyb3IsXG4gIC8vICAgICAgICAgeyAuLi5jYXJkQ3BtLCBwcm9jZXNzb3JfbmFtZTogJ3N0cmlwZScgfSxcbiAgLy8gICAgICAgICBmYWxzZVxuICAvLyAgICAgICApO1xuICAvLyAgICAgICBpZiAoIXN0YXJ0UGF5bWVudEZsb3dFdmVudCkgY29udGludWU7XG4gIC8vICAgICAgIHRoaXMuZm9ybUluc3RhbmNlLmNoZWNrb3V0RmlyZWQgPSB0cnVlO1xuICAvLyAgICAgICB0aGlzLnRva2VuaXplZERhdGEgPSBzdGFydFBheW1lbnRGbG93RXZlbnQ7XG4gIC8vICAgICAgIHRoaXMucG9zdEV2ZW50VG9GcmFtZSh0YXJnZXQsIGVsZW1lbnRJZCwgc3RhcnRQYXltZW50Rmxvd0V2ZW50KTtcbiAgLy8gICAgICAgYnJlYWs7XG4gIC8vICAgICB9XG4gIC8vICAgfSBlbHNlIHtcbiAgLy8gICAgIHRoaXMuZm9ybUluc3RhbmNlLmNoZWNrb3V0RmlyZWQgPSBmYWxzZTtcbiAgLy8gICAgIGlmICh0aGlzLmZvcm1JbnN0YW5jZS5jb25maWcub25DaGVja291dEVycm9yKSB0aGlzLmZvcm1JbnN0YW5jZS5jb25maWcub25DaGVja291dEVycm9yKHBheWxvYWQubWVzc2FnZSk7XG4gIC8vICAgfVxuICAvLyB9XG4gIC8vIGhhbmRsZUZvcm1TdWJtaXQoKSB7XG4gIC8vICAgaWYgKFxuICAvLyAgICAgIXRoaXMuZm9ybUluc3RhbmNlLnNlc3Npb25JZCB8fFxuICAvLyAgICAgIXRoaXMuZm9ybUluc3RhbmNlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHM/Lmxlbmd0aCB8fFxuICAvLyAgICAgIXRoaXMuY29uZmlnLm9uVmFsaWRhdGlvbkVycm9yXG4gIC8vICAgKSB7XG4gIC8vICAgICByZXR1cm47XG4gIC8vICAgfVxuICAvLyAgIGNvbnN0IGNhcmRDcG0gPSB0aGlzLmZvcm1JbnN0YW5jZS5jaGVja291dFBheW1lbnRNZXRob2RzLmZpbmQoKGNwbSkgPT4gY3BtLnByb3ZpZGVyID09PSAnY3JlZGl0X2NhcmQnKTtcbiAgLy8gICBpZiAoIWNhcmRDcG0pIHtcbiAgLy8gICAgIHRocm93IG5ldyBFcnJvcignQ2FyZCBub3QgYXZhaWxhYmxlIGFzIGEgcGF5bWVudCBtZXRob2QgaW4gY2hlY2tvdXQnKTtcbiAgLy8gICB9XG4gIC8vICAgY29uc3QgdG9rZW5pemVEYXRhID0gY29uc3RydWN0U3VibWl0RXZlbnRQYXlsb2FkKFxuICAvLyAgICAgRXZlbnRUeXBlLmVudW0uVE9LRU5JWkUsXG4gIC8vICAgICB0aGlzLmZvcm1JbnN0YW5jZS5zZXNzaW9uSWQhLFxuICAvLyAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1JbnN0YW5jZS5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5LFxuICAvLyAgICAgdGhpcy5jb25maWcub25WYWxpZGF0aW9uRXJyb3IsXG4gIC8vICAgICBjYXJkQ3BtLFxuICAvLyAgICAgZmFsc2VcbiAgLy8gICApO1xuICAvLyAgIGlmICghdG9rZW5pemVEYXRhKSB7XG4gIC8vICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIGNvbnN0cnVjdGluZyB0b2tlbml6ZSBkYXRhJyk7XG4gIC8vICAgfVxuICAvLyAgIGZvciAoY29uc3QgW2VsZW1lbnRJZCwgdGFyZ2V0XSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmV2ZW50VGFyZ2V0cykpIHtcbiAgLy8gICAgIGlmICghdGFyZ2V0KSBjb250aW51ZTtcbiAgLy8gICAgIHRoaXMucG9zdEV2ZW50VG9GcmFtZSh0YXJnZXQsIGVsZW1lbnRJZCwgdG9rZW5pemVEYXRhKTtcbiAgLy8gICB9XG4gIC8vICAgdGhpcy50b2tlbml6ZWREYXRhID0gdG9rZW5pemVEYXRhO1xuICAvLyB9XG4gIC8vIGFzeW5jIG9uVXNlckNvbXBsZXRlUGF5bWVudFJlcXVlc3RVSShcbiAgLy8gICBzdHJpcGVQbTogUGF5bWVudFJlcXVlc3RQYXltZW50TWV0aG9kRXZlbnQsXG4gIC8vICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2RcbiAgLy8gKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vICAgaWYgKCF0aGlzLmNvbmZpZy5vblZhbGlkYXRpb25FcnJvciB8fCAhdGhpcy5mb3JtSW5zdGFuY2Uuc2Vzc2lvbklkIHx8ICF0aGlzLmZvcm1JbnN0YW5jZS5jaGVja291dFBheW1lbnRNZXRob2RzKVxuICAvLyAgICAgcmV0dXJuO1xuICAvLyAgIGZvciAoY29uc3QgW2VsZW1lbnRJZCwgZWxlbWVudF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5ldmVudFRhcmdldHMgPz8ge30pKSB7XG4gIC8vICAgICBjb25zdCBwYXltZW50Rmxvd01ldGFkYXRhID0geyBzdHJpcGVQbUlkOiBzdHJpcGVQbS5wYXltZW50TWV0aG9kLmlkIH07XG4gIC8vICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93RXZlbnQgPSBjb25zdHJ1Y3RTdWJtaXRFdmVudFBheWxvYWQoXG4gIC8vICAgICAgIEV2ZW50VHlwZS5lbnVtLlNUQVJUX1BBWU1FTlRfRkxPVyxcbiAgLy8gICAgICAgdGhpcy5mb3JtSW5zdGFuY2Uuc2Vzc2lvbklkLFxuICAvLyAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZm9ybUluc3RhbmNlLmZvcm1UYXJnZXQpID8/IGRvY3VtZW50LmJvZHksXG4gIC8vICAgICAgIHRoaXMuY29uZmlnLm9uVmFsaWRhdGlvbkVycm9yLFxuICAvLyAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gIC8vICAgICAgIGZhbHNlLFxuICAvLyAgICAgICBwYXltZW50Rmxvd01ldGFkYXRhXG4gIC8vICAgICApO1xuICAvLyAgICAgaWYgKCFzdGFydFBheW1lbnRGbG93RXZlbnQpIGNvbnRpbnVlO1xuICAvLyAgICAgdGhpcy5zdHJpcGVQbSA9IHN0cmlwZVBtO1xuICAvLyAgICAgdGhpcy5mb3JtSW5zdGFuY2UuY2hlY2tvdXRGaXJlZCA9IHRydWU7XG4gIC8vICAgICB0aGlzLnNldFRva2VuaXplZERhdGEoc3RhcnRQYXltZW50Rmxvd0V2ZW50KTtcbiAgLy8gICAgIHRoaXMucG9zdEV2ZW50VG9GcmFtZShlbGVtZW50LCBlbGVtZW50SWQsIHN0YXJ0UGF5bWVudEZsb3dFdmVudCk7XG4gIC8vICAgICAvLyBlbWl0RXZlbnQoZWxlbWVudC5ub2RlLmNvbnRlbnRXaW5kb3chLCB0aGlzLmZvcm1JZCwgZWxlbWVudElkLCBzdGFydFBheW1lbnRGbG93RXZlbnQsIHRoaXMuY29uZmlnLmJhc2VVcmwhKTtcbiAgLy8gICAgIGJyZWFrO1xuICAvLyAgIH1cbiAgLy8gfVxuICBwb3N0RXZlbnRUb0ZyYW1lKHNvdXJjZSwgZWxlbWVudElkLCBkYXRhKSB7XG4gICAgZW1pdEV2ZW50KHNvdXJjZSwgdGhpcy5mb3JtSWQsIGVsZW1lbnRJZCwgZGF0YSwgdGhpcy5jb25maWcuYmFzZVVybCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQ29ubmVjdGlvbihpZnJhbWUsIGNoaWxkT3JpZ2luKSB7XG4gIGNvbnN0IGNvbm5lY3Rpb24gPSBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lLFxuICAgIGRlYnVnOiBmYWxzZSxcbiAgICBjaGlsZE9yaWdpblxuICB9KTtcbiAgY29uc3QgY29ubmVjdGlvbk9iaiA9IGF3YWl0IGNvbm5lY3Rpb24ucHJvbWlzZTtcbiAgY29uc3QgaXNWYWxpZE9iamVjdCA9IGF3YWl0IGNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QoY29ubmVjdGlvbk9iaik7XG4gIGlmICghaXNSZXN1bHRWYWxpZChjb25uZWN0aW9uT2JqLCBpc1ZhbGlkT2JqZWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgR290IGludmFsaWQgQ0RFIGNvbm5lY3Rpb24gb2JqZWN0YCk7XG4gIH1cbiAgcmV0dXJuIGNvbm5lY3Rpb25PYmo7XG59XG5jbGFzcyBDb25uZWN0aW9uTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICB9XG4gIGFkZENvbm5lY3Rpb24oaWQsIGNvbm5lY3Rpb24pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLnNldChpZCwgY29ubmVjdGlvbik7XG4gIH1cbiAgZ2V0Q29ubmVjdGlvbigpIHtcbiAgICBjb25zdCBjb25uZWN0aW9uID0gdGhpcy5jb25uZWN0aW9ucy52YWx1ZXMoKS5uZXh0KCkudmFsdWU7XG4gICAgaWYgKCFjb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIG5vdCBmb3VuZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbm5lY3Rpb247XG4gIH1cbiAgZ2V0QWxsQ29ubmVjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbnM7XG4gIH1cbn1cblxuY2xhc3MgT3BlblBheUZvcm0ge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICB0aGlzLnRyeUluaXRPanNGbG93cyA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLm9qc0Zsb3dzSW5pdGlhbGl6YXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmNkZUxvYWRlZFBheWxvYWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZ2V0QWxsQ29ubmVjdGlvbnMoKS5zaXplID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMub2pzRmxvd3NJbml0aWFsaXphdGlvbiA9IGluaXRpYWxpemVPanNGbG93cyh0aGlzLmNyZWF0ZU9qc0Zsb3dDb250ZXh0KCkpO1xuICAgICAgdGhpcy5vanNGbG93c0luaXRpYWxpemF0aW9uLnN0cmlwZVBSLnN1YnNjcmliZSgoc3RhdHVzKSA9PiB0aGlzLm9uU3RyaXBlUFJTdGF0dXNDaGFuZ2Uoc3RhdHVzKSk7XG4gICAgfTtcbiAgICB0aGlzLm9uQ2RlTG9hZGVkID0gKHBheWxvYWQpID0+IHtcbiAgICAgIGlmICh0aGlzLmNkZUxvYWRlZFBheWxvYWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5jZGVMb2FkZWRQYXlsb2FkID0gcGF5bG9hZDtcbiAgICAgIHRoaXMudHJ5SW5pdE9qc0Zsb3dzKCk7XG4gICAgfTtcbiAgICB0aGlzLm9uU3RyaXBlUFJTdGF0dXNDaGFuZ2UgPSAoaW5pdFN0YXR1cykgPT4ge1xuICAgICAgaWYgKGluaXRTdGF0dXMuc3RhdHVzID09PSBcImxvYWRpbmdcIikge1xuICAgICAgICB0aGlzLmNvbmZpZy5vblBheW1lbnRSZXF1ZXN0TG9hZD8uKHsgYXBwbGVfcGF5OiBQUl9MT0FESU5HLCBnb29nbGVfcGF5OiBQUl9MT0FESU5HIH0pO1xuICAgICAgfSBlbHNlIGlmIChpbml0U3RhdHVzLnN0YXR1cyA9PT0gXCJlcnJvclwiKSB7XG4gICAgICAgIHRoaXMuY29uZmlnLm9uUGF5bWVudFJlcXVlc3RMb2FkPy4oeyBhcHBsZV9wYXk6IFBSX0VSUk9SLCBnb29nbGVfcGF5OiBQUl9FUlJPUiB9KTtcbiAgICAgIH0gZWxzZSBpZiAoaW5pdFN0YXR1cy5zdGF0dXMgPT09IFwibG9hZGVkXCIpIHtcbiAgICAgICAgY29uc3QgaW5pdFJlc3VsdCA9IGluaXRTdGF0dXMucmVzdWx0O1xuICAgICAgICBjb25zdCBjYW5BcHBsZVBheSA9IGluaXRSZXN1bHQuaXNBdmFpbGFibGUgJiYgaW5pdFJlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXk7XG4gICAgICAgIGNvbnN0IGNhbkdvb2dsZVBheSA9IGluaXRSZXN1bHQuaXNBdmFpbGFibGUgJiYgaW5pdFJlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5O1xuICAgICAgICB0aGlzLmNvbmZpZy5vblBheW1lbnRSZXF1ZXN0TG9hZD8uKHtcbiAgICAgICAgICBhcHBsZV9wYXk6IHtcbiAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICBpc0F2YWlsYWJsZTogY2FuQXBwbGVQYXksXG4gICAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1c2VyUGFyYW1zKSA9PiBjYW5BcHBsZVBheSA/IHRoaXMuc3VibWl0UGF5bWVudFJlcXVlc3QoXCJhcHBsZV9wYXlcIiwgaW5pdFJlc3VsdCwgdXNlclBhcmFtcykgOiB2b2lkIDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdvb2dsZV9wYXk6IHtcbiAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICBpc0F2YWlsYWJsZTogY2FuR29vZ2xlUGF5LFxuICAgICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodXNlclBhcmFtcykgPT4gY2FuR29vZ2xlUGF5ID8gdGhpcy5zdWJtaXRQYXltZW50UmVxdWVzdChcImdvb2dsZV9wYXlcIiwgaW5pdFJlc3VsdCwgdXNlclBhcmFtcykgOiB2b2lkIDBcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5zdWJtaXRQYXltZW50UmVxdWVzdCA9IChwcm92aWRlciwgaW5pdFJlc3VsdCwgcGFyYW1zKSA9PiB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jcmVhdGVPanNGbG93Q29udGV4dCgpO1xuICAgICAgcmV0dXJuIE9qc0Zsb3dzLnN0cmlwZVBSLnJ1bih7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHByb3ZpZGVyKSxcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogdGhpcy5nZXROb25DZGVGb3JtSW5wdXRzKCksXG4gICAgICAgIGZsb3dDYWxsYmFja3M6IHRoaXMuY3JlYXRlT2pzRmxvd0NhbGxiYWNrcygpLFxuICAgICAgICBjdXN0b21QYXJhbXM6IHsgcHJvdmlkZXIsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9LFxuICAgICAgICBpbml0UmVzdWx0XG4gICAgICB9KTtcbiAgICB9O1xuICAgIE9wZW5QYXlGb3JtLmFzc2lnbkFzU2luZ2xldG9uKHRoaXMpO1xuICAgIHRoaXMuY29uZmlnID0geyAuLi5jb25maWcsIGJhc2VVcmw6IGNvbmZpZy5iYXNlVXJsID8/IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiB9O1xuICAgIHRoaXMuZWxlbWVudHMgPSBudWxsO1xuICAgIHRoaXMuZm9ybUlkID0gYG9wanMtZm9ybS0ke3dpbmRvdy5jcnlwdG8ucmFuZG9tVVVJRCgpfWA7XG4gICAgdGhpcy5yZWZlcmVyID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICB0aGlzLmZvcm1UYXJnZXQgPSBjb25maWcuZm9ybVRhcmdldCA/PyBcImJvZHlcIjtcbiAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzID0geyBoZWlnaHQ6IFwiMXB4XCIgfTtcbiAgICB0aGlzLmNkZUxvYWRlZFBheWxvYWQgPSBudWxsO1xuICAgIHRoaXMub2pzRmxvd3NJbml0aWFsaXphdGlvbiA9IG51bGw7XG4gICAgdGhpcy5jaGVja291dEZpcmVkID0gZmFsc2U7XG4gICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlciA9IG5ldyBDb25uZWN0aW9uTWFuYWdlcigpO1xuICAgIHRoaXMuZXZlbnRIYW5kbGVyID0gbmV3IE9wZW5QYXlGb3JtRXZlbnRIYW5kbGVyKHRoaXMpO1xuICAgIHRoaXMub2pzVmVyc2lvbiA9IFwiMC4xLjdcIjtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLm9qc0Zsb3dzID0gT2pzRmxvd3M7XG4gIH1cbiAgLyoqXG4gICAqIEFzc2lnbiB0aGUgaW5zdGFuY2UgdG8gdGhlIHdpbmRvdyBhcyBhIHNpbmdsZXRvblxuICAgKiBAcGFyYW0gZm9ybSAtIFRoZSBPcGVuUGF5Rm9ybSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGFzc2lnbkFzU2luZ2xldG9uKGZvcm0pIHtcbiAgICBpZiAoT3BlblBheUZvcm0uZ2V0SW5zdGFuY2UoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBpbnN0YW5jZSBhbHJlYWR5IGV4aXN0cy4gT25seSBvbmUgaW5zdGFuY2UgaXMgYWxsb3dlZC5cIik7XG4gICAgfVxuICAgIHdpbmRvd1tcIm9qc1wiXSA9IGZvcm07XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIE9wZW5QYXlGb3JtXG4gICAqIEByZXR1cm5zIFRoZSBPcGVuUGF5Rm9ybSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGdldEluc3RhbmNlKCkge1xuICAgIHJldHVybiB3aW5kb3dbXCJvanNcIl0gPz8gbnVsbDtcbiAgfVxuICBnZXRDb25uZWN0aW9uTWFuYWdlcigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uTWFuYWdlcjtcbiAgfVxuICBzZXRGb3JtSGVpZ2h0KGhlaWdodCkge1xuICAgIHRoaXMuZm9ybVByb3BlcnRpZXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGlmICh0aGlzLmVsZW1lbnRzKSB7XG4gICAgICBPYmplY3QudmFsdWVzKHRoaXMuZWxlbWVudHMpLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgZWxlbWVudC5ub2RlLnN0eWxlLmhlaWdodCA9IGhlaWdodDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBjcmVhdGVFbGVtZW50KGVsZW1lbnRWYWx1ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZykgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBmb3JtIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICBjb25zdCB0eXBlID0gRWxlbWVudFR5cGUucGFyc2UoZWxlbWVudFZhbHVlKTtcbiAgICBjb25zdCBmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcob3B0aW9ucyk7XG4gICAgZnJhbWUubmFtZSA9IGAke3R5cGV9LWVsZW1lbnRgO1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoYC9hcHAvdjEvJHtmcmFtZS5uYW1lfWAsIHRoaXMuY29uZmlnLmJhc2VVcmwpO1xuICAgIHVybC5zZWFyY2ggPSBxdWVyeVN0cmluZy50b1N0cmluZygpO1xuICAgIGZyYW1lLnNyYyA9IHVybC5ocmVmO1xuICAgIHRoaXMuY29uZmlnLl9mcmFtZVVybCA9IHVybDtcbiAgICBmcmFtZS5zdHlsZS5ib3JkZXIgPSBcIm5vbmVcIjtcbiAgICBmcmFtZS5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuICAgIGNvbnN0IGVsZW1lbnQgPSB7XG4gICAgICB0eXBlLFxuICAgICAgbm9kZTogZnJhbWUsXG4gICAgICBtb3VudDogKHNlbGVjdG9yKSA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKT8uYXBwZW5kQ2hpbGQoZnJhbWUpXG4gICAgfTtcbiAgICB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoZWxlbWVudCk7XG4gICAgaWYgKHRoaXMuZWxlbWVudHMpIHtcbiAgICAgIHRoaXMuZWxlbWVudHNbdHlwZV0gPSBlbGVtZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVsZW1lbnRzID0geyBbdHlwZV06IGVsZW1lbnQgfTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cbiAgYnVpbGRRdWVyeVN0cmluZyhvcHRpb25zKSB7XG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwicmVmZXJlclwiLCB0aGlzLnJlZmVyZXIpO1xuICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcImZvcm1JZFwiLCB0aGlzLmZvcm1JZCk7XG4gICAgaWYgKG9wdGlvbnMuc3R5bGVzKSB7XG4gICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJzdHlsZXNcIiwgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcob3B0aW9ucy5zdHlsZXMpKTtcbiAgICB9XG4gICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgcmV0dXJuIHF1ZXJ5U3RyaW5nO1xuICB9XG4gIGNvbm5lY3RUb0VsZW1lbnQoZWxlbWVudCkge1xuICAgIGNyZWF0ZUNvbm5lY3Rpb24oZWxlbWVudC5ub2RlKS50aGVuKChjb25uKSA9PiB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmFkZENvbm5lY3Rpb24oZWxlbWVudC50eXBlLCBjb25uKTtcbiAgICAgIHRoaXMudHJ5SW5pdE9qc0Zsb3dzKCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4gdm9pZCAwKTtcbiAgfVxuICBnZXRGb3JtRGl2KCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keTtcbiAgfVxuICBjcmVhdGVPanNGbG93Q29udGV4dCgpIHtcbiAgICBjb25zdCBjZGVDb25uZWN0aW9ucyA9IHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZ2V0QWxsQ29ubmVjdGlvbnMoKTtcbiAgICBpZiAoIXRoaXMuY2RlTG9hZGVkUGF5bG9hZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVxdWVzdGVkIGNvbnRleHQgd2hpbGUgQ0RFIG5vdCB5ZXQgbG9hZGVkXCIpO1xuICAgIH1cbiAgICBpZiAoY2RlQ29ubmVjdGlvbnMuc2l6ZSA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gQ0RFIGNvbm5lY3Rpb25zIGZvdW5kXCIpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgYmFzZVVybDogbmV3IFVSTCh0aGlzLmNvbmZpZy5iYXNlVXJsID8/IEZSQU1FX0JBU0VfVVJMKS5vcmlnaW4sXG4gICAgICBmb3JtRGl2OiB0aGlzLmdldEZvcm1EaXYoKSxcbiAgICAgIGVsZW1lbnRzU2Vzc2lvbklkOiB0aGlzLmNkZUxvYWRlZFBheWxvYWQuc2Vzc2lvbklkLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogdGhpcy5jZGVMb2FkZWRQYXlsb2FkLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICBjZGVDb25uZWN0aW9uc1xuICAgIH07XG4gIH1cbiAgZ2V0Tm9uQ2RlRm9ybUlucHV0cygpIHtcbiAgICByZXR1cm4gY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKHRoaXMuZ2V0Rm9ybURpdigpKTtcbiAgfVxuICBjcmVhdGVPanNGbG93Q2FsbGJhY2tzKCkge1xuICAgIGNvbnN0IG5vT3AgPSAoKSA9PiB7XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgb25DaGVja291dEVycm9yOiBtYWtlQ2FsbGJhY2tTYWZlKFwib25DaGVja291dEVycm9yXCIsIHRoaXMuY29uZmlnLm9uQ2hlY2tvdXRFcnJvciA/PyBub09wKSxcbiAgICAgIG9uQ2hlY2tvdXRTdGFydGVkOiBtYWtlQ2FsbGJhY2tTYWZlKFwib25DaGVja291dFN0YXJ0ZWRcIiwgdGhpcy5jb25maWcub25DaGVja291dFN0YXJ0ZWQgPz8gbm9PcCksXG4gICAgICBvbkNoZWNrb3V0U3VjY2VzczogbWFrZUNhbGxiYWNrU2FmZShcIm9uQ2hlY2tvdXRTdWNjZXNzXCIsIHRoaXMuY29uZmlnLm9uQ2hlY2tvdXRTdWNjZXNzID8/IG5vT3ApLFxuICAgICAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBtYWtlQ2FsbGJhY2tTYWZlKFxuICAgICAgICBcIm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2Vzc1wiLFxuICAgICAgICB0aGlzLmNvbmZpZy5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MgPz8gbm9PcFxuICAgICAgKSxcbiAgICAgIG9uVmFsaWRhdGlvbkVycm9yOiBtYWtlQ2FsbGJhY2tTYWZlKFwib25WYWxpZGF0aW9uRXJyb3JcIiwgdGhpcy5jb25maWcub25WYWxpZGF0aW9uRXJyb3IgPz8gbm9PcClcbiAgICB9O1xuICB9XG4gIHN1Ym1pdCgpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jcmVhdGVPanNGbG93Q29udGV4dCgpO1xuICAgIE9qc0Zsb3dzLmNvbW1vbkNDLnJ1bih7XG4gICAgICBjb250ZXh0LFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJjcmVkaXRfY2FyZFwiKSxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IHRoaXMuZ2V0Tm9uQ2RlRm9ybUlucHV0cygpLFxuICAgICAgZmxvd0NhbGxiYWNrczogdGhpcy5jcmVhdGVPanNGbG93Q2FsbGJhY2tzKCksXG4gICAgICBjdXN0b21QYXJhbXM6IHZvaWQgMCxcbiAgICAgIC8vIFRoaXMgZmxvdyByZXF1aXJlcyBubyBjdXN0b20gcGFyYW1zXG4gICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgIC8vIFRoaXMgZmxvdyByZXF1aXJlcyBubyBpbml0aWFsaXphdGlvblxuICAgIH0pO1xuICB9XG4gIG9uUGF5bWVudFJlcXVlc3RFcnJvcihlcnJNc2cpIHtcbiAgICB0aGlzLmNoZWNrb3V0RmlyZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5jb25maWcub25DaGVja291dEVycm9yKSB0aGlzLmNvbmZpZy5vbkNoZWNrb3V0RXJyb3IoZXJyTXNnKTtcbiAgfVxuICBkZXN0cm95KCkge1xuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBPYmplY3QudmFsdWVzKHRoaXMuZWxlbWVudHMgPz8ge30pKSB7XG4gICAgICBlbGVtZW50Lm5vZGUucmVtb3ZlKCk7XG4gICAgfVxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKTtcbiAgfVxufVxuXG5leHBvcnQgeyBGaWVsZE5hbWUsIE9wZW5QYXlGb3JtIH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxLQUFBQSxTQUFTO0FBQ2xCLFNBQVMsTUFBQUMsVUFBVTtBQUNuQixTQUFTLGtCQUFBQyxVQUFzQjtBQUMvQixPQUFPQyxPQUFXO0FBRWxCLE1BQU1DLEtBQWlCLDhCQUVqQkMsS0FBNEJMLEVBQUUsT0FBTztBQUFBLEVBQ3pDLE1BQU1BLEVBQUUsT0FBTztBQUFBLEVBQ2YsS0FBS0EsRUFBRSxNQUFNQSxFQUFFLE9BQU8sQ0FBQztBQUFBLEVBQ3ZCLEtBQUtBLEVBQUUsT0FBTztBQUFBLEVBQ2QsS0FBS0EsRUFBRSxPQUFPO0FBQ2hCLENBQUMsR0FDS00sS0FBa0NOLEVBQUUsTUFBTUssRUFBeUIsR0FDbkVFLEtBQWdCUCxFQUFFLE9BQU87QUFBQSxFQUM3QixNQUFNQSxFQUFFLE9B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a0JBQWtCLEtBQUssb0JBQW9CO0FBQUEsTUFDM0MsZUFBZSxLQUFLLHVCQUF1QjtBQUFBLE1BQzNDLGNBQWM7QUFBQTtBQUFBLE1BRWQsWUFBWTtBQUFBO0FBQUEsSUFFZCxDQUFDO0FBQUEsRUFDSDtBQUFBLEVBQ0Esc0JBQXNCMkksR0FBUTtBQUM1QixTQUFLLGdCQUFnQixJQUNqQixLQUFLLE9BQU8sbUJBQWlCLEtBQUssT0FBTyxnQkFBZ0JBLENBQU07QUFBQSxFQUNyRTtBQUFBLEVBQ0EsVUFBVTtBQUNSLGVBQVdSLEtBQVcsT0FBTyxPQUFPLEtBQUssWUFBWSxDQUFDLENBQUM7QUFDckQsTUFBQUEsRUFBUSxLQUFLLE9BQU87QUFFdEIsV0FBTyxvQkFBb0IsV0FBVyxLQUFLLGFBQWEsY0FBYyxLQUFLLEtBQUssWUFBWSxDQUFDO0FBQUEsRUFDL0Y7QUFDRjtBQWxJSVYsRUFBSyxXQUFXeEU7QUF4RXBCLElBQU0yRixLQUFObkI7IiwKICAibmFtZXMiOiBbInoiLCAidjQiLCAiY29ubmVjdFRvQ2hpbGQiLCAiY2hhbGsiLCAiRlJBTUVfQkFTRV9VUkwiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlIiwgIlpvZEZpZWxkRXJyb3IiLCAiWm9kRmllbGRFcnJvcnMiLCAiTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRSIsICJnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZSIsICJvZ0Vycm9yTWVzc2FnZSIsICJrZXkiLCAiaXNTdHJpbmdpZmllZEpzb25PYmplY3QiLCAic3RyIiwgImNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IiLCAicmVzcG9uc2UiLCAiZXJyIiwgImNyZWF0ZU1lc3NhZ2VGcm9tWm9kRmllbGRFcnJvcnMiLCAiZXJyb3JzIiwgImdldEVycm9yTWVzc2FnZSIsICJlIiwgIm9iaiIsICJlMiIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgImNhbGxiYWNrTmFtZSIsICJmbiIsICJhcmdzIiwgIlJlcXVpcmVkU3RyaW5nIiwgIk9wdGlvbmFsU3RyaW5nIiwgIm51bGxPclVuZGVmT3IkMSIsICJ6VHlwZSIsICJGaWVsZE5hbWUiLCAiRmllbGROYW1lMiIsICJGaWVsZE5hbWVFbnVtIiwgIlByaXZhdGVGaWVsZE5hbWUiLCAiUHJpdmF0ZUZpZWxkTmFtZTIiLCAiUHJpdmF0ZUZpZWxkTmFtZUVudW0iLCAiQWxsRmllbGROYW1lcyIsICJFbGVtZW50VHlwZUVudW0iLCAiRWxlbWVudFR5cGVFbnVtMiIsICJFbGVtZW50VHlwZSIsICJDaGVja291dFBheW1lbnRNZXRob2QkMSIsICJQYXltZW50TWV0aG9kTWluaW1hbCIsICJFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRQYXlsb2FkIiwgIklucHV0RXZlbnRUeXBlIiwgIklucHV0RXZlbnRQYXlsb2FkIiwgIkVycm9yRXZlbnRUeXBlIiwgIkVycm9yRXZlbnRQYXlsb2FkIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQiLCAiTGF5b3V0RXZlbnRQYXlsb2FkIiwgIkxvYWRlZEV2ZW50UGF5bG9hZCIsICJQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQiLCAiU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgIlBSRm9ybUZpZWxkcyIsICJTdWJtaXRFdmVudFR5cGUiLCAiU3VibWl0RXZlbnRQYXlsb2FkIiwgIlRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiRXZlbnRQYXlsb2FkIiwgIkVsZW1lbnRFdmVudCIsICJDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSIsICJGaWVsZFZhbGlkYXRpb25FcnJvciIsICJUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlIiwgIlRva2VuaXplQ2FyZFJlc3BvbnNlIiwgIlRocmVlRFNTdGF0dXMiLCAiVGhyZWVEU1N0YXR1czIiLCAiUGluZzNEU1N0YXR1c1Jlc3BvbnNlIiwgIkNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJleHRyYWN0SXNzdWVzUGVyRmllbGQiLCAiZXJyb3IiLCAiaXNzdWVzUGVyRmllbGQiLCAidmFsdWUiLCAiZmllbGROYW1lIiwgIlN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YSIsICJvdXJDdXJyZW5jeVRvVGhlaXJzIiwgImdldExvYWRlZFN0cmlwZSIsICJwdWJsaXNoYWJsZUtleSIsICJpIiwgImlzU3RyaXBlSnNQcmVzZW50IiwgInNsZWVwIiwgImNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0IiwgInN0cmlwZVB1YktleSIsICJ0b3RhbEFtb3VudEF0b20iLCAiY3VycmVuY3kiLCAiaXNBbW91bnRQZW5kaW5nIiwgImlzTGlua09ubHkiLCAic3RyaXBlIiwgInN0cmlwZUN1cnJlbmN5IiwgInRpbWVvdXRNcyIsICJyZXNvbHZlIiwgIndhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kIiwgInBheW1lbnRSZXF1ZXN0IiwgInJlamVjdCIsICJldnQiLCAiY29uZmlybVN0cmlwZVByUE0iLCAibmV4dEFjdGlvbk1ldGFkYXRhIiwgInN0cmlwZVBtIiwgImNvbmZpcm1SZXN1bHQiLCAibGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyIsICJfYSIsICJfYiIsICJfYyIsICJfZCIsICJyZXN1bHRTdGF0dXMiLCAiY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmciLCAic3R5bGVzIiwgImNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybSIsICJmb3JtRGl2IiwgImluaXRpYWxEaWN0IiwgImFjYyIsICJpbnB1dCIsICJwYXJzZUV2ZW50UGF5bG9hZCIsICJldmVudERhdGEiLCAiZW1pdEV2ZW50IiwgInRhcmdldCIsICJmb3JtSWQiLCAiZWxlbWVudElkIiwgInBheWxvYWQiLCAiYmFzZVVybCIsICJldmVudCIsICJjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0IiwgInBpbmciLCAicmVzdWx0IiwgImlzUmVzdWx0VmFsaWQiLCAiaXNWYWxpZCIsICJudWxsT3JVbmRlZk9yIiwgIkNERVJlc3BvbnNlRXJyb3IiLCAiQ291cG9uTWluaW1hbCIsICJMaW5lSXRlbSIsICJCcmFuZFNldHRpbmdzIiwgIkJyYW5kIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJTdWJzY3JpcHRpb25JdGVtTWluaW1hbCIsICJTdWJzY3JpcHRpb25NaW5pbWFsIiwgIkludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCIsICJJbnZvaWNlTGluZUl0ZW1NaW5pbWFsIiwgIkRpc2NvdW50TWluaW1hbCIsICJJbnZvaWNlTWluaW1hbCIsICJDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwiLCAiUHJldmlld0NoZWNrb3V0UmVzcG9uc2UiLCAiX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiIsICJQYXltZW50Rm9ybVByZWZpbGwiLCAiQ29tcGxldGVkRm9ybVByZWZpbGwiLCAiRXhwaXJlZEZvcm1QcmVmaWxsIiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgIlNldHVwQ2hlY2tvdXRSZXNwb25zZSIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJTdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAiU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UiLCAic3VtIiwgImFyciIsICJhIiwgImIiLCAiZml4UHJvdG8iLCAicHJvdG90eXBlIiwgInNldFByb3RvdHlwZU9mIiwgImZpeFN0YWNrIiwgImNhcHR1cmVTdGFja1RyYWNlIiwgIl9fZXh0ZW5kcyIsICJfZXh0ZW5kU3RhdGljcyIsICJkIiwgInAiLCAiX18iLCAiQ3VzdG9tRXJyb3IiLCAiX3N1cGVyIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJfbmV3VGFyZ2V0IiwgIl90aGlzIiwgIkNkZUVycm9yIiwgImZyaWVuZGx5TWVzc2FnZSIsICJxdWVyeUNERSIsICJjZGVDb25uIiwgImRhdGEiLCAicmVzcG9uc2VTY2hlbWEiLCAiaXNDREVSZXNwb25zZUVycm9yIiwgImNoZWNrSWZDb25mb3Jtc1RvU2NoZW1hIiwgInNjaGVtYSIsICJnZXRDaGVja291dFByZXZpZXciLCAicmVxdWVzdCIsICJnZXRQcmVmaWxsIiwgInN0YXJ0UGF5bWVudEZsb3dGb3JDQyIsICJzdGFydFBheW1lbnRGbG93Rm9yUFIiLCAiY29uZmlybVBheW1lbnRGbG93IiwgImdldENoZWNrb3V0VmFsdWUiLCAic2VjdXJlVG9rZW4iLCAicHJvbW9Db2RlIiwgImNoZWNrb3V0UHJldmlldyIsICJjdXJyZW5jaWVzIiwgImludiIsICJhbW91bnRBdG9tIiwgImdldENoZWNrb3V0UHJldmlld0Ftb3VudCIsICJpc1NldHVwTW9kZSIsICJ0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zIiwgImFsbENkZUNvbm5lY3Rpb25zIiwgImNoZWNrb3V0Q2FyZEVsZW1lbnRzIiwgInNldHVwQ2hlY2tvdXQiLCAicGVyZm9ybUNoZWNrb3V0IiwgIkNERV9QT0xMSU5HX0lOVEVSVkFMIiwgInBpbmdDZGVGb3IzZHNTdGF0dXMiLCAiaWZyYW1lIiwgImNoaWxkT3JpZ2luIiwgImNvbm5lY3Rpb25PYmoiLCAiY3JlYXRlQW5kT3BlbkZyYW1lIiwgInVybCIsICJ0ZW1wbGF0ZSIsICJob3N0IiwgInNoYWRvd1Jvb3QiLCAiY2FuY2VsQnV0dG9uIiwgInN0YXJ0UG9sbGluZyIsICJvblN1Y2Nlc3MiLCAiaGFuZGxlUG9sbGluZyIsICJzdGF0dXMiLCAicG9sbGluZ0ludGVydmFsIiwgImhhbmRsZUV2ZW50cyIsICJlbGVtZW50cyIsICJoYW5kbGVDYW5jZWwiLCAic3RhcnQzZHNWZXJpZmljYXRpb24iLCAiY2xlYW51cEV2ZW50TGlzdGVuZXJzIiwgImFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzIiwgInNpbXBsZU9qc0Zsb3ciLCAicGFyYW1zIiwgImZsb3dSZXN1bHQiLCAiYWRkRXJyb3JDYXRjaGVyRm9ySW5pdCIsICJpbml0IiwgImVycl9fIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgInByZWZpeCIsICJsb2ciLCAibG9nX18kMyIsICJlcnJfXyQ0IiwgInZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDIiwgIm5vbkNkZUZvcm1JbnB1dHMiLCAib25WYWxpZGF0aW9uRXJyb3IiLCAiZm9ybWF0dGVkIiwgImlzc3VlcyIsICJ2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHMiLCAidG9rZW5pemVSZXN1bHRzIiwgInRva2VuaXplUmVzdWx0IiwgInBhcnNlZCIsICJlcnJfXyQzIiwgInBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UiLCAiZmluZENwbU1hdGNoaW5nVHlwZSIsICJhbGxDUE1zIiwgInpvZE1vZGVsIiwgImNwbSIsICJjcG0yIiwgImxvZ19fJDIiLCAiZXJyX18kMiIsICJzdHJpcGVMb2dfXyIsICJydW5Db21tb25DY0Zsb3ciLCAiY29udGV4dCIsICJjaGVja291dFBheW1lbnRNZXRob2QiLCAiZmxvd0NhbGxiYWNrcyIsICJhbnlDZGVDb25uZWN0aW9uIiwgInByZWZpbGwiLCAibm9uQ2RlRm9ybUZpZWxkcyIsICJ0b2tlbml6ZUNhcmRSZXN1bHRzIiwgImNvbW1vbkNoZWNrb3V0UGFyYW1zIiwgInNob3VsZFVzZU5ld0Zsb3ciLCAic3RhcnRQZlJlc3VsdCIsICJjb21tb25DQzNEU0Zsb3ciLCAic3RyaXBlQ0MzRFNGbG93IiwgImNyZWF0ZWRQYXltZW50TWV0aG9kIiwgInBhcnNlU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgInN0cmlwZUFjdGlvbiIsICJhY3Rpb24iLCAicGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiY29tbW9uQWN0aW9uIiwgImxvZ19fJDEiLCAiZXJyX18kMSIsICJTdHJpcGVQckNwbSIsICJpbml0U3RyaXBlUHJGbG93IiwgImluaXRpYWxQcmV2aWV3IiwgInByIiwgImNhbk1ha2VQYXltZW50IiwgInJ1blN0cmlwZVByRmxvdyIsICJjdXN0b21QYXJhbXMiLCAiaW5pdFJlc3VsdCIsICJvdmVycmlkZSIsICJ1cGRhdGVQcldpdGhBbW91bnQiLCAic3RyaXBlUG1BZGRlZEV2ZW50IiwgIm1lcmdlZElucHV0cyIsICJmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtIiwgInN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhIiwgImNoZWNrb3V0UmVxdWVzdCIsICJmb3JtSW5wdXRzIiwgInN0cmlwZVBtRXZ0IiwgImlucHV0cyIsICJwYXllckZpcnN0TmFtZSIsICJwYXllckxhc3ROYW1lUGFydHMiLCAicGF5ZXJMYXN0TmFtZSIsICJhbW91bnQiLCAiaXNQZW5kaW5nIiwgImZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QiLCAiY3BtcyIsICJ3aXRoUHJvdmlkZXIiLCAid2l0aFByb2Nlc3NvciIsICJtYXRjaGVzIiwgIk9qc0Zsb3dzIiwgImdldERlZmF1bHRFeHBvcnRGcm9tQ2pzIiwgIngiLCAiT2JzZXJ2YWJsZSQyIiwgImhhc1N5bWJvbCIsICJuYW1lIiwgImdldFN5bWJvbCIsICJTeW1ib2xJdGVyYXRvciIsICJTeW1ib2xPYnNlcnZhYmxlIiwgIlN5bWJvbFNwZWNpZXMiLCAiZ2V0TWV0aG9kIiwgImdldFNwZWNpZXMiLCAiY3RvciIsICJPYnNlcnZhYmxlJDEiLCAiaXNPYnNlcnZhYmxlIiwgImhvc3RSZXBvcnRFcnJvciIsICJlbnF1ZXVlIiwgImNsZWFudXBTdWJzY3JpcHRpb24iLCAic3Vic2NyaXB0aW9uIiwgImNsZWFudXAiLCAidW5zdWJzY3JpYmUiLCAiY2xvc2VTdWJzY3JpcHRpb24iLCAiZmx1c2hTdWJzY3JpcHRpb24iLCAicXVldWUiLCAibm90aWZ5U3Vic2NyaXB0aW9uIiwgInR5cGUiLCAib2JzZXJ2ZXIiLCAibSIsICJvbk5vdGlmeSIsICJTdWJzY3JpcHRpb24iLCAic3Vic2NyaWJlciIsICJzZWxmIiwgInN1YnNjcmlwdGlvbk9ic2VydmVyIiwgIk9ic2VydmFibGUiLCAiZG9uZSIsICJDIiwgImhhc1NlZWQiLCAiaGFzVmFsdWUiLCAiZmlyc3QiLCAidmFsdWVzIiwgInNvdXJjZXMiLCAiaW5kZXgiLCAic3RhcnROZXh0IiwgIm5leHQiLCAidiIsICJzdWJzY3JpcHRpb25zIiwgIm91dGVyIiwgImlubmVyIiwgImNvbXBsZXRlSWZEb25lIiwgInMiLCAibWV0aG9kIiwgIm9ic2VydmFibGUiLCAiaXRlbSIsICJpdGVtcyIsICJ6ZW5PYnNlcnZhYmxlIiwgImxvZ19fIiwgImluaXRpYWxpemVPanNGbG93cyIsICJydW5Jbml0Rmxvd0FzT2JzZXJ2YWJsZSIsICJmbG93TmFtZSIsICJpbml0RmxvdyIsICJQUl9MT0FESU5HIiwgIlBSX0VSUk9SIiwgIk9wZW5QYXlGb3JtRXZlbnRIYW5kbGVyIiwgImZvcm1JbnN0YW5jZSIsICJoZWlnaHQiLCAiZmllbGQiLCAic291cmNlIiwgImNyZWF0ZUNvbm5lY3Rpb24iLCAiaXNWYWxpZE9iamVjdCIsICJDb25uZWN0aW9uTWFuYWdlciIsICJpZCIsICJjb25uZWN0aW9uIiwgIl9PcGVuUGF5Rm9ybSIsICJjb25maWciLCAiaW5pdFN0YXR1cyIsICJfZSIsICJfZiIsICJjYW5BcHBsZVBheSIsICJjYW5Hb29nbGVQYXkiLCAidXNlclBhcmFtcyIsICJwcm92aWRlciIsICJmb3JtIiwgImVsZW1lbnQiLCAiZWxlbWVudFZhbHVlIiwgImZyYW1lIiwgInF1ZXJ5U3RyaW5nIiwgInNlbGVjdG9yIiwgImNvbm4iLCAiY2RlQ29ubmVjdGlvbnMiLCAibm9PcCIsICJlcnJNc2ciLCAiT3BlblBheUZvcm0iXQp9Cg==
|