@getopenpay/openpay-js-react 0.1.17 → 0.1.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/index.js +69 -67
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -64,7 +64,7 @@ ${e.message}`), e.message);
|
|
|
64
64
|
r(`[form] Error running callback (${e}):`, i);
|
|
65
65
|
return;
|
|
66
66
|
}
|
|
67
|
-
}, k = t.string().trim().min(1, { message: "Cannot be blank" }),
|
|
67
|
+
}, k = t.string().trim().min(1, { message: "Cannot be blank" }), w = t.string().trim().optional(), ce = (e) => t.nullable(e.optional());
|
|
68
68
|
var y = /* @__PURE__ */ ((e) => (e.FIRST_NAME = "firstName", e.LAST_NAME = "lastName", e.EMAIL = "email", e.ZIP_CODE = "zipCode", e.CITY = "city", e.STATE = "state", e.COUNTRY = "country", e.ADDRESS = "address", e.PHONE = "phone", e.PROMOTION_CODE = "promotionCode", e))(y || {});
|
|
69
69
|
const ut = t.nativeEnum(y);
|
|
70
70
|
var dt = /* @__PURE__ */ ((e) => (e.CARD_NUMBER = "cardNumber", e.CARD_EXPIRY = "cardExpiry", e.CARD_CVC = "cardCvc", e))(dt || {});
|
|
@@ -78,20 +78,21 @@ const sr = t.nativeEnum(K), pe = t.object({
|
|
|
78
78
|
id: t.string()
|
|
79
79
|
});
|
|
80
80
|
t.object({
|
|
81
|
-
cardNumber:
|
|
82
|
-
expiry:
|
|
83
|
-
cvc:
|
|
81
|
+
cardNumber: w,
|
|
82
|
+
expiry: w,
|
|
83
|
+
cvc: w
|
|
84
84
|
});
|
|
85
85
|
t.object({
|
|
86
|
-
backgroundColor:
|
|
87
|
-
color:
|
|
88
|
-
fontFamily:
|
|
89
|
-
fontSize:
|
|
90
|
-
fontWeight:
|
|
91
|
-
margin:
|
|
92
|
-
padding:
|
|
93
|
-
letterSpacing:
|
|
94
|
-
lineHeight:
|
|
86
|
+
backgroundColor: w,
|
|
87
|
+
color: w,
|
|
88
|
+
fontFamily: w,
|
|
89
|
+
fontSize: w,
|
|
90
|
+
fontWeight: w,
|
|
91
|
+
margin: w,
|
|
92
|
+
padding: w,
|
|
93
|
+
letterSpacing: w,
|
|
94
|
+
lineHeight: w,
|
|
95
|
+
hideIcon: w
|
|
95
96
|
});
|
|
96
97
|
const x = t.enum([
|
|
97
98
|
// Element -> Form
|
|
@@ -133,7 +134,7 @@ const x = t.enum([
|
|
|
133
134
|
type: t.literal(x.enum.LOADED),
|
|
134
135
|
sessionId: k,
|
|
135
136
|
totalAmountAtoms: t.number(),
|
|
136
|
-
currency:
|
|
137
|
+
currency: w,
|
|
137
138
|
checkoutPaymentMethods: t.array(pe)
|
|
138
139
|
}), gr = t.object({
|
|
139
140
|
type: t.literal(x.enum.PAYMENT_FLOW_STARTED),
|
|
@@ -149,19 +150,19 @@ const x = t.enum([
|
|
|
149
150
|
email: k,
|
|
150
151
|
zipCode: k,
|
|
151
152
|
country: k,
|
|
152
|
-
promotionCode:
|
|
153
|
+
promotionCode: w
|
|
153
154
|
}), vr = t.object({
|
|
154
155
|
email: k,
|
|
155
156
|
zipCode: k,
|
|
156
157
|
country: k,
|
|
157
|
-
promotionCode:
|
|
158
|
+
promotionCode: w
|
|
158
159
|
}), wr = x.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), Er = t.object({
|
|
159
160
|
type: wr,
|
|
160
161
|
sessionId: k,
|
|
161
162
|
checkoutPaymentMethod: pe,
|
|
162
163
|
paymentFlowMetadata: t.any().optional(),
|
|
163
164
|
doNotUseLegacyCCFlow: t.boolean().optional(),
|
|
164
|
-
existingCCPMId:
|
|
165
|
+
existingCCPMId: w
|
|
165
166
|
}).extend(X.shape), Cr = t.object({
|
|
166
167
|
type: t.literal(x.enum.TOKENIZE_SUCCESS),
|
|
167
168
|
isReadyForCheckout: t.boolean()
|
|
@@ -679,7 +680,7 @@ const Ie = (e) => async (n) => {
|
|
|
679
680
|
n(s, o.errors);
|
|
680
681
|
}
|
|
681
682
|
}), Cn(`Error tokenizing card: got validation errors: ${JSON.stringify(r.errors)}`), new Error("Got validation errors while tokenizing card");
|
|
682
|
-
}, $e = "ojs-stripe-link-btn", { log__:
|
|
683
|
+
}, $e = "ojs-stripe-link-btn", { log__: E, err__: kn } = M("stripe-link"), Pn = t.object({
|
|
683
684
|
provider: t.literal("stripe_link"),
|
|
684
685
|
processor_name: t.literal("stripe"),
|
|
685
686
|
metadata: t.object({
|
|
@@ -692,18 +693,18 @@ const Ie = (e) => async (n) => {
|
|
|
692
693
|
).length(1), jn = Pt(
|
|
693
694
|
async ({ context: e, formCallbacks: n }) => {
|
|
694
695
|
const r = e.customInitParams.stripeLink;
|
|
695
|
-
|
|
696
|
+
E("Checking if there are any CPMs for Stripe Link...");
|
|
696
697
|
const o = Ot(e.checkoutPaymentMethods, Pn);
|
|
697
|
-
|
|
698
|
+
E("Starting stripe link flow...");
|
|
698
699
|
const i = e.anyCdeConnection, s = await ee(i), a = s.mode === "setup";
|
|
699
|
-
|
|
700
|
+
E("Creating stripe elements...");
|
|
700
701
|
const c = await Et(i, s.token, a, void 0), { elements: l, stripe: u } = await Nr(o.metadata.stripe_pk, {
|
|
701
702
|
mode: "setup",
|
|
702
703
|
currency: c.currency,
|
|
703
704
|
setup_future_usage: "off_session",
|
|
704
705
|
paymentMethodCreation: "manual"
|
|
705
706
|
});
|
|
706
|
-
|
|
707
|
+
E("Creating express checkout...");
|
|
707
708
|
const d = l.create("expressCheckout", {
|
|
708
709
|
buttonHeight: r == null ? void 0 : r.buttonHeight,
|
|
709
710
|
paymentMethods: {
|
|
@@ -717,21 +718,21 @@ const Ie = (e) => async (n) => {
|
|
|
717
718
|
}, _ = () => {
|
|
718
719
|
d.unmount();
|
|
719
720
|
};
|
|
720
|
-
return r != null && r.doNotMountOnInit ?
|
|
721
|
-
if (
|
|
722
|
-
|
|
721
|
+
return r != null && r.doNotMountOnInit ? E("NOT mounting stripe link button (doNotMountOnInit is true)") : (E("Mounting stripe link button..."), f()), d.on("click", async (m) => {
|
|
722
|
+
if (E("Stripe Link button clicked"), r != null && r.overrideLinkSubmit && !await r.overrideLinkSubmit()) {
|
|
723
|
+
E("Stripe Link submit aborted by overrideLinkSubmit");
|
|
723
724
|
return;
|
|
724
725
|
}
|
|
725
726
|
m.resolve();
|
|
726
727
|
}), d.on("confirm", async (m) => {
|
|
727
|
-
|
|
728
|
+
E("Stripe Link window confirmed", m);
|
|
728
729
|
const p = await u.createPaymentMethod({
|
|
729
730
|
elements: l,
|
|
730
731
|
params: {
|
|
731
732
|
billing_details: m.billingDetails
|
|
732
733
|
}
|
|
733
734
|
});
|
|
734
|
-
p.error ? (kn("error", p.error), n.get.onCheckoutError(p.error.message ?? "Stripe Link unknown error")) : (
|
|
735
|
+
p.error ? (kn("error", p.error), n.get.onCheckoutError(p.error.message ?? "Stripe Link unknown error")) : (E("paymentMethod", p.paymentMethod), J.stripeLink.run({
|
|
735
736
|
context: e,
|
|
736
737
|
checkoutPaymentMethod: o,
|
|
737
738
|
nonCdeFormInputs: Te(e.formDiv),
|
|
@@ -756,27 +757,27 @@ const Ie = (e) => async (n) => {
|
|
|
756
757
|
formCallbacks: o,
|
|
757
758
|
customParams: i
|
|
758
759
|
}) => {
|
|
759
|
-
|
|
760
|
+
E("Running Stripe Link flow...");
|
|
760
761
|
const s = e.anyCdeConnection;
|
|
761
|
-
|
|
762
|
+
E("Merging PM fields with form fields...");
|
|
762
763
|
const a = Rn(r, i.stripePM), c = xe(a, o.get.onValidationError);
|
|
763
|
-
|
|
764
|
+
E("Starting payment flow...");
|
|
764
765
|
const l = await fn(s, {
|
|
765
766
|
payment_provider: n.provider,
|
|
766
767
|
checkout_payment_method: n,
|
|
767
768
|
their_existing_pm_id: i.stripePM.id
|
|
768
769
|
});
|
|
769
|
-
|
|
770
|
+
E("Start payment flow response", l);
|
|
770
771
|
const u = On.parse(l.required_user_actions)[0].our_existing_pm_id, d = await ee(s);
|
|
771
772
|
if (d.mode === "setup") {
|
|
772
|
-
|
|
773
|
+
E("Doing payment setup...");
|
|
773
774
|
const f = await Re(s, {
|
|
774
775
|
secure_token: d.token,
|
|
775
776
|
existing_cc_pm_id: u
|
|
776
777
|
});
|
|
777
778
|
return { mode: "setup", result: Ae(f) };
|
|
778
779
|
} else {
|
|
779
|
-
|
|
780
|
+
E("Doing checkout...");
|
|
780
781
|
const f = {
|
|
781
782
|
secure_token: d.token,
|
|
782
783
|
payment_input: {
|
|
@@ -798,7 +799,7 @@ const Ie = (e) => async (n) => {
|
|
|
798
799
|
var r, o, i, s, a;
|
|
799
800
|
const c = { ...e }, [l, ...u] = ((o = (r = n.billing_details.name) == null ? void 0 : r.trim()) == null ? void 0 : o.split(/\s+/)) ?? [], d = u.join(" ") || void 0;
|
|
800
801
|
return c[y.FIRST_NAME] = c[y.FIRST_NAME] || l || "_OP_UNKNOWN", c[y.LAST_NAME] = c[y.LAST_NAME] || d || "_OP_UNKNOWN", c[y.EMAIL] = c[y.EMAIL] || // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
801
|
-
((i = n.link) == null ? void 0 : i.email) || n.billing_details.email || "op_unfilled@getopenpay.com", c[y.ZIP_CODE] = c[y.ZIP_CODE] || ((s = n.billing_details.address) == null ? void 0 : s.postal_code) || "00000", c[y.COUNTRY] = c[y.COUNTRY] || ((a = n.billing_details.address) == null ? void 0 : a.country) || "US",
|
|
802
|
+
((i = n.link) == null ? void 0 : i.email) || n.billing_details.email || "op_unfilled@getopenpay.com", c[y.ZIP_CODE] = c[y.ZIP_CODE] || ((s = n.billing_details.address) == null ? void 0 : s.postal_code) || "00000", c[y.COUNTRY] = c[y.COUNTRY] || ((a = n.billing_details.address) == null ? void 0 : a.country) || "US", E("Final form inputs:", c), c;
|
|
802
803
|
}, In = (e) => new Promise((n) => {
|
|
803
804
|
const r = () => {
|
|
804
805
|
const o = document.getElementById(e);
|
|
@@ -1318,7 +1319,7 @@ function no(e) {
|
|
|
1318
1319
|
}, a);
|
|
1319
1320
|
}
|
|
1320
1321
|
}
|
|
1321
|
-
function
|
|
1322
|
+
function S(e) {
|
|
1322
1323
|
return typeof e == "function";
|
|
1323
1324
|
}
|
|
1324
1325
|
function fe(e) {
|
|
@@ -1370,7 +1371,7 @@ var te = function() {
|
|
|
1370
1371
|
else
|
|
1371
1372
|
a.remove(this);
|
|
1372
1373
|
var d = this.initialTeardown;
|
|
1373
|
-
if (
|
|
1374
|
+
if (S(d))
|
|
1374
1375
|
try {
|
|
1375
1376
|
d();
|
|
1376
1377
|
} catch (h) {
|
|
@@ -1432,10 +1433,10 @@ var te = function() {
|
|
|
1432
1433
|
}(), e;
|
|
1433
1434
|
}(), xt = te.EMPTY;
|
|
1434
1435
|
function Lt(e) {
|
|
1435
|
-
return e instanceof te || e && "closed" in e &&
|
|
1436
|
+
return e instanceof te || e && "closed" in e && S(e.remove) && S(e.add) && S(e.unsubscribe);
|
|
1436
1437
|
}
|
|
1437
1438
|
function He(e) {
|
|
1438
|
-
|
|
1439
|
+
S(e) ? e() : e.unsubscribe();
|
|
1439
1440
|
}
|
|
1440
1441
|
var Mt = {
|
|
1441
1442
|
onUnhandledError: null,
|
|
@@ -1534,7 +1535,7 @@ var so = function() {
|
|
|
1534
1535
|
z(n, e);
|
|
1535
1536
|
function n(r, o, i) {
|
|
1536
1537
|
var s = e.call(this) || this, a;
|
|
1537
|
-
if (
|
|
1538
|
+
if (S(r) || !r)
|
|
1538
1539
|
a = {
|
|
1539
1540
|
next: r ?? void 0,
|
|
1540
1541
|
error: o ?? void 0,
|
|
@@ -1643,13 +1644,13 @@ function Ye(e) {
|
|
|
1643
1644
|
return (n = e ?? Mt.Promise) !== null && n !== void 0 ? n : Promise;
|
|
1644
1645
|
}
|
|
1645
1646
|
function mo(e) {
|
|
1646
|
-
return e &&
|
|
1647
|
+
return e && S(e.next) && S(e.error) && S(e.complete);
|
|
1647
1648
|
}
|
|
1648
1649
|
function po(e) {
|
|
1649
1650
|
return e && e instanceof Le || mo(e) && Lt(e);
|
|
1650
1651
|
}
|
|
1651
1652
|
function ho(e) {
|
|
1652
|
-
return
|
|
1653
|
+
return S(e == null ? void 0 : e.lift);
|
|
1653
1654
|
}
|
|
1654
1655
|
function fo(e) {
|
|
1655
1656
|
return function(n) {
|
|
@@ -1905,13 +1906,13 @@ var _o = function(e) {
|
|
|
1905
1906
|
return e && typeof e.length == "number" && typeof e != "function";
|
|
1906
1907
|
};
|
|
1907
1908
|
function ko(e) {
|
|
1908
|
-
return
|
|
1909
|
+
return S(e == null ? void 0 : e.then);
|
|
1909
1910
|
}
|
|
1910
1911
|
function Po(e) {
|
|
1911
|
-
return
|
|
1912
|
+
return S(e[Me]);
|
|
1912
1913
|
}
|
|
1913
1914
|
function Oo(e) {
|
|
1914
|
-
return Symbol.asyncIterator &&
|
|
1915
|
+
return Symbol.asyncIterator && S(e == null ? void 0 : e[Symbol.asyncIterator]);
|
|
1915
1916
|
}
|
|
1916
1917
|
function jo(e) {
|
|
1917
1918
|
return new TypeError("You provided " + (e !== null && typeof e == "object" ? "an invalid object" : "'" + e + "'") + " where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.");
|
|
@@ -1921,7 +1922,7 @@ function To() {
|
|
|
1921
1922
|
}
|
|
1922
1923
|
var Ro = To();
|
|
1923
1924
|
function Io(e) {
|
|
1924
|
-
return
|
|
1925
|
+
return S(e == null ? void 0 : e[Ro]);
|
|
1925
1926
|
}
|
|
1926
1927
|
function Ao(e) {
|
|
1927
1928
|
return ro(this, arguments, function() {
|
|
@@ -1955,7 +1956,7 @@ function Ao(e) {
|
|
|
1955
1956
|
});
|
|
1956
1957
|
}
|
|
1957
1958
|
function xo(e) {
|
|
1958
|
-
return
|
|
1959
|
+
return S(e == null ? void 0 : e.getReader);
|
|
1959
1960
|
}
|
|
1960
1961
|
function Lo(e) {
|
|
1961
1962
|
if (e instanceof U)
|
|
@@ -1979,7 +1980,7 @@ function Lo(e) {
|
|
|
1979
1980
|
function Mo(e) {
|
|
1980
1981
|
return new U(function(n) {
|
|
1981
1982
|
var r = e[Me]();
|
|
1982
|
-
if (
|
|
1983
|
+
if (S(r.subscribe))
|
|
1983
1984
|
return r.subscribe(n);
|
|
1984
1985
|
throw new TypeError("Provided object does not correctly implement Symbol.observable");
|
|
1985
1986
|
});
|
|
@@ -2078,7 +2079,7 @@ function zo(e, n, r, o, i) {
|
|
|
2078
2079
|
return s;
|
|
2079
2080
|
}
|
|
2080
2081
|
function qo(e, n) {
|
|
2081
|
-
var r =
|
|
2082
|
+
var r = S(e) ? e : function() {
|
|
2082
2083
|
return e;
|
|
2083
2084
|
}, o = function(i) {
|
|
2084
2085
|
return i.error(r());
|
|
@@ -2425,7 +2426,7 @@ const oi = (e, n, r) => {
|
|
|
2425
2426
|
for (const r of Object.values(this.registeredElements ?? {}))
|
|
2426
2427
|
r && r.node.remove();
|
|
2427
2428
|
window.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler));
|
|
2428
|
-
}, je.assignAsSingleton(this), this.ojsVersion = "0.1.
|
|
2429
|
+
}, je.assignAsSingleton(this), this.ojsVersion = "0.1.18", this.ojsReleaseVersion = "local_build", this.baseUrl = n.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...n, baseUrl: this.baseUrl }, this.formCallbacks = ei.fromObject(n), this.registeredElements = null, this.formId = `opjs-form-${window.crypto.randomUUID()}`, this.referrer = window.location.origin, this.formTarget = n.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new ni(), this.eventHandler = new ti(this.formId, this.baseUrl, this.formCallbacks, {
|
|
2429
2430
|
setFormHeight: this.setFormHeight,
|
|
2430
2431
|
onCdeLoaded: this.onCdeLoaded,
|
|
2431
2432
|
onCdeLoadError: this.onCdeLoadError
|
|
@@ -2474,7 +2475,7 @@ const ci = (e, n, r) => (...o) => {
|
|
|
2474
2475
|
r(`[form] Error running callback (${e}):`, i);
|
|
2475
2476
|
return;
|
|
2476
2477
|
}
|
|
2477
|
-
}, P = t.string().trim().min(1, { message: "Cannot be blank" }),
|
|
2478
|
+
}, P = t.string().trim().min(1, { message: "Cannot be blank" }), C = t.string().trim().optional(), me = (e) => t.nullable(e.optional());
|
|
2478
2479
|
var Ft = /* @__PURE__ */ ((e) => (e.FIRST_NAME = "firstName", e.LAST_NAME = "lastName", e.EMAIL = "email", e.ZIP_CODE = "zipCode", e.CITY = "city", e.STATE = "state", e.COUNTRY = "country", e.ADDRESS = "address", e.PHONE = "phone", e.PROMOTION_CODE = "promotionCode", e))(Ft || {});
|
|
2479
2480
|
const li = t.nativeEnum(Ft);
|
|
2480
2481
|
var $t = /* @__PURE__ */ ((e) => (e.CARD_NUMBER = "cardNumber", e.CARD_EXPIRY = "cardExpiry", e.CARD_CVC = "cardCvc", e))($t || {});
|
|
@@ -2489,20 +2490,21 @@ const ye = t.object({
|
|
|
2489
2490
|
id: t.string()
|
|
2490
2491
|
});
|
|
2491
2492
|
t.object({
|
|
2492
|
-
cardNumber:
|
|
2493
|
-
expiry:
|
|
2494
|
-
cvc:
|
|
2493
|
+
cardNumber: C,
|
|
2494
|
+
expiry: C,
|
|
2495
|
+
cvc: C
|
|
2495
2496
|
});
|
|
2496
2497
|
t.object({
|
|
2497
|
-
backgroundColor:
|
|
2498
|
-
color:
|
|
2499
|
-
fontFamily:
|
|
2500
|
-
fontSize:
|
|
2501
|
-
fontWeight:
|
|
2502
|
-
margin:
|
|
2503
|
-
padding:
|
|
2504
|
-
letterSpacing:
|
|
2505
|
-
lineHeight:
|
|
2498
|
+
backgroundColor: C,
|
|
2499
|
+
color: C,
|
|
2500
|
+
fontFamily: C,
|
|
2501
|
+
fontSize: C,
|
|
2502
|
+
fontWeight: C,
|
|
2503
|
+
margin: C,
|
|
2504
|
+
padding: C,
|
|
2505
|
+
letterSpacing: C,
|
|
2506
|
+
lineHeight: C,
|
|
2507
|
+
hideIcon: C
|
|
2506
2508
|
});
|
|
2507
2509
|
const D = t.enum([
|
|
2508
2510
|
// Element -> Form
|
|
@@ -2544,7 +2546,7 @@ const D = t.enum([
|
|
|
2544
2546
|
type: t.literal(D.enum.LOADED),
|
|
2545
2547
|
sessionId: P,
|
|
2546
2548
|
totalAmountAtoms: t.number(),
|
|
2547
|
-
currency:
|
|
2549
|
+
currency: C,
|
|
2548
2550
|
checkoutPaymentMethods: t.array(ye)
|
|
2549
2551
|
}), Ei = t.object({
|
|
2550
2552
|
type: t.literal(D.enum.PAYMENT_FLOW_STARTED),
|
|
@@ -2560,19 +2562,19 @@ const D = t.enum([
|
|
|
2560
2562
|
email: P,
|
|
2561
2563
|
zipCode: P,
|
|
2562
2564
|
country: P,
|
|
2563
|
-
promotionCode:
|
|
2565
|
+
promotionCode: C
|
|
2564
2566
|
}), Si = t.object({
|
|
2565
2567
|
email: P,
|
|
2566
2568
|
zipCode: P,
|
|
2567
2569
|
country: P,
|
|
2568
|
-
promotionCode:
|
|
2570
|
+
promotionCode: C
|
|
2569
2571
|
}), ki = D.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), Pi = t.object({
|
|
2570
2572
|
type: ki,
|
|
2571
2573
|
sessionId: P,
|
|
2572
2574
|
checkoutPaymentMethod: ye,
|
|
2573
2575
|
paymentFlowMetadata: t.any().optional(),
|
|
2574
2576
|
doNotUseLegacyCCFlow: t.boolean().optional(),
|
|
2575
|
-
existingCCPMId:
|
|
2577
|
+
existingCCPMId: C
|
|
2576
2578
|
}).extend(_e.shape), Oi = t.object({
|
|
2577
2579
|
type: t.literal(D.enum.TOKENIZE_SUCCESS),
|
|
2578
2580
|
isReadyForCheckout: t.boolean()
|
|
@@ -3053,4 +3055,4 @@ export {
|
|
|
3053
3055
|
Ft as FieldName,
|
|
3054
3056
|
Jt as useOpenPayElements
|
|
3055
3057
|
};
|
|
3056
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVJlZiwgdXNlTWVtbywgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgeiBhcyB6JDEgfSBmcm9tICd6b2QnO1xuaW1wb3J0ICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBCIGZyb20gJ2NoYWxrJztcblxuY29uc3QgRWxlbWVudHNDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG4gIGZvcm1JZDogXCJcIixcbiAgZm9ybUhlaWdodDogXCJcIixcbiAgcmVmZXJyZXI6IHZvaWQgMCxcbiAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdm9pZCAwLFxuICByZWdpc3RlcklmcmFtZTogKCkgPT4ge1xuICB9LFxuICBiYXNlVXJsOiBcIlwiXG59KTtcblxuY29uc3QgdXNlT3BlblBheUVsZW1lbnRzID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChFbGVtZW50c0NvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VPcGVuUGF5RWxlbWVudHMgbXVzdCBiZSB1c2VkIHdpdGhpbiBhbiBPcGVuUGF5RWxlbWVudHNQcm92aWRlclwiKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn07XG5cbmNvbnN0IG10ID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCB5dCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSksIF90ID0geiQxLmFycmF5KHl0KSwgZ3QgPSB6JDEub2JqZWN0KHtcbiAgY29kZTogeiQxLnN0cmluZygpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIHBhdGg6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KSwgYnQgPSB6JDEuYXJyYXkoZ3QpLCB2dCA9IHtcbiAgXCJmYWlsZWQgdG8gZmV0Y2hcIjogXCJDb25uZWN0aW9uIGVycm9yOiBwbGVhc2UgZG91YmxlIGNoZWNrIGlmIHlvdSBhcmUgY29ubmVjdGVkIHRvIHRoZSBpbnRlcm5ldCwgdGhlbiB0cnkgYWdhaW5cIlxufSwgYWUgPSAodCkgPT4ge1xuICBjb25zdCByID0gdC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgcmV0dXJuIHZ0W3JdID8/IHQ7XG59LCB3dCA9ICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHR5cGVvZiBKU09OLnBhcnNlKHQpID09IFwib2JqZWN0XCI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAhMTtcbiAgfVxufSwgRXQgPSAodCkgPT4gdC5sZW5ndGggPT09IDEgPyBhZSh0WzBdLm1zZykgOiBgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpcbiR7dC5tYXAoKGUpID0+IGDigKIgJHthZShlLm1zZyl9YCkuam9pbihgXG5gKX1gLCBTdCA9ICh0KSA9PiBgRW5jb3VudGVyZWQgdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke3QubWFwKChlKSA9PiBgLSAke2UucGF0aC5qb2luKFwiL1wiKX06ICR7ZS5tZXNzYWdlfWApLmpvaW4oYFxuYCl9YCwgTiA9ICh0KSA9PiB7XG4gIGlmICh0IGluc3RhbmNlb2YgRXJyb3IpXG4gICAgaWYgKHd0KHQubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IHIgPSBKU09OLnBhcnNlKHQubWVzc2FnZSk7XG4gICAgICByZXR1cm4gX3Quc2FmZVBhcnNlKHIpLnN1Y2Nlc3MgPyBFdChyKSA6IGJ0LnNhZmVQYXJzZShyKS5zdWNjZXNzID8gU3QocikgOiAoY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCB1bmtub3duIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0OlxuJHt0Lm1lc3NhZ2V9YCksIHQubWVzc2FnZSk7XG4gICAgfSBlbHNlXG4gICAgICByZXR1cm4gYWUodC5tZXNzYWdlKTtcbiAgaWYgKHR5cGVvZiB0ID09IFwib2JqZWN0XCIpXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0KTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICByZXR1cm4gciArIFwiXCI7XG4gICAgfVxuICBlbHNlXG4gICAgcmV0dXJuIHQgKyBcIlwiO1xufSwgQ3QgPSAodCwgciwgZSkgPT4gKC4uLm4pID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gciguLi5uKTtcbiAgfSBjYXRjaCAoaSkge1xuICAgIGUoYFtmb3JtXSBFcnJvciBydW5uaW5nIGNhbGxiYWNrICgke3R9KTpgLCBpKTtcbiAgICByZXR1cm47XG4gIH1cbn0sIFMgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IFwiQ2Fubm90IGJlIGJsYW5rXCIgfSksIEUgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCksIFogPSAodCkgPT4geiQxLm51bGxhYmxlKHQub3B0aW9uYWwoKSk7XG52YXIgbSA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LkZJUlNUX05BTUUgPSBcImZpcnN0TmFtZVwiLCB0LkxBU1RfTkFNRSA9IFwibGFzdE5hbWVcIiwgdC5FTUFJTCA9IFwiZW1haWxcIiwgdC5aSVBfQ09ERSA9IFwiemlwQ29kZVwiLCB0LkNJVFkgPSBcImNpdHlcIiwgdC5TVEFURSA9IFwic3RhdGVcIiwgdC5DT1VOVFJZID0gXCJjb3VudHJ5XCIsIHQuQUREUkVTUyA9IFwiYWRkcmVzc1wiLCB0LlBIT05FID0gXCJwaG9uZVwiLCB0LlBST01PVElPTl9DT0RFID0gXCJwcm9tb3Rpb25Db2RlXCIsIHQpKShtIHx8IHt9KTtcbmNvbnN0IE5lID0geiQxLm5hdGl2ZUVudW0obSk7XG52YXIgVWUgPSAvKiBAX19QVVJFX18gKi8gKCh0KSA9PiAodC5DQVJEX05VTUJFUiA9IFwiY2FyZE51bWJlclwiLCB0LkNBUkRfRVhQSVJZID0gXCJjYXJkRXhwaXJ5XCIsIHQuQ0FSRF9DVkMgPSBcImNhcmRDdmNcIiwgdCkpKFVlIHx8IHt9KTtcbmNvbnN0ICRlID0geiQxLm5hdGl2ZUVudW0oVWUpLCBWZSA9IHokMS51bmlvbihbTmUsICRlXSk7XG52YXIgRiA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LkNBUkQgPSBcImNhcmRcIiwgdC5DQVJEX05VTUJFUiA9IFwiY2FyZC1udW1iZXJcIiwgdC5DQVJEX0VYUElSWSA9IFwiY2FyZC1leHBpcnlcIiwgdC5DQVJEX0NWQyA9IFwiY2FyZC1jdmNcIiwgdCkpKEYgfHwge30pO1xuY29uc3Qga3QgPSB6JDEubmF0aXZlRW51bShGKSwgZWUgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IFooeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IFooeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgUHQgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2FyZE51bWJlcjogRSxcbiAgZXhwaXJ5OiBFLFxuICBjdmM6IEVcbn0pO1xueiQxLm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogRSxcbiAgY29sb3I6IEUsXG4gIGZvbnRGYW1pbHk6IEUsXG4gIGZvbnRTaXplOiBFLFxuICBmb250V2VpZ2h0OiBFLFxuICBtYXJnaW46IEUsXG4gIHBhZGRpbmc6IEUsXG4gIGxldHRlclNwYWNpbmc6IEUsXG4gIGxpbmVIZWlnaHQ6IEVcbn0pO1xuY29uc3QgUCA9IHokMS5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pLCBJdCA9IFAuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSksIE90ID0geiQxLm9iamVjdCh7IHR5cGU6IEl0IH0pLCBSdCA9IFAuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pLCBBdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBSdCxcbiAgZWxlbWVudFR5cGU6ICRlLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pLCBUdCA9IFAuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSksIGp0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFR0LFxuICBtZXNzYWdlOiBTLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KSwgTXQgPSBQLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSksIEx0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IE10LFxuICBlbGVtZW50VHlwZTogVmUsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pLCBEdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChQLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBTXG59KSwgRnQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoUC5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogUyxcbiAgdG90YWxBbW91bnRBdG9tczogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogRSxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogeiQxLmFycmF5KGVlKVxufSksIHh0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKFAuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHokMS5vcHRpb25hbCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBOdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChQLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogeiQxLnN0cmluZygpXG59KSwgViA9IHokMS5vYmplY3Qoe1xuICBmaXJzdE5hbWU6IFMsXG4gIGxhc3ROYW1lOiBTLFxuICBlbWFpbDogUyxcbiAgemlwQ29kZTogUyxcbiAgY291bnRyeTogUyxcbiAgcHJvbW90aW9uQ29kZTogRVxufSksIFV0ID0geiQxLm9iamVjdCh7XG4gIGVtYWlsOiBTLFxuICB6aXBDb2RlOiBTLFxuICBjb3VudHJ5OiBTLFxuICBwcm9tb3Rpb25Db2RlOiBFXG59KSwgJHQgPSBQLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSksIFZ0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6ICR0LFxuICBzZXNzaW9uSWQ6IFMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZWUsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogRVxufSkuZXh0ZW5kKFYuc2hhcGUpLCBxdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChQLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogeiQxLmJvb2xlYW4oKVxufSksIHp0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKFAuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6JDEuc3RyaW5nKClcbn0pLCBIdCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgT3QsXG4gIEF0LFxuICBqdCxcbiAgTHQsXG4gIER0LFxuICBGdCxcbiAgVnQsXG4gIHF0LFxuICB6dCxcbiAgeHQsXG4gIE50XG5dKSwgWXQgPSB6JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogSHQsXG4gIG5vbmNlOiBTLFxuICBmb3JtSWQ6IFMsXG4gIGVsZW1lbnRJZDogU1xufSk7XG56JDEub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogU1xufSk7XG56JDEuZW51bShbXCJhcHBsZV9wYXlcIiwgXCJnb29nbGVfcGF5XCJdKTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IFooeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBCdCA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHokMS5hcnJheShQdClcbn0pLCBKdCA9IHokMS5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogeiQxLnN0cmluZygpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgS3QgPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoITEpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KEp0KVxufSksIEd0ID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6JDEub2JqZWN0KHsgc3VjY2VzczogeiQxLmxpdGVyYWwoITApIH0pLFxuICBLdFxuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogZWUsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFYsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IFooeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogZWUsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFYsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpXG59KTtcbnZhciBEID0gLyogQF9fUFVSRV9fICovICgodCkgPT4gKHQuU1VDQ0VTUyA9IFwic3VjY2Vzc1wiLCB0LkZBSUxVUkUgPSBcImZhaWx1cmVcIiwgdC5DQU5DRUxMRUQgPSBcImNhbmNlbGxlZFwiLCB0KSkoRCB8fCB7fSk7XG5jb25zdCBadCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5lbnVtKFtcbiAgICBcInN1Y2Nlc3NcIixcbiAgICBcImZhaWx1cmVcIixcbiAgICBcImNhbmNlbGxlZFwiXG4gICAgLyogQ0FOQ0VMTEVEICovXG4gIF0pLFxuICBocmVmOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBocmVmOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbmNvbnN0IFd0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6JDEuc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIGNvbnNlbnRfaWQ6IHokMS5zdHJpbmcoKVxufSksIFF0ID0gKHQpID0+IHtcbiAgY29uc3QgciA9IHt9O1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXModCkuZm9yRWFjaCgoW2UsIG5dKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGkgPSBOZS5wYXJzZShlKTtcbiAgICAgIEFycmF5LmlzQXJyYXkobikgPyByW2ldID0gbiA6IEFycmF5LmlzQXJyYXkobi5fZXJyb3JzKSAmJiAocltpXSA9IG4uX2Vycm9ycyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KSwgcjtcbn0sIFh0ID0geiQxLm9iamVjdCh7XG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogeiQxLnN0cmluZygpXG59KSwgZXIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG59KSwgdHIgPSB7XG4gIHVzZDogXCJ1c2RcIixcbiAgYnJsOiBcImJybFwiXG59LCB0ZSA9IGFzeW5jICh0KSA9PiB7XG4gIGZvciAobGV0IGUgPSAwOyBlIDwgMTA7IGUrKylcbiAgICBnZSgpIHx8IGF3YWl0IG9yKDUwMCk7XG4gIGlmICghZ2UoKSlcbiAgICB0aHJvdyBjb25zb2xlLmxvZyhcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpLCBuZXcgRXJyb3IoXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKTtcbiAgcmV0dXJuIG5ldyBTdHJpcGUodCk7XG59LCByciA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSBhd2FpdCB0ZSh0KTtcbiAgcmV0dXJuIHtcbiAgICBlbGVtZW50czogZS5lbGVtZW50cyhyKSxcbiAgICBzdHJpcGU6IGVcbiAgfTtcbn0sIG5yID0gYXN5bmMgKHQsIHIsIGUsIG4sIGkpID0+IHtcbiAgY29uc3QgcyA9IGF3YWl0IHRlKHQpLCBhID0gdHJbZS50b0xvd2VyQ2FzZSgpLnRyaW0oKV07XG4gIHJldHVybiBzLnBheW1lbnRSZXF1ZXN0KHtcbiAgICAvLyBUT0RPOiByZXBsYWNlIHRoaXMgd2l0aCBzdHJpcGUgYWNjb3VudCBjb3VudHJ5IGFzIHNvb24gYXMgd2Ugc3VwcG9ydCBpdFxuICAgIGNvdW50cnk6IFwiVVNcIixcbiAgICBjdXJyZW5jeTogYSxcbiAgICB0b3RhbDoge1xuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIGFtb3VudDogcixcbiAgICAgIHBlbmRpbmc6IG5cbiAgICB9LFxuICAgIHJlcXVlc3RQYXllck5hbWU6ICEwLFxuICAgIHJlcXVlc3RQYXllckVtYWlsOiAhMCxcbiAgICBkaXNhYmxlV2FsbGV0czogW11cbiAgfSk7XG59LCBvciA9ICh0KSA9PiBuZXcgUHJvbWlzZSgocikgPT4ge1xuICBzZXRUaW1lb3V0KHIsIHQpO1xufSksIGdlID0gKCkgPT4gXCJTdHJpcGVcIiBpbiB3aW5kb3csIGlyID0gYXN5bmMgKHQpID0+IG5ldyBQcm9taXNlKChyLCBlKSA9PiB7XG4gIHRyeSB7XG4gICAgdC5vbihcInBheW1lbnRtZXRob2RcIiwgYXN5bmMgKG4pID0+IHtcbiAgICAgIHIobik7XG4gICAgfSksIHQub24oXCJjYW5jZWxcIiwgKCkgPT4ge1xuICAgICAgZShuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikpO1xuICAgIH0pO1xuICB9IGNhdGNoIChuKSB7XG4gICAgZShuKTtcbiAgfVxufSksIHNyID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgaWYgKCF0LnN0cmlwZV9wayB8fCAhdC5jbGllbnRfc2VjcmV0KVxuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuZXh0IGFjdGlvbiBtZXRhZGF0YSBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCk7XG4gIGNvbnN0IG4gPSBhd2FpdCAoYXdhaXQgdGUodC5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKHQuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiByLnBheW1lbnRNZXRob2QuaWRcbiAgfSk7XG4gIGlmIChuLmVycm9yKVxuICAgIHRocm93IHIuY29tcGxldGUoXCJmYWlsXCIpLCBuZXcgRXJyb3IoYFBheW1lbnQgZmFpbGVkOiAke24uZXJyb3IubWVzc2FnZSA/PyBcInVua25vd25cIn1gKTtcbiAgcmV0dXJuIHIuY29tcGxldGUoXCJzdWNjZXNzXCIpLCBuO1xufSwgYXIgPSBhc3luYyAodCkgPT4ge1xuICB2YXIgaSwgcywgYSwgYztcbiAgY29uc3QgZSA9IGF3YWl0IChhd2FpdCB0ZSh0LnN0cmlwZV9waykpLmNvbmZpcm1DYXJkU2V0dXAodC5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHQuc3RyaXBlX3BtX2lkXG4gIH0pLCBuID0gKGkgPSBlLnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogaS5zdGF0dXM7XG4gIGlmIChuID09PSBcInN1Y2NlZWRlZFwiKVxuICAgIGNvbnNvbGUubG9nKFwiWzNEU10gQ09ORklSTUlORyBQTTpcIiwgdC5zdHJpcGVfcG1faWQpLCBjb25zb2xlLmxvZyhcIlszRFNdIFNldHVwIGludGVudCBjcmVhdGVkOlwiLCBlLnNldHVwSW50ZW50KTtcbiAgZWxzZSB0aHJvdyBuID09PSBcImNhbmNlbGVkXCIgPyBuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikgOiBuZXcgRXJyb3IoXG4gICAgYCR7KChzID0gZS5lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IHMubWVzc2FnZSkgPz8gKChjID0gKGEgPSBlLnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogYS5sYXN0X3NldHVwX2Vycm9yKSA9PSBudWxsID8gdm9pZCAwIDogYy5tZXNzYWdlKSA/PyBcIlBheW1lbnQgZmFpbGVkLCBwbGVhc2UgY2xpY2sgc3VibWl0IGFnYWluIHRvIHBheS5cIn1gXG4gICk7XG59LCBjciA9ICh0KSA9PiBKU09OLnN0cmluZ2lmeSh0KSwgZGUgPSAodCwgcikgPT4gQXJyYXkuZnJvbSh0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcGlkXVwiKSA/PyBbXSkucmVkdWNlKChpLCBzKSA9PiB7XG4gIGNvbnN0IGEgPSBzLmdldEF0dHJpYnV0ZShcImRhdGEtb3BpZFwiKTtcbiAgcmV0dXJuIGEgPyB7IC4uLmksIFthXTogcy52YWx1ZSB9IDogaTtcbn0sIHt9KSwgdXIgPSAodCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBZdC5wYXJzZSh0KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGV2ZW50IHBheWxvYWQ6XCIsIHQsIHIpLCByO1xuICB9XG59LCBsciA9IGFzeW5jICh0KSA9PiB7XG4gIGlmICh0eXBlb2YgdCAhPSBcIm9iamVjdFwiIHx8ICF0KSByZXR1cm4gITE7XG4gIHRyeSB7XG4gICAgY29uc3QgciA9IHsgdHlwZTogXCJwaW5nXCIgfSwgZSA9IGF3YWl0IHQuc2VuZChyKTtcbiAgICBpZiAoZSAhPT0gITApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICd0cnVlJyBhZnRlciBwaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeShlKX1gKTtcbiAgICByZXR1cm4gITA7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIkludmFsaWQgQ0RFIGNvbm5lY3Rpb24gY2hlY2s6XCIsIHIpLCAhMTtcbiAgfVxufSwgZHIgPSAodCwgcikgPT4gISF0ICYmIHIsIGIgPSAodCkgPT4geiQxLm51bGxhYmxlKHQub3B0aW9uYWwoKSk7XG56JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IFwiQ2Fubm90IGJlIGJsYW5rXCIgfSk7XG5jb25zdCBmciA9IHokMS5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogeiQxLmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbnokMS5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBxZSA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogYih6JDEubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogYih6JDEubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogYih6JDEuc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogeiQxLnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IGIoeiQxLm51bWJlcigpKVxufSksIHplID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiBiKHokMS5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IGIoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogYih6JDEubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KSwgcHIgPSB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSwgaHIgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBzZXR0aW5nczogYihwcilcbn0pLCBxID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBiKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBiKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIG1yID0geiQxLm9iamVjdCh7XG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKClcbn0pLCB5ciA9IHokMS5vYmplY3Qoe1xuICBpZDogYih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsOiBiKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IGIoeiQxLm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6JDEuYXJyYXkobXIpLFxuICB0cmlhbF9zdGFydDogYih6JDEuc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IGIoeiQxLnN0cmluZygpKVxufSksIEhlID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKClcbn0pLCBfciA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KEhlKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1faWQ6IHokMS5zdHJpbmcoKVxufSksIGdyID0geiQxLm9iamVjdCh7XG4gIGNvdXBvbjogcWVcbn0pLCBiciA9IHokMS5vYmplY3Qoe1xuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudHM6IHokMS5hcnJheShnciksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogYih6JDEuc3RyaW5nKCkpLFxuICBsaW5lczogeiQxLmFycmF5KF9yKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShIZSlcbn0pLCBiZSA9IHokMS5vYmplY3Qoe1xuICBjcmVhdGVkOiB6JDEuYXJyYXkoeXIpLFxuICBpbnZvaWNlczogeiQxLmFycmF5KGJyKVxufSksIFllID0geiQxLm9iamVjdCh7XG4gIHByZXZpZXc6IGJlLFxuICBwcmV2aWV3X3Bvc3RfdHJpYWw6IGIoYmUpLFxuICBjb3Vwb25zOiB6JDEuYXJyYXkocWUpXG59KSwgdmUgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcIm9wZW5cIiksXG4gIHRva2VuOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiBiKHokMS5zdHJpbmcoKSksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheSh6ZSksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBocixcbiAgc3Vic19wcmV2aWV3OiBiKFllKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6JDEuYXJyYXkocSlcbn0pLCBCZSA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogeiQxLm51bGxhYmxlKHokMS51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKHZlLnNoYXBlKSxcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHokMS5zdHJpbmcoKVxuICB9KS5leHRlbmQodmUuc2hhcGUpXG5dKSwgdnIgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KSwgd3IgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImV4cGlyZWRcIilcbn0pO1xueiQxLnVuaW9uKFtCZSwgdnIsIHdyXSk7XG56JDEub2JqZWN0KHtcbiAgbG9nbzogeiQxLnN0cmluZygpLFxuICBpY29uOiB6JDEuc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHokMS5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgSmUgPSB6JDEub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6JDEuYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX3ppcF9jb2RlOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX2NvdW50cnk6IHokMS5zdHJpbmcoKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KHplKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogeiQxLmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHEsXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEVyID0geiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBTciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSk7XG56JDEuYXJyYXkoU3IpO1xueiQxLm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3Byb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBxLFxuICBleGlzdGluZ19jY19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBLZSA9IHokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGZpZWxkczogVXQsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBWLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogcSxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIC8vIFRoaXMgaXMgb3B0aW9uYWwgaW4gQ0RFLCBidXQgbm90IGluIE9KUyBtb3ZpbmcgZm9yd2FyZFxufSk7XG5jb25zdCBDciA9IHokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNjX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLnJlY29yZCh6JDEuYW55KCkpO1xuY29uc3Qga3IgPSAodCkgPT4gdC5yZWR1Y2UoKHIsIGUpID0+IHIgKyBlLCAwKTtcbmZ1bmN0aW9uIFByKHQsIHIpIHtcbiAgdmFyIGUgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIGUgPyBlKHQsIHIpIDogdC5fX3Byb3RvX18gPSByO1xufVxuZnVuY3Rpb24gSXIodCwgcikge1xuICByID09PSB2b2lkIDAgJiYgKHIgPSB0LmNvbnN0cnVjdG9yKTtcbiAgdmFyIGUgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgZSAmJiBlKHQsIHIpO1xufVxudmFyIE9yID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkge1xuICB2YXIgdCA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICByZXR1cm4gdCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICBfX3Byb3RvX186IFtdXG4gICAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKGksIHMpIHtcbiAgICAgIGkuX19wcm90b19fID0gcztcbiAgICB9IHx8IGZ1bmN0aW9uKGksIHMpIHtcbiAgICAgIGZvciAodmFyIGEgaW4gcylcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIGEpICYmIChpW2FdID0gc1thXSk7XG4gICAgfSwgdChlLCBuKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHIsIGUpIHtcbiAgICBpZiAodHlwZW9mIGUgIT0gXCJmdW5jdGlvblwiICYmIGUgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGUpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICB0KHIsIGUpO1xuICAgIGZ1bmN0aW9uIG4oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gcjtcbiAgICB9XG4gICAgci5wcm90b3R5cGUgPSBlID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShlKSA6IChuLnByb3RvdHlwZSA9IGUucHJvdG90eXBlLCBuZXcgbigpKTtcbiAgfTtcbn0oKSwgUnIgPSBmdW5jdGlvbih0KSB7XG4gIE9yKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4pIHtcbiAgICB2YXIgaSA9IHRoaXMuY29uc3RydWN0b3IsIHMgPSB0LmNhbGwodGhpcywgZSwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogaS5uYW1lLFxuICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfSksIFByKHMsIGkucHJvdG90eXBlKSwgSXIocyksIHM7XG4gIH1cbiAgcmV0dXJuIHI7XG59KEVycm9yKTtcbmNsYXNzIEdlIGV4dGVuZHMgUnIge1xuICBjb25zdHJ1Y3RvcihyKSB7XG4gICAgY29uc3QgZSA9IGAke3IubWVzc2FnZX1gO1xuICAgIHN1cGVyKGUpLCB0aGlzLnJlc3BvbnNlID0gcjtcbiAgfVxuICBnZXQgb3JpZ2luYWxFcnJvck1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzcG9uc2UubWVzc2FnZTtcbiAgfVxufVxuY29uc3QgSSA9IGFzeW5jICh0LCByLCBlKSA9PiB7XG4gIGNvbnN0IG4gPSBhd2FpdCB0LnNlbmQocik7XG4gIGlmIChUcihuKSlcbiAgICB0aHJvdyBuZXcgR2Uobik7XG4gIGlmICghQXIobiwgZSkpIHtcbiAgICBjb25zdCBpID0gZS5zYWZlUGFyc2Uobik7XG4gICAgdGhyb3cgaS5zdWNjZXNzID8gbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZVwiKSA6IChjb25zb2xlLmVycm9yKFwiT0pTIHF1ZXJ5QXBpIGdvdCBhIHNjaGVtYSBlcnJvci4gRXhwZWN0ZWQgc2NoZW1hOlwiLCBlLCBcIkFjdHVhbDpcIiwgbiksIGkuZXJyb3IpO1xuICB9XG4gIHJldHVybiBuO1xufSwgQXIgPSAodCwgcikgPT4gci5zYWZlUGFyc2UodCkuc3VjY2VzcywgVHIgPSAodCkgPT4gZnIuc2FmZVBhcnNlKHQpLnN1Y2Nlc3MsIGpyID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IEkodCwgeyB0eXBlOiBcImdldF9jaGVja291dF9wcmV2aWV3XCIsIHBheWxvYWQ6IHIgfSwgWWUpLCB6ID0gYXN5bmMgKHQpID0+IGF3YWl0IEkodCwgeyB0eXBlOiBcImdldF9wcmVmaWxsXCIsIHBheWxvYWQ6IHt9IH0sIEJlKSwgTXIgPSBhc3luYyAodCwgcikgPT4gYXdhaXQgSSh0LCB7IHR5cGU6IFwidjJfc3RhcnRfcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IHIgfSwgS2UpLCBMciA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBJKHQsIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCIsIHBheWxvYWQ6IHIgfSwgQ3IpLCBEciA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBJKHQsIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByXCIsIHBheWxvYWQ6IHIgfSwgS2UpLCBmZSA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBJKHQsIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiByIH0sIEJ0KSwgRnIgPSBhc3luYyAodCwgciwgZSkgPT4ge1xuICBjb25zdCBuID0gYXdhaXQganIodCwge1xuICAgIHNlY3VyZV90b2tlbjogcixcbiAgICBwcm9tb3Rpb25fY29kZTogZVxuICB9KSwgaSA9IG5ldyBTZXQobi5wcmV2aWV3Lmludm9pY2VzLm1hcCgoYykgPT4gYy5jdXJyZW5jeSkpO1xuICBpZiAoaS5zaXplICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgY3VycmVuY3ksIGdvdCAke2kuc2l6ZX1gKTtcbiAgY29uc3QgcyA9IGkudmFsdWVzKCkubmV4dCgpLnZhbHVlID8/IFwidXNkXCIsIGEgPSBrcihuLnByZXZpZXcuaW52b2ljZXMubWFwKChjKSA9PiBjLnJlbWFpbmluZ19hbW91bnRfYXRvbSkpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5OiBzLFxuICAgIGFtb3VudEF0b206IGFcbiAgfTtcbn0sIFplID0gYXN5bmMgKHQsIHIsIGUsIG4pID0+IHtcbiAgaWYgKGUpXG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAge1xuICAgIG4gPSBuIHx8IHZvaWQgMDtcbiAgICBjb25zdCBpID0gYXdhaXQgRnIodCwgciwgbik7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogaS5hbW91bnRBdG9tLCBjdXJyZW5jeTogaS5jdXJyZW5jeSB9O1xuICB9XG59LCB4ciA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGlmICh0LnNpemUgPT09IDApXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gQ0RFIGNvbm5lY3Rpb25zIGZvdW5kXCIpO1xuICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgQXJyYXkuZnJvbSh0LnZhbHVlcygpKS5tYXAoXG4gICAgICAobikgPT4gSShuLCB7IHR5cGU6IFwidG9rZW5pemVfY2FyZFwiLCBwYXlsb2FkOiByIH0sIEd0KVxuICAgIClcbiAgKTtcbn0sIHdlID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgSSh0LCB7IHR5cGU6IFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiLCBwYXlsb2FkOiByIH0sIEplKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJbY2RlLWNsaWVudF0gRXJyb3IgZHVyaW5nIGNoZWNrb3V0Q2FyZEVsZW1lbnRzOlwiLCBlLCBKU09OLnN0cmluZ2lmeShlKSksIGU7XG4gIH1cbn0sIE5yID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IEkodCwgeyB0eXBlOiBcInNldHVwX3BheW1lbnRfbWV0aG9kXCIsIHBheWxvYWQ6IHIgfSwgRXIpLCBXZSA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBJKHQsIHsgdHlwZTogXCJjaGVja291dFwiLCBwYXlsb2FkOiByIH0sIEplKSwgUWUgPSAxZTMsIFVyID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgY29uc29sZS5sb2cocik7XG4gIGNvbnN0IG4gPSBhd2FpdCBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lOiB0LFxuICAgIGRlYnVnOiAhMCxcbiAgICB0aW1lb3V0OiBRZSxcbiAgICBjaGlsZE9yaWdpbjogXCIqXCJcbiAgICAvLyBUT0RPOiB1c2Ugd2l0aCBwcm9wZXIgY2hpbGRPcmlnaW5cbiAgfSkucHJvbWlzZSwgaSA9IGF3YWl0IEkobiwgeyB0eXBlOiBcInBpbmctM2RzLXN0YXR1c1wiIH0sIFp0KTtcbiAgcmV0dXJuIGNvbnNvbGUubG9nKFwi8J+foiBDREUgY29ubmVjdGlvbiBzdWNjZXNzZnVsISBTdG9wcGluZyBwb2xsaW5nLi4uIFJlc3VsdDpcIiwgaSksIGk7XG59O1xuZnVuY3Rpb24gWGUodCkge1xuICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBjYXNlOiAke3R9YCk7XG59XG5jb25zdCBwZSA9ICh0KSA9PiBhc3luYyAocikgPT4ge1xuICB2YXIgZSwgbjtcbiAgdHJ5IHtcbiAgICAobiA9IChlID0gci5mb3JtQ2FsbGJhY2tzLmdldCkub25DaGVja291dFN0YXJ0ZWQpID09IG51bGwgfHwgbi5jYWxsKGUpO1xuICAgIGNvbnN0IGkgPSBhd2FpdCB0KHIpO1xuICAgIGlmIChpLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzKGkucmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkKTtcbiAgICBlbHNlIGlmIChpLm1vZGUgPT09IFwiY2hlY2tvdXRcIilcbiAgICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dFN1Y2Nlc3MoXG4gICAgICAgIGkucmVzdWx0Lmludm9pY2VfdXJscyxcbiAgICAgICAgaS5yZXN1bHQuc3Vic2NyaXB0aW9uX2lkcyxcbiAgICAgICAgaS5yZXN1bHQuY3VzdG9tZXJfaWRcbiAgICAgICk7XG4gICAgZWxzZVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgbW9kZTogJHtpfWApO1xuICB9IGNhdGNoIChpKSB7XG4gICAgci5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoTihpKSk7XG4gIH1cbn0sIGV0ID0gKHQpID0+IGFzeW5jIChyKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHQocik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCB7IGVycl9fOiBuIH0gPSBPKFwiaW5pdC1lcnJvci1jYXRjaGVyXCIpO1xuICAgIHJldHVybiBuKGUpLCB7IGlzQXZhaWxhYmxlOiAhMSwgcmVhc29uOiBOKGUpIH07XG4gIH1cbn0sIE8gPSAodCkgPT4ge1xuICBjb25zdCByID0gKC4uLm4pID0+IHtcbiAgICB3aW5kb3cuY29uc29sZS5sb2coYCR7Qi5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke0IuYm9sZC5ncmF5KGAke3R9YCl9XHRgLCAuLi5uKTtcbiAgfSwgZSA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUuZXJyb3IoYCR7Qi5yZWQuYm9sZChcIm9qcy9cIil9JHtCLmJvbGQuZ3JheShgJHt0fWApfVx0YCwgLi4ubik7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nOiByLFxuICAgIGVycjogZSxcbiAgICBsb2dfXzogcixcbiAgICBlcnJfXzogZVxuICB9O1xufSwgeyBsb2dfXzogUG8sIGVycl9fOiAkciB9ID0gTyhcImNvbW1vblwiKSwgaGUgPSAodCkgPT4ge1xuICBpZiAodC5wYXltZW50X21ldGhvZHMubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgcGF5bWVudCBtZXRob2QsIGdvdCAke3QucGF5bWVudF9tZXRob2RzLmxlbmd0aH1gKTtcbiAgcmV0dXJuIHsgcGF5bWVudF9tZXRob2RfaWQ6IHQucGF5bWVudF9tZXRob2RzWzBdLmlkIH07XG59LCB0dCA9ICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSB0LmZpbmQoKG4pID0+IHIuc2FmZVBhcnNlKG4pLnN1Y2Nlc3MpO1xuICBpZiAoIWUpXG4gICAgdGhyb3cgJHIoXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbC4gQWxsIG1vZGVsczpcIiwgdCksIG5ldyBFcnJvcihcIk5vIENQTXMgZm91bmQgZm9yIG1vZGVsXCIpO1xuICByZXR1cm4gci5wYXJzZShlKTtcbn0sIHsgbG9nX186IFZyLCBlcnJfXzogcnQgfSA9IE8oXCJjb21tb24tY2NcIiksIG1lID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IFYuc2FmZVBhcnNlKHQpO1xuICBpZiAoIWUuc3VjY2Vzcykge1xuICAgIGNvbnN0IG4gPSBlLmVycm9yLmZvcm1hdCgpLCBpID0gUXQobik7XG4gICAgZm9yIChjb25zdCBbcywgYV0gb2YgT2JqZWN0LmVudHJpZXMoaSkpXG4gICAgICByKHMsIGEsIHMpO1xuICAgIHRocm93IHJ0KFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgaSksIG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICB9XG4gIHJldHVybiBlLmRhdGE7XG59LCBxciA9ICh0LCByKSA9PiB7XG4gIGZvciAoY29uc3QgZSBvZiB0KVxuICAgIGlmIChlLnN1Y2Nlc3MgPT09ICExKVxuICAgICAgdGhyb3cgZS5lcnJvcnMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICBjb25zdCBpID0gVmUuc2FmZVBhcnNlKG4uZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIWkuc3VjY2VzcylcbiAgICAgICAgICBydChgVW5rbm93biBmaWVsZCBuYW1lIGluIG9uVmFsaWRhdGlvbkVycm9yOiAke24uZWxlbWVudFR5cGV9LiBFcnJvciBvYmplY3Q6YCwgbik7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHMgPSBpLmRhdGE7XG4gICAgICAgICAgcihzLCBuLmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH0pLCBWcihgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkoZS5lcnJvcnMpfWApLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgd2hpbGUgdG9rZW5pemluZyBjYXJkXCIpO1xufSwgRWUgPSBcIm9qcy1zdHJpcGUtbGluay1idG5cIiwgeyBsb2dfXzogdiwgZXJyX186IHpyIH0gPSBPKFwic3RyaXBlLWxpbmtcIiksIEhyID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIFlyID0geiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSksIEJyID0gZXQoXG4gIGFzeW5jICh7IGNvbnRleHQ6IHQsIGZvcm1DYWxsYmFja3M6IHIgfSkgPT4ge1xuICAgIGNvbnN0IGUgPSB0LmN1c3RvbUluaXRQYXJhbXMuc3RyaXBlTGluaztcbiAgICB2KFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgTGluay4uLlwiKTtcbiAgICBjb25zdCBuID0gdHQodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBIcik7XG4gICAgdihcIlN0YXJ0aW5nIHN0cmlwZSBsaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgaSA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IHooaSksIGEgPSBzLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICB2KFwiQ3JlYXRpbmcgc3RyaXBlIGVsZW1lbnRzLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBaZShpLCBzLnRva2VuLCBhLCB2b2lkIDApLCB7IGVsZW1lbnRzOiBsLCBzdHJpcGU6IHUgfSA9IGF3YWl0IHJyKG4ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogYy5jdXJyZW5jeSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgfSk7XG4gICAgdihcIkNyZWF0aW5nIGV4cHJlc3MgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgZCA9IGwuY3JlYXRlKFwiZXhwcmVzc0NoZWNrb3V0XCIsIHtcbiAgICAgIGJ1dHRvbkhlaWdodDogZSA9PSBudWxsID8gdm9pZCAwIDogZS5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSksIGggPSAoKSA9PiB7XG4gICAgICBkLm1vdW50KGAjJHtFZX1gKTtcbiAgICB9LCBfID0gKCkgPT4ge1xuICAgICAgZC51bm1vdW50KCk7XG4gICAgfTtcbiAgICByZXR1cm4gZSAhPSBudWxsICYmIGUuZG9Ob3RNb3VudE9uSW5pdCA/IHYoXCJOT1QgbW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uIChkb05vdE1vdW50T25Jbml0IGlzIHRydWUpXCIpIDogKHYoXCJNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5cIiksIGgoKSksIGQub24oXCJjbGlja1wiLCBhc3luYyAoZikgPT4ge1xuICAgICAgaWYgKHYoXCJTdHJpcGUgTGluayBidXR0b24gY2xpY2tlZFwiKSwgZSAhPSBudWxsICYmIGUub3ZlcnJpZGVMaW5rU3VibWl0ICYmICFhd2FpdCBlLm92ZXJyaWRlTGlua1N1Ym1pdCgpKSB7XG4gICAgICAgIHYoXCJTdHJpcGUgTGluayBzdWJtaXQgYWJvcnRlZCBieSBvdmVycmlkZUxpbmtTdWJtaXRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGYucmVzb2x2ZSgpO1xuICAgIH0pLCBkLm9uKFwiY29uZmlybVwiLCBhc3luYyAoZikgPT4ge1xuICAgICAgdihcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgZik7XG4gICAgICBjb25zdCBwID0gYXdhaXQgdS5jcmVhdGVQYXltZW50TWV0aG9kKHtcbiAgICAgICAgZWxlbWVudHM6IGwsXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGJpbGxpbmdfZGV0YWlsczogZi5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHAuZXJyb3IgPyAoenIoXCJlcnJvclwiLCBwLmVycm9yKSwgci5nZXQub25DaGVja291dEVycm9yKHAuZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIikpIDogKHYoXCJwYXltZW50TWV0aG9kXCIsIHAucGF5bWVudE1ldGhvZCksIFUuc3RyaXBlTGluay5ydW4oe1xuICAgICAgICBjb250ZXh0OiB0LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGRlKHQuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgICAgIGN1c3RvbVBhcmFtczogeyBzdHJpcGVQTTogcC5wYXltZW50TWV0aG9kIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6ICEwIH1cbiAgICAgIH0pKTtcbiAgICB9KSwge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBtb3VudEJ1dHRvbjogaCxcbiAgICAgICAgZGlzbW91bnRCdXR0b246IF8sXG4gICAgICAgIHdhaXRGb3JCdXR0b25Ub01vdW50OiBhc3luYyAoKSA9PiBhd2FpdCBHcihFZSlcbiAgICAgIH1cbiAgICB9O1xuICB9XG4pLCBKciA9IHBlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGlcbiAgfSkgPT4ge1xuICAgIHYoXCJSdW5uaW5nIFN0cmlwZSBMaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgcyA9IHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICB2KFwiTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLlwiKTtcbiAgICBjb25zdCBhID0gS3IoZSwgaS5zdHJpcGVQTSksIGMgPSBtZShhLCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgdihcIlN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBsID0gYXdhaXQgTXIocywge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogci5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IGkuc3RyaXBlUE0uaWRcbiAgICB9KTtcbiAgICB2KFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGwpO1xuICAgIGNvbnN0IGQgPSBZci5wYXJzZShsLnJlcXVpcmVkX3VzZXJfYWN0aW9ucylbMF0ub3VyX2V4aXN0aW5nX3BtX2lkLCBoID0gYXdhaXQgeihzKTtcbiAgICBpZiAoaC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIHYoXCJEb2luZyBwYXltZW50IHNldHVwLi4uXCIpO1xuICAgICAgY29uc3QgXyA9IGF3YWl0IGZlKHMsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBoLnRva2VuLFxuICAgICAgICBleGlzdGluZ19jY19wbV9pZDogZFxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogaGUoXykgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdihcIkRvaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgICAgY29uc3QgXyA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBoLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogci5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogY1ttLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IGNbbS5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IGNbbS5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IGNbbS5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IGgubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IGguYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogclxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBXZShzLCBfKSB9O1xuICAgIH1cbiAgfVxuKSwgS3IgPSAodCwgcikgPT4ge1xuICB2YXIgYSwgYywgbCwgdSwgZDtcbiAgY29uc3QgZSA9IHsgLi4udCB9LCBbbiwgLi4uaV0gPSAoKGMgPSAoYSA9IHIuYmlsbGluZ19kZXRhaWxzLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBhLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuc3BsaXQoL1xccysvKSkgPz8gW10sIHMgPSBpLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgcmV0dXJuIGVbbS5GSVJTVF9OQU1FXSA9IGVbbS5GSVJTVF9OQU1FXSB8fCBuIHx8IFwiX09QX1VOS05PV05cIiwgZVttLkxBU1RfTkFNRV0gPSBlW20uTEFTVF9OQU1FXSB8fCBzIHx8IFwiX09QX1VOS05PV05cIiwgZVttLkVNQUlMXSA9IGVbbS5FTUFJTF0gfHwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgKChsID0gci5saW5rKSA9PSBudWxsID8gdm9pZCAwIDogbC5lbWFpbCkgfHwgci5iaWxsaW5nX2RldGFpbHMuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCBlW20uWklQX0NPREVdID0gZVttLlpJUF9DT0RFXSB8fCAoKHUgPSByLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogdS5wb3N0YWxfY29kZSkgfHwgXCIwMDAwMFwiLCBlW20uQ09VTlRSWV0gPSBlW20uQ09VTlRSWV0gfHwgKChkID0gci5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IGQuY291bnRyeSkgfHwgXCJVU1wiLCB2KFwiRmluYWwgZm9ybSBpbnB1dHM6XCIsIGUpLCBlO1xufSwgR3IgPSAodCkgPT4gbmV3IFByb21pc2UoKHIpID0+IHtcbiAgY29uc3QgZSA9ICgpID0+IHtcbiAgICBjb25zdCBuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCk7XG4gICAgbiA/IHIobikgOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSk7XG4gIH07XG4gIGUoKTtcbn0pLCBaciA9IFwiQGtleWZyYW1lcyBmYWRlSW57MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOSl9dG97b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX19Lm92ZXJsYXl7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ei1pbmRleDoyMTQ3NDgzNjQ4IWltcG9ydGFudDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojMDAwMDAwODB9LmNvbnRhaW5lcnttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6I2ZmZjtwb3NpdGlvbjpyZWxhdGl2ZTthbmltYXRpb246ZmFkZUluIC4zcyBlYXNlLW91dH0uZnJhbWV7bWF4LXdpZHRoOjUwMHB4O21heC1oZWlnaHQ6NjAwcHg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtib3JkZXI6bm9uZX0uY2FuY2VsLWJ1dHRvbntwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjpub25lO2ZvbnQtc2l6ZToxcmVtO2NvbG9yOiNmZmY7Y3Vyc29yOnBvaW50ZXI7dG9wOi0xLjVyZW07cGFkZGluZzowO3JpZ2h0OjB9XCIsIFdyID0gKHQpID0+IHtcbiAgY29uc3QgciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgci5pbm5lckhUTUwgPSBgXG4gICAgPHN0eWxlPlxuICAgICAgJHtacn1cbiAgICA8L3N0eWxlPlxuICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDxpZnJhbWUgc3JjPVwiJHt0fVwiIGNsYXNzPVwiZnJhbWVcIiBpZD1cInRocmVlLWRzLWlmcmFtZVwiIHRpdGxlPVwiM0QgU2VjdXJlIHZlcmlmaWNhdGlvblwiIGFsbG93PVwicGF5bWVudFwiPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG4gIGNvbnN0IGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLCBuID0gZS5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgbi5hcHBlbmRDaGlsZChyLmNvbnRlbnQuY2xvbmVOb2RlKCEwKSk7XG4gIGNvbnN0IGkgPSBuLnF1ZXJ5U2VsZWN0b3IoXCIjdGhyZWUtZHMtaWZyYW1lXCIpLCBzID0gbi5xdWVyeVNlbGVjdG9yKFwiLmNhbmNlbC1idXR0b25cIik7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpLCB7IGhvc3Q6IGUsIGlmcmFtZTogaSwgY2FuY2VsQnV0dG9uOiBzIH07XG59O1xuZnVuY3Rpb24gUXIodCwgciwgZSkge1xuICBjb25zdCBuID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzID0gYXdhaXQgVXIodCwgZSk7XG4gICAgICBzICYmIChjbGVhckludGVydmFsKGkpLCByKHMpKTtcbiAgICB9IGNhdGNoIHtcbiAgICB9XG4gIH07XG4gIG4oKTtcbiAgY29uc3QgaSA9IHNldEludGVydmFsKG4sIFFlKTtcbiAgcmV0dXJuIGk7XG59XG5mdW5jdGlvbiBYcih7XG4gIGVsZW1lbnRzOiB0LFxuICBwb2xsaW5nSW50ZXJ2YWw6IHIsXG4gIHJlc29sdmU6IGVcbn0pIHtcbiAgY29uc3QgbiA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHIpLCB0Lmhvc3QucmVtb3ZlKCksIGUoeyBzdGF0dXM6IEQuQ0FOQ0VMTEVEIH0pO1xuICB9O1xuICByZXR1cm4gdC5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pLCAoKSA9PiB7XG4gICAgdC5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pO1xuICB9O1xufVxuYXN5bmMgZnVuY3Rpb24gbnQodCkge1xuICBjb25zdCB7IHVybDogciwgYmFzZVVybDogZSB9ID0gdCwgbiA9IFdyKHIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKGkpID0+IHtcbiAgICBjb25zdCBzID0gKGwpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBuLmhvc3QucmVtb3ZlKCk7XG4gICAgICB9LCAxZTMpLCBpKGwpLCBjID09IG51bGwgfHwgYygpO1xuICAgIH0sIGEgPSBRcihuLmlmcmFtZSwgcywgbmV3IFVSTChlKS5vcmlnaW4pLCBjID0gWHIoe1xuICAgICAgZWxlbWVudHM6IG4sXG4gICAgICBwb2xsaW5nSW50ZXJ2YWw6IGEsXG4gICAgICByZXNvbHZlOiBpXG4gICAgfSk7XG4gIH0pO1xufVxuY29uc3QgZW4gPSBhc3luYyAodCkgPT4ge1xuICBjb25zdCByID0gYXdhaXQgbnQodCk7XG4gIGlmIChyLnN0YXR1cyA9PT0gRC5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChyLnN0YXR1cyA9PT0gRC5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICByZXR1cm4gci5zdGF0dXMgIT09IEQuU1VDQ0VTUyAmJiBYZShyLnN0YXR1cyksIHtcbiAgICBocmVmOiByLmhyZWZcbiAgfTtcbn0sIHsgbG9nX186IHRuLCBlcnJfXzogb3QgfSA9IE8oXCJwb2NreXQtY2NcIiksIHJuID0geiQxLm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogeiQxLnN0cmluZygpXG59KSwgbm4gPSAodCkgPT4ge1xuICBjb25zdCByID0gcm4uc2FmZVBhcnNlKHQpO1xuICBpZiAoIXIuc3VjY2Vzcykge1xuICAgIGNvbnN0IGUgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIG4gPSBgUG9ja3l0IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkodCl9YDtcbiAgICB0aHJvdyBvdChuKSwgbmV3IEVycm9yKGUpO1xuICB9XG4gIHJldHVybiByLmRhdGE7XG59LCBvbiA9ICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgciA9IG5ldyBVUkwodCA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwidmF1bHRJZFwiKTtcbiAgICBpZiAoIXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2YXVsdCBJRCBmb3VuZCBpbiAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gdG4oYDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW1ZhdWx0IElEOiAke3J9XWApLCByO1xuICB9IGNhdGNoIChyKSB7XG4gICAgY29uc3QgZSA9IFwiRXJyb3IgdmVyaWZ5aW5nIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IG90KGUsIGBSZXN1bHRpbmcgVVJMOiAke3R9LlxuRXJyb3I6ICR7TihyKX1gKSwgbmV3IEVycm9yKGUpO1xuICB9XG59LCBzbiA9ICh0KSA9PiAodCA9PSBudWxsID8gdm9pZCAwIDogdFtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBhbiA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSBubihyKSwgbiA9IGF3YWl0IGVuKHsgdXJsOiBlW1wib3AtcG9ja3l0LTNkcy11cmxcIl0sIGJhc2VVcmw6IHQgfSk7XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIHZhdWx0X2lkOiBvbihuLmhyZWYgPz8gXCJcIiksXG4gICAgICB0cmFuc2FjdGlvbl9ubzogZVtcIm9wLXBvY2t5dC10eG4tbm9cIl0sXG4gICAgICByZWZlcmVuY2Vfbm86IGVbXCJvcC1wb2NreXQtcmVmLW5vXCJdXG4gICAgfVxuICB9O1xufSwgeyBsb2dfXzogZywgZXJyX186IFNlIH0gPSBPKFwiY29tbW9uLWNjXCIpLCB7IGxvZ19fOiBDZSB9ID0gTyhcInN0cmlwZS1jY1wiKTtcbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgY24gPSBwZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBpXG4gIH0pID0+IHtcbiAgICB2YXIgdTtcbiAgICBnKFwi4pScIFJ1bm5pbmcgY29tbW9uIENDIGZsb3cuLi5cIiwgeyBjaGVja291dFBheW1lbnRNZXRob2Q6IHIgfSk7XG4gICAgY29uc3QgcyA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgYSA9IGF3YWl0IHoocyk7XG4gICAgZyhg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHthLm1vZGV9XWApO1xuICAgIGNvbnN0IGMgPSBtZShlLCBuLmdldC5vblZhbGlkYXRpb25FcnJvciksIGwgPSB7XG4gICAgICBzZXNzaW9uX2lkOiB0LmVsZW1lbnRzU2Vzc2lvbklkLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHIsXG4gICAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBjLFxuICAgICAgZXh0cmFfbWV0YWRhdGE6IHt9XG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgZyhg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHt0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgIGNvbnN0IGQgPSBhd2FpdCB4cihpLmN1cnJlbnRDZGVDb25uZWN0aW9ucywge1xuICAgICAgICBzZXNzaW9uX2lkOiB0LmVsZW1lbnRzU2Vzc2lvbklkXG4gICAgICB9KTtcbiAgICAgIGlmIChxcihkLCBuLmdldC5vblZhbGlkYXRpb25FcnJvciksIGEubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgIGcoYOKUnCBTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kIGluIENERSBbVG9rZW46ICR7YS50b2tlbn1dYCk7XG4gICAgICAgIGNvbnN0IGggPSBhd2FpdCBOcihzLCBsKTtcbiAgICAgICAgcmV0dXJuIGcoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtoLnBheW1lbnRfbWV0aG9kX2lkfV1gKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogaCB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZyhg4pScIEluaXRpYWwgY2hlY2tvdXQgZmxvdy4gQ2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICAgIGNvbnN0IGggPSBhd2FpdCB3ZShzLCBsKTtcbiAgICAgICAgcmV0dXJuIGcoXCLilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cIiksIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGggfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChkKSB7XG4gICAgICBpZiAoZCBpbnN0YW5jZW9mIEdlICYmIGQub3JpZ2luYWxFcnJvck1lc3NhZ2UuaW5jbHVkZXMoXCIzRFNfUkVRVUlSRURcIikpIHtcbiAgICAgICAgZyhcIuKUnCBDYXJkIHJlcXVpcmVzIDNEUywgc3RhcnRpbmcgbm9uLWxlZ2FjeSBwYXltZW50IGZsb3dcIiksIGcoXCJSZWNlaXZlZCAzRFMgZXJyb3IgcmVzcG9uc2UgaGVhZGVyczpcIiwgZC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgY29uc3QgaCA9IHNuKGQucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgIGlmIChoKSB7XG4gICAgICAgICAgZyhcIuKUnCBQb2NreXQgM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggUG9ja3l0IDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCB5ID0gYXdhaXQgYW4odC5iYXNlVXJsLCBkLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIGwuZXh0cmFfbWV0YWRhdGEucG9ja3l0ID0geTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBfID0gYXdhaXQgTHIocywgbCk7XG4gICAgICAgIGcoXCLilJwgUGF5bWVudCBmbG93IHJlc3VsdDpcIiwgXyk7XG4gICAgICAgIGNvbnN0IGYgPSAoKHUgPSBkLnJlc3BvbnNlLmhlYWRlcnMpID09IG51bGwgPyB2b2lkIDAgOiB1W1wib3Atc2hvdWxkLXVzZS1uZXctZmxvd1wiXSkgIT09IFwidHJ1ZVwiO1xuICAgICAgICBoID8gZyhcIuKUnCBQb2NreXQgM0RTIGlzIHN1Y2Nlc3NmdWwsIG90aGVyIDNEUyBmbG93cyB3aWxsIGJlIHNraXBwZWQuXCIpIDogZiA/IChnKFwi4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvd1wiKSwgYXdhaXQgZm4oXykpIDogKGcoXCLilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93XCIpLCBhd2FpdCBkbihfLCB0LmJhc2VVcmwpKTtcbiAgICAgICAgY29uc3QgcCA9IF8uY2NfcG1faWQ7XG4gICAgICAgIGlmIChhLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICAgIGcoYOKUnCBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBbY2NfcG1faWQ6ICR7cH1dYCk7XG4gICAgICAgICAgY29uc3QgeSA9IGF3YWl0IGZlKHMsIHtcbiAgICAgICAgICAgIHNlY3VyZV90b2tlbjogYS50b2tlbixcbiAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBwXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZyhcIuKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OlwiLCB5KTtcbiAgICAgICAgICBjb25zdCBqID0gaGUoeSk7XG4gICAgICAgICAgcmV0dXJuIGcoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtqLnBheW1lbnRfbWV0aG9kX2lkfV1gKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogaiB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGcoYOKUnCBDaGVja2luZyBvdXQgYWZ0ZXIgM0RTIGZsb3cgW0Zsb3c6ICR7ZiA/IFwibGVnYWN5XCIgOiBcIm5ld1wifV1gKTtcbiAgICAgICAgICBjb25zdCB5ID0gYXdhaXQgd2Uocywge1xuICAgICAgICAgICAgLi4ubCxcbiAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBwLFxuICAgICAgICAgICAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogZlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBnKFwi4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCIpLCB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiB5IH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IFNlKFwi4pWwIEVycm9yIGNoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFXCIpLCBTZShkKSwgZDtcbiAgICB9XG4gIH1cbiksIHVuID0gKHQpID0+IHtcbiAgY29uc3QgciA9IHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGUpID0+IGUudHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpO1xuICBpZiAoIXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc3RyaXBlIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIHJldHVybiBYdC5wYXJzZShyKTtcbn0sIGxuID0gKHQpID0+IHtcbiAgY29uc3QgciA9IHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGUpID0+IGUudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIpO1xuICBpZiAoIXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29tbW9uIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIHJldHVybiBXdC5wYXJzZShyKTtcbn0sIGRuID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IGxuKHQpO1xuICBnKGDilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93IFtVUkw6ICR7ZS5yZWRpcmVjdF91cmx9XWApO1xuICBjb25zdCB7IHN0YXR1czogbiB9ID0gYXdhaXQgbnQoeyB1cmw6IGUucmVkaXJlY3RfdXJsLCBiYXNlVXJsOiByIH0pO1xuICBpZiAoZyhg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7bn1dYCksIG4gPT09IEQuQ0FOQ0VMTEVEKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAobiA9PT0gRC5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xufSwgZm4gPSBhc3luYyAodCkgPT4ge1xuICBjb25zdCByID0gdW4odCk7XG4gIENlKGDilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93IFtDbGllbnQgU2VjcmV0OiAke3IuY2xpZW50X3NlY3JldC5zdWJzdHJpbmcoMCwgOCl9Li4uXWApLCBhd2FpdCBhcihyKSwgQ2UoXCLilbAgU3RyaXBlIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcIik7XG59LCB7IGxvZ19fOiBDLCBlcnJfXzogcG4gfSA9IE8oXCJzdHJpcGUtcHJcIiksIGhuID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEudW5pb24oW3okMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBtbiA9IGV0KFxuICBhc3luYyAoeyBjb250ZXh0OiB0IH0pID0+IHtcbiAgICBDKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5cIik7XG4gICAgY29uc3QgciA9IHR0KHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgaG4pO1xuICAgIEMoXCJJbml0aWFsaXppbmcgU3RyaXBlIFBSIGZsb3cuLi5cIik7XG4gICAgY29uc3QgZSA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgbiA9IGF3YWl0IHooZSksIGkgPSBuLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBDKFwiR2V0dGluZyBpbml0aWFsIHByZXZpZXcgYW1vdW50XCIpO1xuICAgIGNvbnN0IHMgPSBhd2FpdCBaZShlLCBuLnRva2VuLCBpLCB2b2lkIDApLCBhID0gYXdhaXQgbnIoXG4gICAgICByLm1ldGFkYXRhLnN0cmlwZV9wayxcbiAgICAgIHMuYW1vdW50QXRvbSxcbiAgICAgIHMuY3VycmVuY3ksXG4gICAgICBpXG4gICAgKTtcbiAgICBDKFwiQ2hlY2tpbmcgaWYgY2FuIG1ha2UgcGF5bWVudFwiKTtcbiAgICBjb25zdCBjID0gYXdhaXQgYS5jYW5NYWtlUGF5bWVudCgpO1xuICAgIHJldHVybiBjID09PSBudWxsID8gKHBuKFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiKSwgeyBpc0F2YWlsYWJsZTogITEsIHJlYXNvbjogXCJjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsXCIgfSkgOiAoQyhcIlN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudFwiLCBjKSwge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgcHI6IGEsXG4gICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHtcbiAgICAgICAgYXBwbGVQYXk6IGMuYXBwbGVQYXksXG4gICAgICAgIGdvb2dsZVBheTogYy5nb29nbGVQYXlcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuKSwgeW4gPSBwZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBpLFxuICAgIGluaXRSZXN1bHQ6IHNcbiAgfSkgPT4ge1xuICAgIGlmIChDKFwiUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLlwiKSwgaS5wcm92aWRlciAhPT0gci5wcm92aWRlcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgbWlzbWF0Y2guIEV4cGVjdGVkICR7aS5wcm92aWRlcn0sIGdvdCAke3IucHJvdmlkZXJ9YCk7XG4gICAgY29uc3QgYSA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IHMucHI7XG4gICAgaWYgKGkgIT0gbnVsbCAmJiBpLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IHAgPSBpLm92ZXJyaWRlUGF5bWVudFJlcXVlc3Q7XG4gICAgICBDKFwiT3ZlcnJpZGluZyBQUiBhbW91bnQgd2l0aFwiLCBwKSwgZ24oYywgcC5hbW91bnQsIHAucGVuZGluZyk7XG4gICAgfVxuICAgIEMoXCJTaG93aW5nIFBSIGRpYWxvZy4uLlwiKSwgYy5zaG93KCk7XG4gICAgY29uc3QgbCA9IGF3YWl0IGlyKGMpO1xuICAgIEMoXCJTdHJpcGUgUE0gYWRkZWQgZXZlbnQ6XCIsIGwpLCBDKFwiTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLlwiKTtcbiAgICBjb25zdCB1ID0gX24oZSwgbCksIGQgPSBtZSh1LCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgQyhcIlBSIGRpYWxvZyBmaW5pc2hlZC4gU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGggPSBhd2FpdCBEcihhLCB7XG4gICAgICBmaWVsZHM6IGQsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHJcbiAgICB9KSwgXyA9IGJuKGgpO1xuICAgIEMoXCJDb25maXJtaW5nIFBSIHdpdGggU3RyaXBlLi4uXCIpLCBhd2FpdCBzcihfLCBsKTtcbiAgICBjb25zdCBmID0gYXdhaXQgeihhKTtcbiAgICBpZiAoZi5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIEMoXCJDb25maXJtaW5nIHBheW1lbnQgZmxvdyBmb3Igc2V0dXAuLi5cIik7XG4gICAgICBjb25zdCBwID0gYXdhaXQgZmUoYSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGYudG9rZW5cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGhlKHApIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIEMoXCJQZXJmb3JtaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgICAgY29uc3QgcCA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBmLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogci5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogZFttLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IGRbbS5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IGRbbS5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IGRbbS5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IGYubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IGYuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogclxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBXZShhLCBwKSB9O1xuICAgIH1cbiAgfVxuKSwgX24gPSAodCwgcikgPT4ge1xuICB2YXIgYSwgYywgbCwgdTtcbiAgY29uc3QgZSA9IHsgLi4udCB9LCBbbiwgLi4uaV0gPSAoKGMgPSAoYSA9IHIucGF5ZXJOYW1lKSA9PSBudWxsID8gdm9pZCAwIDogYS50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiBjLnNwbGl0KC9cXHMrLykpID8/IFtdLCBzID0gaS5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIHJldHVybiBlW20uRklSU1RfTkFNRV0gPSBlW20uRklSU1RfTkFNRV0gfHwgbiB8fCBcIl9PUF9VTktOT1dOXCIsIGVbbS5MQVNUX05BTUVdID0gZVttLkxBU1RfTkFNRV0gfHwgcyB8fCBcIl9PUF9VTktOT1dOXCIsIGVbbS5FTUFJTF0gPSBlW20uRU1BSUxdIHx8IHIucGF5ZXJFbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIGVbbS5aSVBfQ09ERV0gPSBlW20uWklQX0NPREVdIHx8ICgobCA9IHIuc2hpcHBpbmdBZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogbC5wb3N0YWxDb2RlKSB8fCBcIjAwMDAwXCIsIGVbbS5DT1VOVFJZXSA9IGVbbS5DT1VOVFJZXSB8fCAoKHUgPSByLnNoaXBwaW5nQWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IHUuY291bnRyeSkgfHwgXCJVU1wiLCBDKFwiRmluYWwgZm9ybSBpbnB1dHM6XCIsIGUpLCBlO1xufSwgZ24gPSAodCwgciwgZSkgPT4ge1xuICB0LnVwZGF0ZSh7XG4gICAgdG90YWw6IHtcbiAgICAgIGFtb3VudDogci5hbW91bnRBdG9tLFxuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIHBlbmRpbmc6IGVcbiAgICB9LFxuICAgIGN1cnJlbmN5OiByLmN1cnJlbmN5XG4gIH0pO1xufSwgYm4gPSAodCkgPT4ge1xuICBpZiAodC5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igb2NjdXJyZWQuXG5EZXRhaWxzOiBnb3QgJHt0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGh9IHJlcXVpcmVkIHVzZXIgYWN0aW9uc2ApO1xuICByZXR1cm4gZXIucGFyc2UodC5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xufSwgaXQgPSAodCwgciwgZSkgPT4ge1xuICBjb25zdCBuID0gdC5maWx0ZXIoKGkpID0+IGkucHJvdmlkZXIgPT09IHIpO1xuICBpZiAobi5sZW5ndGggPT09IDApXG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIkNQTXMgbGlzdFwiLCB0KSwgbmV3IEVycm9yKGBObyBDUE1zIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7cn0nIGFuZCBwcm9jZXNzb3IgJyR7ZX0nYCk7XG4gIGlmIChuLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiQ1BNcyBsaXN0XCIsIHQpLCBuZXcgRXJyb3IoYE1vcmUgdGhhbiBvbmUgQ1BNIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7cn0nIGFuZCBwcm9jZXNzb3IgJyR7ZX0nYCk7XG4gIHJldHVybiBuWzBdO1xufSwgVSA9IHtcbiAgLy8g4pyLIE5vdGU6IEZvciBmbG93cyB0aGF0IHJlcXVpcmUgaW5pdGlhbGl6YXRpb24sIHBsZWFzZSBhZGQgdGhlbSB0byBgaW5pdC1mbG93cy50c2BcbiAgLy8gQ29tbW9uXG4gIGNvbW1vbkNDOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBjblxuICB9LFxuICAvLyBTdHJpcGVcbiAgc3RyaXBlUFI6IHtcbiAgICBpbml0OiBtbixcbiAgICBydW46IHluXG4gIH0sXG4gIHN0cmlwZUxpbms6IHtcbiAgICBpbml0OiBCcixcbiAgICBydW46IEpyXG4gIH1cbiAgLy8g8J+RiSBBZGQgbW9yZSBmbG93cyBoZXJlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59O1xudmFyIGNlID0gZnVuY3Rpb24odCwgcikge1xuICByZXR1cm4gY2UgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihlLCBuKSB7XG4gICAgZS5fX3Byb3RvX18gPSBuO1xuICB9IHx8IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICBmb3IgKHZhciBpIGluIG4pIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCBpKSAmJiAoZVtpXSA9IG5baV0pO1xuICB9LCBjZSh0LCByKTtcbn07XG5mdW5jdGlvbiBMKHQsIHIpIHtcbiAgaWYgKHR5cGVvZiByICE9IFwiZnVuY3Rpb25cIiAmJiByICE9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKHIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgY2UodCwgcik7XG4gIGZ1bmN0aW9uIGUoKSB7XG4gICAgdGhpcy5jb25zdHJ1Y3RvciA9IHQ7XG4gIH1cbiAgdC5wcm90b3R5cGUgPSByID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShyKSA6IChlLnByb3RvdHlwZSA9IHIucHJvdG90eXBlLCBuZXcgZSgpKTtcbn1cbmZ1bmN0aW9uIHZuKHQsIHIsIGUsIG4pIHtcbiAgZnVuY3Rpb24gaShzKSB7XG4gICAgcmV0dXJuIHMgaW5zdGFuY2VvZiBlID8gcyA6IG5ldyBlKGZ1bmN0aW9uKGEpIHtcbiAgICAgIGEocyk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ldyAoZSB8fCAoZSA9IFByb21pc2UpKShmdW5jdGlvbihzLCBhKSB7XG4gICAgZnVuY3Rpb24gYyhkKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KG4ubmV4dChkKSk7XG4gICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgIGEoaCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGwoZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShuLnRocm93KGQpKTtcbiAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgYShoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdShkKSB7XG4gICAgICBkLmRvbmUgPyBzKGQudmFsdWUpIDogaShkLnZhbHVlKS50aGVuKGMsIGwpO1xuICAgIH1cbiAgICB1KChuID0gbi5hcHBseSh0LCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gc3QodCwgcikge1xuICB2YXIgZSA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChzWzBdICYgMSkgdGhyb3cgc1sxXTtcbiAgICByZXR1cm4gc1sxXTtcbiAgfSwgdHJ5czogW10sIG9wczogW10gfSwgbiwgaSwgcywgYSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGEubmV4dCA9IGMoMCksIGEudGhyb3cgPSBjKDEpLCBhLnJldHVybiA9IGMoMiksIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIChhW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGE7XG4gIGZ1bmN0aW9uIGModSkge1xuICAgIHJldHVybiBmdW5jdGlvbihkKSB7XG4gICAgICByZXR1cm4gbChbdSwgZF0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbCh1KSB7XG4gICAgaWYgKG4pIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgIGZvciAoOyBhICYmIChhID0gMCwgdVswXSAmJiAoZSA9IDApKSwgZTsgKSB0cnkge1xuICAgICAgaWYgKG4gPSAxLCBpICYmIChzID0gdVswXSAmIDIgPyBpLnJldHVybiA6IHVbMF0gPyBpLnRocm93IHx8ICgocyA9IGkucmV0dXJuKSAmJiBzLmNhbGwoaSksIDApIDogaS5uZXh0KSAmJiAhKHMgPSBzLmNhbGwoaSwgdVsxXSkpLmRvbmUpIHJldHVybiBzO1xuICAgICAgc3dpdGNoIChpID0gMCwgcyAmJiAodSA9IFt1WzBdICYgMiwgcy52YWx1ZV0pLCB1WzBdKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHMgPSB1O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIGUubGFiZWwrKywgeyB2YWx1ZTogdVsxXSwgZG9uZTogITEgfTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGUubGFiZWwrKywgaSA9IHVbMV0sIHUgPSBbMF07XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICB1ID0gZS5vcHMucG9wKCksIGUudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAocyA9IGUudHJ5cywgIShzID0gcy5sZW5ndGggPiAwICYmIHNbcy5sZW5ndGggLSAxXSkgJiYgKHVbMF0gPT09IDYgfHwgdVswXSA9PT0gMikpIHtcbiAgICAgICAgICAgIGUgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSAzICYmICghcyB8fCB1WzFdID4gc1swXSAmJiB1WzFdIDwgc1szXSkpIHtcbiAgICAgICAgICAgIGUubGFiZWwgPSB1WzFdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSA2ICYmIGUubGFiZWwgPCBzWzFdKSB7XG4gICAgICAgICAgICBlLmxhYmVsID0gc1sxXSwgcyA9IHU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMgJiYgZS5sYWJlbCA8IHNbMl0pIHtcbiAgICAgICAgICAgIGUubGFiZWwgPSBzWzJdLCBlLm9wcy5wdXNoKHUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNbMl0gJiYgZS5vcHMucG9wKCksIGUudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHUgPSByLmNhbGwodCwgZSk7XG4gICAgfSBjYXRjaCAoZCkge1xuICAgICAgdSA9IFs2LCBkXSwgaSA9IDA7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIG4gPSBzID0gMDtcbiAgICB9XG4gICAgaWYgKHVbMF0gJiA1KSB0aHJvdyB1WzFdO1xuICAgIHJldHVybiB7IHZhbHVlOiB1WzBdID8gdVsxXSA6IHZvaWQgMCwgZG9uZTogITAgfTtcbiAgfVxufVxuZnVuY3Rpb24gJCh0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBlID0gciAmJiB0W3JdLCBuID0gMDtcbiAgaWYgKGUpIHJldHVybiBlLmNhbGwodCk7XG4gIGlmICh0ICYmIHR5cGVvZiB0Lmxlbmd0aCA9PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHQgJiYgbiA+PSB0Lmxlbmd0aCAmJiAodCA9IHZvaWQgMCksIHsgdmFsdWU6IHQgJiYgdFtuKytdLCBkb25lOiAhdCB9O1xuICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihyID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuZnVuY3Rpb24gVyh0LCByKSB7XG4gIHZhciBlID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgdFtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIWUpIHJldHVybiB0O1xuICB2YXIgbiA9IGUuY2FsbCh0KSwgaSwgcyA9IFtdLCBhO1xuICB0cnkge1xuICAgIGZvciAoOyAociA9PT0gdm9pZCAwIHx8IHItLSA+IDApICYmICEoaSA9IG4ubmV4dCgpKS5kb25lOyApIHMucHVzaChpLnZhbHVlKTtcbiAgfSBjYXRjaCAoYykge1xuICAgIGEgPSB7IGVycm9yOiBjIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGkgJiYgIWkuZG9uZSAmJiAoZSA9IG4ucmV0dXJuKSAmJiBlLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChhKSB0aHJvdyBhLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcztcbn1cbmZ1bmN0aW9uIFEodCwgciwgZSkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIGkgPSByLmxlbmd0aCwgczsgbiA8IGk7IG4rKylcbiAgICAocyB8fCAhKG4gaW4gcikpICYmIChzIHx8IChzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwociwgMCwgbikpLCBzW25dID0gcltuXSk7XG4gIHJldHVybiB0LmNvbmNhdChzIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHIpKTtcbn1cbmZ1bmN0aW9uIHgodCkge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIHggPyAodGhpcy52ID0gdCwgdGhpcykgOiBuZXcgeCh0KTtcbn1cbmZ1bmN0aW9uIHduKHQsIHIsIGUpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG4gPSBlLmFwcGx5KHQsIHIgfHwgW10pLCBpLCBzID0gW107XG4gIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgYyhcIm5leHRcIiksIGMoXCJ0aHJvd1wiKSwgYyhcInJldHVyblwiLCBhKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgaTtcbiAgZnVuY3Rpb24gYShmKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHApIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocCkudGhlbihmLCBoKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGMoZiwgcCkge1xuICAgIG5bZl0gJiYgKGlbZl0gPSBmdW5jdGlvbih5KSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oaiwgWSkge1xuICAgICAgICBzLnB1c2goW2YsIHksIGosIFldKSA+IDEgfHwgbChmLCB5KTtcbiAgICAgIH0pO1xuICAgIH0sIHAgJiYgKGlbZl0gPSBwKGlbZl0pKSk7XG4gIH1cbiAgZnVuY3Rpb24gbChmLCBwKSB7XG4gICAgdHJ5IHtcbiAgICAgIHUobltmXShwKSk7XG4gICAgfSBjYXRjaCAoeSkge1xuICAgICAgXyhzWzBdWzNdLCB5KTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdShmKSB7XG4gICAgZi52YWx1ZSBpbnN0YW5jZW9mIHggPyBQcm9taXNlLnJlc29sdmUoZi52YWx1ZS52KS50aGVuKGQsIGgpIDogXyhzWzBdWzJdLCBmKTtcbiAgfVxuICBmdW5jdGlvbiBkKGYpIHtcbiAgICBsKFwibmV4dFwiLCBmKTtcbiAgfVxuICBmdW5jdGlvbiBoKGYpIHtcbiAgICBsKFwidGhyb3dcIiwgZik7XG4gIH1cbiAgZnVuY3Rpb24gXyhmLCBwKSB7XG4gICAgZihwKSwgcy5zaGlmdCgpLCBzLmxlbmd0aCAmJiBsKHNbMF1bMF0sIHNbMF1bMV0pO1xuICB9XG59XG5mdW5jdGlvbiBFbih0KSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciByID0gdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGU7XG4gIHJldHVybiByID8gci5jYWxsKHQpIDogKHQgPSB0eXBlb2YgJCA9PSBcImZ1bmN0aW9uXCIgPyAkKHQpIDogdFtTeW1ib2wuaXRlcmF0b3JdKCksIGUgPSB7fSwgbihcIm5leHRcIiksIG4oXCJ0aHJvd1wiKSwgbihcInJldHVyblwiKSwgZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgZSk7XG4gIGZ1bmN0aW9uIG4ocykge1xuICAgIGVbc10gPSB0W3NdICYmIGZ1bmN0aW9uKGEpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihjLCBsKSB7XG4gICAgICAgIGEgPSB0W3NdKGEpLCBpKGMsIGwsIGEuZG9uZSwgYS52YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGkocywgYSwgYywgbCkge1xuICAgIFByb21pc2UucmVzb2x2ZShsKS50aGVuKGZ1bmN0aW9uKHUpIHtcbiAgICAgIHMoeyB2YWx1ZTogdSwgZG9uZTogYyB9KTtcbiAgICB9LCBhKTtcbiAgfVxufVxuZnVuY3Rpb24gdyh0KSB7XG4gIHJldHVybiB0eXBlb2YgdCA9PSBcImZ1bmN0aW9uXCI7XG59XG5mdW5jdGlvbiByZSh0KSB7XG4gIHZhciByID0gZnVuY3Rpb24obikge1xuICAgIEVycm9yLmNhbGwobiksIG4uc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgfSwgZSA9IHQocik7XG4gIHJldHVybiBlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSwgZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBlLCBlO1xufVxudmFyIG9lID0gcmUoZnVuY3Rpb24odCkge1xuICByZXR1cm4gZnVuY3Rpb24oZSkge1xuICAgIHQodGhpcyksIHRoaXMubWVzc2FnZSA9IGUgPyBlLmxlbmd0aCArIGAgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcbmAgKyBlLm1hcChmdW5jdGlvbihuLCBpKSB7XG4gICAgICByZXR1cm4gaSArIDEgKyBcIikgXCIgKyBuLnRvU3RyaW5nKCk7XG4gICAgfSkuam9pbihgXG4gIGApIDogXCJcIiwgdGhpcy5uYW1lID0gXCJVbnN1YnNjcmlwdGlvbkVycm9yXCIsIHRoaXMuZXJyb3JzID0gZTtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gWCh0LCByKSB7XG4gIGlmICh0KSB7XG4gICAgdmFyIGUgPSB0LmluZGV4T2Yocik7XG4gICAgMCA8PSBlICYmIHQuc3BsaWNlKGUsIDEpO1xuICB9XG59XG52YXIgSCA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB0KHIpIHtcbiAgICB0aGlzLmluaXRpYWxUZWFyZG93biA9IHIsIHRoaXMuY2xvc2VkID0gITEsIHRoaXMuX3BhcmVudGFnZSA9IG51bGwsIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByLCBlLCBuLCBpLCBzO1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VkID0gITA7XG4gICAgICB2YXIgYSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgIGlmIChhKVxuICAgICAgICBpZiAodGhpcy5fcGFyZW50YWdlID0gbnVsbCwgQXJyYXkuaXNBcnJheShhKSlcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgYyA9ICQoYSksIGwgPSBjLm5leHQoKTsgIWwuZG9uZTsgbCA9IGMubmV4dCgpKSB7XG4gICAgICAgICAgICAgIHZhciB1ID0gbC52YWx1ZTtcbiAgICAgICAgICAgICAgdS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoeSkge1xuICAgICAgICAgICAgciA9IHsgZXJyb3I6IHkgfTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbCAmJiAhbC5kb25lICYmIChlID0gYy5yZXR1cm4pICYmIGUuY2FsbChjKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGlmIChyKSB0aHJvdyByLmVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIGEucmVtb3ZlKHRoaXMpO1xuICAgICAgdmFyIGQgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgIGlmICh3KGQpKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGQoKTtcbiAgICAgICAgfSBjYXRjaCAoeSkge1xuICAgICAgICAgIHMgPSB5IGluc3RhbmNlb2Ygb2UgPyB5LmVycm9ycyA6IFt5XTtcbiAgICAgICAgfVxuICAgICAgdmFyIGggPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgaWYgKGgpIHtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICh2YXIgXyA9ICQoaCksIGYgPSBfLm5leHQoKTsgIWYuZG9uZTsgZiA9IF8ubmV4dCgpKSB7XG4gICAgICAgICAgICB2YXIgcCA9IGYudmFsdWU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBrZShwKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHkpIHtcbiAgICAgICAgICAgICAgcyA9IHMgPz8gW10sIHkgaW5zdGFuY2VvZiBvZSA/IHMgPSBRKFEoW10sIFcocykpLCBXKHkuZXJyb3JzKSkgOiBzLnB1c2goeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoICh5KSB7XG4gICAgICAgICAgbiA9IHsgZXJyb3I6IHkgfTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZiAmJiAhZi5kb25lICYmIChpID0gXy5yZXR1cm4pICYmIGkuY2FsbChfKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaWYgKG4pIHRocm93IG4uZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocylcbiAgICAgICAgdGhyb3cgbmV3IG9lKHMpO1xuICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlO1xuICAgIGlmIChyICYmIHIgIT09IHRoaXMpXG4gICAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICAgIGtlKHIpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChyIGluc3RhbmNlb2YgdCkge1xuICAgICAgICAgIGlmIChyLmNsb3NlZCB8fCByLl9oYXNQYXJlbnQodGhpcykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgci5fYWRkUGFyZW50KHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgICh0aGlzLl9maW5hbGl6ZXJzID0gKGUgPSB0aGlzLl9maW5hbGl6ZXJzKSAhPT0gbnVsbCAmJiBlICE9PSB2b2lkIDAgPyBlIDogW10pLnB1c2gocik7XG4gICAgICB9XG4gIH0sIHQucHJvdG90eXBlLl9oYXNQYXJlbnQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgcmV0dXJuIGUgPT09IHIgfHwgQXJyYXkuaXNBcnJheShlKSAmJiBlLmluY2x1ZGVzKHIpO1xuICB9LCB0LnByb3RvdHlwZS5fYWRkUGFyZW50ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkoZSkgPyAoZS5wdXNoKHIpLCBlKSA6IGUgPyBbZSwgcl0gOiByO1xuICB9LCB0LnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIGUgPT09IHIgPyB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsIDogQXJyYXkuaXNBcnJheShlKSAmJiBYKGUsIHIpO1xuICB9LCB0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgIGUgJiYgWChlLCByKSwgciBpbnN0YW5jZW9mIHQgJiYgci5fcmVtb3ZlUGFyZW50KHRoaXMpO1xuICB9LCB0LkVNUFRZID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIgPSBuZXcgdCgpO1xuICAgIHJldHVybiByLmNsb3NlZCA9ICEwLCByO1xuICB9KCksIHQ7XG59KCksIGF0ID0gSC5FTVBUWTtcbmZ1bmN0aW9uIGN0KHQpIHtcbiAgcmV0dXJuIHQgaW5zdGFuY2VvZiBIIHx8IHQgJiYgXCJjbG9zZWRcIiBpbiB0ICYmIHcodC5yZW1vdmUpICYmIHcodC5hZGQpICYmIHcodC51bnN1YnNjcmliZSk7XG59XG5mdW5jdGlvbiBrZSh0KSB7XG4gIHcodCkgPyB0KCkgOiB0LnVuc3Vic2NyaWJlKCk7XG59XG52YXIgdXQgPSB7XG4gIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gIG9uU3RvcHBlZE5vdGlmaWNhdGlvbjogbnVsbCxcbiAgUHJvbWlzZTogdm9pZCAwLFxuICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiAhMSxcbiAgdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiAhMVxufSwgbHQgPSB7XG4gIHNldFRpbWVvdXQ6IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICBmb3IgKHZhciBlID0gW10sIG4gPSAyOyBuIDwgYXJndW1lbnRzLmxlbmd0aDsgbisrKVxuICAgICAgZVtuIC0gMl0gPSBhcmd1bWVudHNbbl07XG4gICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCBRKFt0LCByXSwgVyhlKSkpO1xuICB9LFxuICBjbGVhclRpbWVvdXQ6IGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gKGNsZWFyVGltZW91dCkodCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn07XG5mdW5jdGlvbiBkdCh0KSB7XG4gIGx0LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgdDtcbiAgfSk7XG59XG5mdW5jdGlvbiBQZSgpIHtcbn1cbmZ1bmN0aW9uIEsodCkge1xuICB0KCk7XG59XG52YXIgeWUgPSBmdW5jdGlvbih0KSB7XG4gIEwociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSkge1xuICAgIHZhciBuID0gdC5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIG4uaXNTdG9wcGVkID0gITEsIGUgPyAobi5kZXN0aW5hdGlvbiA9IGUsIGN0KGUpICYmIGUuYWRkKG4pKSA6IG4uZGVzdGluYXRpb24gPSBQbiwgbjtcbiAgfVxuICByZXR1cm4gci5jcmVhdGUgPSBmdW5jdGlvbihlLCBuLCBpKSB7XG4gICAgcmV0dXJuIG5ldyB1ZShlLCBuLCBpKTtcbiAgfSwgci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCB0aGlzLl9uZXh0KGUpO1xuICB9LCByLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fZXJyb3IoZSkpO1xuICB9LCByLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8ICh0aGlzLmlzU3RvcHBlZCA9ICEwLCB0aGlzLl9jb21wbGV0ZSgpKTtcbiAgfSwgci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmNsb3NlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdC5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGwpO1xuICB9LCByLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQoZSk7XG4gIH0sIHIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfSwgci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfSwgcjtcbn0oSCksIFNuID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG5mdW5jdGlvbiBpZSh0LCByKSB7XG4gIHJldHVybiBTbi5jYWxsKHQsIHIpO1xufVxudmFyIENuID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHQocikge1xuICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gcjtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmIChlLm5leHQpXG4gICAgICB0cnkge1xuICAgICAgICBlLm5leHQocik7XG4gICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgIEoobik7XG4gICAgICB9XG4gIH0sIHQucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKGUuZXJyb3IpXG4gICAgICB0cnkge1xuICAgICAgICBlLmVycm9yKHIpO1xuICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICBKKG4pO1xuICAgICAgfVxuICAgIGVsc2VcbiAgICAgIEoocik7XG4gIH0sIHQucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAoci5jb21wbGV0ZSlcbiAgICAgIHRyeSB7XG4gICAgICAgIHIuY29tcGxldGUoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgSihlKTtcbiAgICAgIH1cbiAgfSwgdDtcbn0oKSwgdWUgPSBmdW5jdGlvbih0KSB7XG4gIEwociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbiwgaSkge1xuICAgIHZhciBzID0gdC5jYWxsKHRoaXMpIHx8IHRoaXMsIGE7XG4gICAgaWYgKHcoZSkgfHwgIWUpXG4gICAgICBhID0ge1xuICAgICAgICBuZXh0OiBlID8/IHZvaWQgMCxcbiAgICAgICAgZXJyb3I6IG4gPz8gdm9pZCAwLFxuICAgICAgICBjb21wbGV0ZTogaSA/PyB2b2lkIDBcbiAgICAgIH07XG4gICAgZWxzZSB7XG4gICAgICB2YXIgYztcbiAgICAgIHMgJiYgdXQudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0ID8gKGMgPSBPYmplY3QuY3JlYXRlKGUpLCBjLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9LCBhID0ge1xuICAgICAgICBuZXh0OiBlLm5leHQgJiYgaWUoZS5uZXh0LCBjKSxcbiAgICAgICAgZXJyb3I6IGUuZXJyb3IgJiYgaWUoZS5lcnJvciwgYyksXG4gICAgICAgIGNvbXBsZXRlOiBlLmNvbXBsZXRlICYmIGllKGUuY29tcGxldGUsIGMpXG4gICAgICB9KSA6IGEgPSBlO1xuICAgIH1cbiAgICByZXR1cm4gcy5kZXN0aW5hdGlvbiA9IG5ldyBDbihhKSwgcztcbiAgfVxuICByZXR1cm4gcjtcbn0oeWUpO1xuZnVuY3Rpb24gSih0KSB7XG4gIGR0KHQpO1xufVxuZnVuY3Rpb24ga24odCkge1xuICB0aHJvdyB0O1xufVxudmFyIFBuID0ge1xuICBjbG9zZWQ6ICEwLFxuICBuZXh0OiBQZSxcbiAgZXJyb3I6IGtuLFxuICBjb21wbGV0ZTogUGVcbn0sIF9lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wub2JzZXJ2YWJsZSB8fCBcIkBAb2JzZXJ2YWJsZVwiO1xufSgpO1xuZnVuY3Rpb24gSW4odCkge1xuICByZXR1cm4gdDtcbn1cbmZ1bmN0aW9uIE9uKHQpIHtcbiAgcmV0dXJuIHQubGVuZ3RoID09PSAwID8gSW4gOiB0Lmxlbmd0aCA9PT0gMSA/IHRbMF0gOiBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKG4sIGkpIHtcbiAgICAgIHJldHVybiBpKG4pO1xuICAgIH0sIGUpO1xuICB9O1xufVxudmFyIFQgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdChyKSB7XG4gICAgciAmJiAodGhpcy5fc3Vic2NyaWJlID0gcik7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSBuZXcgdCgpO1xuICAgIHJldHVybiBlLnNvdXJjZSA9IHRoaXMsIGUub3BlcmF0b3IgPSByLCBlO1xuICB9LCB0LnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbihyLCBlLCBuKSB7XG4gICAgdmFyIGkgPSB0aGlzLCBzID0gQW4ocikgPyByIDogbmV3IHVlKHIsIGUsIG4pO1xuICAgIHJldHVybiBLKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGEgPSBpLCBjID0gYS5vcGVyYXRvciwgbCA9IGEuc291cmNlO1xuICAgICAgcy5hZGQoYyA/IGMuY2FsbChzLCBsKSA6IGwgPyBpLl9zdWJzY3JpYmUocykgOiBpLl90cnlTdWJzY3JpYmUocykpO1xuICAgIH0pLCBzO1xuICB9LCB0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHIuZXJyb3IoZSk7XG4gICAgfVxuICB9LCB0LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24ociwgZSkge1xuICAgIHZhciBuID0gdGhpcztcbiAgICByZXR1cm4gZSA9IEllKGUpLCBuZXcgZShmdW5jdGlvbihpLCBzKSB7XG4gICAgICB2YXIgYSA9IG5ldyB1ZSh7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcihjKTtcbiAgICAgICAgICB9IGNhdGNoIChsKSB7XG4gICAgICAgICAgICBzKGwpLCBhLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogcyxcbiAgICAgICAgY29tcGxldGU6IGlcbiAgICAgIH0pO1xuICAgICAgbi5zdWJzY3JpYmUoYSk7XG4gICAgfSk7XG4gIH0sIHQucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGU7XG4gICAgcmV0dXJuIChlID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUuc3Vic2NyaWJlKHIpO1xuICB9LCB0LnByb3RvdHlwZVtfZV0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgdC5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIHIgPSBbXSwgZSA9IDA7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspXG4gICAgICByW2VdID0gYXJndW1lbnRzW2VdO1xuICAgIHJldHVybiBPbihyKSh0aGlzKTtcbiAgfSwgdC5wcm90b3R5cGUudG9Qcm9taXNlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcztcbiAgICByZXR1cm4gciA9IEllKHIpLCBuZXcgcihmdW5jdGlvbihuLCBpKSB7XG4gICAgICB2YXIgcztcbiAgICAgIGUuc3Vic2NyaWJlKGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgcmV0dXJuIHMgPSBhO1xuICAgICAgfSwgZnVuY3Rpb24oYSkge1xuICAgICAgICByZXR1cm4gaShhKTtcbiAgICAgIH0sIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbihzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9LCB0LmNyZWF0ZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICByZXR1cm4gbmV3IHQocik7XG4gIH0sIHQ7XG59KCk7XG5mdW5jdGlvbiBJZSh0KSB7XG4gIHZhciByO1xuICByZXR1cm4gKHIgPSB0ID8/IHV0LlByb21pc2UpICE9PSBudWxsICYmIHIgIT09IHZvaWQgMCA/IHIgOiBQcm9taXNlO1xufVxuZnVuY3Rpb24gUm4odCkge1xuICByZXR1cm4gdCAmJiB3KHQubmV4dCkgJiYgdyh0LmVycm9yKSAmJiB3KHQuY29tcGxldGUpO1xufVxuZnVuY3Rpb24gQW4odCkge1xuICByZXR1cm4gdCAmJiB0IGluc3RhbmNlb2YgeWUgfHwgUm4odCkgJiYgY3QodCk7XG59XG5mdW5jdGlvbiBUbih0KSB7XG4gIHJldHVybiB3KHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQubGlmdCk7XG59XG5mdW5jdGlvbiBqbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbihyKSB7XG4gICAgaWYgKFRuKHIpKVxuICAgICAgcmV0dXJuIHIubGlmdChmdW5jdGlvbihlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHQoZSwgdGhpcyk7XG4gICAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgICB0aGlzLmVycm9yKG4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGVcIik7XG4gIH07XG59XG5mdW5jdGlvbiBNbih0LCByLCBlLCBuLCBpKSB7XG4gIHJldHVybiBuZXcgTG4odCwgciwgZSwgbiwgaSk7XG59XG52YXIgTG4gPSBmdW5jdGlvbih0KSB7XG4gIEwociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbiwgaSwgcywgYSwgYykge1xuICAgIHZhciBsID0gdC5jYWxsKHRoaXMsIGUpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGwub25GaW5hbGl6ZSA9IGEsIGwuc2hvdWxkVW5zdWJzY3JpYmUgPSBjLCBsLl9uZXh0ID0gbiA/IGZ1bmN0aW9uKHUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG4odSk7XG4gICAgICB9IGNhdGNoIChkKSB7XG4gICAgICAgIGUuZXJyb3IoZCk7XG4gICAgICB9XG4gICAgfSA6IHQucHJvdG90eXBlLl9uZXh0LCBsLl9lcnJvciA9IHMgPyBmdW5jdGlvbih1KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzKHUpO1xuICAgICAgfSBjYXRjaCAoZCkge1xuICAgICAgICBlLmVycm9yKGQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH0gOiB0LnByb3RvdHlwZS5fZXJyb3IsIGwuX2NvbXBsZXRlID0gaSA/IGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaSgpO1xuICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICBlLmVycm9yKHUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH0gOiB0LnByb3RvdHlwZS5fY29tcGxldGUsIGw7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGU7XG4gICAgaWYgKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlIHx8IHRoaXMuc2hvdWxkVW5zdWJzY3JpYmUoKSkge1xuICAgICAgdmFyIG4gPSB0aGlzLmNsb3NlZDtcbiAgICAgIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksICFuICYmICgoZSA9IHRoaXMub25GaW5hbGl6ZSkgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwIHx8IGUuY2FsbCh0aGlzKSk7XG4gICAgfVxuICB9LCByO1xufSh5ZSksIERuID0gcmUoZnVuY3Rpb24odCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdCh0aGlzKSwgdGhpcy5uYW1lID0gXCJPYmplY3RVbnN1YnNjcmliZWRFcnJvclwiLCB0aGlzLm1lc3NhZ2UgPSBcIm9iamVjdCB1bnN1YnNjcmliZWRcIjtcbiAgfTtcbn0pLCBmdCA9IGZ1bmN0aW9uKHQpIHtcbiAgTChyLCB0KTtcbiAgZnVuY3Rpb24gcigpIHtcbiAgICB2YXIgZSA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBlLmNsb3NlZCA9ICExLCBlLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBlLm9ic2VydmVycyA9IFtdLCBlLmlzU3RvcHBlZCA9ICExLCBlLmhhc0Vycm9yID0gITEsIGUudGhyb3duRXJyb3IgPSBudWxsLCBlO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gbmV3IE9lKHRoaXMsIHRoaXMpO1xuICAgIHJldHVybiBuLm9wZXJhdG9yID0gZSwgbjtcbiAgfSwgci5wcm90b3R5cGUuX3Rocm93SWZDbG9zZWQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICB0aHJvdyBuZXcgRG4oKTtcbiAgfSwgci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgSyhmdW5jdGlvbigpIHtcbiAgICAgIHZhciBpLCBzO1xuICAgICAgaWYgKG4uX3Rocm93SWZDbG9zZWQoKSwgIW4uaXNTdG9wcGVkKSB7XG4gICAgICAgIG4uY3VycmVudE9ic2VydmVycyB8fCAobi5jdXJyZW50T2JzZXJ2ZXJzID0gQXJyYXkuZnJvbShuLm9ic2VydmVycykpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAodmFyIGEgPSAkKG4uY3VycmVudE9ic2VydmVycyksIGMgPSBhLm5leHQoKTsgIWMuZG9uZTsgYyA9IGEubmV4dCgpKSB7XG4gICAgICAgICAgICB2YXIgbCA9IGMudmFsdWU7XG4gICAgICAgICAgICBsLm5leHQoZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgICAgaSA9IHsgZXJyb3I6IHUgfTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYyAmJiAhYy5kb25lICYmIChzID0gYS5yZXR1cm4pICYmIHMuY2FsbChhKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaWYgKGkpIHRocm93IGkuZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIHIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gdGhpcztcbiAgICBLKGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKG4uX3Rocm93SWZDbG9zZWQoKSwgIW4uaXNTdG9wcGVkKSB7XG4gICAgICAgIG4uaGFzRXJyb3IgPSBuLmlzU3RvcHBlZCA9ICEwLCBuLnRocm93bkVycm9yID0gZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IG4ub2JzZXJ2ZXJzOyBpLmxlbmd0aDsgKVxuICAgICAgICAgIGkuc2hpZnQoKS5lcnJvcihlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSA9IHRoaXM7XG4gICAgSyhmdW5jdGlvbigpIHtcbiAgICAgIGlmIChlLl90aHJvd0lmQ2xvc2VkKCksICFlLmlzU3RvcHBlZCkge1xuICAgICAgICBlLmlzU3RvcHBlZCA9ICEwO1xuICAgICAgICBmb3IgKHZhciBuID0gZS5vYnNlcnZlcnM7IG4ubGVuZ3RoOyApXG4gICAgICAgICAgbi5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIHIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9ICEwLCB0aGlzLm9ic2VydmVycyA9IHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gIH0sIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBlO1xuICAgICAgcmV0dXJuICgoZSA9IHRoaXMub2JzZXJ2ZXJzKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLmxlbmd0aCkgPiAwO1xuICAgIH0sXG4gICAgZW51bWVyYWJsZTogITEsXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgci5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLCB0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlLmNhbGwodGhpcywgZSk7XG4gIH0sIHIucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhlKSwgdGhpcy5faW5uZXJTdWJzY3JpYmUoZSk7XG4gIH0sIHIucHJvdG90eXBlLl9pbm5lclN1YnNjcmliZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IHRoaXMsIGkgPSB0aGlzLCBzID0gaS5oYXNFcnJvciwgYSA9IGkuaXNTdG9wcGVkLCBjID0gaS5vYnNlcnZlcnM7XG4gICAgcmV0dXJuIHMgfHwgYSA/IGF0IDogKHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGwsIGMucHVzaChlKSwgbmV3IEgoZnVuY3Rpb24oKSB7XG4gICAgICBuLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBYKGMsIGUpO1xuICAgIH0pKTtcbiAgfSwgci5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzLCBpID0gbi5oYXNFcnJvciwgcyA9IG4udGhyb3duRXJyb3IsIGEgPSBuLmlzU3RvcHBlZDtcbiAgICBpID8gZS5lcnJvcihzKSA6IGEgJiYgZS5jb21wbGV0ZSgpO1xuICB9LCByLnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSA9IG5ldyBUKCk7XG4gICAgcmV0dXJuIGUuc291cmNlID0gdGhpcywgZTtcbiAgfSwgci5jcmVhdGUgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgcmV0dXJuIG5ldyBPZShlLCBuKTtcbiAgfSwgcjtcbn0oVCksIE9lID0gZnVuY3Rpb24odCkge1xuICBMKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4pIHtcbiAgICB2YXIgaSA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBpLmRlc3RpbmF0aW9uID0gZSwgaS5zb3VyY2UgPSBuLCBpO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuLCBpO1xuICAgIChpID0gKG4gPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLm5leHQpID09PSBudWxsIHx8IGkgPT09IHZvaWQgMCB8fCBpLmNhbGwobiwgZSk7XG4gIH0sIHIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuLCBpO1xuICAgIChpID0gKG4gPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLmVycm9yKSA9PT0gbnVsbCB8fCBpID09PSB2b2lkIDAgfHwgaS5jYWxsKG4sIGUpO1xuICB9LCByLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlLCBuO1xuICAgIChuID0gKGUgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgfHwgbi5jYWxsKGUpO1xuICB9LCByLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuLCBpO1xuICAgIHJldHVybiAoaSA9IChuID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4uc3Vic2NyaWJlKGUpKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogYXQ7XG4gIH0sIHI7XG59KGZ0KSwgRm4gPSB7XG4gIG5vdzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIERhdGUubm93KCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIHhuID0gZnVuY3Rpb24odCkge1xuICBMKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4pIHtcbiAgICByZXR1cm4gdC5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCByO1xufShIKSwgUmUgPSB7XG4gIHNldEludGVydmFsOiBmdW5jdGlvbih0LCByKSB7XG4gICAgZm9yICh2YXIgZSA9IFtdLCBuID0gMjsgbiA8IGFyZ3VtZW50cy5sZW5ndGg7IG4rKylcbiAgICAgIGVbbiAtIDJdID0gYXJndW1lbnRzW25dO1xuICAgIHJldHVybiBzZXRJbnRlcnZhbC5hcHBseSh2b2lkIDAsIFEoW3QsIHJdLCBXKGUpKSk7XG4gIH0sXG4gIGNsZWFySW50ZXJ2YWw6IGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gY2xlYXJJbnRlcnZhbCh0KTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufSwgTm4gPSBmdW5jdGlvbih0KSB7XG4gIEwociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbikge1xuICAgIHZhciBpID0gdC5jYWxsKHRoaXMsIGUsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIGkuc2NoZWR1bGVyID0gZSwgaS53b3JrID0gbiwgaS5wZW5kaW5nID0gITEsIGk7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIHZhciBpO1xuICAgIGlmIChuID09PSB2b2lkIDAgJiYgKG4gPSAwKSwgdGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB0aGlzLnN0YXRlID0gZTtcbiAgICB2YXIgcyA9IHRoaXMuaWQsIGEgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICByZXR1cm4gcyAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChhLCBzLCBuKSksIHRoaXMucGVuZGluZyA9ICEwLCB0aGlzLmRlbGF5ID0gbiwgdGhpcy5pZCA9IChpID0gdGhpcy5pZCkgIT09IG51bGwgJiYgaSAhPT0gdm9pZCAwID8gaSA6IHRoaXMucmVxdWVzdEFzeW5jSWQoYSwgdGhpcy5pZCwgbiksIHRoaXM7XG4gIH0sIHIucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24oZSwgbiwgaSkge1xuICAgIHJldHVybiBpID09PSB2b2lkIDAgJiYgKGkgPSAwKSwgUmUuc2V0SW50ZXJ2YWwoZS5mbHVzaC5iaW5kKGUsIHRoaXMpLCBpKTtcbiAgfSwgci5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbihlLCBuLCBpKSB7XG4gICAgaWYgKGkgPT09IHZvaWQgMCAmJiAoaSA9IDApLCBpICE9IG51bGwgJiYgdGhpcy5kZWxheSA9PT0gaSAmJiB0aGlzLnBlbmRpbmcgPT09ICExKVxuICAgICAgcmV0dXJuIG47XG4gICAgbiAhPSBudWxsICYmIFJlLmNsZWFySW50ZXJ2YWwobik7XG4gIH0sIHIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb25cIik7XG4gICAgdGhpcy5wZW5kaW5nID0gITE7XG4gICAgdmFyIGkgPSB0aGlzLl9leGVjdXRlKGUsIG4pO1xuICAgIGlmIChpKVxuICAgICAgcmV0dXJuIGk7XG4gICAgdGhpcy5wZW5kaW5nID09PSAhMSAmJiB0aGlzLmlkICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLCB0aGlzLmlkLCBudWxsKSk7XG4gIH0sIHIucHJvdG90eXBlLl9leGVjdXRlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIHZhciBpID0gITEsIHM7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMud29yayhlKTtcbiAgICB9IGNhdGNoIChhKSB7XG4gICAgICBpID0gITAsIHMgPSBhIHx8IG5ldyBFcnJvcihcIlNjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3JcIik7XG4gICAgfVxuICAgIGlmIChpKVxuICAgICAgcmV0dXJuIHRoaXMudW5zdWJzY3JpYmUoKSwgcztcbiAgfSwgci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICB2YXIgZSA9IHRoaXMsIG4gPSBlLmlkLCBpID0gZS5zY2hlZHVsZXIsIHMgPSBpLmFjdGlvbnM7XG4gICAgICB0aGlzLndvcmsgPSB0aGlzLnN0YXRlID0gdGhpcy5zY2hlZHVsZXIgPSBudWxsLCB0aGlzLnBlbmRpbmcgPSAhMSwgWChzLCB0aGlzKSwgbiAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChpLCBuLCBudWxsKSksIHRoaXMuZGVsYXkgPSBudWxsLCB0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfSwgcjtcbn0oeG4pLCBBZSA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB0KHIsIGUpIHtcbiAgICBlID09PSB2b2lkIDAgJiYgKGUgPSB0Lm5vdyksIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IHIsIHRoaXMubm93ID0gZTtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihyLCBlLCBuKSB7XG4gICAgcmV0dXJuIGUgPT09IHZvaWQgMCAmJiAoZSA9IDApLCBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHIpLnNjaGVkdWxlKG4sIGUpO1xuICB9LCB0Lm5vdyA9IEZuLm5vdywgdDtcbn0oKSwgVW4gPSBmdW5jdGlvbih0KSB7XG4gIEwociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbikge1xuICAgIG4gPT09IHZvaWQgMCAmJiAobiA9IEFlLm5vdyk7XG4gICAgdmFyIGkgPSB0LmNhbGwodGhpcywgZSwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gaS5hY3Rpb25zID0gW10sIGkuX2FjdGl2ZSA9ICExLCBpO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IHRoaXMuYWN0aW9ucztcbiAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICBuLnB1c2goZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBpO1xuICAgIHRoaXMuX2FjdGl2ZSA9ICEwO1xuICAgIGRvXG4gICAgICBpZiAoaSA9IGUuZXhlY3V0ZShlLnN0YXRlLCBlLmRlbGF5KSlcbiAgICAgICAgYnJlYWs7XG4gICAgd2hpbGUgKGUgPSBuLnNoaWZ0KCkpO1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPSAhMSwgaSkge1xuICAgICAgZm9yICg7IGUgPSBuLnNoaWZ0KCk7IClcbiAgICAgICAgZS51bnN1YnNjcmliZSgpO1xuICAgICAgdGhyb3cgaTtcbiAgICB9XG4gIH0sIHI7XG59KEFlKSwgJG4gPSBuZXcgVW4oTm4pLCBWbiA9IGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIHQgJiYgdHlwZW9mIHQubGVuZ3RoID09IFwibnVtYmVyXCIgJiYgdHlwZW9mIHQgIT0gXCJmdW5jdGlvblwiO1xufTtcbmZ1bmN0aW9uIHFuKHQpIHtcbiAgcmV0dXJuIHcodCA9PSBudWxsID8gdm9pZCAwIDogdC50aGVuKTtcbn1cbmZ1bmN0aW9uIHpuKHQpIHtcbiAgcmV0dXJuIHcodFtfZV0pO1xufVxuZnVuY3Rpb24gSG4odCkge1xuICByZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiYgdyh0ID09IG51bGwgPyB2b2lkIDAgOiB0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7XG59XG5mdW5jdGlvbiBZbih0KSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKHQgIT09IG51bGwgJiYgdHlwZW9mIHQgPT0gXCJvYmplY3RcIiA/IFwiYW4gaW52YWxpZCBvYmplY3RcIiA6IFwiJ1wiICsgdCArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuZnVuY3Rpb24gQm4oKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sICE9IFwiZnVuY3Rpb25cIiB8fCAhU3ltYm9sLml0ZXJhdG9yID8gXCJAQGl0ZXJhdG9yXCIgOiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgSm4gPSBCbigpO1xuZnVuY3Rpb24gS24odCkge1xuICByZXR1cm4gdyh0ID09IG51bGwgPyB2b2lkIDAgOiB0W0puXSk7XG59XG5mdW5jdGlvbiBHbih0KSB7XG4gIHJldHVybiB3bih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBlLCBuLCBpLCBzO1xuICAgIHJldHVybiBzdCh0aGlzLCBmdW5jdGlvbihhKSB7XG4gICAgICBzd2l0Y2ggKGEubGFiZWwpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGUgPSB0LmdldFJlYWRlcigpLCBhLmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGEudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSksIGEubGFiZWwgPSAyO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgcmV0dXJuIFs0LCB4KGUucmVhZCgpKV07XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICByZXR1cm4gbiA9IGEuc2VudCgpLCBpID0gbi52YWx1ZSwgcyA9IG4uZG9uZSwgcyA/IFs0LCB4KHZvaWQgMCldIDogWzMsIDVdO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIFsyLCBhLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gWzQsIHgoaSldO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgcmV0dXJuIFs0LCBhLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICByZXR1cm4gYS5zZW50KCksIFszLCAyXTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiBbMywgMTBdO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgcmV0dXJuIGUucmVsZWFzZUxvY2soKSwgWzddO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gWm4odCkge1xuICByZXR1cm4gdyh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmdldFJlYWRlcik7XG59XG5mdW5jdGlvbiBXbih0KSB7XG4gIGlmICh0IGluc3RhbmNlb2YgVClcbiAgICByZXR1cm4gdDtcbiAgaWYgKHQgIT0gbnVsbCkge1xuICAgIGlmICh6bih0KSlcbiAgICAgIHJldHVybiBRbih0KTtcbiAgICBpZiAoVm4odCkpXG4gICAgICByZXR1cm4gWG4odCk7XG4gICAgaWYgKHFuKHQpKVxuICAgICAgcmV0dXJuIGVvKHQpO1xuICAgIGlmIChIbih0KSlcbiAgICAgIHJldHVybiBwdCh0KTtcbiAgICBpZiAoS24odCkpXG4gICAgICByZXR1cm4gdG8odCk7XG4gICAgaWYgKFpuKHQpKVxuICAgICAgcmV0dXJuIHJvKHQpO1xuICB9XG4gIHRocm93IFluKHQpO1xufVxuZnVuY3Rpb24gUW4odCkge1xuICByZXR1cm4gbmV3IFQoZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdFtfZV0oKTtcbiAgICBpZiAodyhlLnN1YnNjcmliZSkpXG4gICAgICByZXR1cm4gZS5zdWJzY3JpYmUocik7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlXCIpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFhuKHQpIHtcbiAgcmV0dXJuIG5ldyBUKGZ1bmN0aW9uKHIpIHtcbiAgICBmb3IgKHZhciBlID0gMDsgZSA8IHQubGVuZ3RoICYmICFyLmNsb3NlZDsgZSsrKVxuICAgICAgci5uZXh0KHRbZV0pO1xuICAgIHIuY29tcGxldGUoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBlbyh0KSB7XG4gIHJldHVybiBuZXcgVChmdW5jdGlvbihyKSB7XG4gICAgdC50aGVuKGZ1bmN0aW9uKGUpIHtcbiAgICAgIHIuY2xvc2VkIHx8IChyLm5leHQoZSksIHIuY29tcGxldGUoKSk7XG4gICAgfSwgZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIHIuZXJyb3IoZSk7XG4gICAgfSkudGhlbihudWxsLCBkdCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gdG8odCkge1xuICByZXR1cm4gbmV3IFQoZnVuY3Rpb24ocikge1xuICAgIHZhciBlLCBuO1xuICAgIHRyeSB7XG4gICAgICBmb3IgKHZhciBpID0gJCh0KSwgcyA9IGkubmV4dCgpOyAhcy5kb25lOyBzID0gaS5uZXh0KCkpIHtcbiAgICAgICAgdmFyIGEgPSBzLnZhbHVlO1xuICAgICAgICBpZiAoci5uZXh0KGEpLCByLmNsb3NlZClcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBjYXRjaCAoYykge1xuICAgICAgZSA9IHsgZXJyb3I6IGMgfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcyAmJiAhcy5kb25lICYmIChuID0gaS5yZXR1cm4pICYmIG4uY2FsbChpKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChlKSB0aHJvdyBlLmVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICByLmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gcHQodCkge1xuICByZXR1cm4gbmV3IFQoZnVuY3Rpb24ocikge1xuICAgIG5vKHQsIHIpLmNhdGNoKGZ1bmN0aW9uKGUpIHtcbiAgICAgIHJldHVybiByLmVycm9yKGUpO1xuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHJvKHQpIHtcbiAgcmV0dXJuIHB0KEduKHQpKTtcbn1cbmZ1bmN0aW9uIG5vKHQsIHIpIHtcbiAgdmFyIGUsIG4sIGksIHM7XG4gIHJldHVybiB2bih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24oKSB7XG4gICAgdmFyIGEsIGM7XG4gICAgcmV0dXJuIHN0KHRoaXMsIGZ1bmN0aW9uKGwpIHtcbiAgICAgIHN3aXRjaCAobC5sYWJlbCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgbC50cnlzLnB1c2goWzAsIDUsIDYsIDExXSksIGUgPSBFbih0KSwgbC5sYWJlbCA9IDE7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXR1cm4gWzQsIGUubmV4dCgpXTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGlmIChuID0gbC5zZW50KCksICEhbi5kb25lKSByZXR1cm4gWzMsIDRdO1xuICAgICAgICAgIGlmIChhID0gbi52YWx1ZSwgci5uZXh0KGEpLCByLmNsb3NlZClcbiAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgbC5sYWJlbCA9IDM7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICByZXR1cm4gWzMsIDFdO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIFszLCAxMV07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gYyA9IGwuc2VudCgpLCBpID0geyBlcnJvcjogYyB9LCBbMywgMTFdO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgcmV0dXJuIGwudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSksIG4gJiYgIW4uZG9uZSAmJiAocyA9IGUucmV0dXJuKSA/IFs0LCBzLmNhbGwoZSldIDogWzMsIDhdO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbC5zZW50KCksIGwubGFiZWwgPSA4O1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIFszLCAxMF07XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICBpZiAoaSkgdGhyb3cgaS5lcnJvcjtcbiAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgcmV0dXJuIHIuY29tcGxldGUoKSwgWzJdO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIG9vKHQsIHIsIGUsIG4sIGkpIHtcbiAgbiA9PT0gdm9pZCAwICYmIChuID0gMCksIGkgPT09IHZvaWQgMCAmJiAoaSA9ICExKTtcbiAgdmFyIHMgPSByLnNjaGVkdWxlKGZ1bmN0aW9uKCkge1xuICAgIGUoKSwgaSA/IHQuYWRkKHRoaXMuc2NoZWR1bGUobnVsbCwgbikpIDogdGhpcy51bnN1YnNjcmliZSgpO1xuICB9LCBuKTtcbiAgaWYgKHQuYWRkKHMpLCAhaSlcbiAgICByZXR1cm4gcztcbn1cbmZ1bmN0aW9uIGlvKHQsIHIpIHtcbiAgdmFyIGUgPSB3KHQpID8gdCA6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0O1xuICB9LCBuID0gZnVuY3Rpb24oaSkge1xuICAgIHJldHVybiBpLmVycm9yKGUoKSk7XG4gIH07XG4gIHJldHVybiBuZXcgVChuKTtcbn1cbnZhciBzbyA9IHJlKGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHQodGhpcyksIHRoaXMubmFtZSA9IFwiRW1wdHlFcnJvclwiLCB0aGlzLm1lc3NhZ2UgPSBcIm5vIGVsZW1lbnRzIGluIHNlcXVlbmNlXCI7XG4gIH07XG59KTtcbmZ1bmN0aW9uIGFvKHQsIHIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsIG4pIHtcbiAgICB2YXIgaSA9ICExLCBzO1xuICAgIHQuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgcyA9IGEsIGkgPSAhMDtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogbixcbiAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgaSA/IGUocykgOiBuKG5ldyBzbygpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBjbyh0KSB7XG4gIHJldHVybiB0IGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odCk7XG59XG52YXIgdW8gPSByZShmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbihlKSB7XG4gICAgZSA9PT0gdm9pZCAwICYmIChlID0gbnVsbCksIHQodGhpcyksIHRoaXMubWVzc2FnZSA9IFwiVGltZW91dCBoYXMgb2NjdXJyZWRcIiwgdGhpcy5uYW1lID0gXCJUaW1lb3V0RXJyb3JcIiwgdGhpcy5pbmZvID0gZTtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gbG8odCwgcikge1xuICB2YXIgZSA9IGNvKHQpID8geyBmaXJzdDogdCB9IDogdHlwZW9mIHQgPT0gXCJudW1iZXJcIiA/IHsgZWFjaDogdCB9IDogdCwgbiA9IGUuZmlyc3QsIGkgPSBlLmVhY2gsIHMgPSBlLndpdGgsIGEgPSBzID09PSB2b2lkIDAgPyBmbyA6IHMsIGMgPSBlLnNjaGVkdWxlciwgbCA9IGMgPT09IHZvaWQgMCA/ICRuIDogYywgdSA9IGUubWV0YSwgZCA9IHUgPT09IHZvaWQgMCA/IG51bGwgOiB1O1xuICBpZiAobiA9PSBudWxsICYmIGkgPT0gbnVsbClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gdGltZW91dCBwcm92aWRlZC5cIik7XG4gIHJldHVybiBqbihmdW5jdGlvbihoLCBfKSB7XG4gICAgdmFyIGYsIHAsIHkgPSBudWxsLCBqID0gMCwgWSA9IGZ1bmN0aW9uKG5lKSB7XG4gICAgICBwID0gb28oXywgbCwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZi51bnN1YnNjcmliZSgpLCBXbihhKHtcbiAgICAgICAgICAgIG1ldGE6IGQsXG4gICAgICAgICAgICBsYXN0VmFsdWU6IHksXG4gICAgICAgICAgICBzZWVuOiBqXG4gICAgICAgICAgfSkpLnN1YnNjcmliZShfKTtcbiAgICAgICAgfSBjYXRjaCAoaHQpIHtcbiAgICAgICAgICBfLmVycm9yKGh0KTtcbiAgICAgICAgfVxuICAgICAgfSwgbmUpO1xuICAgIH07XG4gICAgZiA9IGguc3Vic2NyaWJlKE1uKF8sIGZ1bmN0aW9uKG5lKSB7XG4gICAgICBwID09IG51bGwgfHwgcC51bnN1YnNjcmliZSgpLCBqKyssIF8ubmV4dCh5ID0gbmUpLCBpID4gMCAmJiBZKGkpO1xuICAgIH0sIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICAgIHAgIT0gbnVsbCAmJiBwLmNsb3NlZCB8fCBwID09IG51bGwgfHwgcC51bnN1YnNjcmliZSgpLCB5ID0gbnVsbDtcbiAgICB9KSksICFqICYmIFkobiAhPSBudWxsID8gdHlwZW9mIG4gPT0gXCJudW1iZXJcIiA/IG4gOiArbiAtIGwubm93KCkgOiBpKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBmbyh0KSB7XG4gIHRocm93IG5ldyB1byh0KTtcbn1cbmNsYXNzIEcge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldCA9IChyKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJzdWNjZXNzXCIsIGlzU3VjY2VzczogITAsIGxvYWRlZFZhbHVlOiByIH0sIHRoaXMuX3N1YmplY3QubmV4dChyKSwgdGhpcy5fc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH0sIHRoaXMudGhyb3cgPSAociwgZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiZXJyb3JcIiwgaXNTdWNjZXNzOiAhMSwgZXJyb3I6IHIsIGVyck1zZzogZSB9LCB0aGlzLl9zdWJqZWN0LmVycm9yKHIpO1xuICAgIH0sIHRoaXMuZ2V0VmFsdWVJZkxvYWRlZEVsc2UgPSAocikgPT4gdGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiID8gdGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSA6IHIsIHRoaXMuc3Vic2NyaWJlID0gKHIpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgcih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIiAmJiByKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgZSA9IHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChuZXh0KTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIHIodGhpcy5fY3VycmVudCksIGUudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiZXJyb3JcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKGVycm9yKTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIHIodGhpcy5fY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIHRoaXMud2FpdEZvckxvYWQgPSAocikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5fY3VycmVudC5lcnJvcik7XG4gICAgICB0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJpbml0aWFsXCIgJiYgWGUodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCBlID0ge1xuICAgICAgICBmaXJzdDogci50aW1lb3V0U2VjICogMWUzLFxuICAgICAgICB3aXRoOiAoKSA9PiBpbygoKSA9PiBuZXcgRXJyb3Ioci50aW1lb3V0RXJyTXNnKSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gYW8odGhpcy5fc3ViamVjdC5waXBlKGxvKGUpKSk7XG4gICAgfSwgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImluaXRpYWxcIiwgaXNTdWNjZXNzOiAhMSB9LCB0aGlzLl9zdWJqZWN0ID0gbmV3IGZ0KCk7XG4gIH1cbiAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IHBvLCBlcnJfXzogaG8gfSA9IE8oXCJpbml0LWZsb3dzXCIpLCBUZSA9ICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSBuZXcgRygpO1xuICByZXR1cm4ge1xuICAgIHB1Ymxpc2hlcjogZSxcbiAgICBpbml0aWFsaXplOiBhc3luYyAobikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGUuY3VycmVudC5pc1N1Y2Nlc3MpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBmbG93IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuXCIpO1xuICAgICAgICBjb25zdCBpID0gYXdhaXQgcihuKTtcbiAgICAgICAgcG8oYOKclCAke3R9IGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBSZXN1bHQ6YCwgaSksIGUuc2V0KGkpO1xuICAgICAgfSBjYXRjaCAoaSkge1xuICAgICAgICBobyhg8J2ZrSAke3R9IGZsb3cgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiBFcnJvcjpgLCBOKGkpLCBcIkRldGFpbHM6XCIsIGkpLCBlLnRocm93KGksIE4oaSkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn0sIG1vID0gYXN5bmMgKHQsIHIsIGUpID0+IHtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LnZhbHVlcyh0KS5tYXAoKG4pID0+IG4uaW5pdGlhbGl6ZSh7IGNvbnRleHQ6IHIsIGZvcm1DYWxsYmFja3M6IGUgfSkpKTtcbn0sIHlvID0gKCkgPT4gKHtcbiAgLy8g8J+SoSBBZGQgbmV3IGluaXQgZmxvd3MgaGVyZVxuICAvLyBTdHJpcGUgUFJcbiAgc3RyaXBlUFI6IFRlKFwiU3RyaXBlIFBSXCIsIFUuc3RyaXBlUFIuaW5pdCksXG4gIC8vIFN0cmlwZSBMaW5rXG4gIHN0cmlwZUxpbms6IFRlKFwiU3RyaXBlIExpbmtcIiwgVS5zdHJpcGVMaW5rLmluaXQpXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59KSwgeyBlcnJfXzogX28gfSA9IE8oXCJmb3JtLWNhbGxiYWNrc1wiKSwgayA9IHokMS5mdW5jdGlvbigpLm9wdGlvbmFsKCksIGplID0geiQxLm9iamVjdCh7XG4gIG9uRm9jdXM6IGssXG4gIG9uQmx1cjogayxcbiAgb25DaGFuZ2U6IGssXG4gIG9uTG9hZDogayxcbiAgb25Mb2FkRXJyb3I6IGssXG4gIG9uVmFsaWRhdGlvbkVycm9yOiBrLFxuICBvbkNoZWNrb3V0U3RhcnRlZDogayxcbiAgb25DaGVja291dFN1Y2Nlc3M6IGssXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogayxcbiAgb25DaGVja291dEVycm9yOiBrLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDoga1xufSksIFIgPSBjbGFzcyBSIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocikgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gUi5jcmVhdGVFbXB0eUNhbGxiYWNrcygpLCBPYmplY3QuZW50cmllcyhyKS5mb3JFYWNoKChbZSwgbl0pID0+IHtcbiAgICAgICAgY29uc3QgaSA9IEN0KGUsIG4gPz8gUi5OT09QLCBfbyk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1tlXSA9IGk7XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLl9jYWxsYmFja3MgPSBSLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn07XG5SLk5PT1AgPSAoKSA9PiB7XG59LCBSLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzID0gKCkgPT4ge1xuICBjb25zdCByID0ge307XG4gIHJldHVybiBPYmplY3Qua2V5cyhqZS5rZXlvZigpLmVudW0pLmZvckVhY2goKGUpID0+IHtcbiAgICByW2VdID0gUi5OT09QO1xuICB9KSwgcjtcbn0sIFIuZnJvbU9iamVjdCA9IChyKSA9PiB7XG4gIGNvbnN0IGUgPSBuZXcgUigpO1xuICByZXR1cm4gZS5zZXRDYWxsYmFja3MoamUucGFyc2UocikpLCBlO1xufTtcbmxldCBsZSA9IFI7XG5jbGFzcyBnbyB7XG4gIGNvbnN0cnVjdG9yKHIsIGUsIG4sIGkpIHtcbiAgICB0aGlzLmhhbmRsZU1lc3NhZ2UgPSAocykgPT4ge1xuICAgICAgaWYgKCFzLnNvdXJjZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc291cmNlIGZvdW5kXCIpO1xuICAgICAgaWYgKE1lKHMub3JpZ2luKSAhPT0gTWUodGhpcy5iYXNlVXJsKSB8fCB0eXBlb2Ygcy5kYXRhID09IFwib2JqZWN0XCIgJiYgcy5kYXRhLnBlbnBhbClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY29uc3QgYSA9IHVyKEpTT04ucGFyc2Uocy5kYXRhKSk7XG4gICAgICBpZiAoIXRoaXMudmFsaWRhdGVFdmVudChhKSkgcmV0dXJuO1xuICAgICAgY29uc3QgeyBlbGVtZW50SWQ6IGwsIHBheWxvYWQ6IHUgfSA9IGEsIGQgPSB1LnR5cGU7XG4gICAgICBzd2l0Y2ggKGQpIHtcbiAgICAgICAgY2FzZSBcIkxBWU9VVFwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Muc2V0Rm9ybUhlaWdodCh1LmhlaWdodCA/IGAke3UuaGVpZ2h0fXB4YCA6IFwiMTAwJVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkZPQ1VTXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkZvY3VzKGwsIHUuZWxlbWVudFR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQkxVUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25CbHVyKGwsIHUuZWxlbWVudFR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQ0hBTkdFXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoYW5nZShsLCB1LmVsZW1lbnRUeXBlLCB1LmVycm9ycyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FERURcIjpcbiAgICAgICAgICB0aGlzLmV2ZW50VGFyZ2V0c1tsXSA9IHMuc291cmNlLCB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZGVkKHUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BRF9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkRXJyb3IodS5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlZBTElEQVRJT05fRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKHUuZWxlbWVudFR5cGUsIHUuZXJyb3JzLCBsKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gVW5oYW5kbGVkIGV2ZW50IHR5cGU6XCIsIGQpO1xuICAgICAgfVxuICAgIH0sIHRoaXMudmFsaWRhdGVFdmVudCA9IChzKSA9PiBzLmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQgfHwgIXMuZWxlbWVudElkID8gKGNvbnNvbGUubG9nKFwiW09KU10gZm9ybUlkXCIsIHRoaXMuZm9ybUlkLCBzLmZvcm1JZCksIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyB1bmtub3duIGV2ZW50OlwiLCBzKSwgITEpIDogdGhpcy5ub25jZXMuaGFzKHMubm9uY2UpID8gKGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyBkdXBsaWNhdGUgZXZlbnQ6XCIsIHMpLCAhMSkgOiAodGhpcy5ub25jZXMuYWRkKHMubm9uY2UpLCAhMCksIHRoaXMuZXZlbnRUYXJnZXRzID0ge30sIHRoaXMubm9uY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgdGhpcy5mb3JtSWQgPSByLCB0aGlzLmJhc2VVcmwgPSBlLCB0aGlzLmZvcm1DYWxsYmFja3MgPSBuLCB0aGlzLmludGVybmFsQ2FsbGJhY2tzID0gaTtcbiAgfVxufVxuY29uc3QgTWUgPSAodCkgPT4gbmV3IFVSTCh0KS5vcmlnaW47XG5hc3luYyBmdW5jdGlvbiBibyh0LCByKSB7XG4gIGNvbnN0IG4gPSBhd2FpdCBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lOiB0LFxuICAgIGRlYnVnOiAhMSxcbiAgICBjaGlsZE9yaWdpbjogclxuICB9KS5wcm9taXNlLCBpID0gYXdhaXQgbHIobik7XG4gIGlmICghZHIobiwgaSkpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiR290IGludmFsaWQgQ0RFIGNvbm5lY3Rpb24gb2JqZWN0XCIpO1xuICByZXR1cm4gbjtcbn1cbmNsYXNzIHZvIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIH1cbiAgYWRkQ29ubmVjdGlvbihyLCBlKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucy5zZXQociwgZSk7XG4gIH1cbiAgZ2V0Q29ubmVjdGlvbigpIHtcbiAgICBjb25zdCByID0gdGhpcy5jb25uZWN0aW9ucy52YWx1ZXMoKS5uZXh0KCkudmFsdWU7XG4gICAgaWYgKCFyKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBub3QgZm91bmRcIik7XG4gICAgcmV0dXJuIHI7XG4gIH1cbiAgZ2V0QWxsQ29ubmVjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbnM7XG4gIH1cbn1cbmNvbnN0IHdvID0gKHQsIHIsIGUpID0+IHtcbiAgY29uc3QgeyBzdHJpcGVQUjogbiB9ID0gdDtcbiAgbi5wdWJsaXNoZXIuc3Vic2NyaWJlKChpKSA9PiB7XG4gICAgaWYgKGkuaXNTdWNjZXNzKSB7XG4gICAgICBjb25zdCBzID0gaS5sb2FkZWRWYWx1ZSwgYSA9IHMuaXNBdmFpbGFibGUgJiYgcy5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXksIGMgPSBzLmlzQXZhaWxhYmxlICYmIHMuYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheSwgbCA9IHtcbiAgICAgICAgYXBwbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogYSxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1KSA9PiB7XG4gICAgICAgICAgICBhICYmIExlKFwiYXBwbGVfcGF5XCIsIHMsIHIsIGUsIHUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ29vZ2xlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGMsXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodSkgPT4ge1xuICAgICAgICAgICAgYyAmJiBMZShcImdvb2dsZV9wYXlcIiwgcywgciwgZSwgdSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZS5nZXQub25QYXltZW50UmVxdWVzdExvYWQobCk7XG4gICAgfVxuICB9KTtcbn0sIExlID0gKHQsIHIsIGUsIG4sIGkpID0+IFUuc3RyaXBlUFIucnVuKHtcbiAgY29udGV4dDogZSxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBpdChlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHQpLFxuICBub25DZGVGb3JtSW5wdXRzOiBkZShlLmZvcm1EaXYpLFxuICBmb3JtQ2FsbGJhY2tzOiBuLFxuICBjdXN0b21QYXJhbXM6IHsgcHJvdmlkZXI6IHQsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkub3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9LFxuICBpbml0UmVzdWx0OiByXG59KSwgRGUgPSBcIlRoZSBzZWN1cmUgZm9ybSBmYWlsZWQgdG8gbG9hZCBwcm9wZXJseS4gUGxlYXNlIGNoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbiwgb3IgdHJ5IGFnYWluIGxhdGVyLlwiLCB7IGxvZ19fOiBNLCBlcnJfXzogc2UgfSA9IE8oXCJvcC1mb3JtXCIpLCBBID0gY2xhc3MgQSB7XG4gIGNvbnN0cnVjdG9yKHIpIHtcbiAgICB0aGlzLmNkZUxvYWRFdmVudCA9IG5ldyBHKCksIHRoaXMuYW55Q2RlQ29ubiA9IG5ldyBHKCksIHRoaXMuY29udGV4dCA9IG5ldyBHKCksIHRoaXMuaW5pdEZsb3dzID0geW8oKSwgdGhpcy5zdGFydEZvcm1Jbml0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgTShcIkluaXRpYWxpemluZyBPcGVuUGF5IGZvcm06XCIpLCBNKFwi4pScIFdhaXRpbmcgZm9yIENERSBsb2FkIGV2ZW50Li4uXCIpO1xuICAgICAgICBjb25zdCBlID0gYXdhaXQgdGhpcy5jZGVMb2FkRXZlbnQud2FpdEZvckxvYWQoe1xuICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBEZVxuICAgICAgICB9KTtcbiAgICAgICAgTShcIuKUnCBDREUgbG9hZCBldmVudCByZWNlaXZlZFwiKSwgTShcIuKUnCBXYWl0aW5nIGZvciBDREUgY29ubmVjdGlvbi4uLlwiKTtcbiAgICAgICAgY29uc3QgbiA9IGF3YWl0IHRoaXMuYW55Q2RlQ29ubi53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IERlXG4gICAgICAgIH0pO1xuICAgICAgICBNKFwi4pScIENERSBjb25uZWN0aW9uIHJlY2VpdmVkXCIpLCBNKFwi4pScIENyZWF0aW5nIE9KUyBjb250ZXh0LCBzZXR0aW5nIHVwIGhhbmRsZXJzLi4uXCIpO1xuICAgICAgICBjb25zdCBpID0gQS5idWlsZE9qc0Zsb3dDb250ZXh0KFxuICAgICAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgICAgIGUsXG4gICAgICAgICAgbixcbiAgICAgICAgICB0aGlzLmdldEZvcm1EaXYoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNvbnRleHQuc2V0KGkpLCB3byh0aGlzLmluaXRGbG93cywgaSwgdGhpcy5mb3JtQ2FsbGJhY2tzKSwgTShcIuKUnCBTdGFydGluZyBPSlMgaW5pdCBmbG93cy4uLlwiKSwgYXdhaXQgbW8odGhpcy5pbml0Rmxvd3MsIGksIHRoaXMuZm9ybUNhbGxiYWNrcyksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkKGUudG90YWxBbW91bnRBdG9tcywgZS5jdXJyZW5jeSksIE0oXCLilbAgRG9uZSBpbml0aWFsaXppbmcgT0pTIGZsb3dzLlwiKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc3QgbiA9IE4oZSk7XG4gICAgICAgIHNlKFwi4pWwIEVycm9yIGluaXRpYWxpemluZyBPUCBmb3JtOlwiLCBuKSwgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWRFcnJvcihuKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnNldEZvcm1IZWlnaHQgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5mb3JtUHJvcGVydGllcy5oZWlnaHQgPSBlLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyAmJiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKS5mb3JFYWNoKChuKSA9PiB7XG4gICAgICAgIG4gJiYgKG4ubm9kZS5zdHlsZS5oZWlnaHQgPSBlKTtcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMub25DZGVMb2FkZWQgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MgfHwgdGhpcy5jZGVMb2FkRXZlbnQuc2V0KGUpO1xuICAgIH0sIHRoaXMub25DZGVMb2FkRXJyb3IgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MgfHwgdGhpcy5jZGVMb2FkRXZlbnQudGhyb3cobmV3IEVycm9yKGUpLCBlKTtcbiAgICB9LCB0aGlzLmNyZWF0ZUVsZW1lbnQgPSAoZSwgbiA9IHt9KSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGZvcm0gbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgY29uc3QgaSA9IGt0LnBhcnNlKGUpLCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKSwgYSA9IHRoaXMuYnVpbGRRdWVyeVN0cmluZyhuKTtcbiAgICAgIHMubmFtZSA9IGAke2l9LWVsZW1lbnRgO1xuICAgICAgY29uc3QgYyA9IG5ldyBVUkwoYC9hcHAvdjEvJHtzLm5hbWV9L2AsIHRoaXMuY29uZmlnLmJhc2VVcmwpO1xuICAgICAgcmV0dXJuIGMuc2VhcmNoID0gYS50b1N0cmluZygpLCBzLnNyYyA9IGMuaHJlZiwgcy5zdHlsZS5ib3JkZXIgPSBcIm5vbmVcIiwgcy5zdHlsZS53aWR0aCA9IFwiMTAwJVwiLCB0aGlzLnJlZ2lzdGVySWZyYW1lKGksIHMpO1xuICAgIH0sIHRoaXMucmVnaXN0ZXJJZnJhbWUgPSAoZSwgbikgPT4ge1xuICAgICAgY29uc3QgaSA9IHtcbiAgICAgICAgdHlwZTogZSxcbiAgICAgICAgbm9kZTogbixcbiAgICAgICAgbW91bnQ6IChzKSA9PiB7XG4gICAgICAgICAgdmFyIGE7XG4gICAgICAgICAgcmV0dXJuIChhID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGEuYXBwZW5kQ2hpbGQobik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0VG9FbGVtZW50KHsgdHlwZTogaS50eXBlLCBub2RlOiBpLm5vZGUgfSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzIHx8ICh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IHtcbiAgICAgICAgW0YuQ0FSRF06IHZvaWQgMCxcbiAgICAgICAgW0YuQ0FSRF9OVU1CRVJdOiB2b2lkIDAsXG4gICAgICAgIFtGLkNBUkRfRVhQSVJZXTogdm9pZCAwLFxuICAgICAgICBbRi5DQVJEX0NWQ106IHZvaWQgMFxuICAgICAgfSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzW2VdID0gaSwgaTtcbiAgICB9LCB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcgPSAoZSkgPT4ge1xuICAgICAgY29uc3QgbiA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgIHJldHVybiBuLmFwcGVuZChcInJlZmVyZXJcIiwgdGhpcy5yZWZlcnJlciksIG4uYXBwZW5kKFwiZm9ybUlkXCIsIHRoaXMuZm9ybUlkKSwgZS5zdHlsZXMgJiYgbi5hcHBlbmQoXCJzdHlsZXNcIiwgY3IoZS5zdHlsZXMpKSwgbi5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuKSwgbjtcbiAgICB9LCB0aGlzLmNvbm5lY3RUb0VsZW1lbnQgPSAoZSkgPT4ge1xuICAgICAgYm8oZS5ub2RlKS50aGVuKChuKSA9PiB7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuYWRkQ29ubmVjdGlvbihlLnR5cGUsIG4pLCB0aGlzLmFueUNkZUNvbm4uY3VycmVudC5pc1N1Y2Nlc3MgfHwgdGhpcy5hbnlDZGVDb25uLnNldChuKTtcbiAgICAgIH0pLmNhdGNoKChuKSA9PiBzZShcIltGT1JNXSBFcnJvciBjb25uZWN0aW5nIHRvIENERSBpZnJhbWVcIiwgbikpO1xuICAgIH0sIHRoaXMuZ2V0Rm9ybURpdiA9ICgpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5LCB0aGlzLnN1Ym1pdENhcmQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBlID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgaWYgKCFlKSB7XG4gICAgICAgIHNlKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgVS5jb21tb25DQy5ydW4oe1xuICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGl0KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJjcmVkaXRfY2FyZFwiKSxcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogZGUoZS5mb3JtRGl2KSxcbiAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICBjdXJyZW50Q2RlQ29ubmVjdGlvbnM6IHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZ2V0QWxsQ29ubmVjdGlvbnMoKVxuICAgICAgICB9LFxuICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgLy8gVGhpcyBmbG93IHJlcXVpcmVzIG5vIGluaXRpYWxpemF0aW9uXG4gICAgICB9KTtcbiAgICB9LCB0aGlzLnN1Ym1pdCA9IHRoaXMuc3VibWl0Q2FyZCwgdGhpcy5kZXN0cm95ID0gKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBlIG9mIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPz8ge30pKVxuICAgICAgICBlICYmIGUubm9kZS5yZW1vdmUoKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKTtcbiAgICB9LCBBLmFzc2lnbkFzU2luZ2xldG9uKHRoaXMpLCB0aGlzLm9qc1ZlcnNpb24gPSBcIjAuMS4xN1wiLCB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uID0gXCJsb2NhbF9idWlsZFwiLCB0aGlzLmJhc2VVcmwgPSByLmJhc2VVcmwgPz8gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCB0aGlzLmNvbmZpZyA9IHsgLi4uciwgYmFzZVVybDogdGhpcy5iYXNlVXJsIH0sIHRoaXMuZm9ybUNhbGxiYWNrcyA9IGxlLmZyb21PYmplY3QociksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbCwgdGhpcy5mb3JtSWQgPSBgb3Bqcy1mb3JtLSR7d2luZG93LmNyeXB0by5yYW5kb21VVUlEKCl9YCwgdGhpcy5yZWZlcnJlciA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sIHRoaXMuZm9ybVRhcmdldCA9IHIuZm9ybVRhcmdldCA/PyBcImJvZHlcIiwgdGhpcy5mb3JtUHJvcGVydGllcyA9IHsgaGVpZ2h0OiBcIjFweFwiIH0sIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIgPSBuZXcgdm8oKSwgdGhpcy5ldmVudEhhbmRsZXIgPSBuZXcgZ28odGhpcy5mb3JtSWQsIHRoaXMuYmFzZVVybCwgdGhpcy5mb3JtQ2FsbGJhY2tzLCB7XG4gICAgICBzZXRGb3JtSGVpZ2h0OiB0aGlzLnNldEZvcm1IZWlnaHQsXG4gICAgICBvbkNkZUxvYWRlZDogdGhpcy5vbkNkZUxvYWRlZCxcbiAgICAgIG9uQ2RlTG9hZEVycm9yOiB0aGlzLm9uQ2RlTG9hZEVycm9yXG4gICAgfSksIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKSwgdGhpcy5zdGFydEZvcm1Jbml0KCk7XG4gIH1cbiAgZ2V0IGNoZWNrb3V0U2VjdXJlVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW47XG4gIH1cbn07XG5BLm9qc0Zsb3dzID0gVSwgQS5hc3NpZ25Bc1NpbmdsZXRvbiA9IChyKSA9PiB7XG4gIGlmIChBLmdldEluc3RhbmNlKCkpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBpbnN0YW5jZSBhbHJlYWR5IGV4aXN0cy4gT25seSBvbmUgaW5zdGFuY2UgaXMgYWxsb3dlZC5cIik7XG4gIHdpbmRvdy5vanMgPSByO1xufSwgQS5nZXRJbnN0YW5jZSA9ICgpID0+IHdpbmRvdy5vanMgPz8gbnVsbCwgQS5idWlsZE9qc0Zsb3dDb250ZXh0ID0gKHIsIGUsIG4sIGkpID0+ICh7XG4gIGJhc2VVcmw6IG5ldyBVUkwoci5iYXNlVXJsID8/IG10KS5vcmlnaW4sXG4gIGZvcm1EaXY6IGksXG4gIGVsZW1lbnRzU2Vzc2lvbklkOiBlLnNlc3Npb25JZCxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogZS5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICBhbnlDZGVDb25uZWN0aW9uOiBuLFxuICBjdXN0b21Jbml0UGFyYW1zOiByLmN1c3RvbUluaXRQYXJhbXMgPz8ge31cbn0pO1xubGV0IEZlID0gQTtcblxuY29uc3QgdXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IGZvcm1DYWxsYmFja3NSZWYgPSB1c2VSZWYocHJvcHMpO1xuICBjb25zdCBjYiA9IGZvcm1DYWxsYmFja3NSZWYuY3VycmVudDtcbiAgY2Iub25Mb2FkID0gdXNlTWVtbygoKSA9PiBwcm9wcy5vbkxvYWQsIFtwcm9wcy5vbkxvYWRdKTtcbiAgY2Iub25Mb2FkRXJyb3IgPSB1c2VNZW1vKCgpID0+IHByb3BzLm9uTG9hZEVycm9yLCBbcHJvcHMub25Mb2FkRXJyb3JdKTtcbiAgY2Iub25WYWxpZGF0aW9uRXJyb3IgPSB1c2VNZW1vKCgpID0+IHByb3BzLm9uVmFsaWRhdGlvbkVycm9yLCBbcHJvcHMub25WYWxpZGF0aW9uRXJyb3JdKTtcbiAgY2Iub25Gb2N1cyA9IHVzZU1lbW8oKCkgPT4gcHJvcHMub25Gb2N1cywgW3Byb3BzLm9uRm9jdXNdKTtcbiAgY2Iub25CbHVyID0gdXNlTWVtbygoKSA9PiBwcm9wcy5vbkJsdXIsIFtwcm9wcy5vbkJsdXJdKTtcbiAgY2Iub25DaGFuZ2UgPSB1c2VNZW1vKCgpID0+IHByb3BzLm9uQ2hhbmdlLCBbcHJvcHMub25DaGFuZ2VdKTtcbiAgY2Iub25DaGVja291dFN0YXJ0ZWQgPSB1c2VNZW1vKCgpID0+IHByb3BzLm9uQ2hlY2tvdXRTdGFydGVkLCBbcHJvcHMub25DaGVja291dFN0YXJ0ZWRdKTtcbiAgY2Iub25DaGVja291dFN1Y2Nlc3MgPSB1c2VNZW1vKCgpID0+IHByb3BzLm9uQ2hlY2tvdXRTdWNjZXNzLCBbcHJvcHMub25DaGVja291dFN1Y2Nlc3NdKTtcbiAgY2Iub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzID0gdXNlTWVtbyhcbiAgICAoKSA9PiBwcm9wcy5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MsXG4gICAgW3Byb3BzLm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2Vzc11cbiAgKTtcbiAgY2Iub25DaGVja291dEVycm9yID0gdXNlTWVtbygoKSA9PiBwcm9wcy5vbkNoZWNrb3V0RXJyb3IsIFtwcm9wcy5vbkNoZWNrb3V0RXJyb3JdKTtcbiAgY2Iub25QYXltZW50UmVxdWVzdExvYWQgPSB1c2VNZW1vKCgpID0+IHByb3BzLm9uUGF5bWVudFJlcXVlc3RMb2FkLCBbcHJvcHMub25QYXltZW50UmVxdWVzdExvYWRdKTtcbiAgcmV0dXJuIGZvcm1DYWxsYmFja3NSZWYuY3VycmVudDtcbn07XG5cbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHokMS5vYmplY3Qoe1xuICBjb2RlOiB6JDEuc3RyaW5nKCksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgcGF0aDogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLmFycmF5KFpvZEZpZWxkRXJyb3IpO1xuY29uc3QgbWFrZUNhbGxiYWNrU2FmZSA9IChjYWxsYmFja05hbWUsIGZuLCBlcnJvckxvZ2dlcikgPT4ge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJvckxvZ2dlcihgW2Zvcm1dIEVycm9yIHJ1bm5pbmcgY2FsbGJhY2sgKCR7Y2FsbGJhY2tOYW1lfSk6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gIH07XG59O1xuXG5jb25zdCBSZXF1aXJlZFN0cmluZyA9IHokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG5jb25zdCBPcHRpb25hbFN0cmluZyA9IHokMS5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4geiQxLm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xudmFyIEZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKEZpZWxkTmFtZTIpID0+IHtcbiAgRmllbGROYW1lMltcIkZJUlNUX05BTUVcIl0gPSBcImZpcnN0TmFtZVwiO1xuICBGaWVsZE5hbWUyW1wiTEFTVF9OQU1FXCJdID0gXCJsYXN0TmFtZVwiO1xuICBGaWVsZE5hbWUyW1wiRU1BSUxcIl0gPSBcImVtYWlsXCI7XG4gIEZpZWxkTmFtZTJbXCJaSVBfQ09ERVwiXSA9IFwiemlwQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiQ0lUWVwiXSA9IFwiY2l0eVwiO1xuICBGaWVsZE5hbWUyW1wiU1RBVEVcIl0gPSBcInN0YXRlXCI7XG4gIEZpZWxkTmFtZTJbXCJDT1VOVFJZXCJdID0gXCJjb3VudHJ5XCI7XG4gIEZpZWxkTmFtZTJbXCJBRERSRVNTXCJdID0gXCJhZGRyZXNzXCI7XG4gIEZpZWxkTmFtZTJbXCJQSE9ORVwiXSA9IFwicGhvbmVcIjtcbiAgRmllbGROYW1lMltcIlBST01PVElPTl9DT0RFXCJdID0gXCJwcm9tb3Rpb25Db2RlXCI7XG4gIHJldHVybiBGaWVsZE5hbWUyO1xufSkoRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IEZpZWxkTmFtZUVudW0gPSB6JDEubmF0aXZlRW51bShGaWVsZE5hbWUpO1xudmFyIFByaXZhdGVGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChQcml2YXRlRmllbGROYW1lMikgPT4ge1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkTnVtYmVyXCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmRFeHBpcnlcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZEN2Y1wiO1xuICByZXR1cm4gUHJpdmF0ZUZpZWxkTmFtZTI7XG59KShQcml2YXRlRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IFByaXZhdGVGaWVsZE5hbWVFbnVtID0geiQxLm5hdGl2ZUVudW0oUHJpdmF0ZUZpZWxkTmFtZSk7XG5jb25zdCBBbGxGaWVsZE5hbWVzID0geiQxLnVuaW9uKFtGaWVsZE5hbWVFbnVtLCBQcml2YXRlRmllbGROYW1lRW51bV0pO1xudmFyIEVsZW1lbnRUeXBlRW51bSA9IC8qIEBfX1BVUkVfXyAqLyAoKEVsZW1lbnRUeXBlRW51bTIpID0+IHtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRcIl0gPSBcImNhcmRcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkLW51bWJlclwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmQtZXhwaXJ5XCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZC1jdmNcIjtcbiAgcmV0dXJuIEVsZW1lbnRUeXBlRW51bTI7XG59KShFbGVtZW50VHlwZUVudW0gfHwge30pO1xueiQxLm5hdGl2ZUVudW0oRWxlbWVudFR5cGVFbnVtKTtcbmNvbnN0IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgUGF5bWVudE1ldGhvZE1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2FyZE51bWJlcjogT3B0aW9uYWxTdHJpbmcsXG4gIGV4cGlyeTogT3B0aW9uYWxTdHJpbmcsXG4gIGN2YzogT3B0aW9uYWxTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGNvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFdlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIG1hcmdpbjogT3B0aW9uYWxTdHJpbmcsXG4gIHBhZGRpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgRXZlbnRUeXBlID0geiQxLmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSk7XG5jb25zdCBHZW5lcmljRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3QoeyB0eXBlOiBHZW5lcmljRXZlbnRUeXBlIH0pO1xuY29uc3QgSW5wdXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pO1xuY29uc3QgSW5wdXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogSW5wdXRFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBQcml2YXRlRmllbGROYW1lRW51bSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pO1xuY29uc3QgRXJyb3JFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogRXJyb3JFdmVudFR5cGUsXG4gIG1lc3NhZ2U6IFJlcXVpcmVkU3RyaW5nLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IEFsbEZpZWxkTmFtZXMsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgTGF5b3V0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgTG9hZGVkRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IE9wdGlvbmFsU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6JDEuYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEpXG59KTtcbmNvbnN0IFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHokMS5vcHRpb25hbCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFJlcXVpcmVkRm9ybUZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFBSRm9ybUZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBTdWJtaXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKTtcbmNvbnN0IFN1Ym1pdEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBTdWJtaXRFdmVudFR5cGUsXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHokMS5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBFdmVudFBheWxvYWQgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIEdlbmVyaWNFdmVudFBheWxvYWQsXG4gIElucHV0RXZlbnRQYXlsb2FkLFxuICBFcnJvckV2ZW50UGF5bG9hZCxcbiAgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkLFxuICBMYXlvdXRFdmVudFBheWxvYWQsXG4gIExvYWRlZEV2ZW50UGF5bG9hZCxcbiAgU3VibWl0RXZlbnRQYXlsb2FkLFxuICBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkLFxuICBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZFxuXSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIGFtb3VudEF0b206IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogeiQxLmFycmF5KFBheW1lbnRNZXRob2RNaW5pbWFsKVxufSk7XG5jb25zdCBGaWVsZFZhbGlkYXRpb25FcnJvciA9IHokMS5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogeiQxLnN0cmluZygpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBzdWNjZXNzOiB6JDEubGl0ZXJhbChmYWxzZSksXG4gIGVycm9yX3R5cGU6IHokMS5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoRmllbGRWYWxpZGF0aW9uRXJyb3IpXG59KTtcbnokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgeiQxLm9iamVjdCh7IHN1Y2Nlc3M6IHokMS5saXRlcmFsKHRydWUpIH0pLFxuICBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlXG5dKTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6JDEuc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIGNvbnNlbnRfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG59KTtcblxuY29uc3QgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcgPSAoc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdHlsZXMgPSBKU09OLnN0cmluZ2lmeShzdHlsZXMpO1xuICByZXR1cm4gc2VyaWFsaXplZFN0eWxlcztcbn07XG5cbmNvbnN0IG51bGxPclVuZGVmT3IgPSAoelR5cGUpID0+IHokMS5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG56JDEub2JqZWN0KHtcbiAgY2RlX3Jlc3BvbnNlX3R5cGU6IHokMS5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56JDEuZW51bShbXCJ1c2RcIiwgXCJicmxcIl0pO1xuY29uc3QgQ291cG9uTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogeiQxLnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKVxufSk7XG5jb25zdCBMaW5lSXRlbSA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpLmludCgpKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBCcmFuZFNldHRpbmdzID0geiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSk7XG5jb25zdCBCcmFuZCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIHNldHRpbmdzOiBudWxsT3JVbmRlZk9yKEJyYW5kU2V0dGluZ3MpXG59KTtcbmNvbnN0IENoZWNrb3V0UGF5bWVudE1ldGhvZCA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGlkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkuaW50KCkpLFxuICBzdWJzY3JpcHRpb25faXRlbXM6IHokMS5hcnJheShTdWJzY3JpcHRpb25JdGVtTWluaW1hbCksXG4gIHRyaWFsX3N0YXJ0OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpXG59KTtcbmNvbnN0IEludm9pY2VMaW5lSXRlbU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IERpc2NvdW50TWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjb3Vwb246IENvdXBvbk1pbmltYWxcbn0pO1xuY29uc3QgSW52b2ljZU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6JDEuYXJyYXkoRGlzY291bnRNaW5pbWFsKSxcbiAgaG9zdGVkX2ludm9pY2VfdXJsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmVzOiB6JDEuYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsKVxufSk7XG5jb25zdCBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY3JlYXRlZDogeiQxLmFycmF5KFN1YnNjcmlwdGlvbk1pbmltYWwpLFxuICBpbnZvaWNlczogeiQxLmFycmF5KEludm9pY2VNaW5pbWFsKVxufSk7XG5jb25zdCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBwcmV2aWV3OiBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogbnVsbE9yVW5kZWZPcihDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwpLFxuICBjb3Vwb25zOiB6JDEuYXJyYXkoQ291cG9uTWluaW1hbClcbn0pO1xuY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwib3BlblwiKSxcbiAgdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KExpbmVJdGVtKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IEJyYW5kLFxuICBzdWJzX3ByZXZpZXc6IG51bGxPclVuZGVmT3IoUHJldmlld0NoZWNrb3V0UmVzcG9uc2UpLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHokMS5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QpXG59KTtcbmNvbnN0IFBheW1lbnRGb3JtUHJlZmlsbCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogeiQxLm51bGxhYmxlKHokMS51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpLFxuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEuZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogeiQxLnN0cmluZygpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKVxuXSk7XG5jb25zdCBDb21wbGV0ZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pO1xuY29uc3QgRXhwaXJlZEZvcm1QcmVmaWxsID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnokMS51bmlvbihbUGF5bWVudEZvcm1QcmVmaWxsLCBDb21wbGV0ZWRGb3JtUHJlZmlsbCwgRXhwaXJlZEZvcm1QcmVmaWxsXSk7XG56JDEub2JqZWN0KHtcbiAgbG9nbzogeiQxLnN0cmluZygpLFxuICBpY29uOiB6JDEuc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHokMS5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogeiQxLmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6JDEuc3RyaW5nKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShMaW5lSXRlbSksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yKTtcbnokMS5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleGlzdGluZ19jY19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2Rcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG59KTtcbnokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNjX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLnJlY29yZCh6JDEuYW55KCkpO1xuXG5mdW5jdGlvbiBmaXhQcm90byh0YXJnZXQsIHByb3RvdHlwZSkge1xuICB2YXIgc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIHNldFByb3RvdHlwZU9mID8gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90b3R5cGUpIDogdGFyZ2V0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTtcbn1cbmZ1bmN0aW9uIGZpeFN0YWNrKHRhcmdldCwgZm4pIHtcbiAgaWYgKGZuID09PSB2b2lkIDApIHtcbiAgICBmbiA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIHZhciBjYXB0dXJlU3RhY2tUcmFjZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuICBjYXB0dXJlU3RhY2tUcmFjZSAmJiBjYXB0dXJlU3RhY2tUcmFjZSh0YXJnZXQsIGZuKTtcbn1cblxudmFyIF9fZXh0ZW5kcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZC5fX3Byb3RvX18gPSBiO1xuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcblxuICAgIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuXG4gICAgZnVuY3Rpb24gX18oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgICB9XG5cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gIH07XG59KCk7XG5cbihmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyhDdXN0b21FcnJvciwgX3N1cGVyKTtcblxuICBmdW5jdGlvbiBDdXN0b21FcnJvcihtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgdmFyIF9uZXdUYXJnZXQgPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbWVzc2FnZSwgb3B0aW9ucykgfHwgdGhpcztcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ25hbWUnLCB7XG4gICAgICB2YWx1ZTogX25ld1RhcmdldC5uYW1lLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBmaXhQcm90byhfdGhpcywgX25ld1RhcmdldC5wcm90b3R5cGUpO1xuICAgIGZpeFN0YWNrKF90aGlzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICByZXR1cm4gQ3VzdG9tRXJyb3I7XG59KShFcnJvcik7XG5cbmNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICBjb25zdCBsb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ubG9nKGAke0IuZ3JlZW4uYm9sZChcIm9qcy9cIil9JHtCLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgY29uc3QgZXJyID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmVycm9yKGAke0IucmVkLmJvbGQoXCJvanMvXCIpfSR7Qi5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nLFxuICAgIGVycixcbiAgICBsb2dfXzogbG9nLFxuICAgIGVycl9fOiBlcnJcbiAgfTtcbn07XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS51bmlvbihbeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG5cbmNvbnN0IFBSX0xPQURJTkcgPSB7XG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgc3RhcnRGbG93IHRyaWdnZXJlZCB3aGlsZSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbm90IHJlYWR5LiBcbiAgICAgIFlvdSBjYW4gY2hlY2sgdGhlIFwiLmlzTG9hZGluZ1wiIHBhcmFtIHRvIGtub3cgd2hlbiBhIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBsb2FkaW5nLCBcbiAgICAgIGFuZCBcIi5pc0F2YWlsYWJsZVwiIHRvIGtub3cgaWYgYSBwYXltZW50IHJlcXVlc3QgaXMgYXZhaWxhYmxlLmBcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImZvcm0tY2FsbGJhY2tzXCIpO1xuY29uc3QgT3B0aW9uYWxGbiA9IHokMS5mdW5jdGlvbigpLm9wdGlvbmFsKCk7XG5jb25zdCBab2RGb3JtQ2FsbGJhY2tzID0geiQxLm9iamVjdCh7XG4gIG9uRm9jdXM6IE9wdGlvbmFsRm4sXG4gIG9uQmx1cjogT3B0aW9uYWxGbixcbiAgb25DaGFuZ2U6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZDogT3B0aW9uYWxGbixcbiAgb25Mb2FkRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uVmFsaWRhdGlvbkVycm9yOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3RhcnRlZDogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25DaGVja291dEVycm9yOiBPcHRpb25hbEZuLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDogT3B0aW9uYWxGblxufSk7XG5jbGFzcyBGb3JtQ2FsbGJhY2tzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLyoqXG4gICAgICogU2V0cyBBTEwgZm9ybSBjYWxsYmFja3MuIE5vdGUgdGhhdCBhbGwgb2xkIGNhbGxiYWNrcyBhcmUgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICB0aGlzLnNldENhbGxiYWNrcyA9IChyYXdDYWxsYmFja3MpID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJhd0NhbGxiYWNrcykuZm9yRWFjaCgoW2tleSwgcmF3Q2FsbGJhY2tdKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhZmVDYWxsYmFjayA9IG1ha2VDYWxsYmFja1NhZmUoa2V5LCByYXdDYWxsYmFjayA/PyBGb3JtQ2FsbGJhY2tzLk5PT1AsIGVycl9fKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2tleV0gPSBzYWZlQ2FsbGJhY2s7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuTk9PUCA9ICgpID0+IHtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHggPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKFpvZEZvcm1DYWxsYmFja3Mua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgeFtrZXldID0gRm9ybUNhbGxiYWNrcy5OT09QO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5mcm9tT2JqZWN0ID0gKG9iaikgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRm9ybUNhbGxiYWNrcygpO1xuICAgICAgaW5zdGFuY2Uuc2V0Q2FsbGJhY2tzKFpvZEZvcm1DYWxsYmFja3MucGFyc2Uob2JqKSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufVxuXG5jb25zdCB1c2VQYXltZW50UmVxdWVzdHMgPSAob3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZCkgPT4ge1xuICBjb25zdCBbcGF5bWVudFJlcXVlc3RzLCBzZXRQYXltZW50UmVxdWVzdHNdID0gdXNlU3RhdGUoe1xuICAgIGFwcGxlX3BheTogUFJfTE9BRElORyxcbiAgICBnb29nbGVfcGF5OiBQUl9MT0FESU5HXG4gIH0pO1xuICBjb25zdCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCA9IHVzZUNhbGxiYWNrKFxuICAgIChwYXltZW50UmVxdWVzdHMyKSA9PiB7XG4gICAgICBzZXRQYXltZW50UmVxdWVzdHMocGF5bWVudFJlcXVlc3RzMik7XG4gICAgICBvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkPy4ocGF5bWVudFJlcXVlc3RzMik7XG4gICAgfSxcbiAgICBbb3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZF1cbiAgKTtcbiAgcmV0dXJuIHsgcGF5bWVudFJlcXVlc3RzLCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCB9O1xufTtcblxuY29uc3QgRk9STV9UQVJHRVQgPSBcIm9wX29qc19mb3JtXCI7XG5jb25zdCBFbGVtZW50c0Zvcm0gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgW29wRm9ybSwgc2V0T3BGb3JtXSA9IHVzZVN0YXRlKCk7XG4gIGNvbnN0IFtlbGVtZW50c0NvbnRleHRWYWx1ZSwgc2V0RWxlbWVudHNDb250ZXh0VmFsdWVdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IHsgcGF5bWVudFJlcXVlc3RzLCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCB9ID0gdXNlUGF5bWVudFJlcXVlc3RzKHByb3BzLm9uUGF5bWVudFJlcXVlc3RMb2FkKTtcbiAgY29uc3QgW2xvYWRlZCwgc2V0TG9hZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3N0cmlwZUxpbmtDdHJsLCBzZXRTdHJpcGVMaW5rQ3RybF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyh7XG4gICAgLi4ucHJvcHMsXG4gICAgb25QYXltZW50UmVxdWVzdExvYWQ6IG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkLFxuICAgIG9uTG9hZDogKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KSA9PiB7XG4gICAgICBzZXRMb2FkZWQodHJ1ZSk7XG4gICAgICBwcm9wcy5vbkxvYWQ/Lih0b3RhbEFtb3VudEF0b21zLCBjdXJyZW5jeSk7XG4gICAgfVxuICB9KTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob3BGb3JtKSByZXR1cm47XG4gICAgY29uc3QgZm9ybSA9IEZlLmdldEluc3RhbmNlKCkgPz8gbmV3IEZlKHtcbiAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHByb3BzLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICBmb3JtVGFyZ2V0OiBgIyR7Rk9STV9UQVJHRVR9YCxcbiAgICAgIGJhc2VVcmw6IHByb3BzLmJhc2VVcmwsXG4gICAgICBjdXN0b21Jbml0UGFyYW1zOiBwcm9wcy5jdXN0b21Jbml0UGFyYW1zLFxuICAgICAgLi4uZm9ybUNhbGxiYWNrc1xuICAgIH0pO1xuICAgIHNldE9wRm9ybShmb3JtKTtcbiAgICBjb25zdCB2YWx1ZSA9IGdldEVsZW1lbnRzQ29udGV4dFZhbHVlKGZvcm0pO1xuICAgIHNldEVsZW1lbnRzQ29udGV4dFZhbHVlKHZhbHVlKTtcbiAgICBmb3JtLmluaXRGbG93cy5zdHJpcGVMaW5rLnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldFN0cmlwZUxpbmtDdHJsKHJlc3VsdC5sb2FkZWRWYWx1ZS5jb250cm9sbGVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgW10pO1xuICBpZiAoIW9wRm9ybSkge1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSk7XG4gIH1cbiAgY29uc3QgY2hpbGRyZW5Qcm9wcyA9IHtcbiAgICBzdWJtaXQ6IG9wRm9ybS5zdWJtaXRDYXJkLFxuICAgIGFwcGxlUGF5OiBwYXltZW50UmVxdWVzdHMuYXBwbGVfcGF5LFxuICAgIGdvb2dsZVBheTogcGF5bWVudFJlcXVlc3RzLmdvb2dsZV9wYXksXG4gICAgbG9hZGVkLFxuICAgIC8vIERpc2FibGUgZHluYW1pYyBwcmV2aWV3cyBmZWF0dXJlIGZvciBub3dcbiAgICBwcmV2aWV3OiB7XG4gICAgICBhbW91bnQ6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9LFxuICAgIHN0cmlwZUxpbms6IHN0cmlwZUxpbmtDdHJsXG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7IGNoaWxkcmVuOiBlbGVtZW50c0NvbnRleHRWYWx1ZSA/IC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudHNDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBlbGVtZW50c0NvbnRleHRWYWx1ZSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwgeyBpZDogRk9STV9UQVJHRVQsIGNsYXNzTmFtZTogcHJvcHMuY2xhc3NOYW1lLCBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW4oY2hpbGRyZW5Qcm9wcykgfSkgfSkgOiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSkgfSk7XG59O1xuY29uc3QgZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUgPSAob3BGb3JtKSA9PiB7XG4gIHJldHVybiB7XG4gICAgZm9ybUlkOiBvcEZvcm0uZm9ybUlkLFxuICAgIGZvcm1IZWlnaHQ6IG9wRm9ybS5mb3JtUHJvcGVydGllcy5oZWlnaHQsXG4gICAgcmVmZXJyZXI6IG9wRm9ybS5yZWZlcnJlcixcbiAgICBjaGVja291dFNlY3VyZVRva2VuOiBvcEZvcm0uY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICByZWdpc3RlcklmcmFtZTogb3BGb3JtLnJlZ2lzdGVySWZyYW1lLFxuICAgIGJhc2VVcmw6IG9wRm9ybS5iYXNlVXJsXG4gIH07XG59O1xuXG5jb25zdCBFbGVtZW50RnJhbWUgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBlbGVtZW50VHlwZSwgc3R5bGVzIH0gPSBwcm9wcztcbiAgY29uc3QgeyBmb3JtSWQsIHJlZmVycmVyLCBmb3JtSGVpZ2h0LCBjaGVja291dFNlY3VyZVRva2VuLCByZWdpc3RlcklmcmFtZSwgYmFzZVVybCB9ID0gdXNlT3BlblBheUVsZW1lbnRzKCk7XG4gIGNvbnN0IHN1YlBhdGggPSBlbGVtZW50VHlwZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBbaGFzTG9hZGVkLCBzZXRIYXNMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpZnJhbWVSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGVsZW1lbnRTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc3R5bGVzKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcoc3R5bGVzKTtcbiAgfSwgW3N0eWxlc10pO1xuICBjb25zdCBmcmFtZVN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IGZvcm1IZWlnaHRcbiAgICB9O1xuICB9LCBbZm9ybUhlaWdodF0pO1xuICBjb25zdCBxdWVyeVN0cmluZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbiB8fCAhcmVmZXJyZXIpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwicmVmZXJlclwiLCByZWZlcnJlcik7XG4gICAgcGFyYW1zLmFwcGVuZChcInN0eWxlc1wiLCBlbGVtZW50U3R5bGUpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJmb3JtSWRcIiwgZm9ybUlkKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgcmV0dXJuIHBhcmFtcy50b1N0cmluZygpO1xuICB9LCBbZWxlbWVudFN0eWxlLCBmb3JtSWQsIHJlZmVycmVyLCBjaGVja291dFNlY3VyZVRva2VuXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiBzZXRIYXNMb2FkZWQodHJ1ZSksIFtdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlmcmFtZVJlZi5jdXJyZW50IHx8ICFoYXNMb2FkZWQpIHJldHVybjtcbiAgICByZWdpc3RlcklmcmFtZShlbGVtZW50VHlwZSwgaWZyYW1lUmVmLmN1cnJlbnQpO1xuICB9LCBbaGFzTG9hZGVkXSk7XG4gIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbZm9ybV0gQ2Fubm90IHJlbmRlciBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgZnJhbWVcIik7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwge30pO1xuICB9XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFwiaWZyYW1lXCIsXG4gICAge1xuICAgICAgaWQ6IGBvanMtJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIG5hbWU6IGAke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgY2xhc3NOYW1lOiBcIm9qcy1pZnJhbWVcIixcbiAgICAgIHNyYzogYCR7YmFzZVVybH0vYXBwL3YxLyR7c3ViUGF0aH0tZWxlbWVudC8/JHtxdWVyeVN0cmluZ31gLFxuICAgICAgc3R5bGU6IGZyYW1lU3R5bGUsXG4gICAgICByZWY6IGlmcmFtZVJlZlxuICAgIH1cbiAgKTtcbn07XG5cbmNvbnN0IENhcmRDdmNFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0NWQyB9KTtcbn07XG5cbmNvbnN0IENhcmRFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEIH0pO1xufTtcblxuY29uc3QgQ2FyZEV4cGlyeUVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfRVhQSVJZIH0pO1xufTtcblxuY29uc3QgQ2FyZE51bWJlckVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfTlVNQkVSIH0pO1xufTtcblxuZXhwb3J0IHsgQ2FyZEN2Y0VsZW1lbnQsIENhcmRFbGVtZW50LCBDYXJkRXhwaXJ5RWxlbWVudCwgQ2FyZE51bWJlckVsZW1lbnQsIEVsZW1lbnRzRm9ybSwgRmllbGROYW1lLCB1c2VPcGVuUGF5RWxlbWVudHMgfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLGlCQUFBQSxJQUFlLGNBQUFDLElBQVksVUFBQUMsSUFB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QUFRLGFBQWEzQixFQUFnQixLQUFLLENBQUMsR0FHbEYySCxLQUFvQixDQUFDLEVBQUUsUUFBQWhHLEVBQU8sTUFDWCxnQkFBQXJWLEVBQUltYSxJQUFjLEVBQUUsUUFBQTlFLEdBQVEsYUFBYTNCLEVBQWdCLFlBQVksQ0FBQyxHQUd6RjRILEtBQW9CLENBQUMsRUFBRSxRQUFBakcsRUFBTyxNQUNYLGdCQUFBclYsRUFBSW1hLElBQWMsRUFBRSxRQUFBOUUsR0FBUSxhQUFhM0IsRUFBZ0IsWUFBWSxDQUFDOyIsCiAgIm5hbWVzIjogWyJjcmVhdGVDb250ZXh0IiwgInVzZUNvbnRleHQiLCAidXNlUmVmIiwgInVzZU1lbW8iLCAidXNlU3RhdGUiLCAidXNlQ2FsbGJhY2siLCAidXNlRWZmZWN0IiwgImpzeCIsICJGcmFnbWVudCIsICJ6JDEiLCAiY29ubmVjdFRvQ2hpbGQiLCAiQiIsICJFbGVtZW50c0NvbnRleHQiLCAidXNlT3BlblBheUVsZW1lbnRzIiwgImNvbnRleHQiLCAibXQiLCAieXQiLCAiX3QiLCAiZ3QiLCAiYnQiLCAidnQiLCAiYWUiLCAidCIsICJyIiwgInd0IiwgIkV0IiwgImUiLCAiU3QiLCAiTiIsICJDdCIsICJuIiwgIlMiLCAiRSIsICJaIiwgIm0iLCAiTmUiLCAiVWUiLCAiJGUiLCAiVmUiLCAiRiIsICJrdCIsICJlZSIsICJQdCIsICJQIiwgIkl0IiwgIk90IiwgIlJ0IiwgIkF0IiwgIlR0IiwgImp0IiwgIk10IiwgIkx0IiwgIkR0IiwgIkZ0IiwgInh0IiwgIk50IiwgIlYiLCAiVXQiLCAiJHQiLCAiVnQiLCAicXQiLCAienQiLCAiSHQiLCAiWXQiLCAiQnQiLCAiSnQiLCAiS3QiLCAiR3QiLCAiRCIsICJadCIsICJXdCIsICJRdCIsICJYdCIsICJlciIsICJ0ciIsICJ0ZSIsICJnZSIsICJvciIsICJyciIsICJuciIsICJpciIsICJzciIsICJhciIsICJpIiwgInMiLCAiYSIsICJjIiwgImNyIiwgImRlIiwgInVyIiwgImxyIiwgImRyIiwgImZyIiwgInFlIiwgInplIiwgInByIiwgImhyIiwgInEiLCAibXIiLCAieXIiLCAiSGUiLCAiX3IiLCAiZ3IiLCAiYnIiLCAiYmUiLCAiWWUiLCAidmUiLCAiQmUiLCAidnIiLCAid3IiLCAiSmUiLCAiRXIiLCAiU3IiLCAiS2UiLCAiQ3IiLCAia3IiLCAiUHIiLCAiSXIiLCAiT3IiLCAiUnIiLCAiR2UiLCAiSSIsICJUciIsICJBciIsICJqciIsICJ6IiwgIk1yIiwgIkxyIiwgIkRyIiwgImZlIiwgIkZyIiwgIlplIiwgInhyIiwgIndlIiwgIk5yIiwgIldlIiwgIlFlIiwgIlVyIiwgIlhlIiwgInBlIiwgImV0IiwgIk8iLCAiUG8iLCAiJHIiLCAiaGUiLCAidHQiLCAiVnIiLCAicnQiLCAibWUiLCAicXIiLCAiRWUiLCAidiIsICJ6ciIsICJIciIsICJZciIsICJCciIsICJoIiwgImYiLCAiVSIsICJHciIsICJKciIsICJLciIsICJkIiwgIl8iLCAibCIsICJ1IiwgIlpyIiwgIldyIiwgIlFyIiwgIlhyIiwgIm50IiwgImVuIiwgInRuIiwgIm90IiwgInJuIiwgIm5uIiwgIm9uIiwgInNuIiwgImFuIiwgIlNlIiwgIkNlIiwgImNuIiwgInkiLCAiZm4iLCAiZG4iLCAidW4iLCAibG4iLCAiQyIsICJwbiIsICJobiIsICJtbiIsICJ5biIsICJnbiIsICJfbiIsICJibiIsICJpdCIsICJjZSIsICJMIiwgInZuIiwgInN0IiwgIiQiLCAiVyIsICJRIiwgIngiLCAid24iLCAiWSIsICJFbiIsICJ3IiwgInJlIiwgIm9lIiwgIlgiLCAiSCIsICJrZSIsICJhdCIsICJjdCIsICJ1dCIsICJsdCIsICJkdCIsICJQZSIsICJLIiwgInllIiwgIlBuIiwgInVlIiwgIlNuIiwgImllIiwgIkNuIiwgIkoiLCAia24iLCAiX2UiLCAiSW4iLCAiT24iLCAiVCIsICJBbiIsICJJZSIsICJSbiIsICJUbiIsICJqbiIsICJNbiIsICJMbiIsICJEbiIsICJmdCIsICJPZSIsICJGbiIsICJ4biIsICJSZSIsICJObiIsICJBZSIsICJVbiIsICIkbiIsICJWbiIsICJxbiIsICJ6biIsICJIbiIsICJZbiIsICJCbiIsICJKbiIsICJLbiIsICJHbiIsICJabiIsICJXbiIsICJRbiIsICJYbiIsICJlbyIsICJwdCIsICJ0byIsICJybyIsICJubyIsICJvbyIsICJpbyIsICJzbyIsICJhbyIsICJjbyIsICJ1byIsICJsbyIsICJmbyIsICJuZSIsICJodCIsICJHIiwgInBvIiwgImhvIiwgIlRlIiwgIm1vIiwgInlvIiwgIl9vIiwgImsiLCAiamUiLCAiUiIsICJsZSIsICJnbyIsICJNZSIsICJibyIsICJ2byIsICJ3byIsICJMZSIsICJEZSIsICJNIiwgInNlIiwgIkEiLCAiRmUiLCAidXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzIiwgInByb3BzIiwgImZvcm1DYWxsYmFja3NSZWYiLCAiY2IiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSIsICJab2RGaWVsZEVycm9yIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiY2FsbGJhY2tOYW1lIiwgImVycm9yTG9nZ2VyIiwgImFyZ3MiLCAiZXJyb3IiLCAiUmVxdWlyZWRTdHJpbmciLCAiT3B0aW9uYWxTdHJpbmciLCAibnVsbE9yVW5kZWZPciQxIiwgInpUeXBlIiwgIkZpZWxkTmFtZSIsICJGaWVsZE5hbWUyIiwgIkZpZWxkTmFtZUVudW0iLCAiUHJpdmF0ZUZpZWxkTmFtZSIsICJQcml2YXRlRmllbGROYW1lMiIsICJQcml2YXRlRmllbGROYW1lRW51bSIsICJBbGxGaWVsZE5hbWVzIiwgIkVsZW1lbnRUeXBlRW51bSIsICJFbGVtZW50VHlwZUVudW0yIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCQxIiwgIlBheW1lbnRNZXRob2RNaW5pbWFsIiwgIkV2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFBheWxvYWQiLCAiSW5wdXRFdmVudFR5cGUiLCAiSW5wdXRFdmVudFBheWxvYWQiLCAiRXJyb3JFdmVudFR5cGUiLCAiRXJyb3JFdmVudFBheWxvYWQiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCIsICJMYXlvdXRFdmVudFBheWxvYWQiLCAiTG9hZGVkRXZlbnRQYXlsb2FkIiwgIlBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCIsICJTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAiUFJGb3JtRmllbGRzIiwgIlN1Ym1pdEV2ZW50VHlwZSIsICJTdWJtaXRFdmVudFBheWxvYWQiLCAiVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJFdmVudFBheWxvYWQiLCAiRmllbGRWYWxpZGF0aW9uRXJyb3IiLCAiVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSIsICJjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyIsICJzdHlsZXMiLCAibnVsbE9yVW5kZWZPciIsICJDb3Vwb25NaW5pbWFsIiwgIkxpbmVJdGVtIiwgIkJyYW5kU2V0dGluZ3MiLCAiQnJhbmQiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kIiwgIlN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsIiwgIlN1YnNjcmlwdGlvbk1pbmltYWwiLCAiSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsIiwgIkludm9pY2VMaW5lSXRlbU1pbmltYWwiLCAiRGlzY291bnRNaW5pbWFsIiwgIkludm9pY2VNaW5pbWFsIiwgIkNyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCIsICJQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSIsICJfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uIiwgIlBheW1lbnRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZWRGb3JtUHJlZmlsbCIsICJFeHBpcmVkRm9ybVByZWZpbGwiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IiLCAiZml4UHJvdG8iLCAidGFyZ2V0IiwgInByb3RvdHlwZSIsICJzZXRQcm90b3R5cGVPZiIsICJmaXhTdGFjayIsICJjYXB0dXJlU3RhY2tUcmFjZSIsICJfX2V4dGVuZHMiLCAiX2V4dGVuZFN0YXRpY3MiLCAiYiIsICJwIiwgIl9fIiwgIl9zdXBlciIsICJDdXN0b21FcnJvciIsICJtZXNzYWdlIiwgIm9wdGlvbnMiLCAiX25ld1RhcmdldCIsICJfdGhpcyIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJwcmVmaXgiLCAibG9nIiwgImVyciIsICJQUl9MT0FESU5HIiwgImVycl9fIiwgIk9wdGlvbmFsRm4iLCAiWm9kRm9ybUNhbGxiYWNrcyIsICJfRm9ybUNhbGxiYWNrcyIsICJyYXdDYWxsYmFja3MiLCAia2V5IiwgInJhd0NhbGxiYWNrIiwgInNhZmVDYWxsYmFjayIsICJvYmoiLCAiaW5zdGFuY2UiLCAiRm9ybUNhbGxiYWNrcyIsICJ1c2VQYXltZW50UmVxdWVzdHMiLCAib3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZCIsICJwYXltZW50UmVxdWVzdHMiLCAic2V0UGF5bWVudFJlcXVlc3RzIiwgIm92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIiwgInBheW1lbnRSZXF1ZXN0czIiLCAiRk9STV9UQVJHRVQiLCAiRWxlbWVudHNGb3JtIiwgIm9wRm9ybSIsICJzZXRPcEZvcm0iLCAiZWxlbWVudHNDb250ZXh0VmFsdWUiLCAic2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAibG9hZGVkIiwgInNldExvYWRlZCIsICJzdHJpcGVMaW5rQ3RybCIsICJzZXRTdHJpcGVMaW5rQ3RybCIsICJmb3JtQ2FsbGJhY2tzIiwgInRvdGFsQW1vdW50QXRvbXMiLCAiY3VycmVuY3kiLCAiX2EiLCAiZm9ybSIsICJ2YWx1ZSIsICJnZXRFbGVtZW50c0NvbnRleHRWYWx1ZSIsICJyZXN1bHQiLCAiY2hpbGRyZW5Qcm9wcyIsICJFbGVtZW50RnJhbWUiLCAiZWxlbWVudFR5cGUiLCAiZm9ybUlkIiwgInJlZmVycmVyIiwgImZvcm1IZWlnaHQiLCAiY2hlY2tvdXRTZWN1cmVUb2tlbiIsICJyZWdpc3RlcklmcmFtZSIsICJiYXNlVXJsIiwgInN1YlBhdGgiLCAiaGFzTG9hZGVkIiwgInNldEhhc0xvYWRlZCIsICJpZnJhbWVSZWYiLCAiZWxlbWVudFN0eWxlIiwgImZyYW1lU3R5bGUiLCAicXVlcnlTdHJpbmciLCAicGFyYW1zIiwgIkNhcmRDdmNFbGVtZW50IiwgIkNhcmRFbGVtZW50IiwgIkNhcmRFeHBpcnlFbGVtZW50IiwgIkNhcmROdW1iZXJFbGVtZW50Il0KfQo=
|
|
3058
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVJlZiwgdXNlTWVtbywgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgeiBhcyB6JDEgfSBmcm9tICd6b2QnO1xuaW1wb3J0ICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBCIGZyb20gJ2NoYWxrJztcblxuY29uc3QgRWxlbWVudHNDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG4gIGZvcm1JZDogXCJcIixcbiAgZm9ybUhlaWdodDogXCJcIixcbiAgcmVmZXJyZXI6IHZvaWQgMCxcbiAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdm9pZCAwLFxuICByZWdpc3RlcklmcmFtZTogKCkgPT4ge1xuICB9LFxuICBiYXNlVXJsOiBcIlwiXG59KTtcblxuY29uc3QgdXNlT3BlblBheUVsZW1lbnRzID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChFbGVtZW50c0NvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VPcGVuUGF5RWxlbWVudHMgbXVzdCBiZSB1c2VkIHdpdGhpbiBhbiBPcGVuUGF5RWxlbWVudHNQcm92aWRlclwiKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn07XG5cbmNvbnN0IG10ID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCB5dCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSksIF90ID0geiQxLmFycmF5KHl0KSwgZ3QgPSB6JDEub2JqZWN0KHtcbiAgY29kZTogeiQxLnN0cmluZygpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIHBhdGg6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KSwgYnQgPSB6JDEuYXJyYXkoZ3QpLCB2dCA9IHtcbiAgXCJmYWlsZWQgdG8gZmV0Y2hcIjogXCJDb25uZWN0aW9uIGVycm9yOiBwbGVhc2UgZG91YmxlIGNoZWNrIGlmIHlvdSBhcmUgY29ubmVjdGVkIHRvIHRoZSBpbnRlcm5ldCwgdGhlbiB0cnkgYWdhaW5cIlxufSwgYWUgPSAodCkgPT4ge1xuICBjb25zdCByID0gdC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgcmV0dXJuIHZ0W3JdID8/IHQ7XG59LCB3dCA9ICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHR5cGVvZiBKU09OLnBhcnNlKHQpID09IFwib2JqZWN0XCI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAhMTtcbiAgfVxufSwgRXQgPSAodCkgPT4gdC5sZW5ndGggPT09IDEgPyBhZSh0WzBdLm1zZykgOiBgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpcbiR7dC5tYXAoKGUpID0+IGDigKIgJHthZShlLm1zZyl9YCkuam9pbihgXG5gKX1gLCBTdCA9ICh0KSA9PiBgRW5jb3VudGVyZWQgdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke3QubWFwKChlKSA9PiBgLSAke2UucGF0aC5qb2luKFwiL1wiKX06ICR7ZS5tZXNzYWdlfWApLmpvaW4oYFxuYCl9YCwgTiA9ICh0KSA9PiB7XG4gIGlmICh0IGluc3RhbmNlb2YgRXJyb3IpXG4gICAgaWYgKHd0KHQubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IHIgPSBKU09OLnBhcnNlKHQubWVzc2FnZSk7XG4gICAgICByZXR1cm4gX3Quc2FmZVBhcnNlKHIpLnN1Y2Nlc3MgPyBFdChyKSA6IGJ0LnNhZmVQYXJzZShyKS5zdWNjZXNzID8gU3QocikgOiAoY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCB1bmtub3duIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0OlxuJHt0Lm1lc3NhZ2V9YCksIHQubWVzc2FnZSk7XG4gICAgfSBlbHNlXG4gICAgICByZXR1cm4gYWUodC5tZXNzYWdlKTtcbiAgaWYgKHR5cGVvZiB0ID09IFwib2JqZWN0XCIpXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0KTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICByZXR1cm4gciArIFwiXCI7XG4gICAgfVxuICBlbHNlXG4gICAgcmV0dXJuIHQgKyBcIlwiO1xufSwgQ3QgPSAodCwgciwgZSkgPT4gKC4uLm4pID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gciguLi5uKTtcbiAgfSBjYXRjaCAoaSkge1xuICAgIGUoYFtmb3JtXSBFcnJvciBydW5uaW5nIGNhbGxiYWNrICgke3R9KTpgLCBpKTtcbiAgICByZXR1cm47XG4gIH1cbn0sIFMgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IFwiQ2Fubm90IGJlIGJsYW5rXCIgfSksIHYgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCksIFogPSAodCkgPT4geiQxLm51bGxhYmxlKHQub3B0aW9uYWwoKSk7XG52YXIgbSA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LkZJUlNUX05BTUUgPSBcImZpcnN0TmFtZVwiLCB0LkxBU1RfTkFNRSA9IFwibGFzdE5hbWVcIiwgdC5FTUFJTCA9IFwiZW1haWxcIiwgdC5aSVBfQ09ERSA9IFwiemlwQ29kZVwiLCB0LkNJVFkgPSBcImNpdHlcIiwgdC5TVEFURSA9IFwic3RhdGVcIiwgdC5DT1VOVFJZID0gXCJjb3VudHJ5XCIsIHQuQUREUkVTUyA9IFwiYWRkcmVzc1wiLCB0LlBIT05FID0gXCJwaG9uZVwiLCB0LlBST01PVElPTl9DT0RFID0gXCJwcm9tb3Rpb25Db2RlXCIsIHQpKShtIHx8IHt9KTtcbmNvbnN0IE5lID0geiQxLm5hdGl2ZUVudW0obSk7XG52YXIgVWUgPSAvKiBAX19QVVJFX18gKi8gKCh0KSA9PiAodC5DQVJEX05VTUJFUiA9IFwiY2FyZE51bWJlclwiLCB0LkNBUkRfRVhQSVJZID0gXCJjYXJkRXhwaXJ5XCIsIHQuQ0FSRF9DVkMgPSBcImNhcmRDdmNcIiwgdCkpKFVlIHx8IHt9KTtcbmNvbnN0ICRlID0geiQxLm5hdGl2ZUVudW0oVWUpLCBWZSA9IHokMS51bmlvbihbTmUsICRlXSk7XG52YXIgRiA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LkNBUkQgPSBcImNhcmRcIiwgdC5DQVJEX05VTUJFUiA9IFwiY2FyZC1udW1iZXJcIiwgdC5DQVJEX0VYUElSWSA9IFwiY2FyZC1leHBpcnlcIiwgdC5DQVJEX0NWQyA9IFwiY2FyZC1jdmNcIiwgdCkpKEYgfHwge30pO1xuY29uc3Qga3QgPSB6JDEubmF0aXZlRW51bShGKSwgZWUgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IFooeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IFooeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgUHQgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2FyZE51bWJlcjogdixcbiAgZXhwaXJ5OiB2LFxuICBjdmM6IHZcbn0pO1xueiQxLm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogdixcbiAgY29sb3I6IHYsXG4gIGZvbnRGYW1pbHk6IHYsXG4gIGZvbnRTaXplOiB2LFxuICBmb250V2VpZ2h0OiB2LFxuICBtYXJnaW46IHYsXG4gIHBhZGRpbmc6IHYsXG4gIGxldHRlclNwYWNpbmc6IHYsXG4gIGxpbmVIZWlnaHQ6IHYsXG4gIGhpZGVJY29uOiB2XG59KTtcbmNvbnN0IFAgPSB6JDEuZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKSwgSXQgPSBQLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pLCBPdCA9IHokMS5vYmplY3QoeyB0eXBlOiBJdCB9KSwgUnQgPSBQLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKSwgQXQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogUnQsXG4gIGVsZW1lbnRUeXBlOiAkZSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KSwgVHQgPSBQLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pLCBqdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBUdCxcbiAgbWVzc2FnZTogUyxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSksIE10ID0gUC5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pLCBMdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBNdCxcbiAgZWxlbWVudFR5cGU6IFZlLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KSwgRHQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoUC5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogU1xufSksIEZ0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKFAuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFMsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHYsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHokMS5hcnJheShlZSlcbn0pLCB4dCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChQLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6JDEub3B0aW9uYWwoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgTnQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoUC5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHokMS5zdHJpbmcoKVxufSksIFYgPSB6JDEub2JqZWN0KHtcbiAgZmlyc3ROYW1lOiBTLFxuICBsYXN0TmFtZTogUyxcbiAgZW1haWw6IFMsXG4gIHppcENvZGU6IFMsXG4gIGNvdW50cnk6IFMsXG4gIHByb21vdGlvbkNvZGU6IHZcbn0pLCBVdCA9IHokMS5vYmplY3Qoe1xuICBlbWFpbDogUyxcbiAgemlwQ29kZTogUyxcbiAgY291bnRyeTogUyxcbiAgcHJvbW90aW9uQ29kZTogdlxufSksICR0ID0gUC5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pLCBWdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiAkdCxcbiAgc2Vzc2lvbklkOiBTLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IGVlLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IHZcbn0pLmV4dGVuZChWLnNoYXBlKSwgcXQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoUC5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHokMS5ib29sZWFuKClcbn0pLCB6dCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChQLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogeiQxLnN0cmluZygpXG59KSwgSHQgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIE90LFxuICBBdCxcbiAganQsXG4gIEx0LFxuICBEdCxcbiAgRnQsXG4gIFZ0LFxuICBxdCxcbiAgenQsXG4gIHh0LFxuICBOdFxuXSksIFl0ID0geiQxLm9iamVjdCh7XG4gIHBheWxvYWQ6IEh0LFxuICBub25jZTogUyxcbiAgZm9ybUlkOiBTLFxuICBlbGVtZW50SWQ6IFNcbn0pO1xueiQxLm9iamVjdCh7XG4gIGFtb3VudEF0b206IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IFNcbn0pO1xueiQxLmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBaKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgQnQgPSB6JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6JDEuYXJyYXkoUHQpXG59KSwgSnQgPSB6JDEub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHokMS5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEt0ID0geiQxLm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHokMS5saXRlcmFsKCExKSxcbiAgZXJyb3JfdHlwZTogeiQxLmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHokMS5hcnJheShKdClcbn0pLCBHdCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgeiQxLm9iamVjdCh7IHN1Y2Nlc3M6IHokMS5saXRlcmFsKCEwKSB9KSxcbiAgS3Rcbl0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGVlLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBWLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBaKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGVlLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBWLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKVxufSk7XG52YXIgRCA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LlNVQ0NFU1MgPSBcInN1Y2Nlc3NcIiwgdC5GQUlMVVJFID0gXCJmYWlsdXJlXCIsIHQuQ0FOQ0VMTEVEID0gXCJjYW5jZWxsZWRcIiwgdCkpKEQgfHwge30pO1xuY29uc3QgWnQgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXG4gICAgXCJzdWNjZXNzXCIsXG4gICAgXCJmYWlsdXJlXCIsXG4gICAgXCJjYW5jZWxsZWRcIlxuICAgIC8qIENBTkNFTExFRCAqL1xuICBdKSxcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG5jb25zdCBXdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKClcbn0pLCBRdCA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSB7fTtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtlLCBuXSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpID0gTmUucGFyc2UoZSk7XG4gICAgICBBcnJheS5pc0FycmF5KG4pID8gcltpXSA9IG4gOiBBcnJheS5pc0FycmF5KG4uX2Vycm9ycykgJiYgKHJbaV0gPSBuLl9lcnJvcnMpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSksIHI7XG59LCBYdCA9IHokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSksIGVyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxufSksIHRyID0ge1xuICB1c2Q6IFwidXNkXCIsXG4gIGJybDogXCJicmxcIlxufSwgdGUgPSBhc3luYyAodCkgPT4ge1xuICBmb3IgKGxldCBlID0gMDsgZSA8IDEwOyBlKyspXG4gICAgZ2UoKSB8fCBhd2FpdCBvcig1MDApO1xuICBpZiAoIWdlKCkpXG4gICAgdGhyb3cgY29uc29sZS5sb2coXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKSwgbmV3IEVycm9yKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIik7XG4gIHJldHVybiBuZXcgU3RyaXBlKHQpO1xufSwgcnIgPSBhc3luYyAodCwgcikgPT4ge1xuICBjb25zdCBlID0gYXdhaXQgdGUodCk7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6IGUuZWxlbWVudHMociksXG4gICAgc3RyaXBlOiBlXG4gIH07XG59LCBuciA9IGFzeW5jICh0LCByLCBlLCBuLCBpKSA9PiB7XG4gIGNvbnN0IHMgPSBhd2FpdCB0ZSh0KSwgYSA9IHRyW2UudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICByZXR1cm4gcy5wYXltZW50UmVxdWVzdCh7XG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggc3RyaXBlIGFjY291bnQgY291bnRyeSBhcyBzb29uIGFzIHdlIHN1cHBvcnQgaXRcbiAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgY3VycmVuY3k6IGEsXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBhbW91bnQ6IHIsXG4gICAgICBwZW5kaW5nOiBuXG4gICAgfSxcbiAgICByZXF1ZXN0UGF5ZXJOYW1lOiAhMCxcbiAgICByZXF1ZXN0UGF5ZXJFbWFpbDogITAsXG4gICAgZGlzYWJsZVdhbGxldHM6IFtdXG4gIH0pO1xufSwgb3IgPSAodCkgPT4gbmV3IFByb21pc2UoKHIpID0+IHtcbiAgc2V0VGltZW91dChyLCB0KTtcbn0pLCBnZSA9ICgpID0+IFwiU3RyaXBlXCIgaW4gd2luZG93LCBpciA9IGFzeW5jICh0KSA9PiBuZXcgUHJvbWlzZSgociwgZSkgPT4ge1xuICB0cnkge1xuICAgIHQub24oXCJwYXltZW50bWV0aG9kXCIsIGFzeW5jIChuKSA9PiB7XG4gICAgICByKG4pO1xuICAgIH0pLCB0Lm9uKFwiY2FuY2VsXCIsICgpID0+IHtcbiAgICAgIGUobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAobikge1xuICAgIGUobik7XG4gIH1cbn0pLCBzciA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGlmICghdC5zdHJpcGVfcGsgfHwgIXQuY2xpZW50X3NlY3JldClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmV4dCBhY3Rpb24gbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KHQpfWApO1xuICBjb25zdCBuID0gYXdhaXQgKGF3YWl0IHRlKHQuc3RyaXBlX3BrKSkuY29uZmlybUNhcmRTZXR1cCh0LmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogci5wYXltZW50TWV0aG9kLmlkXG4gIH0pO1xuICBpZiAobi5lcnJvcilcbiAgICB0aHJvdyByLmNvbXBsZXRlKFwiZmFpbFwiKSwgbmV3IEVycm9yKGBQYXltZW50IGZhaWxlZDogJHtuLmVycm9yLm1lc3NhZ2UgPz8gXCJ1bmtub3duXCJ9YCk7XG4gIHJldHVybiByLmNvbXBsZXRlKFwic3VjY2Vzc1wiKSwgbjtcbn0sIGFyID0gYXN5bmMgKHQpID0+IHtcbiAgdmFyIGksIHMsIGEsIGM7XG4gIGNvbnN0IGUgPSBhd2FpdCAoYXdhaXQgdGUodC5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKHQuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiB0LnN0cmlwZV9wbV9pZFxuICB9KSwgbiA9IChpID0gZS5zZXR1cEludGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuc3RhdHVzO1xuICBpZiAobiA9PT0gXCJzdWNjZWVkZWRcIilcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIENPTkZJUk1JTkcgUE06XCIsIHQuc3RyaXBlX3BtX2lkKSwgY29uc29sZS5sb2coXCJbM0RTXSBTZXR1cCBpbnRlbnQgY3JlYXRlZDpcIiwgZS5zZXR1cEludGVudCk7XG4gIGVsc2UgdGhyb3cgbiA9PT0gXCJjYW5jZWxlZFwiID8gbmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpIDogbmV3IEVycm9yKFxuICAgIGAkeygocyA9IGUuZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBzLm1lc3NhZ2UpID8/ICgoYyA9IChhID0gZS5zZXR1cEludGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGEubGFzdF9zZXR1cF9lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IGMubWVzc2FnZSkgPz8gXCJQYXltZW50IGZhaWxlZCwgcGxlYXNlIGNsaWNrIHN1Ym1pdCBhZ2FpbiB0byBwYXkuXCJ9YFxuICApO1xufSwgY3IgPSAodCkgPT4gSlNPTi5zdHJpbmdpZnkodCksIGRlID0gKHQsIHIpID0+IEFycmF5LmZyb20odC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtb3BpZF1cIikgPz8gW10pLnJlZHVjZSgoaSwgcykgPT4ge1xuICBjb25zdCBhID0gcy5nZXRBdHRyaWJ1dGUoXCJkYXRhLW9waWRcIik7XG4gIHJldHVybiBhID8geyAuLi5pLCBbYV06IHMudmFsdWUgfSA6IGk7XG59LCB7fSksIHVyID0gKHQpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gWXQucGFyc2UodCk7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiRXJyb3IgcGFyc2luZyBldmVudCBwYXlsb2FkOlwiLCB0LCByKSwgcjtcbiAgfVxufSwgbHIgPSBhc3luYyAodCkgPT4ge1xuICBpZiAodHlwZW9mIHQgIT0gXCJvYmplY3RcIiB8fCAhdCkgcmV0dXJuICExO1xuICB0cnkge1xuICAgIGNvbnN0IHIgPSB7IHR5cGU6IFwicGluZ1wiIH0sIGUgPSBhd2FpdCB0LnNlbmQocik7XG4gICAgaWYgKGUgIT09ICEwKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAndHJ1ZScgYWZ0ZXIgcGluZywgZ290ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7XG4gICAgcmV0dXJuICEwO1xuICB9IGNhdGNoIChyKSB7XG4gICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIENERSBjb25uZWN0aW9uIGNoZWNrOlwiLCByKSwgITE7XG4gIH1cbn0sIGRyID0gKHQsIHIpID0+ICEhdCAmJiByLCBiID0gKHQpID0+IHokMS5udWxsYWJsZSh0Lm9wdGlvbmFsKCkpO1xueiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBcIkNhbm5vdCBiZSBibGFua1wiIH0pO1xuY29uc3QgZnIgPSB6JDEub2JqZWN0KHtcbiAgY2RlX3Jlc3BvbnNlX3R5cGU6IHokMS5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56JDEuZW51bShbXCJ1c2RcIiwgXCJicmxcIl0pO1xuY29uc3QgcWUgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IGIoeiQxLm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IGIoeiQxLm51bWJlcigpKSxcbiAgY3VycmVuY3k6IGIoeiQxLnN0cmluZygpKSxcbiAgZHVyYXRpb246IHokMS5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBiKHokMS5udW1iZXIoKSlcbn0pLCB6ZSA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogYih6JDEuc3RyaW5nKCkpLFxuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBiKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IGIoeiQxLm51bWJlcigpLmludCgpKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSksIHByID0geiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksIGhyID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IGIocHIpXG59KSwgcSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogYih6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogYih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBtciA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KSwgeXIgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IGIoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogYih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBiKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KG1yKSxcbiAgdHJpYWxfc3RhcnQ6IGIoeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBiKHokMS5zdHJpbmcoKSlcbn0pLCBIZSA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpXG59KSwgX3IgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShIZSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBnciA9IHokMS5vYmplY3Qoe1xuICBjb3Vwb246IHFlXG59KSwgYnIgPSB6JDEub2JqZWN0KHtcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6JDEuYXJyYXkoZ3IpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IGIoeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShfciksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoSGUpXG59KSwgYmUgPSB6JDEub2JqZWN0KHtcbiAgY3JlYXRlZDogeiQxLmFycmF5KHlyKSxcbiAgaW52b2ljZXM6IHokMS5hcnJheShicilcbn0pLCBZZSA9IHokMS5vYmplY3Qoe1xuICBwcmV2aWV3OiBiZSxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBiKGJlKSxcbiAgY291cG9uczogeiQxLmFycmF5KHFlKVxufSksIHZlID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogYih6JDEuc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoemUpLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBicmFuZDogaHIsXG4gIHN1YnNfcHJldmlldzogYihZZSksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogeiQxLmFycmF5KHEpXG59KSwgQmUgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHokMS5udWxsYWJsZSh6JDEudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZCh2ZS5zaGFwZSksXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5lbnVtKFtcInBheW1lbnRcIiwgXCJzdWJzY3JpcHRpb25cIl0pLFxuICAgIGN1cnJlbmN5OiB6JDEuc3RyaW5nKClcbiAgfSkuZXh0ZW5kKHZlLnNoYXBlKVxuXSksIHZyID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxufSksIHdyID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnokMS51bmlvbihbQmUsIHZyLCB3cl0pO1xueiQxLm9iamVjdCh7XG4gIGxvZ286IHokMS5zdHJpbmcoKSxcbiAgaWNvbjogeiQxLnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEplID0geiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogeiQxLmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6JDEuc3RyaW5nKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheSh6ZSksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBxLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBFciA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgU3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFNyKTtcbnokMS5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogcSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgS2UgPSB6JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IFV0LFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IHFcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogVixcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHEsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbn0pO1xuY29uc3QgQ3IgPSB6JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcbmNvbnN0IGtyID0gKHQpID0+IHQucmVkdWNlKChyLCBlKSA9PiByICsgZSwgMCk7XG5mdW5jdGlvbiBQcih0LCByKSB7XG4gIHZhciBlID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBlID8gZSh0LCByKSA6IHQuX19wcm90b19fID0gcjtcbn1cbmZ1bmN0aW9uIElyKHQsIHIpIHtcbiAgciA9PT0gdm9pZCAwICYmIChyID0gdC5jb25zdHJ1Y3Rvcik7XG4gIHZhciBlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGUgJiYgZSh0LCByKTtcbn1cbnZhciBPciA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgdmFyIHQgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgcmV0dXJuIHQgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihpLCBzKSB7XG4gICAgICBpLl9fcHJvdG9fXyA9IHM7XG4gICAgfSB8fCBmdW5jdGlvbihpLCBzKSB7XG4gICAgICBmb3IgKHZhciBhIGluIHMpXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBhKSAmJiAoaVthXSA9IHNbYV0pO1xuICAgIH0sIHQoZSwgbik7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbihyLCBlKSB7XG4gICAgaWYgKHR5cGVvZiBlICE9IFwiZnVuY3Rpb25cIiAmJiBlICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhlKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgdChyLCBlKTtcbiAgICBmdW5jdGlvbiBuKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IHI7XG4gICAgfVxuICAgIHIucHJvdG90eXBlID0gZSA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoZSkgOiAobi5wcm90b3R5cGUgPSBlLnByb3RvdHlwZSwgbmV3IG4oKSk7XG4gIH07XG59KCksIFJyID0gZnVuY3Rpb24odCkge1xuICBPcihyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmNvbnN0cnVjdG9yLCBzID0gdC5jYWxsKHRoaXMsIGUsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGkubmFtZSxcbiAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH0pLCBQcihzLCBpLnByb3RvdHlwZSksIElyKHMpLCBzO1xuICB9XG4gIHJldHVybiByO1xufShFcnJvcik7XG5jbGFzcyBHZSBleHRlbmRzIFJyIHtcbiAgY29uc3RydWN0b3Iocikge1xuICAgIGNvbnN0IGUgPSBgJHtyLm1lc3NhZ2V9YDtcbiAgICBzdXBlcihlKSwgdGhpcy5yZXNwb25zZSA9IHI7XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IEkgPSBhc3luYyAodCwgciwgZSkgPT4ge1xuICBjb25zdCBuID0gYXdhaXQgdC5zZW5kKHIpO1xuICBpZiAoVHIobikpXG4gICAgdGhyb3cgbmV3IEdlKG4pO1xuICBpZiAoIUFyKG4sIGUpKSB7XG4gICAgY29uc3QgaSA9IGUuc2FmZVBhcnNlKG4pO1xuICAgIHRocm93IGkuc3VjY2VzcyA/IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGVcIikgOiAoY29uc29sZS5lcnJvcihcIk9KUyBxdWVyeUFwaSBnb3QgYSBzY2hlbWEgZXJyb3IuIEV4cGVjdGVkIHNjaGVtYTpcIiwgZSwgXCJBY3R1YWw6XCIsIG4pLCBpLmVycm9yKTtcbiAgfVxuICByZXR1cm4gbjtcbn0sIEFyID0gKHQsIHIpID0+IHIuc2FmZVBhcnNlKHQpLnN1Y2Nlc3MsIFRyID0gKHQpID0+IGZyLnNhZmVQYXJzZSh0KS5zdWNjZXNzLCBqciA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBJKHQsIHsgdHlwZTogXCJnZXRfY2hlY2tvdXRfcHJldmlld1wiLCBwYXlsb2FkOiByIH0sIFllKSwgeiA9IGFzeW5jICh0KSA9PiBhd2FpdCBJKHQsIHsgdHlwZTogXCJnZXRfcHJlZmlsbFwiLCBwYXlsb2FkOiB7fSB9LCBCZSksIE1yID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IEkodCwgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiByIH0sIEtlKSwgTHIgPSBhc3luYyAodCwgcikgPT4gYXdhaXQgSSh0LCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkOiByIH0sIENyKSwgRHIgPSBhc3luYyAodCwgcikgPT4gYXdhaXQgSSh0LCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCBwYXlsb2FkOiByIH0sIEtlKSwgZmUgPSBhc3luYyAodCwgcikgPT4gYXdhaXQgSSh0LCB7IHR5cGU6IFwiY29uZmlybV9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZDogciB9LCBCdCksIEZyID0gYXN5bmMgKHQsIHIsIGUpID0+IHtcbiAgY29uc3QgbiA9IGF3YWl0IGpyKHQsIHtcbiAgICBzZWN1cmVfdG9rZW46IHIsXG4gICAgcHJvbW90aW9uX2NvZGU6IGVcbiAgfSksIGkgPSBuZXcgU2V0KG4ucHJldmlldy5pbnZvaWNlcy5tYXAoKGMpID0+IGMuY3VycmVuY3kpKTtcbiAgaWYgKGkuc2l6ZSAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIGN1cnJlbmN5LCBnb3QgJHtpLnNpemV9YCk7XG4gIGNvbnN0IHMgPSBpLnZhbHVlcygpLm5leHQoKS52YWx1ZSA/PyBcInVzZFwiLCBhID0ga3Iobi5wcmV2aWV3Lmludm9pY2VzLm1hcCgoYykgPT4gYy5yZW1haW5pbmdfYW1vdW50X2F0b20pKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeTogcyxcbiAgICBhbW91bnRBdG9tOiBhXG4gIH07XG59LCBaZSA9IGFzeW5jICh0LCByLCBlLCBuKSA9PiB7XG4gIGlmIChlKVxuICAgIHJldHVybiB7IGFtb3VudEF0b206IDAsIGN1cnJlbmN5OiBcInVzZFwiIH07XG4gIHtcbiAgICBuID0gbiB8fCB2b2lkIDA7XG4gICAgY29uc3QgaSA9IGF3YWl0IEZyKHQsIHIsIG4pO1xuICAgIHJldHVybiB7IGFtb3VudEF0b206IGkuYW1vdW50QXRvbSwgY3VycmVuY3k6IGkuY3VycmVuY3kgfTtcbiAgfVxufSwgeHIgPSBhc3luYyAodCwgcikgPT4ge1xuICBpZiAodC5zaXplID09PSAwKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIENERSBjb25uZWN0aW9ucyBmb3VuZFwiKTtcbiAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIEFycmF5LmZyb20odC52YWx1ZXMoKSkubWFwKFxuICAgICAgKG4pID0+IEkobiwgeyB0eXBlOiBcInRva2VuaXplX2NhcmRcIiwgcGF5bG9hZDogciB9LCBHdClcbiAgICApXG4gICk7XG59LCB3ZSA9IGFzeW5jICh0LCByKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IEkodCwgeyB0eXBlOiBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIiwgcGF5bG9hZDogciB9LCBKZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiW2NkZS1jbGllbnRdIEVycm9yIGR1cmluZyBjaGVja291dENhcmRFbGVtZW50czpcIiwgZSwgSlNPTi5zdHJpbmdpZnkoZSkpLCBlO1xuICB9XG59LCBOciA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBJKHQsIHsgdHlwZTogXCJzZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkOiByIH0sIEVyKSwgV2UgPSBhc3luYyAodCwgcikgPT4gYXdhaXQgSSh0LCB7IHR5cGU6IFwiY2hlY2tvdXRcIiwgcGF5bG9hZDogciB9LCBKZSksIFFlID0gMWUzLCBVciA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGNvbnNvbGUubG9nKHIpO1xuICBjb25zdCBuID0gYXdhaXQgY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZTogdCxcbiAgICBkZWJ1ZzogITAsXG4gICAgdGltZW91dDogUWUsXG4gICAgY2hpbGRPcmlnaW46IFwiKlwiXG4gICAgLy8gVE9ETzogdXNlIHdpdGggcHJvcGVyIGNoaWxkT3JpZ2luXG4gIH0pLnByb21pc2UsIGkgPSBhd2FpdCBJKG4sIHsgdHlwZTogXCJwaW5nLTNkcy1zdGF0dXNcIiB9LCBadCk7XG4gIHJldHVybiBjb25zb2xlLmxvZyhcIvCfn6IgQ0RFIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCEgU3RvcHBpbmcgcG9sbGluZy4uLiBSZXN1bHQ6XCIsIGkpLCBpO1xufTtcbmZ1bmN0aW9uIFhlKHQpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHt0fWApO1xufVxuY29uc3QgcGUgPSAodCkgPT4gYXN5bmMgKHIpID0+IHtcbiAgdmFyIGUsIG47XG4gIHRyeSB7XG4gICAgKG4gPSAoZSA9IHIuZm9ybUNhbGxiYWNrcy5nZXQpLm9uQ2hlY2tvdXRTdGFydGVkKSA9PSBudWxsIHx8IG4uY2FsbChlKTtcbiAgICBjb25zdCBpID0gYXdhaXQgdChyKTtcbiAgICBpZiAoaS5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhpLnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgZWxzZSBpZiAoaS5tb2RlID09PSBcImNoZWNrb3V0XCIpXG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICBpLnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgIGkucmVzdWx0LnN1YnNjcmlwdGlvbl9pZHMsXG4gICAgICAgIGkucmVzdWx0LmN1c3RvbWVyX2lkXG4gICAgICApO1xuICAgIGVsc2VcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIG1vZGU6ICR7aX1gKTtcbiAgfSBjYXRjaCAoaSkge1xuICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKE4oaSkpO1xuICB9XG59LCBldCA9ICh0KSA9PiBhc3luYyAocikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB0KHIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgeyBlcnJfXzogbiB9ID0gTyhcImluaXQtZXJyb3ItY2F0Y2hlclwiKTtcbiAgICByZXR1cm4gbihlKSwgeyBpc0F2YWlsYWJsZTogITEsIHJlYXNvbjogTihlKSB9O1xuICB9XG59LCBPID0gKHQpID0+IHtcbiAgY29uc3QgciA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUubG9nKGAke0IuZ3JlZW4uYm9sZChcIm9qcy9cIil9JHtCLmJvbGQuZ3JheShgJHt0fWApfVx0YCwgLi4ubik7XG4gIH0sIGUgPSAoLi4ubikgPT4ge1xuICAgIHdpbmRvdy5jb25zb2xlLmVycm9yKGAke0IucmVkLmJvbGQoXCJvanMvXCIpfSR7Qi5ib2xkLmdyYXkoYCR7dH1gKX1cdGAsIC4uLm4pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZzogcixcbiAgICBlcnI6IGUsXG4gICAgbG9nX186IHIsXG4gICAgZXJyX186IGVcbiAgfTtcbn0sIHsgbG9nX186IFBvLCBlcnJfXzogJHIgfSA9IE8oXCJjb21tb25cIiksIGhlID0gKHQpID0+IHtcbiAgaWYgKHQucGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHt0LnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiB0LnBheW1lbnRfbWV0aG9kc1swXS5pZCB9O1xufSwgdHQgPSAodCwgcikgPT4ge1xuICBjb25zdCBlID0gdC5maW5kKChuKSA9PiByLnNhZmVQYXJzZShuKS5zdWNjZXNzKTtcbiAgaWYgKCFlKVxuICAgIHRocm93ICRyKFwiTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWwuIEFsbCBtb2RlbHM6XCIsIHQpLCBuZXcgRXJyb3IoXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbFwiKTtcbiAgcmV0dXJuIHIucGFyc2UoZSk7XG59LCB7IGxvZ19fOiBWciwgZXJyX186IHJ0IH0gPSBPKFwiY29tbW9uLWNjXCIpLCBtZSA9ICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSBWLnNhZmVQYXJzZSh0KTtcbiAgaWYgKCFlLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBuID0gZS5lcnJvci5mb3JtYXQoKSwgaSA9IFF0KG4pO1xuICAgIGZvciAoY29uc3QgW3MsIGFdIG9mIE9iamVjdC5lbnRyaWVzKGkpKVxuICAgICAgcihzLCBhLCBzKTtcbiAgICB0aHJvdyBydChcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIGkpLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgfVxuICByZXR1cm4gZS5kYXRhO1xufSwgcXIgPSAodCwgcikgPT4ge1xuICBmb3IgKGNvbnN0IGUgb2YgdClcbiAgICBpZiAoZS5zdWNjZXNzID09PSAhMSlcbiAgICAgIHRocm93IGUuZXJyb3JzLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgY29uc3QgaSA9IFZlLnNhZmVQYXJzZShuLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgaWYgKCFpLnN1Y2Nlc3MpXG4gICAgICAgICAgcnQoYFVua25vd24gZmllbGQgbmFtZSBpbiBvblZhbGlkYXRpb25FcnJvcjogJHtuLmVsZW1lbnRUeXBlfS4gRXJyb3Igb2JqZWN0OmAsIG4pO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzID0gaS5kYXRhO1xuICAgICAgICAgIHIocywgbi5lcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9KSwgVnIoYEVycm9yIHRva2VuaXppbmcgY2FyZDogZ290IHZhbGlkYXRpb24gZXJyb3JzOiAke0pTT04uc3RyaW5naWZ5KGUuZXJyb3JzKX1gKSwgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIHdoaWxlIHRva2VuaXppbmcgY2FyZFwiKTtcbn0sIEVlID0gXCJvanMtc3RyaXBlLWxpbmstYnRuXCIsIHsgbG9nX186IHcsIGVycl9fOiB6ciB9ID0gTyhcInN0cmlwZS1saW5rXCIpLCBIciA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBZciA9IHokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpLCBCciA9IGV0KFxuICBhc3luYyAoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiByIH0pID0+IHtcbiAgICBjb25zdCBlID0gdC5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms7XG4gICAgdyhcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIExpbmsuLi5cIik7XG4gICAgY29uc3QgbiA9IHR0KHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgSHIpO1xuICAgIHcoXCJTdGFydGluZyBzdHJpcGUgbGluayBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGkgPSB0LmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCB6KGkpLCBhID0gcy5tb2RlID09PSBcInNldHVwXCI7XG4gICAgdyhcIkNyZWF0aW5nIHN0cmlwZSBlbGVtZW50cy4uLlwiKTtcbiAgICBjb25zdCBjID0gYXdhaXQgWmUoaSwgcy50b2tlbiwgYSwgdm9pZCAwKSwgeyBlbGVtZW50czogbCwgc3RyaXBlOiB1IH0gPSBhd2FpdCBycihuLm1ldGFkYXRhLnN0cmlwZV9waywge1xuICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgY3VycmVuY3k6IGMuY3VycmVuY3ksXG4gICAgICBzZXR1cF9mdXR1cmVfdXNhZ2U6IFwib2ZmX3Nlc3Npb25cIixcbiAgICAgIHBheW1lbnRNZXRob2RDcmVhdGlvbjogXCJtYW51YWxcIlxuICAgIH0pO1xuICAgIHcoXCJDcmVhdGluZyBleHByZXNzIGNoZWNrb3V0Li4uXCIpO1xuICAgIGNvbnN0IGQgPSBsLmNyZWF0ZShcImV4cHJlc3NDaGVja291dFwiLCB7XG4gICAgICBidXR0b25IZWlnaHQ6IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYnV0dG9uSGVpZ2h0LFxuICAgICAgcGF5bWVudE1ldGhvZHM6IHtcbiAgICAgICAgYW1hem9uUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGFwcGxlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGdvb2dsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBwYXlwYWw6IFwibmV2ZXJcIlxuICAgICAgfVxuICAgIH0pLCBoID0gKCkgPT4ge1xuICAgICAgZC5tb3VudChgIyR7RWV9YCk7XG4gICAgfSwgXyA9ICgpID0+IHtcbiAgICAgIGQudW5tb3VudCgpO1xuICAgIH07XG4gICAgcmV0dXJuIGUgIT0gbnVsbCAmJiBlLmRvTm90TW91bnRPbkluaXQgPyB3KFwiTk9UIG1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbiAoZG9Ob3RNb3VudE9uSW5pdCBpcyB0cnVlKVwiKSA6ICh3KFwiTW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uLi4uXCIpLCBoKCkpLCBkLm9uKFwiY2xpY2tcIiwgYXN5bmMgKGYpID0+IHtcbiAgICAgIGlmICh3KFwiU3RyaXBlIExpbmsgYnV0dG9uIGNsaWNrZWRcIiksIGUgIT0gbnVsbCAmJiBlLm92ZXJyaWRlTGlua1N1Ym1pdCAmJiAhYXdhaXQgZS5vdmVycmlkZUxpbmtTdWJtaXQoKSkge1xuICAgICAgICB3KFwiU3RyaXBlIExpbmsgc3VibWl0IGFib3J0ZWQgYnkgb3ZlcnJpZGVMaW5rU3VibWl0XCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmLnJlc29sdmUoKTtcbiAgICB9KSwgZC5vbihcImNvbmZpcm1cIiwgYXN5bmMgKGYpID0+IHtcbiAgICAgIHcoXCJTdHJpcGUgTGluayB3aW5kb3cgY29uZmlybWVkXCIsIGYpO1xuICAgICAgY29uc3QgcCA9IGF3YWl0IHUuY3JlYXRlUGF5bWVudE1ldGhvZCh7XG4gICAgICAgIGVsZW1lbnRzOiBsLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBiaWxsaW5nX2RldGFpbHM6IGYuYmlsbGluZ0RldGFpbHNcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBwLmVycm9yID8gKHpyKFwiZXJyb3JcIiwgcC5lcnJvciksIHIuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihwLmVycm9yLm1lc3NhZ2UgPz8gXCJTdHJpcGUgTGluayB1bmtub3duIGVycm9yXCIpKSA6ICh3KFwicGF5bWVudE1ldGhvZFwiLCBwLnBheW1lbnRNZXRob2QpLCBVLnN0cmlwZUxpbmsucnVuKHtcbiAgICAgICAgY29udGV4dDogdCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBkZSh0LmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgICAgICBjdXN0b21QYXJhbXM6IHsgc3RyaXBlUE06IHAucGF5bWVudE1ldGhvZCB9LFxuICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiAhMCB9XG4gICAgICB9KSk7XG4gICAgfSksIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGNvbnRyb2xsZXI6IHtcbiAgICAgICAgbW91bnRCdXR0b246IGgsXG4gICAgICAgIGRpc21vdW50QnV0dG9uOiBfLFxuICAgICAgICB3YWl0Rm9yQnV0dG9uVG9Nb3VudDogYXN5bmMgKCkgPT4gYXdhaXQgR3IoRWUpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuKSwgSnIgPSBwZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBpXG4gIH0pID0+IHtcbiAgICB3KFwiUnVubmluZyBTdHJpcGUgTGluayBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHMgPSB0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgdyhcIk1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgYSA9IEtyKGUsIGkuc3RyaXBlUE0pLCBjID0gbWUoYSwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIHcoXCJTdGFydGluZyBwYXltZW50IGZsb3cuLi5cIik7XG4gICAgY29uc3QgbCA9IGF3YWl0IE1yKHMsIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogcixcbiAgICAgIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiBpLnN0cmlwZVBNLmlkXG4gICAgfSk7XG4gICAgdyhcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBsKTtcbiAgICBjb25zdCBkID0gWXIucGFyc2UobC5yZXF1aXJlZF91c2VyX2FjdGlvbnMpWzBdLm91cl9leGlzdGluZ19wbV9pZCwgaCA9IGF3YWl0IHoocyk7XG4gICAgaWYgKGgubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICB3KFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKTtcbiAgICAgIGNvbnN0IF8gPSBhd2FpdCBmZShzLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogaC50b2tlbixcbiAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGRcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGhlKF8pIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHcoXCJEb2luZyBjaGVja291dC4uLlwiKTtcbiAgICAgIGNvbnN0IF8gPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogaC50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IHIucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IGNbbS5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBjW20uWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBjW20uQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBjW20uUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBoLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBoLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHJcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgV2UocywgXykgfTtcbiAgICB9XG4gIH1cbiksIEtyID0gKHQsIHIpID0+IHtcbiAgdmFyIGEsIGMsIGwsIHUsIGQ7XG4gIGNvbnN0IGUgPSB7IC4uLnQgfSwgW24sIC4uLmldID0gKChjID0gKGEgPSByLmJpbGxpbmdfZGV0YWlscy5uYW1lKSA9PSBudWxsID8gdm9pZCAwIDogYS50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiBjLnNwbGl0KC9cXHMrLykpID8/IFtdLCBzID0gaS5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIHJldHVybiBlW20uRklSU1RfTkFNRV0gPSBlW20uRklSU1RfTkFNRV0gfHwgbiB8fCBcIl9PUF9VTktOT1dOXCIsIGVbbS5MQVNUX05BTUVdID0gZVttLkxBU1RfTkFNRV0gfHwgcyB8fCBcIl9PUF9VTktOT1dOXCIsIGVbbS5FTUFJTF0gPSBlW20uRU1BSUxdIHx8IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICgobCA9IHIubGluaykgPT0gbnVsbCA/IHZvaWQgMCA6IGwuZW1haWwpIHx8IHIuYmlsbGluZ19kZXRhaWxzLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgZVttLlpJUF9DT0RFXSA9IGVbbS5aSVBfQ09ERV0gfHwgKCh1ID0gci5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IHUucG9zdGFsX2NvZGUpIHx8IFwiMDAwMDBcIiwgZVttLkNPVU5UUlldID0gZVttLkNPVU5UUlldIHx8ICgoZCA9IHIuYmlsbGluZ19kZXRhaWxzLmFkZHJlc3MpID09IG51bGwgPyB2b2lkIDAgOiBkLmNvdW50cnkpIHx8IFwiVVNcIiwgdyhcIkZpbmFsIGZvcm0gaW5wdXRzOlwiLCBlKSwgZTtcbn0sIEdyID0gKHQpID0+IG5ldyBQcm9taXNlKChyKSA9PiB7XG4gIGNvbnN0IGUgPSAoKSA9PiB7XG4gICAgY29uc3QgbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpO1xuICAgIG4gPyByKG4pIDogcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpO1xuICB9O1xuICBlKCk7XG59KSwgWnIgPSBcIkBrZXlmcmFtZXMgZmFkZUluezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjkpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9fS5vdmVybGF5e3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3otaW5kZXg6MjE0NzQ4MzY0OCFpbXBvcnRhbnQ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6IzAwMDAwMDgwfS5jb250YWluZXJ7bWF4LXdpZHRoOjUwMHB4O21heC1oZWlnaHQ6NjAwcHg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7cG9zaXRpb246cmVsYXRpdmU7YW5pbWF0aW9uOmZhZGVJbiAuM3MgZWFzZS1vdXR9LmZyYW1le21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7Ym9yZGVyOm5vbmV9LmNhbmNlbC1idXR0b257cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6bm9uZTtmb250LXNpemU6MXJlbTtjb2xvcjojZmZmO2N1cnNvcjpwb2ludGVyO3RvcDotMS41cmVtO3BhZGRpbmc6MDtyaWdodDowfVwiLCBXciA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gIHIuaW5uZXJIVE1MID0gYFxuICAgIDxzdHlsZT5cbiAgICAgICR7WnJ9XG4gICAgPC9zdHlsZT5cbiAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8aWZyYW1lIHNyYz1cIiR7dH1cIiBjbGFzcz1cImZyYW1lXCIgaWQ9XCJ0aHJlZS1kcy1pZnJhbWVcIiB0aXRsZT1cIjNEIFNlY3VyZSB2ZXJpZmljYXRpb25cIiBhbGxvdz1cInBheW1lbnRcIj48L2lmcmFtZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgO1xuICBjb25zdCBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwgbiA9IGUuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSk7XG4gIG4uYXBwZW5kQ2hpbGQoci5jb250ZW50LmNsb25lTm9kZSghMCkpO1xuICBjb25zdCBpID0gbi5xdWVyeVNlbGVjdG9yKFwiI3RocmVlLWRzLWlmcmFtZVwiKSwgcyA9IG4ucXVlcnlTZWxlY3RvcihcIi5jYW5jZWwtYnV0dG9uXCIpO1xuICByZXR1cm4gZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKSwgeyBob3N0OiBlLCBpZnJhbWU6IGksIGNhbmNlbEJ1dHRvbjogcyB9O1xufTtcbmZ1bmN0aW9uIFFyKHQsIHIsIGUpIHtcbiAgY29uc3QgbiA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcyA9IGF3YWl0IFVyKHQsIGUpO1xuICAgICAgcyAmJiAoY2xlYXJJbnRlcnZhbChpKSwgcihzKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgfVxuICB9O1xuICBuKCk7XG4gIGNvbnN0IGkgPSBzZXRJbnRlcnZhbChuLCBRZSk7XG4gIHJldHVybiBpO1xufVxuZnVuY3Rpb24gWHIoe1xuICBlbGVtZW50czogdCxcbiAgcG9sbGluZ0ludGVydmFsOiByLFxuICByZXNvbHZlOiBlXG59KSB7XG4gIGNvbnN0IG4gPSAoKSA9PiB7XG4gICAgY2xlYXJJbnRlcnZhbChyKSwgdC5ob3N0LnJlbW92ZSgpLCBlKHsgc3RhdHVzOiBELkNBTkNFTExFRCB9KTtcbiAgfTtcbiAgcmV0dXJuIHQuY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBuKSwgKCkgPT4ge1xuICAgIHQuY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBuKTtcbiAgfTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG50KHQpIHtcbiAgY29uc3QgeyB1cmw6IHIsIGJhc2VVcmw6IGUgfSA9IHQsIG4gPSBXcihyKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChpKSA9PiB7XG4gICAgY29uc3QgcyA9IChsKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgbi5ob3N0LnJlbW92ZSgpO1xuICAgICAgfSwgMWUzKSwgaShsKSwgYyA9PSBudWxsIHx8IGMoKTtcbiAgICB9LCBhID0gUXIobi5pZnJhbWUsIHMsIG5ldyBVUkwoZSkub3JpZ2luKSwgYyA9IFhyKHtcbiAgICAgIGVsZW1lbnRzOiBuLFxuICAgICAgcG9sbGluZ0ludGVydmFsOiBhLFxuICAgICAgcmVzb2x2ZTogaVxuICAgIH0pO1xuICB9KTtcbn1cbmNvbnN0IGVuID0gYXN5bmMgKHQpID0+IHtcbiAgY29uc3QgciA9IGF3YWl0IG50KHQpO1xuICBpZiAoci5zdGF0dXMgPT09IEQuQ0FOQ0VMTEVEKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAoci5zdGF0dXMgPT09IEQuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgcmV0dXJuIHIuc3RhdHVzICE9PSBELlNVQ0NFU1MgJiYgWGUoci5zdGF0dXMpLCB7XG4gICAgaHJlZjogci5ocmVmXG4gIH07XG59LCB7IGxvZ19fOiB0biwgZXJyX186IG90IH0gPSBPKFwicG9ja3l0LWNjXCIpLCBybiA9IHokMS5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHokMS5zdHJpbmcoKVxufSksIG5uID0gKHQpID0+IHtcbiAgY29uc3QgciA9IHJuLnNhZmVQYXJzZSh0KTtcbiAgaWYgKCFyLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBlID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCBuID0gYFBvY2t5dCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KHQpfWA7XG4gICAgdGhyb3cgb3QobiksIG5ldyBFcnJvcihlKTtcbiAgfVxuICByZXR1cm4gci5kYXRhO1xufSwgb24gPSAodCkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHIgPSBuZXcgVVJMKHQgPz8gXCJcIikuc2VhcmNoUGFyYW1zLmdldChcInZhdWx0SWRcIik7XG4gICAgaWYgKCFyKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdmF1bHQgSUQgZm91bmQgaW4gM0RTIHZlcmlmaWNhdGlvbiByZXN1bHRcIik7XG4gICAgcmV0dXJuIHRuKGAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtWYXVsdCBJRDogJHtyfV1gKSwgcjtcbiAgfSBjYXRjaCAocikge1xuICAgIGNvbnN0IGUgPSBcIkVycm9yIHZlcmlmeWluZyAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdC5cIjtcbiAgICB0aHJvdyBvdChlLCBgUmVzdWx0aW5nIFVSTDogJHt0fS5cbkVycm9yOiAke04ocil9YCksIG5ldyBFcnJvcihlKTtcbiAgfVxufSwgc24gPSAodCkgPT4gKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHRbXCJvcC1wb2NreXQtM2RzLXVybFwiXSkgIT09IHZvaWQgMCwgYW4gPSBhc3luYyAodCwgcikgPT4ge1xuICBjb25zdCBlID0gbm4ociksIG4gPSBhd2FpdCBlbih7IHVybDogZVtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdLCBiYXNlVXJsOiB0IH0pO1xuICByZXR1cm4ge1xuICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICB2YXVsdF9pZDogb24obi5ocmVmID8/IFwiXCIpLFxuICAgICAgdHJhbnNhY3Rpb25fbm86IGVbXCJvcC1wb2NreXQtdHhuLW5vXCJdLFxuICAgICAgcmVmZXJlbmNlX25vOiBlW1wib3AtcG9ja3l0LXJlZi1ub1wiXVxuICAgIH1cbiAgfTtcbn0sIHsgbG9nX186IGcsIGVycl9fOiBTZSB9ID0gTyhcImNvbW1vbi1jY1wiKSwgeyBsb2dfXzogQ2UgfSA9IE8oXCJzdHJpcGUtY2NcIik7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IGNuID0gcGUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogaVxuICB9KSA9PiB7XG4gICAgdmFyIHU7XG4gICAgZyhcIuKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uXCIsIHsgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByIH0pO1xuICAgIGNvbnN0IHMgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGEgPSBhd2FpdCB6KHMpO1xuICAgIGcoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7YS5tb2RlfV1gKTtcbiAgICBjb25zdCBjID0gbWUoZSwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBsID0ge1xuICAgICAgc2Vzc2lvbl9pZDogdC5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogYyxcbiAgICAgIGV4dHJhX21ldGFkYXRhOiB7fVxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIGcoYOKUnCBUb2tlbml6aW5nIGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICBjb25zdCBkID0gYXdhaXQgeHIoaS5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgICAgc2Vzc2lvbl9pZDogdC5lbGVtZW50c1Nlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICBpZiAocXIoZCwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBhLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICBnKGDilJwgU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZCBpbiBDREUgW1Rva2VuOiAke2EudG9rZW59XWApO1xuICAgICAgICBjb25zdCBoID0gYXdhaXQgTnIocywgbCk7XG4gICAgICAgIHJldHVybiBnKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7aC5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGggfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGcoYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke3QuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCBoID0gYXdhaXQgd2UocywgbCk7XG4gICAgICAgIHJldHVybiBnKFwi4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCIpLCB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBoIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZCkge1xuICAgICAgaWYgKGQgaW5zdGFuY2VvZiBHZSAmJiBkLm9yaWdpbmFsRXJyb3JNZXNzYWdlLmluY2x1ZGVzKFwiM0RTX1JFUVVJUkVEXCIpKSB7XG4gICAgICAgIGcoXCLilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93XCIpLCBnKFwiUmVjZWl2ZWQgM0RTIGVycm9yIHJlc3BvbnNlIGhlYWRlcnM6XCIsIGQucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgIGNvbnN0IGggPSBzbihkLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICBpZiAoaCkge1xuICAgICAgICAgIGcoXCLilJwgUG9ja3l0IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIFBvY2t5dCAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgeSA9IGF3YWl0IGFuKHQuYmFzZVVybCwgZC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBsLmV4dHJhX21ldGFkYXRhLnBvY2t5dCA9IHk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgXyA9IGF3YWl0IExyKHMsIGwpO1xuICAgICAgICBnKFwi4pScIFBheW1lbnQgZmxvdyByZXN1bHQ6XCIsIF8pO1xuICAgICAgICBjb25zdCBmID0gKCh1ID0gZC5yZXNwb25zZS5oZWFkZXJzKSA9PSBudWxsID8gdm9pZCAwIDogdVtcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0pICE9PSBcInRydWVcIjtcbiAgICAgICAgaCA/IGcoXCLilJwgUG9ja3l0IDNEUyBpcyBzdWNjZXNzZnVsLCBvdGhlciAzRFMgZmxvd3Mgd2lsbCBiZSBza2lwcGVkLlwiKSA6IGYgPyAoZyhcIuKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3dcIiksIGF3YWl0IGZuKF8pKSA6IChnKFwi4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvd1wiKSwgYXdhaXQgZG4oXywgdC5iYXNlVXJsKSk7XG4gICAgICAgIGNvbnN0IHAgPSBfLmNjX3BtX2lkO1xuICAgICAgICBpZiAoYS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgICBnKGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke3B9XWApO1xuICAgICAgICAgIGNvbnN0IHkgPSBhd2FpdCBmZShzLCB7XG4gICAgICAgICAgICBzZWN1cmVfdG9rZW46IGEudG9rZW4sXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogcFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGcoXCLilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpcIiwgeSk7XG4gICAgICAgICAgY29uc3QgaiA9IGhlKHkpO1xuICAgICAgICAgIHJldHVybiBnKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7ai5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGogfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBnKGDilJwgQ2hlY2tpbmcgb3V0IGFmdGVyIDNEUyBmbG93IFtGbG93OiAke2YgPyBcImxlZ2FjeVwiIDogXCJuZXdcIn1dYCk7XG4gICAgICAgICAgY29uc3QgeSA9IGF3YWl0IHdlKHMsIHtcbiAgICAgICAgICAgIC4uLmwsXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogcCxcbiAgICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IGZcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gZyhcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogeSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBTZShcIuKVsCBFcnJvciBjaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERVwiKSwgU2UoZCksIGQ7XG4gICAgfVxuICB9XG4pLCB1biA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSB0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChlKSA9PiBlLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKTtcbiAgaWYgKCFyKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHN0cmlwZSAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gWHQucGFyc2Uocik7XG59LCBsbiA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSB0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChlKSA9PiBlLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiKTtcbiAgaWYgKCFyKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbW1vbiAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gV3QucGFyc2Uocik7XG59LCBkbiA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSBsbih0KTtcbiAgZyhg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke2UucmVkaXJlY3RfdXJsfV1gKTtcbiAgY29uc3QgeyBzdGF0dXM6IG4gfSA9IGF3YWl0IG50KHsgdXJsOiBlLnJlZGlyZWN0X3VybCwgYmFzZVVybDogciB9KTtcbiAgaWYgKGcoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke259XWApLCBuID09PSBELkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKG4gPT09IEQuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbn0sIGZuID0gYXN5bmMgKHQpID0+IHtcbiAgY29uc3QgciA9IHVuKHQpO1xuICBDZShg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvdyBbQ2xpZW50IFNlY3JldDogJHtyLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKSwgYXdhaXQgYXIociksIENlKFwi4pWwIFN0cmlwZSAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xufSwgeyBsb2dfXzogQywgZXJyX186IHBuIH0gPSBPKFwic3RyaXBlLXByXCIpLCBobiA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnVuaW9uKFt6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgbW4gPSBldChcbiAgYXN5bmMgKHsgY29udGV4dDogdCB9KSA9PiB7XG4gICAgQyhcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIFBSLi4uXCIpO1xuICAgIGNvbnN0IHIgPSB0dCh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGhuKTtcbiAgICBDKFwiSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGUgPSB0LmFueUNkZUNvbm5lY3Rpb24sIG4gPSBhd2FpdCB6KGUpLCBpID0gbi5tb2RlID09PSBcInNldHVwXCI7XG4gICAgQyhcIkdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudFwiKTtcbiAgICBjb25zdCBzID0gYXdhaXQgWmUoZSwgbi50b2tlbiwgaSwgdm9pZCAwKSwgYSA9IGF3YWl0IG5yKFxuICAgICAgci5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBzLmFtb3VudEF0b20sXG4gICAgICBzLmN1cnJlbmN5LFxuICAgICAgaVxuICAgICk7XG4gICAgQyhcIkNoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRcIik7XG4gICAgY29uc3QgYyA9IGF3YWl0IGEuY2FuTWFrZVBheW1lbnQoKTtcbiAgICByZXR1cm4gYyA9PT0gbnVsbCA/IChwbihcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH0pIDogKEMoXCJTdHJpcGUgUFIgZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIENhbiBtYWtlIHBheW1lbnRcIiwgYyksIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHByOiBhLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBjLmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGMuZ29vZ2xlUGF5XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiksIHluID0gcGUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogaSxcbiAgICBpbml0UmVzdWx0OiBzXG4gIH0pID0+IHtcbiAgICBpZiAoQyhcIlJ1bm5pbmcgU3RyaXBlIFBSIGZsb3cuLi5cIiksIGkucHJvdmlkZXIgIT09IHIucHJvdmlkZXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVyIG1pc21hdGNoLiBFeHBlY3RlZCAke2kucHJvdmlkZXJ9LCBnb3QgJHtyLnByb3ZpZGVyfWApO1xuICAgIGNvbnN0IGEgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGMgPSBzLnByO1xuICAgIGlmIChpICE9IG51bGwgJiYgaS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCBwID0gaS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0O1xuICAgICAgQyhcIk92ZXJyaWRpbmcgUFIgYW1vdW50IHdpdGhcIiwgcCksIGduKGMsIHAuYW1vdW50LCBwLnBlbmRpbmcpO1xuICAgIH1cbiAgICBDKFwiU2hvd2luZyBQUiBkaWFsb2cuLi5cIiksIGMuc2hvdygpO1xuICAgIGNvbnN0IGwgPSBhd2FpdCBpcihjKTtcbiAgICBDKFwiU3RyaXBlIFBNIGFkZGVkIGV2ZW50OlwiLCBsKSwgQyhcIk1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgdSA9IF9uKGUsIGwpLCBkID0gbWUodSwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIEMoXCJQUiBkaWFsb2cgZmluaXNoZWQuIFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBoID0gYXdhaXQgRHIoYSwge1xuICAgICAgZmllbGRzOiBkLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByXG4gICAgfSksIF8gPSBibihoKTtcbiAgICBDKFwiQ29uZmlybWluZyBQUiB3aXRoIFN0cmlwZS4uLlwiKSwgYXdhaXQgc3IoXywgbCk7XG4gICAgY29uc3QgZiA9IGF3YWl0IHooYSk7XG4gICAgaWYgKGYubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBDKFwiQ29uZmlybWluZyBwYXltZW50IGZsb3cgZm9yIHNldHVwLi4uXCIpO1xuICAgICAgY29uc3QgcCA9IGF3YWl0IGZlKGEsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBmLnRva2VuXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBoZShwKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBDKFwiUGVyZm9ybWluZyBjaGVja291dC4uLlwiKTtcbiAgICAgIGNvbnN0IHAgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogZi50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IHIucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IGRbbS5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBkW20uWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBkW20uQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBkW20uUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBmLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBmLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHJcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgV2UoYSwgcCkgfTtcbiAgICB9XG4gIH1cbiksIF9uID0gKHQsIHIpID0+IHtcbiAgdmFyIGEsIGMsIGwsIHU7XG4gIGNvbnN0IGUgPSB7IC4uLnQgfSwgW24sIC4uLmldID0gKChjID0gKGEgPSByLnBheWVyTmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGEudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogYy5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgcyA9IGkuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICByZXR1cm4gZVttLkZJUlNUX05BTUVdID0gZVttLkZJUlNUX05BTUVdIHx8IG4gfHwgXCJfT1BfVU5LTk9XTlwiLCBlW20uTEFTVF9OQU1FXSA9IGVbbS5MQVNUX05BTUVdIHx8IHMgfHwgXCJfT1BfVU5LTk9XTlwiLCBlW20uRU1BSUxdID0gZVttLkVNQUlMXSB8fCByLnBheWVyRW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCBlW20uWklQX0NPREVdID0gZVttLlpJUF9DT0RFXSB8fCAoKGwgPSByLnNoaXBwaW5nQWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IGwucG9zdGFsQ29kZSkgfHwgXCIwMDAwMFwiLCBlW20uQ09VTlRSWV0gPSBlW20uQ09VTlRSWV0gfHwgKCh1ID0gci5zaGlwcGluZ0FkZHJlc3MpID09IG51bGwgPyB2b2lkIDAgOiB1LmNvdW50cnkpIHx8IFwiVVNcIiwgQyhcIkZpbmFsIGZvcm0gaW5wdXRzOlwiLCBlKSwgZTtcbn0sIGduID0gKHQsIHIsIGUpID0+IHtcbiAgdC51cGRhdGUoe1xuICAgIHRvdGFsOiB7XG4gICAgICBhbW91bnQ6IHIuYW1vdW50QXRvbSxcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBwZW5kaW5nOiBlXG4gICAgfSxcbiAgICBjdXJyZW5jeTogci5jdXJyZW5jeVxuICB9KTtcbn0sIGJuID0gKHQpID0+IHtcbiAgaWYgKHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIG9jY3VycmVkLlxuRGV0YWlsczogZ290ICR7dC5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RofSByZXF1aXJlZCB1c2VyIGFjdGlvbnNgKTtcbiAgcmV0dXJuIGVyLnBhcnNlKHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbn0sIGl0ID0gKHQsIHIsIGUpID0+IHtcbiAgY29uc3QgbiA9IHQuZmlsdGVyKChpKSA9PiBpLnByb3ZpZGVyID09PSByKTtcbiAgaWYgKG4ubGVuZ3RoID09PSAwKVxuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJDUE1zIGxpc3RcIiwgdCksIG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3J9JyBhbmQgcHJvY2Vzc29yICcke2V9J2ApO1xuICBpZiAobi5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIkNQTXMgbGlzdFwiLCB0KSwgbmV3IEVycm9yKGBNb3JlIHRoYW4gb25lIENQTSBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3J9JyBhbmQgcHJvY2Vzc29yICcke2V9J2ApO1xuICByZXR1cm4gblswXTtcbn0sIFUgPSB7XG4gIC8vIOKciyBOb3RlOiBGb3IgZmxvd3MgdGhhdCByZXF1aXJlIGluaXRpYWxpemF0aW9uLCBwbGVhc2UgYWRkIHRoZW0gdG8gYGluaXQtZmxvd3MudHNgXG4gIC8vIENvbW1vblxuICBjb21tb25DQzoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogY25cbiAgfSxcbiAgLy8gU3RyaXBlXG4gIHN0cmlwZVBSOiB7XG4gICAgaW5pdDogbW4sXG4gICAgcnVuOiB5blxuICB9LFxuICBzdHJpcGVMaW5rOiB7XG4gICAgaW5pdDogQnIsXG4gICAgcnVuOiBKclxuICB9XG4gIC8vIPCfkYkgQWRkIG1vcmUgZmxvd3MgaGVyZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufTtcbnZhciBjZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgcmV0dXJuIGNlID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24oZSwgbikge1xuICAgIGUuX19wcm90b19fID0gbjtcbiAgfSB8fCBmdW5jdGlvbihlLCBuKSB7XG4gICAgZm9yICh2YXIgaSBpbiBuKSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobiwgaSkgJiYgKGVbaV0gPSBuW2ldKTtcbiAgfSwgY2UodCwgcik7XG59O1xuZnVuY3Rpb24gTCh0LCByKSB7XG4gIGlmICh0eXBlb2YgciAhPSBcImZ1bmN0aW9uXCIgJiYgciAhPT0gbnVsbClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhyKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIGNlKHQsIHIpO1xuICBmdW5jdGlvbiBlKCkge1xuICAgIHRoaXMuY29uc3RydWN0b3IgPSB0O1xuICB9XG4gIHQucHJvdG90eXBlID0gciA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUocikgOiAoZS5wcm90b3R5cGUgPSByLnByb3RvdHlwZSwgbmV3IGUoKSk7XG59XG5mdW5jdGlvbiB2bih0LCByLCBlLCBuKSB7XG4gIGZ1bmN0aW9uIGkocykge1xuICAgIHJldHVybiBzIGluc3RhbmNlb2YgZSA/IHMgOiBuZXcgZShmdW5jdGlvbihhKSB7XG4gICAgICBhKHMpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXcgKGUgfHwgKGUgPSBQcm9taXNlKSkoZnVuY3Rpb24ocywgYSkge1xuICAgIGZ1bmN0aW9uIGMoZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShuLm5leHQoZCkpO1xuICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICBhKGgpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBsKGQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUobi50aHJvdyhkKSk7XG4gICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgIGEoaCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHUoZCkge1xuICAgICAgZC5kb25lID8gcyhkLnZhbHVlKSA6IGkoZC52YWx1ZSkudGhlbihjLCBsKTtcbiAgICB9XG4gICAgdSgobiA9IG4uYXBwbHkodCwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHN0KHQsIHIpIHtcbiAgdmFyIGUgPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHtcbiAgICBpZiAoc1swXSAmIDEpIHRocm93IHNbMV07XG4gICAgcmV0dXJuIHNbMV07XG4gIH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIG4sIGksIHMsIGEgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gIHJldHVybiBhLm5leHQgPSBjKDApLCBhLnRocm93ID0gYygxKSwgYS5yZXR1cm4gPSBjKDIpLCB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiAoYVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBhO1xuICBmdW5jdGlvbiBjKHUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oZCkge1xuICAgICAgcmV0dXJuIGwoW3UsIGRdKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGwodSkge1xuICAgIGlmIChuKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICBmb3IgKDsgYSAmJiAoYSA9IDAsIHVbMF0gJiYgKGUgPSAwKSksIGU7ICkgdHJ5IHtcbiAgICAgIGlmIChuID0gMSwgaSAmJiAocyA9IHVbMF0gJiAyID8gaS5yZXR1cm4gOiB1WzBdID8gaS50aHJvdyB8fCAoKHMgPSBpLnJldHVybikgJiYgcy5jYWxsKGkpLCAwKSA6IGkubmV4dCkgJiYgIShzID0gcy5jYWxsKGksIHVbMV0pKS5kb25lKSByZXR1cm4gcztcbiAgICAgIHN3aXRjaCAoaSA9IDAsIHMgJiYgKHUgPSBbdVswXSAmIDIsIHMudmFsdWVdKSwgdVswXSkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBzID0gdTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBlLmxhYmVsKyssIHsgdmFsdWU6IHVbMV0sIGRvbmU6ICExIH07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBlLmxhYmVsKyssIGkgPSB1WzFdLCB1ID0gWzBdO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgdSA9IGUub3BzLnBvcCgpLCBlLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKHMgPSBlLnRyeXMsICEocyA9IHMubGVuZ3RoID4gMCAmJiBzW3MubGVuZ3RoIC0gMV0pICYmICh1WzBdID09PSA2IHx8IHVbMF0gPT09IDIpKSB7XG4gICAgICAgICAgICBlID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodVswXSA9PT0gMyAmJiAoIXMgfHwgdVsxXSA+IHNbMF0gJiYgdVsxXSA8IHNbM10pKSB7XG4gICAgICAgICAgICBlLmxhYmVsID0gdVsxXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodVswXSA9PT0gNiAmJiBlLmxhYmVsIDwgc1sxXSkge1xuICAgICAgICAgICAgZS5sYWJlbCA9IHNbMV0sIHMgPSB1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzICYmIGUubGFiZWwgPCBzWzJdKSB7XG4gICAgICAgICAgICBlLmxhYmVsID0gc1syXSwgZS5vcHMucHVzaCh1KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzWzJdICYmIGUub3BzLnBvcCgpLCBlLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB1ID0gci5jYWxsKHQsIGUpO1xuICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgIHUgPSBbNiwgZF0sIGkgPSAwO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBuID0gcyA9IDA7XG4gICAgfVxuICAgIGlmICh1WzBdICYgNSkgdGhyb3cgdVsxXTtcbiAgICByZXR1cm4geyB2YWx1ZTogdVswXSA/IHVbMV0gOiB2b2lkIDAsIGRvbmU6ICEwIH07XG4gIH1cbn1cbmZ1bmN0aW9uICQodCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgZSA9IHIgJiYgdFtyXSwgbiA9IDA7XG4gIGlmIChlKSByZXR1cm4gZS5jYWxsKHQpO1xuICBpZiAodCAmJiB0eXBlb2YgdC5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0ICYmIG4gPj0gdC5sZW5ndGggJiYgKHQgPSB2b2lkIDApLCB7IHZhbHVlOiB0ICYmIHRbbisrXSwgZG9uZTogIXQgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IociA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cbmZ1bmN0aW9uIFcodCwgcikge1xuICB2YXIgZSA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIHRbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFlKSByZXR1cm4gdDtcbiAgdmFyIG4gPSBlLmNhbGwodCksIGksIHMgPSBbXSwgYTtcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHIgPT09IHZvaWQgMCB8fCByLS0gPiAwKSAmJiAhKGkgPSBuLm5leHQoKSkuZG9uZTsgKSBzLnB1c2goaS52YWx1ZSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBhID0geyBlcnJvcjogYyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpICYmICFpLmRvbmUgJiYgKGUgPSBuLnJldHVybikgJiYgZS5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoYSkgdGhyb3cgYS5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHM7XG59XG5mdW5jdGlvbiBRKHQsIHIsIGUpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBpID0gci5sZW5ndGgsIHM7IG4gPCBpOyBuKyspXG4gICAgKHMgfHwgIShuIGluIHIpKSAmJiAocyB8fCAocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHIsIDAsIG4pKSwgc1tuXSA9IHJbbl0pO1xuICByZXR1cm4gdC5jb25jYXQocyB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyKSk7XG59XG5mdW5jdGlvbiB4KHQpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiB4ID8gKHRoaXMudiA9IHQsIHRoaXMpIDogbmV3IHgodCk7XG59XG5mdW5jdGlvbiB3bih0LCByLCBlKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBuID0gZS5hcHBseSh0LCByIHx8IFtdKSwgaSwgcyA9IFtdO1xuICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIGMoXCJuZXh0XCIpLCBjKFwidGhyb3dcIiksIGMoXCJyZXR1cm5cIiwgYSksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGk7XG4gIGZ1bmN0aW9uIGEoZikge1xuICAgIHJldHVybiBmdW5jdGlvbihwKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHApLnRoZW4oZiwgaCk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBjKGYsIHApIHtcbiAgICBuW2ZdICYmIChpW2ZdID0gZnVuY3Rpb24oeSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGosIFkpIHtcbiAgICAgICAgcy5wdXNoKFtmLCB5LCBqLCBZXSkgPiAxIHx8IGwoZiwgeSk7XG4gICAgICB9KTtcbiAgICB9LCBwICYmIChpW2ZdID0gcChpW2ZdKSkpO1xuICB9XG4gIGZ1bmN0aW9uIGwoZiwgcCkge1xuICAgIHRyeSB7XG4gICAgICB1KG5bZl0ocCkpO1xuICAgIH0gY2F0Y2ggKHkpIHtcbiAgICAgIF8oc1swXVszXSwgeSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHUoZikge1xuICAgIGYudmFsdWUgaW5zdGFuY2VvZiB4ID8gUHJvbWlzZS5yZXNvbHZlKGYudmFsdWUudikudGhlbihkLCBoKSA6IF8oc1swXVsyXSwgZik7XG4gIH1cbiAgZnVuY3Rpb24gZChmKSB7XG4gICAgbChcIm5leHRcIiwgZik7XG4gIH1cbiAgZnVuY3Rpb24gaChmKSB7XG4gICAgbChcInRocm93XCIsIGYpO1xuICB9XG4gIGZ1bmN0aW9uIF8oZiwgcCkge1xuICAgIGYocCksIHMuc2hpZnQoKSwgcy5sZW5ndGggJiYgbChzWzBdWzBdLCBzWzBdWzFdKTtcbiAgfVxufVxuZnVuY3Rpb24gRW4odCkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgciA9IHRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBlO1xuICByZXR1cm4gciA/IHIuY2FsbCh0KSA6ICh0ID0gdHlwZW9mICQgPT0gXCJmdW5jdGlvblwiID8gJCh0KSA6IHRbU3ltYm9sLml0ZXJhdG9yXSgpLCBlID0ge30sIG4oXCJuZXh0XCIpLCBuKFwidGhyb3dcIiksIG4oXCJyZXR1cm5cIiksIGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGUpO1xuICBmdW5jdGlvbiBuKHMpIHtcbiAgICBlW3NdID0gdFtzXSAmJiBmdW5jdGlvbihhKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oYywgbCkge1xuICAgICAgICBhID0gdFtzXShhKSwgaShjLCBsLCBhLmRvbmUsIGEudmFsdWUpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBpKHMsIGEsIGMsIGwpIHtcbiAgICBQcm9taXNlLnJlc29sdmUobCkudGhlbihmdW5jdGlvbih1KSB7XG4gICAgICBzKHsgdmFsdWU6IHUsIGRvbmU6IGMgfSk7XG4gICAgfSwgYSk7XG4gIH1cbn1cbmZ1bmN0aW9uIEUodCkge1xuICByZXR1cm4gdHlwZW9mIHQgPT0gXCJmdW5jdGlvblwiO1xufVxuZnVuY3Rpb24gcmUodCkge1xuICB2YXIgciA9IGZ1bmN0aW9uKG4pIHtcbiAgICBFcnJvci5jYWxsKG4pLCBuLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gIH0sIGUgPSB0KHIpO1xuICByZXR1cm4gZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksIGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gZSwgZTtcbn1cbnZhciBvZSA9IHJlKGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICB0KHRoaXMpLCB0aGlzLm1lc3NhZ2UgPSBlID8gZS5sZW5ndGggKyBgIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG5gICsgZS5tYXAoZnVuY3Rpb24obiwgaSkge1xuICAgICAgcmV0dXJuIGkgKyAxICsgXCIpIFwiICsgbi50b1N0cmluZygpO1xuICAgIH0pLmpvaW4oYFxuICBgKSA6IFwiXCIsIHRoaXMubmFtZSA9IFwiVW5zdWJzY3JpcHRpb25FcnJvclwiLCB0aGlzLmVycm9ycyA9IGU7XG4gIH07XG59KTtcbmZ1bmN0aW9uIFgodCwgcikge1xuICBpZiAodCkge1xuICAgIHZhciBlID0gdC5pbmRleE9mKHIpO1xuICAgIDAgPD0gZSAmJiB0LnNwbGljZShlLCAxKTtcbiAgfVxufVxudmFyIEggPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdChyKSB7XG4gICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSByLCB0aGlzLmNsb3NlZCA9ICExLCB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciwgZSwgbiwgaSwgcztcbiAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICB0aGlzLmNsb3NlZCA9ICEwO1xuICAgICAgdmFyIGEgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICBpZiAoYSlcbiAgICAgICAgaWYgKHRoaXMuX3BhcmVudGFnZSA9IG51bGwsIEFycmF5LmlzQXJyYXkoYSkpXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGMgPSAkKGEpLCBsID0gYy5uZXh0KCk7ICFsLmRvbmU7IGwgPSBjLm5leHQoKSkge1xuICAgICAgICAgICAgICB2YXIgdSA9IGwudmFsdWU7XG4gICAgICAgICAgICAgIHUucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKHkpIHtcbiAgICAgICAgICAgIHIgPSB7IGVycm9yOiB5IH07XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGwgJiYgIWwuZG9uZSAmJiAoZSA9IGMucmV0dXJuKSAmJiBlLmNhbGwoYyk7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICBpZiAocikgdGhyb3cgci5lcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBhLnJlbW92ZSh0aGlzKTtcbiAgICAgIHZhciBkID0gdGhpcy5pbml0aWFsVGVhcmRvd247XG4gICAgICBpZiAoRShkKSlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBkKCk7XG4gICAgICAgIH0gY2F0Y2ggKHkpIHtcbiAgICAgICAgICBzID0geSBpbnN0YW5jZW9mIG9lID8geS5lcnJvcnMgOiBbeV07XG4gICAgICAgIH1cbiAgICAgIHZhciBoID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgIGlmIChoKSB7XG4gICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAodmFyIF8gPSAkKGgpLCBmID0gXy5uZXh0KCk7ICFmLmRvbmU7IGYgPSBfLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIHAgPSBmLnZhbHVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAga2UocCk7XG4gICAgICAgICAgICB9IGNhdGNoICh5KSB7XG4gICAgICAgICAgICAgIHMgPSBzID8/IFtdLCB5IGluc3RhbmNlb2Ygb2UgPyBzID0gUShRKFtdLCBXKHMpKSwgVyh5LmVycm9ycykpIDogcy5wdXNoKHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoeSkge1xuICAgICAgICAgIG4gPSB7IGVycm9yOiB5IH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGYgJiYgIWYuZG9uZSAmJiAoaSA9IF8ucmV0dXJuKSAmJiBpLmNhbGwoXyk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChuKSB0aHJvdyBuLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHMpXG4gICAgICAgIHRocm93IG5ldyBvZShzKTtcbiAgICB9XG4gIH0sIHQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZTtcbiAgICBpZiAociAmJiByICE9PSB0aGlzKVxuICAgICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgICBrZShyKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAociBpbnN0YW5jZW9mIHQpIHtcbiAgICAgICAgICBpZiAoci5jbG9zZWQgfHwgci5faGFzUGFyZW50KHRoaXMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIHIuX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICAodGhpcy5fZmluYWxpemVycyA9IChlID0gdGhpcy5fZmluYWxpemVycykgIT09IG51bGwgJiYgZSAhPT0gdm9pZCAwID8gZSA6IFtdKS5wdXNoKHIpO1xuICAgICAgfVxuICB9LCB0LnByb3RvdHlwZS5faGFzUGFyZW50ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIHJldHVybiBlID09PSByIHx8IEFycmF5LmlzQXJyYXkoZSkgJiYgZS5pbmNsdWRlcyhyKTtcbiAgfSwgdC5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KGUpID8gKGUucHVzaChyKSwgZSkgOiBlID8gW2UsIHJdIDogcjtcbiAgfSwgdC5wcm90b3R5cGUuX3JlbW92ZVBhcmVudCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICBlID09PSByID8gdGhpcy5fcGFyZW50YWdlID0gbnVsbCA6IEFycmF5LmlzQXJyYXkoZSkgJiYgWChlLCByKTtcbiAgfSwgdC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5fZmluYWxpemVycztcbiAgICBlICYmIFgoZSwgciksIHIgaW5zdGFuY2VvZiB0ICYmIHIuX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgfSwgdC5FTVBUWSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByID0gbmV3IHQoKTtcbiAgICByZXR1cm4gci5jbG9zZWQgPSAhMCwgcjtcbiAgfSgpLCB0O1xufSgpLCBhdCA9IEguRU1QVFk7XG5mdW5jdGlvbiBjdCh0KSB7XG4gIHJldHVybiB0IGluc3RhbmNlb2YgSCB8fCB0ICYmIFwiY2xvc2VkXCIgaW4gdCAmJiBFKHQucmVtb3ZlKSAmJiBFKHQuYWRkKSAmJiBFKHQudW5zdWJzY3JpYmUpO1xufVxuZnVuY3Rpb24ga2UodCkge1xuICBFKHQpID8gdCgpIDogdC51bnN1YnNjcmliZSgpO1xufVxudmFyIHV0ID0ge1xuICBvblVuaGFuZGxlZEVycm9yOiBudWxsLFxuICBvblN0b3BwZWROb3RpZmljYXRpb246IG51bGwsXG4gIFByb21pc2U6IHZvaWQgMCxcbiAgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzogITEsXG4gIHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDogITFcbn0sIGx0ID0ge1xuICBzZXRUaW1lb3V0OiBmdW5jdGlvbih0LCByKSB7XG4gICAgZm9yICh2YXIgZSA9IFtdLCBuID0gMjsgbiA8IGFyZ3VtZW50cy5sZW5ndGg7IG4rKylcbiAgICAgIGVbbiAtIDJdID0gYXJndW1lbnRzW25dO1xuICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgUShbdCwgcl0sIFcoZSkpKTtcbiAgfSxcbiAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIChjbGVhclRpbWVvdXQpKHQpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59O1xuZnVuY3Rpb24gZHQodCkge1xuICBsdC5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgIHRocm93IHQ7XG4gIH0pO1xufVxuZnVuY3Rpb24gUGUoKSB7XG59XG5mdW5jdGlvbiBLKHQpIHtcbiAgdCgpO1xufVxudmFyIHllID0gZnVuY3Rpb24odCkge1xuICBMKHIsIHQpO1xuICBmdW5jdGlvbiByKGUpIHtcbiAgICB2YXIgbiA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBuLmlzU3RvcHBlZCA9ICExLCBlID8gKG4uZGVzdGluYXRpb24gPSBlLCBjdChlKSAmJiBlLmFkZChuKSkgOiBuLmRlc3RpbmF0aW9uID0gUG4sIG47XG4gIH1cbiAgcmV0dXJuIHIuY3JlYXRlID0gZnVuY3Rpb24oZSwgbiwgaSkge1xuICAgIHJldHVybiBuZXcgdWUoZSwgbiwgaSk7XG4gIH0sIHIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgdGhpcy5fbmV4dChlKTtcbiAgfSwgci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHRoaXMuX2Vycm9yKGUpKTtcbiAgfSwgci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fY29tcGxldGUoKSk7XG4gIH0sIHIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jbG9zZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksIHRoaXMuZGVzdGluYXRpb24gPSBudWxsKTtcbiAgfSwgci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KGUpO1xuICB9LCByLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIHIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIHI7XG59KEgpLCBTbiA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xuZnVuY3Rpb24gaWUodCwgcikge1xuICByZXR1cm4gU24uY2FsbCh0LCByKTtcbn1cbnZhciBDbiA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB0KHIpIHtcbiAgICB0aGlzLnBhcnRpYWxPYnNlcnZlciA9IHI7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAoZS5uZXh0KVxuICAgICAgdHJ5IHtcbiAgICAgICAgZS5uZXh0KHIpO1xuICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICBKKG4pO1xuICAgICAgfVxuICB9LCB0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmIChlLmVycm9yKVxuICAgICAgdHJ5IHtcbiAgICAgICAgZS5lcnJvcihyKTtcbiAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgSihuKTtcbiAgICAgIH1cbiAgICBlbHNlXG4gICAgICBKKHIpO1xuICB9LCB0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHIuY29tcGxldGUpXG4gICAgICB0cnkge1xuICAgICAgICByLmNvbXBsZXRlKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIEooZSk7XG4gICAgICB9XG4gIH0sIHQ7XG59KCksIHVlID0gZnVuY3Rpb24odCkge1xuICBMKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4sIGkpIHtcbiAgICB2YXIgcyA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzLCBhO1xuICAgIGlmIChFKGUpIHx8ICFlKVxuICAgICAgYSA9IHtcbiAgICAgICAgbmV4dDogZSA/PyB2b2lkIDAsXG4gICAgICAgIGVycm9yOiBuID8/IHZvaWQgMCxcbiAgICAgICAgY29tcGxldGU6IGkgPz8gdm9pZCAwXG4gICAgICB9O1xuICAgIGVsc2Uge1xuICAgICAgdmFyIGM7XG4gICAgICBzICYmIHV0LnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCA/IChjID0gT2JqZWN0LmNyZWF0ZShlKSwgYy51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcy51bnN1YnNjcmliZSgpO1xuICAgICAgfSwgYSA9IHtcbiAgICAgICAgbmV4dDogZS5uZXh0ICYmIGllKGUubmV4dCwgYyksXG4gICAgICAgIGVycm9yOiBlLmVycm9yICYmIGllKGUuZXJyb3IsIGMpLFxuICAgICAgICBjb21wbGV0ZTogZS5jb21wbGV0ZSAmJiBpZShlLmNvbXBsZXRlLCBjKVxuICAgICAgfSkgOiBhID0gZTtcbiAgICB9XG4gICAgcmV0dXJuIHMuZGVzdGluYXRpb24gPSBuZXcgQ24oYSksIHM7XG4gIH1cbiAgcmV0dXJuIHI7XG59KHllKTtcbmZ1bmN0aW9uIEoodCkge1xuICBkdCh0KTtcbn1cbmZ1bmN0aW9uIGtuKHQpIHtcbiAgdGhyb3cgdDtcbn1cbnZhciBQbiA9IHtcbiAgY2xvc2VkOiAhMCxcbiAgbmV4dDogUGUsXG4gIGVycm9yOiBrbixcbiAgY29tcGxldGU6IFBlXG59LCBfZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLm9ic2VydmFibGUgfHwgXCJAQG9ic2VydmFibGVcIjtcbn0oKTtcbmZ1bmN0aW9uIEluKHQpIHtcbiAgcmV0dXJuIHQ7XG59XG5mdW5jdGlvbiBPbih0KSB7XG4gIHJldHVybiB0Lmxlbmd0aCA9PT0gMCA/IEluIDogdC5sZW5ndGggPT09IDEgPyB0WzBdIDogZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiB0LnJlZHVjZShmdW5jdGlvbihuLCBpKSB7XG4gICAgICByZXR1cm4gaShuKTtcbiAgICB9LCBlKTtcbiAgfTtcbn1cbnZhciBUID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHQocikge1xuICAgIHIgJiYgKHRoaXMuX3N1YnNjcmliZSA9IHIpO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gbmV3IHQoKTtcbiAgICByZXR1cm4gZS5zb3VyY2UgPSB0aGlzLCBlLm9wZXJhdG9yID0gciwgZTtcbiAgfSwgdC5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24ociwgZSwgbikge1xuICAgIHZhciBpID0gdGhpcywgcyA9IEFuKHIpID8gciA6IG5ldyB1ZShyLCBlLCBuKTtcbiAgICByZXR1cm4gSyhmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhID0gaSwgYyA9IGEub3BlcmF0b3IsIGwgPSBhLnNvdXJjZTtcbiAgICAgIHMuYWRkKGMgPyBjLmNhbGwocywgbCkgOiBsID8gaS5fc3Vic2NyaWJlKHMpIDogaS5fdHJ5U3Vic2NyaWJlKHMpKTtcbiAgICB9KSwgcztcbiAgfSwgdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZShyKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByLmVycm9yKGUpO1xuICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKHIsIGUpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgcmV0dXJuIGUgPSBJZShlKSwgbmV3IGUoZnVuY3Rpb24oaSwgcykge1xuICAgICAgdmFyIGEgPSBuZXcgdWUoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbihjKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHIoYyk7XG4gICAgICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICAgICAgcyhsKSwgYS51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IHMsXG4gICAgICAgIGNvbXBsZXRlOiBpXG4gICAgICB9KTtcbiAgICAgIG4uc3Vic2NyaWJlKGEpO1xuICAgIH0pO1xuICB9LCB0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlO1xuICAgIHJldHVybiAoZSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLnN1YnNjcmliZShyKTtcbiAgfSwgdC5wcm90b3R5cGVbX2VdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIHQucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciByID0gW10sIGUgPSAwOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKVxuICAgICAgcltlXSA9IGFyZ3VtZW50c1tlXTtcbiAgICByZXR1cm4gT24ocikodGhpcyk7XG4gIH0sIHQucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXM7XG4gICAgcmV0dXJuIHIgPSBJZShyKSwgbmV3IHIoZnVuY3Rpb24obiwgaSkge1xuICAgICAgdmFyIHM7XG4gICAgICBlLnN1YnNjcmliZShmdW5jdGlvbihhKSB7XG4gICAgICAgIHJldHVybiBzID0gYTtcbiAgICAgIH0sIGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgcmV0dXJuIGkoYSk7XG4gICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG4ocyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSwgdC5jcmVhdGUgPSBmdW5jdGlvbihyKSB7XG4gICAgcmV0dXJuIG5ldyB0KHIpO1xuICB9LCB0O1xufSgpO1xuZnVuY3Rpb24gSWUodCkge1xuICB2YXIgcjtcbiAgcmV0dXJuIChyID0gdCA/PyB1dC5Qcm9taXNlKSAhPT0gbnVsbCAmJiByICE9PSB2b2lkIDAgPyByIDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIFJuKHQpIHtcbiAgcmV0dXJuIHQgJiYgRSh0Lm5leHQpICYmIEUodC5lcnJvcikgJiYgRSh0LmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIEFuKHQpIHtcbiAgcmV0dXJuIHQgJiYgdCBpbnN0YW5jZW9mIHllIHx8IFJuKHQpICYmIGN0KHQpO1xufVxuZnVuY3Rpb24gVG4odCkge1xuICByZXR1cm4gRSh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmxpZnQpO1xufVxuZnVuY3Rpb24gam4odCkge1xuICByZXR1cm4gZnVuY3Rpb24ocikge1xuICAgIGlmIChUbihyKSlcbiAgICAgIHJldHVybiByLmxpZnQoZnVuY3Rpb24oZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiB0KGUsIHRoaXMpO1xuICAgICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgICAgdGhpcy5lcnJvcihuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlXCIpO1xuICB9O1xufVxuZnVuY3Rpb24gTW4odCwgciwgZSwgbiwgaSkge1xuICByZXR1cm4gbmV3IExuKHQsIHIsIGUsIG4sIGkpO1xufVxudmFyIExuID0gZnVuY3Rpb24odCkge1xuICBMKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4sIGksIHMsIGEsIGMpIHtcbiAgICB2YXIgbCA9IHQuY2FsbCh0aGlzLCBlKSB8fCB0aGlzO1xuICAgIHJldHVybiBsLm9uRmluYWxpemUgPSBhLCBsLnNob3VsZFVuc3Vic2NyaWJlID0gYywgbC5fbmV4dCA9IG4gPyBmdW5jdGlvbih1KSB7XG4gICAgICB0cnkge1xuICAgICAgICBuKHUpO1xuICAgICAgfSBjYXRjaCAoZCkge1xuICAgICAgICBlLmVycm9yKGQpO1xuICAgICAgfVxuICAgIH0gOiB0LnByb3RvdHlwZS5fbmV4dCwgbC5fZXJyb3IgPSBzID8gZnVuY3Rpb24odSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcyh1KTtcbiAgICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgICAgZS5lcnJvcihkKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IDogdC5wcm90b3R5cGUuX2Vycm9yLCBsLl9jb21wbGV0ZSA9IGkgPyBmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGkoKTtcbiAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgZS5lcnJvcih1KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IDogdC5wcm90b3R5cGUuX2NvbXBsZXRlLCBsO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlO1xuICAgIGlmICghdGhpcy5zaG91bGRVbnN1YnNjcmliZSB8fCB0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpIHtcbiAgICAgIHZhciBuID0gdGhpcy5jbG9zZWQ7XG4gICAgICB0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpLCAhbiAmJiAoKGUgPSB0aGlzLm9uRmluYWxpemUpID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCB8fCBlLmNhbGwodGhpcykpO1xuICAgIH1cbiAgfSwgcjtcbn0oeWUpLCBEbiA9IHJlKGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHQodGhpcyksIHRoaXMubmFtZSA9IFwiT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JcIiwgdGhpcy5tZXNzYWdlID0gXCJvYmplY3QgdW5zdWJzY3JpYmVkXCI7XG4gIH07XG59KSwgZnQgPSBmdW5jdGlvbih0KSB7XG4gIEwociwgdCk7XG4gIGZ1bmN0aW9uIHIoKSB7XG4gICAgdmFyIGUgPSB0LmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gZS5jbG9zZWQgPSAhMSwgZS5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgZS5vYnNlcnZlcnMgPSBbXSwgZS5pc1N0b3BwZWQgPSAhMSwgZS5oYXNFcnJvciA9ICExLCBlLnRocm93bkVycm9yID0gbnVsbCwgZTtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IG5ldyBPZSh0aGlzLCB0aGlzKTtcbiAgICByZXR1cm4gbi5vcGVyYXRvciA9IGUsIG47XG4gIH0sIHIucHJvdG90eXBlLl90aHJvd0lmQ2xvc2VkID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgdGhyb3cgbmV3IERuKCk7XG4gIH0sIHIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIEsoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSwgcztcbiAgICAgIGlmIChuLl90aHJvd0lmQ2xvc2VkKCksICFuLmlzU3RvcHBlZCkge1xuICAgICAgICBuLmN1cnJlbnRPYnNlcnZlcnMgfHwgKG4uY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20obi5vYnNlcnZlcnMpKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBhID0gJChuLmN1cnJlbnRPYnNlcnZlcnMpLCBjID0gYS5uZXh0KCk7ICFjLmRvbmU7IGMgPSBhLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIGwgPSBjLnZhbHVlO1xuICAgICAgICAgICAgbC5uZXh0KGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICAgIGkgPSB7IGVycm9yOiB1IH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGMgJiYgIWMuZG9uZSAmJiAocyA9IGEucmV0dXJuKSAmJiBzLmNhbGwoYSk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChpKSB0aHJvdyBpLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9LCByLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgSyhmdW5jdGlvbigpIHtcbiAgICAgIGlmIChuLl90aHJvd0lmQ2xvc2VkKCksICFuLmlzU3RvcHBlZCkge1xuICAgICAgICBuLmhhc0Vycm9yID0gbi5pc1N0b3BwZWQgPSAhMCwgbi50aHJvd25FcnJvciA9IGU7XG4gICAgICAgIGZvciAodmFyIGkgPSBuLm9ic2VydmVyczsgaS5sZW5ndGg7IClcbiAgICAgICAgICBpLnNoaWZ0KCkuZXJyb3IoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIHIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUgPSB0aGlzO1xuICAgIEsoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoZS5fdGhyb3dJZkNsb3NlZCgpLCAhZS5pc1N0b3BwZWQpIHtcbiAgICAgICAgZS5pc1N0b3BwZWQgPSAhMDtcbiAgICAgICAgZm9yICh2YXIgbiA9IGUub2JzZXJ2ZXJzOyBuLmxlbmd0aDsgKVxuICAgICAgICAgIG4uc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCByLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSAhMCwgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICB9LCBPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgZTtcbiAgICAgIHJldHVybiAoKGUgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5sZW5ndGgpID4gMDtcbiAgICB9LFxuICAgIGVudW1lcmFibGU6ICExLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIHIucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIGUpO1xuICB9LCByLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoZSksIHRoaXMuX2lubmVyU3Vic2NyaWJlKGUpO1xuICB9LCByLnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzLCBpID0gdGhpcywgcyA9IGkuaGFzRXJyb3IsIGEgPSBpLmlzU3RvcHBlZCwgYyA9IGkub2JzZXJ2ZXJzO1xuICAgIHJldHVybiBzIHx8IGEgPyBhdCA6ICh0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBjLnB1c2goZSksIG5ldyBIKGZ1bmN0aW9uKCkge1xuICAgICAgbi5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgWChjLCBlKTtcbiAgICB9KSk7XG4gIH0sIHIucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gdGhpcywgaSA9IG4uaGFzRXJyb3IsIHMgPSBuLnRocm93bkVycm9yLCBhID0gbi5pc1N0b3BwZWQ7XG4gICAgaSA/IGUuZXJyb3IocykgOiBhICYmIGUuY29tcGxldGUoKTtcbiAgfSwgci5wcm90b3R5cGUuYXNPYnNlcnZhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUgPSBuZXcgVCgpO1xuICAgIHJldHVybiBlLnNvdXJjZSA9IHRoaXMsIGU7XG4gIH0sIHIuY3JlYXRlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIHJldHVybiBuZXcgT2UoZSwgbik7XG4gIH0sIHI7XG59KFQpLCBPZSA9IGZ1bmN0aW9uKHQpIHtcbiAgTChyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgdmFyIGkgPSB0LmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gaS5kZXN0aW5hdGlvbiA9IGUsIGkuc291cmNlID0gbiwgaTtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiwgaTtcbiAgICAoaSA9IChuID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbi5uZXh0KSA9PT0gbnVsbCB8fCBpID09PSB2b2lkIDAgfHwgaS5jYWxsKG4sIGUpO1xuICB9LCByLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiwgaTtcbiAgICAoaSA9IChuID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbi5lcnJvcikgPT09IG51bGwgfHwgaSA9PT0gdm9pZCAwIHx8IGkuY2FsbChuLCBlKTtcbiAgfSwgci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSwgbjtcbiAgICAobiA9IChlID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5jb21wbGV0ZSkgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwIHx8IG4uY2FsbChlKTtcbiAgfSwgci5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiwgaTtcbiAgICByZXR1cm4gKGkgPSAobiA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLnN1YnNjcmliZShlKSkgIT09IG51bGwgJiYgaSAhPT0gdm9pZCAwID8gaSA6IGF0O1xuICB9LCByO1xufShmdCksIEZuID0ge1xuICBub3c6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBEYXRlLm5vdygpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59LCB4biA9IGZ1bmN0aW9uKHQpIHtcbiAgTChyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgcmV0dXJuIHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgcjtcbn0oSCksIFJlID0ge1xuICBzZXRJbnRlcnZhbDogZnVuY3Rpb24odCwgcikge1xuICAgIGZvciAodmFyIGUgPSBbXSwgbiA9IDI7IG4gPCBhcmd1bWVudHMubGVuZ3RoOyBuKyspXG4gICAgICBlW24gLSAyXSA9IGFyZ3VtZW50c1tuXTtcbiAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBRKFt0LCByXSwgVyhlKSkpO1xuICB9LFxuICBjbGVhckludGVydmFsOiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGNsZWFySW50ZXJ2YWwodCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIE5uID0gZnVuY3Rpb24odCkge1xuICBMKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4pIHtcbiAgICB2YXIgaSA9IHQuY2FsbCh0aGlzLCBlLCBuKSB8fCB0aGlzO1xuICAgIHJldHVybiBpLnNjaGVkdWxlciA9IGUsIGkud29yayA9IG4sIGkucGVuZGluZyA9ICExLCBpO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICB2YXIgaTtcbiAgICBpZiAobiA9PT0gdm9pZCAwICYmIChuID0gMCksIHRoaXMuY2xvc2VkKVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgdGhpcy5zdGF0ZSA9IGU7XG4gICAgdmFyIHMgPSB0aGlzLmlkLCBhID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgcmV0dXJuIHMgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoYSwgcywgbikpLCB0aGlzLnBlbmRpbmcgPSAhMCwgdGhpcy5kZWxheSA9IG4sIHRoaXMuaWQgPSAoaSA9IHRoaXMuaWQpICE9PSBudWxsICYmIGkgIT09IHZvaWQgMCA/IGkgOiB0aGlzLnJlcXVlc3RBc3luY0lkKGEsIHRoaXMuaWQsIG4pLCB0aGlzO1xuICB9LCByLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uKGUsIG4sIGkpIHtcbiAgICByZXR1cm4gaSA9PT0gdm9pZCAwICYmIChpID0gMCksIFJlLnNldEludGVydmFsKGUuZmx1c2guYmluZChlLCB0aGlzKSwgaSk7XG4gIH0sIHIucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24oZSwgbiwgaSkge1xuICAgIGlmIChpID09PSB2b2lkIDAgJiYgKGkgPSAwKSwgaSAhPSBudWxsICYmIHRoaXMuZGVsYXkgPT09IGkgJiYgdGhpcy5wZW5kaW5nID09PSAhMSlcbiAgICAgIHJldHVybiBuO1xuICAgIG4gIT0gbnVsbCAmJiBSZS5jbGVhckludGVydmFsKG4pO1xuICB9LCByLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXCJleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uXCIpO1xuICAgIHRoaXMucGVuZGluZyA9ICExO1xuICAgIHZhciBpID0gdGhpcy5fZXhlY3V0ZShlLCBuKTtcbiAgICBpZiAoaSlcbiAgICAgIHJldHVybiBpO1xuICAgIHRoaXMucGVuZGluZyA9PT0gITEgJiYgdGhpcy5pZCAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCkpO1xuICB9LCByLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICB2YXIgaSA9ICExLCBzO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLndvcmsoZSk7XG4gICAgfSBjYXRjaCAoYSkge1xuICAgICAgaSA9ICEwLCBzID0gYSB8fCBuZXcgRXJyb3IoXCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yXCIpO1xuICAgIH1cbiAgICBpZiAoaSlcbiAgICAgIHJldHVybiB0aGlzLnVuc3Vic2NyaWJlKCksIHM7XG4gIH0sIHIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdmFyIGUgPSB0aGlzLCBuID0gZS5pZCwgaSA9IGUuc2NoZWR1bGVyLCBzID0gaS5hY3Rpb25zO1xuICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbCwgdGhpcy5wZW5kaW5nID0gITEsIFgocywgdGhpcyksIG4gIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoaSwgbiwgbnVsbCkpLCB0aGlzLmRlbGF5ID0gbnVsbCwgdC5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH0sIHI7XG59KHhuKSwgQWUgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdChyLCBlKSB7XG4gICAgZSA9PT0gdm9pZCAwICYmIChlID0gdC5ub3cpLCB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSByLCB0aGlzLm5vdyA9IGU7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24ociwgZSwgbikge1xuICAgIHJldHVybiBlID09PSB2b2lkIDAgJiYgKGUgPSAwKSwgbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLCByKS5zY2hlZHVsZShuLCBlKTtcbiAgfSwgdC5ub3cgPSBGbi5ub3csIHQ7XG59KCksIFVuID0gZnVuY3Rpb24odCkge1xuICBMKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4pIHtcbiAgICBuID09PSB2b2lkIDAgJiYgKG4gPSBBZS5ub3cpO1xuICAgIHZhciBpID0gdC5jYWxsKHRoaXMsIGUsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIGkuYWN0aW9ucyA9IFtdLCBpLl9hY3RpdmUgPSAhMSwgaTtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzLmFjdGlvbnM7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgbi5wdXNoKGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgaTtcbiAgICB0aGlzLl9hY3RpdmUgPSAhMDtcbiAgICBkb1xuICAgICAgaWYgKGkgPSBlLmV4ZWN1dGUoZS5zdGF0ZSwgZS5kZWxheSkpXG4gICAgICAgIGJyZWFrO1xuICAgIHdoaWxlIChlID0gbi5zaGlmdCgpKTtcbiAgICBpZiAodGhpcy5fYWN0aXZlID0gITEsIGkpIHtcbiAgICAgIGZvciAoOyBlID0gbi5zaGlmdCgpOyApXG4gICAgICAgIGUudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRocm93IGk7XG4gICAgfVxuICB9LCByO1xufShBZSksICRuID0gbmV3IFVuKE5uKSwgVm4gPSBmdW5jdGlvbih0KSB7XG4gIHJldHVybiB0ICYmIHR5cGVvZiB0Lmxlbmd0aCA9PSBcIm51bWJlclwiICYmIHR5cGVvZiB0ICE9IFwiZnVuY3Rpb25cIjtcbn07XG5mdW5jdGlvbiBxbih0KSB7XG4gIHJldHVybiBFKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQudGhlbik7XG59XG5mdW5jdGlvbiB6bih0KSB7XG4gIHJldHVybiBFKHRbX2VdKTtcbn1cbmZ1bmN0aW9uIEhuKHQpIHtcbiAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIEUodCA9PSBudWxsID8gdm9pZCAwIDogdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuZnVuY3Rpb24gWW4odCkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArICh0ICE9PSBudWxsICYmIHR5cGVvZiB0ID09IFwib2JqZWN0XCIgPyBcImFuIGludmFsaWQgb2JqZWN0XCIgOiBcIidcIiArIHQgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cbmZ1bmN0aW9uIEJuKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCAhPSBcImZ1bmN0aW9uXCIgfHwgIVN5bWJvbC5pdGVyYXRvciA/IFwiQEBpdGVyYXRvclwiIDogU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIEpuID0gQm4oKTtcbmZ1bmN0aW9uIEtuKHQpIHtcbiAgcmV0dXJuIEUodCA9PSBudWxsID8gdm9pZCAwIDogdFtKbl0pO1xufVxuZnVuY3Rpb24gR24odCkge1xuICByZXR1cm4gd24odGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSwgbiwgaSwgcztcbiAgICByZXR1cm4gc3QodGhpcywgZnVuY3Rpb24oYSkge1xuICAgICAgc3dpdGNoIChhLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBlID0gdC5nZXRSZWFkZXIoKSwgYS5sYWJlbCA9IDE7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBhLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pLCBhLmxhYmVsID0gMjtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiBbNCwgeChlLnJlYWQoKSldO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIG4gPSBhLnNlbnQoKSwgaSA9IG4udmFsdWUsIHMgPSBuLmRvbmUsIHMgPyBbNCwgeCh2b2lkIDApXSA6IFszLCA1XTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBbMiwgYS5zZW50KCldO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIFs0LCB4KGkpXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBbNCwgYS5zZW50KCldO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgcmV0dXJuIGEuc2VudCgpLCBbMywgMl07XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHJldHVybiBlLnJlbGVhc2VMb2NrKCksIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFpuKHQpIHtcbiAgcmV0dXJuIEUodCA9PSBudWxsID8gdm9pZCAwIDogdC5nZXRSZWFkZXIpO1xufVxuZnVuY3Rpb24gV24odCkge1xuICBpZiAodCBpbnN0YW5jZW9mIFQpXG4gICAgcmV0dXJuIHQ7XG4gIGlmICh0ICE9IG51bGwpIHtcbiAgICBpZiAoem4odCkpXG4gICAgICByZXR1cm4gUW4odCk7XG4gICAgaWYgKFZuKHQpKVxuICAgICAgcmV0dXJuIFhuKHQpO1xuICAgIGlmIChxbih0KSlcbiAgICAgIHJldHVybiBlbyh0KTtcbiAgICBpZiAoSG4odCkpXG4gICAgICByZXR1cm4gcHQodCk7XG4gICAgaWYgKEtuKHQpKVxuICAgICAgcmV0dXJuIHRvKHQpO1xuICAgIGlmIChabih0KSlcbiAgICAgIHJldHVybiBybyh0KTtcbiAgfVxuICB0aHJvdyBZbih0KTtcbn1cbmZ1bmN0aW9uIFFuKHQpIHtcbiAgcmV0dXJuIG5ldyBUKGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRbX2VdKCk7XG4gICAgaWYgKEUoZS5zdWJzY3JpYmUpKVxuICAgICAgcmV0dXJuIGUuc3Vic2NyaWJlKHIpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZVwiKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBYbih0KSB7XG4gIHJldHVybiBuZXcgVChmdW5jdGlvbihyKSB7XG4gICAgZm9yICh2YXIgZSA9IDA7IGUgPCB0Lmxlbmd0aCAmJiAhci5jbG9zZWQ7IGUrKylcbiAgICAgIHIubmV4dCh0W2VdKTtcbiAgICByLmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZW8odCkge1xuICByZXR1cm4gbmV3IFQoZnVuY3Rpb24ocikge1xuICAgIHQudGhlbihmdW5jdGlvbihlKSB7XG4gICAgICByLmNsb3NlZCB8fCAoci5uZXh0KGUpLCByLmNvbXBsZXRlKCkpO1xuICAgIH0sIGZ1bmN0aW9uKGUpIHtcbiAgICAgIHJldHVybiByLmVycm9yKGUpO1xuICAgIH0pLnRoZW4obnVsbCwgZHQpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHRvKHQpIHtcbiAgcmV0dXJuIG5ldyBUKGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSwgbjtcbiAgICB0cnkge1xuICAgICAgZm9yICh2YXIgaSA9ICQodCksIHMgPSBpLm5leHQoKTsgIXMuZG9uZTsgcyA9IGkubmV4dCgpKSB7XG4gICAgICAgIHZhciBhID0gcy52YWx1ZTtcbiAgICAgICAgaWYgKHIubmV4dChhKSwgci5jbG9zZWQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgIGUgPSB7IGVycm9yOiBjIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHMgJiYgIXMuZG9uZSAmJiAobiA9IGkucmV0dXJuKSAmJiBuLmNhbGwoaSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoZSkgdGhyb3cgZS5lcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgci5jb21wbGV0ZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHB0KHQpIHtcbiAgcmV0dXJuIG5ldyBUKGZ1bmN0aW9uKHIpIHtcbiAgICBubyh0LCByKS5jYXRjaChmdW5jdGlvbihlKSB7XG4gICAgICByZXR1cm4gci5lcnJvcihlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBybyh0KSB7XG4gIHJldHVybiBwdChHbih0KSk7XG59XG5mdW5jdGlvbiBubyh0LCByKSB7XG4gIHZhciBlLCBuLCBpLCBzO1xuICByZXR1cm4gdm4odGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBhLCBjO1xuICAgIHJldHVybiBzdCh0aGlzLCBmdW5jdGlvbihsKSB7XG4gICAgICBzd2l0Y2ggKGwubGFiZWwpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGwudHJ5cy5wdXNoKFswLCA1LCA2LCAxMV0pLCBlID0gRW4odCksIGwubGFiZWwgPSAxO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuIFs0LCBlLm5leHQoKV07XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAobiA9IGwuc2VudCgpLCAhIW4uZG9uZSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICBpZiAoYSA9IG4udmFsdWUsIHIubmV4dChhKSwgci5jbG9zZWQpXG4gICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgIGwubGFiZWwgPSAzO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIFszLCAxXTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIGMgPSBsLnNlbnQoKSwgaSA9IHsgZXJyb3I6IGMgfSwgWzMsIDExXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBsLnRyeXMucHVzaChbNiwgLCA5LCAxMF0pLCBuICYmICFuLmRvbmUgJiYgKHMgPSBlLnJldHVybikgPyBbNCwgcy5jYWxsKGUpXSA6IFszLCA4XTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIGwuc2VudCgpLCBsLmxhYmVsID0gODtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiBbMywgMTBdO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgaWYgKGkpIHRocm93IGkuZXJyb3I7XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHJldHVybiByLmNvbXBsZXRlKCksIFsyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBvbyh0LCByLCBlLCBuLCBpKSB7XG4gIG4gPT09IHZvaWQgMCAmJiAobiA9IDApLCBpID09PSB2b2lkIDAgJiYgKGkgPSAhMSk7XG4gIHZhciBzID0gci5zY2hlZHVsZShmdW5jdGlvbigpIHtcbiAgICBlKCksIGkgPyB0LmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIG4pKSA6IHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgfSwgbik7XG4gIGlmICh0LmFkZChzKSwgIWkpXG4gICAgcmV0dXJuIHM7XG59XG5mdW5jdGlvbiBpbyh0LCByKSB7XG4gIHZhciBlID0gRSh0KSA/IHQgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdDtcbiAgfSwgbiA9IGZ1bmN0aW9uKGkpIHtcbiAgICByZXR1cm4gaS5lcnJvcihlKCkpO1xuICB9O1xuICByZXR1cm4gbmV3IFQobik7XG59XG52YXIgc28gPSByZShmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0KHRoaXMpLCB0aGlzLm5hbWUgPSBcIkVtcHR5RXJyb3JcIiwgdGhpcy5tZXNzYWdlID0gXCJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZVwiO1xuICB9O1xufSk7XG5mdW5jdGlvbiBhbyh0LCByKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlLCBuKSB7XG4gICAgdmFyIGkgPSAhMSwgcztcbiAgICB0LnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiBmdW5jdGlvbihhKSB7XG4gICAgICAgIHMgPSBhLCBpID0gITA7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IG4sXG4gICAgICBjb21wbGV0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIGkgPyBlKHMpIDogbihuZXcgc28oKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gY28odCkge1xuICByZXR1cm4gdCBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKHQpO1xufVxudmFyIHVvID0gcmUoZnVuY3Rpb24odCkge1xuICByZXR1cm4gZnVuY3Rpb24oZSkge1xuICAgIGUgPT09IHZvaWQgMCAmJiAoZSA9IG51bGwpLCB0KHRoaXMpLCB0aGlzLm1lc3NhZ2UgPSBcIlRpbWVvdXQgaGFzIG9jY3VycmVkXCIsIHRoaXMubmFtZSA9IFwiVGltZW91dEVycm9yXCIsIHRoaXMuaW5mbyA9IGU7XG4gIH07XG59KTtcbmZ1bmN0aW9uIGxvKHQsIHIpIHtcbiAgdmFyIGUgPSBjbyh0KSA/IHsgZmlyc3Q6IHQgfSA6IHR5cGVvZiB0ID09IFwibnVtYmVyXCIgPyB7IGVhY2g6IHQgfSA6IHQsIG4gPSBlLmZpcnN0LCBpID0gZS5lYWNoLCBzID0gZS53aXRoLCBhID0gcyA9PT0gdm9pZCAwID8gZm8gOiBzLCBjID0gZS5zY2hlZHVsZXIsIGwgPSBjID09PSB2b2lkIDAgPyAkbiA6IGMsIHUgPSBlLm1ldGEsIGQgPSB1ID09PSB2b2lkIDAgPyBudWxsIDogdTtcbiAgaWYgKG4gPT0gbnVsbCAmJiBpID09IG51bGwpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIHRpbWVvdXQgcHJvdmlkZWQuXCIpO1xuICByZXR1cm4gam4oZnVuY3Rpb24oaCwgXykge1xuICAgIHZhciBmLCBwLCB5ID0gbnVsbCwgaiA9IDAsIFkgPSBmdW5jdGlvbihuZSkge1xuICAgICAgcCA9IG9vKF8sIGwsIGZ1bmN0aW9uKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGYudW5zdWJzY3JpYmUoKSwgV24oYSh7XG4gICAgICAgICAgICBtZXRhOiBkLFxuICAgICAgICAgICAgbGFzdFZhbHVlOiB5LFxuICAgICAgICAgICAgc2VlbjogalxuICAgICAgICAgIH0pKS5zdWJzY3JpYmUoXyk7XG4gICAgICAgIH0gY2F0Y2ggKGh0KSB7XG4gICAgICAgICAgXy5lcnJvcihodCk7XG4gICAgICAgIH1cbiAgICAgIH0sIG5lKTtcbiAgICB9O1xuICAgIGYgPSBoLnN1YnNjcmliZShNbihfLCBmdW5jdGlvbihuZSkge1xuICAgICAgcCA9PSBudWxsIHx8IHAudW5zdWJzY3JpYmUoKSwgaisrLCBfLm5leHQoeSA9IG5lKSwgaSA+IDAgJiYgWShpKTtcbiAgICB9LCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24oKSB7XG4gICAgICBwICE9IG51bGwgJiYgcC5jbG9zZWQgfHwgcCA9PSBudWxsIHx8IHAudW5zdWJzY3JpYmUoKSwgeSA9IG51bGw7XG4gICAgfSkpLCAhaiAmJiBZKG4gIT0gbnVsbCA/IHR5cGVvZiBuID09IFwibnVtYmVyXCIgPyBuIDogK24gLSBsLm5vdygpIDogaSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZm8odCkge1xuICB0aHJvdyBuZXcgdW8odCk7XG59XG5jbGFzcyBHIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAocikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6ICEwLCBsb2FkZWRWYWx1ZTogciB9LCB0aGlzLl9zdWJqZWN0Lm5leHQociksIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9LCB0aGlzLnRocm93ID0gKHIsIGUpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImVycm9yXCIsIGlzU3VjY2VzczogITEsIGVycm9yOiByLCBlcnJNc2c6IGUgfSwgdGhpcy5fc3ViamVjdC5lcnJvcihyKTtcbiAgICB9LCB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHIpID0+IHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiA/IHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUgOiByLCB0aGlzLnN1YnNjcmliZSA9IChyKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHIodGhpcy5fY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIgJiYgcih0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IGUgPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAobmV4dCk6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICByKHRoaXMuX2N1cnJlbnQpLCBlLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImVycm9yXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICByKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLndhaXRGb3JMb2FkID0gKHIpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuX2N1cnJlbnQuZXJyb3IpO1xuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiICYmIFhlKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgZSA9IHtcbiAgICAgICAgZmlyc3Q6IHIudGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gaW8oKCkgPT4gbmV3IEVycm9yKHIudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGFvKHRoaXMuX3N1YmplY3QucGlwZShsbyhlKSkpO1xuICAgIH0sIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogITEgfSwgdGhpcy5fc3ViamVjdCA9IG5ldyBmdCgpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5jb25zdCB7IGxvZ19fOiBwbywgZXJyX186IGhvIH0gPSBPKFwiaW5pdC1mbG93c1wiKSwgVGUgPSAodCwgcikgPT4ge1xuICBjb25zdCBlID0gbmV3IEcoKTtcbiAgcmV0dXJuIHtcbiAgICBwdWJsaXNoZXI6IGUsXG4gICAgaW5pdGlhbGl6ZTogYXN5bmMgKG4pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChlLmN1cnJlbnQuaXNTdWNjZXNzKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgZmxvdyBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLlwiKTtcbiAgICAgICAgY29uc3QgaSA9IGF3YWl0IHIobik7XG4gICAgICAgIHBvKGDinJQgJHt0fSBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gUmVzdWx0OmAsIGkpLCBlLnNldChpKTtcbiAgICAgIH0gY2F0Y2ggKGkpIHtcbiAgICAgICAgaG8oYPCdma0gJHt0fSBmbG93IGluaXRpYWxpemF0aW9uIGZhaWxlZC4gRXJyb3I6YCwgTihpKSwgXCJEZXRhaWxzOlwiLCBpKSwgZS50aHJvdyhpLCBOKGkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59LCBtbyA9IGFzeW5jICh0LCByLCBlKSA9PiB7XG4gIGF3YWl0IFByb21pc2UuYWxsKE9iamVjdC52YWx1ZXModCkubWFwKChuKSA9PiBuLmluaXRpYWxpemUoeyBjb250ZXh0OiByLCBmb3JtQ2FsbGJhY2tzOiBlIH0pKSk7XG59LCB5byA9ICgpID0+ICh7XG4gIC8vIPCfkqEgQWRkIG5ldyBpbml0IGZsb3dzIGhlcmVcbiAgLy8gU3RyaXBlIFBSXG4gIHN0cmlwZVBSOiBUZShcIlN0cmlwZSBQUlwiLCBVLnN0cmlwZVBSLmluaXQpLFxuICAvLyBTdHJpcGUgTGlua1xuICBzdHJpcGVMaW5rOiBUZShcIlN0cmlwZSBMaW5rXCIsIFUuc3RyaXBlTGluay5pbml0KVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufSksIHsgZXJyX186IF9vIH0gPSBPKFwiZm9ybS1jYWxsYmFja3NcIiksIGsgPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpLCBqZSA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiBrLFxuICBvbkJsdXI6IGssXG4gIG9uQ2hhbmdlOiBrLFxuICBvbkxvYWQ6IGssXG4gIG9uTG9hZEVycm9yOiBrLFxuICBvblZhbGlkYXRpb25FcnJvcjogayxcbiAgb25DaGVja291dFN0YXJ0ZWQ6IGssXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBrLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IGssXG4gIG9uQ2hlY2tvdXRFcnJvcjogayxcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IGtcbn0pLCBSID0gY2xhc3MgUiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0Q2FsbGJhY2tzID0gKHIpID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IFIuY3JlYXRlRW1wdHlDYWxsYmFja3MoKSwgT2JqZWN0LmVudHJpZXMocikuZm9yRWFjaCgoW2UsIG5dKSA9PiB7XG4gICAgICAgIGNvbnN0IGkgPSBDdChlLCBuID8/IFIuTk9PUCwgX28pO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3NbZV0gPSBpO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5fY2FsbGJhY2tzID0gUi5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVhZC1vbmx5IHZlcnNpb24gb2YgdGhlIGNhbGxiYWNrcyBvYmplY3QuXG4gICAqL1xuICBnZXQgZ2V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2NhbGxiYWNrcyB9O1xuICB9XG59O1xuUi5OT09QID0gKCkgPT4ge1xufSwgUi5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgY29uc3QgciA9IHt9O1xuICByZXR1cm4gT2JqZWN0LmtleXMoamUua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChlKSA9PiB7XG4gICAgcltlXSA9IFIuTk9PUDtcbiAgfSksIHI7XG59LCBSLmZyb21PYmplY3QgPSAocikgPT4ge1xuICBjb25zdCBlID0gbmV3IFIoKTtcbiAgcmV0dXJuIGUuc2V0Q2FsbGJhY2tzKGplLnBhcnNlKHIpKSwgZTtcbn07XG5sZXQgbGUgPSBSO1xuY2xhc3MgZ28ge1xuICBjb25zdHJ1Y3RvcihyLCBlLCBuLCBpKSB7XG4gICAgdGhpcy5oYW5kbGVNZXNzYWdlID0gKHMpID0+IHtcbiAgICAgIGlmICghcy5zb3VyY2UpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNvdXJjZSBmb3VuZFwiKTtcbiAgICAgIGlmIChNZShzLm9yaWdpbikgIT09IE1lKHRoaXMuYmFzZVVybCkgfHwgdHlwZW9mIHMuZGF0YSA9PSBcIm9iamVjdFwiICYmIHMuZGF0YS5wZW5wYWwpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNvbnN0IGEgPSB1cihKU09OLnBhcnNlKHMuZGF0YSkpO1xuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlRXZlbnQoYSkpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgZWxlbWVudElkOiBsLCBwYXlsb2FkOiB1IH0gPSBhLCBkID0gdS50eXBlO1xuICAgICAgc3dpdGNoIChkKSB7XG4gICAgICAgIGNhc2UgXCJMQVlPVVRcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLnNldEZvcm1IZWlnaHQodS5oZWlnaHQgPyBgJHt1LmhlaWdodH1weGAgOiBcIjEwMCVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJGT0NVU1wiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Gb2N1cyhsLCB1LmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkJMVVJcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQmx1cihsLCB1LmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkNIQU5HRVwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGFuZ2UobCwgdS5lbGVtZW50VHlwZSwgdS5lcnJvcnMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BREVEXCI6XG4gICAgICAgICAgdGhpcy5ldmVudFRhcmdldHNbbF0gPSBzLnNvdXJjZSwgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRlZCh1KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURfRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZEVycm9yKHUubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJWQUxJREFUSU9OX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcih1LmVsZW1lbnRUeXBlLCB1LmVycm9ycywgbCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIFVuaGFuZGxlZCBldmVudCB0eXBlOlwiLCBkKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnZhbGlkYXRlRXZlbnQgPSAocykgPT4gcy5mb3JtSWQgIT09IHRoaXMuZm9ybUlkIHx8ICFzLmVsZW1lbnRJZCA/IChjb25zb2xlLmxvZyhcIltPSlNdIGZvcm1JZFwiLCB0aGlzLmZvcm1JZCwgcy5mb3JtSWQpLCBjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgdW5rbm93biBldmVudDpcIiwgcyksICExKSA6IHRoaXMubm9uY2VzLmhhcyhzLm5vbmNlKSA/IChjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgZHVwbGljYXRlIGV2ZW50OlwiLCBzKSwgITEpIDogKHRoaXMubm9uY2VzLmFkZChzLm5vbmNlKSwgITApLCB0aGlzLmV2ZW50VGFyZ2V0cyA9IHt9LCB0aGlzLm5vbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksIHRoaXMuZm9ybUlkID0gciwgdGhpcy5iYXNlVXJsID0gZSwgdGhpcy5mb3JtQ2FsbGJhY2tzID0gbiwgdGhpcy5pbnRlcm5hbENhbGxiYWNrcyA9IGk7XG4gIH1cbn1cbmNvbnN0IE1lID0gKHQpID0+IG5ldyBVUkwodCkub3JpZ2luO1xuYXN5bmMgZnVuY3Rpb24gYm8odCwgcikge1xuICBjb25zdCBuID0gYXdhaXQgY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZTogdCxcbiAgICBkZWJ1ZzogITEsXG4gICAgY2hpbGRPcmlnaW46IHJcbiAgfSkucHJvbWlzZSwgaSA9IGF3YWl0IGxyKG4pO1xuICBpZiAoIWRyKG4sIGkpKVxuICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCBpbnZhbGlkIENERSBjb25uZWN0aW9uIG9iamVjdFwiKTtcbiAgcmV0dXJuIG47XG59XG5jbGFzcyB2byB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICB9XG4gIGFkZENvbm5lY3Rpb24ociwgZSkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMuc2V0KHIsIGUpO1xuICB9XG4gIGdldENvbm5lY3Rpb24oKSB7XG4gICAgY29uc3QgciA9IHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmICghcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gbm90IGZvdW5kXCIpO1xuICAgIHJldHVybiByO1xuICB9XG4gIGdldEFsbENvbm5lY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zO1xuICB9XG59XG5jb25zdCB3byA9ICh0LCByLCBlKSA9PiB7XG4gIGNvbnN0IHsgc3RyaXBlUFI6IG4gfSA9IHQ7XG4gIG4ucHVibGlzaGVyLnN1YnNjcmliZSgoaSkgPT4ge1xuICAgIGlmIChpLmlzU3VjY2Vzcykge1xuICAgICAgY29uc3QgcyA9IGkubG9hZGVkVmFsdWUsIGEgPSBzLmlzQXZhaWxhYmxlICYmIHMuYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5LCBjID0gcy5pc0F2YWlsYWJsZSAmJiBzLmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXksIGwgPSB7XG4gICAgICAgIGFwcGxlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGEsXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodSkgPT4ge1xuICAgICAgICAgICAgYSAmJiBMZShcImFwcGxlX3BheVwiLCBzLCByLCBlLCB1KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdvb2dsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBjLFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHUpID0+IHtcbiAgICAgICAgICAgIGMgJiYgTGUoXCJnb29nbGVfcGF5XCIsIHMsIHIsIGUsIHUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGUuZ2V0Lm9uUGF5bWVudFJlcXVlc3RMb2FkKGwpO1xuICAgIH1cbiAgfSk7XG59LCBMZSA9ICh0LCByLCBlLCBuLCBpKSA9PiBVLnN0cmlwZVBSLnJ1bih7XG4gIGNvbnRleHQ6IGUsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogaXQoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCB0KSxcbiAgbm9uQ2RlRm9ybUlucHV0czogZGUoZS5mb3JtRGl2KSxcbiAgZm9ybUNhbGxiYWNrczogbixcbiAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiB0LCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBpID09IG51bGwgPyB2b2lkIDAgOiBpLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgaW5pdFJlc3VsdDogclxufSksIERlID0gXCJUaGUgc2VjdXJlIGZvcm0gZmFpbGVkIHRvIGxvYWQgcHJvcGVybHkuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24sIG9yIHRyeSBhZ2FpbiBsYXRlci5cIiwgeyBsb2dfXzogTSwgZXJyX186IHNlIH0gPSBPKFwib3AtZm9ybVwiKSwgQSA9IGNsYXNzIEEge1xuICBjb25zdHJ1Y3RvcihyKSB7XG4gICAgdGhpcy5jZGVMb2FkRXZlbnQgPSBuZXcgRygpLCB0aGlzLmFueUNkZUNvbm4gPSBuZXcgRygpLCB0aGlzLmNvbnRleHQgPSBuZXcgRygpLCB0aGlzLmluaXRGbG93cyA9IHlvKCksIHRoaXMuc3RhcnRGb3JtSW5pdCA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE0oXCJJbml0aWFsaXppbmcgT3BlblBheSBmb3JtOlwiKSwgTShcIuKUnCBXYWl0aW5nIGZvciBDREUgbG9hZCBldmVudC4uLlwiKTtcbiAgICAgICAgY29uc3QgZSA9IGF3YWl0IHRoaXMuY2RlTG9hZEV2ZW50LndhaXRGb3JMb2FkKHtcbiAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgdGltZW91dEVyck1zZzogRGVcbiAgICAgICAgfSk7XG4gICAgICAgIE0oXCLilJwgQ0RFIGxvYWQgZXZlbnQgcmVjZWl2ZWRcIiksIE0oXCLilJwgV2FpdGluZyBmb3IgQ0RFIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgICAgIGNvbnN0IG4gPSBhd2FpdCB0aGlzLmFueUNkZUNvbm4ud2FpdEZvckxvYWQoe1xuICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBEZVxuICAgICAgICB9KTtcbiAgICAgICAgTShcIuKUnCBDREUgY29ubmVjdGlvbiByZWNlaXZlZFwiKSwgTShcIuKUnCBDcmVhdGluZyBPSlMgY29udGV4dCwgc2V0dGluZyB1cCBoYW5kbGVycy4uLlwiKTtcbiAgICAgICAgY29uc3QgaSA9IEEuYnVpbGRPanNGbG93Q29udGV4dChcbiAgICAgICAgICB0aGlzLmNvbmZpZyxcbiAgICAgICAgICBlLFxuICAgICAgICAgIG4sXG4gICAgICAgICAgdGhpcy5nZXRGb3JtRGl2KClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnNldChpKSwgd28odGhpcy5pbml0Rmxvd3MsIGksIHRoaXMuZm9ybUNhbGxiYWNrcyksIE0oXCLilJwgU3RhcnRpbmcgT0pTIGluaXQgZmxvd3MuLi5cIiksIGF3YWl0IG1vKHRoaXMuaW5pdEZsb3dzLCBpLCB0aGlzLmZvcm1DYWxsYmFja3MpLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZChlLnRvdGFsQW1vdW50QXRvbXMsIGUuY3VycmVuY3kpLCBNKFwi4pWwIERvbmUgaW5pdGlhbGl6aW5nIE9KUyBmbG93cy5cIik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnN0IG4gPSBOKGUpO1xuICAgICAgICBzZShcIuKVsCBFcnJvciBpbml0aWFsaXppbmcgT1AgZm9ybTpcIiwgbiksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkRXJyb3Iobik7XG4gICAgICB9XG4gICAgfSwgdGhpcy5zZXRGb3JtSGVpZ2h0ID0gKGUpID0+IHtcbiAgICAgIHRoaXMuZm9ybVByb3BlcnRpZXMuaGVpZ2h0ID0gZSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgJiYgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cykuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICBuICYmIChuLm5vZGUuc3R5bGUuaGVpZ2h0ID0gZSk7XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZGVkID0gKGUpID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8IHRoaXMuY2RlTG9hZEV2ZW50LnNldChlKTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZEVycm9yID0gKGUpID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8IHRoaXMuY2RlTG9hZEV2ZW50LnRocm93KG5ldyBFcnJvcihlKSwgZSk7XG4gICAgfSwgdGhpcy5jcmVhdGVFbGVtZW50ID0gKGUsIG4gPSB7fSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNvbmZpZykgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBmb3JtIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICAgIGNvbnN0IGkgPSBrdC5wYXJzZShlKSwgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIiksIGEgPSB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcobik7XG4gICAgICBzLm5hbWUgPSBgJHtpfS1lbGVtZW50YDtcbiAgICAgIGNvbnN0IGMgPSBuZXcgVVJMKGAvYXBwL3YxLyR7cy5uYW1lfS9gLCB0aGlzLmNvbmZpZy5iYXNlVXJsKTtcbiAgICAgIHJldHVybiBjLnNlYXJjaCA9IGEudG9TdHJpbmcoKSwgcy5zcmMgPSBjLmhyZWYsIHMuc3R5bGUuYm9yZGVyID0gXCJub25lXCIsIHMuc3R5bGUud2lkdGggPSBcIjEwMCVcIiwgdGhpcy5yZWdpc3RlcklmcmFtZShpLCBzKTtcbiAgICB9LCB0aGlzLnJlZ2lzdGVySWZyYW1lID0gKGUsIG4pID0+IHtcbiAgICAgIGNvbnN0IGkgPSB7XG4gICAgICAgIHR5cGU6IGUsXG4gICAgICAgIG5vZGU6IG4sXG4gICAgICAgIG1vdW50OiAocykgPT4ge1xuICAgICAgICAgIHZhciBhO1xuICAgICAgICAgIHJldHVybiAoYSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocykpID09IG51bGwgPyB2b2lkIDAgOiBhLmFwcGVuZENoaWxkKG4pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdFRvRWxlbWVudCh7IHR5cGU6IGkudHlwZSwgbm9kZTogaS5ub2RlIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyB8fCAodGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSB7XG4gICAgICAgIFtGLkNBUkRdOiB2b2lkIDAsXG4gICAgICAgIFtGLkNBUkRfTlVNQkVSXTogdm9pZCAwLFxuICAgICAgICBbRi5DQVJEX0VYUElSWV06IHZvaWQgMCxcbiAgICAgICAgW0YuQ0FSRF9DVkNdOiB2b2lkIDBcbiAgICAgIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50c1tlXSA9IGksIGk7XG4gICAgfSwgdGhpcy5idWlsZFF1ZXJ5U3RyaW5nID0gKGUpID0+IHtcbiAgICAgIGNvbnN0IG4gPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICByZXR1cm4gbi5hcHBlbmQoXCJyZWZlcmVyXCIsIHRoaXMucmVmZXJyZXIpLCBuLmFwcGVuZChcImZvcm1JZFwiLCB0aGlzLmZvcm1JZCksIGUuc3R5bGVzICYmIG4uYXBwZW5kKFwic3R5bGVzXCIsIGNyKGUuc3R5bGVzKSksIG4uYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbiksIG47XG4gICAgfSwgdGhpcy5jb25uZWN0VG9FbGVtZW50ID0gKGUpID0+IHtcbiAgICAgIGJvKGUubm9kZSkudGhlbigobikgPT4ge1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmFkZENvbm5lY3Rpb24oZS50eXBlLCBuKSwgdGhpcy5hbnlDZGVDb25uLmN1cnJlbnQuaXNTdWNjZXNzIHx8IHRoaXMuYW55Q2RlQ29ubi5zZXQobik7XG4gICAgICB9KS5jYXRjaCgobikgPT4gc2UoXCJbRk9STV0gRXJyb3IgY29ubmVjdGluZyB0byBDREUgaWZyYW1lXCIsIG4pKTtcbiAgICB9LCB0aGlzLmdldEZvcm1EaXYgPSAoKSA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keSwgdGhpcy5zdWJtaXRDYXJkID0gKCkgPT4ge1xuICAgICAgY29uc3QgZSA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgIGlmICghZSkge1xuICAgICAgICBzZShcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFUuY29tbW9uQ0MucnVuKHtcbiAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBpdChlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGRlKGUuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgY3VycmVudENkZUNvbm5lY3Rpb25zOiB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKClcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIC8vIFRoaXMgZmxvdyByZXF1aXJlcyBubyBpbml0aWFsaXphdGlvblxuICAgICAgfSk7XG4gICAgfSwgdGhpcy5zdWJtaXQgPSB0aGlzLnN1Ym1pdENhcmQsIHRoaXMuZGVzdHJveSA9ICgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgZSBvZiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID8/IHt9KSlcbiAgICAgICAgZSAmJiBlLm5vZGUucmVtb3ZlKCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSk7XG4gICAgfSwgQS5hc3NpZ25Bc1NpbmdsZXRvbih0aGlzKSwgdGhpcy5vanNWZXJzaW9uID0gXCIwLjEuMThcIiwgdGhpcy5vanNSZWxlYXNlVmVyc2lvbiA9IFwibG9jYWxfYnVpbGRcIiwgdGhpcy5iYXNlVXJsID0gci5iYXNlVXJsID8/IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgdGhpcy5jb25maWcgPSB7IC4uLnIsIGJhc2VVcmw6IHRoaXMuYmFzZVVybCB9LCB0aGlzLmZvcm1DYWxsYmFja3MgPSBsZS5mcm9tT2JqZWN0KHIpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIHRoaXMuZm9ybUlkID0gYG9wanMtZm9ybS0ke3dpbmRvdy5jcnlwdG8ucmFuZG9tVVVJRCgpfWAsIHRoaXMucmVmZXJyZXIgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luLCB0aGlzLmZvcm1UYXJnZXQgPSByLmZvcm1UYXJnZXQgPz8gXCJib2R5XCIsIHRoaXMuZm9ybVByb3BlcnRpZXMgPSB7IGhlaWdodDogXCIxcHhcIiB9LCB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyID0gbmV3IHZvKCksIHRoaXMuZXZlbnRIYW5kbGVyID0gbmV3IGdvKHRoaXMuZm9ybUlkLCB0aGlzLmJhc2VVcmwsIHRoaXMuZm9ybUNhbGxiYWNrcywge1xuICAgICAgc2V0Rm9ybUhlaWdodDogdGhpcy5zZXRGb3JtSGVpZ2h0LFxuICAgICAgb25DZGVMb2FkZWQ6IHRoaXMub25DZGVMb2FkZWQsXG4gICAgICBvbkNkZUxvYWRFcnJvcjogdGhpcy5vbkNkZUxvYWRFcnJvclxuICAgIH0pLCB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSksIHRoaXMuc3RhcnRGb3JtSW5pdCgpO1xuICB9XG4gIGdldCBjaGVja291dFNlY3VyZVRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuO1xuICB9XG59O1xuQS5vanNGbG93cyA9IFUsIEEuYXNzaWduQXNTaW5nbGV0b24gPSAocikgPT4ge1xuICBpZiAoQS5nZXRJbnN0YW5jZSgpKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgaW5zdGFuY2UgYWxyZWFkeSBleGlzdHMuIE9ubHkgb25lIGluc3RhbmNlIGlzIGFsbG93ZWQuXCIpO1xuICB3aW5kb3cub2pzID0gcjtcbn0sIEEuZ2V0SW5zdGFuY2UgPSAoKSA9PiB3aW5kb3cub2pzID8/IG51bGwsIEEuYnVpbGRPanNGbG93Q29udGV4dCA9IChyLCBlLCBuLCBpKSA9PiAoe1xuICBiYXNlVXJsOiBuZXcgVVJMKHIuYmFzZVVybCA/PyBtdCkub3JpZ2luLFxuICBmb3JtRGl2OiBpLFxuICBlbGVtZW50c1Nlc3Npb25JZDogZS5zZXNzaW9uSWQsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgYW55Q2RlQ29ubmVjdGlvbjogbixcbiAgY3VzdG9tSW5pdFBhcmFtczogci5jdXN0b21Jbml0UGFyYW1zID8/IHt9XG59KTtcbmxldCBGZSA9IEE7XG5cbmNvbnN0IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyA9IChwcm9wcykgPT4ge1xuICBjb25zdCBmb3JtQ2FsbGJhY2tzUmVmID0gdXNlUmVmKHByb3BzKTtcbiAgY29uc3QgY2IgPSBmb3JtQ2FsbGJhY2tzUmVmLmN1cnJlbnQ7XG4gIGNiLm9uTG9hZCA9IHVzZU1lbW8oKCkgPT4gcHJvcHMub25Mb2FkLCBbcHJvcHMub25Mb2FkXSk7XG4gIGNiLm9uTG9hZEVycm9yID0gdXNlTWVtbygoKSA9PiBwcm9wcy5vbkxvYWRFcnJvciwgW3Byb3BzLm9uTG9hZEVycm9yXSk7XG4gIGNiLm9uVmFsaWRhdGlvbkVycm9yID0gdXNlTWVtbygoKSA9PiBwcm9wcy5vblZhbGlkYXRpb25FcnJvciwgW3Byb3BzLm9uVmFsaWRhdGlvbkVycm9yXSk7XG4gIGNiLm9uRm9jdXMgPSB1c2VNZW1vKCgpID0+IHByb3BzLm9uRm9jdXMsIFtwcm9wcy5vbkZvY3VzXSk7XG4gIGNiLm9uQmx1ciA9IHVzZU1lbW8oKCkgPT4gcHJvcHMub25CbHVyLCBbcHJvcHMub25CbHVyXSk7XG4gIGNiLm9uQ2hhbmdlID0gdXNlTWVtbygoKSA9PiBwcm9wcy5vbkNoYW5nZSwgW3Byb3BzLm9uQ2hhbmdlXSk7XG4gIGNiLm9uQ2hlY2tvdXRTdGFydGVkID0gdXNlTWVtbygoKSA9PiBwcm9wcy5vbkNoZWNrb3V0U3RhcnRlZCwgW3Byb3BzLm9uQ2hlY2tvdXRTdGFydGVkXSk7XG4gIGNiLm9uQ2hlY2tvdXRTdWNjZXNzID0gdXNlTWVtbygoKSA9PiBwcm9wcy5vbkNoZWNrb3V0U3VjY2VzcywgW3Byb3BzLm9uQ2hlY2tvdXRTdWNjZXNzXSk7XG4gIGNiLm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gcHJvcHMub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzLFxuICAgIFtwcm9wcy5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3NdXG4gICk7XG4gIGNiLm9uQ2hlY2tvdXRFcnJvciA9IHVzZU1lbW8oKCkgPT4gcHJvcHMub25DaGVja291dEVycm9yLCBbcHJvcHMub25DaGVja291dEVycm9yXSk7XG4gIGNiLm9uUGF5bWVudFJlcXVlc3RMb2FkID0gdXNlTWVtbygoKSA9PiBwcm9wcy5vblBheW1lbnRSZXF1ZXN0TG9hZCwgW3Byb3BzLm9uUGF5bWVudFJlcXVlc3RMb2FkXSk7XG4gIHJldHVybiBmb3JtQ2FsbGJhY2tzUmVmLmN1cnJlbnQ7XG59O1xuXG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxKTtcbmNvbnN0IFpvZEZpZWxkRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgY29kZTogeiQxLnN0cmluZygpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIHBhdGg6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5hcnJheShab2RGaWVsZEVycm9yKTtcbmNvbnN0IG1ha2VDYWxsYmFja1NhZmUgPSAoY2FsbGJhY2tOYW1lLCBmbiwgZXJyb3JMb2dnZXIpID0+IHtcbiAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmbiguLi5hcmdzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyb3JMb2dnZXIoYFtmb3JtXSBFcnJvciBydW5uaW5nIGNhbGxiYWNrICgke2NhbGxiYWNrTmFtZX0pOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICB9O1xufTtcblxuY29uc3QgUmVxdWlyZWRTdHJpbmcgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBDYW5ub3QgYmUgYmxhbmtgIH0pO1xuY29uc3QgT3B0aW9uYWxTdHJpbmcgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCk7XG5jb25zdCBudWxsT3JVbmRlZk9yJDEgPSAoelR5cGUpID0+IHokMS5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkVNQUlMXCJdID0gXCJlbWFpbFwiO1xuICBGaWVsZE5hbWUyW1wiWklQX0NPREVcIl0gPSBcInppcENvZGVcIjtcbiAgRmllbGROYW1lMltcIkNJVFlcIl0gPSBcImNpdHlcIjtcbiAgRmllbGROYW1lMltcIlNUQVRFXCJdID0gXCJzdGF0ZVwiO1xuICBGaWVsZE5hbWUyW1wiQ09VTlRSWVwiXSA9IFwiY291bnRyeVwiO1xuICBGaWVsZE5hbWUyW1wiQUREUkVTU1wiXSA9IFwiYWRkcmVzc1wiO1xuICBGaWVsZE5hbWUyW1wiUEhPTkVcIl0gPSBcInBob25lXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0geiQxLm5hdGl2ZUVudW0oRmllbGROYW1lKTtcbnZhciBQcml2YXRlRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoUHJpdmF0ZUZpZWxkTmFtZTIpID0+IHtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZE51bWJlclwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkRXhwaXJ5XCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmRDdmNcIjtcbiAgcmV0dXJuIFByaXZhdGVGaWVsZE5hbWUyO1xufSkoUHJpdmF0ZUZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBQcml2YXRlRmllbGROYW1lRW51bSA9IHokMS5uYXRpdmVFbnVtKFByaXZhdGVGaWVsZE5hbWUpO1xuY29uc3QgQWxsRmllbGROYW1lcyA9IHokMS51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbnokMS5uYXRpdmVFbnVtKEVsZW1lbnRUeXBlRW51bSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QkMSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRNZXRob2RNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNhcmROdW1iZXI6IE9wdGlvbmFsU3RyaW5nLFxuICBleHBpcnk6IE9wdGlvbmFsU3RyaW5nLFxuICBjdmM6IE9wdGlvbmFsU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBiYWNrZ3JvdW5kQ29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBjb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRGYW1pbHk6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250U2l6ZTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRXZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICBtYXJnaW46IE9wdGlvbmFsU3RyaW5nLFxuICBwYWRkaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGV0dGVyU3BhY2luZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxpbmVIZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICBoaWRlSWNvbjogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgRXZlbnRUeXBlID0geiQxLmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSk7XG5jb25zdCBHZW5lcmljRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3QoeyB0eXBlOiBHZW5lcmljRXZlbnRUeXBlIH0pO1xuY29uc3QgSW5wdXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pO1xuY29uc3QgSW5wdXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogSW5wdXRFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBQcml2YXRlRmllbGROYW1lRW51bSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pO1xuY29uc3QgRXJyb3JFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogRXJyb3JFdmVudFR5cGUsXG4gIG1lc3NhZ2U6IFJlcXVpcmVkU3RyaW5nLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IEFsbEZpZWxkTmFtZXMsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgTGF5b3V0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgTG9hZGVkRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IE9wdGlvbmFsU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6JDEuYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEpXG59KTtcbmNvbnN0IFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHokMS5vcHRpb25hbCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFJlcXVpcmVkRm9ybUZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFBSRm9ybUZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBTdWJtaXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKTtcbmNvbnN0IFN1Ym1pdEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBTdWJtaXRFdmVudFR5cGUsXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHokMS5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBFdmVudFBheWxvYWQgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIEdlbmVyaWNFdmVudFBheWxvYWQsXG4gIElucHV0RXZlbnRQYXlsb2FkLFxuICBFcnJvckV2ZW50UGF5bG9hZCxcbiAgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkLFxuICBMYXlvdXRFdmVudFBheWxvYWQsXG4gIExvYWRlZEV2ZW50UGF5bG9hZCxcbiAgU3VibWl0RXZlbnRQYXlsb2FkLFxuICBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkLFxuICBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZFxuXSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIGFtb3VudEF0b206IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogeiQxLmFycmF5KFBheW1lbnRNZXRob2RNaW5pbWFsKVxufSk7XG5jb25zdCBGaWVsZFZhbGlkYXRpb25FcnJvciA9IHokMS5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogeiQxLnN0cmluZygpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBzdWNjZXNzOiB6JDEubGl0ZXJhbChmYWxzZSksXG4gIGVycm9yX3R5cGU6IHokMS5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoRmllbGRWYWxpZGF0aW9uRXJyb3IpXG59KTtcbnokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgeiQxLm9iamVjdCh7IHN1Y2Nlc3M6IHokMS5saXRlcmFsKHRydWUpIH0pLFxuICBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlXG5dKTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6JDEuc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIGNvbnNlbnRfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG59KTtcblxuY29uc3QgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcgPSAoc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdHlsZXMgPSBKU09OLnN0cmluZ2lmeShzdHlsZXMpO1xuICByZXR1cm4gc2VyaWFsaXplZFN0eWxlcztcbn07XG5cbmNvbnN0IG51bGxPclVuZGVmT3IgPSAoelR5cGUpID0+IHokMS5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG56JDEub2JqZWN0KHtcbiAgY2RlX3Jlc3BvbnNlX3R5cGU6IHokMS5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56JDEuZW51bShbXCJ1c2RcIiwgXCJicmxcIl0pO1xuY29uc3QgQ291cG9uTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogeiQxLnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKVxufSk7XG5jb25zdCBMaW5lSXRlbSA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpLmludCgpKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBCcmFuZFNldHRpbmdzID0geiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSk7XG5jb25zdCBCcmFuZCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIHNldHRpbmdzOiBudWxsT3JVbmRlZk9yKEJyYW5kU2V0dGluZ3MpXG59KTtcbmNvbnN0IENoZWNrb3V0UGF5bWVudE1ldGhvZCA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGlkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkuaW50KCkpLFxuICBzdWJzY3JpcHRpb25faXRlbXM6IHokMS5hcnJheShTdWJzY3JpcHRpb25JdGVtTWluaW1hbCksXG4gIHRyaWFsX3N0YXJ0OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpXG59KTtcbmNvbnN0IEludm9pY2VMaW5lSXRlbU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IERpc2NvdW50TWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjb3Vwb246IENvdXBvbk1pbmltYWxcbn0pO1xuY29uc3QgSW52b2ljZU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6JDEuYXJyYXkoRGlzY291bnRNaW5pbWFsKSxcbiAgaG9zdGVkX2ludm9pY2VfdXJsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmVzOiB6JDEuYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsKVxufSk7XG5jb25zdCBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY3JlYXRlZDogeiQxLmFycmF5KFN1YnNjcmlwdGlvbk1pbmltYWwpLFxuICBpbnZvaWNlczogeiQxLmFycmF5KEludm9pY2VNaW5pbWFsKVxufSk7XG5jb25zdCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBwcmV2aWV3OiBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogbnVsbE9yVW5kZWZPcihDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwpLFxuICBjb3Vwb25zOiB6JDEuYXJyYXkoQ291cG9uTWluaW1hbClcbn0pO1xuY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwib3BlblwiKSxcbiAgdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KExpbmVJdGVtKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IEJyYW5kLFxuICBzdWJzX3ByZXZpZXc6IG51bGxPclVuZGVmT3IoUHJldmlld0NoZWNrb3V0UmVzcG9uc2UpLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHokMS5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QpXG59KTtcbmNvbnN0IFBheW1lbnRGb3JtUHJlZmlsbCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogeiQxLm51bGxhYmxlKHokMS51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpLFxuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEuZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogeiQxLnN0cmluZygpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKVxuXSk7XG5jb25zdCBDb21wbGV0ZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pO1xuY29uc3QgRXhwaXJlZEZvcm1QcmVmaWxsID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnokMS51bmlvbihbUGF5bWVudEZvcm1QcmVmaWxsLCBDb21wbGV0ZWRGb3JtUHJlZmlsbCwgRXhwaXJlZEZvcm1QcmVmaWxsXSk7XG56JDEub2JqZWN0KHtcbiAgbG9nbzogeiQxLnN0cmluZygpLFxuICBpY29uOiB6JDEuc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHokMS5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogeiQxLmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6JDEuc3RyaW5nKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShMaW5lSXRlbSksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yKTtcbnokMS5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleGlzdGluZ19jY19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2Rcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG59KTtcbnokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNjX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLnJlY29yZCh6JDEuYW55KCkpO1xuXG5mdW5jdGlvbiBmaXhQcm90byh0YXJnZXQsIHByb3RvdHlwZSkge1xuICB2YXIgc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIHNldFByb3RvdHlwZU9mID8gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90b3R5cGUpIDogdGFyZ2V0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTtcbn1cbmZ1bmN0aW9uIGZpeFN0YWNrKHRhcmdldCwgZm4pIHtcbiAgaWYgKGZuID09PSB2b2lkIDApIHtcbiAgICBmbiA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIHZhciBjYXB0dXJlU3RhY2tUcmFjZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuICBjYXB0dXJlU3RhY2tUcmFjZSAmJiBjYXB0dXJlU3RhY2tUcmFjZSh0YXJnZXQsIGZuKTtcbn1cblxudmFyIF9fZXh0ZW5kcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZC5fX3Byb3RvX18gPSBiO1xuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcblxuICAgIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuXG4gICAgZnVuY3Rpb24gX18oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgICB9XG5cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gIH07XG59KCk7XG5cbihmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyhDdXN0b21FcnJvciwgX3N1cGVyKTtcblxuICBmdW5jdGlvbiBDdXN0b21FcnJvcihtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgdmFyIF9uZXdUYXJnZXQgPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbWVzc2FnZSwgb3B0aW9ucykgfHwgdGhpcztcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ25hbWUnLCB7XG4gICAgICB2YWx1ZTogX25ld1RhcmdldC5uYW1lLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBmaXhQcm90byhfdGhpcywgX25ld1RhcmdldC5wcm90b3R5cGUpO1xuICAgIGZpeFN0YWNrKF90aGlzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICByZXR1cm4gQ3VzdG9tRXJyb3I7XG59KShFcnJvcik7XG5cbmNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICBjb25zdCBsb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ubG9nKGAke0IuZ3JlZW4uYm9sZChcIm9qcy9cIil9JHtCLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgY29uc3QgZXJyID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmVycm9yKGAke0IucmVkLmJvbGQoXCJvanMvXCIpfSR7Qi5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nLFxuICAgIGVycixcbiAgICBsb2dfXzogbG9nLFxuICAgIGVycl9fOiBlcnJcbiAgfTtcbn07XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS51bmlvbihbeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG5cbmNvbnN0IFBSX0xPQURJTkcgPSB7XG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgc3RhcnRGbG93IHRyaWdnZXJlZCB3aGlsZSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbm90IHJlYWR5LiBcbiAgICAgIFlvdSBjYW4gY2hlY2sgdGhlIFwiLmlzTG9hZGluZ1wiIHBhcmFtIHRvIGtub3cgd2hlbiBhIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBsb2FkaW5nLCBcbiAgICAgIGFuZCBcIi5pc0F2YWlsYWJsZVwiIHRvIGtub3cgaWYgYSBwYXltZW50IHJlcXVlc3QgaXMgYXZhaWxhYmxlLmBcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImZvcm0tY2FsbGJhY2tzXCIpO1xuY29uc3QgT3B0aW9uYWxGbiA9IHokMS5mdW5jdGlvbigpLm9wdGlvbmFsKCk7XG5jb25zdCBab2RGb3JtQ2FsbGJhY2tzID0geiQxLm9iamVjdCh7XG4gIG9uRm9jdXM6IE9wdGlvbmFsRm4sXG4gIG9uQmx1cjogT3B0aW9uYWxGbixcbiAgb25DaGFuZ2U6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZDogT3B0aW9uYWxGbixcbiAgb25Mb2FkRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uVmFsaWRhdGlvbkVycm9yOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3RhcnRlZDogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25DaGVja291dEVycm9yOiBPcHRpb25hbEZuLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDogT3B0aW9uYWxGblxufSk7XG5jbGFzcyBGb3JtQ2FsbGJhY2tzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLyoqXG4gICAgICogU2V0cyBBTEwgZm9ybSBjYWxsYmFja3MuIE5vdGUgdGhhdCBhbGwgb2xkIGNhbGxiYWNrcyBhcmUgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICB0aGlzLnNldENhbGxiYWNrcyA9IChyYXdDYWxsYmFja3MpID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJhd0NhbGxiYWNrcykuZm9yRWFjaCgoW2tleSwgcmF3Q2FsbGJhY2tdKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhZmVDYWxsYmFjayA9IG1ha2VDYWxsYmFja1NhZmUoa2V5LCByYXdDYWxsYmFjayA/PyBGb3JtQ2FsbGJhY2tzLk5PT1AsIGVycl9fKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2tleV0gPSBzYWZlQ2FsbGJhY2s7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuTk9PUCA9ICgpID0+IHtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHggPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKFpvZEZvcm1DYWxsYmFja3Mua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgeFtrZXldID0gRm9ybUNhbGxiYWNrcy5OT09QO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5mcm9tT2JqZWN0ID0gKG9iaikgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRm9ybUNhbGxiYWNrcygpO1xuICAgICAgaW5zdGFuY2Uuc2V0Q2FsbGJhY2tzKFpvZEZvcm1DYWxsYmFja3MucGFyc2Uob2JqKSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufVxuXG5jb25zdCB1c2VQYXltZW50UmVxdWVzdHMgPSAob3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZCkgPT4ge1xuICBjb25zdCBbcGF5bWVudFJlcXVlc3RzLCBzZXRQYXltZW50UmVxdWVzdHNdID0gdXNlU3RhdGUoe1xuICAgIGFwcGxlX3BheTogUFJfTE9BRElORyxcbiAgICBnb29nbGVfcGF5OiBQUl9MT0FESU5HXG4gIH0pO1xuICBjb25zdCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCA9IHVzZUNhbGxiYWNrKFxuICAgIChwYXltZW50UmVxdWVzdHMyKSA9PiB7XG4gICAgICBzZXRQYXltZW50UmVxdWVzdHMocGF5bWVudFJlcXVlc3RzMik7XG4gICAgICBvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkPy4ocGF5bWVudFJlcXVlc3RzMik7XG4gICAgfSxcbiAgICBbb3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZF1cbiAgKTtcbiAgcmV0dXJuIHsgcGF5bWVudFJlcXVlc3RzLCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCB9O1xufTtcblxuY29uc3QgRk9STV9UQVJHRVQgPSBcIm9wX29qc19mb3JtXCI7XG5jb25zdCBFbGVtZW50c0Zvcm0gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgW29wRm9ybSwgc2V0T3BGb3JtXSA9IHVzZVN0YXRlKCk7XG4gIGNvbnN0IFtlbGVtZW50c0NvbnRleHRWYWx1ZSwgc2V0RWxlbWVudHNDb250ZXh0VmFsdWVdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IHsgcGF5bWVudFJlcXVlc3RzLCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCB9ID0gdXNlUGF5bWVudFJlcXVlc3RzKHByb3BzLm9uUGF5bWVudFJlcXVlc3RMb2FkKTtcbiAgY29uc3QgW2xvYWRlZCwgc2V0TG9hZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3N0cmlwZUxpbmtDdHJsLCBzZXRTdHJpcGVMaW5rQ3RybF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyh7XG4gICAgLi4ucHJvcHMsXG4gICAgb25QYXltZW50UmVxdWVzdExvYWQ6IG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkLFxuICAgIG9uTG9hZDogKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KSA9PiB7XG4gICAgICBzZXRMb2FkZWQodHJ1ZSk7XG4gICAgICBwcm9wcy5vbkxvYWQ/Lih0b3RhbEFtb3VudEF0b21zLCBjdXJyZW5jeSk7XG4gICAgfVxuICB9KTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob3BGb3JtKSByZXR1cm47XG4gICAgY29uc3QgZm9ybSA9IEZlLmdldEluc3RhbmNlKCkgPz8gbmV3IEZlKHtcbiAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHByb3BzLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICBmb3JtVGFyZ2V0OiBgIyR7Rk9STV9UQVJHRVR9YCxcbiAgICAgIGJhc2VVcmw6IHByb3BzLmJhc2VVcmwsXG4gICAgICBjdXN0b21Jbml0UGFyYW1zOiBwcm9wcy5jdXN0b21Jbml0UGFyYW1zLFxuICAgICAgLi4uZm9ybUNhbGxiYWNrc1xuICAgIH0pO1xuICAgIHNldE9wRm9ybShmb3JtKTtcbiAgICBjb25zdCB2YWx1ZSA9IGdldEVsZW1lbnRzQ29udGV4dFZhbHVlKGZvcm0pO1xuICAgIHNldEVsZW1lbnRzQ29udGV4dFZhbHVlKHZhbHVlKTtcbiAgICBmb3JtLmluaXRGbG93cy5zdHJpcGVMaW5rLnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldFN0cmlwZUxpbmtDdHJsKHJlc3VsdC5sb2FkZWRWYWx1ZS5jb250cm9sbGVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgW10pO1xuICBpZiAoIW9wRm9ybSkge1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSk7XG4gIH1cbiAgY29uc3QgY2hpbGRyZW5Qcm9wcyA9IHtcbiAgICBzdWJtaXQ6IG9wRm9ybS5zdWJtaXRDYXJkLFxuICAgIGFwcGxlUGF5OiBwYXltZW50UmVxdWVzdHMuYXBwbGVfcGF5LFxuICAgIGdvb2dsZVBheTogcGF5bWVudFJlcXVlc3RzLmdvb2dsZV9wYXksXG4gICAgbG9hZGVkLFxuICAgIC8vIERpc2FibGUgZHluYW1pYyBwcmV2aWV3cyBmZWF0dXJlIGZvciBub3dcbiAgICBwcmV2aWV3OiB7XG4gICAgICBhbW91bnQ6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9LFxuICAgIHN0cmlwZUxpbms6IHN0cmlwZUxpbmtDdHJsXG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7IGNoaWxkcmVuOiBlbGVtZW50c0NvbnRleHRWYWx1ZSA/IC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudHNDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBlbGVtZW50c0NvbnRleHRWYWx1ZSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwgeyBpZDogRk9STV9UQVJHRVQsIGNsYXNzTmFtZTogcHJvcHMuY2xhc3NOYW1lLCBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW4oY2hpbGRyZW5Qcm9wcykgfSkgfSkgOiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSkgfSk7XG59O1xuY29uc3QgZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUgPSAob3BGb3JtKSA9PiB7XG4gIHJldHVybiB7XG4gICAgZm9ybUlkOiBvcEZvcm0uZm9ybUlkLFxuICAgIGZvcm1IZWlnaHQ6IG9wRm9ybS5mb3JtUHJvcGVydGllcy5oZWlnaHQsXG4gICAgcmVmZXJyZXI6IG9wRm9ybS5yZWZlcnJlcixcbiAgICBjaGVja291dFNlY3VyZVRva2VuOiBvcEZvcm0uY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICByZWdpc3RlcklmcmFtZTogb3BGb3JtLnJlZ2lzdGVySWZyYW1lLFxuICAgIGJhc2VVcmw6IG9wRm9ybS5iYXNlVXJsXG4gIH07XG59O1xuXG5jb25zdCBFbGVtZW50RnJhbWUgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBlbGVtZW50VHlwZSwgc3R5bGVzIH0gPSBwcm9wcztcbiAgY29uc3QgeyBmb3JtSWQsIHJlZmVycmVyLCBmb3JtSGVpZ2h0LCBjaGVja291dFNlY3VyZVRva2VuLCByZWdpc3RlcklmcmFtZSwgYmFzZVVybCB9ID0gdXNlT3BlblBheUVsZW1lbnRzKCk7XG4gIGNvbnN0IHN1YlBhdGggPSBlbGVtZW50VHlwZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBbaGFzTG9hZGVkLCBzZXRIYXNMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpZnJhbWVSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGVsZW1lbnRTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc3R5bGVzKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcoc3R5bGVzKTtcbiAgfSwgW3N0eWxlc10pO1xuICBjb25zdCBmcmFtZVN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IGZvcm1IZWlnaHRcbiAgICB9O1xuICB9LCBbZm9ybUhlaWdodF0pO1xuICBjb25zdCBxdWVyeVN0cmluZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbiB8fCAhcmVmZXJyZXIpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwicmVmZXJlclwiLCByZWZlcnJlcik7XG4gICAgcGFyYW1zLmFwcGVuZChcInN0eWxlc1wiLCBlbGVtZW50U3R5bGUpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJmb3JtSWRcIiwgZm9ybUlkKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgcmV0dXJuIHBhcmFtcy50b1N0cmluZygpO1xuICB9LCBbZWxlbWVudFN0eWxlLCBmb3JtSWQsIHJlZmVycmVyLCBjaGVja291dFNlY3VyZVRva2VuXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiBzZXRIYXNMb2FkZWQodHJ1ZSksIFtdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlmcmFtZVJlZi5jdXJyZW50IHx8ICFoYXNMb2FkZWQpIHJldHVybjtcbiAgICByZWdpc3RlcklmcmFtZShlbGVtZW50VHlwZSwgaWZyYW1lUmVmLmN1cnJlbnQpO1xuICB9LCBbaGFzTG9hZGVkXSk7XG4gIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbZm9ybV0gQ2Fubm90IHJlbmRlciBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgZnJhbWVcIik7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwge30pO1xuICB9XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFwiaWZyYW1lXCIsXG4gICAge1xuICAgICAgaWQ6IGBvanMtJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIG5hbWU6IGAke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgY2xhc3NOYW1lOiBcIm9qcy1pZnJhbWVcIixcbiAgICAgIHNyYzogYCR7YmFzZVVybH0vYXBwL3YxLyR7c3ViUGF0aH0tZWxlbWVudC8/JHtxdWVyeVN0cmluZ31gLFxuICAgICAgc3R5bGU6IGZyYW1lU3R5bGUsXG4gICAgICByZWY6IGlmcmFtZVJlZlxuICAgIH1cbiAgKTtcbn07XG5cbmNvbnN0IENhcmRDdmNFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0NWQyB9KTtcbn07XG5cbmNvbnN0IENhcmRFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEIH0pO1xufTtcblxuY29uc3QgQ2FyZEV4cGlyeUVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfRVhQSVJZIH0pO1xufTtcblxuY29uc3QgQ2FyZE51bWJlckVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfTlVNQkVSIH0pO1xufTtcblxuZXhwb3J0IHsgQ2FyZEN2Y0VsZW1lbnQsIENhcmRFbGVtZW50LCBDYXJkRXhwaXJ5RWxlbWVudCwgQ2FyZE51bWJlckVsZW1lbnQsIEVsZW1lbnRzRm9ybSwgRmllbGROYW1lLCB1c2VPcGVuUGF5RWxlbWVudHMgfTsiXSwKICAibWFwcGluZ3Mi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QUFDLEdBR3RGMEgsS0FBYyxDQUFDLEVBQUUsUUFBQS9GLEVBQU8sTUFDTCxnQkFBQXJWLEVBQUltYSxJQUFjLEVBQUUsUUFBQTlFLEdBQVEsYUFBYTNCLEVBQWdCLEtBQUssQ0FBQyxHQUdsRjJILEtBQW9CLENBQUMsRUFBRSxRQUFBaEcsRUFBTyxNQUNYLGdCQUFBclYsRUFBSW1hLElBQWMsRUFBRSxRQUFBOUUsR0FBUSxhQUFhM0IsRUFBZ0IsWUFBWSxDQUFDLEdBR3pGNEgsS0FBb0IsQ0FBQyxFQUFFLFFBQUFqRyxFQUFPLE1BQ1gsZ0JBQUFyVixFQUFJbWEsSUFBYyxFQUFFLFFBQUE5RSxHQUFRLGFBQWEzQixFQUFnQixZQUFZLENBQUM7IiwKICAibmFtZXMiOiBbImNyZWF0ZUNvbnRleHQiLCAidXNlQ29udGV4dCIsICJ1c2VSZWYiLCAidXNlTWVtbyIsICJ1c2VTdGF0ZSIsICJ1c2VDYWxsYmFjayIsICJ1c2VFZmZlY3QiLCAianN4IiwgIkZyYWdtZW50IiwgInokMSIsICJjb25uZWN0VG9DaGlsZCIsICJCIiwgIkVsZW1lbnRzQ29udGV4dCIsICJ1c2VPcGVuUGF5RWxlbWVudHMiLCAiY29udGV4dCIsICJtdCIsICJ5dCIsICJfdCIsICJndCIsICJidCIsICJ2dCIsICJhZSIsICJ0IiwgInIiLCAid3QiLCAiRXQiLCAiZSIsICJTdCIsICJOIiwgIkN0IiwgIm4iLCAiUyIsICJ2IiwgIloiLCAibSIsICJOZSIsICJVZSIsICIkZSIsICJWZSIsICJGIiwgImt0IiwgImVlIiwgIlB0IiwgIlAiLCAiSXQiLCAiT3QiLCAiUnQiLCAiQXQiLCAiVHQiLCAianQiLCAiTXQiLCAiTHQiLCAiRHQiLCAiRnQiLCAieHQiLCAiTnQiLCAiViIsICJVdCIsICIkdCIsICJWdCIsICJxdCIsICJ6dCIsICJIdCIsICJZdCIsICJCdCIsICJKdCIsICJLdCIsICJHdCIsICJEIiwgIlp0IiwgIld0IiwgIlF0IiwgIlh0IiwgImVyIiwgInRyIiwgInRlIiwgImdlIiwgIm9yIiwgInJyIiwgIm5yIiwgImlyIiwgInNyIiwgImFyIiwgImkiLCAicyIsICJhIiwgImMiLCAiY3IiLCAiZGUiLCAidXIiLCAibHIiLCAiZHIiLCAiZnIiLCAicWUiLCAiemUiLCAicHIiLCAiaHIiLCAicSIsICJtciIsICJ5ciIsICJIZSIsICJfciIsICJnciIsICJiciIsICJiZSIsICJZZSIsICJ2ZSIsICJCZSIsICJ2ciIsICJ3ciIsICJKZSIsICJFciIsICJTciIsICJLZSIsICJDciIsICJrciIsICJQciIsICJJciIsICJPciIsICJSciIsICJHZSIsICJJIiwgIlRyIiwgIkFyIiwgImpyIiwgInoiLCAiTXIiLCAiTHIiLCAiRHIiLCAiZmUiLCAiRnIiLCAiWmUiLCAieHIiLCAid2UiLCAiTnIiLCAiV2UiLCAiUWUiLCAiVXIiLCAiWGUiLCAicGUiLCAiZXQiLCAiTyIsICJQbyIsICIkciIsICJoZSIsICJ0dCIsICJWciIsICJydCIsICJtZSIsICJxciIsICJFZSIsICJ3IiwgInpyIiwgIkhyIiwgIllyIiwgIkJyIiwgImgiLCAiZiIsICJVIiwgIkdyIiwgIkpyIiwgIktyIiwgImQiLCAiXyIsICJsIiwgInUiLCAiWnIiLCAiV3IiLCAiUXIiLCAiWHIiLCAibnQiLCAiZW4iLCAidG4iLCAib3QiLCAicm4iLCAibm4iLCAib24iLCAic24iLCAiYW4iLCAiU2UiLCAiQ2UiLCAiY24iLCAieSIsICJmbiIsICJkbiIsICJ1biIsICJsbiIsICJDIiwgInBuIiwgImhuIiwgIm1uIiwgInluIiwgImduIiwgIl9uIiwgImJuIiwgIml0IiwgImNlIiwgIkwiLCAidm4iLCAic3QiLCAiJCIsICJXIiwgIlEiLCAieCIsICJ3biIsICJZIiwgIkVuIiwgIkUiLCAicmUiLCAib2UiLCAiWCIsICJIIiwgImtlIiwgImF0IiwgImN0IiwgInV0IiwgImx0IiwgImR0IiwgIlBlIiwgIksiLCAieWUiLCAiUG4iLCAidWUiLCAiU24iLCAiaWUiLCAiQ24iLCAiSiIsICJrbiIsICJfZSIsICJJbiIsICJPbiIsICJUIiwgIkFuIiwgIkllIiwgIlJuIiwgIlRuIiwgImpuIiwgIk1uIiwgIkxuIiwgIkRuIiwgImZ0IiwgIk9lIiwgIkZuIiwgInhuIiwgIlJlIiwgIk5uIiwgIkFlIiwgIlVuIiwgIiRuIiwgIlZuIiwgInFuIiwgInpuIiwgIkhuIiwgIlluIiwgIkJuIiwgIkpuIiwgIktuIiwgIkduIiwgIlpuIiwgIlduIiwgIlFuIiwgIlhuIiwgImVvIiwgInB0IiwgInRvIiwgInJvIiwgIm5vIiwgIm9vIiwgImlvIiwgInNvIiwgImFvIiwgImNvIiwgInVvIiwgImxvIiwgImZvIiwgIm5lIiwgImh0IiwgIkciLCAicG8iLCAiaG8iLCAiVGUiLCAibW8iLCAieW8iLCAiX28iLCAiayIsICJqZSIsICJSIiwgImxlIiwgImdvIiwgIk1lIiwgImJvIiwgInZvIiwgIndvIiwgIkxlIiwgIkRlIiwgIk0iLCAic2UiLCAiQSIsICJGZSIsICJ1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MiLCAicHJvcHMiLCAiZm9ybUNhbGxiYWNrc1JlZiIsICJjYiIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxIiwgIlpvZEZpZWxkRXJyb3IiLCAibWFrZUNhbGxiYWNrU2FmZSIsICJjYWxsYmFja05hbWUiLCAiZXJyb3JMb2dnZXIiLCAiYXJncyIsICJlcnJvciIsICJSZXF1aXJlZFN0cmluZyIsICJPcHRpb25hbFN0cmluZyIsICJudWxsT3JVbmRlZk9yJDEiLCAielR5cGUiLCAiRmllbGROYW1lIiwgIkZpZWxkTmFtZTIiLCAiRmllbGROYW1lRW51bSIsICJQcml2YXRlRmllbGROYW1lIiwgIlByaXZhdGVGaWVsZE5hbWUyIiwgIlByaXZhdGVGaWVsZE5hbWVFbnVtIiwgIkFsbEZpZWxkTmFtZXMiLCAiRWxlbWVudFR5cGVFbnVtIiwgIkVsZW1lbnRUeXBlRW51bTIiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEiLCAiUGF5bWVudE1ldGhvZE1pbmltYWwiLCAiRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50UGF5bG9hZCIsICJJbnB1dEV2ZW50VHlwZSIsICJJbnB1dEV2ZW50UGF5bG9hZCIsICJFcnJvckV2ZW50VHlwZSIsICJFcnJvckV2ZW50UGF5bG9hZCIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkIiwgIkxheW91dEV2ZW50UGF5bG9hZCIsICJMb2FkZWRFdmVudFBheWxvYWQiLCAiUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkIiwgIlNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIlJlcXVpcmVkRm9ybUZpZWxkcyIsICJQUkZvcm1GaWVsZHMiLCAiU3VibWl0RXZlbnRUeXBlIiwgIlN1Ym1pdEV2ZW50UGF5bG9hZCIsICJUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkV2ZW50UGF5bG9hZCIsICJGaWVsZFZhbGlkYXRpb25FcnJvciIsICJUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgInN0eWxlcyIsICJudWxsT3JVbmRlZk9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJmaXhQcm90byIsICJ0YXJnZXQiLCAicHJvdG90eXBlIiwgInNldFByb3RvdHlwZU9mIiwgImZpeFN0YWNrIiwgImNhcHR1cmVTdGFja1RyYWNlIiwgIl9fZXh0ZW5kcyIsICJfZXh0ZW5kU3RhdGljcyIsICJiIiwgInAiLCAiX18iLCAiX3N1cGVyIiwgIkN1c3RvbUVycm9yIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJfbmV3VGFyZ2V0IiwgIl90aGlzIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgInByZWZpeCIsICJsb2ciLCAiZXJyIiwgIlBSX0xPQURJTkciLCAiZXJyX18iLCAiT3B0aW9uYWxGbiIsICJab2RGb3JtQ2FsbGJhY2tzIiwgIl9Gb3JtQ2FsbGJhY2tzIiwgInJhd0NhbGxiYWNrcyIsICJrZXkiLCAicmF3Q2FsbGJhY2siLCAic2FmZUNhbGxiYWNrIiwgIm9iaiIsICJpbnN0YW5jZSIsICJGb3JtQ2FsbGJhY2tzIiwgInVzZVBheW1lbnRSZXF1ZXN0cyIsICJvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkIiwgInBheW1lbnRSZXF1ZXN0cyIsICJzZXRQYXltZW50UmVxdWVzdHMiLCAib3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQiLCAicGF5bWVudFJlcXVlc3RzMiIsICJGT1JNX1RBUkdFVCIsICJFbGVtZW50c0Zvcm0iLCAib3BGb3JtIiwgInNldE9wRm9ybSIsICJlbGVtZW50c0NvbnRleHRWYWx1ZSIsICJzZXRFbGVtZW50c0NvbnRleHRWYWx1ZSIsICJsb2FkZWQiLCAic2V0TG9hZGVkIiwgInN0cmlwZUxpbmtDdHJsIiwgInNldFN0cmlwZUxpbmtDdHJsIiwgImZvcm1DYWxsYmFja3MiLCAidG90YWxBbW91bnRBdG9tcyIsICJjdXJyZW5jeSIsICJfYSIsICJmb3JtIiwgInZhbHVlIiwgImdldEVsZW1lbnRzQ29udGV4dFZhbHVlIiwgInJlc3VsdCIsICJjaGlsZHJlblByb3BzIiwgIkVsZW1lbnRGcmFtZSIsICJlbGVtZW50VHlwZSIsICJmb3JtSWQiLCAicmVmZXJyZXIiLCAiZm9ybUhlaWdodCIsICJjaGVja291dFNlY3VyZVRva2VuIiwgInJlZ2lzdGVySWZyYW1lIiwgImJhc2VVcmwiLCAic3ViUGF0aCIsICJoYXNMb2FkZWQiLCAic2V0SGFzTG9hZGVkIiwgImlmcmFtZVJlZiIsICJlbGVtZW50U3R5bGUiLCAiZnJhbWVTdHlsZSIsICJxdWVyeVN0cmluZyIsICJwYXJhbXMiLCAiQ2FyZEN2Y0VsZW1lbnQiLCAiQ2FyZEVsZW1lbnQiLCAiQ2FyZEV4cGlyeUVsZW1lbnQiLCAiQ2FyZE51bWJlckVsZW1lbnQiXQp9Cg==
|